CHAT_OUTPUT_BEGIN
COMMAND_ID=SUPPORT-260923-SKLADCHIK-CURRENT-EDGE-UPDATER-SOURCE-944R1
STATUS=OK
RC=0
HOST=pve01
MODE=read-only
COMPONENT=skladchik-current-edge-updater-source
REFERENCE_REGISTER_CHECK=OK
REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66
ERROR_REGISTER_CHECK=OK
ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0
COMMAND_SHA256=0171a3ced661558ed6f0ab909ba014aea79053b21400f6b2f2eceba92257d7b8
DUPLICATE_FAILED_COMMAND_BLOCKED=false
EXECUTION_STARTED=true
CHANGE_DECLARED=false
RESULT_CONTRACT_VALID=true
RESULT_CONTRACT_STATUS=NOT_APPLICABLE
RESULT_CONTRACT_ERROR=NONE
COMMAND_RC=0
CHANGES_MADE=false
ROLLBACK_STARTED=false
ROLLBACK_RESTORED=null
MUTATION_OUTCOME=NO_MUTATION
SANITIZED=yes
SECRETS_INCLUDED=no
PRIVATE_ADDRESSES_INCLUDED=no
RAW_EVIDENCE_SHA256=ba150554aca68c2348134a9f0017b998a31eba97431978781bb51e7cf1999c75
SANITIZED_OUTPUT_SHA256=ba150554aca68c2348134a9f0017b998a31eba97431978781bb51e7cf1999c75
OUTPUT_BEGIN
SKLADCHIK944_BEGIN=true
COMMAND_ID=SUPPORT-260923-SKLADCHIK-CURRENT-EDGE-UPDATER-SOURCE-944R1
MODE=read-only
COMPONENT=skladchik-current-edge-updater-source
PREDECESSOR_943=STALE_MIGRATION_PREFLIGHT_EXPECTS_ORIGINAL_SHA
MUTATION_BOUNDARY=NONE_READ_ONLY
VERSIONED_EDGE_BEGIN
VERSIONED_EDGE_PATH_BASENAME=skladchik-reports-monitor-cookie-update-edge
VERSIONED_EDGE_PRESENT=true
VERSIONED_EDGE_SHA256=10fe854274dca1a053cfd8c0155340bd689bf3f6555c70dbc14b890cbafb93fa
VERSIONED_EDGE_BYTES=5247
VERSIONED_EDGE_LINES=178
VERSIONED_EDGE_LINE_0001=#!/usr/bin/env bash
VERSIONED_EDGE_LINE_0002=set -Eeuo pipefail
VERSIONED_EDGE_LINE_0003=umask 077
VERSIONED_EDGE_LINE_0004=
VERSIONED_EDGE_LINE_0005=SECRETS=/etc/skladchik-reports-monitor/secrets.env
VERSIONED_EDGE_LINE_0006=MONITOR=/opt/skladchik-reports-monitor/monitor.py
VERSIONED_EDGE_LINE_0007=COOKIE_JAR=/var/lib/skladchik-reports-monitor/cookies.jar
VERSIONED_EDGE_LINE_0008=HEALTH=/var/lib/skladchik-reports-monitor/health.txt
VERSIONED_EDGE_LINE_0009=OUTPUT=/tmp/skladchik-cookie-update-monitor.out
VERSIONED_EDGE_LINE_0010=TIMER=skladchik-reports-monitor.timer
VERSIONED_EDGE_LINE_0011=SERVICE=skladchik-reports-monitor.service
VERSIONED_EDGE_LINE_0012=
VERSIONED_EDGE_LINE_0013=TMP="$(mktemp)"
VERSIONED_EDGE_LINE_0014=NO_COOKIE_SECRET="$(mktemp)"
VERSIONED_EDGE_LINE_0015=SECRETS_BACKUP=""
VERSIONED_EDGE_LINE_0016=JAR_BACKUP=""
VERSIONED_EDGE_LINE_0017=JAR_EXISTED=0
VERSIONED_EDGE_LINE_0018=AUTH_MUTATED=0
VERSIONED_EDGE_LINE_0019=FINALIZED=0
VERSIONED_EDGE_LINE_0020=
VERSIONED_EDGE_LINE_0021=TIMER_WAS_ENABLED="$(systemctl is-enabled "$TIMER" 2>/dev/null || true)"
VERSIONED_EDGE_LINE_0022=TIMER_WAS_ACTIVE="$(systemctl is-active "$TIMER" 2>/dev/null || true)"
VERSIONED_EDGE_LINE_0023=
VERSIONED_EDGE_LINE_0024=on_err(){
VERSIONED_EDGE_LINE_0025=  local rc=$?
VERSIONED_EDGE_LINE_0026=  trap - ERR
VERSIONED_EDGE_LINE_0027=  printf 'ROOT_CAUSE=UNEXPECTED_COOKIE_UPDATE_ERROR\nROOT_CAUSE_COUNT=1\nDETAIL=line=%s rc=%s\n' "${1:-0}" "$rc"
VERSIONED_EDGE_LINE_0028=  exit "$rc"
VERSIONED_EDGE_LINE_0029=}
VERSIONED_EDGE_LINE_0030=
VERSIONED_EDGE_LINE_0031=restore_timer_state(){
VERSIONED_EDGE_LINE_0032=  systemctl stop "$TIMER" >/dev/null 2>&1 || true
VERSIONED_EDGE_LINE_0033=  if [ "$TIMER_WAS_ENABLED" = enabled ]; then
VERSIONED_EDGE_LINE_0034=    systemctl enable "$TIMER" >/dev/null 2>&1 || true
VERSIONED_EDGE_LINE_0035=  else
VERSIONED_EDGE_LINE_0036=    systemctl disable "$TIMER" >/dev/null 2>&1 || true
VERSIONED_EDGE_LINE_0037=  fi
VERSIONED_EDGE_LINE_0038=  if [ "$TIMER_WAS_ACTIVE" = active ]; then
VERSIONED_EDGE_LINE_0039=    systemctl start "$TIMER" >/dev/null 2>&1 || true
VERSIONED_EDGE_LINE_0040=  fi
VERSIONED_EDGE_LINE_0041=}
VERSIONED_EDGE_LINE_0042=
VERSIONED_EDGE_LINE_0043=restore_auth_state(){
VERSIONED_EDGE_LINE_0044=  if [ "$AUTH_MUTATED" -eq 1 ]; then
VERSIONED_EDGE_LINE_0045=    if [ -n "$SECRETS_BACKUP" ] && [ -s "$SECRETS_BACKUP" ]; then
VERSIONED_EDGE_LINE_0046=      install -m 0600 -o root -g root "$SECRETS_BACKUP" "$SECRETS"
VERSIONED_EDGE_LINE_0047=    fi
VERSIONED_EDGE_LINE_0048=    if [ "$JAR_EXISTED" -eq 1 ] && [ -n "$JAR_BACKUP" ] && [ -s "$JAR_BACKUP" ]; then
VERSIONED_EDGE_LINE_0049=      install -m 0600 -o root -g root "$JAR_BACKUP" "$COOKIE_JAR"
VERSIONED_EDGE_LINE_0050=    else
VERSIONED_EDGE_LINE_0051=      rm -f "$COOKIE_JAR"
VERSIONED_EDGE_LINE_0052=    fi
VERSIONED_EDGE_LINE_0053=    AUTH_MUTATED=0
VERSIONED_EDGE_LINE_0054=  fi
VERSIONED_EDGE_LINE_0055=}
VERSIONED_EDGE_LINE_0056=
VERSIONED_EDGE_LINE_0057=cleanup(){
VERSIONED_EDGE_LINE_0058=  local rc=$?
VERSIONED_EDGE_LINE_0059=  trap - ERR
VERSIONED_EDGE_LINE_0060=  trap - EXIT INT TERM HUP
VERSIONED_EDGE_LINE_0061=  set +e
VERSIONED_EDGE_LINE_0062=  if [ "$FINALIZED" -ne 1 ]; then
VERSIONED_EDGE_LINE_0063=    restore_auth_state
VERSIONED_EDGE_LINE_0064=    restore_timer_state
VERSIONED_EDGE_LINE_0065=  fi
VERSIONED_EDGE_LINE_0066=  rm -f "$TMP" "$NO_COOKIE_SECRET"
VERSIONED_EDGE_LINE_0067=  [ -z "$SECRETS_BACKUP" ] || rm -f "$SECRETS_BACKUP"
VERSIONED_EDGE_LINE_0068=  [ -z "$JAR_BACKUP" ] || rm -f "$JAR_BACKUP"
VERSIONED_EDGE_LINE_0069=  exit "$rc"
VERSIONED_EDGE_LINE_0070=}
VERSIONED_EDGE_LINE_0071=
VERSIONED_EDGE_LINE_0072=trap 'on_err "$LINENO"' ERR
VERSIONED_EDGE_LINE_0073=trap cleanup EXIT
VERSIONED_EDGE_LINE_0074=trap 'exit 130' INT
VERSIONED_EDGE_LINE_0075=trap 'exit 143' TERM
VERSIONED_EDGE_LINE_0076=trap 'exit 129' HUP
VERSIONED_EDGE_LINE_0077=
VERSIONED_EDGE_LINE_0078=systemctl stop "$TIMER"
VERSIONED_EDGE_LINE_0079=
VERSIONED_EDGE_LINE_0080=WAIT_SECONDS=90
VERSIONED_EDGE_LINE_0081=DEADLINE=$((SECONDS + WAIT_SECONDS))
VERSIONED_EDGE_LINE_0082=while systemctl is-active --quiet "$SERVICE" || pgrep -f '/opt/skladchik-reports-monitor/monitor.py' >/dev/null; do
VERSIONED_EDGE_LINE_0083=  if (( SECONDS >= DEADLINE )); then
VERSIONED_EDGE_LINE_0084=    restore_timer_state
VERSIONED_EDGE_LINE_0085=    FINALIZED=1
VERSIONED_EDGE_LINE_0086=    printf 'MONITOR_QUIESCENCE_TIMEOUT\n'
VERSIONED_EDGE_LINE_0087=    exit 75
VERSIONED_EDGE_LINE_0088=  fi
VERSIONED_EDGE_LINE_0089=  sleep 2
VERSIONED_EDGE_LINE_0090=done
VERSIONED_EDGE_LINE_0091=
VERSIONED_EDGE_LINE_0092=printf "Вставь полный новый Cookie header для skladchik.org без слова Cookie: и нажми Enter:\n"
VERSIONED_EDGE_LINE_0093=IFS= read -r -s NEW_COOKIE
VERSIONED_EDGE_LINE_0094=printf '\n'
VERSIONED_EDGE_LINE_0095=if [ -z "$NEW_COOKIE" ]; then
VERSIONED_EDGE_LINE_0096=  printf 'COOKIE_EMPTY\n'
VERSIONED_EDGE_LINE_0097=  exit 1
VERSIONED_EDGE_LINE_0098=fi
VERSIONED_EDGE_LINE_0099=case "$NEW_COOKIE" in
VERSIONED_EDGE_LINE_0100=  *$'\r'*|*$'\n'*)
VERSIONED_EDGE_LINE_0101=    printf 'COOKIE_INVALID_LINE_BREAK\n'
VERSIONED_EDGE_LINE_0102=    exit 64
VERSIONED_EDGE_LINE_0103=    ;;
VERSIONED_EDGE_LINE_0104=esac
VERSIONED_EDGE_LINE_0105=
VERSIONED_EDGE_LINE_0106=SECRETS_BACKUP="$(mktemp /etc/skladchik-reports-monitor/.secrets.env.rollback.XXXXXX)"
VERSIONED_EDGE_LINE_0107=cp -a "$SECRETS" "$SECRETS_BACKUP"
VERSIONED_EDGE_LINE_0108=
VERSIONED_EDGE_LINE_0109=if [ -s "$COOKIE_JAR" ]; then
VERSIONED_EDGE_LINE_0110=  JAR_BACKUP="$(mktemp /var/lib/skladchik-reports-monitor/.cookies.jar.rollback.XXXXXX)"
VERSIONED_EDGE_LINE_0111=  cp -a "$COOKIE_JAR" "$JAR_BACKUP"
VERSIONED_EDGE_LINE_0112=  JAR_EXISTED=1
VERSIONED_EDGE_LINE_0113=fi
VERSIONED_EDGE_LINE_0114=AUTH_MUTATED=1
VERSIONED_EDGE_LINE_0115=
VERSIONED_EDGE_LINE_0116=awk '!/^SKLADCHIK_COOKIE=/' "$SECRETS" >"$TMP"
VERSIONED_EDGE_LINE_0117=printf 'SKLADCHIK_COOKIE=%s\n' "$NEW_COOKIE" >>"$TMP"
VERSIONED_EDGE_LINE_0118=install -m 0600 -o root -g root "$TMP" "$SECRETS"
VERSIONED_EDGE_LINE_0119=
VERSIONED_EDGE_LINE_0120=# The monitor prefers a non-empty cookie jar over SKLADCHIK_COOKIE.
VERSIONED_EDGE_LINE_0121=# Removing the stale jar forces the first probe to use the newly entered Cookie header.
VERSIONED_EDGE_LINE_0122=rm -f "$COOKIE_JAR"
VERSIONED_EDGE_LINE_0123=: >"$OUTPUT"
VERSIONED_EDGE_LINE_0124=
VERSIONED_EDGE_LINE_0125=set +e
VERSIONED_EDGE_LINE_0126=python3 "$MONITOR" run >>"$OUTPUT" 2>&1
VERSIONED_EDGE_LINE_0127=FIRST_RUN_RC=$?
VERSIONED_EDGE_LINE_0128=set -e
VERSIONED_EDGE_LINE_0129=FIRST_RUN_STATUS="$(awk -F= '$1=="STATUS"{print $2;exit}' "$HEALTH" 2>/dev/null || true)"
VERSIONED_EDGE_LINE_0130=
VERSIONED_EDGE_LINE_0131=SECOND_RUN_RC=1
VERSIONED_EDGE_LINE_0132=SECOND_RUN_STATUS=NOT_RUN
VERSIONED_EDGE_LINE_0133=if [ "$FIRST_RUN_RC" -eq 0 ] && [ "$FIRST_RUN_STATUS" = OK ] && [ -s "$COOKIE_JAR" ]; then
VERSIONED_EDGE_LINE_0134=  # Prove unattended persistence: temporarily remove the header secret, then run only from the new jar.
VERSIONED_EDGE_LINE_0135=  awk '!/^SKLADCHIK_COOKIE=/' "$TMP" >"$NO_COOKIE_SECRET"
VERSIONED_EDGE_LINE_0136=  install -m 0600 -o root -g root "$NO_COOKIE_SECRET" "$SECRETS"
VERSIONED_EDGE_LINE_0137=  set +e
VERSIONED_EDGE_LINE_0138=  python3 "$MONITOR" run >>"$OUTPUT" 2>&1
VERSIONED_EDGE_LINE_0139=  SECOND_RUN_RC=$?
VERSIONED_EDGE_LINE_0140=  set -e
VERSIONED_EDGE_LINE_0141=  SECOND_RUN_STATUS="$(awk -F= '$1=="STATUS"{print $2;exit}' "$HEALTH" 2>/dev/null || true)"
VERSIONED_EDGE_LINE_0142=  install -m 0600 -o root -g root "$TMP" "$SECRETS"
VERSIONED_EDGE_LINE_0143=fi
VERSIONED_EDGE_LINE_0144=
VERSIONED_EDGE_LINE_0145=if [ "$FIRST_RUN_RC" -ne 0 ] || [ "$FIRST_RUN_STATUS" != OK ] || [ ! -s "$COOKIE_JAR" ] || [ "$SECOND_RUN_RC" -ne 0 ] || [ "$SECOND_RUN_STATUS" != OK ]; then
VERSIONED_EDGE_LINE_0146=  restore_auth_state
VERSIONED_EDGE_LINE_0147=  restore_timer_state
VERSIONED_EDGE_LINE_0148=  FINALIZED=1
VERSIONED_EDGE_LINE_0149=  printf 'COOKIE_UPDATE_FAILED_ROLLED_BACK\n'
VERSIONED_EDGE_LINE_0150=  printf 'FIRST_RUN_RC=%s\nFIRST_RUN_STATUS=%s\n' "$FIRST_RUN_RC" "$FIRST_RUN_STATUS"
VERSIONED_EDGE_LINE_0151=  printf 'SECOND_JAR_ONLY_RUN_RC=%s\nSECOND_JAR_ONLY_RUN_STATUS=%s\n' "$SECOND_RUN_RC" "$SECOND_RUN_STATUS"
VERSIONED_EDGE_LINE_0152=  printf 'HEALTH_BEGIN\n'
VERSIONED_EDGE_LINE_0153=  cat "$HEALTH" 2>/dev/null || true
VERSIONED_EDGE_LINE_0154=  printf 'HEALTH_END\n'
VERSIONED_EDGE_LINE_0155=  printf 'MONITOR_OUTPUT_TAIL\n'
VERSIONED_EDGE_LINE_0156=  tail -n 40 "$OUTPUT" 2>/dev/null || true
VERSIONED_EDGE_LINE_0157=  exit 1
VERSIONED_EDGE_LINE_0158=fi
VERSIONED_EDGE_LINE_0159=
VERSIONED_EDGE_LINE_0160=AUTH_MUTATED=0
VERSIONED_EDGE_LINE_0161=rm -f "$SECRETS_BACKUP"
VERSIONED_EDGE_LINE_0162=SECRETS_BACKUP=""
VERSIONED_EDGE_LINE_0163=if [ -n "$JAR_BACKUP" ]; then
VERSIONED_EDGE_LINE_0164=  rm -f "$JAR_BACKUP"
VERSIONED_EDGE_LINE_0165=  JAR_BACKUP=""
VERSIONED_EDGE_LINE_0166=fi
VERSIONED_EDGE_LINE_0167=
VERSIONED_EDGE_LINE_0168=systemctl reset-failed "$SERVICE" "$TIMER" >/dev/null 2>&1 || true
VERSIONED_EDGE_LINE_0169=systemctl enable --now skladchik-reports-monitor.timer >/dev/null 2>&1 || true
VERSIONED_EDGE_LINE_0170=FINALIZED=1
VERSIONED_EDGE_LINE_0171=echo "COOKIE_UPDATE_OK"
VERSIONED_EDGE_LINE_0172=echo "FRESH_COOKIE_FORCED=YES"
VERSIONED_EDGE_LINE_0173=echo "STALE_COOKIE_JAR_BYPASSED=YES"
VERSIONED_EDGE_LINE_0174=echo "SECOND_JAR_ONLY_PERSISTENCE_RUN=OK"
VERSIONED_EDGE_LINE_0175=echo "SECRET_PRINTED=NO"
VERSIONED_EDGE_LINE_0176=echo "HEALTH_BEGIN"
VERSIONED_EDGE_LINE_0177=cat "$HEALTH" 2>/dev/null || true
VERSIONED_EDGE_LINE_0178=echo "HEALTH_END"
VERSIONED_EDGE_END
VERSIONED_WRAPPER_BEGIN
VERSIONED_WRAPPER_PATH_BASENAME=skladchik-reports-monitor-cookie-update
VERSIONED_WRAPPER_PRESENT=true
VERSIONED_WRAPPER_SHA256=ea2d89ce67893a6d89b29610e4d46e207932ecc157173454585f67890f58810c
VERSIONED_WRAPPER_BYTES=638
VERSIONED_WRAPPER_LINES=16
VERSIONED_WRAPPER_LINE_0001=#!/usr/bin/env bash
VERSIONED_WRAPPER_LINE_0002=set -Eeuo pipefail
VERSIONED_WRAPPER_LINE_0003=export SYSTEMD_PAGER=cat PAGER=cat SYSTEMD_LESS=FRXMK
VERSIONED_WRAPPER_LINE_0004=EDGE=debian@[PRIVATE_IP]
VERSIONED_WRAPPER_LINE_0005=EDGE_SCRIPT=/usr/local/sbin/skladchik-reports-monitor-cookie-update-edge
VERSIONED_WRAPPER_LINE_0006=SSH=(-o BatchMode=yes -o ConnectTimeout=15 -o StrictHostKeyChecking=yes -o UserKnownHostsFile=[SENSITIVE_PATH]
VERSIONED_WRAPPER_LINE_0007=printf '\033[93m%s\033[0m\n' 'SKLADCHIK CONTROLLED COOKIE UPDATE'
VERSIONED_WRAPPER_LINE_0008=printf 'SAFE_OUTPUT=YES\nSECRET_PRINTED=NO\nSTEP=SKLADCHIK_REPORTS_MONITOR_COOKIE_UPDATE\n'
VERSIONED_WRAPPER_LINE_0009=if ssh -tt "${SSH[@]}" "$EDGE" sudo -n "$EDGE_SCRIPT"; then
VERSIONED_WRAPPER_LINE_0010=  rc=0
VERSIONED_WRAPPER_LINE_0011=else
VERSIONED_WRAPPER_LINE_0012=  rc=$?
VERSIONED_WRAPPER_LINE_0013=fi
VERSIONED_WRAPPER_LINE_0014=printf 'SSH_COOKIE_UPDATE_RC=%s\n' "$rc"
VERSIONED_WRAPPER_LINE_0015=printf '\033[93m%s\033[0m\n' 'END'
VERSIONED_WRAPPER_LINE_0016=exit "$rc"
VERSIONED_WRAPPER_END
LIVE_WRAPPER_BEGIN
LIVE_WRAPPER_PATH_BASENAME=skladchik-reports-monitor-cookie-update
LIVE_WRAPPER_PRESENT=true
LIVE_WRAPPER_SHA256=ea2d89ce67893a6d89b29610e4d46e207932ecc157173454585f67890f58810c
LIVE_WRAPPER_BYTES=638
LIVE_WRAPPER_LINES=16
LIVE_WRAPPER_LINE_0001=#!/usr/bin/env bash
LIVE_WRAPPER_LINE_0002=set -Eeuo pipefail
LIVE_WRAPPER_LINE_0003=export SYSTEMD_PAGER=cat PAGER=cat SYSTEMD_LESS=FRXMK
LIVE_WRAPPER_LINE_0004=EDGE=debian@[PRIVATE_IP]
LIVE_WRAPPER_LINE_0005=EDGE_SCRIPT=/usr/local/sbin/skladchik-reports-monitor-cookie-update-edge
LIVE_WRAPPER_LINE_0006=SSH=(-o BatchMode=yes -o ConnectTimeout=15 -o StrictHostKeyChecking=yes -o UserKnownHostsFile=[SENSITIVE_PATH]
LIVE_WRAPPER_LINE_0007=printf '\033[93m%s\033[0m\n' 'SKLADCHIK CONTROLLED COOKIE UPDATE'
LIVE_WRAPPER_LINE_0008=printf 'SAFE_OUTPUT=YES\nSECRET_PRINTED=NO\nSTEP=SKLADCHIK_REPORTS_MONITOR_COOKIE_UPDATE\n'
LIVE_WRAPPER_LINE_0009=if ssh -tt "${SSH[@]}" "$EDGE" sudo -n "$EDGE_SCRIPT"; then
LIVE_WRAPPER_LINE_0010=  rc=0
LIVE_WRAPPER_LINE_0011=else
LIVE_WRAPPER_LINE_0012=  rc=$?
LIVE_WRAPPER_LINE_0013=fi
LIVE_WRAPPER_LINE_0014=printf 'SSH_COOKIE_UPDATE_RC=%s\n' "$rc"
LIVE_WRAPPER_LINE_0015=printf '\033[93m%s\033[0m\n' 'END'
LIVE_WRAPPER_LINE_0016=exit "$rc"
LIVE_WRAPPER_END
SOURCE_RELATION_BEGIN
VERSIONED_EDGE_SHA_EXPECTED=10fe854274dca1a053cfd8c0155340bd689bf3f6555c70dbc14b890cbafb93fa
VERSIONED_EDGE_SHA_MATCH=true
VERSIONED_WRAPPER_SHA_EXPECTED=ea2d89ce67893a6d89b29610e4d46e207932ecc157173454585f67890f58810c
VERSIONED_WRAPPER_SHA_MATCH=true
LIVE_WRAPPER_EQUALS_VERSIONED=true
SOURCE_RELATION_END
CHANGES_MADE_BY_944=false
ROLLBACK_STARTED=false
ROLLBACK_RESTORED=null
HOMELAB_RESULT_CONTRACT={"version":1,"command_id":"SUPPORT-260923-SKLADCHIK-CURRENT-EDGE-UPDATER-SOURCE-944R1","status":"OK","changes_made":false,"rollback_started":false,"rollback_restored":null}
SKLADCHIK944_END=true

OUTPUT_END
CHAT_OUTPUT_END
