#!/usr/bin/env bash
set -eu
os=$(uname -s)
linux_headless() {
  case "${DGE_ENROLL_HEADLESS:-}" in 1|true|yes|TRUE|YES) return 0 ;; esac
  [ -z "${DISPLAY:-}" ] && [ -z "${WAYLAND_DISPLAY:-}" ]
}
if [ "$os" != Linux ] && [ "$os" != Darwin ]; then
  echo 'This file is for Linux, macOS, or Ubuntu in WSL. On Windows, download Dorian Gray Worker.cmd from the setup page and open it.'
  exit 1
fi
if [ "$os" = Linux ] && [ ! -d /run/systemd/system ]; then
  echo 'This installer needs a Linux machine running systemd.'
  exit 1
fi
if [ "$os" = Darwin ] && [ "$(id -u)" -eq 0 ]; then
  echo 'Do not run this installer with sudo on a Mac. Run it as yourself.'
  exit 1
fi
if [ "$os" = Linux ] && [ "$(id -u)" -ne 0 ]; then
  echo 'Your computer may ask for its administrator password. It stays on this computer.'
  if ! linux_headless && command -v pkexec >/dev/null 2>&1 && { [ -n "${DISPLAY:-}" ] || [ -n "${WAYLAND_DISPLAY:-}" ]; }; then
    exec pkexec env DISPLAY="${DISPLAY:-}" WAYLAND_DISPLAY="${WAYLAND_DISPLAY:-}" XAUTHORITY="${XAUTHORITY:-}" \
      DGE_ENROLL_NAME="${DGE_ENROLL_NAME:-}" DGE_ENROLL_EMAIL="${DGE_ENROLL_EMAIL:-}" \
      DGE_ENROLL_PHONE="${DGE_ENROLL_PHONE:-}" DGE_ENROLL_NOTE="${DGE_ENROLL_NOTE:-}" \
      DGE_ENROLL_HEADLESS="${DGE_ENROLL_HEADLESS:-}" bash "$0"
  fi
  exec sudo \
    DGE_ENROLL_NAME="${DGE_ENROLL_NAME:-}" DGE_ENROLL_EMAIL="${DGE_ENROLL_EMAIL:-}" \
    DGE_ENROLL_PHONE="${DGE_ENROLL_PHONE:-}" DGE_ENROLL_NOTE="${DGE_ENROLL_NOTE:-}" \
    DGE_ENROLL_HEADLESS="${DGE_ENROLL_HEADLESS:-}" bash "$0"
fi
gui_user="${SUDO_USER:-}"
if [ -z "$gui_user" ] && [ -n "${PKEXEC_UID:-}" ]; then
  gui_user=$(getent passwd "$PKEXEC_UID" | cut -d: -f1 || true)
fi
unset DOCKER_HOST DOCKER_CONTEXT
python_bin=python3
umask 077
bootstrap_log=""
trap 'if [ -n "$bootstrap_log" ]; then rm -f "$bootstrap_log"; fi' EXIT
printf '\nDGE Worker Setup\nPreparing this computer to run background tasks.\n\n'
macos_python_ok() {
  [ -x "$1" ] && "$1" -c 'import sys; assert sys.version_info >= (3, 11)' >/dev/null 2>&1
}
macos_python() {
  local candidate
  local globbed
  globbed=()
  shopt -s nullglob
  globbed+=(
    /usr/local/Cellar/python@3.*/*/bin/python3.*
    /opt/homebrew/Cellar/python@3.*/*/bin/python3.*
  )
  shopt -u nullglob
  for candidate in "${globbed[@]}" \
      /usr/local/opt/python@3/bin/python3 \
      /opt/homebrew/opt/python@3/bin/python3 \
      /usr/local/opt/python@3.12/bin/python3.12 \
      /usr/local/opt/python@3.13/bin/python3.13 \
      /opt/homebrew/opt/python@3.12/bin/python3.12 \
      /opt/homebrew/opt/python@3.13/bin/python3.13 \
      /usr/local/bin/python3 \
      /opt/homebrew/bin/python3 \
      /usr/bin/python3 \
      python3; do
    case "$candidate" in *config*) continue ;; esac
    if macos_python_ok "$candidate"; then
      echo "$candidate"
      return 0
    fi
  done
  return 1
}
find_macos_brew() {
  export PATH="/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:${PATH:-}"
  if command -v brew >/dev/null 2>&1; then
    command -v brew
    return 0
  fi
  local candidate
  for candidate in /opt/homebrew/bin/brew /usr/local/bin/brew; do
    if [ -x "$candidate" ]; then
      echo "$candidate"
      return 0
    fi
  done
  return 1
}
install_macos_homebrew() {
  echo 'Installing Homebrew. macOS will ask for your password.' >&2
  if [[ ! -r /dev/tty || ! -w /dev/tty ]]; then
    echo 'Homebrew needs a terminal so macOS can ask for your password. Open Terminal and run this installer again.' >&2
    return 1
  fi
  local script file installer_pid watchdog_pid result elapsed timeout_marker
  bootstrap_log=$(mktemp "${TMPDIR:-/tmp}/dge-homebrew-log.XXXXXX")
  export DGE_BOOTSTRAP_LOG="$bootstrap_log"
  printf '%s\n' 'Installing Homebrew' >> "$bootstrap_log"
  if ! script=$(curl --connect-timeout 15 --max-time 120 -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh); then
    echo 'Could not download Homebrew. Check the network and run this installer again.' >&2
    return 1
  fi
  file=$(mktemp "${TMPDIR:-/tmp}/dge-homebrew.XXXXXX")
  timeout_marker="$file.timeout"
  printf '%s\n' "$script" > "$file"
  echo 'Homebrew installer downloaded. Starting installation...' >&2
  printf '%s\n' 'Homebrew installer downloaded. Starting installation...' >> "$bootstrap_log"
  # Homebrew treats a non-terminal stdin as "no sudo" and then says the account
  # is not an administrator. Give it the terminal so sudo can prompt.
  env -u NONINTERACTIVE -u CI INTERACTIVE=1 /bin/bash "$file" </dev/tty > >(tee -a "$bootstrap_log") 2>&1 &
  installer_pid=$!
  (
    elapsed=0
    while [ "$elapsed" -lt 600 ]; do
      sleep 15
      if ! kill -0 "$installer_pid" 2>/dev/null; then exit 0; fi
      elapsed=$((elapsed + 15))
      if [ "$elapsed" -ge 600 ]; then
        echo 'Homebrew did not finish within 10 minutes. Check your Mac network, then run setup again.' >&2
        printf '%s\n' 'Error: Homebrew timed out after 10 minutes' >> "$bootstrap_log"
        : > "$timeout_marker"
        kill -TERM "$installer_pid" 2>/dev/null || true
        sleep 5
        kill -KILL "$installer_pid" 2>/dev/null || true
      elif [ $((elapsed % 60)) -eq 0 ]; then
        echo 'Homebrew is still installing. This may include Apple Command Line Tools...' >&2
        printf '%s\n' 'Homebrew is still installing' >> "$bootstrap_log"
      fi
    done
  ) &
  watchdog_pid=$!
  if wait "$installer_pid"; then result=0; else result=$?; fi
  kill "$watchdog_pid" 2>/dev/null || true
  wait "$watchdog_pid" 2>/dev/null || true
  rm -f "$file"
  if [ -f "$timeout_marker" ]; then
    rm -f "$timeout_marker"
    return 1
  fi
  if [ "$result" -ne 0 ]; then
    echo 'Could not install Homebrew. Enter your Mac password when asked and run this installer again.' >&2
    return 1
  fi
  export PATH="/opt/homebrew/bin:/usr/local/bin:${PATH:-}"
}
ensure_macos_python() {
  local found brew
  found=$(macos_python) || found=""
  if [ -n "$found" ]; then
    printf '%s\n' "$found"
    return 0
  fi
  echo 'Installing Python 3. This may take a few minutes...' >&2
  brew=$(find_macos_brew) || brew=""
  if [ -z "$brew" ]; then
    install_macos_homebrew || return 1
    brew=$(find_macos_brew) || brew=""
  fi
  if [ -z "$brew" ]; then
    echo 'Could not install Homebrew. Approve the password prompt and run this installer again.' >&2
    return 1
  fi
  if ! "$brew" install python; then
    echo 'Could not install Python 3. Check the network, approve any password prompt, and run this installer again.' >&2
    return 1
  fi
  export PATH="/opt/homebrew/bin:/usr/local/bin:${PATH:-}"
  found=$(macos_python) || found=""
  if [ -z "$found" ]; then
    echo 'Python 3.11 or newer is required and could not be installed automatically. Check the network and run this installer again.' >&2
    return 1
  fi
  python_bin="$found"
}
if [ "$os" = Darwin ]; then
  export PATH="/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:$PATH"
  if [ -n "${SSH_CONNECTION:-}" ] && [ "${DGE_MAC_AQUA_LAUNCHED:-}" != 1 ]; then
    case "${DGE_ENROLL_HEADLESS:-}" in 1|true|yes|TRUE|YES) ;; *)
      script_file=$(cd "$(dirname "$0")" && pwd)/$(basename "$0")
      inner=$(printf 'export DGE_MAC_AQUA_LAUNCHED=1; exec bash %q' "$script_file")
      as=${inner//\\/\\\\}
      as=${as//\"/\\\"}
      osascript -e 'tell application "Terminal" to activate' \
        -e "tell application \"Terminal\" to do script \"$as\""
      exit 0
    ;; esac
  fi
  ensure_macos_python || exit 1
  setup_directory=$(mktemp -d "${TMPDIR:-/tmp}/dge-worker-install.XXXXXX")
else
  if ! python3 -c 'import sys; assert sys.version_info >= (3, 11)' >/dev/null 2>&1; then
    . /etc/os-release
    case "${ID}:${VERSION_ID}" in
      ubuntu:24.*|ubuntu:25.*|ubuntu:26.*|debian:12|debian:13)
        echo 'Installing Python. This may take a few minutes...'
        apt-get update -qq && apt-get install -y -qq python3 ca-certificates || { echo 'Python installation failed. Check your internet connection and run setup again.'; exit 1; }
        ;;
      *) echo 'This Linux version needs Python 3.11 or newer installed first. Ask your administrator for help, then run this installer again.'; exit 1 ;;
    esac
  fi
  python3 -c 'import sys; assert sys.version_info >= (3, 11)' || { echo 'Python 3.11 or newer is required.'; exit 1; }
  setup_directory=$(mktemp -d /run/dge-worker-install.XXXXXX)
fi
trap 'rm -rf "$setup_directory"; if [ -n "$bootstrap_log" ]; then rm -f "$bootstrap_log"; fi' EXIT
cat > "$setup_directory/payload" <<'DGE_SETUP_PAYLOAD'
eyJob3N0X2FwcC5weSI6IiMhL3Vzci9iaW4vZW52IHB5dGhvbjNcblwiXCJcIkluc3RhbGwgYSBkdXJhYmxlIERvcmlhbiBHcmF5IFdvcmtlciBsYXVuY2hlciBzbyB2b2x1bnRlZXJzIHJlb3BlbiBpdCBsaWtlIGFueSBvdGhlciBhcHAuXCJcIlwiXG5pbXBvcnQgYmFzZTY0XG5pbXBvcnQganNvblxuaW1wb3J0IG9zXG5pbXBvcnQgcHdkXG5pbXBvcnQgc2hsZXhcbmltcG9ydCBzaHV0aWxcbmltcG9ydCBzdWJwcm9jZXNzXG5pbXBvcnQgc3lzXG5pbXBvcnQgdXJsbGliLmVycm9yXG5pbXBvcnQgdXJsbGliLnJlcXVlc3RcbmZyb20gcGF0aGxpYiBpbXBvcnQgUGF0aFxuXG5BUFBfTkFNRSA9ICdEb3JpYW4gR3JheSBXb3JrZXInXG5BUFBfSUQgPSAnY29tLmRnZS53b3JrZXInXG5MSU5VWF9JQ09OX05BTUUgPSAnZGdlLXdvcmtlci1zZXR1cCdcbkxJTlVYX1dNX0NMQVNTID0gJ0RHRVdvcmtlclNldHVwJ1xuSE9TVF9BUFBfRU5WID0gJ0RHRV9IT1NUX0FQUCdcbkZJTEVTID0gKFxuICAgICdob3N0X2FwcC5weScsXG4gICAgJ2hvc3RfZ3VpLnB5JyxcbiAgICAnaG9zdF93ZWIuaHRtbCcsXG4gICAgJ2hvc3RfaW52ZW50b3J5LnB5JyxcbiAgICAnaG9zdF9pbnZlbnRvcnkucHMxJyxcbiAgICAnZGdlLWljb24ucG5nJyxcbiAgICAnZGdlLWljb24uaWNvJyxcbiAgICAnZGdlLWljb24ueHBtJyxcbiAgICAnY29uZmlnLmpzb24nLFxuICAgICdpbnN0YWxsLnB5JyxcbiAgICAnaW5zdGFsbF9tYWNvcy5weScsXG4gICAgJ3NldHVwX2xvZ19yZXBvcnRlci5weScsXG4gICAgJ21hY29zX3IyX3Byb3h5LnB5JyxcbiAgICAncHJlcGFyZV9tYWNoaW5lLnB5JyxcbiAgICAnc2V0dXAucHknLFxuICAgICdhZ2VudC5weScsXG4gICAgJ2xhdW5jaGVyLnB5JyxcbiAgICAndW5pbnN0YWxsLnB5JyxcbiAgICAnaW52aXRhdGlvbi5qc29uJyxcbilcblJFRlJFU0hfTkFNRVMgPSAoXG4gICAgJ2hvc3RfYXBwLnB5JyxcbiAgICAnaG9zdF9ndWkucHknLFxuICAgICdob3N0X3dlYi5odG1sJyxcbiAgICAnaG9zdF9pbnZlbnRvcnkucHknLFxuICAgICdob3N0X2ludmVudG9yeS5wczEnLFxuICAgICdzZXR1cC5weScsXG4gICAgJ2luc3RhbGwucHknLFxuICAgICdpbnN0YWxsX21hY29zLnB5JyxcbiAgICAnc2V0dXBfbG9nX3JlcG9ydGVyLnB5JyxcbiAgICAnbWFjb3NfcjJfcHJveHkucHknLFxuICAgICdwcmVwYXJlX21hY2hpbmUucHknLFxuICAgICdsYXVuY2hlci5weScsXG4gICAgJ3VuaW5zdGFsbC5weScsXG4gICAgJ2FnZW50LnB5JyxcbiAgICAnZGdlLWljb24ucG5nJyxcbiAgICAnZGdlLWljb24uaWNvJyxcbiAgICAnZGdlLWljb24ueHBtJyxcbilcblxuXG5kZWYgc291cmNlX3Jvb3QoKTpcbiAgICByZXR1cm4gUGF0aChfX2ZpbGVfXykucmVzb2x2ZSgpLnBhcmVudFxuXG5cbmRlZiBydW5uaW5nX2luX3dzbCgpOlxuICAgIGlmIG9zLmVudmlyb24uZ2V0KCdXU0xfRElTVFJPX05BTUUnKTpcbiAgICAgICAgcmV0dXJuIFRydWVcbiAgICB0cnk6XG4gICAgICAgIHJldHVybiAnbWljcm9zb2Z0JyBpbiBQYXRoKCcvcHJvYy92ZXJzaW9uJykucmVhZF90ZXh0KCkubG93ZXIoKVxuICAgIGV4Y2VwdCBPU0Vycm9yOlxuICAgICAgICByZXR1cm4gRmFsc2VcblxuXG5kZWYgZ3VpX3VzZXIoKTpcbiAgICBpZiBvcy5nZXRldWlkKCkgIT0gMDpcbiAgICAgICAgcmV0dXJuIHB3ZC5nZXRwd3VpZChvcy5nZXR1aWQoKSlcbiAgICBuYW1lID0gb3MuZW52aXJvbi5nZXQoJ1NVRE9fVVNFUicpXG4gICAgaWYgbmFtZSBhbmQgbmFtZSAhPSAncm9vdCc6XG4gICAgICAgIHJldHVybiBwd2QuZ2V0cHduYW0obmFtZSlcbiAgICB1aWQgPSBvcy5lbnZpcm9uLmdldCgnUEtFWEVDX1VJRCcpXG4gICAgaWYgdWlkIGFuZCB1aWQuaXNkaWdpdCgpIGFuZCBpbnQodWlkKSAhPSAwOlxuICAgICAgICByZXR1cm4gcHdkLmdldHB3dWlkKGludCh1aWQpKVxuICAgIHJldHVybiBwd2QuZ2V0cHd1aWQoMClcblxuXG5kZWYgZ3VpX2hvbWUoKTpcbiAgICByZXR1cm4gUGF0aChndWlfdXNlcigpLnB3X2RpcilcblxuXG5kZWYgbWFjX2FwcF9idW5kbGUoKTpcbiAgICByZXR1cm4gZ3VpX2hvbWUoKSAvICdBcHBsaWNhdGlvbnMnIC8gKEFQUF9OQU1FICsgJy5hcHAnKVxuXG5cbmRlZiBhcHBfaW5zdGFsbF9kaXIoKTpcbiAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6XG4gICAgICAgIHJldHVybiBtYWNfYXBwX2J1bmRsZSgpIC8gJ0NvbnRlbnRzJyAvICdSZXNvdXJjZXMnIC8gJ2FwcCdcbiAgICBpZiBydW5uaW5nX2luX3dzbCgpOlxuICAgICAgICByZXR1cm4gUGF0aCgnL29wdC9kZ2Utd29ya2VyL2hvc3QtdWknKVxuICAgIHJldHVybiBndWlfaG9tZSgpIC8gJy5sb2NhbCcgLyAnc2hhcmUnIC8gJ2RnZS13b3JrZXInIC8gJ2hvc3QtdWknXG5cblxuZGVmIHB5dGhvbl9mb3JfbGF1bmNoKCk6XG4gICAgZXhlID0gUGF0aChzeXMuZXhlY3V0YWJsZSkucmVzb2x2ZSgpXG4gICAgaWYgZXhlLm5hbWUgPT0gJ1B5dGhvbicgYW5kICdQeXRob24uYXBwJyBpbiBzdHIoZXhlKTpcbiAgICAgICAgY2FuZGlkYXRlID0gZXhlLnBhcmVudHNbM10gLyAnYmluJyAvICdweXRob24zJ1xuICAgICAgICBpZiBjYW5kaWRhdGUuZXhpc3RzKCk6XG4gICAgICAgICAgICByZXR1cm4gc3RyKGNhbmRpZGF0ZSlcbiAgICByZXR1cm4gc3RyKGV4ZSlcblxuXG5kZWYgY2hvd25fdHJlZShwYXRoLCB1c2VyKTpcbiAgICBpZiBvcy5nZXRldWlkKCkgIT0gMCBvciB1c2VyLnB3X3VpZCA9PSAwOlxuICAgICAgICByZXR1cm5cbiAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhwYXRoKTpcbiAgICAgICAgb3MuY2hvd24ocm9vdCwgdXNlci5wd191aWQsIHVzZXIucHdfZ2lkKVxuICAgICAgICBmb3IgbmFtZSBpbiBkaXJzICsgZmlsZXM6XG4gICAgICAgICAgICBvcy5jaG93bihvcy5wYXRoLmpvaW4ocm9vdCwgbmFtZSksIHVzZXIucHdfdWlkLCB1c2VyLnB3X2dpZClcblxuXG5kZWYgY29weV9hcHBfZmlsZXMoZGVzdCwgc2NyaXB0X3BhdGgpOlxuICAgIGRlc3QubWtkaXIocGFyZW50cz1UcnVlLCBleGlzdF9vaz1UcnVlKVxuICAgIGRlc3QuY2htb2QoMG83NTUpXG4gICAgaWYgc3RyKGRlc3QpLnN0YXJ0c3dpdGgoJy9vcHQvZGdlLXdvcmtlcicpOlxuICAgICAgICBkZXN0LnBhcmVudC5ta2RpcihwYXJlbnRzPVRydWUsIGV4aXN0X29rPVRydWUpXG4gICAgICAgIGRlc3QucGFyZW50LmNobW9kKDBvNzU1KVxuICAgIHNyY19yb290ID0gc291cmNlX3Jvb3QoKVxuICAgIGZvciBuYW1lIGluIEZJTEVTOlxuICAgICAgICBzcmMgPSBzcmNfcm9vdCAvIG5hbWVcbiAgICAgICAgaWYgbm90IHNyYy5leGlzdHMoKTpcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIHRhcmdldCA9IGRlc3QgLyBuYW1lXG4gICAgICAgIGlmIHNyYy5yZXNvbHZlKCkgPT0gdGFyZ2V0LnJlc29sdmUoKTpcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIGlmIG5hbWUgPT0gJ2ludml0YXRpb24uanNvbicgYW5kIHRhcmdldC5leGlzdHMoKTpcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIHNodXRpbC5jb3B5MihzcmMsIHRhcmdldClcbiAgICBpbnN0YWxsZXIgPSBQYXRoKHNjcmlwdF9wYXRoKSBpZiBzY3JpcHRfcGF0aCBlbHNlIE5vbmVcbiAgICBpZiBpbnN0YWxsZXIgYW5kIGluc3RhbGxlci5leGlzdHMoKSBhbmQgaW5zdGFsbGVyLnN1ZmZpeCBpbiAoJy5zaCcsICcuY29tbWFuZCcsICcucHMxJywgJy5jbWQnKTpcbiAgICAgICAgdGFyZ2V0ID0gZGVzdCAvICgnc2V0dXAtd29ya2VyJyArIGluc3RhbGxlci5zdWZmaXgpXG4gICAgICAgIGlmIGluc3RhbGxlci5yZXNvbHZlKCkgIT0gdGFyZ2V0LnJlc29sdmUoKTpcbiAgICAgICAgICAgIHNodXRpbC5jb3B5MihpbnN0YWxsZXIsIHRhcmdldClcbiAgICAoZGVzdCAvICdweXRob24ucGF0aCcpLndyaXRlX3RleHQocHl0aG9uX2Zvcl9sYXVuY2goKSArICdcXG4nKVxuICAgIGZvciBwYXRoIGluIGRlc3QuaXRlcmRpcigpOlxuICAgICAgICBpZiBwYXRoLnN1ZmZpeCBpbiAoJy5qc29uJywpOlxuICAgICAgICAgICAgcGF0aC5jaG1vZCgwbzYwMClcbiAgICAgICAgZWxpZiBwYXRoLmlzX2ZpbGUoKTpcbiAgICAgICAgICAgIHBhdGguY2htb2QoMG83NTUgaWYgcGF0aC5zdWZmaXggaW4gKCcucHknLCAnLnNoJywgJy5jb21tYW5kJykgZWxzZSAwbzY0NClcblxuXG5kZWYgY29uZmlndXJlZF9vcmlnaW4oKTpcbiAgICBwYXRoID0gc291cmNlX3Jvb3QoKSAvICdjb25maWcuanNvbidcbiAgICBpZiBub3QgcGF0aC5leGlzdHMoKTpcbiAgICAgICAgcmV0dXJuIE5vbmVcbiAgICB0cnk6XG4gICAgICAgIHJldHVybiBqc29uLmxvYWRzKHBhdGgucmVhZF90ZXh0KCkpLmdldCgnb3JpZ2luJylcbiAgICBleGNlcHQgKE9TRXJyb3IsIGpzb24uSlNPTkRlY29kZUVycm9yKTpcbiAgICAgICAgcmV0dXJuIE5vbmVcblxuXG5kZWYgZmlsZV9ieXRlcyhlbnRyeSk6XG4gICAgYm9keSA9IChlbnRyeSBvciB7fSkuZ2V0KCdib2R5JylcbiAgICBlbmNvZGluZyA9IChlbnRyeSBvciB7fSkuZ2V0KCdlbmNvZGluZycpXG4gICAgaWYgZW5jb2RpbmcgPT0gJ2Jhc2U2NCcgYW5kIGlzaW5zdGFuY2UoYm9keSwgc3RyKTpcbiAgICAgICAgcmV0dXJuIGJhc2U2NC5iNjRkZWNvZGUoYm9keSlcbiAgICBpZiBlbmNvZGluZyA9PSAndXRmLTgnIGFuZCBpc2luc3RhbmNlKGJvZHksIHN0cik6XG4gICAgICAgIHJldHVybiBib2R5LmVuY29kZSgpXG4gICAgcmV0dXJuIE5vbmVcblxuXG5kZWYgcmVmcmVzaF9mcm9tX29yaWdpbihvcmlnaW49Tm9uZSk6XG4gICAgb3JpZ2luID0gb3JpZ2luIG9yIGNvbmZpZ3VyZWRfb3JpZ2luKClcbiAgICBpZiBub3Qgb3JpZ2luOlxuICAgICAgICByZXR1cm4gRmFsc2VcbiAgICB0cnk6XG4gICAgICAgIHJlcXVlc3QgPSB1cmxsaWIucmVxdWVzdC5SZXF1ZXN0KFxuICAgICAgICAgICAgb3JpZ2luLnJzdHJpcCgnLycpICsgJy9jb21wdXRlX2ZsZWV0L2Rvd25sb2FkL2hvc3RfZmlsZXMnLFxuICAgICAgICAgICAgaGVhZGVycz17J25ncm9rLXNraXAtYnJvd3Nlci13YXJuaW5nJzogJzEnLFxuICAgICAgICAgICAgICAgICAgICAgJ1VzZXItQWdlbnQnOiAnTW96aWxsYS81LjAgKFgxMTsgTGludXggeDg2XzY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTI4LjAuMC4wIFNhZmFyaS81MzcuMzYnfSxcbiAgICAgICAgKVxuICAgICAgICB3aXRoIHVybGxpYi5yZXF1ZXN0LnVybG9wZW4ocmVxdWVzdCwgdGltZW91dD0xNSkgYXMgcmVzcG9uc2U6XG4gICAgICAgICAgICBwYXlsb2FkID0ganNvbi5sb2FkcyhyZXNwb25zZS5yZWFkKDJfMDk3XzE1MikpXG4gICAgZXhjZXB0IChPU0Vycm9yLCBWYWx1ZUVycm9yLCBqc29uLkpTT05EZWNvZGVFcnJvciwgdXJsbGliLmVycm9yLlVSTEVycm9yKTpcbiAgICAgICAgcmV0dXJuIEZhbHNlXG4gICAgZGVzdCA9IHNvdXJjZV9yb290KClcbiAgICBjaGFuZ2VkID0gRmFsc2VcbiAgICBmb3IgbmFtZSwgZW50cnkgaW4gKHBheWxvYWQuZ2V0KCdmaWxlcycpIG9yIHt9KS5pdGVtcygpOlxuICAgICAgICBpZiBuYW1lIG5vdCBpbiBSRUZSRVNIX05BTUVTIG9yICcvJyBpbiBuYW1lIG9yIG5hbWUuc3RhcnRzd2l0aCgnLicpOlxuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgZGF0YSA9IGZpbGVfYnl0ZXMoZW50cnkpXG4gICAgICAgIGlmIGRhdGEgaXMgTm9uZTpcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIHRhcmdldCA9IGRlc3QgLyBuYW1lXG4gICAgICAgIGlmIHRhcmdldC5leGlzdHMoKSBhbmQgdGFyZ2V0LnJlYWRfYnl0ZXMoKSA9PSBkYXRhOlxuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgdGVtcG9yYXJ5ID0gZGVzdCAvIChuYW1lICsgJy5uZXcnKVxuICAgICAgICB0ZW1wb3Jhcnkud3JpdGVfYnl0ZXMoZGF0YSlcbiAgICAgICAgdGVtcG9yYXJ5LnJlcGxhY2UodGFyZ2V0KVxuICAgICAgICBpZiB0YXJnZXQuc3VmZml4ID09ICcucHknOlxuICAgICAgICAgICAgdGFyZ2V0LmNobW9kKDBvNzU1KVxuICAgICAgICBjaGFuZ2VkID0gVHJ1ZVxuICAgIHJldHVybiBjaGFuZ2VkXG5cblxuZGVmIHdyaXRlX21hY19pY25zKHBuZywgaWNucyk6XG4gICAgaWYgbm90IHBuZy5leGlzdHMoKTpcbiAgICAgICAgcmV0dXJuIEZhbHNlXG4gICAgaWNvbnNldCA9IGljbnMucGFyZW50IC8gJ2RnZS5pY29uc2V0J1xuICAgIGlmIGljb25zZXQuZXhpc3RzKCk6XG4gICAgICAgIHNodXRpbC5ybXRyZWUoaWNvbnNldClcbiAgICBpY29uc2V0Lm1rZGlyKClcbiAgICBmb3Igc2l6ZSwgbmFtZSBpbiAoXG4gICAgICAgICgxNiwgJ2ljb25fMTZ4MTYucG5nJyksXG4gICAgICAgICgzMiwgJ2ljb25fMTZ4MTZAMngucG5nJyksXG4gICAgICAgICgzMiwgJ2ljb25fMzJ4MzIucG5nJyksXG4gICAgICAgICg2NCwgJ2ljb25fMzJ4MzJAMngucG5nJyksXG4gICAgICAgICgxMjgsICdpY29uXzEyOHgxMjgucG5nJyksXG4gICAgICAgICgyNTYsICdpY29uXzEyOHgxMjhAMngucG5nJyksXG4gICAgICAgICgyNTYsICdpY29uXzI1NngyNTYucG5nJyksXG4gICAgICAgICg1MTIsICdpY29uXzI1NngyNTZAMngucG5nJyksXG4gICAgICAgICg1MTIsICdpY29uXzUxMng1MTIucG5nJyksXG4gICAgICAgICgxMDI0LCAnaWNvbl81MTJ4NTEyQDJ4LnBuZycpLFxuICAgICk6XG4gICAgICAgIHN1YnByb2Nlc3MucnVuKFxuICAgICAgICAgICAgWydzaXBzJywgJy16Jywgc3RyKHNpemUpLCBzdHIoc2l6ZSksIHN0cihwbmcpLCAnLS1vdXQnLCBzdHIoaWNvbnNldCAvIG5hbWUpXSxcbiAgICAgICAgICAgIGNoZWNrPUZhbHNlLFxuICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuREVWTlVMTCxcbiAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLkRFVk5VTEwsXG4gICAgICAgIClcbiAgICByZXN1bHQgPSBzdWJwcm9jZXNzLnJ1bihcbiAgICAgICAgWydpY29udXRpbCcsICctYycsICdpY25zJywgc3RyKGljb25zZXQpLCAnLW8nLCBzdHIoaWNucyldLFxuICAgICAgICBjaGVjaz1GYWxzZSxcbiAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuREVWTlVMTCxcbiAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuREVWTlVMTCxcbiAgICApXG4gICAgc2h1dGlsLnJtdHJlZShpY29uc2V0LCBpZ25vcmVfZXJyb3JzPVRydWUpXG4gICAgaWYgcmVzdWx0LnJldHVybmNvZGUgPT0gMCBhbmQgaWNucy5leGlzdHMoKSBhbmQgaWNucy5zdGF0KCkuc3Rfc2l6ZSA+IDA6XG4gICAgICAgIHJldHVybiBUcnVlXG4gICAgaWYgc2h1dGlsLndoaWNoKCdzaXBzJyk6XG4gICAgICAgIHN1YnByb2Nlc3MucnVuKFxuICAgICAgICAgICAgWydzaXBzJywgJy1zJywgJ2Zvcm1hdCcsICdpY25zJywgc3RyKHBuZyksICctLW91dCcsIHN0cihpY25zKV0sXG4gICAgICAgICAgICBjaGVjaz1GYWxzZSxcbiAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLkRFVk5VTEwsXG4gICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5ERVZOVUxMLFxuICAgICAgICApXG4gICAgcmV0dXJuIGljbnMuZXhpc3RzKCkgYW5kIGljbnMuc3RhdCgpLnN0X3NpemUgPiAwXG5cblxuZGVmIHdyaXRlX21hY19hcHAoZGVzdCk6XG4gICAgYnVuZGxlID0gbWFjX2FwcF9idW5kbGUoKVxuICAgIG1hY29zID0gYnVuZGxlIC8gJ0NvbnRlbnRzJyAvICdNYWNPUydcbiAgICByZXNvdXJjZXMgPSBidW5kbGUgLyAnQ29udGVudHMnIC8gJ1Jlc291cmNlcydcbiAgICBtYWNvcy5ta2RpcihwYXJlbnRzPVRydWUsIGV4aXN0X29rPVRydWUpXG4gICAgcmVzb3VyY2VzLm1rZGlyKHBhcmVudHM9VHJ1ZSwgZXhpc3Rfb2s9VHJ1ZSlcbiAgICBweXRob24gPSBweXRob25fZm9yX2xhdW5jaCgpXG4gICAgbGF1bmNoZXIgPSBtYWNvcyAvICdkZ2Utd29ya2VyJ1xuICAgIHNjcmlwdCA9IGRlc3QgLyAnc2V0dXAtd29ya2VyLmNvbW1hbmQnXG4gICAgaWYgbm90IHNjcmlwdC5leGlzdHMoKTpcbiAgICAgICAgc2NyaXB0ID0gZGVzdCAvICdzZXR1cC13b3JrZXIuc2gnXG4gICAgaWYgbm90IHNjcmlwdC5leGlzdHMoKTpcbiAgICAgICAgc2NyaXB0ID0gZGVzdCAvICdob3N0X2d1aS5weSdcbiAgICBsYXVuY2hlci53cml0ZV90ZXh0KFxuICAgICAgICAnIyEvYmluL2Jhc2hcXG4nXG4gICAgICAgICdleHBvcnQgREdFX0hPU1RfQVBQPTFcXG4nXG4gICAgICAgICdleHBvcnQgREdFX01BQ19BUVVBX0xBVU5DSEVEPTFcXG4nXG4gICAgICAgICdjZCBcIiQoZGlybmFtZSBcIiQwXCIpLy4uL1Jlc291cmNlcy9hcHBcIlxcbidcbiAgICAgICAgJ1BZVEhPTj0kKGNhdCBweXRob24ucGF0aCAyPi9kZXYvbnVsbCB8fCBlY2hvICVzKVxcbidcbiAgICAgICAgJ2V4ZWMgXCIkUFlUSE9OXCIgaG9zdF9ndWkucHkgJXNcXG4nXG4gICAgICAgICUgKHNobGV4LnF1b3RlKHB5dGhvbiksIHNobGV4LnF1b3RlKHNjcmlwdC5uYW1lKSlcbiAgICApXG4gICAgbGF1bmNoZXIuY2htb2QoMG83NTUpXG4gICAgaWNvbiA9IGRlc3QgLyAnZGdlLWljb24ucG5nJ1xuICAgIGljbnMgPSByZXNvdXJjZXMgLyAnZGdlLWljb24uaWNucydcbiAgICB3cml0ZV9tYWNfaWNucyhpY29uLCBpY25zKVxuICAgIGlmIGljb24uZXhpc3RzKCk6XG4gICAgICAgIHNodXRpbC5jb3B5MihpY29uLCByZXNvdXJjZXMgLyAnZGdlLWljb24ucG5nJylcbiAgICBpY29uX2tleSA9ICdkZ2UtaWNvbicgaWYgaWNucy5leGlzdHMoKSBhbmQgaWNucy5zdGF0KCkuc3Rfc2l6ZSA+IDAgZWxzZSAnZGdlLWljb24ucG5nJ1xuICAgIHBsaXN0ID0gYnVuZGxlIC8gJ0NvbnRlbnRzJyAvICdJbmZvLnBsaXN0J1xuICAgIHBsaXN0LndyaXRlX3RleHQoJycnPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIj8+XG48IURPQ1RZUEUgcGxpc3QgUFVCTElDIFwiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VOXCIgXCJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkXCI+XG48cGxpc3QgdmVyc2lvbj1cIjEuMFwiPjxkaWN0PlxuICA8a2V5PkNGQnVuZGxlTmFtZTwva2V5PjxzdHJpbmc+JXM8L3N0cmluZz5cbiAgPGtleT5DRkJ1bmRsZURpc3BsYXlOYW1lPC9rZXk+PHN0cmluZz4lczwvc3RyaW5nPlxuICA8a2V5PkNGQnVuZGxlSWRlbnRpZmllcjwva2V5PjxzdHJpbmc+JXM8L3N0cmluZz5cbiAgPGtleT5DRkJ1bmRsZVZlcnNpb248L2tleT48c3RyaW5nPjI8L3N0cmluZz5cbiAgPGtleT5DRkJ1bmRsZVNob3J0VmVyc2lvblN0cmluZzwva2V5PjxzdHJpbmc+MS4xPC9zdHJpbmc+XG4gIDxrZXk+Q0ZCdW5kbGVQYWNrYWdlVHlwZTwva2V5PjxzdHJpbmc+QVBQTDwvc3RyaW5nPlxuICA8a2V5PkNGQnVuZGxlRXhlY3V0YWJsZTwva2V5PjxzdHJpbmc+ZGdlLXdvcmtlcjwvc3RyaW5nPlxuICA8a2V5PkNGQnVuZGxlSWNvbkZpbGU8L2tleT48c3RyaW5nPiVzPC9zdHJpbmc+XG4gIDxrZXk+Q0ZCdW5kbGVJY29uTmFtZTwva2V5PjxzdHJpbmc+ZGdlLWljb248L3N0cmluZz5cbiAgPGtleT5MU01pbmltdW1TeXN0ZW1WZXJzaW9uPC9rZXk+PHN0cmluZz4xMi4wPC9zdHJpbmc+XG4gIDxrZXk+TlNIaWdoUmVzb2x1dGlvbkNhcGFibGU8L2tleT48dHJ1ZS8+XG48L2RpY3Q+PC9wbGlzdD5cbicnJyAlIChBUFBfTkFNRSwgQVBQX05BTUUsIEFQUF9JRCwgaWNvbl9rZXkpKVxuICAgIHN1YnByb2Nlc3MucnVuKFsndG91Y2gnLCBzdHIoYnVuZGxlKV0sIGNoZWNrPUZhbHNlKVxuICAgIGxzcmVnaXN0ZXIgPSBQYXRoKFxuICAgICAgICAnL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ29yZVNlcnZpY2VzLmZyYW1ld29yay9GcmFtZXdvcmtzLydcbiAgICAgICAgJ0xhdW5jaFNlcnZpY2VzLmZyYW1ld29yay9TdXBwb3J0L2xzcmVnaXN0ZXInXG4gICAgKVxuICAgIGlmIGxzcmVnaXN0ZXIuZXhpc3RzKCk6XG4gICAgICAgIHN1YnByb2Nlc3MucnVuKFtzdHIobHNyZWdpc3RlciksICctZicsIHN0cihidW5kbGUpXSwgY2hlY2s9RmFsc2UpXG4gICAgY2hvd25fdHJlZShidW5kbGUsIGd1aV91c2VyKCkpXG5cblxuZGVmIHdyaXRlX2xpbnV4X2Rlc2t0b3AoZGVzdCwgc2NyaXB0X3BhdGgpOlxuICAgIGljb25fc3JjID0gZGVzdCAvICdkZ2UtaWNvbi5wbmcnXG4gICAgaWYgbm90IGljb25fc3JjLmV4aXN0cygpOlxuICAgICAgICByZXR1cm5cbiAgICBob21lID0gZ3VpX2hvbWUoKVxuICAgIGFwcHNfZGlyID0gaG9tZSAvICcubG9jYWwnIC8gJ3NoYXJlJyAvICdhcHBsaWNhdGlvbnMnXG4gICAgYXBwc19kaXIubWtkaXIocGFyZW50cz1UcnVlLCBleGlzdF9vaz1UcnVlKVxuICAgIGZvciBzaXplIGluICg0OCwgMTI4LCAyNTYpOlxuICAgICAgICBpY29uX2RpciA9IGhvbWUgLyAnLmxvY2FsJyAvICdzaGFyZScgLyAnaWNvbnMnIC8gJ2hpY29sb3InIC8gZid7c2l6ZX14e3NpemV9JyAvICdhcHBzJ1xuICAgICAgICBpY29uX2Rpci5ta2RpcihwYXJlbnRzPVRydWUsIGV4aXN0X29rPVRydWUpXG4gICAgICAgIHRhcmdldCA9IGljb25fZGlyIC8gKExJTlVYX0lDT05fTkFNRSArICcucG5nJylcbiAgICAgICAgaWYgc2h1dGlsLndoaWNoKCdjb252ZXJ0Jyk6XG4gICAgICAgICAgICBzdWJwcm9jZXNzLnJ1bihcbiAgICAgICAgICAgICAgICBbJ2NvbnZlcnQnLCBzdHIoaWNvbl9zcmMpLCAnLXJlc2l6ZScsIGYne3NpemV9eHtzaXplfScsIHN0cih0YXJnZXQpXSxcbiAgICAgICAgICAgICAgICBjaGVjaz1GYWxzZSxcbiAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5ERVZOVUxMLFxuICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLkRFVk5VTEwsXG4gICAgICAgICAgICApXG4gICAgICAgIGVsaWYgbm90IHRhcmdldC5leGlzdHMoKTpcbiAgICAgICAgICAgIHNodXRpbC5jb3B5MihpY29uX3NyYywgdGFyZ2V0KVxuICAgIHBpeG1hcHMgPSBob21lIC8gJy5sb2NhbCcgLyAnc2hhcmUnIC8gJ3BpeG1hcHMnXG4gICAgcGl4bWFwcy5ta2RpcihwYXJlbnRzPVRydWUsIGV4aXN0X29rPVRydWUpXG4gICAgc2h1dGlsLmNvcHkyKGljb25fc3JjLCBwaXhtYXBzIC8gKExJTlVYX0lDT05fTkFNRSArICcucG5nJykpXG4gICAgaWNvbl8xMjggPSBob21lIC8gJy5sb2NhbCcgLyAnc2hhcmUnIC8gJ2ljb25zJyAvICdoaWNvbG9yJyAvICcxMjh4MTI4JyAvICdhcHBzJyAvIChMSU5VWF9JQ09OX05BTUUgKyAnLnBuZycpXG4gICAgaWNvbl9wYXRoID0gc3RyKGljb25fMTI4IGlmIGljb25fMTI4LmV4aXN0cygpIGVsc2UgcGl4bWFwcyAvIChMSU5VWF9JQ09OX05BTUUgKyAnLnBuZycpKVxuICAgIHNjcmlwdCA9IGRlc3QgLyAnc2V0dXAtd29ya2VyLnNoJ1xuICAgIGlmIG5vdCBzY3JpcHQuZXhpc3RzKCk6XG4gICAgICAgIHNjcmlwdCA9IFBhdGgoc2NyaXB0X3BhdGgpIGlmIHNjcmlwdF9wYXRoIGVsc2UgZGVzdCAvICdob3N0X2d1aS5weSdcbiAgICBweXRob24gPSAoZGVzdCAvICdweXRob24ucGF0aCcpLnJlYWRfdGV4dCgpLnN0cmlwKCkgaWYgKGRlc3QgLyAncHl0aG9uLnBhdGgnKS5leGlzdHMoKSBlbHNlIHB5dGhvbl9mb3JfbGF1bmNoKClcbiAgICBleGVjX3BhcnRzID0gW1xuICAgICAgICAnZW52JyxcbiAgICAgICAgSE9TVF9BUFBfRU5WICsgJz0xJyxcbiAgICAgICAgJ0RHRV9MSU5VWF9ERVNLVE9QX0xBVU5DSEVEPTEnLFxuICAgICAgICAnR0RLX0JBQ0tFTkQ9eDExJyxcbiAgICAgICAgcHl0aG9uLFxuICAgICAgICBzdHIoZGVzdCAvICdob3N0X2d1aS5weScpLFxuICAgICAgICBzdHIoc2NyaXB0KSxcbiAgICBdXG4gICAgZGVza3RvcCA9ICcnJ1tEZXNrdG9wIEVudHJ5XVxuVmVyc2lvbj0xLjBcblR5cGU9QXBwbGljYXRpb25cbk5hbWU9JXNcbkNvbW1lbnQ9UnVuIERvcmlhbiBHcmF5IGJhY2tncm91bmQgd29yayB3aGVuIHRoaXMgY29tcHV0ZXIgaXMgaWRsZVxuRXhlYz0lc1xuSWNvbj0lc1xuVGVybWluYWw9ZmFsc2VcblN0YXJ0dXBXTUNsYXNzPSVzXG5DYXRlZ29yaWVzPVV0aWxpdHk7XG4nJycgJSAoQVBQX05BTUUsICcgJy5qb2luKHNobGV4LnF1b3RlKHBhcnQpIGZvciBwYXJ0IGluIGV4ZWNfcGFydHMpLCBpY29uX3BhdGgsIExJTlVYX1dNX0NMQVNTKVxuICAgIGRlc2t0b3BfcGF0aCA9IGFwcHNfZGlyIC8gKEFQUF9JRCArICcuZGVza3RvcCcpXG4gICAgZGVza3RvcF9wYXRoLndyaXRlX3RleHQoZGVza3RvcClcbiAgICBkZXNrdG9wX3BhdGguY2htb2QoMG83NTUpXG4gICAgc3VicHJvY2Vzcy5ydW4oXG4gICAgICAgIFsndXBkYXRlLWRlc2t0b3AtZGF0YWJhc2UnLCBzdHIoYXBwc19kaXIpXSxcbiAgICAgICAgY2hlY2s9RmFsc2UsXG4gICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLkRFVk5VTEwsXG4gICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLkRFVk5VTEwsXG4gICAgKVxuICAgIGNob3duX3RyZWUoaG9tZSAvICcubG9jYWwnIC8gJ3NoYXJlJyAvICdkZ2Utd29ya2VyJywgZ3VpX3VzZXIoKSlcbiAgICBjaG93bl90cmVlKGFwcHNfZGlyLCBndWlfdXNlcigpKVxuXG5cbmRlZiB3aW5kb3dzX3Byb2ZpbGUoKTpcbiAgICBjbWQgPSBQYXRoKCcvbW50L2MvV2luZG93cy9TeXN0ZW0zMi9jbWQuZXhlJylcbiAgICBpZiBub3QgY21kLmV4aXN0cygpOlxuICAgICAgICByZXR1cm4gTm9uZVxuICAgIHJlc3VsdCA9IHN1YnByb2Nlc3MucnVuKFtzdHIoY21kKSwgJy9jJywgJ2VjaG8nLCAnJVVTRVJQUk9GSUxFJSddLCBjYXB0dXJlX291dHB1dD1UcnVlLCB0ZXh0PVRydWUpXG4gICAgcHJvZmlsZSA9IChyZXN1bHQuc3Rkb3V0IG9yICcnKS5zdHJpcCgpLnNwbGl0bGluZXMoKVstMV0uc3RyaXAoKSBpZiByZXN1bHQucmV0dXJuY29kZSA9PSAwIGVsc2UgJydcbiAgICBpZiBub3QgcHJvZmlsZTpcbiAgICAgICAgcmV0dXJuIE5vbmVcbiAgICBjb252ZXJ0ZWQgPSBzdWJwcm9jZXNzLnJ1bihbJ3dzbHBhdGgnLCAnLXUnLCBwcm9maWxlXSwgY2FwdHVyZV9vdXRwdXQ9VHJ1ZSwgdGV4dD1UcnVlKVxuICAgIHBhdGggPSBQYXRoKChjb252ZXJ0ZWQuc3Rkb3V0IG9yICcnKS5zdHJpcCgpKVxuICAgIHJldHVybiBwYXRoIGlmIHBhdGguZXhpc3RzKCkgZWxzZSBOb25lXG5cblxuZGVmIHdpbl9wYXRoKHBhdGgpOlxuICAgIHJlc3VsdCA9IHN1YnByb2Nlc3MucnVuKFsnd3NscGF0aCcsICctdycsIHN0cihwYXRoKV0sIGNoZWNrPUZhbHNlLCBjYXB0dXJlX291dHB1dD1UcnVlLCB0ZXh0PVRydWUpXG4gICAgcmV0dXJuIChyZXN1bHQuc3Rkb3V0IG9yICcnKS5zdHJpcCgpXG5cblxuZGVmIHdyaXRlX3dpbmRvd3Nfc2hvcnRjdXQoZGVzdCk6XG4gICAgcHJvZmlsZSA9IHdpbmRvd3NfcHJvZmlsZSgpXG4gICAgcG93ZXJzaGVsbCA9IFBhdGgoJy9tbnQvYy9XaW5kb3dzL1N5c3RlbTMyL1dpbmRvd3NQb3dlclNoZWxsL3YxLjAvcG93ZXJzaGVsbC5leGUnKVxuICAgIGlmIG5vdCBwcm9maWxlIG9yIG5vdCBwb3dlcnNoZWxsLmV4aXN0cygpOlxuICAgICAgICByZXR1cm5cbiAgICBwcm9ncmFtcyA9IHByb2ZpbGUgLyAnQXBwRGF0YS9Sb2FtaW5nL01pY3Jvc29mdC9XaW5kb3dzL1N0YXJ0IE1lbnUvUHJvZ3JhbXMnXG4gICAgcHJvZ3JhbXMubWtkaXIocGFyZW50cz1UcnVlLCBleGlzdF9vaz1UcnVlKVxuICAgIGljb19zcmMgPSBkZXN0IC8gJ2RnZS1pY29uLmljbydcbiAgICBpY29fd2luID0gcHJvZmlsZSAvICdBcHBEYXRhL0xvY2FsL2RnZS13b3JrZXIvZGdlLWljb24uaWNvJ1xuICAgIGljb193aW4ucGFyZW50Lm1rZGlyKHBhcmVudHM9VHJ1ZSwgZXhpc3Rfb2s9VHJ1ZSlcbiAgICBpZiBpY29fc3JjLmV4aXN0cygpOlxuICAgICAgICBzaHV0aWwuY29weTIoaWNvX3NyYywgaWNvX3dpbilcbiAgICBkaXN0cm8gPSBvcy5lbnZpcm9uLmdldCgnV1NMX0RJU1RST19OQU1FJykgb3IgJ1VidW50dSdcbiAgICBsbmsgPSBwcm9ncmFtcyAvIChBUFBfTkFNRSArICcubG5rJylcbiAgICBhcmdzID0gJy1kICVzIC0tY2QgJXMgLS0gZW52ICVzPTEgcHl0aG9uMyBob3N0X2d1aS5weSBzZXR1cC13b3JrZXIuc2gnICUgKFxuICAgICAgICBkaXN0cm8sIGRlc3QuYXNfcG9zaXgoKSwgSE9TVF9BUFBfRU5WLFxuICAgIClcbiAgICBsbmtfd2luID0gd2luX3BhdGgobG5rKS5yZXBsYWNlKFwiJ1wiLCBcIicnXCIpXG4gICAgaWNvbiA9IHdpbl9wYXRoKGljb193aW4pLnJlcGxhY2UoXCInXCIsIFwiJydcIikgaWYgaWNvX3dpbi5leGlzdHMoKSBlbHNlICcnXG4gICAgc2NyaXB0ID0gKFxuICAgICAgICBcIiRzID0gTmV3LU9iamVjdCAtQ29tT2JqZWN0IFdTY3JpcHQuU2hlbGw7IFwiXG4gICAgICAgIFwiJHNjID0gJHMuQ3JlYXRlU2hvcnRjdXQoJyVzJyk7IFwiXG4gICAgICAgIFwiJHNjLlRhcmdldFBhdGggPSAnQzpcXFxcV2luZG93c1xcXFxTeXN0ZW0zMlxcXFx3c2wuZXhlJzsgXCJcbiAgICAgICAgXCIkc2MuQXJndW1lbnRzID0gJyVzJzsgXCJcbiAgICAgICAgXCIkc2MuV2luZG93U3R5bGUgPSA3OyBcIlxuICAgICAgICBcIiRzYy5EZXNjcmlwdGlvbiA9ICclcyc7IFwiXG4gICAgICAgICUgKGxua193aW4sIGFyZ3MucmVwbGFjZShcIidcIiwgXCInJ1wiKSwgQVBQX05BTUUpXG4gICAgKVxuICAgIGlmIGljb246XG4gICAgICAgIHNjcmlwdCArPSBcIiRzYy5JY29uTG9jYXRpb24gPSAnJXMnOyBcIiAlIGljb25cbiAgICBzY3JpcHQgKz0gJyRzYy5TYXZlKCknXG4gICAgc3VicHJvY2Vzcy5ydW4oW3N0cihwb3dlcnNoZWxsKSwgJy1Ob1Byb2ZpbGUnLCAnLUNvbW1hbmQnLCBzY3JpcHRdLCBjaGVjaz1GYWxzZSlcbiAgICBkZXNrdG9wID0gcHJvZmlsZSAvICdEZXNrdG9wJ1xuICAgIGlmIGRlc2t0b3AuaXNfZGlyKCkgYW5kIGxuay5leGlzdHMoKTpcbiAgICAgICAgc2h1dGlsLmNvcHkyKGxuaywgZGVza3RvcCAvIGxuay5uYW1lKVxuXG5cbmRlZiBpbnN0YWxsX2hvc3RfYXBwKHNjcmlwdF9wYXRoKTpcbiAgICBkZXN0ID0gYXBwX2luc3RhbGxfZGlyKClcbiAgICBjb3B5X2FwcF9maWxlcyhkZXN0LCBzY3JpcHRfcGF0aClcbiAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6XG4gICAgICAgIHdyaXRlX21hY19hcHAoZGVzdClcbiAgICBlbGlmIHJ1bm5pbmdfaW5fd3NsKCk6XG4gICAgICAgIHdyaXRlX3dpbmRvd3Nfc2hvcnRjdXQoZGVzdClcbiAgICAgICAgdHJ5OlxuICAgICAgICAgICAgY2hvd25fdHJlZShkZXN0LCBwd2QuZ2V0cHd1aWQoMTAwMCkpXG4gICAgICAgIGV4Y2VwdCBLZXlFcnJvcjpcbiAgICAgICAgICAgIHBhc3NcbiAgICAgICAgaWYgb3MuZ2V0ZXVpZCgpICE9IDA6XG4gICAgICAgICAgICB3cml0ZV9saW51eF9kZXNrdG9wKGRlc3QsIHNjcmlwdF9wYXRoKVxuICAgIGVsaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2xpbnV4Jyk6XG4gICAgICAgIHdyaXRlX2xpbnV4X2Rlc2t0b3AoZGVzdCwgc2NyaXB0X3BhdGgpXG4gICAgY2hvd25fdHJlZShkZXN0LCBndWlfdXNlcigpKVxuICAgIHJldHVybiBkZXN0XG5cblxuZGVmIGRyb3BfbG9naW5faGVscGVyKCk6XG4gICAgaWYgc3lzLnBsYXRmb3JtICE9ICdkYXJ3aW4nOlxuICAgICAgICByZXR1cm5cbiAgICBwbGlzdCA9IGd1aV9ob21lKCkgLyAnTGlicmFyeScgLyAnTGF1bmNoQWdlbnRzJyAvICdjb20uZGdlLmNvbXB1dGUtaG9zdC1ndWkucGxpc3QnXG4gICAgaWYgbm90IHBsaXN0LmV4aXN0cygpOlxuICAgICAgICByZXR1cm5cbiAgICBzdWJwcm9jZXNzLnJ1bihcbiAgICAgICAgWydsYXVuY2hjdGwnLCAndW5sb2FkJywgc3RyKHBsaXN0KV0sXG4gICAgICAgIGNoZWNrPUZhbHNlLFxuICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5ERVZOVUxMLFxuICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5ERVZOVUxMLFxuICAgIClcbiAgICBwbGlzdC51bmxpbmsoKVxuXG5cbmRlZiBlbnN1cmVfcnVubmluZ19mcm9tX2FwcChzY3JpcHRfcGF0aCk6XG4gICAgZGVzdCA9IGluc3RhbGxfaG9zdF9hcHAoc2NyaXB0X3BhdGgpXG4gICAgZHJvcF9sb2dpbl9oZWxwZXIoKVxuICAgIGlmIHNvdXJjZV9yb290KCkgPT0gZGVzdC5yZXNvbHZlKCk6XG4gICAgICAgIG9zLmVudmlyb25bSE9TVF9BUFBfRU5WXSA9ICcxJ1xuICAgICAgICByZXR1cm4gZGVzdFxuICAgIHNjcmlwdCA9IGRlc3QgLyAnc2V0dXAtd29ya2VyLnNoJ1xuICAgIGlmIG5vdCBzY3JpcHQuZXhpc3RzKCk6XG4gICAgICAgIHNjcmlwdCA9IGRlc3QgLyAnc2V0dXAtd29ya2VyLmNvbW1hbmQnXG4gICAgaWYgbm90IHNjcmlwdC5leGlzdHMoKTpcbiAgICAgICAgc2NyaXB0ID0gZGVzdCAvICdob3N0X2d1aS5weSdcbiAgICBweXRob24gPSBweXRob25fZm9yX2xhdW5jaCgpXG4gICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOlxuICAgICAgICBsYXVuY2hlZCA9IHN1YnByb2Nlc3MucnVuKFsnb3BlbicsIHN0cihtYWNfYXBwX2J1bmRsZSgpKV0sIGNoZWNrPUZhbHNlKVxuICAgICAgICBpZiBsYXVuY2hlZC5yZXR1cm5jb2RlID09IDA6XG4gICAgICAgICAgICByYWlzZSBTeXN0ZW1FeGl0KDApXG4gICAgb3MuZW52aXJvbltIT1NUX0FQUF9FTlZdID0gJzEnXG4gICAgb3MuZXhlY3YocHl0aG9uLCBbcHl0aG9uLCBzdHIoZGVzdCAvICdob3N0X2d1aS5weScpLCBzdHIoc2NyaXB0KV0pXG4gICAgcmV0dXJuIGRlc3RcbiIsImhvc3RfZ3VpLnB5IjoiIyEvdXNyL2Jpbi9lbnYgcHl0aG9uM1xuXCJcIlwiSG9zdCBlbnJvbGxtZW50IEdVSSBhbmQgcG9zdC1hcHByb3ZhbCBpbnN0YWxsZXIgc3VwZXJ2aXNvci5cIlwiXCJcbmltcG9ydCBqc29uXG5pbXBvcnQgb3NcbmltcG9ydCBzaGxleFxuaW1wb3J0IHNodXRpbFxuaW1wb3J0IHN1YnByb2Nlc3NcbmltcG9ydCBzeXNcbmltcG9ydCB0aHJlYWRpbmdcbmltcG9ydCB0aW1lXG5pbXBvcnQgdXJsbGliLmVycm9yXG5pbXBvcnQgdXJsbGliLnJlcXVlc3RcbmltcG9ydCB1cmxsaWIucGFyc2VcbmltcG9ydCB1dWlkXG5mcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZXF1ZVxuZnJvbSBwYXRobGliIGltcG9ydCBQYXRoXG5cbmZyb20gc2V0dXBfbG9nX3JlcG9ydGVyIGltcG9ydCBTZXR1cExvZ1JlcG9ydGVyLCBzYWZlX3NldHVwX2xvZ19saW5lXG5cblJPT1QgPSBQYXRoKF9fZmlsZV9fKS5yZXNvbHZlKCkucGFyZW50XG5pZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnbGludXgnKSBhbmQgJ0dES19CQUNLRU5EJyBub3QgaW4gb3MuZW52aXJvbjpcbiAgICBvcy5lbnZpcm9uWydHREtfQkFDS0VORCddID0gJ3gxMSdcblNVUFBPUlRfTUFDID0gUGF0aC5ob21lKCkgLyAnTGlicmFyeScgLyAnQXBwbGljYXRpb24gU3VwcG9ydCcgLyAnZGdlLXdvcmtlcidcblNVUFBPUlRfTElOVVggPSBQYXRoKCcvb3B0L2RnZS13b3JrZXInKVxuU1RBVEVfTkFNRSA9ICdlbnJvbGxtZW50LXN0YXRlLmpzb24nXG5ERVNLVE9QX0FQUF9JRCA9ICdjb20uZGdlLndvcmtlcidcbkxJTlVYX1dNX0NMQVNTID0gJ0RHRVdvcmtlclNldHVwJ1xuTElOVVhfSUNPTl9OQU1FID0gJ2RnZS13b3JrZXItc2V0dXAnXG5cblxuQlJPV1NFUl9VQSA9ICdNb3ppbGxhLzUuMCAoWDExOyBMaW51eCB4ODZfNjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMjguMC4wLjAgU2FmYXJpLzUzNy4zNidcblxuXG5jbGFzcyBOb1JlZGlyZWN0KHVybGxpYi5yZXF1ZXN0LkhUVFBSZWRpcmVjdEhhbmRsZXIpOlxuICAgIGRlZiByZWRpcmVjdF9yZXF1ZXN0KHNlbGYsICphcmdzLCAqKmt3YXJncyk6XG4gICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignVGhlIHNldHVwIHNlcnZlciByZWRpcmVjdGVkIHRoaXMgcmVxdWVzdC4nKVxuXG5cbkhUVFAgPSB1cmxsaWIucmVxdWVzdC5idWlsZF9vcGVuZXIoTm9SZWRpcmVjdCgpKVxuXG5cbmRlZiBzdXBwb3J0X2RpcigpOlxuICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzpcbiAgICAgICAgcmV0dXJuIFNVUFBPUlRfTUFDXG4gICAgcmV0dXJuIFNVUFBPUlRfTElOVVhcblxuXG5kZWYgc3RhdGVfcGF0aCgpOlxuICAgIHBhdGggPSBzdXBwb3J0X2RpcigpIC8gU1RBVEVfTkFNRVxuICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAnZGFyd2luJyBhbmQgbm90IHBhdGgucGFyZW50LmV4aXN0cygpOlxuICAgICAgICBwYXRoID0gUGF0aCgnL3RtcC9kZ2Utd29ya2VyJykgLyBTVEFURV9OQU1FXG4gICAgcmV0dXJuIHBhdGhcblxuXG5kZWYgbG9hZF9zdGF0ZSgpOlxuICAgIHBhdGggPSBzdGF0ZV9wYXRoKClcbiAgICBpZiBwYXRoLmV4aXN0cygpOlxuICAgICAgICByZXR1cm4ganNvbi5sb2FkcyhwYXRoLnJlYWRfdGV4dCgpKVxuICAgIGNsYWltID0gc3RyKHV1aWQudXVpZDQoKSlcbiAgICBzdGF0ZSA9IHsnY2xhaW1faWQnOiBjbGFpbX1cbiAgICBwYXRoLnBhcmVudC5ta2RpcihwYXJlbnRzPVRydWUsIGV4aXN0X29rPVRydWUpXG4gICAgcGF0aC53cml0ZV90ZXh0KGpzb24uZHVtcHMoc3RhdGUpKVxuICAgIHBhdGguY2htb2QoMG82MDApXG4gICAgcmV0dXJuIHN0YXRlXG5cblxuZGVmIHNhdmVfc3RhdGUoc3RhdGUpOlxuICAgIHBhdGggPSBzdGF0ZV9wYXRoKClcbiAgICBwYXRoLnBhcmVudC5ta2RpcihwYXJlbnRzPVRydWUsIGV4aXN0X29rPVRydWUpXG4gICAgcGF0aC53cml0ZV90ZXh0KGpzb24uZHVtcHMoc3RhdGUpKVxuICAgIHBhdGguY2htb2QoMG82MDApXG5cblxuZGVmIGNvbmZpZygpOlxuICAgIHJldHVybiBqc29uLmxvYWRzKChST09UIC8gJ2NvbmZpZy5qc29uJykucmVhZF90ZXh0KCkpXG5cblxuZGVmIGludml0YXRpb25fcGF0aCgpOlxuICAgIHJldHVybiBST09UIC8gJ2ludml0YXRpb24uanNvbidcblxuXG5kZWYgZW5yb2xsbWVudF9tb2RlKCk6XG4gICAgaWYgaW52aXRhdGlvbl9wYXRoKCkuZXhpc3RzKCk6XG4gICAgICAgIHJldHVybiBGYWxzZVxuICAgIHBheWxvYWQgPSBjb25maWcoKVxuICAgIHJldHVybiBib29sKHBheWxvYWQuZ2V0KCdlbnJvbGxtZW50JykpXG5cblxuZGVmIHBvc3RfanNvbihvcmlnaW4sIHBhdGgsIHRva2VuLCBib2R5KTpcbiAgICBoZWFkZXJzID0geydDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsICdVc2VyLUFnZW50JzogQlJPV1NFUl9VQSwgJ25ncm9rLXNraXAtYnJvd3Nlci13YXJuaW5nJzogJzEnfVxuICAgIGlmIHRva2VuOlxuICAgICAgICBoZWFkZXJzWydBdXRob3JpemF0aW9uJ10gPSAnQmVhcmVyICcgKyB0b2tlblxuICAgIHJlcXVlc3QgPSB1cmxsaWIucmVxdWVzdC5SZXF1ZXN0KFxuICAgICAgICBvcmlnaW4ucnN0cmlwKCcvJykgKyBwYXRoLFxuICAgICAgICBkYXRhPWpzb24uZHVtcHMoYm9keSkuZW5jb2RlKCksXG4gICAgICAgIG1ldGhvZD0nUE9TVCcsXG4gICAgICAgIGhlYWRlcnM9aGVhZGVycyxcbiAgICApXG4gICAgd2l0aCBIVFRQLm9wZW4ocmVxdWVzdCwgdGltZW91dD0yMCkgYXMgcmVzcG9uc2U6XG4gICAgICAgIHJldHVybiBqc29uLmxvYWRzKHJlc3BvbnNlLnJlYWQoNjU1MzcpKVxuXG5cbmRlZiBnZXRfanNvbihvcmlnaW4sIHBhdGgsIHRva2VuKTpcbiAgICByZXF1ZXN0ID0gdXJsbGliLnJlcXVlc3QuUmVxdWVzdChcbiAgICAgICAgb3JpZ2luLnJzdHJpcCgnLycpICsgcGF0aCxcbiAgICAgICAgbWV0aG9kPSdHRVQnLFxuICAgICAgICBoZWFkZXJzPXsnQXV0aG9yaXphdGlvbic6ICdCZWFyZXIgJyArIHRva2VuLCAnVXNlci1BZ2VudCc6IEJST1dTRVJfVUEsICduZ3Jvay1za2lwLWJyb3dzZXItd2FybmluZyc6ICcxJ30sXG4gICAgKVxuICAgIHdpdGggSFRUUC5vcGVuKHJlcXVlc3QsIHRpbWVvdXQ9MjApIGFzIHJlc3BvbnNlOlxuICAgICAgICByZXR1cm4ganNvbi5sb2FkcyhyZXNwb25zZS5yZWFkKDY1NTM3KSlcblxuXG5kZWYgY29sbGVjdF9zbmFwc2hvdChvcmlnaW4pOlxuICAgIGltcG9ydCBob3N0X2ludmVudG9yeVxuICAgIHdpbmRvd3Nfc25hcHNob3QgPSBvcy5lbnZpcm9uLmdldCgnREdFX1dJTkRPV1NfSU5WRU5UT1JZJylcbiAgICBpZiB3aW5kb3dzX3NuYXBzaG90IGFuZCBQYXRoKHdpbmRvd3Nfc25hcHNob3QpLmV4aXN0cygpOlxuICAgICAgICByZXR1cm4gaG9zdF9pbnZlbnRvcnkuY29sbGVjdChvcmlnaW4sIHdpbmRvd3Nfc25hcHNob3QpXG4gICAgcmV0dXJuIGhvc3RfaW52ZW50b3J5LmNvbGxlY3Qob3JpZ2luKVxuXG5cbmRlZiBwcmV2aWV3X3N1bW1hcnkoc25hcHNob3QpOlxuICAgIGhhcmR3YXJlID0gc25hcHNob3RbJ2hvc3RfaW52ZW50b3J5J11bJ2hhcmR3YXJlJ11cbiAgICByZWFkaW5lc3MgPSBzbmFwc2hvdFsnaG9zdF9pbnZlbnRvcnknXVsncmVhZGluZXNzJ11cbiAgICBjb25uZWN0aXZpdHkgPSBzbmFwc2hvdFsnaG9zdF9pbnZlbnRvcnknXVsnY29ubmVjdGl2aXR5J11cbiAgICBjb21wdXRlciA9ICcgJy5qb2luKGZpbHRlcihOb25lLCBbaGFyZHdhcmUuZ2V0KCdtYW51ZmFjdHVyZXInKSwgaGFyZHdhcmUuZ2V0KCdoYXJkd2FyZV9tb2RlbCcpXSkpIG9yICdUaGlzIGNvbXB1dGVyJ1xuICAgIHN5c3RlbSA9ICcgJy5qb2luKGZpbHRlcihOb25lLCBbaGFyZHdhcmUuZ2V0KCdvc19uYW1lJyksIGhhcmR3YXJlLmdldCgnb3NfdmVyc2lvbicpXSkpIG9yICdVbmtub3duIHN5c3RlbSdcbiAgICBtZW1vcnkgPSBmb3JtYXRfYnl0ZXMoaGFyZHdhcmUuZ2V0KCdtZW1vcnlfYnl0ZXMnKSlcbiAgICBjcHVzID0gaGFyZHdhcmUuZ2V0KCdsb2dpY2FsX2NwdXMnKVxuICAgIHBvd2VyID0gc25hcHNob3RbJ2hvc3RfaW52ZW50b3J5J11bJ3RlbGVtZXRyeSddXG4gICAgcmVhZHkgPSByZWFkaW5lc3MuZ2V0KCdkb2NrZXInKSBhbmQgcmVhZGluZXNzLmdldCgndmlydHVhbGl6YXRpb24nKVxuICAgIGNvbm5lY3RlZCA9IGNvbm5lY3Rpdml0eS5nZXQoJ3NlcnZlcl9yZWFjaGFibGUnKVxuICAgIHJldHVybiB7XG4gICAgICAgICdjb21wdXRlcic6IGNvbXB1dGVyLFxuICAgICAgICAnc3lzdGVtJzogc3lzdGVtLFxuICAgICAgICAnbWVtb3J5JzogbWVtb3J5LFxuICAgICAgICAnY3B1cyc6IGNwdXMsXG4gICAgICAgICdyZWFkeSc6IHJlYWR5LFxuICAgICAgICAnY29ubmVjdGVkJzogY29ubmVjdGVkLFxuICAgICAgICAnb25fcG93ZXInOiBwb3dlci5nZXQoJ2FjX2Nvbm5lY3RlZCcpLFxuICAgICAgICAnYmF0dGVyeV9wZXJjZW50JzogcG93ZXIuZ2V0KCdiYXR0ZXJ5X3BlcmNlbnQnKSxcbiAgICB9XG5cblxuZGVmIHByZXZpZXdfbGluZXMoc25hcHNob3QpOlxuICAgIHJldHVybiBbXG4gICAgICAgICdUaGlzIGxldHMgeW91ciBjb21wdXRlciBoZWxwIERvcmlhbiBHcmF5IHdpdGggYmFja2dyb3VuZCB0YXNrcyB3aGVuIHlvdSBhcmUgbm90IHVzaW5nIGl0LicsXG4gICAgICAgICdGaXJzdCB3ZSB3aWxsIHNlbmQgYmFzaWMgZGlhZ25vc3RpYyBkYXRhIHRvIERvcmlhbiBHcmF5IHNlcnZlcnMgd2l0aCB5b3VyIHJlcXVlc3QgJ1xuICAgICAgICAnc28gd2Uga25vdyB3aGF0IHlvdXIgbWFjaGluZSBjYW4gYW5kIGNhbm5vdCBoYW5kbGUuJyxcbiAgICAgICAgJ091ciB0ZWFtIHJldmlld3MgZWFjaCByZXF1ZXN0LiBJZiBhcHByb3ZlZCwgc2V0dXAgcnVucyBhdXRvbWF0aWNhbGx5LicsXG4gICAgICAgICdEdXJpbmcgc2V0dXAsIGluc3RhbGxhdGlvbiBwcm9ncmVzcyBhbmQgZGlhZ25vc3RpYyBtZXNzYWdlcyBhcmUgc2VudCB0byBvdXIgdGVhbS4nLFxuICAgICAgICAnJyxcbiAgICAgICAgJ1dlIG5ldmVyIGNvbGxlY3QgcGFzc3dvcmRzLCBmaWxlcywgcGhvdG9zLCBicm93c2luZyBoaXN0b3J5LCBzZXJpYWwgbnVtYmVycywgb3IgbmV0d29yayBhZGRyZXNzZXMuJyxcbiAgICBdXG5cblxuRU5ST0xMTUVOVF9TVEVQUyA9IFtcbiAgICAoXG4gICAgICAgICcxJyxcbiAgICAgICAgJ0FzayB0byBqb2luJyxcbiAgICAgICAgJ1RlbGwgdXMgd2hvIHlvdSBhcmUuIFdlIHdpbGwgc2VuZCBhIHJlcXVlc3QgZnJvbSB0aGlzIGNvbXB1dGVyLicsXG4gICAgKSxcbiAgICAoXG4gICAgICAgICcyJyxcbiAgICAgICAgJ1dlIGNoZWNrIHRoZSBiYXNpY3MnLFxuICAgICAgICAnRmlyc3Qgd2Ugc2VuZCBiYXNpYyBkaWFnbm9zdGljIGRhdGEgd2l0aCB5b3VyIHJlcXVlc3Qgc28gd2Uga25vdyB3aGF0IHRoaXMgbWFjaGluZSBjYW4gYW5kIGNhbm5vdCBoYW5kbGUuJyxcbiAgICApLFxuICAgIChcbiAgICAgICAgJzMnLFxuICAgICAgICAnV2Ugc2V0IGl0IHVwJyxcbiAgICAgICAgJ1NvbWVvbmUgb24gb3VyIHRlYW0gcmV2aWV3cyBpdC4gSWYgdGhleSBzYXkgeWVzLCBzZXR1cCBoYXBwZW5zIGhlcmUgYXV0b21hdGljYWxseS4nLFxuICAgICksXG5dXG5cblxuU0VUVVBfU1RFUFMgPSBbXG4gICAgKCdBcHByb3ZlZCcsICdEb3JpYW4gR3JheSBhY2NlcHRlZCB0aGlzIGNvbXB1dGVyLiBTZXR1cCBzdGFydHMgbm93LicpLFxuICAgICgnR2V0dGluZyB0aGlzIGNvbXB1dGVyIHJlYWR5JywgJ0NoZWNraW5nIG1lbW9yeSwgRG9ja2VyLCBhbmQgYSBmZXcgc3lzdGVtIHNldHRpbmdzLicpLFxuICAgICgnSW5zdGFsbGluZyB3aGF0IHdlIG5lZWQnLCAnVGhlIGZpcnN0IHRpbWUgdGhpcyBjYW4gdGFrZSBhIGZldyBtaW51dGVzLicpLFxuICAgICgnU3RhcnRpbmcgdGhlIGJhY2tncm91bmQgd29ya2VyJywgJ0l0IHdpbGwga2VlcCBydW5uaW5nIGFmdGVyIHlvdSBjbG9zZSB0aGlzIHdpbmRvdy4nKSxcbiAgICAoJ0Nvbm5lY3RpbmcnLCAnRG93bmxvYWRpbmcgdGhlIHdvcmtlciBzb2Z0d2FyZSBhbmQgY2hlY2tpbmcgaW4gd2l0aCBEb3JpYW4gR3JheS4nKSxcbiAgICAoJ0FsbCBzZXQnLCAnWW91IGNhbiBsZWF2ZSB0aGlzIHdpbmRvdyBvcGVuIG9yIHF1aXQuIFRoZSB3b3JrZXIgc3RheXMgb24uJyksXG5dXG5cblxuSU5TVEFMTF9MSU5FX0hJTlRTID0gKFxuICAgICgnQXBwcm92ZWQuIFN0YXJ0aW5nIHNldHVwJywgMCwgJ0FwcHJvdmVkJywgJ1NhdmluZyB0aGlzIGNvbXB1dGVyIG9uIHRoZSB3b3JrZXIgbGlzdC4nKSxcbiAgICAoJ0NoZWNraW5nIHRoaXMgY29tcHV0ZXInLCAxLCAnQ2hlY2tpbmcgdGhpcyBjb21wdXRlcicsICdNYWtpbmcgc3VyZSBpdCBoYXMgZW5vdWdoIG1lbW9yeSBhbmQgdGhlIHJpZ2h0IHRvb2xzLicpLFxuICAgICgnUHJlcGFyaW5nIHRoaXMgY29tcHV0ZXInLCAxLCAnUHJlcGFyaW5nIHRoaXMgY29tcHV0ZXInLCAnQWRqdXN0aW5nIGEgZmV3IHN5c3RlbSBzZXR0aW5ncyBzbyB3b3JrIHN0YXlzIGluIG1lbW9yeS4nKSxcbiAgICAoJ0luc3RhbGxpbmcgcmVxdWlyZWQgdG9vbHMnLCAyLCAnSW5zdGFsbGluZyB0b29scycsICdUaGlzIGNhbiB0YWtlIGEgZmV3IG1pbnV0ZXMgdGhlIGZpcnN0IHRpbWUuJyksXG4gICAgKCdJbnN0YWxsaW5nIEhvbWVicmV3JywgMiwgJ0luc3RhbGxpbmcgSG9tZWJyZXcnLCAnQXBwbGUgbWF5IGFsc28gaW5zdGFsbCBDb21tYW5kIExpbmUgVG9vbHMuIEZvbGxvdyB0aGUgc2V0dXAgbG9nIGZvciBwcm9ncmVzcy4nKSxcbiAgICAoJ0hvbWVicmV3IGlzIHN0aWxsIGluc3RhbGxpbmcnLCAyLCAnSW5zdGFsbGluZyBIb21lYnJldycsICdIb21lYnJldyBpcyBzdGlsbCBydW5uaW5nLiBBcHBsZSBDb21tYW5kIExpbmUgVG9vbHMgY2FuIHRha2Ugc2V2ZXJhbCBtaW51dGVzLicpLFxuICAgICgnSW5zdGFsbGluZyBMaW1hJywgMiwgJ0luc3RhbGxpbmcgYSBMaW51eCB2aXJ0dWFsIG1hY2hpbmUnLCAnVGhpcyBNYWMgcnVucyB0aGUgd29ya2VyIGluc2lkZSBMaW51eC4gRmlyc3QgZG93bmxvYWQgY2FuIHRha2UgYSB3aGlsZS4nKSxcbiAgICAoJ0NyZWF0aW5nIGEgTGludXggd29ya2VyIHZpcnR1YWwgbWFjaGluZScsIDIsICdDcmVhdGluZyBhIExpbnV4IHZpcnR1YWwgbWFjaGluZScsICdUaGUgZmlyc3QgZG93bmxvYWQgY2FuIHRha2Ugc2V2ZXJhbCBtaW51dGVzLicpLFxuICAgICgnU3RhcnRpbmcgdGhlIExpbnV4IHdvcmtlciB2aXJ0dWFsIG1hY2hpbmUnLCAyLCAnU3RhcnRpbmcgdGhlIExpbnV4IHZpcnR1YWwgbWFjaGluZScsICdUaGUgd29ya2VyIHJ1bnMgaW5zaWRlIHRoaXMgVk0gc28gaXQgbWF0Y2hlcyBhIExpbnV4IGhvc3QuJyksXG4gICAgKCdkaXNhYmxpbmcgZGlzayBzd2FwJywgMSwgJ0tlZXBpbmcgdGFzayBmaWxlcyBpbiBtZW1vcnknLCAnVGFzayBzY3JhdGNoIGlzIHRtcGZzOyB0aGUgd29ya2VyIGNncm91cCBkb2VzIG5vdCB1c2Ugc3dhcC4nKSxcbiAgICAoJ1NhdmluZyB0aGlzIGNvbXB1dGVyJywgMywgJ1NhdmluZyB0aGUgY29ubmVjdGlvbicsICdUaGlzIGNvbXB1dGVyIGNhbiBub3cgY2hlY2sgaW4gYXMgYSB3b3JrZXIuJyksXG4gICAgKCdJbnN0YWxsaW5nIHRoZSB3b3JrZXIgaW5zaWRlJywgMywgJ0luc3RhbGxpbmcgaW5zaWRlIHRoZSB2aXJ0dWFsIG1hY2hpbmUnLCAnVGhlIExpbnV4IGluc3RhbGxlciBpcyBydW5uaW5nIGluIHRoZSBiYWNrZ3JvdW5kLicpLFxuICAgICgnSW5zdGFsbGluZyB0aGUgYmFja2dyb3VuZCB3b3JrZXInLCAzLCAnU3RhcnRpbmcgdGhlIGJhY2tncm91bmQgd29ya2VyJywgJ1R1cm5pbmcgb24gdGhlIHNlcnZpY2UgdGhhdCBydW5zIGFmdGVyIHRoaXMgd2luZG93IGlzIGNsb3NlZC4nKSxcbiAgICAoJ01hYyBuZXR3b3JrIGhlbHBlcicsIDMsICdTdGFydGluZyBhIE1hYyBuZXR3b3JrIGhlbHBlcicsICdQaG90byBzdG9yYWdlIHdpbGwgdXNlIHRoaXMgY29tcHV0ZXLigJlzIG5ldHdvcmsuJyksXG4gICAgKCdDb25uZWN0aW5nIGFuZCBkb3dubG9hZGluZycsIDQsICdEb3dubG9hZGluZyB0aGUgd29ya2VyIHNvZnR3YXJlJywgJ1RoaXMgY2FuIHRha2Ugc2V2ZXJhbCBtaW51dGVzLiBZb3UgY2FuIGtlZXAgdXNpbmcgdGhpcyBjb21wdXRlci4nKSxcbiAgICAoJ1dvcmtlciBlbnJvbGxlZCcsIDMsICdXb3JrZXIgZW5yb2xsZWQnLCAnQ29uZmlndXJhdGlvbiBhbmQgdGFzayBpbWFnZXMgYXJlIG9idGFpbmVkIGF0IGNoZWNrLWluLicpLFxuICAgICgnQ29ubmVjdGVkIScsIDUsICdDb25uZWN0ZWQnLCAnVGhpcyBjb21wdXRlciBpcyBub3cgYW4gb2ZmaWNpYWwgd29ya2VyLicpLFxuICAgICgnU2V0dXAgbmVlZHMgYXR0ZW50aW9uJywgTm9uZSwgTm9uZSwgTm9uZSksXG4pXG5cblxuZGVmIGZyaWVuZGx5X2luc3RhbGxfbGluZShsaW5lKTpcbiAgICB0ZXh0ID0gJyAnLmpvaW4obGluZS5zdHJpcCgpLnNwbGl0KCkpXG4gICAgaWYgbm90IHRleHQ6XG4gICAgICAgIHJldHVybiBOb25lXG4gICAgZm9yIG5lZWRsZSwgc3RlcCwgdGl0bGUsIGRldGFpbCBpbiBJTlNUQUxMX0xJTkVfSElOVFM6XG4gICAgICAgIGlmIG5lZWRsZS5sb3dlcigpIGluIHRleHQubG93ZXIoKTpcbiAgICAgICAgICAgIHJldHVybiB7J3N0ZXAnOiBzdGVwLCAndGl0bGUnOiB0aXRsZSwgJ2RldGFpbCc6IGRldGFpbCBvciB0ZXh0LCAncmF3JzogdGV4dH1cbiAgICBpZiB0ZXh0LnN0YXJ0c3dpdGgoJ1NldHVwIG5lZWRzIGF0dGVudGlvbjonKTpcbiAgICAgICAgcmV0dXJuIHsnc3RlcCc6IE5vbmUsICd0aXRsZSc6IE5vbmUsICdkZXRhaWwnOiB0ZXh0LnNwbGl0KCc6JywgMSlbLTFdLnN0cmlwKCksICdyYXcnOiB0ZXh0LCAnZXJyb3InOiBUcnVlfVxuICAgIHJldHVybiB7J3N0ZXAnOiBOb25lLCAndGl0bGUnOiBOb25lLCAnZGV0YWlsJzogdGV4dCwgJ3Jhdyc6IHRleHR9XG5cblxuZGVmIGZyaWVuZGx5X2Jvb2wodmFsdWUpOlxuICAgIGlmIHZhbHVlIGlzIE5vbmU6XG4gICAgICAgIHJldHVybiAndW5rbm93bidcbiAgICByZXR1cm4gJ1llcycgaWYgdmFsdWUgZWxzZSAnTm8nXG5cblxuZGVmIGZvcm1hdF9ieXRlcyh2YWx1ZSk6XG4gICAgaWYgbm90IHZhbHVlOlxuICAgICAgICByZXR1cm4gJ3Vua25vd24nXG4gICAgdW5pdHMgPSBbJ0InLCAnS2lCJywgJ01pQicsICdHaUInLCAnVGlCJ11cbiAgICBzaXplID0gZmxvYXQodmFsdWUpXG4gICAgZm9yIHVuaXQgaW4gdW5pdHM6XG4gICAgICAgIGlmIHNpemUgPCAxMDI0IG9yIHVuaXQgPT0gdW5pdHNbLTFdOlxuICAgICAgICAgICAgcmV0dXJuIGYne3NpemU6LjBmfSB7dW5pdH0nIGlmIHVuaXQgPT0gJ0InIGVsc2UgZid7c2l6ZTouMWZ9IHt1bml0fSdcbiAgICAgICAgc2l6ZSAvPSAxMDI0XG5cblxuZGVmIGRyYXdfc2VyaWVzKGNhbnZhcywgdmFsdWVzLCBsaW5lLCBmaWxsLCBmbG9vcj1Ob25lLCBjZWlsaW5nPU5vbmUpOlxuICAgIGNhbnZhcy5kZWxldGUoJ2FsbCcpXG4gICAgd2lkdGggPSBtYXgoaW50KGNhbnZhcy53aW5mb193aWR0aCgpIG9yIGNhbnZhcy5jZ2V0KCd3aWR0aCcpIG9yIDApLCAyKVxuICAgIGhlaWdodCA9IG1heChpbnQoY2FudmFzLndpbmZvX2hlaWdodCgpIG9yIGNhbnZhcy5jZ2V0KCdoZWlnaHQnKSBvciAwKSwgMilcbiAgICBjYW52YXMuY3JlYXRlX3JlY3RhbmdsZSgwLCAwLCB3aWR0aCwgaGVpZ2h0LCBmaWxsPScjZmZmY2Y4Jywgb3V0bGluZT0nJylcbiAgICBpZiBsZW4odmFsdWVzKSA8IDI6XG4gICAgICAgIHJldHVyblxuICAgIGxvID0gZmxvb3IgaWYgZmxvb3IgaXMgbm90IE5vbmUgZWxzZSBtaW4odmFsdWVzKVxuICAgIGhpID0gY2VpbGluZyBpZiBjZWlsaW5nIGlzIG5vdCBOb25lIGVsc2UgbWF4KHZhbHVlcylcbiAgICBpZiBoaSA8PSBsbzpcbiAgICAgICAgaGkgPSBsbyArIDFcbiAgICBwYWQgPSA2XG4gICAgaW5uZXJfdyA9IG1heCh3aWR0aCAtIHBhZCAqIDIsIDEpXG4gICAgaW5uZXJfaCA9IG1heChoZWlnaHQgLSBwYWQgKiAyLCAxKVxuICAgIHBvaW50cyA9IFtdXG4gICAgbGFzdCA9IG1heChsZW4odmFsdWVzKSAtIDEsIDEpXG4gICAgZm9yIGluZGV4LCB2YWx1ZSBpbiBlbnVtZXJhdGUodmFsdWVzKTpcbiAgICAgICAgeCA9IHBhZCArIGlubmVyX3cgKiBpbmRleCAvIGxhc3RcbiAgICAgICAgeSA9IHBhZCArIGlubmVyX2ggKiAoMSAtICh2YWx1ZSAtIGxvKSAvIChoaSAtIGxvKSlcbiAgICAgICAgcG9pbnRzLmV4dGVuZCgoeCwgeSkpXG4gICAgY2FudmFzLmNyZWF0ZV9wb2x5Z29uKHBhZCwgaGVpZ2h0IC0gcGFkLCAqcG9pbnRzLCBwYWQgKyBpbm5lcl93LCBoZWlnaHQgLSBwYWQsIGZpbGw9ZmlsbCwgb3V0bGluZT0nJylcbiAgICBjYW52YXMuY3JlYXRlX2xpbmUoKnBvaW50cywgZmlsbD1saW5lLCB3aWR0aD0yKVxuXG5cbmRlZiBzZXR1cF9wbGFuKG9yaWdpbik6XG4gICAgaW1hZ2UgPSAncmVnaXN0cnkuZ2l0bGFiLmNvbS9kb3JpYW4tZ3JheS1lbnRlcnByaXNlcy9hdXRvbWF0aW9uL2NvbXB1dGUtd29ya2VyJ1xuICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICdUaGlzIE1hYyB3aWxsIHJ1biB0aGUgd29ya2VyIGluc2lkZSBhIExpbnV4IHZpcnR1YWwgbWFjaGluZSAoTGltYSArIFVidW50dSAyNC4wNCkuICdcbiAgICAgICAgICAgICdIb21lYnJldyBtYXkgaW5zdGFsbCBMaW1hLiBTZXR1cCBuZWVkcyB5b3VyIE1hYyBwYXNzd29yZCBmb3IgdGhlIExpbnV4IGluc3RhbGxlciBpbnNpZGUgdGhlIFZNLicsXG4gICAgICAgICAgICAnXFxuJy5qb2luKFtcbiAgICAgICAgICAgICAgICAnSG9zdDogbWFjT1MuIEd1ZXN0OiBMaW1hIGluc3RhbmNlIGBkZ2Utd29ya2VyYCBmcm9tIHRlbXBsYXRlOi8vdWJ1bnR1LTI0LjA0LicsXG4gICAgICAgICAgICAgICAgJ0hvc3QgaGVscGVyOiBtYWNvc19yMl9wcm94eS5weSBvbiAxMjcuMC4wLjE6MTg3ODkgc28gUjIgVExTIHN0YXlzIG9uIHRoZSBNYWMuJyxcbiAgICAgICAgICAgICAgICAnTGF1bmNoQWdlbnQ6IH4vTGlicmFyeS9MYXVuY2hBZ2VudHMvY29tLmRnZS5jb21wdXRlLWhvc3QtZ3VpLnBsaXN0JyxcbiAgICAgICAgICAgICAgICBmJ0d1ZXN0IGltYWdlOiB7aW1hZ2V9OnN0YWJsZSwgcmVzb2x2ZWQgdG8gYW4gaW1tdXRhYmxlIHNoYTI1NiBkaWdlc3QgYXQgYXBwcm92YWwuJyxcbiAgICAgICAgICAgICAgICAnR3Vlc3QgbGF5b3V0OiAvb3B0L2RnZS13b3JrZXIve2xhdW5jaGVyLnB5LGJvb3RzdHJhcC9hZ2VudC5weSxpZGVudGl0eS5qc29ufScsXG4gICAgICAgICAgICAgICAgJ0d1ZXN0IHNlcnZpY2U6IHN5c3RlbWQgZGdlLXdvcmtlci5zZXJ2aWNlIGluIGNvbXB1dGUuc2xpY2U7IHRtcGZzIC9ydW4vZGdlLXdvcmtlci90YXNrcy4nLFxuICAgICAgICAgICAgICAgICdHdWVzdCBEb2NrZXI6IGRvY2tlci5pbywgY2dyb3VwIHYyLCBNZW1vcnlTd2FwTWF4PTAgZm9yIHRoZSB3b3JrZXIsIGRvY2tlciBwdWxsIG9mIHRoZSBkaWdlc3QgYXQgY2hlY2staW4uJyxcbiAgICAgICAgICAgICAgICBmJ0NoZWNrLWluOiB7b3JpZ2lufS9jb21wdXRlX2ZsZWV0L3N0YXR1cyB3aXRoIGEgd29ya2VyIGJlYXJlciB0b2tlbi4nLFxuICAgICAgICAgICAgICAgICdDb21tYW5kcyBpbmNsdWRlOiBicmV3IGluc3RhbGwgbGltYTsgbGltYWN0bCBzdGFydDsgbGltYWN0bCBzaGVsbCBzdWRvIGJhc2ggL3RtcC9zZXR1cC13b3JrZXIuc2gnLFxuICAgICAgICAgICAgXSksXG4gICAgICAgIClcbiAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICdXaW5kb3dzIHdpbGwgcnVuIHRoZSB3b3JrZXIgaW5zaWRlIFVidW50dSAoV1NMKSB3aXRoIHN5c3RlbWQuICdcbiAgICAgICAgICAgICdJZiBVYnVudHUgaXMgbWlzc2luZywgV2luZG93cyB3aWxsIGFzayBmb3IgcGVybWlzc2lvbiBhbmQgbWF5IG5lZWQgb25lIHJlc3RhcnQuJyxcbiAgICAgICAgICAgICdcXG4nLmpvaW4oW1xuICAgICAgICAgICAgICAgICdIb3N0OiBXaW5kb3dzLiBHdWVzdDogV1NMIFVidW50dSB3aXRoIHN5c3RlbWQ9dHJ1ZS4nLFxuICAgICAgICAgICAgICAgIGYnR3Vlc3QgaW1hZ2U6IHtpbWFnZX06c3RhYmxlLCByZXNvbHZlZCB0byBhbiBpbW11dGFibGUgc2hhMjU2IGRpZ2VzdCBhdCBhcHByb3ZhbC4nLFxuICAgICAgICAgICAgICAgICdHdWVzdCBsYXlvdXQ6IC9vcHQvZGdlLXdvcmtlci97bGF1bmNoZXIucHksYm9vdHN0cmFwL2FnZW50LnB5LGlkZW50aXR5Lmpzb259JyxcbiAgICAgICAgICAgICAgICAnR3Vlc3Qgc2VydmljZTogc3lzdGVtZCBkZ2Utd29ya2VyLnNlcnZpY2UgaW4gY29tcHV0ZS5zbGljZTsgdG1wZnMgL3J1bi9kZ2Utd29ya2VyL3Rhc2tzLicsXG4gICAgICAgICAgICAgICAgJ0d1ZXN0IERvY2tlcjogZG9ja2VyLmlvLCBjZ3JvdXAgdjIsIE1lbW9yeVN3YXBNYXg9MCBmb3IgdGhlIHdvcmtlciwgZG9ja2VyIHB1bGwgb2YgdGhlIGRpZ2VzdCBhdCBjaGVjay1pbi4nLFxuICAgICAgICAgICAgICAgIGYnQ2hlY2staW46IHtvcmlnaW59L2NvbXB1dGVfZmxlZXQvc3RhdHVzIHdpdGggYSB3b3JrZXIgYmVhcmVyIHRva2VuLicsXG4gICAgICAgICAgICAgICAgJ0NvbW1hbmRzIGluY2x1ZGU6IHdzbCAtLWluc3RhbGwgLWQgVWJ1bnR1OyB3c2wgLWQgVWJ1bnR1IC0tIHN1ZG8gcHl0aG9uMyBpbnN0YWxsLnB5JyxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICApXG4gICAgcmV0dXJuIChcbiAgICAgICAgJ1RoaXMgTGludXggY29tcHV0ZXIgd2lsbCBpbnN0YWxsIERvY2tlciBpZiBuZWVkZWQgJ1xuICAgICAgICAnYW5kIHJ1biBhIHN5c3RlbWQgd29ya2VyIHRoYXQgcHVsbHMgdGhlIHB1Ymxpc2hlZCBjb250YWluZXIgaW1hZ2UuIFNldHVwIG5lZWRzIHlvdXIgYWRtaW5pc3RyYXRvciBwYXNzd29yZC4nLFxuICAgICAgICAnXFxuJy5qb2luKFtcbiAgICAgICAgICAgICdIb3N0OiBMaW51eCAoVWJ1bnR1IDI04oCTMjYgb3IgRGViaWFuIDEy4oCTMTMpLiBQcml2aWxlZ2VkIHN0ZXBzIHVzZSBwa2V4ZWMvc3Vkby4nLFxuICAgICAgICAgICAgJ1BhY2thZ2VzIGlmIG1pc3Npbmc6IGRvY2tlci5pbyBpcHJvdXRlMiBwY2l1dGlscyB1dGlsLWxpbnV4IHZpYSBhcHQtZ2V0LicsXG4gICAgICAgICAgICAnSG9zdCBwcmVwOiBzeXN0ZW1jdGwgZW5hYmxlIC0tbm93IGRvY2tlci5zZXJ2aWNlLiBIb3N0IHN3YXAgaXMgbGVmdCBlbmFibGVkLicsXG4gICAgICAgICAgICBmJ0ltYWdlOiB7aW1hZ2V9OnN0YWJsZSwgcmVzb2x2ZWQgdG8gYW4gaW1tdXRhYmxlIHNoYTI1NiBkaWdlc3QgYXQgYXBwcm92YWwuJyxcbiAgICAgICAgICAgICdMYXlvdXQ6IC9vcHQvZGdlLXdvcmtlci97bGF1bmNoZXIucHksYm9vdHN0cmFwL2FnZW50LnB5LGlkZW50aXR5Lmpzb24sY3VycmVudC5qc29ufScsXG4gICAgICAgICAgICAnU2VydmljZTogL2V0Yy9zeXN0ZW1kL3N5c3RlbS9kZ2Utd29ya2VyLnNlcnZpY2UgaW4gY29tcHV0ZS5zbGljZSwgTWVtb3J5U3dhcE1heD0wLicsXG4gICAgICAgICAgICAnU2NyYXRjaDogdG1wZnMgL3J1bi9kZ2Utd29ya2VyL3Rhc2tzICgyNTZtLCBub3N1aWQsbm9kZXYsbm9leGVjKS4nLFxuICAgICAgICAgICAgJ0lmIEdpdExhYiBSdW5uZXIgaXMgcHJlc2VudDogL2V0Yy9naXRsYWItcnVubmVyL2NvbmZpZy50b21sIGNncm91cF9wYXJlbnQ9Y2kuc2xpY2UuJyxcbiAgICAgICAgICAgICdBdCBjaGVjay1pbiB0aGUgYWdlbnQgZG9ja2VyLXB1bGxzIHRoZSBkaWdlc3QgYW5kIHJ1bnMgdGhlIHdvcmtlciBjb250YWluZXIgd2l0aCAtLW1lbW9yeS1zd2FwIGVxdWFsIHRvIC0tbWVtb3J5LicsXG4gICAgICAgICAgICBmJ0FQSTogUE9TVCB7b3JpZ2lufS9jb21wdXRlX2ZsZWV0L3N0YXR1cyB3aXRoIEF1dGhvcml6YXRpb246IEJlYXJlciA8d29ya2VyIHRva2VuPi4nLFxuICAgICAgICAgICAgJ1R5cGljYWwgY29tbWFuZHM6IGFwdC1nZXQgdXBkYXRlOyBhcHQtZ2V0IGluc3RhbGwgLXkgZG9ja2VyLmlvOyBzeXN0ZW1jdGwgZW5hYmxlIC0tbm93IGRvY2tlcjsnLFxuICAgICAgICAgICAgJ3N5c3RlbWN0bCBkYWVtb24tcmVsb2FkOyBzeXN0ZW1jdGwgZW5hYmxlIC0tbm93IGRnZS13b3JrZXIuc2VydmljZS4nLFxuICAgICAgICBdKSxcbiAgICApXG5cblxuZGVmIGluc3RhbGxfbGludXhfZGVza3RvcF9lbnRyeShndWlfc2NyaXB0LCBzY3JpcHRfcGF0aCk6XG4gICAgaWNvbl9zcmMgPSBST09UIC8gJ2RnZS1pY29uLnBuZydcbiAgICBpZiBub3QgaWNvbl9zcmMuZXhpc3RzKCk6XG4gICAgICAgIHJldHVybiBGYWxzZVxuXG4gICAgYXBwc19kaXIgPSBQYXRoLmhvbWUoKSAvICcubG9jYWwnIC8gJ3NoYXJlJyAvICdhcHBsaWNhdGlvbnMnXG4gICAgYXBwc19kaXIubWtkaXIocGFyZW50cz1UcnVlLCBleGlzdF9vaz1UcnVlKVxuICAgIGZvciBzaXplIGluICg0OCwgMTI4LCAyNTYpOlxuICAgICAgICBpY29uX2RpciA9IFBhdGguaG9tZSgpIC8gJy5sb2NhbCcgLyAnc2hhcmUnIC8gJ2ljb25zJyAvICdoaWNvbG9yJyAvIGYne3NpemV9eHtzaXplfScgLyAnYXBwcydcbiAgICAgICAgaWNvbl9kaXIubWtkaXIocGFyZW50cz1UcnVlLCBleGlzdF9vaz1UcnVlKVxuICAgICAgICBkZXN0ID0gaWNvbl9kaXIgLyBmJ3tMSU5VWF9JQ09OX05BTUV9LnBuZydcbiAgICAgICAgaWYgc2h1dGlsLndoaWNoKCdjb252ZXJ0Jyk6XG4gICAgICAgICAgICBzdWJwcm9jZXNzLnJ1bihcbiAgICAgICAgICAgICAgICBbJ2NvbnZlcnQnLCBzdHIoaWNvbl9zcmMpLCAnLXJlc2l6ZScsIGYne3NpemV9eHtzaXplfScsIHN0cihkZXN0KV0sXG4gICAgICAgICAgICAgICAgY2hlY2s9RmFsc2UsXG4gICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuREVWTlVMTCxcbiAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5ERVZOVUxMLFxuICAgICAgICAgICAgKVxuICAgICAgICBlbGlmIG5vdCBkZXN0LmV4aXN0cygpOlxuICAgICAgICAgICAgc2h1dGlsLmNvcHkoaWNvbl9zcmMsIGRlc3QpXG5cbiAgICBwaXhtYXBzID0gUGF0aC5ob21lKCkgLyAnLmxvY2FsJyAvICdzaGFyZScgLyAncGl4bWFwcydcbiAgICBwaXhtYXBzLm1rZGlyKHBhcmVudHM9VHJ1ZSwgZXhpc3Rfb2s9VHJ1ZSlcbiAgICBwaXhtYXBfaWNvbiA9IHBpeG1hcHMgLyBmJ3tMSU5VWF9JQ09OX05BTUV9LnBuZydcbiAgICBzaHV0aWwuY29weShpY29uX3NyYywgcGl4bWFwX2ljb24pXG4gICAgaWNvbl8xMjggPSBQYXRoLmhvbWUoKSAvICcubG9jYWwnIC8gJ3NoYXJlJyAvICdpY29ucycgLyAnaGljb2xvcicgLyAnMTI4eDEyOCcgLyAnYXBwcycgLyBmJ3tMSU5VWF9JQ09OX05BTUV9LnBuZydcbiAgICBpY29uX3BhdGggPSBzdHIoaWNvbl8xMjggaWYgaWNvbl8xMjguZXhpc3RzKCkgZWxzZSBwaXhtYXBfaWNvbilcbiAgICBleGVjX3BhcnRzID0gW1xuICAgICAgICAnZW52JyxcbiAgICAgICAgJ0RHRV9MSU5VWF9ERVNLVE9QX0xBVU5DSEVEPTEnLFxuICAgICAgICAnR0RLX0JBQ0tFTkQ9eDExJyxcbiAgICAgICAgc3lzLmV4ZWN1dGFibGUsXG4gICAgICAgIHN0cihndWlfc2NyaXB0KSxcbiAgICAgICAgc3RyKHNjcmlwdF9wYXRoKSxcbiAgICBdXG4gICAgZGVza3RvcCA9IGZcIlwiXCJbRGVza3RvcCBFbnRyeV1cblZlcnNpb249MS4wXG5UeXBlPUFwcGxpY2F0aW9uXG5OYW1lPURvcmlhbiBHcmF5IFdvcmtlclxuQ29tbWVudD1SdW4gRG9yaWFuIEdyYXkgYmFja2dyb3VuZCB3b3JrIHdoZW4gdGhpcyBjb21wdXRlciBpcyBpZGxlXG5FeGVjPXsnICcuam9pbihzaGxleC5xdW90ZShwYXJ0KSBmb3IgcGFydCBpbiBleGVjX3BhcnRzKX1cbkljb249e2ljb25fcGF0aH1cblRlcm1pbmFsPWZhbHNlXG5TdGFydHVwV01DbGFzcz17TElOVVhfV01fQ0xBU1N9XG5DYXRlZ29yaWVzPVV0aWxpdHk7XG5cIlwiXCJcbiAgICAoYXBwc19kaXIgLyBmJ3tERVNLVE9QX0FQUF9JRH0uZGVza3RvcCcpLndyaXRlX3RleHQoZGVza3RvcClcbiAgICBzdWJwcm9jZXNzLnJ1bihcbiAgICAgICAgWyd1cGRhdGUtZGVza3RvcC1kYXRhYmFzZScsIHN0cihhcHBzX2RpcildLFxuICAgICAgICBjaGVjaz1GYWxzZSxcbiAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuREVWTlVMTCxcbiAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuREVWTlVMTCxcbiAgICApXG4gICAgaWNvbl90aGVtZSA9IFBhdGguaG9tZSgpIC8gJy5sb2NhbCcgLyAnc2hhcmUnIC8gJ2ljb25zJyAvICdoaWNvbG9yJ1xuICAgIGlmIGljb25fdGhlbWUuZXhpc3RzKCk6XG4gICAgICAgIHN1YnByb2Nlc3MucnVuKFxuICAgICAgICAgICAgWydndGstdXBkYXRlLWljb24tY2FjaGUnLCAnLWYnLCAnLXQnLCBzdHIoaWNvbl90aGVtZSldLFxuICAgICAgICAgICAgY2hlY2s9RmFsc2UsXG4gICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5ERVZOVUxMLFxuICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuREVWTlVMTCxcbiAgICAgICAgKVxuICAgIHJldHVybiBUcnVlXG5cblxuZGVmIHdhbnRfaGVhZGxlc3MoKTpcbiAgICBmbGFnID0gb3MuZW52aXJvbi5nZXQoJ0RHRV9FTlJPTExfSEVBRExFU1MnLCAnJykuc3RyaXAoKS5sb3dlcigpXG4gICAgaWYgZmxhZyBpbiAoJzEnLCAndHJ1ZScsICd5ZXMnKTpcbiAgICAgICAgcmV0dXJuIFRydWVcbiAgICBpZiBub3Qgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2xpbnV4Jyk6XG4gICAgICAgIHJldHVybiBGYWxzZVxuICAgIHJldHVybiBub3QgKG9zLmVudmlyb24uZ2V0KCdESVNQTEFZJykgb3Igb3MuZW52aXJvbi5nZXQoJ1dBWUxBTkRfRElTUExBWScpKVxuXG5cbmRlZiBjbGlfY29udGFjdCgpOlxuICAgIG5hbWUgPSBvcy5lbnZpcm9uLmdldCgnREdFX0VOUk9MTF9OQU1FJywgJycpLnN0cmlwKClcbiAgICBlbWFpbCA9IG9zLmVudmlyb24uZ2V0KCdER0VfRU5ST0xMX0VNQUlMJywgJycpLnN0cmlwKClcbiAgICBwaG9uZSA9IG9zLmVudmlyb24uZ2V0KCdER0VfRU5ST0xMX1BIT05FJywgJycpLnN0cmlwKClcbiAgICBub3RlID0gb3MuZW52aXJvbi5nZXQoJ0RHRV9FTlJPTExfTk9URScsICcnKS5zdHJpcCgpXG4gICAgaWYgbmFtZSBhbmQgZW1haWwgYW5kIHBob25lOlxuICAgICAgICByZXR1cm4geydkaXNwbGF5X25hbWUnOiBuYW1lLCAnZW1haWwnOiBlbWFpbCwgJ3Bob25lJzogcGhvbmUsICdub3RlJzogbm90ZX1cbiAgICByZXR1cm4gTm9uZVxuXG5cbmRlZiBsaW51eF9yZWxhdW5jaF92aWFfZGVza3RvcChzY3JpcHRfcGF0aCk6XG4gICAgaWYgbm90IHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCdsaW51eCcpOlxuICAgICAgICByZXR1cm4gRmFsc2VcbiAgICBpZiB3YW50X2hlYWRsZXNzKCk6XG4gICAgICAgIHJldHVybiBGYWxzZVxuICAgIGlmIG9zLmVudmlyb24uZ2V0KCdER0VfTElOVVhfREVTS1RPUF9MQVVOQ0hFRCcpID09ICcxJzpcbiAgICAgICAgcmV0dXJuIEZhbHNlXG4gICAgZ3VpX3NjcmlwdCA9IFJPT1QgLyAnaG9zdF9ndWkucHknXG4gICAgaWYgbm90IGluc3RhbGxfbGludXhfZGVza3RvcF9lbnRyeShndWlfc2NyaXB0LCBzY3JpcHRfcGF0aCk6XG4gICAgICAgIHJldHVybiBGYWxzZVxuICAgIGRlc2t0b3BfZmlsZSA9IFBhdGguaG9tZSgpIC8gJy5sb2NhbCcgLyAnc2hhcmUnIC8gJ2FwcGxpY2F0aW9ucycgLyBmJ3tERVNLVE9QX0FQUF9JRH0uZGVza3RvcCdcbiAgICBmb3IgY29tbWFuZCBpbiAoXG4gICAgICAgIChbJ2dpbycsICdsYXVuY2gnLCBzdHIoZGVza3RvcF9maWxlKV0gaWYgc2h1dGlsLndoaWNoKCdnaW8nKSBlbHNlIE5vbmUpLFxuICAgICAgICAoWydndGstbGF1bmNoJywgREVTS1RPUF9BUFBfSURdIGlmIHNodXRpbC53aGljaCgnZ3RrLWxhdW5jaCcpIGVsc2UgTm9uZSksXG4gICAgKTpcbiAgICAgICAgaWYgbm90IGNvbW1hbmQ6XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICByZXN1bHQgPSBzdWJwcm9jZXNzLnJ1bihjb21tYW5kLCBjaGVjaz1GYWxzZSlcbiAgICAgICAgaWYgcmVzdWx0LnJldHVybmNvZGUgPT0gMDpcbiAgICAgICAgICAgIHN5cy5leGl0KDApXG4gICAgcmV0dXJuIEZhbHNlXG5cblxuZGVmIG1hY29zX3JlbGF1bmNoX3ZpYV9hcXVhKHNjcmlwdF9wYXRoKTpcbiAgICBpZiBzeXMucGxhdGZvcm0gIT0gJ2Rhcndpbic6XG4gICAgICAgIHJldHVybiBGYWxzZVxuICAgIGlmIHdhbnRfaGVhZGxlc3MoKTpcbiAgICAgICAgcmV0dXJuIEZhbHNlXG4gICAgaWYgb3MuZW52aXJvbi5nZXQoJ0RHRV9NQUNfQVFVQV9MQVVOQ0hFRCcpID09ICcxJzpcbiAgICAgICAgcmV0dXJuIEZhbHNlXG4gICAgaWYgbm90IG9zLmVudmlyb24uZ2V0KCdTU0hfQ09OTkVDVElPTicpOlxuICAgICAgICByZXR1cm4gRmFsc2VcbiAgICByb290ID0gc3RyKFJPT1QpXG4gICAgaWYgcm9vdC5zdGFydHN3aXRoKCgnL3RtcC8nLCAnL3Zhci9mb2xkZXJzLycpKSBvciAnZGdlLXdvcmtlci1pbnN0YWxsLicgaW4gcm9vdDpcbiAgICAgICAgcmV0dXJuIEZhbHNlXG4gICAgcHl0aG9uID0gc2hsZXgucXVvdGUoc3lzLmV4ZWN1dGFibGUpXG4gICAgZ3VpID0gc2hsZXgucXVvdGUoc3RyKFJPT1QgLyAnaG9zdF9ndWkucHknKSlcbiAgICBzY3JpcHQgPSBzaGxleC5xdW90ZShzY3JpcHRfcGF0aClcbiAgICBjb21tYW5kID0gZidleHBvcnQgREdFX01BQ19BUVVBX0xBVU5DSEVEPTE7IGV4ZWMge3B5dGhvbn0ge2d1aX0ge3NjcmlwdH0nXG4gICAgZXNjYXBlZCA9IGNvbW1hbmQucmVwbGFjZSgnXFxcXCcsICdcXFxcXFxcXCcpLnJlcGxhY2UoJ1wiJywgJ1xcXFxcIicpXG4gICAgcmVzdWx0ID0gc3VicHJvY2Vzcy5ydW4oXG4gICAgICAgIFtcbiAgICAgICAgICAgICdvc2FzY3JpcHQnLFxuICAgICAgICAgICAgJy1lJywgJ3RlbGwgYXBwbGljYXRpb24gXCJUZXJtaW5hbFwiIHRvIGFjdGl2YXRlJyxcbiAgICAgICAgICAgICctZScsIGYndGVsbCBhcHBsaWNhdGlvbiBcIlRlcm1pbmFsXCIgdG8gZG8gc2NyaXB0IFwie2VzY2FwZWR9XCInLFxuICAgICAgICBdLFxuICAgICAgICBjaGVjaz1GYWxzZSxcbiAgICApXG4gICAgaWYgcmVzdWx0LnJldHVybmNvZGUgPT0gMDpcbiAgICAgICAgc3lzLmV4aXQoMClcbiAgICByZXR1cm4gRmFsc2VcblxuXG5kZWYgbG9hZF9icmFuZF9pY29uKHRrLCBzaXplPTQ4KTpcbiAgICBpY29uX3BhdGggPSBST09UIC8gJ2RnZS1pY29uLnBuZydcbiAgICBpZiBub3QgaWNvbl9wYXRoLmV4aXN0cygpOlxuICAgICAgICByZXR1cm4gTm9uZVxuICAgIHRyeTpcbiAgICAgICAgaW1hZ2UgPSB0ay5QaG90b0ltYWdlKGZpbGU9c3RyKGljb25fcGF0aCkpXG4gICAgICAgIGlmIGltYWdlLndpZHRoKCkgPiBzaXplOlxuICAgICAgICAgICAgZmFjdG9yID0gbWF4KDEsIHJvdW5kKGltYWdlLndpZHRoKCkgLyBzaXplKSlcbiAgICAgICAgICAgIGltYWdlID0gaW1hZ2Uuc3Vic2FtcGxlKGZhY3RvciwgZmFjdG9yKVxuICAgICAgICByZXR1cm4gaW1hZ2VcbiAgICBleGNlcHQgdGsuVGNsRXJyb3I6XG4gICAgICAgIHJldHVybiBOb25lXG5cblxuZGVmIHdpbmRvd19pY29uX2ltYWdlcyh0ayk6XG4gICAgaWNvbl9wYXRoID0gUk9PVCAvICdkZ2UtaWNvbi5wbmcnXG4gICAgaWYgbm90IGljb25fcGF0aC5leGlzdHMoKTpcbiAgICAgICAgcmV0dXJuIFtdXG4gICAgdHJ5OlxuICAgICAgICBtYXN0ZXIgPSB0ay5QaG90b0ltYWdlKGZpbGU9c3RyKGljb25fcGF0aCkpXG4gICAgZXhjZXB0IHRrLlRjbEVycm9yOlxuICAgICAgICByZXR1cm4gW11cbiAgICBpY29ucyA9IFtdXG4gICAgc2VlbiA9IHNldCgpXG4gICAgZm9yIHRhcmdldCBpbiAoMTYsIDI0LCAzMiwgNDgsIDY0LCA5NiwgMTI4LCAxOTIsIDI1Nik6XG4gICAgICAgIGlmIG1hc3Rlci53aWR0aCgpIDwgdGFyZ2V0OlxuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgZmFjdG9yID0gbWF4KDEsIG1hc3Rlci53aWR0aCgpIC8vIHRhcmdldClcbiAgICAgICAgc2l6ZSA9IG1hc3Rlci53aWR0aCgpIC8vIGZhY3RvclxuICAgICAgICBpZiBzaXplIGluIHNlZW46XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICBzZWVuLmFkZChzaXplKVxuICAgICAgICBpY29ucy5hcHBlbmQobWFzdGVyLnN1YnNhbXBsZShmYWN0b3IsIGZhY3RvcikpXG4gICAgcmV0dXJuIGljb25zIG9yIFttYXN0ZXJdXG5cblxuZGVmIGFwcGx5X3dpbmRvd19pY29uKHJvb3QpOlxuICAgIGltcG9ydCB0a2ludGVyIGFzIHRrXG5cbiAgICBpY29ucyA9IHdpbmRvd19pY29uX2ltYWdlcyh0aylcbiAgICBpZiBpY29uczpcbiAgICAgICAgcm9vdC5fd2luZG93X2ljb25zID0gaWNvbnNcbiAgICAgICAgdHJ5OlxuICAgICAgICAgICAgcm9vdC5pY29ucGhvdG8oVHJ1ZSwgKmljb25zKVxuICAgICAgICBleGNlcHQgdGsuVGNsRXJyb3I6XG4gICAgICAgICAgICB0cnk6XG4gICAgICAgICAgICAgICAgcm9vdC5pY29ucGhvdG8oVHJ1ZSwgaWNvbnNbLTFdKVxuICAgICAgICAgICAgZXhjZXB0IHRrLlRjbEVycm9yOlxuICAgICAgICAgICAgICAgIGljb25zID0gW11cbiAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzpcbiAgICAgICAgaWNvbl9wYXRoID0gUk9PVCAvICdkZ2UtaWNvbi5pY28nXG4gICAgICAgIGlmIGljb25fcGF0aC5leGlzdHMoKTpcbiAgICAgICAgICAgIHRyeTpcbiAgICAgICAgICAgICAgICByb290Lmljb25iaXRtYXAoc3RyKGljb25fcGF0aCkpXG4gICAgICAgICAgICBleGNlcHQgdGsuVGNsRXJyb3I6XG4gICAgICAgICAgICAgICAgcGFzc1xuICAgIGVsaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOlxuICAgICAgICBpY29uX3BhdGggPSBST09UIC8gJ2RnZS1pY29uLnBuZydcbiAgICAgICAgaWYgaWNvbl9wYXRoLmV4aXN0cygpOlxuICAgICAgICAgICAgdHJ5OlxuICAgICAgICAgICAgICAgIHJvb3QuaWNvbnBob3RvKFRydWUsIHRrLlBob3RvSW1hZ2UoZmlsZT1zdHIoaWNvbl9wYXRoKSkpXG4gICAgICAgICAgICBleGNlcHQgdGsuVGNsRXJyb3I6XG4gICAgICAgICAgICAgICAgcGFzc1xuICAgIHJldHVybiBpY29uc1xuXG5cbmRlZiBwcmVzZW50X3dpbmRvdyhyb290KTpcbiAgICBpbXBvcnQgdGtpbnRlciBhcyB0a1xuXG4gICAgYXBwbHlfd2luZG93X2ljb24ocm9vdClcbiAgICByb290LmRlaWNvbmlmeSgpXG4gICAgcm9vdC51cGRhdGVfaWRsZXRhc2tzKClcbiAgICB0cnk6XG4gICAgICAgIGlmIHJvb3Quc3RhdGUoKSA9PSAnem9vbWVkJzpcbiAgICAgICAgICAgIHJvb3Quc3RhdGUoJ25vcm1hbCcpXG4gICAgZXhjZXB0IHRrLlRjbEVycm9yOlxuICAgICAgICBwYXNzXG4gICAgZm9yIGZsYWcgaW4gKCctem9vbWVkJywgJy1mdWxsc2NyZWVuJyk6XG4gICAgICAgIHRyeTpcbiAgICAgICAgICAgIHJvb3QuYXR0cmlidXRlcyhmbGFnLCBGYWxzZSlcbiAgICAgICAgZXhjZXB0IHRrLlRjbEVycm9yOlxuICAgICAgICAgICAgcGFzc1xuICAgIHNjcmVlbl93ID0gcm9vdC53aW5mb19zY3JlZW53aWR0aCgpXG4gICAgc2NyZWVuX2ggPSByb290LndpbmZvX3NjcmVlbmhlaWdodCgpXG4gICAgd2lkdGggPSBtaW4oMTEwMCwgbWF4KDgyMCwgc2NyZWVuX3cgLSAyNDApKVxuICAgIGhlaWdodCA9IG1pbig3NjAsIG1heCg2MDAsIHNjcmVlbl9oIC0gMjAwKSlcbiAgICB4ID0gbWF4KDQwLCAoc2NyZWVuX3cgLSB3aWR0aCkgLy8gMilcbiAgICB5ID0gbWF4KDQwLCAoc2NyZWVuX2ggLSBoZWlnaHQpIC8vIDIpXG4gICAgcm9vdC5nZW9tZXRyeShmJ3t3aWR0aH14e2hlaWdodH0re3h9K3t5fScpXG4gICAgdHJ5OlxuICAgICAgICByb290LmF0dHJpYnV0ZXMoJy10b3Btb3N0JywgVHJ1ZSlcbiAgICAgICAgcm9vdC5saWZ0KClcbiAgICAgICAgcm9vdC5mb2N1c19mb3JjZSgpXG4gICAgICAgIHJvb3QuYWZ0ZXIoNDAwLCBsYW1iZGE6IHJvb3QuYXR0cmlidXRlcygnLXRvcG1vc3QnLCBGYWxzZSkpXG4gICAgZXhjZXB0IHRrLlRjbEVycm9yOlxuICAgICAgICBwYXNzXG5cblxuZGVmIGhvc3Rfd29ya2VyX3J1bm5pbmcoKTpcbiAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnbGludXgnKTpcbiAgICAgICAgcmVzdWx0ID0gc3VicHJvY2Vzcy5ydW4oWydzeXN0ZW1jdGwnLCAnaXMtYWN0aXZlJywgJy0tcXVpZXQnLCAnZGdlLXdvcmtlci5zZXJ2aWNlJ10sIGNoZWNrPUZhbHNlKVxuICAgICAgICByZXR1cm4gcmVzdWx0LnJldHVybmNvZGUgPT0gMFxuICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzpcbiAgICAgICAgcmV0dXJuIG1hY19saW1hX3dvcmtlcl9ydW5uaW5nKClcbiAgICByZXR1cm4gRmFsc2VcblxuXG5kZWYgbWFjX2xpbWFfd29ya2VyX3J1bm5pbmcoKTpcbiAgICBpbXBvcnQgaW5zdGFsbF9tYWNvc1xuICAgIGluc3RhbGxfbWFjb3MuYWRkX21hY19wcmVmaXhlcygpXG4gICAgbGltYWN0bCA9IHNodXRpbC53aGljaCgnbGltYWN0bCcpXG4gICAgaWYgbm90IGxpbWFjdGw6XG4gICAgICAgIHJldHVybiBGYWxzZVxuICAgIHJlc3VsdCA9IHN1YnByb2Nlc3MucnVuKFtsaW1hY3RsLCAnbGlzdCddLCBjYXB0dXJlX291dHB1dD1UcnVlLCB0ZXh0PVRydWUsIGNoZWNrPUZhbHNlKVxuICAgIGlmIHJlc3VsdC5yZXR1cm5jb2RlICE9IDA6XG4gICAgICAgIHJldHVybiBGYWxzZVxuICAgIGZvciBsaW5lIGluIHJlc3VsdC5zdGRvdXQuc3BsaXRsaW5lcygpWzE6XTpcbiAgICAgICAgcGFydHMgPSBsaW5lLnNwbGl0KClcbiAgICAgICAgaWYgbGVuKHBhcnRzKSA+PSAyIGFuZCBwYXJ0c1swXSA9PSBpbnN0YWxsX21hY29zLklOU1RBTkNFOlxuICAgICAgICAgICAgcmV0dXJuIHBhcnRzWzFdID09ICdSdW5uaW5nJ1xuICAgIHJldHVybiBGYWxzZVxuXG5cbmRlZiBzdWJtaXRfZW5yb2xsbWVudChvcmlnaW4sIHN0YXRlLCBzbmFwc2hvdCwgZGlzcGxheV9uYW1lLCBlbWFpbCwgcGhvbmUsIG5vdGUpOlxuICAgIGJvZHkgPSB7XG4gICAgICAgICdjbGFpbV9pZCc6IHN0YXRlWydjbGFpbV9pZCddLFxuICAgICAgICAnZGlzcGxheV9uYW1lJzogZGlzcGxheV9uYW1lLFxuICAgICAgICAnZW1haWwnOiBlbWFpbCxcbiAgICAgICAgJ3Bob25lJzogcGhvbmUsXG4gICAgICAgICdub3RlJzogbm90ZSxcbiAgICAgICAgJ2hvc3Rfb3MnOiBzbmFwc2hvdFsnaG9zdF9vcyddLFxuICAgICAgICAnaG9zdF9pbnZlbnRvcnknOiBzbmFwc2hvdFsnaG9zdF9pbnZlbnRvcnknXSxcbiAgICAgICAgJ3BsYW5uZWRfd29ya2VyX2NhcGFjaXR5Jzogc25hcHNob3RbJ3BsYW5uZWRfd29ya2VyX2NhcGFjaXR5J10sXG4gICAgfVxuICAgIHJlc3BvbnNlID0gcG9zdF9qc29uKG9yaWdpbiwgJy9jb21wdXRlX2ZsZWV0L2Vucm9sbG1lbnRzJywgJycsIGJvZHkpXG4gICAgc3RhdGVbJ3BvbGxfdG9rZW4nXSA9IHJlc3BvbnNlWydwb2xsX3Rva2VuJ11cbiAgICBzYXZlX3N0YXRlKHN0YXRlKVxuICAgIHJlcG9ydF9ib290c3RyYXBfbG9nKG9yaWdpbiwgcmVzcG9uc2VbJ3BvbGxfdG9rZW4nXSlcbiAgICByZXR1cm4gcmVzcG9uc2VcblxuXG5kZWYgcmVwb3J0X2Jvb3RzdHJhcF9sb2cob3JpZ2luLCB0b2tlbik6XG4gICAgcGF0aCA9IG9zLmVudmlyb24uZ2V0KCdER0VfQk9PVFNUUkFQX0xPRycpXG4gICAgaWYgbm90IHBhdGg6XG4gICAgICAgIHJldHVyblxuICAgIHRyeTpcbiAgICAgICAgd2l0aCBvcGVuKHBhdGgsIGVuY29kaW5nPSd1dGYtOCcsIGVycm9ycz0ncmVwbGFjZScpIGFzIGhhbmRsZTpcbiAgICAgICAgICAgIGhhbmRsZS5zZWVrKDAsIG9zLlNFRUtfRU5EKVxuICAgICAgICAgICAgaGFuZGxlLnNlZWsobWF4KDAsIGhhbmRsZS50ZWxsKCkgLSA2NF8wMDApKVxuICAgICAgICAgICAgaWYgaGFuZGxlLnRlbGwoKTpcbiAgICAgICAgICAgICAgICBoYW5kbGUucmVhZGxpbmUoKVxuICAgICAgICAgICAgbGluZXMgPSBoYW5kbGUucmVhZGxpbmVzKClcbiAgICBleGNlcHQgT1NFcnJvcjpcbiAgICAgICAgcmV0dXJuXG4gICAgcmVwb3J0ZXIgPSBTZXR1cExvZ1JlcG9ydGVyKG9yaWdpbiwgdG9rZW4pXG4gICAgdHJ5OlxuICAgICAgICBmb3IgbGluZSBpbiBsaW5lczpcbiAgICAgICAgICAgIHJlcG9ydGVyLnJlY29yZChsaW5lKVxuICAgIGZpbmFsbHk6XG4gICAgICAgIHJlcG9ydGVyLmNsb3NlKClcblxuXG5kZWYgcG9sbF9lbnJvbGxtZW50KG9yaWdpbiwgc3RhdGUpOlxuICAgIHJldHVybiBnZXRfanNvbihvcmlnaW4sICcvY29tcHV0ZV9mbGVldC9lbnJvbGxtZW50cycsIHN0YXRlWydwb2xsX3Rva2VuJ10pXG5cblxuZGVmIHdhaXRfZm9yX2Vucm9sbG1lbnQob3JpZ2luLCBzdGF0ZSwgcmV0cnlfZGVsYXk9Myk6XG4gICAgd2hpbGUgVHJ1ZTpcbiAgICAgICAgdHJ5OlxuICAgICAgICAgICAgcmVzdWx0ID0gcG9sbF9lbnJvbGxtZW50KG9yaWdpbiwgc3RhdGUpXG4gICAgICAgIGV4Y2VwdCB1cmxsaWIuZXJyb3IuSFRUUEVycm9yOlxuICAgICAgICAgICAgcmFpc2VcbiAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBqc29uLkpTT05EZWNvZGVFcnJvcik6XG4gICAgICAgICAgICB0aW1lLnNsZWVwKHJldHJ5X2RlbGF5KVxuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgc3RhdHVzID0gcmVzdWx0LmdldCgnc3RhdHVzJylcbiAgICAgICAgaWYgc3RhdHVzID09ICdhcHByb3ZlZCc6XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgIGlmIHN0YXR1cyAhPSAncGVuZGluZyc6XG4gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IocmVzdWx0LmdldCgnbWVzc2FnZScpIG9yICdUaGlzIGVucm9sbG1lbnQgcmVxdWVzdCB3YXMgZGVuaWVkIG9yIGV4cGlyZWQuJylcbiAgICAgICAgdGltZS5zbGVlcChyZXRyeV9kZWxheSlcblxuXG5kZWYgd29ya2VyX3N0YXR1cyhvcmlnaW4sIHRva2VuKTpcbiAgICByZXR1cm4gcG9zdF9qc29uKG9yaWdpbiwgJy9jb21wdXRlX2ZsZWV0L3N0YXR1cycsIHRva2VuLCB7fSlcblxuXG5XT1JLRVJfU1RBVEVfQ09QWSA9IHtcbiAgICAncmVhZHknOiAnQXZhaWxhYmxlJyxcbiAgICAnYnVzeSc6ICdXb3JraW5nJyxcbiAgICAncGF1c2VkJzogJ1BhdXNlZCcsXG4gICAgJ29mZmxpbmUnOiAnT2ZmbGluZScsXG4gICAgJ2xvdyBiYXR0ZXJ5JzogJ1dhaXRpbmcgZm9yIHBvd2VyJyxcbiAgICAndXBkYXRpbmcnOiAnVXBkYXRpbmcnLFxuICAgICd1cGRhdGUgZmFpbGVkJzogJ05lZWRzIGF0dGVudGlvbicsXG4gICAgJ3Jldm9rZWQnOiAnRGlzY29ubmVjdGVkJyxcbn1cblxuXG5kZWYgaG9zdF9tZW1vcnlfc25hcHNob3QoKTpcbiAgICB0cnk6XG4gICAgICAgIGltcG9ydCBob3N0X2ludmVudG9yeVxuICAgICAgICByZXR1cm4gaG9zdF9pbnZlbnRvcnkuYXZhaWxhYmxlX21lbW9yeV9ieXRlcygpLCBob3N0X2ludmVudG9yeS5tZW1vcnlfYnl0ZXMoKVxuICAgIGV4Y2VwdCBFeGNlcHRpb246XG4gICAgICAgIHJldHVybiBOb25lLCBOb25lXG5cblxuZGVmIGZyaWVuZGx5X3dvcmtlcl9zdGF0ZShwYXlsb2FkKTpcbiAgICBzdGF0ZSA9IChwYXlsb2FkIG9yIHt9KS5nZXQoJ3N0YXRlJykgb3IgJ3Vua25vd24nXG4gICAgaWYgKHBheWxvYWQgb3Ige30pLmdldCgnZHJhaW5pbmcnKSBhbmQgc3RhdGUgbm90IGluICgncGF1c2VkJywgJ3Jldm9rZWQnKTpcbiAgICAgICAgcmV0dXJuICdwYXVzZWQnXG4gICAgcmV0dXJuIHN0YXRlXG5cblxuZGVmIGN1cnJlbnRfd29ya19jb3B5KHBheWxvYWQpOlxuICAgIHRhc2sgPSAocGF5bG9hZCBvciB7fSkuZ2V0KCdjdXJyZW50X3Rhc2snKSBvciB7fVxuICAgIG9wZXJhdGlvbiA9ICh0YXNrLmdldCgnb3BlcmF0aW9uJykgb3IgJycpLnJlcGxhY2UoJ18nLCAnICcpLnN0cmlwKClcbiAgICBpZiBvcGVyYXRpb246XG4gICAgICAgIHJldHVybiAnV29ya2luZyBvbiAnICsgb3BlcmF0aW9uXG4gICAgc3RhdGUgPSBmcmllbmRseV93b3JrZXJfc3RhdGUocGF5bG9hZClcbiAgICBpZiBzdGF0ZSA9PSAnYnVzeSc6XG4gICAgICAgIHJldHVybiAnV29ya2luZyBvbiBhIHRhc2snXG4gICAgaWYgc3RhdGUgPT0gJ3BhdXNlZCc6XG4gICAgICAgIHJldHVybiAnTm90IHRha2luZyBuZXcgd29yaydcbiAgICBpZiBzdGF0ZSA9PSAncmVhZHknOlxuICAgICAgICByZXR1cm4gJ1dhaXRpbmcgZm9yIHdvcmsnXG4gICAgaWYgc3RhdGUgPT0gJ29mZmxpbmUnOlxuICAgICAgICByZXR1cm4gJ05vdCBjb25uZWN0ZWQgeWV0J1xuICAgIHJldHVybiBXT1JLRVJfU1RBVEVfQ09QWS5nZXQoc3RhdGUsIHN0YXRlLnJlcGxhY2UoJ18nLCAnICcpKVxuXG5cbmRlZiBpbnN0YWxsX2xhdW5jaF9hZ2VudChzY3JpcHRfcGF0aCk6XG4gICAgaW1wb3J0IGhvc3RfYXBwXG4gICAgaG9zdF9hcHAuaW5zdGFsbF9ob3N0X2FwcChzY3JpcHRfcGF0aClcbiAgICBob3N0X2FwcC5kcm9wX2xvZ2luX2hlbHBlcigpXG5cblxuZGVmIGFza3Bhc3Nfc2NyaXB0KCk6XG4gICAgcGF0aCA9IFJPT1QgLyAnZGdlLWFza3Bhc3MucHknXG4gICAgcGF0aC53cml0ZV90ZXh0KCcnJyMhL3Vzci9iaW4vZW52IHB5dGhvbjNcbmltcG9ydCBzaHV0aWwsIHN1YnByb2Nlc3MsIHN5c1xudGl0bGUgPSBcIkRvcmlhbiBHcmF5IFdvcmtlciBTZXR1cFwiXG5wcm9tcHQgPSBcIkFkbWluaXN0cmF0b3IgcGFzc3dvcmQgZm9yIGluc3RhbGxpbmcgdGhlIHdvcmtlclwiXG5pZiBzeXMucGxhdGZvcm0gPT0gXCJkYXJ3aW5cIjpcbiAgICBzY3JpcHQgPSBcIlwiXCJcbnRlbGwgYXBwbGljYXRpb24gXCJTeXN0ZW0gRXZlbnRzXCJcbiAgYWN0aXZhdGVcbiAgdHJ5XG4gICAgc2V0IGFuc3dlciB0byBkaXNwbGF5IGRpYWxvZyBcIkRvcmlhbiBHcmF5IFdvcmtlciBTZXR1cCBuZWVkcyB5b3VyIE1hYyBwYXNzd29yZCB0byBjb250aW51ZS5cIiBkZWZhdWx0IGFuc3dlciBcIlwiIHdpdGggaGlkZGVuIGFuc3dlciB3aXRoIHRpdGxlIFwiRG9yaWFuIEdyYXkgV29ya2VyIFNldHVwXCIgYnV0dG9ucyB7XCJDYW5jZWxcIiwgXCJPS1wifSBkZWZhdWx0IGJ1dHRvbiBcIk9LXCJcbiAgICBpZiBidXR0b24gcmV0dXJuZWQgb2YgYW5zd2VyIGlzIFwiT0tcIiB0aGVuXG4gICAgICByZXR1cm4gdGV4dCByZXR1cm5lZCBvZiBhbnN3ZXJcbiAgICBlbmQgaWZcbiAgb24gZXJyb3IgbnVtYmVyIC0xMjhcbiAgICByZXR1cm4gXCJcIlxuICBlbmQgdHJ5XG5lbmQgdGVsbFxuXCJcIlwiXG4gICAgcmVzdWx0ID0gc3VicHJvY2Vzcy5ydW4oW1wib3Nhc2NyaXB0XCIsIFwiLWVcIiwgc2NyaXB0XSwgY2FwdHVyZV9vdXRwdXQ9VHJ1ZSwgdGV4dD1UcnVlKVxuICAgIHN5cy5zdGRvdXQud3JpdGUocmVzdWx0LnN0ZG91dClcbiAgICBzeXMuZXhpdCgwIGlmIHJlc3VsdC5yZXR1cm5jb2RlID09IDAgYW5kIHJlc3VsdC5zdGRvdXQuc3RyaXAoKSBlbHNlIDEpXG5pZiBzaHV0aWwud2hpY2goXCJ6ZW5pdHlcIik6XG4gICAgcmVzdWx0ID0gc3VicHJvY2Vzcy5ydW4oW1wiemVuaXR5XCIsIFwiLS1wYXNzd29yZFwiLCBcIi0tdGl0bGU9XCIgKyB0aXRsZSwgXCItLXRleHQ9XCIgKyBwcm9tcHRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcHR1cmVfb3V0cHV0PVRydWUsIHRleHQ9VHJ1ZSlcbiAgICBzeXMuc3Rkb3V0LndyaXRlKHJlc3VsdC5zdGRvdXQpXG4gICAgc3lzLmV4aXQoMCBpZiByZXN1bHQucmV0dXJuY29kZSA9PSAwIGVsc2UgMSlcbmlmIHNodXRpbC53aGljaChcImtkaWFsb2dcIik6XG4gICAgcmVzdWx0ID0gc3VicHJvY2Vzcy5ydW4oW1wia2RpYWxvZ1wiLCBcIi0tcGFzc3dvcmRcIiwgcHJvbXB0XSwgY2FwdHVyZV9vdXRwdXQ9VHJ1ZSwgdGV4dD1UcnVlKVxuICAgIHN5cy5zdGRvdXQud3JpdGUocmVzdWx0LnN0ZG91dClcbiAgICBzeXMuZXhpdCgwIGlmIHJlc3VsdC5yZXR1cm5jb2RlID09IDAgZWxzZSAxKVxudHJ5OlxuICAgIGltcG9ydCB0a2ludGVyIGFzIHRrXG4gICAgZnJvbSB0a2ludGVyIGltcG9ydCBzaW1wbGVkaWFsb2dcbiAgICByb290ID0gdGsuVGsoKVxuICAgIHJvb3Qud2l0aGRyYXcoKVxuICAgIHZhbHVlID0gc2ltcGxlZGlhbG9nLmFza3N0cmluZyh0aXRsZSwgcHJvbXB0LCBzaG93PVwiKlwiKVxuICAgIHJvb3QuZGVzdHJveSgpXG4gICAgc3lzLnN0ZG91dC53cml0ZSh2YWx1ZSBvciBcIlwiKVxuICAgIHN5cy5leGl0KDAgaWYgdmFsdWUgZWxzZSAxKVxuZXhjZXB0IEV4Y2VwdGlvbjpcbiAgICBzeXMuZXhpdCgxKVxuJycnKVxuICAgIHBhdGguY2htb2QoMG83MDApXG4gICAgcmV0dXJuIHBhdGhcblxuXG5kZWYgbGludXhfaW5zdGFsbF9jb21tYW5kKCk6XG4gICAgcHl0aG9uID0gc3RyKFBhdGgoc3lzLmV4ZWN1dGFibGUpLnJlc29sdmUoKSlcbiAgICBzY3JpcHQgPSBzdHIoKFJPT1QgLyAnaW5zdGFsbC5weScpLnJlc29sdmUoKSlcbiAgICBpZiBvcy5nZXRldWlkKCkgPT0gMDpcbiAgICAgICAgcmV0dXJuIFtweXRob24sICctdScsIHNjcmlwdF1cbiAgICBpZiB3YW50X2hlYWRsZXNzKCkgYW5kIHNodXRpbC53aGljaCgnc3VkbycpOlxuICAgICAgICByZXR1cm4gWydzdWRvJywgJy1FJywgcHl0aG9uLCAnLXUnLCBzY3JpcHRdXG4gICAgaWYgc2h1dGlsLndoaWNoKCdwa2V4ZWMnKTpcbiAgICAgICAgZW52ID0gWydlbnYnLCAnUFlUSE9OVU5CVUZGRVJFRD0xJ11cbiAgICAgICAgZGlzcGxheSA9IG9zLmVudmlyb24uZ2V0KCdESVNQTEFZJylcbiAgICAgICAgYXV0aG9yaXR5ID0gb3MuZW52aXJvbi5nZXQoJ1hBVVRIT1JJVFknKVxuICAgICAgICBpZiBkaXNwbGF5OlxuICAgICAgICAgICAgZW52LmFwcGVuZCgnRElTUExBWT0nICsgZGlzcGxheSlcbiAgICAgICAgaWYgYXV0aG9yaXR5OlxuICAgICAgICAgICAgZW52LmFwcGVuZCgnWEFVVEhPUklUWT0nICsgYXV0aG9yaXR5KVxuICAgICAgICByZXR1cm4gWydwa2V4ZWMnLCAqZW52LCBweXRob24sICctdScsIHNjcmlwdF1cbiAgICBpZiBzaHV0aWwud2hpY2goJ3N1ZG8nKTpcbiAgICAgICAgb3MuZW52aXJvblsnU1VET19BU0tQQVNTJ10gPSBzdHIoYXNrcGFzc19zY3JpcHQoKSlcbiAgICAgICAgb3MuZW52aXJvblsnU1VET19QUk9NUFQnXSA9ICcnXG4gICAgICAgIHJldHVybiBbJ3N1ZG8nLCAnLUEnLCAnLUUnLCBweXRob24sICctdScsIHNjcmlwdF1cbiAgICByZXR1cm4gW3B5dGhvbiwgJy11Jywgc2NyaXB0XVxuXG5cbmRlZiBtYWNfbmVlZHNfaW5zdGFsbCgpOlxuICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAnZGFyd2luJzpcbiAgICAgICAgcmV0dXJuIEZhbHNlXG4gICAgaW1wb3J0IGluc3RhbGxfbWFjb3NcbiAgICBpbnN0YWxsX21hY29zLmFkZF9tYWNfcHJlZml4ZXMoKVxuICAgIGxpbWFjdGwgPSBzaHV0aWwud2hpY2goJ2xpbWFjdGwnKVxuICAgIGlmIG5vdCBsaW1hY3RsOlxuICAgICAgICByZXR1cm4gVHJ1ZVxuICAgIHJlc3VsdCA9IHN1YnByb2Nlc3MucnVuKFtsaW1hY3RsLCAnbGlzdCcsICctcSddLCBjYXB0dXJlX291dHB1dD1UcnVlLCB0ZXh0PVRydWUsIGNoZWNrPUZhbHNlKVxuICAgIG5hbWVzID0ge2xpbmUuc3RyaXAoKSBmb3IgbGluZSBpbiByZXN1bHQuc3Rkb3V0LnNwbGl0bGluZXMoKSBpZiBsaW5lLnN0cmlwKCl9XG4gICAgcmV0dXJuIGluc3RhbGxfbWFjb3MuSU5TVEFOQ0Ugbm90IGluIG5hbWVzXG5cblxuZGVmIHNldHVwX2xvZ19yZXBvcnRlcigpOlxuICAgIHRyeTpcbiAgICAgICAgc2V0dGluZ3MgPSBjb25maWcoKSBpZiAoUk9PVCAvICdjb25maWcuanNvbicpLmV4aXN0cygpIGVsc2Uge31cbiAgICAgICAgaWYgc2V0dGluZ3MuZ2V0KCdlbnJvbGxtZW50Jyk6XG4gICAgICAgICAgICB0b2tlbiA9IGxvYWRfc3RhdGUoKS5nZXQoJ3BvbGxfdG9rZW4nKVxuICAgICAgICAgICAgb3JpZ2luID0gc2V0dGluZ3MuZ2V0KCdvcmlnaW4nKVxuICAgICAgICBlbHNlOlxuICAgICAgICAgICAgaW52aXRhdGlvbiA9IGludml0YXRpb25fcGF5bG9hZCgpXG4gICAgICAgICAgICB0b2tlbiA9IGludml0YXRpb24uZ2V0KCd0b2tlbicpIGlmIGludml0YXRpb24gZWxzZSBOb25lXG4gICAgICAgICAgICBvcmlnaW4gPSBpbnZpdGF0aW9uLmdldCgnb3JpZ2luJykgaWYgaW52aXRhdGlvbiBlbHNlIE5vbmVcbiAgICAgICAgcmV0dXJuIFNldHVwTG9nUmVwb3J0ZXIob3JpZ2luLCB0b2tlbikgaWYgb3JpZ2luIGFuZCB0b2tlbiBlbHNlIE5vbmVcbiAgICBleGNlcHQgKE9TRXJyb3IsIFZhbHVlRXJyb3IsIEtleUVycm9yLCBSdW50aW1lRXJyb3IpOlxuICAgICAgICByZXR1cm4gTm9uZVxuXG5cbmRlZiBydW5faW5zdGFsbGVyKHNjcmlwdF9wYXRoLCBvbl9saW5lPU5vbmUpOlxuICAgIHJlcG9ydGVyID0gc2V0dXBfbG9nX3JlcG9ydGVyKClcblxuICAgIGRlZiBlbWl0KGxpbmUpOlxuICAgICAgICBpZiByZXBvcnRlcjpcbiAgICAgICAgICAgIHJlcG9ydGVyLnJlY29yZChsaW5lKVxuICAgICAgICBpZiBvbl9saW5lIGFuZCBsaW5lLnN0cmlwKCk6XG4gICAgICAgICAgICBvbl9saW5lKGxpbmUucnN0cmlwKCkpXG5cbiAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKVxuICAgIGVudlsnUFlUSE9OVU5CVUZGRVJFRCddID0gJzEnXG4gICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOlxuICAgICAgICBpbXBvcnQgaW5zdGFsbF9tYWNvc1xuICAgICAgICBpbnN0YWxsX21hY29zLmFkZF9tYWNfcHJlZml4ZXMoKVxuICAgICAgICBlbnZbJ1BBVEgnXSA9IG9zLmVudmlyb24uZ2V0KCdQQVRIJywgZW52LmdldCgnUEFUSCcsICcnKSlcbiAgICAgICAgZW52WydTVURPX0FTS1BBU1MnXSA9IHN0cihhc2twYXNzX3NjcmlwdCgpKVxuICAgICAgICBlbnZbJ0RHRV9TRVRVUF9MT0dfU1VQRVJWSVNFRCddID0gJzEnXG4gICAgICAgIGNvbW1hbmQgPSBbc3lzLmV4ZWN1dGFibGUsICctdScsIHN0cihST09UIC8gJ2luc3RhbGxfbWFjb3MucHknKSwgc2NyaXB0X3BhdGhdXG4gICAgICAgIGVtaXQoJ0lmIG1hY09TIG9yIEhvbWVicmV3IG5lZWRzIGEgcGFzc3dvcmQsIGEgTWFjIGRpYWxvZyB3aWxsIGFwcGVhci4gSW5zaWRlIHRoZSBMaW51eCBWTSwgc2V0dXAgdXNlcyB0aGUgVk3igJlzIHN1ZG8uJylcbiAgICBlbGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOlxuICAgICAgICBjb21tYW5kID0gbGludXhfaW5zdGFsbF9jb21tYW5kKClcbiAgICAgICAgZW1pdCgnV2luZG93cyB1c2VzIGEgVUFDIHByb21wdCB0byBpbnN0YWxsIFVidW50dSAoV1NMKS4gSW5zaWRlIFVidW50dSB0aGUgaW5zdGFsbGVyIHJ1bnMgYXMgcm9vdCwgc28gdGhlcmUgaXMgbm8gc2Vjb25kIHBhc3N3b3JkLicpXG4gICAgZWxzZTpcbiAgICAgICAgY29tbWFuZCA9IGxpbnV4X2luc3RhbGxfY29tbWFuZCgpXG4gICAgICAgIGlmIGNvbW1hbmRbMF0gPT0gJ3BrZXhlYyc6XG4gICAgICAgICAgICBlbWl0KCdVYnVudHUgd2lsbCBhc2sgZm9yIHlvdXIgYWRtaW5pc3RyYXRvciBwYXNzd29yZC4gVGhhdCBwZXJtaXNzaW9uIGlzIG5lZWRlZCB0byBpbnN0YWxsIERvY2tlciBhbmQgdGhlIHdvcmtlciBzZXJ2aWNlLicpXG4gICAgICAgIGVsaWYgY29tbWFuZFswXSA9PSAnc3Vkbyc6XG4gICAgICAgICAgICBlbWl0KCdFbnRlciB5b3VyIGFkbWluaXN0cmF0b3IgcGFzc3dvcmQgd2hlbiBhc2tlZC4gVGhhdCBwZXJtaXNzaW9uIGlzIG5lZWRlZCB0byBpbnN0YWxsIERvY2tlciBhbmQgdGhlIHdvcmtlciBzZXJ2aWNlLicpXG4gICAgZW1pdCgnJCAnICsgc2hsZXguam9pbihjb21tYW5kKSlcbiAgICBlbWl0KCdBcHByb3ZlZC4gU3RhcnRpbmcgc2V0dXAgb24gdGhpcyBjb21wdXRlci4uLicpXG4gICAgdHJ5OlxuICAgICAgICBwcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbihcbiAgICAgICAgICAgIGNvbW1hbmQsXG4gICAgICAgICAgICBjd2Q9c3RyKFJPT1QpLFxuICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSxcbiAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCxcbiAgICAgICAgICAgIHRleHQ9VHJ1ZSxcbiAgICAgICAgICAgIGJ1ZnNpemU9MSxcbiAgICAgICAgICAgIGVudj1lbnYsXG4gICAgICAgIClcbiAgICAgICAgb3V0cHV0ID0gW11cbiAgICAgICAgZm9yIGxpbmUgaW4gcHJvY2Vzcy5zdGRvdXQ6XG4gICAgICAgICAgICBvdXRwdXQuYXBwZW5kKGxpbmUucnN0cmlwKCkpXG4gICAgICAgICAgICBlbWl0KGxpbmUpXG4gICAgICAgIHByb2Nlc3Mud2FpdCgpXG4gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJyBhbmQgcHJvY2Vzcy5yZXR1cm5jb2RlID09IDA6XG4gICAgICAgICAgICBlbWl0KCdLZWVwaW5nIHRoaXMgd2luZG93IGF2YWlsYWJsZSBhZnRlciByZXN0YXJ0Li4uJylcbiAgICAgICAgICAgIGluc3RhbGxfbGF1bmNoX2FnZW50KHNjcmlwdF9wYXRoKVxuICAgICAgICBpZiBwcm9jZXNzLnJldHVybmNvZGU6XG4gICAgICAgICAgICBpZiBwcm9jZXNzLnJldHVybmNvZGUgaW4gKDEyNiwgMTI3KSBvciBhbnkoJ2Rpc21pc3NlZCcgaW4gaXRlbS5sb3dlcigpIG9yICdjYW5jZWxsZWQnIGluIGl0ZW0ubG93ZXIoKSBmb3IgaXRlbSBpbiBvdXRwdXQpOlxuICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignQWRtaW5pc3RyYXRvciBwZXJtaXNzaW9uIGlzIHJlcXVpcmVkIHRvIGluc3RhbGwgdGhlIHdvcmtlci4gQXBwcm92ZSB0aGUgcGFzc3dvcmQgcHJvbXB0IGFuZCB0cnkgYWdhaW4uJylcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBuZXh0KChpdGVtLnNwbGl0KCdTZXR1cCBuZWVkcyBhdHRlbnRpb246JywgMSlbLTFdLnN0cmlwKCkgZm9yIGl0ZW0gaW4gcmV2ZXJzZWQob3V0cHV0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICdTZXR1cCBuZWVkcyBhdHRlbnRpb246JyBpbiBpdGVtKSwgTm9uZSlcbiAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihtZXNzYWdlIG9yIChvdXRwdXRbLTFdIGlmIG91dHB1dCBlbHNlICdTZXR1cCBjb3VsZCBub3QgZmluaXNoLicpKVxuICAgIGZpbmFsbHk6XG4gICAgICAgIGlmIHJlcG9ydGVyOlxuICAgICAgICAgICAgcmVwb3J0ZXIuY2xvc2UoKVxuXG5cbmRlZiBoZWFkbGVzc191c2FnZShvcmlnaW4pOlxuICAgIG9yaWdpbiA9IG9yaWdpbi5yc3RyaXAoJy8nKVxuICAgIHByaW50KFxuICAgICAgICAnVGhpcyBjb21wdXRlciBoYXMgbm8gZGVza3RvcCBzZXNzaW9uLiBFbnJvbGwgZnJvbSB0aGUgc2hlbGwgd2l0aCBuYW1lLCBlbWFpbCwgYW5kIHBob25lOlxcbidcbiAgICAgICAgZicgIGN1cmwgLWZzU0wge29yaWdpbn0vY29tcHV0ZV9mbGVldC9kb3dubG9hZC9zY3JpcHQgfCBcXFxcXFxuJ1xuICAgICAgICBcIiAgICBzdWRvIERHRV9FTlJPTExfTkFNRT0nTWFjaGluZSBuYW1lJyBER0VfRU5ST0xMX0VNQUlMPSd5b3VAZXhhbXBsZS5jb20nIFwiXG4gICAgICAgIFwiREdFX0VOUk9MTF9QSE9ORT0nKzFYWFhYWFhYWFhYJyBiYXNoXFxuXCJcbiAgICAgICAgJ09wdGlvbmFsOiBER0VfRU5ST0xMX05PVEUuIERHRV9FTlJPTExfSEVBRExFU1M9MSBza2lwcyBhIGxlZnRvdmVyIGdyYXBoaWNhbCBzZXNzaW9uLicsXG4gICAgICAgIGZsdXNoPVRydWUsXG4gICAgKVxuXG5cbmRlZiBhZG9wdF9leGlzdGluZ19pZGVudGl0eSgpOlxuICAgIGlmIGludml0YXRpb25fcGF0aCgpLmV4aXN0cygpOlxuICAgICAgICByZXR1cm4gVHJ1ZVxuICAgIGlkZW50aXR5ID0gc3VwcG9ydF9kaXIoKSAvICdpZGVudGl0eS5qc29uJ1xuICAgIGlmIG5vdCBpZGVudGl0eS5leGlzdHMoKTpcbiAgICAgICAgcmV0dXJuIEZhbHNlXG4gICAgdHJ5OlxuICAgICAgICBkYXRhID0ganNvbi5sb2FkcyhpZGVudGl0eS5yZWFkX3RleHQoKSlcbiAgICBleGNlcHQgKE9TRXJyb3IsIGpzb24uSlNPTkRlY29kZUVycm9yLCBVbmljb2RlRGVjb2RlRXJyb3IpOlxuICAgICAgICByZXR1cm4gRmFsc2VcbiAgICBpZiBub3QgZGF0YS5nZXQoJ3Rva2VuJyk6XG4gICAgICAgIHJldHVybiBGYWxzZVxuICAgIGludml0YXRpb25fcGF0aCgpLndyaXRlX3RleHQoanNvbi5kdW1wcyh7XG4gICAgICAgICdvcmlnaW4nOiBkYXRhLmdldCgnb3JpZ2luJykgb3IgY29uZmlnKCkuZ2V0KCdvcmlnaW4nKSxcbiAgICAgICAgJ3Rva2VuJzogZGF0YVsndG9rZW4nXSxcbiAgICAgICAgJ3dvcmtlcl9pZCc6IGRhdGEuZ2V0KCd3b3JrZXJfaWQnKSxcbiAgICB9KSlcbiAgICByZXR1cm4gVHJ1ZVxuXG5cbmRlZiBwcm9tcHRfY29udGFjdCgpOlxuICAgIGNvbnRhY3QgPSBjbGlfY29udGFjdCgpXG4gICAgaWYgY29udGFjdDpcbiAgICAgICAgcmV0dXJuIGNvbnRhY3RcbiAgICBpZiBub3Qgc3lzLnN0ZGluLmlzYXR0eSgpOlxuICAgICAgICByZXR1cm4gTm9uZVxuICAgIGRpc3BsYXlfbmFtZSA9IGlucHV0KCdZb3VyIG5hbWU6ICcpLnN0cmlwKClcbiAgICBlbWFpbCA9IGlucHV0KCdFbWFpbDogJykuc3RyaXAoKVxuICAgIHBob25lID0gaW5wdXQoJ1Bob25lOiAnKS5zdHJpcCgpXG4gICAgbm90ZSA9IGlucHV0KCdPcHRpb25hbCBub3RlOiAnKS5zdHJpcCgpXG4gICAgY29uc2VudCA9IGlucHV0KCdTZW5kIHRoaXMgcmVxdWVzdD8gW3kvTl0gJykuc3RyaXAoKS5sb3dlcigpXG4gICAgaWYgY29uc2VudCBub3QgaW4gKCd5JywgJ3llcycpOlxuICAgICAgICByYWlzZSBTeXN0ZW1FeGl0KCdTZXR1cCBjYW5jZWxsZWQuJylcbiAgICBpZiBub3QgZGlzcGxheV9uYW1lIG9yIG5vdCBlbWFpbCBvciBub3QgcGhvbmU6XG4gICAgICAgIHJhaXNlIFN5c3RlbUV4aXQoJ05hbWUsIGVtYWlsLCBhbmQgcGhvbmUgYXJlIHJlcXVpcmVkLicpXG4gICAgcmV0dXJuIHsnZGlzcGxheV9uYW1lJzogZGlzcGxheV9uYW1lLCAnZW1haWwnOiBlbWFpbCwgJ3Bob25lJzogcGhvbmUsICdub3RlJzogbm90ZX1cblxuXG5kZWYgdGVybWluYWxfZmxvdyhvcmlnaW4sIHNjcmlwdF9wYXRoKTpcbiAgICBkZWYgZW1pdChsaW5lKTpcbiAgICAgICAgaWYgbGluZTpcbiAgICAgICAgICAgIHByaW50KGxpbmUsIGZsdXNoPVRydWUpXG5cbiAgICBpZiBhZG9wdF9leGlzdGluZ19pZGVudGl0eSgpOlxuICAgICAgICBlbWl0KCdUaGlzIGNvbXB1dGVyIGFscmVhZHkgaGFzIGEgd29ya2VyIGlkZW50aXR5LiBJbnN0YWxsaW5nIG9yIHVwZGF0aW5nIHRoZSB3b3JrZXIgc2VydmljZS4nKVxuICAgICAgICBydW5faW5zdGFsbGVyKHNjcmlwdF9wYXRoLCBvbl9saW5lPWVtaXQpXG4gICAgICAgIGVtaXQoJ1dvcmtlciBzZXR1cCBmaW5pc2hlZC4nKVxuICAgICAgICByZXR1cm5cbiAgICBjb250YWN0ID0gcHJvbXB0X2NvbnRhY3QoKVxuICAgIGlmIG5vdCBjb250YWN0OlxuICAgICAgICBoZWFkbGVzc191c2FnZShvcmlnaW4pXG4gICAgICAgIHJhaXNlIFN5c3RlbUV4aXQoMSlcbiAgICBlbWl0KCdDb2xsZWN0aW5nIG1hY2hpbmUgZGV0YWlsc+KApicpXG4gICAgc25hcHNob3QgPSBjb2xsZWN0X3NuYXBzaG90KG9yaWdpbilcbiAgICBpZiBzeXMuc3RkaW4uaXNhdHR5KCkgYW5kIG5vdCBjbGlfY29udGFjdCgpOlxuICAgICAgICBlbWl0KCdcXG4nLmpvaW4ocHJldmlld19saW5lcyhzbmFwc2hvdCkpKVxuICAgIHN0YXRlID0gbG9hZF9zdGF0ZSgpXG4gICAgc3VibWl0X2Vucm9sbG1lbnQoXG4gICAgICAgIG9yaWdpbixcbiAgICAgICAgc3RhdGUsXG4gICAgICAgIHNuYXBzaG90LFxuICAgICAgICBjb250YWN0WydkaXNwbGF5X25hbWUnXSxcbiAgICAgICAgY29udGFjdFsnZW1haWwnXSxcbiAgICAgICAgY29udGFjdFsncGhvbmUnXSxcbiAgICAgICAgY29udGFjdFsnbm90ZSddLFxuICAgIClcbiAgICBlbWl0KCdSZXF1ZXN0IHNlbnQgYXMgJXMuIFdhaXRpbmcgZm9yIGFwcHJvdmFsIGluIFdvcmtlciBlbnJvbGxtZW50c+KApicgJSBjb250YWN0WydkaXNwbGF5X25hbWUnXSlcbiAgICByZXN1bHQgPSB3YWl0X2Zvcl9lbnJvbGxtZW50KG9yaWdpbiwgc3RhdGUsIHJldHJ5X2RlbGF5PTUpXG4gICAgc2F2ZV9pbnZpdGF0aW9uKHJlc3VsdCwgb3JpZ2luKVxuICAgIGVtaXQoJ0FwcHJvdmVkLiBJbnN0YWxsaW5nIHRoZSB3b3JrZXIuJylcbiAgICBydW5faW5zdGFsbGVyKHNjcmlwdF9wYXRoLCBvbl9saW5lPWVtaXQpXG4gICAgZW1pdCgnV29ya2VyIHNldHVwIGZpbmlzaGVkLicpXG5cblxuZGVmIHBpY2tfZm9udF9mYW1pbHkocm9vdCk6XG4gICAgZmFtaWxpZXMgPSB7c3RyKG5hbWUpIGZvciBuYW1lIGluIHJvb3QudGsuY2FsbCgnZm9udCcsICdmYW1pbGllcycpfVxuICAgIGZvciBuYW1lIGluICgnVWJ1bnR1JywgJ0NhbnRhcmVsbCcsICdOb3RvIFNhbnMnLCAnRGVqYVZ1IFNhbnMnLCAnU2Vnb2UgVUknLCAnSGVsdmV0aWNhJyk6XG4gICAgICAgIGlmIG5hbWUgaW4gZmFtaWxpZXM6XG4gICAgICAgICAgICByZXR1cm4gbmFtZVxuICAgIHJldHVybiAnVGtEZWZhdWx0Rm9udCdcblxuXG5kZWYgdGtpbnRlcl9mbG93KG9yaWdpbiwgc2NyaXB0X3BhdGgpOlxuICAgIGltcG9ydCB0a2ludGVyIGFzIHRrXG4gICAgZnJvbSB0a2ludGVyIGltcG9ydCBmb250IGFzIHRrZm9udFxuICAgIGZyb20gdGtpbnRlciBpbXBvcnQgc2Nyb2xsZWR0ZXh0XG5cbiAgICBDT0xPUlMgPSB7XG4gICAgICAgICdpbmsnOiAnIzFjMTkxNycsXG4gICAgICAgICdtdXRlZCc6ICcjNzg3MTZjJyxcbiAgICAgICAgJ3BhcGVyJzogJyNmNWYwZWEnLFxuICAgICAgICAnY2FyZCc6ICcjZmZmY2Y4JyxcbiAgICAgICAgJ2xpbmUnOiAnI2U3ZTBkNicsXG4gICAgICAgICdoZWFkZXInOiAnIzFjMTkxNycsXG4gICAgICAgICdoZWFkZXJfdGV4dCc6ICcjZmFmN2YyJyxcbiAgICAgICAgJ2hlYWRlcl9tdXRlZCc6ICcjYzRiOGFhJyxcbiAgICAgICAgJ2FjY2VudCc6ICcjOGIxZTFlJyxcbiAgICAgICAgJ2FjY2VudF9ob3Zlcic6ICcjNmYxNjE2JyxcbiAgICAgICAgJ2FjY2VudF9zb2Z0JzogJyNmNGU3ZTQnLFxuICAgICAgICAnb2snOiAnIzNmNjIxMicsXG4gICAgICAgICdva19zb2Z0JzogJyNlZWY0ZTQnLFxuICAgICAgICAnd2Fybic6ICcjOWEzNDEyJyxcbiAgICAgICAgJ3dhcm5fc29mdCc6ICcjZmFlY2U0JyxcbiAgICAgICAgJ3doaXRlJzogJyNmZmZmZmYnLFxuICAgICAgICAnYmFkZ2UnOiAnIzFjMTkxNycsXG4gICAgfVxuXG4gICAgc25hcHNob3QgPSB7J3ZhbHVlJzogTm9uZSwgJ2Vycm9yJzogTm9uZX1cblxuICAgIGRlZiBsb2FkX3NuYXBzaG90KCk6XG4gICAgICAgIHRyeTpcbiAgICAgICAgICAgIHNuYXBzaG90Wyd2YWx1ZSddID0gY29sbGVjdF9zbmFwc2hvdChvcmlnaW4pXG4gICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXJyb3I6XG4gICAgICAgICAgICBzbmFwc2hvdFsnZXJyb3InXSA9IHN0cihlcnJvcilcblxuICAgIHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWxvYWRfc25hcHNob3QsIGRhZW1vbj1UcnVlKS5zdGFydCgpXG5cbiAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnbGludXgnKTpcbiAgICAgICAgcm9vdCA9IHRrLlRrKGNsYXNzTmFtZT1MSU5VWF9XTV9DTEFTUywgYmFzZU5hbWU9TElOVVhfV01fQ0xBU1MpXG4gICAgZWxzZTpcbiAgICAgICAgcm9vdCA9IHRrLlRrKClcbiAgICBpZiBzeXMucGxhdGZvcm0gIT0gJ2Rhcndpbic6XG4gICAgICAgIHJvb3Qud2l0aGRyYXcoKVxuICAgIHJvb3QudGl0bGUoJ0RvcmlhbiBHcmF5IFdvcmtlcicpXG4gICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2xpbnV4Jyk6XG4gICAgICAgIHRyeTpcbiAgICAgICAgICAgIHJvb3QudGsuY2FsbCgnd20nLCAnY2xhc3MnLCByb290Ll93LCBMSU5VWF9XTV9DTEFTUyArICcgJyArIExJTlVYX1dNX0NMQVNTKVxuICAgICAgICBleGNlcHQgdGsuVGNsRXJyb3I6XG4gICAgICAgICAgICBwYXNzXG4gICAgcm9vdC5jb25maWd1cmUoYmc9Q09MT1JTWydwYXBlciddKVxuICAgIHNjcmVlbl93ID0gcm9vdC53aW5mb19zY3JlZW53aWR0aCgpXG4gICAgc2NyZWVuX2ggPSByb290LndpbmZvX3NjcmVlbmhlaWdodCgpXG4gICAgcm9vdC5taW5zaXplKG1pbig3MjAsIHNjcmVlbl93KSwgbWluKDUyMCwgc2NyZWVuX2gpKVxuICAgIGFwcGx5X3dpbmRvd19pY29uKHJvb3QpXG4gICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOlxuICAgICAgICBwcmVzZW50X3dpbmRvdyhyb290KVxuICAgICAgICByb290LnVwZGF0ZSgpXG4gICAgZmFtaWx5ID0gcGlja19mb250X2ZhbWlseShyb290KVxuICAgIGZvbnRzID0ge1xuICAgICAgICAnZGlzcGxheSc6IHRrZm9udC5Gb250KGZhbWlseT1mYW1pbHksIHNpemU9MjYsIHdlaWdodD0nYm9sZCcpLFxuICAgICAgICAndGl0bGUnOiB0a2ZvbnQuRm9udChmYW1pbHk9ZmFtaWx5LCBzaXplPTE4LCB3ZWlnaHQ9J2JvbGQnKSxcbiAgICAgICAgJ3N1YnRpdGxlJzogdGtmb250LkZvbnQoZmFtaWx5PWZhbWlseSwgc2l6ZT0xMiksXG4gICAgICAgICdoZWFkaW5nJzogdGtmb250LkZvbnQoZmFtaWx5PWZhbWlseSwgc2l6ZT0xMywgd2VpZ2h0PSdib2xkJyksXG4gICAgICAgICdib2R5JzogdGtmb250LkZvbnQoZmFtaWx5PWZhbWlseSwgc2l6ZT0xMiksXG4gICAgICAgICdzbWFsbCc6IHRrZm9udC5Gb250KGZhbWlseT1mYW1pbHksIHNpemU9MTEpLFxuICAgICAgICAnYnV0dG9uJzogdGtmb250LkZvbnQoZmFtaWx5PWZhbWlseSwgc2l6ZT0xMiwgd2VpZ2h0PSdib2xkJyksXG4gICAgICAgICdiYWRnZSc6IHRrZm9udC5Gb250KGZhbWlseT1mYW1pbHksIHNpemU9MTQsIHdlaWdodD0nYm9sZCcpLFxuICAgICAgICAnbGFiZWwnOiB0a2ZvbnQuRm9udChmYW1pbHk9ZmFtaWx5LCBzaXplPTExLCB3ZWlnaHQ9J2JvbGQnKSxcbiAgICAgICAgJ21ldHJpYyc6IHRrZm9udC5Gb250KGZhbWlseT1mYW1pbHksIHNpemU9MjIsIHdlaWdodD0nYm9sZCcpLFxuICAgICAgICAnbW9ubyc6IHRrZm9udC5Gb250KGZhbWlseT0nRGVqYVZ1IFNhbnMgTW9ubycsIHNpemU9MTApLFxuICAgIH1cbiAgICBicmFuZF9pY29uID0gbG9hZF9icmFuZF9pY29uKHRrLCBzaXplPTU2KVxuXG4gICAgaGVhZGVyID0gdGsuRnJhbWUocm9vdCwgYmc9Q09MT1JTWydoZWFkZXInXSwgcGFkeD0zNiwgcGFkeT0yMilcbiAgICBoZWFkZXIucGFjayhmaWxsPSd4JylcbiAgICBpZiBicmFuZF9pY29uOlxuICAgICAgICB0ay5MYWJlbChoZWFkZXIsIGltYWdlPWJyYW5kX2ljb24sIGJnPUNPTE9SU1snaGVhZGVyJ10pLnBhY2soc2lkZT0nbGVmdCcsIHBhZHg9KDAsIDE4KSlcbiAgICB0aXRsZV9ibG9jayA9IHRrLkZyYW1lKGhlYWRlciwgYmc9Q09MT1JTWydoZWFkZXInXSlcbiAgICB0aXRsZV9ibG9jay5wYWNrKHNpZGU9J2xlZnQnLCBhbmNob3I9J3cnKVxuICAgIHRrLkxhYmVsKHRpdGxlX2Jsb2NrLCB0ZXh0PSdEb3JpYW4gR3JheScsIGZvbnQ9Zm9udHNbJ3RpdGxlJ10sIGJnPUNPTE9SU1snaGVhZGVyJ10sXG4gICAgICAgICAgICAgZmc9Q09MT1JTWydoZWFkZXJfdGV4dCddKS5wYWNrKGFuY2hvcj0ndycpXG4gICAgaGVhZGVyX3N1YnRpdGxlID0gdGsuTGFiZWwodGl0bGVfYmxvY2ssIHRleHQ9J1dvcmtlciBzZXR1cCcsIGZvbnQ9Zm9udHNbJ3N1YnRpdGxlJ10sIGJnPUNPTE9SU1snaGVhZGVyJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmc9Q09MT1JTWydoZWFkZXJfbXV0ZWQnXSlcbiAgICBoZWFkZXJfc3VidGl0bGUucGFjayhhbmNob3I9J3cnLCBwYWR5PSgyLCAwKSlcblxuICAgIHNoZWxsID0gdGsuRnJhbWUocm9vdCwgYmc9Q09MT1JTWydwYXBlciddKVxuICAgIHNoZWxsLnBhY2soZmlsbD0nYm90aCcsIGV4cGFuZD1UcnVlKVxuICAgIGJvZHkgPSB0ay5GcmFtZShzaGVsbCwgYmc9Q09MT1JTWydwYXBlciddKVxuICAgIGJvZHkucGFjayhmaWxsPSdib3RoJywgZXhwYW5kPVRydWUsIHBhZHg9NDgsIHBhZHk9MzIpXG5cbiAgICBzdGF0dXNfdG9uZSA9IHsndmFsdWUnOiAncmVhZHknfVxuICAgIHN0YXR1cyA9IHRrLlN0cmluZ1Zhcih2YWx1ZT0nR2V0dGluZyB0aGlzIGNvbXB1dGVyIHJlYWR54oCmJylcbiAgICBiYW5uZXIgPSB0ay5GcmFtZShib2R5LCBiZz1DT0xPUlNbJ2FjY2VudF9zb2Z0J10sIHBhZHg9MTgsIHBhZHk9MTIpXG4gICAgYmFubmVyLnBhY2soZmlsbD0neCcsIHBhZHk9KDAsIDIyKSlcbiAgICBiYW5uZXJfZG90ID0gdGsuQ2FudmFzKGJhbm5lciwgd2lkdGg9MTIsIGhlaWdodD0xMiwgYmc9Q09MT1JTWydhY2NlbnRfc29mdCddLCBoaWdobGlnaHR0aGlja25lc3M9MClcbiAgICBiYW5uZXJfZG90LnBhY2soc2lkZT0nbGVmdCcsIHBhZHg9KDAsIDEwKSlcbiAgICBiYW5uZXJfZG90LmNyZWF0ZV9vdmFsKDIsIDIsIDEwLCAxMCwgZmlsbD1DT0xPUlNbJ2FjY2VudCddLCBvdXRsaW5lPScnKVxuICAgIHN0YXR1c19sYWJlbCA9IHRrLkxhYmVsKGJhbm5lciwgdGV4dHZhcmlhYmxlPXN0YXR1cywgZm9udD1mb250c1snYm9keSddLCBiZz1DT0xPUlNbJ2FjY2VudF9zb2Z0J10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmc9Q09MT1JTWydpbmsnXSwgd3JhcGxlbmd0aD05MDAsIGp1c3RpZnk9J2xlZnQnLCBhbmNob3I9J3cnKVxuICAgIHN0YXR1c19sYWJlbC5wYWNrKHNpZGU9J2xlZnQnLCBmaWxsPSd4JywgZXhwYW5kPVRydWUpXG5cbiAgICBkZWYgcGFpbnRfYmFubmVyKHRvbmU9J3JlYWR5Jyk6XG4gICAgICAgIHBhbGV0dGVzID0ge1xuICAgICAgICAgICAgJ3JlYWR5JzogKENPTE9SU1snYWNjZW50X3NvZnQnXSwgQ09MT1JTWydhY2NlbnQnXSwgQ09MT1JTWydpbmsnXSksXG4gICAgICAgICAgICAnd2FpdCc6IChDT0xPUlNbJ29rX3NvZnQnXSwgQ09MT1JTWydvayddLCBDT0xPUlNbJ29rJ10pLFxuICAgICAgICAgICAgJ2Vycm9yJzogKENPTE9SU1snd2Fybl9zb2Z0J10sIENPTE9SU1snd2FybiddLCBDT0xPUlNbJ3dhcm4nXSksXG4gICAgICAgIH1cbiAgICAgICAgYmFja2dyb3VuZCwgZG90LCB0ZXh0ID0gcGFsZXR0ZXMuZ2V0KHRvbmUsIHBhbGV0dGVzWydyZWFkeSddKVxuICAgICAgICBzdGF0dXNfdG9uZVsndmFsdWUnXSA9IHRvbmVcbiAgICAgICAgYmFubmVyLmNvbmZpZ3VyZShiZz1iYWNrZ3JvdW5kKVxuICAgICAgICBiYW5uZXJfZG90LmNvbmZpZ3VyZShiZz1iYWNrZ3JvdW5kKVxuICAgICAgICBiYW5uZXJfZG90Lml0ZW1jb25maWd1cmUoMSwgZmlsbD1kb3QpXG4gICAgICAgIHN0YXR1c19sYWJlbC5jb25maWd1cmUoYmc9YmFja2dyb3VuZCwgZmc9dGV4dClcblxuICAgIGhlcm8gPSB0ay5GcmFtZShib2R5LCBiZz1DT0xPUlNbJ3BhcGVyJ10pXG4gICAgaGVyby5wYWNrKGZpbGw9J3gnLCBwYWR5PSgwLCAyMikpXG4gICAgdGsuTGFiZWwoaGVybywgdGV4dD1cIlB1dCB0aGlzIGNvbXB1dGVyJ3MgaWRsZSB0aW1lIHRvIHdvcmsuXCIsIGZvbnQ9Zm9udHNbJ2Rpc3BsYXknXSxcbiAgICAgICAgICAgICBiZz1DT0xPUlNbJ3BhcGVyJ10sIGZnPUNPTE9SU1snaW5rJ10sIHdyYXBsZW5ndGg9OTgwLCBqdXN0aWZ5PSdsZWZ0JywgYW5jaG9yPSd3JykucGFjayhmaWxsPSd4JylcbiAgICB0ay5MYWJlbChcbiAgICAgICAgaGVybyxcbiAgICAgICAgdGV4dD0nRG9yaWFuIEdyYXkgY2FuIHByb2Nlc3MgYmFja2dyb3VuZCB0YXNrcyBvbiBtYWNoaW5lcyBsaWtlIHRoaXMgb25lLiAnXG4gICAgICAgICAgICAgJ1lvdSBzdGF5IGluIGNvbnRyb2wg4oCUIHNlbmQgYSByZXF1ZXN0LCB3YWl0IGZvciBhcHByb3ZhbCwgYW5kIGxlYXZlIHRoaXMgd2luZG93IG9wZW4uJyxcbiAgICAgICAgZm9udD1mb250c1snc3VidGl0bGUnXSwgYmc9Q09MT1JTWydwYXBlciddLCBmZz1DT0xPUlNbJ211dGVkJ10sIHdyYXBsZW5ndGg9OTgwLFxuICAgICAgICBqdXN0aWZ5PSdsZWZ0JywgYW5jaG9yPSd3JyxcbiAgICApLnBhY2soZmlsbD0neCcsIHBhZHk9KDgsIDApKVxuXG4gICAgc3RlcHMgPSB0ay5GcmFtZShib2R5LCBiZz1DT0xPUlNbJ3BhcGVyJ10pXG4gICAgc3RlcHMucGFjayhmaWxsPSd4JywgcGFkeT0oMCwgMTgpKVxuICAgIGZvciBjb2x1bW4sIChudW1iZXIsIHRpdGxlLCBjb3B5KSBpbiBlbnVtZXJhdGUoRU5ST0xMTUVOVF9TVEVQUyk6XG4gICAgICAgIGNhcmQgPSB0ay5GcmFtZShzdGVwcywgYmc9Q09MT1JTWydjYXJkJ10sIGhpZ2hsaWdodGJhY2tncm91bmQ9Q09MT1JTWydsaW5lJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICBoaWdobGlnaHR0aGlja25lc3M9MSwgcGFkeD0yMCwgcGFkeT0yMilcbiAgICAgICAgY2FyZC5ncmlkKHJvdz0wLCBjb2x1bW49Y29sdW1uLCBzdGlja3k9J25zZXcnLCBwYWR4PSgwIGlmIGNvbHVtbiA9PSAwIGVsc2UgMTAsIDApKVxuICAgICAgICBiYWRnZSA9IHRrLkNhbnZhcyhjYXJkLCB3aWR0aD00MCwgaGVpZ2h0PTQwLCBiZz1DT0xPUlNbJ2NhcmQnXSwgaGlnaGxpZ2h0dGhpY2tuZXNzPTApXG4gICAgICAgIGJhZGdlLnBhY2soYW5jaG9yPSd3JylcbiAgICAgICAgYmFkZ2UuY3JlYXRlX292YWwoMiwgMiwgMzgsIDM4LCBmaWxsPUNPTE9SU1snYmFkZ2UnXSwgb3V0bGluZT0nJylcbiAgICAgICAgYmFkZ2UuY3JlYXRlX3RleHQoMjAsIDIwLCB0ZXh0PW51bWJlciwgZmlsbD1DT0xPUlNbJ3doaXRlJ10sIGZvbnQ9Zm9udHNbJ2JhZGdlJ10pXG4gICAgICAgIHRrLkxhYmVsKGNhcmQsIHRleHQ9dGl0bGUsIGZvbnQ9Zm9udHNbJ2hlYWRpbmcnXSwgYmc9Q09MT1JTWydjYXJkJ10sIGZnPUNPTE9SU1snaW5rJ10sXG4gICAgICAgICAgICAgICAgIHdyYXBsZW5ndGg9MjYwLCBqdXN0aWZ5PSdsZWZ0JywgYW5jaG9yPSd3JykucGFjayhmaWxsPSd4JywgcGFkeT0oMTQsIDYpKVxuICAgICAgICB0ay5MYWJlbChjYXJkLCB0ZXh0PWNvcHksIGZvbnQ9Zm9udHNbJ2JvZHknXSwgYmc9Q09MT1JTWydjYXJkJ10sIGZnPUNPTE9SU1snbXV0ZWQnXSxcbiAgICAgICAgICAgICAgICAgd3JhcGxlbmd0aD0yNjAsIGp1c3RpZnk9J2xlZnQnLCBhbmNob3I9J3cnKS5wYWNrKGZpbGw9J3gnKVxuICAgICAgICBzdGVwcy5jb2x1bW5jb25maWd1cmUoY29sdW1uLCB3ZWlnaHQ9MSwgdW5pZm9ybT0nc3RlcHMnKVxuXG4gICAgcHJpdmFjeSA9IHRrLkZyYW1lKGJvZHksIGJnPUNPTE9SU1snd2hpdGUnXSwgaGlnaGxpZ2h0YmFja2dyb3VuZD1DT0xPUlNbJ2xpbmUnXSxcbiAgICAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0dGhpY2tuZXNzPTEsIHBhZHg9MTgsIHBhZHk9MTQpXG4gICAgcHJpdmFjeS5wYWNrKGZpbGw9J3gnLCBwYWR5PSgwLCAyMikpXG4gICAgdGsuTGFiZWwocHJpdmFjeSwgdGV4dD0nWW91ciBwcml2YWN5JywgZm9udD1mb250c1snbGFiZWwnXSwgYmc9Q09MT1JTWyd3aGl0ZSddLFxuICAgICAgICAgICAgIGZnPUNPTE9SU1snaW5rJ10pLnBhY2soYW5jaG9yPSd3JylcbiAgICB0ay5MYWJlbChcbiAgICAgICAgcHJpdmFjeSxcbiAgICAgICAgdGV4dD0nV2UgbmV2ZXIgY29sbGVjdCBwYXNzd29yZHMsIGZpbGVzLCBwaG90b3MsIGJyb3dzaW5nIGhpc3RvcnksIHNlcmlhbCBudW1iZXJzLCBvciBuZXR3b3JrIGFkZHJlc3Nlcy4gJ1xuICAgICAgICAgICAgICdBZnRlciBhcHByb3ZhbCwgc2V0dXAgcHJvZ3Jlc3MgYW5kIGRpYWdub3N0aWMgbWVzc2FnZXMgYXJlIHNlbnQgdG8gb3VyIHRlYW0uJyxcbiAgICAgICAgZm9udD1mb250c1snc21hbGwnXSwgYmc9Q09MT1JTWyd3aGl0ZSddLCBmZz1DT0xPUlNbJ211dGVkJ10sIHdyYXBsZW5ndGg9OTgwLFxuICAgICAgICBqdXN0aWZ5PSdsZWZ0JywgYW5jaG9yPSd3JyxcbiAgICApLnBhY2soZmlsbD0neCcsIHBhZHk9KDQsIDApKVxuXG4gICAgcGxhbl9ibHVyYiwgcGxhbl9kZXRhaWxzID0gc2V0dXBfcGxhbihvcmlnaW4pXG4gICAgZGV0YWlsc19jYXJkID0gdGsuRnJhbWUoYm9keSwgYmc9Q09MT1JTWydjYXJkJ10sIGhpZ2hsaWdodGJhY2tncm91bmQ9Q09MT1JTWydsaW5lJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0dGhpY2tuZXNzPTEsIHBhZHg9MTgsIHBhZHk9MTQpXG4gICAgZGV0YWlsc19jYXJkLnBhY2soZmlsbD0neCcsIHBhZHk9KDAsIDIyKSlcbiAgICB0ay5MYWJlbChkZXRhaWxzX2NhcmQsIHRleHQ9J0lmIHlvdSBhcHByb3ZlLCB0aGlzIGNvbXB1dGVyIHdpbGwnLCBmb250PWZvbnRzWydsYWJlbCddLFxuICAgICAgICAgICAgIGJnPUNPTE9SU1snY2FyZCddLCBmZz1DT0xPUlNbJ2luayddKS5wYWNrKGFuY2hvcj0ndycpXG4gICAgdGsuTGFiZWwoZGV0YWlsc19jYXJkLCB0ZXh0PXBsYW5fYmx1cmIsIGZvbnQ9Zm9udHNbJ3NtYWxsJ10sIGJnPUNPTE9SU1snY2FyZCddLCBmZz1DT0xPUlNbJ211dGVkJ10sXG4gICAgICAgICAgICAgd3JhcGxlbmd0aD05ODAsIGp1c3RpZnk9J2xlZnQnLCBhbmNob3I9J3cnKS5wYWNrKGZpbGw9J3gnLCBwYWR5PSg0LCAxMCkpXG4gICAgZGV0YWlsc192aXNpYmxlID0geyd2YWx1ZSc6IEZhbHNlfVxuICAgIGRldGFpbHNfYm9keSA9IHRrLkZyYW1lKGRldGFpbHNfY2FyZCwgYmc9JyMxYzE5MTcnKVxuICAgIGRldGFpbHNfdGV4dCA9IHNjcm9sbGVkdGV4dC5TY3JvbGxlZFRleHQoZGV0YWlsc19ib2R5LCBoZWlnaHQ9MTAsIHdyYXA9J3dvcmQnLCBmb250PWZvbnRzWydtb25vJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZz0nIzFjMTkxNycsIGZnPScjZTdlMGQ2JywgcmVsaWVmPSdmbGF0JywgYmQ9MCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGJhY2tncm91bmQ9JyNlN2UwZDYnKVxuICAgIGRldGFpbHNfdGV4dC5pbnNlcnQoJzEuMCcsIHBsYW5fZGV0YWlscylcbiAgICBkZXRhaWxzX3RleHQuY29uZmlndXJlKHN0YXRlPSdkaXNhYmxlZCcpXG4gICAgZGV0YWlsc190ZXh0LnBhY2soZmlsbD0nYm90aCcsIGV4cGFuZD1UcnVlLCBwYWR4PTEyLCBwYWR5PTEyKVxuXG4gICAgZGVmIHRvZ2dsZV9kZXRhaWxzKCk6XG4gICAgICAgIGRldGFpbHNfdmlzaWJsZVsndmFsdWUnXSA9IG5vdCBkZXRhaWxzX3Zpc2libGVbJ3ZhbHVlJ11cbiAgICAgICAgaWYgZGV0YWlsc192aXNpYmxlWyd2YWx1ZSddOlxuICAgICAgICAgICAgZGV0YWlsc19ib2R5LnBhY2soZmlsbD0nYm90aCcsIGV4cGFuZD1UcnVlLCBwYWR5PSg0LCAwKSlcbiAgICAgICAgICAgIGRldGFpbHNfYnV0dG9uLmNvbmZpZ3VyZSh0ZXh0PSdIaWRlIHRoZSBkZXRhaWxzJylcbiAgICAgICAgZWxzZTpcbiAgICAgICAgICAgIGRldGFpbHNfYm9keS5wYWNrX2ZvcmdldCgpXG4gICAgICAgICAgICBkZXRhaWxzX2J1dHRvbi5jb25maWd1cmUodGV4dD0nR2l2ZSBtZSB0aGUgZGV0YWlscycpXG5cbiAgICBkZXRhaWxzX2J1dHRvbiA9IHRrLkJ1dHRvbihkZXRhaWxzX2NhcmQsIHRleHQ9J0dpdmUgbWUgdGhlIGRldGFpbHMnLCBjb21tYW5kPXRvZ2dsZV9kZXRhaWxzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ9Zm9udHNbJ2JvZHknXSwgcmVsaWVmPSdmbGF0JywgYmQ9MCwgcGFkeD0xMiwgcGFkeT04LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJnPUNPTE9SU1snd2hpdGUnXSwgZmc9Q09MT1JTWydpbmsnXSwgY3Vyc29yPSdoYW5kMicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0dGhpY2tuZXNzPTEsIGhpZ2hsaWdodGJhY2tncm91bmQ9Q09MT1JTWydsaW5lJ10pXG4gICAgZGV0YWlsc19idXR0b24ucGFjayhhbmNob3I9J3cnKVxuXG4gICAgZm9ybV9jYXJkID0gdGsuRnJhbWUoYm9keSwgYmc9Q09MT1JTWydjYXJkJ10sIGhpZ2hsaWdodGJhY2tncm91bmQ9Q09MT1JTWydsaW5lJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0dGhpY2tuZXNzPTEsIHBhZHg9MjQsIHBhZHk9MjIpXG4gICAgZm9ybV9jYXJkLnBhY2soZmlsbD0neCcpXG4gICAgdGsuTGFiZWwoZm9ybV9jYXJkLCB0ZXh0PSdTZW5kIGEgcmVxdWVzdCcsIGZvbnQ9Zm9udHNbJ2hlYWRpbmcnXSwgYmc9Q09MT1JTWydjYXJkJ10sXG4gICAgICAgICAgICAgZmc9Q09MT1JTWydpbmsnXSkucGFjayhhbmNob3I9J3cnKVxuICAgIHRrLkxhYmVsKGZvcm1fY2FyZCwgdGV4dD0nV2UgbmVlZCBhIG5hbWUsIGVtYWlsLCBhbmQgcGhvbmUgc28gd2UgY2FuIHJlYWNoIHlvdSBhYm91dCB0aGlzIGNvbXB1dGVyLicsXG4gICAgICAgICAgICAgZm9udD1mb250c1snc21hbGwnXSwgYmc9Q09MT1JTWydjYXJkJ10sIGZnPUNPTE9SU1snbXV0ZWQnXSkucGFjayhhbmNob3I9J3cnLCBwYWR5PSg0LCAxNikpXG5cbiAgICBmaWVsZHMgPSB0ay5GcmFtZShmb3JtX2NhcmQsIGJnPUNPTE9SU1snY2FyZCddKVxuICAgIGZpZWxkcy5wYWNrKGZpbGw9J3gnKVxuXG4gICAgZGVmIGxhYmVsZWRfZW50cnkocGFyZW50LCBsYWJlbCwgcm93KTpcbiAgICAgICAgdGsuTGFiZWwocGFyZW50LCB0ZXh0PWxhYmVsLCBmb250PWZvbnRzWydsYWJlbCddLCBiZz1DT0xPUlNbJ2NhcmQnXSxcbiAgICAgICAgICAgICAgICAgZmc9Q09MT1JTWydpbmsnXSkuZ3JpZChyb3c9cm93LCBjb2x1bW49MCwgc3RpY2t5PSd3JywgcGFkeT0oMCwgOCkgaWYgcm93IGVsc2UgKDAsIDEyKSlcbiAgICAgICAgZW50cnkgPSB0ay5FbnRyeShwYXJlbnQsIGZvbnQ9Zm9udHNbJ2JvZHknXSwgcmVsaWVmPSdmbGF0JywgYmQ9MCwgaGlnaGxpZ2h0dGhpY2tuZXNzPTEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0YmFja2dyb3VuZD1DT0xPUlNbJ2xpbmUnXSwgaGlnaGxpZ2h0Y29sb3I9Q09MT1JTWydhY2NlbnQnXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICBiZz1DT0xPUlNbJ3doaXRlJ10sIGZnPUNPTE9SU1snaW5rJ10sIGluc2VydGJhY2tncm91bmQ9Q09MT1JTWydpbmsnXSlcbiAgICAgICAgZW50cnkuZ3JpZChyb3c9cm93LCBjb2x1bW49MSwgc3RpY2t5PSd3ZScsIHBhZHg9KDE2LCAwKSwgcGFkeT0oMCwgOCkgaWYgcm93IGVsc2UgKDAsIDEyKSwgaXBhZHk9MTAsIGlwYWR4PTgpXG4gICAgICAgIHJldHVybiBlbnRyeVxuXG4gICAgbmFtZV9lbnRyeSA9IGxhYmVsZWRfZW50cnkoZmllbGRzLCAnWW91ciBuYW1lJywgMClcbiAgICBlbWFpbF9lbnRyeSA9IGxhYmVsZWRfZW50cnkoZmllbGRzLCAnRW1haWwnLCAxKVxuICAgIHBob25lX2VudHJ5ID0gbGFiZWxlZF9lbnRyeShmaWVsZHMsICdQaG9uZScsIDIpXG4gICAgbm90ZV9lbnRyeSA9IGxhYmVsZWRfZW50cnkoZmllbGRzLCAnTm90ZSAob3B0aW9uYWwpJywgMylcbiAgICBmaWVsZHMuY29sdW1uY29uZmlndXJlKDEsIHdlaWdodD0xKVxuXG4gICAgYWN0aW9uID0gdGsuU3RyaW5nVmFyKHZhbHVlPSd3YWl0aW5nJylcbiAgICBidXR0b25zID0gdGsuRnJhbWUoZm9ybV9jYXJkLCBiZz1DT0xPUlNbJ2NhcmQnXSlcbiAgICBidXR0b25zLnBhY2soZmlsbD0neCcsIHBhZHk9KDEwLCAwKSlcblxuICAgIGRlZiBzdHlsZWRfYnV0dG9uKHBhcmVudCwgdGV4dCwgY29tbWFuZCwgcHJpbWFyeT1GYWxzZSk6XG4gICAgICAgIGlmIHByaW1hcnk6XG4gICAgICAgICAgICBidXR0b24gPSB0ay5CdXR0b24oXG4gICAgICAgICAgICAgICAgcGFyZW50LCB0ZXh0PXRleHQsIGNvbW1hbmQ9Y29tbWFuZCwgZm9udD1mb250c1snYnV0dG9uJ10sIHJlbGllZj0nZmxhdCcsIGJkPTAsXG4gICAgICAgICAgICAgICAgcGFkeD0yMiwgcGFkeT0xMiwgYmc9Q09MT1JTWydhY2NlbnQnXSwgYWN0aXZlYmFja2dyb3VuZD1DT0xPUlNbJ2FjY2VudF9ob3ZlciddLFxuICAgICAgICAgICAgICAgIGZnPUNPTE9SU1snd2hpdGUnXSwgYWN0aXZlZm9yZWdyb3VuZD1DT0xPUlNbJ3doaXRlJ10sIGN1cnNvcj0naGFuZDInLFxuICAgICAgICAgICAgICAgIGRpc2FibGVkZm9yZWdyb3VuZD0nI2VkY2RjOCcsXG4gICAgICAgICAgICApXG4gICAgICAgIGVsc2U6XG4gICAgICAgICAgICBidXR0b24gPSB0ay5CdXR0b24oXG4gICAgICAgICAgICAgICAgcGFyZW50LCB0ZXh0PXRleHQsIGNvbW1hbmQ9Y29tbWFuZCwgZm9udD1mb250c1snYm9keSddLCByZWxpZWY9J2ZsYXQnLCBiZD0wLFxuICAgICAgICAgICAgICAgIHBhZHg9MTYsIHBhZHk9MTIsIGJnPUNPTE9SU1snd2hpdGUnXSwgYWN0aXZlYmFja2dyb3VuZD1DT0xPUlNbJ3BhcGVyJ10sXG4gICAgICAgICAgICAgICAgZmc9Q09MT1JTWydpbmsnXSwgYWN0aXZlZm9yZWdyb3VuZD1DT0xPUlNbJ2luayddLCBjdXJzb3I9J2hhbmQyJyxcbiAgICAgICAgICAgICAgICBoaWdobGlnaHR0aGlja25lc3M9MSwgaGlnaGxpZ2h0YmFja2dyb3VuZD1DT0xPUlNbJ2xpbmUnXSxcbiAgICAgICAgICAgIClcbiAgICAgICAgcmV0dXJuIGJ1dHRvblxuXG4gICAgc2VuZF9idXR0b24gPSBzdHlsZWRfYnV0dG9uKGJ1dHRvbnMsICdTZW5kIHJlcXVlc3QnLCBsYW1iZGE6IE5vbmUsIHByaW1hcnk9VHJ1ZSlcbiAgICBzZW5kX2J1dHRvbi5wYWNrKHNpZGU9J2xlZnQnKVxuICAgIHBhdXNlX2J1dHRvbiA9IHN0eWxlZF9idXR0b24oYnV0dG9ucywgJ1BhdXNlJywgbGFtYmRhOiBOb25lKVxuICAgIHJlc3VtZV9idXR0b24gPSBzdHlsZWRfYnV0dG9uKGJ1dHRvbnMsICdSZXN1bWUnLCBsYW1iZGE6IE5vbmUpXG4gICAgcXVpdF9idXR0b24gPSBzdHlsZWRfYnV0dG9uKGJ1dHRvbnMsICdRdWl0Jywgcm9vdC5kZXN0cm95KVxuICAgIHF1aXRfYnV0dG9uLnBhY2soc2lkZT0nbGVmdCcsIHBhZHg9KDEwLCAwKSlcblxuICAgIHNldHVwX3ZpZXcgPSB0ay5GcmFtZShib2R5LCBiZz1DT0xPUlNbJ3BhcGVyJ10pXG4gICAgc2V0dXBfaGVhZGluZyA9IHRrLkxhYmVsKHNldHVwX3ZpZXcsIHRleHQ9J1NldHRpbmcgdXAgdGhpcyBjb21wdXRlcicsIGZvbnQ9Zm9udHNbJ2Rpc3BsYXknXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmc9Q09MT1JTWydwYXBlciddLCBmZz1DT0xPUlNbJ2luayddLCB3cmFwbGVuZ3RoPTk4MCwganVzdGlmeT0nbGVmdCcsIGFuY2hvcj0ndycpXG4gICAgc2V0dXBfaGVhZGluZy5wYWNrKGZpbGw9J3gnKVxuICAgIHNldHVwX2NvcHkgPSB0ay5MYWJlbChcbiAgICAgICAgc2V0dXBfdmlldyxcbiAgICAgICAgdGV4dD0nWW91IGNhbiBrZWVwIHVzaW5nIHRoaXMgY29tcHV0ZXIuIFdlIHdpbGwgaGFuZGxlIHRoZSByZXN0IGluIHRoZSBiYWNrZ3JvdW5kIGFuZCB0ZWxsIHlvdSB3aGF0IGlzIGhhcHBlbmluZy4nLFxuICAgICAgICBmb250PWZvbnRzWydzdWJ0aXRsZSddLCBiZz1DT0xPUlNbJ3BhcGVyJ10sIGZnPUNPTE9SU1snbXV0ZWQnXSwgd3JhcGxlbmd0aD05ODAsIGp1c3RpZnk9J2xlZnQnLCBhbmNob3I9J3cnLFxuICAgIClcbiAgICBzZXR1cF9jb3B5LnBhY2soZmlsbD0neCcsIHBhZHk9KDgsIDIyKSlcblxuICAgIHNldHVwX2NhcmQgPSB0ay5GcmFtZShzZXR1cF92aWV3LCBiZz1DT0xPUlNbJ2NhcmQnXSwgaGlnaGxpZ2h0YmFja2dyb3VuZD1DT0xPUlNbJ2xpbmUnXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0dGhpY2tuZXNzPTEsIHBhZHg9MjQsIHBhZHk9MjIpXG4gICAgc2V0dXBfY2FyZC5wYWNrKGZpbGw9J2JvdGgnLCBleHBhbmQ9VHJ1ZSlcbiAgICB0ay5MYWJlbChzZXR1cF9jYXJkLCB0ZXh0PSdXaGF0IGlzIGhhcHBlbmluZycsIGZvbnQ9Zm9udHNbJ2hlYWRpbmcnXSwgYmc9Q09MT1JTWydjYXJkJ10sXG4gICAgICAgICAgICAgZmc9Q09MT1JTWydpbmsnXSkucGFjayhhbmNob3I9J3cnLCBwYWR5PSgwLCAxMikpXG5cbiAgICBzZXR1cF9yb3dzID0gW11cbiAgICBmb3IgaW5kZXgsICh0aXRsZSwgZGV0YWlsKSBpbiBlbnVtZXJhdGUoU0VUVVBfU1RFUFMpOlxuICAgICAgICByb3cgPSB0ay5GcmFtZShzZXR1cF9jYXJkLCBiZz1DT0xPUlNbJ2NhcmQnXSwgcGFkeT04KVxuICAgICAgICByb3cucGFjayhmaWxsPSd4JylcbiAgICAgICAgYmFkZ2UgPSB0ay5DYW52YXMocm93LCB3aWR0aD0yOCwgaGVpZ2h0PTI4LCBiZz1DT0xPUlNbJ2NhcmQnXSwgaGlnaGxpZ2h0dGhpY2tuZXNzPTApXG4gICAgICAgIGJhZGdlLnBhY2soc2lkZT0nbGVmdCcsIHBhZHg9KDAsIDEyKSlcbiAgICAgICAgY2lyY2xlID0gYmFkZ2UuY3JlYXRlX292YWwoNCwgNCwgMjQsIDI0LCBvdXRsaW5lPUNPTE9SU1snbGluZSddLCB3aWR0aD0yLCBmaWxsPUNPTE9SU1snY2FyZCddKVxuICAgICAgICBtYXJrID0gYmFkZ2UuY3JlYXRlX3RleHQoMTQsIDE0LCB0ZXh0PXN0cihpbmRleCArIDEpLCBmaWxsPUNPTE9SU1snbXV0ZWQnXSwgZm9udD1mb250c1snc21hbGwnXSlcbiAgICAgICAgdGV4dF9ibG9jayA9IHRrLkZyYW1lKHJvdywgYmc9Q09MT1JTWydjYXJkJ10pXG4gICAgICAgIHRleHRfYmxvY2sucGFjayhzaWRlPSdsZWZ0JywgZmlsbD0neCcsIGV4cGFuZD1UcnVlKVxuICAgICAgICB0aXRsZV9sYWJlbCA9IHRrLkxhYmVsKHRleHRfYmxvY2ssIHRleHQ9dGl0bGUsIGZvbnQ9Zm9udHNbJ2hlYWRpbmcnXSwgYmc9Q09MT1JTWydjYXJkJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmc9Q09MT1JTWydtdXRlZCddLCBhbmNob3I9J3cnKVxuICAgICAgICB0aXRsZV9sYWJlbC5wYWNrKGZpbGw9J3gnKVxuICAgICAgICBkZXRhaWxfbGFiZWwgPSB0ay5MYWJlbCh0ZXh0X2Jsb2NrLCB0ZXh0PWRldGFpbCwgZm9udD1mb250c1snc21hbGwnXSwgYmc9Q09MT1JTWydjYXJkJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZnPUNPTE9SU1snbXV0ZWQnXSwgd3JhcGxlbmd0aD03NjAsIGp1c3RpZnk9J2xlZnQnLCBhbmNob3I9J3cnKVxuICAgICAgICBkZXRhaWxfbGFiZWwucGFjayhmaWxsPSd4JylcbiAgICAgICAgc2V0dXBfcm93cy5hcHBlbmQoe1xuICAgICAgICAgICAgJ2JhZGdlJzogYmFkZ2UsICdjaXJjbGUnOiBjaXJjbGUsICdtYXJrJzogbWFyayxcbiAgICAgICAgICAgICd0aXRsZSc6IHRpdGxlX2xhYmVsLCAnZGV0YWlsJzogZGV0YWlsX2xhYmVsLCAnZGVmYXVsdCc6IGRldGFpbCxcbiAgICAgICAgfSlcblxuICAgIGFjdGl2aXR5ID0gdGsuRnJhbWUoc2V0dXBfdmlldywgYmc9Q09MT1JTWyd3aGl0ZSddLCBoaWdobGlnaHRiYWNrZ3JvdW5kPUNPTE9SU1snbGluZSddLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0dGhpY2tuZXNzPTEsIHBhZHg9MTgsIHBhZHk9MTQpXG4gICAgYWN0aXZpdHkucGFjayhmaWxsPSd4JywgcGFkeT0oMTgsIDApKVxuICAgIHRrLkxhYmVsKGFjdGl2aXR5LCB0ZXh0PSdSaWdodCBub3cnLCBmb250PWZvbnRzWydsYWJlbCddLCBiZz1DT0xPUlNbJ3doaXRlJ10sXG4gICAgICAgICAgICAgZmc9Q09MT1JTWydpbmsnXSkucGFjayhhbmNob3I9J3cnKVxuICAgIGFjdGl2aXR5X3RleHQgPSB0ay5TdHJpbmdWYXIodmFsdWU9J1dhaXRpbmcgdG8gc3RhcnTigKYnKVxuICAgIGFjdGl2aXR5X2xhYmVsID0gdGsuTGFiZWwoYWN0aXZpdHksIHRleHR2YXJpYWJsZT1hY3Rpdml0eV90ZXh0LCBmb250PWZvbnRzWydib2R5J10sIGJnPUNPTE9SU1snd2hpdGUnXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZnPUNPTE9SU1snbXV0ZWQnXSwgd3JhcGxlbmd0aD05ODAsIGp1c3RpZnk9J2xlZnQnLCBhbmNob3I9J3cnKVxuICAgIGFjdGl2aXR5X2xhYmVsLnBhY2soZmlsbD0neCcsIHBhZHk9KDQsIDApKVxuICAgIGNvbnNvbGVfY2FyZCA9IHRrLkZyYW1lKHNldHVwX3ZpZXcsIGJnPScjMWMxOTE3JywgaGlnaGxpZ2h0YmFja2dyb3VuZD1DT0xPUlNbJ2xpbmUnXSwgaGlnaGxpZ2h0dGhpY2tuZXNzPTEpXG4gICAgY29uc29sZV9jYXJkLnBhY2soZmlsbD0nYm90aCcsIGV4cGFuZD1UcnVlLCBwYWR5PSgxOCwgMCkpXG4gICAgdGsuTGFiZWwoY29uc29sZV9jYXJkLCB0ZXh0PSdDb21tYW5kcycsIGZvbnQ9Zm9udHNbJ2xhYmVsJ10sIGJnPScjMWMxOTE3JyxcbiAgICAgICAgICAgICBmZz0nI2M0YjhhYScpLnBhY2soYW5jaG9yPSd3JywgcGFkeD0xNCwgcGFkeT0oMTIsIDApKVxuICAgIGNvbnNvbGUgPSBzY3JvbGxlZHRleHQuU2Nyb2xsZWRUZXh0KGNvbnNvbGVfY2FyZCwgaGVpZ2h0PTgsIHdyYXA9J3dvcmQnLCBmb250PWZvbnRzWydtb25vJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmc9JyMxYzE5MTcnLCBmZz0nI2U3ZTBkNicsIHJlbGllZj0nZmxhdCcsIGJkPTAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0YmFja2dyb3VuZD0nI2U3ZTBkNicpXG4gICAgY29uc29sZS5wYWNrKGZpbGw9J2JvdGgnLCBleHBhbmQ9VHJ1ZSwgcGFkeD0xMiwgcGFkeT0oNiwgMTIpKVxuICAgIGNvbnNvbGUuY29uZmlndXJlKHN0YXRlPSdkaXNhYmxlZCcpXG5cbiAgICBkZWYgYXBwZW5kX2NvbnNvbGUobGluZSk6XG4gICAgICAgIGNvbnNvbGUuY29uZmlndXJlKHN0YXRlPSdub3JtYWwnKVxuICAgICAgICBjb25zb2xlLmluc2VydCgnZW5kJywgbGluZSArICdcXG4nKVxuICAgICAgICBjb25zb2xlLnNlZSgnZW5kJylcbiAgICAgICAgY29uc29sZS5jb25maWd1cmUoc3RhdGU9J2Rpc2FibGVkJylcbiAgICBzZXR1cF9idXR0b25zID0gdGsuRnJhbWUoc2V0dXBfdmlldywgYmc9Q09MT1JTWydwYXBlciddKVxuICAgIHNldHVwX2J1dHRvbnMucGFjayhmaWxsPSd4JywgcGFkeT0oMTgsIDApKVxuICAgIHNldHVwX3F1aXQgPSBzdHlsZWRfYnV0dG9uKHNldHVwX2J1dHRvbnMsICdRdWl0Jywgcm9vdC5kZXN0cm95KVxuICAgIHNldHVwX3F1aXQucGFjayhzaWRlPSdsZWZ0JylcbiAgICBzZXR1cF9wYXVzZSA9IHN0eWxlZF9idXR0b24oc2V0dXBfYnV0dG9ucywgJ1BhdXNlJywgbGFtYmRhOiBOb25lKVxuICAgIHNldHVwX3Jlc3VtZSA9IHN0eWxlZF9idXR0b24oc2V0dXBfYnV0dG9ucywgJ1Jlc3VtZScsIGxhbWJkYTogTm9uZSlcblxuICAgIHN0YXR1c192aWV3ID0gdGsuRnJhbWUoYm9keSwgYmc9Q09MT1JTWydwYXBlciddKVxuICAgIHN0YXR1c19oZWFkaW5nID0gdGsuTGFiZWwoc3RhdHVzX3ZpZXcsIHRleHQ9J1RoaXMgY29tcHV0ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udD1mb250c1sndGl0bGUnXSwgYmc9Q09MT1JTWydwYXBlciddLCBmZz1DT0xPUlNbJ2luayddLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcGxlbmd0aD03MjAsIGp1c3RpZnk9J2xlZnQnLCBhbmNob3I9J3cnKVxuICAgIHN0YXR1c19oZWFkaW5nLnBhY2soZmlsbD0neCcpXG4gICAgc3RhdHVzX2NvcHkgPSB0ay5MYWJlbChcbiAgICAgICAgc3RhdHVzX3ZpZXcsXG4gICAgICAgIHRleHQ9J1RoZSB3b3JrZXIgc3RheXMgb24gYWZ0ZXIgeW91IGNsb3NlIHRoaXMgd2luZG93LiBQYXVzZSBpdCB3aGVuIHlvdSBuZWVkIHRoZSBtYWNoaW5lIHRvIHlvdXJzZWxmLicsXG4gICAgICAgIGZvbnQ9Zm9udHNbJ3NtYWxsJ10sIGJnPUNPTE9SU1sncGFwZXInXSwgZmc9Q09MT1JTWydtdXRlZCddLCB3cmFwbGVuZ3RoPTcyMCxcbiAgICAgICAganVzdGlmeT0nbGVmdCcsIGFuY2hvcj0ndycsXG4gICAgKVxuICAgIHN0YXR1c19jb3B5LnBhY2soZmlsbD0neCcsIHBhZHk9KDQsIDEyKSlcblxuICAgIGZhY3RzID0gdGsuRnJhbWUoc3RhdHVzX3ZpZXcsIGJnPUNPTE9SU1snY2FyZCddLCBoaWdobGlnaHRiYWNrZ3JvdW5kPUNPTE9SU1snbGluZSddLFxuICAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0dGhpY2tuZXNzPTEsIHBhZHg9MTYsIHBhZHk9MTIpXG4gICAgZmFjdHMucGFjayhmaWxsPSd4JylcbiAgICBzdGF0ZV92YWx1ZSA9IHRrLlN0cmluZ1Zhcih2YWx1ZT0nQ29ubmVjdGluZ+KApicpXG4gICAgYWN0aXZpdHlfdmFsdWUgPSB0ay5TdHJpbmdWYXIodmFsdWU9J0NoZWNraW5n4oCmJylcbiAgICB0YXNrc192YWx1ZSA9IHRrLlN0cmluZ1Zhcih2YWx1ZT0nMCcpXG4gICAgbWVtb3J5X3ZhbHVlID0gdGsuU3RyaW5nVmFyKHZhbHVlPSfigJQnKVxuICAgIGZhY3Rfc3BlY3MgPSAoXG4gICAgICAgICgnU3RhdHVzJywgc3RhdGVfdmFsdWUpLFxuICAgICAgICAoJ1JpZ2h0IG5vdycsIGFjdGl2aXR5X3ZhbHVlKSxcbiAgICAgICAgKCdUYXNrcyBmaW5pc2hlZCcsIHRhc2tzX3ZhbHVlKSxcbiAgICAgICAgKCdGcmVlIG1lbW9yeScsIG1lbW9yeV92YWx1ZSksXG4gICAgKVxuICAgIGZhY3RfbGFiZWxzID0gW11cbiAgICBmb3IgY29sdW1uLCAobGFiZWwsIHZhcmlhYmxlKSBpbiBlbnVtZXJhdGUoZmFjdF9zcGVjcyk6XG4gICAgICAgIGNlbGwgPSB0ay5GcmFtZShmYWN0cywgYmc9Q09MT1JTWydjYXJkJ10pXG4gICAgICAgIGNlbGwuZ3JpZChyb3c9MCwgY29sdW1uPWNvbHVtbiwgc3RpY2t5PSdudycsIHBhZHg9KDAgaWYgY29sdW1uID09IDAgZWxzZSAxOCwgMCkpXG4gICAgICAgIHRrLkxhYmVsKGNlbGwsIHRleHQ9bGFiZWwsIGZvbnQ9Zm9udHNbJ2xhYmVsJ10sIGJnPUNPTE9SU1snY2FyZCddLFxuICAgICAgICAgICAgICAgICBmZz1DT0xPUlNbJ211dGVkJ10pLnBhY2soYW5jaG9yPSd3JylcbiAgICAgICAgdmFsdWVfbGFiZWwgPSB0ay5MYWJlbChjZWxsLCB0ZXh0dmFyaWFibGU9dmFyaWFibGUsIGZvbnQ9Zm9udHNbJ2JvZHknXSwgYmc9Q09MT1JTWydjYXJkJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmc9Q09MT1JTWydpbmsnXSwgd3JhcGxlbmd0aD0xNjAsIGp1c3RpZnk9J2xlZnQnLCBhbmNob3I9J3cnKVxuICAgICAgICB2YWx1ZV9sYWJlbC5wYWNrKGFuY2hvcj0ndycsIHBhZHk9KDIsIDApKVxuICAgICAgICBmYWN0X2xhYmVscy5hcHBlbmQodmFsdWVfbGFiZWwpXG4gICAgICAgIGZhY3RzLmNvbHVtbmNvbmZpZ3VyZShjb2x1bW4sIHdlaWdodD0xKVxuXG4gICAgY2hhcnRzID0gdGsuRnJhbWUoc3RhdHVzX3ZpZXcsIGJnPUNPTE9SU1sncGFwZXInXSlcbiAgICBjaGFydHMucGFjayhmaWxsPSdib3RoJywgZXhwYW5kPVRydWUsIHBhZHk9KDEyLCAwKSlcbiAgICBtZW1vcnlfaGlzdG9yeSA9IGRlcXVlKG1heGxlbj05MClcbiAgICB0YXNrc19oaXN0b3J5ID0gZGVxdWUobWF4bGVuPTkwKVxuXG4gICAgZGVmIGNoYXJ0X2NhcmQocGFyZW50LCB0aXRsZSwgY29sdW1uKTpcbiAgICAgICAgY2FyZCA9IHRrLkZyYW1lKHBhcmVudCwgYmc9Q09MT1JTWydjYXJkJ10sIGhpZ2hsaWdodGJhY2tncm91bmQ9Q09MT1JTWydsaW5lJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICBoaWdobGlnaHR0aGlja25lc3M9MSwgcGFkeD0xMiwgcGFkeT0xMClcbiAgICAgICAgY2FyZC5ncmlkKHJvdz0wLCBjb2x1bW49Y29sdW1uLCBzdGlja3k9J25zZXcnLCBwYWR4PSgwIGlmIGNvbHVtbiA9PSAwIGVsc2UgMTAsIDApKVxuICAgICAgICB0ay5MYWJlbChjYXJkLCB0ZXh0PXRpdGxlLCBmb250PWZvbnRzWydsYWJlbCddLCBiZz1DT0xPUlNbJ2NhcmQnXSxcbiAgICAgICAgICAgICAgICAgZmc9Q09MT1JTWydpbmsnXSkucGFjayhhbmNob3I9J3cnKVxuICAgICAgICBjYW52YXMgPSB0ay5DYW52YXMoY2FyZCwgaGVpZ2h0PTEyMCwgYmc9Q09MT1JTWydjYXJkJ10sIGhpZ2hsaWdodHRoaWNrbmVzcz0wKVxuICAgICAgICBjYW52YXMucGFjayhmaWxsPSdib3RoJywgZXhwYW5kPVRydWUsIHBhZHk9KDgsIDApKVxuICAgICAgICBwYXJlbnQuY29sdW1uY29uZmlndXJlKGNvbHVtbiwgd2VpZ2h0PTEpXG4gICAgICAgIHJldHVybiBjYW52YXNcblxuICAgIG1lbW9yeV9jaGFydCA9IGNoYXJ0X2NhcmQoY2hhcnRzLCAnTWVtb3J5IGluIHVzZScsIDApXG4gICAgdGFza3NfY2hhcnQgPSBjaGFydF9jYXJkKGNoYXJ0cywgJ1Rhc2tzIGZpbmlzaGVkJywgMSlcbiAgICBjaGFydHMucm93Y29uZmlndXJlKDAsIHdlaWdodD0xKVxuXG4gICAgc3RhdHVzX25vdGUgPSB0ay5GcmFtZShzdGF0dXNfdmlldywgYmc9Q09MT1JTWyd3aGl0ZSddLCBoaWdobGlnaHRiYWNrZ3JvdW5kPUNPTE9SU1snbGluZSddLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0dGhpY2tuZXNzPTEsIHBhZHg9MTQsIHBhZHk9MTApXG4gICAgc3RhdHVzX25vdGUucGFjayhmaWxsPSd4JywgcGFkeT0oMTIsIDApKVxuICAgIHRrLkxhYmVsKHN0YXR1c19ub3RlLCB0ZXh0PSdQYXVzZScsIGZvbnQ9Zm9udHNbJ2xhYmVsJ10sIGJnPUNPTE9SU1snd2hpdGUnXSxcbiAgICAgICAgICAgICBmZz1DT0xPUlNbJ2luayddKS5wYWNrKGFuY2hvcj0ndycpXG4gICAgc3RhdHVzX25vdGVfdGV4dCA9IHRrLkxhYmVsKFxuICAgICAgICBzdGF0dXNfbm90ZSxcbiAgICAgICAgdGV4dD0nUGF1c2Ugc3RvcHMgbmV3IHdvcmsuIEEgdGFzayBhbHJlYWR5IHJ1bm5pbmcgaXMgYWxsb3dlZCB0byBmaW5pc2guJyxcbiAgICAgICAgZm9udD1mb250c1snc21hbGwnXSwgYmc9Q09MT1JTWyd3aGl0ZSddLCBmZz1DT0xPUlNbJ211dGVkJ10sIHdyYXBsZW5ndGg9NzIwLFxuICAgICAgICBqdXN0aWZ5PSdsZWZ0JywgYW5jaG9yPSd3JyxcbiAgICApXG4gICAgc3RhdHVzX25vdGVfdGV4dC5wYWNrKGZpbGw9J3gnLCBwYWR5PSgyLCAwKSlcblxuICAgIHN0YXR1c19idXR0b25zID0gdGsuRnJhbWUoc3RhdHVzX3ZpZXcsIGJnPUNPTE9SU1sncGFwZXInXSlcbiAgICBzdGF0dXNfYnV0dG9ucy5wYWNrKGZpbGw9J3gnLCBwYWR5PSgxMiwgMCkpXG4gICAgc3RhdHVzX3BhdXNlID0gc3R5bGVkX2J1dHRvbihzdGF0dXNfYnV0dG9ucywgJ1BhdXNlJywgbGFtYmRhOiBOb25lLCBwcmltYXJ5PVRydWUpXG4gICAgc3RhdHVzX3Jlc3VtZSA9IHN0eWxlZF9idXR0b24oc3RhdHVzX2J1dHRvbnMsICdSZXN1bWUnLCBsYW1iZGE6IE5vbmUsIHByaW1hcnk9VHJ1ZSlcbiAgICBkZWYgZWRpdF9wcmVmZXJlbmNlcygpOlxuICAgICAgICBzYXZlZCA9IGludml0YXRpb25fcGF5bG9hZCgpXG4gICAgICAgIGlmIG5vdCBzYXZlZDpcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB3aW5kb3cgPSB0ay5Ub3BsZXZlbChyb290KVxuICAgICAgICB3aW5kb3cudGl0bGUoJ0JhY2tncm91bmQgd29yayBzZXR0aW5ncycpXG4gICAgICAgIHZhbHVlcyA9IHdvcmtlcl9zdGF0dXMoY29uZmlndXJlZF9vcmlnaW4oc2F2ZWQuZ2V0KCdvcmlnaW4nKSwgb3JpZ2luKSwgc2F2ZWRbJ3Rva2VuJ10pWydleGVjdXRpb25fcG9saWN5J11cbiAgICAgICAgdmFyaWFibGVzID0ge31cbiAgICAgICAgZm9yIGtleSwgbGFiZWwgaW4gWygnb3duZXJfbWVtb3J5X2xpbWl0X21iJywgJ01heGltdW0gUkFNIChNaUIpJyksICgnb3duZXJfY3B1X2xpbWl0JywgJ01heGltdW0gQ1BVIGNvcmVzJyldOlxuICAgICAgICAgICAgdGsuTGFiZWwod2luZG93LCB0ZXh0PWxhYmVsKS5wYWNrKGFuY2hvcj0ndycsIHBhZHg9MTYpXG4gICAgICAgICAgICB2YXJpYWJsZXNba2V5XSA9IHRrLlN0cmluZ1Zhcih2YWx1ZT1zdHIodmFsdWVzW2tleV0pKVxuICAgICAgICAgICAgdGsuRW50cnkod2luZG93LCB0ZXh0dmFyaWFibGU9dmFyaWFibGVzW2tleV0pLnBhY2soZmlsbD0neCcsIHBhZHg9MTYsIHBhZHk9NClcbiAgICAgICAgZm9yIGtleSwgbGFiZWwgaW4gWygnaWRsZV9vbmx5JywgJ09ubHkgd2hlbiBpZGxlIGZvciBmaXZlIG1pbnV0ZXMnKSwgKCdhY19vbmx5JywgJ09ubHkgb24gbWFpbnMgcG93ZXInKV06XG4gICAgICAgICAgICB2YXJpYWJsZXNba2V5XSA9IHRrLkJvb2xlYW5WYXIodmFsdWU9dmFsdWVzW2tleV0pXG4gICAgICAgICAgICB0ay5DaGVja2J1dHRvbih3aW5kb3csIHRleHQ9bGFiZWwsIHZhcmlhYmxlPXZhcmlhYmxlc1trZXldKS5wYWNrKGFuY2hvcj0ndycsIHBhZHg9MTYpXG4gICAgICAgIGZlZWRiYWNrID0gdGsuU3RyaW5nVmFyKClcbiAgICAgICAgdGsuTGFiZWwod2luZG93LCB0ZXh0dmFyaWFibGU9ZmVlZGJhY2ssIHdyYXBsZW5ndGg9MzAwKS5wYWNrKHBhZHg9MTYsIHBhZHk9OClcbiAgICAgICAgZGVmIHNhdmVfcHJlZmVyZW5jZXMoKTpcbiAgICAgICAgICAgIHRyeTpcbiAgICAgICAgICAgICAgICBib2R5ID0ge2tleTogdmFsdWUuZ2V0KCkgZm9yIGtleSwgdmFsdWUgaW4gdmFyaWFibGVzLml0ZW1zKCl9XG4gICAgICAgICAgICAgICAgYm9keVsnb3duZXJfbWVtb3J5X2xpbWl0X21iJ10gPSBpbnQoYm9keVsnb3duZXJfbWVtb3J5X2xpbWl0X21iJ10pXG4gICAgICAgICAgICAgICAgYm9keVsnb3duZXJfY3B1X2xpbWl0J10gPSBmbG9hdChib2R5Wydvd25lcl9jcHVfbGltaXQnXSlcbiAgICAgICAgICAgICAgICBwb3N0X2pzb24oY29uZmlndXJlZF9vcmlnaW4oc2F2ZWQuZ2V0KCdvcmlnaW4nKSwgb3JpZ2luKSwgJy9jb21wdXRlX2ZsZWV0L3ByZWZlcmVuY2VzJywgc2F2ZWRbJ3Rva2VuJ10sIGJvZHkpXG4gICAgICAgICAgICAgICAgZmVlZGJhY2suc2V0KCdTYXZlZC4gUnVubmluZyB0YXNrcyBmaW5pc2ggd2l0aGluIHRoZWlyIHByZXZpb3VzIGxpbWl0cy4nKVxuICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjpcbiAgICAgICAgICAgICAgICBmZWVkYmFjay5zZXQoJ0NvdWxkIG5vdCBzYXZlLiBDaGVjayB0aGUgbGltaXRzIGFuZCBjb25uZWN0aW9uLicpXG4gICAgICAgIHRrLkJ1dHRvbih3aW5kb3csIHRleHQ9J1NhdmUnLCBjb21tYW5kPXNhdmVfcHJlZmVyZW5jZXMpLnBhY2socGFkeT04KVxuXG4gICAgc3RhdHVzX3NldHRpbmdzID0gc3R5bGVkX2J1dHRvbihzdGF0dXNfYnV0dG9ucywgJ1NldHRpbmdzJywgZWRpdF9wcmVmZXJlbmNlcylcbiAgICBzdGF0dXNfc2V0dGluZ3MucGFjayhzaWRlPSdsZWZ0JywgcGFkeD0oMTAsIDApKVxuICAgIHN0YXR1c19xdWl0ID0gc3R5bGVkX2J1dHRvbihzdGF0dXNfYnV0dG9ucywgJ1F1aXQnLCByb290LmRlc3Ryb3kpXG4gICAgc3RhdHVzX3F1aXQucGFjayhzaWRlPSdsZWZ0JylcblxuICAgIGRlZiByZWZyZXNoX2NoYXJ0cygpOlxuICAgICAgICB1c2VkX3NoYXJlID0gbWVtb3J5X2hpc3RvcnlbLTFdIGlmIG1lbW9yeV9oaXN0b3J5IGVsc2UgMFxuICAgICAgICBkcmF3X3NlcmllcyhtZW1vcnlfY2hhcnQsIGxpc3QobWVtb3J5X2hpc3RvcnkpIG9yIFt1c2VkX3NoYXJlLCB1c2VkX3NoYXJlXSxcbiAgICAgICAgICAgICAgICAgICAgQ09MT1JTWydhY2NlbnQnXSwgJyNmNGU3ZTQnLCBmbG9vcj0wLCBjZWlsaW5nPTEpXG4gICAgICAgIHBlYWsgPSBtYXgobGlzdCh0YXNrc19oaXN0b3J5KSBvciBbMF0pXG4gICAgICAgIGRyYXdfc2VyaWVzKHRhc2tzX2NoYXJ0LCBsaXN0KHRhc2tzX2hpc3RvcnkpIG9yIFswLCAwXSxcbiAgICAgICAgICAgICAgICAgICAgQ09MT1JTWydvayddLCBDT0xPUlNbJ29rX3NvZnQnXSwgZmxvb3I9MCwgY2VpbGluZz1tYXgocGVhaywgMSkpXG5cbiAgICBkZWYgcmVjb3JkX3NhbXBsZShwYXlsb2FkKTpcbiAgICAgICAgYXZhaWxhYmxlLCB0b3RhbCA9IGhvc3RfbWVtb3J5X3NuYXBzaG90KClcbiAgICAgICAgaWYgYXZhaWxhYmxlIGFuZCB0b3RhbDpcbiAgICAgICAgICAgIG1lbW9yeV9oaXN0b3J5LmFwcGVuZChtYXgoMC4wLCBtaW4oMS4wLCAxLjAgLSAoYXZhaWxhYmxlIC8gdG90YWwpKSkpXG4gICAgICAgICAgICBtZW1vcnlfdmFsdWUuc2V0KGZvcm1hdF9ieXRlcyhhdmFpbGFibGUpICsgJyBmcmVlJylcbiAgICAgICAgZWxpZiBhdmFpbGFibGU6XG4gICAgICAgICAgICBtZW1vcnlfdmFsdWUuc2V0KGZvcm1hdF9ieXRlcyhhdmFpbGFibGUpICsgJyBmcmVlJylcbiAgICAgICAgaWYgcGF5bG9hZCBhbmQgJ3Rhc2tzX2NvbXBsZXRlZCcgaW4gcGF5bG9hZDpcbiAgICAgICAgICAgIHRhc2tzX3ZhbHVlLnNldChzdHIocGF5bG9hZC5nZXQoJ3Rhc2tzX2NvbXBsZXRlZCcpIG9yIDApKVxuICAgICAgICB0cnk6XG4gICAgICAgICAgICB0YXNrc19oaXN0b3J5LmFwcGVuZChpbnQodGFza3NfdmFsdWUuZ2V0KCkpKVxuICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjpcbiAgICAgICAgICAgIHRhc2tzX2hpc3RvcnkuYXBwZW5kKDApXG4gICAgICAgIHJlZnJlc2hfY2hhcnRzKClcblxuICAgIGRlZiBwYWludF9zZXR1cF9zdGVwKGluZGV4LCBzdGF0ZSk6XG4gICAgICAgIHJvdyA9IHNldHVwX3Jvd3NbaW5kZXhdXG4gICAgICAgIGlmIHN0YXRlID09ICdkb25lJzpcbiAgICAgICAgICAgIHJvd1snYmFkZ2UnXS5pdGVtY29uZmlndXJlKHJvd1snY2lyY2xlJ10sIGZpbGw9Q09MT1JTWydvayddLCBvdXRsaW5lPUNPTE9SU1snb2snXSlcbiAgICAgICAgICAgIHJvd1snYmFkZ2UnXS5pdGVtY29uZmlndXJlKHJvd1snbWFyayddLCB0ZXh0PSfinJMnLCBmaWxsPUNPTE9SU1snd2hpdGUnXSlcbiAgICAgICAgICAgIHJvd1sndGl0bGUnXS5jb25maWd1cmUoZmc9Q09MT1JTWydpbmsnXSlcbiAgICAgICAgICAgIHJvd1snZGV0YWlsJ10uY29uZmlndXJlKGZnPUNPTE9SU1snbXV0ZWQnXSlcbiAgICAgICAgZWxpZiBzdGF0ZSA9PSAnY3VycmVudCc6XG4gICAgICAgICAgICByb3dbJ2JhZGdlJ10uaXRlbWNvbmZpZ3VyZShyb3dbJ2NpcmNsZSddLCBmaWxsPUNPTE9SU1snYWNjZW50J10sIG91dGxpbmU9Q09MT1JTWydhY2NlbnQnXSlcbiAgICAgICAgICAgIHJvd1snYmFkZ2UnXS5pdGVtY29uZmlndXJlKHJvd1snbWFyayddLCB0ZXh0PXN0cihpbmRleCArIDEpLCBmaWxsPUNPTE9SU1snd2hpdGUnXSlcbiAgICAgICAgICAgIHJvd1sndGl0bGUnXS5jb25maWd1cmUoZmc9Q09MT1JTWydpbmsnXSlcbiAgICAgICAgICAgIHJvd1snZGV0YWlsJ10uY29uZmlndXJlKGZnPUNPTE9SU1snaW5rJ10pXG4gICAgICAgIGVsaWYgc3RhdGUgPT0gJ2Vycm9yJzpcbiAgICAgICAgICAgIHJvd1snYmFkZ2UnXS5pdGVtY29uZmlndXJlKHJvd1snY2lyY2xlJ10sIGZpbGw9Q09MT1JTWyd3YXJuJ10sIG91dGxpbmU9Q09MT1JTWyd3YXJuJ10pXG4gICAgICAgICAgICByb3dbJ2JhZGdlJ10uaXRlbWNvbmZpZ3VyZShyb3dbJ21hcmsnXSwgdGV4dD0nIScsIGZpbGw9Q09MT1JTWyd3aGl0ZSddKVxuICAgICAgICAgICAgcm93Wyd0aXRsZSddLmNvbmZpZ3VyZShmZz1DT0xPUlNbJ3dhcm4nXSlcbiAgICAgICAgICAgIHJvd1snZGV0YWlsJ10uY29uZmlndXJlKGZnPUNPTE9SU1snd2FybiddKVxuICAgICAgICBlbHNlOlxuICAgICAgICAgICAgcm93WydiYWRnZSddLml0ZW1jb25maWd1cmUocm93WydjaXJjbGUnXSwgZmlsbD1DT0xPUlNbJ2NhcmQnXSwgb3V0bGluZT1DT0xPUlNbJ2xpbmUnXSlcbiAgICAgICAgICAgIHJvd1snYmFkZ2UnXS5pdGVtY29uZmlndXJlKHJvd1snbWFyayddLCB0ZXh0PXN0cihpbmRleCArIDEpLCBmaWxsPUNPTE9SU1snbXV0ZWQnXSlcbiAgICAgICAgICAgIHJvd1sndGl0bGUnXS5jb25maWd1cmUoZmc9Q09MT1JTWydtdXRlZCddKVxuICAgICAgICAgICAgcm93WydkZXRhaWwnXS5jb25maWd1cmUoZmc9Q09MT1JTWydtdXRlZCddKVxuXG4gICAgZGVmIGhpZGVfaW50cm8oKTpcbiAgICAgICAgaGVyby5wYWNrX2ZvcmdldCgpXG4gICAgICAgIHN0ZXBzLnBhY2tfZm9yZ2V0KClcbiAgICAgICAgcHJpdmFjeS5wYWNrX2ZvcmdldCgpXG4gICAgICAgIGZvcm1fY2FyZC5wYWNrX2ZvcmdldCgpXG4gICAgICAgIGRldGFpbHNfY2FyZC5wYWNrX2ZvcmdldCgpXG5cbiAgICBkZWYgc2hvd19zZXR1cF92aWV3KCk6XG4gICAgICAgIGhpZGVfaW50cm8oKVxuICAgICAgICBzdGF0dXNfdmlldy5wYWNrX2ZvcmdldCgpXG4gICAgICAgIGhlYWRlcl9zdWJ0aXRsZS5jb25maWd1cmUodGV4dD0nV29ya2VyIHNldHVwJylcbiAgICAgICAgcm9vdC50aXRsZSgnRG9yaWFuIEdyYXkgV29ya2VyIFNldHVwJylcbiAgICAgICAgc2V0dXBfdmlldy5wYWNrKGZpbGw9J2JvdGgnLCBleHBhbmQ9VHJ1ZSlcblxuICAgIGRlZiBzaG93X3N0YXR1c192aWV3KCk6XG4gICAgICAgIGhpZGVfaW50cm8oKVxuICAgICAgICBzZXR1cF92aWV3LnBhY2tfZm9yZ2V0KClcbiAgICAgICAgaGVhZGVyX3N1YnRpdGxlLmNvbmZpZ3VyZSh0ZXh0PSdUaGlzIGNvbXB1dGVyJylcbiAgICAgICAgcm9vdC50aXRsZSgnRG9yaWFuIEdyYXkgV29ya2VyJylcbiAgICAgICAgc3RhdHVzX3ZpZXcucGFjayhmaWxsPSdib3RoJywgZXhwYW5kPVRydWUpXG5cbiAgICBjdXJyZW50X3NldHVwX3N0ZXAgPSB7J2luZGV4JzogMH1cblxuICAgIGRlZiBhZHZhbmNlX3NldHVwKGluZGV4LCBkZXRhaWw9Tm9uZSk6XG4gICAgICAgIGluZGV4ID0gbWF4KDAsIG1pbihpbmRleCwgbGVuKHNldHVwX3Jvd3MpIC0gMSkpXG4gICAgICAgIGZvciBwcmlvciBpbiByYW5nZShpbmRleCk6XG4gICAgICAgICAgICBwYWludF9zZXR1cF9zdGVwKHByaW9yLCAnZG9uZScpXG4gICAgICAgIHBhaW50X3NldHVwX3N0ZXAoaW5kZXgsICdjdXJyZW50JylcbiAgICAgICAgZm9yIGxhdGVyIGluIHJhbmdlKGluZGV4ICsgMSwgbGVuKHNldHVwX3Jvd3MpKTpcbiAgICAgICAgICAgIHBhaW50X3NldHVwX3N0ZXAobGF0ZXIsICdwZW5kaW5nJylcbiAgICAgICAgaWYgZGV0YWlsOlxuICAgICAgICAgICAgc2V0dXBfcm93c1tpbmRleF1bJ2RldGFpbCddLmNvbmZpZ3VyZSh0ZXh0PWRldGFpbClcbiAgICAgICAgICAgIGFjdGl2aXR5X3RleHQuc2V0KGRldGFpbClcbiAgICAgICAgY3VycmVudF9zZXR1cF9zdGVwWydpbmRleCddID0gaW5kZXhcblxuICAgIGRlZiBoYW5kbGVfaW5zdGFsbF9saW5lKGxpbmUpOlxuICAgICAgICBoaW50ID0gZnJpZW5kbHlfaW5zdGFsbF9saW5lKGxpbmUpXG4gICAgICAgIGlmIGxpbmUubHN0cmlwKCkuc3RhcnRzd2l0aCgnJCAnKSBvciAoaGludCBhbmQgaGludC5nZXQoJ3JhdycsICcnKS5sc3RyaXAoKS5zdGFydHN3aXRoKCckICcpKTpcbiAgICAgICAgICAgIGFwcGVuZF9jb25zb2xlKGxpbmUgaWYgbGluZS5sc3RyaXAoKS5zdGFydHN3aXRoKCckICcpIGVsc2UgaGludFsncmF3J10pXG4gICAgICAgIGlmIG5vdCBoaW50OlxuICAgICAgICAgICAgaWYgbGluZS5sc3RyaXAoKS5zdGFydHN3aXRoKCckICcpOlxuICAgICAgICAgICAgICAgIGFjdGl2aXR5X3RleHQuc2V0KCdSdW5uaW5nICcgKyBsaW5lLmxzdHJpcCgpWzI6XSlcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICBpZiBoaW50LmdldCgnZXJyb3InKTpcbiAgICAgICAgICAgIGFjdGl2aXR5X3RleHQuc2V0KGhpbnRbJ2RldGFpbCddKVxuICAgICAgICAgICAgcGFpbnRfc2V0dXBfc3RlcChjdXJyZW50X3NldHVwX3N0ZXBbJ2luZGV4J10sICdlcnJvcicpXG4gICAgICAgICAgICBzdGF0dXMuc2V0KGhpbnRbJ2RldGFpbCddKVxuICAgICAgICAgICAgcGFpbnRfYmFubmVyKCdlcnJvcicpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgaWYgaGludFsnc3RlcCddIGlzIG5vdCBOb25lOlxuICAgICAgICAgICAgYWR2YW5jZV9zZXR1cChoaW50WydzdGVwJ10sIGhpbnRbJ2RldGFpbCddKVxuICAgICAgICAgICAgc3RhdHVzLnNldChoaW50Wyd0aXRsZSddIG9yIGhpbnRbJ2RldGFpbCddKVxuICAgICAgICBlbGlmIGhpbnRbJ2RldGFpbCddIGFuZCBub3QgbGluZS5sc3RyaXAoKS5zdGFydHN3aXRoKCckICcpOlxuICAgICAgICAgICAgYWN0aXZpdHlfdGV4dC5zZXQoaGludFsnZGV0YWlsJ10pXG5cbiAgICBkZWYgc2hvd19lbnJvbGxtZW50X2NvbnRyb2xzKCk6XG4gICAgICAgIHNlbmRfYnV0dG9uLnBhY2soc2lkZT0nbGVmdCcpXG4gICAgICAgIHBhdXNlX2J1dHRvbi5wYWNrX2ZvcmdldCgpXG4gICAgICAgIHJlc3VtZV9idXR0b24ucGFja19mb3JnZXQoKVxuXG4gICAgZGVmIHNob3dfcnVubmluZ19jb250cm9scygpOlxuICAgICAgICBzZW5kX2J1dHRvbi5wYWNrX2ZvcmdldCgpXG4gICAgICAgIHBhdXNlX2J1dHRvbi5wYWNrKHNpZGU9J2xlZnQnKVxuICAgICAgICByZXN1bWVfYnV0dG9uLnBhY2soc2lkZT0nbGVmdCcsIHBhZHg9KDEwLCAwKSlcblxuICAgIGRlZiByZWZyZXNoX3ByZXZpZXcoKTpcbiAgICAgICAgaWYgc25hcHNob3RbJ2Vycm9yJ106XG4gICAgICAgICAgICBzdGF0dXMuc2V0KHNuYXBzaG90WydlcnJvciddKVxuICAgICAgICAgICAgcGFpbnRfYmFubmVyKCdlcnJvcicpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgaWYgbm90IHNuYXBzaG90Wyd2YWx1ZSddOlxuICAgICAgICAgICAgcm9vdC5hZnRlcigyNTAsIHJlZnJlc2hfcHJldmlldylcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICBzdGF0dXMuc2V0KCdSZWFkeSB3aGVuIHlvdSBhcmUuIEFkZCB5b3VyIG5hbWUsIGVtYWlsLCBhbmQgcGhvbmUsIHRoZW4gc2VuZCBhIHJlcXVlc3QuJylcbiAgICAgICAgcGFpbnRfYmFubmVyKCdyZWFkeScpXG4gICAgICAgIGFjdGlvbi5zZXQoJ3JlYWR5JylcbiAgICAgICAgc2VuZF9idXR0b24uY29uZmlndXJlKHN0YXRlPSdub3JtYWwnKVxuXG4gICAgZGVmIHNlbmRfcmVxdWVzdCgpOlxuICAgICAgICBpZiBhY3Rpb24uZ2V0KCkgIT0gJ3JlYWR5JzpcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICBkaXNwbGF5X25hbWUgPSBuYW1lX2VudHJ5LmdldCgpLnN0cmlwKClcbiAgICAgICAgZW1haWwgPSBlbWFpbF9lbnRyeS5nZXQoKS5zdHJpcCgpXG4gICAgICAgIHBob25lID0gcGhvbmVfZW50cnkuZ2V0KCkuc3RyaXAoKVxuICAgICAgICBpZiBub3QgZGlzcGxheV9uYW1lOlxuICAgICAgICAgICAgc3RhdHVzLnNldCgnQWRkIHlvdXIgbmFtZSBiZWZvcmUgc2VuZGluZyB0aGUgcmVxdWVzdC4nKVxuICAgICAgICAgICAgcGFpbnRfYmFubmVyKCdlcnJvcicpXG4gICAgICAgICAgICBuYW1lX2VudHJ5LmZvY3VzX3NldCgpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgaWYgbm90IGVtYWlsOlxuICAgICAgICAgICAgc3RhdHVzLnNldCgnQWRkIHlvdXIgZW1haWwgYmVmb3JlIHNlbmRpbmcgdGhlIHJlcXVlc3QuJylcbiAgICAgICAgICAgIHBhaW50X2Jhbm5lcignZXJyb3InKVxuICAgICAgICAgICAgZW1haWxfZW50cnkuZm9jdXNfc2V0KClcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICBpZiBub3QgcGhvbmU6XG4gICAgICAgICAgICBzdGF0dXMuc2V0KCdBZGQgeW91ciBwaG9uZSBudW1iZXIgYmVmb3JlIHNlbmRpbmcgdGhlIHJlcXVlc3QuJylcbiAgICAgICAgICAgIHBhaW50X2Jhbm5lcignZXJyb3InKVxuICAgICAgICAgICAgcGhvbmVfZW50cnkuZm9jdXNfc2V0KClcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICBhY3Rpb24uc2V0KCdzdWJtaXR0aW5nJylcbiAgICAgICAgc3RhdHVzLnNldCgnU2VuZGluZyB5b3VyIHJlcXVlc3TigKYnKVxuICAgICAgICBwYWludF9iYW5uZXIoJ3dhaXQnKVxuICAgICAgICBzZW5kX2J1dHRvbi5jb25maWd1cmUoc3RhdGU9J2Rpc2FibGVkJylcblxuICAgICAgICBkZWYgc3VibWl0KCk6XG4gICAgICAgICAgICB0cnk6XG4gICAgICAgICAgICAgICAgc3RhdGUgPSBsb2FkX3N0YXRlKClcbiAgICAgICAgICAgICAgICBzdWJtaXRfZW5yb2xsbWVudChvcmlnaW4sIHN0YXRlLCBzbmFwc2hvdFsndmFsdWUnXSwgZGlzcGxheV9uYW1lLCBlbWFpbCwgcGhvbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90ZV9lbnRyeS5nZXQoKS5zdHJpcCgpKVxuICAgICAgICAgICAgICAgIHJvb3QuYWZ0ZXIoMCwgbGFtYmRhOiBiZWdpbl9wb2xsKHN0YXRlKSlcbiAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXJyb3I6XG4gICAgICAgICAgICAgICAgZGVmIGZhaWwobWVzc2FnZT1zdHIoZXJyb3IpKTpcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLnNldChtZXNzYWdlKVxuICAgICAgICAgICAgICAgICAgICBwYWludF9iYW5uZXIoJ2Vycm9yJylcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uLnNldCgncmVhZHknKVxuICAgICAgICAgICAgICAgICAgICBzZW5kX2J1dHRvbi5jb25maWd1cmUoc3RhdGU9J25vcm1hbCcpXG4gICAgICAgICAgICAgICAgcm9vdC5hZnRlcigwLCBmYWlsKVxuXG4gICAgICAgIHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXN1Ym1pdCwgZGFlbW9uPVRydWUpLnN0YXJ0KClcblxuICAgIHNlbmRfYnV0dG9uLmNvbmZpZ3VyZShjb21tYW5kPXNlbmRfcmVxdWVzdCwgc3RhdGU9J2Rpc2FibGVkJylcblxuICAgIGRlZiBiZWdpbl9wb2xsKHN0YXRlKTpcbiAgICAgICAgc3RhdHVzLnNldCgnUmVxdWVzdCBzZW50LiBZb3UgY2FuIGxlYXZlIHRoaXMgd2luZG93IG9wZW4gd2hpbGUgd2UgcmV2aWV3IGl0LicpXG4gICAgICAgIHBhaW50X2Jhbm5lcignd2FpdCcpXG4gICAgICAgIGFjdGlvbi5zZXQoJ3BvbGxpbmcnKVxuICAgICAgICBuYW1lX2VudHJ5LmNvbmZpZ3VyZShzdGF0ZT0nZGlzYWJsZWQnKVxuICAgICAgICBlbWFpbF9lbnRyeS5jb25maWd1cmUoc3RhdGU9J2Rpc2FibGVkJylcbiAgICAgICAgcGhvbmVfZW50cnkuY29uZmlndXJlKHN0YXRlPSdkaXNhYmxlZCcpXG4gICAgICAgIG5vdGVfZW50cnkuY29uZmlndXJlKHN0YXRlPSdkaXNhYmxlZCcpXG4gICAgICAgIHNlbmRfYnV0dG9uLmNvbmZpZ3VyZShzdGF0ZT0nZGlzYWJsZWQnKVxuXG4gICAgICAgIGRlZiBwb2xsX2xvb3AoKTpcbiAgICAgICAgICAgIHdoaWxlIGFjdGlvbi5nZXQoKSA9PSAncG9sbGluZyc6XG4gICAgICAgICAgICAgICAgdHJ5OlxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBwb2xsX2Vucm9sbG1lbnQob3JpZ2luLCBzdGF0ZSlcbiAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGVycm9yOlxuICAgICAgICAgICAgICAgICAgICByb290LmFmdGVyKDAsIGxhbWJkYTogKHN0YXR1cy5zZXQoc3RyKGVycm9yKSksIHBhaW50X2Jhbm5lcignZXJyb3InKSkpXG4gICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMylcbiAgICAgICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgICBpZiByZXN1bHQuZ2V0KCdzdGF0dXMnKSA9PSAncGVuZGluZyc6XG4gICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMylcbiAgICAgICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgICBpZiByZXN1bHQuZ2V0KCdzdGF0dXMnKSA9PSAnYXBwcm92ZWQnOlxuICAgICAgICAgICAgICAgICAgICBpbnZpdGF0aW9uX3BhdGgoKS53cml0ZV90ZXh0KGpzb24uZHVtcHMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgJ29yaWdpbic6IG9yaWdpbixcbiAgICAgICAgICAgICAgICAgICAgICAgICd0b2tlbic6IHJlc3VsdFsndG9rZW4nXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICd3b3JrZXJfaWQnOiByZXN1bHRbJ3dvcmtlcl9pZCddLFxuICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgcm9vdC5hZnRlcigwLCBsYW1iZGE6IGJlZ2luX2luc3RhbGwocmVzdWx0KSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgcm9vdC5hZnRlcigwLCBsYW1iZGE6IChzdGF0dXMuc2V0KCdUaGlzIHJlcXVlc3Qgd2FzIGRlbmllZCBvciBleHBpcmVkLicpLCBwYWludF9iYW5uZXIoJ2Vycm9yJykpKVxuICAgICAgICAgICAgICAgIHJldHVyblxuXG4gICAgICAgIHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXBvbGxfbG9vcCwgZGFlbW9uPVRydWUpLnN0YXJ0KClcblxuICAgIGRlZiBiZWdpbl9pbnN0YWxsKHJlc3VsdCk6XG4gICAgICAgIHN0YXR1cy5zZXQoJ0FwcHJvdmVkLiBTZXR0aW5nIHRoaXMgY29tcHV0ZXIgdXAgbm93IOKAlCB5b3UgY2FuIGxlYXZlIHRoaXMgd2luZG93IG9wZW4uJylcbiAgICAgICAgcGFpbnRfYmFubmVyKCd3YWl0JylcbiAgICAgICAgYWN0aW9uLnNldCgnaW5zdGFsbGluZycpXG4gICAgICAgIHNob3dfc2V0dXBfdmlldygpXG4gICAgICAgIGFkdmFuY2Vfc2V0dXAoMCwgJ0RvcmlhbiBHcmF5IGFjY2VwdGVkIHRoaXMgY29tcHV0ZXIuIFNldHVwIGlzIHN0YXJ0aW5nLicpXG4gICAgICAgIGFwcGVuZF9jb25zb2xlKCcjICcgKyBwbGFuX2JsdXJiKVxuICAgICAgICBmb3IgbGluZSBpbiBwbGFuX2RldGFpbHMuc3BsaXRsaW5lcygpOlxuICAgICAgICAgICAgYXBwZW5kX2NvbnNvbGUoJyMgJyArIGxpbmUpXG5cbiAgICAgICAgZGVmIGluc3RhbGwoKTpcbiAgICAgICAgICAgIHRyeTpcbiAgICAgICAgICAgICAgICBydW5faW5zdGFsbGVyKHNjcmlwdF9wYXRoLCBvbl9saW5lPWxhbWJkYSBsaW5lOiByb290LmFmdGVyKDAsIGxhbWJkYSB0ZXh0PWxpbmU6IGhhbmRsZV9pbnN0YWxsX2xpbmUodGV4dCkpKVxuICAgICAgICAgICAgICAgIHJvb3QuYWZ0ZXIoMCwgbGFtYmRhOiBiZWdpbl9zdGF0dXMocmVzdWx0KSlcbiAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXJyb3I6XG4gICAgICAgICAgICAgICAgZGVmIGZhaWwobWVzc2FnZT1zdHIoZXJyb3IpKTpcbiAgICAgICAgICAgICAgICAgICAgcGFpbnRfc2V0dXBfc3RlcChjdXJyZW50X3NldHVwX3N0ZXBbJ2luZGV4J10sICdlcnJvcicpXG4gICAgICAgICAgICAgICAgICAgIGFjdGl2aXR5X3RleHQuc2V0KG1lc3NhZ2UpXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5zZXQobWVzc2FnZSlcbiAgICAgICAgICAgICAgICAgICAgcGFpbnRfYmFubmVyKCdlcnJvcicpXG4gICAgICAgICAgICAgICAgcm9vdC5hZnRlcigwLCBmYWlsKVxuXG4gICAgICAgIHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWluc3RhbGwsIGRhZW1vbj1UcnVlKS5zdGFydCgpXG5cbiAgICBkZWYgYmVnaW5fc3RhdHVzKHJlc3VsdCk6XG4gICAgICAgIGFjdGlvbi5zZXQoJ3J1bm5pbmcnKVxuICAgICAgICBzaG93X3N0YXR1c192aWV3KClcbiAgICAgICAgdG9rZW4gPSByZXN1bHRbJ3Rva2VuJ11cbiAgICAgICAgb3JpZ2luX3ZhbHVlID0gb3JpZ2luXG4gICAgICAgIGFwcGx5X3N0YXR1cyh7J3N0YXRlJzogJ29mZmxpbmUnfSlcblxuICAgICAgICBkZWYgcG9sbF9zdGF0dXMoKTpcbiAgICAgICAgICAgIHdoaWxlIGFjdGlvbi5nZXQoKSA9PSAncnVubmluZyc6XG4gICAgICAgICAgICAgICAgdHJ5OlxuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkID0gd29ya2VyX3N0YXR1cyhvcmlnaW5fdmFsdWUsIHRva2VuKVxuICAgICAgICAgICAgICAgICAgICByb290LmFmdGVyKDAsIGxhbWJkYSBkYXRhPXBheWxvYWQ6IGFwcGx5X3N0YXR1cyhkYXRhKSlcbiAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGVycm9yOlxuICAgICAgICAgICAgICAgICAgICByb290LmFmdGVyKDAsIGxhbWJkYSBtZXNzYWdlPXN0cihlcnJvcik6IGFwcGx5X3N0YXR1cyhOb25lLCBlcnJvcj1tZXNzYWdlKSlcbiAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDIpXG5cbiAgICAgICAgdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9cG9sbF9zdGF0dXMsIGRhZW1vbj1UcnVlKS5zdGFydCgpXG5cbiAgICBkZWYgYXBwbHlfc3RhdHVzKHBheWxvYWQsIGVycm9yPU5vbmUpOlxuICAgICAgICByZWNvcmRfc2FtcGxlKHBheWxvYWQpXG4gICAgICAgIGxvY2FsX3J1bm5pbmcgPSBob3N0X3dvcmtlcl9ydW5uaW5nKClcbiAgICAgICAgaWYgZXJyb3I6XG4gICAgICAgICAgICBpZiBsb2NhbF9ydW5uaW5nOlxuICAgICAgICAgICAgICAgIHN0YXRlX3ZhbHVlLnNldCgnUnVubmluZycpXG4gICAgICAgICAgICAgICAgYWN0aXZpdHlfdmFsdWUuc2V0KCdDaGVja2luZyBpbicpXG4gICAgICAgICAgICAgICAgc3RhdHVzLnNldCgnVGhlIHdvcmtlciBpcyBydW5uaW5nIG9uIHRoaXMgY29tcHV0ZXIuIFN0YXR1cyBmcm9tIERvcmlhbiBHcmF5IGNvdWxkIG5vdCBiZSByZWZyZXNoZWQuJylcbiAgICAgICAgICAgICAgICBwYWludF9iYW5uZXIoJ3dhaXQnKVxuICAgICAgICAgICAgICAgIHNob3dfcGF1c2VfY29udHJvbHMoRmFsc2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICBzdGF0ZV92YWx1ZS5zZXQoJ1VucmVhY2hhYmxlJylcbiAgICAgICAgICAgIGFjdGl2aXR5X3ZhbHVlLnNldCgnQ291bGQgbm90IHJlZnJlc2gnKVxuICAgICAgICAgICAgc3RhdHVzLnNldChlcnJvcilcbiAgICAgICAgICAgIHBhaW50X2Jhbm5lcignZXJyb3InKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIHBheWxvYWQgPSBwYXlsb2FkIG9yIHt9XG4gICAgICAgIHN0YXRlX25hbWUgPSBmcmllbmRseV93b3JrZXJfc3RhdGUocGF5bG9hZClcbiAgICAgICAgaWYgc3RhdGVfbmFtZSA9PSAnb2ZmbGluZScgYW5kIGxvY2FsX3J1bm5pbmc6XG4gICAgICAgICAgICBzdGF0ZV92YWx1ZS5zZXQoJ1J1bm5pbmcnKVxuICAgICAgICAgICAgYWN0aXZpdHlfdmFsdWUuc2V0KCdDaGVja2luZyBpbicpXG4gICAgICAgICAgICBzdGF0dXMuc2V0KCdUaGUgd29ya2VyIGlzIHJ1bm5pbmcgb24gdGhpcyBjb21wdXRlciBhbmQgY2hlY2tpbmcgaW4gd2l0aCBEb3JpYW4gR3JheS4nKVxuICAgICAgICAgICAgcGFpbnRfYmFubmVyKCd3YWl0JylcbiAgICAgICAgICAgIHNob3dfcGF1c2VfY29udHJvbHMoYm9vbChwYXlsb2FkLmdldCgnZHJhaW5pbmcnKSkpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgc3RhdGVfdmFsdWUuc2V0KFdPUktFUl9TVEFURV9DT1BZLmdldChzdGF0ZV9uYW1lLCBzdGF0ZV9uYW1lLnJlcGxhY2UoJ18nLCAnICcpKSlcbiAgICAgICAgYWN0aXZpdHlfdmFsdWUuc2V0KGN1cnJlbnRfd29ya19jb3B5KHBheWxvYWQpKVxuICAgICAgICBkcmFpbmluZyA9IGJvb2wocGF5bG9hZC5nZXQoJ2RyYWluaW5nJykgb3Igc3RhdGVfbmFtZSA9PSAncGF1c2VkJylcbiAgICAgICAgc2hvd19wYXVzZV9jb250cm9scyhkcmFpbmluZylcbiAgICAgICAgaWYgZHJhaW5pbmc6XG4gICAgICAgICAgICBzdGF0dXMuc2V0KCdUaGlzIGNvbXB1dGVyIGlzIHBhdXNlZC4gSXQgd2lsbCBmaW5pc2ggYW55IGN1cnJlbnQgdGFzaywgdGhlbiBzdG9wIHRha2luZyBuZXcgd29yay4nKVxuICAgICAgICAgICAgcGFpbnRfYmFubmVyKCdyZWFkeScpXG4gICAgICAgIGVsaWYgcGF5bG9hZC5nZXQoJ2N1cnJlbnRfdGFzaycpIG9yIHN0YXRlX25hbWUgPT0gJ2J1c3knOlxuICAgICAgICAgICAgc3RhdHVzLnNldCgnVGhpcyBjb21wdXRlciBpcyB3b3JraW5nIG9uIGEgdGFzay4nKVxuICAgICAgICAgICAgcGFpbnRfYmFubmVyKCd3YWl0JylcbiAgICAgICAgZWxpZiBzdGF0ZV9uYW1lID09ICdyZWFkeSc6XG4gICAgICAgICAgICBzdGF0dXMuc2V0KCdUaGlzIGNvbXB1dGVyIGlzIGNvbm5lY3RlZCBhbmQgd2FpdGluZyBmb3Igd29yay4nKVxuICAgICAgICAgICAgcGFpbnRfYmFubmVyKCd3YWl0JylcbiAgICAgICAgZWxpZiBzdGF0ZV9uYW1lID09ICdvZmZsaW5lJzpcbiAgICAgICAgICAgIHN0YXR1cy5zZXQoJ1RoZSB3b3JrZXIgaXMgbm90IGNvbm5lY3RlZCB5ZXQuIEl0IHdpbGwga2VlcCB0cnlpbmcgaW4gdGhlIGJhY2tncm91bmQuJylcbiAgICAgICAgICAgIHBhaW50X2Jhbm5lcignZXJyb3InKVxuICAgICAgICBlbHNlOlxuICAgICAgICAgICAgc3RhdHVzLnNldCgnVGhpcyBjb21wdXRlciBpcyAnICsgc3RhdGVfbmFtZS5yZXBsYWNlKCdfJywgJyAnKSArICcuJylcbiAgICAgICAgICAgIHBhaW50X2Jhbm5lcignd2FpdCcpXG5cbiAgICBkZWYgc2hvd19wYXVzZV9jb250cm9scyhkcmFpbmluZyk6XG4gICAgICAgIHN0YXR1c19wYXVzZS5wYWNrX2ZvcmdldCgpXG4gICAgICAgIHN0YXR1c19yZXN1bWUucGFja19mb3JnZXQoKVxuICAgICAgICBzdGF0dXNfcXVpdC5wYWNrX2ZvcmdldCgpXG4gICAgICAgIGlmIGRyYWluaW5nOlxuICAgICAgICAgICAgc3RhdHVzX3Jlc3VtZS5wYWNrKHNpZGU9J2xlZnQnKVxuICAgICAgICBlbHNlOlxuICAgICAgICAgICAgc3RhdHVzX3BhdXNlLnBhY2soc2lkZT0nbGVmdCcpXG4gICAgICAgIHN0YXR1c19xdWl0LnBhY2soc2lkZT0nbGVmdCcsIHBhZHg9KDEwLCAwKSlcblxuICAgIGRlZiBpbnZpdGF0aW9uX2NyZWRlbnRpYWxzKCk6XG4gICAgICAgIHNhdmVkID0ganNvbi5sb2FkcyhpbnZpdGF0aW9uX3BhdGgoKS5yZWFkX3RleHQoKSlcbiAgICAgICAgcmV0dXJuIG9yaWdpbiBvciBzYXZlZC5nZXQoJ29yaWdpbicpLCBzYXZlZFsndG9rZW4nXVxuXG4gICAgZGVmIHJlcXVlc3RfcGF1c2UocGF1c2UpOlxuICAgICAgICBzdGF0dXNfcGF1c2UuY29uZmlndXJlKHN0YXRlPSdkaXNhYmxlZCcpXG4gICAgICAgIHN0YXR1c19yZXN1bWUuY29uZmlndXJlKHN0YXRlPSdkaXNhYmxlZCcpXG5cbiAgICAgICAgZGVmIHdvcmsoKTpcbiAgICAgICAgICAgIHRyeTpcbiAgICAgICAgICAgICAgICBvcmlnaW5fdmFsdWUsIHRva2VuID0gaW52aXRhdGlvbl9jcmVkZW50aWFscygpXG4gICAgICAgICAgICAgICAgcGF0aCA9ICcvY29tcHV0ZV9mbGVldC9kcmFpbicgaWYgcGF1c2UgZWxzZSAnL2NvbXB1dGVfZmxlZXQvcmVzdW1lJ1xuICAgICAgICAgICAgICAgIHBvc3RfanNvbihvcmlnaW5fdmFsdWUsIHBhdGgsIHRva2VuLCB7fSlcbiAgICAgICAgICAgICAgICBwYXlsb2FkID0gd29ya2VyX3N0YXR1cyhvcmlnaW5fdmFsdWUsIHRva2VuKVxuICAgICAgICAgICAgICAgIHJvb3QuYWZ0ZXIoMCwgbGFtYmRhIGRhdGE9cGF5bG9hZDogYXBwbHlfc3RhdHVzKGRhdGEpKVxuICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlcnJvcjpcbiAgICAgICAgICAgICAgICBkZWYgZmFpbChtZXNzYWdlPXN0cihlcnJvcikpOlxuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuc2V0KG1lc3NhZ2UpXG4gICAgICAgICAgICAgICAgICAgIHBhaW50X2Jhbm5lcignZXJyb3InKVxuICAgICAgICAgICAgICAgICAgICBzdGF0dXNfcGF1c2UuY29uZmlndXJlKHN0YXRlPSdub3JtYWwnKVxuICAgICAgICAgICAgICAgICAgICBzdGF0dXNfcmVzdW1lLmNvbmZpZ3VyZShzdGF0ZT0nbm9ybWFsJylcbiAgICAgICAgICAgICAgICByb290LmFmdGVyKDAsIGZhaWwpXG4gICAgICAgICAgICBlbHNlOlxuICAgICAgICAgICAgICAgIHJvb3QuYWZ0ZXIoMCwgbGFtYmRhOiAoXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1c19wYXVzZS5jb25maWd1cmUoc3RhdGU9J25vcm1hbCcpLFxuICAgICAgICAgICAgICAgICAgICBzdGF0dXNfcmVzdW1lLmNvbmZpZ3VyZShzdGF0ZT0nbm9ybWFsJyksXG4gICAgICAgICAgICAgICAgKSlcblxuICAgICAgICB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD13b3JrLCBkYWVtb249VHJ1ZSkuc3RhcnQoKVxuXG4gICAgZGVmIHBhdXNlX3dvcmtlcigpOlxuICAgICAgICByZXF1ZXN0X3BhdXNlKFRydWUpXG5cbiAgICBkZWYgcmVzdW1lX3dvcmtlcigpOlxuICAgICAgICByZXF1ZXN0X3BhdXNlKEZhbHNlKVxuXG4gICAgZGVmIG9uX3Jlc2l6ZShfZXZlbnQ9Tm9uZSk6XG4gICAgICAgIHdyYXAgPSBtYXgoNDIwLCBib2R5LndpbmZvX3dpZHRoKCkgLSA4KVxuICAgICAgICBzdGF0dXNfbGFiZWwuY29uZmlndXJlKHdyYXBsZW5ndGg9d3JhcClcbiAgICAgICAgZm9yIHdpZGdldCBpbiBoZXJvLndpbmZvX2NoaWxkcmVuKCk6XG4gICAgICAgICAgICB3aWRnZXQuY29uZmlndXJlKHdyYXBsZW5ndGg9d3JhcClcbiAgICAgICAgZm9yIHdpZGdldCBpbiBwcml2YWN5LndpbmZvX2NoaWxkcmVuKCk6XG4gICAgICAgICAgICBpZiBpc2luc3RhbmNlKHdpZGdldCwgdGsuTGFiZWwpIGFuZCB3aWRnZXQuY2dldCgnd3JhcGxlbmd0aCcpOlxuICAgICAgICAgICAgICAgIHdpZGdldC5jb25maWd1cmUod3JhcGxlbmd0aD1tYXgoMzIwLCB3cmFwIC0gMjQpKVxuICAgICAgICBjYXJkX3dyYXAgPSBtYXgoMTgwLCAoYm9keS53aW5mb193aWR0aCgpIC8vIDMpIC0gNjQpXG4gICAgICAgIGZvciBjaGlsZCBpbiBzdGVwcy53aW5mb19jaGlsZHJlbigpOlxuICAgICAgICAgICAgZm9yIHdpZGdldCBpbiBjaGlsZC53aW5mb19jaGlsZHJlbigpOlxuICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uod2lkZ2V0LCB0ay5MYWJlbCk6XG4gICAgICAgICAgICAgICAgICAgIHdpZGdldC5jb25maWd1cmUod3JhcGxlbmd0aD1jYXJkX3dyYXApXG4gICAgICAgIGFjdGl2aXR5X2xhYmVsLmNvbmZpZ3VyZSh3cmFwbGVuZ3RoPXdyYXApXG4gICAgICAgIHNldHVwX2hlYWRpbmcuY29uZmlndXJlKHdyYXBsZW5ndGg9d3JhcClcbiAgICAgICAgc2V0dXBfY29weS5jb25maWd1cmUod3JhcGxlbmd0aD13cmFwKVxuICAgICAgICBzdGF0dXNfaGVhZGluZy5jb25maWd1cmUod3JhcGxlbmd0aD13cmFwKVxuICAgICAgICBzdGF0dXNfY29weS5jb25maWd1cmUod3JhcGxlbmd0aD13cmFwKVxuICAgICAgICBzdGF0dXNfbm90ZV90ZXh0LmNvbmZpZ3VyZSh3cmFwbGVuZ3RoPXdyYXApXG4gICAgICAgIGZhY3Rfd3JhcCA9IG1heCg5MCwgKGJvZHkud2luZm9fd2lkdGgoKSAvLyA0KSAtIDI0KVxuICAgICAgICBmb3Igd2lkZ2V0IGluIGZhY3RfbGFiZWxzOlxuICAgICAgICAgICAgd2lkZ2V0LmNvbmZpZ3VyZSh3cmFwbGVuZ3RoPWZhY3Rfd3JhcClcbiAgICAgICAgcmVmcmVzaF9jaGFydHMoKVxuICAgICAgICBmb3Igcm93IGluIHNldHVwX3Jvd3M6XG4gICAgICAgICAgICByb3dbJ2RldGFpbCddLmNvbmZpZ3VyZSh3cmFwbGVuZ3RoPW1heCgzMjAsIHdyYXAgLSA4MCkpXG5cbiAgICBtZW1vcnlfY2hhcnQuYmluZCgnPENvbmZpZ3VyZT4nLCBsYW1iZGEgX2V2ZW50OiByZWZyZXNoX2NoYXJ0cygpKVxuICAgIHRhc2tzX2NoYXJ0LmJpbmQoJzxDb25maWd1cmU+JywgbGFtYmRhIF9ldmVudDogcmVmcmVzaF9jaGFydHMoKSlcbiAgICBib2R5LmJpbmQoJzxDb25maWd1cmU+Jywgb25fcmVzaXplKVxuICAgIHBhdXNlX2J1dHRvbi5jb25maWd1cmUoY29tbWFuZD1wYXVzZV93b3JrZXIpXG4gICAgcmVzdW1lX2J1dHRvbi5jb25maWd1cmUoY29tbWFuZD1yZXN1bWVfd29ya2VyKVxuICAgIHNldHVwX3BhdXNlLmNvbmZpZ3VyZShjb21tYW5kPXBhdXNlX3dvcmtlcilcbiAgICBzZXR1cF9yZXN1bWUuY29uZmlndXJlKGNvbW1hbmQ9cmVzdW1lX3dvcmtlcilcbiAgICBzdGF0dXNfcGF1c2UuY29uZmlndXJlKGNvbW1hbmQ9cGF1c2Vfd29ya2VyKVxuICAgIHN0YXR1c19yZXN1bWUuY29uZmlndXJlKGNvbW1hbmQ9cmVzdW1lX3dvcmtlcilcbiAgICBzaG93X2Vucm9sbG1lbnRfY29udHJvbHMoKVxuICAgIGlmIGludml0YXRpb25fcGF0aCgpLmV4aXN0cygpOlxuICAgICAgICBzYXZlZCA9IGpzb24ubG9hZHMoaW52aXRhdGlvbl9wYXRoKCkucmVhZF90ZXh0KCkpXG4gICAgICAgIHJvb3QuYWZ0ZXIoMjAwLCBsYW1iZGE6IGJlZ2luX3N0YXR1cyhzYXZlZCkpXG4gICAgZWxzZTpcbiAgICAgICAgcmVmcmVzaF9wcmV2aWV3KClcbiAgICAgICAgbmFtZV9lbnRyeS5mb2N1c19zZXQoKVxuICAgIHByZXNlbnRfd2luZG93KHJvb3QpXG4gICAgcm9vdC5kZWljb25pZnkoKVxuICAgIHJvb3QubGlmdCgpXG4gICAgcm9vdC5mb2N1c19mb3JjZSgpXG4gICAgcm9vdC5hZnRlcig4MCwgbGFtYmRhOiBwcmVzZW50X3dpbmRvdyhyb290KSlcbiAgICByb290Lm1haW5sb29wKClcblxuXG5kZWYgdGtfd2luZG93X2F2YWlsYWJsZSgpOlxuICAgIHRyeTpcbiAgICAgICAgaW1wb3J0IHRraW50ZXJcbiAgICAgICAgcm9vdCA9IHRraW50ZXIuVGsoKVxuICAgICAgICByb290LndpdGhkcmF3KClcbiAgICAgICAgcm9vdC51cGRhdGVfaWRsZXRhc2tzKClcbiAgICAgICAgZXhpc3RzID0gYm9vbChyb290LndpbmZvX2V4aXN0cygpKVxuICAgICAgICByb290LmRlc3Ryb3koKVxuICAgICAgICByZXR1cm4gZXhpc3RzXG4gICAgZXhjZXB0IEV4Y2VwdGlvbjpcbiAgICAgICAgcmV0dXJuIEZhbHNlXG5cblxuZGVmIG9wZW5fc3lzdGVtX2Jyb3dzZXIodXJsKTpcbiAgICBudWxsID0gc3VicHJvY2Vzcy5ERVZOVUxMXG4gICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOlxuICAgICAgICBlc2NhcGVkID0gdXJsLnJlcGxhY2UoJ1xcXFwnLCAnXFxcXFxcXFwnKS5yZXBsYWNlKCdcIicsICdcXFxcXCInKVxuICAgICAgICBzdWJwcm9jZXNzLlBvcGVuKFsnb3BlbicsIHVybF0sIHN0ZG91dD1udWxsLCBzdGRlcnI9bnVsbClcbiAgICAgICAgc3VicHJvY2Vzcy5Qb3BlbihbJ29zYXNjcmlwdCcsICctZScsICdvcGVuIGxvY2F0aW9uIFwiJXNcIicgJSBlc2NhcGVkXSwgc3Rkb3V0PW51bGwsIHN0ZGVycj1udWxsKVxuICAgICAgICByZXR1cm5cbiAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzpcbiAgICAgICAgb3Muc3RhcnRmaWxlKHVybClcbiAgICAgICAgcmV0dXJuXG4gICAgd2luZG93c19jbWQgPSBQYXRoKCcvbW50L2MvV2luZG93cy9TeXN0ZW0zMi9jbWQuZXhlJylcbiAgICBpZiB3aW5kb3dzX2NtZC5leGlzdHMoKTpcbiAgICAgICAgc3VicHJvY2Vzcy5Qb3Blbihbc3RyKHdpbmRvd3NfY21kKSwgJy9jJywgJ3N0YXJ0JywgJycsIHVybF0sIHN0ZG91dD1udWxsLCBzdGRlcnI9bnVsbClcbiAgICAgICAgcmV0dXJuXG4gICAgZm9yIGNvbW1hbmQgaW4gKFxuICAgICAgICAoWyd4ZGctb3BlbicsIHVybF0gaWYgc2h1dGlsLndoaWNoKCd4ZGctb3BlbicpIGVsc2UgTm9uZSksXG4gICAgICAgIChbJ2dpbycsICdvcGVuJywgdXJsXSBpZiBzaHV0aWwud2hpY2goJ2dpbycpIGVsc2UgTm9uZSksXG4gICAgICAgIChbJ3dzbHZpZXcnLCB1cmxdIGlmIHNodXRpbC53aGljaCgnd3NsdmlldycpIGVsc2UgTm9uZSksXG4gICAgKTpcbiAgICAgICAgaWYgY29tbWFuZDpcbiAgICAgICAgICAgIHN1YnByb2Nlc3MuUG9wZW4oY29tbWFuZCwgc3Rkb3V0PW51bGwsIHN0ZGVycj1udWxsKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgaW1wb3J0IHdlYmJyb3dzZXJcbiAgICB3ZWJicm93c2VyLm9wZW4odXJsKVxuXG5cbmRlZiBjb25maWd1cmVkX29yaWdpbigqY2FuZGlkYXRlcyk6XG4gICAgdmFsdWVzID0gW2NvbmZpZygpLmdldCgnb3JpZ2luJyksICpjYW5kaWRhdGVzXVxuICAgIHJldHVybiBuZXh0KCh2YWx1ZSBmb3IgdmFsdWUgaW4gdmFsdWVzIGlmIHZhbHVlKSwgTm9uZSlcblxuXG5kZWYgaW52aXRhdGlvbl9wYXlsb2FkKHJlc3VsdD1Ob25lKTpcbiAgICBpZiByZXN1bHQ6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnb3JpZ2luJzogY29uZmlndXJlZF9vcmlnaW4ocmVzdWx0LmdldCgnb3JpZ2luJykpLFxuICAgICAgICAgICAgJ3Rva2VuJzogcmVzdWx0Wyd0b2tlbiddLFxuICAgICAgICAgICAgJ3dvcmtlcl9pZCc6IHJlc3VsdC5nZXQoJ3dvcmtlcl9pZCcpLFxuICAgICAgICB9XG4gICAgaWYgaW52aXRhdGlvbl9wYXRoKCkuZXhpc3RzKCk6XG4gICAgICAgIHNhdmVkID0ganNvbi5sb2FkcyhpbnZpdGF0aW9uX3BhdGgoKS5yZWFkX3RleHQoKSlcbiAgICAgICAgb3JpZ2luID0gY29uZmlndXJlZF9vcmlnaW4oc2F2ZWQuZ2V0KCdvcmlnaW4nKSlcbiAgICAgICAgaWYgb3JpZ2luIGFuZCBzYXZlZC5nZXQoJ29yaWdpbicpICE9IG9yaWdpbjpcbiAgICAgICAgICAgIHNhdmVkWydvcmlnaW4nXSA9IG9yaWdpblxuICAgICAgICAgICAgaW52aXRhdGlvbl9wYXRoKCkud3JpdGVfdGV4dChqc29uLmR1bXBzKHNhdmVkKSlcbiAgICAgICAgcmV0dXJuIHNhdmVkXG4gICAgcmV0dXJuIE5vbmVcblxuXG5kZWYgc2F2ZV9pbnZpdGF0aW9uKHJlc3VsdCwgb3JpZ2luKTpcbiAgICBwYXlsb2FkID0ge1xuICAgICAgICAnb3JpZ2luJzogY29uZmlndXJlZF9vcmlnaW4ob3JpZ2luLCByZXN1bHQuZ2V0KCdvcmlnaW4nKSksXG4gICAgICAgICd0b2tlbic6IHJlc3VsdFsndG9rZW4nXSxcbiAgICAgICAgJ3dvcmtlcl9pZCc6IHJlc3VsdC5nZXQoJ3dvcmtlcl9pZCcpLFxuICAgIH1cbiAgICBpbnZpdGF0aW9uX3BhdGgoKS53cml0ZV90ZXh0KGpzb24uZHVtcHMocGF5bG9hZCkpXG4gICAgcmV0dXJuIHBheWxvYWRcblxuXG5kZWYgcHVibGljX3N0YXRlKGRhdGEpOlxuICAgIHJldHVybiB7XG4gICAgICAgICdwaGFzZSc6IGRhdGFbJ3BoYXNlJ10sXG4gICAgICAgICdwcmV2aWV3JzogZGF0YVsncHJldmlldyddLFxuICAgICAgICAnZXJyb3InOiBkYXRhWydlcnJvciddLFxuICAgICAgICAnbWVzc2FnZSc6IGRhdGFbJ21lc3NhZ2UnXSxcbiAgICAgICAgJ2xvZ3MnOiBsaXN0KGRhdGFbJ2xvZ3MnXSksXG4gICAgICAgICd3b3JrZXInOiBkYXRhWyd3b3JrZXInXSxcbiAgICAgICAgJ2xvY2FsX3J1bm5pbmcnOiBkYXRhWydsb2NhbF9ydW5uaW5nJ10sXG4gICAgICAgICdtZW1vcnlfZnJlZSc6IGRhdGFbJ21lbW9yeV9mcmVlJ10sXG4gICAgICAgICdkcmFpbmluZyc6IGRhdGFbJ2RyYWluaW5nJ10sXG4gICAgfVxuXG5cbmRlZiBmZXRjaF93b3JrZXJfdmlldyhvcmlnaW4pOlxuICAgIHNhdmVkID0gaW52aXRhdGlvbl9wYXlsb2FkKClcbiAgICBpZiBub3Qgc2F2ZWQ6XG4gICAgICAgIHJldHVybiBOb25lXG4gICAgb3JpZ2luX3ZhbHVlID0gY29uZmlndXJlZF9vcmlnaW4oc2F2ZWQuZ2V0KCdvcmlnaW4nKSwgb3JpZ2luKVxuICAgIGF2YWlsYWJsZSwgX3RvdGFsID0gaG9zdF9tZW1vcnlfc25hcHNob3QoKVxuICAgIGxvY2FsX3J1bm5pbmcgPSBob3N0X3dvcmtlcl9ydW5uaW5nKClcbiAgICB0cnk6XG4gICAgICAgIHBheWxvYWQgPSB3b3JrZXJfc3RhdHVzKG9yaWdpbl92YWx1ZSwgc2F2ZWRbJ3Rva2VuJ10pXG4gICAgICAgIHJldHVybiB7J3BheWxvYWQnOiBwYXlsb2FkLCAnZXJyb3InOiBOb25lLCAnYXZhaWxhYmxlJzogYXZhaWxhYmxlLCAnbG9jYWxfcnVubmluZyc6IGxvY2FsX3J1bm5pbmd9XG4gICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlcnJvcjpcbiAgICAgICAgcmV0dXJuIHsncGF5bG9hZCc6IE5vbmUsICdlcnJvcic6IHN0cihlcnJvciksICdhdmFpbGFibGUnOiBhdmFpbGFibGUsICdsb2NhbF9ydW5uaW5nJzogbG9jYWxfcnVubmluZ31cblxuXG5kZWYgYXBwbHlfd29ya2VyX3ZpZXcoZGF0YSwgdmlldyk6XG4gICAgaWYgbm90IHZpZXc6XG4gICAgICAgIHJldHVyblxuICAgIHJlcG9ydGVkID0gKHZpZXcuZ2V0KCdwYXlsb2FkJykgb3Ige30pLmdldCgnbWVtb3J5X2F2YWlsYWJsZV9ieXRlcycpXG4gICAgYXZhaWxhYmxlID0gcmVwb3J0ZWQgb3Igdmlld1snYXZhaWxhYmxlJ11cbiAgICBkYXRhWydtZW1vcnlfZnJlZSddID0gZm9ybWF0X2J5dGVzKGF2YWlsYWJsZSkgaWYgYXZhaWxhYmxlIGVsc2UgTm9uZVxuICAgIGRhdGFbJ2xvY2FsX3J1bm5pbmcnXSA9IHZpZXdbJ2xvY2FsX3J1bm5pbmcnXVxuICAgIGlmIHZpZXdbJ2Vycm9yJ106XG4gICAgICAgIGRhdGFbJ3dvcmtlciddID0gTm9uZVxuICAgICAgICBpZiB2aWV3Wydsb2NhbF9ydW5uaW5nJ106XG4gICAgICAgICAgICBkYXRhWydtZXNzYWdlJ10gPSAoXG4gICAgICAgICAgICAgICAgJ1RoZSB3b3JrZXIgaXMgcnVubmluZyBvbiB0aGlzIGNvbXB1dGVyLiBTdGF0dXMgZnJvbSBEb3JpYW4gR3JheSBjb3VsZCBub3QgYmUgcmVmcmVzaGVkLidcbiAgICAgICAgICAgIClcbiAgICAgICAgZWxzZTpcbiAgICAgICAgICAgIGRhdGFbJ2Vycm9yJ10gPSB2aWV3WydlcnJvciddXG4gICAgICAgIHJldHVyblxuICAgIGRhdGFbJ2Vycm9yJ10gPSBOb25lXG4gICAgZGF0YVsnd29ya2VyJ10gPSB2aWV3WydwYXlsb2FkJ11cbiAgICBzdGF0ZV9uYW1lID0gZnJpZW5kbHlfd29ya2VyX3N0YXRlKHZpZXdbJ3BheWxvYWQnXSlcbiAgICBkYXRhWydkcmFpbmluZyddID0gYm9vbCh2aWV3WydwYXlsb2FkJ10uZ2V0KCdkcmFpbmluZycpIG9yIHN0YXRlX25hbWUgPT0gJ3BhdXNlZCcpXG4gICAgaWYgZGF0YVsnZHJhaW5pbmcnXTpcbiAgICAgICAgZGF0YVsnbWVzc2FnZSddID0gJ1RoaXMgY29tcHV0ZXIgaXMgcGF1c2VkLiBJdCB3aWxsIGZpbmlzaCBhbnkgY3VycmVudCB0YXNrLCB0aGVuIHN0b3AgdGFraW5nIG5ldyB3b3JrLidcbiAgICBlbGlmIHZpZXdbJ3BheWxvYWQnXS5nZXQoJ2N1cnJlbnRfdGFzaycpIG9yIHN0YXRlX25hbWUgPT0gJ2J1c3knOlxuICAgICAgICBkYXRhWydtZXNzYWdlJ10gPSAnVGhpcyBjb21wdXRlciBpcyB3b3JraW5nIG9uIGEgdGFzay4nXG4gICAgZWxpZiBzdGF0ZV9uYW1lID09ICdyZWFkeSc6XG4gICAgICAgIGRhdGFbJ21lc3NhZ2UnXSA9ICdUaGlzIGNvbXB1dGVyIGlzIGNvbm5lY3RlZCBhbmQgd2FpdGluZyBmb3Igd29yay4nXG4gICAgZWxpZiBzdGF0ZV9uYW1lID09ICdvZmZsaW5lJyBhbmQgZGF0YVsnbG9jYWxfcnVubmluZyddOlxuICAgICAgICBkYXRhWydtZXNzYWdlJ10gPSAnVGhlIHdvcmtlciBpcyBydW5uaW5nIG9uIHRoaXMgY29tcHV0ZXIgYW5kIGNoZWNraW5nIGluIHdpdGggRG9yaWFuIEdyYXkuJ1xuICAgIGVsaWYgc3RhdGVfbmFtZSA9PSAnb2ZmbGluZSc6XG4gICAgICAgIGRhdGFbJ21lc3NhZ2UnXSA9ICdUaGUgd29ya2VyIGlzIG5vdCBjb25uZWN0ZWQgeWV0LiBJdCB3aWxsIGtlZXAgdHJ5aW5nIGluIHRoZSBiYWNrZ3JvdW5kLidcbiAgICBlbHNlOlxuICAgICAgICBkYXRhWydtZXNzYWdlJ10gPSAnVGhpcyBjb21wdXRlciBpcyAnICsgc3RhdGVfbmFtZS5yZXBsYWNlKCdfJywgJyAnKSArICcuJ1xuXG5cbmRlZiBicm93c2VyX2Zsb3cob3JpZ2luLCBzY3JpcHRfcGF0aCk6XG4gICAgZnJvbSBodHRwLnNlcnZlciBpbXBvcnQgQmFzZUhUVFBSZXF1ZXN0SGFuZGxlciwgVGhyZWFkaW5nSFRUUFNlcnZlclxuXG4gICAgc3RhdGUgPSBsb2FkX3N0YXRlKClcbiAgICBwYWdlID0gKFJPT1QgLyAnaG9zdF93ZWIuaHRtbCcpLnJlYWRfdGV4dCgpXG4gICAgaWNvbl9wYXRoID0gUk9PVCAvICdkZ2UtaWNvbi5wbmcnXG4gICAgZGF0YSA9IHtcbiAgICAgICAgJ3BoYXNlJzogJ2xvYWRpbmcnLFxuICAgICAgICAncHJldmlldyc6IE5vbmUsXG4gICAgICAgICdlcnJvcic6IE5vbmUsXG4gICAgICAgICdtZXNzYWdlJzogJycsXG4gICAgICAgICdzbmFwc2hvdCc6IE5vbmUsXG4gICAgICAgICdsb2dzJzogZGVxdWUobWF4bGVuPTQwMCksXG4gICAgICAgICd3b3JrZXInOiBOb25lLFxuICAgICAgICAnbG9jYWxfcnVubmluZyc6IEZhbHNlLFxuICAgICAgICAnbWVtb3J5X2ZyZWUnOiBOb25lLFxuICAgICAgICAnZHJhaW5pbmcnOiBGYWxzZSxcbiAgICAgICAgJ2FsaXZlJzogVHJ1ZSxcbiAgICB9XG4gICAgbG9jayA9IHRocmVhZGluZy5Mb2NrKClcblxuICAgIGRlZiBjb2xsZWN0KCk6XG4gICAgICAgIHRyeTpcbiAgICAgICAgICAgIHNuYXBzaG90ID0gY29sbGVjdF9zbmFwc2hvdChvcmlnaW4pXG4gICAgICAgICAgICB3aXRoIGxvY2s6XG4gICAgICAgICAgICAgICAgZGF0YVsnc25hcHNob3QnXSA9IHNuYXBzaG90XG4gICAgICAgICAgICAgICAgZGF0YVsncHJldmlldyddID0gcHJldmlld19zdW1tYXJ5KHNuYXBzaG90KVxuICAgICAgICAgICAgICAgIGlmIGRhdGFbJ3BoYXNlJ10gPT0gJ2xvYWRpbmcnOlxuICAgICAgICAgICAgICAgICAgICBkYXRhWydwaGFzZSddID0gJ2Zvcm0nXG4gICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXJyb3I6XG4gICAgICAgICAgICB3aXRoIGxvY2s6XG4gICAgICAgICAgICAgICAgZGF0YVsnZXJyb3InXSA9IHN0cihlcnJvcilcblxuICAgIGRlZiBhcHBlbmRfbG9nKGxpbmUpOlxuICAgICAgICB0ZXh0ID0gbGluZS5yc3RyaXAoKVxuICAgICAgICBpZiBub3QgdGV4dDpcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICBoaW50ID0gZnJpZW5kbHlfaW5zdGFsbF9saW5lKHRleHQpXG4gICAgICAgIHdpdGggbG9jazpcbiAgICAgICAgICAgIGRhdGFbJ2xvZ3MnXS5hcHBlbmQodGV4dClcbiAgICAgICAgICAgIGlmIGhpbnQgYW5kIGhpbnQuZ2V0KCdkZXRhaWwnKTpcbiAgICAgICAgICAgICAgICBkYXRhWydtZXNzYWdlJ10gPSBoaW50WydkZXRhaWwnXVxuXG4gICAgZGVmIHBvbGxfc3RhdHVzKCk6XG4gICAgICAgIHdoaWxlIGRhdGFbJ2FsaXZlJ106XG4gICAgICAgICAgICB2aWV3ID0gZmV0Y2hfd29ya2VyX3ZpZXcob3JpZ2luKVxuICAgICAgICAgICAgd2l0aCBsb2NrOlxuICAgICAgICAgICAgICAgIGFwcGx5X3dvcmtlcl92aWV3KGRhdGEsIHZpZXcpXG4gICAgICAgICAgICB0aW1lLnNsZWVwKDIpXG5cbiAgICBkZWYgZmluaXNoX3NldHVwKCk6XG4gICAgICAgIHRyeTpcbiAgICAgICAgICAgIHdpdGggbG9jazpcbiAgICAgICAgICAgICAgICBkYXRhWydwaGFzZSddID0gJ3NldHVwJ1xuICAgICAgICAgICAgICAgIGRhdGFbJ21lc3NhZ2UnXSA9ICdBcHByb3ZlZC4gU2V0dXAgaXMgcnVubmluZyBvbiB0aGlzIGNvbXB1dGVyLidcbiAgICAgICAgICAgIHJ1bl9pbnN0YWxsZXIoc2NyaXB0X3BhdGgsIG9uX2xpbmU9YXBwZW5kX2xvZylcbiAgICAgICAgICAgIHdpdGggbG9jazpcbiAgICAgICAgICAgICAgICBkYXRhWydwaGFzZSddID0gJ3J1bm5pbmcnXG4gICAgICAgICAgICAgICAgZGF0YVsnbWVzc2FnZSddID0gJ1NldHVwIGZpbmlzaGVkLiBUaGlzIGNvbXB1dGVyIGlzIGNoZWNraW5nIGluIGFzIGEgd29ya2VyLidcbiAgICAgICAgICAgIHBvbGxfc3RhdHVzKClcbiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlcnJvcjpcbiAgICAgICAgICAgIHdpdGggbG9jazpcbiAgICAgICAgICAgICAgICBkYXRhWydlcnJvciddID0gc3RyKGVycm9yKVxuXG4gICAgZGVmIHdhaXRfYW5kX2luc3RhbGwoKTpcbiAgICAgICAgdHJ5OlxuICAgICAgICAgICAgcmVzdWx0ID0gd2FpdF9mb3JfZW5yb2xsbWVudChvcmlnaW4sIHN0YXRlKVxuICAgICAgICAgICAgc2F2ZV9pbnZpdGF0aW9uKHJlc3VsdCwgb3JpZ2luKVxuICAgICAgICAgICAgZmluaXNoX3NldHVwKClcbiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlcnJvcjpcbiAgICAgICAgICAgIHdpdGggbG9jazpcbiAgICAgICAgICAgICAgICBkYXRhWydlcnJvciddID0gc3RyKGVycm9yKVxuXG4gICAgY2xhc3MgSGFuZGxlcihCYXNlSFRUUFJlcXVlc3RIYW5kbGVyKTpcbiAgICAgICAgZGVmIGxvZ19tZXNzYWdlKHNlbGYsICpfYXJncyk6XG4gICAgICAgICAgICByZXR1cm5cblxuICAgICAgICBkZWYgc2VuZF9ieXRlcyhzZWxmLCBib2R5LCBjb250ZW50X3R5cGUsIHN0YXR1cz0yMDApOlxuICAgICAgICAgICAgc2VsZi5zZW5kX3Jlc3BvbnNlKHN0YXR1cylcbiAgICAgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoJ0NvbnRlbnQtVHlwZScsIGNvbnRlbnRfdHlwZSlcbiAgICAgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoJ0NhY2hlLUNvbnRyb2wnLCAnbm8tc3RvcmUnKVxuICAgICAgICAgICAgc2VsZi5zZW5kX2hlYWRlcignQ29udGVudC1MZW5ndGgnLCBzdHIobGVuKGJvZHkpKSlcbiAgICAgICAgICAgIHNlbGYuZW5kX2hlYWRlcnMoKVxuICAgICAgICAgICAgc2VsZi53ZmlsZS53cml0ZShib2R5KVxuXG4gICAgICAgIGRlZiBzZW5kX2pzb24oc2VsZiwgcGF5bG9hZCwgc3RhdHVzPTIwMCk6XG4gICAgICAgICAgICBzZWxmLnNlbmRfYnl0ZXMoanNvbi5kdW1wcyhwYXlsb2FkKS5lbmNvZGUoKSwgJ2FwcGxpY2F0aW9uL2pzb24nLCBzdGF0dXMpXG5cbiAgICAgICAgZGVmIHJlYWRfanNvbihzZWxmKTpcbiAgICAgICAgICAgIGxlbmd0aCA9IGludChzZWxmLmhlYWRlcnMuZ2V0KCdDb250ZW50LUxlbmd0aCcpIG9yIDApXG4gICAgICAgICAgICByZXR1cm4ganNvbi5sb2FkcyhzZWxmLnJmaWxlLnJlYWQobGVuZ3RoKSBvciBiJ3t9JylcblxuICAgICAgICBkZWYgZG9fR0VUKHNlbGYpOlxuICAgICAgICAgICAgaWYgc2VsZi5wYXRoID09ICcvJyBvciBzZWxmLnBhdGguc3RhcnRzd2l0aCgnL2luZGV4Jyk6XG4gICAgICAgICAgICAgICAgc2VsZi5zZW5kX2J5dGVzKHBhZ2UuZW5jb2RlKCksICd0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgnKVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgaWYgc2VsZi5wYXRoIGluICgnL2ljb24ucG5nJywgJy9mYXZpY29uLmljbycpIGFuZCBpY29uX3BhdGguZXhpc3RzKCk6XG4gICAgICAgICAgICAgICAgc2VsZi5zZW5kX2J5dGVzKGljb25fcGF0aC5yZWFkX2J5dGVzKCksICdpbWFnZS9wbmcnKVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgaWYgc2VsZi5wYXRoID09ICcvYXBpL3N0YXRlJzpcbiAgICAgICAgICAgICAgICB3aXRoIGxvY2s6XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc2VuZF9qc29uKHB1YmxpY19zdGF0ZShkYXRhKSlcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIHNlbGYuc2VuZF9lcnJvcig0MDQpXG5cbiAgICAgICAgZGVmIGRvX1BPU1Qoc2VsZik6XG4gICAgICAgICAgICBvcmlnaW5faGVhZGVyID0gc2VsZi5oZWFkZXJzLmdldCgnT3JpZ2luJylcbiAgICAgICAgICAgIGNyb3NzX29yaWdpbiA9IG9yaWdpbl9oZWFkZXIgYW5kIHVybGxpYi5wYXJzZS51cmxzcGxpdChvcmlnaW5faGVhZGVyKS5uZXRsb2MgIT0gc2VsZi5oZWFkZXJzLmdldCgnSG9zdCcpXG4gICAgICAgICAgICBpZiBjcm9zc19vcmlnaW4gb3Igc2VsZi5oZWFkZXJzLmdldCgnU2VjLUZldGNoLVNpdGUnKSA9PSAnY3Jvc3Mtc2l0ZSc6XG4gICAgICAgICAgICAgICAgc2VsZi5zZW5kX2Vycm9yKDQwMylcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIGlmIHNlbGYucGF0aCA9PSAnL2FwaS9lbnJvbGwnOlxuICAgICAgICAgICAgICAgIGJvZHkgPSBzZWxmLnJlYWRfanNvbigpXG4gICAgICAgICAgICAgICAgd2l0aCBsb2NrOlxuICAgICAgICAgICAgICAgICAgICBzbmFwc2hvdCA9IGRhdGFbJ3NuYXBzaG90J11cbiAgICAgICAgICAgICAgICBpZiBub3Qgc25hcHNob3Q6XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc2VuZF9qc29uKHsnZXJyb3InOiAnU3RpbGwgcmVhZGluZyB0aGlzIGNvbXB1dGVyLid9LCA0MDkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgIG5hbWUgPSAoYm9keS5nZXQoJ2Rpc3BsYXlfbmFtZScpIG9yICcnKS5zdHJpcCgpXG4gICAgICAgICAgICAgICAgZW1haWwgPSAoYm9keS5nZXQoJ2VtYWlsJykgb3IgJycpLnN0cmlwKClcbiAgICAgICAgICAgICAgICBwaG9uZSA9IChib2R5LmdldCgncGhvbmUnKSBvciAnJykuc3RyaXAoKVxuICAgICAgICAgICAgICAgIGlmIG5vdCBuYW1lOlxuICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbmRfanNvbih7J2Vycm9yJzogJ0FkZCB5b3VyIG5hbWUuJ30sIDQwMClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgaWYgbm90IGVtYWlsOlxuICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbmRfanNvbih7J2Vycm9yJzogJ0FkZCB5b3VyIGVtYWlsLid9LCA0MDApXG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgIGlmIG5vdCBwaG9uZTpcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zZW5kX2pzb24oeydlcnJvcic6ICdBZGQgeW91ciBwaG9uZSBudW1iZXIuJ30sIDQwMClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgdHJ5OlxuICAgICAgICAgICAgICAgICAgICBzdWJtaXRfZW5yb2xsbWVudChvcmlnaW4sIHN0YXRlLCBzbmFwc2hvdCwgbmFtZSwgZW1haWwsIHBob25lLCAoYm9keS5nZXQoJ25vdGUnKSBvciAnJykuc3RyaXAoKSlcbiAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGVycm9yOlxuICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbmRfanNvbih7J2Vycm9yJzogc3RyKGVycm9yKX0sIDQwMClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgd2l0aCBsb2NrOlxuICAgICAgICAgICAgICAgICAgICBkYXRhWydwaGFzZSddID0gJ3BlbmRpbmcnXG4gICAgICAgICAgICAgICAgICAgIGRhdGFbJ21lc3NhZ2UnXSA9IChcbiAgICAgICAgICAgICAgICAgICAgICAgICdSZXF1ZXN0IHNlbnQuIFdlIHdpbGwgc2V0IHRoaXMgY29tcHV0ZXIgdXAgaGVyZSBhZnRlciBzb21lb25lIG9uIHRoZSB0ZWFtIGFwcHJvdmVzIGl0LidcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXdhaXRfYW5kX2luc3RhbGwsIGRhZW1vbj1UcnVlKS5zdGFydCgpXG4gICAgICAgICAgICAgICAgc2VsZi5zZW5kX2pzb24oeydvayc6IFRydWV9KVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgaWYgc2VsZi5wYXRoIGluICgnL2FwaS9wYXVzZScsICcvYXBpL3Jlc3VtZScsICcvYXBpL3ByZWZlcmVuY2VzJyk6XG4gICAgICAgICAgICAgICAgc2F2ZWQgPSBpbnZpdGF0aW9uX3BheWxvYWQoKVxuICAgICAgICAgICAgICAgIGlmIG5vdCBzYXZlZDpcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zZW5kX2pzb24oeydlcnJvcic6ICdUaGlzIGNvbXB1dGVyIGlzIG5vdCBlbnJvbGxlZCB5ZXQuJ30sIDQwOSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgb3JpZ2luX3ZhbHVlID0gY29uZmlndXJlZF9vcmlnaW4oc2F2ZWQuZ2V0KCdvcmlnaW4nKSwgb3JpZ2luKVxuICAgICAgICAgICAgICAgIHBhdGggPSAnL2NvbXB1dGVfZmxlZXQvZHJhaW4nIGlmIHNlbGYucGF0aC5lbmRzd2l0aCgncGF1c2UnKSBlbHNlICcvY29tcHV0ZV9mbGVldC9yZXN1bWUnXG4gICAgICAgICAgICAgICAgdHJ5OlxuICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnBhdGggPT0gJy9hcGkvcHJlZmVyZW5jZXMnOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScsICcnKS5zdGFydHN3aXRoKCdhcHBsaWNhdGlvbi9qc29uJyk6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignUHJlZmVyZW5jZXMgcmVxdWlyZSBKU09OJylcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RfanNvbihvcmlnaW5fdmFsdWUsICcvY29tcHV0ZV9mbGVldC9wcmVmZXJlbmNlcycsIHNhdmVkWyd0b2tlbiddLCBzZWxmLnJlYWRfanNvbigpKVxuICAgICAgICAgICAgICAgICAgICBlbHNlOlxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zdF9qc29uKG9yaWdpbl92YWx1ZSwgcGF0aCwgc2F2ZWRbJ3Rva2VuJ10sIHt9KVxuICAgICAgICAgICAgICAgICAgICB2aWV3ID0gZmV0Y2hfd29ya2VyX3ZpZXcob3JpZ2luKVxuICAgICAgICAgICAgICAgICAgICB3aXRoIGxvY2s6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBseV93b3JrZXJfdmlldyhkYXRhLCB2aWV3KVxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZW5kX2pzb24ocHVibGljX3N0YXRlKGRhdGEpKVxuICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXJyb3I6XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc2VuZF9qc29uKHsnZXJyb3InOiBzdHIoZXJyb3IpfSwgNDAwKVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgc2VsZi5zZW5kX2Vycm9yKDQwNClcblxuICAgIGlmIGludml0YXRpb25fcGF0aCgpLmV4aXN0cygpOlxuICAgICAgICBpZiBtYWNfbmVlZHNfaW5zdGFsbCgpOlxuICAgICAgICAgICAgdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9ZmluaXNoX3NldHVwLCBkYWVtb249VHJ1ZSkuc3RhcnQoKVxuICAgICAgICBlbHNlOlxuICAgICAgICAgICAgZGF0YVsncGhhc2UnXSA9ICdydW5uaW5nJ1xuICAgICAgICAgICAgZGF0YVsnbWVzc2FnZSddID0gJ0NoZWNraW5nIGluIHdpdGggRG9yaWFuIEdyYXnigKYnXG4gICAgICAgICAgICB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1wb2xsX3N0YXR1cywgZGFlbW9uPVRydWUpLnN0YXJ0KClcbiAgICBlbGlmIHN0YXRlLmdldCgncG9sbF90b2tlbicpOlxuICAgICAgICBkYXRhWydwaGFzZSddID0gJ3BlbmRpbmcnXG4gICAgICAgIGRhdGFbJ21lc3NhZ2UnXSA9ICdSZXF1ZXN0IHNlbnQuIFdhaXRpbmcgZm9yIGFwcHJvdmFs4oCmJ1xuICAgICAgICB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD13YWl0X2FuZF9pbnN0YWxsLCBkYWVtb249VHJ1ZSkuc3RhcnQoKVxuICAgIGVsc2U6XG4gICAgICAgIHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWNvbGxlY3QsIGRhZW1vbj1UcnVlKS5zdGFydCgpXG4gICAgc2VydmVyID0gVGhyZWFkaW5nSFRUUFNlcnZlcigoJzEyNy4wLjAuMScsIDApLCBIYW5kbGVyKVxuICAgIHVybCA9ICdodHRwOi8vMTI3LjAuMC4xOiVzLycgJSBzZXJ2ZXIuc2VydmVyX2FkZHJlc3NbMV1cbiAgICBwcmludCgnT3BlbmluZyBEb3JpYW4gR3JheSBXb3JrZXIgaW4geW91ciBicm93c2VyOlxcbiAgJyArIHVybCwgZmx1c2g9VHJ1ZSlcbiAgICBwcmludCgnSWYgYSB3aW5kb3cgZG9lcyBub3QgYXBwZWFyLCBvcGVuIHRoYXQgYWRkcmVzcyBpbiBhbnkgYnJvd3NlciBvbiB0aGlzIGNvbXB1dGVyLicsIGZsdXNoPVRydWUpXG4gICAgb3Blbl9zeXN0ZW1fYnJvd3Nlcih1cmwpXG4gICAgdHJ5OlxuICAgICAgICBzZXJ2ZXIuc2VydmVfZm9yZXZlcigpXG4gICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OlxuICAgICAgICBkYXRhWydhbGl2ZSddID0gRmFsc2VcbiAgICAgICAgcmV0dXJuXG5cblxuZGVmIHJlZnJlc2hfbWFjX2hlbHBlcigpOlxuICAgICMgbGF1bmNoY3RsIGZyb20gYW4gU1NIIHNlc3Npb24gcmVhY2hlcyB0aGUgd3JvbmcgZG9tYWluOyB0aGUgVGVybWluYWwgcmVsYXVuY2ggcmVmcmVzaGVzLlxuICAgIGlmIG9zLmVudmlyb24uZ2V0KCdTU0hfQ09OTkVDVElPTicpOlxuICAgICAgICByZXR1cm5cbiAgICBpbXBvcnQgaW5zdGFsbF9tYWNvc1xuICAgIHRyeTpcbiAgICAgICAgaW5zdGFsbF9tYWNvcy5yZWZyZXNoX2hvc3RfcHJveHkoc3lzLmV4ZWN1dGFibGUpXG4gICAgZXhjZXB0IChPU0Vycm9yLCBWYWx1ZUVycm9yLCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcikgYXMgZXJyb3I6XG4gICAgICAgIHByaW50KCdDb3VsZCBub3QgdXBkYXRlIHRoZSBNYWMgbmV0d29yayBoZWxwZXI6ICVzJyAlIGVycm9yLCBmbHVzaD1UcnVlKVxuICAgIHRyeTpcbiAgICAgICAgaW5zdGFsbF9tYWNvcy5yZWZyZXNoX3ZtX2F1dG9zdGFydCgpXG4gICAgZXhjZXB0IChPU0Vycm9yLCBSdW50aW1lRXJyb3IsIHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yKSBhcyBlcnJvcjpcbiAgICAgICAgcHJpbnQoJ0NvdWxkIG5vdCBzZXQgdGhlIHdvcmtlciB0byBzdGFydCBhdCBsb2dpbjogJXMnICUgZXJyb3IsIGZsdXNoPVRydWUpXG5cblxuZGVmIG1haW4oKTpcbiAgICBwYXlsb2FkID0gY29uZmlnKClcbiAgICBvcmlnaW4gPSBwYXlsb2FkWydvcmlnaW4nXVxuICAgIHNjcmlwdF9wYXRoID0gc3lzLmFyZ3ZbMV0gaWYgbGVuKHN5cy5hcmd2KSA+IDEgZWxzZSBfX2ZpbGVfX1xuICAgIGltcG9ydCBob3N0X2FwcFxuICAgIGhvc3RfYXBwLmVuc3VyZV9ydW5uaW5nX2Zyb21fYXBwKHNjcmlwdF9wYXRoKVxuICAgIGlmIGhvc3RfYXBwLnJlZnJlc2hfZnJvbV9vcmlnaW4ob3JpZ2luKTpcbiAgICAgICAgcHl0aG9uID0gaG9zdF9hcHAucHl0aG9uX2Zvcl9sYXVuY2goKVxuICAgICAgICBvcy5leGVjdihweXRob24sIFtweXRob24sIHN0cihob3N0X2FwcC5zb3VyY2Vfcm9vdCgpIC8gJ2hvc3RfZ3VpLnB5JyksIHNjcmlwdF9wYXRoXSlcbiAgICBpZiB3YW50X2hlYWRsZXNzKCk6XG4gICAgICAgIHRlcm1pbmFsX2Zsb3cob3JpZ2luLCBzY3JpcHRfcGF0aClcbiAgICAgICAgcmV0dXJuXG4gICAgbGludXhfcmVsYXVuY2hfdmlhX2Rlc2t0b3Aoc2NyaXB0X3BhdGgpXG4gICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOlxuICAgICAgICBtYWNvc19yZWxhdW5jaF92aWFfYXF1YShzY3JpcHRfcGF0aClcbiAgICAgICAgcmVmcmVzaF9tYWNfaGVscGVyKClcbiAgICAgICAgYnJvd3Nlcl9mbG93KG9yaWdpbiwgc2NyaXB0X3BhdGgpXG4gICAgICAgIHJldHVyblxuICAgIGlmIHRrX3dpbmRvd19hdmFpbGFibGUoKTpcbiAgICAgICAgdGtpbnRlcl9mbG93KG9yaWdpbiwgc2NyaXB0X3BhdGgpXG4gICAgICAgIHJldHVyblxuICAgIGJyb3dzZXJfZmxvdyhvcmlnaW4sIHNjcmlwdF9wYXRoKVxuXG5cbmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6XG4gICAgbWFpbigpXG4iLCJob3N0X3dlYi5odG1sIjoiPCFET0NUWVBFIGh0bWw+XG48aHRtbCBsYW5nPVwiZW5cIj5cbjxoZWFkPlxuICA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiAgPG1ldGEgbmFtZT1cInZpZXdwb3J0XCIgY29udGVudD1cIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xXCI+XG4gIDx0aXRsZT5Eb3JpYW4gR3JheSBXb3JrZXI8L3RpdGxlPlxuICA8bGluayByZWw9XCJpY29uXCIgaHJlZj1cIi9pY29uLnBuZ1wiPlxuICA8c3R5bGU+XG4gICAgOnJvb3QgeyBjb2xvci1zY2hlbWU6IGxpZ2h0OyB9XG4gICAgYm9keSB7IG1hcmdpbjogMDsgZm9udDogMTZweC8xLjQ1IHVpLXNhbnMtc2VyaWYsIHN5c3RlbS11aSwgc2Fucy1zZXJpZjsgY29sb3I6ICMxYzE5MTc7IGJhY2tncm91bmQ6ICNmNWYwZWE7IH1cbiAgICBoZWFkZXIgeyBiYWNrZ3JvdW5kOiAjMWMxOTE3OyBjb2xvcjogI2ZhZjdmMjsgcGFkZGluZzogMjhweCAzMnB4IDI0cHg7IGRpc3BsYXk6IGZsZXg7IGdhcDogMTZweDsgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7IH1cbiAgICBoZWFkZXIgaW1nIHsgd2lkdGg6IDQ4cHg7IGhlaWdodDogNDhweDsgYm9yZGVyLXJhZGl1czogMTBweDsgfVxuICAgIGhlYWRlciBwIHsgbWFyZ2luOiA4cHggMCAwOyBjb2xvcjogI2M0YjhhYTsgbWF4LXdpZHRoOiA0MHJlbTsgfVxuICAgIG1haW4geyBtYXgtd2lkdGg6IDQycmVtOyBtYXJnaW46IDAgYXV0bzsgcGFkZGluZzogMjhweCAyNHB4IDQ4cHg7IH1cbiAgICAuY2FyZCB7IGJhY2tncm91bmQ6ICNmZmZjZjg7IGJvcmRlcjogMXB4IHNvbGlkICNlN2UwZDY7IGJvcmRlci1yYWRpdXM6IDE0cHg7IHBhZGRpbmc6IDIwcHggMjJweDsgbWFyZ2luOiAwIDAgMTZweDsgfVxuICAgIGxhYmVsIHsgZGlzcGxheTogYmxvY2s7IGZvbnQtd2VpZ2h0OiA2MDA7IG1hcmdpbjogMTJweCAwIDZweDsgfVxuICAgIGlucHV0LCB0ZXh0YXJlYSB7IHdpZHRoOiAxMDAlOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyBmb250OiBpbmhlcml0OyBwYWRkaW5nOiAxMHB4IDEycHg7IGJvcmRlcjogMXB4IHNvbGlkICNlN2UwZDY7IGJvcmRlci1yYWRpdXM6IDEwcHg7IGJhY2tncm91bmQ6ICNmZmY7IH1cbiAgICBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0geyB3aWR0aDogYXV0bzsgbWFyZ2luLXJpZ2h0OiA4cHg7IH1cbiAgICBkZXRhaWxzIHsgbWFyZ2luLXRvcDogMTZweDsgfVxuICAgIHN1bW1hcnkgeyBjdXJzb3I6IHBvaW50ZXI7IH1cbiAgICBidXR0b24geyBmb250OiBpbmhlcml0OyBmb250LXdlaWdodDogNjUwOyBiYWNrZ3JvdW5kOiAjOGIxZTFlOyBjb2xvcjogI2ZmZjsgYm9yZGVyOiAwOyBib3JkZXItcmFkaXVzOiA5OTlweDsgcGFkZGluZzogMTJweCAyMnB4OyBjdXJzb3I6IHBvaW50ZXI7IH1cbiAgICBidXR0b24uc2Vjb25kYXJ5IHsgYmFja2dyb3VuZDogIzFjMTkxNzsgfVxuICAgIGJ1dHRvbjpkaXNhYmxlZCB7IG9wYWNpdHk6IC41NTsgY3Vyc29yOiBkZWZhdWx0OyB9XG4gICAgLm11dGVkIHsgY29sb3I6ICM3ODcxNmM7IH1cbiAgICAuZmFjdHMsIC5zdGF0cyB7IGRpc3BsYXk6IGdyaWQ7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjsgZ2FwOiAxMHB4IDE2cHg7IH1cbiAgICAuZXJyIHsgY29sb3I6ICM5YTM0MTI7IGJhY2tncm91bmQ6ICNmYWVjZTQ7IHBhZGRpbmc6IDEycHggMTRweDsgYm9yZGVyLXJhZGl1czogMTBweDsgfVxuICAgIHByZSB7IG1hcmdpbjogMTJweCAwIDA7IG1heC1oZWlnaHQ6IDE2cmVtOyBvdmVyZmxvdzogYXV0bzsgYmFja2dyb3VuZDogIzFjMTkxNzsgY29sb3I6ICNmYWY3ZjI7IGJvcmRlci1yYWRpdXM6IDEwcHg7IHBhZGRpbmc6IDEycHggMTRweDsgZm9udDogMTJweC8xLjQgdWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgTWVubG8sIG1vbm9zcGFjZTsgd2hpdGUtc3BhY2U6IHByZS13cmFwOyB9XG4gICAgLmFjdGlvbnMgeyBkaXNwbGF5OiBmbGV4OyBnYXA6IDEwcHg7IGZsZXgtd3JhcDogd3JhcDsgbWFyZ2luLXRvcDogMTRweDsgfVxuICA8L3N0eWxlPlxuPC9oZWFkPlxuPGJvZHk+XG4gIDxoZWFkZXI+XG4gICAgPGltZyBzcmM9XCIvaWNvbi5wbmdcIiBhbHQ9XCJcIj5cbiAgICA8ZGl2PlxuICAgICAgPGgxPlB1dCBpZGxlIHRpbWUgdG8gd29yazwvaDE+XG4gICAgICA8cD5XaGVuIHRoaXMgY29tcHV0ZXIgaXMgbm90IGluIHVzZSwgaXQgY2FuIGhlbHAgRG9yaWFuIEdyYXkgcHJvY2VzcyBiYWNrZ3JvdW5kIHRhc2tzLiBXZSByZXZpZXcgdGhlIHJlcXVlc3QgYmVmb3JlIGluc3RhbGxpbmcgYW55dGhpbmcuPC9wPlxuICAgIDwvZGl2PlxuICA8L2hlYWRlcj5cbiAgPG1haW4+XG4gICAgPGRpdiBpZD1cInN0YXR1c1wiIGNsYXNzPVwiY2FyZCBtdXRlZFwiPlJlYWRpbmcgdGhpcyBjb21wdXRlcuKApjwvZGl2PlxuICAgIDxmb3JtIGlkPVwiZm9ybVwiIGNsYXNzPVwiY2FyZFwiIGhpZGRlbj5cbiAgICAgIDxwIGNsYXNzPVwibXV0ZWRcIj5XZSBuZXZlciBjb2xsZWN0IHBhc3N3b3JkcywgZmlsZXMsIHBob3RvcywgYnJvd3NpbmcgaGlzdG9yeSwgc2VyaWFsIG51bWJlcnMsIG9yIG5ldHdvcmsgYWRkcmVzc2VzLjwvcD5cbiAgICAgIDxwIGNsYXNzPVwibXV0ZWRcIj5BZnRlciBhcHByb3ZhbCwgc2V0dXAgcHJvZ3Jlc3MgYW5kIGRpYWdub3N0aWMgbWVzc2FnZXMgYXJlIHNlbnQgdG8gb3VyIHRlYW0uPC9wPlxuICAgICAgPGRpdiBjbGFzcz1cImZhY3RzXCIgaWQ9XCJmYWN0c1wiPjwvZGl2PlxuICAgICAgPGxhYmVsIGZvcj1cIm5hbWVcIj5Zb3VyIG5hbWU8L2xhYmVsPlxuICAgICAgPGlucHV0IGlkPVwibmFtZVwiIG5hbWU9XCJuYW1lXCIgYXV0b2NvbXBsZXRlPVwibmFtZVwiIHJlcXVpcmVkPlxuICAgICAgPGxhYmVsIGZvcj1cImVtYWlsXCI+RW1haWw8L2xhYmVsPlxuICAgICAgPGlucHV0IGlkPVwiZW1haWxcIiBuYW1lPVwiZW1haWxcIiB0eXBlPVwiZW1haWxcIiBhdXRvY29tcGxldGU9XCJlbWFpbFwiIHJlcXVpcmVkPlxuICAgICAgPGxhYmVsIGZvcj1cInBob25lXCI+UGhvbmU8L2xhYmVsPlxuICAgICAgPGlucHV0IGlkPVwicGhvbmVcIiBuYW1lPVwicGhvbmVcIiB0eXBlPVwidGVsXCIgYXV0b2NvbXBsZXRlPVwidGVsXCIgcmVxdWlyZWQ+XG4gICAgICA8bGFiZWwgZm9yPVwibm90ZVwiPk9wdGlvbmFsIG5vdGU8L2xhYmVsPlxuICAgICAgPHRleHRhcmVhIGlkPVwibm90ZVwiIG5hbWU9XCJub3RlXCIgcm93cz1cIjNcIiBwbGFjZWhvbGRlcj1cIkFueXRoaW5nIHdlIHNob3VsZCBrbm93XCI+PC90ZXh0YXJlYT5cbiAgICAgIDxwPjxidXR0b24gdHlwZT1cInN1Ym1pdFwiPlNlbmQgcmVxdWVzdDwvYnV0dG9uPjwvcD5cbiAgICAgIDxwIGlkPVwiZm9ybS1lcnJvclwiIGNsYXNzPVwiZXJyXCIgaGlkZGVuPjwvcD5cbiAgICA8L2Zvcm0+XG4gICAgPHNlY3Rpb24gaWQ9XCJzZXR1cFwiIGNsYXNzPVwiY2FyZFwiIGhpZGRlbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtdXRlZFwiPlNldHVwIGxvZzwvZGl2PlxuICAgICAgPHByZSBpZD1cImxvZ1wiPjwvcHJlPlxuICAgIDwvc2VjdGlvbj5cbiAgICA8c2VjdGlvbiBpZD1cInJ1bm5pbmdcIiBjbGFzcz1cImNhcmRcIiBoaWRkZW4+XG4gICAgICA8ZGl2IGNsYXNzPVwic3RhdHNcIiBpZD1cInN0YXRzXCI+PC9kaXY+XG4gICAgICA8cCBjbGFzcz1cIm11dGVkXCIgc3R5bGU9XCJtYXJnaW46IDE0cHggMCAwO1wiPlBhdXNlIHN0b3BzIG5ldyB3b3JrLiBBIHRhc2sgYWxyZWFkeSBydW5uaW5nIGlzIGFsbG93ZWQgdG8gZmluaXNoLjwvcD5cbiAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zXCI+XG4gICAgICAgIDxidXR0b24gaWQ9XCJwYXVzZVwiIHR5cGU9XCJidXR0b25cIj5QYXVzZTwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIGlkPVwicmVzdW1lXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic2Vjb25kYXJ5XCIgaGlkZGVuPlJlc3VtZTwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGV0YWlscz48c3VtbWFyeT5CYWNrZ3JvdW5kIHdvcmsgc2V0dGluZ3M8L3N1bW1hcnk+XG4gICAgICAgIDxmb3JtIGlkPVwicHJlZmVyZW5jZXNcIj5cbiAgICAgICAgICA8bGFiZWw+TWF4aW11bSBSQU0gKE1pQikgPGlucHV0IGlkPVwib3duZXItbWVtb3J5XCIgdHlwZT1cIm51bWJlclwiIG1pbj1cIjUxMlwiIG1heD1cIjI2MjE0NFwiIHJlcXVpcmVkPjwvbGFiZWw+XG4gICAgICAgICAgPGxhYmVsPk1heGltdW0gQ1BVIGNvcmVzIDxpbnB1dCBpZD1cIm93bmVyLWNwdVwiIHR5cGU9XCJudW1iZXJcIiBtaW49XCIxXCIgbWF4PVwiMjU2XCIgc3RlcD1cIjAuMjVcIiByZXF1aXJlZD48L2xhYmVsPlxuICAgICAgICAgIDxsYWJlbD48aW5wdXQgaWQ9XCJvd25lci1pZGxlXCIgdHlwZT1cImNoZWNrYm94XCI+IE9ubHkgd2hlbiBpZGxlIGZvciBmaXZlIG1pbnV0ZXM8L2xhYmVsPlxuICAgICAgICAgIDxsYWJlbD48aW5wdXQgaWQ9XCJvd25lci1hY1wiIHR5cGU9XCJjaGVja2JveFwiPiBPbmx5IG9uIG1haW5zIHBvd2VyPC9sYWJlbD5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIj5TYXZlIHNldHRpbmdzPC9idXR0b24+XG4gICAgICAgICAgPHAgY2xhc3M9XCJtdXRlZFwiPkNoYW5nZXMgYXBwbHkgdG8gbmV3IHdvcmsuIFJ1bm5pbmcgdGFza3MgZmluaXNoIHdpdGhpbiB0aGUgcHJldmlvdXMgbGltaXRzLjwvcD5cbiAgICAgICAgPC9mb3JtPlxuICAgICAgPC9kZXRhaWxzPlxuICAgICAgPHAgaWQ9XCJjb250cm9sLWVycm9yXCIgY2xhc3M9XCJlcnJcIiBoaWRkZW4+PC9wPlxuICAgIDwvc2VjdGlvbj5cbiAgPC9tYWluPlxuICA8c2NyaXB0PlxuICAgIGNvbnN0IHN0YXR1cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdGF0dXMnKTtcbiAgICBjb25zdCBmb3JtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Zvcm0nKTtcbiAgICBjb25zdCBzZXR1cCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXR1cCcpO1xuICAgIGNvbnN0IHJ1bm5pbmcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncnVubmluZycpO1xuICAgIGNvbnN0IGZhY3RzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZhY3RzJyk7XG4gICAgY29uc3Qgc3RhdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3RhdHMnKTtcbiAgICBjb25zdCBsb2cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9nJyk7XG4gICAgY29uc3QgcGF1c2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGF1c2UnKTtcbiAgICBjb25zdCByZXN1bWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdW1lJyk7XG5cbiAgICBmdW5jdGlvbiBzaG93KGlkLCB0ZXh0KSB7XG4gICAgICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgICAgIGVsLmhpZGRlbiA9ICF0ZXh0O1xuICAgICAgZWwudGV4dENvbnRlbnQgPSB0ZXh0IHx8ICcnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0YXQobGFiZWwsIHZhbHVlKSB7XG4gICAgICByZXR1cm4gYDxkaXY+PGRpdiBjbGFzcz1cIm11dGVkXCI+JHtsYWJlbH08L2Rpdj48ZGl2PiR7dmFsdWUgPz8gJ+KAlCd9PC9kaXY+PC9kaXY+YDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3b3JrZXJDb3B5KGRhdGEpIHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSBkYXRhLndvcmtlciB8fCB7fTtcbiAgICAgIGNvbnN0IHJhdyA9IHBheWxvYWQuc3RhdGUgfHwgKGRhdGEubG9jYWxfcnVubmluZyA/ICdydW5uaW5nJyA6ICdvZmZsaW5lJyk7XG4gICAgICBjb25zdCBzdGF0ZSA9IChyYXcgPT09ICdvZmZsaW5lJyAmJiBkYXRhLmxvY2FsX3J1bm5pbmcpID8gJ2NoZWNraW5nIGluJyA6IHJhdztcbiAgICAgIGNvbnN0IHRhc2sgPSBwYXlsb2FkLmN1cnJlbnRfdGFzayB8fCB7fTtcbiAgICAgIGNvbnN0IG9wZXJhdGlvbiA9ICh0YXNrLm9wZXJhdGlvbiB8fCAnJykucmVwbGFjZSgvXy9nLCAnICcpLnRyaW0oKTtcbiAgICAgIGNvbnN0IHJ1bm5pbmcgPSBwYXlsb2FkLnRhc2tzX3J1bm5pbmcgfHwgKG9wZXJhdGlvbiA/IDEgOiAwKTtcbiAgICAgIGxldCBhY3Rpdml0eSA9ICdXYWl0aW5nIGZvciB3b3JrJztcbiAgICAgIGlmIChydW5uaW5nID4gMSkgYWN0aXZpdHkgPSAnV29ya2luZyBvbiAnICsgcnVubmluZyArICcgdGFza3MnO1xuICAgICAgZWxzZSBpZiAob3BlcmF0aW9uKSBhY3Rpdml0eSA9ICdXb3JraW5nIG9uICcgKyBvcGVyYXRpb247XG4gICAgICBlbHNlIGlmIChkYXRhLmRyYWluaW5nIHx8IHN0YXRlID09PSAncGF1c2VkJykgYWN0aXZpdHkgPSAnTm90IHRha2luZyBuZXcgd29yayc7XG4gICAgICBlbHNlIGlmIChzdGF0ZSA9PT0gJ2J1c3knKSBhY3Rpdml0eSA9ICdXb3JraW5nIG9uIGEgdGFzayc7XG4gICAgICBlbHNlIGlmIChzdGF0ZSA9PT0gJ29mZmxpbmUnICYmIGRhdGEubG9jYWxfcnVubmluZykgYWN0aXZpdHkgPSAnQ2hlY2tpbmcgaW4nO1xuICAgICAgZWxzZSBpZiAoc3RhdGUgPT09ICdvZmZsaW5lJykgYWN0aXZpdHkgPSAnTm90IGNvbm5lY3RlZCB5ZXQnO1xuICAgICAgcmV0dXJuIHsgc3RhdGUsIGFjdGl2aXR5LCBydW5uaW5nLCB0YXNrczogcGF5bG9hZC50YXNrc19jb21wbGV0ZWQgfTtcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiBsb2FkKCkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goJy9hcGkvc3RhdGUnKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgICAgaWYgKGRhdGEuZXJyb3IgJiYgZGF0YS5waGFzZSAhPT0gJ3J1bm5pbmcnKSB7XG4gICAgICAgIHN0YXR1cy5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgc3RhdHVzLmNsYXNzTmFtZSA9ICdlcnInO1xuICAgICAgICBzdGF0dXMudGV4dENvbnRlbnQgPSBkYXRhLmVycm9yO1xuICAgICAgICBmb3JtLmhpZGRlbiA9IHRydWU7XG4gICAgICAgIHNldHVwLmhpZGRlbiA9IHRydWU7XG4gICAgICAgIHJ1bm5pbmcuaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGRhdGEucGhhc2UgPT09ICdwZW5kaW5nJykge1xuICAgICAgICBzdGF0dXMuaGlkZGVuID0gZmFsc2U7XG4gICAgICAgIHN0YXR1cy5jbGFzc05hbWUgPSAnY2FyZCc7XG4gICAgICAgIHN0YXR1cy50ZXh0Q29udGVudCA9IGRhdGEubWVzc2FnZSB8fCAnUmVxdWVzdCBzZW50LiBXZSB3aWxsIHNldCB0aGlzIGNvbXB1dGVyIHVwIGhlcmUgYWZ0ZXIgc29tZW9uZSBvbiB0aGUgdGVhbSBhcHByb3ZlcyBpdC4nO1xuICAgICAgICBmb3JtLmhpZGRlbiA9IHRydWU7XG4gICAgICAgIHNldHVwLmhpZGRlbiA9IHRydWU7XG4gICAgICAgIHJ1bm5pbmcuaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGRhdGEucGhhc2UgPT09ICdzZXR1cCcpIHtcbiAgICAgICAgc3RhdHVzLmhpZGRlbiA9IGZhbHNlO1xuICAgICAgICBzdGF0dXMuY2xhc3NOYW1lID0gJ2NhcmQnO1xuICAgICAgICBzdGF0dXMudGV4dENvbnRlbnQgPSBkYXRhLm1lc3NhZ2UgfHwgJ0FwcHJvdmVkLiBTZXR1cCBpcyBydW5uaW5nIG9uIHRoaXMgY29tcHV0ZXIuJztcbiAgICAgICAgZm9ybS5oaWRkZW4gPSB0cnVlO1xuICAgICAgICBzZXR1cC5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgcnVubmluZy5oaWRkZW4gPSB0cnVlO1xuICAgICAgICBsb2cudGV4dENvbnRlbnQgPSAoZGF0YS5sb2dzIHx8IFtdKS5qb2luKCdcXG4nKTtcbiAgICAgICAgbG9nLnNjcm9sbFRvcCA9IGxvZy5zY3JvbGxIZWlnaHQ7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChkYXRhLnBoYXNlID09PSAncnVubmluZycpIHtcbiAgICAgICAgY29uc3QgY29weSA9IHdvcmtlckNvcHkoZGF0YSk7XG4gICAgICAgIHN0YXR1cy5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgc3RhdHVzLmNsYXNzTmFtZSA9ICdjYXJkJztcbiAgICAgICAgc3RhdHVzLnRleHRDb250ZW50ID0gZGF0YS5tZXNzYWdlIHx8ICdUaGlzIGNvbXB1dGVyIGlzIGNvbm5lY3RlZCBhcyBhIHdvcmtlci4nO1xuICAgICAgICBmb3JtLmhpZGRlbiA9IHRydWU7XG4gICAgICAgIHNldHVwLmhpZGRlbiA9ICEoZGF0YS5sb2dzIHx8IFtdKS5sZW5ndGg7XG4gICAgICAgIGlmICghc2V0dXAuaGlkZGVuKSB7XG4gICAgICAgICAgbG9nLnRleHRDb250ZW50ID0gKGRhdGEubG9ncyB8fCBbXSkuam9pbignXFxuJyk7XG4gICAgICAgICAgbG9nLnNjcm9sbFRvcCA9IGxvZy5zY3JvbGxIZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgcnVubmluZy5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgY29uc3QgcG9saWN5ID0gKGRhdGEud29ya2VyIHx8IHt9KS5leGVjdXRpb25fcG9saWN5O1xuICAgICAgICBjb25zdCBwcmVmID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ByZWZlcmVuY2VzJyk7XG4gICAgICAgIGlmIChwb2xpY3kgJiYgIXByZWYuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpIHtcbiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb3duZXItbWVtb3J5JykudmFsdWUgPSBwb2xpY3kub3duZXJfbWVtb3J5X2xpbWl0X21iO1xuICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvd25lci1jcHUnKS52YWx1ZSA9IHBvbGljeS5vd25lcl9jcHVfbGltaXQ7XG4gICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ293bmVyLWlkbGUnKS5jaGVja2VkID0gcG9saWN5LmlkbGVfb25seTtcbiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb3duZXItYWMnKS5jaGVja2VkID0gcG9saWN5LmFjX29ubHk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdHMuaW5uZXJIVE1MID0gW1xuICAgICAgICAgIHN0YXQoJ1N0YXR1cycsIGNvcHkuc3RhdGUucmVwbGFjZSgvXy9nLCAnICcpKSxcbiAgICAgICAgICBzdGF0KCdBY3Rpdml0eScsIGNvcHkuYWN0aXZpdHkpLFxuICAgICAgICAgIHN0YXQoJ01lbW9yeSBmcmVlJywgZGF0YS5tZW1vcnlfZnJlZSksXG4gICAgICAgICAgc3RhdCgnVGFza3MgcnVubmluZycsIGNvcHkucnVubmluZyksXG4gICAgICAgICAgc3RhdCgnVGFza3MgZmluaXNoZWQnLCBjb3B5LnRhc2tzKSxcbiAgICAgICAgXS5qb2luKCcnKTtcbiAgICAgICAgcGF1c2UuaGlkZGVuID0gZGF0YS5kcmFpbmluZztcbiAgICAgICAgcmVzdW1lLmhpZGRlbiA9ICFkYXRhLmRyYWluaW5nO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZGF0YS5wcmV2aWV3KSB7XG4gICAgICAgIHN0YXR1cy5oaWRkZW4gPSB0cnVlO1xuICAgICAgICBmb3JtLmhpZGRlbiA9IGZhbHNlO1xuICAgICAgICBzZXR1cC5oaWRkZW4gPSB0cnVlO1xuICAgICAgICBydW5uaW5nLmhpZGRlbiA9IHRydWU7XG4gICAgICAgIGNvbnN0IHAgPSBkYXRhLnByZXZpZXc7XG4gICAgICAgIGZhY3RzLmlubmVySFRNTCA9IFtcbiAgICAgICAgICBbJ0NvbXB1dGVyJywgcC5jb21wdXRlcl0sXG4gICAgICAgICAgWydTeXN0ZW0nLCBwLnN5c3RlbV0sXG4gICAgICAgICAgWydNZW1vcnknLCBwLm1lbW9yeV0sXG4gICAgICAgICAgWydDUFVzJywgcC5jcHVzXSxcbiAgICAgICAgICBbJ1JlYWR5JywgcC5yZWFkeSA/ICdZZXMnIDogJ05vdCB5ZXQnXSxcbiAgICAgICAgICBbJ1JlYWNoYWJsZScsIHAuY29ubmVjdGVkID8gJ1llcycgOiAnTm8nXSxcbiAgICAgICAgXS5tYXAoKFtrLCB2XSkgPT4gc3RhdChrLCB2KSkuam9pbignJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9ybS5hZGRFdmVudExpc3RlbmVyKCdzdWJtaXQnLCBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBmb3JtLnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbicpLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgIHNob3coJ2Zvcm0tZXJyb3InLCAnJyk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCgnL2FwaS9lbnJvbGwnLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgZGlzcGxheV9uYW1lOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbmFtZScpLnZhbHVlLFxuICAgICAgICAgICAgZW1haWw6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlbWFpbCcpLnZhbHVlLFxuICAgICAgICAgICAgcGhvbmU6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwaG9uZScpLnZhbHVlLFxuICAgICAgICAgICAgbm90ZTogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25vdGUnKS52YWx1ZSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgICAgICBpZiAoIXJlcy5vaykgdGhyb3cgbmV3IEVycm9yKGRhdGEuZXJyb3IgfHwgJ0NvdWxkIG5vdCBzZW5kIHRoZSByZXF1ZXN0LicpO1xuICAgICAgICBhd2FpdCBsb2FkKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBzaG93KCdmb3JtLWVycm9yJywgZXJyb3IubWVzc2FnZSk7XG4gICAgICAgIGZvcm0ucXVlcnlTZWxlY3RvcignYnV0dG9uJykuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uIGNvbnRyb2woYWN0aW9uKSB7XG4gICAgICBwYXVzZS5kaXNhYmxlZCA9IHRydWU7XG4gICAgICByZXN1bWUuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgc2hvdygnY29udHJvbC1lcnJvcicsICcnKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKCcvYXBpLycgKyBhY3Rpb24sIHsgbWV0aG9kOiAnUE9TVCcgfSk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgICAgICBpZiAoIXJlcy5vaykgdGhyb3cgbmV3IEVycm9yKGRhdGEuZXJyb3IgfHwgJ0NvdWxkIG5vdCB1cGRhdGUgdGhpcyBjb21wdXRlci4nKTtcbiAgICAgICAgYXdhaXQgbG9hZCgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgc2hvdygnY29udHJvbC1lcnJvcicsIGVycm9yLm1lc3NhZ2UpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgcGF1c2UuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgcmVzdW1lLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ByZWZlcmVuY2VzJykuYWRkRXZlbnRMaXN0ZW5lcignc3VibWl0JywgYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goJy9hcGkvcHJlZmVyZW5jZXMnLCB7bWV0aG9kOiAnUE9TVCcsIGhlYWRlcnM6IHsnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nfSwgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIG93bmVyX21lbW9yeV9saW1pdF9tYjogTnVtYmVyKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvd25lci1tZW1vcnknKS52YWx1ZSksXG4gICAgICAgICAgb3duZXJfY3B1X2xpbWl0OiBOdW1iZXIoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ293bmVyLWNwdScpLnZhbHVlKSxcbiAgICAgICAgICBpZGxlX29ubHk6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvd25lci1pZGxlJykuY2hlY2tlZCxcbiAgICAgICAgICBhY19vbmx5OiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb3duZXItYWMnKS5jaGVja2VkLFxuICAgICAgICB9KX0pO1xuICAgICAgICBpZiAoIXJlcy5vaykgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3Qgc2F2ZSBzZXR0aW5ncy4gQ2hlY2sgdGhlIGxpbWl0cyBhbmQgY29ubmVjdGlvbi4nKTtcbiAgICAgICAgYXdhaXQgbG9hZCgpO1xuICAgICAgICBzaG93KCdjb250cm9sLWVycm9yJywgJ1NldHRpbmdzIHNhdmVkLicpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHsgc2hvdygnY29udHJvbC1lcnJvcicsIGVycm9yLm1lc3NhZ2UpOyB9XG4gICAgfSk7XG5cbiAgICBwYXVzZS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycgLCAoKSA9PiBjb250cm9sKCdwYXVzZScpKTtcbiAgICByZXN1bWUuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiBjb250cm9sKCdyZXN1bWUnKSk7XG4gICAgbG9hZCgpO1xuICAgIHNldEludGVydmFsKGxvYWQsIDIwMDApO1xuICA8L3NjcmlwdD5cbjwvYm9keT5cbjwvaHRtbD5cbiIsImhvc3RfaW52ZW50b3J5LnB5IjoiXCJcIlwiQ29sbGVjdCBob3N0IG9wZXJhdGlvbmFsIGludmVudG9yeSBmb3IgZW5yb2xsbWVudCByZXF1ZXN0cy5cIlwiXCJcbmltcG9ydCBqc29uXG5pbXBvcnQgb3NcbmltcG9ydCBwbGF0Zm9ybVxuaW1wb3J0IHJlXG5pbXBvcnQgc2h1dGlsXG5pbXBvcnQgc29ja2V0XG5pbXBvcnQgc3VicHJvY2Vzc1xuaW1wb3J0IHN5c1xuaW1wb3J0IHRlbXBmaWxlXG5pbXBvcnQgdGltZVxuaW1wb3J0IHVybGxpYi5lcnJvclxuaW1wb3J0IHVybGxpYi5yZXF1ZXN0XG5mcm9tIHBhdGhsaWIgaW1wb3J0IFBhdGhcblxuUFJPQkVfSE9TVCA9ICdzcGVlZC5jbG91ZGZsYXJlLmNvbSdcblBST0JFX1BBVEggPSAnL19fdXAnXG5QUk9CRV9CWVRFUyA9IDIgKiAxMDI0ICogMTAyNFxuUFJPQkVfVElNRU9VVCA9IDEwXG5cblxuZGVmIGNvbW1hbmRfb3V0cHV0KGFyZ3MsIHRpbWVvdXQ9OCk6XG4gICAgdHJ5OlxuICAgICAgICByZXR1cm4gc3VicHJvY2Vzcy5ydW4oYXJncywgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuREVWTlVMTCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9dGltZW91dCwgY2hlY2s9RmFsc2UpLnN0ZG91dC5kZWNvZGUoZXJyb3JzPSdyZXBsYWNlJylcbiAgICBleGNlcHQgKE9TRXJyb3IsIHN1YnByb2Nlc3MuU3VicHJvY2Vzc0Vycm9yKTpcbiAgICAgICAgcmV0dXJuICcnXG5cblxuZGVmIG51bWJlcih2YWx1ZSk6XG4gICAgdHJ5OlxuICAgICAgICBudW1iZXJfdmFsdWUgPSBmbG9hdCh2YWx1ZSlcbiAgICBleGNlcHQgKFR5cGVFcnJvciwgVmFsdWVFcnJvcik6XG4gICAgICAgIHJldHVybiBOb25lXG4gICAgaWYgbm90IG51bWJlcl92YWx1ZSBvciBudW1iZXJfdmFsdWUgPCAwIG9yIG51bWJlcl92YWx1ZSAhPSBudW1iZXJfdmFsdWU6XG4gICAgICAgIHJldHVybiBOb25lXG4gICAgcmV0dXJuIGludChudW1iZXJfdmFsdWUpIGlmIG51bWJlcl92YWx1ZSA9PSBpbnQobnVtYmVyX3ZhbHVlKSBlbHNlIG51bWJlcl92YWx1ZVxuXG5cbmRlZiBob3N0X29zX25hbWUoKTpcbiAgICBzeXN0ZW0gPSBwbGF0Zm9ybS5zeXN0ZW0oKVxuICAgIGlmIHN5c3RlbSA9PSAnRGFyd2luJzpcbiAgICAgICAgcmV0dXJuICdtYWNvcydcbiAgICBpZiBzeXN0ZW0gPT0gJ1dpbmRvd3MnOlxuICAgICAgICByZXR1cm4gJ3dpbmRvd3MnXG4gICAgcmV0dXJuICdsaW51eCdcblxuXG5kZWYgbGludXhfcmVsZWFzZSgpOlxuICAgIHRyeTpcbiAgICAgICAgcmV0dXJuIHBsYXRmb3JtLmZyZWVkZXNrdG9wX29zX3JlbGVhc2UoKVxuICAgIGV4Y2VwdCBPU0Vycm9yOlxuICAgICAgICByZXR1cm4ge31cblxuXG5kZWYgbWVtb3J5X2J5dGVzKCk6XG4gICAgaWYgcGxhdGZvcm0uc3lzdGVtKCkgPT0gJ0Rhcndpbic6XG4gICAgICAgIHJldHVybiBudW1iZXIoY29tbWFuZF9vdXRwdXQoWydzeXNjdGwnLCAnLW4nLCAnaHcubWVtc2l6ZSddKSlcbiAgICBpZiBwbGF0Zm9ybS5zeXN0ZW0oKSA9PSAnV2luZG93cyc6XG4gICAgICAgIHJldHVybiBOb25lXG4gICAgcmV0dXJuIG5leHQoKG51bWJlcihsaW5lLnNwbGl0KClbMV0pICogMTAyNCBmb3IgbGluZSBpbiBQYXRoKCcvcHJvYy9tZW1pbmZvJykucmVhZF90ZXh0KCkuc3BsaXRsaW5lcygpXG4gICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnTWVtVG90YWw6JykpLCBOb25lKVxuXG5cbmRlZiBtZW1pbmZvX3BhZ2VzKCk6XG4gICAgaW5mbyA9IHt9XG4gICAgZm9yIGxpbmUgaW4gUGF0aCgnL3Byb2MvbWVtaW5mbycpLnJlYWRfdGV4dCgpLnNwbGl0bGluZXMoKTpcbiAgICAgICAgcGFydHMgPSBsaW5lLnNwbGl0KClcbiAgICAgICAgaWYgbGVuKHBhcnRzKSA9PSAzOlxuICAgICAgICAgICAgaW5mb1twYXJ0c1swXS5yc3RyaXAoJzonKV0gPSBpbnQocGFydHNbMV0pXG4gICAgcmV0dXJuIGluZm9cblxuXG5kZWYgZGFyd2luX3ZtX3BhZ2VzKCk6XG4gICAgdGV4dCA9IGNvbW1hbmRfb3V0cHV0KFsndm1fc3RhdCddKVxuICAgIHBhZ2VzID0ge31cbiAgICBwYWdlX3NpemUgPSBudW1iZXIoY29tbWFuZF9vdXRwdXQoWydzeXNjdGwnLCAnLW4nLCAnaHcucGFnZXNpemUnXSkpXG4gICAgZm9yIGxpbmUgaW4gdGV4dC5zcGxpdGxpbmVzKCk6XG4gICAgICAgIG1hdGNoID0gcmUubWF0Y2gocidwYWdlIHNpemUgb2YgKFxcZCspIGJ5dGVzJywgbGluZSlcbiAgICAgICAgaWYgbWF0Y2g6XG4gICAgICAgICAgICBwYWdlX3NpemUgPSBpbnQobWF0Y2guZ3JvdXAoMSkpXG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICBrZXksIF8sIHJhdyA9IGxpbmUucGFydGl0aW9uKCc6JylcbiAgICAgICAgZGlnaXRzID0gcmF3LnN0cmlwKCkucnN0cmlwKCcuJylcbiAgICAgICAgaWYgZGlnaXRzLmlzZGlnaXQoKTpcbiAgICAgICAgICAgIHBhZ2VzW2tleS5zdHJpcCgpXSA9IGludChkaWdpdHMpXG4gICAgcmVjbGFpbWFibGUgPSBzdW0ocGFnZXMuZ2V0KG5hbWUsIDApIGZvciBuYW1lIGluIChcbiAgICAgICAgJ1BhZ2VzIGZyZWUnLCAnUGFnZXMgaW5hY3RpdmUnLCAnUGFnZXMgc3BlY3VsYXRpdmUnLCAnUGFnZXMgcHVyZ2VhYmxlJykpXG4gICAgcmV0dXJuIHBhZ2Vfc2l6ZSwgcmVjbGFpbWFibGVcblxuXG5kZWYgYXZhaWxhYmxlX21lbW9yeV9ieXRlcygpOlxuICAgIGlmIHBsYXRmb3JtLnN5c3RlbSgpID09ICdMaW51eCc6XG4gICAgICAgIGluZm8gPSBtZW1pbmZvX3BhZ2VzKClcbiAgICAgICAga2liID0gaW5mby5nZXQoJ01lbUF2YWlsYWJsZScsIGluZm8uZ2V0KCdNZW1GcmVlJykpXG4gICAgICAgIHJldHVybiBraWIgKiAxMDI0IGlmIGtpYiBlbHNlIE5vbmVcbiAgICBpZiBwbGF0Zm9ybS5zeXN0ZW0oKSA9PSAnRGFyd2luJzpcbiAgICAgICAgcGFnZV9zaXplLCByZWNsYWltYWJsZSA9IGRhcndpbl92bV9wYWdlcygpXG4gICAgICAgIHJldHVybiBwYWdlX3NpemUgKiByZWNsYWltYWJsZSBpZiBwYWdlX3NpemUgYW5kIHJlY2xhaW1hYmxlIGVsc2UgTm9uZVxuICAgIHJldHVybiBOb25lXG5cblxuZGVmIGNwdV9pbnZlbnRvcnkoKTpcbiAgICBpZiBwbGF0Zm9ybS5zeXN0ZW0oKSA9PSAnRGFyd2luJzpcbiAgICAgICAgbW9kZWwgPSBjb21tYW5kX291dHB1dChbJ3N5c2N0bCcsICctbicsICdtYWNoZGVwLmNwdS5icmFuZF9zdHJpbmcnXSkuc3RyaXAoKSBvciBOb25lXG4gICAgICAgIGxvZ2ljYWwgPSBudW1iZXIoY29tbWFuZF9vdXRwdXQoWydzeXNjdGwnLCAnLW4nLCAnaHcubG9naWNhbGNwdSddKSlcbiAgICAgICAgcGh5c2ljYWwgPSBudW1iZXIoY29tbWFuZF9vdXRwdXQoWydzeXNjdGwnLCAnLW4nLCAnaHcucGh5c2ljYWxjcHUnXSkpXG4gICAgICAgIHNvY2tldHMgPSBudW1iZXIoY29tbWFuZF9vdXRwdXQoWydzeXNjdGwnLCAnLW4nLCAnaHcucGFja2FnZXMnXSkpXG4gICAgICAgIG1pbl9taHogPSBudW1iZXIoY29tbWFuZF9vdXRwdXQoWydzeXNjdGwnLCAnLW4nLCAnaHcuY3B1ZnJlcXVlbmN5X21pbiddKSlcbiAgICAgICAgbWF4X21oeiA9IG51bWJlcihjb21tYW5kX291dHB1dChbJ3N5c2N0bCcsICctbicsICdody5jcHVmcmVxdWVuY3lfbWF4J10pKVxuICAgICAgICBpZiBtaW5fbWh6OlxuICAgICAgICAgICAgbWluX21oeiAvPSAxXzAwMF8wMDBcbiAgICAgICAgaWYgbWF4X21oejpcbiAgICAgICAgICAgIG1heF9taHogLz0gMV8wMDBfMDAwXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnY3B1X21vZGVsJzogbW9kZWwsXG4gICAgICAgICAgICAnY3B1X3ZlbmRvcic6IG1vZGVsLnNwbGl0KClbMF0gaWYgbW9kZWwgZWxzZSBOb25lLFxuICAgICAgICAgICAgJ2NwdV9zb2NrZXRzJzogc29ja2V0cyxcbiAgICAgICAgICAgICdwaHlzaWNhbF9jcHVfY29yZXMnOiBwaHlzaWNhbCxcbiAgICAgICAgICAgICdsb2dpY2FsX2NwdXMnOiBsb2dpY2FsIG9yIG9zX2NwdV9jb3VudCgpLFxuICAgICAgICAgICAgJ2NwdV9taW5fbWh6JzogbWluX21oeixcbiAgICAgICAgICAgICdjcHVfbWF4X21oeic6IG1heF9taHosXG4gICAgICAgIH1cbiAgICBpZiBwbGF0Zm9ybS5zeXN0ZW0oKSA9PSAnTGludXgnOlxuICAgICAgICBtb2RlbCA9IE5vbmVcbiAgICAgICAgdmVuZG9yID0gTm9uZVxuICAgICAgICB0cnk6XG4gICAgICAgICAgICBmb3IgbGluZSBpbiBQYXRoKCcvcHJvYy9jcHVpbmZvJykucmVhZF90ZXh0KCkuc3BsaXRsaW5lcygpOlxuICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnbW9kZWwgbmFtZScpOlxuICAgICAgICAgICAgICAgICAgICBtb2RlbCA9IGxpbmUuc3BsaXQoJzonLCAxKVsxXS5zdHJpcCgpXG4gICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCd2ZW5kb3JfaWQnKTpcbiAgICAgICAgICAgICAgICAgICAgdmVuZG9yID0gbGluZS5zcGxpdCgnOicsIDEpWzFdLnN0cmlwKClcbiAgICAgICAgZXhjZXB0IE9TRXJyb3I6XG4gICAgICAgICAgICBwYXNzXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnY3B1X21vZGVsJzogbW9kZWwsXG4gICAgICAgICAgICAnY3B1X3ZlbmRvcic6IHZlbmRvcixcbiAgICAgICAgICAgICdjcHVfc29ja2V0cyc6IE5vbmUsXG4gICAgICAgICAgICAncGh5c2ljYWxfY3B1X2NvcmVzJzogTm9uZSxcbiAgICAgICAgICAgICdsb2dpY2FsX2NwdXMnOiBvc19jcHVfY291bnQoKSxcbiAgICAgICAgICAgICdjcHVfbWluX21oeic6IE5vbmUsXG4gICAgICAgICAgICAnY3B1X21heF9taHonOiBOb25lLFxuICAgICAgICB9XG4gICAgcmV0dXJuIHsnbG9naWNhbF9jcHVzJzogb3NfY3B1X2NvdW50KCl9XG5cblxuZGVmIG9zX2NwdV9jb3VudCgpOlxuICAgIHJldHVybiBvcy5jcHVfY291bnQoKSBvciAxXG5cblxuZGVmIGRpc2tfaW52ZW50b3J5X2RhcndpbigpOlxuICAgIGRpc2tzID0gW11cbiAgICBsaXN0aW5nID0gY29tbWFuZF9vdXRwdXQoWydkaXNrdXRpbCcsICdsaXN0JywgJ3BsaXN0J10pXG4gICAgaWYgbm90IGxpc3Rpbmc6XG4gICAgICAgIHJldHVybiBkaXNrc1xuICAgIHRyeTpcbiAgICAgICAgaW1wb3J0IHBsaXN0bGliXG4gICAgICAgIHBheWxvYWQgPSBwbGlzdGxpYi5sb2FkcyhsaXN0aW5nLmVuY29kZSgpKVxuICAgIGV4Y2VwdCAoSW1wb3J0RXJyb3IsIFZhbHVlRXJyb3IsIHBsaXN0bGliLkludmFsaWRGaWxlRXhjZXB0aW9uKTpcbiAgICAgICAgcmV0dXJuIGRpc2tzXG4gICAgZm9yIGluZGV4LCBlbnRyeSBpbiBlbnVtZXJhdGUocGF5bG9hZC5nZXQoJ0FsbERpc2tzQW5kUGFydGl0aW9ucycsIFtdKVs6NjRdKTpcbiAgICAgICAgc2l6ZSA9IG51bWJlcihlbnRyeS5nZXQoJ1NpemUnKSlcbiAgICAgICAgbW9kZWwgPSBlbnRyeS5nZXQoJ0RldmljZUlkZW50aWZpZXInKSBvciBlbnRyeS5nZXQoJ0NvbnRlbnQnLCAnJylcbiAgICAgICAgbWVkaWEgPSAnc3NkJyBpZiBlbnRyeS5nZXQoJ1NvbGlkU3RhdGUnKSBlbHNlICdoZGQnXG4gICAgICAgIGRpc2tzLmFwcGVuZCh7XG4gICAgICAgICAgICAnZGV2aWNlX2tleSc6IGYnZGlzay17aW5kZXh9JyxcbiAgICAgICAgICAgICdtb2RlbCc6IHN0cihtb2RlbClbOjI1NV0sXG4gICAgICAgICAgICAnbWVkaWFfdHlwZSc6IG1lZGlhLFxuICAgICAgICAgICAgJ3RyYW5zcG9ydCc6IE5vbmUsXG4gICAgICAgICAgICAnY2FwYWNpdHlfYnl0ZXMnOiBzaXplLFxuICAgICAgICAgICAgJ3JlbW92YWJsZSc6IGJvb2woZW50cnkuZ2V0KCdSZW1vdmFibGUnKSksXG4gICAgICAgIH0pXG4gICAgcmV0dXJuIGRpc2tzXG5cblxuZGVmIGRpc2tfYnl0ZXNfdG90YWwoKTpcbiAgICBpZiBwbGF0Zm9ybS5zeXN0ZW0oKSA9PSAnRGFyd2luJzpcbiAgICAgICAgdG90YWwgPSAwXG4gICAgICAgIGZvciBkaXNrIGluIGRpc2tfaW52ZW50b3J5X2RhcndpbigpOlxuICAgICAgICAgICAgaWYgZGlzay5nZXQoJ2NhcGFjaXR5X2J5dGVzJyk6XG4gICAgICAgICAgICAgICAgdG90YWwgKz0gZGlza1snY2FwYWNpdHlfYnl0ZXMnXVxuICAgICAgICByZXR1cm4gdG90YWwgb3IgTm9uZVxuICAgIGlmIHBsYXRmb3JtLnN5c3RlbSgpID09ICdMaW51eCc6XG4gICAgICAgIHJldHVybiBzaHV0aWwuZGlza191c2FnZSgnLycpLnRvdGFsXG4gICAgcmV0dXJuIE5vbmVcblxuXG5kZWYgcG93ZXJfaW52ZW50b3J5X2RhcndpbigpOlxuICAgIHRleHQgPSBjb21tYW5kX291dHB1dChbJ3Btc2V0JywgJy1nJywgJ2JhdHQnXSlcbiAgICBhYyA9ICdBQyBQb3dlcicgaW4gdGV4dCBvciBcIk5vdyBkcmF3aW5nIGZyb20gJ0FDIFBvd2VyJ1wiIGluIHRleHRcbiAgICBwZXJjZW50ID0gTm9uZVxuICAgIG1hdGNoID0gcmUuc2VhcmNoKHInKFxcZCspJScsIHRleHQpXG4gICAgaWYgbWF0Y2g6XG4gICAgICAgIHBlcmNlbnQgPSBpbnQobWF0Y2guZ3JvdXAoMSkpXG4gICAgYmF0dGVyeV9wcmVzZW50ID0gJ0ludGVybmFsQmF0dGVyeScgaW4gdGV4dCBvciBwZXJjZW50IGlzIG5vdCBOb25lXG4gICAgcmV0dXJuIHtcbiAgICAgICAgJ2JhdHRlcnlfcHJlc2VudCc6IGJhdHRlcnlfcHJlc2VudCxcbiAgICAgICAgJ2FjX2Nvbm5lY3RlZCc6IGFjLFxuICAgICAgICAnYmF0dGVyeV9wZXJjZW50JzogcGVyY2VudCxcbiAgICAgICAgJ2JhdHRlcnlfc3RhdHVzJzogJ0Rpc2NoYXJnaW5nJyBpZiAnZGlzY2hhcmdpbmcnIGluIHRleHQubG93ZXIoKSBlbHNlIE5vbmUsXG4gICAgICAgICdiYXR0ZXJ5X3JlbWFpbmluZ19zZWNvbmRzJzogTm9uZSxcbiAgICAgICAgJ3Bvd2VyX3Byb2ZpbGUnOiBOb25lLFxuICAgIH1cblxuXG5kZWYgbWFjX21vZGVsKCk6XG4gICAgdGV4dCA9IGNvbW1hbmRfb3V0cHV0KFsnc3lzY3RsJywgJy1uJywgJ2h3Lm1vZGVsJ10pLnN0cmlwKClcbiAgICByZXR1cm4gJ0FwcGxlJywgdGV4dCBvciBOb25lXG5cblxuZGVmIG5ldHdvcmtfaW52ZW50b3J5X2RhcndpbigpOlxuICAgIGludGVyZmFjZXMgPSBbXVxuICAgIHRleHQgPSBjb21tYW5kX291dHB1dChbJ25ldHdvcmtzZXR1cCcsICctbGlzdGFsbGhhcmR3YXJlcG9ydHMnXSlcbiAgICBjdXJyZW50ID0ge31cbiAgICBmb3IgbGluZSBpbiB0ZXh0LnNwbGl0bGluZXMoKTpcbiAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdIYXJkd2FyZSBQb3J0OicpOlxuICAgICAgICAgICAgY3VycmVudCA9IHsnY29ubmVjdGlvbl90eXBlJzogbGluZS5zcGxpdCgnOicsIDEpWzFdLnN0cmlwKCl9XG4gICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCdEZXZpY2U6Jyk6XG4gICAgICAgICAgICBkZXZpY2UgPSBsaW5lLnNwbGl0KCc6JywgMSlbMV0uc3RyaXAoKVxuICAgICAgICAgICAgc3BlZWQgPSBudW1iZXIoY29tbWFuZF9vdXRwdXQoWydpZmNvbmZpZycsIGRldmljZV0pLnNwbGl0KCdtZWRpYTonKVstMV0uc3BsaXQoKVswXS5yZXBsYWNlKCdiYXNlVCcsICcnKSkgaWYgc2h1dGlsLndoaWNoKCdpZmNvbmZpZycpIGVsc2UgTm9uZVxuICAgICAgICAgICAgaW50ZXJmYWNlcy5hcHBlbmQoe1xuICAgICAgICAgICAgICAgICdkZXZpY2Vfa2V5JzogZGV2aWNlLFxuICAgICAgICAgICAgICAgICdjb25uZWN0aW9uX3R5cGUnOiBjdXJyZW50LmdldCgnY29ubmVjdGlvbl90eXBlJyksXG4gICAgICAgICAgICAgICAgJ2xpbmtfc3RhdGUnOiAndXAnLFxuICAgICAgICAgICAgICAgICdzcGVlZF9tYnBzJzogc3BlZWQsXG4gICAgICAgICAgICB9KVxuICAgIHJldHVybiBpbnRlcmZhY2VzWzo2NF1cblxuXG5kZWYgcmVhZGluZXNzX2RhcndpbigpOlxuICAgIGhvbWVicmV3ID0gc2h1dGlsLndoaWNoKCdicmV3JykgaXMgbm90IE5vbmVcbiAgICBoeXBlcnZpc29yX3N1cHBvcnQgPSBjb21tYW5kX291dHB1dChbJ3N5c2N0bCcsICctbicsICdrZXJuLmh2X3N1cHBvcnQnXSkuc3RyaXAoKVxuICAgIHJldHVybiB7XG4gICAgICAgICMgRG9ja2VyIHJ1bnMgaW5zaWRlIHRoZSBMaW1hIGd1ZXN0IGFuZCBpcyBpbnN0YWxsZWQgYWZ0ZXIgYXBwcm92YWwuXG4gICAgICAgICdkb2NrZXInOiBOb25lLFxuICAgICAgICAnc3lzdGVtZF9jZ3JvdXBzX3YyJzogTm9uZSxcbiAgICAgICAgJ3ZpcnR1YWxpemF0aW9uJzogeycwJzogRmFsc2UsICcxJzogVHJ1ZX0uZ2V0KGh5cGVydmlzb3Jfc3VwcG9ydCksXG4gICAgICAgICdob3N0X2h5cGVydmlzb3InOiB7JzAnOiBGYWxzZSwgJzEnOiBUcnVlfS5nZXQoaHlwZXJ2aXNvcl9zdXBwb3J0KSxcbiAgICAgICAgJ2xpbWEnOiBzaHV0aWwud2hpY2goJ2xpbWFjdGwnKSBpcyBub3QgTm9uZSxcbiAgICAgICAgJ2hvbWVicmV3JzogaG9tZWJyZXcsXG4gICAgICAgICd3c2wnOiBOb25lLFxuICAgICAgICAndWJ1bnR1JzogTm9uZSxcbiAgICAgICAgJ3dzbGcnOiBOb25lLFxuICAgICAgICAnc3dhcF9lbmFibGVkJzogRmFsc2UsXG4gICAgICAgICdhZG1pbl9yZXF1aXJlZCc6IG5vdCBob21lYnJldyBhbmQgb3MuZ2V0ZXVpZCgpICE9IDAsXG4gICAgICAgICdyZXN0YXJ0X3JlcXVpcmVkJzogRmFsc2UsXG4gICAgfVxuXG5cbmRlZiBwbGFubmVkX2NhcGFjaXR5X2RhcndpbihtZW1vcnksIGNwdXMpOlxuICAgIGhvc3RfZ2liID0gbWF4KG1lbW9yeSBvciAwLCAxKSAvLyAoMTAyNCAqKiAzKVxuICAgIGdpYiA9IG1heCg0LCBtaW4oMzIsIGhvc3RfZ2liIC8vIDIpKVxuICAgIGlmIGdpYiA+PSBob3N0X2dpYjpcbiAgICAgICAgZ2liID0gbWF4KDIsIGhvc3RfZ2liIC0gMilcbiAgICBjb3JlcyA9IG1heCgyLCBtaW4oOCwgbWF4KGludChjcHVzIG9yIDIpLCAyKSAvLyAyKSlcbiAgICByZXR1cm4geydtZW1vcnlfYnl0ZXMnOiBnaWIgKiAxMDI0ICoqIDMsICdsb2dpY2FsX2NwdXMnOiBjb3JlcywgJ2NpX21lbW9yeV9yZXNlcnZlZF9ieXRlcyc6IE5vbmV9XG5cblxuZGVmIHJlYWRpbmVzc19saW51eCgpOlxuICAgIHN3YXBfdG90YWwgPSAwXG4gICAgdHJ5OlxuICAgICAgICBzd2FwX3RvdGFsID0gbmV4dChpbnQobGluZS5zcGxpdCgpWzFdKSBmb3IgbGluZSBpbiBQYXRoKCcvcHJvYy9tZW1pbmZvJykucmVhZF90ZXh0KCkuc3BsaXRsaW5lcygpIGlmIGxpbmUuc3RhcnRzd2l0aCgnU3dhcFRvdGFsOicpKVxuICAgIGV4Y2VwdCAoU3RvcEl0ZXJhdGlvbiwgVmFsdWVFcnJvciwgT1NFcnJvcik6XG4gICAgICAgIHBhc3NcbiAgICBkb2NrZXJfb2sgPSBGYWxzZVxuICAgIGNncm91cF9vayA9IEZhbHNlXG4gICAgaWYgc2h1dGlsLndoaWNoKCdkb2NrZXInKTpcbiAgICAgICAgaW5mbyA9IGNvbW1hbmRfb3V0cHV0KFsnZG9ja2VyJywgJ2luZm8nLCAnLS1mb3JtYXQnLCAne3suQ2dyb3VwRHJpdmVyfX0ge3suQ2dyb3VwVmVyc2lvbn19J10pXG4gICAgICAgIGRvY2tlcl9vayA9IFRydWVcbiAgICAgICAgY2dyb3VwX29rID0gaW5mby5zdHJpcCgpID09ICdzeXN0ZW1kIDInXG4gICAgcmV0dXJuIHtcbiAgICAgICAgJ2RvY2tlcic6IGRvY2tlcl9vayxcbiAgICAgICAgJ3N5c3RlbWRfY2dyb3Vwc192Mic6IGNncm91cF9vayxcbiAgICAgICAgJ3ZpcnR1YWxpemF0aW9uJzogUGF0aCgnL3J1bi9zeXN0ZW1kL3N5c3RlbScpLmV4aXN0cygpLFxuICAgICAgICAnbGltYSc6IE5vbmUsXG4gICAgICAgICdob21lYnJldyc6IE5vbmUsXG4gICAgICAgICd3c2wnOiBOb25lLFxuICAgICAgICAndWJ1bnR1JzogbGludXhfcmVsZWFzZSgpLmdldCgnSUQnKSA9PSAndWJ1bnR1JyxcbiAgICAgICAgJ3dzbGcnOiBib29sKG9zLmVudmlyb24uZ2V0KCdXQVlMQU5EX0RJU1BMQVknKSBvciBvcy5lbnZpcm9uLmdldCgnRElTUExBWScpKSxcbiAgICAgICAgJ3N3YXBfZW5hYmxlZCc6IHN3YXBfdG90YWwgPiAwLFxuICAgICAgICAnYWRtaW5fcmVxdWlyZWQnOiBvcy5nZXRldWlkKCkgIT0gMCxcbiAgICAgICAgJ3Jlc3RhcnRfcmVxdWlyZWQnOiBGYWxzZSxcbiAgICB9XG5cblxuZGVmIHBsYW5uZWRfY2FwYWNpdHlfbGludXgobWVtb3J5LCBjcHVzLCByZXNlcnZlZD1Ob25lKTpcbiAgICBcIlwiXCJIb3N0IFJBTSBhbmQgdGhlIENJIGNhcC4gVGhlIHNlcnZlciBzdWJ0cmFjdHMgdGhlIGNhcCBhbmQgYSA1MTIgTWlCIHJlc2VydmUgb25jZS5cIlwiXCJcbiAgICBtZW1vcnkgPSBtZW1vcnkgb3IgMFxuICAgIGNwdXMgPSBjcHVzIG9yIDFcbiAgICByZXNlcnZlZCA9IHJlc2VydmVkIG9yIDBcbiAgICByZXR1cm4geydtZW1vcnlfYnl0ZXMnOiBtZW1vcnksICdsb2dpY2FsX2NwdXMnOiBjcHVzLCAnY2lfbWVtb3J5X3Jlc2VydmVkX2J5dGVzJzogcmVzZXJ2ZWQgb3IgTm9uZX1cblxuXG5kZWYgbG9hZF93aW5kb3dzX3NuYXBzaG90KHBhdGgpOlxuICAgIHJldHVybiBqc29uLmxvYWRzKFBhdGgocGF0aCkucmVhZF90ZXh0KCkpXG5cblxuZGVmIGNvbGxlY3Rfd2luZG93cyhwYXRoKTpcbiAgICBzbmFwc2hvdCA9IGxvYWRfd2luZG93c19zbmFwc2hvdChwYXRoKVxuICAgIGhhcmR3YXJlID0gc25hcHNob3QuZ2V0KCdoYXJkd2FyZScsIHt9KVxuICAgIHRlbGVtZXRyeSA9IHNuYXBzaG90LmdldCgndGVsZW1ldHJ5Jywge30pXG4gICAgcmVhZGluZXNzID0gc25hcHNob3QuZ2V0KCdyZWFkaW5lc3MnLCB7fSlcbiAgICBjb25uZWN0aXZpdHkgPSBzbmFwc2hvdC5nZXQoJ2Nvbm5lY3Rpdml0eScsIHt9KVxuICAgIGNhcGFjaXR5ID0gc25hcHNob3QuZ2V0KCdwbGFubmVkX3dvcmtlcl9jYXBhY2l0eScsIHt9KVxuICAgIHJldHVybiBoYXJkd2FyZSwgdGVsZW1ldHJ5LCByZWFkaW5lc3MsIGNvbm5lY3Rpdml0eSwgY2FwYWNpdHlcblxuXG5kZWYgY29sbGVjdF9kYXJ3aW4oKTpcbiAgICBtYW51ZmFjdHVyZXIsIG1vZGVsID0gbWFjX21vZGVsKClcbiAgICByZWxlYXNlID0gbGludXhfcmVsZWFzZSgpIGlmIEZhbHNlIGVsc2Uge31cbiAgICBtZW1vcnkgPSBtZW1vcnlfYnl0ZXMoKVxuICAgIGNwdXMgPSBjcHVfaW52ZW50b3J5KClcbiAgICBoYXJkd2FyZSA9IHtcbiAgICAgICAgJ2hvc3RuYW1lJzogc29ja2V0LmdldGhvc3RuYW1lKCksXG4gICAgICAgICdtYW51ZmFjdHVyZXInOiBtYW51ZmFjdHVyZXIsXG4gICAgICAgICdoYXJkd2FyZV9tb2RlbCc6IG1vZGVsLFxuICAgICAgICAnYXJjaGl0ZWN0dXJlJzogcGxhdGZvcm0ubWFjaGluZSgpLFxuICAgICAgICAnb3NfbmFtZSc6ICdtYWNPUycsXG4gICAgICAgICdvc192ZXJzaW9uJzogcGxhdGZvcm0ubWFjX3ZlcigpWzBdLFxuICAgICAgICAna2VybmVsX3ZlcnNpb24nOiBwbGF0Zm9ybS5yZWxlYXNlKCksXG4gICAgICAgICdtZW1vcnlfYnl0ZXMnOiBtZW1vcnksXG4gICAgICAgICdkaXNrX2J5dGVzJzogZGlza19ieXRlc190b3RhbCgpLFxuICAgICAgICAnbG9naWNhbF9jcHVzJzogY3B1cy5nZXQoJ2xvZ2ljYWxfY3B1cycpLFxuICAgICAgICAqKmNwdXMsXG4gICAgICAgICdkaXNrcyc6IGRpc2tfaW52ZW50b3J5X2RhcndpbigpLFxuICAgICAgICAnbmV0d29ya19pbnRlcmZhY2VzJzogbmV0d29ya19pbnZlbnRvcnlfZGFyd2luKCksXG4gICAgfVxuICAgIHRlbGVtZXRyeSA9IHtcbiAgICAgICAgJ21lbW9yeV9hdmFpbGFibGVfYnl0ZXMnOiBhdmFpbGFibGVfbWVtb3J5X2J5dGVzKCksXG4gICAgICAgICoqcG93ZXJfaW52ZW50b3J5X2RhcndpbigpLFxuICAgIH1cbiAgICByZWFkaW5lc3MgPSByZWFkaW5lc3NfZGFyd2luKClcbiAgICBjb25uZWN0aXZpdHkgPSBwcm9iZV9jb25uZWN0aXZpdHkob3MuZW52aXJvbi5nZXQoJ0RHRV9PUklHSU4nLCAnJykpXG4gICAgY2FwYWNpdHkgPSBwbGFubmVkX2NhcGFjaXR5X2RhcndpbihtZW1vcnksIGhhcmR3YXJlWydsb2dpY2FsX2NwdXMnXSlcbiAgICByZXR1cm4gaGFyZHdhcmUsIHRlbGVtZXRyeSwgcmVhZGluZXNzLCBjb25uZWN0aXZpdHksIGNhcGFjaXR5XG5cblxuZGVmIGNvbGxlY3RfbGludXgoKTpcbiAgICByZWxlYXNlID0gbGludXhfcmVsZWFzZSgpXG4gICAgbWVtb3J5ID0gbWVtb3J5X2J5dGVzKClcbiAgICBjcHVzID0gY3B1X2ludmVudG9yeSgpXG4gICAgcmVzZXJ2ZWQgPSBOb25lXG4gICAgcmVzZXJ2YXRpb24gPSBQYXRoKCcvc3lzL2ZzL2Nncm91cC9jaS5zbGljZS9tZW1vcnkubWF4JylcbiAgICBpZiByZXNlcnZhdGlvbi5leGlzdHMoKTpcbiAgICAgICAgcmF3ID0gcmVzZXJ2YXRpb24ucmVhZF90ZXh0KCkuc3RyaXAoKVxuICAgICAgICByZXNlcnZlZCA9IGludChyYXcpIGlmIHJhdy5pc2RpZ2l0KCkgZWxzZSBOb25lXG4gICAgaGFyZHdhcmUgPSB7XG4gICAgICAgICdob3N0bmFtZSc6IHNvY2tldC5nZXRob3N0bmFtZSgpLFxuICAgICAgICAnbWFudWZhY3R1cmVyJzogcmVhZF90ZXh0KCcvc3lzL2NsYXNzL2RtaS9pZC9zeXNfdmVuZG9yJyksXG4gICAgICAgICdoYXJkd2FyZV9tb2RlbCc6IHJlYWRfdGV4dCgnL3N5cy9jbGFzcy9kbWkvaWQvcHJvZHVjdF9uYW1lJyksXG4gICAgICAgICdhcmNoaXRlY3R1cmUnOiBwbGF0Zm9ybS5tYWNoaW5lKCksXG4gICAgICAgICdvc19uYW1lJzogcmVsZWFzZS5nZXQoJ05BTUUnKSxcbiAgICAgICAgJ29zX3ZlcnNpb24nOiByZWxlYXNlLmdldCgnVkVSU0lPTl9JRCcpLFxuICAgICAgICAna2VybmVsX3ZlcnNpb24nOiBwbGF0Zm9ybS5yZWxlYXNlKCksXG4gICAgICAgICdtZW1vcnlfYnl0ZXMnOiBtZW1vcnksXG4gICAgICAgICdkaXNrX2J5dGVzJzogZGlza19ieXRlc190b3RhbCgpLFxuICAgICAgICAnY2lfbWVtb3J5X3Jlc2VydmVkX2J5dGVzJzogcmVzZXJ2ZWQsXG4gICAgICAgICoqY3B1cyxcbiAgICB9XG4gICAgdGVsZW1ldHJ5ID0geydtZW1vcnlfYXZhaWxhYmxlX2J5dGVzJzogYXZhaWxhYmxlX21lbW9yeV9ieXRlcygpfVxuICAgIHJlYWRpbmVzcyA9IHJlYWRpbmVzc19saW51eCgpXG4gICAgY29ubmVjdGl2aXR5ID0gcHJvYmVfY29ubmVjdGl2aXR5KG9zLmVudmlyb24uZ2V0KCdER0VfT1JJR0lOJywgJycpKVxuICAgIGNhcGFjaXR5ID0gcGxhbm5lZF9jYXBhY2l0eV9saW51eChtZW1vcnksIGhhcmR3YXJlLmdldCgnbG9naWNhbF9jcHVzJyksIHJlc2VydmVkKVxuICAgIHJldHVybiBoYXJkd2FyZSwgdGVsZW1ldHJ5LCByZWFkaW5lc3MsIGNvbm5lY3Rpdml0eSwgY2FwYWNpdHlcblxuXG5kZWYgcmVhZF90ZXh0KHBhdGgpOlxuICAgIHRyeTpcbiAgICAgICAgcmV0dXJuIFBhdGgocGF0aCkucmVhZF90ZXh0KCkuc3RyaXAoKSBvciBOb25lXG4gICAgZXhjZXB0IE9TRXJyb3I6XG4gICAgICAgIHJldHVybiBOb25lXG5cblxuZGVmIHByb2JlX2Nvbm5lY3Rpdml0eShvcmlnaW4pOlxuICAgIHJlc3VsdCA9IHsnc2VydmVyX3JlYWNoYWJsZSc6IEZhbHNlLCAndXBsaW5rX3Byb2JlX29rJzogTm9uZSwgJ3VwbGlua19wcm9iZV9icHMnOiBOb25lfVxuICAgIGlmIG9yaWdpbjpcbiAgICAgICAgdHJ5OlxuICAgICAgICAgICAgcmVxdWVzdCA9IHVybGxpYi5yZXF1ZXN0LlJlcXVlc3Qob3JpZ2luICsgJy91cCcsIG1ldGhvZD0nR0VUJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycz17J25ncm9rLXNraXAtYnJvd3Nlci13YXJuaW5nJzogJzEnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVXNlci1BZ2VudCc6ICdNb3ppbGxhLzUuMCAoWDExOyBMaW51eCB4ODZfNjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMjguMC4wLjAgU2FmYXJpLzUzNy4zNid9KVxuICAgICAgICAgICAgd2l0aCB1cmxsaWIucmVxdWVzdC51cmxvcGVuKHJlcXVlc3QsIHRpbWVvdXQ9MTApIGFzIHJlc3BvbnNlOlxuICAgICAgICAgICAgICAgIHJlc3VsdFsnc2VydmVyX3JlYWNoYWJsZSddID0gcmVzcG9uc2Uuc3RhdHVzID09IDIwMFxuICAgICAgICBleGNlcHQgKHVybGxpYi5lcnJvci5VUkxFcnJvciwgVmFsdWVFcnJvciwgVGltZW91dEVycm9yLCBPU0Vycm9yKTpcbiAgICAgICAgICAgIHJlc3VsdFsnc2VydmVyX3JlYWNoYWJsZSddID0gRmFsc2VcbiAgICBzdGFydGVkID0gdGltZS5tb25vdG9uaWMoKVxuICAgIGJvZHkgPSBiJ1xcMCcgKiBQUk9CRV9CWVRFU1xuICAgIHRyeTpcbiAgICAgICAgcmVxdWVzdCA9IHVybGxpYi5yZXF1ZXN0LlJlcXVlc3QoXG4gICAgICAgICAgICBmJ2h0dHBzOi8ve1BST0JFX0hPU1R9e1BST0JFX1BBVEh9JywgZGF0YT1ib2R5LCBtZXRob2Q9J1BVVCcsXG4gICAgICAgICAgICBoZWFkZXJzPXsnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSd9KVxuICAgICAgICB3aXRoIHVybGxpYi5yZXF1ZXN0LnVybG9wZW4ocmVxdWVzdCwgdGltZW91dD1QUk9CRV9USU1FT1VUKSBhcyByZXNwb25zZTpcbiAgICAgICAgICAgIHJlc3BvbnNlLnJlYWQoKVxuICAgICAgICAgICAgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzXG4gICAgICAgIGVsYXBzZWQgPSBtYXgodGltZS5tb25vdG9uaWMoKSAtIHN0YXJ0ZWQsIDAuMDAxKVxuICAgICAgICByZXN1bHRbJ3VwbGlua19wcm9iZV9vayddID0gc3RhdHVzIGluICgyMDAsIDQwMylcbiAgICAgICAgcmVzdWx0Wyd1cGxpbmtfcHJvYmVfYnBzJ10gPSBpbnQoUFJPQkVfQllURVMgLyBlbGFwc2VkKSBpZiByZXN1bHRbJ3VwbGlua19wcm9iZV9vayddIGVsc2UgMFxuICAgIGV4Y2VwdCB1cmxsaWIuZXJyb3IuSFRUUEVycm9yIGFzIGVycm9yOlxuICAgICAgICBlbGFwc2VkID0gbWF4KHRpbWUubW9ub3RvbmljKCkgLSBzdGFydGVkLCAwLjAwMSlcbiAgICAgICAgcmVzdWx0Wyd1cGxpbmtfcHJvYmVfb2snXSA9IGVycm9yLmNvZGUgPT0gNDAzXG4gICAgICAgIHJlc3VsdFsndXBsaW5rX3Byb2JlX2JwcyddID0gaW50KFBST0JFX0JZVEVTIC8gZWxhcHNlZCkgaWYgcmVzdWx0Wyd1cGxpbmtfcHJvYmVfb2snXSBlbHNlIDBcbiAgICBleGNlcHQgKHVybGxpYi5lcnJvci5VUkxFcnJvciwgVGltZW91dEVycm9yLCBPU0Vycm9yKTpcbiAgICAgICAgcmVzdWx0Wyd1cGxpbmtfcHJvYmVfb2snXSA9IEZhbHNlXG4gICAgICAgIHJlc3VsdFsndXBsaW5rX3Byb2JlX2JwcyddID0gMFxuICAgIHJldHVybiByZXN1bHRcblxuXG5kZWYgY29sbGVjdChvcmlnaW49JycsIHdpbmRvd3Nfc25hcHNob3Q9Tm9uZSk6XG4gICAgaWYgd2luZG93c19zbmFwc2hvdDpcbiAgICAgICAgaGFyZHdhcmUsIHRlbGVtZXRyeSwgcmVhZGluZXNzLCBjb25uZWN0aXZpdHksIGNhcGFjaXR5ID0gY29sbGVjdF93aW5kb3dzKHdpbmRvd3Nfc25hcHNob3QpXG4gICAgZWxpZiBwbGF0Zm9ybS5zeXN0ZW0oKSA9PSAnRGFyd2luJzpcbiAgICAgICAgb3MuZW52aXJvblsnREdFX09SSUdJTiddID0gb3JpZ2luXG4gICAgICAgIGhhcmR3YXJlLCB0ZWxlbWV0cnksIHJlYWRpbmVzcywgY29ubmVjdGl2aXR5LCBjYXBhY2l0eSA9IGNvbGxlY3RfZGFyd2luKClcbiAgICBlbHNlOlxuICAgICAgICBvcy5lbnZpcm9uWydER0VfT1JJR0lOJ10gPSBvcmlnaW5cbiAgICAgICAgaGFyZHdhcmUsIHRlbGVtZXRyeSwgcmVhZGluZXNzLCBjb25uZWN0aXZpdHksIGNhcGFjaXR5ID0gY29sbGVjdF9saW51eCgpXG4gICAgcmV0dXJuIHtcbiAgICAgICAgJ2hvc3Rfb3MnOiBob3N0X29zX25hbWUoKSxcbiAgICAgICAgJ2hvc3RfaW52ZW50b3J5Jzoge1xuICAgICAgICAgICAgJ2hhcmR3YXJlJzogaGFyZHdhcmUsXG4gICAgICAgICAgICAndGVsZW1ldHJ5JzogdGVsZW1ldHJ5LFxuICAgICAgICAgICAgJ3JlYWRpbmVzcyc6IHJlYWRpbmVzcyxcbiAgICAgICAgICAgICdjb25uZWN0aXZpdHknOiBjb25uZWN0aXZpdHksXG4gICAgICAgIH0sXG4gICAgICAgICdwbGFubmVkX3dvcmtlcl9jYXBhY2l0eSc6IGNhcGFjaXR5LFxuICAgIH1cblxuXG5pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOlxuICAgIHNuYXBzaG90ID0gc3lzLmFyZ3ZbMV0gaWYgbGVuKHN5cy5hcmd2KSA+IDEgZWxzZSBOb25lXG4gICAgcHJpbnQoanNvbi5kdW1wcyhjb2xsZWN0KG9zLmVudmlyb24uZ2V0KCdER0VfT1JJR0lOJywgJycpLCBzbmFwc2hvdCksIGluZGVudD0yKSlcbiIsImhvc3RfaW52ZW50b3J5LnBzMSI6IiRFcnJvckFjdGlvblByZWZlcmVuY2UgPSAnU3RvcCdcblxuZnVuY3Rpb24gUmVhZE51bWJlcihbb2JqZWN0XSRWYWx1ZSkge1xuICBpZiAoJG51bGwgLWVxICRWYWx1ZSkgeyByZXR1cm4gJG51bGwgfVxuICAkcGFyc2VkID0gMC4wXG4gIGlmIChbZG91YmxlXTo6VHJ5UGFyc2UoW3N0cmluZ10kVmFsdWUsIFtyZWZdJHBhcnNlZCkgLWFuZCAkcGFyc2VkIC1nZSAwKSB7XG4gICAgcmV0dXJuIFtpbnQ2NF0kcGFyc2VkXG4gIH1cbiAgcmV0dXJuICRudWxsXG59XG5cbiRjb21wdXRlciA9IEdldC1DaW1JbnN0YW5jZSBXaW4zMl9Db21wdXRlclN5c3RlbVxuJG9zID0gR2V0LUNpbUluc3RhbmNlIFdpbjMyX09wZXJhdGluZ1N5c3RlbVxuJGNwdXMgPSBHZXQtQ2ltSW5zdGFuY2UgV2luMzJfUHJvY2Vzc29yXG4kbG9naWNhbCA9ICgkY3B1cyB8IE1lYXN1cmUtT2JqZWN0IC1Qcm9wZXJ0eSBOdW1iZXJPZkxvZ2ljYWxQcm9jZXNzb3JzIC1TdW0pLlN1bVxuJHBoeXNpY2FsID0gKCRjcHVzIHwgTWVhc3VyZS1PYmplY3QgLVByb3BlcnR5IE51bWJlck9mQ29yZXMgLVN1bSkuU3VtXG4kbWVtb3J5ID0gUmVhZE51bWJlcigkY29tcHV0ZXIuVG90YWxQaHlzaWNhbE1lbW9yeSlcbiRmcmVlID0gUmVhZE51bWJlcigkb3MuRnJlZVBoeXNpY2FsTWVtb3J5KVxuaWYgKCRmcmVlKSB7ICRmcmVlID0gJGZyZWUgKiAxMDI0IH1cblxuJGRpc2tzID0gQChHZXQtUGh5c2ljYWxEaXNrIHwgU2VsZWN0LU9iamVjdCAtRmlyc3QgNjQgfCBGb3JFYWNoLU9iamVjdCB7XG4gIEB7XG4gICAgZGV2aWNlX2tleSA9ICRfLkRldmljZUlkXG4gICAgbW9kZWwgPSAkXy5GcmllbmRseU5hbWVcbiAgICBtZWRpYV90eXBlID0gaWYgKCRfLk1lZGlhVHlwZSAtZXEgJ1NTRCcpIHsgJ3NzZCcgfSBlbHNlaWYgKCRfLk1lZGlhVHlwZSAtZXEgJ0hERCcpIHsgJ2hkZCcgfSBlbHNlIHsgJG51bGwgfVxuICAgIHRyYW5zcG9ydCA9ICRfLkJ1c1R5cGVcbiAgICBjYXBhY2l0eV9ieXRlcyA9IFJlYWROdW1iZXIoJF8uU2l6ZSlcbiAgICByZW1vdmFibGUgPSBbYm9vbF0kXy5Jc1JlbW92YWJsZVxuICB9XG59KVxuXG4kaW50ZXJmYWNlcyA9IEAoR2V0LU5ldEFkYXB0ZXIgfCBTZWxlY3QtT2JqZWN0IC1GaXJzdCA2NCB8IEZvckVhY2gtT2JqZWN0IHtcbiAgQHtcbiAgICBkZXZpY2Vfa2V5ID0gJF8uTmFtZVxuICAgIGNvbm5lY3Rpb25fdHlwZSA9ICRfLkludGVyZmFjZURlc2NyaXB0aW9uXG4gICAgbGlua19zdGF0ZSA9ICRfLlN0YXR1c1xuICAgIHNwZWVkX21icHMgPSBpZiAoJF8uTGlua1NwZWVkKSB7IFtpbnRdKCRfLkxpbmtTcGVlZCAvIDEwMDAwMDApIH0gZWxzZSB7ICRudWxsIH1cbiAgfVxufSlcblxuJGJhdHRlcnkgPSBHZXQtQ2ltSW5zdGFuY2UgV2luMzJfQmF0dGVyeSAtRXJyb3JBY3Rpb24gU2lsZW50bHlDb250aW51ZSB8IFNlbGVjdC1PYmplY3QgLUZpcnN0IDFcbiRwb3dlciA9IEdldC1DaW1JbnN0YW5jZSBCYXR0ZXJ5U3RhdHVzIC1OYW1lc3BhY2Ugcm9vdC9XTUkgLUVycm9yQWN0aW9uIFNpbGVudGx5Q29udGludWUgfCBTZWxlY3QtT2JqZWN0IC1GaXJzdCAxXG5cbiR3c2wgPSBHZXQtQ29tbWFuZCB3c2wuZXhlIC1FcnJvckFjdGlvbiBTaWxlbnRseUNvbnRpbnVlXG4kZGlzdHJvcyA9IEAoKVxuaWYgKCR3c2wpIHtcbiAgJHJhdyA9ICYgd3NsLmV4ZSAtbCAtcSAyPiRudWxsXG4gIGlmICgkcmF3KSB7XG4gICAgJHRleHQgPSBpZiAoJHJhdyAtaXMgW2FycmF5XSkgeyAkcmF3IC1qb2luIFwiYG5cIiB9IGVsc2UgeyBbc3RyaW5nXSRyYXcgfVxuICAgICRkaXN0cm9zID0gQCgkdGV4dCAtcmVwbGFjZSBcImAwXCIsICcnIC1zcGxpdCBcImByP2BuXCIgfCBGb3JFYWNoLU9iamVjdCB7ICRfLlRyaW0oKSB9IHwgV2hlcmUtT2JqZWN0IHsgJF8gfSlcbiAgfVxufVxuXG4kd3NsTWVtb3J5ID0gJG51bGxcbiR3c2xDcHVzID0gJG51bGxcbiRjb25maWcgPSBKb2luLVBhdGggJGVudjpVU0VSUFJPRklMRSAnLndzbGNvbmZpZydcbmlmIChUZXN0LVBhdGggJGNvbmZpZykge1xuICBmb3JlYWNoICgkbGluZSBpbiBHZXQtQ29udGVudCAkY29uZmlnKSB7XG4gICAgaWYgKCRsaW5lIC1tYXRjaCAnXlxccyptZW1vcnlcXHMqPVxccyooXFxkKylHQicpIHsgJHdzbE1lbW9yeSA9IFtpbnQ2NF0kTWF0Y2hlc1sxXSAqIDFHQiB9XG4gICAgaWYgKCRsaW5lIC1tYXRjaCAnXlxccypwcm9jZXNzb3JzXFxzKj1cXHMqKFxcZCspJykgeyAkd3NsQ3B1cyA9IFtpbnRdJE1hdGNoZXNbMV0gfVxuICB9XG59XG5pZiAoLW5vdCAkd3NsTWVtb3J5KSB7XG4gICRob3N0R2lCID0gW01hdGhdOjpNYXgoW2ludF0oJG1lbW9yeSAvIDFHQiksIDEpXG4gICRndWVzdEdpQiA9IFtNYXRoXTo6TWF4KDQsIFtNYXRoXTo6TWluKDE2LCBbaW50XSgkaG9zdEdpQiAvIDIpKSlcbiAgJHdzbE1lbW9yeSA9IFtpbnQ2NF0kZ3Vlc3RHaUIgKiAxR0Jcbn1cbmlmICgtbm90ICR3c2xDcHVzKSB7XG4gICR3c2xDcHVzID0gW01hdGhdOjpNYXgoMiwgW01hdGhdOjpNaW4oOCwgW2ludF0oJGxvZ2ljYWwgLyAyKSkpXG59XG5cbiRwYXlsb2FkID0gQHtcbiAgaGFyZHdhcmUgPSBAe1xuICAgIGhvc3RuYW1lID0gJGVudjpDT01QVVRFUk5BTUVcbiAgICBtYW51ZmFjdHVyZXIgPSAkY29tcHV0ZXIuTWFudWZhY3R1cmVyXG4gICAgaGFyZHdhcmVfbW9kZWwgPSAkY29tcHV0ZXIuTW9kZWxcbiAgICBhcmNoaXRlY3R1cmUgPSAkZW52OlBST0NFU1NPUl9BUkNISVRFQ1RVUkVcbiAgICBvc19uYW1lID0gJ1dpbmRvd3MnXG4gICAgb3NfdmVyc2lvbiA9ICRvcy5WZXJzaW9uXG4gICAga2VybmVsX3ZlcnNpb24gPSAkb3MuQnVpbGROdW1iZXJcbiAgICBjcHVfbW9kZWwgPSAoJGNwdXMgfCBTZWxlY3QtT2JqZWN0IC1GaXJzdCAxKS5OYW1lXG4gICAgY3B1X3ZlbmRvciA9ICgkY3B1cyB8IFNlbGVjdC1PYmplY3QgLUZpcnN0IDEpLk1hbnVmYWN0dXJlclxuICAgIGNwdV9zb2NrZXRzID0gKCRjcHVzIHwgTWVhc3VyZS1PYmplY3QpLkNvdW50XG4gICAgcGh5c2ljYWxfY3B1X2NvcmVzID0gJHBoeXNpY2FsXG4gICAgbG9naWNhbF9jcHVzID0gJGxvZ2ljYWxcbiAgICBtZW1vcnlfYnl0ZXMgPSAkbWVtb3J5XG4gICAgZGlza19ieXRlcyA9IChHZXQtQ2ltSW5zdGFuY2UgV2luMzJfTG9naWNhbERpc2sgLUZpbHRlciBcIkRyaXZlVHlwZT0zXCIgfCBNZWFzdXJlLU9iamVjdCBTaXplIC1TdW0pLlN1bVxuICAgIGRpc2tzID0gJGRpc2tzXG4gICAgbmV0d29ya19pbnRlcmZhY2VzID0gJGludGVyZmFjZXNcbiAgfVxuICB0ZWxlbWV0cnkgPSBAe1xuICAgIG1lbW9yeV9hdmFpbGFibGVfYnl0ZXMgPSAkZnJlZVxuICAgIGJhdHRlcnlfcHJlc2VudCA9IFtib29sXSRiYXR0ZXJ5XG4gICAgYWNfY29ubmVjdGVkID0gaWYgKCRwb3dlcikgeyAkcG93ZXIuUG93ZXJPbmxpbmUgLWVxIDEgfSBlbHNlIHsgJG51bGwgfVxuICAgIGJhdHRlcnlfcGVyY2VudCA9IGlmICgkYmF0dGVyeSkgeyBbaW50XSRiYXR0ZXJ5LkVzdGltYXRlZENoYXJnZVJlbWFpbmluZyB9IGVsc2UgeyAkbnVsbCB9XG4gICAgYmF0dGVyeV9zdGF0dXMgPSAkYmF0dGVyeS5TdGF0dXNcbiAgICBiYXR0ZXJ5X3JlbWFpbmluZ19zZWNvbmRzID0gJG51bGxcbiAgICBwb3dlcl9wcm9maWxlID0gJG51bGxcbiAgfVxuICByZWFkaW5lc3MgPSBAe1xuICAgIGRvY2tlciA9ICRmYWxzZVxuICAgIHN5c3RlbWRfY2dyb3Vwc192MiA9ICRudWxsXG4gICAgdmlydHVhbGl6YXRpb24gPSBbYm9vbF0kd3NsXG4gICAgbGltYSA9ICRmYWxzZVxuICAgIGhvbWVicmV3ID0gJGZhbHNlXG4gICAgd3NsID0gW2Jvb2xdJHdzbFxuICAgIHVidW50dSA9IEAoJ1VidW50dScsICdVYnVudHUtMjQuMDQnLCAnVWJ1bnR1LTIyLjA0JykgfCBXaGVyZS1PYmplY3QgeyAkZGlzdHJvcyAtY29udGFpbnMgJF8gfSB8IFNlbGVjdC1PYmplY3QgLUZpcnN0IDFcbiAgICB3c2xnID0gJHRydWVcbiAgICBzd2FwX2VuYWJsZWQgPSAkZmFsc2VcbiAgICBhZG1pbl9yZXF1aXJlZCA9ICRmYWxzZVxuICAgIHJlc3RhcnRfcmVxdWlyZWQgPSAkZmFsc2VcbiAgfVxuICBjb25uZWN0aXZpdHkgPSBAe1xuICAgIHNlcnZlcl9yZWFjaGFibGUgPSAkbnVsbFxuICAgIHVwbGlua19wcm9iZV9vayA9ICRudWxsXG4gICAgdXBsaW5rX3Byb2JlX2JwcyA9ICRudWxsXG4gIH1cbiAgcGxhbm5lZF93b3JrZXJfY2FwYWNpdHkgPSBAe1xuICAgIG1lbW9yeV9ieXRlcyA9ICR3c2xNZW1vcnlcbiAgICBsb2dpY2FsX2NwdXMgPSAkd3NsQ3B1c1xuICAgIGNpX21lbW9yeV9yZXNlcnZlZF9ieXRlcyA9ICRudWxsXG4gIH1cbn1cblxuJHBheWxvYWQgfCBDb252ZXJ0VG8tSnNvbiAtRGVwdGggNiAtQ29tcHJlc3NcbiIsInNldHVwLnB5IjoiIyEvdXNyL2Jpbi9lbnYgcHl0aG9uM1xuXCJcIlwiSWRlbXBvdGVudCBMaW51eC9zeXN0ZW1kIGluc3RhbGxlcjsgcnVuIGZyb20gdGhlIHdvcmtlciBzZXR1cCBidW5kbGUuXG5UaGUgZW5yb2xsbWVudCB0b2tlbiBpcyByZWFkIHdpdGhvdXQgZWNoby4gUmUtcnVubmluZyBwcmVzZXJ2ZXMgZW5yb2xsbWVudFxuYW5kIGEgcmVsZWFzZSBvZiB0aGlzIHByb2plY3QncyB3b3JrZXIgaW1hZ2UuIEEgcmVsZWFzZSBmcm9tIGFub3RoZXJcbnJlcG9zaXRvcnkgaXMgcmV0dXJuZWQgdG8gdGhlIGJvb3RzdHJhcCBzbyB0aGUgYXNzaWduZWQgaW1hZ2UgY2FuIHJlcGxhY2UgaXQuXG5ObyB0YXNrIGRhdGEgaXMgd3JpdHRlbiB1bmRlciAvb3B0L2RnZS13b3JrZXIuXG5cIlwiXCJcbmltcG9ydCBhcmdwYXJzZVxuaW1wb3J0IGdldHBhc3NcbmltcG9ydCBqc29uXG5pbXBvcnQgb3NcbmZyb20gcGF0aGxpYiBpbXBvcnQgUGF0aFxuaW1wb3J0IHNobGV4XG5pbXBvcnQgc2h1dGlsXG5pbXBvcnQgc3VicHJvY2Vzc1xuaW1wb3J0IHN5c1xuaW1wb3J0IHVybGxpYi5wYXJzZVxuXG5cbkNPTVBVVEVfSU1BR0VfUkVQT1NJVE9SWSA9ICdyZWdpc3RyeS5naXRsYWIuY29tL2Rvcmlhbi1ncmF5LWVudGVycHJpc2VzL2NvbXB1dGUvY29tcHV0ZS13b3JrZXInXG5cblxuZGVmIHJlbGVhc2VfaW1hZ2UocG9pbnRlcik6XG4gICAgdHJ5OlxuICAgICAgICByZWxlYXNlID0gUGF0aChqc29uLmxvYWRzKHBvaW50ZXIucmVhZF90ZXh0KCkpKVxuICAgICAgICBpbWFnZSA9IGpzb24ubG9hZHMoKHJlbGVhc2UgLyAnY29uZmlnLmpzb24nKS5yZWFkX3RleHQoKSkuZ2V0KCdpbWFnZScpIG9yICcnXG4gICAgZXhjZXB0IChPU0Vycm9yLCBqc29uLkpTT05EZWNvZGVFcnJvciwgVHlwZUVycm9yLCBBdHRyaWJ1dGVFcnJvcik6XG4gICAgICAgIHJldHVybiAnJ1xuICAgIHJldHVybiBzdHIoaW1hZ2UpXG5cblxuZGVmIGVuc3VyZV9jdXJyZW50X3JlbGVhc2Uocm9vdCwgYm9vdHN0cmFwKTpcbiAgICBcIlwiXCJLZWVwIGEgY29tcHV0ZS1yZXBvc2l0b3J5IHJlbGVhc2UuIFBvaW50IGFueSBvdGhlciByZWxlYXNlIGF0IHRoZSBib290c3RyYXAuXCJcIlwiXG4gICAgcG9pbnRlciA9IHJvb3QgLyAnY3VycmVudC5qc29uJ1xuICAgIGlmIHBvaW50ZXIuZXhpc3RzKCkgYW5kIHJlbGVhc2VfaW1hZ2UocG9pbnRlcikuc3RhcnRzd2l0aChDT01QVVRFX0lNQUdFX1JFUE9TSVRPUlkgKyAnQCcpOlxuICAgICAgICByZXR1cm5cbiAgICBpZiBwb2ludGVyLmV4aXN0cygpOlxuICAgICAgICB0cnk6XG4gICAgICAgICAgICBpZiBqc29uLmxvYWRzKHBvaW50ZXIucmVhZF90ZXh0KCkpID09IHN0cihib290c3RyYXApOlxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICBleGNlcHQgKE9TRXJyb3IsIGpzb24uSlNPTkRlY29kZUVycm9yLCBUeXBlRXJyb3IpOlxuICAgICAgICAgICAgcGFzc1xuICAgIHBvaW50ZXIud3JpdGVfdGV4dChqc29uLmR1bXBzKHN0cihib290c3RyYXApKSlcbiAgICBwb2ludGVyLmNobW9kKDBvNjAwKVxuXG5cbmRlZiBydW4oKmFyZ3MpOlxuICAgIHByaW50KCckICcgKyBzaGxleC5qb2luKHN0cihpdGVtKSBmb3IgaXRlbSBpbiBhcmdzKSwgZmx1c2g9VHJ1ZSlcbiAgICB0cnk6XG4gICAgICAgIHJldHVybiBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChhcmdzLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpLmRlY29kZSgpLnN0cmlwKClcbiAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZXJyb3I6XG4gICAgICAgIG91dHB1dCA9IGVycm9yLm91dHB1dC5kZWNvZGUoKS5zdHJpcCgpIGlmIGVycm9yLm91dHB1dCBlbHNlICcnXG4gICAgICAgIGlmIG91dHB1dDpcbiAgICAgICAgICAgIHByaW50KG91dHB1dCwgZmx1c2g9VHJ1ZSlcbiAgICAgICAgcmFpc2VcblxuXG5kZWYgbWFpbigpOlxuICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKClcbiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLW9yaWdpbicpXG4gICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1lbnJvbGxtZW50LWZpbGUnLCBkZWZhdWx0PSdlbnJvbGxtZW50Lmpzb24nKVxuICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpXG4gICAgZW5yb2xsbWVudF9wYXRoID0gUGF0aChhcmdzLmVucm9sbG1lbnRfZmlsZSlcbiAgICBlbnJvbGxtZW50ID0ganNvbi5sb2FkcyhlbnJvbGxtZW50X3BhdGgucmVhZF90ZXh0KCkpIGlmIGVucm9sbG1lbnRfcGF0aC5leGlzdHMoKSBlbHNlIHt9XG4gICAgYXJncy5vcmlnaW4gPSBhcmdzLm9yaWdpbiBvciBlbnJvbGxtZW50LmdldCgnb3JpZ2luJywgJycpXG4gICAgb3JpZ2luID0gdXJsbGliLnBhcnNlLnVybHNwbGl0KGFyZ3Mub3JpZ2luKVxuICAgIGxvY2FsID0gb3JpZ2luLmhvc3RuYW1lIGluICgnMTI3LjAuMC4xJywgJ2xvY2FsaG9zdCcsICc6OjEnKVxuICAgIGh0dHBzX29rID0gb3JpZ2luLnNjaGVtZSA9PSAnaHR0cHMnIGFuZCBub3Qgb3JpZ2luLnBhdGggYW5kIG5vdCBvcmlnaW4ucXVlcnkgYW5kIG5vdCBvcmlnaW4uZnJhZ21lbnRcbiAgICBodHRwX2xvY2FsX29rID0gb3JpZ2luLnNjaGVtZSA9PSAnaHR0cCcgYW5kIGxvY2FsIGFuZCBub3Qgb3JpZ2luLnBhdGggYW5kIG5vdCBvcmlnaW4ucXVlcnkgYW5kIG5vdCBvcmlnaW4uZnJhZ21lbnRcbiAgICBpZiBub3QgaHR0cHNfb2sgYW5kIG5vdCBodHRwX2xvY2FsX29rOlxuICAgICAgICBwYXJzZXIuZXJyb3IoJ1VzZSBhbiBIVFRQUyBvcmlnaW4gd2l0aG91dCBhIHBhdGgnKVxuICAgIGlmIG9zLmdldGV1aWQoKSAhPSAwIG9yIHN5cy52ZXJzaW9uX2luZm8gPCAoMywgMTEpOlxuICAgICAgICBwYXJzZXIuZXJyb3IoJ1J1biBhcyByb290IG9uIExpbnV4IHdpdGggUHl0aG9uIDMuMTEgb3IgbmV3ZXInKVxuICAgIGlmIHJ1bignZG9ja2VyJywgJ2luZm8nLCAnLS1mb3JtYXQnLCAne3suQ2dyb3VwRHJpdmVyfX0ge3suQ2dyb3VwVmVyc2lvbn19JykgIT0gJ3N5c3RlbWQgMic6XG4gICAgICAgIHBhcnNlci5lcnJvcignRG9ja2VyIG11c3QgdXNlIHN5c3RlbWQgY2dyb3VwcyB2MicpXG4gICAgcm9vdCA9IFBhdGgoJy9vcHQvZGdlLXdvcmtlcicpXG4gICAgcHJpbnQoJyQgbWtkaXIgLXAgLW0gNzAwIC9vcHQvZGdlLXdvcmtlciAvb3B0L2RnZS13b3JrZXIvYm9vdHN0cmFwJywgZmx1c2g9VHJ1ZSlcbiAgICByb290Lm1rZGlyKG1vZGU9MG83MDAsIGV4aXN0X29rPVRydWUpXG4gICAgb3MuY2htb2Qocm9vdCwgMG83MDApXG4gICAgc291cmNlID0gUGF0aChfX2ZpbGVfXykucmVzb2x2ZSgpLnBhcmVudFxuICAgIGJvb3RzdHJhcCA9IHJvb3QgLyAnYm9vdHN0cmFwJ1xuICAgIGJvb3RzdHJhcC5ta2Rpcihtb2RlPTBvNzAwLCBleGlzdF9vaz1UcnVlKVxuICAgIHByaW50KCckIGNwIGxhdW5jaGVyLnB5IC9vcHQvZGdlLXdvcmtlci9sYXVuY2hlci5weScsIGZsdXNoPVRydWUpXG4gICAgc2h1dGlsLmNvcHlmaWxlKHNvdXJjZSAvICdsYXVuY2hlci5weScsIHJvb3QgLyAnbGF1bmNoZXIucHknKVxuICAgIGlmIChzb3VyY2UgLyAndW5pbnN0YWxsLnB5JykuZXhpc3RzKCk6XG4gICAgICAgIHNodXRpbC5jb3B5ZmlsZShzb3VyY2UgLyAndW5pbnN0YWxsLnB5Jywgcm9vdCAvICd1bmluc3RhbGwucHknKVxuICAgIHByaW50KCckIGNwIGFnZW50LnB5IC9vcHQvZGdlLXdvcmtlci9ib290c3RyYXAvYWdlbnQucHknLCBmbHVzaD1UcnVlKVxuICAgIHNodXRpbC5jb3B5ZmlsZShzb3VyY2UgLyAnYWdlbnQucHknLCBib290c3RyYXAgLyAnYWdlbnQucHknKVxuICAgIGlkZW50aXR5ID0gcm9vdCAvICdpZGVudGl0eS5qc29uJ1xuICAgIGlmIG5vdCBpZGVudGl0eS5leGlzdHMoKTpcbiAgICAgICAgdG9rZW4gPSBlbnJvbGxtZW50LmdldCgndG9rZW4nKSBvciBnZXRwYXNzLmdldHBhc3MoJ1dvcmtlciBlbnJvbGxtZW50IHRva2VuIChoaWRkZW4pOiAnKVxuICAgICAgICBpZiBub3QgdG9rZW46XG4gICAgICAgICAgICBwYXJzZXIuZXJyb3IoJ0Vucm9sbG1lbnQgdG9rZW4gaXMgcmVxdWlyZWQnKVxuICAgICAgICBpZGVudGl0eS53cml0ZV90ZXh0KGpzb24uZHVtcHMoZGljdChvcmlnaW49YXJncy5vcmlnaW4sIHRva2VuPXRva2VuKSkpXG4gICAgICAgIGlkZW50aXR5LmNobW9kKDBvNjAwKVxuICAgIGVsaWYganNvbi5sb2FkcyhpZGVudGl0eS5yZWFkX3RleHQoKSlbJ29yaWdpbiddICE9IGFyZ3Mub3JpZ2luOlxuICAgICAgICBwYXJzZXIuZXJyb3IoJ0V4aXN0aW5nIGVucm9sbG1lbnQgdXNlcyBhIGRpZmZlcmVudCBvcmlnaW4nKVxuICAgIGVuc3VyZV9jdXJyZW50X3JlbGVhc2Uocm9vdCwgYm9vdHN0cmFwKVxuICAgIHNjcmF0Y2ggPSBQYXRoKCcvcnVuL2RnZS13b3JrZXIvdGFza3MnKVxuICAgIHNjcmF0Y2gubWtkaXIocGFyZW50cz1UcnVlLCBleGlzdF9vaz1UcnVlKVxuICAgIGlmIG5vdCBvcy5wYXRoLmlzbW91bnQoc2NyYXRjaCk6XG4gICAgICAgIHJ1bignbW91bnQnLCAnLXQnLCAndG1wZnMnLCAnLW8nLCAnc2l6ZT0yNTZtLG1vZGU9MDcwMCxub3N1aWQsbm9kZXYsbm9leGVjJywgJ3RtcGZzJywgc3RyKHNjcmF0Y2gpKVxuICAgIHVuaXRfcm9vdCA9IFBhdGgoJy9ldGMvc3lzdGVtZC9zeXN0ZW0nKVxuICAgICMgUHJlc2VydmUgQ0kncyBhbHJlYWR5IHByb3Zpc2lvbmVkIGNvbXB1dGUuc2xpY2UgbWVtb3J5IGJ1ZGdldC5cbiAgICBjb21wdXRlX3NsaWNlID0gdW5pdF9yb290IC8gJ2NvbXB1dGUuc2xpY2UnXG4gICAgaWYgbm90IGNvbXB1dGVfc2xpY2UuZXhpc3RzKCk6XG4gICAgICAgIGNvbXB1dGVfc2xpY2Uud3JpdGVfdGV4dCgnW1NsaWNlXVxcbkNQVVdlaWdodD0xMFxcbklPV2VpZ2h0PTEwXFxuTWVtb3J5U3dhcE1heD0wXFxuJylcbiAgICBwcmludCgnJCBjYXQgPiAvZXRjL3N5c3RlbWQvc3lzdGVtL2RnZS13b3JrZXIuc2VydmljZScsIGZsdXNoPVRydWUpXG4gICAgKHVuaXRfcm9vdCAvICdkZ2Utd29ya2VyLnNlcnZpY2UnKS53cml0ZV90ZXh0KCcnJ1tVbml0XVxuRGVzY3JpcHRpb249REdFIG1hbmFnZWQgY29tcHV0ZSB3b3JrZXJcblJlcXVpcmVzPWRvY2tlci5zZXJ2aWNlIGNvbXB1dGUuc2xpY2VcbkFmdGVyPWRvY2tlci5zZXJ2aWNlIG5ldHdvcmstb25saW5lLnRhcmdldFxuV2FudHM9bmV0d29yay1vbmxpbmUudGFyZ2V0XG5cbltTZXJ2aWNlXVxuVHlwZT1zaW1wbGVcblNsaWNlPWNvbXB1dGUuc2xpY2VcbkVudmlyb25tZW50RmlsZT0tL29wdC9kZ2Utd29ya2VyL3N0b3JhZ2UuZW52XG5FbnZpcm9ubWVudEZpbGU9LS9vcHQvZGdlLXdvcmtlci9wcm94eS5lbnZcbkV4ZWNTdGFydFByZT0vdXNyL2Jpbi9ta2RpciAtcCAvcnVuL2RnZS13b3JrZXIvdGFza3NcbkV4ZWNTdGFydFByZT0vYmluL3NoIC1jICdtb3VudHBvaW50IC1xIC9ydW4vZGdlLXdvcmtlci90YXNrcyB8fCBtb3VudCAtdCB0bXBmcyAtbyBzaXplPTI1Nm0sbW9kZT0wNzAwLG5vc3VpZCxub2Rldixub2V4ZWMgdG1wZnMgL3J1bi9kZ2Utd29ya2VyL3Rhc2tzJ1xuRXhlY1N0YXJ0PS91c3IvYmluL3B5dGhvbjMgL29wdC9kZ2Utd29ya2VyL2xhdW5jaGVyLnB5XG5SZXN0YXJ0PWFsd2F5c1xuUmVzdGFydFNlYz0xMFxuVGltZW91dFN0b3BTZWM9OTYwXG5MaW1pdENPUkU9MFxuTWVtb3J5U3dhcE1heD0wXG5VTWFzaz0wMDc3XG5cbltJbnN0YWxsXVxuV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXRcbicnJylcbiAgICBmcm9tIGFnZW50IGltcG9ydCBjb25maWd1cmVfY2lcbiAgICBjb25maWd1cmVfY2koKVxuICAgIHJ1bignc3lzdGVtY3RsJywgJ2RhZW1vbi1yZWxvYWQnKVxuICAgIHJ1bignc3lzdGVtY3RsJywgJ2VuYWJsZScsICctLW5vdycsICdkZ2Utd29ya2VyLnNlcnZpY2UnKVxuICAgIHByaW50KCdXb3JrZXIgZW5yb2xsZWQuIENvbmZpZ3VyYXRpb24gYW5kIHRhc2sgaW1hZ2VzIGFyZSBvYnRhaW5lZCBhdCBjaGVjay1pbi4nLCBmbHVzaD1UcnVlKVxuXG5cbmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6XG4gICAgbWFpbigpXG4iLCJhZ2VudC5weSI6IiMhL3Vzci9iaW4vZW52IHB5dGhvbjNcblwiXCJcIlRydXN0ZWQgTGludXggaG9zdCBzdXBlcnZpc29yLiBQZXJzaXN0ZW50IHN0YXRlIGNvbnRhaW5zIGNvZGUvY29uZmlnIG9ubHkuXG5UYXNrIHNjcmF0Y2ggaXMgdG1wZnMuIFRoZSB3b3JrZXIgY2dyb3VwIGFuZCB0YXNrIGNvbnRhaW5lcnMgc2V0IE1lbW9yeVN3YXBNYXg9MFxuc28gdGFzayBwYWdlcyBkbyBub3QgdXNlIGhvc3Qgc3dhcCBldmVuIHdoZW4gdGhlIG1hY2hpbmUgaGFzIHN3YXAgZW5hYmxlZC5cblRhc2sgY29udGFpbmVycyBoYXZlIG5vIG5ldHdvcmssIERvY2tlciBzb2NrZXQsIHdvcmtlciBpZGVudGl0eSwgb3Igc3RvcmFnZSBjcmVkZW50aWFscy5cblwiXCJcIlxuaW1wb3J0IGJhc2U2NFxuaW1wb3J0IGNhbGVuZGFyXG5pbXBvcnQgY3N2XG5pbXBvcnQgbWF0aFxuaW1wb3J0IGhhc2hsaWJcbmltcG9ydCBobWFjXG5pbXBvcnQgaHR0cC5jbGllbnRcbmltcG9ydCBqc29uXG5pbXBvcnQgb3NcbmZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlcXVlXG5mcm9tIHBhdGhsaWIgaW1wb3J0IFBhdGhcbmltcG9ydCBwbGF0Zm9ybVxuaW1wb3J0IHJlXG5pbXBvcnQgc2h1dGlsXG5pbXBvcnQgc2lnbmFsXG5pbXBvcnQgc29ja2V0XG5pbXBvcnQgc3NsXG5pbXBvcnQgc3VicHJvY2Vzc1xuaW1wb3J0IHN5c1xuaW1wb3J0IHRlbXBmaWxlXG5pbXBvcnQgdGFyZmlsZVxuaW1wb3J0IHRocmVhZGluZ1xuaW1wb3J0IHRpbWVcbmltcG9ydCB1cmxsaWIuZXJyb3JcbmltcG9ydCB1cmxsaWIucGFyc2VcbmltcG9ydCB1cmxsaWIucmVxdWVzdFxuXG4jIENsb3VkZmxhcmUgYm90IGZpZ2h0IDQwM3MgUHl0aG9uJ3MgZGVmYXVsdCBVQTsgdGhlIHdvcmtlciB0YWxrcyBIVFRQUyB0aHJvdWdoIGl0LlxuQlJPV1NFUl9VQSA9ICdNb3ppbGxhLzUuMCAoWDExOyBMaW51eCB4ODZfNjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMjguMC4wLjAgU2FmYXJpLzUzNy4zNidcblxuUkVHSVNUUllfQVVUSF9WRVJTSU9OID0gMVxuQ0FQQUJJTElUWV9URVNUX1ZFUlNJT04gPSAxXG5SVU5USU1FX0FCSSA9ICdfX1JVTlRJTUVfQUJJX18nXG5WRVJTSU9OID0gJzEuMy4wKycgKyBoYXNobGliLnNoYTI1NihQYXRoKF9fZmlsZV9fKS5yZWFkX2J5dGVzKCkpLmhleGRpZ2VzdCgpWzoxMl1cblJPT1QgPSBQYXRoKG9zLmVudmlyb24uZ2V0KCdER0VfV09SS0VSX1JPT1QnLCAnL29wdC9kZ2Utd29ya2VyJykpXG5TQ1JBVENIID0gUGF0aChvcy5lbnZpcm9uLmdldCgnREdFX1dPUktFUl9TQ1JBVENIJywgJy9ydW4vZGdlLXdvcmtlci90YXNrcycpKVxuQ0lfUlVOTkVSX1NUQVRFID0gUk9PVCAvICdjaV9ydW5uZXIuanNvbidcbkNJX1JVTk5FUl9OQU1FID0gJ2RnZS1jb21wdXRlJ1xuQ0lfREVGQVVMVF9JTUFHRSA9ICdydWJ5OjMuNC4yJ1xuIyBidWlsZC1jb21wdXRlLWltYWdlIGRyaXZlcyB0aGUgaG9zdCBkYWVtb24gd2l0aCBidWlsZHg7IHRoZXJlIGlzIG5vIGRpbmQgc2VydmljZS5cbkNJX0RPQ0tFUl9TT0NLRVQgPSAnL3Zhci9ydW4vZG9ja2VyLnNvY2s6L3Zhci9ydW4vZG9ja2VyLnNvY2snXG5DSV9TTElDRSA9IFBhdGgoJy9ldGMvc3lzdGVtZC9zeXN0ZW0vY2kuc2xpY2UnKVxuR0lUTEFCID0gJ2h0dHBzOi8vZ2l0bGFiLmNvbSdcbkdJVExBQl9SVU5ORVJfUkVQT1NJVE9SWSA9ICdodHRwczovL3BhY2thZ2VzLmdpdGxhYi5jb20vaW5zdGFsbC9yZXBvc2l0b3JpZXMvcnVubmVyL2dpdGxhYi1ydW5uZXIvc2NyaXB0LmRlYi5zaCdcblJVTk5FUl9DT05GSUcgPSBQYXRoKCcvZXRjL2dpdGxhYi1ydW5uZXIvY29uZmlnLnRvbWwnKVxuU1RPUCA9IHRocmVhZGluZy5FdmVudCgpXG5TVEFURV9MT0NLID0gdGhyZWFkaW5nLkxvY2soKVxuUE9TVF9MT0NLID0gdGhyZWFkaW5nLkxvY2soKVxuUkVQT1JUID0ge31cblRBU0tTID0gW11cbiMgKGpvYiBpZCwgYXR0ZW1wdCkgcGFpcnMgdGhlIHBsYXRmb3JtIHNheXMgdGhpcyB3b3JrZXIgbm8gbG9uZ2VyIG93bnMsIGFuZCB0aGVcbiMgbW9ub3RvbmljIHRpbWUgZWFjaCBydW5uaW5nIGF0dGVtcHQncyBsZWFzZSB3YXMgbGFzdCBjb25maXJtZWQuXG5MT1NUID0ge31cblJFTkVXRUQgPSB7fVxuQ09OVFJPTCA9IHt9XG5MT0dTID0gZGVxdWUobWF4bGVuPTQwKVxuXG5cbmNsYXNzIE5vUmVkaXJlY3QodXJsbGliLnJlcXVlc3QuSFRUUFJlZGlyZWN0SGFuZGxlcik6XG4gICAgZGVmIHJlZGlyZWN0X3JlcXVlc3Qoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKTpcbiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignUmVkaXJlY3RzIGFyZSBub3QgcGVybWl0dGVkJylcblxuXG5IVFRQID0gdXJsbGliLnJlcXVlc3QuYnVpbGRfb3BlbmVyKE5vUmVkaXJlY3QoKSlcbkhUVFAuYWRkaGVhZGVycyA9IFsoJ1VzZXItQWdlbnQnLCBCUk9XU0VSX1VBKV1cblNUT1JBR0VfSFRUUCA9IHVybGxpYi5yZXF1ZXN0LmJ1aWxkX29wZW5lcigpXG5TVE9SQUdFX0hUVFAuYWRkaGVhZGVycyA9IFsoJ1VzZXItQWdlbnQnLCBCUk9XU0VSX1VBKV1cblxuXG5kZWYgc3RvcmFnZV9wcm94eSgpOlxuICAgIHByb3h5ID0gb3MuZW52aXJvbi5nZXQoJ0RHRV9TVE9SQUdFX1BST1hZJylcbiAgICBpZiBub3QgcHJveHk6XG4gICAgICAgIHJldHVybiBOb25lXG4gICAgcGFyc2VkID0gdXJsbGliLnBhcnNlLnVybHNwbGl0KHByb3h5KVxuICAgIGlmIChwYXJzZWQuc2NoZW1lICE9ICdodHRwJyBvciBwYXJzZWQudXNlcm5hbWUgb3Igbm90IHBhcnNlZC5ob3N0bmFtZVxuICAgICAgICAgICAgb3IgcGFyc2VkLnBhdGggbm90IGluICgnJywgJy8nKSBvciBwYXJzZWQucXVlcnkgb3IgcGFyc2VkLmZyYWdtZW50KTpcbiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignU3RvcmFnZSBwcm94eSBtdXN0IGJlIGFuIEhUVFAgVVJMJylcbiAgICByZXR1cm4gcGFyc2VkXG5cblxuZGVmIHN0b3JhZ2VfcHJveHlfZm9yKHVybCk6XG4gICAgcHJveHkgPSBzdG9yYWdlX3Byb3h5KClcbiAgICBpZiBwcm94eSBpcyBOb25lOlxuICAgICAgICByZXR1cm4gTm9uZVxuICAgIGhvc3QgPSAodXJsbGliLnBhcnNlLnVybHNwbGl0KHVybCkuaG9zdG5hbWUgb3IgJycpLmxvd2VyKCkucnN0cmlwKCcuJylcbiAgICBpZiBob3N0LmVuZHN3aXRoKCcucjIuY2xvdWRmbGFyZXN0b3JhZ2UuY29tJyk6XG4gICAgICAgIHJldHVybiBwcm94eVxuICAgIHJldHVybiBOb25lXG5cblxuY2xhc3MgUHJveGllZFJlc3BvbnNlOlxuICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25uZWN0aW9uLCByZXNwb25zZSk6XG4gICAgICAgIHNlbGYuX2Nvbm5lY3Rpb24gPSBjb25uZWN0aW9uXG4gICAgICAgIHNlbGYuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzXG4gICAgICAgIHNlbGYucmVhZCA9IHJlc3BvbnNlLnJlYWRcblxuICAgIGRlZiBfX2VudGVyX18oc2VsZik6XG4gICAgICAgIHJldHVybiBzZWxmXG5cbiAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOlxuICAgICAgICBzZWxmLl9jb25uZWN0aW9uLmNsb3NlKClcblxuXG5TVE9SQUdFX1BST1hZX1RJTUVPVVQgPSA2MDBcblVQTElOS19JTlRFUlZBTCA9IDMwMFxuVVBMSU5LX0xPQ0sgPSB0aHJlYWRpbmcuTG9jaygpXG5VUExJTksgPSB7XG4gICAgJ3VwbGlua19raW5kJzogJ3Vua25vd24nLFxuICAgICd1cGxpbmtfcHJvYmVfb2snOiBGYWxzZSxcbiAgICAndXBsaW5rX3Byb2JlX2Jwcyc6IDAsXG4gICAgJ3VwbGlua19wcm9iZWRfYXQnOiBOb25lLFxufVxuSE9TVCA9IHt9XG5VUExJTktfQVQgPSAwLjBcblBST0JFX0hPU1QgPSAnc3BlZWQuY2xvdWRmbGFyZS5jb20nXG5QUk9CRV9QQVRIID0gJy9fX3VwJ1xuUFJPQkVfQllURVMgPSAyICogMTAyNCAqIDEwMjRcblBST0JFX1RJTUVPVVQgPSAxMFxuXG5cbmRlZiBzdG9yYWdlX2dldCh1cmwpOlxuICAgIHBhcnNlZCA9IHN0b3JhZ2VfcHJveHlfZm9yKHVybClcbiAgICBpZiBwYXJzZWQgaXMgTm9uZTpcbiAgICAgICAgcmV0dXJuIFNUT1JBR0VfSFRUUC5vcGVuKHVybCwgdGltZW91dD0zMClcbiAgICBjb25uZWN0aW9uID0gaHR0cC5jbGllbnQuSFRUUENvbm5lY3Rpb24ocGFyc2VkLmhvc3RuYW1lLCBwYXJzZWQucG9ydCBvciA4MCwgdGltZW91dD1TVE9SQUdFX1BST1hZX1RJTUVPVVQpXG4gICAgY29ubmVjdGlvbi5wdXRyZXF1ZXN0KCdHRVQnLCAnLycpXG4gICAgY29ubmVjdGlvbi5wdXRoZWFkZXIoJ1gtREdFLVRhcmdldCcsIHVybClcbiAgICBjb25uZWN0aW9uLmVuZGhlYWRlcnMoKVxuICAgIHJlc3BvbnNlID0gY29ubmVjdGlvbi5nZXRyZXNwb25zZSgpXG4gICAgaWYgcmVzcG9uc2Uuc3RhdHVzICE9IDIwMDpcbiAgICAgICAgc3RhdHVzLCByZWFzb24gPSByZXNwb25zZS5zdGF0dXMsIHJlc3BvbnNlLnJlYXNvblxuICAgICAgICBjb25uZWN0aW9uLmNsb3NlKClcbiAgICAgICAgcmFpc2UgdXJsbGliLmVycm9yLkhUVFBFcnJvcih1cmwsIHN0YXR1cywgcmVhc29uLCB7fSwgTm9uZSlcbiAgICByZXR1cm4gUHJveGllZFJlc3BvbnNlKGNvbm5lY3Rpb24sIHJlc3BvbnNlKVxuXG5cbmRlZiBzdG9yYWdlX3B1dF9jb25uZWN0aW9uKHVybCk6XG4gICAgcGFyc2VkID0gc3RvcmFnZV9wcm94eV9mb3IodXJsKVxuICAgIHVyaSA9IHVybGxpYi5wYXJzZS51cmxzcGxpdCh1cmwpXG4gICAgaWYgcGFyc2VkIGlzIE5vbmU6XG4gICAgICAgIGNvbm5lY3Rpb24gPSBodHRwLmNsaWVudC5IVFRQU0Nvbm5lY3Rpb24odXJpLmhvc3RuYW1lLCB1cmkucG9ydCBvciA0NDMsIHRpbWVvdXQ9MzApXG4gICAgICAgIHJldHVybiBjb25uZWN0aW9uLCB1cmkucGF0aCArICgnPycgKyB1cmkucXVlcnkgaWYgdXJpLnF1ZXJ5IGVsc2UgJycpXG4gICAgY29ubmVjdGlvbiA9IGh0dHAuY2xpZW50LkhUVFBDb25uZWN0aW9uKHBhcnNlZC5ob3N0bmFtZSwgcGFyc2VkLnBvcnQgb3IgODAsIHRpbWVvdXQ9U1RPUkFHRV9QUk9YWV9USU1FT1VUKVxuICAgIHJldHVybiBjb25uZWN0aW9uLCAnLydcblxuXG5kZWYgbm90ZShtZXNzYWdlKTpcbiAgICBsaW5lID0gdGltZS5zdHJmdGltZSgnJUg6JU06JVNaJywgdGltZS5nbXRpbWUoKSkgKyAnICcgKyAnICcuam9pbihzdHIobWVzc2FnZSkuc3BsaXQoKSlbOjM2MF1cbiAgICBwcmludChtZXNzYWdlLCBmbHVzaD1UcnVlKVxuICAgIHdpdGggU1RBVEVfTE9DSzpcbiAgICAgICAgTE9HUy5hcHBlbmQobGluZSlcblxuXG4jIFNhbmRib3ggd2FybmluZ3MgZXZlcnkgdGFzayBwcmludHM7IHRoZXkgbmV2ZXIgZXhwbGFpbiBhIGZhaWx1cmUuXG5TVERFUlJfTk9JU0UgPSAoJ0ZvbnRjb25maWcgZXJyb3I6JywgJ3NldF9tZW1wb2xpY3k6JylcblRBU0tfRVJST1JfTElNSVQgPSAyMDAwXG5cblxuZGVmIGRlc2NyaWJlX2Vycm9yKGVycm9yKTpcbiAgICBcIlwiXCJUYXNrIGZhaWx1cmUgdGV4dCBmb3IgdGhlIGpvYiByZWNvcmQ6IGV4aXQgc3RhdHVzIGFuZCB0aGUgSEVBRCBvZiBzdGRlcnIsIG5ldmVyIGRvY2tlciBhcmd2LlxuXG4gICAgVGhlIGFyZ3YgYWxvbmUgaXMgbG9uZ2VyIHRoYW4gYW55IHVzZWZ1bCBsaW1pdCwgYW5kIFJ1YnkgYW5kIFB5dGhvbiBwcmludCB0aGUgZXhjZXB0aW9uIGJlZm9yZVxuICAgIGl0cyBiYWNrdHJhY2UsIHNvIHRoZSBoZWFkIGlzIHdoZXJlIHRoZSBjYXVzZSBpcy5cIlwiXCJcbiAgICBpZiBpc2luc3RhbmNlKGVycm9yLCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcik6XG4gICAgICAgIHRleHQgPSB0eXBlKGVycm9yKS5fX25hbWVfXyArICcgZXhpdCAnICsgc3RyKGVycm9yLnJldHVybmNvZGUpXG4gICAgZWxpZiBpc2luc3RhbmNlKGVycm9yLCBzdWJwcm9jZXNzLlRpbWVvdXRFeHBpcmVkKTpcbiAgICAgICAgdGV4dCA9IHR5cGUoZXJyb3IpLl9fbmFtZV9fICsgJyBhZnRlciAnICsgc3RyKGVycm9yLnRpbWVvdXQpICsgJ3MnXG4gICAgZWxzZTpcbiAgICAgICAgdGV4dCA9IHR5cGUoZXJyb3IpLl9fbmFtZV9fICsgJzogJyArIHN0cihlcnJvcilcbiAgICBsaW5lcyA9IChsaW5lLnN0cmlwKCkgZm9yIGxpbmUgaW4gcHJvY2Vzc19vdXRwdXQoZ2V0YXR0cihlcnJvciwgJ3N0ZGVycicsIE5vbmUpKS5zcGxpdGxpbmVzKCkpXG4gICAgZGV0YWlsID0gJ1xcbicuam9pbihsaW5lIGZvciBsaW5lIGluIGxpbmVzIGlmIGxpbmUgYW5kIG5vdCBsaW5lLnN0YXJ0c3dpdGgoU1RERVJSX05PSVNFKSlcbiAgICByZXR1cm4gKHRleHQgKyAnOiAnICsgZGV0YWlsIGlmIGRldGFpbCBlbHNlIHRleHQpWzpUQVNLX0VSUk9SX0xJTUlUXVxuXG5cbmRlZiBwcm9jZXNzX291dHB1dCh2YWx1ZSk6XG4gICAgaWYgdmFsdWUgaXMgTm9uZTpcbiAgICAgICAgcmV0dXJuICcnXG4gICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgKGJ5dGVzLCBieXRlYXJyYXkpKTpcbiAgICAgICAgcmV0dXJuIHZhbHVlLmRlY29kZShlcnJvcnM9J3JlcGxhY2UnKVxuICAgIHJldHVybiBzdHIodmFsdWUpXG5cblxuIyBXb3JrZXJzOjpJbnZlbnRvcnkgcmVmdXNlcyBhIGxvbmdlciBzdHJpbmcsIGFuZCBhIHJlZnVzZWQgaGVhcnRiZWF0IHN0b3BzIHRoZSB3b3JrZXIuXG5JTlZFTlRPUllfVEVYVF9MSU1JVCA9IDI1NVxuXG5cbmRlZiBkZXNjcmliZV9wcm9jZXNzX2Vycm9yKGVycm9yLCBsaW1pdD0xODApOlxuICAgIFwiXCJcIlNob3J0IGZhaWx1cmUgdGV4dCB3aXRob3V0IGFyZ3Y7IGtlZXBzIHRoZSB1c2VmdWwgdGFpbCB3aXRoaW4gdGhlIHNlcnZlciBjb2x1bW4uXCJcIlwiXG4gICAgbmFtZSA9IHR5cGUoZXJyb3IpLl9fbmFtZV9fXG4gICAgaWYgaXNpbnN0YW5jZShlcnJvciwgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IpOlxuICAgICAgICBkZXRhaWwgPSAnICcuam9pbihwcm9jZXNzX291dHB1dChlcnJvci5zdGRlcnIpLnNwbGl0KCkpIG9yICcgJy5qb2luKHByb2Nlc3Nfb3V0cHV0KGVycm9yLnN0ZG91dCkuc3BsaXQoKSlcbiAgICAgICAgcHJlZml4ID0gbmFtZSArICcgZXhpdCAnICsgc3RyKGVycm9yLnJldHVybmNvZGUpXG4gICAgICAgIGlmIG5vdCBkZXRhaWw6XG4gICAgICAgICAgICByZXR1cm4gcHJlZml4WzpsaW1pdF1cbiAgICAgICAgYnVkZ2V0ID0gbWF4KDAsIGxpbWl0IC0gbGVuKHByZWZpeCkgLSAxKVxuICAgICAgICBpZiBsZW4oZGV0YWlsKSA+IGJ1ZGdldDpcbiAgICAgICAgICAgIGRldGFpbCA9IGRldGFpbFstYnVkZ2V0Ol1cbiAgICAgICAgcmV0dXJuIChwcmVmaXggKyAnICcgKyBkZXRhaWwpWzpsaW1pdF1cbiAgICByZXR1cm4gJyAnLmpvaW4oKG5hbWUgKyAnOiAnICsgc3RyKGVycm9yKSkuc3BsaXQoKSlbOmxpbWl0XVxuXG5cbmRlZiB1cGRhdGVfZmFpbHVyZV9yZWFzb24oZXJyb3IpOlxuICAgIGlmIHN0cihlcnJvcikgPT0gJ0NhcGFiaWxpdHlSZWdyZXNzaW9uJzpcbiAgICAgICAgcmV0dXJuICdDYXBhYmlsaXR5UmVncmVzc2lvbidcbiAgICByZXR1cm4gZGVzY3JpYmVfcHJvY2Vzc19lcnJvcihlcnJvcilcblxuXG5kZWYgcHJvYmVfb3BlcmF0aW9uX3Jlc3VsdChlcnJvcik6XG4gICAgXCJcIlwiUmV0dXJuIC0tcHJvYmUtb3BlcmF0aW9uIEpTT04gZnJvbSBhIG5vbi16ZXJvIGV4aXQsIG9yIE5vbmUuXCJcIlwiXG4gICAgaWYgbm90IGlzaW5zdGFuY2UoZXJyb3IsIHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yKTpcbiAgICAgICAgcmV0dXJuIE5vbmVcbiAgICB0cnk6XG4gICAgICAgIHBheWxvYWQgPSBqc29uLmxvYWRzKHByb2Nlc3Nfb3V0cHV0KGVycm9yLnN0ZG91dCkuc3RyaXAoKSBvciAnbnVsbCcpXG4gICAgZXhjZXB0IChUeXBlRXJyb3IsIFZhbHVlRXJyb3IsIGpzb24uSlNPTkRlY29kZUVycm9yKTpcbiAgICAgICAgcmV0dXJuIE5vbmVcbiAgICBpZiBpc2luc3RhbmNlKHBheWxvYWQsIGRpY3QpIGFuZCAnc3RhdHVzJyBpbiBwYXlsb2FkOlxuICAgICAgICByZXR1cm4gcGF5bG9hZFxuICAgIHJldHVybiBOb25lXG5cblxuZGVmIHByb2JlX2NhcGFiaWxpdHlfcmVzdWx0cyhlcnJvcik6XG4gICAgXCJcIlwiUmV0dXJuIC0tcHJvYmUgcmVzdWx0cyBKU09OIGZyb20gYSBub24temVybyBleGl0LCBvciBOb25lLlwiXCJcIlxuICAgIGlmIG5vdCBpc2luc3RhbmNlKGVycm9yLCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcik6XG4gICAgICAgIHJldHVybiBOb25lXG4gICAgdHJ5OlxuICAgICAgICBwYXlsb2FkID0ganNvbi5sb2Fkcyhwcm9jZXNzX291dHB1dChlcnJvci5zdGRvdXQpLnN0cmlwKCkgb3IgJ251bGwnKVxuICAgIGV4Y2VwdCAoVHlwZUVycm9yLCBWYWx1ZUVycm9yLCBqc29uLkpTT05EZWNvZGVFcnJvcik6XG4gICAgICAgIHJldHVybiBOb25lXG4gICAgaWYgaXNpbnN0YW5jZShwYXlsb2FkLCBkaWN0KSBhbmQgcGF5bG9hZDpcbiAgICAgICAgcmV0dXJuIHBheWxvYWRcbiAgICByZXR1cm4gTm9uZVxuXG5cbmRlZiBjb21tYW5kKGFyZ3MsIHRpbWVvdXQ9NjAsIGVudj1Ob25lKTpcbiAgICByZXN1bHQgPSBzdWJwcm9jZXNzLnJ1bihhcmdzLCBzdGRpbj1zdWJwcm9jZXNzLkRFVk5VTEwsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwgdGltZW91dD10aW1lb3V0LCBlbnY9ZW52KVxuICAgIGlmIHJlc3VsdC5yZXR1cm5jb2RlOlxuICAgICAgICByYWlzZSBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcihyZXN1bHQucmV0dXJuY29kZSwgYXJncywgcmVzdWx0LnN0ZG91dCwgcmVzdWx0LnN0ZGVycilcbiAgICByZXR1cm4gcmVzdWx0LnN0ZG91dC5kZWNvZGUoKS5zdHJpcCgpXG5cblxuZGVmIHJlYWRfanNvbihwYXRoLCBkZWZhdWx0PU5vbmUpOlxuICAgIHJldHVybiBqc29uLmxvYWRzKHBhdGgucmVhZF90ZXh0KCkpIGlmIHBhdGguZXhpc3RzKCkgZWxzZSBkZWZhdWx0XG5cblxuZGVmIHdyaXRlX2pzb24ocGF0aCwgdmFsdWUpOlxuICAgIHRlbXAgPSBwYXRoLndpdGhfc3VmZml4KCcudG1wJylcbiAgICB0ZW1wLndyaXRlX3RleHQoanNvbi5kdW1wcyh2YWx1ZSkpXG4gICAgdGVtcC5jaG1vZCgwbzYwMClcbiAgICBvcy5yZXBsYWNlKHRlbXAsIHBhdGgpXG5cblxuZGVmIG1lbW9yeSgpOlxuICAgIHJldHVybiB7bGluZS5zcGxpdCgnOicpWzBdOiBpbnQobGluZS5zcGxpdCgpWzFdKSAqIDEwMjRcbiAgICAgICAgICAgIGZvciBsaW5lIGluIFBhdGgoJy9wcm9jL21lbWluZm8nKS5yZWFkX3RleHQoKS5zcGxpdGxpbmVzKCkgaWYgbGVuKGxpbmUuc3BsaXQoKSkgPT0gM31cblxuXG5kZWYgcmVhZF90ZXh0KHBhdGgpOlxuICAgIHRyeTpcbiAgICAgICAgcmV0dXJuIFBhdGgocGF0aCkucmVhZF90ZXh0KCkuc3RyaXAoKVxuICAgIGV4Y2VwdCAoT1NFcnJvciwgVmFsdWVFcnJvcik6XG4gICAgICAgIHJldHVybiBOb25lXG5cblxuZGVmIG9wdGlvbmFsX2NvbW1hbmQoYXJncyk6XG4gICAgdHJ5OlxuICAgICAgICByZXR1cm4gY29tbWFuZChhcmdzLCA1KVxuICAgIGV4Y2VwdCAoT1NFcnJvciwgc3VicHJvY2Vzcy5TdWJwcm9jZXNzRXJyb3IpOlxuICAgICAgICByZXR1cm4gTm9uZVxuXG5cbmRlZiBudW1iZXIodmFsdWUsIHNjYWxlPTEpOlxuICAgIHRyeTpcbiAgICAgICAgcmVzdWx0ID0gZmxvYXQodmFsdWUpICogc2NhbGVcbiAgICAgICAgcmV0dXJuIHJlc3VsdCBpZiByZXN1bHQgPj0gMCBhbmQgbWF0aC5pc2Zpbml0ZShyZXN1bHQpIGVsc2UgTm9uZVxuICAgIGV4Y2VwdCAoVHlwZUVycm9yLCBWYWx1ZUVycm9yKTpcbiAgICAgICAgcmV0dXJuIE5vbmVcblxuXG5kZWYgcGNpX2RldGFpbHMoZGV2aWNlKTpcbiAgICBkZXRhaWxzID0ge31cbiAgICBvdXRwdXQgPSBvcHRpb25hbF9jb21tYW5kKFsnbHNwY2knLCAnLXZtbScsICctcycsIGRldmljZS5uYW1lXSlcbiAgICBmb3IgbGluZSBpbiAob3V0cHV0IG9yICcnKS5zcGxpdGxpbmVzKCk6XG4gICAgICAgIGtleSwgc2VwYXJhdG9yLCB2YWx1ZSA9IGxpbmUucGFydGl0aW9uKCc6JylcbiAgICAgICAgaWYgc2VwYXJhdG9yOlxuICAgICAgICAgICAgZGV0YWlsc1trZXldID0gdmFsdWUuc3RyaXAoKVxuICAgIHJldHVybiBkaWN0KHZlbmRvcj1kZXRhaWxzLmdldCgnVmVuZG9yJykgb3IgcmVhZF90ZXh0KGRldmljZSAvICd2ZW5kb3InKSxcbiAgICAgICAgICAgICAgICBtb2RlbD1kZXRhaWxzLmdldCgnRGV2aWNlJykgb3IgcmVhZF90ZXh0KGRldmljZSAvICdkZXZpY2UnKSlcblxuXG5kZWYgY3B1X2ludmVudG9yeSgpOlxuICAgIGJsb2NrcyA9IFBhdGgoJy9wcm9jL2NwdWluZm8nKS5yZWFkX3RleHQoKS5zdHJpcCgpLnNwbGl0KCdcXG5cXG4nKVxuICAgIGNwdXMgPSBbZGljdChsaW5lLnNwbGl0KCc6JywgMSkgZm9yIGxpbmUgaW4gYmxvY2suc3BsaXRsaW5lcygpIGlmICc6JyBpbiBsaW5lKSBmb3IgYmxvY2sgaW4gYmxvY2tzXVxuICAgIGNwdXMgPSBbe2tleS5zdHJpcCgpOiB2YWx1ZS5zdHJpcCgpIGZvciBrZXksIHZhbHVlIGluIGNwdS5pdGVtcygpfSBmb3IgY3B1IGluIGNwdXNdXG4gICAgZmlyc3QgPSBjcHVzWzBdIGlmIGNwdXMgZWxzZSB7fVxuICAgIHNvY2tldHMgPSB7Y3B1WydwaHlzaWNhbCBpZCddIGZvciBjcHUgaW4gY3B1cyBpZiAncGh5c2ljYWwgaWQnIGluIGNwdX1cbiAgICBjb3JlcyA9IHsoY3B1WydwaHlzaWNhbCBpZCddLCBjcHVbJ2NvcmUgaWQnXSkgZm9yIGNwdSBpbiBjcHVzIGlmICdwaHlzaWNhbCBpZCcgaW4gY3B1IGFuZCAnY29yZSBpZCcgaW4gY3B1fVxuICAgIHBvbGljaWVzID0gbGlzdChQYXRoKCcvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHVmcmVxJykuZ2xvYigncG9saWN5KicpKVxuICAgIG1pbmltdW0gPSBbbnVtYmVyKHJlYWRfdGV4dChwIC8gJ2NwdWluZm9fbWluX2ZyZXEnKSwgLjAwMSkgZm9yIHAgaW4gcG9saWNpZXNdXG4gICAgbWF4aW11bSA9IFtudW1iZXIocmVhZF90ZXh0KHAgLyAnY3B1aW5mb19tYXhfZnJlcScpLCAuMDAxKSBmb3IgcCBpbiBwb2xpY2llc11cbiAgICByZXR1cm4gZGljdChjcHVfbW9kZWw9Zmlyc3QuZ2V0KCdtb2RlbCBuYW1lJykgb3IgZmlyc3QuZ2V0KCdQcm9jZXNzb3InKSwgY3B1X3ZlbmRvcj1maXJzdC5nZXQoJ3ZlbmRvcl9pZCcpLFxuICAgICAgICAgICAgICAgIGNwdV9zb2NrZXRzPWxlbihzb2NrZXRzKSBvciBOb25lLCBwaHlzaWNhbF9jcHVfY29yZXM9bGVuKGNvcmVzKSBvciBOb25lLFxuICAgICAgICAgICAgICAgIGxvZ2ljYWxfY3B1cz1vcy5jcHVfY291bnQoKSwgY3B1X21pbl9taHo9bWluKCh4IGZvciB4IGluIG1pbmltdW0gaWYgeCBpcyBub3QgTm9uZSksIGRlZmF1bHQ9Tm9uZSksXG4gICAgICAgICAgICAgICAgY3B1X21heF9taHo9bWF4KCh4IGZvciB4IGluIG1heGltdW0gaWYgeCBpcyBub3QgTm9uZSksIGRlZmF1bHQ9Tm9uZSkpXG5cblxuZGVmIGRpc2tfaW52ZW50b3J5KCk6XG4gICAgb3V0cHV0ID0gb3B0aW9uYWxfY29tbWFuZChbJ2xzYmxrJywgJy0tanNvbicsICctLWJ5dGVzJywgJy0tbm9kZXBzJywgJy0tb3V0cHV0JywgJ05BTUUsVFlQRSxTSVpFLE1PREVMLFZFTkRPUixUUkFOLFJPVEEsUk0nXSlcbiAgICBpZiBvdXRwdXQgaXMgTm9uZTpcbiAgICAgICAgcmV0dXJuIE5vbmVcbiAgICB0cnk6XG4gICAgICAgIGRldmljZXMgPSBqc29uLmxvYWRzKG91dHB1dClbJ2Jsb2NrZGV2aWNlcyddXG4gICAgZXhjZXB0IChWYWx1ZUVycm9yLCBLZXlFcnJvciwgVHlwZUVycm9yKTpcbiAgICAgICAgcmV0dXJuIE5vbmVcbiAgICByZXN1bHQgPSBbXVxuICAgIGZvciBkaXNrIGluIGRldmljZXM6XG4gICAgICAgIGlmIGRpc2suZ2V0KCd0eXBlJykgIT0gJ2Rpc2snOlxuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgcm90YXRpb25hbCA9IGRpc2suZ2V0KCdyb3RhJylcbiAgICAgICAgbWVkaWEgPSAnaGRkJyBpZiByb3RhdGlvbmFsIGVsc2UgJ3NzZCcgaWYgcm90YXRpb25hbCBpcyBub3QgTm9uZSBlbHNlIE5vbmVcbiAgICAgICAgcmVzdWx0LmFwcGVuZChkaWN0KGRldmljZV9rZXk9ZGlza1snbmFtZSddLCBtb2RlbD0oZGlzay5nZXQoJ21vZGVsJykgb3IgJycpLnN0cmlwKCkgb3IgTm9uZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlbmRvcj0oZGlzay5nZXQoJ3ZlbmRvcicpIG9yICcnKS5zdHJpcCgpIG9yIE5vbmUsIGNhcGFjaXR5X2J5dGVzPW51bWJlcihkaXNrLmdldCgnc2l6ZScpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydD1kaXNrLmdldCgndHJhbicpLCBtZWRpYV90eXBlPW1lZGlhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRpb25hbD1ib29sKHJvdGF0aW9uYWwpIGlmIHJvdGF0aW9uYWwgaXMgbm90IE5vbmUgZWxzZSBOb25lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZhYmxlPWJvb2woZGlza1sncm0nXSkgaWYgZGlzay5nZXQoJ3JtJykgaXMgbm90IE5vbmUgZWxzZSBOb25lKSlcbiAgICByZXR1cm4gcmVzdWx0Wzo2NF1cblxuXG5kZWYgZ3B1X2ludmVudG9yeSgpOlxuICAgIHJlc3VsdCA9IFtdXG4gICAgZm9yIGRldmljZSBpbiBQYXRoKCcvc3lzL2J1cy9wY2kvZGV2aWNlcycpLmdsb2IoJyonKTpcbiAgICAgICAgaWYgbm90IChyZWFkX3RleHQoZGV2aWNlIC8gJ2NsYXNzJykgb3IgJycpLnN0YXJ0c3dpdGgoJzB4MDMnKTpcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIGdwdSA9IGRpY3QoZGV2aWNlX2tleT1kZXZpY2UubmFtZSwgcGNpX2FkZHJlc3M9ZGV2aWNlLm5hbWUsICoqcGNpX2RldGFpbHMoZGV2aWNlKSlcbiAgICAgICAgZ3B1WydtZW1vcnlfYnl0ZXMnXSA9IG51bWJlcihyZWFkX3RleHQoZGV2aWNlIC8gJ21lbV9pbmZvX3ZyYW1fdG90YWwnKSlcbiAgICAgICAgcmVzdWx0LmFwcGVuZChncHUpXG4gICAgb3V0cHV0ID0gb3B0aW9uYWxfY29tbWFuZChbJ252aWRpYS1zbWknLCAnLS1xdWVyeS1ncHU9cGNpLmJ1c19pZCxuYW1lLGRyaXZlcl92ZXJzaW9uLG1lbW9yeS50b3RhbCxjbG9ja3MubWF4LmdyYXBoaWNzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLS1mb3JtYXQ9Y3N2LG5vaGVhZGVyLG5vdW5pdHMnXSlcbiAgICBxdWVyeV9oZWxwID0gb3B0aW9uYWxfY29tbWFuZChbJ252aWRpYS1zbWknLCAnLS1oZWxwLXF1ZXJ5LWdwdSddKSBpZiBvdXRwdXQgZWxzZSBOb25lXG4gICAgZm9yIHJvdyBpbiBjc3YucmVhZGVyKChvdXRwdXQgb3IgJycpLnNwbGl0bGluZXMoKSwgc2tpcGluaXRpYWxzcGFjZT1UcnVlKTpcbiAgICAgICAgaWYgbGVuKHJvdykgIT0gNTpcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIGFkZHJlc3MgPSByb3dbMF0ubG93ZXIoKVstMTI6XVxuICAgICAgICBncHUgPSBuZXh0KChpdGVtIGZvciBpdGVtIGluIHJlc3VsdCBpZiBpdGVtWydwY2lfYWRkcmVzcyddLmxvd2VyKCkgPT0gYWRkcmVzcyksIE5vbmUpXG4gICAgICAgIGlmIGdwdSBpcyBOb25lOlxuICAgICAgICAgICAgZ3B1ID0gZGljdChkZXZpY2Vfa2V5PWFkZHJlc3MsIHBjaV9hZGRyZXNzPWFkZHJlc3MpXG4gICAgICAgICAgICByZXN1bHQuYXBwZW5kKGdwdSlcbiAgICAgICAgZ3B1LnVwZGF0ZSh2ZW5kb3I9J05WSURJQScsIG1vZGVsPXJvd1sxXSwgZHJpdmVyX3ZlcnNpb249cm93WzJdLCBtZW1vcnlfYnl0ZXM9bnVtYmVyKHJvd1szXSwgMTAyNCoqMiksXG4gICAgICAgICAgICAgICAgICAgbWF4X2Nsb2NrX21oej1udW1iZXIocm93WzRdKSlcbiAgICAgICAgZm9yIGZpZWxkLCBrZXkgaW4gWygnbnVtX2NvcmVzJywgJ2NvcmVfY291bnQnKSwgKCdtdWx0aXByb2Nlc3Nvcl9jb3VudCcsICdtdWx0aXByb2Nlc3Nvcl9jb3VudCcpXTpcbiAgICAgICAgICAgIGlmIHF1ZXJ5X2hlbHAgYW5kICgnXFxcIicgKyBmaWVsZCArICdcXFwiJykgaW4gcXVlcnlfaGVscDpcbiAgICAgICAgICAgICAgICBncHVba2V5XSA9IG51bWJlcihvcHRpb25hbF9jb21tYW5kKFsnbnZpZGlhLXNtaScsICctLWlkPScgKyByb3dbMF0sICctLXF1ZXJ5LWdwdT0nICsgZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctLWZvcm1hdD1jc3Ysbm9oZWFkZXIsbm91bml0cyddKSlcbiAgICByZXR1cm4gcmVzdWx0Wzo2NF1cblxuXG5kZWYgbmV0d29ya19pbnZlbnRvcnkoKTpcbiAgICBvdXRwdXQgPSBvcHRpb25hbF9jb21tYW5kKFsnaXAnLCAnLWpzb24nLCAnYWRkcmVzcycsICdzaG93J10pXG4gICAgaWYgb3V0cHV0IGlzIE5vbmU6XG4gICAgICAgIHJldHVybiBOb25lXG4gICAgdHJ5OlxuICAgICAgICBpbnRlcmZhY2VzID0ganNvbi5sb2FkcyhvdXRwdXQpXG4gICAgZXhjZXB0IFZhbHVlRXJyb3I6XG4gICAgICAgIHJldHVybiBOb25lXG4gICAgcmVzdWx0ID0gW11cbiAgICBmb3IgaW50ZXJmYWNlIGluIGludGVyZmFjZXM6XG4gICAgICAgIG5hbWUgPSBpbnRlcmZhY2VbJ2lmbmFtZSddXG4gICAgICAgIHBhdGggPSBQYXRoKCcvc3lzL2NsYXNzL25ldCcpIC8gbmFtZVxuICAgICAgICBkZXZpY2UgPSAocGF0aCAvICdkZXZpY2UnKS5yZXNvbHZlKClcbiAgICAgICAgZGV0YWlscyA9IHBjaV9kZXRhaWxzKGRldmljZSkgaWYgKGRldmljZSAvICd2ZW5kb3InKS5leGlzdHMoKSBlbHNlIGRpY3QobW9kZWw9Tm9uZSwgdmVuZG9yPU5vbmUpXG4gICAgICAgIGNvbm5lY3Rpb24gPSAnd2lmaScgaWYgKHBhdGggLyAnd2lyZWxlc3MnKS5leGlzdHMoKSBlbHNlICdldGhlcm5ldCcgaWYgKHBhdGggLyAnZGV2aWNlJykuZXhpc3RzKCkgZWxzZSAndmlydHVhbCdcbiAgICAgICAgZHJpdmVyID0gKHBhdGggLyAnZGV2aWNlL2RyaXZlcicpLnJlc29sdmUoKS5uYW1lIGlmIChwYXRoIC8gJ2RldmljZS9kcml2ZXInKS5leGlzdHMoKSBlbHNlIE5vbmVcbiAgICAgICAgYWRkcmVzc2VzID0gW2RpY3QoYWRkcmVzcz1pdGVtWydsb2NhbCddLCBwcmVmaXhfbGVuZ3RoPWl0ZW1bJ3ByZWZpeGxlbiddLCBzY29wZT1pdGVtLmdldCgnc2NvcGUnKSlcbiAgICAgICAgICAgICAgICAgICAgIGZvciBpdGVtIGluIGludGVyZmFjZS5nZXQoJ2FkZHJfaW5mbycsIFtdKSBpZiBpdGVtLmdldCgnZmFtaWx5JykgaW4gKCdpbmV0JywgJ2luZXQ2JyldXG4gICAgICAgIHJlc3VsdC5hcHBlbmQoZGljdChkZXZpY2Vfa2V5PW5hbWUsICoqZGV0YWlscywgZHJpdmVyPWRyaXZlciwgY29ubmVjdGlvbl90eXBlPWNvbm5lY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNfYWRkcmVzcz1pbnRlcmZhY2UuZ2V0KCdhZGRyZXNzJyksIGxpbmtfc3RhdGU9aW50ZXJmYWNlLmdldCgnb3BlcnN0YXRlJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVlZF9tYnBzPW51bWJlcihyZWFkX3RleHQocGF0aCAvICdzcGVlZCcpKSwgbXR1PWludGVyZmFjZS5nZXQoJ210dScpLCBhZGRyZXNzZXM9YWRkcmVzc2VzWzozMl0pKVxuICAgIHJldHVybiByZXN1bHRbOjY0XVxuXG5cbmRlZiBjaV9yZXNlcnZhdGlvbigpOlxuICAgIHBhdGggPSBQYXRoKCcvc3lzL2ZzL2Nncm91cC9jaS5zbGljZS9tZW1vcnkubWF4JylcbiAgICB2YWx1ZSA9IHBhdGgucmVhZF90ZXh0KCkuc3RyaXAoKSBpZiBwYXRoLmV4aXN0cygpIGVsc2UgJydcbiAgICByZXR1cm4gaW50KHZhbHVlKSBpZiB2YWx1ZS5pc2RpZ2l0KCkgZWxzZSBOb25lXG5cblxuZGVmIGludmVudG9yeSgpOlxuICAgIHRyeTpcbiAgICAgICAgcmVsZWFzZSA9IHBsYXRmb3JtLmZyZWVkZXNrdG9wX29zX3JlbGVhc2UoKVxuICAgIGV4Y2VwdCBPU0Vycm9yOlxuICAgICAgICByZWxlYXNlID0ge31cbiAgICByZXN1bHQgPSBkaWN0KGhvc3RuYW1lPXNvY2tldC5nZXRob3N0bmFtZSgpLCBtYW51ZmFjdHVyZXI9cmVhZF90ZXh0KCcvc3lzL2NsYXNzL2RtaS9pZC9zeXNfdmVuZG9yJyksXG4gICAgICAgICAgICAgICAgICBoYXJkd2FyZV9tb2RlbD1yZWFkX3RleHQoJy9zeXMvY2xhc3MvZG1pL2lkL3Byb2R1Y3RfbmFtZScpLCBhcmNoaXRlY3R1cmU9cGxhdGZvcm0ubWFjaGluZSgpLFxuICAgICAgICAgICAgICAgICAgb3NfbmFtZT1yZWxlYXNlLmdldCgnTkFNRScpLCBvc192ZXJzaW9uPXJlbGVhc2UuZ2V0KCdWRVJTSU9OX0lEJyksIGtlcm5lbF92ZXJzaW9uPXBsYXRmb3JtLnJlbGVhc2UoKSxcbiAgICAgICAgICAgICAgICAgIGNpX21lbW9yeV9yZXNlcnZlZF9ieXRlcz1jaV9yZXNlcnZhdGlvbigpLFxuICAgICAgICAgICAgICAgICAgbWVtb3J5X2J5dGVzPW1lbW9yeSgpLmdldCgnTWVtVG90YWwnKSwgZGlza19ieXRlcz1zaHV0aWwuZGlza191c2FnZShST09UKS50b3RhbCwgKipjcHVfaW52ZW50b3J5KCkpXG4gICAgaWYgSE9TVC5nZXQoJ2hhcmR3YXJlX21vZGVsJyk6XG4gICAgICAgIHJlc3VsdFsnbWFudWZhY3R1cmVyJ10gPSBIT1NULmdldCgnbWFudWZhY3R1cmVyJykgb3IgcmVzdWx0WydtYW51ZmFjdHVyZXInXSBvciAnQXBwbGUnXG4gICAgICAgIHJlc3VsdFsnaGFyZHdhcmVfbW9kZWwnXSA9IEhPU1RbJ2hhcmR3YXJlX21vZGVsJ11cbiAgICBmb3Iga2V5LCBjb2xsZWN0b3IgaW4gWygnZGlza3MnLCBkaXNrX2ludmVudG9yeSksICgnZ3B1cycsIGdwdV9pbnZlbnRvcnkpLCAoJ25ldHdvcmtfaW50ZXJmYWNlcycsIG5ldHdvcmtfaW52ZW50b3J5KV06XG4gICAgICAgIHRyeTpcbiAgICAgICAgICAgIHZhbHVlID0gY29sbGVjdG9yKClcbiAgICAgICAgICAgIGlmIHZhbHVlIGlzIG5vdCBOb25lOlxuICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWVcbiAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBWYWx1ZUVycm9yLCBLZXlFcnJvciwgVHlwZUVycm9yKTpcbiAgICAgICAgICAgIHBhc3NcbiAgICByZXR1cm4gcmVzdWx0XG5cblxuZGVmIGFwcGx5X2hvc3RfcG93ZXIocmVzdWx0KTpcbiAgICBmb3Iga2V5IGluICgnYmF0dGVyeV9wcmVzZW50JywgJ2FjX2Nvbm5lY3RlZCcsICdiYXR0ZXJ5X3BlcmNlbnQnLCAnYmF0dGVyeV9zdGF0dXMnLCAnYmF0dGVyeV9yZW1haW5pbmdfc2Vjb25kcycpOlxuICAgICAgICBpZiBIT1NULmdldChrZXkpIGlzIG5vdCBOb25lOlxuICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBIT1NUW2tleV1cbiAgICByZXR1cm4gcmVzdWx0XG5cblxuZGVmIHBvd2VyX2ludmVudG9yeShyb290PVBhdGgoJy9zeXMvY2xhc3MvcG93ZXJfc3VwcGx5JykpOlxuICAgIHJlc3VsdCA9IGRpY3QoYmF0dGVyeV9wcmVzZW50PU5vbmUsIGFjX2Nvbm5lY3RlZD1Ob25lLCBiYXR0ZXJ5X3BlcmNlbnQ9Tm9uZSxcbiAgICAgICAgICAgICAgICAgIGJhdHRlcnlfc3RhdHVzPU5vbmUsIGJhdHRlcnlfcmVtYWluaW5nX3NlY29uZHM9Tm9uZSxcbiAgICAgICAgICAgICAgICAgIHBvd2VyX3Byb2ZpbGU9cmVhZF90ZXh0KCcvc3lzL2Zpcm13YXJlL2FjcGkvcGxhdGZvcm1fcHJvZmlsZScpKVxuICAgIHRyeTpcbiAgICAgICAgc3VwcGxpZXMgPSBsaXN0KHJvb3QuaXRlcmRpcigpKVxuICAgIGV4Y2VwdCBPU0Vycm9yOlxuICAgICAgICByZXR1cm4gYXBwbHlfaG9zdF9wb3dlcihyZXN1bHQpXG4gICAgYmF0dGVyaWVzLCBleHRlcm5hbCA9IFtdLCBbXVxuICAgIGZvciBzdXBwbHkgaW4gc3VwcGxpZXM6XG4gICAgICAgIGlmIHJlYWRfdGV4dChzdXBwbHkgLyAnc2NvcGUnKSA9PSAnRGV2aWNlJzpcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIGtpbmQgPSByZWFkX3RleHQoc3VwcGx5IC8gJ3R5cGUnKVxuICAgICAgICBpZiBraW5kID09ICdCYXR0ZXJ5JyBhbmQgcmVhZF90ZXh0KHN1cHBseSAvICdwcmVzZW50JykgIT0gJzAnOlxuICAgICAgICAgICAgYmF0dGVyaWVzLmFwcGVuZChzdXBwbHkpXG4gICAgICAgIGVsaWYga2luZCBpbiAoJ01haW5zJywgJ1VTQicsICdVU0JfQycsICdVU0JfUEQnLCAnVVNCX1BEX0RSUCcsICdXaXJlbGVzcycpOlxuICAgICAgICAgICAgb25saW5lID0gcmVhZF90ZXh0KHN1cHBseSAvICdvbmxpbmUnKVxuICAgICAgICAgICAgaWYgb25saW5lIGluICgnMCcsICcxJyk6XG4gICAgICAgICAgICAgICAgZXh0ZXJuYWwuYXBwZW5kKG9ubGluZSA9PSAnMScpXG4gICAgcmVzdWx0WydiYXR0ZXJ5X3ByZXNlbnQnXSA9IGJvb2woYmF0dGVyaWVzKVxuICAgIGlmIGV4dGVybmFsOlxuICAgICAgICByZXN1bHRbJ2FjX2Nvbm5lY3RlZCddID0gYW55KGV4dGVybmFsKVxuICAgIHBlcmNlbnRhZ2VzLCBzdGF0dXNlcywgcnVudGltZXMgPSBbXSwgW10sIFtdXG4gICAgZm9yIGJhdHRlcnkgaW4gYmF0dGVyaWVzOlxuICAgICAgICBwZXJjZW50ID0gbnVtYmVyKHJlYWRfdGV4dChiYXR0ZXJ5IC8gJ2NhcGFjaXR5JykpXG4gICAgICAgIGlmIHBlcmNlbnQgaXMgbm90IE5vbmUgYW5kIHBlcmNlbnQgPD0gMTAwOlxuICAgICAgICAgICAgcGVyY2VudGFnZXMuYXBwZW5kKHBlcmNlbnQpXG4gICAgICAgIHN0YXR1cyA9IHJlYWRfdGV4dChiYXR0ZXJ5IC8gJ3N0YXR1cycpXG4gICAgICAgIGlmIHN0YXR1czpcbiAgICAgICAgICAgIHN0YXR1c2VzLmFwcGVuZChzdGF0dXMpXG4gICAgICAgIGlmIHN0YXR1cyA9PSAnRGlzY2hhcmdpbmcnOlxuICAgICAgICAgICAgc2Vjb25kcyA9IG51bWJlcihyZWFkX3RleHQoYmF0dGVyeSAvICd0aW1lX3RvX2VtcHR5X25vdycpKVxuICAgICAgICAgICAgZW5lcmd5LCB3YXR0cyA9IG51bWJlcihyZWFkX3RleHQoYmF0dGVyeSAvICdlbmVyZ3lfbm93JykpLCBudW1iZXIocmVhZF90ZXh0KGJhdHRlcnkgLyAncG93ZXJfbm93JykpXG4gICAgICAgICAgICBpZiBzZWNvbmRzIGlzIE5vbmUgYW5kIGVuZXJneSBpcyBub3QgTm9uZSBhbmQgd2F0dHM6XG4gICAgICAgICAgICAgICAgc2Vjb25kcyA9IGVuZXJneSAvIHdhdHRzICogMzYwMFxuICAgICAgICAgICAgaWYgc2Vjb25kcyBpcyBub3QgTm9uZTpcbiAgICAgICAgICAgICAgICBydW50aW1lcy5hcHBlbmQoaW50KHNlY29uZHMpKVxuICAgIHJlc3VsdFsnYmF0dGVyeV9wZXJjZW50J10gPSBtaW4ocGVyY2VudGFnZXMsIGRlZmF1bHQ9Tm9uZSlcbiAgICByZXN1bHRbJ2JhdHRlcnlfcmVtYWluaW5nX3NlY29uZHMnXSA9IG1pbihydW50aW1lcywgZGVmYXVsdD1Ob25lKVxuICAgIHJlc3VsdFsnYmF0dGVyeV9zdGF0dXMnXSA9ICdEaXNjaGFyZ2luZycgaWYgJ0Rpc2NoYXJnaW5nJyBpbiBzdGF0dXNlcyBlbHNlIHN0YXR1c2VzWzBdIGlmIHN0YXR1c2VzIGVsc2UgTm9uZVxuICAgIGlmIHJlc3VsdFsnYWNfY29ubmVjdGVkJ10gaXMgTm9uZSBhbmQgJ0Rpc2NoYXJnaW5nJyBpbiBzdGF0dXNlczpcbiAgICAgICAgcmVzdWx0WydhY19jb25uZWN0ZWQnXSA9IEZhbHNlXG4gICAgcmV0dXJuIGFwcGx5X2hvc3RfcG93ZXIocmVzdWx0KVxuXG5cbmRlZiB1cGxpbmtfa2luZCh3aWZpLCBpZmFjZSk6XG4gICAgaWYgd2lmaTpcbiAgICAgICAgcmV0dXJuICd3aWZpJ1xuICAgIGlmIGlmYWNlOlxuICAgICAgICByZXR1cm4gJ2V0aGVybmV0J1xuICAgIHJldHVybiAndW5rbm93bidcblxuXG5kZWYgaXNvX2Zyb21fdW5peCh2YWx1ZSk6XG4gICAgdHJ5OlxuICAgICAgICBzdGFtcCA9IGZsb2F0KHZhbHVlKVxuICAgIGV4Y2VwdCAoVHlwZUVycm9yLCBWYWx1ZUVycm9yKTpcbiAgICAgICAgcmV0dXJuIE5vbmVcbiAgICBpZiBzdGFtcCA8PSAwOlxuICAgICAgICByZXR1cm4gTm9uZVxuICAgIHJldHVybiB0aW1lLnN0cmZ0aW1lKCclWS0lbS0lZFQlSDolTTolU1onLCB0aW1lLmdtdGltZShzdGFtcCkpXG5cblxuZGVmIGZhaWxlZF91cGxpbmsoa2luZD0ndW5rbm93bicpOlxuICAgIHJldHVybiB7XG4gICAgICAgICd1cGxpbmtfa2luZCc6IGtpbmQsXG4gICAgICAgICd1cGxpbmtfcHJvYmVfb2snOiBGYWxzZSxcbiAgICAgICAgJ3VwbGlua19wcm9iZV9icHMnOiAwLFxuICAgICAgICAndXBsaW5rX3Byb2JlZF9hdCc6IHRpbWUuc3RyZnRpbWUoJyVZLSVtLSVkVCVIOiVNOiVTWicsIHRpbWUuZ210aW1lKCkpLFxuICAgIH1cblxuXG5kZWYgb3B0aW9uYWxfYm9vbChib2R5LCBrZXkpOlxuICAgIHZhbHVlID0gYm9keS5nZXQoa2V5KVxuICAgIHJldHVybiB2YWx1ZSBpZiB2YWx1ZSBpbiAoVHJ1ZSwgRmFsc2UpIGVsc2UgTm9uZVxuXG5cbmRlZiBhcHBseV9ob3N0X2Zyb21faGVscGVyKGJvZHkpOlxuICAgIG1vZGVsID0gYm9keS5nZXQoJ2hhcmR3YXJlX21vZGVsJylcbiAgICBpZiBpc2luc3RhbmNlKG1vZGVsLCBzdHIpIGFuZCBtb2RlbC5zdHJpcCgpOlxuICAgICAgICBIT1NUWydoYXJkd2FyZV9tb2RlbCddID0gbW9kZWwuc3RyaXAoKVs6MjU1XVxuICAgICAgICBtYW51ZmFjdHVyZXIgPSBib2R5LmdldCgnbWFudWZhY3R1cmVyJylcbiAgICAgICAgSE9TVFsnbWFudWZhY3R1cmVyJ10gPSBtYW51ZmFjdHVyZXIuc3RyaXAoKVs6MjU1XSBpZiBpc2luc3RhbmNlKG1hbnVmYWN0dXJlciwgc3RyKSBhbmQgbWFudWZhY3R1cmVyLnN0cmlwKCkgZWxzZSAnQXBwbGUnXG4gICAgZm9yIGtleSBpbiAoJ2JhdHRlcnlfcHJlc2VudCcsICdhY19jb25uZWN0ZWQnKTpcbiAgICAgICAgdmFsdWUgPSBvcHRpb25hbF9ib29sKGJvZHksIGtleSlcbiAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6XG4gICAgICAgICAgICBIT1NUW2tleV0gPSB2YWx1ZVxuICAgIHBlcmNlbnQgPSBib2R5LmdldCgnYmF0dGVyeV9wZXJjZW50JylcbiAgICBpZiBpc2luc3RhbmNlKHBlcmNlbnQsIChpbnQsIGZsb2F0KSkgYW5kIDAgPD0gcGVyY2VudCA8PSAxMDA6XG4gICAgICAgIEhPU1RbJ2JhdHRlcnlfcGVyY2VudCddID0gaW50KHBlcmNlbnQpXG4gICAgc3RhdHVzID0gYm9keS5nZXQoJ2JhdHRlcnlfc3RhdHVzJylcbiAgICBpZiBpc2luc3RhbmNlKHN0YXR1cywgc3RyKSBhbmQgc3RhdHVzLnN0cmlwKCk6XG4gICAgICAgIEhPU1RbJ2JhdHRlcnlfc3RhdHVzJ10gPSBzdGF0dXMuc3RyaXAoKVs6MjU1XVxuXG5cbmRlZiByZWFkX2hlbHBlcl91cGxpbmsoKTpcbiAgICBwYXJzZWQgPSBzdG9yYWdlX3Byb3h5KClcbiAgICBjb25uZWN0aW9uID0gaHR0cC5jbGllbnQuSFRUUENvbm5lY3Rpb24ocGFyc2VkLmhvc3RuYW1lLCBwYXJzZWQucG9ydCBvciA4MCwgdGltZW91dD0xNSlcbiAgICB0cnk6XG4gICAgICAgIGNvbm5lY3Rpb24ucmVxdWVzdCgnR0VUJywgJy91cGxpbmsnKVxuICAgICAgICByZXNwb25zZSA9IGNvbm5lY3Rpb24uZ2V0cmVzcG9uc2UoKVxuICAgICAgICByYXcgPSByZXNwb25zZS5yZWFkKDY1NTM3KVxuICAgICAgICBpZiByZXNwb25zZS5zdGF0dXMgIT0gMjAwIG9yIGxlbihyYXcpID4gNjU1MzY6XG4gICAgICAgICAgICByYWlzZSBPU0Vycm9yKCd1cGxpbmsgcHJvYmUgdW5hdmFpbGFibGUnKVxuICAgICAgICBib2R5ID0ganNvbi5sb2FkcyhyYXcuZGVjb2RlKCkpXG4gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGJvZHksIGRpY3QpOlxuICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigndXBsaW5rIHByb2JlIHVuYXZhaWxhYmxlJylcbiAgICAgICAgYXBwbHlfaG9zdF9mcm9tX2hlbHBlcihib2R5KVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3VwbGlua19raW5kJzogdXBsaW5rX2tpbmQoYm9vbChib2R5LmdldCgnd2lmaScpKSwgYm9keS5nZXQoJ2lmYWNlJykpLFxuICAgICAgICAgICAgJ3VwbGlua19wcm9iZV9vayc6IGJvZHkuZ2V0KCdvaycpIGlzIFRydWUsXG4gICAgICAgICAgICAndXBsaW5rX3Byb2JlX2Jwcyc6IGludChib2R5LmdldCgnYnBzJykgb3IgMCksXG4gICAgICAgICAgICAndXBsaW5rX3Byb2JlZF9hdCc6IGlzb19mcm9tX3VuaXgoYm9keS5nZXQoJ3Byb2JlZF9hdCcpKSxcbiAgICAgICAgfVxuICAgIGZpbmFsbHk6XG4gICAgICAgIGNvbm5lY3Rpb24uY2xvc2UoKVxuXG5cbmRlZiBwcm9iZV9jbG91ZGZsYXJlX3VwbGluaygpOlxuICAgIHN0YXJ0ZWQgPSB0aW1lLm1vbm90b25pYygpXG4gICAgcGF5bG9hZCA9IGInXFwwJyAqIFBST0JFX0JZVEVTXG4gICAgY3R4ID0gc3NsLmNyZWF0ZV9kZWZhdWx0X2NvbnRleHQoKVxuICAgIGN0eC5taW5pbXVtX3ZlcnNpb24gPSBzc2wuVExTVmVyc2lvbi5UTFN2MV8yXG4gICAgY29ubiA9IGh0dHAuY2xpZW50LkhUVFBTQ29ubmVjdGlvbihQUk9CRV9IT1NULCA0NDMsIHRpbWVvdXQ9UFJPQkVfVElNRU9VVCwgY29udGV4dD1jdHgpXG4gICAgdHJ5OlxuICAgICAgICBjb25uLnJlcXVlc3QoJ1BVVCcsIFBST0JFX1BBVEgsIGJvZHk9cGF5bG9hZCwgaGVhZGVycz17J0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nfSlcbiAgICAgICAgcmVzcG9uc2UgPSBjb25uLmdldHJlc3BvbnNlKClcbiAgICAgICAgcmVzcG9uc2UucmVhZCgpXG4gICAgICAgIGVsYXBzZWQgPSBtYXgodGltZS5tb25vdG9uaWMoKSAtIHN0YXJ0ZWQsIDAuMDAxKVxuICAgICAgICBvayA9IHJlc3BvbnNlLnN0YXR1cyBpbiAoMjAwLCA0MDMpXG4gICAgICAgIHJldHVybiBvaywgaW50KFBST0JFX0JZVEVTIC8gZWxhcHNlZCkgaWYgb2sgZWxzZSAwXG4gICAgZXhjZXB0IChPU0Vycm9yLCBzc2wuU1NMRXJyb3IsIGh0dHAuY2xpZW50LkhUVFBFeGNlcHRpb24sIFZhbHVlRXJyb3IpOlxuICAgICAgICByZXR1cm4gRmFsc2UsIDBcbiAgICBmaW5hbGx5OlxuICAgICAgICBjb25uLmNsb3NlKClcblxuXG5kZWYgcmVmcmVzaF91cGxpbmsoZm9yY2U9RmFsc2UpOlxuICAgIGdsb2JhbCBVUExJTktfQVRcbiAgICBub3cgPSB0aW1lLm1vbm90b25pYygpXG4gICAgcHJveHkgPSBzdG9yYWdlX3Byb3h5KClcbiAgICB3aXRoIFVQTElOS19MT0NLOlxuICAgICAgICBpZiBub3QgZm9yY2UgYW5kIG5vdCBwcm94eSBhbmQgVVBMSU5LWyd1cGxpbmtfcHJvYmVkX2F0J10gYW5kIG5vdyAtIFVQTElOS19BVCA8IFVQTElOS19JTlRFUlZBTDpcbiAgICAgICAgICAgIHJldHVybiBkaWN0KFVQTElOSylcbiAgICB0cnk6XG4gICAgICAgIGlmIHByb3h5OlxuICAgICAgICAgICAgc3RhdGUgPSByZWFkX2hlbHBlcl91cGxpbmsoKVxuICAgICAgICBlbHNlOlxuICAgICAgICAgICAgb2ssIGJwcyA9IHByb2JlX2Nsb3VkZmxhcmVfdXBsaW5rKClcbiAgICAgICAgICAgIHN0YXRlID0ge1xuICAgICAgICAgICAgICAgICd1cGxpbmtfa2luZCc6IHVwbGlua19raW5kKHdpZmlfZGVmYXVsdF9yb3V0ZSgpLCBUcnVlKSxcbiAgICAgICAgICAgICAgICAndXBsaW5rX3Byb2JlX29rJzogb2ssXG4gICAgICAgICAgICAgICAgJ3VwbGlua19wcm9iZV9icHMnOiBicHMsXG4gICAgICAgICAgICAgICAgJ3VwbGlua19wcm9iZWRfYXQnOiB0aW1lLnN0cmZ0aW1lKCclWS0lbS0lZFQlSDolTTolU1onLCB0aW1lLmdtdGltZSgpKSxcbiAgICAgICAgICAgIH1cbiAgICBleGNlcHQgRXhjZXB0aW9uOlxuICAgICAgICBzdGF0ZSA9IGZhaWxlZF91cGxpbmsoJ3Vua25vd24nIGlmIHByb3h5IGVsc2UgdXBsaW5rX2tpbmQod2lmaV9kZWZhdWx0X3JvdXRlKCksIFRydWUpKVxuICAgIHdpdGggVVBMSU5LX0xPQ0s6XG4gICAgICAgIFVQTElOSy51cGRhdGUoc3RhdGUpXG4gICAgICAgIFVQTElOS19BVCA9IG5vd1xuICAgICAgICByZXR1cm4gZGljdChVUExJTkspXG5cblxuQ1BVX1NBTVBMRSA9IE5vbmVcbkNQVV9QRVJDRU5UUyA9IChOb25lLCBOb25lKVxuQ1BVX0xPQ0sgPSB0aHJlYWRpbmcuTG9jaygpXG5DUFVfSU5URVJWQUwgPSAxXG5QUk9DX1NUQVQgPSBQYXRoKCcvcHJvYy9zdGF0JylcbiMgVGhlIGFnZW50IHNlcnZpY2UsIGl0cyB0YXNrcyBhbmQgQ0kgYWxsIHJ1biBpbiB0aGVzZSBzbGljZXMuXG5XT1JLRVJfU0xJQ0VTID0gKFBhdGgoJy9zeXMvZnMvY2dyb3VwL2NvbXB1dGUuc2xpY2UnKSwgUGF0aCgnL3N5cy9mcy9jZ3JvdXAvY2kuc2xpY2UnKSlcblxuXG5kZWYgd29ya2VyX2NwdV9zZWNvbmRzKCk6XG4gICAgXCJcIlwiQ1BVIHNlY29uZHMgZWFjaCB3b3JrZXIgc2xpY2UgaGFzIHVzZWQ7IGEgc2xpY2UgdGhhdCBpcyBtaXNzaW5nIG9yIHVucmVhZGFibGUgaXMgbGVmdCBvdXQuXCJcIlwiXG4gICAgdXNlZCA9IHt9XG4gICAgZm9yIHBhdGggaW4gV09SS0VSX1NMSUNFUzpcbiAgICAgICAgdHJ5OlxuICAgICAgICAgICAgc3RhdHMgPSBkaWN0KGxpbmUuc3BsaXQoKSBmb3IgbGluZSBpbiAocGF0aCAvICdjcHUuc3RhdCcpLnJlYWRfdGV4dCgpLnNwbGl0bGluZXMoKSBpZiBsaW5lLnN0cmlwKCkpXG4gICAgICAgICAgICB1c2VkW3BhdGhdID0gaW50KHN0YXRzWyd1c2FnZV91c2VjJ10pIC8gMTAwMDAwMFxuICAgICAgICBleGNlcHQgKE9TRXJyb3IsIFZhbHVlRXJyb3IsIEtleUVycm9yKTpcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgcmV0dXJuIHVzZWRcblxuXG5kZWYgaG9zdF9jcHVfcGVyY2VudHMoKTpcbiAgICBcIlwiXCJXaG9sZS1ob3N0IGFuZCBvd25lciBDUFUgcGVyY2VudCBzaW5jZSB0aGUgcHJldmlvdXMgc2FtcGxlLCBhdCBsZWFzdCBDUFVfSU5URVJWQUwgYXBhcnQuXG5cbiAgICBUaGUgb3duZXIncyBzaGFyZSBsZWF2ZXMgb3V0IHRoZSB3b3JrZXIgc2xpY2VzLCBzbyB0aGUgd29ya2VyJ3Mgb3duIGxvYWQgbmV2ZXIgbWFrZXMgaXQgYnVzeS5cbiAgICBCb3RoIHRoZSBoZWFydGJlYXQgYW5kIHRoZSBjbGFpbSBsb29wIGFzazsgYSBjYWxsIHdpdGhpbiB0aGUgaW50ZXJ2YWwgZ2V0cyB0aGUgbGFzdCByZXN1bHQuXG4gICAgXCJcIlwiXG4gICAgZ2xvYmFsIENQVV9TQU1QTEUsIENQVV9QRVJDRU5UU1xuICAgIHdpdGggQ1BVX0xPQ0s6XG4gICAgICAgIG5vdyA9IHRpbWUubW9ub3RvbmljKClcbiAgICAgICAgaWYgQ1BVX1NBTVBMRSBpcyBub3QgTm9uZSBhbmQgbm93IC0gQ1BVX1NBTVBMRVswXSA8IENQVV9JTlRFUlZBTDpcbiAgICAgICAgICAgIHJldHVybiBDUFVfUEVSQ0VOVFNcbiAgICAgICAgY291bnRlcnMgPSBbaW50KHZhbHVlKSBmb3IgdmFsdWUgaW4gUFJPQ19TVEFULnJlYWRfdGV4dCgpLnNwbGl0bGluZXMoKVswXS5zcGxpdCgpWzE6OV1dXG4gICAgICAgIHRpY2tzID0gb3Muc3lzY29uZignU0NfQ0xLX1RDSycpXG4gICAgICAgIHNhbXBsZSA9IChub3csIHN1bShjb3VudGVycykgLyB0aWNrcywgKGNvdW50ZXJzWzNdICsgY291bnRlcnNbNF0pIC8gdGlja3MsIHdvcmtlcl9jcHVfc2Vjb25kcygpKVxuICAgICAgICBwcmV2aW91cywgQ1BVX1NBTVBMRSA9IENQVV9TQU1QTEUsIHNhbXBsZVxuICAgICAgICBpZiBwcmV2aW91cyBpcyBOb25lIG9yIHNhbXBsZVsxXSA8PSBwcmV2aW91c1sxXTpcbiAgICAgICAgICAgIENQVV9QRVJDRU5UUyA9IChOb25lLCBOb25lKVxuICAgICAgICAgICAgcmV0dXJuIENQVV9QRVJDRU5UU1xuICAgICAgICB0b3RhbCA9IHNhbXBsZVsxXSAtIHByZXZpb3VzWzFdXG4gICAgICAgIGJ1c3kgPSB0b3RhbCAtIChzYW1wbGVbMl0gLSBwcmV2aW91c1syXSlcbiAgICAgICAgIyBQZXIgc2xpY2UsIHNvIGEgc2xpY2UgdGhhdCB3YXMgcmVtb3ZlZCBvciByZWNyZWF0ZWQgYmV0d2VlbiBzYW1wbGVzIHN1YnRyYWN0cyBub3RoaW5nLlxuICAgICAgICB3b3JrZXIgPSBzdW0obWF4KDAsIHVzZWQgLSBwcmV2aW91c1szXS5nZXQocGF0aCwgdXNlZCkpIGZvciBwYXRoLCB1c2VkIGluIHNhbXBsZVszXS5pdGVtcygpKVxuICAgICAgICBvd25lciA9IGJ1c3kgLSB3b3JrZXJcbiAgICAgICAgQ1BVX1BFUkNFTlRTID0gdHVwbGUobWF4KDAsIG1pbigxMDAsIDEwMCAqIHZhbHVlIC8gdG90YWwpKSBmb3IgdmFsdWUgaW4gKGJ1c3ksIG93bmVyKSlcbiAgICAgICAgcmV0dXJuIENQVV9QRVJDRU5UU1xuXG5cbmRlZiBob3N0X2FjdGl2aXR5KCk6XG4gICAgXCJcIlwiQ29sbGVjdCBob3N0IG1lYXN1cmVtZW50cyBsb2NhbGx5LCBvciB1c2UgYSBmcmVzaCBob3N0IGhlbHBlciBmb3IgVk1zLlwiXCJcIlxuICAgIHdpbmRvd3MgPSByZWFkX2pzb24oUk9PVCAvICdob3N0LWFjdGl2aXR5LXBhdGguanNvbicpXG4gICAgaWYgd2luZG93czpcbiAgICAgICAgcmV0dXJuIHJlYWRfanNvbihQYXRoKHdpbmRvd3MpLCB7fSlcbiAgICBwcm94eSA9IHN0b3JhZ2VfcHJveHkoKVxuICAgIGlmIHByb3h5OlxuICAgICAgICB0cnk6XG4gICAgICAgICAgICB1cmkgPSB1cmxsaWIucGFyc2UudXJsdW5zcGxpdCgoJ2h0dHAnLCBwcm94eS5uZXRsb2MsICcvYWN0aXZpdHknLCAnJywgJycpKVxuICAgICAgICAgICAgcmVxdWVzdCA9IHVybGxpYi5yZXF1ZXN0LlJlcXVlc3QodXJpLCBoZWFkZXJzPXsnWC1ER0UtSGVscGVyLVRva2VuJzogb3MuZW52aXJvbi5nZXQoJ0RHRV9IRUxQRVJfVE9LRU4nLCAnJyl9KVxuICAgICAgICAgICAgd2l0aCB1cmxsaWIucmVxdWVzdC51cmxvcGVuKHJlcXVlc3QsIHRpbWVvdXQ9MykgYXMgcmVzcG9uc2U6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGpzb24ubG9hZHMocmVzcG9uc2UucmVhZCg0MDk3KSlcbiAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBWYWx1ZUVycm9yKTpcbiAgICAgICAgICAgIHJldHVybiB7fVxuICAgIHNlc3Npb25zID0gb3B0aW9uYWxfY29tbWFuZChbJ2xvZ2luY3RsJywgJ2xpc3Qtc2Vzc2lvbnMnLCAnLS1uby1sZWdlbmQnXSlcbiAgICBpZGxlID0gW11cbiAgICBpZiBzZXNzaW9ucyBpcyBub3QgTm9uZTpcbiAgICAgICAgZm9yIGxpbmUgaW4gc2Vzc2lvbnMuc3BsaXRsaW5lcygpOlxuICAgICAgICAgICAgaWYgbm90IGxpbmUuc3BsaXQoKTpcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgaWRlbnRpZmllciA9IGxpbmUuc3BsaXQoKVswXVxuICAgICAgICAgICAgZGV0YWlscyA9IG9wdGlvbmFsX2NvbW1hbmQoWydsb2dpbmN0bCcsICdzaG93LXNlc3Npb24nLCBpZGVudGlmaWVyLCAnLXAnLCAnVHlwZScsICctcCcsICdJZGxlSGludCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1wJywgJ0lkbGVTaW5jZUhpbnRNb25vdG9uaWMnXSlcbiAgICAgICAgICAgIGZpZWxkcyA9IGRpY3Qocm93LnNwbGl0KCc9JywgMSkgZm9yIHJvdyBpbiAoZGV0YWlscyBvciAnJykuc3BsaXRsaW5lcygpIGlmICc9JyBpbiByb3cpXG4gICAgICAgICAgICBpZiBmaWVsZHMuZ2V0KCdUeXBlJykgbm90IGluICgneDExJywgJ3dheWxhbmQnKTpcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgc2luY2UgPSBudW1iZXIoZmllbGRzLmdldCgnSWRsZVNpbmNlSGludE1vbm90b25pYycpKVxuICAgICAgICAgICAgaWRsZS5hcHBlbmQobWF4KDAsIHRpbWUubW9ub3RvbmljKCkgLSBzaW5jZSAvIDEwMDAwMDApXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiBmaWVsZHMuZ2V0KCdJZGxlSGludCcpID09ICd5ZXMnIGFuZCBzaW5jZSBlbHNlIDApXG4gICAgcG93ZXIgPSBwb3dlcl9pbnZlbnRvcnkoKVxuICAgIGNwdSwgb3duZXJfY3B1ID0gaG9zdF9jcHVfcGVyY2VudHMoKVxuICAgIHJldHVybiBkaWN0KHJlcG9ydGVkX2F0PXRpbWUuc3RyZnRpbWUoJyVZLSVtLSVkVCVIOiVNOiVTWicsIHRpbWUuZ210aW1lKCkpLFxuICAgICAgICAgICAgICAgIGlkbGVfc2Vjb25kcz1taW4oaWRsZSkgaWYgaWRsZSBlbHNlIE5vbmUsXG4gICAgICAgICAgICAgICAgY3B1X3BlcmNlbnQ9Y3B1LCBvd25lcl9jcHVfcGVyY2VudD1vd25lcl9jcHUsXG4gICAgICAgICAgICAgICAgbWVtb3J5X2F2YWlsYWJsZV9ieXRlcz1tZW1vcnkoKS5nZXQoJ01lbUF2YWlsYWJsZScpLFxuICAgICAgICAgICAgICAgIGJhdHRlcnlfcHJlc2VudD1wb3dlci5nZXQoJ2JhdHRlcnlfcHJlc2VudCcpLCBhY19jb25uZWN0ZWQ9cG93ZXIuZ2V0KCdhY19jb25uZWN0ZWQnKSlcblxuXG5kZWYgY2xhaW1fYWxsb3dlZChwb2xpY3ksIGFjdGl2aXR5KTpcbiAgICBpZiBwb2xpY3kgaXMgTm9uZTpcbiAgICAgICAgcmV0dXJuIEZhbHNlXG4gICAgdHJ5OlxuICAgICAgICBmb3Iga2V5IGluICgnaWRsZV9zZWNvbmRzJywgJ2NwdV9wZXJjZW50JywgJ293bmVyX2NwdV9wZXJjZW50JywgJ21lbW9yeV9hdmFpbGFibGVfYnl0ZXMnKTpcbiAgICAgICAgICAgIHZhbHVlID0gYWN0aXZpdHkuZ2V0KGtleSlcbiAgICAgICAgICAgIGlmIHZhbHVlIGlzIG5vdCBOb25lIGFuZCAodHlwZSh2YWx1ZSkgbm90IGluIChmbG9hdCwgaW50KSBvciBub3QgbWF0aC5pc2Zpbml0ZSh2YWx1ZSkgb3IgdmFsdWUgPCAwKTpcbiAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2VcbiAgICAgICAgYWdlID0gdGltZS50aW1lKCkgLSBjYWxlbmRhci50aW1lZ20odGltZS5zdHJwdGltZShhY3Rpdml0eVsncmVwb3J0ZWRfYXQnXSwgJyVZLSVtLSVkVCVIOiVNOiVTWicpKVxuICAgICAgICBpZiBwb2xpY3kuZ2V0KCdpZGxlX29ubHknLCBUcnVlKSBvciBwb2xpY3kuZ2V0KCdhY19vbmx5JywgVHJ1ZSk6XG4gICAgICAgICAgICBpZiBub3QgLTUgPD0gYWdlIDw9IDYwIG9yIGFjdGl2aXR5LmdldCgnbWVtb3J5X2F2YWlsYWJsZV9ieXRlcycpIGlzIE5vbmU6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlXG4gICAgICAgIGlmIHBvbGljeS5nZXQoJ2FjX29ubHknLCBUcnVlKSBhbmQgbm90IChhY3Rpdml0eS5nZXQoJ2JhdHRlcnlfcHJlc2VudCcpIGlzIEZhbHNlIG9yIGFjdGl2aXR5LmdldCgnYWNfY29ubmVjdGVkJykgaXMgVHJ1ZSk6XG4gICAgICAgICAgICByZXR1cm4gRmFsc2VcbiAgICAgICAgaWYgcG9saWN5LmdldCgnaWRsZV9vbmx5JywgVHJ1ZSk6XG4gICAgICAgICAgICAjIFdob2xlLWhvc3QgQ1BVIGNvdW50cyB0aGlzIHdvcmtlcidzIG93biBsb2FkOyBvbmx5IHJlcG9ydGVycyB3aXRob3V0IHRoZSBvd25lciBzaGFyZSB1c2UgaXQuXG4gICAgICAgICAgICBjcHUgPSBhY3Rpdml0eS5nZXQoJ293bmVyX2NwdV9wZXJjZW50JylcbiAgICAgICAgICAgIGNwdSA9IGFjdGl2aXR5LmdldCgnY3B1X3BlcmNlbnQnKSBpZiBjcHUgaXMgTm9uZSBlbHNlIGNwdVxuICAgICAgICAgICAgaWYgYWN0aXZpdHkuZ2V0KCdpZGxlX3NlY29uZHMnKSBpcyBOb25lIG9yIGNwdSBpcyBOb25lOlxuICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZVxuICAgICAgICAgICAgaWYgYWN0aXZpdHlbJ2lkbGVfc2Vjb25kcyddIDwgMzAwIG9yIGNwdSA+IDUwOlxuICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZVxuICAgICAgICByZXR1cm4gYWN0aXZpdHkuZ2V0KCdtZW1vcnlfYXZhaWxhYmxlX2J5dGVzJykgaXMgTm9uZSBvciBhY3Rpdml0eVsnbWVtb3J5X2F2YWlsYWJsZV9ieXRlcyddID49IDEwMjQgKiogM1xuICAgIGV4Y2VwdCAoS2V5RXJyb3IsIFR5cGVFcnJvciwgVmFsdWVFcnJvciwgT3ZlcmZsb3dFcnJvcik6XG4gICAgICAgIHJldHVybiBub3QgcG9saWN5LmdldCgnaWRsZV9vbmx5JywgVHJ1ZSkgYW5kIG5vdCBwb2xpY3kuZ2V0KCdhY19vbmx5JywgVHJ1ZSlcblxuXG5kZWYgdGVsZW1ldHJ5KCk6XG4gICAgcmV0dXJuIGRpY3QobG9hZF9hdmVyYWdlPWxpc3Qob3MuZ2V0bG9hZGF2ZygpKSwgbWVtb3J5X2F2YWlsYWJsZV9ieXRlcz1tZW1vcnkoKS5nZXQoJ01lbUF2YWlsYWJsZScpLFxuICAgICAgICAgICAgICAgIGRpc2tfZnJlZV9ieXRlcz1zaHV0aWwuZGlza191c2FnZShST09UKS5mcmVlLFxuICAgICAgICAgICAgICAgIHNjcmF0Y2hfZnJlZV9ieXRlcz1zaHV0aWwuZGlza191c2FnZShTQ1JBVENIKS5mcmVlLFxuICAgICAgICAgICAgICAgIHVwdGltZV9zZWNvbmRzPWludChmbG9hdChQYXRoKCcvcHJvYy91cHRpbWUnKS5yZWFkX3RleHQoKS5zcGxpdCgpWzBdKSksXG4gICAgICAgICAgICAgICAgKipzdG9yZWRfbWV0cmljcygpLCAqKnBvd2VyX2ludmVudG9yeSgpLCAqKnJlZnJlc2hfdXBsaW5rKCkpXG5cblxuZGVmIHN0b3JlZF9tZXRyaWNzKCk6XG4gICAgXCJcIlwiVGFzayBjb3VudGVycyBhcyByZXBvcnRlZC4gQSBzdG9yZWQgZXJyb3IgbG9uZ2VyIHRoYW4gdGhlIHNlcnZlciBjb2x1bW4gaXMgY3V0LCBzbyBhXG4gICAgbWV0cmljcy5qc29uIHdyaXR0ZW4gYnkgYW4gb2xkZXIgYWdlbnQgY2Fubm90IGtlZXAgZXZlcnkgaGVhcnRiZWF0IHJlZnVzZWQuXCJcIlwiXG4gICAgbWV0cmljcyA9IHJlYWRfanNvbihST09UIC8gJ21ldHJpY3MuanNvbicsIHt9KVxuICAgIGlmIGlzaW5zdGFuY2UobWV0cmljcy5nZXQoJ2xhc3RfdGFza19lcnJvcicpLCBzdHIpOlxuICAgICAgICBtZXRyaWNzWydsYXN0X3Rhc2tfZXJyb3InXSA9IG1ldHJpY3NbJ2xhc3RfdGFza19lcnJvciddWzpJTlZFTlRPUllfVEVYVF9MSU1JVF1cbiAgICByZXR1cm4gbWV0cmljc1xuXG5cbmNsYXNzIEFQSTpcbiAgICBkZWYgX19pbml0X18oc2VsZik6XG4gICAgICAgIHNlbGYuaWRlbnRpdHkgPSByZWFkX2pzb24oUk9PVCAvICdpZGVudGl0eS5qc29uJylcbiAgICAgICAgc2VsZi5vcmlnaW4gPSBzZWxmLmlkZW50aXR5WydvcmlnaW4nXS5yc3RyaXAoJy8nKVxuICAgICAgICBwYXJzZWQgPSB1cmxsaWIucGFyc2UudXJsc3BsaXQoc2VsZi5vcmlnaW4pXG4gICAgICAgIGlmIHBhcnNlZC5zY2hlbWUgIT0gJ2h0dHBzJyBvciBwYXJzZWQudXNlcm5hbWUgb3IgcGFyc2VkLnF1ZXJ5IG9yIHBhcnNlZC5mcmFnbWVudCBvciBwYXJzZWQucGF0aDpcbiAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1dvcmtlciBvcmlnaW4gbXVzdCBiZSBhbiBIVFRQUyBvcmlnaW4nKVxuXG4gICAgZGVmIHdvcmtlcl9pZChzZWxmKTpcbiAgICAgICAgcmV0dXJuIHN0cihzZWxmLmlkZW50aXR5LmdldCgnd29ya2VyX2lkJykgb3Igc2VsZi5pZGVudGl0eVsnaWQnXSlcblxuICAgIGRlZiBwb3N0KHNlbGYsIHBhdGgsIHBheWxvYWQpOlxuICAgICAgICByZXF1ZXN0ID0gdXJsbGliLnJlcXVlc3QuUmVxdWVzdChzZWxmLm9yaWdpbiArICcvYXBpL3YxLycgKyBwYXRoLFxuICAgICAgICAgICAgICAgICAgICBkYXRhPWpzb24uZHVtcHMocGF5bG9hZCkuZW5jb2RlKCksIGhlYWRlcnM9eydDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgICAgICdBdXRob3JpemF0aW9uJzogJ0JlYXJlciAnICsgc2VsZi5pZGVudGl0eVsndG9rZW4nXSxcbiAgICAgICAgICAgICAgICAgICAgJ1VzZXItQWdlbnQnOiBCUk9XU0VSX1VBLFxuICAgICAgICAgICAgICAgICAgICAnbmdyb2stc2tpcC1icm93c2VyLXdhcm5pbmcnOiAnMSd9LCBtZXRob2Q9J1BPU1QnKVxuICAgICAgICB3aXRoIFBPU1RfTE9DSzpcbiAgICAgICAgICAgIHdpdGggSFRUUC5vcGVuKHJlcXVlc3QsIHRpbWVvdXQ9MTUpIGFzIHJlc3BvbnNlOlxuICAgICAgICAgICAgICAgIGJvZHkgPSByZXNwb25zZS5yZWFkKDY1NTM3KVxuICAgICAgICAgICAgICAgIGlmIGxlbihib2R5KSA+IDY1NTM2OlxuICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdDb250cm9sIHJlc3BvbnNlIHRvbyBsYXJnZScpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGpzb24ubG9hZHMoYm9keSlcblxuXG5NQVhfVEFTS1MgPSAzMlxuXG5cbmRlZiBzbG90X2NvdW50KGNvbmZpZyk6XG4gICAgcmV0dXJuIG1heChpbnQoKGNvbmZpZyBvciB7fSkuZ2V0KCdzbG90cycpIG9yIDEpLCAxKVxuXG5cbmRlZiBqb2JfY29uZmlnKGNvbmZpZywgdGFzaz1Ob25lKTpcbiAgICB0YXNrID0gdGFzayBvciB7fVxuICAgIG1lbW9yeSA9IGludCh0YXNrLmdldCgnbWVtb3J5X21iJykgb3IgMClcbiAgICBjcHVzID0gZmxvYXQodGFzay5nZXQoJ2NwdXMnKSBvciAwKVxuICAgIHNjcmF0Y2ggPSBpbnQodGFzay5nZXQoJ3NjcmF0Y2hfbWInKSBvciAwKVxuICAgIGlmIG1lbW9yeSBhbmQgY3B1czpcbiAgICAgICAgbGltaXRzID0gZGljdChjb25maWcsIG1lbW9yeV9tYj1tZW1vcnksIGNwdXM9Y3B1cylcbiAgICAgICAgaWYgc2NyYXRjaDpcbiAgICAgICAgICAgIGxpbWl0c1snc2NyYXRjaF9tYiddID0gc2NyYXRjaFxuICAgICAgICByZXR1cm4gbGltaXRzXG4gICAgc2xvdHMgPSBzbG90X2NvdW50KGNvbmZpZylcbiAgICByZXR1cm4gZGljdChjb25maWcsIG1lbW9yeV9tYj1tYXgoaW50KGNvbmZpZ1snbWVtb3J5X21iJ10pIC8vIHNsb3RzLCA1MTIpLFxuICAgICAgICAgICAgICAgIHNjcmF0Y2hfbWI9bWF4KGludChjb25maWdbJ3NjcmF0Y2hfbWInXSkgLy8gc2xvdHMsIDI1NiksXG4gICAgICAgICAgICAgICAgY3B1cz1tYXgocm91bmQoZmxvYXQoY29uZmlnWydjcHVzJ10pIC8gc2xvdHMsIDIpLCAwLjI1KSlcblxuXG5kZWYgZHJvcF90YXNrKHRhc2spOlxuICAgIFRBU0tTWzpdID0gW2l0ZW0gZm9yIGl0ZW0gaW4gVEFTS1MgaWYgaXRlbS5nZXQoJ2lkJykgIT0gdGFzay5nZXQoJ2lkJykgb3IgaXRlbS5nZXQoJ2F0dGVtcHQnKSAhPSB0YXNrLmdldCgnYXR0ZW1wdCcpXVxuICAgIExPU1QucG9wKCh0YXNrLmdldCgnaWQnKSwgdGFzay5nZXQoJ2F0dGVtcHQnKSksIE5vbmUpXG4gICAgUkVORVdFRC5wb3AoKHRhc2suZ2V0KCdpZCcpLCB0YXNrLmdldCgnYXR0ZW1wdCcpKSwgTm9uZSlcblxuXG5kZWYgbGVhc2VfbG9zdCh0YXNrKTpcbiAgICBcIlwiXCJUaGUgcGxhdGZvcm0gc2FpZCBzbywgb3IgaGFzIG5vdCBjb25maXJtZWQgdGhlIGxlYXNlIGZvciBuZWFybHkgYSBsZWFzZSBsZW5ndGg6XG4gICAgd2l0aCBDb21wdXRlIHVucmVhY2hhYmxlLCBpdCBtYXkgYWxyZWFkeSBoYXZlIGdpdmVuIHRoZSBqb2IgdG8gc29tZW9uZSBlbHNlLlwiXCJcIlxuICAgIGtleSA9ICh0YXNrLmdldCgnaWQnKSwgdGFzay5nZXQoJ2F0dGVtcHQnKSlcbiAgICB3aXRoIFNUQVRFX0xPQ0s6XG4gICAgICAgIHJlbmV3ZWQgPSBSRU5FV0VELmdldChrZXkpXG4gICAgICAgIHJldHVybiBrZXkgaW4gTE9TVCBvciAocmVuZXdlZCBpcyBub3QgTm9uZSBhbmQgdGltZS5tb25vdG9uaWMoKSAtIHJlbmV3ZWQgPiBMRUFTRV9HUkFDRSlcblxuXG5kZWYgaGVhcnRiZWF0KGFwaSk6XG4gICAgd2l0aCBTVEFURV9MT0NLOlxuICAgICAgICByZXBvcnQgPSBkaWN0KFJFUE9SVClcbiAgICAgICAgdGFza3MgPSBbeydpZCc6IGl0ZW1bJ2lkJ10sICdhdHRlbXB0JzogaXRlbVsnYXR0ZW1wdCddfSBmb3IgaXRlbSBpbiBUQVNLU11cbiAgICAgICAgbG9ncyA9IGxpc3QoTE9HUylcbiAgICBpZiB0YXNrczpcbiAgICAgICAgcmVwb3J0Wyd0YXNrcyddID0gdGFza3NcbiAgICAgICAgcmVwb3J0LnVwZGF0ZSh0YXNrX2lkPXRhc2tzWzBdWydpZCddLCBhdHRlbXB0PXRhc2tzWzBdWydhdHRlbXB0J10pXG4gICAgcmVwb3J0Wyd0ZWxlbWV0cnknXSA9IHRlbGVtZXRyeSgpXG4gICAgcmVwb3J0Wydob3N0X2FjdGl2aXR5J10gPSBob3N0X2FjdGl2aXR5KClcbiAgICBpZiBIT1NULmdldCgnaGFyZHdhcmVfbW9kZWwnKTpcbiAgICAgICAgaGFyZHdhcmUgPSBkaWN0KHJlcG9ydC5nZXQoJ2hhcmR3YXJlJykgb3Ige30pXG4gICAgICAgIGhhcmR3YXJlWydtYW51ZmFjdHVyZXInXSA9IEhPU1QuZ2V0KCdtYW51ZmFjdHVyZXInKSBvciBoYXJkd2FyZS5nZXQoJ21hbnVmYWN0dXJlcicpIG9yICdBcHBsZSdcbiAgICAgICAgaGFyZHdhcmVbJ2hhcmR3YXJlX21vZGVsJ10gPSBIT1NUWydoYXJkd2FyZV9tb2RlbCddXG4gICAgICAgIHJlcG9ydFsnaGFyZHdhcmUnXSA9IGhhcmR3YXJlXG4gICAgcmVwb3J0Wydsb2dzJ10gPSBsb2dzXG4gICAgc2VudF9hdCA9IHRpbWUubW9ub3RvbmljKClcbiAgICByZXNwb25zZSA9IGFwaS5wb3N0KCd3b3JrZXJzLycgKyBhcGkud29ya2VyX2lkKCkgKyAnL2hlYXJ0YmVhdCcsIHJlcG9ydClcbiAgICByZXBvcnRlZCA9IHsoaXRlbVsnaWQnXSwgaXRlbVsnYXR0ZW1wdCddKSBmb3IgaXRlbSBpbiB0YXNrc31cbiAgICB3aXRoIFNUQVRFX0xPQ0s6XG4gICAgICAgIENPTlRST0wuY2xlYXIoKVxuICAgICAgICBDT05UUk9MLnVwZGF0ZShyZXNwb25zZSlcbiAgICAgICAgcnVubmluZyA9IHsoaXRlbS5nZXQoJ2lkJyksIGl0ZW0uZ2V0KCdhdHRlbXB0JykpOiBpdGVtIGZvciBpdGVtIGluIFRBU0tTfVxuICAgICAgICBsaXN0ZWQgPSB7KGl0ZW0uZ2V0KCdpZCcpLCBpdGVtLmdldCgnYXR0ZW1wdCcpKSBmb3IgaXRlbSBpbiByZXNwb25zZS5nZXQoJ2xvc3RfdGFza3MnKSBvciBbXX1cbiAgICAgICAgbG9zdCA9IFtydW5uaW5nW2tleV0gZm9yIGtleSBpbiBsaXN0ZWQgJiBydW5uaW5nLmtleXMoKV1cbiAgICAgICAgZm9yIGtleSBpbiBsaXN0ZWQgJiBydW5uaW5nLmtleXMoKTpcbiAgICAgICAgICAgIExPU1Rba2V5XSA9IFRydWVcbiAgICAgICAgIyBDb21wdXRlIHJlbmV3ZWQgZXZlcnkgYXR0ZW1wdCB0aGlzIGhlYXJ0YmVhdCByZXBvcnRlZCBhbmQgZGlkIG5vdCBsaXN0IGFzIGxvc3QuXG4gICAgICAgIGZvciBrZXkgaW4gKHJlcG9ydGVkICYgcnVubmluZy5rZXlzKCkpIC0gTE9TVC5rZXlzKCk6XG4gICAgICAgICAgICBSRU5FV0VEW2tleV0gPSBzZW50X2F0XG4gICAgIyBTdG9wIHRoZSB3b3JrIHRvbywgbm90IGp1c3QgaXRzIHVwbG9hZDogdGhlIHNsb3QgYW5kIGl0cyBtZW1vcnkgZ28gdG8gb3RoZXIgam9icy5cbiAgICBmb3IgdGFzayBpbiBsb3N0OlxuICAgICAgICBxdWlldGx5KFsnZG9ja2VyJywgJ2tpbGwnLCBjb250YWluZXJfbmFtZSh0YXNrKV0sIDEwKVxuICAgIHJldHVybiByZXNwb25zZVxuXG5cbmRlZiBoZWFydGJlYXRfbG9vcChhcGkpOlxuICAgIGludmVudG9yeV9hdCA9IHRpbWUubW9ub3RvbmljKClcbiAgICB3aGlsZSBub3QgU1RPUC53YWl0KDE1KTpcbiAgICAgICAgdHJ5OlxuICAgICAgICAgICAgaWYgdGltZS5tb25vdG9uaWMoKSAtIGludmVudG9yeV9hdCA+PSAzMDA6XG4gICAgICAgICAgICAgICAgaGFyZHdhcmUgPSBpbnZlbnRvcnkoKVxuICAgICAgICAgICAgICAgIHdpdGggU1RBVEVfTE9DSzpcbiAgICAgICAgICAgICAgICAgICAgUkVQT1JUWydoYXJkd2FyZSddID0gaGFyZHdhcmVcbiAgICAgICAgICAgICAgICBpbnZlbnRvcnlfYXQgPSB0aW1lLm1vbm90b25pYygpXG4gICAgICAgICAgICBoZWFydGJlYXQoYXBpKVxuICAgICAgICBleGNlcHQgRXhjZXB0aW9uOlxuICAgICAgICAgICAgIyBObyB0YXNrIHBheWxvYWRzLCBVUkxzIG9yIGV4Y2VwdGlvbiBtZXNzYWdlcyBlbnRlciBwZXJzaXN0ZW50IGxvZ3MuXG4gICAgICAgICAgICBub3RlKCdXb3JrZXIgaGVhcnRiZWF0IHVuYXZhaWxhYmxlJylcblxuXG4jIHVybGxpYiB3cmFwcyBUTFMgcmVzZXRzIGFzIFVSTEVycm9yOyBTU0xDZXJ0VmVyaWZpY2F0aW9uRXJyb3IgaXMgU1NMRXJyb3IgYW5kIG11c3Qgbm90IHJldHJ5LlxuVFJBTlNJRU5UX0hUVFAgPSAoQ29ubmVjdGlvblJlc2V0RXJyb3IsIEJyb2tlblBpcGVFcnJvciwgQ29ubmVjdGlvbkVycm9yLCBUaW1lb3V0RXJyb3IsXG4gICAgICAgICAgICAgICAgICBodHRwLmNsaWVudC5JbmNvbXBsZXRlUmVhZCwgaHR0cC5jbGllbnQuUmVtb3RlRGlzY29ubmVjdGVkLCBzc2wuU1NMRXJyb3IpXG5TRVRVUF9TRUNPTkRTID0gMjEwXG4jIEJ1cnN0IFBVVHMgb24gV2ktRmkgZmFpbCBUTFMgTUFDIGNoZWNrcyBhdCBDbG91ZGZsYXJlLiBFdGhlcm5ldCBpcyBsZWZ0IHVuY2FwcGVkLlxuREVGQVVMVF9VUExPQURfQlBTID0gMiAqIDEwMjQgKiAxMDI0XG5cblxuZGVmIGNvbW1hbmRfb3V0cHV0KGFyZ3MpOlxuICAgIHRyeTpcbiAgICAgICAgcmV0dXJuIHN1YnByb2Nlc3MucnVuKGFyZ3MsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLkRFVk5VTEwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9NSwgY2hlY2s9RmFsc2UpLnN0ZG91dC5kZWNvZGUoZXJyb3JzPSdyZXBsYWNlJylcbiAgICBleGNlcHQgKE9TRXJyb3IsIHN1YnByb2Nlc3MuU3VicHJvY2Vzc0Vycm9yKTpcbiAgICAgICAgcmV0dXJuICcnXG5cblxuZGVmIHBhcnNlX3JvdXRlX2ludGVyZmFjZSh0ZXh0KTpcbiAgICBmb3IgbGluZSBpbiB0ZXh0LnNwbGl0bGluZXMoKTpcbiAgICAgICAgc3RyaXBwZWQgPSBsaW5lLnN0cmlwKClcbiAgICAgICAgaWYgc3RyaXBwZWQuc3RhcnRzd2l0aCgnaW50ZXJmYWNlOicpOlxuICAgICAgICAgICAgcmV0dXJuIHN0cmlwcGVkLnNwbGl0KCc6JywgMSlbMV0uc3RyaXAoKSBvciBOb25lXG4gICAgcmV0dXJuIE5vbmVcblxuXG5kZWYgcGFyc2Vfd2lmaV9kZXZpY2VzKHRleHQpOlxuICAgIGRldmljZXMgPSBzZXQoKVxuICAgIHBvcnQgPSAnJ1xuICAgIGZvciBsaW5lIGluIHRleHQuc3BsaXRsaW5lcygpOlxuICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ0hhcmR3YXJlIFBvcnQ6Jyk6XG4gICAgICAgICAgICBwb3J0ID0gbGluZS5zcGxpdCgnOicsIDEpWzFdLnN0cmlwKCkubG93ZXIoKVxuICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgnRGV2aWNlOicpIGFuZCBwb3J0OlxuICAgICAgICAgICAgaWYgJ3dpLWZpJyBpbiBwb3J0IG9yIHBvcnQgaW4gKCd3aWZpJywgJ2FpcnBvcnQnLCAnd2xhbicpOlxuICAgICAgICAgICAgICAgIGRldmljZXMuYWRkKGxpbmUuc3BsaXQoJzonLCAxKVsxXS5zdHJpcCgpKVxuICAgICAgICAgICAgcG9ydCA9ICcnXG4gICAgcmV0dXJuIGRldmljZXNcblxuXG5kZWYgcGFyc2VfaXBfZGVmYXVsdF9kZXYodGV4dCk6XG4gICAgYmVzdCA9IE5vbmVcbiAgICBmb3IgbGluZSBpbiB0ZXh0LnNwbGl0bGluZXMoKTpcbiAgICAgICAgcGFydHMgPSBsaW5lLnNwbGl0KClcbiAgICAgICAgaWYgbm90IHBhcnRzIG9yIHBhcnRzWzBdICE9ICdkZWZhdWx0JyBvciAnZGV2JyBub3QgaW4gcGFydHM6XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICBpZmFjZSA9IHBhcnRzW3BhcnRzLmluZGV4KCdkZXYnKSArIDFdXG4gICAgICAgIGlmIG5vdCBpZmFjZTpcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIHRyeTpcbiAgICAgICAgICAgIG1ldHJpYyA9IGludChwYXJ0c1twYXJ0cy5pbmRleCgnbWV0cmljJykgKyAxXSlcbiAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBJbmRleEVycm9yKTpcbiAgICAgICAgICAgIG1ldHJpYyA9IDBcbiAgICAgICAgaWYgYmVzdCBpcyBOb25lIG9yIG1ldHJpYyA8IGJlc3RbMF06XG4gICAgICAgICAgICBiZXN0ID0gKG1ldHJpYywgaWZhY2UpXG4gICAgcmV0dXJuIE5vbmUgaWYgYmVzdCBpcyBOb25lIGVsc2UgYmVzdFsxXVxuXG5cbmRlZiB3aWZpX2RlZmF1bHRfcm91dGUoKTpcbiAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6XG4gICAgICAgIGlmYWNlID0gcGFyc2Vfcm91dGVfaW50ZXJmYWNlKGNvbW1hbmRfb3V0cHV0KFsnL3NiaW4vcm91dGUnLCAnLW4nLCAnZ2V0JywgJ2RlZmF1bHQnXSkpXG4gICAgICAgIHJldHVybiBib29sKGlmYWNlKSBhbmQgaWZhY2UgaW4gcGFyc2Vfd2lmaV9kZXZpY2VzKGNvbW1hbmRfb3V0cHV0KFsnL3Vzci9zYmluL25ldHdvcmtzZXR1cCcsICctbGlzdGFsbGhhcmR3YXJlcG9ydHMnXSkpXG4gICAgdGV4dCA9IGNvbW1hbmRfb3V0cHV0KFsnaXAnLCAnLTQnLCAnLW8nLCAncm91dGUnLCAnc2hvdycsICdkZWZhdWx0J10pIG9yIGNvbW1hbmRfb3V0cHV0KFsnaXAnLCAnLW8nLCAncm91dGUnLCAnc2hvdycsICdkZWZhdWx0J10pXG4gICAgaWZhY2UgPSBwYXJzZV9pcF9kZWZhdWx0X2Rldih0ZXh0KVxuICAgIHJldHVybiBib29sKGlmYWNlKSBhbmQgUGF0aCgnL3N5cy9jbGFzcy9uZXQvJXMvd2lyZWxlc3MnICUgaWZhY2UpLmlzX2RpcigpXG5cblxuZGVmIHVwbG9hZF9icHMoZW52aXJvbj1Ob25lLCB3aWZpPU5vbmUpOlxuICAgIGVudmlyb24gPSBvcy5lbnZpcm9uIGlmIGVudmlyb24gaXMgTm9uZSBlbHNlIGVudmlyb25cbiAgICBpZiAnREdFX1NUT1JBR0VfVVBMT0FEX0JQUycgaW4gZW52aXJvbjpcbiAgICAgICAgdHJ5OlxuICAgICAgICAgICAgdmFsdWUgPSBpbnQoc3RyKGVudmlyb24uZ2V0KCdER0VfU1RPUkFHRV9VUExPQURfQlBTJykpLnN0cmlwKCkpXG4gICAgICAgIGV4Y2VwdCAoVHlwZUVycm9yLCBWYWx1ZUVycm9yKSBhcyBlcnJvcjpcbiAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0RHRV9TVE9SQUdFX1VQTE9BRF9CUFMgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyJykgZnJvbSBlcnJvclxuICAgICAgICBpZiB2YWx1ZSA8IDA6XG4gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdER0VfU1RPUkFHRV9VUExPQURfQlBTIG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlcicpXG4gICAgICAgIHJldHVybiB2YWx1ZVxuICAgIGlmIHdpZmkgaWYgd2lmaSBpcyBub3QgTm9uZSBlbHNlIHdpZmlfZGVmYXVsdF9yb3V0ZSgpOlxuICAgICAgICByZXR1cm4gREVGQVVMVF9VUExPQURfQlBTXG4gICAgcmV0dXJuIDBcblxuXG5kZWYgc2VuZF9ib2R5KGNvbm5lY3Rpb24sIHNvdXJjZSwgZGVhZGxpbmUsIHNsZWVwPXRpbWUuc2xlZXAsIGNsb2NrPXRpbWUubW9ub3RvbmljLCBsb3N0PWxhbWJkYTogRmFsc2UpOlxuICAgIGJwcyA9IHVwbG9hZF9icHMoKVxuICAgIGNodW5rX3NpemUgPSA2NTUzNiBpZiBicHMgZWxzZSAxMDI0ICogMTAyNFxuICAgIHN0YXJ0ZWQgPSBjbG9jaygpXG4gICAgc2VudCA9IDBcbiAgICB3aXRoIHNvdXJjZS5vcGVuKCdyYicpIGFzIGZpbGU6XG4gICAgICAgIHdoaWxlIGNodW5rIDo9IGZpbGUucmVhZChjaHVua19zaXplKTpcbiAgICAgICAgICAgIGlmIGNsb2NrKCkgPiBkZWFkbGluZTpcbiAgICAgICAgICAgICAgICByYWlzZSBUaW1lb3V0RXJyb3IoJ1Rhc2sgZGVhZGxpbmUgZXhjZWVkZWQnKVxuICAgICAgICAgICAgaWYgbG9zdCgpOlxuICAgICAgICAgICAgICAgIHJhaXNlIExlYXNlTG9zdCgndXBsb2FkJylcbiAgICAgICAgICAgIGNvbm5lY3Rpb24uc2VuZChjaHVuaylcbiAgICAgICAgICAgIHNlbnQgKz0gbGVuKGNodW5rKVxuICAgICAgICAgICAgaWYgbm90IGJwczpcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgd2FpdCA9IHN0YXJ0ZWQgKyAoc2VudCAvIGJwcykgLSBjbG9jaygpXG4gICAgICAgICAgICBpZiB3YWl0ID4gMDpcbiAgICAgICAgICAgICAgICBzbGVlcCh3YWl0KVxuXG5cbmRlZiBkZXNjcmliZV9zdG9wKGVycm9yKTpcbiAgICBcIlwiXCJXaHkgdGhlIGFnZW50IGV4aXRlZCwgd2l0aCB0aGUgc3RhdHVzLCBwYXRoIGFuZCBzZXJ2ZXIgbWVzc2FnZSBvZiBhIHJlZnVzZWQgcmVxdWVzdC5cIlwiXCJcbiAgICBpbm5lciA9IHVud3JhcF9odHRwKGVycm9yKVxuICAgIGlmIG5vdCBpc2luc3RhbmNlKGlubmVyLCB1cmxsaWIuZXJyb3IuSFRUUEVycm9yKTpcbiAgICAgICAgcmV0dXJuIHR5cGUoZXJyb3IpLl9fbmFtZV9fXG4gICAgdHJ5OlxuICAgICAgICBib2R5ID0gaW5uZXIucmVhZCgyMDApLmRlY29kZShlcnJvcnM9J3JlcGxhY2UnKSBpZiBpbm5lci5mcCBlbHNlICcnXG4gICAgZXhjZXB0IEV4Y2VwdGlvbjpcbiAgICAgICAgYm9keSA9ICcnXG4gICAgcGF0aCA9IHVybGxpYi5wYXJzZS51cmxzcGxpdChpbm5lci5maWxlbmFtZSBvciAnJykucGF0aFxuICAgIHJldHVybiAnICcuam9pbigoJ0hUVFBFcnJvciAnICsgc3RyKGlubmVyLmNvZGUpICsgJyAnICsgcGF0aCArICcgJyArIGJvZHkpLnNwbGl0KCkpXG5cblxuZGVmIHVud3JhcF9odHRwKGVycm9yKTpcbiAgICBpZiBpc2luc3RhbmNlKGVycm9yLCB1cmxsaWIuZXJyb3IuSFRUUEVycm9yKTpcbiAgICAgICAgcmV0dXJuIGVycm9yXG4gICAgaWYgaXNpbnN0YW5jZShlcnJvciwgdXJsbGliLmVycm9yLlVSTEVycm9yKSBhbmQgZXJyb3IucmVhc29uIGlzIG5vdCBOb25lOlxuICAgICAgICByZXR1cm4gdW53cmFwX2h0dHAoZXJyb3IucmVhc29uKVxuICAgIHJldHVybiBlcnJvclxuXG5cbmRlZiB0cmFuc2llbnRfaHR0cChkZWFkbGluZSwgd29yaywgcGF1c2U9dGltZS5zbGVlcCk6XG4gICAgZXJyb3IgPSBOb25lXG4gICAgZm9yIGF0dGVtcHQgaW4gcmFuZ2UoMyk6XG4gICAgICAgIGlmIHRpbWUubW9ub3RvbmljKCkgPiBkZWFkbGluZTpcbiAgICAgICAgICAgIHJhaXNlIFRpbWVvdXRFcnJvcignVGFzayBkZWFkbGluZSBleGNlZWRlZCcpXG4gICAgICAgIHRyeTpcbiAgICAgICAgICAgIHJldHVybiB3b3JrKClcbiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBjYXVnaHQ6XG4gICAgICAgICAgICByZWFzb24gPSB1bndyYXBfaHR0cChjYXVnaHQpXG4gICAgICAgICAgICBpZiBpc2luc3RhbmNlKHJlYXNvbiwgc3NsLlNTTENlcnRWZXJpZmljYXRpb25FcnJvcikgb3Igbm90IGlzaW5zdGFuY2UocmVhc29uLCBUUkFOU0lFTlRfSFRUUCk6XG4gICAgICAgICAgICAgICAgcmFpc2VcbiAgICAgICAgICAgIGlmIHRpbWUubW9ub3RvbmljKCkgPiBkZWFkbGluZSBvciBzdHIocmVhc29uKSA9PSAnVGFzayBkZWFkbGluZSBleGNlZWRlZCc6XG4gICAgICAgICAgICAgICAgcmFpc2UgVGltZW91dEVycm9yKCdUYXNrIGRlYWRsaW5lIGV4Y2VlZGVkJykgZnJvbSBjYXVnaHRcbiAgICAgICAgICAgIGVycm9yID0gY2F1Z2h0XG4gICAgICAgICAgICBwYXVzZShtaW4oMiAqKiBhdHRlbXB0LCA0KSlcbiAgICByYWlzZSBlcnJvclxuXG5cbmRlZiBkb3dubG9hZCh1cmwsIHRhcmdldCwgc2l6ZSwgY2hlY2tzdW0sIGRlYWRsaW5lKTpcbiAgICBpZiB1cmxsaWIucGFyc2UudXJsc3BsaXQodXJsKS5zY2hlbWUgIT0gJ2h0dHBzJzpcbiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignU3RvcmFnZSByZXF1aXJlcyBIVFRQUycpXG4gICAgbGltaXQgPSBzaXplIGlmIHNpemUgaXMgbm90IE5vbmUgZWxzZSA1MCAqIDEwMjQgKiAxMDI0XG5cbiAgICBkZWYgcHVsbCgpOlxuICAgICAgICBkaWdlc3QgPSBoYXNobGliLm1kNSgpXG4gICAgICAgIHRvdGFsID0gMFxuICAgICAgICB3aXRoIHN0b3JhZ2VfZ2V0KHVybCkgYXMgcmVzcG9uc2UsIHRhcmdldC5vcGVuKCd3YicpIGFzIG91dHB1dDpcbiAgICAgICAgICAgIHdoaWxlIGNodW5rIDo9IHJlc3BvbnNlLnJlYWQoMTAyNCAqIDEwMjQpOlxuICAgICAgICAgICAgICAgIGlmIHRpbWUubW9ub3RvbmljKCkgPiBkZWFkbGluZTpcbiAgICAgICAgICAgICAgICAgICAgcmFpc2UgVGltZW91dEVycm9yKCdUYXNrIGRlYWRsaW5lIGV4Y2VlZGVkJylcbiAgICAgICAgICAgICAgICB0b3RhbCArPSBsZW4oY2h1bmspXG4gICAgICAgICAgICAgICAgaWYgdG90YWwgPiBsaW1pdDpcbiAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW5wdXQgZXhjZWVkcyBkZWNsYXJlZCBzaXplJylcbiAgICAgICAgICAgICAgICBvdXRwdXQud3JpdGUoY2h1bmspXG4gICAgICAgICAgICAgICAgZGlnZXN0LnVwZGF0ZShjaHVuaylcbiAgICAgICAgZW5jb2RlZCA9IGJhc2U2NC5iNjRlbmNvZGUoZGlnZXN0LmRpZ2VzdCgpKS5kZWNvZGUoKVxuICAgICAgICBpZiBzaXplIGlzIG5vdCBOb25lIGFuZCB0b3RhbCAhPSBzaXplOlxuICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW5wdXQgY2hlY2tzdW0gbWlzbWF0Y2gnKVxuICAgICAgICBpZiBjaGVja3N1bSBhbmQgZW5jb2RlZCAhPSBjaGVja3N1bTpcbiAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0lucHV0IGNoZWNrc3VtIG1pc21hdGNoJylcblxuICAgIHRyYW5zaWVudF9odHRwKGRlYWRsaW5lLCBwdWxsKVxuXG5cbmRlZiB2ZXJpZnlfdGFza19zaWduYXR1cmUoYXBpLCB0YXNrKTpcbiAgICBrZXlzID0gKCdpZCcsICdhdHRlbXB0JywgJ29wZXJhdGlvbicsICdidW5kbGVfZGlnZXN0JywgJ3J1bnRpbWVfYWJpJywgJ2J1bmRsZV9zaXplJywgJ2J1bmRsZV9jaGVja3N1bScpXG4gICAgbWFuaWZlc3QgPSB7a2V5OiB0YXNrW2tleV0gZm9yIGtleSBpbiBrZXlzfVxuICAgIGVuY29kZWQgPSBqc29uLmR1bXBzKG1hbmlmZXN0LCBzb3J0X2tleXM9VHJ1ZSwgc2VwYXJhdG9ycz0oJywnLCAnOicpKS5lbmNvZGUoKVxuICAgIGtleSA9IGhhc2hsaWIuc2hhMjU2KGFwaS5pZGVudGl0eVsndG9rZW4nXS5lbmNvZGUoKSkuZGlnZXN0KClcbiAgICBleHBlY3RlZCA9IGhtYWMubmV3KGtleSwgZW5jb2RlZCwgaGFzaGxpYi5zaGEyNTYpLmhleGRpZ2VzdCgpXG4gICAgaWYgbm90IGhtYWMuY29tcGFyZV9kaWdlc3QoZXhwZWN0ZWQsIHRhc2tbJ2J1bmRsZV9zaWduYXR1cmUnXSk6XG4gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgdGFzayBidW5kbGUgc2lnbmF0dXJlJylcblxuXG5kZWYgZXh0cmFjdF9idW5kbGUoYXJjaGl2ZSwgdGFyZ2V0LCB0YXNrKTpcbiAgICBpZiBoYXNobGliLnNoYTI1NihhcmNoaXZlLnJlYWRfYnl0ZXMoKSkuaGV4ZGlnZXN0KCkgIT0gdGFza1snYnVuZGxlX2RpZ2VzdCddOlxuICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdUYXNrIGJ1bmRsZSBkaWdlc3QgbWlzbWF0Y2gnKVxuICAgIHRhcmdldC5ta2Rpcihtb2RlPTBvNzU1KVxuICAgIHdpdGggdGFyZmlsZS5vcGVuKGFyY2hpdmUsICdyOmd6JykgYXMgYnVuZGxlOlxuICAgICAgICBtZW1iZXJzID0gYnVuZGxlLmdldG1lbWJlcnMoKVxuICAgICAgICBpZiBsZW4obWVtYmVycykgPiA2NCBvciBhbnkobm90IG1lbWJlci5pc2ZpbGUoKSBmb3IgbWVtYmVyIGluIG1lbWJlcnMpOlxuICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW52YWxpZCB0YXNrIGJ1bmRsZSBlbnRyaWVzJylcbiAgICAgICAgdG90YWwgPSBzdW0obWVtYmVyLnNpemUgZm9yIG1lbWJlciBpbiBtZW1iZXJzKVxuICAgICAgICBpZiB0b3RhbCA+IDEwICogMTAyNCAqIDEwMjQ6XG4gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdUYXNrIGJ1bmRsZSBpcyB0b28gbGFyZ2UnKVxuICAgICAgICBmb3IgbWVtYmVyIGluIG1lbWJlcnM6XG4gICAgICAgICAgICBwYXJ0cyA9IFBhdGgobWVtYmVyLm5hbWUpLnBhcnRzXG4gICAgICAgICAgICBpZiBub3QgcGFydHMgb3IgbWVtYmVyLm5hbWUuc3RhcnRzd2l0aCgnLycpIG9yICcuLicgaW4gcGFydHMgb3IgJ1xcXFwnIGluIG1lbWJlci5uYW1lOlxuICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1Vuc2FmZSB0YXNrIGJ1bmRsZSBwYXRoJylcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uID0gdGFyZ2V0LmpvaW5wYXRoKCpwYXJ0cylcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uLnBhcmVudC5ta2Rpcihtb2RlPTBvNzU1LCBwYXJlbnRzPVRydWUsIGV4aXN0X29rPVRydWUpXG4gICAgICAgICAgICB3aXRoIGJ1bmRsZS5leHRyYWN0ZmlsZShtZW1iZXIpIGFzIHNvdXJjZSwgZGVzdGluYXRpb24ub3Blbignd2InKSBhcyBvdXRwdXQ6XG4gICAgICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlb2JqKHNvdXJjZSwgb3V0cHV0KVxuICAgICAgICAgICAgZGVzdGluYXRpb24uY2htb2QoMG80NDQpXG4gICAgIyBTZXJ2aWNlIFVNYXNrPTAwNzcgd291bGQga2VlcCBta2RpciAwNzU1IGFzIDA3MDAuIFRhc2sgY29udGFpbmVycyBhcmUgdWlkIDEwMDAxLlxuICAgIGZvciBwYXRoIGluIFt0YXJnZXQsICp0YXJnZXQucmdsb2IoJyonKV06XG4gICAgICAgIHBhdGguY2htb2QoMG83NTUgaWYgcGF0aC5pc19kaXIoKSBlbHNlIDBvNDQ0KVxuICAgIG1hbmlmZXN0ID0gcmVhZF9qc29uKHRhcmdldCAvICd0YXNrLWJ1bmRsZS5qc29uJywge30pXG4gICAgaWYgbWFuaWZlc3QuZ2V0KCdvcGVyYXRpb24nKSAhPSB0YXNrWydvcGVyYXRpb24nXSBvciBtYW5pZmVzdC5nZXQoJ3J1bnRpbWVfYWJpJykgIT0gdGFza1sncnVudGltZV9hYmknXTpcbiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVGFzayBidW5kbGUgbWFuaWZlc3QgbWlzbWF0Y2gnKVxuXG5cbmRlZiB1cGxvYWQodXJsLCBoZWFkZXJzLCBzb3VyY2UsIGRlYWRsaW5lLCBsb3N0PWxhbWJkYTogRmFsc2UpOlxuICAgIHVyaSA9IHVybGxpYi5wYXJzZS51cmxzcGxpdCh1cmwpXG4gICAgaWYgdXJpLnNjaGVtZSAhPSAnaHR0cHMnIG9yIHVyaS51c2VybmFtZTpcbiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignU3RvcmFnZSByZXF1aXJlcyBIVFRQUycpXG5cbiAgICBkZWYgcHVzaCgpOlxuICAgICAgICBjb25uZWN0aW9uLCBwYXRoID0gc3RvcmFnZV9wdXRfY29ubmVjdGlvbih1cmwpXG4gICAgICAgIHRyeTpcbiAgICAgICAgICAgIGNvbm5lY3Rpb24ucHV0cmVxdWVzdCgnUFVUJywgcGF0aClcbiAgICAgICAgICAgIGlmIHN0b3JhZ2VfcHJveHlfZm9yKHVybCk6XG4gICAgICAgICAgICAgICAgY29ubmVjdGlvbi5wdXRoZWFkZXIoJ1gtREdFLVRhcmdldCcsIHVybClcbiAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGhlYWRlcnMuaXRlbXMoKTpcbiAgICAgICAgICAgICAgICBpZiBrZXkubG93ZXIoKSBub3QgaW4gKCdjb250ZW50LWxlbmd0aCcsICdob3N0Jyk6XG4gICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24ucHV0aGVhZGVyKGtleSwgdmFsdWUpXG4gICAgICAgICAgICBjb25uZWN0aW9uLnB1dGhlYWRlcignQ29udGVudC1MZW5ndGgnLCBzdHIoc291cmNlLnN0YXQoKS5zdF9zaXplKSlcbiAgICAgICAgICAgIGNvbm5lY3Rpb24uZW5kaGVhZGVycygpXG4gICAgICAgICAgICBzZW5kX2JvZHkoY29ubmVjdGlvbiwgc291cmNlLCBkZWFkbGluZSwgbG9zdD1sb3N0KVxuICAgICAgICAgICAgcmVzcG9uc2UgPSBjb25uZWN0aW9uLmdldHJlc3BvbnNlKClcbiAgICAgICAgICAgIGlmIHJlc3BvbnNlLnN0YXR1cyBpbiAoNTAyLCA1MDMsIDQyOSk6XG4gICAgICAgICAgICAgICAgcmFpc2UgQ29ubmVjdGlvbkVycm9yKCdTdG9yYWdlIGdhdGV3YXkgdW5hdmFpbGFibGUnKVxuICAgICAgICAgICAgaWYgcmVzcG9uc2Uuc3RhdHVzIG5vdCBpbiAoMjAwLCAyMDEsIDIwNCk6XG4gICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignT3V0cHV0IHVwbG9hZCBmYWlsZWQnKVxuICAgICAgICBmaW5hbGx5OlxuICAgICAgICAgICAgY29ubmVjdGlvbi5jbG9zZSgpXG5cbiAgICB0cmFuc2llbnRfaHR0cChkZWFkbGluZSwgcHVzaClcblxuXG5kZWYgcHVibGljX3dlYl9lbmFibGVkKCk6XG4gICAgcmV0dXJuIG9zLmVudmlyb24uZ2V0KCdER0VfQUxMT1dfUFVCTElDX1dFQl9SRVFVRVNUUycpID09ICcxJ1xuXG5cbmRlZiBhbGxvd2VkX2NhcGFiaWxpdGllcyhjYXBhYmlsaXRpZXMpOlxuICAgIHJldHVybiB7a2V5OiB2YWx1ZSBmb3Iga2V5LCB2YWx1ZSBpbiBjYXBhYmlsaXRpZXMuaXRlbXMoKVxuICAgICAgICAgICAgaWYga2V5ICE9ICd3ZWJfZmV0Y2hfYmF0Y2gnIG9yIHB1YmxpY193ZWJfZW5hYmxlZCgpfVxuXG5cbmRlZiBkb2NrZXJfYXJncyhjb25maWcsIG9wZXJhdGlvbj1Ob25lLCBzbGljZV9uYW1lPSdjb21wdXRlLnNsaWNlJyk6XG4gICAgbmV0d29yayA9ICdub25lJ1xuICAgIGlmIG9wZXJhdGlvbiA9PSAnd2ViX2ZldGNoX2JhdGNoJzpcbiAgICAgICAgaWYgbm90IHB1YmxpY193ZWJfZW5hYmxlZCgpOlxuICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignUHVibGljIHdlYiByZXF1ZXN0cyBhcmUgZGlzYWJsZWQgb24gdGhpcyB3b3JrZXInKVxuICAgICAgICBuZXR3b3JrID0gJ2JyaWRnZSdcbiAgICByZXR1cm4gWydkb2NrZXInLCAncnVuJywgJy0tcm0nLCAnLS1pbml0JywgJy0tbmV0d29yaz0nICsgbmV0d29yaywgJy0tcmVhZC1vbmx5JywgJy0tY2FwLWRyb3A9QUxMJyxcbiAgICAgICAgICAgICctLXNlY3VyaXR5LW9wdD1uby1uZXctcHJpdmlsZWdlcycsICctLXBpZHMtbGltaXQ9MTI4JywgJy0tdWxpbWl0PWNvcmU9MCcsXG4gICAgICAgICAgICAnLS1sb2ctZHJpdmVyPW5vbmUnLCAnLS1sYWJlbD1jb20uZGdlLnJvbGU9Y29tcHV0ZS10YXNrJywgJy0tY2dyb3VwLXBhcmVudD0nICsgc2xpY2VfbmFtZSxcbiAgICAgICAgICAgICctLW1lbW9yeT0nICsgc3RyKGNvbmZpZ1snbWVtb3J5X21iJ10pICsgJ20nLCAnLS1tZW1vcnktc3dhcD0nICsgc3RyKGNvbmZpZ1snbWVtb3J5X21iJ10pICsgJ20nLFxuICAgICAgICAgICAgJy0tY3B1cz0nICsgc3RyKGNvbmZpZ1snY3B1cyddKSwgJy0tdG1wZnM9L3RtcDpydyxub2V4ZWMsbm9zdWlkLHNpemU9MjU2bSddXG5cblxuY2xhc3MgTGVhc2VMb3N0KEV4Y2VwdGlvbik6XG4gICAgXCJcIlwiVGhlIHBsYXRmb3JtIGdhdmUgdGhpcyBhdHRlbXB0J3Mgam9iIGJhY2sgdG8gdGhlIHF1ZXVlIG9yIHRvIGFub3RoZXIgd29ya2VyLlxuXG4gICAgRXZlcnkgYXR0ZW1wdCBzaGFyZXMgdGhlIGNhbGxlcidzIHNpZ25lZCBvdXRwdXQgVVJMLCBzbyBhIGxvc3QgYXR0ZW1wdCBtdXN0IG5vdFxuICAgIHVwbG9hZCwgYW5kIGl0cyBmYWlsdXJlIGlzIG5vdCB0aGlzIHdvcmtlcidzIHRvIHJlcG9ydC5cIlwiXCJcblxuXG4jIENvbXB1dGUncyBhbnN3ZXJzIHdoZW4gdGhpcyB3b3JrZXIgbm8gbG9uZ2VyIG93bnMgdGhlIGpvYiAoNDAxOiBpdHMgdG9rZW4gd2FzIHJldm9rZWQpLlxuIyBOb3QgNDA0OiBSYWlscyBhbnN3ZXJzIHRoYXQgZm9yIGEgZGVsZXRlZCBqb2IgYW5kIGEgd3JvbmcgcGF0aCBhbGlrZS5cbkxFQVNFX1JFRlVTRUQgPSAoNDAxLCA0MDkpXG4jIFN0b3AgdXBsb2FkaW5nIHdoZW4gdGhlIGxlYXNlIGhhcyBnb25lIHRoaXMgbG9uZyB1bmNvbmZpcm1lZCAoaXQgbGFzdHMgNjAgcykuXG5MRUFTRV9HUkFDRSA9IDUwXG5BVFRFTVBUX1NMSUNFUyA9IFBhdGgoJy9zeXMvZnMvY2dyb3VwL2NvbXB1dGUuc2xpY2UnKVxuRU1QVFlfTUVBU1VSRU1FTlQgPSBkaWN0KG1lbW9yeV9wZWFrX2J5dGVzPU5vbmUsIGNwdV91c2FnZV9tcz1Ob25lLCBvb209Tm9uZSlcblxuXG5kZWYgcmVmdXNlZChlcnJvcik6XG4gICAgcmVhc29uID0gdW53cmFwX2h0dHAoZXJyb3IpXG4gICAgcmV0dXJuIGlzaW5zdGFuY2UocmVhc29uLCB1cmxsaWIuZXJyb3IuSFRUUEVycm9yKSBhbmQgcmVhc29uLmNvZGUgaW4gTEVBU0VfUkVGVVNFRFxuXG5cbmRlZiBjb250YWluZXJfbmFtZSh0YXNrKTpcbiAgICByZXR1cm4gJ2RnZS10YXNrLScgKyBzdHIodGFza1snaWQnXSkgKyAnLScgKyB0YXNrWydhdHRlbXB0J11cblxuXG5kZWYgcG9zdF9hdHRlbXB0KGFwaSwgdGFzaywgYWN0aW9uLCBwYXlsb2FkPU5vbmUpOlxuICAgIFwiXCJcIkEgY2FsbCBhYm91dCB0aGlzIGF0dGVtcHQ7IGEgcmVmdXNhbCBtZWFucyBhbm90aGVyIHdvcmtlciBvciB0aGUgcXVldWUgaGFzIHRoZSBqb2IuXCJcIlwiXG4gICAgdHJ5OlxuICAgICAgICByZXR1cm4gYXBpLnBvc3QoJ2pvYnMvJyArIHN0cih0YXNrWydpZCddKSArICcvJyArIGFjdGlvbiwgZGljdChwYXlsb2FkIG9yIHt9LCBhdHRlbXB0PXRhc2tbJ2F0dGVtcHQnXSkpXG4gICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlcnJvcjpcbiAgICAgICAgaWYgcmVmdXNlZChlcnJvcik6XG4gICAgICAgICAgICByYWlzZSBMZWFzZUxvc3QodGFza1snaWQnXSkgZnJvbSBlcnJvclxuICAgICAgICByYWlzZVxuXG5cbmRlZiBjb25maXJtX2xlYXNlKGFwaSwgdGFzaywgcGF1c2U9dGltZS5zbGVlcCk6XG4gICAgXCJcIlwiUmVuZXdzIHRoZSBsZWFzZSBqdXN0IGJlZm9yZSB1cGxvYWRpbmc7IHJldHVybnMgdGhlIHNlY29uZHMgbGVmdCBiZWZvcmUgdGhlXG4gICAgYXR0ZW1wdCdzIGRlYWRsaW5lLCBieSB0aGUgc2VydmVyJ3MgY2xvY2sgcmF0aGVyIHRoYW4gYSBndWVzdCBjbG9jayB0aGF0IGRyaWZ0cy5cIlwiXCJcbiAgICBmb3IgYXR0ZW1wdCBpbiByYW5nZSg0KTpcbiAgICAgICAgdHJ5OlxuICAgICAgICAgICAgYm9keSA9IHBvc3RfYXR0ZW1wdChhcGksIHRhc2ssICdsZWFzZScpXG4gICAgICAgICAgICB3aXRoIFNUQVRFX0xPQ0s6XG4gICAgICAgICAgICAgICAgUkVORVdFRFsodGFza1snaWQnXSwgdGFza1snYXR0ZW1wdCddKV0gPSB0aW1lLm1vbm90b25pYygpXG4gICAgICAgICAgICByZXR1cm4gaW50KGJvZHlbJ3NlY29uZHNfcmVtYWluaW5nJ10pXG4gICAgICAgIGV4Y2VwdCBMZWFzZUxvc3Q6XG4gICAgICAgICAgICByYWlzZVxuICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGVycm9yOlxuICAgICAgICAgICAgaWYgYXR0ZW1wdCA9PSAzIG9yIG5vdCBpc2luc3RhbmNlKHVud3JhcF9odHRwKGVycm9yKSwgVFJBTlNJRU5UX0hUVFApOlxuICAgICAgICAgICAgICAgIHJhaXNlXG4gICAgICAgICAgICBwYXVzZSgyICoqIChhdHRlbXB0ICsgMSkpXG5cblxuZGVmIGF0dGVtcHRfc2xpY2UoYXR0ZW1wdCk6XG4gICAgIyBzeXN0ZW1kIG5lc3RzIGNvbXB1dGUtPHg+LnNsaWNlIHVuZGVyIGNvbXB1dGUuc2xpY2U7IGEgZGFzaCBpbnNpZGUgPHg+IHdvdWxkIG5lc3QgaXQgZGVlcGVyLlxuICAgIHJldHVybiAnY29tcHV0ZS1kZ2VhdHRlbXB0JyArIHJlLnN1YihyJ1teMC05YS1mXScsICcnLCBzdHIoYXR0ZW1wdCkpICsgJy5zbGljZSdcblxuXG5kZWYgY2dyb3VwX2ZpZWxkcyhwYXRoKTpcbiAgICB0cnk6XG4gICAgICAgIGxpbmVzID0gcGF0aC5yZWFkX3RleHQoKS5zcGxpdGxpbmVzKClcbiAgICBleGNlcHQgKE9TRXJyb3IsIFZhbHVlRXJyb3IpOlxuICAgICAgICByZXR1cm4ge31cbiAgICByZXR1cm4ge25hbWU6IGludCh2YWx1ZSkgZm9yIG5hbWUsIHZhbHVlIGluIChsaW5lLnNwbGl0KClbOjJdIGZvciBsaW5lIGluIGxpbmVzIGlmIGxlbihsaW5lLnNwbGl0KCkpID49IDIpXG4gICAgICAgICAgICBpZiB2YWx1ZS5pc2RpZ2l0KCl9XG5cblxuZGVmIGNncm91cF9sb2NhbF9ldmVudHMobW91bnRpbmZvKTpcbiAgICBcIlwiXCJtZW1vcnlfbG9jYWxldmVudHMgbWFrZXMgYSBzbGljZSdzIG1lbW9yeS5ldmVudHMgY291bnQgb25seSBpdHMgb3duIGNncm91cCwgbmV2ZXIgaXRzIHRhc2tzLlwiXCJcIlxuICAgIHJldHVybiBhbnkoJyAtIGNncm91cDIgJyBpbiBsaW5lIGFuZCAnbWVtb3J5X2xvY2FsZXZlbnRzJyBpbiBsaW5lIGZvciBsaW5lIGluIChtb3VudGluZm8gb3IgJycpLnNwbGl0bGluZXMoKSlcblxuXG5kZWYgb29tX2tpbmQoZXZlbnRzKTpcbiAgICAjIG1lbW9yeS5ldmVudHMgaXMgaGllcmFyY2hpY2FsLiBgb29tYCBjb3VudHMgbGltaXRzIHJlYWNoZWQgaW5zaWRlIHRoZSBhdHRlbXB0J3Mgc2xpY2UsXG4gICAgIyBzbyB0aGUgdGFzayBoaXQgaXRzIG93biBsaW1pdDsgYG9vbV9raWxsYCBhbHNvIGNvdW50cyBraWxscyBjYXVzZWQgYnkgY29tcHV0ZS5zbGljZVxuICAgICMgKG9yIHdob2xlLWd1ZXN0KSBwcmVzc3VyZSwgd2hpY2ggbmV2ZXIgcmVhY2ggdGhlIGF0dGVtcHQncyBvd24gYG9vbWAuXG4gICAgaWYgZXZlbnRzLmdldCgnb29tJywgMCkgPiAwOlxuICAgICAgICByZXR1cm4gJ293bidcbiAgICBpZiBldmVudHMuZ2V0KCdvb21fa2lsbCcsIDApID4gMDpcbiAgICAgICAgcmV0dXJuICdob3N0J1xuICAgIHJldHVybiBOb25lXG5cblxuZGVmIG1lYXN1cmVfc2xpY2UocGF0aCwgbG9jYWxfZXZlbnRzPUZhbHNlKTpcbiAgICBcIlwiXCJXaGF0IGFuIGF0dGVtcHQncyBzbGljZSByZWNvcmRlZC4gQSB2YWx1ZSB0aGUga2VybmVsIGRvZXMgbm90IG9mZmVyIGlzIE5vbmUsIG5ldmVyIDA6XG4gICAgbWVtb3J5LnBlYWsgbmVlZHMgTGludXggNS4xOSwgd2hpY2ggb2xkZXIgV1NMIGFuZCBVYnVudHUgMjIuMDQgZ3Vlc3RzIGxhY2suXCJcIlwiXG4gICAgcGVhayA9IHJlYWRfdGV4dChwYXRoIC8gJ21lbW9yeS5wZWFrJylcbiAgICB1c2FnZSA9IGNncm91cF9maWVsZHMocGF0aCAvICdjcHUuc3RhdCcpLmdldCgndXNhZ2VfdXNlYycpXG4gICAgcmV0dXJuIGRpY3QobWVtb3J5X3BlYWtfYnl0ZXM9aW50KHBlYWspIGlmIHBlYWsgYW5kIHBlYWsuaXNkaWdpdCgpIGVsc2UgTm9uZSxcbiAgICAgICAgICAgICAgICBjcHVfdXNhZ2VfbXM9Tm9uZSBpZiB1c2FnZSBpcyBOb25lIGVsc2UgdXNhZ2UgLy8gMTAwMCxcbiAgICAgICAgICAgICAgICBvb209Tm9uZSBpZiBsb2NhbF9ldmVudHMgZWxzZSBvb21fa2luZChjZ3JvdXBfZmllbGRzKHBhdGggLyAnbWVtb3J5LmV2ZW50cycpKSlcblxuXG5kZWYgcXVpZXRseShhcmdzLCB0aW1lb3V0KTpcbiAgICB0cnk6XG4gICAgICAgIHN1YnByb2Nlc3MucnVuKGFyZ3MsIHN0ZG91dD1zdWJwcm9jZXNzLkRFVk5VTEwsIHN0ZGVycj1zdWJwcm9jZXNzLkRFVk5VTEwsIHRpbWVvdXQ9dGltZW91dClcbiAgICBleGNlcHQgKE9TRXJyb3IsIHN1YnByb2Nlc3MuU3VicHJvY2Vzc0Vycm9yKTpcbiAgICAgICAgcGFzc1xuXG5cbmRlZiBmaW5pc2hfYXR0ZW1wdChjb250YWluZXIsIHNsaWNlX25hbWUsIG1lYXN1cmVkKTpcbiAgICBcIlwiXCJSZW1vdmVzIHRoZSBjb250YWluZXIsIHJlY29yZHMgd2hhdCBpdHMgc2xpY2Ugc2F3LCB0aGVuIHN0b3BzIHRoZSBzbGljZSwgd2hpY2ggb3V0bGl2ZXNcbiAgICB0aGUgY29udGFpbmVyIHNjb3BlLiBSdW5zIGluIGEgZmluYWxseSBibG9jaywgc28gbm90aGluZyBoZXJlIG1heSByYWlzZS5cIlwiXCJcbiAgICBxdWlldGx5KFsnZG9ja2VyJywgJ3JtJywgJy1mJywgY29udGFpbmVyXSwgNjApXG4gICAgbG9jYWxfZXZlbnRzID0gY2dyb3VwX2xvY2FsX2V2ZW50cyhyZWFkX3RleHQoJy9wcm9jL3NlbGYvbW91bnRpbmZvJykpXG4gICAgbWVhc3VyZWQudXBkYXRlKG1lYXN1cmVfc2xpY2UoQVRURU1QVF9TTElDRVMgLyBzbGljZV9uYW1lLCBsb2NhbF9ldmVudHMpKVxuICAgIHF1aWV0bHkoWydzeXN0ZW1jdGwnLCAnc3RvcCcsIHNsaWNlX25hbWVdLCAzMClcblxuXG5kZWYgc3RvcF9hdHRlbXB0X3NsaWNlcygpOlxuICAgIFwiXCJcIlNsaWNlcyBvZiBhdHRlbXB0cyB0aGF0IHJhbiBiZWZvcmUgYSBjcmFzaCBvciByZXN0YXJ0IHN0YXkgdW50aWwgc3RvcHBlZC5cIlwiXCJcbiAgICB1bml0cyA9IG9wdGlvbmFsX2NvbW1hbmQoWydzeXN0ZW1jdGwnLCAnbGlzdC11bml0cycsICctLXR5cGU9c2xpY2UnLCAnLS1hbGwnLCAnLS1wbGFpbicsICctLW5vLWxlZ2VuZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29tcHV0ZS1kZ2VhdHRlbXB0KiddKSBvciAnJ1xuICAgIGZvciB1bml0IGluIChsaW5lLnNwbGl0KClbMF0gZm9yIGxpbmUgaW4gdW5pdHMuc3BsaXRsaW5lcygpIGlmIGxpbmUuc3BsaXQoKSk6XG4gICAgICAgIG9wdGlvbmFsX2NvbW1hbmQoWydzeXN0ZW1jdGwnLCAnc3RvcCcsIHVuaXRdKVxuXG5cbmRlZiBmaXJzdF9pbnB1dCh0YXNrKTpcbiAgICBkZWNsYXJlZCA9ICh0YXNrLmdldCgnaW5wdXRzJykgb3IgW3t9XSlbMF1cbiAgICByZXR1cm4gKHRhc2suZ2V0KCdpbnB1dF91cmwnKSBvciBkZWNsYXJlZC5nZXQoJ3VybCcpLFxuICAgICAgICAgICAgdGFzay5nZXQoJ2lucHV0X3NpemUnKSBpZiAnaW5wdXRfc2l6ZScgaW4gdGFzayBlbHNlIGRlY2xhcmVkLmdldCgnc2l6ZV9ieXRlcycpLFxuICAgICAgICAgICAgdGFzay5nZXQoJ2lucHV0X2NoZWNrc3VtJykgaWYgJ2lucHV0X2NoZWNrc3VtJyBpbiB0YXNrIGVsc2UgZGVjbGFyZWQuZ2V0KCdjaGVja3N1bScpKVxuXG5cbmRlZiBmaXJzdF9vdXRwdXQodGFzayk6XG4gICAgZGVjbGFyZWQgPSAodGFzay5nZXQoJ291dHB1dHMnKSBvciBbe31dKVswXVxuICAgIGhlYWRlcnMgPSB0YXNrLmdldCgnb3V0cHV0X3VwbG9hZF9oZWFkZXJzJykgb3IgZGVjbGFyZWQuZ2V0KCdoZWFkZXJzJykgb3Ige31cbiAgICByZXR1cm4gKGRlY2xhcmVkLmdldCgnbmFtZScpIG9yICdvdXRwdXQnLFxuICAgICAgICAgICAgdGFzay5nZXQoJ291dHB1dF91cGxvYWRfdXJsJykgb3IgZGVjbGFyZWQuZ2V0KCd1cGxvYWRfdXJsJyksXG4gICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgZGVjbGFyZWQuZ2V0KCdtZWRpYV90eXBlJykgb3IgaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpIG9yICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nKVxuXG5cbmRlZiBzaGEyNTZfZmlsZShwYXRoKTpcbiAgICBkaWdlc3QgPSBoYXNobGliLnNoYTI1NigpXG4gICAgd2l0aCBwYXRoLm9wZW4oJ3JiJykgYXMgc291cmNlOlxuICAgICAgICB3aGlsZSBjaHVuayA6PSBzb3VyY2UucmVhZCgxMDI0ICogMTAyNCk6XG4gICAgICAgICAgICBkaWdlc3QudXBkYXRlKGNodW5rKVxuICAgIHJldHVybiBkaWdlc3QuaGV4ZGlnZXN0KClcblxuXG5kZWYgZXhlY3V0ZShhcGksIHRhc2ssIGNvbmZpZywgbWVhc3VyZWQpOlxuICAgIHN0YXJ0ZWQgPSB0aW1lLm1vbm90b25pYygpXG4gICAgc2V0dXBfZGVhZGxpbmUgPSBzdGFydGVkICsgU0VUVVBfU0VDT05EU1xuICAgIG5hbWUgPSBjb250YWluZXJfbmFtZSh0YXNrKVxuICAgIHNsaWNlX25hbWUgPSBhdHRlbXB0X3NsaWNlKHRhc2tbJ2F0dGVtcHQnXSlcbiAgICB3aXRoIHRlbXBmaWxlLlRlbXBvcmFyeURpcmVjdG9yeShkaXI9U0NSQVRDSCkgYXMgZGlyZWN0b3J5OlxuICAgICAgICBmb2xkZXIgPSBQYXRoKGRpcmVjdG9yeSlcbiAgICAgICAgc291cmNlID0gZm9sZGVyIC8gJ3NvdXJjZSdcbiAgICAgICAgb3V0cHV0ID0gZm9sZGVyIC8gJ291dHB1dCdcbiAgICAgICAgYnVuZGxlX2FyY2hpdmUgPSBmb2xkZXIgLyAndGFzay1idW5kbGUudGFyLmd6J1xuICAgICAgICBidW5kbGUgPSBmb2xkZXIgLyAnYnVuZGxlJ1xuICAgICAgICBwb3N0X2F0dGVtcHQoYXBpLCB0YXNrLCAnc3RhcnQnKVxuICAgICAgICB2ZXJpZnlfdGFza19zaWduYXR1cmUoYXBpLCB0YXNrKVxuICAgICAgICBkb3dubG9hZCh0YXNrWydidW5kbGVfdXJsJ10sIGJ1bmRsZV9hcmNoaXZlLCB0YXNrWydidW5kbGVfc2l6ZSddLCB0YXNrWydidW5kbGVfY2hlY2tzdW0nXSwgc2V0dXBfZGVhZGxpbmUpXG4gICAgICAgIGV4dHJhY3RfYnVuZGxlKGJ1bmRsZV9hcmNoaXZlLCBidW5kbGUsIHRhc2spXG4gICAgICAgIHZlcmlmeV9idW5kbGUoYXBpLCB0YXNrLCBjb25maWcsIGJ1bmRsZSlcbiAgICAgICAgZGVhZGxpbmUgPSB0aW1lLm1vbm90b25pYygpICsgbWF4KDEsIGludCh0YXNrLmdldCgndGltZW91dCcpIG9yIHRhc2tbJ3RpbWVvdXRfc2Vjb25kcyddKSlcbiAgICAgICAgaW5wdXRfdXJsLCBpbnB1dF9zaXplLCBpbnB1dF9jaGVja3N1bSA9IGZpcnN0X2lucHV0KHRhc2spXG4gICAgICAgIGRvd25sb2FkKGlucHV0X3VybCwgc291cmNlLCBpbnB1dF9zaXplLCBpbnB1dF9jaGVja3N1bSwgZGVhZGxpbmUpXG4gICAgICAgIHdyaXRlX2pzb24oZm9sZGVyIC8gJ3Rhc2suanNvbicsIHtrZXk6IHRhc2tba2V5XSBmb3Iga2V5IGluICgnb3BlcmF0aW9uJywgJ2ZpbmdlcnByaW50JywgJ3J1bnRpbWVfYWJpJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGtleSBpbiB0YXNrfSB8IHsnb3B0aW9ucyc6IHRhc2suZ2V0KCdvcHRpb25zJykgb3IgdGFzay5nZXQoJ3BhcmFtZXRlcnMnKSBvciB7fX0pXG4gICAgICAgIGZvciBmaWxlIGluIGZvbGRlci5pdGVyZGlyKCk6XG4gICAgICAgICAgICBvcy5jaG93bihmaWxlLCAxMDAwMSwgMTAwMDEpXG4gICAgICAgIG9zLmNob3duKGZvbGRlciwgMTAwMDEsIDEwMDAxKVxuICAgICAgICB0cnk6XG4gICAgICAgICAgICBjb21tYW5kKGRvY2tlcl9hcmdzKGNvbmZpZywgdGFza1snb3BlcmF0aW9uJ10sIHNsaWNlX25hbWUpICsgWyctLW5hbWU9JyArIG5hbWUsICctLWVudj1UTVBESVI9L3Rhc2snLFxuICAgICAgICAgICAgICAgICAgICAnLS1tb3VudD10eXBlPWJpbmQsc3JjPScgKyBkaXJlY3RvcnkgKyAnLGRzdD0vdGFzaycsXG4gICAgICAgICAgICAgICAgICAgICctLW1vdW50PXR5cGU9YmluZCxzcmM9JyArIHN0cihidW5kbGUpICsgJyxkc3Q9L2J1bmRsZSxyZWFkb25seScsIGNvbmZpZ1snaW1hZ2UnXSxcbiAgICAgICAgICAgICAgICAgICAgJ3J1YnknLCAnL2J1bmRsZS9zY3JpcHQvaGVhdnlfcHJvY2Vzc2luZy9leGVjdXRlLnJiJ10sIG1heCgxLCBkZWFkbGluZSAtIHRpbWUubW9ub3RvbmljKCkpKVxuICAgICAgICBmaW5hbGx5OlxuICAgICAgICAgICAgZmluaXNoX2F0dGVtcHQobmFtZSwgc2xpY2VfbmFtZSwgbWVhc3VyZWQpXG4gICAgICAgIGxpbWl0ID0gNCAqIDEwMjQqKjMgaWYgdGFza1snb3BlcmF0aW9uJ10gPT0gJ3ppcF9hcmNoaXZlJyBlbHNlIDEwMCAqIDEwMjQqKjJcbiAgICAgICAgaWYgbm90IDAgPCBvdXRwdXQuc3RhdCgpLnN0X3NpemUgPD0gbGltaXQ6XG4gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIG91dHB1dCBzaXplJylcbiAgICAgICAgb3V0cHV0X25hbWUsIHVwbG9hZF91cmwsIGhlYWRlcnMsIG1lZGlhX3R5cGUgPSBmaXJzdF9vdXRwdXQodGFzaylcbiAgICAgICAgaWYgbm90IHVwbG9hZF91cmw6XG4gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdNaXNzaW5nIG91dHB1dCB1cGxvYWQgVVJMJylcbiAgICAgICAgIyBBbm90aGVyIHdvcmtlciBtYXkgaG9sZCB0aGUgam9iIGJ5IG5vdzsgbmV2ZXIgdXBsb2FkIG92ZXIgaXRzIHJlc3VsdC5cbiAgICAgICAgcmVtYWluaW5nID0gY29uZmlybV9sZWFzZShhcGksIHRhc2spXG4gICAgICAgIGRlYWRsaW5lID0gbWluKGRlYWRsaW5lLCB0aW1lLm1vbm90b25pYygpICsgcmVtYWluaW5nKVxuICAgICAgICB1cGxvYWQodXBsb2FkX3VybCwgaGVhZGVycywgb3V0cHV0LCBkZWFkbGluZSwgbG9zdD1sYW1iZGE6IGxlYXNlX2xvc3QodGFzaykpXG4gICAgICAgIGRpZ2VzdCA9IHNoYTI1Nl9maWxlKG91dHB1dClcbiAgICAgICAgcG9zdF9hdHRlbXB0KGFwaSwgdGFzaywgJ2NvbXBsZXRlJywgZGljdChcbiAgICAgICAgICAgIGR1cmF0aW9uX21zPWludCgodGltZS5tb25vdG9uaWMoKSAtIHN0YXJ0ZWQpICogMTAwMCksXG4gICAgICAgICAgICBvdXRwdXRzPVt7J25hbWUnOiBvdXRwdXRfbmFtZSwgJ21lZGlhX3R5cGUnOiBtZWRpYV90eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICdzaXplX2J5dGVzJzogb3V0cHV0LnN0YXQoKS5zdF9zaXplLCAnc2hhMjU2JzogZGlnZXN0fV0sIG1lYXN1cmVtZW50PW1lYXN1cmVkKSlcblxuXG5kZWYgYXBwbHlfbGltaXRzKGNvbmZpZyk6XG4gICAgY29tbWFuZChbJ21vdW50JywgJy1vJywgJ3JlbW91bnQsc2l6ZT0nICsgc3RyKGNvbmZpZ1snc2NyYXRjaF9tYiddKSArICdtJywgc3RyKFNDUkFUQ0gpXSlcbiAgICBjb21tYW5kKFsnc3lzdGVtY3RsJywgJ3NldC1wcm9wZXJ0eScsICctLXJ1bnRpbWUnLCAnY29tcHV0ZS5zbGljZScsXG4gICAgICAgICAgICAgJ01lbW9yeU1heD0nICsgc3RyKGNvbmZpZ1snbWVtb3J5X21iJ10pICsgJ00nLFxuICAgICAgICAgICAgICdNZW1vcnlMb3c9MCcsICdNZW1vcnlTd2FwTWF4PTAnLCAnQ1BVV2VpZ2h0PTEwJywgJ0lPV2VpZ2h0PTEwJyxcbiAgICAgICAgICAgICAnQ1BVUXVvdGE9JyArIHN0cihmbG9hdChjb25maWdbJ2NwdXMnXSkgKiAxMDApICsgJyUnXSlcblxuXG5kZWYgdGVzdF9jYXBhYmlsaXRpZXMoY29uZmlnLCByZXF1ZXN0X2lkPU5vbmUpOlxuICAgIG5hbWUgPSAnZGdlLXByb2JlLScgKyBzdHIob3MuZ2V0cGlkKCkpXG4gICAgdHJ5OlxuICAgICAgICB0cnk6XG4gICAgICAgICAgICByZXN1bHRzID0ganNvbi5sb2Fkcyhjb21tYW5kKGRvY2tlcl9hcmdzKGNvbmZpZykgKyBbJy0tbmFtZT0nICsgbmFtZSwgY29uZmlnWydpbWFnZSddLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnVieScsICdzY3JpcHQvaGVhdnlfcHJvY2Vzc2luZy9leGVjdXRlLnJiJywgJy0tcHJvYmUnXSwgMjEwKSlcbiAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGVycm9yOlxuICAgICAgICAgICAgcmVzdWx0cyA9IHByb2JlX2NhcGFiaWxpdHlfcmVzdWx0cyhlcnJvcilcbiAgICAgICAgICAgIGlmIHJlc3VsdHMgaXMgTm9uZTpcbiAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoZGVzY3JpYmVfcHJvY2Vzc19lcnJvcihlcnJvcikpIGZyb20gZXJyb3JcbiAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UocmVzdWx0cywgZGljdCkgb3Igbm90IHJlc3VsdHM6XG4gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIGNhcGFiaWxpdHkgcmVzdWx0cycpXG4gICAgICAgIGlmICd3ZWJfZmV0Y2hfYmF0Y2gnIGluIHJlc3VsdHMgYW5kIG5vdCBwdWJsaWNfd2ViX2VuYWJsZWQoKTpcbiAgICAgICAgICAgIHJlc3VsdHNbJ3dlYl9mZXRjaF9iYXRjaCddID0gZGljdChzdGF0dXM9J3VuYXZhaWxhYmxlJywgZXJyb3I9J1B1YmxpY1dlYlJlcXVlc3RzRGlzYWJsZWQnKVxuICAgICAgICByZXR1cm4gZGljdChpZD1yZXF1ZXN0X2lkIG9yIHN0cih0aW1lLnRpbWVfbnMoKSksIGltYWdlPWNvbmZpZ1snaW1hZ2UnXSwgcmVzdWx0cz1yZXN1bHRzKVxuICAgIGZpbmFsbHk6XG4gICAgICAgIHN1YnByb2Nlc3MucnVuKFsnZG9ja2VyJywgJ3JtJywgJy1mJywgbmFtZV0sIHN0ZG91dD1zdWJwcm9jZXNzLkRFVk5VTEwsIHN0ZGVycj1zdWJwcm9jZXNzLkRFVk5VTEwsIHRpbWVvdXQ9MTUpXG5cblxuZGVmIHBhc3NpbmdfY2FwYWJpbGl0aWVzKHByb2JlKTpcbiAgICByZXR1cm4gYWxsb3dlZF9jYXBhYmlsaXRpZXMoe29wZXJhdGlvbjogcmVzdWx0WydmaW5nZXJwcmludCddIGZvciBvcGVyYXRpb24sIHJlc3VsdCBpbiBwcm9iZVsncmVzdWx0cyddLml0ZW1zKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlc3VsdC5nZXQoJ3N0YXR1cycpID09ICdwYXNzZWQnfSlcblxuXG5kZWYgdmVyaWZ5X2J1bmRsZShhcGksIHRhc2ssIGNvbmZpZywgYnVuZGxlKTpcbiAgICB0ZXN0cyA9IHJlYWRfanNvbihST09UIC8gJ2J1bmRsZS10ZXN0cy5qc29uJywge30pXG4gICAgcHJldmlvdXMgPSB0ZXN0cy5nZXQodGFza1snYnVuZGxlX2RpZ2VzdCddKVxuICAgIGlmIHByZXZpb3VzIGFuZCBwcmV2aW91cy5nZXQoJ3N0YXR1cycpID09ICdwYXNzZWQnOlxuICAgICAgICByZXR1cm5cbiAgICBjb21tYW5kX2xpbmUgPSBkb2NrZXJfYXJncyhjb25maWcpICsgWyctLW1vdW50PXR5cGU9YmluZCxzcmM9JyArIHN0cihidW5kbGUpICsgJyxkc3Q9L2J1bmRsZSxyZWFkb25seScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdbJ2ltYWdlJ10sICdydWJ5JywgJy9idW5kbGUvc2NyaXB0L2hlYXZ5X3Byb2Nlc3NpbmcvZXhlY3V0ZS5yYicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLS1wcm9iZS1vcGVyYXRpb24nLCB0YXNrWydvcGVyYXRpb24nXV1cbiAgICB0cnk6XG4gICAgICAgIHJlc3VsdCA9IGpzb24ubG9hZHMoY29tbWFuZChjb21tYW5kX2xpbmUsIDIxMCkpXG4gICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlcnJvcjpcbiAgICAgICAgcmVzdWx0ID0gcHJvYmVfb3BlcmF0aW9uX3Jlc3VsdChlcnJvcilcbiAgICAgICAgaWYgcmVzdWx0IGlzIE5vbmU6XG4gICAgICAgICAgICByZXN1bHQgPSB7J3N0YXR1cyc6ICdmYWlsZWQnLCAnZmluZ2VycHJpbnQnOiB0YXNrWydidW5kbGVfZGlnZXN0J10sXG4gICAgICAgICAgICAgICAgICAgICAgJ2Vycm9yJzogZGVzY3JpYmVfcHJvY2Vzc19lcnJvcihlcnJvcil9XG4gICAgdGVzdHNbdGFza1snYnVuZGxlX2RpZ2VzdCddXSA9IHJlc3VsdFxuICAgIHdyaXRlX2pzb24oUk9PVCAvICdidW5kbGUtdGVzdHMuanNvbicsIGRpY3QobGlzdCh0ZXN0cy5pdGVtcygpKVstMTAwOl0pKVxuICAgIHJlcG9ydCA9IGRpY3QoaWQ9dGFza1snYnVuZGxlX2RpZ2VzdCddLCBraW5kPSdidW5kbGUnLCBidW5kbGVfZGlnZXN0PXRhc2tbJ2J1bmRsZV9kaWdlc3QnXSxcbiAgICAgICAgICAgICAgICAgIGltYWdlPWNvbmZpZ1snaW1hZ2UnXSwgcmVzdWx0cz17dGFza1snb3BlcmF0aW9uJ106IHJlc3VsdH0pXG4gICAgd2l0aCBTVEFURV9MT0NLOlxuICAgICAgICBSRVBPUlRbJ2NhcGFiaWxpdHlfdGVzdCddID0gcmVwb3J0XG4gICAgaGVhcnRiZWF0KGFwaSlcbiAgICBpZiByZXN1bHQuZ2V0KCdzdGF0dXMnKSAhPSAncGFzc2VkJzpcbiAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdUYXNrQnVuZGxlQ2FwYWJpbGl0eUZhaWxlZCcpXG5cblxuZGVmIHJlZnJlc2hfY2FwYWJpbGl0aWVzKGNvbmZpZywgcmVsZWFzZSwgcmVxdWVzdF9pZCk6XG4gICAgcHJvYmUgPSB0ZXN0X2NhcGFiaWxpdGllcyhjb25maWcsIHJlcXVlc3RfaWQpXG4gICAgY2FwYWJpbGl0aWVzID0gcGFzc2luZ19jYXBhYmlsaXRpZXMocHJvYmUpXG4gICAgd3JpdGVfanNvbihyZWxlYXNlIC8gJ2NhcGFiaWxpdHlfdGVzdC5qc29uJywgcHJvYmUpXG4gICAgd3JpdGVfanNvbihyZWxlYXNlIC8gJ2NhcGFiaWxpdGllcy5qc29uJywgY2FwYWJpbGl0aWVzKVxuICAgIHdpdGggU1RBVEVfTE9DSzpcbiAgICAgICAgUkVQT1JULnVwZGF0ZShjYXBhYmlsaXR5X3Rlc3Q9cHJvYmUsIGNhcGFiaWxpdGllcz1jYXBhYmlsaXRpZXMpXG4gICAgICAgIGlmIFJFUE9SVC5nZXQoJ3VwZGF0ZV9lcnJvcicpID09ICdDYXBhYmlsaXR5VGVzdEZhaWxlZCc6XG4gICAgICAgICAgICBSRVBPUlRbJ3VwZGF0ZV9lcnJvciddID0gTm9uZVxuXG5cbmRlZiBzdXBlcnZpc29yX2Nhbl9jaGVja19pbihzb3VyY2UpOlxuICAgIHJldHVybiAoJ1JFR0lTVFJZX0FVVEhfVkVSU0lPTiA9IDEnIGluIHNvdXJjZSBhbmQgJ0JST1dTRVJfVUEnIGluIHNvdXJjZSBhbmRcbiAgICAgICAgICAgIFwicmV0dXJuIHN0cihzZWxmLmlkZW50aXR5LmdldCgnd29ya2VyX2lkJylcIiBpbiBzb3VyY2UpXG5cblxuZGVmIHN0YWdlX3VwZGF0ZShjb25maWcpOlxuICAgIGltcG9ydCByZVxuICAgIGlmIG5vdCByZS5mdWxsbWF0Y2gocidbYS16QS1aMC05Ll8tXXsxLDgwfScsIGNvbmZpZ1sndmVyc2lvbiddKTpcbiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW52YWxpZCBjb25maWd1cmF0aW9uIHZlcnNpb24nKVxuICAgIGlmIG5vdCByZS5mdWxsbWF0Y2gocidbYS16QS1aMC05XVthLXpBLVowLTkuLzpfLV0qQHNoYTI1NjpbYS1mMC05XXs2NH0nLCBjb25maWdbJ2ltYWdlJ10pOlxuICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbWFnZSBtdXN0IGJlIHBpbm5lZCBieSBkaWdlc3QnKVxuICAgIGlmIG5vdCA1MTIgPD0gY29uZmlnWydtZW1vcnlfbWInXSA8PSBtZW1vcnkoKVsnTWVtVG90YWwnXSAvLyAxMDI0KioyIC0gNTEyOlxuICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnN1ZmZpY2llbnQgaG9zdCBtZW1vcnknKVxuICAgIGlmIG5vdCAyNTYgPD0gY29uZmlnWydzY3JhdGNoX21iJ10gPD0gY29uZmlnWydtZW1vcnlfbWInXSAtIDI1NjpcbiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW52YWxpZCBzY3JhdGNoIG1lbW9yeScpXG4gICAgY2lfbGltaXQgPSBQYXRoKCcvc3lzL2ZzL2Nncm91cC9jaS5zbGljZS9tZW1vcnkubWF4JylcbiAgICBpZiBjaV9saW1pdC5leGlzdHMoKSBhbmQgY2lfbGltaXQucmVhZF90ZXh0KCkuc3RyaXAoKS5pc2RpZ2l0KCk6XG4gICAgICAgIGF2YWlsYWJsZSA9IG1lbW9yeSgpWydNZW1Ub3RhbCddIC0gaW50KGNpX2xpbWl0LnJlYWRfdGV4dCgpKSAtIDUxMiAqIDEwMjQqKjJcbiAgICAgICAgaWYgY29uZmlnWydtZW1vcnlfbWInXSAqIDEwMjQqKjIgPiBhdmFpbGFibGU6XG4gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdDb25maWd1cmF0aW9uIGV4Y2VlZHMgbWVtb3J5IHJlbWFpbmluZyBhZnRlciBDSSByZXNlcnZhdGlvbicpXG4gICAgcHVsbF9pbWFnZShjb25maWcpXG4gICAgcHJvYmUgPSB0ZXN0X2NhcGFiaWxpdGllcyhjb25maWcpXG4gICAgY2FwYWJpbGl0aWVzID0gcGFzc2luZ19jYXBhYmlsaXRpZXMocHJvYmUpXG4gICAgY3VycmVudCA9IGFsbG93ZWRfY2FwYWJpbGl0aWVzKHJlYWRfanNvbihQYXRoKHJlYWRfanNvbihST09UIC8gJ2N1cnJlbnQuanNvbicpKSAvICdjYXBhYmlsaXRpZXMuanNvbicsIHt9KSlcbiAgICBwcmV2aW91c19jb25maWcgPSByZWFkX2pzb24oUGF0aChyZWFkX2pzb24oUk9PVCAvICdjdXJyZW50Lmpzb24nKSkgLyAnY29uZmlnLmpzb24nLCB7fSlcbiAgICByZWR1Y2VkID0gKHByZXZpb3VzX2NvbmZpZy5nZXQoJ2ltYWdlJykgPT0gY29uZmlnWydpbWFnZSddIGFuZFxuICAgICAgICAgICAgICAgKGNvbmZpZ1snbWVtb3J5X21iJ10gPCBwcmV2aW91c19jb25maWcuZ2V0KCdtZW1vcnlfbWInLCAwKSBvclxuICAgICAgICAgICAgICAgIGNvbmZpZ1snY3B1cyddIDwgcHJldmlvdXNfY29uZmlnLmdldCgnY3B1cycsIDApKSlcbiAgICBpZiBub3QgcmVkdWNlZCBhbmQgYW55KG9wZXJhdGlvbiBub3QgaW4gY2FwYWJpbGl0aWVzIGZvciBvcGVyYXRpb24gaW4gY3VycmVudCk6XG4gICAgICAgIHdpdGggU1RBVEVfTE9DSzpcbiAgICAgICAgICAgIFJFUE9SVFsnY2FwYWJpbGl0eV90ZXN0J10gPSBwcm9iZVxuICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0NhcGFiaWxpdHlSZWdyZXNzaW9uJylcbiAgICByZWxlYXNlID0gUk9PVCAvICdyZWxlYXNlcycgLyBjb25maWdbJ3ZlcnNpb24nXVxuICAgIHJlbGVhc2UubWtkaXIocGFyZW50cz1UcnVlLCBleGlzdF9vaz1UcnVlKVxuICAgIGNvbnRhaW5lciA9IGNvbW1hbmQoWydkb2NrZXInLCAnY3JlYXRlJywgY29uZmlnWydpbWFnZSddXSlcbiAgICB0cnk6XG4gICAgICAgIGNvbW1hbmQoWydkb2NrZXInLCAnY3AnLCBjb250YWluZXIgKyAnOi9hcHAvc2NyaXB0L2hlYXZ5X3Byb2Nlc3NpbmcvYWdlbnQucHknLCBzdHIocmVsZWFzZSAvICdhZ2VudC5weScpXSlcbiAgICBmaW5hbGx5OlxuICAgICAgICBjb21tYW5kKFsnZG9ja2VyJywgJ3JtJywgY29udGFpbmVyXSlcbiAgICBpZiBub3Qgc3VwZXJ2aXNvcl9jYW5fY2hlY2tfaW4oKHJlbGVhc2UgLyAnYWdlbnQucHknKS5yZWFkX3RleHQoKSk6XG4gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1dvcmtlciBpbWFnZSBjYW5ub3QgcmVhY2ggdGhlIGNvbnRyb2wgcGxhbmU7IGFzc2lnbiBhIG5ld2VyIGltYWdlJylcbiAgICBjb21tYW5kKFtzeXMuZXhlY3V0YWJsZSwgJy1tJywgJ3B5X2NvbXBpbGUnLCBzdHIocmVsZWFzZSAvICdhZ2VudC5weScpXSlcbiAgICB3cml0ZV9qc29uKHJlbGVhc2UgLyAnY29uZmlnLmpzb24nLCBjb25maWcpXG4gICAgd3JpdGVfanNvbihyZWxlYXNlIC8gJ2NhcGFiaWxpdGllcy5qc29uJywgY2FwYWJpbGl0aWVzKVxuICAgIHdyaXRlX2pzb24ocmVsZWFzZSAvICdjYXBhYmlsaXR5X3Rlc3QuanNvbicsIHByb2JlKVxuICAgIGFwcGx5X2xpbWl0cyhjb25maWcpXG4gICAgd3JpdGVfanNvbihST09UIC8gJ3BlbmRpbmcuanNvbicsIGRpY3QocHJldmlvdXM9cmVhZF9qc29uKFJPT1QgLyAnY3VycmVudC5qc29uJyksIHRhcmdldD1zdHIocmVsZWFzZSksIHZlcnNpb249Y29uZmlnWyd2ZXJzaW9uJ10pKVxuICAgIHdyaXRlX2pzb24oUk9PVCAvICdjdXJyZW50Lmpzb24nLCBzdHIocmVsZWFzZSkpXG5cblxuZGVmIHB1bGxfaW1hZ2UoY29uZmlnKTpcbiAgICBpZiBub3QgY29uZmlnWydpbWFnZSddLnN0YXJ0c3dpdGgoJ3JlZ2lzdHJ5LmdpdGxhYi5jb20vJyk6XG4gICAgICAgIHJldHVybiBjb21tYW5kKFsnZG9ja2VyJywgJ3B1bGwnLCBjb25maWdbJ2ltYWdlJ11dLCA2MDApXG4gICAgYXV0aG9yaXphdGlvbiA9IEFQSSgpLnBvc3QoJ3JlZ2lzdHJ5X2F1dGhvcml6YXRpb24nLCB7fSlcbiAgICBpZiBhdXRob3JpemF0aW9uLmdldCgnaW1hZ2UnKSAhPSBjb25maWdbJ2ltYWdlJ106XG4gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1dvcmtlciBpbWFnZSBhc3NpZ25tZW50IGNoYW5nZWQ7IHJldHJ5aW5nIGF0IG5leHQgY2hlY2staW4nKVxuICAgIHJlZ2lzdHJ5ID0gY29uZmlnWydpbWFnZSddLnNwbGl0KCcvJywgMSlbMF1cbiAgICBpZiBhdXRob3JpemF0aW9uLmdldCgncmVnaXN0cnknKSAhPSByZWdpc3RyeTpcbiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVW5leHBlY3RlZCByZWdpc3RyeSBhdXRob3JpemF0aW9uJylcbiAgICB3aXRoIHRlbXBmaWxlLlRlbXBvcmFyeURpcmVjdG9yeShwcmVmaXg9J3JlZ2lzdHJ5LScsIGRpcj0nL3J1bi9kZ2Utd29ya2VyJykgYXMgZGlyZWN0b3J5OlxuICAgICAgICBjcmVkZW50aWFscyA9IFBhdGgoZGlyZWN0b3J5KSAvICdjb25maWcuanNvbidcbiAgICAgICAgd3JpdGVfanNvbihjcmVkZW50aWFscywgeydhdXRocyc6IHtyZWdpc3RyeTogeydyZWdpc3RyeXRva2VuJzogYXV0aG9yaXphdGlvblsndG9rZW4nXX19fSlcbiAgICAgICAgY29tbWFuZChbJ2RvY2tlcicsICctLWNvbmZpZycsIGRpcmVjdG9yeSwgJ3B1bGwnLCBjb25maWdbJ2ltYWdlJ11dLCA2MDApXG5cblxuZGVmIHJlcGxhY2VfZmllbGQoYm9keSwgbmFtZSwgdmFsdWUpOlxuICAgIGxpbmUgPSBuYW1lICsgJyA9ICcgKyBqc29uLmR1bXBzKHZhbHVlKSArICdcXG4nXG4gICAgcGF0dGVybiA9IHInKD9tKV5cXHMqJyArIHJlLmVzY2FwZShuYW1lKSArIHInXFxzKj0uKlxcbidcbiAgICByZXR1cm4gcmUuc3ViKHBhdHRlcm4sIGxhbWJkYSBfOiBsaW5lLCBib2R5KSBpZiByZS5zZWFyY2gocGF0dGVybiwgYm9keSkgZWxzZSBib2R5ICsgbGluZVxuXG5cbmRlZiByZXdyaXRlX3J1bm5lcl9jb25maWcocGF0aCwgZXhwZWN0ZWQsIGVkaXRfZ2xvYmFsLCBlZGl0X3J1bm5lcik6XG4gICAgXCJcIlwiRWRpdCBjb25maWcudG9tbCB0ZXh0dWFsbHksIGtlZXBpbmcgdG9rZW5zIGFuZCBjb21tZW50czsgcGFyc2VkIHJlc3VsdCBtdXN0IGVxdWFsIGV4cGVjdGVkLlwiXCJcIlxuICAgIGltcG9ydCB0b21sbGliXG4gICAgb3JpZ2luYWwgPSBwYXRoLnJlYWRfdGV4dCgpXG4gICAgYmxvY2tzID0gcmUuc3BsaXQocicoP20pXlxccypcXFtcXFtydW5uZXJzXFxdXFxdXFxzKlxcbicsIG9yaWdpbmFsKVxuICAgIGlmIGxlbihibG9ja3MpIC0gMSAhPSBsZW4oZXhwZWN0ZWQuZ2V0KCdydW5uZXJzJywgW10pKTpcbiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVW5zdXBwb3J0ZWQgcnVubmVyIGNvbmZpZ3VyYXRpb24gbGF5b3V0JylcbiAgICB1cGRhdGVkID0gZWRpdF9nbG9iYWwoYmxvY2tzWzBdKVxuICAgIGZvciBibG9jaywgcnVubmVyIGluIHppcChibG9ja3NbMTpdLCBleHBlY3RlZC5nZXQoJ3J1bm5lcnMnLCBbXSkpOlxuICAgICAgICBzZWN0aW9ucyA9IHJlLnNwbGl0KHInKD9tKV4oXFxzKlxcW1teXFxuXStcXF1cXHMqXFxuKScsIGJsb2NrKVxuICAgICAgICB1cGRhdGVkICs9ICdbW3J1bm5lcnNdXVxcbicgKyAnJy5qb2luKGVkaXRfcnVubmVyKHNlY3Rpb25zLCBydW5uZXIpKVxuICAgIGlmIHRvbWxsaWIubG9hZHModXBkYXRlZCkgIT0gZXhwZWN0ZWQ6XG4gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1J1bm5lciBjb25maWd1cmF0aW9uIHZhbGlkYXRpb24gZmFpbGVkOyBubyBjaGFuZ2VzIHdyaXR0ZW4nKVxuICAgIGlmIHVwZGF0ZWQgIT0gb3JpZ2luYWw6XG4gICAgICAgIGJhY2t1cCA9IHBhdGgud2l0aF9uYW1lKCdjb25maWcudG9tbC5iZWZvcmUtY29tcHV0ZS0nICsgc3RyKHRpbWUudGltZV9ucygpKSlcbiAgICAgICAgYmFja3VwLndyaXRlX3RleHQob3JpZ2luYWwpXG4gICAgICAgIGJhY2t1cC5jaG1vZCgwbzYwMClcbiAgICAgICAgdGVtcG9yYXJ5ID0gcGF0aC53aXRoX25hbWUoJ2NvbmZpZy50b21sLmNvbXB1dGUtcGVuZGluZycpXG4gICAgICAgIHRlbXBvcmFyeS53cml0ZV90ZXh0KHVwZGF0ZWQpXG4gICAgICAgIHRlbXBvcmFyeS5jaG1vZCgwbzYwMClcbiAgICAgICAgb3MucmVwbGFjZSh0ZW1wb3JhcnksIHBhdGgpXG5cblxuZGVmIGNvbmZpZ3VyZV9jaSgpOlxuICAgIFwiXCJcIlBsYWNlIERvY2tlciBleGVjdXRvciBqb2JzLCBzZXJ2aWNlcyBhbmQgY2xhc3NpYyBidWlsZHMgYmVsb3cgY29tcHV0ZS5cIlwiXCJcbiAgICBpbXBvcnQgY29weVxuICAgIGltcG9ydCB0b21sbGliXG4gICAgaWYgbm90IFJVTk5FUl9DT05GSUcuZXhpc3RzKCk6XG4gICAgICAgIHJldHVyblxuICAgIGV4cGVjdGVkID0gY29weS5kZWVwY29weSh0b21sbGliLmxvYWRzKFJVTk5FUl9DT05GSUcucmVhZF90ZXh0KCkpKVxuICAgIGZvciBydW5uZXIgaW4gZXhwZWN0ZWQuZ2V0KCdydW5uZXJzJywgW10pOlxuICAgICAgICBpZiBydW5uZXIuZ2V0KCdleGVjdXRvcicpICE9ICdkb2NrZXInOlxuICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignQXV0b21hdGljIENJIHByaW9yaXRpemF0aW9uIHJlcXVpcmVzIHRoZSBEb2NrZXIgZXhlY3V0b3InKVxuICAgICAgICBlbnZpcm9ubWVudCA9IFtpdGVtIGZvciBpdGVtIGluIHJ1bm5lci5nZXQoJ2Vudmlyb25tZW50JywgW10pIGlmIG5vdCBpdGVtLnN0YXJ0c3dpdGgoJ0NJX0RPQ0tFUl9DR1JPVVBfUEFSRU5UPScpXVxuICAgICAgICBydW5uZXJbJ2Vudmlyb25tZW50J10gPSBlbnZpcm9ubWVudCArIFsnQ0lfRE9DS0VSX0NHUk9VUF9QQVJFTlQ9Y2kuc2xpY2UnXVxuICAgICAgICBydW5uZXIuc2V0ZGVmYXVsdCgnZG9ja2VyJywge30pLnVwZGF0ZShjZ3JvdXBfcGFyZW50PSdjaS5zbGljZScsIHNlcnZpY2VfY2dyb3VwX3BhcmVudD0nY2kuc2xpY2UnKVxuXG4gICAgZGVmIGVkaXRfcnVubmVyKHNlY3Rpb25zLCBydW5uZXIpOlxuICAgICAgICBzZWN0aW9uc1swXSA9IHJlcGxhY2VfZmllbGQoc2VjdGlvbnNbMF0sICdlbnZpcm9ubWVudCcsIHJ1bm5lclsnZW52aXJvbm1lbnQnXSlcbiAgICAgICAgZm91bmQgPSBGYWxzZVxuICAgICAgICBmb3IgaW5kZXggaW4gcmFuZ2UoMSwgbGVuKHNlY3Rpb25zKSwgMik6XG4gICAgICAgICAgICBpZiBzZWN0aW9uc1tpbmRleF0uc3RyaXAoKSA9PSAnW3J1bm5lcnMuZG9ja2VyXSc6XG4gICAgICAgICAgICAgICAgYm9keSA9IHJlcGxhY2VfZmllbGQoc2VjdGlvbnNbaW5kZXggKyAxXSwgJ2Nncm91cF9wYXJlbnQnLCAnY2kuc2xpY2UnKVxuICAgICAgICAgICAgICAgIHNlY3Rpb25zW2luZGV4ICsgMV0gPSByZXBsYWNlX2ZpZWxkKGJvZHksICdzZXJ2aWNlX2Nncm91cF9wYXJlbnQnLCAnY2kuc2xpY2UnKVxuICAgICAgICAgICAgICAgIGZvdW5kID0gVHJ1ZVxuICAgICAgICBpZiBub3QgZm91bmQ6XG4gICAgICAgICAgICBzZWN0aW9ucyArPSBbJ1xcbltydW5uZXJzLmRvY2tlcl1cXG4nLCAnY2dyb3VwX3BhcmVudCA9IFwiY2kuc2xpY2VcIlxcbnNlcnZpY2VfY2dyb3VwX3BhcmVudCA9IFwiY2kuc2xpY2VcIlxcbiddXG4gICAgICAgIHJldHVybiBzZWN0aW9uc1xuXG4gICAgcmV3cml0ZV9ydW5uZXJfY29uZmlnKFJVTk5FUl9DT05GSUcsIGV4cGVjdGVkLCBsYW1iZGEgaGVhZDogaGVhZCwgZWRpdF9ydW5uZXIpXG4gICAgaWYgbm90IENJX1NMSUNFLmV4aXN0cygpOlxuICAgICAgICBDSV9TTElDRS53cml0ZV90ZXh0KCdbU2xpY2VdXFxuQ1BVV2VpZ2h0PTEwXFxuSU9XZWlnaHQ9MTBcXG4nKVxuXG5cbmRlZiBtYW5hZ2VkX2NpX3J1bm5lcigpOlxuICAgIGltcG9ydCB0b21sbGliXG4gICAgaWYgbm90IFJVTk5FUl9DT05GSUcuZXhpc3RzKCk6XG4gICAgICAgIHJldHVybiBOb25lXG4gICAgcnVubmVycyA9IHRvbWxsaWIubG9hZHMoUlVOTkVSX0NPTkZJRy5yZWFkX3RleHQoKSkuZ2V0KCdydW5uZXJzJywgW10pXG4gICAgcmV0dXJuIG5leHQoKHJ1bm5lciBmb3IgcnVubmVyIGluIHJ1bm5lcnMgaWYgcnVubmVyLmdldCgnbmFtZScpID09IENJX1JVTk5FUl9OQU1FKSwgTm9uZSlcblxuXG5kZWYgaW5zdGFsbF9naXRsYWJfcnVubmVyKCk6XG4gICAgaWYgc2h1dGlsLndoaWNoKCdnaXRsYWItcnVubmVyJyk6XG4gICAgICAgIHJldHVyblxuICAgIGlmIG5vdCBzaHV0aWwud2hpY2goJ2FwdC1nZXQnKTpcbiAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdJbnN0YWxsIGdpdGxhYi1ydW5uZXIgb24gdGhpcyBob3N0OyBvbmx5IGFwdCBob3N0cyBhcmUgYXV0b21hdGVkJylcbiAgICB3aXRoIHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZShzdWZmaXg9Jy5zaCcpIGFzIHNjcmlwdDpcbiAgICAgICAgd2l0aCB1cmxsaWIucmVxdWVzdC51cmxvcGVuKEdJVExBQl9SVU5ORVJfUkVQT1NJVE9SWSwgdGltZW91dD02MCkgYXMgcmVzcG9uc2U6XG4gICAgICAgICAgICBzY3JpcHQud3JpdGUocmVzcG9uc2UucmVhZCgpKVxuICAgICAgICBzY3JpcHQuZmx1c2goKVxuICAgICAgICBjb21tYW5kKFsnYmFzaCcsIHNjcmlwdC5uYW1lXSwgNjAwKVxuICAgIGNvbW1hbmQoWydhcHQtZ2V0JywgJ2luc3RhbGwnLCAnLXknLCAnZ2l0bGFiLXJ1bm5lciddLCA5MDApXG5cblxuZGVmIHJlZ2lzdGVyX2NpX3J1bm5lcih0b2tlbik6XG4gICAgY29tbWFuZChbJ2dpdGxhYi1ydW5uZXInLCAncmVnaXN0ZXInLCAnLS1ub24taW50ZXJhY3RpdmUnLCAnLS11cmwnLCBHSVRMQUIsICctLW5hbWUnLCBDSV9SVU5ORVJfTkFNRSxcbiAgICAgICAgICAgICAnLS1leGVjdXRvcicsICdkb2NrZXInLCAnLS1kb2NrZXItaW1hZ2UnLCBDSV9ERUZBVUxUX0lNQUdFLFxuICAgICAgICAgICAgICctLWRvY2tlci12b2x1bWVzJywgQ0lfRE9DS0VSX1NPQ0tFVCwgJy0tZG9ja2VyLXZvbHVtZXMnLCAnL2NhY2hlJ10sXG4gICAgICAgICAgICAxMjAsIGVudj17Kipvcy5lbnZpcm9uLCAnQ0lfU0VSVkVSX1RPS0VOJzogdG9rZW59KVxuXG5cbmRlZiBsaW1pdF9jaV9ydW5uZXIoY29uY3VycmVudCk6XG4gICAgXCJcIlwiQ2FwIHRoZSBtYW5hZ2VkIHJ1bm5lciBhdCBgY29uY3VycmVudGAgam9iczsgcmFpc2UgdGhlIGdsb2JhbCBjYXAgb25seSBhcyBmYXIgYXMgaXQgbmVlZHMuXCJcIlwiXG4gICAgaW1wb3J0IGNvcHlcbiAgICBpbXBvcnQgdG9tbGxpYlxuICAgIGV4cGVjdGVkID0gY29weS5kZWVwY29weSh0b21sbGliLmxvYWRzKFJVTk5FUl9DT05GSUcucmVhZF90ZXh0KCkpKVxuICAgIHRvdGFsID0gbWF4KGludChleHBlY3RlZC5nZXQoJ2NvbmN1cnJlbnQnKSBvciAxKSwgY29uY3VycmVudClcbiAgICBleHBlY3RlZFsnY29uY3VycmVudCddID0gdG90YWxcbiAgICBmb3IgcnVubmVyIGluIGV4cGVjdGVkLmdldCgncnVubmVycycsIFtdKTpcbiAgICAgICAgaWYgcnVubmVyLmdldCgnbmFtZScpID09IENJX1JVTk5FUl9OQU1FOlxuICAgICAgICAgICAgcnVubmVyLnVwZGF0ZShsaW1pdD1jb25jdXJyZW50LCByZXF1ZXN0X2NvbmN1cnJlbmN5PTQpXG5cbiAgICBkZWYgZWRpdF9nbG9iYWwoaGVhZCk6XG4gICAgICAgIGhlYWRlciA9IHJlLnNlYXJjaChyJyg/bSleXFxzKlxcWycsIGhlYWQpXG4gICAgICAgIHRvcCwgcmVzdCA9IChoZWFkWzpoZWFkZXIuc3RhcnQoKV0sIGhlYWRbaGVhZGVyLnN0YXJ0KCk6XSkgaWYgaGVhZGVyIGVsc2UgKGhlYWQsICcnKVxuICAgICAgICBwYXR0ZXJuID0gcicoP20pXlxccypjb25jdXJyZW50XFxzKj0uKlxcbidcbiAgICAgICAgbGluZSA9ICdjb25jdXJyZW50ID0gJyArIHN0cih0b3RhbCkgKyAnXFxuJ1xuICAgICAgICByZXR1cm4gKHJlLnN1YihwYXR0ZXJuLCBsYW1iZGEgXzogbGluZSwgdG9wKSBpZiByZS5zZWFyY2gocGF0dGVybiwgdG9wKSBlbHNlIGxpbmUgKyB0b3ApICsgcmVzdFxuXG4gICAgZGVmIGVkaXRfcnVubmVyKHNlY3Rpb25zLCBydW5uZXIpOlxuICAgICAgICBpZiBydW5uZXIuZ2V0KCduYW1lJykgPT0gQ0lfUlVOTkVSX05BTUU6XG4gICAgICAgICAgICBzZWN0aW9uc1swXSA9IHJlcGxhY2VfZmllbGQocmVwbGFjZV9maWVsZChzZWN0aW9uc1swXSwgJ2xpbWl0JywgY29uY3VycmVudCksICdyZXF1ZXN0X2NvbmN1cnJlbmN5JywgNClcbiAgICAgICAgcmV0dXJuIHNlY3Rpb25zXG5cbiAgICByZXdyaXRlX3J1bm5lcl9jb25maWcoUlVOTkVSX0NPTkZJRywgZXhwZWN0ZWQsIGVkaXRfZ2xvYmFsLCBlZGl0X3J1bm5lcilcblxuXG5kZWYgZW5hYmxlX2NpX3J1bm5lcihhcGksIGNvbmN1cnJlbnQpOlxuICAgIGluc3RhbGxfZ2l0bGFiX3J1bm5lcigpXG4gICAgdG9rZW4gPSBhcGkucG9zdCgnY2lfcnVubmVyX3Rva2VuJywge30pLmdldCgndG9rZW4nKSBvciAnJ1xuICAgIGlmIG5vdCB0b2tlbi5zdGFydHN3aXRoKCdnbHJ0LScpOlxuICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdDb21wdXRlIGRpZCBub3QgaXNzdWUgYSBHaXRMYWIgcnVubmVyIHRva2VuJylcbiAgICBydW5uZXIgPSBtYW5hZ2VkX2NpX3J1bm5lcigpXG4gICAgaWYgcnVubmVyIGFuZCBydW5uZXIuZ2V0KCd0b2tlbicpICE9IHRva2VuOlxuICAgICAgICBjb21tYW5kKFsnZ2l0bGFiLXJ1bm5lcicsICd1bnJlZ2lzdGVyJywgJy0tbmFtZScsIENJX1JVTk5FUl9OQU1FXSwgMTIwKVxuICAgICAgICBydW5uZXIgPSBOb25lXG4gICAgaWYgbm90IHJ1bm5lcjpcbiAgICAgICAgcmVnaXN0ZXJfY2lfcnVubmVyKHRva2VuKVxuICAgIGxpbWl0X2NpX3J1bm5lcihjb25jdXJyZW50KVxuICAgIGNvbmZpZ3VyZV9jaSgpXG4gICAgY29tbWFuZChbJ3N5c3RlbWN0bCcsICdkYWVtb24tcmVsb2FkJ10pXG4gICAgY29tbWFuZChbJ3N5c3RlbWN0bCcsICdlbmFibGUnLCAnLS1ub3cnLCAnZ2l0bGFiLXJ1bm5lci5zZXJ2aWNlJ10pXG4gICAgY29tbWFuZChbJ2dpdGxhYi1ydW5uZXInLCAndmVyaWZ5JywgJy0tbmFtZScsIENJX1JVTk5FUl9OQU1FXSwgMTIwKVxuXG5cbmRlZiBkaXNhYmxlX2NpX3J1bm5lcigpOlxuICAgIGlmIG1hbmFnZWRfY2lfcnVubmVyKCk6XG4gICAgICAgIGNvbW1hbmQoWydnaXRsYWItcnVubmVyJywgJ3VucmVnaXN0ZXInLCAnLS1uYW1lJywgQ0lfUlVOTkVSX05BTUVdLCAxMjApXG5cblxuZGVmIGFwcGx5X2NpX3J1bm5lcihhcGksIGRlc2lyZWQpOlxuICAgIFwiXCJcIkFwcGx5IHRoZSBvcGVyYXRvcidzIENJIHJ1bm5lciBzZXR0aW5nIG9uY2UgcGVyIHZlcnNpb247IGEgZmFpbHVyZSB3YWl0cyBmb3IgYSBuZXcgdmVyc2lvbi5cIlwiXCJcbiAgICBpZiBub3QgZGVzaXJlZDpcbiAgICAgICAgcmV0dXJuXG4gICAgc3RhdGUgPSByZWFkX2pzb24oQ0lfUlVOTkVSX1NUQVRFLCB7fSlcbiAgICBpZiBzdGF0ZS5nZXQoJ3ZlcnNpb24nKSA9PSBkZXNpcmVkWyd2ZXJzaW9uJ106XG4gICAgICAgIHJldHVyblxuICAgIHRyeTpcbiAgICAgICAgaWYgZGVzaXJlZFsnZW5hYmxlZCddOlxuICAgICAgICAgICAgZW5hYmxlX2NpX3J1bm5lcihhcGksIGludChkZXNpcmVkWydjb25jdXJyZW50J10pKVxuICAgICAgICBlbHNlOlxuICAgICAgICAgICAgZGlzYWJsZV9jaV9ydW5uZXIoKVxuICAgICAgICBzdGF0ZSA9IGRpY3QodmVyc2lvbj1kZXNpcmVkWyd2ZXJzaW9uJ10sIGFwcGxpZWQ9ZGVzaXJlZFsndmVyc2lvbiddKVxuICAgICAgICBub3RlKCdDSSBydW5uZXIgJyArICgncmVhZHknIGlmIGRlc2lyZWRbJ2VuYWJsZWQnXSBlbHNlICdyZW1vdmVkJykpXG4gICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlcnJvcjpcbiAgICAgICAgc3RhdGUgPSBkaWN0KHZlcnNpb249ZGVzaXJlZFsndmVyc2lvbiddLCBhcHBsaWVkPXN0YXRlLmdldCgnYXBwbGllZCcpLCBlcnJvcj1kZXNjcmliZV9wcm9jZXNzX2Vycm9yKGVycm9yKSlcbiAgICAgICAgbm90ZSgnQ0kgcnVubmVyIHNldHVwIGZhaWxlZDogJyArIHN0YXRlWydlcnJvciddKVxuICAgIHdyaXRlX2pzb24oQ0lfUlVOTkVSX1NUQVRFLCBzdGF0ZSlcbiAgICB3aXRoIFNUQVRFX0xPQ0s6XG4gICAgICAgIFJFUE9SVC51cGRhdGUoY2lfcnVubmVyX2FwcGxpZWRfdmVyc2lvbj1zdGF0ZS5nZXQoJ2FwcGxpZWQnKSwgY2lfcnVubmVyX2Vycm9yPXN0YXRlLmdldCgnZXJyb3InKSlcbiAgICB0cnk6XG4gICAgICAgIGhlYXJ0YmVhdChhcGkpXG4gICAgZXhjZXB0IEV4Y2VwdGlvbjpcbiAgICAgICAgbm90ZSgnV29ya2VyIGhlYXJ0YmVhdCB1bmF2YWlsYWJsZScpXG5cblxuZGVmIHJlY29yZF90YXNrX2ZhaWx1cmUobWVzc2FnZSk6XG4gICAgd2l0aCBTVEFURV9MT0NLOlxuICAgICAgICBtZXRyaWNzID0gcmVhZF9qc29uKFJPT1QgLyAnbWV0cmljcy5qc29uJywge30pXG4gICAgICAgIG1ldHJpY3MudXBkYXRlKHRhc2tfZXJyb3JzPW1ldHJpY3MuZ2V0KCd0YXNrX2Vycm9ycycsIDApICsgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgbGFzdF90YXNrX2Vycm9yPW1lc3NhZ2UsIGxhc3RfdGFza19lcnJvcl9hdD10aW1lLnN0cmZ0aW1lKCclWS0lbS0lZFQlSDolTTolU1onLCB0aW1lLmdtdGltZSgpKSlcbiAgICAgICAgd3JpdGVfanNvbihST09UIC8gJ21ldHJpY3MuanNvbicsIG1ldHJpY3MpXG5cblxuZGVmIHJ1bl90YXNrKGFwaSwgdGFzaywgY29uZmlnKTpcbiAgICBtZWFzdXJlZCA9IHt9XG4gICAgdHJ5OlxuICAgICAgICBleGVjdXRlKGFwaSwgdGFzaywgY29uZmlnLCBtZWFzdXJlZClcbiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGVycm9yOlxuICAgICAgICAjIEluY2x1ZGVzIGEgY29udGFpbmVyIGtpbGxlZCBiZWNhdXNlIHRoZSBoZWFydGJlYXQgcmVwb3J0ZWQgaXRzIGxlYXNlIGxvc3QuXG4gICAgICAgIGlmIGlzaW5zdGFuY2UoZXJyb3IsIExlYXNlTG9zdCkgb3IgbGVhc2VfbG9zdCh0YXNrKTpcbiAgICAgICAgICAgIG5vdGUoJ1dvcmtlciB0YXNrIGxlYXNlIGxvc3Q7IHJlc3VsdCBub3QgdXBsb2FkZWQnKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIG1lc3NhZ2UgPSBkZXNjcmliZV9lcnJvcihlcnJvcilcbiAgICAgICAgIyBBIGtpbGwgZnJvbSB3b3JrZXIgbWVtb3J5IHByZXNzdXJlIGlzIG5vdCB0aGUgdGFzaydzIG9yIHRoaXMgd29ya2VyJ3MgZmF1bHQuXG4gICAgICAgIGlmIG1lYXN1cmVkLmdldCgnb29tJykgIT0gJ2hvc3QnOlxuICAgICAgICAgICAgcmVjb3JkX3Rhc2tfZmFpbHVyZShkZXNjcmliZV9wcm9jZXNzX2Vycm9yKGVycm9yLCBsaW1pdD1JTlZFTlRPUllfVEVYVF9MSU1JVCkpXG4gICAgICAgIG5vdGUoJ1dvcmtlciB0YXNrIGZhaWxlZDogJyArIG1lc3NhZ2UpXG4gICAgICAgIHRyeTpcbiAgICAgICAgICAgIGFwaS5wb3N0KCdqb2JzLycgKyBzdHIodGFza1snaWQnXSkgKyAnL2ZhaWwnLCBkaWN0KGF0dGVtcHQ9dGFza1snYXR0ZW1wdCddLCBlcnJvcj1tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYXN1cmVtZW50PW1lYXN1cmVkKSlcbiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjpcbiAgICAgICAgICAgIHBhc3NcbiAgICBmaW5hbGx5OlxuICAgICAgICB3aXRoIFNUQVRFX0xPQ0s6XG4gICAgICAgICAgICBkcm9wX3Rhc2sodGFzaylcblxuXG5kZWYgbWFpbigpOlxuICAgIGFwaSA9IEFQSSgpXG4gICAgcmVsZWFzZSA9IFBhdGgocmVhZF9qc29uKFJPT1QgLyAnY3VycmVudC5qc29uJykpXG4gICAgY29uZmlnID0gcmVhZF9qc29uKHJlbGVhc2UgLyAnY29uZmlnLmpzb24nLCB7fSlcbiAgICBmYWlsdXJlID0ge30gaWYgKFJPT1QgLyAncGVuZGluZy5qc29uJykuZXhpc3RzKCkgZWxzZSByZWFkX2pzb24oUk9PVCAvICdmYWlsdXJlLmpzb24nLCB7fSlcbiAgICByZWZyZXNoX3VwbGluayhmb3JjZT1UcnVlKVxuICAgIHJ1bnRpbWVfYWJpID0gTm9uZSBpZiBSVU5USU1FX0FCSS5zdGFydHN3aXRoKCdfXycpIGVsc2UgUlVOVElNRV9BQklcbiAgICBSRVBPUlQudXBkYXRlKGhhcmR3YXJlPWludmVudG9yeSgpLCBhZ2VudF92ZXJzaW9uPVZFUlNJT04sIHJ1bnRpbWVfYWJpPXJ1bnRpbWVfYWJpLFxuICAgICAgICAgICAgICAgICAgYXBwbGllZF92ZXJzaW9uPWNvbmZpZy5nZXQoJ3ZlcnNpb24nKSxcbiAgICAgICAgICAgICAgICAgIGltYWdlPWNvbmZpZy5nZXQoJ2ltYWdlJyksIG1lbW9yeV9tYj1jb25maWcuZ2V0KCdtZW1vcnlfbWInKSwgc2NyYXRjaF9tYj1jb25maWcuZ2V0KCdzY3JhdGNoX21iJyksXG4gICAgICAgICAgICAgICAgICBjcHVzPWNvbmZpZy5nZXQoJ2NwdXMnKSwgY2FwYWJpbGl0aWVzPWFsbG93ZWRfY2FwYWJpbGl0aWVzKHJlYWRfanNvbihyZWxlYXNlIC8gJ2NhcGFiaWxpdGllcy5qc29uJywge30pKSxcbiAgICAgICAgICAgICAgICAgIHVwZGF0ZV9lcnJvcj1mYWlsdXJlLmdldCgnZXJyb3InKSwgY2FwYWJpbGl0eV90ZXN0PXJlYWRfanNvbihyZWxlYXNlIC8gJ2NhcGFiaWxpdHlfdGVzdC5qc29uJykpXG4gICAgY2lfc3RhdGUgPSByZWFkX2pzb24oQ0lfUlVOTkVSX1NUQVRFLCB7fSlcbiAgICBSRVBPUlQudXBkYXRlKGNpX3J1bm5lcl9hcHBsaWVkX3ZlcnNpb249Y2lfc3RhdGUuZ2V0KCdhcHBsaWVkJyksIGNpX3J1bm5lcl9lcnJvcj1jaV9zdGF0ZS5nZXQoJ2Vycm9yJykpXG4gICAgaWYgY29uZmlnOlxuICAgICAgICBhcHBseV9saW1pdHMoY29uZmlnKVxuICAgIGZvciBjb250YWluZXIgaW4gY29tbWFuZChbJ2RvY2tlcicsICdwcycsICctYXEnLCAnLS1maWx0ZXI9bGFiZWw9Y29tLmRnZS5yb2xlPWNvbXB1dGUtdGFzayddKS5zcGxpdGxpbmVzKCk6XG4gICAgICAgIGNvbW1hbmQoWydkb2NrZXInLCAncm0nLCAnLWYnLCBjb250YWluZXJdKVxuICAgIHN0b3BfYXR0ZW1wdF9zbGljZXMoKVxuICAgIGZvciBkaXJlY3RvcnkgaW4gU0NSQVRDSC5pdGVyZGlyKCk6XG4gICAgICAgIGlmIGRpcmVjdG9yeS5pc19kaXIoKTpcbiAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoZGlyZWN0b3J5KVxuICAgIGluaXRpYWwgPSBoZWFydGJlYXQoYXBpKVxuICAgIChST09UIC8gJ3JlYWR5JykudG91Y2gobW9kZT0wbzYwMClcbiAgICB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1oZWFydGJlYXRfbG9vcCwgYXJncz0oYXBpLCksIGRhZW1vbj1UcnVlKS5zdGFydCgpXG4gICAgcmVzcG9uc2UgPSBpbml0aWFsXG4gICAgd2hpbGUgbm90IFNUT1AuaXNfc2V0KCk6XG4gICAgICAgIHdpdGggU1RBVEVfTE9DSzpcbiAgICAgICAgICAgIHJlc3BvbnNlID0gZGljdChDT05UUk9MKVxuICAgICAgICAgICAgYnVzeSA9IGJvb2woVEFTS1MpXG4gICAgICAgIGRlc2lyZWQgPSByZXNwb25zZS5nZXQoJ2NvbmZpZ3VyYXRpb24nKVxuICAgICAgICB0ZXN0X3JlcXVlc3QgPSByZXNwb25zZS5nZXQoJ2NhcGFiaWxpdHlfdGVzdF9yZXF1ZXN0JylcbiAgICAgICAgdGVzdGVkID0gUkVQT1JULmdldCgnY2FwYWJpbGl0eV90ZXN0JylcbiAgICAgICAgaWYgbm90IGJ1c3kgYW5kIGNvbmZpZyBhbmQgKG5vdCB0ZXN0ZWQgb3IgKHRlc3RfcmVxdWVzdCBhbmQgdGVzdGVkLmdldCgnaWQnKSAhPSB0ZXN0X3JlcXVlc3QpKTpcbiAgICAgICAgICAgIHRyeTpcbiAgICAgICAgICAgICAgICByZWZyZXNoX2NhcGFiaWxpdGllcyhjb25maWcsIHJlbGVhc2UsIHRlc3RfcmVxdWVzdClcbiAgICAgICAgICAgICAgICBoZWFydGJlYXQoYXBpKVxuICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlcnJvcjpcbiAgICAgICAgICAgICAgICB3aXRoIFNUQVRFX0xPQ0s6XG4gICAgICAgICAgICAgICAgICAgIFJFUE9SVC51cGRhdGUoY2FwYWJpbGl0aWVzPXt9LCB1cGRhdGVfZXJyb3I9J0NhcGFiaWxpdHlUZXN0RmFpbGVkJylcbiAgICAgICAgICAgICAgICBoZWFydGJlYXQoYXBpKVxuICAgICAgICAgICAgICAgIFNUT1Aud2FpdCgxNSlcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICBhcHBseV9jaV9ydW5uZXIoYXBpLCByZXNwb25zZS5nZXQoJ2NpX3J1bm5lcicpKVxuICAgICAgICBpZiBmYWlsdXJlIGFuZCBkZXNpcmVkIGFuZCBkZXNpcmVkWyd2ZXJzaW9uJ10gIT0gZmFpbHVyZS5nZXQoJ3ZlcnNpb24nKTpcbiAgICAgICAgICAgIGZhaWx1cmUgPSB7fVxuICAgICAgICAgICAgKFJPT1QgLyAnZmFpbHVyZS5qc29uJykudW5saW5rKG1pc3Npbmdfb2s9VHJ1ZSlcbiAgICAgICAgICAgIHdpdGggU1RBVEVfTE9DSzpcbiAgICAgICAgICAgICAgICBSRVBPUlRbJ3VwZGF0ZV9lcnJvciddID0gTm9uZVxuICAgICAgICAgICAgaGVhcnRiZWF0KGFwaSlcbiAgICAgICAgaWYgbm90IGJ1c3kgYW5kIGRlc2lyZWQgYW5kIGRlc2lyZWQgIT0gY29uZmlnIGFuZCBkZXNpcmVkWyd2ZXJzaW9uJ10gIT0gZmFpbHVyZS5nZXQoJ3ZlcnNpb24nKTpcbiAgICAgICAgICAgIHRyeTpcbiAgICAgICAgICAgICAgICBzdGFnZV91cGRhdGUoZGVzaXJlZClcbiAgICAgICAgICAgICAgICByZXR1cm4gNzVcbiAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXJyb3I6XG4gICAgICAgICAgICAgICAgaWYgY29uZmlnOlxuICAgICAgICAgICAgICAgICAgICBhcHBseV9saW1pdHMoY29uZmlnKVxuICAgICAgICAgICAgICAgIHJlYXNvbiA9IHVwZGF0ZV9mYWlsdXJlX3JlYXNvbihlcnJvcilcbiAgICAgICAgICAgICAgICBmYWlsdXJlID0gZGljdCh2ZXJzaW9uPWRlc2lyZWRbJ3ZlcnNpb24nXSwgZXJyb3I9cmVhc29uKVxuICAgICAgICAgICAgICAgIHdyaXRlX2pzb24oUk9PVCAvICdmYWlsdXJlLmpzb24nLCBmYWlsdXJlKVxuICAgICAgICAgICAgICAgIHdpdGggU1RBVEVfTE9DSzpcbiAgICAgICAgICAgICAgICAgICAgUkVQT1JUWyd1cGRhdGVfZXJyb3InXSA9IGZhaWx1cmVbJ2Vycm9yJ11cbiAgICAgICAgICAgICAgICBub3RlKCdXb3JrZXIgdXBkYXRlIGZhaWxlZDogJyArIHR5cGUoZXJyb3IpLl9fbmFtZV9fICsgJzogJyArIHN0cihlcnJvcikpXG4gICAgICAgICAgICAgICAgdHJ5OlxuICAgICAgICAgICAgICAgICAgICBoZWFydGJlYXQoYXBpKVxuICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246XG4gICAgICAgICAgICAgICAgICAgIHBhc3NcbiAgICAgICAgYWxsb3dlZCA9IGNsYWltX2FsbG93ZWQocmVzcG9uc2UuZ2V0KCdleGVjdXRpb25fcG9saWN5JyksIGhvc3RfYWN0aXZpdHkoKSlcbiAgICAgICAgaWYgY29uZmlnIGFuZCBhbGxvd2VkIGFuZCBub3QgcmVzcG9uc2UuZ2V0KCdkcmFpbmluZycpIGFuZCBkZXNpcmVkID09IGNvbmZpZyBhbmQgbm90IFJFUE9SVC5nZXQoJ3VwZGF0ZV9lcnJvcicpOlxuICAgICAgICAgICAgd2l0aCBTVEFURV9MT0NLOlxuICAgICAgICAgICAgICAgIHJvb20gPSBNQVhfVEFTS1MgLSBsZW4oVEFTS1MpXG4gICAgICAgICAgICBpZiByb29tID4gMDpcbiAgICAgICAgICAgICAgICB0YXNrID0gYXBpLnBvc3QoJ3dvcmtlcnMvJyArIGFwaS53b3JrZXJfaWQoKSArICcvam9icy9yZXF1ZXN0Jywge30pWydqb2InXVxuICAgICAgICAgICAgICAgIGlmIHRhc2s6XG4gICAgICAgICAgICAgICAgICAgIHdpdGggU1RBVEVfTE9DSzpcbiAgICAgICAgICAgICAgICAgICAgICAgIFRBU0tTLmFwcGVuZCh0YXNrKVxuICAgICAgICAgICAgICAgICAgICB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1ydW5fdGFzaywgYXJncz0oYXBpLCB0YXNrLCBqb2JfY29uZmlnKGRlc2lyZWQgb3IgY29uZmlnLCB0YXNrKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFlbW9uPVRydWUpLnN0YXJ0KClcbiAgICAgICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgaWYgU1RPUC53YWl0KDIpOlxuICAgICAgICAgICAgYnJlYWtcbiAgICByZXR1cm4gMFxuXG5cbmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6XG4gICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHVEVSTSwgbGFtYmRhICpfOiBTVE9QLnNldCgpKVxuICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0lOVCwgbGFtYmRhICpfOiBTVE9QLnNldCgpKVxuICAgIHRyeTpcbiAgICAgICAgc3lzLmV4aXQobWFpbigpKVxuICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXJyb3I6XG4gICAgICAgIHByaW50KCdXb3JrZXIgc3RvcHBlZDogJyArIGRlc2NyaWJlX3N0b3AoZXJyb3IpLCBmbHVzaD1UcnVlKVxuICAgICAgICBzeXMuZXhpdCgxKVxuIiwibGF1bmNoZXIucHkiOiIjIS91c3IvYmluL2VudiBweXRob24zXG5cIlwiXCJTdGFibGUgYm9vdHN0cmFwIHdhdGNoZG9nOiBhIGNhbmRpZGF0ZSBtdXN0IGNvbnRhY3QgcHJvZHVjdGlvbiB3aXRoaW4gNjBzLlxuUm9sbGJhY2sgc3Vydml2ZXMgcG93ZXIgbG9zcyBiZWNhdXNlIHRoZSBwcmV2aW91cyBwb2ludGVyIGlzIHBlcnNpc3RlZCBmaXJzdC5cblwiXCJcIlxuaW1wb3J0IGpzb25cbmltcG9ydCBvc1xuZnJvbSBwYXRobGliIGltcG9ydCBQYXRoXG5pbXBvcnQgc2lnbmFsXG5pbXBvcnQgc3VicHJvY2Vzc1xuaW1wb3J0IHN5c1xuaW1wb3J0IHRpbWVcblxuUk9PVCA9IFBhdGgob3MuZW52aXJvbi5nZXQoJ0RHRV9XT1JLRVJfUk9PVCcsICcvb3B0L2RnZS13b3JrZXInKSlcbmNoaWxkID0gTm9uZVxuc3RvcHBpbmcgPSBGYWxzZVxuXG5cbmRlZiB3cml0ZShwYXRoLCB2YWx1ZSk6XG4gICAgdGVtcG9yYXJ5ID0gcGF0aC53aXRoX3N1ZmZpeCgnLnRtcCcpXG4gICAgdGVtcG9yYXJ5LndyaXRlX3RleHQoanNvbi5kdW1wcyh2YWx1ZSkpXG4gICAgdGVtcG9yYXJ5LmNobW9kKDBvNjAwKVxuICAgIG9zLnJlcGxhY2UodGVtcG9yYXJ5LCBwYXRoKVxuXG5cbmRlZiBzdG9wKCpfKTpcbiAgICBnbG9iYWwgc3RvcHBpbmdcbiAgICBzdG9wcGluZyA9IFRydWVcbiAgICBpZiBjaGlsZDpcbiAgICAgICAgY2hpbGQudGVybWluYXRlKClcblxuXG5zaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdURVJNLCBzdG9wKVxuc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHSU5ULCBzdG9wKVxud2hpbGUgbm90IHN0b3BwaW5nOlxuICAgIHBlbmRpbmdfcGF0aCA9IFJPT1QgLyAncGVuZGluZy5qc29uJ1xuICAgIHBlbmRpbmcgPSBqc29uLmxvYWRzKHBlbmRpbmdfcGF0aC5yZWFkX3RleHQoKSkgaWYgcGVuZGluZ19wYXRoLmV4aXN0cygpIGVsc2UgTm9uZVxuICAgIGN1cnJlbnQgPSBqc29uLmxvYWRzKChST09UIC8gJ2N1cnJlbnQuanNvbicpLnJlYWRfdGV4dCgpKVxuICAgIHJlYWR5ID0gUk9PVCAvICdyZWFkeSdcbiAgICByZWFkeS51bmxpbmsobWlzc2luZ19vaz1UcnVlKVxuICAgIGNoaWxkID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsIHN0cihQYXRoKGN1cnJlbnQpIC8gJ2FnZW50LnB5JyldKVxuICAgIGRlYWRsaW5lID0gdGltZS5tb25vdG9uaWMoKSArIDYwXG4gICAgd2hpbGUgY2hpbGQucG9sbCgpIGlzIE5vbmUgYW5kIG5vdCByZWFkeS5leGlzdHMoKSBhbmQgdGltZS5tb25vdG9uaWMoKSA8IGRlYWRsaW5lIGFuZCBub3Qgc3RvcHBpbmc6XG4gICAgICAgIHRpbWUuc2xlZXAoMSlcbiAgICBpZiByZWFkeS5leGlzdHMoKTpcbiAgICAgICAgaWYgcGVuZGluZzpcbiAgICAgICAgICAgIHBlbmRpbmdfcGF0aC51bmxpbmsobWlzc2luZ19vaz1UcnVlKVxuICAgICAgICAgICAgKFJPT1QgLyAnZmFpbHVyZS5qc29uJykudW5saW5rKG1pc3Npbmdfb2s9VHJ1ZSlcbiAgICAgICAgcmVzdWx0ID0gY2hpbGQud2FpdCgpXG4gICAgICAgIGlmIHJlc3VsdCA9PSA3NTpcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgZWxpZiBwZW5kaW5nIGFuZCBub3Qgc3RvcHBpbmc6XG4gICAgICAgIGNoaWxkLnRlcm1pbmF0ZSgpXG4gICAgICAgIHRyeTpcbiAgICAgICAgICAgIGNoaWxkLndhaXQodGltZW91dD0xMClcbiAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuVGltZW91dEV4cGlyZWQ6XG4gICAgICAgICAgICBjaGlsZC5raWxsKClcbiAgICAgICAgICAgIGNoaWxkLndhaXQoKVxuICAgICAgICB3cml0ZShST09UIC8gJ2N1cnJlbnQuanNvbicsIHBlbmRpbmdbJ3ByZXZpb3VzJ10pXG4gICAgICAgIHdyaXRlKFJPT1QgLyAnZmFpbHVyZS5qc29uJywgZGljdCh2ZXJzaW9uPXBlbmRpbmdbJ3ZlcnNpb24nXSwgZXJyb3I9J1N0YXJ0dXBIZWFsdGhDaGVja0ZhaWxlZCcpKVxuICAgICAgICBwZW5kaW5nX3BhdGgudW5saW5rKG1pc3Npbmdfb2s9VHJ1ZSlcbiAgICAgICAgY29udGludWVcbiAgICBlbHNlOlxuICAgICAgICBjaGlsZC50ZXJtaW5hdGUoKVxuICAgICAgICBjaGlsZC53YWl0KClcbiAgICBpZiBub3Qgc3RvcHBpbmc6XG4gICAgICAgIHRpbWUuc2xlZXAoNSlcbiIsImluc3RhbGwucHkiOiJcIlwiXCJPbmUtbWFjaGluZSBlbnJvbGxtZW50IHdpdGggcmV0cnktc2FmZSBjcmVkZW50aWFsIGV4Y2hhbmdlIGFuZCByZWFkaW5lc3MgY2hlY2suXCJcIlwiXG5pbXBvcnQgZmNudGxcbmltcG9ydCBqc29uXG5pbXBvcnQgb3NcbmZyb20gcGF0aGxpYiBpbXBvcnQgUGF0aFxuaW1wb3J0IHN1YnByb2Nlc3NcbmltcG9ydCBzeXNcbmltcG9ydCB0aW1lXG5pbXBvcnQgdXJsbGliLmVycm9yXG5pbXBvcnQgdXJsbGliLnJlcXVlc3RcbmltcG9ydCB1dWlkXG5cbmZyb20gcHJlcGFyZV9tYWNoaW5lIGltcG9ydCBwcmVwYXJlXG5cblJPT1QgPSBQYXRoKCcvb3B0L2RnZS13b3JrZXInKVxuXG5cbmNsYXNzIFJldHJ5YWJsZUVycm9yKFJ1bnRpbWVFcnJvcik6XG4gICAgcGFzc1xuXG5cbmNsYXNzIE5vUmVkaXJlY3QodXJsbGliLnJlcXVlc3QuSFRUUFJlZGlyZWN0SGFuZGxlcik6XG4gICAgZGVmIHJlZGlyZWN0X3JlcXVlc3Qoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKTpcbiAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdUaGUgc2V0dXAgc2VydmVyIHJlZGlyZWN0ZWQgdGhpcyByZXF1ZXN0LiBBc2sgeW91ciBhZG1pbmlzdHJhdG9yIGZvciBhIGN1cnJlbnQgbGluay4nKVxuXG5cbkhUVFAgPSB1cmxsaWIucmVxdWVzdC5idWlsZF9vcGVuZXIoTm9SZWRpcmVjdCgpKVxuQlJPV1NFUl9VQSA9ICdNb3ppbGxhLzUuMCAoWDExOyBMaW51eCB4ODZfNjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMjguMC4wLjAgU2FmYXJpLzUzNy4zNidcblxuXG5kZWYgYWxsb3dlZF9vcmlnaW4ob3JpZ2luKTpcbiAgICBpZiBvcmlnaW4uc3RhcnRzd2l0aCgnaHR0cHM6Ly8nKTpcbiAgICAgICAgcmV0dXJuIFRydWVcbiAgICBpZiBub3Qgb3JpZ2luLnN0YXJ0c3dpdGgoJ2h0dHA6Ly8nKTpcbiAgICAgICAgcmV0dXJuIEZhbHNlXG4gICAgaG9zdCA9IG9yaWdpbi5zcGxpdCgnOi8vJywgMSlbLTFdLnNwbGl0KCcvJywgMSlbMF0uc3BsaXQoJzonLCAxKVswXVxuICAgIHJldHVybiBob3N0IGluICgnMTI3LjAuMC4xJywgJ2xvY2FsaG9zdCcsICc6OjEnKVxuXG5cbmRlZiBwb3N0KG9yaWdpbiwgZW5kcG9pbnQsIHRva2VuLCBwYXlsb2FkKTpcbiAgICBpZiBub3QgYWxsb3dlZF9vcmlnaW4ob3JpZ2luKTpcbiAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdUaGUgc2V0dXAgbGluayBtdXN0IHVzZSBhIHNlY3VyZSBIVFRQUyBzZXJ2ZXIuJylcbiAgICByZXF1ZXN0ID0gdXJsbGliLnJlcXVlc3QuUmVxdWVzdChvcmlnaW4gKyAnL2NvbXB1dGVfZmxlZXQvJyArIGVuZHBvaW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT1qc29uLmR1bXBzKHBheWxvYWQpLmVuY29kZSgpLCBtZXRob2Q9J1BPU1QnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycz17J0F1dGhvcml6YXRpb24nOiAnQmVhcmVyICcgKyB0b2tlbiwgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdVc2VyLUFnZW50JzogQlJPV1NFUl9VQSwgJ25ncm9rLXNraXAtYnJvd3Nlci13YXJuaW5nJzogJzEnfSlcbiAgICB0cnk6XG4gICAgICAgIHdpdGggSFRUUC5vcGVuKHJlcXVlc3QsIHRpbWVvdXQ9MjApIGFzIHJlc3BvbnNlOlxuICAgICAgICAgICAgYm9keSA9IHJlc3BvbnNlLnJlYWQoNjU1MzcpXG4gICAgICAgICAgICBpZiBsZW4oYm9keSkgPiA2NTUzNjpcbiAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1RoZSBzZXR1cCBzZXJ2ZXIgcmV0dXJuZWQgYW4gaW52YWxpZCByZXNwb25zZS4nKVxuICAgICAgICAgICAgcmV0dXJuIGpzb24ubG9hZHMoYm9keSlcbiAgICBleGNlcHQgdXJsbGliLmVycm9yLkhUVFBFcnJvciBhcyBlcnJvcjpcbiAgICAgICAgaWYgZXJyb3IuY29kZSBpbiAoNDAxLCA0MDMsIDQxMCk6XG4gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1RoaXMgc2V0dXAgbGluayBoYXMgZXhwaXJlZCwgd2FzIHJlcGxhY2VkLCBvciBiZWxvbmdzIHRvIGFub3RoZXIgbWFjaGluZS4gQXNrIHlvdXIgYWRtaW5pc3RyYXRvciBmb3IgYSBuZXcgbGluay4nKSBmcm9tIE5vbmVcbiAgICAgICAgcmFpc2UgUmV0cnlhYmxlRXJyb3IoJ1RoZSBzZXR1cCBzZXJ2ZXIgaXMgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUuIFJ1biB0aGUgc2FtZSBpbnN0YWxsZXIgYWdhaW4gaW4gYSBmZXcgbWludXRlcy4nKSBmcm9tIE5vbmVcbiAgICBleGNlcHQgdXJsbGliLmVycm9yLlVSTEVycm9yOlxuICAgICAgICByYWlzZSBSZXRyeWFibGVFcnJvcignQ2Fubm90IHJlYWNoIHRoZSBzZXR1cCBzZXJ2ZXIuIENoZWNrIHlvdXIgaW50ZXJuZXQgY29ubmVjdGlvbiBhbmQgcnVuIHRoZSBpbnN0YWxsZXIgYWdhaW4uJykgZnJvbSBOb25lXG5cblxuZGVmIGhhcmR3YXJlKCk6XG4gICAgdG90YWxfa2IgPSBuZXh0KGludChsaW5lLnNwbGl0KClbMV0pIGZvciBsaW5lIGluIFBhdGgoJy9wcm9jL21lbWluZm8nKS5yZWFkX3RleHQoKS5zcGxpdGxpbmVzKCkgaWYgbGluZS5zdGFydHN3aXRoKCdNZW1Ub3RhbDonKSlcbiAgICByZXNlcnZhdGlvbiA9IFBhdGgoJy9zeXMvZnMvY2dyb3VwL2NpLnNsaWNlL21lbW9yeS5tYXgnKVxuICAgIHJlc2VydmVkID0gcmVzZXJ2YXRpb24ucmVhZF90ZXh0KCkuc3RyaXAoKSBpZiByZXNlcnZhdGlvbi5leGlzdHMoKSBlbHNlICcnXG4gICAgcmV0dXJuIHsnbWVtb3J5X2J5dGVzJzogdG90YWxfa2IgKiAxMDI0LCAnbG9naWNhbF9jcHVzJzogb3MuY3B1X2NvdW50KCkgb3IgMSxcbiAgICAgICAgICAgICdjaV9tZW1vcnlfcmVzZXJ2ZWRfYnl0ZXMnOiBpbnQocmVzZXJ2ZWQpIGlmIHJlc2VydmVkLmlzZGlnaXQoKSBlbHNlIE5vbmV9XG5cblxuZGVmIGRpcmVjdF9pZGVudGl0eShpbnZpdGF0aW9uKTpcbiAgICBpZiBub3QgaW52aXRhdGlvbi5nZXQoJ3dvcmtlcl9pZCcpOlxuICAgICAgICByZXR1cm4gTm9uZVxuICAgIHRyeTpcbiAgICAgICAgc3RhdHVzID0gcG9zdChpbnZpdGF0aW9uWydvcmlnaW4nXSwgJ3N0YXR1cycsIGludml0YXRpb25bJ3Rva2VuJ10sIHt9KVxuICAgIGV4Y2VwdCBSZXRyeWFibGVFcnJvcjpcbiAgICAgICAgcmFpc2VcbiAgICBleGNlcHQgUnVudGltZUVycm9yOlxuICAgICAgICByZXR1cm4gTm9uZVxuICAgIGlmIHN0YXR1cy5nZXQoJ3dvcmtlcl9pZCcpICE9IGludml0YXRpb25bJ3dvcmtlcl9pZCddOlxuICAgICAgICByZXR1cm4gTm9uZVxuICAgIHJldHVybiB7XG4gICAgICAgICdvcmlnaW4nOiBpbnZpdGF0aW9uWydvcmlnaW4nXSxcbiAgICAgICAgJ3Rva2VuJzogaW52aXRhdGlvblsndG9rZW4nXSxcbiAgICAgICAgJ3dvcmtlcl9pZCc6IGludml0YXRpb25bJ3dvcmtlcl9pZCddLFxuICAgICAgICAnd29ya2VyX25hbWUnOiBzdGF0dXMuZ2V0KCd3b3JrZXJfbmFtZScpLFxuICAgIH1cblxuXG5kZWYgc3RvcmVfaWRlbnRpdHkoaWRlbnRpdHkpOlxuICAgIHRlbXBvcmFyeSA9IFJPT1QgLyAnaWRlbnRpdHkucGVuZGluZydcbiAgICB0ZW1wb3Jhcnkud3JpdGVfdGV4dChqc29uLmR1bXBzKGlkZW50aXR5KSlcbiAgICB0ZW1wb3JhcnkuY2htb2QoMG82MDApXG4gICAgdGVtcG9yYXJ5LnJlcGxhY2UoUk9PVCAvICdpZGVudGl0eS5qc29uJylcbiAgICByZXR1cm4gaWRlbnRpdHlcblxuXG5kZWYgZW5yb2xsbWVudChzb3VyY2UpOlxuICAgIGludml0YXRpb24gPSBqc29uLmxvYWRzKChzb3VyY2UgLyAnaW52aXRhdGlvbi5qc29uJykucmVhZF90ZXh0KCkpXG4gICAgaWRlbnRpdHkgPSBST09UIC8gJ2lkZW50aXR5Lmpzb24nXG4gICAgaWYgaWRlbnRpdHkuZXhpc3RzKCk6XG4gICAgICAgIGV4aXN0aW5nID0ganNvbi5sb2FkcyhpZGVudGl0eS5yZWFkX3RleHQoKSlcbiAgICAgICAgc3RhdHVzID0gcG9zdChleGlzdGluZ1snb3JpZ2luJ10sICdzdGF0dXMnLCBleGlzdGluZ1sndG9rZW4nXSwge30pXG4gICAgICAgIGlmIGV4aXN0aW5nWydvcmlnaW4nXSAhPSBpbnZpdGF0aW9uWydvcmlnaW4nXSBvciBzdGF0dXNbJ3dvcmtlcl9pZCddICE9IGludml0YXRpb25bJ3dvcmtlcl9pZCddOlxuICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdUaGlzIGNvbXB1dGVyIGlzIGFscmVhZHkgY29ubmVjdGVkIHRvIGFub3RoZXIgc2VydmVyLiBBc2sgeW91ciBhZG1pbmlzdHJhdG9yIGJlZm9yZSBjaGFuZ2luZyBpdC4nKVxuICAgICAgICByZXR1cm4gZXhpc3RpbmdcbiAgICBhcHByb3ZlZCA9IGRpcmVjdF9pZGVudGl0eShpbnZpdGF0aW9uKVxuICAgIGlmIGFwcHJvdmVkOlxuICAgICAgICByZXR1cm4gc3RvcmVfaWRlbnRpdHkoYXBwcm92ZWQpXG4gICAgY2xhaW0gPSBST09UIC8gJ3NldHVwLWNsYWltJ1xuICAgIGlmIG5vdCBjbGFpbS5leGlzdHMoKTpcbiAgICAgICAgY2xhaW0ud3JpdGVfdGV4dChzdHIodXVpZC51dWlkNCgpKSlcbiAgICAgICAgY2xhaW0uY2htb2QoMG82MDApXG4gICAgcmVzdWx0ID0gcG9zdChpbnZpdGF0aW9uWydvcmlnaW4nXSwgJ3NldHVwL3JlZGVlbScsIGludml0YXRpb25bJ3Rva2VuJ10sIHsnY2xhaW1faWQnOiBjbGFpbS5yZWFkX3RleHQoKSwgJ2hhcmR3YXJlJzogaGFyZHdhcmUoKX0pXG4gICAgcmV0dXJuIHN0b3JlX2lkZW50aXR5KHJlc3VsdClcblxuXG5kZWYgd2FpdF91bnRpbF9yZWFkeShpZGVudGl0eSk6XG4gICAgcHJpbnQoJ0Nvbm5lY3RpbmcgYW5kIGRvd25sb2FkaW5nIHRoZSB3b3JrZXIgc29mdHdhcmUuIFRoaXMgY2FuIHRha2Ugc2V2ZXJhbCBtaW51dGVzLi4uJywgZmx1c2g9VHJ1ZSlcbiAgICBkZWFkbGluZSA9IHRpbWUubW9ub3RvbmljKCkgKyA2MDBcbiAgICB3aGlsZSB0aW1lLm1vbm90b25pYygpIDwgZGVhZGxpbmU6XG4gICAgICAgIHRyeTpcbiAgICAgICAgICAgIHN0YXR1cyA9IHBvc3QoaWRlbnRpdHlbJ29yaWdpbiddLCAnc3RhdHVzJywgaWRlbnRpdHlbJ3Rva2VuJ10sIHt9KVxuICAgICAgICBleGNlcHQgUmV0cnlhYmxlRXJyb3I6XG4gICAgICAgICAgICB0aW1lLnNsZWVwKDMpXG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICBzdGF0ZSA9IHN0YXR1c1snc3RhdGUnXVxuICAgICAgICBpZiBzdGF0ZSBpbiAoJ3JlYWR5JywgJ2J1c3knLCAnbG93IGJhdHRlcnknLCAnZHJhaW5pbmcnLCAncGF1c2VkJywgJ3dhaXRpbmcgZm9yIGhvc3QgbWVhc3VyZW1lbnRzJyxcbiAgICAgICAgICAgICAgICAgICAgICd1c2luZyBiYXR0ZXJ5JywgJ2NvbXB1dGVyIGluIHVzZScsICdob3N0IGJ1c3knLCAnbG93IGhvc3QgbWVtb3J5JywgJ293bmVyIHJlc291cmNlIGxpbWl0Jyk6XG4gICAgICAgICAgICBwcmludCgnXFxuQ29ubmVjdGVkISBUaGlzIGNvbXB1dGVyIGlzIG5vdyBhbiBvZmZpY2lhbCB3b3JrZXIuJywgZmx1c2g9VHJ1ZSlcbiAgICAgICAgICAgIGlmIHN0YXRlIGluICgnbG93IGJhdHRlcnknLCAnZHJhaW5pbmcnKTpcbiAgICAgICAgICAgICAgICBwcmludCgnTmV3IHRhc2tzIGFyZSBwYXVzZWQ6ICcgKyBzdGF0ZSArICcuJywgZmx1c2g9VHJ1ZSlcbiAgICAgICAgICAgIHByaW50KCdZb3UgY2FuIGNsb3NlIHRoaXMgd2luZG93IGFuZCBkZWxldGUgdGhlIGRvd25sb2FkZWQgaW5zdGFsbGVyLiBUaGUgd29ya2VyIHN0YXJ0cyBhdXRvbWF0aWNhbGx5IGFmdGVyIGEgcmVzdGFydC4nLCBmbHVzaD1UcnVlKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIGlmIHN0YXR1cy5nZXQoJ3VwZGF0ZV9lcnJvcicpOlxuICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdUaGUgY29tcHV0ZXIgY29ubmVjdGVkLCBidXQgdGhlIHdvcmtlciBzb2Z0d2FyZSBjb3VsZCBub3Qgc3RhcnQuIFlvdXIgYWRtaW5pc3RyYXRvciBjYW4gc2VlIHRoZSB1cGRhdGUgZmFpbHVyZSBpbiBDb21wdXRlIFdvcmtlcnMuJylcbiAgICAgICAgdGltZS5zbGVlcCgzKVxuICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignVGhlIGNvbXB1dGVyIGlzIGVucm9sbGVkLCBidXQgdGhlIGZpcnN0IGRvd25sb2FkIGlzIHN0aWxsIHRha2luZyB0aW1lLiBBc2sgeW91ciBhZG1pbmlzdHJhdG9yIHRvIGNoZWNrIENvbXB1dGUgV29ya2VyczsgeW91IGNhbiBzYWZlbHkgcmVydW4gdGhpcyBpbnN0YWxsZXIuJylcblxuXG5kZWYgbWFpbigpOlxuICAgIHNvdXJjZSA9IFBhdGgoX19maWxlX18pLnJlc29sdmUoKS5wYXJlbnRcbiAgICBpbnZpdGF0aW9uID0ganNvbi5sb2Fkcygoc291cmNlIC8gJ2ludml0YXRpb24uanNvbicpLnJlYWRfdGV4dCgpKVxuICAgIGNsYWltID0gUk9PVCAvICdzZXR1cC1jbGFpbSdcbiAgICBhbHJlYWR5X2Vucm9sbGVkID0gKFJPT1QgLyAnaWRlbnRpdHkuanNvbicpLmV4aXN0cygpXG4gICAgaWYgYWxyZWFkeV9lbnJvbGxlZDpcbiAgICAgICAgZXhpc3RpbmcgPSBlbnJvbGxtZW50KHNvdXJjZSlcbiAgICAgICAgYXNzaWdubWVudCA9IHBvc3QoZXhpc3RpbmdbJ29yaWdpbiddLCAnc3RhdHVzJywgZXhpc3RpbmdbJ3Rva2VuJ10sIHt9KVxuICAgICAgICBpZiBhc3NpZ25tZW50WydzdGF0ZSddIG5vdCBpbiAoJ3Jldm9rZWQnLCAndXBkYXRlIGZhaWxlZCcpOlxuICAgICAgICAgICAgd2FpdF91bnRpbF9yZWFkeShleGlzdGluZylcbiAgICAgICAgICAgIHJldHVyblxuICAgIGVsc2U6XG4gICAgICAgIGFwcHJvdmVkID0gZGlyZWN0X2lkZW50aXR5KGludml0YXRpb24pXG4gICAgICAgIGlmIGFwcHJvdmVkOlxuICAgICAgICAgICAgYXNzaWdubWVudCA9IHBvc3QoYXBwcm92ZWRbJ29yaWdpbiddLCAnc3RhdHVzJywgYXBwcm92ZWRbJ3Rva2VuJ10sIHt9KVxuICAgICAgICBlbHNlOlxuICAgICAgICAgICAgYXNzaWdubWVudCA9IHBvc3QoaW52aXRhdGlvblsnb3JpZ2luJ10sICdzZXR1cC9jaGVjaycsIGludml0YXRpb25bJ3Rva2VuJ10sIHsnY2xhaW1faWQnOiBjbGFpbS5yZWFkX3RleHQoKSBpZiBjbGFpbS5leGlzdHMoKSBlbHNlIE5vbmV9KVxuICAgIHByaW50KCdBcHByb3ZlZC4gU3RhcnRpbmcgc2V0dXAgb24gdGhpcyBjb21wdXRlci4uLicsIGZsdXNoPVRydWUpXG4gICAgcHJpbnQoJ0NoZWNraW5nIHRoaXMgY29tcHV0ZXIgaXMgcmVhZHkuLi4nLCBmbHVzaD1UcnVlKVxuICAgIHRvdGFsX21iID0gaGFyZHdhcmUoKVsnbWVtb3J5X2J5dGVzJ10gLy8gKDEwMjQgKiAxMDI0KVxuICAgIGlmIHRvdGFsX21iIDwgMjA0ODpcbiAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdUaGlzIGNvbXB1dGVyIG5lZWRzIGF0IGxlYXN0IDIgR2lCIG9mIFJBTS4nKVxuICAgIGlmIGFzc2lnbm1lbnQuZ2V0KCdtZW1vcnlfbWInKSBhbmQgdG90YWxfbWIgPCBhc3NpZ25tZW50WydtZW1vcnlfbWInXTpcbiAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdUaGlzIGNvbXB1dGVyIG5lZWRzIGEgc21hbGxlciB3b3JrZXIgY29uZmlndXJhdGlvbi4gQXNrIHlvdXIgYWRtaW5pc3RyYXRvciB0byBsb3dlciBpdHMgbWVtb3J5IGFsbG9jYXRpb24sIHRoZW4gcmVydW4gc2V0dXAuJylcbiAgICBwcmludCgnUHJlcGFyaW5nIHRoaXMgY29tcHV0ZXIuLi4nLCBmbHVzaD1UcnVlKVxuICAgIHByZXBhcmUoKVxuICAgIHByaW50KCckIG1rZGlyIC1wIC9vcHQvZGdlLXdvcmtlciAmJiBjaG1vZCA3MDAgL29wdC9kZ2Utd29ya2VyJywgZmx1c2g9VHJ1ZSlcbiAgICBST09ULm1rZGlyKG1vZGU9MG83MDAsIHBhcmVudHM9VHJ1ZSwgZXhpc3Rfb2s9VHJ1ZSlcbiAgICBST09ULmNobW9kKDBvNzAwKVxuICAgIHdpbmRvd3MgPSBvcy5lbnZpcm9uLmdldCgnREdFX1dJTkRPV1NfQUNUSVZJVFknKVxuICAgIGlmIHdpbmRvd3M6XG4gICAgICAgIChST09UIC8gJ2hvc3QtYWN0aXZpdHktcGF0aC5qc29uJykud3JpdGVfdGV4dChqc29uLmR1bXBzKHdpbmRvd3MpKVxuICAgIHByaW50KCdTYXZpbmcgdGhpcyBjb21wdXRlcuKAmXMgY29ubmVjdGlvbi4uLicsIGZsdXNoPVRydWUpXG4gICAgaWRlbnRpdHkgPSBlbnJvbGxtZW50KHNvdXJjZSlcbiAgICAoc291cmNlIC8gJ2Vucm9sbG1lbnQuanNvbicpLndyaXRlX3RleHQoanNvbi5kdW1wcyhpZGVudGl0eSkpXG4gICAgKFJPT1QgLyAnZmFpbHVyZS5qc29uJykudW5saW5rKG1pc3Npbmdfb2s9VHJ1ZSlcbiAgICBwcmludCgnSW5zdGFsbGluZyB0aGUgYmFja2dyb3VuZCB3b3JrZXIuLi4nLCBmbHVzaD1UcnVlKVxuICAgIHByaW50KCckIHB5dGhvbjMgLXUgc2V0dXAucHknLCBmbHVzaD1UcnVlKVxuICAgIHN1YnByb2Nlc3MucnVuKFtzeXMuZXhlY3V0YWJsZSwgJy11Jywgc3RyKHNvdXJjZSAvICdzZXR1cC5weScpXSwgY3dkPXNvdXJjZSwgY2hlY2s9VHJ1ZSlcbiAgICBpZiBhbHJlYWR5X2Vucm9sbGVkOlxuICAgICAgICBwcmludCgnJCBzeXN0ZW1jdGwgcmVzdGFydCBkZ2Utd29ya2VyLnNlcnZpY2UnLCBmbHVzaD1UcnVlKVxuICAgICAgICBzdWJwcm9jZXNzLnJ1bihbJ3N5c3RlbWN0bCcsICdyZXN0YXJ0JywgJ2RnZS13b3JrZXIuc2VydmljZSddLCBjaGVjaz1UcnVlKVxuICAgIHByaW50KCckIHN5c3RlbWN0bCBkaXNhYmxlIC0tbm93IGhlYXZ5LXByb2Nlc3Npbmcuc2VydmljZScsIGZsdXNoPVRydWUpXG4gICAgc3VicHJvY2Vzcy5ydW4oWydzeXN0ZW1jdGwnLCAnZGlzYWJsZScsICctLW5vdycsICdoZWF2eS1wcm9jZXNzaW5nLnNlcnZpY2UnXSwgc3Rkb3V0PXN1YnByb2Nlc3MuREVWTlVMTCwgc3RkZXJyPXN1YnByb2Nlc3MuREVWTlVMTClcbiAgICB3YWl0X3VudGlsX3JlYWR5KGlkZW50aXR5KVxuXG5cbmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6XG4gICAgdHJ5OlxuICAgICAgICBsb2NrX3BhdGggPSBQYXRoKCcvcnVuL2RnZS13b3JrZXItaW5zdGFsbC5sb2NrJylcbiAgICAgICAgdHJ5OlxuICAgICAgICAgICAgbG9ja19maWxlID0gbG9ja19wYXRoLm9wZW4oJ3cnKVxuICAgICAgICBleGNlcHQgT1NFcnJvcjpcbiAgICAgICAgICAgIGxvY2tfcGF0aCA9IFBhdGgoJy90bXAvZGdlLXdvcmtlci1pbnN0YWxsLmxvY2snKVxuICAgICAgICAgICAgbG9ja19maWxlID0gbG9ja19wYXRoLm9wZW4oJ3cnKVxuICAgICAgICB3aXRoIGxvY2tfZmlsZSBhcyBsb2NrOlxuICAgICAgICAgICAgdHJ5OlxuICAgICAgICAgICAgICAgIGZjbnRsLmZsb2NrKGxvY2ssIGZjbnRsLkxPQ0tfRVggfCBmY250bC5MT0NLX05CKVxuICAgICAgICAgICAgZXhjZXB0IEJsb2NraW5nSU9FcnJvcjpcbiAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1NldHVwIGlzIGFscmVhZHkgcnVubmluZyBpbiBhbm90aGVyIHdpbmRvdy4nKSBmcm9tIE5vbmVcbiAgICAgICAgICAgIG1haW4oKVxuICAgIGV4Y2VwdCAoUnVudGltZUVycm9yLCBPU0Vycm9yLCBWYWx1ZUVycm9yLCBLZXlFcnJvciwgc3VicHJvY2Vzcy5TdWJwcm9jZXNzRXJyb3IpIGFzIGVycm9yOlxuICAgICAgICBtZXNzYWdlID0gc3RyKGVycm9yKSBpZiBpc2luc3RhbmNlKGVycm9yLCBSdW50aW1lRXJyb3IpIGVsc2UgJ1NldHVwIGNvdWxkIG5vdCBmaW5pc2guIENoZWNrIHlvdXIgY29ubmVjdGlvbiBhbmQgcmVydW4gdGhlIHNhbWUgaW5zdGFsbGVyLiBJZiBpdCBzdGlsbCBmYWlscywgYXNrIHlvdXIgYWRtaW5pc3RyYXRvciB0byBjaGVjayB0aGlzIG1hY2hpbmUuJ1xuICAgICAgICBwcmludCgnXFxuU2V0dXAgbmVlZHMgYXR0ZW50aW9uOiAnICsgbWVzc2FnZSwgZmx1c2g9VHJ1ZSlcbiAgICAgICAgcHJpbnQoJ1xcblNldHVwIG5lZWRzIGF0dGVudGlvbjogJyArIG1lc3NhZ2UsIGZpbGU9c3lzLnN0ZGVycilcbiAgICAgICAgc3lzLmV4aXQoMSlcbiIsImluc3RhbGxfbWFjb3MucHkiOiJcIlwiXCJDcmVhdGUgYSBMaW1hIFVidW50dSBWTSBhbmQgcnVuIHRoZSBMaW51eCBpbnN0YWxsZXIgaW5zaWRlIGl0LlwiXCJcIlxuaW1wb3J0IGpzb25cbmltcG9ydCBzZWNyZXRzXG5pbXBvcnQgb3NcbmltcG9ydCBwbGlzdGxpYlxuaW1wb3J0IHNobGV4XG5pbXBvcnQgc2h1dGlsXG5pbXBvcnQgc2lnbmFsXG5pbXBvcnQgc3VicHJvY2Vzc1xuaW1wb3J0IHN5c1xuaW1wb3J0IHRlbXBmaWxlXG5pbXBvcnQgdGhyZWFkaW5nXG5pbXBvcnQgdGltZVxuZnJvbSBwYXRobGliIGltcG9ydCBQYXRoXG5cbmZyb20gc2V0dXBfbG9nX3JlcG9ydGVyIGltcG9ydCBTZXR1cExvZ1JlcG9ydGVyXG5cbklOU1RBTkNFID0gJ2RnZS13b3JrZXInXG5URU1QTEFURSA9ICd0ZW1wbGF0ZTovL3VidW50dS0yNC4wNCdcblBST1hZX1BPUlQgPSAxODc4OVxuUFJPWFlfTEFCRUwgPSAnY29tLmRnZS5jb21wdXRlLXN0b3JhZ2UtcHJveHknXG5WTV9MQUJFTCA9ICdjb20uZGdlLmNvbXB1dGUtd29ya2VyLXZtJ1xuIyBBIHB5dGhvbiBpbnRlcnByZXRlciBydW5uaW5nIGEgaGVscGVyIGNvcHksIG5ldmVyIGFuIGVkaXRvciBvciB0ZXN0IG5hbWluZyB0aGUgZmlsZS5cbkhFTFBFUl9QUk9DRVNTID0gcideW14gXSpbUHBdeXRob25bXiBdKiAuKi9tYWNvc19yMl9wcm94eVxcLnB5JCdcbk1BQ19CSU4gPSAoJy9vcHQvaG9tZWJyZXcvYmluJywgJy91c3IvbG9jYWwvYmluJylcbkJSRVdfSU5TVEFMTCA9ICdodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vSG9tZWJyZXcvaW5zdGFsbC9IRUFEL2luc3RhbGwuc2gnXG5CUkVXX0lOU1RBTExfVElNRU9VVCA9IDEwICogNjBcbkdVRVNUX0lOU1RBTExfRklMRVMgPSAoXG4gICAgJ2luc3RhbGwucHknLCAnc2V0dXAucHknLCAnYWdlbnQucHknLCAnbGF1bmNoZXIucHknLCAncHJlcGFyZV9tYWNoaW5lLnB5JywgJ3VuaW5zdGFsbC5weScsXG4pXG5HVUVTVF9ESVIgPSAnL3RtcC9kZ2Utd29ya2VyLWluc3RhbGwnXG5SRVBPUlRFUiA9IE5vbmVcblxuXG5kZWYgc3RhdHVzKG1lc3NhZ2UpOlxuICAgIHByaW50KG1lc3NhZ2UsIGZsdXNoPVRydWUpXG4gICAgaWYgUkVQT1JURVI6XG4gICAgICAgIFJFUE9SVEVSLnJlY29yZChtZXNzYWdlKVxuXG5cbmRlZiByZWxheV9ob21lYnJld19vdXRwdXQoc3RyZWFtKTpcbiAgICBmb3IgbGluZSBpbiBzdHJlYW06XG4gICAgICAgIHByaW50KGxpbmUsIGVuZD0nJywgZmx1c2g9VHJ1ZSlcbiAgICAgICAgaWYgUkVQT1JURVI6XG4gICAgICAgICAgICBSRVBPUlRFUi5yZWNvcmQobGluZSlcblxuXG5kZWYgcHJlcGVuZF9wYXRoKGRpcmVjdG9yeSk6XG4gICAgaWYgbm90IGRpcmVjdG9yeSBvciBub3QgUGF0aChkaXJlY3RvcnkpLmlzX2RpcigpOlxuICAgICAgICByZXR1cm5cbiAgICBjdXJyZW50ID0gb3MuZW52aXJvbi5nZXQoJ1BBVEgnLCAnJylcbiAgICBwYXJ0cyA9IGN1cnJlbnQuc3BsaXQoJzonKSBpZiBjdXJyZW50IGVsc2UgW11cbiAgICBpZiBkaXJlY3Rvcnkgbm90IGluIHBhcnRzOlxuICAgICAgICBvcy5lbnZpcm9uWydQQVRIJ10gPSBkaXJlY3RvcnkgKyAoKCc6JyArIGN1cnJlbnQpIGlmIGN1cnJlbnQgZWxzZSAnJylcblxuXG5kZWYgYWRkX21hY19wcmVmaXhlcygpOlxuICAgIGZvciBkaXJlY3RvcnkgaW4gKCcvdXNyL2xvY2FsL2JpbicsICcvb3B0L2hvbWVicmV3L2JpbicpOlxuICAgICAgICBwcmVwZW5kX3BhdGgoZGlyZWN0b3J5KVxuXG5cbmRlZiBydW4oYXJncywgKiprd2FyZ3MpOlxuICAgIHByaW50KCckICcgKyBzaGxleC5qb2luKHN0cihpdGVtKSBmb3IgaXRlbSBpbiBhcmdzKSwgZmx1c2g9VHJ1ZSlcbiAgICByZXR1cm4gc3VicHJvY2Vzcy5ydW4oYXJncywgY2hlY2s9VHJ1ZSwgKiprd2FyZ3MpXG5cblxuZGVmIGhvc3RfcmVzb3VyY2VzKCk6XG4gICAgdHJ5OlxuICAgICAgICBtZW1vcnkgPSBpbnQoc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWydzeXNjdGwnLCAnLW4nLCAnaHcubWVtc2l6ZSddKSlcbiAgICAgICAgY3B1cyA9IGludChzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbJ3N5c2N0bCcsICctbicsICdody5uY3B1J10pKVxuICAgIGV4Y2VwdCAoRmlsZU5vdEZvdW5kRXJyb3IsIHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yLCBPU0Vycm9yKTpcbiAgICAgICAgbWVtb3J5ID0gb3Muc3lzY29uZignU0NfUEFHRV9TSVpFJykgKiBvcy5zeXNjb25mKCdTQ19QSFlTX1BBR0VTJylcbiAgICAgICAgY3B1cyA9IG9zLmNwdV9jb3VudCgpIG9yIDJcbiAgICByZXR1cm4gbWVtb3J5LCBjcHVzXG5cblxuZGVmIHZtX3NpemUobWVtb3J5X2J5dGVzLCBjcHVzKTpcbiAgICAjIEJvdW5kIHRoZSBWTSBpdHNlbGYgYXMgd2VsbCBhcyB0YXNrIGNvbnRhaW5lcnM7IGxlYXZlIFJBTSBmb3IgaW50ZXJhY3RpdmUgYXBwcy5cbiAgICBob3N0X2dpYiA9IG1heChtZW1vcnlfYnl0ZXMsIDEpIC8vICgxMDI0ICoqIDMpXG4gICAgcmV0dXJuIG1heCgyLCBtaW4oNCwgaG9zdF9naWIgLy8gMikpLCBtYXgoMSwgbWluKDQsIGNwdXMgLy8gMikpXG5cblxuZGVmIGluc3RhbmNlX25hbWVzKCk6XG4gICAgcmVzdWx0ID0gc3VicHJvY2Vzcy5ydW4oWydsaW1hY3RsJywgJ2xpc3QnLCAnLXEnXSwgY2hlY2s9VHJ1ZSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgdGV4dD1UcnVlKVxuICAgIHJldHVybiB7bGluZS5zdHJpcCgpIGZvciBsaW5lIGluIHJlc3VsdC5zdGRvdXQuc3BsaXRsaW5lcygpIGlmIGxpbmUuc3RyaXAoKX1cblxuXG5kZWYgZmluZF9icmV3KCk6XG4gICAgYWRkX21hY19wcmVmaXhlcygpXG4gICAgZm91bmQgPSBzaHV0aWwud2hpY2goJ2JyZXcnKVxuICAgIGlmIGZvdW5kOlxuICAgICAgICByZXR1cm4gZm91bmRcbiAgICBmb3IgZGlyZWN0b3J5IGluIE1BQ19CSU46XG4gICAgICAgIGNhbmRpZGF0ZSA9IFBhdGgoZGlyZWN0b3J5KSAvICdicmV3J1xuICAgICAgICBpZiBvcy5hY2Nlc3MoY2FuZGlkYXRlLCBvcy5YX09LKTpcbiAgICAgICAgICAgIHByZXBlbmRfcGF0aChkaXJlY3RvcnkpXG4gICAgICAgICAgICByZXR1cm4gc3RyKGNhbmRpZGF0ZSlcbiAgICByZXR1cm4gTm9uZVxuXG5cbmRlZiBob21lYnJld19zY3JpcHRfc3RkaW4oZW52KTpcbiAgICBpZiBlbnYuZ2V0KCdTVURPX0FTS1BBU1MnKTpcbiAgICAgICAgcmV0dXJuIE5vbmVcbiAgICByZXR1cm4gb3BlbignL2Rldi90dHknLCAncmInKVxuXG5cbmRlZiBpbnN0YWxsX2hvbWVicmV3KCk6XG4gICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KClcbiAgICBlbnYucG9wKCdOT05JTlRFUkFDVElWRScsIE5vbmUpXG4gICAgZW52LnBvcCgnQ0knLCBOb25lKVxuICAgIGVudlsnSU5URVJBQ1RJVkUnXSA9ICcxJ1xuICAgIHN0YXR1cygnSW5zdGFsbGluZyBIb21lYnJldy4gbWFjT1MgbWF5IGFzayBmb3IgeW91ciBwYXNzd29yZC4uLicpXG4gICAgdHJ5OlxuICAgICAgICBzY3JpcHQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbJ2N1cmwnLCAnLS1jb25uZWN0LXRpbWVvdXQnLCAnMTUnLCAnLS1tYXgtdGltZScsICcxMjAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1mc1NMJywgQlJFV19JTlNUQUxMXSlcbiAgICBleGNlcHQgKEZpbGVOb3RGb3VuZEVycm9yLCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcikgYXMgZXJyb3I6XG4gICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihcbiAgICAgICAgICAgICdDb3VsZCBub3QgZG93bmxvYWQgSG9tZWJyZXcuIENoZWNrIHRoZSBuZXR3b3JrIGFuZCBvcGVuIERvcmlhbiBHcmF5IFdvcmtlciBhZ2Fpbi4nXG4gICAgICAgICkgZnJvbSBlcnJvclxuICAgIHdpdGggdGVtcGZpbGUuVGVtcG9yYXJ5RGlyZWN0b3J5KHByZWZpeD0nZGdlLWhvbWVicmV3LScpIGFzIGRpcmVjdG9yeTpcbiAgICAgICAgaW5zdGFsbGVyID0gUGF0aChkaXJlY3RvcnkpIC8gJ2luc3RhbGwuc2gnXG4gICAgICAgIGluc3RhbGxlci53cml0ZV9ieXRlcyhzY3JpcHQpXG4gICAgICAgIGluc3RhbGxlci5jaG1vZCgwbzcwMClcbiAgICAgICAgaWYgZW52LmdldCgnU1VET19BU0tQQVNTJyk6XG4gICAgICAgICAgICB3cmFwcGVyID0gUGF0aChkaXJlY3RvcnkpIC8gJ3N1ZG8nXG4gICAgICAgICAgICB3cmFwcGVyLndyaXRlX3RleHQoJyMhL2Jpbi9iYXNoXFxuZXhlYyAvdXNyL2Jpbi9zdWRvIC1BIFwiJEBcIlxcbicpXG4gICAgICAgICAgICB3cmFwcGVyLmNobW9kKDBvNzAwKVxuICAgICAgICAgICAgZW52WydQQVRIJ10gPSBkaXJlY3RvcnkgKyAnOicgKyBlbnYuZ2V0KCdQQVRIJywgJycpXG4gICAgICAgIHN0YXR1cygnSG9tZWJyZXcgaW5zdGFsbGVyIGRvd25sb2FkZWQuIFN0YXJ0aW5nIGluc3RhbGxhdGlvbi4uLicpXG4gICAgICAgIHRyeTpcbiAgICAgICAgICAgIHN0ZGluID0gaG9tZWJyZXdfc2NyaXB0X3N0ZGluKGVudilcbiAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyb3I6XG4gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoXG4gICAgICAgICAgICAgICAgJ0hvbWVicmV3IG5lZWRzIGEgdGVybWluYWwgc28gbWFjT1MgY2FuIGFzayBmb3IgeW91ciBwYXNzd29yZC4gT3BlbiBUZXJtaW5hbCBhbmQgcnVuIHRoaXMgaW5zdGFsbGVyIGFnYWluLidcbiAgICAgICAgICAgICkgZnJvbSBlcnJvclxuICAgICAgICB0cnk6XG4gICAgICAgICAgICBwcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbihbJy9iaW4vYmFzaCcsIHN0cihpbnN0YWxsZXIpXSwgc3RkaW49c3RkaW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0PVRydWUsIGJ1ZnNpemU9MSwgZW52PWVudixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X25ld19zZXNzaW9uPXN0ZGluIGlzIE5vbmUpXG4gICAgICAgIGZpbmFsbHk6XG4gICAgICAgICAgICBpZiBzdGRpbjpcbiAgICAgICAgICAgICAgICBzdGRpbi5jbG9zZSgpXG4gICAgICAgIHJlYWRlciA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXJlbGF5X2hvbWVicmV3X291dHB1dCwgYXJncz0ocHJvY2Vzcy5zdGRvdXQsKSwgZGFlbW9uPVRydWUpXG4gICAgICAgIHJlYWRlci5zdGFydCgpXG4gICAgICAgIGRlYWRsaW5lID0gdGltZS5tb25vdG9uaWMoKSArIEJSRVdfSU5TVEFMTF9USU1FT1VUXG4gICAgICAgIHRyeTpcbiAgICAgICAgICAgIHdoaWxlIHByb2Nlc3MucG9sbCgpIGlzIE5vbmU6XG4gICAgICAgICAgICAgICAgcmVtYWluaW5nID0gZGVhZGxpbmUgLSB0aW1lLm1vbm90b25pYygpXG4gICAgICAgICAgICAgICAgaWYgcmVtYWluaW5nIDw9IDA6XG4gICAgICAgICAgICAgICAgICAgIHJhaXNlIHN1YnByb2Nlc3MuVGltZW91dEV4cGlyZWQocHJvY2Vzcy5hcmdzLCBCUkVXX0lOU1RBTExfVElNRU9VVClcbiAgICAgICAgICAgICAgICB0cnk6XG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3Mud2FpdCh0aW1lb3V0PW1pbigxNSwgcmVtYWluaW5nKSlcbiAgICAgICAgICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5UaW1lb3V0RXhwaXJlZDpcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzKCdIb21lYnJldyBpcyBzdGlsbCBpbnN0YWxsaW5nLiBUaGlzIG1heSBpbmNsdWRlIEFwcGxlIENvbW1hbmQgTGluZSBUb29scyBhbmQgdGFrZSBzZXZlcmFsIG1pbnV0ZXMuLi4nKVxuICAgICAgICBleGNlcHQgQmFzZUV4Y2VwdGlvbiBhcyBlcnJvcjpcbiAgICAgICAgICAgIHRyeTpcbiAgICAgICAgICAgICAgICBpZiBzdGRpbiBpcyBOb25lOlxuICAgICAgICAgICAgICAgICAgICBvcy5raWxscGcocHJvY2Vzcy5waWQsIHNpZ25hbC5TSUdURVJNKVxuICAgICAgICAgICAgICAgIGVsc2U6XG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3MudGVybWluYXRlKClcbiAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOlxuICAgICAgICAgICAgICAgIHByb2Nlc3MudGVybWluYXRlKClcbiAgICAgICAgICAgIHRyeTpcbiAgICAgICAgICAgICAgICBwcm9jZXNzLndhaXQodGltZW91dD01KVxuICAgICAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuVGltZW91dEV4cGlyZWQ6XG4gICAgICAgICAgICAgICAgdHJ5OlxuICAgICAgICAgICAgICAgICAgICBpZiBzdGRpbiBpcyBOb25lOlxuICAgICAgICAgICAgICAgICAgICAgICAgb3Mua2lsbHBnKHByb2Nlc3MucGlkLCBzaWduYWwuU0lHS0lMTClcbiAgICAgICAgICAgICAgICAgICAgZWxzZTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3Mua2lsbCgpXG4gICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6XG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3Mua2lsbCgpXG4gICAgICAgICAgICAgICAgcHJvY2Vzcy53YWl0KClcbiAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXJyb3IsIHN1YnByb2Nlc3MuVGltZW91dEV4cGlyZWQpOlxuICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgJ0hvbWVicmV3IGRpZCBub3QgZmluaXNoIHdpdGhpbiAxMCBtaW51dGVzLiBDaGVjayB0aGUgc2V0dXAgbG9nIGFuZCB5b3VyIE1hYyBuZXR3b3JrLCB0aGVuIHRyeSBhZ2Fpbi4nXG4gICAgICAgICAgICAgICAgKSBmcm9tIGVycm9yXG4gICAgICAgICAgICByYWlzZVxuICAgICAgICByZWFkZXIuam9pbih0aW1lb3V0PTUpXG4gICAgICAgIGlmIHByb2Nlc3MucmV0dXJuY29kZTpcbiAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihcbiAgICAgICAgICAgICAgICAnQ291bGQgbm90IGluc3RhbGwgSG9tZWJyZXcuIENoZWNrIHRoZSBzZXR1cCBsb2cgYWJvdmUsIHRoZW4gb3BlbiBEb3JpYW4gR3JheSBXb3JrZXIgYWdhaW4uJ1xuICAgICAgICAgICAgKVxuICAgIGlmIG5vdCBmaW5kX2JyZXcoKTpcbiAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKFxuICAgICAgICAgICAgJ0hvbWVicmV3IGZpbmlzaGVkIGJ1dCBicmV3IHdhcyBub3QgZm91bmQuIE9wZW4gRG9yaWFuIEdyYXkgV29ya2VyIGFnYWluLidcbiAgICAgICAgKVxuICAgIGFkZF9tYWNfcHJlZml4ZXMoKVxuXG5cbmRlZiBlbnN1cmVfYnJldygpOlxuICAgIGJyZXcgPSBmaW5kX2JyZXcoKVxuICAgIGlmIGJyZXc6XG4gICAgICAgIHJldHVybiBicmV3XG4gICAgaW5zdGFsbF9ob21lYnJldygpXG4gICAgYnJldyA9IGZpbmRfYnJldygpXG4gICAgaWYgbm90IGJyZXc6XG4gICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignSG9tZWJyZXcgaW5zdGFsbGVkIGJ1dCBicmV3IGlzIG5vdCBvbiBQQVRILiBPcGVuIERvcmlhbiBHcmF5IFdvcmtlciBhZ2Fpbi4nKVxuICAgIHJldHVybiBicmV3XG5cblxuZGVmIHB5dGhvbl91c2FibGUocGF0aCk6XG4gICAgaWYgbm90IHBhdGggb3Igbm90IG9zLmFjY2VzcyhwYXRoLCBvcy5YX09LKTpcbiAgICAgICAgcmV0dXJuIEZhbHNlXG4gICAgcmVzdWx0ID0gc3VicHJvY2Vzcy5ydW4oXG4gICAgICAgIFtwYXRoLCAnLWMnLCAnaW1wb3J0IHN5czsgYXNzZXJ0IHN5cy52ZXJzaW9uX2luZm8gPj0gKDMsIDExKSddLFxuICAgICAgICBjaGVjaz1GYWxzZSwgc3Rkb3V0PXN1YnByb2Nlc3MuREVWTlVMTCwgc3RkZXJyPXN1YnByb2Nlc3MuREVWTlVMTCxcbiAgICApXG4gICAgcmV0dXJuIHJlc3VsdC5yZXR1cm5jb2RlID09IDBcblxuXG5kZWYgZmluZF9weXRob24oKTpcbiAgICBhZGRfbWFjX3ByZWZpeGVzKClcbiAgICBmb3VuZCA9IHNodXRpbC53aGljaCgncHl0aG9uMycpXG4gICAgaWYgcHl0aG9uX3VzYWJsZShmb3VuZCk6XG4gICAgICAgIHJldHVybiBmb3VuZFxuICAgIGZvciBkaXJlY3RvcnkgaW4gKCpNQUNfQklOLCAnL3Vzci9iaW4nKTpcbiAgICAgICAgY2FuZGlkYXRlID0gc3RyKFBhdGgoZGlyZWN0b3J5KSAvICdweXRob24zJylcbiAgICAgICAgaWYgcHl0aG9uX3VzYWJsZShjYW5kaWRhdGUpOlxuICAgICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZVxuICAgIHJldHVybiBOb25lXG5cblxuZGVmIGVuc3VyZV9weXRob24oKTpcbiAgICBmb3VuZCA9IGZpbmRfcHl0aG9uKClcbiAgICBpZiBmb3VuZDpcbiAgICAgICAgcmV0dXJuIGZvdW5kXG4gICAgYnJldyA9IGVuc3VyZV9icmV3KClcbiAgICBwcmludCgnSW5zdGFsbGluZyBQeXRob24gMy4gVGhpcyBtYXkgdGFrZSBhIGZldyBtaW51dGVzLi4uJywgZmx1c2g9VHJ1ZSlcbiAgICBydW4oW2JyZXcsICdpbnN0YWxsJywgJ3B5dGhvbiddKVxuICAgIGFkZF9tYWNfcHJlZml4ZXMoKVxuICAgIGZvdW5kID0gZmluZF9weXRob24oKVxuICAgIGlmIG5vdCBmb3VuZDpcbiAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKFxuICAgICAgICAgICAgJ1B5dGhvbiAzLjExIG9yIG5ld2VyIGlzIHJlcXVpcmVkIGFuZCBjb3VsZCBub3QgYmUgaW5zdGFsbGVkLiBDaGVjayB0aGUgbmV0d29yayBhbmQgb3BlbiBEb3JpYW4gR3JheSBXb3JrZXIgYWdhaW4uJ1xuICAgICAgICApXG4gICAgcmV0dXJuIGZvdW5kXG5cblxuZGVmIGVuc3VyZV9saW1hY3RsKCk6XG4gICAgYWRkX21hY19wcmVmaXhlcygpXG4gICAgaWYgc2h1dGlsLndoaWNoKCdsaW1hY3RsJyk6XG4gICAgICAgIHJldHVyblxuICAgIGJyZXcgPSBlbnN1cmVfYnJldygpXG4gICAgc3RhdHVzKCdJbnN0YWxsaW5nIExpbWEgKExpbnV4IHZpcnR1YWwgbWFjaGluZSkuIFRoaXMgbWF5IHRha2UgYSBmZXcgbWludXRlcy4uLicpXG4gICAgcnVuKFticmV3LCAnaW5zdGFsbCcsICdsaW1hJ10pXG4gICAgYWRkX21hY19wcmVmaXhlcygpXG4gICAgaWYgbm90IHNodXRpbC53aGljaCgnbGltYWN0bCcpOlxuICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0xpbWEgaW5zdGFsbGVkIGJ1dCBsaW1hY3RsIGlzIG5vdCBvbiBQQVRILiBPcGVuIERvcmlhbiBHcmF5IFdvcmtlciBhZ2Fpbi4nKVxuXG5cbmRlZiBzdGFydF92bShtZW1vcnlfZ2liLCBjcHVzKTpcbiAgICBpZiBJTlNUQU5DRSBpbiBpbnN0YW5jZV9uYW1lcygpOlxuICAgICAgICBzdGF0dXMoJ1N0YXJ0aW5nIHRoZSBMaW51eCB3b3JrZXIgdmlydHVhbCBtYWNoaW5lLi4uJylcbiAgICAgICAgcnVuKFsnbGltYWN0bCcsICdzdGFydCcsICctLXR0eT1mYWxzZScsIElOU1RBTkNFXSlcbiAgICAgICAgcmV0dXJuXG4gICAgc3RhdHVzKCdDcmVhdGluZyBhIExpbnV4IHdvcmtlciB2aXJ0dWFsIG1hY2hpbmUuIFRoZSBmaXJzdCBkb3dubG9hZCBjYW4gdGFrZSBzZXZlcmFsIG1pbnV0ZXMuLi4nKVxuICAgIHJ1bihbJ2xpbWFjdGwnLCAnc3RhcnQnLCAnLS10dHk9ZmFsc2UnLCAnLS1uYW1lPScgKyBJTlNUQU5DRSwgJy0tcGxhaW4nLFxuICAgICAgICAgJy0tY3B1cz0nICsgc3RyKGNwdXMpLCAnLS1tZW1vcnk9JyArIHN0cihtZW1vcnlfZ2liKSwgVEVNUExBVEVdKVxuICAgIHN1cHBvcnQgPSBQYXRoLmhvbWUoKSAvICdMaWJyYXJ5JyAvICdBcHBsaWNhdGlvbiBTdXBwb3J0JyAvICdkZ2Utd29ya2VyJ1xuICAgIHN1cHBvcnQubWtkaXIocGFyZW50cz1UcnVlLCBleGlzdF9vaz1UcnVlKVxuICAgIChzdXBwb3J0IC8gJ293bmVkLXZtLmpzb24nKS53cml0ZV90ZXh0KGpzb24uZHVtcHMoeyduYW1lJzogSU5TVEFOQ0V9KSlcblxuXG5kZWYgeG1sX3RleHQodmFsdWUpOlxuICAgIHJldHVybiBzdHIodmFsdWUpLnJlcGxhY2UoJyYnLCAnJmFtcDsnKS5yZXBsYWNlKCc8JywgJyZsdDsnKS5yZXBsYWNlKCc+JywgJyZndDsnKVxuXG5cbmRlZiBpbnN0YWxsZXJfc291cmNlKCk6XG4gICAgcmV0dXJuIFBhdGgoX19maWxlX18pLnJlc29sdmUoKS5wYXJlbnRcblxuXG5kZWYgY29weV9ndWVzdF9maWxlKHNvdXJjZSwgbmFtZSk6XG4gICAgcGF0aCA9IHNvdXJjZSAvIG5hbWVcbiAgICBpZiBub3QgcGF0aC5leGlzdHMoKTpcbiAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdNYWMgd29ya2VyIGZpbGVzIGFyZSBtaXNzaW5nOiAnICsgbmFtZSlcbiAgICB3aXRoIHBhdGgub3BlbigncmInKSBhcyBoYW5kbGU6XG4gICAgICAgIHJ1bihbJ2xpbWFjdGwnLCAnc2hlbGwnLCBJTlNUQU5DRSwgJ3N1ZG8nLCAndGVlJywgR1VFU1RfRElSICsgJy8nICsgbmFtZV0sXG4gICAgICAgICAgICBzdGRpbj1oYW5kbGUsIHN0ZG91dD1zdWJwcm9jZXNzLkRFVk5VTEwpXG5cblxuZGVmIGluc3RhbGxfZ3Vlc3RfZnJvbV9hcHAoc291cmNlKTpcbiAgICBydW4oWydsaW1hY3RsJywgJ3NoZWxsJywgSU5TVEFOQ0UsICdzdWRvJywgJ3JtJywgJy1yZicsIEdVRVNUX0RJUl0pXG4gICAgcnVuKFsnbGltYWN0bCcsICdzaGVsbCcsIElOU1RBTkNFLCAnc3VkbycsICdta2RpcicsICctbScsICc3MDAnLCAnLXAnLCBHVUVTVF9ESVJdKVxuICAgIGZvciBuYW1lIGluICgqR1VFU1RfSU5TVEFMTF9GSUxFUywgJ2ludml0YXRpb24uanNvbicpOlxuICAgICAgICBjb3B5X2d1ZXN0X2ZpbGUoc291cmNlLCBuYW1lKVxuICAgIHJ1bihbJ2xpbWFjdGwnLCAnc2hlbGwnLCBJTlNUQU5DRSwgJ3N1ZG8nLCAncHl0aG9uMycsICctdScsIEdVRVNUX0RJUiArICcvaW5zdGFsbC5weSddKVxuXG5cbmRlZiBydW5fbGludXhfaW5zdGFsbGVyKHNjcmlwdCk6XG4gICAgc3RhdHVzKCdJbnN0YWxsaW5nIHRoZSB3b3JrZXIgaW5zaWRlIHRoZSBMaW51eCB2aXJ0dWFsIG1hY2hpbmUuLi4nKVxuICAgIHNvdXJjZSA9IGluc3RhbGxlcl9zb3VyY2UoKVxuICAgIGlmIChzb3VyY2UgLyAnaW52aXRhdGlvbi5qc29uJykuZXhpc3RzKCk6XG4gICAgICAgIGluc3RhbGxfZ3Vlc3RfZnJvbV9hcHAoc291cmNlKVxuICAgICAgICByZXR1cm5cbiAgICB3aXRoIFBhdGgoc2NyaXB0KS5vcGVuKCdyYicpIGFzIGhhbmRsZTpcbiAgICAgICAgcnVuKFsnbGltYWN0bCcsICdzaGVsbCcsIElOU1RBTkNFLCAnc3VkbycsICd0ZWUnLCAnL3RtcC9zZXR1cC13b3JrZXIuc2gnXSxcbiAgICAgICAgICAgIHN0ZGluPWhhbmRsZSwgc3Rkb3V0PXN1YnByb2Nlc3MuREVWTlVMTClcbiAgICBydW4oWydsaW1hY3RsJywgJ3NoZWxsJywgSU5TVEFOQ0UsICdzdWRvJywgJ2VudicsICdER0VfR1VFU1RfSU5TVEFMTD0xJyxcbiAgICAgICAgICdiYXNoJywgJy90bXAvc2V0dXAtd29ya2VyLnNoJ10pXG5cblxuZGVmIGhvbWVicmV3X3B5dGhvbigpOlxuICAgIFwiXCJcIkhvbWVicmV3J3MgcHl0aG9uMywgd2hpY2ggbGF1bmNoZCBjYW4ga2VlcCB1c2luZzsgb25lIGZyb20gUEFUSCBtYXkgYmUgYVxuICAgIHZpcnR1YWxlbnYgdGhlIG93bmVyIGxhdGVyIGRlbGV0ZXMuXCJcIlwiXG4gICAgZm9yIGRpcmVjdG9yeSBpbiBNQUNfQklOOlxuICAgICAgICBjYW5kaWRhdGUgPSBzdHIoUGF0aChkaXJlY3RvcnkpIC8gJ3B5dGhvbjMnKVxuICAgICAgICBpZiBweXRob25fdXNhYmxlKGNhbmRpZGF0ZSk6XG4gICAgICAgICAgICByZXR1cm4gY2FuZGlkYXRlXG4gICAgcmV0dXJuIE5vbmVcblxuXG5kZWYgaGVscGVyX3B5dGhvbihweXRob249Tm9uZSk6XG4gICAgcmV0dXJuIGhvbWVicmV3X3B5dGhvbigpIG9yIHB5dGhvbiBvciBmaW5kX3B5dGhvbigpIG9yICcvdXNyL2Jpbi9weXRob24zJ1xuXG5cbmRlZiByZWZyZXNoX2hvc3RfcHJveHkocHl0aG9uKTpcbiAgICBcIlwiXCJCcmluZ3MgYW4gZW5yb2xsZWQgTWFjJ3MgaGVscGVyIHVwIHRvIHRoaXMgYXBwJ3MgY29weTsgc2V0dXAgYWxvbmUgbmV2ZXIgcmV2aXNpdHMgaXQuXG5cbiAgICBUaGUgY29uZmlndXJlZCBpbnRlcnByZXRlciBzdGF5cyB1bmxlc3MgaXQgbm8gbG9uZ2VyIHJ1bnMgb3IgSG9tZWJyZXcncyBjYW4gcmVwbGFjZSBpdCxcbiAgICBzbyBsYXVuY2hpbmcgdGhlIGFwcCBmcm9tIGRpZmZlcmVudCBzaGVsbHMgbmV2ZXIgZmxpcHMgaXQgYmFjayBhbmQgZm9ydGguXG4gICAgXCJcIlwiXG4gICAgcGxpc3QgPSBQYXRoLmhvbWUoKSAvICdMaWJyYXJ5JyAvICdMYXVuY2hBZ2VudHMnIC8gKFBST1hZX0xBQkVMICsgJy5wbGlzdCcpXG4gICAgaWYgb3MuZ2V0ZXVpZCgpID09IDAgb3Igbm90IHBsaXN0LmV4aXN0cygpOlxuICAgICAgICByZXR1cm4gRmFsc2VcbiAgICB3aXRoIHBsaXN0Lm9wZW4oJ3JiJykgYXMgaGFuZGxlOlxuICAgICAgICBjb25maWd1cmVkID0gKHBsaXN0bGliLmxvYWQoaGFuZGxlKS5nZXQoJ1Byb2dyYW1Bcmd1bWVudHMnKSBvciBbTm9uZV0pWzBdXG4gICAgcHJlZmVycmVkID0gaG9tZWJyZXdfcHl0aG9uKClcbiAgICBpbnN0YWxsZWQgPSBQYXRoLmhvbWUoKSAvICdMaWJyYXJ5JyAvICdBcHBsaWNhdGlvbiBTdXBwb3J0JyAvICdkZ2Utd29ya2VyJyAvICdtYWNvc19yMl9wcm94eS5weSdcbiAgICBzb3VyY2UgPSBQYXRoKF9fZmlsZV9fKS5yZXNvbHZlKCkucGFyZW50IC8gJ21hY29zX3IyX3Byb3h5LnB5J1xuICAgIGN1cnJlbnQgPSBpbnN0YWxsZWQuZXhpc3RzKCkgYW5kIGluc3RhbGxlZC5yZWFkX2J5dGVzKCkgPT0gc291cmNlLnJlYWRfYnl0ZXMoKVxuICAgIGlmIGN1cnJlbnQgYW5kIHB5dGhvbl91c2FibGUoY29uZmlndXJlZCkgYW5kIGNvbmZpZ3VyZWQgPT0gKHByZWZlcnJlZCBvciBjb25maWd1cmVkKTpcbiAgICAgICAgcmV0dXJuIEZhbHNlXG4gICAgaW5zdGFsbF9ob3N0X3Byb3h5KGNvbmZpZ3VyZWQgaWYgcHl0aG9uX3VzYWJsZShjb25maWd1cmVkKSBlbHNlIHB5dGhvbilcbiAgICByZXR1cm4gVHJ1ZVxuXG5cbmRlZiBpbnN0YWxsX2hvc3RfcHJveHkocHl0aG9uPU5vbmUpOlxuICAgIHN0YXR1cygnU3RhcnRpbmcgYSBNYWMgbmV0d29yayBoZWxwZXIgc28gcGhvdG8gc3RvcmFnZSB1c2VzIHRoaXMgY29tcHV0ZXLigJlzIG5ldHdvcmsuLi4nKVxuICAgIHN1cHBvcnQgPSBQYXRoLmhvbWUoKSAvICdMaWJyYXJ5JyAvICdBcHBsaWNhdGlvbiBTdXBwb3J0JyAvICdkZ2Utd29ya2VyJ1xuICAgIHN1cHBvcnQubWtkaXIocGFyZW50cz1UcnVlLCBleGlzdF9vaz1UcnVlKVxuICAgIHRva2VuX3BhdGggPSBzdXBwb3J0IC8gJ2hlbHBlci10b2tlbidcbiAgICBpZiBub3QgdG9rZW5fcGF0aC5leGlzdHMoKTpcbiAgICAgICAgdG9rZW5fcGF0aC53cml0ZV90ZXh0KHNlY3JldHMudG9rZW5faGV4KDMyKSlcbiAgICAgICAgdG9rZW5fcGF0aC5jaG1vZCgwbzYwMClcbiAgICBkZXN0aW5hdGlvbiA9IHN1cHBvcnQgLyAnbWFjb3NfcjJfcHJveHkucHknXG4gICAgc2h1dGlsLmNvcHlmaWxlKFBhdGgoX19maWxlX18pLnJlc29sdmUoKS5wYXJlbnQgLyAnbWFjb3NfcjJfcHJveHkucHknLCBkZXN0aW5hdGlvbilcbiAgICBweXRob24gPSB4bWxfdGV4dChoZWxwZXJfcHl0aG9uKHB5dGhvbikpXG4gICAgYWdlbnRzID0gUGF0aC5ob21lKCkgLyAnTGlicmFyeScgLyAnTGF1bmNoQWdlbnRzJ1xuICAgIGFnZW50cy5ta2RpcihwYXJlbnRzPVRydWUsIGV4aXN0X29rPVRydWUpXG4gICAgbG9nID0gUGF0aC5ob21lKCkgLyAnTGlicmFyeScgLyAnTG9ncycgLyAnZGdlLXN0b3JhZ2UtcHJveHkubG9nJ1xuICAgIGxvZy5wYXJlbnQubWtkaXIocGFyZW50cz1UcnVlLCBleGlzdF9vaz1UcnVlKVxuICAgIHBsaXN0ID0gYWdlbnRzIC8gKFBST1hZX0xBQkVMICsgJy5wbGlzdCcpXG4gICAgcGxpc3Qud3JpdGVfdGV4dCgnJyc8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiPz5cbjwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgXCItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU5cIiBcImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGRcIj5cbjxwbGlzdCB2ZXJzaW9uPVwiMS4wXCI+XG48ZGljdD5cbiAgPGtleT5MYWJlbDwva2V5PlxuICA8c3RyaW5nPicnJyArIFBST1hZX0xBQkVMICsgJycnPC9zdHJpbmc+XG4gIDxrZXk+UHJvZ3JhbUFyZ3VtZW50czwva2V5PlxuICA8YXJyYXk+XG4gICAgPHN0cmluZz4nJycgKyBweXRob24gKyAnJyc8L3N0cmluZz5cbiAgICA8c3RyaW5nPicnJyArIHhtbF90ZXh0KGRlc3RpbmF0aW9uKSArICcnJzwvc3RyaW5nPlxuICA8L2FycmF5PlxuICA8a2V5PlJ1bkF0TG9hZDwva2V5PlxuICA8dHJ1ZS8+XG4gIDxrZXk+S2VlcEFsaXZlPC9rZXk+XG4gIDx0cnVlLz5cbiAgPGtleT5TdGFuZGFyZE91dFBhdGg8L2tleT5cbiAgPHN0cmluZz4nJycgKyB4bWxfdGV4dChsb2cpICsgJycnPC9zdHJpbmc+XG4gIDxrZXk+U3RhbmRhcmRFcnJvclBhdGg8L2tleT5cbiAgPHN0cmluZz4nJycgKyB4bWxfdGV4dChsb2cpICsgJycnPC9zdHJpbmc+XG48L2RpY3Q+XG48L3BsaXN0PlxuJycnKVxuICAgIHN1YnByb2Nlc3MucnVuKFsnbGF1bmNoY3RsJywgJ3VubG9hZCcsIHN0cihwbGlzdCldLCBjaGVjaz1GYWxzZSwgc3Rkb3V0PXN1YnByb2Nlc3MuREVWTlVMTCwgc3RkZXJyPXN1YnByb2Nlc3MuREVWTlVMTClcbiAgICAjIE9sZGVyIHdvcmtlciBhcHBzIHN0YXJ0ZWQgdGhlaXIgb3duIGNvcHksIHdoaWNoIGhlbGQgdGhlIHBvcnQgYW5kIGtlcHQgdGhpcyBvbmUgb3V0LlxuICAgIHN1YnByb2Nlc3MucnVuKFsncGtpbGwnLCAnLVUnLCBzdHIob3MuZ2V0dWlkKCkpLCAnLWYnLCBIRUxQRVJfUFJPQ0VTU10sIGNoZWNrPUZhbHNlLFxuICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLkRFVk5VTEwsIHN0ZGVycj1zdWJwcm9jZXNzLkRFVk5VTEwpXG4gICAgcnVuKFsnbGF1bmNoY3RsJywgJ2xvYWQnLCAnLXcnLCBzdHIocGxpc3QpXSlcblxuXG5kZWYgaW5zdGFsbF92bV9hdXRvc3RhcnQoKTpcbiAgICBcIlwiXCJTdGFydHMgdGhlIHdvcmtlciBWTSBhdCBsb2dpbjsgTGltYSBsZWF2ZXMgaXQgc3RvcHBlZCBhZnRlciB0aGUgTWFjIHJlc3RhcnRzLlxuXG4gICAgU3RhcnRpbmcgYSBydW5uaW5nIGluc3RhbmNlIGlzIGEgbm8tb3AsIHNvIGxvYWRpbmcgdGhlIGFnZW50IG5ldmVyIGRpc3R1cmJzIGEgbGl2ZSB3b3JrZXIuXG4gICAgXCJcIlwiXG4gICAgbGltYWN0bCA9IHNodXRpbC53aGljaCgnbGltYWN0bCcpXG4gICAgaWYgbm90IGxpbWFjdGw6XG4gICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignbGltYWN0bCBpcyBub3Qgb24gUEFUSCwgc28gdGhlIHdvcmtlciBjYW5ub3Qgc3RhcnQgYXQgbG9naW4uJylcbiAgICBsb2cgPSBQYXRoLmhvbWUoKSAvICdMaWJyYXJ5JyAvICdMb2dzJyAvICdkZ2Utd29ya2VyLXZtLmxvZydcbiAgICBsb2cucGFyZW50Lm1rZGlyKHBhcmVudHM9VHJ1ZSwgZXhpc3Rfb2s9VHJ1ZSlcbiAgICBwbGlzdCA9IFBhdGguaG9tZSgpIC8gJ0xpYnJhcnknIC8gJ0xhdW5jaEFnZW50cycgLyAoVk1fTEFCRUwgKyAnLnBsaXN0JylcbiAgICBjb250ZW50ID0gcGxpc3RsaWIuZHVtcHMoe1xuICAgICAgICAnTGFiZWwnOiBWTV9MQUJFTCxcbiAgICAgICAgJ1Byb2dyYW1Bcmd1bWVudHMnOiBbbGltYWN0bCwgJ3N0YXJ0JywgJy0tdHR5PWZhbHNlJywgSU5TVEFOQ0VdLFxuICAgICAgICAnRW52aXJvbm1lbnRWYXJpYWJsZXMnOiB7J1BBVEgnOiAnOicuam9pbigoKk1BQ19CSU4sICcvdXNyL2JpbicsICcvYmluJywgJy91c3Ivc2JpbicsICcvc2JpbicpKX0sXG4gICAgICAgICdSdW5BdExvYWQnOiBUcnVlLFxuICAgICAgICAjIExpbWEgZGV0YWNoZXMgaXRzIGhvc3QgYWdlbnQ7IGtlZXAgbGF1bmNoZCBmcm9tIHJlYXBpbmcgaXQgd2hlbiBsaW1hY3RsIGV4aXRzLlxuICAgICAgICAnQWJhbmRvblByb2Nlc3NHcm91cCc6IFRydWUsXG4gICAgICAgICdTdGFuZGFyZE91dFBhdGgnOiBzdHIobG9nKSxcbiAgICAgICAgJ1N0YW5kYXJkRXJyb3JQYXRoJzogc3RyKGxvZyksXG4gICAgfSlcbiAgICBpZiBwbGlzdC5leGlzdHMoKSBhbmQgcGxpc3QucmVhZF9ieXRlcygpID09IGNvbnRlbnQ6XG4gICAgICAgIHJldHVybiBGYWxzZVxuICAgIHN0YXR1cygnU3RhcnRpbmcgdGhlIHdvcmtlciB3aGVuZXZlciB5b3UgbG9nIGluIHRvIHRoaXMgTWFjLi4uJylcbiAgICBwbGlzdC5wYXJlbnQubWtkaXIocGFyZW50cz1UcnVlLCBleGlzdF9vaz1UcnVlKVxuICAgIHBsaXN0LndyaXRlX2J5dGVzKGNvbnRlbnQpXG4gICAgc3VicHJvY2Vzcy5ydW4oWydsYXVuY2hjdGwnLCAndW5sb2FkJywgc3RyKHBsaXN0KV0sIGNoZWNrPUZhbHNlLCBzdGRvdXQ9c3VicHJvY2Vzcy5ERVZOVUxMLCBzdGRlcnI9c3VicHJvY2Vzcy5ERVZOVUxMKVxuICAgIHJ1bihbJ2xhdW5jaGN0bCcsICdsb2FkJywgJy13Jywgc3RyKHBsaXN0KV0pXG4gICAgcmV0dXJuIFRydWVcblxuXG5kZWYgcmVmcmVzaF92bV9hdXRvc3RhcnQoKTpcbiAgICBcIlwiXCJHaXZlcyBhIE1hYyBzZXQgdXAgYmVmb3JlIHRoZSBsb2dpbiBhZ2VudCBleGlzdGVkIGl0cyBhZ2VudDsgc2V0dXAgYWxvbmUgbmV2ZXIgcmV2aXNpdHMgaXQuXG5cbiAgICBDaGVja3MgZm9yIHRoZSBWTSBpdHNlbGYsIHNpbmNlIHNldHVwcyBiZWZvcmUgb3duZWQtdm0uanNvbiBuZXZlciB3cm90ZSB0aGF0IHJlY29yZC5cbiAgICBcIlwiXCJcbiAgICBpZiBvcy5nZXRldWlkKCkgPT0gMDpcbiAgICAgICAgcmV0dXJuIEZhbHNlXG4gICAgYWRkX21hY19wcmVmaXhlcygpXG4gICAgaWYgbm90IHNodXRpbC53aGljaCgnbGltYWN0bCcpIG9yIElOU1RBTkNFIG5vdCBpbiBpbnN0YW5jZV9uYW1lcygpOlxuICAgICAgICByZXR1cm4gRmFsc2VcbiAgICByZXR1cm4gaW5zdGFsbF92bV9hdXRvc3RhcnQoKVxuXG5cbmRlZiBjb25maWd1cmVfZ3Vlc3RfcHJveHkoKTpcbiAgICB0b2tlbl9wYXRoID0gUGF0aC5ob21lKCkgLyAnTGlicmFyeScgLyAnQXBwbGljYXRpb24gU3VwcG9ydCcgLyAnZGdlLXdvcmtlcicgLyAnaGVscGVyLXRva2VuJ1xuICAgIGVudiA9ICdER0VfU1RPUkFHRV9QUk9YWT1odHRwOi8vaG9zdC5saW1hLmludGVybmFsOiVzXFxuJyAlIFBST1hZX1BPUlRcbiAgICBpZiB0b2tlbl9wYXRoLmV4aXN0cygpOlxuICAgICAgICBlbnYgKz0gJ0RHRV9IRUxQRVJfVE9LRU49JyArIHRva2VuX3BhdGgucmVhZF90ZXh0KCkuc3RyaXAoKSArICdcXG4nXG4gICAgcnVuKFsnbGltYWN0bCcsICdzaGVsbCcsIElOU1RBTkNFLCAnc3VkbycsICd0ZWUnLCAnL29wdC9kZ2Utd29ya2VyL3Byb3h5LmVudiddLFxuICAgICAgICBpbnB1dD1lbnYuZW5jb2RlKCksIHN0ZG91dD1zdWJwcm9jZXNzLkRFVk5VTEwpXG4gICAgcnVuKFsnbGltYWN0bCcsICdzaGVsbCcsIElOU1RBTkNFLCAnc3VkbycsICdjaG1vZCcsICc2MDAnLCAnL29wdC9kZ2Utd29ya2VyL3Byb3h5LmVudiddKVxuICAgIHJ1bihbJ2xpbWFjdGwnLCAnc2hlbGwnLCBJTlNUQU5DRSwgJ3N1ZG8nLCAnc3lzdGVtY3RsJywgJ3Jlc3RhcnQnLCAnZGdlLXdvcmtlci5zZXJ2aWNlJ10pXG5cblxuZGVmIG1haW4oc2NyaXB0KTpcbiAgICBnbG9iYWwgUkVQT1JURVJcbiAgICBpZiBvcy5nZXRldWlkKCkgPT0gMDpcbiAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdEbyBub3QgcnVuIHRoaXMgaW5zdGFsbGVyIHdpdGggc3VkbyBvbiBhIE1hYy4gUnVuIGl0IGFzIHlvdXJzZWxmLicpXG4gICAgaW52aXRhdGlvbl9maWxlID0gaW5zdGFsbGVyX3NvdXJjZSgpIC8gJ2ludml0YXRpb24uanNvbidcbiAgICBpZiBpbnZpdGF0aW9uX2ZpbGUuZXhpc3RzKCkgYW5kIG9zLmVudmlyb24uZ2V0KCdER0VfU0VUVVBfTE9HX1NVUEVSVklTRUQnKSAhPSAnMSc6XG4gICAgICAgIGludml0YXRpb24gPSBqc29uLmxvYWRzKGludml0YXRpb25fZmlsZS5yZWFkX3RleHQoKSlcbiAgICAgICAgUkVQT1JURVIgPSBTZXR1cExvZ1JlcG9ydGVyKGludml0YXRpb25bJ29yaWdpbiddLCBpbnZpdGF0aW9uWyd0b2tlbiddKVxuICAgIHRyeTpcbiAgICAgICAgaW5zdGFsbChzY3JpcHQpXG4gICAgZmluYWxseTpcbiAgICAgICAgaWYgUkVQT1JURVI6XG4gICAgICAgICAgICBSRVBPUlRFUi5jbG9zZSgpXG4gICAgICAgICAgICBSRVBPUlRFUiA9IE5vbmVcblxuXG5kZWYgaW5zdGFsbChzY3JpcHQpOlxuICAgIGFkZF9tYWNfcHJlZml4ZXMoKVxuICAgIHByaW50KCdUaGlzIE1hYyBydW5zIHRoZSB3b3JrZXIgaW5zaWRlIGEgTGludXggdmlydHVhbCBtYWNoaW5lIHNvIHRhc2sgaXNvbGF0aW9uIG1hdGNoZXMgYSBMaW51eCBob3N0LicsXG4gICAgICAgICAgZmx1c2g9VHJ1ZSlcbiAgICBweXRob24gPSBlbnN1cmVfcHl0aG9uKClcbiAgICBlbnN1cmVfbGltYWN0bCgpXG4gICAgbWVtb3J5X2dpYiwgY3B1cyA9IHZtX3NpemUoKmhvc3RfcmVzb3VyY2VzKCkpXG4gICAgc3RhcnRfdm0obWVtb3J5X2dpYiwgY3B1cylcbiAgICBpbnN0YWxsX2hvc3RfcHJveHkocHl0aG9uKVxuICAgIHJ1bl9saW51eF9pbnN0YWxsZXIoc2NyaXB0KVxuICAgIGNvbmZpZ3VyZV9ndWVzdF9wcm94eSgpXG4gICAgaW5zdGFsbF92bV9hdXRvc3RhcnQoKVxuXG5cbmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6XG4gICAgdHJ5OlxuICAgICAgICBtYWluKHN5cy5hcmd2WzFdKVxuICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlcnJvcjpcbiAgICAgICAgcmFpc2UgU3lzdGVtRXhpdCgnTGludXggd29ya2VyIHNldHVwIGZhaWxlZDogJyArICcgJy5qb2luKHN0cihpdGVtKSBmb3IgaXRlbSBpbiBlcnJvci5jbWQpKSBmcm9tIE5vbmVcbiAgICBleGNlcHQgUnVudGltZUVycm9yIGFzIGVycm9yOlxuICAgICAgICByYWlzZSBTeXN0ZW1FeGl0KHN0cihlcnJvcikpIGZyb20gTm9uZVxuIiwibWFjb3NfcjJfcHJveHkucHkiOiIjIS91c3IvYmluL2VudiBweXRob24zXG5cIlwiXCJIb3N0IEhUVFAgaGVscGVyOiBMaW1hIGd1ZXN0cyBzZW5kIHBsYWluIEhUVFA7IHRoZSBNYWMgZG9lcyBSMiBUTFMuXG5cblNlY3VyZSBUcmFuc3BvcnQgLyBsYXJnZSBUTFMgcmVjb3JkcyBmYWlsIG9uIHRoaXMgV2ktRmkgcGF0aCB0byBDbG91ZGZsYXJlXG5PUkQuIEhvbWVicmV3IE9wZW5TU0wgd2l0aCBtYXhfc2VuZF9mcmFnbWVudD00MDk2IGNvbXBsZXRlcyAyMCBNaUIgUFVUcy5cbkxpc3RlbnMgb24gZXZlcnkgaW50ZXJmYWNlIGJlY2F1c2UgdGhlIGd1ZXN0IHJlYWNoZXMgdGhlIGhvc3QgYXNcbmhvc3QubGltYS5pbnRlcm5hbC4gR0VUIC91cGxpbmsgcmVwb3J0cyBhbiB1bnBhY2VkIENsb3VkZmxhcmUgUFVUIHByb2JlXG5vbiB0aGUgaG9zdCBOSUMuIE9ubHkgR0VUL1BVVC9IRUFEIHRvICoucjIuY2xvdWRmbGFyZXN0b3JhZ2UuY29tIGFyZVxuYWxsb3dlZCBhcyBzdG9yYWdlLiBUaGUgd29ya2VyIHRva2VuIG5ldmVyIGxlYXZlcyB0aGUgVk0uXG5cIlwiXCJcbmltcG9ydCBjdHlwZXNcbmltcG9ydCBlcnJub1xuaW1wb3J0IGZ1bmN0b29sc1xuaW1wb3J0IGh0dHAuY2xpZW50XG5pbXBvcnQgaG1hY1xuZnJvbSBwYXRobGliIGltcG9ydCBQYXRoXG5pbXBvcnQgaXBhZGRyZXNzXG5pbXBvcnQganNvblxuaW1wb3J0IG9zXG5pbXBvcnQgcmVcbmltcG9ydCBzb2NrZXRcbmltcG9ydCBzc2xcbmltcG9ydCBzdWJwcm9jZXNzXG5pbXBvcnQgc3lzXG5pbXBvcnQgdGVtcGZpbGVcbmltcG9ydCB0aHJlYWRpbmdcbmltcG9ydCB0aW1lXG5pbXBvcnQgdXJsbGliLnBhcnNlXG5cbkxJU1RFTl9IT1NUID0gJzAuMC4wLjAnXG5MSVNURU5fUE9SVCA9IDE4Nzg5XG5BTExPV0VEX1NVRkZJWCA9ICcucjIuY2xvdWRmbGFyZXN0b3JhZ2UuY29tJ1xuQlVGRkVSID0gNjU1MzZcbkhFQURFUl9MSU1JVCA9IDY1NTM2XG5NQVhfUFVUID0gNTEyICogMTAyNCAqIDEwMjRcbkNVUkwgPSAnL3Vzci9iaW4vY3VybCdcblRMU19TRU5EX0ZSQUdNRU5UID0gMjA0OFxuVExTX1NFTkRfUEFDRSA9IDAuMDAyXG5PUklHSU4gPSB0aHJlYWRpbmcuTG9jaygpXG5GT1JXQVJEX1NLSVAgPSB7J2Nvbm5lY3Rpb24nLCAna2VlcC1hbGl2ZScsICdwcm94eS1hdXRoZW50aWNhdGUnLCAncHJveHktYXV0aG9yaXphdGlvbicsXG4gICAgICAgICAgICAgICAgICd0ZScsICd0cmFpbGVycycsICd0cmFuc2Zlci1lbmNvZGluZycsICd1cGdyYWRlJywgJ2hvc3QnLCAneC1kZ2UtdGFyZ2V0JyxcbiAgICAgICAgICAgICAgICAgJ2V4cGVjdCcsICdjb250ZW50LWxlbmd0aCd9XG5QUk9CRV9IT1NUID0gJ3NwZWVkLmNsb3VkZmxhcmUuY29tJ1xuUFJPQkVfUEFUSCA9ICcvX191cCdcblBST0JFX0JZVEVTID0gMiAqIDEwMjQgKiAxMDI0XG5QUk9CRV9USU1FT1VUID0gMTBcblBST0JFX0lOVEVSVkFMID0gMzAwXG5VUExJTktfUkVBRFkgPSB0aHJlYWRpbmcuRXZlbnQoKVxuVVBMSU5LX0xPQ0sgPSB0aHJlYWRpbmcuTG9jaygpXG5VUExJTksgPSB7J29rJzogTm9uZSwgJ2Jwcyc6IDAsICdwcm9iZWRfYXQnOiAwLjAsICdpZmFjZSc6IE5vbmUsICd3aWZpJzogRmFsc2V9XG5IT1NUX0xPQ0sgPSB0aHJlYWRpbmcuTG9jaygpXG5IT1NUX0lERU5USVRZID0ge31cbkRFU0tUT1BfTUFDID0gKCdtYWMgbWluaScsICdtYWMgc3R1ZGlvJywgJ21hYyBwcm8nLCAnaW1hYycpXG5IT1NUX0NQVV9MT0FEX0lORk8gPSAzXG5DUFVfU0FNUExFX1NFQ09ORFMgPSAxXG5MSVNURU5fUkVUUllfU0VDT05EUyA9IDAuNVxuXG5cbmRlZiBjb21tYW5kX291dHB1dChhcmdzKTpcbiAgICB0cnk6XG4gICAgICAgIHJldHVybiBzdWJwcm9jZXNzLnJ1bihhcmdzLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5ERVZOVUxMLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PTUsIGNoZWNrPUZhbHNlKS5zdGRvdXQuZGVjb2RlKGVycm9ycz0ncmVwbGFjZScpXG4gICAgZXhjZXB0IChPU0Vycm9yLCBzdWJwcm9jZXNzLlN1YnByb2Nlc3NFcnJvcik6XG4gICAgICAgIHJldHVybiAnJ1xuXG5cbmRlZiBwYXJzZV9yb3V0ZV9pbnRlcmZhY2UodGV4dCk6XG4gICAgZm9yIGxpbmUgaW4gdGV4dC5zcGxpdGxpbmVzKCk6XG4gICAgICAgIHN0cmlwcGVkID0gbGluZS5zdHJpcCgpXG4gICAgICAgIGlmIHN0cmlwcGVkLnN0YXJ0c3dpdGgoJ2ludGVyZmFjZTonKTpcbiAgICAgICAgICAgIHJldHVybiBzdHJpcHBlZC5zcGxpdCgnOicsIDEpWzFdLnN0cmlwKCkgb3IgTm9uZVxuICAgIHJldHVybiBOb25lXG5cblxuZGVmIHBhcnNlX3dpZmlfZGV2aWNlcyh0ZXh0KTpcbiAgICBkZXZpY2VzID0gc2V0KClcbiAgICBwb3J0ID0gJydcbiAgICBmb3IgbGluZSBpbiB0ZXh0LnNwbGl0bGluZXMoKTpcbiAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdIYXJkd2FyZSBQb3J0OicpOlxuICAgICAgICAgICAgcG9ydCA9IGxpbmUuc3BsaXQoJzonLCAxKVsxXS5zdHJpcCgpLmxvd2VyKClcbiAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoJ0RldmljZTonKSBhbmQgcG9ydDpcbiAgICAgICAgICAgIGlmICd3aS1maScgaW4gcG9ydCBvciBwb3J0IGluICgnd2lmaScsICdhaXJwb3J0JywgJ3dsYW4nKTpcbiAgICAgICAgICAgICAgICBkZXZpY2VzLmFkZChsaW5lLnNwbGl0KCc6JywgMSlbMV0uc3RyaXAoKSlcbiAgICAgICAgICAgIHBvcnQgPSAnJ1xuICAgIHJldHVybiBkZXZpY2VzXG5cblxuZGVmIHdpZmlfZGVmYXVsdF9yb3V0ZSgpOlxuICAgIGlmYWNlLCB3aWZpID0gY3VycmVudF9wYXRoKClcbiAgICByZXR1cm4gd2lmaVxuXG5cbmRlZiBjdXJyZW50X3BhdGgoKTpcbiAgICBpZmFjZSA9IHBhcnNlX3JvdXRlX2ludGVyZmFjZShjb21tYW5kX291dHB1dChbJy9zYmluL3JvdXRlJywgJy1uJywgJ2dldCcsICdkZWZhdWx0J10pKVxuICAgIHdpZmkgPSBib29sKGlmYWNlKSBhbmQgaWZhY2UgaW4gcGFyc2Vfd2lmaV9kZXZpY2VzKGNvbW1hbmRfb3V0cHV0KFsnL3Vzci9zYmluL25ldHdvcmtzZXR1cCcsICctbGlzdGFsbGhhcmR3YXJlcG9ydHMnXSkpXG4gICAgcmV0dXJuIGlmYWNlLCB3aWZpXG5cblxuZGVmIHBhcnNlX2hhcmR3YXJlX3Byb2ZpbGUodGV4dCk6XG4gICAgbmFtZSwgaWRlbnRpZmllciA9IE5vbmUsIE5vbmVcbiAgICBmb3IgbGluZSBpbiB0ZXh0LnNwbGl0bGluZXMoKTpcbiAgICAgICAgc3RyaXBwZWQgPSBsaW5lLnN0cmlwKClcbiAgICAgICAgaWYgc3RyaXBwZWQuc3RhcnRzd2l0aCgnTW9kZWwgTmFtZTonKTpcbiAgICAgICAgICAgIG5hbWUgPSBzdHJpcHBlZC5zcGxpdCgnOicsIDEpWzFdLnN0cmlwKCkgb3IgTm9uZVxuICAgICAgICBlbGlmIHN0cmlwcGVkLnN0YXJ0c3dpdGgoJ01vZGVsIElkZW50aWZpZXI6Jyk6XG4gICAgICAgICAgICBpZGVudGlmaWVyID0gc3RyaXBwZWQuc3BsaXQoJzonLCAxKVsxXS5zdHJpcCgpIG9yIE5vbmVcbiAgICByZXR1cm4gbmFtZSwgaWRlbnRpZmllclxuXG5cbmRlZiBkZXNrdG9wX21hYyhuYW1lKTpcbiAgICBsb3dlcmVkID0gKG5hbWUgb3IgJycpLmxvd2VyKClcbiAgICByZXR1cm4gYW55KHRva2VuIGluIGxvd2VyZWQgZm9yIHRva2VuIGluIERFU0tUT1BfTUFDKVxuXG5cbmRlZiBwYXJzZV9wbXNldF9iYXR0KHRleHQpOlxuICAgIGFjID0gTm9uZVxuICAgIGlmICdBQyBQb3dlcicgaW4gdGV4dDpcbiAgICAgICAgYWMgPSBUcnVlXG4gICAgZWxpZiAnQmF0dGVyeSBQb3dlcicgaW4gdGV4dDpcbiAgICAgICAgYWMgPSBGYWxzZVxuICAgIHByZXNlbnQgPSAnSW50ZXJuYWxCYXR0ZXJ5JyBpbiB0ZXh0XG4gICAgcGVyY2VudCA9IE5vbmVcbiAgICBzdGF0dXMgPSBOb25lXG4gICAgZm9yIHBhcnQgaW4gdGV4dC5yZXBsYWNlKCdcXHQnLCAnICcpLnNwbGl0KCk6XG4gICAgICAgIGlmIHBhcnQuZW5kc3dpdGgoJyU7Jykgb3IgcGFydC5lbmRzd2l0aCgnJScpOlxuICAgICAgICAgICAgZGlnaXRzID0gcGFydC5zdHJpcCgnJTsnKVxuICAgICAgICAgICAgaWYgZGlnaXRzLmlzZGlnaXQoKTpcbiAgICAgICAgICAgICAgICBwZXJjZW50ID0gaW50KGRpZ2l0cylcbiAgICAgICAgbG93ZXJlZCA9IHBhcnQuc3RyaXAoJzsnKS5sb3dlcigpXG4gICAgICAgIGlmIGxvd2VyZWQgaW4gKCdjaGFyZ2luZycsICdkaXNjaGFyZ2luZycsICdjaGFyZ2VkJywgJ2ZpbmlzaGluZyBjaGFyZ2UnKTpcbiAgICAgICAgICAgIHN0YXR1cyA9IGxvd2VyZWQuY2FwaXRhbGl6ZSgpIGlmIGxvd2VyZWQgIT0gJ2ZpbmlzaGluZyBjaGFyZ2UnIGVsc2UgJ0NoYXJnaW5nJ1xuICAgIHJldHVybiB7J2FjX2Nvbm5lY3RlZCc6IGFjLCAnYmF0dGVyeV9wcmVzZW50JzogcHJlc2VudCwgJ2JhdHRlcnlfcGVyY2VudCc6IHBlcmNlbnQsXG4gICAgICAgICAgICAnYmF0dGVyeV9zdGF0dXMnOiBzdGF0dXN9XG5cblxuZGVmIGhvc3RfaWRlbnRpdHkoKTpcbiAgICB3aXRoIEhPU1RfTE9DSzpcbiAgICAgICAgaWYgSE9TVF9JREVOVElUWS5nZXQoJ2hhcmR3YXJlX21vZGVsJyk6XG4gICAgICAgICAgICByZXR1cm4gZGljdChIT1NUX0lERU5USVRZKVxuICAgIG5hbWUsIGlkZW50aWZpZXIgPSBwYXJzZV9oYXJkd2FyZV9wcm9maWxlKGNvbW1hbmRfb3V0cHV0KFsnL3Vzci9zYmluL3N5c3RlbV9wcm9maWxlcicsICdTUEhhcmR3YXJlRGF0YVR5cGUnXSkpXG4gICAgbW9kZWwgPSBuYW1lIG9yIGlkZW50aWZpZXJcbiAgICBpZGVudGl0eSA9IHsnbWFudWZhY3R1cmVyJzogJ0FwcGxlJyBpZiBtb2RlbCBlbHNlIE5vbmUsICdoYXJkd2FyZV9tb2RlbCc6IG1vZGVsfVxuICAgIHdpdGggSE9TVF9MT0NLOlxuICAgICAgICBIT1NUX0lERU5USVRZLnVwZGF0ZShpZGVudGl0eSlcbiAgICAgICAgcmV0dXJuIGRpY3QoSE9TVF9JREVOVElUWSlcblxuXG5kZWYgaG9zdF9wb3dlcigpOlxuICAgIGlkZW50aXR5ID0gaG9zdF9pZGVudGl0eSgpXG4gICAgcG93ZXIgPSBwYXJzZV9wbXNldF9iYXR0KGNvbW1hbmRfb3V0cHV0KFsnL3Vzci9iaW4vcG1zZXQnLCAnLWcnLCAnYmF0dCddKSlcbiAgICBpZiBkZXNrdG9wX21hYyhpZGVudGl0eS5nZXQoJ2hhcmR3YXJlX21vZGVsJykpOlxuICAgICAgICBwb3dlclsnYmF0dGVyeV9wcmVzZW50J10gPSBGYWxzZVxuICAgICAgICBwb3dlclsnYWNfY29ubmVjdGVkJ10gPSBUcnVlIGlmIHBvd2VyWydhY19jb25uZWN0ZWQnXSBpcyBOb25lIGVsc2UgcG93ZXJbJ2FjX2Nvbm5lY3RlZCddXG4gICAgICAgIHBvd2VyWydiYXR0ZXJ5X3BlcmNlbnQnXSA9IE5vbmVcbiAgICAgICAgcG93ZXJbJ2JhdHRlcnlfc3RhdHVzJ10gPSBOb25lXG4gICAgcmV0dXJuIHBvd2VyXG5cblxuZGVmIHJlcXVlc3RfcGF0aChyYXcpOlxuICAgIHRyeTpcbiAgICAgICAgX21ldGhvZCwgdGFyZ2V0LCBfdmVyc2lvbiA9IHJhdy5zcGxpdChiJ1xcclxcbicsIDEpWzBdLmRlY29kZSgnYXNjaWknKS5zcGxpdCgpXG4gICAgZXhjZXB0IChWYWx1ZUVycm9yLCBVbmljb2RlRGVjb2RlRXJyb3IpOlxuICAgICAgICByZXR1cm4gJydcbiAgICByZXR1cm4gdXJsbGliLnBhcnNlLnVybHNwbGl0KHRhcmdldCkucGF0aFxuXG5cbmRlZiBwcm9iZV9hY2NlcHRlZChzdGF0dXMpOlxuICAgIHJldHVybiBzdGF0dXMgaW4gKDIwMCwgNDAzKVxuXG5cbmRlZiBwcm9iZV9jbG91ZGZsYXJlKCk6XG4gICAgc3RhcnRlZCA9IHRpbWUubW9ub3RvbmljKClcbiAgICBwYXlsb2FkID0gYidcXDAnICogUFJPQkVfQllURVNcbiAgICBjdHggPSBzc2wuY3JlYXRlX2RlZmF1bHRfY29udGV4dCgpXG4gICAgY3R4Lm1pbmltdW1fdmVyc2lvbiA9IHNzbC5UTFNWZXJzaW9uLlRMU3YxXzJcbiAgICBjb25uID0gaHR0cC5jbGllbnQuSFRUUFNDb25uZWN0aW9uKFBST0JFX0hPU1QsIDQ0MywgdGltZW91dD1QUk9CRV9USU1FT1VULCBjb250ZXh0PWN0eClcbiAgICB0cnk6XG4gICAgICAgIGNvbm4ucmVxdWVzdCgnUFVUJywgUFJPQkVfUEFUSCwgYm9keT1wYXlsb2FkLCBoZWFkZXJzPXsnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSd9KVxuICAgICAgICByZXNwb25zZSA9IGNvbm4uZ2V0cmVzcG9uc2UoKVxuICAgICAgICByZXNwb25zZS5yZWFkKClcbiAgICAgICAgZWxhcHNlZCA9IG1heCh0aW1lLm1vbm90b25pYygpIC0gc3RhcnRlZCwgMC4wMDEpXG4gICAgICAgIG9rID0gcHJvYmVfYWNjZXB0ZWQocmVzcG9uc2Uuc3RhdHVzKVxuICAgICAgICByZXR1cm4gb2ssIGludChQUk9CRV9CWVRFUyAvIGVsYXBzZWQpIGlmIG9rIGVsc2UgMFxuICAgIGV4Y2VwdCAoT1NFcnJvciwgc3NsLlNTTEVycm9yLCBodHRwLmNsaWVudC5IVFRQRXhjZXB0aW9uLCBWYWx1ZUVycm9yKSBhcyBlcnJvcjpcbiAgICAgICAgbG9nX3N0b3JhZ2UoJ3VwbGluayBwcm9iZSBmYWlsZWQ6ICVzJyAlIGVycm9yKVxuICAgICAgICByZXR1cm4gRmFsc2UsIDBcbiAgICBmaW5hbGx5OlxuICAgICAgICBjb25uLmNsb3NlKClcblxuXG5kZWYgcmVmcmVzaF91cGxpbmsoZm9yY2U9RmFsc2UpOlxuICAgIGlmYWNlLCB3aWZpID0gY3VycmVudF9wYXRoKClcbiAgICB3aXRoIFVQTElOS19MT0NLOlxuICAgICAgICBhZ2UgPSB0aW1lLnRpbWUoKSAtIChVUExJTktbJ3Byb2JlZF9hdCddIG9yIDApXG4gICAgICAgIGNoYW5nZWQgPSBpZmFjZSAhPSBVUExJTktbJ2lmYWNlJ10gb3Igd2lmaSAhPSBVUExJTktbJ3dpZmknXVxuICAgICAgICBpZiBub3QgZm9yY2UgYW5kIFVQTElOS1snb2snXSBpcyBub3QgTm9uZSBhbmQgbm90IGNoYW5nZWQgYW5kIGFnZSA8IFBST0JFX0lOVEVSVkFMOlxuICAgICAgICAgICAgcmV0dXJuIGRpY3QoVVBMSU5LKVxuICAgIHdpdGggT1JJR0lOOlxuICAgICAgICBvaywgYnBzID0gcHJvYmVfY2xvdWRmbGFyZSgpXG4gICAgd2l0aCBVUExJTktfTE9DSzpcbiAgICAgICAgVVBMSU5LLnVwZGF0ZShvaz1vaywgYnBzPWJwcywgcHJvYmVkX2F0PXRpbWUudGltZSgpLCBpZmFjZT1pZmFjZSwgd2lmaT13aWZpKVxuICAgICAgICByZXR1cm4gZGljdChVUExJTkspXG5cblxuZGVmIHVwbGlua19wYXlsb2FkKCk6XG4gICAgd2l0aCBVUExJTktfTE9DSzpcbiAgICAgICAgc3RhdGUgPSBkaWN0KFVQTElOSylcbiAgICBwYXlsb2FkID0geydvayc6IHN0YXRlWydvayddLCAnYnBzJzogc3RhdGVbJ2JwcyddLCAncHJvYmVkX2F0Jzogc3RhdGVbJ3Byb2JlZF9hdCddLFxuICAgICAgICAgICAgICAgJ2lmYWNlJzogc3RhdGVbJ2lmYWNlJ10sICd3aWZpJzogc3RhdGVbJ3dpZmknXX1cbiAgICBwYXlsb2FkLnVwZGF0ZShob3N0X2lkZW50aXR5KCkpXG4gICAgcGF5bG9hZC51cGRhdGUoaG9zdF9wb3dlcigpKVxuICAgIHJldHVybiBwYXlsb2FkXG5cblxuZGVmIHJlcGx5X2pzb24oc29jaywgcGF5bG9hZCk6XG4gICAgYm9keSA9IGpzb24uZHVtcHMocGF5bG9hZCkuZW5jb2RlKClcbiAgICBzb2NrLnNlbmRhbGwoKCdIVFRQLzEuMSAyMDAgT0tcXHJcXG5Db250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cXHJcXG5Db250ZW50LUxlbmd0aDogJXNcXHJcXG4nXG4gICAgICAgICAgICAgICAgICAnQ29ubmVjdGlvbjogY2xvc2VcXHJcXG5cXHJcXG4nICUgbGVuKGJvZHkpKS5lbmNvZGUoKSArIGJvZHkpXG5cblxuZGVmIHVwbGlua19sb29wKCk6XG4gICAgd2hpbGUgVHJ1ZTpcbiAgICAgICAgdHJ5OlxuICAgICAgICAgICAgcmVmcmVzaF91cGxpbmsoKVxuICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGVycm9yOlxuICAgICAgICAgICAgbG9nX3N0b3JhZ2UoJ3VwbGluayBwcm9iZSBmYWlsZWQ6ICVzJyAlIGVycm9yKVxuICAgICAgICAgICAgaWZhY2UsIHdpZmkgPSBjdXJyZW50X3BhdGgoKVxuICAgICAgICAgICAgd2l0aCBVUExJTktfTE9DSzpcbiAgICAgICAgICAgICAgICBVUExJTksudXBkYXRlKG9rPUZhbHNlLCBicHM9MCwgcHJvYmVkX2F0PXRpbWUudGltZSgpLCBpZmFjZT1pZmFjZSwgd2lmaT13aWZpKVxuICAgICAgICBVUExJTktfUkVBRFkuc2V0KClcbiAgICAgICAgdGltZS5zbGVlcCg1KVxuXG5cbmRlZiBhbGxvd2VkX2hvc3QoaG9zdCk6XG4gICAgaG9zdCA9IChob3N0IG9yICcnKS5zdHJpcCgpLmxvd2VyKCkucnN0cmlwKCcuJylcbiAgICBpZiBob3N0LnN0YXJ0c3dpdGgoJ1snKSBvciBub3QgaG9zdC5lbmRzd2l0aChBTExPV0VEX1NVRkZJWCk6XG4gICAgICAgIHJldHVybiBGYWxzZVxuICAgIHByZWZpeCA9IGhvc3RbOi1sZW4oQUxMT1dFRF9TVUZGSVgpXVxuICAgIGlmIG5vdCBwcmVmaXg6XG4gICAgICAgIHJldHVybiBGYWxzZVxuICAgIGZvciBsYWJlbCBpbiBwcmVmaXguc3BsaXQoJy4nKTpcbiAgICAgICAgaWYgbm90IGxhYmVsIG9yIGxhYmVsLnN0YXJ0c3dpdGgoJy0nKSBvciBsYWJlbC5lbmRzd2l0aCgnLScpOlxuICAgICAgICAgICAgcmV0dXJuIEZhbHNlXG4gICAgICAgIGlmIG5vdCBhbGwoY2hhcmFjdGVyLmlzYWxudW0oKSBvciBjaGFyYWN0ZXIgPT0gJy0nIGZvciBjaGFyYWN0ZXIgaW4gbGFiZWwpOlxuICAgICAgICAgICAgcmV0dXJuIEZhbHNlXG4gICAgdHJ5OlxuICAgICAgICBpcGFkZHJlc3MuaXBfYWRkcmVzcyhob3N0KVxuICAgICAgICByZXR1cm4gRmFsc2VcbiAgICBleGNlcHQgVmFsdWVFcnJvcjpcbiAgICAgICAgcmV0dXJuIFRydWVcblxuXG5kZWYgYWxsb3dlZF91cmwodXJsKTpcbiAgICBwYXJzZWQgPSB1cmxsaWIucGFyc2UudXJsc3BsaXQodXJsIG9yICcnKVxuICAgIGlmIChwYXJzZWQuc2NoZW1lICE9ICdodHRwcycgb3IgcGFyc2VkLnVzZXJuYW1lIG9yIG5vdCBwYXJzZWQuaG9zdG5hbWVcbiAgICAgICAgICAgIG9yIHBhcnNlZC5wb3J0IG5vdCBpbiAoTm9uZSwgNDQzKSBvciBub3QgYWxsb3dlZF9ob3N0KHBhcnNlZC5ob3N0bmFtZSkpOlxuICAgICAgICByZXR1cm4gTm9uZVxuICAgIHJldHVybiBwYXJzZWRcblxuXG5kZWYgcmVhZF9oZWFkZXJzKHNvY2spOlxuICAgIGRhdGEgPSBiJydcbiAgICB3aGlsZSBiJ1xcclxcblxcclxcbicgbm90IGluIGRhdGEgYW5kIGxlbihkYXRhKSA8IEhFQURFUl9MSU1JVDpcbiAgICAgICAgY2h1bmsgPSBzb2NrLnJlY3YoSEVBREVSX0xJTUlUIC0gbGVuKGRhdGEpKVxuICAgICAgICBpZiBub3QgY2h1bms6XG4gICAgICAgICAgICByZXR1cm4gTm9uZSwgYicnXG4gICAgICAgIGRhdGEgKz0gY2h1bmtcbiAgICBpZiBiJ1xcclxcblxcclxcbicgbm90IGluIGRhdGE6XG4gICAgICAgIHJldHVybiBOb25lLCBiJydcbiAgICBoZWFkZXIsIHJlc3QgPSBkYXRhLnNwbGl0KGInXFxyXFxuXFxyXFxuJywgMSlcbiAgICByZXR1cm4gaGVhZGVyLCByZXN0XG5cblxuZGVmIHBhcnNlX3JlcXVlc3QocmF3KTpcbiAgICB0cnk6XG4gICAgICAgIGxpbmVzID0gcmF3LnNwbGl0KGInXFxyXFxuJylcbiAgICAgICAgbWV0aG9kLCBfdGFyZ2V0LCBfdmVyc2lvbiA9IGxpbmVzWzBdLmRlY29kZSgnYXNjaWknKS5zcGxpdCgpXG4gICAgZXhjZXB0IChWYWx1ZUVycm9yLCBVbmljb2RlRGVjb2RlRXJyb3IpOlxuICAgICAgICByZXR1cm4gTm9uZSwge30sIE5vbmVcbiAgICBoZWFkZXJzID0ge31cbiAgICBmb3IgbGluZSBpbiBsaW5lc1sxOl06XG4gICAgICAgIGlmIG5vdCBsaW5lOlxuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgdHJ5OlxuICAgICAgICAgICAgbmFtZSwgdmFsdWUgPSBsaW5lLmRlY29kZSgnbGF0aW4xJykuc3BsaXQoJzonLCAxKVxuICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjpcbiAgICAgICAgICAgIHJldHVybiBOb25lLCB7fSwgTm9uZVxuICAgICAgICBoZWFkZXJzW25hbWUuc3RyaXAoKS5sb3dlcigpXSA9IHZhbHVlLnN0cmlwKClcbiAgICByZXR1cm4gbWV0aG9kLnVwcGVyKCksIGhlYWRlcnMsIGFsbG93ZWRfdXJsKGhlYWRlcnMuZ2V0KCd4LWRnZS10YXJnZXQnKSlcblxuXG5kZWYgcmVwbHkoc29jaywgc3RhdHVzLCByZWFzb24pOlxuICAgIHNvY2suc2VuZGFsbCgoJ0hUVFAvMS4xICVzICVzXFxyXFxuQ29ubmVjdGlvbjogY2xvc2VcXHJcXG5cXHJcXG4nICUgKHN0YXR1cywgcmVhc29uKSkuZW5jb2RlKCkpXG5cblxuZGVmIGNvcHlfY2xpZW50X2JvZHkoY2xpZW50LCByZXN0LCBsZW5ndGgsIHdyaXRlKTpcbiAgICBzZW50ID0gMFxuICAgIGlmIHJlc3Q6XG4gICAgICAgIHRha2UgPSByZXN0WzpsZW5ndGhdXG4gICAgICAgIHdyaXRlKHRha2UpXG4gICAgICAgIHNlbnQgKz0gbGVuKHRha2UpXG4gICAgd2hpbGUgc2VudCA8IGxlbmd0aDpcbiAgICAgICAgY2h1bmsgPSBjbGllbnQucmVjdihtaW4oQlVGRkVSLCBsZW5ndGggLSBzZW50KSlcbiAgICAgICAgaWYgbm90IGNodW5rOlxuICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignc2hvcnQgYm9keScpXG4gICAgICAgIHdyaXRlKGNodW5rKVxuICAgICAgICBzZW50ICs9IGxlbihjaHVuaylcblxuXG5kZWYgcGFyc2VfZHVtcF9oZWFkZXIocGF0aCk6XG4gICAgc3RhdHVzLCByZWFzb24sIGNvbnRlbnRfdHlwZSwgbGVuZ3RoID0gNTAyLCAnQmFkIEdhdGV3YXknLCBOb25lLCBOb25lXG4gICAgdHJ5OlxuICAgICAgICB3aXRoIG9wZW4ocGF0aCwgJ3InLCBlcnJvcnM9J3JlcGxhY2UnKSBhcyBoYW5kbGU6XG4gICAgICAgICAgICB0ZXh0ID0gaGFuZGxlLnJlYWQoKVxuICAgIGV4Y2VwdCBPU0Vycm9yOlxuICAgICAgICByZXR1cm4gc3RhdHVzLCByZWFzb24sIGNvbnRlbnRfdHlwZSwgbGVuZ3RoXG4gICAgZm9yIGxpbmUgaW4gdGV4dC5zcGxpdGxpbmVzKCk6XG4gICAgICAgIGlmIGxpbmUudXBwZXIoKS5zdGFydHN3aXRoKCdIVFRQLycpOlxuICAgICAgICAgICAgcGFydHMgPSBsaW5lLnNwbGl0KE5vbmUsIDIpXG4gICAgICAgICAgICBpZiBsZW4ocGFydHMpID49IDIgYW5kIHBhcnRzWzFdLmlzZGlnaXQoKTpcbiAgICAgICAgICAgICAgICBzdGF0dXMgPSBpbnQocGFydHNbMV0pXG4gICAgICAgICAgICAgICAgcmVhc29uID0gcGFydHNbMl0gaWYgbGVuKHBhcnRzKSA+IDIgZWxzZSAnT0snXG4gICAgICAgIGVsaWYgbGluZS5sb3dlcigpLnN0YXJ0c3dpdGgoJ2NvbnRlbnQtdHlwZTonKTpcbiAgICAgICAgICAgIGNvbnRlbnRfdHlwZSA9IGxpbmUuc3BsaXQoJzonLCAxKVsxXS5zdHJpcCgpXG4gICAgICAgIGVsaWYgbGluZS5sb3dlcigpLnN0YXJ0c3dpdGgoJ2NvbnRlbnQtbGVuZ3RoOicpOlxuICAgICAgICAgICAgbGVuZ3RoID0gbGluZS5zcGxpdCgnOicsIDEpWzFdLnN0cmlwKClcbiAgICByZXR1cm4gc3RhdHVzLCByZWFzb24sIGNvbnRlbnRfdHlwZSwgbGVuZ3RoXG5cblxuZGVmIHNlbmRfZmlsZShjbGllbnQsIHN0YXR1cywgcmVhc29uLCBjb250ZW50X3R5cGUsIGxlbmd0aCwgcGF0aCwgc2tpcF9ib2R5PUZhbHNlKTpcbiAgICBzaXplID0gb3MucGF0aC5nZXRzaXplKHBhdGgpIGlmIG9zLnBhdGguZXhpc3RzKHBhdGgpIGVsc2UgMFxuICAgIGlmIG5vdCBsZW5ndGggb3Igbm90IHN0cihsZW5ndGgpLmlzZGlnaXQoKTpcbiAgICAgICAgbGVuZ3RoID0gc3RyKHNpemUpXG4gICAgaGVhZGVycyA9IFsnSFRUUC8xLjEgJXMgJXMnICUgKHN0YXR1cywgcmVhc29uKV1cbiAgICBpZiBjb250ZW50X3R5cGU6XG4gICAgICAgIGhlYWRlcnMuYXBwZW5kKCdDb250ZW50LVR5cGU6ICcgKyBjb250ZW50X3R5cGUpXG4gICAgaGVhZGVycy5hcHBlbmQoJ0NvbnRlbnQtTGVuZ3RoOiAnICsgbGVuZ3RoKVxuICAgIGhlYWRlcnMuYXBwZW5kKCdDb25uZWN0aW9uOiBjbG9zZScpXG4gICAgY2xpZW50LnNlbmRhbGwoKCdcXHJcXG4nLmpvaW4oaGVhZGVycykgKyAnXFxyXFxuXFxyXFxuJykuZW5jb2RlKCkpXG4gICAgaWYgc2tpcF9ib2R5IG9yIHN0YXR1cyA9PSAyMDQ6XG4gICAgICAgIHJldHVyblxuICAgIHdpdGggb3BlbihwYXRoLCAncmInKSBhcyBwYXlsb2FkOlxuICAgICAgICB3aGlsZSBjaHVuayA6PSBwYXlsb2FkLnJlYWQoQlVGRkVSKTpcbiAgICAgICAgICAgIGNsaWVudC5zZW5kYWxsKGNodW5rKVxuXG5cbmRlZiBvcmlnaW5fc3NsKCk6XG4gICAgY3R4ID0gc3NsLmNyZWF0ZV9kZWZhdWx0X2NvbnRleHQoKVxuICAgIGN0eC5taW5pbXVtX3ZlcnNpb24gPSBzc2wuVExTVmVyc2lvbi5UTFN2MV8yXG4gICAgY3R4Lm1heGltdW1fdmVyc2lvbiA9IHNzbC5UTFNWZXJzaW9uLlRMU3YxXzJcbiAgICBjdHgubWF4X3NlbmRfZnJhZ21lbnQgPSBUTFNfU0VORF9GUkFHTUVOVFxuICAgIHJldHVybiBjdHhcblxuXG5jbGFzcyBPcmlnaW5IVFRQU0Nvbm5lY3Rpb24oaHR0cC5jbGllbnQuSFRUUFNDb25uZWN0aW9uKTpcbiAgICBkZWYgY29ubmVjdChzZWxmKTpcbiAgICAgICAgc3VwZXIoKS5jb25uZWN0KClcbiAgICAgICAgc2VsZi5zb2NrLnNldHRpbWVvdXQoNjAwKVxuICAgICAgICBzZWxmLnNvY2suc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19UQ1AsIHNvY2tldC5UQ1BfTk9ERUxBWSwgMSlcblxuXG5kZWYgbG9nX3N0b3JhZ2UobWVzc2FnZSk6XG4gICAgc3lzLnN0ZGVyci53cml0ZShtZXNzYWdlICsgJ1xcbicpXG4gICAgc3lzLnN0ZGVyci5mbHVzaCgpXG5cblxuZGVmIG9yaWdpbl9wdXQodXJpLCByZXF1ZXN0X2hlYWRlcnMsIHVwbG9hZF9wYXRoLCBvdXRwdXRfcGF0aCk6XG4gICAgcGF0aCA9IHVyaS5wYXRoIG9yICcvJ1xuICAgIGlmIHVyaS5xdWVyeTpcbiAgICAgICAgcGF0aCA9IHBhdGggKyAnPycgKyB1cmkucXVlcnlcbiAgICBzaXplID0gb3MucGF0aC5nZXRzaXplKHVwbG9hZF9wYXRoKVxuICAgIGxhc3RfZXJyb3IgPSBOb25lXG4gICAgZm9yIGF0dGVtcHQgaW4gcmFuZ2UoMyk6XG4gICAgICAgIGNvbm4gPSBPcmlnaW5IVFRQU0Nvbm5lY3Rpb24odXJpLmhvc3RuYW1lLCA0NDMsIGNvbnRleHQ9b3JpZ2luX3NzbCgpLCB0aW1lb3V0PTYwMClcbiAgICAgICAgc2VudCA9IDBcbiAgICAgICAgc3RhcnRlZCA9IHRpbWUubW9ub3RvbmljKClcbiAgICAgICAgdHJ5OlxuICAgICAgICAgICAgY29ubi5jb25uZWN0KClcbiAgICAgICAgICAgIGNvbm4ucHV0cmVxdWVzdCgnUFVUJywgcGF0aCwgc2tpcF9ob3N0PUZhbHNlLCBza2lwX2FjY2VwdF9lbmNvZGluZz1UcnVlKVxuICAgICAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIHJlcXVlc3RfaGVhZGVycy5pdGVtcygpOlxuICAgICAgICAgICAgICAgIGlmIG5hbWUubG93ZXIoKSBub3QgaW4gRk9SV0FSRF9TS0lQOlxuICAgICAgICAgICAgICAgICAgICBjb25uLnB1dGhlYWRlcihuYW1lLCB2YWx1ZSlcbiAgICAgICAgICAgIGNvbm4ucHV0aGVhZGVyKCdDb250ZW50LUxlbmd0aCcsIHN0cihzaXplKSlcbiAgICAgICAgICAgIGNvbm4uZW5kaGVhZGVycygpXG4gICAgICAgICAgICB3aXRoIG9wZW4odXBsb2FkX3BhdGgsICdyYicpIGFzIHBheWxvYWQ6XG4gICAgICAgICAgICAgICAgd2hpbGUgY2h1bmsgOj0gcGF5bG9hZC5yZWFkKFRMU19TRU5EX0ZSQUdNRU5UKTpcbiAgICAgICAgICAgICAgICAgICAgY29ubi5zZW5kKGNodW5rKVxuICAgICAgICAgICAgICAgICAgICBzZW50ICs9IGxlbihjaHVuaylcbiAgICAgICAgICAgICAgICAgICAgaWYgVExTX1NFTkRfUEFDRTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoVExTX1NFTkRfUEFDRSlcbiAgICAgICAgICAgIHJlc3BvbnNlID0gY29ubi5nZXRyZXNwb25zZSgpXG4gICAgICAgICAgICBib2R5ID0gcmVzcG9uc2UucmVhZCgpXG4gICAgICAgICAgICB3aXRoIG9wZW4ob3V0cHV0X3BhdGgsICd3YicpIGFzIG91dHB1dDpcbiAgICAgICAgICAgICAgICBvdXRwdXQud3JpdGUoYm9keSlcbiAgICAgICAgICAgIGxvZ19zdG9yYWdlKCdzdG9yYWdlIFBVVCAlcyBhdHRlbXB0ICVzIG9rICVzIGJ5dGVzIGluICUuMWZzIHN0YXR1cyAlcycgJSAoXG4gICAgICAgICAgICAgICAgdXJpLmhvc3RuYW1lLCBhdHRlbXB0ICsgMSwgc2VudCwgdGltZS5tb25vdG9uaWMoKSAtIHN0YXJ0ZWQsIHJlc3BvbnNlLnN0YXR1cykpXG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2Uuc3RhdHVzLCByZXNwb25zZS5yZWFzb24gb3IgJ09LJywgcmVzcG9uc2UuZ2V0aGVhZGVyKCdDb250ZW50LVR5cGUnKSwgc3RyKGxlbihib2R5KSlcbiAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBzc2wuU1NMRXJyb3IsIGh0dHAuY2xpZW50LkhUVFBFeGNlcHRpb24pIGFzIGVycm9yOlxuICAgICAgICAgICAgbGFzdF9lcnJvciA9IGVycm9yXG4gICAgICAgICAgICBsb2dfc3RvcmFnZSgnc3RvcmFnZSBQVVQgJXMgYXR0ZW1wdCAlcyBmYWlsZWQgYXQgJXMvJXMgYnl0ZXMgaW4gJS4xZnM6ICVzJyAlIChcbiAgICAgICAgICAgICAgICB1cmkuaG9zdG5hbWUsIGF0dGVtcHQgKyAxLCBzZW50LCBzaXplLCB0aW1lLm1vbm90b25pYygpIC0gc3RhcnRlZCwgZXJyb3IpKVxuICAgICAgICBmaW5hbGx5OlxuICAgICAgICAgICAgY29ubi5jbG9zZSgpXG4gICAgcmFpc2UgbGFzdF9lcnJvclxuXG5cbmRlZiBjdXJsX2FyZ3MobWV0aG9kLCB1cmksIGhlYWRlcl9wYXRoLCBvdXRwdXRfcGF0aCwgcmVxdWVzdF9oZWFkZXJzKTpcbiAgICB1cmwgPSB1cmxsaWIucGFyc2UudXJsdW5zcGxpdCgodXJpLnNjaGVtZSwgdXJpLm5ldGxvYywgdXJpLnBhdGgsIHVyaS5xdWVyeSwgJycpKVxuICAgIGFyZ3MgPSBbQ1VSTCwgJy1zUycsICctZycsICctNCcsICctLWh0dHAxLjEnLCAnLS10bHN2MS4yJywgJy0tbWF4LXRpbWUnLCAnNjAwJyxcbiAgICAgICAgICAgICctWCcsIG1ldGhvZCwgJy1EJywgaGVhZGVyX3BhdGgsICctbycsIG91dHB1dF9wYXRoXVxuICAgIGZvciBuYW1lLCB2YWx1ZSBpbiByZXF1ZXN0X2hlYWRlcnMuaXRlbXMoKTpcbiAgICAgICAgaWYgbmFtZS5sb3dlcigpIG5vdCBpbiBGT1JXQVJEX1NLSVA6XG4gICAgICAgICAgICBhcmdzLmV4dGVuZChbJy1IJywgJyVzOiAlcycgJSAobmFtZSwgdmFsdWUpXSlcbiAgICBhcmdzLmFwcGVuZCh1cmwpXG4gICAgcmV0dXJuIGFyZ3NcblxuXG5kZWYgZmV0Y2goY2xpZW50LCBtZXRob2QsIHVyaSwgcmVxdWVzdF9oZWFkZXJzLCByZXN0KTpcbiAgICB0cnk6XG4gICAgICAgIHdpdGggdGVtcGZpbGUuVGVtcG9yYXJ5RGlyZWN0b3J5KHByZWZpeD0nZGdlLXIyLScpIGFzIGZvbGRlcjpcbiAgICAgICAgICAgIGhlYWRlcl9wYXRoID0gb3MucGF0aC5qb2luKGZvbGRlciwgJ2hlYWRlcnMnKVxuICAgICAgICAgICAgb3V0cHV0X3BhdGggPSBvcy5wYXRoLmpvaW4oZm9sZGVyLCAnYm9keScpXG4gICAgICAgICAgICB1cGxvYWRfcGF0aCA9IE5vbmVcbiAgICAgICAgICAgIGlmIG1ldGhvZCA9PSAnUFVUJzpcbiAgICAgICAgICAgICAgICB0cnk6XG4gICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IGludChyZXF1ZXN0X2hlYWRlcnMuZ2V0KCdjb250ZW50LWxlbmd0aCcsICcnKSlcbiAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjpcbiAgICAgICAgICAgICAgICAgICAgcmVwbHkoY2xpZW50LCA0MTEsICdMZW5ndGggUmVxdWlyZWQnKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICBpZiBsZW5ndGggPCAwIG9yIGxlbmd0aCA+IE1BWF9QVVQ6XG4gICAgICAgICAgICAgICAgICAgIHJlcGx5KGNsaWVudCwgNDEzLCAnUGF5bG9hZCBUb28gTGFyZ2UnKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICB1cGxvYWRfcGF0aCA9IG9zLnBhdGguam9pbihmb2xkZXIsICd1cGxvYWQnKVxuICAgICAgICAgICAgICAgIGNsaWVudC5zZXR0aW1lb3V0KE5vbmUpXG4gICAgICAgICAgICAgICAgd2l0aCBvcGVuKHVwbG9hZF9wYXRoLCAnd2InKSBhcyBwYXlsb2FkOlxuICAgICAgICAgICAgICAgICAgICBjb3B5X2NsaWVudF9ib2R5KGNsaWVudCwgcmVzdCwgbGVuZ3RoLCBwYXlsb2FkLndyaXRlKVxuICAgICAgICAgICAgZWxzZTpcbiAgICAgICAgICAgICAgICBjbGllbnQuc2V0dGltZW91dChOb25lKVxuICAgICAgICAgICAgaWYgbWV0aG9kID09ICdQVVQnOlxuICAgICAgICAgICAgICAgIHRyeTpcbiAgICAgICAgICAgICAgICAgICAgd2l0aCBPUklHSU46XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMsIHJlYXNvbiwgY29udGVudF90eXBlLCBsZW5ndGggPSBvcmlnaW5fcHV0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaSwgcmVxdWVzdF9oZWFkZXJzLCB1cGxvYWRfcGF0aCwgb3V0cHV0X3BhdGgpXG4gICAgICAgICAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBzc2wuU1NMRXJyb3IsIGh0dHAuY2xpZW50LkhUVFBFeGNlcHRpb24pIGFzIGVycm9yOlxuICAgICAgICAgICAgICAgICAgICBsb2dfc3RvcmFnZSgnc3RvcmFnZSBQVVQgJXMgZmFpbGVkOiAlcycgJSAodXJpLmhvc3RuYW1lLCBlcnJvcikpXG4gICAgICAgICAgICAgICAgICAgIHJlcGx5KGNsaWVudCwgNTAyLCAnQmFkIEdhdGV3YXknKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIGVsc2U6XG4gICAgICAgICAgICAgICAgYXJncyA9IGN1cmxfYXJncyhtZXRob2QsIHVyaSwgaGVhZGVyX3BhdGgsIG91dHB1dF9wYXRoLCByZXF1ZXN0X2hlYWRlcnMpXG4gICAgICAgICAgICAgICAgd2l0aCBPUklHSU46XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHN1YnByb2Nlc3MucnVuKGFyZ3MsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpXG4gICAgICAgICAgICAgICAgaWYgcmVzdWx0LnJldHVybmNvZGU6XG4gICAgICAgICAgICAgICAgICAgIGRldGFpbCA9IChyZXN1bHQuc3RkZXJyIG9yIGInJykuZGVjb2RlKGVycm9ycz0ncmVwbGFjZScpLnN0cmlwKClcbiAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnc3RvcmFnZSAlcyAlcyBjdXJsICVzICVzXFxuJyAlIChcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCwgdXJpLmhvc3RuYW1lLCByZXN1bHQucmV0dXJuY29kZSwgZGV0YWlsKSlcbiAgICAgICAgICAgICAgICAgICAgcmVwbHkoY2xpZW50LCA1MDIsICdCYWQgR2F0ZXdheScpXG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgIHN0YXR1cywgcmVhc29uLCBjb250ZW50X3R5cGUsIGxlbmd0aCA9IHBhcnNlX2R1bXBfaGVhZGVyKGhlYWRlcl9wYXRoKVxuICAgICAgICAgICAgc2VuZF9maWxlKGNsaWVudCwgc3RhdHVzLCByZWFzb24sIGNvbnRlbnRfdHlwZSwgbGVuZ3RoLCBvdXRwdXRfcGF0aCwgc2tpcF9ib2R5PShtZXRob2QgPT0gJ0hFQUQnKSlcbiAgICBleGNlcHQgT1NFcnJvciBhcyBlcnJvcjpcbiAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnc3RvcmFnZSAlcyAlcyBmYWlsZWQ6ICVzXFxuJyAlIChtZXRob2QsIHVyaS5ob3N0bmFtZSwgZXJyb3IpKVxuICAgICAgICB0cnk6XG4gICAgICAgICAgICByZXBseShjbGllbnQsIDUwMiwgJ0JhZCBHYXRld2F5JylcbiAgICAgICAgZXhjZXB0IE9TRXJyb3I6XG4gICAgICAgICAgICBwYXNzXG5cblxuZGVmIGNwdV90aWNrcygpOlxuICAgIFwiXCJcIkN1bXVsYXRpdmUgdXNlciwgc3lzdGVtLCBpZGxlIGFuZCBuaWNlIHRpY2tzIG92ZXIgYWxsIENQVXMsIG9yIE5vbmUgb2ZmIG1hY09TLlxuXG4gICAgUmVhZCBpbi1wcm9jZXNzOiBgdG9wYCBuZWVkcyBpdHMgb3duIENQVSB0aW1lIGFuZCB0aW1lZCBvdXQgb24gYSBzYXR1cmF0ZWQgTWFjLFxuICAgIHdoaWNoIGxlZnQgdGhlIGhvc3QgdW5tZWFzdXJlZCBleGFjdGx5IHdoZW4gaXQgd2FzIGJ1c2llc3QuXG4gICAgXCJcIlwiXG4gICAgaG9zdCA9IG1hY2hfaG9zdCgpXG4gICAgaWYgaG9zdCBpcyBOb25lOlxuICAgICAgICByZXR1cm4gTm9uZVxuICAgIHN5c3RlbSwgcG9ydCA9IGhvc3RcbiAgICB0aWNrcyA9IChjdHlwZXMuY191aW50MzIgKiA0KSgpXG4gICAgY291bnQgPSBjdHlwZXMuY191aW50MzIobGVuKHRpY2tzKSlcbiAgICBpZiBzeXN0ZW0uaG9zdF9zdGF0aXN0aWNzKHBvcnQsIEhPU1RfQ1BVX0xPQURfSU5GTywgdGlja3MsIGN0eXBlcy5ieXJlZihjb3VudCkpICE9IDA6XG4gICAgICAgIHJldHVybiBOb25lXG4gICAgcmV0dXJuIGxpc3QodGlja3MpXG5cblxuQGZ1bmN0b29scy5jYWNoZVxuZGVmIG1hY2hfaG9zdCgpOlxuICAgIHRyeTpcbiAgICAgICAgc3lzdGVtID0gY3R5cGVzLkNETEwoJy91c3IvbGliL2xpYlN5c3RlbS5keWxpYicpXG4gICAgZXhjZXB0IE9TRXJyb3I6XG4gICAgICAgIHJldHVybiBOb25lXG4gICAgc3lzdGVtLm1hY2hfaG9zdF9zZWxmLnJlc3R5cGUgPSBjdHlwZXMuY191aW50MzJcbiAgICByZXR1cm4gc3lzdGVtLCBzeXN0ZW0ubWFjaF9ob3N0X3NlbGYoKVxuXG5cbmRlZiBjcHVfcGVyY2VudCgpOlxuICAgIGJlZm9yZSA9IGNwdV90aWNrcygpXG4gICAgaWYgYmVmb3JlIGlzIE5vbmU6XG4gICAgICAgIHJldHVybiBOb25lXG4gICAgdGltZS5zbGVlcChDUFVfU0FNUExFX1NFQ09ORFMpXG4gICAgYWZ0ZXIgPSBjcHVfdGlja3MoKVxuICAgIGlmIGFmdGVyIGlzIE5vbmU6XG4gICAgICAgIHJldHVybiBOb25lXG4gICAgZWxhcHNlZCA9IFsobmV3IC0gb2xkKSAlIDIgKiogMzIgZm9yIG9sZCwgbmV3IGluIHppcChiZWZvcmUsIGFmdGVyKV1cbiAgICB0b3RhbCA9IHN1bShlbGFwc2VkKVxuICAgIHJldHVybiAxMDAgKiAodG90YWwgLSBlbGFwc2VkWzJdKSAvIHRvdGFsIGlmIHRvdGFsIGVsc2UgTm9uZVxuXG5cbmRlZiBhY3Rpdml0eV9wYXlsb2FkKCk6XG4gICAgcmF3ID0gY29tbWFuZF9vdXRwdXQoWycvdXNyL3NiaW4vaW9yZWcnLCAnLWMnLCAnSU9ISURTeXN0ZW0nXSlcbiAgICBtYXRjaCA9IHJlLnNlYXJjaChyJ1wiSElESWRsZVRpbWVcIlxccyo9XFxzKihcXGQrKScsIHJhdyBvciAnJylcbiAgICBtZW1vcnlfcmF3ID0gY29tbWFuZF9vdXRwdXQoWycvdXNyL2Jpbi92bV9zdGF0J10pXG4gICAgcGFnZSA9IHJlLnNlYXJjaChyJ3BhZ2Ugc2l6ZSBvZiAoXFxkKykgYnl0ZXMnLCBtZW1vcnlfcmF3IG9yICcnKVxuICAgIGZyZWUgPSBzdW0oaW50KHZhbHVlKSBmb3IgdmFsdWUgaW4gcmUuZmluZGFsbChyJ1BhZ2VzICg/OmZyZWV8aW5hY3RpdmV8c3BlY3VsYXRpdmV8cHVyZ2VhYmxlKTpcXHMrKFxcZCspJywgbWVtb3J5X3JhdyBvciAnJykpXG4gICAgY3B1ID0gY3B1X3BlcmNlbnQoKVxuICAgIHBvd2VyID0gaG9zdF9wb3dlcigpXG4gICAgcmV0dXJuIGRpY3QocmVwb3J0ZWRfYXQ9dGltZS5zdHJmdGltZSgnJVktJW0tJWRUJUg6JU06JVNaJywgdGltZS5nbXRpbWUoKSksXG4gICAgICAgICAgICAgICAgaWRsZV9zZWNvbmRzPWludChtYXRjaFsxXSkgLyAxMDAwMDAwMDAwIGlmIG1hdGNoIGVsc2UgTm9uZSxcbiAgICAgICAgICAgICAgICBjcHVfcGVyY2VudD1jcHUsXG4gICAgICAgICAgICAgICAgbWVtb3J5X2F2YWlsYWJsZV9ieXRlcz1mcmVlICogaW50KHBhZ2VbMV0pIGlmIHBhZ2UgZWxzZSBOb25lLFxuICAgICAgICAgICAgICAgIGJhdHRlcnlfcHJlc2VudD1wb3dlci5nZXQoJ2JhdHRlcnlfcHJlc2VudCcpLCBhY19jb25uZWN0ZWQ9cG93ZXIuZ2V0KCdhY19jb25uZWN0ZWQnKSlcblxuXG5kZWYgaGFuZGxlKGNsaWVudCwgX2FkZHJlc3MpOlxuICAgIHRyeTpcbiAgICAgICAgY2xpZW50LnNldHRpbWVvdXQoMzApXG4gICAgICAgIHJhdywgcmVzdCA9IHJlYWRfaGVhZGVycyhjbGllbnQpXG4gICAgICAgIGlmIHJhdyBpcyBOb25lOlxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIG1ldGhvZCwgaGVhZGVycywgdXJpID0gcGFyc2VfcmVxdWVzdChyYXcpXG4gICAgICAgIGlmIG1ldGhvZCBpcyBOb25lOlxuICAgICAgICAgICAgcmVwbHkoY2xpZW50LCA0MDAsICdCYWQgUmVxdWVzdCcpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgaWYgbWV0aG9kID09ICdHRVQnIGFuZCByZXF1ZXN0X3BhdGgocmF3KSA9PSAnL2FjdGl2aXR5JzpcbiAgICAgICAgICAgIHRva2VuX3BhdGggPSBQYXRoLmhvbWUoKSAvICdMaWJyYXJ5JyAvICdBcHBsaWNhdGlvbiBTdXBwb3J0JyAvICdkZ2Utd29ya2VyJyAvICdoZWxwZXItdG9rZW4nXG4gICAgICAgICAgICBleHBlY3RlZCA9IHRva2VuX3BhdGgucmVhZF90ZXh0KCkuc3RyaXAoKSBpZiB0b2tlbl9wYXRoLmV4aXN0cygpIGVsc2UgJydcbiAgICAgICAgICAgIHN1cHBsaWVkID0gaGVhZGVycy5nZXQoJ3gtZGdlLWhlbHBlci10b2tlbicsICcnKVxuICAgICAgICAgICAgaWYgbm90IGV4cGVjdGVkIG9yIG5vdCBobWFjLmNvbXBhcmVfZGlnZXN0KHN1cHBsaWVkLCBleHBlY3RlZCk6XG4gICAgICAgICAgICAgICAgcmVwbHkoY2xpZW50LCA0MDMsICdGb3JiaWRkZW4nKVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgcmVwbHlfanNvbihjbGllbnQsIGFjdGl2aXR5X3BheWxvYWQoKSlcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICBpZiBtZXRob2QgPT0gJ0dFVCcgYW5kIHJlcXVlc3RfcGF0aChyYXcpID09ICcvdXBsaW5rJzpcbiAgICAgICAgICAgIFVQTElOS19SRUFEWS53YWl0KDEyKVxuICAgICAgICAgICAgcmVwbHlfanNvbihjbGllbnQsIHVwbGlua19wYXlsb2FkKCkpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgaWYgbWV0aG9kIG5vdCBpbiAoJ0dFVCcsICdQVVQnLCAnSEVBRCcpOlxuICAgICAgICAgICAgcmVwbHkoY2xpZW50LCA0MDUsICdNZXRob2QgTm90IEFsbG93ZWQnKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIGlmIHVyaSBpcyBOb25lOlxuICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgncmVqZWN0ZWQgc3RvcmFnZSAlc1xcbicgJSBtZXRob2QpXG4gICAgICAgICAgICByZXBseShjbGllbnQsIDQwMywgJ0ZvcmJpZGRlbicpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgZmV0Y2goY2xpZW50LCBtZXRob2QsIHVyaSwgaGVhZGVycywgcmVzdClcbiAgICBleGNlcHQgT1NFcnJvciBhcyBlcnJvcjpcbiAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnc3RvcmFnZSBjbGllbnQgZmFpbGVkOiAlc1xcbicgJSBlcnJvcilcbiAgICAgICAgcmV0dXJuXG4gICAgZmluYWxseTpcbiAgICAgICAgY2xpZW50LmNsb3NlKClcblxuXG5kZWYgbGlzdGVuKGhvc3QsIHBvcnQpOlxuICAgIFwiXCJcIldhaXRzIGZvciB0aGUgcG9ydCByYXRoZXIgdGhhbiBleGl0aW5nLCBzbyBsYXVuY2hkIGRvZXMgbm90IHJlc3RhcnQgYSBjb3B5IGV2ZXJ5XG4gICAgZmV3IHNlY29uZHMgd2hpbGUgYW4gb2xkZXIgaGVscGVyIHN0aWxsIGhvbGRzIGl0LlwiXCJcIlxuICAgIHdhaXRpbmcgPSBGYWxzZVxuICAgIHdoaWxlIFRydWU6XG4gICAgICAgIHRyeTpcbiAgICAgICAgICAgIHJldHVybiBzb2NrZXQuY3JlYXRlX3NlcnZlcigoaG9zdCwgcG9ydCksIHJldXNlX3BvcnQ9RmFsc2UpXG4gICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycm9yOlxuICAgICAgICAgICAgaWYgZXJyb3IuZXJybm8gIT0gZXJybm8uRUFERFJJTlVTRTpcbiAgICAgICAgICAgICAgICByYWlzZVxuICAgICAgICAgICAgaWYgbm90IHdhaXRpbmc6XG4gICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnUG9ydCAlZCBpcyBpbiB1c2U7IHdhaXRpbmcgZm9yIGl0IHRvIGZyZWUuXFxuJyAlIHBvcnQpXG4gICAgICAgICAgICAgICAgd2FpdGluZyA9IFRydWVcbiAgICAgICAgICAgIHRpbWUuc2xlZXAoTElTVEVOX1JFVFJZX1NFQ09ORFMpXG5cblxuZGVmIHNlcnZlKGhvc3Q9TElTVEVOX0hPU1QsIHBvcnQ9TElTVEVOX1BPUlQpOlxuICAgIHNlcnZlciA9IGxpc3Rlbihob3N0LCBwb3J0KVxuICAgIHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXVwbGlua19sb29wLCBkYWVtb249VHJ1ZSkuc3RhcnQoKVxuICAgIHdoaWxlIFRydWU6XG4gICAgICAgIGNsaWVudCwgYWRkcmVzcyA9IHNlcnZlci5hY2NlcHQoKVxuICAgICAgICB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1oYW5kbGUsIGFyZ3M9KGNsaWVudCwgYWRkcmVzcyksIGRhZW1vbj1UcnVlKS5zdGFydCgpXG5cblxuZGVmIG1haW4oKTpcbiAgICB0cnk6XG4gICAgICAgIHNlcnZlKClcbiAgICBleGNlcHQgT1NFcnJvciBhcyBlcnJvcjpcbiAgICAgICAgcmFpc2UgU3lzdGVtRXhpdCgnUjIgc3RvcmFnZSBwcm94eSBmYWlsZWQgdG8gbGlzdGVuOiAnICsgc3RyKGVycm9yKSkgZnJvbSBOb25lXG5cblxuaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzpcbiAgICB0cnk6XG4gICAgICAgIG1haW4oKVxuICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDpcbiAgICAgICAgc3lzLmV4aXQoMClcbiIsInNldHVwX2xvZ19yZXBvcnRlci5weSI6IlwiXCJcIkJlc3QtZWZmb3J0IHVwbG9hZCBvZiBzZWxlY3RlZCBzZXR1cCBkaWFnbm9zdGljcyB3aXRob3V0IGJsb2NraW5nIGluc3RhbGxhdGlvbi5cIlwiXCJcbmltcG9ydCBqc29uXG5pbXBvcnQgcXVldWVcbmltcG9ydCByZVxuaW1wb3J0IHRocmVhZGluZ1xuaW1wb3J0IHVybGxpYi5yZXF1ZXN0XG5cblxuUFJFRklYRVMgPSAoXG4gICAgJz09PicsICdXYXJuaW5nOicsICdFcnJvcjonLCAnZmF0YWw6JywgJ2N1cmw6JywgJ0ZBVEFbJywgJ0lORk9bJyxcbiAgICAnSW5zdGFsbGluZyBIb21lYnJldycsICdIb21lYnJldyBpbnN0YWxsZXIgZG93bmxvYWRlZCcsICdIb21lYnJldyBpcyBzdGlsbCBpbnN0YWxsaW5nJyxcbiAgICAnSW5zdGFsbGluZyBMaW1hJywgJ0NyZWF0aW5nIGEgTGludXggd29ya2VyJywgJ1N0YXJ0aW5nIHRoZSBMaW51eCB3b3JrZXInLFxuICAgICdTdGFydGluZyBhIE1hYyBuZXR3b3JrIGhlbHBlcicsICdJbnN0YWxsaW5nIHRoZSB3b3JrZXIgaW5zaWRlJyxcbiAgICAnQXBwcm92ZWQuIFN0YXJ0aW5nIHNldHVwJywgJ0NoZWNraW5nIHRoaXMgY29tcHV0ZXInLCAnUHJlcGFyaW5nIHRoaXMgY29tcHV0ZXInLFxuICAgICdDb25uZWN0aW5nIGFuZCBkb3dubG9hZGluZycsICdDb25uZWN0ZWQhJywgJ1NldHVwIG5lZWRzIGF0dGVudGlvbjonLFxuKVxuXG5cbmNsYXNzIE5vUmVkaXJlY3QodXJsbGliLnJlcXVlc3QuSFRUUFJlZGlyZWN0SGFuZGxlcik6XG4gICAgZGVmIHJlZGlyZWN0X3JlcXVlc3Qoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKTpcbiAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdUaGUgc2V0dXAgbG9nIHNlcnZlciByZWRpcmVjdGVkIHRoZSB1cGxvYWQuJylcblxuXG5IVFRQID0gdXJsbGliLnJlcXVlc3QuYnVpbGRfb3BlbmVyKE5vUmVkaXJlY3QoKSlcblxuXG5kZWYgc2FmZV9zZXR1cF9sb2dfbGluZShsaW5lKTpcbiAgICB0ZXh0ID0gcmUuc3ViKHInXFx4MWJcXFtbMC05O10qW0EtWmEtel0nLCAnJywgbGluZSkuc3RyaXAoKVxuICAgIGlmIG5vdCB0ZXh0LnN0YXJ0c3dpdGgoUFJFRklYRVMpOlxuICAgICAgICByZXR1cm4gTm9uZVxuICAgIGlmIHRleHQuc3RhcnRzd2l0aCgnSW5zdGFsbGluZyBIb21lYnJldycpOlxuICAgICAgICByZXR1cm4gJ0luc3RhbGxpbmcgSG9tZWJyZXcnXG4gICAgaWYgcmUuc2VhcmNoKHInKD9pKXBhc3N3b3JkfHRva2VufHNlY3JldHxjcmVkZW50aWFsfGF1dGhvcml6YXRpb258YmVhcmVyXFxzK3xhcGkuP2tleScsIHRleHQpOlxuICAgICAgICByZXR1cm4gTm9uZVxuICAgIHJldHVybiB0ZXh0WzozMDBdXG5cblxuY2xhc3MgU2V0dXBMb2dSZXBvcnRlcjpcbiAgICBkZWYgX19pbml0X18oc2VsZiwgb3JpZ2luLCB0b2tlbik6XG4gICAgICAgIHNlbGYub3JpZ2luID0gb3JpZ2luXG4gICAgICAgIHNlbGYudG9rZW4gPSB0b2tlblxuICAgICAgICBzZWxmLmxpbmVzID0gcXVldWUuUXVldWUobWF4c2l6ZT0yMDApXG4gICAgICAgIHNlbGYuY2xvc2VkID0gRmFsc2VcbiAgICAgICAgc2VsZi50aHJlYWQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZWxmLnVwbG9hZCwgZGFlbW9uPVRydWUpXG4gICAgICAgIHNlbGYudGhyZWFkLnN0YXJ0KClcblxuICAgIGRlZiByZWNvcmQoc2VsZiwgbGluZSk6XG4gICAgICAgIHNhZmUgPSBzYWZlX3NldHVwX2xvZ19saW5lKGxpbmUpXG4gICAgICAgIGlmIHNhZmU6XG4gICAgICAgICAgICB0cnk6XG4gICAgICAgICAgICAgICAgc2VsZi5saW5lcy5wdXRfbm93YWl0KHNhZmUpXG4gICAgICAgICAgICBleGNlcHQgcXVldWUuRnVsbDpcbiAgICAgICAgICAgICAgICBwYXNzXG5cbiAgICBkZWYgc2VuZChzZWxmLCBiYXRjaCk6XG4gICAgICAgIHJlcXVlc3QgPSB1cmxsaWIucmVxdWVzdC5SZXF1ZXN0KFxuICAgICAgICAgICAgc2VsZi5vcmlnaW4ucnN0cmlwKCcvJykgKyAnL2NvbXB1dGVfZmxlZXQvc2V0dXBfbG9ncycsXG4gICAgICAgICAgICBkYXRhPWpzb24uZHVtcHMoeydsaW5lcyc6IGJhdGNofSkuZW5jb2RlKCksXG4gICAgICAgICAgICBtZXRob2Q9J1BPU1QnLFxuICAgICAgICAgICAgaGVhZGVycz17J0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJywgJ0F1dGhvcml6YXRpb24nOiAnQmVhcmVyICcgKyBzZWxmLnRva2VufSxcbiAgICAgICAgKVxuICAgICAgICB0cnk6XG4gICAgICAgICAgICB3aXRoIEhUVFAub3BlbihyZXF1ZXN0LCB0aW1lb3V0PTMpOlxuICAgICAgICAgICAgICAgIHBhc3NcbiAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBWYWx1ZUVycm9yLCBSdW50aW1lRXJyb3IpOlxuICAgICAgICAgICAgcGFzc1xuXG4gICAgZGVmIHVwbG9hZChzZWxmKTpcbiAgICAgICAgYmF0Y2ggPSBbXVxuICAgICAgICB3aGlsZSBUcnVlOlxuICAgICAgICAgICAgdHJ5OlxuICAgICAgICAgICAgICAgIGxpbmUgPSBzZWxmLmxpbmVzLmdldCh0aW1lb3V0PTIpXG4gICAgICAgICAgICBleGNlcHQgcXVldWUuRW1wdHk6XG4gICAgICAgICAgICAgICAgbGluZSA9IE5vbmVcbiAgICAgICAgICAgIGlmIGxpbmUgaXMgTm9uZTpcbiAgICAgICAgICAgICAgICBpZiBiYXRjaDpcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zZW5kKGJhdGNoKVxuICAgICAgICAgICAgICAgICAgICBiYXRjaCA9IFtdXG4gICAgICAgICAgICAgICAgaWYgc2VsZi5jbG9zZWQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgZWxzZTpcbiAgICAgICAgICAgICAgICBiYXRjaC5hcHBlbmQobGluZSlcbiAgICAgICAgICAgICAgICBpZiBsZW4oYmF0Y2gpID49IDIwOlxuICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbmQoYmF0Y2gpXG4gICAgICAgICAgICAgICAgICAgIGJhdGNoID0gW11cblxuICAgIGRlZiBjbG9zZShzZWxmKTpcbiAgICAgICAgc2VsZi5jbG9zZWQgPSBUcnVlXG4gICAgICAgIHRyeTpcbiAgICAgICAgICAgIHNlbGYubGluZXMucHV0X25vd2FpdChOb25lKVxuICAgICAgICBleGNlcHQgcXVldWUuRnVsbDpcbiAgICAgICAgICAgIHBhc3NcbiAgICAgICAgc2VsZi50aHJlYWQuam9pbih0aW1lb3V0PTUpXG4iLCJwcmVwYXJlX21hY2hpbmUucHkiOiJcIlwiXCJQcmVwYXJlIHN1cHBvcnRlZCBMaW51eCBob3N0cyB3aXRob3V0IHJlc3RhcnRpbmcgYW4gZXhpc3RpbmcgRG9ja2VyIGRhZW1vbi5cIlwiXCJcbmltcG9ydCBvc1xuaW1wb3J0IHBsYXRmb3JtXG5pbXBvcnQgc2hsZXhcbmltcG9ydCBzaHV0aWxcbmltcG9ydCBzdWJwcm9jZXNzXG5cblxuZGVmIHJ1bigqYXJncyk6XG4gICAgcHJpbnQoJyQgJyArIHNobGV4LmpvaW4oc3RyKGl0ZW0pIGZvciBpdGVtIGluIGFyZ3MpLCBmbHVzaD1UcnVlKVxuICAgIHRyeTpcbiAgICAgICAgcmV0dXJuIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGFyZ3MsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkuZGVjb2RlKCkuc3RyaXAoKVxuICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlcnJvcjpcbiAgICAgICAgb3V0cHV0ID0gZXJyb3Iub3V0cHV0LmRlY29kZSgpLnN0cmlwKCkgaWYgZXJyb3Iub3V0cHV0IGVsc2UgJydcbiAgICAgICAgaWYgb3V0cHV0OlxuICAgICAgICAgICAgcHJpbnQob3V0cHV0LCBmbHVzaD1UcnVlKVxuICAgICAgICByYWlzZVxuXG5cbmRlZiBkZXBlbmRlbmNpZXMoKTpcbiAgICByZWxlYXNlID0gcGxhdGZvcm0uZnJlZWRlc2t0b3Bfb3NfcmVsZWFzZSgpXG4gICAgc3VwcG9ydGVkID0gKHJlbGVhc2UuZ2V0KCdJRCcpID09ICd1YnVudHUnIGFuZCByZWxlYXNlLmdldCgnVkVSU0lPTl9JRCcsICcnKS5zcGxpdCgnLicpWzBdIGluICgnMjQnLCAnMjUnLCAnMjYnKSkgb3IgKFxuICAgICAgICByZWxlYXNlLmdldCgnSUQnKSA9PSAnZGViaWFuJyBhbmQgcmVsZWFzZS5nZXQoJ1ZFUlNJT05fSUQnKSBpbiAoJzEyJywgJzEzJykpXG4gICAgcGFja2FnZXMgPSBbXVxuICAgIGZvciBiaW5hcnksIHBhY2thZ2UgaW4gWygnZG9ja2VyJywgJ2RvY2tlci5pbycpLCAoJ2lwJywgJ2lwcm91dGUyJyksICgnbHNwY2knLCAncGNpdXRpbHMnKSwgKCdsc2JsaycsICd1dGlsLWxpbnV4JyldOlxuICAgICAgICBpZiBub3Qgc2h1dGlsLndoaWNoKGJpbmFyeSk6XG4gICAgICAgICAgICBwYWNrYWdlcy5hcHBlbmQocGFja2FnZSlcbiAgICBpZiBwYWNrYWdlcyBhbmQgc3VwcG9ydGVkOlxuICAgICAgICBwcmludCgnSW5zdGFsbGluZyByZXF1aXJlZCB0b29scy4gVGhpcyBtYXkgdGFrZSBhIGZldyBtaW51dGVzLi4uJywgZmx1c2g9VHJ1ZSlcbiAgICAgICAgcnVuKCdhcHQtZ2V0JywgJ3VwZGF0ZScsICctcXEnKVxuICAgICAgICBydW4oJ2FwdC1nZXQnLCAnaW5zdGFsbCcsICcteScsICctcXEnLCAqcGFja2FnZXMpXG4gICAgaWYgbm90IHNodXRpbC53aGljaCgnZG9ja2VyJyk6XG4gICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignRG9ja2VyIG11c3QgYmUgaW5zdGFsbGVkIG9uIHRoaXMgTGludXggdmVyc2lvbi4gQXNrIHlvdXIgYWRtaW5pc3RyYXRvciwgdGhlbiBydW4gc2V0dXAgYWdhaW4uJylcbiAgICBydW4oJ3N5c3RlbWN0bCcsICdlbmFibGUnLCAnLS1ub3cnLCAnZG9ja2VyLnNlcnZpY2UnKVxuICAgIGlmIHJ1bignZG9ja2VyJywgJ2luZm8nLCAnLS1mb3JtYXQnLCAne3suQ2dyb3VwRHJpdmVyfX0ge3suQ2dyb3VwVmVyc2lvbn19JykgIT0gJ3N5c3RlbWQgMic6XG4gICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignRG9ja2VyIG5lZWRzIHN5c3RlbWQgY2dyb3VwcyB2Mi4gQXNrIHlvdXIgYWRtaW5pc3RyYXRvciB0byB1cGRhdGUgaXRzIGNvbmZpZ3VyYXRpb24uIEV4aXN0aW5nIGNvbnRhaW5lcnMgd2VyZSBub3QgcmVzdGFydGVkLicpXG5cblxuZGVmIHByZXBhcmUoKTpcbiAgICBpZiBvcy5nZXRldWlkKCkgIT0gMDpcbiAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdSdW4gdGhlIGRvd25sb2FkZWQgc2V0dXAgc2NyaXB0IHdpdGggeW91ciBhZG1pbmlzdHJhdG9yIHBhc3N3b3JkLicpXG4gICAgaWYgcnVuKCdzdGF0JywgJy1mJywgJy1jJywgJyVUJywgJy9ydW4nKSAhPSAndG1wZnMnOlxuICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1RoaXMgY29tcHV0ZXIgbmVlZHMgbWVtb3J5LWJhY2tlZCB0ZW1wb3Jhcnkgc3RvcmFnZSBhdCAvcnVuLiBBc2sgeW91ciBhZG1pbmlzdHJhdG9yIHRvIGNvbmZpZ3VyZSBpdCwgdGhlbiBydW4gc2V0dXAgYWdhaW4uJylcbiAgICBkZXBlbmRlbmNpZXMoKVxuIiwidW5pbnN0YWxsLnB5IjoiIyEvdXNyL2Jpbi9lbnYgcHl0aG9uM1xuXCJcIlwiUmVtb3ZlIG9ubHkgd29ya2VyLW93bmVkIHJlc291cmNlcy4gRGVmYXVsdHMgdG8gYSBkcnkgcnVuOyByZXZva2UgYmVmb3JlIGRlbGV0aW9uLlwiXCJcIlxuaW1wb3J0IGFyZ3BhcnNlXG5pbXBvcnQganNvblxuaW1wb3J0IG9zXG5mcm9tIHBhdGhsaWIgaW1wb3J0IFBhdGhcbmltcG9ydCBzaHV0aWxcbmltcG9ydCBzdWJwcm9jZXNzXG5pbXBvcnQgc3lzXG5pbXBvcnQgdXJsbGliLmVycm9yXG5cblJPT1QgPSBQYXRoKCcvb3B0L2RnZS13b3JrZXInKVxuUlVOTkVSX0NPTkZJRyA9IFBhdGgoJy9ldGMvZ2l0bGFiLXJ1bm5lci9jb25maWcudG9tbCcpXG5NQUNfU1VQUE9SVCA9IFBhdGguaG9tZSgpIC8gJ0xpYnJhcnknIC8gJ0FwcGxpY2F0aW9uIFN1cHBvcnQnIC8gJ2RnZS13b3JrZXInXG5cblxuZGVmIHJldm9rZShyb290PVJPT1QpOlxuICAgIGltcG9ydCB1cmxsaWIucGFyc2VcbiAgICBpbXBvcnQgdXJsbGliLnJlcXVlc3RcbiAgICBjbGFzcyBOb1JlZGlyZWN0KHVybGxpYi5yZXF1ZXN0LkhUVFBSZWRpcmVjdEhhbmRsZXIpOlxuICAgICAgICBkZWYgcmVkaXJlY3RfcmVxdWVzdChzZWxmLCAqYXJncywgKiprd2FyZ3MpOlxuICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdSZWZ1c2luZyBhIHJlZGlyZWN0ZWQgcmV2b2NhdGlvbicpXG4gICAgSFRUUCA9IHVybGxpYi5yZXF1ZXN0LmJ1aWxkX29wZW5lcihOb1JlZGlyZWN0KCkpXG4gICAgaW1wb3J0IHVybGxpYi5yZXF1ZXN0XG4gICAgaWRlbnRpdHkgPSBqc29uLmxvYWRzKChyb290IC8gJ2lkZW50aXR5Lmpzb24nKS5yZWFkX3RleHQoKSlcbiAgICBvcmlnaW4gPSB1cmxsaWIucGFyc2UudXJsc3BsaXQoaWRlbnRpdHlbJ29yaWdpbiddKVxuICAgIGlmIG9yaWdpbi5zY2hlbWUgIT0gJ2h0dHBzJyBvciBub3Qgb3JpZ2luLmhvc3RuYW1lIG9yIG9yaWdpbi51c2VybmFtZSBvciBvcmlnaW4ucGF0aCBub3QgaW4gKCcnLCAnLycpIG9yIG9yaWdpbi5xdWVyeSBvciBvcmlnaW4uZnJhZ21lbnQ6XG4gICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignSW52YWxpZCB3b3JrZXIgb3JpZ2luJylcbiAgICByZXF1ZXN0ID0gdXJsbGliLnJlcXVlc3QuUmVxdWVzdChpZGVudGl0eVsnb3JpZ2luJ10ucnN0cmlwKCcvJykgKyAnL2NvbXB1dGVfZmxlZXQvZGlzY29ubmVjdCcsXG4gICAgICAgIGRhdGE9Yid7fScsIGhlYWRlcnM9eydBdXRob3JpemF0aW9uJzogJ0JlYXJlciAnICsgaWRlbnRpdHlbJ3Rva2VuJ10sICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbid9LCBtZXRob2Q9J1BPU1QnKVxuICAgIHRyeTpcbiAgICAgICAgd2l0aCBIVFRQLm9wZW4ocmVxdWVzdCwgdGltZW91dD0yMCkgYXMgcmVzcG9uc2U6XG4gICAgICAgICAgICBpZiBub3QganNvbi5sb2FkcyhyZXNwb25zZS5yZWFkKDQwOTYpKS5nZXQoJ2Rpc2Nvbm5lY3RlZCcpOlxuICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignU2VydmVyIGRpZCBub3QgY29uZmlybSBkaXNjb25uZWN0aW9uJylcbiAgICBleGNlcHQgdXJsbGliLmVycm9yLkhUVFBFcnJvciBhcyBlcnJvcjpcbiAgICAgICAgaWYgZXJyb3IuY29kZSAhPSA0MDE6ICAjIEFuIGFscmVhZHktcmV2b2tlZCBpZGVudGl0eSBpcyBzYWZlIHRvIHJlbW92ZS5cbiAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignU2VydmVyIHJldm9jYXRpb24gZmFpbGVkJykgZnJvbSBOb25lXG5cblxuZGVmIHJlbW92ZV9tYW5hZ2VkX2NpKCk6XG4gICAgaW1wb3J0IHRvbWxsaWJcbiAgICBjb25maWcgPSBSVU5ORVJfQ09ORklHXG4gICAgaWYgbm90IGNvbmZpZy5leGlzdHMoKTpcbiAgICAgICAgcmV0dXJuXG4gICAgcnVubmVycyA9IHRvbWxsaWIubG9hZHMoY29uZmlnLnJlYWRfdGV4dCgpKS5nZXQoJ3J1bm5lcnMnLCBbXSlcbiAgICBpZiBub3QgYW55KHJvdy5nZXQoJ25hbWUnKSA9PSAnZGdlLWNvbXB1dGUnIGZvciByb3cgaW4gcnVubmVycyk6XG4gICAgICAgIHJldHVyblxuICAgIHN1YnByb2Nlc3MucnVuKFsnZ2l0bGFiLXJ1bm5lcicsICd1bnJlZ2lzdGVyJywgJy0tbmFtZScsICdkZ2UtY29tcHV0ZSddLCBjaGVjaz1UcnVlLCBjYXB0dXJlX291dHB1dD1UcnVlKVxuICAgIHJ1bm5lcnMgPSB0b21sbGliLmxvYWRzKGNvbmZpZy5yZWFkX3RleHQoKSkuZ2V0KCdydW5uZXJzJywgW10pIGlmIGNvbmZpZy5leGlzdHMoKSBlbHNlIFtdXG4gICAgaWYgYW55KHJvdy5nZXQoJ25hbWUnKSA9PSAnZGdlLWNvbXB1dGUnIGZvciByb3cgaW4gcnVubmVycyk6XG4gICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignTWFuYWdlZCBDSSBydW5uZXIgcmVtb3ZhbCB3YXMgbm90IGNvbmZpcm1lZCcpXG5cblxuZGVmIGxpbnV4X2NvbW1hbmRzKCk6XG4gICAgcmV0dXJuIFtcbiAgICAgICAgWydzeXN0ZW1jdGwnLCAnZGlzYWJsZScsICctLW5vdycsICdkZ2Utd29ya2VyLnNlcnZpY2UnXSxcbiAgICAgICAgWyd1bW91bnQnLCAnL3J1bi9kZ2Utd29ya2VyL3Rhc2tzJ10sXG4gICAgICAgIFsnc3lzdGVtY3RsJywgJ2RhZW1vbi1yZWxvYWQnXSxcbiAgICBdXG5cblxuZGVmIHVuaW5zdGFsbF9saW51eChhcHBseSk6XG4gICAgaWYgbm90IGFwcGx5OlxuICAgICAgICBwcmludCgnRHJ5IHJ1bjogcmV2b2tlIGlkZW50aXR5LCBzdG9wIHdvcmtlciBzZXJ2aWNlLCByZW1vdmUgbGFiZWxlZCB0YXNrIGNvbnRhaW5lcnMsIHVubW91bnQgc2NyYXRjaCwgcmVtb3ZlIC9vcHQvZGdlLXdvcmtlciBhbmQgaXRzIHNlcnZpY2UgdW5pdC4nKVxuICAgICAgICByZXR1cm5cbiAgICBpZiBvcy5nZXRldWlkKCkgIT0gMDpcbiAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdSdW4gTGludXggdW5pbnN0YWxsIGFzIHJvb3QnKVxuICAgIHJlbW92ZV9tYW5hZ2VkX2NpKClcbiAgICByZXZva2UoKVxuICAgIHN1YnByb2Nlc3MucnVuKGxpbnV4X2NvbW1hbmRzKClbMF0sIGNoZWNrPVRydWUpXG4gICAgY29udGFpbmVycyA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsnZG9ja2VyJywgJ3BzJywgJy1hcScsICctLWZpbHRlcj1sYWJlbD1jb20uZGdlLnJvbGU9Y29tcHV0ZS10YXNrJ10sIHRleHQ9VHJ1ZSkuc3BsaXQoKVxuICAgIGlmIGNvbnRhaW5lcnM6XG4gICAgICAgIHN1YnByb2Nlc3MucnVuKFsnZG9ja2VyJywgJ3JtJywgJy1mJywgKmNvbnRhaW5lcnNdLCBjaGVjaz1UcnVlKVxuICAgIHNjcmF0Y2ggPSBQYXRoKCcvcnVuL2RnZS13b3JrZXIvdGFza3MnKVxuICAgIGlmIG9zLnBhdGguaXNtb3VudChzY3JhdGNoKTpcbiAgICAgICAgc3VicHJvY2Vzcy5ydW4obGludXhfY29tbWFuZHMoKVsxXSwgY2hlY2s9VHJ1ZSlcbiAgICBQYXRoKCcvZXRjL3N5c3RlbWQvc3lzdGVtL2RnZS13b3JrZXIuc2VydmljZScpLnVubGluayhtaXNzaW5nX29rPVRydWUpXG4gICAgc2h1dGlsLnJtdHJlZShST09UKVxuICAgIHN1YnByb2Nlc3MucnVuKGxpbnV4X2NvbW1hbmRzKClbMl0sIGNoZWNrPVRydWUpXG5cblxuZGVmIHVuaW5zdGFsbF9tYWNvcyhhcHBseSk6XG4gICAgaWYgbm90IGFwcGx5OlxuICAgICAgICBwcmludCgnRHJ5IHJ1bjogcmV2b2tlIFZNIHdvcmtlciwgc3RvcCB3b3JrZXIgaGVscGVyIGFuZCBsb2dpbiBzdGFydCwgZGVsZXRlIGRnZS13b3JrZXIgTGltYSBWTSBhbmQgd29ya2VyIHN1cHBvcnQuIEhvbWVicmV3IGFuZCBMaW1hIHJlbWFpbiBpbnN0YWxsZWQuJylcbiAgICAgICAgcmV0dXJuXG4gICAgaWYgbm90IChNQUNfU1VQUE9SVCAvICdvd25lZC12bS5qc29uJykuZXhpc3RzKCk6XG4gICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignTm8gb3duZWQgd29ya2VyIFZNIHJlY29yZDsgbm90aGluZyByZW1vdmVkJylcbiAgICBpZiBqc29uLmxvYWRzKChNQUNfU1VQUE9SVCAvICdvd25lZC12bS5qc29uJykucmVhZF90ZXh0KCkpICE9IHsnbmFtZSc6ICdkZ2Utd29ya2VyJ306XG4gICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignSW52YWxpZCB3b3JrZXIgVk0gcmVjb3JkJylcbiAgICBzdWJwcm9jZXNzLnJ1bihbJ2xpbWFjdGwnLCAnc2hlbGwnLCAnZGdlLXdvcmtlcicsICdzdWRvJywgJ3B5dGhvbjMnLCAnL29wdC9kZ2Utd29ya2VyL3VuaW5zdGFsbC5weScsICctLXJldm9rZS1vbmx5J10sIGNoZWNrPVRydWUpXG4gICAgZm9yIGxhYmVsIGluICgnY29tLmRnZS5jb21wdXRlLXdvcmtlci12bScsICdjb20uZGdlLmNvbXB1dGUtc3RvcmFnZS1wcm94eScpOlxuICAgICAgICBwbGlzdCA9IFBhdGguaG9tZSgpIC8gJ0xpYnJhcnknIC8gJ0xhdW5jaEFnZW50cycgLyAobGFiZWwgKyAnLnBsaXN0JylcbiAgICAgICAgaWYgcGxpc3QuZXhpc3RzKCk6XG4gICAgICAgICAgICBzdWJwcm9jZXNzLnJ1bihbJ2xhdW5jaGN0bCcsICdib290b3V0JywgJ2d1aS8nICsgc3RyKG9zLmdldHVpZCgpKSwgc3RyKHBsaXN0KV0sIGNoZWNrPUZhbHNlLCBzdGRvdXQ9c3VicHJvY2Vzcy5ERVZOVUxMLCBzdGRlcnI9c3VicHJvY2Vzcy5ERVZOVUxMKVxuICAgICAgICAgICAgcGxpc3QudW5saW5rKClcbiAgICBzdWJwcm9jZXNzLnJ1bihbJ2xpbWFjdGwnLCAnc3RvcCcsICdkZ2Utd29ya2VyJ10sIGNoZWNrPVRydWUpXG4gICAgc3VicHJvY2Vzcy5ydW4oWydsaW1hY3RsJywgJ2RlbGV0ZScsICctLWZvcmNlJywgJ2RnZS13b3JrZXInXSwgY2hlY2s9VHJ1ZSlcbiAgICBzaHV0aWwucm10cmVlKE1BQ19TVVBQT1JUKVxuXG5cbmRlZiBtYWluKCk6XG4gICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249X19kb2NfXylcbiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWFwcGx5JywgYWN0aW9uPSdzdG9yZV90cnVlJylcbiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXJldm9rZS1vbmx5JywgYWN0aW9uPSdzdG9yZV90cnVlJylcbiAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKVxuICAgIGlmIGFyZ3MucmV2b2tlX29ubHk6XG4gICAgICAgIHJlbW92ZV9tYW5hZ2VkX2NpKClcbiAgICAgICAgcmV2b2tlKClcbiAgICBlbGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzpcbiAgICAgICAgdW5pbnN0YWxsX21hY29zKGFyZ3MuYXBwbHkpXG4gICAgZWxpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnbGludXgnKTpcbiAgICAgICAgdW5pbnN0YWxsX2xpbnV4KGFyZ3MuYXBwbHkpXG4gICAgZWxzZTpcbiAgICAgICAgcGFyc2VyLmVycm9yKCdVc2UgdW5pbnN0YWxsX3dpbmRvd3MucHMxIG9uIFdpbmRvd3MnKVxuXG5cbmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6XG4gICAgdHJ5OlxuICAgICAgICBtYWluKClcbiAgICBleGNlcHQgKE9TRXJyb3IsIFJ1bnRpbWVFcnJvciwgc3VicHJvY2Vzcy5TdWJwcm9jZXNzRXJyb3IsIFZhbHVlRXJyb3IpOlxuICAgICAgICBzeXMuZXhpdCgnVW5pbnN0YWxsIGluY29tcGxldGU7IHdvcmtlciBjcmVkZW50aWFscyBoYXZlIGJlZW4gcHJlc2VydmVkIHVubGVzcyByZW1vdmFsIHN1Y2NlZWRlZC4gQ2hlY2sgY29ubmVjdGl2aXR5IGFuZCBvd25lZCBzZXJ2aWNlcywgdGhlbiByZXRyeS4nKVxuIiwiY29uZmlnLmpzb24iOiJ7XCJvcmlnaW5cIjpcImh0dHBzOi8vd3d3LmRvcmlhbmdyYXkubmV0XCIsXCJlbnJvbGxtZW50XCI6dHJ1ZX0iLCJkZ2UtaWNvbi5wbmciOiJpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBTUFBQUFEQUNBSUFBQURkdnZ0UUFBQUFJR05JVWswQUFIb21BQUNBaEFBQStnQUFBSURvQUFCMU1BQUE2bUFBQURxWUFBQVhjSnk2VVR3QUFBQUdZa3RIUkFEM0FQWUE4WGlrK3RvQUFBQUhkRWxOUlFmcUNBY0FJRFVWbXdHOUFBQlAxVWxFUVZSNDJ1MjlaMXhVMS9iL2Y5cjB6c0RRbS9RdUNJb0NDaGF3Vnl5eHhwaW9NYkhFOUtpcEpocExURXpzdmZmZUFBdUlJcjMzemxBSEJtYVkzazc1UHpoS3VDYngzdS9sL24raXp2dkJmZDBrdzV5eVA3UDIybXV2dFRhbzB5b0FNMmIrVzZDWGZRTm1YbTNNQWpMVEo4d0NNdE1uekFJeTB5Zk1BakxUSjh3Q010TW56QUl5MHlmTUFqTFRKOHdDTXRNbnpBSXkweWZNQWpMVEo4d0NNdE1uekFJeTB5Zk1BakxUSjh3Q010TW56QUl5MHlmTUFqTFRKOHdDTXRNbnpBSXkweWZNQWpMVEo4d0NNdE1uekFJeTB5Zk1BakxUSjh3Q010TW56QUl5MHlmTUFqTFRKOHdDTXRNbnpBSXkweWZNQWpMVEo4d0NNdE1uekFJeTB5Zk1BakxUSjh3Q010TW56QUl5MHlmTUFqTFRKOHdDTXRNbnpBSjZFUVJCRUFSQi9wK1hmUy85RkxPQS9oR0NJR0FZaGlDSUlBZ1FCRi8yN2ZSVHpBTDZHMGk3QTRLZ1Vxa3lHQXdnQ0JJRUFRQm1JL1EzbUFYMFBPUnNCWUlFQUlCYnR1NTQ5T2dKbmNGOE5wV1plUjZ6Z0FEZ21hOUQ5SklKQkVGYXJlNysvUWRGeFNVQUFQWjRRczk5ekF6eXNtL2dwZEZMQkdEdmZ5UW5MQXFGV2x0YldsRlJYbFJVWkRJYUlBZ0NYdWhLdjdGTzBodG5nWHJiRXZMZjREZ0d3ekNUeFdJd21Vd21rL1NhY1J3dktDeHljbkx1N2xZMGlCc1JCTUZ4bkVhak1Wa3NKcE5KWnpDZSt5cnl5OTVBeS9SbVdTQnlQVVVPTTQxR3d6QWNBQUVHbGRFdWFYMlkrbGlqMFZwWldnNGROa1Jvd1c5cGtUUTFOUThiTnBSQ29lVGxGUXh3ZGFIUmFKV1ZOZmtGaFFhRDNzUERmZWpRY0JpR2pRWURnc0E0anFNbUV3QytjYjlHNEUwVEVLa2VFQVFCRUhyeUpLdWt0QXpIY1NvRlNVcTYyOWpVeEdBd0FBQms3MlB0MzdlcnRLeU14K05uWm1iNisvdUx4WTBLaFNJeDZlNk9IVHN0TEN3VUNnVUlnbEZSRVo0ZW5ucURrY3ZsUkVRTWRYWnlNQm9NSVBUR2Flak5lbURTOXNBd2N1amcwVFVmclUxS1NqS1pUQUFBRnBlVURCdzRjTnEwYVdQSHhqVTN0NnhhL1hGeGNabFFhSkdXbGlZV2k2MnNMUC9ZdFcvRGhtOURRa0xDdzhNWExGaWcxK3ZyNnh2WWJIWkRnM2ovL2dNZmZMQzZvcUthU3FQaU9QNm16V0Z2bklDb1ZFcGRmY09UOUhRM043ZlEwRUVTaVdSZ2NORGh3d2RUVTFNQkFEQ1pUQkVSd3k1ZHVrU2hVUEx5OGpRYVRVcEtDcHZOdVh2M3JrcWw4dkR3NEhLNWVYbDU5dloyQnc3c2IrL280UE01UTRZTXB0TnBkeElTY1J3QVFSQjR3OXlnTjB0QUlBZ1NCQUJEME9EQmcxMWRYZVBqcHk5YU5EOGhJY25OYlFDWHk2MnJxd01Bb0txcUtqUTAxTUxDNHRTcFV3QUFkSFYxblQ5L1BqNCtIb0tnK3ZwNkFBRHk4dktpb2lJYnhXS05ScnR1M1ZmKy92NysvZ0ZPVGs0b2lyN3M1M3NKd092WGZmbXk3K0gvS1RpTzgvazhDd3VCaTR1VHM0c1RqVVp2Ym03Snk4dS9lZk5tZUhoNGJtNXVjM1B6b2tXTFRwNDhXVmxaT1diTUdCekhueng1TW1qUUlHdHI2NVNVRktGUXFOY2Jpb3FLM04zZFJWYVczdDZlUEM3SDJsbzBLQ1NZeWFTL2dac2ViNWFBUUJBay9XZ3JLNkdkblMyTHphcXZGKy9iZC9Ea3lST1RKazFxYTJ0NzlPalI4dVhMMDlMUzd0NjlhMjF0ZmZEQWZocWRscHI2S0Q4L1B5NHVEb2JoYTlldVQ1NDhxYkN3OE02ZE83YTJkcEVSNFR3ZXg4blJrVXFsNERqK3Bxa0hlQk9tTU9KZklmK04wV2lDWWJpclU3NWx5N1pyMTY1T25UcVZRcUdVbFpYOThjZnZ0YlcxMTY1ZEEwRnc3ZHFQd2dZUFdiNThhVlJVbEZxdDNyMTdkMXhjM0R2dnZIM3IxcTM0K0hnT2g3TnQyN1pMbDY1U0tGUU13M3Jtcjc5ZTd2WG10YlZBdlVNK3owV1pxVlFxUVFCMzd5V3ZXclUyTHk5djBhSkZYVjFkemMzTkJ3N3N5OHJNMnJaOU93QUFhOWV1M2JEaHk2eXNMSUdBUDNyMHFJY1BVOFZpY1dscDZiZmZiTEN4dFR0OSt2U29VYU40UE43K0F3YzdPam85UFQxRklxdmVHbnAyTlFBRVFBQWt5R0QzYThuckthQWU5UkFFZ1NBSWpVYWowcWdJZ21BWVJxRlFXbHJhVHB3OHMzdjNub0tDL01qSXlMUzB0SXFLaWtPSERsVlgxM3p5eWFjb2lrNlpNbVg3OW0zMTlYVmZmcldocWJFNWZzWTBkemVQK3c4ZU5EVTFWVlhYZlBIRkYxMWRYZHUzYjNkeGNhSFQ2VGR2M3BKMUt5QUljWGNiQUlJQWdpQjBPcDFDb1VBUWlPTTRUaEFnK0RvbmhMeUdBdXB0ZStoMHVreldYVnhTV2xKY0lwTjFXMXVMMnRvayt3NGNGb21zQ2dvS3RWcHRWVlZWZTN2N2lCRWpvcUtpdnY3NjY4YkdSaWNucDYxYnQ4cmwzYnQzNzEzNjNoS1pyQ3YxVWRxRWlSTVJCRWxPVGhhTHhSWVdGZ0VCQWRldlg2K3Fxc0p4RE1Qd3dXR2hHSWFWbEphRmhRMlN0SGZrNWhiVTF0V1pUQmlmeDZkU0VSVEZYdU9rb3Rjd0V0MmpIZ1NoSkNiZVQzMlVKaFFLV1N4R1ZuYmVtYlBuREFiai9QbHZLYnFWbVpsWkFQQjBVR1V5MmIxNzk4ckx5d0VBaUlpSVlEQVl1M2Z2aVl3Y0doczdOaVE0Nklzdk4xeStmRGtrSkVRa0VuVjBkQ1FsSlJtTlJnekRBQURvNkpEaU9KNmZYN0IrM1ZmSFQ1ejhjT1ZhR28zbTdPeEVvOUVmUDg2Z1VPQTVzMmU1dURnYURFKzNZMTgvWHNPbkltY3VHbzEySitIdXNlTW45SHBkWGw1T1hWM2Q2TkdqaGcrUHFxbXBjWFIwckt1dkp3Z2NlT2F2RkJZV0ZoY1hXMWxaQVFBQXcvRHQyN2ROSnNQNGNYRUd2ZExTeW1yczJOaWtwS1Npb2lJMm13MEFBSVZDU1VwS3dqQ3N4NkkwTmphaUdFcW4wOVZxOVpJbGl5MHRMYk95c3BxYUdzWGl4bTNiZjIxdmx5SUk4cnI2MUsrMkJmcFhUeGtBd2FkcEZUQU1LeFNLNjlkdmRIUjBYTDkrSGNkeEFBQ09Iejk1NHZqUmNlUEdYcnAwMWMvUEY0SWdITWRKdzJBd0dGSlNVdXpzN0hnOFhsMWRYVk5UazdPek00TkJ4ekFjUTAwV0FuNWRYUjJLb2thajBkN2V2cVdscGJhMmxyd0I4bksrdnI1cXRUWXZMMy9ONnBYSGo1L1l2djBYUHAvZjNkM3Q3ZTN0NU9TY2xIVHY3YmZuYTdYYTUyNFY2TDAzOThyeUNsdWczdXBCRUpoS1JVaFhBeURUd1hTRzJ0cmE1T1JrSHgrZmh5a1A5dTNiQTRKQWRrNnVzN05MYzNQVG9FSEI3NzIzbE5RUStTZGRYVjJscGFWR283R3VyazZoVUpTV2xxcFVHZ3FGQWlQMDZwcGFxVlFxa1VpNnVycGtNbGxWVlJVNWZ4RUVnV0dZalkzdG1qV3JwZElPQm9PaFZHbXlzM09pb2lJek01OXMzYnFsc2JFeE56ZEhKcGYzcEtRQkFBRERNSldLd0REMDNDTzhvcnpDVGpUNTZtRVlBa0N3bzZPclc2NmdVcWtVQ2tKbTh6Q1pUS1ZDbVpXVnZYbno1cmk0c2RldVhkUHI5VE5tekRBYWpXcTFPanA2dUtlSGw0Mk5EZW5OR0kxRzBrcVpUQ2ExV3QzZTN0N2Eyc29YQ0tKSFJOWFYxYTFiL3pYcGE1dE1KaFJGUVJDRUlJakw1VG82T280Y09mS2pqejZLamg2aFVpcXJxcXI5L2YwcEZFcEpTY25reVpPblRKbVdtNXVEb2RqcU5TdXRySVJrbUJHQ0lJVlMxU0h0QWdpUXhXS1NGMzJsTFJDbzB5cGU5ajM4bHhBRUFVR1FScXU5Y2VOT2MzTnJnN2hoY0ZqWW5Oa3pLQlFFeDNFR2c2SFI2ZzhjT05UZTNnSERVR05qNDZKRmkzeDhmRTZjT0ZGVlZmM2JyOXNwVkZwTlRWMWVYbDVwYVVsV1Z2YWpSNDh3REhOMWRiV3pzMk13R0hRNkhRQUFEdzhQbVV3bWFXK0hJVWlyMDZsVnFwcWEydTV1dVkyTnphaFJvM3g4ZklLRGd3Y09ETEt6czA5K2NQK1hIYjk5K3VsYVIwZm5xMWV2WkdmbitQdjdkWFIwVHBvMGZ0U28wUWE5R3NNd0twVlNXeWMrY3VTNFRxZHpkWFVkRkRJd1BEeU1qQjY5dWhwNlZRVkUrcVFNQnVQa3FYTXRMYTFzTnR2ZjM5ZlJ3VjRvdEtEVHFUQ001T2JtLy9yYkh6UWF6ZEhSd2NYWmVkeTRXSHNIbDVzM3IyZG41L2o3K3lja0pBWUUrSWxFTm0xdGJVMU5UVGs1T1UxTlRmUG16VjIwY0lGUWFFR2hVS2hVcWxLcExDOHY1M0M1WHA2ZUJBQ2dLR295R3ZJTGlyWnUzVjVSVVJrZVBzVEx5OHZSMFpITlp1Zm01dkw1ZkhkM3QrTGlrbFdyUHJDenMzdVlrcHFabGRYVzFsWlhWeDhhT3VqREQ1WXpHSFFRQktXZFhWcXROaTB0QThlSjJ0cmFkOTk5MjhuUndXZzA5WGh2cnh5dnNCTU5naUNLb3RYVk5Ud2VUeWFUV1ZvSzNkeTk5RG9sQUFEZEN1WG1uN2Y1K2ZrdWZudVJ3V0RFQ1FKR3FGZXVYTHAxNjQ2Zm4xOXE2cVBjM0Z3cWxZcWllSGQzTjQxR216aGh3cGd4STRORFFpQUlKZ2dNQkFHQ0lPZ01rYldOUFVFUUlJQUNUNHQ2OExpNDJMRFFrS1NrZTBYRkpTaUtkclMzS3hTSzh2SnlyVmJMWkRJeERQdnR0OS9mV2Z5Mms3TXpqOGRsY3pqdDdlM2ZmNytSeCtPdFd2bStXcTIydGJHRkVkcmp4MDgwR3ExT3AydHRhUnZnNm1JMEdsL2RVUFVyYVlGSTN4UERjQmFMbVphV3NmL0E0WXFLY2hxTnRuTGxCeU5IUmd1RjFybTUyWjk4OHRtS0ZTdjRmQzZmeHpjWUREZHUza3BPVHFaUUtOYlcxcEVSd3laTm11anM3QWhDSUFnQUNFSURRTmlnVjBzazdXMXRiUXFsVXFmVmEzVjYwcjhHUVFDR0VScU55dVd5TFN3c1JGWldsbFpDT3AwREFMakpxRWRSbEVxbDZIVDZqTXpzSzFldTFkYldTcVZTR3h1Ym1UUGpRMEpDRk4zZE9FRmN1blJacDlVY09MZ1B4OUNxcXBvTEZ5K2ZPblhhemMwdE9EajRzMC9YMG1pdjlpN3NLeWtnNEZuWnFGS3BPbnIwWkZsNVdXQmdnTUZnS2lvcXRyRGd6NXc1SXlucEhnaEM0OGVQRXdvdHNyT3pEeDgrV2xKU0Vod2NQR3RXL0xoeGNiYTJ0amhtQWtFSVJiRzJ0cmJxNnRxYTJycnViZ1dOUnFQVGFRS0J3TkpTU0tYU1dDd21ETUZHazFHdjE2dFVhcFZLMmQydFVLblVJQWhZV2xvT0dPRGk3ZVZwYVNuRWNkeGtNbEZwTkJ3bkNnc0t6NTIvZFBYcVZZUEJNSFhxMUZrejR5MkVGa1ZGSmFtcHFWR1JFUkFNWGJod3lkN2V3YzNOVlN3V2QzYko1czJkRXowaThwVjJnMTVKQVQxYnE4TzdkdStqMGFodnpabE5wVkxZSEY1VFUvUCsvUWNmUGt5SmpvNTJjWEdoVXFtRmhZVkpTWGROSnVPOGVYTVh2NzNRenM0R1JWRVlocFVxVlZGaFNYNUJVWGQzdDQyTnRiZTNwN096TTR2SjFPbTFDb1ZLcVZUSlpES0QzZ0JDSUVFUVRDYVR6K2R6dVJ3Qm40dFFhTjN5N3ZxR2h2THlTb1ZDWVdOdFBYaHdxSyt2TjRVQ0cvUUdLbzJHRTBENms0eGR1L2RtWkdSNGUzdVBIajNhenM2dXU3czdNek96dmIxOXhZb1ZFeWFNSndoVXE5RTJOallmT254azl1eVpRd1lQMHV2MVpLckp5MzYxLzJkZVBRR1I3ak9kUml1dnJMcDU4ODY0c1dOKzNySzl1YmtsTEN4MDJyUnBjbm4zM3IxN05ScU5wNmNuanVOWldWbk96czZmZkxJMll0Z1FETU1RR0ZhcE5ZOGVwK1ZrNXpHWWpNaklZYjQrUGxxZHJyS3lzckN3dUtHaFVhdFZ3ekRDWnJOSlA1cEdvMm0xV2hSRlRVYWp3V2pFTUpURjVqZzdPUVlHK250NmVPQUVVVkJRbUpPVFI2UFJSb3lJREFrZUNNT1F3V0JnTXBsS2xmcm8wUk5Iamh6bDgvbEJRVUZ0YlcwTkRRM1IwZEdMMzM2N3NLanc4dVVyWXJING5jVnZEM0J6eTh2TCsyak5oMlJnQ1hnRjdkQ3JJYUIvaVRnREFJSGpkRHBkSW1sUFNMeXZWQ3JYcmwwYkZCUTBlOWFzc3ZMeVFZTUdIVGx5aEU2bkJ3WUdabVJreE1URWZQWGxaeUtSSldveVFUQ2NucDZWbUhSWHdCZE1uRFRld2Q0dXY2RHcvdjFrc2JpUnorZDd1QS93OXZaeGRISVFDSGhNQnBOQ29jQXdERUlnanVFNGpwbU1KcTFPSjVOMzE5YzFsRmRVMU5VMWFEVHFBUU5jUjQ4ZTZlWHBVVnBXa1pSMGowS2hUSmt5MGQvUFI2ZlRBUURBWURMdjMwdis1dHZ2YVRTYWs1UFR2WHYzWW1KaTNOM2R4ZUlHS3l1cm4zL2VFaG9hK3NuSEg2T1lhZDdjMlZxdEZnQkFjbS91MVFwUHZ3SUNlaTQzZzN5ekJvTXhKeWYveE1sVGJXMXRKU1VsNDhhTisrM1g3VjkvODkyOWV3K2FtNXVDZzRQYjJ0cm16NSszWnZXSEJJRWpDTkxSSVQxNzdxSkNvWnd4ZllxN3UzdlMzWHUzN3lRaU1Cd2VQamc4ZkxDVG95T05UaWNJSE1jd0RNTkk5N2wzRmhFWkEwUmdHSVJoRUlSMFdtMkRXUHpvMFpQTXpHd1dpekZwMHNTaDRVT3ljM0lURXBKOGZMeW5UNXZFWXJGME9pMmJ6YW1xcXYzNGs4KzZ1N3ZWYXJWRUl2SHc4UGg1ODA4Y0RtZlc3TGRZTEphMXRYVmtaT1NNNlZOY1haMXduSUFnQ0VYUm51ZDlKVFQwQ2dnSUFNaEtCNEpLcGNwa2NwMU94K0Z3VHAwNjI2MVFob2NQRVl2RmQrNGt2UC8rOGxHalJzNmJ0K0QwNmRNOEhzL1IwZkhqano5YXRIQytYcStqMCtrWkdkbFhyOTBZUERoMHl1UUo2ZW1aeDArY29WSXAwNlpPR2pZc25NbGlZNmpKYURUMmxzcy8zMFpQNVR4SW9kSmdHT251N242VW1uYnoxaDBFZ2Q1ZXRORGIyK3ZrcVROTlRjMkxGczczOG5KVHFkUXNGcXU5by9QTEw5Y25KQ1JJcFZJWVJxNWN1VGhod3FSMTY5Zkx1am9uVFpxbzArbWZQSGt5ZGVya0FIOC91YnpiMmxwRW9TQmt2UHVWME5BcklDQnkyQ2dVYXRxVGpPenNYTEZZM05iVzV1bnA4ZldHTDZsVUtnVFRFeE51MzBsSTlQWDEvZlhYblIwZDdUaE9IRHE0YjlyMEtUcXRoa0toWGI1eUxTK3Y0TDEzRjF0YUNyZHMzZEhVMURUM3JWblJNU1BvTkxwZXIvdW56WVRuTnMvLzZ1RStLekdEYVhTR1dxVytrNUI0NmRLVjRPRGdEejljWGxoWWZPblNsZkhqNDBhTmlsYXIxRFFhVGFmVHIvaGcxZG16NTJ4c2JJWU5Helo2OUtqaTRwSWZOMzdMNVhFQkFNckt5dDZ5WlJ1THhYSnlkSFIwY3Bvd0lVNWtaVWxxNkdXLyszOVBmOTlNZlpxYlFhVVdGNWNrSnQ2enNMQ3d0N2NiT1RJR0FBQTZnMDJtWlBENS9PdlhiNVNYVnh3OWVuanQycld4c1dOY0J3ekFVQlFFNGNOSFRsUlYxV3hZLzRWTUxsLysva29lai92cnI5dkdqaHNMRUxoV3F5Ri80dVE0a2Y5TFhnNEVRUnFOeG1LeG1Td09rOFZtc2RsVUtwWDhqMEJQL3hjSUFrRVF4M0dOV29VZzBNeVo4Yi84c2tXcjFTNWI5b0dBei8vazQ5VVBIank4Y1A0S2c4RTBtWXdNQmowaUltTEtsQ2w3OXV4Kzk5MTNEaHc0MU5IUndXYXpjUXdEQUpqTllscFlXTVRGanFGUXFUUWEvZFNwY3lZVDJqTnJ2K3dSK0RmMDY4M1VuZ0dqMGVtWExsNFZXWXQwT2gyVlFsM3h3YkxFeEx0RlJVVXdCQmNYRjMvMzNRL3U3bTU3OSs1NjhpVGQzdDV1OXF4NHRVWWpzckk2ZFBpWXlXaFl1M2IxbGF2WDl1OC92R1RKNGtXTDVzRVFwTmZyU0orR3ZBb0lnZ0FBa2xxazBXZzBPbDJuTjlUVzF1WG01V2RsNWVUazVJa2JHaEVFRVZwYVVpa1VITWNvRkNvSUFqajJOUHBIcGdBWURYb3VoeE16TWhySDhWOSszZW5vNkxoZy90eGJ0eE1heEkyaGd3WjFkY2xvVkhwOC9MUzB0UFFSSXlLam9xSjI3dnhkMmlsak1wbmxaYVhIanArYU1HSDh5SkhSRnk5ZEhqa3lKamMzMTlISnlkWldSQnFoZm02SCt1OVdSbS9mR1FBUW9hV3dyVTFpWldWMStmTGw2T2poMzMvL3pka3paMi9mU1NRSXdtUXlmYkRpL1phVzFveU1yTFZyVnpvNU9tQVlmdWp3Y1FBQVZxMWV1Vy9mL3RUVXh6LzkrSzJYdDQ5V293SkFFSWJobnQ5Mnp5V29WQ29JUVJYbGxiZnZKS2FrUEN3cks1TklKSHE5SGdBQUJLRzR1cnJFeG82Wis5WmJRVUgralkwTkFndUJoWUJ2TXBsNmpBUU13eWFUeVdReXpad1o3K3JxdW1uVEZybE05dm5uSDIvZHV1UGMrWXR6WnMvZ2NqbDBCa2RrYlhYNjlQblBQbHM3Y2VMRWlvcHlPcDBHZ3VEOCtYTWpJaUozN05paDFXcFZLaFVJZ2tJTFBrRUFQVDVRZjNhRytxbUF5RmVHNHppTXdEUTZYUzZUMG1qVTY5ZHZCQWNQckt5c25CRS82K08xYXlaT21tQnJhNk5RcXJ1N0ZZNU9qbFZWdFJpR1VoQVlBS0VMRnkrcVZLcVBQMTYxNjQvZDJUbTVXMzcrMGQ3ZVRxTldRaERVNDV6MkZpaWR6cWlycno5OCtPanAwMmZGWXZGek40T2lwdXJxNnVycTZ2UG5MOFRHeGhZWEYxdGJXLy84ODJaUEQxY3lVWi84R0dtS05HcGxhR2p3NXMwYnYvcnFhNVBKdEhidHFpMWJmcm1UY0RkMnpDZ2NNL0M0bkh4cHAxNm5Dd3owOS9YMVdiNzhmWlZLWGxGUjlkNTc3MTI4ZUhuczJMaGp4NDdUYUZTMVJtc3dHSmxNbGw2bkpmcDMzbGwvRkZDUGVtZzBta3FsUG43eFRGbFpPWi9QV3pEL0xRNlhFeFU1dExtNXRhaTRORHNuejgzTnpjUERqWXk3S0pVS3RWb05nSEI2ZWtabFpmVVhuMzk4N09pSjdPeWNUWnMzV291c05Cb05ETU5BTDhQV294NGFqWjZRZU8vTEw3OHFLaW9pYjRDVXduTk9OQUFBVXFtVXJIY0dBS0N4c2RITnpXM2R1aStIRFlzd0diVW1rNG44R0FUQkdyWGF3MzNBcGswL2ZQSEZlZzZIczNMbCs3OXMvODNHMmlZNEpMU3pTNGFpYUdlWG5NRmdGQldWWEwxNjVlSERWSlZhYlNHdytQWFhiUndPUjZ2Vnl1WGRCdzhlZ1dGNHdvU3hFY1BDalFaRGYxN1k5enNCUGRzb3hSZ01SbE5UNjdidE8renNiRmV2K3NERzFnWkRzYzZ1VGdJbnhzU09ZZERwVXFrMFBTUHJ6cDNFZ29LQzZxcGFwVktGNC9qZHV3L0VZdkU3aXhjK2Z2ems1cTJFclZ0K3NyRVdhYlZhY3RvaWwxTUFHYk43bG5kMjVlck5wVXVYZDNWMTl1aUdYSm85ZDFmQXZ5N1dxcXFxS2lzcnU3dTdKMDJhR0R0bWRFaElvRTZuSTF0endqQ3MwV2pjM1FkOCs4MzZyNy81M3NuSmFkNzh0ODZldmVEbzVDQVdOK3IxZW5HRHVLcXk2dTdkZTBLaGNONjhPVDdlWG5RNnZVc21VNnRVTEJhTEw3QXdHdlM1dWZtSER4OHJLU2w3NzkzRktHcnN0eHJxWDh2NDNyYW50Vld5YnYyM1k4YU1uRGQzVG1aV2RsWldqbDV2SUZjL1ZDcVZUcWQ1ZXJnUEhSYU9ZZGllUGZ0emMvUHQ3R3hsTWxsalkrT1BQLzVnYlMzNjVKTXZQdm5rbzZGREIydlVhbEk5UGErK3QwYno4Z3Ruem5xcm9iNmVURy85UDd5NFh0OFdFaEt5YjkvdXdBQi9EUHR6V3hURE1CYWJlL3YybmVQSFQvN3h4Ni9aMmJtNXVmbE5UVTNraGRScTlYdnZ2Uk1kSGRNb2JraDdrdDdaMlFWQnNNRmdNQmlNSUFqWTJkbU1IQmxOcDlHKy9YYWpwNWZYaHg4c014aDBwUHI3bTRaZXNvQjZUU1VBQklFQUFPQTRUanFrbjMreFBpd3NkT1RJbUFNSERxdlZtc0dEdzRLQ0FseWNuUmdNdXNGZ2JHL3ZxS2lza3N1N3c4S0MzZHpjZi9ubDF3TUhEcnE3dXprN3Uzei8zZGNidnY0dUpDUjR5WkxGcE44RC9DWFNnK000aFVLUmRzcm16VnVZa3BMeWYxWFBuNjhQQkVuRjI5amFidCs2ZGZhY0dZWm4yNktrTFdPeU9GdTM3cEJLcFQvLy9PT0dEZC9sNStmcjlYcTkzckJueisrQkFYNFBIcVMydDNlNHU3dTVEbkFSQ1BnQVFYUjF5YXByNnJLeXNpc3JxNktpaHNWRVIzL3o3WGVqUnNiTWVXdTJScTNxOGVGNkFoQXZYVTh2ZVJuL0xLOFpodUduVVh3WWh1a014aytidG5HNW5Kam82QjgyYmhJS2hRc1d6STJLQ2hjS2hVV0Z4V2ZPbkR0OTVseEZSYVZBd1BQeDhXbHRsVUFnRVJzN3VxS2lLamtseGQzZHZiYTJYcVBSckYyN0NrT056NFY1Z0grWmpNRHZ2dnZ4M0xsemZVeHJKKzlacFZScXRkb3BVeVloQ05MemFBQUE0aGdXR0JodzZjcFZPbzBhRmpibzJyWHJqWTJOVzM3K0tTSnkySk1ubVZRYW5jZmxaR2RuWDc5Mkl5SHhycnhiN3VUazVPZm40K25wd1dLeHJseTUxdDRoZld2TzdBTUhEOXZiMjdtNWVSajBPbEl4VkNxMVIwWXZjZmlBbHk0Z2dpQVFCTzdxa3FuVUdrdExLd3FGZ3NESTc3L3ZxYW1wWGJSbzBROC9iSFIwZEh4M3lXSW5Kd2VaVEw1dTNkZHJQbHI3T0MyTndXQkFDRkpjVkhMNThwV2d3QUFXbTh0aE0zMTlmUzVldWx4UlVkSFZKZHV3NFVzYmF4R0tvbjliRWtwbWFGeTVlbjM5K2czL2s2WSs1RlhjM056aVoweW5VR0RTRStxWktMazhMcGZMUFhmdWdraGtmZVRJa1FrVEpueTBkbFZ0VFQxT0VGZXVYRDV5OUpnSlJidTd1N096cy9mdVBYRDc5aDFMUzJGSWNKQ3RqWTJqbytPWk0yZGhHSW1MaS8zOTk5M2VYaDVPemk1VUtvVWdpSWFHUmhhTCtkelUvRko0eVFMQ2NZTE9ZSlFVbC83d3d5WU9oMU5YMjdCMzMvNjJOc21QRzc4N2R1eDRaV1hsMm8vV0dFMG9CRU9mZnZyRjRjT0hvNktpamg0OXRHYjFoL0h4c3dSODN1RWpSeVNTanFpb0NKR1YwTXJLc3JxbTd0NjllNnRXcnB3NlpaSk9wLzNieVFzQUFCaUdOQnJ0dXZYZlZGUlU5RlFDOVFXQ0lNTEN3bjc0L3RzQkExeFFGQU9mUVk0dWFqSzZ1amdYRlpWY3ZYcTFxNnRydzRaMXJpNk9JQVFsSnQ0OWN1U29qWTNOc1dPSFo4MmNNV3RXdkxPVDg1VXJWNjlldmU3cDZXVWxFdUU0d0dhejkrL2Z2M0RoQWs5UGoxMjc5M1owZEJBRWVQYk11YVM3OStQaXh2UVVsNzNFRVh6Sld4a1FCT3AxdXFDZ0FEczd1ODgvL3lycDd2MUJvWVBXcmZzaVBUM3orUEVURVJFUk1ubTNnNzN0bzBlUFQ1OCs3ZUhoc2V1UG5VT0dEQ1lJSEVQMVo4NmVuVDkvL3BUSkV4TVNFdWgwT2tLaEJnVUZPRG82amgwN0JzZlI1Mll1a21jeFExcHhjVmxtWmlid3Yyak02K3JxK3ZQUG15OWZPaDhaT2ZRdnNXTlNSZ0FFUVRObnpTZ3JLeE1JQkY2ZUhpQUl5V1h5N095Y1AvN1lxVlNxSGo1OENBQUVrOGxZOGNHS3J6ZXMxMnExMjdiOVFrRmdnTUFkSEJ3NEhNNDMzM3puNWVueCtXZWZvQ2kyZGV2Mlk4ZFBUSm80bmthai9uZCsyLzk0QkYvdTVjbWZLWUlnMzMrMzRkTlBQMll5R1cydGt2MzdEbDYrY2xXbFVzbGtjaW9Wc2JTeXJxaW9BZ0FnTEN6TTNkMU5wVlF3bWN5R0JuRlJjY21ZTWFPQ2c0TzZ1dVI2dlFFQUNHdVJ5TlhWbGMxaC85czNtNW1aSlpmTCsrajlrQll1TUREd296VXJiYXl0ZERwZGorRjU5blJQVndrR2c4SFh4M3ZDaFBGMmRuWThIaGNBd1FaeEk1UEpqQjRSNWU0K0lDbnBIZ2lSdllMMVk4YU01dkY0OWZYMVhWMmQzdDd1TXBtTVRxY1hGeGNmT0hqNHhzM2JXcTNHMzkvdjBLRURZOGFNSkEveGVPayswRXVPQS9VNENoUUtNbWQyZkV0TFMzdUhWR2doWURBWU5UVTFPVG5abjM2eUdnRFFzTkFRQktFVUZ4ZDNkRWlGUWtGUmNYbEdSaWFMeVF3TkRTa3RMYVBSYU9TUVFSRGs0dXJLNS9QSnd2Vy9mYmtnQ0JxTnB0eThQS0JYRzRiLyt1WUJBRWhQVDgvTnpROExDK241dHQ3WC9mTVNJREIrM05qck4yNzFmQVpCRUJpR3hvd2VmZmpJMGZ5OFFoYWI2ZW5wVTFoWXBGQW9SbzhlSXhLSjZBeW13V0FvS0NqOC9QTlBWN3kvdEtxcUdnUkJWMWNYRG9ldDc3WFdlN2thZXNrQzZua0ZPSTRiREhvN08xdEhSd2NNUXhFS1plMUhxei8vWXAyMFUrYnM0ako4ZU9UUG16ZHQyNzc5dSs4M0NnUjhHeHVidXJwNlh4OGZEa2NnN1pCYVdBaW9WQVFBQUkxVzQrYnF3dVd3eVVMMHY3MGlCSUY2dmJHMXRiWHZOMC9lZVVkSHgvMEh5VU9HaFBVODBkOStHTWRRRDA4UENvV2lVcW00UEs2ZG5TMlZTbFVvRklNSEQvcDkxKzdDb3VLaW9pSjdPOXNMRnkrRmg0Zi8rT1AzQWdFUEFPQ3lzckxnNEtCRkMrZlI2ZFNnb0FBUUJJeEdVLzlSRC9EU3B6Q2dsNFpBRURTWlREcWR6bWcwYVRYYWFkTW1iVmovMWNXTGx6dWxVamFIcy9ianRZOGVwVENaektLaTRwRWpZMnByYTRZT0RRY0FvS0ZCSER3d0NJWmhBaWVrMGk1bloyZmczN3hUa0NEdy8yMUgxVnUzYm5kMmRpSEkwNjJTdno0Z0NJSW9pb21zaERRNnJhdExUdUM0dlowTmw4dXBycWx6OS9Dd3NiWldxWlJob2FIWHJ0LzhhTTJxdTNjVEJ3OGVRcUhTN3QrN3ExS3A5dTdaWldscG9kY2I5SHE5VHFmSGNSd0VlK2NSdkdUNnhWWkdqOFBiT3o2bTArbm56Smw1K3N5RjdiL3NkSE1iUUtmVFpESzVTQ1JhdmVwRGxWb2xrM1VQR2pTd3VhbSt0YTE5OXV4NERNTU1CbDE3ZTBkbzZDQ0FlTEVEUkVBUVJLUFIveWQzVHNxbG9LQWdKeWQzM0xoWWpVYnpUMzJBTUF6bDh3WFdJdXU2dXZxQUFGODJteFVTUERBakl6c3NMTnpYMXljN08rZlkwVU4wQnIyb3FGaXBQTU5nMHR2YnBSSkorN0psN3cwWTROSnJLNlpITkM5Zk9pUXYzd0w5Sy8rU3ZZQmg2S0pGODk5ZnZ0VEd4aG9FUVJhTGJXbHA2ZUJnVzFGZXp1UHhuSjFkYnQxTzhQUHpzYlMwQkVHd3Via1pSVkczQVM1R28rbkZQMDBDQUFqaWY3bCswZWwwYlcwU0FJUmY4RndFQWNBSUhPRHZXMVplanVPNHdXQU1Dd3R0YTJ1cnE2c09Dd3R0YUdoUXFSUWVIbTRDZ1FXRHlRUUlZTWlRd1Y5L3ZTNGtlS0JPcCt0UlR6K2tYd2lvVjZZZjBiT2RDWUtBeVlUZXVaTnc0K1l0ZDNlM2VmUG1TeVJ0eWNuSk8zL2ZVMWxWNCtIaFZsZGZMeFkzamg4WGF6UWFFQVJKZTVMcDdlMXBKYko4Y1owZTJXaWN3V0Q4VCs2Y3ZJcUxpOHVnUWNGazRQdWZIaEVFUVpQUkVCbzZTS0ZRMXRUVVFSQmtJZVJIUkF3N2YvNmlvNk1UaFVLNWV5OWwzNzRET1RsWnRyYTI4eGNzVWlnVXg0K2ZMQyt2SUE4SyttdWoyWmM5YUU5NStSbUp2ZE9tS0JRS2pVNmpVcWdRQkZFUXBMUzg0cWROUDFzS2hhZFBuMVVvdXV2cTZ0OTVaOUhqeDA5S3k4cjRmRjVOVGUzdzRTTjh2RDBCQUdocmt5UWxQWmd4ZlFxYnpYcHhwVEJCRUF3R3ZhcXFoanpib0krUWNjamhVVkhMbHkvRHNMOFBQZ0YvYnEvaUFvR2dvME5hVVZrOWVQQWdnOTVnNzJDZm5aTlhYVjB0bFVxTGkwdEhqeDVwYjIrWG4xOTAvLzY5a3BMUzl2YU9uSnpjMkRHallSaW0wV2hVS2hXRzRXY0YxLzNDZ3diNmd3WHFsWmRENit5VXBUNThjdnQyWWxGUnFkR0VlbnE0dVRnNytmdjVydnZxaTlPbno1U1dsc3E2NUJpR2RiUzNwNlE4ZEhaMjhmYjIxT3QxVkJyandzVXJGQXJzN094b05CcUJGLzVBQ1lLQVlOakZ4UVg0WC95T3lXOG9MaW1wcTY4bk54bithVkI3SnVWQmc0THYzYnRYVWxwT3A5RndIQjg5YXBSRUlpa3NMRFFZOUVxbHFydGJjZlhxRlJRMWZ2L2RCZ1JCQmc4T3BUTTRYVjJ5aDZtUDc5eEpLaWdvd1hHQ2JKalhIOVFEOUJNTFJLcm5TWHJXdnYwSHhlS21EcWswT3ljM0lmR3VwNmRIVFBTSXJkdDJqSjh3VHRHdHZIbnJGb1B4MU1BTUhqeDR5SkFoZEJyTjF0YTZwTGowMDg4K2o0Z1lOaXhpbU1uNDc4TnJDSUxvZGZxclY2K1RvYjgrM2o4SWduSzVuTThYakJ3WjA3TzQrOXN5ajZmMkNZTDI3ei9ZM053OGZ2dzRvOEhRM2Exa3NWZ0toY0xTMHJLN1cxRlFVRkJlWHJGejU4NExGeTRaallaUFBsNXovUGp4RXlmUHlHVHl4cWFXek96czZ1b2FMeThQQm9QUlQxb3l2SHdMQkFBQTJTYmh4SWxUS0lyeGVGeWowZWdmRUJBV0d2cjFOOS9qQkRFeUp2cnMyZk04UHIrcnF5c2g0WTVlcjQrSWlQRDE5WlZLcFVZVFdsVmRkL0RRRVJxTnhtRnpnSDkzc2pLcExZUEI0Ty92R3hrWkFmenZWc0puenB5cHFxcWgwYWd2dG1vNGp0T29OQ2NucC9yNmhyMzdEcUVZSVpmTElRZ2FQbnk0aTR0TFJVWEZ3NGNQK1h4ZVUxTnpkbmJPc21YdjdkdC9LRFgxMGZqeDR4a01CZ0FRdGpZMkdSbVppVWtQZW5ialgvYlE5UU1MQkFBQUNBQTRRYUFvSGhqa0h6RnNpTkJDY092V0hVc3JvWWVIKy8zN3lTRWhnOUxUTTFwYVdvcUtpanc4UENJakkrVnl1Y2xrSW5QL3JsMjdEaENFUkNMeDl2RUpEeDlxTXVyL3lSSHBBY2R4RHBkTjRNQ1ZLOWYrSjhzeDBnaloyZG1OR0I1RjN0Zy91VUV3RE92MGhsT256bGhhV2lvVUNxbTBrOFZpTlRRMHlPVnlCRUc0WEc1T1RvNWVyK2R5dVZRcTFkUFQ4L0xseTR2ZlhuVDZ6RmxMUytHa2llTjlmYjNaYkxhM3Q2ZTF0YWlmdE1mckZ4bUpwSG1IWVJpQ0lBQWdZSVRSMnRxOGV2WGE2ZE9uNStUa0NBU0N4NDhmVjFWVldWbFp4Y1RFdExhMjRqaHViMi92NCtPajErdUdoZzkyY25hcHFLaTRjdVhxd2dYemZIMjk5UG9YTldYdTZjS3BVbXZtemwxNDkrN2QvenFickFmeUd5SWlJaTVmT3MvbmMxRVVJNVBqL25wZEtwVjI2UEJ4cFZJeFovWXNPb1B4NEVGeVY1ZE1yOWVYbEpRb2xVcExTMHNBQUs1ZHUyWnJhK3ZqNCtQbDVjWGhjTHE3dXhFRVhyOStBNGJwZ1dkTDFCNVgrbVVQWFQrd1FEMXJDaHpIVVJURk1FeXYxMXBhV3JXMXRWVldWbUVZbXBhV1ZsVlZ4V2F6dVZ4dWVYbDVjM096UXFIQU1MeTB0TlRmMzIvNDhFaEZ0MEtwVXJHWXJQS0t5b0ZCQWVUWHZ0aVp4WEdjdzJHN3Vyb21KQ2FSbFRSOWZ4Q0J3R0xPN0hnMm00M2pHUGgzV1FBMEdxMnlxaVlyTzNmNDhFaVRFYld4c2VKeTJEZHUzQ3d1S1pWS3BYVjFkV0t4V0M2WDgzaTh6czVPdVZ5dTArbEVJbEZkWGQyU0pXOExMWGc2bmE1SE9rQS9zRDBrTHo4UzNTdTBTdlRZZVFCSHZiMDgwOU16R3NYaTNMdzhNbmpQNVhMSGpCbmo0ZUhoNU9RSVFXQkhSMGRkYmYzSG4zd3haZkpFSjJmbndxTGJxTW1vVXFrNXozYmovK2szU3M1d09wMHVhbmpFMXh2V3IvaGdaUjhuTW9GQU1IMzZ0Qmt6cGd1RndyK1dKUGRzOWtFUTFOTGNVbDFWN2VicU9uVFlrTjI3OTRuRmpiNitQaU5IeFFnRWd1NXVSWDE5UTI1dWJuWjJ0bGFyYld0cmswZ2tJQWc2T2pwYVcxdVRiWTE2NzlmMkV3djA4Z1ZFOHF4VzRxbXB4d21DeStPVmxwYlcxTlFZalVablorYzVjOTRhT3piVzFkV1Z3V0N3V1V3UUpCUUtsYjkvUUhaMnp1NDkrMmJNbU9idVBxQ2dvSkROWnBNTksxL3dmb21uOVRlUVFhK2JOVHYrd3NWTER4NDgrTzkyNXNtLzh2YjIzdkhMVmphYlJSWVlQWGZkbnJSZEVBUTVYQTZLbWdhNHVXN2V2QVVFb1JrelpyaTZ1bGhhQ2xoTXBsNXYxQTAxakI4M3RxQ2c4Tno1ODdkdTNlcnM3RXhOVFoweFl3YWRSdnRyNzRmK29CNmcvd2pvT1VBUTBPbTBEUTBOZXIxKzlPalJ5NWN2ajRxTUVBaTRCRUdnR0laanVGS2xhbTV1cWE2dWtVcWxLSXF0WExuYXljbHArUERoS0lhaEJoTU13V1RENkgvSzZDREhBOE53SHBjVEdCanc0TUdEUHIxRUJKSEx1eWtJVEpZR1BGY0JRbDVScDlPQklFVGdSSHQ3KzRJRkM1VksxZlRwMHdzS0Nnd0d2WWU3dTBoa1JhZlQrSHkyaFlEajdPd1lFQmc0Y09EQVE0Y09OVFkydHJhMG9DaEtac3IyUS9xamdBaUNBQ0ZLUlVXbHdXQll0bXpad29VTEdReEdnN2l4cEVTbFVxdEFFT1R6Qlk2T0RvR0Ivc0VEL1J2RVRTNHVUaTR1VG84ZnA1V1VsSHoyNlpjV1F1R2FOU3ZKc042TEx3U0NvTW1FZG5SSSszakQzdDVlSXBFVmptTi9tMk5LRUFTTlJzM016RGwrNGhTS29oS0p4TkhSS1NZbWV1alE4SUVEQTRVV0FwVksyOVRjMHRqWVpEQVlhRFFxajhlalVtbFRwMDcxOXZiZXVIRmpiVjJkVXFsa3MyMHh6QWowRzhQVFEvOFNVRStkdVU2cmVmSWtZOGlRSVg1K2ZubDVlWjJkbmJXMXRRaUNpRVFpb1ZCWVhWM2QydG82ZG14Y1pNUlFMeTlQRDQrNXMyYk9OQmgxMmRsNW16ZHZIUlFhWWlIZ2tVa3pMN3dXUUVGZ1NVZG5jWEZ4SDIvWXdzSUNoaUVjeC83NkFmSWVVQlR6OWZYVzZYUzJ0blozN3lhSXJJUVVLcFBBc1RaSmEyTGkvZnNQVW9xS0NpTWlJaEFFNmV6c2JHbHBFWWxFNUdGa1k4ZU92WGJ0V2s1TzN2UVpVOGtVeEg3aSt2ejVnUDFoR2Q4YnNubnZvOGRQNXMxYk9HVElrQUVEQmxSWFY5Ky9mOS9Pemk0dWJ1eTc3eTcyOXcrOGVPSGNEeHQvV3JObXRWUXFOUmlNRERxTnkrVzJ0clcydGtvbWpCODNmbndjaHFFdmZ0SGtvby9GWWlVbTNaczJmYVpPcS8wdmJwVmN2VWZIeEZ5NmNKYkZlbEZvR01keEdwWGEzaUU5Y3ZTRVdOdzRNQ2dRb1NCU2FhZEdvM01iNEZKYVZsNVNVbkwyN0VrdWgzUDEyczJUSjA4OWZweG1hU21NalkyRllUZ3BLY25UMC9QVXlhUFBUWTc5aEg0UmllNkJJQWdZaHJRNjNmNzloL2g4dnB1Ykc1VktiVzV1WHJIaS9XKy8vVWFsVW5aMWRRRUFNREI0b0kyTjdlREJnejVhOCtGYmI4M3FWaWkxT3AxT3A1Zkw1ZU1uL0ttZXY1M0NlZ2R3Y1J4UFRrN1YvWFA2NGd2b2lSWXF1cnVWU3VWZnkrbDdYeEdDSUwzQllHZnZPR3hvZUVGQkFZL1BMeWdvOHZMeVhMbHkrWkozMytQeGVFRkJnUllXSWdpQ0tpb3EvZjM5Zi8vOU4zYzN0NWFXRm10cjYwR0RRZ29LQ203ZlNhUXo2QVRlTDZMUHZlbEhBbnJXS0lPZW5wNVZXRmdVSGg0K2RPaFFpYVQ5Z3cvZTM3UnBzMUtwMUdxMUREcWpzREJQbzlZYURJYnM3RndLbGVYdTdqbHVYS3l6cy9PcWxSOTBkM2NYRmhhL29PaXVWNllSeG1Bd21wdGJiOTI2OVovZlllOHY3Q21obDBna0NvV0NQSDNuQlk4R2dpQUFZUGZ1UDRpS2lwdzRjYnkvdjM5YzNHaGJXd2VqVVplVGs4UGhjS3FxeXNzcktoMGM3Q3NySzhQRGg1dzdmOXJLeXBKR280OGNPY3JPenU3czJmTktoUnA2ZHNiUHl4NnJQK2xIQWdLZW5sNkFYYjE2RFFDSWQ5NVpYRnRieTJUUUZ5MWFuSk9kY2UvZWZRUkJ6cDY3Y1BEZ2tTTkhqMEVRZVByMDJaTW5UOGhsVWs5UGorcnFHZ2FENGVycW1wQ1FCTUdVdjAyYTZkMlJnODFtUzlvN1B2OWlYVWxKQ2ZBZkR3bTVHbWV4MlN3V204ZmoyZG5aQlFRRWZQcnBKeDRlN2dhRDhXOTNNSHFnSUVpN3BEMHpNMnZzMk5pQ2drSU9oOFhoQ1BMemNyLy8vc2ZtNXViS3lxcTlldzhjT0hDa3FLaEVvOUVjUFhvTUJNRlZxMVk5ZUhBL01EQWdOalkyTXpNckt6dUhUcWYzSy9VQS9jcUpKdk9CSkpLTzVPU1VTWk1tMmxpTEhxYWtmUFBOaHIxNzloU1hsTXlZTWQzYnk4UEt5cExENGFBb3F0Rm9pb3BLSGlTbkpDY252Nzk4bWFPalEzMTlRM3o4OU8zYmY1VzB0UW1GZkJSOTNxVWwxUU5CRUlWQ2VaaWF0dUhyYng2bFBnSkI0RDhaRWZKdm82T2pWNjc4ME1MQ2dpQUlLcFhDWmpFc2hFSWJHMnNjUTNIODc3MFRzaVVJam1NVUp1dE93bDAybXowNExPek1tWE1oZzBMMjdkdjcrUEdUMEVHRGpodytZR2RuUzJjd2NCenZsc3ZiSk8xUG5tU3UvZWl6OTk1N0p5b3E2dHk1Y3l0V3ZIL3k1TWtIRDFKR2o0NTUyYVAwUFAxS1FBQ0ZTcTJ1cmtKUmRQTGtLZWZPWDdLMHNycCs0ellNUTE5ditOTGEyaG9BRWExR3FWUXBVUlBLWkREaXhvNGZOMzdjOVd2WHRtejlKVHA2UkdsWnhmUnBrL2F4V1ZldjNWaStmS25ScUh5dXJwbFVqMEtwM3JIanQ5Mjc5eWlWeXY4OGVFZ1FCSXZGV3IvdXkxR2pZekZNLzNTdkRjZFJERU9OUnVEZjFFZ1FDSUlvRklwTGw2N01talZESnBjYmpLYmJkeEk3MnR0Lyt2RjdSeWRYdlY2ajZKWnBOV29LaGVMZzZPVGk2alprY09pVDlLejlCdzY1dXJvV0Y1Zks1ZDN4TTZibjUrZHBOQm9FaG5DOEh4bWgvaUlnTXA4VkFPRG01aFpYVjFjbWs1bWRuVlZmWCsvajQ3Tm05UWNnU0NoVnFpdVhyMTI4ZExtK3ZwNUNvZmo0K1ByNStVNmRNbkh5bE9rVUt1M0NoVXR1Ym01U2FkZWloZk4vM2ZuSGxNa1RMUzB0VENiVFgzZFZRUUJnTUpnTUJrT3BWQUwvV1drWStSbDdlM3RYVnhlalFXMDBHaUVJN0VscmYwR0Z6Wjk5Wkpqc3MrY3VtVXltS1pNbjNiMTdYeUtSR0kyR3paczJNcGpNYTFjdnB6eDhWRjFkM2REUXdHYXpCdzRjK082U3hVRkIvcEdSUXkwRS9COS8rcm1wcVRFckt5c2dNT2h4MmhPTldpTVE4SEg4ZjFsUzBrZjZsdzhFQUlUUmhEazZPb3JGNG9LQ0FnNkhzL1M5eFJpR21rellqbDkydnZQdWV6ZHYzalFZREd0V3IvcjBrN1crUHQ0WExsNHRMTWdiTnk3T3k4dlRZRENrUGNrWU96Yk8xc2JtNE1IREZDcXRkeEl4QUFEa2hoU1h5OTZ3L29zN2QyNU9uVHFsZHgvQ0YwQitRQ1FTOGZrQ2dzQmhHQVpCQ0FUSjdSRG9uN0pIZXJiQXFGU3FwSzMxNk5Gajc3MjNSS3ZWMXRVMzZIUzZ5Wk1uY25uY1k4ZE9sbGRVeHNkUDM3QmgzWWdSdzNOeWN2YnQyemQzM3NLOHZFS1QwZURyNTdOZy90ejYrb2JzN0J3QUFLMnNySHBDUVM5N21QNmszd21JeitPSVJOWk5UVTFxdFhyY3VIRUFBTUV3blBMdzBTODdmc1V4REVHUTlldS9XdlQyNG9BQW4yblRaNHdkTytibXJUc0FRZGpZMkloRUlyMWVYMVZkL2VXWG45Njlkejh6STR2RmVwcSsyT05Ua3lPcTAya0hCdmtmUFhMd3UrKytZVEpaLzFaRDVIOTFjSEJnc1puazlQR3Nld0x3NHI4aXIwdWhVbi83N1E5N2UvdXBVeWNtSk41MWNYRm1zOW51N202bEpXWHQ3ZTFyUDFvVkVSRStaTWlnN2R0K2pvdU5CUUNndXJycXg1ODJhYlU2alZydDQrTVhHQmpRMk5nb2w4dnM3T3hnR0FMNldTaW92d2pvNlVTQVkvWU85aXFWcXFLaWdzUGhPRGs3YTNVNkNJTHYzRWxVS2hVUUJCRUF3T1Z3QVFEWGFEUWF0VnpScmJDMXRRVkF1TG1weWNuUlBpcHk2SU1IS2Y1K2Z0T25UL3RwOHhhRlFrbWhVSG8wMUx2dVRLdlYwZW0wOWV1KzJMdm5ENkZRK09KY1pnekRMQ3dzWnMyS1I1RC90SlhIMHkxaEhHZXkyRGR2M0VsT2VmanROK3RMUzhwbE1ubGM3R2lOUnR2V0poRUkrRXdtczYxTm9sS3FOR29OaFVKaGN6amtuejk4bUZwU1VrNmhVSFI2dlp1Ym0wNm5hMnhzdExBUXNObHNyQjgwVk9oTmZ4RVE4SFJueXVUcTRvTGplRmxabVlXRkJReEJHSVlaak1iR3hrWUFBQ0FJd2xEMGoxMjdhMnVxZVh3TERDY2NIQjBXTFpwWFhGUlUzeUQyOC9mMTh2YmljRGkzYnQ5WnRmSURCcDIrYWROV0NvVUsvR3RqVGZKYU1BeGpHS2JYNnhZc25MZG45NHMwUkJERWhBa1RMbCs2TUg1Y25QSGZyZFY3L3VTcDY4T2cxOVRVYk5tNmZmWHFsUzR1em9sSjkyS2loM041RnY3K1B0ZXYzYlMxdFpreGZhckJhR0t4V0F3RzQ5VHBjd2tKQ2VSN1VDcVY5UTFpR0VZUUJMR3pzMU1xbFZWVlZXNXVBemdjVGs5VDJINUNQeElRQUFBb2lncUZGbjYrUG5WMWRXcTEybVF5WVNnR0VBU1pyME1HN21BWVBuam82UEhqSi9KeTh5U1N0c09IankxZDluNW82Q0EzdHdGNm5YYjh1TGpTMG9vR3NYanIxczBabVptSERoOWpzcmk5UzJHQVh1dDVFQVExYXZYTVdUTzJidjJaRExFODF4Y0JBSURnNE9COWUzZU5pSTdxNlgvNFlpUFUyL1ZScWJXZmZQTEZrQ0ZoYjcwMTcvU1o4MDVPam9HQi9ucWRJbjdHdExMeThzWHZMQzBxS201cmJibC8vOEh2disvTnpzN2g4WGprZHdBQVFCQTRUdUJhclZhdjF6YzJpdFZxOWFDUWtML2RibnU1OUM4QkFRQUFBTVNvVWRFY0RvZXNsbElxbFZRYTFjYkdGZ0FBc3JYUEYxOTg5czQ3YnhjWGwxNjhkRFVuTzQvRllnWDQrMmRuWit2MWVoekhyYXdzb3FPSFg3cDBWV1JsdVhuVHhuMzdEbHk4ZUluRjV2MnRoa2czV0t2UkxGZ3diODJhTmVUbG56TXdVNmRPc2JPelVhdFUvN2FmUVk5TGp1RTRnaUFtRlB2b28wOVpMT2JtVFQra3BhVjJkY2ttakk4MUdQUTBHcjI4b3Fxam95TXNMRlRTTHJsN0wvbnlsUnNNSm1QcjFzM2p4bzBsdjRmRllqazVPWm1NcHE2dXJzYkdScm04T3pRMDFOUFQvZDhXM2Y2LzUrV250UGJRczhrZ0VvbHduTGg1NjVhTGk4c0F0d0hPVG81S3BlcmF0ZXNFZ1lNZ3lHS3lsRXFsazVPVGhZV0ZuWjN0elBpcHc0WU4zYk4zdjhtRURZdUkwdXUxems2T25WMnkxRWVQcDAyYmJtOW4rK09QbTZ5c0xBT0Rnb3lHZjJscTBkc3hBZ0I4OEpEQmNya2lOemNYQUlDZVhwWTBHdTNERHovdzl2SHFTWlgvWi9VOC9VNE13NmhVS29yaEsxZCsxTlltT1h6NFFMdWsvZWF0aERtejQ0VkNBUVRCS3JWbTFlcTFNVEhSSDMvOENaMU83ZWpvOVBUME1KbU1HUmxaS1NrcFRVMU5BQUFNSERodzllb1BsVXAxUlVYbCtmUG51Vnp1dHEwL1cxcGFrRTM3K3BXRytwR0FnRDlQUE1FQ0F3T3JLbXV5c3JPQ2cwT01SalFvS0NBbkoxY3NGdU00enVQeFB2eHdCWnZOa3N1N0h6MUtVNnZWNGVFUk5qWldlL2Z1ZDNjYllHRWh3REFzSU1DL3RMU3NyTFI4Um55OFNDVDg4YWROYkRaNzBLQlExR1FrbDFHOXB5RnlVNTFPbzQyTWlhWlI2WGw1ZVFhRGdmeFBiRFo3OGRzTFhad2RUU1lUQVBUdUhQVXZFOW16UlI1Qm5sZXZVbXZXcnYxTUlwRWNQMzRVdzdEakowNVBuRERPMDh1bnEwdUtvdWd2TzNhcVZhcWZmdnhPcTlOczMvNGJBQUNPamc0eDBWRXltZXpvMGVQazRRb2JOcXp6OC9VcktDek96czUrOENCNTU4NGRJMFpFNm5SNk1sZmZMS0IvcEpjRFFSaytQQ28vdjFBaWtYQjVQQkNFSXlNakhqOU9rOHZsUC8zMG82ZUh4OW16RitKaVIxdFpXY0VRNHVuaDR1emk4dWhSMnQyNzkxQU1mL1RvQ1FMRFk4ZkdQa25QcUs2dW1qbHp0cXVMMDlhdHY4amxzcUhoUTJnMEt0bmNpV3dmMWxPa1FaNi9QR3IweU1qSVNCUkZ5UTMyV2JObXZ2WFdiRElhU2FWU0tSUUVCQUVNKzdPZWh2U2xFQVJCRUFTQ0lEcURWVlZWL2NHSHF5a1U1T0NCZlJpT0h6NThMSHBFcEwrLzMvSGpKOU16c3JLeWN5OWV2THhpeGZzREI0WW91cnRWS25WczdPaHVlWGRlZnNIQ1JRdVNrMU5xYTJ1WExsMjZZTUg4N0p6OGxwYVdoSVNFRmU4dmUvdnRCWVpuNXJOZnFRZm9id0xxTmEzZ1ZDcFZMRzRzTEN5aVVDaHF0WnJINDQ4WU1ieXVydDdXMXBiUDR5Y2wzWTJOR3pONGNMaVRreTBJUVFjT0hpNHVMZ2tORGZQeDhRNEtDcmgwK1FxTlJvdVBuNWFSa1ZsUlVURjEyclRRME9COSt3NmtwMmQ2ZUhqb0RRYTVURTRRSUlmTFFXQ0kzRFdqMFdnb2lvbkZqWHcrYjlxMHFiTm56NXc5Wi9hc21kT1lUQ1lFUVFoQ2FXcHFhV3VUQUFERTUvT2V0WDhBR1F5RzBXaVN0TGZMWkhLVENVMU9mdmpaNTErRmhRNzY5ZGRmNVBMdTR5ZE9qUm81SWpSMDBMWnR2OElRTkdiMFNLbTBpMHFsWm1abSt2cDRPVHJhQlFRRzJOZzRwR2M4S1N1dmNIRjJ2bkhqNXFoUm94WXNXSkNmWDlEVzFwcVhsNGRoMktUSkUxMWRuRkFVQlVHb3ArNmcvOUR2RXNwSXE4QmtNaytjUEZOYlcyODBHbXRyYTUyZG5hbFVxck96czBBZ1VDZ1VrUkVSSjA2ZXVIejV5dkpsUytmT25TMjB0RnE4K04yQUFQL0lpR0ZYcmw2UGlSN3U1amJncTNWZmp4b1ZNMlh5eE9TVVZMVmFNMy8rWExWYXZmR0hueDRrSjZ2VmFnOFBqeUZEaGxoYUNzZU9qWFViUUFZT0tuZit2cXVscFNVZ0lJREZZZzRiT2pSdWJLeE9xNFpodUt0TGZ2TFVHWVZDSlJZM2RIUklZMk5IdmJQNGJSYVRUZ0RBL2ZzUGMzTHpKQkxKbzBlUHRGcXRuWjNkOG1WTDU4MWZVRnhjY1B0MjR1alJNWFFhYmMvZUEwS2h4VWNmcmRxMWE2KzF0WFdBdjk4dk8zNmJPWE5HZlB5czNOek1IVHQrTHlnbytQWFhIVENNMU5mWDgzaTgydHJham80T285SFkzTndjRXhQVDBORHcvdkozWFYyZERRWWorTmQ2czVkTi83SkFKQ0FJRWdTUWt2TElaREpaV1ZrRkJRWGR1WE9ucnE0dU96dGJKcE5oR0taVUtVZVBIaTBRV0p3OWQvN0sxV3NTU1llMXRmWE0rSmwrL2dHdUxvNUhqcDBjTmpUY1lEQzF0a3BLUzhzbWpJL1Q2blFKQ1VrZUhoNXozbnJMMHRJaU16TXJQVDA5TURBd0tDam83Tm56TmpZMk50YldENUpUcmF5RW5wNmVDb1VpTGk3MjB1VXJUQWJkemMzVlpFSi8yN21ieStWNGVIaDB5K1VUSjR6clZpajVBb0d0bmMzZXZRZkx5aXVDQWdPUEh6OWVWbFkrY2VMRVgzN1pHaDBkY3pjcDhVbDYxdlRwVTJwcjY1S1RVNDFHNCt4Wk14OC9mcUxSYUZldVhPN2c2RUtsVWhzYkcwK2ZQck43OTE0K24vL1ZsMTh5R2ZUMGpBeXhXSHovL3Yyc3JLek96azR1bHp0bHlwVG01bVlBQUFVV0Z1N3ViaWFUQ2V4bkRoRFFmelpUZTBQbUpiSllUSWxFMHRnb3B0SG93NGNQYjI5dno4dkx1Mzc5T28xRzF4djBOQ3B0K1BDb2tTTmp1cnE2enAwN3AxUXFsVXJsaHg4dWQzUDM4dkh5eXMwcjhQSDJjblMwcDFBb3gwK2MyYkQrYzVISTZ0eTVDNkdoSWJObXpSdzFNbWI3TDc4bEppYXUvUEI5UzZIZzdObUwvbjYrOFRNbU01aGNyVmI3MVZmclBEM2RKMHdZK3pEMWNjeklNYzNOWXFsVSt0bG5INTArZlg1ZzhNRFpjK2JxZFdvNm5mbzRMYU9tcG5iTHp6L3UyTEdUd1dEY3ZIbHQzTGh4WFoyZGh3NGRRbEgwM1hjWFNUczZIajU4dE9TZFJmZnVKek5aelBMeWlubno1b0FnOGlUdDBhRkRoNHFMaTcyOXZXTmpZd21DK1BhNzc0cExTdWcwR2dBQURBWWpPRGpZMTljWFFaQnIxNjVaV1ZsUnFGUXVoMDMwc3dCMEQvM1JBZ0VBQU1Nd2g4TkpTWG1vMWVxR0RoMGFFaEppYTJ0cjBPdVh2UHZPd29VTEF2ejhUQ1pUV2xwYVVsSlNlM3U3bzZNamw4dTlkZXRXZW5ybXFKSERDUUNzcTZ0emR4dlExdFkyZWxSTVl0STlkdy8zZ0FCL1Z4ZW5uTno4OVBSTWUzdmJtVE5uTnphS3BSM1NtYk5tWDdod1h0R3RDQTRlaUpxTWh3NGR3VEJzMHFTSk5UVzFOVFYxQlFVRjVSV1ZScU14S2pLQ3krV2NPM2ZSMWxiazVPZ2dhVy9mc1dQbnFGSFJmbjYrZS9jZC9QYmJEVEV4SSsvZHUzdi9mb3FucDhla2llUFliTzYxNnpldHJLeENRNE9yYStwRUlxdkt5dW9KNDhlZVBIbnEvUlVmcXRWcWIyOXZoVUp4NDhhTmh3OVQyV3oyMUNtVGx5NTliK0dDQmZiMkRqd2VMejQrbms2bkl3aVNrNU16T0N4MDFLaG9NcnJZMzh3UDBBOHRFUGowVkcrRGo0OXZVRkNnUnFPMXRyYldhclhaMmRrTEY4MExDeHVNNDlpWU1iSExscjByRmpkbVorZGV2SFE1TlRVVmhtRTNON2UwdExTUDFuNjJjT0VDSE1jSWdyQzB0QUpCc0xPelU2dlJBZ0JoWVNGWU1IOU9kazcrM2JzUHlrb3J1cnBrY1hGalZDcTVUQ2E3ZWV0T2JsNEJnOEhJenNuWnQrY1BBQUF1WHJ4Y1dGUTBmOTdjK3ZyNjI3ZnZ4TVNNbURCaGtwZVgrOXExbjhUR2pxbXNyR3ByYTJ0dWJvVVJ1cE9qNDVNbkdZMk56WHE5WWRxMFNRNzJ0anFkSGdEZzl2WjJGb3RGb1ZBRkFvRlNxV1N6V1k4ZVAvNzBzODk1UEI2TlJrdE9Ublp3Y0ZpNmRPbTRzWEVCQWI0aWtUVUF3Z0JoaWhrNS9JOC85bVJsWlZsYld3Y0ZCVFUyTmc0ZkhzWGxjclJhN1FzSy9sOGkvZFFDQVFCQW9TQWRIVktaVEdaalk2TlVLcFVLeGJqeFkrbDBSbE5qVTNWMWxZMk55TUpDRUJRVU1HZk9yTmpZV0tWUy9manhJd3pENnVycVRDYlUxZFhWMWRYRjF0YW1xYW5wNE1IRE1ybDg0TUNCQW9FQU5SbWRuUndKQXRpeWRidUR2WDFrNUxDZmZ2bzVMR3h3ZUhoNGZYMTlkWFhOeXBVcklpTkgvUEg3cmdzWEwyMzVlZFBDaFhNakl5SWFHaHBQbmp3VkV6Tjg3Tmd4UlVVbERRMWlkM2YzSlVzV1AzaVEzTkVoaVlnWXRuZnZmZ1JCRnIrOXdGSW9JQUNBUm1ja1Azand4NjdkS0lxTkdUTWFSVkVxaFpLWm1YM3UzSVhLeWtxajBjaGlzZGF2WC9mYnI3OU1tVHJSeGRXWnlhQkxPN3VLaTBzc0xTMm9OTFpTcVJDTHhUYldJZ3FGMHRFaEhURThrazZuOWF0NitONzBVd0dCSUlqam1JMjFkV05qODhPSHFaWkNDMHNyeTl6Y2ZBU0JUNTQ4blY5UU5EWXVsandOSTcrZzhNNmRCQ2FUd2Vmek96bzZ5TmovOU9relltTkhhYldhYTlkdnNWaXM2dXJxaXhjdnE5VWE4aFNjd29LaTV1WVdvVkJZVUZCSUVJUkVJaEdKUkNLUnRiVzExYUpGQzVLU2tqWnUvSkZLcFV5Wk1zWFowVUZ2TkJRVmxkeTRjVU9sVkllSER3a01DS2lwcVIweFluaDZlb1phcmU3dVZrZ2tFamFiRFlKZ1NNaEFQcDlmV0ZqOHcvYy9uajEzM3NyS3lzN09YcS9YanhvWnpXYXpqeDAva1ppWWlDQ0l0N2QzVEV3TUNJSU5EUTNPVGs0SURFTVFWRmNuM3JoeGsxQW9iSk8wNXVZV0JBUUVKQ2VuTkRZMmpSa3p5cmRYSFB4bEQ4dmYwQjhGMUxQUFFLZlR2TDA5cmEydFMwdkxIUnpzaFVMTHVqcnhvMGVQWXNlTTh2ZnpRUkFrT3lmLzBLRmpJNFpIaFlXRnVyaTRCQVFFMXRiV3FGU3FEMVlzYzNKeXVIVTdpVUtoMWRmWFF4QmtiMi9YM3Q2ZWxIUmZxOVhGeEl5WVBHbUN0NWZIK1BGeE9FN29kUHB4NCtKdTNyeTErTzIzczdKeWpodzVHaDBkYldOajg5MTMzOWZVMXYveHgrNkNnb0tWSzFkMkt4U1BIcWRGUjBkcnRkclcxdGE0MkRGbFplV2ZmTHdtTERRa01uTFk1TWtUMnlTU1BYc08zTGh4aThsazBHaDB2VjQvWUlBcmpDQWdCTHE3ZTZhbnAyZG1aczZlUFd2WnN1V0JnWUdEUW9KTGlrdVRVMUtIREFtalVpa01PaU03TzZlNXVVVWtzbloyY2l3cks3ZTJGczJaTTlQUDE2dWZuOTNjSHdVRTlENTBGNEpjWFYxZFhaeXlzbkxrY3JsYzFoVVJHVEY1eWtTQ3dBMEcwNzU5aDZaUG4rYm43Nzl6NXg4UEhqd29MaTRXaThYMjl2YXJWbjNZSWUzVTZRekp5UThVQ2dXQ0lDT0dSODJlUGZ2cXRXdGJ0bXk1ZFN0QkpwZmIydG9DQUhqdDJzM2x5OS9OeU1pazAraHU3bTdIangvMzl2WW1DS0sxdGRYZDNkM1d4dHBDYU1GZ01EVWFqWitmWDFkWGwxVGFHUjA5SWlucFhsenNhSU5CWDE1UjZlbmhrWnlTdW0zYkwrdldmWjJabVRGelp2elNwVXRUVWxLc3JLd0tDZ3FDZ29MWWJJNjluYWk5WFhyNzloMEFBR3ByYXdzS0NoZ001dkxseXpJeU1sUXFkV0NBUHd4RGdZR0J6YzB0U3FXeVF5b2Q0T284WjNZOGo4ZEZVVlAvUEtpd2gzN25SSlAwM3VuVXFGWFcxcUozbDd6ZDJpYWgwMm5XSWl1ajBRaEJrRXFsbHN2bGNubjNybDE3SEJ6czMzMTNjWEZSOFJkZnJyY1NpYmhjTHAvUHUzbnpUbjVCd2FHRCs2OWZ2MWxhVnBHZGs1ZWRuYzFrTW1OalIxTW9sSDM3RHJhMHRMcTZ1bGdJQkRVMXRUNCtQc25KS1ZaV2x1OHVlV2ZkK2cyREI0Y3VYL1llak1BZ0NEWFVOM3o3M1VacmE5SElrZEcvL3ZwN1VGQVFoOFBPeWMzMzgvUDdhTzBuU1VsM2hVSmhTRWhJWjJkWFltTGlsU3RYWkRJNWg4T1pNbVd5V0N3K2VQRFF3WVA3S1JTS282TWpETU8rdnI3dkwzOFBKNGh6NXk3dytYd3FsZGJZMkFRQWdNbGtjckMzZlgvNWUyMXQ3VHdleDhKQ1lIaDIxbTUvVmcvUWJ3VUU5SElZWVJnbXpiaVRvejFCRUdSZU1JcGlscFpDSzB2TGpSczMydHJhYnR1NnhkdkhKemc0QktGUUxsMjZRZ0NBVEs3WXYzOC9qVVp6ZG5hY1BYdm0wV01uNnVycUpCTEozTGx2YmR1MmpjQnhqVmFaa0hBdk5mVlJnN2k1czFNbWs4bnI2dW9DQWdMdTNydkhZTkNYTDNzWHcwd0dnNTRnQ0JkWDEyVkxseHc2Zkd5QTZ3QUtCYW11cnNaeHZMVzFsY2xnK1BuNXJsMjcydGJHbHM1Z2p4bzFNak16czd5OGZQRGd3U0VoSVhGeHNlZlBuOC9NekxoMDZaSy8vemNHbzJITW1ERTdkKzRRV3ZBaG1GNWFXcjUzNzE2TlJyUGw1MDJrUHNnU0FHZG5CeHpIeWNMK25yUE0rcTE2Z1A0c0lCSVFCSHNPVHU4NVdoc0VRWndnQUlCNC8vMmxJQWpldUhuei9SVWZSRWVQbURoeHd2RGhVZmZ2SjlmVk5XUmtaTlhVMUJpTnB0OSsrMlBCZ3ZsVXl0TnF3L3o4Z2wyN2RuVktPNVVxSlFSQzFkWFZUNTZrVjFWVkNvVVdVcW0wdWJsWkx1K21VQ2d3REJzTmhxY0hObUVtRG9jamtVakt5c3ZiMjl2YjI5dXJxcW9JZ21ocmt6UTFOUjAvZmtxbFVybTV1ZFhYMXl1VlNnc0xDd3pEMkd4MlZWWFZqaDIvQWdCdzUwN2k5T2t6YW12ckl5TWplRHp1eVZQbnNyS3k3OSsvYjI5dnYyYk42aUZEd25vZm50TDdHZnV6NGVtaG4vcEF2WG5hd0t3WEJFRkFUMHNzT05FeEk0WU1Eck8yc1FrTThQZjM5Mld6MkE4ZXBEUTJOcGFXbHVibDVRRUFrWnI2cUxhMlRxdlZWbFNVZDNSMDBPbDBHbzFHb1ZBSUFpd29MSHowS0xXcnE2dTF0YlcrdnQ3VzFqWXRMWTNENGFTbFBmSDA5UEwwOGtFUWlFYWptVkJzNSsrN0tpc3IxV3AxZFhVMWs4bE1URXdrMng0ME5qWUtoWllzRnJ1clMxNVNVdExRMEFERE1JVkMwV2cwbXpadExpZ29CQUFBQUFoYlc5dTh2THp3OExEQXdFQW1rd0ZCME1pUk1SOStzRHdpWWlqMlRESFBQU1BRdnczUG42UFQzelpULzBPZWVka0VDQUkwT2gyQ0VJTEFERG9kalU0L2NmTE1qaDIvYVRTYTZ1cnFuc1FkQkVGUUZKMDNiOTZhTmFzUmhHSnRMVXBMZTNMMTZyWGEyaG9Nd3dHQUtDa3B0Yk96MCt0MVpITkNlM3VIK2ZQbitmbjU2UFg2cEtSN1Y2NWNwVkFRQ0lLY25aMWJXbHJZYkxhenM3UEJZQkFJQkVPR0RKazVNNTdINVVvN1pmWDF0Vjk5dGE2MnRwYk11U2F2em1ReS9mejhSQ0xScmo5K3M3T3pBUUNBUXFVREFJR2FER1NHNGF0aWJQNlcvajZGL1JQUDhwcEJnaUQwT2wzUEFCaU54b2tUeHFXa3BKNDhlWkw4SkFSQlpMclAzTGx2L2ZicmRvbWtnOC9uMzdwMU96czdlK0dDdVQ2K1BuUTZYU3FWMXRYVzNiNlRXRmRYNStMaWN2NzhlUTZIN1RiQXhXUXlNaGowQVFOY1lSZ0tDUW54OGZHcHE2dGI4czdpME5CQnpzN09MQmFyczdQelFYTEtybDI3MzN2dlhUcWRFVEZzNk5FakIyZlBtZGZhMm9vZ0NKa0FyOVZxR3hzYlYzNzRvYU9qUFprdlJyYlQ3MjFRWDFIMUFLL0VGUFpQOUxiejRMTTZQeHpIbVV6R29OQlFwVkpkWFYxTmV0d1locm03dSsvYTlVZDFUUTJYeXkwcEtiNXg0K2JHamQ4R2h3U3pXWFFxbFdKcGFlSHQ0ek0yTGxiV0pZK09pUkdKckxLenM1Y3NXVEp0Mmd3ZmIwOHlwcmR6NTI4bUV6cDdWdnpjZWZNZEhHM1piQWFEUVJNS0xZWU1DZGZwTkdmT25KMDBhWHgrUVpHYm01dVZwV1ZDUW1KUDYyQXZMKyt2dnZweTdsdXpTRDJST2FuazNiNUNVOVUvOGFwYW9ONDhWLzF1Tkpwc2JVVGJ0Lzg4ZCs2Y3pJeE1tVnlXblowYkdqb0lJSWoyOW83SWlLSGJ0djB5Wjg1c0J3Y25sVkt1VktvNVhBNlZndWowU2lhRFBtNWM3TEhqSjkzZDNmMzgvSDcvWTVlYis0Q0hLYW1abVZrVEprd29LeXN6R2czRGgwZG8xSElBQUJBRWtjbmtDQUp6T0t3WjA2Y2xKNmMrU24wY0ZSVjU5MTV5VEV4MGVIaTRyNiszbGFXVnU0ZEhaTVF3ZC9jQktHcnFWNGVrL0s5NEhRVFVRMCs5anNsa29pRHdpT0VSVVpGRFlZUng3TmdSdlY1ZlVWbnA2T2hnTkJyVWFyV1RreU1Bb0J3dS8vYWR1NDJOVFd2V2ZFQVFoRjV2OFBCd2QzUndLQzR1Q1FnSTBHcTE1ODlmYW10cmk0aUkwT3YxSlNWbGk5K2VEMEVRUVFBTUJyMjZwbTcvL2tPZmZySUdRU2d3UXJlMnRxNnFycDQxZTZiUmFHanY2QXdNRFB6aTg0OWRCN2pqdUluQThaNERjbDh6OVFEOXNxeW5UL1JvaUNBSW5VNm4wK2tBd2toQmtLNHV1VmFyMDJnME1sbTNyWTNOeFl1WHUrV0tUbWxIWldWbFltSmlTM01yaFVJaGU2eDZlWHRKcFowR3ZkN2YzMy9YcmwxaXNkalcxbFlxbFRJWTlBRURCaGlOUmhBRVlBUk9UOC9JeU1pc3Fxclc2WFFseFlXRmhZVitmdjUxdGZWVUtxV3RyWTFLcFVJUVpEUm9kVnJ0YTZ3ZTREV3pRQ1M5SFFzSWdqQU1EUTRlK0NROVU2ZlRXMXVMcXFyckprK2VlTzkrOHVhZnR6T1pUQnFON3VIaFlYeDZ4ZzlBRUxoUUtBQkJRS0ZTTVpsTXFWUkt4b1NVU3FXYjJ3QW1rLzYwRVNKQmdDQVFIQnljbFoyYjh2QlJaMmZYcEVrVDJHeVd0TE5McDlVVkZaZTR1cnJZMmRtWlRFWXlCK00xOEhYK2lkZk5BdldHL04wYkRFWVBEN2U0dU5qVTFOU1VsRlJ2TDgrVzFyYkl5SWpCWVlPOHZiMjd1N3NMQ3d0TktFcDJtaUpyZFF3R0E0SGpNQXdqQ0VLbjB5RUlRbEdzcDQ2SElBZ0FoTnJicGJtNXVVS2hwWit2Ny9oeGNUUWFBOGNKQnAxKzhkSVZITWRuVEo4S2duKzJZWGpaYitML1IxNURDOVFiY3ZCTUpsTmM3Q2duSjRmangwOGxKQ1pHUjQ5SVMwdnY2dW8wR2sxdGJXMElnaEE0UVo2MUFFRlFkN2RLcjlmYjJ0b2FqVWFGUXRIYTJrcWxVZ2tDNyt6c05CcE5WQ29GQUFEZ2FXVTBVRlZWSlJBSUdBeUd0N2UzdGJYVmdZT0hac2JQaUkrZnl1R3dqVWJUY3gydVhrdGVad3NFOU9xcWlhS21vS0NBcjc3NlhDcnRQSExrbU1GZ0JBQUl4M0Urbjc5OCtUSjNkN2VueFlRZ1dGSlNiREFZTFMwdEt5c3JDWUlvTFMzRk1Fd2dFRFEzdHpTSUc4a09ua2FqOGEwNXN5Wk5tb1FnaU1tRVFoQmNYbDYrZi8vQjBhTmlsaTVid21henlJMnQxMTQ5d0tzYmlmN1A2WDBhRUlWQ0FVQ3dyS3l5dXFwYWI5QkRFT3poN2hZV0ZxTFg2M0NjWUxFNTVlVVZHemR1SWdnaU1qTHkyTEZqV1ZsWkFBQjgvdm5uSUFoV1ZWWDUrL3Q5KzgwNms4bGtNcG1vVktyQllFeEplYXhRS2xDVDBVb2tDZ3dNc0xlejBlbDBBQUNTRWM3WDArdjVWMTdoUU9KL1NNOGdrbUZHQXNmdDdXejkvWDJEQWdPUEh6K1puWk03ZXRSSUtvVUNJMGhGWmRXdVhYc0pnaENKUkF3RzQ5YXRXNk5IajZiVDZlM3Q3U05HakpCS3BaMmRzcmEyTmw5Zkh3YURRYUZRaWt2S2Z2cHA4L2p4WTZkT20rSG01c3hrME1rRlYwOUg4TmRlUGNDYllJRjY2RzJLR0F4R2JsN2gxMTkvRnhZV3ltQXdiR3hFQ29WQ0xHN0NjVndxbFM1WnN2ajA2Yk5kWFYxcjFxeXByS3pjczJmUDU1OS8xdGJXbHB1Ykp4UUsyV3lXcTZzTEFBQlNhVmR6Y3pOQjREdCsyVW8yWG5tTmwrdi94R3Z1QS9XbVoxREp6UTJSeUZKa1pjVmdNUGg4Zmt1cnBMdGJxZEZvTWpNejU4eVp4V1F3aW91TFo4MmFGUmpvTjNyMHFHSERobDI3ZG4zUnd2a2NEcWVrcEJRRW9ZNk9UcVZTYld0cnE5UHAzZDNkU2MvNjFkcEYvMS94K2s5aHp3R0NJQUNBT0k3emVOekFvSUQ2K29iT3prNGFsVnBjWEp5ZW52N1RUeHNqSXlPWExsdE9wOU5YckZndXRPQnpPR3k5d2JSNzkyNCtYN0JodzFmNStma0pDUW1lbnA0NGpzdGtzdkR3d1cvTmlYOERkZFBEYTc2TS8xdkk0VVpSMU1YRmFmWHFEMUFUbXBkWFVGOWZmLzc4R1Q2UDk4TVBQd1lIaDhoa01pNkhoZU00bmNGQVlHakVpQkdOalUwSERoemF0blh6M24wSE9qdGxINnhZeXVGeUVRUXg2SFg5NUFUdWw4SWJOSVgxMEpNbmFqS2FOR28xaFlLMHRVa1VDc1hkdXcrKy8rR25xS2lJYjc5ZGo2Sm9mbjRSZzhuRVVDdzlJMlBreUpodnY5M1EwZEh4emJjL2RIY3JHaG9hVENhVXdGR3RSdjJDZzEzZUJONGdKL3F2OUNnSlJkR2MzSHlaVEJZU0V1ems2QUJCMEsxYkNXZlBYZHk3NS9ma2xJZm56MS9jdG5XelVDakFNRHkvb0xDNXFkblB6OWZWMWJrblllT05OVC9BR3k0Z0VqSkJsa3FqZ3hDRW1vemtkaW1WU3R1NWMwOStRUUdLWW10V2Z4Z1dGa0lXRjlQb2RBaUNVZFJvNm4vdENsOEtiK0lVMXB1bnFiRUVvZE5wTldxVjBVVEtBc1JRZE1tN2I4TXdQSHBVek9BaGc3VmFMUVRCQUFEb2RUcU5Xa1gyKy8ybkE4TGVLTXdXNkhsNmZCb0lnbEFNaHlDeU1xTWZuYlRkcjNnVFYyRXZwa2NvT0k3REVOa0kwYXllZjhRc29MK2hKNjd6WEZQcGwzMWYvUkd6Z0Y1RTcrRDF5NzZYZnNxYjdrU2I2U05tQVpucEUyWUJtZWtUWmdHWjZSTm1BWm5wRTJZQm1la1RaZ0daNlJObUFabnBFMllCbWVrVFpnR1o2Uk5tQVpucEUyWUJtZWtUWmdHWjZSTm1BWm5wRTJZQm1la1RaZ0daNlJObUFabnBFMllCbWVrVFpnR1o2Uk5tQVpucEUyWUJtZWtUWmdHWjZSTm1BWm5wRTJZQm1la1RaZ0daNlJObUFabnBFMllCbWVrVFpnR1o2Uk5tQVpucEUyWUJtZWtUWmdHWjZSTm1BWm5wRTJZQm1la1RaZ0daNlJObUFabnBFMllCbWVrVC94L053T1RiUUFQbFB3QUFBQUJKUlU1RXJrSmdnZz09IiwiZGdlLWljb24uaWNvIjoiQUFBQkFBWUFBQUFBQUFFQUlBRERmUUFBWmdBQUFJQ0FBQUFCQUNBQUtBZ0JBQ2wrQUFCQVFBQUFBUUFnQUNoQ0FBQlJoZ0VBTURBQUFBRUFJQUNvSlFBQWVjZ0JBQ0FnQUFBQkFDQUFxQkFBQUNIdUFRQVFFQUFBQVFBZ0FHZ0VBQURKL2dFQWlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFRQUFBQUVBQ0FJQUFBRFRFRDh4QUFCOWlrbEVRVlI0MnUzOTk1TmM1NW5uQ3g1djAzdHZxN0s4TDNoREVDQUFrcUtUMU9xWnRyZnZSTnlkamRqWS9YMWo5eSs1czdOM0pucHZkdzliclpGRVVSSkpBQ1E4VUNqdks4dWw5OTZjazhmdkR3Y29GUUU2aWFUWWhjb1BnNHlxWWxiV09TZWY3L3MrNy9zK0JtU1pPdENseTNFRitxRXZvRXVYSDVLdUFMb2NhN29DNkhLczZRcWd5N0dtSzRBdXg1cXVBTG9jYTdvQzZIS3M2UXFneTdHbUs0QXV4NXF1QUxvY2E3b0M2SEtzNlFxZ3k3R21LNEF1eDVxdUFMb2NhN29DNkhLczZRcWd5N0dtSzRBdXg1cXVBTG9jYTdvQzZIS3M2UXFneTdHbUs0QXV4NXF1QUxvY2E3b0M2SEtzNlFxZ3k3R21LNEF1eDVxdUFMb2NhN29DNkhLczZRcWd5N0dtSzRBdXg1cXVBTG9jYTdvQzZIS3M2UXFneTdHbUs0QXV4NXF1QUxvY2E3b0M2SEtzNlFxZ3k3R21LNEF1eDVxdUFMb2NhN29DNkhLczZRcWd5N0dtSzRBdXg1cXVBTG9jYTdvQzZIS3M2UXFneTdHbUs0QXV4NXF1QUxvY2E3b0M2SEtzNlFyZ2gwUlJGRVZSRHI3K29TL25PTklWd0EvR1lkTlh2KzVxNE05UFZ3QS9ES3F0Z3lENFExL0ljUWY1b1MvZ2VQSGlHQStDNE9kL3FBQkFWeFYvUHJvQytLRUFSVkVVQkI2R0VSUkZ1bFBCRDBYWEJmcnpjWGlrUnhBNG5jNTg4c210OWZVTmh1MmdLS1lvU25jVjhPZW5LNER2QytVRmdEKzQvZ0FJZ0lsRThwTWJ0NWFYVjF1dE5vd2dCeHRDTC81V2wrK1ByZ3YwbmZHRnh2cUZQNFFnaUJlRVhDNi90clp1TkJyT05sdmdsN3oraFJYQ0gzNytROS91UzBKM0J2aTIvQW1ETkFUQjlYb2ptVW9tRXZIOS9mMTZyYVlvOGhmYTlGZS9lWGQrK1BaMFo0QnZ4V0hINWpselZCUUFoaUVNd3lBWUJoUkZBUlJKbEFSQlVGK1d6K2NyNVNxRzRZMUdvMVFxdGRzTWdzQ3lMTU13akNBSUJFT0FBaWlLSWtxU0tBZ3YvRmxWS2svL2FIYzIrRFowQmZBbjh1TG9DMEVnQk1IcTF5QUlBZ0FvU1dLbFVtVllWcFlWSEVNMUdnMU80SUNpY0J5WHllWjRRUWdHZ3pTdEtaWEx4VkxaNDNaQmtDeUtZclBaYmpOdFdaSnhBdGRvYUlva242Nk9GUVVBQUZtV24zN2ROZnZ2Z3E0QXZqTVVCZUI1Z2VkNVdaWmhCRkVVc0ZESWJXeHNaakpaUlFGMFdtMHdGT3pwQ1ptTStrcWxXaTVYWUJqMitid0VRZFJxalZ3MjUzSTZPSTZMeHhPN3UvdlpYSTduT2FQUjJOTVQ3dW5wd1RCTWtrUkFVVkFVUVZBVUFnQ2xhLzNmRVYwQi9Jazh0enlGSUxoU3JlM3Q3aVZUYVk3alVSVGhPVzVwYVdrL0ZtZFpGc013Q0lKd0hMOTQ4Znc3Yi84b21VcUpvZ2dBWUsxVzgzZzg3WGE3WEs1VUtwWGxsZFhmZnZpN25kMDlITWNaaGxFVXhlVnlEZzhOT3AxT2RjQTNHUFM5dlQxT2g1M0FNVkVVZ2E3ejg2M3BDdUJQNUxEMXd6Qzh2Yk4zNys3OTJiazVBQURkYnJmTlptdlU2N096Y3hpR2UzMWVnOEVnQ01MV1Z2VG16VTg1anROcWRSaUdpNklZalVZSmdyRGI3WlZLOWZjZmZmTHBwNTlWcXpXdFZtc3ltWEFjWDE5ZjM0cEdRUkNrYVMzRHNQRkVvdG1zT3h6T2ExZXZURXlNa1FRdXlUS2dMZ1c2cDhkL0t0MWRvRzhMQ0lMdE5yTzh0SEx2L29Ob2RMdmRiakVNQTRLQTIrTWVHUjNSRzNRVVJZWERZYi9mNzNLNXN0bmNMMzd4eTB3bXl6Qk1yVlpOSnBNN096c0FvTlFiOVk4K3V2SGd3VU1Ndy9yNys3MWVyODFtMDJnMGJwZHJkSFFVd3pHZTV4aW1uYy9uWjJmbm5zek9wVkpwRUlLQVEydURMbjhhWFFIODZTaUtBa0VRQUFDVmFqV1R6WXFpR0FxRlJrZEhUU1lqRE1OK3YrL3YvLzd2REFiRC92NCt5N0k4ejF1dEZneERZN0VZQ0lMcGREb1dpekVNczcyOVhTcVZtODFXb1pEbk9JNmlLTDFlRHdEQXpzNk9MTXRuenB4NTk1MTNGRVdoYUxLdnIzZGdZTUJxdFJTTHhWUXFMY3VIb29hNkd2aFQ2UXJnVCtkZy94RUNJWmZMRlE2SGZUN2ZtVE9uWDMvOW10MXUyOWpZMHV2MVpyTlpGTVZpc1NpS1lybGNGa1V4SEE3cjlmcU5qWTJWbFJWWmxsdXQxdHpjWExsY25wNmVwbW02V3EzVzYzV2U1K1B4dU1HZ3Q5dHRwWEtKWmRuVHAwKy8vdnJyb1ZBb0dBeTYzUjZOVmlQTDBqUDNwOHVmRHZ6Ly9uLzlQMy9vYXpqQ3FDc0JCRUVRRk5GcU5FNkhQZExYYTdGWU9oMHVuODkzT3AwN2QrNVdxMVczMjEwcWxmYjI5aWlLR2gwZHpXUXlNek16clZiTDYvV0NJRmdxbFJBRUNZVkNnaUJVcTFXV1pRbUNLQlFLRE1NU0JHRTJtUlVBNk92cnM5bHNJS0RvZE5wUUtPajMrVFFhR25nbXd1NVJ3SjlNZHhIOEozSjRGNGdrQ2IvUFl6WWFaRVV4bVUyeUxBdUNrRTVuSGoxNm5NL25OUnBObzlGWVhWM0RNTlR0ZGdNQThQang0MVFxMWR2YisrcWxTNXRiVzdPenM2dXJxM3E5M3V2MThqeWZTQ1RiYmNaaXNhWlNxWWNQSDRtaUdBd0VRVURXMEVSdmI4amxkdEkwcmRWb0RsL0pELzB3ampEZEdlQ2I4dFZ4QnppTzZYUmF2VjZQNFZndWw3OS8vK0h2Zi8vUnlzcUswK20wMld5NVhLNVVLZzRQaitqMSt0bloyYlcxTlJ6SFgzLzkrdC84N2Q5b3RYUWlrWWhHbytWeU9SQUlXQ3lXVnF1ZFRDWkRvYUFzeS9GNFBCcmRoaUFvR1BDN1hBNk5oamJvOVRpT2ZlM1ZkbFh4RGVrSzRHdjRKckVHYXRnbUNJSVFCTFdhN2Q5LzlNbjc3NysvdHJZMk1USGhkRHFyMVZxalVYL3Z2WGNwaXBxZm41K1ptZUU0N3RLbFYzNzJzNStkUFh2T2JyY1ZDb1ZFSWxVcUZRdUZRbjkvLy9qNEdFSGcrL3Q3RG9mVFpyT2wwK21OalEwQ0o5eHV0ODFtVlJSRmtpUlpsci82cWtBUTdPYldmQk82QXZncVhnanZlUnArYy9qbklBZ2lDSUlnU0x2TnJLMnQvOXN2ZnZYaGg3K3RWQ285UGIwR2c2RmVyMXV0bHRkZXU2S2g2ZnNQSGp4OCtGQVV4Wk1uVC80di84dmZuenAxa3VjNWpZWXltWXlpS083czdKYkxaWTdqZkY3dnVmTm5BUUFxbFVvOHo3dGNMbG1XazZsa01wVUdGRUNqMFdvME5Jb2dzaXdmWE5YaFN3S2YvZ01jL052bEsrZ0s0RXQ1MGZvaENJSWdDRUVRR0liVkRWQUFBRUFRRkVVeG55L09MeXo5L3FPUGYvV3JYK2Z6QllQQm9OZnI4L204Mld3K2ZmcFVUMC9QclpzM2I5KytVeTZYKy9yNi92N3YvLzdLbGN2Tlp2UFdwNSt4RE52YjIydTMyNHJGY2pxZFRxZlRDSW9NRGd3T0RBNFdpOFZrTWluTHNsYXJ6ZWNMT3pzN3VYd2VRVEVNUlhHQ3dISHNZTnA1N3BLZUcvcTc3dEJYMEJYQUYvT0Z5YnNnQ0NvQUlNdXlKRXVLQW9BZ0FFR1FJSWpKWkhwaFllblRUMjkvOXRsbnNWak1hclZDRUxTNXVWbXBWTjU1NTUyeHNmRkhqeDc5OHovL1N6cWQ5dnNEYjc3NTVzOSs5aGVLSXQrL2YvL3VuWHZsY3RucGNBWkRJYjFPdjd1M2w4L244L2s4dzdDdnZQS0tUcWZiMk5qNDdMUFBTSklrQ0tKV3ErM3M3SWlTTE1zeWltRmFyUWJEVUFpQ1pFV1JaVmtOa2dOQk5UemllZWVucTRFdm95dUFMK0RGc1Y4ZFgxc3RKcHZON2NmaXFXU3EwV2hnR0FaQmNES1Z2bm5yczJhcnhiVGIrL3Y3blU2blZxdGxzMW1XWlh0N2U4K2VQVnV0VnQ5Ly8vMzkvWDBVUlM5ZXZQQVhmL0VYTUF6ZnZuMm5XcTJlT0RFdFNXSXlsWkpsdVRjU2tXVTVrVWhrTXBsbXMyazBHczFtYzZQUm1KdWJLeGFMN1hhYjV6a0VRU0tSWG8xVzI2ZzN5cFdLeCsyV1pDbVR5ZTN0eDdMWmJLdmRCa0dZSUFnWWhsWFA2TUR1dXdMNE1ycmJvRi9BNFMxT1JWRlFGRzIxMm52N3NlM3QzVTZIZ3lCUWxxVk9oME1XRmhWWkVTWFJvTmRwTmRwVU1wbElKQm1tTFFpQ0lBZ0VRU2lLa2s2bks1WEsxdFlXeDNIaGNMaS92MStqMFQ1NDhLaFNLUThORFowL2Z5NmJTZDI4K2VuaTRoSUV3YjI5dlQ2ZmIydHJxMTZ2ejg3T0lnakNzcXdzeXp6UFM1SUVnZ0JCa0xsYzd0S2xWMncyMjNaMCs5L0taVW1TRlVYQk1BeEZVVmxXWUJpeVdNd2p3ME5tc3dsQklGR1V1cWIvMVhRRjhEWEFNTnhvdGpZM3RoN1BQQ2tVU3JJc1V4U3AwMmxwV2xPdk4yS3hHTS96Zi9NM2Z3MEFRS3ZaS3BXS0I3OG9pbUl1bDl2YzNPeDBPb0lnQUFDZ2hyZ2xrNG10cmMzQndmNngwV0dYeTJrMkcvYjJZM056QzdPenM0RkFnS1pwaXFKa1dTNlZTbHRiVzlsc1ZsM3NxdStnS0VBeW1kTFFHcS9IczdxNnR2THdzY3ZsZExsY0xOdkpablB0ZHB2bkJacW1tczNXaWVsSmw4dHhZUDNkdkprdjQvZ0s0R3Z6Q1ZXakFVRndaMmZ2OXAxN3k4dkxCRUcwMnkxRlVkeHU5L1QwdE12bFZHTThRUkJzdDl0dHBxMytvanFCaUtLWXlXUjJkblpvbXRicjlSekhLWXFTeVdRYWpRYkhkWUtCZ052dEVIZ1d4N0JJcEhkblozZCtmb0ZsV1laaGNCem5lUjRFd2IyOXZVd21vd3BBZlU5WmxobUdZVHNzTHdpS29taTEyb0dCZnIzZXNMaTR1TEd4MmVsMFVCVEZNQ3lUeVdJb3F0VnFkRHF0SkVucWpYejEvUjViZVJ4ZkFieUlhaUVIbHFCYVA4dXk2MnRyYTJ0cm1VeEdEV3NEQUFCRjBaczNiLzN0My94Tk1CaFFGR1YxZGMzdGRsdXROZ2lDRHR1cklBaDdlM3RHbzVHaUtKcW0yKzMyOXZZMmp1TW1rd25ITVFSQlpGbVdaWWtrQ0JCUVVxbVVJQWpGWWhISGNZSWc2dlY2clZhclZDb0hGNk02WTI2M0c4ZUpYQzVmTHBkZnZmUktxVno2OWE5L2MvdjJiUmlHMVJnS3A5TnBzVmhYVjljOEh0ZkV4SmdrU1Y5eGoxMk9xUUMrS0tFUlVvM3NBSFZYc2RQaDA1bk0rdnA2TnB0RkVPVDY5V3VCZ0Q4V2k5KzVjM2Q3WjhmcGN0cHM5bVF5MmR2Yk16azVNVDE5WW1scGtlTzRnN2V0MStzY3grRTRyc2I1QUFCQTB6VFA4NjFXRzFBQUdJRWhHR1hZVHFWYXJWUXFJQWhXcTFXR1lTQUlhclZhTE11S29xaStqNm9yczlsOCtmSmxzOWxjS0JRVVJjRUpJaDVQeEdMN0xwZno3YmZmcWxTcVQ1NDgyZG5aclZhclBwKzNYbThBbjNlQjFIdFUxOGV5L1B4Qy8zaE9Bc2RVQUFlQTROUDhYVkVVRDNiNkQzc0VNQUpydFZvQUFCaUd1WGJ0MmovOHd6ODRIUGJmLy82amFEU0tJQWdFd1NTSkFRQ2cwZEF1bCt2ZGQ5NUJVU1FXaXpVYURZN2pCRUZRblJhR1lSQUVrU1NwMCttUUpBbEIwT3JhMnRqWWFEQVU0RHJjNXViVzZ1cGFzVmhrV2JiUmFLanBCS0lvQVFBQWdpQU13eWlLMGpSdHM5bW1wcVl1WDM3VlpETG04em1DSUNWSmhpQllvOUhxZE5xMzNucUxvbWk3M2ZGZi8rdC83YkFzUWVBYXJVYVJsV2REUGdpQ29DekxraXdEenphMXVuV0hnTzQyS0FpQ29pUTJtKzFDc1pUUEYxck5GZ2lDYWdhak91amlHQzVMY3JWYTdYUzRkOTU1WjJwcXVsNXZ6TTNOSVFoeTh1UXByOWZiYURSYXJWWnZiMDg0SExLWUxTYVRDU2NJOVdUcUlHd0JlT3JEQUpJa2Rqb2RsbVZ4bkRCYlRHYVRLUjVQZlBpYkR4OCtmRlN2MTlVaFgxRVVTWklCQUlBZ2lLSW9xOVhxZHJ0SFJrWXVYNzc4NXB0dmpvNk9RaENZU3FXTHhWSXdHTlRyZFJ6SE5adXRucDV3VDA4dkJNSFpiRWF2MTcvMjJwVVRKNllKQXBkbFdRMFk1WGsrWHlqbDg0VjZyU0dLRW9JZ01Bdzk5eWgrNkUvakIrQll6d0FnQ0VxU2xFeW1sNWZYaXNWeXZwREhjV3hrYU9qMDZaTjZ2VlkxQ0FTQng4ZkhSRW15Mld6bGN2bVh2L3hsczlsZ0dPYU5OOTRZR3h0ck5CcVpURHFYeXpXYkxReEZ2VDZ2ckNnR296RWNEc2RpKzl2Yk94c2JHOFZpRVVFUXE5VnFOcHRwbWtaUkZFVlJSVkUrL2ZST05McFRyemN5dVZ3d0dQVDVmTHdnY0oxT3JWWXJGSW9NMHlaSjB1LzNEdzBOZWIzZWNEamMxOWZYMjl0ak1CZ2E5WHFsWE1sbXN6elA5ZmNQYUxXNng0OGZmZkxKemRYVmRRQUFnc0hReU1qdytmUG56V2FMSlBJQUFNQXczT0g0ZUR4MSs4N2RZckZJa3BUYjVRcUZBcEZJMkdBd1BMZElPRzRjT3dFY3hQT28zc1YrTExHNnVwNU9aMlJac2R1c0Zvdlpack9DSUtDVzZKRWtLWnZOemM0dHJLeXNOUnBORkVWZ0dQSzRYUmN2bkJzYUhtMjMyenM3MjZJb2hzTWh0ZnFEeFdJR1FWaVNKQnpIU1pKQ0VBVERNTC9mUHprNWVlYjBLWmZiUlpFVWlpSW9pdkk4MzJxMUdKYjFlajFuejU0bVNSSUFBUFVBb1Z3cXJhMXYzTGx6TjV2TmdTQ0VZUmhKa2pBTXQxcXRyYTNvbzBlUFc2MldMTXM5UGVIOS9YMkh3ekV4TWVaeU9lYm5Gd3I1UXIxUjUzbCtkWFdONS9tcHlZbSt2bDRJQWdFQVVHUUZ3N0dlbmhDQ0lBekRObHV0eGFWbEZFTUhCa2djdzlRSlIwMnZPVzd6d0xFVHdPRU5RUkFFRS9IRS9uNGNBQUFVUlVPaFlLUzMxMlEySVRDa1drT3IxYjU3OS83TXpLd29pY0ZnVUtmVmFyWGFRTURmMjlzamlISTBHdDNmajZFb2hpREkzTng4cTlYczcrKzMyZXdzMjZuVmFySXNXeXdXaTlrYzdnbGZ1SEIrZkd6TWFEUWdLQUpCRUFqQ2tpUTI2dlZxclk3anVNbGtwQ2hTZVJyUklMVmE3ZjM5ZURBWVdGaFlWRlhITUV5eFVGRFBFMVpYVndWQjhQdjlmcjh2a1VodWJLenJkSnBRS0lpaTZPN3VicWxZYWpOTUpwT2RtNXVyMWFvb2lvUkNBWFZoWTdQWmJEWWJRWkQ3K3pHVzdhVFRHYWZEN3ZHNEtadjFhYTJoWXhrNWQ3d0U4TnlhVDVabGp1YzVqZ05Cc0Zhcm1jMG12OStQWVFRRXlUQUVTYktTeXhkdTN2b1VRZEJ6NTg1TVRVNHBpaUxKTW9JZ3FYUm1iVzF0Ym02KzArRWNEa2M4Rm04MDZnaUNRQkFFd3hCQllBYUQzbURRRHcwT1JpSTlrYjZJM1c1WEZFQ1dKZlUwUUZGa1JRRVFGTE5hN1FBQVNLTFVhamJWaFNvRWdUUk5EUThQaFlMK2MyZlBiRzF0NS9KNVdaWlJCRVVSR0ZBVUhNUHE5WG8rbnljSWdtR1l4NDluU3FYeXViTm50RnFkMys4UCtQMFFETmRxOVYvKzhwZExTeXNHZzhIcjgrQTREc015Z21BZFRtZzBtb1ZDUVpKa1NaSjRRUlFGNGJnTitjOXh2QVJ3Q0ZCUkFCaUdlM3ZDdVd6dXdjUEhtVXg2Ym01dWRYWDErdlZyQXdOOVZxdWQ0OWhpc2RSc05pT1JQcjNlV0NxWFNKSUVGR0F2azVtZlgxaGFXbW8wNmdSQnR0dnRubkRvcjgvK1ZVOVAyR0kxb3lpaXVoSVFoRUF3REVPZ0tBcjVYSzVXcTdYYWJZN2plRjdnZWVHWjF3RUFnQUpCRUF6REtJcVFKRUhUdEZhcjFXbTF0SVllR2g3cDZ4OFNSVjRVZUZtV0lRaUNJTERaYk1YaWlmWDFqWTJOeld3Mlc2bFV0cmQzb3RIb3FWT25JcEVJVFZGc3N5Vkprc1ZpS1pmTHlXUlNFRVFFeFJpR2ljZjNabVptUC83a2sydzI1M2E3UFI2UDIrVXlteTNxVHV1eFRhMDhwZ0pRZHo4NWppK1Z5b1ZpVVpLRVlEQUFBRUNqMGZ6b28wODJOemVucHFZQUFGaGRYYlBaN0lGQXdPR3dJd2hjTHBWWFZsYWV6TTd0N096QUNCTHA3UmtkSGVudjcvUDdmRTZuUTI4d1lCaXVLQXJYWWV2MWVxbFVMcFVyalVhanc3S2lLRXFTQk1Fd2ptTVloc013ak9NNGdpQ0FBa2l5SkVtU0tJcnROdE5zTmtSUmxtVVpna0FjeDdWYW5kRm9OSnVOWnBPUnBDZ1loaFZGTmhqMEpyUEo1L2NPRHcvdDdlMHRMUzJ2cnE0OWZQaG9mejgyTlRVMU1USHU5L2tvaWdxSGU5cHRwdDF1TFMrdFdDem1XQ3crTjcvUWFEU05SaE5OMDVJazFlcjFYRDVYYjlSdEZyUDhMWi9tVVFaa21mb1BmUTEvUGc1V3dEQU1DNEt3dmIyN3RMUlNybFFNQnIzTDVjUXhvbFF1Nyt6c0ZRcDVrOG1JWVZpN3pXaTEybUF3YURhYjZ2WDY0dUxpek14TUpwTTFtMDBuVDU0OE1UMDFORHpvOVhwSlVnTUNjcWZUcnRXYTFXcTFYS25VNncyR1lRUkJBQUFRd3pBY3g5U29mUXg3ZWdDc2p2b2dBRXF5cExyZ3NpeExraVJKb2lDSVBDOElQQzhyTWdoQ09JNFo5SHFUeVdnMEduUTZIVVZSS0laQ0VDendmTEZZakc3dnpNN09QMzc4ZUdkbmw2S280ZUdoRTlNblBGNlBLRXFwVkNxVHlWQVVLVWxTcTlXV0ZTWFNHL0Y0bkFBQUZBdkZRckVFSTNCZnBHZHFja0tqMGFqci9tTTREeHdqQVh5K2tpRlVMbGMrL08xSExNdUdnb0hlM2g0SWdtaU5Ca0hRWEs1dzY5YXQrL2Z2QzRJd01ERGdkRG9waXFyVnFwdWJXK3ZyRzRMQTkvVkZybHk1ZlBIQ2VZL0hoYUtvS0lxQ0lMYmFyVUtobUV5a3M3bDh1OTFHVWNSb05GcXRGcVBSUUpFVUNBSWN6N0ZzaDJVN25VNUhqVnA3RnFJakl3aENFQ1JGa1FSQjBCU0JFd1FFd1Z5SGF6UWFwVks1V0NxekxJTWlxTlZxOGZxOEhyZExwOWVpQ0F3Q0lJS2dBQVJXeXRXVmxkV1BQN2t4TS9Pa1hxODduYzdSMFZHUHg0TWdTS2xVaWthamxVcWx0N2YzUnovNjBkRFFJQVFCN1hhTFpWaUc2VHgrUE1NTC9LbFRKOGRHaDlRYk9ZYmgweSt6QUE0Nk1SNUVnNmsvUVZHVVpkbWQzZjBIRHg3NmZkNU9wM1A3OXQxS3RhcWFUazlQVDdGWXVuSGp4dWJtSmtWUmJyY2J4L0Y4UGgrUHgzVTYzU3V2WEh6MTBpdVJTQTlCRUJpR0tySlNxOWUzb3RIdDZFNmxVaU1wTWhnTWVEMGVtcWJaRGxzc0ZqT1piRDVYcU5acUhNZktzb0lnS0lxaUVBVEJFSVNnS0FSQmFxaXpvc2l5SkV1eXJDZ3lqTUFVUlp1TVJxZlQ0WERZOVhxOUpNbjVmRDZSU0paS0paSWdRK0ZnWDZUWDZYVEFNS1RHdWttU1ZDeVZIeng0ZE9QR3piVzFkWVBCRUF3R1NaTE01L09aVE1iaGNGeThlUEgwcVZPRlltRmhZWEZqWTBPV3BiTm56em9jam5hYmtTVGg3YmZlME90MHdnc0NPQTd4RVMvL0d1QVBpYnpQS3VvREFBQkJNSTVqV3EydTFXWVhGeGMvK00ySFdxMFdocEdkN1oxME9tMjMyOXZ0dGxxZ3ltZzBKcFBKWnJNWkNvV3VYN3M2ZldMSzUzVlRKQW1BWUxGWTJ0N2UyZG5kWTlxTXlXUUtoY002blpibitVUXlXY2dYS3RXcUlBZ1FCQkk0NGZmNWFBMU4weVJKa2dST0lDaUN3QWlNd0NBSVNxSWtTYUlrU1FJdmRIaU9aZGxXcTkxb3RGcXQ5dnJHNXRaV2xDSkprOWxrdFZuNyt5T1NGQzRVU3Nsa0twbE1PWjJPd2NGK3A4T080N2drU1U2bjQ4cVZWKzEyKzZlZmZuYi8vb1BkM1YyejJTeEpVcmxjMXVsMGxVcGxhV2xwYjMrL1ZxdW0wNm4xOVkxbW8zbjk5ZXMybTAwVVlSUkZRUWhVbjlPTFQrL2wxc0RMS1lBWFU3cEFFSVJBRUhoMkNDQkpFdGZoYTlWYXZsQllXbHF1VnFzdWwydHNkRVNqMGN6Tkw2VFRtZDNkdlhhN1RWRlVxVlNTSkdsZ29QL3ExZGZPbnp0anNWb0FBR2cwbXBsc2JtOC9sc3ZsRlZsMnU5MVdtd1ZGMFdxbG1zbG1pOFVpeTNaUUZMVllMRmFyeFdhMW1pMW12VTVIa2dTS29RZ01ReENrWHM0emsxTmtXWllsV1JSRmp1ZGJyWGFsVWkyV1NzVkNzVnl1TkZ2TlJyTlpyZFljRHJ2VllyRmFMUmlLbGtybFZDckRNRXd3R1BCNjNRYTlIb0lnbTgxeSt2UUpvMEdQWTlqOHdtS3RWa05SVkpibGZENC9QeitmeStWc051dncwQkRIY1FzTGk3dDdlNHNMaTMzOWZTNlhzOVBoU0pKRUVFaVdBUkQ4NHFmM1EzK2szeGN2cHdDZVF3MTNVNytHSUtqVmF1ZHkrVmdzbnMzbE1wbE1wOU1KQkFKalkyT1hMMThHQUdWcGVlWHg0NWxNSmszVE5BUkJ6V2J6NU1rVFAvclJHMmRPbjRJZ1VPRDVWcXVkU0NUbkZ4WWJqYWJMNlJ3YUd0Qm90Ykg5Mk16TWJES1ZJbkFpNFBkTlRrNEVBMzZUMlVRUUJBUkJpdnpzbUV1V242VzJQTjhMREFSQkNJWm9pdFJxYUtmTEFRQ2dKSXJOVmpPYnpVZWoyMXRiMGQzZFBacW1CZ1lHQmdmNlE2RmdQSkhZMk5qTTVRcWxVbWhrZU1ob05FcVNpQ0x3eU1pUXhXTFI2blIzN3R3dGw4c29pbWF6Mld3Mk96dzhmTzNxYTRPREF4aUdMUzB0d3pDY3krZHhnaUFJY250N054d09HZ3g2TlVKT0RWczZQQnU4eEcyOVgvSmdPRFYxSFVFUWp1T2J6UmJEc0xJc0x5NHVQM2t5VjZ2WCsvb2lIbzhiUlZHU0pDOWZ2anc1T1ZHdVZENysrSk9GaGZsbXN3bkRzTUZndUg3OTJrOS84dDdvNkFnTVFUQU01M0w1bVpuWjJibDVvOUZ3N3R5WlVDaVFTQ1IrKzd1UGw1WlhDQnc3ZmVya2xTdVhKcWNtL1Q2dlJrTkRFQ1JKc2lTS2FramM0VFRMNTY3endPZVdGVVY2dWgwa0FZQ01vWmpSWkF3RUFvT0QvVDZmVjViazlmV05wYVdsUnJNUkRvWEd4a2NsVWR6YWl1N3M3bW0xV29OQmo2S0lJQWhhclRZVURHcTBtbmc4a1Vna2lzVml0VnFWSlBua3FaTWpJNk1ZVGxTcVZhTkJmL0xrOU9qb0NBekRLNnVyTE1PU0pJa2dhTDNlQkFCQVRiZC9VYVUvOU9mNTNmTXl6d0JxbHk1WlZwTEo5SDRzbnNsazYvVWF5N0lNdzdxY3pyUFRwNncyS3dqQW9WQjRlWG14VWluUHpEeloyZG5kM2QwVkJFR1NaWmZMOWZaYmI3N3g1dXZCWUlDaVNKYnRiSzVGbDVaVzJFNW5iR3pVNS9Ya0M0WDc5eDVtY3ptRFhqOHlNaGdLQnAxT2gxYXJRUkJFT1ZTcDRVdXU3V3ZkREVWUkFBZ0NJQWdtU1lRa01LMUdZN1BaZ3NIQTlzNU9KcFA1L1VjZjkvZjFCVU5CczhXOHM3Tjc3OTZEWXJFd05EeG9zWmdsVWJKWXpSY3Zua2RSVkpMRWVyM09NQXpMTWc4ZlB0Um9OSUlvR2cyRzE2KzkxaHZwMFdwMWpVWnpkVlVUalVaWFZ0Zk1KaE5OMDBhVEtSRHdoWUlCdFFUZHl4MHkvUkxPQUFlclh0WDNLSlVyYy9PTDhYZ3lsOHVsVXVsY0xzOXhYSDkvMytVcmwvVjZyVTVuMUdob3B0MjZjZU5tT3AwUkJJRWtLYTFXZzZMWTJOaklYL3pGVHdjSGgwaVNxTmRxdTN2Nzh3dExnaWdHQTM2ZjE1UE9aQllXbHZMNWdzdmxQSDM2NU9Ua2hNL25KUWhTbGlYMTJPdkFiWGpPc3RVZ1BCaUdZUVNCWVJpQjRVTWxmVjVjZ3dMcUFZR2lLQ2lHR1EwR2w4dHB0bGdBRUN3VlM1bHNUbEVVczlsa3NWZ2F6VWFoVUdKWlZrUFRPSTdERUtqVGFpMFdjeTVYS0JTTEpxUHA1TWtUUnFNcG1VeEdvMUdDd0gveWszZDl2cEJHbzlWcTlTaUtMQzB0UmFQYmtpZzFtMDIydy9HOElDdXl5V1JVeFh6NDRuL29qL2M3NW1VVHdPR0dqUmlLTmhyTjlmWE5sZFYxRUFScG1xWnBxcTh2b2lnQVJkR0JnRjhTQlZtV2E3WDZ4c2JHSjUvY3dBbml4SW5wQ3hmT204MFdzOWtVNmUwZEdob3lHWFVDTDBTanUwK2V6UE84TUQwOTZYSTUxOWJXUC9ua0ZnU0I1OCtmdVg3OW1zL3ZReEJZRUhnMW1oODh4TUdGUGYzK2FVNFdJTXVLSk1taUtBbWlKTXV5QWlqUFh2NkgzM3Y2MWJPY0hWbVNCRUVBQU1Wb01vV0NBYS9YVTZsVUZ4ZVhDb1dDMysvdjc0dlVhclZZTE41dU1SYUxCY2R4QUFBRVFhelZHeWlLall3TXYvYmFhOFBEUTN0NysrdnI2eGlHalkrUGFXaENFa1cyMDhubE1wbDB4bVEyRFE4UHRkb3RuVTR2Q0h3cWxmYjV2VFJGSHl5TFh4VHpTOEJMSllERFk1V2lLQmlPWjdLNWhjVmxETU5nR0JaRjBhQTN2UGJhNVZxdHRyMjlXeXdXUlVFc0ZvcTM3OXo1elllL0pVbmliLy8ycjhmR1JsT3BsRmFybVpnWTYrM3RnU0JZcDlNdUxpMHZMaTRST0g3MTZoV1daVy9ldkRVM3R6ZzFOWEg5K3RYaDRVRU1SU1JKVkk5Um54YlBPdVRQSEZ3U2lxSUlpZ0lBd0xDZGZLNFFpOFdqMnp0Ylc5dmIyOXZKWktwUmIwSVFSRkUwaG1IcWNnQ0dFUWdDbiszZkFvY1ZKWWtTQUFBNnJiYTN0MGR2MENVU3ljY3pNeHFOWm14MFZLZlRybTlzVkNwVms5R28wMm1iemFZQ0FDUERReGF6cFZncVJTSTlmWDE5TE1zK2ZQaVE3WEN5ckxTWmRqUzY5ZGxuZDJpTjl2U3BrMTZ2WjM1K3dXNjNVeFNWeVdUc2RydlJxTWN4N0NDbjU3bTdld2w0ZWRZQUwzclZDZ0NCSUFKQkVBQklPSTQzR28xU3NjaXlaMDZmUG1Vd0dQYjI5bWFlekNvS3NMVzExV3cyWDc5K3JhY25YSy9YNC9IRTZkTW5lbnZDRkVYVkc4MmxwZFhOcmFqSlpCNGRIY2xtc3c4ZVBHdzBHNjljUEQ4MVBlMXdXQkVFRmtYcHl4YUxpcUpBRUl5aWlLSUF0Vm90bmtodWIrL3M3dTRsRTRsY1BsK3ZOemlPazJVWlFSQ1R5UlFNQmtaR2hzZEdSME9oZ0VaRHQxcHRCRUV3SEVOUjZNQ2hPcmc1OWE5b3RacUo4WEdLb3A4OG1Ydnc0QkhMc0lPRC9XZk9uSjZkblp1Ylh4Q2xFWmZUZ2NBSXBkRWtFc2xNTnJ1K3ZqazFOWG5tek9uVjFiWHQ3VzBJQXExV3F5eExIbzluYW1wS282SG41K2RydGZwQmVnQ0dJZ2dNQTRlV0tJZXpLWDdvRC95NzRTVVJ3SE1tQ0VFUWpDQUFBQ0FJakdIWTFsWlVwOU9YU3NYTnpVMkN3Qzljdk9EemVYRU1iYlhib2lqVkc0MTJteGtmSDRNZ0tCNVBWcXRWdlU2ck54Z2xTYXBXcXh1Ym0zcUR2cmNuekhIY3Zmc1AydTMyK05qb3BVc1hkVHE5SkVrOEwzeUZZNkNHL1pSSzVmMVliSGxwWlhGcGVXc3Jta3dtUzZWU3M5azhTSGdIQUFCRlVhUFIrT1RKay9HeDhhbXBTYS9Yazhsa1VSUUpoOE1EZy8wa2dRTUFjSGhkQVFDQUxNdXl6R3UxbXJHeFVaMU8rN3ZmZmJTeXVpb3I4dlQwWkU5UE9KbE1yYTZ1YVRTMDBXakFjRXFqb1FrQzM5N2VIUmdZOFB0OUl5UER0VnJOWnJPNzNTNFFCR3cybXl6TGQrL2UrK2lqajJWWlRpVGlLSXB4SEllZ0NBVEJhaFNUL0h4MWlaZEVBeStEQUo3ZnBnQUJCVkM0VHFkY0toY0xoVTZIVFNRU0JvTkJGSVZHby9HclgzK1FMeFJlZWVYQ3dNQ0F4V0pHVUpTbWFhN0RHWXpHVm91cFZDcUtJb01nS010aUlwbWNuWjJISUhoa2VFZ1ErSTkrLzNHcFhMNzYydVV6WjA0UkJNSHpIQUFBMEZjYWdTQ0lxWFQ2eVpQWkd6ZHVQWGp3TUpsTWRqcWRMM21sVUNnVUNvWEMwdEx5N1R0My9INS9PcDBHUWZEczJiTS8vZW1QdlI2WHlXUWtTUktDL2xEelVMVS9qdXNnQ05MVEUvclp6Mzc2aTEvOGFuWjJYaExGVnk2OUlrbFNJcEZjV0ZnNk1UMWx4akFJQkdBWTZuUTZyVmJMYkRLcVRmak9uVHNYQ1BpTHhWd3FsZm5zczgvdTNMbVhUS2JVaVU0VUpiUFpXQ2lVS0pMUzYzVTBUYXQxVVo5NzdDK0JCbzY4QUo3eit4RUVVUlNnVXFuTVBKbmIzZDFydGRvWWhwNDZlVUtyMDZBb2VtSjZzbHl1MWh2TisvY2Z6Yzh2T1owT3Q5dVZ6V1lGZ1FjQWhlTjRobWwzT3B5c0FPbDBabU45czlsc1hyOSt0Vkl1UDNqd3NGUXF2ZnZlTzBPREF4aUdxWVdydnVLU1lCam1CWEZsWmUzblAvKzNHemR1eHVOeGhtRU9JdSsvWW1PUlpkbnQ3ZTFZTEthdXA0dkY0dWJtaHR2dHZuNzkyc1dMRjkwdWx5UUpraVFlR0o5NjFBREtzc051ZS9mZHR6Nzk5UGFqeDA5SWtod2FIaUpKY25scHhXZzBFZ1F0U2tDejJSSUVvZDFtTkJvTkRFT2xVbmxsWldWemMyTnpjNnZaYXNtU05EazVjZTNhRmIzZW9DZ3l3N0FzeXo1OCtPamh3OGNlajJ0aWZLeTNONHdnaVBUNTVzUXZnUWFPdGdDZU8xcENVVlFVcGEzbzlxTkhqK3YxcHRQcG1KZ1lOeG9OSkVFOGpjaUhJQkFDT1k1dk5WdTFXcTFZS205c2JHNXRSVnV0VmlGZkJDR0k1NFZPcDdPN3U2L2E2K2pJTU05eGp4N05WQ3ExeTVkZkhSb2NvR25xc091aUFoN2F2NVJsR2NleFZvdFpXRmo2Yi8vOUgrL2N1WnRPcDlUVDMrZXUrY3Z1U00wTVZyL041L1AxZXAyaTFxclZXamFibjVxYUNQaDlkcnNOeDFIVit3S2VWYmxTRk5uamRwNDllMW9VeGNjenN6Uk4rL3krWUNpd3RyYWgxeHRFVVN5WEs1ME8xMmcwWUJqS1pESUxDd3ZOWnJPL3Y2Ky9QMkkybTNWYUxVRVNNQXhKb2dpQ0lJS2dDZ0RVNi9Wc05wZE1wajc4N2UvSHhrYW5KaWRzVmpQSGM0ZVRKNCs2Qm83d0x0QnorOU5xSVpPVjFZMlp4N1BGWXJHL0x6TFFIN0ZhTElvQ2REcGNzOWxxdGxvZGpvTWdtQ0pKZzBGdnNaaE5aaE1NdzgxbXM5Rm9xaUVTdFZxdFZxdVZ5eFZKRWtQQm9OL3Z2Zi9nVVRxVDdlL3Z1M0xsRWsxVEI1VUdELzd5Y3hjRXc3QWtLYXVyYS8vMEwrLy82dGUvem1UU1g5dk41YXZ2VVJBRWhtSFU5SzVFSWxHck40d0dnOGxrZk82a1ZzM2lOK2oxZXIxaGUzdW5YSzdvZE5wd1R5Z1dTM1E2blZ3dXU3T3oyK2x3TUF3WEM0VjRQSUZoK09EZ3dNakljQ2dZTUJtTk9JNUxzdHh1TTgxbWkrdndraXpETUt6VjBGYUxCY2V3YXJVV2l5VUFBTkRwZEJxTjVxQTN4K0huLzBPYnc1L0kwUWlIL3RwUkU0WmhXWlpqOGNSdlB2aGR0Vlk3ZS9iVTJPaG91VnplM3RuTjV3dHE5cU42NHFTZU90RVU1WERZUStHUVZxdUp4ZUtmZlhabmRYVmRra1FJQXR2dGRyM2VlTys5ZDg2Y09WTW9GSDd4aTE5T1RVMWV1ZktxMDJubk9RNDQ5R0VmM2hnNStBSkJrTjI5L1gvNWwvZi95Ly9uLzF2STV5VkordHE2bk44RTlVMHdEQXNFQW4vOTEzLzE5dHMvQ2dZQ09JRWR0anRabGxFVUV5VnBhV25sd3c5L3E5TnAzM25uclZLcHNyNitzYjI5bzFaWlZOVm90VnBlZSszeXlNZ29obUhwZEdwL1AxYXYxMlZaZ1NCSUVBU2VFM2lCQndDQXBxbFFLT2oxdWp0czU3ZS8vWWhobU1uSmlVdVhMbUFZOGsxdTZFaW80a2pPQUdxRXorR1lkUWlDU3FYU0wzN3hLMUVTSnliR1BSN1A3Yy91enM3TnQxcHRsOHMxTU5BM05qb3lOall5T0RnUURvY2RUZ2VPNGZWR0k1M09pS0xnZERwN2VucHF0ZXJ5OHZMK2ZnekhDYXZWZXZIQ2VVRVFidDY4NVhLNUxsdzRGd2o0QlA1cHdjTXZ6QnBSRDU1QkVLelhtei8vK1M5Ky92TmY3Ty90dlRoU2ZrdGtXVzQwR3RGb3RGQW9tTTBXbDl1Sm9lamhUQzVaa2RSZG5YYWJTU1NTeFdMcHpKbFRsVXAxZlgwemw4dXBGWWQ4UHQ5Zi91VlB4OFpHcXBYcTVzWldzVkEwR0F6aGNIaHdjR0Jnb0wrL0x4SU0rdTAyRzRaaDVYSjVkWFY5YjNjZlJaSHg4YkY4UHIrM3Y0OGdpTXZ0UmhGVWtzVG5qanRlUFBQK29TM2w2emxpQWxCdEhZS2Vsa3BXclora3FFd205OW50dTZsVXVxK3ZqeVRJbVpuWmZLSGdjcm5HeGtaSFJnWjhQaCtDSXNWQ2NYTnphM2xsSlI2TE41b05GRVhWWEJORlVReDZuY1BwS0pYS2UzdjcxV3JWNlhUU05KMU9aMHFsOHJWclYzckNZUlNCRDQ2NmdFTm5vb2VIZGdSQldMWno4OVpuNzcvLzg3bTV1Y04rLzNlSXFnR0dZV2tOUFRJeXJLSHB6N21DQUFBQUlJYWhXcTIyWG10c2JtNnB2U1hyOWZyYTJucWhVQmdhSFBqUmo5NlluSnFzMStxMVdrT1dGUkFFSzVWS01wSGMyOXRYUndTOVhtZTMyMjAycTA2bkEwR3dVQ3p1Nys4ak1HcXhXSGlPMjl6WXREdnNCcU1SdzdDRGUxUXpQRi84c0g1b2UvbDZqdElpV00xYlBVaW9oUkVFQkFBSWdvckYwdHpjL01yS1dtOXZEd2lBYStzYmUzdDdreE1UMHllbVFxRUFna0E3Ty91elQrYVdsNWN6bWF3b1NYcTkzbTYzMld4V285RmtNcGtWV2NaeFBPRDN2WHJwWWlxWit2U3p6K0x4T01keGRydDllSGd3RXVrbEtVTDQvTGJQaTJlOWFzQnBkSHZubDcvODFkTFMwdUg2dU44dDZsS25VcW5zN2UweERLTStsdWNrSUFpQ3grMGNIaGxNcGxLenMvT0Rnd01rU1ZhclZaSWt6NTAvZS9Ma0NVVldLcFZhb1Znc2x5dVZjcWxjTGhlTHBYS2x3bkdjWHEvckgraWZucG9hR1JucTYrczFtWXdrUWN6T3pUOTYvSGhxYXRKbXN4ZExwYnQzNzRFZzFOY1h3WEFDVUdTMXdCN0g4ZXJZOUVPYnlSL0hrWmtCVkQ5ZUVJUnl1WkxMRnlBWXdYRmNGTVJtcTMzLzNvUEZ4U1dTSUVaR1IyWm5aN2Uyb2tORFF4Zk9ud3NFZmJJc3I2MXQvT00vL3AvLzlFLy9QUFBrQ1Mvd05wdlZhcldCRUpTSUorN2Zmd2dDaXMxdTAycTFCSUZiclJhR1llYm5GNUxKSk1Pd1EwTkRiNy85cHNsb2ZMSGQwSXRqbTFxVi83ZS8vZWo5OS84MWw4dDlyNDhDQkVHYnpUWTJObmJ1M0JtOVR2ZmlBa005WFNZSUFnTEIrWVZGaG1IMzl2WldWMWZQbkRuejdydHYrL3plUXI3WVpwakZ4Y1ZQUC8xMGRYVk5vOVdTRkNtS1lqNmZtNXVkZi9Sb0pwNklZeWpxZHJtTUJxUEJhTUJ4ZkhWMXRWQW9tTTJtbnQ3ZXVkbDVudU8xV2kxTmF5QVk2blM0UXI2WXorZHBta1pSNVBCMS90Qlc4L1VjbVJsQVVSUVlSa1NSMmR2Yi8vaVRtMzE5a2I2K3ZsYXJ0YnE2bGtxbGUzdDdUcDA4OGZEUjQyaDAyMkczbnp4eEFnUWhwczF1UmFQLytJLy92NDgvL29Ra3lmZmVlL2ZkZDk4T2gwSkdrN2xhcmQrOWUrZC8vOS8veS8zN0R6UWFqZGZqQmtIQWFEUkUraUlEQXdPZmZQS0p4KzArTVQzbDlYaGtXVHBVdytjTFVPV2c5am05ZmZ0MnJWWUR2bTZ6LzF2aWNEZ3VYcmp3enR0dm1VMG10ZEQ1aTg0M3ovTmFEVDA0MkwreXNyYTJ0cmF4c2FIUmFNNmNPZVYwMmhFWVJqRjBiMi92MGFOSDI5czdnNE9EZi8vM2YrdjF1anNzbTA1bjd0MTc4SzgvLzdlN2QrN21zbGtRQUUrZFBrVVFsTkZvbXBpWXVISGpCZ1NCZi8zWGYzWDU4cVdGK2NWLy91ZC9HUjBkRFFRQzZWUnFLN3FGd01oZi9kVi8wR2pvbzFWczlNZ0lBQVFCU1JKeEhMTll6QnpIZi9UUkovTnppejYvRDhQUTAyZE9lZHp1Y3JuODJXZTNaVmwydWQwb2ltbzBkTGxTZWZEZ3dZMGJOM21lZi9mZGQvN3FyLzdqNk9nd2ptTUVvUzJWS3RsTU5oS0o2UFY2RUFLajBhalg2NElSd21xeDlQU0VaMmRuQjRjR0J2b2pLQXB6M05NeTVjOHU0M09lejdNYW8waTFXdC9hMmw1YlcxZlBlcjhQNjBkUjlHRGdQM2Yyek5EUUlJNWpoOWZaQjZvN0NGa3ptWXhUVXhOejgzUEpaRExnOTRlQ1FiMU9MMGxTcTlYYTN0NE85L1RvZFBwcXRkcHFOVW1LdGxnc0pwUEo0WEFDSVBoUC8vVFAwZWoycnovNGpkMXVIeG9lUmhIRTdYSlJGQldOYnQrN2QvL2l4Zk1VU1NhU3FYUTZzN2EydnJHK1FaRDR0YXRYU1pJNGN0RnkwTGQvaXo4UHFxT0pJSWpiN1Q1Ly9xelZhcWxVSytWeUdTY0lyVVpUTHBmdjNYdXd1cm9xeXpKRjA2SWs2ZzM2Y3JteXNiRlpMQmI5ZnYrcnIxNmFucDZrYVFvQ1FZRnZ4L1ozTjdZMng4ZkhYcjEwMFdJMngrSnhYaEFBQUtRb3l1VjBPcDBPbjg5cnNwaGtXVDQ0NC9xS21COElnbks1L003T2JqNmYvLzdHUDRxaUJnY0gvKzV2Lytadi91by9uanAxVXEvWGZWRVpuejk4TGNzeURDT0RRd05lcjBlcjFScU1SclBaUkJCRWgrTktwVkt0Vmo4eFBmWEtLeGRrV1Y1Y1hDcms4eUNnd0FqczgvdGZ1M0xsOU9sVGtpVE56YzJuVWlrVWhyUmFHa0VSbXFiTDVmTE5tN2QydG5jZ0NOWm9OSjFPSjUxT3d3ZzhORFI0NHNRVVFSRGYrY2JYOTgyUm1RRlVaRm5XYU9qcjExN3planpyNnh2bGNrVVV4T2hXdE5WcTVmSTVTWklhaldhNzFhSklncWExZ2lDMDIyMjFOTG5GYk1GUXROTmhZUml1VnV1eGVLTFJhRVFpdlFHL2IyTnpxMUFvOHJ3QUFCS0NJanE5em01MzZQVjZOWlR0WUNqL2lvRk43UVlaanllK0xOVG5XM0p3Q09Cd09FNmNtUFI0M2FJbzhqei9oODdZZjNqbFFSTWtVSlpsRUlJc1p2UEUrSGd5bWNJeG5DUkpDSVk3SGE1ZWI2QW82bkk1UVFDdzIyM1I2SFl1bC9ONjNRSXZ3QkJzc1ppY0RnZUtvaHpITVV3YnhSQ3IxYnkrc2RucGNLSW9OcHZOamMwdGd5RVBBQ0JGa2NQRFE3Mjl2Y1BEQXk2blF6MXVQMExEUDNEa0JLRFc5a0VRZUdob3dPdDFGNHVsWnF1Rm9TaE4wMm9ObkhRNlc2bVV6V1lqZ2dCT3A5M2o4U2dLa0U2bmM3bGNwOFBKc3BMSlpIWjI5eEtKcEliV2hNTWhraVJrV1VaUTVHRHNSQkhVYXJNYVRVWU13dzY3MTEvK3VZS2lLS1hUbVd3dUMzdy8zci82aHZWNmZYTnpJeHJkc1pqTkZFMTlJMmREVVVBSTdPa0pqNDZNbE1vVitGblZhelVyRFFKQm04M2ExOWQzNzk3OXJhMXRtOVdHWXFqRDRTb1VTcWxVU2hSRnY5L3ZkTG8wR2kwdkNLSW9wbElwQkVIZWZ1dEhQL3JSRzZJazFXdDFITWNzRm92SlpDUUkvSENOMFNQRUVST0FpaHIwWmpJWnRWb05Md2d3QkJFRVliV2FyMTE5N2VmLzlqOUxwWklnaUFBQWVEMmVWeSs5a2t5bWxwZVhiOTM2bE9NNWdpQkVVY3JsOHMxbTArbHdtRXptWnJNcENBSkZraWdDQXdBb1NaS3N5RmFMeFdRMFlpaktjZXFJL3FYT2orb1dDWUpZcmxUVTVlLzNCOC96NlhSbVpYVnRZS0JmcDljZFBtZDRMdlVNT0h3K0xjczJ1ODNsY2pXYUxaNFhKRkhDY1V5bjAySVl5dk84UmtQM2hFTTNiOTVLSmxOejh3djFldDNsZEQyWm5WMWIzd2lIUXovKzhYdkR3NE00UWJBZE1aOHZLSW84T0RqdzJtdVhnMEcvTE1zY3g4TXdoR0U0REVNSFp6SS9wRm44U1J3TkFieDQ2cVFlUStJNFRwS2tMTXNnQkdxMG1pdFhYczNsOHJWNll5dTZZN1ZhRFViRHVmUG5VQXkvY2VOR3E5VzZmZnN1anVOVFU1T1ZTbGtRaEw1SWhDQ29kQ290Q3FMTlpsTVR3QVZlNERqT1lqWnJ0Um9JZ3I1aFQwVkprbGlXN1hTK3I3My9BNXJONXRMUzB2bnpaNzFlaityL2YrSExQaDhqSkdtMUdvTlJEMEVnd3pBOHp4TTRZVGFaQ0lKb3RWb0FBUHI4WHBJaVc2MVdzVmpLNVhKTFM4dnRkbXQ0ZUNnU2lienh4aHVoa0U4U3hYd3VtOHZsaG9ZR3o1MDcwOXNiaG1FSVFSQ0N3QlVGa0NSSkZDVUFVRjRVNFpIZ3lDeUNnUzhhNXdSQlVIdlI4UndQS0VBazB2dVRuN3czUERTNHRyYTJ0N2RYS3BVMEdzMzU4K2YvODMvK3YweFBUNnUxYVNPUlhnQUFBRURwNlFuRE1GUXFseFZGQ1FUOEdJWURnTUt5TE5ObXpHWXpSVkVLOE1kNk10OTc5UVNPNDFaV1Z2ZDI5OXJ0TnZ3c1Z3dDRZZFBwY1A2a0xDc2tRV2kxV2dSRm04MVdwOVBCY2RSa01oZ01obHE5MFdpMnJGYWJ6V29UUlpHaXlQNit2bHF0N3ZQNS92Sm5QL3Zydi80cmw4dkY4K0orTExhOHZBeUN3T3ZYcjEyN2VnWEhNVkdVZUo3bk9KN25lYlVIMmRFdEtubzBab0N2NXVDaGk2TFkzOStISU9pangwOXUzUHpVYURRYVRVWVFBT3IxUnF2Vk9uM3ExTmo0S0lvaXpXWUx4ekNmejkxczFQTDVQQVJCWHE4YmhpRlI0SnJOVnB0aGVpTVJqWVpXdnZHR0JnaUNDSUtvT1dqZks0SWd4R0t4emMydDA2ZFBCb01CVWZ6YU9VZVJaUW5EY0lQZVFGTjBxVlJ1dHhtanlhVFZhb0pCZnlLUlNpUlNnNE5EYnJjckd0MFdSZkdOMTYvakJCNlBKMVpXVnd2RkFvNWpETU1XQ3NWT2h6dDc5dXpFK0loR294RUU0U0E1K0tzL2ppUEJVUkxBYzE3bWkwNm5MTXNvaWdSREFacldwRktwY3FYQ3ROdUNJUEM4U0pLVVArRHI3UWt0TDY5ME9oMkgzVzQwbWphM3RqcWRqdGZyTVptTWFoT3VlcjB1U2JMZFppVUo0by9ZMEFRUC92TzlQNEZXcTVYUEY2cTFlZ2lFQVFCVTg5ZSsvUFdnMm9ERFlORGJySlo4b2RCc05RRUFnR0VrSEFyRjQ4bFVLaDBJK1AxKzMvcjZScVZjMW1ycC92NEl5M1lxbFVxNzNXYmFiWklrSTVHSXpXWU4rUDBhTGZYY3NjTnpYeHhGanBJQVhoeDFEbGZ3VStkOGRSdU9waW1kVG9kaEtBUkRQQzlFbzl1bFVpbVZTaHVOK25nOGdjQ3d3V2pnZVdGN2U4ZGdNSVJEUVFSQlFSQXNGSXFWU2tXbjAxcXNaalczNWh0L3RPQlhuQko4dHhBRVFkTVVqbUdLb256Rk11QXdzaXpyOUZxdjEvTmtkcTVjcm5SWUJvSWd1OE5tczFvTHhlTDI5cmJOWmlOSnNsUXV4V0x4ZUR4UktCUkFFTFJhYldheldhM2VydGZyVUJRQlpFVUdsZWMraFJlLy9UTThoTytRb3lTQUw2b29DQnkyQUJBRVJWR0t4NU5MUzh1MVd0M3RkZzBPRGhJRXViQ3dtTS9uYTdWcUxwZGpHQWJETVFpQzltT3hkcHNaSFJueCtUeVNKRUlRbEVpbTY0MW1JT0RUNjNVUURCMXNhWC90aHdwREVFMVRhcWZIN3hVRVFad09SMitrMStHd3k3TDR0YTlYTDE4VVJacWlmSDdmd3VKU1BsOG9Ga3NPcDUxQThONUlUNnZkWGxsWkd4d2NvQ2lxV3EwL2VQZzRIbytYU2lXWHkwV1NWQ0FRak1YMlYxZlhCSjRmR09qdjcrOHptUXlIMndoODRXZDB0RFJ3WkFUd2hiVUUxU1NYZzlyL0lBQlVxL1g1aGNWUFBya1o4UHVpMGUzNStZVmdNSmpOWnNmSFIyRVlucHRiS0JTTE5FVm1zMWxKa3Z6K2dGcituK2Y1V3EyZVRtVWdDT3J2NjBNUlJKYStVUnFYZWxVNGpubzhicWZUc2JLeThqMkZBS24zaUNDSXgrc05CZ0lHZytIRnpNd3ZRNUlrRkVXdEZyUGY3eStWS3Z2N2NhZlRJWW1TMisycVZLckpWSHA1WmFYWmJKWktwU2RQWmtkR2hqMGVkN3ZOUEg0OHM3aTQyR3cybTgybUxNdnhSSktpU0t2VnJIeSswYnlhdS95OWYvemZHMGRHQU05TnRXckp2bmFicVZTcUxNc2lDS3pYNjYwV2kwNm4wMUFVRElFT2g3MjNweWVaVEgzeXlRMmU1MFBCSUk0VExNc1dDNFUwejNNYzUvZjdBd0VmcmFFQUFKUmxZSGxsTlp2TCtid2VwOE1PQU1BZmRhUVB3YkRaYkRHWlROL2Y3YXYzTHN0eXRWcXQxZW84ejZNb0lzdGZOVWNkZm1LS291QTRIZ29GdHJlM2wxZjR2cjVlZzBHUFlhamRiZzhHZzRzTEMvRjR2RnF0cWgyOFVSUXJGdVByNnhzK24rZmMyYk9DS003T3p0TTBSV20wTUl3MUdvMXlwZHJwZEJBWTBlbDBScU1CaGhHMUZPcWZ3dzYrYTQ2TUFBNmhRQkRNc3Axc0xyKy9GNnRXYXp6UHd6QkUwWlRGYkE0Ry9jR2dmM3Bxc3NOMmhvZUdTSXA4UERPVHlXU2kwVzJuMHdrODg5YTFXcDNiN2RGcXRSaUt5ckpVS0JSdjN2eTAwK0VHQi9zSml1UTU3bytheWtFQU1CbU5ack1GUmRIdktROUdSVDJPWFY1WkdaOFk3WXYwOEx4ODBQd0crRXBYVFYwcjIyeldWcXU1dTdzYkNnVXVYcnlBSUFoSmttNlhLeEdQb3lpS0lBaUtJcFZLdFZLcFJLUGJpVVRpL1BtekhxOG5uOHRydFpyVHAwOWlLTHEwdEp4SXh0dHRodXR3QUFocU5ScXZ6K1AzZVhRNjNaL1ZCTDQ3am93QURrZGZnaUFZanljZVBwcFpYOThnU1JMRE1BQUExRDNwaWZIUjBkR1JNMmRPLzdmLy9vODJ1ODFxdFlaRG9lWGw1Ym41aFVpa0RZS2d3K0V3R0F4OWZYMTZ2VjRVUkVWUjZ2WEcwdExTL1h2M3d6MDlGRVdCd05NcUM4QTM3aGdueTdMWmJQSjZQU2FUcVZnc2ZuOWpvVG9Eek13OEdSa1pDUVdEQjAvbWF5OVNmWGdFUVFBQXNMZTNmL3YyM2I1SXhPNndLN0lNUVZBd0dDeVZTdGxzbGlUSmJEWmJMQmFqMFNnTUk2T2o0NmxVWm10cnkrbHdSSHA3ZDNaMlo1NDhLWmVyR28wR0FFQ080d1JSMEsrdm56OTNabXhzUktQUnFQdG1SMnNaY0dRU1lsUlU2KzkwdUU4L3V6MC92d0JCa0U2blV4UUZKd2lYeTJVMm05Zlcxc3VWU2pnY1lobTJVcWxXcTdWT2gzdjgrSEc1WElZZzBHdzIrLzErajhlajErc2hDS0pwRGFBQUc1dGJuOXk0dFIrTCtmMytzZEZScjg5N3VQRE9Wd1JCQUllT3FBbUNhTlFiMGVoMlBwLy82bVhpdDZmZFpvd0d3OGpJc0ZhclViTkR2OWxpSFZRVVlIMWpNeDVQZERxY3JDaDZ2UUdDNFh5K3dIRWNpcUlhalFZRXdVUWlzYmEyVmlnVXJGYnJ4TVJFTkJyRk1PVEN4ZlByRzV1UFo1NUlrdHpmM3krS0lzOExLSW9nTUp4SUpFUkJNcHBNVHFmamNNbU1vNktCSXpNRC9BRkZVUlJGcjlNSEF3R2p5ZWh5T3RnT20waWtrb21Feit1eFdNenRkbnQrZnRGbXMxZWowWFE2MDJnMDFMTWJraVN0VnF2YWwwNDlTYTNWYXJ1N083dTdlL1Y2L2VtNXFRSUFBSHg0VWZjVjQ5bkI0bHNWUURnY09ubGllblYxdGRQcGZLL3J3bUt4c0xLNnNyUzBiTEZjd25IOGE3ZHJEK2N4QzRJZ1NiSWdDR3RyNndpQ2VqeHVuaGRxdFJyTHNoQUUwVFJ0dFZvQkFHZzJtN1ZhYlcxdHJkVnFlYjBlU1ZLV2wxZDBPaDFKRXJ1N3V5aUtCdnhlbTgzS0N3SkZrUmFyR1VQUkk3b1VQbUl6Z0FvSWdqaU9PWjJPY0U4d0VQQTc3QTRVdytyMWVxbGNWbyswa3NtVVZxdk5aREs3dTd1WlRLYlZhZ1VDZ1ZBb1JGR1VXcFFUUVJBY3gwVlJhRGFiSklGN1BHNE5yU0ZJd21ReWVqeHVCSUVPeDFwK0F3ZERRUkFZUVJGQmxCWVhsOHJsaXFKOFgxN1EwMHVDSUpQSk9Eb3lRdE8wMnZ6eWNEekNpNWVubG8ySnh4UHJtNXNFamsyTWp6dWNEbGxXT3AyT0pNdU5lcjFTcWFoTkFWRVVsU1NKNDdoT3A2UHVzR20xV2dnQ3M5bXN6V3FWWlNXZno0K05qWTJQallaQ0Fidk5hckZhZkY2UDFXYkJjZnk1eE5FZnlqeitLSTZNQUE0L1VBZ0NUU2FqMDJrM20wMDBUZWtOUm8vSGF6S1pIang0Q0VFSWh1R1ZTcVZhcmNaaXNWZ3NWaTZYclZacmIyOHZRUkNaVEtiWmJLcGJJaGlHQ1FMZjJ4TStjV0o2Y0dqUTUvTTJtMDJtM2RicnRDYVRBWUhoZzFqb3J4MWZRUkNVWlFYRGNaSWdNdGxzTnBOcE5CcmZrd1U4ZlZzRm9HbjY1S21USnBQcG1SZjAvSFVlRE1scUtZMUdzM1gvd1NOUkVDY25KaTVmdVR3K1BvcmplSzFXSzVWS0RNTVVpOFZzTmxzcWxVUlJOSmxNT0k1WHExV1daZFgzNFRqZWFEVFY2NDEydTlYYjIvdldXMi81ZkY2Q3hMUWFqY05oTjV0TkJJNGYvbk5IeGZxQkkrUUNQVGZESGxwb0tqTFBveGp1Y05qNysvdlQ2VXl6MldSWlptc3JFWThuMnUyMnVrcE9KQktDSUlpaWlLSW95M1lhalVZeW1aeWFtclJhTFhxOVZtMk01WGE1eStYS3htYlU3WFpxdGRybi92cFhmNmhxSHJyRFlmL3hlKyttVStsaXFmUTlKY2VvU0pMVVlUbEI0QlZGQmtFMXl2OExMdTlRWCtST09wMHBsY3MydTlWdXR6TnRScWZUZUQzdWZDNDNPenRYTGxlYXpXYXRWbTAwR2hBRXFTZDZScU94MVdxbFVpbVdaVm1XN2VucHFWYXJEb2Q5YW1xQ3dCR2U2NGlpOEdKR3pwSGp5QWpnT1E0SFFhZ3RnSEVjODNrOXlXUXFrVWhVS3VXdHphMXFyUWJEc0RyZU94d09tODFtTUJoTUpxTzZYOEV3VEt2Vit1eXpPMDZuMCsvM1lSakdzSjEwSnFOcmFscXR0dG9pOG5DczVSZHE0UEJldXlSSktJcE1UVTI4OWZhUEtwWEt2ZnYzdi9PN0JrR1FJQWl2MXpzeU1uemh3bm1yeGZxRlFXbUhCMk5abGlFSTVEZ3VsODFsMGhrWWhQeGVud0lvang4L3lXU3lsVXJGYXJFNEhBNGN4d1JCcU5WcTFXcXRWQ3JsODNtR1lkcnRkclZhclZhcnpXWVRnaUFNdy9WNm5kMXVBMEhnNEFqaXFEZVFQRElDT0pTTnJuNzdoekZQTFpRRmc0RFJhT3gwMkwyOXZYd3VsMHFuQVFDMDIrMCtueThVRGczMER3UUNBWXZGYkRJWlVSVGhPSzVTcVdhenVWZ3NuaThVQzRWQy8wQy9LSW9jeDdWQTRGbXR0VDlpWFhld1p0QWI5SzljdkpCTUpMZWkwWEs1L04xdWlVSVFaTEZZWHI5KzdmcjFhNzI5UFNhVFVUMGZlN0VxeE9jZEVraFJGSjduRzQyR0xNdnRkanVYejYydmI0aWlaTGZiKy92N3pXYWpUcWNEQWJEWmFwWExsVlFxdGIyOXM3VzFGWXZGMUFNeWhtRkFFQXlGd2dSQmtBUnhrSFVKSEdYVFZ6a3lBampnY05yckgwNDZBUUFBUVJURHF0WHEvdjUrclZaREVNUnV0MDlNVEZ5OGVIRjhmTXpqZG11MFdoUkZDUndEUVlEak9LUEJhRFFZU1pLYW01djc5TFBiNVVwWm85RWlDQ0xKTW9iaGFrdWx6LzlkOE9zdURBUUFRT0E1bjk5Nzh0U0pPM2Z2UFg3OCtMdDFoQkFFc2Rsc2x5NjljdTNhYXlBSThMendZalRvRjdhclFWQUVKd2cxMzIxN1ovdng0eG1DSUNjbUpvYUdobXcycTlHbzE5QVVCTUdDSVBLQ09ESThmR0s2RkkxRzc5MS9jTy9ldloyZG5YYTd2Yk96bzlGb1JGR0VZZmh3S2E0WFMxSDh1UTNpV3o3U0gvb0MvaFMrTUFwU0FSU2U1OHJsc3RvZGVuaDQrUExseXhjdVhCam83ek9ialJpR0txcHhLRUNINHh1TlpyRll5bVF5eFdLUjQ3aHF0ZmFQLy9oL0VnVGhjcm1tcHFaRVNlUjRYaFJGK0ZERnYyOTIzcVFvQ2tBUXFOVmk4WG85OC9QejMvbEtBSVpoWGhCWWxzVlE1R3N2U1MwdURRQ0FLRWlTS05icnRaLy8vT2ZOWmxNVXBlbnA2VktwdEwrL0w0b0NvQ2dnQUpJa2dTQXdpaUVhR2pjYWRVNm5JeEFNOWZiMjNycDE2OUdqUjVWS3BWS3VOQnNOU1pKUTlITlZFSS9jenM5aGpxUUFua05SRkJDRVpCa29Ga3ZsY2xtdjE1ODVjK2J5NWN0RFEwTU9oME5SZ0h5K3lIRWQ5VFNBSUVpYXBrbVM5UGs4WnJQQjRiRHI5Rm9NUXlFSVRDYVRxVlNhcHVsZi9mSUR2Y0hnODNuSHhrYklGMHBlUHNlQksveGNzZkx2STBvTVFXQ3IxV28wR0ZBVWxiOXlwMVhkK3BRa01aWEtiRzV1cFRQWlRDWVRqeWRxdFpyUmFPenA2Wm1hbW94RWV0MXVsOGxreEZCY0ZLVjh2dGhxdFNSWmdtR1l3SEVVdzdSYTdmVDB0TkZvOUhnOG4zenlTWnRwRjRwRm51ZEpFZ2VlRlpvK2lxUCs1eDdwRDMwQmZ6cWZEME1IT0k2UHhXS2lLUFgyOXA0NmRhcW5wd2NBZ0wyOXZVYWp3WFU0U1JZaENFSVFWRkVVRE1kc1ZxdmY3N05hVEVhRHdlbDBoRVBoeVltSnZmMzlVcW5FTU95alJ6Tm1zNW1tS2VTYkpYa2R1aElRQWdGQkVDdlZXaTczM2RjSWdpRFlaRExxOVRvTVE1L05MVisxNTZndWdsZFcxOWJYTjNRNjNlblRwL1I2bmR2dERvVkNMcGZMYkRaaEtOSnF0ZmVTKzhsVXF0Rm9LZ0FnUzVKNmlBSERpRWFqMGV2MVZxdDFiR3lzVUNpc3JxNlZpcVZTcWFUVDZkVGVxWWNMZFA4WlAvbnZraU1zQUpXRFU1NUt1Ynl4c1VVUWhNZmpvV2s2R28xV3E5VkNvZEJvTkNpS3N0bHNkcnNkdzdCWUxMYTN0NmZYNjgrY09kM2JFM1o3WEFhRE1STHBpL1QyaWlKZkxCV1hsMWR2M0xqbGREbjhQaTlKNEFldGY3L2lHZzZ2UmlBSWJqTk1KcE5OcGxMZmVXQ2NScU54dVZ3YURmMjE1OVBQL2d1NTNVNjN5NW5MNVoxTzU5V3JWL3crRDBYUkVJeElvdGhvTmhLSlFqeVdXRnBlVVdzblRreU1Jd2hhcjljeW1XeXBWTUp4M0dxMW1zMW1GRVZEb1ZBdWx5dVhLeHViV3g2dlYrM2I5eEp3aEFXZ0xzVVVCVUJSdE5Gc2JtNXRyYTZ1QUFDSTQzZ3VsOHZsY3F1cnE5VnExV2F6ajQ2T2pvMk5uamh4Z3FMb2h3L3V4K094VnFzRmd1RDZ4dWJLNnBvNjQ1TWsyV3EzOHZrQ3d6Qm5UcDg2ZWVwRU1PaFhoL0N2M2U0NE5BTW9NQUtYSzVWWVBQWWRWb2xUclZsdk1FeFBUNy8zN2pzK24rK3Jrd0VPWWpRQUFLQnArbzAzcmp0ZHpybTVoUTgrK0kzTDViUllMTElzTjV2TlZvdkJNSXpBTWZXRXhPTnh2L2ZlMnhSSmJXeHMzYmw3YjM5L2YyRmhFVUhnVUNnVWlVUUFBRUJSTkp2TDNidjM0TVQwTk9tMHZ3U0hBTUNSRnNEQlhoQUlnc2xFNnU3ZCsrMTIyK1B4R28xR1VSVFQ2YlJlcnhzY0hIQzVYTzAySThzU2p1TVdpN212TDJLejJXVlpHaGpvbzBpeTFXN3Y3ZTN2NzhXME9tMnoyY2hrc2ppT1Q1K1lDb2VDQ0FJZnR1QXZISFNmYTlHbnZpQ1pTTzN0N2pNTTgxMnRBWjRPNXdBQXd4QkpraWlLQWwvcGVIenVxbVRaNFhBTVMzSWhYL3oxQjc5UkZFVVVwVktwNUhBNFFxR0F4K05GRUxSYXExdXRWci9mNy9YNklRaGNYbG1WWlRrY0RvZENvWjJkblZhclZhbFVYQzZYMiszZTN0NWVYbDVaV1ZuVmFtbXRWc3R6UEhqVTZxRS94MUVWd01GbmpDQndzOVhhMk54YVdsb3hHSXlSU0svRllzbmxjaTZYYzNKeU1od09sOHZsbVprbm5RN1hZVm1tM2FZMUdvMUd3ekJ0a2lRSGgwWUFRQ0ZKaW1GWUJFRXNGb3NreWRsc0RzY3hCSUdmWnBsOW80SC82WW9RaG1HTzR6ZTN0cmEzZCtUdmJnR2cvcUZPcDFNcWxXcTFxaWdLT0k1SjBqZHl2aVZaeG1BRWhoRlpsakVVOWZtOFpyT2wyV3dORFBRTkRnNDRISzVLcGNaeEhFMVRlcjJlWlR1eUpMQXNLNHFpVHFjN2YvNWNxVlJjV2xvdUZJbzBUZmYyOW5RNjdON2UvcVBITTRHZ2YwQ3ZCNTZ0Qkk3dU11QklDdUR6bFpuaFJDSzF1cnBXcTlVbUp5ZjYrd2RZdHFNb3dQWHIxeTVlZktYZGFtOXVicklzSy9CQ1BwL1BGL0tLckxUYjdXS3h1TEt5Nm5KNTdIWjdNQmpnZVM2ZkwwUjZlMm1LM052YmkwYTNMV2F6MFdqNHN2amVMOHZQbENScGZ6OCtQNyt3djcvM1hkMnNHc2tEQUFDS291cHFSMUcrT1BEaEM1K1NXc0VrbTgxc1JhTzlrWjZ4c1ZHQ0lBVkJHQm9hc3BndFBNZG5zK21kblIwRWdSdU4rdnI2bWhvSkowbFNvVkFnU2VLdHQzN1UweFArOWE5L0k4dUsyKzBCQUxCU3FTNHNMRTVOVFFiOEFSaUdEb2FKSTZxQkl5bUFBMEFRbENSNVkyTnpZMk9Eb3NpTEZ5OG9DcEJPcFkwRy9mbnpGeEVZV2xwYVdGL2ZrQ1JwZTJjbm04dEprZ1NCWUxGWUxKVkt0MjU5QnNQbzZkTW5iRmFMeFdKWlg5L2tmSnpSYU5ScWRXdHJHNzI5dldhTFJWRTZoK3VoZitFSGZCQnZJeXRLSXBINnAzLytIM2Z2M2xNNzB2M0pOd1hETUlwaElBQ0NJSWdnTUVFUUJFRkVJcEhYWDc4ZURvZFFGUDJHS1FlcWVGaUdVWGQ0MzN6emRWbFdpc1VpUlpFVVJWY3FsZVdWbFFjUEhpV1RTWTFHczdLeW1rNW5aRmxSdTl2WGFyVzdkKytaVE1hZW5wNkxGeS8rNGhmLzArVnlqb3lNNVBQNXUzZnZyYTZ1alk0TyszMWVudWQvYUN2NFZoeFZBUnlZWTZ2VlhsdGJMNWNyUTBPRDRYRG80WU5IUE0rZFBIbGliMjkzZjM4L2w4c05EZzdhN1ZhajBVQ1JGSUlnaWlLZk9ERlZLQmFLaGRMdTdrNDZuZXp2Nnd1SHd4UkZzU3hMMC9UZzRNREt5bW9pa1F5SGd6QU1LY29mMHRDKzhFcGdHRVpSdEZhcnp5OHMvdWJEMzM3MCs0OWpzZmlmZkY4V2kyVm9hR2gwZEZTajBZQVFDSUVnaXFJVVNXaTBHby9IMHhlSm1Fekd3Ni8vNm1VSkFBQUlnc1JpaWIyOUdBekRmWkZJcTlWcXRWcG1zM2xoWVdGell6T1R6V0lvOXQ2Nzc5anROcFBKaE9HNExNdUNJTlRyOVVLaFVLdlZQL25rWm05dnI4MW1kYnRjaFVMZVlOQmZ1SEJlN2F3Uml5VUNmdjhQYlFqZmxpTXBBSFhDVld0M2xrcmxaREpKRU1URXhFU2owU3dVQ29JZ3lMSzh0TFFzeTFKUE9OelhGN0hhckJxYXdqQVVCQ0ZKa21SWlpoZzJseS9zN094RW85SFYxYlZ5cFlxaWFLVmFzOXVzb3lQRGp4L1A3T3pzRGc3ME81MzJnNjNNTDR2NmFqTk1LcG1hZVRKMzg5YW45KzdkeTJWejM3eGV3M1BBTUR3K052YVRuLzdrL1BuekJJRkRFS2pPQmhnSzR6aEJrQVNHb3BJa3l2SWZzYmFXRldWMWZTT2R6b1JDUWFQSldDNVg2clc2SkN0N3U3dWlJSGc5M2toZkpCandhYlVhREVNaEdBWUJVSlNrVG9lcjFXcXhXSHhqWTNObmU2ZGFxZWdOaHYzOVBhMVdlK0xFaVo2ZWNLMVdpOFZpNHZrejMyc3ZuRDhEUjA4QXp4WUFBQWhCc2lUbEMzbVdaWjFPWnpBWW1wOWZLSlhMSUFpdXJXL3FkTnB6NTA0UERRN2dPTUZ4UXFOUnorWnlETU5Ja2tUZ3VGYXI5M245a1Voa29ML3Z6cDE3czdQemZyK3YxV0wwT3AzWDYzRTZIZnY3KzZ0ckd3Nm40K0NQZm1Fb3FDd3I1WEwxdDcvNytPYy8vN2ZsNWVWdnMvRVBnaUJGVVdmT25McDI3V29nRUZRVUFUalFteXpMaWlKSmtxRDZHOTlnWGE0T0VBQUFsTXVWbGVWVmp1T21weSt4TE50c3RYTDVRaWVSQkJUNTFWZGZtUmlmZ0JHczNXNFdpa1dXWVJSRlFWRkVvOVhyOVhxZjF4ZncrM3A2d2pNelQrYm5GM0VjeitlTEJFRU9EZzZPajQ4L2VmSWtrOGx3SEllaHlGRjAvUTg0ZWdKNGhnSUNvQ1FwMVVxVndBbXIxUXFDNE43ZTd1Ym1wc1ZpR1JzYnZYNzlxc3RwZ3lDNFVxM01QcGwvK09qUjV1WldyVlpERU5obXMzdTkzbEFvTkRVMTd2Y0ZYcnQ2bGFUSXhjWGxXcTFtdFpvZER2dlpNNmMvK3ZqRzdPenM5TlNFVmtzRFh4a1hDb0VnaG1FNGpuL0xraEFRQkJtTlJxZlRxZGRwSmJIemZMbjlnNVh2TjdNMlJWRWdHT1k1WVg1dU1aMU91OTN1MFpIaDZQWk9PcFd1VnF0NnZlNmR0OThLaFVQMVduMXg2Y0g2K21ZeW1jem5jclY2blNCd2w4czlOVFY1L3R4WnY5L2o4YmdJNHJ4ZXAvdnd0NzlQcFZJQW9DUVNDWWZEUVpLVVdoc0NRMUgxVlBpSHRvYy9rU09URWZZY1Qzdm1DZExtVmpTWHkrdjFlcHFtYjk2OFdTZ1Vob2VIZnZ6ZXUzNi9oeVRKZERyNzBVZWYvQi8vN2IvZnV2WHB6czZPd0F2RHc4TWpvNk5PaDBNUWhFdzJpNkdvMCtrd21ZekpaTExUNlVBUVRKSmtYMTlrZnorV1RxVTFHdHJuOTJNb2Vyanh5ZWVMVkFNb2lqcnNkcC9QcDlmclc2MjJHbkw4UjkyTCtvWW9pcnJkN3F1dnZUWThQUGpVcEQ1blZTQUlnc0RuL2pUNFpSdFRpcUxBRUFSQlVMNVFmUDlmZnc3RHlLbFRKejF1MThyS1dpS1pKRWxpZEhSNGFtb3lseS9NemMwbmswbUR3V0MzMjBBSVNpUVNDd3VMVzF0YmUzdDdwVkxaN1hhWmpBYTlUcWZSYXRydDl1TGlVcUZRc0Zpc0pwTTVuOC9ydE5ySnlRazFlK2FybDBuL25qbTZNd0FBQUFBQUFnaUNHQXdHQkVIeitYdytuOWZwZEFQOS9lRndDSUxnV3EwK056Zi8vdnMvdjNQM0RzTXdMcGZyOUpsVFAvM3BUM3Q3d3lBSTV2UEZ6YTJ0cldnVUozQy8zKzkydXhVRjZIUTYrVUt4TjlJek1UN1dhRFR1M0wzWDM5L3Y5YnJWL2NjWDJ4UUFBRUJSWkg5L245Zm5DWVVDTHBmejk3Ly9lRzF0cmRscy9yRzNBa0dRWHEvWDZyUW9pc215OEp5NWYyMm81WE5sc0ZBQ3I1U3JDL1B6c1Zqc3lwVXJ2YjA5eVdTSzUza0FCQzBXU3lRUzRUaE9iYUFXRG9kRHdRQ3QwUlFLQmF2RlhDd1V0cUxSUXFGWUxwZHRkaHRGa2IyOVBRYTlmbUo4M09WeUxTOHZwMUlwaDhOSjA3UkdxMUdqaG82ZTFSL2lTQXRBZ1NCUW82RjBXbTJINDR2RklzL3pROFBEZ1VCUVRjNkt4eE4zN3Q2N2UrK2VtdHNhREFiZWZ2dXRjK2ZQMHhRdUs3TEQ2VUl4ZEc1MkxwRklCUHcra2lBTUJnT0tJQ0FJSkJLSmdjSCtlcVArMjk5K05EYzNyOUZRVnF1bDArbDhvUTFLa2lSSkxJRmpVNU1USG8vSDYvSCtqL2YvOWZIam1VYWova2M1QmhpR3VWd3VvOUVBSTVEWU9kakNWODM2YXpzaGZXNzRoeUJJbHBWb2RQdXoyM2NkRHNmWTJBaUdvZHM3dTFhcnRWNXZVQlJGMDFTcFZDNlh5MWFMNWRJckYzQUNCMEhBNjNWWnpPYlYxZFZpc1pndkZOTHA5RzkrODJGZnBNZmpjY3V5WWpTYWc4RmdJcEdvVkNxMVdoWERNSjFPQjhNd2NNUXp3bzVxT01mVGpTQVFOQm1ORUF5WHkrVnNOcXVlNXRKYURTOElBQURzN081dGJHeXlMS1ArQ293Z0pFRkNFQ0NJQXRkaE81MDJ5N1FKa3RScWRaSWtWeW9WRElWRG9VREE3OTNaMlZNVVlHSmlvcisvNzVPYk4xZFcxaVJKVXJNcnYvQktBQUFRQkZFVVJiUEorTjU3Ny93Ly91Ly90M2ZlL3BGT3AvdUdacUdhck5WcVBYUG10TnZ0QkY3SWFQbm0xcVdxQmNYdy9iM1kvZnNQMDZuMG0yKytiaklhNC9HRUtJcERRd01HZzZGZWI5VHJEWUlnYUpxV0ZibFdxek50cHNOMkpGRkNVWVFnU2JYUkFjL3pHeHNiRzV0YjVYSVZnaUJSRlBWNnZjRmdZRm0yVkNvQkFLRFRhUW1DVVA0TWZVRytUNDZlQUE1OFRiVVVnc1ZpSVFpOFdxMW1zMW1DSUdpS2hpRllGQ1ZSa29yRm9scW5UWDE5T3AyK2QvOStOcE9CUUFqRENRQUF0RHJkOVBSa2IwODRsOCtuTXhtU0pNTTlJYS9QQzRKQVBCWW5jUHpxMWRkRVFieDc5LzdpNGpLRzRWKzI1WGM0S2xpcnBjK2VPLzIzZi9jM1AvM3BUOHhtOHplNUk3dmRmdlhxMWYvcmYvN2ZybHg1MVdReS9iSGQ1ajYvOHdQQ0NOUnNObTdjL0RTNnZYUHkxSW5Sa1pGaXNaVFBGMExCb04zdWREb2RQTTl0ckcvcWROcUo4YkZnSU1nTEFvS2dGRVhWYXZXWkozUEx5eXRxc3pOWmxtdTFlaWFUcTlWcUVBU0RFR1F3R0RRYVRhdlZ5bWF6S0lwWUxCYUNJQlJGT2FKVlFWV09wQXVrbXBvc3l3QUFHbzBHczhrc1MxSTJtd1VBQUlKQVJaRVZXVmI3ZG5IY0gzcW9WQ3ZWcGFYbFI0OGZNeXhyTU9nbFVRUkJBRUhndmYyOWhmbEZTWkpkYnBmRFlaZEVLZUQzSjVKSmdpVDdJcjFuenB5ZWZUSjc2OVBiZHJ2OXVYend3enpyUnlUTHNxelRhaytkT3FGMjNQajAwOCtLeGVLWDNZaGFkZWZTcFZkKy9PUDNUcDgrYWJOYVFCRDhvenFOUGlkSUdFWllscjE3OS83Q3dxTEpaSHJ0dGF0dGhzbGtjemlPUnlLOU9JNzFoRU9aVEhweGNjbGcwRHVkVG9JazJxMTJCU2tMdkxDOXUvZm8wZU5FNGcvTlhtVlpaSmcyMitrQUlLQW9Nb3Fpc2l4WEtoV0tvaVluSjV3T0I0TEFQSCtFclI4NG9nSlFVV2NBTmJmTFpESldxMVVJZ2hpRzRYbEJGQ1VRQUdBWWhtRUllR1lsR28zR1lERHM3dXpWYW5XajBhQTJtbTYxMnZQekN5c3JxK2ZPblhPNW5BUkJNTzMyd0VCL3VWSkpwZEptcyttTk42Nlh5K1hOemMyUFA3bjUxbHMvTWhyMUFQQ2xjUy9xRHp1ZERra1NKMDlPZHpxZGRydDk2OWFuNmlMa1JUQU1pMFFpUC83eGUyKy85U2FHWThMVGxsdmZKTTRIZU03MVVJdW5jeHkvdWJYOTYxOS9pT1BZeFlzWHZGN3Y3ZHUzUlZIczc0dlliR1paRmowZWw4MW0rK2lqVDBybDh1VEVSQ0RnQXdCZ2U0Y3ZsNnUxYWswVUpZdkZVaTZYMiswMmNORDZDWVlsU2VwME9nekQxT3YxU3FYc2NybGNUcWZkYmovY1NQeUljb1FGQUR5cllCc01CaUtSSHZSalZDM3MybWcwT2gwV2dnMDZuVTZqMFFMUEJCQU9oMy8yczU4NkhJN0Z4ZVdscFdVRVFVd21rOFZzdGxnc2Rwc3RsVW9XaTZWd09BU0NvRTVIOS9kRjF0WTM1K2NYcjc1MitlMjMzdnpnQStWM3YvdElvOUZjdXZTS3pXcnBkQmpneTcwVUNJSWtVVUpnK055NXMvbDhzZGxzM2IxNzl3dDlKNElncHFZbUk3MDlCSUdyNCs0M0cvcy9Gd3lubmd1cVhzcks2dHI3Ny8rYzR6by8vdkU3RStOalcxdWI1WEpsZEhRb0hBNUtrb1FnU0xGWVRxZlRuVTdINS9PaEdCcUxKMHFsY3F2Vk1ocU5reFBqVjY5ZEVRUytWQ3FxQXNCeHdtdzJhYlZhZ1JmVUJnSnFDOXBBSUJBT2h3d0cvWjk4NXYzdmh5TXBnTU5KVDZJb21rekdzYkhSRTlQVHYvN2dnMEtoVUNqa1cyMC9DSUFlajhmbGNoMzhWcnZkanNmaWFuZGJpOFdxS0lwQnJ4OGNITkRwdEg2ZjkrYy8vOFhEaDQrdFZtdFBUNDhzQ1Y2dm0yVTdLNnRyQ3d1TFE4UERWNjlkYlRQTTczLy9rU0NLcjEyNWJMZGJ1UTc3dFJINU5FVysrdXJGZHJ2Tk1Nekt5b3JxangzZVN5VkpzcWVueDJRMkEwOEwrRUNINy9ITGJ2L1o4SzhXYmxFQUFFQVFCSVNnKy9jZmZmamg3N0xaM0U5Kzh0N0l5SEN4V0l4R3Q4T2hZRERnMTJob1NaSWtTYjU3Ny83eXl0cmc0TURycjcrTzQrak96azZ6MVNaSkVzZXhTclhTYURZcWxZcmFaUm1HWWF2VjZ2UDVESHA5cTlXdTFlcXBWTHBhclZvc2x2UG56L245UGhpR1JGRTVXS01mMFkyZ28zb1FkaENpckNnS2hxRWtTVUlRdEw2eDJlbDA5SHE5eCtPaEtBckQ4V0t4dUxxNnluR2M2aUdRRk9WeU9XMDJtMXI0cmRQcFdDeW1VQ2hrZHpqMjl2YVN5YVNpZ0lHQUh3UVZraUFvaWxJQVlIZDNEMFV3ajhkanQ5dWowV2dpa2VCNTNtYXowVFFOUVUvWElRZnQxNSs3UEVXUjlRYTkyV1RDQ2FKYXJkVnF0ZWRpSjgwbTA1dHZ2ajQ0MkU5UjVMTUF6NjgzcEdkUlNVKzNqeEFFNFhoK2NYSGxndzkrazgxbXo1dzUvZnJyMStxMXhsWjBCMFdRNmVrcGs4a0lBZ0RIOHh1Ylc3Ly8vY2M4ejczMW96Y25KaWNxbFdvOEhoY0V3ZUd3TzUwT0FGQzJ0cllmUEhpUVRxZDRYcUFvNnN5WjA5ZXZYM2M2bmVsVVpuZDM3KzdkdTgxbTg5S2xWLzdpcHo5MnVaeUs4b2ZtMkVmVStvR2pLNEFEUUJDVVpZbWlLSlBKVks4MTBwbU1LSXBPcDB1UkZaUEpDSUpBSnBQTjUvTTh6OU0wSFlsRXJsMTd6V0F3OER6ZllUdXhlS0xSYUdpMDJvQS9ZRERvVmxmWEV2R0VYcWZGY2F6VDZTQUlZaktiR28xR09wMEdGS0N2djk5bXMyNXNibTVzYklBZ2JMYzdTSkw0d3BPcWcyTlIxZXN4R2cyaFlFQ24xVEVzMDJ5MjFEMFRSVkZRRlBYNS9hOWZ2eG9LQlhFTUUwVUpCS0hEb1E4dkh2UStlOCtEbjROcXI1Q056YTEvL2RkL3kyUXlaODZjK2N1Ly9GbW4wMWxZWEJKRmNYSnlRbTh3TkpyTmVyMld5K1YvL2NHSDJXeDJlbXJxUno5NlF4U0ZPM2Z1Ym0xRk5ScU4wYUQzZVQxV3E3WGRhdDI5Y3krWHk4dXk3SGE3Ly9Jdi8ySmtaSVRyOE5zN3UrdnI2MXViVytGdytELzlwMzhZSGg1QUVFUVVSUWo2Z3RQeG84V1JGd0J3eUozdyszMnRWcnRVS2dtQ2dCTUVCTUZhcmRacXRlN3Q3UlVLaGI2K3Z2L3dILzZ5dDZkbmZYMnpYcXNQRHZicmREcUtwRXdtbzl0dDF4c015V1J5WTNNckZvdHp2TEM3dTUvT1pBa2NqL1QyTkpyTldEek9zdXpJeUtqUDY2MlV5M2Z2M20rMW1sYUwyV2F6d1RDa2h0MURFUFJjeGFpRGJWT1NKSHNqdmYzOUEwNm5Fd1JCTmRIZTQvRmN2bnpwNnJYWHJCYkxnU2VESUo5YnVEOW5XQkFFUVpEYW9RdUNZQmpGc0VhamVmdjIzWC81bC9kYnJmYTc3NzU5L2ZxMVRxZHo5KzQ5SEVPSGh3ZE5KdVBqbVptbHBhV3Q2TTdLNnVydDIzZENvZENycjc3cTgvbFpocTJVS3lhVGFXaHdRQlNsVkNwTlVsVC93TURLNmxvaWtiQllMRC82MFkrdVg3OHVpbEk4bmtpbFV2UHo4NEdBLzhmdnZmUEt4Zk1vaWp5M1dEKzZBamlTYTRBWFVSUUZRU0MvM3p2UTM1ZEtwZVB4dUZhckZRVEJack41UE42Zi92UW5CRUZRRktYV3dJckg0aWlHdXR3dWZ5REVzbTJTd0ZpV1hWMWR6V1N5SUFoU05JM2p1TkZvYkRUcUR4ODlPbjNxNUVCL0gwMVJ1N3Q3T0lhSHdxRjMzM3RYbzlVdUxDeFdLcFVMRjg2UGo0K2lLS3JJRWdDQUdJWVNCQUVBaWlpS2t2UTBTUktHWVVVQllGRUsrSDFhemV0VGt4UHBkTHBjcWVoMHV1R2hRWmZUcVZvMERDT3RWb3ZuZVJpR0tZb2tDRUtTSkRVbERRQUFETU1nRUJKRWdXRVpXWklSQkZFVUlKdk4zYmg1YTJscGlTTEoxMzk4Zld4c3RGRnZyS3l1YWJXYTRhRkJDQUx2M1h1UXorZHROaHNFUVpWSzFXZzBsY3ZscmEydGdOOUwwK1RZK0FpQ1lEaU9QM3p3TUo1TWdqQ3MwK2tnQ0l4RUlzUER3eGN2WG13MlcvVjZQWjFPcTN1andXQ2dyNzlQbzZHNXo3ZVFPcnJXRHh4cEFYeStHQWtvU1hJbW01TVZ4V0F3Y0J5WFRxY0ZRV0FZeG1ReTlmWDFjUnhYcnpjRVhsQUROcFBKNUtlZmZqWXhQdW54T0EwR1hibFNmZno0U2JWYUN3YURrZDVlVVJSSmtpQUliSDh2ZHUvK2c3SFJVYVBSWUxOWkU4azRqTUNCZ1ArdHQ5NEVRVEM2RmYzZDczNi90YldGb2dpTzR3YTl3V0t4NlBRNm05V2kwMm5WazJPZTV3dUY0dDVlckZBc1VpUnBNQmdNQm9QSDQ5RnF0YlNHSWdsTUxkeFpxVlF6bVZ5cFhLN1g2enpIa3lRWkNQbzhIcmRXbzFHbmwyYXpWUzVYaXFWU3ZWWXZsY3NzeTBxU1ZDeVc0ckc0MFdTNi9PcWw2ZW5KWXJHMHZiTXJDbnd3RUdaWWRqdTZFNDF1RHd6MmF6V2FScU5wTU9oUG5UcXhzcks2dnI0K1BEUXdQREppczVINWZIRmxaZTNobzBjZ0NJRWdXS2xVWFM2MzIrMEpoOE1ZaHUzdTdqV2J6V0t4VUN3V1hTNFhncUxWYXJYVmFxRW9xanBqUjlueW4vSXl1RUFBQUNBSXd2UEN3NGVQNHZHVTJqZXAzVzUzT3AxR28xRXVsem1PczlzZERvY0R3ekM3elM1SjBsWjA2OU5QUDYzVmFnZ01FU1RWYXJYdjNYdGdOQnBQbnB3T0JBTDdzUmpETUU2SHcrUHhmUHJablhnaVFWRmtNT0RuT0Q2WlNqRU1Fd2o0UjBaR0lCamUzTnk2ZWZQV3padTM1dVlXVXVsTW85a3FGSW9kanNNd1hLT2hJUWpLNVl1UEhzNzg5bmNmTFN3c3B0T1pRcUdRenhjNmJNZnVzRm5NWm5VY3JWYnJxNnZyRHg0K2lzV1M2K3ZyaTR0TEc1dGJ0VnJkWURDWXpXWVlobHF0MXNaR2RINWhjV2xwWldibXlXOS8rN3VQUC81a2VYbWwzVzVOVDArOS9jN2JJeU9qaVdSaVpXVkZFSVJ3T0tUSTh1M2JkOWZXMTExdTU4bVRKL1pqc1dReTVmRjRob2VHV3ExV3A5TXhHSXg2dlRHUlNOeTRjZU5Ydi9wMU5MbzlOamJhMnh0cHRWcHFIeDJlNTNkMmRuSzVYS1BSNkhRNkdJYjE5UFEwbTgxT3ArTncyUFY2SFFSQkIyVkpqL1FNOEpJSUFJWmhobUdYbDFkcnRScUtvaWFUeWVQeFpMUFo3ZTN0YkRhN3U3dGJLcFhhN2JZZ0NCMk9jem9kWHE5WFVZRGw1ZFVuVDJZM042T1ZTZ1VFd2FuSnlhbXBhWi9mWnpZWm85SHRhcjBXOFB2YURNT3lYS2xVcnRjYmtVZ3ZSWkg1ZkdGL1AyWTJtNGFIaC92NklpaUtKaExKN2UxdG51ZUR3WURQNTl2ZjMwK24wd2FEUWF2UjdzZmkyV3hPcDlNNG5VNFFoQ3dXY3pBWVdGbFo2M1JZdlU2cjV0M2Z2Lzl3WldXTnBFaTczUzRJZ3RGb0dCNGVCQlNGMW1pTVJpTUFBSi9ldXIyMHZDTExpbGFqdVgvLy91cnFLb0tnRnk2Yy8vdS8vN3VyMTY3U0ZMVzZ1ckt4dnVWeXUxd3VSemFiVzEvZnltU3pMcWRyZEd3MGxjcWsweG1mejNQMTZtV255NDNBcUN6TGhXSng1dkhNQng5OHNMUzBiRFFhMzN6ampiNUlwTmxxYkc5djUzSzVyYTJ0bFpXVm5aMGROYlBaNi9VT0RnNnlMTXV5SFpJa1RXYXozV0dEWVZpU1h3WUJIR0VYNkRsQUVJQWdTSktrZHJ2VmFEUndIS2NveXUxMjEycTFiRGFiVHFmVnJuZ1locHJOWm92RlFsR1V5K1ZrR0RhWlRPN3M3TWl5TFBDOHlXd2FIeDhMaFh2VzFqY0wrWHloVUhJNVhScU5odWQ1Q0lZMk5yZUdCZ2ZNSnROV2RHZCtmaUVROEhzOG5wLzk3S2VSM3A2UFB2cGtmV01qSGsrOGR1V3lRYTlMSkZNek0zTTJtODNuOCtoMU9nUkZSVkc2Y2VNR0JFR2hVTERSYUJTTHhmMzloTThmYnJVYXlWUWF4ZEJUcDZaM2QyTm1zOG5yOVk2TmpqWWFkYjFlaDZMSWZpeSt1Ulh0N2VreG0wMXpjL01NeTc3eXlzVkxseTZkTzNmTzQzWVZTNlg5L1ZpajBlanI3M1U0Yk1sa2FtOXYzKy8zd1JDb04rZzFOTDI4dkdJdzZQdjYreWxLVzhqbm85dGI5Ky9meitkekJFR1NKS251Rnk4dkw5LzY5RmF4V0dvMm16elBjeHlIWVpqVmFsVTdLbkFjdDdlM3B5aUtLRWtBQUJ6ZXFIb0pmS0NYUkFEcXJxTFRhVStsMHVWeVJSUkZ0ZEpUYjI5dkxwY0RBSUFrU1JSRlVCU3JWcXVibTFzQXNHVXlHUTBHQTRJZ0xNdldhaldPNHhpR3FkVnJ0V3JsOUprekhvKzcxV3JtOG5tbnc0R2dzT3JsUDNqd09CZ0lESThNSVNpNnNiRVpqOGNaaGcwRS9PZlBuL040dkI5L2NuTjliWlZoMllIK2Zsa0JaaDdQN1BaSEJnY0hYQzZQSUlqeGVGeFJGSW9pblU1SHZWNmZtNXZmMjQ5WnJHdlZTcmxhcmJyZHJwNXd1RktwbGtvbFJRSE1Gb3ZYNTRVZ1lEdTZQVCszZ0NEdzhQQ2dJQWlGWW5GNmV1cktsU3NuVGt4REVKUk9aK0tKQk1keFBwOW5aR1NvVkN6bDh3VUFBQ0s5UGVvMnBTUkw3WFo3b0wvZmFqWnRiS3pmdkhuei9yMEgrN0dZSkVsNnZWNFFCUFdRcmxBb3NDeEwwWlRWWXNWeHJOUGhNQXp6K1h6RHc4TXdEQmNLaFhRNnpmTzgzbURRNjNWbXN3bFVnRzhZc3ZIdm41ZEVBTElzb3lnU2lVUzJ0M2YzOWlTQ0lBS0JnTi92aHhHRXBpa1FBSnd1UnlBUXdEQXNrOGxzYm15dXJhL3Y3dTRtRWdrSWdnd0dnMTZ2eHpBc2xVckY0L0g5L1JpR29SU3RvV202V3EwaUNDeExFcVhUdXR3dVVieVh5eGNpZlpHZW5yREpaRmhmMzB6RVU1bE10cisvTnh6dWVWV1VHS2FWU1dmR3g4ZnRkbHVsV3JsNzd6NElncUZ3cUZLdWZITGpWcjFlNyszdG9XbTYzV1lhalZZdVY2aFdxNklvNW5KNW85SEFjVnc0Rk41WTMxcGNYTlJxNllIK1BsRVNuOHpPemM4dm5EZ3hhVEFhOS9iMk9oM3UrdlhYcHFhbWVWNVlYVjBwbGNwbXMzbGdJQkx3K3pDY1hGeGNybFJxVHFmVFlOQlJKTmxzdFRpT1J4Q0VvcWxNSnZ1TFgvelBYL3pQWDdiYmJiUFpyTmZyTzUxT0twVnF0OXNFUWZoODNyTm56d3dPRGdhREFhMUdtOHZsNG9tRTJoRlZraVNOUm9NZ3lPTGlvc3ZsOVB0OU5wdFZBUlRsbXpWUSsvZlB5eUFBTlRJVUJFR1h5eFVLaGVyMWhwb1lBTU53c1ZESTVmS25UcDhZSGg2eVdLeUtJb3VpY3ZXMUsrVnlPWmxNN2V6c0xpd3NMcStzN08vdmd5Q28xK3M1am52eTVNbi84ZC9vVjE1NWhhWnBOZU9Kb2lpYTFpaXkwbXcyMjYyV3dQTVFCR28xbXNtSk1hL1hzN2NYMjlyYXp1Y0srWHlCNTNpWDI0WGphS3ZWckZRcTgvUE5kRHByTXBsNG5sdmYyTGgyOWJYeHNWR1c3Y3pNUEhuNDZMSEpaTEpZek5WcWRXVmxwVmFyall5TWpJeU05ZlQyZlBUUjcvL0xmL212NCtOakRNUHM3ZTIxV3UxaXNjeHhnb2JXNmJUYS9iMFl4d2tJZ2tpU05ENCs2blk1YVpwVUZFQlJ3RmFyWGEvWGFKcUVJSmltYWJiVDRiZ09pcUw1ZkQ0YWpmN0wvM2hmRUFTU0pPdjFlaXFWTWhnTWc0T0RvNk9qdzBPRHdhRGY2WFJxdFRvRXhXQklrUlY1ZlgzajRjUEhzVmhNcTlYcTlmcGdNRmdzRnZ2NitrS2hJRW1TZ3NBZlBQa2Yrc1AvdGh4dEFUeVhvNGdpcU5sc3Nsak1ITWVUSkNGSkV0TnVReEFZRG9jY0RqY0lncTFXbldVN09xM1diRFo2UE82aG9jRno1ODdzeDJJcksydXpzM003Tzd2VmFyWFQ2ZHk3ZHg4QXdNSEJBYlBKQk1PSVRxY2pDQ0tmeisvdjczTWNaN2ZienVuUGtTU0ZFektLb2hpR2dTRDQ2UEZNSXBHMFdpeFdxMlYyZGk0YTNlbnY3eWNJc2xRcWJXNXVTckk4ME45LzhzUkpDRWJ1M0w3NzVNbWMyK1c2Y3VYVjBkR1JlcTBPZ2VERzVzYXZmdlZydTkwK01URldxMVUrK09ERGpZMU5ITWY5ZnIvRllpa1VDbzhlUFhJNkhYMzlmZmZ2UDRnblU1TVQ0NU1UNHk2WFhhUFJJQ2dxQ0dJaUhwdWJtMXRkWFJORlVSUWxyVTdIQzRJb0NBekQzTC8vWUdscEtSNlBVeFFseTdMUDU3MTI3ZXFKNmFsd1Q5amhjSmhNUmcxTkFTRFlick9OUnQxcU1XSzQzdUh3T0J6eGJEWkhFTGpSYUFBQVJhZlRXY3htblZiN0xQcnVDRmVETzh5UjN3WDZmRE5RUUJJbHR0T3AxV29NdzRpQ0lDc3lnaUI2dlI3SHNYSzV0TEt5dXJPOXJkVnExTXhEZzhGZ3NWbzB0RWFXRlk3anF0VnF2VjduT0s1V3E3VmFMWktrK3Z2NmV5TmhrOG5ZYnJmVzFqWTJOallxbGFxNmt5akxNb29ndElZbUNLcGFyYzArbWN0bXMxYXJsU0NJMWRXMVRDWnJzVmpjYmpjTUl5emJvU25xblhmZUNnU0NxeXVyLytQOTk3ZTJvaGN1bkgvenpUZjcrZ1pjTGtlOTBWaGVYbGxjWExSYUxYMlJYcXZWeXJKc3RWcHpPcDJxeXhTUHgwdWxraVRKTUF4dmJHeXlET3YzKzZhbkozVjZIYy94bVV4MmVXWGw3cDE3czdOejFWcE5yemQ0UEc2ajBXQXc2QVZCbUp1ZmYvRGc0ZHJhT3NzeUJFSFliTGIrL3Y2VEowOU9USTRQRFEyNlhFNEN4eUVJYk5TYmEyc2JDd3NMQkVFb2dGSXFsUXFGQWdpQ0FzODNtMDJHWVFpQzZPdnZkVGpzendVK2RRWHc3NEtEcVlDaVNCaUdxOVZhSXBFUUJWR3IwWkFrbWN2bE9ZNkx4V0wzN3QwdjVJdmhjTWpsY25LZERzL3pPenQ3QzR0TGUzdjdCSUViREhxQ0lEaU9VN3NqV3N6bVYxNjVPRG8yQW9IZzd0Nyt4a1pVVVJTV1pkVnlVYzFtQzhNd2lpUWxTY3JuQzgxbWs2WXB2VjVYcjlkNVhoQkZrV1ZaaThXTVlaaFdxd2tGQTFQVDA2bFUrcU9QUDM3OCtER0NJSUZBd0dHM1lTaGNLQlNpMFdnMHVwM0w1U1JSMHVuMUxxZkxhck9WeXhXWHkwbVNaREtaYWpZYktJcEJJQ1FJdkZhck5abU1Ub2ZENGJDTGtwUklwTzdkZS9EaGg3K2JlVExMY1p6VmFqV2JMUUFBdUYxT244OHJDdUtkdTNkblptYUt4YUxGWXVucjY1dVltQWdHQWdBSTVMSTVXWklJSEVjUUJBU2hWcXM5TzdkdzY5YW5HSXAxT213dWx5c1d5MmF6cFZBb3B0TVpCSUdIaDRkNmVzSnFWQ253TE5EanFGcy9jTlJkSU9DRmFnZ3dESHU5YmxwRGU3M3VyYTF0aG1XZEJvTldxMnMwMnR2YnU0VkM4ZFRKYVlOZUQwSVFBSUw3KzdGYnQyNjNXdTJod1FHRFFkOW9OUHY2K3ZyNitqNzY2UGQ3ZS9zWWpsa3NKaGlDNHZGa0xsZlVhRFJxU0tuSlpOSm82RXc2ODZ0ZmZmRGt5ZHpvNkdoZnBPYy8vSWVmTWd3ckNMeEdvOW5iajYydGJiQXMyOWNYV1ZoWWhHRm9kSFIwWjJmdnpwMDcrWHorL1BuejdYYjc3dDI3ODNOend5UEQyV3cybmM3bzlmcDMzbm1uM1c3ZnZuMm4yV3hQVFUzNi9iNWFyYWJUNlNZbnh0cnQxc1Q0K01qSWtLTElraVJSTkExQlVENWZtSnRiMk5uWmJUYWJNQUtiemFaMm00RmhHTWN4aG1FVHlaUk9wOWZwRFZhclZkM1RmUFhWUzJmT25IRTRuQWFESG9IaHRiWDFPM2Z1bDBybEsxZGVoU0ZZcDlNNjdEYUtvamEzb3JJQzJPMDJsOU9aeitkaEdCNGJHeGtlSG5ZNmJBU0IvN0hwbXYvK2VSbG1nT2Vpc2lBSW9taktZckhvdEZwSmtrcmxjcWZUcVZZcUhNZDVQTzd6NTgrNTNTNFVRZXIxeHAwNzkwUlI2dS92OTNqY0t5dXJLNnRyc1hnc204MG1reWxabGljbko2OWRmVTJXbFhLbG1zdmw0L0ZZUHAvbmVjRnFOUThQRFk2T2poWUt4ZnNQSHR5L2YzOTdlNmRlYTZBWWFqUWE5VHJkenZhZUlBckR3ME04ejVlS1piWGMxWU9IRHdxRkFrM1RHbzJtM1c2M1dpMEVobkVjYjdjWmRXMXFzVmpVeWtJc3k1SWthYmZiczlrY0JBS0RnLzNOWmhOQkVJUFJZTEdZOC9uaXl1cmF4eC9mK01VdmZubi8va01VUlNjbkowZEhSN1BackN3cmtpUzFXaTJueTZYUmFMUTZMVTJUNlZSbWVXV2xWcXNaREhwUmxOUU9JQ2FUYVdDZ3YxYXJWNnBWV2tOYkxDYUN3RkVVSlVpaTJXeUtvc2p6QXRmcG9CZzZOTmcvT2piaWROb0pISHZ1YWI4Y01qanlNOEJ6SEFSUjZyVGEzdDR3U1JMYk8zdWREa2ZUWkNEZzlYZzlvVkNRSkhCQkVCdU41dDdlZmlBUU1Cb04yVncrRmsvd1BJZGptS0xJSGJaRGtwVE5hdFhyOWFJa1NhSlVLcFZTcVZRNEhHcTEyZ2dNSXdnS3czQ2owZGphMmlvVUN2VjZvOVBwMU9yMVdDeU9JTWpPem00d0VBaUhnN2R2MzRVUm1DVEpWRHBkS0JSNmVucHdITnZhaWhJRWNmbnlxeTZua3lRSlFSU3IxV29pa2F6VmFpTWp3dzZIdlZxdGJXeHNYTGh3WHZWTWVGN3crM3lMUzh2eGVNSWY4S1hUMlV3bXZiYSt2cml3V0svWEtZcVVaUmxGTVFSQnZWNHZCRUdsVWpHWlNOaHRWZ3hGRVJoeU9wMWFqVWFTSkVFUUlRaUVZYkJjTG0zdjdQZ0Rmb1BSc0xlM3Y3dTcxeGZwSlFqUVpyZWVPWE5LcjlmWGEzVkZVUWlTc051czRYQlFiVGdpU1dyeTE4dGc5SWQ1U1FUd1hMMEdXWlk3SFJhR1liL2Y1M1E2YS9VR0FDZzBUZEVVcFJiSFZSUlpGRVdCRndxRllyM2V6T2Z6TnB0bFltSk1xOVV0TGk3bWM0Vm1xMFZyTkNSSkFpQlFLQmJXMXRZYmpjYTFhMWVyMWRycTZ0cmVmbXg1WmZYSmt5ZU5Sc1BuODEyNWN0bmo4YkFzdTdLeW1zdmxJUWdLQlB5S3JKUktaWUlnR0paSnBkTWFqWFo0ZUtqVmJDMHZyd3dPOWw5KzlWSTRIRklBQlFEQVZyTjEvLzZEVHorOURjUHc4UEJ3T3AxNTlPaHhMcGRYRkxuVDZTUlRhYXZGVWk2VjFqYzI0NG1FWHE4UEJBSVdpd1ZGME51M1A5dmMzQ1JKc3ErdkgwWFJzYkZScTlXeXNyTDZ3UWUvc2Rsc1o4K2NSbEZNcDlOcHRGcVh5M1g2OUttcnIxMDJta3libTF1TGkwdWZmWGE3MFdod0hNZHhuT3BaZ1FCZ01adk9uVDFkcnpja1NhSnBpcVlwUlZFT2N1UmZqdmpuNTNoSkJQQWNCN0g0a2lRaENHd3hQeTBwcmk3Z1pGbmRHdExwOWZvbk16TzFlc1BuODc1MjVkV1I0Vkc5UWU5eXVSQUUrZXoySFF6RFpFVmgydXlqUnpPenMwK0N3WURGWWdxSFF4QUUzYnYvb0Y2dkY0dEZnc0F2WHJ6d0QvL3dEeTZuczlOaFMrWGl3c0x5NnVvcXkzS0ZRcWxXcTlPMDJPbHcxV3JWNlhRV0NvVmNMbWN3Nks1Y3Z1VDF1Z1dCa3lRWkFBQmFRNCtOajNXNHp1UEhzeWFUR1FBVVJaSHorWHk3M1JaRm9Wd3FZU2hLYXpTblQ1KzZmdjAxczhtczFlcmJET1B6K1RZM04xS3BURGFiN2UzdDlmdjlFeE1UTkUxdGJHenU3dTQrZlBoZ2ZIenN6Sm5Ub2lSNnZaN2g0YUgvOUovK3dXRzNrU1NOSUZnc0ZyOXo1MDZoVUJnY0hMaHkrUktLb21wMnBTUkpFQVFaamZyRGordWxzZlV2NU9VUndPR0VMUFY3NEZrakdUWFhWdTJ0QW9LZ0FnQ3lvbWcwbXZQbno3YmFyY2VQWjZMUjZLOS8vY0hlL3Y3QXdJRGI3WnFjbkVna2tnQUE1UFBGZUR5eHRyYTJ1N3NyU2RMRGg0OWZlZVVWczltTW9hZ3N5NUlrZFRwY29WRGMzTnhNSlpPTlJxUGRicFhMMVdxMUNrSHc5bzRwbFVwYkxHYUNJS3JWcWw2dmI3ZmJsVXFacG1tanlZd2dhS2ZEcXMwSEFFWFI2N1JXaTZWU0thZFNLUXpER28xR3BWSXBsOHVDSUNBSTJtWVl0ZnYzMXRZMkNPNFlqU1lBQUJLSk9NT3draVJLa2dSQm9GNnZSMUUwSG84L2VQQ2dYcTl2YlVVWEY1Zjgva0N4V0xMYjdYMTlFWnZOdXJrVlRhZXpLeXVyang0OWFqYWJnVURnMU1tVHZiMDlhcCtSZzFIajRJc1h0L2xmUGpHOFBBSTRRRFZ4OVN0VkF3ZVZtdzQrUHpWMFluaDRFSVloaTltOHNycGFxVlppK3pHVDBlaXcyK3gydThsa0xCUktLeXVyT3p1NzZYU2E0N2hrTXZuKyt6OXZObHQ2dllGcHQ5dnR0aVJKRE1QczdPemN1dlVwVGROY3A4UHhQTU13dXp1N0dxMkdZWmhZYkw5ZXJ4bU5SbG1XdDdlM01ReGpHSWFpV3NWQ1FhdWhjWUpVTHd4QmtWYXBuVXFsYTdXYUdwMVJLcFVNQnNQKy9qN0xzaXpMTWd5VHkyVkprdUk0WGxGa25VNHZTYUphN0ZydEJWK3IxU3VWOHAwN2R4WVhGKy9mZjZDRzkyeHNiRVFpa2QzZFBZcWlYQzRYQk1HTlJtdHZieitkVG11MW1wR1JvVk9uVGsyTWo1bU1CdmxRZGk5d3FPbjNTMi85d0VzcEFPQlptcm9hcW5MNHBFdzV5S2hWRkFVQVNKS1lQakhWMDlzVGk4VlRxVFJKa2o2dngyNjN3akNpMCtxaTBaMTc5KzRWaTBXMVVockRNRGR2M3N4a01zRmdFQUNBVkNvcHk1TEpaRElhalJ6SEdRd0dpcUxxOVVZaWtVd2tFN0lzMSt2MVpyT3BubzVacmRaTUpxTytrbUdZVC92NkZBQjB1WndBb0lDQTBteTJGcGVXYnR5OGxjbGtXNjAyQUFDMVdnM0RzSjJkblU2bnczRmNLcFZpR01idGRydmRiclhiY2ExV0J3REFaclBWYWpWMUxkNW9OSkxKWkRRYVZlc1dzaXk3djcvLzVNbVRWQ28xTWpKa3NaZ0lndWpyNjBVUU9CUUswRFRWRXc3WkhYWWN3dzZYZEgreDlOMUwwQXI3cTNrNUJRQWN6aHYvOGs5T2ttUlpsclVhZW5ob3NMKy9Id1JCQ0FRZ0VFQlFOQkQwTDYrc1BIandzTlZxVmF2Vlo2K1hvdEZvTEJhRElJam4rWUdCZ2F0WHIxNjhlSUdpYUpQSnlERE15c3BxcFZMeCtmenRka3NVSlJ6SHM5bGNwVklwRklwcVlJL2FvYU5lcjYrc3JFNU9UcGpOUmtFUXRyZDM3OTI3LytUSkUxR1VFQVNtYVpxbTZYUTZyYlpxNURoT3E5V2FUQ2FYeStWMnUwNmZQbTIxV0hoQkxCWkxxVlRpZ3c5K016TXpNenM3aTZLb0dzbXNYcW9hd3d3QUFFM1REcnZkNlhBQWdHd3htOVFFQXhBRVlFZ3RhZnE1aGdaZlhmRHJwZVNsRmNBWDhsenNFUGlzeXljTVF3aUNBQUFneTVKYTNyQ25Kenc4UERRL3Z4Q05SdFZhNStydjhqelA4enlHWVgxOWtmLzRILy95MGl1dmFIVjZraURMNWZMT3ptNG1reGtmRzdsNDRSeE80SXFpTUF5VFRtZmlzWGdxbmFuWGF4aUdWU3FWL2YzOWVyM09jMXlIWlVvbENRQkFqdXN3RE5Oc3Rod091OFBoVUNzUURnNE8rUDErcjhkak5wc1JGSlVscWRscTFldU41ZVdWaVlseE5ZNC9FUEFhRFhxdGx2NzFyMzlUcjllQlE1WXFDRUkrbnljSTRzMDMzNHhFSW5xOVRoSkZFQVRWaGk0S29DaXl1aHYyTWh2M04rRjRDVUFGL0x4ZnBDNW5ENzRGQUVDU0pJdlpORDAxbVV5bWFyV2E2b1VmL2hXcjFmcldXMitkTzN2V2FyVXlETnRxTlJhWEZwUEpsTXZsbUo2YTlIZzlORTBEQ3NDdzdXYXpsVWxuMTlZM2xwYVd6V1p6bzlGNCtQQkJ2ZDZ3MmF5OWtRaEZVVEFFS1lxaTErdHNOdXVWSzVldFZwc2dDRGlPblRsOUpoRDBtMDFHalliR01GemcrWHl4dUxXMVBUOC92N3k4TElwaU1CZ1VlSDU4Zkp6anVIUXFNenMzMStsMERpNFNoaEd6MlR3OFBIejUxVXVCZ0U4dDc2enU4eHpjeFhPaERNZFRDY2RSQU1DaDJuSUgzeDcrdjRxaUFJQVNEQVYrK3RNZnd6RDh5U2Mzb3RFb3k3S0FvbkE4aitQNHdNREFhNjlkQVNFb2s4M3FkTHBvZENzYWpicGNybmZmZmR0a01nR0FvbmJKMXV0MVJxTXhHQXdPRGc1b05Sb0loZ1ZCUkZIa3hvMmJzcXc0SE02QmdRR20zWXB1YjRNZ0dBcUZybDY5cWhyeDJPakl3T0FRanFPeUpDaUtyQ2dBVG1DaFVORHBkRklVY2VQR3piVTFPUkR3bHNvbHJWWWJEdmU4OGVZYmUvdjdwVklKeDNFSWdsQUVzVHNjcDArZmZ1dXROOCtjT2FuUmFBUkJlREY4LzNDQnZlTnAvY0N4RlFEd2xRT2V1aTBJZ2FEZjUvbTd2L3ZyMDZkUHJxOXZ4bU94VnJ1MXZ4OVRGR0J5Y29Ja2lIcWpxZFZxdEJwNmVYblZaREtmUEhuU1pESUxQTWN3aktJQUJJa2pDQ0lLSWd5TEpJbVBqWTA4ZWpSVHFWYWRUcGZmNzkvWTNMeDM3NTVPcDluYzJKcDlNaWZMeXREUVVLVlM0VGd1RkF6MDlmV0NnTWgxaElOV3NBQUE0RGlHNC9qMDFPVFdWalNkenV6djdZZENvVlFxdy9QQzJPam8wTkNRTEV0T3AwT3YwOXNkanI2K3ZvSCtQcS9YamVPWUxFdGYvUkNPcmZVRHgxa0FCM3hGQzNnWWhtMVdxMTZuaS9UMk5CcE5RWlNmUEhtU1RxZk1aa3VsV29VZ1dLdWhGVVd1VkNvdWw4dmxjaUlJQWdMQWZpeVJpQ2RRREoyZW5pUUlYQzEzN3ZWNm90R2RiRFlyaUpMYjdXNDJXOWxzYm1abU5oNlBRekRrZHJzcGlrcWwwc0dnUHhEd2t4VEpkVG9RQ0ltU2xNdmxaMmZudytGZ1gxOHZCTUVhcmNGc3RpWVN5WFFtTXprMW1jNWttNjJtUnFNSkJnTjlrZDZwNlNtVDBVVFJwRjZubzJrYWhxRURuK2NMNzdkTFZ3Q2Y0OFdRQ2hCVVNKS2dhY3JsY29FUTJtNjNaVmtTUmFsZXIrdjFCZ2lDT0k2RFlialJhRmFyRlkvYm9RQkFQcCtmZWZKRWt1UndPT2h5T2RYM3BHbmE1WEx1N082bTkySVVTUnFOUnBabFAvNzRFeGlHbnhXdXFuUTZuTjFtYzd0ZHNpUXBDb0JnU0xQZDJ0amN1dlhwWjdJaUJ3SStraVRiclZhajBlQjVBWUpnMWJnNWpwZWtwbGFyaTBSNko4Ykh0VHFEb2dpeUpFbVM5R0pEK2E3MVAwZFhBTS96M0JJWkFBQkJFRlF2R2NkbERJVVZXYW5WNmdpQzREalJhclZSRkxWWmJmbGNmbUZoU2EvVHlvcVN5K2JTbVF6THNLVml5V2ExSWdnaVNTSUFLQ2F6VVMxWUJBS0F5KzNhMzkrL2QrOWVYMStmMjYxbXE3Vk1KcFBKWk5Kb05KSWtBWUNpdHRqWTM0L2xjcmxrTXBsTXBscXRkcUZRU2lUaUVBVFpiUFpLdWRicGRIaStVNi9YWVJoR0VGU1dSYTdUT2h5eS85eXQvZEJQOTk4ZFhRRjhBYy9OQTRlT1NHV0h3MjR5R2JlaTJ4ekgwVFRkWmxnQVlFZEdoNk5iMjd1N2U0VkNBY013U1pLTkJxTldvMUhiQngzOE5ra1NGRVVvaXN4MldBaUNGRVZwTkJyQTA2cGVmS2ZUSVFpY0pBa0VnWitOM0lyYXVkcnI5VEZNNS82RHh6elAxMnQxaXFiQzRSQ09ZNjEyaTJIWVlxRllLcGZWVnFjMFRYL2hlaGZvV3YrWDBCWEFGL1Bjd3VCd0w0TGUzcDU0SWpVN084Y3d6T25UUkNnWWJMVmFOcnROYjlDTG9naUNVS1BScU5mckRNTndQQThBNnU4Q2lnSkFFQVNBb0NnOXpTbUJZUmdFUVF6REVBVGhPRTVkS2tDd1dtRlhVUlFGQUNGQkVPdjFlcUdRMSttME9FN2dHS2JWYUZBTW95Z2FBRUFFUVhkM2Q1ZFhWaTBXeTlqb2lNdmxmSzVVZjlmb3Y1YXVBTDZlZzQxQ1dWWlFCUEg1dktkT1R0ZnJ0V3ExbGs1bm5FNG5TWklnQ0hZNkhhN0RDcUtzOWxIc2ROaUQ2Z25xMjBpaXpITzhLSWdFVGtBUUpNdXlLSXFxZjZXVzlPSTRUaFRFUDlTWEJnQkprcHJOZHFGUXNOdnRpcUtRQkVFUUJBUWpGRVdoS0JLUHg4dmxpc1ZzUGpFOU9USXlyTk5wRHk5NXU5Yi9UZWdLNEk4QUJFRkJGQ21LbkpnWXN6dnNEeDQ4ekdTeW01dWJrVWhFTmZwMnV5MElZcmxjQmdEQVpETGhPS0UyRkFNQUJZVEFOc00wR2kxSmttaWFWcytKMisxMm9WRGdlUjVCRU5VamFyWmFnaUNxZXBCbEdVVlFnMEd2MStzWWhzbGtNaFJGcVludEdJYXhMTHU4dk9KME9pY254MGRIQmdtQ1ZCUlpEZXI4b1ovVFVhSXJnRDhPOWVRWWhpRy8zMnN3R0phWFYyZG41M0s1dkVhamhXRklOWGNVUlNPUnlPRGdRQ2dZUUZIMFlDdW1VQ2prY2xsWmxqVWFqZHB5aStmNWREcGRyOWR0Tmh0QkVOVnFMWmZOTlp0Tms4a29TWklnQ0ZhcjVkS2xpNUlrMWVzTlJWRWtTUVlBc0ZhckpaUEpkcnNWQ2dWUG5UemhEL2hCUUhuYXRMMXIvWDhrWFFIODBUdzFNa1V4R0hTakk0TTZuU2FUeWJXYXJRN0hRUkFJd3pxL3ordnh1SHQ2UWpxZFZwWWxDSUlnR0tsVXF0SG9kamFib3loYXI5ZXJWZWhFVWN6bjg5bHNWaTJiWGlxVk5yZWkva0RnN05uVGlDeExrb1JoYUU4NFJCREUvbjY4V0N3SlBBK0FBSTdqSnBQUmFEVDBoSU4ydXcyQjRSZWIxWFdWOEEzcEN1QWI4ZHkra0xvZ2hpRElhRFRvRFhxdjExTXFsaG1XWVZsMloyZVg0M21Tb2x4dWp5enhzcXdvQUZDcjFXZG41N2EzZHdWQk5CajBhb1hHV3ExbXQ5czduVTQybTNVNEhEYWJyZFZxcFZMcHBhVmxoOFBtY2pvUUJJRWdDTWR4bCtLTWJtMXpYTWZuOCtxME9vb21qVWFEMVdxbFNFS1NKSjduUDdmaDJUWDlQNGF1QUw0cHowWE9IQndSZ0NCb01adnNOaXNFUWVsMDlyUFA3cVRUR1VrVUEzNHZocUVnQURhYXplajI3cDA3OXdxRmdtcTRITWMxR2cyTHhSS0pSTlRVeDBxbEhBcUZxdFZxcFZMZDJOaEVVZVQ4dWJOV213WERNSUVYZHZmMjd6OTR3SEZjSkJLWm5KcWlhVUlVQlZtUzFKWjdCNDI2Z0dmSlFGMEZmSE82QXZnaitNSUc4V3BPRmdSQmpVWnplMmMzRm90akdGWXNsWC81eTkvb0RUcFJGQ3VWU3FGUVVudTZtTTJtZ1lIK21aa25ORTBQRFExZHZIZ3hsVXJkdkhtVDQzaU5odmI1dktJb3ROdnQ3ZTJkY3Fsc3M5czBHbzBvaXVWeUJRUWhuaGRtWm1hR0J2dHh6Q3lLd2hjbWJRRmQ2LzhqNlFyZ2orYkZ0S21ETUdNRVFXQUl4bkVjUVpBMnd6UmFUVkVVVzgxbVBsL001YktSU08vSXlMQldvMDJuMDA2bjg5eTVjK1BqbzE2dnAxQW83Ty92SjVQSlZ5NWVrQ1hwOGN4c3E5VldGRUJXQUlLb3d6Q2lGbThEUVJCRkVSaUdBRUE5WCtzZTlINEhRTi8rTFk0aGh3c0RxbC9Jc295Z2lNdmxPSGx5MnVsMEFnQWdpbUtudzlWcjlYUTZrOHRseldiVHFWT25yRmJyMHRKU3BWSUpCZ01qdzBNMm15VVk4SStQanhFRU1UczcxK0c0MGJIUjRlRkJqdXVrVXVsS3BjS3lIWlpsQlVHZ2FhcTN0MmR5WXB3Z2lNTStHSGlJSC9xcEhFbTZBdmhXUEd0dERTcUtBa09ndzJGLzQ0MXI0K01qT3AwV3cxQ3RobVlZSnAvUGd5RHd4aHV2ajQrTjVmUDVUeis3RFVHZ3orZHpPR3dZaXVwMG1tQXdvTmZyOS9iMjd0NjliN2ZiM25qajlmNitTS0dRcjFhck1BeFRKQW1DUUc5ditOS2xpeWRQVG1NWXFwNFpBOTBoLzd1ZzZ3SjlKNEFBb01peUFnS0ExV1k1Ynp4NytyVEVNRXc4bG1qVUd3YUQvc0tGODA2SC9jbnNrOVhWdFdBd3lEQ01YcWRGVVFRQUZBUkZJUWkwV2l5OXZiMnRWdXZPblhzakk4UC82Ly82OTA2WE01OHZPQnoyVnk5ZEpDa1N4M0VVUmFBWEF2VzZmRXU2QXZqMmZMNk1BZ0RpT0tiUllBUkI3TzdzTXd3amlHSTJtMXRkWFpObGVXeHNUS2ZUZlBqaDcwcWxjcjNSY0RvZEVBam1zamxlNEUrY21KNmNuTmpmajgzUHpkdnNObEVVRzQxbXU5WFM2YlE2blJaNG1zTC9oMGlINDV6RzlSM1NGY0IzaHVvSXliSXNpektnQUlBaWE3VzAxK2NwbGNwcUs2VCsvc2pFeERpR29odnJtOGxrS3JxMTQzRFljL25penU2dW9paG5UcCthbkp3d0dRM0xLNnZsY2htQ1lMZmI1WEE2UUJCVTQ0VU9LbngxK1E3cEN1RGI4bUo2TVF6RDZpNU5KTkpEMFZRMm0xTVV4ZS8zMlcxV21xWlpsajE3OXZUdlA3cXh0THppY2prM05qZUx4WkxINHhrWkdTWUliSHg4ek8vM0paS3BhcVZxTWhsZGJoZEpmbTdWKytKZjdQSnRBRm1tL2tOZnc4dkQ4MVdsQUVBQlFMWE1HZ3lCYXFGR0VBUUVRYng1ODdQWnVRVzEyY3pFeFBpRjgyZDdlOE5QSXhxZWhrOHJJQWlBNEhNZWx2ci91NmIvbmRHZFVyOUxudHVPVkFBQWdrQVVSVkFVQVEvQy9CV0FJSWpwNmNtZWNLaFVLcG1NeHRHUmtVQXdJRW5TVTdzSEFBU0dNQlNCWVJnRXdLOTQveTdmbnE0TDlCM3ozQ1FnU1pJa1NVODlsbWZtSzBtUzNXNmZtcDZVWk1ubjlZYkNBUnpIT2l3TFFSQUFnR3BscnVmY25vTTM3d3JndTZYckFuMzNIQVFwUENlR3d6eXQzaTRyRVBRMUZnMTJ0ejYvVDdvendIZlBWOWJiK3R6WENBd0JMMHdhUURlZDk4OUlkdzN3NStORk96NG9SUDdWTCt2eS9kR2RBZjZzZkVVUnJoZGYwT1hQUUhjRytNRTQ3Q2wxWTN0K0tMb3p3QS9KUzlsMjdtalJuUUc2SEd1NkF1aHlyT2tLb011eHBpdUFMc2VhcmdDNkhHdTZBdWh5ck9rS29NdXhwaXVBTHNlYXJnQzZIR3U2QXVoeXJPa0tvTXV4cGl1QUxzZWFyZ0M2SEd1NkF1aHlyT2tLb011eHBpdUFMc2VhcmdDNkhHdTZBdWh5ck9rS29NdXhwaXVBTHNlYXJnQzZIR3U2QXVoeXJPa0tvTXV4cGl1QUxzZWFyZ0M2SEd1NkF1aHlyT2tLb011eHBpdUFMc2VhcmdDNkhHdTZBdWh5ck9rS29NdXhwaXVBTHNlYXJnQzZIR3U2QXVoeXJPa0tvTXV4cGl1QUxzZWFyZ0M2SEd1NkF1aHlyT2tLb011eHBpdUFMc2VhcmdDNkhHdTZBdWh5ck9rS29NdXhwaXVBTHNlYXJnQzZIR3U2QXVoeXJPa0tvTXV4NXY4UEgvS1JGcTRvejI0QUFBQUFTVVZPUks1Q1lJSW9BQUFBZ0FBQUFBQUJBQUFCQUNBQUFBQUFBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzcvVDEvL0QxOXYveDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvKy8wOWYvMy9Qei85UG42LysvMDlmL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly92OVBYLzcvVDEvKy8wOVAvdTgvVC8rUDMrLzlMVzF2L2c1T1gvOXZ2OC8rN3o5UC92OVBYLzcvVDEvL0QxOXYveDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhQWDIvL2Y4L2YvNS9mMy8rZno4Ly9UNi9QL2s2T24vWTJOai80T0RnLy8yK3Z2Lzh2ZjQvL3IrLy8vNS9mMy85Zm42Ly9EMTl2L3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvKzN5OC8vMy9QMy94OHJMLzVpWm1mKzZ2cjcvKy96OS80V0Zodi9Lek16L29hT2svNmlwcXYvNCt2ci9xcTJ0LzUyZm4vL2IzdC8vOXZ2OC8rM3k4Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0QxOXYveTkvai85dnY3Ly9iNisvK1NrcFAvaDRpSS82eXVydjk2ZW5yL2c0U0YvLy8vLy8vaTQrUC9iRzF0LzRtS2lmK3p0YlgvY0hGeC83YTR1Zi82L3YvLzl2djcvL0QxOXYveDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84UFgyLyszeTh2K3JyYTMvakl5TS80Q0FmLzlJU0VqL3NiT3ovNFdHaHY5aVltTC8rdjcrLzkzZzRQOUZSRVQvc0xLeS80cUxpLzlVVkZUL2pJeU0vNHVMaS8rK3djSC84L242LysvMDlmL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLyszeTgvLzUvdi8vMmR6Yy8xUlRVLytKaVluL21adWIvM1oyZHY5UlVWSC9ySzZ1LzFkWFdQK3lzckwvaG9hRy8zSnpjLytibkp6L1NrbEovNGVJaVArZG41Ly9kbloyLzJocGFQLzMrL3YvOGZiMy8rLzA5Zi94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLysvMDlmL3U5UFgvK3Y3Ky8renc4Zi9hM2Q3L2c0U0UvOVRZMmYvNi8vLy80dWJtLzNwNmV2OXFhbXIvYTJ0ci95QWdJUDhyS3l2L2ZuNSsvMWxaV1ArYW5KMy83UEh5Ly96Ly8vK3p0cmIvbHBlWC8rVG01di93OWZYLytQejkvKzN5OC8vdzlmYi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3Y5UFgvOHZmNC8vMy8vLys0dXJyL2xKU1UvNDZPanYrS2k0di9zclMwLysvejlQLzcvLy8vMDlmWC8xVlZWZitFaElUL0ZoWVcvem82T3Y5NGVIai9abWRuLy9EeDhmLzMrL3ovNXVyci82U2xwZitLaW9yL2taR1IvNVNWbGYvTzB0TC8vLy8vLysvMDlmL3c5ZmIvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOFBYMi8vUDQrZi9yNy9EL2pJMk4vNVdXbHYrNnZMei9uNkNnLzRHQmdmOUVSRVAvMWRuWi8vZjgvZi93OVBYL2EyeHIvMzkvZi84K1BqNy9aR1JrLzJoblovK1NsSlQvK2Y3Ly8vci8vLyttcUtqL1JFTkQvNU9VbFArbnA2Zi91YnE2LzRHQmd2K3BxNnYvOWZyNy8vRDE5di94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vRDA5Zi9zOHZMLzh2ZjUvNU9VbFA5cmFtci94OGpKLzZTbHBmK0lpWW4vazVPVC8yUmxaZi9WMmRyLzkvejkvL0wzK1A5MWRuYi9lWGw1LzBGQlFmOW5aMmYvYUdoby81NmdvZi80L2Y3Lyt2Ly8vNjJ3c1A5bVpXWC9tSnFhLzRhSGlQKzR1cnIvdHJlNC8xdGJXLys1dTd2LzlmdjgvK3p3OGYveDlmYi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly91OC9ULzhmZjQvLy8vLy8vbTV1Zi9qSTJOLzZ1dHJQL1AwdEwvZG5aMi85TFYxdi9QMHRML1ltSmkvK0RrNVAvMisvei81K3ZyLzNCd2NQOTlmSDMvVTFOVC8yaG9aLzl5Y1hIL2pJMk4vL2I2Ky8vNC92Ly91YjI4LzJwcWF2L3Q4ZkwvcksydC80aUppZi9WMk5qL2xwYVcvNVdXbHYvLy8vLy8rZjMrLy9EMTl2L3Y5UFgvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzcvVDEvL2o5L3YvbzdPei9zN2EyLzRLQ2d2OTNlWG4vdnNEQS84ck56Zjk5Zm43LzhQSHgvKy95OC8vTno5RC84UFgyLy83Ly8vL0Z4OGovaDRlSS8xTlRVdit5czdQL2pvK1AvMkJnWC8rT2o0Ly8zZC9mLy8zLy8vL243T3oveWMzTi8vLy8vLy9LeWNuL2g0bUovOUhUMC8reHNyTC9ZbU5qLzVhWG1QKyt3TUQvOC9mNC8vWDYrLy92OVBYLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vRDE5di90OHZQLzd2UDAvKzd5OC8vMy9QNy96dExTL3pZMk52OEFBQUQvQUFBQS94VVZGZis0dXJyLzRPTGovNTZmbi8rVmxwYi85dm41Ly8vLy8vLzQvZjMvMHRUVi81S1NrLzlzYkd6L1JFVkYvK0hpNC8rK3dNSC9OVFUxLzRhSGgvK1VsWlgvNWVmby8vcisvdi8vLy8vLzVPZm4vNEdEZy8rN3ZiMy80dVRsLzQ2UGtQOEFBQUQvQUFBQS93TUNBdjliVzF2LzZPdnMvL1A0K2YvdTgvVC83dlAwLys3ejlQL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly93OWZiLzh2ZjQvLzMvLy8vNy92Ny85L3orLytydjhQOVhXRmovQlFVRi93SUNBdjhDQWdML0FBQUEvek0wTlArN3ZMMy8yZHJhLzUrZm4vOW9hR24vYW1wcS8xWlhWLzh1TFMzL0p5Y24vd2NIQi84K1BUMy9uNkdoLzVLVGsvOGRIQnovRUJBUS95a3BLZjgwTkRYL1lXRmkvMmhvYWY5eWNuTC90cmEyLzliVzF2K2NuWjMvRXhNVC93QUFBUDhDQWdML0FBQUEvdzhQRC8rSWlZbi8rZjcvLy9iNisvLzkvLy8vK3YzKy8vRDE5di93OWZiLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOFBYMi8rLzA5Zi92OVBYLzhQWDEvL1A0K2YvdzlQWC9vNmFtLzNsNmV2L1gyOXYvdzhYRi8zMTlmZjlUVWxML0FBQUEvMEZCUWY5NWVYci9IeDhmL3hZV0ZmOXZiMi8vZTN0Ny96YzJOLzh3TUREL05EUXovMUpTVXY5V1ZWWC9VRkJRLzgzUDBQLzArUGovOXZ2OC82YXBxZjlIUjBmL1ZsWlcvME5EUS84M056Zi9LQ2dvLzA1T1R2K0JnWUgvWFYxZC93QUFBUDg3T3p2L2ZIeDgveUFnSVA4QUFBRC9kblYxLzMxOWZmL2k1ZVgvdHJpNC8zWjNkLys3dnIvLzl2cjgvL0QxOXYvdzlmYi83L1QxLysvMDlmL3c5ZmIvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOFBYMi8rLzA5UC8yKy96LytmNy8vL1g2Ky8vdjlQWC85Zm42LzRDQmd2OHNLeXovcWFxcS8vVDI5ditIaVluL3dNTEMvNk9rcFA4VEV4UC81dW5wLzZxcXF2OGxKQ1QvTXpRMC85N2YzLy9CdzhUL2ZIeDgvNkdpb3YrSmlJai9nSUNBLzUrZm4vK0ppb3IvOC9iMi8vci8vLy8vLy8vL3o5RFIvNHlOamYrU2twUC9mWDE5LzVHUmtmK1VsWlgvakk2Ty85VFcxLysvd2NIL0Nnb0svMFZGUmYvVDA5UC9ycSt2L3hRVkZmL2EydHIva1pLUy82K3hzZi93OC9QL2ZuOS8veTR0TGYrc3JxLy8rZjcvLys3ejlQLzMvUDcvK2Y3Ly8vTDQrUC91OC9ULzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vRDE5di94OXZmLyt2Ly8vOXpmNFArK3dNSC8ydDdmLy96Ly8vL2Q0ZUwvZjM5Ly82cXFxditUbEpUL2pZNlAveFlWRmYrN3ZiNy80ZVBrLzJKaVl2K1JrcEwvaUlpSS8zUjFkZjhGQlFYL1pHUmsvNVdYbC85dmIyLy93Y1RFLzZTbHBmK2RucDcvbVpxYS81Q1JrZitQa0pILzFkalovOHZPenY5N2Uzdi9wS1NrLzVHUmtmK2VucDMvcnErdy82YW9xUDkyZG5iL2twT1QvME5DUXY4VEV4UC9pNHVMLzRhR2h2K0VoWVgvZFhWMC8vMy8vLzk1ZW52L0tTZ28vNkdrcFArVWxaWC9xS2lvLzRhSGgvLzErdnIvOWZyNy84N1EwZi9EeGNiLzZlM3UvL24rLy8vdjlQWC84ZlgyLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly93OWZiLzh2ZjQvL0wzOS8rL3dzTC9uSjJkLzUyY25QOXRiVzMveE1mSS8vdi8vLytibkp6L3FLbXAvNktqby85d2NIRC9Dd3NMLzVHVGsvL3I3dS8vam8yTi8wOVBUdjltWjJqL2dJQ0IvMmxwYWYrcHFxdi8yZDNlLzg3UjB2K2VuNS8vcEtXbC83Mit2ditRa1pIL2EydHIvMDVPVHY5TlRVMy9RME5ELzJKaVl2OW1abWIvcnErdi82eXRyZitxcTZ6L25wK2cvOS9qNVAvTjBOSC9sWmVYLzJWa1pQK0VoSVQvVWxKUy8xeGNYUCtrcGFYLzh2WDEvMUpUVS84akl5UC9oSU9ELzYrd3NQK1ZscGIvczdhMi8vLy8vLytmb0tEL2QzZDMvNkNob2YrYm5Kei8wZFRVLy9YNisvL3c5ZmIvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhQWDIvL0gyOS8veDl2Zi9xNjJ0LzRhR2h2K1ptWnIvek03Ty82T2twZitrcHFmLy8vLy8vL1gzOS8rMnVMbi9kSFIwL3lzcksvOEFBQUQvZTN0Ny8vVDQrUCtyckszL1RFeE0vMkZpWXYrNnZiMy8vLy8vLzZlb3FQOXRiVzMvakkyTi8zSnhjZitnb0tEL2VIaDQvK3JzN1A5bFpHWC9TVWxKLy8zKy92L1YyTmovSmlZbS82U25wLy9RMHRQL2QzZDMvNldtcHY5cWFtci9sSldWLzJOalkvL1UxdGYvL1A3Ky81MmZvUDlQVDAvL1cxdGIvOG5MelAvbjZ1di9RME5EL3dBQUFQOCtQajcvaDRlSS84dk96Ly8vLy8vLzlQajUvNG1LaXYvQnhNVC91cnU3LzVLU2svK0ZoWVgvdzhYRi8vYjcvUC92OVBYLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8vdjlQWC85L3o5Lzl6ZDNmK0VoSVQvdnI2Ky81T1RrLy9kNE9ELy8vLy8vL3I5L3YvZTR1UC9wS2FuLzJWbFpmOHJLeXYvQWdJQy8xeGNYUCtlb0tEL3ZMMisvODNRMGY5dGJtLy82K3ZyLy8vLy8vL1IxZFgvblo2ZS8zdDdlLy9GeU1qL2lZdUwvMmRuWi85Ylcxdi9pSW1KLytuczdQOVJVVkQvbXB5Yi8zWjNkLzl5YzNQLzdPN3UvMTloWWY5b2FHai9ZMlJrLzZxcnEvK3RycTcvZlgxOS82dXNyZi9pNXViLy8vLy8vOERCd2Y5NGVYbi8zTi9nLzY2d3NQK2FuSnovTlRZMi93UUVCUDg2T2pyL2QzbDUvN08xdGYvcTd1Ly8vZjcrLy8vLy8vKzh2YjMvblo2ZS83VzJ0ditKaVluLzlmbjUvL0gyOS8vdzlmYi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLys3ejlQLzMvUDMvcXF5cy8xWldWditYbDVmL29xS2kvMTFkWHY5NmZIei9WVlZWL3kwc0xQOHVMaTcvSmlZbS95TWpJLzlvYVduLzNON2YvNTJkbmYrNHVyci91NzIrLzZXbnAvLzErdnIvcjdHeC83VzJ0di96OXZiL2hJU0UvOFhIeVArVmxaWC9zN2EzLy8vLy8vK1hsNWYvMGRQVC82YW5wLytQam83L2dJQ0EvOHpOemYrdnNMSC90YlcwLy8vLy8vK0xqWTMvdXJ1Ny81cWJtLytzcnE3LzdmRHcvNm1xcXYvRnlNai82ZXJyLzUyZm4vL0d5Y24vcmErdi82MnZyLy9SMDlQL1FrTkQveWNuSi84ckt5di9MeTh2L3pFeE1mOW5hR2ovZEhWMS8ybHBhZit5c2JIL2ZYMTkvMXhjWFAvTHpzLy85dnY5LysvMDlmL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vRDA5ZitHaG9iL2hJV0YvM2w1ZWY5RFEwUC9PRGMzLzBwSlNmOTBkWFQvZVhsNS8xRlJVZjlrWkdUL2dZR0IvLzM5L3YrNHVibi9xYXFyLzVpWm1mK09qNC8vd3NYRi82aXFxdi9TMDlQLzBOTFMvMEJBUWY4OVBUMy9vS0doLzZTbXB2L3A2K3Yvc3JPMC81U1VsUCtWbHBiL2pvK1EvKy93OFAvTno5RC9rSkdSLzVLU2t2K2ZvS0gvdkw2Ly8rZnE2LytTazVQL2xwYVgveDhlSHY5c2JXMy80K1hsLzcyK3Z2KzF0cmYvdUx1Ny80R0NnditzcnE3L21wdWIvK0hoNGYvazVlWC9ibTV1LzJKaVl2OVpXVm4vaFlhRy8yWm1aLzlGUlVYL056YzMvMUZSVWYrRGc0UC9lSGgzLzZLam8vLzUvdi8vN3ZQMC8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly92OVBYLzgvbjYvNit4c2Y5dGJXMy9hR2hvLzRpSWlQK2NuWjMvbnArZi83dTh2UDlxYTJyL3dNTEQvL1AzOS85NGVIai9uSjJkLzZPbHBmK3dzclAvakkyTi84TEZ4ditvcXFyLzRlVGsvNktqcFA5WVdGai9WRlZWLzVDUmtmKzh2cjcvNy9UMS8vRDA5ZitabXB2L2RuZDMvNm1ycS8vYTI5ei8vZi8vLy9QNCtmKzd2YjcvajQrUC8zSnpjLys0dTd2LytmNy8vK0xtNS8rdnNMRC9lbnQ3LzA5UVVQOWlZbUwvd2NMQy85UFYxZitxcTZ6L3ZMKy8vNGlJaWYrMXVMai9vcVNrLzR1TGkvK1dsNWYvK3YzOS81dWNuUDkwZEhUL3hNWEYvNU9Uay8rZW5wNy9lSGg0LzJOalkvOTVlWG4veU12TS8vYjcvUC92OVBULzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvKzN5OC8vOS8vLy92OExELzB4TVRQK2pvNlAveU1uSi95NHVMdjlyYkd6L3VicTcvN1MxdGYvTnpzNy82dTd2LzdDenMvOUhSMGYvcEtXbC82NnZzUC9ZM056L3FhcXEvK1RsNWYrQmdvTC9mSDE5Ly9EMDlmLy8vLy8vOXZ2OC8vcisvLy94OXZmLzcvWDIvLy8vLy8vMDlQVC9ucUdoLzFGU1V2OTVlbnIvN2ZMei8vcisvdi96OS9uLytmMysvL3IrL3YvdjlQWC85UG41Ly9yKy8vLzMrL3YvLy8vLy85ZloydjlnWUdIL3A2bXEvOXZkM2YreHM3UC8xZGpaLzZPa3BmK1FrWkgvU0VoSS85N2c0UC9aM2Q3LzFkZlgvNk9rcGYvSHljai9Nek16LzJGaFlmL056czcvZzRPQy8xVlZWZi9tNStmLzl2djgvKy96OVAveDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8vdjlQWC85ZnY4LytEajVQOHpNelAvZzRPRC8rM3U3LzlqWkdUL0FBQUEvejA5UGYvRnlNai9vNlNrLzR5TmpmL3o5ZlgvZTN4OC81K2dvUC94OXZmLzVPam8vNk9rcFAvajQrVC9jM1IwLzVHU2tmLy8vLy8vOHZmNC8rM3k4Ly92OWZYLzd2UDAvKzN5OC8vMisvei8yZHpkLzBKQ1EvOEFBQUQvQUFBQS93Z0lDUC9KemMzLzlmcjcvKzd6OVAvdjlmYi83dlAwLy9IMjkvL3Y5UFgvN3ZQMC8vRDA5Zi90OHZQLytmejkvL0wwOVA5cGFtci9tWnFhLzlmWjJ2K3JySzMvOHZYMS8rbnU3Lzk1ZW5yL3JLNnUvK1BsNWY5OGZIei91NzIrLzYydnNQOFhGeGYvQUFBQS82Q2lvdi9qNU9UL1VsSlMvMWhaV2YvNi92Ly83L1QxLy9EMTl2L3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLys3ejlQLysvLy8vYW10cy94c2JHLy9OenMvLzJkemMveDBjSFA4QUFBRC9kWFoyLzZxcnEvOXZiM0QvcTZ5dC80eU9qdjkzZUhqLy92Ly8vL1AzOS8ranBLVC8zK0hpLzN4OGZQK1VsSlQvLy8vLy8rN3o5UC92OVBYLzhQWDIvL0gyOS8vdTh2VC85ZnY4LyticDZmODNOemYvQUFBQS93UUVCUDhFQkFUL0FBRUIvNjZ1cnYvLy8vLy82L0h5Ly9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhQWDIvL0gxOXYvdDh2UC85UG42Ly9iNCtQOW9hV24vcGFpby84bk16UCt5dGJYLy8vLy8vK1BsNWY5aFlXSC9xS21wLzVXV2x2OTJkbmIvdUxxNi8waEpTZjhBQUFEL1NFbEovL2Y2Ky8rYm01di9DUWtKLzZxc3JQLzkvLy8vN3ZQei8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3Y5UFgvOXZ2OC85cmQzdjgwTkRUL1NVbEovK1RsNWYvQnhNWC9EUTBOL3dBQUFQOHdNREQvcHFpby84SEV4UC9GeU1qL2RYVjEvNkdrby8vLy8vLy9zTEd5LzgvUjBmK1ZsNWYvaElXRi8vLy8vLy91OC9ULzhQWDIvL0gyOS8veDl2Zi83Zkx6Ly9QNCtmLzErZm4vVTFSVS93QUFBUDhGQlFYL0FBQUEvd0lDQXY4QUFBRC9TMHhNLyszeDh2LzIrL3ovNy9UMS8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3U4L1QvOVBuNS8vUDM5LzloWW1ML3Y4REEvN1MxdGYvTXpzLy8vLy8vLzN4OWZ2K1NrNVQveHNqSi84TEZ4ditOalk3L0V4TVQvd0FBQVA4ckt5di82dTN1LzhQRHcvOG1KaWIvWVdGaC8vUDMrUC93OXZmLzhQWDIvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8rLzA5Zi81L3YvL3M3VzEvMU5TVXY5UlVWSC81T2JtLzlEUzAvOFhGaGIvQUFBQS8yaHBhZi8vLy8vLytQMzkvOFhIeC8vYzN0Ny9sWmFYLzhyTnpmKzV2THovdkw2Ly8ydHJhLy80K2ZyLzhQWDIvKy8wOWYveDl2Zi84UFgyLyt6eDh2LzUvdjcvOFBUMS8xeGRYZjhBQUFEL0F3TUQvd0FBQVA4QUFBRC9BQUFBL3dFQkFmOEFBQUQvTkRRMC85SFYxZi8yKy96LzcvVDEvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly90OHZQLytmNy8vOW5iMi85aFlXSC8wZFRVLzdHeXN2Ky93TUQvb3FPay85dmQzdi9PME5ILy8vLy8vK25zN2Y4MU5UWC9BQUFBL3pvNk92LzErUG4vdXJ1Ny8wRkJRZjluWjJmLzBOVFUvL2o5L3YvdjlQWC84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzcvVDEvL2Y3Ky8rYW01di9nWUdCL3pFeE1mL1IwOVQvL1AvLy8xWldWdjhBQUFEL1dscGEvKy94OGYvbTZPbi9scGFXLzlmWDEvK2dvYUgvazVPVC85amIyLzlvYVduLzF0alkvL245L2YvdTgvVC84ZmIzLy9EMTl2L3g5ZmIvLy8vLy85WFoyZjlCUVVIL0FBQUEvd01EQS84QUFBRC9BQUFBL3dBQUFQOEFBQUQvQUFBQS93SURBLzhBQUFEL2dZS0MvLzcvLy8vczhmTC84UFgyLy9EMTl2L3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8vczh2UC8vLy8vLzZXbHB2OStnSUQvMWRqWS8zOS9mLy9EeHNiL3dNTEMvNmFvcVAvMStmbi8xdG5hL3ljbkovOEFBQUQvajVHUy8vLy8vLytabVpyL09qbzYvNEdCZ2YrenRyZi8rLy8vLys3ejlQL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8vdTgvVC8vUC8vLzMrQWdmK1ptWm4vUTBOQy8zeDlmZi8rLy8vLzVPYm0vMkpqWS84aUlpTC9XMXRjLzQyTmp2L1cyTmovMU5iVy8yZG5aLy9CdzhQL2xKV1YvNU9VbFAvLy8vLy83UEh5Ly9IMjkvL3g5dmYvOGZiMy8rL3k4LytJaVluL0ZCUVUvd0FBQVA4Q0FnTC9BQUFBL3dBQUFQOEFBQUQvQUFBQS93QUFBUDhBQUFEL0F3TUQvd0FBQVA5a1pHWC8vLy8vLyszejlQL3c5ZmIvNy9UMS8rN3o5UC94OWZiLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3Y5UFgvK2Z2OC8yNXVidisrdjhEL25aMmUvM3A3ZS8vdjh2TC91YnU3LzRXR2h2OUhSMGYvSmlZbS80ZUlpZi8rLy8vLzUrbnAvMDVPVC85cWFtci9nb0tDLzZTbXAvLy8vLy8vN3ZQMC8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLys3eTgvLy8vLy8vaFllSS8zNStmditWbFpiL2RuWjIvNVdXbC8vYzM5Ly8vdi8vLyt2dzhQL2Y1T1gvNnV6dC83M0F3UDk1ZW5yL21wcWEvOG5NelA5cmJHei81K25wLy9QNCtmL3Y5UFgvOGZiMy8vSDI5Ly94OXZmLzcvUHovNENCZ2Y4TEN3ci9BQUFBL3dFQ0F2OEFBQUQvQUFBQS93QUFBUDhBQUFEL0FBQUEvd0FBQVA4Q0FnTC9BQUFBL3k4dkwvL2c0ZUwvOS9yNi8vUDQrUC81L2Y3LysvLy8vL0gzK1AvdzlmYi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8rM3k4Ly85Ly8vL3ZjQy8vM2g1ZWYvTXpzLy9ob2FGLzRhSGgvL1UxZGIvNSt2ci8rTG42UC94OXZiLy92Ly8vOFBHeHYrTmpvNy9hbXBxLzZ1c3JQOWNYVjMvdWIyOS8vei8vLy91OC9ULzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvN3ZQMC8vdi8vLysvd2NML1JVVkYvNit3c1ArTGk0ei8xTlhXLzNkNGVQOS9nSUgvb0tHaS81S1RsUDlsWm1mL2xKV1YvOVBXMXYvRng4Zi9sNWlaLzVPVWsvLy8vLy8vN1BIeS8vSDI5Ly94OXZmLzhmYjMvL0QxOXYveDl2Zi8vLy8vLzhuTXpQOHJLeXIvQUFBQS93RUJBZjhBQUFEL0FBQUEvd0FBQVA4QUFBRC9BQUFBL3dBQUFQOEFBQUQvQUFBQS95Y29LUDlDUWtML1EwTkQvMDlRVVArWG1aai84UFgyLy9EMTl2L3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhQWDIvKy8wOWYvMSt2di9jbk56LzdTMnQvL0J3OFAvenMvUS8zMTlmdjlzYlc3L25KMmQvNTZmbi85eGNuTC9rNVNVLzgzUHovK0ppWW4vblo2ZS8wSkJRZi9xN3U3LzgvajUvKy8wOWYveDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly93OWZiLzhQWDIvL2Y3L1A5YVdsci9hV2xvLzN0N2UvK2twYVgvdHJlMy8yNXVidi9lNE9EL2twS1QvM3Q4ZlAvLy8vLy92OERBLzZlcHFmOXhjbkwvMk56Yy8vZjgvZi92OVBYLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9EMTl2L3E3L0gvLy8vLy83YTR1ZjhHQlFYL0FBQUEvd0VCQWY4QUFBRC9BQUFBL3dBQUFQOEFBQUQvQUFBQS93QUFBUDhBQUFEL0FBQUEvd0FBQVA4QkFRSC9BQUFBL3hrWUdQL1ozZDcvOXZ2OC8rLzA5Zi94OXZmLzhmYjMvL0gyOS8veDl2Zi83Zkx6Ly8vLy8vK3BxcXIvZm45Ly82V21wdi9nNHVMLy9QejgvMXhjWFArK3dNRC94Y2ZILzJob2FQL1MxTlQvZ29TRS80eU1qUDlJU0VqL2k0eU0vLy8vLy8vdDh2UC84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8vdTgvVC8vUC8vLzdpN3UvOHVMaTcvZUhoNC96TXpNLzg0T0RqL2c0U0UvLzMrL3YrRGhZWC9lSGw1LzdLMHRmK09qNC8vbHBlWS8zVjFkZi9RMHRQLytQMysvKy8wOWYveDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8rLzA5Zi93OWZiLzdQRHcvek0wTS84QUFBRC9Bd01EL3dBQUFQOEFBQUQvQUFBQS93QUFBUDhBQUFEL0FBQUEvd0FBQVA4Q0FnTC9Bd01EL3dVRkJmOEFBQUQvTGk0dS8rVG82Zi96K1BuLzhQWDIvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3c5ZmIvK1B6Ky82MnVyLzkzZUhqL25KMmQvNCtRa1ArenM3VC9YVnhjLzd5K3Z2L3A3TzMvWjJkbS95c3JLLzlQVDAvL1ptZG4vem82T3YvajZPai85UG42Ly9EMTl2L3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9EMTl2L3c5ZmIvOS9yNy8xRlJVZjluWjJmL3NiR3gvM2g0ZVA5NmVuci9rWkdSLzNkMmR2K2JuWjMvMnQ3Zi8ranE2di9Kek16L2tKS1MvMVpWVmYvVjJkbi85dnY4LysvMDlmL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhQYjIvKzd5OC8vOC8vLy9iVzV1L3dBQUFQOENBd1AvQUFBQS93QUFBUDhBQUFEL0FBQUEvd0FBQVA4QUFBRC9BQUFBL3dBQUFQOEFBQUQvQUFBQS93QUFBZjhBQUFEL25aK2YvL3ovLy8vdDh2UC84ZmIzLy9IMjkvL3g5dmYvN3ZQMC8vdi8vLytycnE3L1VsRlIvNmFvcWYvVTF0Yi81K3JxLzg3UjB2K0lpWW4vZjM5Ly81R1JrUDl5YzNML2lJaUkvN0N3c1A5QVFFRC9ob2VJLy8vLy8vL3M4ZkwvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8rM3k4Ly8vLy8vL2ZYOS8vd1FFQlArSGg0Zi81T1hsLy9EeTgvL2g1T1QvN2U3di8ranE2di9IeWNuL2NIQncveHNiRy85SlNVbi93Y1BFLzk3aTR2L3orUG4vOFBYMi8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi83UEh5Ly83Ly8vK1ltcHIvQUFBQS93RUJBZjhBQUFEL0FBQUEvd0FBQVA4QUFBRC9BQUFBL3dBQUFQOEFBQUQvQUFBQS93QUFBUDhBQUFEL0FnSUMvd0FBQVA5N2ZYMy8vLy8vLyszeTgvL3g5dmYvOGZiMy8vSDI5Ly93OWZiLzhmYjMvOWJhMi8rbnFhbi9MUzR0L3ljbkovK0ppb3IvME5MVC8rN3c4Zi9uNmVyLzQrYm4vL1AyOS8vUzB0TC9YVjFkL3drSUNmKzR1N3ovKy8vLy8rN3o5UC94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vRDE5di92OVBYLzdmTHovL3IvLy8rZW42RC9EUTBOL3dJQ0F2OUpTVW4vcHFlbi85bmEydi9yN2U3LzE5cmEvNXljblA5cWFtci9tcHljLzM5L2YvL3g5ZmIvOS92OC8rLzA5Zi94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9EMTl2L3U4L1QvL1AvLy8ySmpZLzhBQUFEL0FnSUQvd0FBQVA4QUFBRC9BQUFBL3dBQUFQOEFBQUQvQUFBQS93QUFBUDhBQUFEL0FBQUEvd0FBQVA4Q0FnTC9BQUFBLzFsYVd2L3Y5UFQvOGZiMy8vRDE5di94OXZmLzhmYjMvL0gyOS8vdTlQWC8vdi8vLzgzT3ovOThmWDMvazVXVi8ybHBhUCt5c3JMLzMrUGovK3Z0N3YvUDBOSC9rSkdSL3kwdExmOEFBQUQvS3lzci84ck16Zi8zL1AzLzd2UDAvKy8wOWYveDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly93OWZiLzh2ZjQvL1Q1K3Yvdzl2Zi8rUHI2LzQ2T2ovOWtaR1QvSmlZbS94UVVGUDg1T1RqL1JrWkcvMkZoWWY5c2Eydi9tNXljLytYbzZmL0V4Y2IvaVltSy8rbnU3Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvN2ZMei8vei8vLytvcXFyL0JRVUYvd0FBQVA4QkFRSC9BQUFBL3dBQUFQOEFBQUQvQUFBQS93QUFBUDhBQUFEL0FBQUEvd0FBQVA4QUFBRC9BQUFBL3dBQUFQOEFBQUQvQXdNRC8wVkZSUC9tNnV2LzgvajUvL0QxOXYveDl2Zi84ZmIzLysvMDlmLzIrL3ovejlMVC80V0ZoZi9nNHVMLzF0blovNE9FaGY5cWFtci9WRlZWLzBSRFEvOHRMUzMvRXhNVC96dzhQUDlwYUdqL3NiT3ovLy8vLy8vdTlQWC85ZnI3Ly9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0wzK1AvcDd1Ly81T2pwLy9mNy9QKy93Y0gvZ0lHQi80dUxpLzkrZm4zL01qSXkvem82T3Y5bVptYi9YbDVlLzRtSWlQK29xcXIvd3NURi80dU1qUCsvd2NILytmNy8vKzd6OVAveDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8rLzA5Zi8xK3Z2LzRPUGsveVVsSmY4QUFBRC9BZ0lDL3dBQUFQOEFBQUQvQUFBQS93QUFBUDhBQUFEL0FBQUEvd0FBQVA4QUFBRC9BQUFBL3dBQUFQOEFBQUQvQUFBQS93SUNBdjhBQUFEL016TXovK3Z2OFAveTkvai84UFgyLy9IMjkvL3g5dmYvOGZiMy8vRDE5di8zL1B6L25wK2YvNTJlbnYrK3Y3Ly9uSjJkLzNoNGVQOWJXMXYvWUdCZy95WW1KdjlEUTBQL2lJaUkvNHFMaS8rRWhJWC8yZHZiLy9QNCtmL2g1ZWIvNy9QMC8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8vdjlQWC8rZi8vLzhUR3gvOXRiR3ovazVXVi80S0NnditBZ0lEL282V2wvNW1abXY5NGVIai9EQXdNLzFwYVd2K1RrNVAvcDZlbi84bkt5djl5YzNQL096czcvK2ZuNS8vMCtmci83L1QxLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzdmTHovLzMvLy8rTmpvLy9BQUFBL3dJQ0F2OEFBQUQvQUFBQS93QUFBUDhBQUFEL0FBQUEvd0FBQVA4QUFBRC9BQUFBL3dBQUFQOEFBQUQvQUFBQS93QUFBUDhBQUFEL0FnSUMvd0FBQVArUWtaTC8vLy8vLyszeTgvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzdmTHovLzMvLy8rN3ZiNy9MeTh2LzVlWW1QL0h5TWovbnA2ZS80K1BqLzgyTmpiL0dCZ1kvNFdGaGYra3BhWC9rNVdWLzM5L2YvK0VoWVgvajVDUS8zUjFkZi9rNk9uLzlQbjYvKy8wOWYveDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9EMTl2L3k5L2ovNi9EeC81NmZuLytEZ29ML2pJMk4vN0swdFArOXdNSC9uNkdoLzRXR2gvODVPVG4vZG5aMy8wUkVSUCtZbDVmLzhmUDAvOTdoNHY5VFUxUC8ydDNkLy9iNy9mL3Y5UFgvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0QxOXYveDl2Zi84dmIzL3o0K1B2OEFBQUQvQXdNRC93QUFBUDhBQUFEL0FBQUEvd0FBQVA4QUFBRC9BQUFBL3dBQUFQOEFBQUQvQUFBQS93QUFBUDhBQUFEL0FBQUEvd0lDQXY4QUFBRC9MQ3dyLytQbjUvLzArdnYvNy9UMS8vSDI5Ly94OXZmLzhmYjMvL0gyOS8vdDh2UC8vLy8vLzZlcXF2OWxabWIvL1AvLy85L2c0UDkyZG5iL1RVMU4vM056Yy84d01ERC9xYXVyLzVLVWxQL016czcvbjZDZy80Mk5qZitDZ1lIL3VMdTcvL1Q1K3YvdzlmYi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vRDE5di96K1BuLytmNy8vK251N3YvcjcvRC8vLy8vLzNaNGQvOStmMy8vZVhsNi80ZUlpUCtHaG9iL1BqNDkvM04wZFAvUjA5VC8vLy8vLzZxcnEvKzZ2YjMvKy8vLy8rN3o5UC94OXZmLzhmYjMvL0gyOS8veDl2Zi83L1QxLy9YNy9QL2MzK0QvSUNBZy93QUFBUDhDQWdML0FBQUEvd0FBQVA4QUFBRC9BQUFBL3dBQUFQOEFBQUQvQUFBQS93QUFBUDhBQUFEL0FBQUEvd0FBQVA4QUFBRC9Bd01EL3dBQUFQOTVlbnIvLy8vLy8reng4di94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLysvMDlmLzUvdjcvbTV5Yi84bk16UC8vLy8vL3RMVzEvMTllWHY5RVEwUC9tSnFhLzNOemMvK0lpWW4vYm05di81eWNuUC8vLy8vLzVlbnEvKy95OC8vNS92Ny84ZmIzLy9EMTl2L3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0QxOXYvdjlQWC84L241Ly9MMytQL3U4L1QvMXRuWi82K3hzZi9WMTlmL2c0T0QvNTJmbi85K2dJRC9wYWVuLzZHam8vLzArZnIvNGVYbC81ZVltUC92OWZYLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3U4L1QvKy8vLy83N0J3ZjhLQ2dyL0FBQUEvd0VCQWY4QUFBRC9BQUFBL3dBQUFQOEFBQUQvQUFBQS93QUFBUDhBQUFEL0FBQUEvd0FBQVA4QUFBRC9BQUFBL3dBQUFQOERBd1AvQUFBQS8waEpTdi95OWZiLzhmYjMvL0QxOXYveDl2Zi84ZmIzLy9IMjkvL3Y5UFgvOS96OS85YmEyditYbUpuLy9QLy8vOWZiMi8raG82UC9rSkdSLzQyT2ovK09qNC8vbkoyZC84N1AwUCt4czdQLzR1Ym4vKy8xOXYveitQbi84dmY0LysvMDlmL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9EMDlmL3U4dlAvN2ZMei8vdi8vLy9SMDlQL29LR2kvNmlxcXYrWGw1Zi8xdGpaLzVTV2x2K2pwYWIvdUxxNy83L0J3Zi8vLy8vL21wdWMvOURUMC8vNC92Ly83L1QxLy9IMjkvL3g5dmYvOGZiMy8rN3o5UC84Ly8vL3U3Mjkvd2NIQi84QUFBRC9BUUVCL3dBQUFQOEFBQUQvQUFBQS93QUFBUDhBQUFEL0FBQUEvd0FBQVA4QUFBRC9BQUFBL3dBQUFQOEFBQUQvQUFBQS93TURBLzhBQUFEL01EQXcvK3p3OGYveTkvai83L1QxLy9IMjkvL3g5dmYvOGZiMy8rN3o5UC84Ly8vL3JLMnUvN1c0dVAvLy8vLy9wYWFuLzlMVDAvOTRlWG4vdjhEQS83dTh2UCtibTV6L3BLYW0vNk9rcFAvbDV1Yi85L3Y4Lyt6eDgvL3U4L1AvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9EMTl2L3U4L1QvOC9qNS8vWDcvUC8rLy8vL3hNZkkvMzE5ZmYvcDdlMy83Tzd2LzRLRGcvOWRYVjMvaUltSi80S0RnLy9jM04zL25KNmYvLy8vLy8reHM3UC9zYkt6Ly8zLy8vL3U4L1QvOGZiMy8vSDI5Ly94OXZmLzd2UDAvL3ovLy8rM3Vici9CUVVGL3dBQUFQOEJBUUgvQUFBQS93QUFBUDhBQUFEL0FBQUEvd0FBQVA4QUFBRC9BQUFBL3dBQUFQOEFBQUQvQUFBQS93QUFBUDhBQUFEL0FnSUMvd0FBQVA5NmUzei8vdi8vLyszeTgvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzcvVDEvL2Y4L2YrU2xKVC8xOXJiLytydTcvK2JuWjMvNHVibS8ybHBhZitQajQvL1ZWVlcvNlNscHYvOC8vLy95Y3ZNLzNkM2QvL2w2dXYvK3YvLy8vYjcvUC93OWZiLzd2UDAvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3c5ZmIvOFBYMi8vei8vLy9xN3UvLzB0YlgvOTdpNC84K1BqLy9ucUNnLy8vLy8vOUpTVXIvUlVWRi85WFkyZityckt6L1kyTmovOTNnNFArVGxKVC84L2Y0Lzc3QndmK1JrcEwvL1AvLy8rN3o5UC94OXZmLzhmYjMvL0gyOS8vdTgvVC8rdi8vLzhQR3h2OE5EUXovQUFBQS93RUJBZjhBQUFEL0FBQUEvd0FBQVA4QUFBRC9BQUFBL3dBQUFQOEFBQUQvQUFBQS93QUFBUDhBQUFEL0FBQUEvd0VCQWY4QUFBRC9FQkFRLzh2T3ovLzMvUDMvN3ZQMC8vSDI5Ly94OXZmLzhmYjMvL0QxOXYveStQai82Ky92LzM5L2dQL3M4ZkgveWN6TC82YW9xUC9FeDhqL1kyTmovOGZJeWYvQndzTC9JQjhmLzRhSWlQLy8vLy8vWDE1ZS8yNXZiLy9tNnV2LzBkWFcvL1gzK1AvNCsvei83L1QxLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8rLzA5Zi8zL1A3L3I3R3gvMjFzYlAra3BhWC9nWUtDL3lZbUp2KzV1cnIvMytEaC94Z1lHUDkrZm43Ly8vLy8vLzMvLy85MGRYWC9xcXlzLzVPVWxmLzArUG4vdUxxNy8ydHNiUC83Ly8vLzd2UDAvL0QxOXYveDl2Zi84ZmIzLysvMDlmLzArZnIvNXVucS95c3FLdjhBQUFEL0FnSUMvd0FBQVA4QUFBRC9BQUFBL3dBQUFQOEFBQUQvQUFBQS93QUFBUDhBQUFEL0FBQUEvd0FBQVA4QUFBRC9BZ0lDL3dBQUFQOHhNVEgvNXVucS8vdi8vLy93OWZiLzhmWDIvL0gyOS8veDl2Zi83Zkx6Ly8zLy8vKzl3TUgvT1RrNS8vUDQrUC9IeXNyL25xQ2cvNHVOamYrYm5Kei8vLy8vLy8vLy8vODFOVGIvUFQ0Ky8vZjcvUCtMaTR2L0tDY24vNktqby8rUmtwTC9ibTF0LzgzUTBmLzMvUDMvNy9UMS8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly92OVBYLzkvejkvOWJhMi85bloyZi9tNXljLzR1TWpQKy93Y0wvWUdGaC81aVptZi93OHZQL1oyaG8vdzhPRHYrc3I2Ly8vUC8vLzdHeHN2ODFORFQvbnFDZy8vLy8vLytWbHBYL0p5Y28vK3ZzN1AveitQbi83L1QxLy9IMjkvL3g5dmYvOGZiMy8rN3o5UC85Ly8vL2FtdHMvd0FBQVA4REJBVC9BQUFBL3dBQUFQOEFBQUQvQUFBQS93QUFBUDhBQUFEL0FBQUEvd0FBQVA4QUFBRC9BQUFBL3dBQUFQOEFBQUQvQUFBQS93TURBLzh3TUREL3RiZTQvL2I3L1AvdjlQWC84ZmIzLy9IMTl2L3U5UFgvK2Y3Ky8zaDVlZjhiR3h2LzA5YlcvL0wyOXY5MmQzZi9QejgvLzkzaDRmL3c5UFgvZlgxKy93SUNBditpcEtULzYrenMvMjF0YmYrRWhZWC90TGEyLzVPVGsvK0tpNHYvZFhWMi8vSDE5di94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0QxOXYveitQbi81dXZzLytuczdQLy8vLy8vMmQzZC80R0JnZitqcEtUL2FtcHEvOGZJeWYvNi8vLy9mb0NBL3kwdEx2OVdWbGIvZEhWMS8zbDVlZi9PenMvLzgvYjMvMHBMVFA4bkp5Yi9tWm1aLy96Ly8vL3Q4L1QvOGZiMy8vSDI5Ly94OXZmLzd2UDAvL2o5L3YvTzB0TC9GeGNYL3dBQUFQOEJBUUgvQUFBQS93QUFBUDhBQUFEL0FBQUEvd0FBQVA4QUFBRC9BQUFBL3dBQUFQOEFBQUQvQUFBQS93QUFBUDhBQUFEL0FnSUMvd0FBQVA4eE1USC82Ky93Ly9MMytQL3c5ZmIvN2ZMei8vMy8vLyswdExUL2xaYVcvMUJRVVA5eWRIVC8vLy8vLzdDd3NQOXdjSEQvYzNOei8wZEhSLzgwTkRUL3FhdXIvLy8vLy8raXBLVC9kbloyLzU2Zm4vK05qWTMvNy9MeS8vNy8vLy9pNXVmLzdQSHkvL0wzK1AveDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9EMTl2L3orUG4vOC9qNS8reng4di85Ly8vLzFOYlcvNEdEZy8rMXQ3Zi9oSVNFLzZxcnEvL202T24vMmR6ZC83YTN1UCt3c2JML3pjL1AvL1Q0K1ArSGlJai9KaVltLzVhWGwvK1BrSkQvdkwyOS8vNy8vLy9zOHZQLzhmYjMvL0gyOS8veDl2Zi83Zkx6Ly83Ly8vK2NuWjMvQVFFQi93SUNBdjhCQVFIL0FBQUEvd0FBQVA4QUFBRC9BQUFBL3dBQUFQOEFBQUQvQUFBQS93QUFBUDhBQUFEL0FRRUIvd0lDQXY4QkFRSC9BQUFBLzJ0cmEvLzErdnYvNy9UMS8rN3o5UC8yKy96LzRPSGgvMzUvZnYvUDB0TC9XbHBhL3pFeE1mKzF1TGovOGZUMC83Ky93UCt0cnEvL3ZzREEvK1BuNS8vYjNkNy9sWldWLzVDUmtmK3VzTEQvaElXRi8vSDE5Zi8xK3Z2LzdmTHovL1Q1K3YveDl2Zi84UFgyLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDE5di93OWZiLzhmYjMvKzN5OC8vOC8vLy93OFhGLzRhSGgvL04wTkgvdTcyOS82NnVyLyt6dGJYL3ljdkwvOC9SMHYvUjFOVC9oWWFHLzNCd2NQOW1abWIvZEhSMC85UFcxdjk3ZTN2LzNlRGcvL24vLy8vdDh2UC84ZmIzLy9IMjkvL3c5ZmIvN3ZQMS8vci8vLzl3Y1hIL0FBQUEvd01EQS84REF3UC9BUUVCL3dBQUFQOEFBQUQvQUFBQS93QUFBUDhDQWdML0FnSUMvd01EQS84QkFRSC9BUUVCL3hVVkZmK0Fnb0wvOVBuNi8vSDI5Ly92OC9ULzh2ZjQvL2o4L1ArQmdvTC92YisvLzdDeXN2OTFkbmIvYlcxdC8ybHBhZitlb0tELzF0blovOHpQei8vSHljbi9zYkt6LzYydXJ2L0V4OGYvdkw2Ly80S0RnLy9pNXVmLzl2ejkvKzd6OVAveDl2Zi84UFgyLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLyszeTgvLzgvLy8vemREUS80NlFrUCtxckszL3RybTYvN2E1dXYrZm9LSC9sNW1aLzU2Zm4vOXJiR3ovd2NQRC8zOS9mLys3dmIzL3FLbXEvOFRHeC85N2ZIMy82ZXpzLy9qNy9QL3Q4L1QvOGZiMy8vSDI5Ly92OVBYLzhmYjMvL0gxOXY5cmJHei9BZ0lDL3dBQUFQOEJBUUgvQWdJQy93TURBLzhEQXdQL0FnSUMvd0FBQVA4QkFRSC9BQUFBL3hBUEQvOVVWVlgvMU5YVi8vajgvZi94OS9qLzd2UDAvL0gyOS8vOC92Ny9qSXlOLzZ5dHJ2K3hzN1QveTh2TC83YTN0LytUazVQL3NyUzAvM0J2Yi8rbHA2Yi9sSmFXLzZXb3FQKzN1N3YvdHJpNS82Q2hvZitVbFpYLzQrYm0vL2Y4L1AvdTgvVC84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8rN3o5UC8zKy96LzkvdjcvNnl0cmY5b2FHai9TRWhJLzJ0c2JQL0F3OFAveXMzTi80V0dodi9OejlEL2g0aUkvK25zN1AvT3o4Ly9xYXVyLzhMRXhmOTdmSHovNU9qcC8vei8vLy90OHZQLzhQWDIvL0gyOS8vdjlQWC84dmY0Ly9qNysvK3ZzckwvUlVaRy93NE9EdjhBQUFEL0FBQUEvd0VCQWY4QUFBRC9JaUlpLzNaM2QvOWtaV1gvdUxxNi8vZjgvZi8yKy96LzcvVDEvK3p4OHYvMit2ci8rZno4LzR5T2p2K2pwYVgvdkw2Ky82cXRyZi8vLy8vL3Q3bTUvNldtcHYrNnZiMy9rNU9ULzh6TnpmKzB0YlgvVEV4TS8xaFlXUDlzYkd6L3pkRFEvL3IrL3YvMCtmci83L1QxLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvK3Z4OHYvOC8vLy91N3U3LzVPVGsvK1ptWnIvM2Q3ZS81T1ZsZitucWFyL1VsSlMvNU9WbGYvRng4Zi93OFhHLytudDd2KzN1Ym4vcTZ5cy84UEd4djk2ZTN2L3pNL1AvLy8vLy8veDl2Zi83Zkx6Ly9EMTl2L3c5UFgvNy9UMS8vei8vLy8wK1BqL3lNdkwvNVNXbHY5MWRuYi9iMjl3LzVXWGwvL2M0T0QvL2YvLy8vcisvdi80L2YzLzhQWDIvK3p4OHYvdTgvVC8vdi8vLytYbzZQK0NnNFAvcXF5cy83eTl2ditucUtqLzdmTHovK0RpNC8rMnQ3ai8wZFBULzJablovOXhjbkwvb3FXbC82ZW9xUC9TMU5UL2pvNk8vNWFWbGYvWTNOei85dno4Lys3eTgvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi83L1QxLy9UNSsvL2M0T0gvajQrUC80T0RnLzlsWm1iL3k4M04vLy8vLy8vS3k4ei9SMGhJLzVLVGsvOVBUazcvbTV5Yy8vLy8vLys1dkx6L29LR2gvOHZPenYrSGlJai9vYU9qLysvejgvLzkvLy8vOHZmNC8rN3o5UC91OC9ULzdQSHkvL0QxOXYvNi92Ny8vLy8vLy8vLy8vLysvLy8vL3YvLy8vWDcvUC90OHZQLzdQSHkvK3p4OHYvdzlmYi8rdjcvLy9qOC9QKzV1N3YvZ0lDQS83bTh2UCt2c2JIL3FLcXEvL1g2K3YvOS8vLy9hMnhzLzJscWF2K0Jnb0wvVTFOVC8vajUrZi8vLy8vL29LR2kvMmxwYWYrSGhvYi9wS1NrLyt6eDh2L3g5dmYvOFBYMi8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOFBUMS8vYjcvUC9nNU9UL3U3Ni8vNk9scHYrZW42RC94c2pJLzRPRGcvL0Z4OGYvZkh4OC93QUFBUDgrUGo3L3lzN08vLy8vLy8vSnk4ei9tcHViLzhYSXlmK29xcXYvaG9hSC83TzF0di9yOFBILy9mLy8vL3IrLy8vMCtmci83L1QxLyt6dzhmL3E3L0QvNnUvdy8rcnY4UC9xNy9ELzdmTHovL0wzK1AvNC9mNy8vZi8vLy9QMzkvL0d5TWovalkyTi81YVhtUC9EeE1YL242Q2cvN2k3dS8vNS9mMy8vdi8vLzZPbHBmOGFHeHYvQUFBQS83UzF0ZitscGFYL2xwbVovOFRHeHYrVWxwWC9yYkN3LzhMRXhmL3I4UEQvOVBuNi8vRDE5di94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzcvVDEvL1A1K3YvNi8vLy8vZi8vLzh2TnovOTBkSFQvRkJRVC80Q0FnZithbTV2L016SXkveW9xS3Y5RVJFVC9zYk8wLy8vLy8vL2s1K2ovb0tLaS82dXRyZi9DdzhUL29hS2kvNDJPanYranBhWC95TXZMLytUbzZQLzErZnIvK3YvLy8vei8vLy85Ly8vLy9QLy8vL3IvLy8vMisvMy82dTd1LzlEVDAvK3VzTEQvam8rUC81V1hsLys0dWJyL3NiS3kvNTJmbi8vVDE5ai8vLy8vLy9mNSt2K0xqSTMvT1RnNC95Y25KLzlCUVVIL3RyaTUvMHRMUy84cEtDai9pNHVMLytEbDVmLysvLy8vK1AzKy8vTDMrUC93OWZiLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84UFgyLyszeTh2LzArZnIvM2VIaS82aXBxdjl2Y1hIL1JFUkUvNnVzclArTWk0di9Pams1LzJWbFpmODBORFQvaDRtSi8vZjQrUC8vLy8vL3lNek4vNTJmbi8rdXNMRC92Y0RBLzY2dnNQK1ptcHIvajVDUS81T1VsUCtkbjUvL282V2wvNm1xcXYra3BhWC9uNkdpLzVpYW12K1JrcEwvbEpXVi82YW5xUCszdWJuL3NMS3kvNkdpb3YrOHY4RC84L2IzLy8vLy8vL2Y0K1AvWW1KaS96czdPLzloWVdIL09qbzYvNit2c1ArUGtKRC9PVGs2LzQ2T2ovK29xYW4vNy9QMC8rN3o5UC91OC9ULzhQWDIvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly92OVBYL25xQ2cvNnl2ci8vWTI5ei92cjYrLzJ0cmEvOXNiR3ovbzZPai81NmZuLzg0T0RmL1IwZEgvOEREeFAvOS92Ny8rLzM5LzlEVTFmK3dzYkgvcks2dS83SzB0UCszdWJuL3RMZTMvN08xdGYrc3JhNy9yYTZ1LzZ1dHJmK3hzckwvdGJlMy83ZTZ1dit4czdQL3FxeXMvNjJ2ci8vSHlzdi84dlgxLy8vLy8vL3U4dkwvbnArZy96SXhNdjlRVVZIL3E2dXMvNU9Uay85alkyVC9nSUNBLzlMVDAvL08wZEgvbXB1Yi83YTR1UC8yKy96LzcvVDEvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzcvVDEvL2I2Ky8vbTZ1di9hMnRzLzBoSVNQOTJkbmIvMmR6Yy83L0F3UDlwYVduLzE5blovOGJJeWY5aFlXSC9MeTh2LzNKemMvKzV1N3ovOHZmNC8vWDYrLy9qNWViLzJkcmEvOHJOemYrenRiWC9zN1cxLzdTMXRmKzh2THovdUxtNS83R3lzdit6dGJYL3Y4SEIvOW5jM1AvbjZPai84ZlgyLy9qOS92L2k1dWYvbzZXbC8xMWVYdjh0TFMzL2hJV0YvOXZjM2YrN3ZMei9aR1ZsLytUbzZQKzh2Ny8vWldWbC8wTkRRLytOam83LytmNy8vL0QxOXYveDlmYi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8vdjlQWC85LzMrLzlUWDJQOTdlbnIvbEpXVi8vRHk4di82Ly8vLzdQSHgvMmhvYVArT2o1RC91cnU4LytyczdmK3dzYkgvZFhaMi8yVmtaUDlaV1ZuL2twS1MvMzE5ZmYrQWdZTC96dEhSLy8vLy8vLysvdjcvLy8vLy8rdnQ3Zi95OHZMLy8vLy8vLy8vLy8vOS8vLy9zTE8wLzNSMGRQK0FnSUQvaTR1TC8wMU5UZjkwZEhUL2NuTnovOVRXMS8vYTNOei90YmUzLzNSMGRQK0tpNHYvKy8vLy8vMy8vLy9aMjl2L2c0T0QvNDJPanYvdjgvVC84ZmIzLy9EMTl2L3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9EMTl2L3g5L2ovN2ZMei82dXRyZitHaFlYL282U2svK3Z3OGYveitmci81K3ZzLzRhSGgvOTRlSGovaG9lSS85N2YzLytmb0tEL2pvK1AvOXZkM2YrL3Y3Ly9lbnA2L3lBZ0lQOFBFQkQvWGw5Zi8zWjNkLzk2ZW52L2hZYUgvMytCZ2Y5NGVYbi9kSFYxLzBwTFMvOENBZ0wvT2prNS80Mk5qZi9PejgvL3o4L1EvMzE5ZnYvQXdjSC94OGpKLzMxOWZ2OXpjM1Avb0tHaC8vWDUrZi95K1BuLzN1TGovNUNSa2YrTWk0di93Y1BFLy9YNisvL3c5UFgvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vRDE5di95K1BuLzh2ajQvOXpnNGYvaTV1Zi84UFgyLy9iNy9QL1UxOWYvSmljbi82cXFxdit0cnE3L1VWRlIvNmlvcVArbHBxYi8zOS9nLzA1T1R2OFpHUm4vQndjSC93QUFBUDhDQWdML0FBQUEveWdvS1AvajV1Zi9zN1cxL3drSkNmOENBZ0wvQVFFQi93RUJBZjhNREF6L0lDQWcvM1YwZFAvbzZlci9qbytQLzZHZ29QOURSRVQvNHVUay8ycHFhdjlQVUZELzhmWDIvL0gyOS8vdjlQWC8zZUhoLytMbTUvLzErdnYvOFBYMi8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0QxOXYvdzlmYi85ZnI3Ly9UNSt2L3U4L1QvKy8vLy83aTd1LzhnSHgvL0ppWW4vem83Ty85UFQwLy9uWjZlLzZhbnB2OVRVMVAvQUFBQS93SUNBdjhFQkFUL0dob2EveDhmSC84eU1qTC9pSXFLLy8vLy8vL3g4dlAvV0ZsWi95MHRMZjhhR2hyL0ZCUVUvd0FBQVA4QkFRSC9BQUFBLzRhSGgvK2JtNXYvbTV5Yy96WTNOLzlDUTBQL0dCZ1kvMEpDUXYvZzVPVC85ZnI3LysvMDlmLzErdnovOVBuNi8rLzA5Zi93OWZiLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3c5ZmIvOFBYMi8vRDE5di94OS9qLzdmSHkvNDJOamY5WVYxZi9aV1ZsLzUrZ29QOWxabVgveU1ySy96SXlNdjhBQUFEL0FBQUEvekl5TXY4c0xDei9HeHNiLzRPRGcvOTZmSHovL3YvLy85emUzdjl1YjIvL2NYRngvd1VGQmY5QlFVSC9HeHNiL3dBQUFQOEFBQUQvYTJ4cy83SzB0UDlzYkd6L21wdWIvMWhYVi85ZFhWMy9xcXVzLy9iNy9QL3Y5UFgvOGZiMy8vRDE5di93OWZiLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0QxOXYvMCtmci83Zkh5LzhURnh2K3p0YmIvdGJlNC83bTd2UCtnb2FEL1NFaEkvd29LQ3Y4QUFBRC9jbkp5LzExZFhmOEFBQUQvcGFXbC81MmRuZitpbzZML2pvK1AvN3k4dlA5eGNYSC9BQUFBLzQ2T2p2ODVPVG4vQUFBQS93d01EUDlyYkd6L3BLYW0vN3kvdi8reHM3UC91YnU3LzgzUTBQLzArZnIvOGZiMy8vRDE5di94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLysvMDlmL3k5L2ovK1AzKy8vVDYrLy81L3Y3LysvLy8vOVhZMmY5c2JXMy9HeG9hL3prNU9mOVFUMC8vdTd5OC95RWhJZjhqSXlQLzRlUGovNG1MaXYrenRiWC92TDIrL3dBQUFQOVhXRmovc3JLeS96YzNOLzg1T1RuL0hoNGUvNU9VbFAvbDZlci8vZi8vLy9mOC9QLzErdnYvOS8zKy8vRDE5di93OWZiLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vRDE5di91OC9ULzcvVDEvKzd6OVAvdTgvVC85dnY4Ly9iNysvK1ZscGYvS2lvcS8xRlJVZjlsWldYL2lZbUsvd29LQ3Y4N1BEei8rUG41LzlEVDAvOFFFQkQvS3lzci80K1FrUDlaV1ZuL1JVVkYvelUxTmYrK3dzTC8vUC8vLy9MNCtQL3U4dlAvNy9UMS8rLzA5Zi91OC9ULzhmWDMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3c5ZmIvN2ZMei8vNy8vLzkvZjMvL05qWTIvMDFOVGY4L1B6Ly9iMjl2L3dBQUFQOTVlWHIvVEV4TS94b2FHdjlzYkd6L05UUTAvMDlPVHY4ek16UC9yYTJ0Ly8vLy8vL3E3L0QvOHZmNC8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3c5ZlgvOXZ2OC84dk56ditRa0pELzE5cmEvNy9Cd2YrUWtaSC9VbEpTLzJWbFpmOVBUMC8vWW1KaS93QUFBUDhTRWhML2MzTnovMEJBUVA5eWNuTC9Sa2RILzYreHNmL0h5TW4veXN6TS81R1Nrdi9pNWViLzlQbjYvL0QxOXYveDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8rN3o5UC81Ly8vL3VyeTkvejQrUHY5c2JHei9xYXFxLzNWMmR2OTFkWFgvaG9hRy95RWdJUCtPam83L0lDQWcvMUJRVVA5dGJXMy9LeXNyLzV5Y25QOWZZR0Qvam8rUS81eWRuZjlaV2xuL1ZGUlUvK0RqNVAvMSt2di83L1QxLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhQWDIvL0gyOS8veTkvZi9wS2FtLzRTRWhQK1ltWm4vUVVGQy8xWlZWZjlIUmtiL2taU1UvN0t6dFA5VlZWWC9iR3hzLzcyL3dQOXljM1AvVFV4TS8wcEpTZjlVVmxiL29LQ2gvMzkvZi8vQXc4UC85L3orLysvMDlmL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84UFgyLy9IMjkvLzcvLy8vOC9mMy8vWDUrZi9jMytEL3JyR3cvOG5NemYvLy8vLy96Yy9RLzFaVlZmOXhjWEgvN2ZEdy8vVDQrZis4dnI3L3RiaTQvK3Z2Ny8vejkvZi85dnY4Ly9uOS9mL3c5ZmIvOGZiMi8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8rN3o5UC93OWZiLzhQWDIvL2I2Ky8vOS8vLy8rUHo4LysvMTl2LzArUG4vT0RnNC8zVjNkLy8vLy8vLzdmTDAvL3YvLy8vOC8vLy84dmo1Ly9EMTl2L3Y5UFgvN3ZQMC8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi83L1QxLyszeTgvL3U4L1QvN2ZMei8vLy8vLzl3Y1hIL3BLU2svLy8vLy8vczhmUC83dlAwLys3eTlQL3c5ZmIvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly92OVBYLzlQbjYvOVhaMmYvaDVlYi85UG42Ly9EMTl2L3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8vdzlmYi85dnY4Ly9QNSt2L3c5ZmIvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3Y5UFgvOFBYMi8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUtBQUFBRUFBQUFDQUFBQUFBUUFnQUFBQUFBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUEgyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vRDE5di93OWZiLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8rLzA5Zi8zL1B6LzlmcjcvKy8wOWYveDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3c5ZmIvOHZmNC8vTDMrUC84Ly8vL3dNUEQvOHpPenYvOC8vLy84dmY0Ly9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3c5ZmIvOGZiMy8rL3o5UCtscHFmL3JhK3YvN2k2dXYrenRiWC9ySzZ2LzZ1dHJmLzArZnIvOFBYMi8vRDE5di94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3Y5UFgvOS96OS8rcnY4UCtYbUpqL2ZIMTkvM0J3Y2YraXBLVC9tSm1aLzI5d2NQK0JnWUgvbjZDZy8vUDQrZi8wK2ZyLzhQWDIvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3U4L1QvOWZyNy8rYnE2Lyt5czdQL25wK2cvKzd5OC8rUWtaSC9RRUJBLzBkSFIvK2VvS0QvN2ZIeS81aVltZis2dkx6LzZ1N3YvL1Q1K3YvdjlQWC84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3U4L1QvL1AvLy85bmMzUCtXbHBiL29LR2gvMnh0YmYvajV1Zi92YisvLzFKU1V2OVlXRmovMU5mWS84L1QxUDl0YlczL3BLV2wvNWFYbC8vbTZ1ci8rZjcvLysvMDlmL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9EMTl2L3c5ZmIvOXZ2Ny8rRGs1UCtYbUpuL3NiT3ovN3E5dmYvUzFkWC8rUHI3LzdHeXMvOXpjM1AvYzNOei84VEd4di93OHZMLzBOUFUvN2U1dXYrdHJxNy9tWnViLytqczdQLzErZnIvOFBYMi8vRDE5di94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8vdzlmYi84UFgyLy9IMjkvLzIrdnIvOS96OC84REV4UDhPRGc3L0JBUUUvNW1ibS8rdXI2Ly9xcTJ0LzVTV2x2ODlQVDMvaTQyTi8zcDdlLzlGUlVYL25KNmUvNm1yclArenRMVC9oWWFIL3dBQUFQOGhJU0gvMWRqWi8vVDUrdi8zKy96LzhQWDIvL0QxOXYvdzlmYi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi85ZnY4Ly9mOC9QLzErdnYva3BPVS83SzB0UCt0cnE3L1EwTkQvM1IwZFA4eE1USC9qNCtRLzF0YlcvOVlXRmovYW10ci8rWHA2di9VMk5qL1lHQmcvMVZWVmY5bFptYi9ob2VIL3pBd01QOXljbkwvUzB0TC83cTh2UCtucUtqL25xQ2cvL3YvLy8vMisvdi85ZnI4Ly9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84dmY0LzhyTnp2K3NyYTMvM09EaC82cXJxLzk4Zkh6L2EyeHMvN3k5dmY5eGNYSC9ZbUppLzVpYW0vK3VzTEgvdExXMS80eU5qZitRa3BML2lveU0vNVdWbGYreXNyUC9yN0d5LzQ2UGtQOWhZV0gvZEhSMC83L0F3UDlmWDEvL2k0eU0vNit3c1AvYTNOMy9xcXVyLzlIVjFmLzArZnIvOFBYMi8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8vdjlQWC85LzMrLzhEQ3d2K1ptWm4vd01MQy85WFoyditycnE3L0pDUWsvMkpqWS8vRXhzZi9nNFNFLytUbzZmK3JyYTMvajVDUS80YUdoditlbjUvL2ZuOS8vNEdDZ3YranBhWC9nNE9FLzVPVWxQKzF0N2YvM2VIaS8zNS9mLy9Lek0zL1NVbEsvekl5TXYrNnZiNy8wdFhXLzcyK3YvK1ZsWlgvek0vUC8vZjkvdi93OVBYLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLysvMDlQK05qbzcvY25KeS8zVjJkdjlwYVduL1BEczcvNENBZ1ArOXZyNy9uSjJlLzg3UjBmL0J3OFAvZFhWMS82V25wLys3dmI3L3BLYW0vN3krdi8rc3JxNy9uNkNnLzhIRHhQK1ptcHYvZVhwNi84M1B6Ly9HeWNuL25aNmUvOERDd3Y5dmNIRC9RRUJBLzNCd2NmOTFkbmIvY25KeS81bWFtdi8xK3Z2LzhQWDIvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9EMTl2LzQrL3ovalk2Ty80R0JnZjl6YzNQL282U2wvOURTMHYrYW1wci9wcWVvLzdtN3UvK3VyNi8vbnArZi82dXVyLy9pNStmLzYrL3cvNXlkbmYrb3Fxdi80K2pvLzdhNXV2L282K3ovM2VEaC82YXBxZitjbnA3L3M3UzAvN2k2dS8rZW41Ly9wYWVuLzgvUjB2K2NuWjMvY25KeS8zNStmditjblozLy9QLy8vKzcwOWYveDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLysvMDlmLzcvLy8vdXI2Ly8zMTlmZitNalkzL0lTSWkvNlNscGYraG9xTC9ySyt2Lzk3aDR2K3VyNi8vcTZ5cy8vYjYrdi81L1AzLy8vLy8vNzdBd2Y4V0ZoZi9BZ0lDLzlmWTJQLy8vLy8vOGZiMy8vVDUrdi8vLy8vLzd2UHovNkdqby8rMnQ3Zi8zT0RoLzZhb3FmK2pwS1QvbTV5ZC94c2JHLytobzZQL2NIQncvOUhWMXYvMy9mNy84UFgyLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3Y5UFgvLy8vLy8zWjNkLytjblozL2RIWjIveG9hR3YvZDMrRC9xNjJ0LzhIRXhQKyt3TUgvbzZXbC8vZjcrLy93OWZiLy8vLy8vOGZLeXY4VUZCVC9BQUFBL3dBQUFQOWJYRnovNnUvdy8rM3k4Ly90OHZQLzdmTHovL1Q1K3YvdjlQVC9tWnViLzhiSXlQKzR1cnIvdHJpNC85RFQxUDhFQkFUL2xwaVkvNE9EZy8rUGtaTC8vLy8vLys3ejlQL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOHZmNC8vRDA5ZitFaElUL2c0U0UvOExGeGY5SVNFai93TUxDLzhMRXhQK2ZvS0QvblorZi8rWHA2di8wK2ZyLzgvajQvNUdUbFA4TkRRMy9BQUFBL3dNREEvOENBZ0wvQUFBQS83YTR1UC8vLy8vLytmdjcvL0gzK1AvdjlQWC8rUDMrLzluYzNmK1ptcHIvb3FPai84ck16Zit3czdQL1NrdEwvODdSMHY5eGNYTC9rNVdWLy9iNy9QL3c5ZmIvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vRDE5di8xK3Z2L2pZNk8vNFNFaFArOXY3Ly92Y0RBLzZXbnFQK3hzN1AvbnArZy84REN3di81L3YvLzdmTHovL1g2Ky8rS2pJei9CUVVGL3dBQkFmOEFBQUQvQWdJQy93QUFBUDlOVFU3L201MmQvNit5c3YvdzlmYi84ZmIzLys3ejlQLzUvZjcvczdXMS82R2lvdit3c2JML3BxaW8vOFBGeGYrM3Vibi9lM3Q3LzVxY25mLzYvLy8vNy9UMS8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly92OVBYLy9QLy8vN2k3dS85b2FHai9jSEJ3LzVhV2wvK0xqSXoveHNqSS81ZVltUC9UMTlqLzl2ejkvL0QxOXYvdTgvVC8vLy8vLzNaM2QvOEFBQUQvQXdRRS93QUFBUDhBQUFEL0FRRUIvd0FBQVA4WUdCai80T1RsLy9UNSt2L3Y4L1QvK1A3Ly84UEd4LytlbjUvL3ZzREEvNDZQai8rUGtKRC9jM1IwLzJabVp2L0x6OC8vK2Y3Ly8rLzA5Zi94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0QxOXYveDlmYi9WRlJVLzRTRWhmL0d4OGoveXN6TS82NndzUDlwYVduL3VMdTcvL2Y4L2YvdzlmYi83dlAwLy9yLy8vKzl2Ny8vQUFBQS93RUJBZjhBQUFEL0FBQUEvd01EQS84RUJBVC9BUUVCLzhiSHgvLzkvLy8vN2ZMei8vYjcvUCttcUtuL2EyeHMvN2EzdVAvS3pNei94Y2JILzNKeWN2OW5aMmovKy83Ly8rN3o5UC94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0QxOXYvMisvdi8vLy8vLzJWbVp2OGxKU1gvajVDUS82cXJxLytnb3FML2xaYVcvK250N3YveitQbi84ZmIzLys3ejlQLy8vLy8vZ29TRS93QUFBUDhDQWdML0FBQUEvd0FBQVA4QUFBRC9BZ0lDL3dBQUFQOWdZV0wvOHZmNC8vRDE5di8xKy96LzNOL2YvNUdTa3YraG82UC9xYXFyLzRPRGhQOGRIUjMvZ29PRC8vLy8vLy96K1BuLzhQWDIvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0QxOXYvMCtmci94c25KLzZDaG92K1dscGYvWjJkbi95d3JLLytHaG9iL3BxZW8vNk9rcFAvNC9mNy83L1QxLysvMDlmLzQvZjcvME5QVS93d01EUDhBQUFEL0FRRUIvd0FBQVA4QUFBRC9BQUFBL3dJQ0F2OEFBQUQvTURFeC8vSDE5di94OXZmLzhQWDIvL1AzK1ArWm1wci9xNnVyLzNkM2QvOGxKU1gvZFhaMi81T1VsUCtscHFiL3p0TFQvL1g3L1AvdzlmYi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8vdzlmYi85ZnI3LzlIVjF2KzF0N2YvdXIyKy80bUtpLzlsWm1iL2UzdDcvOUxWMWYrcnJhNy85L3o5Ly9EMTl2L3Q4dlAvLy8vLy80ZUppZjhBQUFEL0JBUUUvd0FBQVA4QUFBRC9BQUFBL3dBQUFQOENBZ0wvQUFBQS81NmZuLy8vLy8vLzdmTHovL0gyOS8vdzlQWC9wNm1wLzlMVTFmOXVibTcvYVdwcS81Q1JrZis5d01EL3M3VzIvOXZmNFAvMCt2di84UFgyLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9EMTl2LzIrdnYvLy8vLy85emUzdit4czdQL29hS2kvNHlOanYvUTB0UC96TTNPLzk3aTQvLzErdnYvN2ZMei8vLy8vLzltWjJmL0FBQUEvd01EQS84QUFBRC9BQUFBL3dBQUFQOEFBQUQvQXdNRC93QUFBUCtUbFpiLy8vLy8vKzN5OC8vMy9QMy8xTmpaLzlIVDAvL0Z4c2IvaUltSi82YW5xUCt3c3JMLzV1Zm4vLy8vLy8vMStQbi84UFgyLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9EMTl2L3orUG4vN2ZIeS85WFoyditnb3FQL3NiT3ovNDJQai8rZW41Ly91N3k5LzhqS3l2L1AwZEwvOS8zKy8reng4di8vLy8vL1oyaG8vd0FBQVA4REF3UC9BQUFBL3dBQUFQOEFBQUQvQVFFQi93QUFBUDhIQmdiL3pkSFIvL3IvLy8vdDh2UC8rUHo5LzhYR3gvL0t6czcvdExhMi82Q2hvditNalk3L3RyaTQvNTZnb2YvZTR1UC83Zkx6Ly9QNCtmL3g5ZmIvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMTl2L3orUG4vNk8zdC81dWNuZitHaG9iL2k0dU0vNHlOamYrQ2hJVC91NzIrLzQyT2ovL0F3Y0gvbUpxYi8vLy8vLy9xNy9ELy8vLy8vNW1iblA4QUFBRC9CQVFFL3dBQUFQOEFBQUQvQUFBQS93RUJBZjhBQUFEL0R3OFAvNnF0cmYvMCtmci83L1AwLy9iNy9QOTJkM2YveTh6Ti8zMStmdi9MenM3L2EyeHQvNXllbi85L2dJRC9qWTZPLzZDaW92L3Y5UFgvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOHZmNC8rdnY4UC9zOGZML3p0SFMvNHVMaS8rL3djSC9tNXlkLzQrUGtQL0Z4OGYvZTN4OC8ycHFhdi90OGZILzgvajUvL0QxOXYvdDhmTC9ORFUxL3dBQUFQOEZCUVgvQXdNRC93TURBLzhEQXdQL0F3TUQvd0FBQVA4d01ERC83Zkh5Ly9uKy8vL08wZEwvWjJoby81Q1Nrdis5dnIvL2k0eU4vNlNtcHYrNHVyci9qSTJOLzluYzNmL3E3L0QvN1BIeS8vTDMrUC94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly95OS9qLzgvajUvL2Y4L2YvSXk4di9xYXFxLzdlNXV2KzV1N3ovcUtxcS8zNStmdittcDZmL3JhK3YvKzd6OVAveitQbi85L3o5LzlIVDAvOGVIaDcvQUFBQS93RUJBZjhBQUFEL0FBQUEvd0lDQXY5UlVsTC8wOWZZLy8vLy8vL1UxOWovcDZpby82MnZyLzkvZjMvL3I3Q3cvN2k3dS8rM3Vibi9wcWlvLzlEVTFmLzQvZjcvOHZmNC8vTDMrUC94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8vdjlQWC8rdi8vLzgvUzAvOXdjSEQvbzZXbC81NmdvUCtpcEtULzNOL2YvN08xdGYrbnFhbi82ZTN0Ly9iOC9mLzYvZjcvNGVUbC80Q0NndjlCUWtML1FrTkQvNUdUbFAvQXhNWC8rdno4Ly8zLy8vL1IxZGIvbXB1Yi84dk96di9mNHVML201eWMvNlducC8rWW1abi9kbloyLzk3aTQvLzQvZjcvNy9UMS8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3U4dlAvcjdHeC82MnZyLys1dTd2L2MzUjAvMVpYVi8vaDVlWC92Yi9BLzUyZm4vL0t6YzMvNnUvdy8vbjkvZi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vZi8vLytMbTUvKzB0cmIvbVpxYS85YmEydi9ZM04zL1NVbEovNENBZ1ArL3djSC9wYWVuLzdxOHZmL3k5L2ovOFBYMi8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vaisvLy9pNXVmL2JtNXYvNGVJaVA5QVFFRC9hR2xwLzh2UDBQL1YyZHIvcXF1cy82ZXBxZiswdHJmL3djVEUvOHZPei8vSnpNMy92TC9BLzZ5dXJ2K2hvcUwvdExhMi8rYnE2Ly9FeDhqL1ZsWlcvMHhNVFArRWhJWC9kM2QzLyt6eDh2LzMvUDMvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly92OVBYLzlmcjcvNmVwcWYrVmxwYi9vNlNrLzQ2UGovOTRlWG4vbko2Zi85SFUxZi9HeWNuL3hNYkcvNy9Cd2YrNXVici91THE2LzhQRnhmL0h5Y24vejlMUy85VFkyUCtQa1pIL2ZIeDgvNDJPanYrcHE2di9qbzZPLzdTMnQvLzMvUDMvN3ZQMC8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzcvVDEvL3IvLy8rMnVMai9uNkNnLy9iNSt2K2dvcUwvdDdpNC81T1RrLytabXByL25KeWQvMk5rWlArbnFxci90YmUzLzdXM3QvK2hvNlAvWVdGaS82V21wditPam83L25KMmQvN0t6cy8rcXJLei85dnI2LzVPVGsvL0p6TXovK2Y3Ly8rLzA5Zi94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLytQbjZQLzkvLy8vZ29PRS8wZEhSLytJaVluL3BLV2wveDRlSHY4QUFBRC9CQVFFLzZhcHF2K0ppNHYvQUFBQS93QUFBUDh3TUREL3JLMnQvMzErZnY5RFJFUC9uWjJkLy92Ly8vL2s2T24vOHZmNC8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3orUG4vOXZ2OC84elAwUCtGaG9iL3FxeXMvMmhwYWY4QUFBRC9RVUZCLzA1T1R2L0N4TVgvdDdtNS8wSkNRdjg4UER6L0FBQUEvMytBZ1AranBhWC9pSW1KLzlqYzNmLzErdnYvOC9qNS8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vRDE5di8zKy96LytmMzkvL2Y4L2YvUzF0Yi9Ta3BLLzJWbFpmOC9Qei8vblo2ZS80bUtpdjlIUjBmL1hWMWQvMVpZV1AvZjQrVC85L3o5Ly9yKy92LzErdnYvOFBYMi8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhQWDIvKy8wOWYvdzlmYi8xOXJiLzdlNnV2OWNYRnovVDA5UC96YzRPUDgzTnpmL1VGQlEvMkppWXYvRHhjYi8ydDdlLy9MMytQL3U4L1QvOFBYMi8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8vdjlQWC8rZjcvLzZPa3BmK0xpNHYvYm01dS8zRnhjZjlqWTJQL2FtcHIvMnRyYS85MmQzZi9pSWlKLzdTMnQvLzYvLy8vNy9UMS8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvLzIrL3ovN2ZIeS84L1QxUC95OWZiL2twT1QvNnFzclAvczhQSC8wdGJYLysvMDlmLzIrL3ovOFBYMi8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOFBYMi8vTDMrUC8yKy96LysvLy8vOG5NemYvVDF0Yi8rLy8vLy9iNy9QL3g5L2ovOFBYMi8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhQWDIvKy8wOWYvMStmci85UG41LysvMDlmL3c5ZmIvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84UFgyLy9EMTl2L3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS84QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUNnQUFBQXdBQUFBWUFBQUFBRUFJQUFBQUFBQUFDUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRHg5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvNy9UMS8vTDMrUC94OXZmLzcvVDEvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vRDE5di94OXZmLytmMysvKzd5OC8vdjlQWC8rUDMrLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhQWDIvL1A0K2YvcjcvRC8xTmpaLzhIRXhQL0V4OGovMWRqWi8rN3o5UC95OS9qLzhQWDIvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8vdzlmYi85dnY4Ly9EMTl2K25xYW4vZEhWMS81dWNuZitVbFpYL2QzZDMvN0N5c3YvMCtmci85UG42Ly9EMTl2L3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLysvMDlmL3orUG4vNWVycS82dXNyUCtobzZUL3pkSFIvMHhNVFA5V1ZsYi8wOWZYLzV1Y25QK3l0TFQvNk8zdS8vTDMrUC92OVBYLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOFBYMi8vYjYrLy8wK1BuL3FxeXMvNlNtcHYrMHRyYi82dXJxLzJscWF2OTNlSGovN2U3dS82eXVyditscHFiL3JyQ3gvL245L2YvMCtQbi84UGIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOFBYMi8vUDQrZi95OS9qLzlmcjcvOWpiM1A4b0tTbi9YRjFkLzd1OHZQKzR1N3YvZTN4OC8zNS9mLzkzZUhqL2c0V0YvN203dlArNXVyci9Ta3RML3pZM04vL2s2T24vOC9qNS8vUDQrZi96K1BuLzhQWDIvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzgvajUvK3Z2OFAvVzJ0di9uNkNnLzZLa3BQOWVYMS8vU1VsSi8zRnljdjk2ZW5yL1kyTmovNzNBd2YreHRMVC9YMTVlLzM1L2YvOXBhbXIvU2twSy8ySmpZLytwcXFyL25xQ2cvOTNpNC8vcTd1Ly85UG42Ly9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veitQbi93OGJHLzdHenMvL2Q0T0gvZVhsNS8xWlhWLyt5dExUL2lveU0vNjJ2ci8rZm9hSC9ucCtmLzMxK2Z2K0VoWVgvb3FLai82Q2hvZitzcnEvL2g0aUkvN1MydHY5SlNrci9pb3VMLzl2ZjMvK3VyNi8veWN6Ti8vVDUrLy93OWZiLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84UFgyLy9UNisvL2g1ZWIvZlgxOS80eU5qZjkrZjMvL1ZWWlcvNWVZbVArcnJhNy8wTlBULzVPVWxQK2JuSjMvcTYydC83VzJ0LytpcEtUL3A2bXAvNWlabXYrYW01di96OUxTLzZ1dHJmK1JrcEwvVlZaVy80U0ZoditJaVluL2c0T0QvK250N3YveitQbi84ZlgyLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOFBYMi8vZjkvdi9XMnR2L2dZR0IvMmRuWi8rZW41Ly9zN1MxLzdDeXN2KzJ0N2YvcXF1ci83ZTd1Ly96OS9mL3VMcTYvMzErZi8vZTR1TC8ydDdmLytmcjdQKzN1cnIvcWFxcS83aTZ1dit1c0xEL3RyZTQvNWFYbC85b2FHai9oWVdGLytEazVmLzErdnYvOFBYMi8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzcvVDEvL3YvLy8rUWtaTC9qNUNRL3pFeE1mK3p0YlgvcTYydC84N1Iwdityckt6LzUrenMvLy8vLy8vZDMrRC9KQ1VsL3dBQUFQKzV2THovL2YvLy8rM3g4di8vLy8vLzRlYm4vNm1xcS8vTzBkTC9xcXlzLzZxc3JQOHdNVEgva3BPVC81bWJuUC8rLy8vLzd2UDAvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmY0Ly9IMTl2OThmSHovcWF1cy8xOWdZUC9FeHNiL3RMVzEvNkNob2YvZDRlTC8vdi8vLzdhNXVmOGZIeC8vQUFBQS93QUFBUDhrSkNYLzkvZjMvLy8vLy8vdDh2UC8rZi8vLzliWjJ2K2NuWjcvdTd5OS83bTh2UDlqWldYL3BxaW8vNEtEZy8vMy9QMy84UFgyLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vVDUrditNalk3L2xKV1YvN0d6cy8raW82VC9xcXlzLzd5L3YvLzMvUDMvOXZ2OC83UzN1UDhPRGc3L0FBQUEvd0VCQWY4REF3UC9XbHRiLzQyUGovL3Q4ZkwvOFBYMi8vZjgvZiswdHJiL3JLMnQvNkdpb3YrMHRyYi9qSXlOLzVXWGwvLzQvZjcvOFBYMi8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzcvVDEvL3YvLy8rNXZMMy9YMTVlLzZTbHBmKzR1Ym4vbVp1Yi82NnhzZi81L3YvLzYvRHgvLy8vLy85L2dJRC9BQUFBL3dRRUJQOEJBUUgvQUFBQS93b0tDdi9iM2QzLzl2djgvL1g3L1AraXBhWC9ucUNnLzdlNXVmK2dvYUgvWFYxZC84akx6UC81Ly8vLzcvVDEvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi83L1QxLy9uKy8vL2U0ZUgvUERzNy80dU1qUCs1dXJ2L2lvdUwvOGJKeXYvMy9mNy83UEh5Ly83Ly8vOXdjbkwvQUFBQS93TURBLzhBQUFEL0JnWUcvd0FBQVArTGpZMy8rLy8vLy9YNisvKzd2YjcvakkyTi83cTd2UDk5Zm43L1JVVkYvKzN4OGYvMSsvei84UFgyLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3c5ZmIvOWZyOC85SFUxZitmb0tEL2hJV0YvelkxTmYrTWpJei9wcWlvLyticjYvL3k5L2ovK1A3Ly84elAwUDhIQndmL0FBQUEvd0VCQWY4QUFBRC9Bd01EL3dBQUFQOXNiVzcvL3YvLy8vUDQrZi9lNHVQL3BxZW4vNEdCZ2Y4Mk5UWC9pNHlNLzZDaG9mL1ozZDMvOWZyNy8vRDE5di94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzh2ZjQvK251Ny8vbDZlci91NzI5LzRhSGgvK1dtSmovemREUi85emc0Zi94OXZqLy8vLy8vNUtVbGY4QUFBRC9Bd01EL3dBQUFQOEFBQUQvQWdJQy93QUFBUCt3c3JMLy9mLy8vL1A0K2YvWDI5di96ZERRLzQyT2p2K0xqSXovd01MQy8rYnE2Ly9yOFBILzh2ZjQvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLysvMDlmL1QxOWovc2JPei81eWRuditrcHFmL3g4akkvOVBWMWYveDl2Zi8vLy8vLzRlSmlmOEFBQUQvQkFRRS93QUFBUDhCQVFIL0FBQUEvd1lGQmYvTzBkTC8rUDMrLy9MMytQL0x6czcvd3NURS82S2pwUCtlbjUvL3M3VzEvOWpjM2YvdjlQWC84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOHZmNC83L0J3ditIaDRmL2s1U1UvNHVOamYrZm9LSC9ySzZ2LzVhWW1mLzErdnYvK3YvLy83aTd2UDhBQUFEL0F3UUUvd01EQS84REF3UC9Bd01FL3dFQkFmK1htcHYvL1AvLy8rZnM3ZitLaTR6L3JhK3cvNTJmb1ArSWlvdi9rcE9VLzRxTGkvL0V4OGovOVBuNi8vRDE5di94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzcvVDEvL2I3L1AvWjNkNy9wNmlvLzdTMnQvK3ZzYkgvbVpxYS8zWjNkLy9WMmRuLzkvejkvL3IvLy85bFptZi9BQUFBL3dJQ0EvOEJBUUgvQUFBQS93UURBLytPa1pILy8vLy8vNzdCd2Y5OWZYMy9vS0doLzYydnIvKzJ1TGovcHFlbi8rSGw1Zi8xK3Z2LzhQWDIvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9EMTl2LzIrL3ovNHVibi80dU1qUCttcUtqL21weWMvOGZKeWYrenRiYi95OC9QLy9uKy8vLzIrZm4valpDUS96WTJOdjlBUUVEL2c0V0YvOWJaMnYvLy8vLy90N201LzcvQnd2L0l5OHYvbkoyZC82R2pvLytRa1pILzZlM3UvL1g2Ky8vdzlmYi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly93OWZiLzlmcjcvOGpMelArenRiWC9qWTZPLzFwYVcvL0F3OFQvdTc2Ky83ZTZ1di9iNE9ILyt2MysvL2o4L2YvMysvei8rZjcrLzluZDN2K3JyYTMveU12TC83eS93UDlWVlZYL2xwZVgvN0swdGYvUDB0UC85dnY4LysvMDlmL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi83L1QxLy96Ly8vL1cydHYvZzRTRS8zUjBkUDkyZG5iL3M3VzIvOExGeGYrMnVMai92TDYrLzcyL3YvKzh2Ny8vdXJ5OC83YTR1UC9MenM3L3NiUzAvMjF1YnY5NWVuci9oWVdHLytIbDV2LzYvLy8vNy9UMS8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vRDE5di92OVBUL29hS2kvOWZhMnYrbXFLai9rcE9ULzZpcHF2K2NuWjMvaTQyTi83UzJ0dit6dGJYL2lJcUsvNlNscGYraW82UC9rcEtULzY2d3NQL1QxdGIvcGFhbS8vVDUrdi92OVBYLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDkvai82ZTN1Ly9uKy8vOS9nWUgvYW1wcS80eU1qUDhQRHcvL0FnRUIvNVdYbC8rQmc0UC9BQUFBL3hvWkdmK1RrNVAvWVdKaS81R1Nrdi82Ly8vLzZlN3YvL0wzK1AveDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOHZmNC8vVDUrdi9lNHVQL3o5UFUvNTZob2Y4cUtpci9UMDlQLzZLam8vK1dsNWYvUzB0TC95b3FLdit1c2JIL3pkSFIvK0xuNlAvMCtmci84dmY0Ly9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0QxOXYvMCtmci8rdi8vLytUbzZQK1FrcEwvVEV4TS8waElTUDlHUmtiL1QwNU8vNXVjbmYvcDd1Ly8rLy8vLy9QNCtmL3c5ZmIvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3Y5UFgvOWZyNy84Zkx5LythbTV6L2hvZUgvM0J4Y2Y5MWRuYi9oWWFILzU2Zm9QL1EwOVQvOWZyNy8rLzA5Zi94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhQWDIvL2Y3L1AveTl2Zi8rLy8vLzhIRXhQL016OC8vK2Y3Ly8vUDQrZi8yK3Z2LzhQWDIvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9EMTl2L3c5ZmIvOGZiMy8vRDE5di93OWZiLzhmYjMvL0QxOXYvdzlmYi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvOEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBb0FBQUFJQUFBQUVBQUFBQUJBQ0FBQUFBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUE4ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8vdzlmYi84UFgyLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOFBYMi8vUDQrZi96K1BuLzhQWDIvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhQWDIvL0gyOS8vMisvei82TzN0LytudTcvLzIrL3YvOGZiMy8vRDE5di94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLysvMDlmL3c5ZmIvOC9qNS82NnhzZitZbVpuL2xwaVkvN1MzdC8vMSt2di84UFgyLy9EMTl2L3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vRDE5di93OWZiLzlmbjYvL2o2K3Yrd3NyUC92OExDLzNwN2UvK0RoWVgvdkw2Ly83VzN0Ly82L1B6LzlQbjUvL0QxOXYvdzlmYi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi85UG42Ly9MMytQL202ZW4vYUdwcS81ZVltZisxdUxqL2hvZUgvNG1LaXYrM3Vici9rWkdTLzIxdWIvL3I3L0QvOGZiMy8vVDUrdi94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vRDA5Zi9qNStqL3lzM04vNGVJaVA5Z1lHRC9lbnQ4LzM1L2YvK1FrcEwvanBDUS80S0NndjkyZG5mL1ltSmkvNHFMalAvTzBOSC80K2ZvLy9EMTl2L3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvKy8wOWYvNC9mNy96Yy9QLzVLU2t2K0tpNHYvYjI5dy83Mi92LytrcGFiL3BxZW8vNnl0cmYrZW41Ly9vcU9rLzZpcXF2KzZ2THovYkd4cy80K1FrUCtSa1pILzA5YlgvL2Y5L3YvdzlmYi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvNy9UMS8vZjkvdit4dExUL1dscGEvNW1hbXYrOHZyNy9zck96LzlqYzNmL2IzOS8vWW1Oai85bmQzdi9tNnV2L3ljek4vN08xdHYrOHZyNy9sSldWLzFwYVd2KzZ2TDMvK1AzKy8rLzA5Zi94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veitQbi82ZTd2LzVPVWxmOXljM1Avc0xHeS83R3pzLy9lNHVQLzVPbnEvem83Ty84QUFBRC9oSWFHLy8vLy8vLzQvZjMvMU5qWi83TzF0ZitycmE3L2NYTnovNWVZbWYvdTgvVC84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly96K1BuL2xKV1cvNktqby8rc3JhMy9yN0d5Ly9yLy8vL1UyTm4vSGg0ZS93QUFBUDhTRWhML1lXSmkvK3Z2OFAvMSt2di9xNjJ0LzY2dnNQK2ZvS0QvbUpxYS8vYjcvUC93OWZiLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi83dlAwLy83Ly8vK2RuNS8vYlcxdC82cXNyUCt0c0xELzgvajUvLy8vLy85VlZsYi9BQUFBL3dVRkJmOEFBQUQvdHJtNi8vLy8vLytscDZmL3E2eXQvMlptWi8rcHJLei8vZi8vLysvejlQL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vRDE5di96K1BuLzVPanAvN1MydHY5alkyUC9rWktTLzliWjJmLysvLy8veDh2TS93TURBLzhBQUFEL0JBUUUvd0FBQVArZ282VC8vLy8vLzlMVTFmK0tpNHYvWldWbC83bTd1Ly9uNit6LzgvajUvL0QxOXYveDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3M4ZkwvME5QVS81MmVuditxckszLzF0cmEvLy8vLy8rcHJLei9BQUFBL3dZR0J2OEJBUUgvQ1FrSi85TFYxZi80L3YvLzB0YlcvNmVwcWYrZm9LSC8wOWJYLyszeTgvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly93OWZiLzlQbjYvOXZmNFArYm5Kei9tWnFiLzZlcHFmK1VscGIvOGZYMi85bmQzdjhQRHcvL0FBQUEvd0lDQXY4QUFBRC9zN2UzLyt2djhQK1BrSkQvcWF1ci81ZVltZitlbjZELzMrUGsvL1A0K2YvdzlmYi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3c5ZmIvOWZ2OC8reng4ditycmEzL242R2gvNkdpb3YvR3ljbi85dnY3LzdTM3VQOHdNVEgvT0RrNS80ZUtpdi9XMmRyL3hzbkovNlducC8rZW9LRC9yN0d4LysvMDlmLzErdnYvOFBYMi8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8vdjlQWC85ZnI3LytMbTUvK3JyYTMvYlc1dS82ZXBxZi9BdzhQLzQrZm8vK250N2YvbzdPei81T2pwLzhiSXlmK2xxS2ovYlc1dS83Q3lzdi9sNmVyLzlQcjcvKy8wOWYveDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly91OC9ULy9QLy8vOURUMVArbHA2Zi9rWktTLzZpcHF2K1VsWmIvcGFhbi82S2twUCtYbUpuL3A2aXAvNUtUay8rbXFLai8xZG5hLy9yLy8vL3Y5UFgvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3c5ZmIvNy9UMS8vVDUrZitnb2FML2c0U0UveEVSRWY5K2dJRC9jbk56L3hZVkZmK0doNGYvcGFlbi8vYjcvUC91OC9ULzhQWDIvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84UFgyLy9mOC9mL1gyOXovWVdGaC8xcGFXdjlYVjFmL1ptZG4vOTdqNC8vMisvei84UFgyLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly93OWZiLzgvajUvK1hwNnYrNXZMei9pb3lNLzQyUGovKzh2Ny8vNk96dC8vTDMrUC93OWZiLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3c5ZmIvOC9qNS8vdi8vLy92OC9QLzhmVDEvL3IvLy8veTkvai84ZlgyLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDlmYi83L1AwLy9IMjkvL3g5dmYvNy9UMS8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBS0FBQUFCQUFBQUFnQUFBQUFRQWdBQUFBQUFBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84UFgyLy9EMTl2L3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly93OWZiLzhQWDIvL2Y4L2YvMy9QMy84UFgyLy9EMTl2L3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3Y5UFgvOC9qNS8vajgvUC9Jek16L3lzM08vL244L2Yvejkvai83L1QxLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8vdzlmYi8rUDMrLyt2dzhmK3RzTEQvakkyTi80K1FrUCt2c3JMLzdmTHovL2Y4L2YvdzlmYi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly93OWZiLzlQbjYvOC9TMC8rU2xKVC9ob2VJLzZpcHF2K2VuNkQvZ29PRC81V1dsLy9SMU5ULzlmcjcvL0QxOXYveDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDE5ditLakl6L29LR2gvOXZlMy85Y1hsNy93TVRFLytqczdmK1ptNXYvam8rUC8vTDMrUC94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9MMytQL3Y5UFgva3BPVS83Q3lzdi9yOFBIL0doc2IveUFnSVAvZzVPWC9yN0d4LzVTV2x2L3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDkvai84UFgyLzVlWW1QKzh2ci8vMTl6ZC93TURBLzhBQUFELzB0YlgvN2k2dS8rWm01di84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzh2ZjQvKzd6OVArNXZMei9ucUNnLzl2ZjRQOUhTVW4vT3p3OC84M1Iwditmb2FIL3U3NisvKy8wOWYveDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vRDE5di96K1BuLzh2ZjQvNmFvcWYrZW9LRC93c1hGLzcvQnd2K2RuNS8vcXF5cy8vUDQrZi95OS9qLzhQWDIvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOFBYMi8vSDI5Ly8xK3ZyL3NyVzEvMU5UVS85VVZWWC90N202Ly9YNisvL3g5dmYvOFBYMi8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3c5ZmIvOHZmNC8vZjgvUC9HeXNyL3lNek0vL2o4L2YveDl2Zi84UFgyLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3c5ZmIvK2YzKy8vajkvdi93OWZiLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLysvMDlmL3Y5UFgvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS84QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSJ9
DGE_SETUP_PAYLOAD
"$python_bin" - "$setup_directory" <<'PY'
import base64, json, sys
from pathlib import Path
root = Path(sys.argv[1])
for name, content in json.loads(base64.b64decode((root / 'payload').read_text())).items():
    path = root / name
    if name.endswith(('.png', '.ico')):
        path.write_bytes(base64.b64decode(content))
    else:
        path.write_text(content)
PY
linux_guest=0
if [ "$os" = Linux ] && { [ -n "${DGE_GUEST_INSTALL:-}" ] || [ -d /mnt/lima-cidata ]; }; then
  linux_guest=1
fi
if [ "$linux_guest" = 1 ] && [ -f "$setup_directory/install.py" ]; then
  if [ ! -f "$setup_directory/invitation.json" ]; then
    echo 'This Linux VM is missing the worker invitation from the Mac or Windows app. Open Dorian Gray Worker on the host and try again.'
    exit 1
  fi
  "$python_bin" "$setup_directory/install.py"
elif [ -f "$setup_directory/host_gui.py" ]; then
  if [ "$os" = Darwin ]; then
    "$python_bin" "$setup_directory/host_gui.py" "$0"
  elif linux_headless; then
    "$python_bin" "$setup_directory/host_gui.py" "$0"
  elif [ -n "${gui_user:-}" ] && [ "$gui_user" != root ]; then
    sudo -u "$gui_user" -E env DISPLAY="${DISPLAY:-}" WAYLAND_DISPLAY="${WAYLAND_DISPLAY:-}" \
      XAUTHORITY="${XAUTHORITY:-}" \
      DGE_ENROLL_NAME="${DGE_ENROLL_NAME:-}" DGE_ENROLL_EMAIL="${DGE_ENROLL_EMAIL:-}" \
      DGE_ENROLL_PHONE="${DGE_ENROLL_PHONE:-}" DGE_ENROLL_NOTE="${DGE_ENROLL_NOTE:-}" \
      DGE_ENROLL_HEADLESS="${DGE_ENROLL_HEADLESS:-}" \
      "$python_bin" "$setup_directory/host_gui.py" "$0"
  else
    "$python_bin" "$setup_directory/host_gui.py" "$0"
  fi
elif [ "$os" = Darwin ]; then
  "$python_bin" "$setup_directory/install_macos.py" "$0"
else
  "$python_bin" "$setup_directory/install.py"
fi
