summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--content/handlers/javascript/duktape/duk_config.h126
-rw-r--r--content/handlers/javascript/duktape/duktape.c15689
-rw-r--r--content/handlers/javascript/duktape/duktape.h28
3 files changed, 8430 insertions, 7413 deletions
diff --git a/content/handlers/javascript/duktape/duk_config.h b/content/handlers/javascript/duktape/duk_config.h
index 40df0fe8e..0caed88cf 100644
--- a/content/handlers/javascript/duktape/duk_config.h
+++ b/content/handlers/javascript/duktape/duk_config.h
@@ -18,6 +18,7 @@
* - QNX
* - TI-Nspire
* - Emscripten
+ * - Android
* - Linux
* - Solaris
* - AIX
@@ -170,6 +171,10 @@
#define DUK_F_BCC
#endif
+#if defined(ANDROID) || defined(__ANDROID__)
+#define DUK_F_ANDROID
+#endif
+
/* Linux */
#if defined(__linux) || defined(__linux__) || defined(linux)
#define DUK_F_LINUX
@@ -246,9 +251,9 @@
#endif
/* ARM */
-#if defined(__arm__) || defined(__thumb__) || defined(_ARM) || defined(_M_ARM) || defined(__aarch64__)
+#if defined(__arm__) || defined(__thumb__) || defined(_ARM) || defined(_M_ARM) || defined(_M_ARM64) || defined(__aarch64__)
#define DUK_F_ARM
-#if defined(__LP64__) || defined(_LP64) || defined(__arm64) || defined(__arm64__) || defined(__aarch64__)
+#if defined(__LP64__) || defined(_LP64) || defined(__arm64) || defined(__arm64__) || defined(_M_ARM64) || defined(__aarch64__)
#define DUK_F_ARM64
#else
#define DUK_F_ARM32
@@ -356,10 +361,6 @@
#define DUK_F_VBCC
#endif
-#if defined(ANDROID) || defined(__ANDROID__)
-#define DUK_F_ANDROID
-#endif
-
/* Atari Mint */
#if defined(__MINT__)
#define DUK_F_MINT
@@ -665,6 +666,41 @@
#define DUK_USE_DATE_FMT_STRFTIME
#define DUK_USE_OS_STRING "emscripten"
+#elif defined(DUK_F_ANDROID)
+/* --- Android --- */
+#if defined(DUK_COMPILING_DUKTAPE)
+#if !defined(_POSIX_C_SOURCE)
+#define _POSIX_C_SOURCE 200809L
+#endif
+#if !defined(_GNU_SOURCE)
+#define _GNU_SOURCE /* e.g. getdate_r */
+#endif
+#if !defined(_XOPEN_SOURCE)
+#define _XOPEN_SOURCE /* e.g. strptime */
+#endif
+#endif /* DUK_COMPILING_DUKTAPE */
+
+#include <sys/types.h>
+#if defined(DUK_F_BCC)
+/* no endian.h or stdint.h */
+#else
+#include <endian.h>
+#include <stdint.h>
+#endif /* DUK_F_BCC */
+#include <sys/param.h>
+#include <sys/time.h>
+#include <time.h>
+
+#define DUK_USE_DATE_NOW_GETTIMEOFDAY
+#define DUK_USE_DATE_TZO_GMTIME_R
+#define DUK_USE_DATE_PRS_STRPTIME
+#define DUK_USE_DATE_FMT_STRFTIME
+
+#if 0 /* XXX: safe condition? */
+#define DUK_USE_GET_MONOTONIC_TIME_CLOCK_GETTIME
+#endif
+
+#define DUK_USE_OS_STRING "android"
#elif defined(DUK_F_LINUX)
/* --- Linux --- */
#if defined(DUK_COMPILING_DUKTAPE)
@@ -1069,6 +1105,18 @@
#undef DUK_USE_GCC_PRAGMAS
#define DUK_USE_PACK_CLANG_ATTR
+
+#if defined(__clang__) && defined(__has_builtin)
+#if __has_builtin(__builtin_bswap64)
+#define DUK_BSWAP64(x) ((duk_uint64_t) __builtin_bswap64((duk_uint64_t) (x)))
+#endif
+#if __has_builtin(__builtin_bswap32)
+#define DUK_BSWAP32(x) ((duk_uint32_t) __builtin_bswap32((duk_uint32_t) (x)))
+#endif
+#if __has_builtin(__builtin_bswap16)
+#define DUK_BSWAP16(x) ((duk_uint16_t) __builtin_bswap16((duk_uint16_t) (x)))
+#endif
+#endif
#elif defined(DUK_F_GCC)
/* --- GCC --- */
#if defined(DUK_F_C99) || defined(DUK_F_CPP11)
@@ -1079,13 +1127,17 @@
#define DUK_VA_COPY(dest,src) __va_copy(dest,src)
#endif
-#if defined(DUK_F_GCC_VERSION) && (DUK_F_GCC_VERSION >= 20500L)
-/* since gcc-2.5 */
+#if defined(DUK_F_GCC_VERSION) && (DUK_F_GCC_VERSION >= 20500L) && (DUK_F_GCC_VERSION < 50000L)
+/* Since gcc-2.5.
+ *
+ * Disabled temporarily in GCC 5+ because of an unresolved noreturn-related
+ * issue: https://github.com/svaarala/duktape/issues/2155.
+ */
#define DUK_NORETURN(decl) decl __attribute__((noreturn))
#endif
#if defined(DUK_F_GCC_VERSION) && (DUK_F_GCC_VERSION >= 40500L)
-/* since gcc-4.5 */
+/* Since gcc-4.5. */
#define DUK_UNREACHABLE() do { __builtin_unreachable(); } while (0)
#endif
@@ -1198,6 +1250,16 @@
#endif
#define DUK_USE_PACK_GCC_ATTR
+
+/* Availability varies based on platform (between GCC 4.4 and 4.8), and there
+ * are apparently some bugs in GCC 4.x. Check for GCC 5.0 before enabling
+ * these to be safe.
+ */
+#if defined(DUK_F_GCC_VERSION) && (DUK_F_GCC_VERSION >= 50000L)
+#define DUK_BSWAP64(x) ((duk_uint64_t) __builtin_bswap64((duk_uint64_t) (x)))
+#define DUK_BSWAP32(x) ((duk_uint32_t) __builtin_bswap32((duk_uint32_t) (x)))
+#define DUK_BSWAP16(x) ((duk_uint16_t) __builtin_bswap16((duk_uint16_t) (x)))
+#endif
#elif defined(DUK_F_MSVC)
/* --- MSVC --- */
/* http://msdn.microsoft.com/en-us/library/aa235362(VS.60).aspx */
@@ -2504,7 +2566,7 @@ typedef struct duk_hthread duk_context;
#define DUK_USE_ALIGN_BY 8
#endif
-/* Compiler specific hackery needed to force struct size to match aligment,
+/* Compiler specific hackery needed to force struct size to match alignment,
* see e.g. duk_hbuffer.h.
*
* http://stackoverflow.com/questions/11130109/c-struct-size-alignment
@@ -2515,6 +2577,13 @@ typedef struct duk_hthread duk_context;
#define DUK_USE_PACK_DUMMY_MEMBER
#endif
+#if !defined(DUK_U64_CONSTANT)
+#define DUK_U64_CONSTANT(x) x##ULL
+#endif
+#if !defined(DUK_I64_CONSTANT)
+#define DUK_I64_CONSTANT(x) x##LL
+#endif
+
#if !defined(DUK_VA_COPY)
/* We need va_copy() which is defined in C99 / C++11, so an awkward
* replacement is needed for pre-C99 / pre-C++11 environments. This
@@ -2665,17 +2734,30 @@ typedef struct duk_hthread duk_context;
#endif
#endif
+#if defined(DUK_F_HAVE_64BIT)
+#if !defined(DUK_BSWAP64)
+#define DUK_BSWAP64(x) \
+ ((((duk_uint64_t) (x)) >> 56U) | \
+ ((((duk_uint64_t) (x)) >> 40U) & DUK_U64_CONSTANT(0xff00)) | \
+ ((((duk_uint64_t) (x)) >> 24U) & DUK_U64_CONSTANT(0xff0000)) | \
+ ((((duk_uint64_t) (x)) >> 8U) & DUK_U64_CONSTANT(0xff000000)) | \
+ ((((duk_uint64_t) (x)) << 8U) & DUK_U64_CONSTANT(0xff00000000)) | \
+ ((((duk_uint64_t) (x)) << 24U) & DUK_U64_CONSTANT(0xff0000000000)) | \
+ ((((duk_uint64_t) (x)) << 40U) & DUK_U64_CONSTANT(0xff000000000000)) | \
+ (((duk_uint64_t) (x)) << 56U))
+#endif
+#endif
#if !defined(DUK_BSWAP32)
#define DUK_BSWAP32(x) \
- ((((duk_uint32_t) (x)) >> 24) | \
- ((((duk_uint32_t) (x)) >> 8) & 0xff00UL) | \
- ((((duk_uint32_t) (x)) << 8) & 0xff0000UL) | \
- (((duk_uint32_t) (x)) << 24))
+ ((((duk_uint32_t) (x)) >> 24U) | \
+ ((((duk_uint32_t) (x)) >> 8U) & 0xff00UL) | \
+ ((((duk_uint32_t) (x)) << 8U) & 0xff0000UL) | \
+ (((duk_uint32_t) (x)) << 24U))
#endif
#if !defined(DUK_BSWAP16)
#define DUK_BSWAP16(x) \
- ((duk_uint16_t) (x) >> 8) | \
- ((duk_uint16_t) (x) << 8)
+ ((duk_uint16_t) (x) >> 8U) | \
+ ((duk_uint16_t) (x) << 8U)
#endif
/* DUK_USE_VARIADIC_MACROS: required from compilers, so no fill-in. */
@@ -2698,13 +2780,6 @@ typedef struct duk_hthread duk_context;
#undef DUK_USE_GCC_PRAGMAS
#endif
-#if !defined(DUK_U64_CONSTANT)
-#define DUK_U64_CONSTANT(x) x##ULL
-#endif
-#if !defined(DUK_I64_CONSTANT)
-#define DUK_I64_CONSTANT(x) x##LL
-#endif
-
/* Workaround for GH-323: avoid inlining control when compiling from
* multiple sources, as it causes compiler portability trouble.
*/
@@ -2807,7 +2882,6 @@ typedef struct duk_hthread duk_context;
#define DUK_USE_CACHE_ACTIVATION
#define DUK_USE_CACHE_CATCHER
#define DUK_USE_CALLSTACK_LIMIT 10000
-#define DUK_USE_COMMONJS_MODULES
#define DUK_USE_COMPILER_RECLIMIT 2500
#define DUK_USE_COROUTINE_SUPPORT
#undef DUK_USE_CPP_EXCEPTIONS
@@ -2912,6 +2986,7 @@ typedef struct duk_hthread duk_context;
#define DUK_USE_MARK_AND_SWEEP_RECLIMIT 256
#define DUK_USE_MATH_BUILTIN
#define DUK_USE_NATIVE_CALL_RECLIMIT 1000
+#undef DUK_USE_NATIVE_STACK_CHECK
#define DUK_USE_NONSTD_ARRAY_SPLICE_DELCOUNT
#undef DUK_USE_NONSTD_FUNC_CALLER_PROPERTY
#undef DUK_USE_NONSTD_FUNC_SOURCE_PROPERTY
@@ -2962,12 +3037,11 @@ typedef struct duk_hthread duk_context;
#define DUK_USE_STRTAB_RESIZE_CHECK_MASK 255
#define DUK_USE_STRTAB_SHRINK_LIMIT 6
#undef DUK_USE_STRTAB_TORTURE
-#undef DUK_USE_SYMBOL_BUILTIN
+#define DUK_USE_SYMBOL_BUILTIN
#define DUK_USE_TAILCALL
#define DUK_USE_TARGET_INFO "unknown"
#define DUK_USE_TRACEBACKS
#define DUK_USE_TRACEBACK_DEPTH 10
-#define DUK_USE_USER_DECLARE() /* no user declarations */
#define DUK_USE_VALSTACK_GROW_SHIFT 2
#define DUK_USE_VALSTACK_LIMIT 1000000L
#define DUK_USE_VALSTACK_SHRINK_CHECK_SHIFT 2
diff --git a/content/handlers/javascript/duktape/duktape.c b/content/handlers/javascript/duktape/duktape.c
index 91c4e65bb..dc3d33359 100644
--- a/content/handlers/javascript/duktape/duktape.c
+++ b/content/handlers/javascript/duktape/duktape.c
@@ -1,7 +1,5 @@
-/* Omit from static analysis. */
-#ifndef __clang_analyzer__
/*
- * Single source autogenerated distributable for Duktape 2.3.0.
+ * Single source autogenerated distributable for Duktape 2.4.0.
*
* Git commit external (external).
* Git branch external.
@@ -18,7 +16,7 @@
*
* (http://opensource.org/licenses/MIT)
*
-* Copyright (c) 2013-2018 by Duktape authors (see AUTHORS.rst)
+* Copyright (c) 2013-2019 by Duktape authors (see AUTHORS.rst)
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -97,6 +95,15 @@
* * Michal Kasperek (https://github.com/michalkas)
* * Andrew Janke (https://github.com/apjanke)
* * Steve Fan (https://github.com/stevefan1999)
+* * Edward Betts (https://github.com/edwardbetts)
+* * Ozhan Duz (https://github.com/webfolderio)
+* * Akos Kiss (https://github.com/akosthekiss)
+* * TheBrokenRail (https://github.com/TheBrokenRail)
+* * Jesse Doyle (https://github.com/jessedoyle)
+* * Gero Kuehn (https://github.com/dc6jgk)
+* * James Swift (https://github.com/phraemer)
+* * Luis de Bethencourt (https://github.com/luisbg)
+* * Ian Whyman (https://github.com/v00d00)
*
* Other contributions
* ===================
@@ -137,6 +144,8 @@
* * Neil Kolban (https://github.com/nkolban)
* * Wilhelm Wanecek (https://github.com/wanecek)
* * Andrew Janke (https://github.com/apjanke)
+* * Unamer (https://github.com/unamer)
+* * Karl Dahlke (eklhad@gmail.com)
*
* If you are accidentally missing from this list, send me an e-mail
* (``sami.vaarala@iki.fi``) and I'll fix the omission.
@@ -179,13 +188,6 @@
#include "duktape.h"
/*
- * User declarations, e.g. prototypes for user functions used by Duktape
- * macros.
- */
-
-DUK_USE_USER_DECLARE()
-
-/*
* Duktape includes (other than duk_features.h)
*
* The header files expect to be included in an order which satisfies header
@@ -1425,7 +1427,7 @@ typedef struct {
#if 0
DUK_INTERNAL_DECL duk_double_t duk_tval_get_number_unpacked(duk_tval *tv);
#endif
-DUK_INTERNAL_DECL DUK_INLINE duk_double_t duk_tval_get_number_unpacked_fastint(duk_tval *tv);
+DUK_INTERNAL_DECL duk_double_t duk_tval_get_number_unpacked_fastint(duk_tval *tv);
#endif
#endif /* DUK_USE_PACKED_TVAL */
@@ -1467,10 +1469,17 @@ DUK_INTERNAL_DECL DUK_INLINE duk_double_t duk_tval_get_number_unpacked_fastint(d
#define DUK_FASTINT_MAX (DUK_I64_CONSTANT(0x7fffffffffff))
#define DUK_FASTINT_BITS 48
-DUK_INTERNAL_DECL DUK_INLINE void duk_tval_set_number_chkfast_fast(duk_tval *tv, duk_double_t x);
+DUK_INTERNAL_DECL void duk_tval_set_number_chkfast_fast(duk_tval *tv, duk_double_t x);
DUK_INTERNAL_DECL void duk_tval_set_number_chkfast_slow(duk_tval *tv, duk_double_t x);
#endif
+#if defined(DUK_USE_ASSERTIONS)
+DUK_INTERNAL_DECL void duk_tval_assert_valid(duk_tval *tv);
+#define DUK_TVAL_ASSERT_VALID(tv) do { duk_tval_assert_valid((tv)); } while (0)
+#else
+#define DUK_TVAL_ASSERT_VALID(tv) do {} while (0)
+#endif
+
#endif /* DUK_TVAL_H_INCLUDED */
/* #include duk_builtins.h */
/*
@@ -2016,6 +2025,7 @@ DUK_INTERNAL_DECL duk_ret_t duk_bi_global_object_parse_float(duk_context *ctx);
DUK_INTERNAL_DECL duk_ret_t duk_bi_thread_constructor(duk_context *ctx);
DUK_INTERNAL_DECL duk_ret_t duk_bi_pointer_constructor(duk_context *ctx);
DUK_INTERNAL_DECL duk_ret_t duk_bi_proxy_constructor(duk_context *ctx);
+DUK_INTERNAL_DECL duk_ret_t duk_bi_symbol_constructor_shared(duk_context *ctx);
DUK_INTERNAL_DECL duk_ret_t duk_bi_arraybuffer_constructor(duk_context *ctx);
DUK_INTERNAL_DECL duk_ret_t duk_bi_dataview_constructor(duk_context *ctx);
DUK_INTERNAL_DECL duk_ret_t duk_bi_typedarray_constructor(duk_context *ctx);
@@ -2056,6 +2066,7 @@ DUK_INTERNAL_DECL duk_ret_t duk_bi_function_prototype_to_string(duk_context *ctx
DUK_INTERNAL_DECL duk_ret_t duk_bi_function_prototype_apply(duk_context *ctx);
DUK_INTERNAL_DECL duk_ret_t duk_bi_function_prototype_call(duk_context *ctx);
DUK_INTERNAL_DECL duk_ret_t duk_bi_function_prototype_bind(duk_context *ctx);
+DUK_INTERNAL_DECL duk_ret_t duk_bi_function_prototype_hasinstance(duk_context *ctx);
DUK_INTERNAL_DECL duk_ret_t duk_bi_native_function_length(duk_context *ctx);
DUK_INTERNAL_DECL duk_ret_t duk_bi_native_function_name(duk_context *ctx);
DUK_INTERNAL_DECL duk_ret_t duk_bi_array_constructor_is_array(duk_context *ctx);
@@ -2111,6 +2122,7 @@ DUK_INTERNAL_DECL duk_ret_t duk_bi_date_prototype_get_shared(duk_context *ctx);
DUK_INTERNAL_DECL duk_ret_t duk_bi_date_prototype_get_timezone_offset(duk_context *ctx);
DUK_INTERNAL_DECL duk_ret_t duk_bi_date_prototype_set_time(duk_context *ctx);
DUK_INTERNAL_DECL duk_ret_t duk_bi_date_prototype_set_shared(duk_context *ctx);
+DUK_INTERNAL_DECL duk_ret_t duk_bi_date_prototype_toprimitive(duk_context *ctx);
DUK_INTERNAL_DECL duk_ret_t duk_bi_regexp_prototype_exec(duk_context *ctx);
DUK_INTERNAL_DECL duk_ret_t duk_bi_regexp_prototype_test(duk_context *ctx);
DUK_INTERNAL_DECL duk_ret_t duk_bi_regexp_prototype_tostring(duk_context *ctx);
@@ -2151,6 +2163,9 @@ DUK_INTERNAL_DECL duk_ret_t duk_bi_reflect_object_delete_property(duk_context *c
DUK_INTERNAL_DECL duk_ret_t duk_bi_reflect_object_get(duk_context *ctx);
DUK_INTERNAL_DECL duk_ret_t duk_bi_reflect_object_has(duk_context *ctx);
DUK_INTERNAL_DECL duk_ret_t duk_bi_reflect_object_set(duk_context *ctx);
+DUK_INTERNAL_DECL duk_ret_t duk_bi_symbol_key_for(duk_context *ctx);
+DUK_INTERNAL_DECL duk_ret_t duk_bi_symbol_tostring_shared(duk_context *ctx);
+DUK_INTERNAL_DECL duk_ret_t duk_bi_symbol_toprimitive(duk_context *ctx);
DUK_INTERNAL_DECL duk_ret_t duk_bi_arraybuffer_isview(duk_context *ctx);
DUK_INTERNAL_DECL duk_ret_t duk_bi_typedarray_bytelength_getter(duk_context *ctx);
DUK_INTERNAL_DECL duk_ret_t duk_bi_buffer_slice_shared(duk_context *ctx);
@@ -2177,7 +2192,7 @@ DUK_INTERNAL_DECL duk_ret_t duk_bi_textdecoder_prototype_shared_getter(duk_conte
DUK_INTERNAL_DECL duk_ret_t duk_bi_textdecoder_prototype_decode(duk_context *ctx);
DUK_INTERNAL_DECL duk_ret_t duk_bi_performance_now(duk_context *ctx);
#if !defined(DUK_SINGLE_FILE)
-DUK_INTERNAL_DECL const duk_c_function duk_bi_native_functions[177];
+DUK_INTERNAL_DECL const duk_c_function duk_bi_native_functions[183];
#endif /* !DUK_SINGLE_FILE */
#define DUK_BIDX_GLOBAL 0
#define DUK_BIDX_GLOBAL_ENV 1
@@ -2232,22 +2247,22 @@ DUK_INTERNAL_DECL const duk_c_function duk_bi_native_functions[177];
#define DUK_BIDX_NODEJS_BUFFER_PROTOTYPE 50
#define DUK_NUM_BUILTINS 51
#define DUK_NUM_BIDX_BUILTINS 51
-#define DUK_NUM_ALL_BUILTINS 78
+#define DUK_NUM_ALL_BUILTINS 79
#if defined(DUK_USE_DOUBLE_LE)
#if !defined(DUK_SINGLE_FILE)
-DUK_INTERNAL_DECL const duk_uint8_t duk_builtins_data[4116];
+DUK_INTERNAL_DECL const duk_uint8_t duk_builtins_data[4251];
#endif /* !DUK_SINGLE_FILE */
-#define DUK_BUILTINS_DATA_LENGTH 4116
+#define DUK_BUILTINS_DATA_LENGTH 4251
#elif defined(DUK_USE_DOUBLE_BE)
#if !defined(DUK_SINGLE_FILE)
-DUK_INTERNAL_DECL const duk_uint8_t duk_builtins_data[4116];
+DUK_INTERNAL_DECL const duk_uint8_t duk_builtins_data[4251];
#endif /* !DUK_SINGLE_FILE */
-#define DUK_BUILTINS_DATA_LENGTH 4116
+#define DUK_BUILTINS_DATA_LENGTH 4251
#elif defined(DUK_USE_DOUBLE_ME)
#if !defined(DUK_SINGLE_FILE)
-DUK_INTERNAL_DECL const duk_uint8_t duk_builtins_data[4116];
+DUK_INTERNAL_DECL const duk_uint8_t duk_builtins_data[4251];
#endif /* !DUK_SINGLE_FILE */
-#define DUK_BUILTINS_DATA_LENGTH 4116
+#define DUK_BUILTINS_DATA_LENGTH 4251
#else
#error invalid endianness defines
#endif
@@ -2416,24 +2431,20 @@ struct duk_bufwriter_ctx {
(const char *) (bw_ctx)->p_base, \
(duk_size_t) ((bw_ctx)->p - (bw_ctx)->p_base)); \
} while (0)
+
/* Pointers may be NULL for a while when 'buf' size is zero and before any
* ENSURE calls have been made. Once an ENSURE has been made, the pointers
* are required to be non-NULL so that it's always valid to use memcpy() and
* memmove(), even for zero size.
*/
-#define DUK_BW_ASSERT_VALID_EXPR(thr,bw_ctx) \
- DUK_ASSERT_EXPR((bw_ctx) != NULL && \
- (bw_ctx)->buf != NULL && \
- ((DUK_HBUFFER_DYNAMIC_GET_SIZE((bw_ctx)->buf) == 0) || \
- ((bw_ctx)->p != NULL && \
- (bw_ctx)->p_base != NULL && \
- (bw_ctx)->p_limit != NULL && \
- (bw_ctx)->p_limit >= (bw_ctx)->p_base && \
- (bw_ctx)->p >= (bw_ctx)->p_base && \
- (bw_ctx)->p <= (bw_ctx)->p_limit)))
-#define DUK_BW_ASSERT_VALID(thr,bw_ctx) do { \
- DUK_BW_ASSERT_VALID_EXPR((thr), (bw_ctx)); \
- } while (0)
+#if defined(DUK_USE_ASSERTIONS)
+DUK_INTERNAL_DECL void duk_bw_assert_valid(duk_hthread *thr, duk_bufwriter_ctx *bw_ctx);
+#define DUK_BW_ASSERT_VALID_EXPR(thr,bw_ctx) (duk_bw_assert_valid((thr), (bw_ctx)))
+#define DUK_BW_ASSERT_VALID(thr,bw_ctx) do { duk_bw_assert_valid((thr), (bw_ctx)); } while (0)
+#else
+#define DUK_BW_ASSERT_VALID_EXPR(thr,bw_ctx) DUK_ASSERT_EXPR(1)
+#define DUK_BW_ASSERT_VALID(thr,bw_ctx) do {} while (0)
+#endif
/* Working with the pointer and current size. */
@@ -2790,12 +2801,12 @@ DUK_INTERNAL_DECL duk_uint8_t *duk_bw_insert_ensure_area(duk_hthread *thr, duk_b
DUK_INTERNAL_DECL void duk_bw_remove_raw_slice(duk_hthread *thr, duk_bufwriter_ctx *bw, duk_size_t off, duk_size_t len);
/* No duk_bw_remove_ensure_slice(), functionality would be identical. */
-DUK_INTERNAL_DECL DUK_INLINE duk_uint16_t duk_raw_read_u16_be(duk_uint8_t **p);
-DUK_INTERNAL_DECL DUK_INLINE duk_uint32_t duk_raw_read_u32_be(duk_uint8_t **p);
-DUK_INTERNAL_DECL DUK_INLINE duk_double_t duk_raw_read_double_be(duk_uint8_t **p);
-DUK_INTERNAL_DECL DUK_INLINE void duk_raw_write_u16_be(duk_uint8_t **p, duk_uint16_t val);
-DUK_INTERNAL_DECL DUK_INLINE void duk_raw_write_u32_be(duk_uint8_t **p, duk_uint32_t val);
-DUK_INTERNAL_DECL DUK_INLINE void duk_raw_write_double_be(duk_uint8_t **p, duk_double_t val);
+DUK_INTERNAL_DECL duk_uint16_t duk_raw_read_u16_be(duk_uint8_t **p);
+DUK_INTERNAL_DECL duk_uint32_t duk_raw_read_u32_be(duk_uint8_t **p);
+DUK_INTERNAL_DECL duk_double_t duk_raw_read_double_be(duk_uint8_t **p);
+DUK_INTERNAL_DECL void duk_raw_write_u16_be(duk_uint8_t **p, duk_uint16_t val);
+DUK_INTERNAL_DECL void duk_raw_write_u32_be(duk_uint8_t **p, duk_uint32_t val);
+DUK_INTERNAL_DECL void duk_raw_write_double_be(duk_uint8_t **p, duk_double_t val);
#if defined(DUK_USE_DEBUGGER_SUPPORT) /* For now only needed by the debugger. */
DUK_INTERNAL_DECL void duk_byteswap_bytes(duk_uint8_t *p, duk_small_uint_t len);
@@ -2919,8 +2930,8 @@ DUK_INTERNAL_DECL void duk_byteswap_bytes(duk_uint8_t *p, duk_small_uint_t len);
} while (0)
#endif /* DUK_USE_ALLOW_UNDEFINED_BEHAVIOR */
-DUK_INTERNAL_DECL DUK_INLINE duk_small_int_t duk_memcmp(const void *s1, const void *s2, duk_size_t len);
-DUK_INTERNAL_DECL DUK_INLINE duk_small_int_t duk_memcmp_unsafe(const void *s1, const void *s2, duk_size_t len);
+DUK_INTERNAL_DECL duk_small_int_t duk_memcmp(const void *s1, const void *s2, duk_size_t len);
+DUK_INTERNAL_DECL duk_small_int_t duk_memcmp_unsafe(const void *s1, const void *s2, duk_size_t len);
DUK_INTERNAL_DECL duk_bool_t duk_is_whole_get_int32_nonegzero(duk_double_t x, duk_int32_t *ival);
DUK_INTERNAL_DECL duk_bool_t duk_is_whole_get_int32(duk_double_t x, duk_int32_t *ival);
@@ -2940,7 +2951,7 @@ DUK_INTERNAL_DECL duk_bool_t duk_double_is_finite(duk_double_t x);
DUK_INTERNAL_DECL duk_bool_t duk_double_is_integer(duk_double_t x);
DUK_INTERNAL_DECL duk_bool_t duk_double_is_safe_integer(duk_double_t x);
-DUK_INTERNAL_DECL DUK_INLINE duk_double_t duk_double_div(duk_double_t x, duk_double_t y);
+DUK_INTERNAL_DECL duk_double_t duk_double_div(duk_double_t x, duk_double_t y);
DUK_INTERNAL_DECL duk_int_t duk_double_to_int_t(duk_double_t x);
DUK_INTERNAL_DECL duk_uint_t duk_double_to_uint_t(duk_double_t x);
DUK_INTERNAL_DECL duk_int32_t duk_double_to_int32_t(duk_double_t x);
@@ -3121,7 +3132,7 @@ DUK_INTERNAL_DECL duk_float_t duk_double_to_float_t(duk_double_t x);
#define DUK_STR_CALLSTACK_LIMIT "callstack limit"
#define DUK_STR_PROTOTYPE_CHAIN_LIMIT "prototype chain limit"
#define DUK_STR_BOUND_CHAIN_LIMIT "function call bound chain limit"
-#define DUK_STR_C_CALLSTACK_LIMIT "C call stack depth limit"
+#define DUK_STR_NATIVE_STACK_LIMIT "C stack depth limit"
#define DUK_STR_COMPILER_RECURSION_LIMIT "compiler recursion limit"
#define DUK_STR_BYTECODE_LIMIT "bytecode limit"
#define DUK_STR_REG_LIMIT "register limit"
@@ -4654,25 +4665,17 @@ struct duk_heaphdr_string {
/* Check that prev/next links are consistent: if e.g. h->prev is != NULL,
* h->prev->next should point back to h.
*/
-#if defined(DUK_USE_DOUBLE_LINKED_HEAP) && defined(DUK_USE_ASSERTIONS)
-#define DUK_ASSERT_HEAPHDR_LINKS(heap,h) do { \
- if ((h) != NULL) { \
- duk_heaphdr *h__prev, *h__next; \
- h__prev = DUK_HEAPHDR_GET_PREV((heap), (h)); \
- h__next = DUK_HEAPHDR_GET_NEXT((heap), (h)); \
- DUK_ASSERT(h__prev == NULL || (DUK_HEAPHDR_GET_NEXT((heap), h__prev) == (h))); \
- DUK_ASSERT(h__next == NULL || (DUK_HEAPHDR_GET_PREV((heap), h__next) == (h))); \
- } \
- } while (0)
+#if defined(DUK_USE_ASSERTIONS)
+DUK_INTERNAL_DECL void duk_heaphdr_assert_valid_subclassed(duk_heaphdr *h);
+DUK_INTERNAL_DECL void duk_heaphdr_assert_links(duk_heap *heap, duk_heaphdr *h);
+DUK_INTERNAL_DECL void duk_heaphdr_assert_valid(duk_heaphdr *h);
+#define DUK_HEAPHDR_ASSERT_LINKS(heap,h) do { duk_heaphdr_assert_links((heap), (h)); } while (0)
+#define DUK_HEAPHDR_ASSERT_VALID(h) do { duk_heaphdr_assert_valid((h)); } while (0)
#else
-#define DUK_ASSERT_HEAPHDR_LINKS(heap,h) do {} while (0)
+#define DUK_HEAPHDR_ASSERT_LINKS(heap,h) do {} while (0)
+#define DUK_HEAPHDR_ASSERT_VALID(h) do {} while (0)
#endif
-#define DUK_ASSERT_HEAPHDR_VALID(h) do { \
- DUK_ASSERT((h) != NULL); \
- DUK_ASSERT(DUK_HEAPHDR_HTYPE_VALID((h))); \
- } while (0)
-
#endif /* DUK_HEAPHDR_H_INCLUDED */
/* #include duk_refcount.h */
/*
@@ -5368,7 +5371,7 @@ struct duk_heaphdr_string {
#if defined(DUK_USE_REFERENCE_COUNTING)
#if defined(DUK_USE_FINALIZER_SUPPORT)
DUK_INTERNAL_DECL void duk_refzero_check_slow(duk_hthread *thr);
-DUK_INTERNAL_DECL DUK_INLINE void duk_refzero_check_fast(duk_hthread *thr);
+DUK_INTERNAL_DECL void duk_refzero_check_fast(duk_hthread *thr);
#endif
DUK_INTERNAL_DECL void duk_heaphdr_refcount_finalize_norz(duk_heap *heap, duk_heaphdr *hdr);
DUK_INTERNAL_DECL void duk_hobject_refcount_finalize_norz(duk_heap *heap, duk_hobject *h);
@@ -5409,8 +5412,6 @@ DUK_INTERNAL_DECL void duk_heaphdr_decref_norz(duk_hthread *thr, duk_heaphdr *h)
#if !defined(DUK_API_INTERNAL_H_INCLUDED)
#define DUK_API_INTERNAL_H_INCLUDED
-#define DUK_INTERNAL_SYMBOL(x) ("\x82" x)
-
/* duk_push_sprintf constants */
#define DUK_PUSH_SPRINTF_INITIAL_SIZE 256L
#define DUK_PUSH_SPRINTF_SANITY_LIMIT (1L * 1024L * 1024L * 1024L)
@@ -5423,8 +5424,8 @@ DUK_INTERNAL_DECL void duk_heaphdr_decref_norz(duk_hthread *thr, duk_heaphdr *h)
/* Current convention is to use duk_size_t for value stack sizes and global indices,
* and duk_idx_t for local frame indices.
*/
-DUK_INTERNAL_DECL DUK_INLINE void duk_valstack_grow_check_throw(duk_hthread *thr, duk_size_t min_bytes);
-DUK_INTERNAL_DECL DUK_INLINE duk_bool_t duk_valstack_grow_check_nothrow(duk_hthread *thr, duk_size_t min_bytes);
+DUK_INTERNAL_DECL void duk_valstack_grow_check_throw(duk_hthread *thr, duk_size_t min_bytes);
+DUK_INTERNAL_DECL duk_bool_t duk_valstack_grow_check_nothrow(duk_hthread *thr, duk_size_t min_bytes);
DUK_INTERNAL_DECL void duk_valstack_shrink_check_nothrow(duk_hthread *thr, duk_bool_t snug);
DUK_INTERNAL_DECL void duk_copy_tvals_incref(duk_hthread *thr, duk_tval *tv_dst, duk_tval *tv_src, duk_size_t count);
@@ -5503,6 +5504,8 @@ DUK_INTERNAL_DECL duk_bool_t duk_is_string_notsymbol(duk_hthread *thr, duk_idx_t
DUK_INTERNAL_DECL duk_bool_t duk_is_callable_tval(duk_hthread *thr, duk_tval *tv);
+DUK_INTERNAL_DECL duk_bool_t duk_is_bare_object(duk_hthread *thr, duk_idx_t idx);
+
DUK_INTERNAL_DECL duk_hstring *duk_get_hstring(duk_hthread *thr, duk_idx_t idx);
DUK_INTERNAL_DECL duk_hstring *duk_get_hstring_notsymbol(duk_hthread *thr, duk_idx_t idx);
DUK_INTERNAL_DECL const char *duk_get_string_notsymbol(duk_hthread *thr, duk_idx_t idx);
@@ -5629,6 +5632,14 @@ DUK_INTERNAL_DECL duk_bool_t duk_get_prop_stridx_short_raw(duk_hthread *thr, duk
duk_get_prop_stridx_short_raw((thr), (((duk_uint_t) (obj_idx)) << 16) + ((duk_uint_t) (stridx))))
DUK_INTERNAL_DECL duk_bool_t duk_get_prop_stridx_boolean(duk_hthread *thr, duk_idx_t obj_idx, duk_small_uint_t stridx, duk_bool_t *out_has_prop); /* [] -> [] */
+DUK_INTERNAL_DECL duk_bool_t duk_xget_owndataprop(duk_hthread *thr, duk_idx_t obj_idx);
+DUK_INTERNAL_DECL duk_bool_t duk_xget_owndataprop_stridx(duk_hthread *thr, duk_idx_t obj_idx, duk_small_uint_t stridx);
+DUK_INTERNAL_DECL duk_bool_t duk_xget_owndataprop_stridx_short_raw(duk_hthread *thr, duk_uint_t packed_args);
+#define duk_xget_owndataprop_stridx_short(thr,obj_idx,stridx) \
+ (DUK_ASSERT_EXPR((duk_int_t) (obj_idx) >= -0x8000L && (duk_int_t) (obj_idx) <= 0x7fffL), \
+ DUK_ASSERT_EXPR((duk_int_t) (stridx) >= 0 && (duk_int_t) (stridx) <= 0xffffL), \
+ duk_xget_owndataprop_stridx_short_raw((thr), (((duk_uint_t) (obj_idx)) << 16) + ((duk_uint_t) (stridx))))
+
DUK_INTERNAL_DECL duk_bool_t duk_put_prop_stridx(duk_hthread *thr, duk_idx_t obj_idx, duk_small_uint_t stridx); /* [val] -> [] */
DUK_INTERNAL_DECL duk_bool_t duk_put_prop_stridx_short_raw(duk_hthread *thr, duk_uint_t packed_args);
#define duk_put_prop_stridx_short(thr,obj_idx,stridx) \
@@ -5696,8 +5707,6 @@ DUK_INTERNAL_DECL duk_idx_t duk_unpack_array_like(duk_hthread *thr, duk_idx_t id
DUK_INTERNAL_DECL void duk_unpack(duk_hthread *thr);
#endif
-DUK_INTERNAL_DECL void duk_require_constructor_call(duk_hthread *thr);
-DUK_INTERNAL_DECL void duk_require_constructable(duk_hthread *thr, duk_idx_t idx);
DUK_INTERNAL_DECL void duk_push_symbol_descriptive_string(duk_hthread *thr, duk_hstring *h);
DUK_INTERNAL_DECL void duk_resolve_nonbound_function(duk_hthread *thr);
@@ -5730,6 +5739,8 @@ DUK_INTERNAL_DECL duk_int_t duk_pcall_method_flags(duk_hthread *thr, duk_idx_t n
DUK_INTERNAL_DECL void duk_to_primitive_ordinary(duk_hthread *thr, duk_idx_t idx, duk_int_t hint);
#endif
+DUK_INTERNAL_DECL void duk_clear_prototype(duk_hthread *thr, duk_idx_t idx);
+
/* Raw internal valstack access macros: access is unsafe so call site
* must have a guarantee that the index is valid. When that is the case,
* using these macro results in faster and smaller code than duk_get_tval().
@@ -5928,6 +5939,14 @@ DUK_INTERNAL_DECL duk_double_t duk_time_get_monotonic_time(duk_hthread *thr);
#define DUK_SYMBOL_TYPE_LOCAL 2
#define DUK_SYMBOL_TYPE_WELLKNOWN 3
+/* Assertion for duk_hstring validity. */
+#if defined(DUK_USE_ASSERTIONS)
+DUK_INTERNAL_DECL void duk_hstring_assert_valid(duk_hstring *h);
+#define DUK_HSTRING_ASSERT_VALID(h) do { duk_hstring_assert_valid((h)); } while (0)
+#else
+#define DUK_HSTRING_ASSERT_VALID(h) do {} while (0)
+#endif
+
/*
* Misc
*/
@@ -6339,26 +6358,12 @@ DUK_INTERNAL_DECL void duk_hstring_init_charlen(duk_hstring *h);
* Assert for currently guaranteed relations between flags, for instance.
*/
-#define DUK_ASSERT_HOBJECT_VALID(h) do { \
- DUK_ASSERT((h) != NULL); \
- DUK_ASSERT(!DUK_HOBJECT_IS_CALLABLE((h)) || \
- DUK_HOBJECT_GET_CLASS_NUMBER((h)) == DUK_HOBJECT_CLASS_FUNCTION); \
- DUK_ASSERT(!DUK_HOBJECT_IS_BUFOBJ((h)) || \
- (DUK_HOBJECT_GET_CLASS_NUMBER((h)) == DUK_HOBJECT_CLASS_ARRAYBUFFER || \
- DUK_HOBJECT_GET_CLASS_NUMBER((h)) == DUK_HOBJECT_CLASS_DATAVIEW || \
- DUK_HOBJECT_GET_CLASS_NUMBER((h)) == DUK_HOBJECT_CLASS_INT8ARRAY || \
- DUK_HOBJECT_GET_CLASS_NUMBER((h)) == DUK_HOBJECT_CLASS_UINT8ARRAY || \
- DUK_HOBJECT_GET_CLASS_NUMBER((h)) == DUK_HOBJECT_CLASS_UINT8CLAMPEDARRAY || \
- DUK_HOBJECT_GET_CLASS_NUMBER((h)) == DUK_HOBJECT_CLASS_INT16ARRAY || \
- DUK_HOBJECT_GET_CLASS_NUMBER((h)) == DUK_HOBJECT_CLASS_UINT16ARRAY || \
- DUK_HOBJECT_GET_CLASS_NUMBER((h)) == DUK_HOBJECT_CLASS_INT32ARRAY || \
- DUK_HOBJECT_GET_CLASS_NUMBER((h)) == DUK_HOBJECT_CLASS_UINT32ARRAY || \
- DUK_HOBJECT_GET_CLASS_NUMBER((h)) == DUK_HOBJECT_CLASS_FLOAT32ARRAY || \
- DUK_HOBJECT_GET_CLASS_NUMBER((h)) == DUK_HOBJECT_CLASS_FLOAT64ARRAY)); \
- /* Object is an Array <=> object has exotic array behavior */ \
- DUK_ASSERT((DUK_HOBJECT_GET_CLASS_NUMBER((h)) == DUK_HOBJECT_CLASS_ARRAY && DUK_HOBJECT_HAS_EXOTIC_ARRAY((h))) || \
- (DUK_HOBJECT_GET_CLASS_NUMBER((h)) != DUK_HOBJECT_CLASS_ARRAY && !DUK_HOBJECT_HAS_EXOTIC_ARRAY((h)))); \
- } while (0)
+#if defined(DUK_USE_ASSERTIONS)
+DUK_INTERNAL_DECL void duk_hobject_assert_valid(duk_hobject *h);
+#define DUK_HOBJECT_ASSERT_VALID(h) do { duk_hobject_assert_valid((h)); } while (0)
+#else
+#define DUK_HOBJECT_ASSERT_VALID(h) do {} while (0)
+#endif
/*
* Macros to access the 'props' allocation.
@@ -6909,18 +6914,13 @@ DUK_INTERNAL_DECL void duk_hobject_resize_arraypart(duk_hthread *thr,
#endif
/* low-level property functions */
-DUK_INTERNAL_DECL duk_bool_t duk_hobject_find_existing_entry(duk_heap *heap, duk_hobject *obj, duk_hstring *key, duk_int_t *e_idx, duk_int_t *h_idx);
-DUK_INTERNAL_DECL duk_tval *duk_hobject_find_existing_entry_tval_ptr(duk_heap *heap, duk_hobject *obj, duk_hstring *key);
-DUK_INTERNAL_DECL duk_tval *duk_hobject_find_existing_entry_tval_ptr_and_attrs(duk_heap *heap, duk_hobject *obj, duk_hstring *key, duk_uint_t *out_attrs);
-DUK_INTERNAL_DECL duk_tval *duk_hobject_find_existing_array_entry_tval_ptr(duk_heap *heap, duk_hobject *obj, duk_uarridx_t i);
+DUK_INTERNAL_DECL duk_bool_t duk_hobject_find_entry(duk_heap *heap, duk_hobject *obj, duk_hstring *key, duk_int_t *e_idx, duk_int_t *h_idx);
+DUK_INTERNAL_DECL duk_tval *duk_hobject_find_entry_tval_ptr(duk_heap *heap, duk_hobject *obj, duk_hstring *key);
+DUK_INTERNAL_DECL duk_tval *duk_hobject_find_entry_tval_ptr_stridx(duk_heap *heap, duk_hobject *obj, duk_small_uint_t stridx);
+DUK_INTERNAL_DECL duk_tval *duk_hobject_find_entry_tval_ptr_and_attrs(duk_heap *heap, duk_hobject *obj, duk_hstring *key, duk_uint_t *out_attrs);
+DUK_INTERNAL_DECL duk_tval *duk_hobject_find_array_entry_tval_ptr(duk_heap *heap, duk_hobject *obj, duk_uarridx_t i);
DUK_INTERNAL_DECL duk_bool_t duk_hobject_get_own_propdesc(duk_hthread *thr, duk_hobject *obj, duk_hstring *key, duk_propdesc *out_desc, duk_small_uint_t flags);
-/* XXX: when optimizing for guaranteed property slots, use a guaranteed
- * slot for internal value; this call can then access it directly.
- */
-#define duk_hobject_get_internal_value_tval_ptr(heap,obj) \
- duk_hobject_find_existing_entry_tval_ptr((heap), (obj), DUK_HEAP_STRING_INT_VALUE((heap)))
-
/* core property functions */
DUK_INTERNAL_DECL duk_bool_t duk_hobject_getprop(duk_hthread *thr, duk_tval *tv_obj, duk_tval *tv_key);
DUK_INTERNAL_DECL duk_bool_t duk_hobject_putprop(duk_hthread *thr, duk_tval *tv_obj, duk_tval *tv_key, duk_tval *tv_val, duk_bool_t throw_flag);
@@ -6964,8 +6964,10 @@ DUK_INTERNAL_DECL duk_bool_t duk_hobject_object_is_sealed_frozen_helper(duk_hthr
DUK_INTERNAL_DECL duk_bool_t duk_hobject_object_ownprop_helper(duk_hthread *thr, duk_small_uint_t required_desc_flags);
/* internal properties */
-DUK_INTERNAL_DECL duk_bool_t duk_hobject_get_internal_value(duk_heap *heap, duk_hobject *obj, duk_tval *tv);
+DUK_INTERNAL_DECL duk_tval *duk_hobject_get_internal_value_tval_ptr(duk_heap *heap, duk_hobject *obj);
DUK_INTERNAL_DECL duk_hstring *duk_hobject_get_internal_value_string(duk_heap *heap, duk_hobject *obj);
+DUK_INTERNAL_DECL duk_harray *duk_hobject_get_formals(duk_hthread *thr, duk_hobject *obj);
+DUK_INTERNAL_DECL duk_hobject *duk_hobject_get_varmap(duk_hthread *thr, duk_hobject *obj);
/* hobject management functions */
DUK_INTERNAL_DECL void duk_hobject_compact_props(duk_hthread *thr, duk_hobject *obj);
@@ -7136,9 +7138,12 @@ DUK_INTERNAL_DECL duk_ret_t duk_bi_function_prototype(duk_hthread *thr);
* Validity assert
*/
-#define DUK_ASSERT_HCOMPFUNC_VALID(h) do { \
- DUK_ASSERT((h) != NULL); \
- } while (0)
+#if defined(DUK_USE_ASSERTIONS)
+DUK_INTERNAL_DECL void duk_hcompfunc_assert_valid(duk_hcompfunc *h);
+#define DUK_HCOMPFUNC_ASSERT_VALID(h) do { duk_hcompfunc_assert_valid((h)); } while (0)
+#else
+#define DUK_HCOMPFUNC_ASSERT_VALID(h) do {} while (0)
+#endif
/*
* Main struct
@@ -7281,6 +7286,13 @@ struct duk_hcompfunc {
#if !defined(DUK_HNATFUNC_H_INCLUDED)
#define DUK_HNATFUNC_H_INCLUDED
+#if defined(DUK_USE_ASSERTIONS)
+DUK_INTERNAL_DECL void duk_hnatfunc_assert_valid(duk_hnatfunc *h);
+#define DUK_HNATFUNC_ASSERT_VALID(h) do { duk_hnatfunc_assert_valid((h)); } while (0)
+#else
+#define DUK_HNATFUNC_ASSERT_VALID(h) do {} while (0)
+#endif
+
#define DUK_HNATFUNC_NARGS_VARARGS ((duk_int16_t) -1)
#define DUK_HNATFUNC_NARGS_MAX ((duk_int16_t) 0x7fff)
@@ -7319,15 +7331,12 @@ struct duk_hnatfunc {
*/
#define DUK_HBOUNDFUNC_MAX_ARGS 0x20000000UL
-#define DUK_ASSERT_HBOUNDFUNC_VALID(h) do { \
- DUK_ASSERT((h) != NULL); \
- DUK_ASSERT(DUK_HOBJECT_IS_BOUNDFUNC((duk_hobject *) (h))); \
- DUK_ASSERT(DUK_TVAL_IS_LIGHTFUNC(&(h)->target) || \
- (DUK_TVAL_IS_OBJECT(&(h)->target) && \
- DUK_HOBJECT_IS_CALLABLE(DUK_TVAL_GET_OBJECT(&(h)->target)))); \
- DUK_ASSERT(!DUK_TVAL_IS_UNUSED(&(h)->this_binding)); \
- DUK_ASSERT((h)->nargs == 0 || (h)->args != NULL); \
- } while (0)
+#if defined(DUK_USE_ASSERTIONS)
+DUK_INTERNAL_DECL void duk_hboundfunc_assert_valid(duk_hboundfunc *h);
+#define DUK_HBOUNDFUNC_ASSERT_VALID(h) do { duk_hboundfunc_assert_valid((h)); } while (0)
+#else
+#define DUK_HBOUNDFUNC_ASSERT_VALID(h) do {} while (0)
+#endif
struct duk_hboundfunc {
/* Shared object part. */
@@ -7369,32 +7378,12 @@ struct duk_hboundfunc {
#define DUK_HBUFOBJ_ELEM_FLOAT64 8
#define DUK_HBUFOBJ_ELEM_MAX 8
-#define DUK_ASSERT_HBUFOBJ_VALID(h) do { \
- DUK_ASSERT((h) != NULL); \
- DUK_ASSERT((h)->shift <= 3); \
- DUK_ASSERT((h)->elem_type <= DUK_HBUFOBJ_ELEM_MAX); \
- DUK_ASSERT(((h)->shift == 0 && (h)->elem_type == DUK_HBUFOBJ_ELEM_UINT8) || \
- ((h)->shift == 0 && (h)->elem_type == DUK_HBUFOBJ_ELEM_UINT8CLAMPED) || \
- ((h)->shift == 0 && (h)->elem_type == DUK_HBUFOBJ_ELEM_INT8) || \
- ((h)->shift == 1 && (h)->elem_type == DUK_HBUFOBJ_ELEM_UINT16) || \
- ((h)->shift == 1 && (h)->elem_type == DUK_HBUFOBJ_ELEM_INT16) || \
- ((h)->shift == 2 && (h)->elem_type == DUK_HBUFOBJ_ELEM_UINT32) || \
- ((h)->shift == 2 && (h)->elem_type == DUK_HBUFOBJ_ELEM_INT32) || \
- ((h)->shift == 2 && (h)->elem_type == DUK_HBUFOBJ_ELEM_FLOAT32) || \
- ((h)->shift == 3 && (h)->elem_type == DUK_HBUFOBJ_ELEM_FLOAT64)); \
- DUK_ASSERT((h)->is_typedarray == 0 || (h)->is_typedarray == 1); \
- DUK_ASSERT(DUK_HOBJECT_IS_BUFOBJ((duk_hobject *) (h))); \
- if ((h)->buf == NULL) { \
- DUK_ASSERT((h)->offset == 0); \
- DUK_ASSERT((h)->length == 0); \
- } else { \
- /* No assertions for offset or length; in particular, \
- * it's OK for length to be longer than underlying \
- * buffer. Just ensure they don't wrap when added. \
- */ \
- DUK_ASSERT((h)->offset + (h)->length >= (h)->offset); \
- } \
- } while (0)
+#if defined(DUK_USE_ASSERTIONS)
+DUK_INTERNAL_DECL void duk_hbufobj_assert_valid(duk_hbufobj *h);
+#define DUK_HBUFOBJ_ASSERT_VALID(h) do { duk_hbufobj_assert_valid((h)); } while (0)
+#else
+#define DUK_HBUFOBJ_ASSERT_VALID(h) do {} while (0)
+#endif
/* Get the current data pointer (caller must ensure buf != NULL) as a
* duk_uint8_t ptr. Note that the result may be NULL if the underlying
@@ -7489,6 +7478,10 @@ DUK_INTERNAL_DECL void duk_hbufobj_push_validated_read(duk_hthread *thr, duk_hbu
DUK_INTERNAL_DECL void duk_hbufobj_validated_write(duk_hthread *thr, duk_hbufobj *h_bufobj, duk_uint8_t *p, duk_small_uint_t elem_size);
DUK_INTERNAL_DECL void duk_hbufobj_promote_plain(duk_hthread *thr, duk_idx_t idx);
+#else /* DUK_USE_BUFFEROBJECT_SUPPORT */
+
+/* nothing */
+
#endif /* DUK_USE_BUFFEROBJECT_SUPPORT */
#endif /* DUK_HBUFOBJ_H_INCLUDED */
/* #include duk_hthread.h */
@@ -7638,37 +7631,24 @@ DUK_INTERNAL_DECL void duk_hbufobj_promote_plain(duk_hthread *thr, duk_idx_t idx
* diagnose behavior so it's worth checking even when the check is not 100%.
*/
+#if defined(DUK_USE_ASSERTIONS)
/* Assertions for internals. */
-#define DUK_ASSERT_HTHREAD_VALID(thr) do { \
- DUK_ASSERT((thr) != NULL); \
- DUK_ASSERT(DUK_HEAPHDR_GET_TYPE((duk_heaphdr *) (thr)) == DUK_HTYPE_OBJECT); \
- DUK_ASSERT(DUK_HOBJECT_IS_THREAD((duk_hobject *) (thr))); \
- DUK_ASSERT((thr)->unused1 == 0); \
- DUK_ASSERT((thr)->unused2 == 0); \
- } while (0)
+DUK_INTERNAL_DECL void duk_hthread_assert_valid(duk_hthread *thr);
+#define DUK_HTHREAD_ASSERT_VALID(thr) do { duk_hthread_assert_valid((thr)); } while (0)
/* Assertions for public API calls; a bit stronger. */
-#define DUK_ASSERT_CTX_VALID(thr) do { \
- DUK_ASSERT((thr) != NULL); \
- DUK_ASSERT_HTHREAD_VALID((thr)); \
- DUK_ASSERT((thr)->valstack != NULL); \
- DUK_ASSERT((thr)->valstack_bottom != NULL); \
- DUK_ASSERT((thr)->valstack_top != NULL); \
- DUK_ASSERT((thr)->valstack_end != NULL); \
- DUK_ASSERT((thr)->valstack_alloc_end != NULL); \
- DUK_ASSERT((thr)->valstack_alloc_end >= (thr)->valstack); \
- DUK_ASSERT((thr)->valstack_end >= (thr)->valstack); \
- DUK_ASSERT((thr)->valstack_top >= (thr)->valstack); \
- DUK_ASSERT((thr)->valstack_top >= (thr)->valstack_bottom); \
- DUK_ASSERT((thr)->valstack_end >= (thr)->valstack_top); \
- DUK_ASSERT((thr)->valstack_alloc_end >= (thr)->valstack_end); \
- } while (0)
+DUK_INTERNAL_DECL void duk_ctx_assert_valid(duk_hthread *thr);
+#define DUK_CTX_ASSERT_VALID(thr) do { duk_ctx_assert_valid((thr)); } while (0)
+#else
+#define DUK_HTHREAD_ASSERT_VALID(thr) do {} while (0)
+#define DUK_CTX_ASSERT_VALID(thr) do {} while (0)
+#endif
/* Assertions for API call entry specifically. Checks 'ctx' but also may
* check internal state (e.g. not in a debugger transport callback).
*/
#define DUK_ASSERT_API_ENTRY(thr) do { \
- DUK_ASSERT_CTX_VALID((thr)); \
+ DUK_CTX_ASSERT_VALID((thr)); \
DUK_ASSERT((thr)->heap != NULL); \
DUK_ASSERT((thr)->heap->dbg_calling_transport == 0); \
} while (0)
@@ -7888,13 +7868,13 @@ DUK_INTERNAL_DECL void duk_hthread_create_builtin_objects(duk_hthread *thr);
DUK_INTERNAL_DECL duk_bool_t duk_hthread_init_stacks(duk_heap *heap, duk_hthread *thr);
DUK_INTERNAL_DECL void duk_hthread_terminate(duk_hthread *thr);
-DUK_INTERNAL_DECL DUK_INLINE duk_activation *duk_hthread_activation_alloc(duk_hthread *thr);
+DUK_INTERNAL_DECL duk_activation *duk_hthread_activation_alloc(duk_hthread *thr);
DUK_INTERNAL_DECL void duk_hthread_activation_free(duk_hthread *thr, duk_activation *act);
DUK_INTERNAL_DECL void duk_hthread_activation_unwind_norz(duk_hthread *thr);
DUK_INTERNAL_DECL void duk_hthread_activation_unwind_reuse_norz(duk_hthread *thr);
DUK_INTERNAL_DECL duk_activation *duk_hthread_get_activation_for_level(duk_hthread *thr, duk_int_t level);
-DUK_INTERNAL_DECL DUK_INLINE duk_catcher *duk_hthread_catcher_alloc(duk_hthread *thr);
+DUK_INTERNAL_DECL duk_catcher *duk_hthread_catcher_alloc(duk_hthread *thr);
DUK_INTERNAL_DECL void duk_hthread_catcher_free(duk_hthread *thr, duk_catcher *cat);
DUK_INTERNAL_DECL void duk_hthread_catcher_unwind_norz(duk_hthread *thr, duk_activation *act);
DUK_INTERNAL_DECL void duk_hthread_catcher_unwind_nolexenv_norz(duk_hthread *thr, duk_activation *act);
@@ -7925,11 +7905,12 @@ DUK_INTERNAL_DECL void duk_hthread_sync_and_null_currpc(duk_hthread *thr);
#if !defined(DUK_HARRAY_H_INCLUDED)
#define DUK_HARRAY_H_INCLUDED
-#define DUK_ASSERT_HARRAY_VALID(h) do { \
- DUK_ASSERT((h) != NULL); \
- DUK_ASSERT(DUK_HOBJECT_IS_ARRAY((duk_hobject *) (h))); \
- DUK_ASSERT(DUK_HOBJECT_HAS_EXOTIC_ARRAY((duk_hobject *) (h))); \
- } while (0)
+#if defined(DUK_USE_ASSERTIONS)
+DUK_INTERNAL_DECL void duk_harray_assert_valid(duk_harray *h);
+#define DUK_HARRAY_ASSERT_VALID(h) do { duk_harray_assert_valid((h)); } while (0)
+#else
+#define DUK_HARRAY_ASSERT_VALID(h) do {} while (0)
+#endif
#define DUK_HARRAY_LENGTH_WRITABLE(h) (!(h)->length_nonwritable)
#define DUK_HARRAY_LENGTH_NONWRITABLE(h) ((h)->length_nonwritable)
@@ -7969,18 +7950,15 @@ struct duk_harray {
#if !defined(DUK_HENV_H_INCLUDED)
#define DUK_HENV_H_INCLUDED
-#define DUK_ASSERT_HDECENV_VALID(h) do { \
- DUK_ASSERT((h) != NULL); \
- DUK_ASSERT(DUK_HOBJECT_IS_DECENV((duk_hobject *) (h))); \
- DUK_ASSERT((h)->thread == NULL || (h)->varmap != NULL); \
- } while (0)
-
-#define DUK_ASSERT_HOBJENV_VALID(h) do { \
- DUK_ASSERT((h) != NULL); \
- DUK_ASSERT(DUK_HOBJECT_IS_OBJENV((duk_hobject *) (h))); \
- DUK_ASSERT((h)->target != NULL); \
- DUK_ASSERT((h)->has_this == 0 || (h)->has_this == 1); \
- } while (0)
+#if defined(DUK_USE_ASSERTIONS)
+DUK_INTERNAL_DECL void duk_hdecenv_assert_valid(duk_hdecenv *h);
+DUK_INTERNAL_DECL void duk_hobjenv_assert_valid(duk_hobjenv *h);
+#define DUK_HDECENV_ASSERT_VALID(h) do { duk_hdecenv_assert_valid((h)); } while (0)
+#define DUK_HOBJENV_ASSERT_VALID(h) do { duk_hobjenv_assert_valid((h)); } while (0)
+#else
+#define DUK_HDECENV_ASSERT_VALID(h) do {} while (0)
+#define DUK_HOBJENV_ASSERT_VALID(h) do {} while (0)
+#endif
struct duk_hdecenv {
/* Shared object part. */
@@ -8175,6 +8153,14 @@ struct duk_hobjenv {
)
#endif
+/* Validity assert. */
+#if defined(DUK_USE_ASSERTIONS)
+DUK_INTERNAL_DECL void duk_hbuffer_assert_valid(duk_hbuffer *h);
+#define DUK_HBUFFER_ASSERT_VALID(h) do { duk_hbuffer_assert_valid((h)); } while (0)
+#else
+#define DUK_HBUFFER_ASSERT_VALID(h) do {} while (0)
+#endif
+
/*
* Structs
*/
@@ -8347,12 +8333,12 @@ DUK_INTERNAL_DECL void duk_hbuffer_reset(duk_hthread *thr, duk_hbuffer_dynamic *
#if !defined(DUK_HPROXY_H_INCLUDED)
#define DUK_HPROXY_H_INCLUDED
-#define DUK_ASSERT_HPROXY_VALID(h) do { \
- DUK_ASSERT((h) != NULL); \
- DUK_ASSERT((h)->target != NULL); \
- DUK_ASSERT((h)->handler != NULL); \
- DUK_ASSERT(DUK_HOBJECT_HAS_EXOTIC_PROXYOBJ((duk_hobject *) (h))); \
- } while (0)
+#if defined(DUK_USE_ASSERTIONS)
+DUK_INTERNAL_DECL void duk_hproxy_assert_valid(duk_hproxy *h);
+#define DUK_HPROXY_ASSERT_VALID(h) do { duk_hproxy_assert_valid((h)); } while (0)
+#else
+#define DUK_HPROXY_ASSERT_VALID(h) do {} while (0)
+#endif
struct duk_hproxy {
/* Shared object part. */
@@ -8707,6 +8693,13 @@ struct duk_litcache_entry {
* Main heap structure
*/
+#if defined(DUK_USE_ASSERTIONS)
+DUK_INTERNAL_DECL void duk_heap_assert_valid(duk_heap *heap);
+#define DUK_HEAP_ASSERT_VALID(heap) do { duk_heap_assert_valid((heap)); } while (0)
+#else
+#define DUK_HEAP_ASSERT_VALID(heap) do {} while (0)
+#endif
+
struct duk_heap {
duk_small_uint_t flags;
@@ -8778,6 +8771,11 @@ struct duk_heap {
/* Mark-and-sweep running flag. Prevents re-entry, and also causes
* refzero events to be ignored (= objects won't be queued to refzero_list).
+ *
+ * 0: mark-and-sweep not running
+ * 1: mark-and-sweep is running
+ * 2: heap destruction active or debugger active, prevent mark-and-sweep
+ * and refzero processing (but mark-and-sweep not itself running)
*/
duk_uint_t ms_running;
@@ -8996,6 +8994,11 @@ struct duk_heap {
duk_int_t stats_putprop_proxy;
duk_int_t stats_getvar_all;
duk_int_t stats_putvar_all;
+ duk_int_t stats_envrec_delayedcreate;
+ duk_int_t stats_envrec_create;
+ duk_int_t stats_envrec_newenv;
+ duk_int_t stats_envrec_oldenv;
+ duk_int_t stats_envrec_pushclosure;
#endif
};
@@ -9597,6 +9600,10 @@ DUK_INTERNAL_DECL duk_bool_t duk_fb_is_full(duk_fixedbuffer *fb);
#define DUK_ERROR_UNSUPPORTED(thr) do { \
DUK_ERROR((thr), DUK_ERR_ERROR, DUK_STR_UNSUPPORTED); \
} while (0)
+#define DUK_DCERROR_UNSUPPORTED(thr) do { \
+ DUK_ERROR_UNSUPPORTED((thr)); \
+ return 0; \
+ } while (0)
#define DUK_ERROR_ERROR(thr,msg) do { \
duk_err_error((thr), DUK_FILE_MACRO, (duk_int_t) DUK_LINE_MACRO, (msg)); \
} while (0)
@@ -9685,6 +9692,10 @@ DUK_INTERNAL_DECL duk_bool_t duk_fb_is_full(duk_fixedbuffer *fb);
#define DUK_ERROR_UNSUPPORTED(thr) do { \
duk_err_error((thr)); \
} while (0)
+#define DUK_DCERROR_UNSUPPORTED(thr) do { \
+ DUK_UNREF((thr)); \
+ return DUK_RET_ERROR; \
+ } while (0)
#define DUK_ERROR_ERROR(thr,msg) do { \
duk_err_error((thr)); \
} while (0)
@@ -10117,13 +10128,13 @@ DUK_INTERNAL_DECL duk_hobject *duk_error_prototype_from_code(duk_hthread *thr, d
* Automatically generated by extract_chars.py, do not edit!
*/
-extern const duk_uint8_t duk_unicode_ids_noa[1063];
+extern const duk_uint8_t duk_unicode_ids_noa[1116];
#else
/*
* Automatically generated by extract_chars.py, do not edit!
*/
-extern const duk_uint8_t duk_unicode_ids_noabmp[626];
+extern const duk_uint8_t duk_unicode_ids_noabmp[625];
#endif
#if defined(DUK_USE_SOURCE_NONBMP)
@@ -10145,7 +10156,7 @@ extern const duk_uint8_t duk_unicode_ids_m_let_noabmp[24];
* Automatically generated by extract_chars.py, do not edit!
*/
-extern const duk_uint8_t duk_unicode_idp_m_ids_noa[549];
+extern const duk_uint8_t duk_unicode_idp_m_ids_noa[576];
#else
/*
* Automatically generated by extract_chars.py, do not edit!
@@ -10158,8 +10169,8 @@ extern const duk_uint8_t duk_unicode_idp_m_ids_noabmp[358];
* Automatically generated by extract_caseconv.py, do not edit!
*/
-extern const duk_uint8_t duk_unicode_caseconv_uc[1386];
-extern const duk_uint8_t duk_unicode_caseconv_lc[680];
+extern const duk_uint8_t duk_unicode_caseconv_uc[1411];
+extern const duk_uint8_t duk_unicode_caseconv_lc[706];
#if defined(DUK_USE_REGEXP_CANON_WORKAROUND)
/*
@@ -10392,12 +10403,13 @@ DUK_INTERNAL_DECL void duk_js_push_closure(duk_hthread *thr,
duk_bool_t add_auto_proto);
/* call handling */
+DUK_INTERNAL_DECL void duk_native_stack_check(duk_hthread *thr);
DUK_INTERNAL_DECL duk_int_t duk_handle_call_unprotected(duk_hthread *thr, duk_idx_t idx_func, duk_small_uint_t call_flags);
DUK_INTERNAL_DECL duk_int_t duk_handle_call_unprotected_nargs(duk_hthread *thr, duk_idx_t nargs, duk_small_uint_t call_flags);
DUK_INTERNAL_DECL duk_int_t duk_handle_safe_call(duk_hthread *thr, duk_safe_call_function func, void *udata, duk_idx_t num_stack_args, duk_idx_t num_stack_res);
DUK_INTERNAL_DECL void duk_call_construct_postprocess(duk_hthread *thr, duk_small_uint_t proxy_invariant);
#if defined(DUK_USE_VERBOSE_ERRORS)
-DUK_INTERNAL_DECL void duk_call_setup_propcall_error(duk_hthread *thr, duk_tval *tv_targ, duk_tval *tv_base, duk_tval *tv_key);
+DUK_INTERNAL_DECL void duk_call_setup_propcall_error(duk_hthread *thr, duk_tval *tv_base, duk_tval *tv_key);
#endif
/* bytecode execution */
@@ -10842,8 +10854,8 @@ DUK_INTERNAL const duk_uint8_t duk_strings_data[967] = {
#if defined(DUK_USE_ROM_OBJECTS)
#error ROM support not enabled, rerun configure.py with --rom-support
#else /* DUK_USE_ROM_OBJECTS */
-/* native functions: 177 */
-DUK_INTERNAL const duk_c_function duk_bi_native_functions[177] = {
+/* native functions: 183 */
+DUK_INTERNAL const duk_c_function duk_bi_native_functions[183] = {
NULL,
duk_bi_array_constructor,
duk_bi_array_constructor_is_array,
@@ -10879,6 +10891,7 @@ DUK_INTERNAL const duk_c_function duk_bi_native_functions[177] = {
duk_bi_date_prototype_set_shared,
duk_bi_date_prototype_set_time,
duk_bi_date_prototype_to_json,
+ duk_bi_date_prototype_toprimitive,
duk_bi_date_prototype_tostring_shared,
duk_bi_date_prototype_value_of,
duk_bi_duktape_object_act,
@@ -10901,6 +10914,7 @@ DUK_INTERNAL const duk_c_function duk_bi_native_functions[177] = {
duk_bi_function_prototype_apply,
duk_bi_function_prototype_bind,
duk_bi_function_prototype_call,
+ duk_bi_function_prototype_hasinstance,
duk_bi_function_prototype_to_string,
duk_bi_global_object_decode_uri,
duk_bi_global_object_decode_uri_component,
@@ -11003,6 +11017,10 @@ DUK_INTERNAL const duk_c_function duk_bi_native_functions[177] = {
duk_bi_string_prototype_substring,
duk_bi_string_prototype_to_string,
duk_bi_string_prototype_trim,
+ duk_bi_symbol_constructor_shared,
+ duk_bi_symbol_key_for,
+ duk_bi_symbol_toprimitive,
+ duk_bi_symbol_tostring_shared,
duk_bi_textdecoder_constructor,
duk_bi_textdecoder_prototype_decode,
duk_bi_textdecoder_prototype_shared_getter,
@@ -11023,275 +11041,283 @@ DUK_INTERNAL const duk_c_function duk_bi_native_functions[177] = {
duk_bi_uint8array_plainof,
};
#if defined(DUK_USE_DOUBLE_LE)
-DUK_INTERNAL const duk_uint8_t duk_builtins_data[4116] = {
-144,148,105,224,32,68,52,228,62,12,104,200,165,132,52,167,194,138,105,243,
-124,57,28,211,57,18,64,52,238,126,44,138,111,171,241,164,19,87,129,30,33,
-167,16,145,159,8,211,136,9,225,42,5,240,145,139,163,163,8,211,136,10,228,
-64,211,19,132,140,93,29,56,70,156,64,119,34,66,146,36,104,137,194,70,46,
-142,172,35,78,32,47,146,195,102,11,240,145,139,163,175,8,211,136,9,228,240,
-242,112,145,139,163,179,8,211,136,8,237,34,130,118,49,116,118,225,26,48,0,
-1,82,29,201,158,46,183,39,135,147,132,140,93,16,132,76,66,33,8,66,16,132,
-33,8,66,26,179,233,97,167,60,150,34,33,154,112,0,1,75,247,35,79,95,237,198,
-174,200,47,31,23,95,17,13,51,19,35,93,68,216,209,128,0,10,208,174,79,15,32,
-248,8,196,24,8,107,192,0,5,106,118,27,94,0,0,43,83,227,94,0,0,43,84,46,215,
-128,0,10,213,28,198,188,0,0,86,169,100,53,224,0,2,181,79,85,175,0,0,21,170,
-154,45,120,0,0,173,85,217,107,192,0,5,106,182,243,86,193,106,52,127,130,
-249,50,94,124,35,68,225,146,49,13,31,186,23,201,146,243,224,200,39,12,145,
-136,67,134,19,49,0,0,0,0,0,0,3,225,255,51,0,0,0,0,0,0,3,193,255,47,18,1,
-172,19,120,71,10,25,196,136,113,162,156,136,199,42,57,204,144,115,132,240,
-149,2,248,72,197,209,58,2,185,16,52,196,225,35,23,68,233,14,228,72,82,68,
-141,17,56,72,197,209,58,130,249,44,54,96,191,9,24,186,39,88,79,39,135,147,
-132,140,93,19,176,35,180,138,9,216,197,209,59,82,79,35,40,242,65,248,58,42,
-96,121,14,232,94,62,46,190,15,42,31,145,33,86,65,76,242,214,143,73,48,242,
-243,79,49,56,243,115,207,57,64,243,180,79,61,72,243,244,207,65,80,244,53,
-79,69,88,244,98,30,8,200,156,67,102,120,241,79,4,100,78,21,110,4,207,32,47,
-147,37,231,194,52,78,25,34,122,81,124,153,47,62,12,130,112,201,19,211,139,
-121,34,87,69,128,104,137,239,83,18,238,108,165,2,162,92,104,56,220,233,1,8,
-151,10,134,162,100,206,16,18,50,9,195,39,105,20,101,136,18,25,4,225,147,
-180,138,5,215,49,238,105,27,60,185,1,36,104,156,50,118,145,70,96,129,34,52,
-78,25,59,72,160,93,115,30,230,145,179,204,144,12,73,8,15,38,104,128,138,52,
-146,16,30,77,1,0,2,11,132,193,198,36,248,248,186,110,158,30,78,56,188,194,
-70,183,170,136,48,98,79,142,179,120,248,185,228,140,241,193,146,66,138,31,
-55,71,138,128,153,137,62,58,205,227,226,231,146,51,199,26,6,18,92,146,64,
-96,74,72,51,120,43,192,97,68,128,153,56,72,7,12,133,67,73,199,197,207,36,
-103,142,35,2,3,33,80,210,113,241,115,201,25,160,146,225,160,9,34,1,124,178,
-1,139,18,19,36,229,146,8,190,36,169,27,62,18,243,35,100,135,54,92,162,2,17,
-46,72,128,89,7,200,32,33,18,225,98,236,145,188,130,64,196,75,132,188,200,
-217,32,43,39,28,128,69,19,18,228,144,42,98,79,142,179,120,248,185,228,140,
-241,201,97,129,114,229,201,37,2,68,184,200,1,147,93,159,153,213,34,235,250,
-96,48,157,32,24,94,160,1,199,4,184,235,55,143,139,158,72,207,28,226,3,81,
-46,62,46,155,167,135,147,142,47,60,129,71,197,207,36,103,142,34,92,35,104,
-194,68,1,89,58,36,8,109,109,12,133,67,73,195,18,115,36,118,182,185,168,8,
-109,109,12,133,67,73,201,18,115,36,118,182,185,168,130,27,91,75,115,149,71,
-240,196,156,201,29,173,174,129,2,27,91,75,115,149,71,242,68,156,201,29,173,
-174,129,34,12,16,28,128,62,191,42,3,71,146,68,4,16,22,188,161,240,16,40,
-104,242,103,196,16,93,158,125,96,110,115,235,64,131,16,16,58,37,192,70,32,
-194,144,114,25,67,95,40,6,18,8,32,48,156,209,2,108,124,96,224,144,6,247,62,
-16,0,143,164,143,12,248,15,18,84,145,145,34,128,11,35,160,179,140,0,44,150,
-129,18,58,0,146,116,103,32,128,105,61,104,17,36,175,1,232,217,29,5,156,179,
-224,58,26,50,95,142,43,159,64,181,130,83,226,26,50,95,142,43,159,192,7,255,
-248,41,42,72,226,1,160,18,78,97,32,26,64,114,186,60,32,4,120,6,148,13,128,
-124,3,76,12,84,46,100,140,3,78,13,18,14,130,36,67,232,23,18,14,130,39,34,
-131,30,113,15,224,3,255,253,6,48,40,194,197,204,224,142,8,240,78,25,60,231,
-192,210,197,204,224,156,50,113,238,67,103,232,62,28,138,156,104,82,170,107,
-255,32,48,191,144,1,132,112,71,128,159,168,128,161,28,17,224,156,50,112,19,
-245,144,22,39,12,156,123,144,217,240,19,245,146,3,9,205,16,39,236,62,3,161,
-163,37,248,226,251,141,1,107,4,167,196,52,100,191,28,95,113,164,13,91,132,
-5,147,130,115,30,8,147,222,64,43,1,49,31,224,64,60,72,245,128,68,249,32,13,
-34,2,34,63,204,128,89,45,2,39,209,0,89,61,104,159,213,0,153,80,50,156,80,
-211,126,16,11,155,184,183,88,145,224,129,34,122,64,17,155,184,183,8,11,39,
-22,235,18,60,16,36,79,72,1,115,119,40,247,146,60,16,36,79,72,32,140,221,
-197,184,64,89,57,71,188,145,224,129,34,122,65,1,39,20,51,244,0,52,72,242,2,
-127,18,2,165,48,70,114,229,145,51,253,141,1,4,104,229,203,34,103,251,26,64,
-132,52,75,160,201,47,105,160,26,84,12,167,31,186,8,50,0,114,58,113,163,46,
-190,120,35,11,60,4,25,68,81,61,96,47,181,80,46,132,129,255,255,255,255,255,
-255,222,254,39,172,67,118,170,5,208,144,0,64,0,0,0,0,0,0,51,16,0,0,0,0,0,0,
-62,31,200,245,238,146,38,138,147,105,13,42,26,137,226,0,0,0,0,0,0,7,131,
-249,30,180,134,4,209,82,109,33,165,67,81,60,64,0,0,0,0,0,0,240,255,15,210,
-62,72,91,155,0,0,0,0,0,0,2,192,240,135,88,11,237,72,5,38,210,27,50,24,145,
-129,255,255,255,255,255,254,126,134,67,172,67,118,164,2,147,105,13,153,12,
-72,192,255,255,255,255,255,255,63,195,16,240,70,68,226,27,51,199,138,120,
-35,34,112,171,112,38,121,7,16,137,112,168,106,38,77,193,1,40,151,16,217,
-144,196,142,224,144,21,18,227,65,198,238,9,67,81,46,72,5,39,16,217,144,196,
-142,224,152,228,148,227,64,0,0,0,0,0,0,0,0,131,175,223,16,194,111,8,97,119,
-224,3,205,220,42,46,65,238,200,13,155,184,75,189,205,35,102,128,47,116,64,
-92,221,199,196,130,68,144,230,239,72,65,152,12,21,224,140,137,92,128,62,
-210,98,177,252,3,107,173,88,3,146,211,141,32,0,0,0,0,0,3,225,255,19,175,
-188,0,100,221,193,130,100,228,167,20,52,215,129,3,38,238,77,12,39,37,56,
-161,166,188,10,194,94,6,18,155,184,183,8,11,39,6,9,147,146,156,80,211,94,7,
-18,155,184,183,8,11,39,38,134,19,146,156,80,211,94,8,12,53,224,130,195,222,
-8,77,133,210,24,91,224,3,152,147,228,208,194,95,0,44,196,159,11,69,175,152,
-32,35,100,33,135,24,147,237,38,34,246,139,95,48,64,70,200,68,8,49,39,198,
-57,179,61,144,138,22,98,79,180,152,153,215,54,103,178,17,129,204,73,240,96,
-153,44,132,112,163,18,125,164,196,62,130,100,178,18,1,140,73,240,96,197,
-144,146,18,98,79,180,152,135,208,98,200,74,8,49,39,195,186,145,149,144,150,
-22,98,79,180,152,143,215,82,50,178,19,2,140,73,241,136,109,38,73,89,9,161,
-166,36,251,73,137,157,67,105,50,74,200,78,10,49,39,201,16,78,104,229,100,
-39,134,152,147,237,38,41,116,130,115,71,43,33,64,60,196,159,24,133,173,18,
-32,156,209,202,200,81,18,49,39,218,76,76,234,22,180,72,130,115,71,43,33,72,
-68,196,159,38,134,19,46,105,56,226,150,68,157,160,1,228,73,242,104,97,46,
-16,31,34,79,140,66,214,137,16,78,104,229,108,169,137,72,147,237,38,38,117,
-11,90,36,65,57,163,149,178,168,21,34,79,146,32,156,209,202,218,250,161,178,
-36,251,73,138,93,32,156,209,202,218,250,193,82,36,248,196,54,147,36,173,
-191,174,27,34,79,180,152,153,212,54,147,36,173,191,176,17,34,79,135,117,35,
-43,115,236,133,200,147,237,38,35,245,212,140,173,207,180,15,34,79,131,4,
-201,108,173,133,72,147,237,38,33,244,19,37,178,184,17,34,79,140,115,102,
-123,107,238,133,200,147,237,38,38,117,205,153,237,175,188,23,34,79,133,162,
-215,204,16,17,182,254,248,116,137,62,210,98,47,104,181,243,4,4,109,191,192,
-131,152,147,230,8,8,217,12,16,60,137,62,96,128,141,178,193,160,206,1,201,
-176,113,146,0,0,0,0,0,0,0,0,49,185,252,65,137,207,227,37,215,207,227,12,86,
-127,24,152,188,254,49,88,33,46,65,120,72,4,153,37,63,33,13,127,148,4,26,0,
-57,62,6,228,163,228,74,86,215,62,55,28,110,179,226,113,70,223,62,47,24,38,
-191,30,2,125,32,40,20,87,114,41,225,42,5,240,145,139,163,145,41,68,250,128,
-80,41,174,228,85,200,129,166,39,9,24,186,57,18,148,79,172,5,2,170,238,69,
-220,137,10,72,145,162,39,9,24,186,57,18,148,79,176,5,2,186,238,69,124,150,
-27,48,95,132,140,93,28,137,74,39,218,2,129,101,119,34,158,79,15,39,9,24,
-186,57,18,148,79,184,5,2,218,238,69,29,164,80,78,198,46,142,68,165,16,64,
-28,24,61,73,25,33,205,128,0,0,0,0,1,167,166,129,108,242,151,15,39,8,34,26,
-87,97,200,3,0,167,129,32,8,194,195,16,6,84,55,10,60,3,35,69,132,30,1,140,
-130,193,143,1,196,230,60,2,158,8,131,153,64,115,42,46,191,176,8,194,246,0,
-80,5,220,193,95,6,234,5,100,225,35,23,71,35,6,228,140,93,29,180,55,108,145,
-139,163,182,112,52,107,67,76,56,3,153,132,20,28,76,156,89,26,105,158,62,0,
-0,42,193,2,201,104,17,41,34,156,204,176,160,226,100,226,200,211,76,241,240,
-0,1,86,2,131,137,147,142,41,100,73,199,192,0,5,96,6,13,10,82,70,62,0,0,42,
-130,88,115,18,124,67,103,177,69,49,129,6,36,249,68,54,123,20,82,216,65,137,
-62,33,179,209,214,162,152,208,147,18,124,162,27,61,29,106,41,112,32,196,
-159,16,217,233,233,81,76,112,73,137,62,81,13,158,158,149,20,186,20,98,79,
-133,91,129,61,61,42,41,120,40,196,159,10,183,2,122,218,148,82,248,60,137,
-62,33,179,216,166,216,192,137,18,124,162,27,61,138,109,108,34,68,159,16,
-217,232,235,83,108,104,76,137,62,81,13,158,142,181,54,184,17,34,79,136,108,
-244,244,169,182,56,38,68,159,40,134,207,79,74,155,93,10,145,39,194,173,192,
-158,158,149,54,188,21,34,79,133,91,129,61,109,74,109,125,155,51,136,71,161,
-196,201,45,167,146,59,68,89,24,70,206,0,0,0,0,0,0,7,129,249,155,51,168,71,
-161,196,201,45,167,146,59,68,89,24,70,206,0,0,0,0,0,0,7,129,249,155,51,200,
-71,161,196,201,45,167,146,59,68,89,24,70,206,0,0,0,0,0,0,7,129,249,155,51,
-232,71,161,196,201,45,167,146,59,68,89,24,70,206,0,0,0,0,0,0,0,2,1,155,52,
-8,71,161,196,201,45,167,146,59,68,89,24,70,206,0,0,0,0,0,0,0,2,1,155,52,40,
-71,161,196,201,45,167,146,59,68,89,24,70,206,0,0,0,0,0,0,0,130,1,155,52,72,
-71,161,196,201,45,167,146,59,68,89,24,70,206,0,0,0,0,0,0,0,130,1,155,52,
-104,71,161,196,201,45,167,146,59,68,89,24,70,206,0,0,0,0,0,0,0,130,1,155,
-52,136,71,161,196,201,45,167,146,59,68,89,24,70,206,0,0,0,0,0,0,1,2,1,135,
-52,166,32,76,72,1,246,136,235,103,177,69,0,136,144,3,226,27,61,138,41,44,
-50,36,0,251,68,117,179,209,214,234,201,69,16,50,36,0,251,68,117,179,209,
-214,232,73,69,34,5,196,128,31,16,217,232,235,117,100,162,147,2,226,64,15,
-136,108,244,117,186,18,81,74,129,145,32,7,218,35,173,158,158,151,86,74,40,
-161,145,32,7,218,35,173,158,158,151,66,74,41,20,46,36,0,248,134,207,79,75,
-171,37,20,154,23,18,0,124,67,103,167,165,208,146,138,85,11,137,0,62,21,110,
-4,250,178,81,70,11,137,0,62,21,110,4,250,18,81,72,193,145,32,7,193,186,129,
-89,58,178,81,71,12,137,0,62,13,212,10,201,208,146,138,71,10,137,0,62,209,
-29,108,250,178,81,104,1,81,32,7,218,35,173,159,66,74,45,32,38,36,0,248,134,
-207,171,37,22,160,19,18,0,124,67,103,208,146,139,88,10,180,81,50,118,136,
-235,103,177,77,128,155,69,19,39,16,217,236,83,105,97,182,138,38,78,209,29,
-108,244,117,186,178,83,100,13,180,81,50,118,136,235,103,163,173,208,146,
-155,68,12,180,81,50,113,13,158,142,183,86,74,109,48,50,209,68,201,196,54,
-122,58,221,9,41,181,64,219,69,19,39,104,142,182,122,122,93,89,41,178,134,
-218,40,153,59,68,117,179,211,210,232,73,77,162,134,90,40,153,56,134,207,79,
-75,171,37,54,154,25,104,162,100,226,27,61,61,46,132,148,218,168,101,162,
-137,147,133,91,129,62,172,148,217,131,45,20,76,156,42,220,9,244,36,166,209,
-131,109,20,76,156,27,168,21,147,171,37,54,112,219,69,19,39,6,234,5,100,232,
-73,77,163,133,218,40,153,59,68,117,179,234,201,78,32,5,218,40,153,59,68,
-117,179,232,73,78,36,5,90,40,153,56,134,207,171,37,56,160,21,104,162,100,
-226,27,62,132,148,226,195,95,182,97,176,218,128,8,84,45,123,38,1,137,10,1,
-114,160,64,56,156,199,130,36,160,72,8,39,63,27,24,1,100,180,8,148,146,0,45,
-162,137,147,111,2,8,4,16,7,8,96,120,72,13,42,226,145,97,87,224,168,1,58,
-182,232,232,64,22,85,181,187,177,107,2,64,7,213,183,74,7,121,207,215,242,
-17,119,49,248,94,173,198,210,36,15,232,34,182,84,113,95,115,240,221,91,141,
-163,160,72,1,220,164,194,175,121,123,103,224,186,244,64,24,45,68,84,251,33,
-9,64,15,217,66,51,209,218,210,129,154,118,254,205,61,65,204,126,23,178,132,
-103,165,3,52,237,253,154,122,131,216,254,168,48,6,90,130,1,0,39,75,80,72,8,
-9,33,186,130,80,64,76,13,212,19,2,130,96,110,150,173,0,65,6,51,212,20,128,
-65,17,11,212,19,130,137,121,211,210,209,144,6,39,75,80,80,0,201,119,234,10,
-8,41,86,231,71,80,80,129,79,135,186,122,69,224,34,25,69,233,80,3,91,141,
-168,40,96,139,113,180,181,5,36,21,110,54,142,134,160,165,1,176,23,211,47,0,
-216,134,233,215,128,111,117,181,104,128,209,3,70,230,106,64,5,139,168,209,
-234,10,32,36,144,102,234,136,3,146,27,168,40,160,146,132,103,168,40,192,
-115,3,117,5,28,22,113,163,69,168,41,103,1,66,188,17,145,52,40,4,202,113,67,
-76,130,227,68,194,13,240,108,0,0,83,96,0,2,161,0,104,146,84,97,48,0,1,78,
-192,56,169,24,145,179,192,0,5,48,8,56,16,32,128,56,18,52,125,166,86,147,
-182,140,28,50,21,13,39,31,23,60,145,158,56,140,141,47,113,6,155,186,188,24,
-49,39,199,89,188,124,92,242,70,120,224,201,33,69,15,155,163,197,68,14,49,
-39,199,197,211,116,240,242,113,197,230,18,180,253,228,3,17,46,18,243,35,
-100,128,172,156,114,70,163,146,76,34,248,146,164,108,248,75,204,141,146,28,
-217,114,137,27,78,251,241,173,234,162,160,225,1,3,34,92,170,9,105,164,32,
-225,64,131,155,1,193,133,7,19,39,22,70,154,103,143,128,0,10,176,20,28,76,
-156,113,75,34,78,62,0,0,43,0,48,104,82,146,49,240,0,1,84,11,180,192,0,5,
-114,1,18,160,65,24,131,20,145,25,172,48,132,122,28,76,146,218,121,35,180,
-69,145,132,108,224,0,0,0,0,0,0,120,31,153,172,56,132,122,28,76,146,218,121,
-35,180,69,145,132,108,224,0,0,0,0,0,0,120,31,168,160,45,110,23,30,176,33,
-184,0,0,175,32,29,235,2,27,199,23,0,0,22,4,51,88,129,8,244,56,153,37,180,
-242,71,104,139,35,8,217,192,0,0,0,0,0,0,240,63,51,88,145,8,244,56,153,37,
-180,242,71,104,139,35,8,217,192,0,0,0,0,0,0,0,64,51,88,161,8,244,56,153,37,
-180,242,71,104,139,35,8,217,192,0,0,0,0,0,0,0,64,51,88,177,8,244,56,153,37,
-180,242,71,104,139,35,8,217,192,0,0,0,0,0,0,16,64,51,88,193,8,244,56,153,
-37,180,242,71,104,139,35,8,217,192,0,0,0,0,0,0,16,64,51,88,209,8,244,56,
-153,37,180,242,71,104,139,35,8,217,192,0,0,0,0,0,0,16,64,51,88,225,8,244,
-56,153,37,180,242,71,104,139,35,8,217,192,0,0,0,0,0,0,32,64,32,227,194,0,
-97,57,162,4,245,232,5,34,92,35,68,225,161,166,218,16,16,137,112,52,41,73,
-29,153,1,65,196,201,197,145,166,153,245,200,3,137,204,120,34,74,8,200,58,
-112,28,211,32,130,52,78,26,26,110,248,0,0,164,4,12,70,137,195,39,252,73,
-240,117,32,57,168,97,4,104,156,52,52,221,255,160,20,160,152,23,223,250,32,
-148,25,174,137,58,23,51,191,244,84,12,50,9,195,39,240,81,238,2,3,107,173,
-214,3,192,
+DUK_INTERNAL const duk_uint8_t duk_builtins_data[4251] = {
+144,148,105,225,32,68,52,228,126,12,104,201,37,132,52,167,194,138,105,244,
+124,57,28,211,57,18,64,52,238,254,44,138,111,171,241,164,19,87,137,30,33,
+167,18,145,159,8,211,137,9,225,42,5,240,145,139,163,163,8,211,137,10,228,
+64,211,19,132,140,93,29,56,70,156,72,119,34,66,146,36,104,137,194,70,46,
+142,172,35,78,36,47,146,195,102,11,240,145,139,163,175,8,211,137,9,228,240,
+242,112,145,139,163,179,8,211,137,8,237,34,130,118,49,116,118,225,26,48,0,
+1,94,29,201,158,46,183,39,135,147,132,140,93,16,132,76,66,33,8,66,16,132,
+33,8,66,26,180,41,97,167,64,150,34,33,154,112,0,1,87,247,35,79,103,237,198,
+174,216,47,31,23,95,17,13,31,217,96,211,49,50,53,212,77,141,24,0,0,179,10,
+228,240,242,15,128,140,65,128,134,188,0,0,89,167,97,181,224,0,2,205,62,53,
+224,0,2,205,66,237,120,0,0,179,81,204,107,192,0,5,154,150,67,94,0,0,44,212,
+245,90,240,0,1,102,169,162,215,128,0,11,53,93,150,188,0,0,89,171,111,53,
+108,150,163,70,0,0,42,2,249,50,94,124,35,68,225,146,49,13,24,0,0,165,161,
+124,153,47,62,12,130,112,201,24,132,56,97,115,16,0,0,0,0,0,0,62,31,243,48,
+0,0,0,0,0,0,60,31,242,241,32,26,193,55,132,112,161,156,72,135,26,41,200,
+140,114,163,156,201,7,56,79,9,80,47,132,140,93,19,160,43,145,3,76,78,18,49,
+116,78,144,238,68,133,36,72,209,19,132,140,93,19,168,47,146,195,102,11,240,
+145,139,162,117,132,242,120,121,56,72,197,209,59,2,59,72,160,157,140,93,19,
+181,36,242,50,143,36,31,131,162,166,7,144,238,133,227,226,235,224,242,161,
+249,18,21,100,20,207,44,199,151,180,122,89,135,152,154,121,153,199,156,158,
+121,218,7,158,162,121,250,71,160,166,122,26,135,162,170,122,58,199,164,16,
+240,70,68,226,27,51,199,138,120,35,34,112,171,112,38,121,1,124,153,47,62,
+17,162,112,201,19,211,11,228,201,121,240,100,19,134,72,158,160,91,201,18,
+186,44,3,68,79,122,168,151,115,165,40,21,18,227,65,198,231,200,8,68,184,84,
+53,19,38,120,128,145,144,78,25,59,72,163,48,64,144,200,39,12,157,164,80,46,
+185,143,115,72,217,230,72,9,35,68,225,147,180,138,51,68,9,17,162,112,201,
+218,69,2,235,152,247,52,141,158,108,128,98,72,64,121,51,132,4,81,164,144,
+128,242,104,136,0,16,92,38,14,49,39,199,197,211,116,240,242,113,197,231,18,
+53,189,116,65,131,18,124,117,155,199,197,207,36,103,142,12,146,20,80,249,
+186,60,116,4,204,73,241,214,111,31,23,60,145,158,56,208,48,146,229,146,3,2,
+82,65,155,195,94,3,10,36,4,201,196,64,56,100,42,26,78,62,46,121,35,60,113,
+152,16,25,10,134,147,143,139,158,72,205,4,151,21,0,73,16,11,230,144,12,88,
+144,153,39,52,144,69,241,37,72,217,240,151,153,27,36,57,178,230,16,16,137,
+114,68,2,200,62,81,1,8,151,11,23,100,141,229,18,6,34,92,37,230,70,201,1,89,
+57,36,2,40,152,151,44,129,83,18,124,117,155,199,197,207,36,103,142,75,12,
+11,151,46,89,40,18,37,200,64,12,154,236,252,238,185,23,95,213,1,132,234,0,
+194,245,128,14,56,37,199,89,188,124,92,242,70,120,232,16,26,137,113,241,
+116,221,60,60,156,113,122,36,10,62,46,121,35,60,113,18,225,27,70,18,32,10,
+201,211,32,67,107,104,100,42,26,78,24,147,153,35,181,181,207,64,67,107,104,
+100,42,26,78,72,147,153,35,181,181,207,68,16,218,218,91,156,170,63,134,36,
+230,72,237,109,116,136,16,218,218,91,156,170,63,146,36,230,72,237,109,116,
+137,16,96,128,228,2,6,191,46,3,71,147,68,4,16,22,188,169,240,16,40,104,242,
+135,198,171,44,68,65,5,217,231,215,6,231,62,188,8,49,1,3,162,92,4,98,12,41,
+7,33,148,53,242,128,97,32,130,3,9,205,16,38,199,198,14,9,0,111,115,225,0,8,
+250,72,240,207,128,241,37,73,25,18,40,0,178,58,11,56,192,2,201,104,17,35,
+160,9,39,70,114,8,6,147,214,129,18,74,240,30,141,145,208,89,203,62,3,161,
+163,37,248,226,185,244,11,88,37,62,33,163,37,248,226,185,252,0,127,255,130,
+146,164,142,32,26,1,36,230,18,1,164,7,43,163,194,0,71,128,105,64,216,7,192,
+52,192,197,66,230,72,192,52,224,209,32,232,34,68,62,129,113,32,232,34,114,
+40,49,231,16,254,0,63,255,208,99,2,140,44,92,206,8,224,143,4,225,147,210,
+124,13,44,92,206,9,195,39,30,228,54,126,163,225,200,169,198,133,42,166,191,
+246,3,11,251,0,24,71,4,120,9,251,8,10,17,193,30,9,195,39,1,63,105,1,98,112,
+201,199,185,13,159,1,63,105,32,48,156,209,2,126,227,224,58,26,50,95,142,47,
+192,208,22,176,74,124,67,70,75,241,197,248,26,64,213,184,64,89,56,39,49,
+224,137,62,36,2,176,19,17,254,68,3,196,143,88,4,79,162,0,210,32,34,35,253,
+72,5,146,208,34,125,144,5,147,214,137,253,208,9,149,3,41,197,13,55,233,0,
+185,187,139,117,137,30,8,18,39,172,1,25,187,139,112,128,178,113,110,177,35,
+193,2,68,245,128,23,55,114,143,121,35,193,2,68,245,130,8,205,220,91,132,5,
+147,148,123,201,30,8,18,39,172,16,18,113,67,63,128,3,68,143,32,39,243,32,
+42,83,4,103,46,89,19,63,224,208,16,70,142,92,178,38,127,193,164,8,67,68,
+186,12,146,247,154,1,165,64,202,113,252,160,131,32,7,35,167,26,50,235,231,
+130,48,179,192,65,148,69,19,214,2,251,85,2,232,72,31,255,255,255,255,255,
+253,239,226,122,196,55,106,160,93,9,0,4,0,0,0,0,0,0,3,49,0,0,0,0,0,0,3,225,
+252,143,94,233,34,104,169,54,144,210,161,168,158,32,0,0,0,0,0,0,120,63,145,
+235,72,96,77,21,38,210,26,84,53,19,196,0,0,0,0,0,0,15,15,240,253,35,228,
+133,185,176,0,0,0,0,0,0,44,15,8,117,128,190,212,128,82,109,33,179,33,137,
+24,31,255,255,255,255,255,231,232,100,58,196,55,106,64,41,54,144,217,144,
+196,140,15,255,255,255,255,255,243,252,49,15,4,100,78,33,179,60,120,167,
+130,50,39,10,183,2,103,144,113,8,151,10,134,162,100,221,16,18,137,113,13,
+153,12,72,238,137,1,81,46,52,28,110,232,148,53,18,228,128,82,113,13,153,12,
+72,238,137,142,73,78,52,0,0,0,0,0,0,0,0,8,58,254,1,12,38,248,134,23,130,0,
+60,221,194,162,228,30,244,128,217,187,132,187,220,210,54,104,2,247,132,5,
+205,220,124,72,36,73,14,110,252,132,25,128,193,94,8,200,149,200,3,237,38,
+43,31,192,54,186,213,128,57,45,56,210,0,0,0,0,0,0,62,31,241,90,251,224,6,
+77,220,24,38,78,74,113,67,77,124,16,50,110,228,208,194,114,83,138,26,107,
+224,172,37,240,97,41,187,139,112,128,178,112,96,153,57,41,197,13,53,240,
+113,41,187,139,112,128,178,114,104,97,57,41,197,13,53,240,128,195,95,8,44,
+61,240,132,216,93,33,133,192,128,14,98,79,147,67,9,129,0,44,196,159,11,69,
+175,152,32,35,100,33,135,24,147,237,38,34,246,139,95,48,64,70,200,68,8,49,
+39,198,57,179,61,144,138,22,98,79,180,152,153,215,54,103,178,17,129,204,73,
+240,96,153,44,132,112,163,18,125,164,196,62,130,100,178,18,1,140,73,240,96,
+197,144,146,18,98,79,180,152,135,208,98,200,74,8,49,39,195,186,145,149,144,
+150,22,98,79,180,152,143,215,82,50,178,19,2,140,73,241,136,109,38,73,89,9,
+161,166,36,251,73,137,157,67,105,50,74,200,78,10,49,39,201,16,78,104,229,
+100,39,134,152,147,237,38,41,116,130,115,71,43,33,64,60,196,159,24,133,173,
+18,32,156,209,202,200,81,18,49,39,218,76,76,234,22,180,72,130,115,71,43,33,
+72,68,196,159,38,134,19,46,105,56,226,150,68,157,160,1,228,73,242,104,97,
+46,16,31,34,79,140,66,214,137,16,78,104,229,108,169,137,72,147,237,38,38,
+117,11,90,36,65,57,163,149,178,168,21,34,79,146,32,156,209,202,218,250,161,
+178,36,251,73,138,93,32,156,209,202,218,250,193,82,36,248,196,54,147,36,
+173,191,174,27,34,79,180,152,153,212,54,147,36,173,191,176,17,34,79,135,
+117,35,43,115,236,133,200,147,237,38,35,245,212,140,173,207,180,15,34,79,
+131,4,201,108,173,133,72,147,237,38,33,244,19,37,178,184,17,34,79,140,115,
+102,123,107,238,133,200,147,237,38,38,117,205,153,237,175,188,23,34,79,133,
+162,215,204,16,17,182,254,248,116,137,62,210,98,47,104,181,243,4,4,109,191,
+192,131,152,147,230,8,8,217,12,16,60,137,62,96,128,141,178,193,181,55,136,
+200,51,128,114,108,28,100,128,0,0,0,0,0,0,0,12,110,127,32,98,115,249,73,
+117,243,249,67,21,159,202,38,47,63,148,86,8,75,144,94,50,1,38,73,79,204,67,
+95,231,1,6,128,14,79,129,185,40,249,18,149,181,207,142,199,155,172,248,172,
+89,183,207,140,198,137,175,200,0,159,72,10,5,21,220,138,120,74,129,124,36,
+98,232,228,74,81,62,160,20,10,107,185,21,114,32,105,137,194,70,46,142,68,
+165,19,235,1,64,170,187,145,119,34,66,146,36,104,137,194,70,46,142,68,165,
+19,236,1,64,174,187,145,95,37,134,204,23,225,35,23,71,34,82,137,246,128,
+160,89,93,200,167,147,195,201,194,70,46,142,68,165,19,238,1,64,182,187,145,
+71,105,20,19,177,139,163,145,41,68,16,7,6,15,82,70,72,115,96,0,0,0,0,0,118,
+105,160,91,60,165,195,201,194,8,134,149,216,130,0,192,41,224,136,2,48,176,
+228,1,149,13,195,15,0,200,209,97,71,128,99,32,176,131,192,113,57,143,0,167,
+131,32,230,80,28,202,139,175,237,2,48,189,160,20,1,119,48,87,193,186,129,
+89,56,72,197,209,200,193,185,35,23,71,109,13,219,36,98,232,237,156,13,26,
+208,211,14,102,19,87,137,91,95,128,0,10,64,24,92,0,0,82,2,53,63,240,49,204,
+202,10,14,38,78,44,141,52,207,31,0,0,22,32,129,100,180,8,148,145,78,102,
+152,80,113,50,113,100,105,166,120,248,0,0,177,1,65,196,201,199,20,178,36,
+227,224,0,2,200,3,6,133,41,35,31,0,0,22,1,44,57,137,62,33,179,216,162,152,
+192,131,18,124,162,27,61,138,41,108,32,196,159,16,217,232,235,81,76,104,73,
+137,62,81,13,158,142,181,20,184,16,98,79,136,108,244,244,168,166,56,36,196,
+159,40,134,207,79,74,138,93,10,49,39,194,173,192,158,158,149,20,188,20,98,
+79,133,91,129,61,109,74,41,124,30,68,159,16,217,236,83,108,96,68,137,62,81,
+13,158,197,54,182,17,34,79,136,108,244,117,169,182,52,38,68,159,40,134,207,
+71,90,155,92,8,145,39,196,54,122,122,84,219,28,19,34,79,148,67,103,167,165,
+77,174,133,72,147,225,86,224,79,79,74,155,94,10,145,39,194,173,192,158,182,
+165,54,190,206,25,212,35,208,226,100,150,211,201,29,162,44,140,35,103,0,0,
+0,0,0,0,3,192,252,206,25,228,35,208,226,100,150,211,201,29,162,44,140,35,
+103,0,0,0,0,0,0,3,192,252,206,25,244,35,208,226,100,150,211,201,29,162,44,
+140,35,103,0,0,0,0,0,0,3,192,252,206,26,4,35,208,226,100,150,211,201,29,
+162,44,140,35,103,0,0,0,0,0,0,0,1,0,206,26,20,35,208,226,100,150,211,201,
+29,162,44,140,35,103,0,0,0,0,0,0,0,1,0,206,26,36,35,208,226,100,150,211,
+201,29,162,44,140,35,103,0,0,0,0,0,0,0,65,0,206,26,52,35,208,226,100,150,
+211,201,29,162,44,140,35,103,0,0,0,0,0,0,0,65,0,206,26,68,35,208,226,100,
+150,211,201,29,162,44,140,35,103,0,0,0,0,0,0,0,65,0,206,26,84,35,208,226,
+100,150,211,201,29,162,44,140,35,103,0,0,0,0,0,0,0,129,0,195,154,99,16,38,
+36,0,251,68,117,179,216,162,128,68,72,1,241,13,158,197,20,150,25,18,0,125,
+162,58,217,232,235,117,100,162,136,25,18,0,125,162,58,217,232,235,116,36,
+162,145,2,226,64,15,136,108,244,117,186,178,81,73,129,113,32,7,196,54,122,
+58,221,9,40,165,64,200,144,3,237,17,214,207,79,75,171,37,20,80,200,144,3,
+237,17,214,207,79,75,161,37,20,138,23,18,0,124,67,103,167,165,213,146,138,
+77,11,137,0,62,33,179,211,210,232,73,69,42,133,196,128,31,10,183,2,125,89,
+40,163,5,196,128,31,10,183,2,125,9,40,164,96,200,144,3,224,221,64,172,157,
+89,40,163,134,68,128,31,6,234,5,100,232,73,69,35,133,68,128,31,104,142,182,
+125,89,40,180,0,168,144,3,237,17,214,207,161,37,22,144,19,18,0,124,67,103,
+213,146,139,80,9,137,0,62,33,179,232,73,69,172,5,90,40,153,59,68,117,179,
+216,166,192,77,162,137,147,136,108,246,41,180,176,219,69,19,39,104,142,182,
+122,58,221,89,41,178,6,218,40,153,59,68,117,179,209,214,232,73,77,162,6,90,
+40,153,56,134,207,71,91,171,37,54,152,25,104,162,100,226,27,61,29,110,132,
+148,218,160,109,162,137,147,180,71,91,61,61,46,172,148,217,67,109,20,76,
+157,162,58,217,233,233,116,36,166,209,67,45,20,76,156,67,103,167,165,213,
+146,155,77,12,180,81,50,113,13,158,158,151,66,74,109,84,50,209,68,201,194,
+173,192,159,86,74,108,193,150,138,38,78,21,110,4,250,18,83,104,193,182,138,
+38,78,13,212,10,201,213,146,155,56,109,162,137,147,131,117,2,178,116,36,
+166,209,194,237,20,76,157,162,58,217,245,100,167,16,2,237,20,76,157,162,58,
+217,244,36,167,18,2,173,20,76,156,67,103,213,146,156,80,10,180,81,50,113,
+13,159,66,74,113,97,175,220,48,216,109,192,4,42,22,189,163,0,196,133,0,185,
+80,32,28,78,99,193,18,80,36,4,19,159,141,156,0,178,90,4,74,73,0,22,209,68,
+201,185,129,4,2,8,3,132,64,60,36,6,149,113,72,176,171,240,84,0,157,91,116,
+116,32,11,42,218,221,216,181,129,32,3,234,219,165,3,188,231,235,249,8,187,
+152,252,47,86,227,105,18,7,244,17,91,42,56,175,185,248,110,173,198,209,208,
+36,0,238,82,97,87,188,189,179,240,93,122,32,12,22,162,42,125,144,132,160,7,
+236,161,25,232,237,105,64,205,59,127,102,158,160,230,63,11,217,66,51,210,
+129,154,118,254,205,61,65,236,127,171,197,34,168,48,6,90,162,1,0,39,75,84,
+72,8,9,33,186,162,80,64,76,13,213,19,2,130,96,110,150,181,0,65,6,51,213,20,
+128,65,17,11,213,19,130,137,121,211,210,210,144,6,39,75,84,80,0,201,119,
+234,138,8,41,86,231,71,84,80,129,79,135,186,122,101,224,34,25,69,233,208,3,
+91,141,170,40,96,139,113,180,181,69,36,21,110,54,142,134,168,165,1,176,23,
+212,47,0,216,134,234,87,128,111,117,181,168,128,209,3,70,230,106,192,5,139,
+168,209,234,138,32,36,144,102,235,8,3,146,27,170,40,160,146,132,103,170,40,
+192,115,3,117,69,28,22,113,163,69,170,41,103,1,66,188,17,145,52,104,4,202,
+113,67,76,130,227,72,194,13,240,108,0,0,83,96,0,2,185,0,104,146,84,97,48,0,
+1,90,192,56,169,24,145,179,192,0,5,96,8,56,16,32,128,56,18,52,125,198,86,
+147,186,140,28,50,21,13,39,31,23,60,145,158,56,204,141,47,121,6,155,190,
+188,24,49,39,199,89,188,124,92,242,70,120,224,201,33,69,15,155,163,199,68,
+14,49,39,199,197,211,116,240,242,113,197,231,18,180,254,4,3,17,46,18,243,
+35,100,128,172,156,146,70,163,150,76,34,248,146,164,108,248,75,204,141,146,
+28,217,115,9,27,79,11,241,173,235,162,160,224,200,2,206,9,113,13,148,192,
+209,18,22,164,146,37,193,57,162,4,249,39,196,128,24,2,178,66,213,136,68,
+201,16,77,209,131,31,192,242,88,96,92,191,151,34,100,136,38,232,255,252,92,
+221,199,197,12,68,209,82,66,212,11,155,185,41,197,13,55,38,3,66,213,47,131,
+250,72,12,162,99,133,116,127,196,32,225,1,3,34,92,170,9,105,164,32,225,64,
+131,156,1,193,133,7,19,39,22,70,154,103,143,128,0,11,16,20,28,76,156,113,
+75,34,78,62,0,0,44,128,48,104,82,146,49,240,0,1,96,11,180,192,0,5,162,1,18,
+160,65,24,131,20,145,25,188,48,132,122,28,76,146,218,121,35,180,69,145,132,
+108,224,0,0,0,0,0,0,120,31,153,188,56,132,122,28,76,146,218,121,35,180,69,
+145,132,108,224,0,0,0,0,0,0,120,31,168,160,45,110,23,30,176,33,184,0,0,181,
+32,29,235,2,27,199,23,0,0,22,196,51,120,129,8,244,56,153,37,180,242,71,104,
+139,35,8,217,192,0,0,0,0,0,0,240,63,51,120,145,8,244,56,153,37,180,242,71,
+104,139,35,8,217,192,0,0,0,0,0,0,0,64,51,120,161,8,244,56,153,37,180,242,
+71,104,139,35,8,217,192,0,0,0,0,0,0,0,64,51,120,177,8,244,56,153,37,180,
+242,71,104,139,35,8,217,192,0,0,0,0,0,0,16,64,51,120,193,8,244,56,153,37,
+180,242,71,104,139,35,8,217,192,0,0,0,0,0,0,16,64,51,120,209,8,244,56,153,
+37,180,242,71,104,139,35,8,217,192,0,0,0,0,0,0,16,64,51,120,225,8,244,56,
+153,37,180,242,71,104,139,35,8,217,192,0,0,0,0,0,0,32,64,32,227,194,0,97,
+57,162,4,246,40,5,34,92,35,68,225,161,166,219,16,16,137,112,52,41,73,29,
+169,1,65,196,201,197,145,166,153,246,8,3,137,204,120,34,74,8,200,58,128,28,
+211,160,130,52,78,26,26,110,248,0,0,170,4,12,70,137,195,38,0,0,42,68,159,7,
+84,3,154,150,16,70,137,195,67,77,223,0,0,20,224,20,160,152,23,223,0,0,20,
+226,9,65,154,232,147,161,115,59,224,0,2,156,84,12,50,9,195,38,0,0,41,133,
+30,224,32,54,186,221,128,60,
};
#elif defined(DUK_USE_DOUBLE_BE)
-DUK_INTERNAL const duk_uint8_t duk_builtins_data[4116] = {
-144,148,105,224,32,68,52,228,62,12,104,200,165,132,52,167,194,138,105,243,
-124,57,28,211,57,18,64,52,238,126,44,138,111,171,241,164,19,87,129,30,33,
-167,16,145,159,8,211,136,9,225,42,5,240,145,139,163,163,8,211,136,10,228,
-64,211,19,132,140,93,29,56,70,156,64,119,34,66,146,36,104,137,194,70,46,
-142,172,35,78,32,47,146,195,102,11,240,145,139,163,175,8,211,136,9,228,240,
-242,112,145,139,163,179,8,211,136,8,237,34,130,118,49,116,118,225,26,48,0,
-1,82,29,201,158,46,183,39,135,147,132,140,93,16,132,76,66,33,8,66,16,132,
-33,8,66,26,179,233,97,167,60,150,34,33,154,112,0,1,75,247,35,79,95,237,198,
-174,200,47,31,23,95,17,13,51,19,35,93,68,216,209,128,0,10,208,174,79,15,32,
-248,8,196,24,8,107,192,0,5,106,118,27,94,0,0,43,83,227,94,0,0,43,84,46,215,
-128,0,10,213,28,198,188,0,0,86,169,100,53,224,0,2,181,79,85,175,0,0,21,170,
-154,45,120,0,0,173,85,217,107,192,0,5,106,182,243,86,193,106,52,127,130,
-249,50,94,124,35,68,225,146,49,13,31,186,23,201,146,243,224,200,39,12,145,
-136,67,134,19,49,1,255,224,0,0,0,0,0,3,51,1,255,192,0,0,0,0,0,3,47,18,1,
-172,19,120,71,10,25,196,136,113,162,156,136,199,42,57,204,144,115,132,240,
-149,2,248,72,197,209,58,2,185,16,52,196,225,35,23,68,233,14,228,72,82,68,
-141,17,56,72,197,209,58,130,249,44,54,96,191,9,24,186,39,88,79,39,135,147,
-132,140,93,19,176,35,180,138,9,216,197,209,59,82,79,35,40,242,65,248,58,42,
-96,121,14,232,94,62,46,190,15,42,31,145,33,86,65,76,242,214,143,73,48,242,
-243,79,49,56,243,115,207,57,64,243,180,79,61,72,243,244,207,65,80,244,53,
-79,69,88,244,98,30,8,200,156,67,102,120,241,79,4,100,78,21,110,4,207,32,47,
-147,37,231,194,52,78,25,34,122,81,124,153,47,62,12,130,112,201,19,211,139,
-121,34,87,69,128,104,137,239,83,18,238,108,165,2,162,92,104,56,220,233,1,8,
-151,10,134,162,100,206,16,18,50,9,195,39,105,20,101,136,18,25,4,225,147,
-180,138,5,215,49,238,105,27,60,185,1,36,104,156,50,118,145,70,96,129,34,52,
-78,25,59,72,160,93,115,30,230,145,179,204,144,12,73,8,15,38,104,128,138,52,
-146,16,30,77,1,0,2,11,132,193,198,36,248,248,186,110,158,30,78,56,188,194,
-70,183,170,136,48,98,79,142,179,120,248,185,228,140,241,193,146,66,138,31,
-55,71,138,128,153,137,62,58,205,227,226,231,146,51,199,26,6,18,92,146,64,
-96,74,72,51,120,43,192,97,68,128,153,56,72,7,12,133,67,73,199,197,207,36,
-103,142,35,2,3,33,80,210,113,241,115,201,25,160,146,225,160,9,34,1,124,178,
-1,139,18,19,36,229,146,8,190,36,169,27,62,18,243,35,100,135,54,92,162,2,17,
-46,72,128,89,7,200,32,33,18,225,98,236,145,188,130,64,196,75,132,188,200,
-217,32,43,39,28,128,69,19,18,228,144,42,98,79,142,179,120,248,185,228,140,
-241,201,97,129,114,229,201,37,2,68,184,200,1,147,93,159,153,213,34,235,250,
-96,48,157,32,24,94,160,1,199,4,184,235,55,143,139,158,72,207,28,226,3,81,
-46,62,46,155,167,135,147,142,47,60,129,71,197,207,36,103,142,34,92,35,104,
-194,68,1,89,58,36,8,109,109,12,133,67,73,195,18,115,36,118,182,185,168,8,
-109,109,12,133,67,73,201,18,115,36,118,182,185,168,130,27,91,75,115,149,71,
-240,196,156,201,29,173,174,129,2,27,91,75,115,149,71,242,68,156,201,29,173,
-174,129,34,12,16,28,128,62,191,42,3,71,146,68,4,16,22,188,161,240,16,40,
-104,242,103,196,16,93,158,125,96,110,115,235,64,131,16,16,58,37,192,70,32,
-194,144,114,25,67,95,40,6,18,8,32,48,156,209,2,108,124,96,224,144,6,247,62,
-16,0,143,164,143,12,248,15,18,84,145,145,34,128,11,35,160,179,140,0,44,150,
-129,18,58,0,146,116,103,32,128,105,61,104,17,36,175,1,232,217,29,5,156,179,
-224,58,26,50,95,142,43,159,64,181,130,83,226,26,50,95,142,43,159,192,7,255,
-248,41,42,72,226,1,160,18,78,97,32,26,64,114,186,60,32,4,120,6,148,13,128,
-124,3,76,12,84,46,100,140,3,78,13,18,14,130,36,67,232,23,18,14,130,39,34,
-131,30,113,15,224,3,255,253,6,48,40,194,197,204,224,142,8,240,78,25,60,231,
-192,210,197,204,224,156,50,113,238,67,103,232,62,28,138,156,104,82,170,107,
-255,32,48,191,144,1,132,112,71,128,159,168,128,161,28,17,224,156,50,112,19,
-245,144,22,39,12,156,123,144,217,240,19,245,146,3,9,205,16,39,236,62,3,161,
-163,37,248,226,251,141,1,107,4,167,196,52,100,191,28,95,113,164,13,91,132,
-5,147,130,115,30,8,147,222,64,43,1,49,31,224,64,60,72,245,128,68,249,32,13,
-34,2,34,63,204,128,89,45,2,39,209,0,89,61,104,159,213,0,153,80,50,156,80,
-211,126,16,11,155,184,183,88,145,224,129,34,122,64,17,155,184,183,8,11,39,
-22,235,18,60,16,36,79,72,1,115,119,40,247,146,60,16,36,79,72,32,140,221,
-197,184,64,89,57,71,188,145,224,129,34,122,65,1,39,20,51,244,0,52,72,242,2,
-127,18,2,165,48,70,114,229,145,51,253,141,1,4,104,229,203,34,103,251,26,64,
-132,52,75,160,201,47,105,160,26,84,12,167,31,186,8,50,0,114,58,113,163,46,
-190,120,35,11,60,4,25,68,81,61,96,47,181,80,46,132,128,255,223,255,255,255,
-255,255,254,39,172,67,118,170,5,208,144,0,0,0,0,0,0,0,0,115,16,31,254,0,0,
-0,0,0,0,8,245,238,146,38,138,147,105,13,42,26,137,226,3,255,128,0,0,0,0,0,
-1,30,180,134,4,209,82,109,33,165,67,81,60,64,255,240,0,0,0,0,0,0,15,210,62,
-72,91,155,0,242,192,0,0,0,0,0,0,135,88,11,237,72,5,38,210,27,50,24,145,128,
-134,127,255,255,255,255,255,254,67,172,67,118,164,2,147,105,13,153,12,72,
-192,195,63,255,255,255,255,255,255,16,240,70,68,226,27,51,199,138,120,35,
-34,112,171,112,38,121,7,16,137,112,168,106,38,77,193,1,40,151,16,217,144,
-196,142,224,144,21,18,227,65,198,238,9,67,81,46,72,5,39,16,217,144,196,142,
-224,152,228,148,227,64,0,0,0,0,0,0,0,0,131,175,223,16,194,111,8,97,119,224,
-3,205,220,42,46,65,238,200,13,155,184,75,189,205,35,102,128,47,116,64,92,
-221,199,196,130,68,144,230,239,72,65,152,12,21,224,140,137,92,128,62,210,
-98,177,252,3,107,173,88,3,146,211,141,33,255,224,0,0,0,0,0,3,19,175,188,0,
-100,221,193,130,100,228,167,20,52,215,129,3,38,238,77,12,39,37,56,161,166,
-188,10,194,94,6,18,155,184,183,8,11,39,6,9,147,146,156,80,211,94,7,18,155,
-184,183,8,11,39,38,134,19,146,156,80,211,94,8,12,53,224,130,195,222,8,77,
-133,210,24,91,224,3,152,147,228,208,194,95,0,44,196,159,11,69,175,152,32,
+DUK_INTERNAL const duk_uint8_t duk_builtins_data[4251] = {
+144,148,105,225,32,68,52,228,126,12,104,201,37,132,52,167,194,138,105,244,
+124,57,28,211,57,18,64,52,238,254,44,138,111,171,241,164,19,87,137,30,33,
+167,18,145,159,8,211,137,9,225,42,5,240,145,139,163,163,8,211,137,10,228,
+64,211,19,132,140,93,29,56,70,156,72,119,34,66,146,36,104,137,194,70,46,
+142,172,35,78,36,47,146,195,102,11,240,145,139,163,175,8,211,137,9,228,240,
+242,112,145,139,163,179,8,211,137,8,237,34,130,118,49,116,118,225,26,48,0,
+1,94,29,201,158,46,183,39,135,147,132,140,93,16,132,76,66,33,8,66,16,132,
+33,8,66,26,180,41,97,167,64,150,34,33,154,112,0,1,87,247,35,79,103,237,198,
+174,216,47,31,23,95,17,13,31,217,96,211,49,50,53,212,77,141,24,0,0,179,10,
+228,240,242,15,128,140,65,128,134,188,0,0,89,167,97,181,224,0,2,205,62,53,
+224,0,2,205,66,237,120,0,0,179,81,204,107,192,0,5,154,150,67,94,0,0,44,212,
+245,90,240,0,1,102,169,162,215,128,0,11,53,93,150,188,0,0,89,171,111,53,
+108,150,163,70,0,0,42,2,249,50,94,124,35,68,225,146,49,13,24,0,0,165,161,
+124,153,47,62,12,130,112,201,24,132,56,97,115,16,31,254,0,0,0,0,0,0,51,48,
+31,252,0,0,0,0,0,0,50,241,32,26,193,55,132,112,161,156,72,135,26,41,200,
+140,114,163,156,201,7,56,79,9,80,47,132,140,93,19,160,43,145,3,76,78,18,49,
+116,78,144,238,68,133,36,72,209,19,132,140,93,19,168,47,146,195,102,11,240,
+145,139,162,117,132,242,120,121,56,72,197,209,59,2,59,72,160,157,140,93,19,
+181,36,242,50,143,36,31,131,162,166,7,144,238,133,227,226,235,224,242,161,
+249,18,21,100,20,207,44,199,151,180,122,89,135,152,154,121,153,199,156,158,
+121,218,7,158,162,121,250,71,160,166,122,26,135,162,170,122,58,199,164,16,
+240,70,68,226,27,51,199,138,120,35,34,112,171,112,38,121,1,124,153,47,62,
+17,162,112,201,19,211,11,228,201,121,240,100,19,134,72,158,160,91,201,18,
+186,44,3,68,79,122,168,151,115,165,40,21,18,227,65,198,231,200,8,68,184,84,
+53,19,38,120,128,145,144,78,25,59,72,163,48,64,144,200,39,12,157,164,80,46,
+185,143,115,72,217,230,72,9,35,68,225,147,180,138,51,68,9,17,162,112,201,
+218,69,2,235,152,247,52,141,158,108,128,98,72,64,121,51,132,4,81,164,144,
+128,242,104,136,0,16,92,38,14,49,39,199,197,211,116,240,242,113,197,231,18,
+53,189,116,65,131,18,124,117,155,199,197,207,36,103,142,12,146,20,80,249,
+186,60,116,4,204,73,241,214,111,31,23,60,145,158,56,208,48,146,229,146,3,2,
+82,65,155,195,94,3,10,36,4,201,196,64,56,100,42,26,78,62,46,121,35,60,113,
+152,16,25,10,134,147,143,139,158,72,205,4,151,21,0,73,16,11,230,144,12,88,
+144,153,39,52,144,69,241,37,72,217,240,151,153,27,36,57,178,230,16,16,137,
+114,68,2,200,62,81,1,8,151,11,23,100,141,229,18,6,34,92,37,230,70,201,1,89,
+57,36,2,40,152,151,44,129,83,18,124,117,155,199,197,207,36,103,142,75,12,
+11,151,46,89,40,18,37,200,64,12,154,236,252,238,185,23,95,213,1,132,234,0,
+194,245,128,14,56,37,199,89,188,124,92,242,70,120,232,16,26,137,113,241,
+116,221,60,60,156,113,122,36,10,62,46,121,35,60,113,18,225,27,70,18,32,10,
+201,211,32,67,107,104,100,42,26,78,24,147,153,35,181,181,207,64,67,107,104,
+100,42,26,78,72,147,153,35,181,181,207,68,16,218,218,91,156,170,63,134,36,
+230,72,237,109,116,136,16,218,218,91,156,170,63,146,36,230,72,237,109,116,
+137,16,96,128,228,2,6,191,46,3,71,147,68,4,16,22,188,169,240,16,40,104,242,
+135,198,171,44,68,65,5,217,231,215,6,231,62,188,8,49,1,3,162,92,4,98,12,41,
+7,33,148,53,242,128,97,32,130,3,9,205,16,38,199,198,14,9,0,111,115,225,0,8,
+250,72,240,207,128,241,37,73,25,18,40,0,178,58,11,56,192,2,201,104,17,35,
+160,9,39,70,114,8,6,147,214,129,18,74,240,30,141,145,208,89,203,62,3,161,
+163,37,248,226,185,244,11,88,37,62,33,163,37,248,226,185,252,0,127,255,130,
+146,164,142,32,26,1,36,230,18,1,164,7,43,163,194,0,71,128,105,64,216,7,192,
+52,192,197,66,230,72,192,52,224,209,32,232,34,68,62,129,113,32,232,34,114,
+40,49,231,16,254,0,63,255,208,99,2,140,44,92,206,8,224,143,4,225,147,210,
+124,13,44,92,206,9,195,39,30,228,54,126,163,225,200,169,198,133,42,166,191,
+246,3,11,251,0,24,71,4,120,9,251,8,10,17,193,30,9,195,39,1,63,105,1,98,112,
+201,199,185,13,159,1,63,105,32,48,156,209,2,126,227,224,58,26,50,95,142,47,
+192,208,22,176,74,124,67,70,75,241,197,248,26,64,213,184,64,89,56,39,49,
+224,137,62,36,2,176,19,17,254,68,3,196,143,88,4,79,162,0,210,32,34,35,253,
+72,5,146,208,34,125,144,5,147,214,137,253,208,9,149,3,41,197,13,55,233,0,
+185,187,139,117,137,30,8,18,39,172,1,25,187,139,112,128,178,113,110,177,35,
+193,2,68,245,128,23,55,114,143,121,35,193,2,68,245,130,8,205,220,91,132,5,
+147,148,123,201,30,8,18,39,172,16,18,113,67,63,128,3,68,143,32,39,243,32,
+42,83,4,103,46,89,19,63,224,208,16,70,142,92,178,38,127,193,164,8,67,68,
+186,12,146,247,154,1,165,64,202,113,252,160,131,32,7,35,167,26,50,235,231,
+130,48,179,192,65,148,69,19,214,2,251,85,2,232,72,15,253,255,255,255,255,
+255,255,226,122,196,55,106,160,93,9,0,0,0,0,0,0,0,0,7,49,1,255,224,0,0,0,0,
+0,0,143,94,233,34,104,169,54,144,210,161,168,158,32,63,248,0,0,0,0,0,0,17,
+235,72,96,77,21,38,210,26,84,53,19,196,15,255,0,0,0,0,0,0,0,253,35,228,133,
+185,176,15,44,0,0,0,0,0,0,8,117,128,190,212,128,82,109,33,179,33,137,24,8,
+103,255,255,255,255,255,255,228,58,196,55,106,64,41,54,144,217,144,196,140,
+12,51,255,255,255,255,255,255,241,15,4,100,78,33,179,60,120,167,130,50,39,
+10,183,2,103,144,113,8,151,10,134,162,100,221,16,18,137,113,13,153,12,72,
+238,137,1,81,46,52,28,110,232,148,53,18,228,128,82,113,13,153,12,72,238,
+137,142,73,78,52,0,0,0,0,0,0,0,0,8,58,254,1,12,38,248,134,23,130,0,60,221,
+194,162,228,30,244,128,217,187,132,187,220,210,54,104,2,247,132,5,205,220,
+124,72,36,73,14,110,252,132,25,128,193,94,8,200,149,200,3,237,38,43,31,192,
+54,186,213,128,57,45,56,210,31,254,0,0,0,0,0,0,49,90,251,224,6,77,220,24,
+38,78,74,113,67,77,124,16,50,110,228,208,194,114,83,138,26,107,224,172,37,
+240,97,41,187,139,112,128,178,112,96,153,57,41,197,13,53,240,113,41,187,
+139,112,128,178,114,104,97,57,41,197,13,53,240,128,195,95,8,44,61,240,132,
+216,93,33,133,192,128,14,98,79,147,67,9,129,0,44,196,159,11,69,175,152,32,
35,100,33,135,24,147,237,38,34,246,139,95,48,64,70,200,68,8,49,39,198,57,
179,61,144,138,22,98,79,180,152,153,215,54,103,178,17,129,204,73,240,96,
153,44,132,112,163,18,125,164,196,62,130,100,178,18,1,140,73,240,96,197,
@@ -11309,291 +11335,304 @@ DUK_INTERNAL const duk_uint8_t duk_builtins_data[4116] = {
201,108,173,133,72,147,237,38,33,244,19,37,178,184,17,34,79,140,115,102,
123,107,238,133,200,147,237,38,38,117,205,153,237,175,188,23,34,79,133,162,
215,204,16,17,182,254,248,116,137,62,210,98,47,104,181,243,4,4,109,191,192,
-131,152,147,230,8,8,217,12,16,60,137,62,96,128,141,178,193,160,206,1,201,
-176,113,146,0,0,0,0,0,0,0,0,49,185,252,65,137,207,227,37,215,207,227,12,86,
-127,24,152,188,254,49,88,33,46,65,120,72,4,153,37,63,33,13,127,148,4,26,0,
-57,62,6,228,163,228,74,86,215,62,55,28,110,179,226,113,70,223,62,47,24,38,
-191,30,2,125,32,40,20,87,114,41,225,42,5,240,145,139,163,145,41,68,250,128,
-80,41,174,228,85,200,129,166,39,9,24,186,57,18,148,79,172,5,2,170,238,69,
-220,137,10,72,145,162,39,9,24,186,57,18,148,79,176,5,2,186,238,69,124,150,
-27,48,95,132,140,93,28,137,74,39,218,2,129,101,119,34,158,79,15,39,9,24,
-186,57,18,148,79,184,5,2,218,238,69,29,164,80,78,198,46,142,68,165,16,64,
-28,24,61,73,25,33,205,128,129,167,166,0,0,0,0,1,108,242,151,15,39,8,34,26,
-87,97,200,3,0,167,129,32,8,194,195,16,6,84,55,10,60,3,35,69,132,30,1,140,
-130,193,143,1,196,230,60,2,158,8,131,153,64,115,42,46,191,176,8,194,246,0,
-80,5,220,193,95,6,234,5,100,225,35,23,71,35,6,228,140,93,29,180,55,108,145,
-139,163,182,112,52,107,67,76,56,3,153,132,20,28,76,156,89,26,105,158,62,0,
-0,42,193,2,201,104,17,41,34,156,204,176,160,226,100,226,200,211,76,241,240,
-0,1,86,2,131,137,147,142,41,100,73,199,192,0,5,96,6,13,10,82,70,62,0,0,42,
-130,88,115,18,124,67,103,177,69,49,129,6,36,249,68,54,123,20,82,216,65,137,
-62,33,179,209,214,162,152,208,147,18,124,162,27,61,29,106,41,112,32,196,
-159,16,217,233,233,81,76,112,73,137,62,81,13,158,158,149,20,186,20,98,79,
-133,91,129,61,61,42,41,120,40,196,159,10,183,2,122,218,148,82,248,60,137,
-62,33,179,216,166,216,192,137,18,124,162,27,61,138,109,108,34,68,159,16,
-217,232,235,83,108,104,76,137,62,81,13,158,142,181,54,184,17,34,79,136,108,
-244,244,169,182,56,38,68,159,40,134,207,79,74,155,93,10,145,39,194,173,192,
-158,158,149,54,188,21,34,79,133,91,129,61,109,74,109,125,155,51,136,71,161,
-196,201,45,167,146,59,68,89,24,70,206,1,255,128,0,0,0,0,0,1,155,51,168,71,
-161,196,201,45,167,146,59,68,89,24,70,206,1,255,128,0,0,0,0,0,1,155,51,200,
-71,161,196,201,45,167,146,59,68,89,24,70,206,1,255,128,0,0,0,0,0,1,155,51,
-232,71,161,196,201,45,167,146,59,68,89,24,70,206,2,0,0,0,0,0,0,0,1,155,52,
-8,71,161,196,201,45,167,146,59,68,89,24,70,206,2,0,0,0,0,0,0,0,1,155,52,40,
-71,161,196,201,45,167,146,59,68,89,24,70,206,2,0,128,0,0,0,0,0,1,155,52,72,
-71,161,196,201,45,167,146,59,68,89,24,70,206,2,0,128,0,0,0,0,0,1,155,52,
-104,71,161,196,201,45,167,146,59,68,89,24,70,206,2,0,128,0,0,0,0,0,1,155,
-52,136,71,161,196,201,45,167,146,59,68,89,24,70,206,2,1,0,0,0,0,0,0,1,135,
-52,166,32,76,72,1,246,136,235,103,177,69,0,136,144,3,226,27,61,138,41,44,
-50,36,0,251,68,117,179,209,214,234,201,69,16,50,36,0,251,68,117,179,209,
-214,232,73,69,34,5,196,128,31,16,217,232,235,117,100,162,147,2,226,64,15,
-136,108,244,117,186,18,81,74,129,145,32,7,218,35,173,158,158,151,86,74,40,
-161,145,32,7,218,35,173,158,158,151,66,74,41,20,46,36,0,248,134,207,79,75,
-171,37,20,154,23,18,0,124,67,103,167,165,208,146,138,85,11,137,0,62,21,110,
-4,250,178,81,70,11,137,0,62,21,110,4,250,18,81,72,193,145,32,7,193,186,129,
-89,58,178,81,71,12,137,0,62,13,212,10,201,208,146,138,71,10,137,0,62,209,
-29,108,250,178,81,104,1,81,32,7,218,35,173,159,66,74,45,32,38,36,0,248,134,
-207,171,37,22,160,19,18,0,124,67,103,208,146,139,88,10,180,81,50,118,136,
-235,103,177,77,128,155,69,19,39,16,217,236,83,105,97,182,138,38,78,209,29,
-108,244,117,186,178,83,100,13,180,81,50,118,136,235,103,163,173,208,146,
-155,68,12,180,81,50,113,13,158,142,183,86,74,109,48,50,209,68,201,196,54,
-122,58,221,9,41,181,64,219,69,19,39,104,142,182,122,122,93,89,41,178,134,
-218,40,153,59,68,117,179,211,210,232,73,77,162,134,90,40,153,56,134,207,79,
-75,171,37,54,154,25,104,162,100,226,27,61,61,46,132,148,218,168,101,162,
-137,147,133,91,129,62,172,148,217,131,45,20,76,156,42,220,9,244,36,166,209,
-131,109,20,76,156,27,168,21,147,171,37,54,112,219,69,19,39,6,234,5,100,232,
-73,77,163,133,218,40,153,59,68,117,179,234,201,78,32,5,218,40,153,59,68,
-117,179,232,73,78,36,5,90,40,153,56,134,207,171,37,56,160,21,104,162,100,
-226,27,62,132,148,226,195,95,182,97,176,218,128,8,84,45,123,38,1,137,10,1,
-114,160,64,56,156,199,130,36,160,72,8,39,63,27,24,1,100,180,8,148,146,0,45,
-162,137,147,111,2,8,4,16,7,8,96,120,72,8,0,183,225,81,98,138,237,33,58,182,
-232,232,64,64,2,107,177,187,181,85,22,7,213,183,74,1,255,49,114,23,247,209,
-207,120,94,173,198,210,36,3,255,113,84,118,82,184,47,224,221,91,141,163,
-160,72,7,251,121,111,98,164,220,161,192,186,244,64,64,9,33,251,84,68,45,24,
-15,217,66,51,209,218,210,128,127,205,65,60,204,254,119,154,23,178,132,103,
-165,0,255,218,130,121,153,252,239,54,168,48,6,90,130,1,0,39,75,80,72,8,9,
-33,186,130,80,64,76,13,212,19,2,130,96,110,150,173,0,65,6,51,212,20,128,65,
-17,11,212,19,130,137,121,211,210,209,144,6,39,75,80,80,0,201,119,234,10,8,
-41,86,231,71,80,80,129,79,135,186,122,69,224,34,25,69,233,80,3,91,141,168,
-40,96,139,113,180,181,5,36,21,110,54,142,134,160,165,1,176,23,211,47,0,216,
-134,233,215,128,111,117,181,104,128,209,3,70,230,106,64,5,139,168,209,234,
-10,32,36,144,102,234,136,3,146,27,168,40,160,146,132,103,168,40,192,115,3,
-117,5,28,22,113,163,69,168,41,103,1,66,188,17,145,52,40,4,202,113,67,76,
-130,227,68,194,13,240,108,0,0,83,96,0,2,161,0,104,146,84,97,48,0,1,78,192,
-56,169,24,145,179,192,0,5,48,8,56,16,32,128,56,18,52,125,166,86,147,182,
-140,28,50,21,13,39,31,23,60,145,158,56,140,141,47,113,6,155,186,188,24,49,
-39,199,89,188,124,92,242,70,120,224,201,33,69,15,155,163,197,68,14,49,39,
-199,197,211,116,240,242,113,197,230,18,180,253,228,3,17,46,18,243,35,100,
-128,172,156,114,70,163,146,76,34,248,146,164,108,248,75,204,141,146,28,217,
-114,137,27,78,251,241,173,234,162,160,225,1,3,34,92,170,9,105,164,32,225,
-64,131,155,1,193,133,7,19,39,22,70,154,103,143,128,0,10,176,20,28,76,156,
-113,75,34,78,62,0,0,43,0,48,104,82,146,49,240,0,1,84,11,180,192,0,5,114,1,
-18,160,65,24,131,20,145,25,172,48,132,122,28,76,146,218,121,35,180,69,145,
-132,108,224,31,248,0,0,0,0,0,0,25,172,56,132,122,28,76,146,218,121,35,180,
-69,145,132,108,224,31,248,0,0,0,0,0,0,40,160,45,110,23,30,176,33,184,0,0,
-175,32,29,235,2,27,199,23,0,0,22,4,51,88,129,8,244,56,153,37,180,242,71,
-104,139,35,8,217,192,63,240,0,0,0,0,0,0,51,88,145,8,244,56,153,37,180,242,
-71,104,139,35,8,217,192,64,0,0,0,0,0,0,0,51,88,161,8,244,56,153,37,180,242,
-71,104,139,35,8,217,192,64,0,0,0,0,0,0,0,51,88,177,8,244,56,153,37,180,242,
-71,104,139,35,8,217,192,64,16,0,0,0,0,0,0,51,88,193,8,244,56,153,37,180,
-242,71,104,139,35,8,217,192,64,16,0,0,0,0,0,0,51,88,209,8,244,56,153,37,
-180,242,71,104,139,35,8,217,192,64,16,0,0,0,0,0,0,51,88,225,8,244,56,153,
-37,180,242,71,104,139,35,8,217,192,64,32,0,0,0,0,0,0,32,227,194,0,97,57,
-162,4,245,232,5,34,92,35,68,225,161,166,218,16,16,137,112,52,41,73,29,153,
-1,65,196,201,197,145,166,153,245,200,3,137,204,120,34,74,8,200,58,112,28,
-211,32,130,52,78,26,26,110,248,0,0,164,4,12,70,137,195,39,252,73,240,117,
-32,57,168,97,4,104,156,52,52,221,255,160,20,160,152,23,223,250,32,148,25,
-174,137,58,23,51,191,244,84,12,50,9,195,39,240,81,238,2,3,107,173,214,3,
-192,
+131,152,147,230,8,8,217,12,16,60,137,62,96,128,141,178,193,181,55,136,200,
+51,128,114,108,28,100,128,0,0,0,0,0,0,0,12,110,127,32,98,115,249,73,117,
+243,249,67,21,159,202,38,47,63,148,86,8,75,144,94,50,1,38,73,79,204,67,95,
+231,1,6,128,14,79,129,185,40,249,18,149,181,207,142,199,155,172,248,172,89,
+183,207,140,198,137,175,200,0,159,72,10,5,21,220,138,120,74,129,124,36,98,
+232,228,74,81,62,160,20,10,107,185,21,114,32,105,137,194,70,46,142,68,165,
+19,235,1,64,170,187,145,119,34,66,146,36,104,137,194,70,46,142,68,165,19,
+236,1,64,174,187,145,95,37,134,204,23,225,35,23,71,34,82,137,246,128,160,
+89,93,200,167,147,195,201,194,70,46,142,68,165,19,238,1,64,182,187,145,71,
+105,20,19,177,139,163,145,41,68,16,7,6,15,82,70,72,115,96,32,105,246,0,0,0,
+0,0,91,60,165,195,201,194,8,134,149,216,130,0,192,41,224,136,2,48,176,228,
+1,149,13,195,15,0,200,209,97,71,128,99,32,176,131,192,113,57,143,0,167,131,
+32,230,80,28,202,139,175,237,2,48,189,160,20,1,119,48,87,193,186,129,89,56,
+72,197,209,200,193,185,35,23,71,109,13,219,36,98,232,237,156,13,26,208,211,
+14,102,19,87,137,91,95,128,0,10,64,24,92,0,0,82,2,53,63,240,49,204,202,10,
+14,38,78,44,141,52,207,31,0,0,22,32,129,100,180,8,148,145,78,102,152,80,
+113,50,113,100,105,166,120,248,0,0,177,1,65,196,201,199,20,178,36,227,224,
+0,2,200,3,6,133,41,35,31,0,0,22,1,44,57,137,62,33,179,216,162,152,192,131,
+18,124,162,27,61,138,41,108,32,196,159,16,217,232,235,81,76,104,73,137,62,
+81,13,158,142,181,20,184,16,98,79,136,108,244,244,168,166,56,36,196,159,40,
+134,207,79,74,138,93,10,49,39,194,173,192,158,158,149,20,188,20,98,79,133,
+91,129,61,109,74,41,124,30,68,159,16,217,236,83,108,96,68,137,62,81,13,158,
+197,54,182,17,34,79,136,108,244,117,169,182,52,38,68,159,40,134,207,71,90,
+155,92,8,145,39,196,54,122,122,84,219,28,19,34,79,148,67,103,167,165,77,
+174,133,72,147,225,86,224,79,79,74,155,94,10,145,39,194,173,192,158,182,
+165,54,190,206,25,212,35,208,226,100,150,211,201,29,162,44,140,35,103,0,
+255,192,0,0,0,0,0,0,206,25,228,35,208,226,100,150,211,201,29,162,44,140,35,
+103,0,255,192,0,0,0,0,0,0,206,25,244,35,208,226,100,150,211,201,29,162,44,
+140,35,103,0,255,192,0,0,0,0,0,0,206,26,4,35,208,226,100,150,211,201,29,
+162,44,140,35,103,1,0,0,0,0,0,0,0,0,206,26,20,35,208,226,100,150,211,201,
+29,162,44,140,35,103,1,0,0,0,0,0,0,0,0,206,26,36,35,208,226,100,150,211,
+201,29,162,44,140,35,103,1,0,64,0,0,0,0,0,0,206,26,52,35,208,226,100,150,
+211,201,29,162,44,140,35,103,1,0,64,0,0,0,0,0,0,206,26,68,35,208,226,100,
+150,211,201,29,162,44,140,35,103,1,0,64,0,0,0,0,0,0,206,26,84,35,208,226,
+100,150,211,201,29,162,44,140,35,103,1,0,128,0,0,0,0,0,0,195,154,99,16,38,
+36,0,251,68,117,179,216,162,128,68,72,1,241,13,158,197,20,150,25,18,0,125,
+162,58,217,232,235,117,100,162,136,25,18,0,125,162,58,217,232,235,116,36,
+162,145,2,226,64,15,136,108,244,117,186,178,81,73,129,113,32,7,196,54,122,
+58,221,9,40,165,64,200,144,3,237,17,214,207,79,75,171,37,20,80,200,144,3,
+237,17,214,207,79,75,161,37,20,138,23,18,0,124,67,103,167,165,213,146,138,
+77,11,137,0,62,33,179,211,210,232,73,69,42,133,196,128,31,10,183,2,125,89,
+40,163,5,196,128,31,10,183,2,125,9,40,164,96,200,144,3,224,221,64,172,157,
+89,40,163,134,68,128,31,6,234,5,100,232,73,69,35,133,68,128,31,104,142,182,
+125,89,40,180,0,168,144,3,237,17,214,207,161,37,22,144,19,18,0,124,67,103,
+213,146,139,80,9,137,0,62,33,179,232,73,69,172,5,90,40,153,59,68,117,179,
+216,166,192,77,162,137,147,136,108,246,41,180,176,219,69,19,39,104,142,182,
+122,58,221,89,41,178,6,218,40,153,59,68,117,179,209,214,232,73,77,162,6,90,
+40,153,56,134,207,71,91,171,37,54,152,25,104,162,100,226,27,61,29,110,132,
+148,218,160,109,162,137,147,180,71,91,61,61,46,172,148,217,67,109,20,76,
+157,162,58,217,233,233,116,36,166,209,67,45,20,76,156,67,103,167,165,213,
+146,155,77,12,180,81,50,113,13,158,158,151,66,74,109,84,50,209,68,201,194,
+173,192,159,86,74,108,193,150,138,38,78,21,110,4,250,18,83,104,193,182,138,
+38,78,13,212,10,201,213,146,155,56,109,162,137,147,131,117,2,178,116,36,
+166,209,194,237,20,76,157,162,58,217,245,100,167,16,2,237,20,76,157,162,58,
+217,244,36,167,18,2,173,20,76,156,67,103,213,146,156,80,10,180,81,50,113,
+13,159,66,74,113,97,175,220,48,216,109,192,4,42,22,189,163,0,196,133,0,185,
+80,32,28,78,99,193,18,80,36,4,19,159,141,156,0,178,90,4,74,73,0,22,209,68,
+201,185,129,4,2,8,3,132,64,60,36,4,0,91,240,168,177,69,118,144,157,91,116,
+116,32,32,1,53,216,221,218,170,139,3,234,219,165,0,255,152,185,11,251,232,
+231,188,47,86,227,105,18,1,255,184,170,59,41,92,23,240,110,173,198,209,208,
+36,3,253,188,183,177,82,110,80,224,93,122,32,32,4,144,253,170,34,22,140,7,
+236,161,25,232,237,105,64,63,230,160,158,102,127,59,205,11,217,66,51,210,
+128,127,237,65,60,204,254,119,155,171,197,34,168,48,6,90,162,1,0,39,75,84,
+72,8,9,33,186,162,80,64,76,13,213,19,2,130,96,110,150,181,0,65,6,51,213,20,
+128,65,17,11,213,19,130,137,121,211,210,210,144,6,39,75,84,80,0,201,119,
+234,138,8,41,86,231,71,84,80,129,79,135,186,122,101,224,34,25,69,233,208,3,
+91,141,170,40,96,139,113,180,181,69,36,21,110,54,142,134,168,165,1,176,23,
+212,47,0,216,134,234,87,128,111,117,181,168,128,209,3,70,230,106,192,5,139,
+168,209,234,138,32,36,144,102,235,8,3,146,27,170,40,160,146,132,103,170,40,
+192,115,3,117,69,28,22,113,163,69,170,41,103,1,66,188,17,145,52,104,4,202,
+113,67,76,130,227,72,194,13,240,108,0,0,83,96,0,2,185,0,104,146,84,97,48,0,
+1,90,192,56,169,24,145,179,192,0,5,96,8,56,16,32,128,56,18,52,125,198,86,
+147,186,140,28,50,21,13,39,31,23,60,145,158,56,204,141,47,121,6,155,190,
+188,24,49,39,199,89,188,124,92,242,70,120,224,201,33,69,15,155,163,199,68,
+14,49,39,199,197,211,116,240,242,113,197,231,18,180,254,4,3,17,46,18,243,
+35,100,128,172,156,146,70,163,150,76,34,248,146,164,108,248,75,204,141,146,
+28,217,115,9,27,79,11,241,173,235,162,160,224,200,2,206,9,113,13,148,192,
+209,18,22,164,146,37,193,57,162,4,249,39,196,128,24,2,178,66,213,136,68,
+201,16,77,209,131,31,192,242,88,96,92,191,151,34,100,136,38,232,255,252,92,
+221,199,197,12,68,209,82,66,212,11,155,185,41,197,13,55,38,3,66,213,47,131,
+250,72,12,162,99,133,116,127,196,32,225,1,3,34,92,170,9,105,164,32,225,64,
+131,156,1,193,133,7,19,39,22,70,154,103,143,128,0,11,16,20,28,76,156,113,
+75,34,78,62,0,0,44,128,48,104,82,146,49,240,0,1,96,11,180,192,0,5,162,1,18,
+160,65,24,131,20,145,25,188,48,132,122,28,76,146,218,121,35,180,69,145,132,
+108,224,31,248,0,0,0,0,0,0,25,188,56,132,122,28,76,146,218,121,35,180,69,
+145,132,108,224,31,248,0,0,0,0,0,0,40,160,45,110,23,30,176,33,184,0,0,181,
+32,29,235,2,27,199,23,0,0,22,196,51,120,129,8,244,56,153,37,180,242,71,104,
+139,35,8,217,192,63,240,0,0,0,0,0,0,51,120,145,8,244,56,153,37,180,242,71,
+104,139,35,8,217,192,64,0,0,0,0,0,0,0,51,120,161,8,244,56,153,37,180,242,
+71,104,139,35,8,217,192,64,0,0,0,0,0,0,0,51,120,177,8,244,56,153,37,180,
+242,71,104,139,35,8,217,192,64,16,0,0,0,0,0,0,51,120,193,8,244,56,153,37,
+180,242,71,104,139,35,8,217,192,64,16,0,0,0,0,0,0,51,120,209,8,244,56,153,
+37,180,242,71,104,139,35,8,217,192,64,16,0,0,0,0,0,0,51,120,225,8,244,56,
+153,37,180,242,71,104,139,35,8,217,192,64,32,0,0,0,0,0,0,32,227,194,0,97,
+57,162,4,246,40,5,34,92,35,68,225,161,166,219,16,16,137,112,52,41,73,29,
+169,1,65,196,201,197,145,166,153,246,8,3,137,204,120,34,74,8,200,58,128,28,
+211,160,130,52,78,26,26,110,248,0,0,170,4,12,70,137,195,38,0,0,42,68,159,7,
+84,3,154,150,16,70,137,195,67,77,223,0,0,20,224,20,160,152,23,223,0,0,20,
+226,9,65,154,232,147,161,115,59,224,0,2,156,84,12,50,9,195,38,0,0,41,133,
+30,224,32,54,186,221,128,60,
};
#elif defined(DUK_USE_DOUBLE_ME)
-DUK_INTERNAL const duk_uint8_t duk_builtins_data[4116] = {
-144,148,105,224,32,68,52,228,62,12,104,200,165,132,52,167,194,138,105,243,
-124,57,28,211,57,18,64,52,238,126,44,138,111,171,241,164,19,87,129,30,33,
-167,16,145,159,8,211,136,9,225,42,5,240,145,139,163,163,8,211,136,10,228,
-64,211,19,132,140,93,29,56,70,156,64,119,34,66,146,36,104,137,194,70,46,
-142,172,35,78,32,47,146,195,102,11,240,145,139,163,175,8,211,136,9,228,240,
-242,112,145,139,163,179,8,211,136,8,237,34,130,118,49,116,118,225,26,48,0,
-1,82,29,201,158,46,183,39,135,147,132,140,93,16,132,76,66,33,8,66,16,132,
-33,8,66,26,179,233,97,167,60,150,34,33,154,112,0,1,75,247,35,79,95,237,198,
-174,200,47,31,23,95,17,13,51,19,35,93,68,216,209,128,0,10,208,174,79,15,32,
-248,8,196,24,8,107,192,0,5,106,118,27,94,0,0,43,83,227,94,0,0,43,84,46,215,
-128,0,10,213,28,198,188,0,0,86,169,100,53,224,0,2,181,79,85,175,0,0,21,170,
-154,45,120,0,0,173,85,217,107,192,0,5,106,182,243,86,193,106,52,127,130,
-249,50,94,124,35,68,225,146,49,13,31,186,23,201,146,243,224,200,39,12,145,
-136,67,134,19,49,0,0,3,225,252,0,0,0,3,51,0,0,3,193,252,0,0,0,3,47,18,1,
-172,19,120,71,10,25,196,136,113,162,156,136,199,42,57,204,144,115,132,240,
-149,2,248,72,197,209,58,2,185,16,52,196,225,35,23,68,233,14,228,72,82,68,
-141,17,56,72,197,209,58,130,249,44,54,96,191,9,24,186,39,88,79,39,135,147,
-132,140,93,19,176,35,180,138,9,216,197,209,59,82,79,35,40,242,65,248,58,42,
-96,121,14,232,94,62,46,190,15,42,31,145,33,86,65,76,242,214,143,73,48,242,
-243,79,49,56,243,115,207,57,64,243,180,79,61,72,243,244,207,65,80,244,53,
-79,69,88,244,98,30,8,200,156,67,102,120,241,79,4,100,78,21,110,4,207,32,47,
-147,37,231,194,52,78,25,34,122,81,124,153,47,62,12,130,112,201,19,211,139,
-121,34,87,69,128,104,137,239,83,18,238,108,165,2,162,92,104,56,220,233,1,8,
-151,10,134,162,100,206,16,18,50,9,195,39,105,20,101,136,18,25,4,225,147,
-180,138,5,215,49,238,105,27,60,185,1,36,104,156,50,118,145,70,96,129,34,52,
-78,25,59,72,160,93,115,30,230,145,179,204,144,12,73,8,15,38,104,128,138,52,
-146,16,30,77,1,0,2,11,132,193,198,36,248,248,186,110,158,30,78,56,188,194,
-70,183,170,136,48,98,79,142,179,120,248,185,228,140,241,193,146,66,138,31,
-55,71,138,128,153,137,62,58,205,227,226,231,146,51,199,26,6,18,92,146,64,
-96,74,72,51,120,43,192,97,68,128,153,56,72,7,12,133,67,73,199,197,207,36,
-103,142,35,2,3,33,80,210,113,241,115,201,25,160,146,225,160,9,34,1,124,178,
-1,139,18,19,36,229,146,8,190,36,169,27,62,18,243,35,100,135,54,92,162,2,17,
-46,72,128,89,7,200,32,33,18,225,98,236,145,188,130,64,196,75,132,188,200,
-217,32,43,39,28,128,69,19,18,228,144,42,98,79,142,179,120,248,185,228,140,
-241,201,97,129,114,229,201,37,2,68,184,200,1,147,93,159,153,213,34,235,250,
-96,48,157,32,24,94,160,1,199,4,184,235,55,143,139,158,72,207,28,226,3,81,
-46,62,46,155,167,135,147,142,47,60,129,71,197,207,36,103,142,34,92,35,104,
-194,68,1,89,58,36,8,109,109,12,133,67,73,195,18,115,36,118,182,185,168,8,
-109,109,12,133,67,73,201,18,115,36,118,182,185,168,130,27,91,75,115,149,71,
-240,196,156,201,29,173,174,129,2,27,91,75,115,149,71,242,68,156,201,29,173,
-174,129,34,12,16,28,128,62,191,42,3,71,146,68,4,16,22,188,161,240,16,40,
-104,242,103,196,16,93,158,125,96,110,115,235,64,131,16,16,58,37,192,70,32,
-194,144,114,25,67,95,40,6,18,8,32,48,156,209,2,108,124,96,224,144,6,247,62,
-16,0,143,164,143,12,248,15,18,84,145,145,34,128,11,35,160,179,140,0,44,150,
-129,18,58,0,146,116,103,32,128,105,61,104,17,36,175,1,232,217,29,5,156,179,
-224,58,26,50,95,142,43,159,64,181,130,83,226,26,50,95,142,43,159,192,7,255,
-248,41,42,72,226,1,160,18,78,97,32,26,64,114,186,60,32,4,120,6,148,13,128,
-124,3,76,12,84,46,100,140,3,78,13,18,14,130,36,67,232,23,18,14,130,39,34,
-131,30,113,15,224,3,255,253,6,48,40,194,197,204,224,142,8,240,78,25,60,231,
-192,210,197,204,224,156,50,113,238,67,103,232,62,28,138,156,104,82,170,107,
-255,32,48,191,144,1,132,112,71,128,159,168,128,161,28,17,224,156,50,112,19,
-245,144,22,39,12,156,123,144,217,240,19,245,146,3,9,205,16,39,236,62,3,161,
-163,37,248,226,251,141,1,107,4,167,196,52,100,191,28,95,113,164,13,91,132,
-5,147,130,115,30,8,147,222,64,43,1,49,31,224,64,60,72,245,128,68,249,32,13,
-34,2,34,63,204,128,89,45,2,39,209,0,89,61,104,159,213,0,153,80,50,156,80,
-211,126,16,11,155,184,183,88,145,224,129,34,122,64,17,155,184,183,8,11,39,
-22,235,18,60,16,36,79,72,1,115,119,40,247,146,60,16,36,79,72,32,140,221,
-197,184,64,89,57,71,188,145,224,129,34,122,65,1,39,20,51,244,0,52,72,242,2,
-127,18,2,165,48,70,114,229,145,51,253,141,1,4,104,229,203,34,103,251,26,64,
-132,52,75,160,201,47,105,160,26,84,12,167,31,186,8,50,0,114,58,113,163,46,
-190,120,35,11,60,4,25,68,81,61,96,47,181,80,46,132,129,255,255,222,255,255,
-255,255,254,39,172,67,118,170,5,208,144,0,0,0,0,0,64,0,0,51,16,0,0,62,31,
-192,0,0,0,8,245,238,146,38,138,147,105,13,42,26,137,226,0,0,7,131,248,0,0,
-0,1,30,180,134,4,209,82,109,33,165,67,81,60,64,0,0,240,255,0,0,0,0,15,210,
-62,72,91,155,0,0,2,192,240,0,0,0,0,135,88,11,237,72,5,38,210,27,50,24,145,
-129,255,254,126,135,255,255,255,254,67,172,67,118,164,2,147,105,13,153,12,
-72,192,255,255,63,195,255,255,255,255,16,240,70,68,226,27,51,199,138,120,
-35,34,112,171,112,38,121,7,16,137,112,168,106,38,77,193,1,40,151,16,217,
-144,196,142,224,144,21,18,227,65,198,238,9,67,81,46,72,5,39,16,217,144,196,
-142,224,152,228,148,227,64,0,0,0,0,0,0,0,0,131,175,223,16,194,111,8,97,119,
-224,3,205,220,42,46,65,238,200,13,155,184,75,189,205,35,102,128,47,116,64,
-92,221,199,196,130,68,144,230,239,72,65,152,12,21,224,140,137,92,128,62,
-210,98,177,252,3,107,173,88,3,146,211,141,32,0,3,225,252,0,0,0,3,19,175,
-188,0,100,221,193,130,100,228,167,20,52,215,129,3,38,238,77,12,39,37,56,
-161,166,188,10,194,94,6,18,155,184,183,8,11,39,6,9,147,146,156,80,211,94,7,
-18,155,184,183,8,11,39,38,134,19,146,156,80,211,94,8,12,53,224,130,195,222,
-8,77,133,210,24,91,224,3,152,147,228,208,194,95,0,44,196,159,11,69,175,152,
-32,35,100,33,135,24,147,237,38,34,246,139,95,48,64,70,200,68,8,49,39,198,
-57,179,61,144,138,22,98,79,180,152,153,215,54,103,178,17,129,204,73,240,96,
-153,44,132,112,163,18,125,164,196,62,130,100,178,18,1,140,73,240,96,197,
-144,146,18,98,79,180,152,135,208,98,200,74,8,49,39,195,186,145,149,144,150,
-22,98,79,180,152,143,215,82,50,178,19,2,140,73,241,136,109,38,73,89,9,161,
-166,36,251,73,137,157,67,105,50,74,200,78,10,49,39,201,16,78,104,229,100,
-39,134,152,147,237,38,41,116,130,115,71,43,33,64,60,196,159,24,133,173,18,
-32,156,209,202,200,81,18,49,39,218,76,76,234,22,180,72,130,115,71,43,33,72,
-68,196,159,38,134,19,46,105,56,226,150,68,157,160,1,228,73,242,104,97,46,
-16,31,34,79,140,66,214,137,16,78,104,229,108,169,137,72,147,237,38,38,117,
-11,90,36,65,57,163,149,178,168,21,34,79,146,32,156,209,202,218,250,161,178,
-36,251,73,138,93,32,156,209,202,218,250,193,82,36,248,196,54,147,36,173,
-191,174,27,34,79,180,152,153,212,54,147,36,173,191,176,17,34,79,135,117,35,
-43,115,236,133,200,147,237,38,35,245,212,140,173,207,180,15,34,79,131,4,
-201,108,173,133,72,147,237,38,33,244,19,37,178,184,17,34,79,140,115,102,
-123,107,238,133,200,147,237,38,38,117,205,153,237,175,188,23,34,79,133,162,
-215,204,16,17,182,254,248,116,137,62,210,98,47,104,181,243,4,4,109,191,192,
-131,152,147,230,8,8,217,12,16,60,137,62,96,128,141,178,193,160,206,1,201,
-176,113,146,0,0,0,0,0,0,0,0,49,185,252,65,137,207,227,37,215,207,227,12,86,
-127,24,152,188,254,49,88,33,46,65,120,72,4,153,37,63,33,13,127,148,4,26,0,
-57,62,6,228,163,228,74,86,215,62,55,28,110,179,226,113,70,223,62,47,24,38,
-191,30,2,125,32,40,20,87,114,41,225,42,5,240,145,139,163,145,41,68,250,128,
-80,41,174,228,85,200,129,166,39,9,24,186,57,18,148,79,172,5,2,170,238,69,
-220,137,10,72,145,162,39,9,24,186,57,18,148,79,176,5,2,186,238,69,124,150,
-27,48,95,132,140,93,28,137,74,39,218,2,129,101,119,34,158,79,15,39,9,24,
-186,57,18,148,79,184,5,2,218,238,69,29,164,80,78,198,46,142,68,165,16,64,
-28,24,61,73,25,33,205,128,1,167,166,128,0,0,0,1,108,242,151,15,39,8,34,26,
-87,97,200,3,0,167,129,32,8,194,195,16,6,84,55,10,60,3,35,69,132,30,1,140,
-130,193,143,1,196,230,60,2,158,8,131,153,64,115,42,46,191,176,8,194,246,0,
-80,5,220,193,95,6,234,5,100,225,35,23,71,35,6,228,140,93,29,180,55,108,145,
-139,163,182,112,52,107,67,76,56,3,153,132,20,28,76,156,89,26,105,158,62,0,
-0,42,193,2,201,104,17,41,34,156,204,176,160,226,100,226,200,211,76,241,240,
-0,1,86,2,131,137,147,142,41,100,73,199,192,0,5,96,6,13,10,82,70,62,0,0,42,
-130,88,115,18,124,67,103,177,69,49,129,6,36,249,68,54,123,20,82,216,65,137,
-62,33,179,209,214,162,152,208,147,18,124,162,27,61,29,106,41,112,32,196,
-159,16,217,233,233,81,76,112,73,137,62,81,13,158,158,149,20,186,20,98,79,
-133,91,129,61,61,42,41,120,40,196,159,10,183,2,122,218,148,82,248,60,137,
-62,33,179,216,166,216,192,137,18,124,162,27,61,138,109,108,34,68,159,16,
-217,232,235,83,108,104,76,137,62,81,13,158,142,181,54,184,17,34,79,136,108,
-244,244,169,182,56,38,68,159,40,134,207,79,74,155,93,10,145,39,194,173,192,
-158,158,149,54,188,21,34,79,133,91,129,61,109,74,109,125,155,51,136,71,161,
-196,201,45,167,146,59,68,89,24,70,206,0,0,7,129,248,0,0,0,1,155,51,168,71,
-161,196,201,45,167,146,59,68,89,24,70,206,0,0,7,129,248,0,0,0,1,155,51,200,
-71,161,196,201,45,167,146,59,68,89,24,70,206,0,0,7,129,248,0,0,0,1,155,51,
-232,71,161,196,201,45,167,146,59,68,89,24,70,206,0,0,0,2,0,0,0,0,1,155,52,
-8,71,161,196,201,45,167,146,59,68,89,24,70,206,0,0,0,2,0,0,0,0,1,155,52,40,
-71,161,196,201,45,167,146,59,68,89,24,70,206,0,0,0,130,0,0,0,0,1,155,52,72,
-71,161,196,201,45,167,146,59,68,89,24,70,206,0,0,0,130,0,0,0,0,1,155,52,
-104,71,161,196,201,45,167,146,59,68,89,24,70,206,0,0,0,130,0,0,0,0,1,155,
-52,136,71,161,196,201,45,167,146,59,68,89,24,70,206,0,0,1,2,0,0,0,0,1,135,
-52,166,32,76,72,1,246,136,235,103,177,69,0,136,144,3,226,27,61,138,41,44,
-50,36,0,251,68,117,179,209,214,234,201,69,16,50,36,0,251,68,117,179,209,
-214,232,73,69,34,5,196,128,31,16,217,232,235,117,100,162,147,2,226,64,15,
-136,108,244,117,186,18,81,74,129,145,32,7,218,35,173,158,158,151,86,74,40,
-161,145,32,7,218,35,173,158,158,151,66,74,41,20,46,36,0,248,134,207,79,75,
-171,37,20,154,23,18,0,124,67,103,167,165,208,146,138,85,11,137,0,62,21,110,
-4,250,178,81,70,11,137,0,62,21,110,4,250,18,81,72,193,145,32,7,193,186,129,
-89,58,178,81,71,12,137,0,62,13,212,10,201,208,146,138,71,10,137,0,62,209,
-29,108,250,178,81,104,1,81,32,7,218,35,173,159,66,74,45,32,38,36,0,248,134,
-207,171,37,22,160,19,18,0,124,67,103,208,146,139,88,10,180,81,50,118,136,
-235,103,177,77,128,155,69,19,39,16,217,236,83,105,97,182,138,38,78,209,29,
-108,244,117,186,178,83,100,13,180,81,50,118,136,235,103,163,173,208,146,
-155,68,12,180,81,50,113,13,158,142,183,86,74,109,48,50,209,68,201,196,54,
-122,58,221,9,41,181,64,219,69,19,39,104,142,182,122,122,93,89,41,178,134,
-218,40,153,59,68,117,179,211,210,232,73,77,162,134,90,40,153,56,134,207,79,
-75,171,37,54,154,25,104,162,100,226,27,61,61,46,132,148,218,168,101,162,
-137,147,133,91,129,62,172,148,217,131,45,20,76,156,42,220,9,244,36,166,209,
-131,109,20,76,156,27,168,21,147,171,37,54,112,219,69,19,39,6,234,5,100,232,
-73,77,163,133,218,40,153,59,68,117,179,234,201,78,32,5,218,40,153,59,68,
-117,179,232,73,78,36,5,90,40,153,56,134,207,171,37,56,160,21,104,162,100,
-226,27,62,132,148,226,195,95,182,97,176,218,128,8,84,45,123,38,1,137,10,1,
-114,160,64,56,156,199,130,36,160,72,8,39,63,27,24,1,100,180,8,148,146,0,45,
-162,137,147,111,2,8,4,16,7,8,96,120,72,1,87,224,168,13,42,226,145,97,58,
-182,232,232,64,177,107,2,64,22,85,181,187,7,213,183,74,2,17,119,49,255,121,
-207,215,240,94,173,198,210,36,4,113,95,115,255,232,34,182,80,221,91,141,
-163,160,72,15,121,123,103,225,220,164,194,160,186,244,64,251,33,9,64,24,45,
-68,84,15,217,66,51,209,218,210,129,61,65,204,127,154,118,254,204,23,178,
-132,103,165,2,122,131,216,255,52,237,253,154,168,48,6,90,130,1,0,39,75,80,
-72,8,9,33,186,130,80,64,76,13,212,19,2,130,96,110,150,173,0,65,6,51,212,20,
-128,65,17,11,212,19,130,137,121,211,210,209,144,6,39,75,80,80,0,201,119,
-234,10,8,41,86,231,71,80,80,129,79,135,186,122,69,224,34,25,69,233,80,3,91,
-141,168,40,96,139,113,180,181,5,36,21,110,54,142,134,160,165,1,176,23,211,
-47,0,216,134,233,215,128,111,117,181,104,128,209,3,70,230,106,64,5,139,168,
-209,234,10,32,36,144,102,234,136,3,146,27,168,40,160,146,132,103,168,40,
-192,115,3,117,5,28,22,113,163,69,168,41,103,1,66,188,17,145,52,40,4,202,
-113,67,76,130,227,68,194,13,240,108,0,0,83,96,0,2,161,0,104,146,84,97,48,0,
-1,78,192,56,169,24,145,179,192,0,5,48,8,56,16,32,128,56,18,52,125,166,86,
-147,182,140,28,50,21,13,39,31,23,60,145,158,56,140,141,47,113,6,155,186,
-188,24,49,39,199,89,188,124,92,242,70,120,224,201,33,69,15,155,163,197,68,
-14,49,39,199,197,211,116,240,242,113,197,230,18,180,253,228,3,17,46,18,243,
-35,100,128,172,156,114,70,163,146,76,34,248,146,164,108,248,75,204,141,146,
-28,217,114,137,27,78,251,241,173,234,162,160,225,1,3,34,92,170,9,105,164,
-32,225,64,131,155,1,193,133,7,19,39,22,70,154,103,143,128,0,10,176,20,28,
-76,156,113,75,34,78,62,0,0,43,0,48,104,82,146,49,240,0,1,84,11,180,192,0,5,
-114,1,18,160,65,24,131,20,145,25,172,48,132,122,28,76,146,218,121,35,180,
-69,145,132,108,224,0,0,120,31,128,0,0,0,25,172,56,132,122,28,76,146,218,
-121,35,180,69,145,132,108,224,0,0,120,31,128,0,0,0,40,160,45,110,23,30,176,
-33,184,0,0,175,32,29,235,2,27,199,23,0,0,22,4,51,88,129,8,244,56,153,37,
-180,242,71,104,139,35,8,217,192,0,0,240,63,0,0,0,0,51,88,145,8,244,56,153,
-37,180,242,71,104,139,35,8,217,192,0,0,0,64,0,0,0,0,51,88,161,8,244,56,153,
-37,180,242,71,104,139,35,8,217,192,0,0,0,64,0,0,0,0,51,88,177,8,244,56,153,
-37,180,242,71,104,139,35,8,217,192,0,0,16,64,0,0,0,0,51,88,193,8,244,56,
-153,37,180,242,71,104,139,35,8,217,192,0,0,16,64,0,0,0,0,51,88,209,8,244,
-56,153,37,180,242,71,104,139,35,8,217,192,0,0,16,64,0,0,0,0,51,88,225,8,
-244,56,153,37,180,242,71,104,139,35,8,217,192,0,0,32,64,0,0,0,0,32,227,194,
-0,97,57,162,4,245,232,5,34,92,35,68,225,161,166,218,16,16,137,112,52,41,73,
-29,153,1,65,196,201,197,145,166,153,245,200,3,137,204,120,34,74,8,200,58,
-112,28,211,32,130,52,78,26,26,110,248,0,0,164,4,12,70,137,195,39,252,73,
-240,117,32,57,168,97,4,104,156,52,52,221,255,160,20,160,152,23,223,250,32,
-148,25,174,137,58,23,51,191,244,84,12,50,9,195,39,240,81,238,2,3,107,173,
-214,3,192,
+DUK_INTERNAL const duk_uint8_t duk_builtins_data[4251] = {
+144,148,105,225,32,68,52,228,126,12,104,201,37,132,52,167,194,138,105,244,
+124,57,28,211,57,18,64,52,238,254,44,138,111,171,241,164,19,87,137,30,33,
+167,18,145,159,8,211,137,9,225,42,5,240,145,139,163,163,8,211,137,10,228,
+64,211,19,132,140,93,29,56,70,156,72,119,34,66,146,36,104,137,194,70,46,
+142,172,35,78,36,47,146,195,102,11,240,145,139,163,175,8,211,137,9,228,240,
+242,112,145,139,163,179,8,211,137,8,237,34,130,118,49,116,118,225,26,48,0,
+1,94,29,201,158,46,183,39,135,147,132,140,93,16,132,76,66,33,8,66,16,132,
+33,8,66,26,180,41,97,167,64,150,34,33,154,112,0,1,87,247,35,79,103,237,198,
+174,216,47,31,23,95,17,13,31,217,96,211,49,50,53,212,77,141,24,0,0,179,10,
+228,240,242,15,128,140,65,128,134,188,0,0,89,167,97,181,224,0,2,205,62,53,
+224,0,2,205,66,237,120,0,0,179,81,204,107,192,0,5,154,150,67,94,0,0,44,212,
+245,90,240,0,1,102,169,162,215,128,0,11,53,93,150,188,0,0,89,171,111,53,
+108,150,163,70,0,0,42,2,249,50,94,124,35,68,225,146,49,13,24,0,0,165,161,
+124,153,47,62,12,130,112,201,24,132,56,97,115,16,0,0,62,31,192,0,0,0,51,48,
+0,0,60,31,192,0,0,0,50,241,32,26,193,55,132,112,161,156,72,135,26,41,200,
+140,114,163,156,201,7,56,79,9,80,47,132,140,93,19,160,43,145,3,76,78,18,49,
+116,78,144,238,68,133,36,72,209,19,132,140,93,19,168,47,146,195,102,11,240,
+145,139,162,117,132,242,120,121,56,72,197,209,59,2,59,72,160,157,140,93,19,
+181,36,242,50,143,36,31,131,162,166,7,144,238,133,227,226,235,224,242,161,
+249,18,21,100,20,207,44,199,151,180,122,89,135,152,154,121,153,199,156,158,
+121,218,7,158,162,121,250,71,160,166,122,26,135,162,170,122,58,199,164,16,
+240,70,68,226,27,51,199,138,120,35,34,112,171,112,38,121,1,124,153,47,62,
+17,162,112,201,19,211,11,228,201,121,240,100,19,134,72,158,160,91,201,18,
+186,44,3,68,79,122,168,151,115,165,40,21,18,227,65,198,231,200,8,68,184,84,
+53,19,38,120,128,145,144,78,25,59,72,163,48,64,144,200,39,12,157,164,80,46,
+185,143,115,72,217,230,72,9,35,68,225,147,180,138,51,68,9,17,162,112,201,
+218,69,2,235,152,247,52,141,158,108,128,98,72,64,121,51,132,4,81,164,144,
+128,242,104,136,0,16,92,38,14,49,39,199,197,211,116,240,242,113,197,231,18,
+53,189,116,65,131,18,124,117,155,199,197,207,36,103,142,12,146,20,80,249,
+186,60,116,4,204,73,241,214,111,31,23,60,145,158,56,208,48,146,229,146,3,2,
+82,65,155,195,94,3,10,36,4,201,196,64,56,100,42,26,78,62,46,121,35,60,113,
+152,16,25,10,134,147,143,139,158,72,205,4,151,21,0,73,16,11,230,144,12,88,
+144,153,39,52,144,69,241,37,72,217,240,151,153,27,36,57,178,230,16,16,137,
+114,68,2,200,62,81,1,8,151,11,23,100,141,229,18,6,34,92,37,230,70,201,1,89,
+57,36,2,40,152,151,44,129,83,18,124,117,155,199,197,207,36,103,142,75,12,
+11,151,46,89,40,18,37,200,64,12,154,236,252,238,185,23,95,213,1,132,234,0,
+194,245,128,14,56,37,199,89,188,124,92,242,70,120,232,16,26,137,113,241,
+116,221,60,60,156,113,122,36,10,62,46,121,35,60,113,18,225,27,70,18,32,10,
+201,211,32,67,107,104,100,42,26,78,24,147,153,35,181,181,207,64,67,107,104,
+100,42,26,78,72,147,153,35,181,181,207,68,16,218,218,91,156,170,63,134,36,
+230,72,237,109,116,136,16,218,218,91,156,170,63,146,36,230,72,237,109,116,
+137,16,96,128,228,2,6,191,46,3,71,147,68,4,16,22,188,169,240,16,40,104,242,
+135,198,171,44,68,65,5,217,231,215,6,231,62,188,8,49,1,3,162,92,4,98,12,41,
+7,33,148,53,242,128,97,32,130,3,9,205,16,38,199,198,14,9,0,111,115,225,0,8,
+250,72,240,207,128,241,37,73,25,18,40,0,178,58,11,56,192,2,201,104,17,35,
+160,9,39,70,114,8,6,147,214,129,18,74,240,30,141,145,208,89,203,62,3,161,
+163,37,248,226,185,244,11,88,37,62,33,163,37,248,226,185,252,0,127,255,130,
+146,164,142,32,26,1,36,230,18,1,164,7,43,163,194,0,71,128,105,64,216,7,192,
+52,192,197,66,230,72,192,52,224,209,32,232,34,68,62,129,113,32,232,34,114,
+40,49,231,16,254,0,63,255,208,99,2,140,44,92,206,8,224,143,4,225,147,210,
+124,13,44,92,206,9,195,39,30,228,54,126,163,225,200,169,198,133,42,166,191,
+246,3,11,251,0,24,71,4,120,9,251,8,10,17,193,30,9,195,39,1,63,105,1,98,112,
+201,199,185,13,159,1,63,105,32,48,156,209,2,126,227,224,58,26,50,95,142,47,
+192,208,22,176,74,124,67,70,75,241,197,248,26,64,213,184,64,89,56,39,49,
+224,137,62,36,2,176,19,17,254,68,3,196,143,88,4,79,162,0,210,32,34,35,253,
+72,5,146,208,34,125,144,5,147,214,137,253,208,9,149,3,41,197,13,55,233,0,
+185,187,139,117,137,30,8,18,39,172,1,25,187,139,112,128,178,113,110,177,35,
+193,2,68,245,128,23,55,114,143,121,35,193,2,68,245,130,8,205,220,91,132,5,
+147,148,123,201,30,8,18,39,172,16,18,113,67,63,128,3,68,143,32,39,243,32,
+42,83,4,103,46,89,19,63,224,208,16,70,142,92,178,38,127,193,164,8,67,68,
+186,12,146,247,154,1,165,64,202,113,252,160,131,32,7,35,167,26,50,235,231,
+130,48,179,192,65,148,69,19,214,2,251,85,2,232,72,31,255,253,239,255,255,
+255,255,226,122,196,55,106,160,93,9,0,0,0,0,0,4,0,0,3,49,0,0,3,225,252,0,0,
+0,0,143,94,233,34,104,169,54,144,210,161,168,158,32,0,0,120,63,128,0,0,0,
+17,235,72,96,77,21,38,210,26,84,53,19,196,0,0,15,15,240,0,0,0,0,253,35,228,
+133,185,176,0,0,44,15,0,0,0,0,8,117,128,190,212,128,82,109,33,179,33,137,
+24,31,255,231,232,127,255,255,255,228,58,196,55,106,64,41,54,144,217,144,
+196,140,15,255,243,252,63,255,255,255,241,15,4,100,78,33,179,60,120,167,
+130,50,39,10,183,2,103,144,113,8,151,10,134,162,100,221,16,18,137,113,13,
+153,12,72,238,137,1,81,46,52,28,110,232,148,53,18,228,128,82,113,13,153,12,
+72,238,137,142,73,78,52,0,0,0,0,0,0,0,0,8,58,254,1,12,38,248,134,23,130,0,
+60,221,194,162,228,30,244,128,217,187,132,187,220,210,54,104,2,247,132,5,
+205,220,124,72,36,73,14,110,252,132,25,128,193,94,8,200,149,200,3,237,38,
+43,31,192,54,186,213,128,57,45,56,210,0,0,62,31,192,0,0,0,49,90,251,224,6,
+77,220,24,38,78,74,113,67,77,124,16,50,110,228,208,194,114,83,138,26,107,
+224,172,37,240,97,41,187,139,112,128,178,112,96,153,57,41,197,13,53,240,
+113,41,187,139,112,128,178,114,104,97,57,41,197,13,53,240,128,195,95,8,44,
+61,240,132,216,93,33,133,192,128,14,98,79,147,67,9,129,0,44,196,159,11,69,
+175,152,32,35,100,33,135,24,147,237,38,34,246,139,95,48,64,70,200,68,8,49,
+39,198,57,179,61,144,138,22,98,79,180,152,153,215,54,103,178,17,129,204,73,
+240,96,153,44,132,112,163,18,125,164,196,62,130,100,178,18,1,140,73,240,96,
+197,144,146,18,98,79,180,152,135,208,98,200,74,8,49,39,195,186,145,149,144,
+150,22,98,79,180,152,143,215,82,50,178,19,2,140,73,241,136,109,38,73,89,9,
+161,166,36,251,73,137,157,67,105,50,74,200,78,10,49,39,201,16,78,104,229,
+100,39,134,152,147,237,38,41,116,130,115,71,43,33,64,60,196,159,24,133,173,
+18,32,156,209,202,200,81,18,49,39,218,76,76,234,22,180,72,130,115,71,43,33,
+72,68,196,159,38,134,19,46,105,56,226,150,68,157,160,1,228,73,242,104,97,
+46,16,31,34,79,140,66,214,137,16,78,104,229,108,169,137,72,147,237,38,38,
+117,11,90,36,65,57,163,149,178,168,21,34,79,146,32,156,209,202,218,250,161,
+178,36,251,73,138,93,32,156,209,202,218,250,193,82,36,248,196,54,147,36,
+173,191,174,27,34,79,180,152,153,212,54,147,36,173,191,176,17,34,79,135,
+117,35,43,115,236,133,200,147,237,38,35,245,212,140,173,207,180,15,34,79,
+131,4,201,108,173,133,72,147,237,38,33,244,19,37,178,184,17,34,79,140,115,
+102,123,107,238,133,200,147,237,38,38,117,205,153,237,175,188,23,34,79,133,
+162,215,204,16,17,182,254,248,116,137,62,210,98,47,104,181,243,4,4,109,191,
+192,131,152,147,230,8,8,217,12,16,60,137,62,96,128,141,178,193,181,55,136,
+200,51,128,114,108,28,100,128,0,0,0,0,0,0,0,12,110,127,32,98,115,249,73,
+117,243,249,67,21,159,202,38,47,63,148,86,8,75,144,94,50,1,38,73,79,204,67,
+95,231,1,6,128,14,79,129,185,40,249,18,149,181,207,142,199,155,172,248,172,
+89,183,207,140,198,137,175,200,0,159,72,10,5,21,220,138,120,74,129,124,36,
+98,232,228,74,81,62,160,20,10,107,185,21,114,32,105,137,194,70,46,142,68,
+165,19,235,1,64,170,187,145,119,34,66,146,36,104,137,194,70,46,142,68,165,
+19,236,1,64,174,187,145,95,37,134,204,23,225,35,23,71,34,82,137,246,128,
+160,89,93,200,167,147,195,201,194,70,46,142,68,165,19,238,1,64,182,187,145,
+71,105,20,19,177,139,163,145,41,68,16,7,6,15,82,70,72,115,96,0,118,105,160,
+0,0,0,0,91,60,165,195,201,194,8,134,149,216,130,0,192,41,224,136,2,48,176,
+228,1,149,13,195,15,0,200,209,97,71,128,99,32,176,131,192,113,57,143,0,167,
+131,32,230,80,28,202,139,175,237,2,48,189,160,20,1,119,48,87,193,186,129,
+89,56,72,197,209,200,193,185,35,23,71,109,13,219,36,98,232,237,156,13,26,
+208,211,14,102,19,87,137,91,95,128,0,10,64,24,92,0,0,82,2,53,63,240,49,204,
+202,10,14,38,78,44,141,52,207,31,0,0,22,32,129,100,180,8,148,145,78,102,
+152,80,113,50,113,100,105,166,120,248,0,0,177,1,65,196,201,199,20,178,36,
+227,224,0,2,200,3,6,133,41,35,31,0,0,22,1,44,57,137,62,33,179,216,162,152,
+192,131,18,124,162,27,61,138,41,108,32,196,159,16,217,232,235,81,76,104,73,
+137,62,81,13,158,142,181,20,184,16,98,79,136,108,244,244,168,166,56,36,196,
+159,40,134,207,79,74,138,93,10,49,39,194,173,192,158,158,149,20,188,20,98,
+79,133,91,129,61,109,74,41,124,30,68,159,16,217,236,83,108,96,68,137,62,81,
+13,158,197,54,182,17,34,79,136,108,244,117,169,182,52,38,68,159,40,134,207,
+71,90,155,92,8,145,39,196,54,122,122,84,219,28,19,34,79,148,67,103,167,165,
+77,174,133,72,147,225,86,224,79,79,74,155,94,10,145,39,194,173,192,158,182,
+165,54,190,206,25,212,35,208,226,100,150,211,201,29,162,44,140,35,103,0,0,
+3,192,252,0,0,0,0,206,25,228,35,208,226,100,150,211,201,29,162,44,140,35,
+103,0,0,3,192,252,0,0,0,0,206,25,244,35,208,226,100,150,211,201,29,162,44,
+140,35,103,0,0,3,192,252,0,0,0,0,206,26,4,35,208,226,100,150,211,201,29,
+162,44,140,35,103,0,0,0,1,0,0,0,0,0,206,26,20,35,208,226,100,150,211,201,
+29,162,44,140,35,103,0,0,0,1,0,0,0,0,0,206,26,36,35,208,226,100,150,211,
+201,29,162,44,140,35,103,0,0,0,65,0,0,0,0,0,206,26,52,35,208,226,100,150,
+211,201,29,162,44,140,35,103,0,0,0,65,0,0,0,0,0,206,26,68,35,208,226,100,
+150,211,201,29,162,44,140,35,103,0,0,0,65,0,0,0,0,0,206,26,84,35,208,226,
+100,150,211,201,29,162,44,140,35,103,0,0,0,129,0,0,0,0,0,195,154,99,16,38,
+36,0,251,68,117,179,216,162,128,68,72,1,241,13,158,197,20,150,25,18,0,125,
+162,58,217,232,235,117,100,162,136,25,18,0,125,162,58,217,232,235,116,36,
+162,145,2,226,64,15,136,108,244,117,186,178,81,73,129,113,32,7,196,54,122,
+58,221,9,40,165,64,200,144,3,237,17,214,207,79,75,171,37,20,80,200,144,3,
+237,17,214,207,79,75,161,37,20,138,23,18,0,124,67,103,167,165,213,146,138,
+77,11,137,0,62,33,179,211,210,232,73,69,42,133,196,128,31,10,183,2,125,89,
+40,163,5,196,128,31,10,183,2,125,9,40,164,96,200,144,3,224,221,64,172,157,
+89,40,163,134,68,128,31,6,234,5,100,232,73,69,35,133,68,128,31,104,142,182,
+125,89,40,180,0,168,144,3,237,17,214,207,161,37,22,144,19,18,0,124,67,103,
+213,146,139,80,9,137,0,62,33,179,232,73,69,172,5,90,40,153,59,68,117,179,
+216,166,192,77,162,137,147,136,108,246,41,180,176,219,69,19,39,104,142,182,
+122,58,221,89,41,178,6,218,40,153,59,68,117,179,209,214,232,73,77,162,6,90,
+40,153,56,134,207,71,91,171,37,54,152,25,104,162,100,226,27,61,29,110,132,
+148,218,160,109,162,137,147,180,71,91,61,61,46,172,148,217,67,109,20,76,
+157,162,58,217,233,233,116,36,166,209,67,45,20,76,156,67,103,167,165,213,
+146,155,77,12,180,81,50,113,13,158,158,151,66,74,109,84,50,209,68,201,194,
+173,192,159,86,74,108,193,150,138,38,78,21,110,4,250,18,83,104,193,182,138,
+38,78,13,212,10,201,213,146,155,56,109,162,137,147,131,117,2,178,116,36,
+166,209,194,237,20,76,157,162,58,217,245,100,167,16,2,237,20,76,157,162,58,
+217,244,36,167,18,2,173,20,76,156,67,103,213,146,156,80,10,180,81,50,113,
+13,159,66,74,113,97,175,220,48,216,109,192,4,42,22,189,163,0,196,133,0,185,
+80,32,28,78,99,193,18,80,36,4,19,159,141,156,0,178,90,4,74,73,0,22,209,68,
+201,185,129,4,2,8,3,132,64,60,36,0,171,240,84,6,149,113,72,176,157,91,116,
+116,32,88,181,129,32,11,42,218,221,131,234,219,165,1,8,187,152,255,188,231,
+235,248,47,86,227,105,18,2,56,175,185,255,244,17,91,40,110,173,198,209,208,
+36,7,188,189,179,240,238,82,97,80,93,122,32,125,144,132,160,12,22,162,42,7,
+236,161,25,232,237,105,64,158,160,230,63,205,59,127,102,11,217,66,51,210,
+129,61,65,236,127,154,118,254,205,171,197,34,168,48,6,90,162,1,0,39,75,84,
+72,8,9,33,186,162,80,64,76,13,213,19,2,130,96,110,150,181,0,65,6,51,213,20,
+128,65,17,11,213,19,130,137,121,211,210,210,144,6,39,75,84,80,0,201,119,
+234,138,8,41,86,231,71,84,80,129,79,135,186,122,101,224,34,25,69,233,208,3,
+91,141,170,40,96,139,113,180,181,69,36,21,110,54,142,134,168,165,1,176,23,
+212,47,0,216,134,234,87,128,111,117,181,168,128,209,3,70,230,106,192,5,139,
+168,209,234,138,32,36,144,102,235,8,3,146,27,170,40,160,146,132,103,170,40,
+192,115,3,117,69,28,22,113,163,69,170,41,103,1,66,188,17,145,52,104,4,202,
+113,67,76,130,227,72,194,13,240,108,0,0,83,96,0,2,185,0,104,146,84,97,48,0,
+1,90,192,56,169,24,145,179,192,0,5,96,8,56,16,32,128,56,18,52,125,198,86,
+147,186,140,28,50,21,13,39,31,23,60,145,158,56,204,141,47,121,6,155,190,
+188,24,49,39,199,89,188,124,92,242,70,120,224,201,33,69,15,155,163,199,68,
+14,49,39,199,197,211,116,240,242,113,197,231,18,180,254,4,3,17,46,18,243,
+35,100,128,172,156,146,70,163,150,76,34,248,146,164,108,248,75,204,141,146,
+28,217,115,9,27,79,11,241,173,235,162,160,224,200,2,206,9,113,13,148,192,
+209,18,22,164,146,37,193,57,162,4,249,39,196,128,24,2,178,66,213,136,68,
+201,16,77,209,131,31,192,242,88,96,92,191,151,34,100,136,38,232,255,252,92,
+221,199,197,12,68,209,82,66,212,11,155,185,41,197,13,55,38,3,66,213,47,131,
+250,72,12,162,99,133,116,127,196,32,225,1,3,34,92,170,9,105,164,32,225,64,
+131,156,1,193,133,7,19,39,22,70,154,103,143,128,0,11,16,20,28,76,156,113,
+75,34,78,62,0,0,44,128,48,104,82,146,49,240,0,1,96,11,180,192,0,5,162,1,18,
+160,65,24,131,20,145,25,188,48,132,122,28,76,146,218,121,35,180,69,145,132,
+108,224,0,0,120,31,128,0,0,0,25,188,56,132,122,28,76,146,218,121,35,180,69,
+145,132,108,224,0,0,120,31,128,0,0,0,40,160,45,110,23,30,176,33,184,0,0,
+181,32,29,235,2,27,199,23,0,0,22,196,51,120,129,8,244,56,153,37,180,242,71,
+104,139,35,8,217,192,0,0,240,63,0,0,0,0,51,120,145,8,244,56,153,37,180,242,
+71,104,139,35,8,217,192,0,0,0,64,0,0,0,0,51,120,161,8,244,56,153,37,180,
+242,71,104,139,35,8,217,192,0,0,0,64,0,0,0,0,51,120,177,8,244,56,153,37,
+180,242,71,104,139,35,8,217,192,0,0,16,64,0,0,0,0,51,120,193,8,244,56,153,
+37,180,242,71,104,139,35,8,217,192,0,0,16,64,0,0,0,0,51,120,209,8,244,56,
+153,37,180,242,71,104,139,35,8,217,192,0,0,16,64,0,0,0,0,51,120,225,8,244,
+56,153,37,180,242,71,104,139,35,8,217,192,0,0,32,64,0,0,0,0,32,227,194,0,
+97,57,162,4,246,40,5,34,92,35,68,225,161,166,219,16,16,137,112,52,41,73,29,
+169,1,65,196,201,197,145,166,153,246,8,3,137,204,120,34,74,8,200,58,128,28,
+211,160,130,52,78,26,26,110,248,0,0,170,4,12,70,137,195,38,0,0,42,68,159,7,
+84,3,154,150,16,70,137,195,67,77,223,0,0,20,224,20,160,152,23,223,0,0,20,
+226,9,65,154,232,147,161,115,59,224,0,2,156,84,12,50,9,195,38,0,0,41,133,
+30,224,32,54,186,221,128,60,
};
#else
#error invalid endianness defines
@@ -13445,7 +13484,7 @@ DUK_LOCAL duk_uint8_t *duk__dump_string_prop(duk_hthread *thr, duk_uint8_t *p, d
duk_hstring *h_str;
duk_tval *tv;
- tv = duk_hobject_find_existing_entry_tval_ptr(thr->heap, (duk_hobject *) func, DUK_HTHREAD_GET_STRING(thr, stridx));
+ tv = duk_hobject_find_entry_tval_ptr_stridx(thr->heap, (duk_hobject *) func, stridx);
if (tv != NULL && DUK_TVAL_IS_STRING(tv)) {
h_str = DUK_TVAL_GET_STRING(tv);
DUK_ASSERT(h_str != NULL);
@@ -13462,7 +13501,7 @@ DUK_LOCAL duk_uint8_t *duk__dump_string_prop(duk_hthread *thr, duk_uint8_t *p, d
DUK_LOCAL duk_uint8_t *duk__dump_buffer_prop(duk_hthread *thr, duk_uint8_t *p, duk_bufwriter_ctx *bw_ctx, duk_hobject *func, duk_small_uint_t stridx) {
duk_tval *tv;
- tv = duk_hobject_find_existing_entry_tval_ptr(thr->heap, (duk_hobject *) func, DUK_HTHREAD_GET_STRING(thr, stridx));
+ tv = duk_hobject_find_entry_tval_ptr_stridx(thr->heap, (duk_hobject *) func, stridx);
if (tv != NULL && DUK_TVAL_IS_BUFFER(tv)) {
duk_hbuffer *h_buf;
h_buf = DUK_TVAL_GET_BUFFER(tv);
@@ -13481,7 +13520,7 @@ DUK_LOCAL duk_uint8_t *duk__dump_uint32_prop(duk_hthread *thr, duk_uint8_t *p, d
duk_tval *tv;
duk_uint32_t val;
- tv = duk_hobject_find_existing_entry_tval_ptr(thr->heap, (duk_hobject *) func, DUK_HTHREAD_GET_STRING(thr, stridx));
+ tv = duk_hobject_find_entry_tval_ptr_stridx(thr->heap, (duk_hobject *) func, stridx);
if (tv != NULL && DUK_TVAL_IS_NUMBER(tv)) {
val = (duk_uint32_t) DUK_TVAL_GET_NUMBER(tv);
} else {
@@ -13493,16 +13532,12 @@ DUK_LOCAL duk_uint8_t *duk__dump_uint32_prop(duk_hthread *thr, duk_uint8_t *p, d
}
DUK_LOCAL duk_uint8_t *duk__dump_varmap(duk_hthread *thr, duk_uint8_t *p, duk_bufwriter_ctx *bw_ctx, duk_hobject *func) {
- duk_tval *tv;
+ duk_hobject *h;
- tv = duk_hobject_find_existing_entry_tval_ptr(thr->heap, (duk_hobject *) func, DUK_HTHREAD_STRING_INT_VARMAP(thr));
- if (tv != NULL && DUK_TVAL_IS_OBJECT(tv)) {
- duk_hobject *h;
+ h = duk_hobject_get_varmap(thr, (duk_hobject *) func);
+ if (h != NULL) {
duk_uint_fast32_t i;
- h = DUK_TVAL_GET_OBJECT(tv);
- DUK_ASSERT(h != NULL);
-
/* We know _Varmap only has own properties so walk property
* table directly. We also know _Varmap is dense and all
* values are numbers; assert for these. GC and finalizers
@@ -13539,11 +13574,10 @@ DUK_LOCAL duk_uint8_t *duk__dump_varmap(duk_hthread *thr, duk_uint8_t *p, duk_bu
}
DUK_LOCAL duk_uint8_t *duk__dump_formals(duk_hthread *thr, duk_uint8_t *p, duk_bufwriter_ctx *bw_ctx, duk_hobject *func) {
- duk_tval *tv;
+ duk_harray *h;
- tv = duk_hobject_find_existing_entry_tval_ptr(thr->heap, (duk_hobject *) func, DUK_HTHREAD_STRING_INT_FORMALS(thr));
- if (tv != NULL && DUK_TVAL_IS_OBJECT(tv)) {
- duk_harray *h;
+ h = duk_hobject_get_formals(thr, (duk_hobject *) func);
+ if (h != NULL) {
duk_uint32_t i;
/* Here we rely on _Formals being a dense array containing
@@ -13551,10 +13585,6 @@ DUK_LOCAL duk_uint8_t *duk__dump_formals(duk_hthread *thr, duk_uint8_t *p, duk_b
* tweaked by the application (which we don't support right
* now).
*/
- h = (duk_harray *) DUK_TVAL_GET_OBJECT(tv);
- DUK_ASSERT(h != NULL);
- DUK_ASSERT(DUK_HOBJECT_IS_ARRAY((duk_hobject *) h));
- DUK_ASSERT(h->length <= DUK_HOBJECT_GET_ASIZE((duk_hobject *) h));
p = DUK_BW_ENSURE_RAW(thr, bw_ctx, 4U, p);
DUK_ASSERT(h->length != DUK__NO_FORMALS); /* limits */
@@ -13821,6 +13851,7 @@ static duk_uint8_t *duk__load_func(duk_hthread *thr, duk_uint8_t *p, duk_uint8_t
DUK_ASSERT(DUK_HOBJECT_HAS_COMPFUNC(&h_fun->obj));
DUK_ASSERT(!DUK_HOBJECT_HAS_NATFUNC(&h_fun->obj));
DUK_ASSERT(!DUK_HOBJECT_IS_THREAD(&h_fun->obj));
+ DUK_ASSERT(!DUK_HOBJECT_IS_PROXY(&h_fun->obj));
DUK_ASSERT(!DUK_HOBJECT_HAS_EXOTIC_ARRAY(&h_fun->obj));
DUK_ASSERT(!DUK_HOBJECT_HAS_EXOTIC_STRINGOBJ(&h_fun->obj));
DUK_ASSERT(!DUK_HOBJECT_HAS_EXOTIC_ARGUMENTS(&h_fun->obj));
@@ -13952,7 +13983,7 @@ static duk_uint8_t *duk__load_func(duk_hthread *thr, duk_uint8_t *p, duk_uint8_t
DUK_ASSERT(new_env->thread == NULL); /* Closed. */
DUK_ASSERT(new_env->varmap == NULL);
DUK_ASSERT(new_env->regbase_byteoff == 0);
- DUK_ASSERT_HDECENV_VALID(new_env);
+ DUK_HDECENV_ASSERT_VALID(new_env);
DUK_ASSERT(DUK_HOBJECT_GET_PROTOTYPE(thr->heap, (duk_hobject *) new_env) == NULL);
DUK_HOBJECT_SET_PROTOTYPE(thr->heap, (duk_hobject *) new_env, func_env);
DUK_HOBJECT_INCREF(thr, func_env);
@@ -13985,9 +14016,11 @@ static duk_uint8_t *duk__load_func(duk_hthread *thr, duk_uint8_t *p, duk_uint8_t
if (DUK_HOBJECT_HAS_CONSTRUCTABLE((duk_hobject *) h_fun)) {
/* Restore empty external .prototype only for constructable
- * functions.
+ * functions. The prototype object should inherit from
+ * Object.prototype.
*/
duk_push_object(thr);
+ DUK_ASSERT(!duk_is_bare_object(thr, -1));
duk_dup_m2(thr);
duk_xdef_prop_stridx_short(thr, -2, DUK_STRIDX_CONSTRUCTOR, DUK_PROPDESC_FLAGS_WC); /* func.prototype.constructor = func */
duk_compact_m1(thr);
@@ -13999,7 +14032,7 @@ static duk_uint8_t *duk__load_func(duk_hthread *thr, duk_uint8_t *p, duk_uint8_t
duk_xdef_prop_stridx_short(thr, -2, DUK_STRIDX_INT_PC2LINE, DUK_PROPDESC_FLAGS_WC);
#endif /* DUK_USE_PC2LINE */
- duk_push_object(thr); /* _Varmap */
+ duk_push_bare_object(thr); /* _Varmap */
for (;;) {
/* XXX: awkward */
p = duk__load_string_raw(thr, p);
@@ -14019,7 +14052,7 @@ static duk_uint8_t *duk__load_func(duk_hthread *thr, duk_uint8_t *p, duk_uint8_t
*/
arr_limit = DUK_RAW_READ_U32_BE(p);
if (arr_limit != DUK__NO_FORMALS) {
- duk_push_array(thr); /* _Formals */
+ duk_push_bare_array(thr); /* _Formals */
for (arr_idx = 0; arr_idx < arr_limit; arr_idx++) {
p = duk__load_string_raw(thr, p);
duk_put_prop_index(thr, -2, arr_idx);
@@ -14214,7 +14247,7 @@ DUK_LOCAL duk_idx_t duk__call_get_idx_func_unvalidated(duk_hthread *thr, duk_idx
* May currently throw an error e.g. when getting the property.
*/
DUK_LOCAL void duk__call_prop_prep_stack(duk_hthread *thr, duk_idx_t normalized_obj_idx, duk_idx_t nargs) {
- DUK_ASSERT_CTX_VALID(thr);
+ DUK_CTX_ASSERT_VALID(thr);
DUK_ASSERT(nargs >= 0);
DUK_DDD(DUK_DDDPRINT("duk__call_prop_prep_stack, normalized_obj_idx=%ld, nargs=%ld, stacktop=%ld",
@@ -14230,18 +14263,16 @@ DUK_LOCAL void duk__call_prop_prep_stack(duk_hthread *thr, duk_idx_t normalized_
#if defined(DUK_USE_VERBOSE_ERRORS)
if (DUK_UNLIKELY(!duk_is_callable(thr, -1))) {
- duk_tval *tv_targ;
duk_tval *tv_base;
duk_tval *tv_key;
- tv_targ = DUK_GET_TVAL_NEGIDX(thr, -1);
+ /* tv_targ is passed on stack top (at index -1). */
tv_base = DUK_GET_TVAL_POSIDX(thr, normalized_obj_idx);
tv_key = DUK_GET_TVAL_NEGIDX(thr, -nargs - 2);
- DUK_ASSERT(tv_targ >= thr->valstack_bottom && tv_targ < thr->valstack_top);
DUK_ASSERT(tv_base >= thr->valstack_bottom && tv_base < thr->valstack_top);
DUK_ASSERT(tv_key >= thr->valstack_bottom && tv_key < thr->valstack_top);
- duk_call_setup_propcall_error(thr, tv_targ, tv_base, tv_key);
+ duk_call_setup_propcall_error(thr, tv_base, tv_key);
}
#endif
@@ -14311,7 +14342,7 @@ DUK_LOCAL duk_ret_t duk__pcall_raw(duk_hthread *thr, void *udata) {
duk_idx_t idx_func;
duk_int_t ret;
- DUK_ASSERT_CTX_VALID(thr);
+ DUK_CTX_ASSERT_VALID(thr);
DUK_ASSERT(udata != NULL);
args = (duk__pcall_args *) udata;
@@ -14347,7 +14378,7 @@ DUK_LOCAL duk_ret_t duk__pcall_method_raw(duk_hthread *thr, void *udata) {
duk_idx_t idx_func;
duk_int_t ret;
- DUK_ASSERT_CTX_VALID(thr);
+ DUK_CTX_ASSERT_VALID(thr);
DUK_ASSERT(udata != NULL);
args = (duk__pcall_method_args *) udata;
@@ -14388,7 +14419,7 @@ DUK_LOCAL duk_ret_t duk__pcall_prop_raw(duk_hthread *thr, void *udata) {
duk_idx_t obj_idx;
duk_int_t ret;
- DUK_ASSERT_CTX_VALID(thr);
+ DUK_CTX_ASSERT_VALID(thr);
DUK_ASSERT(udata != NULL);
args = (duk__pcall_prop_args *) udata;
@@ -14514,10 +14545,7 @@ DUK_EXTERNAL duk_bool_t duk_is_constructor_call(duk_hthread *thr) {
return 0;
}
-/* XXX: Make this obsolete by adding a function flag for rejecting a
- * non-constructor call automatically?
- */
-DUK_INTERNAL void duk_require_constructor_call(duk_hthread *thr) {
+DUK_EXTERNAL void duk_require_constructor_call(duk_hthread *thr) {
DUK_ASSERT_API_ENTRY(thr);
if (!duk_is_constructor_call(thr)) {
@@ -14623,7 +14651,7 @@ DUK_EXTERNAL void duk_set_magic(duk_hthread *thr, duk_idx_t idx, duk_int_t magic
DUK_INTERNAL void duk_resolve_nonbound_function(duk_hthread *thr) {
duk_tval *tv;
- DUK_ASSERT_HTHREAD_VALID(thr);
+ DUK_HTHREAD_ASSERT_VALID(thr);
tv = DUK_GET_TVAL_NEGIDX(thr, -1);
if (DUK_TVAL_IS_OBJECT(tv)) {
@@ -14668,23 +14696,34 @@ DUK_INTERNAL void duk_resolve_nonbound_function(duk_hthread *thr) {
/* Shared handling for encode/decode argument. Fast path handling for
* buffer and string values because they're the most common. In particular,
- * avoid creating a temporary string or buffer when possible.
+ * avoid creating a temporary string or buffer when possible. Return value
+ * is guaranteed to be non-NULL, even for zero length input.
*/
DUK_LOCAL const duk_uint8_t *duk__prep_codec_arg(duk_hthread *thr, duk_idx_t idx, duk_size_t *out_len) {
- void *ptr;
+ const void *def_ptr = (const void *) out_len; /* Any non-NULL pointer will do. */
+ const void *ptr;
duk_bool_t isbuffer;
+ DUK_ASSERT(out_len != NULL);
+ DUK_ASSERT(def_ptr != NULL);
DUK_ASSERT(duk_is_valid_index(thr, idx)); /* checked by caller */
- /* XXX: with def_ptr set to a stack related pointer, isbuffer could
- * be removed from the helper?
- */
- ptr = duk_get_buffer_data_raw(thr, idx, out_len, NULL /*def_ptr*/, 0 /*def_size*/, 0 /*throw_flag*/, &isbuffer);
+ ptr = (const void *) duk_get_buffer_data_raw(thr, idx, out_len, NULL /*def_ptr*/, 0 /*def_size*/, 0 /*throw_flag*/, &isbuffer);
if (isbuffer) {
- DUK_ASSERT(*out_len == 0 || ptr != NULL);
- return (const duk_uint8_t *) ptr;
+ DUK_ASSERT(ptr != NULL || *out_len == 0U);
+ if (DUK_UNLIKELY(ptr == NULL)) {
+ ptr = def_ptr;
+ }
+ DUK_ASSERT(ptr != NULL);
+ } else {
+ /* For strings a non-NULL pointer is always guaranteed because
+ * at least a NUL will be present.
+ */
+ ptr = (const void *) duk_to_lstring(thr, idx, out_len);
+ DUK_ASSERT(ptr != NULL);
}
- return (const duk_uint8_t *) duk_to_lstring(thr, idx, out_len);
+ DUK_ASSERT(ptr != NULL);
+ return (const duk_uint8_t *) ptr;
}
/*
@@ -14928,6 +14967,8 @@ DUK_LOCAL duk_bool_t duk__base64_decode_helper(const duk_uint8_t *src, duk_size_
const duk_uint8_t *p_end_safe;
duk_uint8_t *q;
+ DUK_ASSERT(src != NULL); /* Required by pointer arithmetic below, which fails for NULL. */
+
p = src;
p_end = src + srclen;
p_end_safe = p_end - 8; /* If 'src <= src_end_safe', safe to read 8 bytes. */
@@ -15263,7 +15304,7 @@ DUK_EXTERNAL const char *duk_base64_encode(duk_hthread *thr, duk_idx_t idx) {
idx = duk_require_normalize_index(thr, idx);
src = duk__prep_codec_arg(thr, idx, &srclen);
- /* Note: for srclen=0, src may be NULL */
+ DUK_ASSERT(src != NULL);
/* Compute exact output length. Computation must not wrap; this
* limit works for 32-bit size_t:
@@ -15299,6 +15340,7 @@ DUK_EXTERNAL void duk_base64_decode(duk_hthread *thr, duk_idx_t idx) {
idx = duk_require_normalize_index(thr, idx);
src = duk__prep_codec_arg(thr, idx, &srclen);
+ DUK_ASSERT(src != NULL);
/* Round up and add safety margin. Avoid addition before division to
* avoid possibility of wrapping. Margin includes +3 for rounding up,
@@ -15358,7 +15400,7 @@ DUK_EXTERNAL const char *duk_hex_encode(duk_hthread *thr, duk_idx_t idx) {
idx = duk_require_normalize_index(thr, idx);
inp = duk__prep_codec_arg(thr, idx, &len);
- DUK_ASSERT(inp != NULL || len == 0);
+ DUK_ASSERT(inp != NULL);
/* Fixed buffer, no zeroing because we'll fill all the data. */
buf = (duk_uint8_t *) duk_push_fixed_buffer_nozero(thr, len * 2);
@@ -15415,7 +15457,7 @@ DUK_EXTERNAL void duk_hex_decode(duk_hthread *thr, duk_idx_t idx) {
idx = duk_require_normalize_index(thr, idx);
inp = duk__prep_codec_arg(thr, idx, &len);
- DUK_ASSERT(inp != NULL || len == 0);
+ DUK_ASSERT(inp != NULL);
if (len & 0x01) {
goto type_error;
@@ -15490,7 +15532,7 @@ DUK_EXTERNAL void duk_hex_decode(duk_hthread *thr, duk_idx_t idx) {
DUK_EXTERNAL const char *duk_hex_encode(duk_hthread *thr, duk_idx_t idx) {
DUK_UNREF(idx);
DUK_ERROR_UNSUPPORTED(thr);
- DUK_WO_NORETURN(return;);
+ DUK_WO_NORETURN(return NULL;);
}
DUK_EXTERNAL void duk_hex_decode(duk_hthread *thr, duk_idx_t idx) {
DUK_UNREF(idx);
@@ -15626,7 +15668,7 @@ DUK_LOCAL duk_ret_t duk__do_compile(duk_hthread *thr, void *udata) {
duk_uint_t flags;
duk_hcompfunc *h_templ;
- DUK_ASSERT_CTX_VALID(thr);
+ DUK_CTX_ASSERT_VALID(thr);
DUK_ASSERT(udata != NULL);
/* Note: strictness is not inherited from the current Duktape/C
@@ -15754,7 +15796,7 @@ DUK_EXTERNAL void duk_push_context_dump(duk_hthread *thr) {
*/
top = duk_get_top(thr);
- duk_push_array(thr);
+ duk_push_bare_array(thr);
for (idx = 0; idx < top; idx++) {
duk_dup(thr, idx);
duk_put_prop_index(thr, -2, (duk_uarridx_t) idx);
@@ -16637,6 +16679,57 @@ DUK_INTERNAL duk_bool_t duk_get_prop_stridx_boolean(duk_hthread *thr, duk_idx_t
return duk_to_boolean_top_pop(thr);
}
+/* This get variant is for internal use, it differs from standard
+ * duk_get_prop() in that:
+ * - Object argument must be an object (primitive values not supported).
+ * - Key argument must be a string (no coercion).
+ * - Only own properties are checked (no inheritance). Only "entry part"
+ * properties are checked (not array index properties).
+ * - Property must be a plain data property, not a getter.
+ * - Proxy traps are not triggered.
+ */
+DUK_INTERNAL duk_bool_t duk_xget_owndataprop(duk_hthread *thr, duk_idx_t obj_idx) {
+ duk_hobject *h_obj;
+ duk_hstring *h_key;
+ duk_tval *tv_val;
+
+ DUK_ASSERT_API_ENTRY(thr);
+
+ /* Note: copying tv_obj and tv_key to locals to shield against a valstack
+ * resize is not necessary for a property get right now.
+ */
+
+ h_obj = duk_get_hobject(thr, obj_idx);
+ if (h_obj == NULL) {
+ return 0;
+ }
+ h_key = duk_require_hstring(thr, -1);
+
+ tv_val = duk_hobject_find_entry_tval_ptr(thr->heap, h_obj, h_key);
+ if (tv_val == NULL) {
+ return 0;
+ }
+
+ duk_push_tval(thr, tv_val);
+ duk_remove_m2(thr); /* remove key */
+
+ return 1;
+}
+
+DUK_INTERNAL duk_bool_t duk_xget_owndataprop_stridx(duk_hthread *thr, duk_idx_t obj_idx, duk_small_uint_t stridx) {
+ DUK_ASSERT_API_ENTRY(thr);
+ DUK_ASSERT_STRIDX_VALID(stridx);
+
+ obj_idx = duk_require_normalize_index(thr, obj_idx);
+ (void) duk_push_hstring(thr, DUK_HTHREAD_GET_STRING(thr, stridx));
+ return duk_xget_owndataprop(thr, obj_idx);
+}
+
+DUK_INTERNAL duk_bool_t duk_xget_owndataprop_stridx_short_raw(duk_hthread *thr, duk_uint_t packed_args) {
+ return duk_xget_owndataprop_stridx(thr, (duk_idx_t) (duk_int16_t) (packed_args >> 16),
+ (duk_small_uint_t) (packed_args & 0xffffUL));
+}
+
DUK_LOCAL duk_bool_t duk__put_prop_shared(duk_hthread *thr, duk_idx_t obj_idx, duk_idx_t idx_key) {
duk_tval *tv_obj;
duk_tval *tv_key;
@@ -17094,9 +17187,6 @@ DUK_EXTERNAL void duk_def_prop(duk_hthread *thr, duk_idx_t obj_idx, duk_uint_t f
/*
* Object related
- *
- * Note: seal() and freeze() are accessible through ECMAScript bindings,
- * and are not exposed through the API.
*/
DUK_EXTERNAL void duk_compact(duk_hthread *thr, duk_idx_t obj_idx) {
@@ -17430,6 +17520,37 @@ DUK_EXTERNAL void duk_set_prototype(duk_hthread *thr, duk_idx_t idx) {
duk_pop(thr);
}
+DUK_INTERNAL void duk_clear_prototype(duk_hthread *thr, duk_idx_t idx) {
+ duk_hobject *obj;
+
+ DUK_ASSERT_API_ENTRY(thr);
+
+ obj = duk_require_hobject(thr, idx);
+ DUK_ASSERT(obj != NULL);
+
+#if defined(DUK_USE_ROM_OBJECTS)
+ if (DUK_HEAPHDR_HAS_READONLY((duk_heaphdr *) obj)) {
+ DUK_ERROR_TYPE(thr, DUK_STR_NOT_CONFIGURABLE); /* XXX: "read only object"? */
+ DUK_WO_NORETURN(return;);
+ }
+#endif
+
+ DUK_HOBJECT_SET_PROTOTYPE_UPDREF(thr, obj, NULL);
+}
+
+DUK_INTERNAL duk_bool_t duk_is_bare_object(duk_hthread *thr, duk_idx_t idx) {
+ duk_hobject *obj;
+ duk_hobject *proto;
+
+ DUK_ASSERT_API_ENTRY(thr);
+
+ obj = duk_require_hobject(thr, idx);
+ DUK_ASSERT(obj != NULL);
+
+ proto = DUK_HOBJECT_GET_PROTOTYPE(thr->heap, obj);
+ return (proto == NULL);
+}
+
/*
* Object finalizer
*/
@@ -17443,6 +17564,10 @@ DUK_EXTERNAL void duk_set_prototype(duk_hthread *thr, duk_idx_t idx) {
DUK_EXTERNAL void duk_get_finalizer(duk_hthread *thr, duk_idx_t idx) {
DUK_ASSERT_API_ENTRY(thr);
+ /* This get intentionally walks the inheritance chain at present,
+ * which matches how the effective finalizer property is also
+ * looked up in GC.
+ */
duk_get_prop_stridx(thr, idx, DUK_STRIDX_INT_FINALIZER);
}
@@ -17454,6 +17579,12 @@ DUK_EXTERNAL void duk_set_finalizer(duk_hthread *thr, duk_idx_t idx) {
h = duk_require_hobject(thr, idx); /* Get before 'put' so that 'idx' is correct. */
callable = duk_is_callable(thr, -1);
+
+ /* At present finalizer is stored as a hidden Symbol, with normal
+ * inheritance and access control. As a result, finalizer cannot
+ * currently be set on a non-extensible (sealed or frozen) object.
+ * It might be useful to allow it.
+ */
duk_put_prop_stridx(thr, idx, DUK_STRIDX_INT_FINALIZER);
/* In addition to setting the finalizer property, keep a "have
@@ -18185,7 +18316,7 @@ DUK_LOCAL DUK_COLD DUK_NOINLINE duk_bool_t duk__resize_valstack(duk_hthread *thr
duk_tval *tv_prev_alloc_end;
duk_tval *p;
- DUK_ASSERT_HTHREAD_VALID(thr);
+ DUK_HTHREAD_ASSERT_VALID(thr);
DUK_ASSERT(thr->valstack_bottom >= thr->valstack);
DUK_ASSERT(thr->valstack_top >= thr->valstack_bottom);
DUK_ASSERT(thr->valstack_end >= thr->valstack_top);
@@ -18859,8 +18990,8 @@ DUK_EXTERNAL void duk_xcopymove_raw(duk_hthread *to_thr, duk_hthread *from_thr,
/* XXX: several pointer comparison issues here */
DUK_ASSERT_API_ENTRY(to_thr);
- DUK_ASSERT_CTX_VALID(to_thr);
- DUK_ASSERT_CTX_VALID(from_thr);
+ DUK_CTX_ASSERT_VALID(to_thr);
+ DUK_CTX_ASSERT_VALID(from_thr);
DUK_ASSERT(to_thr->heap == from_thr->heap);
if (DUK_UNLIKELY(to_thr == from_thr)) {
@@ -18986,7 +19117,7 @@ DUK_LOCAL DUK_ALWAYS_INLINE duk_bool_t duk__get_boolean_raw(duk_hthread *thr, du
duk_bool_t ret;
duk_tval *tv;
- DUK_ASSERT_CTX_VALID(thr);
+ DUK_CTX_ASSERT_VALID(thr);
tv = duk_get_tval_or_unused(thr, idx);
DUK_ASSERT(tv != NULL);
@@ -19044,7 +19175,7 @@ DUK_LOCAL DUK_ALWAYS_INLINE duk_double_t duk__get_number_raw(duk_hthread *thr, d
duk_double_union ret;
duk_tval *tv;
- DUK_ASSERT_CTX_VALID(thr);
+ DUK_CTX_ASSERT_VALID(thr);
tv = duk_get_tval_or_unused(thr, idx);
DUK_ASSERT(tv != NULL);
@@ -19329,7 +19460,7 @@ DUK_LOCAL void *duk__get_pointer_raw(duk_hthread *thr, duk_idx_t idx, void *def_
duk_tval *tv;
void *p;
- DUK_ASSERT_CTX_VALID(thr);
+ DUK_CTX_ASSERT_VALID(thr);
tv = duk_get_tval_or_unused(thr, idx);
DUK_ASSERT(tv != NULL);
@@ -19404,7 +19535,7 @@ DUK_LOCAL void *duk__get_buffer_helper(duk_hthread *thr, duk_idx_t idx, duk_size
duk_size_t len;
duk_tval *tv;
- DUK_ASSERT_CTX_VALID(thr);
+ DUK_CTX_ASSERT_VALID(thr);
if (out_size != NULL) {
*out_size = 0;
@@ -19503,7 +19634,7 @@ DUK_INTERNAL void *duk_get_buffer_data_raw(duk_hthread *thr, duk_idx_t idx, duk_
* duk_hbufobj, get a validated buffer pointer/length.
*/
duk_hbufobj *h_bufobj = (duk_hbufobj *) h;
- DUK_ASSERT_HBUFOBJ_VALID(h_bufobj);
+ DUK_HBUFOBJ_ASSERT_VALID(h_bufobj);
if (h_bufobj->buf != NULL &&
DUK_HBUFOBJ_VALID_SLICE(h_bufobj)) {
@@ -19566,7 +19697,7 @@ DUK_LOCAL duk_heaphdr *duk__get_tagged_heaphdr_raw(duk_hthread *thr, duk_idx_t i
duk_tval *tv;
duk_heaphdr *ret;
- DUK_ASSERT_CTX_VALID(thr);
+ DUK_CTX_ASSERT_VALID(thr);
tv = duk_get_tval_or_unused(thr, idx);
DUK_ASSERT(tv != NULL);
@@ -19801,7 +19932,7 @@ DUK_EXTERNAL void duk_require_function(duk_hthread *thr, duk_idx_t idx) {
}
}
-DUK_INTERNAL void duk_require_constructable(duk_hthread *thr, duk_idx_t idx) {
+DUK_EXTERNAL void duk_require_constructable(duk_hthread *thr, duk_idx_t idx) {
duk_hobject *h;
DUK_ASSERT_API_ENTRY(thr);
@@ -19910,7 +20041,7 @@ DUK_LOCAL duk_hobject *duk__get_hobject_promote_mask_raw(duk_hthread *thr, duk_i
duk_uint_t val_mask;
duk_hobject *res;
- DUK_ASSERT_CTX_VALID(thr);
+ DUK_CTX_ASSERT_VALID(thr);
res = duk_get_hobject(thr, idx); /* common case, not promoted */
if (DUK_LIKELY(res != NULL)) {
@@ -20086,7 +20217,7 @@ DUK_LOCAL duk_heaphdr *duk__known_heaphdr(duk_hthread *thr, duk_idx_t idx) {
duk_tval *tv;
duk_heaphdr *h;
- DUK_ASSERT_CTX_VALID(thr);
+ DUK_CTX_ASSERT_VALID(thr);
if (idx < 0) {
tv = thr->valstack_top + idx;
} else {
@@ -20388,7 +20519,7 @@ DUK_LOCAL duk_double_t duk__to_int_uint_helper(duk_hthread *thr, duk_idx_t idx,
duk_tval *tv;
duk_double_t d;
- DUK_ASSERT_CTX_VALID(thr);
+ DUK_CTX_ASSERT_VALID(thr);
tv = duk_require_tval(thr, idx);
DUK_ASSERT(tv != NULL);
@@ -20526,10 +20657,10 @@ DUK_EXTERNAL const char *duk_to_lstring(duk_hthread *thr, duk_idx_t idx, duk_siz
}
DUK_LOCAL duk_ret_t duk__safe_to_string_raw(duk_hthread *thr, void *udata) {
- DUK_ASSERT_CTX_VALID(thr);
+ DUK_CTX_ASSERT_VALID(thr);
DUK_UNREF(udata);
- duk_to_string(thr, -1);
+ (void) duk_to_string(thr, -1);
return 1;
}
@@ -20566,6 +20697,60 @@ DUK_EXTERNAL const char *duk_safe_to_lstring(duk_hthread *thr, duk_idx_t idx, du
return duk_get_lstring(thr, idx, out_len);
}
+DUK_EXTERNAL const char *duk_to_stacktrace(duk_hthread *thr, duk_idx_t idx) {
+ DUK_ASSERT_API_ENTRY(thr);
+ idx = duk_require_normalize_index(thr, idx);
+
+ /* The expected argument to the call is an Error object. The stack
+ * trace is extracted without an inheritance-based instanceof check
+ * so that one can also extract the stack trace of a foreign error
+ * created in another Realm. Accept only a string .stack property.
+ */
+ if (duk_is_object(thr, idx)) {
+ (void) duk_get_prop_string(thr, idx, "stack");
+ if (duk_is_string(thr, -1)) {
+ duk_replace(thr, idx);
+ } else {
+ duk_pop(thr);
+ }
+ }
+
+ return duk_to_string(thr, idx);
+}
+
+DUK_LOCAL duk_ret_t duk__safe_to_stacktrace_raw(duk_hthread *thr, void *udata) {
+ DUK_CTX_ASSERT_VALID(thr);
+ DUK_UNREF(udata);
+
+ (void) duk_to_stacktrace(thr, -1);
+
+ return 1;
+}
+
+DUK_EXTERNAL const char *duk_safe_to_stacktrace(duk_hthread *thr, duk_idx_t idx) {
+ duk_int_t rc;
+
+ DUK_ASSERT_API_ENTRY(thr);
+ idx = duk_require_normalize_index(thr, idx);
+
+ duk_dup(thr, idx);
+ rc = duk_safe_call(thr, duk__safe_to_stacktrace_raw, NULL /*udata*/, 1 /*nargs*/, 1 /*nrets*/);
+ if (rc != 0) {
+ /* Coercion failed. Try to coerce the coercion itself error
+ * to a stack trace once. If that also fails, return a fixed,
+ * preallocated 'Error' string to avoid potential infinite loop.
+ */
+ rc = duk_safe_call(thr, duk__safe_to_stacktrace_raw, NULL /*udata*/, 1 /*nargs*/, 1 /*nrets*/);
+ if (rc != 0) {
+ duk_pop_unsafe(thr);
+ duk_push_hstring_stridx(thr, DUK_STRIDX_UC_ERROR);
+ }
+ }
+ duk_replace(thr, idx);
+
+ return duk_get_string(thr, idx);
+}
+
DUK_INTERNAL duk_hstring *duk_to_property_key_hstring(duk_hthread *thr, duk_idx_t idx) {
duk_hstring *h;
@@ -22218,7 +22403,7 @@ DUK_EXTERNAL void duk_push_global_object(duk_hthread *thr) {
/* XXX: size optimize */
DUK_LOCAL void duk__push_stash(duk_hthread *thr) {
- if (!duk_get_prop_stridx_short(thr, -1, DUK_STRIDX_INT_VALUE)) {
+ if (!duk_xget_owndataprop_stridx_short(thr, -1, DUK_STRIDX_INT_VALUE)) {
DUK_DDD(DUK_DDDPRINT("creating heap/global/thread stash on first use"));
duk_pop_unsafe(thr);
duk_push_bare_object(thr);
@@ -22257,7 +22442,7 @@ DUK_EXTERNAL void duk_push_thread_stash(duk_hthread *thr, duk_hthread *target_th
DUK_LOCAL duk_int_t duk__try_push_vsprintf(duk_hthread *thr, void *buf, duk_size_t sz, const char *fmt, va_list ap) {
duk_int_t len;
- DUK_ASSERT_CTX_VALID(thr);
+ DUK_CTX_ASSERT_VALID(thr);
DUK_UNREF(thr);
/* NUL terminator handling doesn't matter here */
@@ -22434,6 +22619,33 @@ DUK_EXTERNAL duk_idx_t duk_push_array(duk_hthread *thr) {
return ret;
}
+DUK_EXTERNAL duk_idx_t duk_push_bare_array(duk_hthread *thr) {
+ duk_uint_t flags;
+ duk_harray *obj;
+ duk_idx_t ret;
+ duk_tval *tv_slot;
+
+ DUK_ASSERT_API_ENTRY(thr);
+
+ flags = DUK_HOBJECT_FLAG_EXTENSIBLE |
+ DUK_HOBJECT_FLAG_FASTREFS |
+ DUK_HOBJECT_FLAG_ARRAY_PART |
+ DUK_HOBJECT_FLAG_EXOTIC_ARRAY |
+ DUK_HOBJECT_CLASS_AS_FLAGS(DUK_HOBJECT_CLASS_ARRAY);
+
+ obj = duk_harray_alloc(thr, flags);
+ DUK_ASSERT(obj != NULL);
+
+ tv_slot = thr->valstack_top;
+ DUK_TVAL_SET_OBJECT(tv_slot, (duk_hobject *) obj);
+ DUK_HOBJECT_INCREF(thr, obj); /* XXX: could preallocate with refcount = 1 */
+ ret = (duk_idx_t) (thr->valstack_top - thr->valstack_bottom);
+ thr->valstack_top++;
+
+ DUK_ASSERT(obj->length == 0); /* Array .length starts at zero. */
+ return ret;
+}
+
DUK_INTERNAL duk_harray *duk_push_harray(duk_hthread *thr) {
/* XXX: API call could do this directly, cast to void in API macro. */
duk_harray *a;
@@ -22607,7 +22819,7 @@ DUK_LOCAL duk_idx_t duk__push_c_function_raw(duk_hthread *thr, duk_c_function fu
duk_tval *tv_slot;
duk_int16_t func_nargs;
- DUK_ASSERT_CTX_VALID(thr);
+ DUK_CTX_ASSERT_VALID(thr);
DUK__CHECK_SPACE();
@@ -22752,7 +22964,7 @@ DUK_INTERNAL duk_hbufobj *duk_push_bufobj_raw(duk_hthread *thr, duk_uint_t hobje
DUK_ASSERT(obj != NULL);
DUK_HOBJECT_SET_PROTOTYPE_INIT_INCREF(thr, (duk_hobject *) obj, thr->builtins[prototype_bidx]);
- DUK_ASSERT_HBUFOBJ_VALID(obj);
+ DUK_HBUFOBJ_ASSERT_VALID(obj);
tv_slot = thr->valstack_top;
DUK_TVAL_SET_OBJECT(tv_slot, (duk_hobject *) obj);
@@ -22826,7 +23038,7 @@ DUK_EXTERNAL void duk_push_buffer_object(duk_hthread *thr, duk_idx_t idx_buffer,
DUK_HOBJECT_GET_CLASS_NUMBER(h_arraybuf) == DUK_HOBJECT_CLASS_ARRAYBUFFER /* argument is ArrayBuffer */) {
duk_uint_t tmp_offset;
- DUK_ASSERT_HBUFOBJ_VALID((duk_hbufobj *) h_arraybuf);
+ DUK_HBUFOBJ_ASSERT_VALID((duk_hbufobj *) h_arraybuf);
h_val = ((duk_hbufobj *) h_arraybuf)->buf;
if (DUK_UNLIKELY(h_val == NULL)) {
goto arg_error;
@@ -22875,7 +23087,7 @@ DUK_EXTERNAL void duk_push_buffer_object(duk_hthread *thr, duk_idx_t idx_buffer,
h_bufobj->shift = (tmp >> 4) & 0x0f;
h_bufobj->elem_type = (tmp >> 8) & 0xff;
h_bufobj->is_typedarray = tmp & 0x0f;
- DUK_ASSERT_HBUFOBJ_VALID(h_bufobj);
+ DUK_HBUFOBJ_ASSERT_VALID(h_bufobj);
/* TypedArray views need an automatic ArrayBuffer which must be
* provided as .buffer property of the view. The ArrayBuffer is
@@ -23113,7 +23325,7 @@ DUK_EXTERNAL duk_idx_t duk_push_proxy(duk_hthread *thr, duk_uint_t proxy_flags)
h_proxy->target = h_target;
DUK_ASSERT(h_handler != NULL);
h_proxy->handler = h_handler;
- DUK_ASSERT_HPROXY_VALID(h_proxy);
+ DUK_HPROXY_ASSERT_VALID(h_proxy);
DUK_ASSERT(duk_get_hobject(thr, -2) == h_target);
DUK_ASSERT(duk_get_hobject(thr, -1) == h_handler);
@@ -23267,7 +23479,7 @@ DUK_EXTERNAL duk_idx_t duk_push_heapptr(duk_hthread *thr, void *ptr) {
return ret;
}
- DUK_ASSERT_HEAPHDR_VALID((duk_heaphdr *) ptr);
+ DUK_HEAPHDR_ASSERT_VALID((duk_heaphdr *) ptr);
/* If the argument is on finalize_list it has technically been
* unreachable before duk_push_heapptr() but it's still safe to
@@ -23402,7 +23614,7 @@ DUK_LOCAL DUK_ALWAYS_INLINE void duk__pop_n_unsafe_raw(duk_hthread *thr, duk_idx
duk_tval *tv_end;
#endif
- DUK_ASSERT_CTX_VALID(thr);
+ DUK_CTX_ASSERT_VALID(thr);
DUK_ASSERT(count >= 0);
DUK_ASSERT((duk_size_t) (thr->valstack_top - thr->valstack_bottom) >= (duk_size_t) count);
@@ -23503,7 +23715,7 @@ DUK_INTERNAL void duk_pop_nodecref_unsafe(duk_hthread *thr) {
DUK_LOCAL DUK_ALWAYS_INLINE void duk__pop_unsafe_raw(duk_hthread *thr) {
duk_tval *tv;
- DUK_ASSERT_CTX_VALID(thr);
+ DUK_CTX_ASSERT_VALID(thr);
DUK_ASSERT(thr->valstack_top != thr->valstack_bottom);
DUK_ASSERT(thr->valstack_top >= thr->valstack_bottom);
DUK_ASSERT((duk_size_t) (thr->valstack_top - thr->valstack_bottom) >= (duk_size_t) 1);
@@ -23585,7 +23797,7 @@ DUK_INTERNAL void duk_pop_2_nodecref_unsafe(duk_hthread *thr) {
DUK_LOCAL DUK_ALWAYS_INLINE void duk__pop_2_unsafe_raw(duk_hthread *thr) {
duk_tval *tv;
- DUK_ASSERT_CTX_VALID(thr);
+ DUK_CTX_ASSERT_VALID(thr);
DUK_ASSERT(thr->valstack_top != thr->valstack_bottom);
DUK_ASSERT(thr->valstack_top >= thr->valstack_bottom);
DUK_ASSERT((duk_size_t) (thr->valstack_top - thr->valstack_bottom) >= (duk_size_t) 2);
@@ -23656,6 +23868,7 @@ DUK_INTERNAL void duk_pop_3_nodecref_unsafe(duk_hthread *thr) {
*/
/* XXX: pack index range? array index offset? */
+/* XXX: need ability to pack into a bare array? */
DUK_INTERNAL void duk_pack(duk_hthread *thr, duk_idx_t count) {
duk_tval *tv_src;
duk_tval *tv_dst;
@@ -23684,6 +23897,7 @@ DUK_INTERNAL void duk_pack(duk_hthread *thr, duk_idx_t count) {
tv_dst = duk_push_harray_with_size_outptr(thr, (duk_uint32_t) count); /* XXX: uninitialized would be OK */
DUK_ASSERT(count == 0 || tv_dst != NULL);
+ DUK_ASSERT(!duk_is_bare_object(thr, -1));
/* Copy value stack values directly to the array part without
* any refcount updates: net refcount changes are zero.
@@ -23914,7 +24128,7 @@ DUK_LOCAL void duk__throw_error_from_stash(duk_hthread *thr, duk_errcode_t err_c
const char *filename;
duk_int_t line;
- DUK_ASSERT_CTX_VALID(thr);
+ DUK_CTX_ASSERT_VALID(thr);
filename = duk_api_global_filename;
line = duk_api_global_line;
@@ -24152,7 +24366,7 @@ DUK_LOCAL void duk__push_hstring_readable_unicode(duk_hthread *thr, duk_hstring
duk_ucodepoint_t cp;
duk_small_uint_t nchars;
- DUK_ASSERT_CTX_VALID(thr);
+ DUK_CTX_ASSERT_VALID(thr);
DUK_ASSERT(h_input != NULL);
DUK_ASSERT(maxchars <= DUK__READABLE_SUMMARY_MAXCHARS);
@@ -24196,7 +24410,7 @@ DUK_LOCAL void duk__push_hstring_readable_unicode(duk_hthread *thr, duk_hstring
}
DUK_LOCAL const char *duk__push_string_tval_readable(duk_hthread *thr, duk_tval *tv, duk_bool_t error_aware) {
- DUK_ASSERT_CTX_VALID(thr);
+ DUK_CTX_ASSERT_VALID(thr);
/* 'tv' may be NULL */
if (tv == NULL) {
@@ -24234,7 +24448,7 @@ DUK_LOCAL const char *duk__push_string_tval_readable(duk_hthread *thr, duk_tval
* but traverse inheritance chain.
*/
duk_tval *tv_msg;
- tv_msg = duk_hobject_find_existing_entry_tval_ptr(thr->heap, h, DUK_HTHREAD_STRING_MESSAGE(thr));
+ tv_msg = duk_hobject_find_entry_tval_ptr_stridx(thr->heap, h, DUK_STRIDX_MESSAGE);
if (tv_msg != NULL && DUK_TVAL_IS_STRING(tv_msg)) {
/* It's critical to avoid recursion so
* only summarize a string .message.
@@ -24382,7 +24596,7 @@ DUK_LOCAL void duk__concat_and_join_helper(duk_hthread *thr, duk_idx_t count_in,
duk_hstring *h;
duk_uint8_t *buf;
- DUK_ASSERT_CTX_VALID(thr);
+ DUK_CTX_ASSERT_VALID(thr);
if (DUK_UNLIKELY(count_in <= 0)) {
if (count_in < 0) {
@@ -24919,7 +25133,7 @@ DUK_LOCAL duk_uint32_t duk__push_this_obj_len_u32(duk_hthread *thr) {
/* XXX: push more directly? */
(void) duk_push_this_coercible_to_object(thr);
- DUK_ASSERT_HOBJECT_VALID(duk_get_hobject(thr, -1));
+ DUK_HOBJECT_ASSERT_VALID(duk_get_hobject(thr, -1));
duk_get_prop_stridx_short(thr, -1, DUK_STRIDX_LENGTH);
len = duk_to_uint32(thr, -1);
@@ -25023,6 +25237,7 @@ DUK_INTERNAL duk_ret_t duk_bi_array_constructor(duk_hthread *thr) {
len_prealloc = len < 64 ? len : 64;
a = duk_push_harray_with_size(thr, len_prealloc);
DUK_ASSERT(a != NULL);
+ DUK_ASSERT(!duk_is_bare_object(thr, -1));
a->length = len;
return 1;
}
@@ -26544,7 +26759,7 @@ DUK_INTERNAL duk_ret_t duk_bi_boolean_prototype_tostring_shared(duk_hthread *thr
DUK_ASSERT(h != NULL);
if (DUK_HOBJECT_GET_CLASS_NUMBER(h) == DUK_HOBJECT_CLASS_BOOLEAN) {
- duk_get_prop_stridx_short(thr, -1, DUK_STRIDX_INT_VALUE);
+ duk_xget_owndataprop_stridx_short(thr, -1, DUK_STRIDX_INT_VALUE);
DUK_ASSERT(duk_is_boolean(thr, -1));
goto type_ok;
}
@@ -26704,7 +26919,7 @@ DUK_LOCAL duk_hbufobj *duk__hbufobj_promote_this(duk_hthread *thr) {
duk_push_this(thr);
DUK_ASSERT(duk_is_buffer(thr, -1));
res = (duk_hbufobj *) duk_to_hobject(thr, -1);
- DUK_ASSERT_HBUFOBJ_VALID(res);
+ DUK_HBUFOBJ_ASSERT_VALID(res);
DUK_DD(DUK_DDPRINT("promoted 'this' automatically to an ArrayBuffer: %!iT", duk_get_tval(thr, -1)));
tv_dst = duk_get_borrowed_this_tval(thr);
@@ -26734,7 +26949,7 @@ DUK_LOCAL duk_heaphdr *duk__getrequire_bufobj_this(duk_hthread *thr, duk_small_u
h_this = (duk_hbufobj *) DUK_TVAL_GET_OBJECT(tv);
DUK_ASSERT(h_this != NULL);
if (DUK_HOBJECT_IS_BUFOBJ((duk_hobject *) h_this)) {
- DUK_ASSERT_HBUFOBJ_VALID(h_this);
+ DUK_HBUFOBJ_ASSERT_VALID(h_this);
return (duk_heaphdr *) h_this;
}
} else if (DUK_TVAL_IS_BUFFER(tv)) {
@@ -26748,7 +26963,7 @@ DUK_LOCAL duk_heaphdr *duk__getrequire_bufobj_this(duk_hthread *thr, duk_small_u
/* XXX: make this conditional to a flag if call sites need it? */
h_this = duk__hbufobj_promote_this(thr);
DUK_ASSERT(h_this != NULL);
- DUK_ASSERT_HBUFOBJ_VALID(h_this);
+ DUK_HBUFOBJ_ASSERT_VALID(h_this);
return (duk_heaphdr *) h_this;
} else {
/* XXX: ugly, share return pointer for duk_hbuffer. */
@@ -26789,13 +27004,13 @@ DUK_LOCAL duk_hbufobj *duk__require_bufobj_value(duk_hthread *thr, duk_idx_t idx
h_obj = (duk_hbufobj *) DUK_TVAL_GET_OBJECT(tv);
DUK_ASSERT(h_obj != NULL);
if (DUK_HOBJECT_IS_BUFOBJ((duk_hobject *) h_obj)) {
- DUK_ASSERT_HBUFOBJ_VALID(h_obj);
+ DUK_HBUFOBJ_ASSERT_VALID(h_obj);
return h_obj;
}
} else if (DUK_TVAL_IS_BUFFER(tv)) {
h_obj = (duk_hbufobj *) duk_to_hobject(thr, idx);
DUK_ASSERT(h_obj != NULL);
- DUK_ASSERT_HBUFOBJ_VALID(h_obj);
+ DUK_HBUFOBJ_ASSERT_VALID(h_obj);
return h_obj;
}
@@ -26808,7 +27023,7 @@ DUK_LOCAL void duk__set_bufobj_buffer(duk_hthread *thr, duk_hbufobj *h_bufobj, d
DUK_ASSERT(h_bufobj != NULL);
DUK_ASSERT(h_bufobj->buf == NULL); /* no need to decref */
DUK_ASSERT(h_val != NULL);
- DUK_ASSERT_HBUFOBJ_VALID(h_bufobj);
+ DUK_HBUFOBJ_ASSERT_VALID(h_bufobj);
DUK_UNREF(thr);
h_bufobj->buf = h_val;
@@ -26818,7 +27033,7 @@ DUK_LOCAL void duk__set_bufobj_buffer(duk_hthread *thr, duk_hbufobj *h_bufobj, d
DUK_ASSERT(h_bufobj->elem_type == DUK_HBUFOBJ_ELEM_UINT8);
DUK_ASSERT(h_bufobj->is_typedarray == 0);
- DUK_ASSERT_HBUFOBJ_VALID(h_bufobj);
+ DUK_HBUFOBJ_ASSERT_VALID(h_bufobj);
}
/* Shared offset/length coercion helper. */
@@ -27002,7 +27217,7 @@ DUK_INTERNAL void duk_hbufobj_push_uint8array_from_plain(duk_hthread *thr, duk_h
DUK_ASSERT(h_bufobj != NULL);
duk__set_bufobj_buffer(thr, h_bufobj, h_buf);
h_bufobj->is_typedarray = 1;
- DUK_ASSERT_HBUFOBJ_VALID(h_bufobj);
+ DUK_HBUFOBJ_ASSERT_VALID(h_bufobj);
h_arrbuf = duk_push_bufobj_raw(thr,
DUK_HOBJECT_FLAG_EXTENSIBLE |
@@ -27012,7 +27227,7 @@ DUK_INTERNAL void duk_hbufobj_push_uint8array_from_plain(duk_hthread *thr, duk_h
DUK_ASSERT(h_arrbuf != NULL);
duk__set_bufobj_buffer(thr, h_arrbuf, h_buf);
DUK_ASSERT(h_arrbuf->is_typedarray == 0);
- DUK_ASSERT_HBUFOBJ_VALID(h_arrbuf);
+ DUK_HBUFOBJ_ASSERT_VALID(h_arrbuf);
DUK_ASSERT(h_bufobj->buf_prop == NULL);
h_bufobj->buf_prop = (duk_hobject *) h_arrbuf;
@@ -27231,7 +27446,7 @@ DUK_INTERNAL duk_ret_t duk_bi_arraybuffer_constructor(duk_hthread *thr) {
duk_hbuffer *h_val;
duk_int_t len;
- DUK_ASSERT_CTX_VALID(thr);
+ DUK_CTX_ASSERT_VALID(thr);
duk_require_constructor_call(thr);
@@ -27250,7 +27465,7 @@ DUK_INTERNAL duk_ret_t duk_bi_arraybuffer_constructor(duk_hthread *thr) {
DUK_ASSERT(h_bufobj != NULL);
duk__set_bufobj_buffer(thr, h_bufobj, h_val);
- DUK_ASSERT_HBUFOBJ_VALID(h_bufobj);
+ DUK_HBUFOBJ_ASSERT_VALID(h_bufobj);
return 1;
@@ -27401,7 +27616,7 @@ DUK_INTERNAL duk_ret_t duk_bi_typedarray_constructor(duk_hthread *thr) {
h_bufobj->shift = (duk_uint8_t) shift;
h_bufobj->elem_type = (duk_uint8_t) elem_type;
h_bufobj->is_typedarray = 1;
- DUK_ASSERT_HBUFOBJ_VALID(h_bufobj);
+ DUK_HBUFOBJ_ASSERT_VALID(h_bufobj);
/* Set .buffer to the argument ArrayBuffer. */
DUK_ASSERT(h_bufobj->buf_prop == NULL);
@@ -27416,7 +27631,7 @@ DUK_INTERNAL duk_ret_t duk_bi_typedarray_constructor(duk_hthread *thr) {
*/
h_bufarg = (duk_hbufobj *) h_obj;
- DUK_ASSERT_HBUFOBJ_VALID(h_bufarg);
+ DUK_HBUFOBJ_ASSERT_VALID(h_bufarg);
elem_length_signed = (duk_int_t) (h_bufarg->length >> h_bufarg->shift);
if (h_bufarg->buf == NULL) {
DUK_DCERROR_TYPE_INVALID_ARGS(thr);
@@ -27505,7 +27720,7 @@ DUK_INTERNAL duk_ret_t duk_bi_typedarray_constructor(duk_hthread *thr) {
h_bufobj->shift = (duk_uint8_t) shift;
h_bufobj->elem_type = (duk_uint8_t) elem_type;
h_bufobj->is_typedarray = 1;
- DUK_ASSERT_HBUFOBJ_VALID(h_bufobj);
+ DUK_HBUFOBJ_ASSERT_VALID(h_bufobj);
/* Copy values, the copy method depends on the arguments.
*
@@ -27689,7 +27904,7 @@ DUK_INTERNAL duk_ret_t duk_bi_dataview_constructor(duk_hthread *thr) {
DUK_ASSERT(h_bufarg != NULL);
DUK_HBUFOBJ_INCREF(thr, h_bufarg);
- DUK_ASSERT_HBUFOBJ_VALID(h_bufobj);
+ DUK_HBUFOBJ_ASSERT_VALID(h_bufobj);
return 1;
}
#endif /* DUK_USE_BUFFEROBJECT_SUPPORT */
@@ -27777,7 +27992,7 @@ DUK_INTERNAL duk_ret_t duk_bi_nodejs_buffer_tostring(duk_hthread *thr) {
duk_push_literal(thr, "[object Object]");
return 1;
}
- DUK_ASSERT_HBUFOBJ_VALID(h_this);
+ DUK_HBUFOBJ_ASSERT_VALID(h_this);
/* Ignore encoding for now. */
@@ -27848,6 +28063,7 @@ DUK_INTERNAL duk_ret_t duk_bi_nodejs_buffer_tojson(duk_hthread *thr) {
/* XXX: uninitialized would be OK */
DUK_ASSERT_DISABLE((duk_size_t) h_this->length <= (duk_size_t) DUK_UINT32_MAX);
tv = duk_push_harray_with_size_outptr(thr, (duk_uint32_t) h_this->length); /* XXX: needs revision with >4G buffers */
+ DUK_ASSERT(!duk_is_bare_object(thr, -1));
DUK_ASSERT(h_this->buf != NULL);
buf = DUK_HBUFOBJ_GET_SLICE_BASE(thr->heap, h_this);
@@ -28185,7 +28401,7 @@ DUK_INTERNAL duk_ret_t duk_bi_typedarray_set(duk_hthread *thr) {
h_this = duk__require_bufobj_this(thr);
DUK_ASSERT(h_this != NULL);
- DUK_ASSERT_HBUFOBJ_VALID(h_this);
+ DUK_HBUFOBJ_ASSERT_VALID(h_this);
if (h_this->buf == NULL) {
DUK_DDD(DUK_DDDPRINT("source neutered, skip copy"));
@@ -28240,7 +28456,7 @@ DUK_INTERNAL duk_ret_t duk_bi_typedarray_set(duk_hthread *thr) {
duk_small_uint_t dst_elem_size;
h_bufarg = (duk_hbufobj *) h_obj;
- DUK_ASSERT_HBUFOBJ_VALID(h_bufarg);
+ DUK_HBUFOBJ_ASSERT_VALID(h_bufarg);
if (h_bufarg->buf == NULL) {
DUK_DDD(DUK_DDDPRINT("target neutered, skip copy"));
@@ -28629,7 +28845,7 @@ DUK_INTERNAL duk_ret_t duk_bi_buffer_slice_shared(duk_hthread *thr) {
}
/* unbalanced stack on purpose */
- DUK_ASSERT_HBUFOBJ_VALID(h_bufobj);
+ DUK_HBUFOBJ_ASSERT_VALID(h_bufobj);
return 1;
}
#endif /* DUK_USE_BUFFEROBJECT_SUPPORT */
@@ -28811,7 +29027,7 @@ DUK_INTERNAL duk_ret_t duk_bi_nodejs_buffer_concat(duk_hthread *thr) {
duk__set_bufobj_buffer(thr, h_bufres, h_val);
h_bufres->is_typedarray = 1;
- DUK_ASSERT_HBUFOBJ_VALID(h_bufres);
+ DUK_HBUFOBJ_ASSERT_VALID(h_bufres);
duk_pop(thr); /* pop plain buffer, now reachable through h_bufres */
@@ -29392,7 +29608,7 @@ DUK_LOCAL duk_hbufobj *duk__autospawn_arraybuffer(duk_hthread *thr, duk_hbuffer
DUK_UNREF(h_res);
duk__set_bufobj_buffer(thr, h_res, h_buf);
- DUK_ASSERT_HBUFOBJ_VALID(h_res);
+ DUK_HBUFOBJ_ASSERT_VALID(h_res);
DUK_ASSERT(h_res->buf_prop == NULL);
return h_res;
}
@@ -30418,7 +30634,7 @@ DUK_LOCAL duk_double_t duk__push_this_get_timeval_tzoffset(duk_hthread *thr, duk
DUK_WO_NORETURN(return 0.0;);
}
- duk_get_prop_stridx_short(thr, -1, DUK_STRIDX_INT_VALUE);
+ duk_xget_owndataprop_stridx_short(thr, -1, DUK_STRIDX_INT_VALUE);
d = duk_to_number_m1(thr);
duk_pop(thr);
@@ -30465,9 +30681,13 @@ DUK_LOCAL duk_ret_t duk__set_this_timeval_from_dparts(duk_hthread *thr, duk_doub
d = duk_bi_date_get_timeval_from_dparts(dparts, flags);
duk_push_number(thr, d); /* -> [ ... this timeval_new ] */
duk_dup_top(thr); /* -> [ ... this timeval_new timeval_new ] */
- duk_put_prop_stridx_short(thr, -3, DUK_STRIDX_INT_VALUE);
- /* stack top: new time value, return 1 to allow tail calls */
+ /* Must force write because e.g. .setYear() must work even when
+ * the Date instance is frozen.
+ */
+ duk_xdef_prop_stridx_short(thr, -3, DUK_STRIDX_INT_VALUE, DUK_PROPDESC_FLAGS_W);
+
+ /* Stack top: new time value, return 1 to allow tail calls. */
return 1;
}
@@ -31236,7 +31456,11 @@ DUK_INTERNAL duk_ret_t duk_bi_date_prototype_set_time(duk_hthread *thr) {
d = duk__timeclip(duk_to_number(thr, 0));
duk_push_number(thr, d);
duk_dup_top(thr);
- duk_put_prop_stridx_short(thr, -3, DUK_STRIDX_INT_VALUE); /* -> [ timeval this timeval ] */
+ /* Must force write because .setTime() must work even when
+ * the Date instance is frozen.
+ */
+ duk_xdef_prop_stridx_short(thr, -3, DUK_STRIDX_INT_VALUE, DUK_PROPDESC_FLAGS_W);
+ /* -> [ timeval this timeval ] */
return 1;
}
@@ -31753,7 +31977,6 @@ DUK_INTERNAL duk_int_t duk_bi_date_get_local_tzoffset_windows(duk_double_t d) {
ULARGE_INTEGER tmp2;
ULARGE_INTEGER tmp3;
FILETIME ft1;
- BOOL ret;
/* XXX: handling of timestamps outside Windows supported range.
* How does Windows deal with dates before 1600? Does windows
@@ -31773,8 +31996,7 @@ DUK_INTERNAL duk_int_t duk_bi_date_get_local_tzoffset_windows(duk_double_t d) {
ft1.dwLowDateTime = tmp2.LowPart;
ft1.dwHighDateTime = tmp2.HighPart;
- ret = FileTimeToSystemTime((const FILETIME *) &ft1, &st2);
- if (!ret) {
+ if (FileTimeToSystemTime((const FILETIME *) &ft1, &st2) == 0) {
DUK_D(DUK_DPRINT("FileTimeToSystemTime() failed, return tzoffset 0"));
return 0;
}
@@ -31797,7 +32019,6 @@ DUK_INTERNAL duk_int_t duk_bi_date_get_local_tzoffset_windows_no_dst(duk_double_
FILETIME ft2;
ULARGE_INTEGER tmp1;
ULARGE_INTEGER tmp2;
- BOOL ret;
/* Do a similar computation to duk_bi_date_get_local_tzoffset_windows
* but without accounting for daylight savings time. Use this on
@@ -31813,14 +32034,11 @@ DUK_INTERNAL duk_int_t duk_bi_date_get_local_tzoffset_windows_no_dst(duk_double_
ft1.dwLowDateTime = tmp1.LowPart;
ft1.dwHighDateTime = tmp1.HighPart;
- ret = FileTimeToLocalFileTime((const FILETIME *) &ft1, &ft2);
- if (!ret) {
+ if (FileTimeToLocalFileTime((const FILETIME *) &ft1, &ft2) == 0) {
DUK_D(DUK_DPRINT("FileTimeToLocalFileTime() failed, return tzoffset 0"));
return 0;
}
-
- ret = FileTimeToSystemTime((const FILETIME *) &ft2, &st2);
- if (!ret) {
+ if (FileTimeToSystemTime((const FILETIME *) &ft2, &st2) == 0) {
DUK_D(DUK_DPRINT("FileTimeToSystemTime() failed, return tzoffset 0"));
return 0;
}
@@ -32679,7 +32897,7 @@ DUK_LOCAL duk_ret_t duk__error_getter_helper(duk_hthread *thr, duk_small_int_t o
DUK_ASSERT_TOP(thr, 0); /* fixed arg count */
duk_push_this(thr);
- duk_get_prop_stridx_short(thr, -1, DUK_STRIDX_INT_TRACEDATA);
+ duk_xget_owndataprop_stridx_short(thr, -1, DUK_STRIDX_INT_TRACEDATA);
idx_td = duk_get_top_index(thr);
duk_push_hstring_stridx(thr, DUK_STRIDX_NEWLINE_4SPACE);
@@ -35547,8 +35765,7 @@ DUK_LOCAL void duk__enc_fastint_tval(duk_json_enc_ctx *js_ctx, duk_tval *tv) {
* "long long" type exists. Could also rely on C99 directly but that
* won't work for older MSVC.
*/
- /*DUK_SPRINTF((char *) buf, "%lld", (long long) v);*/
- DUK_SPRINTF((char *) buf, "%"PRIsizet, (size_t) v);
+ DUK_SPRINTF((char *) buf, "%lld", (long long) v);
DUK__EMIT_CSTR(js_ctx, (const char *) buf);
}
#endif
@@ -35780,7 +35997,7 @@ DUK_LOCAL void duk__enc_pointer(duk_json_enc_ctx *js_ctx, void *ptr) {
#if defined(DUK_USE_BUFFEROBJECT_SUPPORT)
#if defined(DUK_USE_JX) || defined(DUK_USE_JC)
DUK_LOCAL void duk__enc_bufobj(duk_json_enc_ctx *js_ctx, duk_hbufobj *h_bufobj) {
- DUK_ASSERT_HBUFOBJ_VALID(h_bufobj);
+ DUK_HBUFOBJ_ASSERT_VALID(h_bufobj);
if (h_bufobj->buf == NULL || !DUK_HBUFOBJ_VALID_SLICE(h_bufobj)) {
DUK__EMIT_STRIDX(js_ctx, DUK_STRIDX_LC_NULL);
@@ -36185,7 +36402,7 @@ DUK_LOCAL duk_bool_t duk__enc_value(duk_json_enc_ctx *js_ctx, duk_idx_t idx_hold
/* With JX/JC a bufferobject gets serialized specially. */
duk_hbufobj *h_bufobj;
h_bufobj = (duk_hbufobj *) h;
- DUK_ASSERT_HBUFOBJ_VALID(h_bufobj);
+ DUK_HBUFOBJ_ASSERT_VALID(h_bufobj);
duk__enc_bufobj(js_ctx, h_bufobj);
goto pop2_emitted;
}
@@ -36216,7 +36433,7 @@ DUK_LOCAL duk_bool_t duk__enc_value(duk_json_enc_ctx *js_ctx, duk_idx_t idx_hold
#endif
case DUK_HOBJECT_CLASS_BOOLEAN: {
DUK_DDD(DUK_DDDPRINT("value is a Boolean/Buffer/Pointer object -> get internal value"));
- duk_get_prop_stridx_short(thr, -1, DUK_STRIDX_INT_VALUE);
+ duk_xget_owndataprop_stridx_short(thr, -1, DUK_STRIDX_INT_VALUE);
duk_remove_m2(thr);
break;
}
@@ -36493,7 +36710,7 @@ DUK_LOCAL duk_bool_t duk__json_stringify_fast_value(duk_json_enc_ctx *js_ctx, du
obj = DUK_TVAL_GET_OBJECT(tv);
DUK_ASSERT(obj != NULL);
- DUK_ASSERT_HOBJECT_VALID(obj);
+ DUK_HOBJECT_ASSERT_VALID(obj);
/* Once recursion depth is increased, exit path must decrease
* it (though it's OK to abort the fast path).
@@ -37941,7 +38158,7 @@ DUK_LOCAL duk_double_t duk__push_this_number_plain(duk_hthread *thr) {
DUK_ERROR_TYPE(thr, "number expected");
DUK_WO_NORETURN(return 0.0;);
}
- duk_get_prop_stridx_short(thr, -1, DUK_STRIDX_INT_VALUE);
+ duk_xget_owndataprop_stridx_short(thr, -1, DUK_STRIDX_INT_VALUE);
DUK_ASSERT(duk_is_number(thr, -1));
DUK_DDD(DUK_DDDPRINT("number object: %!T, internal value: %!T",
(duk_tval *) duk_get_tval(thr, -2), (duk_tval *) duk_get_tval(thr, -1)));
@@ -39058,7 +39275,7 @@ DUK_INTERNAL duk_ret_t duk_bi_pointer_constructor(duk_hthread *thr) {
DUK_HOBJECT_CLASS_AS_FLAGS(DUK_HOBJECT_CLASS_POINTER),
DUK_BIDX_POINTER_PROTOTYPE);
- /* Pointer object internal value is immutable */
+ /* Pointer object internal value is immutable. */
duk_dup_0(thr);
duk_xdef_prop_stridx_short(thr, -2, DUK_STRIDX_INT_VALUE, DUK_PROPDESC_FLAGS_NONE);
}
@@ -39090,7 +39307,7 @@ DUK_INTERNAL duk_ret_t duk_bi_pointer_prototype_tostring_shared(duk_hthread *thr
goto type_error;
}
- duk_get_prop_stridx_short(thr, -1, DUK_STRIDX_INT_VALUE);
+ duk_xget_owndataprop_stridx_short(thr, -1, DUK_STRIDX_INT_VALUE);
} else {
goto type_error;
}
@@ -39162,7 +39379,7 @@ DUK_INTERNAL void duk_proxy_ownkeys_postprocess(duk_hthread *thr, duk_hobject *h
duk_uarridx_t i, len, idx;
duk_propdesc desc;
- DUK_ASSERT_CTX_VALID(thr);
+ DUK_CTX_ASSERT_VALID(thr);
DUK_ASSERT(h_proxy_target != NULL);
len = (duk_uarridx_t) duk_get_length(thr, -1);
@@ -39513,8 +39730,8 @@ DUK_INTERNAL duk_ret_t duk_bi_regexp_prototype_shared_getter(duk_hthread *thr) {
magic = duk_get_current_magic(thr);
if (DUK_HOBJECT_GET_CLASS_NUMBER(h) == DUK_HOBJECT_CLASS_REGEXP) {
- duk_get_prop_stridx_short(thr, 0, DUK_STRIDX_INT_SOURCE);
- duk_get_prop_stridx_short(thr, 0, DUK_STRIDX_INT_BYTECODE);
+ duk_xget_owndataprop_stridx_short(thr, 0, DUK_STRIDX_INT_SOURCE);
+ duk_xget_owndataprop_stridx_short(thr, 0, DUK_STRIDX_INT_BYTECODE);
h_bc = duk_require_hstring(thr, -1);
re_flags = (duk_small_uint_t) DUK_HSTRING_GET_DATA(h_bc)[0]; /* Safe even if h_bc length is 0 (= NUL) */
duk_pop(thr);
@@ -39816,7 +40033,7 @@ DUK_INTERNAL duk_ret_t duk_bi_string_prototype_to_string(duk_hthread *thr) {
goto type_error;
}
- duk_get_prop_stridx_short(thr, -1, DUK_STRIDX_INT_VALUE);
+ duk_xget_owndataprop_stridx_short(thr, -1, DUK_STRIDX_INT_VALUE);
DUK_ASSERT(duk_is_string(thr, -1));
} else {
goto type_error;
@@ -41223,7 +41440,6 @@ DUK_INTERNAL duk_ret_t duk_bi_symbol_constructor_shared(duk_hthread *thr) {
DUK_LOCAL duk_hstring *duk__auto_unbox_symbol(duk_hthread *thr, duk_tval *tv_arg) {
duk_tval *tv;
- duk_tval tv_val;
duk_hobject *h_obj;
duk_hstring *h_str;
@@ -41237,10 +41453,10 @@ DUK_LOCAL duk_hstring *duk__auto_unbox_symbol(duk_hthread *thr, duk_tval *tv_arg
h_obj = DUK_TVAL_GET_OBJECT(tv);
DUK_ASSERT(h_obj != NULL);
if (DUK_HOBJECT_GET_CLASS_NUMBER(h_obj) == DUK_HOBJECT_CLASS_SYMBOL) {
- if (!duk_hobject_get_internal_value(thr->heap, h_obj, &tv_val)) {
+ tv = duk_hobject_get_internal_value_tval_ptr(thr->heap, h_obj);
+ if (tv == NULL) {
return NULL;
}
- tv = &tv_val;
} else {
return NULL;
}
@@ -41456,6 +41672,18 @@ DUK_INTERNAL duk_ret_t duk_bi_thread_resume(duk_hthread *ctx) {
duk_pop(thr);
}
+#if 0
+ /* This check would prevent a heap destruction time finalizer from
+ * launching a coroutine, which would ensure that during finalization
+ * 'thr' would always equal heap_thread. Normal runtime finalizers
+ * run with ms_running == 0, i.e. outside mark-and-sweep. See GH-2030.
+ */
+ if (thr->heap->ms_running) {
+ DUK_D(DUK_DPRINT("refuse Duktape.Thread.resume() when ms_running != 0"));
+ goto state_error;
+ }
+#endif
+
/*
* The error object has been augmented with a traceback and other
* info from its creation point -- usually another thread. The
@@ -41724,7 +41952,9 @@ DUK_INTERNAL duk_bool_t duk_fb_is_full(duk_fixedbuffer *fb) {
* %!T tagged value (duk_tval *)
* %!O heap object (duk_heaphdr *)
* %!I decoded bytecode instruction
- * %!C bytecode instruction opcode name (arg is long)
+ * %!X bytecode instruction opcode name (arg is long)
+ * %!C catcher (duk_catcher *)
+ * %!A activation (duk_activation *)
*
* Everything is serialized in a JSON-like manner. The default depth is one
* level, internal prototype is not followed, and internal properties are not
@@ -42528,6 +42758,47 @@ DUK_LOCAL void duk__print_opcode(duk__dprint_state *st, duk_small_int_t opcode)
}
}
+DUK_LOCAL void duk__print_catcher(duk__dprint_state *st, duk_catcher *cat) {
+ duk_fixedbuffer *fb = st->fb;
+
+ if (duk_fb_is_full(fb)) {
+ return;
+ }
+
+ if (!cat) {
+ duk_fb_put_cstring(fb, "NULL");
+ return;
+ }
+
+ duk_fb_sprintf(fb, "[catcher ptr=%p parent=%p varname=%p pc_base=%p, idx_base=%ld, flags=0x%08lx]",
+ (void *) cat,
+ (void *) cat->parent, (void *) cat->h_varname, (void *) cat->pc_base,
+ (long) cat->idx_base, (unsigned long) cat->flags);
+}
+
+
+DUK_LOCAL void duk__print_activation(duk__dprint_state *st, duk_activation *act) {
+ duk_fixedbuffer *fb = st->fb;
+
+ if (duk_fb_is_full(fb)) {
+ return;
+ }
+
+ if (!act) {
+ duk_fb_put_cstring(fb, "NULL");
+ return;
+ }
+
+ /* prev_caller: conditional, omitted on purpose, it's rarely used. */
+ /* prev_line: conditional, omitted on purpose (but would be nice). */
+ duk_fb_sprintf(fb, "[activation ptr=%p tv_func=<omit> func=%p parent=%p var_env=%p lex_env=%p cat=%p curr_pc=%p bottom_byteoff=%ld retval_byteoff=%ld reserve_byteoff=%ld flags=%ld]",
+ (void *) act,
+ (void *) act->func, (void *) act->parent, (void *) act->var_env,
+ (void *) act->lex_env, (void *) act->cat, (void *) act->curr_pc,
+ (long) act->bottom_byteoff, (long) act->retval_byteoff, (long) act->reserve_byteoff,
+ (long) act->flags);
+}
+
DUK_INTERNAL duk_int_t duk_debug_vsnprintf(char *str, duk_size_t size, const char *format, va_list ap) {
duk_fixedbuffer fb;
const char *p = format;
@@ -42612,10 +42883,18 @@ DUK_INTERNAL duk_int_t duk_debug_vsnprintf(char *str, duk_size_t size, const cha
duk_instr_t t = va_arg(ap, duk_instr_t);
duk__print_instr(&st, t);
break;
- } else if (got_exclamation && ch == DUK_ASC_UC_C) {
+ } else if (got_exclamation && ch == DUK_ASC_UC_X) {
long t = va_arg(ap, long);
duk__print_opcode(&st, (duk_small_int_t) t);
break;
+ } else if (got_exclamation && ch == DUK_ASC_UC_C) {
+ duk_catcher *t = va_arg(ap, duk_catcher *);
+ duk__print_catcher(&st, t);
+ break;
+ } else if (got_exclamation && ch == DUK_ASC_UC_A) {
+ duk_activation *t = va_arg(ap, duk_activation *);
+ duk__print_activation(&st, t);
+ break;
} else if (!got_exclamation && strchr(DUK__ALLOWED_STANDARD_SPECIFIERS, (int) ch)) {
char fmtbuf[DUK__MAX_FORMAT_TAG_LENGTH];
duk_size_t fmtlen;
@@ -44277,18 +44556,25 @@ DUK_LOCAL void duk__debug_handle_get_locals(duk_hthread *thr, duk_heap *heap) {
* - If side effects are possible, add error catching
*/
- duk_push_tval(thr, &act->tv_func);
- duk_get_prop_stridx_short(thr, -1, DUK_STRIDX_INT_VARMAP);
- if (duk_is_object(thr, -1)) {
- duk_enum(thr, -1, 0 /*enum_flags*/);
- while (duk_next(thr, -1 /*enum_index*/, 0 /*get_value*/)) {
- varname = duk_known_hstring(thr, -1);
-
- duk_js_getvar_activation(thr, act, varname, 0 /*throw_flag*/);
- /* [ ... func varmap enum key value this ] */
- duk_debug_write_hstring(thr, duk_get_hstring(thr, -3));
- duk_debug_write_tval(thr, duk_get_tval(thr, -2));
- duk_pop_3(thr); /* -> [ ... func varmap enum ] */
+ if (DUK_TVAL_IS_OBJECT(&act->tv_func)) {
+ duk_hobject *h_func = DUK_TVAL_GET_OBJECT(&act->tv_func);
+ duk_hobject *h_varmap;
+
+ h_varmap = duk_hobject_get_varmap(thr, h_func);
+ if (h_varmap != NULL) {
+ duk_push_hobject(thr, h_varmap);
+ duk_enum(thr, -1, 0 /*enum_flags*/);
+ while (duk_next(thr, -1 /*enum_index*/, 0 /*get_value*/)) {
+ varname = duk_known_hstring(thr, -1);
+
+ duk_js_getvar_activation(thr, act, varname, 0 /*throw_flag*/);
+ /* [ ... func varmap enum key value this ] */
+ duk_debug_write_hstring(thr, duk_get_hstring(thr, -3));
+ duk_debug_write_tval(thr, duk_get_tval(thr, -2));
+ duk_pop_3(thr); /* -> [ ... func varmap enum ] */
+ }
+ } else {
+ DUK_D(DUK_DPRINT("varmap missing in GetLocals, ignore"));
}
} else {
DUK_D(DUK_DPRINT("varmap is not an object in GetLocals, ignore"));
@@ -45629,7 +45915,7 @@ DUK_INTERNAL void duk_debug_set_paused(duk_heap *heap) {
heap->dbg_state_dirty = 1;
duk_debug_clear_pause_state(heap);
DUK_ASSERT(heap->ms_running == 0); /* debugger can't be triggered within mark-and-sweep */
- heap->ms_running = 1; /* prevent mark-and-sweep, prevent refzero queueing */
+ heap->ms_running = 2; /* prevent mark-and-sweep, prevent refzero queueing */
heap->ms_prevent_count++;
DUK_ASSERT(heap->ms_prevent_count != 0); /* Wrap. */
DUK_ASSERT(heap->heap_thread != NULL);
@@ -45641,7 +45927,7 @@ DUK_INTERNAL void duk_debug_clear_paused(duk_heap *heap) {
DUK_HEAP_CLEAR_DEBUGGER_PAUSED(heap);
heap->dbg_state_dirty = 1;
duk_debug_clear_pause_state(heap);
- DUK_ASSERT(heap->ms_running == 1);
+ DUK_ASSERT(heap->ms_running == 2);
DUK_ASSERT(heap->ms_prevent_count > 0);
heap->ms_prevent_count--;
heap->ms_running = 0;
@@ -45762,9 +46048,9 @@ DUK_LOCAL void duk__err_augment_user(duk_hthread *thr, duk_small_uint_t stridx_c
DUK_DD(DUK_DDPRINT("error occurred when DUK_BIDX_DUKTAPE is NULL, ignoring"));
return;
}
- tv_hnd = duk_hobject_find_existing_entry_tval_ptr(thr->heap,
- thr->builtins[DUK_BIDX_DUKTAPE],
- DUK_HTHREAD_GET_STRING(thr, stridx_cb));
+ tv_hnd = duk_hobject_find_entry_tval_ptr_stridx(thr->heap,
+ thr->builtins[DUK_BIDX_DUKTAPE],
+ stridx_cb);
if (tv_hnd == NULL) {
DUK_DD(DUK_DDPRINT("error handler does not exist or is not a plain value: %!T",
(duk_tval *) tv_hnd));
@@ -45863,9 +46149,13 @@ DUK_LOCAL void duk__add_traceback(duk_hthread *thr, duk_hthread *thr_callstack,
arr_size += 2;
}
- /* XXX: uninitialized would be OK */
+ /* XXX: Uninitialized would be OK. Maybe add internal primitive to
+ * push bare duk_harray with size?
+ */
DUK_D(DUK_DPRINT("preallocated _Tracedata to %ld items", (long) arr_size));
tv = duk_push_harray_with_size_outptr(thr, (duk_uint32_t) arr_size);
+ duk_clear_prototype(thr, -1);
+ DUK_ASSERT(duk_is_bare_object(thr, -1));
DUK_ASSERT(arr_size == 0 || tv != NULL);
/* Compiler SyntaxErrors (and other errors) come first, and are
@@ -45942,6 +46232,7 @@ DUK_LOCAL void duk__add_traceback(duk_hthread *thr, duk_hthread *thr_callstack,
DUK_ASSERT(a != NULL);
DUK_ASSERT((duk_uint32_t) (tv - DUK_HOBJECT_A_GET_BASE(thr->heap, (duk_hobject *) a)) == a->length);
DUK_ASSERT(a->length == (duk_uint32_t) arr_size);
+ DUK_ASSERT(duk_is_bare_object(thr, -1));
}
#endif
@@ -46132,9 +46423,9 @@ DUK_LOCAL void duk__err_augment_builtin_create(duk_hthread *thr, duk_hthread *th
#if defined(DUK_USE_TRACEBACKS)
/* If tracebacks are enabled, the '_Tracedata' property is the only
* thing we need: 'fileName' and 'lineNumber' are virtual properties
- * which use '_Tracedata'.
+ * which use '_Tracedata'. (Check _Tracedata only as own property.)
*/
- if (duk_hobject_hasprop_raw(thr, obj, DUK_HTHREAD_STRING_INT_TRACEDATA(thr))) {
+ if (duk_hobject_find_entry_tval_ptr_stridx(thr->heap, obj, DUK_STRIDX_INT_TRACEDATA) != NULL) {
DUK_DDD(DUK_DDDPRINT("error value already has a '_Tracedata' property, not modifying it"));
} else {
duk__add_traceback(thr, thr_callstack, c_filename, c_line, flags);
@@ -46801,6 +47092,19 @@ DUK_INTERNAL void *duk_hbuffer_get_dynalloc_ptr(duk_heap *heap, void *ud) {
return (void *) DUK_HBUFFER_DYNAMIC_GET_DATA_PTR(heap, buf);
}
/*
+ * duk_hbuffer assertion helpers
+ */
+
+/* #include duk_internal.h -> already included */
+
+#if defined(DUK_USE_ASSERTIONS)
+
+DUK_INTERNAL void duk_hbuffer_assert_valid(duk_hbuffer *h) {
+ DUK_ASSERT(h != NULL);
+}
+
+#endif /* DUK_USE_ASSERTIONS */
+/*
* duk_hbuffer operations such as resizing and inserting/appending data to
* a dynamic buffer.
*/
@@ -47156,15 +47460,19 @@ DUK_LOCAL void duk__free_run_finalizers(duk_heap *heap) {
}
/* Prevent finalize_list processing and mark-and-sweep entirely.
- * Setting ms_running = 1 also prevents refzero handling from moving
- * objects away from the heap_allocated list (the flag name is a bit
- * misleading here).
+ * Setting ms_running != 0 also prevents refzero handling from moving
+ * objects away from the heap_allocated list. The flag name is a bit
+ * misleading here.
+ *
+ * Use a distinct value for ms_running here (== 2) so that assertions
+ * can detect this situation separate from the normal runtime
+ * mark-and-sweep case. This allows better assertions (GH-2030).
*/
DUK_ASSERT(heap->pf_prevent_count == 0);
- heap->pf_prevent_count = 1;
DUK_ASSERT(heap->ms_running == 0);
- heap->ms_running = 1;
DUK_ASSERT(heap->ms_prevent_count == 0);
+ heap->pf_prevent_count = 1;
+ heap->ms_running = 2; /* Use distinguishable value. */
heap->ms_prevent_count = 1; /* Bump, because mark-and-sweep assumes it's bumped when ms_running is set. */
curr_limit = 0; /* suppress warning, not used */
@@ -47225,9 +47533,9 @@ DUK_LOCAL void duk__free_run_finalizers(duk_heap *heap) {
}
}
- DUK_ASSERT(heap->ms_running == 1);
- heap->ms_running = 0;
+ DUK_ASSERT(heap->ms_running == 2);
DUK_ASSERT(heap->pf_prevent_count == 1);
+ heap->ms_running = 0;
heap->pf_prevent_count = 0;
}
#endif /* DUK_USE_FINALIZER_SUPPORT */
@@ -48706,6 +49014,7 @@ DUK_LOCAL void duk__mark_hstring(duk_heap *heap, duk_hstring *h) {
DUK_DDD(DUK_DDDPRINT("duk__mark_hstring: %p", (void *) h));
DUK_ASSERT(h);
+ DUK_HSTRING_ASSERT_VALID(h);
/* nothing to process */
}
@@ -48716,6 +49025,7 @@ DUK_LOCAL void duk__mark_hobject(duk_heap *heap, duk_hobject *h) {
DUK_DDD(DUK_DDDPRINT("duk__mark_hobject: %p", (void *) h));
DUK_ASSERT(h);
+ DUK_HOBJECT_ASSERT_VALID(h);
/* XXX: use advancing pointers instead of index macros -> faster and smaller? */
@@ -48756,7 +49066,7 @@ DUK_LOCAL void duk__mark_hobject(duk_heap *heap, duk_hobject *h) {
duk_tval *tv, *tv_end;
duk_hobject **fn, **fn_end;
- DUK_ASSERT_HCOMPFUNC_VALID(f);
+ DUK_HCOMPFUNC_ASSERT_VALID(f);
/* 'data' is reachable through every compiled function which
* contains a reference.
@@ -48786,30 +49096,30 @@ DUK_LOCAL void duk__mark_hobject(duk_heap *heap, duk_hobject *h) {
}
} else if (DUK_HOBJECT_IS_DECENV(h)) {
duk_hdecenv *e = (duk_hdecenv *) h;
- DUK_ASSERT_HDECENV_VALID(e);
+ DUK_HDECENV_ASSERT_VALID(e);
duk__mark_heaphdr(heap, (duk_heaphdr *) e->thread);
duk__mark_heaphdr(heap, (duk_heaphdr *) e->varmap);
} else if (DUK_HOBJECT_IS_OBJENV(h)) {
duk_hobjenv *e = (duk_hobjenv *) h;
- DUK_ASSERT_HOBJENV_VALID(e);
+ DUK_HOBJENV_ASSERT_VALID(e);
duk__mark_heaphdr_nonnull(heap, (duk_heaphdr *) e->target);
#if defined(DUK_USE_BUFFEROBJECT_SUPPORT)
} else if (DUK_HOBJECT_IS_BUFOBJ(h)) {
duk_hbufobj *b = (duk_hbufobj *) h;
- DUK_ASSERT_HBUFOBJ_VALID(b);
+ DUK_HBUFOBJ_ASSERT_VALID(b);
duk__mark_heaphdr(heap, (duk_heaphdr *) b->buf);
duk__mark_heaphdr(heap, (duk_heaphdr *) b->buf_prop);
#endif /* DUK_USE_BUFFEROBJECT_SUPPORT */
} else if (DUK_HOBJECT_IS_BOUNDFUNC(h)) {
duk_hboundfunc *f = (duk_hboundfunc *) (void *) h;
- DUK_ASSERT_HBOUNDFUNC_VALID(f);
+ DUK_HBOUNDFUNC_ASSERT_VALID(f);
duk__mark_tval(heap, &f->target);
duk__mark_tval(heap, &f->this_binding);
duk__mark_tvals(heap, f->args, f->nargs);
#if defined(DUK_USE_ES6_PROXY)
} else if (DUK_HOBJECT_IS_PROXY(h)) {
duk_hproxy *p = (duk_hproxy *) h;
- DUK_ASSERT_HPROXY_VALID(p);
+ DUK_HPROXY_ASSERT_VALID(p);
duk__mark_heaphdr_nonnull(heap, (duk_heaphdr *) p->target);
duk__mark_heaphdr_nonnull(heap, (duk_heaphdr *) p->handler);
#endif /* DUK_USE_ES6_PROXY */
@@ -48818,7 +49128,7 @@ DUK_LOCAL void duk__mark_hobject(duk_heap *heap, duk_hobject *h) {
duk_activation *act;
duk_tval *tv;
- DUK_ASSERT_HTHREAD_VALID(t);
+ DUK_HTHREAD_ASSERT_VALID(t);
tv = t->valstack;
while (tv < t->valstack_top) {
@@ -48865,6 +49175,7 @@ DUK_LOCAL void duk__mark_heaphdr(duk_heap *heap, duk_heaphdr *h) {
return;
}
+ DUK_HEAPHDR_ASSERT_VALID(h);
DUK_ASSERT(!DUK_HEAPHDR_HAS_READONLY(h) || DUK_HEAPHDR_HAS_REACHABLE(h));
#if defined(DUK_USE_ASSERTIONS) && defined(DUK_USE_REFERENCE_COUNTING)
@@ -48919,6 +49230,7 @@ DUK_LOCAL void duk__mark_tval(duk_heap *heap, duk_tval *tv) {
if (tv == NULL) {
return;
}
+ DUK_TVAL_ASSERT_VALID(tv);
if (DUK_TVAL_IS_HEAP_ALLOCATED(tv)) {
duk_heaphdr *h;
h = DUK_TVAL_GET_HEAPHDR(tv);
@@ -48931,6 +49243,7 @@ DUK_LOCAL void duk__mark_tvals(duk_heap *heap, duk_tval *tv, duk_idx_t count) {
DUK_ASSERT(count == 0 || tv != NULL);
while (count-- > 0) {
+ DUK_TVAL_ASSERT_VALID(tv);
if (DUK_TVAL_IS_HEAP_ALLOCATED(tv)) {
duk_heaphdr *h;
h = DUK_TVAL_GET_HEAPHDR(tv);
@@ -49422,8 +49735,8 @@ DUK_LOCAL void duk__sweep_heap(duk_heap *heap, duk_small_uint_t flags, duk_size_
#if defined(DUK_USE_DOUBLE_LINKED_HEAP)
DUK_HEAPHDR_SET_PREV(heap, curr, prev);
#endif
- DUK_ASSERT_HEAPHDR_LINKS(heap, prev);
- DUK_ASSERT_HEAPHDR_LINKS(heap, curr);
+ DUK_HEAPHDR_ASSERT_LINKS(heap, prev);
+ DUK_HEAPHDR_ASSERT_LINKS(heap, curr);
prev = curr;
}
@@ -49498,7 +49811,7 @@ DUK_LOCAL void duk__sweep_heap(duk_heap *heap, duk_small_uint_t flags, duk_size_
if (prev != NULL) {
DUK_HEAPHDR_SET_NEXT(heap, prev, NULL);
}
- DUK_ASSERT_HEAPHDR_LINKS(heap, prev);
+ DUK_HEAPHDR_ASSERT_LINKS(heap, prev);
#if defined(DUK_USE_DEBUG)
DUK_D(DUK_DPRINT("mark-and-sweep sweep objects (non-string): %ld freed, %ld kept, %ld rescued, %ld queued for finalization",
@@ -49633,67 +49946,19 @@ DUK_LOCAL void duk__compact_objects(duk_heap *heap) {
*/
#if defined(DUK_USE_ASSERTIONS)
-DUK_LOCAL void duk__assert_heaphdr_flags(duk_heap *heap) {
- duk_heaphdr *hdr;
-
- hdr = heap->heap_allocated;
- while (hdr) {
- DUK_ASSERT(!DUK_HEAPHDR_HAS_REACHABLE(hdr));
- DUK_ASSERT(!DUK_HEAPHDR_HAS_TEMPROOT(hdr));
- DUK_ASSERT(!DUK_HEAPHDR_HAS_FINALIZABLE(hdr));
- /* may have FINALIZED */
- hdr = DUK_HEAPHDR_GET_NEXT(heap, hdr);
- }
-
-#if defined(DUK_USE_REFERENCE_COUNTING)
- DUK_ASSERT(heap->refzero_list == NULL); /* Always handled to completion inline in DECREF. */
-#endif
-}
+typedef void (*duk__gc_heaphdr_assert)(duk_heap *heap, duk_heaphdr *h);
+typedef void (*duk__gc_hstring_assert)(duk_heap *heap, duk_hstring *h);
-#if defined(DUK_USE_REFERENCE_COUNTING)
-DUK_LOCAL void duk__assert_valid_refcounts(duk_heap *heap) {
- duk_heaphdr *hdr = heap->heap_allocated;
- while (hdr) {
- /* Cannot really assert much w.r.t. refcounts now. */
-
- if (DUK_HEAPHDR_GET_REFCOUNT(hdr) == 0 &&
- DUK_HEAPHDR_HAS_FINALIZED(hdr)) {
- /* An object may be in heap_allocated list with a zero
- * refcount if it has just been finalized and is waiting
- * to be collected by the next cycle.
- * (This doesn't currently happen however.)
- */
- } else if (DUK_HEAPHDR_GET_REFCOUNT(hdr) == 0) {
- /* An object may be in heap_allocated list with a zero
- * refcount also if it is a temporary object created
- * during debugger paused state. It will get collected
- * by mark-and-sweep based on its reachability status
- * (presumably not reachable because refcount is 0).
- */
- }
- DUK_ASSERT_DISABLE(DUK_HEAPHDR_GET_REFCOUNT(hdr) >= 0); /* Unsigned. */
- hdr = DUK_HEAPHDR_GET_NEXT(heap, hdr);
+DUK_LOCAL void duk__assert_walk_list(duk_heap *heap, duk_heaphdr *start, duk__gc_heaphdr_assert func) {
+ duk_heaphdr *curr;
+ for (curr = start; curr != NULL; curr = DUK_HEAPHDR_GET_NEXT(heap, curr)) {
+ func(heap, curr);
}
}
-DUK_LOCAL void duk__clear_assert_refcounts(duk_heap *heap) {
- duk_heaphdr *curr;
+DUK_LOCAL void duk__assert_walk_strtable(duk_heap *heap, duk__gc_hstring_assert func) {
duk_uint32_t i;
- for (curr = heap->heap_allocated; curr != NULL; curr = DUK_HEAPHDR_GET_NEXT(heap, curr)) {
- curr->h_assert_refcount = 0;
- }
-#if defined(DUK_USE_FINALIZER_SUPPORT)
- for (curr = heap->finalize_list; curr != NULL; curr = DUK_HEAPHDR_GET_NEXT(heap, curr)) {
- curr->h_assert_refcount = 0;
- }
-#endif
-#if defined(DUK_USE_REFERENCE_COUNTING)
- for (curr = heap->refzero_list; curr != NULL; curr = DUK_HEAPHDR_GET_NEXT(heap, curr)) {
- curr->h_assert_refcount = 0;
- }
-#endif
-
for (i = 0; i < heap->st_size; i++) {
duk_hstring *h;
@@ -49703,12 +49968,93 @@ DUK_LOCAL void duk__clear_assert_refcounts(duk_heap *heap) {
h = heap->strtable[i];
#endif
while (h != NULL) {
- ((duk_heaphdr *) h)->h_assert_refcount = 0;
+ func(heap, h);
h = h->hdr.h_next;
}
}
}
+DUK_LOCAL void duk__assert_heaphdr_flags_cb(duk_heap *heap, duk_heaphdr *h) {
+ DUK_UNREF(heap);
+ DUK_ASSERT(!DUK_HEAPHDR_HAS_REACHABLE(h));
+ DUK_ASSERT(!DUK_HEAPHDR_HAS_TEMPROOT(h));
+ DUK_ASSERT(!DUK_HEAPHDR_HAS_FINALIZABLE(h));
+ /* may have FINALIZED */
+}
+DUK_LOCAL void duk__assert_heaphdr_flags(duk_heap *heap) {
+ duk__assert_walk_list(heap, heap->heap_allocated, duk__assert_heaphdr_flags_cb);
+#if defined(DUK_USE_REFERENCE_COUNTING)
+ DUK_ASSERT(heap->refzero_list == NULL); /* Always handled to completion inline in DECREF. */
+#endif
+ /* XXX: Assertions for finalize_list? */
+}
+
+DUK_LOCAL void duk__assert_validity_cb1(duk_heap *heap, duk_heaphdr *h) {
+ DUK_UNREF(heap);
+ DUK_ASSERT(DUK_HEAPHDR_IS_OBJECT(h) || DUK_HEAPHDR_IS_BUFFER(h));
+ duk_heaphdr_assert_valid_subclassed(h);
+}
+DUK_LOCAL void duk__assert_validity_cb2(duk_heap *heap, duk_hstring *h) {
+ DUK_UNREF(heap);
+ DUK_ASSERT(DUK_HEAPHDR_IS_STRING((duk_heaphdr *) h));
+ duk_heaphdr_assert_valid_subclassed((duk_heaphdr *) h);
+}
+DUK_LOCAL void duk__assert_validity(duk_heap *heap) {
+ duk__assert_walk_list(heap, heap->heap_allocated, duk__assert_validity_cb1);
+#if defined(DUK_USE_FINALIZER_SUPPORT)
+ duk__assert_walk_list(heap, heap->finalize_list, duk__assert_validity_cb1);
+#endif
+#if defined(DUK_USE_REFERENCE_COUNTING)
+ duk__assert_walk_list(heap, heap->refzero_list, duk__assert_validity_cb1);
+#endif
+ duk__assert_walk_strtable(heap, duk__assert_validity_cb2);
+}
+
+#if defined(DUK_USE_REFERENCE_COUNTING)
+DUK_LOCAL void duk__assert_valid_refcounts_cb(duk_heap *heap, duk_heaphdr *h) {
+ /* Cannot really assert much w.r.t. refcounts now. */
+
+ DUK_UNREF(heap);
+ if (DUK_HEAPHDR_GET_REFCOUNT(h) == 0 &&
+ DUK_HEAPHDR_HAS_FINALIZED(h)) {
+ /* An object may be in heap_allocated list with a zero
+ * refcount if it has just been finalized and is waiting
+ * to be collected by the next cycle.
+ * (This doesn't currently happen however.)
+ */
+ } else if (DUK_HEAPHDR_GET_REFCOUNT(h) == 0) {
+ /* An object may be in heap_allocated list with a zero
+ * refcount also if it is a temporary object created
+ * during debugger paused state. It will get collected
+ * by mark-and-sweep based on its reachability status
+ * (presumably not reachable because refcount is 0).
+ */
+ }
+ DUK_ASSERT_DISABLE(DUK_HEAPHDR_GET_REFCOUNT(h) >= 0); /* Unsigned. */
+}
+DUK_LOCAL void duk__assert_valid_refcounts(duk_heap *heap) {
+ duk__assert_walk_list(heap, heap->heap_allocated, duk__assert_valid_refcounts_cb);
+}
+
+DUK_LOCAL void duk__clear_assert_refcounts_cb1(duk_heap *heap, duk_heaphdr *h) {
+ DUK_UNREF(heap);
+ h->h_assert_refcount = 0;
+}
+DUK_LOCAL void duk__clear_assert_refcounts_cb2(duk_heap *heap, duk_hstring *h) {
+ DUK_UNREF(heap);
+ ((duk_heaphdr *) h)->h_assert_refcount = 0;
+}
+DUK_LOCAL void duk__clear_assert_refcounts(duk_heap *heap) {
+ duk__assert_walk_list(heap, heap->heap_allocated, duk__clear_assert_refcounts_cb1);
+#if defined(DUK_USE_FINALIZER_SUPPORT)
+ duk__assert_walk_list(heap, heap->finalize_list, duk__clear_assert_refcounts_cb1);
+#endif
+#if defined(DUK_USE_REFERENCE_COUNTING)
+ duk__assert_walk_list(heap, heap->refzero_list, duk__clear_assert_refcounts_cb1);
+#endif
+ duk__assert_walk_strtable(heap, duk__clear_assert_refcounts_cb2);
+}
+
DUK_LOCAL void duk__check_refcount_heaphdr(duk_heaphdr *hdr) {
duk_bool_t count_ok;
duk_size_t expect_refc;
@@ -49741,32 +50087,21 @@ DUK_LOCAL void duk__check_refcount_heaphdr(duk_heaphdr *hdr) {
}
}
+DUK_LOCAL void duk__check_assert_refcounts_cb1(duk_heap *heap, duk_heaphdr *h) {
+ DUK_UNREF(heap);
+ duk__check_refcount_heaphdr(h);
+}
+DUK_LOCAL void duk__check_assert_refcounts_cb2(duk_heap *heap, duk_hstring *h) {
+ DUK_UNREF(heap);
+ duk__check_refcount_heaphdr((duk_heaphdr *) h);
+}
DUK_LOCAL void duk__check_assert_refcounts(duk_heap *heap) {
- duk_heaphdr *curr;
- duk_uint32_t i;
-
- for (curr = heap->heap_allocated; curr != NULL; curr = DUK_HEAPHDR_GET_NEXT(heap, curr)) {
- duk__check_refcount_heaphdr(curr);
- }
+ duk__assert_walk_list(heap, heap->heap_allocated, duk__check_assert_refcounts_cb1);
#if defined(DUK_USE_FINALIZER_SUPPORT)
- for (curr = heap->finalize_list; curr != NULL; curr = DUK_HEAPHDR_GET_NEXT(heap, curr)) {
- duk__check_refcount_heaphdr(curr);
- }
+ duk__assert_walk_list(heap, heap->finalize_list, duk__check_assert_refcounts_cb1);
#endif
-
- for (i = 0; i < heap->st_size; i++) {
- duk_hstring *h;
-
-#if defined(DUK_USE_STRTAB_PTRCOMP)
- h = DUK_USE_HEAPPTR_DEC16(heap->heap_udata, heap->strtable16[i]);
-#else
- h = heap->strtable[i];
-#endif
- while (h != NULL) {
- duk__check_refcount_heaphdr((duk_heaphdr *) h);
- h = h->hdr.h_next;
- }
- }
+ /* XXX: Assert anything for refzero_list? */
+ duk__assert_walk_strtable(heap, duk__check_assert_refcounts_cb2);
}
#endif /* DUK_USE_REFERENCE_COUNTING */
@@ -49837,6 +50172,12 @@ DUK_LOCAL void duk__dump_stats(duk_heap *heap) {
(long) heap->stats_getvar_all));
DUK_D(DUK_DPRINT("stats putvar: all=%ld",
(long) heap->stats_putvar_all));
+ DUK_D(DUK_DPRINT("stats envrec: delayedcreate=%ld, create=%ld, newenv=%ld, oldenv=%ld, pushclosure=%ld",
+ (long) heap->stats_envrec_delayedcreate,
+ (long) heap->stats_envrec_create,
+ (long) heap->stats_envrec_newenv,
+ (long) heap->stats_envrec_oldenv,
+ (long) heap->stats_envrec_pushclosure));
}
#endif /* DUK_USE_DEBUG */
@@ -49907,6 +50248,7 @@ DUK_INTERNAL void duk_heap_mark_and_sweep(duk_heap *heap, duk_small_uint_t flags
DUK_ASSERT(!DUK_HEAP_HAS_MARKANDSWEEP_RECLIMIT_REACHED(heap));
DUK_ASSERT(heap->ms_recursion_depth == 0);
duk__assert_heaphdr_flags(heap);
+ duk__assert_validity(heap);
#if defined(DUK_USE_REFERENCE_COUNTING)
/* Note: heap->refzero_free_running may be true; a refcount
* finalizer may trigger a mark-and-sweep.
@@ -50013,11 +50355,20 @@ DUK_INTERNAL void duk_heap_mark_and_sweep(duk_heap *heap, duk_small_uint_t flags
*
* The object insertions go to the front of the list, so they do not
* cause an infinite loop (they are not compacted).
+ *
+ * At present compaction is not allowed when mark-and-sweep runs
+ * during error handling because it involves a duk_safe_call()
+ * interfering with error state.
*/
if ((flags & DUK_MS_FLAG_EMERGENCY) &&
!(flags & DUK_MS_FLAG_NO_OBJECT_COMPACTION)) {
- duk__compact_objects(heap);
+ if (heap->lj.type != DUK_LJ_TYPE_UNKNOWN) {
+ DUK_D(DUK_DPRINT("lj.type (%ld) not DUK_LJ_TYPE_UNKNOWN, skip object compaction", (long) heap->lj.type));
+ } else {
+ DUK_D(DUK_DPRINT("object compaction"));
+ duk__compact_objects(heap);
+ }
}
/*
@@ -50041,8 +50392,8 @@ DUK_INTERNAL void duk_heap_mark_and_sweep(duk_heap *heap, duk_small_uint_t flags
*/
DUK_ASSERT(heap->ms_prevent_count == 1);
- heap->ms_prevent_count = 0;
DUK_ASSERT(heap->ms_running == 1);
+ heap->ms_prevent_count = 0;
heap->ms_running = 0;
/*
@@ -50054,6 +50405,7 @@ DUK_INTERNAL void duk_heap_mark_and_sweep(duk_heap *heap, duk_small_uint_t flags
DUK_ASSERT(!DUK_HEAP_HAS_MARKANDSWEEP_RECLIMIT_REACHED(heap));
DUK_ASSERT(heap->ms_recursion_depth == 0);
duk__assert_heaphdr_flags(heap);
+ duk__assert_validity(heap);
#if defined(DUK_USE_REFERENCE_COUNTING)
/* Note: heap->refzero_free_running may be true; a refcount
* finalizer may trigger a mark-and-sweep.
@@ -50508,8 +50860,8 @@ DUK_INTERNAL void duk_heap_insert_into_heap_allocated(duk_heap *heap, duk_heaphd
DUK_HEAPHDR_SET_PREV(heap, hdr, NULL);
#endif
DUK_HEAPHDR_SET_NEXT(heap, hdr, root);
- DUK_ASSERT_HEAPHDR_LINKS(heap, hdr);
- DUK_ASSERT_HEAPHDR_LINKS(heap, root);
+ DUK_HEAPHDR_ASSERT_LINKS(heap, hdr);
+ DUK_HEAPHDR_ASSERT_LINKS(heap, root);
heap->heap_allocated = hdr;
}
@@ -50569,8 +50921,8 @@ DUK_INTERNAL void duk_heap_insert_into_finalize_list(duk_heap *heap, duk_heaphdr
}
#endif
DUK_HEAPHDR_SET_NEXT(heap, hdr, root);
- DUK_ASSERT_HEAPHDR_LINKS(heap, hdr);
- DUK_ASSERT_HEAPHDR_LINKS(heap, root);
+ DUK_HEAPHDR_ASSERT_LINKS(heap, hdr);
+ DUK_HEAPHDR_ASSERT_LINKS(heap, root);
heap->finalize_list = hdr;
}
#endif /* DUK_USE_FINALIZER_SUPPORT */
@@ -50669,6 +51021,12 @@ DUK_INTERNAL void duk_heap_switch_thread(duk_heap *heap, duk_hthread *new_thr) {
heap->curr_thread = new_thr; /* may be NULL */
}
#endif /* DUK_USE_INTERRUPT_COUNTER */
+
+#if defined(DUK_USE_ASSERTIONS)
+DUK_INTERNAL void duk_heap_assert_valid(duk_heap *heap) {
+ DUK_ASSERT(heap != NULL);
+}
+#endif
/*
* Reference counting implementation.
*
@@ -50795,7 +51153,7 @@ DUK_INTERNAL void duk_hobject_refcount_finalize_norz(duk_heap *heap, duk_hobject
duk_tval *tv, *tv_end;
duk_hobject **funcs, **funcs_end;
- DUK_ASSERT_HCOMPFUNC_VALID(f);
+ DUK_HCOMPFUNC_ASSERT_VALID(f);
if (DUK_LIKELY(DUK_HCOMPFUNC_GET_DATA(heap, f) != NULL)) {
tv = DUK_HCOMPFUNC_GET_CONSTS_BASE(heap, f);
@@ -50825,31 +51183,31 @@ DUK_INTERNAL void duk_hobject_refcount_finalize_norz(duk_heap *heap, duk_hobject
DUK_HEAPHDR_DECREF_ALLOWNULL(thr, (duk_hbuffer *) DUK_HCOMPFUNC_GET_DATA(heap, f));
} else if (DUK_HOBJECT_IS_DECENV(h)) {
duk_hdecenv *e = (duk_hdecenv *) h;
- DUK_ASSERT_HDECENV_VALID(e);
+ DUK_HDECENV_ASSERT_VALID(e);
DUK_HTHREAD_DECREF_NORZ_ALLOWNULL(thr, e->thread);
DUK_HOBJECT_DECREF_NORZ_ALLOWNULL(thr, e->varmap);
} else if (DUK_HOBJECT_IS_OBJENV(h)) {
duk_hobjenv *e = (duk_hobjenv *) h;
- DUK_ASSERT_HOBJENV_VALID(e);
+ DUK_HOBJENV_ASSERT_VALID(e);
DUK_ASSERT(e->target != NULL); /* Required for object environments. */
DUK_HOBJECT_DECREF_NORZ(thr, e->target);
#if defined(DUK_USE_BUFFEROBJECT_SUPPORT)
} else if (DUK_HOBJECT_IS_BUFOBJ(h)) {
duk_hbufobj *b = (duk_hbufobj *) h;
- DUK_ASSERT_HBUFOBJ_VALID(b);
+ DUK_HBUFOBJ_ASSERT_VALID(b);
DUK_HBUFFER_DECREF_NORZ_ALLOWNULL(thr, (duk_hbuffer *) b->buf);
DUK_HOBJECT_DECREF_NORZ_ALLOWNULL(thr, (duk_hobject *) b->buf_prop);
#endif /* DUK_USE_BUFFEROBJECT_SUPPORT */
} else if (DUK_HOBJECT_IS_BOUNDFUNC(h)) {
duk_hboundfunc *f = (duk_hboundfunc *) (void *) h;
- DUK_ASSERT_HBOUNDFUNC_VALID(f);
+ DUK_HBOUNDFUNC_ASSERT_VALID(f);
DUK_TVAL_DECREF_NORZ(thr, &f->target);
DUK_TVAL_DECREF_NORZ(thr, &f->this_binding);
duk__decref_tvals_norz(thr, f->args, f->nargs);
#if defined(DUK_USE_ES6_PROXY)
} else if (DUK_HOBJECT_IS_PROXY(h)) {
duk_hproxy *p = (duk_hproxy *) h;
- DUK_ASSERT_HPROXY_VALID(p);
+ DUK_HPROXY_ASSERT_VALID(p);
DUK_HOBJECT_DECREF_NORZ(thr, p->target);
DUK_HOBJECT_DECREF_NORZ(thr, p->handler);
#endif /* DUK_USE_ES6_PROXY */
@@ -50858,7 +51216,7 @@ DUK_INTERNAL void duk_hobject_refcount_finalize_norz(duk_heap *heap, duk_hobject
duk_activation *act;
duk_tval *tv;
- DUK_ASSERT_HTHREAD_VALID(t);
+ DUK_HTHREAD_ASSERT_VALID(t);
tv = t->valstack;
while (tv < t->valstack_top) {
@@ -51192,11 +51550,14 @@ DUK_LOCAL DUK_INLINE void duk__refcount_refzero_hbuffer(duk_heap *heap, duk_hbuf
DUK_ASSERT(thr->heap != NULL); \
/* When mark-and-sweep runs, heap_thread must exist. */ \
DUK_ASSERT(thr->heap->ms_running == 0 || thr->heap->heap_thread != NULL); \
- /* When mark-and-sweep runs, the 'thr' argument always matches heap_thread. \
- * This could be used to e.g. suppress check against 'thr' directly (and \
- * knowing it would be heap_thread); not really used now. \
+ /* In normal operation finalizers are executed with ms_running == 0 \
+ * so we should never see ms_running == 1 and thr != heap_thread. \
+ * In heap destruction finalizers are executed with ms_running != 0 \
+ * to e.g. prevent refzero; a special value ms_running == 2 is used \
+ * in that case so it can be distinguished from the normal runtime \
+ * case, and allows a stronger assertion here (GH-2030). \
*/ \
- DUK_ASSERT(thr->heap->ms_running == 0 || thr == thr->heap->heap_thread); \
+ DUK_ASSERT(!(thr->heap->ms_running == 1 && thr != thr->heap->heap_thread)); \
/* We may be called when the heap is initializing and we process \
* refzeros normally, but mark-and-sweep and finalizers are prevented \
* if that's the case. \
@@ -51284,6 +51645,7 @@ DUK_LOCAL DUK__RZ_INLINE void duk__heaphdr_refzero_helper(duk_hthread *thr, duk_
heap = thr->heap;
htype = (duk_small_uint_t) DUK_HEAPHDR_GET_TYPE(h);
+ DUK_DDD(DUK_DDDPRINT("ms_running=%ld, heap_thread=%p", (long) thr->heap->ms_running, thr->heap->heap_thread));
DUK__RZ_SUPPRESS_CHECK();
switch (htype) {
@@ -52870,6 +53232,84 @@ DUK_INTERNAL void duk_heap_strtable_free(duk_heap *heap) {
#undef DUK__HEAPPTR_ENC16
#undef DUK__STRTAB_U32_MAX_STRLEN
/*
+ * duk_heaphdr assertion helpers
+ */
+
+/* #include duk_internal.h -> already included */
+
+#if defined(DUK_USE_ASSERTIONS)
+
+#if defined(DUK_USE_DOUBLE_LINKED_HEAP)
+DUK_INTERNAL void duk_heaphdr_assert_links(duk_heap *heap, duk_heaphdr *h) {
+ DUK_UNREF(heap);
+ if (h != NULL) {
+ duk_heaphdr *h_prev, *h_next;
+ h_prev = DUK_HEAPHDR_GET_PREV(heap, h);
+ h_next = DUK_HEAPHDR_GET_NEXT(heap, h);
+ DUK_ASSERT(h_prev == NULL || (DUK_HEAPHDR_GET_NEXT(heap, h_prev) == h));
+ DUK_ASSERT(h_next == NULL || (DUK_HEAPHDR_GET_PREV(heap, h_next) == h));
+ }
+}
+#else
+DUK_INTERNAL void duk_heaphdr_assert_links(duk_heap *heap, duk_heaphdr *h) {
+ DUK_UNREF(heap);
+ DUK_UNREF(h);
+}
+#endif
+
+DUK_INTERNAL void duk_heaphdr_assert_valid(duk_heaphdr *h) {
+ DUK_ASSERT(h != NULL);
+ DUK_ASSERT(DUK_HEAPHDR_HTYPE_VALID(h));
+}
+
+/* Assert validity of a heaphdr, including all subclasses. */
+DUK_INTERNAL void duk_heaphdr_assert_valid_subclassed(duk_heaphdr *h) {
+ switch (DUK_HEAPHDR_GET_TYPE(h)) {
+ case DUK_HTYPE_OBJECT: {
+ duk_hobject *h_obj = (duk_hobject *) h;
+ DUK_HOBJECT_ASSERT_VALID(h_obj);
+ if (DUK_HOBJECT_IS_COMPFUNC(h_obj)) {
+ DUK_HCOMPFUNC_ASSERT_VALID((duk_hcompfunc *) h_obj);
+ } else if (DUK_HOBJECT_IS_NATFUNC(h_obj)) {
+ DUK_HNATFUNC_ASSERT_VALID((duk_hnatfunc *) h_obj);
+ } else if (DUK_HOBJECT_IS_DECENV(h_obj)) {
+ DUK_HDECENV_ASSERT_VALID((duk_hdecenv *) h_obj);
+ } else if (DUK_HOBJECT_IS_OBJENV(h_obj)) {
+ DUK_HOBJENV_ASSERT_VALID((duk_hobjenv *) h_obj);
+ } else if (DUK_HOBJECT_IS_BUFOBJ(h_obj)) {
+#if defined(DUK_USE_BUFFEROBJECT_SUPPORT)
+ DUK_HBUFOBJ_ASSERT_VALID((duk_hbufobj *) h_obj);
+#endif
+ } else if (DUK_HOBJECT_IS_BOUNDFUNC(h_obj)) {
+ DUK_HBOUNDFUNC_ASSERT_VALID((duk_hboundfunc *) h_obj);
+ } else if (DUK_HOBJECT_IS_PROXY(h_obj)) {
+ DUK_HPROXY_ASSERT_VALID((duk_hproxy *) h_obj);
+ } else if (DUK_HOBJECT_IS_THREAD(h_obj)) {
+ DUK_HTHREAD_ASSERT_VALID((duk_hthread *) h_obj);
+ } else {
+ /* Just a plain object. */
+ ;
+ }
+ break;
+ }
+ case DUK_HTYPE_STRING: {
+ duk_hstring *h_str = (duk_hstring *) h;
+ DUK_HSTRING_ASSERT_VALID(h_str);
+ break;
+ }
+ case DUK_HTYPE_BUFFER: {
+ duk_hbuffer *h_buf = (duk_hbuffer *) h;
+ DUK_HBUFFER_ASSERT_VALID(h_buf);
+ break;
+ }
+ default: {
+ DUK_ASSERT(0);
+ }
+ }
+}
+
+#endif /* DUK_USE_ASSERTIONS */
+/*
* Hobject allocation.
*
* Provides primitive allocation functions for all object types (plain object,
@@ -52905,7 +53345,7 @@ DUK_LOCAL void duk__init_object_parts(duk_heap *heap, duk_uint_t hobject_flags,
DUK_HEAPHDR_SET_PREV(heap, &obj->hdr, NULL);
#endif
#endif
- DUK_ASSERT_HEAPHDR_LINKS(heap, &obj->hdr);
+ DUK_HEAPHDR_ASSERT_LINKS(heap, &obj->hdr);
DUK_HEAP_INSERT_INTO_HEAP_ALLOCATED(heap, &obj->hdr);
/* obj->props is intentionally left as NULL, and duk_hobject_props.c must deal
@@ -53025,7 +53465,7 @@ DUK_INTERNAL duk_hbufobj *duk_hbufobj_alloc(duk_hthread *thr, duk_uint_t hobject
res->buf_prop = NULL;
#endif
- DUK_ASSERT_HBUFOBJ_VALID(res);
+ DUK_HBUFOBJ_ASSERT_VALID(res);
return res;
}
#endif /* DUK_USE_BUFFEROBJECT_SUPPORT */
@@ -53141,6 +53581,133 @@ DUK_INTERNAL duk_hproxy *duk_hproxy_alloc(duk_hthread *thr, duk_uint_t hobject_f
return res;
}
/*
+ * duk_hobject and subclass assertion helpers
+ */
+
+/* #include duk_internal.h -> already included */
+
+#if defined(DUK_USE_ASSERTIONS)
+
+DUK_INTERNAL void duk_hobject_assert_valid(duk_hobject *h) {
+ DUK_ASSERT(h != NULL);
+ DUK_ASSERT(!DUK_HOBJECT_IS_CALLABLE(h) ||
+ DUK_HOBJECT_GET_CLASS_NUMBER(h) == DUK_HOBJECT_CLASS_FUNCTION);
+ DUK_ASSERT(!DUK_HOBJECT_IS_BUFOBJ(h) ||
+ (DUK_HOBJECT_GET_CLASS_NUMBER(h) == DUK_HOBJECT_CLASS_ARRAYBUFFER ||
+ DUK_HOBJECT_GET_CLASS_NUMBER(h) == DUK_HOBJECT_CLASS_DATAVIEW ||
+ DUK_HOBJECT_GET_CLASS_NUMBER(h) == DUK_HOBJECT_CLASS_INT8ARRAY ||
+ DUK_HOBJECT_GET_CLASS_NUMBER(h) == DUK_HOBJECT_CLASS_UINT8ARRAY ||
+ DUK_HOBJECT_GET_CLASS_NUMBER(h) == DUK_HOBJECT_CLASS_UINT8CLAMPEDARRAY ||
+ DUK_HOBJECT_GET_CLASS_NUMBER(h) == DUK_HOBJECT_CLASS_INT16ARRAY ||
+ DUK_HOBJECT_GET_CLASS_NUMBER(h) == DUK_HOBJECT_CLASS_UINT16ARRAY ||
+ DUK_HOBJECT_GET_CLASS_NUMBER(h) == DUK_HOBJECT_CLASS_INT32ARRAY ||
+ DUK_HOBJECT_GET_CLASS_NUMBER(h) == DUK_HOBJECT_CLASS_UINT32ARRAY ||
+ DUK_HOBJECT_GET_CLASS_NUMBER(h) == DUK_HOBJECT_CLASS_FLOAT32ARRAY ||
+ DUK_HOBJECT_GET_CLASS_NUMBER(h) == DUK_HOBJECT_CLASS_FLOAT64ARRAY));
+ /* Object is an Array <=> object has exotic array behavior */
+ DUK_ASSERT((DUK_HOBJECT_GET_CLASS_NUMBER(h) == DUK_HOBJECT_CLASS_ARRAY && DUK_HOBJECT_HAS_EXOTIC_ARRAY(h)) ||
+ (DUK_HOBJECT_GET_CLASS_NUMBER(h) != DUK_HOBJECT_CLASS_ARRAY && !DUK_HOBJECT_HAS_EXOTIC_ARRAY(h)));
+}
+
+DUK_INTERNAL void duk_harray_assert_valid(duk_harray *h) {
+ DUK_ASSERT(h != NULL);
+ DUK_ASSERT(DUK_HOBJECT_IS_ARRAY((duk_hobject *) h));
+ DUK_ASSERT(DUK_HOBJECT_HAS_EXOTIC_ARRAY((duk_hobject *) h));
+}
+
+DUK_INTERNAL void duk_hboundfunc_assert_valid(duk_hboundfunc *h) {
+ DUK_ASSERT(h != NULL);
+ DUK_ASSERT(DUK_HOBJECT_IS_BOUNDFUNC((duk_hobject *) h));
+ DUK_ASSERT(DUK_TVAL_IS_LIGHTFUNC(&h->target) ||
+ (DUK_TVAL_IS_OBJECT(&h->target) &&
+ DUK_HOBJECT_IS_CALLABLE(DUK_TVAL_GET_OBJECT(&h->target))));
+ DUK_ASSERT(!DUK_TVAL_IS_UNUSED(&h->this_binding));
+ DUK_ASSERT(h->nargs == 0 || h->args != NULL);
+}
+
+#if defined(DUK_USE_BUFFEROBJECT_SUPPORT)
+DUK_INTERNAL void duk_hbufobj_assert_valid(duk_hbufobj *h) {
+ DUK_ASSERT(h != NULL);
+ DUK_ASSERT(h->shift <= 3);
+ DUK_ASSERT(h->elem_type <= DUK_HBUFOBJ_ELEM_MAX);
+ DUK_ASSERT((h->shift == 0 && h->elem_type == DUK_HBUFOBJ_ELEM_UINT8) ||
+ (h->shift == 0 && h->elem_type == DUK_HBUFOBJ_ELEM_UINT8CLAMPED) ||
+ (h->shift == 0 && h->elem_type == DUK_HBUFOBJ_ELEM_INT8) ||
+ (h->shift == 1 && h->elem_type == DUK_HBUFOBJ_ELEM_UINT16) ||
+ (h->shift == 1 && h->elem_type == DUK_HBUFOBJ_ELEM_INT16) ||
+ (h->shift == 2 && h->elem_type == DUK_HBUFOBJ_ELEM_UINT32) ||
+ (h->shift == 2 && h->elem_type == DUK_HBUFOBJ_ELEM_INT32) ||
+ (h->shift == 2 && h->elem_type == DUK_HBUFOBJ_ELEM_FLOAT32) ||
+ (h->shift == 3 && h->elem_type == DUK_HBUFOBJ_ELEM_FLOAT64));
+ DUK_ASSERT(h->is_typedarray == 0 || h->is_typedarray == 1);
+ DUK_ASSERT(DUK_HOBJECT_IS_BUFOBJ((duk_hobject *) h));
+ if (h->buf == NULL) {
+ DUK_ASSERT(h->offset == 0);
+ DUK_ASSERT(h->length == 0);
+ } else {
+ /* No assertions for offset or length; in particular,
+ * it's OK for length to be longer than underlying
+ * buffer. Just ensure they don't wrap when added.
+ */
+ DUK_ASSERT(h->offset + h->length >= h->offset);
+ }
+}
+#endif /* DUK_USE_BUFFEROBJECT_SUPPORT */
+
+DUK_INTERNAL void duk_hcompfunc_assert_valid(duk_hcompfunc *h) {
+ DUK_ASSERT(h != NULL);
+}
+
+DUK_INTERNAL void duk_hnatfunc_assert_valid(duk_hnatfunc *h) {
+ DUK_ASSERT(h != NULL);
+}
+
+DUK_INTERNAL void duk_hdecenv_assert_valid(duk_hdecenv *h) {
+ DUK_ASSERT(h != NULL);
+ DUK_ASSERT(DUK_HOBJECT_IS_DECENV((duk_hobject *) h));
+ DUK_ASSERT(h->thread == NULL || h->varmap != NULL);
+}
+
+DUK_INTERNAL void duk_hobjenv_assert_valid(duk_hobjenv *h) {
+ DUK_ASSERT(h != NULL);
+ DUK_ASSERT(DUK_HOBJECT_IS_OBJENV((duk_hobject *) h));
+ DUK_ASSERT(h->target != NULL);
+ DUK_ASSERT(h->has_this == 0 || h->has_this == 1);
+}
+
+DUK_INTERNAL void duk_hproxy_assert_valid(duk_hproxy *h) {
+ DUK_ASSERT(h != NULL);
+ DUK_ASSERT(h->target != NULL);
+ DUK_ASSERT(h->handler != NULL);
+ DUK_ASSERT(DUK_HOBJECT_HAS_EXOTIC_PROXYOBJ((duk_hobject *) h));
+}
+
+DUK_INTERNAL void duk_hthread_assert_valid(duk_hthread *thr) {
+ DUK_ASSERT(thr != NULL);
+ DUK_ASSERT(DUK_HEAPHDR_GET_TYPE((duk_heaphdr *) thr) == DUK_HTYPE_OBJECT);
+ DUK_ASSERT(DUK_HOBJECT_IS_THREAD((duk_hobject *) thr));
+ DUK_ASSERT(thr->unused1 == 0);
+ DUK_ASSERT(thr->unused2 == 0);
+}
+
+DUK_INTERNAL void duk_ctx_assert_valid(duk_hthread *thr) {
+ DUK_ASSERT(thr != NULL);
+ DUK_HTHREAD_ASSERT_VALID(thr);
+ DUK_ASSERT(thr->valstack != NULL);
+ DUK_ASSERT(thr->valstack_bottom != NULL);
+ DUK_ASSERT(thr->valstack_top != NULL);
+ DUK_ASSERT(thr->valstack_end != NULL);
+ DUK_ASSERT(thr->valstack_alloc_end != NULL);
+ DUK_ASSERT(thr->valstack_alloc_end >= thr->valstack);
+ DUK_ASSERT(thr->valstack_end >= thr->valstack);
+ DUK_ASSERT(thr->valstack_top >= thr->valstack);
+ DUK_ASSERT(thr->valstack_top >= thr->valstack_bottom);
+ DUK_ASSERT(thr->valstack_end >= thr->valstack_top);
+ DUK_ASSERT(thr->valstack_alloc_end >= thr->valstack_end);
+}
+
+#endif /* DUK_USE_ASSERTIONS */
+/*
* Object enumeration support.
*
* Creates an internal enumeration state object to be used e.g. with for-in
@@ -53359,11 +53926,11 @@ DUK_INTERNAL void duk_hobject_enumerator_create(duk_hthread *thr, duk_small_uint
* real object to check against.
*/
duk_push_hobject(thr, enum_target);
- duk_put_prop_stridx_short(thr, -2, DUK_STRIDX_INT_TARGET);
+ duk_put_prop_stridx_short(thr, -2, DUK_STRIDX_INT_TARGET); /* Target is bare, plain put OK. */
/* Initialize index so that we skip internal control keys. */
duk_push_int(thr, DUK__ENUM_START_INDEX);
- duk_put_prop_stridx_short(thr, -2, DUK_STRIDX_INT_NEXT);
+ duk_put_prop_stridx_short(thr, -2, DUK_STRIDX_INT_NEXT); /* Target is bare, plain put OK. */
/*
* Proxy object handling
@@ -53397,7 +53964,7 @@ DUK_INTERNAL void duk_hobject_enumerator_create(duk_hthread *thr, duk_small_uint
enum_target = h_proxy_target;
duk_push_hobject(thr, enum_target); /* -> [ ... enum_target res handler undefined target ] */
- duk_put_prop_stridx_short(thr, -4, DUK_STRIDX_INT_TARGET);
+ duk_put_prop_stridx_short(thr, -4, DUK_STRIDX_INT_TARGET); /* Target is bare, plain put OK. */
duk_pop_2(thr); /* -> [ ... enum_target res ] */
goto skip_proxy;
@@ -53451,6 +54018,7 @@ DUK_INTERNAL void duk_hobject_enumerator_create(duk_hthread *thr, duk_small_uint
#if !defined(DUK_USE_PREFER_SIZE)
duk_bool_t need_sort = 0;
#endif
+ duk_bool_t cond;
/* Enumeration proceeds by inheritance level. Virtual
* properties need to be handled specially, followed by
@@ -53477,10 +54045,12 @@ DUK_INTERNAL void duk_hobject_enumerator_create(duk_hthread *thr, duk_small_uint
*/
#if defined(DUK_USE_BUFFEROBJECT_SUPPORT)
- if (DUK_HOBJECT_HAS_EXOTIC_STRINGOBJ(curr) || DUK_HOBJECT_IS_BUFOBJ(curr)) {
+ cond = DUK_HOBJECT_HAS_EXOTIC_STRINGOBJ(curr) || DUK_HOBJECT_IS_BUFOBJ(curr);
#else
- if (DUK_HOBJECT_HAS_EXOTIC_STRINGOBJ(curr)) {
+ cond = DUK_HOBJECT_HAS_EXOTIC_STRINGOBJ(curr);
#endif
+ cond = cond && !(enum_flags & DUK_ENUM_EXCLUDE_STRINGS);
+ if (cond) {
duk_bool_t have_length = 1;
/* String and buffer enumeration behavior is identical now,
@@ -53542,26 +54112,29 @@ DUK_INTERNAL void duk_hobject_enumerator_create(duk_hthread *thr, duk_small_uint
* Array part
*/
- for (i = 0; i < (duk_uint_fast32_t) DUK_HOBJECT_GET_ASIZE(curr); i++) {
- duk_hstring *k;
- duk_tval *tv;
+ cond = !(enum_flags & DUK_ENUM_EXCLUDE_STRINGS);
+ if (cond) {
+ for (i = 0; i < (duk_uint_fast32_t) DUK_HOBJECT_GET_ASIZE(curr); i++) {
+ duk_hstring *k;
+ duk_tval *tv;
- tv = DUK_HOBJECT_A_GET_VALUE_PTR(thr->heap, curr, i);
- if (DUK_TVAL_IS_UNUSED(tv)) {
- continue;
- }
- k = duk_heap_strtable_intern_u32_checked(thr, (duk_uint32_t) i); /* Fragile reachability. */
- DUK_ASSERT(k);
+ tv = DUK_HOBJECT_A_GET_VALUE_PTR(thr->heap, curr, i);
+ if (DUK_TVAL_IS_UNUSED(tv)) {
+ continue;
+ }
+ k = duk_heap_strtable_intern_u32_checked(thr, (duk_uint32_t) i); /* Fragile reachability. */
+ DUK_ASSERT(k);
- duk__add_enum_key(thr, k);
+ duk__add_enum_key(thr, k);
- /* [enum_target res] */
- }
+ /* [enum_target res] */
+ }
- if (DUK_HOBJECT_HAS_EXOTIC_ARRAY(curr)) {
- /* Array .length comes after numeric indices. */
- if (enum_flags & DUK_ENUM_INCLUDE_NONENUMERABLE) {
- duk__add_enum_key_stridx(thr, DUK_STRIDX_LENGTH);
+ if (DUK_HOBJECT_HAS_EXOTIC_ARRAY(curr)) {
+ /* Array .length comes after numeric indices. */
+ if (enum_flags & DUK_ENUM_INCLUDE_NONENUMERABLE) {
+ duk__add_enum_key_stridx(thr, DUK_STRIDX_LENGTH);
+ }
}
}
@@ -53718,7 +54291,7 @@ DUK_INTERNAL duk_bool_t duk_hobject_enumerator_next(duk_hthread *thr, duk_bool_t
* be the proxy, and checking key existence against the proxy is not
* required (or sensible, as the keys may be fully virtual).
*/
- duk_get_prop_stridx_short(thr, -1, DUK_STRIDX_INT_TARGET);
+ duk_xget_owndataprop_stridx_short(thr, -1, DUK_STRIDX_INT_TARGET);
enum_target = duk_require_hobject(thr, -1);
DUK_ASSERT(enum_target != NULL);
#if defined(DUK_USE_ES6_PROXY)
@@ -53815,6 +54388,7 @@ DUK_INTERNAL duk_ret_t duk_hobject_get_enumerated_keys(duk_hthread *thr, duk_sma
/* XXX: uninit would be OK */
tv = duk_push_harray_with_size_outptr(thr, (duk_uint32_t) count);
DUK_ASSERT(count == 0 || tv != NULL);
+ DUK_ASSERT(!duk_is_bare_object(thr, -1));
/* Fill result array, no side effects. */
@@ -54125,7 +54699,7 @@ DUK_INTERNAL duk_uint_fast32_t duk_hobject_pc2line_query(duk_hthread *thr, duk_i
* future work in debugger.rst).
*/
- duk_get_prop_stridx(thr, idx_func, DUK_STRIDX_INT_PC2LINE);
+ duk_xget_owndataprop_stridx_short(thr, idx_func, DUK_STRIDX_INT_PC2LINE);
pc2line = (duk_hbuffer_fixed *) (void *) duk_get_hbuffer(thr, -1);
if (pc2line != NULL) {
DUK_ASSERT(!DUK_HBUFFER_HAS_DYNAMIC((duk_hbuffer *) pc2line) && !DUK_HBUFFER_HAS_EXTERNAL((duk_hbuffer *) pc2line));
@@ -54217,6 +54791,9 @@ DUK_LOCAL_DECL duk_bool_t duk__handle_put_array_length(duk_hthread *thr, duk_hob
DUK_LOCAL_DECL duk_bool_t duk__get_propdesc(duk_hthread *thr, duk_hobject *obj, duk_hstring *key, duk_propdesc *out_desc, duk_small_uint_t flags);
DUK_LOCAL_DECL duk_bool_t duk__get_own_propdesc_raw(duk_hthread *thr, duk_hobject *obj, duk_hstring *key, duk_uint32_t arr_idx, duk_propdesc *out_desc, duk_small_uint_t flags);
+DUK_LOCAL_DECL void duk__abandon_array_part(duk_hthread *thr, duk_hobject *obj);
+DUK_LOCAL_DECL void duk__grow_props_for_array_item(duk_hthread *thr, duk_hobject *obj, duk_uint32_t highest_arr_idx);
+
/*
* Misc helpers
*/
@@ -54375,8 +54952,6 @@ DUK_LOCAL duk_uint32_t duk__get_default_h_size(duk_uint32_t e_size) {
DUK_LOCAL duk_uint32_t duk__get_min_grow_e(duk_uint32_t e_size) {
duk_uint32_t res;
- DUK_ASSERT(e_size <= DUK_HOBJECT_MAX_PROPERTIES);
-
res = (e_size + DUK_USE_HOBJECT_ENTRY_MINGROW_ADD) / DUK_USE_HOBJECT_ENTRY_MINGROW_DIVISOR;
DUK_ASSERT(res >= 1); /* important for callers */
return res;
@@ -54386,8 +54961,6 @@ DUK_LOCAL duk_uint32_t duk__get_min_grow_e(duk_uint32_t e_size) {
DUK_LOCAL duk_uint32_t duk__get_min_grow_a(duk_uint32_t a_size) {
duk_uint32_t res;
- DUK_ASSERT((duk_size_t) a_size <= DUK_HOBJECT_MAX_PROPERTIES);
-
res = (a_size + DUK_USE_HOBJECT_ARRAY_MINGROW_ADD) / DUK_USE_HOBJECT_ARRAY_MINGROW_DIVISOR;
DUK_ASSERT(res >= 1); /* important for callers */
return res;
@@ -54492,6 +55065,105 @@ DUK_LOCAL duk_bool_t duk__abandon_array_slow_check_required(duk_uint32_t arr_idx
return (arr_idx > DUK_USE_HOBJECT_ARRAY_FAST_RESIZE_LIMIT * ((old_size + 7) >> 3));
}
+DUK_LOCAL duk_bool_t duk__abandon_array_check(duk_hthread *thr, duk_uint32_t arr_idx, duk_hobject *obj) {
+ duk_uint32_t min_size;
+ duk_uint32_t old_used;
+ duk_uint32_t old_size;
+
+ if (!duk__abandon_array_slow_check_required(arr_idx, DUK_HOBJECT_GET_ASIZE(obj))) {
+ DUK_DDD(DUK_DDDPRINT("=> fast resize is OK"));
+ return 0;
+ }
+
+ duk__compute_a_stats(thr, obj, &old_used, &old_size);
+
+ DUK_DDD(DUK_DDDPRINT("abandon check, array stats: old_used=%ld, old_size=%ld, arr_idx=%ld",
+ (long) old_used, (long) old_size, (long) arr_idx));
+
+ min_size = arr_idx + 1;
+#if defined(DUK_USE_OBJSIZES16)
+ if (min_size > DUK_UINT16_MAX) {
+ goto do_abandon;
+ }
+#endif
+ DUK_UNREF(min_size);
+
+ /* Note: intentionally use approximations to shave a few instructions:
+ * a_used = old_used (accurate: old_used + 1)
+ * a_size = arr_idx (accurate: arr_idx + 1)
+ */
+ if (duk__abandon_array_density_check(old_used, arr_idx)) {
+ DUK_DD(DUK_DDPRINT("write to new array entry beyond current length, "
+ "decided to abandon array part (would become too sparse)"));
+
+ /* Abandoning requires a props allocation resize and
+ * 'rechecks' the valstack, invalidating any existing
+ * valstack value pointers.
+ */
+ goto do_abandon;
+ }
+
+ DUK_DDD(DUK_DDDPRINT("=> decided to keep array part"));
+ return 0;
+
+ do_abandon:
+ duk__abandon_array_part(thr, obj);
+ DUK_ASSERT(!DUK_HOBJECT_HAS_ARRAY_PART(obj));
+ return 1;
+}
+
+DUK_LOCAL duk_tval *duk__obtain_arridx_slot_slowpath(duk_hthread *thr, duk_uint32_t arr_idx, duk_hobject *obj) {
+ /*
+ * Array needs to grow, but we don't want it becoming too sparse.
+ * If it were to become sparse, abandon array part, moving all
+ * array entries into the entries part (for good).
+ *
+ * Since we don't keep track of actual density (used vs. size) of
+ * the array part, we need to estimate somehow. The check is made
+ * in two parts:
+ *
+ * - Check whether the resize need is small compared to the
+ * current size (relatively); if so, resize without further
+ * checking (essentially we assume that the original part is
+ * "dense" so that the result would be dense enough).
+ *
+ * - Otherwise, compute the resize using an actual density
+ * measurement based on counting the used array entries.
+ */
+
+ DUK_DDD(DUK_DDDPRINT("write to new array requires array resize, decide whether to do a "
+ "fast resize without abandon check (arr_idx=%ld, old_size=%ld)",
+ (long) arr_idx, (long) DUK_HOBJECT_GET_ASIZE(obj)));
+
+ if (DUK_UNLIKELY(duk__abandon_array_check(thr, arr_idx, obj) != 0)) {
+ DUK_ASSERT(!DUK_HOBJECT_HAS_ARRAY_PART(obj));
+ return NULL;
+ }
+
+ DUK_DD(DUK_DDPRINT("write to new array entry beyond current length, "
+ "decided to extend current allocation"));
+
+ /* In principle it's possible to run out of memory extending the
+ * array but with the allocation going through if we were to abandon
+ * the array part and try again. In practice this should be rare
+ * because abandoned arrays have a higher per-entry footprint.
+ */
+
+ duk__grow_props_for_array_item(thr, obj, arr_idx);
+
+ DUK_ASSERT(DUK_HOBJECT_HAS_ARRAY_PART(obj));
+ DUK_ASSERT(arr_idx < DUK_HOBJECT_GET_ASIZE(obj));
+ return DUK_HOBJECT_A_GET_VALUE_PTR(thr->heap, obj, arr_idx);
+}
+
+DUK_LOCAL DUK_INLINE duk_tval *duk__obtain_arridx_slot(duk_hthread *thr, duk_uint32_t arr_idx, duk_hobject *obj) {
+ if (DUK_LIKELY(arr_idx < DUK_HOBJECT_GET_ASIZE(obj))) {
+ return DUK_HOBJECT_A_GET_VALUE_PTR(thr->heap, obj, arr_idx);
+ } else {
+ return duk__obtain_arridx_slot_slowpath(thr, arr_idx, obj);
+ }
+}
+
/*
* Proxy helpers
*/
@@ -54511,7 +55183,7 @@ DUK_INTERNAL duk_bool_t duk_hobject_proxy_check(duk_hobject *obj, duk_hobject **
return 0;
}
h_proxy = (duk_hproxy *) obj;
- DUK_ASSERT_HPROXY_VALID(h_proxy);
+ DUK_HPROXY_ASSERT_VALID(h_proxy);
DUK_ASSERT(h_proxy->handler != NULL);
DUK_ASSERT(h_proxy->target != NULL);
@@ -54538,7 +55210,7 @@ DUK_INTERNAL duk_hobject *duk_hobject_resolve_proxy_target(duk_hobject *obj) {
duk_hproxy *h_proxy;
h_proxy = (duk_hproxy *) obj;
- DUK_ASSERT_HPROXY_VALID(h_proxy);
+ DUK_HPROXY_ASSERT_VALID(h_proxy);
obj = h_proxy->target;
DUK_ASSERT(obj != NULL);
}
@@ -54746,6 +55418,16 @@ DUK_INTERNAL void duk_hobject_realloc_props(duk_hthread *thr,
DUK_ERROR_ALLOC_FAILED(thr);
DUK_WO_NORETURN(return;);
}
+#if defined(DUK_USE_OBJSIZES16)
+ if (new_e_size_adjusted > DUK_UINT16_MAX || new_a_size > DUK_UINT16_MAX) {
+ /* If caller gave us sizes larger than what we can store,
+ * fail memory safely with an internal error rather than
+ * truncating the sizes.
+ */
+ DUK_ERROR_INTERNAL(thr);
+ DUK_WO_NORETURN(return;);
+ }
+#endif
/*
* Compute new alloc size and alloc new area.
@@ -55121,34 +55803,10 @@ DUK_INTERNAL void duk_hobject_resize_entrypart(duk_hthread *thr,
duk_hobject_realloc_props(thr, obj, new_e_size, new_a_size, new_h_size, 0);
}
-#if 0 /*unused */
-DUK_INTERNAL void duk_hobject_resize_arraypart(duk_hthread *thr,
- duk_hobject *obj,
- duk_uint32_t new_a_size) {
- duk_uint32_t old_a_size;
- duk_uint32_t new_e_size;
- duk_uint32_t new_h_size;
-
- DUK_ASSERT(thr != NULL);
- DUK_ASSERT(obj != NULL);
-
- if (!DUK_HOBJECT_HAS_ARRAY_PART(obj)) {
- return;
- }
- old_a_size = DUK_HOBJECT_GET_ASIZE(obj);
- if (old_a_size > new_a_size) {
- new_a_size = old_a_size;
- }
- new_e_size = DUK_HOBJECT_GET_ESIZE(obj);
- new_h_size = DUK_HOBJECT_GET_HSIZE(obj);
-
- duk_hobject_realloc_props(thr, obj, new_e_size, new_a_size, new_h_size, 0);
-}
-#endif
-
/* Grow entry part allocation for one additional entry. */
DUK_LOCAL void duk__grow_props_for_new_entry_item(duk_hthread *thr, duk_hobject *obj) {
duk_uint32_t old_e_used; /* actually used, non-NULL entries */
+ duk_uint32_t new_e_size_minimum;
duk_uint32_t new_e_size;
duk_uint32_t new_a_size;
duk_uint32_t new_h_size;
@@ -55164,6 +55822,7 @@ DUK_LOCAL void duk__grow_props_for_new_entry_item(duk_hthread *thr, duk_hobject
*/
old_e_used = duk__count_used_e_keys(thr, obj);
+ new_e_size_minimum = old_e_used + 1;
new_e_size = old_e_used + duk__get_min_grow_e(old_e_used);
#if defined(DUK_USE_HOBJECT_HASH_PART)
new_h_size = duk__get_default_h_size(new_e_size);
@@ -55171,7 +55830,24 @@ DUK_LOCAL void duk__grow_props_for_new_entry_item(duk_hthread *thr, duk_hobject
new_h_size = 0;
#endif
new_a_size = DUK_HOBJECT_GET_ASIZE(obj);
- DUK_ASSERT(new_e_size >= old_e_used + 1); /* duk__get_min_grow_e() is always >= 1 */
+
+#if defined(DUK_USE_OBJSIZES16)
+ if (new_e_size > DUK_UINT16_MAX) {
+ new_e_size = DUK_UINT16_MAX;
+ }
+ if (new_h_size > DUK_UINT16_MAX) {
+ new_h_size = DUK_UINT16_MAX;
+ }
+ if (new_a_size > DUK_UINT16_MAX) {
+ new_a_size = DUK_UINT16_MAX;
+ }
+#endif
+ DUK_ASSERT(new_h_size == 0 || new_h_size >= new_e_size);
+
+ if (!(new_e_size >= new_e_size_minimum)) {
+ DUK_ERROR_ALLOC_FAILED(thr);
+ DUK_WO_NORETURN(return;);
+ }
duk_hobject_realloc_props(thr, obj, new_e_size, new_a_size, new_h_size, 0);
}
@@ -55180,19 +55856,36 @@ DUK_LOCAL void duk__grow_props_for_new_entry_item(duk_hthread *thr, duk_hobject
DUK_LOCAL void duk__grow_props_for_array_item(duk_hthread *thr, duk_hobject *obj, duk_uint32_t highest_arr_idx) {
duk_uint32_t new_e_size;
duk_uint32_t new_a_size;
+ duk_uint32_t new_a_size_minimum;
duk_uint32_t new_h_size;
DUK_ASSERT(thr != NULL);
DUK_ASSERT(obj != NULL);
DUK_ASSERT(highest_arr_idx >= DUK_HOBJECT_GET_ASIZE(obj));
- /* minimum new length is highest_arr_idx + 1 */
-
new_e_size = DUK_HOBJECT_GET_ESIZE(obj);
new_h_size = DUK_HOBJECT_GET_HSIZE(obj);
+ new_a_size_minimum = highest_arr_idx + 1;
new_a_size = highest_arr_idx + duk__get_min_grow_a(highest_arr_idx);
DUK_ASSERT(new_a_size >= highest_arr_idx + 1); /* duk__get_min_grow_a() is always >= 1 */
+#if defined(DUK_USE_OBJSIZES16)
+ if (new_e_size > DUK_UINT16_MAX) {
+ new_e_size = DUK_UINT16_MAX;
+ }
+ if (new_h_size > DUK_UINT16_MAX) {
+ new_h_size = DUK_UINT16_MAX;
+ }
+ if (new_a_size > DUK_UINT16_MAX) {
+ new_a_size = DUK_UINT16_MAX;
+ }
+#endif
+
+ if (!(new_a_size >= new_a_size_minimum)) {
+ DUK_ERROR_ALLOC_FAILED(thr);
+ DUK_WO_NORETURN(return;);
+ }
+
duk_hobject_realloc_props(thr, obj, new_e_size, new_a_size, new_h_size, 0);
}
@@ -55201,7 +55894,8 @@ DUK_LOCAL void duk__grow_props_for_array_item(duk_hthread *thr, duk_hobject *obj
* We also compact the entries part while we're at it, although
* this is not strictly required.
*/
-DUK_LOCAL void duk__abandon_array_checked(duk_hthread *thr, duk_hobject *obj) {
+DUK_LOCAL void duk__abandon_array_part(duk_hthread *thr, duk_hobject *obj) {
+ duk_uint32_t new_e_size_minimum;
duk_uint32_t new_e_size;
duk_uint32_t new_a_size;
duk_uint32_t new_h_size;
@@ -55221,8 +55915,8 @@ DUK_LOCAL void duk__abandon_array_checked(duk_hthread *thr, duk_hobject *obj) {
* of space right away.
*/
- new_e_size = e_used + a_used;
- new_e_size = new_e_size + duk__get_min_grow_e(new_e_size);
+ new_e_size_minimum = e_used + a_used;
+ new_e_size = new_e_size_minimum + duk__get_min_grow_e(new_e_size_minimum);
new_a_size = 0;
#if defined(DUK_USE_HOBJECT_HASH_PART)
new_h_size = duk__get_default_h_size(new_e_size);
@@ -55230,6 +55924,23 @@ DUK_LOCAL void duk__abandon_array_checked(duk_hthread *thr, duk_hobject *obj) {
new_h_size = 0;
#endif
+#if defined(DUK_USE_OBJSIZES16)
+ if (new_e_size > DUK_UINT16_MAX) {
+ new_e_size = DUK_UINT16_MAX;
+ }
+ if (new_h_size > DUK_UINT16_MAX) {
+ new_h_size = DUK_UINT16_MAX;
+ }
+ if (new_a_size > DUK_UINT16_MAX) {
+ new_a_size = DUK_UINT16_MAX;
+ }
+#endif
+
+ if (!(new_e_size >= new_e_size_minimum)) {
+ DUK_ERROR_ALLOC_FAILED(thr);
+ DUK_WO_NORETURN(return;);
+ }
+
DUK_DD(DUK_DDPRINT("abandon array part for hobject %p, "
"array stats before: e_used=%ld, a_used=%ld, a_size=%ld; "
"resize to e_size=%ld, a_size=%ld, h_size=%ld",
@@ -55314,7 +56025,7 @@ DUK_INTERNAL void duk_hobject_compact_props(duk_hthread *thr, duk_hobject *obj)
* but there is no hash part, h_idx is set to -1.
*/
-DUK_INTERNAL duk_bool_t duk_hobject_find_existing_entry(duk_heap *heap, duk_hobject *obj, duk_hstring *key, duk_int_t *e_idx, duk_int_t *h_idx) {
+DUK_INTERNAL duk_bool_t duk_hobject_find_entry(duk_heap *heap, duk_hobject *obj, duk_hstring *key, duk_int_t *e_idx, duk_int_t *h_idx) {
DUK_ASSERT(obj != NULL);
DUK_ASSERT(key != NULL);
DUK_ASSERT(e_idx != NULL);
@@ -55331,7 +56042,7 @@ DUK_INTERNAL duk_bool_t duk_hobject_find_existing_entry(duk_heap *heap, duk_hobj
duk_uint_fast32_t i;
duk_uint_fast32_t n;
duk_hstring **h_keys_base;
- DUK_DDD(DUK_DDDPRINT("duk_hobject_find_existing_entry() using linear scan for lookup"));
+ DUK_DDD(DUK_DDDPRINT("duk_hobject_find_entry() using linear scan for lookup"));
h_keys_base = DUK_HOBJECT_E_GET_KEY_BASE(heap, obj);
n = DUK_HOBJECT_GET_ENEXT(obj);
@@ -55352,7 +56063,7 @@ DUK_INTERNAL duk_bool_t duk_hobject_find_existing_entry(duk_heap *heap, duk_hobj
duk_uint32_t *h_base;
duk_uint32_t mask;
- DUK_DDD(DUK_DDDPRINT("duk_hobject_find_existing_entry() using hash part for lookup"));
+ DUK_DDD(DUK_DDDPRINT("duk_hobject_find_entry() using hash part for lookup"));
h_base = DUK_HOBJECT_H_GET_BASE(heap, obj);
n = DUK_HOBJECT_GET_HSIZE(obj);
@@ -55398,7 +56109,7 @@ DUK_INTERNAL duk_bool_t duk_hobject_find_existing_entry(duk_heap *heap, duk_hobj
}
/* For internal use: get non-accessor entry value */
-DUK_INTERNAL duk_tval *duk_hobject_find_existing_entry_tval_ptr(duk_heap *heap, duk_hobject *obj, duk_hstring *key) {
+DUK_INTERNAL duk_tval *duk_hobject_find_entry_tval_ptr(duk_heap *heap, duk_hobject *obj, duk_hstring *key) {
duk_int_t e_idx;
duk_int_t h_idx;
@@ -55406,7 +56117,7 @@ DUK_INTERNAL duk_tval *duk_hobject_find_existing_entry_tval_ptr(duk_heap *heap,
DUK_ASSERT(key != NULL);
DUK_UNREF(heap);
- if (duk_hobject_find_existing_entry(heap, obj, key, &e_idx, &h_idx)) {
+ if (duk_hobject_find_entry(heap, obj, key, &e_idx, &h_idx)) {
DUK_ASSERT(e_idx >= 0);
if (!DUK_HOBJECT_E_SLOT_IS_ACCESSOR(heap, obj, e_idx)) {
return DUK_HOBJECT_E_GET_VALUE_TVAL_PTR(heap, obj, e_idx);
@@ -55415,8 +56126,12 @@ DUK_INTERNAL duk_tval *duk_hobject_find_existing_entry_tval_ptr(duk_heap *heap,
return NULL;
}
+DUK_INTERNAL duk_tval *duk_hobject_find_entry_tval_ptr_stridx(duk_heap *heap, duk_hobject *obj, duk_small_uint_t stridx) {
+ return duk_hobject_find_entry_tval_ptr(heap, obj, DUK_HEAP_GET_STRING(heap, stridx));
+}
+
/* For internal use: get non-accessor entry value and attributes */
-DUK_INTERNAL duk_tval *duk_hobject_find_existing_entry_tval_ptr_and_attrs(duk_heap *heap, duk_hobject *obj, duk_hstring *key, duk_uint_t *out_attrs) {
+DUK_INTERNAL duk_tval *duk_hobject_find_entry_tval_ptr_and_attrs(duk_heap *heap, duk_hobject *obj, duk_hstring *key, duk_uint_t *out_attrs) {
duk_int_t e_idx;
duk_int_t h_idx;
@@ -55425,7 +56140,7 @@ DUK_INTERNAL duk_tval *duk_hobject_find_existing_entry_tval_ptr_and_attrs(duk_he
DUK_ASSERT(out_attrs != NULL);
DUK_UNREF(heap);
- if (duk_hobject_find_existing_entry(heap, obj, key, &e_idx, &h_idx)) {
+ if (duk_hobject_find_entry(heap, obj, key, &e_idx, &h_idx)) {
DUK_ASSERT(e_idx >= 0);
if (!DUK_HOBJECT_E_SLOT_IS_ACCESSOR(heap, obj, e_idx)) {
*out_attrs = DUK_HOBJECT_E_GET_FLAGS(heap, obj, e_idx);
@@ -55437,7 +56152,7 @@ DUK_INTERNAL duk_tval *duk_hobject_find_existing_entry_tval_ptr_and_attrs(duk_he
}
/* For internal use: get array part value */
-DUK_INTERNAL duk_tval *duk_hobject_find_existing_array_entry_tval_ptr(duk_heap *heap, duk_hobject *obj, duk_uarridx_t i) {
+DUK_INTERNAL duk_tval *duk_hobject_find_array_entry_tval_ptr(duk_heap *heap, duk_hobject *obj, duk_uarridx_t i) {
duk_tval *tv;
DUK_ASSERT(obj != NULL);
@@ -55540,47 +56255,67 @@ DUK_LOCAL duk_int_t duk__hobject_alloc_entry_checked(duk_hthread *thr, duk_hobje
* to incref OR decref. No proxies or accessors are invoked, no prototype walk.
*/
-DUK_INTERNAL duk_bool_t duk_hobject_get_internal_value(duk_heap *heap, duk_hobject *obj, duk_tval *tv_out) {
- duk_int_t e_idx;
- duk_int_t h_idx;
+DUK_INTERNAL duk_tval *duk_hobject_get_internal_value_tval_ptr(duk_heap *heap, duk_hobject *obj) {
+ return duk_hobject_find_entry_tval_ptr_stridx(heap, obj, DUK_STRIDX_INT_VALUE);
+}
+
+DUK_LOCAL duk_heaphdr *duk_hobject_get_internal_value_heaphdr(duk_heap *heap, duk_hobject *obj) {
+ duk_tval *tv;
DUK_ASSERT(heap != NULL);
DUK_ASSERT(obj != NULL);
- DUK_ASSERT(tv_out != NULL);
- /* Always in entry part, no need to look up parents etc. */
- if (duk_hobject_find_existing_entry(heap, obj, DUK_HEAP_STRING_INT_VALUE(heap), &e_idx, &h_idx)) {
- DUK_ASSERT(e_idx >= 0);
- DUK_ASSERT(!DUK_HOBJECT_E_SLOT_IS_ACCESSOR(heap, obj, e_idx));
- DUK_TVAL_SET_TVAL(tv_out, DUK_HOBJECT_E_GET_VALUE_TVAL_PTR(heap, obj, e_idx));
- return 1;
+ tv = duk_hobject_get_internal_value_tval_ptr(heap, obj);
+ if (tv != NULL) {
+ duk_heaphdr *h = DUK_TVAL_GET_HEAPHDR(tv);
+ DUK_ASSERT(h != NULL);
+ return h;
}
- DUK_TVAL_SET_UNDEFINED(tv_out);
- return 0;
+
+ return NULL;
}
DUK_INTERNAL duk_hstring *duk_hobject_get_internal_value_string(duk_heap *heap, duk_hobject *obj) {
- duk_tval tv;
+ duk_hstring *h;
- DUK_ASSERT(heap != NULL);
- DUK_ASSERT(obj != NULL);
+ h = (duk_hstring *) duk_hobject_get_internal_value_heaphdr(heap, obj);
+ if (h != NULL) {
+ DUK_ASSERT(DUK_HEAPHDR_IS_STRING((duk_heaphdr *) h));
+ }
+ return h;
+}
- /* This is not strictly necessary, but avoids compiler warnings; e.g.
- * gcc won't reliably detect that no uninitialized data is read below.
- */
- duk_memzero((void *) &tv, sizeof(duk_tval));
+DUK_LOCAL duk_hobject *duk__hobject_get_entry_object_stridx(duk_heap *heap, duk_hobject *obj, duk_small_uint_t stridx) {
+ duk_tval *tv;
+ duk_hobject *h;
- if (duk_hobject_get_internal_value(heap, obj, &tv)) {
- duk_hstring *h;
- DUK_ASSERT(DUK_TVAL_IS_STRING(&tv));
- h = DUK_TVAL_GET_STRING(&tv);
- /* No explicit check for string vs. symbol, accept both. */
+ tv = duk_hobject_find_entry_tval_ptr_stridx(heap, obj, stridx);
+ if (tv != NULL && DUK_TVAL_IS_OBJECT(tv)) {
+ h = DUK_TVAL_GET_OBJECT(tv);
+ DUK_ASSERT(h != NULL);
return h;
}
-
return NULL;
}
+DUK_INTERNAL duk_harray *duk_hobject_get_formals(duk_hthread *thr, duk_hobject *obj) {
+ duk_harray *h;
+
+ h = (duk_harray *) duk__hobject_get_entry_object_stridx(thr->heap, obj, DUK_STRIDX_INT_FORMALS);
+ if (h != NULL) {
+ DUK_ASSERT(DUK_HOBJECT_IS_ARRAY((duk_hobject *) h));
+ DUK_ASSERT(h->length <= DUK_HOBJECT_GET_ASIZE((duk_hobject *) h));
+ }
+ return h;
+}
+
+DUK_INTERNAL duk_hobject *duk_hobject_get_varmap(duk_hthread *thr, duk_hobject *obj) {
+ duk_hobject *h;
+
+ h = duk__hobject_get_entry_object_stridx(thr->heap, obj, DUK_STRIDX_INT_VARMAP);
+ return h;
+}
+
/*
* Arguments handling helpers (argument map mainly).
*
@@ -55835,7 +56570,7 @@ DUK_LOCAL duk_bool_t duk__get_own_propdesc_raw(duk_hthread *thr, duk_hobject *ob
* same keys so the entry part vs. array part order doesn't matter.
*/
- if (duk_hobject_find_existing_entry(thr->heap, obj, key, &out_desc->e_idx, &out_desc->h_idx)) {
+ if (duk_hobject_find_entry(thr->heap, obj, key, &out_desc->e_idx, &out_desc->h_idx)) {
duk_int_t e_idx = out_desc->e_idx;
DUK_ASSERT(out_desc->e_idx >= 0);
out_desc->a_idx = -1;
@@ -55906,7 +56641,7 @@ DUK_LOCAL duk_bool_t duk__get_own_propdesc_raw(duk_hthread *thr, duk_hobject *ob
(duk_heaphdr *) key, (long) arr_idx));
a = (duk_harray *) obj;
- DUK_ASSERT_HARRAY_VALID(a);
+ DUK_HARRAY_ASSERT_VALID(a);
if (key == DUK_HTHREAD_STRING_LENGTH(thr)) {
DUK_DDD(DUK_DDDPRINT("-> found, key is 'length', length exotic behavior"));
@@ -55988,7 +56723,7 @@ DUK_LOCAL duk_bool_t duk__get_own_propdesc_raw(duk_hthread *thr, duk_hobject *ob
duk_small_uint_t elem_size;
h_bufobj = (duk_hbufobj *) obj;
- DUK_ASSERT_HBUFOBJ_VALID(h_bufobj);
+ DUK_HBUFOBJ_ASSERT_VALID(h_bufobj);
DUK_DDD(DUK_DDDPRINT("bufobj property get for key: %!O, arr_idx: %ld",
(duk_heaphdr *) key, (long) arr_idx));
@@ -56299,7 +57034,7 @@ DUK_LOCAL duk_bool_t duk__putprop_shallow_fastpath_array_tval(duk_hthread *thr,
DUK_ASSERT(!DUK_HEAPHDR_HAS_READONLY((duk_heaphdr *) obj)); /* caller ensures */
a = (duk_harray *) obj;
- DUK_ASSERT_HARRAY_VALID(a);
+ DUK_HARRAY_ASSERT_VALID(a);
#if defined(DUK_USE_FASTINT)
if (DUK_TVAL_IS_FASTINT(tv_key)) {
@@ -57389,7 +58124,7 @@ DUK_LOCAL duk_bool_t duk__handle_put_array_length(duk_hthread *thr, duk_hobject
DUK_ASSERT(DUK_HOBJECT_HAS_EXOTIC_ARRAY(obj));
DUK_ASSERT(DUK_HOBJECT_IS_ARRAY(obj));
a = (duk_harray *) obj;
- DUK_ASSERT_HARRAY_VALID(a);
+ DUK_HARRAY_ASSERT_VALID(a);
DUK_ASSERT(duk_is_valid_index(thr, -1));
@@ -57919,7 +58654,7 @@ DUK_INTERNAL duk_bool_t duk_hobject_putprop(duk_hthread *thr, duk_tval *tv_obj,
duk_small_uint_t elem_size;
h_bufobj = (duk_hbufobj *) curr;
- DUK_ASSERT_HBUFOBJ_VALID(h_bufobj);
+ DUK_HBUFOBJ_ASSERT_VALID(h_bufobj);
DUK_DD(DUK_DDPRINT("writable virtual property is in buffer object"));
@@ -58091,7 +58826,7 @@ DUK_INTERNAL duk_bool_t duk_hobject_putprop(duk_hthread *thr, duk_tval *tv_obj,
duk_harray *a;
a = (duk_harray *) orig;
- DUK_ASSERT_HARRAY_VALID(a);
+ DUK_HARRAY_ASSERT_VALID(a);
old_len = a->length;
@@ -58131,84 +58866,13 @@ DUK_INTERNAL duk_bool_t duk_hobject_putprop(duk_hthread *thr, duk_tval *tv_obj,
* tv_obj, tv_key, and tv_val are copies of the original inputs.
*/
- if (arr_idx != DUK__NO_ARRAY_INDEX &&
- DUK_HOBJECT_HAS_ARRAY_PART(orig)) {
- if (arr_idx < DUK_HOBJECT_GET_ASIZE(orig)) {
- goto no_array_growth;
- }
-
- /*
- * Array needs to grow, but we don't want it becoming too sparse.
- * If it were to become sparse, abandon array part, moving all
- * array entries into the entries part (for good).
- *
- * Since we don't keep track of actual density (used vs. size) of
- * the array part, we need to estimate somehow. The check is made
- * in two parts:
- *
- * - Check whether the resize need is small compared to the
- * current size (relatively); if so, resize without further
- * checking (essentially we assume that the original part is
- * "dense" so that the result would be dense enough).
- *
- * - Otherwise, compute the resize using an actual density
- * measurement based on counting the used array entries.
- */
-
- DUK_DDD(DUK_DDDPRINT("write to new array requires array resize, decide whether to do a "
- "fast resize without abandon check (arr_idx=%ld, old_size=%ld)",
- (long) arr_idx, (long) DUK_HOBJECT_GET_ASIZE(orig)));
-
- if (duk__abandon_array_slow_check_required(arr_idx, DUK_HOBJECT_GET_ASIZE(orig))) {
- duk_uint32_t old_used;
- duk_uint32_t old_size;
-
- DUK_DDD(DUK_DDDPRINT("=> fast check is NOT OK, do slow check for array abandon"));
-
- duk__compute_a_stats(thr, orig, &old_used, &old_size);
-
- DUK_DDD(DUK_DDDPRINT("abandon check, array stats: old_used=%ld, old_size=%ld, arr_idx=%ld",
- (long) old_used, (long) old_size, (long) arr_idx));
-
- /* Note: intentionally use approximations to shave a few instructions:
- * a_used = old_used (accurate: old_used + 1)
- * a_size = arr_idx (accurate: arr_idx + 1)
- */
- if (duk__abandon_array_density_check(old_used, arr_idx)) {
- DUK_DD(DUK_DDPRINT("write to new array entry beyond current length, "
- "decided to abandon array part (would become too sparse)"));
-
- /* abandoning requires a props allocation resize and
- * 'rechecks' the valstack, invalidating any existing
- * valstack value pointers!
- */
- duk__abandon_array_checked(thr, orig);
- DUK_ASSERT(!DUK_HOBJECT_HAS_ARRAY_PART(orig));
-
- goto write_to_entry_part;
- }
-
- DUK_DDD(DUK_DDDPRINT("=> decided to keep array part"));
- } else {
- DUK_DDD(DUK_DDDPRINT("=> fast resize is OK"));
+ if (arr_idx != DUK__NO_ARRAY_INDEX && DUK_HOBJECT_HAS_ARRAY_PART(orig)) {
+ tv = duk__obtain_arridx_slot(thr, arr_idx, orig);
+ if (tv == NULL) {
+ DUK_ASSERT(!DUK_HOBJECT_HAS_ARRAY_PART(orig));
+ goto write_to_entry_part;
}
- DUK_DD(DUK_DDPRINT("write to new array entry beyond current length, "
- "decided to extend current allocation"));
-
- duk__grow_props_for_array_item(thr, orig, arr_idx);
-
- no_array_growth:
-
- /* Note: assume array part is comprehensive, so that either
- * the write goes to the array part, or we've abandoned the
- * array above (and will not come here).
- */
-
- DUK_ASSERT(DUK_HOBJECT_HAS_ARRAY_PART(orig));
- DUK_ASSERT(arr_idx < DUK_HOBJECT_GET_ASIZE(orig));
-
- tv = DUK_HOBJECT_A_GET_VALUE_PTR(thr->heap, orig, arr_idx);
/* prev value must be unused, no decref */
DUK_ASSERT(DUK_TVAL_IS_UNUSED(tv));
DUK_TVAL_SET_TVAL(tv, tv_val);
@@ -58821,8 +59485,8 @@ DUK_INTERNAL void duk_hobject_define_property_internal(duk_hthread *thr, duk_hob
#endif
new_len = duk__to_new_array_length_checked(thr, DUK_GET_TVAL_NEGIDX(thr, -1));
((duk_harray *) obj)->length = new_len;
- DUK_D(DUK_DPRINT("internal define property for array .length: %ld -> %ld",
- (long) prev_len, (long) ((duk_harray *) obj)->length));
+ DUK_DD(DUK_DDPRINT("internal define property for array .length: %ld -> %ld",
+ (long) prev_len, (long) ((duk_harray *) obj)->length));
goto pop_exit;
}
DUK_DD(DUK_DDPRINT("property already exists but is virtual -> failure"));
@@ -58837,17 +59501,18 @@ DUK_INTERNAL void duk_hobject_define_property_internal(duk_hthread *thr, duk_hob
DUK_DDD(DUK_DDDPRINT("property does not exist, object has array part -> possibly extend array part and write value (assert attributes)"));
DUK_ASSERT(propflags == DUK_PROPDESC_FLAGS_WEC);
- /* always grow the array, no sparse / abandon support here */
- if (arr_idx >= DUK_HOBJECT_GET_ASIZE(obj)) {
- duk__grow_props_for_array_item(thr, obj, arr_idx);
+ tv1 = duk__obtain_arridx_slot(thr, arr_idx, obj);
+ if (tv1 == NULL) {
+ DUK_ASSERT(!DUK_HOBJECT_HAS_ARRAY_PART(obj));
+ goto write_to_entry_part;
}
- DUK_ASSERT(arr_idx < DUK_HOBJECT_GET_ASIZE(obj));
tv1 = DUK_HOBJECT_A_GET_VALUE_PTR(thr->heap, obj, arr_idx);
goto write_value;
}
}
+ write_to_entry_part:
DUK_DDD(DUK_DDDPRINT("property does not exist, object belongs in entry part -> allocate new entry and write value and attributes"));
e_idx = duk__hobject_alloc_entry_checked(thr, obj, key); /* increases key refcount */
DUK_ASSERT(e_idx >= 0);
@@ -58904,13 +59569,11 @@ DUK_INTERNAL void duk_hobject_define_property_internal_arridx(duk_hthread *thr,
DUK_DDD(DUK_DDDPRINT("define property to array part (property may or may not exist yet)"));
- /* always grow the array, no sparse / abandon support here */
- if (arr_idx >= DUK_HOBJECT_GET_ASIZE(obj)) {
- duk__grow_props_for_array_item(thr, obj, arr_idx);
+ tv1 = duk__obtain_arridx_slot(thr, arr_idx, obj);
+ if (tv1 == NULL) {
+ DUK_ASSERT(!DUK_HOBJECT_HAS_ARRAY_PART(obj));
+ goto write_slow;
}
-
- DUK_ASSERT(arr_idx < DUK_HOBJECT_GET_ASIZE(obj));
- tv1 = DUK_HOBJECT_A_GET_VALUE_PTR(thr->heap, obj, arr_idx);
tv2 = duk_require_tval(thr, -1);
DUK_TVAL_SET_TVAL_UPDREF(thr, tv1, tv2); /* side effects */
@@ -58919,6 +59582,7 @@ DUK_INTERNAL void duk_hobject_define_property_internal_arridx(duk_hthread *thr,
return;
}
+ write_slow:
DUK_DDD(DUK_DDDPRINT("define property fast path didn't work, use slow path"));
key = duk_push_uint_to_hstring(thr, (duk_uint_t) arr_idx);
@@ -58937,7 +59601,7 @@ DUK_INTERNAL void duk_hobject_define_property_internal_arridx(duk_hthread *thr,
DUK_INTERNAL duk_size_t duk_hobject_get_length(duk_hthread *thr, duk_hobject *obj) {
duk_double_t val;
- DUK_ASSERT_CTX_VALID(thr);
+ DUK_CTX_ASSERT_VALID(thr);
DUK_ASSERT(obj != NULL);
/* Fast path for Arrays. */
@@ -59316,7 +59980,7 @@ duk_bool_t duk_hobject_define_property_helper(duk_hthread *thr,
*/
a = (duk_harray *) obj;
- DUK_ASSERT_HARRAY_VALID(a);
+ DUK_HARRAY_ASSERT_VALID(a);
arrlen_old_len = a->length;
DUK_ASSERT(idx_value >= 0);
@@ -59357,7 +60021,7 @@ duk_bool_t duk_hobject_define_property_helper(duk_hthread *thr,
duk_harray *a;
a = (duk_harray *) obj;
- DUK_ASSERT_HARRAY_VALID(a);
+ DUK_HARRAY_ASSERT_VALID(a);
old_len = a->length;
@@ -59447,7 +60111,7 @@ duk_bool_t duk_hobject_define_property_helper(duk_hthread *thr,
if (arr_idx != DUK__NO_ARRAY_INDEX && DUK_HOBJECT_HAS_ARRAY_PART(obj)) {
DUK_DDD(DUK_DDDPRINT("accessor cannot go to array part, abandon array"));
- duk__abandon_array_checked(thr, obj);
+ duk__abandon_array_part(thr, obj);
}
/* write to entry part */
@@ -59489,17 +60153,22 @@ duk_bool_t duk_hobject_define_property_helper(duk_hthread *thr,
if (arr_idx != DUK__NO_ARRAY_INDEX && DUK_HOBJECT_HAS_ARRAY_PART(obj)) {
if (new_flags == DUK_PROPDESC_FLAGS_WEC) {
-#if 0
DUK_DDD(DUK_DDDPRINT("new data property attributes match array defaults, attempt to write to array part"));
- /* may become sparse...*/
-#endif
- /* XXX: handling for array part missing now; this doesn't affect
- * compliance but causes array entry writes using defineProperty()
- * to always abandon array part.
- */
+ tv2 = duk__obtain_arridx_slot(thr, arr_idx, obj);
+ if (tv2 == NULL) {
+ DUK_DDD(DUK_DDDPRINT("failed writing to array part, abandoned array"));
+ } else {
+ DUK_DDD(DUK_DDDPRINT("success in writing to array part"));
+ DUK_ASSERT(DUK_HOBJECT_HAS_ARRAY_PART(obj));
+ DUK_ASSERT(DUK_TVAL_IS_UNUSED(tv2));
+ DUK_TVAL_SET_TVAL(tv2, &tv);
+ DUK_TVAL_INCREF(thr, tv2);
+ goto success_exotics;
+ }
+ } else {
+ DUK_DDD(DUK_DDDPRINT("new data property cannot go to array part, abandon array"));
+ duk__abandon_array_part(thr, obj);
}
- DUK_DDD(DUK_DDDPRINT("new data property cannot go to array part, abandon array"));
- duk__abandon_array_checked(thr, obj);
/* fall through */
}
@@ -59676,7 +60345,7 @@ duk_bool_t duk_hobject_define_property_helper(duk_hthread *thr,
DUK_DDD(DUK_DDDPRINT("convert property to accessor property"));
if (curr.a_idx >= 0) {
DUK_DDD(DUK_DDDPRINT("property to convert is stored in an array entry, abandon array and re-lookup"));
- duk__abandon_array_checked(thr, obj);
+ duk__abandon_array_part(thr, obj);
duk_pop_unsafe(thr); /* remove old value */
rc = duk__get_own_propdesc_raw(thr, obj, key, arr_idx, &curr, DUK_GETDESC_FLAG_PUSH_VALUE);
DUK_UNREF(rc);
@@ -59832,7 +60501,7 @@ duk_bool_t duk_hobject_define_property_helper(duk_hthread *thr,
}
DUK_DDD(DUK_DDDPRINT("array index, new property attributes do not match array defaults, abandon array and re-lookup"));
- duk__abandon_array_checked(thr, obj);
+ duk__abandon_array_part(thr, obj);
duk_pop_unsafe(thr); /* remove old value */
rc = duk__get_own_propdesc_raw(thr, obj, key, arr_idx, &curr, DUK_GETDESC_FLAG_PUSH_VALUE);
DUK_UNREF(rc);
@@ -59858,7 +60527,7 @@ duk_bool_t duk_hobject_define_property_helper(duk_hthread *thr,
duk_harray *a;
a = (duk_harray *) obj;
DUK_DD(DUK_DDPRINT("Object.defineProperty() attribute update for duk_harray .length -> %02lx", (unsigned long) new_flags));
- DUK_ASSERT_HARRAY_VALID(a);
+ DUK_HARRAY_ASSERT_VALID(a);
if ((new_flags & DUK_PROPDESC_FLAGS_EC) != (curr.flags & DUK_PROPDESC_FLAGS_EC)) {
DUK_D(DUK_DPRINT("Object.defineProperty() attempt to change virtual array .length enumerable or configurable attribute, fail"));
goto fail_virtual;
@@ -59927,7 +60596,7 @@ duk_bool_t duk_hobject_define_property_helper(duk_hthread *thr,
duk_harray *a;
a = (duk_harray *) obj;
DUK_DD(DUK_DDPRINT("Object.defineProperty() value update for duk_harray .length -> %ld", (long) arrlen_new_len));
- DUK_ASSERT_HARRAY_VALID(a);
+ DUK_HARRAY_ASSERT_VALID(a);
a->length = arrlen_new_len;
} else {
goto fail_virtual; /* should not happen */
@@ -59959,7 +60628,7 @@ duk_bool_t duk_hobject_define_property_helper(duk_hthread *thr,
duk_harray *a;
a = (duk_harray *) obj;
- DUK_ASSERT_HARRAY_VALID(a);
+ DUK_HARRAY_ASSERT_VALID(a);
if (arridx_new_array_length > 0) {
/*
@@ -60153,13 +60822,13 @@ DUK_INTERNAL void duk_hobject_object_seal_freeze_helper(duk_hthread *thr, duk_ho
* for the same object; not likely).
*/
- duk__abandon_array_checked(thr, obj);
+ duk__abandon_array_part(thr, obj);
DUK_ASSERT(DUK_HOBJECT_GET_ASIZE(obj) == 0);
for (i = 0; i < DUK_HOBJECT_GET_ENEXT(obj); i++) {
duk_uint8_t *fp;
- /* since duk__abandon_array_checked() causes a resize, there should be no gaps in keys */
+ /* since duk__abandon_array_part() causes a resize, there should be no gaps in keys */
DUK_ASSERT(DUK_HOBJECT_E_GET_KEY(thr->heap, obj, i) != NULL);
/* avoid multiple computations of flags address; bypasses macros */
@@ -60173,7 +60842,7 @@ DUK_INTERNAL void duk_hobject_object_seal_freeze_helper(duk_hthread *thr, duk_ho
DUK_HOBJECT_CLEAR_EXTENSIBLE(obj);
- /* no need to compact since we already did that in duk__abandon_array_checked()
+ /* no need to compact since we already did that in duk__abandon_array_part()
* (regardless of whether an array part existed or not.
*/
@@ -60256,6 +60925,19 @@ DUK_INTERNAL duk_bool_t duk_hobject_object_is_sealed_frozen_helper(duk_hthread *
#undef DUK__VALSTACK_PROXY_LOOKUP
#undef DUK__VALSTACK_SPACE
/*
+ * duk_hstring assertion helpers.
+ */
+
+/* #include duk_internal.h -> already included */
+
+#if defined(DUK_USE_ASSERTIONS)
+
+DUK_INTERNAL void duk_hstring_assert_valid(duk_hstring *h) {
+ DUK_ASSERT(h != NULL);
+}
+
+#endif /* DUK_USE_ASSERTIONS */
+/*
* Misc support functions
*/
@@ -60633,7 +61315,7 @@ DUK_LOCAL void duk__duplicate_ram_global_object(duk_hthread *thr) {
DUK_HOBJECT_INCREF(thr, h_objenv);
DUK_D(DUK_DPRINT("duplicated global env: %!O", h_objenv));
- DUK_ASSERT_HOBJENV_VALID((duk_hobjenv *) h_objenv);
+ DUK_HOBJENV_ASSERT_VALID((duk_hobjenv *) h_objenv);
duk_pop_2(thr); /* Pop global object and global env. */
}
@@ -60819,7 +61501,7 @@ DUK_INTERNAL void duk_hthread_create_builtin_objects(duk_hthread *thr) {
DUK_HOBJECT_INCREF(thr, global);
DUK_ASSERT(env->has_this == 0);
- DUK_ASSERT_HOBJENV_VALID(env);
+ DUK_HOBJENV_ASSERT_VALID(env);
} else {
DUK_ASSERT(class_num != DUK_HOBJECT_CLASS_DECENV);
@@ -60874,6 +61556,7 @@ DUK_INTERNAL void duk_hthread_create_builtin_objects(duk_hthread *thr) {
DUK_ASSERT(!DUK_HOBJECT_HAS_COMPFUNC(h));
/* DUK_HOBJECT_FLAG_NATFUNC varies */
DUK_ASSERT(!DUK_HOBJECT_IS_THREAD(h));
+ DUK_ASSERT(!DUK_HOBJECT_IS_PROXY(h));
DUK_ASSERT(!DUK_HOBJECT_HAS_ARRAY_PART(h) || class_num == DUK_HOBJECT_CLASS_ARRAY);
/* DUK_HOBJECT_FLAG_STRICT varies */
DUK_ASSERT(!DUK_HOBJECT_HAS_NATFUNC(h) || /* all native functions have NEWENV */
@@ -61357,7 +62040,7 @@ DUK_INTERNAL void duk_hthread_create_builtin_objects(duk_hthread *thr) {
#if defined(DUK_USE_DEBUG_LEVEL) && (DUK_USE_DEBUG_LEVEL >= 1)
for (i = 0; i < DUK_NUM_ALL_BUILTINS; i++) {
DUK_DD(DUK_DDPRINT("built-in object %ld after initialization and compacting: %!@iO",
- (long) i, (duk_heaphdr *) duk_require_hobject(thr, i)));
+ (long) i, (duk_heaphdr *) duk_require_hobject(thr, (duk_idx_t) i)));
}
#endif
@@ -61675,7 +62358,7 @@ DUK_LOCAL void duk__activation_unwind_nofree_norz(duk_hthread *thr) {
duk_tval tv_tmp;
duk_hobject *h_tmp;
- tv_caller = duk_hobject_find_existing_entry_tval_ptr(thr->heap, func, DUK_HTHREAD_STRING_CALLER(thr));
+ tv_caller = duk_hobject_find_entry_tval_ptr_stridx(thr->heap, func, DUK_STRIDX_CALLER);
/* The act->prev_caller should only be set if the entry for 'caller'
* exists (as it is only set in that case, and the property is not
@@ -62073,6 +62756,17 @@ DUK_INTERNAL double duk_js_arith_pow(double x, double y) {
* Limit check helpers.
*/
+/* Check native stack space if DUK_USE_NATIVE_STACK_CHECK() defined. */
+DUK_INTERNAL void duk_native_stack_check(duk_hthread *thr) {
+#if defined(DUK_USE_NATIVE_STACK_CHECK)
+ if (DUK_USE_NATIVE_STACK_CHECK() != 0) {
+ DUK_ERROR_RANGE(thr, DUK_STR_NATIVE_STACK_LIMIT);
+ }
+#else
+ DUK_UNREF(thr);
+#endif
+}
+
/* Allow headroom for calls during error augmentation (see GH-191).
* We allow space for 10 additional recursions, with one extra
* for, e.g. a print() call at the deepest level, and an extra
@@ -62080,6 +62774,9 @@ DUK_INTERNAL double duk_js_arith_pow(double x, double y) {
*/
#define DUK__AUGMENT_CALL_RELAX_COUNT (10 + 2)
+/* Stack space required by call handling entry. */
+#define DUK__CALL_HANDLING_REQUIRE_STACK 8
+
DUK_LOCAL DUK_NOINLINE void duk__call_c_recursion_limit_check_slowpath(duk_hthread *thr) {
/* When augmenting an error, the effective limit is a bit higher.
* Check for it only if the fast path check fails.
@@ -62094,7 +62791,7 @@ DUK_LOCAL DUK_NOINLINE void duk__call_c_recursion_limit_check_slowpath(duk_hthre
#endif
DUK_D(DUK_DPRINT("call prevented because C recursion limit reached"));
- DUK_ERROR_RANGE(thr, DUK_STR_C_CALLSTACK_LIMIT);
+ DUK_ERROR_RANGE(thr, DUK_STR_NATIVE_STACK_LIMIT);
DUK_WO_NORETURN(return;);
}
@@ -62102,6 +62799,8 @@ DUK_LOCAL DUK_ALWAYS_INLINE void duk__call_c_recursion_limit_check(duk_hthread *
DUK_ASSERT(thr->heap->call_recursion_depth >= 0);
DUK_ASSERT(thr->heap->call_recursion_depth <= thr->heap->call_recursion_limit);
+ duk_native_stack_check(thr);
+
/* This check is forcibly inlined because it's very cheap and almost
* always passes. The slow path is forcibly noinline.
*/
@@ -62221,11 +62920,10 @@ DUK_LOCAL void duk__create_arguments_object(duk_hthread *thr,
DUK_ASSERT(i_argbase >= 0);
DUK_ASSERT(num_stack_args >= 0);
- duk_push_hobject(thr, func);
- duk_get_prop_stridx_short(thr, -1, DUK_STRIDX_INT_FORMALS);
- formals = duk_get_hobject(thr, -1);
+ formals = (duk_hobject *) duk_hobject_get_formals(thr, (duk_hobject *) func);
if (formals) {
- n_formals = (duk_idx_t) duk_get_length(thr, -1);
+ n_formals = (duk_idx_t) ((duk_harray *) formals)->length;
+ duk_push_hobject(thr, formals);
} else {
/* This shouldn't happen without tampering of internal
* properties: if a function accesses 'arguments', _Formals
@@ -62234,8 +62932,8 @@ DUK_LOCAL void duk__create_arguments_object(duk_hthread *thr,
*/
DUK_D(DUK_DPRINT("_Formals is undefined when creating arguments, use n_formals == 0"));
n_formals = 0;
+ duk_push_undefined(thr);
}
- duk_remove_m2(thr); /* leave formals on stack for later use */
i_formals = duk_require_top_index(thr);
DUK_ASSERT(n_formals >= 0);
@@ -62250,8 +62948,8 @@ DUK_LOCAL void duk__create_arguments_object(duk_hthread *thr,
/*
* Create required objects:
* - 'arguments' object: array-like, but not an array
- * - 'map' object: internal object, tied to 'arguments'
- * - 'mappedNames' object: temporary value used during construction
+ * - 'map' object: internal object, tied to 'arguments' (bare)
+ * - 'mappedNames' object: temporary value used during construction (bare)
*/
arg = duk_push_object_helper(thr,
@@ -62274,6 +62972,9 @@ DUK_LOCAL void duk__create_arguments_object(duk_hthread *thr,
i_arg = duk_get_top(thr) - 3;
i_map = i_arg + 1;
i_mappednames = i_arg + 2;
+ DUK_ASSERT(!duk_is_bare_object(thr, -3)); /* arguments */
+ DUK_ASSERT(duk_is_bare_object(thr, -2)); /* map */
+ DUK_ASSERT(duk_is_bare_object(thr, -1)); /* mappedNames */
/* [ ... formals arguments map mappedNames ] */
@@ -62393,7 +63094,7 @@ DUK_LOCAL void duk__create_arguments_object(duk_hthread *thr,
DUK_DDD(DUK_DDDPRINT("strict function, setting caller/callee to throwers"));
- duk_xdef_prop_stridx_thrower(thr, i_arg, DUK_STRIDX_CALLER);
+ /* In ES2017 .caller is no longer set at all. */
duk_xdef_prop_stridx_thrower(thr, i_arg, DUK_STRIDX_CALLEE);
} else {
DUK_DDD(DUK_DDDPRINT("non-strict function, setting callee to actual value"));
@@ -62661,7 +63362,8 @@ DUK_LOCAL void duk__handle_bound_chain_for_call(duk_hthread *thr,
DUK_ASSERT(func != NULL);
DUK_ASSERT(!DUK_HOBJECT_HAS_BOUNDFUNC(func));
DUK_ASSERT(DUK_HOBJECT_HAS_COMPFUNC(func) ||
- DUK_HOBJECT_HAS_NATFUNC(func));
+ DUK_HOBJECT_HAS_NATFUNC(func) ||
+ DUK_HOBJECT_IS_PROXY(func));
}
#endif
}
@@ -62956,6 +63658,7 @@ DUK_LOCAL void duk__handle_proxy_for_call(duk_hthread *thr, duk_idx_t idx_func,
duk_push_hobject(thr, h_proxy->target);
duk_insert(thr, idx_func + 3);
duk_pack(thr, duk_get_top(thr) - (idx_func + 5));
+ DUK_ASSERT(!duk_is_bare_object(thr, -1));
/* Here:
* idx_func + 0: Proxy object
@@ -63045,7 +63748,7 @@ DUK_LOCAL void duk__update_func_caller_prop(duk_hthread *thr, duk_hobject *func)
/* XXX: check .caller writability? */
/* Backup 'caller' property and update its value. */
- tv_caller = duk_hobject_find_existing_entry_tval_ptr(thr->heap, func, DUK_HTHREAD_STRING_CALLER(thr));
+ tv_caller = duk_hobject_find_entry_tval_ptr_stridx(thr->heap, func, DUK_STRIDX_CALLER);
if (tv_caller) {
/* If caller is global/eval code, 'caller' should be set to
* 'null'.
@@ -63232,6 +63935,8 @@ DUK_LOCAL duk_hobject *duk__resolve_target_func_and_this_binding(duk_hthread *th
tv_func = DUK_GET_TVAL_POSIDX(thr, idx_func);
DUK_ASSERT(tv_func != NULL);
+ DUK_DD(DUK_DDPRINT("target func: %!iT", tv_func));
+
if (DUK_TVAL_IS_OBJECT(tv_func)) {
func = DUK_TVAL_GET_OBJECT(tv_func);
@@ -63356,14 +64061,17 @@ DUK_LOCAL duk_hobject *duk__resolve_target_func_and_this_binding(duk_hthread *th
#if defined(DUK_USE_VERBOSE_ERRORS)
/* GETPROPC delayed error handling: when target is not callable,
- * GETPROPC replaces idx_func+0 with an Error (non-callable) with
- * a hidden Symbol to signify it's to be thrown as is here. The
+ * GETPROPC replaces idx_func+0 with a non-callable wrapper object
+ * with a hidden Symbol to signify it's to be handled here. If
+ * found, unwrap the original Error and throw it as is here. The
* hidden Symbol is only checked as an own property, not inherited
* (which would be dangerous).
*/
if (DUK_TVAL_IS_OBJECT(tv_func)) {
- if (duk_hobject_find_existing_entry_tval_ptr(thr->heap, DUK_TVAL_GET_OBJECT(tv_func), DUK_HTHREAD_STRING_INT_TARGET(thr)) != NULL) {
- duk_push_tval(thr, tv_func);
+ duk_tval *tv_wrap = duk_hobject_find_entry_tval_ptr_stridx(thr->heap, DUK_TVAL_GET_OBJECT(tv_func), DUK_STRIDX_INT_TARGET);
+ if (tv_wrap != NULL) {
+ DUK_DD(DUK_DDPRINT("delayed error from GETPROPC: %!T", tv_wrap));
+ duk_push_tval(thr, tv_wrap);
(void) duk_throw(thr);
DUK_WO_NORETURN(return NULL;);
}
@@ -63850,6 +64558,7 @@ DUK_LOCAL void duk__call_env_setup(duk_hthread *thr, duk_hobject *func, duk_acti
if (DUK_LIKELY(func != NULL)) {
if (DUK_LIKELY(DUK_HOBJECT_HAS_NEWENV(func))) {
+ DUK_STATS_INC(thr->heap, stats_envrec_newenv);
if (DUK_LIKELY(!DUK_HOBJECT_HAS_CREATEARGS(func))) {
/* Use a new environment but there's no 'arguments' object;
* delayed environment initialization. This is the most
@@ -63886,6 +64595,7 @@ DUK_LOCAL void duk__call_env_setup(duk_hthread *thr, duk_hobject *func, duk_acti
DUK_ASSERT(!DUK_HOBJECT_HAS_CREATEARGS(func));
+ DUK_STATS_INC(thr->heap, stats_envrec_oldenv);
duk__handle_oldenv_for_call(thr, func, act);
DUK_ASSERT(act->lex_env != NULL);
@@ -63895,6 +64605,7 @@ DUK_LOCAL void duk__call_env_setup(duk_hthread *thr, duk_hobject *func, duk_acti
/* Lightfuncs are always native functions and have "newenv". */
DUK_ASSERT(act->lex_env == NULL);
DUK_ASSERT(act->var_env == NULL);
+ DUK_STATS_INC(thr->heap, stats_envrec_newenv);
}
}
@@ -63981,7 +64692,7 @@ DUK_LOCAL duk_int_t duk__handle_call_raw(duk_hthread *thr,
/* Asserts for heap->curr_thread omitted: it may be NULL, 'thr', or
* any other thread (e.g. when heap thread is used to run finalizers).
*/
- DUK_ASSERT_CTX_VALID(thr);
+ DUK_CTX_ASSERT_VALID(thr);
DUK_ASSERT(duk_is_valid_index(thr, idx_func));
DUK_ASSERT(idx_func >= 0);
@@ -64064,6 +64775,26 @@ DUK_LOCAL duk_int_t duk__handle_call_raw(duk_hthread *thr,
duk__call_thread_state_update(thr);
/*
+ * Increase call recursion depth as early as possible so that if we
+ * enter a recursive call for any reason there's a backstop to native
+ * recursion. This can happen e.g. for almost any property read
+ * because it may cause a getter call or a Proxy trap (GC and finalizers
+ * are not an issue because they are not recursive). If we end up
+ * doing an Ecma-to-Ecma call, revert the increase. (See GH-2032.)
+ *
+ * For similar reasons, ensure there is a known value stack spare
+ * even before we actually prepare the value stack for the target
+ * function. If this isn't done, early recursion may consume the
+ * value stack space.
+ *
+ * XXX: Should bump yield preventcount early, for the same reason.
+ */
+
+ duk__call_c_recursion_limit_check(thr);
+ thr->heap->call_recursion_depth++;
+ duk_require_stack(thr, DUK__CALL_HANDLING_REQUIRE_STACK);
+
+ /*
* Resolve final target function; handle bound functions and special
* functions like .call() and .apply(). Also figure out the effective
* 'this' binding, which replaces the current value at idx_func + 1.
@@ -64206,6 +64937,7 @@ DUK_LOCAL duk_int_t duk__handle_call_raw(duk_hthread *thr,
DUK_ASSERT((act->flags & DUK_ACT_FLAG_PREVENT_YIELD) == 0);
DUK_REFZERO_CHECK_FAST(thr);
DUK_ASSERT(thr->ptr_curr_pc == NULL);
+ thr->heap->call_recursion_depth--; /* No recursion increase for this case. */
return 1; /* 1=reuse executor */
}
DUK_ASSERT(use_tailcall == 0);
@@ -64215,12 +64947,6 @@ DUK_LOCAL duk_int_t duk__handle_call_raw(duk_hthread *thr,
act->flags |= DUK_ACT_FLAG_PREVENT_YIELD;
thr->callstack_preventcount++;
- /* XXX: we could just do this on entry regardless of reuse, as long
- * as recursion depth is decreased for e2e case.
- */
- duk__call_c_recursion_limit_check(thr);
- thr->heap->call_recursion_depth++;
-
/* [ ... func this | arg1 ... argN ] ('this' must precede new bottom) */
/*
@@ -64255,12 +64981,6 @@ DUK_LOCAL duk_int_t duk__handle_call_raw(duk_hthread *thr,
act->flags |= DUK_ACT_FLAG_PREVENT_YIELD;
thr->callstack_preventcount++;
- /* XXX: we could just do this on entry regardless of reuse, as long
- * as recursion depth is decreased for e2e case.
- */
- duk__call_c_recursion_limit_check(thr);
- thr->heap->call_recursion_depth++;
-
/* For native calls must be NULL so we don't sync back */
DUK_ASSERT(thr->ptr_curr_pc == NULL);
@@ -64454,7 +65174,7 @@ DUK_LOCAL void duk__handle_safe_call_inner(duk_hthread *thr,
duk_ret_t rc;
DUK_ASSERT(thr != NULL);
- DUK_ASSERT_CTX_VALID(thr);
+ DUK_CTX_ASSERT_VALID(thr);
/*
* Thread state check and book-keeping.
@@ -64512,7 +65232,7 @@ DUK_LOCAL void duk__handle_safe_call_error(duk_hthread *thr,
duk_size_t entry_valstack_bottom_byteoff,
duk_jmpbuf *old_jmpbuf_ptr) {
DUK_ASSERT(thr != NULL);
- DUK_ASSERT_CTX_VALID(thr);
+ DUK_CTX_ASSERT_VALID(thr);
/*
* Error during call. The error value is at heap->lj.value1.
@@ -64604,7 +65324,7 @@ DUK_LOCAL void duk__handle_safe_call_shared_unwind(duk_hthread *thr,
duk_hthread *entry_curr_thread,
duk_instr_t **entry_ptr_curr_pc) {
DUK_ASSERT(thr != NULL);
- DUK_ASSERT_CTX_VALID(thr);
+ DUK_CTX_ASSERT_VALID(thr);
DUK_UNREF(idx_retbase);
DUK_UNREF(num_stack_rets);
DUK_UNREF(entry_curr_thread);
@@ -64863,64 +65583,78 @@ DUK_INTERNAL duk_int_t duk_handle_safe_call(duk_hthread *thr,
/*
* Property-based call (foo.noSuch()) error setup: replace target function
- * on stack top with a specially tagged (hidden Symbol) error which gets
- * thrown in call handling at the proper spot to follow ECMAScript semantics.
+ * on stack top with a hidden Symbol tagged non-callable wrapper object
+ * holding the error. The error gets thrown in call handling at the
+ * proper spot to follow ECMAScript semantics.
*/
#if defined(DUK_USE_VERBOSE_ERRORS)
-DUK_INTERNAL DUK_NOINLINE DUK_COLD void duk_call_setup_propcall_error(duk_hthread *thr, duk_tval *tv_targ, duk_tval *tv_base, duk_tval *tv_key) {
- const char *str1, *str2, *str3;
+DUK_INTERNAL DUK_NOINLINE DUK_COLD void duk_call_setup_propcall_error(duk_hthread *thr, duk_tval *tv_base, duk_tval *tv_key) {
+ const char *str_targ, *str_key, *str_base;
duk_idx_t entry_top;
entry_top = duk_get_top(thr);
- /* Must stabilize pointers first. Argument convention is a bit awkward,
- * it comes from the executor call site where some arguments may not be
- * on the value stack (consts).
- */
+ /* [ <nargs> target ] */
+
+ /* Must stabilize pointers first. tv_targ is already on stack top. */
duk_push_tval(thr, tv_base);
duk_push_tval(thr, tv_key);
- duk_push_tval(thr, tv_targ);
DUK_GC_TORTURE(thr->heap);
- /* We only push an error, replacing the call target (at idx_func)
- * with the error to ensure side effects come out correctly:
+ duk_push_bare_object(thr);
+
+ /* [ <nargs> target base key {} ] */
+
+ /* We only push a wrapped error, replacing the call target (at
+ * idx_func) with the error to ensure side effects come out
+ * correctly:
* - Property read
* - Call argument evaluation
- * - Callability check and error thrown.
+ * - Callability check and error thrown
*
- * A hidden Symbol on the error object pushed here is used by
+ * A hidden Symbol on the wrapper object pushed above is used by
* call handling to figure out the error is to be thrown as is.
* It is CRITICAL that the hidden Symbol can never occur on a
* user visible object that may get thrown.
*/
#if defined(DUK_USE_PARANOID_ERRORS)
- str1 = duk_get_type_name(thr, -1);
- str2 = duk_get_type_name(thr, -2);
- str3 = duk_get_type_name(thr, -3);
- duk_push_error_object(thr, DUK_ERR_TYPE_ERROR | DUK_ERRCODE_FLAG_NOBLAME_FILELINE, "%s not callable (property %s of %s)", str1, str2, str3);
-#else
- str1 = duk_push_string_readable(thr, -1);
- str2 = duk_push_string_readable(thr, -3);
- str3 = duk_push_string_readable(thr, -5);
- duk_push_error_object(thr, DUK_ERR_TYPE_ERROR | DUK_ERRCODE_FLAG_NOBLAME_FILELINE, "%s not callable (property %s of %s)", str1, str2, str3);
-#endif
-
- duk_push_true(thr);
- duk_put_prop_stridx(thr, -2, DUK_STRIDX_INT_TARGET); /* Marker property, reuse _Target. */
-
- /* [ <nregs> propValue <variable> error ] */
+ str_targ = duk_get_type_name(thr, -4);
+ str_key = duk_get_type_name(thr, -2);
+ str_base = duk_get_type_name(thr, -3);
+ duk_push_error_object(thr,
+ DUK_ERR_TYPE_ERROR | DUK_ERRCODE_FLAG_NOBLAME_FILELINE,
+ "%s not callable (property %s of %s)", str_targ, str_key, str_base);
+ duk_xdef_prop_stridx(thr, -2, DUK_STRIDX_INT_TARGET, DUK_PROPDESC_FLAGS_NONE); /* Marker property, reuse _Target. */
+ /* [ <nargs> target base key { _Target: error } ] */
duk_replace(thr, entry_top - 1);
+#else
+ str_targ = duk_push_string_readable(thr, -4);
+ str_key = duk_push_string_readable(thr, -3);
+ str_base = duk_push_string_readable(thr, -5);
+ duk_push_error_object(thr,
+ DUK_ERR_TYPE_ERROR | DUK_ERRCODE_FLAG_NOBLAME_FILELINE,
+ "%s not callable (property %s of %s)", str_targ, str_key, str_base);
+ /* [ <nargs> target base key {} str_targ str_key str_base error ] */
+ duk_xdef_prop_stridx(thr, -5, DUK_STRIDX_INT_TARGET, DUK_PROPDESC_FLAGS_NONE); /* Marker property, reuse _Target. */
+ /* [ <nargs> target base key { _Target: error } str_targ str_key str_base ] */
+ duk_swap(thr, -4, entry_top - 1);
+ /* [ <nargs> { _Target: error } base key target str_targ str_key str_base ] */
+#endif
+
+ /* [ <nregs> { _Target: error } <variable> */
duk_set_top(thr, entry_top);
+ /* [ <nregs> { _Target: error } */
DUK_ASSERT(!duk_is_callable(thr, -1)); /* Critical so that call handling will throw the error. */
}
#endif /* DUK_USE_VERBOSE_ERRORS */
/* automatic undefs */
#undef DUK__AUGMENT_CALL_RELAX_COUNT
+#undef DUK__CALL_HANDLING_REQUIRE_STACK
/*
* ECMAScript compiler.
*
@@ -65291,8 +66025,8 @@ DUK_LOCAL const duk_uint8_t duk__token_lbp[] = {
DUK__MK_LBP(DUK__BP_MULTIPLICATIVE), /* DUK_TOK_DIV */
DUK__MK_LBP(DUK__BP_MULTIPLICATIVE), /* DUK_TOK_MOD */
DUK__MK_LBP(DUK__BP_EXPONENTIATION), /* DUK_TOK_EXP */
- DUK__MK_LBP(DUK__BP_POSTFIX), /* DUK_TOK_INCREMENT */
- DUK__MK_LBP(DUK__BP_POSTFIX), /* DUK_TOK_DECREMENT */
+ DUK__MK_LBP_FLAGS(DUK__BP_POSTFIX, DUK__TOKEN_LBP_FLAG_NO_REGEXP), /* DUK_TOK_INCREMENT */
+ DUK__MK_LBP_FLAGS(DUK__BP_POSTFIX, DUK__TOKEN_LBP_FLAG_NO_REGEXP), /* DUK_TOK_DECREMENT */
DUK__MK_LBP(DUK__BP_SHIFT), /* DUK_TOK_ALSHIFT */
DUK__MK_LBP(DUK__BP_SHIFT), /* DUK_TOK_ARSHIFT */
DUK__MK_LBP(DUK__BP_SHIFT), /* DUK_TOK_RSHIFT */
@@ -65465,23 +66199,23 @@ DUK_LOCAL void duk__init_func_valstack_slots(duk_compiler_ctx *comp_ctx) {
DUK_BW_INIT_PUSHBUF(thr, &func->bw_code, DUK__BC_INITIAL_INSTS * sizeof(duk_compiler_instr));
/* code_idx = entry_top + 0 */
- duk_push_array(thr);
+ duk_push_bare_array(thr);
func->consts_idx = entry_top + 1;
func->h_consts = DUK_GET_HOBJECT_POSIDX(thr, entry_top + 1);
DUK_ASSERT(func->h_consts != NULL);
- duk_push_array(thr);
+ duk_push_bare_array(thr);
func->funcs_idx = entry_top + 2;
func->h_funcs = DUK_GET_HOBJECT_POSIDX(thr, entry_top + 2);
DUK_ASSERT(func->h_funcs != NULL);
DUK_ASSERT(func->fnum_next == 0);
- duk_push_array(thr);
+ duk_push_bare_array(thr);
func->decls_idx = entry_top + 3;
func->h_decls = DUK_GET_HOBJECT_POSIDX(thr, entry_top + 3);
DUK_ASSERT(func->h_decls != NULL);
- duk_push_array(thr);
+ duk_push_bare_array(thr);
func->labelnames_idx = entry_top + 4;
func->h_labelnames = DUK_GET_HOBJECT_POSIDX(thr, entry_top + 4);
DUK_ASSERT(func->h_labelnames != NULL);
@@ -65492,7 +66226,7 @@ DUK_LOCAL void duk__init_func_valstack_slots(duk_compiler_ctx *comp_ctx) {
DUK_ASSERT(func->h_labelinfos != NULL);
DUK_ASSERT(DUK_HBUFFER_HAS_DYNAMIC(func->h_labelinfos) && !DUK_HBUFFER_HAS_EXTERNAL(func->h_labelinfos));
- duk_push_array(thr);
+ duk_push_bare_array(thr);
func->argnames_idx = entry_top + 6;
func->h_argnames = DUK_GET_HOBJECT_POSIDX(thr, entry_top + 6);
DUK_ASSERT(func->h_argnames != NULL);
@@ -65703,7 +66437,7 @@ DUK_LOCAL void duk__convert_to_func_template(duk_compiler_ctx *comp_ctx) {
p_const = (duk_tval *) (void *) DUK_HBUFFER_FIXED_GET_DATA_PTR(thr->heap, h_data);
for (i = 0; i < consts_count; i++) {
DUK_ASSERT(i <= DUK_UARRIDX_MAX); /* const limits */
- tv = duk_hobject_find_existing_array_entry_tval_ptr(thr->heap, func->h_consts, (duk_uarridx_t) i);
+ tv = duk_hobject_find_array_entry_tval_ptr(thr->heap, func->h_consts, (duk_uarridx_t) i);
DUK_ASSERT(tv != NULL);
DUK_TVAL_SET_TVAL(p_const, tv);
p_const++;
@@ -65717,7 +66451,7 @@ DUK_LOCAL void duk__convert_to_func_template(duk_compiler_ctx *comp_ctx) {
for (i = 0; i < funcs_count; i++) {
duk_hobject *h;
DUK_ASSERT(i * 3 <= DUK_UARRIDX_MAX); /* func limits */
- tv = duk_hobject_find_existing_array_entry_tval_ptr(thr->heap, func->h_funcs, (duk_uarridx_t) (i * 3));
+ tv = duk_hobject_find_array_entry_tval_ptr(thr->heap, func->h_funcs, (duk_uarridx_t) (i * 3));
DUK_ASSERT(tv != NULL);
DUK_ASSERT(DUK_TVAL_IS_OBJECT(tv));
h = DUK_TVAL_GET_OBJECT(tv);
@@ -65959,7 +66693,7 @@ DUK_LOCAL void duk__convert_to_func_template(duk_compiler_ctx *comp_ctx) {
p = p_start;
while (p < p_end) {
- DUK_DDD(DUK_DDDPRINT("BC %04ld: %!I ; 0x%08lx op=%ld (%!C) a=%ld b=%ld c=%ld",
+ DUK_DDD(DUK_DDDPRINT("BC %04ld: %!I ; 0x%08lx op=%ld (%!X) a=%ld b=%ld c=%ld",
(long) (p - p_start),
(duk_instr_t) (*p),
(unsigned long) (*p),
@@ -66509,7 +67243,7 @@ DUK_LOCAL void duk__emit_abc(duk_compiler_ctx *comp_ctx, duk_small_uint_t op, du
goto error_outofregs;
}
ins = DUK_ENC_OP_ABC(op, abc);
- DUK_DDD(DUK_DDDPRINT("duk__emit_abc: 0x%08lx line=%ld pc=%ld op=%ld (%!C) abc=%ld (%!I)",
+ DUK_DDD(DUK_DDDPRINT("duk__emit_abc: 0x%08lx line=%ld pc=%ld op=%ld (%!X) abc=%ld (%!I)",
(unsigned long) ins, (long) comp_ctx->curr_token.start_line,
(long) duk__get_current_pc(comp_ctx), (long) op, (long) op,
(long) abc, (duk_instr_t) ins));
@@ -73885,7 +74619,7 @@ DUK_LOCAL void duk__set_catcher_regs_norz(duk_hthread *thr, duk_catcher *cat, du
DUK_TVAL_SET_U32_UPDREF_NORZ(thr, tv1, (duk_uint32_t) lj_type);
}
-DUK_LOCAL void duk__handle_catch(duk_hthread *thr, duk_tval *tv_val_unstable, duk_small_uint_t lj_type) {
+DUK_LOCAL void duk__handle_catch_part1(duk_hthread *thr, duk_tval *tv_val_unstable, duk_small_uint_t lj_type, volatile duk_bool_t *out_delayed_catch_setup) {
duk_activation *act;
duk_catcher *cat;
@@ -73894,9 +74628,17 @@ DUK_LOCAL void duk__handle_catch(duk_hthread *thr, duk_tval *tv_val_unstable, du
act = thr->callstack_curr;
DUK_ASSERT(act != NULL);
+ DUK_DD(DUK_DDPRINT("handle catch, part 1; act=%!A, cat=%!C", act, act->cat));
+
DUK_ASSERT(act->cat != NULL);
DUK_ASSERT(DUK_CAT_GET_TYPE(act->cat) == DUK_CAT_TYPE_TCF);
+ /* The part1/part2 split could also be made here at the very top
+ * of catch handling. Value stack would be reconfigured inside
+ * part2's protection. Value stack reconfiguration should be free
+ * of allocs, however.
+ */
+
duk__set_catcher_regs_norz(thr, act->cat, tv_val_unstable, lj_type);
DUK_ASSERT(thr->callstack_top >= 1);
@@ -73918,8 +74660,44 @@ DUK_LOCAL void duk__handle_catch(duk_hthread *thr, duk_tval *tv_val_unstable, du
act->curr_pc = cat->pc_base + 0; /* +0 = catch */
/*
- * If entering a 'catch' block which requires an automatic
- * catch variable binding, create the lexical environment.
+ * If the catch block has an automatic catch variable binding,
+ * we need to create a lexical environment for it which requires
+ * allocations. Move out of "error handling state" before the
+ * allocations to avoid e.g. out-of-memory errors (leading to
+ * GH-2022 or similar).
+ */
+
+ if (DUK_CAT_HAS_CATCH_BINDING_ENABLED(cat)) {
+ DUK_DDD(DUK_DDDPRINT("catcher has an automatic catch binding, handle in part 2"));
+ *out_delayed_catch_setup = 1;
+ } else {
+ DUK_DDD(DUK_DDDPRINT("catcher has no catch binding"));
+ }
+
+ DUK_CAT_CLEAR_CATCH_ENABLED(cat);
+}
+
+DUK_LOCAL void duk__handle_catch_part2(duk_hthread *thr) {
+ duk_activation *act;
+ duk_catcher *cat;
+ duk_hdecenv *new_env;
+
+ DUK_ASSERT(thr != NULL);
+
+ act = thr->callstack_curr;
+ DUK_ASSERT(act != NULL);
+ DUK_DD(DUK_DDPRINT("handle catch, part 2; act=%!A, cat=%!C", act, act->cat));
+
+ DUK_ASSERT(act->cat != NULL);
+ cat = act->cat;
+ DUK_ASSERT(cat != NULL);
+ DUK_ASSERT(DUK_CAT_GET_TYPE(cat) == DUK_CAT_TYPE_TCF);
+ DUK_ASSERT(DUK_CAT_HAS_CATCH_BINDING_ENABLED(cat));
+ DUK_ASSERT(thr->valstack + cat->idx_base < thr->valstack_top);
+
+ /*
+ * Create lexical environment for the catch clause, containing
+ * a binding for the caught value.
*
* The binding is mutable (= writable) but not deletable.
* Step 4 for the catch production in E5 Section 12.14;
@@ -73927,70 +74705,56 @@ DUK_LOCAL void duk__handle_catch(duk_hthread *thr, duk_tval *tv_val_unstable, du
* which implies the binding is not deletable.
*/
- if (DUK_CAT_HAS_CATCH_BINDING_ENABLED(cat)) {
- duk_hdecenv *new_env;
-
- DUK_DDD(DUK_DDDPRINT("catcher has an automatic catch binding"));
+ if (act->lex_env == NULL) {
+ DUK_ASSERT(act->var_env == NULL);
+ DUK_DDD(DUK_DDDPRINT("delayed environment initialization"));
- DUK_ASSERT(thr->callstack_top >= 1);
+ duk_js_init_activation_environment_records_delayed(thr, act);
DUK_ASSERT(act == thr->callstack_curr);
DUK_ASSERT(act != NULL);
+ }
+ DUK_ASSERT(act->lex_env != NULL);
+ DUK_ASSERT(act->var_env != NULL);
+ DUK_ASSERT(DUK_ACT_GET_FUNC(act) != NULL);
- if (act->lex_env == NULL) {
- DUK_ASSERT(act->var_env == NULL);
- DUK_DDD(DUK_DDDPRINT("delayed environment initialization"));
+ new_env = duk_hdecenv_alloc(thr,
+ DUK_HOBJECT_FLAG_EXTENSIBLE |
+ DUK_HOBJECT_CLASS_AS_FLAGS(DUK_HOBJECT_CLASS_DECENV));
+ DUK_ASSERT(new_env != NULL);
+ duk_push_hobject(thr, (duk_hobject *) new_env);
+ DUK_ASSERT(DUK_HOBJECT_GET_PROTOTYPE(thr->heap, (duk_hobject *) new_env) == NULL);
+ DUK_DDD(DUK_DDDPRINT("new_env allocated: %!iO", (duk_heaphdr *) new_env));
- duk_js_init_activation_environment_records_delayed(thr, act);
- DUK_ASSERT(act == thr->callstack_curr);
- DUK_ASSERT(act != NULL);
- }
- DUK_ASSERT(act->lex_env != NULL);
- DUK_ASSERT(act->var_env != NULL);
- DUK_ASSERT(DUK_ACT_GET_FUNC(act) != NULL);
+ /* Note: currently the catch binding is handled without a register
+ * binding because we don't support dynamic register bindings (they
+ * must be fixed for an entire function). So, there is no need to
+ * record regbases etc.
+ */
- /* XXX: If an out-of-memory happens here, longjmp state asserts
- * will be triggered at present and a try-catch fails to catch.
- * That's not sandboxing fatal (C API protected calls are what
- * matters), and script catch code can immediately throw anyway
- * for almost any operation.
- */
- new_env = duk_hdecenv_alloc(thr,
- DUK_HOBJECT_FLAG_EXTENSIBLE |
- DUK_HOBJECT_CLASS_AS_FLAGS(DUK_HOBJECT_CLASS_DECENV));
- DUK_ASSERT(new_env != NULL);
- duk_push_hobject(thr, (duk_hobject *) new_env);
- DUK_ASSERT(DUK_HOBJECT_GET_PROTOTYPE(thr->heap, (duk_hobject *) new_env) == NULL);
- DUK_DDD(DUK_DDDPRINT("new_env allocated: %!iO", (duk_heaphdr *) new_env));
+ /* [ ...env ] */
- /* Note: currently the catch binding is handled without a register
- * binding because we don't support dynamic register bindings (they
- * must be fixed for an entire function). So, there is no need to
- * record regbases etc.
- */
+ DUK_ASSERT(cat->h_varname != NULL);
+ duk_push_hstring(thr, cat->h_varname);
+ DUK_ASSERT(thr->valstack + cat->idx_base < thr->valstack_top);
+ duk_push_tval(thr, thr->valstack + cat->idx_base);
+ duk_xdef_prop(thr, -3, DUK_PROPDESC_FLAGS_W); /* writable, not configurable */
- /* XXX: duk_xdef_prop() may cause an out-of-memory, see above. */
- DUK_ASSERT(cat->h_varname != NULL);
- duk_push_hstring(thr, cat->h_varname);
- duk_push_tval(thr, thr->valstack + cat->idx_base);
- duk_xdef_prop(thr, -3, DUK_PROPDESC_FLAGS_W); /* writable, not configurable */
+ /* [ ... env ] */
- DUK_ASSERT(act == thr->callstack_curr);
- DUK_ASSERT(act != NULL);
- DUK_HOBJECT_SET_PROTOTYPE(thr->heap, (duk_hobject *) new_env, act->lex_env);
- act->lex_env = (duk_hobject *) new_env;
- DUK_HOBJECT_INCREF(thr, (duk_hobject *) new_env); /* reachable through activation */
- /* Net refcount change to act->lex_env is 0: incref for new_env's
- * prototype, decref for act->lex_env overwrite.
- */
-
- DUK_CAT_SET_LEXENV_ACTIVE(cat);
+ DUK_ASSERT(act == thr->callstack_curr);
+ DUK_ASSERT(act != NULL);
+ DUK_HOBJECT_SET_PROTOTYPE(thr->heap, (duk_hobject *) new_env, act->lex_env);
+ act->lex_env = (duk_hobject *) new_env;
+ DUK_HOBJECT_INCREF(thr, (duk_hobject *) new_env); /* reachable through activation */
+ /* Net refcount change to act->lex_env is 0: incref for new_env's
+ * prototype, decref for act->lex_env overwrite.
+ */
- duk_pop_unsafe(thr);
+ DUK_CAT_SET_LEXENV_ACTIVE(cat);
- DUK_DDD(DUK_DDDPRINT("new_env finished: %!iO", (duk_heaphdr *) new_env));
- }
+ duk_pop_unsafe(thr);
- DUK_CAT_CLEAR_CATCH_ENABLED(cat);
+ DUK_DDD(DUK_DDDPRINT("new_env finished: %!iO", (duk_heaphdr *) new_env));
}
DUK_LOCAL void duk__handle_finally(duk_hthread *thr, duk_tval *tv_val_unstable, duk_small_uint_t lj_type) {
@@ -74083,7 +74847,7 @@ DUK_LOCAL void duk__handle_yield(duk_hthread *thr, duk_hthread *resumer, duk_tva
}
#endif /* DUK_USE_COROUTINE_SUPPORT */
-DUK_LOCAL duk_small_uint_t duk__handle_longjmp(duk_hthread *thr, duk_activation *entry_act) {
+DUK_LOCAL duk_small_uint_t duk__handle_longjmp(duk_hthread *thr, duk_activation *entry_act, volatile duk_bool_t *out_delayed_catch_setup) {
duk_small_uint_t retval = DUK__LONGJMP_RESTART;
DUK_ASSERT(thr != NULL);
@@ -74106,11 +74870,12 @@ DUK_LOCAL duk_small_uint_t duk__handle_longjmp(duk_hthread *thr, duk_activation
check_longjmp:
- DUK_DD(DUK_DDPRINT("handling longjmp: type=%ld, value1=%!T, value2=%!T, iserror=%ld",
+ DUK_DD(DUK_DDPRINT("handling longjmp: type=%ld, value1=%!T, value2=%!T, iserror=%ld, top=%ld",
(long) thr->heap->lj.type,
(duk_tval *) &thr->heap->lj.value1,
(duk_tval *) &thr->heap->lj.value2,
- (long) thr->heap->lj.iserror));
+ (long) thr->heap->lj.iserror,
+ (long) duk_get_top(thr)));
switch (thr->heap->lj.type) {
@@ -74376,9 +75141,12 @@ DUK_LOCAL duk_small_uint_t duk__handle_longjmp(duk_hthread *thr, duk_activation
if (DUK_CAT_HAS_CATCH_ENABLED(cat)) {
DUK_ASSERT(DUK_CAT_GET_TYPE(cat) == DUK_CAT_TYPE_TCF);
- duk__handle_catch(thr,
- &thr->heap->lj.value1,
- DUK_LJ_TYPE_THROW);
+ DUK_DDD(DUK_DDDPRINT("before catch part 1: thr=%p, act=%p, cat=%p",
+ (void *) thr, (void *) act, (void *) act->cat));
+ duk__handle_catch_part1(thr,
+ &thr->heap->lj.value1,
+ DUK_LJ_TYPE_THROW,
+ out_delayed_catch_setup);
DUK_DD(DUK_DDPRINT("-> throw caught by a 'catch' clause, restart execution"));
retval = DUK__LONGJMP_RESTART;
@@ -74460,7 +75228,8 @@ DUK_LOCAL duk_small_uint_t duk__handle_longjmp(duk_hthread *thr, duk_activation
DUK_UNREACHABLE();
wipe_and_return:
- /* this is not strictly necessary, but helps debugging */
+ DUK_DD(DUK_DDPRINT("handling longjmp done, wipe-and-return, top=%ld",
+ (long) duk_get_top(thr)));
thr->heap->lj.type = DUK_LJ_TYPE_UNKNOWN;
thr->heap->lj.iserror = 0;
@@ -75078,7 +75847,7 @@ DUK_LOCAL void duk__executor_recheck_debugger(duk_hthread *thr, duk_activation *
bp_active = heap->dbg_breakpoints_active;
act->flags &= ~DUK_ACT_FLAG_BREAKPOINT_ACTIVE;
- tv_tmp = duk_hobject_find_existing_entry_tval_ptr(thr->heap, (duk_hobject *) fun, DUK_HTHREAD_STRING_FILE_NAME(thr));
+ tv_tmp = duk_hobject_find_entry_tval_ptr_stridx(thr->heap, (duk_hobject *) fun, DUK_STRIDX_FILE_NAME);
if (tv_tmp && DUK_TVAL_IS_STRING(tv_tmp)) {
filename = DUK_TVAL_GET_STRING(tv_tmp);
@@ -75359,7 +76128,7 @@ DUK_LOCAL DUK__NOINLINE_PERF void duk__handle_op_trycatch(duk_hthread *thr, duk_
env->target = target; /* always provideThis=true */
DUK_HOBJECT_INCREF(thr, target);
env->has_this = 1;
- DUK_ASSERT_HOBJENV_VALID(env);
+ DUK_HOBJENV_ASSERT_VALID(env);
DUK_DDD(DUK_DDDPRINT("environment for with binding: %!iO", env));
DUK_ASSERT(act == thr->callstack_curr);
@@ -75846,7 +76615,8 @@ DUK_LOCAL duk_bool_t duk__executor_handle_call(duk_hthread *thr, duk_idx_t idx,
DUK_LOCAL void duk__handle_executor_error(duk_heap *heap,
duk_activation *entry_act,
duk_int_t entry_call_recursion_depth,
- duk_jmpbuf *entry_jmpbuf_ptr) {
+ duk_jmpbuf *entry_jmpbuf_ptr,
+ volatile duk_bool_t *out_delayed_catch_setup) {
duk_small_uint_t lj_ret;
/* Longjmp callers are required to sync-and-null thr->ptr_curr_pc
@@ -75866,7 +76636,7 @@ DUK_LOCAL void duk__handle_executor_error(duk_heap *heap,
*/
heap->lj.jmpbuf_ptr = (duk_jmpbuf *) entry_jmpbuf_ptr;
- lj_ret = duk__handle_longjmp(heap->curr_thread, entry_act);
+ lj_ret = duk__handle_longjmp(heap->curr_thread, entry_act, out_delayed_catch_setup);
/* Error handling complete, remove side effect protections.
*/
@@ -75905,6 +76675,7 @@ DUK_INTERNAL void duk_js_execute_bytecode(duk_hthread *exec_thr) {
duk_jmpbuf *entry_jmpbuf_ptr;
duk_jmpbuf our_jmpbuf;
duk_heap *heap;
+ volatile duk_bool_t delayed_catch_setup = 0;
DUK_ASSERT(exec_thr != NULL);
DUK_ASSERT(exec_thr->heap != NULL);
@@ -75943,6 +76714,17 @@ DUK_INTERNAL void duk_js_execute_bytecode(duk_hthread *exec_thr) {
DUK_ASSERT(heap->lj.jmpbuf_ptr == &our_jmpbuf);
if (DUK_SETJMP(our_jmpbuf.jb) == 0) {
#endif
+ DUK_DDD(DUK_DDDPRINT("after setjmp, delayed catch setup: %ld\n", (long) delayed_catch_setup));
+
+ if (DUK_UNLIKELY(delayed_catch_setup != 0)) {
+ duk_hthread *thr = entry_thread->heap->curr_thread;
+
+ delayed_catch_setup = 0;
+ duk__handle_catch_part2(thr);
+ DUK_ASSERT(delayed_catch_setup == 0);
+ DUK_DDD(DUK_DDDPRINT("top after delayed catch setup: %ld", (long) duk_get_top(entry_thread)));
+ }
+
/* Execute bytecode until returned or longjmp(). */
duk__js_execute_bytecode_inner(entry_thread, entry_act);
@@ -75964,7 +76746,8 @@ DUK_INTERNAL void duk_js_execute_bytecode(duk_hthread *exec_thr) {
duk__handle_executor_error(heap,
entry_act,
entry_call_recursion_depth,
- entry_jmpbuf_ptr);
+ entry_jmpbuf_ptr,
+ &delayed_catch_setup);
}
#if defined(DUK_USE_CPP_EXCEPTIONS)
catch (duk_fatal_exception &exc) {
@@ -75987,7 +76770,8 @@ DUK_INTERNAL void duk_js_execute_bytecode(duk_hthread *exec_thr) {
duk__handle_executor_error(heap,
entry_act,
entry_call_recursion_depth,
- entry_jmpbuf_ptr);
+ entry_jmpbuf_ptr,
+ &delayed_catch_setup);
}
} catch (...) {
DUK_D(DUK_DPRINT("unexpected c++ exception (perhaps thrown by user code)"));
@@ -76002,7 +76786,8 @@ DUK_INTERNAL void duk_js_execute_bytecode(duk_hthread *exec_thr) {
duk__handle_executor_error(heap,
entry_act,
entry_call_recursion_depth,
- entry_jmpbuf_ptr);
+ entry_jmpbuf_ptr,
+ &delayed_catch_setup);
}
}
#endif
@@ -77182,7 +77967,7 @@ DUK_LOCAL DUK_NOINLINE DUK_HOT void duk__js_execute_bytecode_inner(duk_hthread *
* arguments to deal with potentially changed \
* valstack base pointer! \
*/ \
- duk_call_setup_propcall_error(thr, tv__targ, (barg), (carg)); \
+ duk_call_setup_propcall_error(thr, (barg), (carg)); \
} \
DUK__REPLACE_TOP_A_BREAK(); \
}
@@ -78396,7 +79181,8 @@ DUK_INTERNAL duk_bool_t duk_js_toboolean(duk_tval *tv) {
* ("0x123") and infinities
*
* - Unlike source code literals, ToNumber() coerces empty strings
- * and strings with only whitespace to zero (not NaN).
+ * and strings with only whitespace to zero (not NaN). However,
+ * while '' coerces to 0, '+' and '-' coerce to NaN.
*/
/* E5 Section 9.3.1 */
@@ -79834,6 +80620,7 @@ void duk_js_push_closure(duk_hthread *thr,
duk_hobject *outer_lex_env,
duk_bool_t add_auto_proto) {
duk_hcompfunc *fun_clos;
+ duk_harray *formals;
duk_small_uint_t i;
duk_uint_t len_value;
@@ -79845,6 +80632,8 @@ void duk_js_push_closure(duk_hthread *thr,
DUK_ASSERT(outer_lex_env != NULL);
DUK_UNREF(len_value);
+ DUK_STATS_INC(thr->heap, stats_envrec_pushclosure);
+
fun_clos = duk_push_hcompfunc(thr);
DUK_ASSERT(fun_clos != NULL);
DUK_ASSERT(DUK_HOBJECT_GET_PROTOTYPE(thr->heap, (duk_hobject *) fun_clos) == thr->builtins[DUK_BIDX_FUNCTION_PROTOTYPE]);
@@ -80040,6 +80829,11 @@ void duk_js_push_closure(duk_hthread *thr,
*
* The properties will be non-writable and non-enumerable, but
* configurable.
+ *
+ * Function templates are bare objects, so inheritance of internal
+ * Symbols is not an issue here even when using ordinary property
+ * reads. The function instance created is not bare, so internal
+ * Symbols must be defined without inheritance checks.
*/
/* [ ... closure template ] */
@@ -80050,7 +80844,7 @@ void duk_js_push_closure(duk_hthread *thr,
for (i = 0; i < (duk_small_uint_t) (sizeof(duk__closure_copy_proplist) / sizeof(duk_uint16_t)); i++) {
duk_small_int_t stridx = (duk_small_int_t) duk__closure_copy_proplist[i];
- if (duk_get_prop_stridx_short(thr, -1, stridx)) {
+ if (duk_xget_owndataprop_stridx_short(thr, -1, stridx)) {
/* [ ... closure template val ] */
DUK_DDD(DUK_DDDPRINT("copying property, stridx=%ld -> found", (long) stridx));
duk_xdef_prop_stridx_short(thr, -3, stridx, DUK_PROPDESC_FLAGS_C);
@@ -80069,18 +80863,14 @@ void duk_js_push_closure(duk_hthread *thr,
/* [ ... closure template ] */
- /* XXX: these lookups should be just own property lookups instead of
- * looking up the inheritance chain.
- */
- if (duk_get_prop_stridx_short(thr, -1, DUK_STRIDX_INT_FORMALS)) {
- /* [ ... closure template formals ] */
- len_value = (duk_uint_t) duk_get_length(thr, -1); /* could access duk_harray directly, not important */
+ formals = duk_hobject_get_formals(thr, (duk_hobject *) fun_temp);
+ if (formals) {
+ len_value = (duk_uint_t) formals->length;
DUK_DD(DUK_DDPRINT("closure length from _Formals -> %ld", (long) len_value));
} else {
len_value = fun_temp->nargs;
DUK_DD(DUK_DDPRINT("closure length defaulted from nargs -> %ld", (long) len_value));
}
- duk_pop_unsafe(thr);
duk_push_uint(thr, len_value); /* [ ... closure template len_value ] */
duk_xdef_prop_stridx_short(thr, -3, DUK_STRIDX_LENGTH, DUK_PROPDESC_FLAGS_C);
@@ -80206,6 +80996,29 @@ void duk_js_push_closure(duk_hthread *thr,
* The non-delayed initialization is handled by duk_handle_call().
*/
+DUK_LOCAL void duk__preallocate_env_entries(duk_hthread *thr, duk_hobject *varmap, duk_hobject *env) {
+ duk_uint_fast32_t i;
+
+ for (i = 0; i < (duk_uint_fast32_t) DUK_HOBJECT_GET_ENEXT(varmap); i++) {
+ duk_hstring *key;
+
+ key = DUK_HOBJECT_E_GET_KEY(thr->heap, varmap, i);
+ DUK_ASSERT(key != NULL); /* assume keys are compact in _Varmap */
+ DUK_ASSERT(!DUK_HOBJECT_E_SLOT_IS_ACCESSOR(thr->heap, varmap, i)); /* assume plain values */
+
+ /* Predefine as 'undefined' to reserve a property slot.
+ * This makes the unwind process (where register values
+ * are copied to the env object) safe against throwing.
+ *
+ * XXX: This could be made much faster by creating the
+ * property table directly.
+ */
+ duk_push_undefined(thr);
+ DUK_DDD(DUK_DDDPRINT("preallocate env entry for key %!O", key));
+ duk_hobject_define_property_internal(thr, env, key, DUK_PROPDESC_FLAGS_WE);
+ }
+}
+
/* shared helper */
DUK_INTERNAL
duk_hobject *duk_create_activation_environment_record(duk_hthread *thr,
@@ -80218,6 +81031,8 @@ duk_hobject *duk_create_activation_environment_record(duk_hthread *thr,
DUK_ASSERT(thr != NULL);
DUK_ASSERT(func != NULL);
+ DUK_STATS_INC(thr->heap, stats_envrec_create);
+
f = (duk_hcompfunc *) func;
parent = DUK_HCOMPFUNC_GET_LEXENV(thr->heap, f);
if (!parent) {
@@ -80241,18 +81056,19 @@ duk_hobject *duk_create_activation_environment_record(duk_hthread *thr,
DUK_ASSERT(env->regbase_byteoff == 0);
if (DUK_HOBJECT_IS_COMPFUNC(func)) {
duk_hobject *varmap;
- duk_tval *tv;
- tv = duk_hobject_find_existing_entry_tval_ptr(thr->heap, func, DUK_HTHREAD_STRING_INT_VARMAP(thr));
- if (tv != NULL && DUK_TVAL_IS_OBJECT(tv)) {
- DUK_ASSERT(DUK_TVAL_IS_OBJECT(tv));
- varmap = DUK_TVAL_GET_OBJECT(tv);
- DUK_ASSERT(varmap != NULL);
+ varmap = duk_hobject_get_varmap(thr, func);
+ if (varmap != NULL) {
env->varmap = varmap;
DUK_HOBJECT_INCREF(thr, varmap);
env->thread = thr;
DUK_HTHREAD_INCREF(thr, thr);
env->regbase_byteoff = bottom_byteoff;
+
+ /* Preallocate env property table to avoid potential
+ * for out-of-memory on unwind when the env is closed.
+ */
+ duk__preallocate_env_entries(thr, varmap, (duk_hobject *) env);
} else {
/* If function has no _Varmap, leave the environment closed. */
DUK_ASSERT(env->thread == NULL);
@@ -80283,6 +81099,8 @@ void duk_js_init_activation_environment_records_delayed(duk_hthread *thr,
DUK_ASSERT(act->lex_env == NULL);
DUK_ASSERT(act->var_env == NULL);
+ DUK_STATS_INC(thr->heap, stats_envrec_delayedcreate);
+
env = duk_create_activation_environment_record(thr, func, act->bottom_byteoff);
DUK_ASSERT(env != NULL);
/* 'act' is a stable pointer, so still OK. */
@@ -80336,7 +81154,7 @@ DUK_INTERNAL void duk_js_close_environment_record(duk_hthread *thr, duk_hobject
return;
}
DUK_ASSERT(((duk_hdecenv *) env)->thread != NULL);
- DUK_ASSERT_HDECENV_VALID((duk_hdecenv *) env);
+ DUK_HDECENV_ASSERT_VALID((duk_hdecenv *) env);
DUK_DDD(DUK_DDDPRINT("closing env: %!iO", (duk_heaphdr *) env));
DUK_DDD(DUK_DDDPRINT("varmap: %!O", (duk_heaphdr *) varmap));
@@ -80387,9 +81205,17 @@ DUK_INTERNAL void duk_js_close_environment_record(duk_hthread *thr, duk_hobject
DUK_ASSERT((duk_uint8_t *) thr->valstack + regbase_byteoff + sizeof(duk_tval) * regnum >= (duk_uint8_t *) thr->valstack);
DUK_ASSERT((duk_uint8_t *) thr->valstack + regbase_byteoff + sizeof(duk_tval) * regnum < (duk_uint8_t *) thr->valstack_top);
- /* If property already exists, overwrites silently.
+ /* Write register value into env as named properties.
+ * If property already exists, overwrites silently.
* Property is writable, but not deletable (not configurable
* in terms of property attributes).
+ *
+ * This property write must not throw because we're unwinding
+ * and unwind code is not allowed to throw at present. The
+ * call itself has no such guarantees, but we've preallocated
+ * entries for each property when the env was created, so no
+ * out-of-memory error should be possible. If this guarantee
+ * is not provided, problems like GH-476 may happen.
*/
duk_push_tval(thr, (duk_tval *) (void *) ((duk_uint8_t *) thr->valstack + regbase_byteoff + sizeof(duk_tval) * regnum));
DUK_DDD(DUK_DDDPRINT("closing identifier %!O -> reg %ld, value %!T",
@@ -80446,7 +81272,7 @@ duk_bool_t duk__getid_open_decl_env_regs(duk_hthread *thr,
DUK_ASSERT(out != NULL);
DUK_ASSERT(DUK_HOBJECT_IS_DECENV((duk_hobject *) env));
- DUK_ASSERT_HDECENV_VALID(env);
+ DUK_HDECENV_ASSERT_VALID(env);
if (env->thread == NULL) {
/* already closed */
@@ -80454,7 +81280,7 @@ duk_bool_t duk__getid_open_decl_env_regs(duk_hthread *thr,
}
DUK_ASSERT(env->varmap != NULL);
- tv = duk_hobject_find_existing_entry_tval_ptr(thr->heap, env->varmap, name);
+ tv = duk_hobject_find_entry_tval_ptr(thr->heap, env->varmap, name);
if (DUK_UNLIKELY(tv == NULL)) {
return 0;
}
@@ -80504,16 +81330,13 @@ duk_bool_t duk__getid_activation_regs(duk_hthread *thr,
return 0;
}
- /* XXX: move varmap to duk_hcompfunc struct field. */
- tv = duk_hobject_find_existing_entry_tval_ptr(thr->heap, func, DUK_HTHREAD_STRING_INT_VARMAP(thr));
- if (!tv) {
+ /* XXX: move varmap to duk_hcompfunc struct field? */
+ varmap = duk_hobject_get_varmap(thr, func);
+ if (!varmap) {
return 0;
}
- DUK_ASSERT(DUK_TVAL_IS_OBJECT(tv));
- varmap = DUK_TVAL_GET_OBJECT(tv);
- DUK_ASSERT(varmap != NULL);
- tv = duk_hobject_find_existing_entry_tval_ptr(thr->heap, varmap, name);
+ tv = duk_hobject_find_entry_tval_ptr(thr->heap, varmap, name);
if (!tv) {
return 0;
}
@@ -80660,7 +81483,7 @@ duk_bool_t duk__get_identifier_reference(duk_hthread *thr,
* register-bound variables.
*/
- DUK_ASSERT_HDECENV_VALID((duk_hdecenv *) env);
+ DUK_HDECENV_ASSERT_VALID((duk_hdecenv *) env);
if (duk__getid_open_decl_env_regs(thr, name, (duk_hdecenv *) env, out)) {
DUK_DDD(DUK_DDDPRINT("duk__get_identifier_reference successful: "
"name=%!O -> value=%!T, attrs=%ld, has_this=%ld, env=%!O, holder=%!O "
@@ -80671,7 +81494,7 @@ duk_bool_t duk__get_identifier_reference(duk_hthread *thr,
return 1;
}
- tv = duk_hobject_find_existing_entry_tval_ptr_and_attrs(thr->heap, env, name, &attrs);
+ tv = duk_hobject_find_entry_tval_ptr_and_attrs(thr->heap, env, name, &attrs);
if (tv) {
out->value = tv;
out->attrs = attrs;
@@ -80706,7 +81529,7 @@ duk_bool_t duk__get_identifier_reference(duk_hthread *thr,
duk_bool_t found;
DUK_ASSERT(cl == DUK_HOBJECT_CLASS_OBJENV);
- DUK_ASSERT_HOBJENV_VALID((duk_hobjenv *) env);
+ DUK_HOBJENV_ASSERT_VALID((duk_hobjenv *) env);
target = ((duk_hobjenv *) env)->target;
DUK_ASSERT(target != NULL);
@@ -81289,7 +82112,7 @@ duk_bool_t duk__declvar_helper(duk_hthread *thr,
/* must be found: was found earlier, and cannot be inherited */
for (;;) {
DUK_ASSERT(holder != NULL);
- if (duk_hobject_find_existing_entry(thr->heap, holder, name, &e_idx, &h_idx)) {
+ if (duk_hobject_find_entry(thr->heap, holder, name, &e_idx, &h_idx)) {
DUK_ASSERT(e_idx >= 0);
break;
}
@@ -81386,10 +82209,10 @@ duk_bool_t duk__declvar_helper(duk_hthread *thr,
*/
if (DUK_HOBJECT_IS_DECENV(env)) {
- DUK_ASSERT_HDECENV_VALID((duk_hdecenv *) env);
+ DUK_HDECENV_ASSERT_VALID((duk_hdecenv *) env);
holder = env;
} else {
- DUK_ASSERT_HOBJENV_VALID((duk_hobjenv *) env);
+ DUK_HOBJENV_ASSERT_VALID((duk_hobjenv *) env);
holder = ((duk_hobjenv *) env)->target;
DUK_ASSERT(holder != NULL);
}
@@ -85461,7 +86284,7 @@ DUK_LOCAL void duk__dragon4_ctx_to_double(duk__numconv_stringify_ctx *nc_ctx, du
* Output: [ string ]
*/
-DUK_INTERNAL void duk_numconv_stringify(duk_hthread *thr, duk_small_int_t radix, duk_small_int_t digits, duk_small_uint_t flags) {
+DUK_LOCAL DUK_NOINLINE void duk__numconv_stringify_raw(duk_hthread *thr, duk_small_int_t radix, duk_small_int_t digits, duk_small_uint_t flags) {
duk_double_t x;
duk_small_int_t c;
duk_small_int_t neg;
@@ -85654,6 +86477,11 @@ DUK_INTERNAL void duk_numconv_stringify(duk_hthread *thr, duk_small_int_t radix,
duk__dragon4_convert_and_push(nc_ctx, thr, radix, digits, flags, neg);
}
+DUK_INTERNAL void duk_numconv_stringify(duk_hthread *thr, duk_small_int_t radix, duk_small_int_t digits, duk_small_uint_t flags) {
+ duk_native_stack_check(thr);
+ duk__numconv_stringify_raw(thr, radix, digits, flags);
+}
+
/*
* Exposed string-to-number API
*
@@ -85664,7 +86492,7 @@ DUK_INTERNAL void duk_numconv_stringify(duk_hthread *thr, duk_small_int_t radix,
* fails due to an internal error, an InternalError is thrown.
*/
-DUK_INTERNAL void duk_numconv_parse(duk_hthread *thr, duk_small_int_t radix, duk_small_uint_t flags) {
+DUK_LOCAL DUK_NOINLINE void duk__numconv_parse_raw(duk_hthread *thr, duk_small_int_t radix, duk_small_uint_t flags) {
duk__numconv_stringify_ctx nc_ctx_alloc; /* large context; around 2kB now */
duk__numconv_stringify_ctx *nc_ctx = &nc_ctx_alloc;
duk_double_t res;
@@ -86014,10 +86842,17 @@ DUK_INTERNAL void duk_numconv_parse(duk_hthread *thr, duk_small_int_t radix, duk
goto parse_fail;
}
} else {
- /* empty ("") is allowed in some formats (e.g. Number(''), as zero */
+ /* Empty ("") is allowed in some formats (e.g. Number(''), as zero,
+ * but it must not have a leading +/- sign (GH-2019). Note that
+ * for Number(), h_str is already trimmed so we can check for zero
+ * length and still get Number(' + ') == NaN.
+ */
if ((flags & DUK_S2N_FLAG_ALLOW_EMPTY_AS_ZERO) == 0) {
DUK_DDD(DUK_DDDPRINT("parse failed: empty string not allowed (as zero)"));
goto parse_fail;
+ } else if (DUK_HSTRING_GET_BYTELEN(h_str) != 0) {
+ DUK_DDD(DUK_DDDPRINT("parse failed: no digits, but not empty (had a +/- sign)"));
+ goto parse_fail;
}
}
} else {
@@ -86186,6 +87021,11 @@ DUK_INTERNAL void duk_numconv_parse(duk_hthread *thr, duk_small_int_t radix, duk
DUK_WO_NORETURN(return;);
}
+DUK_INTERNAL void duk_numconv_parse(duk_hthread *thr, duk_small_int_t radix, duk_small_uint_t flags) {
+ duk_native_stack_check(thr);
+ duk__numconv_parse_raw(thr, radix, flags);
+}
+
/* automatic undefs */
#undef DUK__BI_MAX_PARTS
#undef DUK__BI_PRINT
@@ -86722,6 +87562,7 @@ DUK_LOCAL void duk__parse_disjunction(duk_re_compiler_ctx *re_ctx, duk_bool_t ex
DUK_ASSERT(out_atom_info != NULL);
+ duk_native_stack_check(re_ctx->thr);
if (re_ctx->recursion_depth >= re_ctx->recursion_limit) {
DUK_ERROR_RANGE(re_ctx->thr, DUK_STR_REGEXP_COMPILER_RECURSION_LIMIT);
DUK_WO_NORETURN(return;);
@@ -87636,6 +88477,7 @@ DUK_LOCAL duk_codepoint_t duk__inp_get_prev_cp(duk_re_matcher_ctx *re_ctx, const
*/
DUK_LOCAL const duk_uint8_t *duk__match_regexp(duk_re_matcher_ctx *re_ctx, const duk_uint8_t *pc, const duk_uint8_t *sp) {
+ duk_native_stack_check(re_ctx->thr);
if (re_ctx->recursion_depth >= re_ctx->recursion_limit) {
DUK_ERROR_RANGE(re_ctx->thr, DUK_STR_REGEXP_EXECUTOR_RECURSION_LIMIT);
DUK_WO_NORETURN(return NULL;);
@@ -88207,7 +89049,7 @@ DUK_LOCAL void duk__regexp_match_helper(duk_hthread *thr, duk_small_int_t force_
h_input = duk_to_hstring(thr, -1);
DUK_ASSERT(h_input != NULL);
- duk_get_prop_stridx_short(thr, -2, DUK_STRIDX_INT_BYTECODE); /* [ ... re_obj input ] -> [ ... re_obj input bc ] */
+ duk_xget_owndataprop_stridx_short(thr, -2, DUK_STRIDX_INT_BYTECODE); /* [ ... re_obj input ] -> [ ... re_obj input bc ] */
h_bytecode = duk_require_hstring(thr, -1); /* no regexp instance should exist without a non-configurable bytecode property */
DUK_ASSERT(h_bytecode != NULL);
@@ -88703,10 +89545,28 @@ DUK_LOCAL duk_uint_t duk__selftest_byte_order(void) {
DUK_LOCAL duk_uint_t duk__selftest_bswap_macros(void) {
duk_uint_t error_count = 0;
+ volatile duk_uint32_t x32_input, x32_output;
duk_uint32_t x32;
+ volatile duk_uint16_t x16_input, x16_output;
duk_uint16_t x16;
duk_double_union du;
duk_double_t du_diff;
+#if defined(DUK_BSWAP64)
+ volatile duk_uint64_t x64_input, x64_output;
+ duk_uint64_t x64;
+#endif
+
+ /* Cover both compile time and runtime bswap operations, as these
+ * may have different bugs.
+ */
+
+ x16_input = 0xbeefUL;
+ x16 = x16_input;
+ x16 = DUK_BSWAP16(x16);
+ x16_output = x16;
+ if (x16_output != (duk_uint16_t) 0xefbeUL) {
+ DUK__FAILED("DUK_BSWAP16");
+ }
x16 = 0xbeefUL;
x16 = DUK_BSWAP16(x16);
@@ -88714,12 +89574,36 @@ DUK_LOCAL duk_uint_t duk__selftest_bswap_macros(void) {
DUK__FAILED("DUK_BSWAP16");
}
+ x32_input = 0xdeadbeefUL;
+ x32 = x32_input;
+ x32 = DUK_BSWAP32(x32);
+ x32_output = x32;
+ if (x32_output != (duk_uint32_t) 0xefbeaddeUL) {
+ DUK__FAILED("DUK_BSWAP32");
+ }
+
x32 = 0xdeadbeefUL;
x32 = DUK_BSWAP32(x32);
if (x32 != (duk_uint32_t) 0xefbeaddeUL) {
DUK__FAILED("DUK_BSWAP32");
}
+#if defined(DUK_BSWAP64)
+ x64_input = DUK_U64_CONSTANT(0x8899aabbccddeeff);
+ x64 = x64_input;
+ x64 = DUK_BSWAP64(x64);
+ x64_output = x64;
+ if (x64_output != (duk_uint64_t) DUK_U64_CONSTANT(0xffeeddccbbaa9988)) {
+ DUK__FAILED("DUK_BSWAP64");
+ }
+
+ x64 = DUK_U64_CONSTANT(0x8899aabbccddeeff);
+ x64 = DUK_BSWAP64(x64);
+ if (x64 != (duk_uint64_t) DUK_U64_CONSTANT(0xffeeddccbbaa9988)) {
+ DUK__FAILED("DUK_BSWAP64");
+ }
+#endif
+
/* >>> struct.unpack('>d', '4000112233445566'.decode('hex'))
* (2.008366013071895,)
*/
@@ -89300,6 +90184,16 @@ DUK_INTERNAL DUK_ALWAYS_INLINE duk_double_t duk_tval_get_number_unpacked_fastint
#endif /* DUK_USE_FASTINT && DUK_USE_PACKED_TVAL */
#endif /* DUK_USE_FASTINT */
+
+/*
+ * Assertion helpers.
+ */
+
+#if defined(DUK_USE_ASSERTIONS)
+DUK_INTERNAL void duk_tval_assert_valid(duk_tval *tv) {
+ DUK_ASSERT(tv != NULL);
+}
+#endif
/*
* Unicode support tables automatically generated during build.
*/
@@ -89325,55 +90219,57 @@ DUK_INTERNAL DUK_ALWAYS_INLINE duk_double_t duk_tval_get_number_unpacked_fastint
* Automatically generated by extract_chars.py, do not edit!
*/
-const duk_uint8_t duk_unicode_ids_noa[1063] = {
+const duk_uint8_t duk_unicode_ids_noa[1116] = {
249,176,176,80,111,7,47,15,47,254,11,197,191,0,72,2,15,115,66,19,50,7,2,34,
-2,240,66,244,50,247,185,249,98,241,99,8,241,127,58,240,182,47,31,241,191,
+2,240,66,244,50,247,185,249,98,241,99,7,241,159,57,240,181,63,31,241,191,
21,18,245,50,15,1,24,27,35,15,2,2,240,239,15,244,156,15,10,241,26,21,6,240,
101,10,4,15,9,240,152,175,39,240,82,127,56,242,100,15,4,8,159,1,240,5,115,
19,240,98,98,4,52,15,2,14,18,47,0,27,9,85,19,240,98,98,18,18,31,17,50,15,5,
47,2,130,34,240,98,98,18,68,15,4,15,1,31,9,12,115,19,240,98,98,18,68,15,16,
18,47,1,15,3,2,84,34,52,18,2,20,20,36,191,8,15,38,114,34,240,114,240,4,15,
12,38,31,16,5,114,34,240,114,146,68,15,18,2,31,1,31,4,114,34,241,147,15,2,
-6,41,47,10,86,240,36,240,130,130,3,111,44,242,2,29,111,44,18,3,18,3,7,50,
-98,34,2,3,18,50,26,3,66,15,7,63,18,15,49,114,241,79,13,79,101,241,191,6,15,
-2,85,52,4,24,37,205,15,3,241,98,6,3,241,178,255,224,63,35,54,32,35,63,25,
-35,63,17,35,54,32,35,62,47,41,35,63,51,241,127,0,240,47,70,53,79,254,21,
-227,240,18,240,166,243,180,168,194,63,0,240,47,0,240,47,0,194,47,1,242,79,
-21,5,15,53,244,137,67,241,34,6,243,107,240,255,35,240,227,76,241,197,240,
-175,40,240,122,242,95,68,15,79,241,255,3,111,41,240,238,27,241,207,12,241,
-79,27,43,241,67,143,82,50,52,26,251,15,50,255,224,8,53,63,22,53,55,32,32,
-32,47,15,63,37,38,32,66,38,67,53,92,98,38,246,96,224,240,44,245,112,80,57,
-32,68,112,32,32,35,42,51,100,80,240,63,25,255,233,107,241,242,241,242,247,
-87,52,29,241,98,6,3,242,136,15,2,240,122,98,98,98,98,98,98,98,111,66,15,
-254,12,146,240,184,132,52,95,70,114,47,74,35,111,26,63,78,240,63,11,242,
-127,0,255,224,244,255,240,0,138,143,60,255,240,4,13,223,7,255,227,127,243,
-95,30,63,253,79,0,177,240,111,31,240,47,15,63,64,241,152,63,87,63,20,39,
-243,26,34,35,47,7,240,255,36,240,15,34,243,5,64,32,223,12,191,7,240,191,13,
-143,31,240,224,240,36,41,180,47,25,240,146,39,240,111,7,64,79,34,32,65,52,
-48,32,240,162,58,130,213,53,53,166,38,47,27,41,191,99,240,255,255,0,26,150,
-223,7,95,33,255,240,0,255,143,254,6,3,245,175,24,109,70,2,146,194,66,2,18,
-18,245,207,19,255,224,93,240,79,48,63,38,241,171,246,100,47,119,241,111,10,
-127,10,207,73,69,53,53,50,241,91,47,10,47,3,33,46,61,241,79,107,243,127,37,
-255,223,13,79,33,242,31,16,239,14,111,22,191,14,63,20,87,36,241,207,142,
-240,79,20,95,20,95,24,159,36,248,239,254,2,154,240,107,127,138,83,2,241,
-194,20,3,240,123,240,122,240,255,51,240,50,27,240,107,240,175,56,242,135,
-31,50,15,1,50,34,240,191,30,240,212,240,223,21,114,240,207,13,242,107,240,
-107,240,62,240,47,96,243,159,41,242,62,242,63,254,32,79,37,243,223,29,241,
-47,9,240,207,20,241,191,19,64,223,32,240,3,240,112,32,241,95,2,47,9,244,
-102,32,35,46,41,143,31,241,135,49,63,6,38,33,36,64,240,64,212,249,15,37,
-240,67,242,127,32,240,97,32,250,175,31,241,179,241,111,32,240,96,242,223,
-27,244,127,10,255,224,122,243,15,17,15,242,11,241,136,15,7,12,241,131,63,
-40,242,159,249,130,241,95,3,15,35,240,239,98,98,18,241,111,7,15,254,26,223,
-254,40,207,88,245,255,3,251,79,254,155,15,254,50,31,254,236,95,254,19,159,
-255,0,16,173,255,225,43,143,15,246,63,14,240,79,32,240,35,241,31,5,111,3,
-255,226,100,243,92,15,52,207,50,31,16,255,240,0,109,255,5,255,225,229,255,
-240,1,64,31,254,1,31,67,255,224,126,255,231,248,245,182,196,136,159,255,0,
-6,90,244,82,243,114,19,3,19,50,178,2,98,243,18,51,114,98,240,194,50,66,4,
-98,255,224,70,63,9,47,9,47,15,47,9,47,15,47,9,47,15,47,9,47,15,47,9,39,255,
-239,40,251,95,45,243,79,254,59,3,47,11,33,32,48,41,35,32,32,112,80,32,32,
-34,33,32,48,32,32,32,32,33,32,51,38,35,35,32,41,47,1,98,36,47,1,255,240,0,
-3,143,255,0,149,201,241,191,254,242,124,252,227,255,240,0,87,79,0,255,240,
-0,194,63,254,177,63,254,17,0,
+6,41,47,10,86,240,36,240,130,130,3,111,44,242,2,29,111,44,18,2,66,240,130,
+2,146,26,3,66,15,7,63,18,15,49,114,241,79,13,79,101,241,191,6,15,2,85,52,4,
+24,37,205,15,3,241,98,6,3,241,178,255,224,63,35,54,32,35,63,25,35,63,17,35,
+54,32,35,62,47,41,35,63,51,241,127,0,240,47,70,53,79,254,21,227,240,18,240,
+166,243,180,168,194,63,0,240,47,0,240,47,0,194,47,1,242,79,21,5,15,53,244,
+152,67,241,34,6,243,107,240,255,35,240,227,76,241,197,240,175,40,240,122,
+242,95,68,15,79,241,255,3,111,41,240,238,27,241,207,12,241,79,27,43,241,67,
+136,241,179,47,27,50,82,20,6,251,15,50,255,224,8,53,63,22,53,55,32,32,32,
+47,15,63,37,38,32,66,38,67,53,92,98,38,246,96,224,240,44,245,112,80,57,32,
+68,112,32,32,35,42,51,100,80,240,63,25,255,233,107,241,242,241,242,247,87,
+52,29,241,98,6,3,242,136,15,2,240,122,98,98,98,98,98,98,98,111,66,15,254,
+12,146,240,184,132,52,95,70,114,47,74,35,111,27,47,78,240,63,11,242,127,0,
+255,224,244,255,240,0,138,143,60,255,240,4,14,47,2,255,227,127,243,95,30,
+63,253,79,0,177,240,111,31,240,47,15,63,64,241,152,63,87,63,37,52,242,42,
+34,35,47,7,240,255,36,240,15,34,243,5,64,33,207,12,191,7,240,191,13,143,31,
+240,224,240,36,41,180,47,25,240,146,39,240,111,7,64,79,34,32,65,52,48,32,
+240,162,58,130,213,53,53,166,38,47,27,43,159,99,240,255,255,0,26,150,223,7,
+95,33,255,240,0,255,143,254,6,3,245,175,24,109,70,2,146,194,66,2,18,18,245,
+207,19,255,224,93,240,79,48,63,38,241,171,246,100,47,119,241,111,10,127,10,
+207,73,69,53,53,50,241,91,47,10,47,3,33,46,61,241,79,107,243,127,37,255,
+223,13,79,33,242,31,16,239,14,111,22,191,14,63,20,87,36,241,207,142,240,79,
+20,95,20,95,24,159,36,248,239,254,2,154,240,107,127,138,83,2,241,194,20,3,
+240,123,240,122,240,255,51,240,50,27,240,107,240,175,56,242,135,31,50,15,1,
+50,34,240,223,28,240,212,240,223,21,114,240,207,13,242,107,240,107,240,62,
+240,47,96,243,159,41,242,62,242,62,241,79,254,13,15,13,176,159,6,248,207,7,
+223,37,243,223,29,241,47,9,240,207,20,240,240,207,19,64,223,32,240,3,240,
+112,32,241,95,2,47,9,244,102,32,35,46,41,143,31,241,135,49,63,6,38,33,36,
+64,240,64,212,249,15,37,240,67,240,96,241,47,32,240,97,32,250,175,31,241,
+179,241,111,32,240,96,242,223,27,224,243,159,11,253,127,28,246,111,48,241,
+16,249,39,63,23,240,32,32,240,224,191,24,128,240,112,207,30,240,80,241,79,
+41,255,152,47,21,240,48,242,63,14,246,38,33,47,22,240,112,240,181,33,47,16,
+240,0,255,224,59,240,63,254,0,31,254,40,207,88,245,255,3,251,79,254,155,15,
+254,50,31,254,236,95,254,19,159,255,0,16,173,255,225,43,143,15,246,63,14,
+240,79,32,240,35,241,31,5,111,3,255,225,164,243,15,114,243,182,15,52,207,
+50,18,15,14,255,240,0,110,169,255,225,229,255,240,1,64,31,254,1,31,35,47,3,
+57,255,224,126,255,231,248,245,182,196,136,159,255,0,6,90,244,82,243,114,
+19,3,19,50,178,2,98,243,18,51,114,98,240,194,50,66,4,98,255,224,70,63,9,47,
+9,47,15,47,9,47,15,47,9,47,15,47,9,47,15,47,9,39,255,232,40,241,219,111,2,
+15,254,6,95,28,255,228,8,251,95,45,243,72,15,254,58,131,47,11,33,32,48,41,
+35,32,32,112,80,32,32,34,33,32,48,32,32,32,32,33,32,51,38,35,35,32,41,47,1,
+98,36,47,1,255,240,0,3,143,255,0,149,201,241,191,254,242,124,252,227,255,
+240,0,87,79,0,255,240,0,194,63,254,177,63,254,17,0,
};
#else
/* IdentifierStart production with ASCII and non-BMP excluded */
@@ -89382,35 +90278,35 @@ const duk_uint8_t duk_unicode_ids_noa[1063] = {
* Automatically generated by extract_chars.py, do not edit!
*/
-const duk_uint8_t duk_unicode_ids_noabmp[626] = {
+const duk_uint8_t duk_unicode_ids_noabmp[625] = {
249,176,176,80,111,7,47,15,47,254,11,197,191,0,72,2,15,115,66,19,50,7,2,34,
-2,240,66,244,50,247,185,249,98,241,99,8,241,127,58,240,182,47,31,241,191,
+2,240,66,244,50,247,185,249,98,241,99,7,241,159,57,240,181,63,31,241,191,
21,18,245,50,15,1,24,27,35,15,2,2,240,239,15,244,156,15,10,241,26,21,6,240,
101,10,4,15,9,240,152,175,39,240,82,127,56,242,100,15,4,8,159,1,240,5,115,
19,240,98,98,4,52,15,2,14,18,47,0,27,9,85,19,240,98,98,18,18,31,17,50,15,5,
47,2,130,34,240,98,98,18,68,15,4,15,1,31,9,12,115,19,240,98,98,18,68,15,16,
18,47,1,15,3,2,84,34,52,18,2,20,20,36,191,8,15,38,114,34,240,114,240,4,15,
12,38,31,16,5,114,34,240,114,146,68,15,18,2,31,1,31,4,114,34,241,147,15,2,
-6,41,47,10,86,240,36,240,130,130,3,111,44,242,2,29,111,44,18,3,18,3,7,50,
-98,34,2,3,18,50,26,3,66,15,7,63,18,15,49,114,241,79,13,79,101,241,191,6,15,
-2,85,52,4,24,37,205,15,3,241,98,6,3,241,178,255,224,63,35,54,32,35,63,25,
-35,63,17,35,54,32,35,62,47,41,35,63,51,241,127,0,240,47,70,53,79,254,21,
-227,240,18,240,166,243,180,168,194,63,0,240,47,0,240,47,0,194,47,1,242,79,
-21,5,15,53,244,137,67,241,34,6,243,107,240,255,35,240,227,76,241,197,240,
-175,40,240,122,242,95,68,15,79,241,255,3,111,41,240,238,27,241,207,12,241,
-79,27,43,241,67,143,82,50,52,26,251,15,50,255,224,8,53,63,22,53,55,32,32,
-32,47,15,63,37,38,32,66,38,67,53,92,98,38,246,96,224,240,44,245,112,80,57,
-32,68,112,32,32,35,42,51,100,80,240,63,25,255,233,107,241,242,241,242,247,
-87,52,29,241,98,6,3,242,136,15,2,240,122,98,98,98,98,98,98,98,111,66,15,
-254,12,146,240,184,132,52,95,70,114,47,74,35,111,26,63,78,240,63,11,242,
-127,0,255,224,244,255,240,0,138,143,60,255,240,4,13,223,7,255,227,127,243,
-95,30,63,253,79,0,177,240,111,31,240,47,15,63,64,241,152,63,87,63,20,39,
-243,26,34,35,47,7,240,255,36,240,15,34,243,5,64,32,223,12,191,7,240,191,13,
-143,31,240,224,240,36,41,180,47,25,240,146,39,240,111,7,64,79,34,32,65,52,
-48,32,240,162,58,130,213,53,53,166,38,47,27,41,191,99,240,255,255,0,26,150,
-223,7,95,33,255,240,0,255,143,254,6,3,245,175,24,109,70,2,146,194,66,2,18,
-18,245,207,19,255,224,93,240,79,48,63,38,241,171,246,100,47,119,241,111,10,
-127,10,207,73,69,53,53,50,0,
+6,41,47,10,86,240,36,240,130,130,3,111,44,242,2,29,111,44,18,2,66,240,130,
+2,146,26,3,66,15,7,63,18,15,49,114,241,79,13,79,101,241,191,6,15,2,85,52,4,
+24,37,205,15,3,241,98,6,3,241,178,255,224,63,35,54,32,35,63,25,35,63,17,35,
+54,32,35,62,47,41,35,63,51,241,127,0,240,47,70,53,79,254,21,227,240,18,240,
+166,243,180,168,194,63,0,240,47,0,240,47,0,194,47,1,242,79,21,5,15,53,244,
+152,67,241,34,6,243,107,240,255,35,240,227,76,241,197,240,175,40,240,122,
+242,95,68,15,79,241,255,3,111,41,240,238,27,241,207,12,241,79,27,43,241,67,
+136,241,179,47,27,50,82,20,6,251,15,50,255,224,8,53,63,22,53,55,32,32,32,
+47,15,63,37,38,32,66,38,67,53,92,98,38,246,96,224,240,44,245,112,80,57,32,
+68,112,32,32,35,42,51,100,80,240,63,25,255,233,107,241,242,241,242,247,87,
+52,29,241,98,6,3,242,136,15,2,240,122,98,98,98,98,98,98,98,111,66,15,254,
+12,146,240,184,132,52,95,70,114,47,74,35,111,27,47,78,240,63,11,242,127,0,
+255,224,244,255,240,0,138,143,60,255,240,4,14,47,2,255,227,127,243,95,30,
+63,253,79,0,177,240,111,31,240,47,15,63,64,241,152,63,87,63,37,52,242,42,
+34,35,47,7,240,255,36,240,15,34,243,5,64,33,207,12,191,7,240,191,13,143,31,
+240,224,240,36,41,180,47,25,240,146,39,240,111,7,64,79,34,32,65,52,48,32,
+240,162,58,130,213,53,53,166,38,47,27,43,159,99,240,255,255,0,26,150,223,7,
+95,33,255,240,0,255,143,254,6,3,245,175,24,109,70,2,146,194,66,2,18,18,245,
+207,19,255,224,93,240,79,48,63,38,241,171,246,100,47,119,241,111,10,127,10,
+207,73,69,53,53,50,0,
};
#endif
@@ -89445,33 +90341,35 @@ const duk_uint8_t duk_unicode_ids_m_let_noabmp[24] = {
* Automatically generated by extract_chars.py, do not edit!
*/
-const duk_uint8_t duk_unicode_idp_m_ids_noa[549] = {
+const duk_uint8_t duk_unicode_idp_m_ids_noa[576] = {
255,225,243,246,15,254,0,116,255,191,29,32,33,33,32,243,170,242,47,15,112,
-245,118,53,49,35,57,240,144,241,15,11,244,218,240,25,241,56,241,67,40,34,
-36,241,210,246,173,47,17,242,130,47,2,38,177,57,240,50,242,160,38,49,50,
-160,177,57,240,50,242,160,36,81,50,64,240,107,64,194,242,160,39,34,34,240,
-97,57,181,34,242,160,38,49,50,145,177,57,240,64,242,212,66,35,160,240,9,
-240,35,242,198,34,35,129,193,57,240,50,242,160,38,34,35,129,193,57,240,35,
-242,145,38,34,35,160,177,57,240,65,243,128,85,32,39,121,49,242,240,54,215,
-41,244,144,53,33,197,57,243,1,121,192,32,32,81,242,63,4,33,106,47,20,160,
+245,118,53,49,35,57,240,144,241,15,11,244,218,240,25,241,56,160,240,163,40,
+34,36,241,210,246,158,47,17,242,130,47,2,38,177,57,240,50,242,160,38,49,50,
+160,177,57,240,0,50,242,160,36,81,50,64,240,107,64,194,242,160,39,34,34,
+240,97,57,181,34,242,160,38,49,50,145,177,57,240,64,242,212,66,35,160,240,
+9,240,36,242,182,34,35,129,193,57,240,50,242,160,38,34,35,129,193,57,240,
+35,242,145,38,34,35,160,177,57,240,65,243,128,85,32,39,121,49,242,240,54,
+215,41,244,144,56,197,57,243,1,121,192,32,32,81,242,63,4,33,106,47,20,160,
245,111,4,41,211,82,34,54,67,235,46,255,225,179,47,254,42,98,240,242,240,
241,241,1,243,47,16,160,57,241,50,57,245,209,241,64,246,139,91,185,247,41,
242,244,242,185,47,13,58,121,240,141,243,68,242,31,1,201,240,56,210,241,12,
-57,241,237,242,47,4,153,121,246,130,47,5,80,82,50,251,143,42,36,255,225,0,
+57,241,237,242,47,4,153,121,246,130,47,5,80,112,50,251,143,42,36,255,225,0,
31,35,31,5,15,109,197,4,191,254,175,34,247,240,245,47,16,255,225,30,95,91,
31,255,0,100,121,159,55,5,159,18,31,66,31,254,0,64,64,80,240,148,244,161,
-242,79,2,185,127,2,240,9,240,231,240,188,241,227,242,29,240,25,192,185,242,
+242,79,2,185,127,2,234,240,231,240,188,241,227,242,29,240,25,192,185,242,
29,208,145,57,241,50,242,64,34,49,97,32,241,180,97,253,231,33,57,255,240,3,
225,128,255,225,213,240,15,2,240,4,31,10,47,178,159,23,15,254,27,16,253,64,
-248,116,255,224,25,159,254,68,178,33,99,241,162,80,249,113,255,228,13,47,
-39,239,17,159,1,63,31,175,39,151,47,22,210,159,37,13,47,34,218,36,159,68,
-183,15,146,182,151,63,42,2,99,19,42,11,19,100,79,178,240,42,159,72,240,77,
-159,199,99,143,13,31,68,240,31,1,159,67,201,159,69,229,159,254,9,169,255,
-224,11,159,26,98,57,10,175,32,240,15,254,8,151,39,240,41,242,175,6,45,246,
-197,64,33,38,32,153,255,240,3,191,169,247,132,242,214,240,185,255,226,235,
-241,239,2,63,255,0,59,254,31,255,0,3,186,68,89,115,111,16,63,134,47,254,71,
-223,34,255,224,244,242,117,242,41,15,0,15,8,66,239,254,68,70,47,1,54,33,36,
-255,231,153,111,95,102,159,255,12,6,154,254,0,
+248,116,255,224,25,159,254,68,178,33,99,241,162,80,249,113,255,225,49,57,
+159,254,16,10,250,18,242,126,241,25,240,19,241,250,242,121,114,241,109,41,
+97,241,224,210,242,45,147,73,244,75,112,249,43,105,115,242,145,38,49,50,
+160,177,54,68,251,47,2,169,80,244,63,4,217,252,118,56,240,209,244,79,1,240,
+25,244,60,153,244,94,89,254,78,249,121,253,150,54,64,240,233,241,166,35,
+144,170,242,15,0,255,224,137,114,127,2,159,42,240,98,223,108,84,2,18,98,9,
+159,34,66,18,73,159,254,3,211,255,240,3,165,217,247,132,242,214,240,185,
+255,226,233,2,242,120,63,255,0,59,254,31,255,0,3,186,68,89,115,111,16,63,
+134,47,254,71,223,34,255,224,244,242,117,242,41,15,0,15,8,66,239,254,68,70,
+47,1,54,33,36,255,118,169,255,224,150,223,254,76,166,245,246,105,255,240,
+192,105,175,224,0,
};
#else
/* IdentifierPart production with IdentifierStart, ASCII, and non-BMP excluded */
@@ -89482,20 +90380,20 @@ const duk_uint8_t duk_unicode_idp_m_ids_noa[549] = {
const duk_uint8_t duk_unicode_idp_m_ids_noabmp[358] = {
255,225,243,246,15,254,0,116,255,191,29,32,33,33,32,243,170,242,47,15,112,
-245,118,53,49,35,57,240,144,241,15,11,244,218,240,25,241,56,241,67,40,34,
-36,241,210,246,173,47,17,242,130,47,2,38,177,57,240,50,242,160,38,49,50,
-160,177,57,240,50,242,160,36,81,50,64,240,107,64,194,242,160,39,34,34,240,
-97,57,181,34,242,160,38,49,50,145,177,57,240,64,242,212,66,35,160,240,9,
-240,35,242,198,34,35,129,193,57,240,50,242,160,38,34,35,129,193,57,240,35,
-242,145,38,34,35,160,177,57,240,65,243,128,85,32,39,121,49,242,240,54,215,
-41,244,144,53,33,197,57,243,1,121,192,32,32,81,242,63,4,33,106,47,20,160,
+245,118,53,49,35,57,240,144,241,15,11,244,218,240,25,241,56,160,240,163,40,
+34,36,241,210,246,158,47,17,242,130,47,2,38,177,57,240,50,242,160,38,49,50,
+160,177,57,240,0,50,242,160,36,81,50,64,240,107,64,194,242,160,39,34,34,
+240,97,57,181,34,242,160,38,49,50,145,177,57,240,64,242,212,66,35,160,240,
+9,240,36,242,182,34,35,129,193,57,240,50,242,160,38,34,35,129,193,57,240,
+35,242,145,38,34,35,160,177,57,240,65,243,128,85,32,39,121,49,242,240,54,
+215,41,244,144,56,197,57,243,1,121,192,32,32,81,242,63,4,33,106,47,20,160,
245,111,4,41,211,82,34,54,67,235,46,255,225,179,47,254,42,98,240,242,240,
241,241,1,243,47,16,160,57,241,50,57,245,209,241,64,246,139,91,185,247,41,
242,244,242,185,47,13,58,121,240,141,243,68,242,31,1,201,240,56,210,241,12,
-57,241,237,242,47,4,153,121,246,130,47,5,80,82,50,251,143,42,36,255,225,0,
+57,241,237,242,47,4,153,121,246,130,47,5,80,112,50,251,143,42,36,255,225,0,
31,35,31,5,15,109,197,4,191,254,175,34,247,240,245,47,16,255,225,30,95,91,
31,255,0,100,121,159,55,5,159,18,31,66,31,254,0,64,64,80,240,148,244,161,
-242,79,2,185,127,2,240,9,240,231,240,188,241,227,242,29,240,25,192,185,242,
+242,79,2,185,127,2,234,240,231,240,188,241,227,242,29,240,25,192,185,242,
29,208,145,57,241,50,242,64,34,49,97,32,241,180,97,253,231,33,57,255,240,3,
225,128,255,225,213,240,15,2,240,4,31,10,47,178,159,23,0,
};
@@ -89512,102 +90410,106 @@ const duk_uint8_t duk_unicode_idp_m_ids_noabmp[358] = {
* Automatically generated by extract_caseconv.py, do not edit!
*/
-const duk_uint8_t duk_unicode_caseconv_uc[1386] = {
-144,3,128,3,0,184,7,192,6,192,112,35,242,199,224,64,74,192,49,32,128,162,
+const duk_uint8_t duk_unicode_caseconv_uc[1411] = {
+152,3,128,3,0,184,7,192,6,192,112,35,242,199,224,64,74,192,49,32,128,162,
128,108,65,1,189,129,254,131,3,173,3,136,6,7,98,7,34,68,15,12,14,140,72,30,
-104,28,112,32,67,0,65,4,0,138,0,128,4,1,88,65,76,83,9,252,9,248,6,28,131,4,
-33,4,62,0,62,16,32,124,64,124,96,48,249,0,249,64,129,243,1,243,129,3,232,3,
-233,1,135,216,7,218,4,15,184,15,221,2,31,114,31,200,8,62,236,63,180,8,125,
-224,127,224,16,251,208,255,80,33,247,193,255,160,67,246,3,247,0,135,244,7,
-246,1,15,240,15,244,2,33,112,33,96,32,73,160,73,108,104,176,192,176,1,121,
-104,0,133,2,106,183,1,58,10,31,232,63,228,38,162,1,1,1,0,48,2,102,2,100,12,
-4,232,4,228,64,10,88,10,81,112,23,160,23,144,96,48,96,48,64,128,104,64,104,
-1,128,218,0,217,130,1,206,1,205,16,3,190,3,188,36,7,228,7,224,160,17,24,17,
-16,144,36,112,36,96,160,110,32,110,0,128,246,64,246,6,2,48,130,48,17,4,139,
-4,138,54,9,132,9,130,28,19,68,19,65,128,240,8,240,4,177,234,17,234,6,3,234,
-35,235,33,11,26,11,25,193,150,64,150,64,50,44,236,44,235,5,76,131,76,128,
-94,154,6,154,0,117,57,29,57,16,122,115,58,115,35,244,239,84,239,32,169,223,
-233,223,130,211,200,211,200,2,167,151,167,150,21,79,107,79,104,8,112,26,
-208,26,192,64,56,160,56,128,192,113,128,113,1,128,249,0,248,130,2,128,1,
-166,4,7,240,7,238,8,177,204,177,200,16,96,49,0,48,224,128,110,64,110,1,1,
-51,83,213,2,0,48,35,192,35,176,64,77,32,50,192,139,73,196,49,193,127,48,2,
-212,14,112,3,252,5,224,4,196,1,36,5,252,1,76,6,0,9,12,6,72,6,68,6,84,7,216,
-6,100,6,96,6,104,8,244,6,120,8,128,6,160,6,156,6,252,7,220,7,116,6,56,7,
-204,7,196,9,64,177,188,9,68,177,180,9,72,177,192,9,76,6,4,9,80,6,24,9,100,
-6,60,9,108,6,64,9,114,158,172,9,128,6,76,9,134,158,176,9,140,6,80,9,150,
-158,52,9,160,6,92,9,172,177,136,9,178,158,180,9,196,177,184,9,200,6,116,9,
-212,6,124,9,244,177,144,10,30,158,196,10,32,6,184,10,36,9,16,10,48,9,20,10,
-72,6,220,10,118,158,200,10,122,158,192,13,20,14,100,13,220,13,216,14,176,
-14,24,15,8,14,140,15,48,14,48,15,64,14,72,15,68,14,96,15,84,14,152,15,88,
-14,128,15,92,15,60,15,192,14,104,15,196,14,132,15,200,15,228,15,204,13,252,
-15,212,14,84,19,60,19,0,114,0,16,72,114,4,16,80,114,8,16,120,114,20,16,136,
-114,24,16,168,114,28,17,136,114,34,153,40,117,230,157,244,117,244,177,140,
-122,108,121,128,126,248,14,100,127,148,127,176,133,56,132,200,134,16,134,
-12,177,132,177,128,177,148,8,232,177,152,8,248,179,204,179,202,158,50,158,
-46,173,78,158,207,48,6,252,0,166,0,166,2,147,1,94,0,39,0,248,64,9,64,97,
-128,114,24,28,200,24,64,24,8,29,134,7,74,6,16,6,2,11,15,2,154,130,169,15,
-75,64,9,0,102,35,210,240,2,160,24,64,244,196,0,174,6,20,61,51,0,44,129,133,
-15,77,64,8,32,87,195,234,16,29,40,24,152,250,150,7,74,6,38,6,0,62,169,129,
-210,129,137,129,128,143,171,96,116,160,98,96,104,67,240,16,248,64,28,200,
-252,12,62,18,7,50,63,5,15,133,1,204,143,193,195,225,96,115,35,240,144,248,
-96,28,200,252,44,62,26,7,50,63,13,15,135,1,204,143,195,195,225,224,115,35,
-241,16,248,64,28,200,252,76,62,18,7,50,63,21,15,133,1,204,143,197,195,225,
-96,115,35,241,144,248,96,28,200,252,108,62,26,7,50,63,29,15,135,1,204,143,
-199,195,225,224,115,35,242,16,249,64,28,200,252,140,62,82,7,50,63,37,15,
-149,1,204,143,201,195,229,96,115,35,242,144,249,96,28,200,252,172,62,90,7,
-50,63,45,15,151,1,204,143,203,195,229,224,115,35,243,16,249,64,28,200,252,
-204,62,82,7,50,63,53,15,149,1,204,143,205,195,229,96,115,35,243,144,249,96,
-28,200,252,236,62,90,7,50,63,61,15,151,1,204,143,207,195,229,224,115,35,
-244,16,251,64,28,200,253,12,62,210,7,50,63,69,15,181,1,204,143,209,195,237,
-96,115,35,244,144,251,96,28,200,253,44,62,218,7,50,63,77,15,183,1,204,143,
-211,195,237,224,115,35,245,16,251,64,28,200,253,76,62,210,7,50,63,85,15,
-181,1,204,143,213,195,237,96,115,35,245,144,251,96,28,200,253,108,62,218,7,
-50,63,93,15,183,1,204,143,215,195,237,224,115,35,246,80,253,208,28,200,253,
-156,7,34,7,50,63,105,1,195,1,204,143,219,64,114,32,104,67,246,248,28,136,
-26,16,28,200,253,228,7,34,7,50,63,133,15,229,1,204,143,225,192,114,224,115,
-35,248,144,28,72,28,200,254,52,7,46,6,132,63,143,129,203,129,161,1,204,143,
-230,64,114,224,115,35,250,88,28,200,24,64,24,0,254,158,7,50,6,16,6,2,63,
-173,1,204,129,161,15,235,224,115,32,97,0,104,67,252,88,29,40,24,64,24,0,
-255,30,7,74,6,16,6,2,63,201,1,208,129,137,143,243,64,116,160,104,67,252,
-248,29,40,24,64,26,16,255,148,63,244,7,50,63,231,1,212,129,204,143,250,64,
-113,224,115,35,254,208,29,72,26,16,255,190,7,82,6,132,7,50,63,249,1,212,
-129,204,253,128,64,8,192,8,223,96,48,2,48,2,79,216,20,0,140,0,153,246,7,
-128,35,0,35,0,36,253,130,96,8,192,8,192,9,159,96,176,2,152,2,167,216,52,0,
-166,0,169,246,39,2,162,2,163,125,138,64,168,128,166,191,98,176,42,32,41,
-223,216,180,10,156,10,141,246,47,2,162,2,158,128,
+104,28,112,32,67,0,65,4,0,138,0,128,4,1,88,65,76,83,8,104,14,72,43,16,253,
+28,189,6,39,240,39,224,24,114,12,16,132,16,248,0,248,64,129,241,1,241,128,
+195,228,3,229,2,7,204,7,206,4,15,160,15,164,6,31,96,31,104,16,62,224,63,
+116,8,125,200,127,32,32,251,176,254,208,33,247,129,255,128,67,239,67,253,
+64,135,223,7,254,129,15,216,15,220,2,31,208,31,216,4,63,192,63,208,8,133,
+192,133,128,129,38,129,37,177,162,195,2,192,5,229,160,2,20,9,170,220,4,232,
+40,127,160,255,144,154,136,4,4,4,0,192,9,152,9,144,48,19,160,19,145,0,41,
+96,41,69,192,94,128,94,65,128,193,128,193,2,1,161,1,160,6,3,104,3,102,8,7,
+56,7,52,64,14,248,14,240,144,31,144,31,130,128,68,96,68,66,64,145,192,145,
+130,129,184,129,184,2,3,217,3,216,24,8,194,8,192,68,18,44,18,40,216,38,16,
+38,8,112,77,16,77,6,3,192,35,192,18,199,168,71,168,24,15,168,143,172,132,
+44,104,44,103,6,89,2,89,0,200,179,176,179,172,21,50,13,50,1,122,104,26,104,
+1,212,228,116,228,65,233,204,233,204,143,211,189,83,188,130,167,127,167,
+126,11,79,35,79,32,10,158,94,158,88,85,61,173,61,160,97,192,107,64,107,1,0,
+226,128,226,3,1,198,1,196,6,3,228,3,226,8,10,0,6,152,16,31,192,31,184,34,
+199,50,199,32,65,128,196,0,195,130,1,185,1,184,4,4,205,79,84,8,0,192,143,0,
+142,193,1,52,128,203,2,45,39,16,199,5,253,0,11,80,57,192,15,240,23,128,19,
+16,4,144,23,240,5,48,24,0,36,48,25,32,25,16,25,80,31,96,25,144,25,128,25,
+160,35,208,25,224,34,0,26,128,26,112,27,240,31,112,29,208,24,224,31,48,31,
+16,37,2,198,240,37,18,198,208,37,34,199,0,37,48,24,16,37,64,24,96,37,144,
+24,240,37,176,25,0,37,202,122,176,38,0,25,48,38,26,122,192,38,48,25,64,38,
+90,120,208,38,128,25,112,38,178,198,32,38,202,122,208,39,18,198,224,39,32,
+25,208,39,80,25,240,39,210,198,64,40,42,124,80,40,122,123,16,40,128,26,224,
+40,144,36,64,40,192,36,80,41,32,27,112,41,218,123,32,41,234,123,0,52,80,57,
+144,55,112,55,96,58,192,56,96,60,32,58,48,60,192,56,192,61,0,57,32,61,16,
+57,128,61,80,58,96,61,96,58,0,61,112,60,240,63,0,57,160,63,16,58,16,63,32,
+63,144,63,48,55,240,63,80,57,80,76,240,76,1,200,0,65,33,200,16,65,65,200,
+32,65,225,200,80,66,33,200,96,66,161,200,112,70,33,200,138,100,161,215,154,
+119,209,215,210,198,49,216,234,124,97,233,177,230,1,251,224,57,145,254,81,
+254,194,20,226,19,34,24,66,24,50,198,18,198,2,198,80,35,162,198,96,35,226,
+207,50,207,42,120,202,120,186,121,74,124,74,124,58,124,42,181,58,123,60,
+192,27,240,2,152,2,152,10,76,5,120,0,156,3,225,0,37,1,134,1,200,96,115,32,
+97,0,96,32,118,24,29,40,24,64,24,8,44,60,10,106,10,164,61,45,0,36,1,152,
+143,75,192,10,128,97,3,211,16,2,184,24,80,244,204,0,178,6,20,61,53,0,32,
+129,95,15,168,64,116,160,98,99,234,88,29,40,24,152,24,0,250,166,7,74,6,38,
+6,2,62,173,129,210,129,137,129,161,15,192,67,225,0,115,35,240,48,248,72,28,
+200,252,20,62,20,7,50,63,7,15,133,129,204,143,194,67,225,128,115,35,240,
+176,248,104,28,200,252,52,62,28,7,50,63,15,15,135,129,204,143,196,67,225,0,
+115,35,241,48,248,72,28,200,252,84,62,20,7,50,63,23,15,133,129,204,143,198,
+67,225,128,115,35,241,176,248,104,28,200,252,116,62,28,7,50,63,31,15,135,
+129,204,143,200,67,229,0,115,35,242,48,249,72,28,200,252,148,62,84,7,50,63,
+39,15,149,129,204,143,202,67,229,128,115,35,242,176,249,104,28,200,252,180,
+62,92,7,50,63,47,15,151,129,204,143,204,67,229,0,115,35,243,48,249,72,28,
+200,252,212,62,84,7,50,63,55,15,149,129,204,143,206,67,229,128,115,35,243,
+176,249,104,28,200,252,244,62,92,7,50,63,63,15,151,129,204,143,208,67,237,
+0,115,35,244,48,251,72,28,200,253,20,62,212,7,50,63,71,15,181,129,204,143,
+210,67,237,128,115,35,244,176,251,104,28,200,253,52,62,220,7,50,63,79,15,
+183,129,204,143,212,67,237,0,115,35,245,48,251,72,28,200,253,84,62,212,7,
+50,63,87,15,181,129,204,143,214,67,237,128,115,35,245,176,251,104,28,200,
+253,116,62,220,7,50,63,95,15,183,129,204,143,217,67,247,64,115,35,246,112,
+28,136,28,200,253,164,7,12,7,50,63,109,1,200,129,161,15,219,224,114,32,104,
+64,115,35,247,144,28,136,28,200,254,20,63,148,7,50,63,135,1,203,129,204,
+143,226,64,113,32,115,35,248,208,28,184,26,16,254,62,7,46,6,132,7,50,63,
+153,1,203,129,204,143,233,96,115,32,97,0,96,3,250,120,28,200,24,64,24,8,
+254,180,7,50,6,132,63,175,129,204,129,132,1,161,15,241,96,116,160,97,0,96,
+3,252,120,29,40,24,64,24,8,255,36,7,66,6,38,63,205,1,210,129,161,15,243,
+224,116,160,97,0,104,67,254,80,255,208,28,200,255,156,7,82,7,50,63,233,1,
+199,129,204,143,251,64,117,32,104,67,254,248,29,72,26,16,28,200,255,228,7,
+82,7,51,246,1,0,35,0,35,125,128,192,8,192,9,63,96,80,2,48,2,103,216,30,0,
+140,0,140,0,147,246,9,128,35,0,35,0,38,125,130,192,10,96,10,159,96,208,2,
+152,2,167,216,156,10,136,10,141,246,41,2,162,2,154,253,138,192,168,128,167,
+127,98,208,42,112,42,55,216,188,10,136,10,122,
};
-const duk_uint8_t duk_unicode_caseconv_lc[680] = {
-152,3,0,3,128,184,6,192,7,192,112,24,144,37,96,64,54,32,81,64,128,226,0,
+const duk_uint8_t duk_unicode_caseconv_lc[706] = {
+160,3,0,3,128,184,6,192,7,192,112,24,144,37,96,64,54,32,81,64,128,226,0,
235,65,129,199,1,230,130,3,145,3,177,34,7,70,7,134,36,15,244,13,236,24,32,
0,34,129,0,65,0,67,4,0,166,32,172,41,132,40,11,64,19,9,208,85,184,80,19,
-240,19,248,12,62,16,62,0,32,124,96,124,64,48,249,64,249,0,129,243,129,243,
-1,3,233,3,232,1,135,218,7,216,4,15,196,15,192,8,31,152,31,144,16,63,80,63,
-64,32,126,224,126,192,16,253,208,251,128,33,252,129,247,32,131,251,3,250,0,
-135,246,135,221,129,15,244,15,240,2,31,234,31,122,4,63,240,62,240,8,127,
-232,125,240,17,11,1,11,129,2,75,98,77,3,69,128,5,134,11,203,31,128,143,193,
-127,144,255,160,154,140,4,0,4,4,192,9,144,9,152,48,19,144,19,161,0,41,64,
-41,101,192,94,64,94,129,128,193,0,193,130,1,160,1,161,6,3,102,3,104,8,7,44,
-7,48,72,14,240,14,248,144,31,32,31,48,64,63,0,63,37,0,136,128,136,196,129,
-35,1,35,133,3,112,3,113,4,7,176,7,178,48,17,128,17,132,136,36,80,36,89,176,
-76,16,76,32,224,154,0,154,44,7,128,7,128,101,143,80,15,80,176,31,89,31,81,
-8,88,206,88,208,12,178,0,178,5,145,103,89,103,96,42,100,10,100,18,244,208,
-20,208,35,169,200,169,200,195,211,153,83,153,159,167,121,167,122,5,78,253,
-78,254,22,158,66,158,68,21,60,181,60,184,170,123,74,123,80,67,0,211,1,64,2,
-1,172,1,173,4,3,136,3,140,12,7,20,7,24,16,31,184,31,192,34,199,34,199,48,
-65,128,195,128,196,2,1,184,1,185,5,79,84,4,204,8,0,192,101,128,154,65,1,29,
-129,30,2,16,199,45,39,5,251,240,23,128,15,240,24,16,37,48,24,96,37,64,24,
-224,29,208,24,240,37,144,25,0,37,176,25,16,25,32,25,48,38,0,25,64,38,48,25,
-112,38,128,25,128,25,144,25,208,39,32,25,240,39,80,26,112,26,128,26,224,40,
-128,27,112,41,32,31,16,31,48,31,96,25,80,31,112,27,240,34,0,25,224,35,162,
-198,80,35,208,25,160,35,226,198,96,36,48,24,0,36,64,40,144,36,80,40,192,55,
-96,55,112,55,240,63,48,56,96,58,192,56,192,60,192,60,240,61,112,63,64,59,
-128,63,144,63,32,76,0,76,241,233,224,13,241,251,193,251,49,252,193,252,49,
-254,193,254,81,255,193,255,50,18,96,60,146,18,160,6,178,18,176,14,82,19,34,
-20,226,24,50,24,66,198,2,198,18,198,32,38,178,198,49,215,210,198,64,39,210,
-198,208,37,18,198,224,39,18,198,240,37,2,199,0,37,34,207,34,207,58,119,209,
-215,154,120,186,120,202,120,208,38,90,122,176,37,202,122,192,38,26,122,208,
-38,202,123,0,41,234,123,16,40,122,123,32,41,218,123,58,181,48,32,38,16,3,
-72,24,56,
+240,19,248,12,57,32,33,160,172,114,244,67,244,24,248,64,248,0,129,241,129,
+241,0,195,229,3,228,2,7,206,7,204,4,15,164,15,160,6,31,104,31,96,16,63,16,
+63,0,32,126,96,126,64,64,253,64,253,0,129,251,129,251,0,67,247,67,238,0,
+135,242,7,220,130,15,236,15,232,2,31,218,31,118,4,63,208,63,192,8,127,168,
+125,232,16,255,192,251,192,33,255,161,247,192,68,44,4,46,4,9,45,137,52,13,
+22,0,22,24,47,44,126,2,63,5,254,67,254,130,106,48,16,0,16,19,0,38,64,38,96,
+192,78,64,78,132,0,165,0,165,151,1,121,1,122,6,3,4,3,6,8,6,128,6,132,24,13,
+152,13,160,32,28,176,28,193,32,59,192,59,226,64,124,128,124,193,0,252,0,
+252,148,2,34,2,35,18,4,140,4,142,20,13,192,13,196,16,30,192,30,200,192,70,
+0,70,18,32,145,64,145,102,193,48,65,48,131,130,104,2,104,176,30,0,30,1,150,
+61,64,61,66,192,125,100,125,68,33,99,57,99,64,50,200,2,200,22,69,157,101,
+157,128,169,144,41,144,75,211,64,83,64,142,167,34,167,35,15,78,101,78,102,
+126,157,230,157,232,21,59,245,59,248,90,121,10,121,16,84,242,212,242,226,
+169,237,41,237,67,12,3,76,5,0,8,6,176,6,180,16,14,32,14,48,48,28,80,28,96,
+64,126,224,127,0,139,28,139,28,193,6,3,14,3,16,8,6,224,6,228,21,61,80,19,
+48,32,3,1,150,2,105,4,4,118,4,120,8,67,28,180,156,23,240,192,94,0,63,192,
+96,64,148,192,97,128,149,0,99,128,119,64,99,192,150,64,100,0,150,192,100,
+64,100,128,100,192,152,0,101,0,152,192,101,192,154,0,102,0,102,64,103,64,
+156,128,103,192,157,64,105,192,106,0,107,128,162,0,109,192,164,128,124,64,
+124,192,125,128,101,64,125,192,111,192,136,0,103,128,142,139,25,64,143,64,
+102,128,143,139,25,128,144,192,96,0,145,0,162,64,145,64,163,0,221,128,221,
+192,223,192,252,192,225,128,235,0,227,0,243,0,243,192,245,192,253,0,238,0,
+254,64,252,129,48,1,51,199,167,128,55,199,239,7,236,199,243,7,240,199,251,
+7,249,71,255,7,252,200,73,128,242,72,74,128,26,200,74,192,57,72,76,136,83,
+136,96,200,97,11,24,11,24,75,24,128,154,203,24,199,95,75,25,0,159,75,27,64,
+148,75,27,128,156,75,27,192,148,11,28,0,148,139,60,139,60,233,223,71,94,
+105,226,233,227,41,227,64,153,105,234,192,151,41,235,0,152,105,235,64,155,
+41,236,0,167,169,236,64,161,233,236,128,167,105,236,234,212,233,240,169,
+240,233,241,41,229,41,241,64,160,169,241,135,99,128,128,152,64,13,32,96,
+224,
};
#if defined(DUK_USE_REGEXP_CANON_WORKAROUND)
@@ -89650,5797 +90552,5798 @@ const duk_uint16_t duk_unicode_re_canon_lookup[65536] = {
11373,11376,385,390,597,393,394,600,399,602,400,42923L,605,606,607,403,
42924L,610,404,612,42893L,42922L,615,407,406,42926L,11362,42925L,621,622,
412,624,11374,413,627,628,415,630,631,632,633,634,635,636,11364,638,639,
-422,641,642,425,644,645,646,42929L,430,580,433,434,581,653,654,655,656,657,
-439,659,660,661,662,663,664,665,666,667,668,42930L,42928L,671,672,673,674,
-675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,
-693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,
-711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,
-729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,
-747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,
-765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,
-783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,
-801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,
-819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,
-921,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,
-855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,
-873,874,875,876,877,878,879,880,880,882,882,884,885,886,886,888,889,890,
-1021,1022,1023,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,
-909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,
-927,928,929,930,931,932,933,934,935,936,937,938,939,902,904,905,906,944,
-913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,
-931,932,933,934,935,936,937,938,939,908,910,911,975,914,920,978,979,980,
-934,928,975,984,984,986,986,988,988,990,990,992,992,994,994,996,996,998,
-998,1000,1000,1002,1002,1004,1004,1006,1006,922,929,1017,895,1012,917,1014,
-1015,1015,1017,1018,1018,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,
-1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,
-1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,
-1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1040,1041,1042,
-1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,
-1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1024,
-1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,
-1120,1120,1122,1122,1124,1124,1126,1126,1128,1128,1130,1130,1132,1132,1134,
-1134,1136,1136,1138,1138,1140,1140,1142,1142,1144,1144,1146,1146,1148,1148,
-1150,1150,1152,1152,1154,1155,1156,1157,1158,1159,1160,1161,1162,1162,1164,
-1164,1166,1166,1168,1168,1170,1170,1172,1172,1174,1174,1176,1176,1178,1178,
-1180,1180,1182,1182,1184,1184,1186,1186,1188,1188,1190,1190,1192,1192,1194,
-1194,1196,1196,1198,1198,1200,1200,1202,1202,1204,1204,1206,1206,1208,1208,
-1210,1210,1212,1212,1214,1214,1216,1217,1217,1219,1219,1221,1221,1223,1223,
-1225,1225,1227,1227,1229,1229,1216,1232,1232,1234,1234,1236,1236,1238,1238,
-1240,1240,1242,1242,1244,1244,1246,1246,1248,1248,1250,1250,1252,1252,1254,
-1254,1256,1256,1258,1258,1260,1260,1262,1262,1264,1264,1266,1266,1268,1268,
-1270,1270,1272,1272,1274,1274,1276,1276,1278,1278,1280,1280,1282,1282,1284,
-1284,1286,1286,1288,1288,1290,1290,1292,1292,1294,1294,1296,1296,1298,1298,
-1300,1300,1302,1302,1304,1304,1306,1306,1308,1308,1310,1310,1312,1312,1314,
-1314,1316,1316,1318,1318,1320,1320,1322,1322,1324,1324,1326,1326,1328,1329,
-1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,
-1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,
-1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,
-1375,1376,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,
-1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,
-1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1415,1416,1417,1418,1419,
-1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,
-1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,
-1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,
-1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,
-1480,1481,1482,1483,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493,1494,
-1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,
-1510,1511,1512,1513,1514,1515,1516,1517,1518,1519,1520,1521,1522,1523,1524,
-1525,1526,1527,1528,1529,1530,1531,1532,1533,1534,1535,1536,1537,1538,1539,
-1540,1541,1542,1543,1544,1545,1546,1547,1548,1549,1550,1551,1552,1553,1554,
-1555,1556,1557,1558,1559,1560,1561,1562,1563,1564,1565,1566,1567,1568,1569,
-1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,
-1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,1595,1596,1597,1598,1599,
-1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,
-1615,1616,1617,1618,1619,1620,1621,1622,1623,1624,1625,1626,1627,1628,1629,
-1630,1631,1632,1633,1634,1635,1636,1637,1638,1639,1640,1641,1642,1643,1644,
-1645,1646,1647,1648,1649,1650,1651,1652,1653,1654,1655,1656,1657,1658,1659,
-1660,1661,1662,1663,1664,1665,1666,1667,1668,1669,1670,1671,1672,1673,1674,
-1675,1676,1677,1678,1679,1680,1681,1682,1683,1684,1685,1686,1687,1688,1689,
-1690,1691,1692,1693,1694,1695,1696,1697,1698,1699,1700,1701,1702,1703,1704,
-1705,1706,1707,1708,1709,1710,1711,1712,1713,1714,1715,1716,1717,1718,1719,
-1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,
-1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,
-1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,
-1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,
-1780,1781,1782,1783,1784,1785,1786,1787,1788,1789,1790,1791,1792,1793,1794,
-1795,1796,1797,1798,1799,1800,1801,1802,1803,1804,1805,1806,1807,1808,1809,
-1810,1811,1812,1813,1814,1815,1816,1817,1818,1819,1820,1821,1822,1823,1824,
-1825,1826,1827,1828,1829,1830,1831,1832,1833,1834,1835,1836,1837,1838,1839,
-1840,1841,1842,1843,1844,1845,1846,1847,1848,1849,1850,1851,1852,1853,1854,
-1855,1856,1857,1858,1859,1860,1861,1862,1863,1864,1865,1866,1867,1868,1869,
-1870,1871,1872,1873,1874,1875,1876,1877,1878,1879,1880,1881,1882,1883,1884,
-1885,1886,1887,1888,1889,1890,1891,1892,1893,1894,1895,1896,1897,1898,1899,
-1900,1901,1902,1903,1904,1905,1906,1907,1908,1909,1910,1911,1912,1913,1914,
-1915,1916,1917,1918,1919,1920,1921,1922,1923,1924,1925,1926,1927,1928,1929,
-1930,1931,1932,1933,1934,1935,1936,1937,1938,1939,1940,1941,1942,1943,1944,
-1945,1946,1947,1948,1949,1950,1951,1952,1953,1954,1955,1956,1957,1958,1959,
-1960,1961,1962,1963,1964,1965,1966,1967,1968,1969,1970,1971,1972,1973,1974,
-1975,1976,1977,1978,1979,1980,1981,1982,1983,1984,1985,1986,1987,1988,1989,
-1990,1991,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,
-2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,
-2020,2021,2022,2023,2024,2025,2026,2027,2028,2029,2030,2031,2032,2033,2034,
-2035,2036,2037,2038,2039,2040,2041,2042,2043,2044,2045,2046,2047,2048,2049,
-2050,2051,2052,2053,2054,2055,2056,2057,2058,2059,2060,2061,2062,2063,2064,
-2065,2066,2067,2068,2069,2070,2071,2072,2073,2074,2075,2076,2077,2078,2079,
-2080,2081,2082,2083,2084,2085,2086,2087,2088,2089,2090,2091,2092,2093,2094,
-2095,2096,2097,2098,2099,2100,2101,2102,2103,2104,2105,2106,2107,2108,2109,
-2110,2111,2112,2113,2114,2115,2116,2117,2118,2119,2120,2121,2122,2123,2124,
-2125,2126,2127,2128,2129,2130,2131,2132,2133,2134,2135,2136,2137,2138,2139,
-2140,2141,2142,2143,2144,2145,2146,2147,2148,2149,2150,2151,2152,2153,2154,
-2155,2156,2157,2158,2159,2160,2161,2162,2163,2164,2165,2166,2167,2168,2169,
-2170,2171,2172,2173,2174,2175,2176,2177,2178,2179,2180,2181,2182,2183,2184,
-2185,2186,2187,2188,2189,2190,2191,2192,2193,2194,2195,2196,2197,2198,2199,
-2200,2201,2202,2203,2204,2205,2206,2207,2208,2209,2210,2211,2212,2213,2214,
-2215,2216,2217,2218,2219,2220,2221,2222,2223,2224,2225,2226,2227,2228,2229,
-2230,2231,2232,2233,2234,2235,2236,2237,2238,2239,2240,2241,2242,2243,2244,
-2245,2246,2247,2248,2249,2250,2251,2252,2253,2254,2255,2256,2257,2258,2259,
-2260,2261,2262,2263,2264,2265,2266,2267,2268,2269,2270,2271,2272,2273,2274,
-2275,2276,2277,2278,2279,2280,2281,2282,2283,2284,2285,2286,2287,2288,2289,
-2290,2291,2292,2293,2294,2295,2296,2297,2298,2299,2300,2301,2302,2303,2304,
-2305,2306,2307,2308,2309,2310,2311,2312,2313,2314,2315,2316,2317,2318,2319,
-2320,2321,2322,2323,2324,2325,2326,2327,2328,2329,2330,2331,2332,2333,2334,
-2335,2336,2337,2338,2339,2340,2341,2342,2343,2344,2345,2346,2347,2348,2349,
-2350,2351,2352,2353,2354,2355,2356,2357,2358,2359,2360,2361,2362,2363,2364,
-2365,2366,2367,2368,2369,2370,2371,2372,2373,2374,2375,2376,2377,2378,2379,
-2380,2381,2382,2383,2384,2385,2386,2387,2388,2389,2390,2391,2392,2393,2394,
-2395,2396,2397,2398,2399,2400,2401,2402,2403,2404,2405,2406,2407,2408,2409,
-2410,2411,2412,2413,2414,2415,2416,2417,2418,2419,2420,2421,2422,2423,2424,
-2425,2426,2427,2428,2429,2430,2431,2432,2433,2434,2435,2436,2437,2438,2439,
-2440,2441,2442,2443,2444,2445,2446,2447,2448,2449,2450,2451,2452,2453,2454,
-2455,2456,2457,2458,2459,2460,2461,2462,2463,2464,2465,2466,2467,2468,2469,
-2470,2471,2472,2473,2474,2475,2476,2477,2478,2479,2480,2481,2482,2483,2484,
-2485,2486,2487,2488,2489,2490,2491,2492,2493,2494,2495,2496,2497,2498,2499,
-2500,2501,2502,2503,2504,2505,2506,2507,2508,2509,2510,2511,2512,2513,2514,
-2515,2516,2517,2518,2519,2520,2521,2522,2523,2524,2525,2526,2527,2528,2529,
-2530,2531,2532,2533,2534,2535,2536,2537,2538,2539,2540,2541,2542,2543,2544,
-2545,2546,2547,2548,2549,2550,2551,2552,2553,2554,2555,2556,2557,2558,2559,
-2560,2561,2562,2563,2564,2565,2566,2567,2568,2569,2570,2571,2572,2573,2574,
-2575,2576,2577,2578,2579,2580,2581,2582,2583,2584,2585,2586,2587,2588,2589,
-2590,2591,2592,2593,2594,2595,2596,2597,2598,2599,2600,2601,2602,2603,2604,
-2605,2606,2607,2608,2609,2610,2611,2612,2613,2614,2615,2616,2617,2618,2619,
-2620,2621,2622,2623,2624,2625,2626,2627,2628,2629,2630,2631,2632,2633,2634,
-2635,2636,2637,2638,2639,2640,2641,2642,2643,2644,2645,2646,2647,2648,2649,
-2650,2651,2652,2653,2654,2655,2656,2657,2658,2659,2660,2661,2662,2663,2664,
-2665,2666,2667,2668,2669,2670,2671,2672,2673,2674,2675,2676,2677,2678,2679,
-2680,2681,2682,2683,2684,2685,2686,2687,2688,2689,2690,2691,2692,2693,2694,
-2695,2696,2697,2698,2699,2700,2701,2702,2703,2704,2705,2706,2707,2708,2709,
-2710,2711,2712,2713,2714,2715,2716,2717,2718,2719,2720,2721,2722,2723,2724,
-2725,2726,2727,2728,2729,2730,2731,2732,2733,2734,2735,2736,2737,2738,2739,
-2740,2741,2742,2743,2744,2745,2746,2747,2748,2749,2750,2751,2752,2753,2754,
-2755,2756,2757,2758,2759,2760,2761,2762,2763,2764,2765,2766,2767,2768,2769,
-2770,2771,2772,2773,2774,2775,2776,2777,2778,2779,2780,2781,2782,2783,2784,
-2785,2786,2787,2788,2789,2790,2791,2792,2793,2794,2795,2796,2797,2798,2799,
-2800,2801,2802,2803,2804,2805,2806,2807,2808,2809,2810,2811,2812,2813,2814,
-2815,2816,2817,2818,2819,2820,2821,2822,2823,2824,2825,2826,2827,2828,2829,
-2830,2831,2832,2833,2834,2835,2836,2837,2838,2839,2840,2841,2842,2843,2844,
-2845,2846,2847,2848,2849,2850,2851,2852,2853,2854,2855,2856,2857,2858,2859,
-2860,2861,2862,2863,2864,2865,2866,2867,2868,2869,2870,2871,2872,2873,2874,
-2875,2876,2877,2878,2879,2880,2881,2882,2883,2884,2885,2886,2887,2888,2889,
-2890,2891,2892,2893,2894,2895,2896,2897,2898,2899,2900,2901,2902,2903,2904,
-2905,2906,2907,2908,2909,2910,2911,2912,2913,2914,2915,2916,2917,2918,2919,
-2920,2921,2922,2923,2924,2925,2926,2927,2928,2929,2930,2931,2932,2933,2934,
-2935,2936,2937,2938,2939,2940,2941,2942,2943,2944,2945,2946,2947,2948,2949,
-2950,2951,2952,2953,2954,2955,2956,2957,2958,2959,2960,2961,2962,2963,2964,
-2965,2966,2967,2968,2969,2970,2971,2972,2973,2974,2975,2976,2977,2978,2979,
-2980,2981,2982,2983,2984,2985,2986,2987,2988,2989,2990,2991,2992,2993,2994,
-2995,2996,2997,2998,2999,3000,3001,3002,3003,3004,3005,3006,3007,3008,3009,
-3010,3011,3012,3013,3014,3015,3016,3017,3018,3019,3020,3021,3022,3023,3024,
-3025,3026,3027,3028,3029,3030,3031,3032,3033,3034,3035,3036,3037,3038,3039,
-3040,3041,3042,3043,3044,3045,3046,3047,3048,3049,3050,3051,3052,3053,3054,
-3055,3056,3057,3058,3059,3060,3061,3062,3063,3064,3065,3066,3067,3068,3069,
-3070,3071,3072,3073,3074,3075,3076,3077,3078,3079,3080,3081,3082,3083,3084,
-3085,3086,3087,3088,3089,3090,3091,3092,3093,3094,3095,3096,3097,3098,3099,
-3100,3101,3102,3103,3104,3105,3106,3107,3108,3109,3110,3111,3112,3113,3114,
-3115,3116,3117,3118,3119,3120,3121,3122,3123,3124,3125,3126,3127,3128,3129,
-3130,3131,3132,3133,3134,3135,3136,3137,3138,3139,3140,3141,3142,3143,3144,
-3145,3146,3147,3148,3149,3150,3151,3152,3153,3154,3155,3156,3157,3158,3159,
-3160,3161,3162,3163,3164,3165,3166,3167,3168,3169,3170,3171,3172,3173,3174,
-3175,3176,3177,3178,3179,3180,3181,3182,3183,3184,3185,3186,3187,3188,3189,
-3190,3191,3192,3193,3194,3195,3196,3197,3198,3199,3200,3201,3202,3203,3204,
-3205,3206,3207,3208,3209,3210,3211,3212,3213,3214,3215,3216,3217,3218,3219,
-3220,3221,3222,3223,3224,3225,3226,3227,3228,3229,3230,3231,3232,3233,3234,
-3235,3236,3237,3238,3239,3240,3241,3242,3243,3244,3245,3246,3247,3248,3249,
-3250,3251,3252,3253,3254,3255,3256,3257,3258,3259,3260,3261,3262,3263,3264,
-3265,3266,3267,3268,3269,3270,3271,3272,3273,3274,3275,3276,3277,3278,3279,
-3280,3281,3282,3283,3284,3285,3286,3287,3288,3289,3290,3291,3292,3293,3294,
-3295,3296,3297,3298,3299,3300,3301,3302,3303,3304,3305,3306,3307,3308,3309,
-3310,3311,3312,3313,3314,3315,3316,3317,3318,3319,3320,3321,3322,3323,3324,
-3325,3326,3327,3328,3329,3330,3331,3332,3333,3334,3335,3336,3337,3338,3339,
-3340,3341,3342,3343,3344,3345,3346,3347,3348,3349,3350,3351,3352,3353,3354,
-3355,3356,3357,3358,3359,3360,3361,3362,3363,3364,3365,3366,3367,3368,3369,
-3370,3371,3372,3373,3374,3375,3376,3377,3378,3379,3380,3381,3382,3383,3384,
-3385,3386,3387,3388,3389,3390,3391,3392,3393,3394,3395,3396,3397,3398,3399,
-3400,3401,3402,3403,3404,3405,3406,3407,3408,3409,3410,3411,3412,3413,3414,
-3415,3416,3417,3418,3419,3420,3421,3422,3423,3424,3425,3426,3427,3428,3429,
-3430,3431,3432,3433,3434,3435,3436,3437,3438,3439,3440,3441,3442,3443,3444,
-3445,3446,3447,3448,3449,3450,3451,3452,3453,3454,3455,3456,3457,3458,3459,
-3460,3461,3462,3463,3464,3465,3466,3467,3468,3469,3470,3471,3472,3473,3474,
-3475,3476,3477,3478,3479,3480,3481,3482,3483,3484,3485,3486,3487,3488,3489,
-3490,3491,3492,3493,3494,3495,3496,3497,3498,3499,3500,3501,3502,3503,3504,
-3505,3506,3507,3508,3509,3510,3511,3512,3513,3514,3515,3516,3517,3518,3519,
-3520,3521,3522,3523,3524,3525,3526,3527,3528,3529,3530,3531,3532,3533,3534,
-3535,3536,3537,3538,3539,3540,3541,3542,3543,3544,3545,3546,3547,3548,3549,
-3550,3551,3552,3553,3554,3555,3556,3557,3558,3559,3560,3561,3562,3563,3564,
-3565,3566,3567,3568,3569,3570,3571,3572,3573,3574,3575,3576,3577,3578,3579,
-3580,3581,3582,3583,3584,3585,3586,3587,3588,3589,3590,3591,3592,3593,3594,
-3595,3596,3597,3598,3599,3600,3601,3602,3603,3604,3605,3606,3607,3608,3609,
-3610,3611,3612,3613,3614,3615,3616,3617,3618,3619,3620,3621,3622,3623,3624,
-3625,3626,3627,3628,3629,3630,3631,3632,3633,3634,3635,3636,3637,3638,3639,
-3640,3641,3642,3643,3644,3645,3646,3647,3648,3649,3650,3651,3652,3653,3654,
-3655,3656,3657,3658,3659,3660,3661,3662,3663,3664,3665,3666,3667,3668,3669,
-3670,3671,3672,3673,3674,3675,3676,3677,3678,3679,3680,3681,3682,3683,3684,
-3685,3686,3687,3688,3689,3690,3691,3692,3693,3694,3695,3696,3697,3698,3699,
-3700,3701,3702,3703,3704,3705,3706,3707,3708,3709,3710,3711,3712,3713,3714,
-3715,3716,3717,3718,3719,3720,3721,3722,3723,3724,3725,3726,3727,3728,3729,
-3730,3731,3732,3733,3734,3735,3736,3737,3738,3739,3740,3741,3742,3743,3744,
-3745,3746,3747,3748,3749,3750,3751,3752,3753,3754,3755,3756,3757,3758,3759,
-3760,3761,3762,3763,3764,3765,3766,3767,3768,3769,3770,3771,3772,3773,3774,
-3775,3776,3777,3778,3779,3780,3781,3782,3783,3784,3785,3786,3787,3788,3789,
-3790,3791,3792,3793,3794,3795,3796,3797,3798,3799,3800,3801,3802,3803,3804,
-3805,3806,3807,3808,3809,3810,3811,3812,3813,3814,3815,3816,3817,3818,3819,
-3820,3821,3822,3823,3824,3825,3826,3827,3828,3829,3830,3831,3832,3833,3834,
-3835,3836,3837,3838,3839,3840,3841,3842,3843,3844,3845,3846,3847,3848,3849,
-3850,3851,3852,3853,3854,3855,3856,3857,3858,3859,3860,3861,3862,3863,3864,
-3865,3866,3867,3868,3869,3870,3871,3872,3873,3874,3875,3876,3877,3878,3879,
-3880,3881,3882,3883,3884,3885,3886,3887,3888,3889,3890,3891,3892,3893,3894,
-3895,3896,3897,3898,3899,3900,3901,3902,3903,3904,3905,3906,3907,3908,3909,
-3910,3911,3912,3913,3914,3915,3916,3917,3918,3919,3920,3921,3922,3923,3924,
-3925,3926,3927,3928,3929,3930,3931,3932,3933,3934,3935,3936,3937,3938,3939,
-3940,3941,3942,3943,3944,3945,3946,3947,3948,3949,3950,3951,3952,3953,3954,
-3955,3956,3957,3958,3959,3960,3961,3962,3963,3964,3965,3966,3967,3968,3969,
-3970,3971,3972,3973,3974,3975,3976,3977,3978,3979,3980,3981,3982,3983,3984,
-3985,3986,3987,3988,3989,3990,3991,3992,3993,3994,3995,3996,3997,3998,3999,
-4000,4001,4002,4003,4004,4005,4006,4007,4008,4009,4010,4011,4012,4013,4014,
-4015,4016,4017,4018,4019,4020,4021,4022,4023,4024,4025,4026,4027,4028,4029,
-4030,4031,4032,4033,4034,4035,4036,4037,4038,4039,4040,4041,4042,4043,4044,
-4045,4046,4047,4048,4049,4050,4051,4052,4053,4054,4055,4056,4057,4058,4059,
-4060,4061,4062,4063,4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,
-4075,4076,4077,4078,4079,4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,
-4090,4091,4092,4093,4094,4095,4096,4097,4098,4099,4100,4101,4102,4103,4104,
-4105,4106,4107,4108,4109,4110,4111,4112,4113,4114,4115,4116,4117,4118,4119,
-4120,4121,4122,4123,4124,4125,4126,4127,4128,4129,4130,4131,4132,4133,4134,
-4135,4136,4137,4138,4139,4140,4141,4142,4143,4144,4145,4146,4147,4148,4149,
-4150,4151,4152,4153,4154,4155,4156,4157,4158,4159,4160,4161,4162,4163,4164,
-4165,4166,4167,4168,4169,4170,4171,4172,4173,4174,4175,4176,4177,4178,4179,
-4180,4181,4182,4183,4184,4185,4186,4187,4188,4189,4190,4191,4192,4193,4194,
-4195,4196,4197,4198,4199,4200,4201,4202,4203,4204,4205,4206,4207,4208,4209,
-4210,4211,4212,4213,4214,4215,4216,4217,4218,4219,4220,4221,4222,4223,4224,
-4225,4226,4227,4228,4229,4230,4231,4232,4233,4234,4235,4236,4237,4238,4239,
-4240,4241,4242,4243,4244,4245,4246,4247,4248,4249,4250,4251,4252,4253,4254,
-4255,4256,4257,4258,4259,4260,4261,4262,4263,4264,4265,4266,4267,4268,4269,
-4270,4271,4272,4273,4274,4275,4276,4277,4278,4279,4280,4281,4282,4283,4284,
-4285,4286,4287,4288,4289,4290,4291,4292,4293,4294,4295,4296,4297,4298,4299,
-4300,4301,4302,4303,4304,4305,4306,4307,4308,4309,4310,4311,4312,4313,4314,
-4315,4316,4317,4318,4319,4320,4321,4322,4323,4324,4325,4326,4327,4328,4329,
-4330,4331,4332,4333,4334,4335,4336,4337,4338,4339,4340,4341,4342,4343,4344,
-4345,4346,4347,4348,4349,4350,4351,4352,4353,4354,4355,4356,4357,4358,4359,
-4360,4361,4362,4363,4364,4365,4366,4367,4368,4369,4370,4371,4372,4373,4374,
-4375,4376,4377,4378,4379,4380,4381,4382,4383,4384,4385,4386,4387,4388,4389,
-4390,4391,4392,4393,4394,4395,4396,4397,4398,4399,4400,4401,4402,4403,4404,
-4405,4406,4407,4408,4409,4410,4411,4412,4413,4414,4415,4416,4417,4418,4419,
-4420,4421,4422,4423,4424,4425,4426,4427,4428,4429,4430,4431,4432,4433,4434,
-4435,4436,4437,4438,4439,4440,4441,4442,4443,4444,4445,4446,4447,4448,4449,
-4450,4451,4452,4453,4454,4455,4456,4457,4458,4459,4460,4461,4462,4463,4464,
-4465,4466,4467,4468,4469,4470,4471,4472,4473,4474,4475,4476,4477,4478,4479,
-4480,4481,4482,4483,4484,4485,4486,4487,4488,4489,4490,4491,4492,4493,4494,
-4495,4496,4497,4498,4499,4500,4501,4502,4503,4504,4505,4506,4507,4508,4509,
-4510,4511,4512,4513,4514,4515,4516,4517,4518,4519,4520,4521,4522,4523,4524,
-4525,4526,4527,4528,4529,4530,4531,4532,4533,4534,4535,4536,4537,4538,4539,
-4540,4541,4542,4543,4544,4545,4546,4547,4548,4549,4550,4551,4552,4553,4554,
-4555,4556,4557,4558,4559,4560,4561,4562,4563,4564,4565,4566,4567,4568,4569,
-4570,4571,4572,4573,4574,4575,4576,4577,4578,4579,4580,4581,4582,4583,4584,
-4585,4586,4587,4588,4589,4590,4591,4592,4593,4594,4595,4596,4597,4598,4599,
-4600,4601,4602,4603,4604,4605,4606,4607,4608,4609,4610,4611,4612,4613,4614,
-4615,4616,4617,4618,4619,4620,4621,4622,4623,4624,4625,4626,4627,4628,4629,
-4630,4631,4632,4633,4634,4635,4636,4637,4638,4639,4640,4641,4642,4643,4644,
-4645,4646,4647,4648,4649,4650,4651,4652,4653,4654,4655,4656,4657,4658,4659,
-4660,4661,4662,4663,4664,4665,4666,4667,4668,4669,4670,4671,4672,4673,4674,
-4675,4676,4677,4678,4679,4680,4681,4682,4683,4684,4685,4686,4687,4688,4689,
-4690,4691,4692,4693,4694,4695,4696,4697,4698,4699,4700,4701,4702,4703,4704,
-4705,4706,4707,4708,4709,4710,4711,4712,4713,4714,4715,4716,4717,4718,4719,
-4720,4721,4722,4723,4724,4725,4726,4727,4728,4729,4730,4731,4732,4733,4734,
-4735,4736,4737,4738,4739,4740,4741,4742,4743,4744,4745,4746,4747,4748,4749,
-4750,4751,4752,4753,4754,4755,4756,4757,4758,4759,4760,4761,4762,4763,4764,
-4765,4766,4767,4768,4769,4770,4771,4772,4773,4774,4775,4776,4777,4778,4779,
-4780,4781,4782,4783,4784,4785,4786,4787,4788,4789,4790,4791,4792,4793,4794,
-4795,4796,4797,4798,4799,4800,4801,4802,4803,4804,4805,4806,4807,4808,4809,
-4810,4811,4812,4813,4814,4815,4816,4817,4818,4819,4820,4821,4822,4823,4824,
-4825,4826,4827,4828,4829,4830,4831,4832,4833,4834,4835,4836,4837,4838,4839,
-4840,4841,4842,4843,4844,4845,4846,4847,4848,4849,4850,4851,4852,4853,4854,
-4855,4856,4857,4858,4859,4860,4861,4862,4863,4864,4865,4866,4867,4868,4869,
-4870,4871,4872,4873,4874,4875,4876,4877,4878,4879,4880,4881,4882,4883,4884,
-4885,4886,4887,4888,4889,4890,4891,4892,4893,4894,4895,4896,4897,4898,4899,
-4900,4901,4902,4903,4904,4905,4906,4907,4908,4909,4910,4911,4912,4913,4914,
-4915,4916,4917,4918,4919,4920,4921,4922,4923,4924,4925,4926,4927,4928,4929,
-4930,4931,4932,4933,4934,4935,4936,4937,4938,4939,4940,4941,4942,4943,4944,
-4945,4946,4947,4948,4949,4950,4951,4952,4953,4954,4955,4956,4957,4958,4959,
-4960,4961,4962,4963,4964,4965,4966,4967,4968,4969,4970,4971,4972,4973,4974,
-4975,4976,4977,4978,4979,4980,4981,4982,4983,4984,4985,4986,4987,4988,4989,
-4990,4991,4992,4993,4994,4995,4996,4997,4998,4999,5000,5001,5002,5003,5004,
-5005,5006,5007,5008,5009,5010,5011,5012,5013,5014,5015,5016,5017,5018,5019,
-5020,5021,5022,5023,5024,5025,5026,5027,5028,5029,5030,5031,5032,5033,5034,
-5035,5036,5037,5038,5039,5040,5041,5042,5043,5044,5045,5046,5047,5048,5049,
-5050,5051,5052,5053,5054,5055,5056,5057,5058,5059,5060,5061,5062,5063,5064,
-5065,5066,5067,5068,5069,5070,5071,5072,5073,5074,5075,5076,5077,5078,5079,
-5080,5081,5082,5083,5084,5085,5086,5087,5088,5089,5090,5091,5092,5093,5094,
-5095,5096,5097,5098,5099,5100,5101,5102,5103,5104,5105,5106,5107,5108,5109,
-5110,5111,5104,5105,5106,5107,5108,5109,5118,5119,5120,5121,5122,5123,5124,
-5125,5126,5127,5128,5129,5130,5131,5132,5133,5134,5135,5136,5137,5138,5139,
-5140,5141,5142,5143,5144,5145,5146,5147,5148,5149,5150,5151,5152,5153,5154,
-5155,5156,5157,5158,5159,5160,5161,5162,5163,5164,5165,5166,5167,5168,5169,
-5170,5171,5172,5173,5174,5175,5176,5177,5178,5179,5180,5181,5182,5183,5184,
-5185,5186,5187,5188,5189,5190,5191,5192,5193,5194,5195,5196,5197,5198,5199,
-5200,5201,5202,5203,5204,5205,5206,5207,5208,5209,5210,5211,5212,5213,5214,
-5215,5216,5217,5218,5219,5220,5221,5222,5223,5224,5225,5226,5227,5228,5229,
-5230,5231,5232,5233,5234,5235,5236,5237,5238,5239,5240,5241,5242,5243,5244,
-5245,5246,5247,5248,5249,5250,5251,5252,5253,5254,5255,5256,5257,5258,5259,
-5260,5261,5262,5263,5264,5265,5266,5267,5268,5269,5270,5271,5272,5273,5274,
-5275,5276,5277,5278,5279,5280,5281,5282,5283,5284,5285,5286,5287,5288,5289,
-5290,5291,5292,5293,5294,5295,5296,5297,5298,5299,5300,5301,5302,5303,5304,
-5305,5306,5307,5308,5309,5310,5311,5312,5313,5314,5315,5316,5317,5318,5319,
-5320,5321,5322,5323,5324,5325,5326,5327,5328,5329,5330,5331,5332,5333,5334,
-5335,5336,5337,5338,5339,5340,5341,5342,5343,5344,5345,5346,5347,5348,5349,
-5350,5351,5352,5353,5354,5355,5356,5357,5358,5359,5360,5361,5362,5363,5364,
-5365,5366,5367,5368,5369,5370,5371,5372,5373,5374,5375,5376,5377,5378,5379,
-5380,5381,5382,5383,5384,5385,5386,5387,5388,5389,5390,5391,5392,5393,5394,
-5395,5396,5397,5398,5399,5400,5401,5402,5403,5404,5405,5406,5407,5408,5409,
-5410,5411,5412,5413,5414,5415,5416,5417,5418,5419,5420,5421,5422,5423,5424,
-5425,5426,5427,5428,5429,5430,5431,5432,5433,5434,5435,5436,5437,5438,5439,
-5440,5441,5442,5443,5444,5445,5446,5447,5448,5449,5450,5451,5452,5453,5454,
-5455,5456,5457,5458,5459,5460,5461,5462,5463,5464,5465,5466,5467,5468,5469,
-5470,5471,5472,5473,5474,5475,5476,5477,5478,5479,5480,5481,5482,5483,5484,
-5485,5486,5487,5488,5489,5490,5491,5492,5493,5494,5495,5496,5497,5498,5499,
-5500,5501,5502,5503,5504,5505,5506,5507,5508,5509,5510,5511,5512,5513,5514,
-5515,5516,5517,5518,5519,5520,5521,5522,5523,5524,5525,5526,5527,5528,5529,
-5530,5531,5532,5533,5534,5535,5536,5537,5538,5539,5540,5541,5542,5543,5544,
-5545,5546,5547,5548,5549,5550,5551,5552,5553,5554,5555,5556,5557,5558,5559,
-5560,5561,5562,5563,5564,5565,5566,5567,5568,5569,5570,5571,5572,5573,5574,
-5575,5576,5577,5578,5579,5580,5581,5582,5583,5584,5585,5586,5587,5588,5589,
-5590,5591,5592,5593,5594,5595,5596,5597,5598,5599,5600,5601,5602,5603,5604,
-5605,5606,5607,5608,5609,5610,5611,5612,5613,5614,5615,5616,5617,5618,5619,
-5620,5621,5622,5623,5624,5625,5626,5627,5628,5629,5630,5631,5632,5633,5634,
-5635,5636,5637,5638,5639,5640,5641,5642,5643,5644,5645,5646,5647,5648,5649,
-5650,5651,5652,5653,5654,5655,5656,5657,5658,5659,5660,5661,5662,5663,5664,
-5665,5666,5667,5668,5669,5670,5671,5672,5673,5674,5675,5676,5677,5678,5679,
-5680,5681,5682,5683,5684,5685,5686,5687,5688,5689,5690,5691,5692,5693,5694,
-5695,5696,5697,5698,5699,5700,5701,5702,5703,5704,5705,5706,5707,5708,5709,
-5710,5711,5712,5713,5714,5715,5716,5717,5718,5719,5720,5721,5722,5723,5724,
-5725,5726,5727,5728,5729,5730,5731,5732,5733,5734,5735,5736,5737,5738,5739,
-5740,5741,5742,5743,5744,5745,5746,5747,5748,5749,5750,5751,5752,5753,5754,
-5755,5756,5757,5758,5759,5760,5761,5762,5763,5764,5765,5766,5767,5768,5769,
-5770,5771,5772,5773,5774,5775,5776,5777,5778,5779,5780,5781,5782,5783,5784,
-5785,5786,5787,5788,5789,5790,5791,5792,5793,5794,5795,5796,5797,5798,5799,
-5800,5801,5802,5803,5804,5805,5806,5807,5808,5809,5810,5811,5812,5813,5814,
-5815,5816,5817,5818,5819,5820,5821,5822,5823,5824,5825,5826,5827,5828,5829,
-5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840,5841,5842,5843,5844,
-5845,5846,5847,5848,5849,5850,5851,5852,5853,5854,5855,5856,5857,5858,5859,
-5860,5861,5862,5863,5864,5865,5866,5867,5868,5869,5870,5871,5872,5873,5874,
-5875,5876,5877,5878,5879,5880,5881,5882,5883,5884,5885,5886,5887,5888,5889,
-5890,5891,5892,5893,5894,5895,5896,5897,5898,5899,5900,5901,5902,5903,5904,
-5905,5906,5907,5908,5909,5910,5911,5912,5913,5914,5915,5916,5917,5918,5919,
-5920,5921,5922,5923,5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,
-5935,5936,5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,
-5950,5951,5952,5953,5954,5955,5956,5957,5958,5959,5960,5961,5962,5963,5964,
-5965,5966,5967,5968,5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,
-5980,5981,5982,5983,5984,5985,5986,5987,5988,5989,5990,5991,5992,5993,5994,
-5995,5996,5997,5998,5999,6000,6001,6002,6003,6004,6005,6006,6007,6008,6009,
-6010,6011,6012,6013,6014,6015,6016,6017,6018,6019,6020,6021,6022,6023,6024,
-6025,6026,6027,6028,6029,6030,6031,6032,6033,6034,6035,6036,6037,6038,6039,
-6040,6041,6042,6043,6044,6045,6046,6047,6048,6049,6050,6051,6052,6053,6054,
-6055,6056,6057,6058,6059,6060,6061,6062,6063,6064,6065,6066,6067,6068,6069,
-6070,6071,6072,6073,6074,6075,6076,6077,6078,6079,6080,6081,6082,6083,6084,
-6085,6086,6087,6088,6089,6090,6091,6092,6093,6094,6095,6096,6097,6098,6099,
-6100,6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112,6113,6114,
-6115,6116,6117,6118,6119,6120,6121,6122,6123,6124,6125,6126,6127,6128,6129,
-6130,6131,6132,6133,6134,6135,6136,6137,6138,6139,6140,6141,6142,6143,6144,
-6145,6146,6147,6148,6149,6150,6151,6152,6153,6154,6155,6156,6157,6158,6159,
-6160,6161,6162,6163,6164,6165,6166,6167,6168,6169,6170,6171,6172,6173,6174,
-6175,6176,6177,6178,6179,6180,6181,6182,6183,6184,6185,6186,6187,6188,6189,
-6190,6191,6192,6193,6194,6195,6196,6197,6198,6199,6200,6201,6202,6203,6204,
-6205,6206,6207,6208,6209,6210,6211,6212,6213,6214,6215,6216,6217,6218,6219,
-6220,6221,6222,6223,6224,6225,6226,6227,6228,6229,6230,6231,6232,6233,6234,
-6235,6236,6237,6238,6239,6240,6241,6242,6243,6244,6245,6246,6247,6248,6249,
-6250,6251,6252,6253,6254,6255,6256,6257,6258,6259,6260,6261,6262,6263,6264,
-6265,6266,6267,6268,6269,6270,6271,6272,6273,6274,6275,6276,6277,6278,6279,
-6280,6281,6282,6283,6284,6285,6286,6287,6288,6289,6290,6291,6292,6293,6294,
-6295,6296,6297,6298,6299,6300,6301,6302,6303,6304,6305,6306,6307,6308,6309,
-6310,6311,6312,6313,6314,6315,6316,6317,6318,6319,6320,6321,6322,6323,6324,
-6325,6326,6327,6328,6329,6330,6331,6332,6333,6334,6335,6336,6337,6338,6339,
-6340,6341,6342,6343,6344,6345,6346,6347,6348,6349,6350,6351,6352,6353,6354,
-6355,6356,6357,6358,6359,6360,6361,6362,6363,6364,6365,6366,6367,6368,6369,
-6370,6371,6372,6373,6374,6375,6376,6377,6378,6379,6380,6381,6382,6383,6384,
-6385,6386,6387,6388,6389,6390,6391,6392,6393,6394,6395,6396,6397,6398,6399,
-6400,6401,6402,6403,6404,6405,6406,6407,6408,6409,6410,6411,6412,6413,6414,
-6415,6416,6417,6418,6419,6420,6421,6422,6423,6424,6425,6426,6427,6428,6429,
-6430,6431,6432,6433,6434,6435,6436,6437,6438,6439,6440,6441,6442,6443,6444,
-6445,6446,6447,6448,6449,6450,6451,6452,6453,6454,6455,6456,6457,6458,6459,
-6460,6461,6462,6463,6464,6465,6466,6467,6468,6469,6470,6471,6472,6473,6474,
-6475,6476,6477,6478,6479,6480,6481,6482,6483,6484,6485,6486,6487,6488,6489,
-6490,6491,6492,6493,6494,6495,6496,6497,6498,6499,6500,6501,6502,6503,6504,
-6505,6506,6507,6508,6509,6510,6511,6512,6513,6514,6515,6516,6517,6518,6519,
-6520,6521,6522,6523,6524,6525,6526,6527,6528,6529,6530,6531,6532,6533,6534,
-6535,6536,6537,6538,6539,6540,6541,6542,6543,6544,6545,6546,6547,6548,6549,
-6550,6551,6552,6553,6554,6555,6556,6557,6558,6559,6560,6561,6562,6563,6564,
-6565,6566,6567,6568,6569,6570,6571,6572,6573,6574,6575,6576,6577,6578,6579,
-6580,6581,6582,6583,6584,6585,6586,6587,6588,6589,6590,6591,6592,6593,6594,
-6595,6596,6597,6598,6599,6600,6601,6602,6603,6604,6605,6606,6607,6608,6609,
-6610,6611,6612,6613,6614,6615,6616,6617,6618,6619,6620,6621,6622,6623,6624,
-6625,6626,6627,6628,6629,6630,6631,6632,6633,6634,6635,6636,6637,6638,6639,
-6640,6641,6642,6643,6644,6645,6646,6647,6648,6649,6650,6651,6652,6653,6654,
-6655,6656,6657,6658,6659,6660,6661,6662,6663,6664,6665,6666,6667,6668,6669,
-6670,6671,6672,6673,6674,6675,6676,6677,6678,6679,6680,6681,6682,6683,6684,
-6685,6686,6687,6688,6689,6690,6691,6692,6693,6694,6695,6696,6697,6698,6699,
-6700,6701,6702,6703,6704,6705,6706,6707,6708,6709,6710,6711,6712,6713,6714,
-6715,6716,6717,6718,6719,6720,6721,6722,6723,6724,6725,6726,6727,6728,6729,
-6730,6731,6732,6733,6734,6735,6736,6737,6738,6739,6740,6741,6742,6743,6744,
-6745,6746,6747,6748,6749,6750,6751,6752,6753,6754,6755,6756,6757,6758,6759,
-6760,6761,6762,6763,6764,6765,6766,6767,6768,6769,6770,6771,6772,6773,6774,
-6775,6776,6777,6778,6779,6780,6781,6782,6783,6784,6785,6786,6787,6788,6789,
-6790,6791,6792,6793,6794,6795,6796,6797,6798,6799,6800,6801,6802,6803,6804,
-6805,6806,6807,6808,6809,6810,6811,6812,6813,6814,6815,6816,6817,6818,6819,
-6820,6821,6822,6823,6824,6825,6826,6827,6828,6829,6830,6831,6832,6833,6834,
-6835,6836,6837,6838,6839,6840,6841,6842,6843,6844,6845,6846,6847,6848,6849,
-6850,6851,6852,6853,6854,6855,6856,6857,6858,6859,6860,6861,6862,6863,6864,
-6865,6866,6867,6868,6869,6870,6871,6872,6873,6874,6875,6876,6877,6878,6879,
-6880,6881,6882,6883,6884,6885,6886,6887,6888,6889,6890,6891,6892,6893,6894,
-6895,6896,6897,6898,6899,6900,6901,6902,6903,6904,6905,6906,6907,6908,6909,
-6910,6911,6912,6913,6914,6915,6916,6917,6918,6919,6920,6921,6922,6923,6924,
-6925,6926,6927,6928,6929,6930,6931,6932,6933,6934,6935,6936,6937,6938,6939,
-6940,6941,6942,6943,6944,6945,6946,6947,6948,6949,6950,6951,6952,6953,6954,
-6955,6956,6957,6958,6959,6960,6961,6962,6963,6964,6965,6966,6967,6968,6969,
-6970,6971,6972,6973,6974,6975,6976,6977,6978,6979,6980,6981,6982,6983,6984,
-6985,6986,6987,6988,6989,6990,6991,6992,6993,6994,6995,6996,6997,6998,6999,
-7000,7001,7002,7003,7004,7005,7006,7007,7008,7009,7010,7011,7012,7013,7014,
-7015,7016,7017,7018,7019,7020,7021,7022,7023,7024,7025,7026,7027,7028,7029,
-7030,7031,7032,7033,7034,7035,7036,7037,7038,7039,7040,7041,7042,7043,7044,
-7045,7046,7047,7048,7049,7050,7051,7052,7053,7054,7055,7056,7057,7058,7059,
-7060,7061,7062,7063,7064,7065,7066,7067,7068,7069,7070,7071,7072,7073,7074,
-7075,7076,7077,7078,7079,7080,7081,7082,7083,7084,7085,7086,7087,7088,7089,
-7090,7091,7092,7093,7094,7095,7096,7097,7098,7099,7100,7101,7102,7103,7104,
-7105,7106,7107,7108,7109,7110,7111,7112,7113,7114,7115,7116,7117,7118,7119,
-7120,7121,7122,7123,7124,7125,7126,7127,7128,7129,7130,7131,7132,7133,7134,
-7135,7136,7137,7138,7139,7140,7141,7142,7143,7144,7145,7146,7147,7148,7149,
-7150,7151,7152,7153,7154,7155,7156,7157,7158,7159,7160,7161,7162,7163,7164,
-7165,7166,7167,7168,7169,7170,7171,7172,7173,7174,7175,7176,7177,7178,7179,
-7180,7181,7182,7183,7184,7185,7186,7187,7188,7189,7190,7191,7192,7193,7194,
-7195,7196,7197,7198,7199,7200,7201,7202,7203,7204,7205,7206,7207,7208,7209,
-7210,7211,7212,7213,7214,7215,7216,7217,7218,7219,7220,7221,7222,7223,7224,
-7225,7226,7227,7228,7229,7230,7231,7232,7233,7234,7235,7236,7237,7238,7239,
-7240,7241,7242,7243,7244,7245,7246,7247,7248,7249,7250,7251,7252,7253,7254,
-7255,7256,7257,7258,7259,7260,7261,7262,7263,7264,7265,7266,7267,7268,7269,
-7270,7271,7272,7273,7274,7275,7276,7277,7278,7279,7280,7281,7282,7283,7284,
-7285,7286,7287,7288,7289,7290,7291,7292,7293,7294,7295,1042,1044,1054,1057,
-1058,1058,1066,1122,42570L,7305,7306,7307,7308,7309,7310,7311,7312,7313,
-7314,7315,7316,7317,7318,7319,7320,7321,7322,7323,7324,7325,7326,7327,7328,
-7329,7330,7331,7332,7333,7334,7335,7336,7337,7338,7339,7340,7341,7342,7343,
-7344,7345,7346,7347,7348,7349,7350,7351,7352,7353,7354,7355,7356,7357,7358,
-7359,7360,7361,7362,7363,7364,7365,7366,7367,7368,7369,7370,7371,7372,7373,
-7374,7375,7376,7377,7378,7379,7380,7381,7382,7383,7384,7385,7386,7387,7388,
-7389,7390,7391,7392,7393,7394,7395,7396,7397,7398,7399,7400,7401,7402,7403,
-7404,7405,7406,7407,7408,7409,7410,7411,7412,7413,7414,7415,7416,7417,7418,
-7419,7420,7421,7422,7423,7424,7425,7426,7427,7428,7429,7430,7431,7432,7433,
-7434,7435,7436,7437,7438,7439,7440,7441,7442,7443,7444,7445,7446,7447,7448,
-7449,7450,7451,7452,7453,7454,7455,7456,7457,7458,7459,7460,7461,7462,7463,
-7464,7465,7466,7467,7468,7469,7470,7471,7472,7473,7474,7475,7476,7477,7478,
-7479,7480,7481,7482,7483,7484,7485,7486,7487,7488,7489,7490,7491,7492,7493,
-7494,7495,7496,7497,7498,7499,7500,7501,7502,7503,7504,7505,7506,7507,7508,
-7509,7510,7511,7512,7513,7514,7515,7516,7517,7518,7519,7520,7521,7522,7523,
-7524,7525,7526,7527,7528,7529,7530,7531,7532,7533,7534,7535,7536,7537,7538,
-7539,7540,7541,7542,7543,7544,42877L,7546,7547,7548,11363,7550,7551,7552,
-7553,7554,7555,7556,7557,7558,7559,7560,7561,7562,7563,7564,7565,7566,7567,
-7568,7569,7570,7571,7572,7573,7574,7575,7576,7577,7578,7579,7580,7581,7582,
-7583,7584,7585,7586,7587,7588,7589,7590,7591,7592,7593,7594,7595,7596,7597,
-7598,7599,7600,7601,7602,7603,7604,7605,7606,7607,7608,7609,7610,7611,7612,
-7613,7614,7615,7616,7617,7618,7619,7620,7621,7622,7623,7624,7625,7626,7627,
-7628,7629,7630,7631,7632,7633,7634,7635,7636,7637,7638,7639,7640,7641,7642,
-7643,7644,7645,7646,7647,7648,7649,7650,7651,7652,7653,7654,7655,7656,7657,
-7658,7659,7660,7661,7662,7663,7664,7665,7666,7667,7668,7669,7670,7671,7672,
-7673,7674,7675,7676,7677,7678,7679,7680,7680,7682,7682,7684,7684,7686,7686,
-7688,7688,7690,7690,7692,7692,7694,7694,7696,7696,7698,7698,7700,7700,7702,
-7702,7704,7704,7706,7706,7708,7708,7710,7710,7712,7712,7714,7714,7716,7716,
-7718,7718,7720,7720,7722,7722,7724,7724,7726,7726,7728,7728,7730,7730,7732,
-7732,7734,7734,7736,7736,7738,7738,7740,7740,7742,7742,7744,7744,7746,7746,
-7748,7748,7750,7750,7752,7752,7754,7754,7756,7756,7758,7758,7760,7760,7762,
-7762,7764,7764,7766,7766,7768,7768,7770,7770,7772,7772,7774,7774,7776,7776,
-7778,7778,7780,7780,7782,7782,7784,7784,7786,7786,7788,7788,7790,7790,7792,
-7792,7794,7794,7796,7796,7798,7798,7800,7800,7802,7802,7804,7804,7806,7806,
-7808,7808,7810,7810,7812,7812,7814,7814,7816,7816,7818,7818,7820,7820,7822,
-7822,7824,7824,7826,7826,7828,7828,7830,7831,7832,7833,7834,7776,7836,7837,
-7838,7839,7840,7840,7842,7842,7844,7844,7846,7846,7848,7848,7850,7850,7852,
-7852,7854,7854,7856,7856,7858,7858,7860,7860,7862,7862,7864,7864,7866,7866,
-7868,7868,7870,7870,7872,7872,7874,7874,7876,7876,7878,7878,7880,7880,7882,
-7882,7884,7884,7886,7886,7888,7888,7890,7890,7892,7892,7894,7894,7896,7896,
-7898,7898,7900,7900,7902,7902,7904,7904,7906,7906,7908,7908,7910,7910,7912,
-7912,7914,7914,7916,7916,7918,7918,7920,7920,7922,7922,7924,7924,7926,7926,
-7928,7928,7930,7930,7932,7932,7934,7934,7944,7945,7946,7947,7948,7949,7950,
-7951,7944,7945,7946,7947,7948,7949,7950,7951,7960,7961,7962,7963,7964,7965,
-7958,7959,7960,7961,7962,7963,7964,7965,7966,7967,7976,7977,7978,7979,7980,
-7981,7982,7983,7976,7977,7978,7979,7980,7981,7982,7983,7992,7993,7994,7995,
-7996,7997,7998,7999,7992,7993,7994,7995,7996,7997,7998,7999,8008,8009,8010,
-8011,8012,8013,8006,8007,8008,8009,8010,8011,8012,8013,8014,8015,8016,8025,
-8018,8027,8020,8029,8022,8031,8024,8025,8026,8027,8028,8029,8030,8031,8040,
-8041,8042,8043,8044,8045,8046,8047,8040,8041,8042,8043,8044,8045,8046,8047,
-8122,8123,8136,8137,8138,8139,8154,8155,8184,8185,8170,8171,8186,8187,8062,
-8063,8064,8065,8066,8067,8068,8069,8070,8071,8072,8073,8074,8075,8076,8077,
-8078,8079,8080,8081,8082,8083,8084,8085,8086,8087,8088,8089,8090,8091,8092,
-8093,8094,8095,8096,8097,8098,8099,8100,8101,8102,8103,8104,8105,8106,8107,
-8108,8109,8110,8111,8120,8121,8114,8115,8116,8117,8118,8119,8120,8121,8122,
-8123,8124,8125,921,8127,8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,
-8138,8139,8140,8141,8142,8143,8152,8153,8146,8147,8148,8149,8150,8151,8152,
-8153,8154,8155,8156,8157,8158,8159,8168,8169,8162,8163,8164,8172,8166,8167,
-8168,8169,8170,8171,8172,8173,8174,8175,8176,8177,8178,8179,8180,8181,8182,
-8183,8184,8185,8186,8187,8188,8189,8190,8191,8192,8193,8194,8195,8196,8197,
-8198,8199,8200,8201,8202,8203,8204,8205,8206,8207,8208,8209,8210,8211,8212,
-8213,8214,8215,8216,8217,8218,8219,8220,8221,8222,8223,8224,8225,8226,8227,
-8228,8229,8230,8231,8232,8233,8234,8235,8236,8237,8238,8239,8240,8241,8242,
-8243,8244,8245,8246,8247,8248,8249,8250,8251,8252,8253,8254,8255,8256,8257,
-8258,8259,8260,8261,8262,8263,8264,8265,8266,8267,8268,8269,8270,8271,8272,
-8273,8274,8275,8276,8277,8278,8279,8280,8281,8282,8283,8284,8285,8286,8287,
-8288,8289,8290,8291,8292,8293,8294,8295,8296,8297,8298,8299,8300,8301,8302,
-8303,8304,8305,8306,8307,8308,8309,8310,8311,8312,8313,8314,8315,8316,8317,
-8318,8319,8320,8321,8322,8323,8324,8325,8326,8327,8328,8329,8330,8331,8332,
-8333,8334,8335,8336,8337,8338,8339,8340,8341,8342,8343,8344,8345,8346,8347,
-8348,8349,8350,8351,8352,8353,8354,8355,8356,8357,8358,8359,8360,8361,8362,
-8363,8364,8365,8366,8367,8368,8369,8370,8371,8372,8373,8374,8375,8376,8377,
-8378,8379,8380,8381,8382,8383,8384,8385,8386,8387,8388,8389,8390,8391,8392,
-8393,8394,8395,8396,8397,8398,8399,8400,8401,8402,8403,8404,8405,8406,8407,
-8408,8409,8410,8411,8412,8413,8414,8415,8416,8417,8418,8419,8420,8421,8422,
-8423,8424,8425,8426,8427,8428,8429,8430,8431,8432,8433,8434,8435,8436,8437,
-8438,8439,8440,8441,8442,8443,8444,8445,8446,8447,8448,8449,8450,8451,8452,
-8453,8454,8455,8456,8457,8458,8459,8460,8461,8462,8463,8464,8465,8466,8467,
-8468,8469,8470,8471,8472,8473,8474,8475,8476,8477,8478,8479,8480,8481,8482,
-8483,8484,8485,8486,8487,8488,8489,8490,8491,8492,8493,8494,8495,8496,8497,
-8498,8499,8500,8501,8502,8503,8504,8505,8506,8507,8508,8509,8510,8511,8512,
-8513,8514,8515,8516,8517,8518,8519,8520,8521,8522,8523,8524,8525,8498,8527,
-8528,8529,8530,8531,8532,8533,8534,8535,8536,8537,8538,8539,8540,8541,8542,
-8543,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8554,8555,8556,8557,
-8558,8559,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8554,8555,8556,
-8557,8558,8559,8576,8577,8578,8579,8579,8581,8582,8583,8584,8585,8586,8587,
-8588,8589,8590,8591,8592,8593,8594,8595,8596,8597,8598,8599,8600,8601,8602,
-8603,8604,8605,8606,8607,8608,8609,8610,8611,8612,8613,8614,8615,8616,8617,
-8618,8619,8620,8621,8622,8623,8624,8625,8626,8627,8628,8629,8630,8631,8632,
-8633,8634,8635,8636,8637,8638,8639,8640,8641,8642,8643,8644,8645,8646,8647,
-8648,8649,8650,8651,8652,8653,8654,8655,8656,8657,8658,8659,8660,8661,8662,
-8663,8664,8665,8666,8667,8668,8669,8670,8671,8672,8673,8674,8675,8676,8677,
-8678,8679,8680,8681,8682,8683,8684,8685,8686,8687,8688,8689,8690,8691,8692,
-8693,8694,8695,8696,8697,8698,8699,8700,8701,8702,8703,8704,8705,8706,8707,
-8708,8709,8710,8711,8712,8713,8714,8715,8716,8717,8718,8719,8720,8721,8722,
-8723,8724,8725,8726,8727,8728,8729,8730,8731,8732,8733,8734,8735,8736,8737,
-8738,8739,8740,8741,8742,8743,8744,8745,8746,8747,8748,8749,8750,8751,8752,
-8753,8754,8755,8756,8757,8758,8759,8760,8761,8762,8763,8764,8765,8766,8767,
-8768,8769,8770,8771,8772,8773,8774,8775,8776,8777,8778,8779,8780,8781,8782,
-8783,8784,8785,8786,8787,8788,8789,8790,8791,8792,8793,8794,8795,8796,8797,
-8798,8799,8800,8801,8802,8803,8804,8805,8806,8807,8808,8809,8810,8811,8812,
-8813,8814,8815,8816,8817,8818,8819,8820,8821,8822,8823,8824,8825,8826,8827,
-8828,8829,8830,8831,8832,8833,8834,8835,8836,8837,8838,8839,8840,8841,8842,
-8843,8844,8845,8846,8847,8848,8849,8850,8851,8852,8853,8854,8855,8856,8857,
-8858,8859,8860,8861,8862,8863,8864,8865,8866,8867,8868,8869,8870,8871,8872,
-8873,8874,8875,8876,8877,8878,8879,8880,8881,8882,8883,8884,8885,8886,8887,
-8888,8889,8890,8891,8892,8893,8894,8895,8896,8897,8898,8899,8900,8901,8902,
-8903,8904,8905,8906,8907,8908,8909,8910,8911,8912,8913,8914,8915,8916,8917,
-8918,8919,8920,8921,8922,8923,8924,8925,8926,8927,8928,8929,8930,8931,8932,
-8933,8934,8935,8936,8937,8938,8939,8940,8941,8942,8943,8944,8945,8946,8947,
-8948,8949,8950,8951,8952,8953,8954,8955,8956,8957,8958,8959,8960,8961,8962,
-8963,8964,8965,8966,8967,8968,8969,8970,8971,8972,8973,8974,8975,8976,8977,
-8978,8979,8980,8981,8982,8983,8984,8985,8986,8987,8988,8989,8990,8991,8992,
-8993,8994,8995,8996,8997,8998,8999,9000,9001,9002,9003,9004,9005,9006,9007,
-9008,9009,9010,9011,9012,9013,9014,9015,9016,9017,9018,9019,9020,9021,9022,
-9023,9024,9025,9026,9027,9028,9029,9030,9031,9032,9033,9034,9035,9036,9037,
-9038,9039,9040,9041,9042,9043,9044,9045,9046,9047,9048,9049,9050,9051,9052,
-9053,9054,9055,9056,9057,9058,9059,9060,9061,9062,9063,9064,9065,9066,9067,
-9068,9069,9070,9071,9072,9073,9074,9075,9076,9077,9078,9079,9080,9081,9082,
-9083,9084,9085,9086,9087,9088,9089,9090,9091,9092,9093,9094,9095,9096,9097,
-9098,9099,9100,9101,9102,9103,9104,9105,9106,9107,9108,9109,9110,9111,9112,
-9113,9114,9115,9116,9117,9118,9119,9120,9121,9122,9123,9124,9125,9126,9127,
-9128,9129,9130,9131,9132,9133,9134,9135,9136,9137,9138,9139,9140,9141,9142,
-9143,9144,9145,9146,9147,9148,9149,9150,9151,9152,9153,9154,9155,9156,9157,
-9158,9159,9160,9161,9162,9163,9164,9165,9166,9167,9168,9169,9170,9171,9172,
-9173,9174,9175,9176,9177,9178,9179,9180,9181,9182,9183,9184,9185,9186,9187,
-9188,9189,9190,9191,9192,9193,9194,9195,9196,9197,9198,9199,9200,9201,9202,
-9203,9204,9205,9206,9207,9208,9209,9210,9211,9212,9213,9214,9215,9216,9217,
-9218,9219,9220,9221,9222,9223,9224,9225,9226,9227,9228,9229,9230,9231,9232,
-9233,9234,9235,9236,9237,9238,9239,9240,9241,9242,9243,9244,9245,9246,9247,
-9248,9249,9250,9251,9252,9253,9254,9255,9256,9257,9258,9259,9260,9261,9262,
-9263,9264,9265,9266,9267,9268,9269,9270,9271,9272,9273,9274,9275,9276,9277,
-9278,9279,9280,9281,9282,9283,9284,9285,9286,9287,9288,9289,9290,9291,9292,
-9293,9294,9295,9296,9297,9298,9299,9300,9301,9302,9303,9304,9305,9306,9307,
-9308,9309,9310,9311,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,
-9323,9324,9325,9326,9327,9328,9329,9330,9331,9332,9333,9334,9335,9336,9337,
-9338,9339,9340,9341,9342,9343,9344,9345,9346,9347,9348,9349,9350,9351,9352,
-9353,9354,9355,9356,9357,9358,9359,9360,9361,9362,9363,9364,9365,9366,9367,
-9368,9369,9370,9371,9372,9373,9374,9375,9376,9377,9378,9379,9380,9381,9382,
-9383,9384,9385,9386,9387,9388,9389,9390,9391,9392,9393,9394,9395,9396,9397,
-9398,9399,9400,9401,9402,9403,9404,9405,9406,9407,9408,9409,9410,9411,9412,
-9413,9414,9415,9416,9417,9418,9419,9420,9421,9422,9423,9398,9399,9400,9401,
-9402,9403,9404,9405,9406,9407,9408,9409,9410,9411,9412,9413,9414,9415,9416,
-9417,9418,9419,9420,9421,9422,9423,9450,9451,9452,9453,9454,9455,9456,9457,
-9458,9459,9460,9461,9462,9463,9464,9465,9466,9467,9468,9469,9470,9471,9472,
-9473,9474,9475,9476,9477,9478,9479,9480,9481,9482,9483,9484,9485,9486,9487,
-9488,9489,9490,9491,9492,9493,9494,9495,9496,9497,9498,9499,9500,9501,9502,
-9503,9504,9505,9506,9507,9508,9509,9510,9511,9512,9513,9514,9515,9516,9517,
-9518,9519,9520,9521,9522,9523,9524,9525,9526,9527,9528,9529,9530,9531,9532,
-9533,9534,9535,9536,9537,9538,9539,9540,9541,9542,9543,9544,9545,9546,9547,
-9548,9549,9550,9551,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,
-9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,
-9578,9579,9580,9581,9582,9583,9584,9585,9586,9587,9588,9589,9590,9591,9592,
-9593,9594,9595,9596,9597,9598,9599,9600,9601,9602,9603,9604,9605,9606,9607,
-9608,9609,9610,9611,9612,9613,9614,9615,9616,9617,9618,9619,9620,9621,9622,
-9623,9624,9625,9626,9627,9628,9629,9630,9631,9632,9633,9634,9635,9636,9637,
-9638,9639,9640,9641,9642,9643,9644,9645,9646,9647,9648,9649,9650,9651,9652,
-9653,9654,9655,9656,9657,9658,9659,9660,9661,9662,9663,9664,9665,9666,9667,
-9668,9669,9670,9671,9672,9673,9674,9675,9676,9677,9678,9679,9680,9681,9682,
-9683,9684,9685,9686,9687,9688,9689,9690,9691,9692,9693,9694,9695,9696,9697,
-9698,9699,9700,9701,9702,9703,9704,9705,9706,9707,9708,9709,9710,9711,9712,
-9713,9714,9715,9716,9717,9718,9719,9720,9721,9722,9723,9724,9725,9726,9727,
-9728,9729,9730,9731,9732,9733,9734,9735,9736,9737,9738,9739,9740,9741,9742,
-9743,9744,9745,9746,9747,9748,9749,9750,9751,9752,9753,9754,9755,9756,9757,
-9758,9759,9760,9761,9762,9763,9764,9765,9766,9767,9768,9769,9770,9771,9772,
-9773,9774,9775,9776,9777,9778,9779,9780,9781,9782,9783,9784,9785,9786,9787,
-9788,9789,9790,9791,9792,9793,9794,9795,9796,9797,9798,9799,9800,9801,9802,
-9803,9804,9805,9806,9807,9808,9809,9810,9811,9812,9813,9814,9815,9816,9817,
-9818,9819,9820,9821,9822,9823,9824,9825,9826,9827,9828,9829,9830,9831,9832,
-9833,9834,9835,9836,9837,9838,9839,9840,9841,9842,9843,9844,9845,9846,9847,
-9848,9849,9850,9851,9852,9853,9854,9855,9856,9857,9858,9859,9860,9861,9862,
-9863,9864,9865,9866,9867,9868,9869,9870,9871,9872,9873,9874,9875,9876,9877,
-9878,9879,9880,9881,9882,9883,9884,9885,9886,9887,9888,9889,9890,9891,9892,
-9893,9894,9895,9896,9897,9898,9899,9900,9901,9902,9903,9904,9905,9906,9907,
-9908,9909,9910,9911,9912,9913,9914,9915,9916,9917,9918,9919,9920,9921,9922,
-9923,9924,9925,9926,9927,9928,9929,9930,9931,9932,9933,9934,9935,9936,9937,
-9938,9939,9940,9941,9942,9943,9944,9945,9946,9947,9948,9949,9950,9951,9952,
-9953,9954,9955,9956,9957,9958,9959,9960,9961,9962,9963,9964,9965,9966,9967,
-9968,9969,9970,9971,9972,9973,9974,9975,9976,9977,9978,9979,9980,9981,9982,
-9983,9984,9985,9986,9987,9988,9989,9990,9991,9992,9993,9994,9995,9996,9997,
-9998,9999,10000,10001,10002,10003,10004,10005,10006,10007,10008,10009,
-10010,10011,10012,10013,10014,10015,10016,10017,10018,10019,10020,10021,
-10022,10023,10024,10025,10026,10027,10028,10029,10030,10031,10032,10033,
-10034,10035,10036,10037,10038,10039,10040,10041,10042,10043,10044,10045,
-10046,10047,10048,10049,10050,10051,10052,10053,10054,10055,10056,10057,
-10058,10059,10060,10061,10062,10063,10064,10065,10066,10067,10068,10069,
-10070,10071,10072,10073,10074,10075,10076,10077,10078,10079,10080,10081,
-10082,10083,10084,10085,10086,10087,10088,10089,10090,10091,10092,10093,
-10094,10095,10096,10097,10098,10099,10100,10101,10102,10103,10104,10105,
-10106,10107,10108,10109,10110,10111,10112,10113,10114,10115,10116,10117,
-10118,10119,10120,10121,10122,10123,10124,10125,10126,10127,10128,10129,
-10130,10131,10132,10133,10134,10135,10136,10137,10138,10139,10140,10141,
-10142,10143,10144,10145,10146,10147,10148,10149,10150,10151,10152,10153,
-10154,10155,10156,10157,10158,10159,10160,10161,10162,10163,10164,10165,
-10166,10167,10168,10169,10170,10171,10172,10173,10174,10175,10176,10177,
-10178,10179,10180,10181,10182,10183,10184,10185,10186,10187,10188,10189,
-10190,10191,10192,10193,10194,10195,10196,10197,10198,10199,10200,10201,
-10202,10203,10204,10205,10206,10207,10208,10209,10210,10211,10212,10213,
-10214,10215,10216,10217,10218,10219,10220,10221,10222,10223,10224,10225,
-10226,10227,10228,10229,10230,10231,10232,10233,10234,10235,10236,10237,
-10238,10239,10240,10241,10242,10243,10244,10245,10246,10247,10248,10249,
-10250,10251,10252,10253,10254,10255,10256,10257,10258,10259,10260,10261,
-10262,10263,10264,10265,10266,10267,10268,10269,10270,10271,10272,10273,
-10274,10275,10276,10277,10278,10279,10280,10281,10282,10283,10284,10285,
-10286,10287,10288,10289,10290,10291,10292,10293,10294,10295,10296,10297,
-10298,10299,10300,10301,10302,10303,10304,10305,10306,10307,10308,10309,
-10310,10311,10312,10313,10314,10315,10316,10317,10318,10319,10320,10321,
-10322,10323,10324,10325,10326,10327,10328,10329,10330,10331,10332,10333,
-10334,10335,10336,10337,10338,10339,10340,10341,10342,10343,10344,10345,
-10346,10347,10348,10349,10350,10351,10352,10353,10354,10355,10356,10357,
-10358,10359,10360,10361,10362,10363,10364,10365,10366,10367,10368,10369,
-10370,10371,10372,10373,10374,10375,10376,10377,10378,10379,10380,10381,
-10382,10383,10384,10385,10386,10387,10388,10389,10390,10391,10392,10393,
-10394,10395,10396,10397,10398,10399,10400,10401,10402,10403,10404,10405,
-10406,10407,10408,10409,10410,10411,10412,10413,10414,10415,10416,10417,
-10418,10419,10420,10421,10422,10423,10424,10425,10426,10427,10428,10429,
-10430,10431,10432,10433,10434,10435,10436,10437,10438,10439,10440,10441,
-10442,10443,10444,10445,10446,10447,10448,10449,10450,10451,10452,10453,
-10454,10455,10456,10457,10458,10459,10460,10461,10462,10463,10464,10465,
-10466,10467,10468,10469,10470,10471,10472,10473,10474,10475,10476,10477,
-10478,10479,10480,10481,10482,10483,10484,10485,10486,10487,10488,10489,
-10490,10491,10492,10493,10494,10495,10496,10497,10498,10499,10500,10501,
-10502,10503,10504,10505,10506,10507,10508,10509,10510,10511,10512,10513,
-10514,10515,10516,10517,10518,10519,10520,10521,10522,10523,10524,10525,
-10526,10527,10528,10529,10530,10531,10532,10533,10534,10535,10536,10537,
-10538,10539,10540,10541,10542,10543,10544,10545,10546,10547,10548,10549,
-10550,10551,10552,10553,10554,10555,10556,10557,10558,10559,10560,10561,
-10562,10563,10564,10565,10566,10567,10568,10569,10570,10571,10572,10573,
-10574,10575,10576,10577,10578,10579,10580,10581,10582,10583,10584,10585,
-10586,10587,10588,10589,10590,10591,10592,10593,10594,10595,10596,10597,
-10598,10599,10600,10601,10602,10603,10604,10605,10606,10607,10608,10609,
-10610,10611,10612,10613,10614,10615,10616,10617,10618,10619,10620,10621,
-10622,10623,10624,10625,10626,10627,10628,10629,10630,10631,10632,10633,
-10634,10635,10636,10637,10638,10639,10640,10641,10642,10643,10644,10645,
-10646,10647,10648,10649,10650,10651,10652,10653,10654,10655,10656,10657,
-10658,10659,10660,10661,10662,10663,10664,10665,10666,10667,10668,10669,
-10670,10671,10672,10673,10674,10675,10676,10677,10678,10679,10680,10681,
-10682,10683,10684,10685,10686,10687,10688,10689,10690,10691,10692,10693,
-10694,10695,10696,10697,10698,10699,10700,10701,10702,10703,10704,10705,
-10706,10707,10708,10709,10710,10711,10712,10713,10714,10715,10716,10717,
-10718,10719,10720,10721,10722,10723,10724,10725,10726,10727,10728,10729,
-10730,10731,10732,10733,10734,10735,10736,10737,10738,10739,10740,10741,
-10742,10743,10744,10745,10746,10747,10748,10749,10750,10751,10752,10753,
-10754,10755,10756,10757,10758,10759,10760,10761,10762,10763,10764,10765,
-10766,10767,10768,10769,10770,10771,10772,10773,10774,10775,10776,10777,
-10778,10779,10780,10781,10782,10783,10784,10785,10786,10787,10788,10789,
-10790,10791,10792,10793,10794,10795,10796,10797,10798,10799,10800,10801,
-10802,10803,10804,10805,10806,10807,10808,10809,10810,10811,10812,10813,
-10814,10815,10816,10817,10818,10819,10820,10821,10822,10823,10824,10825,
-10826,10827,10828,10829,10830,10831,10832,10833,10834,10835,10836,10837,
-10838,10839,10840,10841,10842,10843,10844,10845,10846,10847,10848,10849,
-10850,10851,10852,10853,10854,10855,10856,10857,10858,10859,10860,10861,
-10862,10863,10864,10865,10866,10867,10868,10869,10870,10871,10872,10873,
-10874,10875,10876,10877,10878,10879,10880,10881,10882,10883,10884,10885,
-10886,10887,10888,10889,10890,10891,10892,10893,10894,10895,10896,10897,
-10898,10899,10900,10901,10902,10903,10904,10905,10906,10907,10908,10909,
-10910,10911,10912,10913,10914,10915,10916,10917,10918,10919,10920,10921,
-10922,10923,10924,10925,10926,10927,10928,10929,10930,10931,10932,10933,
-10934,10935,10936,10937,10938,10939,10940,10941,10942,10943,10944,10945,
-10946,10947,10948,10949,10950,10951,10952,10953,10954,10955,10956,10957,
-10958,10959,10960,10961,10962,10963,10964,10965,10966,10967,10968,10969,
-10970,10971,10972,10973,10974,10975,10976,10977,10978,10979,10980,10981,
-10982,10983,10984,10985,10986,10987,10988,10989,10990,10991,10992,10993,
-10994,10995,10996,10997,10998,10999,11000,11001,11002,11003,11004,11005,
-11006,11007,11008,11009,11010,11011,11012,11013,11014,11015,11016,11017,
-11018,11019,11020,11021,11022,11023,11024,11025,11026,11027,11028,11029,
-11030,11031,11032,11033,11034,11035,11036,11037,11038,11039,11040,11041,
-11042,11043,11044,11045,11046,11047,11048,11049,11050,11051,11052,11053,
-11054,11055,11056,11057,11058,11059,11060,11061,11062,11063,11064,11065,
-11066,11067,11068,11069,11070,11071,11072,11073,11074,11075,11076,11077,
-11078,11079,11080,11081,11082,11083,11084,11085,11086,11087,11088,11089,
-11090,11091,11092,11093,11094,11095,11096,11097,11098,11099,11100,11101,
-11102,11103,11104,11105,11106,11107,11108,11109,11110,11111,11112,11113,
-11114,11115,11116,11117,11118,11119,11120,11121,11122,11123,11124,11125,
-11126,11127,11128,11129,11130,11131,11132,11133,11134,11135,11136,11137,
-11138,11139,11140,11141,11142,11143,11144,11145,11146,11147,11148,11149,
-11150,11151,11152,11153,11154,11155,11156,11157,11158,11159,11160,11161,
-11162,11163,11164,11165,11166,11167,11168,11169,11170,11171,11172,11173,
-11174,11175,11176,11177,11178,11179,11180,11181,11182,11183,11184,11185,
-11186,11187,11188,11189,11190,11191,11192,11193,11194,11195,11196,11197,
-11198,11199,11200,11201,11202,11203,11204,11205,11206,11207,11208,11209,
-11210,11211,11212,11213,11214,11215,11216,11217,11218,11219,11220,11221,
-11222,11223,11224,11225,11226,11227,11228,11229,11230,11231,11232,11233,
-11234,11235,11236,11237,11238,11239,11240,11241,11242,11243,11244,11245,
-11246,11247,11248,11249,11250,11251,11252,11253,11254,11255,11256,11257,
-11258,11259,11260,11261,11262,11263,11264,11265,11266,11267,11268,11269,
-11270,11271,11272,11273,11274,11275,11276,11277,11278,11279,11280,11281,
-11282,11283,11284,11285,11286,11287,11288,11289,11290,11291,11292,11293,
-11294,11295,11296,11297,11298,11299,11300,11301,11302,11303,11304,11305,
-11306,11307,11308,11309,11310,11311,11264,11265,11266,11267,11268,11269,
-11270,11271,11272,11273,11274,11275,11276,11277,11278,11279,11280,11281,
-11282,11283,11284,11285,11286,11287,11288,11289,11290,11291,11292,11293,
-11294,11295,11296,11297,11298,11299,11300,11301,11302,11303,11304,11305,
-11306,11307,11308,11309,11310,11359,11360,11360,11362,11363,11364,570,574,
-11367,11367,11369,11369,11371,11371,11373,11374,11375,11376,11377,11378,
-11378,11380,11381,11381,11383,11384,11385,11386,11387,11388,11389,11390,
-11391,11392,11392,11394,11394,11396,11396,11398,11398,11400,11400,11402,
-11402,11404,11404,11406,11406,11408,11408,11410,11410,11412,11412,11414,
-11414,11416,11416,11418,11418,11420,11420,11422,11422,11424,11424,11426,
-11426,11428,11428,11430,11430,11432,11432,11434,11434,11436,11436,11438,
-11438,11440,11440,11442,11442,11444,11444,11446,11446,11448,11448,11450,
-11450,11452,11452,11454,11454,11456,11456,11458,11458,11460,11460,11462,
-11462,11464,11464,11466,11466,11468,11468,11470,11470,11472,11472,11474,
-11474,11476,11476,11478,11478,11480,11480,11482,11482,11484,11484,11486,
-11486,11488,11488,11490,11490,11492,11493,11494,11495,11496,11497,11498,
-11499,11499,11501,11501,11503,11504,11505,11506,11506,11508,11509,11510,
-11511,11512,11513,11514,11515,11516,11517,11518,11519,4256,4257,4258,4259,
-4260,4261,4262,4263,4264,4265,4266,4267,4268,4269,4270,4271,4272,4273,4274,
-4275,4276,4277,4278,4279,4280,4281,4282,4283,4284,4285,4286,4287,4288,4289,
-4290,4291,4292,4293,11558,4295,11560,11561,11562,11563,11564,4301,11566,
-11567,11568,11569,11570,11571,11572,11573,11574,11575,11576,11577,11578,
-11579,11580,11581,11582,11583,11584,11585,11586,11587,11588,11589,11590,
-11591,11592,11593,11594,11595,11596,11597,11598,11599,11600,11601,11602,
-11603,11604,11605,11606,11607,11608,11609,11610,11611,11612,11613,11614,
-11615,11616,11617,11618,11619,11620,11621,11622,11623,11624,11625,11626,
-11627,11628,11629,11630,11631,11632,11633,11634,11635,11636,11637,11638,
-11639,11640,11641,11642,11643,11644,11645,11646,11647,11648,11649,11650,
-11651,11652,11653,11654,11655,11656,11657,11658,11659,11660,11661,11662,
-11663,11664,11665,11666,11667,11668,11669,11670,11671,11672,11673,11674,
-11675,11676,11677,11678,11679,11680,11681,11682,11683,11684,11685,11686,
-11687,11688,11689,11690,11691,11692,11693,11694,11695,11696,11697,11698,
-11699,11700,11701,11702,11703,11704,11705,11706,11707,11708,11709,11710,
-11711,11712,11713,11714,11715,11716,11717,11718,11719,11720,11721,11722,
-11723,11724,11725,11726,11727,11728,11729,11730,11731,11732,11733,11734,
-11735,11736,11737,11738,11739,11740,11741,11742,11743,11744,11745,11746,
-11747,11748,11749,11750,11751,11752,11753,11754,11755,11756,11757,11758,
-11759,11760,11761,11762,11763,11764,11765,11766,11767,11768,11769,11770,
-11771,11772,11773,11774,11775,11776,11777,11778,11779,11780,11781,11782,
-11783,11784,11785,11786,11787,11788,11789,11790,11791,11792,11793,11794,
-11795,11796,11797,11798,11799,11800,11801,11802,11803,11804,11805,11806,
-11807,11808,11809,11810,11811,11812,11813,11814,11815,11816,11817,11818,
-11819,11820,11821,11822,11823,11824,11825,11826,11827,11828,11829,11830,
-11831,11832,11833,11834,11835,11836,11837,11838,11839,11840,11841,11842,
-11843,11844,11845,11846,11847,11848,11849,11850,11851,11852,11853,11854,
-11855,11856,11857,11858,11859,11860,11861,11862,11863,11864,11865,11866,
-11867,11868,11869,11870,11871,11872,11873,11874,11875,11876,11877,11878,
-11879,11880,11881,11882,11883,11884,11885,11886,11887,11888,11889,11890,
-11891,11892,11893,11894,11895,11896,11897,11898,11899,11900,11901,11902,
-11903,11904,11905,11906,11907,11908,11909,11910,11911,11912,11913,11914,
-11915,11916,11917,11918,11919,11920,11921,11922,11923,11924,11925,11926,
-11927,11928,11929,11930,11931,11932,11933,11934,11935,11936,11937,11938,
-11939,11940,11941,11942,11943,11944,11945,11946,11947,11948,11949,11950,
-11951,11952,11953,11954,11955,11956,11957,11958,11959,11960,11961,11962,
-11963,11964,11965,11966,11967,11968,11969,11970,11971,11972,11973,11974,
-11975,11976,11977,11978,11979,11980,11981,11982,11983,11984,11985,11986,
-11987,11988,11989,11990,11991,11992,11993,11994,11995,11996,11997,11998,
-11999,12000,12001,12002,12003,12004,12005,12006,12007,12008,12009,12010,
-12011,12012,12013,12014,12015,12016,12017,12018,12019,12020,12021,12022,
-12023,12024,12025,12026,12027,12028,12029,12030,12031,12032,12033,12034,
-12035,12036,12037,12038,12039,12040,12041,12042,12043,12044,12045,12046,
-12047,12048,12049,12050,12051,12052,12053,12054,12055,12056,12057,12058,
-12059,12060,12061,12062,12063,12064,12065,12066,12067,12068,12069,12070,
-12071,12072,12073,12074,12075,12076,12077,12078,12079,12080,12081,12082,
-12083,12084,12085,12086,12087,12088,12089,12090,12091,12092,12093,12094,
-12095,12096,12097,12098,12099,12100,12101,12102,12103,12104,12105,12106,
-12107,12108,12109,12110,12111,12112,12113,12114,12115,12116,12117,12118,
-12119,12120,12121,12122,12123,12124,12125,12126,12127,12128,12129,12130,
-12131,12132,12133,12134,12135,12136,12137,12138,12139,12140,12141,12142,
-12143,12144,12145,12146,12147,12148,12149,12150,12151,12152,12153,12154,
-12155,12156,12157,12158,12159,12160,12161,12162,12163,12164,12165,12166,
-12167,12168,12169,12170,12171,12172,12173,12174,12175,12176,12177,12178,
-12179,12180,12181,12182,12183,12184,12185,12186,12187,12188,12189,12190,
-12191,12192,12193,12194,12195,12196,12197,12198,12199,12200,12201,12202,
-12203,12204,12205,12206,12207,12208,12209,12210,12211,12212,12213,12214,
-12215,12216,12217,12218,12219,12220,12221,12222,12223,12224,12225,12226,
-12227,12228,12229,12230,12231,12232,12233,12234,12235,12236,12237,12238,
-12239,12240,12241,12242,12243,12244,12245,12246,12247,12248,12249,12250,
-12251,12252,12253,12254,12255,12256,12257,12258,12259,12260,12261,12262,
-12263,12264,12265,12266,12267,12268,12269,12270,12271,12272,12273,12274,
-12275,12276,12277,12278,12279,12280,12281,12282,12283,12284,12285,12286,
-12287,12288,12289,12290,12291,12292,12293,12294,12295,12296,12297,12298,
-12299,12300,12301,12302,12303,12304,12305,12306,12307,12308,12309,12310,
-12311,12312,12313,12314,12315,12316,12317,12318,12319,12320,12321,12322,
-12323,12324,12325,12326,12327,12328,12329,12330,12331,12332,12333,12334,
-12335,12336,12337,12338,12339,12340,12341,12342,12343,12344,12345,12346,
-12347,12348,12349,12350,12351,12352,12353,12354,12355,12356,12357,12358,
-12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,
-12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,
-12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,
-12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,
-12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,
-12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,
-12431,12432,12433,12434,12435,12436,12437,12438,12439,12440,12441,12442,
-12443,12444,12445,12446,12447,12448,12449,12450,12451,12452,12453,12454,
-12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,
-12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,
-12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,
-12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,
-12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,
-12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,
-12527,12528,12529,12530,12531,12532,12533,12534,12535,12536,12537,12538,
-12539,12540,12541,12542,12543,12544,12545,12546,12547,12548,12549,12550,
-12551,12552,12553,12554,12555,12556,12557,12558,12559,12560,12561,12562,
-12563,12564,12565,12566,12567,12568,12569,12570,12571,12572,12573,12574,
-12575,12576,12577,12578,12579,12580,12581,12582,12583,12584,12585,12586,
-12587,12588,12589,12590,12591,12592,12593,12594,12595,12596,12597,12598,
-12599,12600,12601,12602,12603,12604,12605,12606,12607,12608,12609,12610,
-12611,12612,12613,12614,12615,12616,12617,12618,12619,12620,12621,12622,
-12623,12624,12625,12626,12627,12628,12629,12630,12631,12632,12633,12634,
-12635,12636,12637,12638,12639,12640,12641,12642,12643,12644,12645,12646,
-12647,12648,12649,12650,12651,12652,12653,12654,12655,12656,12657,12658,
-12659,12660,12661,12662,12663,12664,12665,12666,12667,12668,12669,12670,
-12671,12672,12673,12674,12675,12676,12677,12678,12679,12680,12681,12682,
-12683,12684,12685,12686,12687,12688,12689,12690,12691,12692,12693,12694,
-12695,12696,12697,12698,12699,12700,12701,12702,12703,12704,12705,12706,
-12707,12708,12709,12710,12711,12712,12713,12714,12715,12716,12717,12718,
-12719,12720,12721,12722,12723,12724,12725,12726,12727,12728,12729,12730,
-12731,12732,12733,12734,12735,12736,12737,12738,12739,12740,12741,12742,
-12743,12744,12745,12746,12747,12748,12749,12750,12751,12752,12753,12754,
-12755,12756,12757,12758,12759,12760,12761,12762,12763,12764,12765,12766,
-12767,12768,12769,12770,12771,12772,12773,12774,12775,12776,12777,12778,
-12779,12780,12781,12782,12783,12784,12785,12786,12787,12788,12789,12790,
-12791,12792,12793,12794,12795,12796,12797,12798,12799,12800,12801,12802,
-12803,12804,12805,12806,12807,12808,12809,12810,12811,12812,12813,12814,
-12815,12816,12817,12818,12819,12820,12821,12822,12823,12824,12825,12826,
-12827,12828,12829,12830,12831,12832,12833,12834,12835,12836,12837,12838,
-12839,12840,12841,12842,12843,12844,12845,12846,12847,12848,12849,12850,
-12851,12852,12853,12854,12855,12856,12857,12858,12859,12860,12861,12862,
-12863,12864,12865,12866,12867,12868,12869,12870,12871,12872,12873,12874,
-12875,12876,12877,12878,12879,12880,12881,12882,12883,12884,12885,12886,
-12887,12888,12889,12890,12891,12892,12893,12894,12895,12896,12897,12898,
-12899,12900,12901,12902,12903,12904,12905,12906,12907,12908,12909,12910,
-12911,12912,12913,12914,12915,12916,12917,12918,12919,12920,12921,12922,
-12923,12924,12925,12926,12927,12928,12929,12930,12931,12932,12933,12934,
-12935,12936,12937,12938,12939,12940,12941,12942,12943,12944,12945,12946,
-12947,12948,12949,12950,12951,12952,12953,12954,12955,12956,12957,12958,
-12959,12960,12961,12962,12963,12964,12965,12966,12967,12968,12969,12970,
-12971,12972,12973,12974,12975,12976,12977,12978,12979,12980,12981,12982,
-12983,12984,12985,12986,12987,12988,12989,12990,12991,12992,12993,12994,
-12995,12996,12997,12998,12999,13000,13001,13002,13003,13004,13005,13006,
-13007,13008,13009,13010,13011,13012,13013,13014,13015,13016,13017,13018,
-13019,13020,13021,13022,13023,13024,13025,13026,13027,13028,13029,13030,
-13031,13032,13033,13034,13035,13036,13037,13038,13039,13040,13041,13042,
-13043,13044,13045,13046,13047,13048,13049,13050,13051,13052,13053,13054,
-13055,13056,13057,13058,13059,13060,13061,13062,13063,13064,13065,13066,
-13067,13068,13069,13070,13071,13072,13073,13074,13075,13076,13077,13078,
-13079,13080,13081,13082,13083,13084,13085,13086,13087,13088,13089,13090,
-13091,13092,13093,13094,13095,13096,13097,13098,13099,13100,13101,13102,
-13103,13104,13105,13106,13107,13108,13109,13110,13111,13112,13113,13114,
-13115,13116,13117,13118,13119,13120,13121,13122,13123,13124,13125,13126,
-13127,13128,13129,13130,13131,13132,13133,13134,13135,13136,13137,13138,
-13139,13140,13141,13142,13143,13144,13145,13146,13147,13148,13149,13150,
-13151,13152,13153,13154,13155,13156,13157,13158,13159,13160,13161,13162,
-13163,13164,13165,13166,13167,13168,13169,13170,13171,13172,13173,13174,
-13175,13176,13177,13178,13179,13180,13181,13182,13183,13184,13185,13186,
-13187,13188,13189,13190,13191,13192,13193,13194,13195,13196,13197,13198,
-13199,13200,13201,13202,13203,13204,13205,13206,13207,13208,13209,13210,
-13211,13212,13213,13214,13215,13216,13217,13218,13219,13220,13221,13222,
-13223,13224,13225,13226,13227,13228,13229,13230,13231,13232,13233,13234,
-13235,13236,13237,13238,13239,13240,13241,13242,13243,13244,13245,13246,
-13247,13248,13249,13250,13251,13252,13253,13254,13255,13256,13257,13258,
-13259,13260,13261,13262,13263,13264,13265,13266,13267,13268,13269,13270,
-13271,13272,13273,13274,13275,13276,13277,13278,13279,13280,13281,13282,
-13283,13284,13285,13286,13287,13288,13289,13290,13291,13292,13293,13294,
-13295,13296,13297,13298,13299,13300,13301,13302,13303,13304,13305,13306,
-13307,13308,13309,13310,13311,13312,13313,13314,13315,13316,13317,13318,
-13319,13320,13321,13322,13323,13324,13325,13326,13327,13328,13329,13330,
-13331,13332,13333,13334,13335,13336,13337,13338,13339,13340,13341,13342,
-13343,13344,13345,13346,13347,13348,13349,13350,13351,13352,13353,13354,
-13355,13356,13357,13358,13359,13360,13361,13362,13363,13364,13365,13366,
-13367,13368,13369,13370,13371,13372,13373,13374,13375,13376,13377,13378,
-13379,13380,13381,13382,13383,13384,13385,13386,13387,13388,13389,13390,
-13391,13392,13393,13394,13395,13396,13397,13398,13399,13400,13401,13402,
-13403,13404,13405,13406,13407,13408,13409,13410,13411,13412,13413,13414,
-13415,13416,13417,13418,13419,13420,13421,13422,13423,13424,13425,13426,
-13427,13428,13429,13430,13431,13432,13433,13434,13435,13436,13437,13438,
-13439,13440,13441,13442,13443,13444,13445,13446,13447,13448,13449,13450,
-13451,13452,13453,13454,13455,13456,13457,13458,13459,13460,13461,13462,
-13463,13464,13465,13466,13467,13468,13469,13470,13471,13472,13473,13474,
-13475,13476,13477,13478,13479,13480,13481,13482,13483,13484,13485,13486,
-13487,13488,13489,13490,13491,13492,13493,13494,13495,13496,13497,13498,
-13499,13500,13501,13502,13503,13504,13505,13506,13507,13508,13509,13510,
-13511,13512,13513,13514,13515,13516,13517,13518,13519,13520,13521,13522,
-13523,13524,13525,13526,13527,13528,13529,13530,13531,13532,13533,13534,
-13535,13536,13537,13538,13539,13540,13541,13542,13543,13544,13545,13546,
-13547,13548,13549,13550,13551,13552,13553,13554,13555,13556,13557,13558,
-13559,13560,13561,13562,13563,13564,13565,13566,13567,13568,13569,13570,
-13571,13572,13573,13574,13575,13576,13577,13578,13579,13580,13581,13582,
-13583,13584,13585,13586,13587,13588,13589,13590,13591,13592,13593,13594,
-13595,13596,13597,13598,13599,13600,13601,13602,13603,13604,13605,13606,
-13607,13608,13609,13610,13611,13612,13613,13614,13615,13616,13617,13618,
-13619,13620,13621,13622,13623,13624,13625,13626,13627,13628,13629,13630,
-13631,13632,13633,13634,13635,13636,13637,13638,13639,13640,13641,13642,
-13643,13644,13645,13646,13647,13648,13649,13650,13651,13652,13653,13654,
-13655,13656,13657,13658,13659,13660,13661,13662,13663,13664,13665,13666,
-13667,13668,13669,13670,13671,13672,13673,13674,13675,13676,13677,13678,
-13679,13680,13681,13682,13683,13684,13685,13686,13687,13688,13689,13690,
-13691,13692,13693,13694,13695,13696,13697,13698,13699,13700,13701,13702,
-13703,13704,13705,13706,13707,13708,13709,13710,13711,13712,13713,13714,
-13715,13716,13717,13718,13719,13720,13721,13722,13723,13724,13725,13726,
-13727,13728,13729,13730,13731,13732,13733,13734,13735,13736,13737,13738,
-13739,13740,13741,13742,13743,13744,13745,13746,13747,13748,13749,13750,
-13751,13752,13753,13754,13755,13756,13757,13758,13759,13760,13761,13762,
-13763,13764,13765,13766,13767,13768,13769,13770,13771,13772,13773,13774,
-13775,13776,13777,13778,13779,13780,13781,13782,13783,13784,13785,13786,
-13787,13788,13789,13790,13791,13792,13793,13794,13795,13796,13797,13798,
-13799,13800,13801,13802,13803,13804,13805,13806,13807,13808,13809,13810,
-13811,13812,13813,13814,13815,13816,13817,13818,13819,13820,13821,13822,
-13823,13824,13825,13826,13827,13828,13829,13830,13831,13832,13833,13834,
-13835,13836,13837,13838,13839,13840,13841,13842,13843,13844,13845,13846,
-13847,13848,13849,13850,13851,13852,13853,13854,13855,13856,13857,13858,
-13859,13860,13861,13862,13863,13864,13865,13866,13867,13868,13869,13870,
-13871,13872,13873,13874,13875,13876,13877,13878,13879,13880,13881,13882,
-13883,13884,13885,13886,13887,13888,13889,13890,13891,13892,13893,13894,
-13895,13896,13897,13898,13899,13900,13901,13902,13903,13904,13905,13906,
-13907,13908,13909,13910,13911,13912,13913,13914,13915,13916,13917,13918,
-13919,13920,13921,13922,13923,13924,13925,13926,13927,13928,13929,13930,
-13931,13932,13933,13934,13935,13936,13937,13938,13939,13940,13941,13942,
-13943,13944,13945,13946,13947,13948,13949,13950,13951,13952,13953,13954,
-13955,13956,13957,13958,13959,13960,13961,13962,13963,13964,13965,13966,
-13967,13968,13969,13970,13971,13972,13973,13974,13975,13976,13977,13978,
-13979,13980,13981,13982,13983,13984,13985,13986,13987,13988,13989,13990,
-13991,13992,13993,13994,13995,13996,13997,13998,13999,14000,14001,14002,
-14003,14004,14005,14006,14007,14008,14009,14010,14011,14012,14013,14014,
-14015,14016,14017,14018,14019,14020,14021,14022,14023,14024,14025,14026,
-14027,14028,14029,14030,14031,14032,14033,14034,14035,14036,14037,14038,
-14039,14040,14041,14042,14043,14044,14045,14046,14047,14048,14049,14050,
-14051,14052,14053,14054,14055,14056,14057,14058,14059,14060,14061,14062,
-14063,14064,14065,14066,14067,14068,14069,14070,14071,14072,14073,14074,
-14075,14076,14077,14078,14079,14080,14081,14082,14083,14084,14085,14086,
-14087,14088,14089,14090,14091,14092,14093,14094,14095,14096,14097,14098,
-14099,14100,14101,14102,14103,14104,14105,14106,14107,14108,14109,14110,
-14111,14112,14113,14114,14115,14116,14117,14118,14119,14120,14121,14122,
-14123,14124,14125,14126,14127,14128,14129,14130,14131,14132,14133,14134,
-14135,14136,14137,14138,14139,14140,14141,14142,14143,14144,14145,14146,
-14147,14148,14149,14150,14151,14152,14153,14154,14155,14156,14157,14158,
-14159,14160,14161,14162,14163,14164,14165,14166,14167,14168,14169,14170,
-14171,14172,14173,14174,14175,14176,14177,14178,14179,14180,14181,14182,
-14183,14184,14185,14186,14187,14188,14189,14190,14191,14192,14193,14194,
-14195,14196,14197,14198,14199,14200,14201,14202,14203,14204,14205,14206,
-14207,14208,14209,14210,14211,14212,14213,14214,14215,14216,14217,14218,
-14219,14220,14221,14222,14223,14224,14225,14226,14227,14228,14229,14230,
-14231,14232,14233,14234,14235,14236,14237,14238,14239,14240,14241,14242,
-14243,14244,14245,14246,14247,14248,14249,14250,14251,14252,14253,14254,
-14255,14256,14257,14258,14259,14260,14261,14262,14263,14264,14265,14266,
-14267,14268,14269,14270,14271,14272,14273,14274,14275,14276,14277,14278,
-14279,14280,14281,14282,14283,14284,14285,14286,14287,14288,14289,14290,
-14291,14292,14293,14294,14295,14296,14297,14298,14299,14300,14301,14302,
-14303,14304,14305,14306,14307,14308,14309,14310,14311,14312,14313,14314,
-14315,14316,14317,14318,14319,14320,14321,14322,14323,14324,14325,14326,
-14327,14328,14329,14330,14331,14332,14333,14334,14335,14336,14337,14338,
-14339,14340,14341,14342,14343,14344,14345,14346,14347,14348,14349,14350,
-14351,14352,14353,14354,14355,14356,14357,14358,14359,14360,14361,14362,
-14363,14364,14365,14366,14367,14368,14369,14370,14371,14372,14373,14374,
-14375,14376,14377,14378,14379,14380,14381,14382,14383,14384,14385,14386,
-14387,14388,14389,14390,14391,14392,14393,14394,14395,14396,14397,14398,
-14399,14400,14401,14402,14403,14404,14405,14406,14407,14408,14409,14410,
-14411,14412,14413,14414,14415,14416,14417,14418,14419,14420,14421,14422,
-14423,14424,14425,14426,14427,14428,14429,14430,14431,14432,14433,14434,
-14435,14436,14437,14438,14439,14440,14441,14442,14443,14444,14445,14446,
-14447,14448,14449,14450,14451,14452,14453,14454,14455,14456,14457,14458,
-14459,14460,14461,14462,14463,14464,14465,14466,14467,14468,14469,14470,
-14471,14472,14473,14474,14475,14476,14477,14478,14479,14480,14481,14482,
-14483,14484,14485,14486,14487,14488,14489,14490,14491,14492,14493,14494,
-14495,14496,14497,14498,14499,14500,14501,14502,14503,14504,14505,14506,
-14507,14508,14509,14510,14511,14512,14513,14514,14515,14516,14517,14518,
-14519,14520,14521,14522,14523,14524,14525,14526,14527,14528,14529,14530,
-14531,14532,14533,14534,14535,14536,14537,14538,14539,14540,14541,14542,
-14543,14544,14545,14546,14547,14548,14549,14550,14551,14552,14553,14554,
-14555,14556,14557,14558,14559,14560,14561,14562,14563,14564,14565,14566,
-14567,14568,14569,14570,14571,14572,14573,14574,14575,14576,14577,14578,
-14579,14580,14581,14582,14583,14584,14585,14586,14587,14588,14589,14590,
-14591,14592,14593,14594,14595,14596,14597,14598,14599,14600,14601,14602,
-14603,14604,14605,14606,14607,14608,14609,14610,14611,14612,14613,14614,
-14615,14616,14617,14618,14619,14620,14621,14622,14623,14624,14625,14626,
-14627,14628,14629,14630,14631,14632,14633,14634,14635,14636,14637,14638,
-14639,14640,14641,14642,14643,14644,14645,14646,14647,14648,14649,14650,
-14651,14652,14653,14654,14655,14656,14657,14658,14659,14660,14661,14662,
-14663,14664,14665,14666,14667,14668,14669,14670,14671,14672,14673,14674,
-14675,14676,14677,14678,14679,14680,14681,14682,14683,14684,14685,14686,
-14687,14688,14689,14690,14691,14692,14693,14694,14695,14696,14697,14698,
-14699,14700,14701,14702,14703,14704,14705,14706,14707,14708,14709,14710,
-14711,14712,14713,14714,14715,14716,14717,14718,14719,14720,14721,14722,
-14723,14724,14725,14726,14727,14728,14729,14730,14731,14732,14733,14734,
-14735,14736,14737,14738,14739,14740,14741,14742,14743,14744,14745,14746,
-14747,14748,14749,14750,14751,14752,14753,14754,14755,14756,14757,14758,
-14759,14760,14761,14762,14763,14764,14765,14766,14767,14768,14769,14770,
-14771,14772,14773,14774,14775,14776,14777,14778,14779,14780,14781,14782,
-14783,14784,14785,14786,14787,14788,14789,14790,14791,14792,14793,14794,
-14795,14796,14797,14798,14799,14800,14801,14802,14803,14804,14805,14806,
-14807,14808,14809,14810,14811,14812,14813,14814,14815,14816,14817,14818,
-14819,14820,14821,14822,14823,14824,14825,14826,14827,14828,14829,14830,
-14831,14832,14833,14834,14835,14836,14837,14838,14839,14840,14841,14842,
-14843,14844,14845,14846,14847,14848,14849,14850,14851,14852,14853,14854,
-14855,14856,14857,14858,14859,14860,14861,14862,14863,14864,14865,14866,
-14867,14868,14869,14870,14871,14872,14873,14874,14875,14876,14877,14878,
-14879,14880,14881,14882,14883,14884,14885,14886,14887,14888,14889,14890,
-14891,14892,14893,14894,14895,14896,14897,14898,14899,14900,14901,14902,
-14903,14904,14905,14906,14907,14908,14909,14910,14911,14912,14913,14914,
-14915,14916,14917,14918,14919,14920,14921,14922,14923,14924,14925,14926,
-14927,14928,14929,14930,14931,14932,14933,14934,14935,14936,14937,14938,
-14939,14940,14941,14942,14943,14944,14945,14946,14947,14948,14949,14950,
-14951,14952,14953,14954,14955,14956,14957,14958,14959,14960,14961,14962,
-14963,14964,14965,14966,14967,14968,14969,14970,14971,14972,14973,14974,
-14975,14976,14977,14978,14979,14980,14981,14982,14983,14984,14985,14986,
-14987,14988,14989,14990,14991,14992,14993,14994,14995,14996,14997,14998,
-14999,15000,15001,15002,15003,15004,15005,15006,15007,15008,15009,15010,
-15011,15012,15013,15014,15015,15016,15017,15018,15019,15020,15021,15022,
-15023,15024,15025,15026,15027,15028,15029,15030,15031,15032,15033,15034,
-15035,15036,15037,15038,15039,15040,15041,15042,15043,15044,15045,15046,
-15047,15048,15049,15050,15051,15052,15053,15054,15055,15056,15057,15058,
-15059,15060,15061,15062,15063,15064,15065,15066,15067,15068,15069,15070,
-15071,15072,15073,15074,15075,15076,15077,15078,15079,15080,15081,15082,
-15083,15084,15085,15086,15087,15088,15089,15090,15091,15092,15093,15094,
-15095,15096,15097,15098,15099,15100,15101,15102,15103,15104,15105,15106,
-15107,15108,15109,15110,15111,15112,15113,15114,15115,15116,15117,15118,
-15119,15120,15121,15122,15123,15124,15125,15126,15127,15128,15129,15130,
-15131,15132,15133,15134,15135,15136,15137,15138,15139,15140,15141,15142,
-15143,15144,15145,15146,15147,15148,15149,15150,15151,15152,15153,15154,
-15155,15156,15157,15158,15159,15160,15161,15162,15163,15164,15165,15166,
-15167,15168,15169,15170,15171,15172,15173,15174,15175,15176,15177,15178,
-15179,15180,15181,15182,15183,15184,15185,15186,15187,15188,15189,15190,
-15191,15192,15193,15194,15195,15196,15197,15198,15199,15200,15201,15202,
-15203,15204,15205,15206,15207,15208,15209,15210,15211,15212,15213,15214,
-15215,15216,15217,15218,15219,15220,15221,15222,15223,15224,15225,15226,
-15227,15228,15229,15230,15231,15232,15233,15234,15235,15236,15237,15238,
-15239,15240,15241,15242,15243,15244,15245,15246,15247,15248,15249,15250,
-15251,15252,15253,15254,15255,15256,15257,15258,15259,15260,15261,15262,
-15263,15264,15265,15266,15267,15268,15269,15270,15271,15272,15273,15274,
-15275,15276,15277,15278,15279,15280,15281,15282,15283,15284,15285,15286,
-15287,15288,15289,15290,15291,15292,15293,15294,15295,15296,15297,15298,
-15299,15300,15301,15302,15303,15304,15305,15306,15307,15308,15309,15310,
-15311,15312,15313,15314,15315,15316,15317,15318,15319,15320,15321,15322,
-15323,15324,15325,15326,15327,15328,15329,15330,15331,15332,15333,15334,
-15335,15336,15337,15338,15339,15340,15341,15342,15343,15344,15345,15346,
-15347,15348,15349,15350,15351,15352,15353,15354,15355,15356,15357,15358,
-15359,15360,15361,15362,15363,15364,15365,15366,15367,15368,15369,15370,
-15371,15372,15373,15374,15375,15376,15377,15378,15379,15380,15381,15382,
-15383,15384,15385,15386,15387,15388,15389,15390,15391,15392,15393,15394,
-15395,15396,15397,15398,15399,15400,15401,15402,15403,15404,15405,15406,
-15407,15408,15409,15410,15411,15412,15413,15414,15415,15416,15417,15418,
-15419,15420,15421,15422,15423,15424,15425,15426,15427,15428,15429,15430,
-15431,15432,15433,15434,15435,15436,15437,15438,15439,15440,15441,15442,
-15443,15444,15445,15446,15447,15448,15449,15450,15451,15452,15453,15454,
-15455,15456,15457,15458,15459,15460,15461,15462,15463,15464,15465,15466,
-15467,15468,15469,15470,15471,15472,15473,15474,15475,15476,15477,15478,
-15479,15480,15481,15482,15483,15484,15485,15486,15487,15488,15489,15490,
-15491,15492,15493,15494,15495,15496,15497,15498,15499,15500,15501,15502,
-15503,15504,15505,15506,15507,15508,15509,15510,15511,15512,15513,15514,
-15515,15516,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,
-15527,15528,15529,15530,15531,15532,15533,15534,15535,15536,15537,15538,
-15539,15540,15541,15542,15543,15544,15545,15546,15547,15548,15549,15550,
-15551,15552,15553,15554,15555,15556,15557,15558,15559,15560,15561,15562,
-15563,15564,15565,15566,15567,15568,15569,15570,15571,15572,15573,15574,
-15575,15576,15577,15578,15579,15580,15581,15582,15583,15584,15585,15586,
-15587,15588,15589,15590,15591,15592,15593,15594,15595,15596,15597,15598,
-15599,15600,15601,15602,15603,15604,15605,15606,15607,15608,15609,15610,
-15611,15612,15613,15614,15615,15616,15617,15618,15619,15620,15621,15622,
-15623,15624,15625,15626,15627,15628,15629,15630,15631,15632,15633,15634,
-15635,15636,15637,15638,15639,15640,15641,15642,15643,15644,15645,15646,
-15647,15648,15649,15650,15651,15652,15653,15654,15655,15656,15657,15658,
-15659,15660,15661,15662,15663,15664,15665,15666,15667,15668,15669,15670,
-15671,15672,15673,15674,15675,15676,15677,15678,15679,15680,15681,15682,
-15683,15684,15685,15686,15687,15688,15689,15690,15691,15692,15693,15694,
-15695,15696,15697,15698,15699,15700,15701,15702,15703,15704,15705,15706,
-15707,15708,15709,15710,15711,15712,15713,15714,15715,15716,15717,15718,
-15719,15720,15721,15722,15723,15724,15725,15726,15727,15728,15729,15730,
-15731,15732,15733,15734,15735,15736,15737,15738,15739,15740,15741,15742,
-15743,15744,15745,15746,15747,15748,15749,15750,15751,15752,15753,15754,
-15755,15756,15757,15758,15759,15760,15761,15762,15763,15764,15765,15766,
-15767,15768,15769,15770,15771,15772,15773,15774,15775,15776,15777,15778,
-15779,15780,15781,15782,15783,15784,15785,15786,15787,15788,15789,15790,
-15791,15792,15793,15794,15795,15796,15797,15798,15799,15800,15801,15802,
-15803,15804,15805,15806,15807,15808,15809,15810,15811,15812,15813,15814,
-15815,15816,15817,15818,15819,15820,15821,15822,15823,15824,15825,15826,
-15827,15828,15829,15830,15831,15832,15833,15834,15835,15836,15837,15838,
-15839,15840,15841,15842,15843,15844,15845,15846,15847,15848,15849,15850,
-15851,15852,15853,15854,15855,15856,15857,15858,15859,15860,15861,15862,
-15863,15864,15865,15866,15867,15868,15869,15870,15871,15872,15873,15874,
-15875,15876,15877,15878,15879,15880,15881,15882,15883,15884,15885,15886,
-15887,15888,15889,15890,15891,15892,15893,15894,15895,15896,15897,15898,
-15899,15900,15901,15902,15903,15904,15905,15906,15907,15908,15909,15910,
-15911,15912,15913,15914,15915,15916,15917,15918,15919,15920,15921,15922,
-15923,15924,15925,15926,15927,15928,15929,15930,15931,15932,15933,15934,
-15935,15936,15937,15938,15939,15940,15941,15942,15943,15944,15945,15946,
-15947,15948,15949,15950,15951,15952,15953,15954,15955,15956,15957,15958,
-15959,15960,15961,15962,15963,15964,15965,15966,15967,15968,15969,15970,
-15971,15972,15973,15974,15975,15976,15977,15978,15979,15980,15981,15982,
-15983,15984,15985,15986,15987,15988,15989,15990,15991,15992,15993,15994,
-15995,15996,15997,15998,15999,16000,16001,16002,16003,16004,16005,16006,
-16007,16008,16009,16010,16011,16012,16013,16014,16015,16016,16017,16018,
-16019,16020,16021,16022,16023,16024,16025,16026,16027,16028,16029,16030,
-16031,16032,16033,16034,16035,16036,16037,16038,16039,16040,16041,16042,
-16043,16044,16045,16046,16047,16048,16049,16050,16051,16052,16053,16054,
-16055,16056,16057,16058,16059,16060,16061,16062,16063,16064,16065,16066,
-16067,16068,16069,16070,16071,16072,16073,16074,16075,16076,16077,16078,
-16079,16080,16081,16082,16083,16084,16085,16086,16087,16088,16089,16090,
-16091,16092,16093,16094,16095,16096,16097,16098,16099,16100,16101,16102,
-16103,16104,16105,16106,16107,16108,16109,16110,16111,16112,16113,16114,
-16115,16116,16117,16118,16119,16120,16121,16122,16123,16124,16125,16126,
-16127,16128,16129,16130,16131,16132,16133,16134,16135,16136,16137,16138,
-16139,16140,16141,16142,16143,16144,16145,16146,16147,16148,16149,16150,
-16151,16152,16153,16154,16155,16156,16157,16158,16159,16160,16161,16162,
-16163,16164,16165,16166,16167,16168,16169,16170,16171,16172,16173,16174,
-16175,16176,16177,16178,16179,16180,16181,16182,16183,16184,16185,16186,
-16187,16188,16189,16190,16191,16192,16193,16194,16195,16196,16197,16198,
-16199,16200,16201,16202,16203,16204,16205,16206,16207,16208,16209,16210,
-16211,16212,16213,16214,16215,16216,16217,16218,16219,16220,16221,16222,
-16223,16224,16225,16226,16227,16228,16229,16230,16231,16232,16233,16234,
-16235,16236,16237,16238,16239,16240,16241,16242,16243,16244,16245,16246,
-16247,16248,16249,16250,16251,16252,16253,16254,16255,16256,16257,16258,
-16259,16260,16261,16262,16263,16264,16265,16266,16267,16268,16269,16270,
-16271,16272,16273,16274,16275,16276,16277,16278,16279,16280,16281,16282,
-16283,16284,16285,16286,16287,16288,16289,16290,16291,16292,16293,16294,
-16295,16296,16297,16298,16299,16300,16301,16302,16303,16304,16305,16306,
-16307,16308,16309,16310,16311,16312,16313,16314,16315,16316,16317,16318,
-16319,16320,16321,16322,16323,16324,16325,16326,16327,16328,16329,16330,
-16331,16332,16333,16334,16335,16336,16337,16338,16339,16340,16341,16342,
-16343,16344,16345,16346,16347,16348,16349,16350,16351,16352,16353,16354,
-16355,16356,16357,16358,16359,16360,16361,16362,16363,16364,16365,16366,
-16367,16368,16369,16370,16371,16372,16373,16374,16375,16376,16377,16378,
-16379,16380,16381,16382,16383,16384,16385,16386,16387,16388,16389,16390,
-16391,16392,16393,16394,16395,16396,16397,16398,16399,16400,16401,16402,
-16403,16404,16405,16406,16407,16408,16409,16410,16411,16412,16413,16414,
-16415,16416,16417,16418,16419,16420,16421,16422,16423,16424,16425,16426,
-16427,16428,16429,16430,16431,16432,16433,16434,16435,16436,16437,16438,
-16439,16440,16441,16442,16443,16444,16445,16446,16447,16448,16449,16450,
-16451,16452,16453,16454,16455,16456,16457,16458,16459,16460,16461,16462,
-16463,16464,16465,16466,16467,16468,16469,16470,16471,16472,16473,16474,
-16475,16476,16477,16478,16479,16480,16481,16482,16483,16484,16485,16486,
-16487,16488,16489,16490,16491,16492,16493,16494,16495,16496,16497,16498,
-16499,16500,16501,16502,16503,16504,16505,16506,16507,16508,16509,16510,
-16511,16512,16513,16514,16515,16516,16517,16518,16519,16520,16521,16522,
-16523,16524,16525,16526,16527,16528,16529,16530,16531,16532,16533,16534,
-16535,16536,16537,16538,16539,16540,16541,16542,16543,16544,16545,16546,
-16547,16548,16549,16550,16551,16552,16553,16554,16555,16556,16557,16558,
-16559,16560,16561,16562,16563,16564,16565,16566,16567,16568,16569,16570,
-16571,16572,16573,16574,16575,16576,16577,16578,16579,16580,16581,16582,
-16583,16584,16585,16586,16587,16588,16589,16590,16591,16592,16593,16594,
-16595,16596,16597,16598,16599,16600,16601,16602,16603,16604,16605,16606,
-16607,16608,16609,16610,16611,16612,16613,16614,16615,16616,16617,16618,
-16619,16620,16621,16622,16623,16624,16625,16626,16627,16628,16629,16630,
-16631,16632,16633,16634,16635,16636,16637,16638,16639,16640,16641,16642,
-16643,16644,16645,16646,16647,16648,16649,16650,16651,16652,16653,16654,
-16655,16656,16657,16658,16659,16660,16661,16662,16663,16664,16665,16666,
-16667,16668,16669,16670,16671,16672,16673,16674,16675,16676,16677,16678,
-16679,16680,16681,16682,16683,16684,16685,16686,16687,16688,16689,16690,
-16691,16692,16693,16694,16695,16696,16697,16698,16699,16700,16701,16702,
-16703,16704,16705,16706,16707,16708,16709,16710,16711,16712,16713,16714,
-16715,16716,16717,16718,16719,16720,16721,16722,16723,16724,16725,16726,
-16727,16728,16729,16730,16731,16732,16733,16734,16735,16736,16737,16738,
-16739,16740,16741,16742,16743,16744,16745,16746,16747,16748,16749,16750,
-16751,16752,16753,16754,16755,16756,16757,16758,16759,16760,16761,16762,
-16763,16764,16765,16766,16767,16768,16769,16770,16771,16772,16773,16774,
-16775,16776,16777,16778,16779,16780,16781,16782,16783,16784,16785,16786,
-16787,16788,16789,16790,16791,16792,16793,16794,16795,16796,16797,16798,
-16799,16800,16801,16802,16803,16804,16805,16806,16807,16808,16809,16810,
-16811,16812,16813,16814,16815,16816,16817,16818,16819,16820,16821,16822,
-16823,16824,16825,16826,16827,16828,16829,16830,16831,16832,16833,16834,
-16835,16836,16837,16838,16839,16840,16841,16842,16843,16844,16845,16846,
-16847,16848,16849,16850,16851,16852,16853,16854,16855,16856,16857,16858,
-16859,16860,16861,16862,16863,16864,16865,16866,16867,16868,16869,16870,
-16871,16872,16873,16874,16875,16876,16877,16878,16879,16880,16881,16882,
-16883,16884,16885,16886,16887,16888,16889,16890,16891,16892,16893,16894,
-16895,16896,16897,16898,16899,16900,16901,16902,16903,16904,16905,16906,
-16907,16908,16909,16910,16911,16912,16913,16914,16915,16916,16917,16918,
-16919,16920,16921,16922,16923,16924,16925,16926,16927,16928,16929,16930,
-16931,16932,16933,16934,16935,16936,16937,16938,16939,16940,16941,16942,
-16943,16944,16945,16946,16947,16948,16949,16950,16951,16952,16953,16954,
-16955,16956,16957,16958,16959,16960,16961,16962,16963,16964,16965,16966,
-16967,16968,16969,16970,16971,16972,16973,16974,16975,16976,16977,16978,
-16979,16980,16981,16982,16983,16984,16985,16986,16987,16988,16989,16990,
-16991,16992,16993,16994,16995,16996,16997,16998,16999,17000,17001,17002,
-17003,17004,17005,17006,17007,17008,17009,17010,17011,17012,17013,17014,
-17015,17016,17017,17018,17019,17020,17021,17022,17023,17024,17025,17026,
-17027,17028,17029,17030,17031,17032,17033,17034,17035,17036,17037,17038,
-17039,17040,17041,17042,17043,17044,17045,17046,17047,17048,17049,17050,
-17051,17052,17053,17054,17055,17056,17057,17058,17059,17060,17061,17062,
-17063,17064,17065,17066,17067,17068,17069,17070,17071,17072,17073,17074,
-17075,17076,17077,17078,17079,17080,17081,17082,17083,17084,17085,17086,
-17087,17088,17089,17090,17091,17092,17093,17094,17095,17096,17097,17098,
-17099,17100,17101,17102,17103,17104,17105,17106,17107,17108,17109,17110,
-17111,17112,17113,17114,17115,17116,17117,17118,17119,17120,17121,17122,
-17123,17124,17125,17126,17127,17128,17129,17130,17131,17132,17133,17134,
-17135,17136,17137,17138,17139,17140,17141,17142,17143,17144,17145,17146,
-17147,17148,17149,17150,17151,17152,17153,17154,17155,17156,17157,17158,
-17159,17160,17161,17162,17163,17164,17165,17166,17167,17168,17169,17170,
-17171,17172,17173,17174,17175,17176,17177,17178,17179,17180,17181,17182,
-17183,17184,17185,17186,17187,17188,17189,17190,17191,17192,17193,17194,
-17195,17196,17197,17198,17199,17200,17201,17202,17203,17204,17205,17206,
-17207,17208,17209,17210,17211,17212,17213,17214,17215,17216,17217,17218,
-17219,17220,17221,17222,17223,17224,17225,17226,17227,17228,17229,17230,
-17231,17232,17233,17234,17235,17236,17237,17238,17239,17240,17241,17242,
-17243,17244,17245,17246,17247,17248,17249,17250,17251,17252,17253,17254,
-17255,17256,17257,17258,17259,17260,17261,17262,17263,17264,17265,17266,
-17267,17268,17269,17270,17271,17272,17273,17274,17275,17276,17277,17278,
-17279,17280,17281,17282,17283,17284,17285,17286,17287,17288,17289,17290,
-17291,17292,17293,17294,17295,17296,17297,17298,17299,17300,17301,17302,
-17303,17304,17305,17306,17307,17308,17309,17310,17311,17312,17313,17314,
-17315,17316,17317,17318,17319,17320,17321,17322,17323,17324,17325,17326,
-17327,17328,17329,17330,17331,17332,17333,17334,17335,17336,17337,17338,
-17339,17340,17341,17342,17343,17344,17345,17346,17347,17348,17349,17350,
-17351,17352,17353,17354,17355,17356,17357,17358,17359,17360,17361,17362,
-17363,17364,17365,17366,17367,17368,17369,17370,17371,17372,17373,17374,
-17375,17376,17377,17378,17379,17380,17381,17382,17383,17384,17385,17386,
-17387,17388,17389,17390,17391,17392,17393,17394,17395,17396,17397,17398,
-17399,17400,17401,17402,17403,17404,17405,17406,17407,17408,17409,17410,
-17411,17412,17413,17414,17415,17416,17417,17418,17419,17420,17421,17422,
-17423,17424,17425,17426,17427,17428,17429,17430,17431,17432,17433,17434,
-17435,17436,17437,17438,17439,17440,17441,17442,17443,17444,17445,17446,
-17447,17448,17449,17450,17451,17452,17453,17454,17455,17456,17457,17458,
-17459,17460,17461,17462,17463,17464,17465,17466,17467,17468,17469,17470,
-17471,17472,17473,17474,17475,17476,17477,17478,17479,17480,17481,17482,
-17483,17484,17485,17486,17487,17488,17489,17490,17491,17492,17493,17494,
-17495,17496,17497,17498,17499,17500,17501,17502,17503,17504,17505,17506,
-17507,17508,17509,17510,17511,17512,17513,17514,17515,17516,17517,17518,
-17519,17520,17521,17522,17523,17524,17525,17526,17527,17528,17529,17530,
-17531,17532,17533,17534,17535,17536,17537,17538,17539,17540,17541,17542,
-17543,17544,17545,17546,17547,17548,17549,17550,17551,17552,17553,17554,
-17555,17556,17557,17558,17559,17560,17561,17562,17563,17564,17565,17566,
-17567,17568,17569,17570,17571,17572,17573,17574,17575,17576,17577,17578,
-17579,17580,17581,17582,17583,17584,17585,17586,17587,17588,17589,17590,
-17591,17592,17593,17594,17595,17596,17597,17598,17599,17600,17601,17602,
-17603,17604,17605,17606,17607,17608,17609,17610,17611,17612,17613,17614,
-17615,17616,17617,17618,17619,17620,17621,17622,17623,17624,17625,17626,
-17627,17628,17629,17630,17631,17632,17633,17634,17635,17636,17637,17638,
-17639,17640,17641,17642,17643,17644,17645,17646,17647,17648,17649,17650,
-17651,17652,17653,17654,17655,17656,17657,17658,17659,17660,17661,17662,
-17663,17664,17665,17666,17667,17668,17669,17670,17671,17672,17673,17674,
-17675,17676,17677,17678,17679,17680,17681,17682,17683,17684,17685,17686,
-17687,17688,17689,17690,17691,17692,17693,17694,17695,17696,17697,17698,
-17699,17700,17701,17702,17703,17704,17705,17706,17707,17708,17709,17710,
-17711,17712,17713,17714,17715,17716,17717,17718,17719,17720,17721,17722,
-17723,17724,17725,17726,17727,17728,17729,17730,17731,17732,17733,17734,
-17735,17736,17737,17738,17739,17740,17741,17742,17743,17744,17745,17746,
-17747,17748,17749,17750,17751,17752,17753,17754,17755,17756,17757,17758,
-17759,17760,17761,17762,17763,17764,17765,17766,17767,17768,17769,17770,
-17771,17772,17773,17774,17775,17776,17777,17778,17779,17780,17781,17782,
-17783,17784,17785,17786,17787,17788,17789,17790,17791,17792,17793,17794,
-17795,17796,17797,17798,17799,17800,17801,17802,17803,17804,17805,17806,
-17807,17808,17809,17810,17811,17812,17813,17814,17815,17816,17817,17818,
-17819,17820,17821,17822,17823,17824,17825,17826,17827,17828,17829,17830,
-17831,17832,17833,17834,17835,17836,17837,17838,17839,17840,17841,17842,
-17843,17844,17845,17846,17847,17848,17849,17850,17851,17852,17853,17854,
-17855,17856,17857,17858,17859,17860,17861,17862,17863,17864,17865,17866,
-17867,17868,17869,17870,17871,17872,17873,17874,17875,17876,17877,17878,
-17879,17880,17881,17882,17883,17884,17885,17886,17887,17888,17889,17890,
-17891,17892,17893,17894,17895,17896,17897,17898,17899,17900,17901,17902,
-17903,17904,17905,17906,17907,17908,17909,17910,17911,17912,17913,17914,
-17915,17916,17917,17918,17919,17920,17921,17922,17923,17924,17925,17926,
-17927,17928,17929,17930,17931,17932,17933,17934,17935,17936,17937,17938,
-17939,17940,17941,17942,17943,17944,17945,17946,17947,17948,17949,17950,
-17951,17952,17953,17954,17955,17956,17957,17958,17959,17960,17961,17962,
-17963,17964,17965,17966,17967,17968,17969,17970,17971,17972,17973,17974,
-17975,17976,17977,17978,17979,17980,17981,17982,17983,17984,17985,17986,
-17987,17988,17989,17990,17991,17992,17993,17994,17995,17996,17997,17998,
-17999,18000,18001,18002,18003,18004,18005,18006,18007,18008,18009,18010,
-18011,18012,18013,18014,18015,18016,18017,18018,18019,18020,18021,18022,
-18023,18024,18025,18026,18027,18028,18029,18030,18031,18032,18033,18034,
-18035,18036,18037,18038,18039,18040,18041,18042,18043,18044,18045,18046,
-18047,18048,18049,18050,18051,18052,18053,18054,18055,18056,18057,18058,
-18059,18060,18061,18062,18063,18064,18065,18066,18067,18068,18069,18070,
-18071,18072,18073,18074,18075,18076,18077,18078,18079,18080,18081,18082,
-18083,18084,18085,18086,18087,18088,18089,18090,18091,18092,18093,18094,
-18095,18096,18097,18098,18099,18100,18101,18102,18103,18104,18105,18106,
-18107,18108,18109,18110,18111,18112,18113,18114,18115,18116,18117,18118,
-18119,18120,18121,18122,18123,18124,18125,18126,18127,18128,18129,18130,
-18131,18132,18133,18134,18135,18136,18137,18138,18139,18140,18141,18142,
-18143,18144,18145,18146,18147,18148,18149,18150,18151,18152,18153,18154,
-18155,18156,18157,18158,18159,18160,18161,18162,18163,18164,18165,18166,
-18167,18168,18169,18170,18171,18172,18173,18174,18175,18176,18177,18178,
-18179,18180,18181,18182,18183,18184,18185,18186,18187,18188,18189,18190,
-18191,18192,18193,18194,18195,18196,18197,18198,18199,18200,18201,18202,
-18203,18204,18205,18206,18207,18208,18209,18210,18211,18212,18213,18214,
-18215,18216,18217,18218,18219,18220,18221,18222,18223,18224,18225,18226,
-18227,18228,18229,18230,18231,18232,18233,18234,18235,18236,18237,18238,
-18239,18240,18241,18242,18243,18244,18245,18246,18247,18248,18249,18250,
-18251,18252,18253,18254,18255,18256,18257,18258,18259,18260,18261,18262,
-18263,18264,18265,18266,18267,18268,18269,18270,18271,18272,18273,18274,
-18275,18276,18277,18278,18279,18280,18281,18282,18283,18284,18285,18286,
-18287,18288,18289,18290,18291,18292,18293,18294,18295,18296,18297,18298,
-18299,18300,18301,18302,18303,18304,18305,18306,18307,18308,18309,18310,
-18311,18312,18313,18314,18315,18316,18317,18318,18319,18320,18321,18322,
-18323,18324,18325,18326,18327,18328,18329,18330,18331,18332,18333,18334,
-18335,18336,18337,18338,18339,18340,18341,18342,18343,18344,18345,18346,
-18347,18348,18349,18350,18351,18352,18353,18354,18355,18356,18357,18358,
-18359,18360,18361,18362,18363,18364,18365,18366,18367,18368,18369,18370,
-18371,18372,18373,18374,18375,18376,18377,18378,18379,18380,18381,18382,
-18383,18384,18385,18386,18387,18388,18389,18390,18391,18392,18393,18394,
-18395,18396,18397,18398,18399,18400,18401,18402,18403,18404,18405,18406,
-18407,18408,18409,18410,18411,18412,18413,18414,18415,18416,18417,18418,
-18419,18420,18421,18422,18423,18424,18425,18426,18427,18428,18429,18430,
-18431,18432,18433,18434,18435,18436,18437,18438,18439,18440,18441,18442,
-18443,18444,18445,18446,18447,18448,18449,18450,18451,18452,18453,18454,
-18455,18456,18457,18458,18459,18460,18461,18462,18463,18464,18465,18466,
-18467,18468,18469,18470,18471,18472,18473,18474,18475,18476,18477,18478,
-18479,18480,18481,18482,18483,18484,18485,18486,18487,18488,18489,18490,
-18491,18492,18493,18494,18495,18496,18497,18498,18499,18500,18501,18502,
-18503,18504,18505,18506,18507,18508,18509,18510,18511,18512,18513,18514,
-18515,18516,18517,18518,18519,18520,18521,18522,18523,18524,18525,18526,
-18527,18528,18529,18530,18531,18532,18533,18534,18535,18536,18537,18538,
-18539,18540,18541,18542,18543,18544,18545,18546,18547,18548,18549,18550,
-18551,18552,18553,18554,18555,18556,18557,18558,18559,18560,18561,18562,
-18563,18564,18565,18566,18567,18568,18569,18570,18571,18572,18573,18574,
-18575,18576,18577,18578,18579,18580,18581,18582,18583,18584,18585,18586,
-18587,18588,18589,18590,18591,18592,18593,18594,18595,18596,18597,18598,
-18599,18600,18601,18602,18603,18604,18605,18606,18607,18608,18609,18610,
-18611,18612,18613,18614,18615,18616,18617,18618,18619,18620,18621,18622,
-18623,18624,18625,18626,18627,18628,18629,18630,18631,18632,18633,18634,
-18635,18636,18637,18638,18639,18640,18641,18642,18643,18644,18645,18646,
-18647,18648,18649,18650,18651,18652,18653,18654,18655,18656,18657,18658,
-18659,18660,18661,18662,18663,18664,18665,18666,18667,18668,18669,18670,
-18671,18672,18673,18674,18675,18676,18677,18678,18679,18680,18681,18682,
-18683,18684,18685,18686,18687,18688,18689,18690,18691,18692,18693,18694,
-18695,18696,18697,18698,18699,18700,18701,18702,18703,18704,18705,18706,
-18707,18708,18709,18710,18711,18712,18713,18714,18715,18716,18717,18718,
-18719,18720,18721,18722,18723,18724,18725,18726,18727,18728,18729,18730,
-18731,18732,18733,18734,18735,18736,18737,18738,18739,18740,18741,18742,
-18743,18744,18745,18746,18747,18748,18749,18750,18751,18752,18753,18754,
-18755,18756,18757,18758,18759,18760,18761,18762,18763,18764,18765,18766,
-18767,18768,18769,18770,18771,18772,18773,18774,18775,18776,18777,18778,
-18779,18780,18781,18782,18783,18784,18785,18786,18787,18788,18789,18790,
-18791,18792,18793,18794,18795,18796,18797,18798,18799,18800,18801,18802,
-18803,18804,18805,18806,18807,18808,18809,18810,18811,18812,18813,18814,
-18815,18816,18817,18818,18819,18820,18821,18822,18823,18824,18825,18826,
-18827,18828,18829,18830,18831,18832,18833,18834,18835,18836,18837,18838,
-18839,18840,18841,18842,18843,18844,18845,18846,18847,18848,18849,18850,
-18851,18852,18853,18854,18855,18856,18857,18858,18859,18860,18861,18862,
-18863,18864,18865,18866,18867,18868,18869,18870,18871,18872,18873,18874,
-18875,18876,18877,18878,18879,18880,18881,18882,18883,18884,18885,18886,
-18887,18888,18889,18890,18891,18892,18893,18894,18895,18896,18897,18898,
-18899,18900,18901,18902,18903,18904,18905,18906,18907,18908,18909,18910,
-18911,18912,18913,18914,18915,18916,18917,18918,18919,18920,18921,18922,
-18923,18924,18925,18926,18927,18928,18929,18930,18931,18932,18933,18934,
-18935,18936,18937,18938,18939,18940,18941,18942,18943,18944,18945,18946,
-18947,18948,18949,18950,18951,18952,18953,18954,18955,18956,18957,18958,
-18959,18960,18961,18962,18963,18964,18965,18966,18967,18968,18969,18970,
-18971,18972,18973,18974,18975,18976,18977,18978,18979,18980,18981,18982,
-18983,18984,18985,18986,18987,18988,18989,18990,18991,18992,18993,18994,
-18995,18996,18997,18998,18999,19000,19001,19002,19003,19004,19005,19006,
-19007,19008,19009,19010,19011,19012,19013,19014,19015,19016,19017,19018,
-19019,19020,19021,19022,19023,19024,19025,19026,19027,19028,19029,19030,
-19031,19032,19033,19034,19035,19036,19037,19038,19039,19040,19041,19042,
-19043,19044,19045,19046,19047,19048,19049,19050,19051,19052,19053,19054,
-19055,19056,19057,19058,19059,19060,19061,19062,19063,19064,19065,19066,
-19067,19068,19069,19070,19071,19072,19073,19074,19075,19076,19077,19078,
-19079,19080,19081,19082,19083,19084,19085,19086,19087,19088,19089,19090,
-19091,19092,19093,19094,19095,19096,19097,19098,19099,19100,19101,19102,
-19103,19104,19105,19106,19107,19108,19109,19110,19111,19112,19113,19114,
-19115,19116,19117,19118,19119,19120,19121,19122,19123,19124,19125,19126,
-19127,19128,19129,19130,19131,19132,19133,19134,19135,19136,19137,19138,
-19139,19140,19141,19142,19143,19144,19145,19146,19147,19148,19149,19150,
-19151,19152,19153,19154,19155,19156,19157,19158,19159,19160,19161,19162,
-19163,19164,19165,19166,19167,19168,19169,19170,19171,19172,19173,19174,
-19175,19176,19177,19178,19179,19180,19181,19182,19183,19184,19185,19186,
-19187,19188,19189,19190,19191,19192,19193,19194,19195,19196,19197,19198,
-19199,19200,19201,19202,19203,19204,19205,19206,19207,19208,19209,19210,
-19211,19212,19213,19214,19215,19216,19217,19218,19219,19220,19221,19222,
-19223,19224,19225,19226,19227,19228,19229,19230,19231,19232,19233,19234,
-19235,19236,19237,19238,19239,19240,19241,19242,19243,19244,19245,19246,
-19247,19248,19249,19250,19251,19252,19253,19254,19255,19256,19257,19258,
-19259,19260,19261,19262,19263,19264,19265,19266,19267,19268,19269,19270,
-19271,19272,19273,19274,19275,19276,19277,19278,19279,19280,19281,19282,
-19283,19284,19285,19286,19287,19288,19289,19290,19291,19292,19293,19294,
-19295,19296,19297,19298,19299,19300,19301,19302,19303,19304,19305,19306,
-19307,19308,19309,19310,19311,19312,19313,19314,19315,19316,19317,19318,
-19319,19320,19321,19322,19323,19324,19325,19326,19327,19328,19329,19330,
-19331,19332,19333,19334,19335,19336,19337,19338,19339,19340,19341,19342,
-19343,19344,19345,19346,19347,19348,19349,19350,19351,19352,19353,19354,
-19355,19356,19357,19358,19359,19360,19361,19362,19363,19364,19365,19366,
-19367,19368,19369,19370,19371,19372,19373,19374,19375,19376,19377,19378,
-19379,19380,19381,19382,19383,19384,19385,19386,19387,19388,19389,19390,
-19391,19392,19393,19394,19395,19396,19397,19398,19399,19400,19401,19402,
-19403,19404,19405,19406,19407,19408,19409,19410,19411,19412,19413,19414,
-19415,19416,19417,19418,19419,19420,19421,19422,19423,19424,19425,19426,
-19427,19428,19429,19430,19431,19432,19433,19434,19435,19436,19437,19438,
-19439,19440,19441,19442,19443,19444,19445,19446,19447,19448,19449,19450,
-19451,19452,19453,19454,19455,19456,19457,19458,19459,19460,19461,19462,
-19463,19464,19465,19466,19467,19468,19469,19470,19471,19472,19473,19474,
-19475,19476,19477,19478,19479,19480,19481,19482,19483,19484,19485,19486,
-19487,19488,19489,19490,19491,19492,19493,19494,19495,19496,19497,19498,
-19499,19500,19501,19502,19503,19504,19505,19506,19507,19508,19509,19510,
-19511,19512,19513,19514,19515,19516,19517,19518,19519,19520,19521,19522,
-19523,19524,19525,19526,19527,19528,19529,19530,19531,19532,19533,19534,
-19535,19536,19537,19538,19539,19540,19541,19542,19543,19544,19545,19546,
-19547,19548,19549,19550,19551,19552,19553,19554,19555,19556,19557,19558,
-19559,19560,19561,19562,19563,19564,19565,19566,19567,19568,19569,19570,
-19571,19572,19573,19574,19575,19576,19577,19578,19579,19580,19581,19582,
-19583,19584,19585,19586,19587,19588,19589,19590,19591,19592,19593,19594,
-19595,19596,19597,19598,19599,19600,19601,19602,19603,19604,19605,19606,
-19607,19608,19609,19610,19611,19612,19613,19614,19615,19616,19617,19618,
-19619,19620,19621,19622,19623,19624,19625,19626,19627,19628,19629,19630,
-19631,19632,19633,19634,19635,19636,19637,19638,19639,19640,19641,19642,
-19643,19644,19645,19646,19647,19648,19649,19650,19651,19652,19653,19654,
-19655,19656,19657,19658,19659,19660,19661,19662,19663,19664,19665,19666,
-19667,19668,19669,19670,19671,19672,19673,19674,19675,19676,19677,19678,
-19679,19680,19681,19682,19683,19684,19685,19686,19687,19688,19689,19690,
-19691,19692,19693,19694,19695,19696,19697,19698,19699,19700,19701,19702,
-19703,19704,19705,19706,19707,19708,19709,19710,19711,19712,19713,19714,
-19715,19716,19717,19718,19719,19720,19721,19722,19723,19724,19725,19726,
-19727,19728,19729,19730,19731,19732,19733,19734,19735,19736,19737,19738,
-19739,19740,19741,19742,19743,19744,19745,19746,19747,19748,19749,19750,
-19751,19752,19753,19754,19755,19756,19757,19758,19759,19760,19761,19762,
-19763,19764,19765,19766,19767,19768,19769,19770,19771,19772,19773,19774,
-19775,19776,19777,19778,19779,19780,19781,19782,19783,19784,19785,19786,
-19787,19788,19789,19790,19791,19792,19793,19794,19795,19796,19797,19798,
-19799,19800,19801,19802,19803,19804,19805,19806,19807,19808,19809,19810,
-19811,19812,19813,19814,19815,19816,19817,19818,19819,19820,19821,19822,
-19823,19824,19825,19826,19827,19828,19829,19830,19831,19832,19833,19834,
-19835,19836,19837,19838,19839,19840,19841,19842,19843,19844,19845,19846,
-19847,19848,19849,19850,19851,19852,19853,19854,19855,19856,19857,19858,
-19859,19860,19861,19862,19863,19864,19865,19866,19867,19868,19869,19870,
-19871,19872,19873,19874,19875,19876,19877,19878,19879,19880,19881,19882,
-19883,19884,19885,19886,19887,19888,19889,19890,19891,19892,19893,19894,
-19895,19896,19897,19898,19899,19900,19901,19902,19903,19904,19905,19906,
-19907,19908,19909,19910,19911,19912,19913,19914,19915,19916,19917,19918,
-19919,19920,19921,19922,19923,19924,19925,19926,19927,19928,19929,19930,
-19931,19932,19933,19934,19935,19936,19937,19938,19939,19940,19941,19942,
-19943,19944,19945,19946,19947,19948,19949,19950,19951,19952,19953,19954,
-19955,19956,19957,19958,19959,19960,19961,19962,19963,19964,19965,19966,
-19967,19968,19969,19970,19971,19972,19973,19974,19975,19976,19977,19978,
-19979,19980,19981,19982,19983,19984,19985,19986,19987,19988,19989,19990,
-19991,19992,19993,19994,19995,19996,19997,19998,19999,20000,20001,20002,
-20003,20004,20005,20006,20007,20008,20009,20010,20011,20012,20013,20014,
-20015,20016,20017,20018,20019,20020,20021,20022,20023,20024,20025,20026,
-20027,20028,20029,20030,20031,20032,20033,20034,20035,20036,20037,20038,
-20039,20040,20041,20042,20043,20044,20045,20046,20047,20048,20049,20050,
-20051,20052,20053,20054,20055,20056,20057,20058,20059,20060,20061,20062,
-20063,20064,20065,20066,20067,20068,20069,20070,20071,20072,20073,20074,
-20075,20076,20077,20078,20079,20080,20081,20082,20083,20084,20085,20086,
-20087,20088,20089,20090,20091,20092,20093,20094,20095,20096,20097,20098,
-20099,20100,20101,20102,20103,20104,20105,20106,20107,20108,20109,20110,
-20111,20112,20113,20114,20115,20116,20117,20118,20119,20120,20121,20122,
-20123,20124,20125,20126,20127,20128,20129,20130,20131,20132,20133,20134,
-20135,20136,20137,20138,20139,20140,20141,20142,20143,20144,20145,20146,
-20147,20148,20149,20150,20151,20152,20153,20154,20155,20156,20157,20158,
-20159,20160,20161,20162,20163,20164,20165,20166,20167,20168,20169,20170,
-20171,20172,20173,20174,20175,20176,20177,20178,20179,20180,20181,20182,
-20183,20184,20185,20186,20187,20188,20189,20190,20191,20192,20193,20194,
-20195,20196,20197,20198,20199,20200,20201,20202,20203,20204,20205,20206,
-20207,20208,20209,20210,20211,20212,20213,20214,20215,20216,20217,20218,
-20219,20220,20221,20222,20223,20224,20225,20226,20227,20228,20229,20230,
-20231,20232,20233,20234,20235,20236,20237,20238,20239,20240,20241,20242,
-20243,20244,20245,20246,20247,20248,20249,20250,20251,20252,20253,20254,
-20255,20256,20257,20258,20259,20260,20261,20262,20263,20264,20265,20266,
-20267,20268,20269,20270,20271,20272,20273,20274,20275,20276,20277,20278,
-20279,20280,20281,20282,20283,20284,20285,20286,20287,20288,20289,20290,
-20291,20292,20293,20294,20295,20296,20297,20298,20299,20300,20301,20302,
-20303,20304,20305,20306,20307,20308,20309,20310,20311,20312,20313,20314,
-20315,20316,20317,20318,20319,20320,20321,20322,20323,20324,20325,20326,
-20327,20328,20329,20330,20331,20332,20333,20334,20335,20336,20337,20338,
-20339,20340,20341,20342,20343,20344,20345,20346,20347,20348,20349,20350,
-20351,20352,20353,20354,20355,20356,20357,20358,20359,20360,20361,20362,
-20363,20364,20365,20366,20367,20368,20369,20370,20371,20372,20373,20374,
-20375,20376,20377,20378,20379,20380,20381,20382,20383,20384,20385,20386,
-20387,20388,20389,20390,20391,20392,20393,20394,20395,20396,20397,20398,
-20399,20400,20401,20402,20403,20404,20405,20406,20407,20408,20409,20410,
-20411,20412,20413,20414,20415,20416,20417,20418,20419,20420,20421,20422,
-20423,20424,20425,20426,20427,20428,20429,20430,20431,20432,20433,20434,
-20435,20436,20437,20438,20439,20440,20441,20442,20443,20444,20445,20446,
-20447,20448,20449,20450,20451,20452,20453,20454,20455,20456,20457,20458,
-20459,20460,20461,20462,20463,20464,20465,20466,20467,20468,20469,20470,
-20471,20472,20473,20474,20475,20476,20477,20478,20479,20480,20481,20482,
-20483,20484,20485,20486,20487,20488,20489,20490,20491,20492,20493,20494,
-20495,20496,20497,20498,20499,20500,20501,20502,20503,20504,20505,20506,
-20507,20508,20509,20510,20511,20512,20513,20514,20515,20516,20517,20518,
-20519,20520,20521,20522,20523,20524,20525,20526,20527,20528,20529,20530,
-20531,20532,20533,20534,20535,20536,20537,20538,20539,20540,20541,20542,
-20543,20544,20545,20546,20547,20548,20549,20550,20551,20552,20553,20554,
-20555,20556,20557,20558,20559,20560,20561,20562,20563,20564,20565,20566,
-20567,20568,20569,20570,20571,20572,20573,20574,20575,20576,20577,20578,
-20579,20580,20581,20582,20583,20584,20585,20586,20587,20588,20589,20590,
-20591,20592,20593,20594,20595,20596,20597,20598,20599,20600,20601,20602,
-20603,20604,20605,20606,20607,20608,20609,20610,20611,20612,20613,20614,
-20615,20616,20617,20618,20619,20620,20621,20622,20623,20624,20625,20626,
-20627,20628,20629,20630,20631,20632,20633,20634,20635,20636,20637,20638,
-20639,20640,20641,20642,20643,20644,20645,20646,20647,20648,20649,20650,
-20651,20652,20653,20654,20655,20656,20657,20658,20659,20660,20661,20662,
-20663,20664,20665,20666,20667,20668,20669,20670,20671,20672,20673,20674,
-20675,20676,20677,20678,20679,20680,20681,20682,20683,20684,20685,20686,
-20687,20688,20689,20690,20691,20692,20693,20694,20695,20696,20697,20698,
-20699,20700,20701,20702,20703,20704,20705,20706,20707,20708,20709,20710,
-20711,20712,20713,20714,20715,20716,20717,20718,20719,20720,20721,20722,
-20723,20724,20725,20726,20727,20728,20729,20730,20731,20732,20733,20734,
-20735,20736,20737,20738,20739,20740,20741,20742,20743,20744,20745,20746,
-20747,20748,20749,20750,20751,20752,20753,20754,20755,20756,20757,20758,
-20759,20760,20761,20762,20763,20764,20765,20766,20767,20768,20769,20770,
-20771,20772,20773,20774,20775,20776,20777,20778,20779,20780,20781,20782,
-20783,20784,20785,20786,20787,20788,20789,20790,20791,20792,20793,20794,
-20795,20796,20797,20798,20799,20800,20801,20802,20803,20804,20805,20806,
-20807,20808,20809,20810,20811,20812,20813,20814,20815,20816,20817,20818,
-20819,20820,20821,20822,20823,20824,20825,20826,20827,20828,20829,20830,
-20831,20832,20833,20834,20835,20836,20837,20838,20839,20840,20841,20842,
-20843,20844,20845,20846,20847,20848,20849,20850,20851,20852,20853,20854,
-20855,20856,20857,20858,20859,20860,20861,20862,20863,20864,20865,20866,
-20867,20868,20869,20870,20871,20872,20873,20874,20875,20876,20877,20878,
-20879,20880,20881,20882,20883,20884,20885,20886,20887,20888,20889,20890,
-20891,20892,20893,20894,20895,20896,20897,20898,20899,20900,20901,20902,
-20903,20904,20905,20906,20907,20908,20909,20910,20911,20912,20913,20914,
-20915,20916,20917,20918,20919,20920,20921,20922,20923,20924,20925,20926,
-20927,20928,20929,20930,20931,20932,20933,20934,20935,20936,20937,20938,
-20939,20940,20941,20942,20943,20944,20945,20946,20947,20948,20949,20950,
-20951,20952,20953,20954,20955,20956,20957,20958,20959,20960,20961,20962,
-20963,20964,20965,20966,20967,20968,20969,20970,20971,20972,20973,20974,
-20975,20976,20977,20978,20979,20980,20981,20982,20983,20984,20985,20986,
-20987,20988,20989,20990,20991,20992,20993,20994,20995,20996,20997,20998,
-20999,21000,21001,21002,21003,21004,21005,21006,21007,21008,21009,21010,
-21011,21012,21013,21014,21015,21016,21017,21018,21019,21020,21021,21022,
-21023,21024,21025,21026,21027,21028,21029,21030,21031,21032,21033,21034,
-21035,21036,21037,21038,21039,21040,21041,21042,21043,21044,21045,21046,
-21047,21048,21049,21050,21051,21052,21053,21054,21055,21056,21057,21058,
-21059,21060,21061,21062,21063,21064,21065,21066,21067,21068,21069,21070,
-21071,21072,21073,21074,21075,21076,21077,21078,21079,21080,21081,21082,
-21083,21084,21085,21086,21087,21088,21089,21090,21091,21092,21093,21094,
-21095,21096,21097,21098,21099,21100,21101,21102,21103,21104,21105,21106,
-21107,21108,21109,21110,21111,21112,21113,21114,21115,21116,21117,21118,
-21119,21120,21121,21122,21123,21124,21125,21126,21127,21128,21129,21130,
-21131,21132,21133,21134,21135,21136,21137,21138,21139,21140,21141,21142,
-21143,21144,21145,21146,21147,21148,21149,21150,21151,21152,21153,21154,
-21155,21156,21157,21158,21159,21160,21161,21162,21163,21164,21165,21166,
-21167,21168,21169,21170,21171,21172,21173,21174,21175,21176,21177,21178,
-21179,21180,21181,21182,21183,21184,21185,21186,21187,21188,21189,21190,
-21191,21192,21193,21194,21195,21196,21197,21198,21199,21200,21201,21202,
-21203,21204,21205,21206,21207,21208,21209,21210,21211,21212,21213,21214,
-21215,21216,21217,21218,21219,21220,21221,21222,21223,21224,21225,21226,
-21227,21228,21229,21230,21231,21232,21233,21234,21235,21236,21237,21238,
-21239,21240,21241,21242,21243,21244,21245,21246,21247,21248,21249,21250,
-21251,21252,21253,21254,21255,21256,21257,21258,21259,21260,21261,21262,
-21263,21264,21265,21266,21267,21268,21269,21270,21271,21272,21273,21274,
-21275,21276,21277,21278,21279,21280,21281,21282,21283,21284,21285,21286,
-21287,21288,21289,21290,21291,21292,21293,21294,21295,21296,21297,21298,
-21299,21300,21301,21302,21303,21304,21305,21306,21307,21308,21309,21310,
-21311,21312,21313,21314,21315,21316,21317,21318,21319,21320,21321,21322,
-21323,21324,21325,21326,21327,21328,21329,21330,21331,21332,21333,21334,
-21335,21336,21337,21338,21339,21340,21341,21342,21343,21344,21345,21346,
-21347,21348,21349,21350,21351,21352,21353,21354,21355,21356,21357,21358,
-21359,21360,21361,21362,21363,21364,21365,21366,21367,21368,21369,21370,
-21371,21372,21373,21374,21375,21376,21377,21378,21379,21380,21381,21382,
-21383,21384,21385,21386,21387,21388,21389,21390,21391,21392,21393,21394,
-21395,21396,21397,21398,21399,21400,21401,21402,21403,21404,21405,21406,
-21407,21408,21409,21410,21411,21412,21413,21414,21415,21416,21417,21418,
-21419,21420,21421,21422,21423,21424,21425,21426,21427,21428,21429,21430,
-21431,21432,21433,21434,21435,21436,21437,21438,21439,21440,21441,21442,
-21443,21444,21445,21446,21447,21448,21449,21450,21451,21452,21453,21454,
-21455,21456,21457,21458,21459,21460,21461,21462,21463,21464,21465,21466,
-21467,21468,21469,21470,21471,21472,21473,21474,21475,21476,21477,21478,
-21479,21480,21481,21482,21483,21484,21485,21486,21487,21488,21489,21490,
-21491,21492,21493,21494,21495,21496,21497,21498,21499,21500,21501,21502,
-21503,21504,21505,21506,21507,21508,21509,21510,21511,21512,21513,21514,
-21515,21516,21517,21518,21519,21520,21521,21522,21523,21524,21525,21526,
-21527,21528,21529,21530,21531,21532,21533,21534,21535,21536,21537,21538,
-21539,21540,21541,21542,21543,21544,21545,21546,21547,21548,21549,21550,
-21551,21552,21553,21554,21555,21556,21557,21558,21559,21560,21561,21562,
-21563,21564,21565,21566,21567,21568,21569,21570,21571,21572,21573,21574,
-21575,21576,21577,21578,21579,21580,21581,21582,21583,21584,21585,21586,
-21587,21588,21589,21590,21591,21592,21593,21594,21595,21596,21597,21598,
-21599,21600,21601,21602,21603,21604,21605,21606,21607,21608,21609,21610,
-21611,21612,21613,21614,21615,21616,21617,21618,21619,21620,21621,21622,
-21623,21624,21625,21626,21627,21628,21629,21630,21631,21632,21633,21634,
-21635,21636,21637,21638,21639,21640,21641,21642,21643,21644,21645,21646,
-21647,21648,21649,21650,21651,21652,21653,21654,21655,21656,21657,21658,
-21659,21660,21661,21662,21663,21664,21665,21666,21667,21668,21669,21670,
-21671,21672,21673,21674,21675,21676,21677,21678,21679,21680,21681,21682,
-21683,21684,21685,21686,21687,21688,21689,21690,21691,21692,21693,21694,
-21695,21696,21697,21698,21699,21700,21701,21702,21703,21704,21705,21706,
-21707,21708,21709,21710,21711,21712,21713,21714,21715,21716,21717,21718,
-21719,21720,21721,21722,21723,21724,21725,21726,21727,21728,21729,21730,
-21731,21732,21733,21734,21735,21736,21737,21738,21739,21740,21741,21742,
-21743,21744,21745,21746,21747,21748,21749,21750,21751,21752,21753,21754,
-21755,21756,21757,21758,21759,21760,21761,21762,21763,21764,21765,21766,
-21767,21768,21769,21770,21771,21772,21773,21774,21775,21776,21777,21778,
-21779,21780,21781,21782,21783,21784,21785,21786,21787,21788,21789,21790,
-21791,21792,21793,21794,21795,21796,21797,21798,21799,21800,21801,21802,
-21803,21804,21805,21806,21807,21808,21809,21810,21811,21812,21813,21814,
-21815,21816,21817,21818,21819,21820,21821,21822,21823,21824,21825,21826,
-21827,21828,21829,21830,21831,21832,21833,21834,21835,21836,21837,21838,
-21839,21840,21841,21842,21843,21844,21845,21846,21847,21848,21849,21850,
-21851,21852,21853,21854,21855,21856,21857,21858,21859,21860,21861,21862,
-21863,21864,21865,21866,21867,21868,21869,21870,21871,21872,21873,21874,
-21875,21876,21877,21878,21879,21880,21881,21882,21883,21884,21885,21886,
-21887,21888,21889,21890,21891,21892,21893,21894,21895,21896,21897,21898,
-21899,21900,21901,21902,21903,21904,21905,21906,21907,21908,21909,21910,
-21911,21912,21913,21914,21915,21916,21917,21918,21919,21920,21921,21922,
-21923,21924,21925,21926,21927,21928,21929,21930,21931,21932,21933,21934,
-21935,21936,21937,21938,21939,21940,21941,21942,21943,21944,21945,21946,
-21947,21948,21949,21950,21951,21952,21953,21954,21955,21956,21957,21958,
-21959,21960,21961,21962,21963,21964,21965,21966,21967,21968,21969,21970,
-21971,21972,21973,21974,21975,21976,21977,21978,21979,21980,21981,21982,
-21983,21984,21985,21986,21987,21988,21989,21990,21991,21992,21993,21994,
-21995,21996,21997,21998,21999,22000,22001,22002,22003,22004,22005,22006,
-22007,22008,22009,22010,22011,22012,22013,22014,22015,22016,22017,22018,
-22019,22020,22021,22022,22023,22024,22025,22026,22027,22028,22029,22030,
-22031,22032,22033,22034,22035,22036,22037,22038,22039,22040,22041,22042,
-22043,22044,22045,22046,22047,22048,22049,22050,22051,22052,22053,22054,
-22055,22056,22057,22058,22059,22060,22061,22062,22063,22064,22065,22066,
-22067,22068,22069,22070,22071,22072,22073,22074,22075,22076,22077,22078,
-22079,22080,22081,22082,22083,22084,22085,22086,22087,22088,22089,22090,
-22091,22092,22093,22094,22095,22096,22097,22098,22099,22100,22101,22102,
-22103,22104,22105,22106,22107,22108,22109,22110,22111,22112,22113,22114,
-22115,22116,22117,22118,22119,22120,22121,22122,22123,22124,22125,22126,
-22127,22128,22129,22130,22131,22132,22133,22134,22135,22136,22137,22138,
-22139,22140,22141,22142,22143,22144,22145,22146,22147,22148,22149,22150,
-22151,22152,22153,22154,22155,22156,22157,22158,22159,22160,22161,22162,
-22163,22164,22165,22166,22167,22168,22169,22170,22171,22172,22173,22174,
-22175,22176,22177,22178,22179,22180,22181,22182,22183,22184,22185,22186,
-22187,22188,22189,22190,22191,22192,22193,22194,22195,22196,22197,22198,
-22199,22200,22201,22202,22203,22204,22205,22206,22207,22208,22209,22210,
-22211,22212,22213,22214,22215,22216,22217,22218,22219,22220,22221,22222,
-22223,22224,22225,22226,22227,22228,22229,22230,22231,22232,22233,22234,
-22235,22236,22237,22238,22239,22240,22241,22242,22243,22244,22245,22246,
-22247,22248,22249,22250,22251,22252,22253,22254,22255,22256,22257,22258,
-22259,22260,22261,22262,22263,22264,22265,22266,22267,22268,22269,22270,
-22271,22272,22273,22274,22275,22276,22277,22278,22279,22280,22281,22282,
-22283,22284,22285,22286,22287,22288,22289,22290,22291,22292,22293,22294,
-22295,22296,22297,22298,22299,22300,22301,22302,22303,22304,22305,22306,
-22307,22308,22309,22310,22311,22312,22313,22314,22315,22316,22317,22318,
-22319,22320,22321,22322,22323,22324,22325,22326,22327,22328,22329,22330,
-22331,22332,22333,22334,22335,22336,22337,22338,22339,22340,22341,22342,
-22343,22344,22345,22346,22347,22348,22349,22350,22351,22352,22353,22354,
-22355,22356,22357,22358,22359,22360,22361,22362,22363,22364,22365,22366,
-22367,22368,22369,22370,22371,22372,22373,22374,22375,22376,22377,22378,
-22379,22380,22381,22382,22383,22384,22385,22386,22387,22388,22389,22390,
-22391,22392,22393,22394,22395,22396,22397,22398,22399,22400,22401,22402,
-22403,22404,22405,22406,22407,22408,22409,22410,22411,22412,22413,22414,
-22415,22416,22417,22418,22419,22420,22421,22422,22423,22424,22425,22426,
-22427,22428,22429,22430,22431,22432,22433,22434,22435,22436,22437,22438,
-22439,22440,22441,22442,22443,22444,22445,22446,22447,22448,22449,22450,
-22451,22452,22453,22454,22455,22456,22457,22458,22459,22460,22461,22462,
-22463,22464,22465,22466,22467,22468,22469,22470,22471,22472,22473,22474,
-22475,22476,22477,22478,22479,22480,22481,22482,22483,22484,22485,22486,
-22487,22488,22489,22490,22491,22492,22493,22494,22495,22496,22497,22498,
-22499,22500,22501,22502,22503,22504,22505,22506,22507,22508,22509,22510,
-22511,22512,22513,22514,22515,22516,22517,22518,22519,22520,22521,22522,
-22523,22524,22525,22526,22527,22528,22529,22530,22531,22532,22533,22534,
-22535,22536,22537,22538,22539,22540,22541,22542,22543,22544,22545,22546,
-22547,22548,22549,22550,22551,22552,22553,22554,22555,22556,22557,22558,
-22559,22560,22561,22562,22563,22564,22565,22566,22567,22568,22569,22570,
-22571,22572,22573,22574,22575,22576,22577,22578,22579,22580,22581,22582,
-22583,22584,22585,22586,22587,22588,22589,22590,22591,22592,22593,22594,
-22595,22596,22597,22598,22599,22600,22601,22602,22603,22604,22605,22606,
-22607,22608,22609,22610,22611,22612,22613,22614,22615,22616,22617,22618,
-22619,22620,22621,22622,22623,22624,22625,22626,22627,22628,22629,22630,
-22631,22632,22633,22634,22635,22636,22637,22638,22639,22640,22641,22642,
-22643,22644,22645,22646,22647,22648,22649,22650,22651,22652,22653,22654,
-22655,22656,22657,22658,22659,22660,22661,22662,22663,22664,22665,22666,
-22667,22668,22669,22670,22671,22672,22673,22674,22675,22676,22677,22678,
-22679,22680,22681,22682,22683,22684,22685,22686,22687,22688,22689,22690,
-22691,22692,22693,22694,22695,22696,22697,22698,22699,22700,22701,22702,
-22703,22704,22705,22706,22707,22708,22709,22710,22711,22712,22713,22714,
-22715,22716,22717,22718,22719,22720,22721,22722,22723,22724,22725,22726,
-22727,22728,22729,22730,22731,22732,22733,22734,22735,22736,22737,22738,
-22739,22740,22741,22742,22743,22744,22745,22746,22747,22748,22749,22750,
-22751,22752,22753,22754,22755,22756,22757,22758,22759,22760,22761,22762,
-22763,22764,22765,22766,22767,22768,22769,22770,22771,22772,22773,22774,
-22775,22776,22777,22778,22779,22780,22781,22782,22783,22784,22785,22786,
-22787,22788,22789,22790,22791,22792,22793,22794,22795,22796,22797,22798,
-22799,22800,22801,22802,22803,22804,22805,22806,22807,22808,22809,22810,
-22811,22812,22813,22814,22815,22816,22817,22818,22819,22820,22821,22822,
-22823,22824,22825,22826,22827,22828,22829,22830,22831,22832,22833,22834,
-22835,22836,22837,22838,22839,22840,22841,22842,22843,22844,22845,22846,
-22847,22848,22849,22850,22851,22852,22853,22854,22855,22856,22857,22858,
-22859,22860,22861,22862,22863,22864,22865,22866,22867,22868,22869,22870,
-22871,22872,22873,22874,22875,22876,22877,22878,22879,22880,22881,22882,
-22883,22884,22885,22886,22887,22888,22889,22890,22891,22892,22893,22894,
-22895,22896,22897,22898,22899,22900,22901,22902,22903,22904,22905,22906,
-22907,22908,22909,22910,22911,22912,22913,22914,22915,22916,22917,22918,
-22919,22920,22921,22922,22923,22924,22925,22926,22927,22928,22929,22930,
-22931,22932,22933,22934,22935,22936,22937,22938,22939,22940,22941,22942,
-22943,22944,22945,22946,22947,22948,22949,22950,22951,22952,22953,22954,
-22955,22956,22957,22958,22959,22960,22961,22962,22963,22964,22965,22966,
-22967,22968,22969,22970,22971,22972,22973,22974,22975,22976,22977,22978,
-22979,22980,22981,22982,22983,22984,22985,22986,22987,22988,22989,22990,
-22991,22992,22993,22994,22995,22996,22997,22998,22999,23000,23001,23002,
-23003,23004,23005,23006,23007,23008,23009,23010,23011,23012,23013,23014,
-23015,23016,23017,23018,23019,23020,23021,23022,23023,23024,23025,23026,
-23027,23028,23029,23030,23031,23032,23033,23034,23035,23036,23037,23038,
-23039,23040,23041,23042,23043,23044,23045,23046,23047,23048,23049,23050,
-23051,23052,23053,23054,23055,23056,23057,23058,23059,23060,23061,23062,
-23063,23064,23065,23066,23067,23068,23069,23070,23071,23072,23073,23074,
-23075,23076,23077,23078,23079,23080,23081,23082,23083,23084,23085,23086,
-23087,23088,23089,23090,23091,23092,23093,23094,23095,23096,23097,23098,
-23099,23100,23101,23102,23103,23104,23105,23106,23107,23108,23109,23110,
-23111,23112,23113,23114,23115,23116,23117,23118,23119,23120,23121,23122,
-23123,23124,23125,23126,23127,23128,23129,23130,23131,23132,23133,23134,
-23135,23136,23137,23138,23139,23140,23141,23142,23143,23144,23145,23146,
-23147,23148,23149,23150,23151,23152,23153,23154,23155,23156,23157,23158,
-23159,23160,23161,23162,23163,23164,23165,23166,23167,23168,23169,23170,
-23171,23172,23173,23174,23175,23176,23177,23178,23179,23180,23181,23182,
-23183,23184,23185,23186,23187,23188,23189,23190,23191,23192,23193,23194,
-23195,23196,23197,23198,23199,23200,23201,23202,23203,23204,23205,23206,
-23207,23208,23209,23210,23211,23212,23213,23214,23215,23216,23217,23218,
-23219,23220,23221,23222,23223,23224,23225,23226,23227,23228,23229,23230,
-23231,23232,23233,23234,23235,23236,23237,23238,23239,23240,23241,23242,
-23243,23244,23245,23246,23247,23248,23249,23250,23251,23252,23253,23254,
-23255,23256,23257,23258,23259,23260,23261,23262,23263,23264,23265,23266,
-23267,23268,23269,23270,23271,23272,23273,23274,23275,23276,23277,23278,
-23279,23280,23281,23282,23283,23284,23285,23286,23287,23288,23289,23290,
-23291,23292,23293,23294,23295,23296,23297,23298,23299,23300,23301,23302,
-23303,23304,23305,23306,23307,23308,23309,23310,23311,23312,23313,23314,
-23315,23316,23317,23318,23319,23320,23321,23322,23323,23324,23325,23326,
-23327,23328,23329,23330,23331,23332,23333,23334,23335,23336,23337,23338,
-23339,23340,23341,23342,23343,23344,23345,23346,23347,23348,23349,23350,
-23351,23352,23353,23354,23355,23356,23357,23358,23359,23360,23361,23362,
-23363,23364,23365,23366,23367,23368,23369,23370,23371,23372,23373,23374,
-23375,23376,23377,23378,23379,23380,23381,23382,23383,23384,23385,23386,
-23387,23388,23389,23390,23391,23392,23393,23394,23395,23396,23397,23398,
-23399,23400,23401,23402,23403,23404,23405,23406,23407,23408,23409,23410,
-23411,23412,23413,23414,23415,23416,23417,23418,23419,23420,23421,23422,
-23423,23424,23425,23426,23427,23428,23429,23430,23431,23432,23433,23434,
-23435,23436,23437,23438,23439,23440,23441,23442,23443,23444,23445,23446,
-23447,23448,23449,23450,23451,23452,23453,23454,23455,23456,23457,23458,
-23459,23460,23461,23462,23463,23464,23465,23466,23467,23468,23469,23470,
-23471,23472,23473,23474,23475,23476,23477,23478,23479,23480,23481,23482,
-23483,23484,23485,23486,23487,23488,23489,23490,23491,23492,23493,23494,
-23495,23496,23497,23498,23499,23500,23501,23502,23503,23504,23505,23506,
-23507,23508,23509,23510,23511,23512,23513,23514,23515,23516,23517,23518,
-23519,23520,23521,23522,23523,23524,23525,23526,23527,23528,23529,23530,
-23531,23532,23533,23534,23535,23536,23537,23538,23539,23540,23541,23542,
-23543,23544,23545,23546,23547,23548,23549,23550,23551,23552,23553,23554,
-23555,23556,23557,23558,23559,23560,23561,23562,23563,23564,23565,23566,
-23567,23568,23569,23570,23571,23572,23573,23574,23575,23576,23577,23578,
-23579,23580,23581,23582,23583,23584,23585,23586,23587,23588,23589,23590,
-23591,23592,23593,23594,23595,23596,23597,23598,23599,23600,23601,23602,
-23603,23604,23605,23606,23607,23608,23609,23610,23611,23612,23613,23614,
-23615,23616,23617,23618,23619,23620,23621,23622,23623,23624,23625,23626,
-23627,23628,23629,23630,23631,23632,23633,23634,23635,23636,23637,23638,
-23639,23640,23641,23642,23643,23644,23645,23646,23647,23648,23649,23650,
-23651,23652,23653,23654,23655,23656,23657,23658,23659,23660,23661,23662,
-23663,23664,23665,23666,23667,23668,23669,23670,23671,23672,23673,23674,
-23675,23676,23677,23678,23679,23680,23681,23682,23683,23684,23685,23686,
-23687,23688,23689,23690,23691,23692,23693,23694,23695,23696,23697,23698,
-23699,23700,23701,23702,23703,23704,23705,23706,23707,23708,23709,23710,
-23711,23712,23713,23714,23715,23716,23717,23718,23719,23720,23721,23722,
-23723,23724,23725,23726,23727,23728,23729,23730,23731,23732,23733,23734,
-23735,23736,23737,23738,23739,23740,23741,23742,23743,23744,23745,23746,
-23747,23748,23749,23750,23751,23752,23753,23754,23755,23756,23757,23758,
-23759,23760,23761,23762,23763,23764,23765,23766,23767,23768,23769,23770,
-23771,23772,23773,23774,23775,23776,23777,23778,23779,23780,23781,23782,
-23783,23784,23785,23786,23787,23788,23789,23790,23791,23792,23793,23794,
-23795,23796,23797,23798,23799,23800,23801,23802,23803,23804,23805,23806,
-23807,23808,23809,23810,23811,23812,23813,23814,23815,23816,23817,23818,
-23819,23820,23821,23822,23823,23824,23825,23826,23827,23828,23829,23830,
-23831,23832,23833,23834,23835,23836,23837,23838,23839,23840,23841,23842,
-23843,23844,23845,23846,23847,23848,23849,23850,23851,23852,23853,23854,
-23855,23856,23857,23858,23859,23860,23861,23862,23863,23864,23865,23866,
-23867,23868,23869,23870,23871,23872,23873,23874,23875,23876,23877,23878,
-23879,23880,23881,23882,23883,23884,23885,23886,23887,23888,23889,23890,
-23891,23892,23893,23894,23895,23896,23897,23898,23899,23900,23901,23902,
-23903,23904,23905,23906,23907,23908,23909,23910,23911,23912,23913,23914,
-23915,23916,23917,23918,23919,23920,23921,23922,23923,23924,23925,23926,
-23927,23928,23929,23930,23931,23932,23933,23934,23935,23936,23937,23938,
-23939,23940,23941,23942,23943,23944,23945,23946,23947,23948,23949,23950,
-23951,23952,23953,23954,23955,23956,23957,23958,23959,23960,23961,23962,
-23963,23964,23965,23966,23967,23968,23969,23970,23971,23972,23973,23974,
-23975,23976,23977,23978,23979,23980,23981,23982,23983,23984,23985,23986,
-23987,23988,23989,23990,23991,23992,23993,23994,23995,23996,23997,23998,
-23999,24000,24001,24002,24003,24004,24005,24006,24007,24008,24009,24010,
-24011,24012,24013,24014,24015,24016,24017,24018,24019,24020,24021,24022,
-24023,24024,24025,24026,24027,24028,24029,24030,24031,24032,24033,24034,
-24035,24036,24037,24038,24039,24040,24041,24042,24043,24044,24045,24046,
-24047,24048,24049,24050,24051,24052,24053,24054,24055,24056,24057,24058,
-24059,24060,24061,24062,24063,24064,24065,24066,24067,24068,24069,24070,
-24071,24072,24073,24074,24075,24076,24077,24078,24079,24080,24081,24082,
-24083,24084,24085,24086,24087,24088,24089,24090,24091,24092,24093,24094,
-24095,24096,24097,24098,24099,24100,24101,24102,24103,24104,24105,24106,
-24107,24108,24109,24110,24111,24112,24113,24114,24115,24116,24117,24118,
-24119,24120,24121,24122,24123,24124,24125,24126,24127,24128,24129,24130,
-24131,24132,24133,24134,24135,24136,24137,24138,24139,24140,24141,24142,
-24143,24144,24145,24146,24147,24148,24149,24150,24151,24152,24153,24154,
-24155,24156,24157,24158,24159,24160,24161,24162,24163,24164,24165,24166,
-24167,24168,24169,24170,24171,24172,24173,24174,24175,24176,24177,24178,
-24179,24180,24181,24182,24183,24184,24185,24186,24187,24188,24189,24190,
-24191,24192,24193,24194,24195,24196,24197,24198,24199,24200,24201,24202,
-24203,24204,24205,24206,24207,24208,24209,24210,24211,24212,24213,24214,
-24215,24216,24217,24218,24219,24220,24221,24222,24223,24224,24225,24226,
-24227,24228,24229,24230,24231,24232,24233,24234,24235,24236,24237,24238,
-24239,24240,24241,24242,24243,24244,24245,24246,24247,24248,24249,24250,
-24251,24252,24253,24254,24255,24256,24257,24258,24259,24260,24261,24262,
-24263,24264,24265,24266,24267,24268,24269,24270,24271,24272,24273,24274,
-24275,24276,24277,24278,24279,24280,24281,24282,24283,24284,24285,24286,
-24287,24288,24289,24290,24291,24292,24293,24294,24295,24296,24297,24298,
-24299,24300,24301,24302,24303,24304,24305,24306,24307,24308,24309,24310,
-24311,24312,24313,24314,24315,24316,24317,24318,24319,24320,24321,24322,
-24323,24324,24325,24326,24327,24328,24329,24330,24331,24332,24333,24334,
-24335,24336,24337,24338,24339,24340,24341,24342,24343,24344,24345,24346,
-24347,24348,24349,24350,24351,24352,24353,24354,24355,24356,24357,24358,
-24359,24360,24361,24362,24363,24364,24365,24366,24367,24368,24369,24370,
-24371,24372,24373,24374,24375,24376,24377,24378,24379,24380,24381,24382,
-24383,24384,24385,24386,24387,24388,24389,24390,24391,24392,24393,24394,
-24395,24396,24397,24398,24399,24400,24401,24402,24403,24404,24405,24406,
-24407,24408,24409,24410,24411,24412,24413,24414,24415,24416,24417,24418,
-24419,24420,24421,24422,24423,24424,24425,24426,24427,24428,24429,24430,
-24431,24432,24433,24434,24435,24436,24437,24438,24439,24440,24441,24442,
-24443,24444,24445,24446,24447,24448,24449,24450,24451,24452,24453,24454,
-24455,24456,24457,24458,24459,24460,24461,24462,24463,24464,24465,24466,
-24467,24468,24469,24470,24471,24472,24473,24474,24475,24476,24477,24478,
-24479,24480,24481,24482,24483,24484,24485,24486,24487,24488,24489,24490,
-24491,24492,24493,24494,24495,24496,24497,24498,24499,24500,24501,24502,
-24503,24504,24505,24506,24507,24508,24509,24510,24511,24512,24513,24514,
-24515,24516,24517,24518,24519,24520,24521,24522,24523,24524,24525,24526,
-24527,24528,24529,24530,24531,24532,24533,24534,24535,24536,24537,24538,
-24539,24540,24541,24542,24543,24544,24545,24546,24547,24548,24549,24550,
-24551,24552,24553,24554,24555,24556,24557,24558,24559,24560,24561,24562,
-24563,24564,24565,24566,24567,24568,24569,24570,24571,24572,24573,24574,
-24575,24576,24577,24578,24579,24580,24581,24582,24583,24584,24585,24586,
-24587,24588,24589,24590,24591,24592,24593,24594,24595,24596,24597,24598,
-24599,24600,24601,24602,24603,24604,24605,24606,24607,24608,24609,24610,
-24611,24612,24613,24614,24615,24616,24617,24618,24619,24620,24621,24622,
-24623,24624,24625,24626,24627,24628,24629,24630,24631,24632,24633,24634,
-24635,24636,24637,24638,24639,24640,24641,24642,24643,24644,24645,24646,
-24647,24648,24649,24650,24651,24652,24653,24654,24655,24656,24657,24658,
-24659,24660,24661,24662,24663,24664,24665,24666,24667,24668,24669,24670,
-24671,24672,24673,24674,24675,24676,24677,24678,24679,24680,24681,24682,
-24683,24684,24685,24686,24687,24688,24689,24690,24691,24692,24693,24694,
-24695,24696,24697,24698,24699,24700,24701,24702,24703,24704,24705,24706,
-24707,24708,24709,24710,24711,24712,24713,24714,24715,24716,24717,24718,
-24719,24720,24721,24722,24723,24724,24725,24726,24727,24728,24729,24730,
-24731,24732,24733,24734,24735,24736,24737,24738,24739,24740,24741,24742,
-24743,24744,24745,24746,24747,24748,24749,24750,24751,24752,24753,24754,
-24755,24756,24757,24758,24759,24760,24761,24762,24763,24764,24765,24766,
-24767,24768,24769,24770,24771,24772,24773,24774,24775,24776,24777,24778,
-24779,24780,24781,24782,24783,24784,24785,24786,24787,24788,24789,24790,
-24791,24792,24793,24794,24795,24796,24797,24798,24799,24800,24801,24802,
-24803,24804,24805,24806,24807,24808,24809,24810,24811,24812,24813,24814,
-24815,24816,24817,24818,24819,24820,24821,24822,24823,24824,24825,24826,
-24827,24828,24829,24830,24831,24832,24833,24834,24835,24836,24837,24838,
-24839,24840,24841,24842,24843,24844,24845,24846,24847,24848,24849,24850,
-24851,24852,24853,24854,24855,24856,24857,24858,24859,24860,24861,24862,
-24863,24864,24865,24866,24867,24868,24869,24870,24871,24872,24873,24874,
-24875,24876,24877,24878,24879,24880,24881,24882,24883,24884,24885,24886,
-24887,24888,24889,24890,24891,24892,24893,24894,24895,24896,24897,24898,
-24899,24900,24901,24902,24903,24904,24905,24906,24907,24908,24909,24910,
-24911,24912,24913,24914,24915,24916,24917,24918,24919,24920,24921,24922,
-24923,24924,24925,24926,24927,24928,24929,24930,24931,24932,24933,24934,
-24935,24936,24937,24938,24939,24940,24941,24942,24943,24944,24945,24946,
-24947,24948,24949,24950,24951,24952,24953,24954,24955,24956,24957,24958,
-24959,24960,24961,24962,24963,24964,24965,24966,24967,24968,24969,24970,
-24971,24972,24973,24974,24975,24976,24977,24978,24979,24980,24981,24982,
-24983,24984,24985,24986,24987,24988,24989,24990,24991,24992,24993,24994,
-24995,24996,24997,24998,24999,25000,25001,25002,25003,25004,25005,25006,
-25007,25008,25009,25010,25011,25012,25013,25014,25015,25016,25017,25018,
-25019,25020,25021,25022,25023,25024,25025,25026,25027,25028,25029,25030,
-25031,25032,25033,25034,25035,25036,25037,25038,25039,25040,25041,25042,
-25043,25044,25045,25046,25047,25048,25049,25050,25051,25052,25053,25054,
-25055,25056,25057,25058,25059,25060,25061,25062,25063,25064,25065,25066,
-25067,25068,25069,25070,25071,25072,25073,25074,25075,25076,25077,25078,
-25079,25080,25081,25082,25083,25084,25085,25086,25087,25088,25089,25090,
-25091,25092,25093,25094,25095,25096,25097,25098,25099,25100,25101,25102,
-25103,25104,25105,25106,25107,25108,25109,25110,25111,25112,25113,25114,
-25115,25116,25117,25118,25119,25120,25121,25122,25123,25124,25125,25126,
-25127,25128,25129,25130,25131,25132,25133,25134,25135,25136,25137,25138,
-25139,25140,25141,25142,25143,25144,25145,25146,25147,25148,25149,25150,
-25151,25152,25153,25154,25155,25156,25157,25158,25159,25160,25161,25162,
-25163,25164,25165,25166,25167,25168,25169,25170,25171,25172,25173,25174,
-25175,25176,25177,25178,25179,25180,25181,25182,25183,25184,25185,25186,
-25187,25188,25189,25190,25191,25192,25193,25194,25195,25196,25197,25198,
-25199,25200,25201,25202,25203,25204,25205,25206,25207,25208,25209,25210,
-25211,25212,25213,25214,25215,25216,25217,25218,25219,25220,25221,25222,
-25223,25224,25225,25226,25227,25228,25229,25230,25231,25232,25233,25234,
-25235,25236,25237,25238,25239,25240,25241,25242,25243,25244,25245,25246,
-25247,25248,25249,25250,25251,25252,25253,25254,25255,25256,25257,25258,
-25259,25260,25261,25262,25263,25264,25265,25266,25267,25268,25269,25270,
-25271,25272,25273,25274,25275,25276,25277,25278,25279,25280,25281,25282,
-25283,25284,25285,25286,25287,25288,25289,25290,25291,25292,25293,25294,
-25295,25296,25297,25298,25299,25300,25301,25302,25303,25304,25305,25306,
-25307,25308,25309,25310,25311,25312,25313,25314,25315,25316,25317,25318,
-25319,25320,25321,25322,25323,25324,25325,25326,25327,25328,25329,25330,
-25331,25332,25333,25334,25335,25336,25337,25338,25339,25340,25341,25342,
-25343,25344,25345,25346,25347,25348,25349,25350,25351,25352,25353,25354,
-25355,25356,25357,25358,25359,25360,25361,25362,25363,25364,25365,25366,
-25367,25368,25369,25370,25371,25372,25373,25374,25375,25376,25377,25378,
-25379,25380,25381,25382,25383,25384,25385,25386,25387,25388,25389,25390,
-25391,25392,25393,25394,25395,25396,25397,25398,25399,25400,25401,25402,
-25403,25404,25405,25406,25407,25408,25409,25410,25411,25412,25413,25414,
-25415,25416,25417,25418,25419,25420,25421,25422,25423,25424,25425,25426,
-25427,25428,25429,25430,25431,25432,25433,25434,25435,25436,25437,25438,
-25439,25440,25441,25442,25443,25444,25445,25446,25447,25448,25449,25450,
-25451,25452,25453,25454,25455,25456,25457,25458,25459,25460,25461,25462,
-25463,25464,25465,25466,25467,25468,25469,25470,25471,25472,25473,25474,
-25475,25476,25477,25478,25479,25480,25481,25482,25483,25484,25485,25486,
-25487,25488,25489,25490,25491,25492,25493,25494,25495,25496,25497,25498,
-25499,25500,25501,25502,25503,25504,25505,25506,25507,25508,25509,25510,
-25511,25512,25513,25514,25515,25516,25517,25518,25519,25520,25521,25522,
-25523,25524,25525,25526,25527,25528,25529,25530,25531,25532,25533,25534,
-25535,25536,25537,25538,25539,25540,25541,25542,25543,25544,25545,25546,
-25547,25548,25549,25550,25551,25552,25553,25554,25555,25556,25557,25558,
-25559,25560,25561,25562,25563,25564,25565,25566,25567,25568,25569,25570,
-25571,25572,25573,25574,25575,25576,25577,25578,25579,25580,25581,25582,
-25583,25584,25585,25586,25587,25588,25589,25590,25591,25592,25593,25594,
-25595,25596,25597,25598,25599,25600,25601,25602,25603,25604,25605,25606,
-25607,25608,25609,25610,25611,25612,25613,25614,25615,25616,25617,25618,
-25619,25620,25621,25622,25623,25624,25625,25626,25627,25628,25629,25630,
-25631,25632,25633,25634,25635,25636,25637,25638,25639,25640,25641,25642,
-25643,25644,25645,25646,25647,25648,25649,25650,25651,25652,25653,25654,
-25655,25656,25657,25658,25659,25660,25661,25662,25663,25664,25665,25666,
-25667,25668,25669,25670,25671,25672,25673,25674,25675,25676,25677,25678,
-25679,25680,25681,25682,25683,25684,25685,25686,25687,25688,25689,25690,
-25691,25692,25693,25694,25695,25696,25697,25698,25699,25700,25701,25702,
-25703,25704,25705,25706,25707,25708,25709,25710,25711,25712,25713,25714,
-25715,25716,25717,25718,25719,25720,25721,25722,25723,25724,25725,25726,
-25727,25728,25729,25730,25731,25732,25733,25734,25735,25736,25737,25738,
-25739,25740,25741,25742,25743,25744,25745,25746,25747,25748,25749,25750,
-25751,25752,25753,25754,25755,25756,25757,25758,25759,25760,25761,25762,
-25763,25764,25765,25766,25767,25768,25769,25770,25771,25772,25773,25774,
-25775,25776,25777,25778,25779,25780,25781,25782,25783,25784,25785,25786,
-25787,25788,25789,25790,25791,25792,25793,25794,25795,25796,25797,25798,
-25799,25800,25801,25802,25803,25804,25805,25806,25807,25808,25809,25810,
-25811,25812,25813,25814,25815,25816,25817,25818,25819,25820,25821,25822,
-25823,25824,25825,25826,25827,25828,25829,25830,25831,25832,25833,25834,
-25835,25836,25837,25838,25839,25840,25841,25842,25843,25844,25845,25846,
-25847,25848,25849,25850,25851,25852,25853,25854,25855,25856,25857,25858,
-25859,25860,25861,25862,25863,25864,25865,25866,25867,25868,25869,25870,
-25871,25872,25873,25874,25875,25876,25877,25878,25879,25880,25881,25882,
-25883,25884,25885,25886,25887,25888,25889,25890,25891,25892,25893,25894,
-25895,25896,25897,25898,25899,25900,25901,25902,25903,25904,25905,25906,
-25907,25908,25909,25910,25911,25912,25913,25914,25915,25916,25917,25918,
-25919,25920,25921,25922,25923,25924,25925,25926,25927,25928,25929,25930,
-25931,25932,25933,25934,25935,25936,25937,25938,25939,25940,25941,25942,
-25943,25944,25945,25946,25947,25948,25949,25950,25951,25952,25953,25954,
-25955,25956,25957,25958,25959,25960,25961,25962,25963,25964,25965,25966,
-25967,25968,25969,25970,25971,25972,25973,25974,25975,25976,25977,25978,
-25979,25980,25981,25982,25983,25984,25985,25986,25987,25988,25989,25990,
-25991,25992,25993,25994,25995,25996,25997,25998,25999,26000,26001,26002,
-26003,26004,26005,26006,26007,26008,26009,26010,26011,26012,26013,26014,
-26015,26016,26017,26018,26019,26020,26021,26022,26023,26024,26025,26026,
-26027,26028,26029,26030,26031,26032,26033,26034,26035,26036,26037,26038,
-26039,26040,26041,26042,26043,26044,26045,26046,26047,26048,26049,26050,
-26051,26052,26053,26054,26055,26056,26057,26058,26059,26060,26061,26062,
-26063,26064,26065,26066,26067,26068,26069,26070,26071,26072,26073,26074,
-26075,26076,26077,26078,26079,26080,26081,26082,26083,26084,26085,26086,
-26087,26088,26089,26090,26091,26092,26093,26094,26095,26096,26097,26098,
-26099,26100,26101,26102,26103,26104,26105,26106,26107,26108,26109,26110,
-26111,26112,26113,26114,26115,26116,26117,26118,26119,26120,26121,26122,
-26123,26124,26125,26126,26127,26128,26129,26130,26131,26132,26133,26134,
-26135,26136,26137,26138,26139,26140,26141,26142,26143,26144,26145,26146,
-26147,26148,26149,26150,26151,26152,26153,26154,26155,26156,26157,26158,
-26159,26160,26161,26162,26163,26164,26165,26166,26167,26168,26169,26170,
-26171,26172,26173,26174,26175,26176,26177,26178,26179,26180,26181,26182,
-26183,26184,26185,26186,26187,26188,26189,26190,26191,26192,26193,26194,
-26195,26196,26197,26198,26199,26200,26201,26202,26203,26204,26205,26206,
-26207,26208,26209,26210,26211,26212,26213,26214,26215,26216,26217,26218,
-26219,26220,26221,26222,26223,26224,26225,26226,26227,26228,26229,26230,
-26231,26232,26233,26234,26235,26236,26237,26238,26239,26240,26241,26242,
-26243,26244,26245,26246,26247,26248,26249,26250,26251,26252,26253,26254,
-26255,26256,26257,26258,26259,26260,26261,26262,26263,26264,26265,26266,
-26267,26268,26269,26270,26271,26272,26273,26274,26275,26276,26277,26278,
-26279,26280,26281,26282,26283,26284,26285,26286,26287,26288,26289,26290,
-26291,26292,26293,26294,26295,26296,26297,26298,26299,26300,26301,26302,
-26303,26304,26305,26306,26307,26308,26309,26310,26311,26312,26313,26314,
-26315,26316,26317,26318,26319,26320,26321,26322,26323,26324,26325,26326,
-26327,26328,26329,26330,26331,26332,26333,26334,26335,26336,26337,26338,
-26339,26340,26341,26342,26343,26344,26345,26346,26347,26348,26349,26350,
-26351,26352,26353,26354,26355,26356,26357,26358,26359,26360,26361,26362,
-26363,26364,26365,26366,26367,26368,26369,26370,26371,26372,26373,26374,
-26375,26376,26377,26378,26379,26380,26381,26382,26383,26384,26385,26386,
-26387,26388,26389,26390,26391,26392,26393,26394,26395,26396,26397,26398,
-26399,26400,26401,26402,26403,26404,26405,26406,26407,26408,26409,26410,
-26411,26412,26413,26414,26415,26416,26417,26418,26419,26420,26421,26422,
-26423,26424,26425,26426,26427,26428,26429,26430,26431,26432,26433,26434,
-26435,26436,26437,26438,26439,26440,26441,26442,26443,26444,26445,26446,
-26447,26448,26449,26450,26451,26452,26453,26454,26455,26456,26457,26458,
-26459,26460,26461,26462,26463,26464,26465,26466,26467,26468,26469,26470,
-26471,26472,26473,26474,26475,26476,26477,26478,26479,26480,26481,26482,
-26483,26484,26485,26486,26487,26488,26489,26490,26491,26492,26493,26494,
-26495,26496,26497,26498,26499,26500,26501,26502,26503,26504,26505,26506,
-26507,26508,26509,26510,26511,26512,26513,26514,26515,26516,26517,26518,
-26519,26520,26521,26522,26523,26524,26525,26526,26527,26528,26529,26530,
-26531,26532,26533,26534,26535,26536,26537,26538,26539,26540,26541,26542,
-26543,26544,26545,26546,26547,26548,26549,26550,26551,26552,26553,26554,
-26555,26556,26557,26558,26559,26560,26561,26562,26563,26564,26565,26566,
-26567,26568,26569,26570,26571,26572,26573,26574,26575,26576,26577,26578,
-26579,26580,26581,26582,26583,26584,26585,26586,26587,26588,26589,26590,
-26591,26592,26593,26594,26595,26596,26597,26598,26599,26600,26601,26602,
-26603,26604,26605,26606,26607,26608,26609,26610,26611,26612,26613,26614,
-26615,26616,26617,26618,26619,26620,26621,26622,26623,26624,26625,26626,
-26627,26628,26629,26630,26631,26632,26633,26634,26635,26636,26637,26638,
-26639,26640,26641,26642,26643,26644,26645,26646,26647,26648,26649,26650,
-26651,26652,26653,26654,26655,26656,26657,26658,26659,26660,26661,26662,
-26663,26664,26665,26666,26667,26668,26669,26670,26671,26672,26673,26674,
-26675,26676,26677,26678,26679,26680,26681,26682,26683,26684,26685,26686,
-26687,26688,26689,26690,26691,26692,26693,26694,26695,26696,26697,26698,
-26699,26700,26701,26702,26703,26704,26705,26706,26707,26708,26709,26710,
-26711,26712,26713,26714,26715,26716,26717,26718,26719,26720,26721,26722,
-26723,26724,26725,26726,26727,26728,26729,26730,26731,26732,26733,26734,
-26735,26736,26737,26738,26739,26740,26741,26742,26743,26744,26745,26746,
-26747,26748,26749,26750,26751,26752,26753,26754,26755,26756,26757,26758,
-26759,26760,26761,26762,26763,26764,26765,26766,26767,26768,26769,26770,
-26771,26772,26773,26774,26775,26776,26777,26778,26779,26780,26781,26782,
-26783,26784,26785,26786,26787,26788,26789,26790,26791,26792,26793,26794,
-26795,26796,26797,26798,26799,26800,26801,26802,26803,26804,26805,26806,
-26807,26808,26809,26810,26811,26812,26813,26814,26815,26816,26817,26818,
-26819,26820,26821,26822,26823,26824,26825,26826,26827,26828,26829,26830,
-26831,26832,26833,26834,26835,26836,26837,26838,26839,26840,26841,26842,
-26843,26844,26845,26846,26847,26848,26849,26850,26851,26852,26853,26854,
-26855,26856,26857,26858,26859,26860,26861,26862,26863,26864,26865,26866,
-26867,26868,26869,26870,26871,26872,26873,26874,26875,26876,26877,26878,
-26879,26880,26881,26882,26883,26884,26885,26886,26887,26888,26889,26890,
-26891,26892,26893,26894,26895,26896,26897,26898,26899,26900,26901,26902,
-26903,26904,26905,26906,26907,26908,26909,26910,26911,26912,26913,26914,
-26915,26916,26917,26918,26919,26920,26921,26922,26923,26924,26925,26926,
-26927,26928,26929,26930,26931,26932,26933,26934,26935,26936,26937,26938,
-26939,26940,26941,26942,26943,26944,26945,26946,26947,26948,26949,26950,
-26951,26952,26953,26954,26955,26956,26957,26958,26959,26960,26961,26962,
-26963,26964,26965,26966,26967,26968,26969,26970,26971,26972,26973,26974,
-26975,26976,26977,26978,26979,26980,26981,26982,26983,26984,26985,26986,
-26987,26988,26989,26990,26991,26992,26993,26994,26995,26996,26997,26998,
-26999,27000,27001,27002,27003,27004,27005,27006,27007,27008,27009,27010,
-27011,27012,27013,27014,27015,27016,27017,27018,27019,27020,27021,27022,
-27023,27024,27025,27026,27027,27028,27029,27030,27031,27032,27033,27034,
-27035,27036,27037,27038,27039,27040,27041,27042,27043,27044,27045,27046,
-27047,27048,27049,27050,27051,27052,27053,27054,27055,27056,27057,27058,
-27059,27060,27061,27062,27063,27064,27065,27066,27067,27068,27069,27070,
-27071,27072,27073,27074,27075,27076,27077,27078,27079,27080,27081,27082,
-27083,27084,27085,27086,27087,27088,27089,27090,27091,27092,27093,27094,
-27095,27096,27097,27098,27099,27100,27101,27102,27103,27104,27105,27106,
-27107,27108,27109,27110,27111,27112,27113,27114,27115,27116,27117,27118,
-27119,27120,27121,27122,27123,27124,27125,27126,27127,27128,27129,27130,
-27131,27132,27133,27134,27135,27136,27137,27138,27139,27140,27141,27142,
-27143,27144,27145,27146,27147,27148,27149,27150,27151,27152,27153,27154,
-27155,27156,27157,27158,27159,27160,27161,27162,27163,27164,27165,27166,
-27167,27168,27169,27170,27171,27172,27173,27174,27175,27176,27177,27178,
-27179,27180,27181,27182,27183,27184,27185,27186,27187,27188,27189,27190,
-27191,27192,27193,27194,27195,27196,27197,27198,27199,27200,27201,27202,
-27203,27204,27205,27206,27207,27208,27209,27210,27211,27212,27213,27214,
-27215,27216,27217,27218,27219,27220,27221,27222,27223,27224,27225,27226,
-27227,27228,27229,27230,27231,27232,27233,27234,27235,27236,27237,27238,
-27239,27240,27241,27242,27243,27244,27245,27246,27247,27248,27249,27250,
-27251,27252,27253,27254,27255,27256,27257,27258,27259,27260,27261,27262,
-27263,27264,27265,27266,27267,27268,27269,27270,27271,27272,27273,27274,
-27275,27276,27277,27278,27279,27280,27281,27282,27283,27284,27285,27286,
-27287,27288,27289,27290,27291,27292,27293,27294,27295,27296,27297,27298,
-27299,27300,27301,27302,27303,27304,27305,27306,27307,27308,27309,27310,
-27311,27312,27313,27314,27315,27316,27317,27318,27319,27320,27321,27322,
-27323,27324,27325,27326,27327,27328,27329,27330,27331,27332,27333,27334,
-27335,27336,27337,27338,27339,27340,27341,27342,27343,27344,27345,27346,
-27347,27348,27349,27350,27351,27352,27353,27354,27355,27356,27357,27358,
-27359,27360,27361,27362,27363,27364,27365,27366,27367,27368,27369,27370,
-27371,27372,27373,27374,27375,27376,27377,27378,27379,27380,27381,27382,
-27383,27384,27385,27386,27387,27388,27389,27390,27391,27392,27393,27394,
-27395,27396,27397,27398,27399,27400,27401,27402,27403,27404,27405,27406,
-27407,27408,27409,27410,27411,27412,27413,27414,27415,27416,27417,27418,
-27419,27420,27421,27422,27423,27424,27425,27426,27427,27428,27429,27430,
-27431,27432,27433,27434,27435,27436,27437,27438,27439,27440,27441,27442,
-27443,27444,27445,27446,27447,27448,27449,27450,27451,27452,27453,27454,
-27455,27456,27457,27458,27459,27460,27461,27462,27463,27464,27465,27466,
-27467,27468,27469,27470,27471,27472,27473,27474,27475,27476,27477,27478,
-27479,27480,27481,27482,27483,27484,27485,27486,27487,27488,27489,27490,
-27491,27492,27493,27494,27495,27496,27497,27498,27499,27500,27501,27502,
-27503,27504,27505,27506,27507,27508,27509,27510,27511,27512,27513,27514,
-27515,27516,27517,27518,27519,27520,27521,27522,27523,27524,27525,27526,
-27527,27528,27529,27530,27531,27532,27533,27534,27535,27536,27537,27538,
-27539,27540,27541,27542,27543,27544,27545,27546,27547,27548,27549,27550,
-27551,27552,27553,27554,27555,27556,27557,27558,27559,27560,27561,27562,
-27563,27564,27565,27566,27567,27568,27569,27570,27571,27572,27573,27574,
-27575,27576,27577,27578,27579,27580,27581,27582,27583,27584,27585,27586,
-27587,27588,27589,27590,27591,27592,27593,27594,27595,27596,27597,27598,
-27599,27600,27601,27602,27603,27604,27605,27606,27607,27608,27609,27610,
-27611,27612,27613,27614,27615,27616,27617,27618,27619,27620,27621,27622,
-27623,27624,27625,27626,27627,27628,27629,27630,27631,27632,27633,27634,
-27635,27636,27637,27638,27639,27640,27641,27642,27643,27644,27645,27646,
-27647,27648,27649,27650,27651,27652,27653,27654,27655,27656,27657,27658,
-27659,27660,27661,27662,27663,27664,27665,27666,27667,27668,27669,27670,
-27671,27672,27673,27674,27675,27676,27677,27678,27679,27680,27681,27682,
-27683,27684,27685,27686,27687,27688,27689,27690,27691,27692,27693,27694,
-27695,27696,27697,27698,27699,27700,27701,27702,27703,27704,27705,27706,
-27707,27708,27709,27710,27711,27712,27713,27714,27715,27716,27717,27718,
-27719,27720,27721,27722,27723,27724,27725,27726,27727,27728,27729,27730,
-27731,27732,27733,27734,27735,27736,27737,27738,27739,27740,27741,27742,
-27743,27744,27745,27746,27747,27748,27749,27750,27751,27752,27753,27754,
-27755,27756,27757,27758,27759,27760,27761,27762,27763,27764,27765,27766,
-27767,27768,27769,27770,27771,27772,27773,27774,27775,27776,27777,27778,
-27779,27780,27781,27782,27783,27784,27785,27786,27787,27788,27789,27790,
-27791,27792,27793,27794,27795,27796,27797,27798,27799,27800,27801,27802,
-27803,27804,27805,27806,27807,27808,27809,27810,27811,27812,27813,27814,
-27815,27816,27817,27818,27819,27820,27821,27822,27823,27824,27825,27826,
-27827,27828,27829,27830,27831,27832,27833,27834,27835,27836,27837,27838,
-27839,27840,27841,27842,27843,27844,27845,27846,27847,27848,27849,27850,
-27851,27852,27853,27854,27855,27856,27857,27858,27859,27860,27861,27862,
-27863,27864,27865,27866,27867,27868,27869,27870,27871,27872,27873,27874,
-27875,27876,27877,27878,27879,27880,27881,27882,27883,27884,27885,27886,
-27887,27888,27889,27890,27891,27892,27893,27894,27895,27896,27897,27898,
-27899,27900,27901,27902,27903,27904,27905,27906,27907,27908,27909,27910,
-27911,27912,27913,27914,27915,27916,27917,27918,27919,27920,27921,27922,
-27923,27924,27925,27926,27927,27928,27929,27930,27931,27932,27933,27934,
-27935,27936,27937,27938,27939,27940,27941,27942,27943,27944,27945,27946,
-27947,27948,27949,27950,27951,27952,27953,27954,27955,27956,27957,27958,
-27959,27960,27961,27962,27963,27964,27965,27966,27967,27968,27969,27970,
-27971,27972,27973,27974,27975,27976,27977,27978,27979,27980,27981,27982,
-27983,27984,27985,27986,27987,27988,27989,27990,27991,27992,27993,27994,
-27995,27996,27997,27998,27999,28000,28001,28002,28003,28004,28005,28006,
-28007,28008,28009,28010,28011,28012,28013,28014,28015,28016,28017,28018,
-28019,28020,28021,28022,28023,28024,28025,28026,28027,28028,28029,28030,
-28031,28032,28033,28034,28035,28036,28037,28038,28039,28040,28041,28042,
-28043,28044,28045,28046,28047,28048,28049,28050,28051,28052,28053,28054,
-28055,28056,28057,28058,28059,28060,28061,28062,28063,28064,28065,28066,
-28067,28068,28069,28070,28071,28072,28073,28074,28075,28076,28077,28078,
-28079,28080,28081,28082,28083,28084,28085,28086,28087,28088,28089,28090,
-28091,28092,28093,28094,28095,28096,28097,28098,28099,28100,28101,28102,
-28103,28104,28105,28106,28107,28108,28109,28110,28111,28112,28113,28114,
-28115,28116,28117,28118,28119,28120,28121,28122,28123,28124,28125,28126,
-28127,28128,28129,28130,28131,28132,28133,28134,28135,28136,28137,28138,
-28139,28140,28141,28142,28143,28144,28145,28146,28147,28148,28149,28150,
-28151,28152,28153,28154,28155,28156,28157,28158,28159,28160,28161,28162,
-28163,28164,28165,28166,28167,28168,28169,28170,28171,28172,28173,28174,
-28175,28176,28177,28178,28179,28180,28181,28182,28183,28184,28185,28186,
-28187,28188,28189,28190,28191,28192,28193,28194,28195,28196,28197,28198,
-28199,28200,28201,28202,28203,28204,28205,28206,28207,28208,28209,28210,
-28211,28212,28213,28214,28215,28216,28217,28218,28219,28220,28221,28222,
-28223,28224,28225,28226,28227,28228,28229,28230,28231,28232,28233,28234,
-28235,28236,28237,28238,28239,28240,28241,28242,28243,28244,28245,28246,
-28247,28248,28249,28250,28251,28252,28253,28254,28255,28256,28257,28258,
-28259,28260,28261,28262,28263,28264,28265,28266,28267,28268,28269,28270,
-28271,28272,28273,28274,28275,28276,28277,28278,28279,28280,28281,28282,
-28283,28284,28285,28286,28287,28288,28289,28290,28291,28292,28293,28294,
-28295,28296,28297,28298,28299,28300,28301,28302,28303,28304,28305,28306,
-28307,28308,28309,28310,28311,28312,28313,28314,28315,28316,28317,28318,
-28319,28320,28321,28322,28323,28324,28325,28326,28327,28328,28329,28330,
-28331,28332,28333,28334,28335,28336,28337,28338,28339,28340,28341,28342,
-28343,28344,28345,28346,28347,28348,28349,28350,28351,28352,28353,28354,
-28355,28356,28357,28358,28359,28360,28361,28362,28363,28364,28365,28366,
-28367,28368,28369,28370,28371,28372,28373,28374,28375,28376,28377,28378,
-28379,28380,28381,28382,28383,28384,28385,28386,28387,28388,28389,28390,
-28391,28392,28393,28394,28395,28396,28397,28398,28399,28400,28401,28402,
-28403,28404,28405,28406,28407,28408,28409,28410,28411,28412,28413,28414,
-28415,28416,28417,28418,28419,28420,28421,28422,28423,28424,28425,28426,
-28427,28428,28429,28430,28431,28432,28433,28434,28435,28436,28437,28438,
-28439,28440,28441,28442,28443,28444,28445,28446,28447,28448,28449,28450,
-28451,28452,28453,28454,28455,28456,28457,28458,28459,28460,28461,28462,
-28463,28464,28465,28466,28467,28468,28469,28470,28471,28472,28473,28474,
-28475,28476,28477,28478,28479,28480,28481,28482,28483,28484,28485,28486,
-28487,28488,28489,28490,28491,28492,28493,28494,28495,28496,28497,28498,
-28499,28500,28501,28502,28503,28504,28505,28506,28507,28508,28509,28510,
-28511,28512,28513,28514,28515,28516,28517,28518,28519,28520,28521,28522,
-28523,28524,28525,28526,28527,28528,28529,28530,28531,28532,28533,28534,
-28535,28536,28537,28538,28539,28540,28541,28542,28543,28544,28545,28546,
-28547,28548,28549,28550,28551,28552,28553,28554,28555,28556,28557,28558,
-28559,28560,28561,28562,28563,28564,28565,28566,28567,28568,28569,28570,
-28571,28572,28573,28574,28575,28576,28577,28578,28579,28580,28581,28582,
-28583,28584,28585,28586,28587,28588,28589,28590,28591,28592,28593,28594,
-28595,28596,28597,28598,28599,28600,28601,28602,28603,28604,28605,28606,
-28607,28608,28609,28610,28611,28612,28613,28614,28615,28616,28617,28618,
-28619,28620,28621,28622,28623,28624,28625,28626,28627,28628,28629,28630,
-28631,28632,28633,28634,28635,28636,28637,28638,28639,28640,28641,28642,
-28643,28644,28645,28646,28647,28648,28649,28650,28651,28652,28653,28654,
-28655,28656,28657,28658,28659,28660,28661,28662,28663,28664,28665,28666,
-28667,28668,28669,28670,28671,28672,28673,28674,28675,28676,28677,28678,
-28679,28680,28681,28682,28683,28684,28685,28686,28687,28688,28689,28690,
-28691,28692,28693,28694,28695,28696,28697,28698,28699,28700,28701,28702,
-28703,28704,28705,28706,28707,28708,28709,28710,28711,28712,28713,28714,
-28715,28716,28717,28718,28719,28720,28721,28722,28723,28724,28725,28726,
-28727,28728,28729,28730,28731,28732,28733,28734,28735,28736,28737,28738,
-28739,28740,28741,28742,28743,28744,28745,28746,28747,28748,28749,28750,
-28751,28752,28753,28754,28755,28756,28757,28758,28759,28760,28761,28762,
-28763,28764,28765,28766,28767,28768,28769,28770,28771,28772,28773,28774,
-28775,28776,28777,28778,28779,28780,28781,28782,28783,28784,28785,28786,
-28787,28788,28789,28790,28791,28792,28793,28794,28795,28796,28797,28798,
-28799,28800,28801,28802,28803,28804,28805,28806,28807,28808,28809,28810,
-28811,28812,28813,28814,28815,28816,28817,28818,28819,28820,28821,28822,
-28823,28824,28825,28826,28827,28828,28829,28830,28831,28832,28833,28834,
-28835,28836,28837,28838,28839,28840,28841,28842,28843,28844,28845,28846,
-28847,28848,28849,28850,28851,28852,28853,28854,28855,28856,28857,28858,
-28859,28860,28861,28862,28863,28864,28865,28866,28867,28868,28869,28870,
-28871,28872,28873,28874,28875,28876,28877,28878,28879,28880,28881,28882,
-28883,28884,28885,28886,28887,28888,28889,28890,28891,28892,28893,28894,
-28895,28896,28897,28898,28899,28900,28901,28902,28903,28904,28905,28906,
-28907,28908,28909,28910,28911,28912,28913,28914,28915,28916,28917,28918,
-28919,28920,28921,28922,28923,28924,28925,28926,28927,28928,28929,28930,
-28931,28932,28933,28934,28935,28936,28937,28938,28939,28940,28941,28942,
-28943,28944,28945,28946,28947,28948,28949,28950,28951,28952,28953,28954,
-28955,28956,28957,28958,28959,28960,28961,28962,28963,28964,28965,28966,
-28967,28968,28969,28970,28971,28972,28973,28974,28975,28976,28977,28978,
-28979,28980,28981,28982,28983,28984,28985,28986,28987,28988,28989,28990,
-28991,28992,28993,28994,28995,28996,28997,28998,28999,29000,29001,29002,
-29003,29004,29005,29006,29007,29008,29009,29010,29011,29012,29013,29014,
-29015,29016,29017,29018,29019,29020,29021,29022,29023,29024,29025,29026,
-29027,29028,29029,29030,29031,29032,29033,29034,29035,29036,29037,29038,
-29039,29040,29041,29042,29043,29044,29045,29046,29047,29048,29049,29050,
-29051,29052,29053,29054,29055,29056,29057,29058,29059,29060,29061,29062,
-29063,29064,29065,29066,29067,29068,29069,29070,29071,29072,29073,29074,
-29075,29076,29077,29078,29079,29080,29081,29082,29083,29084,29085,29086,
-29087,29088,29089,29090,29091,29092,29093,29094,29095,29096,29097,29098,
-29099,29100,29101,29102,29103,29104,29105,29106,29107,29108,29109,29110,
-29111,29112,29113,29114,29115,29116,29117,29118,29119,29120,29121,29122,
-29123,29124,29125,29126,29127,29128,29129,29130,29131,29132,29133,29134,
-29135,29136,29137,29138,29139,29140,29141,29142,29143,29144,29145,29146,
-29147,29148,29149,29150,29151,29152,29153,29154,29155,29156,29157,29158,
-29159,29160,29161,29162,29163,29164,29165,29166,29167,29168,29169,29170,
-29171,29172,29173,29174,29175,29176,29177,29178,29179,29180,29181,29182,
-29183,29184,29185,29186,29187,29188,29189,29190,29191,29192,29193,29194,
-29195,29196,29197,29198,29199,29200,29201,29202,29203,29204,29205,29206,
-29207,29208,29209,29210,29211,29212,29213,29214,29215,29216,29217,29218,
-29219,29220,29221,29222,29223,29224,29225,29226,29227,29228,29229,29230,
-29231,29232,29233,29234,29235,29236,29237,29238,29239,29240,29241,29242,
-29243,29244,29245,29246,29247,29248,29249,29250,29251,29252,29253,29254,
-29255,29256,29257,29258,29259,29260,29261,29262,29263,29264,29265,29266,
-29267,29268,29269,29270,29271,29272,29273,29274,29275,29276,29277,29278,
-29279,29280,29281,29282,29283,29284,29285,29286,29287,29288,29289,29290,
-29291,29292,29293,29294,29295,29296,29297,29298,29299,29300,29301,29302,
-29303,29304,29305,29306,29307,29308,29309,29310,29311,29312,29313,29314,
-29315,29316,29317,29318,29319,29320,29321,29322,29323,29324,29325,29326,
-29327,29328,29329,29330,29331,29332,29333,29334,29335,29336,29337,29338,
-29339,29340,29341,29342,29343,29344,29345,29346,29347,29348,29349,29350,
-29351,29352,29353,29354,29355,29356,29357,29358,29359,29360,29361,29362,
-29363,29364,29365,29366,29367,29368,29369,29370,29371,29372,29373,29374,
-29375,29376,29377,29378,29379,29380,29381,29382,29383,29384,29385,29386,
-29387,29388,29389,29390,29391,29392,29393,29394,29395,29396,29397,29398,
-29399,29400,29401,29402,29403,29404,29405,29406,29407,29408,29409,29410,
-29411,29412,29413,29414,29415,29416,29417,29418,29419,29420,29421,29422,
-29423,29424,29425,29426,29427,29428,29429,29430,29431,29432,29433,29434,
-29435,29436,29437,29438,29439,29440,29441,29442,29443,29444,29445,29446,
-29447,29448,29449,29450,29451,29452,29453,29454,29455,29456,29457,29458,
-29459,29460,29461,29462,29463,29464,29465,29466,29467,29468,29469,29470,
-29471,29472,29473,29474,29475,29476,29477,29478,29479,29480,29481,29482,
-29483,29484,29485,29486,29487,29488,29489,29490,29491,29492,29493,29494,
-29495,29496,29497,29498,29499,29500,29501,29502,29503,29504,29505,29506,
-29507,29508,29509,29510,29511,29512,29513,29514,29515,29516,29517,29518,
-29519,29520,29521,29522,29523,29524,29525,29526,29527,29528,29529,29530,
-29531,29532,29533,29534,29535,29536,29537,29538,29539,29540,29541,29542,
-29543,29544,29545,29546,29547,29548,29549,29550,29551,29552,29553,29554,
-29555,29556,29557,29558,29559,29560,29561,29562,29563,29564,29565,29566,
-29567,29568,29569,29570,29571,29572,29573,29574,29575,29576,29577,29578,
-29579,29580,29581,29582,29583,29584,29585,29586,29587,29588,29589,29590,
-29591,29592,29593,29594,29595,29596,29597,29598,29599,29600,29601,29602,
-29603,29604,29605,29606,29607,29608,29609,29610,29611,29612,29613,29614,
-29615,29616,29617,29618,29619,29620,29621,29622,29623,29624,29625,29626,
-29627,29628,29629,29630,29631,29632,29633,29634,29635,29636,29637,29638,
-29639,29640,29641,29642,29643,29644,29645,29646,29647,29648,29649,29650,
-29651,29652,29653,29654,29655,29656,29657,29658,29659,29660,29661,29662,
-29663,29664,29665,29666,29667,29668,29669,29670,29671,29672,29673,29674,
-29675,29676,29677,29678,29679,29680,29681,29682,29683,29684,29685,29686,
-29687,29688,29689,29690,29691,29692,29693,29694,29695,29696,29697,29698,
-29699,29700,29701,29702,29703,29704,29705,29706,29707,29708,29709,29710,
-29711,29712,29713,29714,29715,29716,29717,29718,29719,29720,29721,29722,
-29723,29724,29725,29726,29727,29728,29729,29730,29731,29732,29733,29734,
-29735,29736,29737,29738,29739,29740,29741,29742,29743,29744,29745,29746,
-29747,29748,29749,29750,29751,29752,29753,29754,29755,29756,29757,29758,
-29759,29760,29761,29762,29763,29764,29765,29766,29767,29768,29769,29770,
-29771,29772,29773,29774,29775,29776,29777,29778,29779,29780,29781,29782,
-29783,29784,29785,29786,29787,29788,29789,29790,29791,29792,29793,29794,
-29795,29796,29797,29798,29799,29800,29801,29802,29803,29804,29805,29806,
-29807,29808,29809,29810,29811,29812,29813,29814,29815,29816,29817,29818,
-29819,29820,29821,29822,29823,29824,29825,29826,29827,29828,29829,29830,
-29831,29832,29833,29834,29835,29836,29837,29838,29839,29840,29841,29842,
-29843,29844,29845,29846,29847,29848,29849,29850,29851,29852,29853,29854,
-29855,29856,29857,29858,29859,29860,29861,29862,29863,29864,29865,29866,
-29867,29868,29869,29870,29871,29872,29873,29874,29875,29876,29877,29878,
-29879,29880,29881,29882,29883,29884,29885,29886,29887,29888,29889,29890,
-29891,29892,29893,29894,29895,29896,29897,29898,29899,29900,29901,29902,
-29903,29904,29905,29906,29907,29908,29909,29910,29911,29912,29913,29914,
-29915,29916,29917,29918,29919,29920,29921,29922,29923,29924,29925,29926,
-29927,29928,29929,29930,29931,29932,29933,29934,29935,29936,29937,29938,
-29939,29940,29941,29942,29943,29944,29945,29946,29947,29948,29949,29950,
-29951,29952,29953,29954,29955,29956,29957,29958,29959,29960,29961,29962,
-29963,29964,29965,29966,29967,29968,29969,29970,29971,29972,29973,29974,
-29975,29976,29977,29978,29979,29980,29981,29982,29983,29984,29985,29986,
-29987,29988,29989,29990,29991,29992,29993,29994,29995,29996,29997,29998,
-29999,30000,30001,30002,30003,30004,30005,30006,30007,30008,30009,30010,
-30011,30012,30013,30014,30015,30016,30017,30018,30019,30020,30021,30022,
-30023,30024,30025,30026,30027,30028,30029,30030,30031,30032,30033,30034,
-30035,30036,30037,30038,30039,30040,30041,30042,30043,30044,30045,30046,
-30047,30048,30049,30050,30051,30052,30053,30054,30055,30056,30057,30058,
-30059,30060,30061,30062,30063,30064,30065,30066,30067,30068,30069,30070,
-30071,30072,30073,30074,30075,30076,30077,30078,30079,30080,30081,30082,
-30083,30084,30085,30086,30087,30088,30089,30090,30091,30092,30093,30094,
-30095,30096,30097,30098,30099,30100,30101,30102,30103,30104,30105,30106,
-30107,30108,30109,30110,30111,30112,30113,30114,30115,30116,30117,30118,
-30119,30120,30121,30122,30123,30124,30125,30126,30127,30128,30129,30130,
-30131,30132,30133,30134,30135,30136,30137,30138,30139,30140,30141,30142,
-30143,30144,30145,30146,30147,30148,30149,30150,30151,30152,30153,30154,
-30155,30156,30157,30158,30159,30160,30161,30162,30163,30164,30165,30166,
-30167,30168,30169,30170,30171,30172,30173,30174,30175,30176,30177,30178,
-30179,30180,30181,30182,30183,30184,30185,30186,30187,30188,30189,30190,
-30191,30192,30193,30194,30195,30196,30197,30198,30199,30200,30201,30202,
-30203,30204,30205,30206,30207,30208,30209,30210,30211,30212,30213,30214,
-30215,30216,30217,30218,30219,30220,30221,30222,30223,30224,30225,30226,
-30227,30228,30229,30230,30231,30232,30233,30234,30235,30236,30237,30238,
-30239,30240,30241,30242,30243,30244,30245,30246,30247,30248,30249,30250,
-30251,30252,30253,30254,30255,30256,30257,30258,30259,30260,30261,30262,
-30263,30264,30265,30266,30267,30268,30269,30270,30271,30272,30273,30274,
-30275,30276,30277,30278,30279,30280,30281,30282,30283,30284,30285,30286,
-30287,30288,30289,30290,30291,30292,30293,30294,30295,30296,30297,30298,
-30299,30300,30301,30302,30303,30304,30305,30306,30307,30308,30309,30310,
-30311,30312,30313,30314,30315,30316,30317,30318,30319,30320,30321,30322,
-30323,30324,30325,30326,30327,30328,30329,30330,30331,30332,30333,30334,
-30335,30336,30337,30338,30339,30340,30341,30342,30343,30344,30345,30346,
-30347,30348,30349,30350,30351,30352,30353,30354,30355,30356,30357,30358,
-30359,30360,30361,30362,30363,30364,30365,30366,30367,30368,30369,30370,
-30371,30372,30373,30374,30375,30376,30377,30378,30379,30380,30381,30382,
-30383,30384,30385,30386,30387,30388,30389,30390,30391,30392,30393,30394,
-30395,30396,30397,30398,30399,30400,30401,30402,30403,30404,30405,30406,
-30407,30408,30409,30410,30411,30412,30413,30414,30415,30416,30417,30418,
-30419,30420,30421,30422,30423,30424,30425,30426,30427,30428,30429,30430,
-30431,30432,30433,30434,30435,30436,30437,30438,30439,30440,30441,30442,
-30443,30444,30445,30446,30447,30448,30449,30450,30451,30452,30453,30454,
-30455,30456,30457,30458,30459,30460,30461,30462,30463,30464,30465,30466,
-30467,30468,30469,30470,30471,30472,30473,30474,30475,30476,30477,30478,
-30479,30480,30481,30482,30483,30484,30485,30486,30487,30488,30489,30490,
-30491,30492,30493,30494,30495,30496,30497,30498,30499,30500,30501,30502,
-30503,30504,30505,30506,30507,30508,30509,30510,30511,30512,30513,30514,
-30515,30516,30517,30518,30519,30520,30521,30522,30523,30524,30525,30526,
-30527,30528,30529,30530,30531,30532,30533,30534,30535,30536,30537,30538,
-30539,30540,30541,30542,30543,30544,30545,30546,30547,30548,30549,30550,
-30551,30552,30553,30554,30555,30556,30557,30558,30559,30560,30561,30562,
-30563,30564,30565,30566,30567,30568,30569,30570,30571,30572,30573,30574,
-30575,30576,30577,30578,30579,30580,30581,30582,30583,30584,30585,30586,
-30587,30588,30589,30590,30591,30592,30593,30594,30595,30596,30597,30598,
-30599,30600,30601,30602,30603,30604,30605,30606,30607,30608,30609,30610,
-30611,30612,30613,30614,30615,30616,30617,30618,30619,30620,30621,30622,
-30623,30624,30625,30626,30627,30628,30629,30630,30631,30632,30633,30634,
-30635,30636,30637,30638,30639,30640,30641,30642,30643,30644,30645,30646,
-30647,30648,30649,30650,30651,30652,30653,30654,30655,30656,30657,30658,
-30659,30660,30661,30662,30663,30664,30665,30666,30667,30668,30669,30670,
-30671,30672,30673,30674,30675,30676,30677,30678,30679,30680,30681,30682,
-30683,30684,30685,30686,30687,30688,30689,30690,30691,30692,30693,30694,
-30695,30696,30697,30698,30699,30700,30701,30702,30703,30704,30705,30706,
-30707,30708,30709,30710,30711,30712,30713,30714,30715,30716,30717,30718,
-30719,30720,30721,30722,30723,30724,30725,30726,30727,30728,30729,30730,
-30731,30732,30733,30734,30735,30736,30737,30738,30739,30740,30741,30742,
-30743,30744,30745,30746,30747,30748,30749,30750,30751,30752,30753,30754,
-30755,30756,30757,30758,30759,30760,30761,30762,30763,30764,30765,30766,
-30767,30768,30769,30770,30771,30772,30773,30774,30775,30776,30777,30778,
-30779,30780,30781,30782,30783,30784,30785,30786,30787,30788,30789,30790,
-30791,30792,30793,30794,30795,30796,30797,30798,30799,30800,30801,30802,
-30803,30804,30805,30806,30807,30808,30809,30810,30811,30812,30813,30814,
-30815,30816,30817,30818,30819,30820,30821,30822,30823,30824,30825,30826,
-30827,30828,30829,30830,30831,30832,30833,30834,30835,30836,30837,30838,
-30839,30840,30841,30842,30843,30844,30845,30846,30847,30848,30849,30850,
-30851,30852,30853,30854,30855,30856,30857,30858,30859,30860,30861,30862,
-30863,30864,30865,30866,30867,30868,30869,30870,30871,30872,30873,30874,
-30875,30876,30877,30878,30879,30880,30881,30882,30883,30884,30885,30886,
-30887,30888,30889,30890,30891,30892,30893,30894,30895,30896,30897,30898,
-30899,30900,30901,30902,30903,30904,30905,30906,30907,30908,30909,30910,
-30911,30912,30913,30914,30915,30916,30917,30918,30919,30920,30921,30922,
-30923,30924,30925,30926,30927,30928,30929,30930,30931,30932,30933,30934,
-30935,30936,30937,30938,30939,30940,30941,30942,30943,30944,30945,30946,
-30947,30948,30949,30950,30951,30952,30953,30954,30955,30956,30957,30958,
-30959,30960,30961,30962,30963,30964,30965,30966,30967,30968,30969,30970,
-30971,30972,30973,30974,30975,30976,30977,30978,30979,30980,30981,30982,
-30983,30984,30985,30986,30987,30988,30989,30990,30991,30992,30993,30994,
-30995,30996,30997,30998,30999,31000,31001,31002,31003,31004,31005,31006,
-31007,31008,31009,31010,31011,31012,31013,31014,31015,31016,31017,31018,
-31019,31020,31021,31022,31023,31024,31025,31026,31027,31028,31029,31030,
-31031,31032,31033,31034,31035,31036,31037,31038,31039,31040,31041,31042,
-31043,31044,31045,31046,31047,31048,31049,31050,31051,31052,31053,31054,
-31055,31056,31057,31058,31059,31060,31061,31062,31063,31064,31065,31066,
-31067,31068,31069,31070,31071,31072,31073,31074,31075,31076,31077,31078,
-31079,31080,31081,31082,31083,31084,31085,31086,31087,31088,31089,31090,
-31091,31092,31093,31094,31095,31096,31097,31098,31099,31100,31101,31102,
-31103,31104,31105,31106,31107,31108,31109,31110,31111,31112,31113,31114,
-31115,31116,31117,31118,31119,31120,31121,31122,31123,31124,31125,31126,
-31127,31128,31129,31130,31131,31132,31133,31134,31135,31136,31137,31138,
-31139,31140,31141,31142,31143,31144,31145,31146,31147,31148,31149,31150,
-31151,31152,31153,31154,31155,31156,31157,31158,31159,31160,31161,31162,
-31163,31164,31165,31166,31167,31168,31169,31170,31171,31172,31173,31174,
-31175,31176,31177,31178,31179,31180,31181,31182,31183,31184,31185,31186,
-31187,31188,31189,31190,31191,31192,31193,31194,31195,31196,31197,31198,
-31199,31200,31201,31202,31203,31204,31205,31206,31207,31208,31209,31210,
-31211,31212,31213,31214,31215,31216,31217,31218,31219,31220,31221,31222,
-31223,31224,31225,31226,31227,31228,31229,31230,31231,31232,31233,31234,
-31235,31236,31237,31238,31239,31240,31241,31242,31243,31244,31245,31246,
-31247,31248,31249,31250,31251,31252,31253,31254,31255,31256,31257,31258,
-31259,31260,31261,31262,31263,31264,31265,31266,31267,31268,31269,31270,
-31271,31272,31273,31274,31275,31276,31277,31278,31279,31280,31281,31282,
-31283,31284,31285,31286,31287,31288,31289,31290,31291,31292,31293,31294,
-31295,31296,31297,31298,31299,31300,31301,31302,31303,31304,31305,31306,
-31307,31308,31309,31310,31311,31312,31313,31314,31315,31316,31317,31318,
-31319,31320,31321,31322,31323,31324,31325,31326,31327,31328,31329,31330,
-31331,31332,31333,31334,31335,31336,31337,31338,31339,31340,31341,31342,
-31343,31344,31345,31346,31347,31348,31349,31350,31351,31352,31353,31354,
-31355,31356,31357,31358,31359,31360,31361,31362,31363,31364,31365,31366,
-31367,31368,31369,31370,31371,31372,31373,31374,31375,31376,31377,31378,
-31379,31380,31381,31382,31383,31384,31385,31386,31387,31388,31389,31390,
-31391,31392,31393,31394,31395,31396,31397,31398,31399,31400,31401,31402,
-31403,31404,31405,31406,31407,31408,31409,31410,31411,31412,31413,31414,
-31415,31416,31417,31418,31419,31420,31421,31422,31423,31424,31425,31426,
-31427,31428,31429,31430,31431,31432,31433,31434,31435,31436,31437,31438,
-31439,31440,31441,31442,31443,31444,31445,31446,31447,31448,31449,31450,
-31451,31452,31453,31454,31455,31456,31457,31458,31459,31460,31461,31462,
-31463,31464,31465,31466,31467,31468,31469,31470,31471,31472,31473,31474,
-31475,31476,31477,31478,31479,31480,31481,31482,31483,31484,31485,31486,
-31487,31488,31489,31490,31491,31492,31493,31494,31495,31496,31497,31498,
-31499,31500,31501,31502,31503,31504,31505,31506,31507,31508,31509,31510,
-31511,31512,31513,31514,31515,31516,31517,31518,31519,31520,31521,31522,
-31523,31524,31525,31526,31527,31528,31529,31530,31531,31532,31533,31534,
-31535,31536,31537,31538,31539,31540,31541,31542,31543,31544,31545,31546,
-31547,31548,31549,31550,31551,31552,31553,31554,31555,31556,31557,31558,
-31559,31560,31561,31562,31563,31564,31565,31566,31567,31568,31569,31570,
-31571,31572,31573,31574,31575,31576,31577,31578,31579,31580,31581,31582,
-31583,31584,31585,31586,31587,31588,31589,31590,31591,31592,31593,31594,
-31595,31596,31597,31598,31599,31600,31601,31602,31603,31604,31605,31606,
-31607,31608,31609,31610,31611,31612,31613,31614,31615,31616,31617,31618,
-31619,31620,31621,31622,31623,31624,31625,31626,31627,31628,31629,31630,
-31631,31632,31633,31634,31635,31636,31637,31638,31639,31640,31641,31642,
-31643,31644,31645,31646,31647,31648,31649,31650,31651,31652,31653,31654,
-31655,31656,31657,31658,31659,31660,31661,31662,31663,31664,31665,31666,
-31667,31668,31669,31670,31671,31672,31673,31674,31675,31676,31677,31678,
-31679,31680,31681,31682,31683,31684,31685,31686,31687,31688,31689,31690,
-31691,31692,31693,31694,31695,31696,31697,31698,31699,31700,31701,31702,
-31703,31704,31705,31706,31707,31708,31709,31710,31711,31712,31713,31714,
-31715,31716,31717,31718,31719,31720,31721,31722,31723,31724,31725,31726,
-31727,31728,31729,31730,31731,31732,31733,31734,31735,31736,31737,31738,
-31739,31740,31741,31742,31743,31744,31745,31746,31747,31748,31749,31750,
-31751,31752,31753,31754,31755,31756,31757,31758,31759,31760,31761,31762,
-31763,31764,31765,31766,31767,31768,31769,31770,31771,31772,31773,31774,
-31775,31776,31777,31778,31779,31780,31781,31782,31783,31784,31785,31786,
-31787,31788,31789,31790,31791,31792,31793,31794,31795,31796,31797,31798,
-31799,31800,31801,31802,31803,31804,31805,31806,31807,31808,31809,31810,
-31811,31812,31813,31814,31815,31816,31817,31818,31819,31820,31821,31822,
-31823,31824,31825,31826,31827,31828,31829,31830,31831,31832,31833,31834,
-31835,31836,31837,31838,31839,31840,31841,31842,31843,31844,31845,31846,
-31847,31848,31849,31850,31851,31852,31853,31854,31855,31856,31857,31858,
-31859,31860,31861,31862,31863,31864,31865,31866,31867,31868,31869,31870,
-31871,31872,31873,31874,31875,31876,31877,31878,31879,31880,31881,31882,
-31883,31884,31885,31886,31887,31888,31889,31890,31891,31892,31893,31894,
-31895,31896,31897,31898,31899,31900,31901,31902,31903,31904,31905,31906,
-31907,31908,31909,31910,31911,31912,31913,31914,31915,31916,31917,31918,
-31919,31920,31921,31922,31923,31924,31925,31926,31927,31928,31929,31930,
-31931,31932,31933,31934,31935,31936,31937,31938,31939,31940,31941,31942,
-31943,31944,31945,31946,31947,31948,31949,31950,31951,31952,31953,31954,
-31955,31956,31957,31958,31959,31960,31961,31962,31963,31964,31965,31966,
-31967,31968,31969,31970,31971,31972,31973,31974,31975,31976,31977,31978,
-31979,31980,31981,31982,31983,31984,31985,31986,31987,31988,31989,31990,
-31991,31992,31993,31994,31995,31996,31997,31998,31999,32000,32001,32002,
-32003,32004,32005,32006,32007,32008,32009,32010,32011,32012,32013,32014,
-32015,32016,32017,32018,32019,32020,32021,32022,32023,32024,32025,32026,
-32027,32028,32029,32030,32031,32032,32033,32034,32035,32036,32037,32038,
-32039,32040,32041,32042,32043,32044,32045,32046,32047,32048,32049,32050,
-32051,32052,32053,32054,32055,32056,32057,32058,32059,32060,32061,32062,
-32063,32064,32065,32066,32067,32068,32069,32070,32071,32072,32073,32074,
-32075,32076,32077,32078,32079,32080,32081,32082,32083,32084,32085,32086,
-32087,32088,32089,32090,32091,32092,32093,32094,32095,32096,32097,32098,
-32099,32100,32101,32102,32103,32104,32105,32106,32107,32108,32109,32110,
-32111,32112,32113,32114,32115,32116,32117,32118,32119,32120,32121,32122,
-32123,32124,32125,32126,32127,32128,32129,32130,32131,32132,32133,32134,
-32135,32136,32137,32138,32139,32140,32141,32142,32143,32144,32145,32146,
-32147,32148,32149,32150,32151,32152,32153,32154,32155,32156,32157,32158,
-32159,32160,32161,32162,32163,32164,32165,32166,32167,32168,32169,32170,
-32171,32172,32173,32174,32175,32176,32177,32178,32179,32180,32181,32182,
-32183,32184,32185,32186,32187,32188,32189,32190,32191,32192,32193,32194,
-32195,32196,32197,32198,32199,32200,32201,32202,32203,32204,32205,32206,
-32207,32208,32209,32210,32211,32212,32213,32214,32215,32216,32217,32218,
-32219,32220,32221,32222,32223,32224,32225,32226,32227,32228,32229,32230,
-32231,32232,32233,32234,32235,32236,32237,32238,32239,32240,32241,32242,
-32243,32244,32245,32246,32247,32248,32249,32250,32251,32252,32253,32254,
-32255,32256,32257,32258,32259,32260,32261,32262,32263,32264,32265,32266,
-32267,32268,32269,32270,32271,32272,32273,32274,32275,32276,32277,32278,
-32279,32280,32281,32282,32283,32284,32285,32286,32287,32288,32289,32290,
-32291,32292,32293,32294,32295,32296,32297,32298,32299,32300,32301,32302,
-32303,32304,32305,32306,32307,32308,32309,32310,32311,32312,32313,32314,
-32315,32316,32317,32318,32319,32320,32321,32322,32323,32324,32325,32326,
-32327,32328,32329,32330,32331,32332,32333,32334,32335,32336,32337,32338,
-32339,32340,32341,32342,32343,32344,32345,32346,32347,32348,32349,32350,
-32351,32352,32353,32354,32355,32356,32357,32358,32359,32360,32361,32362,
-32363,32364,32365,32366,32367,32368,32369,32370,32371,32372,32373,32374,
-32375,32376,32377,32378,32379,32380,32381,32382,32383,32384,32385,32386,
-32387,32388,32389,32390,32391,32392,32393,32394,32395,32396,32397,32398,
-32399,32400,32401,32402,32403,32404,32405,32406,32407,32408,32409,32410,
-32411,32412,32413,32414,32415,32416,32417,32418,32419,32420,32421,32422,
-32423,32424,32425,32426,32427,32428,32429,32430,32431,32432,32433,32434,
-32435,32436,32437,32438,32439,32440,32441,32442,32443,32444,32445,32446,
-32447,32448,32449,32450,32451,32452,32453,32454,32455,32456,32457,32458,
-32459,32460,32461,32462,32463,32464,32465,32466,32467,32468,32469,32470,
-32471,32472,32473,32474,32475,32476,32477,32478,32479,32480,32481,32482,
-32483,32484,32485,32486,32487,32488,32489,32490,32491,32492,32493,32494,
-32495,32496,32497,32498,32499,32500,32501,32502,32503,32504,32505,32506,
-32507,32508,32509,32510,32511,32512,32513,32514,32515,32516,32517,32518,
-32519,32520,32521,32522,32523,32524,32525,32526,32527,32528,32529,32530,
-32531,32532,32533,32534,32535,32536,32537,32538,32539,32540,32541,32542,
-32543,32544,32545,32546,32547,32548,32549,32550,32551,32552,32553,32554,
-32555,32556,32557,32558,32559,32560,32561,32562,32563,32564,32565,32566,
-32567,32568,32569,32570,32571,32572,32573,32574,32575,32576,32577,32578,
-32579,32580,32581,32582,32583,32584,32585,32586,32587,32588,32589,32590,
-32591,32592,32593,32594,32595,32596,32597,32598,32599,32600,32601,32602,
-32603,32604,32605,32606,32607,32608,32609,32610,32611,32612,32613,32614,
-32615,32616,32617,32618,32619,32620,32621,32622,32623,32624,32625,32626,
-32627,32628,32629,32630,32631,32632,32633,32634,32635,32636,32637,32638,
-32639,32640,32641,32642,32643,32644,32645,32646,32647,32648,32649,32650,
-32651,32652,32653,32654,32655,32656,32657,32658,32659,32660,32661,32662,
-32663,32664,32665,32666,32667,32668,32669,32670,32671,32672,32673,32674,
-32675,32676,32677,32678,32679,32680,32681,32682,32683,32684,32685,32686,
-32687,32688,32689,32690,32691,32692,32693,32694,32695,32696,32697,32698,
-32699,32700,32701,32702,32703,32704,32705,32706,32707,32708,32709,32710,
-32711,32712,32713,32714,32715,32716,32717,32718,32719,32720,32721,32722,
-32723,32724,32725,32726,32727,32728,32729,32730,32731,32732,32733,32734,
-32735,32736,32737,32738,32739,32740,32741,32742,32743,32744,32745,32746,
-32747,32748,32749,32750,32751,32752,32753,32754,32755,32756,32757,32758,
-32759,32760,32761,32762,32763,32764,32765,32766,32767,32768L,32769L,32770L,
-32771L,32772L,32773L,32774L,32775L,32776L,32777L,32778L,32779L,32780L,
-32781L,32782L,32783L,32784L,32785L,32786L,32787L,32788L,32789L,32790L,
-32791L,32792L,32793L,32794L,32795L,32796L,32797L,32798L,32799L,32800L,
-32801L,32802L,32803L,32804L,32805L,32806L,32807L,32808L,32809L,32810L,
-32811L,32812L,32813L,32814L,32815L,32816L,32817L,32818L,32819L,32820L,
-32821L,32822L,32823L,32824L,32825L,32826L,32827L,32828L,32829L,32830L,
-32831L,32832L,32833L,32834L,32835L,32836L,32837L,32838L,32839L,32840L,
-32841L,32842L,32843L,32844L,32845L,32846L,32847L,32848L,32849L,32850L,
-32851L,32852L,32853L,32854L,32855L,32856L,32857L,32858L,32859L,32860L,
-32861L,32862L,32863L,32864L,32865L,32866L,32867L,32868L,32869L,32870L,
-32871L,32872L,32873L,32874L,32875L,32876L,32877L,32878L,32879L,32880L,
-32881L,32882L,32883L,32884L,32885L,32886L,32887L,32888L,32889L,32890L,
-32891L,32892L,32893L,32894L,32895L,32896L,32897L,32898L,32899L,32900L,
-32901L,32902L,32903L,32904L,32905L,32906L,32907L,32908L,32909L,32910L,
-32911L,32912L,32913L,32914L,32915L,32916L,32917L,32918L,32919L,32920L,
-32921L,32922L,32923L,32924L,32925L,32926L,32927L,32928L,32929L,32930L,
-32931L,32932L,32933L,32934L,32935L,32936L,32937L,32938L,32939L,32940L,
-32941L,32942L,32943L,32944L,32945L,32946L,32947L,32948L,32949L,32950L,
-32951L,32952L,32953L,32954L,32955L,32956L,32957L,32958L,32959L,32960L,
-32961L,32962L,32963L,32964L,32965L,32966L,32967L,32968L,32969L,32970L,
-32971L,32972L,32973L,32974L,32975L,32976L,32977L,32978L,32979L,32980L,
-32981L,32982L,32983L,32984L,32985L,32986L,32987L,32988L,32989L,32990L,
-32991L,32992L,32993L,32994L,32995L,32996L,32997L,32998L,32999L,33000L,
-33001L,33002L,33003L,33004L,33005L,33006L,33007L,33008L,33009L,33010L,
-33011L,33012L,33013L,33014L,33015L,33016L,33017L,33018L,33019L,33020L,
-33021L,33022L,33023L,33024L,33025L,33026L,33027L,33028L,33029L,33030L,
-33031L,33032L,33033L,33034L,33035L,33036L,33037L,33038L,33039L,33040L,
-33041L,33042L,33043L,33044L,33045L,33046L,33047L,33048L,33049L,33050L,
-33051L,33052L,33053L,33054L,33055L,33056L,33057L,33058L,33059L,33060L,
-33061L,33062L,33063L,33064L,33065L,33066L,33067L,33068L,33069L,33070L,
-33071L,33072L,33073L,33074L,33075L,33076L,33077L,33078L,33079L,33080L,
-33081L,33082L,33083L,33084L,33085L,33086L,33087L,33088L,33089L,33090L,
-33091L,33092L,33093L,33094L,33095L,33096L,33097L,33098L,33099L,33100L,
-33101L,33102L,33103L,33104L,33105L,33106L,33107L,33108L,33109L,33110L,
-33111L,33112L,33113L,33114L,33115L,33116L,33117L,33118L,33119L,33120L,
-33121L,33122L,33123L,33124L,33125L,33126L,33127L,33128L,33129L,33130L,
-33131L,33132L,33133L,33134L,33135L,33136L,33137L,33138L,33139L,33140L,
-33141L,33142L,33143L,33144L,33145L,33146L,33147L,33148L,33149L,33150L,
-33151L,33152L,33153L,33154L,33155L,33156L,33157L,33158L,33159L,33160L,
-33161L,33162L,33163L,33164L,33165L,33166L,33167L,33168L,33169L,33170L,
-33171L,33172L,33173L,33174L,33175L,33176L,33177L,33178L,33179L,33180L,
-33181L,33182L,33183L,33184L,33185L,33186L,33187L,33188L,33189L,33190L,
-33191L,33192L,33193L,33194L,33195L,33196L,33197L,33198L,33199L,33200L,
-33201L,33202L,33203L,33204L,33205L,33206L,33207L,33208L,33209L,33210L,
-33211L,33212L,33213L,33214L,33215L,33216L,33217L,33218L,33219L,33220L,
-33221L,33222L,33223L,33224L,33225L,33226L,33227L,33228L,33229L,33230L,
-33231L,33232L,33233L,33234L,33235L,33236L,33237L,33238L,33239L,33240L,
-33241L,33242L,33243L,33244L,33245L,33246L,33247L,33248L,33249L,33250L,
-33251L,33252L,33253L,33254L,33255L,33256L,33257L,33258L,33259L,33260L,
-33261L,33262L,33263L,33264L,33265L,33266L,33267L,33268L,33269L,33270L,
-33271L,33272L,33273L,33274L,33275L,33276L,33277L,33278L,33279L,33280L,
-33281L,33282L,33283L,33284L,33285L,33286L,33287L,33288L,33289L,33290L,
-33291L,33292L,33293L,33294L,33295L,33296L,33297L,33298L,33299L,33300L,
-33301L,33302L,33303L,33304L,33305L,33306L,33307L,33308L,33309L,33310L,
-33311L,33312L,33313L,33314L,33315L,33316L,33317L,33318L,33319L,33320L,
-33321L,33322L,33323L,33324L,33325L,33326L,33327L,33328L,33329L,33330L,
-33331L,33332L,33333L,33334L,33335L,33336L,33337L,33338L,33339L,33340L,
-33341L,33342L,33343L,33344L,33345L,33346L,33347L,33348L,33349L,33350L,
-33351L,33352L,33353L,33354L,33355L,33356L,33357L,33358L,33359L,33360L,
-33361L,33362L,33363L,33364L,33365L,33366L,33367L,33368L,33369L,33370L,
-33371L,33372L,33373L,33374L,33375L,33376L,33377L,33378L,33379L,33380L,
-33381L,33382L,33383L,33384L,33385L,33386L,33387L,33388L,33389L,33390L,
-33391L,33392L,33393L,33394L,33395L,33396L,33397L,33398L,33399L,33400L,
-33401L,33402L,33403L,33404L,33405L,33406L,33407L,33408L,33409L,33410L,
-33411L,33412L,33413L,33414L,33415L,33416L,33417L,33418L,33419L,33420L,
-33421L,33422L,33423L,33424L,33425L,33426L,33427L,33428L,33429L,33430L,
-33431L,33432L,33433L,33434L,33435L,33436L,33437L,33438L,33439L,33440L,
-33441L,33442L,33443L,33444L,33445L,33446L,33447L,33448L,33449L,33450L,
-33451L,33452L,33453L,33454L,33455L,33456L,33457L,33458L,33459L,33460L,
-33461L,33462L,33463L,33464L,33465L,33466L,33467L,33468L,33469L,33470L,
-33471L,33472L,33473L,33474L,33475L,33476L,33477L,33478L,33479L,33480L,
-33481L,33482L,33483L,33484L,33485L,33486L,33487L,33488L,33489L,33490L,
-33491L,33492L,33493L,33494L,33495L,33496L,33497L,33498L,33499L,33500L,
-33501L,33502L,33503L,33504L,33505L,33506L,33507L,33508L,33509L,33510L,
-33511L,33512L,33513L,33514L,33515L,33516L,33517L,33518L,33519L,33520L,
-33521L,33522L,33523L,33524L,33525L,33526L,33527L,33528L,33529L,33530L,
-33531L,33532L,33533L,33534L,33535L,33536L,33537L,33538L,33539L,33540L,
-33541L,33542L,33543L,33544L,33545L,33546L,33547L,33548L,33549L,33550L,
-33551L,33552L,33553L,33554L,33555L,33556L,33557L,33558L,33559L,33560L,
-33561L,33562L,33563L,33564L,33565L,33566L,33567L,33568L,33569L,33570L,
-33571L,33572L,33573L,33574L,33575L,33576L,33577L,33578L,33579L,33580L,
-33581L,33582L,33583L,33584L,33585L,33586L,33587L,33588L,33589L,33590L,
-33591L,33592L,33593L,33594L,33595L,33596L,33597L,33598L,33599L,33600L,
-33601L,33602L,33603L,33604L,33605L,33606L,33607L,33608L,33609L,33610L,
-33611L,33612L,33613L,33614L,33615L,33616L,33617L,33618L,33619L,33620L,
-33621L,33622L,33623L,33624L,33625L,33626L,33627L,33628L,33629L,33630L,
-33631L,33632L,33633L,33634L,33635L,33636L,33637L,33638L,33639L,33640L,
-33641L,33642L,33643L,33644L,33645L,33646L,33647L,33648L,33649L,33650L,
-33651L,33652L,33653L,33654L,33655L,33656L,33657L,33658L,33659L,33660L,
-33661L,33662L,33663L,33664L,33665L,33666L,33667L,33668L,33669L,33670L,
-33671L,33672L,33673L,33674L,33675L,33676L,33677L,33678L,33679L,33680L,
-33681L,33682L,33683L,33684L,33685L,33686L,33687L,33688L,33689L,33690L,
-33691L,33692L,33693L,33694L,33695L,33696L,33697L,33698L,33699L,33700L,
-33701L,33702L,33703L,33704L,33705L,33706L,33707L,33708L,33709L,33710L,
-33711L,33712L,33713L,33714L,33715L,33716L,33717L,33718L,33719L,33720L,
-33721L,33722L,33723L,33724L,33725L,33726L,33727L,33728L,33729L,33730L,
-33731L,33732L,33733L,33734L,33735L,33736L,33737L,33738L,33739L,33740L,
-33741L,33742L,33743L,33744L,33745L,33746L,33747L,33748L,33749L,33750L,
-33751L,33752L,33753L,33754L,33755L,33756L,33757L,33758L,33759L,33760L,
-33761L,33762L,33763L,33764L,33765L,33766L,33767L,33768L,33769L,33770L,
-33771L,33772L,33773L,33774L,33775L,33776L,33777L,33778L,33779L,33780L,
-33781L,33782L,33783L,33784L,33785L,33786L,33787L,33788L,33789L,33790L,
-33791L,33792L,33793L,33794L,33795L,33796L,33797L,33798L,33799L,33800L,
-33801L,33802L,33803L,33804L,33805L,33806L,33807L,33808L,33809L,33810L,
-33811L,33812L,33813L,33814L,33815L,33816L,33817L,33818L,33819L,33820L,
-33821L,33822L,33823L,33824L,33825L,33826L,33827L,33828L,33829L,33830L,
-33831L,33832L,33833L,33834L,33835L,33836L,33837L,33838L,33839L,33840L,
-33841L,33842L,33843L,33844L,33845L,33846L,33847L,33848L,33849L,33850L,
-33851L,33852L,33853L,33854L,33855L,33856L,33857L,33858L,33859L,33860L,
-33861L,33862L,33863L,33864L,33865L,33866L,33867L,33868L,33869L,33870L,
-33871L,33872L,33873L,33874L,33875L,33876L,33877L,33878L,33879L,33880L,
-33881L,33882L,33883L,33884L,33885L,33886L,33887L,33888L,33889L,33890L,
-33891L,33892L,33893L,33894L,33895L,33896L,33897L,33898L,33899L,33900L,
-33901L,33902L,33903L,33904L,33905L,33906L,33907L,33908L,33909L,33910L,
-33911L,33912L,33913L,33914L,33915L,33916L,33917L,33918L,33919L,33920L,
-33921L,33922L,33923L,33924L,33925L,33926L,33927L,33928L,33929L,33930L,
-33931L,33932L,33933L,33934L,33935L,33936L,33937L,33938L,33939L,33940L,
-33941L,33942L,33943L,33944L,33945L,33946L,33947L,33948L,33949L,33950L,
-33951L,33952L,33953L,33954L,33955L,33956L,33957L,33958L,33959L,33960L,
-33961L,33962L,33963L,33964L,33965L,33966L,33967L,33968L,33969L,33970L,
-33971L,33972L,33973L,33974L,33975L,33976L,33977L,33978L,33979L,33980L,
-33981L,33982L,33983L,33984L,33985L,33986L,33987L,33988L,33989L,33990L,
-33991L,33992L,33993L,33994L,33995L,33996L,33997L,33998L,33999L,34000L,
-34001L,34002L,34003L,34004L,34005L,34006L,34007L,34008L,34009L,34010L,
-34011L,34012L,34013L,34014L,34015L,34016L,34017L,34018L,34019L,34020L,
-34021L,34022L,34023L,34024L,34025L,34026L,34027L,34028L,34029L,34030L,
-34031L,34032L,34033L,34034L,34035L,34036L,34037L,34038L,34039L,34040L,
-34041L,34042L,34043L,34044L,34045L,34046L,34047L,34048L,34049L,34050L,
-34051L,34052L,34053L,34054L,34055L,34056L,34057L,34058L,34059L,34060L,
-34061L,34062L,34063L,34064L,34065L,34066L,34067L,34068L,34069L,34070L,
-34071L,34072L,34073L,34074L,34075L,34076L,34077L,34078L,34079L,34080L,
-34081L,34082L,34083L,34084L,34085L,34086L,34087L,34088L,34089L,34090L,
-34091L,34092L,34093L,34094L,34095L,34096L,34097L,34098L,34099L,34100L,
-34101L,34102L,34103L,34104L,34105L,34106L,34107L,34108L,34109L,34110L,
-34111L,34112L,34113L,34114L,34115L,34116L,34117L,34118L,34119L,34120L,
-34121L,34122L,34123L,34124L,34125L,34126L,34127L,34128L,34129L,34130L,
-34131L,34132L,34133L,34134L,34135L,34136L,34137L,34138L,34139L,34140L,
-34141L,34142L,34143L,34144L,34145L,34146L,34147L,34148L,34149L,34150L,
-34151L,34152L,34153L,34154L,34155L,34156L,34157L,34158L,34159L,34160L,
-34161L,34162L,34163L,34164L,34165L,34166L,34167L,34168L,34169L,34170L,
-34171L,34172L,34173L,34174L,34175L,34176L,34177L,34178L,34179L,34180L,
-34181L,34182L,34183L,34184L,34185L,34186L,34187L,34188L,34189L,34190L,
-34191L,34192L,34193L,34194L,34195L,34196L,34197L,34198L,34199L,34200L,
-34201L,34202L,34203L,34204L,34205L,34206L,34207L,34208L,34209L,34210L,
-34211L,34212L,34213L,34214L,34215L,34216L,34217L,34218L,34219L,34220L,
-34221L,34222L,34223L,34224L,34225L,34226L,34227L,34228L,34229L,34230L,
-34231L,34232L,34233L,34234L,34235L,34236L,34237L,34238L,34239L,34240L,
-34241L,34242L,34243L,34244L,34245L,34246L,34247L,34248L,34249L,34250L,
-34251L,34252L,34253L,34254L,34255L,34256L,34257L,34258L,34259L,34260L,
-34261L,34262L,34263L,34264L,34265L,34266L,34267L,34268L,34269L,34270L,
-34271L,34272L,34273L,34274L,34275L,34276L,34277L,34278L,34279L,34280L,
-34281L,34282L,34283L,34284L,34285L,34286L,34287L,34288L,34289L,34290L,
-34291L,34292L,34293L,34294L,34295L,34296L,34297L,34298L,34299L,34300L,
-34301L,34302L,34303L,34304L,34305L,34306L,34307L,34308L,34309L,34310L,
-34311L,34312L,34313L,34314L,34315L,34316L,34317L,34318L,34319L,34320L,
-34321L,34322L,34323L,34324L,34325L,34326L,34327L,34328L,34329L,34330L,
-34331L,34332L,34333L,34334L,34335L,34336L,34337L,34338L,34339L,34340L,
-34341L,34342L,34343L,34344L,34345L,34346L,34347L,34348L,34349L,34350L,
-34351L,34352L,34353L,34354L,34355L,34356L,34357L,34358L,34359L,34360L,
-34361L,34362L,34363L,34364L,34365L,34366L,34367L,34368L,34369L,34370L,
-34371L,34372L,34373L,34374L,34375L,34376L,34377L,34378L,34379L,34380L,
-34381L,34382L,34383L,34384L,34385L,34386L,34387L,34388L,34389L,34390L,
-34391L,34392L,34393L,34394L,34395L,34396L,34397L,34398L,34399L,34400L,
-34401L,34402L,34403L,34404L,34405L,34406L,34407L,34408L,34409L,34410L,
-34411L,34412L,34413L,34414L,34415L,34416L,34417L,34418L,34419L,34420L,
-34421L,34422L,34423L,34424L,34425L,34426L,34427L,34428L,34429L,34430L,
-34431L,34432L,34433L,34434L,34435L,34436L,34437L,34438L,34439L,34440L,
-34441L,34442L,34443L,34444L,34445L,34446L,34447L,34448L,34449L,34450L,
-34451L,34452L,34453L,34454L,34455L,34456L,34457L,34458L,34459L,34460L,
-34461L,34462L,34463L,34464L,34465L,34466L,34467L,34468L,34469L,34470L,
-34471L,34472L,34473L,34474L,34475L,34476L,34477L,34478L,34479L,34480L,
-34481L,34482L,34483L,34484L,34485L,34486L,34487L,34488L,34489L,34490L,
-34491L,34492L,34493L,34494L,34495L,34496L,34497L,34498L,34499L,34500L,
-34501L,34502L,34503L,34504L,34505L,34506L,34507L,34508L,34509L,34510L,
-34511L,34512L,34513L,34514L,34515L,34516L,34517L,34518L,34519L,34520L,
-34521L,34522L,34523L,34524L,34525L,34526L,34527L,34528L,34529L,34530L,
-34531L,34532L,34533L,34534L,34535L,34536L,34537L,34538L,34539L,34540L,
-34541L,34542L,34543L,34544L,34545L,34546L,34547L,34548L,34549L,34550L,
-34551L,34552L,34553L,34554L,34555L,34556L,34557L,34558L,34559L,34560L,
-34561L,34562L,34563L,34564L,34565L,34566L,34567L,34568L,34569L,34570L,
-34571L,34572L,34573L,34574L,34575L,34576L,34577L,34578L,34579L,34580L,
-34581L,34582L,34583L,34584L,34585L,34586L,34587L,34588L,34589L,34590L,
-34591L,34592L,34593L,34594L,34595L,34596L,34597L,34598L,34599L,34600L,
-34601L,34602L,34603L,34604L,34605L,34606L,34607L,34608L,34609L,34610L,
-34611L,34612L,34613L,34614L,34615L,34616L,34617L,34618L,34619L,34620L,
-34621L,34622L,34623L,34624L,34625L,34626L,34627L,34628L,34629L,34630L,
-34631L,34632L,34633L,34634L,34635L,34636L,34637L,34638L,34639L,34640L,
-34641L,34642L,34643L,34644L,34645L,34646L,34647L,34648L,34649L,34650L,
-34651L,34652L,34653L,34654L,34655L,34656L,34657L,34658L,34659L,34660L,
-34661L,34662L,34663L,34664L,34665L,34666L,34667L,34668L,34669L,34670L,
-34671L,34672L,34673L,34674L,34675L,34676L,34677L,34678L,34679L,34680L,
-34681L,34682L,34683L,34684L,34685L,34686L,34687L,34688L,34689L,34690L,
-34691L,34692L,34693L,34694L,34695L,34696L,34697L,34698L,34699L,34700L,
-34701L,34702L,34703L,34704L,34705L,34706L,34707L,34708L,34709L,34710L,
-34711L,34712L,34713L,34714L,34715L,34716L,34717L,34718L,34719L,34720L,
-34721L,34722L,34723L,34724L,34725L,34726L,34727L,34728L,34729L,34730L,
-34731L,34732L,34733L,34734L,34735L,34736L,34737L,34738L,34739L,34740L,
-34741L,34742L,34743L,34744L,34745L,34746L,34747L,34748L,34749L,34750L,
-34751L,34752L,34753L,34754L,34755L,34756L,34757L,34758L,34759L,34760L,
-34761L,34762L,34763L,34764L,34765L,34766L,34767L,34768L,34769L,34770L,
-34771L,34772L,34773L,34774L,34775L,34776L,34777L,34778L,34779L,34780L,
-34781L,34782L,34783L,34784L,34785L,34786L,34787L,34788L,34789L,34790L,
-34791L,34792L,34793L,34794L,34795L,34796L,34797L,34798L,34799L,34800L,
-34801L,34802L,34803L,34804L,34805L,34806L,34807L,34808L,34809L,34810L,
-34811L,34812L,34813L,34814L,34815L,34816L,34817L,34818L,34819L,34820L,
-34821L,34822L,34823L,34824L,34825L,34826L,34827L,34828L,34829L,34830L,
-34831L,34832L,34833L,34834L,34835L,34836L,34837L,34838L,34839L,34840L,
-34841L,34842L,34843L,34844L,34845L,34846L,34847L,34848L,34849L,34850L,
-34851L,34852L,34853L,34854L,34855L,34856L,34857L,34858L,34859L,34860L,
-34861L,34862L,34863L,34864L,34865L,34866L,34867L,34868L,34869L,34870L,
-34871L,34872L,34873L,34874L,34875L,34876L,34877L,34878L,34879L,34880L,
-34881L,34882L,34883L,34884L,34885L,34886L,34887L,34888L,34889L,34890L,
-34891L,34892L,34893L,34894L,34895L,34896L,34897L,34898L,34899L,34900L,
-34901L,34902L,34903L,34904L,34905L,34906L,34907L,34908L,34909L,34910L,
-34911L,34912L,34913L,34914L,34915L,34916L,34917L,34918L,34919L,34920L,
-34921L,34922L,34923L,34924L,34925L,34926L,34927L,34928L,34929L,34930L,
-34931L,34932L,34933L,34934L,34935L,34936L,34937L,34938L,34939L,34940L,
-34941L,34942L,34943L,34944L,34945L,34946L,34947L,34948L,34949L,34950L,
-34951L,34952L,34953L,34954L,34955L,34956L,34957L,34958L,34959L,34960L,
-34961L,34962L,34963L,34964L,34965L,34966L,34967L,34968L,34969L,34970L,
-34971L,34972L,34973L,34974L,34975L,34976L,34977L,34978L,34979L,34980L,
-34981L,34982L,34983L,34984L,34985L,34986L,34987L,34988L,34989L,34990L,
-34991L,34992L,34993L,34994L,34995L,34996L,34997L,34998L,34999L,35000L,
-35001L,35002L,35003L,35004L,35005L,35006L,35007L,35008L,35009L,35010L,
-35011L,35012L,35013L,35014L,35015L,35016L,35017L,35018L,35019L,35020L,
-35021L,35022L,35023L,35024L,35025L,35026L,35027L,35028L,35029L,35030L,
-35031L,35032L,35033L,35034L,35035L,35036L,35037L,35038L,35039L,35040L,
-35041L,35042L,35043L,35044L,35045L,35046L,35047L,35048L,35049L,35050L,
-35051L,35052L,35053L,35054L,35055L,35056L,35057L,35058L,35059L,35060L,
-35061L,35062L,35063L,35064L,35065L,35066L,35067L,35068L,35069L,35070L,
-35071L,35072L,35073L,35074L,35075L,35076L,35077L,35078L,35079L,35080L,
-35081L,35082L,35083L,35084L,35085L,35086L,35087L,35088L,35089L,35090L,
-35091L,35092L,35093L,35094L,35095L,35096L,35097L,35098L,35099L,35100L,
-35101L,35102L,35103L,35104L,35105L,35106L,35107L,35108L,35109L,35110L,
-35111L,35112L,35113L,35114L,35115L,35116L,35117L,35118L,35119L,35120L,
-35121L,35122L,35123L,35124L,35125L,35126L,35127L,35128L,35129L,35130L,
-35131L,35132L,35133L,35134L,35135L,35136L,35137L,35138L,35139L,35140L,
-35141L,35142L,35143L,35144L,35145L,35146L,35147L,35148L,35149L,35150L,
-35151L,35152L,35153L,35154L,35155L,35156L,35157L,35158L,35159L,35160L,
-35161L,35162L,35163L,35164L,35165L,35166L,35167L,35168L,35169L,35170L,
-35171L,35172L,35173L,35174L,35175L,35176L,35177L,35178L,35179L,35180L,
-35181L,35182L,35183L,35184L,35185L,35186L,35187L,35188L,35189L,35190L,
-35191L,35192L,35193L,35194L,35195L,35196L,35197L,35198L,35199L,35200L,
-35201L,35202L,35203L,35204L,35205L,35206L,35207L,35208L,35209L,35210L,
-35211L,35212L,35213L,35214L,35215L,35216L,35217L,35218L,35219L,35220L,
-35221L,35222L,35223L,35224L,35225L,35226L,35227L,35228L,35229L,35230L,
-35231L,35232L,35233L,35234L,35235L,35236L,35237L,35238L,35239L,35240L,
-35241L,35242L,35243L,35244L,35245L,35246L,35247L,35248L,35249L,35250L,
-35251L,35252L,35253L,35254L,35255L,35256L,35257L,35258L,35259L,35260L,
-35261L,35262L,35263L,35264L,35265L,35266L,35267L,35268L,35269L,35270L,
-35271L,35272L,35273L,35274L,35275L,35276L,35277L,35278L,35279L,35280L,
-35281L,35282L,35283L,35284L,35285L,35286L,35287L,35288L,35289L,35290L,
-35291L,35292L,35293L,35294L,35295L,35296L,35297L,35298L,35299L,35300L,
-35301L,35302L,35303L,35304L,35305L,35306L,35307L,35308L,35309L,35310L,
-35311L,35312L,35313L,35314L,35315L,35316L,35317L,35318L,35319L,35320L,
-35321L,35322L,35323L,35324L,35325L,35326L,35327L,35328L,35329L,35330L,
-35331L,35332L,35333L,35334L,35335L,35336L,35337L,35338L,35339L,35340L,
-35341L,35342L,35343L,35344L,35345L,35346L,35347L,35348L,35349L,35350L,
-35351L,35352L,35353L,35354L,35355L,35356L,35357L,35358L,35359L,35360L,
-35361L,35362L,35363L,35364L,35365L,35366L,35367L,35368L,35369L,35370L,
-35371L,35372L,35373L,35374L,35375L,35376L,35377L,35378L,35379L,35380L,
-35381L,35382L,35383L,35384L,35385L,35386L,35387L,35388L,35389L,35390L,
-35391L,35392L,35393L,35394L,35395L,35396L,35397L,35398L,35399L,35400L,
-35401L,35402L,35403L,35404L,35405L,35406L,35407L,35408L,35409L,35410L,
-35411L,35412L,35413L,35414L,35415L,35416L,35417L,35418L,35419L,35420L,
-35421L,35422L,35423L,35424L,35425L,35426L,35427L,35428L,35429L,35430L,
-35431L,35432L,35433L,35434L,35435L,35436L,35437L,35438L,35439L,35440L,
-35441L,35442L,35443L,35444L,35445L,35446L,35447L,35448L,35449L,35450L,
-35451L,35452L,35453L,35454L,35455L,35456L,35457L,35458L,35459L,35460L,
-35461L,35462L,35463L,35464L,35465L,35466L,35467L,35468L,35469L,35470L,
-35471L,35472L,35473L,35474L,35475L,35476L,35477L,35478L,35479L,35480L,
-35481L,35482L,35483L,35484L,35485L,35486L,35487L,35488L,35489L,35490L,
-35491L,35492L,35493L,35494L,35495L,35496L,35497L,35498L,35499L,35500L,
-35501L,35502L,35503L,35504L,35505L,35506L,35507L,35508L,35509L,35510L,
-35511L,35512L,35513L,35514L,35515L,35516L,35517L,35518L,35519L,35520L,
-35521L,35522L,35523L,35524L,35525L,35526L,35527L,35528L,35529L,35530L,
-35531L,35532L,35533L,35534L,35535L,35536L,35537L,35538L,35539L,35540L,
-35541L,35542L,35543L,35544L,35545L,35546L,35547L,35548L,35549L,35550L,
-35551L,35552L,35553L,35554L,35555L,35556L,35557L,35558L,35559L,35560L,
-35561L,35562L,35563L,35564L,35565L,35566L,35567L,35568L,35569L,35570L,
-35571L,35572L,35573L,35574L,35575L,35576L,35577L,35578L,35579L,35580L,
-35581L,35582L,35583L,35584L,35585L,35586L,35587L,35588L,35589L,35590L,
-35591L,35592L,35593L,35594L,35595L,35596L,35597L,35598L,35599L,35600L,
-35601L,35602L,35603L,35604L,35605L,35606L,35607L,35608L,35609L,35610L,
-35611L,35612L,35613L,35614L,35615L,35616L,35617L,35618L,35619L,35620L,
-35621L,35622L,35623L,35624L,35625L,35626L,35627L,35628L,35629L,35630L,
-35631L,35632L,35633L,35634L,35635L,35636L,35637L,35638L,35639L,35640L,
-35641L,35642L,35643L,35644L,35645L,35646L,35647L,35648L,35649L,35650L,
-35651L,35652L,35653L,35654L,35655L,35656L,35657L,35658L,35659L,35660L,
-35661L,35662L,35663L,35664L,35665L,35666L,35667L,35668L,35669L,35670L,
-35671L,35672L,35673L,35674L,35675L,35676L,35677L,35678L,35679L,35680L,
-35681L,35682L,35683L,35684L,35685L,35686L,35687L,35688L,35689L,35690L,
-35691L,35692L,35693L,35694L,35695L,35696L,35697L,35698L,35699L,35700L,
-35701L,35702L,35703L,35704L,35705L,35706L,35707L,35708L,35709L,35710L,
-35711L,35712L,35713L,35714L,35715L,35716L,35717L,35718L,35719L,35720L,
-35721L,35722L,35723L,35724L,35725L,35726L,35727L,35728L,35729L,35730L,
-35731L,35732L,35733L,35734L,35735L,35736L,35737L,35738L,35739L,35740L,
-35741L,35742L,35743L,35744L,35745L,35746L,35747L,35748L,35749L,35750L,
-35751L,35752L,35753L,35754L,35755L,35756L,35757L,35758L,35759L,35760L,
-35761L,35762L,35763L,35764L,35765L,35766L,35767L,35768L,35769L,35770L,
-35771L,35772L,35773L,35774L,35775L,35776L,35777L,35778L,35779L,35780L,
-35781L,35782L,35783L,35784L,35785L,35786L,35787L,35788L,35789L,35790L,
-35791L,35792L,35793L,35794L,35795L,35796L,35797L,35798L,35799L,35800L,
-35801L,35802L,35803L,35804L,35805L,35806L,35807L,35808L,35809L,35810L,
-35811L,35812L,35813L,35814L,35815L,35816L,35817L,35818L,35819L,35820L,
-35821L,35822L,35823L,35824L,35825L,35826L,35827L,35828L,35829L,35830L,
-35831L,35832L,35833L,35834L,35835L,35836L,35837L,35838L,35839L,35840L,
-35841L,35842L,35843L,35844L,35845L,35846L,35847L,35848L,35849L,35850L,
-35851L,35852L,35853L,35854L,35855L,35856L,35857L,35858L,35859L,35860L,
-35861L,35862L,35863L,35864L,35865L,35866L,35867L,35868L,35869L,35870L,
-35871L,35872L,35873L,35874L,35875L,35876L,35877L,35878L,35879L,35880L,
-35881L,35882L,35883L,35884L,35885L,35886L,35887L,35888L,35889L,35890L,
-35891L,35892L,35893L,35894L,35895L,35896L,35897L,35898L,35899L,35900L,
-35901L,35902L,35903L,35904L,35905L,35906L,35907L,35908L,35909L,35910L,
-35911L,35912L,35913L,35914L,35915L,35916L,35917L,35918L,35919L,35920L,
-35921L,35922L,35923L,35924L,35925L,35926L,35927L,35928L,35929L,35930L,
-35931L,35932L,35933L,35934L,35935L,35936L,35937L,35938L,35939L,35940L,
-35941L,35942L,35943L,35944L,35945L,35946L,35947L,35948L,35949L,35950L,
-35951L,35952L,35953L,35954L,35955L,35956L,35957L,35958L,35959L,35960L,
-35961L,35962L,35963L,35964L,35965L,35966L,35967L,35968L,35969L,35970L,
-35971L,35972L,35973L,35974L,35975L,35976L,35977L,35978L,35979L,35980L,
-35981L,35982L,35983L,35984L,35985L,35986L,35987L,35988L,35989L,35990L,
-35991L,35992L,35993L,35994L,35995L,35996L,35997L,35998L,35999L,36000L,
-36001L,36002L,36003L,36004L,36005L,36006L,36007L,36008L,36009L,36010L,
-36011L,36012L,36013L,36014L,36015L,36016L,36017L,36018L,36019L,36020L,
-36021L,36022L,36023L,36024L,36025L,36026L,36027L,36028L,36029L,36030L,
-36031L,36032L,36033L,36034L,36035L,36036L,36037L,36038L,36039L,36040L,
-36041L,36042L,36043L,36044L,36045L,36046L,36047L,36048L,36049L,36050L,
-36051L,36052L,36053L,36054L,36055L,36056L,36057L,36058L,36059L,36060L,
-36061L,36062L,36063L,36064L,36065L,36066L,36067L,36068L,36069L,36070L,
-36071L,36072L,36073L,36074L,36075L,36076L,36077L,36078L,36079L,36080L,
-36081L,36082L,36083L,36084L,36085L,36086L,36087L,36088L,36089L,36090L,
-36091L,36092L,36093L,36094L,36095L,36096L,36097L,36098L,36099L,36100L,
-36101L,36102L,36103L,36104L,36105L,36106L,36107L,36108L,36109L,36110L,
-36111L,36112L,36113L,36114L,36115L,36116L,36117L,36118L,36119L,36120L,
-36121L,36122L,36123L,36124L,36125L,36126L,36127L,36128L,36129L,36130L,
-36131L,36132L,36133L,36134L,36135L,36136L,36137L,36138L,36139L,36140L,
-36141L,36142L,36143L,36144L,36145L,36146L,36147L,36148L,36149L,36150L,
-36151L,36152L,36153L,36154L,36155L,36156L,36157L,36158L,36159L,36160L,
-36161L,36162L,36163L,36164L,36165L,36166L,36167L,36168L,36169L,36170L,
-36171L,36172L,36173L,36174L,36175L,36176L,36177L,36178L,36179L,36180L,
-36181L,36182L,36183L,36184L,36185L,36186L,36187L,36188L,36189L,36190L,
-36191L,36192L,36193L,36194L,36195L,36196L,36197L,36198L,36199L,36200L,
-36201L,36202L,36203L,36204L,36205L,36206L,36207L,36208L,36209L,36210L,
-36211L,36212L,36213L,36214L,36215L,36216L,36217L,36218L,36219L,36220L,
-36221L,36222L,36223L,36224L,36225L,36226L,36227L,36228L,36229L,36230L,
-36231L,36232L,36233L,36234L,36235L,36236L,36237L,36238L,36239L,36240L,
-36241L,36242L,36243L,36244L,36245L,36246L,36247L,36248L,36249L,36250L,
-36251L,36252L,36253L,36254L,36255L,36256L,36257L,36258L,36259L,36260L,
-36261L,36262L,36263L,36264L,36265L,36266L,36267L,36268L,36269L,36270L,
-36271L,36272L,36273L,36274L,36275L,36276L,36277L,36278L,36279L,36280L,
-36281L,36282L,36283L,36284L,36285L,36286L,36287L,36288L,36289L,36290L,
-36291L,36292L,36293L,36294L,36295L,36296L,36297L,36298L,36299L,36300L,
-36301L,36302L,36303L,36304L,36305L,36306L,36307L,36308L,36309L,36310L,
-36311L,36312L,36313L,36314L,36315L,36316L,36317L,36318L,36319L,36320L,
-36321L,36322L,36323L,36324L,36325L,36326L,36327L,36328L,36329L,36330L,
-36331L,36332L,36333L,36334L,36335L,36336L,36337L,36338L,36339L,36340L,
-36341L,36342L,36343L,36344L,36345L,36346L,36347L,36348L,36349L,36350L,
-36351L,36352L,36353L,36354L,36355L,36356L,36357L,36358L,36359L,36360L,
-36361L,36362L,36363L,36364L,36365L,36366L,36367L,36368L,36369L,36370L,
-36371L,36372L,36373L,36374L,36375L,36376L,36377L,36378L,36379L,36380L,
-36381L,36382L,36383L,36384L,36385L,36386L,36387L,36388L,36389L,36390L,
-36391L,36392L,36393L,36394L,36395L,36396L,36397L,36398L,36399L,36400L,
-36401L,36402L,36403L,36404L,36405L,36406L,36407L,36408L,36409L,36410L,
-36411L,36412L,36413L,36414L,36415L,36416L,36417L,36418L,36419L,36420L,
-36421L,36422L,36423L,36424L,36425L,36426L,36427L,36428L,36429L,36430L,
-36431L,36432L,36433L,36434L,36435L,36436L,36437L,36438L,36439L,36440L,
-36441L,36442L,36443L,36444L,36445L,36446L,36447L,36448L,36449L,36450L,
-36451L,36452L,36453L,36454L,36455L,36456L,36457L,36458L,36459L,36460L,
-36461L,36462L,36463L,36464L,36465L,36466L,36467L,36468L,36469L,36470L,
-36471L,36472L,36473L,36474L,36475L,36476L,36477L,36478L,36479L,36480L,
-36481L,36482L,36483L,36484L,36485L,36486L,36487L,36488L,36489L,36490L,
-36491L,36492L,36493L,36494L,36495L,36496L,36497L,36498L,36499L,36500L,
-36501L,36502L,36503L,36504L,36505L,36506L,36507L,36508L,36509L,36510L,
-36511L,36512L,36513L,36514L,36515L,36516L,36517L,36518L,36519L,36520L,
-36521L,36522L,36523L,36524L,36525L,36526L,36527L,36528L,36529L,36530L,
-36531L,36532L,36533L,36534L,36535L,36536L,36537L,36538L,36539L,36540L,
-36541L,36542L,36543L,36544L,36545L,36546L,36547L,36548L,36549L,36550L,
-36551L,36552L,36553L,36554L,36555L,36556L,36557L,36558L,36559L,36560L,
-36561L,36562L,36563L,36564L,36565L,36566L,36567L,36568L,36569L,36570L,
-36571L,36572L,36573L,36574L,36575L,36576L,36577L,36578L,36579L,36580L,
-36581L,36582L,36583L,36584L,36585L,36586L,36587L,36588L,36589L,36590L,
-36591L,36592L,36593L,36594L,36595L,36596L,36597L,36598L,36599L,36600L,
-36601L,36602L,36603L,36604L,36605L,36606L,36607L,36608L,36609L,36610L,
-36611L,36612L,36613L,36614L,36615L,36616L,36617L,36618L,36619L,36620L,
-36621L,36622L,36623L,36624L,36625L,36626L,36627L,36628L,36629L,36630L,
-36631L,36632L,36633L,36634L,36635L,36636L,36637L,36638L,36639L,36640L,
-36641L,36642L,36643L,36644L,36645L,36646L,36647L,36648L,36649L,36650L,
-36651L,36652L,36653L,36654L,36655L,36656L,36657L,36658L,36659L,36660L,
-36661L,36662L,36663L,36664L,36665L,36666L,36667L,36668L,36669L,36670L,
-36671L,36672L,36673L,36674L,36675L,36676L,36677L,36678L,36679L,36680L,
-36681L,36682L,36683L,36684L,36685L,36686L,36687L,36688L,36689L,36690L,
-36691L,36692L,36693L,36694L,36695L,36696L,36697L,36698L,36699L,36700L,
-36701L,36702L,36703L,36704L,36705L,36706L,36707L,36708L,36709L,36710L,
-36711L,36712L,36713L,36714L,36715L,36716L,36717L,36718L,36719L,36720L,
-36721L,36722L,36723L,36724L,36725L,36726L,36727L,36728L,36729L,36730L,
-36731L,36732L,36733L,36734L,36735L,36736L,36737L,36738L,36739L,36740L,
-36741L,36742L,36743L,36744L,36745L,36746L,36747L,36748L,36749L,36750L,
-36751L,36752L,36753L,36754L,36755L,36756L,36757L,36758L,36759L,36760L,
-36761L,36762L,36763L,36764L,36765L,36766L,36767L,36768L,36769L,36770L,
-36771L,36772L,36773L,36774L,36775L,36776L,36777L,36778L,36779L,36780L,
-36781L,36782L,36783L,36784L,36785L,36786L,36787L,36788L,36789L,36790L,
-36791L,36792L,36793L,36794L,36795L,36796L,36797L,36798L,36799L,36800L,
-36801L,36802L,36803L,36804L,36805L,36806L,36807L,36808L,36809L,36810L,
-36811L,36812L,36813L,36814L,36815L,36816L,36817L,36818L,36819L,36820L,
-36821L,36822L,36823L,36824L,36825L,36826L,36827L,36828L,36829L,36830L,
-36831L,36832L,36833L,36834L,36835L,36836L,36837L,36838L,36839L,36840L,
-36841L,36842L,36843L,36844L,36845L,36846L,36847L,36848L,36849L,36850L,
-36851L,36852L,36853L,36854L,36855L,36856L,36857L,36858L,36859L,36860L,
-36861L,36862L,36863L,36864L,36865L,36866L,36867L,36868L,36869L,36870L,
-36871L,36872L,36873L,36874L,36875L,36876L,36877L,36878L,36879L,36880L,
-36881L,36882L,36883L,36884L,36885L,36886L,36887L,36888L,36889L,36890L,
-36891L,36892L,36893L,36894L,36895L,36896L,36897L,36898L,36899L,36900L,
-36901L,36902L,36903L,36904L,36905L,36906L,36907L,36908L,36909L,36910L,
-36911L,36912L,36913L,36914L,36915L,36916L,36917L,36918L,36919L,36920L,
-36921L,36922L,36923L,36924L,36925L,36926L,36927L,36928L,36929L,36930L,
-36931L,36932L,36933L,36934L,36935L,36936L,36937L,36938L,36939L,36940L,
-36941L,36942L,36943L,36944L,36945L,36946L,36947L,36948L,36949L,36950L,
-36951L,36952L,36953L,36954L,36955L,36956L,36957L,36958L,36959L,36960L,
-36961L,36962L,36963L,36964L,36965L,36966L,36967L,36968L,36969L,36970L,
-36971L,36972L,36973L,36974L,36975L,36976L,36977L,36978L,36979L,36980L,
-36981L,36982L,36983L,36984L,36985L,36986L,36987L,36988L,36989L,36990L,
-36991L,36992L,36993L,36994L,36995L,36996L,36997L,36998L,36999L,37000L,
-37001L,37002L,37003L,37004L,37005L,37006L,37007L,37008L,37009L,37010L,
-37011L,37012L,37013L,37014L,37015L,37016L,37017L,37018L,37019L,37020L,
-37021L,37022L,37023L,37024L,37025L,37026L,37027L,37028L,37029L,37030L,
-37031L,37032L,37033L,37034L,37035L,37036L,37037L,37038L,37039L,37040L,
-37041L,37042L,37043L,37044L,37045L,37046L,37047L,37048L,37049L,37050L,
-37051L,37052L,37053L,37054L,37055L,37056L,37057L,37058L,37059L,37060L,
-37061L,37062L,37063L,37064L,37065L,37066L,37067L,37068L,37069L,37070L,
-37071L,37072L,37073L,37074L,37075L,37076L,37077L,37078L,37079L,37080L,
-37081L,37082L,37083L,37084L,37085L,37086L,37087L,37088L,37089L,37090L,
-37091L,37092L,37093L,37094L,37095L,37096L,37097L,37098L,37099L,37100L,
-37101L,37102L,37103L,37104L,37105L,37106L,37107L,37108L,37109L,37110L,
-37111L,37112L,37113L,37114L,37115L,37116L,37117L,37118L,37119L,37120L,
-37121L,37122L,37123L,37124L,37125L,37126L,37127L,37128L,37129L,37130L,
-37131L,37132L,37133L,37134L,37135L,37136L,37137L,37138L,37139L,37140L,
-37141L,37142L,37143L,37144L,37145L,37146L,37147L,37148L,37149L,37150L,
-37151L,37152L,37153L,37154L,37155L,37156L,37157L,37158L,37159L,37160L,
-37161L,37162L,37163L,37164L,37165L,37166L,37167L,37168L,37169L,37170L,
-37171L,37172L,37173L,37174L,37175L,37176L,37177L,37178L,37179L,37180L,
-37181L,37182L,37183L,37184L,37185L,37186L,37187L,37188L,37189L,37190L,
-37191L,37192L,37193L,37194L,37195L,37196L,37197L,37198L,37199L,37200L,
-37201L,37202L,37203L,37204L,37205L,37206L,37207L,37208L,37209L,37210L,
-37211L,37212L,37213L,37214L,37215L,37216L,37217L,37218L,37219L,37220L,
-37221L,37222L,37223L,37224L,37225L,37226L,37227L,37228L,37229L,37230L,
-37231L,37232L,37233L,37234L,37235L,37236L,37237L,37238L,37239L,37240L,
-37241L,37242L,37243L,37244L,37245L,37246L,37247L,37248L,37249L,37250L,
-37251L,37252L,37253L,37254L,37255L,37256L,37257L,37258L,37259L,37260L,
-37261L,37262L,37263L,37264L,37265L,37266L,37267L,37268L,37269L,37270L,
-37271L,37272L,37273L,37274L,37275L,37276L,37277L,37278L,37279L,37280L,
-37281L,37282L,37283L,37284L,37285L,37286L,37287L,37288L,37289L,37290L,
-37291L,37292L,37293L,37294L,37295L,37296L,37297L,37298L,37299L,37300L,
-37301L,37302L,37303L,37304L,37305L,37306L,37307L,37308L,37309L,37310L,
-37311L,37312L,37313L,37314L,37315L,37316L,37317L,37318L,37319L,37320L,
-37321L,37322L,37323L,37324L,37325L,37326L,37327L,37328L,37329L,37330L,
-37331L,37332L,37333L,37334L,37335L,37336L,37337L,37338L,37339L,37340L,
-37341L,37342L,37343L,37344L,37345L,37346L,37347L,37348L,37349L,37350L,
-37351L,37352L,37353L,37354L,37355L,37356L,37357L,37358L,37359L,37360L,
-37361L,37362L,37363L,37364L,37365L,37366L,37367L,37368L,37369L,37370L,
-37371L,37372L,37373L,37374L,37375L,37376L,37377L,37378L,37379L,37380L,
-37381L,37382L,37383L,37384L,37385L,37386L,37387L,37388L,37389L,37390L,
-37391L,37392L,37393L,37394L,37395L,37396L,37397L,37398L,37399L,37400L,
-37401L,37402L,37403L,37404L,37405L,37406L,37407L,37408L,37409L,37410L,
-37411L,37412L,37413L,37414L,37415L,37416L,37417L,37418L,37419L,37420L,
-37421L,37422L,37423L,37424L,37425L,37426L,37427L,37428L,37429L,37430L,
-37431L,37432L,37433L,37434L,37435L,37436L,37437L,37438L,37439L,37440L,
-37441L,37442L,37443L,37444L,37445L,37446L,37447L,37448L,37449L,37450L,
-37451L,37452L,37453L,37454L,37455L,37456L,37457L,37458L,37459L,37460L,
-37461L,37462L,37463L,37464L,37465L,37466L,37467L,37468L,37469L,37470L,
-37471L,37472L,37473L,37474L,37475L,37476L,37477L,37478L,37479L,37480L,
-37481L,37482L,37483L,37484L,37485L,37486L,37487L,37488L,37489L,37490L,
-37491L,37492L,37493L,37494L,37495L,37496L,37497L,37498L,37499L,37500L,
-37501L,37502L,37503L,37504L,37505L,37506L,37507L,37508L,37509L,37510L,
-37511L,37512L,37513L,37514L,37515L,37516L,37517L,37518L,37519L,37520L,
-37521L,37522L,37523L,37524L,37525L,37526L,37527L,37528L,37529L,37530L,
-37531L,37532L,37533L,37534L,37535L,37536L,37537L,37538L,37539L,37540L,
-37541L,37542L,37543L,37544L,37545L,37546L,37547L,37548L,37549L,37550L,
-37551L,37552L,37553L,37554L,37555L,37556L,37557L,37558L,37559L,37560L,
-37561L,37562L,37563L,37564L,37565L,37566L,37567L,37568L,37569L,37570L,
-37571L,37572L,37573L,37574L,37575L,37576L,37577L,37578L,37579L,37580L,
-37581L,37582L,37583L,37584L,37585L,37586L,37587L,37588L,37589L,37590L,
-37591L,37592L,37593L,37594L,37595L,37596L,37597L,37598L,37599L,37600L,
-37601L,37602L,37603L,37604L,37605L,37606L,37607L,37608L,37609L,37610L,
-37611L,37612L,37613L,37614L,37615L,37616L,37617L,37618L,37619L,37620L,
-37621L,37622L,37623L,37624L,37625L,37626L,37627L,37628L,37629L,37630L,
-37631L,37632L,37633L,37634L,37635L,37636L,37637L,37638L,37639L,37640L,
-37641L,37642L,37643L,37644L,37645L,37646L,37647L,37648L,37649L,37650L,
-37651L,37652L,37653L,37654L,37655L,37656L,37657L,37658L,37659L,37660L,
-37661L,37662L,37663L,37664L,37665L,37666L,37667L,37668L,37669L,37670L,
-37671L,37672L,37673L,37674L,37675L,37676L,37677L,37678L,37679L,37680L,
-37681L,37682L,37683L,37684L,37685L,37686L,37687L,37688L,37689L,37690L,
-37691L,37692L,37693L,37694L,37695L,37696L,37697L,37698L,37699L,37700L,
-37701L,37702L,37703L,37704L,37705L,37706L,37707L,37708L,37709L,37710L,
-37711L,37712L,37713L,37714L,37715L,37716L,37717L,37718L,37719L,37720L,
-37721L,37722L,37723L,37724L,37725L,37726L,37727L,37728L,37729L,37730L,
-37731L,37732L,37733L,37734L,37735L,37736L,37737L,37738L,37739L,37740L,
-37741L,37742L,37743L,37744L,37745L,37746L,37747L,37748L,37749L,37750L,
-37751L,37752L,37753L,37754L,37755L,37756L,37757L,37758L,37759L,37760L,
-37761L,37762L,37763L,37764L,37765L,37766L,37767L,37768L,37769L,37770L,
-37771L,37772L,37773L,37774L,37775L,37776L,37777L,37778L,37779L,37780L,
-37781L,37782L,37783L,37784L,37785L,37786L,37787L,37788L,37789L,37790L,
-37791L,37792L,37793L,37794L,37795L,37796L,37797L,37798L,37799L,37800L,
-37801L,37802L,37803L,37804L,37805L,37806L,37807L,37808L,37809L,37810L,
-37811L,37812L,37813L,37814L,37815L,37816L,37817L,37818L,37819L,37820L,
-37821L,37822L,37823L,37824L,37825L,37826L,37827L,37828L,37829L,37830L,
-37831L,37832L,37833L,37834L,37835L,37836L,37837L,37838L,37839L,37840L,
-37841L,37842L,37843L,37844L,37845L,37846L,37847L,37848L,37849L,37850L,
-37851L,37852L,37853L,37854L,37855L,37856L,37857L,37858L,37859L,37860L,
-37861L,37862L,37863L,37864L,37865L,37866L,37867L,37868L,37869L,37870L,
-37871L,37872L,37873L,37874L,37875L,37876L,37877L,37878L,37879L,37880L,
-37881L,37882L,37883L,37884L,37885L,37886L,37887L,37888L,37889L,37890L,
-37891L,37892L,37893L,37894L,37895L,37896L,37897L,37898L,37899L,37900L,
-37901L,37902L,37903L,37904L,37905L,37906L,37907L,37908L,37909L,37910L,
-37911L,37912L,37913L,37914L,37915L,37916L,37917L,37918L,37919L,37920L,
-37921L,37922L,37923L,37924L,37925L,37926L,37927L,37928L,37929L,37930L,
-37931L,37932L,37933L,37934L,37935L,37936L,37937L,37938L,37939L,37940L,
-37941L,37942L,37943L,37944L,37945L,37946L,37947L,37948L,37949L,37950L,
-37951L,37952L,37953L,37954L,37955L,37956L,37957L,37958L,37959L,37960L,
-37961L,37962L,37963L,37964L,37965L,37966L,37967L,37968L,37969L,37970L,
-37971L,37972L,37973L,37974L,37975L,37976L,37977L,37978L,37979L,37980L,
-37981L,37982L,37983L,37984L,37985L,37986L,37987L,37988L,37989L,37990L,
-37991L,37992L,37993L,37994L,37995L,37996L,37997L,37998L,37999L,38000L,
-38001L,38002L,38003L,38004L,38005L,38006L,38007L,38008L,38009L,38010L,
-38011L,38012L,38013L,38014L,38015L,38016L,38017L,38018L,38019L,38020L,
-38021L,38022L,38023L,38024L,38025L,38026L,38027L,38028L,38029L,38030L,
-38031L,38032L,38033L,38034L,38035L,38036L,38037L,38038L,38039L,38040L,
-38041L,38042L,38043L,38044L,38045L,38046L,38047L,38048L,38049L,38050L,
-38051L,38052L,38053L,38054L,38055L,38056L,38057L,38058L,38059L,38060L,
-38061L,38062L,38063L,38064L,38065L,38066L,38067L,38068L,38069L,38070L,
-38071L,38072L,38073L,38074L,38075L,38076L,38077L,38078L,38079L,38080L,
-38081L,38082L,38083L,38084L,38085L,38086L,38087L,38088L,38089L,38090L,
-38091L,38092L,38093L,38094L,38095L,38096L,38097L,38098L,38099L,38100L,
-38101L,38102L,38103L,38104L,38105L,38106L,38107L,38108L,38109L,38110L,
-38111L,38112L,38113L,38114L,38115L,38116L,38117L,38118L,38119L,38120L,
-38121L,38122L,38123L,38124L,38125L,38126L,38127L,38128L,38129L,38130L,
-38131L,38132L,38133L,38134L,38135L,38136L,38137L,38138L,38139L,38140L,
-38141L,38142L,38143L,38144L,38145L,38146L,38147L,38148L,38149L,38150L,
-38151L,38152L,38153L,38154L,38155L,38156L,38157L,38158L,38159L,38160L,
-38161L,38162L,38163L,38164L,38165L,38166L,38167L,38168L,38169L,38170L,
-38171L,38172L,38173L,38174L,38175L,38176L,38177L,38178L,38179L,38180L,
-38181L,38182L,38183L,38184L,38185L,38186L,38187L,38188L,38189L,38190L,
-38191L,38192L,38193L,38194L,38195L,38196L,38197L,38198L,38199L,38200L,
-38201L,38202L,38203L,38204L,38205L,38206L,38207L,38208L,38209L,38210L,
-38211L,38212L,38213L,38214L,38215L,38216L,38217L,38218L,38219L,38220L,
-38221L,38222L,38223L,38224L,38225L,38226L,38227L,38228L,38229L,38230L,
-38231L,38232L,38233L,38234L,38235L,38236L,38237L,38238L,38239L,38240L,
-38241L,38242L,38243L,38244L,38245L,38246L,38247L,38248L,38249L,38250L,
-38251L,38252L,38253L,38254L,38255L,38256L,38257L,38258L,38259L,38260L,
-38261L,38262L,38263L,38264L,38265L,38266L,38267L,38268L,38269L,38270L,
-38271L,38272L,38273L,38274L,38275L,38276L,38277L,38278L,38279L,38280L,
-38281L,38282L,38283L,38284L,38285L,38286L,38287L,38288L,38289L,38290L,
-38291L,38292L,38293L,38294L,38295L,38296L,38297L,38298L,38299L,38300L,
-38301L,38302L,38303L,38304L,38305L,38306L,38307L,38308L,38309L,38310L,
-38311L,38312L,38313L,38314L,38315L,38316L,38317L,38318L,38319L,38320L,
-38321L,38322L,38323L,38324L,38325L,38326L,38327L,38328L,38329L,38330L,
-38331L,38332L,38333L,38334L,38335L,38336L,38337L,38338L,38339L,38340L,
-38341L,38342L,38343L,38344L,38345L,38346L,38347L,38348L,38349L,38350L,
-38351L,38352L,38353L,38354L,38355L,38356L,38357L,38358L,38359L,38360L,
-38361L,38362L,38363L,38364L,38365L,38366L,38367L,38368L,38369L,38370L,
-38371L,38372L,38373L,38374L,38375L,38376L,38377L,38378L,38379L,38380L,
-38381L,38382L,38383L,38384L,38385L,38386L,38387L,38388L,38389L,38390L,
-38391L,38392L,38393L,38394L,38395L,38396L,38397L,38398L,38399L,38400L,
-38401L,38402L,38403L,38404L,38405L,38406L,38407L,38408L,38409L,38410L,
-38411L,38412L,38413L,38414L,38415L,38416L,38417L,38418L,38419L,38420L,
-38421L,38422L,38423L,38424L,38425L,38426L,38427L,38428L,38429L,38430L,
-38431L,38432L,38433L,38434L,38435L,38436L,38437L,38438L,38439L,38440L,
-38441L,38442L,38443L,38444L,38445L,38446L,38447L,38448L,38449L,38450L,
-38451L,38452L,38453L,38454L,38455L,38456L,38457L,38458L,38459L,38460L,
-38461L,38462L,38463L,38464L,38465L,38466L,38467L,38468L,38469L,38470L,
-38471L,38472L,38473L,38474L,38475L,38476L,38477L,38478L,38479L,38480L,
-38481L,38482L,38483L,38484L,38485L,38486L,38487L,38488L,38489L,38490L,
-38491L,38492L,38493L,38494L,38495L,38496L,38497L,38498L,38499L,38500L,
-38501L,38502L,38503L,38504L,38505L,38506L,38507L,38508L,38509L,38510L,
-38511L,38512L,38513L,38514L,38515L,38516L,38517L,38518L,38519L,38520L,
-38521L,38522L,38523L,38524L,38525L,38526L,38527L,38528L,38529L,38530L,
-38531L,38532L,38533L,38534L,38535L,38536L,38537L,38538L,38539L,38540L,
-38541L,38542L,38543L,38544L,38545L,38546L,38547L,38548L,38549L,38550L,
-38551L,38552L,38553L,38554L,38555L,38556L,38557L,38558L,38559L,38560L,
-38561L,38562L,38563L,38564L,38565L,38566L,38567L,38568L,38569L,38570L,
-38571L,38572L,38573L,38574L,38575L,38576L,38577L,38578L,38579L,38580L,
-38581L,38582L,38583L,38584L,38585L,38586L,38587L,38588L,38589L,38590L,
-38591L,38592L,38593L,38594L,38595L,38596L,38597L,38598L,38599L,38600L,
-38601L,38602L,38603L,38604L,38605L,38606L,38607L,38608L,38609L,38610L,
-38611L,38612L,38613L,38614L,38615L,38616L,38617L,38618L,38619L,38620L,
-38621L,38622L,38623L,38624L,38625L,38626L,38627L,38628L,38629L,38630L,
-38631L,38632L,38633L,38634L,38635L,38636L,38637L,38638L,38639L,38640L,
-38641L,38642L,38643L,38644L,38645L,38646L,38647L,38648L,38649L,38650L,
-38651L,38652L,38653L,38654L,38655L,38656L,38657L,38658L,38659L,38660L,
-38661L,38662L,38663L,38664L,38665L,38666L,38667L,38668L,38669L,38670L,
-38671L,38672L,38673L,38674L,38675L,38676L,38677L,38678L,38679L,38680L,
-38681L,38682L,38683L,38684L,38685L,38686L,38687L,38688L,38689L,38690L,
-38691L,38692L,38693L,38694L,38695L,38696L,38697L,38698L,38699L,38700L,
-38701L,38702L,38703L,38704L,38705L,38706L,38707L,38708L,38709L,38710L,
-38711L,38712L,38713L,38714L,38715L,38716L,38717L,38718L,38719L,38720L,
-38721L,38722L,38723L,38724L,38725L,38726L,38727L,38728L,38729L,38730L,
-38731L,38732L,38733L,38734L,38735L,38736L,38737L,38738L,38739L,38740L,
-38741L,38742L,38743L,38744L,38745L,38746L,38747L,38748L,38749L,38750L,
-38751L,38752L,38753L,38754L,38755L,38756L,38757L,38758L,38759L,38760L,
-38761L,38762L,38763L,38764L,38765L,38766L,38767L,38768L,38769L,38770L,
-38771L,38772L,38773L,38774L,38775L,38776L,38777L,38778L,38779L,38780L,
-38781L,38782L,38783L,38784L,38785L,38786L,38787L,38788L,38789L,38790L,
-38791L,38792L,38793L,38794L,38795L,38796L,38797L,38798L,38799L,38800L,
-38801L,38802L,38803L,38804L,38805L,38806L,38807L,38808L,38809L,38810L,
-38811L,38812L,38813L,38814L,38815L,38816L,38817L,38818L,38819L,38820L,
-38821L,38822L,38823L,38824L,38825L,38826L,38827L,38828L,38829L,38830L,
-38831L,38832L,38833L,38834L,38835L,38836L,38837L,38838L,38839L,38840L,
-38841L,38842L,38843L,38844L,38845L,38846L,38847L,38848L,38849L,38850L,
-38851L,38852L,38853L,38854L,38855L,38856L,38857L,38858L,38859L,38860L,
-38861L,38862L,38863L,38864L,38865L,38866L,38867L,38868L,38869L,38870L,
-38871L,38872L,38873L,38874L,38875L,38876L,38877L,38878L,38879L,38880L,
-38881L,38882L,38883L,38884L,38885L,38886L,38887L,38888L,38889L,38890L,
-38891L,38892L,38893L,38894L,38895L,38896L,38897L,38898L,38899L,38900L,
-38901L,38902L,38903L,38904L,38905L,38906L,38907L,38908L,38909L,38910L,
-38911L,38912L,38913L,38914L,38915L,38916L,38917L,38918L,38919L,38920L,
-38921L,38922L,38923L,38924L,38925L,38926L,38927L,38928L,38929L,38930L,
-38931L,38932L,38933L,38934L,38935L,38936L,38937L,38938L,38939L,38940L,
-38941L,38942L,38943L,38944L,38945L,38946L,38947L,38948L,38949L,38950L,
-38951L,38952L,38953L,38954L,38955L,38956L,38957L,38958L,38959L,38960L,
-38961L,38962L,38963L,38964L,38965L,38966L,38967L,38968L,38969L,38970L,
-38971L,38972L,38973L,38974L,38975L,38976L,38977L,38978L,38979L,38980L,
-38981L,38982L,38983L,38984L,38985L,38986L,38987L,38988L,38989L,38990L,
-38991L,38992L,38993L,38994L,38995L,38996L,38997L,38998L,38999L,39000L,
-39001L,39002L,39003L,39004L,39005L,39006L,39007L,39008L,39009L,39010L,
-39011L,39012L,39013L,39014L,39015L,39016L,39017L,39018L,39019L,39020L,
-39021L,39022L,39023L,39024L,39025L,39026L,39027L,39028L,39029L,39030L,
-39031L,39032L,39033L,39034L,39035L,39036L,39037L,39038L,39039L,39040L,
-39041L,39042L,39043L,39044L,39045L,39046L,39047L,39048L,39049L,39050L,
-39051L,39052L,39053L,39054L,39055L,39056L,39057L,39058L,39059L,39060L,
-39061L,39062L,39063L,39064L,39065L,39066L,39067L,39068L,39069L,39070L,
-39071L,39072L,39073L,39074L,39075L,39076L,39077L,39078L,39079L,39080L,
-39081L,39082L,39083L,39084L,39085L,39086L,39087L,39088L,39089L,39090L,
-39091L,39092L,39093L,39094L,39095L,39096L,39097L,39098L,39099L,39100L,
-39101L,39102L,39103L,39104L,39105L,39106L,39107L,39108L,39109L,39110L,
-39111L,39112L,39113L,39114L,39115L,39116L,39117L,39118L,39119L,39120L,
-39121L,39122L,39123L,39124L,39125L,39126L,39127L,39128L,39129L,39130L,
-39131L,39132L,39133L,39134L,39135L,39136L,39137L,39138L,39139L,39140L,
-39141L,39142L,39143L,39144L,39145L,39146L,39147L,39148L,39149L,39150L,
-39151L,39152L,39153L,39154L,39155L,39156L,39157L,39158L,39159L,39160L,
-39161L,39162L,39163L,39164L,39165L,39166L,39167L,39168L,39169L,39170L,
-39171L,39172L,39173L,39174L,39175L,39176L,39177L,39178L,39179L,39180L,
-39181L,39182L,39183L,39184L,39185L,39186L,39187L,39188L,39189L,39190L,
-39191L,39192L,39193L,39194L,39195L,39196L,39197L,39198L,39199L,39200L,
-39201L,39202L,39203L,39204L,39205L,39206L,39207L,39208L,39209L,39210L,
-39211L,39212L,39213L,39214L,39215L,39216L,39217L,39218L,39219L,39220L,
-39221L,39222L,39223L,39224L,39225L,39226L,39227L,39228L,39229L,39230L,
-39231L,39232L,39233L,39234L,39235L,39236L,39237L,39238L,39239L,39240L,
-39241L,39242L,39243L,39244L,39245L,39246L,39247L,39248L,39249L,39250L,
-39251L,39252L,39253L,39254L,39255L,39256L,39257L,39258L,39259L,39260L,
-39261L,39262L,39263L,39264L,39265L,39266L,39267L,39268L,39269L,39270L,
-39271L,39272L,39273L,39274L,39275L,39276L,39277L,39278L,39279L,39280L,
-39281L,39282L,39283L,39284L,39285L,39286L,39287L,39288L,39289L,39290L,
-39291L,39292L,39293L,39294L,39295L,39296L,39297L,39298L,39299L,39300L,
-39301L,39302L,39303L,39304L,39305L,39306L,39307L,39308L,39309L,39310L,
-39311L,39312L,39313L,39314L,39315L,39316L,39317L,39318L,39319L,39320L,
-39321L,39322L,39323L,39324L,39325L,39326L,39327L,39328L,39329L,39330L,
-39331L,39332L,39333L,39334L,39335L,39336L,39337L,39338L,39339L,39340L,
-39341L,39342L,39343L,39344L,39345L,39346L,39347L,39348L,39349L,39350L,
-39351L,39352L,39353L,39354L,39355L,39356L,39357L,39358L,39359L,39360L,
-39361L,39362L,39363L,39364L,39365L,39366L,39367L,39368L,39369L,39370L,
-39371L,39372L,39373L,39374L,39375L,39376L,39377L,39378L,39379L,39380L,
-39381L,39382L,39383L,39384L,39385L,39386L,39387L,39388L,39389L,39390L,
-39391L,39392L,39393L,39394L,39395L,39396L,39397L,39398L,39399L,39400L,
-39401L,39402L,39403L,39404L,39405L,39406L,39407L,39408L,39409L,39410L,
-39411L,39412L,39413L,39414L,39415L,39416L,39417L,39418L,39419L,39420L,
-39421L,39422L,39423L,39424L,39425L,39426L,39427L,39428L,39429L,39430L,
-39431L,39432L,39433L,39434L,39435L,39436L,39437L,39438L,39439L,39440L,
-39441L,39442L,39443L,39444L,39445L,39446L,39447L,39448L,39449L,39450L,
-39451L,39452L,39453L,39454L,39455L,39456L,39457L,39458L,39459L,39460L,
-39461L,39462L,39463L,39464L,39465L,39466L,39467L,39468L,39469L,39470L,
-39471L,39472L,39473L,39474L,39475L,39476L,39477L,39478L,39479L,39480L,
-39481L,39482L,39483L,39484L,39485L,39486L,39487L,39488L,39489L,39490L,
-39491L,39492L,39493L,39494L,39495L,39496L,39497L,39498L,39499L,39500L,
-39501L,39502L,39503L,39504L,39505L,39506L,39507L,39508L,39509L,39510L,
-39511L,39512L,39513L,39514L,39515L,39516L,39517L,39518L,39519L,39520L,
-39521L,39522L,39523L,39524L,39525L,39526L,39527L,39528L,39529L,39530L,
-39531L,39532L,39533L,39534L,39535L,39536L,39537L,39538L,39539L,39540L,
-39541L,39542L,39543L,39544L,39545L,39546L,39547L,39548L,39549L,39550L,
-39551L,39552L,39553L,39554L,39555L,39556L,39557L,39558L,39559L,39560L,
-39561L,39562L,39563L,39564L,39565L,39566L,39567L,39568L,39569L,39570L,
-39571L,39572L,39573L,39574L,39575L,39576L,39577L,39578L,39579L,39580L,
-39581L,39582L,39583L,39584L,39585L,39586L,39587L,39588L,39589L,39590L,
-39591L,39592L,39593L,39594L,39595L,39596L,39597L,39598L,39599L,39600L,
-39601L,39602L,39603L,39604L,39605L,39606L,39607L,39608L,39609L,39610L,
-39611L,39612L,39613L,39614L,39615L,39616L,39617L,39618L,39619L,39620L,
-39621L,39622L,39623L,39624L,39625L,39626L,39627L,39628L,39629L,39630L,
-39631L,39632L,39633L,39634L,39635L,39636L,39637L,39638L,39639L,39640L,
-39641L,39642L,39643L,39644L,39645L,39646L,39647L,39648L,39649L,39650L,
-39651L,39652L,39653L,39654L,39655L,39656L,39657L,39658L,39659L,39660L,
-39661L,39662L,39663L,39664L,39665L,39666L,39667L,39668L,39669L,39670L,
-39671L,39672L,39673L,39674L,39675L,39676L,39677L,39678L,39679L,39680L,
-39681L,39682L,39683L,39684L,39685L,39686L,39687L,39688L,39689L,39690L,
-39691L,39692L,39693L,39694L,39695L,39696L,39697L,39698L,39699L,39700L,
-39701L,39702L,39703L,39704L,39705L,39706L,39707L,39708L,39709L,39710L,
-39711L,39712L,39713L,39714L,39715L,39716L,39717L,39718L,39719L,39720L,
-39721L,39722L,39723L,39724L,39725L,39726L,39727L,39728L,39729L,39730L,
-39731L,39732L,39733L,39734L,39735L,39736L,39737L,39738L,39739L,39740L,
-39741L,39742L,39743L,39744L,39745L,39746L,39747L,39748L,39749L,39750L,
-39751L,39752L,39753L,39754L,39755L,39756L,39757L,39758L,39759L,39760L,
-39761L,39762L,39763L,39764L,39765L,39766L,39767L,39768L,39769L,39770L,
-39771L,39772L,39773L,39774L,39775L,39776L,39777L,39778L,39779L,39780L,
-39781L,39782L,39783L,39784L,39785L,39786L,39787L,39788L,39789L,39790L,
-39791L,39792L,39793L,39794L,39795L,39796L,39797L,39798L,39799L,39800L,
-39801L,39802L,39803L,39804L,39805L,39806L,39807L,39808L,39809L,39810L,
-39811L,39812L,39813L,39814L,39815L,39816L,39817L,39818L,39819L,39820L,
-39821L,39822L,39823L,39824L,39825L,39826L,39827L,39828L,39829L,39830L,
-39831L,39832L,39833L,39834L,39835L,39836L,39837L,39838L,39839L,39840L,
-39841L,39842L,39843L,39844L,39845L,39846L,39847L,39848L,39849L,39850L,
-39851L,39852L,39853L,39854L,39855L,39856L,39857L,39858L,39859L,39860L,
-39861L,39862L,39863L,39864L,39865L,39866L,39867L,39868L,39869L,39870L,
-39871L,39872L,39873L,39874L,39875L,39876L,39877L,39878L,39879L,39880L,
-39881L,39882L,39883L,39884L,39885L,39886L,39887L,39888L,39889L,39890L,
-39891L,39892L,39893L,39894L,39895L,39896L,39897L,39898L,39899L,39900L,
-39901L,39902L,39903L,39904L,39905L,39906L,39907L,39908L,39909L,39910L,
-39911L,39912L,39913L,39914L,39915L,39916L,39917L,39918L,39919L,39920L,
-39921L,39922L,39923L,39924L,39925L,39926L,39927L,39928L,39929L,39930L,
-39931L,39932L,39933L,39934L,39935L,39936L,39937L,39938L,39939L,39940L,
-39941L,39942L,39943L,39944L,39945L,39946L,39947L,39948L,39949L,39950L,
-39951L,39952L,39953L,39954L,39955L,39956L,39957L,39958L,39959L,39960L,
-39961L,39962L,39963L,39964L,39965L,39966L,39967L,39968L,39969L,39970L,
-39971L,39972L,39973L,39974L,39975L,39976L,39977L,39978L,39979L,39980L,
-39981L,39982L,39983L,39984L,39985L,39986L,39987L,39988L,39989L,39990L,
-39991L,39992L,39993L,39994L,39995L,39996L,39997L,39998L,39999L,40000L,
-40001L,40002L,40003L,40004L,40005L,40006L,40007L,40008L,40009L,40010L,
-40011L,40012L,40013L,40014L,40015L,40016L,40017L,40018L,40019L,40020L,
-40021L,40022L,40023L,40024L,40025L,40026L,40027L,40028L,40029L,40030L,
-40031L,40032L,40033L,40034L,40035L,40036L,40037L,40038L,40039L,40040L,
-40041L,40042L,40043L,40044L,40045L,40046L,40047L,40048L,40049L,40050L,
-40051L,40052L,40053L,40054L,40055L,40056L,40057L,40058L,40059L,40060L,
-40061L,40062L,40063L,40064L,40065L,40066L,40067L,40068L,40069L,40070L,
-40071L,40072L,40073L,40074L,40075L,40076L,40077L,40078L,40079L,40080L,
-40081L,40082L,40083L,40084L,40085L,40086L,40087L,40088L,40089L,40090L,
-40091L,40092L,40093L,40094L,40095L,40096L,40097L,40098L,40099L,40100L,
-40101L,40102L,40103L,40104L,40105L,40106L,40107L,40108L,40109L,40110L,
-40111L,40112L,40113L,40114L,40115L,40116L,40117L,40118L,40119L,40120L,
-40121L,40122L,40123L,40124L,40125L,40126L,40127L,40128L,40129L,40130L,
-40131L,40132L,40133L,40134L,40135L,40136L,40137L,40138L,40139L,40140L,
-40141L,40142L,40143L,40144L,40145L,40146L,40147L,40148L,40149L,40150L,
-40151L,40152L,40153L,40154L,40155L,40156L,40157L,40158L,40159L,40160L,
-40161L,40162L,40163L,40164L,40165L,40166L,40167L,40168L,40169L,40170L,
-40171L,40172L,40173L,40174L,40175L,40176L,40177L,40178L,40179L,40180L,
-40181L,40182L,40183L,40184L,40185L,40186L,40187L,40188L,40189L,40190L,
-40191L,40192L,40193L,40194L,40195L,40196L,40197L,40198L,40199L,40200L,
-40201L,40202L,40203L,40204L,40205L,40206L,40207L,40208L,40209L,40210L,
-40211L,40212L,40213L,40214L,40215L,40216L,40217L,40218L,40219L,40220L,
-40221L,40222L,40223L,40224L,40225L,40226L,40227L,40228L,40229L,40230L,
-40231L,40232L,40233L,40234L,40235L,40236L,40237L,40238L,40239L,40240L,
-40241L,40242L,40243L,40244L,40245L,40246L,40247L,40248L,40249L,40250L,
-40251L,40252L,40253L,40254L,40255L,40256L,40257L,40258L,40259L,40260L,
-40261L,40262L,40263L,40264L,40265L,40266L,40267L,40268L,40269L,40270L,
-40271L,40272L,40273L,40274L,40275L,40276L,40277L,40278L,40279L,40280L,
-40281L,40282L,40283L,40284L,40285L,40286L,40287L,40288L,40289L,40290L,
-40291L,40292L,40293L,40294L,40295L,40296L,40297L,40298L,40299L,40300L,
-40301L,40302L,40303L,40304L,40305L,40306L,40307L,40308L,40309L,40310L,
-40311L,40312L,40313L,40314L,40315L,40316L,40317L,40318L,40319L,40320L,
-40321L,40322L,40323L,40324L,40325L,40326L,40327L,40328L,40329L,40330L,
-40331L,40332L,40333L,40334L,40335L,40336L,40337L,40338L,40339L,40340L,
-40341L,40342L,40343L,40344L,40345L,40346L,40347L,40348L,40349L,40350L,
-40351L,40352L,40353L,40354L,40355L,40356L,40357L,40358L,40359L,40360L,
-40361L,40362L,40363L,40364L,40365L,40366L,40367L,40368L,40369L,40370L,
-40371L,40372L,40373L,40374L,40375L,40376L,40377L,40378L,40379L,40380L,
-40381L,40382L,40383L,40384L,40385L,40386L,40387L,40388L,40389L,40390L,
-40391L,40392L,40393L,40394L,40395L,40396L,40397L,40398L,40399L,40400L,
-40401L,40402L,40403L,40404L,40405L,40406L,40407L,40408L,40409L,40410L,
-40411L,40412L,40413L,40414L,40415L,40416L,40417L,40418L,40419L,40420L,
-40421L,40422L,40423L,40424L,40425L,40426L,40427L,40428L,40429L,40430L,
-40431L,40432L,40433L,40434L,40435L,40436L,40437L,40438L,40439L,40440L,
-40441L,40442L,40443L,40444L,40445L,40446L,40447L,40448L,40449L,40450L,
-40451L,40452L,40453L,40454L,40455L,40456L,40457L,40458L,40459L,40460L,
-40461L,40462L,40463L,40464L,40465L,40466L,40467L,40468L,40469L,40470L,
-40471L,40472L,40473L,40474L,40475L,40476L,40477L,40478L,40479L,40480L,
-40481L,40482L,40483L,40484L,40485L,40486L,40487L,40488L,40489L,40490L,
-40491L,40492L,40493L,40494L,40495L,40496L,40497L,40498L,40499L,40500L,
-40501L,40502L,40503L,40504L,40505L,40506L,40507L,40508L,40509L,40510L,
-40511L,40512L,40513L,40514L,40515L,40516L,40517L,40518L,40519L,40520L,
-40521L,40522L,40523L,40524L,40525L,40526L,40527L,40528L,40529L,40530L,
-40531L,40532L,40533L,40534L,40535L,40536L,40537L,40538L,40539L,40540L,
-40541L,40542L,40543L,40544L,40545L,40546L,40547L,40548L,40549L,40550L,
-40551L,40552L,40553L,40554L,40555L,40556L,40557L,40558L,40559L,40560L,
-40561L,40562L,40563L,40564L,40565L,40566L,40567L,40568L,40569L,40570L,
-40571L,40572L,40573L,40574L,40575L,40576L,40577L,40578L,40579L,40580L,
-40581L,40582L,40583L,40584L,40585L,40586L,40587L,40588L,40589L,40590L,
-40591L,40592L,40593L,40594L,40595L,40596L,40597L,40598L,40599L,40600L,
-40601L,40602L,40603L,40604L,40605L,40606L,40607L,40608L,40609L,40610L,
-40611L,40612L,40613L,40614L,40615L,40616L,40617L,40618L,40619L,40620L,
-40621L,40622L,40623L,40624L,40625L,40626L,40627L,40628L,40629L,40630L,
-40631L,40632L,40633L,40634L,40635L,40636L,40637L,40638L,40639L,40640L,
-40641L,40642L,40643L,40644L,40645L,40646L,40647L,40648L,40649L,40650L,
-40651L,40652L,40653L,40654L,40655L,40656L,40657L,40658L,40659L,40660L,
-40661L,40662L,40663L,40664L,40665L,40666L,40667L,40668L,40669L,40670L,
-40671L,40672L,40673L,40674L,40675L,40676L,40677L,40678L,40679L,40680L,
-40681L,40682L,40683L,40684L,40685L,40686L,40687L,40688L,40689L,40690L,
-40691L,40692L,40693L,40694L,40695L,40696L,40697L,40698L,40699L,40700L,
-40701L,40702L,40703L,40704L,40705L,40706L,40707L,40708L,40709L,40710L,
-40711L,40712L,40713L,40714L,40715L,40716L,40717L,40718L,40719L,40720L,
-40721L,40722L,40723L,40724L,40725L,40726L,40727L,40728L,40729L,40730L,
-40731L,40732L,40733L,40734L,40735L,40736L,40737L,40738L,40739L,40740L,
-40741L,40742L,40743L,40744L,40745L,40746L,40747L,40748L,40749L,40750L,
-40751L,40752L,40753L,40754L,40755L,40756L,40757L,40758L,40759L,40760L,
-40761L,40762L,40763L,40764L,40765L,40766L,40767L,40768L,40769L,40770L,
-40771L,40772L,40773L,40774L,40775L,40776L,40777L,40778L,40779L,40780L,
-40781L,40782L,40783L,40784L,40785L,40786L,40787L,40788L,40789L,40790L,
-40791L,40792L,40793L,40794L,40795L,40796L,40797L,40798L,40799L,40800L,
-40801L,40802L,40803L,40804L,40805L,40806L,40807L,40808L,40809L,40810L,
-40811L,40812L,40813L,40814L,40815L,40816L,40817L,40818L,40819L,40820L,
-40821L,40822L,40823L,40824L,40825L,40826L,40827L,40828L,40829L,40830L,
-40831L,40832L,40833L,40834L,40835L,40836L,40837L,40838L,40839L,40840L,
-40841L,40842L,40843L,40844L,40845L,40846L,40847L,40848L,40849L,40850L,
-40851L,40852L,40853L,40854L,40855L,40856L,40857L,40858L,40859L,40860L,
-40861L,40862L,40863L,40864L,40865L,40866L,40867L,40868L,40869L,40870L,
-40871L,40872L,40873L,40874L,40875L,40876L,40877L,40878L,40879L,40880L,
-40881L,40882L,40883L,40884L,40885L,40886L,40887L,40888L,40889L,40890L,
-40891L,40892L,40893L,40894L,40895L,40896L,40897L,40898L,40899L,40900L,
-40901L,40902L,40903L,40904L,40905L,40906L,40907L,40908L,40909L,40910L,
-40911L,40912L,40913L,40914L,40915L,40916L,40917L,40918L,40919L,40920L,
-40921L,40922L,40923L,40924L,40925L,40926L,40927L,40928L,40929L,40930L,
-40931L,40932L,40933L,40934L,40935L,40936L,40937L,40938L,40939L,40940L,
-40941L,40942L,40943L,40944L,40945L,40946L,40947L,40948L,40949L,40950L,
-40951L,40952L,40953L,40954L,40955L,40956L,40957L,40958L,40959L,40960L,
-40961L,40962L,40963L,40964L,40965L,40966L,40967L,40968L,40969L,40970L,
-40971L,40972L,40973L,40974L,40975L,40976L,40977L,40978L,40979L,40980L,
-40981L,40982L,40983L,40984L,40985L,40986L,40987L,40988L,40989L,40990L,
-40991L,40992L,40993L,40994L,40995L,40996L,40997L,40998L,40999L,41000L,
-41001L,41002L,41003L,41004L,41005L,41006L,41007L,41008L,41009L,41010L,
-41011L,41012L,41013L,41014L,41015L,41016L,41017L,41018L,41019L,41020L,
-41021L,41022L,41023L,41024L,41025L,41026L,41027L,41028L,41029L,41030L,
-41031L,41032L,41033L,41034L,41035L,41036L,41037L,41038L,41039L,41040L,
-41041L,41042L,41043L,41044L,41045L,41046L,41047L,41048L,41049L,41050L,
-41051L,41052L,41053L,41054L,41055L,41056L,41057L,41058L,41059L,41060L,
-41061L,41062L,41063L,41064L,41065L,41066L,41067L,41068L,41069L,41070L,
-41071L,41072L,41073L,41074L,41075L,41076L,41077L,41078L,41079L,41080L,
-41081L,41082L,41083L,41084L,41085L,41086L,41087L,41088L,41089L,41090L,
-41091L,41092L,41093L,41094L,41095L,41096L,41097L,41098L,41099L,41100L,
-41101L,41102L,41103L,41104L,41105L,41106L,41107L,41108L,41109L,41110L,
-41111L,41112L,41113L,41114L,41115L,41116L,41117L,41118L,41119L,41120L,
-41121L,41122L,41123L,41124L,41125L,41126L,41127L,41128L,41129L,41130L,
-41131L,41132L,41133L,41134L,41135L,41136L,41137L,41138L,41139L,41140L,
-41141L,41142L,41143L,41144L,41145L,41146L,41147L,41148L,41149L,41150L,
-41151L,41152L,41153L,41154L,41155L,41156L,41157L,41158L,41159L,41160L,
-41161L,41162L,41163L,41164L,41165L,41166L,41167L,41168L,41169L,41170L,
-41171L,41172L,41173L,41174L,41175L,41176L,41177L,41178L,41179L,41180L,
-41181L,41182L,41183L,41184L,41185L,41186L,41187L,41188L,41189L,41190L,
-41191L,41192L,41193L,41194L,41195L,41196L,41197L,41198L,41199L,41200L,
-41201L,41202L,41203L,41204L,41205L,41206L,41207L,41208L,41209L,41210L,
-41211L,41212L,41213L,41214L,41215L,41216L,41217L,41218L,41219L,41220L,
-41221L,41222L,41223L,41224L,41225L,41226L,41227L,41228L,41229L,41230L,
-41231L,41232L,41233L,41234L,41235L,41236L,41237L,41238L,41239L,41240L,
-41241L,41242L,41243L,41244L,41245L,41246L,41247L,41248L,41249L,41250L,
-41251L,41252L,41253L,41254L,41255L,41256L,41257L,41258L,41259L,41260L,
-41261L,41262L,41263L,41264L,41265L,41266L,41267L,41268L,41269L,41270L,
-41271L,41272L,41273L,41274L,41275L,41276L,41277L,41278L,41279L,41280L,
-41281L,41282L,41283L,41284L,41285L,41286L,41287L,41288L,41289L,41290L,
-41291L,41292L,41293L,41294L,41295L,41296L,41297L,41298L,41299L,41300L,
-41301L,41302L,41303L,41304L,41305L,41306L,41307L,41308L,41309L,41310L,
-41311L,41312L,41313L,41314L,41315L,41316L,41317L,41318L,41319L,41320L,
-41321L,41322L,41323L,41324L,41325L,41326L,41327L,41328L,41329L,41330L,
-41331L,41332L,41333L,41334L,41335L,41336L,41337L,41338L,41339L,41340L,
-41341L,41342L,41343L,41344L,41345L,41346L,41347L,41348L,41349L,41350L,
-41351L,41352L,41353L,41354L,41355L,41356L,41357L,41358L,41359L,41360L,
-41361L,41362L,41363L,41364L,41365L,41366L,41367L,41368L,41369L,41370L,
-41371L,41372L,41373L,41374L,41375L,41376L,41377L,41378L,41379L,41380L,
-41381L,41382L,41383L,41384L,41385L,41386L,41387L,41388L,41389L,41390L,
-41391L,41392L,41393L,41394L,41395L,41396L,41397L,41398L,41399L,41400L,
-41401L,41402L,41403L,41404L,41405L,41406L,41407L,41408L,41409L,41410L,
-41411L,41412L,41413L,41414L,41415L,41416L,41417L,41418L,41419L,41420L,
-41421L,41422L,41423L,41424L,41425L,41426L,41427L,41428L,41429L,41430L,
-41431L,41432L,41433L,41434L,41435L,41436L,41437L,41438L,41439L,41440L,
-41441L,41442L,41443L,41444L,41445L,41446L,41447L,41448L,41449L,41450L,
-41451L,41452L,41453L,41454L,41455L,41456L,41457L,41458L,41459L,41460L,
-41461L,41462L,41463L,41464L,41465L,41466L,41467L,41468L,41469L,41470L,
-41471L,41472L,41473L,41474L,41475L,41476L,41477L,41478L,41479L,41480L,
-41481L,41482L,41483L,41484L,41485L,41486L,41487L,41488L,41489L,41490L,
-41491L,41492L,41493L,41494L,41495L,41496L,41497L,41498L,41499L,41500L,
-41501L,41502L,41503L,41504L,41505L,41506L,41507L,41508L,41509L,41510L,
-41511L,41512L,41513L,41514L,41515L,41516L,41517L,41518L,41519L,41520L,
-41521L,41522L,41523L,41524L,41525L,41526L,41527L,41528L,41529L,41530L,
-41531L,41532L,41533L,41534L,41535L,41536L,41537L,41538L,41539L,41540L,
-41541L,41542L,41543L,41544L,41545L,41546L,41547L,41548L,41549L,41550L,
-41551L,41552L,41553L,41554L,41555L,41556L,41557L,41558L,41559L,41560L,
-41561L,41562L,41563L,41564L,41565L,41566L,41567L,41568L,41569L,41570L,
-41571L,41572L,41573L,41574L,41575L,41576L,41577L,41578L,41579L,41580L,
-41581L,41582L,41583L,41584L,41585L,41586L,41587L,41588L,41589L,41590L,
-41591L,41592L,41593L,41594L,41595L,41596L,41597L,41598L,41599L,41600L,
-41601L,41602L,41603L,41604L,41605L,41606L,41607L,41608L,41609L,41610L,
-41611L,41612L,41613L,41614L,41615L,41616L,41617L,41618L,41619L,41620L,
-41621L,41622L,41623L,41624L,41625L,41626L,41627L,41628L,41629L,41630L,
-41631L,41632L,41633L,41634L,41635L,41636L,41637L,41638L,41639L,41640L,
-41641L,41642L,41643L,41644L,41645L,41646L,41647L,41648L,41649L,41650L,
-41651L,41652L,41653L,41654L,41655L,41656L,41657L,41658L,41659L,41660L,
-41661L,41662L,41663L,41664L,41665L,41666L,41667L,41668L,41669L,41670L,
-41671L,41672L,41673L,41674L,41675L,41676L,41677L,41678L,41679L,41680L,
-41681L,41682L,41683L,41684L,41685L,41686L,41687L,41688L,41689L,41690L,
-41691L,41692L,41693L,41694L,41695L,41696L,41697L,41698L,41699L,41700L,
-41701L,41702L,41703L,41704L,41705L,41706L,41707L,41708L,41709L,41710L,
-41711L,41712L,41713L,41714L,41715L,41716L,41717L,41718L,41719L,41720L,
-41721L,41722L,41723L,41724L,41725L,41726L,41727L,41728L,41729L,41730L,
-41731L,41732L,41733L,41734L,41735L,41736L,41737L,41738L,41739L,41740L,
-41741L,41742L,41743L,41744L,41745L,41746L,41747L,41748L,41749L,41750L,
-41751L,41752L,41753L,41754L,41755L,41756L,41757L,41758L,41759L,41760L,
-41761L,41762L,41763L,41764L,41765L,41766L,41767L,41768L,41769L,41770L,
-41771L,41772L,41773L,41774L,41775L,41776L,41777L,41778L,41779L,41780L,
-41781L,41782L,41783L,41784L,41785L,41786L,41787L,41788L,41789L,41790L,
-41791L,41792L,41793L,41794L,41795L,41796L,41797L,41798L,41799L,41800L,
-41801L,41802L,41803L,41804L,41805L,41806L,41807L,41808L,41809L,41810L,
-41811L,41812L,41813L,41814L,41815L,41816L,41817L,41818L,41819L,41820L,
-41821L,41822L,41823L,41824L,41825L,41826L,41827L,41828L,41829L,41830L,
-41831L,41832L,41833L,41834L,41835L,41836L,41837L,41838L,41839L,41840L,
-41841L,41842L,41843L,41844L,41845L,41846L,41847L,41848L,41849L,41850L,
-41851L,41852L,41853L,41854L,41855L,41856L,41857L,41858L,41859L,41860L,
-41861L,41862L,41863L,41864L,41865L,41866L,41867L,41868L,41869L,41870L,
-41871L,41872L,41873L,41874L,41875L,41876L,41877L,41878L,41879L,41880L,
-41881L,41882L,41883L,41884L,41885L,41886L,41887L,41888L,41889L,41890L,
-41891L,41892L,41893L,41894L,41895L,41896L,41897L,41898L,41899L,41900L,
-41901L,41902L,41903L,41904L,41905L,41906L,41907L,41908L,41909L,41910L,
-41911L,41912L,41913L,41914L,41915L,41916L,41917L,41918L,41919L,41920L,
-41921L,41922L,41923L,41924L,41925L,41926L,41927L,41928L,41929L,41930L,
-41931L,41932L,41933L,41934L,41935L,41936L,41937L,41938L,41939L,41940L,
-41941L,41942L,41943L,41944L,41945L,41946L,41947L,41948L,41949L,41950L,
-41951L,41952L,41953L,41954L,41955L,41956L,41957L,41958L,41959L,41960L,
-41961L,41962L,41963L,41964L,41965L,41966L,41967L,41968L,41969L,41970L,
-41971L,41972L,41973L,41974L,41975L,41976L,41977L,41978L,41979L,41980L,
-41981L,41982L,41983L,41984L,41985L,41986L,41987L,41988L,41989L,41990L,
-41991L,41992L,41993L,41994L,41995L,41996L,41997L,41998L,41999L,42000L,
-42001L,42002L,42003L,42004L,42005L,42006L,42007L,42008L,42009L,42010L,
-42011L,42012L,42013L,42014L,42015L,42016L,42017L,42018L,42019L,42020L,
-42021L,42022L,42023L,42024L,42025L,42026L,42027L,42028L,42029L,42030L,
-42031L,42032L,42033L,42034L,42035L,42036L,42037L,42038L,42039L,42040L,
-42041L,42042L,42043L,42044L,42045L,42046L,42047L,42048L,42049L,42050L,
-42051L,42052L,42053L,42054L,42055L,42056L,42057L,42058L,42059L,42060L,
-42061L,42062L,42063L,42064L,42065L,42066L,42067L,42068L,42069L,42070L,
-42071L,42072L,42073L,42074L,42075L,42076L,42077L,42078L,42079L,42080L,
-42081L,42082L,42083L,42084L,42085L,42086L,42087L,42088L,42089L,42090L,
-42091L,42092L,42093L,42094L,42095L,42096L,42097L,42098L,42099L,42100L,
-42101L,42102L,42103L,42104L,42105L,42106L,42107L,42108L,42109L,42110L,
-42111L,42112L,42113L,42114L,42115L,42116L,42117L,42118L,42119L,42120L,
-42121L,42122L,42123L,42124L,42125L,42126L,42127L,42128L,42129L,42130L,
-42131L,42132L,42133L,42134L,42135L,42136L,42137L,42138L,42139L,42140L,
-42141L,42142L,42143L,42144L,42145L,42146L,42147L,42148L,42149L,42150L,
-42151L,42152L,42153L,42154L,42155L,42156L,42157L,42158L,42159L,42160L,
-42161L,42162L,42163L,42164L,42165L,42166L,42167L,42168L,42169L,42170L,
-42171L,42172L,42173L,42174L,42175L,42176L,42177L,42178L,42179L,42180L,
-42181L,42182L,42183L,42184L,42185L,42186L,42187L,42188L,42189L,42190L,
-42191L,42192L,42193L,42194L,42195L,42196L,42197L,42198L,42199L,42200L,
-42201L,42202L,42203L,42204L,42205L,42206L,42207L,42208L,42209L,42210L,
-42211L,42212L,42213L,42214L,42215L,42216L,42217L,42218L,42219L,42220L,
-42221L,42222L,42223L,42224L,42225L,42226L,42227L,42228L,42229L,42230L,
-42231L,42232L,42233L,42234L,42235L,42236L,42237L,42238L,42239L,42240L,
-42241L,42242L,42243L,42244L,42245L,42246L,42247L,42248L,42249L,42250L,
-42251L,42252L,42253L,42254L,42255L,42256L,42257L,42258L,42259L,42260L,
-42261L,42262L,42263L,42264L,42265L,42266L,42267L,42268L,42269L,42270L,
-42271L,42272L,42273L,42274L,42275L,42276L,42277L,42278L,42279L,42280L,
-42281L,42282L,42283L,42284L,42285L,42286L,42287L,42288L,42289L,42290L,
-42291L,42292L,42293L,42294L,42295L,42296L,42297L,42298L,42299L,42300L,
-42301L,42302L,42303L,42304L,42305L,42306L,42307L,42308L,42309L,42310L,
-42311L,42312L,42313L,42314L,42315L,42316L,42317L,42318L,42319L,42320L,
-42321L,42322L,42323L,42324L,42325L,42326L,42327L,42328L,42329L,42330L,
-42331L,42332L,42333L,42334L,42335L,42336L,42337L,42338L,42339L,42340L,
-42341L,42342L,42343L,42344L,42345L,42346L,42347L,42348L,42349L,42350L,
-42351L,42352L,42353L,42354L,42355L,42356L,42357L,42358L,42359L,42360L,
-42361L,42362L,42363L,42364L,42365L,42366L,42367L,42368L,42369L,42370L,
-42371L,42372L,42373L,42374L,42375L,42376L,42377L,42378L,42379L,42380L,
-42381L,42382L,42383L,42384L,42385L,42386L,42387L,42388L,42389L,42390L,
-42391L,42392L,42393L,42394L,42395L,42396L,42397L,42398L,42399L,42400L,
-42401L,42402L,42403L,42404L,42405L,42406L,42407L,42408L,42409L,42410L,
-42411L,42412L,42413L,42414L,42415L,42416L,42417L,42418L,42419L,42420L,
-42421L,42422L,42423L,42424L,42425L,42426L,42427L,42428L,42429L,42430L,
-42431L,42432L,42433L,42434L,42435L,42436L,42437L,42438L,42439L,42440L,
-42441L,42442L,42443L,42444L,42445L,42446L,42447L,42448L,42449L,42450L,
-42451L,42452L,42453L,42454L,42455L,42456L,42457L,42458L,42459L,42460L,
-42461L,42462L,42463L,42464L,42465L,42466L,42467L,42468L,42469L,42470L,
-42471L,42472L,42473L,42474L,42475L,42476L,42477L,42478L,42479L,42480L,
-42481L,42482L,42483L,42484L,42485L,42486L,42487L,42488L,42489L,42490L,
-42491L,42492L,42493L,42494L,42495L,42496L,42497L,42498L,42499L,42500L,
-42501L,42502L,42503L,42504L,42505L,42506L,42507L,42508L,42509L,42510L,
-42511L,42512L,42513L,42514L,42515L,42516L,42517L,42518L,42519L,42520L,
-42521L,42522L,42523L,42524L,42525L,42526L,42527L,42528L,42529L,42530L,
-42531L,42532L,42533L,42534L,42535L,42536L,42537L,42538L,42539L,42540L,
-42541L,42542L,42543L,42544L,42545L,42546L,42547L,42548L,42549L,42550L,
-42551L,42552L,42553L,42554L,42555L,42556L,42557L,42558L,42559L,42560L,
-42560L,42562L,42562L,42564L,42564L,42566L,42566L,42568L,42568L,42570L,
-42570L,42572L,42572L,42574L,42574L,42576L,42576L,42578L,42578L,42580L,
-42580L,42582L,42582L,42584L,42584L,42586L,42586L,42588L,42588L,42590L,
-42590L,42592L,42592L,42594L,42594L,42596L,42596L,42598L,42598L,42600L,
-42600L,42602L,42602L,42604L,42604L,42606L,42607L,42608L,42609L,42610L,
-42611L,42612L,42613L,42614L,42615L,42616L,42617L,42618L,42619L,42620L,
-42621L,42622L,42623L,42624L,42624L,42626L,42626L,42628L,42628L,42630L,
-42630L,42632L,42632L,42634L,42634L,42636L,42636L,42638L,42638L,42640L,
-42640L,42642L,42642L,42644L,42644L,42646L,42646L,42648L,42648L,42650L,
-42650L,42652L,42653L,42654L,42655L,42656L,42657L,42658L,42659L,42660L,
-42661L,42662L,42663L,42664L,42665L,42666L,42667L,42668L,42669L,42670L,
-42671L,42672L,42673L,42674L,42675L,42676L,42677L,42678L,42679L,42680L,
-42681L,42682L,42683L,42684L,42685L,42686L,42687L,42688L,42689L,42690L,
-42691L,42692L,42693L,42694L,42695L,42696L,42697L,42698L,42699L,42700L,
-42701L,42702L,42703L,42704L,42705L,42706L,42707L,42708L,42709L,42710L,
-42711L,42712L,42713L,42714L,42715L,42716L,42717L,42718L,42719L,42720L,
-42721L,42722L,42723L,42724L,42725L,42726L,42727L,42728L,42729L,42730L,
-42731L,42732L,42733L,42734L,42735L,42736L,42737L,42738L,42739L,42740L,
-42741L,42742L,42743L,42744L,42745L,42746L,42747L,42748L,42749L,42750L,
-42751L,42752L,42753L,42754L,42755L,42756L,42757L,42758L,42759L,42760L,
-42761L,42762L,42763L,42764L,42765L,42766L,42767L,42768L,42769L,42770L,
-42771L,42772L,42773L,42774L,42775L,42776L,42777L,42778L,42779L,42780L,
-42781L,42782L,42783L,42784L,42785L,42786L,42786L,42788L,42788L,42790L,
-42790L,42792L,42792L,42794L,42794L,42796L,42796L,42798L,42798L,42800L,
-42801L,42802L,42802L,42804L,42804L,42806L,42806L,42808L,42808L,42810L,
-42810L,42812L,42812L,42814L,42814L,42816L,42816L,42818L,42818L,42820L,
-42820L,42822L,42822L,42824L,42824L,42826L,42826L,42828L,42828L,42830L,
-42830L,42832L,42832L,42834L,42834L,42836L,42836L,42838L,42838L,42840L,
-42840L,42842L,42842L,42844L,42844L,42846L,42846L,42848L,42848L,42850L,
-42850L,42852L,42852L,42854L,42854L,42856L,42856L,42858L,42858L,42860L,
-42860L,42862L,42862L,42864L,42865L,42866L,42867L,42868L,42869L,42870L,
-42871L,42872L,42873L,42873L,42875L,42875L,42877L,42878L,42878L,42880L,
-42880L,42882L,42882L,42884L,42884L,42886L,42886L,42888L,42889L,42890L,
-42891L,42891L,42893L,42894L,42895L,42896L,42896L,42898L,42898L,42900L,
-42901L,42902L,42902L,42904L,42904L,42906L,42906L,42908L,42908L,42910L,
-42910L,42912L,42912L,42914L,42914L,42916L,42916L,42918L,42918L,42920L,
-42920L,42922L,42923L,42924L,42925L,42926L,42927L,42928L,42929L,42930L,
-42931L,42932L,42932L,42934L,42934L,42936L,42937L,42938L,42939L,42940L,
-42941L,42942L,42943L,42944L,42945L,42946L,42947L,42948L,42949L,42950L,
-42951L,42952L,42953L,42954L,42955L,42956L,42957L,42958L,42959L,42960L,
-42961L,42962L,42963L,42964L,42965L,42966L,42967L,42968L,42969L,42970L,
-42971L,42972L,42973L,42974L,42975L,42976L,42977L,42978L,42979L,42980L,
-42981L,42982L,42983L,42984L,42985L,42986L,42987L,42988L,42989L,42990L,
-42991L,42992L,42993L,42994L,42995L,42996L,42997L,42998L,42999L,43000L,
-43001L,43002L,43003L,43004L,43005L,43006L,43007L,43008L,43009L,43010L,
-43011L,43012L,43013L,43014L,43015L,43016L,43017L,43018L,43019L,43020L,
-43021L,43022L,43023L,43024L,43025L,43026L,43027L,43028L,43029L,43030L,
-43031L,43032L,43033L,43034L,43035L,43036L,43037L,43038L,43039L,43040L,
-43041L,43042L,43043L,43044L,43045L,43046L,43047L,43048L,43049L,43050L,
-43051L,43052L,43053L,43054L,43055L,43056L,43057L,43058L,43059L,43060L,
-43061L,43062L,43063L,43064L,43065L,43066L,43067L,43068L,43069L,43070L,
-43071L,43072L,43073L,43074L,43075L,43076L,43077L,43078L,43079L,43080L,
-43081L,43082L,43083L,43084L,43085L,43086L,43087L,43088L,43089L,43090L,
-43091L,43092L,43093L,43094L,43095L,43096L,43097L,43098L,43099L,43100L,
-43101L,43102L,43103L,43104L,43105L,43106L,43107L,43108L,43109L,43110L,
-43111L,43112L,43113L,43114L,43115L,43116L,43117L,43118L,43119L,43120L,
-43121L,43122L,43123L,43124L,43125L,43126L,43127L,43128L,43129L,43130L,
-43131L,43132L,43133L,43134L,43135L,43136L,43137L,43138L,43139L,43140L,
-43141L,43142L,43143L,43144L,43145L,43146L,43147L,43148L,43149L,43150L,
-43151L,43152L,43153L,43154L,43155L,43156L,43157L,43158L,43159L,43160L,
-43161L,43162L,43163L,43164L,43165L,43166L,43167L,43168L,43169L,43170L,
-43171L,43172L,43173L,43174L,43175L,43176L,43177L,43178L,43179L,43180L,
-43181L,43182L,43183L,43184L,43185L,43186L,43187L,43188L,43189L,43190L,
-43191L,43192L,43193L,43194L,43195L,43196L,43197L,43198L,43199L,43200L,
-43201L,43202L,43203L,43204L,43205L,43206L,43207L,43208L,43209L,43210L,
-43211L,43212L,43213L,43214L,43215L,43216L,43217L,43218L,43219L,43220L,
-43221L,43222L,43223L,43224L,43225L,43226L,43227L,43228L,43229L,43230L,
-43231L,43232L,43233L,43234L,43235L,43236L,43237L,43238L,43239L,43240L,
-43241L,43242L,43243L,43244L,43245L,43246L,43247L,43248L,43249L,43250L,
-43251L,43252L,43253L,43254L,43255L,43256L,43257L,43258L,43259L,43260L,
-43261L,43262L,43263L,43264L,43265L,43266L,43267L,43268L,43269L,43270L,
-43271L,43272L,43273L,43274L,43275L,43276L,43277L,43278L,43279L,43280L,
-43281L,43282L,43283L,43284L,43285L,43286L,43287L,43288L,43289L,43290L,
-43291L,43292L,43293L,43294L,43295L,43296L,43297L,43298L,43299L,43300L,
-43301L,43302L,43303L,43304L,43305L,43306L,43307L,43308L,43309L,43310L,
-43311L,43312L,43313L,43314L,43315L,43316L,43317L,43318L,43319L,43320L,
-43321L,43322L,43323L,43324L,43325L,43326L,43327L,43328L,43329L,43330L,
-43331L,43332L,43333L,43334L,43335L,43336L,43337L,43338L,43339L,43340L,
-43341L,43342L,43343L,43344L,43345L,43346L,43347L,43348L,43349L,43350L,
-43351L,43352L,43353L,43354L,43355L,43356L,43357L,43358L,43359L,43360L,
-43361L,43362L,43363L,43364L,43365L,43366L,43367L,43368L,43369L,43370L,
-43371L,43372L,43373L,43374L,43375L,43376L,43377L,43378L,43379L,43380L,
-43381L,43382L,43383L,43384L,43385L,43386L,43387L,43388L,43389L,43390L,
-43391L,43392L,43393L,43394L,43395L,43396L,43397L,43398L,43399L,43400L,
-43401L,43402L,43403L,43404L,43405L,43406L,43407L,43408L,43409L,43410L,
-43411L,43412L,43413L,43414L,43415L,43416L,43417L,43418L,43419L,43420L,
-43421L,43422L,43423L,43424L,43425L,43426L,43427L,43428L,43429L,43430L,
-43431L,43432L,43433L,43434L,43435L,43436L,43437L,43438L,43439L,43440L,
-43441L,43442L,43443L,43444L,43445L,43446L,43447L,43448L,43449L,43450L,
-43451L,43452L,43453L,43454L,43455L,43456L,43457L,43458L,43459L,43460L,
-43461L,43462L,43463L,43464L,43465L,43466L,43467L,43468L,43469L,43470L,
-43471L,43472L,43473L,43474L,43475L,43476L,43477L,43478L,43479L,43480L,
-43481L,43482L,43483L,43484L,43485L,43486L,43487L,43488L,43489L,43490L,
-43491L,43492L,43493L,43494L,43495L,43496L,43497L,43498L,43499L,43500L,
-43501L,43502L,43503L,43504L,43505L,43506L,43507L,43508L,43509L,43510L,
-43511L,43512L,43513L,43514L,43515L,43516L,43517L,43518L,43519L,43520L,
-43521L,43522L,43523L,43524L,43525L,43526L,43527L,43528L,43529L,43530L,
-43531L,43532L,43533L,43534L,43535L,43536L,43537L,43538L,43539L,43540L,
-43541L,43542L,43543L,43544L,43545L,43546L,43547L,43548L,43549L,43550L,
-43551L,43552L,43553L,43554L,43555L,43556L,43557L,43558L,43559L,43560L,
-43561L,43562L,43563L,43564L,43565L,43566L,43567L,43568L,43569L,43570L,
-43571L,43572L,43573L,43574L,43575L,43576L,43577L,43578L,43579L,43580L,
-43581L,43582L,43583L,43584L,43585L,43586L,43587L,43588L,43589L,43590L,
-43591L,43592L,43593L,43594L,43595L,43596L,43597L,43598L,43599L,43600L,
-43601L,43602L,43603L,43604L,43605L,43606L,43607L,43608L,43609L,43610L,
-43611L,43612L,43613L,43614L,43615L,43616L,43617L,43618L,43619L,43620L,
-43621L,43622L,43623L,43624L,43625L,43626L,43627L,43628L,43629L,43630L,
-43631L,43632L,43633L,43634L,43635L,43636L,43637L,43638L,43639L,43640L,
-43641L,43642L,43643L,43644L,43645L,43646L,43647L,43648L,43649L,43650L,
-43651L,43652L,43653L,43654L,43655L,43656L,43657L,43658L,43659L,43660L,
-43661L,43662L,43663L,43664L,43665L,43666L,43667L,43668L,43669L,43670L,
-43671L,43672L,43673L,43674L,43675L,43676L,43677L,43678L,43679L,43680L,
-43681L,43682L,43683L,43684L,43685L,43686L,43687L,43688L,43689L,43690L,
-43691L,43692L,43693L,43694L,43695L,43696L,43697L,43698L,43699L,43700L,
-43701L,43702L,43703L,43704L,43705L,43706L,43707L,43708L,43709L,43710L,
-43711L,43712L,43713L,43714L,43715L,43716L,43717L,43718L,43719L,43720L,
-43721L,43722L,43723L,43724L,43725L,43726L,43727L,43728L,43729L,43730L,
-43731L,43732L,43733L,43734L,43735L,43736L,43737L,43738L,43739L,43740L,
-43741L,43742L,43743L,43744L,43745L,43746L,43747L,43748L,43749L,43750L,
-43751L,43752L,43753L,43754L,43755L,43756L,43757L,43758L,43759L,43760L,
-43761L,43762L,43763L,43764L,43765L,43766L,43767L,43768L,43769L,43770L,
-43771L,43772L,43773L,43774L,43775L,43776L,43777L,43778L,43779L,43780L,
-43781L,43782L,43783L,43784L,43785L,43786L,43787L,43788L,43789L,43790L,
-43791L,43792L,43793L,43794L,43795L,43796L,43797L,43798L,43799L,43800L,
-43801L,43802L,43803L,43804L,43805L,43806L,43807L,43808L,43809L,43810L,
-43811L,43812L,43813L,43814L,43815L,43816L,43817L,43818L,43819L,43820L,
-43821L,43822L,43823L,43824L,43825L,43826L,43827L,43828L,43829L,43830L,
-43831L,43832L,43833L,43834L,43835L,43836L,43837L,43838L,43839L,43840L,
-43841L,43842L,43843L,43844L,43845L,43846L,43847L,43848L,43849L,43850L,
-43851L,43852L,43853L,43854L,43855L,43856L,43857L,43858L,42931L,43860L,
-43861L,43862L,43863L,43864L,43865L,43866L,43867L,43868L,43869L,43870L,
-43871L,43872L,43873L,43874L,43875L,43876L,43877L,43878L,43879L,43880L,
-43881L,43882L,43883L,43884L,43885L,43886L,43887L,5024,5025,5026,5027,5028,
-5029,5030,5031,5032,5033,5034,5035,5036,5037,5038,5039,5040,5041,5042,5043,
-5044,5045,5046,5047,5048,5049,5050,5051,5052,5053,5054,5055,5056,5057,5058,
-5059,5060,5061,5062,5063,5064,5065,5066,5067,5068,5069,5070,5071,5072,5073,
-5074,5075,5076,5077,5078,5079,5080,5081,5082,5083,5084,5085,5086,5087,5088,
-5089,5090,5091,5092,5093,5094,5095,5096,5097,5098,5099,5100,5101,5102,5103,
-43968L,43969L,43970L,43971L,43972L,43973L,43974L,43975L,43976L,43977L,
-43978L,43979L,43980L,43981L,43982L,43983L,43984L,43985L,43986L,43987L,
-43988L,43989L,43990L,43991L,43992L,43993L,43994L,43995L,43996L,43997L,
-43998L,43999L,44000L,44001L,44002L,44003L,44004L,44005L,44006L,44007L,
-44008L,44009L,44010L,44011L,44012L,44013L,44014L,44015L,44016L,44017L,
-44018L,44019L,44020L,44021L,44022L,44023L,44024L,44025L,44026L,44027L,
-44028L,44029L,44030L,44031L,44032L,44033L,44034L,44035L,44036L,44037L,
-44038L,44039L,44040L,44041L,44042L,44043L,44044L,44045L,44046L,44047L,
-44048L,44049L,44050L,44051L,44052L,44053L,44054L,44055L,44056L,44057L,
-44058L,44059L,44060L,44061L,44062L,44063L,44064L,44065L,44066L,44067L,
-44068L,44069L,44070L,44071L,44072L,44073L,44074L,44075L,44076L,44077L,
-44078L,44079L,44080L,44081L,44082L,44083L,44084L,44085L,44086L,44087L,
-44088L,44089L,44090L,44091L,44092L,44093L,44094L,44095L,44096L,44097L,
-44098L,44099L,44100L,44101L,44102L,44103L,44104L,44105L,44106L,44107L,
-44108L,44109L,44110L,44111L,44112L,44113L,44114L,44115L,44116L,44117L,
-44118L,44119L,44120L,44121L,44122L,44123L,44124L,44125L,44126L,44127L,
-44128L,44129L,44130L,44131L,44132L,44133L,44134L,44135L,44136L,44137L,
-44138L,44139L,44140L,44141L,44142L,44143L,44144L,44145L,44146L,44147L,
-44148L,44149L,44150L,44151L,44152L,44153L,44154L,44155L,44156L,44157L,
-44158L,44159L,44160L,44161L,44162L,44163L,44164L,44165L,44166L,44167L,
-44168L,44169L,44170L,44171L,44172L,44173L,44174L,44175L,44176L,44177L,
-44178L,44179L,44180L,44181L,44182L,44183L,44184L,44185L,44186L,44187L,
-44188L,44189L,44190L,44191L,44192L,44193L,44194L,44195L,44196L,44197L,
-44198L,44199L,44200L,44201L,44202L,44203L,44204L,44205L,44206L,44207L,
-44208L,44209L,44210L,44211L,44212L,44213L,44214L,44215L,44216L,44217L,
-44218L,44219L,44220L,44221L,44222L,44223L,44224L,44225L,44226L,44227L,
-44228L,44229L,44230L,44231L,44232L,44233L,44234L,44235L,44236L,44237L,
-44238L,44239L,44240L,44241L,44242L,44243L,44244L,44245L,44246L,44247L,
-44248L,44249L,44250L,44251L,44252L,44253L,44254L,44255L,44256L,44257L,
-44258L,44259L,44260L,44261L,44262L,44263L,44264L,44265L,44266L,44267L,
-44268L,44269L,44270L,44271L,44272L,44273L,44274L,44275L,44276L,44277L,
-44278L,44279L,44280L,44281L,44282L,44283L,44284L,44285L,44286L,44287L,
-44288L,44289L,44290L,44291L,44292L,44293L,44294L,44295L,44296L,44297L,
-44298L,44299L,44300L,44301L,44302L,44303L,44304L,44305L,44306L,44307L,
-44308L,44309L,44310L,44311L,44312L,44313L,44314L,44315L,44316L,44317L,
-44318L,44319L,44320L,44321L,44322L,44323L,44324L,44325L,44326L,44327L,
-44328L,44329L,44330L,44331L,44332L,44333L,44334L,44335L,44336L,44337L,
-44338L,44339L,44340L,44341L,44342L,44343L,44344L,44345L,44346L,44347L,
-44348L,44349L,44350L,44351L,44352L,44353L,44354L,44355L,44356L,44357L,
-44358L,44359L,44360L,44361L,44362L,44363L,44364L,44365L,44366L,44367L,
-44368L,44369L,44370L,44371L,44372L,44373L,44374L,44375L,44376L,44377L,
-44378L,44379L,44380L,44381L,44382L,44383L,44384L,44385L,44386L,44387L,
-44388L,44389L,44390L,44391L,44392L,44393L,44394L,44395L,44396L,44397L,
-44398L,44399L,44400L,44401L,44402L,44403L,44404L,44405L,44406L,44407L,
-44408L,44409L,44410L,44411L,44412L,44413L,44414L,44415L,44416L,44417L,
-44418L,44419L,44420L,44421L,44422L,44423L,44424L,44425L,44426L,44427L,
-44428L,44429L,44430L,44431L,44432L,44433L,44434L,44435L,44436L,44437L,
-44438L,44439L,44440L,44441L,44442L,44443L,44444L,44445L,44446L,44447L,
-44448L,44449L,44450L,44451L,44452L,44453L,44454L,44455L,44456L,44457L,
-44458L,44459L,44460L,44461L,44462L,44463L,44464L,44465L,44466L,44467L,
-44468L,44469L,44470L,44471L,44472L,44473L,44474L,44475L,44476L,44477L,
-44478L,44479L,44480L,44481L,44482L,44483L,44484L,44485L,44486L,44487L,
-44488L,44489L,44490L,44491L,44492L,44493L,44494L,44495L,44496L,44497L,
-44498L,44499L,44500L,44501L,44502L,44503L,44504L,44505L,44506L,44507L,
-44508L,44509L,44510L,44511L,44512L,44513L,44514L,44515L,44516L,44517L,
-44518L,44519L,44520L,44521L,44522L,44523L,44524L,44525L,44526L,44527L,
-44528L,44529L,44530L,44531L,44532L,44533L,44534L,44535L,44536L,44537L,
-44538L,44539L,44540L,44541L,44542L,44543L,44544L,44545L,44546L,44547L,
-44548L,44549L,44550L,44551L,44552L,44553L,44554L,44555L,44556L,44557L,
-44558L,44559L,44560L,44561L,44562L,44563L,44564L,44565L,44566L,44567L,
-44568L,44569L,44570L,44571L,44572L,44573L,44574L,44575L,44576L,44577L,
-44578L,44579L,44580L,44581L,44582L,44583L,44584L,44585L,44586L,44587L,
-44588L,44589L,44590L,44591L,44592L,44593L,44594L,44595L,44596L,44597L,
-44598L,44599L,44600L,44601L,44602L,44603L,44604L,44605L,44606L,44607L,
-44608L,44609L,44610L,44611L,44612L,44613L,44614L,44615L,44616L,44617L,
-44618L,44619L,44620L,44621L,44622L,44623L,44624L,44625L,44626L,44627L,
-44628L,44629L,44630L,44631L,44632L,44633L,44634L,44635L,44636L,44637L,
-44638L,44639L,44640L,44641L,44642L,44643L,44644L,44645L,44646L,44647L,
-44648L,44649L,44650L,44651L,44652L,44653L,44654L,44655L,44656L,44657L,
-44658L,44659L,44660L,44661L,44662L,44663L,44664L,44665L,44666L,44667L,
-44668L,44669L,44670L,44671L,44672L,44673L,44674L,44675L,44676L,44677L,
-44678L,44679L,44680L,44681L,44682L,44683L,44684L,44685L,44686L,44687L,
-44688L,44689L,44690L,44691L,44692L,44693L,44694L,44695L,44696L,44697L,
-44698L,44699L,44700L,44701L,44702L,44703L,44704L,44705L,44706L,44707L,
-44708L,44709L,44710L,44711L,44712L,44713L,44714L,44715L,44716L,44717L,
-44718L,44719L,44720L,44721L,44722L,44723L,44724L,44725L,44726L,44727L,
-44728L,44729L,44730L,44731L,44732L,44733L,44734L,44735L,44736L,44737L,
-44738L,44739L,44740L,44741L,44742L,44743L,44744L,44745L,44746L,44747L,
-44748L,44749L,44750L,44751L,44752L,44753L,44754L,44755L,44756L,44757L,
-44758L,44759L,44760L,44761L,44762L,44763L,44764L,44765L,44766L,44767L,
-44768L,44769L,44770L,44771L,44772L,44773L,44774L,44775L,44776L,44777L,
-44778L,44779L,44780L,44781L,44782L,44783L,44784L,44785L,44786L,44787L,
-44788L,44789L,44790L,44791L,44792L,44793L,44794L,44795L,44796L,44797L,
-44798L,44799L,44800L,44801L,44802L,44803L,44804L,44805L,44806L,44807L,
-44808L,44809L,44810L,44811L,44812L,44813L,44814L,44815L,44816L,44817L,
-44818L,44819L,44820L,44821L,44822L,44823L,44824L,44825L,44826L,44827L,
-44828L,44829L,44830L,44831L,44832L,44833L,44834L,44835L,44836L,44837L,
-44838L,44839L,44840L,44841L,44842L,44843L,44844L,44845L,44846L,44847L,
-44848L,44849L,44850L,44851L,44852L,44853L,44854L,44855L,44856L,44857L,
-44858L,44859L,44860L,44861L,44862L,44863L,44864L,44865L,44866L,44867L,
-44868L,44869L,44870L,44871L,44872L,44873L,44874L,44875L,44876L,44877L,
-44878L,44879L,44880L,44881L,44882L,44883L,44884L,44885L,44886L,44887L,
-44888L,44889L,44890L,44891L,44892L,44893L,44894L,44895L,44896L,44897L,
-44898L,44899L,44900L,44901L,44902L,44903L,44904L,44905L,44906L,44907L,
-44908L,44909L,44910L,44911L,44912L,44913L,44914L,44915L,44916L,44917L,
-44918L,44919L,44920L,44921L,44922L,44923L,44924L,44925L,44926L,44927L,
-44928L,44929L,44930L,44931L,44932L,44933L,44934L,44935L,44936L,44937L,
-44938L,44939L,44940L,44941L,44942L,44943L,44944L,44945L,44946L,44947L,
-44948L,44949L,44950L,44951L,44952L,44953L,44954L,44955L,44956L,44957L,
-44958L,44959L,44960L,44961L,44962L,44963L,44964L,44965L,44966L,44967L,
-44968L,44969L,44970L,44971L,44972L,44973L,44974L,44975L,44976L,44977L,
-44978L,44979L,44980L,44981L,44982L,44983L,44984L,44985L,44986L,44987L,
-44988L,44989L,44990L,44991L,44992L,44993L,44994L,44995L,44996L,44997L,
-44998L,44999L,45000L,45001L,45002L,45003L,45004L,45005L,45006L,45007L,
-45008L,45009L,45010L,45011L,45012L,45013L,45014L,45015L,45016L,45017L,
-45018L,45019L,45020L,45021L,45022L,45023L,45024L,45025L,45026L,45027L,
-45028L,45029L,45030L,45031L,45032L,45033L,45034L,45035L,45036L,45037L,
-45038L,45039L,45040L,45041L,45042L,45043L,45044L,45045L,45046L,45047L,
-45048L,45049L,45050L,45051L,45052L,45053L,45054L,45055L,45056L,45057L,
-45058L,45059L,45060L,45061L,45062L,45063L,45064L,45065L,45066L,45067L,
-45068L,45069L,45070L,45071L,45072L,45073L,45074L,45075L,45076L,45077L,
-45078L,45079L,45080L,45081L,45082L,45083L,45084L,45085L,45086L,45087L,
-45088L,45089L,45090L,45091L,45092L,45093L,45094L,45095L,45096L,45097L,
-45098L,45099L,45100L,45101L,45102L,45103L,45104L,45105L,45106L,45107L,
-45108L,45109L,45110L,45111L,45112L,45113L,45114L,45115L,45116L,45117L,
-45118L,45119L,45120L,45121L,45122L,45123L,45124L,45125L,45126L,45127L,
-45128L,45129L,45130L,45131L,45132L,45133L,45134L,45135L,45136L,45137L,
-45138L,45139L,45140L,45141L,45142L,45143L,45144L,45145L,45146L,45147L,
-45148L,45149L,45150L,45151L,45152L,45153L,45154L,45155L,45156L,45157L,
-45158L,45159L,45160L,45161L,45162L,45163L,45164L,45165L,45166L,45167L,
-45168L,45169L,45170L,45171L,45172L,45173L,45174L,45175L,45176L,45177L,
-45178L,45179L,45180L,45181L,45182L,45183L,45184L,45185L,45186L,45187L,
-45188L,45189L,45190L,45191L,45192L,45193L,45194L,45195L,45196L,45197L,
-45198L,45199L,45200L,45201L,45202L,45203L,45204L,45205L,45206L,45207L,
-45208L,45209L,45210L,45211L,45212L,45213L,45214L,45215L,45216L,45217L,
-45218L,45219L,45220L,45221L,45222L,45223L,45224L,45225L,45226L,45227L,
-45228L,45229L,45230L,45231L,45232L,45233L,45234L,45235L,45236L,45237L,
-45238L,45239L,45240L,45241L,45242L,45243L,45244L,45245L,45246L,45247L,
-45248L,45249L,45250L,45251L,45252L,45253L,45254L,45255L,45256L,45257L,
-45258L,45259L,45260L,45261L,45262L,45263L,45264L,45265L,45266L,45267L,
-45268L,45269L,45270L,45271L,45272L,45273L,45274L,45275L,45276L,45277L,
-45278L,45279L,45280L,45281L,45282L,45283L,45284L,45285L,45286L,45287L,
-45288L,45289L,45290L,45291L,45292L,45293L,45294L,45295L,45296L,45297L,
-45298L,45299L,45300L,45301L,45302L,45303L,45304L,45305L,45306L,45307L,
-45308L,45309L,45310L,45311L,45312L,45313L,45314L,45315L,45316L,45317L,
-45318L,45319L,45320L,45321L,45322L,45323L,45324L,45325L,45326L,45327L,
-45328L,45329L,45330L,45331L,45332L,45333L,45334L,45335L,45336L,45337L,
-45338L,45339L,45340L,45341L,45342L,45343L,45344L,45345L,45346L,45347L,
-45348L,45349L,45350L,45351L,45352L,45353L,45354L,45355L,45356L,45357L,
-45358L,45359L,45360L,45361L,45362L,45363L,45364L,45365L,45366L,45367L,
-45368L,45369L,45370L,45371L,45372L,45373L,45374L,45375L,45376L,45377L,
-45378L,45379L,45380L,45381L,45382L,45383L,45384L,45385L,45386L,45387L,
-45388L,45389L,45390L,45391L,45392L,45393L,45394L,45395L,45396L,45397L,
-45398L,45399L,45400L,45401L,45402L,45403L,45404L,45405L,45406L,45407L,
-45408L,45409L,45410L,45411L,45412L,45413L,45414L,45415L,45416L,45417L,
-45418L,45419L,45420L,45421L,45422L,45423L,45424L,45425L,45426L,45427L,
-45428L,45429L,45430L,45431L,45432L,45433L,45434L,45435L,45436L,45437L,
-45438L,45439L,45440L,45441L,45442L,45443L,45444L,45445L,45446L,45447L,
-45448L,45449L,45450L,45451L,45452L,45453L,45454L,45455L,45456L,45457L,
-45458L,45459L,45460L,45461L,45462L,45463L,45464L,45465L,45466L,45467L,
-45468L,45469L,45470L,45471L,45472L,45473L,45474L,45475L,45476L,45477L,
-45478L,45479L,45480L,45481L,45482L,45483L,45484L,45485L,45486L,45487L,
-45488L,45489L,45490L,45491L,45492L,45493L,45494L,45495L,45496L,45497L,
-45498L,45499L,45500L,45501L,45502L,45503L,45504L,45505L,45506L,45507L,
-45508L,45509L,45510L,45511L,45512L,45513L,45514L,45515L,45516L,45517L,
-45518L,45519L,45520L,45521L,45522L,45523L,45524L,45525L,45526L,45527L,
-45528L,45529L,45530L,45531L,45532L,45533L,45534L,45535L,45536L,45537L,
-45538L,45539L,45540L,45541L,45542L,45543L,45544L,45545L,45546L,45547L,
-45548L,45549L,45550L,45551L,45552L,45553L,45554L,45555L,45556L,45557L,
-45558L,45559L,45560L,45561L,45562L,45563L,45564L,45565L,45566L,45567L,
-45568L,45569L,45570L,45571L,45572L,45573L,45574L,45575L,45576L,45577L,
-45578L,45579L,45580L,45581L,45582L,45583L,45584L,45585L,45586L,45587L,
-45588L,45589L,45590L,45591L,45592L,45593L,45594L,45595L,45596L,45597L,
-45598L,45599L,45600L,45601L,45602L,45603L,45604L,45605L,45606L,45607L,
-45608L,45609L,45610L,45611L,45612L,45613L,45614L,45615L,45616L,45617L,
-45618L,45619L,45620L,45621L,45622L,45623L,45624L,45625L,45626L,45627L,
-45628L,45629L,45630L,45631L,45632L,45633L,45634L,45635L,45636L,45637L,
-45638L,45639L,45640L,45641L,45642L,45643L,45644L,45645L,45646L,45647L,
-45648L,45649L,45650L,45651L,45652L,45653L,45654L,45655L,45656L,45657L,
-45658L,45659L,45660L,45661L,45662L,45663L,45664L,45665L,45666L,45667L,
-45668L,45669L,45670L,45671L,45672L,45673L,45674L,45675L,45676L,45677L,
-45678L,45679L,45680L,45681L,45682L,45683L,45684L,45685L,45686L,45687L,
-45688L,45689L,45690L,45691L,45692L,45693L,45694L,45695L,45696L,45697L,
-45698L,45699L,45700L,45701L,45702L,45703L,45704L,45705L,45706L,45707L,
-45708L,45709L,45710L,45711L,45712L,45713L,45714L,45715L,45716L,45717L,
-45718L,45719L,45720L,45721L,45722L,45723L,45724L,45725L,45726L,45727L,
-45728L,45729L,45730L,45731L,45732L,45733L,45734L,45735L,45736L,45737L,
-45738L,45739L,45740L,45741L,45742L,45743L,45744L,45745L,45746L,45747L,
-45748L,45749L,45750L,45751L,45752L,45753L,45754L,45755L,45756L,45757L,
-45758L,45759L,45760L,45761L,45762L,45763L,45764L,45765L,45766L,45767L,
-45768L,45769L,45770L,45771L,45772L,45773L,45774L,45775L,45776L,45777L,
-45778L,45779L,45780L,45781L,45782L,45783L,45784L,45785L,45786L,45787L,
-45788L,45789L,45790L,45791L,45792L,45793L,45794L,45795L,45796L,45797L,
-45798L,45799L,45800L,45801L,45802L,45803L,45804L,45805L,45806L,45807L,
-45808L,45809L,45810L,45811L,45812L,45813L,45814L,45815L,45816L,45817L,
-45818L,45819L,45820L,45821L,45822L,45823L,45824L,45825L,45826L,45827L,
-45828L,45829L,45830L,45831L,45832L,45833L,45834L,45835L,45836L,45837L,
-45838L,45839L,45840L,45841L,45842L,45843L,45844L,45845L,45846L,45847L,
-45848L,45849L,45850L,45851L,45852L,45853L,45854L,45855L,45856L,45857L,
-45858L,45859L,45860L,45861L,45862L,45863L,45864L,45865L,45866L,45867L,
-45868L,45869L,45870L,45871L,45872L,45873L,45874L,45875L,45876L,45877L,
-45878L,45879L,45880L,45881L,45882L,45883L,45884L,45885L,45886L,45887L,
-45888L,45889L,45890L,45891L,45892L,45893L,45894L,45895L,45896L,45897L,
-45898L,45899L,45900L,45901L,45902L,45903L,45904L,45905L,45906L,45907L,
-45908L,45909L,45910L,45911L,45912L,45913L,45914L,45915L,45916L,45917L,
-45918L,45919L,45920L,45921L,45922L,45923L,45924L,45925L,45926L,45927L,
-45928L,45929L,45930L,45931L,45932L,45933L,45934L,45935L,45936L,45937L,
-45938L,45939L,45940L,45941L,45942L,45943L,45944L,45945L,45946L,45947L,
-45948L,45949L,45950L,45951L,45952L,45953L,45954L,45955L,45956L,45957L,
-45958L,45959L,45960L,45961L,45962L,45963L,45964L,45965L,45966L,45967L,
-45968L,45969L,45970L,45971L,45972L,45973L,45974L,45975L,45976L,45977L,
-45978L,45979L,45980L,45981L,45982L,45983L,45984L,45985L,45986L,45987L,
-45988L,45989L,45990L,45991L,45992L,45993L,45994L,45995L,45996L,45997L,
-45998L,45999L,46000L,46001L,46002L,46003L,46004L,46005L,46006L,46007L,
-46008L,46009L,46010L,46011L,46012L,46013L,46014L,46015L,46016L,46017L,
-46018L,46019L,46020L,46021L,46022L,46023L,46024L,46025L,46026L,46027L,
-46028L,46029L,46030L,46031L,46032L,46033L,46034L,46035L,46036L,46037L,
-46038L,46039L,46040L,46041L,46042L,46043L,46044L,46045L,46046L,46047L,
-46048L,46049L,46050L,46051L,46052L,46053L,46054L,46055L,46056L,46057L,
-46058L,46059L,46060L,46061L,46062L,46063L,46064L,46065L,46066L,46067L,
-46068L,46069L,46070L,46071L,46072L,46073L,46074L,46075L,46076L,46077L,
-46078L,46079L,46080L,46081L,46082L,46083L,46084L,46085L,46086L,46087L,
-46088L,46089L,46090L,46091L,46092L,46093L,46094L,46095L,46096L,46097L,
-46098L,46099L,46100L,46101L,46102L,46103L,46104L,46105L,46106L,46107L,
-46108L,46109L,46110L,46111L,46112L,46113L,46114L,46115L,46116L,46117L,
-46118L,46119L,46120L,46121L,46122L,46123L,46124L,46125L,46126L,46127L,
-46128L,46129L,46130L,46131L,46132L,46133L,46134L,46135L,46136L,46137L,
-46138L,46139L,46140L,46141L,46142L,46143L,46144L,46145L,46146L,46147L,
-46148L,46149L,46150L,46151L,46152L,46153L,46154L,46155L,46156L,46157L,
-46158L,46159L,46160L,46161L,46162L,46163L,46164L,46165L,46166L,46167L,
-46168L,46169L,46170L,46171L,46172L,46173L,46174L,46175L,46176L,46177L,
-46178L,46179L,46180L,46181L,46182L,46183L,46184L,46185L,46186L,46187L,
-46188L,46189L,46190L,46191L,46192L,46193L,46194L,46195L,46196L,46197L,
-46198L,46199L,46200L,46201L,46202L,46203L,46204L,46205L,46206L,46207L,
-46208L,46209L,46210L,46211L,46212L,46213L,46214L,46215L,46216L,46217L,
-46218L,46219L,46220L,46221L,46222L,46223L,46224L,46225L,46226L,46227L,
-46228L,46229L,46230L,46231L,46232L,46233L,46234L,46235L,46236L,46237L,
-46238L,46239L,46240L,46241L,46242L,46243L,46244L,46245L,46246L,46247L,
-46248L,46249L,46250L,46251L,46252L,46253L,46254L,46255L,46256L,46257L,
-46258L,46259L,46260L,46261L,46262L,46263L,46264L,46265L,46266L,46267L,
-46268L,46269L,46270L,46271L,46272L,46273L,46274L,46275L,46276L,46277L,
-46278L,46279L,46280L,46281L,46282L,46283L,46284L,46285L,46286L,46287L,
-46288L,46289L,46290L,46291L,46292L,46293L,46294L,46295L,46296L,46297L,
-46298L,46299L,46300L,46301L,46302L,46303L,46304L,46305L,46306L,46307L,
-46308L,46309L,46310L,46311L,46312L,46313L,46314L,46315L,46316L,46317L,
-46318L,46319L,46320L,46321L,46322L,46323L,46324L,46325L,46326L,46327L,
-46328L,46329L,46330L,46331L,46332L,46333L,46334L,46335L,46336L,46337L,
-46338L,46339L,46340L,46341L,46342L,46343L,46344L,46345L,46346L,46347L,
-46348L,46349L,46350L,46351L,46352L,46353L,46354L,46355L,46356L,46357L,
-46358L,46359L,46360L,46361L,46362L,46363L,46364L,46365L,46366L,46367L,
-46368L,46369L,46370L,46371L,46372L,46373L,46374L,46375L,46376L,46377L,
-46378L,46379L,46380L,46381L,46382L,46383L,46384L,46385L,46386L,46387L,
-46388L,46389L,46390L,46391L,46392L,46393L,46394L,46395L,46396L,46397L,
-46398L,46399L,46400L,46401L,46402L,46403L,46404L,46405L,46406L,46407L,
-46408L,46409L,46410L,46411L,46412L,46413L,46414L,46415L,46416L,46417L,
-46418L,46419L,46420L,46421L,46422L,46423L,46424L,46425L,46426L,46427L,
-46428L,46429L,46430L,46431L,46432L,46433L,46434L,46435L,46436L,46437L,
-46438L,46439L,46440L,46441L,46442L,46443L,46444L,46445L,46446L,46447L,
-46448L,46449L,46450L,46451L,46452L,46453L,46454L,46455L,46456L,46457L,
-46458L,46459L,46460L,46461L,46462L,46463L,46464L,46465L,46466L,46467L,
-46468L,46469L,46470L,46471L,46472L,46473L,46474L,46475L,46476L,46477L,
-46478L,46479L,46480L,46481L,46482L,46483L,46484L,46485L,46486L,46487L,
-46488L,46489L,46490L,46491L,46492L,46493L,46494L,46495L,46496L,46497L,
-46498L,46499L,46500L,46501L,46502L,46503L,46504L,46505L,46506L,46507L,
-46508L,46509L,46510L,46511L,46512L,46513L,46514L,46515L,46516L,46517L,
-46518L,46519L,46520L,46521L,46522L,46523L,46524L,46525L,46526L,46527L,
-46528L,46529L,46530L,46531L,46532L,46533L,46534L,46535L,46536L,46537L,
-46538L,46539L,46540L,46541L,46542L,46543L,46544L,46545L,46546L,46547L,
-46548L,46549L,46550L,46551L,46552L,46553L,46554L,46555L,46556L,46557L,
-46558L,46559L,46560L,46561L,46562L,46563L,46564L,46565L,46566L,46567L,
-46568L,46569L,46570L,46571L,46572L,46573L,46574L,46575L,46576L,46577L,
-46578L,46579L,46580L,46581L,46582L,46583L,46584L,46585L,46586L,46587L,
-46588L,46589L,46590L,46591L,46592L,46593L,46594L,46595L,46596L,46597L,
-46598L,46599L,46600L,46601L,46602L,46603L,46604L,46605L,46606L,46607L,
-46608L,46609L,46610L,46611L,46612L,46613L,46614L,46615L,46616L,46617L,
-46618L,46619L,46620L,46621L,46622L,46623L,46624L,46625L,46626L,46627L,
-46628L,46629L,46630L,46631L,46632L,46633L,46634L,46635L,46636L,46637L,
-46638L,46639L,46640L,46641L,46642L,46643L,46644L,46645L,46646L,46647L,
-46648L,46649L,46650L,46651L,46652L,46653L,46654L,46655L,46656L,46657L,
-46658L,46659L,46660L,46661L,46662L,46663L,46664L,46665L,46666L,46667L,
-46668L,46669L,46670L,46671L,46672L,46673L,46674L,46675L,46676L,46677L,
-46678L,46679L,46680L,46681L,46682L,46683L,46684L,46685L,46686L,46687L,
-46688L,46689L,46690L,46691L,46692L,46693L,46694L,46695L,46696L,46697L,
-46698L,46699L,46700L,46701L,46702L,46703L,46704L,46705L,46706L,46707L,
-46708L,46709L,46710L,46711L,46712L,46713L,46714L,46715L,46716L,46717L,
-46718L,46719L,46720L,46721L,46722L,46723L,46724L,46725L,46726L,46727L,
-46728L,46729L,46730L,46731L,46732L,46733L,46734L,46735L,46736L,46737L,
-46738L,46739L,46740L,46741L,46742L,46743L,46744L,46745L,46746L,46747L,
-46748L,46749L,46750L,46751L,46752L,46753L,46754L,46755L,46756L,46757L,
-46758L,46759L,46760L,46761L,46762L,46763L,46764L,46765L,46766L,46767L,
-46768L,46769L,46770L,46771L,46772L,46773L,46774L,46775L,46776L,46777L,
-46778L,46779L,46780L,46781L,46782L,46783L,46784L,46785L,46786L,46787L,
-46788L,46789L,46790L,46791L,46792L,46793L,46794L,46795L,46796L,46797L,
-46798L,46799L,46800L,46801L,46802L,46803L,46804L,46805L,46806L,46807L,
-46808L,46809L,46810L,46811L,46812L,46813L,46814L,46815L,46816L,46817L,
-46818L,46819L,46820L,46821L,46822L,46823L,46824L,46825L,46826L,46827L,
-46828L,46829L,46830L,46831L,46832L,46833L,46834L,46835L,46836L,46837L,
-46838L,46839L,46840L,46841L,46842L,46843L,46844L,46845L,46846L,46847L,
-46848L,46849L,46850L,46851L,46852L,46853L,46854L,46855L,46856L,46857L,
-46858L,46859L,46860L,46861L,46862L,46863L,46864L,46865L,46866L,46867L,
-46868L,46869L,46870L,46871L,46872L,46873L,46874L,46875L,46876L,46877L,
-46878L,46879L,46880L,46881L,46882L,46883L,46884L,46885L,46886L,46887L,
-46888L,46889L,46890L,46891L,46892L,46893L,46894L,46895L,46896L,46897L,
-46898L,46899L,46900L,46901L,46902L,46903L,46904L,46905L,46906L,46907L,
-46908L,46909L,46910L,46911L,46912L,46913L,46914L,46915L,46916L,46917L,
-46918L,46919L,46920L,46921L,46922L,46923L,46924L,46925L,46926L,46927L,
-46928L,46929L,46930L,46931L,46932L,46933L,46934L,46935L,46936L,46937L,
-46938L,46939L,46940L,46941L,46942L,46943L,46944L,46945L,46946L,46947L,
-46948L,46949L,46950L,46951L,46952L,46953L,46954L,46955L,46956L,46957L,
-46958L,46959L,46960L,46961L,46962L,46963L,46964L,46965L,46966L,46967L,
-46968L,46969L,46970L,46971L,46972L,46973L,46974L,46975L,46976L,46977L,
-46978L,46979L,46980L,46981L,46982L,46983L,46984L,46985L,46986L,46987L,
-46988L,46989L,46990L,46991L,46992L,46993L,46994L,46995L,46996L,46997L,
-46998L,46999L,47000L,47001L,47002L,47003L,47004L,47005L,47006L,47007L,
-47008L,47009L,47010L,47011L,47012L,47013L,47014L,47015L,47016L,47017L,
-47018L,47019L,47020L,47021L,47022L,47023L,47024L,47025L,47026L,47027L,
-47028L,47029L,47030L,47031L,47032L,47033L,47034L,47035L,47036L,47037L,
-47038L,47039L,47040L,47041L,47042L,47043L,47044L,47045L,47046L,47047L,
-47048L,47049L,47050L,47051L,47052L,47053L,47054L,47055L,47056L,47057L,
-47058L,47059L,47060L,47061L,47062L,47063L,47064L,47065L,47066L,47067L,
-47068L,47069L,47070L,47071L,47072L,47073L,47074L,47075L,47076L,47077L,
-47078L,47079L,47080L,47081L,47082L,47083L,47084L,47085L,47086L,47087L,
-47088L,47089L,47090L,47091L,47092L,47093L,47094L,47095L,47096L,47097L,
-47098L,47099L,47100L,47101L,47102L,47103L,47104L,47105L,47106L,47107L,
-47108L,47109L,47110L,47111L,47112L,47113L,47114L,47115L,47116L,47117L,
-47118L,47119L,47120L,47121L,47122L,47123L,47124L,47125L,47126L,47127L,
-47128L,47129L,47130L,47131L,47132L,47133L,47134L,47135L,47136L,47137L,
-47138L,47139L,47140L,47141L,47142L,47143L,47144L,47145L,47146L,47147L,
-47148L,47149L,47150L,47151L,47152L,47153L,47154L,47155L,47156L,47157L,
-47158L,47159L,47160L,47161L,47162L,47163L,47164L,47165L,47166L,47167L,
-47168L,47169L,47170L,47171L,47172L,47173L,47174L,47175L,47176L,47177L,
-47178L,47179L,47180L,47181L,47182L,47183L,47184L,47185L,47186L,47187L,
-47188L,47189L,47190L,47191L,47192L,47193L,47194L,47195L,47196L,47197L,
-47198L,47199L,47200L,47201L,47202L,47203L,47204L,47205L,47206L,47207L,
-47208L,47209L,47210L,47211L,47212L,47213L,47214L,47215L,47216L,47217L,
-47218L,47219L,47220L,47221L,47222L,47223L,47224L,47225L,47226L,47227L,
-47228L,47229L,47230L,47231L,47232L,47233L,47234L,47235L,47236L,47237L,
-47238L,47239L,47240L,47241L,47242L,47243L,47244L,47245L,47246L,47247L,
-47248L,47249L,47250L,47251L,47252L,47253L,47254L,47255L,47256L,47257L,
-47258L,47259L,47260L,47261L,47262L,47263L,47264L,47265L,47266L,47267L,
-47268L,47269L,47270L,47271L,47272L,47273L,47274L,47275L,47276L,47277L,
-47278L,47279L,47280L,47281L,47282L,47283L,47284L,47285L,47286L,47287L,
-47288L,47289L,47290L,47291L,47292L,47293L,47294L,47295L,47296L,47297L,
-47298L,47299L,47300L,47301L,47302L,47303L,47304L,47305L,47306L,47307L,
-47308L,47309L,47310L,47311L,47312L,47313L,47314L,47315L,47316L,47317L,
-47318L,47319L,47320L,47321L,47322L,47323L,47324L,47325L,47326L,47327L,
-47328L,47329L,47330L,47331L,47332L,47333L,47334L,47335L,47336L,47337L,
-47338L,47339L,47340L,47341L,47342L,47343L,47344L,47345L,47346L,47347L,
-47348L,47349L,47350L,47351L,47352L,47353L,47354L,47355L,47356L,47357L,
-47358L,47359L,47360L,47361L,47362L,47363L,47364L,47365L,47366L,47367L,
-47368L,47369L,47370L,47371L,47372L,47373L,47374L,47375L,47376L,47377L,
-47378L,47379L,47380L,47381L,47382L,47383L,47384L,47385L,47386L,47387L,
-47388L,47389L,47390L,47391L,47392L,47393L,47394L,47395L,47396L,47397L,
-47398L,47399L,47400L,47401L,47402L,47403L,47404L,47405L,47406L,47407L,
-47408L,47409L,47410L,47411L,47412L,47413L,47414L,47415L,47416L,47417L,
-47418L,47419L,47420L,47421L,47422L,47423L,47424L,47425L,47426L,47427L,
-47428L,47429L,47430L,47431L,47432L,47433L,47434L,47435L,47436L,47437L,
-47438L,47439L,47440L,47441L,47442L,47443L,47444L,47445L,47446L,47447L,
-47448L,47449L,47450L,47451L,47452L,47453L,47454L,47455L,47456L,47457L,
-47458L,47459L,47460L,47461L,47462L,47463L,47464L,47465L,47466L,47467L,
-47468L,47469L,47470L,47471L,47472L,47473L,47474L,47475L,47476L,47477L,
-47478L,47479L,47480L,47481L,47482L,47483L,47484L,47485L,47486L,47487L,
-47488L,47489L,47490L,47491L,47492L,47493L,47494L,47495L,47496L,47497L,
-47498L,47499L,47500L,47501L,47502L,47503L,47504L,47505L,47506L,47507L,
-47508L,47509L,47510L,47511L,47512L,47513L,47514L,47515L,47516L,47517L,
-47518L,47519L,47520L,47521L,47522L,47523L,47524L,47525L,47526L,47527L,
-47528L,47529L,47530L,47531L,47532L,47533L,47534L,47535L,47536L,47537L,
-47538L,47539L,47540L,47541L,47542L,47543L,47544L,47545L,47546L,47547L,
-47548L,47549L,47550L,47551L,47552L,47553L,47554L,47555L,47556L,47557L,
-47558L,47559L,47560L,47561L,47562L,47563L,47564L,47565L,47566L,47567L,
-47568L,47569L,47570L,47571L,47572L,47573L,47574L,47575L,47576L,47577L,
-47578L,47579L,47580L,47581L,47582L,47583L,47584L,47585L,47586L,47587L,
-47588L,47589L,47590L,47591L,47592L,47593L,47594L,47595L,47596L,47597L,
-47598L,47599L,47600L,47601L,47602L,47603L,47604L,47605L,47606L,47607L,
-47608L,47609L,47610L,47611L,47612L,47613L,47614L,47615L,47616L,47617L,
-47618L,47619L,47620L,47621L,47622L,47623L,47624L,47625L,47626L,47627L,
-47628L,47629L,47630L,47631L,47632L,47633L,47634L,47635L,47636L,47637L,
-47638L,47639L,47640L,47641L,47642L,47643L,47644L,47645L,47646L,47647L,
-47648L,47649L,47650L,47651L,47652L,47653L,47654L,47655L,47656L,47657L,
-47658L,47659L,47660L,47661L,47662L,47663L,47664L,47665L,47666L,47667L,
-47668L,47669L,47670L,47671L,47672L,47673L,47674L,47675L,47676L,47677L,
-47678L,47679L,47680L,47681L,47682L,47683L,47684L,47685L,47686L,47687L,
-47688L,47689L,47690L,47691L,47692L,47693L,47694L,47695L,47696L,47697L,
-47698L,47699L,47700L,47701L,47702L,47703L,47704L,47705L,47706L,47707L,
-47708L,47709L,47710L,47711L,47712L,47713L,47714L,47715L,47716L,47717L,
-47718L,47719L,47720L,47721L,47722L,47723L,47724L,47725L,47726L,47727L,
-47728L,47729L,47730L,47731L,47732L,47733L,47734L,47735L,47736L,47737L,
-47738L,47739L,47740L,47741L,47742L,47743L,47744L,47745L,47746L,47747L,
-47748L,47749L,47750L,47751L,47752L,47753L,47754L,47755L,47756L,47757L,
-47758L,47759L,47760L,47761L,47762L,47763L,47764L,47765L,47766L,47767L,
-47768L,47769L,47770L,47771L,47772L,47773L,47774L,47775L,47776L,47777L,
-47778L,47779L,47780L,47781L,47782L,47783L,47784L,47785L,47786L,47787L,
-47788L,47789L,47790L,47791L,47792L,47793L,47794L,47795L,47796L,47797L,
-47798L,47799L,47800L,47801L,47802L,47803L,47804L,47805L,47806L,47807L,
-47808L,47809L,47810L,47811L,47812L,47813L,47814L,47815L,47816L,47817L,
-47818L,47819L,47820L,47821L,47822L,47823L,47824L,47825L,47826L,47827L,
-47828L,47829L,47830L,47831L,47832L,47833L,47834L,47835L,47836L,47837L,
-47838L,47839L,47840L,47841L,47842L,47843L,47844L,47845L,47846L,47847L,
-47848L,47849L,47850L,47851L,47852L,47853L,47854L,47855L,47856L,47857L,
-47858L,47859L,47860L,47861L,47862L,47863L,47864L,47865L,47866L,47867L,
-47868L,47869L,47870L,47871L,47872L,47873L,47874L,47875L,47876L,47877L,
-47878L,47879L,47880L,47881L,47882L,47883L,47884L,47885L,47886L,47887L,
-47888L,47889L,47890L,47891L,47892L,47893L,47894L,47895L,47896L,47897L,
-47898L,47899L,47900L,47901L,47902L,47903L,47904L,47905L,47906L,47907L,
-47908L,47909L,47910L,47911L,47912L,47913L,47914L,47915L,47916L,47917L,
-47918L,47919L,47920L,47921L,47922L,47923L,47924L,47925L,47926L,47927L,
-47928L,47929L,47930L,47931L,47932L,47933L,47934L,47935L,47936L,47937L,
-47938L,47939L,47940L,47941L,47942L,47943L,47944L,47945L,47946L,47947L,
-47948L,47949L,47950L,47951L,47952L,47953L,47954L,47955L,47956L,47957L,
-47958L,47959L,47960L,47961L,47962L,47963L,47964L,47965L,47966L,47967L,
-47968L,47969L,47970L,47971L,47972L,47973L,47974L,47975L,47976L,47977L,
-47978L,47979L,47980L,47981L,47982L,47983L,47984L,47985L,47986L,47987L,
-47988L,47989L,47990L,47991L,47992L,47993L,47994L,47995L,47996L,47997L,
-47998L,47999L,48000L,48001L,48002L,48003L,48004L,48005L,48006L,48007L,
-48008L,48009L,48010L,48011L,48012L,48013L,48014L,48015L,48016L,48017L,
-48018L,48019L,48020L,48021L,48022L,48023L,48024L,48025L,48026L,48027L,
-48028L,48029L,48030L,48031L,48032L,48033L,48034L,48035L,48036L,48037L,
-48038L,48039L,48040L,48041L,48042L,48043L,48044L,48045L,48046L,48047L,
-48048L,48049L,48050L,48051L,48052L,48053L,48054L,48055L,48056L,48057L,
-48058L,48059L,48060L,48061L,48062L,48063L,48064L,48065L,48066L,48067L,
-48068L,48069L,48070L,48071L,48072L,48073L,48074L,48075L,48076L,48077L,
-48078L,48079L,48080L,48081L,48082L,48083L,48084L,48085L,48086L,48087L,
-48088L,48089L,48090L,48091L,48092L,48093L,48094L,48095L,48096L,48097L,
-48098L,48099L,48100L,48101L,48102L,48103L,48104L,48105L,48106L,48107L,
-48108L,48109L,48110L,48111L,48112L,48113L,48114L,48115L,48116L,48117L,
-48118L,48119L,48120L,48121L,48122L,48123L,48124L,48125L,48126L,48127L,
-48128L,48129L,48130L,48131L,48132L,48133L,48134L,48135L,48136L,48137L,
-48138L,48139L,48140L,48141L,48142L,48143L,48144L,48145L,48146L,48147L,
-48148L,48149L,48150L,48151L,48152L,48153L,48154L,48155L,48156L,48157L,
-48158L,48159L,48160L,48161L,48162L,48163L,48164L,48165L,48166L,48167L,
-48168L,48169L,48170L,48171L,48172L,48173L,48174L,48175L,48176L,48177L,
-48178L,48179L,48180L,48181L,48182L,48183L,48184L,48185L,48186L,48187L,
-48188L,48189L,48190L,48191L,48192L,48193L,48194L,48195L,48196L,48197L,
-48198L,48199L,48200L,48201L,48202L,48203L,48204L,48205L,48206L,48207L,
-48208L,48209L,48210L,48211L,48212L,48213L,48214L,48215L,48216L,48217L,
-48218L,48219L,48220L,48221L,48222L,48223L,48224L,48225L,48226L,48227L,
-48228L,48229L,48230L,48231L,48232L,48233L,48234L,48235L,48236L,48237L,
-48238L,48239L,48240L,48241L,48242L,48243L,48244L,48245L,48246L,48247L,
-48248L,48249L,48250L,48251L,48252L,48253L,48254L,48255L,48256L,48257L,
-48258L,48259L,48260L,48261L,48262L,48263L,48264L,48265L,48266L,48267L,
-48268L,48269L,48270L,48271L,48272L,48273L,48274L,48275L,48276L,48277L,
-48278L,48279L,48280L,48281L,48282L,48283L,48284L,48285L,48286L,48287L,
-48288L,48289L,48290L,48291L,48292L,48293L,48294L,48295L,48296L,48297L,
-48298L,48299L,48300L,48301L,48302L,48303L,48304L,48305L,48306L,48307L,
-48308L,48309L,48310L,48311L,48312L,48313L,48314L,48315L,48316L,48317L,
-48318L,48319L,48320L,48321L,48322L,48323L,48324L,48325L,48326L,48327L,
-48328L,48329L,48330L,48331L,48332L,48333L,48334L,48335L,48336L,48337L,
-48338L,48339L,48340L,48341L,48342L,48343L,48344L,48345L,48346L,48347L,
-48348L,48349L,48350L,48351L,48352L,48353L,48354L,48355L,48356L,48357L,
-48358L,48359L,48360L,48361L,48362L,48363L,48364L,48365L,48366L,48367L,
-48368L,48369L,48370L,48371L,48372L,48373L,48374L,48375L,48376L,48377L,
-48378L,48379L,48380L,48381L,48382L,48383L,48384L,48385L,48386L,48387L,
-48388L,48389L,48390L,48391L,48392L,48393L,48394L,48395L,48396L,48397L,
-48398L,48399L,48400L,48401L,48402L,48403L,48404L,48405L,48406L,48407L,
-48408L,48409L,48410L,48411L,48412L,48413L,48414L,48415L,48416L,48417L,
-48418L,48419L,48420L,48421L,48422L,48423L,48424L,48425L,48426L,48427L,
-48428L,48429L,48430L,48431L,48432L,48433L,48434L,48435L,48436L,48437L,
-48438L,48439L,48440L,48441L,48442L,48443L,48444L,48445L,48446L,48447L,
-48448L,48449L,48450L,48451L,48452L,48453L,48454L,48455L,48456L,48457L,
-48458L,48459L,48460L,48461L,48462L,48463L,48464L,48465L,48466L,48467L,
-48468L,48469L,48470L,48471L,48472L,48473L,48474L,48475L,48476L,48477L,
-48478L,48479L,48480L,48481L,48482L,48483L,48484L,48485L,48486L,48487L,
-48488L,48489L,48490L,48491L,48492L,48493L,48494L,48495L,48496L,48497L,
-48498L,48499L,48500L,48501L,48502L,48503L,48504L,48505L,48506L,48507L,
-48508L,48509L,48510L,48511L,48512L,48513L,48514L,48515L,48516L,48517L,
-48518L,48519L,48520L,48521L,48522L,48523L,48524L,48525L,48526L,48527L,
-48528L,48529L,48530L,48531L,48532L,48533L,48534L,48535L,48536L,48537L,
-48538L,48539L,48540L,48541L,48542L,48543L,48544L,48545L,48546L,48547L,
-48548L,48549L,48550L,48551L,48552L,48553L,48554L,48555L,48556L,48557L,
-48558L,48559L,48560L,48561L,48562L,48563L,48564L,48565L,48566L,48567L,
-48568L,48569L,48570L,48571L,48572L,48573L,48574L,48575L,48576L,48577L,
-48578L,48579L,48580L,48581L,48582L,48583L,48584L,48585L,48586L,48587L,
-48588L,48589L,48590L,48591L,48592L,48593L,48594L,48595L,48596L,48597L,
-48598L,48599L,48600L,48601L,48602L,48603L,48604L,48605L,48606L,48607L,
-48608L,48609L,48610L,48611L,48612L,48613L,48614L,48615L,48616L,48617L,
-48618L,48619L,48620L,48621L,48622L,48623L,48624L,48625L,48626L,48627L,
-48628L,48629L,48630L,48631L,48632L,48633L,48634L,48635L,48636L,48637L,
-48638L,48639L,48640L,48641L,48642L,48643L,48644L,48645L,48646L,48647L,
-48648L,48649L,48650L,48651L,48652L,48653L,48654L,48655L,48656L,48657L,
-48658L,48659L,48660L,48661L,48662L,48663L,48664L,48665L,48666L,48667L,
-48668L,48669L,48670L,48671L,48672L,48673L,48674L,48675L,48676L,48677L,
-48678L,48679L,48680L,48681L,48682L,48683L,48684L,48685L,48686L,48687L,
-48688L,48689L,48690L,48691L,48692L,48693L,48694L,48695L,48696L,48697L,
-48698L,48699L,48700L,48701L,48702L,48703L,48704L,48705L,48706L,48707L,
-48708L,48709L,48710L,48711L,48712L,48713L,48714L,48715L,48716L,48717L,
-48718L,48719L,48720L,48721L,48722L,48723L,48724L,48725L,48726L,48727L,
-48728L,48729L,48730L,48731L,48732L,48733L,48734L,48735L,48736L,48737L,
-48738L,48739L,48740L,48741L,48742L,48743L,48744L,48745L,48746L,48747L,
-48748L,48749L,48750L,48751L,48752L,48753L,48754L,48755L,48756L,48757L,
-48758L,48759L,48760L,48761L,48762L,48763L,48764L,48765L,48766L,48767L,
-48768L,48769L,48770L,48771L,48772L,48773L,48774L,48775L,48776L,48777L,
-48778L,48779L,48780L,48781L,48782L,48783L,48784L,48785L,48786L,48787L,
-48788L,48789L,48790L,48791L,48792L,48793L,48794L,48795L,48796L,48797L,
-48798L,48799L,48800L,48801L,48802L,48803L,48804L,48805L,48806L,48807L,
-48808L,48809L,48810L,48811L,48812L,48813L,48814L,48815L,48816L,48817L,
-48818L,48819L,48820L,48821L,48822L,48823L,48824L,48825L,48826L,48827L,
-48828L,48829L,48830L,48831L,48832L,48833L,48834L,48835L,48836L,48837L,
-48838L,48839L,48840L,48841L,48842L,48843L,48844L,48845L,48846L,48847L,
-48848L,48849L,48850L,48851L,48852L,48853L,48854L,48855L,48856L,48857L,
-48858L,48859L,48860L,48861L,48862L,48863L,48864L,48865L,48866L,48867L,
-48868L,48869L,48870L,48871L,48872L,48873L,48874L,48875L,48876L,48877L,
-48878L,48879L,48880L,48881L,48882L,48883L,48884L,48885L,48886L,48887L,
-48888L,48889L,48890L,48891L,48892L,48893L,48894L,48895L,48896L,48897L,
-48898L,48899L,48900L,48901L,48902L,48903L,48904L,48905L,48906L,48907L,
-48908L,48909L,48910L,48911L,48912L,48913L,48914L,48915L,48916L,48917L,
-48918L,48919L,48920L,48921L,48922L,48923L,48924L,48925L,48926L,48927L,
-48928L,48929L,48930L,48931L,48932L,48933L,48934L,48935L,48936L,48937L,
-48938L,48939L,48940L,48941L,48942L,48943L,48944L,48945L,48946L,48947L,
-48948L,48949L,48950L,48951L,48952L,48953L,48954L,48955L,48956L,48957L,
-48958L,48959L,48960L,48961L,48962L,48963L,48964L,48965L,48966L,48967L,
-48968L,48969L,48970L,48971L,48972L,48973L,48974L,48975L,48976L,48977L,
-48978L,48979L,48980L,48981L,48982L,48983L,48984L,48985L,48986L,48987L,
-48988L,48989L,48990L,48991L,48992L,48993L,48994L,48995L,48996L,48997L,
-48998L,48999L,49000L,49001L,49002L,49003L,49004L,49005L,49006L,49007L,
-49008L,49009L,49010L,49011L,49012L,49013L,49014L,49015L,49016L,49017L,
-49018L,49019L,49020L,49021L,49022L,49023L,49024L,49025L,49026L,49027L,
-49028L,49029L,49030L,49031L,49032L,49033L,49034L,49035L,49036L,49037L,
-49038L,49039L,49040L,49041L,49042L,49043L,49044L,49045L,49046L,49047L,
-49048L,49049L,49050L,49051L,49052L,49053L,49054L,49055L,49056L,49057L,
-49058L,49059L,49060L,49061L,49062L,49063L,49064L,49065L,49066L,49067L,
-49068L,49069L,49070L,49071L,49072L,49073L,49074L,49075L,49076L,49077L,
-49078L,49079L,49080L,49081L,49082L,49083L,49084L,49085L,49086L,49087L,
-49088L,49089L,49090L,49091L,49092L,49093L,49094L,49095L,49096L,49097L,
-49098L,49099L,49100L,49101L,49102L,49103L,49104L,49105L,49106L,49107L,
-49108L,49109L,49110L,49111L,49112L,49113L,49114L,49115L,49116L,49117L,
-49118L,49119L,49120L,49121L,49122L,49123L,49124L,49125L,49126L,49127L,
-49128L,49129L,49130L,49131L,49132L,49133L,49134L,49135L,49136L,49137L,
-49138L,49139L,49140L,49141L,49142L,49143L,49144L,49145L,49146L,49147L,
-49148L,49149L,49150L,49151L,49152L,49153L,49154L,49155L,49156L,49157L,
-49158L,49159L,49160L,49161L,49162L,49163L,49164L,49165L,49166L,49167L,
-49168L,49169L,49170L,49171L,49172L,49173L,49174L,49175L,49176L,49177L,
-49178L,49179L,49180L,49181L,49182L,49183L,49184L,49185L,49186L,49187L,
-49188L,49189L,49190L,49191L,49192L,49193L,49194L,49195L,49196L,49197L,
-49198L,49199L,49200L,49201L,49202L,49203L,49204L,49205L,49206L,49207L,
-49208L,49209L,49210L,49211L,49212L,49213L,49214L,49215L,49216L,49217L,
-49218L,49219L,49220L,49221L,49222L,49223L,49224L,49225L,49226L,49227L,
-49228L,49229L,49230L,49231L,49232L,49233L,49234L,49235L,49236L,49237L,
-49238L,49239L,49240L,49241L,49242L,49243L,49244L,49245L,49246L,49247L,
-49248L,49249L,49250L,49251L,49252L,49253L,49254L,49255L,49256L,49257L,
-49258L,49259L,49260L,49261L,49262L,49263L,49264L,49265L,49266L,49267L,
-49268L,49269L,49270L,49271L,49272L,49273L,49274L,49275L,49276L,49277L,
-49278L,49279L,49280L,49281L,49282L,49283L,49284L,49285L,49286L,49287L,
-49288L,49289L,49290L,49291L,49292L,49293L,49294L,49295L,49296L,49297L,
-49298L,49299L,49300L,49301L,49302L,49303L,49304L,49305L,49306L,49307L,
-49308L,49309L,49310L,49311L,49312L,49313L,49314L,49315L,49316L,49317L,
-49318L,49319L,49320L,49321L,49322L,49323L,49324L,49325L,49326L,49327L,
-49328L,49329L,49330L,49331L,49332L,49333L,49334L,49335L,49336L,49337L,
-49338L,49339L,49340L,49341L,49342L,49343L,49344L,49345L,49346L,49347L,
-49348L,49349L,49350L,49351L,49352L,49353L,49354L,49355L,49356L,49357L,
-49358L,49359L,49360L,49361L,49362L,49363L,49364L,49365L,49366L,49367L,
-49368L,49369L,49370L,49371L,49372L,49373L,49374L,49375L,49376L,49377L,
-49378L,49379L,49380L,49381L,49382L,49383L,49384L,49385L,49386L,49387L,
-49388L,49389L,49390L,49391L,49392L,49393L,49394L,49395L,49396L,49397L,
-49398L,49399L,49400L,49401L,49402L,49403L,49404L,49405L,49406L,49407L,
-49408L,49409L,49410L,49411L,49412L,49413L,49414L,49415L,49416L,49417L,
-49418L,49419L,49420L,49421L,49422L,49423L,49424L,49425L,49426L,49427L,
-49428L,49429L,49430L,49431L,49432L,49433L,49434L,49435L,49436L,49437L,
-49438L,49439L,49440L,49441L,49442L,49443L,49444L,49445L,49446L,49447L,
-49448L,49449L,49450L,49451L,49452L,49453L,49454L,49455L,49456L,49457L,
-49458L,49459L,49460L,49461L,49462L,49463L,49464L,49465L,49466L,49467L,
-49468L,49469L,49470L,49471L,49472L,49473L,49474L,49475L,49476L,49477L,
-49478L,49479L,49480L,49481L,49482L,49483L,49484L,49485L,49486L,49487L,
-49488L,49489L,49490L,49491L,49492L,49493L,49494L,49495L,49496L,49497L,
-49498L,49499L,49500L,49501L,49502L,49503L,49504L,49505L,49506L,49507L,
-49508L,49509L,49510L,49511L,49512L,49513L,49514L,49515L,49516L,49517L,
-49518L,49519L,49520L,49521L,49522L,49523L,49524L,49525L,49526L,49527L,
-49528L,49529L,49530L,49531L,49532L,49533L,49534L,49535L,49536L,49537L,
-49538L,49539L,49540L,49541L,49542L,49543L,49544L,49545L,49546L,49547L,
-49548L,49549L,49550L,49551L,49552L,49553L,49554L,49555L,49556L,49557L,
-49558L,49559L,49560L,49561L,49562L,49563L,49564L,49565L,49566L,49567L,
-49568L,49569L,49570L,49571L,49572L,49573L,49574L,49575L,49576L,49577L,
-49578L,49579L,49580L,49581L,49582L,49583L,49584L,49585L,49586L,49587L,
-49588L,49589L,49590L,49591L,49592L,49593L,49594L,49595L,49596L,49597L,
-49598L,49599L,49600L,49601L,49602L,49603L,49604L,49605L,49606L,49607L,
-49608L,49609L,49610L,49611L,49612L,49613L,49614L,49615L,49616L,49617L,
-49618L,49619L,49620L,49621L,49622L,49623L,49624L,49625L,49626L,49627L,
-49628L,49629L,49630L,49631L,49632L,49633L,49634L,49635L,49636L,49637L,
-49638L,49639L,49640L,49641L,49642L,49643L,49644L,49645L,49646L,49647L,
-49648L,49649L,49650L,49651L,49652L,49653L,49654L,49655L,49656L,49657L,
-49658L,49659L,49660L,49661L,49662L,49663L,49664L,49665L,49666L,49667L,
-49668L,49669L,49670L,49671L,49672L,49673L,49674L,49675L,49676L,49677L,
-49678L,49679L,49680L,49681L,49682L,49683L,49684L,49685L,49686L,49687L,
-49688L,49689L,49690L,49691L,49692L,49693L,49694L,49695L,49696L,49697L,
-49698L,49699L,49700L,49701L,49702L,49703L,49704L,49705L,49706L,49707L,
-49708L,49709L,49710L,49711L,49712L,49713L,49714L,49715L,49716L,49717L,
-49718L,49719L,49720L,49721L,49722L,49723L,49724L,49725L,49726L,49727L,
-49728L,49729L,49730L,49731L,49732L,49733L,49734L,49735L,49736L,49737L,
-49738L,49739L,49740L,49741L,49742L,49743L,49744L,49745L,49746L,49747L,
-49748L,49749L,49750L,49751L,49752L,49753L,49754L,49755L,49756L,49757L,
-49758L,49759L,49760L,49761L,49762L,49763L,49764L,49765L,49766L,49767L,
-49768L,49769L,49770L,49771L,49772L,49773L,49774L,49775L,49776L,49777L,
-49778L,49779L,49780L,49781L,49782L,49783L,49784L,49785L,49786L,49787L,
-49788L,49789L,49790L,49791L,49792L,49793L,49794L,49795L,49796L,49797L,
-49798L,49799L,49800L,49801L,49802L,49803L,49804L,49805L,49806L,49807L,
-49808L,49809L,49810L,49811L,49812L,49813L,49814L,49815L,49816L,49817L,
-49818L,49819L,49820L,49821L,49822L,49823L,49824L,49825L,49826L,49827L,
-49828L,49829L,49830L,49831L,49832L,49833L,49834L,49835L,49836L,49837L,
-49838L,49839L,49840L,49841L,49842L,49843L,49844L,49845L,49846L,49847L,
-49848L,49849L,49850L,49851L,49852L,49853L,49854L,49855L,49856L,49857L,
-49858L,49859L,49860L,49861L,49862L,49863L,49864L,49865L,49866L,49867L,
-49868L,49869L,49870L,49871L,49872L,49873L,49874L,49875L,49876L,49877L,
-49878L,49879L,49880L,49881L,49882L,49883L,49884L,49885L,49886L,49887L,
-49888L,49889L,49890L,49891L,49892L,49893L,49894L,49895L,49896L,49897L,
-49898L,49899L,49900L,49901L,49902L,49903L,49904L,49905L,49906L,49907L,
-49908L,49909L,49910L,49911L,49912L,49913L,49914L,49915L,49916L,49917L,
-49918L,49919L,49920L,49921L,49922L,49923L,49924L,49925L,49926L,49927L,
-49928L,49929L,49930L,49931L,49932L,49933L,49934L,49935L,49936L,49937L,
-49938L,49939L,49940L,49941L,49942L,49943L,49944L,49945L,49946L,49947L,
-49948L,49949L,49950L,49951L,49952L,49953L,49954L,49955L,49956L,49957L,
-49958L,49959L,49960L,49961L,49962L,49963L,49964L,49965L,49966L,49967L,
-49968L,49969L,49970L,49971L,49972L,49973L,49974L,49975L,49976L,49977L,
-49978L,49979L,49980L,49981L,49982L,49983L,49984L,49985L,49986L,49987L,
-49988L,49989L,49990L,49991L,49992L,49993L,49994L,49995L,49996L,49997L,
-49998L,49999L,50000L,50001L,50002L,50003L,50004L,50005L,50006L,50007L,
-50008L,50009L,50010L,50011L,50012L,50013L,50014L,50015L,50016L,50017L,
-50018L,50019L,50020L,50021L,50022L,50023L,50024L,50025L,50026L,50027L,
-50028L,50029L,50030L,50031L,50032L,50033L,50034L,50035L,50036L,50037L,
-50038L,50039L,50040L,50041L,50042L,50043L,50044L,50045L,50046L,50047L,
-50048L,50049L,50050L,50051L,50052L,50053L,50054L,50055L,50056L,50057L,
-50058L,50059L,50060L,50061L,50062L,50063L,50064L,50065L,50066L,50067L,
-50068L,50069L,50070L,50071L,50072L,50073L,50074L,50075L,50076L,50077L,
-50078L,50079L,50080L,50081L,50082L,50083L,50084L,50085L,50086L,50087L,
-50088L,50089L,50090L,50091L,50092L,50093L,50094L,50095L,50096L,50097L,
-50098L,50099L,50100L,50101L,50102L,50103L,50104L,50105L,50106L,50107L,
-50108L,50109L,50110L,50111L,50112L,50113L,50114L,50115L,50116L,50117L,
-50118L,50119L,50120L,50121L,50122L,50123L,50124L,50125L,50126L,50127L,
-50128L,50129L,50130L,50131L,50132L,50133L,50134L,50135L,50136L,50137L,
-50138L,50139L,50140L,50141L,50142L,50143L,50144L,50145L,50146L,50147L,
-50148L,50149L,50150L,50151L,50152L,50153L,50154L,50155L,50156L,50157L,
-50158L,50159L,50160L,50161L,50162L,50163L,50164L,50165L,50166L,50167L,
-50168L,50169L,50170L,50171L,50172L,50173L,50174L,50175L,50176L,50177L,
-50178L,50179L,50180L,50181L,50182L,50183L,50184L,50185L,50186L,50187L,
-50188L,50189L,50190L,50191L,50192L,50193L,50194L,50195L,50196L,50197L,
-50198L,50199L,50200L,50201L,50202L,50203L,50204L,50205L,50206L,50207L,
-50208L,50209L,50210L,50211L,50212L,50213L,50214L,50215L,50216L,50217L,
-50218L,50219L,50220L,50221L,50222L,50223L,50224L,50225L,50226L,50227L,
-50228L,50229L,50230L,50231L,50232L,50233L,50234L,50235L,50236L,50237L,
-50238L,50239L,50240L,50241L,50242L,50243L,50244L,50245L,50246L,50247L,
-50248L,50249L,50250L,50251L,50252L,50253L,50254L,50255L,50256L,50257L,
-50258L,50259L,50260L,50261L,50262L,50263L,50264L,50265L,50266L,50267L,
-50268L,50269L,50270L,50271L,50272L,50273L,50274L,50275L,50276L,50277L,
-50278L,50279L,50280L,50281L,50282L,50283L,50284L,50285L,50286L,50287L,
-50288L,50289L,50290L,50291L,50292L,50293L,50294L,50295L,50296L,50297L,
-50298L,50299L,50300L,50301L,50302L,50303L,50304L,50305L,50306L,50307L,
-50308L,50309L,50310L,50311L,50312L,50313L,50314L,50315L,50316L,50317L,
-50318L,50319L,50320L,50321L,50322L,50323L,50324L,50325L,50326L,50327L,
-50328L,50329L,50330L,50331L,50332L,50333L,50334L,50335L,50336L,50337L,
-50338L,50339L,50340L,50341L,50342L,50343L,50344L,50345L,50346L,50347L,
-50348L,50349L,50350L,50351L,50352L,50353L,50354L,50355L,50356L,50357L,
-50358L,50359L,50360L,50361L,50362L,50363L,50364L,50365L,50366L,50367L,
-50368L,50369L,50370L,50371L,50372L,50373L,50374L,50375L,50376L,50377L,
-50378L,50379L,50380L,50381L,50382L,50383L,50384L,50385L,50386L,50387L,
-50388L,50389L,50390L,50391L,50392L,50393L,50394L,50395L,50396L,50397L,
-50398L,50399L,50400L,50401L,50402L,50403L,50404L,50405L,50406L,50407L,
-50408L,50409L,50410L,50411L,50412L,50413L,50414L,50415L,50416L,50417L,
-50418L,50419L,50420L,50421L,50422L,50423L,50424L,50425L,50426L,50427L,
-50428L,50429L,50430L,50431L,50432L,50433L,50434L,50435L,50436L,50437L,
-50438L,50439L,50440L,50441L,50442L,50443L,50444L,50445L,50446L,50447L,
-50448L,50449L,50450L,50451L,50452L,50453L,50454L,50455L,50456L,50457L,
-50458L,50459L,50460L,50461L,50462L,50463L,50464L,50465L,50466L,50467L,
-50468L,50469L,50470L,50471L,50472L,50473L,50474L,50475L,50476L,50477L,
-50478L,50479L,50480L,50481L,50482L,50483L,50484L,50485L,50486L,50487L,
-50488L,50489L,50490L,50491L,50492L,50493L,50494L,50495L,50496L,50497L,
-50498L,50499L,50500L,50501L,50502L,50503L,50504L,50505L,50506L,50507L,
-50508L,50509L,50510L,50511L,50512L,50513L,50514L,50515L,50516L,50517L,
-50518L,50519L,50520L,50521L,50522L,50523L,50524L,50525L,50526L,50527L,
-50528L,50529L,50530L,50531L,50532L,50533L,50534L,50535L,50536L,50537L,
-50538L,50539L,50540L,50541L,50542L,50543L,50544L,50545L,50546L,50547L,
-50548L,50549L,50550L,50551L,50552L,50553L,50554L,50555L,50556L,50557L,
-50558L,50559L,50560L,50561L,50562L,50563L,50564L,50565L,50566L,50567L,
-50568L,50569L,50570L,50571L,50572L,50573L,50574L,50575L,50576L,50577L,
-50578L,50579L,50580L,50581L,50582L,50583L,50584L,50585L,50586L,50587L,
-50588L,50589L,50590L,50591L,50592L,50593L,50594L,50595L,50596L,50597L,
-50598L,50599L,50600L,50601L,50602L,50603L,50604L,50605L,50606L,50607L,
-50608L,50609L,50610L,50611L,50612L,50613L,50614L,50615L,50616L,50617L,
-50618L,50619L,50620L,50621L,50622L,50623L,50624L,50625L,50626L,50627L,
-50628L,50629L,50630L,50631L,50632L,50633L,50634L,50635L,50636L,50637L,
-50638L,50639L,50640L,50641L,50642L,50643L,50644L,50645L,50646L,50647L,
-50648L,50649L,50650L,50651L,50652L,50653L,50654L,50655L,50656L,50657L,
-50658L,50659L,50660L,50661L,50662L,50663L,50664L,50665L,50666L,50667L,
-50668L,50669L,50670L,50671L,50672L,50673L,50674L,50675L,50676L,50677L,
-50678L,50679L,50680L,50681L,50682L,50683L,50684L,50685L,50686L,50687L,
-50688L,50689L,50690L,50691L,50692L,50693L,50694L,50695L,50696L,50697L,
-50698L,50699L,50700L,50701L,50702L,50703L,50704L,50705L,50706L,50707L,
-50708L,50709L,50710L,50711L,50712L,50713L,50714L,50715L,50716L,50717L,
-50718L,50719L,50720L,50721L,50722L,50723L,50724L,50725L,50726L,50727L,
-50728L,50729L,50730L,50731L,50732L,50733L,50734L,50735L,50736L,50737L,
-50738L,50739L,50740L,50741L,50742L,50743L,50744L,50745L,50746L,50747L,
-50748L,50749L,50750L,50751L,50752L,50753L,50754L,50755L,50756L,50757L,
-50758L,50759L,50760L,50761L,50762L,50763L,50764L,50765L,50766L,50767L,
-50768L,50769L,50770L,50771L,50772L,50773L,50774L,50775L,50776L,50777L,
-50778L,50779L,50780L,50781L,50782L,50783L,50784L,50785L,50786L,50787L,
-50788L,50789L,50790L,50791L,50792L,50793L,50794L,50795L,50796L,50797L,
-50798L,50799L,50800L,50801L,50802L,50803L,50804L,50805L,50806L,50807L,
-50808L,50809L,50810L,50811L,50812L,50813L,50814L,50815L,50816L,50817L,
-50818L,50819L,50820L,50821L,50822L,50823L,50824L,50825L,50826L,50827L,
-50828L,50829L,50830L,50831L,50832L,50833L,50834L,50835L,50836L,50837L,
-50838L,50839L,50840L,50841L,50842L,50843L,50844L,50845L,50846L,50847L,
-50848L,50849L,50850L,50851L,50852L,50853L,50854L,50855L,50856L,50857L,
-50858L,50859L,50860L,50861L,50862L,50863L,50864L,50865L,50866L,50867L,
-50868L,50869L,50870L,50871L,50872L,50873L,50874L,50875L,50876L,50877L,
-50878L,50879L,50880L,50881L,50882L,50883L,50884L,50885L,50886L,50887L,
-50888L,50889L,50890L,50891L,50892L,50893L,50894L,50895L,50896L,50897L,
-50898L,50899L,50900L,50901L,50902L,50903L,50904L,50905L,50906L,50907L,
-50908L,50909L,50910L,50911L,50912L,50913L,50914L,50915L,50916L,50917L,
-50918L,50919L,50920L,50921L,50922L,50923L,50924L,50925L,50926L,50927L,
-50928L,50929L,50930L,50931L,50932L,50933L,50934L,50935L,50936L,50937L,
-50938L,50939L,50940L,50941L,50942L,50943L,50944L,50945L,50946L,50947L,
-50948L,50949L,50950L,50951L,50952L,50953L,50954L,50955L,50956L,50957L,
-50958L,50959L,50960L,50961L,50962L,50963L,50964L,50965L,50966L,50967L,
-50968L,50969L,50970L,50971L,50972L,50973L,50974L,50975L,50976L,50977L,
-50978L,50979L,50980L,50981L,50982L,50983L,50984L,50985L,50986L,50987L,
-50988L,50989L,50990L,50991L,50992L,50993L,50994L,50995L,50996L,50997L,
-50998L,50999L,51000L,51001L,51002L,51003L,51004L,51005L,51006L,51007L,
-51008L,51009L,51010L,51011L,51012L,51013L,51014L,51015L,51016L,51017L,
-51018L,51019L,51020L,51021L,51022L,51023L,51024L,51025L,51026L,51027L,
-51028L,51029L,51030L,51031L,51032L,51033L,51034L,51035L,51036L,51037L,
-51038L,51039L,51040L,51041L,51042L,51043L,51044L,51045L,51046L,51047L,
-51048L,51049L,51050L,51051L,51052L,51053L,51054L,51055L,51056L,51057L,
-51058L,51059L,51060L,51061L,51062L,51063L,51064L,51065L,51066L,51067L,
-51068L,51069L,51070L,51071L,51072L,51073L,51074L,51075L,51076L,51077L,
-51078L,51079L,51080L,51081L,51082L,51083L,51084L,51085L,51086L,51087L,
-51088L,51089L,51090L,51091L,51092L,51093L,51094L,51095L,51096L,51097L,
-51098L,51099L,51100L,51101L,51102L,51103L,51104L,51105L,51106L,51107L,
-51108L,51109L,51110L,51111L,51112L,51113L,51114L,51115L,51116L,51117L,
-51118L,51119L,51120L,51121L,51122L,51123L,51124L,51125L,51126L,51127L,
-51128L,51129L,51130L,51131L,51132L,51133L,51134L,51135L,51136L,51137L,
-51138L,51139L,51140L,51141L,51142L,51143L,51144L,51145L,51146L,51147L,
-51148L,51149L,51150L,51151L,51152L,51153L,51154L,51155L,51156L,51157L,
-51158L,51159L,51160L,51161L,51162L,51163L,51164L,51165L,51166L,51167L,
-51168L,51169L,51170L,51171L,51172L,51173L,51174L,51175L,51176L,51177L,
-51178L,51179L,51180L,51181L,51182L,51183L,51184L,51185L,51186L,51187L,
-51188L,51189L,51190L,51191L,51192L,51193L,51194L,51195L,51196L,51197L,
-51198L,51199L,51200L,51201L,51202L,51203L,51204L,51205L,51206L,51207L,
-51208L,51209L,51210L,51211L,51212L,51213L,51214L,51215L,51216L,51217L,
-51218L,51219L,51220L,51221L,51222L,51223L,51224L,51225L,51226L,51227L,
-51228L,51229L,51230L,51231L,51232L,51233L,51234L,51235L,51236L,51237L,
-51238L,51239L,51240L,51241L,51242L,51243L,51244L,51245L,51246L,51247L,
-51248L,51249L,51250L,51251L,51252L,51253L,51254L,51255L,51256L,51257L,
-51258L,51259L,51260L,51261L,51262L,51263L,51264L,51265L,51266L,51267L,
-51268L,51269L,51270L,51271L,51272L,51273L,51274L,51275L,51276L,51277L,
-51278L,51279L,51280L,51281L,51282L,51283L,51284L,51285L,51286L,51287L,
-51288L,51289L,51290L,51291L,51292L,51293L,51294L,51295L,51296L,51297L,
-51298L,51299L,51300L,51301L,51302L,51303L,51304L,51305L,51306L,51307L,
-51308L,51309L,51310L,51311L,51312L,51313L,51314L,51315L,51316L,51317L,
-51318L,51319L,51320L,51321L,51322L,51323L,51324L,51325L,51326L,51327L,
-51328L,51329L,51330L,51331L,51332L,51333L,51334L,51335L,51336L,51337L,
-51338L,51339L,51340L,51341L,51342L,51343L,51344L,51345L,51346L,51347L,
-51348L,51349L,51350L,51351L,51352L,51353L,51354L,51355L,51356L,51357L,
-51358L,51359L,51360L,51361L,51362L,51363L,51364L,51365L,51366L,51367L,
-51368L,51369L,51370L,51371L,51372L,51373L,51374L,51375L,51376L,51377L,
-51378L,51379L,51380L,51381L,51382L,51383L,51384L,51385L,51386L,51387L,
-51388L,51389L,51390L,51391L,51392L,51393L,51394L,51395L,51396L,51397L,
-51398L,51399L,51400L,51401L,51402L,51403L,51404L,51405L,51406L,51407L,
-51408L,51409L,51410L,51411L,51412L,51413L,51414L,51415L,51416L,51417L,
-51418L,51419L,51420L,51421L,51422L,51423L,51424L,51425L,51426L,51427L,
-51428L,51429L,51430L,51431L,51432L,51433L,51434L,51435L,51436L,51437L,
-51438L,51439L,51440L,51441L,51442L,51443L,51444L,51445L,51446L,51447L,
-51448L,51449L,51450L,51451L,51452L,51453L,51454L,51455L,51456L,51457L,
-51458L,51459L,51460L,51461L,51462L,51463L,51464L,51465L,51466L,51467L,
-51468L,51469L,51470L,51471L,51472L,51473L,51474L,51475L,51476L,51477L,
-51478L,51479L,51480L,51481L,51482L,51483L,51484L,51485L,51486L,51487L,
-51488L,51489L,51490L,51491L,51492L,51493L,51494L,51495L,51496L,51497L,
-51498L,51499L,51500L,51501L,51502L,51503L,51504L,51505L,51506L,51507L,
-51508L,51509L,51510L,51511L,51512L,51513L,51514L,51515L,51516L,51517L,
-51518L,51519L,51520L,51521L,51522L,51523L,51524L,51525L,51526L,51527L,
-51528L,51529L,51530L,51531L,51532L,51533L,51534L,51535L,51536L,51537L,
-51538L,51539L,51540L,51541L,51542L,51543L,51544L,51545L,51546L,51547L,
-51548L,51549L,51550L,51551L,51552L,51553L,51554L,51555L,51556L,51557L,
-51558L,51559L,51560L,51561L,51562L,51563L,51564L,51565L,51566L,51567L,
-51568L,51569L,51570L,51571L,51572L,51573L,51574L,51575L,51576L,51577L,
-51578L,51579L,51580L,51581L,51582L,51583L,51584L,51585L,51586L,51587L,
-51588L,51589L,51590L,51591L,51592L,51593L,51594L,51595L,51596L,51597L,
-51598L,51599L,51600L,51601L,51602L,51603L,51604L,51605L,51606L,51607L,
-51608L,51609L,51610L,51611L,51612L,51613L,51614L,51615L,51616L,51617L,
-51618L,51619L,51620L,51621L,51622L,51623L,51624L,51625L,51626L,51627L,
-51628L,51629L,51630L,51631L,51632L,51633L,51634L,51635L,51636L,51637L,
-51638L,51639L,51640L,51641L,51642L,51643L,51644L,51645L,51646L,51647L,
-51648L,51649L,51650L,51651L,51652L,51653L,51654L,51655L,51656L,51657L,
-51658L,51659L,51660L,51661L,51662L,51663L,51664L,51665L,51666L,51667L,
-51668L,51669L,51670L,51671L,51672L,51673L,51674L,51675L,51676L,51677L,
-51678L,51679L,51680L,51681L,51682L,51683L,51684L,51685L,51686L,51687L,
-51688L,51689L,51690L,51691L,51692L,51693L,51694L,51695L,51696L,51697L,
-51698L,51699L,51700L,51701L,51702L,51703L,51704L,51705L,51706L,51707L,
-51708L,51709L,51710L,51711L,51712L,51713L,51714L,51715L,51716L,51717L,
-51718L,51719L,51720L,51721L,51722L,51723L,51724L,51725L,51726L,51727L,
-51728L,51729L,51730L,51731L,51732L,51733L,51734L,51735L,51736L,51737L,
-51738L,51739L,51740L,51741L,51742L,51743L,51744L,51745L,51746L,51747L,
-51748L,51749L,51750L,51751L,51752L,51753L,51754L,51755L,51756L,51757L,
-51758L,51759L,51760L,51761L,51762L,51763L,51764L,51765L,51766L,51767L,
-51768L,51769L,51770L,51771L,51772L,51773L,51774L,51775L,51776L,51777L,
-51778L,51779L,51780L,51781L,51782L,51783L,51784L,51785L,51786L,51787L,
-51788L,51789L,51790L,51791L,51792L,51793L,51794L,51795L,51796L,51797L,
-51798L,51799L,51800L,51801L,51802L,51803L,51804L,51805L,51806L,51807L,
-51808L,51809L,51810L,51811L,51812L,51813L,51814L,51815L,51816L,51817L,
-51818L,51819L,51820L,51821L,51822L,51823L,51824L,51825L,51826L,51827L,
-51828L,51829L,51830L,51831L,51832L,51833L,51834L,51835L,51836L,51837L,
-51838L,51839L,51840L,51841L,51842L,51843L,51844L,51845L,51846L,51847L,
-51848L,51849L,51850L,51851L,51852L,51853L,51854L,51855L,51856L,51857L,
-51858L,51859L,51860L,51861L,51862L,51863L,51864L,51865L,51866L,51867L,
-51868L,51869L,51870L,51871L,51872L,51873L,51874L,51875L,51876L,51877L,
-51878L,51879L,51880L,51881L,51882L,51883L,51884L,51885L,51886L,51887L,
-51888L,51889L,51890L,51891L,51892L,51893L,51894L,51895L,51896L,51897L,
-51898L,51899L,51900L,51901L,51902L,51903L,51904L,51905L,51906L,51907L,
-51908L,51909L,51910L,51911L,51912L,51913L,51914L,51915L,51916L,51917L,
-51918L,51919L,51920L,51921L,51922L,51923L,51924L,51925L,51926L,51927L,
-51928L,51929L,51930L,51931L,51932L,51933L,51934L,51935L,51936L,51937L,
-51938L,51939L,51940L,51941L,51942L,51943L,51944L,51945L,51946L,51947L,
-51948L,51949L,51950L,51951L,51952L,51953L,51954L,51955L,51956L,51957L,
-51958L,51959L,51960L,51961L,51962L,51963L,51964L,51965L,51966L,51967L,
-51968L,51969L,51970L,51971L,51972L,51973L,51974L,51975L,51976L,51977L,
-51978L,51979L,51980L,51981L,51982L,51983L,51984L,51985L,51986L,51987L,
-51988L,51989L,51990L,51991L,51992L,51993L,51994L,51995L,51996L,51997L,
-51998L,51999L,52000L,52001L,52002L,52003L,52004L,52005L,52006L,52007L,
-52008L,52009L,52010L,52011L,52012L,52013L,52014L,52015L,52016L,52017L,
-52018L,52019L,52020L,52021L,52022L,52023L,52024L,52025L,52026L,52027L,
-52028L,52029L,52030L,52031L,52032L,52033L,52034L,52035L,52036L,52037L,
-52038L,52039L,52040L,52041L,52042L,52043L,52044L,52045L,52046L,52047L,
-52048L,52049L,52050L,52051L,52052L,52053L,52054L,52055L,52056L,52057L,
-52058L,52059L,52060L,52061L,52062L,52063L,52064L,52065L,52066L,52067L,
-52068L,52069L,52070L,52071L,52072L,52073L,52074L,52075L,52076L,52077L,
-52078L,52079L,52080L,52081L,52082L,52083L,52084L,52085L,52086L,52087L,
-52088L,52089L,52090L,52091L,52092L,52093L,52094L,52095L,52096L,52097L,
-52098L,52099L,52100L,52101L,52102L,52103L,52104L,52105L,52106L,52107L,
-52108L,52109L,52110L,52111L,52112L,52113L,52114L,52115L,52116L,52117L,
-52118L,52119L,52120L,52121L,52122L,52123L,52124L,52125L,52126L,52127L,
-52128L,52129L,52130L,52131L,52132L,52133L,52134L,52135L,52136L,52137L,
-52138L,52139L,52140L,52141L,52142L,52143L,52144L,52145L,52146L,52147L,
-52148L,52149L,52150L,52151L,52152L,52153L,52154L,52155L,52156L,52157L,
-52158L,52159L,52160L,52161L,52162L,52163L,52164L,52165L,52166L,52167L,
-52168L,52169L,52170L,52171L,52172L,52173L,52174L,52175L,52176L,52177L,
-52178L,52179L,52180L,52181L,52182L,52183L,52184L,52185L,52186L,52187L,
-52188L,52189L,52190L,52191L,52192L,52193L,52194L,52195L,52196L,52197L,
-52198L,52199L,52200L,52201L,52202L,52203L,52204L,52205L,52206L,52207L,
-52208L,52209L,52210L,52211L,52212L,52213L,52214L,52215L,52216L,52217L,
-52218L,52219L,52220L,52221L,52222L,52223L,52224L,52225L,52226L,52227L,
-52228L,52229L,52230L,52231L,52232L,52233L,52234L,52235L,52236L,52237L,
-52238L,52239L,52240L,52241L,52242L,52243L,52244L,52245L,52246L,52247L,
-52248L,52249L,52250L,52251L,52252L,52253L,52254L,52255L,52256L,52257L,
-52258L,52259L,52260L,52261L,52262L,52263L,52264L,52265L,52266L,52267L,
-52268L,52269L,52270L,52271L,52272L,52273L,52274L,52275L,52276L,52277L,
-52278L,52279L,52280L,52281L,52282L,52283L,52284L,52285L,52286L,52287L,
-52288L,52289L,52290L,52291L,52292L,52293L,52294L,52295L,52296L,52297L,
-52298L,52299L,52300L,52301L,52302L,52303L,52304L,52305L,52306L,52307L,
-52308L,52309L,52310L,52311L,52312L,52313L,52314L,52315L,52316L,52317L,
-52318L,52319L,52320L,52321L,52322L,52323L,52324L,52325L,52326L,52327L,
-52328L,52329L,52330L,52331L,52332L,52333L,52334L,52335L,52336L,52337L,
-52338L,52339L,52340L,52341L,52342L,52343L,52344L,52345L,52346L,52347L,
-52348L,52349L,52350L,52351L,52352L,52353L,52354L,52355L,52356L,52357L,
-52358L,52359L,52360L,52361L,52362L,52363L,52364L,52365L,52366L,52367L,
-52368L,52369L,52370L,52371L,52372L,52373L,52374L,52375L,52376L,52377L,
-52378L,52379L,52380L,52381L,52382L,52383L,52384L,52385L,52386L,52387L,
-52388L,52389L,52390L,52391L,52392L,52393L,52394L,52395L,52396L,52397L,
-52398L,52399L,52400L,52401L,52402L,52403L,52404L,52405L,52406L,52407L,
-52408L,52409L,52410L,52411L,52412L,52413L,52414L,52415L,52416L,52417L,
-52418L,52419L,52420L,52421L,52422L,52423L,52424L,52425L,52426L,52427L,
-52428L,52429L,52430L,52431L,52432L,52433L,52434L,52435L,52436L,52437L,
-52438L,52439L,52440L,52441L,52442L,52443L,52444L,52445L,52446L,52447L,
-52448L,52449L,52450L,52451L,52452L,52453L,52454L,52455L,52456L,52457L,
-52458L,52459L,52460L,52461L,52462L,52463L,52464L,52465L,52466L,52467L,
-52468L,52469L,52470L,52471L,52472L,52473L,52474L,52475L,52476L,52477L,
-52478L,52479L,52480L,52481L,52482L,52483L,52484L,52485L,52486L,52487L,
-52488L,52489L,52490L,52491L,52492L,52493L,52494L,52495L,52496L,52497L,
-52498L,52499L,52500L,52501L,52502L,52503L,52504L,52505L,52506L,52507L,
-52508L,52509L,52510L,52511L,52512L,52513L,52514L,52515L,52516L,52517L,
-52518L,52519L,52520L,52521L,52522L,52523L,52524L,52525L,52526L,52527L,
-52528L,52529L,52530L,52531L,52532L,52533L,52534L,52535L,52536L,52537L,
-52538L,52539L,52540L,52541L,52542L,52543L,52544L,52545L,52546L,52547L,
-52548L,52549L,52550L,52551L,52552L,52553L,52554L,52555L,52556L,52557L,
-52558L,52559L,52560L,52561L,52562L,52563L,52564L,52565L,52566L,52567L,
-52568L,52569L,52570L,52571L,52572L,52573L,52574L,52575L,52576L,52577L,
-52578L,52579L,52580L,52581L,52582L,52583L,52584L,52585L,52586L,52587L,
-52588L,52589L,52590L,52591L,52592L,52593L,52594L,52595L,52596L,52597L,
-52598L,52599L,52600L,52601L,52602L,52603L,52604L,52605L,52606L,52607L,
-52608L,52609L,52610L,52611L,52612L,52613L,52614L,52615L,52616L,52617L,
-52618L,52619L,52620L,52621L,52622L,52623L,52624L,52625L,52626L,52627L,
-52628L,52629L,52630L,52631L,52632L,52633L,52634L,52635L,52636L,52637L,
-52638L,52639L,52640L,52641L,52642L,52643L,52644L,52645L,52646L,52647L,
-52648L,52649L,52650L,52651L,52652L,52653L,52654L,52655L,52656L,52657L,
-52658L,52659L,52660L,52661L,52662L,52663L,52664L,52665L,52666L,52667L,
-52668L,52669L,52670L,52671L,52672L,52673L,52674L,52675L,52676L,52677L,
-52678L,52679L,52680L,52681L,52682L,52683L,52684L,52685L,52686L,52687L,
-52688L,52689L,52690L,52691L,52692L,52693L,52694L,52695L,52696L,52697L,
-52698L,52699L,52700L,52701L,52702L,52703L,52704L,52705L,52706L,52707L,
-52708L,52709L,52710L,52711L,52712L,52713L,52714L,52715L,52716L,52717L,
-52718L,52719L,52720L,52721L,52722L,52723L,52724L,52725L,52726L,52727L,
-52728L,52729L,52730L,52731L,52732L,52733L,52734L,52735L,52736L,52737L,
-52738L,52739L,52740L,52741L,52742L,52743L,52744L,52745L,52746L,52747L,
-52748L,52749L,52750L,52751L,52752L,52753L,52754L,52755L,52756L,52757L,
-52758L,52759L,52760L,52761L,52762L,52763L,52764L,52765L,52766L,52767L,
-52768L,52769L,52770L,52771L,52772L,52773L,52774L,52775L,52776L,52777L,
-52778L,52779L,52780L,52781L,52782L,52783L,52784L,52785L,52786L,52787L,
-52788L,52789L,52790L,52791L,52792L,52793L,52794L,52795L,52796L,52797L,
-52798L,52799L,52800L,52801L,52802L,52803L,52804L,52805L,52806L,52807L,
-52808L,52809L,52810L,52811L,52812L,52813L,52814L,52815L,52816L,52817L,
-52818L,52819L,52820L,52821L,52822L,52823L,52824L,52825L,52826L,52827L,
-52828L,52829L,52830L,52831L,52832L,52833L,52834L,52835L,52836L,52837L,
-52838L,52839L,52840L,52841L,52842L,52843L,52844L,52845L,52846L,52847L,
-52848L,52849L,52850L,52851L,52852L,52853L,52854L,52855L,52856L,52857L,
-52858L,52859L,52860L,52861L,52862L,52863L,52864L,52865L,52866L,52867L,
-52868L,52869L,52870L,52871L,52872L,52873L,52874L,52875L,52876L,52877L,
-52878L,52879L,52880L,52881L,52882L,52883L,52884L,52885L,52886L,52887L,
-52888L,52889L,52890L,52891L,52892L,52893L,52894L,52895L,52896L,52897L,
-52898L,52899L,52900L,52901L,52902L,52903L,52904L,52905L,52906L,52907L,
-52908L,52909L,52910L,52911L,52912L,52913L,52914L,52915L,52916L,52917L,
-52918L,52919L,52920L,52921L,52922L,52923L,52924L,52925L,52926L,52927L,
-52928L,52929L,52930L,52931L,52932L,52933L,52934L,52935L,52936L,52937L,
-52938L,52939L,52940L,52941L,52942L,52943L,52944L,52945L,52946L,52947L,
-52948L,52949L,52950L,52951L,52952L,52953L,52954L,52955L,52956L,52957L,
-52958L,52959L,52960L,52961L,52962L,52963L,52964L,52965L,52966L,52967L,
-52968L,52969L,52970L,52971L,52972L,52973L,52974L,52975L,52976L,52977L,
-52978L,52979L,52980L,52981L,52982L,52983L,52984L,52985L,52986L,52987L,
-52988L,52989L,52990L,52991L,52992L,52993L,52994L,52995L,52996L,52997L,
-52998L,52999L,53000L,53001L,53002L,53003L,53004L,53005L,53006L,53007L,
-53008L,53009L,53010L,53011L,53012L,53013L,53014L,53015L,53016L,53017L,
-53018L,53019L,53020L,53021L,53022L,53023L,53024L,53025L,53026L,53027L,
-53028L,53029L,53030L,53031L,53032L,53033L,53034L,53035L,53036L,53037L,
-53038L,53039L,53040L,53041L,53042L,53043L,53044L,53045L,53046L,53047L,
-53048L,53049L,53050L,53051L,53052L,53053L,53054L,53055L,53056L,53057L,
-53058L,53059L,53060L,53061L,53062L,53063L,53064L,53065L,53066L,53067L,
-53068L,53069L,53070L,53071L,53072L,53073L,53074L,53075L,53076L,53077L,
-53078L,53079L,53080L,53081L,53082L,53083L,53084L,53085L,53086L,53087L,
-53088L,53089L,53090L,53091L,53092L,53093L,53094L,53095L,53096L,53097L,
-53098L,53099L,53100L,53101L,53102L,53103L,53104L,53105L,53106L,53107L,
-53108L,53109L,53110L,53111L,53112L,53113L,53114L,53115L,53116L,53117L,
-53118L,53119L,53120L,53121L,53122L,53123L,53124L,53125L,53126L,53127L,
-53128L,53129L,53130L,53131L,53132L,53133L,53134L,53135L,53136L,53137L,
-53138L,53139L,53140L,53141L,53142L,53143L,53144L,53145L,53146L,53147L,
-53148L,53149L,53150L,53151L,53152L,53153L,53154L,53155L,53156L,53157L,
-53158L,53159L,53160L,53161L,53162L,53163L,53164L,53165L,53166L,53167L,
-53168L,53169L,53170L,53171L,53172L,53173L,53174L,53175L,53176L,53177L,
-53178L,53179L,53180L,53181L,53182L,53183L,53184L,53185L,53186L,53187L,
-53188L,53189L,53190L,53191L,53192L,53193L,53194L,53195L,53196L,53197L,
-53198L,53199L,53200L,53201L,53202L,53203L,53204L,53205L,53206L,53207L,
-53208L,53209L,53210L,53211L,53212L,53213L,53214L,53215L,53216L,53217L,
-53218L,53219L,53220L,53221L,53222L,53223L,53224L,53225L,53226L,53227L,
-53228L,53229L,53230L,53231L,53232L,53233L,53234L,53235L,53236L,53237L,
-53238L,53239L,53240L,53241L,53242L,53243L,53244L,53245L,53246L,53247L,
-53248L,53249L,53250L,53251L,53252L,53253L,53254L,53255L,53256L,53257L,
-53258L,53259L,53260L,53261L,53262L,53263L,53264L,53265L,53266L,53267L,
-53268L,53269L,53270L,53271L,53272L,53273L,53274L,53275L,53276L,53277L,
-53278L,53279L,53280L,53281L,53282L,53283L,53284L,53285L,53286L,53287L,
-53288L,53289L,53290L,53291L,53292L,53293L,53294L,53295L,53296L,53297L,
-53298L,53299L,53300L,53301L,53302L,53303L,53304L,53305L,53306L,53307L,
-53308L,53309L,53310L,53311L,53312L,53313L,53314L,53315L,53316L,53317L,
-53318L,53319L,53320L,53321L,53322L,53323L,53324L,53325L,53326L,53327L,
-53328L,53329L,53330L,53331L,53332L,53333L,53334L,53335L,53336L,53337L,
-53338L,53339L,53340L,53341L,53342L,53343L,53344L,53345L,53346L,53347L,
-53348L,53349L,53350L,53351L,53352L,53353L,53354L,53355L,53356L,53357L,
-53358L,53359L,53360L,53361L,53362L,53363L,53364L,53365L,53366L,53367L,
-53368L,53369L,53370L,53371L,53372L,53373L,53374L,53375L,53376L,53377L,
-53378L,53379L,53380L,53381L,53382L,53383L,53384L,53385L,53386L,53387L,
-53388L,53389L,53390L,53391L,53392L,53393L,53394L,53395L,53396L,53397L,
-53398L,53399L,53400L,53401L,53402L,53403L,53404L,53405L,53406L,53407L,
-53408L,53409L,53410L,53411L,53412L,53413L,53414L,53415L,53416L,53417L,
-53418L,53419L,53420L,53421L,53422L,53423L,53424L,53425L,53426L,53427L,
-53428L,53429L,53430L,53431L,53432L,53433L,53434L,53435L,53436L,53437L,
-53438L,53439L,53440L,53441L,53442L,53443L,53444L,53445L,53446L,53447L,
-53448L,53449L,53450L,53451L,53452L,53453L,53454L,53455L,53456L,53457L,
-53458L,53459L,53460L,53461L,53462L,53463L,53464L,53465L,53466L,53467L,
-53468L,53469L,53470L,53471L,53472L,53473L,53474L,53475L,53476L,53477L,
-53478L,53479L,53480L,53481L,53482L,53483L,53484L,53485L,53486L,53487L,
-53488L,53489L,53490L,53491L,53492L,53493L,53494L,53495L,53496L,53497L,
-53498L,53499L,53500L,53501L,53502L,53503L,53504L,53505L,53506L,53507L,
-53508L,53509L,53510L,53511L,53512L,53513L,53514L,53515L,53516L,53517L,
-53518L,53519L,53520L,53521L,53522L,53523L,53524L,53525L,53526L,53527L,
-53528L,53529L,53530L,53531L,53532L,53533L,53534L,53535L,53536L,53537L,
-53538L,53539L,53540L,53541L,53542L,53543L,53544L,53545L,53546L,53547L,
-53548L,53549L,53550L,53551L,53552L,53553L,53554L,53555L,53556L,53557L,
-53558L,53559L,53560L,53561L,53562L,53563L,53564L,53565L,53566L,53567L,
-53568L,53569L,53570L,53571L,53572L,53573L,53574L,53575L,53576L,53577L,
-53578L,53579L,53580L,53581L,53582L,53583L,53584L,53585L,53586L,53587L,
-53588L,53589L,53590L,53591L,53592L,53593L,53594L,53595L,53596L,53597L,
-53598L,53599L,53600L,53601L,53602L,53603L,53604L,53605L,53606L,53607L,
-53608L,53609L,53610L,53611L,53612L,53613L,53614L,53615L,53616L,53617L,
-53618L,53619L,53620L,53621L,53622L,53623L,53624L,53625L,53626L,53627L,
-53628L,53629L,53630L,53631L,53632L,53633L,53634L,53635L,53636L,53637L,
-53638L,53639L,53640L,53641L,53642L,53643L,53644L,53645L,53646L,53647L,
-53648L,53649L,53650L,53651L,53652L,53653L,53654L,53655L,53656L,53657L,
-53658L,53659L,53660L,53661L,53662L,53663L,53664L,53665L,53666L,53667L,
-53668L,53669L,53670L,53671L,53672L,53673L,53674L,53675L,53676L,53677L,
-53678L,53679L,53680L,53681L,53682L,53683L,53684L,53685L,53686L,53687L,
-53688L,53689L,53690L,53691L,53692L,53693L,53694L,53695L,53696L,53697L,
-53698L,53699L,53700L,53701L,53702L,53703L,53704L,53705L,53706L,53707L,
-53708L,53709L,53710L,53711L,53712L,53713L,53714L,53715L,53716L,53717L,
-53718L,53719L,53720L,53721L,53722L,53723L,53724L,53725L,53726L,53727L,
-53728L,53729L,53730L,53731L,53732L,53733L,53734L,53735L,53736L,53737L,
-53738L,53739L,53740L,53741L,53742L,53743L,53744L,53745L,53746L,53747L,
-53748L,53749L,53750L,53751L,53752L,53753L,53754L,53755L,53756L,53757L,
-53758L,53759L,53760L,53761L,53762L,53763L,53764L,53765L,53766L,53767L,
-53768L,53769L,53770L,53771L,53772L,53773L,53774L,53775L,53776L,53777L,
-53778L,53779L,53780L,53781L,53782L,53783L,53784L,53785L,53786L,53787L,
-53788L,53789L,53790L,53791L,53792L,53793L,53794L,53795L,53796L,53797L,
-53798L,53799L,53800L,53801L,53802L,53803L,53804L,53805L,53806L,53807L,
-53808L,53809L,53810L,53811L,53812L,53813L,53814L,53815L,53816L,53817L,
-53818L,53819L,53820L,53821L,53822L,53823L,53824L,53825L,53826L,53827L,
-53828L,53829L,53830L,53831L,53832L,53833L,53834L,53835L,53836L,53837L,
-53838L,53839L,53840L,53841L,53842L,53843L,53844L,53845L,53846L,53847L,
-53848L,53849L,53850L,53851L,53852L,53853L,53854L,53855L,53856L,53857L,
-53858L,53859L,53860L,53861L,53862L,53863L,53864L,53865L,53866L,53867L,
-53868L,53869L,53870L,53871L,53872L,53873L,53874L,53875L,53876L,53877L,
-53878L,53879L,53880L,53881L,53882L,53883L,53884L,53885L,53886L,53887L,
-53888L,53889L,53890L,53891L,53892L,53893L,53894L,53895L,53896L,53897L,
-53898L,53899L,53900L,53901L,53902L,53903L,53904L,53905L,53906L,53907L,
-53908L,53909L,53910L,53911L,53912L,53913L,53914L,53915L,53916L,53917L,
-53918L,53919L,53920L,53921L,53922L,53923L,53924L,53925L,53926L,53927L,
-53928L,53929L,53930L,53931L,53932L,53933L,53934L,53935L,53936L,53937L,
-53938L,53939L,53940L,53941L,53942L,53943L,53944L,53945L,53946L,53947L,
-53948L,53949L,53950L,53951L,53952L,53953L,53954L,53955L,53956L,53957L,
-53958L,53959L,53960L,53961L,53962L,53963L,53964L,53965L,53966L,53967L,
-53968L,53969L,53970L,53971L,53972L,53973L,53974L,53975L,53976L,53977L,
-53978L,53979L,53980L,53981L,53982L,53983L,53984L,53985L,53986L,53987L,
-53988L,53989L,53990L,53991L,53992L,53993L,53994L,53995L,53996L,53997L,
-53998L,53999L,54000L,54001L,54002L,54003L,54004L,54005L,54006L,54007L,
-54008L,54009L,54010L,54011L,54012L,54013L,54014L,54015L,54016L,54017L,
-54018L,54019L,54020L,54021L,54022L,54023L,54024L,54025L,54026L,54027L,
-54028L,54029L,54030L,54031L,54032L,54033L,54034L,54035L,54036L,54037L,
-54038L,54039L,54040L,54041L,54042L,54043L,54044L,54045L,54046L,54047L,
-54048L,54049L,54050L,54051L,54052L,54053L,54054L,54055L,54056L,54057L,
-54058L,54059L,54060L,54061L,54062L,54063L,54064L,54065L,54066L,54067L,
-54068L,54069L,54070L,54071L,54072L,54073L,54074L,54075L,54076L,54077L,
-54078L,54079L,54080L,54081L,54082L,54083L,54084L,54085L,54086L,54087L,
-54088L,54089L,54090L,54091L,54092L,54093L,54094L,54095L,54096L,54097L,
-54098L,54099L,54100L,54101L,54102L,54103L,54104L,54105L,54106L,54107L,
-54108L,54109L,54110L,54111L,54112L,54113L,54114L,54115L,54116L,54117L,
-54118L,54119L,54120L,54121L,54122L,54123L,54124L,54125L,54126L,54127L,
-54128L,54129L,54130L,54131L,54132L,54133L,54134L,54135L,54136L,54137L,
-54138L,54139L,54140L,54141L,54142L,54143L,54144L,54145L,54146L,54147L,
-54148L,54149L,54150L,54151L,54152L,54153L,54154L,54155L,54156L,54157L,
-54158L,54159L,54160L,54161L,54162L,54163L,54164L,54165L,54166L,54167L,
-54168L,54169L,54170L,54171L,54172L,54173L,54174L,54175L,54176L,54177L,
-54178L,54179L,54180L,54181L,54182L,54183L,54184L,54185L,54186L,54187L,
-54188L,54189L,54190L,54191L,54192L,54193L,54194L,54195L,54196L,54197L,
-54198L,54199L,54200L,54201L,54202L,54203L,54204L,54205L,54206L,54207L,
-54208L,54209L,54210L,54211L,54212L,54213L,54214L,54215L,54216L,54217L,
-54218L,54219L,54220L,54221L,54222L,54223L,54224L,54225L,54226L,54227L,
-54228L,54229L,54230L,54231L,54232L,54233L,54234L,54235L,54236L,54237L,
-54238L,54239L,54240L,54241L,54242L,54243L,54244L,54245L,54246L,54247L,
-54248L,54249L,54250L,54251L,54252L,54253L,54254L,54255L,54256L,54257L,
-54258L,54259L,54260L,54261L,54262L,54263L,54264L,54265L,54266L,54267L,
-54268L,54269L,54270L,54271L,54272L,54273L,54274L,54275L,54276L,54277L,
-54278L,54279L,54280L,54281L,54282L,54283L,54284L,54285L,54286L,54287L,
-54288L,54289L,54290L,54291L,54292L,54293L,54294L,54295L,54296L,54297L,
-54298L,54299L,54300L,54301L,54302L,54303L,54304L,54305L,54306L,54307L,
-54308L,54309L,54310L,54311L,54312L,54313L,54314L,54315L,54316L,54317L,
-54318L,54319L,54320L,54321L,54322L,54323L,54324L,54325L,54326L,54327L,
-54328L,54329L,54330L,54331L,54332L,54333L,54334L,54335L,54336L,54337L,
-54338L,54339L,54340L,54341L,54342L,54343L,54344L,54345L,54346L,54347L,
-54348L,54349L,54350L,54351L,54352L,54353L,54354L,54355L,54356L,54357L,
-54358L,54359L,54360L,54361L,54362L,54363L,54364L,54365L,54366L,54367L,
-54368L,54369L,54370L,54371L,54372L,54373L,54374L,54375L,54376L,54377L,
-54378L,54379L,54380L,54381L,54382L,54383L,54384L,54385L,54386L,54387L,
-54388L,54389L,54390L,54391L,54392L,54393L,54394L,54395L,54396L,54397L,
-54398L,54399L,54400L,54401L,54402L,54403L,54404L,54405L,54406L,54407L,
-54408L,54409L,54410L,54411L,54412L,54413L,54414L,54415L,54416L,54417L,
-54418L,54419L,54420L,54421L,54422L,54423L,54424L,54425L,54426L,54427L,
-54428L,54429L,54430L,54431L,54432L,54433L,54434L,54435L,54436L,54437L,
-54438L,54439L,54440L,54441L,54442L,54443L,54444L,54445L,54446L,54447L,
-54448L,54449L,54450L,54451L,54452L,54453L,54454L,54455L,54456L,54457L,
-54458L,54459L,54460L,54461L,54462L,54463L,54464L,54465L,54466L,54467L,
-54468L,54469L,54470L,54471L,54472L,54473L,54474L,54475L,54476L,54477L,
-54478L,54479L,54480L,54481L,54482L,54483L,54484L,54485L,54486L,54487L,
-54488L,54489L,54490L,54491L,54492L,54493L,54494L,54495L,54496L,54497L,
-54498L,54499L,54500L,54501L,54502L,54503L,54504L,54505L,54506L,54507L,
-54508L,54509L,54510L,54511L,54512L,54513L,54514L,54515L,54516L,54517L,
-54518L,54519L,54520L,54521L,54522L,54523L,54524L,54525L,54526L,54527L,
-54528L,54529L,54530L,54531L,54532L,54533L,54534L,54535L,54536L,54537L,
-54538L,54539L,54540L,54541L,54542L,54543L,54544L,54545L,54546L,54547L,
-54548L,54549L,54550L,54551L,54552L,54553L,54554L,54555L,54556L,54557L,
-54558L,54559L,54560L,54561L,54562L,54563L,54564L,54565L,54566L,54567L,
-54568L,54569L,54570L,54571L,54572L,54573L,54574L,54575L,54576L,54577L,
-54578L,54579L,54580L,54581L,54582L,54583L,54584L,54585L,54586L,54587L,
-54588L,54589L,54590L,54591L,54592L,54593L,54594L,54595L,54596L,54597L,
-54598L,54599L,54600L,54601L,54602L,54603L,54604L,54605L,54606L,54607L,
-54608L,54609L,54610L,54611L,54612L,54613L,54614L,54615L,54616L,54617L,
-54618L,54619L,54620L,54621L,54622L,54623L,54624L,54625L,54626L,54627L,
-54628L,54629L,54630L,54631L,54632L,54633L,54634L,54635L,54636L,54637L,
-54638L,54639L,54640L,54641L,54642L,54643L,54644L,54645L,54646L,54647L,
-54648L,54649L,54650L,54651L,54652L,54653L,54654L,54655L,54656L,54657L,
-54658L,54659L,54660L,54661L,54662L,54663L,54664L,54665L,54666L,54667L,
-54668L,54669L,54670L,54671L,54672L,54673L,54674L,54675L,54676L,54677L,
-54678L,54679L,54680L,54681L,54682L,54683L,54684L,54685L,54686L,54687L,
-54688L,54689L,54690L,54691L,54692L,54693L,54694L,54695L,54696L,54697L,
-54698L,54699L,54700L,54701L,54702L,54703L,54704L,54705L,54706L,54707L,
-54708L,54709L,54710L,54711L,54712L,54713L,54714L,54715L,54716L,54717L,
-54718L,54719L,54720L,54721L,54722L,54723L,54724L,54725L,54726L,54727L,
-54728L,54729L,54730L,54731L,54732L,54733L,54734L,54735L,54736L,54737L,
-54738L,54739L,54740L,54741L,54742L,54743L,54744L,54745L,54746L,54747L,
-54748L,54749L,54750L,54751L,54752L,54753L,54754L,54755L,54756L,54757L,
-54758L,54759L,54760L,54761L,54762L,54763L,54764L,54765L,54766L,54767L,
-54768L,54769L,54770L,54771L,54772L,54773L,54774L,54775L,54776L,54777L,
-54778L,54779L,54780L,54781L,54782L,54783L,54784L,54785L,54786L,54787L,
-54788L,54789L,54790L,54791L,54792L,54793L,54794L,54795L,54796L,54797L,
-54798L,54799L,54800L,54801L,54802L,54803L,54804L,54805L,54806L,54807L,
-54808L,54809L,54810L,54811L,54812L,54813L,54814L,54815L,54816L,54817L,
-54818L,54819L,54820L,54821L,54822L,54823L,54824L,54825L,54826L,54827L,
-54828L,54829L,54830L,54831L,54832L,54833L,54834L,54835L,54836L,54837L,
-54838L,54839L,54840L,54841L,54842L,54843L,54844L,54845L,54846L,54847L,
-54848L,54849L,54850L,54851L,54852L,54853L,54854L,54855L,54856L,54857L,
-54858L,54859L,54860L,54861L,54862L,54863L,54864L,54865L,54866L,54867L,
-54868L,54869L,54870L,54871L,54872L,54873L,54874L,54875L,54876L,54877L,
-54878L,54879L,54880L,54881L,54882L,54883L,54884L,54885L,54886L,54887L,
-54888L,54889L,54890L,54891L,54892L,54893L,54894L,54895L,54896L,54897L,
-54898L,54899L,54900L,54901L,54902L,54903L,54904L,54905L,54906L,54907L,
-54908L,54909L,54910L,54911L,54912L,54913L,54914L,54915L,54916L,54917L,
-54918L,54919L,54920L,54921L,54922L,54923L,54924L,54925L,54926L,54927L,
-54928L,54929L,54930L,54931L,54932L,54933L,54934L,54935L,54936L,54937L,
-54938L,54939L,54940L,54941L,54942L,54943L,54944L,54945L,54946L,54947L,
-54948L,54949L,54950L,54951L,54952L,54953L,54954L,54955L,54956L,54957L,
-54958L,54959L,54960L,54961L,54962L,54963L,54964L,54965L,54966L,54967L,
-54968L,54969L,54970L,54971L,54972L,54973L,54974L,54975L,54976L,54977L,
-54978L,54979L,54980L,54981L,54982L,54983L,54984L,54985L,54986L,54987L,
-54988L,54989L,54990L,54991L,54992L,54993L,54994L,54995L,54996L,54997L,
-54998L,54999L,55000L,55001L,55002L,55003L,55004L,55005L,55006L,55007L,
-55008L,55009L,55010L,55011L,55012L,55013L,55014L,55015L,55016L,55017L,
-55018L,55019L,55020L,55021L,55022L,55023L,55024L,55025L,55026L,55027L,
-55028L,55029L,55030L,55031L,55032L,55033L,55034L,55035L,55036L,55037L,
-55038L,55039L,55040L,55041L,55042L,55043L,55044L,55045L,55046L,55047L,
-55048L,55049L,55050L,55051L,55052L,55053L,55054L,55055L,55056L,55057L,
-55058L,55059L,55060L,55061L,55062L,55063L,55064L,55065L,55066L,55067L,
-55068L,55069L,55070L,55071L,55072L,55073L,55074L,55075L,55076L,55077L,
-55078L,55079L,55080L,55081L,55082L,55083L,55084L,55085L,55086L,55087L,
-55088L,55089L,55090L,55091L,55092L,55093L,55094L,55095L,55096L,55097L,
-55098L,55099L,55100L,55101L,55102L,55103L,55104L,55105L,55106L,55107L,
-55108L,55109L,55110L,55111L,55112L,55113L,55114L,55115L,55116L,55117L,
-55118L,55119L,55120L,55121L,55122L,55123L,55124L,55125L,55126L,55127L,
-55128L,55129L,55130L,55131L,55132L,55133L,55134L,55135L,55136L,55137L,
-55138L,55139L,55140L,55141L,55142L,55143L,55144L,55145L,55146L,55147L,
-55148L,55149L,55150L,55151L,55152L,55153L,55154L,55155L,55156L,55157L,
-55158L,55159L,55160L,55161L,55162L,55163L,55164L,55165L,55166L,55167L,
-55168L,55169L,55170L,55171L,55172L,55173L,55174L,55175L,55176L,55177L,
-55178L,55179L,55180L,55181L,55182L,55183L,55184L,55185L,55186L,55187L,
-55188L,55189L,55190L,55191L,55192L,55193L,55194L,55195L,55196L,55197L,
-55198L,55199L,55200L,55201L,55202L,55203L,55204L,55205L,55206L,55207L,
-55208L,55209L,55210L,55211L,55212L,55213L,55214L,55215L,55216L,55217L,
-55218L,55219L,55220L,55221L,55222L,55223L,55224L,55225L,55226L,55227L,
-55228L,55229L,55230L,55231L,55232L,55233L,55234L,55235L,55236L,55237L,
-55238L,55239L,55240L,55241L,55242L,55243L,55244L,55245L,55246L,55247L,
-55248L,55249L,55250L,55251L,55252L,55253L,55254L,55255L,55256L,55257L,
-55258L,55259L,55260L,55261L,55262L,55263L,55264L,55265L,55266L,55267L,
-55268L,55269L,55270L,55271L,55272L,55273L,55274L,55275L,55276L,55277L,
-55278L,55279L,55280L,55281L,55282L,55283L,55284L,55285L,55286L,55287L,
-55288L,55289L,55290L,55291L,55292L,55293L,55294L,55295L,55296L,55297L,
-55298L,55299L,55300L,55301L,55302L,55303L,55304L,55305L,55306L,55307L,
-55308L,55309L,55310L,55311L,55312L,55313L,55314L,55315L,55316L,55317L,
-55318L,55319L,55320L,55321L,55322L,55323L,55324L,55325L,55326L,55327L,
-55328L,55329L,55330L,55331L,55332L,55333L,55334L,55335L,55336L,55337L,
-55338L,55339L,55340L,55341L,55342L,55343L,55344L,55345L,55346L,55347L,
-55348L,55349L,55350L,55351L,55352L,55353L,55354L,55355L,55356L,55357L,
-55358L,55359L,55360L,55361L,55362L,55363L,55364L,55365L,55366L,55367L,
-55368L,55369L,55370L,55371L,55372L,55373L,55374L,55375L,55376L,55377L,
-55378L,55379L,55380L,55381L,55382L,55383L,55384L,55385L,55386L,55387L,
-55388L,55389L,55390L,55391L,55392L,55393L,55394L,55395L,55396L,55397L,
-55398L,55399L,55400L,55401L,55402L,55403L,55404L,55405L,55406L,55407L,
-55408L,55409L,55410L,55411L,55412L,55413L,55414L,55415L,55416L,55417L,
-55418L,55419L,55420L,55421L,55422L,55423L,55424L,55425L,55426L,55427L,
-55428L,55429L,55430L,55431L,55432L,55433L,55434L,55435L,55436L,55437L,
-55438L,55439L,55440L,55441L,55442L,55443L,55444L,55445L,55446L,55447L,
-55448L,55449L,55450L,55451L,55452L,55453L,55454L,55455L,55456L,55457L,
-55458L,55459L,55460L,55461L,55462L,55463L,55464L,55465L,55466L,55467L,
-55468L,55469L,55470L,55471L,55472L,55473L,55474L,55475L,55476L,55477L,
-55478L,55479L,55480L,55481L,55482L,55483L,55484L,55485L,55486L,55487L,
-55488L,55489L,55490L,55491L,55492L,55493L,55494L,55495L,55496L,55497L,
-55498L,55499L,55500L,55501L,55502L,55503L,55504L,55505L,55506L,55507L,
-55508L,55509L,55510L,55511L,55512L,55513L,55514L,55515L,55516L,55517L,
-55518L,55519L,55520L,55521L,55522L,55523L,55524L,55525L,55526L,55527L,
-55528L,55529L,55530L,55531L,55532L,55533L,55534L,55535L,55536L,55537L,
-55538L,55539L,55540L,55541L,55542L,55543L,55544L,55545L,55546L,55547L,
-55548L,55549L,55550L,55551L,55552L,55553L,55554L,55555L,55556L,55557L,
-55558L,55559L,55560L,55561L,55562L,55563L,55564L,55565L,55566L,55567L,
-55568L,55569L,55570L,55571L,55572L,55573L,55574L,55575L,55576L,55577L,
-55578L,55579L,55580L,55581L,55582L,55583L,55584L,55585L,55586L,55587L,
-55588L,55589L,55590L,55591L,55592L,55593L,55594L,55595L,55596L,55597L,
-55598L,55599L,55600L,55601L,55602L,55603L,55604L,55605L,55606L,55607L,
-55608L,55609L,55610L,55611L,55612L,55613L,55614L,55615L,55616L,55617L,
-55618L,55619L,55620L,55621L,55622L,55623L,55624L,55625L,55626L,55627L,
-55628L,55629L,55630L,55631L,55632L,55633L,55634L,55635L,55636L,55637L,
-55638L,55639L,55640L,55641L,55642L,55643L,55644L,55645L,55646L,55647L,
-55648L,55649L,55650L,55651L,55652L,55653L,55654L,55655L,55656L,55657L,
-55658L,55659L,55660L,55661L,55662L,55663L,55664L,55665L,55666L,55667L,
-55668L,55669L,55670L,55671L,55672L,55673L,55674L,55675L,55676L,55677L,
-55678L,55679L,55680L,55681L,55682L,55683L,55684L,55685L,55686L,55687L,
-55688L,55689L,55690L,55691L,55692L,55693L,55694L,55695L,55696L,55697L,
-55698L,55699L,55700L,55701L,55702L,55703L,55704L,55705L,55706L,55707L,
-55708L,55709L,55710L,55711L,55712L,55713L,55714L,55715L,55716L,55717L,
-55718L,55719L,55720L,55721L,55722L,55723L,55724L,55725L,55726L,55727L,
-55728L,55729L,55730L,55731L,55732L,55733L,55734L,55735L,55736L,55737L,
-55738L,55739L,55740L,55741L,55742L,55743L,55744L,55745L,55746L,55747L,
-55748L,55749L,55750L,55751L,55752L,55753L,55754L,55755L,55756L,55757L,
-55758L,55759L,55760L,55761L,55762L,55763L,55764L,55765L,55766L,55767L,
-55768L,55769L,55770L,55771L,55772L,55773L,55774L,55775L,55776L,55777L,
-55778L,55779L,55780L,55781L,55782L,55783L,55784L,55785L,55786L,55787L,
-55788L,55789L,55790L,55791L,55792L,55793L,55794L,55795L,55796L,55797L,
-55798L,55799L,55800L,55801L,55802L,55803L,55804L,55805L,55806L,55807L,
-55808L,55809L,55810L,55811L,55812L,55813L,55814L,55815L,55816L,55817L,
-55818L,55819L,55820L,55821L,55822L,55823L,55824L,55825L,55826L,55827L,
-55828L,55829L,55830L,55831L,55832L,55833L,55834L,55835L,55836L,55837L,
-55838L,55839L,55840L,55841L,55842L,55843L,55844L,55845L,55846L,55847L,
-55848L,55849L,55850L,55851L,55852L,55853L,55854L,55855L,55856L,55857L,
-55858L,55859L,55860L,55861L,55862L,55863L,55864L,55865L,55866L,55867L,
-55868L,55869L,55870L,55871L,55872L,55873L,55874L,55875L,55876L,55877L,
-55878L,55879L,55880L,55881L,55882L,55883L,55884L,55885L,55886L,55887L,
-55888L,55889L,55890L,55891L,55892L,55893L,55894L,55895L,55896L,55897L,
-55898L,55899L,55900L,55901L,55902L,55903L,55904L,55905L,55906L,55907L,
-55908L,55909L,55910L,55911L,55912L,55913L,55914L,55915L,55916L,55917L,
-55918L,55919L,55920L,55921L,55922L,55923L,55924L,55925L,55926L,55927L,
-55928L,55929L,55930L,55931L,55932L,55933L,55934L,55935L,55936L,55937L,
-55938L,55939L,55940L,55941L,55942L,55943L,55944L,55945L,55946L,55947L,
-55948L,55949L,55950L,55951L,55952L,55953L,55954L,55955L,55956L,55957L,
-55958L,55959L,55960L,55961L,55962L,55963L,55964L,55965L,55966L,55967L,
-55968L,55969L,55970L,55971L,55972L,55973L,55974L,55975L,55976L,55977L,
-55978L,55979L,55980L,55981L,55982L,55983L,55984L,55985L,55986L,55987L,
-55988L,55989L,55990L,55991L,55992L,55993L,55994L,55995L,55996L,55997L,
-55998L,55999L,56000L,56001L,56002L,56003L,56004L,56005L,56006L,56007L,
-56008L,56009L,56010L,56011L,56012L,56013L,56014L,56015L,56016L,56017L,
-56018L,56019L,56020L,56021L,56022L,56023L,56024L,56025L,56026L,56027L,
-56028L,56029L,56030L,56031L,56032L,56033L,56034L,56035L,56036L,56037L,
-56038L,56039L,56040L,56041L,56042L,56043L,56044L,56045L,56046L,56047L,
-56048L,56049L,56050L,56051L,56052L,56053L,56054L,56055L,56056L,56057L,
-56058L,56059L,56060L,56061L,56062L,56063L,56064L,56065L,56066L,56067L,
-56068L,56069L,56070L,56071L,56072L,56073L,56074L,56075L,56076L,56077L,
-56078L,56079L,56080L,56081L,56082L,56083L,56084L,56085L,56086L,56087L,
-56088L,56089L,56090L,56091L,56092L,56093L,56094L,56095L,56096L,56097L,
-56098L,56099L,56100L,56101L,56102L,56103L,56104L,56105L,56106L,56107L,
-56108L,56109L,56110L,56111L,56112L,56113L,56114L,56115L,56116L,56117L,
-56118L,56119L,56120L,56121L,56122L,56123L,56124L,56125L,56126L,56127L,
-56128L,56129L,56130L,56131L,56132L,56133L,56134L,56135L,56136L,56137L,
-56138L,56139L,56140L,56141L,56142L,56143L,56144L,56145L,56146L,56147L,
-56148L,56149L,56150L,56151L,56152L,56153L,56154L,56155L,56156L,56157L,
-56158L,56159L,56160L,56161L,56162L,56163L,56164L,56165L,56166L,56167L,
-56168L,56169L,56170L,56171L,56172L,56173L,56174L,56175L,56176L,56177L,
-56178L,56179L,56180L,56181L,56182L,56183L,56184L,56185L,56186L,56187L,
-56188L,56189L,56190L,56191L,56192L,56193L,56194L,56195L,56196L,56197L,
-56198L,56199L,56200L,56201L,56202L,56203L,56204L,56205L,56206L,56207L,
-56208L,56209L,56210L,56211L,56212L,56213L,56214L,56215L,56216L,56217L,
-56218L,56219L,56220L,56221L,56222L,56223L,56224L,56225L,56226L,56227L,
-56228L,56229L,56230L,56231L,56232L,56233L,56234L,56235L,56236L,56237L,
-56238L,56239L,56240L,56241L,56242L,56243L,56244L,56245L,56246L,56247L,
-56248L,56249L,56250L,56251L,56252L,56253L,56254L,56255L,56256L,56257L,
-56258L,56259L,56260L,56261L,56262L,56263L,56264L,56265L,56266L,56267L,
-56268L,56269L,56270L,56271L,56272L,56273L,56274L,56275L,56276L,56277L,
-56278L,56279L,56280L,56281L,56282L,56283L,56284L,56285L,56286L,56287L,
-56288L,56289L,56290L,56291L,56292L,56293L,56294L,56295L,56296L,56297L,
-56298L,56299L,56300L,56301L,56302L,56303L,56304L,56305L,56306L,56307L,
-56308L,56309L,56310L,56311L,56312L,56313L,56314L,56315L,56316L,56317L,
-56318L,56319L,56320L,56321L,56322L,56323L,56324L,56325L,56326L,56327L,
-56328L,56329L,56330L,56331L,56332L,56333L,56334L,56335L,56336L,56337L,
-56338L,56339L,56340L,56341L,56342L,56343L,56344L,56345L,56346L,56347L,
-56348L,56349L,56350L,56351L,56352L,56353L,56354L,56355L,56356L,56357L,
-56358L,56359L,56360L,56361L,56362L,56363L,56364L,56365L,56366L,56367L,
-56368L,56369L,56370L,56371L,56372L,56373L,56374L,56375L,56376L,56377L,
-56378L,56379L,56380L,56381L,56382L,56383L,56384L,56385L,56386L,56387L,
-56388L,56389L,56390L,56391L,56392L,56393L,56394L,56395L,56396L,56397L,
-56398L,56399L,56400L,56401L,56402L,56403L,56404L,56405L,56406L,56407L,
-56408L,56409L,56410L,56411L,56412L,56413L,56414L,56415L,56416L,56417L,
-56418L,56419L,56420L,56421L,56422L,56423L,56424L,56425L,56426L,56427L,
-56428L,56429L,56430L,56431L,56432L,56433L,56434L,56435L,56436L,56437L,
-56438L,56439L,56440L,56441L,56442L,56443L,56444L,56445L,56446L,56447L,
-56448L,56449L,56450L,56451L,56452L,56453L,56454L,56455L,56456L,56457L,
-56458L,56459L,56460L,56461L,56462L,56463L,56464L,56465L,56466L,56467L,
-56468L,56469L,56470L,56471L,56472L,56473L,56474L,56475L,56476L,56477L,
-56478L,56479L,56480L,56481L,56482L,56483L,56484L,56485L,56486L,56487L,
-56488L,56489L,56490L,56491L,56492L,56493L,56494L,56495L,56496L,56497L,
-56498L,56499L,56500L,56501L,56502L,56503L,56504L,56505L,56506L,56507L,
-56508L,56509L,56510L,56511L,56512L,56513L,56514L,56515L,56516L,56517L,
-56518L,56519L,56520L,56521L,56522L,56523L,56524L,56525L,56526L,56527L,
-56528L,56529L,56530L,56531L,56532L,56533L,56534L,56535L,56536L,56537L,
-56538L,56539L,56540L,56541L,56542L,56543L,56544L,56545L,56546L,56547L,
-56548L,56549L,56550L,56551L,56552L,56553L,56554L,56555L,56556L,56557L,
-56558L,56559L,56560L,56561L,56562L,56563L,56564L,56565L,56566L,56567L,
-56568L,56569L,56570L,56571L,56572L,56573L,56574L,56575L,56576L,56577L,
-56578L,56579L,56580L,56581L,56582L,56583L,56584L,56585L,56586L,56587L,
-56588L,56589L,56590L,56591L,56592L,56593L,56594L,56595L,56596L,56597L,
-56598L,56599L,56600L,56601L,56602L,56603L,56604L,56605L,56606L,56607L,
-56608L,56609L,56610L,56611L,56612L,56613L,56614L,56615L,56616L,56617L,
-56618L,56619L,56620L,56621L,56622L,56623L,56624L,56625L,56626L,56627L,
-56628L,56629L,56630L,56631L,56632L,56633L,56634L,56635L,56636L,56637L,
-56638L,56639L,56640L,56641L,56642L,56643L,56644L,56645L,56646L,56647L,
-56648L,56649L,56650L,56651L,56652L,56653L,56654L,56655L,56656L,56657L,
-56658L,56659L,56660L,56661L,56662L,56663L,56664L,56665L,56666L,56667L,
-56668L,56669L,56670L,56671L,56672L,56673L,56674L,56675L,56676L,56677L,
-56678L,56679L,56680L,56681L,56682L,56683L,56684L,56685L,56686L,56687L,
-56688L,56689L,56690L,56691L,56692L,56693L,56694L,56695L,56696L,56697L,
-56698L,56699L,56700L,56701L,56702L,56703L,56704L,56705L,56706L,56707L,
-56708L,56709L,56710L,56711L,56712L,56713L,56714L,56715L,56716L,56717L,
-56718L,56719L,56720L,56721L,56722L,56723L,56724L,56725L,56726L,56727L,
-56728L,56729L,56730L,56731L,56732L,56733L,56734L,56735L,56736L,56737L,
-56738L,56739L,56740L,56741L,56742L,56743L,56744L,56745L,56746L,56747L,
-56748L,56749L,56750L,56751L,56752L,56753L,56754L,56755L,56756L,56757L,
-56758L,56759L,56760L,56761L,56762L,56763L,56764L,56765L,56766L,56767L,
-56768L,56769L,56770L,56771L,56772L,56773L,56774L,56775L,56776L,56777L,
-56778L,56779L,56780L,56781L,56782L,56783L,56784L,56785L,56786L,56787L,
-56788L,56789L,56790L,56791L,56792L,56793L,56794L,56795L,56796L,56797L,
-56798L,56799L,56800L,56801L,56802L,56803L,56804L,56805L,56806L,56807L,
-56808L,56809L,56810L,56811L,56812L,56813L,56814L,56815L,56816L,56817L,
-56818L,56819L,56820L,56821L,56822L,56823L,56824L,56825L,56826L,56827L,
-56828L,56829L,56830L,56831L,56832L,56833L,56834L,56835L,56836L,56837L,
-56838L,56839L,56840L,56841L,56842L,56843L,56844L,56845L,56846L,56847L,
-56848L,56849L,56850L,56851L,56852L,56853L,56854L,56855L,56856L,56857L,
-56858L,56859L,56860L,56861L,56862L,56863L,56864L,56865L,56866L,56867L,
-56868L,56869L,56870L,56871L,56872L,56873L,56874L,56875L,56876L,56877L,
-56878L,56879L,56880L,56881L,56882L,56883L,56884L,56885L,56886L,56887L,
-56888L,56889L,56890L,56891L,56892L,56893L,56894L,56895L,56896L,56897L,
-56898L,56899L,56900L,56901L,56902L,56903L,56904L,56905L,56906L,56907L,
-56908L,56909L,56910L,56911L,56912L,56913L,56914L,56915L,56916L,56917L,
-56918L,56919L,56920L,56921L,56922L,56923L,56924L,56925L,56926L,56927L,
-56928L,56929L,56930L,56931L,56932L,56933L,56934L,56935L,56936L,56937L,
-56938L,56939L,56940L,56941L,56942L,56943L,56944L,56945L,56946L,56947L,
-56948L,56949L,56950L,56951L,56952L,56953L,56954L,56955L,56956L,56957L,
-56958L,56959L,56960L,56961L,56962L,56963L,56964L,56965L,56966L,56967L,
-56968L,56969L,56970L,56971L,56972L,56973L,56974L,56975L,56976L,56977L,
-56978L,56979L,56980L,56981L,56982L,56983L,56984L,56985L,56986L,56987L,
-56988L,56989L,56990L,56991L,56992L,56993L,56994L,56995L,56996L,56997L,
-56998L,56999L,57000L,57001L,57002L,57003L,57004L,57005L,57006L,57007L,
-57008L,57009L,57010L,57011L,57012L,57013L,57014L,57015L,57016L,57017L,
-57018L,57019L,57020L,57021L,57022L,57023L,57024L,57025L,57026L,57027L,
-57028L,57029L,57030L,57031L,57032L,57033L,57034L,57035L,57036L,57037L,
-57038L,57039L,57040L,57041L,57042L,57043L,57044L,57045L,57046L,57047L,
-57048L,57049L,57050L,57051L,57052L,57053L,57054L,57055L,57056L,57057L,
-57058L,57059L,57060L,57061L,57062L,57063L,57064L,57065L,57066L,57067L,
-57068L,57069L,57070L,57071L,57072L,57073L,57074L,57075L,57076L,57077L,
-57078L,57079L,57080L,57081L,57082L,57083L,57084L,57085L,57086L,57087L,
-57088L,57089L,57090L,57091L,57092L,57093L,57094L,57095L,57096L,57097L,
-57098L,57099L,57100L,57101L,57102L,57103L,57104L,57105L,57106L,57107L,
-57108L,57109L,57110L,57111L,57112L,57113L,57114L,57115L,57116L,57117L,
-57118L,57119L,57120L,57121L,57122L,57123L,57124L,57125L,57126L,57127L,
-57128L,57129L,57130L,57131L,57132L,57133L,57134L,57135L,57136L,57137L,
-57138L,57139L,57140L,57141L,57142L,57143L,57144L,57145L,57146L,57147L,
-57148L,57149L,57150L,57151L,57152L,57153L,57154L,57155L,57156L,57157L,
-57158L,57159L,57160L,57161L,57162L,57163L,57164L,57165L,57166L,57167L,
-57168L,57169L,57170L,57171L,57172L,57173L,57174L,57175L,57176L,57177L,
-57178L,57179L,57180L,57181L,57182L,57183L,57184L,57185L,57186L,57187L,
-57188L,57189L,57190L,57191L,57192L,57193L,57194L,57195L,57196L,57197L,
-57198L,57199L,57200L,57201L,57202L,57203L,57204L,57205L,57206L,57207L,
-57208L,57209L,57210L,57211L,57212L,57213L,57214L,57215L,57216L,57217L,
-57218L,57219L,57220L,57221L,57222L,57223L,57224L,57225L,57226L,57227L,
-57228L,57229L,57230L,57231L,57232L,57233L,57234L,57235L,57236L,57237L,
-57238L,57239L,57240L,57241L,57242L,57243L,57244L,57245L,57246L,57247L,
-57248L,57249L,57250L,57251L,57252L,57253L,57254L,57255L,57256L,57257L,
-57258L,57259L,57260L,57261L,57262L,57263L,57264L,57265L,57266L,57267L,
-57268L,57269L,57270L,57271L,57272L,57273L,57274L,57275L,57276L,57277L,
-57278L,57279L,57280L,57281L,57282L,57283L,57284L,57285L,57286L,57287L,
-57288L,57289L,57290L,57291L,57292L,57293L,57294L,57295L,57296L,57297L,
-57298L,57299L,57300L,57301L,57302L,57303L,57304L,57305L,57306L,57307L,
-57308L,57309L,57310L,57311L,57312L,57313L,57314L,57315L,57316L,57317L,
-57318L,57319L,57320L,57321L,57322L,57323L,57324L,57325L,57326L,57327L,
-57328L,57329L,57330L,57331L,57332L,57333L,57334L,57335L,57336L,57337L,
-57338L,57339L,57340L,57341L,57342L,57343L,57344L,57345L,57346L,57347L,
-57348L,57349L,57350L,57351L,57352L,57353L,57354L,57355L,57356L,57357L,
-57358L,57359L,57360L,57361L,57362L,57363L,57364L,57365L,57366L,57367L,
-57368L,57369L,57370L,57371L,57372L,57373L,57374L,57375L,57376L,57377L,
-57378L,57379L,57380L,57381L,57382L,57383L,57384L,57385L,57386L,57387L,
-57388L,57389L,57390L,57391L,57392L,57393L,57394L,57395L,57396L,57397L,
-57398L,57399L,57400L,57401L,57402L,57403L,57404L,57405L,57406L,57407L,
-57408L,57409L,57410L,57411L,57412L,57413L,57414L,57415L,57416L,57417L,
-57418L,57419L,57420L,57421L,57422L,57423L,57424L,57425L,57426L,57427L,
-57428L,57429L,57430L,57431L,57432L,57433L,57434L,57435L,57436L,57437L,
-57438L,57439L,57440L,57441L,57442L,57443L,57444L,57445L,57446L,57447L,
-57448L,57449L,57450L,57451L,57452L,57453L,57454L,57455L,57456L,57457L,
-57458L,57459L,57460L,57461L,57462L,57463L,57464L,57465L,57466L,57467L,
-57468L,57469L,57470L,57471L,57472L,57473L,57474L,57475L,57476L,57477L,
-57478L,57479L,57480L,57481L,57482L,57483L,57484L,57485L,57486L,57487L,
-57488L,57489L,57490L,57491L,57492L,57493L,57494L,57495L,57496L,57497L,
-57498L,57499L,57500L,57501L,57502L,57503L,57504L,57505L,57506L,57507L,
-57508L,57509L,57510L,57511L,57512L,57513L,57514L,57515L,57516L,57517L,
-57518L,57519L,57520L,57521L,57522L,57523L,57524L,57525L,57526L,57527L,
-57528L,57529L,57530L,57531L,57532L,57533L,57534L,57535L,57536L,57537L,
-57538L,57539L,57540L,57541L,57542L,57543L,57544L,57545L,57546L,57547L,
-57548L,57549L,57550L,57551L,57552L,57553L,57554L,57555L,57556L,57557L,
-57558L,57559L,57560L,57561L,57562L,57563L,57564L,57565L,57566L,57567L,
-57568L,57569L,57570L,57571L,57572L,57573L,57574L,57575L,57576L,57577L,
-57578L,57579L,57580L,57581L,57582L,57583L,57584L,57585L,57586L,57587L,
-57588L,57589L,57590L,57591L,57592L,57593L,57594L,57595L,57596L,57597L,
-57598L,57599L,57600L,57601L,57602L,57603L,57604L,57605L,57606L,57607L,
-57608L,57609L,57610L,57611L,57612L,57613L,57614L,57615L,57616L,57617L,
-57618L,57619L,57620L,57621L,57622L,57623L,57624L,57625L,57626L,57627L,
-57628L,57629L,57630L,57631L,57632L,57633L,57634L,57635L,57636L,57637L,
-57638L,57639L,57640L,57641L,57642L,57643L,57644L,57645L,57646L,57647L,
-57648L,57649L,57650L,57651L,57652L,57653L,57654L,57655L,57656L,57657L,
-57658L,57659L,57660L,57661L,57662L,57663L,57664L,57665L,57666L,57667L,
-57668L,57669L,57670L,57671L,57672L,57673L,57674L,57675L,57676L,57677L,
-57678L,57679L,57680L,57681L,57682L,57683L,57684L,57685L,57686L,57687L,
-57688L,57689L,57690L,57691L,57692L,57693L,57694L,57695L,57696L,57697L,
-57698L,57699L,57700L,57701L,57702L,57703L,57704L,57705L,57706L,57707L,
-57708L,57709L,57710L,57711L,57712L,57713L,57714L,57715L,57716L,57717L,
-57718L,57719L,57720L,57721L,57722L,57723L,57724L,57725L,57726L,57727L,
-57728L,57729L,57730L,57731L,57732L,57733L,57734L,57735L,57736L,57737L,
-57738L,57739L,57740L,57741L,57742L,57743L,57744L,57745L,57746L,57747L,
-57748L,57749L,57750L,57751L,57752L,57753L,57754L,57755L,57756L,57757L,
-57758L,57759L,57760L,57761L,57762L,57763L,57764L,57765L,57766L,57767L,
-57768L,57769L,57770L,57771L,57772L,57773L,57774L,57775L,57776L,57777L,
-57778L,57779L,57780L,57781L,57782L,57783L,57784L,57785L,57786L,57787L,
-57788L,57789L,57790L,57791L,57792L,57793L,57794L,57795L,57796L,57797L,
-57798L,57799L,57800L,57801L,57802L,57803L,57804L,57805L,57806L,57807L,
-57808L,57809L,57810L,57811L,57812L,57813L,57814L,57815L,57816L,57817L,
-57818L,57819L,57820L,57821L,57822L,57823L,57824L,57825L,57826L,57827L,
-57828L,57829L,57830L,57831L,57832L,57833L,57834L,57835L,57836L,57837L,
-57838L,57839L,57840L,57841L,57842L,57843L,57844L,57845L,57846L,57847L,
-57848L,57849L,57850L,57851L,57852L,57853L,57854L,57855L,57856L,57857L,
-57858L,57859L,57860L,57861L,57862L,57863L,57864L,57865L,57866L,57867L,
-57868L,57869L,57870L,57871L,57872L,57873L,57874L,57875L,57876L,57877L,
-57878L,57879L,57880L,57881L,57882L,57883L,57884L,57885L,57886L,57887L,
-57888L,57889L,57890L,57891L,57892L,57893L,57894L,57895L,57896L,57897L,
-57898L,57899L,57900L,57901L,57902L,57903L,57904L,57905L,57906L,57907L,
-57908L,57909L,57910L,57911L,57912L,57913L,57914L,57915L,57916L,57917L,
-57918L,57919L,57920L,57921L,57922L,57923L,57924L,57925L,57926L,57927L,
-57928L,57929L,57930L,57931L,57932L,57933L,57934L,57935L,57936L,57937L,
-57938L,57939L,57940L,57941L,57942L,57943L,57944L,57945L,57946L,57947L,
-57948L,57949L,57950L,57951L,57952L,57953L,57954L,57955L,57956L,57957L,
-57958L,57959L,57960L,57961L,57962L,57963L,57964L,57965L,57966L,57967L,
-57968L,57969L,57970L,57971L,57972L,57973L,57974L,57975L,57976L,57977L,
-57978L,57979L,57980L,57981L,57982L,57983L,57984L,57985L,57986L,57987L,
-57988L,57989L,57990L,57991L,57992L,57993L,57994L,57995L,57996L,57997L,
-57998L,57999L,58000L,58001L,58002L,58003L,58004L,58005L,58006L,58007L,
-58008L,58009L,58010L,58011L,58012L,58013L,58014L,58015L,58016L,58017L,
-58018L,58019L,58020L,58021L,58022L,58023L,58024L,58025L,58026L,58027L,
-58028L,58029L,58030L,58031L,58032L,58033L,58034L,58035L,58036L,58037L,
-58038L,58039L,58040L,58041L,58042L,58043L,58044L,58045L,58046L,58047L,
-58048L,58049L,58050L,58051L,58052L,58053L,58054L,58055L,58056L,58057L,
-58058L,58059L,58060L,58061L,58062L,58063L,58064L,58065L,58066L,58067L,
-58068L,58069L,58070L,58071L,58072L,58073L,58074L,58075L,58076L,58077L,
-58078L,58079L,58080L,58081L,58082L,58083L,58084L,58085L,58086L,58087L,
-58088L,58089L,58090L,58091L,58092L,58093L,58094L,58095L,58096L,58097L,
-58098L,58099L,58100L,58101L,58102L,58103L,58104L,58105L,58106L,58107L,
-58108L,58109L,58110L,58111L,58112L,58113L,58114L,58115L,58116L,58117L,
-58118L,58119L,58120L,58121L,58122L,58123L,58124L,58125L,58126L,58127L,
-58128L,58129L,58130L,58131L,58132L,58133L,58134L,58135L,58136L,58137L,
-58138L,58139L,58140L,58141L,58142L,58143L,58144L,58145L,58146L,58147L,
-58148L,58149L,58150L,58151L,58152L,58153L,58154L,58155L,58156L,58157L,
-58158L,58159L,58160L,58161L,58162L,58163L,58164L,58165L,58166L,58167L,
-58168L,58169L,58170L,58171L,58172L,58173L,58174L,58175L,58176L,58177L,
-58178L,58179L,58180L,58181L,58182L,58183L,58184L,58185L,58186L,58187L,
-58188L,58189L,58190L,58191L,58192L,58193L,58194L,58195L,58196L,58197L,
-58198L,58199L,58200L,58201L,58202L,58203L,58204L,58205L,58206L,58207L,
-58208L,58209L,58210L,58211L,58212L,58213L,58214L,58215L,58216L,58217L,
-58218L,58219L,58220L,58221L,58222L,58223L,58224L,58225L,58226L,58227L,
-58228L,58229L,58230L,58231L,58232L,58233L,58234L,58235L,58236L,58237L,
-58238L,58239L,58240L,58241L,58242L,58243L,58244L,58245L,58246L,58247L,
-58248L,58249L,58250L,58251L,58252L,58253L,58254L,58255L,58256L,58257L,
-58258L,58259L,58260L,58261L,58262L,58263L,58264L,58265L,58266L,58267L,
-58268L,58269L,58270L,58271L,58272L,58273L,58274L,58275L,58276L,58277L,
-58278L,58279L,58280L,58281L,58282L,58283L,58284L,58285L,58286L,58287L,
-58288L,58289L,58290L,58291L,58292L,58293L,58294L,58295L,58296L,58297L,
-58298L,58299L,58300L,58301L,58302L,58303L,58304L,58305L,58306L,58307L,
-58308L,58309L,58310L,58311L,58312L,58313L,58314L,58315L,58316L,58317L,
-58318L,58319L,58320L,58321L,58322L,58323L,58324L,58325L,58326L,58327L,
-58328L,58329L,58330L,58331L,58332L,58333L,58334L,58335L,58336L,58337L,
-58338L,58339L,58340L,58341L,58342L,58343L,58344L,58345L,58346L,58347L,
-58348L,58349L,58350L,58351L,58352L,58353L,58354L,58355L,58356L,58357L,
-58358L,58359L,58360L,58361L,58362L,58363L,58364L,58365L,58366L,58367L,
-58368L,58369L,58370L,58371L,58372L,58373L,58374L,58375L,58376L,58377L,
-58378L,58379L,58380L,58381L,58382L,58383L,58384L,58385L,58386L,58387L,
-58388L,58389L,58390L,58391L,58392L,58393L,58394L,58395L,58396L,58397L,
-58398L,58399L,58400L,58401L,58402L,58403L,58404L,58405L,58406L,58407L,
-58408L,58409L,58410L,58411L,58412L,58413L,58414L,58415L,58416L,58417L,
-58418L,58419L,58420L,58421L,58422L,58423L,58424L,58425L,58426L,58427L,
-58428L,58429L,58430L,58431L,58432L,58433L,58434L,58435L,58436L,58437L,
-58438L,58439L,58440L,58441L,58442L,58443L,58444L,58445L,58446L,58447L,
-58448L,58449L,58450L,58451L,58452L,58453L,58454L,58455L,58456L,58457L,
-58458L,58459L,58460L,58461L,58462L,58463L,58464L,58465L,58466L,58467L,
-58468L,58469L,58470L,58471L,58472L,58473L,58474L,58475L,58476L,58477L,
-58478L,58479L,58480L,58481L,58482L,58483L,58484L,58485L,58486L,58487L,
-58488L,58489L,58490L,58491L,58492L,58493L,58494L,58495L,58496L,58497L,
-58498L,58499L,58500L,58501L,58502L,58503L,58504L,58505L,58506L,58507L,
-58508L,58509L,58510L,58511L,58512L,58513L,58514L,58515L,58516L,58517L,
-58518L,58519L,58520L,58521L,58522L,58523L,58524L,58525L,58526L,58527L,
-58528L,58529L,58530L,58531L,58532L,58533L,58534L,58535L,58536L,58537L,
-58538L,58539L,58540L,58541L,58542L,58543L,58544L,58545L,58546L,58547L,
-58548L,58549L,58550L,58551L,58552L,58553L,58554L,58555L,58556L,58557L,
-58558L,58559L,58560L,58561L,58562L,58563L,58564L,58565L,58566L,58567L,
-58568L,58569L,58570L,58571L,58572L,58573L,58574L,58575L,58576L,58577L,
-58578L,58579L,58580L,58581L,58582L,58583L,58584L,58585L,58586L,58587L,
-58588L,58589L,58590L,58591L,58592L,58593L,58594L,58595L,58596L,58597L,
-58598L,58599L,58600L,58601L,58602L,58603L,58604L,58605L,58606L,58607L,
-58608L,58609L,58610L,58611L,58612L,58613L,58614L,58615L,58616L,58617L,
-58618L,58619L,58620L,58621L,58622L,58623L,58624L,58625L,58626L,58627L,
-58628L,58629L,58630L,58631L,58632L,58633L,58634L,58635L,58636L,58637L,
-58638L,58639L,58640L,58641L,58642L,58643L,58644L,58645L,58646L,58647L,
-58648L,58649L,58650L,58651L,58652L,58653L,58654L,58655L,58656L,58657L,
-58658L,58659L,58660L,58661L,58662L,58663L,58664L,58665L,58666L,58667L,
-58668L,58669L,58670L,58671L,58672L,58673L,58674L,58675L,58676L,58677L,
-58678L,58679L,58680L,58681L,58682L,58683L,58684L,58685L,58686L,58687L,
-58688L,58689L,58690L,58691L,58692L,58693L,58694L,58695L,58696L,58697L,
-58698L,58699L,58700L,58701L,58702L,58703L,58704L,58705L,58706L,58707L,
-58708L,58709L,58710L,58711L,58712L,58713L,58714L,58715L,58716L,58717L,
-58718L,58719L,58720L,58721L,58722L,58723L,58724L,58725L,58726L,58727L,
-58728L,58729L,58730L,58731L,58732L,58733L,58734L,58735L,58736L,58737L,
-58738L,58739L,58740L,58741L,58742L,58743L,58744L,58745L,58746L,58747L,
-58748L,58749L,58750L,58751L,58752L,58753L,58754L,58755L,58756L,58757L,
-58758L,58759L,58760L,58761L,58762L,58763L,58764L,58765L,58766L,58767L,
-58768L,58769L,58770L,58771L,58772L,58773L,58774L,58775L,58776L,58777L,
-58778L,58779L,58780L,58781L,58782L,58783L,58784L,58785L,58786L,58787L,
-58788L,58789L,58790L,58791L,58792L,58793L,58794L,58795L,58796L,58797L,
-58798L,58799L,58800L,58801L,58802L,58803L,58804L,58805L,58806L,58807L,
-58808L,58809L,58810L,58811L,58812L,58813L,58814L,58815L,58816L,58817L,
-58818L,58819L,58820L,58821L,58822L,58823L,58824L,58825L,58826L,58827L,
-58828L,58829L,58830L,58831L,58832L,58833L,58834L,58835L,58836L,58837L,
-58838L,58839L,58840L,58841L,58842L,58843L,58844L,58845L,58846L,58847L,
-58848L,58849L,58850L,58851L,58852L,58853L,58854L,58855L,58856L,58857L,
-58858L,58859L,58860L,58861L,58862L,58863L,58864L,58865L,58866L,58867L,
-58868L,58869L,58870L,58871L,58872L,58873L,58874L,58875L,58876L,58877L,
-58878L,58879L,58880L,58881L,58882L,58883L,58884L,58885L,58886L,58887L,
-58888L,58889L,58890L,58891L,58892L,58893L,58894L,58895L,58896L,58897L,
-58898L,58899L,58900L,58901L,58902L,58903L,58904L,58905L,58906L,58907L,
-58908L,58909L,58910L,58911L,58912L,58913L,58914L,58915L,58916L,58917L,
-58918L,58919L,58920L,58921L,58922L,58923L,58924L,58925L,58926L,58927L,
-58928L,58929L,58930L,58931L,58932L,58933L,58934L,58935L,58936L,58937L,
-58938L,58939L,58940L,58941L,58942L,58943L,58944L,58945L,58946L,58947L,
-58948L,58949L,58950L,58951L,58952L,58953L,58954L,58955L,58956L,58957L,
-58958L,58959L,58960L,58961L,58962L,58963L,58964L,58965L,58966L,58967L,
-58968L,58969L,58970L,58971L,58972L,58973L,58974L,58975L,58976L,58977L,
-58978L,58979L,58980L,58981L,58982L,58983L,58984L,58985L,58986L,58987L,
-58988L,58989L,58990L,58991L,58992L,58993L,58994L,58995L,58996L,58997L,
-58998L,58999L,59000L,59001L,59002L,59003L,59004L,59005L,59006L,59007L,
-59008L,59009L,59010L,59011L,59012L,59013L,59014L,59015L,59016L,59017L,
-59018L,59019L,59020L,59021L,59022L,59023L,59024L,59025L,59026L,59027L,
-59028L,59029L,59030L,59031L,59032L,59033L,59034L,59035L,59036L,59037L,
-59038L,59039L,59040L,59041L,59042L,59043L,59044L,59045L,59046L,59047L,
-59048L,59049L,59050L,59051L,59052L,59053L,59054L,59055L,59056L,59057L,
-59058L,59059L,59060L,59061L,59062L,59063L,59064L,59065L,59066L,59067L,
-59068L,59069L,59070L,59071L,59072L,59073L,59074L,59075L,59076L,59077L,
-59078L,59079L,59080L,59081L,59082L,59083L,59084L,59085L,59086L,59087L,
-59088L,59089L,59090L,59091L,59092L,59093L,59094L,59095L,59096L,59097L,
-59098L,59099L,59100L,59101L,59102L,59103L,59104L,59105L,59106L,59107L,
-59108L,59109L,59110L,59111L,59112L,59113L,59114L,59115L,59116L,59117L,
-59118L,59119L,59120L,59121L,59122L,59123L,59124L,59125L,59126L,59127L,
-59128L,59129L,59130L,59131L,59132L,59133L,59134L,59135L,59136L,59137L,
-59138L,59139L,59140L,59141L,59142L,59143L,59144L,59145L,59146L,59147L,
-59148L,59149L,59150L,59151L,59152L,59153L,59154L,59155L,59156L,59157L,
-59158L,59159L,59160L,59161L,59162L,59163L,59164L,59165L,59166L,59167L,
-59168L,59169L,59170L,59171L,59172L,59173L,59174L,59175L,59176L,59177L,
-59178L,59179L,59180L,59181L,59182L,59183L,59184L,59185L,59186L,59187L,
-59188L,59189L,59190L,59191L,59192L,59193L,59194L,59195L,59196L,59197L,
-59198L,59199L,59200L,59201L,59202L,59203L,59204L,59205L,59206L,59207L,
-59208L,59209L,59210L,59211L,59212L,59213L,59214L,59215L,59216L,59217L,
-59218L,59219L,59220L,59221L,59222L,59223L,59224L,59225L,59226L,59227L,
-59228L,59229L,59230L,59231L,59232L,59233L,59234L,59235L,59236L,59237L,
-59238L,59239L,59240L,59241L,59242L,59243L,59244L,59245L,59246L,59247L,
-59248L,59249L,59250L,59251L,59252L,59253L,59254L,59255L,59256L,59257L,
-59258L,59259L,59260L,59261L,59262L,59263L,59264L,59265L,59266L,59267L,
-59268L,59269L,59270L,59271L,59272L,59273L,59274L,59275L,59276L,59277L,
-59278L,59279L,59280L,59281L,59282L,59283L,59284L,59285L,59286L,59287L,
-59288L,59289L,59290L,59291L,59292L,59293L,59294L,59295L,59296L,59297L,
-59298L,59299L,59300L,59301L,59302L,59303L,59304L,59305L,59306L,59307L,
-59308L,59309L,59310L,59311L,59312L,59313L,59314L,59315L,59316L,59317L,
-59318L,59319L,59320L,59321L,59322L,59323L,59324L,59325L,59326L,59327L,
-59328L,59329L,59330L,59331L,59332L,59333L,59334L,59335L,59336L,59337L,
-59338L,59339L,59340L,59341L,59342L,59343L,59344L,59345L,59346L,59347L,
-59348L,59349L,59350L,59351L,59352L,59353L,59354L,59355L,59356L,59357L,
-59358L,59359L,59360L,59361L,59362L,59363L,59364L,59365L,59366L,59367L,
-59368L,59369L,59370L,59371L,59372L,59373L,59374L,59375L,59376L,59377L,
-59378L,59379L,59380L,59381L,59382L,59383L,59384L,59385L,59386L,59387L,
-59388L,59389L,59390L,59391L,59392L,59393L,59394L,59395L,59396L,59397L,
-59398L,59399L,59400L,59401L,59402L,59403L,59404L,59405L,59406L,59407L,
-59408L,59409L,59410L,59411L,59412L,59413L,59414L,59415L,59416L,59417L,
-59418L,59419L,59420L,59421L,59422L,59423L,59424L,59425L,59426L,59427L,
-59428L,59429L,59430L,59431L,59432L,59433L,59434L,59435L,59436L,59437L,
-59438L,59439L,59440L,59441L,59442L,59443L,59444L,59445L,59446L,59447L,
-59448L,59449L,59450L,59451L,59452L,59453L,59454L,59455L,59456L,59457L,
-59458L,59459L,59460L,59461L,59462L,59463L,59464L,59465L,59466L,59467L,
-59468L,59469L,59470L,59471L,59472L,59473L,59474L,59475L,59476L,59477L,
-59478L,59479L,59480L,59481L,59482L,59483L,59484L,59485L,59486L,59487L,
-59488L,59489L,59490L,59491L,59492L,59493L,59494L,59495L,59496L,59497L,
-59498L,59499L,59500L,59501L,59502L,59503L,59504L,59505L,59506L,59507L,
-59508L,59509L,59510L,59511L,59512L,59513L,59514L,59515L,59516L,59517L,
-59518L,59519L,59520L,59521L,59522L,59523L,59524L,59525L,59526L,59527L,
-59528L,59529L,59530L,59531L,59532L,59533L,59534L,59535L,59536L,59537L,
-59538L,59539L,59540L,59541L,59542L,59543L,59544L,59545L,59546L,59547L,
-59548L,59549L,59550L,59551L,59552L,59553L,59554L,59555L,59556L,59557L,
-59558L,59559L,59560L,59561L,59562L,59563L,59564L,59565L,59566L,59567L,
-59568L,59569L,59570L,59571L,59572L,59573L,59574L,59575L,59576L,59577L,
-59578L,59579L,59580L,59581L,59582L,59583L,59584L,59585L,59586L,59587L,
-59588L,59589L,59590L,59591L,59592L,59593L,59594L,59595L,59596L,59597L,
-59598L,59599L,59600L,59601L,59602L,59603L,59604L,59605L,59606L,59607L,
-59608L,59609L,59610L,59611L,59612L,59613L,59614L,59615L,59616L,59617L,
-59618L,59619L,59620L,59621L,59622L,59623L,59624L,59625L,59626L,59627L,
-59628L,59629L,59630L,59631L,59632L,59633L,59634L,59635L,59636L,59637L,
-59638L,59639L,59640L,59641L,59642L,59643L,59644L,59645L,59646L,59647L,
-59648L,59649L,59650L,59651L,59652L,59653L,59654L,59655L,59656L,59657L,
-59658L,59659L,59660L,59661L,59662L,59663L,59664L,59665L,59666L,59667L,
-59668L,59669L,59670L,59671L,59672L,59673L,59674L,59675L,59676L,59677L,
-59678L,59679L,59680L,59681L,59682L,59683L,59684L,59685L,59686L,59687L,
-59688L,59689L,59690L,59691L,59692L,59693L,59694L,59695L,59696L,59697L,
-59698L,59699L,59700L,59701L,59702L,59703L,59704L,59705L,59706L,59707L,
-59708L,59709L,59710L,59711L,59712L,59713L,59714L,59715L,59716L,59717L,
-59718L,59719L,59720L,59721L,59722L,59723L,59724L,59725L,59726L,59727L,
-59728L,59729L,59730L,59731L,59732L,59733L,59734L,59735L,59736L,59737L,
-59738L,59739L,59740L,59741L,59742L,59743L,59744L,59745L,59746L,59747L,
-59748L,59749L,59750L,59751L,59752L,59753L,59754L,59755L,59756L,59757L,
-59758L,59759L,59760L,59761L,59762L,59763L,59764L,59765L,59766L,59767L,
-59768L,59769L,59770L,59771L,59772L,59773L,59774L,59775L,59776L,59777L,
-59778L,59779L,59780L,59781L,59782L,59783L,59784L,59785L,59786L,59787L,
-59788L,59789L,59790L,59791L,59792L,59793L,59794L,59795L,59796L,59797L,
-59798L,59799L,59800L,59801L,59802L,59803L,59804L,59805L,59806L,59807L,
-59808L,59809L,59810L,59811L,59812L,59813L,59814L,59815L,59816L,59817L,
-59818L,59819L,59820L,59821L,59822L,59823L,59824L,59825L,59826L,59827L,
-59828L,59829L,59830L,59831L,59832L,59833L,59834L,59835L,59836L,59837L,
-59838L,59839L,59840L,59841L,59842L,59843L,59844L,59845L,59846L,59847L,
-59848L,59849L,59850L,59851L,59852L,59853L,59854L,59855L,59856L,59857L,
-59858L,59859L,59860L,59861L,59862L,59863L,59864L,59865L,59866L,59867L,
-59868L,59869L,59870L,59871L,59872L,59873L,59874L,59875L,59876L,59877L,
-59878L,59879L,59880L,59881L,59882L,59883L,59884L,59885L,59886L,59887L,
-59888L,59889L,59890L,59891L,59892L,59893L,59894L,59895L,59896L,59897L,
-59898L,59899L,59900L,59901L,59902L,59903L,59904L,59905L,59906L,59907L,
-59908L,59909L,59910L,59911L,59912L,59913L,59914L,59915L,59916L,59917L,
-59918L,59919L,59920L,59921L,59922L,59923L,59924L,59925L,59926L,59927L,
-59928L,59929L,59930L,59931L,59932L,59933L,59934L,59935L,59936L,59937L,
-59938L,59939L,59940L,59941L,59942L,59943L,59944L,59945L,59946L,59947L,
-59948L,59949L,59950L,59951L,59952L,59953L,59954L,59955L,59956L,59957L,
-59958L,59959L,59960L,59961L,59962L,59963L,59964L,59965L,59966L,59967L,
-59968L,59969L,59970L,59971L,59972L,59973L,59974L,59975L,59976L,59977L,
-59978L,59979L,59980L,59981L,59982L,59983L,59984L,59985L,59986L,59987L,
-59988L,59989L,59990L,59991L,59992L,59993L,59994L,59995L,59996L,59997L,
-59998L,59999L,60000L,60001L,60002L,60003L,60004L,60005L,60006L,60007L,
-60008L,60009L,60010L,60011L,60012L,60013L,60014L,60015L,60016L,60017L,
-60018L,60019L,60020L,60021L,60022L,60023L,60024L,60025L,60026L,60027L,
-60028L,60029L,60030L,60031L,60032L,60033L,60034L,60035L,60036L,60037L,
-60038L,60039L,60040L,60041L,60042L,60043L,60044L,60045L,60046L,60047L,
-60048L,60049L,60050L,60051L,60052L,60053L,60054L,60055L,60056L,60057L,
-60058L,60059L,60060L,60061L,60062L,60063L,60064L,60065L,60066L,60067L,
-60068L,60069L,60070L,60071L,60072L,60073L,60074L,60075L,60076L,60077L,
-60078L,60079L,60080L,60081L,60082L,60083L,60084L,60085L,60086L,60087L,
-60088L,60089L,60090L,60091L,60092L,60093L,60094L,60095L,60096L,60097L,
-60098L,60099L,60100L,60101L,60102L,60103L,60104L,60105L,60106L,60107L,
-60108L,60109L,60110L,60111L,60112L,60113L,60114L,60115L,60116L,60117L,
-60118L,60119L,60120L,60121L,60122L,60123L,60124L,60125L,60126L,60127L,
-60128L,60129L,60130L,60131L,60132L,60133L,60134L,60135L,60136L,60137L,
-60138L,60139L,60140L,60141L,60142L,60143L,60144L,60145L,60146L,60147L,
-60148L,60149L,60150L,60151L,60152L,60153L,60154L,60155L,60156L,60157L,
-60158L,60159L,60160L,60161L,60162L,60163L,60164L,60165L,60166L,60167L,
-60168L,60169L,60170L,60171L,60172L,60173L,60174L,60175L,60176L,60177L,
-60178L,60179L,60180L,60181L,60182L,60183L,60184L,60185L,60186L,60187L,
-60188L,60189L,60190L,60191L,60192L,60193L,60194L,60195L,60196L,60197L,
-60198L,60199L,60200L,60201L,60202L,60203L,60204L,60205L,60206L,60207L,
-60208L,60209L,60210L,60211L,60212L,60213L,60214L,60215L,60216L,60217L,
-60218L,60219L,60220L,60221L,60222L,60223L,60224L,60225L,60226L,60227L,
-60228L,60229L,60230L,60231L,60232L,60233L,60234L,60235L,60236L,60237L,
-60238L,60239L,60240L,60241L,60242L,60243L,60244L,60245L,60246L,60247L,
-60248L,60249L,60250L,60251L,60252L,60253L,60254L,60255L,60256L,60257L,
-60258L,60259L,60260L,60261L,60262L,60263L,60264L,60265L,60266L,60267L,
-60268L,60269L,60270L,60271L,60272L,60273L,60274L,60275L,60276L,60277L,
-60278L,60279L,60280L,60281L,60282L,60283L,60284L,60285L,60286L,60287L,
-60288L,60289L,60290L,60291L,60292L,60293L,60294L,60295L,60296L,60297L,
-60298L,60299L,60300L,60301L,60302L,60303L,60304L,60305L,60306L,60307L,
-60308L,60309L,60310L,60311L,60312L,60313L,60314L,60315L,60316L,60317L,
-60318L,60319L,60320L,60321L,60322L,60323L,60324L,60325L,60326L,60327L,
-60328L,60329L,60330L,60331L,60332L,60333L,60334L,60335L,60336L,60337L,
-60338L,60339L,60340L,60341L,60342L,60343L,60344L,60345L,60346L,60347L,
-60348L,60349L,60350L,60351L,60352L,60353L,60354L,60355L,60356L,60357L,
-60358L,60359L,60360L,60361L,60362L,60363L,60364L,60365L,60366L,60367L,
-60368L,60369L,60370L,60371L,60372L,60373L,60374L,60375L,60376L,60377L,
-60378L,60379L,60380L,60381L,60382L,60383L,60384L,60385L,60386L,60387L,
-60388L,60389L,60390L,60391L,60392L,60393L,60394L,60395L,60396L,60397L,
-60398L,60399L,60400L,60401L,60402L,60403L,60404L,60405L,60406L,60407L,
-60408L,60409L,60410L,60411L,60412L,60413L,60414L,60415L,60416L,60417L,
-60418L,60419L,60420L,60421L,60422L,60423L,60424L,60425L,60426L,60427L,
-60428L,60429L,60430L,60431L,60432L,60433L,60434L,60435L,60436L,60437L,
-60438L,60439L,60440L,60441L,60442L,60443L,60444L,60445L,60446L,60447L,
-60448L,60449L,60450L,60451L,60452L,60453L,60454L,60455L,60456L,60457L,
-60458L,60459L,60460L,60461L,60462L,60463L,60464L,60465L,60466L,60467L,
-60468L,60469L,60470L,60471L,60472L,60473L,60474L,60475L,60476L,60477L,
-60478L,60479L,60480L,60481L,60482L,60483L,60484L,60485L,60486L,60487L,
-60488L,60489L,60490L,60491L,60492L,60493L,60494L,60495L,60496L,60497L,
-60498L,60499L,60500L,60501L,60502L,60503L,60504L,60505L,60506L,60507L,
-60508L,60509L,60510L,60511L,60512L,60513L,60514L,60515L,60516L,60517L,
-60518L,60519L,60520L,60521L,60522L,60523L,60524L,60525L,60526L,60527L,
-60528L,60529L,60530L,60531L,60532L,60533L,60534L,60535L,60536L,60537L,
-60538L,60539L,60540L,60541L,60542L,60543L,60544L,60545L,60546L,60547L,
-60548L,60549L,60550L,60551L,60552L,60553L,60554L,60555L,60556L,60557L,
-60558L,60559L,60560L,60561L,60562L,60563L,60564L,60565L,60566L,60567L,
-60568L,60569L,60570L,60571L,60572L,60573L,60574L,60575L,60576L,60577L,
-60578L,60579L,60580L,60581L,60582L,60583L,60584L,60585L,60586L,60587L,
-60588L,60589L,60590L,60591L,60592L,60593L,60594L,60595L,60596L,60597L,
-60598L,60599L,60600L,60601L,60602L,60603L,60604L,60605L,60606L,60607L,
-60608L,60609L,60610L,60611L,60612L,60613L,60614L,60615L,60616L,60617L,
-60618L,60619L,60620L,60621L,60622L,60623L,60624L,60625L,60626L,60627L,
-60628L,60629L,60630L,60631L,60632L,60633L,60634L,60635L,60636L,60637L,
-60638L,60639L,60640L,60641L,60642L,60643L,60644L,60645L,60646L,60647L,
-60648L,60649L,60650L,60651L,60652L,60653L,60654L,60655L,60656L,60657L,
-60658L,60659L,60660L,60661L,60662L,60663L,60664L,60665L,60666L,60667L,
-60668L,60669L,60670L,60671L,60672L,60673L,60674L,60675L,60676L,60677L,
-60678L,60679L,60680L,60681L,60682L,60683L,60684L,60685L,60686L,60687L,
-60688L,60689L,60690L,60691L,60692L,60693L,60694L,60695L,60696L,60697L,
-60698L,60699L,60700L,60701L,60702L,60703L,60704L,60705L,60706L,60707L,
-60708L,60709L,60710L,60711L,60712L,60713L,60714L,60715L,60716L,60717L,
-60718L,60719L,60720L,60721L,60722L,60723L,60724L,60725L,60726L,60727L,
-60728L,60729L,60730L,60731L,60732L,60733L,60734L,60735L,60736L,60737L,
-60738L,60739L,60740L,60741L,60742L,60743L,60744L,60745L,60746L,60747L,
-60748L,60749L,60750L,60751L,60752L,60753L,60754L,60755L,60756L,60757L,
-60758L,60759L,60760L,60761L,60762L,60763L,60764L,60765L,60766L,60767L,
-60768L,60769L,60770L,60771L,60772L,60773L,60774L,60775L,60776L,60777L,
-60778L,60779L,60780L,60781L,60782L,60783L,60784L,60785L,60786L,60787L,
-60788L,60789L,60790L,60791L,60792L,60793L,60794L,60795L,60796L,60797L,
-60798L,60799L,60800L,60801L,60802L,60803L,60804L,60805L,60806L,60807L,
-60808L,60809L,60810L,60811L,60812L,60813L,60814L,60815L,60816L,60817L,
-60818L,60819L,60820L,60821L,60822L,60823L,60824L,60825L,60826L,60827L,
-60828L,60829L,60830L,60831L,60832L,60833L,60834L,60835L,60836L,60837L,
-60838L,60839L,60840L,60841L,60842L,60843L,60844L,60845L,60846L,60847L,
-60848L,60849L,60850L,60851L,60852L,60853L,60854L,60855L,60856L,60857L,
-60858L,60859L,60860L,60861L,60862L,60863L,60864L,60865L,60866L,60867L,
-60868L,60869L,60870L,60871L,60872L,60873L,60874L,60875L,60876L,60877L,
-60878L,60879L,60880L,60881L,60882L,60883L,60884L,60885L,60886L,60887L,
-60888L,60889L,60890L,60891L,60892L,60893L,60894L,60895L,60896L,60897L,
-60898L,60899L,60900L,60901L,60902L,60903L,60904L,60905L,60906L,60907L,
-60908L,60909L,60910L,60911L,60912L,60913L,60914L,60915L,60916L,60917L,
-60918L,60919L,60920L,60921L,60922L,60923L,60924L,60925L,60926L,60927L,
-60928L,60929L,60930L,60931L,60932L,60933L,60934L,60935L,60936L,60937L,
-60938L,60939L,60940L,60941L,60942L,60943L,60944L,60945L,60946L,60947L,
-60948L,60949L,60950L,60951L,60952L,60953L,60954L,60955L,60956L,60957L,
-60958L,60959L,60960L,60961L,60962L,60963L,60964L,60965L,60966L,60967L,
-60968L,60969L,60970L,60971L,60972L,60973L,60974L,60975L,60976L,60977L,
-60978L,60979L,60980L,60981L,60982L,60983L,60984L,60985L,60986L,60987L,
-60988L,60989L,60990L,60991L,60992L,60993L,60994L,60995L,60996L,60997L,
-60998L,60999L,61000L,61001L,61002L,61003L,61004L,61005L,61006L,61007L,
-61008L,61009L,61010L,61011L,61012L,61013L,61014L,61015L,61016L,61017L,
-61018L,61019L,61020L,61021L,61022L,61023L,61024L,61025L,61026L,61027L,
-61028L,61029L,61030L,61031L,61032L,61033L,61034L,61035L,61036L,61037L,
-61038L,61039L,61040L,61041L,61042L,61043L,61044L,61045L,61046L,61047L,
-61048L,61049L,61050L,61051L,61052L,61053L,61054L,61055L,61056L,61057L,
-61058L,61059L,61060L,61061L,61062L,61063L,61064L,61065L,61066L,61067L,
-61068L,61069L,61070L,61071L,61072L,61073L,61074L,61075L,61076L,61077L,
-61078L,61079L,61080L,61081L,61082L,61083L,61084L,61085L,61086L,61087L,
-61088L,61089L,61090L,61091L,61092L,61093L,61094L,61095L,61096L,61097L,
-61098L,61099L,61100L,61101L,61102L,61103L,61104L,61105L,61106L,61107L,
-61108L,61109L,61110L,61111L,61112L,61113L,61114L,61115L,61116L,61117L,
-61118L,61119L,61120L,61121L,61122L,61123L,61124L,61125L,61126L,61127L,
-61128L,61129L,61130L,61131L,61132L,61133L,61134L,61135L,61136L,61137L,
-61138L,61139L,61140L,61141L,61142L,61143L,61144L,61145L,61146L,61147L,
-61148L,61149L,61150L,61151L,61152L,61153L,61154L,61155L,61156L,61157L,
-61158L,61159L,61160L,61161L,61162L,61163L,61164L,61165L,61166L,61167L,
-61168L,61169L,61170L,61171L,61172L,61173L,61174L,61175L,61176L,61177L,
-61178L,61179L,61180L,61181L,61182L,61183L,61184L,61185L,61186L,61187L,
-61188L,61189L,61190L,61191L,61192L,61193L,61194L,61195L,61196L,61197L,
-61198L,61199L,61200L,61201L,61202L,61203L,61204L,61205L,61206L,61207L,
-61208L,61209L,61210L,61211L,61212L,61213L,61214L,61215L,61216L,61217L,
-61218L,61219L,61220L,61221L,61222L,61223L,61224L,61225L,61226L,61227L,
-61228L,61229L,61230L,61231L,61232L,61233L,61234L,61235L,61236L,61237L,
-61238L,61239L,61240L,61241L,61242L,61243L,61244L,61245L,61246L,61247L,
-61248L,61249L,61250L,61251L,61252L,61253L,61254L,61255L,61256L,61257L,
-61258L,61259L,61260L,61261L,61262L,61263L,61264L,61265L,61266L,61267L,
-61268L,61269L,61270L,61271L,61272L,61273L,61274L,61275L,61276L,61277L,
-61278L,61279L,61280L,61281L,61282L,61283L,61284L,61285L,61286L,61287L,
-61288L,61289L,61290L,61291L,61292L,61293L,61294L,61295L,61296L,61297L,
-61298L,61299L,61300L,61301L,61302L,61303L,61304L,61305L,61306L,61307L,
-61308L,61309L,61310L,61311L,61312L,61313L,61314L,61315L,61316L,61317L,
-61318L,61319L,61320L,61321L,61322L,61323L,61324L,61325L,61326L,61327L,
-61328L,61329L,61330L,61331L,61332L,61333L,61334L,61335L,61336L,61337L,
-61338L,61339L,61340L,61341L,61342L,61343L,61344L,61345L,61346L,61347L,
-61348L,61349L,61350L,61351L,61352L,61353L,61354L,61355L,61356L,61357L,
-61358L,61359L,61360L,61361L,61362L,61363L,61364L,61365L,61366L,61367L,
-61368L,61369L,61370L,61371L,61372L,61373L,61374L,61375L,61376L,61377L,
-61378L,61379L,61380L,61381L,61382L,61383L,61384L,61385L,61386L,61387L,
-61388L,61389L,61390L,61391L,61392L,61393L,61394L,61395L,61396L,61397L,
-61398L,61399L,61400L,61401L,61402L,61403L,61404L,61405L,61406L,61407L,
-61408L,61409L,61410L,61411L,61412L,61413L,61414L,61415L,61416L,61417L,
-61418L,61419L,61420L,61421L,61422L,61423L,61424L,61425L,61426L,61427L,
-61428L,61429L,61430L,61431L,61432L,61433L,61434L,61435L,61436L,61437L,
-61438L,61439L,61440L,61441L,61442L,61443L,61444L,61445L,61446L,61447L,
-61448L,61449L,61450L,61451L,61452L,61453L,61454L,61455L,61456L,61457L,
-61458L,61459L,61460L,61461L,61462L,61463L,61464L,61465L,61466L,61467L,
-61468L,61469L,61470L,61471L,61472L,61473L,61474L,61475L,61476L,61477L,
-61478L,61479L,61480L,61481L,61482L,61483L,61484L,61485L,61486L,61487L,
-61488L,61489L,61490L,61491L,61492L,61493L,61494L,61495L,61496L,61497L,
-61498L,61499L,61500L,61501L,61502L,61503L,61504L,61505L,61506L,61507L,
-61508L,61509L,61510L,61511L,61512L,61513L,61514L,61515L,61516L,61517L,
-61518L,61519L,61520L,61521L,61522L,61523L,61524L,61525L,61526L,61527L,
-61528L,61529L,61530L,61531L,61532L,61533L,61534L,61535L,61536L,61537L,
-61538L,61539L,61540L,61541L,61542L,61543L,61544L,61545L,61546L,61547L,
-61548L,61549L,61550L,61551L,61552L,61553L,61554L,61555L,61556L,61557L,
-61558L,61559L,61560L,61561L,61562L,61563L,61564L,61565L,61566L,61567L,
-61568L,61569L,61570L,61571L,61572L,61573L,61574L,61575L,61576L,61577L,
-61578L,61579L,61580L,61581L,61582L,61583L,61584L,61585L,61586L,61587L,
-61588L,61589L,61590L,61591L,61592L,61593L,61594L,61595L,61596L,61597L,
-61598L,61599L,61600L,61601L,61602L,61603L,61604L,61605L,61606L,61607L,
-61608L,61609L,61610L,61611L,61612L,61613L,61614L,61615L,61616L,61617L,
-61618L,61619L,61620L,61621L,61622L,61623L,61624L,61625L,61626L,61627L,
-61628L,61629L,61630L,61631L,61632L,61633L,61634L,61635L,61636L,61637L,
-61638L,61639L,61640L,61641L,61642L,61643L,61644L,61645L,61646L,61647L,
-61648L,61649L,61650L,61651L,61652L,61653L,61654L,61655L,61656L,61657L,
-61658L,61659L,61660L,61661L,61662L,61663L,61664L,61665L,61666L,61667L,
-61668L,61669L,61670L,61671L,61672L,61673L,61674L,61675L,61676L,61677L,
-61678L,61679L,61680L,61681L,61682L,61683L,61684L,61685L,61686L,61687L,
-61688L,61689L,61690L,61691L,61692L,61693L,61694L,61695L,61696L,61697L,
-61698L,61699L,61700L,61701L,61702L,61703L,61704L,61705L,61706L,61707L,
-61708L,61709L,61710L,61711L,61712L,61713L,61714L,61715L,61716L,61717L,
-61718L,61719L,61720L,61721L,61722L,61723L,61724L,61725L,61726L,61727L,
-61728L,61729L,61730L,61731L,61732L,61733L,61734L,61735L,61736L,61737L,
-61738L,61739L,61740L,61741L,61742L,61743L,61744L,61745L,61746L,61747L,
-61748L,61749L,61750L,61751L,61752L,61753L,61754L,61755L,61756L,61757L,
-61758L,61759L,61760L,61761L,61762L,61763L,61764L,61765L,61766L,61767L,
-61768L,61769L,61770L,61771L,61772L,61773L,61774L,61775L,61776L,61777L,
-61778L,61779L,61780L,61781L,61782L,61783L,61784L,61785L,61786L,61787L,
-61788L,61789L,61790L,61791L,61792L,61793L,61794L,61795L,61796L,61797L,
-61798L,61799L,61800L,61801L,61802L,61803L,61804L,61805L,61806L,61807L,
-61808L,61809L,61810L,61811L,61812L,61813L,61814L,61815L,61816L,61817L,
-61818L,61819L,61820L,61821L,61822L,61823L,61824L,61825L,61826L,61827L,
-61828L,61829L,61830L,61831L,61832L,61833L,61834L,61835L,61836L,61837L,
-61838L,61839L,61840L,61841L,61842L,61843L,61844L,61845L,61846L,61847L,
-61848L,61849L,61850L,61851L,61852L,61853L,61854L,61855L,61856L,61857L,
-61858L,61859L,61860L,61861L,61862L,61863L,61864L,61865L,61866L,61867L,
-61868L,61869L,61870L,61871L,61872L,61873L,61874L,61875L,61876L,61877L,
-61878L,61879L,61880L,61881L,61882L,61883L,61884L,61885L,61886L,61887L,
-61888L,61889L,61890L,61891L,61892L,61893L,61894L,61895L,61896L,61897L,
-61898L,61899L,61900L,61901L,61902L,61903L,61904L,61905L,61906L,61907L,
-61908L,61909L,61910L,61911L,61912L,61913L,61914L,61915L,61916L,61917L,
-61918L,61919L,61920L,61921L,61922L,61923L,61924L,61925L,61926L,61927L,
-61928L,61929L,61930L,61931L,61932L,61933L,61934L,61935L,61936L,61937L,
-61938L,61939L,61940L,61941L,61942L,61943L,61944L,61945L,61946L,61947L,
-61948L,61949L,61950L,61951L,61952L,61953L,61954L,61955L,61956L,61957L,
-61958L,61959L,61960L,61961L,61962L,61963L,61964L,61965L,61966L,61967L,
-61968L,61969L,61970L,61971L,61972L,61973L,61974L,61975L,61976L,61977L,
-61978L,61979L,61980L,61981L,61982L,61983L,61984L,61985L,61986L,61987L,
-61988L,61989L,61990L,61991L,61992L,61993L,61994L,61995L,61996L,61997L,
-61998L,61999L,62000L,62001L,62002L,62003L,62004L,62005L,62006L,62007L,
-62008L,62009L,62010L,62011L,62012L,62013L,62014L,62015L,62016L,62017L,
-62018L,62019L,62020L,62021L,62022L,62023L,62024L,62025L,62026L,62027L,
-62028L,62029L,62030L,62031L,62032L,62033L,62034L,62035L,62036L,62037L,
-62038L,62039L,62040L,62041L,62042L,62043L,62044L,62045L,62046L,62047L,
-62048L,62049L,62050L,62051L,62052L,62053L,62054L,62055L,62056L,62057L,
-62058L,62059L,62060L,62061L,62062L,62063L,62064L,62065L,62066L,62067L,
-62068L,62069L,62070L,62071L,62072L,62073L,62074L,62075L,62076L,62077L,
-62078L,62079L,62080L,62081L,62082L,62083L,62084L,62085L,62086L,62087L,
-62088L,62089L,62090L,62091L,62092L,62093L,62094L,62095L,62096L,62097L,
-62098L,62099L,62100L,62101L,62102L,62103L,62104L,62105L,62106L,62107L,
-62108L,62109L,62110L,62111L,62112L,62113L,62114L,62115L,62116L,62117L,
-62118L,62119L,62120L,62121L,62122L,62123L,62124L,62125L,62126L,62127L,
-62128L,62129L,62130L,62131L,62132L,62133L,62134L,62135L,62136L,62137L,
-62138L,62139L,62140L,62141L,62142L,62143L,62144L,62145L,62146L,62147L,
-62148L,62149L,62150L,62151L,62152L,62153L,62154L,62155L,62156L,62157L,
-62158L,62159L,62160L,62161L,62162L,62163L,62164L,62165L,62166L,62167L,
-62168L,62169L,62170L,62171L,62172L,62173L,62174L,62175L,62176L,62177L,
-62178L,62179L,62180L,62181L,62182L,62183L,62184L,62185L,62186L,62187L,
-62188L,62189L,62190L,62191L,62192L,62193L,62194L,62195L,62196L,62197L,
-62198L,62199L,62200L,62201L,62202L,62203L,62204L,62205L,62206L,62207L,
-62208L,62209L,62210L,62211L,62212L,62213L,62214L,62215L,62216L,62217L,
-62218L,62219L,62220L,62221L,62222L,62223L,62224L,62225L,62226L,62227L,
-62228L,62229L,62230L,62231L,62232L,62233L,62234L,62235L,62236L,62237L,
-62238L,62239L,62240L,62241L,62242L,62243L,62244L,62245L,62246L,62247L,
-62248L,62249L,62250L,62251L,62252L,62253L,62254L,62255L,62256L,62257L,
-62258L,62259L,62260L,62261L,62262L,62263L,62264L,62265L,62266L,62267L,
-62268L,62269L,62270L,62271L,62272L,62273L,62274L,62275L,62276L,62277L,
-62278L,62279L,62280L,62281L,62282L,62283L,62284L,62285L,62286L,62287L,
-62288L,62289L,62290L,62291L,62292L,62293L,62294L,62295L,62296L,62297L,
-62298L,62299L,62300L,62301L,62302L,62303L,62304L,62305L,62306L,62307L,
-62308L,62309L,62310L,62311L,62312L,62313L,62314L,62315L,62316L,62317L,
-62318L,62319L,62320L,62321L,62322L,62323L,62324L,62325L,62326L,62327L,
-62328L,62329L,62330L,62331L,62332L,62333L,62334L,62335L,62336L,62337L,
-62338L,62339L,62340L,62341L,62342L,62343L,62344L,62345L,62346L,62347L,
-62348L,62349L,62350L,62351L,62352L,62353L,62354L,62355L,62356L,62357L,
-62358L,62359L,62360L,62361L,62362L,62363L,62364L,62365L,62366L,62367L,
-62368L,62369L,62370L,62371L,62372L,62373L,62374L,62375L,62376L,62377L,
-62378L,62379L,62380L,62381L,62382L,62383L,62384L,62385L,62386L,62387L,
-62388L,62389L,62390L,62391L,62392L,62393L,62394L,62395L,62396L,62397L,
-62398L,62399L,62400L,62401L,62402L,62403L,62404L,62405L,62406L,62407L,
-62408L,62409L,62410L,62411L,62412L,62413L,62414L,62415L,62416L,62417L,
-62418L,62419L,62420L,62421L,62422L,62423L,62424L,62425L,62426L,62427L,
-62428L,62429L,62430L,62431L,62432L,62433L,62434L,62435L,62436L,62437L,
-62438L,62439L,62440L,62441L,62442L,62443L,62444L,62445L,62446L,62447L,
-62448L,62449L,62450L,62451L,62452L,62453L,62454L,62455L,62456L,62457L,
-62458L,62459L,62460L,62461L,62462L,62463L,62464L,62465L,62466L,62467L,
-62468L,62469L,62470L,62471L,62472L,62473L,62474L,62475L,62476L,62477L,
-62478L,62479L,62480L,62481L,62482L,62483L,62484L,62485L,62486L,62487L,
-62488L,62489L,62490L,62491L,62492L,62493L,62494L,62495L,62496L,62497L,
-62498L,62499L,62500L,62501L,62502L,62503L,62504L,62505L,62506L,62507L,
-62508L,62509L,62510L,62511L,62512L,62513L,62514L,62515L,62516L,62517L,
-62518L,62519L,62520L,62521L,62522L,62523L,62524L,62525L,62526L,62527L,
-62528L,62529L,62530L,62531L,62532L,62533L,62534L,62535L,62536L,62537L,
-62538L,62539L,62540L,62541L,62542L,62543L,62544L,62545L,62546L,62547L,
-62548L,62549L,62550L,62551L,62552L,62553L,62554L,62555L,62556L,62557L,
-62558L,62559L,62560L,62561L,62562L,62563L,62564L,62565L,62566L,62567L,
-62568L,62569L,62570L,62571L,62572L,62573L,62574L,62575L,62576L,62577L,
-62578L,62579L,62580L,62581L,62582L,62583L,62584L,62585L,62586L,62587L,
-62588L,62589L,62590L,62591L,62592L,62593L,62594L,62595L,62596L,62597L,
-62598L,62599L,62600L,62601L,62602L,62603L,62604L,62605L,62606L,62607L,
-62608L,62609L,62610L,62611L,62612L,62613L,62614L,62615L,62616L,62617L,
-62618L,62619L,62620L,62621L,62622L,62623L,62624L,62625L,62626L,62627L,
-62628L,62629L,62630L,62631L,62632L,62633L,62634L,62635L,62636L,62637L,
-62638L,62639L,62640L,62641L,62642L,62643L,62644L,62645L,62646L,62647L,
-62648L,62649L,62650L,62651L,62652L,62653L,62654L,62655L,62656L,62657L,
-62658L,62659L,62660L,62661L,62662L,62663L,62664L,62665L,62666L,62667L,
-62668L,62669L,62670L,62671L,62672L,62673L,62674L,62675L,62676L,62677L,
-62678L,62679L,62680L,62681L,62682L,62683L,62684L,62685L,62686L,62687L,
-62688L,62689L,62690L,62691L,62692L,62693L,62694L,62695L,62696L,62697L,
-62698L,62699L,62700L,62701L,62702L,62703L,62704L,62705L,62706L,62707L,
-62708L,62709L,62710L,62711L,62712L,62713L,62714L,62715L,62716L,62717L,
-62718L,62719L,62720L,62721L,62722L,62723L,62724L,62725L,62726L,62727L,
-62728L,62729L,62730L,62731L,62732L,62733L,62734L,62735L,62736L,62737L,
-62738L,62739L,62740L,62741L,62742L,62743L,62744L,62745L,62746L,62747L,
-62748L,62749L,62750L,62751L,62752L,62753L,62754L,62755L,62756L,62757L,
-62758L,62759L,62760L,62761L,62762L,62763L,62764L,62765L,62766L,62767L,
-62768L,62769L,62770L,62771L,62772L,62773L,62774L,62775L,62776L,62777L,
-62778L,62779L,62780L,62781L,62782L,62783L,62784L,62785L,62786L,62787L,
-62788L,62789L,62790L,62791L,62792L,62793L,62794L,62795L,62796L,62797L,
-62798L,62799L,62800L,62801L,62802L,62803L,62804L,62805L,62806L,62807L,
-62808L,62809L,62810L,62811L,62812L,62813L,62814L,62815L,62816L,62817L,
-62818L,62819L,62820L,62821L,62822L,62823L,62824L,62825L,62826L,62827L,
-62828L,62829L,62830L,62831L,62832L,62833L,62834L,62835L,62836L,62837L,
-62838L,62839L,62840L,62841L,62842L,62843L,62844L,62845L,62846L,62847L,
-62848L,62849L,62850L,62851L,62852L,62853L,62854L,62855L,62856L,62857L,
-62858L,62859L,62860L,62861L,62862L,62863L,62864L,62865L,62866L,62867L,
-62868L,62869L,62870L,62871L,62872L,62873L,62874L,62875L,62876L,62877L,
-62878L,62879L,62880L,62881L,62882L,62883L,62884L,62885L,62886L,62887L,
-62888L,62889L,62890L,62891L,62892L,62893L,62894L,62895L,62896L,62897L,
-62898L,62899L,62900L,62901L,62902L,62903L,62904L,62905L,62906L,62907L,
-62908L,62909L,62910L,62911L,62912L,62913L,62914L,62915L,62916L,62917L,
-62918L,62919L,62920L,62921L,62922L,62923L,62924L,62925L,62926L,62927L,
-62928L,62929L,62930L,62931L,62932L,62933L,62934L,62935L,62936L,62937L,
-62938L,62939L,62940L,62941L,62942L,62943L,62944L,62945L,62946L,62947L,
-62948L,62949L,62950L,62951L,62952L,62953L,62954L,62955L,62956L,62957L,
-62958L,62959L,62960L,62961L,62962L,62963L,62964L,62965L,62966L,62967L,
-62968L,62969L,62970L,62971L,62972L,62973L,62974L,62975L,62976L,62977L,
-62978L,62979L,62980L,62981L,62982L,62983L,62984L,62985L,62986L,62987L,
-62988L,62989L,62990L,62991L,62992L,62993L,62994L,62995L,62996L,62997L,
-62998L,62999L,63000L,63001L,63002L,63003L,63004L,63005L,63006L,63007L,
-63008L,63009L,63010L,63011L,63012L,63013L,63014L,63015L,63016L,63017L,
-63018L,63019L,63020L,63021L,63022L,63023L,63024L,63025L,63026L,63027L,
-63028L,63029L,63030L,63031L,63032L,63033L,63034L,63035L,63036L,63037L,
-63038L,63039L,63040L,63041L,63042L,63043L,63044L,63045L,63046L,63047L,
-63048L,63049L,63050L,63051L,63052L,63053L,63054L,63055L,63056L,63057L,
-63058L,63059L,63060L,63061L,63062L,63063L,63064L,63065L,63066L,63067L,
-63068L,63069L,63070L,63071L,63072L,63073L,63074L,63075L,63076L,63077L,
-63078L,63079L,63080L,63081L,63082L,63083L,63084L,63085L,63086L,63087L,
-63088L,63089L,63090L,63091L,63092L,63093L,63094L,63095L,63096L,63097L,
-63098L,63099L,63100L,63101L,63102L,63103L,63104L,63105L,63106L,63107L,
-63108L,63109L,63110L,63111L,63112L,63113L,63114L,63115L,63116L,63117L,
-63118L,63119L,63120L,63121L,63122L,63123L,63124L,63125L,63126L,63127L,
-63128L,63129L,63130L,63131L,63132L,63133L,63134L,63135L,63136L,63137L,
-63138L,63139L,63140L,63141L,63142L,63143L,63144L,63145L,63146L,63147L,
-63148L,63149L,63150L,63151L,63152L,63153L,63154L,63155L,63156L,63157L,
-63158L,63159L,63160L,63161L,63162L,63163L,63164L,63165L,63166L,63167L,
-63168L,63169L,63170L,63171L,63172L,63173L,63174L,63175L,63176L,63177L,
-63178L,63179L,63180L,63181L,63182L,63183L,63184L,63185L,63186L,63187L,
-63188L,63189L,63190L,63191L,63192L,63193L,63194L,63195L,63196L,63197L,
-63198L,63199L,63200L,63201L,63202L,63203L,63204L,63205L,63206L,63207L,
-63208L,63209L,63210L,63211L,63212L,63213L,63214L,63215L,63216L,63217L,
-63218L,63219L,63220L,63221L,63222L,63223L,63224L,63225L,63226L,63227L,
-63228L,63229L,63230L,63231L,63232L,63233L,63234L,63235L,63236L,63237L,
-63238L,63239L,63240L,63241L,63242L,63243L,63244L,63245L,63246L,63247L,
-63248L,63249L,63250L,63251L,63252L,63253L,63254L,63255L,63256L,63257L,
-63258L,63259L,63260L,63261L,63262L,63263L,63264L,63265L,63266L,63267L,
-63268L,63269L,63270L,63271L,63272L,63273L,63274L,63275L,63276L,63277L,