From bbad87d3c62e2566c9e0c3b8fcf0c43c4e336b50 Mon Sep 17 00:00:00 2001 From: Cellie Date: Sat, 13 Jul 2019 12:44:30 +0200 Subject: [PATCH] Merge logging to FFat to sensorState class. (#16) * Started merge of logging to sensorState class. * Start sensors after setting the time with SNTP. Some cleanup. * Remove unused variables. Save reset reason to file. Fixed ntpTask stack overflow. * Fixed getting SNTP sync. logLineToFile() and resetString() are native again. * Cleaned up. * Only format FATFS on first run. * Fixed fscking script problem. Took a long time to debug. * Fix last commit. * Log reset reason to FFat. * Formatting. --- Task.cpp | 130 -- Task.h | 67 - aquacontrol32.ino | 95 +- compile.sh | 2 +- flash.sh | 2 +- loggertask.ino | 159 --- mapFloat.h | 10 - ntptask.ino | 41 +- sensorState.cpp | 234 ---- sensorState.h | 60 - threeDigitPercentage.ino | 19 - webif/setup.htm | 28 +- webif/setup_htm.h | 2691 +++++++++++++++++++------------------- webservertask.ino | 28 +- wifitask.ino | 2 +- 15 files changed, 1498 insertions(+), 2070 deletions(-) delete mode 100644 Task.cpp delete mode 100644 Task.h delete mode 100644 loggertask.ino delete mode 100644 mapFloat.h delete mode 100644 sensorState.cpp delete mode 100644 sensorState.h delete mode 100644 threeDigitPercentage.ino diff --git a/Task.cpp b/Task.cpp deleted file mode 100644 index 977b1a5..0000000 --- a/Task.cpp +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Task.cpp - * - * Created on: Mar 4, 2017 - * Author: kolban - */ - - -#include -#include -#include -#include - -#include "Task.h" -#include "sdkconfig.h" - -static const char* LOG_TAG = "Task"; - - -/** - * @brief Create an instance of the task class. - * - * @param [in] taskName The name of the task to create. - * @param [in] stackSize The size of the stack. - * @return N/A. - */ -Task::Task(std::string taskName, uint16_t stackSize, uint8_t priority) { - m_taskName = taskName; - m_stackSize = stackSize; - m_priority = priority; - m_taskData = nullptr; - m_handle = nullptr; - m_coreId = tskNO_AFFINITY; -} // Task - -Task::~Task() { -} // ~Task - -/** - * @brief Suspend the task for the specified milliseconds. - * - * @param [in] ms The delay time in milliseconds. - * @return N/A. - */ - -/* static */ void Task::delay(int ms) { - ::vTaskDelay(ms / portTICK_PERIOD_MS); -} // delay - -/** - * Static class member that actually runs the target task. - * - * The code here will run on the task thread. - * @param [in] pTaskInstance The task to run. - */ -void Task::runTask(void* pTaskInstance) { - Task* pTask = (Task*) pTaskInstance; - ESP_LOGD(LOG_TAG, ">> runTask: taskName=%s", pTask->m_taskName.c_str()); - pTask->run(pTask->m_taskData); - //ESP_LOGD(LOG_TAG, "<< runTask: taskName=%s", pTask->m_taskName.c_str()); - //pTask->stop(); -} // runTask - -/** - * @brief Start an instance of the task. - * - * @param [in] taskData Data to be passed into the task. - * @return N/A. - */ -void Task::start(void* taskData) { - if (m_handle != nullptr) { - ESP_LOGW(LOG_TAG, "Task::start - There might be a task already running!"); - } - m_taskData = taskData; - ::xTaskCreatePinnedToCore(&runTask, m_taskName.c_str(), m_stackSize, this, m_priority, &m_handle, m_coreId); -} // start - - -/** - * @brief Stop the task. - * - * @return N/A. - */ -void Task::stop() { - if (m_handle == nullptr) return; - xTaskHandle temp = m_handle; - m_handle = nullptr; - ::vTaskDelete(temp); -} // stop - -/** - * @brief Set the stack size of the task. - * - * @param [in] stackSize The size of the stack for the task. - * @return N/A. - */ -void Task::setStackSize(uint16_t stackSize) { - m_stackSize = stackSize; -} // setStackSize - -/** - * @brief Set the priority of the task. - * - * @param [in] priority The priority for the task. - * @return N/A. - */ -void Task::setPriority(uint8_t priority) { - m_priority = priority; -} // setPriority - -/** - * @brief Set the name of the task. - * - * @param [in] name The name for the task. - * @return N/A. - */ -void Task::setName(std::string name) { - m_taskName = name; -} // setName - -/** - * @brief Set the core number the task has to be executed on. - * If the core number is not set, tskNO_AFFINITY will be used - * - * @param [in] coreId The id of the core. - * @return N/A. - */ -void Task::setCore(BaseType_t coreId) { - m_coreId = coreId; -} diff --git a/Task.h b/Task.h deleted file mode 100644 index 5eb4966..0000000 --- a/Task.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Task.h - * - * Created on: Mar 4, 2017 - * Author: kolban - */ - -#ifndef COMPONENTS_CPP_UTILS_TASK_H_ -#define COMPONENTS_CPP_UTILS_TASK_H_ -#include -#include -#include -/** - * @brief Encapsulate a runnable task. - * - * This class is designed to be subclassed with the method: - * - * @code{.cpp} - * void run(void *data) { ... } - * @endcode - * - * For example: - * - * @code{.cpp} - * class CurlTestTask : public Task { - * void run(void *data) { - * // Do something - * } - * }; - * @endcode - * - * implemented. - */ -class Task { -public: - Task(std::string taskName = "Task", uint16_t stackSize = 10000, uint8_t priority = 5); - virtual ~Task(); - void setStackSize(uint16_t stackSize); - void setPriority(uint8_t priority); - void setName(std::string name); - void setCore(BaseType_t coreId); - void start(void* taskData = nullptr); - void stop(); - /** - * @brief Body of the task to execute. - * - * This function must be implemented in the subclass that represents the actual task to run. - * When a task is started by calling start(), this is the code that is executed in the - * newly created task. - * - * @param [in] data The data passed in to the newly started task. - */ - virtual void run(void* data) = 0; // Make run pure virtual - static void delay(int ms); - -private: - xTaskHandle m_handle; - void* m_taskData; - static void runTask(void* data); - std::string m_taskName; - uint16_t m_stackSize; - uint8_t m_priority; - BaseType_t m_coreId; - -}; - -#endif /* COMPONENTS_CPP_UTILS_TASK_H_ */ diff --git a/aquacontrol32.ino b/aquacontrol32.ino index 78c0df9..45e23a7 100644 --- a/aquacontrol32.ino +++ b/aquacontrol32.ino @@ -14,13 +14,11 @@ #include /* Reports as 1.0.3 https://github.com/me-no-dev/AsyncTCP */ #include /* Reports as 1.2.2 https://github.com/me-no-dev/ESPAsyncWebServer */ #include /* https://github.com/CelliesProjects/MoonPhase */ - -#include "sensorState.h" +#include /* https://github.com/CelliesProjects/sensorState */ #include "ledState.h" #include "deviceSetup.h" #include "devicePinSetup.h" -#include "mapFloat.h" #if GIT_TAG #include "gitTagVersion.h" @@ -144,7 +142,6 @@ const uint8_t tftTaskPriority = 6; const uint8_t ntpTaskPriority = 5; const uint8_t oledTaskPriority = 4; const uint8_t wifiTaskPriority = 3; -const uint8_t loggerTaskPriority = 2; const uint8_t webserverTaskPriority = 1; const uint8_t moonSimtaskPriority = 0; @@ -158,7 +155,6 @@ MoonPhase::moonData moonData; TaskHandle_t xDimmerTaskHandle = NULL; TaskHandle_t xTftTaskHandle = NULL; TaskHandle_t xOledTaskHandle = NULL; -TaskHandle_t xLoggerTaskHandle = NULL; //Boot time is saved timeval systemStart; @@ -178,21 +174,63 @@ uint8_t oledOrientation = OLED_ORIENTATION_NORMAL; /***************************************************************************************** end of global variables *****************************************************************************************/ + +/* forward declarations */ void tftTask( void * pvParameters ); void oledTask( void * pvParameters ); void wifiTask( void * pvParameters ); -void loggerTask( void * pvParameters ); -BaseType_t startLogger() +/* global functions */ +float mapFloat( const float &x, const float &in_min, const float &in_max, const float &out_min, const float &out_max) { + return ( x - in_min ) * ( out_max - out_min ) / ( in_max - in_min ) + out_min; +} + +bool logLineToFile( fs::FS &fs, const char * path, const char * message ) { + File file = fs.open( path, FILE_APPEND ); + if ( !file ) return false; + + if ( !file.println( message ) ) { + file.close(); + return false; + } + file.close(); + return true; +} + +const char * resetString( const uint8_t core ) { + const char * resetStr[] = + { + "", + "POWERON_RESET", + "", + "SW_RESET", + "OWDT_RESET", + "DEEPSLEEP_RESET", + "SDIO_RESET", + "TG0WDT_SYS_RESET", + "TG1WDT_SYS_RESET", + "RTCWDT_SYS_RESET", + "INTRUSION_RESET", + "TGWDT_CPU_RESET", + "SW_CPU_RESET", + "RTCWDT_CPU_RESET", + "EXT_CPU_RESET", + "RTCWDT_BROWN_OUT_RESET", + "RTCWDT_RTC_RESET" + }; + return resetStr[rtc_get_reset_reason( core )]; +} + +void threeDigitPercentage( char *buffer, const uint8_t &bufferSize, const float &percentage, const bool &addPercentSign ) { - return xTaskCreatePinnedToCore( - loggerTask, /* Function to implement the task */ - "loggerTask", /* Name of the task */ - 3000, /* Stack size in words */ - NULL, /* Task input parameter */ - loggerTaskPriority, /* Priority of the task */ - &xLoggerTaskHandle, /* Task handle. */ - 1); + if ( percentage < 0.005 ) + snprintf( buffer, bufferSize, addPercentSign ? " 0%% " : " 0 " ); + else if ( percentage > 99.9 ) + snprintf( buffer, bufferSize, addPercentSign ? " 100%% " : " 100 " ); + else if ( percentage < 10 ) + snprintf( buffer, bufferSize , addPercentSign ? " %1.2f%% " : " %1.2f ", percentage ); + else + snprintf( buffer, bufferSize , addPercentSign ? " %2.1f%% " : " %2.1f ", percentage ); } void setup() @@ -220,24 +258,25 @@ void setup() ESP_LOGI( TAG, "aquacontrol32 %s", sketchVersion ); ESP_LOGI( TAG, "ESP32 SDK: %s", ESP.getSdkVersion() ); - sensor.startSensors(); - preferences.begin( "aquacontrol32", false ); - SPI.begin( SPI_SCK_PIN, SPI_MISO_PIN, SPI_MOSI_PIN ); + //check if a token in NVS is set... + if ( !preferences.getString("firstrun", "true" ).equals( "false" ) ) { + ESP_LOGI( TAG, "Formatting FFat..." ); + char label[5] = "ffat"; + FFat.format( true, label ); + preferences.putString( "firstrun", "false" ); //set token + } - tft.begin( TFT_SPI_CLOCK ); + if ( FFat.begin() ) { + ESP_LOGI( TAG, "FFat mounted." ); + } else { + ESP_LOGI( TAG, "Could not mount FFat." ); + } - ESP_LOGI( TAG, "Starting FFat. (format on fail)" ); + SPI.begin( SPI_SCK_PIN, SPI_MISO_PIN, SPI_MOSI_PIN ); - if ( !FFat.begin( true ) ) - { - ESP_LOGE( TAG, "FATAL ERROR! Could not mount FFat. Did you select the right partition scheme? (something with ffat)" ); - } - else - { - ESP_LOGI( TAG, "FFat started. Total space: %lu kB. Free space: %lu kB.", FFat.totalBytes() / 1024, FFat.freeBytes() / 1024 ); - } + tft.begin( TFT_SPI_CLOCK ); if ( TFT_HAS_NO_MISO || tft.readcommand8( ILI9341_RDSELFDIAG ) == 0xE0 ) { diff --git a/compile.sh b/compile.sh index de0bfda..6405b2f 100755 --- a/compile.sh +++ b/compile.sh @@ -12,5 +12,5 @@ else fi echo "const char * sketchVersion = \"$currentVersion\";" > gitTagVersion.h echo -e Compiling aquacontrol32 version: '\e[36m'$currentVersion'\e[0m' -~/arduino-1.8.9/arduino --board espressif:esp32:mhetesp32minikit --pref custom_DebugLevel=esp32_none --port /dev/ttyUSB0 --pref upload.speed=921600 --preserve-temp-files --pref build.path=temp --pref build.partition=default_ffat --pref build.flash_freq=80m -v --verify aquacontrol32.ino | grep -e 'Using core' -e 'Using board' -e ' uses ' -e 'Using library' -e 'Compiling' -e 'Global' +~/arduino-1.8.9/arduino --board espressif:esp32:mhetesp32minikit --pref custom_DebugLevel=esp32_none --port /dev/ttyUSB0 --pref upload.speed=921600 --preserve-temp-files --pref build.path=temp --pref build.partitions=default_ffat --pref build.flash_freq=80m -v --verify aquacontrol32.ino | grep -e 'Using core' -e 'Using board' -e ' uses ' -e 'Using library' -e 'Compiling' -e 'Global' rm gitTagVersion.h diff --git a/flash.sh b/flash.sh index 8b9f709..c8479ad 100755 --- a/flash.sh +++ b/flash.sh @@ -12,5 +12,5 @@ else fi echo "const char * sketchVersion = \"$currentVersion\";" > gitTagVersion.h echo -e Compiling and flashing aquacontrol32 version: '\e[36m'$currentVersion'\e[0m' -~/arduino-1.8.9/arduino --board espressif:esp32:mhetesp32minikit --pref custom_DebugLevel=esp32_none --port /dev/ttyUSB0 --pref upload.speed=921600 --preserve-temp-files --pref build.path=temp --pref build.partition=default_ffat --pref build.flash_freq=80m -v --upload aquacontrol32.ino | grep -e 'Using core' -e 'Using board' -e ' uses ' -e 'Using library' -e 'Compiling' -e 'Global' +~/arduino-1.8.9/arduino --board espressif:esp32:mhetesp32minikit --pref custom_DebugLevel=esp32_none --port /dev/ttyUSB0 --pref upload.speed=921600 --preserve-temp-files --pref build.path=temp --pref build.partitions=default_ffat --pref build.flash_freq=80m -v --upload aquacontrol32.ino | grep -e 'Using core' -e 'Using board' -e ' uses ' -e 'Using library' -e 'Compiling' -e 'Global' rm gitTagVersion.h diff --git a/loggertask.ino b/loggertask.ino deleted file mode 100644 index 4af2fb1..0000000 --- a/loggertask.ino +++ /dev/null @@ -1,159 +0,0 @@ -void IRAM_ATTR loggerTask ( void * pvParameters ) -{ - const TickType_t loggerTaskdelayTime = ( 1000 * 120 ) / portTICK_PERIOD_MS; - - while (1) - { - const char * appendError = "Failed to write to log file."; - char content[60]; - static bool systemHasBooted = true; - time_t now; - struct tm timeinfo; - char fileName[17]; - - time( &now ); - localtime_r( &now, &timeinfo ); - strftime( fileName , sizeof( fileName ), "/%F.log", &timeinfo ); - - ESP_LOGI( TAG, "Logger task writing to %s", fileName ); - - deleteOldLogfiles( FFat, "/", 0 ); - - if ( systemHasBooted ) - { - snprintf( content, sizeof( content ), "#%i Aquacontrol32 start", now ); - if ( !writelnFile( FFat, fileName, content ) ) - { - ESP_LOGE( TAG, "%s", appendError ); - } - systemHasBooted = false; - /* add reset reasons for both cores to log file */ - snprintf( content, sizeof( content ), "#Reset reasons: CPU0:%s CPU1:%s ", resetString( rtc_get_reset_reason(0) ), resetString( rtc_get_reset_reason(1) ) ); - if ( !writelnFile( FFat, fileName, content ) ) - { - ESP_LOGE( TAG, "%s", appendError ); - } - } - - uint8_t charCount = 0; - if ( sensor.count() ) - { - charCount += snprintf( content, sizeof( content ), "%i,", now ); - charCount += snprintf( content + charCount, sizeof( content ) - charCount, "%3.2f", sensor.temp( 0 ) ); - - for ( uint8_t sensorNumber = 1; sensorNumber < sensor.count(); sensorNumber++ ) - { - charCount += snprintf( content + charCount, sizeof( content ) - charCount, ",%3.2f", sensor.temp( sensorNumber ) ); - } - if ( !writelnFile( FFat, fileName, content ) ) - { - ESP_LOGE( TAG, "%s", appendError ); - } - } - else - { - vTaskDelete( NULL ); - } - vTaskDelay( loggerTaskdelayTime ); - } -} - -void deleteOldLogfiles( fs::FS &fs, const char * dirname, uint8_t levels ) -{ - File root = fs.open( dirname ); - - if ( !root ) - { - ESP_LOGI( TAG, "Failed to open %s", dirname ); - return; - } - - if ( !root.isDirectory() ) - { - ESP_LOGI( TAG, "Not a directory" ); - return; - } - - std::list logFiles; - - File file = root.openNextFile(); - - while ( file ) - { - if ( file.isDirectory() ) - { - if ( levels ) - { - deleteOldLogfiles( fs, file.name(), levels - 1 ); - } - } - else - { - if ( strstr( file.name(), ".log" ) ) - { - logFiles.push_back( file.name() ); - } - } - file = root.openNextFile(); - } - - if ( logFiles.size() > SAVED_LOGFILES ) - { - logFiles.sort(); - } - - while ( logFiles.size() > SAVED_LOGFILES ) - { - std::list::iterator thisFile; - - thisFile = logFiles.begin(); - - String filename = *thisFile; - - ESP_LOGI( TAG, "Deleting oldest (by numeric compare) log file %s", filename.c_str() ); - - fs.remove( filename.c_str() ); - logFiles.erase( thisFile ); - } -} - -static inline __attribute__((always_inline)) bool writelnFile( fs::FS &fs, const char * path, const char * message ) -{ - File file = fs.open( path, FILE_APPEND ); - if ( !file ) - { - return false; - } - if ( !file.println( message ) ) - { - file.close(); - return false; - } - file.close(); - return true; -} - -const char * resetString( const RESET_REASON reason ) -{ - const char * resetStr[] = - { - "", - "POWERON_RESET", - "", - "SW_RESET", - "OWDT_RESET", - "DEEPSLEEP_RESET", - "SDIO_RESET", - "TG0WDT_SYS_RESET", - "TG1WDT_SYS_RESET", - "RTCWDT_SYS_RESET", - "INTRUSION_RESET", - "TGWDT_CPU_RESET", - "SW_CPU_RESET", - "RTCWDT_CPU_RESET", - "EXT_CPU_RESET", - "RTCWDT_BROWN_OUT_RESET", - "RTCWDT_RTC_RESET" - }; - return resetStr[reason]; -} diff --git a/mapFloat.h b/mapFloat.h deleted file mode 100644 index cea9096..0000000 --- a/mapFloat.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef mapFloat_h -#define mapFloat_h - -static inline __attribute__((always_inline)) float mapFloat( const float &x, const float &in_min, const float &in_max, const float &out_min, const float &out_max) -{ - return ( x - in_min ) * ( out_max - out_min ) / ( in_max - in_min ) + out_min; -} - -#endif - diff --git a/ntptask.ino b/ntptask.ino index 6ff132c..7fd2bb9 100644 --- a/ntptask.ino +++ b/ntptask.ino @@ -5,32 +5,34 @@ void ntpTask( void * pvParameters ) static char NTPpoolAdress[20]; if ( COUNTRY_CODE_ISO_3166 ) - { snprintf( NTPpoolAdress, sizeof( NTPpoolAdress ), "%s.%s", COUNTRY_CODE_ISO_3166, NTPpool ); - } else - { snprintf( NTPpoolAdress, sizeof( NTPpoolAdress ), "0.%s", NTPpool ); - } - - ESP_LOGI( TAG, "NTP syncing with %s.", NTPpoolAdress ); configTzTime( preferences.getString( "timezone", defaultTimezone ).c_str(), NTPpoolAdress ); - struct tm timeinfo = {}; + struct tm timeinfo = {0}; - while ( !timeinfo.tm_year ) - { - vTaskDelay( 50 / portTICK_PERIOD_MS ); - getLocalTime( &timeinfo ); - } + while ( !getLocalTime( &timeinfo ) ) + vTaskDelay( 10 / portTICK_PERIOD_MS ); gettimeofday( &systemStart, NULL ); - ESP_LOGI( TAG, "NTP sync @ %s", asctime( localtime( &systemStart.tv_sec ) ) ); + /* save reset reason */ + if ( preferences.getString("bootlog").equalsIgnoreCase("on") ) { + char content[100]; + char timestr[20]; + strftime( timestr , sizeof( timestr ), "%x %X", &timeinfo ); + snprintf( content, sizeof( content ), "%s %s %s ", timestr, resetString( 0 ), resetString( 1 ) ); + logLineToFile( FFat, "/reset_reasons.txt", content ); + } + + ESP_LOGI( TAG, "NTP sync from '%s'", NTPpoolAdress ); /* start time dependent tasks */ + sensor.startSensors(); + BaseType_t xReturned; xReturned = xTaskCreatePinnedToCore( @@ -42,16 +44,7 @@ void ntpTask( void * pvParameters ) &xDimmerTaskHandle, /* Task handle. */ 1); /* Core where the task should run */ - ESP_LOGI( TAG, "DimmerTask %s.", ( xReturned == pdPASS ) ? "started" : "failed" ); - - if ( sensor.logging() ) - { - xReturned = startLogger(); - ESP_LOGI( TAG, "LoggerTask %s.", ( xReturned == pdPASS ) ? "started" : "failed" ); - } - - if ( MOON_SIMULATOR ) - { + if ( MOON_SIMULATOR ) { xReturned = xTaskCreatePinnedToCore( moonSimtask, /* Function to implement the task */ "moonSimtask", /* Name of the task */ @@ -60,8 +53,6 @@ void ntpTask( void * pvParameters ) moonSimtaskPriority, /* Priority of the task */ NULL, /* Task handle. */ 1); /* Core where the task should run */ - - ESP_LOGI( TAG, "moonSimtask %s.", ( xReturned == pdPASS ) ? "started" : "failed" ); } vTaskDelete( NULL ); diff --git a/sensorState.cpp b/sensorState.cpp deleted file mode 100644 index 0aad462..0000000 --- a/sensorState.cpp +++ /dev/null @@ -1,234 +0,0 @@ -#include -#include -#include - -#include "sensorState.h" - -static const char * ERROR_LOG_NAME = "/sensor_error.txt"; -static const char * UNKNOWN_SENSOR = "unknown sensor"; - -OneWire ds( SENSOR_PIN ); -Preferences sensorPreferences; - -sensorState::sensorState() {} -sensorState::~sensorState() {} - -bool sensorState::startSensors() { - if ( nullptr != _pSensorState ) { - ESP_LOGE( TAG, "Sensors already running. Exiting." ); - return false; - } - _pSensorState = new sensorState(); - if ( nullptr == _pSensorState ) { - ESP_LOGE( TAG, "Sensors not created. (low mem?) Exiting." ); - return false; - } - sensorPreferences.begin( "sensors", false ); - _pSensorState->setStackSize(3500); - _pSensorState->setCore(1); - _pSensorState->setPriority(0); - _pSensorState->start(); - return true; -} - -void sensorState::rescan() { - _pSensorState->_rescan = true; -} - -uint8_t sensorState::count() { - return ( nullptr == _pSensorState ) ? 0 : _pSensorState->_count; -}; - -float sensorState::temp( const uint8_t num ) { - return ( nullptr == _pSensorState ) ? NAN : _pSensorState->_state[num].tempCelsius; -}; - -bool sensorState::error( const uint8_t num ) { - return ( nullptr == _pSensorState ) ? true : _pSensorState->_state[num].error; -}; - -const char * sensorState::getName( const uint8_t num, sensorName_t &name ) { - if ( nullptr == _pSensorState ) return name; - sensorId_t id; - getId( num, id ); - return getName( id, name ); -} - -const char * sensorState::getName( const sensorName_t &id, sensorName_t &name ){ - if ( nullptr == _pSensorState ) return name; - String result = sensorPreferences.getString( id, UNKNOWN_SENSOR ); - if ( result ) strncpy( name, result.c_str(), sizeof( sensorName_t ) ); - return name; -} - -const char * sensorState::getId( const uint8_t num, sensorId_t &id ) { - if ( nullptr == _pSensorState ) return id; - snprintf( id, sizeof( sensorId_t ), "%02x%02x%02x%02x%02x%02x%02x", - _pSensorState->_state[num].addr[1], _pSensorState->_state[num].addr[2], _pSensorState->_state[num].addr[3], _pSensorState->_state[num].addr[4], - _pSensorState->_state[num].addr[5], _pSensorState->_state[num].addr[6], _pSensorState->_state[num].addr[7] ); - return id; -} - -bool sensorState::setName( const sensorId_t &id, const char * name ) { - if ( 0 == strlen( name ) ) return sensorPreferences.remove( id ); - if ( strlen( name ) > sizeof( sensorName_t ) ) return false; - return sensorPreferences.putString( id, name ); -} - -bool sensorState::logging() { - return ( nullptr == _pSensorState ) ? false : sensorPreferences.getBool( "logging", false ); -} - -bool sensorState::setLogging( const bool state ) { - return ( nullptr == _pSensorState ) ? false : sensorPreferences.putBool( "logging", state ); -}; - -bool sensorState::errorLogging() { - return ( nullptr == _pSensorState ) ? false : _pSensorState->_errorlogging; -}; - -void sensorState::setErrorLogging( const bool state ) { - if ( nullptr != _pSensorState ) _pSensorState->_errorlogging = state; -}; - -void sensorState::run( void * data ) { - uint8_t loopCounter = _scanSensors(); - ESP_LOGI( TAG, "Sensors scanned: %i found.", loopCounter ); - while (1) - { - ESP_LOGD( TAG, "Stack watermark: %i", uxTaskGetStackHighWaterMark( NULL ) ); - if ( _rescan ) loopCounter = _scanSensors(); - - ds.reset(); - ds.write( 0xCC, 0); /* Skip ROM - All sensors */ - ds.write( 0x44, 0); /* start conversion, with parasite power off at the end */ - - vTaskDelay( 750 ); //wait for conversion ready - - uint8_t num = 0; - while ( num < loopCounter ) - { - byte data[12]; - - _tempState[num].error = true; /* we start with an error, which will be cleared if the CRC checks out. */ - ds.reset(); - ds.select( _tempState[num].addr ); - ds.write( 0xBE ); /* Read Scratchpad */ - for ( byte i = 0; i < 9; i++ ) data[i] = ds.read(); // we need 9 bytes - - ESP_LOGD( TAG, "Sensor %i '%s' data=%02x%02x%02x%02x%02x%02x%02x%02x%02x", num, _tempState[num].name, - data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7], data[8] ); - - byte type_s; - // the first ROM byte indicates which chip - switch ( _tempState[num].addr[0] ) - { - case 0x10: - ESP_LOGD( TAG, "Dallas sensor type : DS18S20" ); /* or old DS1820 */ - type_s = 1; - break; - case 0x28: - ESP_LOGD( TAG, "Dallas sensor type : DS18B20"); - type_s = 0; - break; - case 0x22: - ESP_LOGD( TAG, "Dallas sensor type : DS1822"); - type_s = 0; - break; - default: - ESP_LOGE( TAG, "OneWire device is not a DS18x20 family device."); - } - - if ( OneWire::crc8( data, 8 ) != data[8] ) - { - _tempState[num].error = true; - _tempState[num].tempCelsius = NAN; - if ( _errorlogging && !_logError( num, ERROR_LOG_NAME, "BAD_CRC", data ) ) - ESP_LOGE( TAG, "%s", "Error writing errorlog.(disk full?)" ); - } - else - { - int16_t raw = (data[1] << 8) | data[0]; - if (type_s) - { - raw = raw << 3; // 9 bit resolution default - if (data[7] == 0x10) - { - // "count remain" gives full 12 bit resolution - raw = (raw & 0xFFF0) + 12 - data[6]; - } - } - else - { - byte cfg = (data[4] & 0x60); - // at lower res, the low bits are undefined, so let's zero them - if (cfg == 0x00) raw = raw & ~7; // 9 bit resolution, 93.75 ms - else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms - else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms - //// default is 12 bit resolution, 750 ms conversion time - } - _tempState[num].tempCelsius = raw / 16.0; - - if ( _tempState[num].tempCelsius > -55.0 && _tempState[num].tempCelsius < 85.0 ) - { - _tempState[num].error = false; - } - else - { - _tempState[num].error = true; - _tempState[num].tempCelsius = NAN; - if ( _errorlogging && !_logError( num, ERROR_LOG_NAME, "BAD_TMP", data ) ) - ESP_LOGE( TAG, "%s", "Error writing errorlog.(disk full?)" ); - } - } - ESP_LOGD( TAG, "sensor %i: %.1f %s", num, _tempState[num].tempCelsius, _tempState[num].error ? "invalid" : "valid" ); - num++; - } - memcpy( &_state, &_tempState, sizeof( sensorState_t[ MAX_NUMBER_OF_SENSORS ] ) ); - _count = loopCounter; - } -} - -uint8_t sensorState::_scanSensors() { - uint8_t num = 0; - byte currentAddr[ sizeof( sensorState_t::addr ) ]; - - ds.reset_search(); - ds.target_search(0x28); - vTaskPrioritySet( NULL, 10); - while ( ds.search( currentAddr ) && ( num < MAX_NUMBER_OF_SENSORS ) ) - { - _tempState[num].error = true; - _tempState[num].tempCelsius = NAN; - memcpy( _tempState[num].addr, currentAddr, sizeof( sensorState_t::addr ) ); - num++; - } - vTaskPrioritySet( NULL, 0); - _rescan = false; - return num; -} - -bool sensorState::_logError( const uint8_t num, const char * path, const char * message, const byte data[9] ) -{ - File file = FFat.open( path, FILE_APPEND ); - if ( !file ) return false; - - time_t rawtime; - struct tm * timeinfo; - time ( &rawtime ); - timeinfo = localtime ( &rawtime ); - char timeBuff[20]; - strftime ( timeBuff, sizeof( timeBuff ), "%x %X", timeinfo ); - char buffer[100]; - snprintf( buffer, sizeof( buffer ), "%s - sensor:%i %s %02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X", timeBuff, num, message, - data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7], data[8] ); - ESP_LOGD( TAG, "%s", buffer ); - - if ( !file.println( buffer ) ) - { - file.close(); - return false; - } - file.close(); - return true; -} diff --git a/sensorState.h b/sensorState.h deleted file mode 100644 index 832fe14..0000000 --- a/sensorState.h +++ /dev/null @@ -1,60 +0,0 @@ -#ifndef SENSORSTATE_H -#define SENSORSTATE_H - -#ifndef ESP32 -#warning sensorState will only work on ESP32 MCUs -#endif - -#include "Task.h" - -#define SAVED_LOGFILES 30 -#define SENSOR_PIN 5 -#define MAX_NUMBER_OF_SENSORS 3 - -#define VALID_ID_LENGTH 14 - -typedef char sensorId_t[VALID_ID_LENGTH + 1]; -typedef char sensorName_t[15]; - -class sensorState: public Task { - - public: - - struct sensorState_t /* struct to keep track of Dallas DS18B20 sensors */ - { - byte addr[8] = {}; - float tempCelsius = NAN; - bool error = true; - }; - - sensorState(); - virtual ~sensorState(); - - bool startSensors(); - void rescan(); - uint8_t count(); - float temp( const uint8_t num ); - bool error( const uint8_t num ); - const char * getName( const uint8_t num, sensorName_t &name ); - const char * getName( const sensorName_t &id, sensorName_t &name ); - const char * getId( const uint8_t num, sensorId_t &id ); - bool setName( const sensorId_t &id, const char * name ); - bool logging(); - bool setLogging( const bool state ); - bool errorLogging(); - void setErrorLogging( const bool state ); - - private: - - void run( void * data ); - uint8_t _count = 0; - uint8_t _scanSensors(); - sensorState_t _state[MAX_NUMBER_OF_SENSORS]; - sensorState_t _tempState[MAX_NUMBER_OF_SENSORS]; - sensorState * _pSensorState = nullptr; - bool _errorlogging = false; - bool _logError( const uint8_t num, const char * path, const char * message, const byte data[9] ); - bool _rescan = false; -}; - -#endif //SENSORSTATE_H diff --git a/threeDigitPercentage.ino b/threeDigitPercentage.ino deleted file mode 100644 index 5f22e1e..0000000 --- a/threeDigitPercentage.ino +++ /dev/null @@ -1,19 +0,0 @@ -static inline __attribute__((always_inline)) void threeDigitPercentage( char *buffer, const uint8_t &bufferSize, const float &percentage, const bool &addPercentSign ) -{ - if ( percentage < 0.005 ) - { - snprintf( buffer, bufferSize, addPercentSign ? " 0%% " : " 0 " ); - } - else if ( percentage > 99.9 ) - { - snprintf( buffer, bufferSize, addPercentSign ? " 100%% " : " 100 " ); - } - else if ( percentage < 10 ) - { - snprintf( buffer, bufferSize , addPercentSign ? " %1.2f%% " : " %1.2f ", percentage ); - } - else - { - snprintf( buffer, bufferSize , addPercentSign ? " %2.1f%% " : " %2.1f ", percentage ); - } -} diff --git a/webif/setup.htm b/webif/setup.htm index e73b00b..dcc4619 100644 --- a/webif/setup.htm +++ b/webif/setup.htm @@ -135,11 +135,12 @@

 

-

DEVICE SETUP

+

SYSTEM

TIME ZONE(EXAMPLES)

HOST NAME

CHANGE ADMIN PASSWORD

+

LOG RESET REASON

@@ -150,7 +151,7 @@

LIGHTS

SENSORS

-

SEARCH FOR SENSORS

+

SCAN FOR SENSORS

TEMPERATURE LOGGING

SENSOR ERROR LOGGING

 

@@ -203,10 +204,18 @@

STATUS

.always( function( data ){ if ( getAllValues ) { - getOledOrientation(); + getBootlog(); } }); -}); +}) +function getBootlog(){ + $.get( "/api/getdevice?bootlog=" ) + .done(function(data){$('#bootlog').val(data.toUpperCase());}) + .fail(function(data){}) + .always(function(data){ + if(getAllValues){getOledOrientation();} + }); +} function getOledOrientation(){ $.get( "/api/getdevice?oledorientation=") .done( function( data ){ @@ -431,6 +440,15 @@

STATUS

$('input[type="button"]').on( 'click', function() { $('#deviceStatus').html(''); }); +$('#bootlog').on('click', function() { + var value; + if("OFF"==$(this).val())value="ON"; + else if("ON"==$(this).val())value="OFF"; + $.post("/api/setdevice",{bootlog:value}) + .done(function(data){$('#bootlog').val(value)}) + .fail(function(data){$('#deviceStatus').html(data.statusText)}) + .always(function(data){}); +}); $('#passwordInput').on('change', function( event ) { if (!confirm("You are about to change the admin password.\nAre you sure?") ) { return; @@ -626,8 +644,6 @@

STATUS

console.log(data); }); }); - - $('.collapsable').on('click', function() { $('.collapsable').css('height','45px').css('cursor','pointer'); $(this).css('height','auto').css('cursor',''); diff --git a/webif/setup_htm.h b/webif/setup_htm.h index c2c8ac7..28ddff5 100644 --- a/webif/setup_htm.h +++ b/webif/setup_htm.h @@ -210,429 +210,533 @@ const uint8_t setup_htm[] = { 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x73, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x65, 0x64, 0x42, 0x6f, 0x78, 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x70, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x3e, 0x0a, 0x20, - 0x20, 0x3c, 0x68, 0x33, 0x3e, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x20, - 0x53, 0x45, 0x54, 0x55, 0x50, 0x3c, 0x2f, 0x68, 0x33, 0x3e, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, - 0x73, 0x3d, 0x22, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x42, - 0x6f, 0x78, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x70, 0x20, - 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x74, 0x65, 0x6d, 0x22, - 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x3d, 0x22, 0x69, 0x74, 0x65, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, - 0x54, 0x49, 0x4d, 0x45, 0x20, 0x5a, 0x4f, 0x4e, 0x45, 0x3c, 0x61, 0x20, - 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x77, 0x65, 0x62, 0x4c, 0x69, - 0x6e, 0x6b, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, - 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x72, 0x65, 0x6d, - 0x6f, 0x74, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, - 0x67, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x63, 0x61, 0x2f, - 0x74, 0x69, 0x6d, 0x65, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2d, 0x61, 0x62, - 0x62, 0x72, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x70, 0x68, 0x70, 0x22, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x3d, - 0x22, 0x5f, 0x62, 0x6c, 0x61, 0x6e, 0x6b, 0x22, 0x3e, 0x28, 0x45, 0x58, - 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x53, 0x29, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, - 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, - 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x22, - 0x20, 0x69, 0x64, 0x3d, 0x22, 0x74, 0x69, 0x6d, 0x65, 0x5a, 0x6f, 0x6e, - 0x65, 0x54, 0x65, 0x78, 0x74, 0x42, 0x6f, 0x78, 0x22, 0x3e, 0x3c, 0x2f, - 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x3c, 0x70, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, - 0x69, 0x74, 0x65, 0x6d, 0x22, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, - 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x74, 0x65, 0x6d, 0x4e, - 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x48, 0x4f, 0x53, 0x54, 0x20, 0x4e, 0x41, - 0x4d, 0x45, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x73, 0x70, - 0x61, 0x6e, 0x3e, 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x74, 0x79, - 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x22, 0x20, 0x69, 0x64, - 0x3d, 0x22, 0x68, 0x6f, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x6e, - 0x70, 0x75, 0x74, 0x22, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, - 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x2f, 0x70, - 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x70, 0x20, 0x63, 0x6c, 0x61, - 0x73, 0x73, 0x3d, 0x22, 0x69, 0x74, 0x65, 0x6d, 0x22, 0x3e, 0x3c, 0x73, - 0x70, 0x61, 0x6e, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, - 0x74, 0x65, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x43, 0x48, 0x41, - 0x4e, 0x47, 0x45, 0x20, 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x20, 0x50, 0x41, - 0x53, 0x53, 0x57, 0x4f, 0x52, 0x44, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, - 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x69, 0x6e, 0x70, 0x75, - 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x70, 0x61, 0x73, 0x73, - 0x77, 0x6f, 0x72, 0x64, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x70, 0x61, - 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x22, - 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x22, 0x3e, 0x3c, 0x2f, - 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x3c, 0x2f, 0x64, - 0x69, 0x76, 0x3e, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, - 0x73, 0x73, 0x3d, 0x22, 0x73, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x65, 0x64, - 0x42, 0x6f, 0x78, 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x70, 0x73, 0x61, - 0x62, 0x6c, 0x65, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x68, 0x33, 0x3e, - 0x4c, 0x49, 0x47, 0x48, 0x54, 0x53, 0x3c, 0x2f, 0x68, 0x33, 0x3e, 0x0a, - 0x20, 0x20, 0x3c, 0x70, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, - 0x69, 0x74, 0x65, 0x6d, 0x22, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, - 0x69, 0x64, 0x3d, 0x22, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, - 0x3c, 0x2f, 0x70, 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x70, 0x20, 0x63, 0x6c, - 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x74, 0x65, 0x6d, 0x22, 0x3e, 0x3c, - 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6c, 0x69, - 0x67, 0x68, 0x74, 0x73, 0x4f, 0x6e, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, - 0x3d, 0x22, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x22, 0x20, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x4c, 0x49, 0x47, 0x48, 0x54, 0x53, 0x20, - 0x4f, 0x4e, 0x22, 0x20, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, - 0x2f, 0x3e, 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x69, 0x64, 0x3d, - 0x22, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x73, 0x4f, 0x66, 0x66, 0x22, 0x20, + 0x20, 0x3c, 0x68, 0x33, 0x3e, 0x53, 0x59, 0x53, 0x54, 0x45, 0x4d, 0x3c, + 0x2f, 0x68, 0x33, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, 0x69, + 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x73, 0x65, 0x74, + 0x74, 0x69, 0x6e, 0x67, 0x73, 0x42, 0x6f, 0x78, 0x22, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x70, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, + 0x22, 0x69, 0x74, 0x65, 0x6d, 0x22, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, + 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x74, 0x65, 0x6d, + 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x54, 0x49, 0x4d, 0x45, 0x20, 0x5a, + 0x4f, 0x4e, 0x45, 0x3c, 0x61, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, + 0x22, 0x77, 0x65, 0x62, 0x4c, 0x69, 0x6e, 0x6b, 0x22, 0x20, 0x68, 0x72, + 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, + 0x77, 0x77, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x6d, 0x6f, 0x6e, + 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x73, 0x2e, 0x63, 0x61, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x2d, 0x7a, + 0x6f, 0x6e, 0x65, 0x2d, 0x61, 0x62, 0x62, 0x72, 0x65, 0x76, 0x69, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x68, 0x70, 0x22, 0x20, 0x74, + 0x61, 0x72, 0x67, 0x65, 0x74, 0x3d, 0x22, 0x5f, 0x62, 0x6c, 0x61, 0x6e, + 0x6b, 0x22, 0x3e, 0x28, 0x45, 0x58, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x53, + 0x29, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, + 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, + 0x22, 0x74, 0x65, 0x78, 0x74, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x74, + 0x69, 0x6d, 0x65, 0x5a, 0x6f, 0x6e, 0x65, 0x54, 0x65, 0x78, 0x74, 0x42, + 0x6f, 0x78, 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, + 0x2f, 0x70, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x70, 0x20, 0x63, + 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x74, 0x65, 0x6d, 0x22, 0x3e, + 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, + 0x22, 0x69, 0x74, 0x65, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x48, + 0x4f, 0x53, 0x54, 0x20, 0x4e, 0x41, 0x4d, 0x45, 0x3c, 0x2f, 0x73, 0x70, + 0x61, 0x6e, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x69, 0x6e, + 0x70, 0x75, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, + 0x78, 0x74, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x68, 0x6f, 0x73, 0x74, + 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x22, 0x20, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x70, + 0x61, 0x6e, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x70, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x74, + 0x65, 0x6d, 0x22, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, 0x6c, + 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x74, 0x65, 0x6d, 0x4e, 0x61, 0x6d, + 0x65, 0x22, 0x3e, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x20, 0x41, 0x44, + 0x4d, 0x49, 0x4e, 0x20, 0x50, 0x41, 0x53, 0x53, 0x57, 0x4f, 0x52, 0x44, + 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, + 0x3e, 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, + 0x3d, 0x22, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x20, + 0x69, 0x64, 0x3d, 0x22, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, + 0x49, 0x6e, 0x70, 0x75, 0x74, 0x22, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3d, 0x22, 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, + 0x2f, 0x70, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x70, 0x20, 0x63, + 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x74, 0x65, 0x6d, 0x22, 0x3e, + 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, + 0x22, 0x69, 0x74, 0x65, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x4c, + 0x4f, 0x47, 0x20, 0x52, 0x45, 0x53, 0x45, 0x54, 0x20, 0x52, 0x45, 0x41, + 0x53, 0x4f, 0x4e, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x69, + 0x6e, 0x70, 0x75, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x62, + 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x62, + 0x6f, 0x6f, 0x74, 0x6c, 0x6f, 0x67, 0x22, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, + 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, + 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x73, 0x68, 0x61, 0x64, 0x6f, + 0x77, 0x65, 0x64, 0x42, 0x6f, 0x78, 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x61, + 0x70, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x3c, + 0x68, 0x33, 0x3e, 0x4c, 0x49, 0x47, 0x48, 0x54, 0x53, 0x3c, 0x2f, 0x68, + 0x33, 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x70, 0x20, 0x63, 0x6c, 0x61, 0x73, + 0x73, 0x3d, 0x22, 0x69, 0x74, 0x65, 0x6d, 0x22, 0x3e, 0x3c, 0x73, 0x70, + 0x61, 0x6e, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6c, 0x69, 0x67, 0x68, 0x74, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x70, + 0x61, 0x6e, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x70, + 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x74, 0x65, 0x6d, + 0x22, 0x3e, 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x69, 0x64, 0x3d, + 0x22, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x73, 0x4f, 0x6e, 0x22, 0x20, 0x74, + 0x79, 0x70, 0x65, 0x3d, 0x22, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x22, + 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x4c, 0x49, 0x47, 0x48, + 0x54, 0x53, 0x20, 0x4f, 0x4e, 0x22, 0x20, 0x64, 0x69, 0x73, 0x61, 0x62, + 0x6c, 0x65, 0x64, 0x2f, 0x3e, 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, + 0x69, 0x64, 0x3d, 0x22, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x73, 0x4f, 0x66, + 0x66, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x62, 0x75, 0x74, + 0x74, 0x6f, 0x6e, 0x22, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, + 0x4c, 0x49, 0x47, 0x48, 0x54, 0x53, 0x20, 0x4f, 0x46, 0x46, 0x22, 0x20, + 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x2f, 0x3e, 0x3c, 0x69, + 0x6e, 0x70, 0x75, 0x74, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6c, 0x69, 0x67, + 0x68, 0x74, 0x73, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x22, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x4c, 0x49, 0x47, - 0x48, 0x54, 0x53, 0x20, 0x4f, 0x46, 0x46, 0x22, 0x20, 0x64, 0x69, 0x73, - 0x61, 0x62, 0x6c, 0x65, 0x64, 0x2f, 0x3e, 0x3c, 0x69, 0x6e, 0x70, 0x75, - 0x74, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x73, - 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x22, 0x20, 0x74, 0x79, 0x70, - 0x65, 0x3d, 0x22, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x22, 0x20, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x4c, 0x49, 0x47, 0x48, 0x54, 0x53, - 0x20, 0x41, 0x55, 0x54, 0x4f, 0x22, 0x20, 0x64, 0x69, 0x73, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x2f, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0a, 0x3c, 0x2f, - 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, - 0x61, 0x73, 0x73, 0x3d, 0x22, 0x73, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x65, - 0x64, 0x42, 0x6f, 0x78, 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x70, 0x73, - 0x61, 0x62, 0x6c, 0x65, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x68, 0x33, - 0x3e, 0x53, 0x45, 0x4e, 0x53, 0x4f, 0x52, 0x53, 0x3c, 0x2f, 0x68, 0x33, - 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, - 0x73, 0x73, 0x3d, 0x22, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, - 0x42, 0x6f, 0x78, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x70, + 0x48, 0x54, 0x53, 0x20, 0x41, 0x55, 0x54, 0x4f, 0x22, 0x20, 0x64, 0x69, + 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x2f, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, + 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x3c, 0x64, 0x69, 0x76, + 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x73, 0x68, 0x61, 0x64, + 0x6f, 0x77, 0x65, 0x64, 0x42, 0x6f, 0x78, 0x20, 0x63, 0x6f, 0x6c, 0x6c, + 0x61, 0x70, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x3e, 0x0a, 0x20, 0x20, + 0x3c, 0x68, 0x33, 0x3e, 0x53, 0x45, 0x4e, 0x53, 0x4f, 0x52, 0x53, 0x3c, + 0x2f, 0x68, 0x33, 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x64, 0x69, 0x76, 0x20, + 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x73, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x73, 0x42, 0x6f, 0x78, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x70, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, + 0x74, 0x65, 0x6d, 0x22, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, + 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x74, 0x65, 0x6d, 0x4e, 0x61, + 0x6d, 0x65, 0x22, 0x3e, 0x53, 0x43, 0x41, 0x4e, 0x20, 0x46, 0x4f, 0x52, + 0x20, 0x53, 0x45, 0x4e, 0x53, 0x4f, 0x52, 0x53, 0x3c, 0x2f, 0x73, 0x70, + 0x61, 0x6e, 0x3e, 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x74, 0x79, + 0x70, 0x65, 0x3d, 0x22, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x22, 0x20, + 0x69, 0x64, 0x3d, 0x22, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x53, 0x63, + 0x61, 0x6e, 0x22, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x53, + 0x43, 0x41, 0x4e, 0x22, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x70, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, + 0x69, 0x74, 0x65, 0x6d, 0x20, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, + 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x22, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x74, 0x65, 0x6d, + 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x54, 0x45, 0x4d, 0x50, 0x45, 0x52, + 0x41, 0x54, 0x55, 0x52, 0x45, 0x20, 0x4c, 0x4f, 0x47, 0x47, 0x49, 0x4e, + 0x47, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x69, 0x6e, 0x70, + 0x75, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x62, 0x75, 0x74, + 0x74, 0x6f, 0x6e, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x73, 0x65, 0x6e, + 0x73, 0x6f, 0x72, 0x4c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x22, 0x3e, + 0x3c, 0x2f, 0x70, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x70, 0x20, + 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x74, 0x65, 0x6d, 0x20, + 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x22, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x74, 0x65, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x22, - 0x3e, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x20, 0x46, 0x4f, 0x52, 0x20, - 0x53, 0x45, 0x4e, 0x53, 0x4f, 0x52, 0x53, 0x3c, 0x2f, 0x73, 0x70, 0x61, - 0x6e, 0x3e, 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x74, 0x79, 0x70, - 0x65, 0x3d, 0x22, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x22, 0x20, 0x69, - 0x64, 0x3d, 0x22, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x53, 0x63, 0x61, - 0x6e, 0x22, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x53, 0x43, - 0x41, 0x4e, 0x22, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x3c, 0x70, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, - 0x74, 0x65, 0x6d, 0x20, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x75, - 0x74, 0x74, 0x6f, 0x6e, 0x22, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, + 0x3e, 0x53, 0x45, 0x4e, 0x53, 0x4f, 0x52, 0x20, 0x45, 0x52, 0x52, 0x4f, + 0x52, 0x20, 0x4c, 0x4f, 0x47, 0x47, 0x49, 0x4e, 0x47, 0x3c, 0x2f, 0x73, + 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x74, + 0x79, 0x70, 0x65, 0x3d, 0x22, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x22, + 0x20, 0x69, 0x64, 0x3d, 0x22, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x4c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x22, + 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x70, + 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x74, 0x65, 0x6d, + 0x20, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x22, + 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, + 0x3d, 0x22, 0x69, 0x74, 0x65, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, + 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, + 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x69, 0x6e, 0x70, 0x75, + 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, + 0x22, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x73, 0x65, 0x6e, + 0x73, 0x6f, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, + 0x22, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x22, 0x3e, 0x3c, + 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x70, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, + 0x22, 0x69, 0x74, 0x65, 0x6d, 0x20, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, + 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x74, 0x65, 0x6d, 0x4e, - 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x54, 0x45, 0x4d, 0x50, 0x45, 0x52, 0x41, - 0x54, 0x55, 0x52, 0x45, 0x20, 0x4c, 0x4f, 0x47, 0x47, 0x49, 0x4e, 0x47, - 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x69, 0x6e, 0x70, 0x75, - 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x62, 0x75, 0x74, 0x74, - 0x6f, 0x6e, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x73, 0x65, 0x6e, 0x73, - 0x6f, 0x72, 0x4c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x22, 0x3e, 0x3c, + 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x3c, + 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x3e, + 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, + 0x22, 0x74, 0x65, 0x78, 0x74, 0x22, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, + 0x3d, 0x22, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x4e, 0x61, 0x6d, 0x65, + 0x49, 0x6e, 0x70, 0x75, 0x74, 0x22, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3d, 0x22, 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x70, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x74, 0x65, 0x6d, 0x20, 0x73, - 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x22, - 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x3d, 0x22, 0x69, 0x74, 0x65, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, - 0x53, 0x45, 0x4e, 0x53, 0x4f, 0x52, 0x20, 0x45, 0x52, 0x52, 0x4f, 0x52, - 0x20, 0x4c, 0x4f, 0x47, 0x47, 0x49, 0x4e, 0x47, 0x3c, 0x2f, 0x73, 0x70, - 0x61, 0x6e, 0x3e, 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x74, 0x79, - 0x70, 0x65, 0x3d, 0x22, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x22, 0x20, - 0x69, 0x64, 0x3d, 0x22, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x4c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x22, 0x3e, - 0x3c, 0x2f, 0x70, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x70, 0x20, - 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x74, 0x65, 0x6d, 0x20, - 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3e, - 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, - 0x22, 0x69, 0x74, 0x65, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x26, - 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, - 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, - 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x22, - 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x73, 0x65, 0x6e, 0x73, - 0x6f, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x22, - 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x22, 0x3e, 0x3c, 0x2f, - 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x3c, 0x70, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, - 0x69, 0x74, 0x65, 0x6d, 0x20, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x6e, - 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x74, 0x65, 0x6d, 0x4e, 0x61, - 0x6d, 0x65, 0x22, 0x3e, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x3c, 0x2f, - 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, + 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x3c, + 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, + 0x69, 0x74, 0x65, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x26, 0x6e, + 0x62, 0x73, 0x70, 0x3b, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, + 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, + 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x22, 0x20, + 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x73, 0x65, 0x6e, 0x73, 0x6f, + 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x22, 0x20, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x22, 0x3e, 0x3c, 0x2f, 0x73, + 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x3c, 0x70, 0x20, 0x63, 0x6c, 0x61, 0x73, + 0x73, 0x3d, 0x22, 0x69, 0x74, 0x65, 0x6d, 0x22, 0x3e, 0x3c, 0x73, 0x70, + 0x61, 0x6e, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x74, + 0x65, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x50, 0x57, 0x4d, 0x20, + 0x46, 0x52, 0x45, 0x51, 0x55, 0x45, 0x4e, 0x43, 0x59, 0x3c, 0x2f, 0x73, + 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x69, 0x64, + 0x3d, 0x22, 0x70, 0x77, 0x6d, 0x46, 0x72, 0x65, 0x71, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x22, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, + 0x74, 0x65, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3e, 0x26, 0x6e, + 0x62, 0x73, 0x70, 0x3b, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, - 0x74, 0x65, 0x78, 0x74, 0x22, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, - 0x22, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x49, - 0x6e, 0x70, 0x75, 0x74, 0x22, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, - 0x22, 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x2f, - 0x70, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x70, 0x20, 0x63, 0x6c, - 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x74, 0x65, 0x6d, 0x20, 0x73, 0x65, - 0x6e, 0x73, 0x6f, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x3c, 0x73, - 0x70, 0x61, 0x6e, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, - 0x74, 0x65, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x26, 0x6e, 0x62, - 0x73, 0x70, 0x3b, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x73, - 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x74, - 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x22, 0x20, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, - 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x22, 0x20, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x70, - 0x61, 0x6e, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x72, 0x61, 0x6e, 0x67, 0x65, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x70, + 0x77, 0x6d, 0x46, 0x72, 0x65, 0x71, 0x53, 0x6c, 0x69, 0x64, 0x65, 0x72, + 0x22, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x31, 0x30, 0x30, + 0x22, 0x20, 0x6d, 0x69, 0x6e, 0x3d, 0x22, 0x31, 0x30, 0x30, 0x22, 0x20, + 0x6d, 0x61, 0x78, 0x3d, 0x22, 0x31, 0x30, 0x30, 0x30, 0x30, 0x22, 0x3e, + 0x3c, 0x2f, 0x70, 0x3e, 0x2d, 0x2d, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x3c, 0x70, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x74, 0x65, 0x6d, 0x22, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x74, 0x65, - 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x50, 0x57, 0x4d, 0x20, 0x46, - 0x52, 0x45, 0x51, 0x55, 0x45, 0x4e, 0x43, 0x59, 0x3c, 0x2f, 0x73, 0x70, - 0x61, 0x6e, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x69, 0x64, 0x3d, - 0x22, 0x70, 0x77, 0x6d, 0x46, 0x72, 0x65, 0x71, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x22, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x74, - 0x65, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3e, 0x26, 0x6e, 0x62, - 0x73, 0x70, 0x3b, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x69, - 0x6e, 0x70, 0x75, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x72, - 0x61, 0x6e, 0x67, 0x65, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x70, 0x77, - 0x6d, 0x46, 0x72, 0x65, 0x71, 0x53, 0x6c, 0x69, 0x64, 0x65, 0x72, 0x22, - 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x31, 0x30, 0x30, 0x22, - 0x20, 0x6d, 0x69, 0x6e, 0x3d, 0x22, 0x31, 0x30, 0x30, 0x22, 0x20, 0x6d, - 0x61, 0x78, 0x3d, 0x22, 0x31, 0x30, 0x30, 0x30, 0x30, 0x22, 0x3e, 0x3c, - 0x2f, 0x70, 0x3e, 0x2d, 0x2d, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, - 0x21, 0x2d, 0x2d, 0x3c, 0x70, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, - 0x22, 0x69, 0x74, 0x65, 0x6d, 0x22, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, - 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x74, 0x65, 0x6d, - 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x50, 0x57, 0x4d, 0x20, 0x44, 0x45, - 0x50, 0x54, 0x48, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x73, - 0x70, 0x61, 0x6e, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x70, 0x77, 0x6d, 0x44, - 0x65, 0x70, 0x74, 0x68, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x20, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x74, 0x65, 0x6d, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x22, 0x3e, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x3c, - 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, - 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x72, 0x61, 0x6e, 0x67, 0x65, - 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x70, 0x77, 0x6d, 0x44, 0x65, 0x70, - 0x74, 0x68, 0x53, 0x6c, 0x69, 0x64, 0x65, 0x72, 0x22, 0x20, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x31, 0x31, 0x22, 0x20, 0x6d, 0x69, 0x6e, - 0x3d, 0x22, 0x31, 0x31, 0x22, 0x20, 0x6d, 0x61, 0x78, 0x3d, 0x22, 0x31, - 0x36, 0x22, 0x20, 0x73, 0x74, 0x65, 0x70, 0x3d, 0x22, 0x31, 0x22, 0x3e, - 0x3c, 0x2f, 0x70, 0x3e, 0x2d, 0x2d, 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x2f, - 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, - 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, - 0x73, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x65, 0x64, 0x42, 0x6f, 0x78, 0x20, - 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x70, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x22, - 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x68, 0x33, 0x3e, 0x44, 0x49, 0x53, 0x50, - 0x4c, 0x41, 0x59, 0x53, 0x3c, 0x2f, 0x68, 0x33, 0x3e, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x3d, 0x22, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x42, 0x6f, - 0x78, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x70, 0x20, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x74, 0x65, 0x6d, 0x20, 0x74, - 0x66, 0x74, 0x42, 0x61, 0x72, 0x22, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, - 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x74, 0x65, 0x6d, - 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x54, 0x46, 0x54, 0x20, 0x4f, 0x52, - 0x49, 0x45, 0x4e, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x3c, 0x2f, 0x73, - 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x69, 0x64, + 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x50, 0x57, 0x4d, 0x20, 0x44, + 0x45, 0x50, 0x54, 0x48, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, + 0x73, 0x70, 0x61, 0x6e, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x70, 0x77, 0x6d, + 0x44, 0x65, 0x70, 0x74, 0x68, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x20, + 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x74, 0x65, 0x6d, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3e, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, + 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x69, 0x6e, 0x70, 0x75, + 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x72, 0x61, 0x6e, 0x67, + 0x65, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x70, 0x77, 0x6d, 0x44, 0x65, + 0x70, 0x74, 0x68, 0x53, 0x6c, 0x69, 0x64, 0x65, 0x72, 0x22, 0x20, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x31, 0x31, 0x22, 0x20, 0x6d, 0x69, + 0x6e, 0x3d, 0x22, 0x31, 0x31, 0x22, 0x20, 0x6d, 0x61, 0x78, 0x3d, 0x22, + 0x31, 0x36, 0x22, 0x20, 0x73, 0x74, 0x65, 0x70, 0x3d, 0x22, 0x31, 0x22, + 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x2d, 0x2d, 0x3e, 0x0a, 0x20, 0x20, 0x3c, + 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, + 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, + 0x22, 0x73, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x65, 0x64, 0x42, 0x6f, 0x78, + 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x70, 0x73, 0x61, 0x62, 0x6c, 0x65, + 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x68, 0x33, 0x3e, 0x44, 0x49, 0x53, + 0x50, 0x4c, 0x41, 0x59, 0x53, 0x3c, 0x2f, 0x68, 0x33, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, + 0x73, 0x3d, 0x22, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x42, + 0x6f, 0x78, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x70, 0x20, + 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x74, 0x65, 0x6d, 0x20, + 0x74, 0x66, 0x74, 0x42, 0x61, 0x72, 0x22, 0x3e, 0x3c, 0x73, 0x70, 0x61, + 0x6e, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x74, 0x65, + 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x54, 0x46, 0x54, 0x20, 0x4f, + 0x52, 0x49, 0x45, 0x4e, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x3c, 0x2f, + 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x69, + 0x64, 0x3d, 0x22, 0x74, 0x66, 0x74, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, + 0x3d, 0x22, 0x69, 0x74, 0x65, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, + 0x3e, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x3c, 0x2f, 0x73, 0x70, 0x61, + 0x6e, 0x3e, 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x74, 0x79, 0x70, + 0x65, 0x3d, 0x22, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x74, 0x66, 0x74, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, + 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6c, 0x69, 0x64, 0x65, 0x72, 0x22, 0x20, + 0x6d, 0x69, 0x6e, 0x3d, 0x22, 0x30, 0x22, 0x20, 0x6d, 0x61, 0x78, 0x3d, + 0x22, 0x31, 0x22, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x70, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, + 0x74, 0x65, 0x6d, 0x20, 0x74, 0x66, 0x74, 0x42, 0x61, 0x72, 0x22, 0x3e, + 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, + 0x22, 0x69, 0x74, 0x65, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x54, + 0x46, 0x54, 0x20, 0x4d, 0x41, 0x58, 0x20, 0x42, 0x52, 0x49, 0x47, 0x48, + 0x54, 0x4e, 0x45, 0x53, 0x53, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, + 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x74, 0x66, + 0x74, 0x42, 0x72, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x22, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x74, 0x65, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3e, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x22, 0x20, 0x69, 0x64, 0x3d, - 0x22, 0x74, 0x66, 0x74, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x53, 0x6c, 0x69, 0x64, 0x65, 0x72, 0x22, 0x20, 0x6d, - 0x69, 0x6e, 0x3d, 0x22, 0x30, 0x22, 0x20, 0x6d, 0x61, 0x78, 0x3d, 0x22, - 0x31, 0x22, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x3c, 0x70, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x74, - 0x65, 0x6d, 0x20, 0x74, 0x66, 0x74, 0x42, 0x61, 0x72, 0x22, 0x3e, 0x3c, - 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, - 0x69, 0x74, 0x65, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x54, 0x46, - 0x54, 0x20, 0x4d, 0x41, 0x58, 0x20, 0x42, 0x52, 0x49, 0x47, 0x48, 0x54, - 0x4e, 0x45, 0x53, 0x53, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, - 0x73, 0x70, 0x61, 0x6e, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x74, 0x66, 0x74, - 0x42, 0x72, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x22, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, - 0x69, 0x74, 0x65, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3e, 0x26, - 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, - 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, - 0x22, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, - 0x74, 0x66, 0x74, 0x42, 0x72, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x65, 0x73, - 0x73, 0x53, 0x6c, 0x69, 0x64, 0x65, 0x72, 0x22, 0x20, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3d, 0x22, 0x31, 0x31, 0x22, 0x20, 0x6d, 0x69, 0x6e, 0x3d, - 0x22, 0x30, 0x22, 0x20, 0x6d, 0x61, 0x78, 0x3d, 0x22, 0x31, 0x30, 0x30, - 0x22, 0x20, 0x73, 0x74, 0x65, 0x70, 0x3d, 0x22, 0x31, 0x22, 0x3e, 0x3c, - 0x2f, 0x70, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x70, 0x20, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x74, 0x65, 0x6d, 0x20, 0x6f, - 0x6c, 0x65, 0x64, 0x42, 0x61, 0x72, 0x22, 0x3e, 0x3c, 0x73, 0x70, 0x61, - 0x6e, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x74, 0x65, - 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x4f, 0x4c, 0x45, 0x44, 0x20, - 0x4f, 0x52, 0x49, 0x45, 0x4e, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x3c, - 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, - 0x69, 0x64, 0x3d, 0x22, 0x6f, 0x6c, 0x65, 0x64, 0x4f, 0x72, 0x69, 0x65, - 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x22, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x74, 0x65, - 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3e, 0x26, 0x6e, 0x62, 0x73, - 0x70, 0x3b, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x69, 0x6e, - 0x70, 0x75, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x72, 0x61, - 0x6e, 0x67, 0x65, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6f, 0x6c, 0x65, - 0x64, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x53, 0x6c, 0x69, 0x64, 0x65, 0x72, 0x22, 0x20, 0x6d, 0x69, 0x6e, 0x3d, - 0x22, 0x30, 0x22, 0x20, 0x6d, 0x61, 0x78, 0x3d, 0x22, 0x31, 0x22, 0x3e, + 0x22, 0x74, 0x66, 0x74, 0x42, 0x72, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x65, + 0x73, 0x73, 0x53, 0x6c, 0x69, 0x64, 0x65, 0x72, 0x22, 0x20, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x31, 0x31, 0x22, 0x20, 0x6d, 0x69, 0x6e, + 0x3d, 0x22, 0x30, 0x22, 0x20, 0x6d, 0x61, 0x78, 0x3d, 0x22, 0x31, 0x30, + 0x30, 0x22, 0x20, 0x73, 0x74, 0x65, 0x70, 0x3d, 0x22, 0x31, 0x22, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x70, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x74, 0x65, 0x6d, 0x20, 0x6f, 0x6c, 0x65, 0x64, 0x42, 0x61, 0x72, 0x22, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x74, 0x65, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x4f, 0x4c, 0x45, 0x44, - 0x20, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x41, 0x53, 0x54, 0x3c, 0x2f, 0x73, - 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x69, 0x64, - 0x3d, 0x22, 0x6f, 0x6c, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, - 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x20, 0x63, 0x6c, 0x61, - 0x73, 0x73, 0x3d, 0x22, 0x69, 0x74, 0x65, 0x6d, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x22, 0x3e, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x3c, 0x2f, 0x73, - 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x74, - 0x79, 0x70, 0x65, 0x3d, 0x22, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x22, 0x20, - 0x69, 0x64, 0x3d, 0x22, 0x6f, 0x6c, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, - 0x72, 0x61, 0x73, 0x74, 0x53, 0x6c, 0x69, 0x64, 0x65, 0x72, 0x22, 0x20, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x31, 0x31, 0x22, 0x20, 0x6d, - 0x69, 0x6e, 0x3d, 0x22, 0x30, 0x22, 0x20, 0x6d, 0x61, 0x78, 0x3d, 0x22, - 0x31, 0x35, 0x22, 0x20, 0x73, 0x74, 0x65, 0x70, 0x3d, 0x22, 0x31, 0x22, - 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x69, - 0x76, 0x3e, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x3c, 0x64, - 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x73, 0x68, - 0x61, 0x64, 0x6f, 0x77, 0x65, 0x64, 0x42, 0x6f, 0x78, 0x20, 0x63, 0x6f, - 0x6c, 0x6c, 0x61, 0x70, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x3e, 0x0a, - 0x20, 0x20, 0x3c, 0x68, 0x33, 0x3e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, - 0x3c, 0x2f, 0x68, 0x33, 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x64, 0x69, 0x76, - 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x73, 0x65, 0x74, 0x74, - 0x69, 0x6e, 0x67, 0x73, 0x42, 0x6f, 0x78, 0x22, 0x3e, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x3c, 0x70, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, - 0x69, 0x74, 0x65, 0x6d, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x3c, 0x70, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x3d, 0x22, 0x69, 0x74, 0x65, 0x6d, 0x22, 0x3e, 0x53, 0x59, 0x53, 0x54, - 0x45, 0x4d, 0x20, 0x53, 0x54, 0x41, 0x52, 0x54, 0x3a, 0x26, 0x6e, 0x62, - 0x73, 0x70, 0x3b, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x3c, 0x73, 0x70, - 0x61, 0x6e, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x62, 0x6f, 0x6f, 0x74, 0x54, - 0x69, 0x6d, 0x65, 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, - 0x3c, 0x2f, 0x70, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x70, 0x20, - 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x74, 0x65, 0x6d, 0x22, - 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x69, 0x73, 0x6b, 0x53, 0x70, 0x61, - 0x63, 0x65, 0x42, 0x61, 0x72, 0x22, 0x3e, 0x46, 0x52, 0x45, 0x45, 0x20, - 0x44, 0x49, 0x53, 0x4b, 0x20, 0x53, 0x50, 0x41, 0x43, 0x45, 0x3a, 0x26, - 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x3c, - 0x73, 0x70, 0x61, 0x6e, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x66, 0x72, 0x65, - 0x65, 0x44, 0x69, 0x73, 0x6b, 0x53, 0x70, 0x61, 0x63, 0x65, 0x22, 0x3e, - 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x3c, 0x70, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x3d, 0x22, 0x69, 0x74, 0x65, 0x6d, 0x22, 0x3e, 0x50, 0x57, 0x4d, 0x20, - 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x3a, 0x26, 0x6e, 0x62, 0x73, 0x70, - 0x3b, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x3c, 0x73, 0x70, 0x61, 0x6e, - 0x20, 0x69, 0x64, 0x3d, 0x22, 0x70, 0x77, 0x6d, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, - 0x2f, 0x70, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x70, 0x20, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x74, 0x65, 0x6d, 0x22, 0x20, - 0x69, 0x64, 0x3d, 0x22, 0x77, 0x69, 0x66, 0x69, 0x73, 0x73, 0x69, 0x64, + 0x20, 0x4f, 0x52, 0x49, 0x45, 0x4e, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, + 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, + 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6f, 0x6c, 0x65, 0x64, 0x4f, 0x72, 0x69, + 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x22, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x74, + 0x65, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3e, 0x26, 0x6e, 0x62, + 0x73, 0x70, 0x3b, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x69, + 0x6e, 0x70, 0x75, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x72, + 0x61, 0x6e, 0x67, 0x65, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6f, 0x6c, + 0x65, 0x64, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x53, 0x6c, 0x69, 0x64, 0x65, 0x72, 0x22, 0x20, 0x6d, 0x69, 0x6e, + 0x3d, 0x22, 0x30, 0x22, 0x20, 0x6d, 0x61, 0x78, 0x3d, 0x22, 0x31, 0x22, + 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x70, + 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x74, 0x65, 0x6d, + 0x20, 0x6f, 0x6c, 0x65, 0x64, 0x42, 0x61, 0x72, 0x22, 0x3e, 0x3c, 0x73, + 0x70, 0x61, 0x6e, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, + 0x74, 0x65, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x4f, 0x4c, 0x45, + 0x44, 0x20, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x41, 0x53, 0x54, 0x3c, 0x2f, + 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x69, + 0x64, 0x3d, 0x22, 0x6f, 0x6c, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x72, + 0x61, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x20, 0x63, 0x6c, + 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x74, 0x65, 0x6d, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x22, 0x3e, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x3c, 0x2f, + 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, + 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x22, + 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6f, 0x6c, 0x65, 0x64, 0x43, 0x6f, 0x6e, + 0x74, 0x72, 0x61, 0x73, 0x74, 0x53, 0x6c, 0x69, 0x64, 0x65, 0x72, 0x22, + 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x31, 0x31, 0x22, 0x20, + 0x6d, 0x69, 0x6e, 0x3d, 0x22, 0x30, 0x22, 0x20, 0x6d, 0x61, 0x78, 0x3d, + 0x22, 0x31, 0x35, 0x22, 0x20, 0x73, 0x74, 0x65, 0x70, 0x3d, 0x22, 0x31, 0x22, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x3c, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0a, 0x66, 0x75, 0x6e, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x42, - 0x79, 0x74, 0x65, 0x73, 0x28, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x2c, - 0x20, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x73, 0x20, 0x29, 0x20, - 0x7b, 0x0a, 0x20, 0x20, 0x69, 0x66, 0x28, 0x20, 0x62, 0x79, 0x74, 0x65, - 0x73, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x20, 0x29, 0x20, 0x72, 0x65, 0x74, - 0x75, 0x72, 0x6e, 0x20, 0x27, 0x30, 0x20, 0x42, 0x79, 0x74, 0x65, 0x73, - 0x27, 0x3b, 0x0a, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x6b, 0x20, 0x3d, - 0x20, 0x31, 0x30, 0x30, 0x30, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x64, - 0x6d, 0x20, 0x3d, 0x20, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x73, - 0x20, 0x2b, 0x20, 0x31, 0x20, 0x7c, 0x7c, 0x20, 0x33, 0x2c, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x5b, - 0x20, 0x27, 0x42, 0x79, 0x74, 0x65, 0x73, 0x27, 0x2c, 0x20, 0x27, 0x4b, - 0x42, 0x27, 0x2c, 0x20, 0x27, 0x4d, 0x42, 0x27, 0x2c, 0x20, 0x27, 0x47, - 0x42, 0x27, 0x2c, 0x20, 0x27, 0x54, 0x42, 0x27, 0x2c, 0x20, 0x27, 0x50, - 0x42, 0x27, 0x2c, 0x20, 0x27, 0x45, 0x42, 0x27, 0x2c, 0x20, 0x27, 0x5a, - 0x42, 0x27, 0x2c, 0x20, 0x27, 0x59, 0x42, 0x27, 0x20, 0x5d, 0x2c, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x4d, 0x61, 0x74, 0x68, - 0x2e, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x28, 0x4d, 0x61, 0x74, 0x68, 0x2e, - 0x6c, 0x6f, 0x67, 0x28, 0x62, 0x79, 0x74, 0x65, 0x73, 0x29, 0x20, 0x2f, - 0x20, 0x4d, 0x61, 0x74, 0x68, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x6b, 0x29, - 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, - 0x70, 0x61, 0x72, 0x73, 0x65, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x28, 0x20, - 0x28, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x2f, 0x20, 0x4d, 0x61, - 0x74, 0x68, 0x2e, 0x70, 0x6f, 0x77, 0x28, 0x20, 0x6b, 0x2c, 0x20, 0x69, - 0x20, 0x29, 0x20, 0x29, 0x2e, 0x74, 0x6f, 0x46, 0x69, 0x78, 0x65, 0x64, - 0x28, 0x20, 0x64, 0x6d, 0x20, 0x29, 0x20, 0x29, 0x20, 0x2b, 0x20, 0x27, - 0x20, 0x27, 0x20, 0x2b, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x73, 0x5b, 0x69, - 0x5d, 0x3b, 0x0a, 0x7d, 0x0a, 0x76, 0x61, 0x72, 0x20, 0x67, 0x65, 0x74, - 0x41, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x3b, 0x0a, 0x24, - 0x28, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x29, 0x2e, 0x72, - 0x65, 0x61, 0x64, 0x79, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x28, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x67, 0x65, 0x74, - 0x41, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x3d, 0x20, - 0x74, 0x72, 0x75, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x24, 0x2e, 0x67, 0x65, - 0x74, 0x28, 0x20, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x74, - 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x3f, 0x68, 0x6f, 0x73, 0x74, 0x6e, - 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x20, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x64, - 0x6f, 0x6e, 0x65, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, 0x68, 0x6f, 0x73, 0x74, 0x4e, 0x61, - 0x6d, 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x27, 0x20, 0x29, 0x2e, 0x76, - 0x61, 0x6c, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x20, 0x27, 0x23, 0x68, 0x6f, 0x73, - 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x27, 0x20, 0x29, 0x2e, 0x68, 0x74, 0x6d, - 0x6c, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, - 0x74, 0x69, 0x74, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x64, 0x61, 0x74, 0x61, - 0x20, 0x2b, 0x20, 0x22, 0x20, 0x73, 0x65, 0x74, 0x75, 0x70, 0x22, 0x3b, - 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x66, 0x61, 0x69, - 0x6c, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, + 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x73, + 0x68, 0x61, 0x64, 0x6f, 0x77, 0x65, 0x64, 0x42, 0x6f, 0x78, 0x20, 0x63, + 0x6f, 0x6c, 0x6c, 0x61, 0x70, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x3e, + 0x0a, 0x20, 0x20, 0x3c, 0x68, 0x33, 0x3e, 0x53, 0x54, 0x41, 0x54, 0x55, + 0x53, 0x3c, 0x2f, 0x68, 0x33, 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x64, 0x69, + 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x73, 0x65, 0x74, + 0x74, 0x69, 0x6e, 0x67, 0x73, 0x42, 0x6f, 0x78, 0x22, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x70, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, + 0x22, 0x69, 0x74, 0x65, 0x6d, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x70, 0x20, 0x63, 0x6c, 0x61, 0x73, + 0x73, 0x3d, 0x22, 0x69, 0x74, 0x65, 0x6d, 0x22, 0x3e, 0x53, 0x59, 0x53, + 0x54, 0x45, 0x4d, 0x20, 0x53, 0x54, 0x41, 0x52, 0x54, 0x3a, 0x26, 0x6e, + 0x62, 0x73, 0x70, 0x3b, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x3c, 0x73, + 0x70, 0x61, 0x6e, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x62, 0x6f, 0x6f, 0x74, + 0x54, 0x69, 0x6d, 0x65, 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, + 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x70, + 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x74, 0x65, 0x6d, + 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x69, 0x73, 0x6b, 0x53, 0x70, + 0x61, 0x63, 0x65, 0x42, 0x61, 0x72, 0x22, 0x3e, 0x46, 0x52, 0x45, 0x45, + 0x20, 0x44, 0x49, 0x53, 0x4b, 0x20, 0x53, 0x50, 0x41, 0x43, 0x45, 0x3a, + 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, + 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x66, 0x72, + 0x65, 0x65, 0x44, 0x69, 0x73, 0x6b, 0x53, 0x70, 0x61, 0x63, 0x65, 0x22, + 0x3e, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x70, 0x20, 0x63, 0x6c, 0x61, 0x73, + 0x73, 0x3d, 0x22, 0x69, 0x74, 0x65, 0x6d, 0x22, 0x3e, 0x50, 0x57, 0x4d, + 0x20, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x3a, 0x26, 0x6e, 0x62, 0x73, + 0x70, 0x3b, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x3c, 0x73, 0x70, 0x61, + 0x6e, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x70, 0x77, 0x6d, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, + 0x3c, 0x2f, 0x70, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x70, 0x20, + 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x74, 0x65, 0x6d, 0x22, + 0x20, 0x69, 0x64, 0x3d, 0x22, 0x77, 0x69, 0x66, 0x69, 0x73, 0x73, 0x69, + 0x64, 0x22, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x2f, + 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, + 0x3c, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0a, 0x66, 0x75, 0x6e, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x42, 0x79, 0x74, 0x65, 0x73, 0x28, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, + 0x2c, 0x20, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x73, 0x20, 0x29, + 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x69, 0x66, 0x28, 0x20, 0x62, 0x79, 0x74, + 0x65, 0x73, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x20, 0x29, 0x20, 0x72, 0x65, + 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x30, 0x20, 0x42, 0x79, 0x74, 0x65, + 0x73, 0x27, 0x3b, 0x0a, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x6b, 0x20, + 0x3d, 0x20, 0x31, 0x30, 0x30, 0x30, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x64, 0x6d, 0x20, 0x3d, 0x20, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, + 0x73, 0x20, 0x2b, 0x20, 0x31, 0x20, 0x7c, 0x7c, 0x20, 0x33, 0x2c, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x73, 0x20, 0x3d, 0x20, + 0x5b, 0x20, 0x27, 0x42, 0x79, 0x74, 0x65, 0x73, 0x27, 0x2c, 0x20, 0x27, + 0x4b, 0x42, 0x27, 0x2c, 0x20, 0x27, 0x4d, 0x42, 0x27, 0x2c, 0x20, 0x27, + 0x47, 0x42, 0x27, 0x2c, 0x20, 0x27, 0x54, 0x42, 0x27, 0x2c, 0x20, 0x27, + 0x50, 0x42, 0x27, 0x2c, 0x20, 0x27, 0x45, 0x42, 0x27, 0x2c, 0x20, 0x27, + 0x5a, 0x42, 0x27, 0x2c, 0x20, 0x27, 0x59, 0x42, 0x27, 0x20, 0x5d, 0x2c, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x4d, 0x61, 0x74, + 0x68, 0x2e, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x28, 0x4d, 0x61, 0x74, 0x68, + 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x62, 0x79, 0x74, 0x65, 0x73, 0x29, 0x20, + 0x2f, 0x20, 0x4d, 0x61, 0x74, 0x68, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x6b, + 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, + 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x28, + 0x20, 0x28, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x2f, 0x20, 0x4d, + 0x61, 0x74, 0x68, 0x2e, 0x70, 0x6f, 0x77, 0x28, 0x20, 0x6b, 0x2c, 0x20, + 0x69, 0x20, 0x29, 0x20, 0x29, 0x2e, 0x74, 0x6f, 0x46, 0x69, 0x78, 0x65, + 0x64, 0x28, 0x20, 0x64, 0x6d, 0x20, 0x29, 0x20, 0x29, 0x20, 0x2b, 0x20, + 0x27, 0x20, 0x27, 0x20, 0x2b, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x73, 0x5b, + 0x69, 0x5d, 0x3b, 0x0a, 0x7d, 0x0a, 0x76, 0x61, 0x72, 0x20, 0x67, 0x65, + 0x74, 0x41, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x3b, 0x0a, + 0x24, 0x28, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x29, 0x2e, + 0x72, 0x65, 0x61, 0x64, 0x79, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x67, 0x65, + 0x74, 0x41, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x3d, + 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x24, 0x2e, 0x67, + 0x65, 0x74, 0x28, 0x20, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, + 0x74, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x3f, 0x68, 0x6f, 0x73, 0x74, + 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x20, 0x29, 0x0a, 0x20, 0x20, 0x2e, + 0x64, 0x6f, 0x6e, 0x65, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, 0x68, 0x6f, 0x73, 0x74, 0x4e, + 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x27, 0x20, 0x29, 0x2e, + 0x76, 0x61, 0x6c, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x3b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x20, 0x27, 0x23, 0x68, 0x6f, + 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x27, 0x20, 0x29, 0x2e, 0x68, 0x74, + 0x6d, 0x6c, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x3b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x64, 0x61, 0x74, + 0x61, 0x20, 0x2b, 0x20, 0x22, 0x20, 0x73, 0x65, 0x74, 0x75, 0x70, 0x22, + 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x66, 0x61, + 0x69, 0x6c, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, + 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x24, 0x28, 0x20, 0x27, 0x23, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x27, 0x20, 0x29, 0x2e, 0x68, 0x74, + 0x6d, 0x6c, 0x28, 0x20, 0x22, 0x50, 0x72, 0x6f, 0x62, 0x6c, 0x65, 0x6d, + 0x20, 0x67, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x6f, 0x73, + 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x2e, 0x22, 0x20, 0x29, 0x3b, 0x0a, 0x20, + 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, + 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x24, 0x28, 0x20, 0x27, 0x23, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x27, 0x20, 0x29, 0x2e, 0x68, 0x74, 0x6d, - 0x6c, 0x28, 0x20, 0x22, 0x50, 0x72, 0x6f, 0x62, 0x6c, 0x65, 0x6d, 0x20, - 0x67, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x6f, 0x73, 0x74, - 0x6e, 0x61, 0x6d, 0x65, 0x2e, 0x22, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x7d, - 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, 0x28, - 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, - 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, - 0x66, 0x20, 0x28, 0x20, 0x67, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x73, 0x20, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x67, 0x65, 0x74, 0x4f, 0x6c, - 0x65, 0x64, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, - 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x7d, 0x29, 0x3b, 0x0a, 0x66, 0x75, 0x6e, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x4f, 0x6c, 0x65, + 0x69, 0x66, 0x20, 0x28, 0x20, 0x67, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x67, 0x65, 0x74, 0x42, + 0x6f, 0x6f, 0x74, 0x6c, 0x6f, 0x67, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x7d, 0x29, + 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x67, 0x65, + 0x74, 0x42, 0x6f, 0x6f, 0x74, 0x6c, 0x6f, 0x67, 0x28, 0x29, 0x7b, 0x0a, + 0x20, 0x20, 0x24, 0x2e, 0x67, 0x65, 0x74, 0x28, 0x20, 0x22, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x67, 0x65, 0x74, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x3f, 0x62, 0x6f, 0x6f, 0x74, 0x6c, 0x6f, 0x67, 0x3d, 0x22, 0x20, 0x29, + 0x0a, 0x20, 0x20, 0x2e, 0x64, 0x6f, 0x6e, 0x65, 0x28, 0x66, 0x75, 0x6e, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x64, 0x61, 0x74, 0x61, 0x29, 0x7b, + 0x24, 0x28, 0x27, 0x23, 0x62, 0x6f, 0x6f, 0x74, 0x6c, 0x6f, 0x67, 0x27, + 0x29, 0x2e, 0x76, 0x61, 0x6c, 0x28, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x74, + 0x6f, 0x55, 0x70, 0x70, 0x65, 0x72, 0x43, 0x61, 0x73, 0x65, 0x28, 0x29, + 0x29, 0x3b, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x66, 0x61, 0x69, 0x6c, + 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x64, 0x61, + 0x74, 0x61, 0x29, 0x7b, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x61, 0x6c, + 0x77, 0x61, 0x79, 0x73, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x28, 0x64, 0x61, 0x74, 0x61, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x69, 0x66, 0x28, 0x67, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x73, 0x29, 0x7b, 0x67, 0x65, 0x74, 0x4f, 0x6c, 0x65, 0x64, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x28, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x24, 0x2e, 0x67, 0x65, 0x74, 0x28, - 0x20, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x74, 0x64, 0x65, - 0x76, 0x69, 0x63, 0x65, 0x3f, 0x6f, 0x6c, 0x65, 0x64, 0x6f, 0x72, 0x69, + 0x28, 0x29, 0x3b, 0x7d, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x7d, + 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x67, 0x65, + 0x74, 0x4f, 0x6c, 0x65, 0x64, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x24, 0x2e, + 0x67, 0x65, 0x74, 0x28, 0x20, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, + 0x65, 0x74, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x3f, 0x6f, 0x6c, 0x65, + 0x64, 0x6f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x3d, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x64, 0x6f, 0x6e, 0x65, 0x28, + 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, + 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, + 0x28, 0x27, 0x2e, 0x6f, 0x6c, 0x65, 0x64, 0x42, 0x61, 0x72, 0x27, 0x20, + 0x29, 0x2e, 0x73, 0x68, 0x6f, 0x77, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, 0x6f, 0x6c, 0x65, 0x64, 0x4f, 0x72, + 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x27, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, 0x64, + 0x61, 0x74, 0x61, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, + 0x66, 0x20, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x3d, 0x3d, 0x20, + 0x27, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x27, 0x20, 0x29, 0x20, 0x24, + 0x28, 0x27, 0x23, 0x6f, 0x6c, 0x65, 0x64, 0x4f, 0x72, 0x69, 0x65, 0x6e, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6c, 0x69, 0x64, 0x65, 0x72, + 0x27, 0x29, 0x2e, 0x76, 0x61, 0x6c, 0x28, 0x30, 0x29, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, + 0x20, 0x3d, 0x3d, 0x20, 0x27, 0x75, 0x70, 0x73, 0x69, 0x64, 0x65, 0x64, + 0x6f, 0x77, 0x6e, 0x27, 0x20, 0x29, 0x20, 0x24, 0x28, 0x27, 0x23, 0x6f, + 0x6c, 0x65, 0x64, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x53, 0x6c, 0x69, 0x64, 0x65, 0x72, 0x27, 0x29, 0x2e, 0x76, + 0x61, 0x6c, 0x28, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, + 0x20, 0x20, 0x2e, 0x66, 0x61, 0x69, 0x6c, 0x28, 0x20, 0x66, 0x75, 0x6e, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, + 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x20, + 0x64, 0x61, 0x74, 0x61, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, + 0x21, 0x3d, 0x20, 0x35, 0x30, 0x31, 0x20, 0x29, 0x20, 0x24, 0x28, 0x20, + 0x27, 0x23, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x27, 0x20, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, + 0x64, 0x61, 0x74, 0x61, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, + 0x65, 0x78, 0x74, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, + 0x20, 0x20, 0x2e, 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, 0x28, 0x20, 0x66, + 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, + 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, + 0x28, 0x20, 0x67, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x73, 0x20, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x67, 0x65, 0x74, 0x4f, 0x6c, 0x65, 0x64, + 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x73, 0x74, 0x28, 0x29, 0x3b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a, + 0x7d, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x67, + 0x65, 0x74, 0x4f, 0x6c, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, + 0x73, 0x74, 0x28, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x24, 0x2e, 0x67, 0x65, + 0x74, 0x28, 0x20, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x74, + 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x3f, 0x6f, 0x6c, 0x65, 0x64, 0x63, + 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x73, 0x74, 0x3d, 0x22, 0x29, 0x0a, 0x20, + 0x20, 0x2e, 0x64, 0x6f, 0x6e, 0x65, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, + 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, 0x6f, 0x6c, + 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x73, 0x74, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x27, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, + 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x24, 0x28, 0x27, 0x23, 0x6f, 0x6c, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, + 0x72, 0x61, 0x73, 0x74, 0x53, 0x6c, 0x69, 0x64, 0x65, 0x72, 0x27, 0x29, + 0x2e, 0x76, 0x61, 0x6c, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, + 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x66, 0x61, + 0x69, 0x6c, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2e, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x35, 0x30, + 0x31, 0x20, 0x29, 0x20, 0x24, 0x28, 0x20, 0x27, 0x23, 0x64, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x27, 0x20, 0x29, + 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2e, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x65, 0x78, 0x74, 0x20, 0x29, + 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x61, 0x6c, + 0x77, 0x61, 0x79, 0x73, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x20, 0x67, 0x65, 0x74, + 0x41, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x29, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x67, 0x65, 0x74, 0x54, 0x66, 0x74, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x66, + 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x54, + 0x66, 0x74, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x28, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x24, 0x2e, 0x67, 0x65, 0x74, + 0x28, 0x20, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x74, 0x64, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x3f, 0x74, 0x66, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x64, 0x6f, 0x6e, 0x65, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, - 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x2e, 0x6f, - 0x6c, 0x65, 0x64, 0x42, 0x61, 0x72, 0x27, 0x20, 0x29, 0x2e, 0x73, 0x68, - 0x6f, 0x77, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, - 0x27, 0x23, 0x6f, 0x6c, 0x65, 0x64, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x27, 0x29, - 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, - 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x20, - 0x64, 0x61, 0x74, 0x61, 0x20, 0x3d, 0x3d, 0x20, 0x27, 0x6e, 0x6f, 0x72, - 0x6d, 0x61, 0x6c, 0x27, 0x20, 0x29, 0x20, 0x24, 0x28, 0x27, 0x23, 0x6f, - 0x6c, 0x65, 0x64, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, + 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x2e, 0x74, + 0x66, 0x74, 0x42, 0x61, 0x72, 0x27, 0x20, 0x29, 0x2e, 0x73, 0x68, 0x6f, + 0x77, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, + 0x23, 0x74, 0x66, 0x74, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x27, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, + 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x69, 0x66, 0x20, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x3d, 0x3d, + 0x20, 0x27, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x27, 0x20, 0x29, 0x20, + 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, + 0x74, 0x66, 0x74, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6c, 0x69, 0x64, 0x65, 0x72, 0x27, 0x29, 0x2e, 0x76, - 0x61, 0x6c, 0x28, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, - 0x66, 0x20, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x3d, 0x3d, 0x20, - 0x27, 0x75, 0x70, 0x73, 0x69, 0x64, 0x65, 0x64, 0x6f, 0x77, 0x6e, 0x27, - 0x20, 0x29, 0x20, 0x24, 0x28, 0x27, 0x23, 0x6f, 0x6c, 0x65, 0x64, 0x4f, - 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6c, - 0x69, 0x64, 0x65, 0x72, 0x27, 0x29, 0x2e, 0x76, 0x61, 0x6c, 0x28, 0x31, - 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x66, - 0x61, 0x69, 0x6c, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x35, - 0x30, 0x31, 0x20, 0x29, 0x20, 0x24, 0x28, 0x20, 0x27, 0x23, 0x64, 0x65, - 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x27, 0x20, - 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x65, 0x78, 0x74, 0x20, + 0x61, 0x6c, 0x28, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x20, 0x64, 0x61, + 0x74, 0x61, 0x20, 0x3d, 0x3d, 0x20, 0x27, 0x75, 0x70, 0x73, 0x69, 0x64, + 0x65, 0x64, 0x6f, 0x77, 0x6e, 0x27, 0x20, 0x29, 0x20, 0x7b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, 0x74, 0x66, 0x74, + 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, + 0x6c, 0x69, 0x64, 0x65, 0x72, 0x27, 0x29, 0x2e, 0x76, 0x61, 0x6c, 0x28, + 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, + 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x66, 0x61, 0x69, 0x6c, 0x28, 0x20, + 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, + 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, + 0x20, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x35, 0x30, 0x31, 0x20, 0x29, 0x20, + 0x24, 0x28, 0x20, 0x27, 0x23, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x27, 0x20, 0x29, 0x2e, 0x68, 0x74, 0x6d, + 0x6c, 0x28, 0x20, 0x22, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x67, 0x65, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x66, 0x74, 0x20, 0x6f, 0x72, + 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x22, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x20, 0x67, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x29, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x67, 0x65, 0x74, 0x4f, 0x6c, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, - 0x72, 0x61, 0x73, 0x74, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x7d, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x66, 0x75, - 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x4f, 0x6c, - 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x73, 0x74, 0x28, 0x29, - 0x7b, 0x0a, 0x20, 0x20, 0x24, 0x2e, 0x67, 0x65, 0x74, 0x28, 0x20, 0x22, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x74, 0x64, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x3f, 0x6f, 0x6c, 0x65, 0x64, 0x63, 0x6f, 0x6e, 0x74, 0x72, - 0x61, 0x73, 0x74, 0x3d, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x64, 0x6f, - 0x6e, 0x65, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, 0x6f, 0x6c, 0x65, 0x64, 0x43, 0x6f, - 0x6e, 0x74, 0x72, 0x61, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x27, - 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, - 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, - 0x6f, 0x6c, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x73, 0x74, - 0x53, 0x6c, 0x69, 0x64, 0x65, 0x72, 0x27, 0x29, 0x2e, 0x76, 0x61, 0x6c, - 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, + 0x20, 0x67, 0x65, 0x74, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x4c, 0x6f, + 0x67, 0x67, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x28, + 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x66, + 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x53, + 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x4c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x28, 0x29, 0x7b, 0x0a, 0x20, 0x20, + 0x24, 0x2e, 0x67, 0x65, 0x74, 0x28, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x67, 0x65, 0x74, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x3f, 0x73, 0x65, + 0x6e, 0x73, 0x6f, 0x72, 0x6c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x3d, + 0x22, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x64, 0x6f, 0x6e, 0x65, 0x28, 0x20, + 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, + 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, + 0x27, 0x23, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x4c, 0x6f, 0x67, 0x67, + 0x69, 0x6e, 0x67, 0x27, 0x29, 0x2e, 0x70, 0x72, 0x6f, 0x70, 0x28, 0x27, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x27, 0x2c, 0x20, 0x64, 0x61, 0x74, 0x61, + 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x2e, 0x73, + 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x27, + 0x29, 0x2e, 0x73, 0x68, 0x6f, 0x77, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x66, 0x61, 0x69, 0x6c, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, @@ -640,991 +744,940 @@ const uint8_t setup_htm[] = { 0x75, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x35, 0x30, 0x31, 0x20, 0x29, 0x20, 0x24, 0x28, 0x20, 0x27, 0x23, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x27, 0x20, 0x29, 0x2e, 0x68, 0x74, 0x6d, + 0x6c, 0x28, 0x20, 0x22, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x67, 0x65, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, + 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x22, 0x20, 0x29, 0x3b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, + 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x64, 0x61, 0x74, 0x61, 0x29, 0x3b, 0x0a, + 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x61, 0x6c, 0x77, 0x61, + 0x79, 0x73, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x20, 0x67, 0x65, 0x74, 0x41, 0x6c, + 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x29, 0x20, 0x67, 0x65, + 0x74, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x4c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x7d, + 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x67, 0x65, + 0x74, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x4c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x28, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x24, 0x2e, 0x67, 0x65, 0x74, + 0x28, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x74, 0x64, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x3f, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x6c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x3d, + 0x22, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x64, 0x6f, 0x6e, 0x65, 0x28, 0x20, + 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, + 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, + 0x27, 0x23, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x4c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x27, 0x29, 0x2e, 0x70, + 0x72, 0x6f, 0x70, 0x28, 0x27, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x27, 0x2c, + 0x20, 0x64, 0x61, 0x74, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, + 0x0a, 0x20, 0x20, 0x2e, 0x66, 0x61, 0x69, 0x6c, 0x28, 0x20, 0x66, 0x75, + 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, + 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, + 0x20, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x20, 0x21, 0x3d, 0x20, 0x35, 0x30, 0x31, 0x20, 0x29, 0x20, 0x24, 0x28, + 0x20, 0x27, 0x23, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x27, 0x20, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, + 0x20, 0x22, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x67, 0x65, 0x74, 0x74, + 0x69, 0x6e, 0x67, 0x20, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x20, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x22, 0x20, 0x29, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, + 0x6f, 0x67, 0x28, 0x64, 0x61, 0x74, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, + 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, + 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, + 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x69, 0x66, 0x20, 0x28, 0x20, 0x67, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x29, 0x20, 0x67, 0x65, 0x74, 0x54, + 0x66, 0x74, 0x4d, 0x61, 0x78, 0x42, 0x72, 0x69, 0x67, 0x68, 0x74, 0x6e, + 0x65, 0x73, 0x73, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x3b, + 0x0a, 0x7d, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, + 0x67, 0x65, 0x74, 0x54, 0x66, 0x74, 0x4d, 0x61, 0x78, 0x42, 0x72, 0x69, + 0x67, 0x68, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x28, 0x29, 0x7b, 0x0a, 0x20, + 0x20, 0x24, 0x2e, 0x67, 0x65, 0x74, 0x28, 0x20, 0x22, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x67, 0x65, 0x74, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x3f, + 0x74, 0x66, 0x74, 0x62, 0x72, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x65, 0x73, + 0x73, 0x3d, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x64, 0x6f, 0x6e, 0x65, + 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, + 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x24, 0x28, 0x27, 0x23, 0x74, 0x66, 0x74, 0x42, 0x72, 0x69, 0x67, 0x68, + 0x74, 0x6e, 0x65, 0x73, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x27, 0x29, + 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, + 0x49, 0x6e, 0x74, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x20, + 0x2b, 0x20, 0x22, 0x25, 0x22, 0x20, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, 0x74, 0x66, 0x74, 0x42, 0x72, 0x69, + 0x67, 0x68, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x53, 0x6c, 0x69, 0x64, 0x65, + 0x72, 0x27, 0x29, 0x2e, 0x76, 0x61, 0x6c, 0x28, 0x20, 0x64, 0x61, 0x74, + 0x61, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, + 0x2e, 0x66, 0x61, 0x69, 0x6c, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x20, 0x64, 0x61, + 0x74, 0x61, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x21, 0x3d, + 0x20, 0x35, 0x30, 0x31, 0x20, 0x29, 0x20, 0x24, 0x28, 0x20, 0x27, 0x23, + 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x27, 0x20, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, 0x22, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x20, 0x67, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x20, 0x74, 0x66, 0x74, 0x20, 0x62, 0x72, 0x69, 0x67, 0x68, 0x74, 0x6e, + 0x65, 0x73, 0x73, 0x2e, 0x22, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, + 0x0a, 0x20, 0x20, 0x2e, 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, 0x28, 0x20, + 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, + 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, + 0x20, 0x28, 0x20, 0x67, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x73, 0x20, 0x29, 0x20, 0x67, 0x65, 0x74, 0x54, 0x69, 0x6d, + 0x65, 0x5a, 0x6f, 0x6e, 0x65, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, + 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x20, 0x67, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x5a, 0x6f, 0x6e, + 0x65, 0x28, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x24, 0x2e, 0x67, 0x65, 0x74, + 0x28, 0x20, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x74, 0x64, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x3f, 0x74, 0x69, 0x6d, 0x65, 0x7a, 0x6f, + 0x6e, 0x65, 0x3d, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x64, 0x6f, 0x6e, + 0x65, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, + 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x24, 0x28, 0x27, 0x23, 0x74, 0x69, 0x6d, 0x65, 0x5a, 0x6f, 0x6e, + 0x65, 0x54, 0x65, 0x78, 0x74, 0x42, 0x6f, 0x78, 0x27, 0x29, 0x2e, 0x76, + 0x61, 0x6c, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x3b, 0x0a, + 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x66, 0x61, 0x69, 0x6c, + 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, + 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x24, 0x28, 0x20, 0x27, 0x23, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x27, 0x20, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x65, 0x78, 0x74, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x20, 0x67, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x67, 0x65, 0x74, 0x54, - 0x66, 0x74, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, - 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x54, 0x66, 0x74, 0x4f, 0x72, - 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x7b, + 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x29, 0x20, 0x67, 0x65, 0x74, 0x4c, + 0x69, 0x67, 0x68, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x28, 0x29, + 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x66, 0x75, + 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x4c, 0x69, + 0x67, 0x68, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x28, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x24, 0x2e, 0x67, 0x65, 0x74, 0x28, 0x20, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x74, 0x64, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x3f, 0x74, 0x66, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x64, - 0x6f, 0x6e, 0x65, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, + 0x65, 0x3f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x3d, 0x22, 0x29, 0x0a, + 0x20, 0x20, 0x2e, 0x64, 0x6f, 0x6e, 0x65, 0x28, 0x20, 0x66, 0x75, 0x6e, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, + 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x69, + 0x74, 0x65, 0x6d, 0x20, 0x3d, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x73, + 0x70, 0x6c, 0x69, 0x74, 0x28, 0x27, 0x5c, 0x6e, 0x27, 0x29, 0x3b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, 0x6c, 0x69, 0x67, 0x68, + 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x27, 0x29, 0x2e, 0x68, 0x74, + 0x6d, 0x6c, 0x28, 0x20, 0x69, 0x74, 0x65, 0x6d, 0x5b, 0x36, 0x5d, 0x20, + 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x66, + 0x61, 0x69, 0x6c, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x2e, 0x74, 0x66, 0x74, 0x42, 0x61, - 0x72, 0x27, 0x20, 0x29, 0x2e, 0x73, 0x68, 0x6f, 0x77, 0x28, 0x29, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, 0x74, 0x66, 0x74, - 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x27, - 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, - 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, - 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x3d, 0x3d, 0x20, 0x27, 0x6e, 0x6f, - 0x72, 0x6d, 0x61, 0x6c, 0x27, 0x20, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, 0x74, 0x66, 0x74, 0x4f, - 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6c, - 0x69, 0x64, 0x65, 0x72, 0x27, 0x29, 0x2e, 0x76, 0x61, 0x6c, 0x28, 0x30, - 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x69, 0x66, 0x20, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x3d, - 0x3d, 0x20, 0x27, 0x75, 0x70, 0x73, 0x69, 0x64, 0x65, 0x64, 0x6f, 0x77, - 0x6e, 0x27, 0x20, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x24, 0x28, 0x27, 0x23, 0x74, 0x66, 0x74, 0x4f, 0x72, 0x69, 0x65, - 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6c, 0x69, 0x64, 0x65, - 0x72, 0x27, 0x29, 0x2e, 0x76, 0x61, 0x6c, 0x28, 0x31, 0x29, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, - 0x20, 0x2e, 0x66, 0x61, 0x69, 0x6c, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, - 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x20, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x21, - 0x3d, 0x20, 0x35, 0x30, 0x31, 0x20, 0x29, 0x20, 0x24, 0x28, 0x20, 0x27, - 0x23, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x27, 0x20, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, 0x22, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x67, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x20, 0x74, 0x66, 0x74, 0x20, 0x6f, 0x72, 0x69, 0x65, 0x6e, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x22, 0x20, 0x29, 0x3b, 0x0a, 0x20, - 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x61, 0x6c, 0x77, 0x61, 0x79, - 0x73, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, - 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x69, 0x66, 0x20, 0x28, 0x20, 0x67, 0x65, 0x74, 0x41, 0x6c, 0x6c, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x29, 0x20, 0x67, 0x65, 0x74, - 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x4c, 0x6f, 0x67, 0x67, 0x69, 0x6e, - 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x28, 0x29, 0x3b, 0x0a, 0x20, - 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x53, 0x65, 0x6e, 0x73, 0x6f, - 0x72, 0x4c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x28, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x24, 0x2e, 0x67, 0x65, - 0x74, 0x28, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x74, 0x64, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x3f, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, - 0x6c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x29, 0x0a, 0x20, - 0x20, 0x2e, 0x64, 0x6f, 0x6e, 0x65, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, - 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, 0x73, 0x65, - 0x6e, 0x73, 0x6f, 0x72, 0x4c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x27, - 0x29, 0x2e, 0x70, 0x72, 0x6f, 0x70, 0x28, 0x27, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x27, 0x2c, 0x20, 0x64, 0x61, 0x74, 0x61, 0x29, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x2e, 0x73, 0x65, 0x6e, 0x73, 0x6f, - 0x72, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x27, 0x29, 0x2e, 0x73, 0x68, - 0x6f, 0x77, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, - 0x20, 0x2e, 0x66, 0x61, 0x69, 0x6c, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, - 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x20, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x21, - 0x3d, 0x20, 0x35, 0x30, 0x31, 0x20, 0x29, 0x20, 0x24, 0x28, 0x20, 0x27, - 0x23, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x27, 0x20, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, 0x22, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x67, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x20, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x20, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x2e, 0x22, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, - 0x28, 0x64, 0x61, 0x74, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, - 0x0a, 0x20, 0x20, 0x2e, 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, 0x28, 0x20, - 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, - 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, - 0x20, 0x28, 0x20, 0x67, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x73, 0x20, 0x29, 0x20, 0x67, 0x65, 0x74, 0x53, 0x65, 0x6e, - 0x73, 0x6f, 0x72, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4c, 0x6f, 0x67, 0x67, - 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x28, 0x29, 0x3b, - 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x66, 0x75, 0x6e, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x53, 0x65, 0x6e, - 0x73, 0x6f, 0x72, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4c, 0x6f, 0x67, 0x67, - 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x28, 0x29, 0x7b, - 0x0a, 0x20, 0x20, 0x24, 0x2e, 0x67, 0x65, 0x74, 0x28, 0x22, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x67, 0x65, 0x74, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x3f, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x6c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x29, 0x0a, 0x20, - 0x20, 0x2e, 0x64, 0x6f, 0x6e, 0x65, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, - 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, 0x73, 0x65, - 0x6e, 0x73, 0x6f, 0x72, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4c, 0x6f, 0x67, - 0x67, 0x69, 0x6e, 0x67, 0x27, 0x29, 0x2e, 0x70, 0x72, 0x6f, 0x70, 0x28, - 0x27, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x27, 0x2c, 0x20, 0x64, 0x61, 0x74, - 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, - 0x66, 0x61, 0x69, 0x6c, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x20, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x21, 0x3d, 0x20, - 0x35, 0x30, 0x31, 0x20, 0x29, 0x20, 0x24, 0x28, 0x20, 0x27, 0x23, 0x64, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x27, - 0x20, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, 0x22, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x20, 0x67, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x20, - 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x2e, 0x22, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, - 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x64, - 0x61, 0x74, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, - 0x20, 0x2e, 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, 0x28, 0x20, 0x66, 0x75, - 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, - 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, - 0x20, 0x67, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x73, 0x20, 0x29, 0x20, 0x67, 0x65, 0x74, 0x54, 0x66, 0x74, 0x4d, 0x61, - 0x78, 0x42, 0x72, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x28, - 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x66, - 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x54, - 0x66, 0x74, 0x4d, 0x61, 0x78, 0x42, 0x72, 0x69, 0x67, 0x68, 0x74, 0x6e, - 0x65, 0x73, 0x73, 0x28, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x24, 0x2e, 0x67, - 0x65, 0x74, 0x28, 0x20, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, - 0x74, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x3f, 0x74, 0x66, 0x74, 0x62, - 0x72, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x3d, 0x22, 0x29, - 0x0a, 0x20, 0x20, 0x2e, 0x64, 0x6f, 0x6e, 0x65, 0x28, 0x20, 0x66, 0x75, - 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, - 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, - 0x74, 0x66, 0x74, 0x42, 0x72, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x65, 0x73, - 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x27, 0x29, 0x2e, 0x68, 0x74, 0x6d, - 0x6c, 0x28, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x49, 0x6e, 0x74, 0x28, - 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x20, 0x2b, 0x20, 0x22, 0x25, - 0x22, 0x20, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, - 0x27, 0x23, 0x74, 0x66, 0x74, 0x42, 0x72, 0x69, 0x67, 0x68, 0x74, 0x6e, - 0x65, 0x73, 0x73, 0x53, 0x6c, 0x69, 0x64, 0x65, 0x72, 0x27, 0x29, 0x2e, - 0x76, 0x61, 0x6c, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x3b, - 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x66, 0x61, 0x69, - 0x6c, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, - 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x69, 0x66, 0x20, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x35, 0x30, 0x31, - 0x20, 0x29, 0x20, 0x24, 0x28, 0x20, 0x27, 0x23, 0x64, 0x65, 0x76, 0x69, + 0x20, 0x20, 0x20, 0x24, 0x28, 0x20, 0x27, 0x23, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x27, 0x20, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, 0x22, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x20, 0x67, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x66, 0x74, - 0x20, 0x62, 0x72, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x2e, - 0x22, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, - 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, - 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x20, 0x67, - 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, - 0x29, 0x20, 0x67, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x5a, 0x6f, 0x6e, - 0x65, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x7d, - 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x67, 0x65, - 0x74, 0x54, 0x69, 0x6d, 0x65, 0x5a, 0x6f, 0x6e, 0x65, 0x28, 0x29, 0x7b, - 0x0a, 0x20, 0x20, 0x24, 0x2e, 0x67, 0x65, 0x74, 0x28, 0x20, 0x22, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x74, 0x64, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x3f, 0x74, 0x69, 0x6d, 0x65, 0x7a, 0x6f, 0x6e, 0x65, 0x3d, 0x22, - 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x64, 0x6f, 0x6e, 0x65, 0x28, 0x20, 0x66, - 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, - 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, - 0x23, 0x74, 0x69, 0x6d, 0x65, 0x5a, 0x6f, 0x6e, 0x65, 0x54, 0x65, 0x78, - 0x74, 0x42, 0x6f, 0x78, 0x27, 0x29, 0x2e, 0x76, 0x61, 0x6c, 0x28, 0x20, - 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, - 0x0a, 0x20, 0x20, 0x2e, 0x66, 0x61, 0x69, 0x6c, 0x28, 0x20, 0x66, 0x75, - 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, - 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x20, 0x27, - 0x23, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x27, 0x20, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, 0x64, - 0x61, 0x74, 0x61, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x65, - 0x78, 0x74, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, - 0x20, 0x2e, 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, 0x28, 0x20, 0x66, 0x75, - 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, - 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, - 0x20, 0x67, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x73, 0x20, 0x29, 0x20, 0x67, 0x65, 0x74, 0x4c, 0x69, 0x67, 0x68, 0x74, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, - 0x7d, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x28, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x24, + 0x20, 0x67, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x6c, 0x69, 0x67, + 0x68, 0x74, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x22, 0x20, 0x29, + 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x61, 0x6c, + 0x77, 0x61, 0x79, 0x73, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x20, 0x67, 0x65, 0x74, + 0x41, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x29, 0x20, + 0x67, 0x65, 0x74, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x73, 0x28, 0x29, + 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x66, 0x75, + 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x53, 0x65, + 0x6e, 0x73, 0x6f, 0x72, 0x73, 0x28, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x24, 0x2e, 0x67, 0x65, 0x74, 0x28, 0x20, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x67, 0x65, 0x74, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x3f, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x3d, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x64, + 0x67, 0x65, 0x74, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x3f, 0x73, 0x65, + 0x6e, 0x73, 0x6f, 0x72, 0x73, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x64, 0x6f, 0x6e, 0x65, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x69, 0x74, 0x65, 0x6d, 0x20, - 0x3d, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x73, 0x70, 0x6c, 0x69, 0x74, - 0x28, 0x27, 0x5c, 0x6e, 0x27, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x24, 0x28, 0x27, 0x23, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x27, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, - 0x69, 0x74, 0x65, 0x6d, 0x5b, 0x36, 0x5d, 0x20, 0x29, 0x3b, 0x0a, 0x20, - 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x66, 0x61, 0x69, 0x6c, 0x28, - 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, - 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, - 0x28, 0x20, 0x27, 0x23, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x27, 0x20, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, - 0x28, 0x20, 0x22, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x67, 0x65, 0x74, - 0x74, 0x69, 0x6e, 0x67, 0x20, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x2e, 0x22, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, - 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, - 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, - 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x69, 0x66, 0x20, 0x28, 0x20, 0x67, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x29, 0x20, 0x67, 0x65, 0x74, 0x53, - 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x73, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, - 0x7d, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, - 0x73, 0x28, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x24, 0x2e, 0x67, 0x65, 0x74, - 0x28, 0x20, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x74, 0x64, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x3f, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, - 0x73, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x64, 0x6f, 0x6e, 0x65, 0x28, - 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x64, 0x61, - 0x74, 0x61, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, - 0x20, 0x69, 0x74, 0x65, 0x6d, 0x3d, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x73, - 0x70, 0x6c, 0x69, 0x74, 0x28, 0x27, 0x5c, 0x6e, 0x27, 0x29, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x73, 0x65, 0x6e, 0x73, - 0x6f, 0x72, 0x3d, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x77, 0x68, - 0x69, 0x6c, 0x65, 0x28, 0x69, 0x74, 0x65, 0x6d, 0x5b, 0x73, 0x65, 0x6e, - 0x73, 0x6f, 0x72, 0x5d, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x76, 0x61, 0x72, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x41, 0x72, 0x72, - 0x61, 0x79, 0x3d, 0x69, 0x74, 0x65, 0x6d, 0x5b, 0x73, 0x65, 0x6e, 0x73, - 0x6f, 0x72, 0x5d, 0x2e, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x28, 0x27, 0x2c, - 0x27, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, - 0x72, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x74, 0x65, 0x6d, 0x70, 0x41, - 0x72, 0x72, 0x61, 0x79, 0x5b, 0x30, 0x5d, 0x3b, 0x76, 0x61, 0x72, 0x20, - 0x74, 0x65, 0x6d, 0x70, 0x3d, 0x74, 0x65, 0x6d, 0x70, 0x41, 0x72, 0x72, - 0x61, 0x79, 0x5b, 0x31, 0x5d, 0x3b, 0x76, 0x61, 0x72, 0x20, 0x73, 0x65, - 0x6e, 0x73, 0x6f, 0x72, 0x69, 0x64, 0x3d, 0x74, 0x65, 0x6d, 0x70, 0x41, - 0x72, 0x72, 0x61, 0x79, 0x5b, 0x32, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x69, 0x66, 0x28, 0x74, 0x65, 0x6d, 0x70, 0x21, 0x3d, - 0x22, 0x6e, 0x61, 0x6e, 0x22, 0x29, 0x74, 0x65, 0x6d, 0x70, 0x2b, 0x3d, - 0x22, 0xc2, 0xb0, 0x43, 0x22, 0x3b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x2f, 0x2f, 0x54, 0x4f, 0x44, 0x4f, 0x3a, 0x20, 0x72, 0x6f, 0x75, - 0x6e, 0x64, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x2e, 0x73, - 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x2e, 0x69, - 0x74, 0x65, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x27, 0x29, 0x2e, 0x65, 0x71, - 0x28, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x29, 0x2e, 0x63, 0x73, 0x73, - 0x28, 0x22, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, - 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x2c, 0x22, 0x72, 0x65, 0x64, - 0x22, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x74, 0x65, 0x6d, 0x70, 0x20, 0x3d, 0x20, 0x22, 0x45, 0x52, 0x52, 0x4f, - 0x52, 0x21, 0x22, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x2e, 0x73, - 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x2e, 0x69, - 0x74, 0x65, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x27, 0x29, 0x2e, 0x65, 0x71, - 0x28, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x29, 0x2e, 0x68, 0x74, 0x6d, - 0x6c, 0x28, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x73, 0x65, 0x6e, - 0x73, 0x6f, 0x72, 0x69, 0x64, 0x29, 0x2e, 0x74, 0x6f, 0x55, 0x70, 0x70, - 0x65, 0x72, 0x43, 0x61, 0x73, 0x65, 0x28, 0x29, 0x2b, 0x22, 0x20, 0x2d, - 0x20, 0x22, 0x2b, 0x74, 0x65, 0x6d, 0x70, 0x29, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x2e, 0x73, 0x65, 0x6e, 0x73, - 0x6f, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x27, + 0x6e, 0x28, 0x64, 0x61, 0x74, 0x61, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x76, 0x61, 0x72, 0x20, 0x69, 0x74, 0x65, 0x6d, 0x3d, 0x64, 0x61, + 0x74, 0x61, 0x2e, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x28, 0x27, 0x5c, 0x6e, + 0x27, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, + 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x3d, 0x30, 0x3b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x28, 0x69, 0x74, 0x65, 0x6d, + 0x5b, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x5d, 0x29, 0x7b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x74, 0x65, 0x6d, + 0x70, 0x41, 0x72, 0x72, 0x61, 0x79, 0x3d, 0x69, 0x74, 0x65, 0x6d, 0x5b, + 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x5d, 0x2e, 0x73, 0x70, 0x6c, 0x69, + 0x74, 0x28, 0x27, 0x2c, 0x27, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x74, + 0x65, 0x6d, 0x70, 0x41, 0x72, 0x72, 0x61, 0x79, 0x5b, 0x30, 0x5d, 0x3b, + 0x76, 0x61, 0x72, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x3d, 0x74, 0x65, 0x6d, + 0x70, 0x41, 0x72, 0x72, 0x61, 0x79, 0x5b, 0x31, 0x5d, 0x3b, 0x76, 0x61, + 0x72, 0x20, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x69, 0x64, 0x3d, 0x74, + 0x65, 0x6d, 0x70, 0x41, 0x72, 0x72, 0x61, 0x79, 0x5b, 0x32, 0x5d, 0x3b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x28, 0x74, 0x65, + 0x6d, 0x70, 0x21, 0x3d, 0x22, 0x6e, 0x61, 0x6e, 0x22, 0x29, 0x74, 0x65, + 0x6d, 0x70, 0x2b, 0x3d, 0x22, 0xc2, 0xb0, 0x43, 0x22, 0x3b, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x54, 0x4f, 0x44, 0x4f, 0x3a, + 0x20, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x65, + 0x6d, 0x70, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, + 0x65, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x24, + 0x28, 0x27, 0x2e, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x6e, 0x61, 0x6d, + 0x65, 0x20, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x27, 0x29, 0x2e, 0x65, 0x71, 0x28, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x29, - 0x2e, 0x76, 0x61, 0x6c, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x2e, 0x73, 0x65, - 0x6e, 0x73, 0x6f, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x27, 0x29, 0x2e, 0x65, - 0x71, 0x28, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x29, 0x2e, 0x73, 0x68, - 0x6f, 0x77, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x2b, 0x2b, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, - 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x27, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x22, 0x22, 0x29, 0x3b, - 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x66, 0x61, 0x69, - 0x6c, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, - 0x7b, 0x24, 0x28, 0x27, 0x23, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x27, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, - 0x28, 0x22, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x67, 0x65, 0x74, 0x74, - 0x69, 0x6e, 0x67, 0x20, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x73, 0x2e, - 0x22, 0x29, 0x3b, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x61, 0x6c, 0x77, - 0x61, 0x79, 0x73, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x28, 0x29, 0x7b, 0x69, 0x66, 0x28, 0x67, 0x65, 0x74, 0x41, 0x6c, 0x6c, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x29, 0x67, 0x65, 0x74, 0x57, 0x69, - 0x66, 0x69, 0x53, 0x53, 0x49, 0x44, 0x28, 0x29, 0x7d, 0x29, 0x3b, 0x0a, - 0x7d, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x67, - 0x65, 0x74, 0x57, 0x69, 0x66, 0x69, 0x53, 0x53, 0x49, 0x44, 0x28, 0x29, - 0x7b, 0x0a, 0x20, 0x20, 0x24, 0x2e, 0x67, 0x65, 0x74, 0x28, 0x20, 0x22, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x74, 0x64, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x3f, 0x77, 0x69, 0x66, 0x69, 0x73, 0x73, 0x69, 0x64, 0x3d, - 0x22, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x64, 0x6f, 0x6e, 0x65, 0x28, 0x20, - 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, - 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, - 0x27, 0x23, 0x77, 0x69, 0x66, 0x69, 0x73, 0x73, 0x69, 0x64, 0x27, 0x29, - 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, 0x22, 0x57, 0x49, 0x46, 0x49, - 0x20, 0x4e, 0x45, 0x54, 0x57, 0x4f, 0x52, 0x4b, 0x3a, 0x20, 0x22, 0x20, - 0x2b, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, - 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x66, 0x61, 0x69, 0x6c, 0x28, 0x20, - 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, - 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, - 0x20, 0x27, 0x23, 0x77, 0x69, 0x66, 0x69, 0x73, 0x73, 0x69, 0x64, 0x27, - 0x20, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, 0x22, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x20, 0x67, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x20, - 0x77, 0x69, 0x66, 0x69, 0x20, 0x53, 0x53, 0x49, 0x44, 0x3a, 0x20, 0x22, - 0x20, 0x2b, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x54, 0x65, 0x78, 0x74, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, - 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, - 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, - 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x69, 0x66, 0x28, 0x67, 0x65, + 0x2e, 0x63, 0x73, 0x73, 0x28, 0x22, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, + 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x2c, + 0x22, 0x72, 0x65, 0x64, 0x22, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x20, 0x3d, 0x20, 0x22, + 0x45, 0x52, 0x52, 0x4f, 0x52, 0x21, 0x22, 0x3b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x24, + 0x28, 0x27, 0x2e, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x6e, 0x61, 0x6d, + 0x65, 0x20, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x27, + 0x29, 0x2e, 0x65, 0x71, 0x28, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x29, + 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x28, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x69, 0x64, 0x29, 0x2e, 0x74, + 0x6f, 0x55, 0x70, 0x70, 0x65, 0x72, 0x43, 0x61, 0x73, 0x65, 0x28, 0x29, + 0x2b, 0x22, 0x20, 0x2d, 0x20, 0x22, 0x2b, 0x74, 0x65, 0x6d, 0x70, 0x29, + 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x2e, + 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x6e, + 0x70, 0x75, 0x74, 0x27, 0x29, 0x2e, 0x65, 0x71, 0x28, 0x73, 0x65, 0x6e, + 0x73, 0x6f, 0x72, 0x29, 0x2e, 0x76, 0x61, 0x6c, 0x28, 0x6e, 0x61, 0x6d, + 0x65, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, + 0x27, 0x2e, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x6e, 0x61, 0x6d, 0x65, + 0x27, 0x29, 0x2e, 0x65, 0x71, 0x28, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, + 0x29, 0x2e, 0x73, 0x68, 0x6f, 0x77, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x2b, 0x2b, + 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x24, 0x28, 0x27, 0x23, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x27, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, + 0x22, 0x22, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, + 0x2e, 0x66, 0x61, 0x69, 0x6c, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x28, 0x29, 0x7b, 0x24, 0x28, 0x27, 0x23, 0x64, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x27, 0x29, 0x2e, + 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x22, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x20, + 0x67, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x65, 0x6e, 0x73, + 0x6f, 0x72, 0x73, 0x2e, 0x22, 0x29, 0x3b, 0x7d, 0x29, 0x0a, 0x20, 0x20, + 0x2e, 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, 0x28, 0x66, 0x75, 0x6e, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x7b, 0x69, 0x66, 0x28, 0x67, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x29, 0x67, - 0x65, 0x74, 0x42, 0x6f, 0x6f, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x28, 0x29, - 0x3b, 0x7d, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x42, 0x6f, 0x6f, 0x74, 0x54, - 0x69, 0x6d, 0x65, 0x28, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x24, 0x2e, 0x67, - 0x65, 0x74, 0x28, 0x20, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, - 0x74, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x3f, 0x62, 0x6f, 0x6f, 0x74, - 0x74, 0x69, 0x6d, 0x65, 0x3d, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x64, - 0x6f, 0x6e, 0x65, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, 0x62, 0x6f, 0x6f, 0x74, 0x54, - 0x69, 0x6d, 0x65, 0x27, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, - 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, - 0x0a, 0x20, 0x20, 0x2e, 0x66, 0x61, 0x69, 0x6c, 0x28, 0x20, 0x66, 0x75, - 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, - 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x20, 0x27, - 0x23, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x27, 0x20, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, 0x22, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x67, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x20, 0x62, 0x6f, 0x6f, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x3a, 0x20, - 0x22, 0x20, 0x2b, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x54, 0x65, 0x78, 0x74, 0x20, 0x29, 0x3b, 0x0a, 0x20, - 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x61, 0x6c, 0x77, 0x61, 0x79, - 0x73, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, - 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x69, 0x66, 0x20, 0x28, - 0x20, 0x67, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x73, 0x20, 0x29, 0x20, 0x67, 0x65, 0x74, 0x44, 0x69, 0x73, 0x6b, 0x53, - 0x70, 0x61, 0x63, 0x65, 0x28, 0x29, 0x3b, 0x7d, 0x29, 0x3b, 0x0a, 0x7d, - 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x67, 0x65, - 0x74, 0x44, 0x69, 0x73, 0x6b, 0x53, 0x70, 0x61, 0x63, 0x65, 0x28, 0x29, - 0x7b, 0x0a, 0x20, 0x20, 0x24, 0x2e, 0x67, 0x65, 0x74, 0x28, 0x20, 0x22, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x74, 0x64, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x3f, 0x64, 0x69, 0x73, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x3d, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x64, 0x6f, 0x6e, 0x65, 0x28, - 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, - 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, - 0x28, 0x27, 0x23, 0x64, 0x69, 0x73, 0x6b, 0x53, 0x70, 0x61, 0x63, 0x65, - 0x42, 0x61, 0x72, 0x27, 0x29, 0x2e, 0x73, 0x68, 0x6f, 0x77, 0x28, 0x29, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, 0x66, 0x72, - 0x65, 0x65, 0x44, 0x69, 0x73, 0x6b, 0x53, 0x70, 0x61, 0x63, 0x65, 0x27, - 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, 0x66, 0x6f, 0x72, 0x6d, - 0x61, 0x74, 0x42, 0x79, 0x74, 0x65, 0x73, 0x28, 0x20, 0x64, 0x61, 0x74, - 0x61, 0x20, 0x29, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, - 0x20, 0x20, 0x2e, 0x66, 0x61, 0x69, 0x6c, 0x28, 0x20, 0x66, 0x75, 0x6e, + 0x65, 0x74, 0x57, 0x69, 0x66, 0x69, 0x53, 0x53, 0x49, 0x44, 0x28, 0x29, + 0x7d, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x57, 0x69, 0x66, 0x69, 0x53, 0x53, + 0x49, 0x44, 0x28, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x24, 0x2e, 0x67, 0x65, + 0x74, 0x28, 0x20, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x74, + 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x3f, 0x77, 0x69, 0x66, 0x69, 0x73, + 0x73, 0x69, 0x64, 0x3d, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x64, 0x6f, + 0x6e, 0x65, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, 0x77, 0x69, 0x66, 0x69, 0x73, 0x73, + 0x69, 0x64, 0x27, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, 0x22, + 0x57, 0x49, 0x46, 0x49, 0x20, 0x4e, 0x45, 0x54, 0x57, 0x4f, 0x52, 0x4b, + 0x3a, 0x20, 0x22, 0x20, 0x2b, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, + 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x66, 0x61, + 0x69, 0x6c, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x24, 0x28, 0x20, 0x27, 0x23, 0x77, 0x69, 0x66, 0x69, 0x73, + 0x73, 0x69, 0x64, 0x27, 0x20, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, + 0x20, 0x22, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x67, 0x65, 0x74, 0x74, + 0x69, 0x6e, 0x67, 0x20, 0x77, 0x69, 0x66, 0x69, 0x20, 0x53, 0x53, 0x49, + 0x44, 0x3a, 0x20, 0x22, 0x20, 0x2b, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2e, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x65, 0x78, 0x74, 0x20, 0x29, + 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x61, 0x6c, + 0x77, 0x61, 0x79, 0x73, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x69, + 0x66, 0x28, 0x67, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x73, 0x29, 0x67, 0x65, 0x74, 0x42, 0x6f, 0x6f, 0x74, 0x54, 0x69, + 0x6d, 0x65, 0x28, 0x29, 0x3b, 0x7d, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x66, + 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x42, + 0x6f, 0x6f, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x28, 0x29, 0x7b, 0x0a, 0x20, + 0x20, 0x24, 0x2e, 0x67, 0x65, 0x74, 0x28, 0x20, 0x22, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x67, 0x65, 0x74, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x3f, + 0x62, 0x6f, 0x6f, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x3d, 0x22, 0x29, 0x0a, + 0x20, 0x20, 0x2e, 0x64, 0x6f, 0x6e, 0x65, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, - 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x20, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, - 0x21, 0x3d, 0x20, 0x35, 0x30, 0x31, 0x20, 0x29, 0x20, 0x24, 0x28, 0x20, - 0x27, 0x23, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x27, 0x20, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, - 0x22, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x67, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 0x20, 0x64, 0x69, 0x73, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x3a, 0x20, 0x22, 0x20, 0x2b, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x72, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x65, 0x78, 0x74, 0x20, + 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, 0x62, + 0x6f, 0x6f, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x27, 0x29, 0x2e, 0x68, 0x74, + 0x6d, 0x6c, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x3b, 0x0a, + 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x66, 0x61, 0x69, 0x6c, + 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, + 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x24, 0x28, 0x20, 0x27, 0x23, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x27, 0x20, 0x29, 0x2e, 0x68, 0x74, 0x6d, + 0x6c, 0x28, 0x20, 0x22, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x67, 0x65, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x62, 0x6f, 0x6f, 0x74, 0x74, 0x69, + 0x6d, 0x65, 0x3a, 0x20, 0x22, 0x20, 0x2b, 0x20, 0x64, 0x61, 0x74, 0x61, + 0x2e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x65, 0x78, 0x74, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x69, 0x66, 0x20, 0x28, 0x20, 0x67, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x29, 0x20, 0x67, 0x65, 0x74, 0x50, - 0x77, 0x6d, 0x44, 0x65, 0x70, 0x74, 0x68, 0x28, 0x29, 0x3b, 0x7d, 0x29, - 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x67, 0x65, 0x74, 0x50, 0x77, 0x6d, 0x44, 0x65, 0x70, 0x74, - 0x68, 0x28, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x24, 0x2e, 0x67, 0x65, 0x74, - 0x28, 0x20, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x74, 0x64, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x3f, 0x70, 0x77, 0x6d, 0x64, 0x65, 0x70, - 0x74, 0x68, 0x3d, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x64, 0x6f, 0x6e, - 0x65, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, - 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x24, 0x28, 0x27, 0x23, 0x70, 0x77, 0x6d, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x27, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, 0x64, - 0x61, 0x74, 0x61, 0x20, 0x2b, 0x20, 0x22, 0x62, 0x69, 0x74, 0x20, 0x2d, - 0x20, 0x22, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, - 0x2e, 0x66, 0x61, 0x69, 0x6c, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x20, 0x27, 0x23, 0x64, 0x65, - 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x27, 0x20, - 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, 0x22, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x20, 0x67, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x70, - 0x77, 0x6d, 0x64, 0x65, 0x70, 0x74, 0x68, 0x20, 0x22, 0x20, 0x2b, 0x20, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x54, 0x65, 0x78, 0x74, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, - 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, 0x28, + 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x29, 0x20, 0x67, 0x65, 0x74, 0x44, + 0x69, 0x73, 0x6b, 0x53, 0x70, 0x61, 0x63, 0x65, 0x28, 0x29, 0x3b, 0x7d, + 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x20, 0x67, 0x65, 0x74, 0x44, 0x69, 0x73, 0x6b, 0x53, 0x70, 0x61, + 0x63, 0x65, 0x28, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x24, 0x2e, 0x67, 0x65, + 0x74, 0x28, 0x20, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x74, + 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x3f, 0x64, 0x69, 0x73, 0x6b, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x64, + 0x6f, 0x6e, 0x65, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, 0x64, 0x69, 0x73, 0x6b, 0x53, + 0x70, 0x61, 0x63, 0x65, 0x42, 0x61, 0x72, 0x27, 0x29, 0x2e, 0x73, 0x68, + 0x6f, 0x77, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, + 0x27, 0x23, 0x66, 0x72, 0x65, 0x65, 0x44, 0x69, 0x73, 0x6b, 0x53, 0x70, + 0x61, 0x63, 0x65, 0x27, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, + 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x42, 0x79, 0x74, 0x65, 0x73, 0x28, + 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x20, 0x29, 0x3b, 0x0a, 0x20, + 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x66, 0x61, 0x69, 0x6c, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, - 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x69, 0x66, 0x20, 0x28, 0x20, 0x67, - 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, - 0x29, 0x20, 0x67, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x28, 0x29, 0x3b, 0x7d, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x66, 0x75, 0x6e, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x24, + 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, + 0x66, 0x20, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x35, 0x30, 0x31, 0x20, 0x29, + 0x20, 0x24, 0x28, 0x20, 0x27, 0x23, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x27, 0x20, 0x29, 0x2e, 0x68, 0x74, + 0x6d, 0x6c, 0x28, 0x20, 0x22, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x67, + 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x69, 0x73, 0x6b, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x3a, 0x20, 0x22, 0x20, 0x2b, 0x20, 0x64, 0x61, + 0x74, 0x61, 0x2e, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, + 0x65, 0x78, 0x74, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, + 0x20, 0x20, 0x2e, 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, 0x28, 0x20, 0x66, + 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, + 0x61, 0x20, 0x29, 0x7b, 0x69, 0x66, 0x20, 0x28, 0x20, 0x67, 0x65, 0x74, + 0x41, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x29, 0x20, + 0x67, 0x65, 0x74, 0x50, 0x77, 0x6d, 0x44, 0x65, 0x70, 0x74, 0x68, 0x28, + 0x29, 0x3b, 0x7d, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x66, 0x75, 0x6e, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x50, 0x77, 0x6d, + 0x44, 0x65, 0x70, 0x74, 0x68, 0x28, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x24, 0x2e, 0x67, 0x65, 0x74, 0x28, 0x20, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x67, 0x65, 0x74, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x3f, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x2e, - 0x64, 0x6f, 0x6e, 0x65, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x27, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, - 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x76, 0x61, 0x72, 0x20, 0x73, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, - 0x66, 0x20, 0x28, 0x20, 0x21, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x73, 0x75, - 0x62, 0x73, 0x74, 0x72, 0x28, 0x20, 0x30, 0x2c, 0x20, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x28, 0x22, 0x2d, 0x22, - 0x29, 0x20, 0x29, 0x20, 0x29, 0x20, 0x73, 0x6b, 0x65, 0x74, 0x63, 0x68, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x64, 0x61, - 0x74, 0x61, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, - 0x20, 0x73, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x73, 0x75, - 0x62, 0x73, 0x74, 0x72, 0x28, 0x20, 0x30, 0x2c, 0x20, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x28, 0x22, 0x2d, 0x22, - 0x29, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x2e, 0x67, - 0x65, 0x74, 0x4a, 0x53, 0x4f, 0x4e, 0x28, 0x22, 0x68, 0x74, 0x74, 0x70, - 0x73, 0x3a, 0x2f, 0x2f, 0x61, 0x70, 0x69, 0x2e, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, - 0x2f, 0x43, 0x65, 0x6c, 0x6c, 0x69, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x73, 0x2f, 0x61, 0x71, 0x75, 0x61, 0x63, 0x6f, 0x6e, - 0x74, 0x72, 0x6f, 0x6c, 0x33, 0x32, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x73, 0x2f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x22, 0x2c, - 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x64, 0x61, - 0x74, 0x61, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x29, 0x20, - 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, - 0x20, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x3d, 0x3d, 0x3d, - 0x20, 0x22, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0x20, 0x26, - 0x26, 0x20, 0x73, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x20, 0x21, 0x3d, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2e, - 0x74, 0x61, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x29, 0x20, 0x24, - 0x28, 0x20, 0x27, 0x23, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x27, - 0x20, 0x29, 0x2e, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x28, 0x20, 0x27, - 0x20, 0x2d, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, - 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x65, 0x6c, 0x6c, 0x69, 0x65, - 0x73, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x61, 0x71, - 0x75, 0x61, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x33, 0x32, 0x2f, - 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x6c, 0x61, 0x74, - 0x65, 0x73, 0x74, 0x22, 0x20, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x3d, 0x22, 0x5f, 0x62, 0x6c, 0x61, 0x6e, 0x6b, 0x22, 0x3e, 0x4c, 0x61, - 0x74, 0x65, 0x73, 0x74, 0x20, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, - 0x20, 0x27, 0x20, 0x2b, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x74, 0x61, - 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x2b, 0x20, 0x22, 0x20, 0x6f, - 0x6e, 0x20, 0x47, 0x69, 0x74, 0x48, 0x75, 0x62, 0x2e, 0x3c, 0x2f, 0x61, - 0x3e, 0x22, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x29, - 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x66, 0x61, - 0x69, 0x6c, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x24, 0x28, 0x20, 0x27, 0x23, 0x64, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x27, 0x20, 0x29, 0x2e, 0x68, - 0x74, 0x6d, 0x6c, 0x28, 0x20, 0x22, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x20, - 0x67, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x22, 0x20, 0x2b, 0x20, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x65, - 0x78, 0x74, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, - 0x20, 0x2e, 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, 0x28, 0x20, 0x66, 0x75, - 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, - 0x20, 0x29, 0x7b, 0x69, 0x66, 0x20, 0x28, 0x20, 0x67, 0x65, 0x74, 0x41, - 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x29, 0x20, 0x67, - 0x65, 0x74, 0x50, 0x77, 0x6d, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, - 0x63, 0x79, 0x28, 0x29, 0x3b, 0x7d, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x66, - 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x50, - 0x77, 0x6d, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x28, - 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x24, 0x2e, 0x67, 0x65, 0x74, 0x28, 0x20, - 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x74, 0x64, 0x65, 0x76, - 0x69, 0x63, 0x65, 0x3f, 0x70, 0x77, 0x6d, 0x66, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x6e, 0x63, 0x79, 0x3d, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x67, 0x65, 0x74, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x3f, 0x70, 0x77, + 0x6d, 0x64, 0x65, 0x70, 0x74, 0x68, 0x3d, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x64, 0x6f, 0x6e, 0x65, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, 0x70, - 0x77, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x27, 0x29, 0x2e, 0x61, - 0x70, 0x70, 0x65, 0x6e, 0x64, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, - 0x2b, 0x20, 0x22, 0x48, 0x7a, 0x22, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x66, 0x61, 0x69, - 0x6c, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, - 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x24, 0x28, 0x20, 0x27, 0x23, 0x64, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x27, 0x20, 0x29, 0x2e, - 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, 0x22, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x20, 0x67, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x70, 0x77, 0x6d, - 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x3a, 0x20, 0x22, - 0x20, 0x2b, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x72, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x65, 0x78, 0x74, 0x20, 0x29, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2e, - 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, - 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x67, 0x65, 0x74, 0x41, - 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x66, - 0x61, 0x6c, 0x73, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x24, 0x28, 0x27, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x27, 0x29, 0x2e, 0x70, - 0x72, 0x6f, 0x70, 0x28, 0x27, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, - 0x64, 0x27, 0x2c, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x29, 0x3b, 0x20, - 0x2f, 0x2a, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x66, 0x69, 0x6e, 0x61, 0x6c, - 0x6c, 0x79, 0x20, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x20, 0x61, 0x67, 0x61, - 0x69, 0x6e, 0x20, 0x2a, 0x2f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x24, 0x28, 0x27, 0x62, 0x6f, 0x64, 0x79, 0x27, 0x29, 0x2e, 0x63, 0x73, - 0x73, 0x28, 0x27, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x27, 0x2c, - 0x27, 0x31, 0x27, 0x29, 0x3b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x2f, 0x2a, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x68, 0x6f, 0x77, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x70, 0x61, 0x67, 0x65, 0x20, 0x2a, 0x2f, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x20, 0x20, - 0x2f, 0x2a, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x68, 0x61, 0x6e, - 0x64, 0x6c, 0x65, 0x72, 0x73, 0x20, 0x2a, 0x2f, 0x0a, 0x24, 0x28, 0x27, - 0x23, 0x74, 0x69, 0x6d, 0x65, 0x5a, 0x6f, 0x6e, 0x65, 0x54, 0x65, 0x78, - 0x74, 0x42, 0x6f, 0x78, 0x2c, 0x20, 0x23, 0x68, 0x6f, 0x73, 0x74, 0x4e, - 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x2c, 0x20, 0x23, 0x70, - 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x49, 0x6e, 0x70, 0x75, 0x74, - 0x2c, 0x20, 0x2e, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x4e, 0x61, 0x6d, - 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x27, 0x29, 0x2e, 0x6f, 0x6e, 0x28, - 0x27, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x27, 0x2c, 0x20, 0x66, 0x75, 0x6e, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, - 0x24, 0x28, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x29, 0x2e, 0x63, 0x73, - 0x73, 0x28, 0x7b, 0x27, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, - 0x6e, 0x64, 0x27, 0x3a, 0x27, 0x79, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x27, - 0x7d, 0x29, 0x3b, 0x0a, 0x7d, 0x29, 0x3b, 0x0a, 0x24, 0x28, 0x27, 0x69, - 0x6e, 0x70, 0x75, 0x74, 0x27, 0x29, 0x2e, 0x6f, 0x6e, 0x28, 0x20, 0x27, - 0x69, 0x6e, 0x70, 0x75, 0x74, 0x27, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x24, - 0x28, 0x27, 0x23, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x27, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x27, - 0x27, 0x29, 0x3b, 0x0a, 0x7d, 0x29, 0x3b, 0x0a, 0x24, 0x28, 0x27, 0x69, - 0x6e, 0x70, 0x75, 0x74, 0x5b, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x62, - 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x22, 0x5d, 0x27, 0x29, 0x2e, 0x6f, 0x6e, - 0x28, 0x20, 0x27, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x27, 0x2c, 0x20, 0x66, - 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x20, 0x7b, 0x0a, - 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, 0x70, 0x77, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x27, 0x29, 0x2e, 0x68, 0x74, 0x6d, - 0x6c, 0x28, 0x27, 0x27, 0x29, 0x3b, 0x0a, 0x7d, 0x29, 0x3b, 0x0a, 0x24, - 0x28, 0x27, 0x23, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x49, - 0x6e, 0x70, 0x75, 0x74, 0x27, 0x29, 0x2e, 0x6f, 0x6e, 0x28, 0x27, 0x63, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x27, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, - 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x28, 0x22, 0x59, 0x6f, 0x75, 0x20, - 0x61, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x74, 0x6f, - 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x20, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, - 0x72, 0x64, 0x2e, 0x5c, 0x6e, 0x41, 0x72, 0x65, 0x20, 0x79, 0x6f, 0x75, - 0x20, 0x73, 0x75, 0x72, 0x65, 0x3f, 0x22, 0x29, 0x20, 0x29, 0x20, 0x7b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, - 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x24, 0x2e, 0x70, 0x6f, 0x73, - 0x74, 0x28, 0x20, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x74, - 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x7b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, - 0x64, 0x20, 0x3a, 0x20, 0x24, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x2e, - 0x76, 0x61, 0x6c, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, - 0x20, 0x2e, 0x64, 0x6f, 0x6e, 0x65, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x20, 0x27, 0x23, 0x64, 0x65, - 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x27, 0x20, - 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, - 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, - 0x66, 0x61, 0x69, 0x6c, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, 0x70, 0x61, 0x73, 0x73, 0x77, - 0x6f, 0x72, 0x64, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x27, 0x29, 0x2e, 0x63, - 0x73, 0x73, 0x28, 0x7b, 0x27, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, - 0x75, 0x6e, 0x64, 0x27, 0x3a, 0x27, 0x72, 0x65, 0x64, 0x27, 0x7d, 0x29, - 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x7d, 0x29, 0x3b, 0x0a, - 0x24, 0x28, 0x27, 0x23, 0x6f, 0x6c, 0x65, 0x64, 0x4f, 0x72, 0x69, 0x65, - 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6c, 0x69, 0x64, 0x65, - 0x72, 0x27, 0x29, 0x2e, 0x6f, 0x6e, 0x28, 0x27, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x27, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x28, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x29, 0x20, 0x7b, - 0x0a, 0x20, 0x20, 0x24, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x2e, 0x76, - 0x61, 0x6c, 0x28, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x20, 0x20, 0x3f, - 0x20, 0x24, 0x28, 0x27, 0x23, 0x6f, 0x6c, 0x65, 0x64, 0x4f, 0x72, 0x69, - 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x27, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, 0x27, 0x75, - 0x70, 0x73, 0x69, 0x64, 0x65, 0x64, 0x6f, 0x77, 0x6e, 0x27, 0x20, 0x29, - 0x3a, 0x20, 0x24, 0x28, 0x27, 0x23, 0x6f, 0x6c, 0x65, 0x64, 0x4f, 0x72, - 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x27, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, 0x27, - 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x27, 0x20, 0x29, 0x3b, 0x0a, 0x20, - 0x20, 0x24, 0x2e, 0x70, 0x6f, 0x73, 0x74, 0x28, 0x20, 0x22, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x73, 0x65, 0x74, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, - 0x6c, 0x65, 0x64, 0x6f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x3a, 0x20, 0x24, 0x28, 0x27, 0x23, 0x6f, 0x6c, 0x65, - 0x64, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x27, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, - 0x28, 0x29, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x64, - 0x6f, 0x6e, 0x65, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x28, 0x64, 0x61, 0x74, 0x61, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x24, 0x28, 0x27, 0x23, 0x6f, 0x6c, 0x65, 0x64, 0x4f, 0x72, 0x69, - 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x27, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, 0x64, 0x61, - 0x74, 0x61, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, - 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x20, 0x64, - 0x61, 0x74, 0x61, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, - 0x20, 0x20, 0x2e, 0x66, 0x61, 0x69, 0x6c, 0x28, 0x66, 0x75, 0x6e, 0x63, + 0x6c, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x2b, 0x20, 0x22, 0x62, + 0x69, 0x74, 0x20, 0x2d, 0x20, 0x22, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, + 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x66, 0x61, 0x69, 0x6c, 0x28, 0x20, 0x66, + 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, + 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x20, + 0x27, 0x23, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x27, 0x20, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, + 0x22, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x67, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x20, 0x70, 0x77, 0x6d, 0x64, 0x65, 0x70, 0x74, 0x68, 0x20, + 0x22, 0x20, 0x2b, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x72, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x65, 0x78, 0x74, 0x20, 0x29, 0x3b, + 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x61, 0x6c, 0x77, + 0x61, 0x79, 0x73, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x69, 0x66, + 0x20, 0x28, 0x20, 0x67, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x73, 0x20, 0x29, 0x20, 0x67, 0x65, 0x74, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x3b, 0x7d, 0x29, 0x3b, 0x0a, 0x7d, + 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x67, 0x65, + 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x0a, 0x7b, + 0x0a, 0x20, 0x20, 0x24, 0x2e, 0x67, 0x65, 0x74, 0x28, 0x20, 0x22, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x74, 0x64, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x3f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x29, + 0x0a, 0x20, 0x20, 0x2e, 0x64, 0x6f, 0x6e, 0x65, 0x28, 0x20, 0x66, 0x75, + 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, + 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x27, 0x29, 0x2e, 0x68, 0x74, + 0x6d, 0x6c, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x3b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x73, 0x6b, 0x65, 0x74, + 0x63, 0x68, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x20, 0x21, 0x64, 0x61, 0x74, + 0x61, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x28, 0x20, 0x30, 0x2c, + 0x20, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x28, 0x22, 0x2d, 0x22, 0x29, 0x20, 0x29, 0x20, 0x29, 0x20, 0x73, 0x6b, + 0x65, 0x74, 0x63, 0x68, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, + 0x3d, 0x20, 0x64, 0x61, 0x74, 0x61, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x65, 0x6c, 0x73, 0x65, 0x20, 0x73, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x56, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x64, 0x61, 0x74, + 0x61, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x28, 0x20, 0x30, 0x2c, + 0x20, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x28, 0x22, 0x2d, 0x22, 0x29, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x24, 0x2e, 0x67, 0x65, 0x74, 0x4a, 0x53, 0x4f, 0x4e, 0x28, 0x22, + 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x61, 0x70, 0x69, 0x2e, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x72, + 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x43, 0x65, 0x6c, 0x6c, 0x69, 0x65, 0x73, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x61, 0x71, 0x75, + 0x61, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x33, 0x32, 0x2f, 0x72, + 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x6c, 0x61, 0x74, 0x65, + 0x73, 0x74, 0x22, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x28, 0x64, 0x61, 0x74, 0x61, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x69, 0x66, 0x20, 0x28, 0x20, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x22, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x22, 0x20, 0x26, 0x26, 0x20, 0x73, 0x6b, 0x65, 0x74, 0x63, 0x68, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x21, 0x3d, 0x20, 0x64, + 0x61, 0x74, 0x61, 0x2e, 0x74, 0x61, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x20, 0x29, 0x20, 0x24, 0x28, 0x20, 0x27, 0x23, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x27, 0x20, 0x29, 0x2e, 0x61, 0x70, 0x70, 0x65, 0x6e, + 0x64, 0x28, 0x20, 0x27, 0x20, 0x2d, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, + 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x65, + 0x6c, 0x6c, 0x69, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x73, 0x2f, 0x61, 0x71, 0x75, 0x61, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, + 0x6c, 0x33, 0x32, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, + 0x2f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x22, 0x20, 0x20, 0x74, 0x61, + 0x72, 0x67, 0x65, 0x74, 0x3d, 0x22, 0x5f, 0x62, 0x6c, 0x61, 0x6e, 0x6b, + 0x22, 0x3e, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x20, 0x72, 0x65, 0x6c, + 0x65, 0x61, 0x73, 0x65, 0x20, 0x27, 0x20, 0x2b, 0x20, 0x64, 0x61, 0x74, + 0x61, 0x2e, 0x74, 0x61, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x2b, + 0x20, 0x22, 0x20, 0x6f, 0x6e, 0x20, 0x47, 0x69, 0x74, 0x48, 0x75, 0x62, + 0x2e, 0x3c, 0x2f, 0x61, 0x3e, 0x22, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, + 0x20, 0x2e, 0x66, 0x61, 0x69, 0x6c, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, - 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, - 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, - 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x67, 0x65, 0x74, 0x4f, 0x6c, - 0x65, 0x64, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x7d, - 0x29, 0x3b, 0x0a, 0x24, 0x28, 0x27, 0x23, 0x74, 0x66, 0x74, 0x4f, 0x72, - 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6c, 0x69, - 0x64, 0x65, 0x72, 0x27, 0x29, 0x2e, 0x6f, 0x6e, 0x28, 0x27, 0x63, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x27, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x29, - 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x20, 0x24, 0x28, - 0x74, 0x68, 0x69, 0x73, 0x29, 0x2e, 0x76, 0x61, 0x6c, 0x28, 0x29, 0x20, - 0x3d, 0x3d, 0x20, 0x30, 0x20, 0x29, 0x20, 0x24, 0x28, 0x27, 0x23, 0x74, - 0x66, 0x74, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x27, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x27, 0x6e, 0x6f, - 0x72, 0x6d, 0x61, 0x6c, 0x27, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x69, 0x66, - 0x20, 0x28, 0x20, 0x24, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x2e, 0x76, - 0x61, 0x6c, 0x28, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x20, 0x29, 0x20, - 0x24, 0x28, 0x27, 0x23, 0x74, 0x66, 0x74, 0x4f, 0x72, 0x69, 0x65, 0x6e, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x27, 0x29, 0x2e, 0x68, 0x74, 0x6d, - 0x6c, 0x28, 0x27, 0x75, 0x70, 0x73, 0x69, 0x64, 0x65, 0x64, 0x6f, 0x77, - 0x6e, 0x27, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x24, 0x2e, 0x70, 0x6f, 0x73, - 0x74, 0x28, 0x20, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x74, - 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x7b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x66, 0x74, 0x6f, 0x72, 0x69, 0x65, - 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3a, 0x20, 0x24, 0x28, - 0x27, 0x23, 0x74, 0x66, 0x74, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x27, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, - 0x29, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x64, 0x6f, - 0x6e, 0x65, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, - 0x64, 0x61, 0x74, 0x61, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x24, 0x28, 0x27, 0x23, 0x74, 0x66, 0x74, 0x4f, 0x72, 0x69, 0x65, 0x6e, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x27, 0x29, 0x2e, 0x68, 0x74, 0x6d, - 0x6c, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x0a, 0x20, 0x20, - 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x66, 0x61, 0x69, 0x6c, 0x28, 0x66, + 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x20, 0x27, 0x23, 0x64, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x27, + 0x20, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, 0x22, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x20, 0x67, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x20, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x22, 0x20, 0x2b, + 0x20, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x54, 0x65, 0x78, 0x74, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, + 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, + 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, + 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x69, 0x66, 0x20, 0x28, 0x20, + 0x67, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, + 0x20, 0x29, 0x20, 0x67, 0x65, 0x74, 0x50, 0x77, 0x6d, 0x46, 0x72, 0x65, + 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x28, 0x29, 0x3b, 0x7d, 0x29, 0x3b, + 0x0a, 0x7d, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, + 0x67, 0x65, 0x74, 0x50, 0x77, 0x6d, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, + 0x6e, 0x63, 0x79, 0x28, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x24, 0x2e, 0x67, + 0x65, 0x74, 0x28, 0x20, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, + 0x74, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x3f, 0x70, 0x77, 0x6d, 0x66, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x3d, 0x22, 0x29, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x2e, 0x64, 0x6f, 0x6e, 0x65, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, - 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x67, 0x65, 0x74, - 0x54, 0x66, 0x74, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a, - 0x7d, 0x29, 0x3b, 0x0a, 0x24, 0x28, 0x27, 0x23, 0x6c, 0x69, 0x67, 0x68, - 0x74, 0x73, 0x4f, 0x6e, 0x27, 0x29, 0x2e, 0x6f, 0x6e, 0x28, 0x27, 0x63, - 0x6c, 0x69, 0x63, 0x6b, 0x27, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x24, 0x2e, - 0x70, 0x6f, 0x73, 0x74, 0x28, 0x20, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x73, 0x65, 0x74, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x22, 0x2c, 0x0a, - 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x69, 0x67, 0x68, - 0x74, 0x73, 0x6f, 0x6e, 0x20, 0x3a, 0x20, 0x22, 0x22, 0x0a, 0x20, 0x20, - 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x64, 0x6f, 0x6e, 0x65, 0x28, 0x66, - 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x64, 0x61, 0x74, 0x61, - 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, - 0x6c, 0x69, 0x67, 0x68, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x27, - 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, - 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, - 0x66, 0x61, 0x69, 0x6c, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x24, 0x28, 0x20, 0x27, 0x23, 0x64, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x27, 0x20, 0x29, 0x2e, - 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x65, 0x78, 0x74, 0x20, 0x20, 0x29, - 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x7d, 0x29, 0x3b, 0x0a, - 0x24, 0x28, 0x27, 0x23, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x73, 0x4f, 0x66, - 0x66, 0x27, 0x29, 0x2e, 0x6f, 0x6e, 0x28, 0x27, 0x63, 0x6c, 0x69, 0x63, - 0x6b, 0x27, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x28, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x24, 0x2e, 0x70, 0x6f, 0x73, - 0x74, 0x28, 0x20, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x74, - 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x7b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x73, 0x6f, - 0x66, 0x66, 0x20, 0x3a, 0x20, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x7d, 0x29, - 0x0a, 0x20, 0x20, 0x2e, 0x64, 0x6f, 0x6e, 0x65, 0x28, 0x66, 0x75, 0x6e, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x64, 0x61, 0x74, 0x61, 0x29, 0x20, - 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, 0x6c, 0x69, - 0x67, 0x68, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x27, 0x29, 0x2e, - 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, - 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x66, 0x61, - 0x69, 0x6c, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, - 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x24, 0x28, 0x20, 0x27, 0x23, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x27, 0x20, 0x29, 0x2e, 0x68, 0x74, - 0x6d, 0x6c, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x54, 0x65, 0x78, 0x74, 0x20, 0x20, 0x29, 0x3b, 0x0a, - 0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x7d, 0x29, 0x3b, 0x0a, 0x24, 0x28, - 0x27, 0x23, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x73, 0x50, 0x72, 0x6f, 0x67, - 0x72, 0x61, 0x6d, 0x27, 0x29, 0x2e, 0x6f, 0x6e, 0x28, 0x27, 0x63, 0x6c, - 0x69, 0x63, 0x6b, 0x27, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x28, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x24, 0x2e, 0x70, - 0x6f, 0x73, 0x74, 0x28, 0x20, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, - 0x65, 0x74, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x22, 0x2c, 0x0a, 0x20, - 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x69, 0x67, 0x68, 0x74, - 0x73, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x20, 0x3a, 0x20, 0x22, - 0x22, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x64, 0x6f, - 0x6e, 0x65, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, - 0x64, 0x61, 0x74, 0x61, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x24, 0x28, 0x27, 0x23, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x27, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, - 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, - 0x0a, 0x20, 0x20, 0x2e, 0x66, 0x61, 0x69, 0x6c, 0x28, 0x66, 0x75, 0x6e, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, - 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x20, 0x27, 0x23, + 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x24, + 0x28, 0x27, 0x23, 0x70, 0x77, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x27, 0x29, 0x2e, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x28, 0x20, 0x64, + 0x61, 0x74, 0x61, 0x20, 0x2b, 0x20, 0x22, 0x48, 0x7a, 0x22, 0x29, 0x3b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x2e, 0x66, 0x61, 0x69, 0x6c, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x20, 0x27, 0x23, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x27, 0x20, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x65, 0x78, - 0x74, 0x20, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a, - 0x7d, 0x29, 0x3b, 0x0a, 0x24, 0x28, 0x27, 0x23, 0x68, 0x6f, 0x73, 0x74, - 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x27, 0x29, 0x2e, + 0x27, 0x20, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, 0x22, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x20, 0x67, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x20, 0x70, 0x77, 0x6d, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, + 0x79, 0x3a, 0x20, 0x22, 0x20, 0x2b, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2e, + 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x65, 0x78, 0x74, + 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x2e, 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, 0x28, 0x20, + 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, + 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x67, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, + 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x69, 0x6e, 0x70, 0x75, 0x74, + 0x27, 0x29, 0x2e, 0x70, 0x72, 0x6f, 0x70, 0x28, 0x27, 0x64, 0x69, 0x73, + 0x61, 0x62, 0x6c, 0x65, 0x64, 0x27, 0x2c, 0x20, 0x66, 0x61, 0x6c, 0x73, + 0x65, 0x29, 0x3b, 0x20, 0x2f, 0x2a, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x66, + 0x69, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x65, 0x6e, 0x61, 0x62, 0x6c, + 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, + 0x20, 0x61, 0x67, 0x61, 0x69, 0x6e, 0x20, 0x2a, 0x2f, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x62, 0x6f, 0x64, 0x79, 0x27, + 0x29, 0x2e, 0x63, 0x73, 0x73, 0x28, 0x27, 0x6f, 0x70, 0x61, 0x63, 0x69, + 0x74, 0x79, 0x27, 0x2c, 0x27, 0x31, 0x27, 0x29, 0x3b, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, + 0x68, 0x6f, 0x77, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x61, 0x67, 0x65, + 0x20, 0x2a, 0x2f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a, + 0x7d, 0x0a, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, + 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x73, 0x20, 0x2a, 0x2f, + 0x0a, 0x24, 0x28, 0x27, 0x23, 0x74, 0x69, 0x6d, 0x65, 0x5a, 0x6f, 0x6e, + 0x65, 0x54, 0x65, 0x78, 0x74, 0x42, 0x6f, 0x78, 0x2c, 0x20, 0x23, 0x68, + 0x6f, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, + 0x2c, 0x20, 0x23, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x49, + 0x6e, 0x70, 0x75, 0x74, 0x2c, 0x20, 0x2e, 0x73, 0x65, 0x6e, 0x73, 0x6f, + 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x27, 0x29, + 0x2e, 0x6f, 0x6e, 0x28, 0x27, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x27, 0x2c, + 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x20, + 0x7b, 0x0a, 0x20, 0x20, 0x24, 0x28, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, + 0x29, 0x2e, 0x63, 0x73, 0x73, 0x28, 0x7b, 0x27, 0x62, 0x61, 0x63, 0x6b, + 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x27, 0x3a, 0x27, 0x79, 0x65, 0x6c, + 0x6c, 0x6f, 0x77, 0x27, 0x7d, 0x29, 0x3b, 0x0a, 0x7d, 0x29, 0x3b, 0x0a, + 0x24, 0x28, 0x27, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x27, 0x29, 0x2e, 0x6f, + 0x6e, 0x28, 0x20, 0x27, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x27, 0x2c, 0x20, + 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x20, 0x7b, + 0x0a, 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, 0x64, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x27, 0x29, 0x2e, 0x68, 0x74, + 0x6d, 0x6c, 0x28, 0x27, 0x27, 0x29, 0x3b, 0x0a, 0x7d, 0x29, 0x3b, 0x0a, + 0x24, 0x28, 0x27, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5b, 0x74, 0x79, 0x70, + 0x65, 0x3d, 0x22, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x22, 0x5d, 0x27, + 0x29, 0x2e, 0x6f, 0x6e, 0x28, 0x20, 0x27, 0x63, 0x6c, 0x69, 0x63, 0x6b, + 0x27, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, + 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, 0x64, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x27, 0x29, + 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x27, 0x27, 0x29, 0x3b, 0x0a, 0x7d, + 0x29, 0x3b, 0x0a, 0x24, 0x28, 0x27, 0x23, 0x62, 0x6f, 0x6f, 0x74, 0x6c, + 0x6f, 0x67, 0x27, 0x29, 0x2e, 0x6f, 0x6e, 0x28, 0x27, 0x63, 0x6c, 0x69, + 0x63, 0x6b, 0x27, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x28, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x69, 0x66, 0x28, + 0x22, 0x4f, 0x46, 0x46, 0x22, 0x3d, 0x3d, 0x24, 0x28, 0x74, 0x68, 0x69, + 0x73, 0x29, 0x2e, 0x76, 0x61, 0x6c, 0x28, 0x29, 0x29, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3d, 0x22, 0x4f, 0x4e, 0x22, 0x3b, 0x0a, 0x20, 0x20, 0x65, + 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x28, 0x22, 0x4f, 0x4e, 0x22, 0x3d, + 0x3d, 0x24, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x2e, 0x76, 0x61, 0x6c, + 0x28, 0x29, 0x29, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x4f, 0x46, + 0x46, 0x22, 0x3b, 0x0a, 0x20, 0x20, 0x24, 0x2e, 0x70, 0x6f, 0x73, 0x74, + 0x28, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x74, 0x64, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x22, 0x2c, 0x7b, 0x62, 0x6f, 0x6f, 0x74, 0x6c, + 0x6f, 0x67, 0x3a, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x29, 0x0a, 0x20, + 0x20, 0x2e, 0x64, 0x6f, 0x6e, 0x65, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x28, 0x64, 0x61, 0x74, 0x61, 0x29, 0x7b, 0x24, 0x28, + 0x27, 0x23, 0x62, 0x6f, 0x6f, 0x74, 0x6c, 0x6f, 0x67, 0x27, 0x29, 0x2e, + 0x76, 0x61, 0x6c, 0x28, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x7d, 0x29, + 0x0a, 0x20, 0x20, 0x2e, 0x66, 0x61, 0x69, 0x6c, 0x28, 0x66, 0x75, 0x6e, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x64, 0x61, 0x74, 0x61, 0x29, 0x7b, + 0x24, 0x28, 0x27, 0x23, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x27, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, + 0x64, 0x61, 0x74, 0x61, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, + 0x65, 0x78, 0x74, 0x29, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x61, 0x6c, + 0x77, 0x61, 0x79, 0x73, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x28, 0x64, 0x61, 0x74, 0x61, 0x29, 0x7b, 0x7d, 0x29, 0x3b, 0x0a, + 0x7d, 0x29, 0x3b, 0x0a, 0x24, 0x28, 0x27, 0x23, 0x70, 0x61, 0x73, 0x73, + 0x77, 0x6f, 0x72, 0x64, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x27, 0x29, 0x2e, 0x6f, 0x6e, 0x28, 0x27, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x27, 0x2c, - 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, - 0x61, 0x74, 0x61, 0x20, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x24, 0x28, - 0x27, 0x23, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x27, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x22, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x65, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x68, 0x6f, 0x73, 0x74, - 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x22, 0x20, 0x2b, 0x20, 0x24, 0x28, 0x74, - 0x68, 0x69, 0x73, 0x29, 0x2e, 0x76, 0x61, 0x6c, 0x28, 0x29, 0x20, 0x2b, - 0x20, 0x22, 0x2e, 0x2e, 0x2e, 0x22, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, + 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x20, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x69, + 0x66, 0x20, 0x28, 0x21, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x28, + 0x22, 0x59, 0x6f, 0x75, 0x20, 0x61, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, + 0x75, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x20, 0x70, + 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x2e, 0x5c, 0x6e, 0x41, 0x72, + 0x65, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x73, 0x75, 0x72, 0x65, 0x3f, 0x22, + 0x29, 0x20, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, + 0x74, 0x75, 0x72, 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x24, 0x2e, 0x70, 0x6f, 0x73, 0x74, 0x28, 0x20, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x74, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x22, - 0x2c, 0x0a, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x68, 0x6f, - 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3a, 0x20, 0x24, 0x28, 0x74, + 0x2c, 0x0a, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, + 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x20, 0x3a, 0x20, 0x24, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x2e, 0x76, 0x61, 0x6c, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x64, 0x6f, 0x6e, 0x65, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x20, 0x27, 0x23, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x27, 0x20, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, - 0x20, 0x22, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x63, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x2e, 0x20, 0x3c, 0x61, 0x20, 0x68, - 0x72, 0x65, 0x66, 0x3d, 0x5c, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, - 0x2f, 0x22, 0x20, 0x2b, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x2b, 0x20, - 0x22, 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5c, 0x22, 0x3e, 0x43, 0x6c, - 0x69, 0x63, 0x6b, 0x20, 0x68, 0x65, 0x72, 0x65, 0x20, 0x74, 0x6f, 0x20, - 0x67, 0x6f, 0x20, 0x74, 0x6f, 0x20, 0x22, 0x20, 0x2b, 0x20, 0x64, 0x61, - 0x74, 0x61, 0x20, 0x2b, 0x20, 0x22, 0x3c, 0x2f, 0x61, 0x3e, 0x22, 0x29, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x20, 0x27, 0x23, 0x68, - 0x6f, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, - 0x27, 0x20, 0x29, 0x2e, 0x63, 0x73, 0x73, 0x28, 0x7b, 0x27, 0x62, 0x61, - 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x27, 0x3a, 0x27, 0x6c, - 0x69, 0x67, 0x68, 0x74, 0x67, 0x72, 0x65, 0x65, 0x6e, 0x27, 0x7d, 0x29, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x20, 0x27, 0x23, 0x68, - 0x6f, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x27, 0x29, 0x2e, 0x68, 0x74, - 0x6d, 0x6c, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x3b, 0x0a, + 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, + 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x66, 0x61, 0x69, 0x6c, 0x28, 0x66, 0x75, + 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, + 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, + 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x49, 0x6e, 0x70, 0x75, + 0x74, 0x27, 0x29, 0x2e, 0x63, 0x73, 0x73, 0x28, 0x7b, 0x27, 0x62, 0x61, + 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x27, 0x3a, 0x27, 0x72, + 0x65, 0x64, 0x27, 0x7d, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x3b, + 0x0a, 0x7d, 0x29, 0x3b, 0x0a, 0x24, 0x28, 0x27, 0x23, 0x6f, 0x6c, 0x65, + 0x64, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x6c, 0x69, 0x64, 0x65, 0x72, 0x27, 0x29, 0x2e, 0x6f, 0x6e, 0x28, + 0x27, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x27, 0x2c, 0x20, 0x66, 0x75, + 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x65, 0x76, 0x65, 0x6e, + 0x74, 0x20, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x24, 0x28, 0x74, 0x68, + 0x69, 0x73, 0x29, 0x2e, 0x76, 0x61, 0x6c, 0x28, 0x29, 0x20, 0x3d, 0x3d, + 0x20, 0x31, 0x20, 0x20, 0x3f, 0x20, 0x24, 0x28, 0x27, 0x23, 0x6f, 0x6c, + 0x65, 0x64, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x27, 0x29, 0x2e, 0x68, 0x74, 0x6d, + 0x6c, 0x28, 0x20, 0x27, 0x75, 0x70, 0x73, 0x69, 0x64, 0x65, 0x64, 0x6f, + 0x77, 0x6e, 0x27, 0x20, 0x29, 0x3a, 0x20, 0x24, 0x28, 0x27, 0x23, 0x6f, + 0x6c, 0x65, 0x64, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x27, 0x29, 0x2e, 0x68, 0x74, + 0x6d, 0x6c, 0x28, 0x20, 0x27, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x27, + 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x24, 0x2e, 0x70, 0x6f, 0x73, 0x74, + 0x28, 0x20, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x74, 0x64, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x7b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x6f, 0x6c, 0x65, 0x64, 0x6f, 0x72, 0x69, 0x65, + 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3a, 0x20, 0x24, 0x28, + 0x27, 0x23, 0x6f, 0x6c, 0x65, 0x64, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x27, 0x29, + 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x7d, 0x29, + 0x0a, 0x20, 0x20, 0x2e, 0x64, 0x6f, 0x6e, 0x65, 0x28, 0x66, 0x75, 0x6e, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x64, 0x61, 0x74, 0x61, 0x29, 0x20, + 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, 0x6f, 0x6c, + 0x65, 0x64, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x27, 0x29, 0x2e, 0x68, 0x74, 0x6d, + 0x6c, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, + 0x6f, 0x67, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x66, 0x61, 0x69, 0x6c, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x24, 0x28, 0x20, 0x27, 0x23, 0x68, 0x6f, 0x73, 0x74, 0x4e, 0x61, 0x6d, - 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x27, 0x20, 0x29, 0x2e, 0x63, 0x73, - 0x73, 0x28, 0x7b, 0x27, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, - 0x6e, 0x64, 0x27, 0x3a, 0x27, 0x72, 0x65, 0x64, 0x27, 0x7d, 0x29, 0x3b, - 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x7d, 0x29, 0x3b, 0x0a, 0x24, - 0x28, 0x27, 0x23, 0x6f, 0x6c, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x72, - 0x61, 0x73, 0x74, 0x53, 0x6c, 0x69, 0x64, 0x65, 0x72, 0x27, 0x29, 0x2e, - 0x6f, 0x6e, 0x28, 0x27, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x27, 0x2c, 0x20, + 0x67, 0x65, 0x74, 0x4f, 0x6c, 0x65, 0x64, 0x4f, 0x72, 0x69, 0x65, 0x6e, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, + 0x7d, 0x29, 0x3b, 0x0a, 0x7d, 0x29, 0x3b, 0x0a, 0x24, 0x28, 0x27, 0x23, + 0x74, 0x66, 0x74, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x53, 0x6c, 0x69, 0x64, 0x65, 0x72, 0x27, 0x29, 0x2e, 0x6f, + 0x6e, 0x28, 0x27, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x27, 0x2c, 0x20, + 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x20, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x69, 0x66, + 0x20, 0x28, 0x20, 0x24, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x2e, 0x76, + 0x61, 0x6c, 0x28, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x20, 0x29, 0x20, + 0x24, 0x28, 0x27, 0x23, 0x74, 0x66, 0x74, 0x4f, 0x72, 0x69, 0x65, 0x6e, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x27, 0x29, 0x2e, 0x68, 0x74, 0x6d, + 0x6c, 0x28, 0x27, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x27, 0x29, 0x3b, + 0x0a, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x20, 0x24, 0x28, 0x74, 0x68, + 0x69, 0x73, 0x29, 0x2e, 0x76, 0x61, 0x6c, 0x28, 0x29, 0x20, 0x3d, 0x3d, + 0x20, 0x31, 0x20, 0x29, 0x20, 0x24, 0x28, 0x27, 0x23, 0x74, 0x66, 0x74, + 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x27, + 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x27, 0x75, 0x70, 0x73, 0x69, + 0x64, 0x65, 0x64, 0x6f, 0x77, 0x6e, 0x27, 0x29, 0x3b, 0x0a, 0x20, 0x20, + 0x24, 0x2e, 0x70, 0x6f, 0x73, 0x74, 0x28, 0x20, 0x22, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x73, 0x65, 0x74, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x22, + 0x2c, 0x0a, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x66, + 0x74, 0x6f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x20, 0x3a, 0x20, 0x24, 0x28, 0x27, 0x23, 0x74, 0x66, 0x74, 0x4f, 0x72, + 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x27, 0x29, 0x2e, + 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, + 0x20, 0x20, 0x2e, 0x64, 0x6f, 0x6e, 0x65, 0x28, 0x66, 0x75, 0x6e, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x64, 0x61, 0x74, 0x61, 0x29, 0x20, 0x7b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, 0x74, 0x66, 0x74, + 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x27, + 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, + 0x20, 0x29, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x66, + 0x61, 0x69, 0x6c, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x67, 0x65, 0x74, 0x54, 0x66, 0x74, 0x4f, 0x72, 0x69, 0x65, + 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x3b, 0x0a, 0x20, + 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x7d, 0x29, 0x3b, 0x0a, 0x24, 0x28, 0x27, + 0x23, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x73, 0x4f, 0x6e, 0x27, 0x29, 0x2e, + 0x6f, 0x6e, 0x28, 0x27, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x27, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x20, 0x7b, - 0x0a, 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, 0x6f, 0x6c, 0x65, 0x64, 0x43, - 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x27, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, 0x24, 0x28, 0x74, - 0x68, 0x69, 0x73, 0x29, 0x2e, 0x76, 0x61, 0x6c, 0x28, 0x29, 0x20, 0x29, - 0x3b, 0x0a, 0x7d, 0x29, 0x3b, 0x0a, 0x24, 0x28, 0x27, 0x23, 0x6f, 0x6c, - 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x73, 0x74, 0x53, 0x6c, - 0x69, 0x64, 0x65, 0x72, 0x27, 0x29, 0x2e, 0x6f, 0x6e, 0x28, 0x27, 0x63, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x27, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x24, - 0x2e, 0x70, 0x6f, 0x73, 0x74, 0x28, 0x20, 0x22, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x73, 0x65, 0x74, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x22, 0x2c, - 0x0a, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x6c, 0x65, - 0x64, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x73, 0x74, 0x20, 0x3a, 0x20, - 0x24, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x2e, 0x76, 0x61, 0x6c, 0x28, - 0x29, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x64, 0x6f, - 0x6e, 0x65, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, - 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x24, 0x28, 0x27, 0x23, 0x6f, 0x6c, 0x65, 0x64, 0x43, 0x6f, 0x6e, - 0x74, 0x72, 0x61, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x27, 0x29, - 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, - 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, 0x6f, - 0x6c, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x73, 0x74, 0x53, - 0x6c, 0x69, 0x64, 0x65, 0x72, 0x27, 0x29, 0x2e, 0x76, 0x61, 0x6c, 0x28, + 0x0a, 0x20, 0x20, 0x24, 0x2e, 0x70, 0x6f, 0x73, 0x74, 0x28, 0x20, 0x22, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x74, 0x64, 0x65, 0x76, 0x69, + 0x63, 0x65, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x73, 0x6f, 0x6e, 0x20, 0x3a, 0x20, + 0x22, 0x22, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x64, + 0x6f, 0x6e, 0x65, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x28, 0x64, 0x61, 0x74, 0x61, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x24, 0x28, 0x27, 0x23, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x27, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x66, 0x61, 0x69, 0x6c, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, - 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x67, 0x65, 0x74, 0x4f, - 0x6c, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x73, 0x74, 0x28, - 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x7d, 0x29, 0x3b, - 0x0a, 0x24, 0x28, 0x27, 0x23, 0x74, 0x66, 0x74, 0x42, 0x72, 0x69, 0x67, - 0x68, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x53, 0x6c, 0x69, 0x64, 0x65, 0x72, - 0x27, 0x29, 0x2e, 0x6f, 0x6e, 0x28, 0x27, 0x69, 0x6e, 0x70, 0x75, 0x74, - 0x27, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, - 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, 0x74, 0x66, - 0x74, 0x42, 0x72, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x27, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, - 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x49, 0x6e, 0x74, 0x28, 0x20, 0x24, - 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x2e, 0x76, 0x61, 0x6c, 0x28, 0x29, - 0x20, 0x29, 0x20, 0x2b, 0x20, 0x22, 0x25, 0x22, 0x20, 0x29, 0x3b, 0x0a, - 0x7d, 0x29, 0x3b, 0x0a, 0x24, 0x28, 0x27, 0x23, 0x74, 0x66, 0x74, 0x42, - 0x72, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x53, 0x6c, 0x69, - 0x64, 0x65, 0x72, 0x27, 0x29, 0x2e, 0x6f, 0x6e, 0x28, 0x27, 0x63, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x27, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x24, 0x2e, - 0x70, 0x6f, 0x73, 0x74, 0x28, 0x20, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x73, 0x65, 0x74, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x22, 0x2c, 0x0a, - 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x66, 0x74, 0x62, - 0x72, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x20, 0x3a, 0x20, - 0x24, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x2e, 0x76, 0x61, 0x6c, 0x28, - 0x29, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x64, 0x6f, - 0x6e, 0x65, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, - 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x24, 0x28, 0x27, 0x23, 0x74, 0x66, 0x74, 0x42, 0x72, 0x69, 0x67, - 0x68, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x53, 0x6c, 0x69, 0x64, 0x65, 0x72, - 0x27, 0x29, 0x2e, 0x76, 0x61, 0x6c, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, - 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, - 0x66, 0x61, 0x69, 0x6c, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x67, 0x65, 0x74, 0x54, 0x66, 0x74, 0x4d, 0x61, 0x78, - 0x42, 0x72, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x28, 0x29, - 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x7d, 0x29, 0x3b, 0x0a, - 0x24, 0x28, 0x27, 0x23, 0x74, 0x69, 0x6d, 0x65, 0x5a, 0x6f, 0x6e, 0x65, - 0x54, 0x65, 0x78, 0x74, 0x42, 0x6f, 0x78, 0x27, 0x29, 0x2e, 0x6f, 0x6e, - 0x28, 0x27, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x27, 0x2c, 0x20, 0x66, - 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, - 0x61, 0x20, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x24, 0x2e, 0x70, 0x6f, - 0x73, 0x74, 0x28, 0x20, 0x27, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, - 0x74, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x27, 0x2c, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x69, - 0x6d, 0x65, 0x7a, 0x6f, 0x6e, 0x65, 0x3a, 0x20, 0x24, 0x28, 0x74, 0x68, - 0x69, 0x73, 0x29, 0x2e, 0x76, 0x61, 0x6c, 0x28, 0x29, 0x2c, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x64, - 0x6f, 0x6e, 0x65, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x20, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, 0x74, 0x69, 0x6d, - 0x65, 0x5a, 0x6f, 0x6e, 0x65, 0x54, 0x65, 0x78, 0x74, 0x42, 0x6f, 0x78, - 0x27, 0x29, 0x2e, 0x63, 0x73, 0x73, 0x28, 0x20, 0x7b, 0x27, 0x62, 0x61, - 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x27, 0x3a, 0x27, 0x6c, - 0x69, 0x67, 0x68, 0x74, 0x67, 0x72, 0x65, 0x65, 0x6e, 0x27, 0x7d, 0x20, - 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, + 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x20, 0x27, 0x23, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x27, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, 0x27, 0x54, - 0x69, 0x6d, 0x65, 0x7a, 0x6f, 0x6e, 0x65, 0x20, 0x73, 0x65, 0x74, 0x20, - 0x74, 0x6f, 0x20, 0x27, 0x20, 0x2b, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, - 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, + 0x73, 0x27, 0x20, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, 0x64, + 0x61, 0x74, 0x61, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x65, + 0x78, 0x74, 0x20, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x3b, + 0x0a, 0x7d, 0x29, 0x3b, 0x0a, 0x24, 0x28, 0x27, 0x23, 0x6c, 0x69, 0x67, + 0x68, 0x74, 0x73, 0x4f, 0x66, 0x66, 0x27, 0x29, 0x2e, 0x6f, 0x6e, 0x28, + 0x27, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x27, 0x2c, 0x20, 0x66, 0x75, 0x6e, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, + 0x24, 0x2e, 0x70, 0x6f, 0x73, 0x74, 0x28, 0x20, 0x22, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x73, 0x65, 0x74, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x22, + 0x2c, 0x0a, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x69, + 0x67, 0x68, 0x74, 0x73, 0x6f, 0x66, 0x66, 0x20, 0x3a, 0x20, 0x22, 0x22, + 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x64, 0x6f, 0x6e, + 0x65, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x64, + 0x61, 0x74, 0x61, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, + 0x28, 0x27, 0x23, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x27, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, 0x64, + 0x61, 0x74, 0x61, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x66, 0x61, 0x69, 0x6c, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, - 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, - 0x23, 0x74, 0x69, 0x6d, 0x65, 0x5a, 0x6f, 0x6e, 0x65, 0x54, 0x65, 0x78, - 0x74, 0x42, 0x6f, 0x78, 0x27, 0x29, 0x2e, 0x63, 0x73, 0x73, 0x28, 0x20, - 0x7b, 0x27, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, - 0x27, 0x3a, 0x27, 0x72, 0x65, 0x64, 0x27, 0x7d, 0x20, 0x29, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x7d, 0x29, 0x3b, 0x20, - 0x2f, 0x2a, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x20, 0x73, 0x65, 0x74, 0x75, 0x70, 0x20, 0x2a, - 0x2f, 0x0a, 0x24, 0x28, 0x27, 0x23, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, - 0x27, 0x29, 0x2e, 0x6f, 0x6e, 0x28, 0x27, 0x63, 0x6c, 0x69, 0x63, 0x6b, - 0x27, 0x2c, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x64, - 0x61, 0x74, 0x61, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x24, 0x2e, 0x70, 0x6f, - 0x73, 0x74, 0x28, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x74, - 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x7b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x6c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x20, - 0x3a, 0x20, 0x24, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x2e, 0x76, 0x61, - 0x6c, 0x28, 0x29, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x22, 0x4f, 0x46, 0x46, - 0x22, 0x20, 0x3f, 0x20, 0x22, 0x4f, 0x4e, 0x22, 0x20, 0x3a, 0x20, 0x22, - 0x4f, 0x46, 0x46, 0x22, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, - 0x2e, 0x64, 0x6f, 0x6e, 0x65, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x28, 0x64, 0x61, 0x74, 0x61, 0x29, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, 0x73, 0x65, 0x6e, 0x73, 0x6f, - 0x72, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4c, 0x6f, 0x67, 0x67, 0x69, 0x6e, - 0x67, 0x27, 0x29, 0x2e, 0x70, 0x72, 0x6f, 0x70, 0x28, 0x27, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x27, 0x2c, 0x64, 0x61, 0x74, 0x61, 0x29, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, 0x64, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x27, 0x29, 0x2e, 0x68, - 0x74, 0x6d, 0x6c, 0x28, 0x27, 0x53, 0x45, 0x4e, 0x53, 0x4f, 0x52, 0x20, - 0x45, 0x52, 0x52, 0x4f, 0x52, 0x20, 0x4c, 0x4f, 0x47, 0x47, 0x49, 0x4e, - 0x47, 0x20, 0x49, 0x53, 0x20, 0x4e, 0x4f, 0x57, 0x20, 0x27, 0x2b, 0x64, - 0x61, 0x74, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, - 0x20, 0x2e, 0x66, 0x61, 0x69, 0x6c, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x64, 0x61, 0x74, 0x61, 0x29, 0x7b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, 0x64, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x27, 0x29, 0x2e, 0x68, - 0x74, 0x6d, 0x6c, 0x28, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x54, 0x65, 0x78, 0x74, 0x29, 0x3b, 0x0a, 0x20, 0x20, - 0x7d, 0x29, 0x3b, 0x0a, 0x7d, 0x29, 0x3b, 0x0a, 0x24, 0x28, 0x27, 0x23, - 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x4c, 0x6f, 0x67, 0x67, 0x69, 0x6e, - 0x67, 0x27, 0x29, 0x2e, 0x6f, 0x6e, 0x28, 0x27, 0x63, 0x6c, 0x69, 0x63, - 0x6b, 0x27, 0x2c, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, - 0x64, 0x61, 0x74, 0x61, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x24, 0x2e, 0x70, - 0x6f, 0x73, 0x74, 0x28, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, - 0x74, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x22, 0x2c, 0x0a, 0x20, 0x20, - 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, - 0x6c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x20, 0x3a, 0x20, 0x24, 0x28, - 0x74, 0x68, 0x69, 0x73, 0x29, 0x2e, 0x76, 0x61, 0x6c, 0x28, 0x29, 0x20, - 0x3d, 0x3d, 0x3d, 0x20, 0x22, 0x4f, 0x46, 0x46, 0x22, 0x20, 0x3f, 0x20, - 0x22, 0x4f, 0x4e, 0x22, 0x20, 0x3a, 0x20, 0x22, 0x4f, 0x46, 0x46, 0x22, - 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x64, 0x6f, 0x6e, - 0x65, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, - 0x64, 0x61, 0x74, 0x61, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, - 0x28, 0x27, 0x23, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x4c, 0x6f, 0x67, - 0x67, 0x69, 0x6e, 0x67, 0x27, 0x29, 0x2e, 0x70, 0x72, 0x6f, 0x70, 0x28, - 0x27, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x27, 0x2c, 0x64, 0x61, 0x74, 0x61, - 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, 0x64, + 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x20, 0x27, 0x23, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x27, - 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x27, 0x53, 0x45, 0x4e, 0x53, - 0x4f, 0x52, 0x20, 0x4c, 0x4f, 0x47, 0x47, 0x49, 0x4e, 0x47, 0x20, 0x49, - 0x53, 0x20, 0x4e, 0x4f, 0x57, 0x20, 0x27, 0x2b, 0x64, 0x61, 0x74, 0x61, - 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x66, - 0x61, 0x69, 0x6c, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x28, 0x64, 0x61, 0x74, 0x61, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x24, 0x28, 0x27, 0x23, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x27, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, - 0x28, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x54, 0x65, 0x78, 0x74, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x3b, - 0x0a, 0x7d, 0x29, 0x3b, 0x0a, 0x24, 0x28, 0x27, 0x2e, 0x73, 0x65, 0x6e, - 0x73, 0x6f, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, - 0x27, 0x29, 0x2e, 0x6f, 0x6e, 0x28, 0x27, 0x63, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x27, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x20, 0x7b, 0x0a, 0x20, - 0x20, 0x76, 0x61, 0x72, 0x20, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x20, - 0x3d, 0x20, 0x24, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x2e, 0x69, 0x6e, - 0x64, 0x65, 0x78, 0x28, 0x27, 0x2e, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, - 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x27, 0x29, 0x3b, - 0x0a, 0x20, 0x20, 0x24, 0x2e, 0x70, 0x6f, 0x73, 0x74, 0x28, 0x20, 0x22, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x74, 0x64, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x20, + 0x20, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, 0x64, 0x61, 0x74, + 0x61, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x65, 0x78, 0x74, + 0x20, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x7d, + 0x29, 0x3b, 0x0a, 0x24, 0x28, 0x27, 0x23, 0x6c, 0x69, 0x67, 0x68, 0x74, + 0x73, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x27, 0x29, 0x2e, 0x6f, + 0x6e, 0x28, 0x27, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x27, 0x2c, 0x20, 0x66, + 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x20, 0x7b, 0x0a, + 0x20, 0x20, 0x24, 0x2e, 0x70, 0x6f, 0x73, 0x74, 0x28, 0x20, 0x22, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x74, 0x64, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x6c, 0x69, 0x67, 0x68, 0x74, 0x73, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, + 0x6d, 0x20, 0x3a, 0x20, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, + 0x20, 0x20, 0x2e, 0x64, 0x6f, 0x6e, 0x65, 0x28, 0x66, 0x75, 0x6e, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x64, 0x61, 0x74, 0x61, 0x29, 0x20, 0x7b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, 0x6c, 0x69, 0x67, + 0x68, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x27, 0x29, 0x2e, 0x68, + 0x74, 0x6d, 0x6c, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x3b, + 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x66, 0x61, 0x69, + 0x6c, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, + 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x24, 0x28, 0x20, 0x27, 0x23, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x27, 0x20, 0x29, 0x2e, 0x68, 0x74, 0x6d, + 0x6c, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x54, 0x65, 0x78, 0x74, 0x20, 0x20, 0x29, 0x3b, 0x0a, 0x20, + 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x7d, 0x29, 0x3b, 0x0a, 0x24, 0x28, 0x27, + 0x23, 0x68, 0x6f, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x70, + 0x75, 0x74, 0x27, 0x29, 0x2e, 0x6f, 0x6e, 0x28, 0x27, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x27, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x20, 0x7b, + 0x0a, 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, 0x64, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x27, 0x29, 0x2e, 0x68, 0x74, + 0x6d, 0x6c, 0x28, 0x22, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x67, + 0x20, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x66, 0x6f, 0x72, + 0x20, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x22, 0x20, + 0x2b, 0x20, 0x24, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x2e, 0x76, 0x61, + 0x6c, 0x28, 0x29, 0x20, 0x2b, 0x20, 0x22, 0x2e, 0x2e, 0x2e, 0x22, 0x20, + 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x24, 0x2e, 0x70, 0x6f, 0x73, 0x74, 0x28, + 0x20, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x74, 0x64, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x7b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3a, 0x20, 0x24, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x2e, 0x76, 0x61, - 0x6c, 0x28, 0x29, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x75, 0x6d, - 0x62, 0x65, 0x72, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x20, 0x73, 0x65, - 0x6e, 0x73, 0x6f, 0x72, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, - 0x2e, 0x64, 0x6f, 0x6e, 0x65, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x20, 0x27, 0x23, 0x64, 0x65, 0x76, - 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x27, 0x20, 0x29, - 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, 0x22, 0x53, 0x65, 0x6e, 0x73, - 0x6f, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x27, 0x22, 0x20, 0x2b, 0x20, 0x64, - 0x61, 0x74, 0x61, 0x20, 0x2b, 0x20, 0x22, 0x27, 0x22, 0x20, 0x29, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x20, 0x27, 0x2e, 0x73, 0x65, - 0x6e, 0x73, 0x6f, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x70, 0x75, - 0x74, 0x27, 0x20, 0x29, 0x2e, 0x65, 0x71, 0x28, 0x20, 0x73, 0x65, 0x6e, - 0x73, 0x6f, 0x72, 0x20, 0x29, 0x2e, 0x63, 0x73, 0x73, 0x28, 0x7b, 0x27, - 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x27, 0x3a, - 0x27, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x67, 0x72, 0x65, 0x65, 0x6e, 0x27, - 0x7d, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, - 0x66, 0x61, 0x69, 0x6c, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, + 0x6c, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, + 0x64, 0x6f, 0x6e, 0x65, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x24, 0x28, 0x20, 0x27, 0x2e, 0x73, 0x65, 0x6e, 0x73, - 0x6f, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x27, - 0x20, 0x29, 0x2e, 0x65, 0x71, 0x28, 0x20, 0x73, 0x65, 0x6e, 0x73, 0x6f, - 0x72, 0x20, 0x29, 0x2e, 0x63, 0x73, 0x73, 0x28, 0x7b, 0x27, 0x62, 0x61, - 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x27, 0x3a, 0x27, 0x72, - 0x65, 0x64, 0x27, 0x7d, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x3b, - 0x0a, 0x7d, 0x29, 0x3b, 0x0a, 0x24, 0x28, 0x27, 0x23, 0x73, 0x65, 0x6e, - 0x73, 0x6f, 0x72, 0x53, 0x63, 0x61, 0x6e, 0x27, 0x29, 0x2e, 0x6f, 0x6e, - 0x28, 0x27, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x27, 0x2c, 0x20, 0x66, 0x75, - 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, - 0x20, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x24, 0x28, 0x20, 0x27, 0x23, - 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x27, 0x20, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, 0x22, 0x53, - 0x63, 0x61, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x2e, 0x2e, 0x22, 0x20, - 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x24, 0x2e, 0x70, 0x6f, 0x73, 0x74, 0x28, + 0x20, 0x20, 0x20, 0x24, 0x28, 0x20, 0x27, 0x23, 0x64, 0x65, 0x76, 0x69, + 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x27, 0x20, 0x29, 0x2e, + 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, 0x22, 0x48, 0x6f, 0x73, 0x74, 0x6e, + 0x61, 0x6d, 0x65, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x2e, + 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x5c, 0x22, 0x68, + 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x22, 0x20, 0x2b, 0x20, 0x64, 0x61, + 0x74, 0x61, 0x20, 0x2b, 0x20, 0x22, 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x5c, 0x22, 0x3e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x20, 0x68, 0x65, 0x72, + 0x65, 0x20, 0x74, 0x6f, 0x20, 0x67, 0x6f, 0x20, 0x74, 0x6f, 0x20, 0x22, + 0x20, 0x2b, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x2b, 0x20, 0x22, 0x3c, + 0x2f, 0x61, 0x3e, 0x22, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, + 0x28, 0x20, 0x27, 0x23, 0x68, 0x6f, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, + 0x49, 0x6e, 0x70, 0x75, 0x74, 0x27, 0x20, 0x29, 0x2e, 0x63, 0x73, 0x73, + 0x28, 0x7b, 0x27, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, + 0x64, 0x27, 0x3a, 0x27, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x67, 0x72, 0x65, + 0x65, 0x6e, 0x27, 0x7d, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, + 0x28, 0x20, 0x27, 0x23, 0x68, 0x6f, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, + 0x27, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, 0x64, 0x61, 0x74, + 0x61, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, + 0x2e, 0x66, 0x61, 0x69, 0x6c, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, + 0x6c, 0x6f, 0x67, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x3b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x20, 0x27, 0x23, 0x68, 0x6f, + 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x27, + 0x20, 0x29, 0x2e, 0x63, 0x73, 0x73, 0x28, 0x7b, 0x27, 0x62, 0x61, 0x63, + 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x27, 0x3a, 0x27, 0x72, 0x65, + 0x64, 0x27, 0x7d, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a, + 0x7d, 0x29, 0x3b, 0x0a, 0x24, 0x28, 0x27, 0x23, 0x6f, 0x6c, 0x65, 0x64, + 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x73, 0x74, 0x53, 0x6c, 0x69, 0x64, + 0x65, 0x72, 0x27, 0x29, 0x2e, 0x6f, 0x6e, 0x28, 0x27, 0x69, 0x6e, 0x70, + 0x75, 0x74, 0x27, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x28, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, + 0x6f, 0x6c, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x73, 0x74, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x27, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, + 0x28, 0x20, 0x24, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x2e, 0x76, 0x61, + 0x6c, 0x28, 0x29, 0x20, 0x29, 0x3b, 0x0a, 0x7d, 0x29, 0x3b, 0x0a, 0x24, + 0x28, 0x27, 0x23, 0x6f, 0x6c, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x72, + 0x61, 0x73, 0x74, 0x53, 0x6c, 0x69, 0x64, 0x65, 0x72, 0x27, 0x29, 0x2e, + 0x6f, 0x6e, 0x28, 0x27, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x27, 0x2c, + 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x20, + 0x7b, 0x0a, 0x20, 0x20, 0x24, 0x2e, 0x70, 0x6f, 0x73, 0x74, 0x28, 0x20, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x74, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x73, 0x63, 0x61, 0x6e, - 0x3a, 0x74, 0x72, 0x75, 0x65, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, - 0x20, 0x2e, 0x64, 0x6f, 0x6e, 0x65, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x28, 0x64, 0x61, 0x74, 0x61, 0x29, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x73, 0x20, 0x3d, 0x20, 0x73, - 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x28, 0x20, 0x67, - 0x65, 0x74, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x73, 0x2c, 0x20, 0x33, - 0x30, 0x30, 0x30, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, - 0x28, 0x27, 0x70, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x2e, 0x73, 0x65, 0x6e, - 0x73, 0x6f, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x27, 0x29, 0x2e, 0x68, 0x69, - 0x64, 0x65, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, - 0x20, 0x2e, 0x66, 0x61, 0x69, 0x6c, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, + 0x20, 0x20, 0x6f, 0x6c, 0x65, 0x64, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, + 0x73, 0x74, 0x20, 0x3a, 0x20, 0x24, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, + 0x2e, 0x76, 0x61, 0x6c, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, + 0x20, 0x20, 0x2e, 0x64, 0x6f, 0x6e, 0x65, 0x28, 0x66, 0x75, 0x6e, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, + 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, 0x6f, 0x6c, + 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x73, 0x74, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x27, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, + 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x24, 0x28, 0x27, 0x23, 0x6f, 0x6c, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, + 0x72, 0x61, 0x73, 0x74, 0x53, 0x6c, 0x69, 0x64, 0x65, 0x72, 0x27, 0x29, + 0x2e, 0x76, 0x61, 0x6c, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, + 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x66, 0x61, + 0x69, 0x6c, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, + 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x67, 0x65, 0x74, 0x4f, 0x6c, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, + 0x72, 0x61, 0x73, 0x74, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, + 0x3b, 0x0a, 0x7d, 0x29, 0x3b, 0x0a, 0x24, 0x28, 0x27, 0x23, 0x74, 0x66, + 0x74, 0x42, 0x72, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x53, + 0x6c, 0x69, 0x64, 0x65, 0x72, 0x27, 0x29, 0x2e, 0x6f, 0x6e, 0x28, 0x27, + 0x69, 0x6e, 0x70, 0x75, 0x74, 0x27, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x24, + 0x28, 0x27, 0x23, 0x74, 0x66, 0x74, 0x42, 0x72, 0x69, 0x67, 0x68, 0x74, + 0x6e, 0x65, 0x73, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x27, 0x29, 0x2e, + 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x49, + 0x6e, 0x74, 0x28, 0x20, 0x24, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x2e, + 0x76, 0x61, 0x6c, 0x28, 0x29, 0x20, 0x29, 0x20, 0x2b, 0x20, 0x22, 0x25, + 0x22, 0x20, 0x29, 0x3b, 0x0a, 0x7d, 0x29, 0x3b, 0x0a, 0x24, 0x28, 0x27, + 0x23, 0x74, 0x66, 0x74, 0x42, 0x72, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x65, + 0x73, 0x73, 0x53, 0x6c, 0x69, 0x64, 0x65, 0x72, 0x27, 0x29, 0x2e, 0x6f, + 0x6e, 0x28, 0x27, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x27, 0x2c, 0x20, + 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x20, 0x7b, + 0x0a, 0x20, 0x20, 0x24, 0x2e, 0x70, 0x6f, 0x73, 0x74, 0x28, 0x20, 0x22, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x74, 0x64, 0x65, 0x76, 0x69, + 0x63, 0x65, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x74, 0x66, 0x74, 0x62, 0x72, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x65, + 0x73, 0x73, 0x20, 0x3a, 0x20, 0x24, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, + 0x2e, 0x76, 0x61, 0x6c, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, + 0x20, 0x20, 0x2e, 0x64, 0x6f, 0x6e, 0x65, 0x28, 0x66, 0x75, 0x6e, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, + 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, 0x74, 0x66, + 0x74, 0x42, 0x72, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x53, + 0x6c, 0x69, 0x64, 0x65, 0x72, 0x27, 0x29, 0x2e, 0x76, 0x61, 0x6c, 0x28, + 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, + 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x66, 0x61, 0x69, 0x6c, 0x28, 0x66, 0x75, + 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, + 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x67, 0x65, 0x74, 0x54, + 0x66, 0x74, 0x4d, 0x61, 0x78, 0x42, 0x72, 0x69, 0x67, 0x68, 0x74, 0x6e, + 0x65, 0x73, 0x73, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x3b, + 0x0a, 0x7d, 0x29, 0x3b, 0x0a, 0x24, 0x28, 0x27, 0x23, 0x74, 0x69, 0x6d, + 0x65, 0x5a, 0x6f, 0x6e, 0x65, 0x54, 0x65, 0x78, 0x74, 0x42, 0x6f, 0x78, + 0x27, 0x29, 0x2e, 0x6f, 0x6e, 0x28, 0x27, 0x63, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x27, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x20, 0x7b, 0x0a, 0x20, + 0x20, 0x24, 0x2e, 0x70, 0x6f, 0x73, 0x74, 0x28, 0x20, 0x27, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x73, 0x65, 0x74, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x27, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x7a, 0x6f, 0x6e, 0x65, 0x3a, + 0x20, 0x24, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x2e, 0x76, 0x61, 0x6c, + 0x28, 0x29, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x2e, 0x64, 0x6f, 0x6e, 0x65, 0x28, 0x66, 0x75, 0x6e, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, + 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, + 0x27, 0x23, 0x74, 0x69, 0x6d, 0x65, 0x5a, 0x6f, 0x6e, 0x65, 0x54, 0x65, + 0x78, 0x74, 0x42, 0x6f, 0x78, 0x27, 0x29, 0x2e, 0x63, 0x73, 0x73, 0x28, + 0x20, 0x7b, 0x27, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, + 0x64, 0x27, 0x3a, 0x27, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x67, 0x72, 0x65, + 0x65, 0x6e, 0x27, 0x7d, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x27, 0x29, 0x2e, 0x68, 0x74, 0x6d, + 0x6c, 0x28, 0x20, 0x27, 0x54, 0x69, 0x6d, 0x65, 0x7a, 0x6f, 0x6e, 0x65, + 0x20, 0x73, 0x65, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x27, 0x20, 0x2b, 0x20, + 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x66, 0x61, 0x69, 0x6c, + 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, + 0x61, 0x74, 0x61, 0x20, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, 0x74, 0x69, 0x6d, 0x65, 0x5a, 0x6f, + 0x6e, 0x65, 0x54, 0x65, 0x78, 0x74, 0x42, 0x6f, 0x78, 0x27, 0x29, 0x2e, + 0x63, 0x73, 0x73, 0x28, 0x20, 0x7b, 0x27, 0x62, 0x61, 0x63, 0x6b, 0x67, + 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x27, 0x3a, 0x27, 0x72, 0x65, 0x64, 0x27, + 0x7d, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x29, 0x3b, + 0x0a, 0x7d, 0x29, 0x3b, 0x20, 0x2f, 0x2a, 0x20, 0x6c, 0x61, 0x73, 0x74, + 0x20, 0x69, 0x6e, 0x20, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x20, 0x73, 0x65, + 0x74, 0x75, 0x70, 0x20, 0x2a, 0x2f, 0x0a, 0x24, 0x28, 0x27, 0x23, 0x73, + 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4c, 0x6f, + 0x67, 0x67, 0x69, 0x6e, 0x67, 0x27, 0x29, 0x2e, 0x6f, 0x6e, 0x28, 0x27, + 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x27, 0x2c, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x64, 0x61, 0x74, 0x61, 0x29, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, - 0x6f, 0x67, 0x28, 0x64, 0x61, 0x74, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, - 0x7d, 0x29, 0x3b, 0x0a, 0x7d, 0x29, 0x3b, 0x0a, 0x0a, 0x0a, 0x24, 0x28, + 0x20, 0x24, 0x2e, 0x70, 0x6f, 0x73, 0x74, 0x28, 0x22, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x73, 0x65, 0x74, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x22, + 0x2c, 0x0a, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, + 0x6e, 0x73, 0x6f, 0x72, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x6c, 0x6f, 0x67, + 0x67, 0x69, 0x6e, 0x67, 0x20, 0x3a, 0x20, 0x24, 0x28, 0x74, 0x68, 0x69, + 0x73, 0x29, 0x2e, 0x76, 0x61, 0x6c, 0x28, 0x29, 0x20, 0x3d, 0x3d, 0x3d, + 0x20, 0x22, 0x4f, 0x46, 0x46, 0x22, 0x20, 0x3f, 0x20, 0x22, 0x4f, 0x4e, + 0x22, 0x20, 0x3a, 0x20, 0x22, 0x4f, 0x46, 0x46, 0x22, 0x0a, 0x20, 0x20, + 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x64, 0x6f, 0x6e, 0x65, 0x28, 0x20, + 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x64, 0x61, 0x74, + 0x61, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, + 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4c, + 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x27, 0x29, 0x2e, 0x70, 0x72, 0x6f, + 0x70, 0x28, 0x27, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x27, 0x2c, 0x64, 0x61, + 0x74, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, + 0x23, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x27, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x27, 0x53, 0x45, + 0x4e, 0x53, 0x4f, 0x52, 0x20, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x20, 0x4c, + 0x4f, 0x47, 0x47, 0x49, 0x4e, 0x47, 0x20, 0x49, 0x53, 0x20, 0x4e, 0x4f, + 0x57, 0x20, 0x27, 0x2b, 0x64, 0x61, 0x74, 0x61, 0x29, 0x3b, 0x0a, 0x20, + 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x66, 0x61, 0x69, 0x6c, 0x28, + 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x64, 0x61, + 0x74, 0x61, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, + 0x23, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x27, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x64, 0x61, 0x74, + 0x61, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x65, 0x78, 0x74, + 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x7d, 0x29, 0x3b, + 0x0a, 0x24, 0x28, 0x27, 0x23, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x4c, + 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x27, 0x29, 0x2e, 0x6f, 0x6e, 0x28, + 0x27, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x27, 0x2c, 0x66, 0x75, 0x6e, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x64, 0x61, 0x74, 0x61, 0x29, 0x7b, 0x0a, + 0x20, 0x20, 0x24, 0x2e, 0x70, 0x6f, 0x73, 0x74, 0x28, 0x22, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x73, 0x65, 0x74, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, + 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x6c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, + 0x20, 0x3a, 0x20, 0x24, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x2e, 0x76, + 0x61, 0x6c, 0x28, 0x29, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x22, 0x4f, 0x46, + 0x46, 0x22, 0x20, 0x3f, 0x20, 0x22, 0x4f, 0x4e, 0x22, 0x20, 0x3a, 0x20, + 0x22, 0x4f, 0x46, 0x46, 0x22, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x20, + 0x20, 0x2e, 0x64, 0x6f, 0x6e, 0x65, 0x28, 0x20, 0x66, 0x75, 0x6e, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x64, 0x61, 0x74, 0x61, 0x29, 0x7b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, 0x73, 0x65, 0x6e, 0x73, + 0x6f, 0x72, 0x4c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x27, 0x29, 0x2e, + 0x70, 0x72, 0x6f, 0x70, 0x28, 0x27, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x27, + 0x2c, 0x64, 0x61, 0x74, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x24, 0x28, 0x27, 0x23, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x27, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, + 0x27, 0x53, 0x45, 0x4e, 0x53, 0x4f, 0x52, 0x20, 0x4c, 0x4f, 0x47, 0x47, + 0x49, 0x4e, 0x47, 0x20, 0x49, 0x53, 0x20, 0x4e, 0x4f, 0x57, 0x20, 0x27, + 0x2b, 0x64, 0x61, 0x74, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, + 0x0a, 0x20, 0x20, 0x2e, 0x66, 0x61, 0x69, 0x6c, 0x28, 0x20, 0x66, 0x75, + 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x64, 0x61, 0x74, 0x61, 0x29, + 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x23, 0x64, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x27, 0x29, + 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x65, 0x78, 0x74, 0x29, 0x3b, 0x0a, + 0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x7d, 0x29, 0x3b, 0x0a, 0x24, 0x28, + 0x27, 0x2e, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x4e, 0x61, 0x6d, 0x65, + 0x49, 0x6e, 0x70, 0x75, 0x74, 0x27, 0x29, 0x2e, 0x6f, 0x6e, 0x28, 0x27, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x27, 0x2c, 0x20, 0x66, 0x75, 0x6e, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, + 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x73, 0x65, + 0x6e, 0x73, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x24, 0x28, 0x74, 0x68, 0x69, + 0x73, 0x29, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x28, 0x27, 0x2e, 0x73, + 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x70, + 0x75, 0x74, 0x27, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x24, 0x2e, 0x70, 0x6f, + 0x73, 0x74, 0x28, 0x20, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, + 0x74, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x22, 0x2c, 0x0a, 0x20, 0x20, + 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, + 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3a, 0x20, 0x24, 0x28, 0x74, 0x68, 0x69, + 0x73, 0x29, 0x2e, 0x76, 0x61, 0x6c, 0x28, 0x29, 0x2c, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3a, 0x20, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x0a, 0x20, 0x20, + 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x64, 0x6f, 0x6e, 0x65, 0x28, 0x66, + 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, + 0x61, 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x20, + 0x27, 0x23, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x27, 0x20, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x20, + 0x22, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x20, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x27, + 0x22, 0x20, 0x2b, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x2b, 0x20, 0x22, + 0x27, 0x22, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, + 0x20, 0x27, 0x2e, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x4e, 0x61, 0x6d, + 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x27, 0x20, 0x29, 0x2e, 0x65, 0x71, + 0x28, 0x20, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x20, 0x29, 0x2e, 0x63, + 0x73, 0x73, 0x28, 0x7b, 0x27, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, + 0x75, 0x6e, 0x64, 0x27, 0x3a, 0x27, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x67, + 0x72, 0x65, 0x65, 0x6e, 0x27, 0x7d, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, + 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x66, 0x61, 0x69, 0x6c, 0x28, 0x66, 0x75, + 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x64, 0x61, 0x74, 0x61, + 0x20, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x20, 0x27, + 0x2e, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x49, + 0x6e, 0x70, 0x75, 0x74, 0x27, 0x20, 0x29, 0x2e, 0x65, 0x71, 0x28, 0x20, + 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x20, 0x29, 0x2e, 0x63, 0x73, 0x73, + 0x28, 0x7b, 0x27, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, + 0x64, 0x27, 0x3a, 0x27, 0x72, 0x65, 0x64, 0x27, 0x7d, 0x29, 0x3b, 0x0a, + 0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x7d, 0x29, 0x3b, 0x0a, 0x24, 0x28, + 0x27, 0x23, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x53, 0x63, 0x61, 0x6e, + 0x27, 0x29, 0x2e, 0x6f, 0x6e, 0x28, 0x27, 0x63, 0x6c, 0x69, 0x63, 0x6b, + 0x27, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, + 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, + 0x24, 0x28, 0x20, 0x27, 0x23, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x27, 0x20, 0x29, 0x2e, 0x68, 0x74, 0x6d, + 0x6c, 0x28, 0x20, 0x22, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x69, 0x6e, 0x67, + 0x2e, 0x2e, 0x2e, 0x22, 0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x24, 0x2e, + 0x70, 0x6f, 0x73, 0x74, 0x28, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, + 0x65, 0x74, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x22, 0x2c, 0x0a, 0x20, + 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x6e, 0x73, 0x6f, + 0x72, 0x73, 0x63, 0x61, 0x6e, 0x3a, 0x74, 0x72, 0x75, 0x65, 0x0a, 0x20, + 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x64, 0x6f, 0x6e, 0x65, 0x28, + 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x64, 0x61, 0x74, + 0x61, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, + 0x73, 0x20, 0x3d, 0x20, 0x73, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, + 0x75, 0x74, 0x28, 0x20, 0x67, 0x65, 0x74, 0x53, 0x65, 0x6e, 0x73, 0x6f, + 0x72, 0x73, 0x2c, 0x20, 0x33, 0x30, 0x30, 0x30, 0x20, 0x29, 0x3b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x24, 0x28, 0x27, 0x70, 0x2e, 0x69, 0x74, 0x65, + 0x6d, 0x2e, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x6e, 0x61, 0x6d, 0x65, + 0x27, 0x29, 0x2e, 0x68, 0x69, 0x64, 0x65, 0x28, 0x29, 0x3b, 0x0a, 0x20, + 0x20, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x2e, 0x66, 0x61, 0x69, 0x6c, 0x28, + 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x64, 0x61, 0x74, + 0x61, 0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, + 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x64, 0x61, 0x74, 0x61, + 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x7d, 0x29, 0x3b, + 0x0a, 0x24, 0x28, 0x27, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x70, 0x73, + 0x61, 0x62, 0x6c, 0x65, 0x27, 0x29, 0x2e, 0x6f, 0x6e, 0x28, 0x27, 0x63, + 0x6c, 0x69, 0x63, 0x6b, 0x27, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x24, 0x28, 0x27, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x70, 0x73, 0x61, 0x62, 0x6c, - 0x65, 0x27, 0x29, 0x2e, 0x6f, 0x6e, 0x28, 0x27, 0x63, 0x6c, 0x69, 0x63, - 0x6b, 0x27, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x28, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x24, 0x28, 0x27, 0x2e, 0x63, - 0x6f, 0x6c, 0x6c, 0x61, 0x70, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x27, 0x29, - 0x2e, 0x63, 0x73, 0x73, 0x28, 0x27, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x27, 0x2c, 0x27, 0x34, 0x35, 0x70, 0x78, 0x27, 0x29, 0x2e, 0x63, 0x73, - 0x73, 0x28, 0x27, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x27, 0x2c, 0x27, - 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x29, 0x3b, 0x0a, 0x20, - 0x20, 0x24, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x2e, 0x63, 0x73, 0x73, - 0x28, 0x27, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x27, 0x2c, 0x27, 0x61, - 0x75, 0x74, 0x6f, 0x27, 0x29, 0x2e, 0x63, 0x73, 0x73, 0x28, 0x27, 0x63, - 0x75, 0x72, 0x73, 0x6f, 0x72, 0x27, 0x2c, 0x27, 0x27, 0x29, 0x3b, 0x0a, - 0x7d, 0x29, 0x3b, 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x3e, 0x0a, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0a, 0x3c, 0x2f, - 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0a + 0x65, 0x27, 0x29, 0x2e, 0x63, 0x73, 0x73, 0x28, 0x27, 0x68, 0x65, 0x69, + 0x67, 0x68, 0x74, 0x27, 0x2c, 0x27, 0x34, 0x35, 0x70, 0x78, 0x27, 0x29, + 0x2e, 0x63, 0x73, 0x73, 0x28, 0x27, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, + 0x27, 0x2c, 0x27, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x27, 0x29, + 0x3b, 0x0a, 0x20, 0x20, 0x24, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x2e, + 0x63, 0x73, 0x73, 0x28, 0x27, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x27, + 0x2c, 0x27, 0x61, 0x75, 0x74, 0x6f, 0x27, 0x29, 0x2e, 0x63, 0x73, 0x73, + 0x28, 0x27, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x27, 0x2c, 0x27, 0x27, + 0x29, 0x3b, 0x0a, 0x7d, 0x29, 0x3b, 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x3e, 0x0a, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, + 0x0a, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0a }; -const unsigned int setup_htm_len = 19518; +const unsigned int setup_htm_len = 20157; diff --git a/webservertask.ino b/webservertask.ino index 6b98f92..d16ce2b 100644 --- a/webservertask.ino +++ b/webservertask.ino @@ -130,7 +130,13 @@ void webServerTask ( void * pvParameters ) server.on( "/api/getdevice", HTTP_GET, []( AsyncWebServerRequest * request) { - //AsyncResponseStream *response; + AsyncResponseStream *response; + if ( request->hasArg( "bootlog" ) ) + { + return request->send( 200, HEADER_HTML, preferences.getString( "bootlog", "OFF" ) ); + } + + else if ( request->hasArg( "boottime" ) ) if ( request->hasArg( "boottime" ) ) { char response[25]; @@ -481,6 +487,13 @@ void webServerTask ( void * pvParameters ) return request->send( 200, HEADER_HTML, hostName ); } + else if ( request->hasArg( "bootlog" ) ) + { + if ( request->arg("bootlog").equalsIgnoreCase("on") || ( request->arg("bootlog").equalsIgnoreCase("off") ) ) + preferences.putString( "bootlog", request->arg("bootlog") ); + return request->send( 200, HEADER_HTML, request->arg("bootlog") ); + } + else if ( request->hasArg( "lightsoff" ) ) { leds.setState( LIGHTS_OFF ); @@ -594,17 +607,12 @@ void webServerTask ( void * pvParameters ) if ( request->arg( "sensorlogging").equalsIgnoreCase( "on" ) ) { - sensor.setLogging( true ); - if ( !xLoggerTaskHandle ) - { - BaseType_t xReturned = startLogger(); - ESP_LOGI( TAG, "LoggerTask %s.", ( xReturned == pdPASS ) ? "started" : "failed" ); - } + sensor.startTemperatureLogging( 240 ); return request->send( 200, HEADER_HTML, "ON" ); } else if ( request->arg( "sensorlogging" ).equalsIgnoreCase( "off" ) ) { - sensor.setLogging( false ); + sensor.stopTemperatureLogging(); return request->send( 200, HEADER_HTML, "OFF" ); } else return request->send( 400, HEADER_HTML, "Invalid option." ); @@ -616,12 +624,12 @@ void webServerTask ( void * pvParameters ) if ( request->arg( "sensorerrorlogging").equalsIgnoreCase( "on" ) ) { - sensor.setErrorLogging( true ); + sensor.startErrorLogging(); return request->send( 200, HEADER_HTML, "ON" ); } else if ( request->arg( "sensorerrorlogging" ).equalsIgnoreCase( "off" ) ) { - sensor.setErrorLogging( false ); + sensor.stopErrorLogging(); return request->send( 200, HEADER_HTML, "OFF" ); } else return request->send( 400, HEADER_HTML, "Invalid option." ); diff --git a/wifitask.ino b/wifitask.ino index 937be3c..5322abd 100644 --- a/wifitask.ino +++ b/wifitask.ino @@ -113,7 +113,7 @@ void IRAM_ATTR wifiTask( void * pvParameters ) xTaskCreatePinnedToCore( ntpTask, /* Function to implement the task */ "ntpTask", /* Name of the task */ - 2000, /* Stack size in words */ + 3000, /* Stack size in words */ NULL, /* Task input parameter */ ntpTaskPriority, /* Priority of the task */ NULL, /* Task handle. */