summaryrefslogtreecommitdiffstats
path: root/src/3rdparty
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty')
-rw-r--r--src/3rdparty/gradle/gradle/wrapper/gradle-wrapper.properties2
-rw-r--r--src/3rdparty/gradle/qt_attribution.json6
-rw-r--r--src/3rdparty/harfbuzz-ng/import_from_tarball.sh5
-rw-r--r--src/3rdparty/harfbuzz-ng/qt_attribution.json4
-rw-r--r--src/3rdparty/harfbuzz-ng/src/OT/Color/COLR/COLR.hh308
-rw-r--r--src/3rdparty/harfbuzz-ng/src/OT/Color/COLR/colrv1-closure.hh50
-rw-r--r--src/3rdparty/harfbuzz-ng/src/OT/Layout/GDEF/GDEF.hh41
-rw-r--r--src/3rdparty/harfbuzz-ng/src/OT/Layout/GSUB/Ligature.hh15
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-aat-layout-common.hh203
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-aat-layout-kerx-table.hh183
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-aat-layout-morx-table.hh262
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-aat-layout.cc53
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-algs.hh4
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-cff2-interp-cs.hh8
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-cplusplus.hh3
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-face-table-list.hh8
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-face.cc2
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-hmtx-table.hh3
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-kern-table.hh71
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-layout-base-table.hh75
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-layout-common.hh14
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-layout-gsubgpos.hh83
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-layout.cc8
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-os2-table.hh2
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-post-table.hh2
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-stat-table.hh3
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-tag-table.hh45
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-var-avar-table.hh8
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-var-common.hh94
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-var-fvar-table.hh7
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-var-gvar-table.hh5
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-repacker.hh18
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-set-digest.hh20
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-set.hh2
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-subset-cff-common.hh57
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-subset-cff2.cc3
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-subset-input.cc15
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-subset-instancer-iup.cc68
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-subset-instancer-iup.hh2
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-subset-instancer-solver.cc94
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-subset-instancer-solver.hh32
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-subset-plan-member-list.hh8
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-subset-plan.cc185
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-subset.h11
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-version.h4
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-wasm-api.h3
-rw-r--r--src/3rdparty/libjpeg/LICENSE31
-rwxr-xr-xsrc/3rdparty/libjpeg/import_from_libjpeg_tarball.sh2
-rw-r--r--src/3rdparty/libjpeg/qt_attribution.json10
-rw-r--r--src/3rdparty/libjpeg/src/ChangeLog.md24
-rw-r--r--src/3rdparty/libjpeg/src/jcmaster.c122
-rw-r--r--src/3rdparty/libjpeg/src/jconfig.h4
-rw-r--r--src/3rdparty/libjpeg/src/jconfigint.h2
-rw-r--r--src/3rdparty/libjpeg/src/jerror.c14
-rw-r--r--src/3rdparty/libjpeg/src/jversion.h7
-rw-r--r--src/3rdparty/libjpeg/zlib-license.txt15
-rw-r--r--src/3rdparty/libpsl/psl_data.cpp8360
-rw-r--r--src/3rdparty/libpsl/qt_attribution.json2
-rwxr-xr-xsrc/3rdparty/pcre2/import_from_pcre2_tarball.sh3
-rw-r--r--src/3rdparty/pcre2/qt_attribution.json8
-rw-r--r--src/3rdparty/pcre2/src/pcre2.h7
-rw-r--r--src/3rdparty/pcre2/src/pcre2_compile.c27
-rw-r--r--src/3rdparty/pcre2/src/pcre2_context.c10
-rw-r--r--src/3rdparty/pcre2/src/pcre2_error.c3
-rw-r--r--src/3rdparty/pcre2/src/pcre2_extuni.c28
-rw-r--r--src/3rdparty/pcre2/src/pcre2_intmodedep.h3
-rw-r--r--src/3rdparty/pcre2/src/pcre2_jit_compile.c152
-rw-r--r--src/3rdparty/pcre2/src/pcre2_jit_misc.c4
-rw-r--r--src/3rdparty/pcre2/src/pcre2_jit_simd_inc.h2
-rw-r--r--src/3rdparty/pcre2/src/pcre2_match.c2
-rw-r--r--src/3rdparty/pcre2/src/pcre2_tables.c12
-rw-r--r--src/3rdparty/pcre2/src/sljit/allocator_src/sljitExecAllocatorApple.c6
-rw-r--r--src/3rdparty/pcre2/src/sljit/allocator_src/sljitExecAllocatorCore.c23
-rw-r--r--src/3rdparty/pcre2/src/sljit/sljitConfigInternal.h76
-rw-r--r--src/3rdparty/pcre2/src/sljit/sljitExecAllocator.c411
-rw-r--r--src/3rdparty/pcre2/src/sljit/sljitLir.c301
-rw-r--r--src/3rdparty/pcre2/src/sljit/sljitLir.h243
-rw-r--r--src/3rdparty/pcre2/src/sljit/sljitNativeARM_32.c521
-rw-r--r--src/3rdparty/pcre2/src/sljit/sljitNativeARM_64.c505
-rw-r--r--src/3rdparty/pcre2/src/sljit/sljitNativeARM_T2_32.c473
-rw-r--r--src/3rdparty/pcre2/src/sljit/sljitNativeLOONGARCH_64.c3765
-rw-r--r--src/3rdparty/pcre2/src/sljit/sljitNativeMIPS_32.c6
-rw-r--r--src/3rdparty/pcre2/src/sljit/sljitNativeMIPS_64.c6
-rw-r--r--src/3rdparty/pcre2/src/sljit/sljitNativeMIPS_common.c288
-rw-r--r--src/3rdparty/pcre2/src/sljit/sljitNativePPC_common.c583
-rw-r--r--src/3rdparty/pcre2/src/sljit/sljitNativeRISCV_common.c510
-rw-r--r--src/3rdparty/pcre2/src/sljit/sljitNativeS390X.c437
-rw-r--r--src/3rdparty/pcre2/src/sljit/sljitNativeSPARC_32.c283
-rw-r--r--src/3rdparty/pcre2/src/sljit/sljitNativeSPARC_common.c1673
-rw-r--r--src/3rdparty/pcre2/src/sljit/sljitNativeX86_32.c118
-rw-r--r--src/3rdparty/pcre2/src/sljit/sljitNativeX86_64.c134
-rw-r--r--src/3rdparty/pcre2/src/sljit/sljitNativeX86_common.c992
-rw-r--r--src/3rdparty/pcre2/src/sljit/sljitProtExecAllocator.c474
-rw-r--r--src/3rdparty/pcre2/src/sljit/sljitSerialize.c516
-rw-r--r--src/3rdparty/pcre2/src/sljit/sljitWXExecAllocator.c204
-rw-r--r--src/3rdparty/sqlite/qt_attribution.json4
-rw-r--r--src/3rdparty/sqlite/sqlite3.c8475
-rw-r--r--src/3rdparty/sqlite/sqlite3.h97
98 files changed, 18825 insertions, 13252 deletions
diff --git a/src/3rdparty/gradle/gradle/wrapper/gradle-wrapper.properties b/src/3rdparty/gradle/gradle/wrapper/gradle-wrapper.properties
index ac72c34e8a..b82aa23a4f 100644
--- a/src/3rdparty/gradle/gradle/wrapper/gradle-wrapper.properties
+++ b/src/3rdparty/gradle/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
diff --git a/src/3rdparty/gradle/qt_attribution.json b/src/3rdparty/gradle/qt_attribution.json
index 8e759c8877..bbb069c2fb 100644
--- a/src/3rdparty/gradle/qt_attribution.json
+++ b/src/3rdparty/gradle/qt_attribution.json
@@ -4,11 +4,11 @@
"QDocModule": "qtcore",
"QtParts": ["tools"],
"Homepage": "https://gradle.org",
- "Version": "8.3",
- "DownloadLocation": "https://github.com/gradle/gradle/releases/tag/v8.3.0",
+ "Version": "8.7",
+ "DownloadLocation": "https://github.com/gradle/gradle/releases/tag/v8.7.0",
"QtUsage": "Needed to create Android packages",
"License": "Apache License 2.0",
"LicenseId": "Apache-2.0",
"LicenseFile": "LICENSE",
- "Copyright": "Copyright (C) 2023 Gradle Inc."
+ "Copyright": "Copyright (C) 2024 Gradle Inc."
}
diff --git a/src/3rdparty/harfbuzz-ng/import_from_tarball.sh b/src/3rdparty/harfbuzz-ng/import_from_tarball.sh
index 00d069fd79..717383e0b6 100644
--- a/src/3rdparty/harfbuzz-ng/import_from_tarball.sh
+++ b/src/3rdparty/harfbuzz-ng/import_from_tarball.sh
@@ -6,9 +6,10 @@
# This is a small script to copy the required files from a harfbuzz tarball
# into 3rdparty/harfbuzz-ng/ . Documentation, tests, demos etc. are not imported.
# Steps:
-# 1. rm $QTDIR/src/3rdparty/harfbuzz-ng/src/* && rm $QTDIR/src/3rdparty/harfbuzz-ng/src/OT/Layout/GSUB
+# 1. rm -rf $QTDIR/src/3rdparty/harfbuzz-ng/src/ && mkdir src
# 2. source import_from_tarball.sh harfbuzz_tarball_dir/ $QTDIR/src/3rdparty/harfbuzz-ng/
-# 3. Check that CMakeLists contains everything
+# 3. If there are new files, check if they need to be added (just source files and no test stuff)
+# 4. Check that CMakeLists contains everything new
if [ $# -ne 2 ]; then
echo "Usage: $0 harfbuzz_tarball_dir/ \$QTDIR/src/3rdparty/harfbuzz-ng/"
diff --git a/src/3rdparty/harfbuzz-ng/qt_attribution.json b/src/3rdparty/harfbuzz-ng/qt_attribution.json
index 8b862c418a..6762b22093 100644
--- a/src/3rdparty/harfbuzz-ng/qt_attribution.json
+++ b/src/3rdparty/harfbuzz-ng/qt_attribution.json
@@ -7,8 +7,8 @@
"Description": "HarfBuzz is an OpenType text shaping engine.",
"Homepage": "http://harfbuzz.org",
- "Version": "8.4.0",
- "DownloadLocation": "https://github.com/harfbuzz/harfbuzz/releases/tag/8.4.0",
+ "Version": "8.5.0",
+ "DownloadLocation": "https://github.com/harfbuzz/harfbuzz/releases/tag/8.5.0",
"License": "MIT License",
"LicenseId": "MIT",
diff --git a/src/3rdparty/harfbuzz-ng/src/OT/Color/COLR/COLR.hh b/src/3rdparty/harfbuzz-ng/src/OT/Color/COLR/COLR.hh
index 623775a771..835d87f8c6 100644
--- a/src/3rdparty/harfbuzz-ng/src/OT/Color/COLR/COLR.hh
+++ b/src/3rdparty/harfbuzz-ng/src/OT/Color/COLR/COLR.hh
@@ -159,23 +159,35 @@ struct hb_colrv1_closure_context_t :
void add_palette_index (unsigned palette_index)
{ palette_indices->add (palette_index); }
+ void add_var_idxes (unsigned first_var_idx, unsigned num_idxes)
+ {
+ if (!num_idxes || first_var_idx == VarIdx::NO_VARIATION) return;
+ variation_indices->add_range (first_var_idx, first_var_idx + num_idxes - 1);
+ }
+
public:
const void *base;
hb_set_t visited_paint;
hb_set_t *glyphs;
hb_set_t *layer_indices;
hb_set_t *palette_indices;
+ hb_set_t *variation_indices;
+ unsigned num_var_idxes;
unsigned nesting_level_left;
hb_colrv1_closure_context_t (const void *base_,
hb_set_t *glyphs_,
hb_set_t *layer_indices_,
hb_set_t *palette_indices_,
+ hb_set_t *variation_indices_,
+ unsigned num_var_idxes_ = 1,
unsigned nesting_level_left_ = HB_MAX_NESTING_LEVEL) :
base (base_),
glyphs (glyphs_),
layer_indices (layer_indices_),
palette_indices (palette_indices_),
+ variation_indices (variation_indices_),
+ num_var_idxes (num_var_idxes_),
nesting_level_left (nesting_level_left_)
{}
};
@@ -242,7 +254,12 @@ struct Variable
}
void closurev1 (hb_colrv1_closure_context_t* c) const
- { value.closurev1 (c); }
+ {
+ c->num_var_idxes = 0;
+ // update c->num_var_idxes during value closure
+ value.closurev1 (c);
+ c->add_var_idxes (varIdxBase, c->num_var_idxes);
+ }
bool subset (hb_subset_context_t *c,
const ItemVarStoreInstancer &instancer) const
@@ -252,8 +269,18 @@ struct Variable
if (c->plan->all_axes_pinned)
return_trace (true);
- //TODO: update varIdxBase for partial-instancing
- return_trace (c->serializer->embed (varIdxBase));
+ VarIdx new_varidx;
+ new_varidx = varIdxBase;
+ if (varIdxBase != VarIdx::NO_VARIATION)
+ {
+ hb_pair_t<unsigned, int> *new_varidx_delta;
+ if (!c->plan->colrv1_variation_idx_delta_map.has (varIdxBase, &new_varidx_delta))
+ return_trace (false);
+
+ new_varidx = hb_first (*new_varidx_delta);
+ }
+
+ return_trace (c->serializer->embed (new_varidx));
}
bool sanitize (hb_sanitize_context_t *c) const
@@ -345,7 +372,10 @@ struct NoVariable
struct ColorStop
{
void closurev1 (hb_colrv1_closure_context_t* c) const
- { c->add_palette_index (paletteIndex); }
+ {
+ c->add_palette_index (paletteIndex);
+ c->num_var_idxes = 2;
+ }
bool subset (hb_subset_context_t *c,
const ItemVarStoreInstancer &instancer,
@@ -542,6 +572,9 @@ struct Affine2x3
return_trace (c->check_struct (this));
}
+ void closurev1 (hb_colrv1_closure_context_t* c) const
+ { c->num_var_idxes = 6; }
+
bool subset (hb_subset_context_t *c,
const ItemVarStoreInstancer &instancer,
uint32_t varIdxBase) const
@@ -617,7 +650,10 @@ struct PaintColrLayers
struct PaintSolid
{
void closurev1 (hb_colrv1_closure_context_t* c) const
- { c->add_palette_index (paletteIndex); }
+ {
+ c->add_palette_index (paletteIndex);
+ c->num_var_idxes = 1;
+ }
bool subset (hb_subset_context_t *c,
const ItemVarStoreInstancer &instancer,
@@ -666,7 +702,10 @@ template <template<typename> class Var>
struct PaintLinearGradient
{
void closurev1 (hb_colrv1_closure_context_t* c) const
- { (this+colorLine).closurev1 (c); }
+ {
+ (this+colorLine).closurev1 (c);
+ c->num_var_idxes = 6;
+ }
bool subset (hb_subset_context_t *c,
const ItemVarStoreInstancer &instancer,
@@ -733,7 +772,10 @@ template <template<typename> class Var>
struct PaintRadialGradient
{
void closurev1 (hb_colrv1_closure_context_t* c) const
- { (this+colorLine).closurev1 (c); }
+ {
+ (this+colorLine).closurev1 (c);
+ c->num_var_idxes = 6;
+ }
bool subset (hb_subset_context_t *c,
const ItemVarStoreInstancer &instancer,
@@ -800,7 +842,10 @@ template <template<typename> class Var>
struct PaintSweepGradient
{
void closurev1 (hb_colrv1_closure_context_t* c) const
- { (this+colorLine).closurev1 (c); }
+ {
+ (this+colorLine).closurev1 (c);
+ c->num_var_idxes = 4;
+ }
bool subset (hb_subset_context_t *c,
const ItemVarStoreInstancer &instancer,
@@ -1544,6 +1589,9 @@ struct ClipBoxFormat2 : Variable<ClipBoxFormat1>
clip_box.yMax += roundf (instancer (varIdxBase, 3));
}
}
+
+ void closurev1 (hb_colrv1_closure_context_t* c) const
+ { c->variation_indices->add_range (varIdxBase, varIdxBase + 3); }
};
struct ClipBox
@@ -1559,6 +1607,14 @@ struct ClipBox
}
}
+ void closurev1 (hb_colrv1_closure_context_t* c) const
+ {
+ switch (u.format) {
+ case 2: u.format2.closurev1 (c);
+ default:return;
+ }
+ }
+
template <typename context_t, typename ...Ts>
typename context_t::return_t dispatch (context_t *c, Ts&&... ds) const
{
@@ -1606,6 +1662,12 @@ struct ClipRecord
int cmp (hb_codepoint_t g) const
{ return g < startGlyphID ? -1 : g <= endGlyphID ? 0 : +1; }
+ void closurev1 (hb_colrv1_closure_context_t* c, const void *base) const
+ {
+ if (!c->glyphs->intersects (startGlyphID, endGlyphID)) return;
+ (base+clipBox).closurev1 (c);
+ }
+
bool subset (hb_subset_context_t *c,
const void *base,
const ItemVarStoreInstancer &instancer) const
@@ -1941,6 +2003,76 @@ struct LayerList : Array32OfOffset32To<Paint>
}
};
+struct delta_set_index_map_subset_plan_t
+{
+ unsigned get_inner_bit_count () const { return inner_bit_count; }
+ unsigned get_width () const { return ((outer_bit_count + inner_bit_count + 7) / 8); }
+ hb_array_t<const uint32_t> get_output_map () const { return output_map.as_array (); }
+
+ delta_set_index_map_subset_plan_t (const hb_map_t &new_deltaset_idx_varidx_map)
+ {
+ map_count = 0;
+ outer_bit_count = 0;
+ inner_bit_count = 1;
+ output_map.init ();
+
+ /* search backwards */
+ unsigned count = new_deltaset_idx_varidx_map.get_population ();
+ if (!count) return;
+
+ unsigned last_idx = (unsigned)-1;
+ unsigned last_varidx = (unsigned)-1;
+
+ for (unsigned i = count; i; i--)
+ {
+ unsigned delta_set_idx = i - 1;
+ unsigned var_idx = new_deltaset_idx_varidx_map.get (delta_set_idx);
+ if (i == count)
+ {
+ last_idx = delta_set_idx;
+ last_varidx = var_idx;
+ continue;
+ }
+ if (var_idx != last_varidx)
+ break;
+ last_idx = delta_set_idx;
+ }
+
+ map_count = last_idx + 1;
+ }
+
+ bool remap (const hb_map_t &new_deltaset_idx_varidx_map)
+ {
+ /* recalculate bit_count */
+ outer_bit_count = 1;
+ inner_bit_count = 1;
+
+ if (unlikely (!output_map.resize (map_count, false))) return false;
+
+ for (unsigned idx = 0; idx < map_count; idx++)
+ {
+ uint32_t *var_idx;
+ if (!new_deltaset_idx_varidx_map.has (idx, &var_idx)) return false;
+ output_map.arrayZ[idx] = *var_idx;
+
+ unsigned outer = (*var_idx) >> 16;
+ unsigned bit_count = (outer == 0) ? 1 : hb_bit_storage (outer);
+ outer_bit_count = hb_max (bit_count, outer_bit_count);
+
+ unsigned inner = (*var_idx) & 0xFFFF;
+ bit_count = (inner == 0) ? 1 : hb_bit_storage (inner);
+ inner_bit_count = hb_max (bit_count, inner_bit_count);
+ }
+ return true;
+ }
+
+ private:
+ unsigned map_count;
+ unsigned outer_bit_count;
+ unsigned inner_bit_count;
+ hb_vector_t<uint32_t> output_map;
+};
+
struct COLR
{
static constexpr hb_tag_t tableTag = HB_OT_TAG_COLR;
@@ -1992,8 +2124,22 @@ struct COLR
void closure_forV1 (hb_set_t *glyphset,
hb_set_t *layer_indices,
- hb_set_t *palette_indices) const
- { colr->closure_forV1 (glyphset, layer_indices, palette_indices); }
+ hb_set_t *palette_indices,
+ hb_set_t *variation_indices,
+ hb_set_t *delta_set_indices) const
+ { colr->closure_forV1 (glyphset, layer_indices, palette_indices, variation_indices, delta_set_indices); }
+
+ bool has_var_store () const
+ { return colr->has_var_store (); }
+
+ const ItemVariationStore &get_var_store () const
+ { return colr->get_var_store (); }
+
+ bool has_delta_set_index_map () const
+ { return colr->has_delta_set_index_map (); }
+
+ const DeltaSetIndexMap &get_delta_set_index_map () const
+ { return colr->get_delta_set_index_map (); }
private:
hb_blob_ptr_t<COLR> colr;
@@ -2030,14 +2176,16 @@ struct COLR
void closure_forV1 (hb_set_t *glyphset,
hb_set_t *layer_indices,
- hb_set_t *palette_indices) const
+ hb_set_t *palette_indices,
+ hb_set_t *variation_indices,
+ hb_set_t *delta_set_indices) const
{
if (version != 1) return;
hb_barrier ();
hb_set_t visited_glyphs;
- hb_colrv1_closure_context_t c (this, &visited_glyphs, layer_indices, palette_indices);
+ hb_colrv1_closure_context_t c (this, &visited_glyphs, layer_indices, palette_indices, variation_indices);
const BaseGlyphList &baseglyph_paintrecords = this+baseGlyphList;
for (const BaseGlyphPaintRecord &baseglyph_paintrecord: baseglyph_paintrecords.iter ())
@@ -2049,6 +2197,22 @@ struct COLR
paint.dispatch (&c);
}
hb_set_union (glyphset, &visited_glyphs);
+
+ const ClipList &cliplist = this+clipList;
+ c.glyphs = glyphset;
+ for (const ClipRecord &clip_record : cliplist.clips.iter())
+ clip_record.closurev1 (&c, &cliplist);
+
+ // if a DeltaSetIndexMap is included, collected variation indices are
+ // actually delta set indices, we need to map them into variation indices
+ if (has_delta_set_index_map ())
+ {
+ const DeltaSetIndexMap &var_idx_map = this+varIdxMap;
+ delta_set_indices->set (*variation_indices);
+ variation_indices->clear ();
+ for (unsigned delta_set_idx : *delta_set_indices)
+ variation_indices->add (var_idx_map.map (delta_set_idx));
+ }
}
const LayerList& get_layerList () const
@@ -2057,6 +2221,18 @@ struct COLR
const BaseGlyphList& get_baseglyphList () const
{ return (this+baseGlyphList); }
+ bool has_var_store () const
+ { return version >= 1 && varStore != 0; }
+
+ bool has_delta_set_index_map () const
+ { return version >= 1 && varIdxMap != 0; }
+
+ const DeltaSetIndexMap &get_delta_set_index_map () const
+ { return (version == 0 || varIdxMap == 0) ? Null (DeltaSetIndexMap) : this+varIdxMap; }
+
+ const ItemVariationStore &get_var_store () const
+ { return (version == 0 || varStore == 0) ? Null (ItemVariationStore) : this+varStore; }
+
bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
@@ -2132,6 +2308,88 @@ struct COLR
return record;
}
+ bool downgrade_to_V0 (const hb_set_t &glyphset) const
+ {
+ //no more COLRv1 glyphs, downgrade to version 0
+ for (const BaseGlyphPaintRecord& _ : get_baseglyphList ())
+ if (glyphset.has (_.glyphId))
+ return false;
+
+ return true;
+ }
+
+ bool subset_varstore (hb_subset_context_t *c,
+ COLR* out /* OUT */) const
+ {
+ TRACE_SUBSET (this);
+ if (!varStore || c->plan->all_axes_pinned ||
+ !c->plan->colrv1_variation_idx_delta_map)
+ return_trace (true);
+
+ const ItemVariationStore& var_store = this+varStore;
+ if (c->plan->normalized_coords)
+ {
+ item_variations_t item_vars;
+ /* turn off varstore optimization when varIdxMap is null, so we maintain
+ * original var_idx sequence */
+ bool optimize = (varIdxMap != 0) ? true : false;
+ if (!item_vars.instantiate (var_store, c->plan,
+ optimize, /* optimization */
+ optimize, /* use_no_variation_idx = false */
+ c->plan->colrv1_varstore_inner_maps.as_array ()))
+ return_trace (false);
+
+ if (!out->varStore.serialize_serialize (c->serializer,
+ item_vars.has_long_word (),
+ c->plan->axis_tags,
+ item_vars.get_region_list (),
+ item_vars.get_vardata_encodings ()))
+ return_trace (false);
+
+ /* if varstore is optimized, update colrv1_new_deltaset_idx_varidx_map in
+ * subset plan */
+ if (optimize)
+ {
+ const hb_map_t &varidx_map = item_vars.get_varidx_map ();
+ for (auto _ : c->plan->colrv1_new_deltaset_idx_varidx_map.iter_ref ())
+ {
+ uint32_t varidx = _.second;
+ uint32_t *new_varidx;
+ if (varidx_map.has (varidx, &new_varidx))
+ _.second = *new_varidx;
+ else
+ _.second = VarIdx::NO_VARIATION;
+ }
+ }
+ }
+ else
+ {
+ if (unlikely (!out->varStore.serialize_serialize (c->serializer,
+ &var_store,
+ c->plan->colrv1_varstore_inner_maps.as_array ())))
+ return_trace (false);
+ }
+
+ return_trace (true);
+ }
+
+ bool subset_delta_set_index_map (hb_subset_context_t *c,
+ COLR* out /* OUT */) const
+ {
+ TRACE_SUBSET (this);
+ if (!varIdxMap || c->plan->all_axes_pinned ||
+ !c->plan->colrv1_new_deltaset_idx_varidx_map)
+ return_trace (true);
+
+ const hb_map_t &deltaset_idx_varidx_map = c->plan->colrv1_new_deltaset_idx_varidx_map;
+ delta_set_index_map_subset_plan_t index_map_plan (deltaset_idx_varidx_map);
+
+ if (unlikely (!index_map_plan.remap (deltaset_idx_varidx_map)))
+ return_trace (false);
+
+ return_trace (out->varIdxMap.serialize_serialize (c->serializer, index_map_plan));
+ }
+
bool subset (hb_subset_context_t *c) const
{
TRACE_SUBSET (this);
@@ -2200,34 +2458,28 @@ struct COLR
auto *colr_prime = c->serializer->start_embed<COLR> ();
if (unlikely (!c->serializer->extend_min (colr_prime))) return_trace (false);
- if (version == 0)
- return_trace (colr_prime->serialize_V0 (c->serializer, version, base_it, layer_it));
+ if (version == 0 || downgrade_to_V0 (glyphset))
+ return_trace (colr_prime->serialize_V0 (c->serializer, 0, base_it, layer_it));
- auto snap = c->serializer->snapshot ();
+ //start version 1
if (!c->serializer->allocate_size<void> (5 * HBUINT32::static_size)) return_trace (false);
+ if (!colr_prime->serialize_V0 (c->serializer, version, base_it, layer_it)) return_trace (false);
+
+ /* subset ItemVariationStore first, cause varidx_map needs to be updated
+ * after instancing */
+ if (!subset_varstore (c, colr_prime)) return_trace (false);
ItemVarStoreInstancer instancer (varStore ? &(this+varStore) : nullptr,
varIdxMap ? &(this+varIdxMap) : nullptr,
c->plan->normalized_coords.as_array ());
if (!colr_prime->baseGlyphList.serialize_subset (c, baseGlyphList, this, instancer))
- {
- if (c->serializer->in_error ()) return_trace (false);
- //no more COLRv1 glyphs: downgrade to version 0
- c->serializer->revert (snap);
- return_trace (colr_prime->serialize_V0 (c->serializer, 0, base_it, layer_it));
- }
-
- if (!colr_prime->serialize_V0 (c->serializer, version, base_it, layer_it)) return_trace (false);
+ return_trace (false);
colr_prime->layerList.serialize_subset (c, layerList, this, instancer);
colr_prime->clipList.serialize_subset (c, clipList, this, instancer);
- if (!varStore || c->plan->all_axes_pinned)
- return_trace (true);
- colr_prime->varIdxMap.serialize_copy (c->serializer, varIdxMap, this);
- colr_prime->varStore.serialize_copy (c->serializer, varStore, this);
- return_trace (true);
+ return_trace (subset_delta_set_index_map (c, colr_prime));
}
const Paint *get_base_glyph_paint (hb_codepoint_t glyph) const
diff --git a/src/3rdparty/harfbuzz-ng/src/OT/Color/COLR/colrv1-closure.hh b/src/3rdparty/harfbuzz-ng/src/OT/Color/COLR/colrv1-closure.hh
index 705863d4ad..9ed0aa5632 100644
--- a/src/3rdparty/harfbuzz-ng/src/OT/Color/COLR/colrv1-closure.hh
+++ b/src/3rdparty/harfbuzz-ng/src/OT/Color/COLR/colrv1-closure.hh
@@ -66,34 +66,64 @@ HB_INTERNAL void PaintColrGlyph::closurev1 (hb_colrv1_closure_context_t* c) cons
template <template<typename> class Var>
HB_INTERNAL void PaintTransform<Var>::closurev1 (hb_colrv1_closure_context_t* c) const
-{ (this+src).dispatch (c); }
+{
+ (this+src).dispatch (c);
+ (this+transform).closurev1 (c);
+}
HB_INTERNAL void PaintTranslate::closurev1 (hb_colrv1_closure_context_t* c) const
-{ (this+src).dispatch (c); }
+{
+ (this+src).dispatch (c);
+ c->num_var_idxes = 2;
+}
HB_INTERNAL void PaintScale::closurev1 (hb_colrv1_closure_context_t* c) const
-{ (this+src).dispatch (c); }
+{
+ (this+src).dispatch (c);
+ c->num_var_idxes = 2;
+}
HB_INTERNAL void PaintScaleAroundCenter::closurev1 (hb_colrv1_closure_context_t* c) const
-{ (this+src).dispatch (c); }
+{
+ (this+src).dispatch (c);
+ c->num_var_idxes = 4;
+}
HB_INTERNAL void PaintScaleUniform::closurev1 (hb_colrv1_closure_context_t* c) const
-{ (this+src).dispatch (c); }
+{
+ (this+src).dispatch (c);
+ c->num_var_idxes = 1;
+}
HB_INTERNAL void PaintScaleUniformAroundCenter::closurev1 (hb_colrv1_closure_context_t* c) const
-{ (this+src).dispatch (c); }
+{
+ (this+src).dispatch (c);
+ c->num_var_idxes = 3;
+}
HB_INTERNAL void PaintRotate::closurev1 (hb_colrv1_closure_context_t* c) const
-{ (this+src).dispatch (c); }
+{
+ (this+src).dispatch (c);
+ c->num_var_idxes = 1;
+}
HB_INTERNAL void PaintRotateAroundCenter::closurev1 (hb_colrv1_closure_context_t* c) const
-{ (this+src).dispatch (c); }
+{
+ (this+src).dispatch (c);
+ c->num_var_idxes = 3;
+}
HB_INTERNAL void PaintSkew::closurev1 (hb_colrv1_closure_context_t* c) const
-{ (this+src).dispatch (c); }
+{
+ (this+src).dispatch (c);
+ c->num_var_idxes = 2;
+}
HB_INTERNAL void PaintSkewAroundCenter::closurev1 (hb_colrv1_closure_context_t* c) const
-{ (this+src).dispatch (c); }
+{
+ (this+src).dispatch (c);
+ c->num_var_idxes = 4;
+}
HB_INTERNAL void PaintComposite::closurev1 (hb_colrv1_closure_context_t* c) const
{
diff --git a/src/3rdparty/harfbuzz-ng/src/OT/Layout/GDEF/GDEF.hh b/src/3rdparty/harfbuzz-ng/src/OT/Layout/GDEF/GDEF.hh
index 317b96c714..45baeb4ec5 100644
--- a/src/3rdparty/harfbuzz-ng/src/OT/Layout/GDEF/GDEF.hh
+++ b/src/3rdparty/harfbuzz-ng/src/OT/Layout/GDEF/GDEF.hh
@@ -1022,47 +1022,6 @@ struct GDEF
void collect_variation_indices (hb_collect_variation_indices_context_t *c) const
{ get_lig_caret_list ().collect_variation_indices (c); }
- void remap_layout_variation_indices (const hb_set_t *layout_variation_indices,
- const hb_vector_t<int>& normalized_coords,
- bool calculate_delta, /* not pinned at default */
- bool no_variations, /* all axes pinned */
- hb_hashmap_t<unsigned, hb_pair_t<unsigned, int>> *layout_variation_idx_delta_map /* OUT */) const
- {
- if (!has_var_store ()) return;
- const ItemVariationStore &var_store = get_var_store ();
- float *store_cache = var_store.create_cache ();
-
- unsigned new_major = 0, new_minor = 0;
- unsigned last_major = (layout_variation_indices->get_min ()) >> 16;
- for (unsigned idx : layout_variation_indices->iter ())
- {
- int delta = 0;
- if (calculate_delta)
- delta = roundf (var_store.get_delta (idx, normalized_coords.arrayZ,
- normalized_coords.length, store_cache));
-
- if (no_variations)
- {
- layout_variation_idx_delta_map->set (idx, hb_pair_t<unsigned, int> (HB_OT_LAYOUT_NO_VARIATIONS_INDEX, delta));
- continue;
- }
-
- uint16_t major = idx >> 16;
- if (major >= var_store.get_sub_table_count ()) break;
- if (major != last_major)
- {
- new_minor = 0;
- ++new_major;
- }
-
- unsigned new_idx = (new_major << 16) + new_minor;
- layout_variation_idx_delta_map->set (idx, hb_pair_t<unsigned, int> (new_idx, delta));
- ++new_minor;
- last_major = major;
- }
- var_store.destroy_cache (store_cache);
- }
-
protected:
union {
FixedVersion<> version; /* Version identifier */
diff --git a/src/3rdparty/harfbuzz-ng/src/OT/Layout/GSUB/Ligature.hh b/src/3rdparty/harfbuzz-ng/src/OT/Layout/GSUB/Ligature.hh
index 402ed12ae2..e0ec82a236 100644
--- a/src/3rdparty/harfbuzz-ng/src/OT/Layout/GSUB/Ligature.hh
+++ b/src/3rdparty/harfbuzz-ng/src/OT/Layout/GSUB/Ligature.hh
@@ -90,8 +90,17 @@ struct Ligature
unsigned int total_component_count = 0;
+ if (unlikely (count > HB_MAX_CONTEXT_LENGTH)) return false;
+ unsigned match_positions_stack[4];
+ unsigned *match_positions = match_positions_stack;
+ if (unlikely (count > ARRAY_LENGTH (match_positions_stack)))
+ {
+ match_positions = (unsigned *) hb_malloc (hb_max (count, 1u) * sizeof (unsigned));
+ if (unlikely (!match_positions))
+ return_trace (false);
+ }
+
unsigned int match_end = 0;
- unsigned int match_positions[HB_MAX_CONTEXT_LENGTH];
if (likely (!match_input (c, count,
&component[1],
@@ -102,6 +111,8 @@ struct Ligature
&total_component_count)))
{
c->buffer->unsafe_to_concat (c->buffer->idx, match_end);
+ if (match_positions != match_positions_stack)
+ hb_free (match_positions);
return_trace (false);
}
@@ -145,6 +156,8 @@ struct Ligature
pos);
}
+ if (match_positions != match_positions_stack)
+ hb_free (match_positions);
return_trace (true);
}
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-aat-layout-common.hh b/src/3rdparty/harfbuzz-ng/src/hb-aat-layout-common.hh
index 05dd58c6df..c26f376aa6 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-aat-layout-common.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-aat-layout-common.hh
@@ -46,8 +46,9 @@ struct hb_aat_apply_context_t :
hb_dispatch_context_t<hb_aat_apply_context_t, bool, HB_DEBUG_APPLY>
{
const char *get_name () { return "APPLY"; }
- template <typename T>
- return_t dispatch (const T &obj) { return obj.apply (this); }
+ template <typename T, typename ...Ts>
+ return_t dispatch (const T &obj, Ts&&... ds)
+ { return obj.apply (this, std::forward<Ts> (ds)...); }
static return_t default_return_value () { return false; }
bool stop_sublookup_iteration (return_t r) const { return r; }
@@ -59,6 +60,9 @@ struct hb_aat_apply_context_t :
const ankr *ankr_table;
const OT::GDEF *gdef_table;
const hb_sorted_vector_t<hb_aat_map_t::range_flags_t> *range_flags = nullptr;
+ hb_set_digest_t machine_glyph_set = hb_set_digest_t::full ();
+ hb_set_digest_t left_set = hb_set_digest_t::full ();
+ hb_set_digest_t right_set = hb_set_digest_t::full ();
hb_mask_t subtable_flags = 0;
/* Unused. For debug tracing only. */
@@ -81,6 +85,8 @@ struct hb_aat_apply_context_t :
* Lookup Table
*/
+enum { DELETED_GLYPH = 0xFFFF };
+
template <typename T> struct Lookup;
template <typename T>
@@ -95,6 +101,12 @@ struct LookupFormat0
return &arrayZ[glyph_id];
}
+ template <typename set_t>
+ void collect_glyphs (set_t &glyphs, unsigned num_glyphs) const
+ {
+ glyphs.add_range (0, num_glyphs - 1);
+ }
+
bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
@@ -123,6 +135,14 @@ struct LookupSegmentSingle
int cmp (hb_codepoint_t g) const
{ return g < first ? -1 : g <= last ? 0 : +1 ; }
+ template <typename set_t>
+ void collect_glyphs (set_t &glyphs) const
+ {
+ if (first == DELETED_GLYPH)
+ return;
+ glyphs.add_range (first, last);
+ }
+
bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
@@ -153,6 +173,14 @@ struct LookupFormat2
return v ? &v->value : nullptr;
}
+ template <typename set_t>
+ void collect_glyphs (set_t &glyphs) const
+ {
+ unsigned count = segments.get_length ();
+ for (unsigned int i = 0; i < count; i++)
+ segments[i].collect_glyphs (glyphs);
+ }
+
bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
@@ -184,6 +212,14 @@ struct LookupSegmentArray
return first <= glyph_id && glyph_id <= last ? &(base+valuesZ)[glyph_id - first] : nullptr;
}
+ template <typename set_t>
+ void collect_glyphs (set_t &glyphs) const
+ {
+ if (first == DELETED_GLYPH)
+ return;
+ glyphs.add_range (first, last);
+ }
+
int cmp (hb_codepoint_t g) const
{ return g < first ? -1 : g <= last ? 0 : +1; }
@@ -226,6 +262,14 @@ struct LookupFormat4
return v ? v->get_value (glyph_id, this) : nullptr;
}
+ template <typename set_t>
+ void collect_glyphs (set_t &glyphs) const
+ {
+ unsigned count = segments.get_length ();
+ for (unsigned i = 0; i < count; i++)
+ segments[i].collect_glyphs (glyphs);
+ }
+
bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
@@ -254,6 +298,14 @@ struct LookupSingle
int cmp (hb_codepoint_t g) const { return glyph.cmp (g); }
+ template <typename set_t>
+ void collect_glyphs (set_t &glyphs) const
+ {
+ if (glyph == DELETED_GLYPH)
+ return;
+ glyphs.add (glyph);
+ }
+
bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
@@ -283,6 +335,14 @@ struct LookupFormat6
return v ? &v->value : nullptr;
}
+ template <typename set_t>
+ void collect_glyphs (set_t &glyphs) const
+ {
+ unsigned count = entries.get_length ();
+ for (unsigned i = 0; i < count; i++)
+ entries[i].collect_glyphs (glyphs);
+ }
+
bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
@@ -314,6 +374,16 @@ struct LookupFormat8
&valueArrayZ[glyph_id - firstGlyph] : nullptr;
}
+ template <typename set_t>
+ void collect_glyphs (set_t &glyphs) const
+ {
+ if (unlikely (!glyphCount))
+ return;
+ if (firstGlyph == DELETED_GLYPH)
+ return;
+ glyphs.add_range (firstGlyph, firstGlyph + glyphCount - 1);
+ }
+
bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
@@ -358,6 +428,16 @@ struct LookupFormat10
return v;
}
+ template <typename set_t>
+ void collect_glyphs (set_t &glyphs) const
+ {
+ if (unlikely (!glyphCount))
+ return;
+ if (firstGlyph == DELETED_GLYPH)
+ return;
+ glyphs.add_range (firstGlyph, firstGlyph + glyphCount - 1);
+ }
+
bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
@@ -406,6 +486,20 @@ struct Lookup
}
}
+ template <typename set_t>
+ void collect_glyphs (set_t &glyphs, unsigned int num_glyphs) const
+ {
+ switch (u.format) {
+ case 0: u.format0.collect_glyphs (glyphs, num_glyphs); return;
+ case 2: u.format2.collect_glyphs (glyphs); return;
+ case 4: u.format4.collect_glyphs (glyphs); return;
+ case 6: u.format6.collect_glyphs (glyphs); return;
+ case 8: u.format8.collect_glyphs (glyphs); return;
+ case 10: u.format10.collect_glyphs (glyphs); return;
+ default:return;
+ }
+ }
+
typename T::type get_class (hb_codepoint_t glyph_id,
unsigned int num_glyphs,
unsigned int outOfRange) const
@@ -460,8 +554,6 @@ struct Lookup
};
DECLARE_NULL_NAMESPACE_BYTES_TEMPLATE1 (AAT, Lookup, 2);
-enum { DELETED_GLYPH = 0xFFFF };
-
/*
* (Extended) State Table
*/
@@ -512,6 +604,14 @@ struct Entry<void>
DEFINE_SIZE_STATIC (4);
};
+enum Class
+{
+ CLASS_END_OF_TEXT = 0,
+ CLASS_OUT_OF_BOUNDS = 1,
+ CLASS_DELETED_GLYPH = 2,
+ CLASS_END_OF_LINE = 3,
+};
+
template <typename Types, typename Extra>
struct StateTable
{
@@ -524,21 +624,24 @@ struct StateTable
STATE_START_OF_TEXT = 0,
STATE_START_OF_LINE = 1,
};
- enum Class
+
+ template <typename set_t>
+ void collect_glyphs (set_t &glyphs, unsigned num_glyphs) const
{
- CLASS_END_OF_TEXT = 0,
- CLASS_OUT_OF_BOUNDS = 1,
- CLASS_DELETED_GLYPH = 2,
- CLASS_END_OF_LINE = 3,
- };
+ (this+classTable).collect_glyphs (glyphs, num_glyphs);
+ }
int new_state (unsigned int newState) const
{ return Types::extended ? newState : ((int) newState - (int) stateArrayTable) / (int) nClasses; }
- unsigned int get_class (hb_codepoint_t glyph_id, unsigned int num_glyphs) const
+ template <typename set_t>
+ unsigned int get_class (hb_codepoint_t glyph_id,
+ unsigned int num_glyphs,
+ const set_t &glyphs) const
{
if (unlikely (glyph_id == DELETED_GLYPH)) return CLASS_DELETED_GLYPH;
- return (this+classTable).get_class (glyph_id, num_glyphs, 1);
+ if (!glyphs[glyph_id]) return CLASS_OUT_OF_BOUNDS;
+ return (this+classTable).get_class (glyph_id, num_glyphs, CLASS_OUT_OF_BOUNDS);
}
const Entry<Extra> *get_entries () const
@@ -547,7 +650,7 @@ struct StateTable
const Entry<Extra> &get_entry (int state, unsigned int klass) const
{
if (unlikely (klass >= nClasses))
- klass = StateTable::CLASS_OUT_OF_BOUNDS;
+ klass = CLASS_OUT_OF_BOUNDS;
const HBUSHORT *states = (this+stateArrayTable).arrayZ;
const Entry<Extra> *entries = (this+entryTable).arrayZ;
@@ -690,6 +793,15 @@ struct ClassTable
{
return get_class (glyph_id, outOfRange);
}
+
+ template <typename set_t>
+ void collect_glyphs (set_t &glyphs, unsigned num_glyphs) const
+ {
+ for (unsigned i = 0; i < classArray.len; i++)
+ if (classArray.arrayZ[i] != CLASS_OUT_OF_BOUNDS)
+ glyphs.add (firstGlyph + i);
+ }
+
bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
@@ -703,6 +815,38 @@ struct ClassTable
DEFINE_SIZE_ARRAY (4, classArray);
};
+struct SubtableGlyphCoverage
+{
+ bool sanitize (hb_sanitize_context_t *c, unsigned subtable_count) const
+ {
+ TRACE_SANITIZE (this);
+
+ if (unlikely (!c->check_array (&subtableOffsets, subtable_count)))
+ return_trace (false);
+
+ unsigned bytes = (c->get_num_glyphs () + CHAR_BIT - 1) / CHAR_BIT;
+ for (unsigned i = 0; i < subtable_count; i++)
+ {
+ uint32_t offset = (uint32_t) subtableOffsets[i];
+ if (offset == 0 || offset == 0xFFFFFFFF)
+ continue;
+ if (unlikely (!subtableOffsets[i].sanitize (c, this, bytes)))
+ return_trace (false);
+ }
+
+ return_trace (true);
+ }
+ protected:
+ UnsizedArrayOf<NNOffset32To<UnsizedArrayOf<HBUINT8>>> subtableOffsets;
+ /* Array of offsets from the beginning of the
+ * subtable glyph coverage table to the glyph
+ * coverage bitfield for a given subtable; there
+ * is one offset for each subtable in the chain */
+ /* UnsizedArrayOf<HBUINT8> coverageBitfields; *//* The individual coverage bitfields. */
+ public:
+ DEFINE_SIZE_ARRAY (0, subtableOffsets);
+};
+
struct ObsoleteTypes
{
static constexpr bool extended = false;
@@ -779,15 +923,15 @@ struct StateTableDriver
using EntryT = Entry<EntryData>;
StateTableDriver (const StateTableT &machine_,
- hb_buffer_t *buffer_,
hb_face_t *face_) :
machine (machine_),
- buffer (buffer_),
num_glyphs (face_->get_num_glyphs ()) {}
- template <typename context_t>
+ template <typename context_t, typename set_t = hb_set_digest_t>
void drive (context_t *c, hb_aat_apply_context_t *ac)
{
+ hb_buffer_t *buffer = ac->buffer;
+
if (!c->in_place)
buffer->clear_output ();
@@ -822,9 +966,9 @@ struct StateTableDriver
}
}
- unsigned int klass = buffer->idx < buffer->len ?
- machine.get_class (buffer->cur().codepoint, num_glyphs) :
- (unsigned) StateTableT::CLASS_END_OF_TEXT;
+ unsigned int klass = likely (buffer->idx < buffer->len) ?
+ machine.get_class (buffer->cur().codepoint, num_glyphs, ac->machine_glyph_set) :
+ (unsigned) CLASS_END_OF_TEXT;
DEBUG_MSG (APPLY, nullptr, "c%u at %u", klass, buffer->idx);
const EntryT &entry = machine.get_entry (state, klass);
const int next_state = machine.new_state (entry.newState);
@@ -862,22 +1006,22 @@ struct StateTableDriver
{
/* 2c. */
const auto wouldbe_entry = machine.get_entry(StateTableT::STATE_START_OF_TEXT, klass);
-
+
/* 2c'. */
- if (c->is_actionable (this, wouldbe_entry))
- return false;
-
+ if (c->is_actionable (buffer, this, wouldbe_entry))
+ return false;
+
/* 2c". */
return next_state == machine.new_state(wouldbe_entry.newState)
&& (entry.flags & context_t::DontAdvance) == (wouldbe_entry.flags & context_t::DontAdvance);
};
-
+
const auto is_safe_to_break = [&]()
{
/* 1. */
- if (c->is_actionable (this, entry))
+ if (c->is_actionable (buffer, this, entry))
return false;
-
+
/* 2. */
// This one is meh, I know...
const auto ok =
@@ -886,15 +1030,15 @@ struct StateTableDriver
|| is_safe_to_break_extra();
if (!ok)
return false;
-
+
/* 3. */
- return !c->is_actionable (this, machine.get_entry (state, StateTableT::CLASS_END_OF_TEXT));
+ return !c->is_actionable (buffer, this, machine.get_entry (state, CLASS_END_OF_TEXT));
};
if (!is_safe_to_break () && buffer->backtrack_len () && buffer->idx < buffer->len)
buffer->unsafe_to_break_from_outbuffer (buffer->backtrack_len () - 1, buffer->idx + 1);
- c->transition (this, entry);
+ c->transition (buffer, this, entry);
state = next_state;
DEBUG_MSG (APPLY, nullptr, "s%d", state);
@@ -912,7 +1056,6 @@ struct StateTableDriver
public:
const StateTableT &machine;
- hb_buffer_t *buffer;
unsigned int num_glyphs;
};
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-aat-layout-kerx-table.hh b/src/3rdparty/harfbuzz-ng/src/hb-aat-layout-kerx-table.hh
index 0de54e0a02..8d0d87af02 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-aat-layout-kerx-table.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-aat-layout-kerx-table.hh
@@ -30,6 +30,7 @@
#include "hb-kern.hh"
#include "hb-aat-layout-ankr-table.hh"
+#include "hb-set-digest.hh"
/*
* kerx -- Extended Kerning
@@ -82,7 +83,7 @@ struct KernPair
return_trace (c->check_struct (this));
}
- protected:
+ public:
HBGlyphID16 left;
HBGlyphID16 right;
FWORD value;
@@ -118,6 +119,16 @@ struct KerxSubTableFormat0
return_trace (true);
}
+ template <typename set_t>
+ void collect_glyphs (set_t &left_set, set_t &right_set, unsigned num_glyphs) const
+ {
+ for (const KernPair& pair : pairs)
+ {
+ left_set.add (pair.left);
+ right_set.add (pair.right);
+ }
+ }
+
struct accelerator_t
{
const KerxSubTableFormat0 &table;
@@ -128,7 +139,10 @@ struct KerxSubTableFormat0
table (table_), c (c_) {}
int get_kerning (hb_codepoint_t left, hb_codepoint_t right) const
- { return table.get_kerning (left, right, c); }
+ {
+ if (!c->left_set[left] || !c->right_set[right]) return 0;
+ return table.get_kerning (left, right, c);
+ }
};
@@ -228,13 +242,14 @@ struct KerxSubTableFormat1
depth (0),
crossStream (table->header.coverage & table->header.CrossStream) {}
- bool is_actionable (StateTableDriver<Types, EntryData> *driver HB_UNUSED,
+ bool is_actionable (hb_buffer_t *buffer HB_UNUSED,
+ StateTableDriver<Types, EntryData> *driver HB_UNUSED,
const Entry<EntryData> &entry)
{ return Format1EntryT::performAction (entry); }
- void transition (StateTableDriver<Types, EntryData> *driver,
+ void transition (hb_buffer_t *buffer,
+ StateTableDriver<Types, EntryData> *driver,
const Entry<EntryData> &entry)
{
- hb_buffer_t *buffer = driver->buffer;
unsigned int flags = entry.flags;
if (flags & Format1EntryT::Reset)
@@ -351,7 +366,7 @@ struct KerxSubTableFormat1
driver_context_t dc (this, c);
- StateTableDriver<Types, EntryData> driver (machine, c->buffer, c->font->face);
+ StateTableDriver<Types, EntryData> driver (machine, c->font->face);
driver.drive (&dc, c);
return_trace (true);
@@ -365,12 +380,21 @@ struct KerxSubTableFormat1
machine.sanitize (c)));
}
+ template <typename set_t>
+ void collect_glyphs (set_t &left_set, set_t &right_set, unsigned num_glyphs) const
+ {
+ set_t set;
+ machine.collect_glyphs (set, num_glyphs);
+ left_set.union_ (set);
+ right_set.union_ (set);
+ }
+
protected:
KernSubTableHeader header;
StateTable<Types, EntryData> machine;
NNOffsetTo<UnsizedArrayOf<FWORD>, HBUINT> kernAction;
public:
- DEFINE_SIZE_STATIC (KernSubTableHeader::static_size + 5 * sizeof (HBUINT));
+ DEFINE_SIZE_STATIC (KernSubTableHeader::static_size + (StateTable<Types, EntryData>::static_size + HBUINT::static_size));
};
template <typename KernSubTableHeader>
@@ -413,6 +437,13 @@ struct KerxSubTableFormat2
return_trace (true);
}
+ template <typename set_t>
+ void collect_glyphs (set_t &left_set, set_t &right_set, unsigned num_glyphs) const
+ {
+ (this+leftClassTable).collect_glyphs (left_set, num_glyphs);
+ (this+rightClassTable).collect_glyphs (right_set, num_glyphs);
+ }
+
struct accelerator_t
{
const KerxSubTableFormat2 &table;
@@ -423,7 +454,10 @@ struct KerxSubTableFormat2
table (table_), c (c_) {}
int get_kerning (hb_codepoint_t left, hb_codepoint_t right) const
- { return table.get_kerning (left, right, c); }
+ {
+ if (!c->left_set[left] || !c->right_set[right]) return 0;
+ return table.get_kerning (left, right, c);
+ }
};
bool sanitize (hb_sanitize_context_t *c) const
@@ -493,14 +527,14 @@ struct KerxSubTableFormat4
mark_set (false),
mark (0) {}
- bool is_actionable (StateTableDriver<Types, EntryData> *driver HB_UNUSED,
+ bool is_actionable (hb_buffer_t *buffer HB_UNUSED,
+ StateTableDriver<Types, EntryData> *driver HB_UNUSED,
const Entry<EntryData> &entry)
{ return entry.data.ankrActionIndex != 0xFFFF; }
- void transition (StateTableDriver<Types, EntryData> *driver,
+ void transition (hb_buffer_t *buffer,
+ StateTableDriver<Types, EntryData> *driver,
const Entry<EntryData> &entry)
{
- hb_buffer_t *buffer = driver->buffer;
-
if (mark_set && entry.data.ankrActionIndex != 0xFFFF && buffer->idx < buffer->len)
{
hb_glyph_position_t &o = buffer->cur_pos();
@@ -600,7 +634,7 @@ struct KerxSubTableFormat4
driver_context_t dc (this, c);
- StateTableDriver<Types, EntryData> driver (machine, c->buffer, c->font->face);
+ StateTableDriver<Types, EntryData> driver (machine, c->font->face);
driver.drive (&dc, c);
return_trace (true);
@@ -614,12 +648,21 @@ struct KerxSubTableFormat4
machine.sanitize (c)));
}
+ template <typename set_t>
+ void collect_glyphs (set_t &left_set, set_t &right_set, unsigned num_glyphs) const
+ {
+ set_t set;
+ machine.collect_glyphs (set, num_glyphs);
+ left_set.union_ (set);
+ right_set.union_ (set);
+ }
+
protected:
KernSubTableHeader header;
StateTable<Types, EntryData> machine;
HBUINT32 flags;
public:
- DEFINE_SIZE_STATIC (KernSubTableHeader::static_size + 20);
+ DEFINE_SIZE_STATIC (KernSubTableHeader::static_size + (StateTable<Types, EntryData>::static_size + HBUINT32::static_size));
};
template <typename KernSubTableHeader>
@@ -638,7 +681,7 @@ struct KerxSubTableFormat6
unsigned int num_glyphs = c->sanitizer.get_num_glyphs ();
if (is_long ())
{
- const typename U::Long &t = u.l;
+ const auto &t = u.l;
unsigned int l = (this+t.rowIndexTable).get_value_or_null (left, num_glyphs);
unsigned int r = (this+t.columnIndexTable).get_value_or_null (right, num_glyphs);
unsigned int offset = l + r;
@@ -651,7 +694,7 @@ struct KerxSubTableFormat6
}
else
{
- const typename U::Short &t = u.s;
+ const auto &t = u.s;
unsigned int l = (this+t.rowIndexTable).get_value_or_null (left, num_glyphs);
unsigned int r = (this+t.columnIndexTable).get_value_or_null (right, num_glyphs);
unsigned int offset = l + r;
@@ -698,6 +741,23 @@ struct KerxSubTableFormat6
c->check_range (this, vector))));
}
+ template <typename set_t>
+ void collect_glyphs (set_t &left_set, set_t &right_set, unsigned num_glyphs) const
+ {
+ if (is_long ())
+ {
+ const auto &t = u.l;
+ (this+t.rowIndexTable).collect_glyphs (left_set, num_glyphs);
+ (this+t.columnIndexTable).collect_glyphs (right_set, num_glyphs);
+ }
+ else
+ {
+ const auto &t = u.s;
+ (this+t.rowIndexTable).collect_glyphs (left_set, num_glyphs);
+ (this+t.columnIndexTable).collect_glyphs (right_set, num_glyphs);
+ }
+ }
+
struct accelerator_t
{
const KerxSubTableFormat6 &table;
@@ -708,7 +768,10 @@ struct KerxSubTableFormat6
table (table_), c (c_) {}
int get_kerning (hb_codepoint_t left, hb_codepoint_t right) const
- { return table.get_kerning (left, right, c); }
+ {
+ if (!c->left_set[left] || !c->right_set[right]) return 0;
+ return table.get_kerning (left, right, c);
+ }
};
protected:
@@ -794,6 +857,20 @@ struct KerxSubTable
}
}
+ template <typename set_t>
+ void collect_glyphs (set_t &left_set, set_t &right_set, unsigned num_glyphs) const
+ {
+ unsigned int subtable_type = get_type ();
+ switch (subtable_type) {
+ case 0: u.format0.collect_glyphs (left_set, right_set, num_glyphs); return;
+ case 1: u.format1.collect_glyphs (left_set, right_set, num_glyphs); return;
+ case 2: u.format2.collect_glyphs (left_set, right_set, num_glyphs); return;
+ case 4: u.format4.collect_glyphs (left_set, right_set, num_glyphs); return;
+ case 6: u.format6.collect_glyphs (left_set, right_set, num_glyphs); return;
+ default: return;
+ }
+ }
+
bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
@@ -824,6 +901,8 @@ struct KerxSubTable
* The 'kerx' Table
*/
+using kern_accelerator_data_t = hb_vector_t<hb_pair_t<hb_set_digest_t, hb_set_digest_t>>;
+
template <typename T>
struct KerxTable
{
@@ -878,7 +957,8 @@ struct KerxTable
return v;
}
- bool apply (AAT::hb_aat_apply_context_t *c) const
+ bool apply (AAT::hb_aat_apply_context_t *c,
+ const kern_accelerator_data_t *accel_data = nullptr) const
{
c->buffer->unsafe_to_concat ();
@@ -925,6 +1005,16 @@ struct KerxTable
if (reverse)
c->buffer->reverse ();
+ if (accel_data)
+ {
+ c->left_set = (*accel_data)[i].first;
+ c->right_set = (*accel_data)[i].second;
+ }
+ else
+ {
+ c->left_set = c->right_set = hb_set_digest_t::full ();
+ }
+
{
/* See comment in sanitize() for conditional here. */
hb_sanitize_with_object_t with (&c->sanitizer, i < count - 1 ? st : (const SubTable *) nullptr);
@@ -977,8 +1067,61 @@ struct KerxTable
st = &StructAfter<SubTable> (*st);
}
+ unsigned majorVersion = thiz()->version;
+ if (sizeof (thiz()->version) == 4)
+ majorVersion = majorVersion >> 16;
+ if (majorVersion >= 3)
+ {
+ const SubtableGlyphCoverage *coverage = (const SubtableGlyphCoverage *) st;
+ if (!coverage->sanitize (c, count))
+ return_trace (false);
+ }
+
return_trace (true);
}
+
+ kern_accelerator_data_t create_accelerator_data (unsigned num_glyphs) const
+ {
+ kern_accelerator_data_t accel_data;
+
+ typedef typename T::SubTable SubTable;
+
+ const SubTable *st = &thiz()->firstSubTable;
+ unsigned int count = thiz()->tableCount;
+ for (unsigned int i = 0; i < count; i++)
+ {
+ hb_set_digest_t left_set, right_set;
+ st->collect_glyphs (left_set, right_set, num_glyphs);
+ accel_data.push (hb_pair (left_set, right_set));
+ st = &StructAfter<SubTable> (*st);
+ }
+
+ return accel_data;
+ }
+
+ struct accelerator_t
+ {
+ accelerator_t (hb_face_t *face)
+ {
+ hb_sanitize_context_t sc;
+ this->table = sc.reference_table<T> (face);
+ this->accel_data = this->table->create_accelerator_data (face->get_num_glyphs ());
+ }
+ ~accelerator_t ()
+ {
+ this->table.destroy ();
+ }
+
+ hb_blob_t *get_blob () const { return table.get_blob (); }
+
+ bool apply (AAT::hb_aat_apply_context_t *c) const
+ {
+ return table->apply (c, &accel_data);
+ }
+
+ hb_blob_ptr_t<T> table;
+ kern_accelerator_data_t accel_data;
+ };
};
struct kerx : KerxTable<kerx>
@@ -1007,8 +1150,10 @@ struct kerx : KerxTable<kerx>
DEFINE_SIZE_MIN (8);
};
+struct kerx_accelerator_t : kerx::accelerator_t {
+ kerx_accelerator_t (hb_face_t *face) : kerx::accelerator_t (face) {}
+};
} /* namespace AAT */
-
#endif /* HB_AAT_LAYOUT_KERX_TABLE_HH */
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-aat-layout-morx-table.hh b/src/3rdparty/harfbuzz-ng/src/hb-aat-layout-morx-table.hh
index 8436551324..4a94e6a8ff 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-aat-layout-morx-table.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-aat-layout-morx-table.hh
@@ -74,15 +74,16 @@ struct RearrangementSubtable
ret (false),
start (0), end (0) {}
- bool is_actionable (StateTableDriver<Types, EntryData> *driver HB_UNUSED,
- const Entry<EntryData> &entry)
+ bool is_actionable (hb_buffer_t *buffer HB_UNUSED,
+ StateTableDriver<Types, EntryData> *driver HB_UNUSED,
+ const Entry<EntryData> &entry) const
{
return (entry.flags & Verb) && start < end;
}
- void transition (StateTableDriver<Types, EntryData> *driver,
+ void transition (hb_buffer_t *buffer,
+ StateTableDriver<Types, EntryData> *driver,
const Entry<EntryData> &entry)
{
- hb_buffer_t *buffer = driver->buffer;
unsigned int flags = entry.flags;
if (flags & MarkFirst)
@@ -168,7 +169,7 @@ struct RearrangementSubtable
driver_context_t dc (this);
- StateTableDriver<Types, EntryData> driver (machine, c->buffer, c->face);
+ StateTableDriver<Types, EntryData> driver (machine, c->face);
driver.drive (&dc, c);
return_trace (dc.ret);
@@ -180,10 +181,10 @@ struct RearrangementSubtable
return_trace (machine.sanitize (c));
}
- protected:
+ public:
StateTable<Types, EntryData> machine;
public:
- DEFINE_SIZE_STATIC (16);
+ DEFINE_SIZE_STATIC ((StateTable<Types, EntryData>::static_size));
};
template <typename Types>
@@ -223,21 +224,19 @@ struct ContextualSubtable
table (table_),
subs (table+table->substitutionTables) {}
- bool is_actionable (StateTableDriver<Types, EntryData> *driver,
- const Entry<EntryData> &entry)
+ bool is_actionable (hb_buffer_t *buffer,
+ StateTableDriver<Types, EntryData> *driver,
+ const Entry<EntryData> &entry) const
{
- hb_buffer_t *buffer = driver->buffer;
-
if (buffer->idx == buffer->len && !mark_set)
return false;
return entry.data.markIndex != 0xFFFF || entry.data.currentIndex != 0xFFFF;
}
- void transition (StateTableDriver<Types, EntryData> *driver,
+ void transition (hb_buffer_t *buffer,
+ StateTableDriver<Types, EntryData> *driver,
const Entry<EntryData> &entry)
{
- hb_buffer_t *buffer = driver->buffer;
-
/* Looks like CoreText applies neither mark nor current substitution for
* end-of-text if mark was not explicitly set. */
if (buffer->idx == buffer->len && !mark_set)
@@ -328,7 +327,7 @@ struct ContextualSubtable
driver_context_t dc (this, c);
- StateTableDriver<Types, EntryData> driver (machine, c->buffer, c->face);
+ StateTableDriver<Types, EntryData> driver (machine, c->face);
driver.drive (&dc, c);
return_trace (dc.ret);
@@ -361,13 +360,14 @@ struct ContextualSubtable
return_trace (substitutionTables.sanitize (c, this, num_lookups));
}
- protected:
+ public:
StateTable<Types, EntryData>
machine;
+ protected:
NNOffsetTo<UnsizedListOfOffset16To<Lookup<HBGlyphID16>, HBUINT, void, false>, HBUINT>
substitutionTables;
public:
- DEFINE_SIZE_STATIC (20);
+ DEFINE_SIZE_STATIC ((StateTable<Types, EntryData>::static_size + HBUINT::static_size));
};
@@ -464,16 +464,16 @@ struct LigatureSubtable
ligature (table+table->ligature),
match_length (0) {}
- bool is_actionable (StateTableDriver<Types, EntryData> *driver HB_UNUSED,
- const Entry<EntryData> &entry)
+ bool is_actionable (hb_buffer_t *buffer HB_UNUSED,
+ StateTableDriver<Types, EntryData> *driver HB_UNUSED,
+ const Entry<EntryData> &entry) const
{
return LigatureEntryT::performAction (entry);
}
- void transition (StateTableDriver<Types, EntryData> *driver,
+ void transition (hb_buffer_t *buffer,
+ StateTableDriver<Types, EntryData> *driver,
const Entry<EntryData> &entry)
{
- hb_buffer_t *buffer = driver->buffer;
-
DEBUG_MSG (APPLY, nullptr, "Ligature transition at %u", buffer->idx);
if (entry.flags & LigatureEntryT::SetComponent)
{
@@ -585,7 +585,7 @@ struct LigatureSubtable
driver_context_t dc (this, c);
- StateTableDriver<Types, EntryData> driver (machine, c->buffer, c->face);
+ StateTableDriver<Types, EntryData> driver (machine, c->face);
driver.drive (&dc, c);
return_trace (dc.ret);
@@ -600,9 +600,10 @@ struct LigatureSubtable
ligAction && component && ligature);
}
- protected:
+ public:
StateTable<Types, EntryData>
machine;
+ protected:
NNOffsetTo<UnsizedArrayOf<HBUINT32>, HBUINT>
ligAction; /* Offset to the ligature action table. */
NNOffsetTo<UnsizedArrayOf<HBUINT16>, HBUINT>
@@ -610,7 +611,7 @@ struct LigatureSubtable
NNOffsetTo<UnsizedArrayOf<HBGlyphID16>, HBUINT>
ligature; /* Offset to the actual ligature lists. */
public:
- DEFINE_SIZE_STATIC (28);
+ DEFINE_SIZE_STATIC ((StateTable<Types, EntryData>::static_size + 3 * HBUINT::static_size));
};
template <typename Types>
@@ -754,16 +755,17 @@ struct InsertionSubtable
mark (0),
insertionAction (table+table->insertionAction) {}
- bool is_actionable (StateTableDriver<Types, EntryData> *driver HB_UNUSED,
- const Entry<EntryData> &entry)
+ bool is_actionable (hb_buffer_t *buffer HB_UNUSED,
+ StateTableDriver<Types, EntryData> *driver HB_UNUSED,
+ const Entry<EntryData> &entry) const
{
return (entry.flags & (CurrentInsertCount | MarkedInsertCount)) &&
(entry.data.currentInsertIndex != 0xFFFF ||entry.data.markedInsertIndex != 0xFFFF);
}
- void transition (StateTableDriver<Types, EntryData> *driver,
+ void transition (hb_buffer_t *buffer,
+ StateTableDriver<Types, EntryData> *driver,
const Entry<EntryData> &entry)
{
- hb_buffer_t *buffer = driver->buffer;
unsigned int flags = entry.flags;
unsigned mark_loc = buffer->out_len;
@@ -850,7 +852,7 @@ struct InsertionSubtable
driver_context_t dc (this, c);
- StateTableDriver<Types, EntryData> driver (machine, c->buffer, c->face);
+ StateTableDriver<Types, EntryData> driver (machine, c->face);
driver.drive (&dc, c);
return_trace (dc.ret);
@@ -865,14 +867,15 @@ struct InsertionSubtable
insertionAction);
}
- protected:
+ public:
StateTable<Types, EntryData>
machine;
+ protected:
NNOffsetTo<UnsizedArrayOf<HBGlyphID16>, HBUINT>
insertionAction; /* Byte offset from stateHeader to the start of
* the insertion glyph table. */
public:
- DEFINE_SIZE_STATIC (20);
+ DEFINE_SIZE_STATIC ((StateTable<Types, EntryData>::static_size + HBUINT::static_size));
};
@@ -896,6 +899,89 @@ struct Feature
DEFINE_SIZE_STATIC (12);
};
+
+struct hb_accelerate_subtables_context_t :
+ hb_dispatch_context_t<hb_accelerate_subtables_context_t>
+{
+ struct hb_applicable_t
+ {
+ friend struct hb_accelerate_subtables_context_t;
+ friend struct hb_aat_layout_lookup_accelerator_t;
+
+ public:
+ hb_set_digest_t digest;
+
+ template <typename T>
+ auto init_ (const T &obj_, unsigned num_glyphs, hb_priority<1>) HB_AUTO_RETURN
+ (
+ obj_.machine.collect_glyphs (this->digest, num_glyphs)
+ )
+
+ template <typename T>
+ void init_ (const T &obj_, unsigned num_glyphs, hb_priority<0>)
+ {
+ digest = digest.full ();
+ }
+
+ template <typename T>
+ void init (const T &obj_, unsigned num_glyphs)
+ {
+ init_ (obj_, num_glyphs, hb_prioritize);
+ }
+ };
+
+ /* Dispatch interface. */
+ template <typename T>
+ return_t dispatch (const T &obj)
+ {
+ hb_applicable_t *entry = &array[i++];
+
+ entry->init (obj, num_glyphs);
+
+ return hb_empty_t ();
+ }
+ static return_t default_return_value () { return hb_empty_t (); }
+
+ bool stop_sublookup_iteration (return_t r) const { return false; }
+
+ hb_accelerate_subtables_context_t (hb_applicable_t *array_, unsigned num_glyphs_) :
+ hb_dispatch_context_t<hb_accelerate_subtables_context_t> (),
+ array (array_), num_glyphs (num_glyphs_) {}
+
+ hb_applicable_t *array;
+ unsigned num_glyphs;
+ unsigned i = 0;
+};
+
+struct hb_aat_layout_chain_accelerator_t
+{
+ template <typename TChain>
+ static hb_aat_layout_chain_accelerator_t *create (const TChain &chain, unsigned num_glyphs)
+ {
+ unsigned count = chain.get_subtable_count ();
+
+ unsigned size = sizeof (hb_aat_layout_chain_accelerator_t) -
+ HB_VAR_ARRAY * sizeof (hb_accelerate_subtables_context_t::hb_applicable_t) +
+ count * sizeof (hb_accelerate_subtables_context_t::hb_applicable_t);
+
+ /* The following is a calloc because when we are collecting subtables,
+ * some of them might be invalid and hence not collect; as a result,
+ * we might not fill in all the count entries of the subtables array.
+ * Zeroing it allows the set digest to gatekeep it without having to
+ * initialize it further. */
+ auto *thiz = (hb_aat_layout_chain_accelerator_t *) hb_calloc (1, size);
+ if (unlikely (!thiz))
+ return nullptr;
+
+ hb_accelerate_subtables_context_t c_accelerate_subtables (thiz->subtables, num_glyphs);
+ chain.dispatch (&c_accelerate_subtables);
+
+ return thiz;
+ }
+
+ hb_accelerate_subtables_context_t::hb_applicable_t subtables[HB_VAR_ARRAY];
+};
+
template <typename Types>
struct ChainSubtable
{
@@ -987,6 +1073,8 @@ struct Chain
{
typedef typename Types::HBUINT HBUINT;
+ unsigned get_subtable_count () const { return subtableCount; }
+
hb_mask_t compile_flags (const hb_aat_map_builder_t *map) const
{
hb_mask_t flags = defaultFlags;
@@ -1027,7 +1115,8 @@ struct Chain
return flags;
}
- void apply (hb_aat_apply_context_t *c) const
+ void apply (hb_aat_apply_context_t *c,
+ const hb_aat_layout_chain_accelerator_t *accel) const
{
const ChainSubtable<Types> *subtable = &StructAfter<ChainSubtable<Types>> (featureZ.as_array (featureCount));
unsigned int count = subtableCount;
@@ -1039,6 +1128,7 @@ struct Chain
hb_map ([&subtable] (const hb_aat_map_t::range_flags_t _) -> bool { return subtable->subFeatureFlags & (_.flags); })))
goto skip;
c->subtable_flags = subtable->subFeatureFlags;
+ c->machine_glyph_set = accel ? accel->subtables[i].digest : hb_set_digest_t::full ();
if (!(subtable->get_coverage() & ChainSubtable<Types>::AllDirections) &&
HB_DIRECTION_IS_VERTICAL (c->buffer->props.direction) !=
@@ -1100,7 +1190,22 @@ struct Chain
unsigned int get_size () const { return length; }
- bool sanitize (hb_sanitize_context_t *c, unsigned int version HB_UNUSED) const
+ template <typename context_t, typename ...Ts>
+ typename context_t::return_t dispatch (context_t *c, Ts&&... ds) const
+ {
+ const ChainSubtable<Types> *subtable = &StructAfter<ChainSubtable<Types>> (featureZ.as_array (featureCount));
+ unsigned int count = subtableCount;
+ for (unsigned int i = 0; i < count; i++)
+ {
+ typename context_t::return_t ret = subtable->dispatch (c, std::forward<Ts> (ds)...);
+ if (c->stop_sublookup_iteration (ret))
+ return ret;
+ subtable = &StructAfter<ChainSubtable<Types>> (*subtable);
+ }
+ return c->default_return_value ();
+ }
+
+ bool sanitize (hb_sanitize_context_t *c, unsigned int version) const
{
TRACE_SANITIZE (this);
if (!(length.sanitize (c) &&
@@ -1122,6 +1227,13 @@ struct Chain
subtable = &StructAfter<ChainSubtable<Types>> (*subtable);
}
+ if (version >= 3)
+ {
+ const SubtableGlyphCoverage *coverage = (const SubtableGlyphCoverage *) subtable;
+ if (!coverage->sanitize (c, count))
+ return_trace (false);
+ }
+
return_trace (true);
}
@@ -1133,7 +1245,7 @@ struct Chain
UnsizedArrayOf<Feature> featureZ; /* Features. */
/*ChainSubtable firstSubtable;*//* Subtables. */
-/*subtableGlyphCoverageArray*/ /* Only if version >= 3. We don't use. */
+/*SubtableGlyphCoverage coverages*//* Only if version >= 3. */
public:
DEFINE_SIZE_MIN (8 + 2 * sizeof (HBUINT));
@@ -1144,13 +1256,69 @@ struct Chain
* The 'mort'/'morx' Table
*/
-template <typename Types, hb_tag_t TAG>
+template <typename T, typename Types, hb_tag_t TAG>
struct mortmorx
{
static constexpr hb_tag_t tableTag = TAG;
bool has_data () const { return version != 0; }
+ struct accelerator_t
+ {
+ accelerator_t (hb_face_t *face)
+ {
+ hb_sanitize_context_t sc;
+ this->table = sc.reference_table<T> (face);
+
+ this->chain_count = table->get_chain_count ();
+
+ this->accels = (hb_atomic_ptr_t<hb_aat_layout_chain_accelerator_t> *) hb_calloc (this->chain_count, sizeof (*accels));
+ if (unlikely (!this->accels))
+ {
+ this->chain_count = 0;
+ this->table.destroy ();
+ this->table = hb_blob_get_empty ();
+ }
+ }
+ ~accelerator_t ()
+ {
+ for (unsigned int i = 0; i < this->chain_count; i++)
+ hb_free (this->accels[i]);
+ hb_free (this->accels);
+ this->table.destroy ();
+ }
+
+ hb_blob_t *get_blob () const { return table.get_blob (); }
+
+ template <typename Chain>
+ hb_aat_layout_chain_accelerator_t *get_accel (unsigned chain_index, const Chain &chain, unsigned num_glyphs) const
+ {
+ if (unlikely (chain_index >= chain_count)) return nullptr;
+
+ retry:
+ auto *accel = accels[chain_index].get_acquire ();
+ if (unlikely (!accel))
+ {
+ accel = hb_aat_layout_chain_accelerator_t::create (chain, num_glyphs);
+ if (unlikely (!accel))
+ return nullptr;
+
+ if (unlikely (!accels[chain_index].cmpexch (nullptr, accel)))
+ {
+ hb_free (accel);
+ goto retry;
+ }
+ }
+
+ return accel;
+ }
+
+ hb_blob_ptr_t<T> table;
+ unsigned int chain_count;
+ hb_atomic_ptr_t<hb_aat_layout_chain_accelerator_t> *accels;
+ };
+
+
void compile_flags (const hb_aat_map_builder_t *mapper,
hb_aat_map_t *map) const
{
@@ -1167,8 +1335,14 @@ struct mortmorx
}
}
+ unsigned get_chain_count () const
+ {
+ return chainCount;
+ }
+
void apply (hb_aat_apply_context_t *c,
- const hb_aat_map_t &map) const
+ const hb_aat_map_t &map,
+ const accelerator_t &accel) const
{
if (unlikely (!c->buffer->successful)) return;
@@ -1179,8 +1353,9 @@ struct mortmorx
unsigned int count = chainCount;
for (unsigned int i = 0; i < count; i++)
{
+ auto *chain_accel = accel.get_accel (i, *chain, c->face->get_num_glyphs ());
c->range_flags = &map.chain_flags[i];
- chain->apply (c);
+ chain->apply (c, chain_accel);
if (unlikely (!c->buffer->successful)) return;
chain = &StructAfter<Chain<Types>> (*chain);
}
@@ -1220,8 +1395,15 @@ struct mortmorx
DEFINE_SIZE_MIN (8);
};
-struct morx : mortmorx<ExtendedTypes, HB_AAT_TAG_morx> {};
-struct mort : mortmorx<ObsoleteTypes, HB_AAT_TAG_mort> {};
+struct morx : mortmorx<morx, ExtendedTypes, HB_AAT_TAG_morx> {};
+struct mort : mortmorx<mort, ObsoleteTypes, HB_AAT_TAG_mort> {};
+
+struct morx_accelerator_t : morx::accelerator_t {
+ morx_accelerator_t (hb_face_t *face) : morx::accelerator_t (face) {}
+};
+struct mort_accelerator_t : mort::accelerator_t {
+ mort_accelerator_t (hb_face_t *face) : mort::accelerator_t (face) {}
+};
} /* namespace AAT */
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-aat-layout.cc b/src/3rdparty/harfbuzz-ng/src/hb-aat-layout.cc
index 5e4cea2224..9da29e51c9 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-aat-layout.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-aat-layout.cc
@@ -211,14 +211,14 @@ void
hb_aat_layout_compile_map (const hb_aat_map_builder_t *mapper,
hb_aat_map_t *map)
{
- const AAT::morx& morx = *mapper->face->table.morx;
+ const AAT::morx& morx = *mapper->face->table.morx->table;
if (morx.has_data ())
{
morx.compile_flags (mapper, map);
return;
}
- const AAT::mort& mort = *mapper->face->table.mort;
+ const AAT::mort& mort = *mapper->face->table.mort->table;
if (mort.has_data ())
{
mort.compile_flags (mapper, map);
@@ -243,8 +243,8 @@ hb_aat_layout_compile_map (const hb_aat_map_builder_t *mapper,
hb_bool_t
hb_aat_layout_has_substitution (hb_face_t *face)
{
- return face->table.morx->has_data () ||
- face->table.mort->has_data ();
+ return face->table.morx->table->has_data () ||
+ face->table.mort->table->has_data ();
}
void
@@ -260,26 +260,30 @@ hb_aat_layout_substitute (const hb_ot_shape_plan_t *plan,
hb_aat_map_t map;
builder.compile (map);
- hb_blob_t *morx_blob = font->face->table.morx.get_blob ();
- const AAT::morx& morx = *morx_blob->as<AAT::morx> ();
- if (morx.has_data ())
{
- AAT::hb_aat_apply_context_t c (plan, font, buffer, morx_blob);
- if (!buffer->message (font, "start table morx")) return;
- morx.apply (&c, map);
- (void) buffer->message (font, "end table morx");
- return;
+ auto &accel = *font->face->table.morx;
+ const AAT::morx& morx = *accel.table;
+ if (morx.has_data ())
+ {
+ AAT::hb_aat_apply_context_t c (plan, font, buffer, accel.get_blob ());
+ if (!buffer->message (font, "start table morx")) return;
+ morx.apply (&c, map, accel);
+ (void) buffer->message (font, "end table morx");
+ return;
+ }
}
- hb_blob_t *mort_blob = font->face->table.mort.get_blob ();
- const AAT::mort& mort = *mort_blob->as<AAT::mort> ();
- if (mort.has_data ())
{
- AAT::hb_aat_apply_context_t c (plan, font, buffer, mort_blob);
- if (!buffer->message (font, "start table mort")) return;
- mort.apply (&c, map);
- (void) buffer->message (font, "end table mort");
- return;
+ auto &accel = *font->face->table.mort;
+ const AAT::mort& mort = *accel.table;
+ if (mort.has_data ())
+ {
+ AAT::hb_aat_apply_context_t c (plan, font, buffer, accel.get_blob ());
+ if (!buffer->message (font, "start table mort")) return;
+ mort.apply (&c, map, accel);
+ (void) buffer->message (font, "end table mort");
+ return;
+ }
}
}
@@ -322,7 +326,7 @@ hb_aat_layout_remove_deleted_glyphs (hb_buffer_t *buffer)
hb_bool_t
hb_aat_layout_has_positioning (hb_face_t *face)
{
- return face->table.kerx->has_data ();
+ return face->table.kerx->table->has_data ();
}
void
@@ -330,13 +334,12 @@ hb_aat_layout_position (const hb_ot_shape_plan_t *plan,
hb_font_t *font,
hb_buffer_t *buffer)
{
- hb_blob_t *kerx_blob = font->face->table.kerx.get_blob ();
- const AAT::kerx& kerx = *kerx_blob->as<AAT::kerx> ();
+ auto &accel = *font->face->table.kerx;
- AAT::hb_aat_apply_context_t c (plan, font, buffer, kerx_blob);
+ AAT::hb_aat_apply_context_t c (plan, font, buffer, accel.get_blob ());
if (!buffer->message (font, "start table kerx")) return;
c.set_ankr_table (font->face->table.ankr.get ());
- kerx.apply (&c);
+ accel.apply (&c);
(void) buffer->message (font, "end table kerx");
}
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-algs.hh b/src/3rdparty/harfbuzz-ng/src/hb-algs.hh
index efa6074a42..b02793a09f 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-algs.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-algs.hh
@@ -202,8 +202,12 @@ struct BEInt<Type, 4>
/* Floats. */
/* We want our rounding towards +infinity. */
+static inline double
+_hb_roundf (double x) { return floor (x + .5); }
+
static inline float
_hb_roundf (float x) { return floorf (x + .5f); }
+
#define roundf(x) _hb_roundf(x)
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-cff2-interp-cs.hh b/src/3rdparty/harfbuzz-ng/src/hb-cff2-interp-cs.hh
index 55b1d3bf8d..06fbb72c61 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-cff2-interp-cs.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-cff2-interp-cs.hh
@@ -76,16 +76,12 @@ struct cff2_cs_interp_env_t : cs_interp_env_t<ELEM, CFF2Subrs>
coords = coords_;
num_coords = num_coords_;
varStore = acc.varStore;
- seen_blend = false;
- seen_vsindex_ = false;
- scalars.init ();
do_blend = num_coords && coords && varStore->size;
set_ivs (acc.privateDicts[fd].ivs);
}
void fini ()
{
- scalars.fini ();
SUPER::fini ();
}
@@ -173,8 +169,8 @@ struct cff2_cs_interp_env_t : cs_interp_env_t<ELEM, CFF2Subrs>
unsigned int ivs;
hb_vector_t<float> scalars;
bool do_blend;
- bool seen_vsindex_;
- bool seen_blend;
+ bool seen_vsindex_ = false;
+ bool seen_blend = false;
typedef cs_interp_env_t<ELEM, CFF2Subrs> SUPER;
};
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-cplusplus.hh b/src/3rdparty/harfbuzz-ng/src/hb-cplusplus.hh
index a640e192de..b6b5c8f781 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-cplusplus.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-cplusplus.hh
@@ -27,9 +27,6 @@
#include "hb.h"
-HB_BEGIN_DECLS
-HB_END_DECLS
-
#ifdef __cplusplus
#include <functional>
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-face-table-list.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-face-table-list.hh
index b552dfdd9d..db1c55490c 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-face-table-list.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-face-table-list.hh
@@ -100,7 +100,7 @@ HB_OT_CORE_TABLE (OT, MVAR)
/* Legacy kern. */
#ifndef HB_NO_OT_KERN
-HB_OT_CORE_TABLE (OT, kern)
+HB_OT_ACCELERATOR (OT, kern)
#endif
/* OpenType shaping. */
@@ -118,9 +118,9 @@ HB_OT_CORE_TABLE (OT, BASE)
/* AAT shaping. */
#ifndef HB_NO_AAT
-HB_OT_TABLE (AAT, morx)
-HB_OT_TABLE (AAT, mort)
-HB_OT_TABLE (AAT, kerx)
+HB_OT_ACCELERATOR (AAT, morx)
+HB_OT_ACCELERATOR (AAT, mort)
+HB_OT_ACCELERATOR (AAT, kerx)
HB_OT_TABLE (AAT, ankr)
HB_OT_TABLE (AAT, trak)
HB_OT_TABLE (AAT, ltag)
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-face.cc b/src/3rdparty/harfbuzz-ng/src/hb-ot-face.cc
index 2243ee0287..b0c927979e 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-face.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-face.cc
@@ -41,6 +41,8 @@
#include "hb-ot-layout-gdef-table.hh"
#include "hb-ot-layout-gsub-table.hh"
#include "hb-ot-layout-gpos-table.hh"
+#include "hb-aat-layout-kerx-table.hh"
+#include "hb-aat-layout-morx-table.hh"
void hb_ot_face_t::init0 (hb_face_t *face)
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-hmtx-table.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-hmtx-table.hh
index 48bd536121..e259b33748 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-hmtx-table.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-hmtx-table.hh
@@ -410,7 +410,8 @@ struct hmtxvmtx
font->coords, font->num_coords,
store_cache));
- return _glyf_get_advance_with_var_unscaled (font, glyph, T::tableTag == HB_OT_TAG_vmtx);
+ unsigned glyf_advance = _glyf_get_advance_with_var_unscaled (font, glyph, T::tableTag == HB_OT_TAG_vmtx);
+ return glyf_advance ? glyf_advance : advance;
#else
return advance;
#endif
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-kern-table.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-kern-table.hh
index 39444d803f..b87ac8f494 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-kern-table.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-kern-table.hh
@@ -86,6 +86,16 @@ struct KernSubTableFormat3
leftClassCount * rightClassCount));
}
+ template <typename set_t>
+ void collect_glyphs (set_t &left_set, set_t &right_set, unsigned num_glyphs) const
+ {
+ set_t set;
+ if (likely (glyphCount))
+ set.add_range (0, glyphCount - 1);
+ left_set.union_ (set);
+ right_set.union_ (set);
+ }
+
protected:
KernSubTableHeader
header;
@@ -135,16 +145,29 @@ struct KernSubTable
switch (subtable_type) {
case 0: return_trace (c->dispatch (u.format0));
#ifndef HB_NO_AAT_SHAPE
- case 1: return_trace (u.header.apple ? c->dispatch (u.format1, std::forward<Ts> (ds)...) : c->default_return_value ());
+ case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
#endif
case 2: return_trace (c->dispatch (u.format2));
#ifndef HB_NO_AAT_SHAPE
- case 3: return_trace (u.header.apple ? c->dispatch (u.format3, std::forward<Ts> (ds)...) : c->default_return_value ());
+ case 3: return_trace (c->dispatch (u.format3, std::forward<Ts> (ds)...));
#endif
default: return_trace (c->default_return_value ());
}
}
+ template <typename set_t>
+ void collect_glyphs (set_t &left_set, set_t &right_set, unsigned num_glyphs) const
+ {
+ unsigned int subtable_type = get_type ();
+ switch (subtable_type) {
+ case 0: u.format0.collect_glyphs (left_set, right_set, num_glyphs); return;
+ case 1: u.format1.collect_glyphs (left_set, right_set, num_glyphs); return;
+ case 2: u.format2.collect_glyphs (left_set, right_set, num_glyphs); return;
+ case 3: u.format3.collect_glyphs (left_set, right_set, num_glyphs); return;
+ default: return;
+ }
+ }
+
bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
@@ -318,8 +341,9 @@ struct kern
}
}
- bool apply (AAT::hb_aat_apply_context_t *c) const
- { return dispatch (c); }
+ bool apply (AAT::hb_aat_apply_context_t *c,
+ const AAT::kern_accelerator_data_t *accel_data = nullptr) const
+ { return dispatch (c, accel_data); }
template <typename context_t, typename ...Ts>
typename context_t::return_t dispatch (context_t *c, Ts&&... ds) const
@@ -343,6 +367,41 @@ struct kern
return_trace (dispatch (c));
}
+ AAT::kern_accelerator_data_t create_accelerator_data (unsigned num_glyphs) const
+ {
+ switch (get_type ()) {
+ case 0: return u.ot.create_accelerator_data (num_glyphs);
+#ifndef HB_NO_AAT_SHAPE
+ case 1: return u.aat.create_accelerator_data (num_glyphs);
+#endif
+ default:return AAT::kern_accelerator_data_t ();
+ }
+ }
+
+ struct accelerator_t
+ {
+ accelerator_t (hb_face_t *face)
+ {
+ hb_sanitize_context_t sc;
+ this->table = sc.reference_table<kern> (face);
+ this->accel_data = this->table->create_accelerator_data (face->get_num_glyphs ());
+ }
+ ~accelerator_t ()
+ {
+ this->table.destroy ();
+ }
+
+ hb_blob_t *get_blob () const { return table.get_blob (); }
+
+ bool apply (AAT::hb_aat_apply_context_t *c) const
+ {
+ return table->apply (c, &accel_data);
+ }
+
+ hb_blob_ptr_t<kern> table;
+ AAT::kern_accelerator_data_t accel_data;
+ };
+
protected:
union {
HBUINT32 version32;
@@ -356,6 +415,10 @@ struct kern
DEFINE_SIZE_UNION (4, version32);
};
+struct kern_accelerator_t : kern::accelerator_t {
+ kern_accelerator_t (hb_face_t *face) : kern::accelerator_t (face) {}
+};
+
} /* namespace OT */
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-layout-base-table.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-layout-base-table.hh
index 0278399069..56290905ce 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-layout-base-table.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-layout-base-table.hh
@@ -125,6 +125,20 @@ struct BaseCoordFormat3
auto *out = c->serializer->embed (*this);
if (unlikely (!out)) return_trace (false);
+ if (!c->plan->pinned_at_default)
+ {
+ unsigned var_idx = (this+deviceTable).get_variation_index ();
+ if (var_idx != VarIdx::NO_VARIATION)
+ {
+ hb_pair_t<unsigned, int> *v;
+ if (!c->plan->base_variation_idx_map.has (var_idx, &v))
+ return_trace (false);
+
+ if (unlikely (!c->serializer->check_assign (out->coordinate, coordinate + hb_second (*v),
+ HB_SERIALIZE_ERROR_INT_OVERFLOW)))
+ return_trace (false);
+ }
+ }
return_trace (out->deviceTable.serialize_copy (c->serializer, deviceTable,
this, 0,
hb_serialize_context_t::Head,
@@ -401,11 +415,12 @@ struct BaseLangSysRecord
bool has_data () const { return baseLangSysTag; }
- const MinMax &get_min_max () const { return this+minMax; }
+ const MinMax &get_min_max (const void* base) const { return base+minMax; }
- void collect_variation_indices (const hb_subset_plan_t* plan,
+ void collect_variation_indices (const void* base,
+ const hb_subset_plan_t* plan,
hb_set_t& varidx_set /* OUT */) const
- { (this+minMax).collect_variation_indices (plan, varidx_set); }
+ { (base+minMax).collect_variation_indices (plan, varidx_set); }
bool subset (hb_subset_context_t *c,
const void *base) const
@@ -438,7 +453,7 @@ struct BaseScript
const MinMax &get_min_max (hb_tag_t language_tag) const
{
const BaseLangSysRecord& record = baseLangSysRecords.bsearch (language_tag);
- return record.has_data () ? record.get_min_max () : this+defaultMinMax;
+ return record.has_data () ? record.get_min_max (this) : this+defaultMinMax;
}
const BaseCoord &get_base_coord (int baseline_tag_index) const
@@ -454,7 +469,7 @@ struct BaseScript
(this+defaultMinMax).collect_variation_indices (plan, varidx_set);
for (const BaseLangSysRecord& _ : baseLangSysRecords)
- _.collect_variation_indices (plan, varidx_set);
+ _.collect_variation_indices (this, plan, varidx_set);
}
bool subset (hb_subset_context_t *c) const
@@ -705,6 +720,46 @@ struct BASE
(this+vAxis).collect_variation_indices (plan, varidx_set);
}
+ bool subset_varstore (hb_subset_context_t *c,
+ BASE *out /* OUT */) const
+ {
+ TRACE_SUBSET (this);
+ if (!c->serializer->allocate_size<Offset32To<ItemVariationStore>> (Offset32To<ItemVariationStore>::static_size))
+ return_trace (false);
+ if (!c->plan->normalized_coords)
+ return_trace (out->varStore.serialize_subset (c, varStore, this, c->plan->base_varstore_inner_maps.as_array ()));
+
+ if (c->plan->all_axes_pinned)
+ return_trace (true);
+
+ item_variations_t item_vars;
+ if (!item_vars.instantiate (this+varStore, c->plan, true, true,
+ c->plan->base_varstore_inner_maps.as_array ()))
+ return_trace (false);
+
+ if (!out->varStore.serialize_serialize (c->serializer,
+ item_vars.has_long_word (),
+ c->plan->axis_tags,
+ item_vars.get_region_list (),
+ item_vars.get_vardata_encodings ()))
+ return_trace (false);
+
+ const hb_map_t &varidx_map = item_vars.get_varidx_map ();
+ /* base_variation_idx_map in the plan is old_varidx->(varidx, delta)
+ * mapping, new varidx is generated for subsetting, we need to remap this
+ * after instancing */
+ for (auto _ : c->plan->base_variation_idx_map.iter_ref ())
+ {
+ uint32_t varidx = _.second.first;
+ uint32_t *new_varidx;
+ if (varidx_map.has (varidx, &new_varidx))
+ _.second.first = *new_varidx;
+ else
+ _.second.first = HB_OT_LAYOUT_NO_VARIATIONS_INDEX;
+ }
+ return_trace (true);
+ }
+
bool subset (hb_subset_context_t *c) const
{
TRACE_SUBSET (this);
@@ -712,19 +767,15 @@ struct BASE
if (unlikely (!out || !c->serializer->extend_min (out))) return_trace (false);
out->version = version;
+ if (has_var_store () && !subset_varstore (c, out))
+ return_trace (false);
+
if (hAxis && !out->hAxis.serialize_subset (c, hAxis, this))
return_trace (false);
if (vAxis && !out->vAxis.serialize_subset (c, vAxis, this))
return_trace (false);
- if (has_var_store ())
- {
- if (!c->serializer->allocate_size<Offset32To<ItemVariationStore>> (Offset32To<ItemVariationStore>::static_size))
- return_trace (false);
- return_trace (out->varStore.serialize_subset (c, varStore, this, c->plan->base_varstore_inner_maps.as_array ()));
- }
-
return_trace (true);
}
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-layout-common.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-layout-common.hh
index aba427368c..65c8309573 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-layout-common.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-layout-common.hh
@@ -2641,7 +2641,7 @@ struct VarRegionList
float max_val = axis_region->endCoord.to_float ();
if (def_val != 0.f)
- axis_tuples.set (*axis_tag, Triple (min_val, def_val, max_val));
+ axis_tuples.set (*axis_tag, Triple ((double) min_val, (double) def_val, (double) max_val));
axis_region++;
}
return !axis_tuples.in_error ();
@@ -3208,6 +3208,8 @@ struct ItemVariationStore
for (unsigned i = 0; i < count; i++)
{
hb_inc_bimap_t *map = inner_maps.push ();
+ if (!c->propagate_error(inner_maps))
+ return_trace(nullptr);
auto &data = this+dataSets[i];
unsigned itemCount = data.get_item_count ();
@@ -3326,19 +3328,19 @@ struct ConditionFormat1
return_trace (false);
const hb_hashmap_t<hb_tag_t, Triple>& normalized_axes_location = c->plan->axes_location;
- Triple axis_limit{-1.f, 0.f, 1.f};
+ Triple axis_limit{-1.0, 0.0, 1.0};
Triple *normalized_limit;
if (normalized_axes_location.has (*axis_tag, &normalized_limit))
axis_limit = *normalized_limit;
const hb_hashmap_t<hb_tag_t, TripleDistances>& axes_triple_distances = c->plan->axes_triple_distances;
- TripleDistances axis_triple_distances{1.f, 1.f};
+ TripleDistances axis_triple_distances{1.0, 1.0};
TripleDistances *triple_dists;
if (axes_triple_distances.has (*axis_tag, &triple_dists))
axis_triple_distances = *triple_dists;
- float normalized_min = renormalizeValue (filterRangeMinValue.to_float (), axis_limit, axis_triple_distances, false);
- float normalized_max = renormalizeValue (filterRangeMaxValue.to_float (), axis_limit, axis_triple_distances, false);
+ float normalized_min = renormalizeValue ((double) filterRangeMinValue.to_float (), axis_limit, axis_triple_distances, false);
+ float normalized_max = renormalizeValue ((double) filterRangeMaxValue.to_float (), axis_limit, axis_triple_distances, false);
out->filterRangeMinValue.set_float (normalized_min);
out->filterRangeMaxValue.set_float (normalized_max);
@@ -3356,7 +3358,7 @@ struct ConditionFormat1
hb_tag_t axis_tag = c->axes_index_tag_map->get (axisIndex);
- Triple axis_range (-1.f, 0.f, 1.f);
+ Triple axis_range (-1.0, 0.0, 1.0);
Triple *axis_limit;
bool axis_set_by_user = false;
if (c->axes_location->has (axis_tag, &axis_limit))
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-layout-gsubgpos.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-layout-gsubgpos.hh
index c65ea32b8a..6b760b1108 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-layout-gsubgpos.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-layout-gsubgpos.hh
@@ -1254,7 +1254,7 @@ static bool match_input (hb_ot_apply_context_t *c,
match_func_t match_func,
const void *match_data,
unsigned int *end_position,
- unsigned int match_positions[HB_MAX_CONTEXT_LENGTH],
+ unsigned int *match_positions,
unsigned int *p_total_component_count = nullptr)
{
TRACE_APPLY (nullptr);
@@ -1378,7 +1378,7 @@ static bool match_input (hb_ot_apply_context_t *c,
}
static inline bool ligate_input (hb_ot_apply_context_t *c,
unsigned int count, /* Including the first glyph */
- const unsigned int match_positions[HB_MAX_CONTEXT_LENGTH], /* Including the first glyph */
+ const unsigned int *match_positions, /* Including the first glyph */
unsigned int match_end,
hb_codepoint_t lig_glyph,
unsigned int total_component_count)
@@ -1686,7 +1686,7 @@ static inline void recurse_lookups (context_t *c,
static inline void apply_lookup (hb_ot_apply_context_t *c,
unsigned int count, /* Including the first glyph */
- unsigned int match_positions[HB_MAX_CONTEXT_LENGTH], /* Including the first glyph */
+ unsigned int *match_positions, /* Including the first glyph */
unsigned int lookupCount,
const LookupRecord lookupRecord[], /* Array of LookupRecords--in design order */
unsigned int match_end)
@@ -1694,6 +1694,9 @@ static inline void apply_lookup (hb_ot_apply_context_t *c,
hb_buffer_t *buffer = c->buffer;
int end;
+ unsigned int *match_positions_input = match_positions;
+ unsigned int match_positions_count = count;
+
/* All positions are distance from beginning of *output* buffer.
* Adjust. */
{
@@ -1797,6 +1800,27 @@ static inline void apply_lookup (hb_ot_apply_context_t *c,
{
if (unlikely (delta + count > HB_MAX_CONTEXT_LENGTH))
break;
+ if (unlikely (delta + count > match_positions_count))
+ {
+ unsigned new_match_positions_count = hb_max (delta + count, hb_max(match_positions_count, 4u) * 1.5);
+ if (match_positions == match_positions_input)
+ {
+ match_positions = (unsigned int *) hb_malloc (new_match_positions_count * sizeof (match_positions[0]));
+ if (unlikely (!match_positions))
+ break;
+ memcpy (match_positions, match_positions_input, count * sizeof (match_positions[0]));
+ match_positions_count = new_match_positions_count;
+ }
+ else
+ {
+ unsigned int *new_match_positions = (unsigned int *) hb_realloc (match_positions, new_match_positions_count * sizeof (match_positions[0]));
+ if (unlikely (!new_match_positions))
+ break;
+ match_positions = new_match_positions;
+ match_positions_count = new_match_positions_count;
+ }
+ }
+
}
else
{
@@ -1820,6 +1844,9 @@ static inline void apply_lookup (hb_ot_apply_context_t *c,
match_positions[next] += delta;
}
+ if (match_positions != match_positions_input)
+ hb_free (match_positions);
+
(void) buffer->move_to (end);
}
@@ -1920,8 +1947,18 @@ static bool context_apply_lookup (hb_ot_apply_context_t *c,
const LookupRecord lookupRecord[],
const ContextApplyLookupContext &lookup_context)
{
+ if (unlikely (inputCount > HB_MAX_CONTEXT_LENGTH)) return false;
+ unsigned match_positions_stack[4];
+ unsigned *match_positions = match_positions_stack;
+ if (unlikely (inputCount > ARRAY_LENGTH (match_positions_stack)))
+ {
+ match_positions = (unsigned *) hb_malloc (hb_max (inputCount, 1u) * sizeof (match_positions[0]));
+ if (unlikely (!match_positions))
+ return false;
+ }
+
unsigned match_end = 0;
- unsigned match_positions[HB_MAX_CONTEXT_LENGTH];
+ bool ret = false;
if (match_input (c,
inputCount, input,
lookup_context.funcs.match, lookup_context.match_data,
@@ -1932,13 +1969,18 @@ static bool context_apply_lookup (hb_ot_apply_context_t *c,
inputCount, match_positions,
lookupCount, lookupRecord,
match_end);
- return true;
+ ret = true;
}
else
{
c->buffer->unsafe_to_concat (c->buffer->idx, match_end);
- return false;
+ ret = false;
}
+
+ if (unlikely (match_positions != match_positions_stack))
+ hb_free (match_positions);
+
+ return ret;
}
template <typename Types>
@@ -3018,9 +3060,20 @@ static bool chain_context_apply_lookup (hb_ot_apply_context_t *c,
const LookupRecord lookupRecord[],
const ChainContextApplyLookupContext &lookup_context)
{
+ if (unlikely (inputCount > HB_MAX_CONTEXT_LENGTH)) return false;
+ unsigned match_positions_stack[4];
+ unsigned *match_positions = match_positions_stack;
+ if (unlikely (inputCount > ARRAY_LENGTH (match_positions_stack)))
+ {
+ match_positions = (unsigned *) hb_malloc (hb_max (inputCount, 1u) * sizeof (match_positions[0]));
+ if (unlikely (!match_positions))
+ return false;
+ }
+
+ unsigned start_index = c->buffer->out_len;
unsigned end_index = c->buffer->idx;
unsigned match_end = 0;
- unsigned match_positions[HB_MAX_CONTEXT_LENGTH];
+ bool ret = true;
if (!(match_input (c,
inputCount, input,
lookup_context.funcs.match[1], lookup_context.match_data[1],
@@ -3031,17 +3084,18 @@ static bool chain_context_apply_lookup (hb_ot_apply_context_t *c,
match_end, &end_index)))
{
c->buffer->unsafe_to_concat (c->buffer->idx, end_index);
- return false;
+ ret = false;
+ goto done;
}
- unsigned start_index = c->buffer->out_len;
if (!match_backtrack (c,
backtrackCount, backtrack,
lookup_context.funcs.match[0], lookup_context.match_data[0],
&start_index))
{
c->buffer->unsafe_to_concat_from_outbuffer (start_index, end_index);
- return false;
+ ret = false;
+ goto done;
}
c->buffer->unsafe_to_break_from_outbuffer (start_index, end_index);
@@ -3049,7 +3103,12 @@ static bool chain_context_apply_lookup (hb_ot_apply_context_t *c,
inputCount, match_positions,
lookupCount, lookupRecord,
match_end);
- return true;
+ done:
+
+ if (unlikely (match_positions != match_positions_stack))
+ hb_free (match_positions);
+
+ return ret;
}
template <typename Types>
@@ -4328,7 +4387,7 @@ struct hb_ot_layout_lookup_accelerator_t
thiz->digest.init ();
for (auto& subtable : hb_iter (thiz->subtables, count))
- thiz->digest.add (subtable.digest);
+ thiz->digest.union_ (subtable.digest);
#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
thiz->cache_user_idx = c_accelerate_subtables.cache_user_idx;
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-layout.cc b/src/3rdparty/harfbuzz-ng/src/hb-ot-layout.cc
index a4c13abadf..613c97fd9e 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-layout.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-layout.cc
@@ -87,7 +87,7 @@ using OT::Layout::GPOS;
bool
hb_ot_layout_has_kerning (hb_face_t *face)
{
- return face->table.kern->has_data ();
+ return face->table.kern->table->has_data ();
}
/**
@@ -103,7 +103,7 @@ hb_ot_layout_has_kerning (hb_face_t *face)
bool
hb_ot_layout_has_machine_kerning (hb_face_t *face)
{
- return face->table.kern->has_state_machine ();
+ return face->table.kern->table->has_state_machine ();
}
/**
@@ -123,7 +123,7 @@ hb_ot_layout_has_machine_kerning (hb_face_t *face)
bool
hb_ot_layout_has_cross_kerning (hb_face_t *face)
{
- return face->table.kern->has_cross_stream ();
+ return face->table.kern->table->has_cross_stream ();
}
void
@@ -132,7 +132,7 @@ hb_ot_layout_kern (const hb_ot_shape_plan_t *plan,
hb_buffer_t *buffer)
{
hb_blob_t *blob = font->face->table.kern.get_blob ();
- const AAT::kern& kern = *blob->as<AAT::kern> ();
+ const auto& kern = *font->face->table.kern;
AAT::hb_aat_apply_context_t c (plan, font, buffer, blob);
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-os2-table.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-os2-table.hh
index 43b58d9bbf..6c91402269 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-os2-table.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-os2-table.hh
@@ -272,7 +272,7 @@ struct OS2
Triple *axis_range;
if (c->plan->user_axes_location.has (HB_TAG ('w','g','h','t'), &axis_range))
{
- unsigned weight_class = static_cast<unsigned> (roundf (hb_clamp (axis_range->middle, 1.0f, 1000.0f)));
+ unsigned weight_class = static_cast<unsigned> (roundf (hb_clamp (axis_range->middle, 1.0, 1000.0)));
if (os2_prime->usWeightClass != weight_class)
os2_prime->usWeightClass = weight_class;
}
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-post-table.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-post-table.hh
index 8132dcfb91..4191879037 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-post-table.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-post-table.hh
@@ -116,7 +116,7 @@ struct post
Triple *axis_range;
if (c->plan->user_axes_location.has (HB_TAG ('s','l','n','t'), &axis_range))
{
- float italic_angle = hb_max (-90.f, hb_min (axis_range->middle, 90.f));
+ float italic_angle = hb_max (-90.0, hb_min (axis_range->middle, 90.0));
if (post_prime->italicAngle.to_float () != italic_angle)
post_prime->italicAngle.set_float (italic_angle);
}
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-stat-table.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-stat-table.hh
index e88c82a13c..ea5459ef4e 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-stat-table.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-stat-table.hh
@@ -63,8 +63,9 @@ static bool axis_value_is_outside_axis_range (hb_tag_t axis_tag, float axis_valu
if (!user_axes_location->has (axis_tag))
return false;
+ double axis_value_double = static_cast<double>(axis_value);
Triple axis_range = user_axes_location->get (axis_tag);
- return (axis_value < axis_range.minimum || axis_value > axis_range.maximum);
+ return (axis_value_double < axis_range.minimum || axis_value_double > axis_range.maximum);
}
struct StatAxisRecord
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-tag-table.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-tag-table.hh
index db92f4664a..920b06b9c9 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-tag-table.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-tag-table.hh
@@ -2818,9 +2818,10 @@ out:
* @tag: A language tag.
*
* Converts @tag to a BCP 47 language tag if it is ambiguous (it corresponds to
- * many language tags) and the best tag is not the alphabetically first, or if
- * the best tag consists of multiple subtags, or if the best tag does not appear
- * in #ot_languages.
+ * many language tags) and the best tag is not the first (sorted alphabetically,
+ * with two-letter tags having priority over all three-letter tags), or if the
+ * best tag consists of multiple subtags, or if the best tag does not appear in
+ * #ot_languages2 or #ot_languages3.
*
* Return value: The #hb_language_t corresponding to the BCP 47 language tag,
* or #HB_LANGUAGE_INVALID if @tag is not ambiguous.
@@ -2834,8 +2835,6 @@ hb_ot_ambiguous_tag_to_language (hb_tag_t tag)
return hb_language_from_string ("alt", -1); /* Southern Altai */
case HB_TAG('A','P','P','H'): /* Phonetic transcription—Americanist conventions */
return hb_language_from_string ("und-fonnapa", -1); /* Undetermined; North American Phonetic Alphabet */
- case HB_TAG('A','R','A',' '): /* Arabic */
- return hb_language_from_string ("ar", -1); /* Arabic [macrolanguage] */
case HB_TAG('A','R','K',' '): /* Rakhine */
return hb_language_from_string ("rki", -1); /* Rakhine */
case HB_TAG('A','T','H',' '): /* Athapaskan */
@@ -2856,12 +2855,6 @@ hb_ot_ambiguous_tag_to_language (hb_tag_t tag)
return hb_language_from_string ("din", -1); /* Dinka [macrolanguage] */
case HB_TAG('D','R','I',' '): /* Dari */
return hb_language_from_string ("prs", -1); /* Dari */
- case HB_TAG('D','Z','N',' '): /* Dzongkha */
- return hb_language_from_string ("dz", -1); /* Dzongkha */
- case HB_TAG('E','T','I',' '): /* Estonian */
- return hb_language_from_string ("et", -1); /* Estonian [macrolanguage] */
- case HB_TAG('F','A','R',' '): /* Persian */
- return hb_language_from_string ("fa", -1); /* Persian [macrolanguage] */
case HB_TAG('G','O','N',' '): /* Gondi */
return hb_language_from_string ("gon", -1); /* Gondi [macrolanguage] */
case HB_TAG('H','M','A',' '): /* High Mari */
@@ -2876,10 +2869,6 @@ hb_ot_ambiguous_tag_to_language (hb_tag_t tag)
return hb_language_from_string ("iba", -1); /* Iban */
case HB_TAG('I','J','O',' '): /* Ijo */
return hb_language_from_string ("ijo", -1); /* Ijo [collection] */
- case HB_TAG('I','N','U',' '): /* Inuktitut */
- return hb_language_from_string ("iu", -1); /* Inuktitut [macrolanguage] */
- case HB_TAG('I','P','K',' '): /* Inupiat */
- return hb_language_from_string ("ik", -1); /* Inupiaq [macrolanguage] */
case HB_TAG('I','P','P','H'): /* Phonetic transcription—IPA conventions */
return hb_language_from_string ("und-fonipa", -1); /* Undetermined; International Phonetic Alphabet */
case HB_TAG('I','R','T',' '): /* Irish Traditional */
@@ -2890,36 +2879,24 @@ hb_ot_ambiguous_tag_to_language (hb_tag_t tag)
return hb_language_from_string ("kln", -1); /* Kalenjin [macrolanguage] */
case HB_TAG('K','G','E',' '): /* Khutsuri Georgian */
return hb_language_from_string ("und-Geok", -1); /* Undetermined; Khutsuri (Asomtavruli and Nuskhuri) */
- case HB_TAG('K','N','R',' '): /* Kanuri */
- return hb_language_from_string ("kr", -1); /* Kanuri [macrolanguage] */
case HB_TAG('K','O','H',' '): /* Korean Old Hangul */
return hb_language_from_string ("okm", -1); /* Middle Korean (10th-16th cent.) */
case HB_TAG('K','O','K',' '): /* Konkani */
return hb_language_from_string ("kok", -1); /* Konkani [macrolanguage] */
- case HB_TAG('K','O','M',' '): /* Komi */
- return hb_language_from_string ("kv", -1); /* Komi [macrolanguage] */
case HB_TAG('K','P','L',' '): /* Kpelle */
return hb_language_from_string ("kpe", -1); /* Kpelle [macrolanguage] */
case HB_TAG('K','R','N',' '): /* Karen */
return hb_language_from_string ("kar", -1); /* Karen [collection] */
case HB_TAG('K','U','I',' '): /* Kui */
return hb_language_from_string ("uki", -1); /* Kui (India) */
- case HB_TAG('K','U','R',' '): /* Kurdish */
- return hb_language_from_string ("ku", -1); /* Kurdish [macrolanguage] */
case HB_TAG('L','M','A',' '): /* Low Mari */
return hb_language_from_string ("mhr", -1); /* Eastern Mari */
case HB_TAG('L','U','H',' '): /* Luyia */
return hb_language_from_string ("luy", -1); /* Luyia [macrolanguage] */
- case HB_TAG('L','V','I',' '): /* Latvian */
- return hb_language_from_string ("lv", -1); /* Latvian [macrolanguage] */
case HB_TAG('M','A','W',' '): /* Marwari */
return hb_language_from_string ("mwr", -1); /* Marwari [macrolanguage] */
- case HB_TAG('M','L','G',' '): /* Malagasy */
- return hb_language_from_string ("mg", -1); /* Malagasy [macrolanguage] */
case HB_TAG('M','L','Y',' '): /* Malay */
return hb_language_from_string ("ms", -1); /* Malay [macrolanguage] */
- case HB_TAG('M','N','G',' '): /* Mongolian */
- return hb_language_from_string ("mn", -1); /* Mongolian [macrolanguage] */
case HB_TAG('M','N','K',' '): /* Maninka */
return hb_language_from_string ("man", -1); /* Mandingo [macrolanguage] */
case HB_TAG('M','O','L',' '): /* Romanian (Moldova) */
@@ -2930,26 +2907,16 @@ hb_ot_ambiguous_tag_to_language (hb_tag_t tag)
return hb_language_from_string ("myn", -1); /* Mayan [collection] */
case HB_TAG('N','A','H',' '): /* Nahuatl */
return hb_language_from_string ("nah", -1); /* Nahuatl [collection] */
- case HB_TAG('N','E','P',' '): /* Nepali */
- return hb_language_from_string ("ne", -1); /* Nepali [macrolanguage] */
case HB_TAG('N','I','S',' '): /* Nisi */
return hb_language_from_string ("njz", -1); /* Nyishi */
case HB_TAG('N','O','R',' '): /* Norwegian */
return hb_language_from_string ("no", -1); /* Norwegian [macrolanguage] */
- case HB_TAG('O','J','B',' '): /* Ojibway */
- return hb_language_from_string ("oj", -1); /* Ojibwa [macrolanguage] */
- case HB_TAG('O','R','O',' '): /* Oromo */
- return hb_language_from_string ("om", -1); /* Oromo [macrolanguage] */
- case HB_TAG('P','A','S',' '): /* Pashto */
- return hb_language_from_string ("ps", -1); /* Pashto [macrolanguage] */
case HB_TAG('P','G','R',' '): /* Polytonic Greek */
return hb_language_from_string ("el-polyton", -1); /* Modern Greek (1453-); Polytonic Greek */
case HB_TAG('P','R','O',' '): /* Provençal / Old Provençal */
return hb_language_from_string ("pro", -1); /* Old Provençal (to 1500) */
case HB_TAG('Q','U','H',' '): /* Quechua (Bolivia) */
return hb_language_from_string ("quh", -1); /* South Bolivian Quechua */
- case HB_TAG('Q','U','Z',' '): /* Quechua */
- return hb_language_from_string ("qu", -1); /* Quechua [macrolanguage] */
case HB_TAG('Q','V','I',' '): /* Quechua (Ecuador) */
return hb_language_from_string ("qvi", -1); /* Imbabura Highland Quichua */
case HB_TAG('Q','W','H',' '): /* Quechua (Peru) */
@@ -2960,10 +2927,6 @@ hb_ot_ambiguous_tag_to_language (hb_tag_t tag)
return hb_language_from_string ("ro", -1); /* Romanian */
case HB_TAG('R','O','Y',' '): /* Romany */
return hb_language_from_string ("rom", -1); /* Romany [macrolanguage] */
- case HB_TAG('S','A','N',' '): /* Sanskrit */
- return hb_language_from_string ("sa", -1); /* Sanskrit [macrolanguage] */
- case HB_TAG('S','Q','I',' '): /* Albanian */
- return hb_language_from_string ("sq", -1); /* Albanian [macrolanguage] */
case HB_TAG('S','R','B',' '): /* Serbian */
return hb_language_from_string ("sr", -1); /* Serbian */
case HB_TAG('S','X','T',' '): /* Sutu */
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-var-avar-table.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-var-avar-table.hh
index 9149959d79..75ea338e2a 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-var-avar-table.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-var-avar-table.hh
@@ -80,7 +80,7 @@ struct AxisValueMap
bool is_outside_axis_range (const Triple& axis_range) const
{
- float from_coord = coords[0].to_float ();
+ double from_coord = (double) coords[0].to_float ();
return !axis_range.contains (from_coord);
}
@@ -100,8 +100,8 @@ struct AxisValueMap
float from_coord = coords[0].to_float ();
float to_coord = coords[1].to_float ();
- from_coord = renormalizeValue (from_coord, unmapped_range, triple_distances);
- to_coord = renormalizeValue (to_coord, axis_range, triple_distances);
+ from_coord = renormalizeValue ((double) from_coord, unmapped_range, triple_distances);
+ to_coord = renormalizeValue ((double) to_coord, axis_range, triple_distances);
coords[0].set_float (from_coord);
coords[1].set_float (to_coord);
@@ -197,7 +197,7 @@ struct SegmentMaps : Array16Of<AxisValueMap>
unmapped_val.set_int (unmap (val.to_int ()));
float unmapped_max = unmapped_val.to_float ();
- return Triple{unmapped_min, unmapped_middle, unmapped_max};
+ return Triple{(double) unmapped_min, (double) unmapped_middle, (double) unmapped_max};
}
bool subset (hb_subset_context_t *c, hb_tag_t axis_tag) const
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-var-common.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-var-common.hh
index 379e164059..08227aa1df 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-var-common.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-var-common.hh
@@ -299,13 +299,13 @@ struct TupleVariationHeader
start = hb_min (peak, 0.f);
end = hb_max (peak, 0.f);
}
- axis_tuples.set (*axis_tag, Triple (start, peak, end));
+ axis_tuples.set (*axis_tag, Triple ((double) start, (double) peak, (double) end));
}
return true;
}
- float calculate_scalar (hb_array_t<int> coords, unsigned int coord_count,
+ double calculate_scalar (hb_array_t<int> coords, unsigned int coord_count,
const hb_array_t<const F2DOT14> shared_tuples,
const hb_vector_t<hb_pair_t<int,int>> *shared_tuple_active_idx = nullptr) const
{
@@ -321,13 +321,13 @@ struct TupleVariationHeader
{
unsigned int index = get_index ();
if (unlikely ((index + 1) * coord_count > shared_tuples.length))
- return 0.f;
+ return 0.0;
peak_tuple = shared_tuples.sub_array (coord_count * index, coord_count).arrayZ;
if (shared_tuple_active_idx)
{
if (unlikely (index >= shared_tuple_active_idx->length))
- return 0.f;
+ return 0.0;
auto _ = (*shared_tuple_active_idx).arrayZ[index];
if (_.second != -1)
{
@@ -352,7 +352,7 @@ struct TupleVariationHeader
end_tuple = get_end_tuple (coord_count).arrayZ;
}
- float scalar = 1.f;
+ double scalar = 1.0;
for (unsigned int i = start_idx; i < end_idx; i += step)
{
int peak = peak_tuple[i].to_int ();
@@ -367,15 +367,15 @@ struct TupleVariationHeader
int end = end_tuple[i].to_int ();
if (unlikely (start > peak || peak > end ||
(start < 0 && end > 0 && peak))) continue;
- if (v < start || v > end) return 0.f;
+ if (v < start || v > end) return 0.0;
if (v < peak)
- { if (peak != start) scalar *= (float) (v - start) / (peak - start); }
+ { if (peak != start) scalar *= (double) (v - start) / (peak - start); }
else
- { if (peak != end) scalar *= (float) (end - v) / (end - peak); }
+ { if (peak != end) scalar *= (double) (end - v) / (end - peak); }
}
- else if (!v || v < hb_min (0, peak) || v > hb_max (0, peak)) return 0.f;
+ else if (!v || v < hb_min (0, peak) || v > hb_max (0, peak)) return 0.0;
else
- scalar *= (float) v / peak;
+ scalar *= (double) v / peak;
}
return scalar;
}
@@ -444,10 +444,10 @@ struct tuple_delta_t
/* indices_length = point_count, indice[i] = 1 means point i is referenced */
hb_vector_t<bool> indices;
-
- hb_vector_t<float> deltas_x;
+
+ hb_vector_t<double> deltas_x;
/* empty for cvar tuples */
- hb_vector_t<float> deltas_y;
+ hb_vector_t<double> deltas_y;
/* compiled data: header and deltas
* compiled point data is saved in a hashmap within tuple_variations_t cause
@@ -513,9 +513,9 @@ struct tuple_delta_t
return *this;
}
- tuple_delta_t& operator *= (float scalar)
+ tuple_delta_t& operator *= (double scalar)
{
- if (scalar == 1.0f)
+ if (scalar == 1.0)
return *this;
unsigned num = indices.length;
@@ -546,18 +546,18 @@ struct tuple_delta_t
return out;
}
- if ((tent->minimum < 0.f && tent->maximum > 0.f) ||
+ if ((tent->minimum < 0.0 && tent->maximum > 0.0) ||
!(tent->minimum <= tent->middle && tent->middle <= tent->maximum))
return out;
- if (tent->middle == 0.f)
+ if (tent->middle == 0.0)
{
out.push (*this);
return out;
}
- result_t solutions = rebase_tent (*tent, axis_limit, axis_triple_distances);
- for (auto t : solutions)
+ rebase_tent_result_t solutions = rebase_tent (*tent, axis_limit, axis_triple_distances);
+ for (auto &t : solutions)
{
tuple_delta_t new_var = *this;
if (t.second == Triple ())
@@ -729,8 +729,8 @@ struct tuple_delta_t
{ return compile_deltas (indices, deltas_x, deltas_y, compiled_deltas); }
bool compile_deltas (const hb_vector_t<bool> &point_indices,
- const hb_vector_t<float> &x_deltas,
- const hb_vector_t<float> &y_deltas,
+ const hb_vector_t<double> &x_deltas,
+ const hb_vector_t<double> &y_deltas,
hb_vector_t<char> &compiled_deltas /* OUT */)
{
hb_vector_t<int> rounded_deltas;
@@ -1000,9 +1000,13 @@ struct tuple_delta_t
{
i = next_index (i, start_point, end_point);
if (i == next) break;
- deltas_x.arrayZ[i] = infer_delta (orig_points.arrayZ[i].x, orig_points.arrayZ[prev].x, orig_points.arrayZ[next].x,
+ deltas_x.arrayZ[i] = infer_delta ((double) orig_points.arrayZ[i].x,
+ (double) orig_points.arrayZ[prev].x,
+ (double) orig_points.arrayZ[next].x,
deltas_x.arrayZ[prev], deltas_x.arrayZ[next]);
- deltas_y.arrayZ[i] = infer_delta (orig_points.arrayZ[i].y, orig_points.arrayZ[prev].y, orig_points.arrayZ[next].y,
+ deltas_y.arrayZ[i] = infer_delta ((double) orig_points.arrayZ[i].y,
+ (double) orig_points.arrayZ[prev].y,
+ (double) orig_points.arrayZ[next].y,
deltas_y.arrayZ[prev], deltas_y.arrayZ[next]);
inferred_idxes.add (i);
if (--unref_count == 0) goto no_more_gaps;
@@ -1020,8 +1024,8 @@ struct tuple_delta_t
{
if (!inferred_idxes.has (i))
{
- deltas_x.arrayZ[i] = 0.f;
- deltas_y.arrayZ[i] = 0.f;
+ deltas_x.arrayZ[i] = 0.0;
+ deltas_y.arrayZ[i] = 0.0;
}
indices[i] = true;
}
@@ -1031,7 +1035,7 @@ struct tuple_delta_t
bool optimize (const contour_point_vector_t& contour_points,
bool is_composite,
- float tolerance = 0.5f)
+ double tolerance = 0.5 + 1e-10)
{
unsigned count = contour_points.length;
if (deltas_x.length != count ||
@@ -1062,7 +1066,7 @@ struct tuple_delta_t
if (ref_count == count) return true;
- hb_vector_t<float> opt_deltas_x, opt_deltas_y;
+ hb_vector_t<double> opt_deltas_x, opt_deltas_y;
bool is_comp_glyph_wo_deltas = (is_composite && ref_count == 0);
if (is_comp_glyph_wo_deltas)
{
@@ -1194,16 +1198,16 @@ struct tuple_delta_t
return compiled_points.resize (pos, false);
}
- static float infer_delta (float target_val, float prev_val, float next_val, float prev_delta, float next_delta)
+ static double infer_delta (double target_val, double prev_val, double next_val, double prev_delta, double next_delta)
{
if (prev_val == next_val)
- return (prev_delta == next_delta) ? prev_delta : 0.f;
+ return (prev_delta == next_delta) ? prev_delta : 0.0;
else if (target_val <= hb_min (prev_val, next_val))
return (prev_val < next_val) ? prev_delta : next_delta;
else if (target_val >= hb_max (prev_val, next_val))
return (prev_val > next_val) ? prev_delta : next_delta;
- float r = (target_val - prev_val) / (next_val - prev_val);
+ double r = (target_val - prev_val) / (next_val - prev_val);
return prev_delta + r * (next_delta - prev_delta);
}
@@ -1347,9 +1351,9 @@ struct TupleVariationData
unsigned idx = apply_to_all ? i : indices[i];
if (idx >= point_count) continue;
var.indices[idx] = true;
- var.deltas_x[idx] = static_cast<float> (deltas_x[i]);
+ var.deltas_x[idx] = deltas_x[i];
if (is_gvar)
- var.deltas_y[idx] = static_cast<float> (deltas_y[i]);
+ var.deltas_y[idx] = deltas_y[i];
}
tuple_vars.push (std::move (var));
} while (iterator.move_to_next ());
@@ -1367,15 +1371,15 @@ struct TupleVariationData
/* NULL offset, to keep original varidx valid, just return */
if (&var_data == &Null (VarData))
return true;
-
+
unsigned num_regions = var_data.get_region_index_count ();
if (!tuple_vars.alloc (num_regions)) return false;
-
+
item_count = inner_map ? inner_map->get_population () : var_data.get_item_count ();
if (!item_count) return true;
unsigned row_size = var_data.get_row_size ();
const HBUINT8 *delta_bytes = var_data.get_delta_bytes ();
-
+
for (unsigned r = 0; r < num_regions; r++)
{
/* In VarData, deltas are organized in rows, convert them into
@@ -1384,14 +1388,14 @@ struct TupleVariationData
if (!tuple.deltas_x.resize (item_count, false) ||
!tuple.indices.resize (item_count, false))
return false;
-
+
for (unsigned i = 0; i < item_count; i++)
{
tuple.indices.arrayZ[i] = true;
tuple.deltas_x.arrayZ[i] = var_data.get_item_delta_fast (inner_map ? inner_map->backward (i) : i,
r, delta_bytes, row_size);
}
-
+
unsigned region_index = var_data.get_region_index (r);
if (region_index >= regions.length) return false;
tuple.axis_tuples = regions.arrayZ[region_index];
@@ -1425,7 +1429,7 @@ struct TupleVariationData
Triple *axis_limit;
if (!normalized_axes_location.has (axis_tag, &axis_limit))
return false;
- TripleDistances axis_triple_distances{1.f, 1.f};
+ TripleDistances axis_triple_distances{1.0, 1.0};
if (axes_triple_distances.has (axis_tag))
axis_triple_distances = axes_triple_distances.get (axis_tag);
@@ -1503,11 +1507,11 @@ struct TupleVariationData
return false;
continue;
}
-
+
hb_vector_t<char> compiled_point_data;
if (!tuple_delta_t::compile_point_set (*points_set, compiled_point_data))
return false;
-
+
if (!point_data_map.set (points_set, std::move (compiled_point_data)) ||
!point_set_count_map.set (points_set, 1))
return false;
@@ -1547,7 +1551,7 @@ struct TupleVariationData
for (tuple_delta_t& var : tuple_vars)
if (!var.calc_inferred_deltas (contour_points))
return false;
-
+
return true;
}
@@ -1874,7 +1878,7 @@ struct TupleVariationData
if (!tuple_variations.serialize_var_headers (c, total_header_len))
return_trace (false);
-
+
unsigned data_offset = min_size + total_header_len;
if (!is_gvar) data_offset += 4;
if (!c->check_assign (out->data, data_offset, HB_SERIALIZE_ERROR_INT_OVERFLOW)) return_trace (false);
@@ -2335,12 +2339,12 @@ struct item_variations_t
/* just sanity check, this shouldn't happen */
if (encoding.is_empty ())
return false;
-
+
unsigned num_rows = encoding.items.length;
-
+
/* sort rows, make result deterministic */
encoding.items.qsort (_cmp_row);
-
+
/* compile old to new var_idxes mapping */
for (unsigned minor = 0; minor < num_rows; minor++)
{
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-var-fvar-table.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-var-fvar-table.hh
index 07d7586baa..2cd9afbb70 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-var-fvar-table.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-var-fvar-table.hh
@@ -43,7 +43,7 @@ static bool axis_coord_pinned_or_within_axis_range (const hb_array_t<const F16DO
unsigned axis_index,
Triple axis_limit)
{
- float axis_coord = coords[axis_index].to_float ();
+ double axis_coord = static_cast<double>(coords[axis_index].to_float ());
if (axis_limit.is_point ())
{
if (axis_limit.minimum != axis_coord)
@@ -233,7 +233,10 @@ struct AxisRecord
{
float min, default_, max;
get_coordinates (min, default_, max);
- return TripleDistances (min, default_, max);
+ return TripleDistances (
+ static_cast<double>(min),
+ static_cast<double>(default_),
+ static_cast<double>(max));
}
bool subset (hb_subset_context_t *c) const
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-var-gvar-table.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-var-gvar-table.hh
index 59aad57e37..d713084faf 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-var-gvar-table.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-var-gvar-table.hh
@@ -102,9 +102,8 @@ struct glyph_variations_t
}
bool is_composite_glyph = false;
-#ifdef HB_EXPERIMENTAL_API
is_composite_glyph = plan->composite_new_gids.has (new_gid);
-#endif
+
if (!p->decompile_tuple_variations (all_contour_points->length, true /* is_gvar */,
iterator, &(plan->axes_old_index_tag_map),
shared_indices, shared_tuples,
@@ -120,9 +119,7 @@ struct glyph_variations_t
{
unsigned count = plan->new_to_old_gid_list.length;
bool iup_optimize = false;
-#ifdef HB_EXPERIMENTAL_API
iup_optimize = plan->flags & HB_SUBSET_FLAGS_OPTIMIZE_IUP_DELTAS;
-#endif
for (unsigned i = 0; i < count; i++)
{
hb_codepoint_t new_gid = plan->new_to_old_gid_list[i].first;
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-repacker.hh b/src/3rdparty/harfbuzz-ng/src/hb-repacker.hh
index ed40f271cc..cb4fdeead2 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-repacker.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-repacker.hh
@@ -337,9 +337,10 @@ bool _process_overflows (const hb_vector_t<graph::overflow_record_t>& overflows,
inline bool
hb_resolve_graph_overflows (hb_tag_t table_tag,
unsigned max_rounds ,
- bool recalculate_extensions,
+ bool always_recalculate_extensions,
graph_t& sorted_graph /* IN/OUT */)
{
+ DEBUG_MSG (SUBSET_REPACK, nullptr, "Repacking %c%c%c%c.", HB_UNTAG(table_tag));
sorted_graph.sort_shortest_distance ();
if (sorted_graph.in_error ())
{
@@ -351,12 +352,12 @@ hb_resolve_graph_overflows (hb_tag_t table_tag,
if (!will_overflow)
return true;
+ bool is_gsub_or_gpos = (table_tag == HB_OT_TAG_GPOS || table_tag == HB_OT_TAG_GSUB);
graph::gsubgpos_graph_context_t ext_context (table_tag, sorted_graph);
- if ((table_tag == HB_OT_TAG_GPOS
- || table_tag == HB_OT_TAG_GSUB)
- && will_overflow)
+ if (is_gsub_or_gpos && will_overflow)
{
- if (recalculate_extensions)
+ DEBUG_MSG (SUBSET_REPACK, nullptr, "Applying GSUB/GPOS repacking specializations.");
+ if (always_recalculate_extensions)
{
DEBUG_MSG (SUBSET_REPACK, nullptr, "Splitting subtables if needed.");
if (!_presplit_subtables_if_needed (ext_context)) {
@@ -412,6 +413,13 @@ hb_resolve_graph_overflows (hb_tag_t table_tag,
if (graph::will_overflow (sorted_graph))
{
+ if (is_gsub_or_gpos && !always_recalculate_extensions) {
+ // If this a GSUB/GPOS table and we didn't try to extension promotion and table splitting then
+ // as a last ditch effort, re-run the repacker with it enabled.
+ DEBUG_MSG (SUBSET_REPACK, nullptr, "Failed to find a resolution. Re-running with extension promotion and table splitting enabled.");
+ return hb_resolve_graph_overflows (table_tag, max_rounds, true, sorted_graph);
+ }
+
DEBUG_MSG (SUBSET_REPACK, nullptr, "Offset overflow resolution failed.");
return false;
}
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-set-digest.hh b/src/3rdparty/harfbuzz-ng/src/hb-set-digest.hh
index 5681641baa..b718b94e69 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-set-digest.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-set-digest.hh
@@ -82,7 +82,9 @@ struct hb_set_digest_bits_pattern_t
void init () { mask = 0; }
- void add (const hb_set_digest_bits_pattern_t &o) { mask |= o.mask; }
+ static hb_set_digest_bits_pattern_t full () { hb_set_digest_bits_pattern_t d; d.mask = (mask_t) -1; return d; }
+
+ void union_ (const hb_set_digest_bits_pattern_t &o) { mask |= o.mask; }
void add (hb_codepoint_t g) { mask |= mask_for (g); }
@@ -129,11 +131,14 @@ struct hb_set_digest_bits_pattern_t
bool may_have (hb_codepoint_t g) const
{ return mask & mask_for (g); }
+ bool operator [] (hb_codepoint_t g) const
+ { return may_have (g); }
+
private:
static mask_t mask_for (hb_codepoint_t g)
{ return ((mask_t) 1) << ((g >> shift) & (mask_bits - 1)); }
- mask_t mask;
+ mask_t mask = 0;
};
template <typename head_t, typename tail_t>
@@ -145,10 +150,12 @@ struct hb_set_digest_combiner_t
tail.init ();
}
- void add (const hb_set_digest_combiner_t &o)
+ static hb_set_digest_combiner_t full () { hb_set_digest_combiner_t d; d.head = head_t::full(); d.tail = tail_t::full (); return d; }
+
+ void union_ (const hb_set_digest_combiner_t &o)
{
- head.add (o.head);
- tail.add (o.tail);
+ head.union_ (o.head);
+ tail.union_(o.tail);
}
void add (hb_codepoint_t g)
@@ -188,6 +195,9 @@ struct hb_set_digest_combiner_t
return head.may_have (g) && tail.may_have (g);
}
+ bool operator [] (hb_codepoint_t g) const
+ { return may_have (g); }
+
private:
head_t head;
tail_t tail;
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-set.hh b/src/3rdparty/harfbuzz-ng/src/hb-set.hh
index ce69ea2c9b..f6013a4141 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-set.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-set.hh
@@ -86,7 +86,7 @@ struct hb_sparseset_t
uint32_t hash () const { return s.hash (); }
void add (hb_codepoint_t g) { s.add (g); }
- bool add_range (hb_codepoint_t a, hb_codepoint_t b) { return s.add_range (a, b); }
+ bool add_range (hb_codepoint_t first, hb_codepoint_t last) { return s.add_range (first, last); }
template <typename T>
void add_array (const T *array, unsigned int count, unsigned int stride=sizeof(T))
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-subset-cff-common.hh b/src/3rdparty/harfbuzz-ng/src/hb-subset-cff-common.hh
index 462e99cf8c..4039f9c959 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-subset-cff-common.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-subset-cff-common.hh
@@ -115,7 +115,7 @@ struct str_encoder_t
encode_byte (OpCode_BCD);
// Based on:
- // https://github.com/fonttools/fonttools/blob/97ed3a61cde03e17b8be36f866192fbd56f1d1a7/Lib/fontTools/misc/psCharStrings.py#L265-L294
+ // https://github.com/fonttools/fonttools/blob/0738c41dfbcbc213ab9263f486ef0cccc6eb5ce5/Lib/fontTools/misc/psCharStrings.py#L267-L316
char buf[16];
/* FontTools has the following comment:
@@ -133,6 +133,10 @@ struct str_encoder_t
(void) hb_uselocale (((void) freelocale (clocale), oldlocale));
char *s = buf;
+ size_t len;
+ char *comma = strchr (s, ',');
+ if (comma) // Comma for some European locales in case no uselocale available.
+ *comma = '.';
if (s[0] == '0' && s[1] == '.')
s++;
else if (s[0] == '-' && s[1] == '0' && s[2] == '.')
@@ -140,6 +144,45 @@ struct str_encoder_t
s[1] = '-';
s++;
}
+ else if ((len = strlen (s)) > 3 && !strcmp (s + len - 3, "000"))
+ {
+ unsigned exponent = len - 3;
+ char *s2 = s + exponent - 1;
+ while (*s2 == '0' && exponent > 1)
+ {
+ s2--;
+ exponent++;
+ }
+ snprintf (s2 + 1, sizeof (buf) - (s2 + 1 - buf), "E%u", exponent);
+ }
+ else
+ {
+ char *dot = strchr (s, '.');
+ char *e = strchr (s, 'E');
+ if (dot && e)
+ {
+ memmove (dot, dot + 1, e - (dot + 1));
+ int exponent = atoi (e + 1);
+ int new_exponent = exponent - (e - (dot + 1));
+ if (new_exponent == 1)
+ {
+ e[-1] = '0';
+ e[0] = '\0';
+ }
+ else
+ snprintf (e - 1, sizeof (buf) - (e - 1 - buf), "E%d", new_exponent);
+ }
+ }
+ if ((s[0] == '.' && s[1] == '0') || (s[0] == '-' && s[1] == '.' && s[2] == '0'))
+ {
+ int sign = s[0] == '-';
+ char *s2 = s + sign + 1;
+ while (*s2 == '0')
+ s2++;
+ len = strlen (s2);
+ memmove (s + sign, s2, len);
+ snprintf (s + sign + len, sizeof (buf) - (s + sign + len - buf), "E-%u", (unsigned) (strlen (s + sign) - 1));
+ }
hb_vector_t<char> nibbles;
while (*s)
{
@@ -155,20 +198,22 @@ struct str_encoder_t
{
s++;
nibbles.push (0x0C); // E-
- continue;
+ } else {
+ if (c2 == '+')
+ s++;
+ nibbles.push (0x0B); // E
}
- if (c2 == '+')
+ if (*s == '0')
s++;
- nibbles.push (0x0B); // E
continue;
}
- case '.': case ',': // Comma for some European locales in case no uselocale available.
+ case '.':
nibbles.push (0x0A); // .
continue;
case '-':
- nibbles.push (0x0E); // .
+ nibbles.push (0x0E); // -
continue;
}
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-subset-cff2.cc b/src/3rdparty/harfbuzz-ng/src/hb-subset-cff2.cc
index eb5cb0c625..9c9117d52f 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-subset-cff2.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-subset-cff2.cc
@@ -666,6 +666,9 @@ OT::cff2::accelerator_subset_t::serialize (hb_serialize_context_t *c,
bool
OT::cff2::accelerator_subset_t::subset (hb_subset_context_t *c) const
{
+ if (c->plan->normalized_coords && !c->plan->all_axes_pinned)
+ fprintf (stdout, "warning: CFF partial instancing is not supported.\n");
+
cff2_subset_plan cff2_plan;
if (unlikely (!cff2_plan.create (*this, c->plan))) return false;
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-subset-input.cc b/src/3rdparty/harfbuzz-ng/src/hb-subset-input.cc
index 68a3e77788..8974755a75 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-subset-input.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-subset-input.cc
@@ -446,7 +446,7 @@ hb_subset_input_pin_all_axes_to_default (hb_subset_input_t *input,
for (unsigned i = 0; i < axis_count; i++)
{
hb_tag_t axis_tag = axis_infos[i].tag;
- float default_val = axis_infos[i].default_value;
+ double default_val = (double) axis_infos[i].default_value;
if (!input->axes_location.set (axis_tag, Triple (default_val, default_val, default_val)))
{
hb_free (axis_infos);
@@ -481,7 +481,7 @@ hb_subset_input_pin_axis_to_default (hb_subset_input_t *input,
if (!hb_ot_var_find_axis_info (face, axis_tag, &axis_info))
return false;
- float default_val = axis_info.default_value;
+ double default_val = (double) axis_info.default_value;
return input->axes_location.set (axis_tag, Triple (default_val, default_val, default_val));
}
@@ -511,11 +511,10 @@ hb_subset_input_pin_axis_location (hb_subset_input_t *input,
if (!hb_ot_var_find_axis_info (face, axis_tag, &axis_info))
return false;
- float val = hb_clamp(axis_value, axis_info.min_value, axis_info.max_value);
+ double val = hb_clamp((double) axis_value, (double) axis_info.min_value, (double) axis_info.max_value);
return input->axes_location.set (axis_tag, Triple (val, val, val));
}
-#ifdef HB_EXPERIMENTAL_API
/**
* hb_subset_input_set_axis_range: (skip)
* @input: a #hb_subset_input_t object.
@@ -538,7 +537,7 @@ hb_subset_input_pin_axis_location (hb_subset_input_t *input,
*
* Return value: `true` if success, `false` otherwise
*
- * XSince: EXPERIMENTAL
+ * Since: 8.5.0
**/
HB_EXTERN hb_bool_t
hb_subset_input_set_axis_range (hb_subset_input_t *input,
@@ -562,7 +561,7 @@ hb_subset_input_set_axis_range (hb_subset_input_t *input,
float new_min_val = hb_clamp(min, axis_info.min_value, axis_info.max_value);
float new_max_val = hb_clamp(max, axis_info.min_value, axis_info.max_value);
float new_default_val = hb_clamp(def, new_min_val, new_max_val);
- return input->axes_location.set (axis_tag, Triple (new_min_val, new_default_val, new_max_val));
+ return input->axes_location.set (axis_tag, Triple ((double) new_min_val, (double) new_default_val, (double) new_max_val));
}
/**
@@ -577,7 +576,7 @@ hb_subset_input_set_axis_range (hb_subset_input_t *input,
*
* Return value: `true` if a range has been set for this axis tag, `false` otherwise.
*
- * XSince: EXPERIMENTAL
+ * Since: 8.5.0
**/
HB_EXTERN hb_bool_t
hb_subset_input_get_axis_range (hb_subset_input_t *input,
@@ -598,7 +597,6 @@ hb_subset_input_get_axis_range (hb_subset_input_t *input,
return true;
}
#endif
-#endif
/**
* hb_subset_preprocess:
@@ -746,5 +744,4 @@ hb_subset_input_override_name_table (hb_subset_input_t *input,
input->name_table_overrides.set (hb_ot_name_record_ids_t (platform_id, encoding_id, language_id, name_id), name_bytes);
return true;
}
-
#endif
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-subset-instancer-iup.cc b/src/3rdparty/harfbuzz-ng/src/hb-subset-instancer-iup.cc
index 35a964d082..074657acaf 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-subset-instancer-iup.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-subset-instancer-iup.cc
@@ -38,7 +38,7 @@ static void _iup_contour_bound_forced_set (const hb_array_t<const contour_point_
const hb_array_t<const int> x_deltas,
const hb_array_t<const int> y_deltas,
hb_set_t& forced_set, /* OUT */
- float tolerance = 0.f)
+ double tolerance = 0.0)
{
unsigned len = contour_points.length;
unsigned next_i = 0;
@@ -47,28 +47,28 @@ static void _iup_contour_bound_forced_set (const hb_array_t<const contour_point_
unsigned last_i = (len + i -1) % len;
for (unsigned j = 0; j < 2; j++)
{
- float cj, lcj, ncj;
+ double cj, lcj, ncj;
int dj, ldj, ndj;
if (j == 0)
{
- cj = contour_points.arrayZ[i].x;
+ cj = static_cast<double> (contour_points.arrayZ[i].x);
dj = x_deltas.arrayZ[i];
- lcj = contour_points.arrayZ[last_i].x;
+ lcj = static_cast<double> (contour_points.arrayZ[last_i].x);
ldj = x_deltas.arrayZ[last_i];
- ncj = contour_points.arrayZ[next_i].x;
+ ncj = static_cast<double> (contour_points.arrayZ[next_i].x);
ndj = x_deltas.arrayZ[next_i];
}
else
{
- cj = contour_points.arrayZ[i].y;
+ cj = static_cast<double> (contour_points.arrayZ[i].y);
dj = y_deltas.arrayZ[i];
- lcj = contour_points.arrayZ[last_i].y;
+ lcj = static_cast<double> (contour_points.arrayZ[last_i].y);
ldj = y_deltas.arrayZ[last_i];
- ncj = contour_points.arrayZ[next_i].y;
+ ncj = static_cast<double> (contour_points.arrayZ[next_i].y);
ndj = y_deltas.arrayZ[next_i];
}
- float c1, c2;
+ double c1, c2;
int d1, d2;
if (lcj <= ncj)
{
@@ -180,8 +180,8 @@ static bool _iup_segment (const hb_array_t<const contour_point_t> contour_points
const contour_point_t& p1, const contour_point_t& p2,
int p1_dx, int p2_dx,
int p1_dy, int p2_dy,
- hb_vector_t<float>& interp_x_deltas, /* OUT */
- hb_vector_t<float>& interp_y_deltas /* OUT */)
+ hb_vector_t<double>& interp_x_deltas, /* OUT */
+ hb_vector_t<double>& interp_y_deltas /* OUT */)
{
unsigned n = contour_points.length;
if (unlikely (!interp_x_deltas.resize (n, false) ||
@@ -190,20 +190,20 @@ static bool _iup_segment (const hb_array_t<const contour_point_t> contour_points
for (unsigned j = 0; j < 2; j++)
{
- float x1, x2, d1, d2;
- float *out;
+ double x1, x2, d1, d2;
+ double *out;
if (j == 0)
{
- x1 = p1.x;
- x2 = p2.x;
+ x1 = static_cast<double> (p1.x);
+ x2 = static_cast<double> (p2.x);
d1 = p1_dx;
d2 = p2_dx;
out = interp_x_deltas.arrayZ;
}
else
{
- x1 = p1.y;
- x2 = p2.y;
+ x1 = static_cast<double> (p1.y);
+ x2 = static_cast<double> (p2.y);
d1 = p1_dy;
d2 = p2_dy;
out = interp_y_deltas.arrayZ;
@@ -219,7 +219,7 @@ static bool _iup_segment (const hb_array_t<const contour_point_t> contour_points
else
{
for (unsigned i = 0; i < n; i++)
- out[i] = 0.f;
+ out[i] = 0.0;
}
continue;
}
@@ -230,11 +230,11 @@ static bool _iup_segment (const hb_array_t<const contour_point_t> contour_points
hb_swap (d1, d2);
}
- float scale = (d2 - d1) / (x2 - x1);
+ double scale = (d2 - d1) / (x2 - x1);
for (unsigned i = 0; i < n; i++)
{
- float x = j == 0 ? contour_points.arrayZ[i].x : contour_points.arrayZ[i].y;
- float d;
+ double x = (j == 0 ? static_cast<double> (contour_points.arrayZ[i].x) : static_cast<double> (contour_points.arrayZ[i].y));
+ double d;
if (x <= x1)
d = d1;
else if (x >= x2)
@@ -254,9 +254,9 @@ static bool _can_iup_in_between (const hb_array_t<const contour_point_t> contour
const contour_point_t& p1, const contour_point_t& p2,
int p1_dx, int p2_dx,
int p1_dy, int p2_dy,
- float tolerance)
+ double tolerance)
{
- hb_vector_t<float> interp_x_deltas, interp_y_deltas;
+ hb_vector_t<double> interp_x_deltas, interp_y_deltas;
if (!_iup_segment (contour_points, x_deltas, y_deltas,
p1, p2, p1_dx, p2_dx, p1_dy, p2_dy,
interp_x_deltas, interp_y_deltas))
@@ -266,10 +266,10 @@ static bool _can_iup_in_between (const hb_array_t<const contour_point_t> contour
for (unsigned i = 0; i < num; i++)
{
- float dx = x_deltas.arrayZ[i] - interp_x_deltas.arrayZ[i];
- float dy = y_deltas.arrayZ[i] - interp_y_deltas.arrayZ[i];
+ double dx = static_cast<double> (x_deltas.arrayZ[i]) - interp_x_deltas.arrayZ[i];
+ double dy = static_cast<double> (y_deltas.arrayZ[i]) - interp_y_deltas.arrayZ[i];
- if (sqrtf ((float)dx * dx + (float)dy * dy) > tolerance)
+ if (sqrt (dx * dx + dy * dy) > tolerance)
return false;
}
return true;
@@ -279,7 +279,7 @@ static bool _iup_contour_optimize_dp (const contour_point_vector_t& contour_poin
const hb_vector_t<int>& x_deltas,
const hb_vector_t<int>& y_deltas,
const hb_set_t& forced_set,
- float tolerance,
+ double tolerance,
unsigned lookback,
hb_vector_t<unsigned>& costs, /* OUT */
hb_vector_t<int>& chain /* OUT */)
@@ -333,7 +333,7 @@ static bool _iup_contour_optimize (const hb_array_t<const contour_point_t> conto
const hb_array_t<const int> x_deltas,
const hb_array_t<const int> y_deltas,
hb_array_t<bool> opt_indices, /* OUT */
- float tolerance = 0.f)
+ double tolerance = 0.0)
{
unsigned n = contour_points.length;
if (opt_indices.length != n ||
@@ -346,7 +346,7 @@ static bool _iup_contour_optimize (const hb_array_t<const contour_point_t> conto
{
int dx = x_deltas.arrayZ[i];
int dy = y_deltas.arrayZ[i];
- if (sqrtf ((float)dx * dx + (float)dy * dy) > tolerance)
+ if (sqrt ((double) dx * dx + (double) dy * dy) > tolerance)
{
all_within_tolerance = false;
break;
@@ -443,11 +443,11 @@ static bool _iup_contour_optimize (const hb_array_t<const contour_point_t> conto
unsigned contour_point_size = hb_static_size (contour_point_t);
for (unsigned i = 0; i < n; i++)
{
- hb_memcpy ((void *) repeat_x_deltas.arrayZ, (const void *) x_deltas.arrayZ, n * sizeof (float));
- hb_memcpy ((void *) (repeat_x_deltas.arrayZ + n), (const void *) x_deltas.arrayZ, n * sizeof (float));
+ hb_memcpy ((void *) repeat_x_deltas.arrayZ, (const void *) x_deltas.arrayZ, n * sizeof (repeat_x_deltas[0]));
+ hb_memcpy ((void *) (repeat_x_deltas.arrayZ + n), (const void *) x_deltas.arrayZ, n * sizeof (repeat_x_deltas[0]));
- hb_memcpy ((void *) repeat_y_deltas.arrayZ, (const void *) y_deltas.arrayZ, n * sizeof (float));
- hb_memcpy ((void *) (repeat_y_deltas.arrayZ + n), (const void *) y_deltas.arrayZ, n * sizeof (float));
+ hb_memcpy ((void *) repeat_y_deltas.arrayZ, (const void *) y_deltas.arrayZ, n * sizeof (repeat_x_deltas[0]));
+ hb_memcpy ((void *) (repeat_y_deltas.arrayZ + n), (const void *) y_deltas.arrayZ, n * sizeof (repeat_x_deltas[0]));
hb_memcpy ((void *) repeat_points.arrayZ, (const void *) contour_points.arrayZ, n * contour_point_size);
hb_memcpy ((void *) (repeat_points.arrayZ + n), (const void *) contour_points.arrayZ, n * contour_point_size);
@@ -496,7 +496,7 @@ bool iup_delta_optimize (const contour_point_vector_t& contour_points,
const hb_vector_t<int>& x_deltas,
const hb_vector_t<int>& y_deltas,
hb_vector_t<bool>& opt_indices, /* OUT */
- float tolerance)
+ double tolerance)
{
if (!opt_indices.resize (contour_points.length))
return false;
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-subset-instancer-iup.hh b/src/3rdparty/harfbuzz-ng/src/hb-subset-instancer-iup.hh
index 7eac5935a4..01987bd258 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-subset-instancer-iup.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-subset-instancer-iup.hh
@@ -32,6 +32,6 @@ HB_INTERNAL bool iup_delta_optimize (const contour_point_vector_t& contour_point
const hb_vector_t<int>& x_deltas,
const hb_vector_t<int>& y_deltas,
hb_vector_t<bool>& opt_indices, /* OUT */
- float tolerance = 0.f);
+ double tolerance = 0.0);
#endif /* HB_SUBSET_INSTANCER_IUP_HH */
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-subset-instancer-solver.cc b/src/3rdparty/harfbuzz-ng/src/hb-subset-instancer-solver.cc
index 70783c0a0d..ca903e2707 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-subset-instancer-solver.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-subset-instancer-solver.cc
@@ -32,17 +32,17 @@
* This should be safe.
*/
-constexpr static float EPSILON = 1.f / (1 << 14);
-constexpr static float MAX_F2DOT14 = float (0x7FFF) / (1 << 14);
+constexpr static double EPSILON = 1.0 / (1 << 14);
+constexpr static double MAX_F2DOT14 = double (0x7FFF) / (1 << 14);
static inline Triple _reverse_negate(const Triple &v)
{ return {-v.maximum, -v.middle, -v.minimum}; }
-static inline float supportScalar (float coord, const Triple &tent)
+static inline double supportScalar (double coord, const Triple &tent)
{
/* Copied from VarRegionAxis::evaluate() */
- float start = tent.minimum, peak = tent.middle, end = tent.maximum;
+ double start = tent.minimum, peak = tent.middle, end = tent.maximum;
if (unlikely (start > peak || peak > end))
return 1.;
@@ -62,20 +62,20 @@ static inline float supportScalar (float coord, const Triple &tent)
return (end - coord) / (end - peak);
}
-static inline result_t
+static inline rebase_tent_result_t
_solve (Triple tent, Triple axisLimit, bool negative = false)
{
- float axisMin = axisLimit.minimum;
- float axisDef = axisLimit.middle;
- float axisMax = axisLimit.maximum;
- float lower = tent.minimum;
- float peak = tent.middle;
- float upper = tent.maximum;
+ double axisMin = axisLimit.minimum;
+ double axisDef = axisLimit.middle;
+ double axisMax = axisLimit.maximum;
+ double lower = tent.minimum;
+ double peak = tent.middle;
+ double upper = tent.maximum;
// Mirror the problem such that axisDef <= peak
if (axisDef > peak)
{
- result_t vec = _solve (_reverse_negate (tent),
+ rebase_tent_result_t vec = _solve (_reverse_negate (tent),
_reverse_negate (axisLimit),
!negative);
@@ -98,7 +98,7 @@ _solve (Triple tent, Triple axisLimit, bool negative = false)
* axisMin axisDef axisMax lower upper
*/
if (axisMax <= lower && axisMax < peak)
- return result_t{}; // No overlap
+ return rebase_tent_result_t{}; // No overlap
/* case 2: Only the peak and outermost bound fall outside the new limit;
* we keep the deltaset, update peak and outermost bound and scale deltas
@@ -130,10 +130,10 @@ _solve (Triple tent, Triple axisLimit, bool negative = false)
*/
if (axisMax < peak)
{
- float mult = supportScalar (axisMax, tent);
+ double mult = supportScalar (axisMax, tent);
tent = Triple{lower, axisMax, axisMax};
- result_t vec = _solve (tent, axisLimit);
+ rebase_tent_result_t vec = _solve (tent, axisLimit);
for (auto &p : vec)
p = hb_pair (p.first * mult, p.second);
@@ -143,13 +143,13 @@ _solve (Triple tent, Triple axisLimit, bool negative = false)
// lower <= axisDef <= peak <= axisMax
- float gain = supportScalar (axisDef, tent);
- result_t out {hb_pair (gain, Triple{})};
+ double gain = supportScalar (axisDef, tent);
+ rebase_tent_result_t out {hb_pair (gain, Triple{})};
// First, the positive side
// outGain is the scalar of axisMax at the tent.
- float outGain = supportScalar (axisMax, tent);
+ double outGain = supportScalar (axisMax, tent);
/* Case 3a: Gain is more than outGain. The tent down-slope crosses
* the axis into negative. We have to split it into multiples.
@@ -173,10 +173,10 @@ _solve (Triple tent, Triple axisLimit, bool negative = false)
// Note that this is the branch taken if both gain and outGain are 0.
// Crossing point on the axis.
- float crossing = peak + (1 - gain) * (upper - peak);
+ double crossing = peak + (1 - gain) * (upper - peak);
Triple loc{hb_max (lower, axisDef), peak, crossing};
- float scalar = 1.f;
+ double scalar = 1.0;
// The part before the crossing point.
out.push (hb_pair (scalar - gain, loc));
@@ -191,7 +191,7 @@ _solve (Triple tent, Triple axisLimit, bool negative = false)
if (upper >= axisMax)
{
Triple loc {crossing, axisMax, axisMax};
- float scalar = outGain;
+ double scalar = outGain;
out.push (hb_pair (scalar - gain, loc));
}
@@ -221,11 +221,11 @@ _solve (Triple tent, Triple axisLimit, bool negative = false)
// Downslope.
Triple loc1 {crossing, upper, axisMax};
- float scalar1 = 0.f;
+ double scalar1 = 0.0;
// Eternity justify.
Triple loc2 {upper, axisMax, axisMax};
- float scalar2 = 0.f;
+ double scalar2 = 0.0;
out.push (hb_pair (scalar1 - gain, loc1));
out.push (hb_pair (scalar2 - gain, loc2));
@@ -254,11 +254,11 @@ _solve (Triple tent, Triple axisLimit, bool negative = false)
* | | newUpper
* axisDef axisMax
*/
- float newUpper = peak + (1 - gain) * (upper - peak);
+ double newUpper = peak + (1 - gain) * (upper - peak);
assert (axisMax <= newUpper); // Because outGain > gain
/* Disabled because ots doesn't like us:
* https://github.com/fonttools/fonttools/issues/3350 */
-
+
if (false && (newUpper <= axisDef + (axisMax - axisDef) * 2))
{
upper = newUpper;
@@ -270,7 +270,7 @@ _solve (Triple tent, Triple axisLimit, bool negative = false)
}
Triple loc {hb_max (axisDef, lower), peak, upper};
- float scalar = 1.f;
+ double scalar = 1.0;
out.push (hb_pair (scalar - gain, loc));
}
@@ -294,10 +294,10 @@ _solve (Triple tent, Triple axisLimit, bool negative = false)
else
{
Triple loc1 {hb_max (axisDef, lower), peak, axisMax};
- float scalar1 = 1.f;
+ double scalar1 = 1.0;
Triple loc2 {peak, axisMax, axisMax};
- float scalar2 = outGain;
+ double scalar2 = outGain;
out.push (hb_pair (scalar1 - gain, loc1));
// Don't add a dirac delta!
@@ -325,7 +325,7 @@ _solve (Triple tent, Triple axisLimit, bool negative = false)
if (lower <= axisMin)
{
Triple loc {axisMin, axisMin, axisDef};
- float scalar = supportScalar (axisMin, tent);
+ double scalar = supportScalar (axisMin, tent);
out.push (hb_pair (scalar - gain, loc));
}
@@ -353,11 +353,11 @@ _solve (Triple tent, Triple axisLimit, bool negative = false)
// Downslope.
Triple loc1 {axisMin, lower, axisDef};
- float scalar1 = 0.f;
+ double scalar1 = 0.0;
// Eternity justify.
Triple loc2 {axisMin, axisMin, lower};
- float scalar2 = 0.f;
+ double scalar2 = 0.0;
out.push (hb_pair (scalar1 - gain, loc1));
out.push (hb_pair (scalar2 - gain, loc2));
@@ -369,19 +369,19 @@ _solve (Triple tent, Triple axisLimit, bool negative = false)
static inline TripleDistances _reverse_triple_distances (const TripleDistances &v)
{ return TripleDistances (v.positive, v.negative); }
-float renormalizeValue (float v, const Triple &triple,
- const TripleDistances &triple_distances, bool extrapolate)
+double renormalizeValue (double v, const Triple &triple,
+ const TripleDistances &triple_distances, bool extrapolate)
{
- float lower = triple.minimum, def = triple.middle, upper = triple.maximum;
+ double lower = triple.minimum, def = triple.middle, upper = triple.maximum;
assert (lower <= def && def <= upper);
if (!extrapolate)
v = hb_max (hb_min (v, upper), lower);
if (v == def)
- return 0.f;
+ return 0.0;
- if (def < 0.f)
+ if (def < 0.0)
return -renormalizeValue (-v, _reverse_negate (triple),
_reverse_triple_distances (triple_distances), extrapolate);
@@ -390,14 +390,14 @@ float renormalizeValue (float v, const Triple &triple,
return (v - def) / (upper - def);
/* v < def */
- if (lower >= 0.f)
+ if (lower >= 0.0)
return (v - def) / (def - lower);
/* lower < 0 and v < default */
- float total_distance = triple_distances.negative * (-lower) + triple_distances.positive * def;
+ double total_distance = triple_distances.negative * (-lower) + triple_distances.positive * def;
- float v_distance;
- if (v >= 0.f)
+ double v_distance;
+ if (v >= 0.0)
v_distance = (def - v) * triple_distances.positive;
else
v_distance = (-v) * triple_distances.negative + triple_distances.positive * def;
@@ -405,18 +405,18 @@ float renormalizeValue (float v, const Triple &triple,
return (-v_distance) /total_distance;
}
-result_t
+rebase_tent_result_t
rebase_tent (Triple tent, Triple axisLimit, TripleDistances axis_triple_distances)
{
- assert (-1.f <= axisLimit.minimum && axisLimit.minimum <= axisLimit.middle && axisLimit.middle <= axisLimit.maximum && axisLimit.maximum <= +1.f);
- assert (-2.f <= tent.minimum && tent.minimum <= tent.middle && tent.middle <= tent.maximum && tent.maximum <= +2.f);
- assert (tent.middle != 0.f);
+ assert (-1.0 <= axisLimit.minimum && axisLimit.minimum <= axisLimit.middle && axisLimit.middle <= axisLimit.maximum && axisLimit.maximum <= +1.0);
+ assert (-2.0 <= tent.minimum && tent.minimum <= tent.middle && tent.middle <= tent.maximum && tent.maximum <= +2.0);
+ assert (tent.middle != 0.0);
- result_t sols = _solve (tent, axisLimit);
+ rebase_tent_result_t sols = _solve (tent, axisLimit);
- auto n = [&axisLimit, &axis_triple_distances] (float v) { return renormalizeValue (v, axisLimit, axis_triple_distances); };
+ auto n = [&axisLimit, &axis_triple_distances] (double v) { return renormalizeValue (v, axisLimit, axis_triple_distances); };
- result_t out;
+ rebase_tent_result_t out;
for (auto &p : sols)
{
if (!p.first) continue;
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-subset-instancer-solver.hh b/src/3rdparty/harfbuzz-ng/src/hb-subset-instancer-solver.hh
index 563fccbb59..9aac9fcc7e 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-subset-instancer-solver.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-subset-instancer-solver.hh
@@ -30,24 +30,24 @@
/* pre-normalized distances */
struct TripleDistances
{
- TripleDistances (): negative (1.f), positive (1.f) {}
- TripleDistances (float neg_, float pos_): negative (neg_), positive (pos_) {}
- TripleDistances (float min, float default_, float max)
+ TripleDistances (): negative (1.0), positive (1.0) {}
+ TripleDistances (double neg_, double pos_): negative (neg_), positive (pos_) {}
+ TripleDistances (double min, double default_, double max)
{
negative = default_ - min;
positive = max - default_;
}
- float negative;
- float positive;
+ double negative;
+ double positive;
};
struct Triple {
Triple () :
- minimum (0.f), middle (0.f), maximum (0.f) {}
+ minimum (0.0), middle (0.0), maximum (0.0) {}
- Triple (float minimum_, float middle_, float maximum_) :
+ Triple (double minimum_, double middle_, double maximum_) :
minimum (minimum_), middle (middle_), maximum (maximum_) {}
bool operator == (const Triple &o) const
@@ -63,7 +63,7 @@ struct Triple {
bool is_point () const
{ return minimum == middle && middle == maximum; }
- bool contains (float point) const
+ bool contains (double point) const
{ return minimum <= point && point <= maximum; }
/* from hb_array_t hash ()*/
@@ -82,18 +82,18 @@ struct Triple {
}
- float minimum;
- float middle;
- float maximum;
+ double minimum;
+ double middle;
+ double maximum;
};
-using result_item_t = hb_pair_t<float, Triple>;
-using result_t = hb_vector_t<result_item_t>;
+using rebase_tent_result_item_t = hb_pair_t<double, Triple>;
+using rebase_tent_result_t = hb_vector_t<rebase_tent_result_item_t>;
/* renormalize a normalized value v to the range of an axis,
* considering the prenormalized distances as well as the new axis limits.
* Ported from fonttools */
-HB_INTERNAL float renormalizeValue (float v, const Triple &triple,
+HB_INTERNAL double renormalizeValue (double v, const Triple &triple,
const TripleDistances &triple_distances,
bool extrapolate = true);
/* Given a tuple (lower,peak,upper) "tent" and new axis limits
@@ -107,6 +107,8 @@ HB_INTERNAL float renormalizeValue (float v, const Triple &triple,
* If tent value is Triple{}, that is a special deltaset that should
* be always-enabled (called "gain").
*/
-HB_INTERNAL result_t rebase_tent (Triple tent, Triple axisLimit, TripleDistances axis_triple_distances);
+HB_INTERNAL rebase_tent_result_t rebase_tent (Triple tent,
+ Triple axisLimit,
+ TripleDistances axis_triple_distances);
#endif /* HB_SUBSET_INSTANCER_SOLVER_HH */
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-subset-plan-member-list.hh b/src/3rdparty/harfbuzz-ng/src/hb-subset-plan-member-list.hh
index 74416b92f9..ade8278c40 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-subset-plan-member-list.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-subset-plan-member-list.hh
@@ -102,6 +102,12 @@ HB_SUBSET_PLAN_MEMBER (hb_hashmap_t E(<unsigned, hb_pair_t E(<const void*, const
//active layers/palettes we'd like to retain
HB_SUBSET_PLAN_MEMBER (hb_map_t, colrv1_layers)
HB_SUBSET_PLAN_MEMBER (hb_map_t, colr_palettes)
+//colrv1 varstore retained varidx mapping
+HB_SUBSET_PLAN_MEMBER (hb_vector_t<hb_inc_bimap_t>, colrv1_varstore_inner_maps)
+//colrv1 retained varidx -> (new varidx, delta) mapping
+HB_SUBSET_PLAN_MEMBER (mutable hb_hashmap_t E(<unsigned, hb_pair_t E(<unsigned, int>)>), colrv1_variation_idx_delta_map)
+//colrv1 retained new delta set index -> new varidx mapping
+HB_SUBSET_PLAN_MEMBER (hb_map_t, colrv1_new_deltaset_idx_varidx_map)
//Old layout item variation index -> (New varidx, delta) mapping
HB_SUBSET_PLAN_MEMBER (mutable hb_hashmap_t E(<unsigned, hb_pair_t E(<unsigned, int>)>), layout_variation_idx_delta_map)
@@ -144,7 +150,7 @@ HB_SUBSET_PLAN_MEMBER (mutable hb_hashmap_t E(<hb_codepoint_t, contour_point_vec
HB_SUBSET_PLAN_MEMBER (hb_set_t, composite_new_gids)
//Old BASE item variation index -> (New varidx, 0) mapping
-HB_SUBSET_PLAN_MEMBER (hb_hashmap_t E(<unsigned, hb_pair_t E(<unsigned, int>)>), base_variation_idx_map)
+HB_SUBSET_PLAN_MEMBER (mutable hb_hashmap_t E(<unsigned, hb_pair_t E(<unsigned, int>)>), base_variation_idx_map)
//BASE table varstore retained varidx mapping
HB_SUBSET_PLAN_MEMBER (hb_vector_t<hb_inc_bimap_t>, base_varstore_inner_maps)
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-subset-plan.cc b/src/3rdparty/harfbuzz-ng/src/hb-subset-plan.cc
index 068fddaedd..d657790d54 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-subset-plan.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-subset-plan.cc
@@ -399,12 +399,55 @@ _get_hb_font_with_variations (const hb_subset_plan_t *plan)
}
static inline void
+_remap_variation_indices (const OT::ItemVariationStore &var_store,
+ const hb_set_t &variation_indices,
+ const hb_vector_t<int>& normalized_coords,
+ bool calculate_delta, /* not pinned at default */
+ bool no_variations, /* all axes pinned */
+ hb_hashmap_t<unsigned, hb_pair_t<unsigned, int>> &variation_idx_delta_map /* OUT */)
+{
+ if (&var_store == &Null (OT::ItemVariationStore)) return;
+ unsigned subtable_count = var_store.get_sub_table_count ();
+ float *store_cache = var_store.create_cache ();
+
+ unsigned new_major = 0, new_minor = 0;
+ unsigned last_major = (variation_indices.get_min ()) >> 16;
+ for (unsigned idx : variation_indices)
+ {
+ int delta = 0;
+ if (calculate_delta)
+ delta = roundf (var_store.get_delta (idx, normalized_coords.arrayZ,
+ normalized_coords.length, store_cache));
+
+ if (no_variations)
+ {
+ variation_idx_delta_map.set (idx, hb_pair_t<unsigned, int> (HB_OT_LAYOUT_NO_VARIATIONS_INDEX, delta));
+ continue;
+ }
+
+ uint16_t major = idx >> 16;
+ if (major >= subtable_count) break;
+ if (major != last_major)
+ {
+ new_minor = 0;
+ ++new_major;
+ }
+
+ unsigned new_idx = (new_major << 16) + new_minor;
+ variation_idx_delta_map.set (idx, hb_pair_t<unsigned, int> (new_idx, delta));
+ ++new_minor;
+ last_major = major;
+ }
+ var_store.destroy_cache (store_cache);
+}
+
+static inline void
_collect_layout_variation_indices (hb_subset_plan_t* plan)
{
hb_blob_ptr_t<OT::GDEF> gdef = plan->source_table<OT::GDEF> ();
hb_blob_ptr_t<GPOS> gpos = plan->source_table<GPOS> ();
- if (!gdef->has_data ())
+ if (!gdef->has_data () || !gdef->has_var_store ())
{
gdef.destroy ();
gpos.destroy ();
@@ -420,13 +463,13 @@ _collect_layout_variation_indices (hb_subset_plan_t* plan)
if (hb_ot_layout_has_positioning (plan->source))
gpos->collect_variation_indices (&c);
- gdef->remap_layout_variation_indices (&varidx_set,
- plan->normalized_coords,
- !plan->pinned_at_default,
- plan->all_axes_pinned,
- &plan->layout_variation_idx_delta_map);
+ _remap_variation_indices (gdef->get_var_store (),
+ varidx_set, plan->normalized_coords,
+ !plan->pinned_at_default,
+ plan->all_axes_pinned,
+ plan->layout_variation_idx_delta_map);
- unsigned subtable_count = gdef->has_var_store () ? gdef->get_var_store ().get_sub_table_count () : 0;
+ unsigned subtable_count = gdef->get_var_store ().get_sub_table_count ();
_generate_varstore_inner_maps (varidx_set, subtable_count, plan->gdef_varstore_inner_maps);
gdef.destroy ();
@@ -434,31 +477,6 @@ _collect_layout_variation_indices (hb_subset_plan_t* plan)
}
#ifndef HB_NO_BASE
-/* used by BASE table only, delta is always set to 0 in the output map */
-static inline void
-_remap_variation_indices (const hb_set_t& indices,
- unsigned subtable_count,
- hb_hashmap_t<unsigned, hb_pair_t<unsigned, int>>& variation_idx_delta_map /* OUT */)
-{
- unsigned new_major = 0, new_minor = 0;
- unsigned last_major = (indices.get_min ()) >> 16;
- for (unsigned idx : indices)
- {
- uint16_t major = idx >> 16;
- if (major >= subtable_count) break;
- if (major != last_major)
- {
- new_minor = 0;
- ++new_major;
- }
-
- unsigned new_idx = (new_major << 16) + new_minor;
- variation_idx_delta_map.set (idx, hb_pair_t<unsigned, int> (new_idx, 0));
- ++new_minor;
- last_major = major;
- }
-}
-
static inline void
_collect_base_variation_indices (hb_subset_plan_t* plan)
{
@@ -471,12 +489,20 @@ _collect_base_variation_indices (hb_subset_plan_t* plan)
hb_set_t varidx_set;
base->collect_variation_indices (plan, varidx_set);
- unsigned subtable_count = base->get_var_store ().get_sub_table_count ();
- base.destroy ();
-
- _remap_variation_indices (varidx_set, subtable_count, plan->base_variation_idx_map);
+ const OT::ItemVariationStore &var_store = base->get_var_store ();
+ unsigned subtable_count = var_store.get_sub_table_count ();
+
+
+ _remap_variation_indices (var_store, varidx_set,
+ plan->normalized_coords,
+ !plan->pinned_at_default,
+ plan->all_axes_pinned,
+ plan->base_variation_idx_map);
_generate_varstore_inner_maps (varidx_set, subtable_count, plan->base_varstore_inner_maps);
+
+ base.destroy ();
}
+
#endif
#endif
@@ -489,12 +515,43 @@ _cmap_closure (hb_face_t *face,
cmap.table->closure_glyphs (unicodes, glyphset);
}
-static void _colr_closure (hb_face_t *face,
- hb_map_t *layers_map,
- hb_map_t *palettes_map,
+static void
+_remap_colrv1_delta_set_index_indices (const OT::DeltaSetIndexMap &index_map,
+ const hb_set_t &delta_set_idxes,
+ hb_hashmap_t<unsigned, hb_pair_t<unsigned, int>> &variation_idx_delta_map, /* IN/OUT */
+ hb_map_t &new_deltaset_idx_varidx_map /* OUT */)
+{
+ if (!index_map.get_map_count ())
+ return;
+
+ hb_hashmap_t<unsigned, hb_pair_t<unsigned, int>> delta_set_idx_delta_map;
+ unsigned new_delta_set_idx = 0;
+ for (unsigned delta_set_idx : delta_set_idxes)
+ {
+ unsigned var_idx = index_map.map (delta_set_idx);
+ unsigned new_varidx = HB_OT_LAYOUT_NO_VARIATIONS_INDEX;
+ int delta = 0;
+
+ if (var_idx != HB_OT_LAYOUT_NO_VARIATIONS_INDEX)
+ {
+ hb_pair_t<unsigned, int> *new_varidx_delta;
+ if (!variation_idx_delta_map.has (var_idx, &new_varidx_delta)) continue;
+
+ new_varidx = hb_first (*new_varidx_delta);
+ delta = hb_second (*new_varidx_delta);
+ }
+
+ new_deltaset_idx_varidx_map.set (new_delta_set_idx, new_varidx);
+ delta_set_idx_delta_map.set (delta_set_idx, hb_pair_t<unsigned, int> (new_delta_set_idx, delta));
+ new_delta_set_idx++;
+ }
+ variation_idx_delta_map = std::move (delta_set_idx_delta_map);
+}
+
+static void _colr_closure (hb_subset_plan_t* plan,
hb_set_t *glyphs_colred)
{
- OT::COLR::accelerator_t colr (face);
+ OT::COLR::accelerator_t colr (plan->source);
if (!colr.is_valid ()) return;
hb_set_t palette_indices, layer_indices;
@@ -506,11 +563,43 @@ static void _colr_closure (hb_face_t *face,
glyphs_colred->union_ (glyphset_colrv0);
//closure for COLRv1
- colr.closure_forV1 (glyphs_colred, &layer_indices, &palette_indices);
+ hb_set_t variation_indices, delta_set_indices;
+ colr.closure_forV1 (glyphs_colred, &layer_indices, &palette_indices, &variation_indices, &delta_set_indices);
colr.closure_V0palette_indices (glyphs_colred, &palette_indices);
- _remap_indexes (&layer_indices, layers_map);
- _remap_palette_indexes (&palette_indices, palettes_map);
+ _remap_indexes (&layer_indices, &plan->colrv1_layers);
+ _remap_palette_indexes (&palette_indices, &plan->colr_palettes);
+
+ if (!colr.has_var_store () || !variation_indices) return;
+
+ const OT::ItemVariationStore &var_store = colr.get_var_store ();
+ // generated inner_maps is used by ItemVariationStore serialize(), which is subset only
+ unsigned subtable_count = var_store.get_sub_table_count ();
+ _generate_varstore_inner_maps (variation_indices, subtable_count, plan->colrv1_varstore_inner_maps);
+
+ /* colr variation indices mapping during planning phase:
+ * generate colrv1_variation_idx_delta_map. When delta set index map is not
+ * included, it's a mapping from varIdx-> (new varIdx,delta). Otherwise, it's
+ * a mapping from old delta set idx-> (new delta set idx, delta). Mapping
+ * delta set indices is the same as gid mapping.
+ * Besides, we need to generate a delta set idx-> new var_idx map for updating
+ * delta set index map if exists. This map will be updated again after
+ * instancing. */
+ if (!plan->all_axes_pinned)
+ {
+ _remap_variation_indices (var_store,
+ variation_indices,
+ plan->normalized_coords,
+ false, /* no need to calculate delta for COLR during planning */
+ plan->all_axes_pinned,
+ plan->colrv1_variation_idx_delta_map);
+
+ if (colr.has_delta_set_index_map ())
+ _remap_colrv1_delta_set_index_indices (colr.get_delta_set_index_map (),
+ delta_set_indices,
+ plan->colrv1_variation_idx_delta_map,
+ plan->colrv1_new_deltaset_idx_varidx_map);
+ }
}
static inline void
@@ -821,7 +910,7 @@ _populate_gids_to_retain (hb_subset_plan_t* plan,
hb_set_t cur_glyphset = plan->_glyphset_mathed;
if (!drop_tables->has (HB_OT_TAG_COLR))
{
- _colr_closure (plan->source, &plan->colrv1_layers, &plan->colr_palettes, &cur_glyphset);
+ _colr_closure (plan, &cur_glyphset);
_remove_invalid_gids (&cur_glyphset, plan->source->get_num_glyphs ());
}
@@ -1016,9 +1105,9 @@ _normalize_axes_location (hb_face_t *face, hb_subset_plan_t *plan)
normalized_default = seg_maps->map (normalized_default);
normalized_max = seg_maps->map (normalized_max);
}
- plan->axes_location.set (axis_tag, Triple (static_cast<float> (normalized_min / 16384.f),
- static_cast<float> (normalized_default / 16384.f),
- static_cast<float> (normalized_max / 16384.f)));
+ plan->axes_location.set (axis_tag, Triple (static_cast<double> (normalized_min / 16384.0),
+ static_cast<double> (normalized_default / 16384.0),
+ static_cast<double> (normalized_max / 16384.0)));
if (normalized_default != 0)
plan->pinned_at_default = false;
@@ -1145,11 +1234,9 @@ _get_instance_glyphs_contour_points (hb_subset_plan_t *plan)
if (unlikely (!plan->new_gid_contour_points_map.set (new_gid, all_points)))
return false;
-#ifdef HB_EXPERIMENTAL_API
/* composite new gids are only needed by iup delta optimization */
if ((plan->flags & HB_SUBSET_FLAGS_OPTIMIZE_IUP_DELTAS) && glyph.is_composite ())
plan->composite_new_gids.add (new_gid);
-#endif
}
return true;
}
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-subset.h b/src/3rdparty/harfbuzz-ng/src/hb-subset.h
index 73dcae4660..365c21a630 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-subset.h
+++ b/src/3rdparty/harfbuzz-ng/src/hb-subset.h
@@ -73,11 +73,11 @@ typedef struct hb_subset_plan_t hb_subset_plan_t;
* OS/2 will not be recalculated.
* @HB_SUBSET_FLAGS_NO_LAYOUT_CLOSURE: If set don't perform glyph closure on layout
* substitution rules (GSUB). Since: 7.2.0.
+ * @HB_SUBSET_FLAGS_OPTIMIZE_IUP_DELTAS: If set perform IUP delta optimization on the
+ * remaining gvar table's deltas. Since: 8.5.0
* @HB_SUBSET_FLAGS_IFTB_REQUIREMENTS: If set enforce requirements on the output subset
* to allow it to be used with incremental font transfer IFTB patches. Primarily,
* this forces all outline data to use long (32 bit) offsets. Since: EXPERIMENTAL
- * @HB_SUBSET_FLAGS_OPTIMIZE_IUP_DELTAS: If set perform IUP delta optimization on the
- * remaining gvar table's deltas. Since: EXPERIMENTAL
*
* List of boolean properties that can be configured on the subset input.
*
@@ -95,9 +95,9 @@ typedef enum { /*< flags >*/
HB_SUBSET_FLAGS_GLYPH_NAMES = 0x00000080u,
HB_SUBSET_FLAGS_NO_PRUNE_UNICODE_RANGES = 0x00000100u,
HB_SUBSET_FLAGS_NO_LAYOUT_CLOSURE = 0x00000200u,
+ HB_SUBSET_FLAGS_OPTIMIZE_IUP_DELTAS = 0x00000400u,
#ifdef HB_EXPERIMENTAL_API
- HB_SUBSET_FLAGS_IFTB_REQUIREMENTS = 0x00000400u,
- HB_SUBSET_FLAGS_OPTIMIZE_IUP_DELTAS = 0x00000800u,
+ HB_SUBSET_FLAGS_IFTB_REQUIREMENTS = 0x00000800u,
#endif
} hb_subset_flags_t;
@@ -188,7 +188,6 @@ hb_subset_input_pin_axis_location (hb_subset_input_t *input,
hb_tag_t axis_tag,
float axis_value);
-#ifdef HB_EXPERIMENTAL_API
HB_EXTERN hb_bool_t
hb_subset_input_get_axis_range (hb_subset_input_t *input,
hb_tag_t axis_tag,
@@ -204,6 +203,7 @@ hb_subset_input_set_axis_range (hb_subset_input_t *input,
float axis_max_value,
float axis_def_value);
+#ifdef HB_EXPERIMENTAL_API
HB_EXTERN hb_bool_t
hb_subset_input_override_name_table (hb_subset_input_t *input,
hb_ot_name_id_t name_id,
@@ -212,7 +212,6 @@ hb_subset_input_override_name_table (hb_subset_input_t *input,
unsigned language_id,
const char *name_str,
int str_len);
-
#endif
HB_EXTERN hb_face_t *
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-version.h b/src/3rdparty/harfbuzz-ng/src/hb-version.h
index 68681874ca..abffbdae9c 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-version.h
+++ b/src/3rdparty/harfbuzz-ng/src/hb-version.h
@@ -47,7 +47,7 @@ HB_BEGIN_DECLS
*
* The minor component of the library version available at compile-time.
*/
-#define HB_VERSION_MINOR 4
+#define HB_VERSION_MINOR 5
/**
* HB_VERSION_MICRO:
*
@@ -60,7 +60,7 @@ HB_BEGIN_DECLS
*
* A string literal containing the library version available at compile-time.
*/
-#define HB_VERSION_STRING "8.4.0"
+#define HB_VERSION_STRING "8.5.0"
/**
* HB_VERSION_ATLEAST:
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-wasm-api.h b/src/3rdparty/harfbuzz-ng/src/hb-wasm-api.h
index f9bd98e5ea..bb977eeb13 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-wasm-api.h
+++ b/src/3rdparty/harfbuzz-ng/src/hb-wasm-api.h
@@ -27,6 +27,9 @@
/*
#include "hb.h"
+
+HB_BEGIN_DECLS
+HB_END_DECLS
*/
#include <stdint.h>
diff --git a/src/3rdparty/libjpeg/LICENSE b/src/3rdparty/libjpeg/LICENSE
index bf8a7fda7f..2204864fa1 100644
--- a/src/3rdparty/libjpeg/LICENSE
+++ b/src/3rdparty/libjpeg/LICENSE
@@ -1,30 +1,33 @@
libjpeg-turbo Licenses
======================
-libjpeg-turbo is covered by three compatible BSD-style open source licenses:
+libjpeg-turbo is covered by two compatible BSD-style open source licenses:
- The IJG (Independent JPEG Group) License, which is listed in
[README.ijg](README.ijg)
- This license applies to the libjpeg API library and associated programs
- (any code inherited from libjpeg, and any modifications to that code.)
+ This license applies to the libjpeg API library and associated programs,
+ including any code inherited from libjpeg and any modifications to that
+ code. Note that the libjpeg-turbo SIMD source code bears the
+ [zlib License](https://opensource.org/licenses/Zlib), but in the context of
+ the overall libjpeg API library, the terms of the zlib License are subsumed
+ by the terms of the IJG License.
- The Modified (3-clause) BSD License, which is listed below
- This license covers the TurboJPEG API library and associated programs, as
- well as the build system.
-
-- The [zlib License](https://opensource.org/licenses/Zlib)
-
- This license is a subset of the other two, and it covers the libjpeg-turbo
- SIMD extensions.
+ This license applies to the TurboJPEG API library and associated programs, as
+ well as the build system. Note that the TurboJPEG API library wraps the
+ libjpeg API library, so in the context of the overall TurboJPEG API library,
+ both the terms of the IJG License and the terms of the Modified (3-clause)
+ BSD License apply.
Complying with the libjpeg-turbo Licenses
=========================================
This section provides a roll-up of the libjpeg-turbo licensing terms, to the
-best of our understanding.
+best of our understanding. This is not a license in and of itself. It is
+intended solely for clarification.
1. If you are distributing a modified version of the libjpeg-turbo source,
then:
@@ -38,7 +41,7 @@ best of our understanding.
- Clauses 1 and 3 of the zlib License
2. You must add your own copyright notice to the header of each source
- file you modified, so others can tell that you modified that file (if
+ file you modified, so others can tell that you modified that file. (If
there is not an existing copyright header in that file, then you can
simply add a notice stating that you modified the file.)
@@ -119,8 +122,8 @@ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
-Why Three Licenses?
-===================
+Why Two Licenses?
+=================
The zlib License could have been used instead of the Modified (3-clause) BSD
License, and since the IJG License effectively subsumes the distribution
diff --git a/src/3rdparty/libjpeg/import_from_libjpeg_tarball.sh b/src/3rdparty/libjpeg/import_from_libjpeg_tarball.sh
index fea6c5c9b4..0c984a8eed 100755
--- a/src/3rdparty/libjpeg/import_from_libjpeg_tarball.sh
+++ b/src/3rdparty/libjpeg/import_from_libjpeg_tarball.sh
@@ -145,7 +145,7 @@ sed -i -e "s/@COPYRIGHT_YEAR@/$cyear/" $TARGET_DIR/src/jversion.h
sed -n -e 's/^[ ]*"//
s/\(\\n\)*"[ ]*\\*$//
- /JCOPYRIGHT\ /,/^[ ]*$/ {
+ /JCOPYRIGHT.\ /,/^[ ]*$/ {
/Copyright/p
}
' $TARGET_DIR/src/jversion.h > $TARGET_DIR/COPYRIGHT.txt
diff --git a/src/3rdparty/libjpeg/qt_attribution.json b/src/3rdparty/libjpeg/qt_attribution.json
index 0b06d5c01e..ae2fa94e73 100644
--- a/src/3rdparty/libjpeg/qt_attribution.json
+++ b/src/3rdparty/libjpeg/qt_attribution.json
@@ -7,11 +7,11 @@
"Description": "The Independent JPEG Group's JPEG software",
"Homepage": "http://libjpeg-turbo.virtualgl.org/",
- "Version": "3.0.2",
- "DownloadLocation": "https://github.com/libjpeg-turbo/libjpeg-turbo/releases/download/3.0.2/libjpeg-turbo-3.0.2.tar.gz",
+ "Version": "3.0.3",
+ "DownloadLocation": "https://github.com/libjpeg-turbo/libjpeg-turbo/releases/download/3.0.3/libjpeg-turbo-3.0.3.tar.gz",
- "License": "Independent JPEG Group License and BSD 3-Clause \"New\" or \"Revised\" License and zlib License",
- "LicenseId": "IJG AND BSD-3-Clause AND Zlib",
- "LicenseFiles": [ "LICENSE", "ijg-license.txt", "zlib-license.txt"],
+ "License": "Independent JPEG Group License and BSD 3-Clause \"New\" or \"Revised\" License",
+ "LicenseId": "IJG AND BSD-3-Clause",
+ "LicenseFiles": [ "LICENSE", "ijg-license.txt" ],
"CopyrightFile": "COPYRIGHT.txt"
}
diff --git a/src/3rdparty/libjpeg/src/ChangeLog.md b/src/3rdparty/libjpeg/src/ChangeLog.md
index a929b62a8c..8039c5536d 100644
--- a/src/3rdparty/libjpeg/src/ChangeLog.md
+++ b/src/3rdparty/libjpeg/src/ChangeLog.md
@@ -1,3 +1,27 @@
+3.0.3
+=====
+
+### Significant changes relative to 3.0.2:
+
+1. Fixed an issue in the build system, introduced in 3.0.2, that caused all
+libjpeg-turbo components to depend on the Visual C++ run-time DLL when built
+with Visual C++ and CMake 3.15 or later, regardless of value of the
+`WITH_CRT_DLL` CMake variable.
+
+2. The x86-64 SIMD extensions now include support for Intel Control-flow
+Enforcement Technology (CET), which is enabled automatically if CET is enabled
+in the C compiler.
+
+3. Fixed a regression introduced by 3.0 beta2[6] that made it impossible for
+calling applications to supply custom Huffman tables when generating
+12-bit-per-component lossy JPEG images using the libjpeg API.
+
+4. Fixed a segfault that occurred when attempting to use the jpegtran `-drop`
+option with a specially-crafted malformed input image or drop image
+(specifically an image in which all of the scans contain fewer components than
+the number of components specified in the Start Of Frame segment.)
+
+
3.0.2
=====
diff --git a/src/3rdparty/libjpeg/src/jcmaster.c b/src/3rdparty/libjpeg/src/jcmaster.c
index 7e1408fcc9..161019763d 100644
--- a/src/3rdparty/libjpeg/src/jcmaster.c
+++ b/src/3rdparty/libjpeg/src/jcmaster.c
@@ -7,7 +7,7 @@
* Lossless JPEG Modifications:
* Copyright (C) 1999, Ken Murchison.
* libjpeg-turbo Modifications:
- * Copyright (C) 2010, 2016, 2018, 2022-2023, D. R. Commander.
+ * Copyright (C) 2010, 2016, 2018, 2022-2024, D. R. Commander.
* For conditions of distribution and use, see the accompanying README.ijg
* file.
*
@@ -50,6 +50,113 @@ jpeg_calc_jpeg_dimensions(j_compress_ptr cinfo)
#endif
+LOCAL(boolean)
+using_std_huff_tables(j_compress_ptr cinfo)
+{
+ int i;
+
+ static const UINT8 bits_dc_luminance[17] = {
+ /* 0-base */ 0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0
+ };
+ static const UINT8 val_dc_luminance[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
+ };
+
+ static const UINT8 bits_dc_chrominance[17] = {
+ /* 0-base */ 0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0
+ };
+ static const UINT8 val_dc_chrominance[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
+ };
+
+ static const UINT8 bits_ac_luminance[17] = {
+ /* 0-base */ 0, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 0x7d
+ };
+ static const UINT8 val_ac_luminance[] = {
+ 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12,
+ 0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07,
+ 0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08,
+ 0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0,
+ 0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16,
+ 0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28,
+ 0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39,
+ 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,
+ 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,
+ 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,
+ 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,
+ 0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
+ 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98,
+ 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
+ 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6,
+ 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5,
+ 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4,
+ 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2,
+ 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea,
+ 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
+ 0xf9, 0xfa
+ };
+
+ static const UINT8 bits_ac_chrominance[17] = {
+ /* 0-base */ 0, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 0x77
+ };
+ static const UINT8 val_ac_chrominance[] = {
+ 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21,
+ 0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71,
+ 0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91,
+ 0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0,
+ 0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34,
+ 0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26,
+ 0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38,
+ 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
+ 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
+ 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
+ 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
+ 0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+ 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96,
+ 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5,
+ 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4,
+ 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3,
+ 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2,
+ 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda,
+ 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9,
+ 0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
+ 0xf9, 0xfa
+ };
+
+ if (cinfo->dc_huff_tbl_ptrs[0] == NULL ||
+ cinfo->ac_huff_tbl_ptrs[0] == NULL ||
+ cinfo->dc_huff_tbl_ptrs[1] == NULL ||
+ cinfo->ac_huff_tbl_ptrs[1] == NULL)
+ return FALSE;
+
+ for (i = 2; i < NUM_HUFF_TBLS; i++) {
+ if (cinfo->dc_huff_tbl_ptrs[i] != NULL ||
+ cinfo->ac_huff_tbl_ptrs[i] != NULL)
+ return FALSE;
+ }
+
+ if (memcmp(cinfo->dc_huff_tbl_ptrs[0]->bits, bits_dc_luminance,
+ sizeof(bits_dc_luminance)) ||
+ memcmp(cinfo->dc_huff_tbl_ptrs[0]->huffval, val_dc_luminance,
+ sizeof(val_dc_luminance)) ||
+ memcmp(cinfo->ac_huff_tbl_ptrs[0]->bits, bits_ac_luminance,
+ sizeof(bits_ac_luminance)) ||
+ memcmp(cinfo->ac_huff_tbl_ptrs[0]->huffval, val_ac_luminance,
+ sizeof(val_ac_luminance)) ||
+ memcmp(cinfo->dc_huff_tbl_ptrs[1]->bits, bits_dc_chrominance,
+ sizeof(bits_dc_chrominance)) ||
+ memcmp(cinfo->dc_huff_tbl_ptrs[1]->huffval, val_dc_chrominance,
+ sizeof(val_dc_chrominance)) ||
+ memcmp(cinfo->ac_huff_tbl_ptrs[1]->bits, bits_ac_chrominance,
+ sizeof(bits_ac_chrominance)) ||
+ memcmp(cinfo->ac_huff_tbl_ptrs[1]->huffval, val_ac_chrominance,
+ sizeof(val_ac_chrominance)))
+ return FALSE;
+
+ return TRUE;
+}
+
+
LOCAL(void)
initial_setup(j_compress_ptr cinfo, boolean transcode_only)
/* Do computations that are needed before master selection phase */
@@ -605,6 +712,8 @@ GLOBAL(void)
jinit_c_master_control(j_compress_ptr cinfo, boolean transcode_only)
{
my_master_ptr master = (my_master_ptr)cinfo->master;
+ boolean empty_huff_tables = TRUE;
+ int i;
master->pub.prepare_for_pass = prepare_for_pass;
master->pub.pass_startup = pass_startup;
@@ -646,7 +755,16 @@ jinit_c_master_control(j_compress_ptr cinfo, boolean transcode_only)
(cinfo->progressive_mode && !cinfo->arith_code))
cinfo->optimize_coding = TRUE; /* assume default tables no good for
progressive mode or lossless mode */
- if (cinfo->data_precision == 12 && !cinfo->arith_code)
+ for (i = 0; i < NUM_HUFF_TBLS; i++) {
+ if (cinfo->dc_huff_tbl_ptrs[i] != NULL ||
+ cinfo->ac_huff_tbl_ptrs[i] != NULL) {
+ empty_huff_tables = FALSE;
+ break;
+ }
+ }
+ if (cinfo->data_precision == 12 && !cinfo->arith_code &&
+ !cinfo->optimize_coding &&
+ (empty_huff_tables || using_std_huff_tables(cinfo)))
cinfo->optimize_coding = TRUE; /* assume default tables no good for 12-bit
data precision */
diff --git a/src/3rdparty/libjpeg/src/jconfig.h b/src/3rdparty/libjpeg/src/jconfig.h
index 1e03e166e7..e81574b9a4 100644
--- a/src/3rdparty/libjpeg/src/jconfig.h
+++ b/src/3rdparty/libjpeg/src/jconfig.h
@@ -2,9 +2,9 @@
#define JPEG_LIB_VERSION 80
-#define LIBJPEG_TURBO_VERSION 3.0.2
+#define LIBJPEG_TURBO_VERSION 3.0.3
-#define LIBJPEG_TURBO_VERSION_NUMBER 3000002
+#define LIBJPEG_TURBO_VERSION_NUMBER 3000003
#define C_ARITH_CODING_SUPPORTED 1
diff --git a/src/3rdparty/libjpeg/src/jconfigint.h b/src/3rdparty/libjpeg/src/jconfigint.h
index afcb25d247..6e7dbd75a1 100644
--- a/src/3rdparty/libjpeg/src/jconfigint.h
+++ b/src/3rdparty/libjpeg/src/jconfigint.h
@@ -10,7 +10,7 @@
#define PACKAGE_NAME "libjpeg-turbo"
-#define VERSION "3.0.2"
+#define VERSION "3.0.3"
#if SIZE_MAX == 0xffffffff
#define SIZEOF_SIZE_T 4
diff --git a/src/3rdparty/libjpeg/src/jerror.c b/src/3rdparty/libjpeg/src/jerror.c
index d0ab5b88b0..3a75fec02c 100644
--- a/src/3rdparty/libjpeg/src/jerror.c
+++ b/src/3rdparty/libjpeg/src/jerror.c
@@ -4,7 +4,7 @@
* This file was part of the Independent JPEG Group's software:
* Copyright (C) 1991-1998, Thomas G. Lane.
* libjpeg-turbo Modifications:
- * Copyright (C) 2022, D. R. Commander.
+ * Copyright (C) 2022, 2024, D. R. Commander.
* For conditions of distribution and use, see the accompanying README.ijg
* file.
*
@@ -46,7 +46,7 @@
#define JMESSAGE(code, string) string,
-const char * const jpeg_std_message_table[] = {
+static const char * const jpeg_std_message_table[] = {
#include "jerror.h"
NULL
};
@@ -229,23 +229,17 @@ reset_error_mgr(j_common_ptr cinfo)
GLOBAL(struct jpeg_error_mgr *)
jpeg_std_error(struct jpeg_error_mgr *err)
{
+ memset(err, 0, sizeof(struct jpeg_error_mgr));
+
err->error_exit = error_exit;
err->emit_message = emit_message;
err->output_message = output_message;
err->format_message = format_message;
err->reset_error_mgr = reset_error_mgr;
- err->trace_level = 0; /* default = no tracing */
- err->num_warnings = 0; /* no warnings emitted yet */
- err->msg_code = 0; /* may be useful as a flag for "no error" */
-
/* Initialize message table pointers */
err->jpeg_message_table = jpeg_std_message_table;
err->last_jpeg_message = (int)JMSG_LASTMSGCODE - 1;
- err->addon_message_table = NULL;
- err->first_addon_message = 0; /* for safety */
- err->last_addon_message = 0;
-
return err;
}
diff --git a/src/3rdparty/libjpeg/src/jversion.h b/src/3rdparty/libjpeg/src/jversion.h
index 5c127dc635..3b21737362 100644
--- a/src/3rdparty/libjpeg/src/jversion.h
+++ b/src/3rdparty/libjpeg/src/jversion.h
@@ -36,20 +36,21 @@
* their code
*/
-#define JCOPYRIGHT \
+#define JCOPYRIGHT1 \
"Copyright (C) 2009-2024 D. R. Commander\n" \
"Copyright (C) 2015, 2020 Google, Inc.\n" \
"Copyright (C) 2019-2020 Arm Limited\n" \
"Copyright (C) 2015-2016, 2018 Matthieu Darbois\n" \
"Copyright (C) 2011-2016 Siarhei Siamashka\n" \
- "Copyright (C) 2015 Intel Corporation\n" \
+ "Copyright (C) 2015 Intel Corporation\n"
+#define JCOPYRIGHT2 \
"Copyright (C) 2013-2014 Linaro Limited\n" \
"Copyright (C) 2013-2014 MIPS Technologies, Inc.\n" \
"Copyright (C) 2009, 2012 Pierre Ossman for Cendio AB\n" \
"Copyright (C) 2009-2011 Nokia Corporation and/or its subsidiary(-ies)\n" \
"Copyright (C) 1999-2006 MIYASAKA Masaru\n" \
"Copyright (C) 1999 Ken Murchison\n" \
- "Copyright (C) 1991-2020 Thomas G. Lane, Guido Vollbeding"
+ "Copyright (C) 1991-2020 Thomas G. Lane, Guido Vollbeding\n"
#define JCOPYRIGHT_SHORT \
"Copyright (C) 1991-2024 The libjpeg-turbo Project and many others"
diff --git a/src/3rdparty/libjpeg/zlib-license.txt b/src/3rdparty/libjpeg/zlib-license.txt
deleted file mode 100644
index 480c61edca..0000000000
--- a/src/3rdparty/libjpeg/zlib-license.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-This software is provided 'as-is', without any express or implied
-warranty. In no event will the authors be held liable for any damages
-arising from the use of this software.
-
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it
-freely, subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not
- claim that you wrote the original software. If you use this software
- in a product, an acknowledgment in the product documentation would be
- appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
diff --git a/src/3rdparty/libpsl/psl_data.cpp b/src/3rdparty/libpsl/psl_data.cpp
index 79595282f2..a7cb354f2c 100644
--- a/src/3rdparty/libpsl/psl_data.cpp
+++ b/src/3rdparty/libpsl/psl_data.cpp
@@ -2,120 +2,120 @@
The byte array encodes effective tld names. See psl-make-dafsa source for documentation.*/
-static constexpr unsigned char kDafsa[52406] = {
- 0x40, 0x42, 0x4a, 0xa4, 0x40, 0xd1, 0x42, 0xb6, 0x50, 0x7d, 0x43, 0x85,
- 0x43, 0x55, 0x43, 0x1d, 0x49, 0x9a, 0x51, 0x08, 0x44, 0xb0, 0x40, 0x94,
- 0x46, 0x5c, 0x46, 0xdc, 0x49, 0x83, 0x4b, 0xb1, 0x45, 0x15, 0x4a, 0xad,
- 0x42, 0x45, 0x49, 0x26, 0x47, 0x77, 0x46, 0xcd, 0x47, 0x7d, 0x46, 0x92,
- 0x46, 0x33, 0x4c, 0x17, 0x48, 0xec, 0x4d, 0x67, 0x0e, 0x03, 0x03, 0x0f,
- 0x0a, 0x0e, 0x12, 0x21, 0xc0, 0xd7, 0x9f, 0x23, 0x09, 0x09, 0x10, 0x40,
+static constexpr unsigned char kDafsa[53613] = {
+ 0x40, 0x42, 0x4a, 0xa4, 0x40, 0xdb, 0x42, 0xb6, 0x50, 0x77, 0x43, 0xec,
+ 0x43, 0x5c, 0x43, 0x3a, 0x49, 0xa4, 0x51, 0xa8, 0x44, 0xee, 0x40, 0x9b,
+ 0x46, 0xb6, 0x47, 0x0e, 0x49, 0x5d, 0x4b, 0xf0, 0x45, 0x82, 0x4a, 0xc1,
+ 0x42, 0x4f, 0x49, 0x58, 0x47, 0x8b, 0x46, 0xd9, 0x47, 0x9e, 0x46, 0x8a,
+ 0x46, 0x52, 0x4c, 0xf0, 0x48, 0xd9, 0x4d, 0xd6, 0x0e, 0x03, 0x03, 0x0f,
+ 0x0a, 0x0e, 0x12, 0x1e, 0xc0, 0xe5, 0x9f, 0x23, 0x09, 0x09, 0x10, 0x40,
0x8d, 0x27, 0x40, 0xb2, 0x40, 0xd0, 0x41, 0x65, 0x40, 0x79, 0x40, 0x83,
0x0a, 0x41, 0xf6, 0x04, 0x40, 0x88, 0x41, 0x31, 0x40, 0x50, 0x0a, 0x0a,
0x40, 0x55, 0x40, 0xd2, 0x0f, 0x88, 0x6d, 0x55, 0x5c, 0x1f, 0x6a, 0xf5,
- 0xe0, 0xc9, 0xf6, 0x6c, 0x42, 0x7c, 0x1f, 0x6c, 0xc4, 0xe0, 0xab, 0xf7,
- 0x6b, 0x4b, 0x77, 0x9f, 0x02, 0x85, 0x6c, 0xfb, 0xe0, 0xca, 0x76, 0x6b,
- 0xc4, 0xe0, 0xc9, 0xbf, 0xe9, 0x0a, 0x08, 0x09, 0x05, 0x16, 0x07, 0x14,
+ 0xe0, 0xce, 0x5a, 0x6c, 0x42, 0x7c, 0x1f, 0x6c, 0xc4, 0xe0, 0xaf, 0x7c,
+ 0x6b, 0x4b, 0x77, 0x9f, 0x02, 0x85, 0x6c, 0xfb, 0xe0, 0xce, 0xda, 0x6b,
+ 0xc4, 0xe0, 0xce, 0x23, 0xe9, 0x0a, 0x08, 0x09, 0x05, 0x16, 0x07, 0x14,
0x0f, 0x18, 0x8c, 0x79, 0x7f, 0x1f, 0x65, 0x45, 0xd0, 0xc2, 0x49, 0x73,
- 0x65, 0x1f, 0x65, 0x4f, 0xd6, 0xe0, 0xca, 0x67, 0x6b, 0x58, 0x9f, 0xc2,
- 0x0c, 0x66, 0x59, 0x9f, 0x03, 0xc1, 0x2c, 0xe6, 0x04, 0xe0, 0x3e, 0xbf,
+ 0x65, 0x1f, 0x65, 0x4f, 0xd6, 0xe0, 0xce, 0xcb, 0x6b, 0x58, 0x9f, 0xc2,
+ 0x0c, 0x66, 0x59, 0x9f, 0x03, 0xc1, 0x2c, 0xe6, 0x04, 0xe0, 0x3f, 0xe1,
0x60, 0x7c, 0x1f, 0x69, 0x47, 0x4c, 0x1f, 0x66, 0xcb, 0xc4, 0x43, 0x64,
0x50, 0x1f, 0x65, 0xce, 0xc9, 0xa9, 0xe3, 0x02, 0x86, 0x5f, 0x1f, 0x65,
0xd3, 0xc8, 0xc4, 0x5e, 0x1f, 0x65, 0x48, 0x69, 0x1f, 0x66, 0xf5, 0xe0,
- 0xc0, 0xf4, 0xdd, 0x02, 0x86, 0x59, 0x1f, 0xe5, 0xe0, 0xc3, 0x7c, 0x52,
+ 0xc5, 0x33, 0xdd, 0x02, 0x86, 0x59, 0x1f, 0xe5, 0xe0, 0xc7, 0xa2, 0x52,
0x1f, 0x66, 0xe3, 0xdd, 0xbf, 0xdb, 0x02, 0x8e, 0x7b, 0x1f, 0x68, 0x68,
0x4a, 0x1f, 0x67, 0x5b, 0x48, 0x1f, 0x67, 0xe7, 0xc3, 0x79, 0x46, 0x1f,
- 0x65, 0xdb, 0xe0, 0xc1, 0x5d, 0x55, 0x77, 0x9f, 0x02, 0x84, 0x69, 0xc7,
- 0xc2, 0x2e, 0xe5, 0xc2, 0x28, 0x40, 0x5a, 0x1f, 0x68, 0xf2, 0xe0, 0xc9,
- 0x89, 0xe8, 0x05, 0x08, 0x07, 0x06, 0x85, 0x74, 0x6d, 0x1f, 0x67, 0xc9,
- 0xe0, 0xc9, 0x7b, 0x70, 0x77, 0x1f, 0x66, 0xed, 0xc3, 0x68, 0x4c, 0x68,
+ 0x65, 0xdb, 0xe0, 0xc5, 0xaa, 0x55, 0x77, 0x9f, 0x02, 0x84, 0x69, 0xc7,
+ 0xc2, 0x2e, 0xe5, 0xc2, 0x28, 0x40, 0x5a, 0x1f, 0x68, 0xf2, 0xe0, 0xcd,
+ 0xed, 0xe8, 0x05, 0x08, 0x07, 0x06, 0x85, 0x74, 0x6d, 0x1f, 0x67, 0xc9,
+ 0xe0, 0xcd, 0xdf, 0x70, 0x77, 0x1f, 0x66, 0xed, 0xc3, 0x68, 0x4c, 0x68,
0x1f, 0xe5, 0xc2, 0x07, 0x47, 0x7a, 0x9f, 0xc2, 0x8d, 0x41, 0x54, 0x1f,
0x69, 0xc0, 0xc3, 0x0e, 0xe7, 0x0c, 0x07, 0x1d, 0x13, 0x16, 0x14, 0x04,
0x12, 0x11, 0x07, 0x09, 0x87, 0x7e, 0x64, 0x1f, 0x69, 0xe6, 0xd1, 0xff,
0x7d, 0x51, 0x9f, 0x02, 0x91, 0xe7, 0x03, 0x07, 0x83, 0x7b, 0xdc, 0x56,
- 0x67, 0xe0, 0xb4, 0xf2, 0xf5, 0xcf, 0x2d, 0xeb, 0xc1, 0xf2, 0xe5, 0x03,
+ 0x67, 0xe0, 0xb9, 0xa9, 0xf5, 0xcf, 0x2d, 0xeb, 0xc1, 0xf2, 0xe5, 0x03,
0xc2, 0x3c, 0xdd, 0xc7, 0xe6, 0x7b, 0x44, 0x1f, 0xe7, 0x02, 0x89, 0x7b,
0xc7, 0x03, 0xd9, 0x54, 0x1f, 0xe6, 0xc0, 0xc2, 0x79, 0xd4, 0xd9, 0x4e,
- 0x76, 0x72, 0x9f, 0x02, 0x86, 0x68, 0x77, 0xef, 0xe0, 0xa0, 0xc1, 0xe7,
+ 0x76, 0x72, 0x9f, 0x02, 0x86, 0x68, 0x77, 0xef, 0xe0, 0xa3, 0xd9, 0xe7,
0x02, 0x84, 0x7b, 0xdc, 0xd9, 0x3c, 0x75, 0xe1, 0xc2, 0x64, 0x75, 0x44,
0x1f, 0xe7, 0x02, 0x84, 0x7b, 0xc7, 0xd9, 0x2e, 0x79, 0x54, 0xae, 0x42,
- 0x77, 0x60, 0x8c, 0x88, 0xdd, 0xbd, 0x6e, 0xc7, 0xc2, 0xda, 0xe7, 0x02,
- 0x87, 0x7b, 0x1f, 0x65, 0xca, 0xe0, 0xc8, 0x6f, 0x4b, 0x1f, 0x67, 0x54,
- 0xf0, 0xe0, 0xc9, 0x4b, 0x66, 0x4f, 0x9f, 0x02, 0x86, 0xe5, 0x41, 0x1e,
- 0xe0, 0xc1, 0x78, 0x64, 0x7a, 0xd5, 0xe0, 0xc9, 0x3a, 0x65, 0x5e, 0x1f,
- 0x65, 0x65, 0xc8, 0x83, 0x5f, 0x73, 0x1f, 0x65, 0x77, 0xdd, 0xe0, 0xc9,
- 0x2a, 0x46, 0x4a, 0x1f, 0x66, 0xdc, 0xd1, 0x67, 0x42, 0x79, 0x1f, 0xe7,
+ 0x77, 0x60, 0x8f, 0x83, 0xde, 0x6d, 0x6e, 0xc7, 0xc2, 0xda, 0xe7, 0x02,
+ 0x87, 0x7b, 0x1f, 0x65, 0xca, 0xe0, 0xcc, 0xd3, 0x4b, 0x1f, 0x67, 0x54,
+ 0xf0, 0xe0, 0xcd, 0xaf, 0x66, 0x4f, 0x9f, 0x02, 0x86, 0xe5, 0x41, 0x1e,
+ 0xe0, 0xc5, 0x9e, 0x64, 0x7a, 0xd5, 0xe0, 0xcd, 0x9e, 0x65, 0x5e, 0x1f,
+ 0x65, 0x65, 0xc8, 0x83, 0x5f, 0x73, 0x1f, 0x65, 0x77, 0xdd, 0xe0, 0xcd,
+ 0x8e, 0x46, 0x4a, 0x1f, 0x66, 0xdc, 0xd1, 0x67, 0x42, 0x79, 0x1f, 0xe7,
0xc2, 0x8c, 0xe6, 0x12, 0x0d, 0x04, 0x07, 0x0c, 0x09, 0x07, 0x07, 0x07,
0x06, 0x07, 0x19, 0x11, 0x11, 0x09, 0x08, 0x0b, 0x87, 0x7e, 0x73, 0x1f,
- 0xe9, 0x02, 0x84, 0xd7, 0xe0, 0xc8, 0x1c, 0xd6, 0xc7, 0x45, 0x7b, 0xcb,
+ 0xe9, 0x02, 0x84, 0xd7, 0xe0, 0xcc, 0x80, 0xd6, 0xc7, 0x45, 0x7b, 0xcb,
0xc2, 0x2c, 0x78, 0x78, 0x1f, 0x66, 0xc8, 0xc3, 0xcc, 0x77, 0x61, 0x1f,
- 0x69, 0x69, 0x6c, 0x1f, 0x69, 0xd4, 0xe0, 0xc8, 0xeb, 0x72, 0x56, 0x1f,
- 0x67, 0x78, 0xc4, 0xe0, 0xc8, 0xdd, 0x60, 0x43, 0x1f, 0x66, 0xdc, 0xdb,
+ 0x69, 0x69, 0x6c, 0x1f, 0x69, 0xd4, 0xe0, 0xcd, 0x4f, 0x72, 0x56, 0x1f,
+ 0x67, 0x78, 0xc4, 0xe0, 0xcd, 0x41, 0x60, 0x43, 0x1f, 0x66, 0xdc, 0xdb,
0xee, 0x5d, 0x71, 0x1f, 0x64, 0xfa, 0xd1, 0x13, 0x5c, 0x7a, 0x1f, 0x66,
0xde, 0xc7, 0x49, 0x5b, 0x78, 0x1f, 0xe7, 0xc3, 0xd2, 0x57, 0x76, 0x1f,
0x65, 0xf0, 0xc1, 0xfa, 0x56, 0x70, 0x9f, 0x03, 0x04, 0x86, 0x69, 0xd7,
- 0xc8, 0x1a, 0x66, 0x7d, 0xdf, 0xe0, 0xc8, 0xab, 0x65, 0x4a, 0x60, 0x1f,
- 0x65, 0xdd, 0xe0, 0xc8, 0xa7, 0xd5, 0x02, 0x87, 0x59, 0x1f, 0x68, 0x42,
+ 0xc8, 0x1a, 0x66, 0x7d, 0xdf, 0xe0, 0xcd, 0x0f, 0x65, 0x4a, 0x60, 0x1f,
+ 0x65, 0xdd, 0xe0, 0xcd, 0x0b, 0xd5, 0x02, 0x87, 0x59, 0x1f, 0x68, 0x42,
0xf2, 0xc1, 0xa4, 0x4e, 0x1f, 0x68, 0x42, 0xf2, 0xd8, 0x54, 0x54, 0x7f,
- 0x1f, 0xe5, 0x02, 0x87, 0x7a, 0xdc, 0x41, 0x93, 0xe0, 0xc8, 0x9f, 0xca,
- 0xe0, 0xc8, 0x85, 0x4b, 0x5b, 0x1f, 0x68, 0x41, 0xd8, 0xe0, 0xca, 0x23,
- 0x49, 0x4b, 0x1f, 0x66, 0xdc, 0xe0, 0xc7, 0xa8, 0x48, 0x51, 0x1f, 0x67,
+ 0x1f, 0xe5, 0x02, 0x87, 0x7a, 0xdc, 0x41, 0x93, 0xe0, 0xcd, 0x56, 0xca,
+ 0xe0, 0xcc, 0xe9, 0x4b, 0x5b, 0x1f, 0x68, 0x41, 0xd8, 0xe0, 0xce, 0xda,
+ 0x49, 0x4b, 0x1f, 0x66, 0xdc, 0xe0, 0xcc, 0x0c, 0x48, 0x51, 0x1f, 0x67,
0x48, 0x71, 0x1f, 0x64, 0xfd, 0xc2, 0x3c, 0x45, 0x48, 0x1f, 0x65, 0xd6,
- 0xc6, 0xde, 0x44, 0x5b, 0x9f, 0x02, 0x85, 0x67, 0xdf, 0xe0, 0xc5, 0x35,
- 0x65, 0x6a, 0xdb, 0xe0, 0xc8, 0x4d, 0xe5, 0x16, 0x0b, 0x09, 0x07, 0x07,
+ 0xc6, 0xde, 0x44, 0x5b, 0x9f, 0x02, 0x85, 0x67, 0xdf, 0xe0, 0xc9, 0x64,
+ 0x65, 0x6a, 0xdb, 0xe0, 0xcc, 0xb1, 0xe5, 0x16, 0x0b, 0x09, 0x07, 0x07,
0x17, 0x14, 0x03, 0x15, 0x09, 0x08, 0x23, 0x07, 0x09, 0x15, 0x1b, 0x0d,
0x0e, 0x09, 0x0d, 0x28, 0x88, 0xfe, 0x02, 0x82, 0xf3, 0x89, 0x6e, 0x1f,
- 0x65, 0xcd, 0xc1, 0x6a, 0x7a, 0x43, 0x1f, 0x65, 0x73, 0xf6, 0xe0, 0xc8,
- 0x22, 0x79, 0x7f, 0x1f, 0x64, 0xf8, 0xc6, 0x3a, 0x73, 0x76, 0x1f, 0x66,
+ 0x65, 0xcd, 0xc1, 0x6a, 0x7a, 0x43, 0x1f, 0x65, 0x73, 0xf6, 0xe0, 0xcc,
+ 0x86, 0x79, 0x7f, 0x1f, 0x64, 0xf8, 0xc6, 0x3a, 0x73, 0x76, 0x1f, 0x66,
0xe0, 0xd7, 0x70, 0xf2, 0x03, 0x08, 0x83, 0x69, 0x1f, 0x66, 0x49, 0xcb,
- 0xe0, 0xc8, 0x08, 0xe1, 0xc0, 0xb0, 0x50, 0x1f, 0x69, 0x58, 0xdc, 0xe0,
- 0xc7, 0xfd, 0x71, 0x71, 0x9f, 0x02, 0x84, 0x66, 0xe2, 0xdb, 0x0c, 0xe5,
- 0x02, 0x85, 0x7d, 0xe2, 0xe0, 0xc7, 0xec, 0xcf, 0xda, 0x29, 0xef, 0xc0,
+ 0xe0, 0xcc, 0x6c, 0xe1, 0xc0, 0xb0, 0x50, 0x1f, 0x69, 0x58, 0xdc, 0xe0,
+ 0xcc, 0x61, 0x71, 0x71, 0x9f, 0x02, 0x84, 0x66, 0xe2, 0xdb, 0x0c, 0xe5,
+ 0x02, 0x85, 0x7d, 0xe2, 0xe0, 0xcc, 0x50, 0xcf, 0xda, 0x29, 0xef, 0xc0,
0x90, 0xee, 0x02, 0x86, 0x76, 0x1f, 0x69, 0xdb, 0xc7, 0x46, 0x6e, 0x1f,
- 0xe5, 0x02, 0x82, 0xf4, 0x82, 0x5f, 0xce, 0xe0, 0xc7, 0xd1, 0x68, 0x71,
- 0x1f, 0x64, 0x79, 0xd0, 0xe0, 0xc9, 0x74, 0x65, 0x48, 0x1f, 0x68, 0xc9,
- 0xe0, 0xc7, 0xbf, 0xe4, 0x02, 0x8c, 0x69, 0x1f, 0x64, 0x78, 0x7b, 0x1f,
- 0x66, 0x55, 0xd9, 0xe0, 0xc9, 0x5d, 0x67, 0x9f, 0x03, 0x06, 0x83, 0x69,
- 0x58, 0xea, 0xe0, 0xc7, 0xa6, 0x66, 0xcb, 0x93, 0x65, 0x48, 0xc6, 0xe0,
- 0xc7, 0x9d, 0x5f, 0x7c, 0x1f, 0x67, 0xce, 0xc0, 0x5b, 0x5c, 0x68, 0x1f,
- 0x67, 0x7a, 0xff, 0xe0, 0xc9, 0x39, 0x58, 0x49, 0x1f, 0x69, 0x47, 0xcc,
- 0x04, 0xe0, 0xc9, 0x2c, 0x1f, 0x65, 0x64, 0x67, 0x1f, 0x69, 0x45, 0x52,
+ 0xe5, 0x02, 0x82, 0xf4, 0x82, 0x5f, 0xce, 0xe0, 0xcc, 0x35, 0x68, 0x71,
+ 0x1f, 0x64, 0x79, 0xd0, 0xe0, 0xce, 0x2b, 0x65, 0x48, 0x1f, 0x68, 0xc9,
+ 0xe0, 0xcc, 0x23, 0xe4, 0x02, 0x8c, 0x69, 0x1f, 0x64, 0x78, 0x7b, 0x1f,
+ 0x66, 0x55, 0xd9, 0xe0, 0xce, 0x14, 0x67, 0x9f, 0x03, 0x06, 0x83, 0x69,
+ 0x58, 0xea, 0xe0, 0xcc, 0x0a, 0x66, 0xcb, 0x93, 0x65, 0x48, 0xc6, 0xe0,
+ 0xcc, 0x01, 0x5f, 0x7c, 0x1f, 0x67, 0xce, 0xc0, 0x5b, 0x5c, 0x68, 0x1f,
+ 0x67, 0x7a, 0xff, 0xe0, 0xcd, 0xf0, 0x58, 0x49, 0x1f, 0x69, 0x47, 0xcc,
+ 0x04, 0xe0, 0xcd, 0xe3, 0x1f, 0x65, 0x64, 0x67, 0x1f, 0x69, 0x45, 0x52,
0x1f, 0xe5, 0x94, 0x55, 0x46, 0x9f, 0x02, 0x8b, 0xe6, 0x02, 0x85, 0x65,
- 0xed, 0xe0, 0x9e, 0xac, 0xe0, 0xc4, 0xe9, 0xe5, 0x02, 0x85, 0x7a, 0xd7,
- 0xe0, 0xc9, 0x0c, 0xdf, 0xc6, 0x7e, 0x52, 0x4c, 0x1f, 0x66, 0x6d, 0x4c,
- 0x1f, 0x65, 0x71, 0xf1, 0xe0, 0xc7, 0x50, 0x4f, 0x70, 0x9f, 0x02, 0x85,
- 0x67, 0xc1, 0xe0, 0xbd, 0x0f, 0x66, 0xf9, 0xc3, 0x02, 0x4d, 0x43, 0x1f,
- 0x68, 0x51, 0xc9, 0xe0, 0xc7, 0x39, 0x4c, 0x57, 0x1f, 0x66, 0x75, 0x77,
- 0x1f, 0x69, 0x41, 0xd3, 0xe0, 0xc7, 0x2c, 0xc5, 0x03, 0x06, 0x97, 0x75,
+ 0xed, 0xe0, 0xa1, 0xc4, 0xe0, 0xc4, 0xe9, 0xe5, 0x02, 0x85, 0x7a, 0xd7,
+ 0xe0, 0xcd, 0xc3, 0xdf, 0xc6, 0x7e, 0x52, 0x4c, 0x1f, 0x66, 0x6d, 0x4c,
+ 0x1f, 0x65, 0x71, 0xf1, 0xe0, 0xcb, 0xb4, 0x4f, 0x70, 0x9f, 0x02, 0x85,
+ 0x67, 0xc1, 0xe0, 0xc1, 0x41, 0x66, 0xf9, 0xc3, 0x02, 0x4d, 0x43, 0x1f,
+ 0x68, 0x51, 0xc9, 0xe0, 0xcb, 0x9d, 0x4c, 0x57, 0x1f, 0x66, 0x75, 0x77,
+ 0x1f, 0x69, 0x41, 0xd3, 0xe0, 0xcb, 0x90, 0xc5, 0x03, 0x06, 0x97, 0x75,
0x1f, 0x65, 0xfa, 0xd9, 0xba, 0x6c, 0x9f, 0x02, 0x84, 0x67, 0xdb, 0xc4,
- 0xe9, 0x65, 0x4f, 0xf8, 0x04, 0xe0, 0xc8, 0xbc, 0xae, 0x21, 0x60, 0x8c,
- 0x88, 0xe0, 0x37, 0x6a, 0x6b, 0x1f, 0x65, 0xcd, 0xe0, 0xbd, 0xc7, 0x41,
- 0x65, 0x1f, 0x65, 0xfa, 0xe0, 0xc6, 0x38, 0x40, 0x4b, 0x1f, 0x64, 0x7a,
- 0x7a, 0xae, 0x04, 0xe0, 0x8c, 0x88, 0x1f, 0x69, 0x66, 0x59, 0x1f, 0xe6,
- 0xe0, 0x3b, 0x53, 0xe4, 0x05, 0x08, 0x12, 0x09, 0x95, 0x7f, 0x61, 0x1f,
- 0x66, 0xc1, 0xe0, 0xc6, 0xfb, 0xfd, 0x02, 0x87, 0x5b, 0x1f, 0x65, 0xf1,
- 0xe0, 0xa8, 0x34, 0x50, 0x1f, 0x68, 0x73, 0xc0, 0xe0, 0xc6, 0xc8, 0x7c,
- 0x41, 0x1f, 0x64, 0x78, 0xda, 0xe0, 0xc8, 0x6b, 0xfa, 0x02, 0x88, 0x6c,
- 0x1f, 0x69, 0x43, 0xfd, 0xe0, 0xc6, 0xb4, 0x5a, 0x1f, 0x69, 0x69, 0x6c,
+ 0xe9, 0x65, 0x4f, 0xf8, 0x04, 0xe0, 0xcd, 0x73, 0xae, 0x21, 0x60, 0x8f,
+ 0x83, 0xe0, 0x38, 0x9e, 0x6b, 0x1f, 0x65, 0xcd, 0xe0, 0xc2, 0x06, 0x41,
+ 0x65, 0x1f, 0x65, 0xfa, 0xe0, 0xca, 0x9c, 0x40, 0x4b, 0x1f, 0x64, 0x7a,
+ 0x7a, 0xae, 0x04, 0xe0, 0x8f, 0x83, 0x1f, 0x69, 0x66, 0x59, 0x1f, 0xe6,
+ 0xe0, 0x3c, 0x75, 0xe4, 0x05, 0x08, 0x12, 0x09, 0x95, 0x7f, 0x61, 0x1f,
+ 0x66, 0xc1, 0xe0, 0xcb, 0x68, 0xfd, 0x02, 0x87, 0x5b, 0x1f, 0x65, 0xf1,
+ 0xe0, 0xab, 0xb9, 0x50, 0x1f, 0x68, 0x73, 0xc0, 0xe0, 0xcb, 0x2c, 0x7c,
+ 0x41, 0x1f, 0x64, 0x78, 0xda, 0xe0, 0xcd, 0x22, 0xfa, 0x02, 0x88, 0x6c,
+ 0x1f, 0x69, 0x43, 0xfd, 0xe0, 0xcb, 0x18, 0x5a, 0x1f, 0x69, 0x69, 0x6c,
0x1f, 0x69, 0xc0, 0xc4, 0x79, 0xf8, 0x04, 0x1f, 0x07, 0x88, 0x6d, 0x9f,
- 0x03, 0x0a, 0x8b, 0x66, 0x56, 0x47, 0x1f, 0x67, 0x7d, 0xd1, 0xe0, 0xc8,
- 0x42, 0xe5, 0x02, 0x85, 0x5c, 0xcb, 0xe0, 0xc8, 0x3a, 0xdb, 0xc5, 0x6f,
- 0x64, 0xff, 0xe0, 0xc6, 0x8b, 0x6a, 0x1f, 0x64, 0x7a, 0xfa, 0xd6, 0x42,
- 0x56, 0x1f, 0x67, 0x55, 0xcc, 0xe0, 0xc8, 0x23, 0x49, 0x1f, 0x69, 0x47,
- 0xcd, 0xe0, 0xc6, 0x6f, 0xe3, 0x04, 0x24, 0xc0, 0x4e, 0xc3, 0x02, 0x8e,
+ 0x03, 0x0a, 0x8b, 0x66, 0x56, 0x47, 0x1f, 0x67, 0x7d, 0xd1, 0xe0, 0xcc,
+ 0xf9, 0xe5, 0x02, 0x85, 0x5c, 0xcb, 0xe0, 0xcc, 0xf1, 0xdb, 0xc5, 0x6f,
+ 0x64, 0xff, 0xe0, 0xca, 0xef, 0x6a, 0x1f, 0x64, 0x7a, 0xfa, 0xd6, 0x42,
+ 0x56, 0x1f, 0x67, 0x55, 0xcc, 0xe0, 0xcc, 0xda, 0x49, 0x1f, 0x69, 0x47,
+ 0xcd, 0xe0, 0xca, 0xd3, 0xe3, 0x04, 0x24, 0xc0, 0x4e, 0xc3, 0x02, 0x8e,
0x5d, 0x1f, 0x63, 0x42, 0x64, 0x1f, 0x63, 0x43, 0x73, 0x1f, 0x63, 0xc3,
0xc4, 0x18, 0x55, 0x1f, 0x63, 0x42, 0x61, 0x1f, 0x63, 0x43, 0x43, 0x1f,
0x63, 0x42, 0x77, 0x1f, 0x63, 0x43, 0xe7, 0xc0, 0x4a, 0xc2, 0x06, 0x06,
0x0b, 0x08, 0x0f, 0x90, 0x7b, 0x1f, 0x63, 0x43, 0xfc, 0x9d, 0x79, 0x1f,
- 0x63, 0x43, 0x48, 0x1f, 0x63, 0xc2, 0xe0, 0xbd, 0x81, 0x73, 0x1f, 0x63,
- 0x43, 0xe0, 0xe0, 0xc7, 0xd2, 0x70, 0x1f, 0x63, 0x43, 0x7c, 0x1f, 0x63,
- 0x42, 0x70, 0x1f, 0x63, 0xc3, 0xe0, 0xc5, 0x5d, 0x6f, 0x1f, 0x63, 0x43,
- 0x69, 0x1f, 0x63, 0x42, 0x66, 0x1f, 0x63, 0x43, 0xc9, 0xe0, 0xc7, 0xb3,
+ 0x63, 0x43, 0x48, 0x1f, 0x63, 0xc2, 0xe0, 0xc1, 0xce, 0x73, 0x1f, 0x63,
+ 0x43, 0xe0, 0xe0, 0xcc, 0x89, 0x70, 0x1f, 0x63, 0x43, 0x7c, 0x1f, 0x63,
+ 0x42, 0x70, 0x1f, 0x63, 0xc3, 0xe0, 0xc9, 0xc1, 0x6f, 0x1f, 0x63, 0x43,
+ 0x69, 0x1f, 0x63, 0x42, 0x66, 0x1f, 0x63, 0x43, 0xc9, 0xe0, 0xcc, 0x6a,
0x62, 0x1f, 0x63, 0x43, 0x5e, 0x1f, 0x63, 0x42, 0x7e, 0x1f, 0x63, 0xc3,
- 0xe0, 0xc5, 0x3b, 0x41, 0x7f, 0x1f, 0x63, 0x42, 0x53, 0x1f, 0x63, 0xc1,
- 0xe0, 0xc5, 0x58, 0x61, 0x43, 0x52, 0x1f, 0x61, 0x43, 0xd4, 0xe0, 0xc7,
- 0x8e, 0xe0, 0x0f, 0x0c, 0x13, 0x40, 0x7e, 0x11, 0x13, 0x0f, 0x13, 0x40,
+ 0xe0, 0xc9, 0x9f, 0x41, 0x7f, 0x1f, 0x63, 0x42, 0x53, 0x1f, 0x63, 0xc1,
+ 0xe0, 0xc9, 0xbc, 0x61, 0x43, 0x52, 0x1f, 0x61, 0x43, 0xd4, 0xe0, 0xcc,
+ 0x45, 0xe0, 0x0f, 0x0c, 0x13, 0x40, 0x7e, 0x11, 0x13, 0x0f, 0x13, 0x40,
0x5b, 0x0e, 0x10, 0x0e, 0xaa, 0x7a, 0x65, 0x1f, 0x60, 0x7a, 0x72, 0x1f,
- 0x60, 0xfa, 0xe0, 0xc7, 0x71, 0xf9, 0x03, 0xc0, 0x78, 0x40, 0x1f, 0x60,
+ 0x60, 0xfa, 0xe0, 0xcc, 0x28, 0xf9, 0x03, 0xc0, 0x78, 0x40, 0x1f, 0x60,
0x78, 0x59, 0x1f, 0x60, 0x79, 0x47, 0x1f, 0x60, 0x78, 0xd5, 0xc0, 0x67,
0xf8, 0x06, 0x13, 0x12, 0x16, 0x16, 0x9c, 0x6d, 0x1f, 0x60, 0x78, 0x47,
0x1f, 0x60, 0x78, 0x44, 0x1f, 0x60, 0x79, 0x4c, 0x1f, 0x60, 0x78, 0xc1,
@@ -126,12 +126,12 @@ static constexpr unsigned char kDafsa[52406] = {
0x60, 0x78, 0x63, 0x1f, 0x60, 0x78, 0x41, 0x1f, 0x60, 0x78, 0x74, 0x1f,
0x60, 0x78, 0xc8, 0x8e, 0x57, 0x1f, 0x60, 0x78, 0x6b, 0x1f, 0x60, 0x78,
0x72, 0x1f, 0x60, 0x78, 0x63, 0x2e, 0x1f, 0x60, 0x79, 0x44, 0x1f, 0x60,
- 0x78, 0x57, 0x1f, 0x60, 0xf8, 0xe0, 0xbc, 0x92, 0x44, 0x1f, 0x60, 0x78,
- 0x6d, 0x1f, 0xe0, 0xe0, 0x6a, 0x51, 0x76, 0x7d, 0x1f, 0x60, 0x76, 0x42,
- 0x1f, 0x60, 0x76, 0x5a, 0x1f, 0x60, 0x77, 0xcf, 0xe0, 0xc6, 0xd0, 0x74,
+ 0x78, 0x57, 0x1f, 0x60, 0xf8, 0xe0, 0xc0, 0xdf, 0x44, 0x1f, 0x60, 0x78,
+ 0x6d, 0x1f, 0xe0, 0xe0, 0x6c, 0x8a, 0x76, 0x7d, 0x1f, 0x60, 0x76, 0x42,
+ 0x1f, 0x60, 0x76, 0x5a, 0x1f, 0x60, 0x77, 0xcf, 0xe0, 0xcb, 0x87, 0x74,
0x6d, 0x1f, 0x60, 0x74, 0x7e, 0x1f, 0x60, 0x74, 0x70, 0x1f, 0x60, 0x74,
0x64, 0x1f, 0x60, 0xf4, 0xc3, 0x89, 0x72, 0x6d, 0x1f, 0x60, 0x72, 0x7e,
- 0x1f, 0x60, 0x72, 0x70, 0x1f, 0xe0, 0xe0, 0xb6, 0xc1, 0x70, 0x6d, 0x1f,
+ 0x1f, 0x60, 0x72, 0x70, 0x1f, 0xe0, 0xe0, 0xba, 0xc8, 0x70, 0x6d, 0x1f,
0x60, 0x70, 0x7e, 0x1f, 0x60, 0x70, 0x70, 0x1f, 0x60, 0x70, 0x64, 0x1f,
0x60, 0xf1, 0xc0, 0xeb, 0xee, 0x02, 0xaa, 0x5a, 0x1f, 0x60, 0x6e, 0x7f,
0x1f, 0x60, 0x6e, 0x59, 0x1f, 0x60, 0x6f, 0x4d, 0x1f, 0x60, 0x6e, 0x55,
@@ -142,240 +142,240 @@ static constexpr unsigned char kDafsa[52406] = {
0x69, 0x68, 0x1f, 0x60, 0x6f, 0x4d, 0x1f, 0x60, 0x6e, 0x64, 0x1f, 0x60,
0x6e, 0x7f, 0x1f, 0x60, 0x6e, 0x6f, 0x1f, 0x60, 0xee, 0xc0, 0x54, 0x6c,
0x6d, 0x1f, 0x60, 0x6c, 0x7e, 0x1f, 0x60, 0x6c, 0x70, 0x1f, 0xe0, 0xd8,
- 0xf6, 0x6a, 0x6d, 0x1f, 0x60, 0x6a, 0x7e, 0x1f, 0x60, 0x6a, 0x70, 0x1f,
- 0x60, 0xea, 0xe0, 0xc3, 0xd6, 0x68, 0x6d, 0x1f, 0x60, 0x68, 0x7e, 0x1f,
+ 0xfe, 0x6a, 0x6d, 0x1f, 0x60, 0x6a, 0x7e, 0x1f, 0x60, 0x6a, 0x70, 0x1f,
+ 0x60, 0xea, 0xe0, 0xc8, 0x3a, 0x68, 0x6d, 0x1f, 0x60, 0x68, 0x7e, 0x1f,
0x60, 0x68, 0x70, 0x1f, 0xe0, 0xce, 0x73, 0xe6, 0x02, 0x93, 0x6d, 0x1f,
0x60, 0x66, 0x7e, 0x1f, 0xe0, 0x02, 0x82, 0xe7, 0x82, 0x66, 0x70, 0x1f,
- 0x60, 0xe6, 0xe0, 0xc3, 0xb2, 0x6c, 0x1f, 0x60, 0x66, 0x7e, 0x1f, 0x60,
- 0x66, 0x42, 0x1f, 0x60, 0x66, 0x72, 0x1f, 0x60, 0x66, 0xfe, 0xe0, 0xc5,
- 0xea, 0xe4, 0x04, 0x11, 0x26, 0x8c, 0x78, 0x1f, 0x60, 0x64, 0x42, 0x1f,
+ 0x60, 0xe6, 0xe0, 0xc8, 0x16, 0x6c, 0x1f, 0x60, 0x66, 0x7e, 0x1f, 0x60,
+ 0x66, 0x42, 0x1f, 0x60, 0x66, 0x72, 0x1f, 0x60, 0x66, 0xfe, 0xe0, 0xca,
+ 0xa1, 0xe4, 0x04, 0x11, 0x26, 0x8c, 0x78, 0x1f, 0x60, 0x64, 0x42, 0x1f,
0x60, 0x64, 0x57, 0x1f, 0x60, 0x64, 0x60, 0x1f, 0xe0, 0xcc, 0x82, 0x6d,
0x1f, 0x60, 0x64, 0x7e, 0x1f, 0x60, 0x64, 0x70, 0x1f, 0xe0, 0x02, 0x88,
- 0x65, 0x4b, 0x1f, 0x60, 0xe4, 0xe0, 0xc3, 0x73, 0x64, 0xe4, 0x04, 0xe0,
- 0xc5, 0xb6, 0x1f, 0x60, 0x64, 0x6e, 0x1f, 0x60, 0x65, 0xcd, 0xe0, 0xc5,
- 0xae, 0x68, 0x1f, 0x60, 0x65, 0x47, 0x1f, 0x60, 0x64, 0xdf, 0xe0, 0xc5,
- 0xa2, 0x55, 0x1f, 0x60, 0x65, 0x49, 0x1f, 0xe0, 0xe0, 0xbf, 0x9b, 0x5a,
+ 0x65, 0x4b, 0x1f, 0x60, 0xe4, 0xe0, 0xc7, 0xd7, 0x64, 0xe4, 0x04, 0xe0,
+ 0xca, 0x6d, 0x1f, 0x60, 0x64, 0x6e, 0x1f, 0x60, 0x65, 0xcd, 0xe0, 0xca,
+ 0x65, 0x68, 0x1f, 0x60, 0x65, 0x47, 0x1f, 0x60, 0x64, 0xdf, 0xe0, 0xca,
+ 0x59, 0x55, 0x1f, 0x60, 0x65, 0x49, 0x1f, 0xe0, 0xe0, 0xc3, 0xcb, 0x5a,
0xc0, 0xc0, 0xd9, 0xd9, 0x06, 0x14, 0x0d, 0x34, 0x1a, 0x86, 0x7e, 0x1f,
0x58, 0x67, 0x9f, 0x02, 0x83, 0x5a, 0xe9, 0x83, 0x59, 0x43, 0x1f, 0x58,
0x73, 0x1f, 0x58, 0xea, 0xc1, 0x2c, 0x47, 0x1f, 0x59, 0x45, 0x1f, 0x58,
0x71, 0x1f, 0x58, 0x67, 0x9f, 0xc1, 0x40, 0x45, 0x9f, 0x02, 0xac, 0xd9,
- 0x02, 0x9a, 0x48, 0x9f, 0x02, 0x87, 0x59, 0x42, 0x1f, 0xd8, 0xe0, 0xc3,
- 0x23, 0x58, 0x71, 0x1f, 0x59, 0x4a, 0x1f, 0x58, 0x6a, 0x1f, 0x58, 0x67,
+ 0x02, 0x9a, 0x48, 0x9f, 0x02, 0x87, 0x59, 0x42, 0x1f, 0xd8, 0xe0, 0xc7,
+ 0x87, 0x58, 0x71, 0x1f, 0x59, 0x4a, 0x1f, 0x58, 0x6a, 0x1f, 0x58, 0x67,
0x1f, 0x59, 0xc6, 0x88, 0x44, 0x1f, 0x59, 0x4a, 0x1f, 0x58, 0x73, 0x1f,
- 0x59, 0x4a, 0x1f, 0xd8, 0xe0, 0xc5, 0x3b, 0x58, 0xf5, 0xc1, 0x1f, 0x43,
+ 0x59, 0x4a, 0x1f, 0xd8, 0xe0, 0xc9, 0xf2, 0x58, 0xf5, 0xc1, 0x1f, 0x43,
0x9f, 0x02, 0x86, 0x59, 0x48, 0x1f, 0xd9, 0xc2, 0xe6, 0x58, 0x67, 0x1f,
0x58, 0x6b, 0x1f, 0x59, 0x48, 0x1f, 0x59, 0x44, 0x1f, 0x59, 0xca, 0xc0,
0x6e, 0x42, 0x1f, 0x58, 0xf7, 0xc0, 0xff, 0x41, 0x1f, 0x59, 0x44, 0x1f,
0x58, 0x73, 0x1f, 0x58, 0xf7, 0xc0, 0xff, 0xd8, 0x06, 0x15, 0x0a, 0x16,
0x0c, 0xa4, 0x79, 0x9f, 0x02, 0x84, 0x59, 0xc5, 0xc0, 0xb0, 0x58, 0x71,
- 0x1f, 0xd8, 0x04, 0xe0, 0xc2, 0x62, 0x67, 0x1f, 0xd9, 0xc1, 0xbc, 0x74,
+ 0x1f, 0xd8, 0x04, 0xe0, 0xc6, 0xc6, 0x67, 0x1f, 0xd9, 0xc1, 0xbc, 0x74,
0x1f, 0x58, 0x68, 0x1f, 0x59, 0x43, 0x9f, 0xc0, 0xbf, 0x73, 0x1f, 0x59,
0x48, 0x1f, 0xd8, 0x02, 0x8b, 0x71, 0x1f, 0x59, 0x4a, 0x1f, 0xd8, 0x60,
- 0xc2, 0xbc, 0xc2, 0x18, 0xef, 0xc0, 0x83, 0x6a, 0x1f, 0x59, 0x48, 0x1f,
- 0x59, 0x46, 0x1f, 0xd8, 0xe0, 0xc2, 0x5b, 0x68, 0x9f, 0x03, 0x08, 0x89,
+ 0xc7, 0x20, 0xc2, 0x6b, 0xef, 0xc0, 0x83, 0x6a, 0x1f, 0x59, 0x48, 0x1f,
+ 0x59, 0x46, 0x1f, 0xd8, 0xe0, 0xc6, 0xbf, 0x68, 0x9f, 0x03, 0x08, 0x89,
0x5a, 0x7e, 0x1f, 0x58, 0x67, 0x1f, 0xd8, 0x96, 0x59, 0x4a, 0x1f, 0x58,
0x6a, 0x1f, 0xd9, 0xc0, 0x79, 0x58, 0x67, 0x1f, 0xd8, 0x02, 0x86, 0x72,
0x1f, 0x58, 0xe7, 0xc0, 0x89, 0xf1, 0xa7, 0x67, 0x9f, 0x04, 0x03, 0xc0,
0x99, 0x5b, 0xcc, 0x86, 0xd9, 0x03, 0x0f, 0x8f, 0x4a, 0x1f, 0x58, 0x71,
- 0x1f, 0x58, 0x67, 0x1f, 0x59, 0xc6, 0x4d, 0x9d, 0xe0, 0xb6, 0xe9, 0x45,
+ 0x1f, 0x58, 0x67, 0x1f, 0x59, 0xc6, 0x4d, 0x9d, 0xe0, 0xbb, 0xa0, 0x45,
0x1f, 0x58, 0x67, 0x1f, 0x58, 0x71, 0x1f, 0x58, 0x67, 0x1f, 0xd8, 0xe0,
- 0xc2, 0x35, 0x44, 0x9f, 0x02, 0x95, 0xd9, 0x02, 0x86, 0x4a, 0x1f, 0x59,
+ 0xc6, 0x99, 0x44, 0x9f, 0x02, 0x95, 0xd9, 0x02, 0x86, 0x4a, 0x1f, 0x59,
0xc5, 0xc0, 0x66, 0x45, 0x1f, 0x58, 0x7a, 0x1f, 0x58, 0x71, 0x1f, 0xd8,
- 0xe0, 0xc1, 0xcc, 0xd8, 0x05, 0x0c, 0x25, 0x0f, 0x8b, 0x79, 0x1f, 0x59,
+ 0xe0, 0xc6, 0x30, 0xd8, 0x05, 0x0c, 0x25, 0x0f, 0x8b, 0x79, 0x1f, 0x59,
0x44, 0x1f, 0x59, 0x4a, 0x1f, 0x58, 0xe7, 0xc0, 0x48, 0x73, 0x1f, 0x58,
0x79, 0x1f, 0x59, 0x48, 0x1f, 0x58, 0x6f, 0x9f, 0x02, 0x8a, 0x5b, 0x4c,
- 0x9f, 0x02, 0x8f, 0x5b, 0xc3, 0xe0, 0xc4, 0x33, 0x59, 0x4a, 0x9f, 0x02,
- 0x85, 0x59, 0xc7, 0xe0, 0xc4, 0x29, 0xd8, 0xe0, 0xc2, 0x0c, 0x6c, 0x1f,
- 0x58, 0x72, 0x1f, 0x58, 0x67, 0x1f, 0x58, 0x66, 0x1f, 0xd8, 0xe0, 0xa3,
- 0xce, 0x68, 0x1f, 0x58, 0x6d, 0x1f, 0x58, 0x71, 0x1f, 0x59, 0xca, 0x88,
- 0x67, 0x1f, 0x58, 0x71, 0x1f, 0x58, 0x6f, 0x1f, 0x59, 0xc6, 0xe0, 0xc3,
- 0xfe, 0xd8, 0x02, 0x90, 0x71, 0x1f, 0x58, 0x67, 0x1f, 0x59, 0x45, 0x1f,
- 0x59, 0x43, 0x1f, 0x59, 0xc8, 0xe0, 0xc3, 0xeb, 0x68, 0x1f, 0x59, 0x48,
- 0x1f, 0x58, 0x78, 0x1f, 0x58, 0x68, 0x1f, 0x59, 0xca, 0xe0, 0xc3, 0xdb,
+ 0x9f, 0x02, 0x8f, 0x5b, 0xc3, 0xe0, 0xc8, 0xea, 0x59, 0x4a, 0x9f, 0x02,
+ 0x85, 0x59, 0xc7, 0xe0, 0xc8, 0xe0, 0xd8, 0xe0, 0xc6, 0x70, 0x6c, 0x1f,
+ 0x58, 0x72, 0x1f, 0x58, 0x67, 0x1f, 0x58, 0x66, 0x1f, 0xd8, 0xe0, 0xa7,
+ 0x53, 0x68, 0x1f, 0x58, 0x6d, 0x1f, 0x58, 0x71, 0x1f, 0x59, 0xca, 0x88,
+ 0x67, 0x1f, 0x58, 0x71, 0x1f, 0x58, 0x6f, 0x1f, 0x59, 0xc6, 0xe0, 0xc8,
+ 0xb5, 0xd8, 0x02, 0x90, 0x71, 0x1f, 0x58, 0x67, 0x1f, 0x59, 0x45, 0x1f,
+ 0x59, 0x43, 0x1f, 0x59, 0xc8, 0xe0, 0xc8, 0xa2, 0x68, 0x1f, 0x59, 0x48,
+ 0x1f, 0x58, 0x78, 0x1f, 0x58, 0x68, 0x1f, 0x59, 0xca, 0xe0, 0xc8, 0x92,
0xd7, 0x05, 0x0a, 0x05, 0x0b, 0x8d, 0x67, 0x1f, 0x57, 0x55, 0x1f, 0x57,
- 0xdd, 0xe0, 0xc3, 0xcb, 0x66, 0x1f, 0x57, 0xd4, 0x88, 0x5e, 0x1f, 0x57,
+ 0xdd, 0xe0, 0xc8, 0x82, 0x66, 0x1f, 0x57, 0xd4, 0x88, 0x5e, 0x1f, 0x57,
0x5e, 0x1f, 0x57, 0x69, 0x1f, 0x57, 0xdc, 0x9e, 0x59, 0x1f, 0x57, 0x69,
0x1f, 0xd7, 0x02, 0x9e, 0x55, 0x1f, 0x57, 0xd1, 0x91, 0x50, 0x1f, 0x57,
0x67, 0x1f, 0x57, 0x53, 0x1f, 0x57, 0x5e, 0x1f, 0x57, 0x59, 0x1f, 0x57,
0x54, 0x2e, 0x1f, 0x57, 0x59, 0x1f, 0x57, 0x69, 0x1f, 0x57, 0x68, 0x1f,
- 0x57, 0x50, 0x1f, 0x57, 0xdc, 0xe0, 0xc3, 0x8b, 0x55, 0x70, 0x1f, 0x55,
- 0x61, 0x1f, 0xd5, 0xe0, 0xc2, 0x81, 0x52, 0x5b, 0x1f, 0x50, 0x70, 0x1f,
- 0xd0, 0xe0, 0xc1, 0x07, 0xd1, 0x04, 0x03, 0x0d, 0xb0, 0xcf, 0xc1, 0x00,
- 0x43, 0x1f, 0xd0, 0x03, 0xc0, 0x50, 0x7a, 0x1f, 0x51, 0xc0, 0xe0, 0xc3,
- 0x62, 0x41, 0x9f, 0x03, 0xc1, 0x06, 0xd0, 0x03, 0x06, 0x89, 0x7f, 0x1f,
+ 0x57, 0x50, 0x1f, 0x57, 0xdc, 0xe0, 0xc8, 0x42, 0x55, 0x70, 0x1f, 0x55,
+ 0x61, 0x1f, 0xd5, 0xe0, 0xc6, 0xee, 0x52, 0x5b, 0x1f, 0x50, 0x70, 0x1f,
+ 0xd0, 0xe0, 0xc5, 0x6b, 0xd1, 0x04, 0x03, 0x0d, 0xb0, 0xcf, 0xc1, 0x00,
+ 0x43, 0x1f, 0xd0, 0x03, 0xc0, 0x50, 0x7a, 0x1f, 0x51, 0xc0, 0xe0, 0xc8,
+ 0x19, 0x41, 0x9f, 0x03, 0xc1, 0x06, 0xd0, 0x03, 0x06, 0x89, 0x7f, 0x1f,
0x50, 0xf1, 0xc0, 0xe4, 0x7e, 0x1f, 0x51, 0x47, 0x1f, 0x50, 0xf8, 0xc0,
0xdb, 0x70, 0x1f, 0xd0, 0x02, 0x8c, 0x7c, 0x1f, 0x50, 0x70, 0x1f, 0x51,
- 0x40, 0x1f, 0x50, 0xf0, 0xc0, 0xca, 0x79, 0x1f, 0x51, 0xc2, 0xe0, 0xc3,
- 0x32, 0x40, 0x1f, 0xd1, 0x02, 0x84, 0xc4, 0xe0, 0xc3, 0x29, 0x43, 0x1f,
- 0x51, 0xc1, 0xe0, 0xc3, 0x22, 0xd0, 0x08, 0x02, 0x2c, 0x31, 0x2a, 0x07,
+ 0x40, 0x1f, 0x50, 0xf0, 0xc0, 0xca, 0x79, 0x1f, 0x51, 0xc2, 0xe0, 0xc7,
+ 0xe9, 0x40, 0x1f, 0xd1, 0x02, 0x84, 0xc4, 0xe0, 0xc7, 0xe0, 0x43, 0x1f,
+ 0x51, 0xc1, 0xe0, 0xc7, 0xd9, 0xd0, 0x08, 0x02, 0x2c, 0x31, 0x2a, 0x07,
0x0c, 0x9d, 0xff, 0xa8, 0x7e, 0x9f, 0x02, 0x8f, 0x51, 0x40, 0x1f, 0x50,
- 0xf3, 0x04, 0xe0, 0xc3, 0x07, 0x2e, 0x1f, 0xd1, 0x40, 0x99, 0x95, 0xd0,
+ 0xf3, 0x04, 0xe0, 0xc7, 0xbe, 0x2e, 0x1f, 0xd1, 0x40, 0x99, 0x95, 0xd0,
0x03, 0x0c, 0x83, 0x7d, 0x1f, 0x50, 0x7b, 0x1f, 0x50, 0x70, 0x1f, 0x50,
0x79, 0x9f, 0xaa, 0xf4, 0xc0, 0x97, 0x71, 0x1f, 0x51, 0xc0, 0xc0, 0x91,
0x7c, 0x9f, 0x02, 0x87, 0x51, 0x41, 0x1f, 0x50, 0xfa, 0xc0, 0x71, 0xd0,
0x03, 0x16, 0x86, 0x7e, 0x9f, 0x02, 0x8d, 0x51, 0x41, 0x1f, 0x50, 0x7a,
- 0x1f, 0x50, 0x72, 0x1f, 0xd0, 0xe0, 0xc1, 0x2e, 0x50, 0xfd, 0xe0, 0xc2,
- 0xc6, 0x7a, 0x1f, 0xd0, 0xe0, 0xc1, 0x02, 0x78, 0x1f, 0x51, 0xc0, 0xc0,
+ 0x1f, 0x50, 0x72, 0x1f, 0xd0, 0xe0, 0xc5, 0x92, 0x50, 0xfd, 0xe0, 0xc7,
+ 0x7d, 0x7a, 0x1f, 0xd0, 0xe0, 0xc5, 0x66, 0x78, 0x1f, 0x51, 0xc0, 0xc0,
0x4b, 0x7a, 0x9f, 0x02, 0x89, 0x51, 0x40, 0x1f, 0x51, 0x4b, 0x1f, 0x50,
- 0xfc, 0xbd, 0xd0, 0x02, 0x88, 0x7e, 0x1f, 0x50, 0xfc, 0x35, 0xe0, 0xc2,
- 0x6e, 0x70, 0x1f, 0x51, 0x42, 0x1f, 0x50, 0x7e, 0x1f, 0x50, 0x7b, 0x1f,
- 0x50, 0x78, 0x1f, 0xd0, 0xe0, 0xc0, 0x1d, 0x75, 0x1f, 0x51, 0xce, 0xe0,
- 0xc2, 0x89, 0x74, 0x1f, 0x50, 0x75, 0x1f, 0x51, 0x42, 0x1f, 0xd0, 0xe0,
- 0xba, 0xfb, 0x71, 0x1f, 0xd0, 0x05, 0x11, 0xe0, 0xbf, 0xf8, 0x78, 0x1f,
+ 0xfc, 0xbd, 0xd0, 0x02, 0x88, 0x7e, 0x1f, 0x50, 0xfc, 0x35, 0xe0, 0xc7,
+ 0x25, 0x70, 0x1f, 0x51, 0x42, 0x1f, 0x50, 0x7e, 0x1f, 0x50, 0x7b, 0x1f,
+ 0x50, 0x78, 0x1f, 0xd0, 0xe0, 0xc4, 0x81, 0x75, 0x1f, 0x51, 0xce, 0xe0,
+ 0xc7, 0x40, 0x74, 0x1f, 0x50, 0x75, 0x1f, 0x51, 0x42, 0x1f, 0xd0, 0xe0,
+ 0xbf, 0x21, 0x71, 0x1f, 0xd0, 0x05, 0x11, 0xe0, 0xc4, 0x5c, 0x78, 0x1f,
0x50, 0x77, 0x2e, 0x1f, 0x51, 0x40, 0x1f, 0x51, 0x43, 0x1f, 0x51, 0xc1,
- 0xe0, 0xc2, 0x60, 0x75, 0x1f, 0xd0, 0x9c, 0x70, 0x1f, 0x50, 0x7a, 0x2e,
- 0x1f, 0x51, 0x41, 0x1f, 0x51, 0x40, 0x1f, 0xd0, 0xe0, 0xa2, 0x08, 0x4e,
- 0x75, 0x9f, 0x02, 0x85, 0x4f, 0xc5, 0xe0, 0xc2, 0x46, 0x4e, 0xfb, 0xe0,
- 0xc2, 0x41, 0x44, 0x4d, 0x1f, 0x43, 0xe1, 0xe0, 0xaa, 0x21, 0xc3, 0x03,
- 0x28, 0xa7, 0xf8, 0x05, 0x08, 0x04, 0x06, 0x8c, 0xf9, 0x60, 0x44, 0xdc,
- 0x11, 0xe0, 0x71, 0x95, 0xf6, 0xe0, 0x52, 0x48, 0x73, 0x74, 0xf2, 0xe0,
- 0x45, 0xf6, 0xf2, 0x04, 0xe0, 0xb5, 0x5e, 0xf3, 0x60, 0x95, 0xb1, 0xe0,
- 0x26, 0x3a, 0xeb, 0xe0, 0x8d, 0xdb, 0xe5, 0x09, 0x08, 0x05, 0x0c, 0x60,
- 0x93, 0xf3, 0xde, 0x4e, 0xf3, 0x60, 0xb6, 0x8a, 0x47, 0x20, 0xc2, 0xc0,
- 0xed, 0x60, 0xba, 0x59, 0x84, 0xec, 0x07, 0x60, 0x81, 0x42, 0xe0, 0x3f,
- 0x14, 0xe7, 0xe0, 0x47, 0x77, 0xeb, 0xe0, 0xbb, 0xac, 0xe1, 0x02, 0x8b,
- 0xec, 0x02, 0x84, 0xf4, 0xe0, 0x83, 0x52, 0xe1, 0xe0, 0xbb, 0x62, 0x6b,
- 0x1f, 0x45, 0xcb, 0xe0, 0xbb, 0xa3, 0xfa, 0x13, 0x0e, 0x04, 0x10, 0x0b,
- 0x04, 0x04, 0x12, 0x0d, 0x0c, 0x53, 0x50, 0x60, 0x84, 0x04, 0x60, 0x27,
- 0x96, 0x9e, 0xf5, 0x02, 0x85, 0x73, 0xe8, 0xe0, 0xb5, 0x46, 0x65, 0x72,
- 0xe9, 0xe0, 0xac, 0x12, 0xf4, 0xe0, 0xa6, 0xa3, 0xf0, 0x02, 0x86, 0x69,
- 0x73, 0xe4, 0xe0, 0x33, 0x3d, 0xae, 0x60, 0x84, 0x75, 0xe0, 0x22, 0x22,
- 0xef, 0x04, 0xe0, 0xab, 0x75, 0x6d, 0x62, 0xe9, 0xe0, 0xb2, 0xa3, 0xec,
- 0xe0, 0xa2, 0xd2, 0xe9, 0xe0, 0xbf, 0xeb, 0xe8, 0x02, 0x86, 0x79, 0x74,
- 0x6f, 0x6d, 0xf9, 0x86, 0x69, 0x74, 0x6f, 0x6d, 0x69, 0xf2, 0xe0, 0xa6,
- 0x6e, 0x67, 0x6f, 0xf2, 0x04, 0xe0, 0xb2, 0x88, 0x7a, 0x65, 0xec, 0xe0,
- 0xac, 0x1b, 0xe5, 0x04, 0xe0, 0xbf, 0xd5, 0x6e, 0x74, 0x73, 0xf5, 0xe0,
- 0x6d, 0x8f, 0xe1, 0x0a, 0x06, 0x19, 0x08, 0x12, 0x05, 0x0a, 0xe0, 0x26,
- 0x82, 0xf2, 0x60, 0xb4, 0xa3, 0xcb, 0x04, 0xf0, 0x03, 0x05, 0x84, 0x74,
- 0xef, 0xe0, 0xad, 0x7a, 0xf0, 0xe0, 0x9f, 0xe4, 0x6f, 0x72, 0x69, 0x7a,
- 0x68, 0x7a, 0xe8, 0x58, 0x4f, 0xe0, 0x21, 0x45, 0x6d, 0xe1, 0x60, 0x82,
- 0xfa, 0xe0, 0x39, 0x71, 0xeb, 0x02, 0x87, 0x6f, 0x70, 0x61, 0xee, 0xe0,
- 0x86, 0xeb, 0x61, 0x72, 0x70, 0x61, 0x74, 0xf4, 0xd8, 0x32, 0x67, 0xe1,
- 0xe0, 0xaf, 0x78, 0x63, 0x68, 0x70, 0x6f, 0x6d, 0x6f, 0xf2, 0xe0, 0xbc,
- 0x4f, 0xae, 0x60, 0x83, 0x1d, 0x60, 0x3b, 0x1a, 0x42, 0xac, 0x9c, 0xf9,
- 0x0f, 0x40, 0x4d, 0x40, 0xc1, 0x09, 0x04, 0x0a, 0x2a, 0x60, 0x95, 0x98,
- 0xe0, 0x28, 0x48, 0xf5, 0x0d, 0x07, 0x0b, 0x0d, 0x0d, 0x0a, 0x04, 0x60,
- 0x7c, 0xaa, 0xe0, 0x42, 0xc1, 0x7a, 0xe1, 0x60, 0x72, 0x5d, 0xd7, 0x4b,
- 0x73, 0xf5, 0x04, 0xe0, 0xb9, 0x78, 0x68, 0xe1, 0xe0, 0x52, 0xd9, 0xf2,
- 0x04, 0xe0, 0xb6, 0x1f, 0x69, 0x68, 0x6f, 0x6e, 0xea, 0xe0, 0x8a, 0x20,
- 0xeb, 0x04, 0xe0, 0xa5, 0x49, 0x75, 0x68, 0x61, 0x73, 0xe8, 0xe0, 0x77,
- 0xff, 0x67, 0x61, 0x77, 0xe1, 0x60, 0x73, 0x2f, 0xe0, 0x48, 0x14, 0xe6,
- 0xe0, 0xae, 0xca, 0x61, 0xf3, 0xe0, 0xb5, 0xfa, 0xef, 0x0d, 0x0a, 0x0a,
- 0x22, 0x09, 0x16, 0x0c, 0x05, 0x3d, 0x09, 0xe0, 0x75, 0x11, 0xf5, 0x04,
- 0xe0, 0xc0, 0x8d, 0x74, 0xf5, 0xe0, 0xbe, 0x57, 0x74, 0x73, 0x75, 0x6b,
- 0x61, 0x69, 0xe4, 0xe0, 0xbe, 0xa2, 0x73, 0x68, 0xe9, 0x08, 0x0b, 0x04,
- 0x60, 0x6d, 0x57, 0xdc, 0x6d, 0x6e, 0xef, 0x04, 0xe0, 0xb8, 0x12, 0x67,
- 0xe1, 0xe0, 0x78, 0x67, 0xeb, 0xe0, 0x48, 0x04, 0x64, 0x61, 0x2e, 0xf3,
- 0x60, 0xb5, 0xf8, 0x88, 0xf2, 0x04, 0xe0, 0x85, 0x60, 0xe9, 0xe0, 0x71,
- 0x61, 0xee, 0x05, 0x04, 0xe0, 0x89, 0xb8, 0xe5, 0xe0, 0x49, 0x71, 0xe1,
- 0x04, 0xe0, 0x81, 0x23, 0xe7, 0x60, 0x34, 0xe3, 0xe0, 0x86, 0xc5, 0xed,
- 0x02, 0x85, 0x69, 0xf4, 0xe0, 0x86, 0xa6, 0xe2, 0xe0, 0x60, 0x7e, 0x6c,
- 0xe1, 0xe0, 0x2d, 0x5c, 0xeb, 0x03, 0x21, 0x88, 0xef, 0x06, 0x04, 0x10,
- 0xe0, 0x48, 0xe3, 0xfa, 0xe0, 0x6b, 0x8c, 0xf3, 0x04, 0xe0, 0x7d, 0x07,
- 0x68, 0x69, 0x62, 0x61, 0x68, 0x69, 0x6b, 0xe1, 0xe0, 0x6b, 0x45, 0x68,
- 0x61, 0xed, 0xe0, 0x52, 0x54, 0x6b, 0x61, 0x69, 0x63, 0xe8, 0xe0, 0x68,
- 0xc8, 0xe1, 0x07, 0x60, 0x77, 0x59, 0xe0, 0x43, 0xc5, 0x69, 0x63, 0x68,
- 0x69, 0xe2, 0xe0, 0x80, 0x11, 0xe9, 0x04, 0xe0, 0x69, 0xff, 0xf4, 0xe0,
- 0x71, 0x6a, 0x64, 0x6f, 0x62, 0xe1, 0xe0, 0x58, 0x2b, 0xee, 0x04, 0xe0,
- 0xac, 0x6b, 0xe8, 0xe0, 0xbf, 0x47, 0xeb, 0xe0, 0xbe, 0x2c, 0xe5, 0x04,
- 0xe0, 0xbf, 0xcd, 0x6e, 0xe2, 0xe0, 0x97, 0xd2, 0x62, 0x6f, 0xae, 0x05,
- 0x06, 0x08, 0x08, 0x86, 0x74, 0x72, 0xe1, 0xe0, 0xbf, 0x1d, 0x73, 0x63,
- 0x69, 0x65, 0xee, 0xe0, 0xa0, 0x5e, 0x72, 0x65, 0x76, 0x69, 0xe5, 0xe0,
- 0xab, 0x30, 0x70, 0x61, 0xf2, 0xe0, 0x53, 0xd2, 0x66, 0x61, 0xe9, 0xe0,
- 0x7a, 0x15, 0xe1, 0x11, 0x0e, 0x17, 0x20, 0x07, 0x12, 0x40, 0x92, 0x0b,
- 0x10, 0x09, 0x0f, 0x04, 0x16, 0xe0, 0xa2, 0x67, 0x77, 0xe1, 0x04, 0xe0,
- 0x6a, 0xec, 0x74, 0xe1, 0x60, 0x4d, 0x81, 0xe0, 0x63, 0xce, 0xf4, 0x02,
- 0x8f, 0x73, 0xf5, 0x02, 0x87, 0x73, 0x68, 0x69, 0xf2, 0xe0, 0xb4, 0xfb,
- 0xeb, 0xe0, 0x7f, 0xdb, 0x6f, 0xed, 0xe0, 0xba, 0x20, 0xf3, 0x05, 0x10,
- 0xe0, 0x77, 0x95, 0xf5, 0x07, 0x04, 0x60, 0xb9, 0x9d, 0xc0, 0x66, 0xef,
- 0xe0, 0x77, 0x9d, 0xe4, 0xe0, 0x55, 0x63, 0x68, 0xe9, 0x04, 0xe0, 0x88,
- 0xba, 0xf2, 0xe0, 0xb9, 0x18, 0xef, 0x60, 0x6a, 0xef, 0xe0, 0x52, 0x82,
- 0xee, 0x02, 0x89, 0x64, 0x65, 0xf8, 0x60, 0x6f, 0x14, 0xe0, 0x50, 0x26,
- 0xe1, 0x60, 0x34, 0x11, 0xd8, 0xbc, 0xed, 0x04, 0xe0, 0x63, 0xf8, 0xe1,
- 0x09, 0x05, 0x04, 0x25, 0x07, 0x1f, 0x06, 0x06, 0x98, 0x7a, 0xef, 0xe0,
- 0x57, 0x60, 0xf8, 0xe0, 0x9a, 0xca, 0xf4, 0x02, 0x85, 0x73, 0xf5, 0xe0,
- 0x65, 0xba, 0xef, 0x03, 0x07, 0x87, 0x74, 0x61, 0x6b, 0xe1, 0xe0, 0x42,
- 0x44, 0x6b, 0x6f, 0x72, 0xe9, 0xe0, 0x6b, 0xd6, 0xae, 0x04, 0xe0, 0xb9,
- 0x8c, 0xeb, 0x60, 0xb7, 0xa5, 0xc2, 0x90, 0x73, 0x68, 0x69, 0xee, 0xe0,
- 0x88, 0x09, 0xee, 0x02, 0x8b, 0xef, 0x02, 0x84, 0xf5, 0xe0, 0x2d, 0x46,
- 0xe2, 0xe0, 0x7c, 0xa0, 0xe1, 0x02, 0x89, 0x73, 0x68, 0x69, 0xae, 0x60,
- 0xa2, 0x8f, 0xda, 0x9b, 0x6b, 0xe1, 0xe0, 0x88, 0x52, 0x6d, 0x6f, 0xf4,
- 0xe0, 0x24, 0x43, 0x6b, 0x69, 0xf4, 0xe0, 0xb9, 0xfe, 0xe7, 0x04, 0xe0,
- 0xbc, 0xaa, 0xe1, 0x04, 0xe0, 0xb7, 0x62, 0x74, 0x61, 0xae, 0x60, 0xb3,
- 0x89, 0x42, 0x51, 0x41, 0x47, 0x44, 0x7e, 0xc1, 0x68, 0x64, 0x61, 0xae,
- 0x60, 0x88, 0x5a, 0x60, 0x2a, 0xbc, 0xc0, 0x6b, 0xec, 0x02, 0x84, 0xf4,
- 0xe0, 0x9c, 0x2c, 0xe9, 0xe0, 0xa5, 0xcd, 0xeb, 0x02, 0x89, 0x75, 0x6d,
- 0x6f, 0xae, 0x60, 0xb8, 0xd5, 0xc4, 0x01, 0x61, 0xe7, 0xd4, 0x06, 0xe9,
- 0x04, 0xe0, 0x68, 0xe5, 0xf4, 0xe0, 0xb2, 0xf5, 0xe8, 0x05, 0x04, 0xe0,
- 0x22, 0x24, 0xe9, 0xe0, 0x52, 0x44, 0x61, 0xe2, 0xe0, 0x56, 0x36, 0x65,
- 0xf3, 0xd8, 0xec, 0x63, 0xe8, 0x04, 0xe0, 0xb4, 0xdc, 0xe9, 0x02, 0x88,
- 0x79, 0x6f, 0xae, 0x60, 0xb6, 0xc8, 0xc5, 0xb4, 0x6d, 0xe1, 0xe0, 0x4f,
- 0x2a, 0x62, 0xf5, 0x60, 0x6f, 0x1f, 0xe0, 0x4a, 0x55, 0xf8, 0x10, 0x06,
- 0x09, 0x07, 0x50, 0x16, 0x04, 0x0c, 0x06, 0x0e, 0x05, 0x08, 0x07, 0xe0,
- 0x6f, 0x4d, 0xf9, 0x60, 0xa5, 0x03, 0xd6, 0xbf, 0xf8, 0x04, 0xe0, 0xb6,
- 0xa9, 0xae, 0xe0, 0xab, 0x21, 0x73, 0x34, 0x61, 0x6c, 0xec, 0xda, 0x23,
- 0xee, 0x03, 0xda, 0x34, 0x2d, 0xad, 0x3a, 0x1f, 0x40, 0x43, 0x21, 0x2e,
+ 0xe0, 0xc6, 0xe8, 0x75, 0x1f, 0xd0, 0x9c, 0x70, 0x1f, 0x50, 0x7a, 0x2e,
+ 0x1f, 0x51, 0x41, 0x1f, 0x51, 0x40, 0x1f, 0xd0, 0xe0, 0xa5, 0x8d, 0x4e,
+ 0x75, 0x9f, 0x02, 0x85, 0x4f, 0xc5, 0xe0, 0xc6, 0xfd, 0x4e, 0xfb, 0xe0,
+ 0xc6, 0xf8, 0x44, 0x4d, 0x1f, 0x43, 0xe1, 0xe0, 0xae, 0x29, 0xc3, 0x03,
+ 0x28, 0xa7, 0xf8, 0x05, 0x08, 0x04, 0x06, 0x8c, 0xf9, 0x60, 0x46, 0xb5,
+ 0x11, 0xe0, 0x73, 0xfb, 0xf6, 0xe0, 0x54, 0x2b, 0x73, 0x74, 0xf2, 0xe0,
+ 0x47, 0xcd, 0xf2, 0x04, 0xe0, 0xb9, 0x8b, 0xf3, 0x60, 0x98, 0xc7, 0xe0,
+ 0x27, 0x54, 0xeb, 0xe0, 0x90, 0xe9, 0xe5, 0x09, 0x08, 0x05, 0x0c, 0x60,
+ 0x96, 0xe4, 0xdf, 0x5b, 0xf3, 0x60, 0xba, 0xc9, 0x47, 0x10, 0xc2, 0xf5,
+ 0xed, 0x60, 0xbe, 0x7f, 0x84, 0xec, 0x07, 0x60, 0x84, 0x31, 0xe0, 0x40,
+ 0x89, 0xe7, 0xe0, 0x49, 0x4c, 0xeb, 0xe0, 0xbf, 0xdc, 0xe1, 0x02, 0x8b,
+ 0xec, 0x02, 0x84, 0xf4, 0xe0, 0x86, 0x46, 0xe1, 0xe0, 0xbf, 0x92, 0x6b,
+ 0x1f, 0x45, 0xcb, 0xe0, 0xbf, 0xd3, 0xfa, 0x13, 0x0e, 0x04, 0x10, 0x0b,
+ 0x04, 0x04, 0x12, 0x0d, 0x13, 0x53, 0x53, 0x60, 0x87, 0x13, 0x60, 0x28,
+ 0xe1, 0x9e, 0xf5, 0x02, 0x85, 0x73, 0xe8, 0xe0, 0xb9, 0x73, 0x65, 0x72,
+ 0xe9, 0xe0, 0xb0, 0x28, 0xf4, 0xe0, 0xaa, 0x77, 0xf0, 0x02, 0x86, 0x69,
+ 0x73, 0xe4, 0xe0, 0x34, 0x5f, 0xae, 0x60, 0x87, 0x62, 0xe0, 0x23, 0x09,
+ 0xef, 0x04, 0xe0, 0xaf, 0x86, 0x6d, 0x62, 0xe9, 0xe0, 0xb6, 0xa1, 0xec,
+ 0xe0, 0xa6, 0x7b, 0xe9, 0xe0, 0xc4, 0x4f, 0xe8, 0x02, 0x86, 0x79, 0x74,
+ 0x6f, 0x6d, 0xf9, 0x86, 0x69, 0x74, 0x6f, 0x6d, 0x69, 0xf2, 0xe0, 0xaa,
+ 0x42, 0x67, 0x6f, 0xf2, 0x04, 0xe0, 0xb6, 0x86, 0x7a, 0x65, 0xec, 0xe0,
+ 0xb0, 0x35, 0xe5, 0x05, 0x07, 0xe0, 0xc4, 0x3a, 0x6e, 0x74, 0x73, 0xf5,
+ 0xe0, 0x70, 0x41, 0x61, 0x62, 0xf5, 0xe0, 0x96, 0x91, 0xe1, 0x0a, 0x06,
+ 0x1c, 0x08, 0x12, 0x05, 0x0a, 0xe0, 0x27, 0x12, 0xf2, 0x60, 0xb8, 0xc9,
+ 0xcb, 0x3b, 0xf0, 0x06, 0x05, 0x04, 0xe0, 0xad, 0x5a, 0x74, 0xef, 0xe0,
+ 0xb1, 0x8d, 0xf0, 0xe0, 0xa3, 0x63, 0x6f, 0x72, 0x69, 0x7a, 0x68, 0x7a,
+ 0xe8, 0x58, 0xaa, 0xe0, 0x22, 0x4d, 0x6d, 0xe1, 0x60, 0x85, 0xe4, 0xe0,
+ 0x3a, 0xac, 0xeb, 0x02, 0x87, 0x6f, 0x70, 0x61, 0xee, 0xe0, 0x89, 0xdf,
+ 0x61, 0x72, 0x70, 0x61, 0x74, 0xf4, 0xd8, 0x8d, 0x67, 0xe1, 0xe0, 0xb3,
+ 0x95, 0x63, 0x68, 0x70, 0x6f, 0x6d, 0x6f, 0xf2, 0xe0, 0xc0, 0x74, 0xae,
+ 0x60, 0x85, 0xff, 0x60, 0x3c, 0x90, 0x42, 0xc2, 0xac, 0xf9, 0x0f, 0x40,
+ 0x4d, 0x40, 0xc1, 0x09, 0x04, 0x0a, 0x2a, 0x60, 0x98, 0xa7, 0xe0, 0x29,
+ 0x93, 0xf5, 0x0d, 0x07, 0x0b, 0x0d, 0x0d, 0x0a, 0x04, 0x60, 0x7f, 0x88,
+ 0xe0, 0x44, 0x46, 0x7a, 0xe1, 0x60, 0x75, 0x01, 0xd7, 0xa6, 0x73, 0xf5,
+ 0x04, 0xe0, 0xbd, 0x94, 0x68, 0xe1, 0xe0, 0x54, 0xb3, 0xf2, 0x04, 0xe0,
+ 0xba, 0x54, 0x69, 0x68, 0x6f, 0x6e, 0xea, 0xe0, 0x8d, 0x20, 0xeb, 0x04,
+ 0xe0, 0xa9, 0x13, 0x75, 0x68, 0x61, 0x73, 0xe8, 0xe0, 0x7a, 0xc4, 0x67,
+ 0x61, 0x77, 0xe1, 0x60, 0x75, 0xd3, 0xe0, 0x49, 0x96, 0xe6, 0xe0, 0xb2,
+ 0xe7, 0x61, 0xf3, 0xe0, 0xba, 0x2f, 0xef, 0x0d, 0x0a, 0x0a, 0x22, 0x09,
+ 0x16, 0x0c, 0x05, 0x3d, 0x09, 0xe0, 0x77, 0xd7, 0xf5, 0x04, 0xe0, 0xc5,
+ 0x3a, 0x74, 0xf5, 0xe0, 0xc2, 0xb1, 0x74, 0x73, 0x75, 0x6b, 0x61, 0x69,
+ 0xe4, 0xe0, 0xc2, 0xfc, 0x73, 0x68, 0xe9, 0x08, 0x0b, 0x04, 0x60, 0x70,
+ 0x00, 0xdc, 0xc4, 0x6e, 0xef, 0x04, 0xe0, 0xbc, 0x2e, 0x67, 0xe1, 0xe0,
+ 0x7b, 0x2d, 0xeb, 0xe0, 0x49, 0xe0, 0x64, 0x61, 0x2e, 0xf3, 0x60, 0xba,
+ 0x3b, 0x88, 0xf2, 0x04, 0xe0, 0x88, 0x50, 0xe9, 0xe0, 0x74, 0x05, 0xee,
+ 0x05, 0x04, 0xe0, 0x8c, 0xb8, 0xe5, 0xe0, 0x4b, 0x72, 0xe1, 0x04, 0xe0,
+ 0x84, 0x08, 0xe7, 0x60, 0x35, 0xfb, 0xe0, 0x89, 0xd2, 0xed, 0x02, 0x85,
+ 0x69, 0xf4, 0xe0, 0x89, 0x98, 0xe2, 0xe0, 0x62, 0x97, 0x6c, 0xe1, 0xe0,
+ 0x2e, 0x47, 0xeb, 0x03, 0x21, 0x88, 0xef, 0x06, 0x04, 0x10, 0xe0, 0x4a,
+ 0xc5, 0xfa, 0xe0, 0x6e, 0x35, 0xf3, 0x04, 0xe0, 0x7f, 0xdc, 0x68, 0x69,
+ 0x62, 0x61, 0x68, 0x69, 0x6b, 0xe1, 0xe0, 0x6d, 0xee, 0x68, 0x61, 0xed,
+ 0xe0, 0x54, 0x2e, 0x6b, 0x61, 0x69, 0x63, 0xe8, 0xe0, 0x6b, 0x50, 0xe1,
+ 0x07, 0x60, 0x7a, 0x1e, 0xe0, 0x45, 0x25, 0x69, 0x63, 0x68, 0x69, 0xe2,
+ 0xe0, 0x82, 0xf6, 0xe9, 0x04, 0xe0, 0x6c, 0xa8, 0xf4, 0xe0, 0x74, 0x0e,
+ 0x64, 0x6f, 0x62, 0xe1, 0xe0, 0x5a, 0x51, 0xee, 0x04, 0xe0, 0xb0, 0x80,
+ 0xe8, 0xe0, 0xc3, 0xba, 0xeb, 0xe0, 0xc2, 0x86, 0xe5, 0x04, 0xe0, 0xc4,
+ 0x7a, 0x6e, 0xe2, 0xe0, 0x9a, 0xe6, 0x62, 0x6f, 0xae, 0x05, 0x06, 0x08,
+ 0x08, 0x86, 0x74, 0x72, 0xe1, 0xe0, 0xc3, 0x92, 0x73, 0x63, 0x69, 0x65,
+ 0xee, 0xe0, 0xa3, 0xfe, 0x72, 0x65, 0x76, 0x69, 0xe5, 0xe0, 0xaf, 0x41,
+ 0x70, 0x61, 0xf2, 0xe0, 0x55, 0xc9, 0x66, 0x61, 0xe9, 0xe0, 0x7c, 0xf1,
+ 0xe1, 0x11, 0x0e, 0x17, 0x20, 0x07, 0x12, 0x40, 0x92, 0x0b, 0x10, 0x09,
+ 0x0f, 0x04, 0x16, 0xe0, 0xa6, 0x31, 0x77, 0xe1, 0x04, 0xe0, 0x6d, 0x95,
+ 0x74, 0xe1, 0x60, 0x4f, 0x5a, 0xe0, 0x65, 0xff, 0xf4, 0x02, 0x8f, 0x73,
+ 0xf5, 0x02, 0x87, 0x73, 0x68, 0x69, 0xf2, 0xe0, 0xb9, 0x3e, 0xeb, 0xe0,
+ 0x82, 0xc0, 0x6f, 0xed, 0xe0, 0xbe, 0x45, 0xf3, 0x05, 0x10, 0xe0, 0x7a,
+ 0x5d, 0xf5, 0x07, 0x04, 0x60, 0xbd, 0xc3, 0xc0, 0x65, 0xef, 0xe0, 0x7a,
+ 0x65, 0xe4, 0xe0, 0x57, 0x81, 0x68, 0xe9, 0x04, 0xe0, 0x8b, 0xba, 0xf2,
+ 0xe0, 0xbd, 0x3e, 0xef, 0x60, 0x6d, 0x98, 0xe0, 0x54, 0x33, 0xee, 0x02,
+ 0x89, 0x64, 0x65, 0xf8, 0x60, 0x9a, 0xd9, 0xe0, 0x29, 0x0e, 0xe1, 0x60,
+ 0x35, 0x29, 0xd9, 0x75, 0xed, 0x04, 0xe0, 0x66, 0x7e, 0xe1, 0x09, 0x05,
+ 0x04, 0x25, 0x07, 0x1f, 0x06, 0x06, 0x98, 0x7a, 0xef, 0xe0, 0x59, 0x86,
+ 0xf8, 0xe0, 0x9d, 0xf0, 0xf4, 0x02, 0x85, 0x73, 0xf5, 0xe0, 0x68, 0x42,
+ 0xef, 0x03, 0x07, 0x87, 0x74, 0x61, 0x6b, 0xe1, 0xe0, 0x44, 0x11, 0x6b,
+ 0x6f, 0x72, 0xe9, 0xe0, 0x6e, 0x7f, 0xae, 0x04, 0xe0, 0xbd, 0xb2, 0xeb,
+ 0x60, 0xbb, 0xc1, 0xc2, 0x99, 0x73, 0x68, 0x69, 0xee, 0xe0, 0x8b, 0x09,
+ 0xee, 0x02, 0x8b, 0xef, 0x02, 0x84, 0xf5, 0xe0, 0x2e, 0x35, 0xe2, 0xe0,
+ 0x7f, 0x75, 0xe1, 0x02, 0x89, 0x73, 0x68, 0x69, 0xae, 0x60, 0xa6, 0x59,
+ 0xdb, 0x2b, 0x6b, 0xe1, 0xe0, 0x8b, 0x52, 0x6d, 0x6f, 0xf4, 0xe0, 0x24,
+ 0xd3, 0x6b, 0x69, 0xf4, 0xe0, 0xbe, 0x23, 0xe7, 0x04, 0xe0, 0xc1, 0x04,
+ 0xe1, 0x04, 0xe0, 0xbb, 0x7e, 0x74, 0x61, 0xae, 0x60, 0xb7, 0xbe, 0x42,
+ 0x38, 0x41, 0x47, 0x44, 0xba, 0xc1, 0x6a, 0x64, 0x61, 0xae, 0x60, 0x8b,
+ 0x5a, 0x60, 0x2b, 0xf1, 0xc0, 0x6b, 0xec, 0x02, 0x84, 0xf4, 0xe0, 0x9f,
+ 0x81, 0xe9, 0xe0, 0xa9, 0xb6, 0xeb, 0x02, 0x89, 0x75, 0x6d, 0x6f, 0xae,
+ 0x60, 0xbc, 0xfb, 0xc4, 0x35, 0x61, 0xe7, 0xd4, 0x36, 0xe9, 0x04, 0xe0,
+ 0x6b, 0x8e, 0xf4, 0xe0, 0xb7, 0x2a, 0xe8, 0x05, 0x04, 0xe0, 0x22, 0xad,
+ 0xe9, 0xe0, 0x54, 0x32, 0x61, 0xe2, 0xe0, 0x58, 0x5b, 0x65, 0xf3, 0xd9,
+ 0x58, 0x63, 0xe8, 0x04, 0xe0, 0xb9, 0x0e, 0xe9, 0x02, 0x88, 0x79, 0x6f,
+ 0xae, 0x60, 0xba, 0xe4, 0xc5, 0xf2, 0x6d, 0xe1, 0xe0, 0x51, 0x04, 0x62,
+ 0xf5, 0x60, 0x71, 0xc3, 0xe0, 0x4b, 0xd6, 0xf8, 0x11, 0x04, 0x07, 0x50,
+ 0x16, 0x0a, 0x04, 0x0c, 0x0e, 0x05, 0x08, 0x07, 0x50, 0x4d, 0xe0, 0x61,
+ 0xf0, 0xf9, 0xe0, 0xc0, 0x1b, 0x73, 0x34, 0x61, 0x6c, 0xec, 0xda, 0xb2,
+ 0xee, 0x03, 0xda, 0xc3, 0x2d, 0xad, 0x3a, 0x1f, 0x40, 0x43, 0x21, 0x2e,
0x40, 0xd6, 0x40, 0x40, 0x40, 0xab, 0x41, 0x05, 0x40, 0xcc, 0x27, 0x31,
0x40, 0x48, 0x40, 0x91, 0x41, 0xb0, 0x40, 0x9c, 0x40, 0xd8, 0x40, 0x48,
0x2f, 0x40, 0xd5, 0x40, 0x91, 0x40, 0xb7, 0x3e, 0x40, 0x50, 0x40, 0x95,
0x41, 0x08, 0x38, 0x32, 0x40, 0x5e, 0x09, 0x25, 0x40, 0x6a, 0x40, 0x67,
0x3a, 0x13, 0xc0, 0x5f, 0xfa, 0x02, 0x96, 0xe6, 0x02, 0x84, 0x72, 0xb1,
0xcb, 0x00, 0x30, 0xe1, 0x02, 0x84, 0x76, 0xf8, 0xcb, 0xe8, 0x6f, 0x36,
- 0x34, 0xe1, 0xe0, 0x93, 0x5f, 0x62, 0x78, 0x30, 0xb2, 0xce, 0x60, 0xf9,
+ 0x34, 0xe1, 0xe0, 0x96, 0x77, 0x62, 0x78, 0x30, 0xb2, 0xce, 0x60, 0xf9,
0x05, 0x11, 0x14, 0x0a, 0x87, 0x73, 0x74, 0x72, 0x65, 0x2d, 0x73, 0x6c,
- 0x69, 0x64, 0x72, 0x65, 0x2d, 0x75, 0xea, 0xe0, 0x31, 0x91, 0xe7, 0x02,
- 0x88, 0x62, 0x69, 0x32, 0x61, 0xed, 0xe0, 0x82, 0xd9, 0x61, 0x72, 0x64,
+ 0x69, 0x64, 0x72, 0x65, 0x2d, 0x75, 0xea, 0xe0, 0x32, 0xb3, 0xe7, 0x02,
+ 0x88, 0x62, 0x69, 0x32, 0x61, 0xed, 0xe0, 0x85, 0xd3, 0x61, 0x72, 0x64,
0x65, 0x6e, 0x2d, 0xf0, 0xc9, 0x0f, 0x66, 0x72, 0x6f, 0x34, 0x69, 0x36,
- 0xb7, 0xe0, 0xbc, 0x04, 0x65, 0x72, 0x2d, 0xfa, 0xe0, 0xb2, 0xbd, 0x39,
- 0x61, 0x33, 0xe1, 0xe0, 0x9d, 0x39, 0xf8, 0x02, 0x98, 0x6b, 0x63, 0xb2,
- 0x02, 0x8b, 0x64, 0x6c, 0x33, 0x61, 0x35, 0x65, 0x65, 0xb0, 0xe0, 0xba,
- 0xde, 0x61, 0x6c, 0x33, 0x68, 0x79, 0xe5, 0xcd, 0x2b, 0x68, 0x71, 0x35,
+ 0xb7, 0xe0, 0xc0, 0x71, 0x65, 0x72, 0x2d, 0xfa, 0xe0, 0xb6, 0xfc, 0x39,
+ 0x61, 0x33, 0xe1, 0xe0, 0xa0, 0xbe, 0xf8, 0x02, 0x98, 0x6b, 0x63, 0xb2,
+ 0x02, 0x8b, 0x64, 0x6c, 0x33, 0x61, 0x35, 0x65, 0x65, 0xb0, 0xe0, 0xbf,
+ 0x42, 0x61, 0x6c, 0x33, 0x68, 0x79, 0xe5, 0xcd, 0x2b, 0x68, 0x71, 0x35,
0xb2, 0xcf, 0x12, 0xf7, 0x03, 0x0a, 0x88, 0x67, 0xe2, 0x02, 0x83, 0xec,
0xc4, 0x66, 0xe8, 0xce, 0x6a, 0x63, 0x76, 0x73, 0x32, 0x32, 0xe4, 0xc9,
- 0x82, 0x34, 0xf2, 0x02, 0x86, 0x73, 0x34, 0xb0, 0xe0, 0xba, 0xf1, 0x38,
- 0x35, 0x65, 0x6c, 0x38, 0x66, 0x68, 0x75, 0x35, 0x64, 0xee, 0xe0, 0xa4,
- 0xf4, 0xf6, 0x07, 0x06, 0x19, 0x19, 0x06, 0x1f, 0xb9, 0x75, 0x71, 0x38,
+ 0x82, 0x34, 0xf2, 0x02, 0x86, 0x73, 0x34, 0xb0, 0xe0, 0xbf, 0x55, 0x38,
+ 0x35, 0x65, 0x6c, 0x38, 0x66, 0x68, 0x75, 0x35, 0x64, 0xee, 0xe0, 0xa8,
+ 0xf2, 0xf6, 0x07, 0x06, 0x19, 0x19, 0x06, 0x1f, 0xb9, 0x75, 0x71, 0x38,
0xb6, 0xce, 0xd6, 0xf2, 0x04, 0x09, 0xc4, 0x55, 0x67, 0x67, 0x74, 0x2d,
- 0x78, 0xf1, 0xe0, 0x8a, 0x3f, 0x65, 0x2d, 0x65, 0x69, 0x6b, 0x65, 0x72,
+ 0x78, 0xf1, 0xe0, 0x8d, 0x56, 0x65, 0x2d, 0x65, 0x69, 0x6b, 0x65, 0x72,
0x2d, 0xeb, 0xc7, 0x41, 0x6c, 0x65, 0x72, 0x2d, 0x71, 0x6f, 0x61, 0xae,
- 0x03, 0xd5, 0xc8, 0x78, 0x6e, 0x2d, 0x2d, 0x73, 0x74, 0x66, 0x6f, 0x6c,
- 0x64, 0x2d, 0xb9, 0xcc, 0x19, 0x68, 0x71, 0xf5, 0xe0, 0xb9, 0x30, 0xe7,
+ 0x03, 0xd6, 0x3a, 0x78, 0x6e, 0x2d, 0x2d, 0x73, 0x74, 0x66, 0x6f, 0x6c,
+ 0x64, 0x2d, 0xb9, 0xcc, 0x19, 0x68, 0x71, 0xf5, 0xe0, 0xbd, 0x75, 0xe7,
0x04, 0x06, 0x09, 0x86, 0x75, 0x34, 0x30, 0xb2, 0xcd, 0x75, 0x73, 0x79,
0x2d, 0x71, 0x6f, 0x61, 0xb0, 0xc6, 0xf8, 0x61, 0x6e, 0x2d, 0xf1, 0xcb,
0x67, 0x2d, 0x79, 0xe9, 0xcb, 0x9f, 0xe5, 0x03, 0x0d, 0x9e, 0x73, 0x74,
- 0x76, 0x67, 0x79, 0x2d, 0x69, 0x78, 0x61, 0xb6, 0xe0, 0xb4, 0x70, 0x72,
+ 0x76, 0x67, 0x79, 0x2d, 0x69, 0x78, 0x61, 0xb6, 0xe0, 0xb8, 0x96, 0x72,
0x6d, 0x67, 0x65, 0x6e, 0x73, 0x62, 0x65, 0x72, 0x61, 0xf4, 0x02, 0x89,
- 0x75, 0x6e, 0x67, 0x2d, 0x70, 0xf7, 0xe0, 0xb2, 0x4d, 0x65, 0x72, 0x2d,
- 0x63, 0xf4, 0xe0, 0xb2, 0x45, 0x67, 0x72, 0x73, 0x68, 0x65, 0x69, 0x2d,
+ 0x75, 0x6e, 0x67, 0x2d, 0x70, 0xf7, 0xe0, 0xb6, 0x9a, 0x65, 0x72, 0x2d,
+ 0x63, 0xf4, 0xe0, 0xb6, 0x92, 0x67, 0x72, 0x73, 0x68, 0x65, 0x69, 0x2d,
0xe3, 0xc9, 0x00, 0xe1, 0x03, 0x04, 0xac, 0x72, 0xe4, 0xc9, 0x86, 0x6c,
0x6c, 0xe5, 0x03, 0x02, 0x8b, 0xe4, 0x9b, 0x61, 0x6f, 0x73, 0x74, 0x65,
- 0x2d, 0x65, 0xb7, 0xe0, 0xb5, 0xea, 0xad, 0x02, 0x8c, 0x64, 0x2d, 0x61,
- 0x6f, 0x73, 0x74, 0x65, 0x2d, 0x65, 0xe8, 0xd4, 0xc9, 0x61, 0x6f, 0x73,
- 0x74, 0x65, 0x2d, 0x65, 0xe2, 0xd4, 0xbf, 0x64, 0xf3, 0xc9, 0x56, 0xf5,
- 0x04, 0x08, 0x12, 0x8d, 0x75, 0x77, 0x75, 0x35, 0xb8, 0xe0, 0xba, 0x7f,
- 0xee, 0x02, 0x86, 0x75, 0x70, 0xb4, 0xe0, 0xba, 0x0f, 0x6a, 0x72, 0x67,
- 0x61, 0x2d, 0xf2, 0xe0, 0xb6, 0x14, 0x69, 0xf3, 0x02, 0x84, 0x7a, 0xb3,
+ 0x2d, 0x65, 0xb7, 0xe0, 0xba, 0x1a, 0xad, 0x02, 0x8c, 0x64, 0x2d, 0x61,
+ 0x6f, 0x73, 0x74, 0x65, 0x2d, 0x65, 0xe8, 0xd5, 0x3b, 0x61, 0x6f, 0x73,
+ 0x74, 0x65, 0x2d, 0x65, 0xe2, 0xd5, 0x31, 0x64, 0xf3, 0xc9, 0x56, 0xf5,
+ 0x04, 0x08, 0x12, 0x8d, 0x75, 0x77, 0x75, 0x35, 0xb8, 0xe0, 0xbe, 0xe3,
+ 0xee, 0x02, 0x86, 0x75, 0x70, 0xb4, 0xe0, 0xbe, 0x73, 0x6a, 0x72, 0x67,
+ 0x61, 0x2d, 0xf2, 0xe0, 0xba, 0x44, 0x69, 0xf3, 0x02, 0x84, 0x7a, 0xb3,
0xc3, 0x6a, 0x74, 0x32, 0xb2, 0xcd, 0x9c, 0x63, 0x30, 0xe1, 0x02, 0x85,
- 0x79, 0x34, 0xe1, 0xca, 0x3d, 0x74, 0x76, 0xae, 0x4c, 0xdb, 0x60, 0x73,
- 0x33, 0xdd, 0xbd, 0xf4, 0x09, 0x09, 0x40, 0x66, 0x08, 0x0f, 0x05, 0x0a,
- 0x86, 0x79, 0x73, 0x76, 0x72, 0x2d, 0xf6, 0xe0, 0xaf, 0x57, 0xf2, 0x07,
+ 0x79, 0x34, 0xe1, 0xca, 0x3d, 0x74, 0x76, 0xae, 0x4c, 0xdb, 0x60, 0x76,
+ 0x2e, 0xde, 0x6d, 0xf4, 0x09, 0x09, 0x40, 0x66, 0x08, 0x0f, 0x05, 0x0a,
+ 0x86, 0x79, 0x73, 0x76, 0x72, 0x2d, 0xf6, 0xe0, 0xb3, 0x84, 0xf2, 0x07,
0x07, 0x09, 0x40, 0x4b, 0xc8, 0x66, 0x6f, 0x6d, 0x73, 0x2d, 0xfa, 0xcb,
0x7c, 0x67, 0x73, 0x74, 0x61, 0x64, 0x2d, 0xf2, 0xc7, 0x67, 0x65, 0x6e,
0x74, 0x69, 0xee, 0x03, 0x0e, 0x9b, 0x73, 0xe4, 0x03, 0xcb, 0x3d, 0x2d,
0x74, 0x69, 0x72, 0x6f, 0x6c, 0x2d, 0xb6, 0xa8, 0xef, 0x02, 0x99, 0x2d,
0x73, 0xe4, 0x02, 0x88, 0x74, 0x69, 0x72, 0x6f, 0x6c, 0x2d, 0xf3, 0xa3,
- 0x2d, 0x74, 0x69, 0x72, 0x6f, 0x6c, 0x2d, 0x63, 0xb3, 0xd4, 0x1f, 0x2d,
+ 0x2d, 0x74, 0x69, 0x72, 0x6f, 0x6c, 0x2d, 0x63, 0xb3, 0xd4, 0x91, 0x2d,
0x73, 0xe4, 0x02, 0x8a, 0x74, 0x69, 0x72, 0x6f, 0x6c, 0x2d, 0x37, 0xf6,
- 0xd4, 0x10, 0x2d, 0x74, 0x69, 0x72, 0x6f, 0x6c, 0x2d, 0x72, 0xfa, 0xd4,
- 0x05, 0xe1, 0xc8, 0xd7, 0x6f, 0x72, 0x31, 0x33, 0xb1, 0xe0, 0xb9, 0xee,
+ 0xd4, 0x82, 0x2d, 0x74, 0x69, 0x72, 0x6f, 0x6c, 0x2d, 0x72, 0xfa, 0xd4,
+ 0x77, 0xe1, 0xc8, 0xd7, 0x6f, 0x72, 0x31, 0x33, 0xb1, 0xe0, 0xbe, 0x52,
0xee, 0x02, 0x87, 0x73, 0x62, 0x65, 0x72, 0xe7, 0xc7, 0x05, 0x30, 0x61,
0xe7, 0xc9, 0xa3, 0x6a, 0x6d, 0xe5, 0xc8, 0x44, 0x69, 0x71, 0x34, 0x39,
- 0x78, 0x71, 0xf9, 0xe0, 0xb9, 0x3d, 0x63, 0x6b, 0xf7, 0xe0, 0xb9, 0xfb,
+ 0x78, 0x71, 0xf9, 0xe0, 0xbd, 0xa1, 0x63, 0x6b, 0xf7, 0xe0, 0xbe, 0x70,
0x36, 0x30, 0x62, 0xb5, 0xc2, 0x82, 0xf3, 0x0d, 0x26, 0x3c, 0x25, 0x07,
0x08, 0x2b, 0x04, 0x0f, 0x0c, 0x13, 0xc4, 0x49, 0xf4, 0x02, 0x8c, 0x72,
0x65, 0x2d, 0x74, 0x6f, 0x74, 0x65, 0x6e, 0x2d, 0xfa, 0xc0, 0x6e, 0x6a,
0x72, 0x64, 0x61, 0xec, 0x02, 0x8c, 0x73, 0x68, 0x61, 0x6c, 0x73, 0x65,
- 0x6e, 0x2d, 0xf3, 0xe0, 0x2f, 0x24, 0x2d, 0xf3, 0xc6, 0xb3, 0xf2, 0x04,
+ 0x6e, 0x2d, 0xf3, 0xe0, 0x30, 0x46, 0x2d, 0xf3, 0xc6, 0xb3, 0xf2, 0x04,
0x04, 0x07, 0x86, 0x75, 0xed, 0xc9, 0xfc, 0x72, 0x65, 0x69, 0x73, 0xe1,
0xc6, 0xa1, 0x66, 0x6f, 0x6c, 0xe4, 0xc5, 0xfd, 0xad, 0x04, 0x0c, 0x06,
0x85, 0x76, 0x61, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x72, 0x2d, 0xe7, 0xc0,
@@ -383,3992 +383,4092 @@ static constexpr unsigned char kDafsa[52406] = {
0x61, 0x75, 0x72, 0x64, 0x61, 0x6c, 0x2d, 0xec, 0xc5, 0x37, 0xee, 0x04,
0x06, 0x04, 0x8e, 0x73, 0x61, 0x2d, 0xf2, 0xc9, 0x8b, 0x65, 0xf3, 0xc1,
0x4d, 0x64, 0x72, 0x65, 0x2d, 0x6c, 0x61, 0x6e, 0x64, 0x2d, 0x30, 0xe3,
- 0xe0, 0x2e, 0xc8, 0x61, 0x73, 0x65, 0x2d, 0xee, 0xe0, 0xae, 0x2a, 0xed,
+ 0xe0, 0x2f, 0xea, 0x61, 0x73, 0x65, 0x2d, 0xee, 0xe0, 0xb2, 0x57, 0xed,
0x03, 0xc8, 0x74, 0xec, 0xc7, 0x91, 0xec, 0x03, 0xc9, 0x9d, 0x61, 0xf4,
0xc0, 0xd5, 0xeb, 0x03, 0x11, 0x8d, 0xee, 0x02, 0x88, 0x6c, 0x61, 0x6e,
0x64, 0x2d, 0xe6, 0xc9, 0xe5, 0x69, 0x74, 0x2d, 0xf9, 0xc9, 0xab, 0xea,
0x02, 0x85, 0x6b, 0x2d, 0xf3, 0xc9, 0x45, 0x65, 0x72, 0xf6, 0xc0, 0xef,
- 0x69, 0x65, 0x72, 0x76, 0x2d, 0xf5, 0xe0, 0xb4, 0x79, 0x67, 0xee, 0xc7,
- 0x67, 0xe5, 0x02, 0x87, 0x73, 0x35, 0x35, 0xb4, 0xe0, 0xba, 0x93, 0x72,
+ 0x69, 0x65, 0x72, 0x76, 0x2d, 0xf5, 0xe0, 0xb8, 0xa9, 0x67, 0xee, 0xc7,
+ 0x67, 0xe5, 0x02, 0x87, 0x73, 0x35, 0x35, 0xb4, 0xe0, 0xbf, 0x4a, 0x72,
0x61, 0xec, 0xc7, 0x9f, 0x64, 0x74, 0x69, 0x72, 0x6f, 0x6c, 0x2d, 0x6e,
- 0xb2, 0xe0, 0xb3, 0xf4, 0x61, 0x6e, 0xe4, 0x03, 0xc9, 0xfa, 0x6e, 0x65,
- 0x73, 0x73, 0x6a, 0x65, 0x6e, 0x2d, 0x6f, 0xe7, 0xe0, 0x2e, 0x54, 0x39,
+ 0xb2, 0xe0, 0xb8, 0x24, 0x61, 0x6e, 0xe4, 0x03, 0xc9, 0xfa, 0x6e, 0x65,
+ 0x73, 0x73, 0x6a, 0x65, 0x6e, 0x2d, 0x6f, 0xe7, 0xe0, 0x2f, 0x76, 0x39,
0xe2, 0xcb, 0xe8, 0xf2, 0x0d, 0x10, 0x0b, 0x16, 0x05, 0x08, 0x06, 0x07,
0x11, 0x0d, 0x32, 0x0a, 0x96, 0xf9, 0x02, 0x86, 0x72, 0x76, 0x69, 0xeb,
0xc5, 0x2b, 0x6b, 0x65, 0x6e, 0x2d, 0xf6, 0xc9, 0xd0, 0x76, 0x63, 0x31,
- 0x65, 0x30, 0x61, 0x6d, 0xb3, 0xe0, 0xb8, 0xc7, 0xf3, 0x02, 0x8e, 0xf4,
- 0x02, 0x86, 0x61, 0x2d, 0xe6, 0xe0, 0xad, 0x85, 0x2d, 0xb0, 0xe0, 0xaf,
- 0x67, 0x6b, 0x6f, 0xe7, 0xc4, 0x38, 0x72, 0x6f, 0xf3, 0xc8, 0xf0, 0x6f,
- 0x76, 0x75, 0x38, 0xb8, 0xe0, 0xaf, 0xc7, 0x6e, 0x79, 0x33, 0xb1, 0xcb,
+ 0x65, 0x30, 0x61, 0x6d, 0xb3, 0xe0, 0xbd, 0x3c, 0xf3, 0x02, 0x8e, 0xf4,
+ 0x02, 0x86, 0x61, 0x2d, 0xe6, 0xe0, 0xb1, 0xb2, 0x2d, 0xb0, 0xe0, 0xb3,
+ 0xa6, 0x6b, 0x6f, 0xe7, 0xc4, 0x38, 0x72, 0x6f, 0xf3, 0xc8, 0xf0, 0x6f,
+ 0x76, 0x75, 0x38, 0xb8, 0xe0, 0xb4, 0x14, 0x6e, 0x79, 0x33, 0xb1, 0xcb,
0x86, 0x6d, 0x73, 0x6b, 0x6f, 0xe7, 0xc4, 0xe9, 0xec, 0x02, 0x89, 0x69,
0x6e, 0x67, 0x65, 0x6e, 0x2d, 0xed, 0xc9, 0x2e, 0x61, 0x6e, 0xe4, 0xc4,
0x0d, 0x69, 0xf3, 0x02, 0x83, 0xf2, 0xc9, 0xa6, 0x61, 0x2d, 0xb5, 0xe0,
- 0xaf, 0x2a, 0xe8, 0x04, 0x12, 0x07, 0x88, 0xf4, 0x03, 0x05, 0x83, 0x36,
- 0xb1, 0xe0, 0xb5, 0x1d, 0xb3, 0xcb, 0x83, 0x32, 0x37, 0xfa, 0xe0, 0xb8,
- 0x32, 0x71, 0x76, 0x39, 0xb6, 0xe0, 0xb9, 0xd6, 0x6f, 0x6c, 0x74, 0x2d,
- 0xed, 0xe0, 0xad, 0x1d, 0x6b, 0x6b, 0x65, 0x72, 0x76, 0x6a, 0x75, 0x2d,
+ 0xb3, 0x69, 0xe8, 0x04, 0x12, 0x07, 0x88, 0xf4, 0x03, 0x05, 0x83, 0x36,
+ 0xb1, 0xe0, 0xb9, 0x4c, 0xb3, 0xcb, 0x83, 0x32, 0x37, 0xfa, 0xe0, 0xbc,
+ 0x96, 0x71, 0x76, 0x39, 0xb6, 0xe0, 0xbe, 0x8d, 0x6f, 0x6c, 0x74, 0x2d,
+ 0xed, 0xe0, 0xb1, 0x4a, 0x6b, 0x6b, 0x65, 0x72, 0x76, 0x6a, 0x75, 0x2d,
0x30, 0xb1, 0xc1, 0x80, 0x65, 0x6e, 0x6e, 0x65, 0x73, 0x79, 0x2d, 0xf6,
0xc5, 0x2f, 0xe4, 0x03, 0x06, 0x86, 0x79, 0x2d, 0x30, 0xee, 0xc8, 0x81,
- 0x65, 0x2d, 0xf5, 0xe0, 0x3c, 0xcc, 0x61, 0x6c, 0x2d, 0xf0, 0xc8, 0x38,
+ 0x65, 0x2d, 0xf5, 0xe0, 0x3e, 0xa5, 0x61, 0x6c, 0x2d, 0xf0, 0xc8, 0x38,
0xe1, 0xc9, 0x49, 0xf1, 0x05, 0x07, 0x07, 0x08, 0x86, 0x78, 0xe1, 0x40,
- 0xa7, 0xe0, 0xb6, 0x9c, 0x71, 0x71, 0x74, 0x31, 0xb1, 0xc7, 0xde, 0x63,
- 0x6b, 0x61, 0x31, 0xf0, 0xe0, 0xad, 0xa0, 0x39, 0x6a, 0x79, 0xe2, 0xc8,
+ 0xa7, 0xe0, 0xbb, 0x00, 0x71, 0x71, 0x74, 0x31, 0xb1, 0xc7, 0xde, 0x63,
+ 0x6b, 0x61, 0x31, 0xf0, 0xe0, 0xb1, 0xd2, 0x39, 0x6a, 0x79, 0xe2, 0xc8,
0xcd, 0x37, 0x63, 0xe5, 0xc0, 0x8a, 0xf0, 0x04, 0x0e, 0x0e, 0x88, 0x73,
- 0xf3, 0x02, 0x83, 0xf9, 0xc9, 0x2b, 0x75, 0x33, 0x33, 0xec, 0xe0, 0xb7,
- 0xba, 0x6f, 0x72, 0x73, 0x67, 0x75, 0x2d, 0x73, 0x74, 0x61, 0x32, 0xb6,
- 0xe0, 0x7b, 0xa9, 0x67, 0x62, 0x73, 0x30, 0xe4, 0xe0, 0xb6, 0xc0, 0x31,
- 0xe1, 0x60, 0x24, 0x89, 0xe0, 0x92, 0xa9, 0xef, 0x07, 0x08, 0x0b, 0x0a,
- 0x05, 0x0e, 0x8a, 0x74, 0x75, 0x37, 0x39, 0xb6, 0xe0, 0xb6, 0xec, 0xf3,
+ 0xf3, 0x02, 0x83, 0xf9, 0xc9, 0x2b, 0x75, 0x33, 0x33, 0xec, 0xe0, 0xbc,
+ 0x1e, 0x6f, 0x72, 0x73, 0x67, 0x75, 0x2d, 0x73, 0x74, 0x61, 0x32, 0xb6,
+ 0xe0, 0x7e, 0x95, 0x67, 0x62, 0x73, 0x30, 0xe4, 0xe0, 0xbb, 0x24, 0x31,
+ 0xe1, 0x60, 0x25, 0x77, 0xe0, 0x96, 0x1f, 0xef, 0x07, 0x08, 0x0b, 0x0a,
+ 0x05, 0x0e, 0x8a, 0x74, 0x75, 0x37, 0x39, 0xb6, 0xe0, 0xbb, 0x50, 0xf3,
0x02, 0x85, 0x79, 0x72, 0xef, 0xc6, 0xc9, 0xf4, 0xc4, 0x43, 0x70, 0x70,
0x65, 0x67, 0x72, 0x64, 0x2d, 0xe9, 0xc8, 0x4a, 0x67, 0x62, 0xf0, 0xc1,
0x75, 0x64, 0x30, 0xe1, 0x02, 0x85, 0x71, 0x33, 0xe2, 0xc7, 0x2b, 0x6c,
0xe7, 0xc9, 0xc2, 0x33, 0xe3, 0x03, 0xca, 0xe5, 0x79, 0x78, 0xb2, 0xca,
0xc9, 0x31, 0x61, 0xe3, 0x48, 0xd7, 0xb5, 0xee, 0x0a, 0x08, 0x0c, 0x1f,
0x0a, 0x0f, 0x04, 0x08, 0x12, 0x87, 0x79, 0x71, 0x79, 0x32, 0xb6, 0xe0,
- 0xb7, 0x46, 0x76, 0x75, 0x6f, 0x74, 0x6e, 0x61, 0x2d, 0x68, 0xf7, 0xe0,
- 0xb2, 0xb9, 0xf4, 0x02, 0x8b, 0x74, 0x65, 0x72, 0x79, 0x2d, 0x62, 0x79,
- 0xe1, 0xe0, 0xb7, 0x3d, 0xf3, 0x02, 0x87, 0x71, 0x31, 0x37, 0xe7, 0xe0,
- 0xb7, 0x1d, 0x6f, 0x30, 0x69, 0x71, 0xf8, 0xc6, 0x09, 0x72, 0x79, 0x2d,
- 0x79, 0x6c, 0x61, 0xb5, 0xe0, 0xb1, 0xc9, 0x71, 0x76, 0x37, 0xe6, 0x04,
- 0xe0, 0xb8, 0xad, 0x73, 0x30, 0x30, 0xe5, 0xe0, 0x36, 0xa7, 0xef, 0xe0,
- 0x7a, 0x96, 0x6e, 0x78, 0x33, 0x38, 0xb8, 0xe0, 0xb6, 0xf6, 0x6d, 0x65,
+ 0xbb, 0xaa, 0x76, 0x75, 0x6f, 0x74, 0x6e, 0x61, 0x2d, 0x68, 0xf7, 0xe0,
+ 0xb6, 0xe9, 0xf4, 0x02, 0x8b, 0x74, 0x65, 0x72, 0x79, 0x2d, 0x62, 0x79,
+ 0xe1, 0xe0, 0xbb, 0xa1, 0xf3, 0x02, 0x87, 0x71, 0x31, 0x37, 0xe7, 0xe0,
+ 0xbb, 0x81, 0x6f, 0x30, 0x69, 0x71, 0xf8, 0xc6, 0x09, 0x72, 0x79, 0x2d,
+ 0x79, 0x6c, 0x61, 0xb5, 0xe0, 0xb5, 0xef, 0x71, 0x76, 0x37, 0xe6, 0x04,
+ 0xe0, 0xbd, 0x64, 0x73, 0x30, 0x30, 0xe5, 0xe0, 0x38, 0x42, 0xef, 0xe0,
+ 0x7d, 0x8a, 0x6e, 0x78, 0x33, 0x38, 0xb8, 0xe0, 0xbb, 0x5a, 0x6d, 0x65,
0x73, 0x6a, 0x65, 0x76, 0x75, 0x65, 0x6d, 0x69, 0x65, 0x2d, 0x74, 0x63,
- 0xe2, 0xe0, 0xb2, 0x63, 0x69, 0x74, 0x32, 0x32, 0xb5, 0xc9, 0x70, 0x67,
- 0xe2, 0x03, 0x04, 0x85, 0xf2, 0xe0, 0xb0, 0xf9, 0x65, 0x39, 0xe5, 0xc8,
- 0x2d, 0x63, 0x35, 0x61, 0xfa, 0xe0, 0xb6, 0x23, 0xed, 0x0d, 0x0a, 0x05,
+ 0xe2, 0xe0, 0xb6, 0x93, 0x69, 0x74, 0x32, 0x32, 0xb5, 0xc9, 0x70, 0x67,
+ 0xe2, 0x03, 0x04, 0x85, 0xf2, 0xe0, 0xb5, 0x1f, 0x65, 0x39, 0xe5, 0xc8,
+ 0x2d, 0x63, 0x35, 0x61, 0xfa, 0xe0, 0xba, 0x87, 0xed, 0x0d, 0x0a, 0x05,
0x11, 0x0a, 0x21, 0x1a, 0x16, 0x0b, 0x10, 0x40, 0xf6, 0x8e, 0x78, 0x74,
- 0x71, 0x31, 0xed, 0x44, 0x92, 0xe0, 0xb3, 0xc7, 0x75, 0x6f, 0xf3, 0xc7,
+ 0x71, 0x31, 0xed, 0x44, 0x92, 0xe0, 0xb8, 0x7e, 0x75, 0x6f, 0xf3, 0xc7,
0x42, 0x74, 0x74, 0x61, 0x2d, 0x76, 0x72, 0x6a, 0x6a, 0x61, 0x74, 0x2d,
- 0x6b, 0x37, 0xe1, 0xe0, 0x7a, 0x92, 0x73, 0x79, 0x2d, 0x75, 0x6c, 0x61,
- 0xb0, 0xe0, 0x7a, 0xaf, 0xef, 0x03, 0x02, 0x89, 0xf4, 0xa7, 0x73, 0x6a,
- 0x65, 0x6e, 0x2d, 0xe5, 0xe0, 0x82, 0x32, 0xf2, 0x02, 0x88, 0x69, 0x2d,
- 0x71, 0x73, 0xe1, 0xe0, 0x7f, 0x45, 0x65, 0x6b, 0x65, 0x2d, 0xea, 0xc7,
+ 0x6b, 0x37, 0xe1, 0xe0, 0x7d, 0x7e, 0x73, 0x79, 0x2d, 0x75, 0x6c, 0x61,
+ 0xb0, 0xe0, 0x7d, 0x9b, 0xef, 0x03, 0x02, 0x89, 0xf4, 0xa7, 0x73, 0x6a,
+ 0x65, 0x6e, 0x2d, 0xe5, 0xe0, 0x85, 0x3d, 0xf2, 0x02, 0x88, 0x69, 0x2d,
+ 0x71, 0x73, 0xe1, 0xe0, 0x82, 0x44, 0x65, 0x6b, 0x65, 0x2d, 0xea, 0xc7,
0x98, 0xec, 0x03, 0x06, 0x86, 0x73, 0x65, 0x6c, 0xf6, 0xc2, 0xa1, 0x69,
- 0x2d, 0xf4, 0xe0, 0x3b, 0x29, 0x61, 0x74, 0x76, 0x75, 0x6f, 0x70, 0x6d,
+ 0x2d, 0xf4, 0xe0, 0x3d, 0x02, 0x61, 0x74, 0x76, 0x75, 0x6f, 0x70, 0x6d,
0xe9, 0xc7, 0x16, 0xeb, 0x03, 0x07, 0x86, 0x72, 0x75, 0x34, 0xb5, 0xe0,
- 0xb5, 0xe4, 0x31, 0x62, 0x75, 0xb4, 0xc7, 0x3a, 0x30, 0x61, 0xf8, 0xc4,
+ 0xba, 0x48, 0x31, 0x62, 0x75, 0xb4, 0xc7, 0x3a, 0x30, 0x61, 0xf8, 0xc4,
0x27, 0x6a, 0x6e, 0x64, 0x61, 0x6c, 0x65, 0x6e, 0x2d, 0xb6, 0xc7, 0x10,
- 0x69, 0xf8, 0x02, 0x86, 0x38, 0x39, 0xb1, 0xe0, 0xac, 0xe8, 0x30, 0x38,
- 0xb2, 0xe0, 0xac, 0xe2, 0x67, 0xe2, 0x0d, 0x08, 0x15, 0x14, 0x06, 0x09,
+ 0x69, 0xf8, 0x02, 0x86, 0x38, 0x39, 0xb1, 0xe0, 0xb1, 0x27, 0x30, 0x38,
+ 0xb2, 0xe0, 0xb1, 0x21, 0x67, 0xe2, 0x0d, 0x08, 0x15, 0x14, 0x06, 0x09,
0x05, 0x10, 0x1c, 0x0b, 0x40, 0x5e, 0x87, 0x78, 0x34, 0x63, 0x64, 0xb0,
- 0xe0, 0x31, 0x90, 0xf4, 0x03, 0x05, 0x86, 0x78, 0xb2, 0xe0, 0xad, 0x52,
- 0x66, 0x38, 0xe6, 0xe0, 0xb5, 0x56, 0x33, 0x64, 0xe8, 0xe0, 0xb5, 0x53,
- 0x71, 0x6c, 0x79, 0x37, 0xe3, 0x02, 0x85, 0x76, 0xe1, 0xe0, 0xab, 0xb6,
- 0x30, 0x61, 0x36, 0x37, 0xe6, 0xe0, 0x71, 0xe7, 0x70, 0x6c, 0xb2, 0xe0,
- 0x61, 0x52, 0x69, 0x34, 0x65, 0x63, 0x65, 0xf8, 0xe0, 0xb5, 0xdf, 0x67,
+ 0xe0, 0x33, 0x0c, 0xf4, 0x03, 0x05, 0x86, 0x78, 0xb2, 0xe0, 0xb1, 0x9f,
+ 0x66, 0x38, 0xe6, 0xe0, 0xb9, 0xba, 0x33, 0x64, 0xe8, 0xe0, 0xb9, 0xb7,
+ 0x71, 0x6c, 0x79, 0x37, 0xe3, 0x02, 0x85, 0x76, 0xe1, 0xe0, 0xaf, 0xe8,
+ 0x30, 0x61, 0x36, 0x37, 0xe6, 0xe0, 0x74, 0xcd, 0x70, 0x6c, 0xb2, 0xe0,
+ 0x63, 0xf7, 0x69, 0x34, 0x65, 0x63, 0x65, 0xf8, 0xe0, 0xba, 0x43, 0x67,
0x75, 0xb8, 0xc7, 0x3c, 0x65, 0x72, 0x70, 0x34, 0x61, 0x35, 0x64, 0x34,
- 0xe1, 0x04, 0xe0, 0xb6, 0x0e, 0xb8, 0xc5, 0xc0, 0xe3, 0x03, 0x08, 0x87,
+ 0xe1, 0x04, 0xe0, 0xba, 0x7b, 0xb8, 0xc5, 0xc0, 0xe3, 0x03, 0x08, 0x87,
0x70, 0x71, 0x36, 0x67, 0x70, 0xe1, 0xc7, 0x87, 0x61, 0x37, 0x64, 0xfa,
- 0xe0, 0xb5, 0x5a, 0x30, 0x61, 0x39, 0x61, 0x7a, 0xe3, 0xe0, 0xb7, 0x4a,
- 0x62, 0x68, 0x31, 0xe1, 0x04, 0xe0, 0xb7, 0x40, 0xb7, 0xc4, 0x34, 0xe1,
+ 0xe0, 0xb9, 0xbe, 0x30, 0x61, 0x39, 0x61, 0x7a, 0xe3, 0xe0, 0xbc, 0x01,
+ 0x62, 0x68, 0x31, 0xe1, 0x04, 0xe0, 0xbb, 0xf7, 0xb7, 0xc4, 0x34, 0xe1,
0x07, 0x07, 0x16, 0x0a, 0x06, 0x06, 0x88, 0x79, 0x68, 0x37, 0xe7, 0xe0,
- 0xb5, 0x3b, 0x69, 0x39, 0xe1, 0x02, 0x88, 0x7a, 0x67, 0x71, 0x70, 0xb6,
- 0xe0, 0xb4, 0xe4, 0x35, 0x65, 0x76, 0x61, 0x30, 0xb0, 0xe0, 0xac, 0xc2,
- 0x68, 0x31, 0x61, 0x33, 0x68, 0x6a, 0xeb, 0xe0, 0xa7, 0x24, 0x62, 0x32,
- 0xe2, 0xe0, 0xb4, 0xbf, 0x61, 0x6d, 0x37, 0xe1, 0xc4, 0x78, 0x37, 0x63,
+ 0xb9, 0x9f, 0x69, 0x39, 0xe1, 0x02, 0x88, 0x7a, 0x67, 0x71, 0x70, 0xb6,
+ 0xe0, 0xb9, 0x48, 0x35, 0x65, 0x76, 0x61, 0x30, 0xb0, 0xe0, 0xb1, 0x0f,
+ 0x68, 0x31, 0x61, 0x33, 0x68, 0x6a, 0xeb, 0xe0, 0xab, 0x2b, 0x62, 0x32,
+ 0xe2, 0xe0, 0xb9, 0x23, 0x61, 0x6d, 0x37, 0xe1, 0xc4, 0x78, 0x37, 0x63,
0x30, 0x62, 0x62, 0xee, 0xc6, 0xb4, 0x33, 0xe1, 0x02, 0x91, 0x34, 0xe6,
- 0x02, 0x82, 0xf2, 0x83, 0x31, 0x36, 0xe1, 0x04, 0xe0, 0xb6, 0xe9, 0xae,
- 0xe0, 0x6f, 0xe3, 0x33, 0x65, 0xea, 0xe0, 0xb5, 0x24, 0x39, 0x61, 0x77,
- 0xe2, 0xe0, 0xab, 0xf2, 0x32, 0x64, 0xe4, 0xe0, 0xaa, 0xde, 0xe5, 0x02,
+ 0x02, 0x82, 0xf2, 0x83, 0x31, 0x36, 0xe1, 0x04, 0xe0, 0xbb, 0xa0, 0xae,
+ 0xe0, 0x72, 0xc2, 0x33, 0x65, 0xea, 0xe0, 0xb9, 0x88, 0x39, 0x61, 0x77,
+ 0xe2, 0xe0, 0xb0, 0x31, 0x32, 0x64, 0xe4, 0xe0, 0xaf, 0x10, 0xe5, 0x02,
0x88, 0x72, 0x6b, 0x65, 0x72, 0x2d, 0xeb, 0xc6, 0x4c, 0xec, 0xc6, 0x71,
0x33, 0x63, 0x68, 0x30, 0x6a, 0xb3, 0xc8, 0x82, 0xec, 0x0d, 0x03, 0x0c,
0x13, 0x05, 0x09, 0x06, 0x15, 0x19, 0x08, 0x08, 0x12, 0x84, 0xf5, 0xc4,
0x40, 0xf4, 0x02, 0x84, 0x65, 0xee, 0xc5, 0x6f, 0x2d, 0x6c, 0xe9, 0xc5,
0x9e, 0xf2, 0x02, 0x88, 0x65, 0x6e, 0x73, 0x6b, 0x6f, 0xe7, 0xc1, 0xde,
- 0x64, 0x61, 0x6c, 0x2d, 0xf3, 0xe0, 0xa9, 0xdd, 0x6f, 0x61, 0xe2, 0xc5,
- 0x7a, 0x69, 0x6e, 0x64, 0x73, 0x2d, 0xf0, 0xe0, 0xa9, 0xcf, 0x68, 0x70,
+ 0x64, 0x61, 0x6c, 0x2d, 0xf3, 0xe0, 0xae, 0x0a, 0x6f, 0x61, 0xe2, 0xc5,
+ 0x7a, 0x69, 0x6e, 0x64, 0x73, 0x2d, 0xf0, 0xe0, 0xad, 0xfc, 0x68, 0x70,
0x70, 0xe9, 0xc2, 0x49, 0xe7, 0x02, 0x87, 0x72, 0x64, 0x2d, 0x70, 0xef,
- 0xc5, 0x6d, 0x62, 0x62, 0x61, 0x74, 0x31, 0x61, 0x64, 0xb8, 0xe0, 0xb4,
- 0x26, 0xe5, 0x02, 0x88, 0x73, 0x75, 0x6e, 0x64, 0x2d, 0xe8, 0xc5, 0xdd,
+ 0xc5, 0x6d, 0x62, 0x62, 0x61, 0x74, 0x31, 0x61, 0x64, 0xb8, 0xe0, 0xb8,
+ 0x8a, 0xe5, 0x02, 0x88, 0x73, 0x75, 0x6e, 0x64, 0x2d, 0xe8, 0xc5, 0xdd,
0x61, 0x67, 0x61, 0x76, 0x69, 0x69, 0x6b, 0x61, 0x2d, 0x35, 0xb2, 0xe0,
- 0x2a, 0x31, 0x64, 0x69, 0x6e, 0x67, 0x65, 0xee, 0xc1, 0xb9, 0x63, 0x76,
+ 0x2b, 0x53, 0x64, 0x69, 0x6e, 0x67, 0x65, 0xee, 0xc1, 0xb9, 0x63, 0x76,
0x72, 0x33, 0x32, 0xe4, 0xc4, 0x54, 0xe1, 0x02, 0x84, 0x6e, 0xe7, 0xc5,
- 0x58, 0x68, 0x65, 0x61, 0x64, 0x6a, 0x75, 0x2d, 0xb7, 0xe0, 0x80, 0x35,
+ 0x58, 0x68, 0x65, 0x61, 0x64, 0x6a, 0x75, 0x2d, 0xb7, 0xe0, 0x83, 0x40,
0x31, 0xe1, 0xc6, 0xf9, 0x2d, 0xb1, 0xc2, 0x22, 0xeb, 0x0b, 0x1c, 0x08,
0x3f, 0x16, 0x0e, 0x1e, 0x09, 0x0c, 0x07, 0x85, 0xf6, 0x03, 0x0a, 0x85,
0x6e, 0x61, 0x6e, 0x67, 0x65, 0x6e, 0x2d, 0xeb, 0xc2, 0x75, 0x69, 0x74,
0xf3, 0xc4, 0xe9, 0x66, 0x6a, 0x6f, 0x72, 0x64, 0x2d, 0xee, 0xc5, 0x22,
0x73, 0x6e, 0x65, 0x73, 0x2d, 0xf5, 0xc5, 0x75, 0xf2, 0x04, 0x10, 0x09,
0x8d, 0x6a, 0x6f, 0x68, 0x6b, 0x61, 0x2d, 0x68, 0x77, 0x61, 0x62, 0x34,
- 0x39, 0xea, 0xe0, 0xb4, 0x49, 0x65, 0x68, 0x61, 0x6d, 0x6e, 0x2d, 0xe4,
+ 0x39, 0xea, 0xe0, 0xb8, 0xad, 0x65, 0x68, 0x61, 0x6d, 0x6e, 0x2d, 0xe4,
0xc4, 0xfc, 0x64, 0x73, 0x68, 0x65, 0x72, 0x61, 0x64, 0x2d, 0x6d, 0xb8,
- 0xe0, 0xaf, 0xa0, 0xe1, 0x02, 0x89, 0x6e, 0x67, 0x68, 0x6b, 0x65, 0x2d,
- 0xe2, 0xc2, 0x28, 0x67, 0x65, 0x72, 0x2d, 0xe7, 0xe0, 0x7f, 0xbe, 0xf0,
- 0x02, 0x86, 0x75, 0x74, 0xb3, 0xe0, 0xb3, 0x92, 0xf2, 0x02, 0x86, 0x79,
- 0x35, 0xb7, 0xe0, 0xb3, 0x56, 0x77, 0xb1, 0xc7, 0x83, 0x6f, 0x6c, 0x75,
+ 0xe0, 0xb3, 0xd0, 0xe1, 0x02, 0x89, 0x6e, 0x67, 0x68, 0x6b, 0x65, 0x2d,
+ 0xe2, 0xc2, 0x28, 0x67, 0x65, 0x72, 0x2d, 0xe7, 0xe0, 0x82, 0xc9, 0xf0,
+ 0x02, 0x86, 0x75, 0x74, 0xb3, 0xe0, 0xb7, 0xf6, 0xf2, 0x02, 0x86, 0x79,
+ 0x35, 0xb7, 0xe0, 0xb7, 0xba, 0x77, 0xb1, 0xc7, 0x83, 0x6f, 0x6c, 0x75,
0x6f, 0x6b, 0x74, 0x61, 0x2d, 0x37, 0x79, 0x61, 0xb5, 0xc2, 0x0c, 0xec,
- 0x02, 0x97, 0xf4, 0x04, 0x06, 0x05, 0x82, 0x79, 0x35, 0xf8, 0xe0, 0xb3,
- 0xd6, 0x78, 0xb9, 0xe0, 0xb3, 0xad, 0xf0, 0x83, 0x37, 0x38, 0xb7, 0xc7,
+ 0x02, 0x97, 0xf4, 0x04, 0x06, 0x05, 0x82, 0x79, 0x35, 0xf8, 0xe0, 0xb8,
+ 0x3a, 0x78, 0xb9, 0xe0, 0xb8, 0x11, 0xf0, 0x83, 0x37, 0x38, 0xb7, 0xc7,
0x15, 0x62, 0xf5, 0xc2, 0x36, 0x66, 0x6a, 0x6f, 0x72, 0x64, 0x2d, 0xe9,
0xc4, 0xeb, 0x63, 0x72, 0x78, 0x37, 0x37, 0x64, 0x31, 0x78, 0xb4, 0xe0,
- 0xb3, 0xb6, 0x62, 0x72, 0x71, 0xb7, 0xe0, 0xb3, 0xa9, 0x61, 0x72, 0xed,
+ 0xb8, 0x1a, 0x62, 0x72, 0x71, 0xb7, 0xe0, 0xb8, 0x0d, 0x61, 0x72, 0xed,
0xc4, 0xd0, 0x37, 0x79, 0x6e, 0xb9, 0xc6, 0xd1, 0xea, 0x06, 0x08, 0x09,
- 0x15, 0xc5, 0xdb, 0x76, 0x72, 0x31, 0x38, 0xb9, 0xe0, 0xb2, 0xea, 0x72,
+ 0x15, 0xc5, 0xdb, 0x76, 0x72, 0x31, 0x38, 0xb9, 0xe0, 0xb7, 0x4e, 0x72,
0x70, 0x65, 0x6c, 0x61, 0x6e, 0xe4, 0xc0, 0x7a, 0xec, 0x02, 0x89, 0x73,
- 0x74, 0x65, 0x72, 0x2d, 0xe2, 0xe0, 0x7f, 0x31, 0x71, 0x34, 0x38, 0x30,
- 0x6e, 0xb2, 0xe0, 0xa0, 0x6b, 0x31, 0xe1, 0x03, 0x04, 0x8e, 0xed, 0xe0,
- 0xb2, 0x85, 0xe5, 0x02, 0x85, 0x6c, 0x38, 0xe2, 0xc6, 0x3e, 0xe6, 0x46,
- 0x3b, 0xe0, 0xae, 0xce, 0x64, 0xf0, 0xc6, 0x34, 0xe9, 0x04, 0x10, 0x06,
- 0x88, 0x6f, 0x30, 0x61, 0x37, 0xe9, 0x04, 0xe0, 0xb4, 0xf2, 0xae, 0x60,
- 0x78, 0xdf, 0xe0, 0x37, 0x6a, 0x6e, 0x64, 0x65, 0xf2, 0xc3, 0xcd, 0x6d,
- 0x72, 0x35, 0x31, 0xb3, 0xe0, 0xb3, 0xa6, 0x31, 0x62, 0x36, 0x62, 0x31,
- 0x61, 0x36, 0x61, 0xb2, 0xe0, 0xb3, 0x58, 0xe8, 0x0f, 0x13, 0x08, 0x05,
+ 0x74, 0x65, 0x72, 0x2d, 0xe2, 0xe0, 0x82, 0x3c, 0x71, 0x34, 0x38, 0x30,
+ 0x6e, 0xb2, 0xe0, 0xa4, 0x86, 0x31, 0xe1, 0x03, 0x04, 0x8e, 0xed, 0xe0,
+ 0xb6, 0xe9, 0xe5, 0x02, 0x85, 0x6c, 0x38, 0xe2, 0xc6, 0x3e, 0xe6, 0x46,
+ 0x3b, 0xe0, 0xb3, 0x85, 0x64, 0xf0, 0xc6, 0x34, 0xe9, 0x04, 0x10, 0x06,
+ 0x88, 0x6f, 0x30, 0x61, 0x37, 0xe9, 0x04, 0xe0, 0xb9, 0xa9, 0xae, 0x60,
+ 0x7b, 0xda, 0xe0, 0x38, 0x9e, 0x6e, 0x64, 0x65, 0xf2, 0xc3, 0xcd, 0x6d,
+ 0x72, 0x35, 0x31, 0xb3, 0xe0, 0xb8, 0x13, 0x31, 0x62, 0x36, 0x62, 0x31,
+ 0x61, 0x36, 0x61, 0xb2, 0xe0, 0xb7, 0xcd, 0xe8, 0x0f, 0x13, 0x08, 0x05,
0x10, 0x0c, 0x0e, 0x0d, 0x0e, 0x17, 0x10, 0x08, 0x0a, 0x14, 0x8d, 0xf9,
0x02, 0x8a, 0x6c, 0x61, 0x6e, 0x64, 0x65, 0x74, 0x2d, 0xb5, 0xc3, 0xec,
0x61, 0x6e, 0x67, 0x65, 0xf2, 0xa4, 0x78, 0x74, 0x38, 0x31, 0xb4, 0xe0,
- 0xb3, 0x2d, 0x70, 0x6d, 0xe9, 0xc0, 0x71, 0xef, 0x02, 0x89, 0x6c, 0x74,
+ 0xb7, 0xa2, 0x70, 0x6d, 0xe9, 0xc0, 0x71, 0xef, 0x02, 0x89, 0x6c, 0x74,
0x6c, 0x65, 0x6e, 0x2d, 0xe8, 0xc3, 0xbf, 0x62, 0xec, 0xc4, 0x3f, 0x6e,
- 0x65, 0x66, 0x6f, 0x73, 0x73, 0x2d, 0x71, 0xb1, 0xe0, 0xae, 0x60, 0x6d,
+ 0x65, 0x66, 0x6f, 0x73, 0x73, 0x2d, 0x71, 0xb1, 0xe0, 0xb2, 0x90, 0x6d,
0x6d, 0x72, 0x66, 0x65, 0x61, 0x73, 0x74, 0x61, 0x2d, 0x73, 0xb4, 0xc3,
0x76, 0x6b, 0x6b, 0x69, 0x6e, 0x65, 0x6e, 0x2d, 0x35, 0x77, 0xe1, 0xe0,
- 0xb4, 0x13, 0x67, 0x65, 0x62, 0x6f, 0x73, 0x74, 0x61, 0x64, 0x2d, 0x67,
- 0xb3, 0xe0, 0xae, 0x37, 0xe5, 0x02, 0x8d, 0x72, 0x79, 0x2d, 0x69, 0x72,
- 0x61, 0xae, 0x60, 0x28, 0x21, 0xe0, 0x77, 0x24, 0x62, 0x64, 0x61, 0x38,
+ 0xb8, 0x88, 0x67, 0x65, 0x62, 0x6f, 0x73, 0x74, 0x61, 0x64, 0x2d, 0x67,
+ 0xb3, 0xe0, 0xb2, 0x67, 0xe5, 0x02, 0x8d, 0x72, 0x79, 0x2d, 0x69, 0x72,
+ 0x61, 0xae, 0x60, 0x29, 0x43, 0xe0, 0x7a, 0x1c, 0x62, 0x64, 0x61, 0x38,
0xe2, 0xc5, 0x4d, 0x63, 0x65, 0x73, 0x75, 0x6f, 0x6c, 0x6f, 0x2d, 0x37,
- 0x79, 0x61, 0x33, 0xb5, 0xe0, 0x28, 0x1c, 0x62, 0x6d, 0x65, 0x72, 0x2d,
+ 0x79, 0x61, 0x33, 0xb5, 0xe0, 0x29, 0x3e, 0x62, 0x6d, 0x65, 0x72, 0x2d,
0xf8, 0xc3, 0x23, 0x33, 0x63, 0x75, 0x7a, 0x6b, 0x31, 0x64, 0xe9, 0xc5,
0xfa, 0x32, 0x62, 0xf2, 0x02, 0x88, 0x6a, 0x39, 0xe3, 0x40, 0xac, 0xe0,
- 0xb3, 0x6f, 0x65, 0x67, 0x33, 0xe5, 0xe0, 0xa9, 0x25, 0x31, 0xe1, 0x02,
+ 0xb8, 0x26, 0x65, 0x67, 0x33, 0xe5, 0xe0, 0xad, 0x64, 0x31, 0xe1, 0x02,
0x85, 0x6c, 0x69, 0xfa, 0xc5, 0x3a, 0x68, 0xee, 0xc5, 0x36, 0x2d, 0x32,
- 0xe6, 0xe0, 0xad, 0xd7, 0xe7, 0x0a, 0x23, 0x13, 0x07, 0x06, 0x05, 0x1a,
+ 0xe6, 0xe0, 0xb2, 0x07, 0xe7, 0x0a, 0x23, 0x13, 0x07, 0x06, 0x05, 0x1a,
0x10, 0x03, 0x89, 0x6e, 0x73, 0x74, 0x69, 0xe7, 0x02, 0x8d, 0x6c, 0x69,
- 0x65, 0x66, 0x65, 0x72, 0x6e, 0x2d, 0x77, 0xef, 0xe0, 0x6b, 0x98, 0x62,
+ 0x65, 0x66, 0x65, 0x72, 0x6e, 0x2d, 0x77, 0xef, 0xe0, 0x6e, 0x68, 0x62,
0x65, 0x73, 0x74, 0x65, 0x6c, 0x6c, 0x65, 0x6e, 0x2d, 0x7a, 0xf6, 0xe0,
- 0x6b, 0x89, 0x6d, 0xf1, 0x02, 0x89, 0x77, 0x35, 0x61, 0xae, 0x44, 0x81,
- 0xe0, 0x73, 0x33, 0x30, 0x35, 0x30, 0xe9, 0xc1, 0xd5, 0x6c, 0x73, 0x2d,
+ 0x6e, 0x59, 0x6d, 0xf1, 0x02, 0x89, 0x77, 0x35, 0x61, 0xae, 0x44, 0x81,
+ 0xe0, 0x76, 0x2e, 0x30, 0x35, 0x30, 0xe9, 0xc1, 0xd5, 0x6c, 0x73, 0x2d,
0x65, 0xec, 0xc2, 0xb3, 0x6b, 0x33, 0x61, 0xf4, 0xc0, 0xa5, 0x6a, 0x76,
0xe9, 0xc1, 0x44, 0xe9, 0x02, 0x8b, 0x76, 0x75, 0x6f, 0x74, 0x6e, 0x61,
- 0x2d, 0xb8, 0xe0, 0x7d, 0xa8, 0x6c, 0x64, 0x65, 0x73, 0x6b, 0x6c, 0x2d,
- 0x67, 0xb0, 0xe0, 0xad, 0x6a, 0x67, 0x61, 0x76, 0x69, 0x69, 0x6b, 0x61,
- 0x2d, 0x38, 0x79, 0x61, 0x34, 0xb7, 0xe0, 0x75, 0xfa, 0xe5, 0xc4, 0xfa,
- 0x63, 0x6b, 0x72, 0x33, 0x66, 0xb0, 0xe0, 0xa8, 0x8d, 0x32, 0x78, 0x78,
- 0x34, 0xb8, 0xe0, 0xa7, 0x8b, 0xe6, 0x0a, 0x18, 0x15, 0x07, 0x1a, 0x18,
+ 0x2d, 0xb8, 0xe0, 0x80, 0xb3, 0x6c, 0x64, 0x65, 0x73, 0x6b, 0x6c, 0x2d,
+ 0x67, 0xb0, 0xe0, 0xb1, 0x9a, 0x67, 0x61, 0x76, 0x69, 0x69, 0x6b, 0x61,
+ 0x2d, 0x38, 0x79, 0x61, 0x34, 0xb7, 0xe0, 0x78, 0xe6, 0xe5, 0xc4, 0xfa,
+ 0x63, 0x6b, 0x72, 0x33, 0x66, 0xb0, 0xe0, 0xac, 0xcc, 0x32, 0x78, 0x78,
+ 0x34, 0xb8, 0xe0, 0xab, 0xbd, 0xe6, 0x0a, 0x18, 0x15, 0x07, 0x1a, 0x18,
0x10, 0x22, 0x04, 0x88, 0xfa, 0x02, 0x8c, 0x79, 0x73, 0x38, 0x64, 0x36,
- 0x39, 0x75, 0x76, 0xe7, 0xe0, 0xb1, 0x02, 0x63, 0x32, 0x63, 0x39, 0x65,
- 0xb2, 0xe0, 0xa7, 0x68, 0xf2, 0x03, 0x07, 0x86, 0x79, 0x61, 0x2d, 0xe8,
- 0xe0, 0xa6, 0x8e, 0x6e, 0x61, 0x2d, 0xf7, 0xc1, 0xcf, 0x64, 0xe5, 0xc1,
+ 0x39, 0x75, 0x76, 0xe7, 0xe0, 0xb5, 0x66, 0x63, 0x32, 0x63, 0x39, 0x65,
+ 0xb2, 0xe0, 0xab, 0x9a, 0xf2, 0x03, 0x07, 0x86, 0x79, 0x61, 0x2d, 0xe8,
+ 0xe0, 0xaa, 0xbb, 0x6e, 0x61, 0x2d, 0xf7, 0xc1, 0xcf, 0x64, 0xe5, 0xc1,
0xfe, 0x70, 0x63, 0x72, 0x6a, 0xb9, 0xc5, 0x13, 0x6f, 0x72, 0xec, 0x02,
0x8a, 0x63, 0x65, 0x73, 0x65, 0x6e, 0x61, 0x2d, 0xe3, 0xc1, 0x4e, 0x2d,
0x63, 0x65, 0x73, 0x65, 0x6e, 0x61, 0x2d, 0xe6, 0xc1, 0x4e, 0xec, 0x03,
- 0x07, 0x87, 0x77, 0x33, 0x35, 0xb1, 0xe0, 0xb1, 0x8e, 0x6f, 0x72, 0x2d,
- 0xea, 0xe0, 0xa6, 0x51, 0x2d, 0x7a, 0xe9, 0xe0, 0xac, 0xd5, 0xea, 0x02,
+ 0x07, 0x87, 0x77, 0x33, 0x35, 0xb1, 0xe0, 0xb6, 0x03, 0x6f, 0x72, 0x2d,
+ 0xea, 0xe0, 0xaa, 0x7e, 0x2d, 0x7a, 0xe9, 0xe0, 0xb1, 0x05, 0xea, 0x02,
0x85, 0x71, 0x37, 0xb2, 0xc2, 0xac, 0x6f, 0x72, 0x64, 0x2d, 0xec, 0xe0,
- 0xa6, 0x3b, 0xe9, 0x02, 0x9b, 0xf1, 0x04, 0x05, 0x05, 0x83, 0x7a, 0xb9,
- 0xe0, 0xb0, 0x77, 0x73, 0xb8, 0xe0, 0xb0, 0x72, 0xb6, 0xc0, 0xd4, 0x32,
- 0x32, 0x38, 0x63, 0x35, 0xe8, 0xe0, 0xb0, 0x66, 0x6e, 0xee, 0xc2, 0x4a,
- 0x68, 0xe2, 0xd8, 0x18, 0x63, 0x74, 0x34, 0x32, 0xb9, 0xe0, 0xb0, 0x59,
- 0x36, 0x71, 0x78, 0x35, 0xb3, 0xe0, 0xb0, 0xe7, 0xe5, 0x06, 0x0d, 0x07,
+ 0xaa, 0x68, 0xe9, 0x02, 0x9b, 0xf1, 0x04, 0x05, 0x05, 0x83, 0x7a, 0xb9,
+ 0xe0, 0xb4, 0xdb, 0x73, 0xb8, 0xe0, 0xb4, 0xd6, 0xb6, 0xc0, 0xd4, 0x32,
+ 0x32, 0x38, 0x63, 0x35, 0xe8, 0xe0, 0xb4, 0xca, 0x6e, 0xee, 0xc2, 0x4a,
+ 0x68, 0xe2, 0xd8, 0xb2, 0x63, 0x74, 0x34, 0x32, 0xb9, 0xe0, 0xb4, 0xbd,
+ 0x36, 0x71, 0x78, 0x35, 0xb3, 0xe0, 0xb5, 0x4b, 0xe5, 0x06, 0x0d, 0x07,
0x07, 0x0e, 0x8a, 0x76, 0x65, 0x6e, 0x69, 0x2d, 0x30, 0x71, 0x61, 0x30,
- 0xb1, 0xe0, 0x8e, 0x32, 0x6c, 0x71, 0x71, 0x31, 0xb6, 0xc4, 0x08, 0x68,
+ 0xb1, 0xe0, 0x91, 0x62, 0x6c, 0x71, 0x71, 0x31, 0xb6, 0xc4, 0x08, 0x68,
0x71, 0x7a, 0x35, 0xb6, 0xc4, 0x86, 0x66, 0xf6, 0x02, 0x86, 0x79, 0x38,
- 0xb8, 0xe0, 0xaf, 0xfb, 0x6e, 0xb9, 0xc3, 0x68, 0x63, 0x6b, 0x76, 0x64,
- 0x74, 0x63, 0xb9, 0xe0, 0xb0, 0x31, 0x31, 0xe1, 0xc1, 0xc8, 0xe4, 0x07,
+ 0xb8, 0xe0, 0xb4, 0x5f, 0x6e, 0xb9, 0xc3, 0x68, 0x63, 0x6b, 0x76, 0x64,
+ 0x74, 0x63, 0xb9, 0xe0, 0xb4, 0x95, 0x31, 0xe1, 0xc1, 0xc8, 0xe4, 0x07,
0x04, 0x08, 0x05, 0x12, 0x0b, 0x8a, 0x79, 0xf2, 0xc2, 0x17, 0x72, 0x62,
0x61, 0x6b, 0x2d, 0xf7, 0xc1, 0xe7, 0x6e, 0x6e, 0xe1, 0xc1, 0x28, 0xea,
0x02, 0x84, 0x74, 0xf9, 0xc2, 0xe7, 0x72, 0x73, 0x37, 0x32, 0x64, 0x36,
- 0x75, 0xf9, 0xe0, 0xb0, 0xa2, 0x61, 0x76, 0x76, 0x65, 0x6e, 0x6a, 0x72,
+ 0x75, 0xf9, 0xe0, 0xb5, 0x06, 0x61, 0x76, 0x76, 0x65, 0x6e, 0x6a, 0x72,
0x67, 0xe1, 0xc1, 0x76, 0x35, 0x71, 0x76, 0x37, 0x7a, 0x38, 0x37, 0xb6,
0xc2, 0xcd, 0x31, 0xe1, 0x03, 0x03, 0x84, 0xf4, 0xc2, 0x3c, 0xec, 0xe0,
- 0xa7, 0x44, 0x63, 0xea, 0xc0, 0x73, 0xe3, 0x09, 0x1d, 0x13, 0x08, 0x06,
+ 0xab, 0x83, 0x63, 0xea, 0xc0, 0x73, 0xe3, 0x09, 0x1d, 0x13, 0x08, 0x06,
0x1b, 0x12, 0x08, 0x87, 0x7a, 0xf2, 0x04, 0x07, 0x05, 0x85, 0x77, 0x32,
- 0x38, 0xe2, 0xe0, 0x87, 0xa7, 0x75, 0xb2, 0xe0, 0xaf, 0xc1, 0x73, 0xb0,
- 0xe0, 0xb0, 0x4a, 0x36, 0x39, 0xb4, 0xe0, 0xa7, 0xa9, 0x6c, 0x63, 0x68,
+ 0x38, 0xe2, 0xe0, 0x8a, 0xbf, 0x75, 0xb2, 0xe0, 0xb4, 0x25, 0x73, 0xb0,
+ 0xe0, 0xb4, 0xae, 0x36, 0x39, 0xb4, 0xe0, 0xab, 0xf6, 0x6c, 0x63, 0x68,
0x63, 0x30, 0x65, 0x61, 0x30, 0x62, 0x32, 0x67, 0x32, 0x61, 0x39, 0x67,
- 0xe3, 0xe0, 0xaf, 0xa3, 0x69, 0x71, 0x70, 0x6e, 0xae, 0xe0, 0x75, 0xd5,
- 0x67, 0x34, 0xe2, 0xe0, 0x9e, 0xd0, 0x65, 0x73, 0x65, 0x6e, 0xe1, 0x02,
- 0x8a, 0x66, 0x6f, 0x72, 0x6c, 0x2d, 0x69, 0xb8, 0xe0, 0xab, 0x41, 0x2d,
- 0x66, 0x6f, 0x72, 0x6c, 0x2d, 0x6d, 0xe3, 0xca, 0x25, 0x63, 0xeb, 0x02,
- 0x88, 0x77, 0x63, 0x78, 0x65, 0xf4, 0xe0, 0xaf, 0x6e, 0x32, 0x62, 0xb3,
- 0xe0, 0xa7, 0x5b, 0x33, 0x73, 0x31, 0x34, 0xed, 0xe0, 0xb0, 0x00, 0x32,
- 0x62, 0x72, 0xb7, 0xe0, 0xb1, 0xa4, 0x31, 0x61, 0x76, 0xe7, 0x04, 0xe0,
- 0xb1, 0x9a, 0x2e, 0x78, 0x6e, 0x2d, 0xad, 0x41, 0xa6, 0xc1, 0x26, 0xe2,
+ 0xe3, 0xe0, 0xb4, 0x07, 0x69, 0x71, 0x70, 0x6e, 0xae, 0xe0, 0x78, 0xd0,
+ 0x67, 0x34, 0xe2, 0xe0, 0xa2, 0xef, 0x65, 0x73, 0x65, 0x6e, 0xe1, 0x02,
+ 0x8a, 0x66, 0x6f, 0x72, 0x6c, 0x2d, 0x69, 0xb8, 0xe0, 0xaf, 0x71, 0x2d,
+ 0x66, 0x6f, 0x72, 0x6c, 0x2d, 0x6d, 0xe3, 0xca, 0x97, 0x63, 0xeb, 0x02,
+ 0x88, 0x77, 0x63, 0x78, 0x65, 0xf4, 0xe0, 0xb3, 0xd2, 0x32, 0x62, 0xb3,
+ 0xe0, 0xab, 0xa8, 0x33, 0x73, 0x31, 0x34, 0xed, 0xe0, 0xb4, 0x64, 0x32,
+ 0x62, 0x72, 0xb7, 0xe0, 0xb6, 0x5b, 0x31, 0x61, 0x76, 0xe7, 0x04, 0xe0,
+ 0xb6, 0x51, 0x2e, 0x78, 0x6e, 0x2d, 0xad, 0x41, 0xa6, 0xc1, 0x26, 0xe2,
0x0f, 0x03, 0x0d, 0x1e, 0x19, 0x08, 0x09, 0x15, 0x16, 0x1c, 0x1c, 0x0c,
0x0e, 0x12, 0x8a, 0xf5, 0xc0, 0xd5, 0x74, 0x73, 0x66, 0x6a, 0x6f, 0x72,
- 0x64, 0x2d, 0x39, 0xfa, 0xe0, 0xab, 0x4c, 0xf2, 0x02, 0x88, 0x75, 0x6d,
- 0x2d, 0x76, 0xef, 0xe0, 0xab, 0x41, 0x6e, 0x6e, 0xf9, 0x02, 0x89, 0x73,
+ 0x64, 0x2d, 0x39, 0xfa, 0xe0, 0xaf, 0x7c, 0xf2, 0x02, 0x88, 0x75, 0x6d,
+ 0x2d, 0x76, 0xef, 0xe0, 0xaf, 0x71, 0x6e, 0x6e, 0xf9, 0x02, 0x89, 0x73,
0x75, 0x6e, 0x64, 0x2d, 0x6d, 0xb8, 0xc0, 0x57, 0x2d, 0x77, 0xf5, 0xc0,
0x52, 0xef, 0x02, 0x90, 0x7a, 0x65, 0x6e, 0x2d, 0x73, 0x64, 0x74, 0x69,
- 0x72, 0x6f, 0x6c, 0x2d, 0x32, 0xef, 0xc9, 0xa2, 0x64, 0x2d, 0xb2, 0xe0,
- 0xa6, 0x72, 0x6d, 0x6c, 0x6f, 0x2d, 0xe7, 0xe0, 0xa4, 0x83, 0x6c, 0x74,
- 0x2d, 0x65, 0x6c, 0xe1, 0xe0, 0x25, 0x10, 0xea, 0x02, 0x89, 0x64, 0x64,
- 0x61, 0x72, 0x2d, 0xf0, 0xe0, 0xaa, 0xf7, 0x61, 0x72, 0x6b, 0x79, 0x2d,
- 0xe6, 0xe0, 0x7b, 0x21, 0xe9, 0x02, 0x89, 0x65, 0x76, 0x74, 0x2d, 0x30,
- 0xf1, 0xe0, 0xaa, 0xe3, 0x64, 0x72, 0x2d, 0x35, 0x6e, 0x61, 0xe3, 0xe0,
- 0xaf, 0x6c, 0x68, 0xe3, 0x02, 0x8e, 0x63, 0x61, 0x76, 0x75, 0x6f, 0x74,
- 0x6e, 0x61, 0x2d, 0x6b, 0xb7, 0xe0, 0xaa, 0xc7, 0x61, 0x76, 0x75, 0x6f,
+ 0x72, 0x6f, 0x6c, 0x2d, 0x32, 0xef, 0xca, 0x14, 0x64, 0x2d, 0xb2, 0xe0,
+ 0xaa, 0xb1, 0x6d, 0x6c, 0x6f, 0x2d, 0xe7, 0xe0, 0xa8, 0xb0, 0x6c, 0x74,
+ 0x2d, 0x65, 0x6c, 0xe1, 0xe0, 0x26, 0x32, 0xea, 0x02, 0x89, 0x64, 0x64,
+ 0x61, 0x72, 0x2d, 0xf0, 0xe0, 0xaf, 0x27, 0x61, 0x72, 0x6b, 0x79, 0x2d,
+ 0xe6, 0xe0, 0x7e, 0x2c, 0xe9, 0x02, 0x89, 0x65, 0x76, 0x74, 0x2d, 0x30,
+ 0xf1, 0xe0, 0xaf, 0x13, 0x64, 0x72, 0x2d, 0x35, 0x6e, 0x61, 0xe3, 0xe0,
+ 0xb3, 0xd0, 0x68, 0xe3, 0x02, 0x8e, 0x63, 0x61, 0x76, 0x75, 0x6f, 0x74,
+ 0x6e, 0x61, 0x2d, 0x6b, 0xb7, 0xe0, 0xae, 0xf7, 0x61, 0x76, 0x75, 0x6f,
0x74, 0x6e, 0x61, 0x2d, 0xf3, 0x99, 0xe5, 0x02, 0x8b, 0x72, 0x6c, 0x65,
- 0x76, 0x67, 0x2d, 0x6a, 0xf8, 0xe0, 0xaa, 0xaf, 0x61, 0x72, 0x61, 0x6c,
- 0x76, 0x68, 0x6b, 0x69, 0x2d, 0x79, 0xb4, 0xe0, 0xaa, 0xa1, 0x64, 0x64,
- 0x64, 0x6a, 0x2d, 0x6d, 0x72, 0x61, 0xe2, 0xe0, 0xac, 0x9b, 0x63, 0x6b,
- 0x31, 0x62, 0x39, 0x61, 0x35, 0x64, 0x72, 0x65, 0xb4, 0xe0, 0xa4, 0xcc,
+ 0x76, 0x67, 0x2d, 0x6a, 0xf8, 0xe0, 0xae, 0xdf, 0x61, 0x72, 0x61, 0x6c,
+ 0x76, 0x68, 0x6b, 0x69, 0x2d, 0x79, 0xb4, 0xe0, 0xae, 0xd1, 0x64, 0x64,
+ 0x64, 0x6a, 0x2d, 0x6d, 0x72, 0x61, 0xe2, 0xe0, 0xb0, 0xca, 0x63, 0x6b,
+ 0x31, 0x62, 0x39, 0x61, 0x35, 0x64, 0x72, 0x65, 0xb4, 0xe0, 0xa8, 0xfe,
0x61, 0x6c, 0x73, 0x61, 0x6e, 0x2d, 0x73, 0x64, 0x74, 0x69, 0x72, 0x6f,
- 0x6c, 0x2d, 0x6e, 0xf3, 0xc8, 0xfc, 0x34, 0x77, 0x36, 0x30, 0x35, 0x66,
- 0xe5, 0xe0, 0xa0, 0xa6, 0x2d, 0x35, 0x67, 0xe1, 0xe0, 0x99, 0x06, 0xe1,
+ 0x6c, 0x2d, 0x6e, 0xf3, 0xc9, 0x6e, 0x34, 0x77, 0x36, 0x30, 0x35, 0x66,
+ 0xe5, 0xe0, 0xa4, 0xad, 0x2d, 0x35, 0x67, 0xe1, 0xe0, 0x9d, 0x17, 0xe1,
0x05, 0x0a, 0x12, 0x03, 0x8d, 0x76, 0x65, 0x72, 0x79, 0x2d, 0x79, 0xf5,
- 0xe0, 0xaa, 0x54, 0x75, 0x72, 0x73, 0x6b, 0x6f, 0x67, 0x2d, 0x68, 0x6c,
- 0x61, 0x6e, 0x64, 0x2d, 0x6a, 0xee, 0xe0, 0x24, 0x4e, 0x73, 0xeb, 0x90,
- 0x72, 0x6f, 0x70, 0x6f, 0x72, 0x74, 0x2d, 0x62, 0x79, 0xe1, 0xe0, 0xa1,
- 0xc5, 0x6e, 0x64, 0x79, 0xad, 0xc9, 0xc5, 0xb9, 0x04, 0x08, 0x07, 0x87,
- 0x6b, 0x72, 0x74, 0x30, 0xb0, 0xe0, 0xae, 0xa0, 0x65, 0x74, 0x35, 0xb2,
- 0xe0, 0xaf, 0x40, 0x64, 0x62, 0x71, 0xb2, 0xe0, 0xae, 0x92, 0x30, 0xe1,
- 0x0a, 0x03, 0x03, 0x38, 0x60, 0x72, 0xeb, 0xe0, 0x3b, 0x85, 0x7a, 0xe8,
+ 0xe0, 0xae, 0x84, 0x75, 0x72, 0x73, 0x6b, 0x6f, 0x67, 0x2d, 0x68, 0x6c,
+ 0x61, 0x6e, 0x64, 0x2d, 0x6a, 0xee, 0xe0, 0x25, 0x70, 0x73, 0xeb, 0x90,
+ 0x72, 0x6f, 0x70, 0x6f, 0x72, 0x74, 0x2d, 0x62, 0x79, 0xe1, 0xe0, 0xa5,
+ 0xc5, 0x6e, 0x64, 0x79, 0xad, 0xca, 0x37, 0xb9, 0x04, 0x08, 0x07, 0x87,
+ 0x6b, 0x72, 0x74, 0x30, 0xb0, 0xe0, 0xb3, 0x04, 0x65, 0x74, 0x35, 0xb2,
+ 0xe0, 0xb3, 0xad, 0x64, 0x62, 0x71, 0xb2, 0xe0, 0xb2, 0xf6, 0x30, 0xe1,
+ 0x0a, 0x03, 0x03, 0x38, 0x60, 0x75, 0xe5, 0xe0, 0x3d, 0x00, 0x7a, 0xe8,
0xb4, 0xed, 0xc0, 0x62, 0x31, 0x61, 0xe6, 0xc1, 0x53, 0xb8, 0x05, 0x07,
0x07, 0x07, 0x87, 0x79, 0x30, 0x61, 0x30, 0xb6, 0xc1, 0xa9, 0x70, 0x76,
- 0x72, 0xb4, 0xe0, 0xa7, 0x39, 0x6c, 0x74, 0x72, 0x36, 0xb2, 0xc0, 0xf3,
+ 0x72, 0xb4, 0xe0, 0xab, 0x5f, 0x6c, 0x74, 0x72, 0x36, 0xb2, 0xc0, 0xf3,
0x64, 0x62, 0x71, 0x32, 0xe1, 0xc1, 0x05, 0x30, 0xe1, 0x06, 0x0e, 0x0c,
0x06, 0x06, 0x85, 0x75, 0x2e, 0x78, 0x6e, 0x2d, 0x2d, 0x39, 0x30, 0x61,
- 0x33, 0xe1, 0xe0, 0xa4, 0x07, 0xf3, 0x02, 0x84, 0xf7, 0xe0, 0xaf, 0xe2,
- 0x65, 0xe8, 0xe0, 0x67, 0xd1, 0x71, 0x65, 0x63, 0x64, 0xf2, 0x83, 0x6f,
- 0x32, 0xb1, 0xe0, 0xae, 0x2b, 0x64, 0x78, 0xe8, 0xd7, 0x89, 0x61, 0x61,
+ 0x33, 0xe1, 0xe0, 0xa8, 0x39, 0xf3, 0x02, 0x84, 0xf7, 0xe0, 0xb4, 0x99,
+ 0x65, 0xe8, 0xe0, 0x6a, 0xa1, 0x71, 0x65, 0x63, 0x64, 0xf2, 0x83, 0x6f,
+ 0x32, 0xb1, 0xe0, 0xb2, 0x8f, 0x64, 0x78, 0xe8, 0xd8, 0x2d, 0x61, 0x61,
0x30, 0x63, 0x76, 0x61, 0xe3, 0xc0, 0xf5, 0x37, 0x74, 0x30, 0x61, 0x32,
0x36, 0xb4, 0xc0, 0x4f, 0xb6, 0x04, 0x0b, 0x08, 0x86, 0x71, 0x71, 0x39,
- 0x38, 0x36, 0x62, 0x33, 0xf8, 0xe0, 0xad, 0x5c, 0x6f, 0x72, 0x78, 0x32,
- 0xf2, 0xe0, 0xad, 0xf7, 0x66, 0x72, 0x7a, 0xb8, 0xc0, 0x64, 0x62, 0x74,
- 0x77, 0xb5, 0xe0, 0xad, 0xc6, 0xb5, 0x07, 0x07, 0x0d, 0x10, 0x07, 0x08,
- 0xa4, 0x74, 0x7a, 0x6d, 0xb5, 0xe0, 0xaf, 0x86, 0x73, 0x75, 0x33, 0x34,
- 0x6a, 0x39, 0x33, 0x36, 0x62, 0xe7, 0xe0, 0x30, 0x63, 0x72, 0xf4, 0x02,
- 0x85, 0x71, 0x33, 0xb4, 0xc0, 0x5d, 0x70, 0x34, 0x39, 0xe3, 0xe0, 0xad,
- 0xbe, 0x6a, 0x73, 0x30, 0x34, 0xb5, 0xc1, 0x02, 0x64, 0x62, 0x68, 0x6c,
+ 0x38, 0x36, 0x62, 0x33, 0xf8, 0xe0, 0xb1, 0xc0, 0x6f, 0x72, 0x78, 0x32,
+ 0xf2, 0xe0, 0xb2, 0x5b, 0x66, 0x72, 0x7a, 0xb8, 0xc0, 0x64, 0x62, 0x74,
+ 0x77, 0xb5, 0xe0, 0xb2, 0x2a, 0xb5, 0x07, 0x07, 0x0d, 0x10, 0x07, 0x08,
+ 0xa4, 0x74, 0x7a, 0x6d, 0xb5, 0xe0, 0xb4, 0x3d, 0x73, 0x75, 0x33, 0x34,
+ 0x6a, 0x39, 0x33, 0x36, 0x62, 0xe7, 0xe0, 0x32, 0x21, 0x72, 0xf4, 0x02,
+ 0x85, 0x71, 0x33, 0xb4, 0xc0, 0x5d, 0x70, 0x34, 0x39, 0xe3, 0xe0, 0xb2,
+ 0x22, 0x6a, 0x73, 0x30, 0x34, 0xb5, 0xc1, 0x02, 0x64, 0x62, 0x68, 0x6c,
0x38, 0xe4, 0xc0, 0x60, 0x35, 0xf1, 0x02, 0x9a, 0x78, 0x35, 0xe4, 0x04,
- 0xe0, 0xaf, 0x4d, 0xae, 0x07, 0x60, 0x73, 0x33, 0xe0, 0x37, 0x6a, 0x78,
+ 0xe0, 0xb4, 0x04, 0xae, 0x07, 0x60, 0x76, 0x2e, 0xe0, 0x38, 0x9e, 0x78,
0x6e, 0x2d, 0x2d, 0x6a, 0x36, 0x77, 0x31, 0xb9, 0xc0, 0x98, 0x77, 0x34,
- 0xb2, 0xe0, 0xaf, 0x36, 0x34, 0x62, 0x37, 0x66, 0x74, 0x61, 0x30, 0xe3,
- 0xe0, 0xa3, 0x49, 0xb4, 0x07, 0x07, 0x10, 0x06, 0x18, 0x14, 0x88, 0x70,
- 0x76, 0x78, 0xf3, 0xe0, 0xad, 0x71, 0x69, 0xf4, 0x02, 0x87, 0x37, 0x39,
- 0x37, 0xeb, 0xe0, 0xad, 0x66, 0x31, 0x36, 0xb8, 0xc0, 0xac, 0x67, 0x62,
- 0xf2, 0xe0, 0x4e, 0x64, 0x64, 0xe2, 0x02, 0x8e, 0x67, 0x64, 0x74, 0x79,
+ 0xb2, 0xe0, 0xb3, 0xed, 0x34, 0x62, 0x37, 0x66, 0x74, 0x61, 0x30, 0xe3,
+ 0xe0, 0xa7, 0x7b, 0xb4, 0x07, 0x07, 0x10, 0x06, 0x18, 0x14, 0x88, 0x70,
+ 0x76, 0x78, 0xf3, 0xe0, 0xb1, 0xd5, 0x69, 0xf4, 0x02, 0x87, 0x37, 0x39,
+ 0x37, 0xeb, 0xe0, 0xb1, 0xca, 0x31, 0x36, 0xb8, 0xc0, 0xac, 0x67, 0x62,
+ 0xf2, 0xe0, 0x50, 0x87, 0x64, 0xe2, 0x02, 0x8e, 0x67, 0x64, 0x74, 0x79,
0x36, 0x63, 0x2e, 0x78, 0x6e, 0x2d, 0x2d, 0x34, 0x64, 0x62, 0x72, 0x6b,
- 0xb0, 0xe0, 0xa9, 0xe0, 0xb5, 0x02, 0x86, 0x71, 0x31, 0xb1, 0xe0, 0xa3,
- 0x03, 0x62, 0xf2, 0x03, 0xc0, 0x5c, 0x35, 0x63, 0xf9, 0xe0, 0xac, 0x8c,
- 0x32, 0x63, 0x32, 0x64, 0xb9, 0xe0, 0xad, 0x2c, 0x31, 0x61, 0x2e, 0x78,
- 0x6e, 0x2d, 0x2d, 0x70, 0x31, 0x61, 0xe3, 0xe0, 0x9b, 0x93, 0xb3, 0x07,
- 0x07, 0x02, 0x09, 0x08, 0x08, 0x89, 0x70, 0x78, 0x75, 0xb8, 0xe0, 0xac,
- 0x50, 0xe8, 0xae, 0x65, 0x30, 0x62, 0x37, 0x30, 0xb7, 0xe0, 0xad, 0x2f,
- 0x64, 0x73, 0x34, 0x34, 0xb3, 0xe0, 0xae, 0xa2, 0x62, 0x73, 0x74, 0x30,
- 0xb0, 0xe0, 0xac, 0x49, 0x32, 0x76, 0x70, 0x33, 0x30, 0xe8, 0xe0, 0xac,
- 0xe6, 0x30, 0x72, 0x72, 0xb7, 0xe0, 0xac, 0x54, 0xb2, 0x02, 0x88, 0x73,
- 0x63, 0x72, 0x6a, 0xb9, 0xe0, 0xa2, 0x9d, 0x6d, 0x34, 0x61, 0x31, 0xb5,
- 0xe0, 0xa9, 0xae, 0xb1, 0x05, 0x08, 0x0f, 0x0f, 0xab, 0x71, 0x71, 0x77,
- 0x32, 0xb3, 0xe0, 0xac, 0xc3, 0x6c, 0x71, 0xf3, 0x02, 0x86, 0x37, 0x31,
- 0xe4, 0xe0, 0xac, 0xb3, 0x30, 0xb3, 0xc0, 0x4c, 0xe3, 0x02, 0x85, 0x74,
- 0xf7, 0xe0, 0xac, 0xa6, 0x6b, 0x32, 0x65, 0xb1, 0xe0, 0xa3, 0xf3, 0x32,
+ 0xb0, 0xe0, 0xae, 0x0f, 0xb5, 0x02, 0x86, 0x71, 0x31, 0xb1, 0xe0, 0xa7,
+ 0x35, 0x62, 0xf2, 0x03, 0xc0, 0x5c, 0x35, 0x63, 0xf9, 0xe0, 0xb0, 0xf0,
+ 0x32, 0x63, 0x32, 0x64, 0xb9, 0xe0, 0xb1, 0x90, 0x31, 0x61, 0x2e, 0x78,
+ 0x6e, 0x2d, 0x2d, 0x70, 0x31, 0x61, 0xe3, 0xe0, 0x9f, 0xb2, 0xb3, 0x07,
+ 0x07, 0x02, 0x09, 0x08, 0x08, 0x89, 0x70, 0x78, 0x75, 0xb8, 0xe0, 0xb0,
+ 0xb4, 0xe8, 0xae, 0x65, 0x30, 0x62, 0x37, 0x30, 0xb7, 0xe0, 0xb1, 0xa4,
+ 0x64, 0x73, 0x34, 0x34, 0xb3, 0xe0, 0xb3, 0x59, 0x62, 0x73, 0x74, 0x30,
+ 0xb0, 0xe0, 0xb0, 0xad, 0x32, 0x76, 0x70, 0x33, 0x30, 0xe8, 0xe0, 0xb1,
+ 0x4a, 0x30, 0x72, 0x72, 0xb7, 0xe0, 0xb0, 0xb8, 0xb2, 0x02, 0x88, 0x73,
+ 0x63, 0x72, 0x6a, 0xb9, 0xe0, 0xa6, 0xcf, 0x6d, 0x34, 0x61, 0x31, 0xb5,
+ 0xe0, 0xad, 0xdd, 0xb1, 0x05, 0x08, 0x0f, 0x0f, 0xab, 0x71, 0x71, 0x77,
+ 0x32, 0xb3, 0xe0, 0xb1, 0x27, 0x6c, 0x71, 0xf3, 0x02, 0x86, 0x37, 0x31,
+ 0xe4, 0xe0, 0xb1, 0x17, 0x30, 0xb3, 0xc0, 0x4c, 0xe3, 0x02, 0x85, 0x74,
+ 0xf7, 0xe0, 0xb1, 0x0a, 0x6b, 0x32, 0x65, 0xb1, 0xe0, 0xa8, 0x40, 0x32,
0xe3, 0x03, 0x0a, 0x89, 0x6f, 0x30, 0x63, 0x33, 0x62, 0x34, 0x65, 0x76,
0xe1, 0x90, 0x66, 0x69, 0x38, 0x69, 0x78, 0x62, 0x38, 0xec, 0x87, 0x31,
0x66, 0x65, 0x30, 0x62, 0x72, 0x2e, 0x78, 0x6e, 0x2d, 0x2d, 0x6f, 0x33,
- 0x63, 0x77, 0xb4, 0xe0, 0xab, 0x91, 0x31, 0x62, 0x34, 0x63, 0xb3, 0xe0,
- 0xab, 0xcd, 0x30, 0x74, 0x72, 0x71, 0x37, 0x70, 0x37, 0x6e, 0xee, 0xe0,
- 0xac, 0x61, 0xea, 0xe0, 0x9a, 0x9a, 0xe9, 0x07, 0x60, 0x88, 0xe6, 0xe0,
- 0x23, 0xde, 0xe8, 0xe0, 0xa5, 0x1c, 0x66, 0x69, 0xee, 0xe0, 0x93, 0x09,
- 0xe5, 0x02, 0x82, 0xf2, 0x8b, 0x6e, 0x2e, 0x70, 0x72, 0x67, 0xed, 0xe0,
- 0xad, 0x03, 0x62, 0xef, 0xe0, 0xa6, 0x62, 0x34, 0x34, 0x33, 0x2e, 0xf0,
- 0xe0, 0x99, 0x5f, 0x30, 0xae, 0x60, 0xac, 0x93, 0xc1, 0x3d, 0xae, 0x60,
- 0x95, 0x0b, 0x47, 0x60, 0xd1, 0x64, 0xf7, 0x1b, 0x07, 0x0c, 0x04, 0x06,
- 0x10, 0x15, 0x20, 0x40, 0x66, 0x07, 0x0f, 0x0c, 0x05, 0x40, 0x86, 0x1c,
- 0x41, 0x1a, 0x60, 0x80, 0xfd, 0x50, 0x21, 0x1b, 0xce, 0xe1, 0x7a, 0x6d,
- 0x69, 0xf5, 0xe0, 0x70, 0x7f, 0x77, 0x77, 0xae, 0x04, 0xe0, 0xac, 0x14,
- 0x63, 0xeb, 0xe0, 0x91, 0x00, 0x75, 0xef, 0xc0, 0xd6, 0xf4, 0x60, 0xa1,
- 0xb3, 0xc0, 0xfa, 0xf3, 0x0b, 0x60, 0x2a, 0x62, 0x4b, 0x1c, 0x4c, 0xcb,
- 0xe0, 0x6b, 0x3c, 0xeb, 0xe0, 0x31, 0x8f, 0xf2, 0x02, 0x87, 0x6f, 0xe3,
- 0x40, 0x91, 0xe0, 0x9b, 0x49, 0x69, 0x74, 0x65, 0x73, 0x74, 0x68, 0x69,
- 0xf3, 0xe0, 0x84, 0x10, 0xf0, 0x06, 0x0c, 0x09, 0xe0, 0x5b, 0xd6, 0x6d,
- 0xf5, 0x04, 0xe0, 0x65, 0x3d, 0x64, 0x65, 0xf6, 0xe0, 0x78, 0x76, 0x68,
- 0x6f, 0x73, 0x74, 0x65, 0xe4, 0xe0, 0x83, 0xee, 0xe4, 0xe0, 0x5d, 0x5f,
- 0xef, 0x07, 0x2f, 0x07, 0x1f, 0xe0, 0xaa, 0x7f, 0xf2, 0x03, 0x05, 0x84,
- 0x73, 0xe5, 0xe0, 0x9b, 0x0c, 0xec, 0xe0, 0xaa, 0xee, 0xeb, 0x08, 0x13,
- 0x60, 0x7c, 0xd3, 0xe0, 0x30, 0x48, 0xe9, 0x02, 0x87, 0x73, 0x62, 0x6f,
- 0xf2, 0xe0, 0x9f, 0xad, 0x6e, 0x67, 0x67, 0x72, 0x6f, 0xf5, 0xe0, 0x92,
- 0x4d, 0x65, 0x72, 0xf3, 0xe0, 0x9f, 0x7c, 0x6f, 0x64, 0x73, 0xe9, 0xe0,
- 0x6f, 0x02, 0xec, 0x02, 0x97, 0xf4, 0x02, 0x8a, 0x6c, 0x61, 0x62, 0x2d,
- 0x64, 0x65, 0xed, 0xe0, 0xa0, 0x15, 0x65, 0x72, 0x73, 0x6b, 0x6c, 0x75,
- 0xf7, 0xe0, 0x99, 0x57, 0x6f, 0xed, 0xe0, 0x9b, 0x55, 0x64, 0x7a, 0x69,
- 0x73, 0x6c, 0xe1, 0xe0, 0xa0, 0x3f, 0x6e, 0x65, 0x78, 0xf4, 0xe0, 0xab,
- 0x6c, 0xed, 0x07, 0x60, 0x7b, 0x7f, 0xe0, 0x2f, 0xdc, 0x66, 0x6c, 0x61,
- 0xe2, 0xe0, 0x97, 0xf4, 0x6c, 0x6f, 0x63, 0xec, 0x04, 0xe0, 0xa8, 0x0d,
- 0x61, 0xf7, 0xc9, 0xcc, 0x6b, 0xfa, 0xe0, 0x6f, 0x98, 0xe9, 0x0f, 0x11,
- 0x1a, 0x03, 0x11, 0x0a, 0x0a, 0x05, 0x04, 0x60, 0x6f, 0x28, 0xe0, 0x37,
- 0x86, 0xf8, 0x04, 0xe0, 0x86, 0x84, 0xf3, 0x04, 0xe0, 0x32, 0x4a, 0x74,
- 0x75, 0x64, 0xe9, 0xe0, 0x28, 0x7e, 0xf4, 0x02, 0x93, 0xe8, 0x02, 0x89,
- 0x79, 0x6f, 0x75, 0x74, 0x75, 0xe2, 0xe0, 0xa4, 0xe7, 0x67, 0x6f, 0x6f,
- 0xe7, 0xe0, 0x33, 0x4e, 0xe4, 0xe0, 0x6f, 0x5d, 0xef, 0xc5, 0xb7, 0xee,
- 0x0b, 0x60, 0x2c, 0x64, 0x41, 0x93, 0x60, 0x7d, 0x02, 0xc1, 0x7c, 0x64,
- 0xef, 0xe0, 0x8b, 0x9c, 0x6c, 0x6c, 0x69, 0x61, 0x6d, 0x68, 0xe9, 0xe0,
- 0x9b, 0x8c, 0x6b, 0xe9, 0x04, 0xe0, 0xac, 0x60, 0xae, 0xe0, 0x98, 0xb5,
- 0x69, 0xe8, 0xe0, 0x6f, 0x30, 0xe6, 0xe0, 0x6f, 0x2c, 0xe5, 0x02, 0x92,
- 0xee, 0x04, 0xe0, 0xac, 0x4b, 0x2e, 0x66, 0x75, 0x6e, 0x6b, 0x66, 0x65,
- 0x75, 0x65, 0xf2, 0xe0, 0x74, 0x93, 0x6c, 0xf5, 0xe0, 0x9a, 0xa0, 0xe8,
- 0x03, 0x07, 0x87, 0x6f, 0x73, 0x77, 0xe8, 0xe0, 0xaa, 0xa6, 0x6d, 0xae,
- 0x60, 0x5a, 0x0f, 0xde, 0xa2, 0x69, 0x74, 0x65, 0x73, 0x6e, 0x6f, 0xf7,
- 0xe0, 0xab, 0x25, 0xe5, 0x0a, 0x17, 0x11, 0x06, 0x05, 0x06, 0x17, 0x40,
- 0xa3, 0x91, 0x73, 0xf4, 0x05, 0x09, 0xe0, 0x81, 0xcf, 0x65, 0x75, 0x72,
- 0x6f, 0x70, 0xe5, 0xe0, 0x91, 0x99, 0x31, 0x2d, 0x75, 0xf3, 0xe0, 0x77,
- 0x80, 0x6c, 0x6c, 0x62, 0x65, 0x69, 0x6e, 0x67, 0x7a, 0x6f, 0x6e, 0x65,
- 0xae, 0x60, 0xa6, 0xd6, 0xc1, 0xc8, 0xe9, 0x60, 0xa9, 0x32, 0xc1, 0x5e,
- 0x67, 0xf2, 0xe0, 0x9f, 0x37, 0x65, 0x6b, 0xec, 0xe0, 0xa7, 0xc2, 0xe4,
- 0x05, 0x0d, 0xe0, 0xab, 0xc6, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0xae, 0x60,
- 0x95, 0xc9, 0x44, 0xc4, 0xd0, 0x39, 0xe4, 0xe0, 0x96, 0x43, 0xe2, 0x0c,
- 0x15, 0x08, 0x15, 0x08, 0x08, 0x06, 0x20, 0x04, 0xe0, 0x97, 0xa9, 0x76,
- 0x69, 0x65, 0x77, 0x2d, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0xae, 0x03,
- 0xc3, 0x14, 0x61, 0x77, 0x73, 0xad, 0xc3, 0x10, 0x74, 0x68, 0x69, 0x6e,
- 0xe7, 0xe0, 0x8e, 0x78, 0xf3, 0x03, 0x07, 0x86, 0x70, 0x61, 0x63, 0xe5,
- 0xe0, 0x3f, 0xf1, 0x6f, 0x7a, 0xe1, 0xe0, 0x86, 0x72, 0x69, 0xf4, 0xd4,
- 0x24, 0x72, 0x65, 0x64, 0x69, 0xf2, 0xe0, 0xa1, 0xbd, 0x70, 0x61, 0x61,
- 0x73, 0xae, 0xe0, 0x66, 0x56, 0x6c, 0x69, 0xeb, 0xe0, 0x9c, 0x83, 0xe8,
- 0x02, 0x98, 0xef, 0x02, 0x88, 0x73, 0x74, 0x69, 0x6e, 0xe7, 0xe0, 0x8e,
- 0x08, 0x70, 0xae, 0x60, 0x95, 0x59, 0x45, 0xd3, 0x4d, 0x0c, 0x40, 0x56,
- 0xc2, 0xac, 0x61, 0xf2, 0xe0, 0x4d, 0xec, 0xe3, 0xe0, 0xa3, 0xc4, 0xae,
- 0x17, 0x06, 0x06, 0x60, 0x6d, 0x2e, 0x4d, 0x4a, 0x60, 0x24, 0xdb, 0x40,
- 0xe5, 0x40, 0x79, 0x46, 0x02, 0x41, 0xbb, 0x40, 0xbd, 0xc0, 0x85, 0xf4,
- 0x60, 0xa8, 0xf0, 0xc0, 0xe7, 0xee, 0x60, 0xa0, 0x41, 0xc8, 0xd0, 0xe9,
- 0x60, 0x96, 0xde, 0xd1, 0xfa, 0x61, 0x74, 0x68, 0x65, 0xf2, 0x04, 0xe0,
- 0xab, 0x16, 0x63, 0x68, 0x61, 0x6e, 0xee, 0xe0, 0xa5, 0xdf, 0xae, 0x02,
- 0x84, 0xf4, 0xe0, 0xaa, 0xfb, 0xe2, 0xe0, 0xaa, 0x97, 0xe1, 0x10, 0x05,
- 0x19, 0x12, 0x13, 0x12, 0x16, 0x23, 0x0c, 0x09, 0x60, 0x42, 0x7d, 0xe0,
- 0x5b, 0x28, 0x7a, 0xf5, 0xe0, 0x58, 0x0a, 0xf4, 0x03, 0x04, 0x87, 0xf3,
- 0xe0, 0x6b, 0x6e, 0x63, 0xe8, 0x60, 0x9e, 0xec, 0xcb, 0xf7, 0x61, 0xf2,
- 0x04, 0xe0, 0x5d, 0x19, 0xe1, 0xe0, 0x53, 0x9d, 0xf3, 0x02, 0x86, 0x73,
- 0x61, 0xed, 0xe0, 0xa6, 0x19, 0x68, 0x74, 0x65, 0x6e, 0x61, 0xf7, 0xe0,
- 0xa2, 0x05, 0xf2, 0x03, 0x05, 0x85, 0x73, 0xfa, 0xe0, 0x98, 0x39, 0x6d,
- 0xe9, 0xe0, 0x9b, 0xd3, 0x61, 0xe2, 0xe0, 0x5b, 0xbd, 0xee, 0x02, 0x85,
- 0x6f, 0xf5, 0xe0, 0xa1, 0xce, 0xe7, 0x04, 0xe0, 0xaa, 0xa2, 0x67, 0xef,
- 0xe0, 0xa9, 0xa0, 0xec, 0x07, 0x05, 0x60, 0x96, 0xef, 0xc7, 0xaa, 0x6d,
- 0xe1, 0xe0, 0x24, 0x0f, 0x62, 0x72, 0x7a, 0x79, 0x63, 0xe8, 0xe0, 0xa5,
- 0xcf, 0xeb, 0x06, 0x03, 0x04, 0xe0, 0x65, 0x97, 0xf5, 0xcb, 0x3b, 0xe5,
- 0xe0, 0xa4, 0xbc, 0xe1, 0x02, 0x8a, 0x79, 0x61, 0x6d, 0x61, 0xae, 0x60,
- 0x9f, 0xca, 0xc8, 0xfc, 0x73, 0x61, 0xae, 0x60, 0x7f, 0xee, 0xce, 0x96,
- 0x6a, 0xe9, 0x02, 0x84, 0xed, 0xe0, 0x56, 0xc4, 0xeb, 0xe0, 0x3f, 0xc2,
- 0x66, 0x66, 0x6c, 0x65, 0x63, 0xe5, 0xe0, 0xa3, 0x7a, 0xae, 0x60, 0x26,
- 0x37, 0x60, 0x7f, 0x13, 0x41, 0xe7, 0x84, 0xf6, 0x1c, 0x26, 0x05, 0x04,
- 0x0b, 0x07, 0x04, 0x21, 0x40, 0x43, 0x06, 0x04, 0x25, 0x40, 0xb1, 0x06,
- 0x27, 0x40, 0xc8, 0x04, 0x06, 0x04, 0x40, 0x9e, 0x06, 0xe0, 0x84, 0x3a,
- 0x1f, 0xc3, 0x05, 0x18, 0xe0, 0x33, 0x83, 0xe5, 0x02, 0x8c, 0x6c, 0x65,
- 0x72, 0xae, 0x03, 0xc2, 0xe2, 0x1f, 0x43, 0xf8, 0xdd, 0xfe, 0xe7, 0x60,
- 0x3b, 0x64, 0x41, 0xae, 0xe0, 0x55, 0x8f, 0x61, 0x72, 0x67, 0xe7, 0xe0,
- 0x97, 0x72, 0x78, 0xec, 0xe0, 0x98, 0xbf, 0xf6, 0xe0, 0xa7, 0xf9, 0xf5,
- 0x04, 0xe0, 0xa9, 0xf4, 0x6c, 0x74, 0xf2, 0xe0, 0x4a, 0xd2, 0x73, 0xae,
- 0x60, 0x91, 0x26, 0xd6, 0xc4, 0xf2, 0xe0, 0xa7, 0xe3, 0xf0, 0x05, 0x0f,
- 0xe0, 0x63, 0x69, 0xf3, 0x04, 0xe0, 0x9d, 0x80, 0x2e, 0xed, 0x04, 0xe0,
- 0x64, 0xb9, 0xe3, 0xe0, 0x7a, 0x63, 0xee, 0x04, 0xe0, 0xa4, 0x1c, 0x70,
- 0x6c, 0x75, 0xf3, 0xe0, 0xa8, 0x80, 0xef, 0x07, 0x04, 0x07, 0x0b, 0x0a,
- 0x14, 0x84, 0xf9, 0xe0, 0x40, 0x09, 0xf4, 0x60, 0x94, 0x33, 0x53, 0xf7,
- 0x8f, 0x73, 0xf3, 0x04, 0xe0, 0xa8, 0x14, 0x65, 0xf6, 0xe0, 0x9a, 0x28,
- 0x6f, 0x72, 0x6c, 0x6f, 0x70, 0x65, 0xf2, 0xe0, 0x91, 0xbd, 0xec, 0x06,
- 0x04, 0x04, 0xe0, 0x85, 0x0f, 0xf9, 0xe0, 0x53, 0x3c, 0xf6, 0xe0, 0xa8,
- 0x03, 0x6f, 0xe7, 0xe0, 0x55, 0x8f, 0xe4, 0xe0, 0x7e, 0xb9, 0xe1, 0xc1,
- 0xfe, 0xee, 0x60, 0x8e, 0x76, 0xdb, 0x08, 0xed, 0xe0, 0x83, 0x00, 0xec,
- 0x02, 0x84, 0xef, 0xe0, 0x8a, 0xb7, 0xe1, 0x02, 0x93, 0x64, 0xe9, 0x02,
- 0x86, 0x6d, 0x69, 0xf2, 0xe0, 0xa5, 0xc3, 0x6b, 0x61, 0x76, 0x6b, 0x61,
- 0xfa, 0xe0, 0xa5, 0xba, 0x61, 0x6e, 0x64, 0x65, 0xf2, 0xe0, 0x70, 0xd0,
- 0xe9, 0x14, 0x04, 0x08, 0x07, 0x06, 0x16, 0x19, 0x28, 0x05, 0x08, 0x05,
- 0x07, 0x0e, 0x60, 0x85, 0xe7, 0x60, 0x22, 0xbc, 0x81, 0xf8, 0xe0, 0xa7,
- 0xdf, 0xf6, 0x60, 0x40, 0x0a, 0x60, 0x67, 0x85, 0x9c, 0x74, 0x65, 0x72,
- 0xe2, 0xe0, 0xa7, 0x27, 0xf3, 0x60, 0x9c, 0x95, 0xca, 0xeb, 0xf2, 0x02,
- 0x8f, 0x74, 0x75, 0x61, 0xec, 0x05, 0x01, 0xe0, 0x98, 0x25, 0x2d, 0x75,
- 0xf3, 0xe0, 0x85, 0xdc, 0xe7, 0xe0, 0xa7, 0xd4, 0xf0, 0x05, 0x07, 0xe0,
- 0xa8, 0xff, 0x73, 0x69, 0x6e, 0xe1, 0xe0, 0xa8, 0x15, 0x2e, 0x6a, 0x65,
- 0x6c, 0x61, 0x73, 0x74, 0x69, 0xe3, 0xe0, 0x91, 0x16, 0xee, 0x06, 0x0f,
- 0x0d, 0xe0, 0xa8, 0xd0, 0xee, 0x02, 0x87, 0x79, 0x74, 0x73, 0xe9, 0xe0,
- 0x86, 0x79, 0x69, 0xe3, 0xe0, 0x86, 0x74, 0xe8, 0x02, 0x86, 0x70, 0x68,
- 0xf5, 0xe0, 0x96, 0x1b, 0xec, 0xe0, 0x96, 0x1f, 0x64, 0xe1, 0xe0, 0x99,
- 0x28, 0x6c, 0xec, 0xe0, 0x93, 0xd4, 0xeb, 0x60, 0x93, 0x43, 0x4a, 0xb7,
- 0xc9, 0x36, 0x64, 0xe5, 0xe0, 0x8f, 0x95, 0xe3, 0x60, 0x24, 0x9b, 0xe0,
- 0x62, 0x2f, 0x62, 0xef, 0x02, 0x81, 0x2d, 0x76, 0x61, 0x6c, 0x65, 0x6e,
- 0xf4, 0xe0, 0xa2, 0x17, 0x61, 0xea, 0xe0, 0x9c, 0xab, 0xe7, 0x60, 0xa4,
- 0x4b, 0xc4, 0x53, 0xe6, 0x04, 0xe0, 0xa6, 0xff, 0x73, 0x2e, 0x63, 0x6c,
- 0x6f, 0x75, 0x64, 0x39, 0xae, 0x0a, 0x09, 0x5e, 0xb2, 0x40, 0x91, 0x60,
- 0x5b, 0xdd, 0x8d, 0x75, 0x73, 0xad, 0x60, 0x7b, 0x18, 0xe0, 0x25, 0x82,
- 0xe1, 0x5e, 0xfc, 0xe0, 0x5c, 0x84, 0xe5, 0x0e, 0x06, 0x12, 0x21, 0x40,
- 0x45, 0x1d, 0x04, 0x15, 0x60, 0xa5, 0xac, 0xc2, 0x03, 0x76, 0x65, 0xec,
- 0xe0, 0x75, 0x87, 0xf4, 0x06, 0x60, 0xa6, 0xfb, 0xc1, 0x5b, 0x65, 0x72,
- 0x69, 0x6e, 0x61, 0x69, 0x72, 0xe5, 0xe0, 0x44, 0x23, 0x73, 0xf4, 0x08,
- 0x0f, 0x60, 0x4a, 0x9a, 0xe0, 0x59, 0x43, 0xf6, 0x02, 0x87, 0x1f, 0x43,
- 0x65, 0xe7, 0xe0, 0x9f, 0x97, 0x61, 0xe7, 0xe0, 0x9c, 0x85, 0x72, 0x65,
- 0xad, 0x60, 0x2a, 0xe5, 0xc1, 0x25, 0xf2, 0x0b, 0x0f, 0x04, 0x12, 0x07,
- 0x09, 0x60, 0x9f, 0xa1, 0xc1, 0x2c, 0xf3, 0x07, 0x60, 0x61, 0x3b, 0xe0,
- 0x37, 0xee, 0x69, 0x63, 0x68, 0x65, 0xf2, 0xdc, 0x25, 0xf2, 0xe0, 0x39,
- 0x61, 0x6d, 0x1f, 0x43, 0x76, 0x67, 0x65, 0x6e, 0x73, 0x62, 0x65, 0x72,
- 0x61, 0xf4, 0x5c, 0x12, 0xe0, 0x78, 0x4c, 0x69, 0x73, 0x69, 0xe7, 0xe0,
- 0xa6, 0xbb, 0x63, 0x65, 0xec, 0x60, 0x38, 0xdf, 0xe0, 0x49, 0x36, 0xe2,
- 0xe0, 0x47, 0x07, 0xee, 0x07, 0x04, 0x06, 0x04, 0xe0, 0xa5, 0xcc, 0xf4,
- 0xe0, 0x28, 0x02, 0x6e, 0x65, 0xf3, 0xe0, 0x2a, 0xf9, 0xe9, 0xe0, 0x74,
- 0xb6, 0xe5, 0x60, 0x6c, 0x6a, 0xe0, 0x36, 0xed, 0x6c, 0xf6, 0xd9, 0x2c,
- 0xe7, 0x02, 0x84, 0x1f, 0x43, 0xe5, 0x88, 0xe1, 0x06, 0x60, 0xa5, 0x4d,
- 0xc0, 0xd4, 0x72, 0x73, 0x68, 0xe5, 0xe0, 0xa0, 0x19, 0x66, 0xf3, 0xe0,
- 0xa1, 0x78, 0xe4, 0xe0, 0xa1, 0x1a, 0xe3, 0x60, 0xa5, 0xa2, 0xc2, 0x03,
- 0xe2, 0xe0, 0xa5, 0x9c, 0xe1, 0x0f, 0x11, 0x08, 0x10, 0x3d, 0x04, 0x0b,
- 0x07, 0x04, 0x06, 0x60, 0xa5, 0x02, 0xc2, 0x04, 0xf2, 0x07, 0x05, 0x60,
- 0x92, 0x54, 0xc9, 0x7b, 0x67, 0xe7, 0xe0, 0x94, 0xf1, 0xe5, 0xe0, 0x3e,
- 0x70, 0x70, 0x6f, 0xf2, 0x60, 0x8f, 0x98, 0xce, 0x36, 0xee, 0x06, 0x4d,
- 0xed, 0xe0, 0x97, 0xd8, 0xe7, 0x04, 0xe0, 0xa5, 0xd2, 0xf5, 0xe0, 0x97,
- 0x78, 0xec, 0x04, 0x21, 0x0c, 0x81, 0xec, 0x02, 0x84, 0x1f, 0x43, 0xe9,
- 0x89, 0xe5, 0x07, 0x0f, 0x10, 0x04, 0xe0, 0xa5, 0x97, 0xe5, 0x03, 0x02,
- 0x85, 0xe4, 0x86, 0xad, 0x02, 0x82, 0x64, 0x2d, 0x61, 0xef, 0xc5, 0x97,
- 0xad, 0x0f, 0x84, 0x65, 0x72, 0xae, 0x02, 0x83, 0xef, 0xdb, 0x21, 0xe8,
- 0xe0, 0x2b, 0x73, 0x2d, 0xe4, 0x02, 0x81, 0x2d, 0x61, 0x6f, 0xf3, 0xe0,
- 0x9e, 0xb5, 0xeb, 0xe0, 0x6f, 0x42, 0xe7, 0x04, 0xe0, 0x52, 0xf4, 0xe1,
- 0x60, 0xa0, 0xe7, 0xc4, 0xa0, 0x64, 0xf3, 0x60, 0x91, 0xee, 0xcc, 0xdb,
- 0x63, 0xe1, 0xd1, 0xd7, 0x61, 0x70, 0xf3, 0xe0, 0xa5, 0x72, 0xae, 0x60,
- 0xa2, 0x01, 0x43, 0x02, 0xc0, 0x6e, 0xae, 0x60, 0x93, 0xce, 0xd3, 0x2d,
- 0x2d, 0x69, 0x6e, 0x66, 0xef, 0xe0, 0x96, 0xc1, 0xf5, 0x1b, 0x18, 0x05,
- 0x10, 0x2c, 0x40, 0xb6, 0x40, 0x4e, 0x2c, 0x09, 0x40, 0x51, 0x1b, 0x18,
- 0x31, 0x13, 0x0d, 0x06, 0x0c, 0x05, 0x10, 0x14, 0x1c, 0x1b, 0x07, 0x90,
- 0xfa, 0x07, 0x04, 0x60, 0x8b, 0xc0, 0xdb, 0x08, 0xf3, 0xe0, 0x69, 0xa1,
- 0xe8, 0x02, 0x82, 0xe8, 0x82, 0x67, 0x6f, 0x72, 0xef, 0xe0, 0x4f, 0xb0,
- 0xf9, 0x60, 0xa6, 0xb3, 0x88, 0xf7, 0x05, 0x06, 0xe0, 0x69, 0x81, 0x75,
- 0x2e, 0xe1, 0xe0, 0xa6, 0x56, 0xe1, 0xe0, 0x53, 0x93, 0xf4, 0x08, 0x06,
- 0x0e, 0x60, 0x9c, 0x12, 0xc4, 0xd3, 0x77, 0x65, 0xee, 0xe0, 0x91, 0xd6,
- 0xf3, 0x02, 0x87, 0x75, 0x6e, 0x6f, 0x6d, 0xe9, 0xd4, 0x7a, 0xe9, 0xe0,
- 0x99, 0xdb, 0xe1, 0x02, 0x86, 0xfa, 0x4c, 0x0f, 0xe0, 0x3d, 0xcd, 0x73,
- 0x68, 0xe9, 0xe0, 0x61, 0x9e, 0xf3, 0x0d, 0x06, 0x04, 0x04, 0x05, 0x40,
- 0x44, 0x1b, 0x60, 0x8f, 0x1e, 0xd6, 0xdd, 0xf5, 0x60, 0x4b, 0x6c, 0xd2,
- 0x49, 0xf4, 0xe0, 0x7e, 0xf6, 0xf2, 0xe0, 0x73, 0x1c, 0x68, 0x69, 0xeb,
- 0xce, 0x02, 0x65, 0xf2, 0x02, 0x93, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
- 0x74, 0xae, 0x04, 0xe0, 0xa5, 0x50, 0x67, 0x6f, 0x6f, 0xe7, 0xe0, 0xa6,
- 0x34, 0xae, 0x08, 0x0a, 0x0c, 0x04, 0x51, 0x39, 0xcc, 0x8c, 0x70, 0x61,
- 0x72, 0x74, 0x79, 0x2e, 0xe5, 0xe0, 0x88, 0x1a, 0x6c, 0x6f, 0x63, 0x61,
- 0x6c, 0x63, 0x65, 0x72, 0xf4, 0xe0, 0x6d, 0x9b, 0xe6, 0xe0, 0xa6, 0x10,
- 0x61, 0x73, 0x65, 0x69, 0x6e, 0x65, 0xf4, 0xe0, 0x6d, 0x32, 0xae, 0x14,
- 0x60, 0x68, 0xd8, 0x60, 0x25, 0x42, 0x44, 0x37, 0x42, 0x43, 0x24, 0x4a,
- 0xeb, 0x43, 0x8f, 0x41, 0x94, 0xc1, 0x34, 0xee, 0x60, 0x9c, 0x8f, 0xc7,
- 0xca, 0xad, 0x09, 0x0a, 0x0d, 0x60, 0x76, 0xcc, 0x02, 0x02, 0x82, 0x77,
- 0x65, 0x73, 0x74, 0xad, 0x60, 0x9c, 0xa6, 0xc5, 0x41, 0x67, 0x6f, 0x76,
- 0xad, 0x04, 0xe0, 0x9c, 0xb3, 0x77, 0xe5, 0xe0, 0x9c, 0xb3, 0x65, 0x61,
- 0x73, 0x74, 0xad, 0x04, 0xe0, 0x9c, 0x8b, 0x31, 0xae, 0x04, 0xe0, 0xa1,
- 0xc8, 0xe1, 0x60, 0x9c, 0x8c, 0xc1, 0x66, 0xf2, 0x0b, 0x04, 0x05, 0x04,
- 0x04, 0x04, 0x07, 0x0d, 0xe0, 0x61, 0x86, 0xf5, 0xe0, 0x4a, 0xdb, 0x6f,
- 0xf7, 0xe0, 0x4b, 0x03, 0xee, 0xe0, 0x7b, 0x9f, 0xec, 0xe0, 0x39, 0x96,
- 0xe9, 0xe0, 0x7b, 0x97, 0x65, 0x73, 0x68, 0xe9, 0xe0, 0x4c, 0xa2, 0x62,
- 0x69, 0x6e, 0xef, 0x02, 0x81, 0x2d, 0x70, 0x65, 0xf3, 0xe0, 0x8c, 0x5d,
- 0xe1, 0x09, 0x05, 0x04, 0x60, 0x36, 0xf2, 0xe0, 0x63, 0x53, 0x79, 0xe1,
- 0xe0, 0x6d, 0xdb, 0xf5, 0xe0, 0xa0, 0xca, 0x73, 0x6f, 0xe5, 0xe0, 0xa0,
- 0xe2, 0xf0, 0x09, 0x06, 0x04, 0x05, 0x60, 0xa2, 0xf5, 0xc1, 0x2d, 0xf0,
- 0x4e, 0xcb, 0xe0, 0x83, 0xaa, 0xef, 0xe0, 0x68, 0x3b, 0x6c, 0xe9, 0xe0,
- 0xa4, 0x59, 0x61, 0x61, 0x73, 0x2e, 0x6b, 0x61, 0x7a, 0x74, 0x65, 0x6c,
- 0x65, 0x70, 0x6f, 0x72, 0x74, 0xae, 0xe0, 0x55, 0x72, 0xef, 0x60, 0x3e,
- 0x75, 0x5e, 0xc5, 0xe0, 0x45, 0xc1, 0xee, 0x0c, 0x06, 0x0b, 0x06, 0x20,
- 0x06, 0x60, 0x80, 0x80, 0xe0, 0x22, 0xed, 0x7a, 0x65, 0xee, 0xe0, 0x89,
- 0xd9, 0x75, 0x73, 0x75, 0x61, 0x6c, 0x70, 0x65, 0xf2, 0xe0, 0x76, 0x80,
- 0x6e, 0x61, 0xee, 0xe0, 0x9f, 0x6b, 0xe9, 0x06, 0x0f, 0x06, 0xe0, 0xa2,
- 0x23, 0xf6, 0x02, 0x86, 0x65, 0x72, 0xf3, 0xe0, 0x8a, 0x23, 0xae, 0x60,
- 0x9a, 0x34, 0xc6, 0xb1, 0xe3, 0x56, 0x9b, 0xe0, 0x87, 0x76, 0xb5, 0xe0,
- 0xa4, 0xdd, 0xe4, 0x60, 0x8c, 0x4a, 0xc5, 0xbc, 0x61, 0x7a, 0x75, 0xeb,
- 0xe0, 0x6d, 0xb9, 0xed, 0x06, 0x09, 0x06, 0xe0, 0x67, 0xb1, 0xe9, 0x04,
- 0xe0, 0x8d, 0xd2, 0xe7, 0xe0, 0x67, 0xba, 0xe2, 0x60, 0x9e, 0x4f, 0xc4,
- 0x8e, 0x61, 0xea, 0xe0, 0x6b, 0xea, 0xec, 0x05, 0x04, 0xe0, 0x6c, 0x63,
- 0xf3, 0xe0, 0x8d, 0xdc, 0x6c, 0x65, 0x6e, 0xf3, 0x04, 0xe0, 0x54, 0x49,
- 0x76, 0x61, 0xee, 0xe0, 0x9d, 0xd2, 0xeb, 0x06, 0x09, 0x09, 0xe0, 0xa4,
- 0xa5, 0xe9, 0x04, 0xe0, 0x9d, 0x5f, 0xe8, 0xe0, 0x65, 0x65, 0x30, 0x2e,
- 0x62, 0x69, 0x67, 0xf6, 0xe0, 0xa3, 0xa0, 0xae, 0x0f, 0x46, 0x37, 0x60,
- 0x86, 0x77, 0x44, 0x37, 0x4d, 0x52, 0x45, 0x23, 0x41, 0x18, 0x9c, 0x70,
- 0x72, 0x69, 0x6d, 0xe5, 0xe0, 0x22, 0x6c, 0x6a, 0xe9, 0x05, 0x08, 0xe0,
- 0x96, 0x49, 0x74, 0x61, 0x77, 0x61, 0xf2, 0xe0, 0x6d, 0x9d, 0xe9, 0xe0,
- 0x55, 0xb3, 0x69, 0x2e, 0x6e, 0x61, 0x62, 0x75, 0x2e, 0x63, 0x61, 0xf3,
- 0xe0, 0x94, 0x25, 0x68, 0x2d, 0xef, 0xe0, 0x8f, 0x9c, 0xe7, 0x07, 0x60,
- 0x67, 0x35, 0xe0, 0x3d, 0x2a, 0xe9, 0xe0, 0x2c, 0x4e, 0x66, 0xe3, 0xe0,
- 0x84, 0x82, 0xe5, 0x04, 0xe0, 0x3c, 0x7f, 0x6e, 0xef, 0x04, 0xe0, 0x9b,
- 0x7f, 0x68, 0xe1, 0xe0, 0x31, 0xbb, 0xe4, 0x08, 0x04, 0x60, 0x5c, 0xac,
- 0xe0, 0x45, 0x8a, 0xef, 0xe0, 0x4b, 0x3e, 0xe9, 0x60, 0x81, 0xc3, 0xe0,
- 0x21, 0x1a, 0x63, 0x68, 0xe9, 0x03, 0x0d, 0x84, 0xee, 0x02, 0x85, 0x6f,
- 0xed, 0xe0, 0x50, 0x5a, 0x61, 0xe4, 0xe0, 0x50, 0x87, 0xeb, 0xe0, 0x55,
- 0x0e, 0x68, 0xe1, 0xe0, 0x4f, 0x7f, 0xe2, 0x06, 0x60, 0x83, 0x11, 0xde,
- 0x95, 0xe5, 0x04, 0xe0, 0xa1, 0xf4, 0xf2, 0x02, 0x88, 0x73, 0x70, 0x61,
- 0x63, 0xe5, 0xe0, 0x6d, 0xfe, 0xae, 0xe0, 0x38, 0x35, 0xe1, 0x60, 0x26,
- 0xdf, 0xe0, 0x7d, 0x1b, 0xb2, 0x02, 0x86, 0x2d, 0x6c, 0x6f, 0x63, 0x61,
- 0x6c, 0x2e, 0x78, 0x6e, 0xe2, 0xe0, 0x7f, 0x8c, 0xae, 0x06, 0x60, 0x92,
- 0x77, 0xd1, 0x64, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0xec, 0xe0, 0x88,
- 0xf5, 0xf4, 0x27, 0x07, 0x2c, 0x13, 0x2e, 0x40, 0x61, 0x07, 0x40, 0xb7,
- 0x41, 0x7a, 0x04, 0x42, 0x30, 0x11, 0x21, 0x0a, 0x0c, 0x1e, 0x32, 0x40,
- 0x67, 0x09, 0x40, 0xcc, 0x06, 0x0d, 0x42, 0x41, 0x60, 0x70, 0x3c, 0x50,
- 0x03, 0x4f, 0x1a, 0xc8, 0x76, 0x1f, 0x43, 0x78, 0xee, 0xe0, 0x70, 0xae,
- 0xf9, 0x07, 0x12, 0x0a, 0x03, 0xe0, 0x9c, 0x61, 0xf3, 0x06, 0x60, 0x93,
- 0xef, 0xcb, 0x51, 0xf6, 0x04, 0xe0, 0x94, 0x3c, 0x1f, 0x43, 0xe6, 0xe0,
- 0x97, 0xe5, 0x70, 0x65, 0x64, 0x72, 0x65, 0x61, 0xed, 0xe0, 0xa2, 0x0d,
- 0xee, 0xcf, 0xa6, 0x63, 0xe8, 0xe0, 0x91, 0x7b, 0xf7, 0x06, 0x60, 0x90,
- 0x02, 0xd3, 0x6f, 0x6d, 0x61, 0x69, 0x6c, 0xae, 0x60, 0x80, 0xb9, 0x5f,
- 0xe4, 0xc2, 0xac, 0xf6, 0x07, 0x05, 0x60, 0xa0, 0xef, 0xc2, 0x69, 0x65,
- 0xe4, 0xe0, 0x5f, 0x37, 0xae, 0x0b, 0x06, 0x08, 0x60, 0x59, 0x9e, 0x60,
- 0x35, 0xf0, 0xcf, 0xc9, 0xf4, 0x60, 0xa0, 0xd8, 0xc1, 0x1a, 0xe9, 0x60,
- 0xa0, 0xf3, 0x40, 0x94, 0xc0, 0x84, 0xe2, 0x60, 0x98, 0xe4, 0x48, 0xce,
- 0xb2, 0xf5, 0x0b, 0x08, 0x0a, 0x04, 0x0b, 0x1a, 0x09, 0x60, 0xa0, 0xb3,
- 0x9b, 0x79, 0x65, 0x6e, 0x71, 0xf5, 0xe0, 0x9a, 0x77, 0x78, 0x66, 0x61,
- 0x6d, 0x69, 0x6c, 0xf9, 0xe0, 0xa0, 0x4c, 0xf6, 0xe0, 0xa1, 0x2d, 0xf3,
- 0x04, 0xe0, 0xa2, 0x0f, 0x63, 0x61, 0xee, 0xe0, 0x9a, 0x02, 0xf2, 0x04,
- 0x07, 0x04, 0x84, 0x79, 0x73, 0x74, 0xf9, 0xe0, 0x7b, 0x91, 0xe9, 0xe0,
- 0x22, 0x2f, 0xe5, 0xe0, 0x90, 0x8f, 0xae, 0x60, 0x90, 0xe4, 0xd0, 0xb7,
- 0xee, 0x04, 0xe0, 0x96, 0xf4, 0xeb, 0xe0, 0xa0, 0x1a, 0xec, 0x04, 0xe0,
- 0xa0, 0xf7, 0x65, 0x61, 0x70, 0x2d, 0x70, 0x61, 0x72, 0x74, 0xee, 0xe0,
- 0x7a, 0x6e, 0xf4, 0x60, 0x42, 0x31, 0xe0, 0x60, 0xa4, 0xf3, 0x06, 0x40,
- 0x98, 0x04, 0x04, 0x8a, 0xf5, 0x0e, 0x05, 0x06, 0x0b, 0x1e, 0x0b, 0x07,
- 0x20, 0x04, 0x0b, 0x06, 0xe0, 0x59, 0xa5, 0x79, 0xe1, 0xe0, 0x61, 0xfb,
- 0x77, 0x61, 0xee, 0xe0, 0x60, 0xb4, 0x73, 0x68, 0x69, 0x6d, 0x61, 0xae,
- 0x60, 0x87, 0x50, 0xd6, 0x10, 0x72, 0xf5, 0x06, 0x04, 0x03, 0xe0, 0x7a,
- 0x74, 0xf4, 0xe0, 0x3b, 0x21, 0xef, 0xd0, 0x59, 0xe7, 0x04, 0xe0, 0x63,
- 0x2c, 0xe1, 0x04, 0xe0, 0x78, 0x0e, 0x73, 0xe8, 0xe0, 0x4d, 0x4e, 0xee,
- 0x02, 0x84, 0xef, 0xe0, 0x4b, 0x11, 0xe1, 0xe0, 0x67, 0x0a, 0x6d, 0x61,
- 0x67, 0xef, 0xe0, 0x54, 0xda, 0xeb, 0x02, 0x8e, 0xf5, 0x05, 0x04, 0xe0,
- 0x95, 0xf7, 0xed, 0xe0, 0x5f, 0xbe, 0xe2, 0xe0, 0x5f, 0x0f, 0xe9, 0x02,
- 0x86, 0x79, 0x6f, 0xee, 0xe0, 0x34, 0x4e, 0x67, 0x61, 0xf4, 0xe0, 0xa0,
- 0x74, 0xe9, 0xe0, 0x59, 0x9a, 0x67, 0xe1, 0x04, 0xe0, 0x96, 0xc4, 0x72,
- 0xf5, 0xe0, 0x67, 0x13, 0x63, 0x68, 0xe9, 0xe0, 0x4d, 0xa6, 0xe2, 0x04,
- 0xe0, 0x9d, 0x81, 0xe1, 0x04, 0xe0, 0x4c, 0xeb, 0xed, 0xe0, 0x3a, 0x72,
- 0xf4, 0xe0, 0x84, 0x4b, 0xeb, 0xe0, 0x90, 0xfb, 0x65, 0x6c, 0x69, 0x6e,
- 0x6f, 0x67, 0xf2, 0xe0, 0x96, 0xa8, 0xae, 0x60, 0xa0, 0x1b, 0xc1, 0xdf,
- 0xf2, 0x11, 0x08, 0x1e, 0x04, 0x23, 0x12, 0x40, 0x44, 0x40, 0xbd, 0x60,
- 0x8b, 0xca, 0x51, 0x20, 0xc3, 0xbc, 0x1f, 0xc3, 0x04, 0xe0, 0x6b, 0xf4,
- 0xf8, 0xbc, 0xf9, 0x03, 0x05, 0x8b, 0x73, 0xe9, 0xe0, 0x9a, 0xde, 0x63,
- 0x6c, 0x6f, 0x75, 0x64, 0x66, 0x6c, 0xe1, 0xe0, 0x87, 0x87, 0x2d, 0x73,
- 0x6e, 0x6f, 0x77, 0x70, 0xec, 0xe0, 0x48, 0x0d, 0xf5, 0xe0, 0x95, 0x07,
- 0xef, 0x05, 0x05, 0x09, 0x05, 0x84, 0x6e, 0xe4, 0xe0, 0x94, 0xf3, 0x6d,
- 0xf3, 0x60, 0x8c, 0xa8, 0x4c, 0xdb, 0xc2, 0x24, 0x69, 0xf4, 0xe0, 0x9b,
- 0x88, 0xe7, 0xe0, 0x6e, 0xe9, 0x61, 0x6e, 0xe4, 0xe0, 0x64, 0xd3, 0xe9,
- 0x02, 0x8a, 0x74, 0x6f, 0x6e, 0x2e, 0x7a, 0x6f, 0xee, 0xe0, 0x83, 0xcf,
- 0x65, 0xf3, 0xe0, 0x21, 0xba, 0xe5, 0x02, 0x85, 0x76, 0xe9, 0xe0, 0x89,
- 0x35, 0x6e, 0xf4, 0x04, 0xe0, 0x9f, 0x95, 0x69, 0xee, 0x03, 0x1c, 0x81,
- 0xef, 0x06, 0x03, 0x07, 0xe0, 0x9f, 0x80, 0xad, 0x02, 0x87, 0xf3, 0x15,
- 0x04, 0x09, 0xe0, 0x91, 0xd6, 0xe1, 0x05, 0x60, 0x9a, 0x70, 0x81, 0x6c,
- 0xf4, 0xe0, 0x9a, 0x6b, 0x2d, 0xf3, 0x02, 0x84, 0x1f, 0x43, 0xfc, 0x85,
- 0xf5, 0x02, 0x81, 0x65, 0xe4, 0x04, 0xe0, 0x91, 0xd6, 0xad, 0xe0, 0x91,
- 0xd5, 0xe1, 0x09, 0x1d, 0x04, 0x40, 0x66, 0x07, 0x0b, 0x0c, 0x8b, 0xf6,
- 0x04, 0xe0, 0x92, 0x1c, 0x65, 0xec, 0x05, 0x09, 0xe0, 0xa1, 0x44, 0x65,
- 0x72, 0xf3, 0x60, 0x42, 0xcc, 0xe0, 0x5e, 0x7e, 0xae, 0x60, 0x9c, 0xbe,
- 0x42, 0xc6, 0xc0, 0x84, 0xf0, 0xe0, 0x98, 0xd5, 0xee, 0x0c, 0x2a, 0x60,
- 0x43, 0x69, 0x60, 0x51, 0xe8, 0x43, 0x0d, 0xc2, 0x7b, 0xf3, 0x03, 0x14,
- 0x84, 0x75, 0x72, 0x6c, 0xae, 0x03, 0x05, 0x84, 0x6e, 0xec, 0xe0, 0xa1,
- 0x0c, 0xe5, 0xe0, 0x5c, 0x08, 0xe2, 0xe0, 0x83, 0x36, 0xf0, 0xe0, 0x7b,
- 0x58, 0x6c, 0x61, 0x74, 0xe5, 0x02, 0x84, 0xe4, 0xe0, 0x81, 0x51, 0xae,
- 0xe0, 0x83, 0xad, 0xe9, 0x03, 0x0b, 0x89, 0x62, 0x61, 0x72, 0x6c, 0x65,
- 0x74, 0x74, 0xe1, 0xe0, 0x9a, 0x61, 0x61, 0x6e, 0x64, 0x72, 0x69, 0xe1,
- 0xe0, 0x98, 0x72, 0xad, 0x02, 0x8b, 0x62, 0x61, 0x72, 0x6c, 0x65, 0x74,
- 0x74, 0xe1, 0xe0, 0x90, 0xc6, 0x61, 0x6e, 0x64, 0x72, 0x69, 0xe1, 0xe0,
- 0x98, 0x5a, 0x69, 0xee, 0x60, 0x85, 0xde, 0xc5, 0x70, 0x66, 0x66, 0x69,
- 0x63, 0x70, 0x6c, 0x65, 0xf8, 0xe0, 0x88, 0xe3, 0x65, 0x75, 0x6d, 0x74,
- 0x67, 0x65, 0x72, 0x61, 0xe4, 0xe0, 0x79, 0x1a, 0xe4, 0x04, 0xe0, 0x87,
- 0x6c, 0xe5, 0x60, 0x85, 0xbd, 0xda, 0xf1, 0xae, 0xda, 0x3e, 0xae, 0x60,
- 0x9a, 0x47, 0x44, 0x5c, 0xc0, 0x6e, 0xf0, 0xe0, 0x9e, 0x9a, 0xef, 0x19,
- 0x0b, 0x40, 0x5c, 0x14, 0x12, 0x0f, 0x24, 0x22, 0x0a, 0x0c, 0x2c, 0x2b,
- 0x04, 0x40, 0x50, 0x0e, 0x2a, 0x04, 0x07, 0x0f, 0x12, 0xe0, 0x9e, 0x79,
- 0xfa, 0x04, 0xe0, 0x3e, 0x49, 0x73, 0x64, 0xe5, 0xe0, 0x9f, 0x76, 0xf9,
- 0x06, 0x40, 0x43, 0xe0, 0x9d, 0xc2, 0xef, 0x0d, 0x18, 0x04, 0x03, 0x08,
- 0x04, 0x06, 0x60, 0x5e, 0x26, 0xe0, 0x3c, 0x07, 0xf4, 0x03, 0x04, 0x85,
- 0xf3, 0xe0, 0x7b, 0xc9, 0x6f, 0xed, 0xe0, 0x9e, 0xa0, 0xe1, 0x04, 0xe0,
- 0xa0, 0x4e, 0xae, 0x60, 0x9b, 0x05, 0xc3, 0x33, 0x73, 0xe1, 0xd8, 0xaa,
- 0xef, 0xc5, 0x21, 0xee, 0x60, 0x84, 0xf7, 0x4f, 0x38, 0xca, 0x3b, 0xeb,
- 0xe0, 0x57, 0x6f, 0x68, 0x61, 0xf3, 0xe0, 0x28, 0x6d, 0xe1, 0xe0, 0x94,
- 0x1c, 0xe1, 0x05, 0x08, 0xe0, 0x9e, 0x68, 0x6d, 0x61, 0xae, 0x60, 0x94,
- 0xff, 0xc9, 0x78, 0xeb, 0xe0, 0x94, 0x80, 0xf7, 0x02, 0x8c, 0xee, 0x04,
- 0xe0, 0xa0, 0x11, 0x6e, 0x65, 0x77, 0xf3, 0xe0, 0x92, 0x8e, 0x61, 0xe4,
- 0xe0, 0x38, 0x8f, 0x75, 0xf2, 0x04, 0xe0, 0x9d, 0x96, 0x69, 0x73, 0x6d,
- 0xae, 0x60, 0x71, 0xeb, 0x60, 0x29, 0x8b, 0xc0, 0x5d, 0xf4, 0x04, 0xe0,
- 0x7a, 0x44, 0x74, 0x6f, 0x72, 0x69, 0xae, 0x60, 0x84, 0x04, 0xda, 0x3a,
- 0xf3, 0x09, 0x07, 0x05, 0x60, 0x4b, 0xbd, 0xe0, 0x52, 0x0e, 0x68, 0xe9,
- 0x60, 0x99, 0x34, 0xc0, 0x98, 0x63, 0xe1, 0xe0, 0x97, 0x8a, 0xe1, 0x04,
- 0xe0, 0x99, 0xc7, 0x73, 0x68, 0x69, 0x6d, 0x69, 0xfa, 0xe0, 0x30, 0xf0,
- 0xf2, 0x07, 0x04, 0x03, 0x08, 0xe0, 0x21, 0xb5, 0xf5, 0xe0, 0x3e, 0xe2,
- 0xf3, 0xd7, 0x85, 0xe9, 0x04, 0xe0, 0x94, 0x49, 0xe4, 0xce, 0x5d, 0xe1,
- 0x04, 0xe0, 0x9d, 0x6d, 0x68, 0x69, 0xed, 0xe0, 0x5c, 0xe1, 0xf0, 0x04,
- 0xe0, 0x9f, 0x99, 0x61, 0xfa, 0xe0, 0x66, 0xb0, 0xef, 0x04, 0xe0, 0x9a,
- 0xbf, 0xec, 0x60, 0x5e, 0x3e, 0xe0, 0x3e, 0xe7, 0xee, 0x09, 0x0a, 0x06,
- 0x09, 0x4e, 0x17, 0xe0, 0x5e, 0x55, 0xef, 0x04, 0xe0, 0x69, 0x2e, 0x73,
- 0xe8, 0xe0, 0x3d, 0x21, 0x6b, 0x6f, 0x74, 0xf3, 0xdb, 0xf7, 0x64, 0x61,
- 0x62, 0x61, 0x79, 0xe1, 0xe0, 0x5d, 0x0d, 0xe1, 0x04, 0xe0, 0x51, 0xb6,
- 0xed, 0xe0, 0x68, 0x24, 0xed, 0x05, 0x04, 0x16, 0xcf, 0xf6, 0x6f, 0xe2,
- 0xce, 0x06, 0xe9, 0x0d, 0x04, 0x60, 0x28, 0x7f, 0x5f, 0x15, 0x60, 0x21,
- 0x0c, 0xe0, 0x33, 0x8c, 0xf9, 0xe0, 0x67, 0xc5, 0xeb, 0xe0, 0x71, 0x95,
- 0xe1, 0x04, 0xe0, 0x9d, 0x80, 0x6b, 0x6f, 0xed, 0xe0, 0x8c, 0xba, 0xec,
- 0xe0, 0x7a, 0xbf, 0xeb, 0x08, 0x04, 0x15, 0x0f, 0x07, 0xe0, 0x6d, 0xca,
- 0xf9, 0xe0, 0x43, 0x0f, 0xf5, 0x02, 0x87, 0x79, 0x61, 0x6d, 0xe1, 0xe0,
- 0x9d, 0x03, 0x73, 0x68, 0x69, 0x6d, 0x61, 0xae, 0x60, 0x99, 0x9c, 0xc3,
- 0xc9, 0xef, 0x02, 0x86, 0x72, 0x6f, 0xfa, 0xe0, 0x26, 0xa2, 0x6e, 0x61,
- 0xed, 0xe0, 0x92, 0xee, 0xe9, 0x60, 0x26, 0x97, 0xe0, 0x6f, 0x8b, 0xe1,
- 0x03, 0x06, 0x87, 0x73, 0x68, 0xe9, 0xe0, 0x51, 0x44, 0x6d, 0x61, 0x63,
- 0xe8, 0xe0, 0x4f, 0xae, 0x69, 0xae, 0x60, 0x97, 0x51, 0xc2, 0x49, 0xe8,
- 0x06, 0x60, 0x83, 0x76, 0xce, 0xed, 0x6e, 0x6f, 0x73, 0xe8, 0xe0, 0x9c,
- 0xf3, 0xe7, 0x07, 0x05, 0x08, 0x04, 0xe0, 0x95, 0xfc, 0x75, 0xf2, 0xe0,
- 0x83, 0x57, 0x6c, 0x69, 0x61, 0x74, 0xf4, 0xe0, 0x2f, 0x3e, 0xe9, 0xe0,
- 0x44, 0x2d, 0xe1, 0x05, 0x05, 0xe0, 0x67, 0xac, 0x6e, 0xe5, 0xe0, 0x9c,
- 0xd0, 0x6b, 0x75, 0xf3, 0xe0, 0x9b, 0x92, 0xe5, 0xe0, 0x99, 0x5a, 0x64,
- 0xe1, 0x60, 0x93, 0x60, 0xc9, 0x08, 0x63, 0x68, 0xe9, 0x04, 0xe0, 0x9a,
- 0x48, 0x67, 0x69, 0xae, 0x60, 0x93, 0x0c, 0xc9, 0xd9, 0xe2, 0x05, 0x07,
- 0xe0, 0x4b, 0x94, 0x69, 0x73, 0x68, 0xe9, 0xe0, 0x54, 0x05, 0xe5, 0x60,
- 0x99, 0xae, 0x98, 0xae, 0x08, 0x60, 0x92, 0x3a, 0x45, 0xd2, 0xc4, 0x62,
- 0xe7, 0x60, 0x9c, 0x2a, 0xc2, 0x24, 0xee, 0x04, 0xe0, 0x9e, 0x65, 0xae,
- 0x06, 0x60, 0x99, 0x5a, 0xc3, 0x02, 0x6f, 0xf8, 0xe0, 0x50, 0x33, 0xed,
- 0x08, 0x60, 0x6f, 0xad, 0x5d, 0xc5, 0xd0, 0xde, 0xae, 0x11, 0x60, 0x8c,
- 0xd8, 0x45, 0x89, 0x03, 0x10, 0x47, 0x45, 0x13, 0x11, 0x42, 0xcd, 0x08,
- 0xc0, 0x8b, 0xed, 0x60, 0x92, 0x5a, 0xcb, 0xe2, 0xec, 0x04, 0xe0, 0x9e,
- 0x33, 0x6f, 0xee, 0xe0, 0x93, 0x2d, 0xeb, 0x05, 0x18, 0xe0, 0x9e, 0x10,
- 0x73, 0x61, 0xf4, 0xe0, 0x9b, 0x6d, 0xea, 0x0b, 0x04, 0x02, 0x06, 0x60,
- 0x8a, 0x9b, 0x4b, 0xed, 0xc7, 0x82, 0x1f, 0x43, 0xf8, 0xa8, 0xef, 0xa6,
- 0x6d, 0x61, 0xf8, 0xe0, 0x96, 0x8b, 0x65, 0x6c, 0xe4, 0xe0, 0x87, 0xc9,
- 0xe9, 0x08, 0x07, 0x09, 0x04, 0x07, 0x0a, 0xde, 0x44, 0xf2, 0x60, 0x66,
- 0x5b, 0xe0, 0x2b, 0xa8, 0xee, 0x04, 0xe0, 0x97, 0xba, 0xe7, 0xe0, 0x92,
- 0x39, 0xed, 0xe0, 0x9c, 0x54, 0x65, 0xee, 0x60, 0x8e, 0xe4, 0xc3, 0x90,
- 0x63, 0x6b, 0x65, 0x74, 0xf3, 0x60, 0x9c, 0xd3, 0xc1, 0x08, 0xe1, 0xe0,
- 0x9c, 0x2e, 0xe8, 0x0a, 0x0c, 0x08, 0x11, 0x17, 0x60, 0x9b, 0x3f, 0xc2,
- 0x4c, 0x75, 0x61, 0x74, 0x68, 0x69, 0x65, 0x6e, 0x68, 0xf5, 0xe0, 0x8b,
- 0xec, 0x72, 0x75, 0x68, 0x65, 0xf2, 0xe0, 0x9a, 0x46, 0xe9, 0x04, 0xe0,
- 0x77, 0x0b, 0x6e, 0x67, 0x64, 0x75, 0x73, 0x74, 0x64, 0x61, 0xf4, 0xe0,
- 0x68, 0x5b, 0xe5, 0x08, 0x07, 0x60, 0x48, 0x5f, 0xe0, 0x53, 0xd8, 0x77,
- 0x6f, 0x72, 0xeb, 0xe0, 0x59, 0x25, 0x61, 0xf4, 0x60, 0x89, 0xf0, 0xd0,
- 0xd9, 0xe1, 0x02, 0x92, 0x6e, 0xe8, 0x04, 0xe0, 0x47, 0x3c, 0x70, 0x68,
- 0x6f, 0x68, 0x6f, 0x63, 0x68, 0x69, 0xed, 0xe0, 0x8e, 0x41, 0xe9, 0x04,
- 0xe0, 0x59, 0x97, 0x6e, 0x67, 0xf5, 0xe0, 0x57, 0x9b, 0xe7, 0x04, 0xe0,
- 0x9d, 0x66, 0xef, 0xe0, 0x39, 0xd8, 0xe5, 0x0e, 0x19, 0x16, 0x18, 0x20,
- 0x21, 0x26, 0x60, 0x7a, 0x6c, 0x51, 0x05, 0xc4, 0xc8, 0xf3, 0x02, 0x8e,
- 0xf4, 0x02, 0x87, 0xae, 0x60, 0x2b, 0x7c, 0xe0, 0x71, 0x47, 0xad, 0xe0,
- 0x38, 0xd0, 0x68, 0x69, 0x6b, 0x61, 0xe7, 0xe0, 0x9b, 0x5b, 0xf2, 0x05,
- 0x0a, 0xe0, 0x8b, 0x46, 0xee, 0x04, 0xe0, 0x94, 0xcb, 0x6f, 0x70, 0xe9,
- 0xce, 0xa3, 0x6d, 0x65, 0xfa, 0xe0, 0x9b, 0x3d, 0xee, 0x07, 0x04, 0x04,
- 0x04, 0xe0, 0x5b, 0xe9, 0xee, 0xe0, 0x60, 0x1a, 0xeb, 0xe0, 0x28, 0xa3,
- 0xe5, 0xe0, 0x8d, 0x51, 0xe4, 0xe0, 0x2e, 0x1c, 0xed, 0x02, 0x99, 0xf0,
- 0x03, 0x06, 0x8b, 0x75, 0x72, 0xec, 0xe0, 0x68, 0x1c, 0x69, 0xef, 0x02,
- 0x81, 0x2d, 0x6f, 0x6c, 0xe2, 0xe0, 0x96, 0x67, 0xad, 0xe0, 0x74, 0x99,
- 0x61, 0xf3, 0xce, 0x35, 0xec, 0x06, 0x60, 0x8b, 0xb5, 0xd1, 0x30, 0xe5,
- 0x02, 0x8f, 0x62, 0x69, 0x74, 0xae, 0x06, 0x60, 0x9b, 0x63, 0xc0, 0x6e,
- 0x78, 0xf9, 0xe0, 0x7f, 0x54, 0x2e, 0x61, 0x6d, 0x75, 0xee, 0xe0, 0x87,
- 0x92, 0xe3, 0x03, 0x05, 0x95, 0x6e, 0xef, 0xe0, 0x72, 0x33, 0xe8, 0x05,
- 0x07, 0xe0, 0x9c, 0xb5, 0x6e, 0x6f, 0x6c, 0xef, 0xe0, 0x6e, 0xd5, 0x2e,
- 0x6f, 0x72, 0x61, 0xee, 0xe0, 0x7c, 0xfc, 0xae, 0x60, 0x91, 0xbf, 0x42,
- 0x2e, 0xc7, 0x65, 0xe1, 0x04, 0xe0, 0x9a, 0x4e, 0x63, 0x68, 0x65, 0x73,
- 0x2d, 0x79, 0xef, 0xe0, 0x67, 0x3e, 0xe4, 0x60, 0x9a, 0x2f, 0xc2, 0x66,
- 0xe3, 0x08, 0x60, 0x9a, 0x6e, 0x40, 0xbe, 0xc1, 0x5b, 0xf0, 0xe0, 0x56,
- 0x21, 0xe1, 0x19, 0x04, 0x0b, 0x0a, 0x38, 0x08, 0x25, 0x05, 0x1f, 0x29,
- 0x40, 0xc8, 0x07, 0x3d, 0x03, 0x0e, 0x13, 0x0f, 0x60, 0x8e, 0x8d, 0x45,
- 0x43, 0xc4, 0x8c, 0xf9, 0xe0, 0x8d, 0x2f, 0xf8, 0x04, 0xe0, 0x9c, 0x60,
- 0xe9, 0x60, 0x9b, 0x04, 0xc1, 0x5b, 0x77, 0x61, 0x72, 0x61, 0x6d, 0x6f,
- 0xf4, 0xe0, 0x59, 0xcc, 0xf4, 0x04, 0x05, 0x0a, 0x9a, 0x74, 0xef, 0xe0,
- 0x9a, 0xbe, 0x73, 0x75, 0x6e, 0x6f, 0xae, 0x60, 0x97, 0x69, 0xc1, 0xc5,
- 0xe5, 0x03, 0x0a, 0x86, 0x79, 0x61, 0x6d, 0x61, 0xae, 0x60, 0x91, 0x10,
- 0xc9, 0x46, 0x73, 0x68, 0xe9, 0xe0, 0x54, 0xac, 0x62, 0x61, 0xf9, 0xe0,
- 0x3a, 0x7a, 0xe1, 0x04, 0xe0, 0x9a, 0xc4, 0x6d, 0xef, 0xe0, 0x7a, 0x86,
- 0xf3, 0x03, 0xd7, 0xf7, 0xe8, 0xe0, 0x80, 0x82, 0xf2, 0x04, 0x0c, 0x04,
- 0x87, 0xf5, 0x04, 0xe0, 0x93, 0x2c, 0x6d, 0x69, 0x7a, 0xf5, 0xe0, 0x95,
- 0xb7, 0xee, 0xe0, 0x43, 0x3a, 0xe7, 0x60, 0x2a, 0x0e, 0xe0, 0x5e, 0xe6,
- 0xe1, 0x60, 0x41, 0x16, 0x60, 0x50, 0x3d, 0xc6, 0x28, 0x6f, 0xe2, 0xe0,
- 0x71, 0x2e, 0xee, 0x05, 0x04, 0xe0, 0x8c, 0xe9, 0x6f, 0xe8, 0xd4, 0xa1,
- 0xe1, 0x07, 0x05, 0x60, 0x85, 0xbd, 0xd4, 0x7d, 0x67, 0xf5, 0xe0, 0x44,
- 0x1e, 0x62, 0x65, 0xae, 0x60, 0x8d, 0x98, 0xc3, 0x8d, 0xed, 0x02, 0x84,
- 0xe2, 0xe0, 0x5b, 0x85, 0xe1, 0x0a, 0x04, 0x09, 0x04, 0x60, 0x49, 0x57,
- 0xe0, 0x4f, 0x06, 0xf9, 0xe0, 0x60, 0x0f, 0x74, 0x73, 0x75, 0x6b, 0x75,
- 0xf2, 0xe0, 0x80, 0x39, 0xed, 0xe0, 0x4d, 0x5c, 0xeb, 0x4f, 0xc7, 0xe0,
- 0x34, 0xa2, 0xeb, 0x0a, 0x03, 0x12, 0x0f, 0x60, 0x47, 0x5e, 0xe0, 0x52,
- 0x32, 0xeb, 0xc9, 0xe8, 0xe9, 0x07, 0x60, 0x52, 0xef, 0xe0, 0x3d, 0x61,
- 0x6e, 0xef, 0x04, 0xe0, 0x96, 0xa9, 0xf5, 0xe0, 0x7f, 0xb0, 0xe5, 0x02,
- 0x89, 0xf4, 0x04, 0xe0, 0x84, 0x99, 0xef, 0xe0, 0x5d, 0x41, 0xe8, 0xc8,
- 0xc6, 0xe1, 0x0e, 0x06, 0x0e, 0x14, 0x12, 0x08, 0x05, 0x0d, 0x0f, 0x04,
- 0x1f, 0xe0, 0x96, 0x01, 0x7a, 0x61, 0xeb, 0xe0, 0x46, 0x07, 0x79, 0x61,
- 0x6d, 0x61, 0xae, 0x04, 0xe0, 0x98, 0x3e, 0xe7, 0x60, 0x92, 0x79, 0x8d,
- 0xf4, 0x05, 0x0a, 0xe0, 0x5b, 0xf0, 0x73, 0x75, 0x6b, 0x69, 0xae, 0x60,
- 0x95, 0xf0, 0xc3, 0x7d, 0xef, 0xe0, 0x5a, 0x14, 0xf3, 0x05, 0x05, 0xe0,
- 0x96, 0x78, 0x68, 0xe9, 0xe0, 0x31, 0xa6, 0xe1, 0x60, 0x4d, 0x8f, 0xe0,
- 0x42, 0x82, 0x72, 0x61, 0x7a, 0x75, 0xeb, 0xe0, 0x5a, 0xe3, 0x6f, 0xeb,
- 0xe0, 0x4a, 0x2d, 0xee, 0x02, 0x85, 0x65, 0xfa, 0xe0, 0x47, 0xd2, 0x61,
- 0xe2, 0xe0, 0x5f, 0xff, 0xed, 0x02, 0x89, 0x6f, 0x72, 0x69, 0xae, 0x60,
- 0x93, 0xb3, 0xc4, 0x3f, 0xe1, 0xc0, 0x86, 0xe9, 0xe0, 0x58, 0xa1, 0x68,
- 0xe1, 0x07, 0x04, 0x05, 0x09, 0xe0, 0x63, 0xa7, 0xf3, 0xe0, 0x8f, 0xa5,
- 0x72, 0xf5, 0xe0, 0x8c, 0xba, 0x6d, 0x61, 0xae, 0x60, 0x70, 0x69, 0xe0,
- 0x25, 0x33, 0xe7, 0xe0, 0x7f, 0x6b, 0xe7, 0xe0, 0x97, 0xc4, 0x6a, 0xe9,
- 0x60, 0x32, 0xa4, 0xcd, 0x60, 0xe9, 0x0c, 0x0f, 0x04, 0x05, 0x05, 0x08,
- 0x05, 0x60, 0x58, 0x24, 0xca, 0xf5, 0x73, 0x68, 0xe9, 0x02, 0x84, 0xee,
- 0xe0, 0x95, 0x50, 0xae, 0x60, 0x95, 0xe0, 0xc3, 0x04, 0xf2, 0xe0, 0x49,
- 0xc3, 0x70, 0xe5, 0xe0, 0x98, 0x94, 0x6e, 0xe1, 0xe0, 0x4b, 0x6f, 0x6b,
- 0x69, 0xae, 0x60, 0x8f, 0x83, 0xc9, 0x6b, 0x6a, 0xe9, 0xe0, 0x8f, 0xf3,
- 0x66, 0x75, 0xee, 0xe0, 0x75, 0xe3, 0xe8, 0xc8, 0x17, 0x67, 0xe1, 0x07,
- 0x60, 0x2f, 0xcd, 0xe0, 0x27, 0x93, 0x6a, 0xef, 0xe0, 0x63, 0x07, 0xe4,
- 0x02, 0x8b, 0xef, 0x04, 0xe0, 0x51, 0xe0, 0x74, 0x73, 0xf5, 0xe0, 0x8c,
- 0x3b, 0x61, 0xef, 0xe0, 0x7f, 0x29, 0x63, 0x68, 0xe9, 0x02, 0x84, 0xeb,
- 0xe0, 0x6f, 0x65, 0x61, 0x72, 0xe1, 0xe0, 0x51, 0xab, 0xe2, 0x06, 0x06,
- 0x09, 0xe0, 0x9a, 0x49, 0x75, 0x73, 0xe5, 0xe0, 0x98, 0x3f, 0x69, 0x74,
- 0x6f, 0x72, 0x64, 0x65, 0xf2, 0xd4, 0xff, 0x61, 0x79, 0x61, 0xed, 0xe0,
- 0x63, 0x85, 0x33, 0x6c, 0x33, 0x70, 0x30, 0xf2, 0xe0, 0x8d, 0xe8, 0xf3,
- 0x2b, 0x28, 0x1e, 0x40, 0x52, 0x06, 0x31, 0x26, 0x40, 0xe4, 0x41, 0xd8,
- 0x1d, 0x0f, 0x11, 0x40, 0x5c, 0x40, 0xe1, 0x2e, 0x3a, 0x22, 0x40, 0x99,
- 0x07, 0x40, 0x8f, 0x42, 0xaf, 0x09, 0x05, 0x41, 0xf5, 0x16, 0x40, 0xe8,
- 0x0f, 0x42, 0xa5, 0x05, 0xe0, 0x60, 0xba, 0x1f, 0xc3, 0x05, 0x1b, 0xe0,
- 0x8a, 0x53, 0xf8, 0x04, 0x09, 0x05, 0x84, 0xf2, 0x44, 0x7f, 0x0a, 0x49,
- 0x63, 0xe0, 0x74, 0x94, 0x6e, 0x64, 0xf2, 0xc4, 0xac, 0xed, 0xe0, 0x8f,
- 0x27, 0xe7, 0xe0, 0x83, 0x7c, 0x61, 0xec, 0x60, 0x87, 0x56, 0x82, 0xfa,
- 0x06, 0x04, 0x05, 0xe0, 0x99, 0xd5, 0xeb, 0xe0, 0x40, 0xb5, 0x65, 0xf8,
- 0xe0, 0x98, 0xd6, 0x63, 0xfa, 0x02, 0x85, 0x79, 0xf4, 0xe0, 0x5f, 0x43,
- 0x65, 0xe3, 0xe0, 0x88, 0x2d, 0xf9, 0x09, 0x0f, 0x2d, 0x08, 0x60, 0x8a,
- 0xff, 0xce, 0x7a, 0xf3, 0x02, 0x85, 0x74, 0xe5, 0xe0, 0x7c, 0xb1, 0x2e,
- 0x71, 0x63, 0xf8, 0xe0, 0x8b, 0x44, 0xee, 0x02, 0xa2, 0xef, 0x02, 0x9a,
- 0x6c, 0x6f, 0x67, 0xf9, 0x04, 0xe0, 0x83, 0x9b, 0x2d, 0xe4, 0x04, 0xe0,
- 0x74, 0xeb, 0x69, 0x73, 0x6b, 0x73, 0x74, 0x61, 0x74, 0x69, 0xef, 0xe0,
- 0x70, 0xa1, 0x2d, 0xe4, 0xe0, 0x74, 0xdd, 0x63, 0x6c, 0x6f, 0x75, 0xe4,
- 0xe0, 0x99, 0x39, 0x6b, 0x6b, 0x79, 0x6c, 0xf6, 0xe0, 0x8a, 0x00, 0xe4,
- 0xe0, 0x8c, 0xfd, 0xf8, 0x60, 0x86, 0x05, 0xd3, 0x6f, 0xf7, 0x03, 0x1e,
- 0x8a, 0xe9, 0x06, 0x08, 0x06, 0xe0, 0x91, 0xea, 0x6e, 0x6f, 0x75, 0x6a,
- 0x73, 0xe3, 0xd8, 0x74, 0x65, 0x62, 0xef, 0xe0, 0x87, 0xba, 0x64, 0x6e,
- 0xe9, 0x60, 0x3b, 0x8b, 0xe0, 0x25, 0x0c, 0x65, 0x65, 0x74, 0x70, 0x65,
- 0x70, 0xf0, 0xe0, 0x4d, 0x67, 0x61, 0xf4, 0xe0, 0x83, 0xa4, 0xf6, 0x0b,
- 0x05, 0x0b, 0x60, 0x5b, 0x5f, 0x60, 0x3b, 0xc0, 0xc2, 0x03, 0x6e, 0xad,
- 0xe0, 0x5f, 0x76, 0xe5, 0x02, 0x84, 0xec, 0xe0, 0x60, 0xc0, 0xe9, 0xe0,
- 0x90, 0xd9, 0x63, 0x2e, 0x66, 0x69, 0x72, 0x65, 0xee, 0xe0, 0x66, 0xcd,
- 0xf5, 0x12, 0x11, 0x0b, 0x0e, 0x0f, 0x27, 0x13, 0x1c, 0x0b, 0x0b, 0x0a,
- 0x0c, 0x06, 0x05, 0x04, 0xe0, 0x98, 0x3b, 0xfa, 0x04, 0xe0, 0x51, 0x44,
- 0xf5, 0x04, 0xe0, 0x90, 0xca, 0xeb, 0x60, 0x46, 0x10, 0xe0, 0x50, 0xd1,
- 0x77, 0xe1, 0x04, 0xe0, 0x95, 0xda, 0x6c, 0xeb, 0xe0, 0x27, 0x00, 0xf3,
- 0x02, 0x86, 0x6f, 0x6e, 0xef, 0xe0, 0x8e, 0x81, 0x61, 0xeb, 0xe0, 0x5f,
- 0xef, 0xf2, 0x05, 0x05, 0xe0, 0x8d, 0xe7, 0x6e, 0xe1, 0xe0, 0x91, 0xb7,
- 0xe7, 0xe0, 0x73, 0x87, 0xf0, 0x03, 0x0b, 0x88, 0xf0, 0x03, 0xd2, 0x3f,
- 0xec, 0x60, 0x42, 0xbd, 0xe0, 0x53, 0xcf, 0x65, 0x72, 0x73, 0x61, 0xec,
- 0xe0, 0x89, 0xcb, 0x61, 0x62, 0x61, 0x73, 0x65, 0xae, 0x06, 0x60, 0x7f,
- 0xa7, 0xd8, 0xdf, 0xe9, 0xe0, 0x84, 0x62, 0xee, 0x07, 0x60, 0x45, 0x40,
- 0xe0, 0x4f, 0x3b, 0xee, 0x04, 0xe0, 0x91, 0x7c, 0x79, 0x64, 0xe1, 0xe0,
- 0x8f, 0xe2, 0xed, 0x05, 0x10, 0xe0, 0x7d, 0x73, 0xef, 0x02, 0x88, 0x74,
- 0x6f, 0xae, 0x60, 0x91, 0x34, 0xc2, 0x7a, 0x6d, 0xef, 0xe0, 0x5f, 0x98,
- 0xe9, 0x51, 0x3f, 0xe0, 0x25, 0xa1, 0xec, 0x06, 0x60, 0x91, 0x53, 0xc0,
- 0xf4, 0xe9, 0xe0, 0x97, 0x6c, 0xeb, 0x02, 0x85, 0x75, 0xed, 0xe0, 0x55,
- 0xff, 0xe1, 0xcc, 0x85, 0xe9, 0x04, 0xe0, 0x55, 0x58, 0x66, 0xf5, 0xe0,
- 0x90, 0xc7, 0x67, 0xe9, 0x04, 0xe0, 0x44, 0xfd, 0x6e, 0x61, 0xed, 0xe0,
- 0x95, 0x05, 0xe5, 0x60, 0x81, 0x36, 0xc7, 0x81, 0x63, 0xeb, 0xe0, 0x95,
- 0xd9, 0xe2, 0xe0, 0x97, 0x43, 0x2e, 0x70, 0x61, 0xe2, 0xe0, 0x97, 0xcf,
- 0xf4, 0x13, 0x40, 0x5b, 0x23, 0x40, 0x66, 0x18, 0x08, 0x0c, 0x0c, 0x07,
- 0x60, 0x38, 0x7b, 0x60, 0x5c, 0xed, 0xc1, 0x95, 0xf5, 0x02, 0x96, 0x66,
- 0xe6, 0x02, 0x88, 0x74, 0x6f, 0x72, 0x65, 0xe1, 0xe0, 0x92, 0xba, 0x2d,
- 0x34, 0x2d, 0x73, 0x61, 0x6c, 0xe5, 0xe0, 0x63, 0x3a, 0xe4, 0x06, 0x60,
- 0x90, 0x43, 0xc5, 0x86, 0x69, 0xef, 0x05, 0x28, 0xe0, 0x97, 0xd1, 0xae,
- 0x09, 0x09, 0x60, 0x22, 0x8b, 0x0b, 0x05, 0x06, 0xa4, 0x65, 0x75, 0xad,
- 0x60, 0x22, 0xb2, 0x0b, 0x2f, 0xb6, 0xe1, 0x04, 0xe0, 0x23, 0x15, 0x70,
- 0xad, 0x05, 0x60, 0x22, 0xff, 0xb2, 0x73, 0x6f, 0x75, 0x74, 0xe8, 0x60,
- 0x22, 0xff, 0xb1, 0x2d, 0x66, 0x69, 0x70, 0x73, 0x2e, 0x75, 0x73, 0xad,
- 0xe0, 0x23, 0x16, 0xf2, 0x04, 0x04, 0x03, 0x8f, 0xf9, 0xe0, 0x91, 0x8a,
- 0xe9, 0xd8, 0xa8, 0x65, 0x61, 0xed, 0x04, 0xe0, 0x97, 0xb2, 0x6c, 0x69,
- 0xf4, 0x60, 0x96, 0x39, 0xc0, 0x89, 0x61, 0x6e, 0xe4, 0x60, 0x91, 0x7f,
- 0xc4, 0x93, 0xef, 0x05, 0x40, 0x50, 0x04, 0x84, 0xf2, 0x09, 0x08, 0x09,
- 0x18, 0x06, 0x11, 0xe0, 0x87, 0xac, 0x6a, 0x2e, 0x66, 0x61, 0xf2, 0xe0,
- 0x97, 0x88, 0x69, 0x70, 0x72, 0x65, 0x73, 0xf3, 0xe0, 0x96, 0x0e, 0xe5,
- 0x05, 0x05, 0xe0, 0x97, 0x76, 0x62, 0x61, 0xf3, 0xc4, 0x96, 0xae, 0x60,
- 0x84, 0x72, 0x46, 0x2b, 0x41, 0xeb, 0x03, 0x49, 0x5e, 0xc1, 0x53, 0xe4,
- 0x60, 0x90, 0x4d, 0xc5, 0x86, 0x61, 0x67, 0xe5, 0x04, 0xe0, 0x97, 0x5c,
- 0x2e, 0x79, 0x61, 0x6e, 0x64, 0x65, 0xf8, 0xe0, 0x47, 0x2f, 0x2d, 0x65,
- 0xec, 0xe0, 0x90, 0x32, 0x6c, 0xef, 0xde, 0x02, 0xeb, 0xe0, 0x66, 0x1c,
- 0x63, 0x6b, 0x68, 0x6f, 0xec, 0xe0, 0x94, 0xed, 0xea, 0x02, 0x84, 0x1f,
- 0x43, 0xf8, 0x82, 0x6f, 0x72, 0x64, 0x61, 0xec, 0x04, 0xe0, 0x95, 0x97,
- 0x73, 0x68, 0x61, 0x6c, 0xf3, 0xe0, 0x87, 0xab, 0x68, 0x2e, 0x61, 0x63,
- 0xae, 0xe0, 0x4f, 0x1f, 0xe7, 0x07, 0x60, 0x39, 0xac, 0xe0, 0x24, 0xdc,
- 0xad, 0xe0, 0x71, 0x2a, 0x65, 0xe9, 0x04, 0xe0, 0x87, 0x8d, 0x6e, 0x6b,
- 0xea, 0xe0, 0x8b, 0x5e, 0xe3, 0x60, 0x3b, 0xdf, 0xe0, 0x5b, 0x24, 0xe1,
- 0x0c, 0x09, 0x3b, 0x18, 0x04, 0x03, 0x08, 0x18, 0x0d, 0xe0, 0x8a, 0xef,
- 0xf6, 0x04, 0xe0, 0x80, 0xd8, 0xe5, 0xe0, 0x85, 0x37, 0xf4, 0x06, 0x23,
- 0x06, 0xe0, 0x95, 0x22, 0x69, 0xe3, 0x03, 0x04, 0x91, 0xf3, 0xe0, 0x87,
- 0x07, 0xae, 0x04, 0xe0, 0x70, 0xd0, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76,
- 0x61, 0x62, 0xec, 0xe0, 0x4c, 0x08, 0x2d, 0x61, 0x63, 0x63, 0x65, 0xf3,
- 0xe0, 0x96, 0x9b, 0x68, 0x65, 0xec, 0xe0, 0x87, 0x04, 0xe5, 0x04, 0xe0,
- 0x75, 0xb3, 0x66, 0x61, 0xf2, 0xe0, 0x94, 0x5d, 0xf2, 0x06, 0x08, 0x06,
- 0xe0, 0x96, 0x97, 0x6f, 0x73, 0x74, 0x77, 0xef, 0xe0, 0x59, 0x76, 0x67,
- 0x61, 0xf2, 0xe0, 0x91, 0xde, 0xe1, 0xd3, 0xf2, 0xf0, 0xe0, 0x2c, 0xaa,
- 0xee, 0xcd, 0xe3, 0x6c, 0x6f, 0x77, 0x61, 0xad, 0xe0, 0x3d, 0x5f, 0xe7,
- 0x02, 0x8a, 0x69, 0x6e, 0x67, 0x2e, 0x6f, 0x6e, 0x72, 0xe5, 0xdc, 0x8d,
- 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x61, 0xf2, 0xe0, 0x83, 0x84, 0x63,
- 0x6b, 0x68, 0x65, 0x72, 0x6f, 0x2d, 0x6e, 0x65, 0xf4, 0xe0, 0x6d, 0x0e,
- 0xe2, 0xe0, 0x86, 0xae, 0xf3, 0x06, 0x60, 0x94, 0x52, 0xc2, 0x03, 0x6c,
- 0x2e, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x2e, 0x63, 0x64, 0x6e, 0x37,
- 0x37, 0x2d, 0x73, 0x65, 0x63, 0xf5, 0xe0, 0x81, 0x05, 0xf2, 0x09, 0x55,
- 0x53, 0x60, 0x7e, 0x93, 0x0b, 0xc2, 0x44, 0x68, 0xf4, 0xe0, 0x7f, 0x01,
- 0x71, 0x75, 0x61, 0x72, 0xe5, 0x04, 0xe0, 0x96, 0x02, 0x37, 0xae, 0x60,
- 0x95, 0x77, 0x0e, 0xc0, 0x7d, 0xf0, 0x0b, 0x06, 0x0c, 0x08, 0x06, 0x09,
- 0x0b, 0x04, 0xe0, 0x86, 0xfa, 0x79, 0x64, 0xe5, 0xe0, 0x69, 0xb2, 0xef,
- 0x04, 0xe0, 0x94, 0x4a, 0x72, 0xf4, 0x60, 0x95, 0x04, 0xc1, 0x02, 0x6a,
- 0x65, 0x6c, 0x6b, 0xe1, 0xe0, 0x5d, 0x93, 0x68, 0x69, 0xee, 0xe0, 0x34,
- 0xb5, 0x65, 0x63, 0x74, 0x72, 0x75, 0xed, 0xe0, 0x39, 0x19, 0x64, 0x6e,
- 0x73, 0xae, 0x60, 0x90, 0xcd, 0x42, 0x4a, 0xc2, 0x2f, 0xe2, 0xe0, 0x92,
- 0x3d, 0xe1, 0x04, 0xe0, 0x95, 0xd6, 0x63, 0xe5, 0x05, 0x04, 0xe0, 0x95,
- 0xcb, 0xeb, 0xe0, 0x69, 0xad, 0x2d, 0x74, 0x6f, 0x2d, 0xf2, 0xe0, 0x8b,
- 0xb4, 0xef, 0x1e, 0x08, 0x0d, 0x25, 0x06, 0x1f, 0x06, 0x13, 0x07, 0x04,
- 0x07, 0x0c, 0x05, 0x07, 0x49, 0x71, 0x4a, 0xaf, 0x60, 0x29, 0xf0, 0x60,
- 0x52, 0x39, 0x42, 0x82, 0x41, 0x36, 0xc1, 0x01, 0x75, 0x6e, 0x64, 0x63,
- 0xe1, 0xe0, 0x21, 0xf5, 0xf3, 0x07, 0x60, 0x55, 0xb3, 0xe0, 0x3b, 0x26,
- 0x6e, 0xef, 0xe0, 0x80, 0x42, 0xf2, 0x09, 0x04, 0x05, 0x05, 0x49, 0x63,
- 0xe0, 0x74, 0x94, 0xf4, 0xe0, 0x88, 0xcd, 0x72, 0xe5, 0xe0, 0x21, 0x3b,
- 0x6f, 0xe3, 0xe0, 0x72, 0xb8, 0xad, 0x06, 0x60, 0x21, 0x48, 0x04, 0x86,
- 0x76, 0x61, 0xf2, 0xe0, 0x7f, 0x5a, 0x70, 0x6f, 0xf4, 0xe0, 0x83, 0xc5,
- 0xee, 0x09, 0x04, 0x07, 0x60, 0x54, 0x29, 0xe0, 0x3e, 0xef, 0xec, 0xe0,
- 0x3f, 0x15, 0xe7, 0x60, 0x2c, 0xf9, 0xe0, 0x68, 0x5c, 0x64, 0xf2, 0x04,
- 0xe0, 0x7c, 0xfb, 0xe5, 0xe0, 0x21, 0x08, 0xed, 0x60, 0x8a, 0x02, 0xc0,
- 0x77, 0xec, 0x02, 0x8b, 0xf5, 0x04, 0xe0, 0x8e, 0x9f, 0x74, 0x69, 0xef,
- 0xe0, 0x85, 0x30, 0xe1, 0x60, 0x93, 0x9b, 0xbc, 0xeb, 0x60, 0x5e, 0x4f,
- 0xe0, 0x2c, 0x46, 0xea, 0xe0, 0x8f, 0x63, 0x67, 0xee, 0x60, 0x8e, 0x03,
- 0xc5, 0x86, 0x66, 0xf4, 0x04, 0xe0, 0x74, 0x15, 0x77, 0x61, 0xf2, 0xe0,
- 0x65, 0x45, 0x65, 0xe4, 0xe0, 0x55, 0xc0, 0x64, 0x65, 0x67, 0xe1, 0xe0,
- 0x40, 0x20, 0xe3, 0x07, 0x05, 0x04, 0x04, 0xe0, 0x62, 0xc1, 0x74, 0xf2,
- 0xe0, 0x8c, 0x49, 0xe8, 0xe0, 0x25, 0x75, 0xe3, 0xe0, 0x81, 0x50, 0xae,
- 0x05, 0x60, 0x89, 0x0d, 0x88, 0x73, 0x72, 0xe3, 0xc1, 0x4b, 0xee, 0x0a,
- 0x07, 0x08, 0x06, 0x04, 0x60, 0x81, 0x4f, 0xd3, 0x6f, 0x1f, 0x43, 0xe5,
- 0x1b, 0xe0, 0x5c, 0x81, 0xef, 0x03, 0xd2, 0x7a, 0xe1, 0xe0, 0x5c, 0x93,
- 0x69, 0x6c, 0xec, 0xe0, 0x85, 0x1f, 0xe3, 0xe0, 0x89, 0xd8, 0xe1, 0x04,
- 0xe0, 0x5c, 0x81, 0x61, 0xf3, 0xe0, 0x93, 0x21, 0xed, 0x0a, 0x05, 0x06,
- 0x03, 0x04, 0x60, 0x79, 0x8f, 0xdb, 0x08, 0x1f, 0x43, 0xf8, 0xd7, 0xc9,
- 0x75, 0x73, 0xe8, 0xe0, 0x4c, 0x7f, 0xef, 0xd7, 0xc0, 0xe9, 0xe0, 0x92,
- 0xa7, 0xe1, 0x02, 0x91, 0x72, 0xf4, 0x04, 0xe0, 0x94, 0x8e, 0x6c, 0x61,
- 0x62, 0x65, 0x6c, 0x69, 0x6e, 0xe7, 0xe0, 0x61, 0x11, 0x6c, 0x6c, 0x2d,
- 0x77, 0x65, 0xe2, 0xe0, 0x91, 0xad, 0xec, 0x0c, 0x05, 0x06, 0x60, 0x75,
- 0xa8, 0x49, 0x38, 0x43, 0x27, 0xd2, 0x5b, 0x75, 0xf0, 0xe0, 0x36, 0x55,
- 0x64, 0xae, 0x60, 0x92, 0x6c, 0x84, 0xe1, 0x04, 0xe0, 0x36, 0x47, 0x74,
- 0xf4, 0xe0, 0x7c, 0xdb, 0xeb, 0x0e, 0x0d, 0x15, 0x0d, 0x04, 0x14, 0x1d,
- 0x10, 0x10, 0x60, 0x80, 0xcf, 0xd2, 0xf6, 0x1f, 0xc3, 0x02, 0x85, 0x65,
- 0xee, 0xe0, 0x87, 0x8c, 0x61, 0xee, 0xc0, 0x75, 0xf9, 0x08, 0x06, 0x60,
- 0x57, 0x0a, 0xe0, 0x3d, 0x23, 0x67, 0x65, 0xe1, 0xe0, 0x64, 0xf1, 0x64,
- 0x69, 0xf6, 0xe0, 0x84, 0xa6, 0xef, 0x05, 0x04, 0xe0, 0x56, 0xf3, 0xe4,
- 0xe0, 0x62, 0xd0, 0xe3, 0xcb, 0x48, 0x6c, 0xe5, 0xd7, 0xed, 0xea, 0x05,
- 0x06, 0xe0, 0x6b, 0x92, 0x1f, 0x43, 0xe5, 0xe0, 0x89, 0x7d, 0x65, 0x72,
- 0xf6, 0x60, 0x88, 0x57, 0xc3, 0x0d, 0xe9, 0x09, 0x06, 0x60, 0x92, 0x5d,
- 0x40, 0x5b, 0xc1, 0x3a, 0x70, 0x74, 0xf6, 0xe0, 0x4e, 0x8a, 0xe5, 0x04,
- 0xe0, 0x8d, 0xb8, 0x72, 0xf6, 0x60, 0x55, 0x61, 0xe0, 0x38, 0x62, 0x65,
- 0x64, 0x73, 0x6d, 0xef, 0x04, 0xe0, 0x92, 0x47, 0x6b, 0x6f, 0x72, 0xf3,
- 0xe0, 0x4e, 0x6d, 0xe1, 0x02, 0x84, 0xf5, 0xe0, 0x8d, 0x9c, 0xee, 0x04,
- 0xe0, 0x87, 0x12, 0xe9, 0xe0, 0x8c, 0x2b, 0xae, 0x60, 0x8d, 0x66, 0xc4,
- 0xb6, 0xea, 0x60, 0x64, 0xd2, 0xe0, 0x2e, 0xec, 0xe9, 0x0e, 0x29, 0x09,
- 0x0d, 0x1b, 0x09, 0x03, 0x04, 0x0a, 0x60, 0x80, 0xe6, 0xd2, 0x4f, 0x74,
- 0xe5, 0x06, 0x05, 0x07, 0xe0, 0x93, 0x95, 0x73, 0xae, 0xe0, 0x6d, 0x96,
- 0x6c, 0x65, 0x61, 0xe6, 0xe0, 0x93, 0x74, 0x2e, 0xf4, 0x02, 0x88, 0x72,
- 0x61, 0x6e, 0x73, 0xe9, 0xe0, 0x61, 0x8b, 0x62, 0x2d, 0x68, 0x6f, 0x73,
- 0xf4, 0xe0, 0x86, 0x09, 0xf2, 0x04, 0xe0, 0x8c, 0x5f, 0x61, 0xe3, 0xce,
- 0x8d, 0xee, 0x02, 0x84, 0xe7, 0xe0, 0x29, 0x8a, 0xe1, 0x60, 0x92, 0x82,
- 0xc0, 0xed, 0x6d, 0x70, 0x6c, 0xe5, 0x04, 0xe0, 0x23, 0x90, 0x73, 0x69,
- 0x74, 0x65, 0xae, 0x06, 0x60, 0x7f, 0x1a, 0xc9, 0x67, 0x63, 0x6f, 0xed,
- 0x60, 0x90, 0xf3, 0xc2, 0x5d, 0xec, 0x04, 0xe0, 0x90, 0xe4, 0xea, 0xe0,
- 0x24, 0x9c, 0xe9, 0xd7, 0xa1, 0xe7, 0xe0, 0x8c, 0x26, 0xe5, 0x04, 0xe0,
- 0x8a, 0xf3, 0x6c, 0xec, 0xe0, 0x6a, 0xc0, 0xe3, 0x04, 0xe0, 0x91, 0x2d,
- 0x69, 0xec, 0x60, 0x8a, 0x23, 0xc2, 0x7b, 0xe8, 0x0d, 0x04, 0x07, 0x40,
- 0x6a, 0x42, 0x06, 0x04, 0x60, 0x7d, 0x2d, 0xd3, 0x6f, 0xf7, 0xe0, 0x92,
- 0x12, 0x75, 0x6e, 0x61, 0xee, 0xe0, 0x90, 0xfd, 0xef, 0x0b, 0x10, 0x05,
- 0x3a, 0x09, 0x60, 0x40, 0x60, 0xe0, 0x46, 0x55, 0xf7, 0x06, 0x60, 0x90,
- 0x20, 0xc2, 0xdd, 0x61, 0xae, 0x60, 0x76, 0xb5, 0x53, 0x7b, 0xc3, 0x60,
- 0x75, 0xea, 0xe0, 0x90, 0xd9, 0xf0, 0x09, 0x06, 0x06, 0x04, 0x05, 0x06,
- 0xe0, 0x92, 0xca, 0x77, 0x61, 0x72, 0xe5, 0xc3, 0xd3, 0x73, 0x65, 0xec,
- 0xe0, 0x27, 0x1b, 0xf0, 0xe0, 0x7d, 0x56, 0x69, 0x74, 0xf3, 0xd8, 0x77,
- 0x61, 0x72, 0xe5, 0xe0, 0x35, 0x14, 0xae, 0x0b, 0x60, 0x49, 0x38, 0x43,
- 0xfa, 0x60, 0x35, 0x14, 0xcb, 0xf3, 0x62, 0x72, 0x65, 0x6e, 0x64, 0x6c,
- 0xf9, 0xd5, 0x9c, 0x6e, 0x61, 0x69, 0xae, 0x60, 0x87, 0x23, 0xc0, 0x65,
- 0x62, 0x61, 0xf2, 0xe0, 0x6e, 0x9a, 0xe9, 0x18, 0x12, 0x05, 0x11, 0x40,
- 0x4b, 0x13, 0x40, 0x6e, 0x40, 0x7a, 0x29, 0x0b, 0x05, 0x15, 0x0f, 0x60,
- 0x28, 0x8b, 0x60, 0x62, 0xe9, 0xc3, 0xa7, 0x7a, 0xf5, 0x02, 0x89, 0x6f,
- 0x6b, 0x61, 0xae, 0x60, 0x88, 0x24, 0xc8, 0xb6, 0x6b, 0xf5, 0xe0, 0x3f,
- 0xa3, 0x74, 0xe1, 0xe0, 0x50, 0x0a, 0xf3, 0x05, 0x04, 0xe0, 0x8c, 0x3a,
- 0xf5, 0xe0, 0x76, 0x6a, 0x68, 0x69, 0x6b, 0xf5, 0xe0, 0x27, 0xcf, 0xf2,
- 0x03, 0x18, 0x84, 0xef, 0x02, 0x86, 0x73, 0x61, 0xf4, 0xe0, 0x82, 0x95,
- 0xe9, 0x04, 0xe0, 0x90, 0x75, 0x73, 0x68, 0x69, 0xae, 0x60, 0x5a, 0xd3,
- 0xe0, 0x2c, 0xdd, 0xe9, 0xe0, 0x3c, 0x5c, 0xe1, 0x05, 0x06, 0x09, 0x04,
- 0x8e, 0x74, 0x61, 0xeb, 0xe0, 0x5b, 0x06, 0xef, 0x04, 0xe0, 0x90, 0x7e,
- 0xeb, 0xe0, 0x5b, 0x57, 0xee, 0xe0, 0x7f, 0x8f, 0xeb, 0x04, 0xe0, 0x90,
- 0x48, 0x61, 0x77, 0x61, 0xae, 0x60, 0x89, 0x4b, 0xc3, 0x6d, 0xe8, 0xe0,
- 0x3a, 0x5a, 0xef, 0x03, 0x04, 0x86, 0xf9, 0xe0, 0x86, 0x8f, 0x6a, 0x69,
- 0xf2, 0xe0, 0x8e, 0xfa, 0x67, 0xe1, 0xe0, 0x4f, 0xe9, 0xee, 0x0b, 0x0b,
- 0x0d, 0x0e, 0x06, 0x08, 0x11, 0x10, 0xe0, 0x51, 0x13, 0x79, 0x6f, 0x73,
- 0x68, 0x69, 0x74, 0x6f, 0xed, 0xe0, 0x49, 0x3c, 0x74, 0xef, 0x07, 0x60,
- 0x3c, 0x90, 0xe0, 0x4c, 0x8b, 0xeb, 0xe0, 0x8d, 0x31, 0x73, 0x68, 0xe9,
- 0x02, 0x84, 0xf2, 0xe0, 0x89, 0x23, 0x6e, 0xef, 0xe0, 0x8d, 0x21, 0x6f,
- 0x6e, 0x73, 0xe5, 0xc5, 0x63, 0x6b, 0x61, 0x6d, 0x69, 0x67, 0xef, 0xd5,
- 0xce, 0xea, 0x02, 0x85, 0x75, 0xeb, 0xe0, 0x75, 0xc6, 0x6f, 0xae, 0x60,
- 0x86, 0x94, 0x42, 0xcf, 0xc2, 0x9b, 0xe7, 0x02, 0x89, 0x75, 0xae, 0x60,
- 0x86, 0x23, 0x40, 0xe7, 0xc5, 0xcf, 0xef, 0xe0, 0x56, 0x75, 0xe1, 0x04,
- 0xe0, 0x66, 0x9d, 0x6e, 0x6f, 0x6d, 0x61, 0xe3, 0xe0, 0x8e, 0x86, 0xed,
- 0x04, 0x40, 0x4a, 0x89, 0xef, 0x0b, 0x0a, 0x03, 0x0f, 0x07, 0x04, 0x06,
- 0x06, 0xe0, 0x22, 0x89, 0x74, 0x73, 0xf5, 0x03, 0xd8, 0x76, 0xeb, 0xe0,
- 0x42, 0xb7, 0xf3, 0xd7, 0x5e, 0xee, 0x02, 0x87, 0x6f, 0x73, 0x65, 0xeb,
- 0xe0, 0x4e, 0xc4, 0x69, 0xf4, 0xe0, 0x88, 0xa2, 0xeb, 0x60, 0x3e, 0x3f,
- 0xe0, 0x47, 0xf5, 0xea, 0xe0, 0x8c, 0xcb, 0x69, 0x63, 0xe8, 0xe0, 0x50,
- 0x38, 0x66, 0x75, 0xf3, 0xe0, 0x51, 0x77, 0x64, 0xe1, 0x04, 0xe0, 0x86,
- 0xed, 0x74, 0xe5, 0xe0, 0x89, 0xbb, 0x69, 0x7a, 0x75, 0xae, 0x60, 0x86,
- 0xe5, 0xc8, 0xad, 0xe1, 0x08, 0x08, 0x0c, 0x60, 0x48, 0x8b, 0xd2, 0x2d,
- 0x6e, 0x65, 0xae, 0x60, 0x8b, 0x80, 0xc4, 0x0a, 0xed, 0x02, 0x84, 0xef,
- 0xe0, 0x6d, 0x20, 0x61, 0xeb, 0xe0, 0x8f, 0x71, 0x62, 0xe1, 0xe0, 0x2d,
- 0xe0, 0xeb, 0x06, 0x05, 0x09, 0xe0, 0x42, 0x15, 0x73, 0xe8, 0xe0, 0x8f,
- 0x6f, 0x6f, 0x6b, 0x75, 0x63, 0x68, 0xf5, 0xe0, 0x41, 0xfd, 0xe1, 0x0a,
- 0x05, 0x60, 0x4c, 0x14, 0x42, 0xc5, 0xe0, 0x39, 0xf0, 0x74, 0xf3, 0xe0,
- 0x75, 0x36, 0xef, 0xe0, 0x8f, 0x43, 0x6a, 0x6f, 0x6e, 0x61, 0x77, 0x61,
- 0x74, 0xe5, 0xe0, 0x8f, 0x19, 0x69, 0xe2, 0xe0, 0x4a, 0xf1, 0x66, 0xf4,
- 0x02, 0x85, 0x65, 0xe4, 0xe0, 0x64, 0xbf, 0x63, 0x72, 0x79, 0x70, 0x74,
- 0x6f, 0xae, 0x60, 0x83, 0x3b, 0xcc, 0x94, 0x63, 0x68, 0xe9, 0x04, 0xe0,
- 0x51, 0xd2, 0x6b, 0x61, 0x73, 0x68, 0xf5, 0xe0, 0x29, 0xff, 0xe2, 0x03,
- 0x0a, 0x8a, 0xf5, 0x03, 0xc0, 0x8a, 0x6b, 0x61, 0xf7, 0xe0, 0x87, 0xea,
- 0xe5, 0x04, 0xe0, 0x8b, 0xf8, 0x63, 0xe8, 0xe0, 0x8e, 0xcb, 0x61, 0x74,
- 0x61, 0xae, 0x60, 0x59, 0x2a, 0xe0, 0x33, 0x33, 0xe5, 0xe0, 0x7f, 0xc2,
- 0xe1, 0x07, 0x05, 0x07, 0x06, 0xe0, 0x8e, 0x12, 0xf2, 0x60, 0x8e, 0xdd,
- 0x99, 0x6e, 0x67, 0x72, 0xe9, 0xe0, 0x6d, 0xc5, 0x6b, 0x6f, 0xf4, 0xe0,
- 0x34, 0xed, 0x63, 0x6b, 0x6e, 0x65, 0xf4, 0xe0, 0x62, 0x59, 0xe7, 0x04,
- 0xe0, 0x90, 0x75, 0xad, 0xe0, 0x5c, 0x16, 0xe6, 0x60, 0x8e, 0xdb, 0xbc,
- 0xe5, 0x19, 0x0d, 0x06, 0x13, 0x40, 0xb6, 0x06, 0x25, 0x0f, 0x40, 0x4a,
- 0x1b, 0x04, 0x1a, 0x04, 0x25, 0x0b, 0x06, 0x60, 0x6f, 0xc5, 0x5c, 0x4a,
- 0xc2, 0x70, 0xf8, 0x06, 0x60, 0x8e, 0x14, 0xc2, 0x37, 0xae, 0x60, 0x8b,
- 0xc5, 0xc3, 0x84, 0xf6, 0x41, 0xb5, 0xe0, 0x56, 0x0c, 0xf4, 0x05, 0x06,
- 0xe0, 0x41, 0x0f, 0xef, 0x60, 0x84, 0xec, 0xc6, 0x03, 0x61, 0x67, 0x61,
- 0xf9, 0xe0, 0x8a, 0x24, 0xf2, 0x03, 0xc0, 0xa7, 0xf6, 0x02, 0x99, 0x69,
- 0x63, 0xe5, 0x04, 0xe0, 0x5f, 0xd6, 0xae, 0x04, 0xe0, 0x72, 0x6f, 0x67,
- 0x6f, 0x76, 0xae, 0x04, 0xe0, 0x8c, 0xc3, 0x73, 0xe3, 0xe0, 0x64, 0x4f,
- 0xe5, 0x0c, 0x09, 0x05, 0x05, 0x09, 0x12, 0x05, 0x18, 0x06, 0x06, 0x09,
- 0x8f, 0x73, 0x61, 0x72, 0x63, 0x61, 0xf3, 0xe0, 0x86, 0x40, 0x72, 0xf3,
- 0xe0, 0x69, 0xce, 0x71, 0x75, 0xe1, 0xc0, 0x5a, 0xf0, 0x04, 0xe0, 0x66,
- 0x75, 0xb2, 0xe0, 0x8e, 0xfb, 0xed, 0x02, 0x85, 0x70, 0xb3, 0xe0, 0x8f,
- 0xd6, 0x69, 0x6e, 0x65, 0x63, 0x72, 0x61, 0xe6, 0xe0, 0x83, 0x80, 0x69,
- 0xf2, 0xe0, 0x6a, 0x4e, 0xe8, 0x03, 0x06, 0x85, 0x75, 0x6d, 0xef, 0xe0,
- 0x66, 0xc6, 0x74, 0xf4, 0xe0, 0x8e, 0xd5, 0x61, 0x6c, 0x66, 0x6c, 0x69,
- 0xe6, 0xe0, 0x88, 0x0c, 0x67, 0x61, 0xed, 0xe0, 0x4b, 0xd3, 0x66, 0x74,
- 0xf0, 0xe0, 0x7b, 0xed, 0x65, 0x78, 0x63, 0x68, 0x61, 0xee, 0xe0, 0x5e,
- 0xb3, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x74, 0x72, 0x69,
- 0xeb, 0xe0, 0x87, 0xe8, 0xe2, 0x05, 0x05, 0xe0, 0x42, 0xe0, 0x6c, 0xef,
- 0xe0, 0x89, 0xc2, 0xe2, 0xe0, 0x7b, 0xc5, 0xe1, 0x04, 0xe0, 0x84, 0x27,
- 0x6e, 0x69, 0xf3, 0xe0, 0x4e, 0xe8, 0x6f, 0x75, 0xec, 0xe0, 0x78, 0x82,
- 0xee, 0x07, 0x0d, 0x04, 0x06, 0xe0, 0x7b, 0xb1, 0xf3, 0x02, 0x84, 0xe9,
- 0xe0, 0x2d, 0xaa, 0x65, 0x65, 0xf2, 0xe0, 0x89, 0x96, 0xee, 0xe0, 0x4f,
- 0x4a, 0x64, 0x61, 0xe9, 0xe0, 0x37, 0xbf, 0x61, 0x73, 0xe1, 0xe0, 0x7d,
- 0x3c, 0xed, 0x02, 0x86, 0x69, 0x6e, 0xe5, 0xe0, 0x57, 0xc8, 0x62, 0x6f,
- 0xeb, 0xe0, 0x4f, 0x15, 0xec, 0x0a, 0x2b, 0x06, 0x5d, 0xc0, 0x60, 0x68,
- 0xec, 0xc6, 0xbf, 0xec, 0x02, 0x9e, 0xf3, 0x02, 0x8a, 0x79, 0x6f, 0x75,
- 0x72, 0x68, 0x6f, 0xed, 0xe0, 0x79, 0xe8, 0xad, 0x04, 0xe0, 0x78, 0xe7,
- 0x66, 0x6f, 0x72, 0xad, 0x04, 0xe0, 0x8d, 0xe2, 0xec, 0xe0, 0x42, 0x84,
- 0x66, 0x79, 0x2e, 0x73, 0x74, 0x6f, 0xf2, 0xe0, 0x8e, 0xa4, 0xea, 0x60,
- 0x8a, 0xe1, 0xc2, 0x8e, 0x66, 0x69, 0x70, 0xae, 0x60, 0x7e, 0xcb, 0x4d,
- 0x0c, 0x40, 0x56, 0x42, 0xac, 0x9c, 0xeb, 0x02, 0x8c, 0xe9, 0x07, 0x60,
- 0x3c, 0x48, 0xe0, 0x49, 0xc6, 0xeb, 0xe0, 0x40, 0x65, 0x64, 0x31, 0x2e,
- 0x62, 0x65, 0x65, 0x62, 0x79, 0xf4, 0xe0, 0x7f, 0xc9, 0xea, 0xe0, 0x39,
- 0x27, 0xe9, 0x08, 0x08, 0x04, 0x60, 0x3b, 0xd8, 0xc3, 0xd5, 0x72, 0xef,
- 0x60, 0x3d, 0xe6, 0xe0, 0x4c, 0x98, 0xe8, 0xe0, 0x4e, 0x77, 0x64, 0xe1,
- 0xe0, 0x82, 0x68, 0xe5, 0xe0, 0x8c, 0x52, 0xe3, 0x05, 0x14, 0x05, 0xcd,
- 0xee, 0x75, 0xf2, 0x04, 0xe0, 0x8d, 0x2d, 0x69, 0x74, 0xf9, 0x04, 0xe0,
- 0x8e, 0xa2, 0x74, 0x61, 0x63, 0xf4, 0xe0, 0x65, 0x2c, 0x72, 0xe5, 0xe0,
- 0x77, 0x97, 0x61, 0x61, 0xf3, 0xe0, 0x45, 0xbb, 0x62, 0x61, 0x73, 0x74,
- 0x6f, 0x70, 0x6f, 0xec, 0xe0, 0x73, 0x80, 0xe1, 0x60, 0x72, 0x31, 0xda,
- 0x95, 0xae, 0x60, 0x88, 0x1a, 0x03, 0x03, 0xc6, 0x3b, 0xe4, 0x08, 0x09,
- 0x60, 0x4c, 0xae, 0xe0, 0x41, 0xb7, 0x73, 0x63, 0x6c, 0x6f, 0x75, 0xe4,
- 0xe0, 0x7c, 0xc6, 0xee, 0xe0, 0x51, 0x3a, 0xe3, 0x0d, 0x1d, 0x0f, 0x40,
- 0x91, 0x0a, 0x60, 0x7d, 0x8e, 0x45, 0xa5, 0xca, 0x59, 0xf2, 0x02, 0x86,
- 0x79, 0x73, 0xe5, 0xe0, 0x68, 0xcc, 0x61, 0x70, 0xf0, 0x02, 0x86, 0x69,
- 0x6e, 0xe7, 0xe0, 0x6b, 0x8e, 0x65, 0x72, 0x2d, 0x73, 0x69, 0xf4, 0xe0,
- 0x8a, 0xc9, 0xe9, 0x04, 0xe0, 0x5e, 0xca, 0x65, 0xee, 0x04, 0xe0, 0x89,
- 0x1c, 0xf4, 0xe0, 0x3d, 0x0b, 0xe8, 0x06, 0x06, 0x15, 0x31, 0x06, 0x88,
- 0x77, 0x61, 0xf2, 0xe0, 0x8b, 0xaa, 0x75, 0xec, 0x07, 0x60, 0x64, 0xf4,
- 0xe0, 0x27, 0xa1, 0x70, 0x6c, 0x61, 0x74, 0x74, 0x66, 0x6f, 0x72, 0xed,
- 0xe0, 0x6a, 0xd3, 0xef, 0x03, 0x1f, 0x87, 0x6f, 0xec, 0x06, 0x08, 0x04,
- 0xe0, 0x8d, 0xed, 0x73, 0x2e, 0x6e, 0x73, 0xf7, 0xe0, 0x74, 0xa7, 0xe2,
- 0xe0, 0x47, 0x15, 0xae, 0x04, 0xe0, 0x89, 0x76, 0xee, 0x60, 0x8b, 0x74,
- 0xc0, 0xcc, 0x6c, 0x61, 0x72, 0x73, 0xe8, 0xce, 0x4a, 0x6b, 0x6f, 0x6b,
- 0xe5, 0xe0, 0x5c, 0xcb, 0x6d, 0x69, 0xe4, 0xe0, 0x8c, 0x13, 0x61, 0x65,
- 0x66, 0x66, 0xec, 0xe0, 0x7a, 0x29, 0xae, 0x10, 0x04, 0x04, 0x08, 0x05,
- 0x06, 0x60, 0x6c, 0xff, 0x40, 0x47, 0x4a, 0xd3, 0x42, 0x4b, 0x83, 0xf5,
- 0xe0, 0x5a, 0xe1, 0xf4, 0xe0, 0x7a, 0x7e, 0xf3, 0x60, 0x8b, 0x43, 0x40,
- 0xc2, 0xc1, 0x6c, 0xec, 0x60, 0x8b, 0x3e, 0xaf, 0xe9, 0x60, 0x8b, 0x53,
- 0xc0, 0xf3, 0xe1, 0xe0, 0x8c, 0x1d, 0x61, 0x6c, 0x65, 0x62, 0x6f, 0x6f,
- 0xeb, 0xe0, 0x5a, 0x1a, 0xae, 0x0d, 0x5d, 0xbe, 0x60, 0x2a, 0x80, 0x60,
- 0x3e, 0xdf, 0x41, 0xb9, 0xc2, 0x4b, 0xec, 0x60, 0x8b, 0x14, 0x86, 0xe2,
- 0x0a, 0x60, 0x72, 0x66, 0x58, 0x9f, 0x40, 0x50, 0xc2, 0x19, 0xec, 0xe0,
- 0x74, 0xba, 0xe1, 0x1a, 0x0e, 0x04, 0x17, 0x07, 0x1a, 0x1c, 0x26, 0x0c,
- 0x1a, 0x40, 0xa2, 0x23, 0x28, 0x40, 0x6e, 0x24, 0x12, 0x0d, 0x0a, 0x06,
- 0x08, 0x1a, 0xe0, 0x8a, 0xcd, 0xf9, 0x04, 0xe0, 0x87, 0x18, 0x61, 0x6d,
- 0x61, 0xae, 0x60, 0x82, 0xdd, 0xc8, 0x95, 0xf8, 0xe0, 0x8b, 0xb5, 0xf6,
- 0x04, 0xe0, 0x84, 0xf0, 0xe5, 0x04, 0xe0, 0x8d, 0x33, 0x73, 0x2d, 0x74,
- 0x68, 0x65, 0x2d, 0x77, 0x68, 0x61, 0xec, 0xe0, 0x8c, 0x0c, 0xf5, 0x60,
- 0x32, 0xdc, 0xe0, 0x35, 0xcd, 0xf4, 0x03, 0x04, 0x8c, 0xf4, 0xe0, 0x38,
- 0x86, 0x73, 0x75, 0x6d, 0x61, 0x73, 0x65, 0x6e, 0x64, 0xe1, 0xe0, 0x85,
- 0xb4, 0x6f, 0x73, 0xe8, 0xe0, 0x3a, 0xbc, 0xf3, 0x06, 0x04, 0x05, 0xe0,
- 0x8c, 0xf5, 0xf3, 0xe0, 0x74, 0xed, 0x65, 0xe2, 0xe0, 0x51, 0x5f, 0xe1,
- 0x02, 0x85, 0x79, 0xe1, 0xe0, 0x4c, 0xb1, 0x67, 0xf5, 0xd5, 0x31, 0xf2,
- 0x09, 0x06, 0x07, 0x04, 0x60, 0x8a, 0x7f, 0xc0, 0x4c, 0x75, 0x66, 0xf5,
- 0xe0, 0x88, 0x25, 0x70, 0x73, 0x62, 0xef, 0xe0, 0x60, 0x79, 0xef, 0xe0,
- 0x80, 0x5e, 0xe4, 0x02, 0x84, 0xe9, 0xe0, 0x74, 0x82, 0xe5, 0xe0, 0x77,
- 0x6b, 0xf0, 0x04, 0xe0, 0x8c, 0xbe, 0x70, 0x6f, 0x72, 0xef, 0xe0, 0x35,
- 0x25, 0xef, 0x03, 0x05, 0x87, 0x74, 0x6f, 0xed, 0xca, 0x82, 0x67, 0x6f,
- 0x6e, 0xe3, 0xe0, 0x83, 0x2e, 0x62, 0x65, 0x72, 0x6e, 0x61, 0x72, 0xe4,
- 0xe0, 0x80, 0x34, 0xee, 0x09, 0x05, 0x12, 0x08, 0x0a, 0x04, 0x04, 0xc0,
- 0x5f, 0x75, 0xeb, 0xe0, 0x38, 0xc4, 0xf4, 0x02, 0x88, 0x6f, 0x61, 0x6e,
- 0x64, 0xf2, 0xe0, 0x74, 0x2b, 0x61, 0x6d, 0x61, 0xf2, 0xe0, 0x51, 0x81,
- 0xef, 0x60, 0x7a, 0x11, 0x46, 0xe5, 0xc5, 0x0c, 0xee, 0x04, 0xe0, 0x51,
- 0x38, 0x61, 0xee, 0xe0, 0x87, 0x94, 0xea, 0xe0, 0x88, 0x1e, 0xe7, 0xe0,
- 0x49, 0xde, 0xe4, 0x0c, 0x10, 0x0b, 0x31, 0x60, 0x4b, 0xcb, 0x60, 0x34,
- 0x8e, 0xc3, 0x0d, 0x76, 0x69, 0xeb, 0x04, 0xe0, 0x8c, 0x4e, 0x63, 0x6f,
- 0x72, 0x6f, 0x6d, 0xe1, 0xe0, 0x65, 0x4e, 0x6e, 0x65, 0xf3, 0x04, 0xe0,
- 0x8a, 0xa9, 0xf3, 0xe0, 0x22, 0x6d, 0xe5, 0x04, 0xe0, 0x7c, 0x8f, 0xae,
- 0x03, 0x19, 0x8a, 0x78, 0x6e, 0x2d, 0x2d, 0x6d, 0x72, 0x65, 0x2d, 0x6f,
- 0x67, 0x2d, 0x72, 0x6f, 0x6d, 0x73, 0x64, 0x61, 0x6c, 0x2d, 0x71, 0x71,
- 0xe2, 0xe0, 0x8a, 0x86, 0x76, 0x65, 0x73, 0x74, 0x66, 0x6f, 0xec, 0xe0,
- 0x87, 0xef, 0xed, 0x60, 0x4a, 0x83, 0x8e, 0x63, 0x61, 0xf4, 0xe0, 0x6e,
- 0xe3, 0x61, 0x67, 0x6f, 0x63, 0xe8, 0xe0, 0x21, 0x65, 0xed, 0x07, 0x04,
- 0x0d, 0x04, 0xe0, 0x58, 0xbc, 0xf5, 0xe0, 0x87, 0x2b, 0xf3, 0x02, 0x84,
- 0xf5, 0xe0, 0x76, 0x6a, 0x63, 0x6c, 0xf5, 0xe0, 0x81, 0x8c, 0xee, 0xe0,
- 0x75, 0xce, 0x65, 0x67, 0xe1, 0xe0, 0x80, 0x98, 0xec, 0x08, 0x06, 0x05,
- 0x07, 0x07, 0xe0, 0x48, 0x21, 0x76, 0x61, 0x64, 0xef, 0xd5, 0xa7, 0x75,
- 0xe4, 0xe0, 0x89, 0x0f, 0xef, 0x60, 0x4c, 0x49, 0xe0, 0x3e, 0x40, 0xe5,
- 0x60, 0x2c, 0x82, 0xe0, 0x5f, 0x3a, 0xe1, 0x60, 0x7c, 0x37, 0xc7, 0xe1,
- 0xeb, 0x05, 0x2f, 0x04, 0xde, 0x05, 0xf5, 0x05, 0x25, 0xe0, 0x88, 0x6b,
- 0x72, 0xe1, 0x0b, 0x04, 0x06, 0x60, 0x4a, 0x67, 0x5c, 0xc4, 0xe0, 0x24,
- 0x62, 0xf4, 0xe0, 0x40, 0x7e, 0x67, 0x61, 0xf7, 0xe0, 0x48, 0x3a, 0xae,
- 0x07, 0x60, 0x52, 0x9f, 0xe0, 0x37, 0x09, 0xf4, 0x60, 0x7d, 0xeb, 0xc2,
- 0x16, 0xe8, 0xe0, 0x7d, 0x21, 0xe5, 0xe0, 0x29, 0x47, 0xe1, 0x0e, 0x15,
- 0x06, 0x07, 0x58, 0x45, 0x60, 0x3b, 0xca, 0x60, 0x2b, 0xe2, 0xc2, 0x5c,
- 0xe9, 0x02, 0x89, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0xef, 0xe0, 0x6f, 0x79,
- 0xae, 0x60, 0x60, 0xe0, 0x60, 0x22, 0xea, 0xc5, 0xbd, 0x68, 0x6f, 0xe7,
- 0xe0, 0x82, 0x76, 0x65, 0xae, 0x60, 0x88, 0x38, 0xc1, 0x36, 0xe4, 0xe0,
- 0x54, 0xb4, 0xe9, 0x04, 0x0e, 0x09, 0x84, 0xf4, 0x04, 0xe0, 0x60, 0xd5,
- 0x61, 0x6d, 0x61, 0xae, 0x60, 0x80, 0xcb, 0xc8, 0xbe, 0xeb, 0x04, 0xe0,
- 0x48, 0x7f, 0xe1, 0xe0, 0x4a, 0xdf, 0xea, 0xe0, 0x3c, 0x15, 0xe7, 0xe0,
- 0x47, 0xfa, 0x67, 0xe1, 0x05, 0x05, 0xe0, 0x48, 0xd3, 0x6d, 0xe9, 0xe0,
- 0x3d, 0x93, 0xae, 0x60, 0x80, 0x72, 0xc8, 0xf4, 0x66, 0xe5, 0x04, 0xe0,
- 0x8b, 0x06, 0x74, 0xf9, 0x60, 0x88, 0x27, 0xc2, 0xdd, 0xe4, 0x04, 0xe0,
- 0x86, 0xaf, 0x69, 0xf3, 0xe0, 0x73, 0xf6, 0x62, 0x61, 0xe5, 0xe0, 0x60,
- 0x76, 0x61, 0x72, 0x6c, 0x61, 0xee, 0xe0, 0x88, 0x9e, 0xae, 0x0a, 0x09,
- 0x60, 0x81, 0x61, 0x46, 0x55, 0x04, 0xc1, 0x17, 0x67, 0x6f, 0x76, 0xae,
- 0x60, 0x86, 0x53, 0xc1, 0x6c, 0xe3, 0x60, 0x89, 0x79, 0xc1, 0x53, 0x2d,
- 0x65, 0x61, 0x73, 0xf4, 0xe0, 0x81, 0x70, 0x35, 0xf9, 0xe0, 0x7c, 0x56,
- 0xb3, 0x03, 0xc0, 0x42, 0xae, 0x12, 0x09, 0x1d, 0x41, 0x29, 0x60, 0x37,
- 0x35, 0x08, 0x5e, 0xa2, 0x43, 0x6d, 0x42, 0xa0, 0x16, 0x05, 0x9a, 0x74,
- 0x65, 0x63, 0x6b, 0x69, 0xe4, 0xe0, 0x75, 0xc4, 0xe9, 0x04, 0xe0, 0x5a,
- 0x8a, 0x73, 0x6b, 0xb0, 0x02, 0x82, 0xb2, 0x82, 0x31, 0x2e, 0x73, 0x61,
- 0x6b, 0x75, 0x72, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x61, 0xe7, 0xe0, 0x7b,
- 0x99, 0xe1, 0x60, 0x5a, 0x92, 0x42, 0xf9, 0xe0, 0x25, 0x1f, 0xad, 0x11,
- 0x40, 0x85, 0x0d, 0x10, 0x05, 0x0e, 0x14, 0x21, 0x40, 0x49, 0x60, 0x5b,
- 0xdd, 0xe0, 0x25, 0x7d, 0x77, 0x65, 0x62, 0x73, 0x69, 0x74, 0xe5, 0x03,
- 0xc0, 0x52, 0xae, 0x10, 0x60, 0x38, 0x28, 0x08, 0x5e, 0xa2, 0x43, 0x69,
- 0x04, 0x1a, 0x42, 0x86, 0x16, 0x05, 0x9a, 0x64, 0x75, 0x61, 0x6c, 0x73,
- 0x74, 0x61, 0x63, 0x6b, 0xae, 0x07, 0x08, 0x15, 0x06, 0xe0, 0x5c, 0xc1,
- 0x75, 0x73, 0xad, 0x60, 0x5c, 0xd3, 0xc0, 0x6a, 0x65, 0x75, 0xad, 0x07,
- 0x60, 0x5d, 0x35, 0xe0, 0x24, 0xf6, 0x77, 0x65, 0x73, 0x74, 0xad, 0x60,
- 0x5d, 0x25, 0xe0, 0x25, 0x25, 0xe3, 0x40, 0x96, 0xe0, 0x5c, 0x63, 0xe1,
- 0x04, 0xe0, 0x5d, 0x1d, 0x70, 0xad, 0x60, 0x5d, 0x03, 0xe0, 0x25, 0x1d,
- 0xad, 0x07, 0x0e, 0x40, 0x67, 0xe0, 0x5c, 0x37, 0x75, 0x73, 0xad, 0x06,
- 0x60, 0x5c, 0x95, 0xc0, 0x6a, 0x67, 0x6f, 0xf6, 0xc0, 0x6b, 0x61, 0x70,
- 0xad, 0x02, 0x86, 0x73, 0x6f, 0xf5, 0xe0, 0x82, 0x08, 0x6e, 0x6f, 0x72,
- 0x74, 0xe8, 0xe0, 0x5c, 0xea, 0x75, 0x73, 0xad, 0x05, 0x60, 0x5c, 0x75,
- 0x85, 0x65, 0xe1, 0xe0, 0x81, 0xcc, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74,
- 0x2d, 0x6c, 0x61, 0x6d, 0x62, 0x64, 0xe1, 0xe0, 0x59, 0xae, 0x6d, 0xe5,
- 0xe0, 0x5c, 0xce, 0x66, 0x69, 0x70, 0xf3, 0x03, 0xc0, 0x71, 0x2d, 0x75,
- 0x73, 0xad, 0xe0, 0x5c, 0x55, 0xe5, 0x02, 0x88, 0x78, 0x74, 0x65, 0x72,
- 0xee, 0xe0, 0x81, 0xb1, 0x75, 0xad, 0x60, 0x5c, 0x65, 0x03, 0xe0, 0x25,
- 0x3f, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0xae,
- 0x05, 0x06, 0xe0, 0x81, 0x75, 0x65, 0x75, 0xad, 0xe0, 0x81, 0x88, 0x63,
- 0x6e, 0x2d, 0x6e, 0x6f, 0x72, 0x74, 0xe8, 0xe0, 0x5c, 0x58, 0xe1, 0x02,
- 0x89, 0x70, 0xad, 0x60, 0x5c, 0x6a, 0x13, 0xe0, 0x25, 0x0a, 0x63, 0x63,
- 0x65, 0x73, 0x73, 0x70, 0x6f, 0x69, 0x6e, 0xf4, 0x02, 0x98, 0xae, 0x0b,
- 0x60, 0x59, 0x48, 0x04, 0x1a, 0x42, 0x86, 0x16, 0x05, 0x9a, 0x64, 0x75,
- 0x61, 0x6c, 0x73, 0x74, 0x61, 0x63, 0xeb, 0xe0, 0x59, 0x36, 0x2d, 0x66,
- 0x69, 0x70, 0x73, 0xae, 0x05, 0x0e, 0xe0, 0x5b, 0xc7, 0x64, 0x75, 0x61,
- 0x6c, 0x73, 0x74, 0x61, 0x63, 0x6b, 0xae, 0x04, 0xe0, 0x5b, 0xc7, 0xe3,
- 0xe0, 0x5c, 0x0f, 0xf2, 0x1e, 0x35, 0x0d, 0x2e, 0x06, 0x20, 0x2d, 0x04,
- 0x40, 0x87, 0x04, 0x04, 0x04, 0x40, 0xa5, 0x04, 0x06, 0x41, 0x92, 0x09,
- 0x40, 0xd0, 0x04, 0x60, 0x53, 0x57, 0x56, 0x32, 0xd3, 0xf7, 0x1f, 0xc3,
- 0x04, 0x17, 0x03, 0x88, 0xf8, 0x08, 0x06, 0x04, 0x40, 0xf9, 0xe0, 0x48,
- 0x39, 0xf9, 0x40, 0xd4, 0xe0, 0x2e, 0xd0, 0xed, 0xe0, 0x28, 0xb1, 0xe4,
- 0xe0, 0x80, 0x55, 0xe6, 0xc3, 0xe2, 0xe5, 0x04, 0xe0, 0x50, 0xfe, 0xe8,
- 0xc3, 0xef, 0xe1, 0x03, 0xd4, 0xa2, 0x68, 0x6b, 0x6b, 0x65, 0x72, 0x1f,
- 0xc3, 0xc3, 0xeb, 0xfa, 0x02, 0x84, 0xe7, 0xe0, 0x4b, 0xae, 0x65, 0x73,
- 0xfa, 0xe0, 0x7c, 0x28, 0xf9, 0x07, 0x15, 0x06, 0x05, 0xe0, 0x38, 0xa9,
- 0xf5, 0x03, 0x05, 0x85, 0x6f, 0xe8, 0xe0, 0x83, 0x70, 0x6b, 0xf9, 0xe0,
- 0x87, 0xbd, 0x67, 0x61, 0x73, 0xe1, 0xe0, 0x40, 0x06, 0x6f, 0x6b, 0xe1,
- 0xe0, 0x35, 0xa3, 0x67, 0xe7, 0xe0, 0x87, 0x15, 0x62, 0x6e, 0xe9, 0xe0,
- 0x76, 0x3b, 0xf7, 0x60, 0x87, 0x25, 0xc1, 0x7c, 0xf5, 0x0c, 0x05, 0x06,
- 0x05, 0x60, 0x42, 0xc5, 0x4f, 0xdf, 0xe0, 0x35, 0xdb, 0x6f, 0xf6, 0xe0,
- 0x75, 0xfc, 0xee, 0x60, 0x87, 0x13, 0xc1, 0x76, 0x6c, 0xe5, 0xe0, 0x38,
- 0x7f, 0xe7, 0xd1, 0x35, 0xf3, 0x07, 0x04, 0x09, 0x05, 0xe0, 0x88, 0x62,
- 0xf6, 0xe0, 0x86, 0xd6, 0x73, 0x2e, 0x6d, 0x79, 0x2e, 0xe9, 0xe0, 0x78,
- 0x9c, 0x63, 0xae, 0xe0, 0x70, 0xa7, 0xae, 0x06, 0x08, 0x60, 0x81, 0xef,
- 0x83, 0x77, 0x65, 0x62, 0x61, 0x63, 0xe3, 0xca, 0x07, 0xe2, 0xe0, 0x78,
- 0x07, 0xf2, 0xe0, 0x61, 0xe9, 0xef, 0x16, 0x10, 0x0d, 0x11, 0x06, 0x03,
- 0x0e, 0x05, 0x05, 0x04, 0x09, 0x07, 0x59, 0x24, 0x60, 0x2e, 0xe6, 0x60,
- 0x38, 0xd1, 0xc6, 0xf6, 0xf9, 0x05, 0x04, 0xe0, 0x2e, 0xcc, 0xeb, 0xe0,
- 0x78, 0xb1, 0x61, 0x6c, 0xad, 0xe0, 0x3f, 0x2e, 0xf6, 0x02, 0x85, 0x6e,
- 0xef, 0xe0, 0x6d, 0x17, 0x69, 0xe7, 0xe0, 0x86, 0x16, 0x75, 0x74, 0x65,
- 0x72, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0xee, 0xe0,
- 0x87, 0xe8, 0x74, 0x6f, 0xf2, 0xe0, 0x82, 0xf7, 0xf2, 0xd9, 0x56, 0xed,
- 0x06, 0x60, 0x80, 0xee, 0xc0, 0x79, 0xf3, 0x60, 0x5b, 0x92, 0xe0, 0x26,
- 0x3b, 0x6c, 0xec, 0xe0, 0x76, 0x00, 0x6b, 0xf5, 0xe0, 0x48, 0xf0, 0xe7,
- 0xe0, 0x57, 0x13, 0xe4, 0x04, 0xe0, 0x7c, 0x2c, 0xe5, 0xe0, 0x86, 0x50,
- 0x63, 0xeb, 0x44, 0xd2, 0xe0, 0x80, 0x9b, 0xae, 0x06, 0x60, 0x81, 0x66,
- 0x03, 0x83, 0xe9, 0x60, 0x86, 0x0b, 0xc1, 0xb9, 0xee, 0xe0, 0x78, 0xe2,
- 0xed, 0xe0, 0x85, 0xbc, 0xea, 0xe0, 0x61, 0x56, 0xe9, 0x14, 0x06, 0x05,
- 0x1f, 0x15, 0x16, 0x05, 0x10, 0x05, 0x04, 0x15, 0x60, 0x64, 0x5e, 0x47,
- 0x80, 0x58, 0xee, 0xc0, 0xb2, 0x76, 0x6e, 0xe5, 0xe0, 0x6c, 0x98, 0x74,
- 0xf4, 0xe0, 0x82, 0x48, 0xf3, 0x06, 0x06, 0x04, 0xe0, 0x4f, 0x4f, 0x1f,
- 0x43, 0xf8, 0xe0, 0x7b, 0xe6, 0xef, 0xe0, 0x7b, 0xe2, 0x68, 0x69, 0x72,
- 0xe9, 0x04, 0xe0, 0x85, 0xca, 0x66, 0x75, 0xea, 0xe0, 0x85, 0xc6, 0xef,
- 0x07, 0x07, 0x60, 0x86, 0x0f, 0xc1, 0x5b, 0x70, 0x72, 0x65, 0xf4, 0xe0,
- 0x7b, 0x01, 0x62, 0x72, 0x61, 0xee, 0xcb, 0x79, 0xee, 0x04, 0xe0, 0x80,
- 0x43, 0xe7, 0x02, 0x84, 0xf3, 0xe0, 0x36, 0xe0, 0xe5, 0x04, 0xe0, 0x7e,
- 0xff, 0x72, 0xe9, 0xe0, 0x56, 0x26, 0x6d, 0xe9, 0xe0, 0x7e, 0xe7, 0x6b,
- 0xf5, 0x04, 0xe0, 0x82, 0x8a, 0x7a, 0x65, 0x6e, 0x74, 0x61, 0x6b, 0x61,
- 0xf4, 0xdf, 0x05, 0x69, 0xeb, 0xe0, 0x82, 0x58, 0xe6, 0xe0, 0x20, 0x6e,
- 0xe3, 0x05, 0x04, 0xe0, 0x7a, 0xc1, 0xef, 0xe0, 0x84, 0x99, 0xe8, 0x04,
- 0xe0, 0x87, 0x21, 0x61, 0x72, 0xe4, 0xe0, 0x39, 0x4d, 0x62, 0x65, 0x69,
- 0x72, 0xe1, 0xe0, 0x7a, 0xaa, 0xe8, 0xe0, 0x81, 0xb4, 0xe7, 0x60, 0x74,
- 0x18, 0xd0, 0xf3, 0xe5, 0x15, 0x06, 0x10, 0x40, 0x49, 0x2e, 0x19, 0x08,
- 0x0d, 0x07, 0x0c, 0x05, 0x1c, 0x1c, 0x23, 0x05, 0x40, 0x43, 0xe0, 0x85,
- 0x7d, 0x78, 0x72, 0xef, 0xe0, 0x5c, 0xd4, 0x76, 0xe9, 0x02, 0x85, 0x73,
- 0xf4, 0xe0, 0x84, 0x2e, 0x65, 0xf7, 0x60, 0x84, 0x79, 0xc2, 0x69, 0xf3,
- 0x04, 0x15, 0x09, 0xa0, 0xf4, 0x05, 0x04, 0xe0, 0x86, 0xce, 0xef, 0xe0,
- 0x7c, 0x50, 0x61, 0x75, 0x72, 0x61, 0x6e, 0xf4, 0x60, 0x7c, 0x47, 0xca,
- 0x81, 0x69, 0x6e, 0x64, 0x65, 0x76, 0xe9, 0xe0, 0x69, 0x76, 0xe5, 0x02,
- 0x96, 0x72, 0xf6, 0x02, 0x89, 0x65, 0x2d, 0x6f, 0x6e, 0x6c, 0x69, 0xee,
- 0xc2, 0x0a, 0x64, 0xae, 0x60, 0x63, 0x93, 0x18, 0xe0, 0x22, 0xf6, 0x61,
- 0x72, 0x63, 0xe8, 0xe0, 0x83, 0xc0, 0xae, 0x60, 0x83, 0xbd, 0xc1, 0xa1,
- 0xf0, 0x06, 0x08, 0x05, 0x07, 0x06, 0x84, 0x75, 0x62, 0x6c, 0x69, 0xe3,
- 0xe0, 0x82, 0x49, 0x6f, 0xf2, 0xe0, 0x84, 0xc5, 0x6c, 0xae, 0x60, 0x60,
- 0x59, 0xcd, 0x23, 0x62, 0x6f, 0xe4, 0xe0, 0x59, 0xa9, 0xe1, 0xe0, 0x3f,
- 0x6d, 0xae, 0x04, 0xe0, 0x85, 0x10, 0xeb, 0xe0, 0x84, 0xcc, 0xee, 0x07,
- 0x09, 0x5d, 0xf9, 0xe0, 0x68, 0x5c, 0xf4, 0x04, 0xe0, 0x86, 0x59, 0xe1,
- 0xe0, 0x73, 0x44, 0x6e, 0xe5, 0x60, 0x2a, 0x75, 0xe0, 0x53, 0x8a, 0x6d,
- 0x6f, 0x74, 0x65, 0xf7, 0xe0, 0x80, 0xee, 0xec, 0x02, 0x84, 0xe9, 0xe0,
- 0x27, 0xc8, 0xae, 0x60, 0x81, 0xb8, 0xc1, 0x03, 0x6b, 0x6c, 0x61, 0xed,
- 0xe0, 0x85, 0x32, 0xe9, 0x04, 0xe0, 0x84, 0x6e, 0x73, 0xe5, 0x60, 0x84,
- 0xf0, 0xc1, 0x3a, 0x68, 0xe1, 0xe0, 0x7b, 0xca, 0xe7, 0x02, 0x95, 0x67,
- 0x69, 0xef, 0x03, 0x03, 0x86, 0xad, 0x02, 0x86, 0x65, 0x6d, 0xe9, 0xe0,
- 0x50, 0xfb, 0x63, 0x61, 0xec, 0xe0, 0x6d, 0xef, 0xae, 0xe0, 0x85, 0xce,
- 0xe4, 0x08, 0x07, 0x08, 0x60, 0x6f, 0xcb, 0xd6, 0x21, 0x75, 0x6d, 0x62,
- 0xf2, 0xe0, 0x63, 0x2f, 0x69, 0x72, 0x65, 0x63, 0xf4, 0xe0, 0x82, 0x7e,
- 0xae, 0xe0, 0x4b, 0x17, 0xe3, 0x04, 0x05, 0x0b, 0x84, 0x72, 0xe5, 0xe0,
- 0x82, 0xff, 0xe9, 0x02, 0x84, 0xf0, 0xe0, 0x79, 0xe3, 0xe6, 0xe0, 0x6d,
- 0x7b, 0xe8, 0xe0, 0x82, 0xcb, 0xae, 0x60, 0x7a, 0xe1, 0x03, 0x40, 0x76,
- 0x48, 0xe8, 0xb2, 0x62, 0xf5, 0xe0, 0x57, 0x29, 0xe1, 0x02, 0x97, 0xec,
- 0x05, 0x06, 0xe0, 0x62, 0x92, 0xf4, 0x60, 0x82, 0x85, 0xc0, 0xfa, 0x65,
- 0x73, 0x74, 0x61, 0x74, 0xe5, 0x60, 0x80, 0xf0, 0xc4, 0xbb, 0xe4, 0x07,
- 0x07, 0x09, 0x09, 0xe0, 0x85, 0x85, 0x79, 0x6d, 0x61, 0xe4, 0xe0, 0x76,
- 0xad, 0x74, 0x68, 0x65, 0x64, 0x6f, 0xe3, 0xe0, 0x68, 0x6e, 0x6d, 0x79,
- 0x62, 0x6c, 0x6f, 0xe7, 0xe0, 0x82, 0xb8, 0x2d, 0x62, 0x6f, 0x6f, 0xeb,
- 0xe0, 0x70, 0xa1, 0xae, 0x60, 0x6e, 0x8c, 0xd4, 0xee, 0xe4, 0x04, 0xe0,
- 0x7c, 0xbf, 0xf6, 0xe0, 0x84, 0x2c, 0xe1, 0x12, 0x08, 0x21, 0x05, 0x04,
- 0x17, 0x04, 0x05, 0x09, 0x11, 0x1a, 0x0a, 0x20, 0x57, 0xf1, 0xe0, 0x6a,
- 0xb7, 0x77, 0x61, 0x2d, 0x6d, 0xe1, 0xe0, 0x6e, 0x2e, 0xf6, 0x02, 0x89,
- 0x70, 0x61, 0x67, 0x65, 0x2e, 0x63, 0xef, 0xd8, 0x9e, 0x65, 0xee, 0x04,
- 0xe0, 0x7c, 0xfa, 0x64, 0x62, 0xae, 0x06, 0x60, 0x5f, 0x13, 0xd0, 0x21,
- 0xe3, 0x59, 0x5c, 0xe0, 0x53, 0xfd, 0x75, 0xed, 0xe0, 0x7f, 0x08, 0xf2,
- 0xe0, 0x5b, 0x23, 0xee, 0x06, 0x06, 0x05, 0xe0, 0x7e, 0xef, 0x7a, 0x61,
- 0xee, 0xe0, 0x79, 0xe0, 0x6b, 0xef, 0xe0, 0x7e, 0xf7, 0x64, 0xe1, 0xe0,
- 0x58, 0xb7, 0xec, 0xe0, 0x23, 0xbd, 0x6b, 0xeb, 0xe0, 0x3f, 0x1a, 0xe9,
- 0x04, 0xe0, 0x4c, 0xcc, 0xee, 0xe0, 0x75, 0xf8, 0xe8, 0x02, 0x85, 0x6f,
- 0xec, 0xe0, 0x7d, 0x5e, 0x6b, 0x6b, 0x65, 0x72, 0x61, 0xf6, 0xe0, 0x7e,
- 0x80, 0xe7, 0x02, 0x84, 0xf5, 0xe0, 0x6b, 0xf5, 0x2d, 0x63, 0x6c, 0x6f,
- 0x75, 0xe4, 0x02, 0x83, 0x2d, 0x63, 0x68, 0x2e, 0x68, 0x6f, 0x73, 0xf4,
- 0xe0, 0x56, 0x19, 0x66, 0x66, 0x6c, 0x65, 0x65, 0x6e, 0xf4, 0xe0, 0x80,
- 0xba, 0xe4, 0x07, 0x06, 0x60, 0x7c, 0x1a, 0xc7, 0x0d, 0xef, 0x60, 0x78,
- 0x59, 0xc4, 0x0b, 0x69, 0xef, 0x04, 0xe0, 0x84, 0xb7, 0xae, 0x07, 0x60,
- 0x5d, 0xaa, 0xe0, 0x25, 0xab, 0xe6, 0xe0, 0x84, 0xa9, 0xe3, 0x04, 0xe0,
- 0x6f, 0x24, 0x6b, 0x6d, 0x61, 0x7a, 0xe5, 0xe0, 0x81, 0x45, 0xb2, 0xe0,
- 0x77, 0x01, 0xae, 0x07, 0x08, 0x60, 0x73, 0x24, 0xd1, 0x64, 0x63, 0x64,
- 0x6e, 0x37, 0xb7, 0xe0, 0x84, 0x69, 0x61, 0x70, 0x70, 0x73, 0x70, 0xef,
- 0xe0, 0x65, 0xc0, 0xf1, 0x0e, 0x40, 0x45, 0x04, 0x04, 0x06, 0x0e, 0x04,
- 0x0c, 0x06, 0x09, 0xe0, 0x83, 0xef, 0xf5, 0x03, 0x13, 0x89, 0xe9, 0x02,
- 0x8a, 0x70, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0xee, 0xe0, 0x25, 0x4a, 0x63,
- 0x6b, 0x73, 0xf9, 0xc8, 0xba, 0xe5, 0x04, 0xe0, 0x77, 0x7e, 0xe2, 0xe0,
- 0x63, 0x08, 0xe1, 0x02, 0x9a, 0x6e, 0xe7, 0x05, 0x05, 0xe0, 0x40, 0x69,
- 0x74, 0xf2, 0xe0, 0x5c, 0x4e, 0xee, 0x05, 0x04, 0xe0, 0x75, 0x01, 0xe7,
- 0xe0, 0x5c, 0x43, 0xe1, 0xe0, 0x2b, 0x00, 0x6c, 0x69, 0x66, 0x69, 0xef,
- 0xe0, 0x83, 0x43, 0xf3, 0xe0, 0x50, 0x1c, 0xf0, 0xe0, 0x7c, 0xca, 0x6f,
- 0x74, 0xef, 0xe0, 0x83, 0x1a, 0x6c, 0x64, 0xae, 0x05, 0x60, 0x80, 0xfa,
- 0x84, 0x67, 0x6f, 0xf6, 0xe0, 0x80, 0xfa, 0xe8, 0xe0, 0x70, 0xa1, 0xe3,
- 0x04, 0xe0, 0x59, 0x0e, 0x2e, 0xe3, 0x60, 0x82, 0x5f, 0xc1, 0xa1, 0x62,
- 0x75, 0xf3, 0xe0, 0x7a, 0x27, 0xe1, 0x04, 0xe0, 0x83, 0xf6, 0xb2, 0xe0,
- 0x83, 0xed, 0x2d, 0xe1, 0xe0, 0x69, 0xb9, 0xf0, 0x23, 0x04, 0x1d, 0x06,
- 0x11, 0x40, 0x5a, 0x06, 0x13, 0x41, 0x4a, 0x0f, 0x40, 0xea, 0x08, 0x09,
- 0x40, 0x77, 0x40, 0x83, 0x40, 0x56, 0x12, 0x0a, 0x40, 0x70, 0x0a, 0x15,
- 0x09, 0x60, 0x54, 0xc0, 0xe0, 0x27, 0xa0, 0xfa, 0xe0, 0x81, 0xc5, 0xf9,
- 0x08, 0x05, 0x60, 0x54, 0x67, 0xe0, 0x2f, 0x50, 0x6d, 0xee, 0xe0, 0x3a,
- 0xbd, 0xe1, 0x04, 0xe0, 0x82, 0xb7, 0x74, 0x69, 0x67, 0x6f, 0x72, 0x73,
- 0xeb, 0xe0, 0x83, 0x21, 0xf7, 0x60, 0x77, 0xc4, 0xcb, 0xe3, 0xf6, 0x05,
- 0x07, 0xe0, 0x81, 0x92, 0x74, 0xae, 0x60, 0x53, 0x03, 0xd4, 0x6b, 0xe8,
- 0xe0, 0x82, 0x39, 0xf5, 0x0a, 0x06, 0x05, 0x06, 0x06, 0x07, 0x05, 0xe0,
- 0x81, 0x60, 0x73, 0x73, 0x79, 0xe3, 0xc3, 0x88, 0xf0, 0x06, 0xe0, 0x46,
- 0x4f, 0x6e, 0x79, 0xf5, 0xe0, 0x82, 0x7d, 0x6c, 0x61, 0xf7, 0xe0, 0x71,
- 0x72, 0xe7, 0x60, 0x4e, 0x58, 0xe0, 0x33, 0x13, 0x65, 0x62, 0xec, 0xd9,
- 0x61, 0xe2, 0x06, 0x05, 0x18, 0xe0, 0x83, 0x3f, 0x74, 0xec, 0xe0, 0x6e,
- 0x7b, 0xec, 0x02, 0x91, 0xe9, 0x02, 0x85, 0x73, 0xe8, 0xe0, 0x65, 0xb9,
- 0x63, 0x2d, 0x69, 0x6e, 0x71, 0xf5, 0xe0, 0x3a, 0x41, 0xae, 0xe0, 0x39,
- 0x08, 0xae, 0x03, 0xc0, 0xfe, 0xf3, 0xe0, 0x81, 0x93, 0xf4, 0x60, 0x70,
- 0xe7, 0xd2, 0x4f, 0xf3, 0x0d, 0x5a, 0x47, 0x50, 0xac, 0x60, 0x29, 0x44,
- 0x60, 0x26, 0xaf, 0xc8, 0x3d, 0x73, 0xe5, 0xe0, 0x45, 0xf7, 0xf2, 0x0f,
- 0x08, 0x06, 0x12, 0x40, 0x70, 0x40, 0x60, 0x31, 0x09, 0x44, 0x49, 0xe0,
- 0x7d, 0x9b, 0x7a, 0x65, 0x77, 0x6f, 0xf2, 0xe0, 0x24, 0xf3, 0x76, 0x63,
- 0xf9, 0xe0, 0x63, 0x4c, 0xf5, 0x05, 0x05, 0xe0, 0x82, 0xf5, 0x73, 0xfa,
- 0xe0, 0x21, 0xfb, 0x64, 0x65, 0x6e, 0xf4, 0xe0, 0x50, 0xc5, 0xef, 0x0b,
- 0x0c, 0x0a, 0x04, 0x08, 0x0c, 0x10, 0x04, 0xe0, 0x82, 0xa0, 0xf4, 0x02,
- 0x85, 0x6f, 0xee, 0xe0, 0x6f, 0xf0, 0xe5, 0xe0, 0x76, 0x45, 0x70, 0x65,
- 0x72, 0xf4, 0x60, 0x2c, 0xcc, 0xe0, 0x53, 0xcf, 0xed, 0xe0, 0x81, 0x40,
- 0x67, 0x72, 0x65, 0x73, 0xf3, 0xe0, 0x5a, 0x4e, 0xe6, 0x07, 0x60, 0x53,
- 0xe7, 0xe0, 0x2e, 0xd1, 0x65, 0xf3, 0xc2, 0x02, 0xe4, 0x04, 0xe0, 0x82,
- 0xaf, 0x75, 0x63, 0x74, 0x69, 0x6f, 0xee, 0x60, 0x7f, 0xcc, 0xc0, 0x74,
- 0x63, 0xe8, 0xc1, 0x66, 0xae, 0x17, 0x54, 0x28, 0x60, 0x3f, 0x90, 0x4d,
- 0x83, 0x5a, 0x57, 0x42, 0x95, 0x40, 0x7a, 0x2a, 0x3b, 0x40, 0xe7, 0x40,
- 0x5a, 0x40, 0xe7, 0x9f, 0xf4, 0x04, 0xe0, 0x80, 0xc5, 0x79, 0xf0, 0xe0,
- 0x41, 0x80, 0xe9, 0x07, 0x40, 0x44, 0x08, 0xe0, 0x7d, 0x4b, 0xf6, 0x02,
- 0xa9, 0x61, 0xf4, 0x02, 0x94, 0x69, 0x7a, 0x65, 0x68, 0x65, 0x61, 0x6c,
- 0x74, 0x68, 0x69, 0x6e, 0x73, 0x75, 0x72, 0x61, 0x6e, 0xe3, 0xe0, 0x7e,
- 0xee, 0x65, 0x6c, 0x69, 0x6e, 0x6b, 0x2e, 0x73, 0x6e, 0x6f, 0x77, 0x66,
- 0x6c, 0x61, 0xeb, 0xe0, 0x6c, 0xc8, 0xae, 0x0c, 0x60, 0x66, 0x1c, 0x57,
- 0x9c, 0x42, 0xf1, 0x40, 0x93, 0xc0, 0x63, 0x69, 0x6e, 0x73, 0x74, 0x61,
- 0x6e, 0x63, 0xe5, 0xe0, 0x30, 0x1d, 0x6e, 0x63, 0x69, 0x70, 0xe5, 0xe0,
- 0x60, 0xb7, 0x6d, 0xe5, 0x04, 0xe0, 0x82, 0x24, 0x74, 0x65, 0xec, 0xe0,
- 0x6a, 0x41, 0xe5, 0x02, 0x9d, 0x73, 0xf3, 0x05, 0x09, 0xe0, 0x82, 0x0b,
- 0x65, 0xae, 0x60, 0x46, 0x59, 0x60, 0x2f, 0xe2, 0x8d, 0xae, 0x08, 0x60,
- 0x70, 0x9c, 0x4d, 0x05, 0xc1, 0x85, 0xed, 0xe0, 0x80, 0x5a, 0x71, 0x75,
- 0x61, 0x6c, 0x69, 0x66, 0x79, 0x6d, 0x65, 0x2e, 0x74, 0x6f, 0x64, 0xe1,
- 0xe0, 0x70, 0x80, 0x64, 0xae, 0x60, 0x27, 0xfa, 0x60, 0x4e, 0x14, 0x93,
- 0xe1, 0x05, 0x04, 0xe0, 0x7d, 0x63, 0xf8, 0xe0, 0x7f, 0xc4, 0x6d, 0x65,
- 0xf2, 0xe0, 0x5f, 0xf0, 0xf0, 0x04, 0xe0, 0x63, 0x15, 0xae, 0x53, 0x6e,
- 0x60, 0x5b, 0x31, 0x41, 0xc9, 0xd0, 0xdd, 0xef, 0x10, 0x06, 0x06, 0x0a,
- 0x12, 0x29, 0x11, 0x0a, 0x29, 0x0b, 0x18, 0x04, 0x16, 0xe0, 0x77, 0x66,
- 0x7a, 0x6e, 0xe1, 0xe0, 0x20, 0xdc, 0x77, 0x69, 0xe1, 0xe0, 0x5e, 0x0e,
- 0xf4, 0x04, 0xe0, 0x5f, 0xb5, 0x61, 0xe7, 0xe0, 0x35, 0xc2, 0x73, 0xf4,
- 0x06, 0x60, 0x80, 0x5a, 0xc1, 0x3c, 0x6d, 0x61, 0x6e, 0x2d, 0x65, 0x63,
- 0xe8, 0xe0, 0x74, 0xa3, 0xf2, 0x07, 0x1c, 0x60, 0x7d, 0x90, 0xc2, 0x9e,
- 0xf3, 0x03, 0x09, 0x87, 0x1f, 0x43, 0x61, 0x1f, 0x45, 0xcb, 0xe0, 0x32,
- 0xc4, 0x67, 0x72, 0x75, 0xee, 0xe0, 0x7b, 0x3e, 0x61, 0x6e, 0xe7, 0x60,
- 0x75, 0xc4, 0xc5, 0x38, 0x64, 0xe5, 0xe0, 0x4b, 0x7a, 0xee, 0x02, 0x86,
- 0x70, 0x65, 0xf3, 0xe0, 0x5b, 0x9b, 0x69, 0x61, 0x74, 0x6f, 0xf7, 0xe0,
- 0x48, 0x8e, 0x6d, 0x6f, 0xf2, 0x03, 0xdd, 0xc6, 0x73, 0xeb, 0xc0, 0x60,
- 0xec, 0x04, 0x06, 0x05, 0x91, 0x74, 0x61, 0xf6, 0xe0, 0x5e, 0xd4, 0x6b,
- 0xef, 0xe0, 0x2c, 0x6d, 0xe9, 0x02, 0x8a, 0x74, 0xe9, 0x04, 0xe0, 0x7f,
- 0xb3, 0xe3, 0xe0, 0x7e, 0x75, 0x63, 0xe5, 0xcf, 0x67, 0xae, 0x60, 0x73,
- 0x6c, 0x41, 0xe0, 0xc8, 0x58, 0xeb, 0x04, 0xe0, 0x6d, 0x7a, 0x72, 0x6f,
- 0xf6, 0xe0, 0x7a, 0xd9, 0xe9, 0x02, 0x86, 0x76, 0x72, 0xef, 0xe0, 0x61,
- 0x39, 0x6e, 0xf4, 0x02, 0x85, 0x74, 0xef, 0xe0, 0x45, 0xe3, 0x32, 0x74,
- 0xe8, 0xe0, 0x47, 0xed, 0xe8, 0xe0, 0x7e, 0xac, 0xe4, 0x03, 0x07, 0x87,
- 0x7a, 0x6f, 0x6e, 0xe5, 0xe0, 0x53, 0x31, 0x6c, 0x61, 0x73, 0xe9, 0xe0,
- 0x45, 0x80, 0x68, 0xe1, 0xc6, 0x7a, 0xae, 0x60, 0x43, 0xb8, 0xe0, 0x3b,
- 0x27, 0xee, 0x60, 0x74, 0xf7, 0x49, 0xe0, 0xc2, 0x03, 0xed, 0x04, 0xe0,
- 0x80, 0xce, 0xee, 0xe0, 0x7e, 0xca, 0xec, 0x0a, 0x16, 0x04, 0x08, 0x0b,
- 0x5f, 0x62, 0xe0, 0x61, 0x30, 0xf5, 0x05, 0x0b, 0xe0, 0x7e, 0x45, 0x72,
- 0x69, 0x6e, 0x61, 0x63, 0x69, 0x6f, 0x6e, 0xe1, 0xd1, 0x58, 0x6d, 0xe2,
- 0xe0, 0x6b, 0x2a, 0x6f, 0xae, 0xc1, 0x15, 0x65, 0x73, 0xeb, 0x60, 0x58,
- 0x49, 0xc8, 0xa2, 0x63, 0xae, 0x06, 0x4e, 0xd4, 0xe0, 0x6a, 0x4d, 0xe3,
- 0xdf, 0xef, 0xe1, 0x05, 0x14, 0xe0, 0x7b, 0x69, 0xf9, 0x04, 0xe0, 0x80,
- 0x87, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0xee, 0x04, 0xe0, 0x80, 0x7c,
- 0xad, 0xe0, 0x7b, 0x1d, 0xf4, 0x02, 0x93, 0x74, 0x65, 0xf2, 0x02, 0x84,
- 0xf0, 0xe0, 0x45, 0x4d, 0x2d, 0x61, 0x70, 0x70, 0xae, 0x60, 0x72, 0xcc,
- 0xcd, 0x94, 0x66, 0x6f, 0x72, 0xed, 0x02, 0x85, 0x73, 0xe8, 0xe0, 0x62,
- 0x76, 0xb0, 0xe0, 0x7e, 0xe0, 0xe9, 0x15, 0x04, 0x08, 0x0c, 0x06, 0x12,
- 0x07, 0x09, 0x07, 0x12, 0x0f, 0x60, 0x24, 0xc1, 0x5d, 0xe9, 0x60, 0x2e,
- 0x4a, 0xcc, 0x95, 0xfa, 0xe0, 0x7b, 0xca, 0x78, 0x6f, 0x6c, 0x69, 0xee,
- 0xe0, 0x73, 0x48, 0xf3, 0x06, 0x60, 0x69, 0x02, 0xd0, 0x99, 0x74, 0xef,
- 0xe0, 0x79, 0x98, 0x6f, 0x6e, 0xe5, 0xe0, 0x6c, 0x82, 0xee, 0x08, 0x05,
- 0x60, 0x7d, 0xab, 0x42, 0x65, 0x81, 0x6f, 0xeb, 0xe0, 0x67, 0x61, 0xe2,
- 0xe0, 0x42, 0xe6, 0x6d, 0x69, 0x65, 0xee, 0xe0, 0x79, 0x09, 0xec, 0x04,
- 0xe0, 0x71, 0x1d, 0xef, 0xe0, 0x7a, 0xf8, 0x67, 0x62, 0x6f, 0xe1, 0xe0,
- 0x68, 0xf7, 0xe5, 0x02, 0x87, 0x6d, 0x6f, 0x6e, 0xf4, 0xe0, 0x78, 0xe7,
- 0x64, 0x6d, 0x6f, 0x6e, 0xf4, 0xe0, 0x7d, 0xe4, 0xe3, 0x04, 0xe0, 0x7d,
- 0x76, 0xf4, 0x04, 0xe0, 0x6c, 0xd4, 0x75, 0xf2, 0xe0, 0x73, 0xe1, 0x61,
- 0xe3, 0xe0, 0x5d, 0xe5, 0xe8, 0x0b, 0x06, 0x0d, 0x07, 0x15, 0x07, 0x60,
- 0x7d, 0x42, 0xc2, 0x4c, 0x79, 0x73, 0xe9, 0xe0, 0x7e, 0x36, 0x78, 0x2e,
- 0x65, 0x6e, 0x73, 0x63, 0x61, 0x6c, 0x65, 0xe4, 0xe0, 0x44, 0x92, 0xf5,
- 0x60, 0x39, 0xdd, 0xe0, 0x2d, 0x48, 0xef, 0x04, 0xe0, 0x69, 0x87, 0x74,
- 0xef, 0x06, 0x60, 0x7d, 0x34, 0xc2, 0x69, 0x67, 0x72, 0x61, 0x70, 0xe8,
- 0xe0, 0x7d, 0x61, 0x69, 0x6c, 0x69, 0xf0, 0xe0, 0x7d, 0x28, 0x61, 0x72,
- 0x6d, 0x61, 0xe3, 0x04, 0xe0, 0x7d, 0x4e, 0x69, 0x65, 0xee, 0x04, 0xe0,
- 0x7e, 0xec, 0xf3, 0xe0, 0x73, 0xb2, 0xe7, 0x06, 0x04, 0x03, 0xe0, 0x6e,
- 0x09, 0xe6, 0xe0, 0x56, 0x15, 0xe1, 0xcd, 0xb2, 0xae, 0xe0, 0x67, 0x92,
- 0xe6, 0x04, 0xe0, 0x7f, 0x63, 0x69, 0xfa, 0xe0, 0x6b, 0xc1, 0xe5, 0x0c,
- 0x12, 0x2c, 0x05, 0x09, 0x06, 0x06, 0x60, 0x7d, 0x3b, 0xc1, 0xbe, 0xf3,
- 0x02, 0x83, 0xe3, 0xdc, 0x6c, 0x61, 0x72, 0xef, 0x02, 0x81, 0x2d, 0x75,
- 0x72, 0xe2, 0xe0, 0x71, 0x81, 0xf2, 0x04, 0x04, 0x14, 0x84, 0xf5, 0xe0,
- 0x4b, 0xaf, 0xf3, 0x02, 0x87, 0x70, 0x65, 0x63, 0xf4, 0xe0, 0x31, 0x06,
- 0x6f, 0xae, 0x60, 0x51, 0x1a, 0x60, 0x23, 0x37, 0xc7, 0x57, 0xed, 0xe0,
- 0x6f, 0x70, 0xae, 0x06, 0x60, 0x5c, 0x51, 0xd7, 0xdc, 0xf3, 0xe0, 0x7f,
- 0x15, 0x70, 0xf0, 0xe0, 0x6c, 0x1a, 0xee, 0x04, 0xe0, 0x46, 0x23, 0xfa,
- 0xe0, 0x7d, 0x1d, 0x65, 0x77, 0xe5, 0xe0, 0x70, 0x15, 0x63, 0x6f, 0xf2,
- 0xe0, 0x59, 0xe4, 0xae, 0x60, 0x68, 0x08, 0x50, 0x8c, 0x03, 0x44, 0x5f,
- 0xc0, 0x5a, 0xe4, 0x04, 0xe0, 0x7c, 0xe6, 0x6e, 0xf3, 0xe0, 0x5f, 0x30,
- 0xe3, 0x03, 0x07, 0x84, 0x6c, 0x6f, 0x75, 0xe4, 0xe0, 0x49, 0xf6, 0xe3,
- 0xe0, 0x7c, 0x68, 0xae, 0x60, 0x7a, 0x4f, 0xc2, 0x83, 0x62, 0xae, 0x60,
- 0x54, 0x12, 0x60, 0x24, 0x57, 0x83, 0xe1, 0x10, 0x0d, 0x04, 0x05, 0x10,
- 0x40, 0x4c, 0x14, 0x0c, 0x40, 0x4e, 0x08, 0x32, 0xe0, 0x7d, 0x9b, 0xf9,
- 0x04, 0xe0, 0x7e, 0xb0, 0x77, 0x68, 0x69, 0x72, 0xec, 0xe0, 0x7e, 0x95,
- 0xf6, 0xe0, 0x78, 0x17, 0x74, 0xf2, 0xe0, 0x7b, 0xe8, 0x73, 0x73, 0x65,
- 0x6e, 0x67, 0x65, 0x72, 0x2d, 0x61, 0x73, 0x73, 0x6f, 0xe3, 0xe0, 0x61,
- 0xa7, 0xf2, 0x09, 0x0f, 0x06, 0x04, 0x09, 0x07, 0xe0, 0x7b, 0xf3, 0xf4,
- 0x06, 0x04, 0x60, 0x7c, 0x11, 0xb2, 0xee, 0xe0, 0x4d, 0xac, 0xe9, 0xe0,
- 0x6d, 0x12, 0x6f, 0x63, 0xe8, 0xe0, 0x62, 0x46, 0xed, 0xe0, 0x77, 0xe0,
- 0x6c, 0x69, 0x61, 0x6d, 0x65, 0xee, 0xe0, 0x41, 0xa8, 0x69, 0xf3, 0x60,
- 0x64, 0x2a, 0xda, 0x37, 0xe1, 0x06, 0x05, 0x06, 0xe0, 0x3e, 0x47, 0x73,
- 0xe9, 0xe0, 0x5e, 0xa5, 0x6c, 0x6c, 0xe5, 0xe0, 0x5a, 0xf8, 0x63, 0x68,
- 0x75, 0xf4, 0xe0, 0x6e, 0xc2, 0xee, 0x05, 0x09, 0xe0, 0x5a, 0x49, 0x74,
- 0x68, 0x65, 0x6f, 0x6e, 0xf3, 0xe0, 0x69, 0x71, 0x61, 0x73, 0xef, 0xc2,
- 0xaa, 0xec, 0x02, 0x84, 0xed, 0xe0, 0x64, 0xcb, 0x65, 0xf2, 0xe0, 0x6c,
- 0x43, 0x67, 0xe5, 0x06, 0x04, 0x3a, 0xe0, 0x7d, 0xdd, 0xf8, 0xe0, 0x77,
- 0x43, 0xf3, 0x02, 0x8e, 0x70, 0x65, 0x65, 0x64, 0x6d, 0x6f, 0x62, 0x69,
- 0x6c, 0x69, 0xfa, 0xe0, 0x74, 0x32, 0xae, 0x06, 0x08, 0x09, 0xe0, 0x70,
- 0x53, 0x77, 0x69, 0x61, 0x72, 0xe4, 0xe0, 0x59, 0x98, 0x74, 0x6f, 0x72,
- 0x70, 0x72, 0x6f, 0xea, 0xd2, 0x2f, 0x69, 0x74, 0x2e, 0x68, 0x73, 0x2d,
- 0x68, 0x65, 0x69, 0x6c, 0x62, 0x72, 0x6f, 0xee, 0xe0, 0x54, 0xf0, 0x66,
- 0x72, 0x6f, 0x6e, 0xf4, 0xe0, 0x7c, 0xeb, 0xe4, 0x03, 0xdb, 0x76, 0xf5,
- 0xe0, 0x77, 0x41, 0x61, 0x73, 0xae, 0x04, 0x0d, 0x0f, 0x87, 0x6d, 0x61,
- 0x73, 0x73, 0x69, 0x76, 0x65, 0x67, 0x72, 0xe9, 0xe0, 0x78, 0x62, 0x68,
- 0x6f, 0x73, 0x74, 0x65, 0x64, 0x2d, 0x62, 0x79, 0x2d, 0x70, 0x72, 0xe5,
- 0xc0, 0xab, 0x64, 0x61, 0x74, 0xe1, 0xe0, 0x58, 0x36, 0x62, 0x65, 0x65,
- 0x62, 0xf9, 0xe0, 0x68, 0xd9, 0xae, 0x60, 0x74, 0x2f, 0x43, 0x07, 0x41,
- 0x60, 0xc3, 0x02, 0xef, 0x27, 0x11, 0x38, 0x09, 0x2e, 0x10, 0x20, 0x40,
- 0x69, 0x40, 0x94, 0x41, 0x39, 0x40, 0x4e, 0x1f, 0x40, 0xe4, 0x40, 0x5b,
- 0x38, 0x40, 0x62, 0x0a, 0x30, 0x29, 0x40, 0x51, 0x40, 0x44, 0x1f, 0x22,
- 0x34, 0x15, 0x60, 0x34, 0x7c, 0xd8, 0x39, 0xfa, 0x05, 0x07, 0xe0, 0x7a,
- 0x42, 0x75, 0xae, 0x60, 0x76, 0x0f, 0xc2, 0x84, 0xef, 0xe0, 0x7b, 0x78,
- 0xf9, 0x08, 0x0c, 0x05, 0x04, 0x15, 0xe0, 0x71, 0x7c, 0x73, 0x74, 0x72,
- 0x65, 0x2d, 0x73, 0x6c, 0x69, 0xe4, 0xe0, 0x55, 0x1f, 0x6f, 0xe4, 0xe0,
- 0x3a, 0xba, 0x67, 0xe1, 0xda, 0x6c, 0xe1, 0x07, 0x60, 0x21, 0xea, 0xe0,
- 0x5a, 0x03, 0x6d, 0xe1, 0x04, 0xe0, 0x71, 0xa7, 0x7a, 0x61, 0x6b, 0xe9,
- 0xe0, 0x6e, 0xf3, 0x2e, 0xec, 0xe0, 0x7d, 0x14, 0xf8, 0x04, 0xe0, 0x2e,
- 0xf2, 0xae, 0xe0, 0x5e, 0xf0, 0xf7, 0x03, 0x09, 0x93, 0x6f, 0x2e, 0x63,
- 0x6f, 0x64, 0xe5, 0xe0, 0x79, 0x7a, 0xee, 0x05, 0x08, 0xe0, 0x4b, 0x65,
- 0x70, 0x72, 0x6f, 0x76, 0xe9, 0xe0, 0x73, 0x27, 0x2e, 0xf0, 0xe0, 0x7c,
- 0xf5, 0xe1, 0x02, 0x87, 0x72, 0x69, 0x61, 0x73, 0xe1, 0xc5, 0x2a, 0xee,
- 0xe0, 0x3c, 0x92, 0xf6, 0x06, 0x4d, 0x07, 0xe0, 0x6d, 0x4b, 0x65, 0x72,
- 0x68, 0x61, 0x6c, 0xec, 0xe0, 0x76, 0xb4, 0xf5, 0x04, 0x0b, 0x07, 0x84,
- 0x74, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0xf3, 0xe0, 0x77, 0x6e, 0xed,
- 0x60, 0x3f, 0x9e, 0xe0, 0x38, 0x75, 0xe4, 0xe0, 0x35, 0x34, 0x63, 0xe8,
- 0xe0, 0x45, 0xcb, 0xf4, 0x0a, 0x17, 0x18, 0x07, 0x04, 0x60, 0x7a, 0x71,
- 0xc0, 0x45, 0x73, 0xf5, 0x05, 0x0c, 0xe0, 0x77, 0x49, 0xeb, 0x04, 0xe0,
- 0x7a, 0xfb, 0x69, 0xae, 0x60, 0x60, 0x5a, 0xd6, 0x45, 0xe3, 0xe0, 0x29,
- 0xc1, 0xef, 0x09, 0x04, 0x04, 0x60, 0x37, 0x9f, 0xe0, 0x2d, 0xd3, 0xf9,
- 0xe0, 0x3a, 0x25, 0xe9, 0xe0, 0x21, 0x72, 0x66, 0x75, 0xeb, 0xe0, 0x60,
- 0xb1, 0x68, 0x65, 0x72, 0xae, 0xe0, 0x71, 0x91, 0xe5, 0xe0, 0x71, 0xf6,
- 0xe1, 0x09, 0x06, 0x06, 0x60, 0x22, 0xfa, 0xe0, 0x3d, 0x89, 0xf2, 0x60,
- 0x77, 0xb4, 0xc1, 0xa0, 0x70, 0x2e, 0xe3, 0xe0, 0x6d, 0xf6, 0xeb, 0x04,
- 0xe0, 0x21, 0x20, 0x69, 0xae, 0x60, 0x71, 0xee, 0x47, 0x56, 0xc1, 0x36,
- 0xf3, 0x0b, 0x04, 0x24, 0x06, 0x16, 0x09, 0x06, 0x25, 0xe0, 0x73, 0x7f,
- 0x1f, 0x43, 0xf8, 0xa6, 0xf4, 0x02, 0x9d, 0xf2, 0x02, 0x93, 0xef, 0x06,
- 0x46, 0x75, 0xe0, 0x4e, 0x4c, 0xf7, 0x04, 0xe0, 0x66, 0xdf, 0x77, 0x6c,
- 0x6b, 0xf0, 0xe0, 0x77, 0x6f, 0x65, 0x2d, 0x74, 0xef, 0xe0, 0x37, 0x34,
- 0xe5, 0xe0, 0x6e, 0x57, 0x6f, 0x79, 0xf2, 0xe0, 0x73, 0xcd, 0xe8, 0x02,
- 0x84, 0xf5, 0xe0, 0x45, 0xc7, 0xe9, 0x02, 0x84, 0xee, 0xe0, 0x45, 0x90,
- 0x6d, 0x61, 0xae, 0x60, 0x78, 0xbf, 0xc1, 0x31, 0xe5, 0x04, 0xe0, 0x75,
- 0xc6, 0xf4, 0xe0, 0x40, 0x61, 0x63, 0x68, 0xf2, 0xe0, 0x3e, 0xca, 0xe1,
- 0x02, 0x85, 0x73, 0xe3, 0xe0, 0x6f, 0x80, 0xeb, 0x02, 0x8c, 0xe9, 0x04,
- 0xe0, 0x44, 0x64, 0x6b, 0x61, 0x6d, 0xe9, 0xe0, 0x4c, 0xf6, 0xe1, 0x06,
- 0x60, 0x7a, 0x27, 0xc1, 0xac, 0x73, 0x61, 0x79, 0xe1, 0xe0, 0x29, 0x94,
- 0x2e, 0xe8, 0x02, 0x87, 0x6f, 0x72, 0x64, 0xe1, 0xe0, 0x6f, 0x0d, 0x65,
- 0xe4, 0xe0, 0x71, 0x2c, 0xf2, 0x0b, 0x04, 0x0d, 0x06, 0x0b, 0x40, 0xd4,
- 0x18, 0xe0, 0x6d, 0xeb, 0xf8, 0xe0, 0x78, 0x89, 0xf3, 0x07, 0x60, 0x4f,
- 0x41, 0xe0, 0x26, 0x3a, 0x69, 0xf4, 0xe0, 0x7a, 0x85, 0xeb, 0x60, 0x65,
- 0x8b, 0xce, 0xf7, 0xe9, 0x02, 0x84, 0x73, 0xf4, 0xd7, 0x42, 0xe7, 0xe0,
- 0x6b, 0x8c, 0xe7, 0x05, 0x06, 0xe0, 0x7b, 0x82, 0x61, 0x6e, 0xe9, 0xe0,
- 0x6f, 0xa2, 0xae, 0x21, 0x06, 0x0a, 0x18, 0x09, 0x0c, 0x17, 0x0e, 0x0b,
- 0x09, 0x11, 0x0d, 0x4a, 0x45, 0x1f, 0x2b, 0x60, 0x44, 0x87, 0x2d, 0x40,
- 0x53, 0x4a, 0x5f, 0x03, 0x12, 0x27, 0x40, 0x73, 0x59, 0x32, 0xc4, 0x56,
- 0xf9, 0x60, 0x79, 0xe3, 0xc1, 0x5b, 0xf5, 0x60, 0x78, 0xe6, 0x0d, 0x2f,
- 0x40, 0x90, 0xc1, 0xa6, 0xf3, 0x60, 0x6f, 0x6c, 0x41, 0x8a, 0x46, 0x9d,
- 0x41, 0x2c, 0x1d, 0x0a, 0x1a, 0x03, 0x15, 0x40, 0x79, 0x17, 0x1c, 0x0f,
- 0x40, 0x42, 0xc1, 0x39, 0xf2, 0x60, 0x78, 0xc7, 0x07, 0x40, 0xde, 0xc1,
- 0x03, 0xee, 0x60, 0x78, 0xbb, 0x40, 0x5a, 0x40, 0x72, 0x40, 0x4e, 0xc1,
- 0x58, 0xed, 0x60, 0x73, 0xa0, 0x43, 0xc6, 0x41, 0x49, 0x03, 0x07, 0x03,
- 0x17, 0x18, 0x40, 0x79, 0x17, 0x1c, 0x0f, 0x40, 0x42, 0x3a, 0xc0, 0xff,
- 0xeb, 0x60, 0x78, 0x98, 0x03, 0x1e, 0x1b, 0x1e, 0x40, 0x7c, 0x40, 0x63,
- 0xc1, 0x39, 0xe9, 0x60, 0x5a, 0xb5, 0x5d, 0xdf, 0x17, 0x03, 0x40, 0xf6,
- 0x9f, 0xe8, 0x60, 0x78, 0x8c, 0x40, 0xa8, 0x40, 0x84, 0xba, 0xe7, 0x60,
- 0x78, 0x59, 0x40, 0x41, 0x18, 0x1e, 0x40, 0x5b, 0x21, 0x21, 0x23, 0x1f,
- 0x3a, 0xc0, 0xff, 0xe3, 0x60, 0x77, 0x1c, 0x41, 0x4c, 0x39, 0x1e, 0x40,
- 0x8e, 0x40, 0x51, 0xba, 0xe2, 0x60, 0x70, 0x72, 0x47, 0xc9, 0x1d, 0x03,
- 0x07, 0x17, 0x12, 0x27, 0x40, 0x5b, 0x17, 0x1c, 0x32, 0x9f, 0xe1, 0x06,
- 0x60, 0x5e, 0x35, 0xd3, 0xb2, 0x6e, 0x67, 0xe5, 0x04, 0xe0, 0x7a, 0xac,
- 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0xf4, 0xe0, 0x66, 0x5f, 0xae, 0x15,
- 0x05, 0x4a, 0xc7, 0x60, 0x27, 0xc0, 0x4d, 0x61, 0x4f, 0xde, 0x59, 0x09,
- 0x4d, 0xd1, 0x41, 0x8a, 0x40, 0x43, 0xc0, 0x6f, 0xf4, 0x60, 0x77, 0xfb,
- 0x9d, 0xed, 0xe0, 0x79, 0x86, 0xf0, 0x04, 0x11, 0x0b, 0xa8, 0xf0, 0x04,
- 0xe0, 0x73, 0x5d, 0x65, 0xe7, 0x04, 0xe0, 0x73, 0xd3, 0x1f, 0x43, 0xe5,
- 0xe0, 0x76, 0x4d, 0xef, 0x02, 0x84, 0xec, 0xe0, 0x3f, 0x00, 0xe3, 0xe0,
- 0x3f, 0xd8, 0xe5, 0x02, 0x88, 0x72, 0x61, 0x75, 0x6e, 0xe9, 0xe0, 0x72,
- 0xae, 0xee, 0x05, 0x09, 0xe0, 0x7a, 0x48, 0x73, 0x6f, 0x63, 0x69, 0x61,
- 0xec, 0xe0, 0x63, 0x19, 0x63, 0x72, 0x61, 0x66, 0x74, 0x2e, 0x68, 0x6f,
- 0x73, 0x74, 0xe9, 0xe0, 0x66, 0x2e, 0x61, 0xec, 0xe0, 0x41, 0x51, 0xef,
- 0x0a, 0x06, 0x04, 0x05, 0x60, 0x3c, 0xf0, 0xe0, 0x3b, 0xa0, 0x73, 0x68,
- 0xe9, 0xe0, 0x32, 0x6c, 0xf0, 0xe0, 0x5e, 0x82, 0x6b, 0xf5, 0xe0, 0x25,
- 0xdf, 0x67, 0xf5, 0xe0, 0x5c, 0x87, 0xee, 0x16, 0x03, 0x09, 0x0a, 0x09,
- 0x18, 0x10, 0x06, 0x09, 0x16, 0x0e, 0x08, 0x10, 0x60, 0x2a, 0x56, 0x60,
- 0x42, 0x85, 0x4a, 0xe9, 0xad, 0xfa, 0xc0, 0x7d, 0x74, 0x68, 0x65, 0x77,
- 0x69, 0xe6, 0xe0, 0x70, 0x12, 0x72, 0xe5, 0x04, 0xe0, 0x70, 0x14, 0xe4,
- 0xe0, 0x35, 0x8e, 0x70, 0x6f, 0x72, 0x74, 0x65, 0xf2, 0xe0, 0x53, 0xbd,
- 0xef, 0x05, 0x04, 0xe0, 0x5e, 0x6b, 0xed, 0xe0, 0x39, 0x46, 0xae, 0x04,
- 0xe0, 0x74, 0xf9, 0x66, 0x75, 0x6b, 0xf5, 0x60, 0x74, 0x66, 0xc3, 0x5a,
- 0xec, 0x04, 0xe0, 0x79, 0xc3, 0x69, 0x6e, 0xe5, 0x04, 0xe0, 0x79, 0xbc,
- 0xae, 0xe0, 0x34, 0x2f, 0x6a, 0x75, 0xeb, 0xe0, 0x42, 0x0d, 0xe7, 0x60,
- 0x3a, 0x65, 0x60, 0x3d, 0xf1, 0xc1, 0x5b, 0xe6, 0x02, 0x8b, 0x6c, 0x61,
- 0x73, 0x68, 0x64, 0x72, 0x69, 0xf6, 0xe0, 0x64, 0x19, 0x61, 0x62, 0x72,
- 0x69, 0xe3, 0xe0, 0x44, 0x4c, 0x64, 0x69, 0x67, 0x69, 0x74, 0x61, 0x6c,
- 0x6f, 0x63, 0x65, 0xe1, 0xe0, 0x78, 0x11, 0x63, 0x69, 0x6c, 0x6c, 0xe1,
- 0xe0, 0x60, 0xb9, 0xe1, 0x02, 0x89, 0x76, 0x73, 0x74, 0x61, 0x63, 0xeb,
- 0xe0, 0x79, 0x50, 0xe7, 0xe0, 0x41, 0xf0, 0xad, 0x07, 0x0a, 0x11, 0x06,
- 0xe0, 0x78, 0xaf, 0x74, 0x68, 0x65, 0x2d, 0x77, 0x65, 0xe2, 0xe0, 0x67,
- 0x31, 0xf2, 0x02, 0x85, 0x69, 0xef, 0xe0, 0x6a, 0xe9, 0x61, 0x6e, 0x63,
- 0x68, 0x65, 0xf2, 0xe0, 0x69, 0x7a, 0x6b, 0x33, 0xf3, 0xe0, 0x6a, 0xda,
- 0xe1, 0x02, 0x88, 0x70, 0x74, 0x69, 0x62, 0xec, 0xe0, 0x71, 0x91, 0x63,
- 0x6f, 0x72, 0xee, 0xe0, 0x6a, 0xc8, 0xed, 0x0a, 0x06, 0x05, 0x05, 0x21,
- 0x06, 0x07, 0xe0, 0x78, 0xe9, 0xf5, 0x55, 0xe4, 0xe0, 0x23, 0xf5, 0x6f,
- 0x74, 0xe5, 0xca, 0x52, 0x6e, 0x69, 0xf7, 0xd1, 0xe4, 0xe9, 0x08, 0x06,
- 0x0b, 0x60, 0x39, 0x19, 0xc9, 0x07, 0x74, 0x61, 0xed, 0xe0, 0x35, 0xb5,
- 0x68, 0x61, 0x63, 0x68, 0x69, 0x6d, 0x61, 0xee, 0xe0, 0x73, 0xae, 0x2e,
- 0xee, 0x60, 0x74, 0xb3, 0xc1, 0x36, 0x67, 0x2e, 0xec, 0xe0, 0x54, 0x0b,
- 0xe5, 0x60, 0x2e, 0x1a, 0xe0, 0x47, 0x8e, 0xe1, 0x05, 0x03, 0xe0, 0x51,
- 0x8b, 0xe5, 0xd5, 0x95, 0x63, 0x68, 0x69, 0xae, 0x60, 0x6e, 0x3d, 0xc7,
- 0x8c, 0xec, 0x09, 0x06, 0x04, 0x05, 0x05, 0x0d, 0xe0, 0x77, 0x17, 0x73,
- 0x7a, 0xf4, 0xe0, 0x5c, 0x5b, 0xec, 0xe0, 0x77, 0x3b, 0x6b, 0xf5, 0xe0,
- 0x26, 0x00, 0x65, 0xe3, 0xe0, 0x20, 0x9d, 0x62, 0x69, 0xe1, 0x02, 0x81,
- 0x2d, 0x74, 0x65, 0x6d, 0xf0, 0xe0, 0x60, 0x61, 0xe1, 0x04, 0xe0, 0x66,
- 0x25, 0x79, 0x61, 0xee, 0x5d, 0x80, 0xe0, 0x5b, 0x24, 0xeb, 0x0c, 0x0f,
- 0x18, 0x0b, 0x45, 0xa3, 0x60, 0x3e, 0x8b, 0xe0, 0x2e, 0x8d, 0xf5, 0x04,
- 0x04, 0xdf, 0x25, 0xf4, 0xe0, 0x36, 0x5d, 0x69, 0x7a, 0xf5, 0xe0, 0x36,
- 0x88, 0xe9, 0x04, 0xe0, 0x61, 0x6b, 0xee, 0x02, 0x83, 0xef, 0xc5, 0xc8,
- 0x61, 0x77, 0xe1, 0x04, 0xe0, 0x78, 0x71, 0xae, 0x60, 0x73, 0xd9, 0xc2,
- 0xec, 0xe5, 0x06, 0x60, 0x20, 0x7f, 0xda, 0xbb, 0x67, 0xe1, 0xc9, 0xd7,
- 0xe1, 0x04, 0x05, 0x0e, 0x88, 0x7a, 0xe1, 0xe0, 0x2a, 0x81, 0x79, 0xe1,
- 0x04, 0xe0, 0x75, 0x3c, 0x6d, 0x61, 0xae, 0x60, 0x72, 0x8e, 0xc4, 0x14,
- 0x77, 0x61, 0xae, 0x60, 0x6c, 0xb7, 0xc5, 0x8d, 0xe7, 0xd0, 0x14, 0x6a,
- 0xe9, 0x04, 0xe0, 0x6f, 0xdc, 0xf9, 0xe0, 0x29, 0xb7, 0xe9, 0x08, 0x04,
- 0x08, 0x0b, 0x0c, 0xe0, 0x73, 0x44, 0x7a, 0xf5, 0xd1, 0xb1, 0x74, 0x61,
- 0xae, 0x60, 0x66, 0x47, 0xd0, 0x31, 0xf3, 0x04, 0xe0, 0x39, 0x07, 0x68,
- 0x69, 0xe4, 0xe0, 0x40, 0xe0, 0xf2, 0x02, 0x84, 0xed, 0xe0, 0x3a, 0xe5,
- 0x61, 0xf3, 0xe0, 0x3c, 0xd5, 0xe1, 0xe0, 0x3a, 0xdc, 0xe8, 0x0a, 0x05,
- 0x06, 0x0e, 0x60, 0x38, 0x4a, 0xe0, 0x39, 0xf0, 0x74, 0x61, 0xf7, 0xc8,
- 0xac, 0x6b, 0x75, 0xf2, 0xe0, 0x40, 0xba, 0xe9, 0x04, 0xe0, 0x4d, 0x6c,
- 0x72, 0x61, 0xae, 0x60, 0x40, 0x69, 0xe0, 0x2b, 0xf8, 0x61, 0xf2, 0xe0,
- 0x5c, 0x16, 0xe7, 0x08, 0x10, 0x0b, 0x07, 0x1f, 0xe0, 0x52, 0x3e, 0xf5,
- 0x02, 0x88, 0x6e, 0x69, 0xae, 0x60, 0x6c, 0xa2, 0xc3, 0xd7, 0x63, 0xe8,
- 0xe0, 0x72, 0x7a, 0xef, 0x02, 0x84, 0xf3, 0xe0, 0x23, 0x29, 0xf2, 0xe0,
- 0x2f, 0x02, 0xe9, 0x60, 0x39, 0x81, 0xe0, 0x33, 0x94, 0xe1, 0x0a, 0x0a,
- 0x06, 0x60, 0x38, 0x93, 0x48, 0x6f, 0xd2, 0x8d, 0x77, 0xe1, 0x04, 0xe0,
- 0x2f, 0x09, 0xf2, 0xe0, 0x40, 0x1f, 0x73, 0x61, 0xf7, 0xe0, 0x34, 0xb3,
- 0xeb, 0xe0, 0x6e, 0xb9, 0xae, 0x60, 0x4c, 0xd4, 0xe0, 0x28, 0xb9, 0xe6,
- 0x03, 0x08, 0xaa, 0x75, 0x6e, 0x61, 0x74, 0xef, 0xe0, 0x41, 0x35, 0xe6,
- 0x02, 0xa3, 0x69, 0xe3, 0x02, 0x91, 0x69, 0x61, 0x6c, 0xae, 0x04, 0xe0,
- 0x66, 0x9a, 0x61, 0x63, 0x61, 0x64, 0x65, 0xed, 0xe0, 0x65, 0xf8, 0xe5,
- 0x04, 0xe0, 0x77, 0x60, 0x2d, 0x6f, 0x6e, 0x2d, 0x74, 0xe8, 0xe0, 0x73,
- 0xea, 0xae, 0xe0, 0x5b, 0xc1, 0xae, 0x05, 0x04, 0xe0, 0x75, 0xb5, 0xea,
- 0xe0, 0x76, 0xe7, 0xe2, 0xe0, 0x75, 0x11, 0xe4, 0x09, 0x0a, 0x60, 0x52,
- 0xb5, 0x49, 0x74, 0xce, 0x9c, 0x65, 0xf3, 0x04, 0xe0, 0x54, 0xc9, 0xf3,
- 0xe0, 0x54, 0xc8, 0xe1, 0x02, 0x84, 0xf7, 0xe0, 0x29, 0xac, 0xf4, 0xe0,
- 0x3c, 0x20, 0xe3, 0x05, 0x02, 0x02, 0x0d, 0x84, 0xf3, 0x84, 0xf0, 0x82,
- 0x69, 0x2e, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0xf2, 0xe0, 0x53,
- 0xe1, 0xe8, 0xe0, 0x3e, 0x1f, 0x65, 0x6c, 0x6f, 0xf4, 0xe0, 0x5e, 0x40,
- 0xe2, 0x05, 0x08, 0x06, 0x04, 0x8c, 0xf5, 0x04, 0xe0, 0x71, 0xb0, 0xf3,
- 0xde, 0x2f, 0x73, 0x65, 0xf2, 0xe0, 0x4f, 0xe0, 0xee, 0xe0, 0x70, 0xaf,
- 0xe9, 0x06, 0x60, 0x75, 0x02, 0xc1, 0xe3, 0x68, 0xe9, 0xe0, 0x6b, 0x46,
- 0xe1, 0x02, 0x85, 0x6e, 0x61, 0xfa, 0xd4, 0xa8, 0x6d, 0x61, 0xae, 0x60,
- 0x4c, 0x5a, 0xcf, 0x23, 0xe1, 0x02, 0x85, 0x72, 0xe1, 0xe0, 0x5b, 0x59,
- 0x6d, 0x69, 0x73, 0x68, 0x69, 0x72, 0x61, 0x73, 0x61, 0xf4, 0xe0, 0x74,
- 0xdf, 0x30, 0x6f, 0xb0, 0xe0, 0x75, 0xbd, 0xee, 0x21, 0x18, 0x0b, 0x2b,
- 0x1a, 0x1a, 0x14, 0x08, 0x42, 0xb6, 0x04, 0x1b, 0x09, 0x41, 0x4b, 0x1c,
- 0x3a, 0x11, 0x41, 0xab, 0x0b, 0x05, 0x42, 0x74, 0x57, 0xb6, 0x57, 0x1a,
- 0x54, 0x60, 0x50, 0x21, 0xa6, 0x1f, 0xc3, 0x06, 0x05, 0x05, 0xe0, 0x67,
- 0x35, 0x78, 0x74, 0x74, 0xe5, 0x82, 0x66, 0xf2, 0xe0, 0x6d, 0xe1, 0x65,
- 0x1f, 0x43, 0xe5, 0xc9, 0x3b, 0xfa, 0x04, 0xe0, 0x76, 0x76, 0xae, 0x60,
- 0x69, 0xa1, 0xc6, 0x76, 0xf9, 0x09, 0x07, 0x04, 0x0a, 0x56, 0x34, 0xe0,
- 0x5a, 0x78, 0x75, 0x7a, 0x65, 0xee, 0xe0, 0x3f, 0x63, 0xf3, 0xe0, 0x67,
- 0x7a, 0xe3, 0x04, 0xe0, 0x76, 0x56, 0x2e, 0xed, 0xe0, 0x62, 0x0e, 0xe1,
- 0x02, 0x86, 0xee, 0x44, 0x2f, 0xe0, 0x70, 0xd9, 0xe1, 0xc6, 0x67, 0xf5,
- 0x07, 0x04, 0x52, 0x8a, 0xe0, 0x63, 0xaf, 0xef, 0xe0, 0x5d, 0x07, 0x6d,
- 0xe1, 0x04, 0xe0, 0x20, 0x9c, 0x74, 0x61, 0xae, 0x60, 0x6d, 0x65, 0xc7,
- 0x17, 0xf4, 0x06, 0x04, 0x06, 0xe0, 0x74, 0x5c, 0xf2, 0xe0, 0x74, 0xc8,
- 0x64, 0x6c, 0x6c, 0xae, 0xc0, 0x6d, 0xae, 0x60, 0x72, 0xfc, 0x04, 0x41,
- 0x71, 0x14, 0x88, 0xf3, 0x07, 0x04, 0x60, 0x5c, 0x43, 0xd8, 0x19, 0xf7,
- 0xe0, 0x72, 0xe8, 0x75, 0x70, 0x64, 0x61, 0xf4, 0xe0, 0x65, 0xcd, 0xf2,
- 0x60, 0x73, 0x8c, 0x40, 0xc9, 0xc1, 0xa7, 0xef, 0x17, 0x0c, 0x26, 0x0c,
- 0x41, 0x1c, 0x14, 0x40, 0x56, 0x09, 0x08, 0x40, 0x4b, 0x04, 0x08, 0x11,
- 0x08, 0x29, 0x14, 0x08, 0xe0, 0x73, 0x53, 0x7a, 0x61, 0x77, 0x61, 0x6f,
- 0x6e, 0x73, 0x65, 0xee, 0xe0, 0x72, 0xc0, 0xf7, 0x0a, 0x05, 0x07, 0x60,
- 0x4d, 0x07, 0x57, 0x72, 0xd1, 0x41, 0x72, 0xf5, 0xe0, 0x73, 0x51, 0x61,
- 0x72, 0x75, 0xe4, 0xe0, 0x66, 0xd9, 0x2d, 0x64, 0x6e, 0x73, 0xae, 0x06,
- 0x60, 0x72, 0xe0, 0xc2, 0xac, 0xf4, 0xe0, 0x65, 0x30, 0xf6, 0x06, 0x52,
- 0xc3, 0xe0, 0x5f, 0x40, 0x65, 0x63, 0xef, 0xce, 0x6b, 0xf4, 0x09, 0x06,
- 0x0f, 0x15, 0x40, 0xe1, 0xe0, 0x73, 0x2f, 0x74, 0x65, 0xf2, 0xe0, 0x69,
- 0xe2, 0xef, 0x05, 0x05, 0xe0, 0x6d, 0x53, 0x67, 0x61, 0xf7, 0xdc, 0xd9,
- 0xe4, 0xe0, 0x36, 0x0e, 0x69, 0xe3, 0x02, 0x86, 0x69, 0x61, 0xf3, 0xe0,
- 0x72, 0xc1, 0x65, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x6e, 0xe5, 0xe0, 0x57,
- 0xc7, 0x65, 0x62, 0x6f, 0x6f, 0xeb, 0x03, 0xc0, 0x9f, 0xae, 0x07, 0x0b,
- 0x05, 0x06, 0x04, 0x20, 0xaa, 0x75, 0x73, 0xad, 0x04, 0x40, 0xa2, 0x8f,
- 0x77, 0xe5, 0xc0, 0xb1, 0x73, 0x61, 0xad, 0xc0, 0xa4, 0x6d, 0x65, 0xad,
- 0x40, 0x48, 0xb6, 0x69, 0xec, 0xc0, 0x42, 0x65, 0x75, 0xad, 0x04, 0x04,
- 0x07, 0x85, 0x77, 0xe5, 0xc0, 0x64, 0x73, 0x6f, 0x75, 0x74, 0xe8, 0xc0,
- 0x92, 0x6e, 0x6f, 0xf2, 0xc0, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61,
- 0xec, 0xc0, 0x84, 0xe3, 0x02, 0x9c, 0x6e, 0x2d, 0x6e, 0x6f, 0x72, 0x74,
- 0xe8, 0x02, 0x84, 0x77, 0x65, 0x73, 0x74, 0x2d, 0x31, 0x2e, 0x73, 0x61,
- 0x67, 0x65, 0x6d, 0x61, 0x6b, 0x65, 0xf2, 0xe0, 0x56, 0x76, 0x61, 0x2d,
- 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0xec, 0xc0, 0x54, 0xe1, 0x02, 0xa8,
- 0x70, 0xad, 0x03, 0x14, 0xb2, 0x73, 0x6f, 0x75, 0x74, 0xe8, 0x03, 0xc0,
- 0x48, 0x65, 0x61, 0x73, 0x74, 0xad, 0x04, 0x10, 0x32, 0x82, 0xb4, 0xc0,
- 0x44, 0x6e, 0x6f, 0x72, 0x74, 0x68, 0x65, 0x61, 0x73, 0x74, 0xad, 0x03,
- 0x32, 0x82, 0xb3, 0xb4, 0x66, 0x2d, 0x73, 0x6f, 0x75, 0x74, 0xe8, 0xa0,
- 0x2d, 0x66, 0x69, 0x70, 0x73, 0x2e, 0x75, 0x73, 0xad, 0x03, 0x06, 0x8f,
- 0x77, 0x65, 0x73, 0x74, 0xad, 0x97, 0x67, 0x6f, 0x76, 0xad, 0x02, 0x83,
- 0x77, 0xe5, 0x83, 0x65, 0x61, 0x73, 0x74, 0xad, 0x8a, 0x65, 0x61, 0x73,
- 0x74, 0xad, 0x02, 0x82, 0xb2, 0x82, 0x31, 0x2e, 0x73, 0x61, 0x67, 0x65,
- 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x2e, 0xe1, 0xe0, 0x56, 0xe6, 0x61, 0x69,
- 0x72, 0x65, 0xf3, 0xd0, 0x5a, 0xf3, 0x02, 0x86, 0x68, 0x69, 0xf2, 0xe0,
- 0x3d, 0xda, 0xe5, 0x04, 0xe0, 0x72, 0xa0, 0x67, 0x61, 0xf7, 0xe0, 0x2c,
- 0xe5, 0xf2, 0x03, 0x12, 0x89, 0xf4, 0x04, 0xe0, 0x6d, 0x08, 0xe8, 0x04,
- 0xe0, 0x4a, 0x39, 0x66, 0x6c, 0x61, 0x6e, 0xeb, 0xe0, 0x62, 0xaf, 0x65,
- 0x2d, 0x6f, 0x67, 0x2d, 0xf5, 0xe0, 0x6d, 0x36, 0xe4, 0x07, 0x0c, 0x04,
- 0x0c, 0xe0, 0x6d, 0x10, 0x72, 0xe5, 0x02, 0x84, 0xe9, 0xe0, 0x3c, 0x0b,
- 0xad, 0xe0, 0x67, 0x88, 0x6b, 0xe1, 0xdc, 0x1f, 0x65, 0x73, 0x74, 0x65,
- 0x2d, 0x69, 0x64, 0x63, 0xae, 0xe0, 0x24, 0x03, 0xad, 0x03, 0x04, 0x86,
- 0xef, 0xe0, 0x6d, 0x0b, 0x66, 0x72, 0xef, 0xe0, 0x6d, 0xec, 0x61, 0xf5,
- 0xe0, 0x46, 0x28, 0xef, 0x04, 0xe0, 0x61, 0x1e, 0xf0, 0xe0, 0x72, 0x9d,
- 0x6e, 0x6f, 0x69, 0x63, 0xe8, 0xe0, 0x34, 0xa8, 0xed, 0x06, 0x0a, 0x05,
- 0xe0, 0x34, 0x8f, 0x65, 0xae, 0x04, 0xe0, 0x29, 0xc1, 0xe3, 0xe0, 0x70,
- 0x3e, 0x62, 0xf2, 0xe0, 0x4e, 0x3e, 0xae, 0x13, 0x04, 0x05, 0x07, 0x06,
- 0x05, 0x59, 0xd2, 0x60, 0x4d, 0xfa, 0x1a, 0x13, 0x40, 0xdd, 0x40, 0x79,
- 0xc6, 0x02, 0xf4, 0xe0, 0x71, 0x8b, 0xf2, 0x60, 0x72, 0x4e, 0x8f, 0xf0,
- 0x60, 0x71, 0x85, 0x40, 0xa8, 0xab, 0xee, 0x60, 0x67, 0xea, 0xc9, 0xca,
- 0x62, 0xf2, 0xe0, 0x62, 0x63, 0xe1, 0x60, 0x71, 0x76, 0xc2, 0x4b, 0xeb,
- 0xe0, 0x68, 0x17, 0x69, 0x70, 0xae, 0x60, 0x55, 0x9d, 0xc8, 0x15, 0xe8,
- 0x02, 0x89, 0xef, 0x03, 0xdc, 0xa6, 0x73, 0xf4, 0xe0, 0x5d, 0xa3, 0x65,
- 0xea, 0xe0, 0x33, 0x49, 0xe7, 0x47, 0xc2, 0x60, 0x25, 0x38, 0xc7, 0x57,
- 0xe4, 0x02, 0x9e, 0xe5, 0x02, 0x8c, 0x73, 0x2e, 0x6b, 0x38, 0x73, 0xae,
- 0x60, 0x21, 0x67, 0x08, 0xde, 0xa2, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63,
- 0x65, 0x72, 0x2e, 0x6c, 0x69, 0xee, 0xe0, 0x5c, 0xc9, 0x61, 0xae, 0x60,
- 0x3d, 0x2b, 0xe0, 0x34, 0x6d, 0xe2, 0x03, 0x06, 0x86, 0x75, 0x73, 0xe8,
- 0xe0, 0x4e, 0x50, 0x6f, 0x72, 0xe9, 0xe0, 0x6e, 0xa9, 0x65, 0xef, 0xc9,
- 0xb9, 0xae, 0x60, 0x6c, 0xfc, 0x44, 0x5c, 0xc1, 0xfb, 0x2d, 0x69, 0x70,
- 0xae, 0x0a, 0x60, 0x63, 0x14, 0x4d, 0x0c, 0x40, 0x56, 0xc2, 0xac, 0xe3,
- 0x60, 0x62, 0xf9, 0xcc, 0xfb, 0xed, 0xe0, 0x31, 0x87, 0xec, 0x05, 0x0d,
- 0xe0, 0x73, 0x28, 0xae, 0x06, 0x60, 0x6c, 0xd0, 0xc4, 0xca, 0xe3, 0x60,
- 0x71, 0x86, 0xc1, 0x4f, 0x2d, 0x61, 0x6d, 0x73, 0xad, 0xe0, 0x3e, 0xb8,
- 0xea, 0x04, 0xe0, 0x6d, 0x76, 0xf3, 0xe0, 0x66, 0xb5, 0xe9, 0x0f, 0x09,
- 0x0d, 0x40, 0x96, 0x07, 0x1a, 0x25, 0x1f, 0x0e, 0x60, 0x68, 0x42, 0xc9,
- 0xa6, 0x79, 0x6f, 0x64, 0x6f, 0x67, 0x61, 0xf7, 0xc9, 0x0f, 0xf4, 0x02,
- 0x84, 0xf4, 0xe0, 0x4a, 0xa7, 0x65, 0x72, 0xef, 0xe0, 0x6a, 0xb7, 0xf3,
- 0x05, 0x11, 0xe0, 0x6e, 0x67, 0xf3, 0x05, 0x05, 0xe0, 0x4a, 0x8d, 0x68,
- 0xe9, 0xe0, 0x31, 0xb6, 0xe1, 0x60, 0x70, 0xa8, 0xc0, 0xfd, 0x68, 0xe9,
- 0x0c, 0x04, 0x05, 0x0c, 0x19, 0x04, 0x10, 0x03, 0x0a, 0x1c, 0xc3, 0x95,
- 0xf7, 0xe0, 0x6b, 0x85, 0x74, 0x6f, 0xf3, 0xc8, 0xd4, 0xef, 0x04, 0xe0,
- 0x6d, 0x75, 0x6b, 0x6f, 0x70, 0xf0, 0xe0, 0x56, 0xe9, 0x6e, 0xef, 0x03,
- 0x07, 0x87, 0x73, 0x68, 0x69, 0xed, 0xe0, 0x33, 0x1a, 0x6f, 0x6d, 0x6f,
- 0xf4, 0xe0, 0x6c, 0x5b, 0x6d, 0x69, 0xf9, 0xe0, 0x32, 0x63, 0x6d, 0xe5,
- 0xda, 0xdf, 0x6b, 0xe1, 0x03, 0xd0, 0x64, 0xf4, 0x04, 0xe0, 0x67, 0x0a,
- 0x73, 0x75, 0xf2, 0xe0, 0x3b, 0xcd, 0xe9, 0xdc, 0xf2, 0x68, 0x61, 0x72,
- 0x61, 0xae, 0x60, 0x6b, 0x30, 0xc2, 0xbb, 0xe1, 0x04, 0x05, 0x08, 0x85,
- 0x7a, 0xe1, 0xe0, 0x30, 0x30, 0x77, 0x61, 0x6b, 0x75, 0xf2, 0xe0, 0x6c,
- 0xad, 0x72, 0xe9, 0xe0, 0x67, 0xb6, 0x69, 0xfa, 0xe0, 0x6c, 0xe4, 0xae,
- 0x60, 0x66, 0xd2, 0xc9, 0xba, 0x72, 0x61, 0x73, 0xe1, 0xe0, 0x3c, 0x06,
- 0xee, 0x03, 0x0b, 0x84, 0xef, 0x04, 0xe0, 0x2b, 0x8d, 0x6d, 0x69, 0xf9,
- 0xe0, 0x6d, 0x84, 0xea, 0xe0, 0x70, 0x9d, 0xe8, 0x60, 0x2e, 0x66, 0xe0,
- 0x31, 0x15, 0xeb, 0x07, 0x0b, 0x04, 0x09, 0xe0, 0x70, 0x9e, 0xef, 0x04,
- 0xe0, 0x70, 0xf3, 0x6c, 0x61, 0xe5, 0xe0, 0x57, 0x19, 0xeb, 0xe0, 0x61,
- 0x1e, 0xe9, 0x04, 0xe0, 0x70, 0x69, 0xf4, 0xe0, 0x62, 0x6c, 0x61, 0xe8,
- 0xe0, 0x3b, 0x75, 0xe9, 0x05, 0x04, 0x04, 0x04, 0x83, 0xfa, 0xe0, 0x3b,
- 0x32, 0xed, 0xe0, 0x66, 0xc1, 0x6b, 0xe1, 0xd6, 0xf1, 0xe8, 0xce, 0xbc,
- 0x67, 0x61, 0x74, 0x61, 0xae, 0x60, 0x6d, 0xb2, 0xc2, 0x9e, 0x65, 0x72,
- 0x75, 0x63, 0x68, 0x6f, 0x6d, 0x6f, 0x73, 0x63, 0xe9, 0xe0, 0x6d, 0x30,
- 0xe3, 0x05, 0x0b, 0xe0, 0x70, 0x4c, 0x68, 0x69, 0x6e, 0x61, 0x6e, 0xae,
- 0x60, 0x55, 0xf7, 0xcd, 0xb6, 0xae, 0x06, 0x60, 0x6d, 0x5e, 0xc3, 0x37,
- 0xf4, 0xe0, 0x6f, 0x8f, 0xe8, 0x08, 0x06, 0x05, 0x60, 0x6c, 0x13, 0xc3,
- 0x3f, 0x73, 0x2e, 0xf5, 0xe0, 0x6f, 0x5a, 0x6c, 0xe6, 0xe0, 0x4c, 0xa9,
- 0x2d, 0x73, 0x65, 0x72, 0xf6, 0xe0, 0x6e, 0x61, 0xe7, 0x08, 0x1c, 0x10,
- 0x60, 0x57, 0x44, 0xda, 0x37, 0x72, 0x6f, 0xeb, 0x02, 0x8f, 0xae, 0x08,
- 0x60, 0x63, 0xfe, 0x4c, 0x26, 0xc0, 0x6e, 0x70, 0x69, 0xfa, 0xe0, 0x5d,
- 0xaa, 0x2d, 0x66, 0x72, 0x65, 0xe5, 0xe0, 0x4b, 0xb4, 0xef, 0x04, 0xe0,
- 0x71, 0x86, 0xae, 0x60, 0x2b, 0x2d, 0x60, 0x32, 0x49, 0x48, 0x3d, 0xc7,
- 0x60, 0x68, 0xe5, 0xe0, 0x62, 0x74, 0xe6, 0x07, 0x03, 0x60, 0x6f, 0xc2,
- 0xc1, 0xa9, 0xf3, 0xc5, 0x6d, 0xec, 0x60, 0x51, 0x93, 0xdf, 0xd7, 0xe5,
- 0x12, 0x05, 0x11, 0x07, 0x06, 0x41, 0x0c, 0x2d, 0x0f, 0x05, 0x06, 0x08,
- 0x08, 0x60, 0x63, 0xe9, 0xcb, 0xe3, 0x79, 0xe1, 0xe0, 0x2e, 0xcf, 0xf8,
- 0x04, 0xe0, 0x6c, 0x44, 0xf4, 0x04, 0xe0, 0x71, 0x43, 0x64, 0x69, 0x72,
- 0xe5, 0xe0, 0x4f, 0xb5, 0xf7, 0x60, 0x38, 0xdf, 0xe0, 0x38, 0x5c, 0x75,
- 0x73, 0xf4, 0xe0, 0x5f, 0x21, 0xf4, 0x0d, 0x06, 0x07, 0x08, 0x06, 0x40,
- 0xdb, 0x60, 0x4f, 0x2c, 0xe0, 0x20, 0xff, 0x77, 0x6f, 0xf2, 0xe0, 0x6e,
- 0xb8, 0x6c, 0x69, 0x66, 0xf9, 0xe0, 0x6f, 0xa1, 0x67, 0x61, 0x6d, 0x65,
- 0xf2, 0xe0, 0x55, 0x6e, 0x66, 0x6c, 0xe9, 0xe0, 0x69, 0x87, 0xae, 0x1f,
- 0x08, 0x0c, 0x12, 0x0e, 0x0c, 0x14, 0x0b, 0x05, 0x0c, 0x0e, 0x05, 0x0a,
- 0x0c, 0x10, 0x4a, 0x1f, 0x60, 0x3a, 0x26, 0x40, 0x6f, 0x2a, 0x29, 0x4a,
- 0x5c, 0x03, 0x03, 0x39, 0xd9, 0xa5, 0xf5, 0x60, 0x6e, 0x72, 0x0d, 0x2f,
- 0xc0, 0x90, 0xf4, 0x60, 0x6e, 0x4d, 0x20, 0x1e, 0x12, 0x40, 0x82, 0x33,
- 0x32, 0x9f, 0xf3, 0x60, 0x64, 0xee, 0x41, 0x8a, 0x47, 0xc9, 0x27, 0x1a,
- 0x03, 0x15, 0x40, 0x79, 0x17, 0x1c, 0xc1, 0x8a, 0xf0, 0x60, 0x6e, 0x2f,
- 0x27, 0x03, 0x17, 0x18, 0x40, 0x79, 0x17, 0x2b, 0x23, 0x9f, 0xee, 0x60,
- 0x65, 0xc8, 0x48, 0x76, 0x40, 0x5a, 0x40, 0xc0, 0xc1, 0x58, 0xed, 0x60,
- 0x69, 0x23, 0x43, 0xc6, 0x41, 0x49, 0x03, 0x07, 0x03, 0x17, 0x18, 0x40,
- 0x79, 0x17, 0x1c, 0x0f, 0xc0, 0x7c, 0xeb, 0x60, 0x6e, 0x1e, 0x03, 0x39,
- 0x1e, 0x40, 0xdf, 0xc1, 0x39, 0xea, 0x60, 0x6e, 0xfb, 0x8f, 0xe9, 0x60,
- 0x50, 0x39, 0x5d, 0xdf, 0x17, 0x03, 0x03, 0x40, 0xf3, 0x9f, 0xe7, 0x60,
- 0x6e, 0x26, 0x18, 0x40, 0x79, 0x21, 0x21, 0x23, 0x1f, 0x3a, 0xc0, 0xff,
- 0xe6, 0x60, 0x6e, 0x15, 0x92, 0xe5, 0x60, 0x64, 0x7f, 0x45, 0x86, 0x44,
- 0x9f, 0xc1, 0xbd, 0xe3, 0x60, 0x6d, 0xe8, 0x1e, 0x1b, 0x1e, 0x40, 0x8e,
- 0x40, 0x51, 0xba, 0xe2, 0x60, 0x65, 0xf3, 0x47, 0xc9, 0x1d, 0x0a, 0x17,
- 0x12, 0x40, 0x82, 0x17, 0x1c, 0x32, 0x9f, 0xe1, 0x60, 0x64, 0x59, 0x40,
- 0xfa, 0x48, 0x76, 0x21, 0x03, 0x36, 0x40, 0x9d, 0x23, 0x40, 0x59, 0xc0,
- 0xff, 0x2d, 0x66, 0x72, 0x65, 0xe1, 0xe0, 0x3c, 0x4c, 0xf3, 0x06, 0x07,
- 0x0b, 0xe0, 0x65, 0x3f, 0x73, 0xe5, 0x52, 0x82, 0xe0, 0x55, 0xfb, 0x6f,
- 0x64, 0xe4, 0x04, 0xe0, 0x60, 0x92, 0xf4, 0xe0, 0x60, 0x8e, 0xae, 0x02,
- 0x8a, 0x62, 0x75, 0x73, 0x6b, 0x65, 0x72, 0xf5, 0xe0, 0x6b, 0xde, 0x61,
- 0x6b, 0x65, 0x72, 0xf3, 0xcb, 0x45, 0xf2, 0x04, 0xe0, 0x69, 0xe4, 0x64,
- 0x70, 0x6f, 0x6c, 0x2e, 0x6f, 0xf6, 0xe0, 0x6f, 0x3d, 0x6d, 0xf5, 0xe0,
- 0x64, 0x48, 0x6b, 0x6f, 0xae, 0xe0, 0x48, 0xda, 0x64, 0x72, 0x65, 0x2d,
- 0x65, 0xe9, 0xdf, 0x5c, 0x61, 0x74, 0x2d, 0x75, 0xf2, 0xe0, 0x68, 0xf8,
- 0xae, 0x0b, 0x60, 0x2a, 0x80, 0x60, 0x33, 0x88, 0x4f, 0x5b, 0xc0, 0xb2,
- 0xf5, 0x60, 0x6d, 0x56, 0xc2, 0x68, 0xe3, 0x04, 0xe0, 0x6f, 0xb5, 0xae,
- 0x60, 0x61, 0xfa, 0xc8, 0xb6, 0xe2, 0x60, 0x6e, 0x05, 0x82, 0xe1, 0x1c,
- 0x04, 0x0e, 0x05, 0x22, 0x10, 0x30, 0x0d, 0x08, 0x40, 0x45, 0x40, 0x6c,
- 0x06, 0x40, 0x7a, 0x04, 0x0a, 0x40, 0x67, 0x0d, 0x09, 0x08, 0x60, 0x6b,
- 0x38, 0xc2, 0x03, 0xf9, 0xe0, 0x63, 0xee, 0xf6, 0x08, 0x60, 0x60, 0x36,
- 0x4c, 0x66, 0xc0, 0xad, 0x6f, 0xe9, 0xe0, 0x6d, 0x94, 0x75, 0xf3, 0xe0,
- 0x2b, 0xe4, 0xf4, 0x08, 0x4c, 0xb4, 0x60, 0x2e, 0xa8, 0xc6, 0x00, 0x75,
- 0xf2, 0x02, 0x8c, 0x62, 0x72, 0x75, 0x6b, 0x73, 0x67, 0x79, 0x6d, 0xee,
- 0xe0, 0x5d, 0xf9, 0xe1, 0x04, 0xe0, 0x6f, 0x58, 0xec, 0xe0, 0x6c, 0x9f,
- 0x73, 0xf5, 0x04, 0xe0, 0x63, 0xc9, 0x73, 0x68, 0x69, 0x6f, 0x62, 0x61,
- 0xf2, 0xe0, 0x63, 0xc1, 0xf2, 0x07, 0x08, 0x0b, 0x05, 0xe0, 0x63, 0x74,
- 0x76, 0xe9, 0x60, 0x36, 0xc5, 0xe0, 0x2d, 0xe5, 0xf5, 0x02, 0x84, 0xf4,
- 0xe0, 0x20, 0xd8, 0xf3, 0xe0, 0x2e, 0x75, 0x69, 0xf4, 0xe0, 0x2f, 0x46,
- 0xe1, 0x02, 0x87, 0x73, 0x68, 0x69, 0xee, 0xe0, 0x6d, 0x3e, 0xae, 0x60,
- 0x66, 0xbf, 0xc6, 0xaf, 0xf0, 0x02, 0x85, 0x6f, 0xec, 0xe0, 0x66, 0xab,
- 0x6c, 0xe5, 0xe0, 0x56, 0x37, 0x6f, 0x73, 0x68, 0x69, 0xed, 0xe0, 0x60,
- 0xc6, 0xee, 0x0a, 0x05, 0x0c, 0x04, 0x04, 0x05, 0x07, 0x03, 0x04, 0x88,
- 0x79, 0xef, 0xe0, 0x37, 0xbd, 0xf4, 0x02, 0x84, 0xef, 0xe0, 0x37, 0xec,
- 0x61, 0xee, 0xe0, 0x60, 0xb1, 0xf0, 0xe0, 0x63, 0x44, 0xee, 0xe0, 0x28,
- 0xec, 0x6d, 0x6f, 0xeb, 0xd7, 0xbf, 0x6b, 0x6f, 0x6b, 0xf5, 0xe0, 0x68,
- 0xd0, 0xea, 0xd7, 0x70, 0xe7, 0xe0, 0x69, 0x54, 0x62, 0x75, 0xae, 0x60,
- 0x52, 0x7f, 0xc0, 0x61, 0xe1, 0x40, 0xac, 0xe0, 0x52, 0x42, 0xed, 0x05,
- 0x0f, 0x0a, 0x3f, 0x89, 0xf3, 0x02, 0x88, 0x73, 0x6b, 0x6f, 0x67, 0xe1,
- 0xe0, 0x68, 0x77, 0xef, 0xe0, 0x6a, 0x55, 0xe9, 0x04, 0xe0, 0x69, 0x33,
- 0x6b, 0xe1, 0xe0, 0x27, 0x09, 0xe5, 0x06, 0x03, 0x0a, 0xe0, 0x6e, 0x87,
- 0xf2, 0xc0, 0x8f, 0x67, 0xe1, 0x04, 0xe0, 0x2b, 0x2c, 0xf7, 0xe0, 0x37,
- 0xae, 0xae, 0x13, 0x06, 0x07, 0x06, 0x45, 0xaa, 0x60, 0x32, 0xdb, 0x55,
- 0x40, 0x40, 0x47, 0x4d, 0x28, 0x50, 0x91, 0xc0, 0x5a, 0xf0, 0x60, 0x6d,
- 0x19, 0xc1, 0x54, 0xed, 0x60, 0x6a, 0xb0, 0x41, 0x56, 0xaf, 0xe5, 0x60,
- 0x6c, 0xa7, 0xc1, 0xbd, 0xe1, 0xe0, 0x6b, 0xec, 0xe4, 0x04, 0xe0, 0x5f,
- 0x1f, 0x61, 0xec, 0xd2, 0x7e, 0x61, 0xf3, 0xe0, 0x4e, 0xa3, 0x6c, 0x63,
- 0x68, 0xe9, 0xc3, 0xcf, 0xeb, 0x03, 0x04, 0x86, 0xec, 0xe0, 0x33, 0xb8,
- 0x69, 0x6a, 0xe9, 0xe0, 0x34, 0xac, 0xe1, 0x0c, 0x0f, 0x03, 0x1d, 0x0f,
- 0x13, 0x08, 0x5a, 0x8c, 0xe0, 0x46, 0xd9, 0xf4, 0x04, 0x05, 0xc7, 0x54,
- 0x73, 0xf5, 0xe0, 0x27, 0x9f, 0x6f, 0xed, 0xe0, 0x69, 0x68, 0xf3, 0xd2,
- 0xc3, 0xee, 0x02, 0x93, 0xef, 0x03, 0x05, 0x85, 0x74, 0xef, 0xe0, 0x65,
- 0xe1, 0x6a, 0xef, 0xe0, 0x65, 0x41, 0xae, 0x60, 0x6a, 0xc3, 0xb3, 0x69,
- 0x69, 0x6b, 0x61, 0xf7, 0xdd, 0x11, 0xed, 0x05, 0x04, 0xe0, 0x2e, 0xa8,
- 0x75, 0xf2, 0xc4, 0x05, 0x69, 0xe3, 0xe0, 0x45, 0xd0, 0xe7, 0x05, 0x40,
- 0x77, 0xd5, 0xc7, 0x61, 0x77, 0x61, 0xae, 0x60, 0x62, 0x57, 0x46, 0x1a,
- 0x42, 0x61, 0xc1, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0xf2, 0xe0, 0x2d, 0x7d,
- 0xae, 0x60, 0x62, 0x7f, 0xc3, 0xc3, 0xe9, 0xe0, 0x51, 0xfc, 0x68, 0xe1,
- 0x04, 0xe0, 0x69, 0x2c, 0xf2, 0xe0, 0x34, 0xd4, 0xe7, 0x03, 0x0c, 0x89,
- 0xef, 0x04, 0xe0, 0x69, 0x1f, 0x79, 0xe1, 0x56, 0x20, 0xe0, 0x57, 0x95,
- 0xe9, 0x04, 0xe0, 0x67, 0xeb, 0xf3, 0xe0, 0x5f, 0x4d, 0xe1, 0x09, 0x07,
- 0x10, 0x0c, 0x0b, 0x0e, 0x04, 0xd9, 0x1e, 0x74, 0xef, 0x45, 0xac, 0xe0,
- 0x65, 0xd9, 0xf3, 0x02, 0x84, 0xf5, 0xe0, 0x66, 0x3f, 0x61, 0x6b, 0x69,
- 0xae, 0x60, 0x52, 0x33, 0xd9, 0xad, 0xf2, 0x04, 0xe0, 0x2d, 0xa0, 0x65,
- 0x79, 0x61, 0xed, 0xe0, 0x2d, 0x9c, 0x6f, 0x6b, 0xe1, 0x04, 0xe0, 0x69,
- 0x29, 0x6b, 0xf9, 0xdc, 0x45, 0x6e, 0xef, 0x02, 0x84, 0x68, 0xe1, 0xdf,
- 0x1f, 0xae, 0x60, 0x6a, 0x53, 0xc1, 0x68, 0xe9, 0xe0, 0x36, 0x2b, 0x68,
- 0xe1, 0xc3, 0xd1, 0x63, 0x68, 0x69, 0x6b, 0x61, 0x74, 0x73, 0x75, 0x75,
- 0xf2, 0xe0, 0x62, 0xa6, 0xe2, 0x04, 0xe0, 0x6d, 0x47, 0x61, 0xf2, 0xd6,
- 0x0b, 0x61, 0x6d, 0x65, 0x73, 0x6a, 0xe5, 0xd0, 0xb9, 0x34, 0xf5, 0xe0,
- 0x6c, 0xaf, 0xb4, 0xe0, 0x3a, 0xd3, 0xed, 0x25, 0x23, 0x41, 0xa8, 0x09,
- 0x07, 0x40, 0x9c, 0x12, 0x17, 0x29, 0x06, 0x41, 0xae, 0x07, 0x10, 0x0d,
- 0x06, 0x0d, 0x43, 0x2b, 0x07, 0x41, 0x3f, 0x0b, 0x28, 0x0b, 0x60, 0x39,
- 0xa3, 0x49, 0xbe, 0x5c, 0x8c, 0x41, 0x2c, 0x9d, 0x9f, 0x02, 0x84, 0x44,
- 0xc1, 0xca, 0x9b, 0xc3, 0x02, 0x8a, 0xe5, 0x02, 0x84, 0xf3, 0xe0, 0x64,
- 0x5b, 0xec, 0xca, 0xd5, 0xe1, 0x02, 0x89, 0x74, 0x74, 0x61, 0x2d, 0x76,
- 0x1f, 0xc3, 0xc9, 0x8e, 0xec, 0xca, 0xd8, 0xf9, 0x18, 0x05, 0x05, 0x20,
- 0x40, 0x57, 0x21, 0x05, 0x19, 0x07, 0x07, 0x07, 0x05, 0x32, 0x08, 0x27,
- 0x0d, 0x1c, 0x06, 0x60, 0x64, 0x95, 0xc6, 0xd1, 0x77, 0xe9, 0xe0, 0x57,
- 0x91, 0x76, 0xee, 0xe0, 0x47, 0x48, 0xf4, 0x03, 0x07, 0x85, 0x75, 0x6c,
- 0x65, 0xe1, 0xe0, 0x6b, 0xd3, 0x69, 0xf3, 0xe0, 0x6c, 0x2f, 0x61, 0x62,
- 0x69, 0x74, 0x2e, 0x63, 0xef, 0x04, 0xe0, 0x6c, 0xa6, 0x2e, 0xe9, 0xe0,
- 0x6b, 0xf6, 0xf3, 0x03, 0x37, 0x8c, 0x70, 0x72, 0x65, 0x61, 0x64, 0x73,
- 0x68, 0x6f, 0x70, 0xae, 0x0e, 0x07, 0x06, 0x60, 0x58, 0x43, 0x04, 0x49,
- 0x60, 0x4a, 0x2c, 0x0c, 0x2e, 0x8a, 0xee, 0x60, 0x6b, 0xd6, 0x40, 0x78,
- 0x99, 0xe9, 0x60, 0x6c, 0x1d, 0xc0, 0x44, 0xe3, 0x06, 0x60, 0x5c, 0x2b,
- 0xcf, 0x9e, 0xef, 0x04, 0xe0, 0x69, 0x22, 0xed, 0x47, 0xd7, 0xe0, 0x64,
- 0x95, 0x68, 0x6f, 0xf0, 0x04, 0xe0, 0x38, 0x86, 0x69, 0xe6, 0xe0, 0x4e,
- 0xd0, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x63, 0x61, 0x6d, 0x65,
- 0x72, 0xe1, 0xe0, 0x58, 0x94, 0xf0, 0x04, 0x03, 0x04, 0x87, 0xf3, 0xdb,
- 0xa1, 0xe9, 0xe0, 0x53, 0x43, 0x68, 0x6f, 0x74, 0xef, 0xe0, 0x36, 0x16,
- 0xe5, 0x02, 0x86, 0x74, 0x73, 0xae, 0xe0, 0x4e, 0x8f, 0x70, 0xae, 0xe0,
- 0x48, 0xae, 0x6f, 0xeb, 0xe0, 0x67, 0xe1, 0xed, 0x02, 0x88, 0x65, 0x64,
- 0x69, 0x61, 0xf0, 0xe0, 0x68, 0xba, 0x61, 0x69, 0x6c, 0x65, 0x72, 0x2e,
- 0x63, 0x6f, 0x6d, 0x2e, 0xf4, 0xe0, 0x57, 0x96, 0x6b, 0x6f, 0x6c, 0xe1,
- 0xe0, 0x50, 0xf7, 0x6a, 0x69, 0x6e, 0xef, 0xe0, 0x6b, 0x7b, 0x69, 0x70,
- 0x68, 0xef, 0xe0, 0x21, 0x0a, 0x68, 0x6f, 0xed, 0xce, 0x86, 0xe6, 0x06,
- 0x08, 0x06, 0x10, 0xc0, 0x88, 0x74, 0x70, 0xae, 0x60, 0x68, 0xc7, 0xc0,
- 0x56, 0x72, 0x69, 0xf4, 0xe0, 0x36, 0xa7, 0x6f, 0x72, 0x75, 0x6d, 0x2e,
- 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0xf4, 0xe0, 0x5a, 0x64, 0x61,
- 0x73, 0x74, 0xae, 0x04, 0xe0, 0x4e, 0x14, 0x73, 0xf0, 0xe0, 0x4c, 0x6f,
- 0x65, 0x66, 0x66, 0x65, 0xe3, 0xe0, 0x5f, 0x6b, 0xe4, 0x07, 0x06, 0x05,
- 0x07, 0x06, 0xcb, 0xc5, 0x72, 0x6f, 0xe2, 0xe0, 0x5e, 0xc5, 0x6f, 0x62,
- 0xe9, 0xdf, 0x1d, 0x69, 0x73, 0x73, 0xe5, 0xe0, 0x4d, 0xb5, 0x64, 0x6e,
- 0x73, 0xae, 0xcc, 0xd7, 0x61, 0x74, 0x74, 0xef, 0xe0, 0x68, 0x3c, 0xe3,
- 0x02, 0x87, 0x6c, 0x6f, 0x75, 0x64, 0xae, 0xc7, 0x52, 0xe4, 0xdb, 0x7e,
- 0xe1, 0x03, 0x06, 0x86, 0x73, 0x75, 0xf3, 0xe0, 0x5d, 0x7d, 0x6d, 0x61,
- 0xfa, 0xe0, 0x68, 0x0b, 0x63, 0x74, 0x69, 0x76, 0x65, 0x64, 0x69, 0x72,
- 0x65, 0xe3, 0xd0, 0xe9, 0xae, 0x60, 0x62, 0xd1, 0xc2, 0x3c, 0xad, 0x06,
- 0x05, 0x06, 0x0a, 0xc6, 0xce, 0x77, 0xe1, 0xe0, 0x42, 0x6d, 0x72, 0x6f,
- 0xf5, 0xe0, 0x23, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0xf9, 0xe0,
- 0x48, 0x18, 0x66, 0x69, 0x72, 0x65, 0x77, 0x61, 0xec, 0xde, 0x26, 0xf8,
- 0x04, 0xe0, 0x6b, 0x3c, 0xae, 0xe0, 0x67, 0x54, 0xf7, 0x60, 0x2e, 0x0d,
- 0xe0, 0x3d, 0x2a, 0xf5, 0x0d, 0x13, 0x3a, 0x20, 0x06, 0x0c, 0x06, 0x04,
- 0x52, 0x6a, 0xe0, 0x58, 0x30, 0xf4, 0x02, 0x86, 0x75, 0x61, 0xec, 0xe0,
- 0x59, 0x0b, 0x73, 0xf5, 0x04, 0xe0, 0x2f, 0xe0, 0xfa, 0xe0, 0x2b, 0x30,
- 0xf3, 0x04, 0x13, 0x10, 0x8c, 0x69, 0xe3, 0x05, 0x05, 0xe0, 0x6a, 0xff,
- 0x69, 0xe1, 0xe0, 0x45, 0xdb, 0x61, 0xae, 0x60, 0x58, 0xec, 0xcf, 0x5a,
- 0x65, 0x75, 0xed, 0x04, 0xe0, 0x6a, 0xf1, 0xae, 0x60, 0x49, 0x38, 0x5a,
- 0xc2, 0x45, 0x37, 0xab, 0x61, 0x73, 0x68, 0xe9, 0x04, 0xe0, 0x64, 0xda,
- 0xed, 0xe0, 0x28, 0xac, 0xae, 0x60, 0x62, 0x1c, 0xc7, 0x65, 0xf2, 0x03,
- 0x0a, 0x84, 0xef, 0x02, 0x84, 0xf4, 0xe0, 0x28, 0x67, 0xf2, 0xcf, 0x32,
- 0xed, 0xe0, 0x54, 0x58, 0xe1, 0x04, 0x04, 0xd7, 0x73, 0xf4, 0xe0, 0x33,
- 0x40, 0x6b, 0x61, 0xed, 0xdb, 0x7f, 0x6f, 0xf3, 0x60, 0x58, 0x21, 0x82,
- 0xee, 0x02, 0x84, 0xe9, 0xe0, 0x23, 0x8b, 0x61, 0xeb, 0xe0, 0x2b, 0x59,
- 0xeb, 0x59, 0x77, 0xe0, 0x45, 0xf5, 0x69, 0xeb, 0xdc, 0x1d, 0x67, 0xe9,
- 0xe0, 0x65, 0x23, 0xf4, 0x07, 0x60, 0x69, 0x34, 0x1f, 0xc1, 0x3a, 0xae,
- 0x60, 0x64, 0x28, 0x03, 0x03, 0x41, 0x5a, 0xc3, 0x02, 0xf3, 0x07, 0x04,
- 0x60, 0x68, 0x2b, 0xc2, 0x4c, 0xeb, 0xe0, 0x66, 0xd9, 0xae, 0x60, 0x53,
- 0x86, 0x50, 0x8c, 0x03, 0x41, 0x5d, 0xc3, 0x02, 0xf2, 0x06, 0x60, 0x68,
- 0xd0, 0xc1, 0x95, 0xe1, 0x02, 0x9a, 0x70, 0x2e, 0x61, 0x63, 0x63, 0x65,
+ 0x63, 0x77, 0xb4, 0xe0, 0xaf, 0xf5, 0x31, 0x62, 0x34, 0x63, 0xb3, 0xe0,
+ 0xb0, 0x31, 0x30, 0x74, 0x72, 0x71, 0x37, 0x70, 0x37, 0x6e, 0xee, 0xe0,
+ 0xb0, 0xc5, 0x6d, 0x69, 0x74, 0xae, 0x60, 0x33, 0x7b, 0xe0, 0x7e, 0x3b,
+ 0xea, 0xe0, 0x9e, 0xaf, 0xe9, 0x07, 0x60, 0x8c, 0x16, 0xe0, 0x25, 0x11,
+ 0xe8, 0xe0, 0xa9, 0x38, 0xe5, 0x02, 0x82, 0xf2, 0x8b, 0x6e, 0x2e, 0x70,
+ 0x72, 0x67, 0xed, 0xe0, 0xb1, 0x69, 0x62, 0xef, 0xe0, 0xaa, 0x84, 0x34,
+ 0x34, 0x33, 0x2e, 0xf0, 0xe0, 0x9d, 0x76, 0x30, 0xae, 0x60, 0xb0, 0xfc,
+ 0xc1, 0x58, 0xae, 0x60, 0x98, 0xfa, 0x47, 0x8b, 0xd1, 0xfd, 0xf7, 0x1e,
+ 0x07, 0x0c, 0x04, 0x06, 0x10, 0x15, 0x20, 0x40, 0x6b, 0x07, 0x0f, 0x0c,
+ 0x05, 0x04, 0x40, 0x87, 0x1a, 0x41, 0x47, 0x40, 0xc8, 0x60, 0x83, 0x12,
+ 0x51, 0x01, 0x1b, 0xcf, 0x27, 0x7a, 0x6d, 0x69, 0xf5, 0xe0, 0x73, 0x65,
+ 0x77, 0x77, 0xae, 0x04, 0xe0, 0xb0, 0x7a, 0x63, 0xeb, 0xe0, 0x94, 0xcd,
+ 0x75, 0xef, 0xc0, 0xdb, 0xf4, 0x60, 0xa5, 0xde, 0xc1, 0x07, 0xf3, 0x0b,
+ 0x60, 0x2b, 0xd9, 0x4b, 0x84, 0x4d, 0x0d, 0xe0, 0x6d, 0xcb, 0xeb, 0xe0,
+ 0x33, 0x5f, 0xf2, 0x02, 0x87, 0x6f, 0xe3, 0x40, 0x96, 0xe0, 0x9f, 0x64,
+ 0x69, 0x74, 0x65, 0x73, 0x74, 0x68, 0x69, 0xf3, 0xe0, 0x87, 0x25, 0xf0,
+ 0x06, 0x0c, 0x09, 0xe0, 0x5e, 0x72, 0x6d, 0xf5, 0x04, 0xe0, 0x68, 0x06,
+ 0x64, 0x65, 0xf6, 0xe0, 0x7b, 0x7a, 0x68, 0x6f, 0x73, 0x74, 0x65, 0xe4,
+ 0xe0, 0x87, 0x03, 0xe4, 0xe0, 0x5f, 0xfd, 0xef, 0x07, 0x34, 0x07, 0x1f,
+ 0xe0, 0xae, 0xd7, 0xf2, 0x04, 0x05, 0x04, 0xa2, 0x73, 0xe5, 0xe0, 0x9f,
+ 0x2b, 0xec, 0xe0, 0xaf, 0x4a, 0xeb, 0x08, 0x06, 0x60, 0x25, 0xec, 0xe0,
+ 0x8b, 0xeb, 0xf3, 0x60, 0xae, 0xaa, 0xc3, 0x32, 0xe9, 0x02, 0x87, 0x73,
+ 0x62, 0x6f, 0xf2, 0xe0, 0xa3, 0xac, 0x6e, 0x67, 0x67, 0x72, 0x6f, 0xf5,
+ 0xe0, 0x96, 0x13, 0xe6, 0xe0, 0xa6, 0xd1, 0x6f, 0x64, 0x73, 0xe9, 0xe0,
+ 0x71, 0xea, 0xec, 0x02, 0x97, 0xf4, 0x02, 0x8a, 0x6c, 0x61, 0x62, 0x2d,
+ 0x64, 0x65, 0xed, 0xe0, 0xa4, 0x36, 0x65, 0x72, 0x73, 0x6b, 0x6c, 0x75,
+ 0xf7, 0xe0, 0x9d, 0x5b, 0x6f, 0xed, 0xe0, 0x9f, 0x70, 0x64, 0x7a, 0x69,
+ 0x73, 0x6c, 0xe1, 0xe0, 0xa4, 0x60, 0x6e, 0x65, 0x78, 0xf4, 0xe0, 0xad,
+ 0xe9, 0xed, 0x07, 0x60, 0x7e, 0x8f, 0xe0, 0x31, 0x35, 0x66, 0x6c, 0x61,
+ 0xe2, 0xe0, 0x9c, 0x02, 0x6c, 0x6f, 0x63, 0xec, 0x04, 0xe0, 0xac, 0x30,
+ 0x61, 0xf7, 0xca, 0x4e, 0x6b, 0xfa, 0xe0, 0x72, 0x79, 0xea, 0xe0, 0x8e,
+ 0x88, 0xe9, 0x0f, 0x15, 0x1a, 0x03, 0x11, 0x0a, 0x07, 0x05, 0x04, 0x60,
+ 0x72, 0x04, 0xe0, 0x38, 0xc9, 0xf8, 0x04, 0xe0, 0x89, 0xaf, 0xf3, 0x04,
+ 0xe0, 0x34, 0x0f, 0x74, 0x75, 0x64, 0x69, 0x6f, 0xae, 0x60, 0xaf, 0xf5,
+ 0xc1, 0x1b, 0xf4, 0x02, 0x93, 0xe8, 0x02, 0x89, 0x79, 0x6f, 0x75, 0x74,
+ 0x75, 0xe2, 0xe0, 0xa8, 0xf9, 0x67, 0x6f, 0x6f, 0xe7, 0xe0, 0x35, 0x20,
+ 0xe4, 0xe0, 0x72, 0x36, 0xef, 0xc6, 0x15, 0xee, 0x0b, 0x60, 0x2d, 0xfd,
+ 0x41, 0xab, 0x60, 0x7f, 0xb2, 0xc1, 0xbe, 0x64, 0xef, 0xe0, 0x8f, 0x0e,
+ 0x6c, 0x6c, 0x69, 0x61, 0x6d, 0x68, 0xe9, 0xe0, 0x9f, 0x86, 0x6b, 0xe9,
+ 0x60, 0x9c, 0xb5, 0xd4, 0x52, 0x69, 0xe8, 0xe0, 0x72, 0x0c, 0xe6, 0xe0,
+ 0x72, 0x08, 0xe5, 0x02, 0x92, 0xee, 0x04, 0xe0, 0xb0, 0xf1, 0x2e, 0x66,
+ 0x75, 0x6e, 0x6b, 0x66, 0x65, 0x75, 0x65, 0xf2, 0xe0, 0x77, 0x84, 0x6c,
+ 0xf5, 0xe0, 0x9e, 0xb6, 0xe8, 0x03, 0x07, 0x86, 0x6f, 0x73, 0x77, 0xe8,
+ 0xe0, 0xaf, 0x02, 0x6d, 0xae, 0x60, 0x90, 0x05, 0x87, 0x69, 0x74, 0x65,
+ 0x73, 0x6e, 0xef, 0xe0, 0x2e, 0x58, 0xe5, 0x0a, 0x1e, 0x11, 0x06, 0x05,
+ 0x06, 0x17, 0x40, 0xcf, 0x91, 0xf3, 0x02, 0x96, 0xf4, 0x05, 0x09, 0xe0,
+ 0x84, 0xd6, 0x65, 0x75, 0x72, 0x6f, 0x70, 0xe5, 0xe0, 0x95, 0x59, 0x31,
+ 0x2d, 0x75, 0xf3, 0xe0, 0x7a, 0x7e, 0x6c, 0xe5, 0xe0, 0x97, 0x5e, 0x6c,
+ 0x6c, 0x62, 0x65, 0x69, 0x6e, 0x67, 0x7a, 0x6f, 0x6e, 0x65, 0xae, 0x60,
+ 0xaa, 0xef, 0xc1, 0xee, 0xe9, 0x60, 0xad, 0x7d, 0xc1, 0x6a, 0x67, 0xf2,
+ 0xe0, 0xa3, 0x4e, 0x65, 0x6b, 0xec, 0xe0, 0xab, 0xdb, 0xe4, 0x05, 0x0d,
+ 0xe0, 0xb0, 0x67, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0xae, 0x60, 0x99, 0xc4,
+ 0x43, 0x3e, 0xd2, 0x1b, 0xe4, 0xe0, 0x9a, 0x42, 0xe2, 0x0e, 0x26, 0x08,
+ 0x15, 0x08, 0x08, 0x06, 0x20, 0x0d, 0x04, 0x06, 0xe0, 0x9b, 0x7d, 0x76,
+ 0x69, 0x65, 0x77, 0x2d, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0xae, 0x02,
+ 0x92, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x39, 0xae, 0x43, 0x6d, 0x09, 0x0c,
+ 0x5f, 0x64, 0x40, 0x48, 0xe0, 0x5d, 0xf4, 0x61, 0x77, 0x73, 0xad, 0xc3,
+ 0x4c, 0x74, 0x68, 0x69, 0x6e, 0xe7, 0xe0, 0x45, 0x06, 0xf3, 0x03, 0x07,
+ 0x86, 0x70, 0x61, 0x63, 0xe5, 0xe0, 0x41, 0xd9, 0x6f, 0x7a, 0xe1, 0xe0,
+ 0x89, 0x83, 0x69, 0xf4, 0xd4, 0xbd, 0x72, 0x65, 0x64, 0x69, 0xf2, 0xe0,
+ 0xa5, 0xd9, 0x70, 0x61, 0x61, 0x73, 0xae, 0xe0, 0x69, 0x13, 0x6c, 0x69,
+ 0xeb, 0xe0, 0xa0, 0x58, 0xe8, 0x02, 0x98, 0xef, 0x02, 0x88, 0x73, 0x74,
+ 0x69, 0x6e, 0xe7, 0xe0, 0x91, 0x9b, 0x70, 0xae, 0x60, 0x99, 0x41, 0x45,
+ 0xc9, 0x4d, 0x67, 0x40, 0x56, 0xc2, 0xc2, 0x61, 0xf2, 0xe0, 0x4f, 0xfb,
+ 0x66, 0x6c, 0x6f, 0xf7, 0x04, 0xe0, 0xae, 0x81, 0x74, 0xe5, 0xe0, 0x8b,
+ 0x85, 0xe3, 0xe0, 0xa7, 0xb4, 0x61, 0x64, 0x6f, 0xf2, 0xd9, 0x31, 0xae,
+ 0x16, 0x07, 0x06, 0x06, 0x60, 0x6f, 0xd8, 0x4d, 0x79, 0x60, 0x25, 0xf2,
+ 0x41, 0x79, 0x45, 0xe4, 0x41, 0x57, 0x40, 0x96, 0xc0, 0xc0, 0xf6, 0x60,
+ 0x7d, 0xd9, 0xe0, 0x30, 0x15, 0xf4, 0x60, 0xad, 0x12, 0xc0, 0xf0, 0xee,
+ 0x60, 0xa4, 0x3e, 0xc8, 0xf5, 0xe9, 0x60, 0x9a, 0xb8, 0xd2, 0x42, 0x61,
+ 0x74, 0x68, 0x65, 0xf2, 0x04, 0xe0, 0xaf, 0x8b, 0x63, 0x68, 0x61, 0x6e,
+ 0xee, 0xe0, 0xa9, 0xcc, 0x2e, 0xe2, 0xe0, 0xae, 0xd0, 0xe1, 0x0e, 0x05,
+ 0x19, 0x12, 0x13, 0x12, 0x16, 0x23, 0x0c, 0x09, 0x0c, 0xe0, 0xa1, 0x8c,
+ 0x7a, 0xf5, 0xe0, 0x5a, 0x83, 0xf4, 0x03, 0x04, 0x87, 0xf3, 0xe0, 0x6e,
+ 0x23, 0x63, 0xe8, 0x60, 0xa2, 0xe4, 0xcc, 0x7c, 0x61, 0xf2, 0x04, 0xe0,
+ 0x5f, 0x8d, 0xe1, 0xe0, 0x55, 0xf5, 0xf3, 0x02, 0x86, 0x73, 0x61, 0xed,
+ 0xe0, 0xaa, 0x0e, 0x68, 0x74, 0x65, 0x6e, 0x61, 0xf7, 0xe0, 0xa5, 0xf1,
+ 0xf2, 0x03, 0x05, 0x85, 0x73, 0xfa, 0xe0, 0x9c, 0x26, 0x6d, 0xe9, 0xe0,
+ 0x9f, 0x97, 0x61, 0xe2, 0xe0, 0x5e, 0x31, 0xee, 0x02, 0x85, 0x6f, 0xf5,
+ 0xe0, 0xa5, 0xba, 0xe7, 0x04, 0xe0, 0xaf, 0x1f, 0x67, 0xef, 0xe0, 0xad,
+ 0xd3, 0xec, 0x07, 0x05, 0x60, 0x9a, 0xc5, 0xc7, 0xcc, 0x6d, 0xe1, 0xe0,
+ 0x25, 0x4d, 0x62, 0x72, 0x7a, 0x79, 0x63, 0xe8, 0xe0, 0xa9, 0xc4, 0xeb,
+ 0x06, 0x03, 0x04, 0xe0, 0x68, 0x45, 0xf5, 0xcb, 0x9d, 0xe5, 0xe0, 0xa8,
+ 0xb2, 0xe1, 0x02, 0x8a, 0x79, 0x61, 0x6d, 0x61, 0xae, 0x60, 0xa3, 0xcf,
+ 0xc9, 0x21, 0x73, 0x61, 0xae, 0x60, 0x82, 0xcc, 0xcf, 0x52, 0x6a, 0xe9,
+ 0x02, 0x84, 0xed, 0xe0, 0x59, 0x3d, 0xeb, 0xe0, 0x41, 0xb0, 0x66, 0x66,
+ 0x6c, 0x65, 0x63, 0xe5, 0xe0, 0xa7, 0x66, 0xe4, 0x04, 0xe0, 0x92, 0x76,
+ 0x6c, 0x2e, 0x74, 0xef, 0xe0, 0x9c, 0x89, 0xae, 0x60, 0x27, 0x6f, 0x60,
+ 0x81, 0xc4, 0x42, 0x1a, 0x84, 0xad, 0x02, 0x95, 0xe3, 0x02, 0x8e, 0x72,
+ 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x6c, 0x65, 0x73, 0xf3,
+ 0x84, 0x6f, 0x72, 0x70, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x62,
+ 0x6c, 0x69, 0xf4, 0xe0, 0x86, 0x2a, 0xf6, 0x1b, 0x26, 0x04, 0x0b, 0x07,
+ 0x04, 0x21, 0x40, 0x43, 0x06, 0x04, 0x25, 0x40, 0xb1, 0x06, 0x34, 0x40,
+ 0xc8, 0x04, 0x06, 0x04, 0x40, 0x9e, 0x06, 0xe0, 0x87, 0x29, 0x1f, 0xc3,
+ 0x05, 0x18, 0xe0, 0x35, 0x24, 0xe5, 0x02, 0x8c, 0x6c, 0x65, 0x72, 0xae,
+ 0x03, 0xc2, 0xea, 0x1f, 0x43, 0xf8, 0xde, 0xb6, 0xe7, 0x60, 0x3c, 0xde,
+ 0x41, 0xae, 0xe0, 0x57, 0xbc, 0x61, 0x72, 0x67, 0xe7, 0xe0, 0x9b, 0x29,
+ 0xf6, 0xe0, 0xab, 0xf8, 0xf5, 0x04, 0xe0, 0xae, 0x46, 0x6c, 0x74, 0xf2,
+ 0xe0, 0x4c, 0xa8, 0x73, 0xae, 0x60, 0x94, 0xb4, 0xd7, 0x35, 0xf2, 0xe0,
+ 0xab, 0xe2, 0xf0, 0x05, 0x0f, 0xe0, 0x65, 0xe4, 0xf3, 0x04, 0xe0, 0xa1,
+ 0x4e, 0x2e, 0xed, 0x04, 0xe0, 0x67, 0x3a, 0xe3, 0xe0, 0x7c, 0xec, 0xee,
+ 0x04, 0xe0, 0xa7, 0xe7, 0x70, 0x6c, 0x75, 0xf3, 0xe0, 0xac, 0x88, 0xef,
+ 0x07, 0x04, 0x07, 0x0b, 0x0a, 0x14, 0x84, 0xf9, 0xe0, 0x41, 0xcc, 0xf4,
+ 0x60, 0x97, 0xe3, 0x54, 0x4f, 0x97, 0x73, 0xf3, 0x04, 0xe0, 0xac, 0x13,
+ 0x65, 0xf6, 0xe0, 0x9d, 0xc1, 0x6f, 0x72, 0x6c, 0x6f, 0x70, 0x65, 0xf2,
+ 0xe0, 0x95, 0x60, 0xec, 0x06, 0x04, 0x04, 0xe0, 0x87, 0xda, 0xf9, 0xe0,
+ 0x55, 0x7c, 0xf6, 0xe0, 0xac, 0x0b, 0x6f, 0xe7, 0xe0, 0x57, 0xdd, 0xe4,
+ 0xe0, 0x81, 0x6c, 0xe1, 0xc2, 0x0b, 0xee, 0x60, 0x91, 0xe5, 0xdb, 0xeb,
+ 0xed, 0xe0, 0x85, 0xd9, 0xec, 0x02, 0x84, 0xef, 0xe0, 0x8d, 0xfb, 0xe1,
+ 0x02, 0x93, 0x64, 0xe9, 0x02, 0x86, 0x6d, 0x69, 0xf2, 0xe0, 0xa9, 0xb1,
+ 0x6b, 0x61, 0x76, 0x6b, 0x61, 0xfa, 0xe0, 0xa9, 0xa8, 0x61, 0x6e, 0x64,
+ 0x65, 0xf2, 0xe0, 0x73, 0x6b, 0xe9, 0x14, 0x04, 0x08, 0x07, 0x06, 0x16,
+ 0x19, 0x28, 0x05, 0x08, 0x05, 0x07, 0x0e, 0x60, 0x88, 0xe3, 0x60, 0x24,
+ 0x12, 0x81, 0xf8, 0xe0, 0xab, 0xe7, 0xf6, 0x60, 0x41, 0xcd, 0x60, 0x69,
+ 0xc1, 0xa5, 0x74, 0x65, 0x72, 0xe2, 0xe0, 0xab, 0x26, 0xf3, 0x60, 0xa0,
+ 0x5d, 0xcb, 0x22, 0xf2, 0x02, 0x8f, 0x74, 0x75, 0x61, 0xec, 0x05, 0x01,
+ 0xe0, 0x9b, 0xce, 0x2d, 0x75, 0xf3, 0xe0, 0x88, 0xc9, 0xe7, 0xe0, 0xab,
+ 0xdc, 0xf0, 0x05, 0x07, 0xe0, 0xad, 0x51, 0x73, 0x69, 0x6e, 0xe1, 0xe0,
+ 0xac, 0x1a, 0x2e, 0x6a, 0x65, 0x6c, 0x61, 0x73, 0x74, 0x69, 0xe3, 0xe0,
+ 0x94, 0xb9, 0xee, 0x06, 0x0f, 0x0d, 0xe0, 0xad, 0x22, 0xee, 0x02, 0x87,
+ 0x79, 0x74, 0x73, 0xe9, 0xe0, 0x89, 0x73, 0x69, 0xe3, 0xe0, 0x89, 0x6e,
+ 0xe8, 0x02, 0x86, 0x70, 0x68, 0xf5, 0xe0, 0x99, 0xd7, 0xec, 0xe0, 0x99,
+ 0xdb, 0x64, 0xe1, 0xe0, 0x9c, 0xc1, 0x6c, 0xec, 0xe0, 0x97, 0x89, 0xeb,
+ 0x60, 0x96, 0xf3, 0x4a, 0xe1, 0xc9, 0x5b, 0x64, 0xe5, 0xe0, 0x93, 0x23,
+ 0xe3, 0x60, 0x25, 0xb4, 0xe0, 0x64, 0x27, 0x62, 0xef, 0x02, 0x81, 0x2d,
+ 0x76, 0x61, 0x6c, 0x65, 0x6e, 0xf4, 0xe0, 0xa5, 0xe2, 0x61, 0xea, 0xe0,
+ 0xa0, 0x78, 0xe7, 0x60, 0xa8, 0x15, 0xc4, 0xdb, 0xe6, 0x04, 0xe0, 0xaa,
+ 0xfe, 0x73, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x39, 0xae, 0x0b, 0x09,
+ 0x0c, 0x5f, 0x64, 0x40, 0x48, 0x60, 0x5d, 0xf4, 0x8d, 0x75, 0x73, 0xad,
+ 0x60, 0x7d, 0xa4, 0xe0, 0x26, 0xb6, 0x65, 0x75, 0xad, 0x60, 0x7d, 0xc3,
+ 0x0c, 0x40, 0x61, 0xe0, 0x26, 0x06, 0xe1, 0x5f, 0xb3, 0xe0, 0x5e, 0x71,
+ 0xe5, 0x0e, 0x06, 0x12, 0x21, 0x40, 0x45, 0x1d, 0x04, 0x15, 0x60, 0xa9,
+ 0x9e, 0xc2, 0x56, 0x76, 0x65, 0xec, 0xe0, 0x78, 0x2c, 0xf4, 0x06, 0x60,
+ 0xaa, 0xf6, 0xc1, 0xa5, 0x65, 0x72, 0x69, 0x6e, 0x61, 0x69, 0x72, 0xe5,
+ 0xe0, 0x45, 0xe2, 0x73, 0xf4, 0x08, 0x0f, 0x60, 0x4c, 0x60, 0xe0, 0x5b,
+ 0x3a, 0xf6, 0x02, 0x87, 0x1f, 0x43, 0x65, 0xe7, 0xe0, 0xa3, 0x4b, 0x61,
+ 0xe7, 0xe0, 0xa0, 0x52, 0x72, 0x65, 0xad, 0x60, 0x2c, 0x4c, 0xc1, 0x23,
+ 0xf2, 0x0b, 0x0f, 0x04, 0x12, 0x07, 0x09, 0x60, 0xa3, 0x55, 0xc1, 0x2c,
+ 0xf3, 0x07, 0x60, 0x63, 0xa8, 0xe0, 0x39, 0x0d, 0x69, 0x63, 0x68, 0x65,
+ 0xf2, 0xdc, 0xd5, 0xf2, 0xe0, 0x3a, 0xd3, 0x6d, 0x1f, 0x43, 0x76, 0x67,
+ 0x65, 0x6e, 0x73, 0x62, 0x65, 0x72, 0x61, 0xf4, 0x5c, 0xc2, 0xe0, 0x7b,
+ 0x3a, 0x69, 0x73, 0x69, 0xe7, 0xe0, 0xaa, 0xb6, 0x63, 0x65, 0xec, 0x60,
+ 0x3a, 0x51, 0xe0, 0x4a, 0x8b, 0xe2, 0xe0, 0x48, 0xb8, 0xee, 0x07, 0x04,
+ 0x06, 0x04, 0xe0, 0xa9, 0xbe, 0xf4, 0xe0, 0x29, 0x43, 0x6e, 0x65, 0xf3,
+ 0xe0, 0x2c, 0x60, 0xe9, 0xe0, 0x77, 0x5b, 0xe5, 0x60, 0x6e, 0xf3, 0xe0,
+ 0x38, 0x21, 0x6c, 0xf6, 0xd9, 0xdc, 0xe7, 0x02, 0x84, 0x1f, 0x43, 0xe5,
+ 0x88, 0xe1, 0x06, 0x60, 0xa9, 0x3f, 0xc0, 0xd4, 0x72, 0x73, 0x68, 0xe5,
+ 0xe0, 0xa3, 0xcd, 0x66, 0xf3, 0xe0, 0xa5, 0x36, 0xe4, 0xe0, 0xa4, 0xd8,
+ 0xe3, 0x60, 0xa9, 0x94, 0xc2, 0x56, 0xe2, 0xe0, 0xa9, 0x8e, 0xe1, 0x0f,
+ 0x11, 0x08, 0x10, 0x3d, 0x04, 0x0b, 0x07, 0x04, 0x06, 0x60, 0xa8, 0xf4,
+ 0xc2, 0x57, 0xf2, 0x07, 0x05, 0x60, 0x95, 0xfc, 0xc9, 0xa0, 0x67, 0xe7,
+ 0xe0, 0x98, 0xa0, 0xe5, 0xe0, 0x40, 0x26, 0x70, 0x6f, 0xf2, 0x60, 0x93,
+ 0x2e, 0xce, 0x6a, 0xee, 0x06, 0x4e, 0x13, 0xe0, 0x9b, 0xa4, 0xe7, 0x04,
+ 0xe0, 0xa9, 0xc4, 0xf5, 0xe0, 0x9b, 0x0d, 0xec, 0x04, 0x21, 0x0c, 0x81,
+ 0xec, 0x02, 0x84, 0x1f, 0x43, 0xe9, 0x89, 0xe5, 0x07, 0x0f, 0x10, 0x04,
+ 0xe0, 0xa9, 0x89, 0xe5, 0x03, 0x02, 0x85, 0xe4, 0x86, 0xad, 0x02, 0x82,
+ 0x64, 0x2d, 0x61, 0xef, 0xc5, 0xb6, 0xad, 0x0f, 0x84, 0x65, 0x72, 0xae,
+ 0x02, 0x83, 0xef, 0xdb, 0xd1, 0xe8, 0xe0, 0x2c, 0xd8, 0x2d, 0xe4, 0x02,
+ 0x81, 0x2d, 0x61, 0x6f, 0xf3, 0xe0, 0xa2, 0x69, 0xeb, 0xe0, 0x71, 0xd2,
+ 0xe7, 0x04, 0xe0, 0x55, 0x35, 0xe1, 0x60, 0xa4, 0xa5, 0xc4, 0xd4, 0x64,
+ 0xf3, 0x60, 0x95, 0x96, 0xcc, 0xe7, 0x63, 0xe1, 0xd2, 0x52, 0x61, 0x70,
+ 0xf3, 0xe0, 0xa9, 0x64, 0xae, 0x60, 0xa5, 0xbe, 0x43, 0x37, 0xc0, 0x6e,
+ 0xae, 0x60, 0x97, 0x7b, 0xd3, 0xc5, 0x2d, 0x69, 0x6e, 0x66, 0xef, 0xe0,
+ 0x9a, 0x56, 0xf5, 0x1b, 0x18, 0x05, 0x10, 0x2c, 0x40, 0xba, 0x40, 0x4e,
+ 0x37, 0x09, 0x40, 0x61, 0x1b, 0x18, 0x2f, 0x13, 0x0d, 0x06, 0x0c, 0x05,
+ 0x10, 0x14, 0x1c, 0x1b, 0x07, 0x90, 0xfa, 0x07, 0x04, 0x60, 0x8f, 0x22,
+ 0xdb, 0xeb, 0xf3, 0xe0, 0x6c, 0x1c, 0xe8, 0x02, 0x82, 0xe8, 0x82, 0x67,
+ 0x6f, 0x72, 0xef, 0xe0, 0x51, 0xce, 0xf9, 0x60, 0xaa, 0xc9, 0xb7, 0xf7,
+ 0x05, 0x06, 0xe0, 0x6b, 0xfc, 0x75, 0x2e, 0xe1, 0xe0, 0xaa, 0x59, 0xe1,
+ 0xe0, 0x55, 0xd4, 0xf4, 0x08, 0x06, 0x0e, 0x60, 0x9f, 0xed, 0xc4, 0xb6,
+ 0x77, 0x65, 0xee, 0xe0, 0x95, 0x7e, 0xf3, 0x02, 0x87, 0x75, 0x6e, 0x6f,
+ 0x6d, 0xe9, 0xd5, 0x01, 0xe9, 0xe0, 0x9d, 0x96, 0xe1, 0x02, 0x86, 0xfa,
+ 0x4c, 0x37, 0xe0, 0x3f, 0x6c, 0x73, 0x68, 0xe9, 0xe0, 0x64, 0x14, 0xf3,
+ 0x0d, 0x06, 0x04, 0x04, 0x05, 0x40, 0x44, 0x1c, 0x60, 0x92, 0xbd, 0xd7,
+ 0x82, 0xf5, 0x60, 0x4d, 0x8c, 0xd2, 0x86, 0xf4, 0xe0, 0x81, 0xbc, 0xf2,
+ 0xe0, 0x75, 0xc1, 0x68, 0x69, 0xeb, 0xce, 0x34, 0x65, 0xf2, 0x02, 0x93,
+ 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0xae, 0x04, 0xe0, 0xaa, 0x4e,
+ 0x67, 0x6f, 0x6f, 0xe7, 0xe0, 0xaa, 0x87, 0xae, 0x08, 0x0a, 0x0c, 0x04,
+ 0x51, 0xb5, 0xcd, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x79, 0x2e, 0xe5, 0xe0,
+ 0x8b, 0x54, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x63, 0x65, 0x72, 0xf4, 0xe0,
+ 0x70, 0x29, 0xe6, 0xe0, 0xaa, 0x63, 0x61, 0x73, 0x65, 0x69, 0x6e, 0x65,
+ 0xf4, 0xe0, 0x6f, 0xbf, 0xae, 0x11, 0x06, 0x60, 0x6b, 0x50, 0x4f, 0x05,
+ 0x57, 0x58, 0x51, 0xb1, 0x43, 0xc1, 0x41, 0x9f, 0xc1, 0x4f, 0xee, 0x60,
+ 0xa0, 0x5c, 0xc7, 0xf2, 0xeb, 0xe0, 0xa7, 0x20, 0xad, 0x09, 0x0a, 0x10,
+ 0x60, 0x79, 0x41, 0x02, 0x02, 0x82, 0x77, 0x65, 0x73, 0x74, 0xad, 0x60,
+ 0xa0, 0x70, 0xc5, 0x33, 0x67, 0x6f, 0x76, 0xad, 0x02, 0x83, 0x77, 0xe5,
+ 0x83, 0x65, 0x61, 0x73, 0xf4, 0xe0, 0x60, 0x70, 0x65, 0x61, 0x73, 0x74,
+ 0xad, 0x04, 0xe0, 0xa0, 0x52, 0x31, 0xae, 0x04, 0xe0, 0xa5, 0x83, 0xe1,
+ 0x60, 0xa1, 0xa2, 0xc3, 0xf3, 0xf2, 0x0b, 0x04, 0x05, 0x04, 0x04, 0x04,
+ 0x07, 0x0d, 0xe0, 0x63, 0xf8, 0xf5, 0xe0, 0x4c, 0xf7, 0x6f, 0xf7, 0xe0,
+ 0x4d, 0x1f, 0xee, 0xe0, 0x7e, 0x41, 0xec, 0xe0, 0x3b, 0x1e, 0xe9, 0xe0,
+ 0x7e, 0x39, 0x65, 0x73, 0x68, 0xe9, 0xe0, 0x4e, 0xbe, 0x62, 0x69, 0x6e,
+ 0xef, 0x02, 0x81, 0x2d, 0x70, 0x65, 0xf3, 0xe0, 0x8f, 0xdd, 0xe1, 0x09,
+ 0x05, 0x04, 0x60, 0x38, 0x60, 0xe0, 0x65, 0xae, 0x79, 0xe1, 0xe0, 0x70,
+ 0x67, 0xf5, 0xe0, 0xa4, 0x83, 0x73, 0x6f, 0xe5, 0xe0, 0xa4, 0x9b, 0xf0,
+ 0x08, 0x0c, 0x06, 0x04, 0x05, 0xe0, 0xa8, 0x0e, 0xf3, 0x04, 0xe0, 0xa9,
+ 0xaa, 0x75, 0xee, 0x60, 0x97, 0x6b, 0xd1, 0x03, 0xf0, 0x4f, 0x0c, 0xe0,
+ 0x87, 0x07, 0xef, 0xe0, 0x6a, 0xa7, 0x6c, 0xe9, 0xe0, 0xa8, 0x45, 0x61,
+ 0x61, 0x73, 0x2e, 0x6b, 0x61, 0x7a, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f,
+ 0x72, 0x74, 0xae, 0xe0, 0x57, 0x96, 0xef, 0x60, 0x40, 0x24, 0x5f, 0x65,
+ 0xe0, 0x47, 0x55, 0xee, 0x0c, 0x06, 0x0b, 0x06, 0x30, 0x06, 0x60, 0x83,
+ 0x1f, 0xe0, 0x24, 0x2a, 0x7a, 0x65, 0xee, 0xe0, 0x8d, 0x2c, 0x75, 0x73,
+ 0x75, 0x61, 0x6c, 0x70, 0x65, 0xf2, 0xe0, 0x78, 0xea, 0x6e, 0x61, 0xee,
+ 0xe0, 0xa3, 0x1a, 0xe9, 0x07, 0x0f, 0x0f, 0x06, 0xe0, 0xa5, 0xf4, 0xf6,
+ 0x02, 0x86, 0x65, 0x72, 0xf3, 0xe0, 0x8d, 0x75, 0xae, 0x60, 0x9d, 0xf1,
+ 0xc6, 0xa1, 0x73, 0x6f, 0x6e, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63,
+ 0x65, 0xf3, 0xe0, 0x90, 0xa2, 0xe3, 0x57, 0x2c, 0xe0, 0x8a, 0x7a, 0xb5,
+ 0xe0, 0xa8, 0xc4, 0xe4, 0x60, 0x8f, 0xac, 0xc5, 0xe8, 0x61, 0x7a, 0x75,
+ 0xeb, 0xe0, 0x70, 0x31, 0xed, 0x06, 0x09, 0x06, 0xe0, 0x6a, 0x0d, 0xe9,
+ 0x04, 0xe0, 0x91, 0x53, 0xe7, 0xe0, 0x6a, 0x16, 0xe2, 0x60, 0xa1, 0xee,
+ 0xc4, 0xc2, 0x61, 0xea, 0xe0, 0x6e, 0x58, 0xec, 0x05, 0x04, 0xe0, 0x6e,
+ 0xd2, 0xf3, 0xe0, 0x91, 0x5d, 0x6c, 0x65, 0x6e, 0xf3, 0x04, 0xe0, 0x56,
+ 0x60, 0x76, 0x61, 0xee, 0xe0, 0xa1, 0x67, 0xeb, 0x06, 0x09, 0x09, 0xe0,
+ 0xa8, 0xcb, 0xe9, 0x04, 0xe0, 0xa0, 0xf4, 0xe8, 0xe0, 0x67, 0xc3, 0x30,
+ 0x2e, 0x62, 0x69, 0x67, 0xf6, 0xe0, 0xa7, 0x7c, 0xae, 0x0d, 0x46, 0x35,
+ 0x60, 0x89, 0xf2, 0x51, 0xb1, 0x45, 0x60, 0x41, 0x23, 0xac, 0x70, 0x72,
+ 0x69, 0x6d, 0xe5, 0xe0, 0x23, 0x6c, 0x6a, 0xe9, 0x05, 0x08, 0xe0, 0x99,
+ 0xce, 0x74, 0x61, 0x77, 0x61, 0xf2, 0xe0, 0x70, 0x18, 0xe9, 0xe0, 0x57,
+ 0xd2, 0x69, 0x2e, 0x6e, 0x61, 0x62, 0x75, 0x2e, 0x63, 0x61, 0xf3, 0xe0,
+ 0xa6, 0xbe, 0x68, 0x2d, 0xef, 0xe0, 0x93, 0x27, 0xe7, 0x07, 0x60, 0x69,
+ 0x93, 0xe0, 0x3e, 0xf4, 0xe9, 0xe0, 0x2d, 0xa5, 0x66, 0xe3, 0xe0, 0x87,
+ 0x79, 0xe5, 0x04, 0xe0, 0x3e, 0x20, 0x6e, 0xef, 0x04, 0xe0, 0x9f, 0x16,
+ 0x68, 0xe1, 0xe0, 0x33, 0x07, 0xe4, 0x08, 0x04, 0x60, 0x5e, 0xef, 0xe0,
+ 0x47, 0x1c, 0xef, 0xe0, 0x4d, 0x41, 0xe9, 0x60, 0x84, 0x93, 0xe0, 0x22,
+ 0x28, 0x63, 0x68, 0xe9, 0x03, 0x0d, 0x84, 0xee, 0x02, 0x85, 0x6f, 0xed,
+ 0xe0, 0x52, 0x7e, 0x61, 0xe4, 0xe0, 0x52, 0xab, 0xeb, 0xe0, 0x57, 0x2d,
+ 0x68, 0xe1, 0xe0, 0x51, 0xa3, 0xe2, 0x06, 0x60, 0x86, 0x0b, 0xdf, 0x70,
+ 0xe5, 0x04, 0xe0, 0xa5, 0xc9, 0xf2, 0x02, 0x88, 0x73, 0x70, 0x61, 0x63,
+ 0xe5, 0xe0, 0x70, 0x7a, 0xae, 0xe0, 0x39, 0xa7, 0xe1, 0x60, 0x28, 0x29,
+ 0xe0, 0x7f, 0xf9, 0xb2, 0x02, 0x86, 0x2d, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
+ 0x2e, 0x78, 0x6e, 0xe2, 0xe0, 0x82, 0x2d, 0xae, 0x06, 0x60, 0x96, 0x06,
+ 0xd1, 0xfd, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0xec, 0xe0, 0x8c, 0x3a,
+ 0xf4, 0x27, 0x07, 0x2c, 0x13, 0x2c, 0x40, 0x66, 0x07, 0x40, 0xb7, 0x41,
+ 0x83, 0x04, 0x42, 0x22, 0x11, 0x21, 0x0a, 0x0c, 0x1e, 0x32, 0x40, 0x66,
+ 0x09, 0x40, 0xd3, 0x06, 0x0d, 0x42, 0x48, 0x60, 0x72, 0xbb, 0x50, 0xe3,
+ 0x4f, 0x60, 0xc8, 0x9b, 0x1f, 0x43, 0x78, 0xee, 0xe0, 0x73, 0x36, 0xf9,
+ 0x07, 0x12, 0x0a, 0x03, 0xe0, 0x9f, 0xf8, 0xf3, 0x06, 0x60, 0x97, 0x5e,
+ 0xcb, 0x82, 0xf6, 0x04, 0xe0, 0x97, 0xab, 0x1f, 0x43, 0xe6, 0xe0, 0x9b,
+ 0x95, 0x70, 0x65, 0x64, 0x72, 0x65, 0x61, 0xed, 0xe0, 0xa4, 0x07, 0xee,
+ 0xd0, 0x05, 0x63, 0xe8, 0xe0, 0x95, 0x13, 0xf7, 0x06, 0x60, 0x93, 0x92,
+ 0xd4, 0x07, 0x6d, 0x61, 0x69, 0x6c, 0xae, 0x60, 0x89, 0x8e, 0x5a, 0xe2,
+ 0xc2, 0xc2, 0xf6, 0x07, 0x05, 0x60, 0xa4, 0xc4, 0xc2, 0xbc, 0x65, 0xe4,
+ 0xe0, 0x61, 0x90, 0xae, 0x09, 0x06, 0x08, 0x60, 0x5b, 0xea, 0xe0, 0x47,
+ 0x25, 0xf4, 0x60, 0xa4, 0xaf, 0xc1, 0x23, 0xe9, 0x60, 0xa4, 0xca, 0x40,
+ 0x94, 0xc0, 0x8d, 0xe2, 0x60, 0x9c, 0xa4, 0x48, 0xee, 0xb2, 0xf5, 0x0c,
+ 0x08, 0x0a, 0x04, 0x0b, 0x1a, 0x09, 0x11, 0x60, 0xa4, 0x78, 0x9b, 0x79,
+ 0x65, 0x6e, 0x71, 0xf5, 0xe0, 0x9e, 0x0f, 0x78, 0x66, 0x61, 0x6d, 0x69,
+ 0x6c, 0xf9, 0xe0, 0xa4, 0x20, 0xf6, 0xe0, 0xa5, 0x03, 0xf3, 0x04, 0xe0,
+ 0xa5, 0xee, 0x63, 0x61, 0xee, 0xe0, 0x9d, 0x9a, 0xf2, 0x04, 0x07, 0x04,
+ 0x84, 0x79, 0x73, 0x74, 0xf9, 0xe0, 0x7e, 0x3b, 0xe9, 0xe0, 0x23, 0x42,
+ 0xe5, 0xe0, 0x94, 0x28, 0xae, 0x60, 0x94, 0x7d, 0xd0, 0xfd, 0xee, 0x04,
+ 0xe0, 0x9a, 0x98, 0xeb, 0xe0, 0xa3, 0xee, 0xec, 0x04, 0xe0, 0xa4, 0xcd,
+ 0x65, 0x61, 0x70, 0x2d, 0x70, 0x61, 0x72, 0x74, 0xee, 0xe0, 0x7c, 0xfd,
+ 0xe3, 0xe0, 0x66, 0x2c, 0xf4, 0x60, 0x43, 0xc2, 0xe0, 0x63, 0x38, 0xf3,
+ 0x06, 0x40, 0x98, 0x04, 0x04, 0x8a, 0xf5, 0x0e, 0x05, 0x06, 0x0b, 0x1e,
+ 0x0b, 0x07, 0x20, 0x04, 0x0b, 0x06, 0xe0, 0x5b, 0xe2, 0x79, 0xe1, 0xe0,
+ 0x64, 0x58, 0x77, 0x61, 0xee, 0xe0, 0x63, 0x01, 0x73, 0x68, 0x69, 0x6d,
+ 0x61, 0xae, 0x60, 0x8a, 0x92, 0xd6, 0x6b, 0x72, 0xf5, 0x06, 0x04, 0x03,
+ 0xe0, 0x7c, 0xff, 0xf4, 0xe0, 0x3c, 0xbf, 0xef, 0xd0, 0xc0, 0xe7, 0x04,
+ 0xe0, 0x65, 0x89, 0xe1, 0x04, 0xe0, 0x7a, 0x94, 0x73, 0xe8, 0xe0, 0x4f,
+ 0x6f, 0xee, 0x02, 0x84, 0xef, 0xe0, 0x4d, 0x11, 0xe1, 0xe0, 0x69, 0x73,
+ 0x6d, 0x61, 0x67, 0xef, 0xe0, 0x56, 0xf6, 0xeb, 0x02, 0x8e, 0xf5, 0x05,
+ 0x04, 0xe0, 0x99, 0x92, 0xed, 0xe0, 0x62, 0x0b, 0xe2, 0xe0, 0x61, 0x5c,
+ 0xe9, 0x02, 0x86, 0x79, 0x6f, 0xee, 0xe0, 0x35, 0xa0, 0x67, 0x61, 0xf4,
+ 0xe0, 0xa4, 0x46, 0xe9, 0xe0, 0x5b, 0xd7, 0x67, 0xe1, 0x04, 0xe0, 0x9a,
+ 0x71, 0x72, 0xf5, 0xe0, 0x69, 0x7c, 0x63, 0x68, 0xe9, 0xe0, 0x4f, 0xc7,
+ 0xe2, 0x04, 0xe0, 0xa1, 0x1e, 0xe1, 0x04, 0xe0, 0x4f, 0x0c, 0xed, 0xe0,
+ 0x3c, 0x10, 0xf4, 0xe0, 0x87, 0x75, 0xeb, 0xe0, 0x94, 0x77, 0x65, 0x6c,
+ 0x69, 0x6e, 0x6f, 0x67, 0xf2, 0xe0, 0x9a, 0x55, 0xae, 0x60, 0xa3, 0xed,
+ 0xc1, 0xf3, 0xf2, 0x11, 0x08, 0x1e, 0x04, 0x23, 0x11, 0x40, 0x44, 0x40,
+ 0xc7, 0x60, 0x8f, 0x49, 0x51, 0x4b, 0xc4, 0x2e, 0x1f, 0xc3, 0x04, 0xe0,
+ 0x6e, 0x6d, 0xf8, 0xbc, 0xf9, 0x03, 0x05, 0x8b, 0x73, 0xe9, 0xe0, 0x9e,
+ 0x72, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x66, 0x6c, 0xe1, 0xe0, 0x8a, 0xc6,
+ 0x2d, 0x73, 0x6e, 0x6f, 0x77, 0x70, 0xec, 0xe0, 0x4a, 0x0d, 0xf5, 0xe0,
+ 0x98, 0xa2, 0xef, 0x05, 0x05, 0x09, 0x05, 0x84, 0x6e, 0xe4, 0xe0, 0x98,
+ 0x8e, 0x6d, 0xf3, 0x60, 0x90, 0x30, 0x4c, 0xe7, 0xc2, 0x2e, 0x69, 0xf4,
+ 0xe0, 0x9f, 0x26, 0xe7, 0xe0, 0x71, 0x6e, 0x61, 0x6e, 0xe4, 0xe0, 0x67,
+ 0x3d, 0xe9, 0x02, 0x89, 0x74, 0x6f, 0x6e, 0x2e, 0x7a, 0xef, 0xe0, 0x4c,
+ 0xd7, 0x65, 0xf3, 0xe0, 0x22, 0xdb, 0xe5, 0x02, 0x85, 0x76, 0xe9, 0xe0,
+ 0x8c, 0xa2, 0x6e, 0xf4, 0x04, 0xe0, 0xa3, 0x68, 0x69, 0xee, 0x03, 0x1c,
+ 0x81, 0xef, 0x06, 0x03, 0x07, 0xe0, 0xa3, 0x53, 0xad, 0x02, 0x87, 0xf3,
+ 0x15, 0x04, 0x09, 0xe0, 0x95, 0x43, 0xe1, 0x05, 0x60, 0x9e, 0x05, 0x81,
+ 0x6c, 0xf4, 0xe0, 0x9e, 0x00, 0x2d, 0xf3, 0x02, 0x84, 0x1f, 0x43, 0xfc,
+ 0x85, 0xf5, 0x02, 0x81, 0x65, 0xe4, 0x04, 0xe0, 0x95, 0x43, 0xad, 0xe0,
+ 0x95, 0x42, 0xe1, 0x09, 0x1d, 0x04, 0x40, 0x66, 0x07, 0x15, 0x0c, 0x8b,
+ 0xf6, 0x04, 0xe0, 0x95, 0x89, 0x65, 0xec, 0x05, 0x09, 0xe0, 0xa5, 0x6a,
+ 0x65, 0x72, 0xf3, 0x60, 0x44, 0x77, 0xe0, 0x60, 0xf9, 0xae, 0x60, 0xa0,
+ 0x5c, 0x42, 0xfb, 0xc0, 0x8d, 0xf0, 0xe0, 0x9c, 0x6a, 0xee, 0x0c, 0x2a,
+ 0x60, 0x45, 0x10, 0x60, 0x53, 0xef, 0x42, 0xf4, 0xc2, 0x85, 0xf3, 0x03,
+ 0x14, 0x84, 0x75, 0x72, 0x6c, 0xae, 0x03, 0x05, 0x84, 0x6e, 0xec, 0xe0,
+ 0xa5, 0x40, 0xe5, 0xe0, 0x5e, 0x5d, 0xe2, 0xe0, 0x86, 0x61, 0xf0, 0xe0,
+ 0x7e, 0x01, 0x6c, 0x61, 0x74, 0xe5, 0x02, 0x84, 0xe4, 0xe0, 0x84, 0x47,
+ 0xae, 0xe0, 0x86, 0xd8, 0xe9, 0x03, 0x0b, 0x89, 0x62, 0x61, 0x72, 0x6c,
+ 0x65, 0x74, 0x74, 0xe1, 0xe0, 0x9e, 0x00, 0x61, 0x6e, 0x64, 0x72, 0x69,
+ 0xe1, 0xe0, 0x9c, 0x07, 0xad, 0x02, 0x8b, 0x62, 0x61, 0x72, 0x6c, 0x65,
+ 0x74, 0x74, 0xe1, 0xe0, 0x94, 0x3c, 0x61, 0x6e, 0x64, 0x72, 0x69, 0xe1,
+ 0xe0, 0x9b, 0xef, 0x69, 0xee, 0x60, 0x89, 0x21, 0xc5, 0xb1, 0x66, 0x66,
+ 0x69, 0xe3, 0x02, 0x87, 0x70, 0x6c, 0x65, 0xf8, 0xe0, 0x8c, 0x58, 0x6d,
+ 0x61, 0x6e, 0x61, 0xe7, 0xe0, 0x85, 0x9b, 0x65, 0x75, 0x6d, 0x74, 0x67,
+ 0x65, 0x72, 0x61, 0xe4, 0xe0, 0x7b, 0xa0, 0xe4, 0x04, 0xe0, 0x8a, 0xc7,
+ 0xe5, 0x60, 0x88, 0xf6, 0xdb, 0xd4, 0xae, 0xdb, 0x1f, 0xae, 0x60, 0x9d,
+ 0xdc, 0x44, 0x90, 0xc0, 0x6e, 0xf0, 0xe0, 0xa2, 0x63, 0xef, 0x1a, 0x0b,
+ 0x40, 0x5c, 0x14, 0x12, 0x0f, 0x24, 0x22, 0x0a, 0x0c, 0x2c, 0x2b, 0x04,
+ 0x40, 0x50, 0x0e, 0x2a, 0x04, 0x07, 0x0f, 0x60, 0x93, 0x0c, 0xcf, 0x9a,
+ 0xfa, 0x04, 0xe0, 0x3f, 0xd0, 0x73, 0x64, 0xe5, 0xe0, 0xa3, 0x47, 0xf9,
+ 0x06, 0x40, 0x43, 0xe0, 0xa1, 0x8a, 0xef, 0x0d, 0x18, 0x04, 0x03, 0x08,
+ 0x04, 0x06, 0x60, 0x60, 0x69, 0xe0, 0x3d, 0x58, 0xf4, 0x03, 0x04, 0x85,
+ 0xf3, 0xe0, 0x7e, 0x5d, 0x6f, 0xed, 0xe0, 0xa2, 0x68, 0xe1, 0x04, 0xe0,
+ 0xa4, 0x69, 0xae, 0x60, 0x9e, 0x98, 0xc3, 0x68, 0x73, 0xe1, 0xd9, 0x7b,
+ 0xef, 0xc5, 0x1f, 0xee, 0x60, 0x88, 0x2f, 0x4f, 0x95, 0xca, 0x6e, 0xeb,
+ 0xe0, 0x59, 0xa2, 0x68, 0x61, 0xf3, 0xe0, 0x29, 0xb7, 0xe1, 0xe0, 0x97,
+ 0xb1, 0xe1, 0x05, 0x08, 0xe0, 0xa2, 0x30, 0x6d, 0x61, 0xae, 0x60, 0x98,
+ 0xa2, 0xc9, 0x9d, 0xeb, 0xe0, 0x98, 0x23, 0xf7, 0x02, 0x8c, 0xee, 0x04,
+ 0xe0, 0xa4, 0x2c, 0x6e, 0x65, 0x77, 0xf3, 0xe0, 0x95, 0xff, 0x61, 0xe4,
+ 0xe0, 0x3a, 0x23, 0x75, 0xf2, 0x04, 0xe0, 0xa1, 0x5e, 0x69, 0x73, 0x6d,
+ 0xae, 0x60, 0x74, 0x40, 0x60, 0x2a, 0xc9, 0xc0, 0x5d, 0xf4, 0x04, 0xe0,
+ 0x7c, 0xe2, 0x74, 0x6f, 0x72, 0x69, 0xae, 0x60, 0x87, 0x3c, 0xda, 0xca,
+ 0xf3, 0x09, 0x07, 0x05, 0x60, 0x4d, 0xd4, 0xe0, 0x53, 0xbf, 0x68, 0xe9,
+ 0x60, 0x9c, 0xbf, 0xc0, 0xa1, 0x63, 0xe1, 0xe0, 0x9b, 0x14, 0xe1, 0x04,
+ 0xe0, 0x9d, 0x5b, 0x73, 0x68, 0x69, 0x6d, 0x69, 0xfa, 0xe0, 0x32, 0x38,
+ 0xf2, 0x07, 0x04, 0x03, 0x08, 0xe0, 0x22, 0xec, 0xf5, 0xe0, 0x40, 0x69,
+ 0xf3, 0xd8, 0x56, 0xe9, 0x04, 0xe0, 0x97, 0xec, 0xe4, 0xce, 0xba, 0xe1,
+ 0x04, 0xe0, 0xa1, 0x35, 0x68, 0x69, 0xed, 0xe0, 0x5f, 0x24, 0xf0, 0x04,
+ 0xe0, 0xa3, 0xb4, 0x61, 0xfa, 0xe0, 0x69, 0x13, 0xef, 0x04, 0xe0, 0x9e,
+ 0x52, 0xec, 0x60, 0x60, 0x82, 0xe0, 0x40, 0x6b, 0xee, 0x09, 0x0a, 0x06,
+ 0x09, 0x4e, 0x74, 0xe0, 0x60, 0x73, 0xef, 0x04, 0xe0, 0x6b, 0x9c, 0x73,
+ 0xe8, 0xe0, 0x3e, 0xa8, 0x6b, 0x6f, 0x74, 0xf3, 0xdc, 0xd9, 0x64, 0x61,
+ 0x62, 0x61, 0x79, 0xe1, 0xe0, 0x5f, 0x50, 0xe1, 0x04, 0xe0, 0x53, 0xc8,
+ 0xed, 0xe0, 0x6a, 0x91, 0xed, 0x05, 0x04, 0x16, 0xd0, 0x7d, 0x6f, 0xe2,
+ 0xce, 0x63, 0xe9, 0x0d, 0x04, 0x60, 0x29, 0xee, 0x5f, 0x9c, 0x60, 0x21,
+ 0x84, 0xe0, 0x34, 0xe4, 0xf9, 0xe0, 0x6a, 0x2b, 0xeb, 0xe0, 0x73, 0xea,
+ 0xe1, 0x04, 0xe0, 0xa1, 0x48, 0x6b, 0x6f, 0xed, 0xe0, 0x90, 0x45, 0xec,
+ 0xe0, 0x7d, 0x53, 0xeb, 0x08, 0x04, 0x15, 0x0f, 0x07, 0xe0, 0x70, 0x4a,
+ 0xf9, 0xe0, 0x45, 0x03, 0xf5, 0x02, 0x87, 0x79, 0x61, 0x6d, 0xe1, 0xe0,
+ 0xa0, 0xcb, 0x73, 0x68, 0x69, 0x6d, 0x61, 0xae, 0x60, 0x9d, 0x30, 0xc3,
+ 0xfd, 0xef, 0x02, 0x86, 0x72, 0x6f, 0xfa, 0xe0, 0x27, 0xec, 0x6e, 0x61,
+ 0xed, 0xe0, 0x96, 0x83, 0xe9, 0x60, 0x27, 0xe1, 0xe0, 0x71, 0xcb, 0xe1,
+ 0x03, 0x06, 0x87, 0x73, 0x68, 0xe9, 0xe0, 0x53, 0x56, 0x6d, 0x61, 0x63,
+ 0xe8, 0xe0, 0x51, 0xc0, 0x69, 0xae, 0x60, 0x9a, 0xdb, 0xc2, 0x52, 0xe8,
+ 0x06, 0x60, 0x86, 0xae, 0xcf, 0x46, 0x6e, 0x6f, 0x73, 0xe8, 0xe0, 0xa0,
+ 0xbb, 0xe7, 0x07, 0x05, 0x08, 0x04, 0xe0, 0x99, 0x86, 0x75, 0xf2, 0xe0,
+ 0x86, 0x8f, 0x6c, 0x69, 0x61, 0x74, 0xf4, 0xe0, 0x30, 0x86, 0xe9, 0xe0,
+ 0x46, 0x23, 0xe1, 0x05, 0x05, 0xe0, 0x6a, 0x19, 0x6e, 0xe5, 0xe0, 0xa0,
+ 0x98, 0x6b, 0x75, 0xf3, 0xe0, 0x9f, 0x58, 0xe5, 0xe0, 0x9c, 0xed, 0x64,
+ 0xe1, 0x60, 0x97, 0x03, 0xc9, 0x2d, 0x63, 0x68, 0xe9, 0x04, 0xe0, 0x9d,
+ 0xdb, 0x67, 0x69, 0xae, 0x60, 0x96, 0xaf, 0xc9, 0xfe, 0xe2, 0x05, 0x07,
+ 0xe0, 0x4d, 0xab, 0x69, 0x73, 0x68, 0xe9, 0xe0, 0x56, 0x43, 0xe5, 0x60,
+ 0x9d, 0x41, 0x98, 0xee, 0x04, 0xe0, 0xa2, 0x8f, 0xae, 0x06, 0x60, 0x9c,
+ 0xfc, 0xc3, 0x37, 0x6f, 0xf8, 0xe0, 0x52, 0x54, 0xed, 0x08, 0x60, 0x72,
+ 0x0b, 0x5e, 0xe8, 0xd1, 0x87, 0xae, 0x11, 0x60, 0x90, 0x69, 0x45, 0x9d,
+ 0x03, 0x1d, 0x47, 0x35, 0x13, 0x11, 0x43, 0x02, 0x11, 0xc0, 0x8b, 0xed,
+ 0x60, 0x95, 0xff, 0xcc, 0x67, 0xec, 0x04, 0xe0, 0xa2, 0x5d, 0x6f, 0xee,
+ 0xe0, 0x96, 0xdf, 0xeb, 0x05, 0x18, 0xe0, 0xa2, 0x3a, 0x73, 0x61, 0xf4,
+ 0xe0, 0x9f, 0x41, 0xea, 0x0b, 0x04, 0x02, 0x06, 0x60, 0x8e, 0x2d, 0x4b,
+ 0xf4, 0xc8, 0x13, 0x1f, 0x43, 0xf8, 0xa8, 0xef, 0xa6, 0x6d, 0x61, 0xf8,
+ 0xe0, 0x9a, 0x24, 0x65, 0x6c, 0xe4, 0xe0, 0x8b, 0x4d, 0xe9, 0x08, 0x07,
+ 0x09, 0x04, 0x07, 0x0a, 0xdf, 0x70, 0xf2, 0x60, 0x68, 0xd0, 0xe0, 0x2c,
+ 0xd8, 0xee, 0x04, 0xe0, 0x9b, 0x5d, 0xe7, 0xe0, 0x95, 0xeb, 0xed, 0xe0,
+ 0xa0, 0x2b, 0x65, 0xee, 0x60, 0x92, 0x55, 0xc3, 0xd1, 0x63, 0x6b, 0x65,
+ 0x74, 0xf3, 0x60, 0xa0, 0xb3, 0xc1, 0x52, 0xe1, 0xe0, 0xa0, 0x05, 0xe8,
+ 0x0a, 0x0c, 0x08, 0x10, 0x17, 0x60, 0x9f, 0x17, 0xc2, 0x9f, 0x75, 0x61,
+ 0x74, 0x68, 0x69, 0x65, 0x6e, 0x68, 0xf5, 0xe0, 0x8f, 0x86, 0x72, 0x75,
+ 0x68, 0x65, 0xf2, 0xe0, 0x9e, 0x0e, 0xe9, 0x04, 0xe0, 0x79, 0xbc, 0x6e,
+ 0x67, 0x64, 0x75, 0x73, 0x74, 0x64, 0xe1, 0xe0, 0x94, 0xe2, 0xe5, 0x08,
+ 0x07, 0x60, 0x4a, 0x86, 0xe0, 0x55, 0x92, 0x77, 0x6f, 0x72, 0xeb, 0xe0,
+ 0x5b, 0x81, 0x61, 0xf4, 0x60, 0x8d, 0x74, 0xd1, 0x2b, 0xe1, 0x02, 0x92,
+ 0x6e, 0xe8, 0x04, 0xe0, 0x49, 0x55, 0x70, 0x68, 0x6f, 0x68, 0x6f, 0x63,
+ 0x68, 0x69, 0xed, 0xe0, 0x91, 0xb3, 0xe9, 0x04, 0xe0, 0x5b, 0xf3, 0x6e,
+ 0x67, 0xf5, 0xe0, 0x59, 0xf5, 0xe7, 0x04, 0xe0, 0xa1, 0x91, 0xef, 0xe0,
+ 0x3b, 0x6f, 0xe5, 0x0e, 0x1c, 0x16, 0x18, 0x20, 0x21, 0x26, 0x60, 0x7d,
+ 0x3d, 0x51, 0xb3, 0xc4, 0xe7, 0xf3, 0x02, 0x91, 0xf4, 0x05, 0x07, 0xe0,
+ 0x95, 0x21, 0xae, 0x60, 0x2c, 0xd0, 0xe0, 0x70, 0xa3, 0xad, 0xe0, 0x3a,
+ 0x72, 0x68, 0x69, 0x6b, 0x61, 0xe7, 0xe0, 0x9f, 0x30, 0xf2, 0x05, 0x0a,
+ 0xe0, 0x8e, 0xde, 0xee, 0x04, 0xe0, 0x98, 0x62, 0x6f, 0x70, 0xe9, 0xcf,
+ 0x36, 0x6d, 0x65, 0xfa, 0xe0, 0x9f, 0x12, 0xee, 0x07, 0x04, 0x04, 0x04,
+ 0xe0, 0x5e, 0x49, 0xee, 0xe0, 0x62, 0x85, 0xeb, 0xe0, 0x29, 0xf7, 0xe5,
+ 0xe0, 0x90, 0xc0, 0xe4, 0xe0, 0x2f, 0x71, 0xed, 0x02, 0x99, 0xf0, 0x03,
+ 0x06, 0x8b, 0x75, 0x72, 0xec, 0xe0, 0x6a, 0x98, 0x69, 0xef, 0x02, 0x81,
+ 0x2d, 0x6f, 0x6c, 0xe2, 0xe0, 0x9a, 0x08, 0xad, 0xe0, 0x77, 0x27, 0x61,
+ 0xf3, 0xce, 0xc8, 0xec, 0x06, 0x60, 0x8f, 0x34, 0xd1, 0xd9, 0xe5, 0x02,
+ 0x8f, 0x62, 0x69, 0x74, 0xae, 0x06, 0x60, 0x9d, 0x5d, 0xc2, 0x52, 0x78,
+ 0xf9, 0xe0, 0x82, 0x81, 0x2e, 0x61, 0x6d, 0x75, 0xee, 0xe0, 0x8b, 0x1d,
+ 0xe3, 0x03, 0x05, 0x95, 0x6e, 0xef, 0xe0, 0x74, 0xbc, 0xe8, 0x05, 0x07,
+ 0xe0, 0xa0, 0xdd, 0x6e, 0x6f, 0x6c, 0xef, 0xe0, 0x71, 0x37, 0x2e, 0x6f,
+ 0x72, 0x61, 0xee, 0xe0, 0x9c, 0xb3, 0xae, 0x60, 0x95, 0x6f, 0x42, 0x15,
+ 0xc7, 0xac, 0xe1, 0x02, 0x86, 0xed, 0x60, 0x8a, 0xb0, 0xd6, 0x19, 0x63,
+ 0x68, 0x65, 0x73, 0x2d, 0x79, 0xef, 0xe0, 0x69, 0xb7, 0xe4, 0x60, 0x9e,
+ 0x00, 0xc2, 0xb9, 0xe3, 0x08, 0x60, 0x9e, 0x3f, 0x40, 0xc7, 0xc1, 0xa5,
+ 0xf0, 0xe0, 0x58, 0x6e, 0xe1, 0x19, 0x04, 0x0b, 0x0a, 0x38, 0x08, 0x2c,
+ 0x05, 0x1f, 0x29, 0x40, 0xc8, 0x07, 0x3d, 0x03, 0x0e, 0x13, 0x0f, 0x60,
+ 0x92, 0x25, 0x45, 0x41, 0xc4, 0xc0, 0xf9, 0xe0, 0x90, 0x9a, 0xf8, 0x04,
+ 0xe0, 0xa0, 0x84, 0xe9, 0x60, 0x9e, 0xde, 0xc1, 0xa5, 0x77, 0x61, 0x72,
+ 0x61, 0x6d, 0x6f, 0xf4, 0xe0, 0x5c, 0x18, 0xf4, 0x04, 0x05, 0x0a, 0x9a,
+ 0x74, 0xef, 0xe0, 0x9e, 0x98, 0x73, 0x75, 0x6e, 0x6f, 0xae, 0x60, 0x9b,
+ 0x05, 0xc1, 0xf8, 0xe5, 0x03, 0x0a, 0x86, 0x79, 0x61, 0x6d, 0x61, 0xae,
+ 0x60, 0x94, 0xbc, 0xc9, 0x6b, 0x73, 0x68, 0xe9, 0xe0, 0x56, 0xeb, 0x62,
+ 0x61, 0xf9, 0xe0, 0x3c, 0x0a, 0xe1, 0x04, 0xe0, 0x9e, 0x9e, 0x6d, 0xef,
+ 0xe0, 0x7d, 0x7a, 0xf3, 0x03, 0xd8, 0xe2, 0xe8, 0xe0, 0x83, 0xc3, 0xf2,
+ 0x05, 0x0c, 0x06, 0x04, 0x87, 0xf5, 0x04, 0xe0, 0x96, 0xbe, 0x6d, 0x69,
+ 0x7a, 0xf5, 0xe0, 0x99, 0x53, 0x70, 0x69, 0xf4, 0xe0, 0x95, 0x2d, 0xee,
+ 0xe0, 0x45, 0x32, 0xe7, 0x60, 0x2b, 0x57, 0xe0, 0x61, 0x22, 0xe1, 0x60,
+ 0x43, 0x0e, 0x60, 0x51, 0xea, 0xc6, 0x18, 0x6f, 0xe2, 0xe0, 0x73, 0xac,
+ 0xee, 0x05, 0x04, 0xe0, 0x90, 0x4d, 0x6f, 0xe8, 0xd5, 0x78, 0xe1, 0x07,
+ 0x05, 0x60, 0x89, 0x34, 0xd4, 0xd0, 0x67, 0xf5, 0xe0, 0x46, 0x16, 0x62,
+ 0x65, 0xae, 0x60, 0x91, 0x12, 0xc3, 0xb8, 0xed, 0x02, 0x84, 0xe2, 0xe0,
+ 0x5d, 0xda, 0xe1, 0x0a, 0x04, 0x09, 0x04, 0x60, 0x4b, 0x70, 0xe0, 0x50,
+ 0xb5, 0xf9, 0xe0, 0x62, 0x70, 0x74, 0x73, 0x75, 0x6b, 0x75, 0xf2, 0xe0,
+ 0x83, 0x73, 0xed, 0xe0, 0x4f, 0x70, 0xeb, 0x50, 0x4f, 0xe0, 0x36, 0x12,
+ 0xeb, 0x0a, 0x03, 0x12, 0x0f, 0x60, 0x49, 0x77, 0xe0, 0x53, 0xe3, 0xeb,
+ 0xca, 0x47, 0xe9, 0x07, 0x60, 0x55, 0x24, 0xe0, 0x3e, 0xd1, 0x6e, 0xef,
+ 0x04, 0xe0, 0x9a, 0x3e, 0xf5, 0xe0, 0x82, 0xea, 0xe5, 0x02, 0x89, 0xf4,
+ 0x04, 0xe0, 0x88, 0x11, 0xef, 0xe0, 0x5f, 0x9b, 0xe8, 0xc9, 0x25, 0xe1,
+ 0x0e, 0x06, 0x0e, 0x14, 0x12, 0x08, 0x05, 0x0d, 0x0f, 0x04, 0x1f, 0xe0,
+ 0x99, 0x96, 0x7a, 0x61, 0xeb, 0xe0, 0x48, 0x20, 0x79, 0x61, 0x6d, 0x61,
+ 0xae, 0x04, 0xe0, 0x9c, 0x06, 0xe7, 0x60, 0x96, 0x05, 0x8d, 0xf4, 0x05,
+ 0x0a, 0xe0, 0x5e, 0x45, 0x73, 0x75, 0x6b, 0x69, 0xae, 0x60, 0x99, 0x85,
+ 0xc3, 0xb2, 0xef, 0xe0, 0x5c, 0x69, 0xf3, 0x05, 0x05, 0xe0, 0x9a, 0x0d,
+ 0x68, 0xe9, 0xe0, 0x33, 0x34, 0xe1, 0x60, 0x4f, 0xa3, 0xe0, 0x44, 0x13,
+ 0x72, 0x61, 0x7a, 0x75, 0xeb, 0xe0, 0x5d, 0x38, 0x6f, 0xeb, 0xe0, 0x4c,
+ 0x3b, 0xee, 0x02, 0x85, 0x65, 0xfa, 0xe0, 0x49, 0xeb, 0x61, 0xe2, 0xe0,
+ 0x62, 0x5f, 0xed, 0x02, 0x89, 0x6f, 0x72, 0x69, 0xae, 0x60, 0x97, 0x3f,
+ 0xc4, 0x7b, 0xe1, 0xc0, 0x86, 0xe9, 0xe0, 0x5a, 0xe6, 0x68, 0xe1, 0x07,
+ 0x04, 0x05, 0x09, 0xe0, 0x66, 0x16, 0xf3, 0xe0, 0x93, 0x4a, 0x72, 0xf5,
+ 0xe0, 0x90, 0x34, 0x6d, 0x61, 0xae, 0x60, 0x72, 0xe7, 0xe0, 0x26, 0x4a,
+ 0xe7, 0xe0, 0x82, 0xa5, 0xe7, 0xe0, 0x9b, 0x8c, 0x6a, 0xe9, 0x60, 0x34,
+ 0x39, 0xcd, 0xc3, 0xe9, 0x0c, 0x0f, 0x04, 0x05, 0x05, 0x08, 0x05, 0x60,
+ 0x5a, 0x69, 0xcb, 0x18, 0x73, 0x68, 0xe9, 0x02, 0x84, 0xee, 0xe0, 0x98,
+ 0xe6, 0xae, 0x60, 0x99, 0x75, 0xc3, 0x39, 0xf2, 0xe0, 0x4b, 0xd1, 0x70,
+ 0xe5, 0xe0, 0x9c, 0x5e, 0x6e, 0xe1, 0xe0, 0x4d, 0x83, 0x6b, 0x69, 0xae,
+ 0x60, 0x93, 0x28, 0xc9, 0x90, 0x6a, 0xe9, 0xe0, 0x93, 0x98, 0x66, 0x75,
+ 0xee, 0xe0, 0x78, 0x78, 0xe8, 0xc8, 0x76, 0x67, 0xe1, 0x07, 0x60, 0x31,
+ 0x5b, 0xe0, 0x28, 0x4a, 0x6a, 0xef, 0xe0, 0x65, 0x6f, 0xe4, 0x02, 0x8b,
+ 0xef, 0x04, 0xe0, 0x54, 0x15, 0x74, 0x73, 0xf5, 0xe0, 0x8f, 0xb5, 0x61,
+ 0xef, 0xe0, 0x82, 0x63, 0x63, 0x68, 0xe9, 0x02, 0x84, 0xeb, 0xe0, 0x71,
+ 0xe2, 0x61, 0x72, 0xe1, 0xe0, 0x53, 0xe0, 0xe2, 0x06, 0x06, 0x09, 0xe0,
+ 0x9e, 0x66, 0x75, 0x73, 0xe5, 0xe0, 0x9c, 0x09, 0x69, 0x74, 0x6f, 0x72,
+ 0x64, 0x65, 0xf2, 0xd5, 0xde, 0x61, 0x79, 0x61, 0xed, 0xe0, 0x65, 0xf5,
+ 0x33, 0x6c, 0x33, 0x70, 0xb0, 0xe0, 0x3c, 0x5d, 0xf3, 0x2a, 0x28, 0x1e,
+ 0x40, 0x52, 0x06, 0x31, 0x26, 0x40, 0xf0, 0x42, 0x14, 0x1d, 0x16, 0x11,
+ 0x40, 0x62, 0x40, 0xe2, 0x2e, 0x3a, 0x22, 0x40, 0x99, 0x07, 0x40, 0x96,
+ 0x42, 0xb8, 0x09, 0x06, 0x42, 0x18, 0x16, 0x40, 0xe8, 0x0f, 0x42, 0xa1,
+ 0x05, 0xc1, 0x99, 0x1f, 0xc3, 0x05, 0x1b, 0xe0, 0x8d, 0xb9, 0xf8, 0x04,
+ 0x09, 0x05, 0x84, 0xf2, 0x44, 0xd4, 0x0a, 0x49, 0x98, 0xe0, 0x77, 0x83,
+ 0x6e, 0x64, 0xf2, 0xc5, 0x01, 0xed, 0xe0, 0x92, 0xce, 0xe7, 0xe0, 0x86,
+ 0xf5, 0x61, 0xec, 0x60, 0x8a, 0xdf, 0x82, 0xfa, 0x06, 0x04, 0x05, 0xe0,
+ 0x9d, 0xf4, 0xeb, 0xe0, 0x42, 0xaf, 0x65, 0xf8, 0xe0, 0x9c, 0xab, 0x63,
+ 0xfa, 0x02, 0x85, 0x79, 0xf4, 0xe0, 0x61, 0xa5, 0x65, 0xe3, 0xe0, 0x8b,
+ 0xbc, 0xf9, 0x09, 0x0f, 0x2d, 0x08, 0x60, 0x8e, 0x6b, 0xcf, 0x2d, 0xf3,
+ 0x02, 0x85, 0x74, 0xe5, 0xe0, 0x7f, 0xed, 0x2e, 0x71, 0x63, 0xf8, 0xe0,
+ 0x8e, 0xb9, 0xee, 0x02, 0xa2, 0xef, 0x02, 0x9a, 0x6c, 0x6f, 0x67, 0xf9,
+ 0x04, 0xe0, 0x87, 0x14, 0x2d, 0xe4, 0x04, 0xe0, 0x77, 0x82, 0x69, 0x73,
+ 0x6b, 0x73, 0x74, 0x61, 0x74, 0x69, 0xef, 0xe0, 0x73, 0x25, 0x2d, 0xe4,
+ 0xe0, 0x77, 0x74, 0x63, 0x6c, 0x6f, 0x75, 0xe4, 0xe0, 0x9d, 0x16, 0x6b,
+ 0x6b, 0x79, 0x6c, 0xf6, 0xe0, 0x8d, 0x66, 0xe4, 0xe0, 0x90, 0x92, 0xf8,
+ 0x60, 0x89, 0x8c, 0xd4, 0x07, 0xf7, 0x03, 0x1e, 0x8a, 0xe9, 0x06, 0x08,
+ 0x06, 0xe0, 0x95, 0x78, 0x6e, 0x6f, 0x75, 0x6a, 0x73, 0xe3, 0xd9, 0x7d,
+ 0x65, 0x62, 0xef, 0xe0, 0x8b, 0x49, 0x64, 0x6e, 0xe9, 0x60, 0x3d, 0x2b,
+ 0xe0, 0x25, 0xd3, 0x65, 0x65, 0x74, 0x70, 0x65, 0x70, 0xf0, 0xe0, 0x4f,
+ 0x97, 0x61, 0xf4, 0xe0, 0x87, 0x22, 0xf6, 0x0b, 0x05, 0x0b, 0x60, 0x5d,
+ 0xb3, 0x60, 0x3d, 0x38, 0xc2, 0x56, 0x6e, 0xad, 0xe0, 0x61, 0xda, 0xe5,
+ 0x02, 0x84, 0xec, 0xe0, 0x63, 0x28, 0xe9, 0xe0, 0x94, 0x67, 0x63, 0x2e,
+ 0x66, 0x69, 0x72, 0x65, 0xee, 0xe0, 0x69, 0x4b, 0xf5, 0x12, 0x11, 0x0b,
+ 0x0e, 0x19, 0x24, 0x13, 0x1c, 0x10, 0x0b, 0x0a, 0x0c, 0x06, 0x05, 0x04,
+ 0xe0, 0x9c, 0x4e, 0xfa, 0x04, 0xe0, 0x53, 0x7e, 0xf5, 0x04, 0xe0, 0x94,
+ 0x58, 0xeb, 0x60, 0x48, 0x2b, 0xe0, 0x52, 0x82, 0x77, 0xe1, 0x04, 0xe0,
+ 0x99, 0xa4, 0x6c, 0xeb, 0xe0, 0x28, 0x4b, 0xf3, 0x02, 0x86, 0x6f, 0x6e,
+ 0xef, 0xe0, 0x92, 0x36, 0x61, 0xeb, 0xe0, 0x62, 0x56, 0xf2, 0x06, 0x09,
+ 0x05, 0xe0, 0x91, 0x84, 0x76, 0x65, 0x79, 0x73, 0x2e, 0xf3, 0xe0, 0x9c,
+ 0x70, 0x6e, 0xe1, 0xe0, 0x95, 0x3b, 0xe7, 0xe0, 0x76, 0x1f, 0xf0, 0x03,
+ 0x0b, 0x88, 0xf0, 0x03, 0xd3, 0x15, 0xec, 0x60, 0x44, 0xcb, 0xe0, 0x55,
+ 0x83, 0x65, 0x72, 0x73, 0x61, 0xec, 0xe0, 0x8d, 0x27, 0x61, 0x62, 0x61,
+ 0x73, 0x65, 0xae, 0x60, 0x77, 0xe0, 0x4b, 0x1e, 0xd9, 0x64, 0xee, 0x07,
+ 0x60, 0x47, 0x54, 0xe0, 0x50, 0xb7, 0xee, 0x04, 0xe0, 0x95, 0x03, 0x79,
+ 0x64, 0xe1, 0xe0, 0x93, 0x69, 0xed, 0x05, 0x10, 0xe0, 0x80, 0xa8, 0xef,
+ 0x02, 0x88, 0x74, 0x6f, 0xae, 0x60, 0x94, 0xbb, 0xc2, 0x83, 0x6d, 0xef,
+ 0xe0, 0x61, 0xf8, 0xe9, 0x52, 0x11, 0xe0, 0x26, 0x53, 0xec, 0x07, 0x04,
+ 0x60, 0x94, 0xd5, 0xc0, 0xfe, 0xf5, 0xe0, 0x91, 0x93, 0xe9, 0xe0, 0x9b,
+ 0x35, 0xeb, 0x02, 0x85, 0x75, 0xed, 0xe0, 0x58, 0x3a, 0xe1, 0xcd, 0x03,
+ 0xe9, 0x04, 0xe0, 0x57, 0x93, 0x66, 0xf5, 0xe0, 0x94, 0x49, 0x67, 0xe9,
+ 0x04, 0xe0, 0x47, 0x0c, 0x6e, 0x61, 0xed, 0xe0, 0x98, 0xc3, 0xe5, 0x60,
+ 0x84, 0xa4, 0xc7, 0x6d, 0x63, 0xeb, 0xe0, 0x99, 0x99, 0xe2, 0xe0, 0x9c,
+ 0x0f, 0x2e, 0x70, 0x61, 0xe2, 0xe0, 0x9b, 0xa0, 0xf4, 0x13, 0x40, 0x64,
+ 0x38, 0x40, 0x66, 0x18, 0x08, 0x0c, 0x0c, 0x07, 0x60, 0x39, 0xf5, 0x60,
+ 0x5f, 0x15, 0xc1, 0xe8, 0xf5, 0x02, 0x96, 0x66, 0xe6, 0x02, 0x88, 0x74,
+ 0x6f, 0x72, 0x65, 0xe1, 0xe0, 0x9a, 0x5b, 0x2d, 0x34, 0x2d, 0x73, 0x61,
+ 0x6c, 0xe5, 0xe0, 0x65, 0xa1, 0xe4, 0x06, 0x60, 0x93, 0xc5, 0xc5, 0xc4,
+ 0x69, 0xef, 0x05, 0x31, 0xe0, 0x9b, 0xdb, 0xae, 0x0a, 0x0a, 0x06, 0x60,
+ 0x23, 0xe8, 0x05, 0x07, 0xc0, 0x83, 0x65, 0x75, 0xad, 0x60, 0x24, 0x0c,
+ 0x04, 0x07, 0xd9, 0x01, 0xe3, 0x60, 0x24, 0x21, 0xd8, 0xed, 0xe1, 0x04,
+ 0xe0, 0x24, 0x61, 0x70, 0xad, 0x05, 0x60, 0x24, 0x49, 0xaf, 0x73, 0x6f,
+ 0x75, 0x74, 0xe8, 0x60, 0x24, 0x49, 0xd8, 0xc5, 0x2d, 0x66, 0x69, 0x70,
+ 0x73, 0x2e, 0x75, 0x73, 0xad, 0xe0, 0x24, 0x5f, 0xf2, 0x04, 0x04, 0x03,
+ 0xa4, 0xf9, 0xe0, 0x95, 0x0d, 0xe9, 0xd9, 0xb9, 0x65, 0xe1, 0x02, 0x8d,
+ 0xed, 0x04, 0xe0, 0x9b, 0xba, 0x6c, 0x69, 0xf4, 0x60, 0x98, 0x13, 0xc2,
+ 0x6a, 0xeb, 0x05, 0x06, 0xe0, 0x91, 0x23, 0x6c, 0x69, 0xee, 0xe0, 0x66,
+ 0x2b, 0x2d, 0x6c, 0x69, 0xee, 0xe0, 0x97, 0x28, 0x61, 0x6e, 0xe4, 0x60,
+ 0x94, 0xed, 0xc4, 0xc7, 0xef, 0x05, 0x40, 0x50, 0x04, 0x84, 0xf2, 0x09,
+ 0x08, 0x09, 0x18, 0x06, 0x11, 0xe0, 0x8a, 0xe8, 0x6a, 0x2e, 0x66, 0x61,
+ 0xf2, 0xe0, 0x9b, 0x4e, 0x69, 0x70, 0x72, 0x65, 0x73, 0xf3, 0xe0, 0x97,
+ 0xd5, 0xe5, 0x05, 0x05, 0xe0, 0x9b, 0x6b, 0x62, 0x61, 0xf3, 0xc4, 0xc9,
+ 0xae, 0x60, 0x87, 0xcf, 0x46, 0x39, 0x41, 0xfd, 0x03, 0x49, 0x8c, 0xc1,
+ 0x5c, 0xe4, 0x60, 0x93, 0xb1, 0xc5, 0xc4, 0x61, 0x67, 0xe5, 0x04, 0xe0,
+ 0x9b, 0x51, 0x2e, 0x79, 0x61, 0x6e, 0x64, 0x65, 0xf8, 0xe0, 0x72, 0x3c,
+ 0x2d, 0x65, 0xec, 0xe0, 0x93, 0x96, 0x6c, 0xef, 0xdf, 0x26, 0xeb, 0xe0,
+ 0x68, 0x76, 0x63, 0x6b, 0x68, 0x6f, 0xec, 0xe0, 0x98, 0x8f, 0xea, 0x02,
+ 0x84, 0x1f, 0x43, 0xf8, 0x82, 0x6f, 0x72, 0x64, 0x61, 0xec, 0x04, 0xe0,
+ 0x99, 0x39, 0x73, 0x68, 0x61, 0x6c, 0xf3, 0xe0, 0x8a, 0xe7, 0x68, 0x2e,
+ 0x61, 0x63, 0xae, 0xe0, 0x51, 0x2d, 0xe7, 0x07, 0x60, 0x3b, 0x22, 0xe0,
+ 0x25, 0xa4, 0xad, 0xe0, 0x73, 0xa1, 0x65, 0xe9, 0x04, 0xe0, 0x8a, 0xc9,
+ 0x6e, 0x6b, 0xea, 0xe0, 0x8e, 0xdb, 0xe3, 0x60, 0x3d, 0xad, 0xe0, 0x5d,
+ 0x4b, 0xe1, 0x0c, 0x09, 0x3b, 0x18, 0x04, 0x03, 0x08, 0x24, 0x1f, 0xe0,
+ 0x8e, 0x4e, 0xf6, 0x04, 0xe0, 0x84, 0x27, 0xe5, 0xe0, 0x88, 0x9c, 0xf4,
+ 0x06, 0x23, 0x06, 0xe0, 0x98, 0xc4, 0x69, 0xe3, 0x03, 0x04, 0x91, 0xf3,
+ 0xe0, 0x8a, 0x43, 0xae, 0x04, 0xe0, 0x73, 0x48, 0x6f, 0x62, 0x73, 0x65,
+ 0x72, 0x76, 0x61, 0x62, 0xec, 0xe0, 0x4e, 0x27, 0x2d, 0x61, 0x63, 0x63,
+ 0x65, 0xf3, 0xe0, 0x9a, 0x51, 0x68, 0x65, 0xec, 0xe0, 0x8a, 0x40, 0xe5,
+ 0x04, 0xe0, 0x78, 0x7a, 0x66, 0x61, 0xf2, 0xe0, 0x97, 0xff, 0xf2, 0x06,
+ 0x08, 0x06, 0xe0, 0x9a, 0x8c, 0x6f, 0x73, 0x74, 0x77, 0xef, 0xe0, 0x5b,
+ 0xa1, 0x67, 0x61, 0xf2, 0xe0, 0x95, 0x4b, 0xe1, 0xd4, 0xaf, 0xf0, 0xe0,
+ 0x2e, 0x10, 0xee, 0xce, 0x5b, 0x6c, 0x6f, 0x77, 0x61, 0xad, 0xe0, 0x3f,
+ 0x2f, 0xe7, 0x02, 0x96, 0x69, 0x6e, 0x67, 0xae, 0x05, 0x06, 0xe0, 0x8f,
+ 0x77, 0x6f, 0x6e, 0x72, 0xe5, 0xdd, 0x9b, 0x65, 0x78, 0x70, 0xef, 0xe0,
+ 0x96, 0xc0, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x61, 0xf2, 0xe0, 0x86,
+ 0xd5, 0x63, 0xeb, 0x02, 0x90, 0x69, 0x74, 0xae, 0x06, 0x60, 0x75, 0x6e,
+ 0xc6, 0x35, 0xf2, 0x60, 0x39, 0x06, 0xe0, 0x39, 0xa2, 0x68, 0x65, 0x72,
+ 0x6f, 0x2d, 0x6e, 0x65, 0xf4, 0xe0, 0x6f, 0x4a, 0xe2, 0xe0, 0x89, 0xcc,
+ 0xf3, 0x06, 0x60, 0x97, 0xd6, 0xc2, 0x56, 0x6c, 0x2e, 0x6f, 0x72, 0x69,
+ 0x67, 0x69, 0x6e, 0x2e, 0x63, 0x64, 0x6e, 0x37, 0x37, 0x2d, 0x73, 0x65,
+ 0x63, 0xf5, 0xe0, 0x84, 0x3f, 0xf2, 0x09, 0x07, 0x56, 0x0d, 0x60, 0x81,
+ 0x56, 0xc2, 0xa2, 0x76, 0xae, 0x60, 0x7a, 0xe6, 0xdd, 0x80, 0x68, 0xf4,
+ 0xe0, 0x82, 0x2c, 0x71, 0x75, 0x61, 0x72, 0xe5, 0x04, 0xe0, 0x99, 0x93,
+ 0x37, 0xae, 0x60, 0x99, 0x10, 0x0d, 0xc0, 0x76, 0xf0, 0x0b, 0x06, 0x12,
+ 0x08, 0x06, 0x09, 0x0b, 0x04, 0xe0, 0x8a, 0x0b, 0x79, 0x64, 0xe5, 0xe0,
+ 0x6b, 0xe1, 0xef, 0x05, 0x07, 0xe0, 0x97, 0xbf, 0x72, 0xf4, 0x60, 0x98,
+ 0x89, 0xc1, 0x4c, 0x63, 0xeb, 0xe0, 0x8e, 0xdc, 0x6a, 0x65, 0x6c, 0x6b,
+ 0xe1, 0xe0, 0x5f, 0xa6, 0x68, 0x69, 0xee, 0xe0, 0x35, 0xeb, 0x65, 0x63,
+ 0x74, 0x72, 0x75, 0xed, 0xe0, 0x3a, 0x65, 0x64, 0x6e, 0x73, 0xae, 0x60,
+ 0x94, 0x0f, 0x42, 0x7d, 0xc2, 0x4c, 0xe2, 0xe0, 0x95, 0xa3, 0xe1, 0x04,
+ 0xe0, 0x99, 0xa0, 0x63, 0xe5, 0x05, 0x04, 0xe0, 0x99, 0x95, 0xeb, 0xe0,
+ 0x6b, 0xd5, 0x2d, 0x74, 0x6f, 0x2d, 0xf2, 0xe0, 0x8f, 0x15, 0xef, 0x1e,
+ 0x08, 0x0d, 0x25, 0x06, 0x1f, 0x06, 0x14, 0x07, 0x04, 0x07, 0x0c, 0x05,
+ 0x07, 0x49, 0xa5, 0x4b, 0x2e, 0x60, 0x2a, 0xe5, 0x60, 0x53, 0xd2, 0x42,
+ 0xb7, 0x41, 0x3f, 0xc1, 0x4b, 0x75, 0x6e, 0x64, 0x63, 0xe1, 0xe0, 0x22,
+ 0xec, 0xf3, 0x07, 0x60, 0x57, 0xb5, 0xe0, 0x3c, 0x66, 0x6e, 0xef, 0xe0,
+ 0x83, 0x6f, 0xf2, 0x09, 0x04, 0x05, 0x05, 0x49, 0x98, 0xe0, 0x77, 0x83,
+ 0xf4, 0xe0, 0x8c, 0x0d, 0x72, 0xe5, 0xe0, 0x22, 0x31, 0x6f, 0xe3, 0xe0,
+ 0x75, 0x2c, 0xad, 0x06, 0x60, 0x22, 0x3e, 0x04, 0x86, 0x76, 0x61, 0xf2,
+ 0xe0, 0x82, 0x7e, 0x70, 0x6f, 0xf4, 0xe0, 0x86, 0xff, 0xee, 0x09, 0x04,
+ 0x07, 0x60, 0x56, 0x2b, 0xe0, 0x40, 0x64, 0xec, 0xe0, 0x40, 0xcd, 0xe7,
+ 0x60, 0x2e, 0x3b, 0xe0, 0x6a, 0xe4, 0x64, 0xf2, 0x04, 0xe0, 0x80, 0x0c,
+ 0xe5, 0xe0, 0x21, 0xfe, 0xed, 0x60, 0x8d, 0x54, 0xc0, 0x77, 0xec, 0x02,
+ 0x8b, 0xf5, 0x04, 0xe0, 0x91, 0xe2, 0x74, 0x69, 0xef, 0xe0, 0x88, 0x4a,
+ 0xe1, 0x60, 0x97, 0x12, 0xc0, 0x45, 0xeb, 0x60, 0x60, 0x6b, 0xe0, 0x2d,
+ 0x7b, 0xea, 0xe0, 0x92, 0xa5, 0x67, 0xee, 0x60, 0x91, 0x3b, 0xc5, 0xc4,
+ 0x66, 0xf4, 0x04, 0xe0, 0x76, 0xb0, 0x77, 0x61, 0xf2, 0xe0, 0x67, 0x3d,
+ 0x65, 0xe4, 0xe0, 0x57, 0xc1, 0x64, 0x65, 0x67, 0xe1, 0xe0, 0x41, 0xe5,
+ 0xe3, 0x07, 0x05, 0x04, 0x04, 0xe0, 0x64, 0xe9, 0x74, 0xf2, 0xe0, 0x8f,
+ 0x81, 0xe8, 0xe0, 0x26, 0x6b, 0xe3, 0xe0, 0x84, 0x72, 0xae, 0x05, 0x60,
+ 0x8c, 0x51, 0x88, 0x73, 0x72, 0xe3, 0xc1, 0x4c, 0xee, 0x0a, 0x07, 0x08,
+ 0x06, 0x04, 0x60, 0x84, 0x80, 0xd4, 0x07, 0x1f, 0x43, 0xe5, 0x1b, 0xe0,
+ 0x5e, 0x93, 0xef, 0x03, 0xd3, 0x0e, 0xe1, 0xe0, 0x5e, 0xa5, 0x69, 0x6c,
+ 0xec, 0xe0, 0x88, 0x2f, 0xe3, 0xe0, 0x8d, 0x29, 0xe1, 0x04, 0xe0, 0x5e,
+ 0x93, 0x61, 0xf3, 0xe0, 0x96, 0x97, 0xed, 0x0a, 0x05, 0x06, 0x03, 0x04,
+ 0x60, 0x7c, 0x75, 0xdb, 0xeb, 0x1f, 0x43, 0xf8, 0xd8, 0xb4, 0x75, 0x73,
+ 0xe8, 0xe0, 0x4e, 0x61, 0xef, 0xd8, 0xab, 0xe9, 0xe0, 0x96, 0x1d, 0xe1,
+ 0x02, 0x91, 0x72, 0xf4, 0x04, 0xe0, 0x98, 0x57, 0x6c, 0x61, 0x62, 0x65,
+ 0x6c, 0x69, 0x6e, 0xe7, 0xe0, 0x77, 0x8f, 0x6c, 0x6c, 0x2d, 0x77, 0x65,
+ 0xe2, 0xe0, 0x95, 0x21, 0xec, 0x0c, 0x05, 0x06, 0x60, 0x78, 0x63, 0x49,
+ 0xa4, 0x43, 0x39, 0xd2, 0xeb, 0x75, 0xf0, 0xe0, 0x37, 0x9f, 0x64, 0xae,
+ 0x60, 0x95, 0xe2, 0x84, 0xe1, 0x04, 0xe0, 0x37, 0x91, 0x74, 0xf4, 0xe0,
+ 0x7f, 0xfe, 0xeb, 0x0e, 0x0d, 0x15, 0x0d, 0x04, 0x14, 0x1d, 0x10, 0x10,
+ 0x60, 0x84, 0x00, 0xd3, 0x8e, 0x1f, 0xc3, 0x02, 0x85, 0x65, 0xee, 0xe0,
+ 0x8a, 0xcb, 0x61, 0xee, 0xc0, 0x75, 0xf9, 0x08, 0x06, 0x60, 0x59, 0x09,
+ 0xe0, 0x3e, 0xed, 0x67, 0x65, 0xe1, 0xe0, 0x66, 0xef, 0x64, 0x69, 0xf6,
+ 0xe0, 0x87, 0xb6, 0xef, 0x05, 0x04, 0xe0, 0x58, 0xf2, 0xe4, 0xe0, 0x64,
+ 0xfe, 0xe3, 0xcb, 0x94, 0x6c, 0xe5, 0xd8, 0xd6, 0xea, 0x05, 0x06, 0xe0,
+ 0x6d, 0xc1, 0x1f, 0x43, 0xe5, 0xe0, 0x8c, 0xce, 0x65, 0x72, 0xf6, 0x60,
+ 0x8b, 0xa8, 0xc2, 0xf4, 0xe9, 0x09, 0x06, 0x60, 0x95, 0xd3, 0x40, 0x64,
+ 0xc1, 0x84, 0x70, 0x74, 0xf6, 0xe0, 0x50, 0x82, 0xe5, 0x04, 0xe0, 0x90,
+ 0xfa, 0x72, 0xf6, 0x60, 0x57, 0x67, 0xe0, 0x39, 0x9e, 0x65, 0x64, 0x73,
+ 0x6d, 0xef, 0x04, 0xe0, 0x95, 0xbd, 0x6b, 0x6f, 0x72, 0xf3, 0xe0, 0x50,
+ 0x65, 0xe1, 0x02, 0x84, 0xf5, 0xe0, 0x90, 0xde, 0xee, 0x04, 0xe0, 0x8a,
+ 0x51, 0xe9, 0xe0, 0x8f, 0x63, 0xae, 0x60, 0x90, 0xa8, 0xc4, 0xea, 0xea,
+ 0x60, 0x66, 0xcf, 0xe0, 0x30, 0xb8, 0xe9, 0x0f, 0x29, 0x06, 0x09, 0x0d,
+ 0x1b, 0x09, 0x03, 0x04, 0x0a, 0x60, 0x84, 0x18, 0xd2, 0xdf, 0x74, 0xe5,
+ 0x06, 0x05, 0x07, 0xe0, 0x97, 0x5d, 0x73, 0xae, 0xe0, 0x6f, 0xe1, 0x6c,
+ 0x65, 0x61, 0xe6, 0xe0, 0x96, 0xfd, 0x2e, 0xf4, 0x02, 0x88, 0x72, 0x61,
+ 0x6e, 0x73, 0xe9, 0xe0, 0x63, 0xb2, 0x62, 0x2d, 0x68, 0x6f, 0x73, 0xf4,
+ 0xe0, 0x89, 0x27, 0x73, 0x6b, 0xef, 0xe0, 0x8c, 0x53, 0xf2, 0x04, 0xe0,
+ 0x8f, 0x90, 0x61, 0xe3, 0xcf, 0x0f, 0xee, 0x02, 0x84, 0xe7, 0xe0, 0x2a,
+ 0xbd, 0xe1, 0x60, 0x95, 0xf7, 0xc1, 0x3a, 0x6d, 0x70, 0x6c, 0xe5, 0x04,
+ 0xe0, 0x24, 0x7f, 0x73, 0x69, 0x74, 0x65, 0xae, 0x06, 0x60, 0x82, 0x41,
+ 0xc9, 0x8a, 0x63, 0x6f, 0xed, 0x60, 0x94, 0x62, 0xc2, 0x81, 0xec, 0x04,
+ 0xe0, 0x94, 0x53, 0xea, 0xe0, 0x25, 0x8b, 0xe9, 0xd8, 0x83, 0xe7, 0xe0,
+ 0x8f, 0x57, 0xe5, 0x04, 0xe0, 0x8e, 0x24, 0x6c, 0xec, 0xe0, 0x6c, 0xe8,
+ 0xe3, 0x04, 0xe0, 0x94, 0x9c, 0x69, 0xec, 0x60, 0x8d, 0x54, 0xc2, 0x85,
+ 0xe8, 0x0d, 0x04, 0x07, 0x40, 0x6e, 0x42, 0x06, 0x09, 0x60, 0x80, 0x4e,
+ 0xd4, 0x07, 0xf7, 0xe0, 0x95, 0x8a, 0x75, 0x6e, 0x61, 0xee, 0xe0, 0x94,
+ 0x6c, 0xef, 0x0b, 0x10, 0x05, 0x3e, 0x09, 0x60, 0x42, 0x1a, 0xe0, 0x47,
+ 0xd4, 0xf7, 0x06, 0x60, 0x93, 0x8d, 0xc3, 0x32, 0x61, 0xae, 0x60, 0x79,
+ 0x94, 0x53, 0xcd, 0xc3, 0x6a, 0x75, 0xea, 0xe0, 0x94, 0x48, 0xf0, 0x09,
+ 0x06, 0x06, 0x04, 0x05, 0x06, 0xe0, 0x96, 0x8c, 0x77, 0x61, 0x72, 0xe5,
+ 0xc4, 0x01, 0x73, 0x65, 0xec, 0xe0, 0x28, 0x27, 0xf0, 0xe0, 0x80, 0x76,
+ 0x69, 0x74, 0xf3, 0xd9, 0x57, 0x61, 0x72, 0xe5, 0xe0, 0x36, 0x57, 0xae,
+ 0x0b, 0x60, 0x4b, 0x1c, 0x44, 0x07, 0x60, 0x42, 0x50, 0xc4, 0x03, 0x62,
+ 0x72, 0x65, 0x6e, 0x64, 0x6c, 0x79, 0xae, 0x60, 0x60, 0x10, 0xd7, 0x32,
+ 0x6e, 0x61, 0x69, 0xae, 0x60, 0x8a, 0x69, 0xc0, 0x65, 0x62, 0x61, 0xf2,
+ 0xe0, 0x70, 0xd6, 0xe9, 0x18, 0x12, 0x05, 0x11, 0x40, 0x4b, 0x13, 0x40,
+ 0x6e, 0x40, 0x7a, 0x29, 0x0b, 0x05, 0x15, 0x0f, 0x60, 0x29, 0xc1, 0x60,
+ 0x64, 0xe9, 0xc3, 0xdc, 0x7a, 0xf5, 0x02, 0x89, 0x6f, 0x6b, 0x61, 0xae,
+ 0x60, 0x8b, 0x78, 0xc8, 0xcd, 0x6b, 0xf5, 0xe0, 0x41, 0x5d, 0x74, 0xe1,
+ 0xe0, 0x51, 0xf0, 0xf3, 0x05, 0x04, 0xe0, 0x8f, 0x71, 0xf5, 0xe0, 0x79,
+ 0x45, 0x68, 0x69, 0x6b, 0xf5, 0xe0, 0x28, 0xfe, 0xf2, 0x03, 0x18, 0x84,
+ 0xef, 0x02, 0x86, 0x73, 0x61, 0xf4, 0xe0, 0x85, 0x9a, 0xe9, 0x04, 0xe0,
+ 0x93, 0xe0, 0x73, 0x68, 0x69, 0xae, 0x60, 0x5c, 0xdc, 0xe0, 0x2e, 0x1a,
+ 0xe9, 0xe0, 0x3e, 0x16, 0xe1, 0x05, 0x06, 0x09, 0x04, 0x8e, 0x74, 0x61,
+ 0xeb, 0xe0, 0x5d, 0x16, 0xef, 0x04, 0xe0, 0x93, 0xe9, 0xeb, 0xe0, 0x5d,
+ 0x68, 0xee, 0xe0, 0x82, 0xb7, 0xeb, 0x04, 0xe0, 0x93, 0xb3, 0x61, 0x77,
+ 0x61, 0xae, 0x60, 0x8c, 0x78, 0xc3, 0x77, 0xe8, 0xe0, 0x3b, 0xf3, 0xef,
+ 0x03, 0x04, 0x86, 0xf9, 0xe0, 0x89, 0xd5, 0x6a, 0x69, 0xf2, 0xe0, 0x92,
+ 0x63, 0x67, 0xe1, 0xe0, 0x51, 0xcf, 0xee, 0x0b, 0x0b, 0x0d, 0x0e, 0x06,
+ 0x08, 0x11, 0x10, 0xe0, 0x53, 0x09, 0x79, 0x6f, 0x73, 0x68, 0x69, 0x74,
+ 0x6f, 0xed, 0xe0, 0x4b, 0x12, 0x74, 0xef, 0x07, 0x60, 0x3e, 0x4a, 0xe0,
+ 0x4d, 0xfe, 0xeb, 0xe0, 0x90, 0x67, 0x73, 0x68, 0xe9, 0x02, 0x84, 0xf2,
+ 0xe0, 0x8c, 0x50, 0x6e, 0xef, 0xe0, 0x90, 0x57, 0x6f, 0x6e, 0x73, 0xe5,
+ 0xc5, 0x8c, 0x6b, 0x61, 0x6d, 0x69, 0x67, 0xef, 0xd6, 0xac, 0xea, 0x02,
+ 0x85, 0x75, 0xeb, 0xe0, 0x78, 0xa1, 0x6f, 0xae, 0x60, 0x89, 0xda, 0x42,
+ 0xb6, 0xc2, 0xa5, 0xe7, 0x02, 0x89, 0x75, 0xae, 0x60, 0x89, 0x69, 0x40,
+ 0xe7, 0xc5, 0xbf, 0xef, 0xe0, 0x58, 0x77, 0xe1, 0x04, 0xe0, 0x68, 0xbb,
+ 0x6e, 0x6f, 0x6d, 0x61, 0xe3, 0xe0, 0x91, 0xef, 0xed, 0x04, 0x40, 0x4a,
+ 0x89, 0xef, 0x0b, 0x0a, 0x03, 0x0f, 0x07, 0x04, 0x06, 0x06, 0xe0, 0x23,
+ 0x74, 0x74, 0x73, 0xf5, 0x03, 0xd9, 0x63, 0xeb, 0xe0, 0x44, 0x6c, 0xf3,
+ 0xd8, 0x3a, 0xee, 0x02, 0x87, 0x6f, 0x73, 0x65, 0xeb, 0xe0, 0x50, 0xaa,
+ 0x69, 0xf4, 0xe0, 0x8b, 0xcf, 0xeb, 0x60, 0x3f, 0xf9, 0xe0, 0x49, 0x81,
+ 0xea, 0xe0, 0x90, 0x01, 0x69, 0x63, 0xe8, 0xe0, 0x52, 0x2e, 0x66, 0x75,
+ 0xf3, 0xe0, 0x53, 0x6d, 0x64, 0xe1, 0x04, 0xe0, 0x8a, 0x41, 0x74, 0xe5,
+ 0xe0, 0x8c, 0xe8, 0x69, 0x7a, 0x75, 0xae, 0x60, 0x8a, 0x39, 0xc8, 0xc4,
+ 0xe1, 0x08, 0x08, 0x0c, 0x60, 0x4a, 0x61, 0xd2, 0x68, 0x6e, 0x65, 0xae,
+ 0x60, 0x8e, 0xb7, 0xc4, 0x3e, 0xed, 0x02, 0x84, 0xef, 0xe0, 0x6f, 0x5c,
+ 0x61, 0xeb, 0xe0, 0x92, 0xdc, 0x62, 0xe1, 0xe0, 0x2f, 0x0a, 0xeb, 0x06,
+ 0x05, 0x09, 0xe0, 0x43, 0xca, 0x73, 0xe8, 0xe0, 0x92, 0xda, 0x6f, 0x6b,
+ 0x75, 0x63, 0x68, 0xf5, 0xe0, 0x43, 0xb2, 0xe1, 0x0a, 0x05, 0x60, 0x4e,
+ 0x03, 0x42, 0xbc, 0xe0, 0x3b, 0x37, 0x74, 0xf3, 0xe0, 0x78, 0x11, 0xef,
+ 0xe0, 0x92, 0xae, 0x6a, 0x6f, 0x6e, 0x61, 0x77, 0x61, 0x74, 0xe5, 0xe0,
+ 0x92, 0x84, 0x69, 0xe2, 0xe0, 0x4c, 0xd9, 0x66, 0xf4, 0x02, 0x85, 0x65,
+ 0xe4, 0xe0, 0x66, 0xdb, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0xae, 0x60,
+ 0x93, 0x43, 0xc0, 0x4a, 0x63, 0x68, 0xe9, 0x04, 0xe0, 0x53, 0xcd, 0x6b,
+ 0x61, 0x73, 0x68, 0xf5, 0xe0, 0x2b, 0x36, 0xe2, 0x03, 0x0a, 0x8a, 0xf5,
+ 0x03, 0xc0, 0x90, 0x6b, 0x61, 0xf7, 0xe0, 0x8b, 0x17, 0xe5, 0x04, 0xe0,
+ 0x8f, 0x2e, 0x63, 0xe8, 0xe0, 0x92, 0x36, 0x61, 0x74, 0x61, 0xae, 0x60,
+ 0x5b, 0x33, 0xe0, 0x34, 0x60, 0xe5, 0x04, 0xe0, 0x82, 0xd3, 0x65, 0xfa,
+ 0xd0, 0x9f, 0xe1, 0x07, 0x05, 0x07, 0x06, 0xe0, 0x91, 0x78, 0xf2, 0x60,
+ 0x92, 0x43, 0x99, 0x6e, 0x67, 0x72, 0xe9, 0xe0, 0x70, 0x28, 0x6b, 0x6f,
+ 0xf4, 0xe0, 0x36, 0x7f, 0x63, 0x6b, 0x6e, 0x65, 0xf4, 0xe0, 0x64, 0x44,
+ 0xe7, 0x04, 0xe0, 0x94, 0x2e, 0xad, 0xe0, 0x5e, 0x27, 0xe6, 0x60, 0x92,
+ 0x41, 0xc0, 0x45, 0xe5, 0x19, 0x0d, 0x06, 0x13, 0x40, 0xda, 0x06, 0x25,
+ 0x0f, 0x40, 0x49, 0x1b, 0x04, 0x1a, 0x04, 0x25, 0x0b, 0x06, 0x60, 0x72,
+ 0x4c, 0x5d, 0x05, 0xc2, 0xc3, 0xf8, 0x06, 0x60, 0x91, 0x79, 0xc2, 0x8a,
+ 0xae, 0x60, 0x8e, 0xf5, 0xc3, 0xc2, 0xf6, 0x41, 0xd8, 0xe0, 0x57, 0xea,
+ 0xf4, 0x05, 0x06, 0xe0, 0x42, 0xbe, 0xef, 0x60, 0x88, 0x2c, 0xc5, 0xf3,
+ 0x61, 0x67, 0x61, 0xf9, 0xe0, 0x8d, 0x55, 0xf2, 0x03, 0xc0, 0xcb, 0xf6,
+ 0x02, 0xb2, 0x69, 0x63, 0xe5, 0x03, 0x14, 0x86, 0xf3, 0x04, 0xe0, 0x93,
+ 0xd2, 0xae, 0x04, 0xe0, 0x90, 0x9c, 0x63, 0x6c, 0x65, 0x76, 0x65, 0x72,
+ 0xad, 0xe0, 0x6c, 0x54, 0x62, 0x75, 0xf3, 0xe0, 0x7f, 0x82, 0xae, 0x04,
+ 0xe0, 0x75, 0x13, 0x67, 0x6f, 0x76, 0xae, 0x04, 0xe0, 0x90, 0x00, 0x73,
+ 0xe3, 0xe0, 0x66, 0x4c, 0xe5, 0x0c, 0x09, 0x10, 0x05, 0x09, 0x12, 0x05,
+ 0x18, 0x06, 0x06, 0x09, 0x8f, 0x73, 0x61, 0x72, 0x63, 0x61, 0xf3, 0xe0,
+ 0x61, 0x09, 0xf2, 0x05, 0x04, 0xe0, 0x3b, 0x5e, 0xf3, 0xe0, 0x6b, 0xec,
+ 0x6e, 0x61, 0xed, 0xe0, 0x34, 0x3f, 0x71, 0x75, 0xe1, 0xc0, 0x5a, 0xf0,
+ 0x04, 0xe0, 0x68, 0x6e, 0xb2, 0xe0, 0x92, 0x42, 0xed, 0x02, 0x85, 0x70,
+ 0xb3, 0xe0, 0x93, 0x3b, 0x69, 0x6e, 0x65, 0x63, 0x72, 0x61, 0xe6, 0xe0,
+ 0x86, 0x90, 0x69, 0xf2, 0xe0, 0x6c, 0x65, 0xe8, 0x03, 0x06, 0x85, 0x75,
+ 0x6d, 0xef, 0xe0, 0x68, 0xbf, 0x74, 0xf4, 0xe0, 0x92, 0x1c, 0x61, 0x6c,
+ 0x66, 0x6c, 0x69, 0xe6, 0xe0, 0x8b, 0x0f, 0x67, 0x61, 0xed, 0xe0, 0x4d,
+ 0x98, 0x66, 0x74, 0xf0, 0xe0, 0x7e, 0xe7, 0x65, 0x78, 0x63, 0x68, 0x61,
+ 0xee, 0xe0, 0x78, 0x01, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73,
+ 0x74, 0x72, 0x69, 0xeb, 0xe0, 0x8a, 0xeb, 0xe2, 0x05, 0x05, 0xe0, 0x44,
+ 0x85, 0x6c, 0xef, 0xe0, 0x8c, 0xcf, 0xe2, 0xe0, 0x7e, 0xbf, 0xe1, 0x04,
+ 0xe0, 0x87, 0x43, 0x6e, 0x69, 0xf3, 0xe0, 0x50, 0xb4, 0x6f, 0x75, 0xec,
+ 0xe0, 0x7b, 0x71, 0xee, 0x07, 0x0d, 0x04, 0x06, 0xe0, 0x7e, 0x9e, 0xf3,
+ 0x02, 0x84, 0xe9, 0xe0, 0x2e, 0xaa, 0x65, 0x65, 0xf2, 0xe0, 0x8c, 0xa3,
+ 0xee, 0xe0, 0x51, 0x16, 0x64, 0x61, 0xe9, 0xe0, 0x39, 0x2e, 0x61, 0x73,
+ 0xe1, 0xe0, 0x80, 0x40, 0xed, 0x02, 0x86, 0x69, 0x6e, 0xe5, 0xe0, 0x59,
+ 0xa7, 0x62, 0x6f, 0xeb, 0xe0, 0x50, 0xe1, 0xec, 0x0a, 0x2a, 0x06, 0x5e,
+ 0x87, 0x60, 0x6b, 0x29, 0xc6, 0xfd, 0xec, 0x02, 0x9e, 0xf3, 0x02, 0x8a,
+ 0x79, 0x6f, 0x75, 0x72, 0x68, 0x6f, 0xed, 0xe0, 0x7c, 0xdf, 0xad, 0x04,
+ 0xe0, 0x7b, 0xd5, 0x66, 0x6f, 0x72, 0xad, 0x04, 0xe0, 0x91, 0x2c, 0xec,
+ 0xe0, 0x44, 0x29, 0x66, 0x79, 0x2e, 0x73, 0x74, 0xef, 0xe0, 0x79, 0x61,
+ 0xea, 0x60, 0x8d, 0xee, 0xc2, 0xc3, 0x66, 0x69, 0x70, 0xae, 0x60, 0x81,
+ 0xb0, 0x4d, 0x67, 0x40, 0x56, 0x42, 0xc2, 0xac, 0xeb, 0x02, 0x8c, 0xe9,
+ 0x07, 0x60, 0x3d, 0xd9, 0xe0, 0x4b, 0x39, 0xeb, 0xe0, 0x41, 0xf1, 0x64,
+ 0x31, 0x2e, 0x62, 0x65, 0x65, 0x62, 0x79, 0xf4, 0xe0, 0x82, 0xa5, 0xea,
+ 0xe0, 0x3a, 0xb8, 0xe9, 0x08, 0x08, 0x04, 0x60, 0x3d, 0x69, 0xc3, 0xd0,
+ 0x72, 0xef, 0x60, 0x3f, 0x6c, 0xe0, 0x4e, 0x1f, 0xe8, 0xe0, 0x50, 0x44,
+ 0x64, 0xe1, 0xe0, 0x85, 0x79, 0xe5, 0xe0, 0x8f, 0x94, 0xe3, 0x05, 0x14,
+ 0x05, 0xce, 0x6d, 0x75, 0xf2, 0x04, 0xe0, 0x90, 0x80, 0x69, 0x74, 0xf9,
+ 0x04, 0xe0, 0x92, 0x37, 0x74, 0x61, 0x63, 0xf4, 0xe0, 0x67, 0x26, 0x72,
+ 0xe5, 0xe0, 0x7a, 0x87, 0x61, 0x61, 0xf3, 0xe0, 0x47, 0x68, 0x62, 0x61,
+ 0x73, 0x74, 0x6f, 0x70, 0x6f, 0xec, 0xe0, 0x76, 0x32, 0xe1, 0x60, 0x74,
+ 0xe3, 0xdb, 0x25, 0xae, 0x60, 0x8b, 0x28, 0x03, 0x03, 0xc6, 0x83, 0xe4,
+ 0x08, 0x09, 0x60, 0x4e, 0x6c, 0xe0, 0x43, 0x8e, 0x73, 0x63, 0x6c, 0x6f,
+ 0x75, 0xe4, 0xe0, 0x7f, 0xcb, 0xee, 0xe0, 0x53, 0x05, 0xe3, 0x0d, 0x1d,
+ 0x0f, 0x40, 0x91, 0x0a, 0x60, 0x80, 0x73, 0x45, 0xeb, 0xca, 0xc3, 0xf2,
+ 0x02, 0x86, 0x79, 0x73, 0xe5, 0xe0, 0x6a, 0xe4, 0x61, 0x70, 0xf0, 0x02,
+ 0x86, 0x69, 0x6e, 0xe7, 0xe0, 0x6d, 0xce, 0x65, 0x72, 0x2d, 0x73, 0x69,
+ 0xf4, 0xe0, 0x8d, 0xfc, 0xe9, 0x04, 0xe0, 0x60, 0x95, 0x65, 0xee, 0x04,
+ 0xe0, 0x8c, 0x29, 0xf4, 0xe0, 0x3e, 0x91, 0xe8, 0x06, 0x06, 0x15, 0x31,
+ 0x06, 0x88, 0x77, 0x61, 0xf2, 0xe0, 0x8e, 0xec, 0x75, 0xec, 0x07, 0x60,
+ 0x66, 0xee, 0xe0, 0x28, 0xfa, 0x70, 0x6c, 0x61, 0x74, 0x74, 0x66, 0x6f,
+ 0x72, 0xed, 0xe0, 0x6d, 0x03, 0xef, 0x03, 0x1f, 0x87, 0x6f, 0xec, 0x06,
+ 0x08, 0x04, 0xe0, 0x91, 0x82, 0x73, 0x2e, 0x6e, 0x73, 0xf7, 0xe0, 0x77,
+ 0x7b, 0xe2, 0xe0, 0x48, 0xd2, 0xae, 0x04, 0xe0, 0x8c, 0x83, 0xee, 0x60,
+ 0x8e, 0xb6, 0xc0, 0xcc, 0x6c, 0x61, 0x72, 0x73, 0xe8, 0xce, 0xe1, 0x6b,
+ 0x6f, 0x6b, 0xe5, 0xe0, 0x5e, 0xc5, 0x6d, 0x69, 0xe4, 0xe0, 0x8f, 0x55,
+ 0x61, 0x65, 0x66, 0x66, 0xec, 0xe0, 0x7d, 0x17, 0xae, 0x10, 0x04, 0x04,
+ 0x08, 0x05, 0x06, 0x60, 0x6f, 0x62, 0x40, 0x47, 0x4b, 0x63, 0x42, 0x55,
+ 0x83, 0xf5, 0xe0, 0x5c, 0xd6, 0xf4, 0xe0, 0x7d, 0x7b, 0xf3, 0x60, 0x8e,
+ 0x85, 0x40, 0xc2, 0xc1, 0x7d, 0xec, 0x60, 0x8e, 0x80, 0xaf, 0xe9, 0x60,
+ 0x8e, 0x95, 0xc0, 0xfc, 0xe1, 0xe0, 0x8f, 0x70, 0x61, 0x6c, 0x65, 0x62,
+ 0x6f, 0x6f, 0xeb, 0xe0, 0x70, 0x64, 0xae, 0x0d, 0x5e, 0x80, 0x60, 0x2b,
+ 0x82, 0x60, 0x40, 0x29, 0x41, 0xb8, 0xc2, 0x80, 0xec, 0x60, 0x8e, 0x56,
+ 0x86, 0xe2, 0x0a, 0x60, 0x75, 0x18, 0x59, 0x2f, 0x40, 0x50, 0xc2, 0x6c,
+ 0xec, 0xe0, 0x77, 0x8b, 0xe1, 0x1a, 0x0e, 0x04, 0x17, 0x07, 0x1a, 0x1c,
+ 0x26, 0x0c, 0x1a, 0x40, 0xa2, 0x23, 0x28, 0x40, 0x6e, 0x24, 0x12, 0x0d,
+ 0x0a, 0x06, 0x08, 0x1a, 0xe0, 0x8e, 0x62, 0xf9, 0x04, 0xe0, 0x8a, 0x26,
+ 0x61, 0x6d, 0x61, 0xae, 0x60, 0x86, 0x08, 0xc8, 0xac, 0xf8, 0xe0, 0x8f,
+ 0x00, 0xf6, 0x04, 0xe0, 0x87, 0xf4, 0xe5, 0x04, 0xe0, 0x90, 0xc8, 0x73,
+ 0x2d, 0x74, 0x68, 0x65, 0x2d, 0x77, 0x68, 0x61, 0xec, 0xe0, 0x8f, 0x57,
+ 0xf5, 0x60, 0x34, 0x4c, 0xe0, 0x36, 0x6b, 0xf4, 0x03, 0x04, 0x8c, 0xf4,
+ 0xe0, 0x3a, 0x17, 0x73, 0x75, 0x6d, 0x61, 0x73, 0x65, 0x6e, 0x64, 0xe1,
+ 0xe0, 0x88, 0xb8, 0x6f, 0x73, 0xe8, 0xe0, 0x3c, 0x4d, 0xf3, 0x06, 0x04,
+ 0x05, 0xe0, 0x90, 0x8a, 0xf3, 0xe0, 0x77, 0xd3, 0x65, 0xe2, 0xe0, 0x53,
+ 0x38, 0xe1, 0x02, 0x85, 0x79, 0xe1, 0xe0, 0x4e, 0x7e, 0x67, 0xf5, 0xd5,
+ 0xf5, 0xf2, 0x09, 0x06, 0x07, 0x04, 0x60, 0x8d, 0xc1, 0xc0, 0x4c, 0x75,
+ 0x66, 0xf5, 0xe0, 0x8b, 0x32, 0x70, 0x73, 0x62, 0xef, 0xe0, 0x62, 0x6d,
+ 0xef, 0xe0, 0x83, 0x69, 0xe4, 0x02, 0x84, 0xe9, 0xe0, 0x77, 0x5e, 0xe5,
+ 0xe0, 0x7a, 0x63, 0xf0, 0x04, 0xe0, 0x90, 0x53, 0x70, 0x6f, 0x72, 0xef,
+ 0xe0, 0x36, 0x95, 0xef, 0x03, 0x05, 0x87, 0x74, 0x6f, 0xed, 0xca, 0xef,
+ 0x67, 0x6f, 0x6e, 0xe3, 0xe0, 0x86, 0x48, 0x62, 0x65, 0x72, 0x6e, 0x61,
+ 0x72, 0xe4, 0xe0, 0x83, 0x3f, 0xee, 0x09, 0x05, 0x12, 0x08, 0x0a, 0x04,
+ 0x04, 0xc0, 0x5f, 0x75, 0xeb, 0xe0, 0x3a, 0x55, 0xf4, 0x02, 0x88, 0x6f,
+ 0x61, 0x6e, 0x64, 0xf2, 0xe0, 0x77, 0x07, 0x61, 0x6d, 0x61, 0xf2, 0xe0,
+ 0x53, 0x59, 0xef, 0x60, 0x7d, 0x16, 0x46, 0xfd, 0xc4, 0xfd, 0xee, 0x04,
+ 0xe0, 0x53, 0x11, 0x61, 0xee, 0xe0, 0x8a, 0xa1, 0xea, 0xe0, 0x8b, 0x2b,
+ 0xe7, 0xe0, 0x4b, 0x9b, 0xe4, 0x0c, 0x10, 0x0b, 0x31, 0x60, 0x4d, 0x98,
+ 0x60, 0x35, 0xde, 0xc2, 0xf4, 0x76, 0x69, 0xeb, 0x04, 0xe0, 0x8f, 0xe3,
+ 0x63, 0x6f, 0x72, 0x6f, 0x6d, 0xe1, 0xe0, 0x67, 0x69, 0x6e, 0x65, 0xf3,
+ 0x04, 0xe0, 0x8d, 0xeb, 0xf3, 0xe0, 0x23, 0x73, 0xe5, 0x04, 0xe0, 0x7f,
+ 0x6b, 0xae, 0x03, 0x19, 0x8a, 0x78, 0x6e, 0x2d, 0x2d, 0x6d, 0x72, 0x65,
+ 0x2d, 0x6f, 0x67, 0x2d, 0x72, 0x6f, 0x6d, 0x73, 0x64, 0x61, 0x6c, 0x2d,
+ 0x71, 0x71, 0xe2, 0xe0, 0x8d, 0xc8, 0x76, 0x65, 0x73, 0x74, 0x66, 0x6f,
+ 0xec, 0xe0, 0x8a, 0xfc, 0xed, 0x60, 0x4c, 0x41, 0x8e, 0x63, 0x61, 0xf4,
+ 0xe0, 0x24, 0x78, 0x61, 0x67, 0x6f, 0x63, 0xe8, 0xe0, 0x22, 0x6b, 0xed,
+ 0x07, 0x04, 0x0d, 0x04, 0xe0, 0x5a, 0xb1, 0xf5, 0xe0, 0x8a, 0x38, 0xf3,
+ 0x02, 0x84, 0xf5, 0xe0, 0x79, 0x5d, 0x63, 0x6c, 0xf5, 0xe0, 0x84, 0xb7,
+ 0xee, 0xe0, 0x78, 0xbd, 0x65, 0x67, 0xe1, 0xe0, 0x83, 0xb5, 0xec, 0x08,
+ 0x06, 0x05, 0x07, 0x07, 0xe0, 0x49, 0xde, 0x76, 0x61, 0x64, 0xef, 0xd6,
+ 0x88, 0x75, 0xe4, 0xe0, 0x8c, 0x4e, 0xef, 0x60, 0x4e, 0x16, 0xe0, 0x3f,
+ 0xbe, 0xe5, 0x60, 0x2d, 0x95, 0xe0, 0x61, 0xbc, 0xe1, 0x60, 0x7f, 0x13,
+ 0xc8, 0x09, 0xeb, 0x05, 0x2f, 0x04, 0xde, 0xc7, 0xf5, 0x05, 0x25, 0xe0,
+ 0x8b, 0xab, 0x72, 0xe1, 0x0b, 0x04, 0x06, 0x60, 0x4c, 0x34, 0x5d, 0x05,
+ 0xe0, 0x25, 0xe9, 0xf4, 0xe0, 0x42, 0x25, 0x67, 0x61, 0xf7, 0xe0, 0x49,
+ 0xf7, 0xae, 0x07, 0x60, 0x54, 0x7c, 0xe0, 0x38, 0x6e, 0xf4, 0x60, 0x83,
+ 0x1e, 0xca, 0xf6, 0xe8, 0xe0, 0x80, 0x13, 0xe5, 0xe0, 0x2a, 0x48, 0xe1,
+ 0x0e, 0x15, 0x06, 0x07, 0x58, 0xfe, 0x60, 0x3c, 0xf8, 0x60, 0x2d, 0x18,
+ 0xc2, 0x43, 0xe9, 0x02, 0x89, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0xef, 0xe0,
+ 0x72, 0x2b, 0xae, 0x60, 0x62, 0xd6, 0x60, 0x23, 0xf8, 0xc5, 0xfb, 0x68,
+ 0x6f, 0xe7, 0xe0, 0x85, 0x7a, 0x65, 0xae, 0x60, 0x8b, 0x78, 0xc1, 0x38,
+ 0xe4, 0xe0, 0x56, 0x9c, 0xe9, 0x04, 0x0e, 0x09, 0x84, 0xf4, 0x04, 0xe0,
+ 0x62, 0xcb, 0x61, 0x6d, 0x61, 0xae, 0x60, 0x83, 0xf6, 0xc8, 0xd5, 0xeb,
+ 0x04, 0xe0, 0x4a, 0x3c, 0xe1, 0xe0, 0x4c, 0xac, 0xea, 0xe0, 0x3d, 0xa1,
+ 0xe7, 0xe0, 0x49, 0xb7, 0x67, 0xe1, 0x05, 0x05, 0xe0, 0x4a, 0x90, 0x6d,
+ 0xe9, 0xe0, 0x3f, 0x1f, 0xae, 0x60, 0x83, 0x8f, 0xc9, 0x19, 0x66, 0xe5,
+ 0x04, 0xe0, 0x8e, 0x9b, 0x74, 0xf9, 0x60, 0x8b, 0x67, 0xc3, 0x32, 0xe4,
+ 0x04, 0xe0, 0x89, 0xbc, 0x69, 0xf3, 0xe0, 0x76, 0xe6, 0x62, 0x61, 0xe5,
+ 0xe0, 0x62, 0x6c, 0x61, 0x72, 0x6c, 0x61, 0xee, 0xe0, 0x8b, 0xe0, 0xae,
+ 0x0a, 0x09, 0x60, 0x84, 0x7b, 0x46, 0x7b, 0x04, 0xc1, 0x19, 0x67, 0x6f,
+ 0x76, 0xae, 0x60, 0x89, 0x60, 0xc1, 0x9f, 0xe3, 0x60, 0x8c, 0xc4, 0xc1,
+ 0x6e, 0xad, 0xe0, 0x84, 0xa4, 0x35, 0xf9, 0xe0, 0x7f, 0x45, 0xb3, 0x02,
+ 0xbf, 0xae, 0x10, 0x09, 0x1d, 0x41, 0x36, 0x60, 0x5d, 0xb6, 0x16, 0x05,
+ 0x0e, 0x22, 0x4e, 0x14, 0x07, 0x87, 0x74, 0x65, 0x63, 0x6b, 0x69, 0xe4,
+ 0xe0, 0x78, 0xc3, 0xe9, 0x04, 0xe0, 0x5f, 0x28, 0x73, 0x6b, 0xb0, 0x02,
+ 0x82, 0xb2, 0x82, 0x31, 0x2e, 0x73, 0x61, 0x6b, 0x75, 0x72, 0x61, 0x73,
+ 0x74, 0x6f, 0x72, 0x61, 0xe7, 0xe0, 0x7e, 0x7c, 0xe1, 0x60, 0x5f, 0x51,
+ 0x35, 0xe0, 0x26, 0x2f, 0xad, 0x10, 0x40, 0x83, 0x0d, 0x1d, 0x05, 0x0e,
+ 0x14, 0x21, 0x05, 0x60, 0x5d, 0xef, 0xe0, 0x26, 0xb1, 0x77, 0x65, 0x62,
+ 0x73, 0x69, 0x74, 0xe5, 0x03, 0xc0, 0x50, 0xae, 0x0e, 0x60, 0x5e, 0xba,
+ 0x16, 0x05, 0x08, 0x06, 0x22, 0x18, 0x4d, 0xfc, 0x07, 0x87, 0x64, 0x75,
+ 0x61, 0x6c, 0x73, 0x74, 0x61, 0x63, 0x6b, 0xae, 0x07, 0x08, 0x15, 0x06,
+ 0xe0, 0x5e, 0x9c, 0x75, 0x73, 0xad, 0x60, 0x5e, 0xae, 0xc0, 0x8e, 0x65,
+ 0x75, 0xad, 0x07, 0x60, 0x5f, 0x34, 0xe0, 0x26, 0x06, 0x77, 0x65, 0x73,
+ 0x74, 0xad, 0x60, 0x5f, 0x24, 0xe0, 0x26, 0x35, 0xe3, 0x40, 0xa3, 0xe0,
+ 0x5e, 0x47, 0xe1, 0x04, 0xe0, 0x5f, 0x1c, 0x70, 0xad, 0x60, 0x5f, 0x02,
+ 0xe0, 0x26, 0x2d, 0xad, 0x07, 0x0e, 0x40, 0x74, 0xe0, 0x5e, 0x05, 0x75,
+ 0x73, 0xad, 0x06, 0x60, 0x5e, 0x70, 0xc0, 0x8e, 0x67, 0x6f, 0xf6, 0xc0,
+ 0x78, 0x61, 0x70, 0xad, 0x02, 0x86, 0x73, 0x6f, 0xf5, 0xe0, 0x85, 0x17,
+ 0x6e, 0x6f, 0x72, 0x74, 0xe8, 0xe0, 0x5e, 0xe9, 0x75, 0x73, 0xad, 0x05,
+ 0x60, 0x5e, 0x50, 0x85, 0x65, 0xe1, 0xe0, 0x84, 0xdb, 0x6f, 0x62, 0x6a,
+ 0x65, 0x63, 0x74, 0x2d, 0x6c, 0x61, 0x6d, 0x62, 0x64, 0x61, 0xae, 0x09,
+ 0x60, 0x5e, 0x2c, 0x16, 0x05, 0x08, 0x06, 0xba, 0xe3, 0x40, 0x4e, 0xe0,
+ 0x5e, 0x2b, 0x6d, 0xe5, 0xe0, 0x5e, 0xc0, 0x66, 0x69, 0x70, 0xf3, 0x03,
+ 0xc0, 0x75, 0x2d, 0x75, 0x73, 0xad, 0xe0, 0x5e, 0x23, 0xe5, 0x02, 0x88,
+ 0x78, 0x74, 0x65, 0x72, 0xee, 0xe0, 0x84, 0xb3, 0x75, 0xad, 0x60, 0x5e,
+ 0x36, 0x0c, 0xe0, 0x26, 0x67, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61,
+ 0x74, 0x65, 0x64, 0xae, 0x05, 0x06, 0xe0, 0x84, 0x77, 0x65, 0x75, 0xad,
+ 0xe0, 0x84, 0x8a, 0x63, 0x6e, 0x2d, 0x6e, 0x6f, 0x72, 0x74, 0xe8, 0xe0,
+ 0x5e, 0x3c, 0x63, 0xe1, 0xe0, 0x5e, 0x01, 0xe1, 0x02, 0x89, 0x70, 0xad,
+ 0x60, 0x5e, 0x57, 0x13, 0xe0, 0x26, 0x1a, 0x63, 0x63, 0x65, 0x73, 0x73,
+ 0x70, 0x6f, 0x69, 0x6e, 0xf4, 0x02, 0x97, 0xae, 0x0a, 0x60, 0x5d, 0xb6,
+ 0x16, 0x05, 0x08, 0x06, 0x22, 0x98, 0x64, 0x75, 0x61, 0x6c, 0x73, 0x74,
+ 0x61, 0x63, 0xeb, 0xe0, 0x5d, 0xa5, 0x2d, 0x66, 0x69, 0x70, 0x73, 0xae,
+ 0x05, 0x0e, 0xe0, 0x5d, 0x91, 0x64, 0x75, 0x61, 0x6c, 0x73, 0x74, 0x61,
+ 0x63, 0x6b, 0xae, 0x04, 0xe0, 0x5d, 0x91, 0xe3, 0xe0, 0x5d, 0xef, 0xae,
+ 0x04, 0xe0, 0x7a, 0xbc, 0xe2, 0x04, 0xe0, 0x8c, 0xb5, 0x72, 0x61, 0x76,
+ 0xe5, 0xe0, 0x7d, 0x9b, 0xf2, 0x1f, 0x35, 0x0d, 0x2e, 0x06, 0x3c, 0x06,
+ 0x3e, 0x04, 0x40, 0x87, 0x04, 0x04, 0x04, 0x40, 0xa9, 0x04, 0x06, 0x41,
+ 0x9f, 0x04, 0x40, 0xce, 0x04, 0x60, 0x54, 0xfc, 0x56, 0xea, 0xd4, 0x49,
+ 0x1f, 0xc3, 0x04, 0x17, 0x03, 0x88, 0xf8, 0x08, 0x06, 0x04, 0x41, 0x2c,
+ 0xe0, 0x49, 0xbb, 0xf9, 0x41, 0x07, 0xe0, 0x2f, 0xf5, 0xed, 0xe0, 0x29,
+ 0x9a, 0xe4, 0xe0, 0x83, 0x41, 0xe6, 0xc4, 0x1f, 0xe5, 0x04, 0xe0, 0x52,
+ 0xc6, 0xe8, 0xc4, 0x2c, 0xe1, 0x03, 0xd5, 0x4b, 0x68, 0x6b, 0x6b, 0x65,
+ 0x72, 0x1f, 0xc3, 0xc4, 0x28, 0xfa, 0x02, 0x84, 0xe7, 0xe0, 0x4d, 0x61,
+ 0x65, 0x73, 0xfa, 0xe0, 0x7f, 0x1b, 0xf9, 0x07, 0x15, 0x06, 0x05, 0xe0,
+ 0x3a, 0x14, 0xf5, 0x03, 0x05, 0x85, 0x6f, 0xe8, 0xe0, 0x86, 0x65, 0x6b,
+ 0xf9, 0xe0, 0x8a, 0xf0, 0x67, 0x61, 0x73, 0xe1, 0xe0, 0x41, 0x9b, 0x6f,
+ 0x6b, 0xe1, 0xe0, 0x37, 0x1c, 0x67, 0xe7, 0xe0, 0x8a, 0x3f, 0x62, 0x6e,
+ 0xe9, 0xe0, 0x79, 0x28, 0xf7, 0x60, 0x8a, 0x60, 0xc1, 0xbe, 0xf5, 0x0c,
+ 0x05, 0x22, 0x05, 0x60, 0x44, 0x55, 0x50, 0x04, 0xe0, 0x37, 0x87, 0x6f,
+ 0xf6, 0xe0, 0x78, 0xe3, 0xee, 0x07, 0x0d, 0x60, 0x79, 0xb5, 0xd2, 0x3d,
+ 0x73, 0x2e, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x63, 0x6b, 0xe9, 0xe0, 0x5b,
+ 0xa3, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0xf3, 0xe0,
+ 0x80, 0xfd, 0x6c, 0xe5, 0xe0, 0x39, 0xce, 0xe7, 0xd1, 0xc5, 0x74, 0x2e,
+ 0xe8, 0xe0, 0x8b, 0x7a, 0xf3, 0x07, 0x04, 0x09, 0x16, 0xe0, 0x8b, 0xac,
+ 0xf6, 0xe0, 0x89, 0xde, 0x73, 0x2e, 0x6d, 0x79, 0x2e, 0xe9, 0xe0, 0x7b,
+ 0x3e, 0x63, 0x2e, 0xe3, 0x04, 0xe0, 0x73, 0x58, 0x6f, 0x6e, 0x74, 0x65,
+ 0x6e, 0x74, 0x70, 0x72, 0x6f, 0x78, 0x79, 0xb9, 0xe0, 0x67, 0x2c, 0xae,
+ 0x06, 0x08, 0x60, 0x84, 0xb2, 0x83, 0x77, 0x65, 0x62, 0x61, 0x63, 0xe3,
+ 0xca, 0x64, 0xe2, 0xe0, 0x89, 0xc2, 0xf2, 0xe0, 0x63, 0xba, 0xef, 0x16,
+ 0x10, 0x0d, 0x11, 0x06, 0x03, 0x0e, 0x05, 0x05, 0x04, 0x09, 0x07, 0x59,
+ 0x9b, 0x60, 0x2f, 0xf1, 0x60, 0x3a, 0x08, 0xc7, 0x87, 0xf9, 0x05, 0x04,
+ 0xe0, 0x2f, 0xf1, 0xeb, 0xe0, 0x7b, 0x42, 0x61, 0x6c, 0xad, 0xe0, 0x40,
+ 0x90, 0xf6, 0x02, 0x85, 0x6e, 0xef, 0xe0, 0x6f, 0x7e, 0x69, 0xe7, 0xe0,
+ 0x89, 0x0d, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67,
+ 0x65, 0x6d, 0x65, 0xee, 0xe0, 0x8a, 0xf3, 0x74, 0x6f, 0xf2, 0xe0, 0x85,
+ 0xb9, 0xf2, 0xd9, 0xcd, 0xed, 0x06, 0x60, 0x83, 0xa7, 0xc0, 0x83, 0xf3,
+ 0x60, 0x5d, 0x3b, 0xe0, 0x27, 0x55, 0x6c, 0xec, 0xe0, 0x78, 0xba, 0x6b,
+ 0xf5, 0xe0, 0x4a, 0x77, 0xe7, 0xe0, 0x58, 0xc1, 0xe4, 0x04, 0xe0, 0x7e,
+ 0xfe, 0xe5, 0xe0, 0x89, 0x50, 0x63, 0xeb, 0x44, 0xe4, 0xe0, 0x83, 0x80,
+ 0xae, 0x06, 0x60, 0x84, 0x29, 0x03, 0x83, 0xe9, 0x60, 0x89, 0x02, 0xc1,
+ 0xdd, 0xee, 0xe0, 0x7b, 0x73, 0xed, 0xe0, 0x88, 0xb3, 0xea, 0xe0, 0x63,
+ 0x27, 0xe9, 0x14, 0x06, 0x05, 0x1f, 0x15, 0x16, 0x05, 0x14, 0x05, 0x04,
+ 0x15, 0x60, 0x66, 0x4e, 0x47, 0xf3, 0x59, 0x7e, 0xc0, 0xb2, 0x76, 0x6e,
+ 0xe5, 0xe0, 0x6e, 0xff, 0x74, 0xf4, 0xe0, 0x85, 0x0a, 0xf3, 0x06, 0x06,
+ 0x04, 0xe0, 0x50, 0xe2, 0x1f, 0x43, 0xf8, 0xe0, 0x7e, 0xb8, 0xef, 0xe0,
+ 0x7e, 0xb4, 0x68, 0x69, 0x72, 0xe9, 0x04, 0xe0, 0x88, 0xc1, 0x66, 0x75,
+ 0xea, 0xe0, 0x88, 0xbd, 0xef, 0x07, 0x07, 0x60, 0x89, 0x0f, 0xc1, 0xa5,
+ 0x70, 0x72, 0x65, 0xf4, 0xe0, 0x7d, 0xc1, 0x62, 0x72, 0x61, 0xee, 0xcb,
+ 0xe3, 0xee, 0x04, 0xe0, 0x82, 0xfc, 0xe7, 0x02, 0x84, 0xf3, 0xe0, 0x38,
+ 0x1b, 0xe5, 0x04, 0xe0, 0x81, 0xb8, 0x72, 0xe9, 0xe0, 0x57, 0xd5, 0x6d,
+ 0xe9, 0xe0, 0x81, 0xa0, 0xeb, 0x04, 0xe0, 0x7f, 0x9a, 0xf5, 0x04, 0xe0,
+ 0x85, 0x48, 0x7a, 0x65, 0x6e, 0x74, 0x61, 0x6b, 0x61, 0xf4, 0xdf, 0xc3,
+ 0x69, 0xeb, 0xe0, 0x85, 0x16, 0xe6, 0xe0, 0x21, 0x2d, 0xe3, 0x05, 0x04,
+ 0xe0, 0x7d, 0x83, 0xef, 0xe0, 0x87, 0x8c, 0xe8, 0x04, 0xe0, 0x8a, 0x67,
+ 0x61, 0x72, 0xe4, 0xe0, 0x3a, 0x8a, 0x62, 0x65, 0x69, 0x72, 0xe1, 0xe0,
+ 0x7d, 0x66, 0xe8, 0xe0, 0x84, 0x73, 0xe7, 0x60, 0x76, 0xc6, 0xd1, 0x38,
+ 0xe5, 0x16, 0x06, 0x10, 0x40, 0x4f, 0x32, 0x19, 0x08, 0x0d, 0x07, 0x0c,
+ 0x05, 0x1c, 0x03, 0x1c, 0x23, 0x05, 0x40, 0x42, 0xe0, 0x88, 0xb6, 0x78,
+ 0x72, 0xef, 0xe0, 0x5e, 0x7a, 0x76, 0xe9, 0x02, 0x85, 0x73, 0xf4, 0xe0,
+ 0x87, 0x1d, 0x65, 0xf7, 0x60, 0x87, 0x6b, 0xc2, 0xbc, 0xf3, 0x04, 0x15,
+ 0x09, 0xa6, 0xf4, 0x05, 0x04, 0xe0, 0x8a, 0x13, 0xef, 0xe0, 0x7f, 0x1f,
+ 0x61, 0x75, 0x72, 0x61, 0x6e, 0xf4, 0x60, 0x7f, 0x16, 0xca, 0xf7, 0x69,
+ 0x6e, 0x64, 0x65, 0x76, 0xe9, 0xe0, 0x6b, 0xc0, 0xe5, 0x02, 0x96, 0x72,
+ 0xf6, 0x02, 0x89, 0x65, 0x2d, 0x6f, 0x6e, 0x6c, 0x69, 0xee, 0xc2, 0x0f,
+ 0x64, 0xae, 0x60, 0x65, 0x75, 0x19, 0xe0, 0x24, 0x29, 0x61, 0x72, 0x63,
+ 0xe8, 0x04, 0xe0, 0x86, 0xac, 0x65, 0xe4, 0xe0, 0x7d, 0x90, 0xae, 0x60,
+ 0x86, 0xa7, 0xc1, 0xac, 0xf0, 0x06, 0x08, 0x05, 0x0b, 0x06, 0x84, 0x75,
+ 0x62, 0x6c, 0x69, 0xe3, 0xe0, 0x85, 0x00, 0x6f, 0xf2, 0xe0, 0x87, 0xb1,
+ 0xec, 0x04, 0xe0, 0x40, 0xcc, 0xae, 0x60, 0x62, 0x18, 0xcd, 0xdb, 0x62,
+ 0x6f, 0xe4, 0xe0, 0x5b, 0x43, 0xe1, 0xe0, 0x40, 0xd0, 0xae, 0x04, 0xe0,
+ 0x88, 0x01, 0xeb, 0xe0, 0x87, 0xb4, 0xee, 0x07, 0x09, 0x5e, 0xac, 0xe0,
+ 0x6a, 0xe4, 0xf4, 0x04, 0xe0, 0x89, 0x94, 0xe1, 0xe0, 0x75, 0xe7, 0x6e,
+ 0xe5, 0x60, 0x2b, 0x89, 0xe0, 0x55, 0x20, 0x6d, 0x6f, 0x74, 0x65, 0xf7,
+ 0xe0, 0x87, 0xb7, 0xec, 0x02, 0x84, 0xe9, 0xe0, 0x28, 0x88, 0xae, 0x60,
+ 0x84, 0x6b, 0xc1, 0x29, 0x6b, 0x6c, 0x61, 0xed, 0xe0, 0x88, 0x23, 0xe9,
+ 0x04, 0xe0, 0x87, 0x56, 0x73, 0xe5, 0x60, 0x87, 0xe1, 0xc1, 0x84, 0x68,
+ 0xe1, 0xe0, 0x7e, 0x9b, 0xe7, 0x02, 0x95, 0x67, 0x69, 0xef, 0x03, 0x03,
+ 0x86, 0xad, 0x02, 0x86, 0x65, 0x6d, 0xe9, 0xe0, 0x52, 0x8a, 0x63, 0x61,
+ 0xec, 0xe0, 0x70, 0x7b, 0xae, 0xe0, 0x88, 0xc8, 0xe5, 0xc6, 0x67, 0xe4,
+ 0x08, 0x07, 0x08, 0x60, 0x72, 0x5d, 0xd6, 0xc7, 0x75, 0x6d, 0x62, 0xf2,
+ 0xe0, 0x65, 0x11, 0x69, 0x72, 0x65, 0x63, 0xf4, 0xe0, 0x85, 0x54, 0xae,
+ 0xe0, 0x4c, 0x92, 0xe3, 0x04, 0x05, 0x0b, 0x84, 0x72, 0xe5, 0xe0, 0x85,
+ 0xe2, 0xe9, 0x02, 0x84, 0xf0, 0xe0, 0x7c, 0x96, 0xe6, 0xe0, 0x6f, 0xfa,
+ 0xe8, 0xe0, 0x85, 0xae, 0xae, 0x60, 0x7d, 0xa1, 0x03, 0x40, 0x84, 0x49,
+ 0x08, 0xb2, 0x62, 0xf5, 0xe0, 0x58, 0x95, 0xe1, 0x02, 0x97, 0xec, 0x05,
+ 0x06, 0xe0, 0x64, 0x65, 0xf4, 0x60, 0x85, 0x68, 0xc0, 0xfc, 0x65, 0x73,
+ 0x74, 0x61, 0x74, 0xe5, 0x60, 0x83, 0xa0, 0xc5, 0x43, 0xe4, 0x07, 0x07,
+ 0x08, 0x09, 0xe0, 0x88, 0xbe, 0x79, 0x6d, 0x61, 0xe4, 0xe0, 0x79, 0x2c,
+ 0x74, 0x68, 0x65, 0x64, 0x6f, 0xe3, 0xdd, 0xa6, 0x6d, 0x79, 0x62, 0x6c,
+ 0x6f, 0xe7, 0xe0, 0x85, 0x9c, 0x2d, 0x62, 0x6f, 0x6f, 0xeb, 0xe0, 0x73,
+ 0x3d, 0xae, 0x60, 0x71, 0x20, 0xd5, 0x40, 0xe4, 0xe0, 0x7f, 0x6b, 0xe1,
+ 0x12, 0x08, 0x1f, 0x05, 0x04, 0x17, 0x04, 0x05, 0x09, 0x11, 0x1a, 0x0a,
+ 0x20, 0x58, 0x5f, 0xe0, 0x6d, 0x36, 0x77, 0x61, 0x2d, 0x6d, 0xe1, 0xe0,
+ 0x70, 0xc7, 0xf6, 0x02, 0x89, 0x70, 0x61, 0x67, 0x65, 0x2e, 0x63, 0xef,
+ 0xd9, 0x0a, 0x65, 0xee, 0x04, 0xe0, 0x7f, 0xa7, 0x64, 0x62, 0xae, 0x04,
+ 0xe0, 0x60, 0xd7, 0xe3, 0x59, 0xe6, 0xe0, 0x56, 0x04, 0x75, 0xed, 0xe0,
+ 0x81, 0xc1, 0xf2, 0xe0, 0x5c, 0xc4, 0xee, 0x06, 0x06, 0x05, 0xe0, 0x81,
+ 0xa8, 0x7a, 0x61, 0xee, 0xe0, 0x7c, 0xa8, 0x6b, 0xef, 0xe0, 0x81, 0xb0,
+ 0x64, 0xe1, 0xe0, 0x5a, 0x56, 0xec, 0xe0, 0x24, 0x69, 0x6b, 0xeb, 0xe0,
+ 0x40, 0x89, 0xe9, 0x04, 0xe0, 0x4e, 0x55, 0xee, 0xe0, 0x78, 0x7f, 0xe8,
+ 0x02, 0x85, 0x6f, 0xec, 0xe0, 0x80, 0x0d, 0x6b, 0x6b, 0x65, 0x72, 0x61,
+ 0xf6, 0xe0, 0x81, 0x39, 0xe7, 0x02, 0x84, 0xf5, 0xe0, 0x6e, 0x71, 0x2d,
+ 0x63, 0x6c, 0x6f, 0x75, 0xe4, 0x02, 0x83, 0x2d, 0x63, 0x68, 0x2e, 0x68,
+ 0x6f, 0x73, 0xf4, 0xe0, 0x57, 0x8d, 0x66, 0x66, 0x6c, 0x65, 0x65, 0x6e,
+ 0xf4, 0xe0, 0x83, 0x72, 0xe4, 0x07, 0x06, 0x60, 0x7e, 0xc9, 0xc7, 0x4b,
+ 0xef, 0x60, 0x70, 0x20, 0xce, 0xf3, 0x69, 0xef, 0x04, 0xe0, 0x87, 0xf7,
+ 0xae, 0x07, 0x60, 0x5f, 0x70, 0xe0, 0x26, 0xdb, 0xe6, 0xe0, 0x87, 0xba,
+ 0xe3, 0x04, 0xe0, 0x71, 0xc2, 0x6b, 0x6d, 0x61, 0x7a, 0xe5, 0xe0, 0x84,
+ 0x23, 0xb2, 0xe0, 0x7c, 0xf2, 0xae, 0x07, 0x08, 0x60, 0x75, 0xcb, 0xd1,
+ 0xfd, 0x63, 0x64, 0x6e, 0x37, 0xb7, 0xe0, 0x87, 0x6a, 0x61, 0x70, 0x70,
+ 0x73, 0x70, 0xef, 0xe0, 0x67, 0xf2, 0xf1, 0x0e, 0x40, 0x4c, 0x04, 0x04,
+ 0x06, 0x0e, 0x04, 0x0c, 0x06, 0x09, 0xe0, 0x87, 0x28, 0xf5, 0x03, 0x1a,
+ 0x89, 0xe9, 0x03, 0x06, 0x8a, 0x7a, 0x7a, 0xe5, 0xe0, 0x7b, 0x5a, 0x70,
+ 0x65, 0x6c, 0x65, 0x6d, 0x65, 0xee, 0xe0, 0x26, 0x07, 0x63, 0x6b, 0x73,
+ 0xf9, 0xc9, 0x13, 0xe5, 0x04, 0xe0, 0x7a, 0x2d, 0xe2, 0xe0, 0x65, 0x12,
+ 0xe1, 0x02, 0x9a, 0x6e, 0xe7, 0x05, 0x05, 0xe0, 0x41, 0xd3, 0x74, 0xf2,
+ 0xe0, 0x5d, 0xee, 0xee, 0x05, 0x04, 0xe0, 0x77, 0x81, 0xe7, 0xe0, 0x5d,
+ 0xe3, 0xe1, 0xe0, 0x2c, 0x14, 0x6c, 0x69, 0x66, 0x69, 0xef, 0xe0, 0x86,
+ 0x2f, 0xf3, 0xe0, 0x51, 0xad, 0xf0, 0xe0, 0x7f, 0x72, 0x6f, 0x74, 0xef,
+ 0xe0, 0x86, 0x09, 0x6c, 0x64, 0xae, 0x05, 0x60, 0x83, 0xde, 0x84, 0x67,
+ 0x6f, 0xf6, 0xe0, 0x83, 0xde, 0xe8, 0xe0, 0x73, 0x42, 0xe3, 0x04, 0xe0,
+ 0x5a, 0xa7, 0x2e, 0xe3, 0x60, 0x85, 0x45, 0xc1, 0xc5, 0x62, 0x75, 0xf3,
+ 0xe0, 0x7c, 0xee, 0xe1, 0x04, 0xe0, 0x87, 0x2f, 0xb2, 0xe0, 0x86, 0xf7,
+ 0x2d, 0xe1, 0xe0, 0x75, 0x23, 0xf0, 0x23, 0x04, 0x1d, 0x06, 0x11, 0x40,
+ 0x5a, 0x06, 0x13, 0x41, 0x6d, 0x0f, 0x40, 0xea, 0x08, 0x09, 0x40, 0x82,
+ 0x40, 0x90, 0x40, 0x56, 0x17, 0x0a, 0x40, 0x70, 0x0a, 0x15, 0x09, 0x60,
+ 0x56, 0x1b, 0xe0, 0x28, 0xeb, 0xfa, 0xe0, 0x84, 0xab, 0xf9, 0x08, 0x05,
+ 0x60, 0x55, 0xd5, 0xe0, 0x31, 0x1b, 0x6d, 0xee, 0xe0, 0x3c, 0x0e, 0xe1,
+ 0x04, 0xe0, 0x86, 0xa9, 0x74, 0x69, 0x67, 0x6f, 0x72, 0x73, 0xeb, 0xe0,
+ 0x73, 0x73, 0xf7, 0x60, 0x7a, 0x78, 0xcc, 0x68, 0xf6, 0x05, 0x07, 0xe0,
+ 0x84, 0x78, 0x74, 0xae, 0x60, 0x54, 0xa0, 0xd5, 0x24, 0xe8, 0xe0, 0x85,
+ 0x28, 0xf5, 0x0a, 0x06, 0x05, 0x06, 0x06, 0x07, 0x05, 0xe0, 0x84, 0x46,
+ 0x73, 0x73, 0x79, 0xe3, 0xc3, 0xbc, 0xf0, 0x06, 0xe0, 0x47, 0xbe, 0x6e,
+ 0x79, 0xf5, 0xe0, 0x86, 0x6f, 0x6c, 0x61, 0xf7, 0xe0, 0x74, 0x1b, 0xe7,
+ 0x60, 0x4f, 0xe5, 0xe0, 0x34, 0x6c, 0x65, 0x62, 0xec, 0xda, 0x0b, 0xe2,
+ 0x06, 0x05, 0x18, 0xe0, 0x86, 0x78, 0x74, 0xec, 0xe0, 0x71, 0x17, 0xec,
+ 0x02, 0x91, 0xe9, 0x02, 0x85, 0x73, 0xe8, 0xe0, 0x67, 0xf7, 0x63, 0x2d,
+ 0x69, 0x6e, 0x71, 0xf5, 0xe0, 0x3b, 0x92, 0xae, 0xe0, 0x3a, 0x64, 0xae,
+ 0x03, 0xc1, 0x0f, 0xf3, 0xe0, 0x84, 0x79, 0xf4, 0x60, 0x73, 0x90, 0xd2,
+ 0xdf, 0xf3, 0x0d, 0x5a, 0xf6, 0x51, 0x11, 0x60, 0x29, 0x9d, 0x60, 0x27,
+ 0xea, 0xc8, 0xce, 0x73, 0xe5, 0xe0, 0x47, 0x66, 0xf2, 0x10, 0x08, 0x06,
+ 0x12, 0x40, 0x71, 0x40, 0x6f, 0x40, 0x43, 0x09, 0x44, 0x80, 0xe0, 0x80,
+ 0x7a, 0x7a, 0x65, 0x77, 0x6f, 0xf2, 0xe0, 0x25, 0xac, 0x76, 0x63, 0xf9,
+ 0xe0, 0x65, 0x54, 0xf5, 0x05, 0x05, 0xe0, 0x86, 0x2d, 0x73, 0xfa, 0xe0,
+ 0x22, 0x9f, 0x64, 0x65, 0x6e, 0xf4, 0xe0, 0x52, 0x5c, 0xef, 0x0b, 0x0c,
+ 0x0a, 0x04, 0x08, 0x0c, 0x10, 0x04, 0xe0, 0x85, 0xd8, 0xf4, 0x02, 0x85,
+ 0x6f, 0xee, 0xe0, 0x72, 0x90, 0xe5, 0xe0, 0x78, 0xf3, 0x70, 0x65, 0x72,
+ 0xf4, 0x60, 0x2d, 0xfd, 0xe0, 0x55, 0x83, 0xed, 0xe0, 0x84, 0x2e, 0x67,
+ 0x72, 0x65, 0x73, 0xf3, 0xe0, 0x5b, 0xec, 0xe6, 0x07, 0x60, 0x55, 0x53,
+ 0xe0, 0x30, 0x9d, 0x65, 0xf3, 0xc2, 0x24, 0xe4, 0x04, 0xe0, 0x85, 0xe7,
+ 0x75, 0x63, 0x74, 0x69, 0x6f, 0xee, 0x60, 0x82, 0xaf, 0xc0, 0x76, 0x63,
+ 0xe8, 0xc1, 0x88, 0xae, 0x18, 0x54, 0x8c, 0x60, 0x40, 0x97, 0x4e, 0x20,
+ 0x5a, 0xf5, 0x42, 0x9e, 0x40, 0x90, 0x2a, 0x40, 0x4b, 0x40, 0xf6, 0x40,
+ 0x5a, 0x40, 0xf0, 0x9f, 0xf4, 0x04, 0xe0, 0x83, 0xa9, 0x79, 0xf0, 0xe0,
+ 0x42, 0xef, 0xe9, 0x07, 0x40, 0x53, 0x08, 0xe0, 0x7f, 0xeb, 0xf6, 0x02,
+ 0xb8, 0x61, 0xf4, 0x02, 0x94, 0x69, 0x7a, 0x65, 0x68, 0x65, 0x61, 0x6c,
+ 0x74, 0x68, 0x69, 0x6e, 0x73, 0x75, 0x72, 0x61, 0x6e, 0xe3, 0xe0, 0x81,
+ 0xc3, 0xe5, 0x02, 0x91, 0x6c, 0x69, 0x6e, 0x6b, 0x2e, 0x73, 0x6e, 0x6f,
+ 0x77, 0x66, 0x6c, 0x61, 0x6b, 0xe5, 0xe0, 0x73, 0x44, 0x2e, 0x72, 0x65,
+ 0x70, 0x6f, 0x73, 0x74, 0x2e, 0xe1, 0xe0, 0x81, 0x7f, 0xae, 0x0c, 0x60,
+ 0x68, 0x61, 0x57, 0xf7, 0x43, 0x26, 0x40, 0x9c, 0xc0, 0x75, 0x69, 0x6e,
+ 0x73, 0x74, 0x61, 0x6e, 0x63, 0xe5, 0xe0, 0x64, 0x95, 0x6e, 0x63, 0x69,
+ 0x70, 0xe5, 0xe0, 0x62, 0xb1, 0x6d, 0xe5, 0x04, 0xe0, 0x85, 0x4c, 0x74,
+ 0x65, 0xec, 0xe0, 0x6c, 0xba, 0xe5, 0x04, 0x0a, 0x1d, 0x88, 0x76, 0x69,
+ 0x65, 0x77, 0x2e, 0x63, 0xf3, 0xe0, 0x61, 0x34, 0x73, 0xf3, 0x05, 0x09,
+ 0xe0, 0x85, 0x27, 0x65, 0xae, 0x60, 0x47, 0xb9, 0x60, 0x31, 0x19, 0x9a,
+ 0xae, 0x08, 0x60, 0x73, 0x1f, 0x4d, 0x16, 0xc1, 0xb8, 0xed, 0xe0, 0x83,
+ 0x23, 0x72, 0x65, 0x6c, 0x65, 0x61, 0xf3, 0xc2, 0x0e, 0x71, 0x75, 0x61,
+ 0x6c, 0x69, 0x66, 0x79, 0x6d, 0x65, 0x2e, 0x74, 0x6f, 0xe4, 0xc4, 0x45,
+ 0x64, 0xae, 0x60, 0x28, 0xeb, 0x60, 0x4f, 0xb4, 0xa0, 0xe1, 0x05, 0x04,
+ 0xe0, 0x7f, 0xf1, 0xf8, 0xe0, 0x82, 0x87, 0x6d, 0x65, 0xf2, 0xe0, 0x61,
+ 0xc7, 0xf0, 0x04, 0xe0, 0x65, 0x1d, 0xae, 0x53, 0xb1, 0x60, 0x5d, 0x6c,
+ 0x41, 0xc8, 0xcd, 0xfe, 0xef, 0x10, 0x06, 0x06, 0x0a, 0x12, 0x29, 0x11,
+ 0x0a, 0x29, 0x0b, 0x18, 0x04, 0x16, 0xe0, 0x7a, 0x01, 0x7a, 0x6e, 0xe1,
+ 0xe0, 0x21, 0x5e, 0x77, 0x69, 0xe1, 0xe0, 0x5f, 0xa6, 0xf4, 0x04, 0xe0,
+ 0x61, 0x8a, 0x61, 0xe7, 0xe0, 0x36, 0xe9, 0x73, 0xf4, 0x06, 0x60, 0x83,
+ 0x26, 0xc1, 0x86, 0x6d, 0x61, 0x6e, 0x2d, 0x65, 0x63, 0xe8, 0xe0, 0x77,
+ 0x2f, 0xf2, 0x07, 0x1c, 0x60, 0x80, 0x34, 0xc2, 0xc6, 0xf3, 0x03, 0x09,
+ 0x87, 0x1f, 0x43, 0x61, 0x1f, 0x45, 0xcb, 0xe0, 0x33, 0xd1, 0x67, 0x72,
+ 0x75, 0xee, 0xe0, 0x7d, 0xcd, 0x61, 0x6e, 0xe7, 0x60, 0x78, 0x62, 0xc5,
+ 0x29, 0x64, 0xe5, 0xe0, 0x4c, 0xe4, 0xee, 0x02, 0x86, 0x70, 0x65, 0xf3,
+ 0xe0, 0x5d, 0x34, 0x69, 0x61, 0x74, 0x6f, 0xf7, 0xe0, 0x49, 0xec, 0x6d,
+ 0x6f, 0xf2, 0x03, 0xde, 0x48, 0x73, 0xeb, 0xc0, 0x60, 0xec, 0x04, 0x06,
+ 0x05, 0x91, 0x74, 0x61, 0xf6, 0xe0, 0x60, 0x92, 0x6b, 0xef, 0xe0, 0x2d,
+ 0x7f, 0xe9, 0x02, 0x8a, 0x74, 0xe9, 0x04, 0xe0, 0x82, 0x87, 0xe3, 0xe0,
+ 0x81, 0x35, 0x63, 0xe5, 0xcf, 0xa9, 0xae, 0x60, 0x75, 0xdc, 0x42, 0x01,
+ 0xc8, 0x7b, 0xeb, 0x04, 0xe0, 0x6f, 0xe9, 0x72, 0x6f, 0xf6, 0xe0, 0x7d,
+ 0x68, 0xe9, 0x02, 0x86, 0x76, 0x72, 0xef, 0xe0, 0x63, 0x1e, 0x6e, 0xf4,
+ 0x02, 0x85, 0x74, 0xef, 0xe0, 0x49, 0x10, 0x32, 0x74, 0xe8, 0xe0, 0x49,
+ 0x4b, 0xe8, 0xe0, 0x81, 0x6f, 0xe4, 0x03, 0x07, 0x87, 0x7a, 0x6f, 0x6e,
+ 0xe5, 0xe0, 0x54, 0x81, 0x6c, 0x61, 0x73, 0xe9, 0xe0, 0x46, 0xda, 0x68,
+ 0xe1, 0xc6, 0xae, 0xae, 0x60, 0x45, 0x04, 0xe0, 0x3c, 0x9e, 0xee, 0x60,
+ 0x77, 0x88, 0x4a, 0x12, 0xc2, 0x56, 0xed, 0x04, 0xe0, 0x83, 0xe4, 0xee,
+ 0xe0, 0x81, 0x8d, 0xec, 0x0a, 0x16, 0x04, 0x12, 0x0c, 0x5f, 0xd9, 0xe0,
+ 0x63, 0xc4, 0xf5, 0x05, 0x0b, 0xe0, 0x81, 0x08, 0x72, 0x69, 0x6e, 0x61,
+ 0x63, 0x69, 0x6f, 0x6e, 0xe1, 0xd1, 0x9b, 0x6d, 0xe2, 0xe0, 0x6d, 0x9e,
+ 0x6f, 0xae, 0xc1, 0x2d, 0xe5, 0x02, 0x88, 0x79, 0x2e, 0x67, 0x61, 0xed,
+ 0xe0, 0x83, 0x01, 0x73, 0xeb, 0x60, 0x59, 0xbb, 0xc9, 0x0c, 0x63, 0xae,
+ 0x06, 0x4f, 0x0c, 0xe0, 0x6c, 0x90, 0xe3, 0xe0, 0x20, 0x67, 0xe1, 0x05,
+ 0x14, 0xe0, 0x7d, 0xec, 0xf9, 0x04, 0xe0, 0x83, 0x92, 0x73, 0x74, 0x61,
+ 0x74, 0x69, 0x6f, 0xee, 0x04, 0xe0, 0x83, 0x87, 0xad, 0xe0, 0x7d, 0xa1,
+ 0xf4, 0x02, 0x93, 0x74, 0x65, 0xf2, 0x02, 0x84, 0xf0, 0xe0, 0x48, 0x6f,
+ 0x2d, 0x61, 0x70, 0x70, 0xae, 0x60, 0x82, 0x6b, 0xc0, 0xd1, 0x66, 0x6f,
+ 0x72, 0xed, 0x02, 0x85, 0x73, 0xe8, 0xe0, 0x64, 0x86, 0xb0, 0xe0, 0x7f,
+ 0xbd, 0xe9, 0x16, 0x04, 0x08, 0x0c, 0x06, 0x12, 0x07, 0x09, 0x05, 0x07,
+ 0x12, 0x16, 0x60, 0x25, 0x98, 0x5e, 0x46, 0x60, 0x2f, 0x5b, 0xcc, 0xfb,
+ 0xfa, 0xe0, 0x7e, 0x4c, 0x78, 0x6f, 0x6c, 0x69, 0xee, 0xe0, 0x75, 0xc8,
+ 0xf3, 0x06, 0x60, 0x6b, 0x67, 0xd0, 0xb7, 0x74, 0xef, 0xe0, 0x7c, 0x1b,
+ 0x6f, 0x6e, 0xe5, 0xe0, 0x6e, 0xe5, 0xee, 0x08, 0x05, 0x60, 0x80, 0x62,
+ 0x42, 0xb8, 0x81, 0x6f, 0xeb, 0xe0, 0x69, 0xa7, 0xe2, 0xe0, 0x44, 0x26,
+ 0x6d, 0x69, 0x65, 0xee, 0xe0, 0x7b, 0x82, 0xec, 0x04, 0xe0, 0x73, 0x6e,
+ 0xef, 0xe0, 0x7d, 0x7a, 0x6b, 0xe5, 0xe0, 0x78, 0x13, 0x67, 0x62, 0x6f,
+ 0xe1, 0xe0, 0x6b, 0x57, 0xe5, 0x02, 0x87, 0x6d, 0x6f, 0x6e, 0xf4, 0xe0,
+ 0x7b, 0x5b, 0x64, 0x6d, 0x6f, 0x6e, 0xf4, 0xe0, 0x80, 0x96, 0xe3, 0x05,
+ 0x0a, 0xe0, 0x80, 0x1d, 0xf4, 0x04, 0xe0, 0x6f, 0x40, 0x75, 0xf2, 0xe0,
+ 0x76, 0x60, 0x61, 0x72, 0xe4, 0xe0, 0x77, 0xe4, 0x61, 0xe3, 0xe0, 0x5f,
+ 0xa2, 0xe8, 0x0b, 0x06, 0x0d, 0x07, 0x15, 0x07, 0x60, 0x7f, 0xed, 0xc2,
+ 0x9f, 0x79, 0x73, 0xe9, 0xe0, 0x80, 0xea, 0x78, 0x2e, 0x65, 0x6e, 0x73,
+ 0x63, 0x61, 0x6c, 0x65, 0xe4, 0xe0, 0x47, 0xa7, 0xf5, 0x60, 0x3b, 0x0a,
+ 0xe0, 0x2e, 0x57, 0xef, 0x04, 0xe0, 0x6b, 0xdf, 0x74, 0xef, 0x06, 0x60,
+ 0x7f, 0xdf, 0xc2, 0xbc, 0x67, 0x72, 0x61, 0x70, 0xe8, 0xe0, 0x80, 0x0c,
+ 0x69, 0x6c, 0x69, 0xf0, 0xe0, 0x7f, 0xd3, 0x61, 0x72, 0x6d, 0x61, 0xe3,
+ 0x04, 0xe0, 0x7f, 0xf9, 0x69, 0x65, 0xee, 0x04, 0xe0, 0x81, 0xb0, 0xf3,
+ 0xe0, 0x76, 0x38, 0xe7, 0x07, 0x04, 0x04, 0x03, 0xe0, 0x70, 0x69, 0xf7,
+ 0xe0, 0x82, 0x2d, 0xe6, 0xe0, 0x57, 0x73, 0xe1, 0xcd, 0xd7, 0xae, 0xe0,
+ 0x69, 0xdc, 0xe6, 0x04, 0xe0, 0x82, 0x5c, 0x69, 0xfa, 0xe0, 0x6e, 0x13,
+ 0xe5, 0x0c, 0x12, 0x2c, 0x05, 0x09, 0x06, 0x06, 0x60, 0x7f, 0xe1, 0xc2,
+ 0x11, 0xf3, 0x02, 0x83, 0xe3, 0xdc, 0xd1, 0x61, 0x72, 0xef, 0x02, 0x81,
+ 0x2d, 0x75, 0x72, 0xe2, 0xe0, 0x73, 0xd4, 0xf2, 0x04, 0x04, 0x14, 0x84,
+ 0xf5, 0xe0, 0x4d, 0x04, 0xf3, 0x02, 0x87, 0x70, 0x65, 0x63, 0xf4, 0xe0,
+ 0x31, 0xf6, 0x6f, 0xae, 0x60, 0x52, 0x4d, 0x60, 0x24, 0x85, 0xc7, 0x6d,
+ 0xed, 0xe0, 0x71, 0xb0, 0xae, 0x06, 0x60, 0x5d, 0xf4, 0xd8, 0xba, 0xf3,
+ 0xe0, 0x82, 0x0e, 0x70, 0xf0, 0xe0, 0x6e, 0x7b, 0xee, 0x04, 0xe0, 0x47,
+ 0x64, 0xfa, 0xe0, 0x7f, 0xc3, 0x65, 0x77, 0xe5, 0xe0, 0x72, 0x55, 0x63,
+ 0x6f, 0xf2, 0xe0, 0x5b, 0x60, 0xae, 0x60, 0x6a, 0x5c, 0x50, 0xaa, 0x03,
+ 0x44, 0x93, 0xc0, 0x5a, 0xe4, 0x04, 0xe0, 0x7f, 0x8c, 0x6e, 0xf3, 0xe0,
+ 0x60, 0xf9, 0xe3, 0x03, 0x07, 0x84, 0x6c, 0x6f, 0x75, 0xe4, 0xe0, 0x4b,
+ 0x43, 0xe3, 0xe0, 0x7f, 0x0e, 0xae, 0x60, 0x7c, 0xc0, 0xc2, 0xb8, 0x62,
+ 0xae, 0x60, 0x55, 0x6c, 0x60, 0x25, 0x6f, 0x83, 0xe1, 0x10, 0x14, 0x04,
+ 0x05, 0x10, 0x40, 0x51, 0x1b, 0x0c, 0x40, 0x55, 0x08, 0x32, 0xe0, 0x80,
+ 0x7a, 0xf9, 0x05, 0x08, 0xe0, 0x81, 0xa0, 0x77, 0x68, 0x69, 0x72, 0xec,
+ 0xe0, 0x81, 0x9b, 0x6e, 0x6f, 0xf7, 0xe0, 0x75, 0x51, 0xf6, 0xe0, 0x7a,
+ 0x82, 0x74, 0xf2, 0xe0, 0x7e, 0x84, 0x73, 0x73, 0x65, 0x6e, 0x67, 0x65,
+ 0x72, 0x2d, 0x61, 0x73, 0x73, 0x6f, 0xe3, 0xe0, 0x63, 0xb6, 0xf2, 0x09,
+ 0x0f, 0x06, 0x04, 0x09, 0x0c, 0xe0, 0x7e, 0x8d, 0xf4, 0x06, 0x04, 0x60,
+ 0x7e, 0xb0, 0xb2, 0xee, 0xe0, 0x4f, 0x02, 0xe9, 0xe0, 0x6f, 0x6b, 0x6f,
+ 0x63, 0xe8, 0xe0, 0x64, 0x55, 0xed, 0xe0, 0x7a, 0x4b, 0x6c, 0x69, 0x61,
+ 0x6d, 0x65, 0xee, 0xe0, 0x42, 0xdf, 0x69, 0xf3, 0x04, 0xe0, 0x81, 0x4f,
+ 0xae, 0x60, 0x76, 0x5d, 0xc4, 0x0c, 0xe1, 0x06, 0x05, 0x06, 0xe0, 0x3f,
+ 0x6c, 0x73, 0xe9, 0xe0, 0x60, 0x61, 0x6c, 0x6c, 0xe5, 0xe0, 0x5c, 0x80,
+ 0x63, 0x68, 0x75, 0xf4, 0xe0, 0x70, 0xf6, 0xee, 0x03, 0x09, 0x89, 0x74,
+ 0x68, 0x65, 0x6f, 0x6e, 0xf3, 0xe0, 0x6b, 0xc3, 0x65, 0x6c, 0xae, 0x60,
+ 0x5c, 0x45, 0xe0, 0x23, 0xd4, 0x61, 0x73, 0xef, 0xc2, 0xb0, 0xec, 0x02,
+ 0x84, 0xed, 0xe0, 0x66, 0xf1, 0x65, 0xf2, 0xe0, 0x6e, 0x99, 0x67, 0xe5,
+ 0x07, 0x04, 0x40, 0x40, 0xe0, 0x80, 0xbc, 0xf8, 0xe0, 0x79, 0x97, 0xf3,
+ 0x02, 0x8e, 0x70, 0x65, 0x65, 0x64, 0x6d, 0x6f, 0x62, 0x69, 0x6c, 0x69,
+ 0xfa, 0xe0, 0x76, 0xa5, 0xae, 0x07, 0x08, 0x09, 0x11, 0xe0, 0x7f, 0xba,
+ 0x77, 0x69, 0x61, 0x72, 0xe4, 0xe0, 0x5a, 0xf5, 0x74, 0x6f, 0x72, 0x70,
+ 0x72, 0x6f, 0xea, 0xd2, 0x5d, 0x69, 0x74, 0x2e, 0x68, 0x73, 0x2d, 0x68,
+ 0x65, 0x69, 0x6c, 0x62, 0x72, 0x6f, 0xee, 0xe0, 0x56, 0x39, 0x67, 0xe1,
+ 0xe0, 0x6c, 0x27, 0x66, 0x72, 0x6f, 0x6e, 0xf4, 0xe0, 0x7f, 0x7d, 0xe4,
+ 0x03, 0xdb, 0xc1, 0xf5, 0xe0, 0x79, 0x99, 0x61, 0x73, 0xae, 0x04, 0x0d,
+ 0x0f, 0x87, 0x6d, 0x61, 0x73, 0x73, 0x69, 0x76, 0x65, 0x67, 0x72, 0xe9,
+ 0xe0, 0x7e, 0xcf, 0x68, 0x6f, 0x73, 0x74, 0x65, 0x64, 0x2d, 0x62, 0x79,
+ 0x2d, 0x70, 0x72, 0xe5, 0xc0, 0xac, 0x64, 0x61, 0x74, 0xe1, 0xe0, 0x59,
+ 0x98, 0x62, 0x65, 0x65, 0x62, 0xf9, 0xe0, 0x6b, 0x1b, 0xae, 0x60, 0x76,
+ 0x93, 0x42, 0xfb, 0x41, 0x5f, 0xc3, 0x37, 0xef, 0x28, 0x11, 0x38, 0x09,
+ 0x2e, 0x10, 0x1e, 0x40, 0x69, 0x40, 0x94, 0x41, 0x37, 0x40, 0x4e, 0x1f,
+ 0x40, 0xf5, 0x40, 0x5b, 0x38, 0x40, 0x62, 0x0a, 0x30, 0x29, 0x40, 0x51,
+ 0x40, 0x44, 0x25, 0x22, 0x40, 0x53, 0x15, 0x60, 0x35, 0x50, 0xd8, 0x73,
+ 0xfa, 0x05, 0x07, 0xe0, 0x7c, 0xcb, 0x75, 0xae, 0x60, 0x78, 0x5c, 0xc2,
+ 0x8d, 0xef, 0xe0, 0x7e, 0x03, 0xf9, 0x08, 0x0c, 0x05, 0x04, 0x15, 0xe0,
+ 0x73, 0xe2, 0x73, 0x74, 0x72, 0x65, 0x2d, 0x73, 0x6c, 0x69, 0xe4, 0xe0,
+ 0x56, 0x63, 0x6f, 0xe4, 0xe0, 0x3b, 0xc0, 0x67, 0xe1, 0xda, 0xb6, 0xe1,
+ 0x07, 0x60, 0x22, 0xa1, 0xe0, 0x5b, 0xe0, 0x6d, 0xe1, 0x04, 0xe0, 0x74,
+ 0x0d, 0x7a, 0x61, 0x6b, 0xe9, 0xe0, 0x71, 0x2e, 0x2e, 0xec, 0xe0, 0x7f,
+ 0xbb, 0xf8, 0x04, 0xe0, 0x2f, 0xc7, 0xae, 0xe0, 0x60, 0xc2, 0xf7, 0x03,
+ 0x09, 0x93, 0x6f, 0x2e, 0x63, 0x6f, 0x64, 0xe5, 0xe0, 0x7b, 0xf6, 0xee,
+ 0x05, 0x08, 0xe0, 0x4c, 0xa2, 0x70, 0x72, 0x6f, 0x76, 0xe9, 0xe0, 0x75,
+ 0x93, 0x2e, 0xf0, 0xe0, 0x7f, 0xa4, 0xe1, 0x02, 0x87, 0x72, 0x69, 0x61,
+ 0x73, 0xe1, 0xc5, 0x37, 0xee, 0xe0, 0x3d, 0xa8, 0xf6, 0x06, 0x4d, 0x11,
+ 0xe0, 0x6f, 0xcc, 0x65, 0x72, 0x68, 0x61, 0x6c, 0xec, 0xe0, 0x79, 0x0b,
+ 0xf5, 0x04, 0x09, 0x07, 0x84, 0x74, 0x73, 0x79, 0x73, 0x74, 0x65, 0xed,
+ 0xd0, 0xc5, 0xed, 0x60, 0x40, 0xb4, 0xe0, 0x39, 0xb7, 0xe4, 0xe0, 0x36,
+ 0x2f, 0x63, 0xe8, 0xe0, 0x46, 0xfd, 0xf4, 0x0a, 0x17, 0x18, 0x07, 0x04,
+ 0x60, 0x7c, 0xfe, 0xc0, 0x45, 0x73, 0xf5, 0x05, 0x0c, 0xe0, 0x79, 0xa1,
+ 0xeb, 0x04, 0xe0, 0x7d, 0x88, 0x69, 0xae, 0x60, 0x62, 0x57, 0xd6, 0xa1,
+ 0xe3, 0xe0, 0x2a, 0x9d, 0xef, 0x09, 0x04, 0x04, 0x60, 0x38, 0xb0, 0xe0,
+ 0x2e, 0xfd, 0xf9, 0xe0, 0x3b, 0x2d, 0xe9, 0xe0, 0x22, 0x2b, 0x66, 0x75,
+ 0xeb, 0xe0, 0x62, 0xae, 0x68, 0x65, 0x72, 0xae, 0xe0, 0x73, 0xf9, 0xe5,
+ 0xe0, 0x74, 0x60, 0xe1, 0x09, 0x06, 0x06, 0x60, 0x23, 0xb5, 0xe0, 0x3e,
+ 0xcb, 0xf2, 0x60, 0x7a, 0x0c, 0xc1, 0xd3, 0x70, 0x2e, 0xe3, 0xe0, 0x70,
+ 0x2c, 0xeb, 0x04, 0xe0, 0x21, 0xd9, 0x69, 0xae, 0x60, 0x74, 0x64, 0x47,
+ 0x6b, 0xc1, 0x38, 0xf3, 0x0b, 0x04, 0x24, 0x06, 0x16, 0x09, 0x06, 0x25,
+ 0xe0, 0x75, 0xce, 0x1f, 0x43, 0xf8, 0xa6, 0xf4, 0x02, 0x9d, 0xf2, 0x02,
+ 0x93, 0xef, 0x06, 0x46, 0xa1, 0xe0, 0x4f, 0x81, 0xf7, 0x04, 0xe0, 0x69,
+ 0x22, 0x77, 0x6c, 0x6b, 0xf0, 0xe0, 0x79, 0xc7, 0x65, 0x2d, 0x74, 0xef,
+ 0xe0, 0x38, 0x45, 0xe5, 0xe0, 0x70, 0x91, 0x6f, 0x79, 0xf2, 0xe0, 0x76,
+ 0x1c, 0xe8, 0x02, 0x84, 0xf5, 0xe0, 0x46, 0xfa, 0xe9, 0x02, 0x84, 0xee,
+ 0xe0, 0x46, 0xc3, 0x6d, 0x61, 0xae, 0x60, 0x7b, 0x4a, 0xc1, 0x33, 0xe5,
+ 0x04, 0xe0, 0x78, 0x1f, 0xf4, 0xe0, 0x41, 0x85, 0x63, 0x68, 0xf2, 0xe0,
+ 0x3f, 0xe0, 0xe1, 0x02, 0x85, 0x73, 0xe3, 0xe0, 0x71, 0xd6, 0xeb, 0x02,
+ 0x8c, 0xe9, 0x04, 0xe0, 0x45, 0x8f, 0x6b, 0x61, 0x6d, 0xe9, 0xe0, 0x4e,
+ 0x0a, 0xe1, 0x06, 0x60, 0x7c, 0xb4, 0xc1, 0xff, 0x73, 0x61, 0x79, 0xe1,
+ 0xe0, 0x2a, 0x70, 0x2e, 0xe8, 0x02, 0x87, 0x6f, 0x72, 0x64, 0xe1, 0xe0,
+ 0x71, 0x63, 0x65, 0xe4, 0xe0, 0x73, 0x94, 0xf2, 0x0b, 0x04, 0x0d, 0x06,
+ 0x0b, 0x40, 0xd2, 0x18, 0xe0, 0x70, 0x43, 0xf8, 0xe0, 0x7b, 0x14, 0xf3,
+ 0x07, 0x60, 0x50, 0x80, 0xe0, 0x27, 0x54, 0x69, 0xf4, 0xe0, 0x7d, 0x1b,
+ 0xeb, 0x60, 0x67, 0xc5, 0xcf, 0x0c, 0xe9, 0x02, 0x84, 0x73, 0xf4, 0xd7,
+ 0x9c, 0xe7, 0xe0, 0x6d, 0xbc, 0xe7, 0x05, 0x06, 0xe0, 0x7e, 0x62, 0x61,
+ 0x6e, 0xe9, 0xe0, 0x71, 0xfd, 0xae, 0x21, 0x06, 0x0a, 0x17, 0x09, 0x0c,
+ 0x16, 0x0e, 0x0b, 0x09, 0x11, 0x0d, 0x4a, 0x59, 0x1f, 0x2b, 0x60, 0x45,
+ 0xb3, 0x2c, 0x40, 0x55, 0x4a, 0xcf, 0x03, 0x11, 0x27, 0x40, 0x73, 0x59,
+ 0xd3, 0xc4, 0x94, 0xf9, 0x60, 0x7c, 0x81, 0xc1, 0x5e, 0xf5, 0x60, 0x7b,
+ 0x73, 0x0d, 0x2f, 0x40, 0x90, 0xc1, 0xf9, 0xf3, 0x60, 0x71, 0xc7, 0x41,
+ 0xa5, 0x46, 0x95, 0x41, 0x4b, 0x1d, 0x0a, 0x1a, 0x03, 0x15, 0x40, 0x79,
+ 0x17, 0x25, 0x17, 0x3a, 0xc1, 0x83, 0xf2, 0x60, 0x7b, 0x55, 0x07, 0x40,
+ 0xe7, 0xc0, 0xed, 0xee, 0x60, 0x7b, 0x49, 0x40, 0x5a, 0x40, 0x72, 0x40,
+ 0x57, 0xc1, 0xa2, 0xed, 0x60, 0x75, 0xf0, 0x43, 0xe5, 0x41, 0x68, 0x03,
+ 0x07, 0x03, 0x17, 0x18, 0x40, 0x79, 0x17, 0x25, 0x17, 0x3a, 0x3a, 0xc1,
+ 0x49, 0xeb, 0x60, 0x7b, 0x27, 0x03, 0x1e, 0x1b, 0x1e, 0x40, 0x7c, 0x40,
+ 0x6c, 0xc1, 0x83, 0xe9, 0x60, 0x5c, 0x65, 0x5e, 0xbe, 0x17, 0x03, 0x40,
+ 0xff, 0x9f, 0xe8, 0x60, 0x7b, 0x1b, 0x40, 0xa8, 0x40, 0x8d, 0xba, 0xe7,
+ 0x60, 0x7a, 0xe8, 0x40, 0x41, 0x18, 0x1e, 0x40, 0x5b, 0x21, 0x32, 0x1b,
+ 0x1f, 0x3a, 0xc1, 0x49, 0xe3, 0x60, 0x79, 0x8c, 0x41, 0x6b, 0x39, 0x1e,
+ 0x40, 0x97, 0x40, 0x51, 0xba, 0xe2, 0x60, 0x72, 0xea, 0x47, 0xe0, 0x1d,
+ 0x03, 0x07, 0x17, 0x12, 0x27, 0x40, 0x5b, 0x17, 0x25, 0x32, 0x9f, 0xe1,
+ 0x06, 0x60, 0x60, 0x34, 0xd4, 0x04, 0x6e, 0x67, 0xe5, 0x04, 0xe0, 0x7d,
+ 0x8e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0xf4, 0xe0, 0x68, 0xa6, 0xae,
+ 0x15, 0x05, 0x4a, 0xd6, 0x60, 0x28, 0xac, 0x4d, 0x8b, 0x4f, 0xfc, 0x5a,
+ 0x18, 0x4d, 0xef, 0x41, 0xa9, 0x40, 0x43, 0xc0, 0x6f, 0xf4, 0x60, 0x7a,
+ 0x8a, 0x9d, 0xed, 0xe0, 0x7c, 0x1e, 0xf0, 0x04, 0x11, 0x0b, 0xa8, 0xf0,
+ 0x04, 0xe0, 0x75, 0xae, 0x65, 0xe7, 0x04, 0xe0, 0x76, 0x2e, 0x1f, 0x43,
+ 0xe5, 0xe0, 0x78, 0xa7, 0xef, 0x02, 0x84, 0xec, 0xe0, 0x40, 0x26, 0xe3,
+ 0xe0, 0x40, 0xfd, 0xe5, 0x02, 0x88, 0x72, 0x61, 0x75, 0x6e, 0xe9, 0xe0,
+ 0x74, 0xff, 0xee, 0x05, 0x09, 0xe0, 0x7d, 0x2a, 0x73, 0x6f, 0x63, 0x69,
+ 0x61, 0xec, 0xe0, 0x65, 0x56, 0x63, 0x72, 0x61, 0x66, 0x74, 0x2e, 0x68,
+ 0x6f, 0x73, 0x74, 0xe9, 0xe0, 0x68, 0x73, 0x61, 0xec, 0xe0, 0x42, 0x7b,
+ 0xef, 0x0a, 0x06, 0x04, 0x05, 0x60, 0x3e, 0x08, 0xe0, 0x3d, 0x20, 0x73,
+ 0x68, 0xe9, 0xe0, 0x33, 0x69, 0xf0, 0xe0, 0x60, 0x81, 0x6b, 0xf5, 0xe0,
+ 0x26, 0xbd, 0x67, 0xf5, 0xe0, 0x5e, 0x6e, 0xee, 0x16, 0x03, 0x09, 0x0a,
+ 0x09, 0x18, 0x10, 0x06, 0x09, 0x16, 0x0f, 0x08, 0x10, 0x10, 0x60, 0x2b,
+ 0x1e, 0x60, 0x44, 0x04, 0xcb, 0x5e, 0xfa, 0xc0, 0x7e, 0x74, 0x68, 0x65,
+ 0x77, 0x69, 0xe6, 0xe0, 0x72, 0x84, 0x72, 0xe5, 0x04, 0xe0, 0x72, 0x84,
+ 0xe4, 0xe0, 0x36, 0xa1, 0x70, 0x6f, 0x72, 0x74, 0x65, 0xf2, 0xe0, 0x55,
+ 0x23, 0xef, 0x05, 0x04, 0xe0, 0x60, 0x6a, 0xed, 0xe0, 0x3a, 0x60, 0xae,
+ 0x04, 0xe0, 0x77, 0x53, 0x66, 0x75, 0x6b, 0xf5, 0x60, 0x76, 0xc1, 0xc3,
+ 0x8e, 0xec, 0x04, 0xe0, 0x7c, 0xa5, 0x69, 0x6e, 0xe5, 0x04, 0xe0, 0x7c,
+ 0x9e, 0xae, 0xe0, 0x35, 0x40, 0x6a, 0x75, 0xeb, 0xe0, 0x43, 0x3a, 0xe7,
+ 0x60, 0x3b, 0x7f, 0x60, 0x3f, 0x6f, 0xc1, 0xa5, 0xe6, 0x02, 0x8b, 0x6c,
+ 0x61, 0x73, 0x68, 0x64, 0x72, 0x69, 0xf6, 0xe0, 0x78, 0xdb, 0x61, 0x62,
+ 0x72, 0x69, 0xe3, 0xe0, 0x6f, 0x8b, 0x64, 0x69, 0x67, 0x69, 0x74, 0x61,
+ 0x6c, 0x6f, 0x63, 0x65, 0x61, 0xee, 0xe0, 0x78, 0xc5, 0x63, 0x69, 0x6c,
+ 0x6c, 0xe1, 0xe0, 0x62, 0xd6, 0xe1, 0x02, 0x89, 0x76, 0x73, 0x74, 0x61,
+ 0x63, 0xeb, 0xe0, 0x7b, 0xf2, 0xe7, 0xe0, 0x43, 0x1c, 0x2e, 0xe3, 0x04,
+ 0xe0, 0x7a, 0x4e, 0x72, 0x69, 0x73, 0x70, 0x2e, 0x65, 0x6d, 0xe1, 0xcc,
+ 0xc4, 0xad, 0x07, 0x0a, 0x11, 0x06, 0xe0, 0x7b, 0x46, 0x74, 0x68, 0x65,
+ 0x2d, 0x77, 0x65, 0xe2, 0xe0, 0x69, 0x72, 0xf2, 0x02, 0x85, 0x69, 0xef,
+ 0xe0, 0x6d, 0x10, 0x61, 0x6e, 0x63, 0x68, 0x65, 0xf2, 0xe0, 0x6b, 0x92,
+ 0x6b, 0x33, 0xf3, 0xe0, 0x6d, 0x01, 0xe1, 0x02, 0x88, 0x70, 0x74, 0x69,
+ 0x62, 0xec, 0xe0, 0x73, 0xd1, 0x63, 0x6f, 0x72, 0xee, 0xe0, 0x6c, 0xef,
+ 0xed, 0x0a, 0x06, 0x05, 0x05, 0x21, 0x06, 0x07, 0xe0, 0x7b, 0xba, 0xf5,
+ 0x56, 0x21, 0xe0, 0x24, 0xc1, 0x6f, 0x74, 0xe5, 0xca, 0x50, 0x6e, 0x69,
+ 0xf7, 0xd2, 0x2e, 0xe9, 0x08, 0x06, 0x0b, 0x60, 0x3a, 0x22, 0xc9, 0x22,
+ 0x74, 0x61, 0xed, 0xe0, 0x36, 0xae, 0x68, 0x61, 0x63, 0x68, 0x69, 0x6d,
+ 0x61, 0xee, 0xe0, 0x75, 0xf7, 0x2e, 0xee, 0x60, 0x76, 0xfc, 0xc1, 0x69,
+ 0x67, 0x2e, 0xec, 0xe0, 0x55, 0x54, 0xe5, 0x60, 0x2f, 0x04, 0xe0, 0x49,
+ 0x20, 0xe1, 0x05, 0x03, 0xe0, 0x52, 0xe2, 0xe5, 0xd5, 0xd2, 0x63, 0x68,
+ 0x69, 0xae, 0x60, 0x70, 0x96, 0xc7, 0xaf, 0xec, 0x09, 0x06, 0x04, 0x05,
+ 0x05, 0x0d, 0xe0, 0x79, 0x95, 0x73, 0x7a, 0xf4, 0xe0, 0x5e, 0x49, 0xec,
+ 0xe0, 0x79, 0xc2, 0x6b, 0xf5, 0xe0, 0x26, 0xcd, 0x65, 0xe3, 0xe0, 0x21,
+ 0x49, 0x62, 0x69, 0xe1, 0x02, 0x81, 0x2d, 0x74, 0x65, 0x6d, 0xf0, 0xe0,
+ 0x62, 0x79, 0xe1, 0x04, 0xe0, 0x68, 0x66, 0x79, 0x61, 0xee, 0x5e, 0x2a,
+ 0xe0, 0x5d, 0x4b, 0xeb, 0x0c, 0x0f, 0x18, 0x0b, 0x45, 0x98, 0x60, 0x3f,
+ 0xbe, 0xe0, 0x2f, 0xaf, 0xf5, 0x04, 0x04, 0xdf, 0xd1, 0xf4, 0xe0, 0x37,
+ 0x56, 0x69, 0x7a, 0xf5, 0xe0, 0x37, 0x81, 0xe9, 0x04, 0xe0, 0x63, 0x97,
+ 0xee, 0x02, 0x83, 0xef, 0xc5, 0xbd, 0x61, 0x77, 0xe1, 0x04, 0xe0, 0x7b,
+ 0x42, 0xae, 0x60, 0x76, 0x22, 0xc3, 0x21, 0xe5, 0x06, 0x60, 0x21, 0x2b,
+ 0xdb, 0x16, 0x67, 0xe1, 0xc9, 0xd5, 0xe1, 0x04, 0x05, 0x0e, 0x88, 0x7a,
+ 0xe1, 0xe0, 0x2b, 0x49, 0x79, 0xe1, 0x04, 0xe0, 0x77, 0xb8, 0x6d, 0x61,
+ 0xae, 0x60, 0x74, 0xd8, 0xc4, 0x48, 0x77, 0x61, 0xae, 0x60, 0x6f, 0x10,
+ 0xc5, 0x7e, 0xe7, 0xd0, 0x5d, 0x6a, 0xe9, 0x04, 0xe0, 0x72, 0x1c, 0xf9,
+ 0xe0, 0x2a, 0x7f, 0xe9, 0x08, 0x04, 0x08, 0x0b, 0x0c, 0xe0, 0x75, 0x8d,
+ 0x7a, 0xf5, 0xd1, 0xfb, 0x74, 0x61, 0xae, 0x60, 0x68, 0x88, 0xd0, 0x6e,
+ 0xf3, 0x04, 0xe0, 0x3a, 0x10, 0x68, 0x69, 0xe4, 0xe0, 0x42, 0x03, 0xf2,
+ 0x02, 0x84, 0xed, 0xe0, 0x3b, 0xec, 0x61, 0xf3, 0xe0, 0x3d, 0xea, 0xe1,
+ 0xe0, 0x3b, 0xe3, 0xe8, 0x0a, 0x05, 0x06, 0x0e, 0x60, 0x39, 0x53, 0xe0,
+ 0x3b, 0x31, 0x74, 0x61, 0xf7, 0xc8, 0xaa, 0x6b, 0x75, 0xf2, 0xe0, 0x41,
+ 0xdd, 0xe9, 0x04, 0xe0, 0x4e, 0x9e, 0x72, 0x61, 0xae, 0x60, 0x41, 0x85,
+ 0xe0, 0x2d, 0x35, 0x61, 0xf2, 0xe0, 0x5e, 0x04, 0xe7, 0x08, 0x10, 0x0b,
+ 0x07, 0x1f, 0xe0, 0x53, 0x92, 0xf5, 0x02, 0x88, 0x6e, 0x69, 0xae, 0x60,
+ 0x6e, 0xfb, 0xc3, 0xbe, 0x63, 0xe8, 0xe0, 0x74, 0xc3, 0xef, 0x02, 0x84,
+ 0xf3, 0xe0, 0x23, 0xf6, 0xf2, 0xe0, 0x2f, 0xeb, 0xe9, 0x60, 0x3a, 0x8f,
+ 0xe0, 0x34, 0xdf, 0xe1, 0x0a, 0x0a, 0x06, 0x60, 0x39, 0xa1, 0x48, 0x85,
+ 0xd2, 0xb8, 0x77, 0xe1, 0x04, 0xe0, 0x2f, 0xf2, 0xf2, 0xe0, 0x41, 0x3b,
+ 0x73, 0x61, 0xf7, 0xe0, 0x35, 0xac, 0xeb, 0xe0, 0x70, 0xf9, 0xae, 0x60,
+ 0x4e, 0x06, 0xe0, 0x2a, 0x05, 0xe6, 0x03, 0x08, 0xaa, 0x75, 0x6e, 0x61,
+ 0x74, 0xef, 0xe0, 0x42, 0x59, 0xe6, 0x02, 0xa3, 0x69, 0xe3, 0x02, 0x91,
+ 0x69, 0x61, 0x6c, 0xae, 0x04, 0xe0, 0x68, 0xc2, 0x61, 0x63, 0x61, 0x64,
+ 0x65, 0xed, 0xe0, 0x65, 0xa1, 0xe5, 0x04, 0xe0, 0x7a, 0x31, 0x2d, 0x6f,
+ 0x6e, 0x2d, 0x74, 0xe8, 0xe0, 0x76, 0x59, 0xae, 0xe0, 0x5d, 0xaf, 0xae,
+ 0x05, 0x04, 0xe0, 0x78, 0x33, 0xea, 0xe0, 0x79, 0x76, 0xe2, 0xe0, 0x77,
+ 0x8f, 0xe4, 0x08, 0x07, 0x0a, 0x60, 0x53, 0xf9, 0xca, 0x18, 0x6f, 0xae,
+ 0x60, 0x6f, 0x1a, 0xc9, 0x4d, 0x65, 0xf3, 0x04, 0xe0, 0x56, 0x3c, 0xf3,
+ 0xe0, 0x56, 0x3b, 0xe1, 0x02, 0x84, 0xf7, 0xe0, 0x2a, 0x6e, 0xf4, 0xe0,
+ 0x3d, 0x2e, 0xe3, 0x05, 0x02, 0x02, 0x0d, 0x84, 0xf3, 0x84, 0xf0, 0x82,
+ 0x69, 0x2e, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0xf2, 0xe0, 0x55,
+ 0x47, 0xe8, 0xe0, 0x3f, 0x32, 0x65, 0x6c, 0x6f, 0xf4, 0xe0, 0x60, 0x47,
+ 0xe2, 0x06, 0x08, 0x11, 0x04, 0x13, 0x8c, 0xf5, 0x04, 0xe0, 0x73, 0xf2,
+ 0xf3, 0xde, 0xd4, 0x73, 0x65, 0x72, 0xf6, 0x04, 0xe0, 0x65, 0x71, 0x61,
+ 0x62, 0x6c, 0x65, 0x68, 0xf1, 0xe0, 0x61, 0x23, 0xee, 0xe0, 0x72, 0xe7,
+ 0x6a, 0x65, 0x63, 0x74, 0x73, 0xae, 0x02, 0x84, 0x72, 0x6d, 0xe1, 0x84,
+ 0x6c, 0x70, 0x67, 0xae, 0xe0, 0x55, 0x52, 0xe9, 0x06, 0x60, 0x77, 0x5b,
+ 0xc2, 0x36, 0x68, 0xe9, 0xe0, 0x6d, 0x7a, 0xe1, 0x02, 0x85, 0x6e, 0x61,
+ 0xfa, 0xd4, 0xc0, 0x6d, 0x61, 0xae, 0x60, 0x4d, 0x67, 0xcf, 0xdf, 0xe1,
+ 0x02, 0x85, 0x72, 0xe1, 0xe0, 0x5d, 0x22, 0x6d, 0x69, 0x73, 0x68, 0x69,
+ 0x72, 0x61, 0x73, 0x61, 0xf4, 0xe0, 0x77, 0x38, 0x30, 0xef, 0xe0, 0x79,
+ 0x14, 0xee, 0x22, 0x18, 0x0b, 0x23, 0x1a, 0x1a, 0x14, 0x08, 0x42, 0x93,
+ 0x04, 0x15, 0x09, 0x41, 0x54, 0x1c, 0x40, 0x40, 0x12, 0x41, 0xa5, 0x0b,
+ 0x05, 0x42, 0x74, 0x58, 0x85, 0x57, 0x5b, 0x54, 0x85, 0x51, 0x01, 0xa6,
+ 0x1f, 0xc3, 0x06, 0x05, 0x05, 0xe0, 0x69, 0x28, 0x78, 0x74, 0x74, 0xe5,
+ 0x82, 0x66, 0xf2, 0xe0, 0x6f, 0xfc, 0x65, 0x1f, 0x43, 0xe5, 0xc9, 0x14,
+ 0xfa, 0x04, 0xe0, 0x79, 0x22, 0xae, 0x60, 0x6b, 0xc3, 0xc6, 0x79, 0xf9,
+ 0x09, 0x07, 0x04, 0x0a, 0x56, 0x4c, 0xe0, 0x5c, 0x85, 0x75, 0x7a, 0x65,
+ 0xee, 0xe0, 0x40, 0x61, 0xf3, 0xe0, 0x69, 0x6d, 0xe3, 0x04, 0xe0, 0x79,
+ 0x02, 0x2e, 0xed, 0xe0, 0x64, 0x1f, 0x61, 0xee, 0xc4, 0x09, 0xf5, 0x07,
+ 0x04, 0x52, 0xaa, 0xe0, 0x66, 0x43, 0xef, 0xe0, 0x5e, 0xfa, 0x6d, 0xe1,
+ 0x04, 0xe0, 0x21, 0x4c, 0x74, 0x61, 0xae, 0x60, 0x6f, 0x88, 0xc7, 0x55,
+ 0xf4, 0x06, 0x04, 0x06, 0xe0, 0x76, 0xbd, 0xf2, 0xe0, 0x77, 0x32, 0x64,
+ 0x6c, 0x6c, 0xae, 0xc0, 0x6d, 0xae, 0x60, 0x75, 0x5b, 0x04, 0x41, 0x73,
+ 0x14, 0x91, 0xf3, 0x07, 0x04, 0x60, 0x5e, 0x39, 0xd8, 0x84, 0xf7, 0xe0,
+ 0x75, 0x47, 0x75, 0x70, 0x64, 0x61, 0xf4, 0xe0, 0x67, 0xd1, 0xf2, 0x60,
+ 0x75, 0xed, 0x40, 0xc9, 0xc1, 0xfa, 0xef, 0x17, 0x0c, 0x26, 0x0c, 0x40,
+ 0xfc, 0x14, 0x40, 0x56, 0x09, 0x08, 0x40, 0x4b, 0x04, 0x08, 0x12, 0x08,
+ 0x25, 0x14, 0x08, 0xe0, 0x76, 0x2a, 0x7a, 0x61, 0x77, 0x61, 0x6f, 0x6e,
+ 0x73, 0x65, 0xee, 0xe0, 0x75, 0x1f, 0xf7, 0x0a, 0x05, 0x07, 0x60, 0x4e,
+ 0x20, 0x56, 0xe1, 0xd3, 0x6d, 0x72, 0xf5, 0xe0, 0x75, 0xb2, 0x61, 0x72,
+ 0x75, 0xe4, 0xe0, 0x68, 0xd4, 0x2d, 0x64, 0x6e, 0x73, 0xae, 0x06, 0x60,
+ 0x75, 0x3f, 0xc2, 0xc2, 0xf4, 0xe0, 0x67, 0x38, 0xf6, 0x06, 0x52, 0xe3,
+ 0xe0, 0x61, 0x70, 0x65, 0x63, 0xef, 0xce, 0x98, 0xf4, 0x09, 0x06, 0x0f,
+ 0x1b, 0x40, 0xbb, 0xe0, 0x75, 0xb9, 0x74, 0x65, 0xf2, 0xe0, 0x6c, 0x1e,
+ 0xef, 0x05, 0x05, 0xe0, 0x6f, 0x76, 0x67, 0x61, 0xf7, 0xdd, 0x68, 0xe4,
+ 0xe0, 0x36, 0xfa, 0xe9, 0x02, 0x84, 0xef, 0xe0, 0x60, 0x58, 0xe3, 0x02,
+ 0x86, 0x69, 0x61, 0xf3, 0xe0, 0x75, 0x19, 0x65, 0x61, 0x62, 0x6c, 0x65,
+ 0x2e, 0x6e, 0xe5, 0xe0, 0x59, 0x7a, 0x65, 0x62, 0x6f, 0x6f, 0xeb, 0x03,
+ 0xc0, 0x8f, 0xae, 0x07, 0x05, 0x07, 0x04, 0x20, 0x20, 0xbf, 0x73, 0x61,
+ 0xad, 0xc0, 0x99, 0x6d, 0x65, 0xad, 0x40, 0x78, 0xd8, 0xa3, 0x69, 0xec,
+ 0xd9, 0x14, 0x65, 0x75, 0xad, 0x04, 0x04, 0x07, 0x85, 0x77, 0xe5, 0xc0,
+ 0x5b, 0x73, 0x6f, 0x75, 0x74, 0xe8, 0xd9, 0x22, 0x6e, 0x6f, 0xf2, 0xc0,
+ 0x5e, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0xec, 0xd9, 0x14, 0xe3, 0x03,
+ 0xc0, 0x6c, 0x6e, 0x2d, 0x6e, 0x6f, 0x72, 0x74, 0xe8, 0x02, 0x84, 0x77,
+ 0x65, 0x73, 0x74, 0x2d, 0x31, 0x2e, 0x73, 0x61, 0x67, 0x65, 0x6d, 0x61,
+ 0x6b, 0x65, 0xf2, 0xe0, 0x58, 0x21, 0xe1, 0x02, 0xab, 0x70, 0xad, 0x03,
+ 0x15, 0xaf, 0x73, 0x6f, 0x75, 0x74, 0xe8, 0x03, 0xd8, 0xe2, 0x65, 0x61,
+ 0x73, 0x74, 0xad, 0x05, 0x11, 0x58, 0xca, 0x82, 0xb4, 0xd8, 0xdd, 0x6e,
+ 0x6f, 0x72, 0x74, 0x68, 0x65, 0x61, 0x73, 0x74, 0xad, 0x04, 0x58, 0xca,
+ 0x82, 0xb3, 0xd8, 0xcc, 0x66, 0x2d, 0x73, 0x6f, 0x75, 0x74, 0xe8, 0xd8,
+ 0xb2, 0x2d, 0x66, 0x69, 0x70, 0x73, 0xae, 0x02, 0x90, 0x75, 0x73, 0xad,
+ 0x04, 0x58, 0x87, 0xa1, 0x67, 0x6f, 0x76, 0xad, 0x02, 0x89, 0x65, 0xe1,
+ 0x89, 0x63, 0x61, 0xad, 0x03, 0xd8, 0x7e, 0x77, 0x65, 0x73, 0xf4, 0xd8,
+ 0x8e, 0x61, 0x69, 0x72, 0x65, 0xf3, 0xd0, 0xa8, 0xf3, 0x02, 0x86, 0x68,
+ 0x69, 0xf2, 0xe0, 0x3f, 0x01, 0xe5, 0x04, 0xe0, 0x75, 0x21, 0x67, 0x61,
+ 0xf7, 0xe0, 0x2d, 0xd4, 0xf2, 0x03, 0x12, 0x89, 0xf4, 0x04, 0xe0, 0x6f,
+ 0x4b, 0xe8, 0x04, 0xe0, 0x4b, 0x6e, 0x66, 0x6c, 0x61, 0x6e, 0xeb, 0xe0,
+ 0x64, 0xf3, 0x65, 0x2d, 0x6f, 0x67, 0x2d, 0xf5, 0xe0, 0x6f, 0x79, 0xe4,
+ 0x07, 0x0c, 0x04, 0x0c, 0xe0, 0x6f, 0x53, 0x72, 0xe5, 0x02, 0x84, 0xe9,
+ 0xe0, 0x3d, 0x28, 0xad, 0xe0, 0x69, 0xd2, 0x6b, 0xe1, 0xdc, 0xce, 0x65,
+ 0x73, 0x74, 0x65, 0x2d, 0x69, 0x64, 0x63, 0xae, 0xe0, 0x24, 0xc8, 0xad,
+ 0x03, 0x04, 0x86, 0xef, 0xe0, 0x6f, 0x4e, 0x66, 0x72, 0xef, 0xe0, 0x70,
+ 0x39, 0x61, 0xf5, 0xe0, 0x47, 0x36, 0xef, 0x04, 0xe0, 0x63, 0x5a, 0xf0,
+ 0xe0, 0x73, 0x43, 0x6e, 0x6f, 0x69, 0x63, 0xe8, 0xe0, 0x35, 0xb4, 0xed,
+ 0x06, 0x0a, 0x05, 0xe0, 0x35, 0x9b, 0x65, 0xae, 0x04, 0xe0, 0x2a, 0xb8,
+ 0xe3, 0xe0, 0x72, 0xa0, 0x62, 0xf2, 0xe0, 0x4f, 0x95, 0xae, 0x13, 0x04,
+ 0x05, 0x07, 0x06, 0x05, 0x5a, 0x81, 0x60, 0x4f, 0x9a, 0x1a, 0x20, 0x40,
+ 0xdd, 0x40, 0x87, 0xc5, 0xe4, 0xf4, 0xe0, 0x74, 0x0c, 0xf2, 0x60, 0x74,
+ 0xd8, 0x97, 0xf0, 0x60, 0x74, 0x06, 0x40, 0xa8, 0xbc, 0xee, 0x60, 0x6a,
+ 0x39, 0xc9, 0xfc, 0x62, 0xf2, 0xe0, 0x64, 0x9e, 0xe1, 0x60, 0x73, 0xf7,
+ 0xc2, 0x9e, 0xeb, 0xe0, 0x6a, 0x73, 0x69, 0x70, 0xae, 0x60, 0x57, 0x66,
+ 0xc8, 0x7a, 0xe8, 0x02, 0x8a, 0xef, 0x04, 0xe0, 0x33, 0x80, 0x73, 0xf4,
+ 0xe0, 0x5f, 0xd0, 0x65, 0xea, 0xe0, 0x34, 0x54, 0xe7, 0x47, 0xdf, 0x60,
+ 0x26, 0x16, 0xc7, 0x67, 0xe4, 0x02, 0x9a, 0xe5, 0x02, 0x88, 0x73, 0x2e,
+ 0x6b, 0x38, 0xf3, 0xe0, 0x55, 0x88, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63,
+ 0x65, 0x72, 0x2e, 0x6c, 0x69, 0xee, 0xe0, 0x5e, 0xfb, 0x61, 0xae, 0x60,
+ 0x3e, 0x55, 0xe0, 0x35, 0xc7, 0xe2, 0x03, 0x06, 0x86, 0x75, 0x73, 0xe8,
+ 0xe0, 0x4f, 0xaa, 0x6f, 0x72, 0xe9, 0xe0, 0x70, 0xf8, 0x65, 0xef, 0xca,
+ 0x01, 0xae, 0x60, 0x6f, 0x4c, 0x44, 0x90, 0xc2, 0x1f, 0x2d, 0x69, 0x70,
+ 0xae, 0x0a, 0x60, 0x65, 0x3b, 0x4d, 0x67, 0x40, 0x56, 0xc2, 0xc2, 0xe3,
+ 0x60, 0x72, 0x69, 0xc1, 0xd8, 0xed, 0xe0, 0x32, 0x87, 0xec, 0x05, 0x07,
+ 0xe0, 0x76, 0x05, 0xae, 0x60, 0x6f, 0x26, 0x44, 0xea, 0x94, 0x2d, 0x61,
+ 0x6d, 0x73, 0xad, 0xe0, 0x3f, 0xed, 0xea, 0x04, 0xe0, 0x6f, 0xcc, 0xf3,
+ 0xe0, 0x69, 0x0e, 0xe9, 0x10, 0x09, 0x0d, 0x40, 0x96, 0x07, 0x1a, 0x08,
+ 0x25, 0x1f, 0x0e, 0x60, 0x6a, 0x9b, 0xca, 0x21, 0x79, 0x6f, 0x64, 0x6f,
+ 0x67, 0x61, 0xf7, 0xc9, 0x5c, 0xf4, 0x02, 0x84, 0xf4, 0xe0, 0x4b, 0xe9,
+ 0x65, 0x72, 0xef, 0xe0, 0x6d, 0x02, 0xf3, 0x05, 0x11, 0xe0, 0x70, 0xbb,
+ 0xf3, 0x05, 0x05, 0xe0, 0x4b, 0xcf, 0x68, 0xe9, 0xe0, 0x32, 0xca, 0xe1,
+ 0x60, 0x73, 0x31, 0xc1, 0x06, 0x68, 0xe9, 0x0c, 0x04, 0x05, 0x0c, 0x19,
+ 0x04, 0x10, 0x03, 0x0a, 0x1c, 0xc3, 0x9e, 0xf7, 0xe0, 0x6d, 0xd0, 0x74,
+ 0x6f, 0xf3, 0xc9, 0x21, 0xef, 0x04, 0xe0, 0x6f, 0xc9, 0x6b, 0x6f, 0x70,
+ 0xf0, 0xe0, 0x58, 0xe2, 0x6e, 0xef, 0x03, 0x07, 0x87, 0x73, 0x68, 0x69,
+ 0xed, 0xe0, 0x34, 0x2e, 0x6f, 0x6d, 0x6f, 0xf4, 0xe0, 0x6e, 0xb0, 0x6d,
+ 0x69, 0xf9, 0xe0, 0x33, 0x77, 0x6d, 0xe5, 0xdb, 0x96, 0x6b, 0xe1, 0x03,
+ 0xd0, 0xac, 0xf4, 0x04, 0xe0, 0x69, 0x6e, 0x73, 0x75, 0xf2, 0xe0, 0x3c,
+ 0xfc, 0xe9, 0xdd, 0xca, 0x68, 0x61, 0x72, 0x61, 0xae, 0x60, 0x6d, 0x7b,
+ 0xc2, 0xc4, 0xe1, 0x04, 0x05, 0x08, 0x85, 0x7a, 0xe1, 0xe0, 0x31, 0x34,
+ 0x77, 0x61, 0x6b, 0x75, 0xf2, 0xe0, 0x6f, 0x02, 0x72, 0xe9, 0xe0, 0x6a,
+ 0x1a, 0x69, 0xfa, 0xe0, 0x6f, 0x39, 0xae, 0x60, 0x69, 0x36, 0xc9, 0xdf,
+ 0x72, 0x61, 0x73, 0xe1, 0xe0, 0x3d, 0x35, 0xee, 0x03, 0x0b, 0x84, 0xef,
+ 0x04, 0xe0, 0x2c, 0x91, 0x6d, 0x69, 0xf9, 0xe0, 0x6f, 0xd8, 0xea, 0xe0,
+ 0x73, 0x26, 0xe8, 0x60, 0x2f, 0x73, 0xe0, 0x32, 0x4e, 0x6d, 0x73, 0x69,
+ 0x74, 0xe5, 0xe0, 0x71, 0x60, 0xeb, 0x07, 0x0b, 0x04, 0x09, 0xe0, 0x73,
+ 0x30, 0xef, 0x04, 0xe0, 0x73, 0x7d, 0x6c, 0x61, 0xe5, 0xe0, 0x59, 0x0a,
+ 0xeb, 0xe0, 0x63, 0x49, 0xe9, 0x04, 0xe0, 0x72, 0xea, 0xf4, 0xe0, 0x64,
+ 0x87, 0x61, 0xe8, 0xe0, 0x3c, 0x9c, 0xe9, 0x05, 0x04, 0x04, 0x04, 0x83,
+ 0xfa, 0xe0, 0x3c, 0x59, 0xed, 0xe0, 0x69, 0x1d, 0x6b, 0xe1, 0xd7, 0x9e,
+ 0xe8, 0xce, 0xfc, 0x67, 0x61, 0x74, 0x61, 0xae, 0x60, 0x6f, 0xfe, 0xc2,
+ 0xd3, 0x65, 0x72, 0x75, 0x63, 0x68, 0x6f, 0x6d, 0x6f, 0x73, 0x63, 0xe9,
+ 0xe0, 0x6f, 0x7c, 0xe3, 0x05, 0x0b, 0xe0, 0x72, 0xd6, 0x68, 0x69, 0x6e,
+ 0x61, 0x6e, 0xae, 0x60, 0x57, 0xe8, 0xcd, 0xf6, 0xae, 0x06, 0x60, 0x6f,
+ 0xaa, 0xc3, 0x75, 0xf4, 0xe0, 0x72, 0x10, 0xe8, 0x08, 0x06, 0x05, 0x60,
+ 0x6e, 0x60, 0xc3, 0x73, 0x73, 0x2e, 0xf5, 0xe0, 0x71, 0xdb, 0x6c, 0xe6,
+ 0xe0, 0x4e, 0x00, 0x2d, 0x73, 0x65, 0x72, 0xf6, 0xe0, 0x70, 0xd3, 0xe7,
+ 0x08, 0x20, 0x12, 0x60, 0x62, 0x43, 0xd2, 0x06, 0x72, 0x6f, 0xeb, 0x02,
+ 0x93, 0xae, 0x08, 0x60, 0x70, 0xca, 0x42, 0x52, 0xc0, 0x4a, 0xf0, 0x04,
+ 0xe0, 0x73, 0x5e, 0x69, 0xfa, 0xe0, 0x5f, 0xde, 0x2d, 0x66, 0x72, 0x65,
+ 0xe5, 0xe0, 0x4d, 0x06, 0xef, 0x04, 0xe0, 0x74, 0x56, 0xae, 0x60, 0x2c,
+ 0x26, 0x60, 0x29, 0x0b, 0x4a, 0x78, 0x48, 0x55, 0xc7, 0x5d, 0x68, 0xe5,
+ 0xe0, 0x64, 0x89, 0xe6, 0x07, 0x03, 0x60, 0x72, 0x3d, 0xc1, 0xfc, 0xf3,
+ 0xc5, 0x80, 0xec, 0x60, 0x53, 0x30, 0xe0, 0x21, 0x08, 0xe5, 0x11, 0x05,
+ 0x11, 0x07, 0x06, 0x41, 0x0c, 0x2d, 0x0f, 0x05, 0x09, 0x08, 0x60, 0x66,
+ 0x37, 0xcc, 0x68, 0x79, 0xe1, 0xe0, 0x2f, 0xc5, 0xf8, 0x04, 0xe0, 0x6e,
+ 0x8a, 0xf4, 0x04, 0xe0, 0x74, 0x11, 0x64, 0x69, 0x72, 0xe5, 0xe0, 0x51,
+ 0x54, 0xf7, 0x60, 0x39, 0xf6, 0xe0, 0x3a, 0x13, 0x75, 0x73, 0xf4, 0xe0,
+ 0x61, 0x5f, 0xf4, 0x0d, 0x06, 0x07, 0x08, 0x06, 0x40, 0xdb, 0x60, 0x50,
+ 0xcc, 0xe0, 0x22, 0x2d, 0x77, 0x6f, 0xf2, 0xe0, 0x71, 0x33, 0x6c, 0x69,
+ 0x66, 0xf9, 0xe0, 0x70, 0x41, 0x67, 0x61, 0x6d, 0x65, 0xf2, 0xe0, 0x57,
+ 0x59, 0x66, 0x6c, 0xe9, 0xe0, 0x6b, 0xc4, 0xae, 0x1f, 0x08, 0x0c, 0x12,
+ 0x0e, 0x0c, 0x14, 0x0b, 0x05, 0x0c, 0x0e, 0x05, 0x0a, 0x0c, 0x10, 0x4a,
+ 0x66, 0x60, 0x3b, 0x0c, 0x40, 0x6d, 0x2b, 0x2a, 0x4a, 0xcb, 0x04, 0x03,
+ 0x38, 0xda, 0x46, 0xf5, 0x60, 0x70, 0xed, 0x0d, 0x2f, 0xc0, 0x90, 0xf4,
+ 0x60, 0x70, 0xc8, 0x20, 0x1e, 0x12, 0x40, 0x82, 0x3c, 0x32, 0x9f, 0xf3,
+ 0x60, 0x67, 0x37, 0x41, 0xa5, 0x47, 0xe0, 0x27, 0x1a, 0x03, 0x15, 0x40,
+ 0x79, 0x17, 0x25, 0xc1, 0xd4, 0xf0, 0x60, 0x70, 0xaa, 0x27, 0x03, 0x17,
+ 0x18, 0x40, 0x79, 0x17, 0x3c, 0x1b, 0x9f, 0xee, 0x60, 0x68, 0x1e, 0x48,
+ 0x9b, 0x40, 0x5a, 0x40, 0xc9, 0xc1, 0xa2, 0xed, 0x60, 0x6b, 0x60, 0x43,
+ 0xe5, 0x41, 0x68, 0x03, 0x07, 0x03, 0x17, 0x18, 0x40, 0x79, 0x17, 0x25,
+ 0x17, 0xc0, 0x74, 0xeb, 0x60, 0x70, 0x99, 0x03, 0x39, 0x1e, 0x40, 0xe8,
+ 0xc1, 0x83, 0xea, 0x60, 0x71, 0x7f, 0x97, 0xe9, 0x60, 0x51, 0xd5, 0x5e,
+ 0xbe, 0x17, 0x03, 0x03, 0x40, 0xfc, 0x9f, 0xe7, 0x60, 0x70, 0xa1, 0x18,
+ 0x40, 0x79, 0x21, 0x32, 0x1b, 0x1f, 0x3a, 0xc1, 0x49, 0xe6, 0x60, 0x70,
+ 0x90, 0x92, 0xe5, 0x60, 0x66, 0xc8, 0x45, 0x84, 0x44, 0xd3, 0xc2, 0x10,
+ 0xe3, 0x60, 0x70, 0x63, 0x1e, 0x1b, 0x1e, 0x40, 0x97, 0x40, 0x51, 0xba,
+ 0xe2, 0x60, 0x68, 0x57, 0x47, 0xe0, 0x1d, 0x0a, 0x17, 0x12, 0x40, 0x82,
+ 0x17, 0x25, 0x32, 0x9f, 0xe1, 0x60, 0x66, 0xa2, 0x41, 0x07, 0x48, 0x9b,
+ 0x21, 0x03, 0x36, 0x40, 0xae, 0x1b, 0x40, 0x59, 0xc1, 0x49, 0x2d, 0x66,
+ 0x72, 0x65, 0xe1, 0xe0, 0x3d, 0x76, 0xf3, 0x06, 0x07, 0x0b, 0xe0, 0x67,
+ 0x95, 0x73, 0xe5, 0x52, 0xd1, 0xe0, 0x57, 0xe9, 0x6f, 0x64, 0xe4, 0x04,
+ 0xe0, 0x62, 0xa7, 0xf4, 0xe0, 0x62, 0xa3, 0xae, 0x02, 0x8a, 0x62, 0x75,
+ 0x73, 0x6b, 0x65, 0x72, 0xf5, 0xe0, 0x6e, 0x24, 0x61, 0x6b, 0x65, 0x72,
+ 0xf3, 0xcb, 0x8d, 0xf2, 0x04, 0xe0, 0x6c, 0x2b, 0x64, 0x70, 0x6f, 0x6c,
+ 0x2e, 0x6f, 0xf6, 0xe0, 0x71, 0xd4, 0x6d, 0xf5, 0xe0, 0x66, 0x9e, 0x64,
+ 0x72, 0x65, 0x2d, 0x65, 0xe9, 0xe0, 0x20, 0x21, 0x61, 0x74, 0x2d, 0x75,
+ 0xf2, 0xe0, 0x6b, 0x3a, 0xae, 0x0b, 0x60, 0x2b, 0x82, 0x60, 0x34, 0xc9,
+ 0x4f, 0x98, 0xc0, 0xb2, 0xf5, 0x60, 0x6f, 0xd6, 0xc2, 0xbb, 0xe3, 0x04,
+ 0xe0, 0x72, 0x88, 0xae, 0x60, 0x64, 0x27, 0xc8, 0xd4, 0xe2, 0x60, 0x70,
+ 0x85, 0x82, 0xe1, 0x1c, 0x04, 0x0e, 0x05, 0x22, 0x10, 0x30, 0x0d, 0x08,
+ 0x40, 0x45, 0x40, 0x6c, 0x06, 0x40, 0x7a, 0x04, 0x0a, 0x40, 0x67, 0x0d,
+ 0x09, 0x08, 0x60, 0x6d, 0xb8, 0xc2, 0x56, 0xf9, 0xe0, 0x66, 0x49, 0xf6,
+ 0x08, 0x60, 0x62, 0x50, 0x4c, 0xca, 0xc0, 0xaf, 0x6f, 0xe9, 0xe0, 0x70,
+ 0x14, 0x75, 0xf3, 0xe0, 0x2c, 0xdf, 0xf4, 0x08, 0x4c, 0xf3, 0x60, 0x2f,
+ 0x94, 0xc5, 0xe2, 0x75, 0xf2, 0x02, 0x8c, 0x62, 0x72, 0x75, 0x6b, 0x73,
+ 0x67, 0x79, 0x6d, 0xee, 0xe0, 0x60, 0x33, 0xe1, 0x04, 0xe0, 0x72, 0x2b,
+ 0xec, 0xe0, 0x6f, 0x1c, 0x73, 0xf5, 0x04, 0xe0, 0x66, 0x24, 0x73, 0x68,
+ 0x69, 0x6f, 0x62, 0x61, 0xf2, 0xe0, 0x66, 0x1c, 0xf2, 0x07, 0x08, 0x0b,
+ 0x05, 0xe0, 0x65, 0xcf, 0x76, 0xe9, 0x60, 0x37, 0xe1, 0xe0, 0x2f, 0x24,
+ 0xf5, 0x02, 0x84, 0xf4, 0xe0, 0x21, 0xa2, 0xf3, 0xe0, 0x2f, 0x80, 0x69,
+ 0xf4, 0xe0, 0x30, 0x51, 0xe1, 0x02, 0x87, 0x73, 0x68, 0x69, 0xee, 0xe0,
+ 0x6f, 0xbe, 0xae, 0x60, 0x69, 0x01, 0xc6, 0xed, 0xf0, 0x02, 0x85, 0x6f,
+ 0xec, 0xe0, 0x68, 0xed, 0x6c, 0xe5, 0xe0, 0x58, 0x46, 0x6f, 0x73, 0x68,
+ 0x69, 0xed, 0xe0, 0x62, 0xf6, 0xee, 0x0a, 0x05, 0x0c, 0x04, 0x04, 0x05,
+ 0x07, 0x03, 0x04, 0x88, 0x79, 0xef, 0xe0, 0x38, 0xe2, 0xf4, 0x02, 0x84,
+ 0xef, 0xe0, 0x39, 0x11, 0x61, 0xee, 0xe0, 0x62, 0xe1, 0xf0, 0xe0, 0x65,
+ 0x9f, 0xee, 0xe0, 0x29, 0xee, 0x6d, 0x6f, 0xeb, 0xd8, 0x6b, 0x6b, 0x6f,
+ 0x6b, 0xf5, 0xe0, 0x6b, 0x1c, 0xea, 0xd8, 0x1e, 0xe7, 0xe0, 0x6b, 0xa0,
+ 0x62, 0x75, 0xae, 0x60, 0x54, 0x6f, 0xc0, 0x61, 0xe1, 0x40, 0xac, 0xe0,
+ 0x54, 0x32, 0xed, 0x05, 0x0f, 0x0a, 0x3f, 0x89, 0xf3, 0x02, 0x88, 0x73,
+ 0x6b, 0x6f, 0x67, 0xe1, 0xe0, 0x6a, 0xc3, 0xef, 0xe0, 0x6c, 0xa0, 0xe9,
+ 0x04, 0xe0, 0x6b, 0x7f, 0x6b, 0xe1, 0xe0, 0x27, 0xf7, 0xe5, 0x06, 0x03,
+ 0x0a, 0xe0, 0x71, 0x5a, 0xf2, 0xc0, 0x8f, 0x67, 0xe1, 0x04, 0xe0, 0x2c,
+ 0x27, 0xf7, 0xe0, 0x38, 0xd4, 0xae, 0x13, 0x06, 0x07, 0x06, 0x45, 0xf3,
+ 0x60, 0x33, 0xb9, 0x55, 0xba, 0x40, 0x47, 0x4d, 0xc2, 0x50, 0xd6, 0xc0,
+ 0x5a, 0xf0, 0x60, 0x6f, 0xa2, 0xc1, 0x6f, 0xed, 0x60, 0x6d, 0x11, 0x41,
+ 0x75, 0xaf, 0xe5, 0x60, 0x6f, 0x27, 0xc2, 0x10, 0xe1, 0xe0, 0x6e, 0x6c,
+ 0xe4, 0x04, 0xe0, 0x61, 0x39, 0x61, 0xec, 0xd3, 0x2a, 0x61, 0xf3, 0xe0,
+ 0x50, 0x45, 0x6c, 0x63, 0x68, 0xe9, 0xc4, 0x13, 0xeb, 0x03, 0x04, 0x86,
+ 0xec, 0xe0, 0x34, 0xce, 0x69, 0x6a, 0xe9, 0xe0, 0x35, 0xc4, 0xe1, 0x0c,
+ 0x0f, 0x03, 0x1d, 0x0f, 0x13, 0x08, 0x5b, 0x5b, 0xe0, 0x48, 0x53, 0xf4,
+ 0x04, 0x05, 0xc7, 0xa0, 0x73, 0xf5, 0xe0, 0x28, 0x9a, 0x6f, 0xed, 0xe0,
+ 0x6b, 0xb3, 0xf3, 0xd3, 0x6f, 0xee, 0x02, 0x93, 0xef, 0x03, 0x05, 0x85,
+ 0x74, 0xef, 0xe0, 0x68, 0x23, 0x6a, 0xef, 0xe0, 0x67, 0x83, 0xae, 0x60,
+ 0x6d, 0x41, 0xb3, 0x69, 0x69, 0x6b, 0x61, 0xf7, 0xdd, 0xd5, 0xed, 0x05,
+ 0x04, 0xe0, 0x2f, 0xb3, 0x75, 0xf2, 0xc4, 0x49, 0x69, 0xe3, 0xe0, 0x47,
+ 0x09, 0xe7, 0x05, 0x40, 0x77, 0xd6, 0x75, 0x61, 0x77, 0x61, 0xae, 0x60,
+ 0x64, 0xb2, 0x46, 0x0b, 0x42, 0x93, 0xc1, 0x61, 0x64, 0x6f, 0x6d, 0x61,
+ 0xf2, 0xe0, 0x2e, 0x88, 0xae, 0x60, 0x64, 0xda, 0xc3, 0xaa, 0xe9, 0xe0,
+ 0x53, 0xec, 0x68, 0xe1, 0x04, 0xe0, 0x6b, 0x77, 0xf2, 0xe0, 0x35, 0xef,
+ 0xe7, 0x03, 0x0c, 0x89, 0xef, 0x04, 0xe0, 0x6b, 0x6a, 0x79, 0xe1, 0x56,
+ 0xce, 0xe0, 0x59, 0xba, 0xe9, 0x04, 0xe0, 0x6a, 0x37, 0xf3, 0xe0, 0x61,
+ 0x7d, 0xe1, 0x09, 0x07, 0x10, 0x0c, 0x0b, 0x0e, 0x04, 0xd9, 0xed, 0x74,
+ 0xef, 0x45, 0xf8, 0xe0, 0x68, 0x0d, 0xf3, 0x02, 0x84, 0xf5, 0xe0, 0x68,
+ 0x81, 0x61, 0x6b, 0x69, 0xae, 0x60, 0x54, 0x23, 0xda, 0x3d, 0xf2, 0x04,
+ 0xe0, 0x2e, 0xab, 0x65, 0x79, 0x61, 0xed, 0xe0, 0x2e, 0xa7, 0x6f, 0x6b,
+ 0xe1, 0x04, 0xe0, 0x6b, 0x74, 0x6b, 0xf9, 0xdd, 0x00, 0x6e, 0xef, 0x02,
+ 0x84, 0x68, 0xe1, 0xdf, 0xe9, 0xae, 0x60, 0x6c, 0xd1, 0xc1, 0x6a, 0xe9,
+ 0xe0, 0x37, 0x50, 0x68, 0xe1, 0xc4, 0x15, 0x63, 0x68, 0x69, 0x6b, 0x61,
+ 0x74, 0x73, 0x75, 0x75, 0xf2, 0xe0, 0x65, 0x01, 0xe2, 0x04, 0xe0, 0x70,
+ 0x1a, 0x61, 0xf2, 0xd6, 0xb9, 0x61, 0x6d, 0x65, 0x73, 0x6a, 0xe5, 0xd1,
+ 0x65, 0x34, 0xf5, 0xe0, 0x5c, 0x9b, 0xb4, 0xe0, 0x3c, 0x05, 0xed, 0x25,
+ 0x23, 0x41, 0xec, 0x09, 0x07, 0x40, 0x9c, 0x12, 0x17, 0x29, 0x06, 0x41,
+ 0xb4, 0x07, 0x10, 0x0e, 0x06, 0x0d, 0x43, 0x2d, 0x07, 0x41, 0x38, 0x0b,
+ 0x21, 0x0b, 0x60, 0x3a, 0x99, 0x4a, 0x2a, 0x5d, 0x4c, 0x41, 0x4b, 0x9d,
+ 0x9f, 0x02, 0x84, 0x44, 0xc1, 0xca, 0xda, 0xc3, 0x02, 0x8a, 0xe5, 0x02,
+ 0x84, 0xf3, 0xe0, 0x66, 0x9d, 0xec, 0xcb, 0x14, 0xe1, 0x02, 0x89, 0x74,
+ 0x74, 0x61, 0x2d, 0x76, 0x1f, 0xc3, 0xc9, 0xcd, 0xec, 0xcb, 0x17, 0xf9,
+ 0x19, 0x05, 0x05, 0x20, 0x40, 0x57, 0x08, 0x0c, 0x20, 0x05, 0x06, 0x17,
+ 0x07, 0x07, 0x07, 0x05, 0x37, 0x08, 0x37, 0x13, 0x1c, 0x17, 0xe0, 0x6d,
+ 0xf5, 0x77, 0xe9, 0xe0, 0x59, 0xc6, 0x76, 0xee, 0xe0, 0x48, 0x9d, 0xf4,
+ 0x03, 0x07, 0x85, 0x75, 0x6c, 0x65, 0xe1, 0xe0, 0x6e, 0x58, 0x69, 0xf3,
+ 0xe0, 0x5c, 0x1a, 0x61, 0x62, 0x69, 0x74, 0x2e, 0x63, 0xef, 0x04, 0xe0,
+ 0x6f, 0x49, 0x2e, 0xe9, 0xe0, 0x6e, 0x8f, 0xf3, 0x03, 0x37, 0x8c, 0x70,
+ 0x72, 0x65, 0x61, 0x64, 0x73, 0x68, 0x6f, 0x70, 0xae, 0x0e, 0x07, 0x06,
+ 0x60, 0x5a, 0x7a, 0x04, 0x49, 0x83, 0x4a, 0x6d, 0x0b, 0x24, 0x8a, 0xee,
+ 0x60, 0x6e, 0x6f, 0x40, 0x6f, 0x9c, 0xe9, 0x60, 0x6e, 0xad, 0xc0, 0x47,
+ 0xe3, 0x06, 0x60, 0x6d, 0x6e, 0xc0, 0xf6, 0xef, 0x04, 0xe0, 0x6b, 0x92,
+ 0xed, 0x48, 0x23, 0xe0, 0x66, 0xec, 0x68, 0x6f, 0xf0, 0x04, 0xe0, 0x39,
+ 0xb4, 0x69, 0xe6, 0xe0, 0x50, 0xa7, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74,
+ 0x79, 0x63, 0x61, 0x6d, 0x65, 0x72, 0xe1, 0xe0, 0x5a, 0xcc, 0x72, 0x61,
+ 0x64, 0x77, 0xe5, 0xe0, 0x3c, 0x7e, 0x71, 0x6e, 0x61, 0x70, 0x63, 0x6c,
+ 0x6f, 0x75, 0xe4, 0xe0, 0x55, 0xbd, 0xf0, 0x04, 0x03, 0x04, 0x87, 0xf3,
+ 0xdc, 0x50, 0xe9, 0xe0, 0x55, 0x3d, 0x68, 0x6f, 0x74, 0xef, 0xe0, 0x37,
+ 0x27, 0xe5, 0x02, 0x86, 0x74, 0x73, 0xae, 0xe0, 0x50, 0x52, 0xf0, 0xe0,
+ 0x22, 0x4b, 0x6f, 0xeb, 0xe0, 0x6a, 0x18, 0x6e, 0x61, 0xf3, 0xe0, 0x69,
+ 0x00, 0xed, 0x02, 0x88, 0x65, 0x64, 0x69, 0x61, 0xf0, 0xe0, 0x6b, 0x11,
+ 0x61, 0x69, 0x6c, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0xae, 0xc0, 0x7a,
+ 0x6b, 0x6f, 0x6c, 0xe1, 0xe0, 0x52, 0xcf, 0x6a, 0x69, 0x6e, 0xef, 0xe0,
+ 0x5b, 0x4f, 0x69, 0x70, 0x68, 0xef, 0xe0, 0x21, 0xd7, 0x68, 0x6f, 0xed,
+ 0xce, 0xc2, 0xe6, 0x06, 0x08, 0x0b, 0x10, 0xc0, 0xaf, 0x74, 0x70, 0xae,
+ 0x60, 0x6b, 0x2d, 0xc0, 0x56, 0x72, 0x69, 0x74, 0x7a, 0xae, 0x60, 0x49,
+ 0x9d, 0xe0, 0x24, 0x9e, 0x6f, 0x72, 0x75, 0x6d, 0x2e, 0x63, 0x6f, 0x6d,
+ 0x6d, 0x75, 0x6e, 0x69, 0xf4, 0xe0, 0x59, 0xf2, 0x61, 0x73, 0x74, 0xae,
+ 0x04, 0xe0, 0x4f, 0xcf, 0x73, 0xf0, 0xe0, 0x4e, 0x18, 0x65, 0x66, 0x66,
+ 0x65, 0xe3, 0xe0, 0x61, 0x9d, 0xe4, 0x08, 0x06, 0x05, 0x0f, 0x07, 0x06,
+ 0xcb, 0xd7, 0x72, 0x6f, 0xe2, 0xe0, 0x60, 0xf0, 0x6f, 0x62, 0xe9, 0xdf,
+ 0xe3, 0x6e, 0x73, 0xae, 0x08, 0x60, 0x2e, 0x9f, 0x60, 0x3f, 0x6d, 0x86,
+ 0xf4, 0xe0, 0x59, 0x39, 0x69, 0x73, 0x73, 0xe5, 0xe0, 0x4f, 0x5e, 0x64,
+ 0x6e, 0x73, 0xae, 0xcd, 0x01, 0x61, 0x74, 0x74, 0xef, 0xe0, 0x6a, 0x80,
+ 0xe3, 0x02, 0x8d, 0x6c, 0x6f, 0x75, 0xe4, 0x02, 0x84, 0xee, 0xe0, 0x44,
+ 0x7c, 0xae, 0xc7, 0x6c, 0xe4, 0xdc, 0x0c, 0xe1, 0x03, 0x06, 0x86, 0x73,
+ 0x75, 0xf3, 0xe0, 0x5f, 0x7a, 0x6d, 0x61, 0xfa, 0xe0, 0x6a, 0x49, 0x63,
+ 0x74, 0x69, 0x76, 0x65, 0x64, 0x69, 0x72, 0x65, 0xe3, 0xd1, 0x64, 0xae,
+ 0x06, 0x60, 0x64, 0xda, 0xc2, 0x46, 0x63, 0x61, 0x6e, 0x76, 0xe1, 0x04,
+ 0xe0, 0x4f, 0x1d, 0x73, 0x69, 0x74, 0xe5, 0xe0, 0x4e, 0x7a, 0xad, 0x06,
+ 0x05, 0x06, 0x0a, 0xc6, 0xd7, 0x77, 0xe1, 0xe0, 0x43, 0x61, 0x72, 0x6f,
+ 0xf5, 0xe0, 0x23, 0xb2, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0xf9, 0xe0,
+ 0x49, 0x42, 0x66, 0x69, 0x72, 0x65, 0x77, 0x61, 0xec, 0xde, 0xdb, 0xf8,
+ 0x04, 0xe0, 0x6d, 0xcb, 0xae, 0xe0, 0x69, 0x71, 0xf7, 0x60, 0x2e, 0xd2,
+ 0xe0, 0x3e, 0xf4, 0xf5, 0x0d, 0x13, 0x3a, 0x20, 0x06, 0x0c, 0x06, 0x04,
+ 0x52, 0xd4, 0xe0, 0x5a, 0x55, 0xf4, 0x02, 0x86, 0x75, 0x61, 0xec, 0xe0,
+ 0x5b, 0x0a, 0x73, 0xf5, 0x04, 0xe0, 0x30, 0xb3, 0xfa, 0xe0, 0x2b, 0xf7,
+ 0xf3, 0x04, 0x13, 0x10, 0x8c, 0x69, 0xe3, 0x05, 0x05, 0xe0, 0x6d, 0x8e,
+ 0x69, 0xe1, 0xe0, 0x46, 0xed, 0x61, 0xae, 0x60, 0x5a, 0xeb, 0xcf, 0x94,
+ 0x65, 0x75, 0xed, 0x04, 0xe0, 0x6d, 0x80, 0xae, 0x60, 0x4a, 0x91, 0x5b,
+ 0x67, 0x45, 0x75, 0xab, 0x61, 0x73, 0x68, 0xe9, 0x04, 0xe0, 0x66, 0xe2,
+ 0xed, 0xe0, 0x29, 0x63, 0xae, 0x60, 0x64, 0x1a, 0xc7, 0xac, 0xf2, 0x03,
+ 0x0a, 0x84, 0xef, 0x02, 0x84, 0xf4, 0xe0, 0x29, 0x1e, 0xf2, 0xcf, 0x9a,
+ 0xed, 0xe0, 0x56, 0x41, 0xe1, 0x04, 0x04, 0xd7, 0xfe, 0xf4, 0xe0, 0x34,
+ 0x1a, 0x6b, 0x61, 0xed, 0xdc, 0x05, 0x6f, 0xf3, 0x60, 0x5a, 0x1a, 0x82,
+ 0xee, 0x02, 0x84, 0xe9, 0xe0, 0x24, 0x35, 0x61, 0xeb, 0xe0, 0x2c, 0x20,
+ 0xeb, 0x59, 0xee, 0xe0, 0x47, 0x95, 0x69, 0xeb, 0xdc, 0xa3, 0x67, 0xe9,
+ 0xe0, 0x67, 0x2b, 0xf4, 0x07, 0x60, 0x6b, 0x79, 0x1f, 0xc1, 0x84, 0xae,
+ 0x60, 0x66, 0x30, 0x03, 0x03, 0x41, 0x59, 0xc3, 0x37, 0xf3, 0x07, 0x04,
+ 0x60, 0x6a, 0x67, 0xc2, 0x9f, 0xeb, 0xe0, 0x69, 0x04, 0xae, 0x60, 0x55,
+ 0x70, 0x50, 0xaa, 0x03, 0x41, 0x5c, 0xc3, 0x37, 0xf2, 0x06, 0x60, 0x6b,
+ 0x0c, 0xc1, 0xe8, 0xe1, 0x02, 0x9a, 0x70, 0x2e, 0x61, 0x63, 0x63, 0x65,
0x73, 0x73, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x2e, 0x73, 0x33, 0x2d, 0x67,
- 0x6c, 0x6f, 0x62, 0x61, 0xec, 0xe0, 0x62, 0x71, 0x67, 0xef, 0xe0, 0x2d,
- 0x63, 0xf0, 0x60, 0x68, 0xe7, 0xc1, 0x5b, 0xef, 0x19, 0x05, 0x0b, 0x13,
- 0x24, 0x23, 0x40, 0x4c, 0x11, 0x3f, 0x06, 0x0d, 0x0b, 0x1c, 0x13, 0x20,
- 0x06, 0x08, 0x60, 0x66, 0x89, 0x40, 0x9d, 0xc1, 0x7c, 0x1f, 0x43, 0xe5,
- 0xc1, 0x71, 0x7a, 0x69, 0x6c, 0x6c, 0x61, 0x2d, 0x69, 0xef, 0xe0, 0x60,
- 0x57, 0xf6, 0x04, 0xe0, 0x6a, 0x0e, 0xe9, 0x04, 0xe0, 0x68, 0x8d, 0x6d,
- 0x69, 0x65, 0x6e, 0x74, 0xef, 0xe0, 0x67, 0x4b, 0xf4, 0x02, 0x9c, 0xef,
- 0x08, 0x07, 0x08, 0x55, 0x8f, 0xe0, 0x54, 0x56, 0x79, 0x61, 0x6d, 0xe1,
- 0xe0, 0x63, 0xee, 0x72, 0x63, 0x79, 0x63, 0xec, 0xe0, 0x5d, 0xf1, 0xe2,
- 0xe0, 0x2a, 0xc6, 0x65, 0xe7, 0xe0, 0x23, 0x3a, 0xf3, 0x0b, 0x0d, 0x05,
- 0x60, 0x31, 0x55, 0x60, 0x25, 0x8b, 0xce, 0x8b, 0xea, 0x02, 0x86, 0x1f,
- 0x43, 0xf8, 0xe0, 0x5a, 0x4e, 0xef, 0xe0, 0x5a, 0x4a, 0x65, 0xf5, 0xe0,
- 0x63, 0x9e, 0x63, 0xef, 0xe0, 0x67, 0x4c, 0xf2, 0x06, 0x06, 0x0c, 0x04,
- 0x26, 0x83, 0x74, 0x67, 0xe1, 0xe0, 0x39, 0x18, 0xef, 0x04, 0xe0, 0x29,
- 0x1d, 0x74, 0x73, 0x75, 0xeb, 0xe0, 0x23, 0xab, 0xed, 0xe0, 0x62, 0x41,
+ 0x6c, 0x6f, 0x62, 0x61, 0xec, 0xe0, 0x64, 0x6f, 0x67, 0xef, 0xe0, 0x2e,
+ 0x37, 0xf0, 0x60, 0x6b, 0x2c, 0xc1, 0xa5, 0xef, 0x19, 0x05, 0x0b, 0x13,
+ 0x24, 0x23, 0x40, 0x4c, 0x11, 0x3f, 0x06, 0x0d, 0x0b, 0x21, 0x13, 0x20,
+ 0x06, 0x08, 0x60, 0x68, 0xc0, 0x40, 0xae, 0xc1, 0xbe, 0x1f, 0x43, 0xe5,
+ 0xc1, 0x76, 0x7a, 0x69, 0x6c, 0x6c, 0x61, 0x2d, 0x69, 0xef, 0xe0, 0x62,
+ 0x74, 0xf6, 0x04, 0xe0, 0x6c, 0x9d, 0xe9, 0x04, 0xe0, 0x6a, 0xda, 0x6d,
+ 0x69, 0x65, 0x6e, 0x74, 0xef, 0xe0, 0x69, 0x84, 0xf4, 0x02, 0x9c, 0xef,
+ 0x08, 0x07, 0x08, 0x56, 0x1a, 0xe0, 0x56, 0x5a, 0x79, 0x61, 0x6d, 0xe1,
+ 0xe0, 0x65, 0xf6, 0x72, 0x63, 0x79, 0x63, 0xec, 0xe0, 0x5f, 0xfb, 0xe2,
+ 0xe0, 0x2b, 0x8d, 0x65, 0xe7, 0xe0, 0x23, 0xf1, 0xf3, 0x0b, 0x0d, 0x05,
+ 0x60, 0x32, 0x2d, 0x60, 0x26, 0xa7, 0xce, 0x9e, 0xea, 0x02, 0x86, 0x1f,
+ 0x43, 0xf8, 0xe0, 0x5c, 0x24, 0xef, 0xe0, 0x5c, 0x20, 0x65, 0xf5, 0xe0,
+ 0x65, 0xa6, 0x63, 0xef, 0xe0, 0x69, 0x88, 0xf2, 0x06, 0x06, 0x0c, 0x04,
+ 0x26, 0x83, 0x74, 0x67, 0xe1, 0xe0, 0x3a, 0x0b, 0xef, 0x04, 0xe0, 0x29,
+ 0xe4, 0x74, 0x73, 0x75, 0xeb, 0xe0, 0x24, 0x64, 0xed, 0xe0, 0x64, 0x3f,
0xe9, 0x04, 0x10, 0x04, 0x87, 0xf9, 0x02, 0x85, 0x6f, 0x73, 0xe8, 0xd6,
- 0x61, 0xe1, 0x04, 0xe0, 0x61, 0xf8, 0xed, 0xd0, 0xdc, 0x6f, 0xeb, 0xc1,
- 0x4f, 0x6d, 0x61, 0x63, 0xe8, 0xe0, 0x5f, 0x1c, 0x67, 0x75, 0xe3, 0xe0,
- 0x27, 0x1f, 0xe5, 0xc9, 0x42, 0x64, 0x6f, 0xf6, 0xe0, 0x58, 0x8b, 0xef,
- 0x04, 0xe0, 0x68, 0x6d, 0x6e, 0x73, 0x63, 0x61, 0x6c, 0x65, 0xae, 0x60,
- 0x5a, 0xf5, 0xce, 0x49, 0xee, 0x09, 0x23, 0x06, 0x07, 0x60, 0x55, 0x80,
- 0xd2, 0xa6, 0x7a, 0xe1, 0x06, 0x09, 0x0b, 0xe0, 0x67, 0x33, 0xe5, 0x02,
+ 0xec, 0xe1, 0x04, 0xe0, 0x63, 0xf6, 0xed, 0xd1, 0x46, 0x6f, 0xeb, 0xc1,
+ 0x56, 0x6d, 0x61, 0x63, 0xe8, 0xe0, 0x61, 0x41, 0x67, 0x75, 0xe3, 0xe0,
+ 0x27, 0xd6, 0xe5, 0xc9, 0x3d, 0x64, 0x6f, 0xf6, 0xe0, 0x5a, 0x71, 0xef,
+ 0x04, 0xe0, 0x6b, 0xb5, 0x6e, 0x73, 0x63, 0x61, 0x6c, 0x65, 0xae, 0x60,
+ 0x5c, 0xda, 0xce, 0xb4, 0xee, 0x09, 0x23, 0x06, 0x07, 0x60, 0x57, 0x68,
+ 0xd3, 0x03, 0x7a, 0xe1, 0x06, 0x09, 0x0b, 0xe0, 0x69, 0x6f, 0xe5, 0x02,
0x91, 0x64, 0x65, 0x6c, 0x6c, 0xe1, 0x8c, 0xad, 0x02, 0x88, 0x65, 0x2d,
- 0x64, 0x65, 0x6c, 0x6c, 0x61, 0x2d, 0x62, 0x72, 0x69, 0xe1, 0xe0, 0x47,
- 0x45, 0x67, 0x6f, 0x6c, 0xe9, 0xd8, 0xcd, 0x65, 0xf9, 0x60, 0x5e, 0xa6,
- 0xca, 0x81, 0x61, 0xf3, 0xe0, 0x66, 0x90, 0xed, 0x60, 0x64, 0x63, 0xc4,
- 0xb9, 0xec, 0x07, 0x60, 0x31, 0x20, 0xe0, 0x35, 0xec, 0x69, 0xf3, 0xe0,
- 0x62, 0x05, 0xeb, 0x04, 0xe0, 0x5d, 0x7f, 0x75, 0x72, 0xe5, 0xe0, 0x30,
- 0x1a, 0xe4, 0x08, 0x09, 0x07, 0x60, 0x4d, 0x45, 0xc4, 0x21, 0xe5, 0x04,
- 0xe0, 0x60, 0xaa, 0xec, 0xe0, 0x2b, 0x9d, 0xe1, 0x60, 0x2a, 0xc7, 0xe0,
- 0x3e, 0x25, 0xae, 0xc8, 0x37, 0xe3, 0x02, 0x89, 0x6b, 0x2e, 0x70, 0x73,
- 0x74, 0xed, 0xe0, 0x43, 0xb3, 0x68, 0x69, 0x7a, 0xf5, 0xe0, 0x5f, 0xda,
- 0xe2, 0x04, 0xe0, 0x22, 0x2b, 0xe9, 0x06, 0x60, 0x66, 0xd1, 0xc1, 0xf3,
- 0xae, 0x07, 0x06, 0x60, 0x56, 0x0a, 0xc6, 0xcc, 0xf4, 0x60, 0x66, 0x48,
- 0xc0, 0xb5, 0xee, 0x60, 0x67, 0x0e, 0xc1, 0xa6, 0x61, 0x72, 0xe5, 0xe0,
- 0x37, 0x82, 0xae, 0x60, 0x63, 0xa5, 0x40, 0x5c, 0xc2, 0xa6, 0xad, 0x02,
- 0x89, 0x73, 0x69, 0x65, 0x6d, 0x65, 0xee, 0xe0, 0x4b, 0x76, 0x69, 0x2d,
- 0x72, 0xe1, 0xe0, 0x5d, 0xc7, 0xee, 0x60, 0x45, 0xd1, 0xe0, 0x22, 0xbd,
- 0xed, 0x04, 0xe0, 0x57, 0x20, 0xe1, 0x04, 0xe0, 0x68, 0x7e, 0x66, 0x61,
- 0xee, 0xe0, 0x65, 0x55, 0xec, 0x06, 0x60, 0x66, 0x08, 0xc2, 0x69, 0xe2,
- 0x60, 0x48, 0x99, 0xdf, 0xd7, 0xeb, 0x47, 0x3a, 0xe0, 0x61, 0x30, 0xea,
- 0x02, 0x84, 0x1f, 0x43, 0xf8, 0x82, 0x6f, 0x6e, 0xe4, 0xe0, 0x24, 0x33,
- 0xe9, 0x18, 0x1b, 0x40, 0x56, 0x34, 0x40, 0x43, 0x0e, 0x40, 0xd5, 0x11,
- 0x40, 0xa1, 0x0d, 0x22, 0x0a, 0x07, 0x0c, 0x19, 0x12, 0x05, 0x10, 0xd2,
- 0x58, 0x7a, 0xf5, 0x04, 0x07, 0x06, 0x84, 0x73, 0x61, 0x77, 0xe1, 0xe0,
- 0x31, 0xea, 0x6e, 0x61, 0xed, 0xe0, 0x5f, 0x55, 0x6d, 0xe1, 0xdf, 0x72,
- 0xe8, 0xe0, 0x62, 0x22, 0xf9, 0x02, 0x93, 0xef, 0x02, 0x84, 0xf4, 0xe0,
- 0x4c, 0xaf, 0x73, 0x68, 0x69, 0xae, 0x60, 0x5c, 0xc2, 0x40, 0xeb, 0x44,
- 0xf5, 0xac, 0xe1, 0x09, 0x0d, 0x05, 0x07, 0x08, 0x11, 0xe0, 0x5c, 0x53,
- 0xfa, 0x03, 0xd0, 0x06, 0x61, 0x6b, 0x69, 0xae, 0x60, 0x59, 0xcd, 0xcc,
- 0x84, 0x77, 0xe1, 0xe0, 0x20, 0x7a, 0x73, 0x68, 0x69, 0xf2, 0xe0, 0x31,
- 0x5d, 0x6d, 0x61, 0xae, 0x60, 0x5c, 0x5a, 0xc0, 0x6f, 0xeb, 0x02, 0xa3,
- 0xef, 0x02, 0x84, 0x6e, 0xef, 0xd1, 0x2b, 0xae, 0x60, 0x31, 0x8e, 0xe0,
- 0x2a, 0xbc, 0xe4, 0xe0, 0x4c, 0x63, 0xf4, 0x06, 0x15, 0x0b, 0xe0, 0x67,
- 0xa7, 0x73, 0xf5, 0x03, 0x05, 0x84, 0x6b, 0xe5, 0xe0, 0x63, 0x76, 0xe5,
- 0xe0, 0x5f, 0x61, 0x62, 0x69, 0x73, 0xe8, 0xe0, 0x65, 0x9c, 0xef, 0x07,
- 0x60, 0x23, 0xaf, 0xe0, 0x3c, 0x69, 0xf9, 0xc5, 0x53, 0xe1, 0x02, 0x84,
- 0xee, 0xe0, 0x2c, 0x9a, 0xeb, 0x52, 0x0c, 0xe0, 0x4f, 0x88, 0xf3, 0x04,
- 0x04, 0x0a, 0x88, 0x75, 0xe7, 0xd0, 0x59, 0x68, 0x69, 0x6d, 0x61, 0xae,
- 0x60, 0x5d, 0x2b, 0xc4, 0xf6, 0x63, 0x6f, 0x6e, 0x66, 0x75, 0xf3, 0xda,
- 0x7d, 0xe1, 0x04, 0x05, 0x12, 0x83, 0x77, 0xe1, 0xe0, 0x2c, 0x44, 0x74,
- 0x6f, 0xae, 0x09, 0x60, 0x2f, 0xed, 0x60, 0x2c, 0xd5, 0xc4, 0x93, 0xf3,
- 0x60, 0x5d, 0x00, 0xc4, 0xb4, 0xf3, 0xd2, 0x3d, 0x6b, 0x69, 0x2e, 0xef,
- 0x60, 0x61, 0x9e, 0xc3, 0xeb, 0x72, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0xae,
- 0x60, 0x49, 0x37, 0x40, 0x64, 0xdd, 0x2c, 0xee, 0x07, 0x10, 0x16, 0x0f,
- 0x06, 0xc2, 0x1c, 0xf4, 0x05, 0x04, 0xe0, 0x67, 0x37, 0xf3, 0xe0, 0x2e,
- 0x53, 0x65, 0x72, 0xe5, 0xe0, 0x50, 0x02, 0xef, 0x08, 0x06, 0x04, 0x52,
- 0xdf, 0xe0, 0x4b, 0x66, 0x6b, 0x61, 0xed, 0xe0, 0x2c, 0x2e, 0xe8, 0xe0,
- 0x65, 0x4c, 0xe2, 0xce, 0x8a, 0xe9, 0x04, 0xe0, 0x67, 0x16, 0xf3, 0x04,
- 0xe0, 0x42, 0xec, 0x69, 0x74, 0xe5, 0xca, 0x83, 0x63, 0x6f, 0xed, 0xe0,
- 0x38, 0xf8, 0xe1, 0x07, 0x08, 0x40, 0x7d, 0xe0, 0x2f, 0xe7, 0x74, 0x6f,
- 0xae, 0x60, 0x63, 0xb5, 0xc1, 0x72, 0xed, 0x03, 0xc0, 0x74, 0xe9, 0x10,
- 0x0a, 0x07, 0x05, 0x0a, 0x06, 0x0c, 0x07, 0x05, 0x06, 0x0f, 0x08, 0x4f,
- 0x24, 0xc4, 0x61, 0x79, 0x61, 0x6d, 0x61, 0x73, 0x68, 0x69, 0xf2, 0xd5,
- 0xad, 0x75, 0x6f, 0x6e, 0x75, 0xed, 0xd8, 0x53, 0x74, 0xe1, 0xe0, 0x60,
- 0x81, 0x73, 0x61, 0x6e, 0x72, 0x69, 0x6b, 0xf5, 0xe0, 0x2f, 0x47, 0x6f,
- 0x67, 0x75, 0xee, 0xcf, 0xff, 0xed, 0x02, 0x85, 0x69, 0x6e, 0xef, 0xd2,
- 0x76, 0xe1, 0xe0, 0x5d, 0xb9, 0xe9, 0x03, 0xd1, 0x14, 0xf3, 0xde, 0x10,
- 0x65, 0xe3, 0xe0, 0x3c, 0x25, 0x62, 0x6f, 0xf3, 0xe0, 0x64, 0xc1, 0xe1,
- 0x04, 0x04, 0xcf, 0x41, 0xf7, 0xe0, 0x58, 0xaa, 0x73, 0x68, 0x69, 0xe7,
- 0xd9, 0x0f, 0xae, 0x60, 0x58, 0x59, 0x42, 0xa6, 0xc6, 0x1a, 0x2d, 0x61,
- 0x6c, 0x70, 0xf3, 0xe0, 0x3e, 0x61, 0x61, 0xf4, 0xe0, 0x5f, 0x28, 0x6b,
- 0x61, 0xed, 0xd8, 0xda, 0xed, 0x02, 0x85, 0x6f, 0xfa, 0xe0, 0x56, 0xbe,
- 0xe1, 0x04, 0xe0, 0x60, 0xf2, 0xf4, 0xe0, 0x20, 0x6e, 0xec, 0x05, 0x06,
- 0xe0, 0x66, 0x57, 0x61, 0xee, 0x60, 0x64, 0x57, 0x81, 0xae, 0x20, 0x06,
- 0x0a, 0x08, 0x06, 0x09, 0x0a, 0x09, 0x09, 0x08, 0x08, 0x06, 0x09, 0x08,
- 0x60, 0x2b, 0x07, 0x59, 0xeb, 0x3f, 0x40, 0x47, 0x4e, 0x4e, 0x46, 0x47,
- 0x49, 0x1f, 0x40, 0x5f, 0xc0, 0x47, 0xf6, 0x60, 0x5a, 0x52, 0xca, 0x67,
- 0xf4, 0x60, 0x63, 0xbc, 0x03, 0x1e, 0x12, 0x40, 0xb5, 0xb2, 0xf3, 0x60,
- 0x63, 0x95, 0x40, 0x59, 0xc0, 0x79, 0xf2, 0x60, 0x63, 0xad, 0xc1, 0xe8,
- 0xf0, 0x60, 0x63, 0x87, 0x40, 0x41, 0x18, 0xc0, 0xbb, 0xee, 0x60, 0x63,
- 0x9b, 0x40, 0x5a, 0x40, 0x8e, 0xc1, 0x8a, 0xed, 0x60, 0x62, 0x48, 0x41,
- 0x49, 0x3c, 0xc2, 0x36, 0xeb, 0x60, 0x63, 0x88, 0x21, 0x40, 0xf9, 0xc1,
- 0x58, 0xe9, 0x60, 0x45, 0xaa, 0x5d, 0xfc, 0xc1, 0x12, 0xe7, 0x60, 0x63,
- 0x5a, 0x40, 0xd2, 0xc0, 0x42, 0xe5, 0x60, 0x59, 0xff, 0xcb, 0xe2, 0xe3,
- 0x60, 0x63, 0x8d, 0x18, 0x40, 0xac, 0xc0, 0x51, 0xe2, 0x60, 0x63, 0x9c,
- 0x40, 0x90, 0x1c, 0xb2, 0xe1, 0x60, 0x59, 0xe8, 0x49, 0x70, 0x24, 0x40,
- 0xd3, 0xa3, 0xeb, 0x04, 0xe0, 0x60, 0xe3, 0xe1, 0x03, 0xc3, 0x88, 0xf3,
- 0xe0, 0x63, 0xd6, 0xe8, 0x04, 0xe0, 0x55, 0xea, 0xe1, 0x02, 0x8c, 0xf2,
- 0x04, 0xe0, 0x60, 0x28, 0x61, 0xae, 0x60, 0x5a, 0x52, 0xc5, 0x53, 0x6d,
- 0x61, 0xae, 0x60, 0x3b, 0x23, 0x5f, 0x5c, 0x40, 0x78, 0x45, 0x5f, 0xc3,
- 0x6b, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0xee, 0xe0, 0x4e, 0xe0, 0x66,
- 0x75, 0x6e, 0xe5, 0xe0, 0x5e, 0x32, 0xe5, 0x04, 0xe0, 0x63, 0xd1, 0xec,
- 0x60, 0x2a, 0xf0, 0xe0, 0x25, 0x3e, 0xe4, 0x05, 0x0a, 0xe0, 0x4f, 0x28,
- 0x74, 0x72, 0x65, 0x2d, 0x67, 0x61, 0xf5, 0xe0, 0x31, 0xc9, 0x6f, 0x72,
- 0x69, 0xae, 0x60, 0x5c, 0x97, 0xc6, 0xee, 0x63, 0x72, 0xef, 0x02, 0x86,
- 0x73, 0x6f, 0xe6, 0xe0, 0x63, 0x97, 0x6c, 0x69, 0x67, 0xe8, 0xe0, 0x60,
- 0x46, 0x62, 0xf5, 0xe0, 0x59, 0xc4, 0xe1, 0x02, 0x89, 0xf3, 0x04, 0xe0,
- 0x49, 0xd0, 0xf4, 0xe0, 0x56, 0x59, 0xed, 0xe0, 0x63, 0x20, 0xae, 0x60,
- 0x3b, 0x19, 0x60, 0x25, 0x18, 0xc3, 0x02, 0xe7, 0x60, 0x3e, 0xc7, 0xe0,
- 0x26, 0x65, 0xe5, 0x15, 0x17, 0x18, 0x06, 0x1b, 0x2c, 0x27, 0x06, 0x40,
- 0x62, 0x60, 0x34, 0xc3, 0x5c, 0x3c, 0x49, 0x0d, 0x45, 0xed, 0xc4, 0x0c,
- 0x73, 0xf3, 0x03, 0x07, 0x84, 0x77, 0x69, 0x74, 0xe8, 0xe0, 0x3c, 0xad,
- 0xe9, 0xe0, 0x5c, 0xbc, 0x65, 0x72, 0x6c, 0xe9, 0xe0, 0x63, 0x86, 0xf2,
- 0x05, 0x05, 0x08, 0xd4, 0x6b, 0x1f, 0x43, 0xe5, 0xd4, 0x76, 0x73, 0x65,
- 0x69, 0x6e, 0xe5, 0xe0, 0x36, 0xc5, 0x63, 0x6b, 0xed, 0xdb, 0x43, 0xee,
- 0x60, 0x63, 0xe0, 0xc1, 0x00, 0xed, 0x06, 0x05, 0x05, 0xe0, 0x63, 0x4e,
- 0x73, 0xe5, 0xe0, 0x58, 0x7e, 0x6f, 0xf2, 0xe0, 0x32, 0xa1, 0x62, 0x65,
- 0x72, 0x73, 0x2e, 0x6c, 0xe9, 0xe0, 0x35, 0xc1, 0xec, 0x0c, 0x05, 0x07,
- 0x60, 0x57, 0xf1, 0x41, 0x06, 0x43, 0x0d, 0xc1, 0x87, 0x68, 0xf5, 0xe0,
- 0x60, 0x5e, 0x62, 0x6f, 0x75, 0xf2, 0xe0, 0x4e, 0x8c, 0x2e, 0x63, 0x6c,
- 0x6f, 0x75, 0x64, 0x6c, 0x65, 0x74, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2e,
- 0xe1, 0xe0, 0x64, 0x0f, 0xe9, 0x02, 0x88, 0x77, 0x61, 0xae, 0x60, 0x59,
- 0x6f, 0xc2, 0x54, 0xee, 0x02, 0x87, 0x66, 0x6f, 0x72, 0xf5, 0xe0, 0x4b,
- 0x6d, 0xad, 0x02, 0x87, 0x76, 0x69, 0x67, 0xef, 0xe0, 0x41, 0x42, 0x69,
- 0x73, 0x65, 0x72, 0xf6, 0xe0, 0x41, 0x3b, 0x67, 0x75, 0xf2, 0xe0, 0x5e,
- 0x65, 0xe4, 0x06, 0x31, 0x0a, 0xe0, 0x64, 0x25, 0xe9, 0x03, 0x0e, 0x84,
- 0xef, 0x02, 0x81, 0x2d, 0x63, 0x61, 0x6d, 0x70, 0x69, 0x64, 0xe1, 0xe0,
- 0x58, 0xee, 0x63, 0xe9, 0xdb, 0x13, 0xe1, 0x05, 0x0d, 0xe0, 0x64, 0x37,
- 0x74, 0x65, 0x63, 0x68, 0xae, 0x04, 0xe0, 0x56, 0xa0, 0xe2, 0xe0, 0x52,
- 0xca, 0xae, 0x60, 0x5f, 0xb1, 0x41, 0xa9, 0xc1, 0xdb, 0x65, 0x63, 0x69,
- 0x6e, 0xae, 0x60, 0x58, 0x60, 0xcb, 0x39, 0xae, 0x0c, 0x06, 0x07, 0x60,
- 0x5c, 0x97, 0x40, 0x7e, 0x43, 0x74, 0xc2, 0x28, 0xf3, 0x60, 0x61, 0xcb,
- 0xc0, 0xa5, 0xf0, 0x60, 0x62, 0x6a, 0x1b, 0xc0, 0xd9, 0xe5, 0x60, 0x58,
- 0x27, 0xca, 0x67, 0xae, 0x0c, 0x05, 0x06, 0x60, 0x4c, 0x14, 0x44, 0x26,
- 0x41, 0x07, 0xcc, 0x4e, 0xf5, 0x60, 0x61, 0x8e, 0x83, 0xf4, 0x60, 0x61,
- 0x7f, 0xc2, 0x64, 0xf3, 0x60, 0x61, 0x83, 0xc0, 0xde, 0xe4, 0x04, 0xe0,
- 0x63, 0xe2, 0xae, 0x60, 0x58, 0x0a, 0xc6, 0xd3, 0xe3, 0x07, 0x08, 0x07,
- 0x09, 0xe0, 0x63, 0xbc, 0xf0, 0x04, 0xe0, 0x3f, 0x9f, 0xf2, 0xc1, 0x47,
- 0x6b, 0x69, 0x6e, 0xf3, 0xe0, 0x57, 0x4e, 0x64, 0x69, 0x72, 0xae, 0x60,
- 0x4d, 0xbd, 0xd5, 0x7b, 0xae, 0x60, 0x52, 0x4e, 0x4b, 0x0f, 0xc4, 0x5c,
- 0xe2, 0x04, 0xe0, 0x62, 0x08, 0xae, 0x60, 0x61, 0xac, 0xc0, 0x5a, 0xe1,
- 0x16, 0x15, 0x0c, 0x40, 0x7a, 0x2f, 0x40, 0x4a, 0x12, 0x04, 0x31, 0x0a,
- 0x24, 0x16, 0x2c, 0x1a, 0x07, 0x05, 0x19, 0xe0, 0x61, 0x88, 0xfa, 0x03,
- 0x05, 0x87, 0x75, 0xf2, 0xe0, 0x51, 0x8c, 0x6f, 0x77, 0x73, 0xfa, 0xe0,
- 0x28, 0x1c, 0x65, 0xf0, 0xe0, 0x3f, 0x24, 0x79, 0x66, 0x69, 0x72, 0x73,
- 0x74, 0xae, 0x60, 0x53, 0x45, 0xcd, 0x62, 0xf4, 0x08, 0x0f, 0x40, 0x58,
- 0x06, 0xe0, 0x61, 0xa0, 0xf4, 0x04, 0xe0, 0x5e, 0x31, 0x61, 0x2d, 0x76,
- 0x61, 0x72, 0x6a, 0xea, 0xe0, 0x50, 0xcb, 0x73, 0xf5, 0x0a, 0x06, 0x04,
- 0x05, 0x12, 0x03, 0x10, 0x03, 0x04, 0x86, 0x7a, 0x61, 0xeb, 0xe0, 0x58,
- 0xe7, 0x79, 0xe1, 0xd0, 0x30, 0x75, 0xf2, 0xe0, 0x47, 0xe7, 0xf3, 0x02,
- 0x8b, 0x68, 0xe9, 0x04, 0xe0, 0x21, 0x14, 0x67, 0xe5, 0xe0, 0x5d, 0xbe,
- 0x61, 0xeb, 0xd0, 0x44, 0xee, 0xd4, 0x1b, 0xed, 0x02, 0x89, 0x6f, 0x74,
- 0x6f, 0xae, 0x60, 0x5c, 0xd8, 0xc3, 0x37, 0xe1, 0xe0, 0x47, 0x4b, 0xeb,
- 0xce, 0xd8, 0xe5, 0xe0, 0x5d, 0x5f, 0xe4, 0x60, 0x5e, 0x4d, 0xc2, 0xe5,
- 0xe2, 0x02, 0x84, 0x75, 0xf3, 0xcd, 0xeb, 0xe1, 0xe0, 0x2c, 0x94, 0x72,
- 0x69, 0xf8, 0xe0, 0x62, 0x03, 0xe5, 0xe0, 0x3d, 0xad, 0xf3, 0x08, 0x04,
- 0x0d, 0x0a, 0x07, 0xe0, 0x57, 0x1c, 0xf5, 0xe0, 0x23, 0x58, 0x73, 0xe1,
- 0x02, 0x81, 0x2d, 0x63, 0x61, 0x72, 0x72, 0xe1, 0xe0, 0x3d, 0x93, 0x68,
- 0x69, 0xeb, 0x4c, 0x1c, 0x60, 0x3a, 0xed, 0xca, 0xc9, 0x66, 0x6a, 0x6f,
- 0xf2, 0xe0, 0x23, 0x5a, 0x61, 0xeb, 0xde, 0x29, 0xf2, 0x0a, 0x0f, 0x07,
- 0x05, 0x05, 0x0e, 0x0c, 0xe0, 0x60, 0x80, 0xf5, 0x02, 0x85, 0x6d, 0x6f,
- 0xf2, 0xd4, 0xf8, 0x67, 0x61, 0x6d, 0xe5, 0xe0, 0x54, 0x76, 0x73, 0x68,
- 0x61, 0xec, 0xe0, 0x4f, 0x96, 0x72, 0xe9, 0xe0, 0x60, 0xe5, 0x6e, 0xe1,
- 0xe0, 0x34, 0xac, 0x6b, 0xe5, 0x04, 0xe0, 0x56, 0xef, 0xf4, 0x60, 0x4d,
- 0x14, 0x53, 0x19, 0xc2, 0x69, 0x69, 0xee, 0x02, 0x84, 0xe7, 0xe0, 0x59,
- 0x0e, 0xe5, 0xe0, 0x61, 0xfc, 0x63, 0xe8, 0xe0, 0x5b, 0x79, 0xf0, 0x04,
- 0xe0, 0x62, 0x79, 0x2e, 0x66, 0x61, 0x73, 0x74, 0x6c, 0xf9, 0x60, 0x31,
- 0x6e, 0xe0, 0x30, 0xe0, 0x6f, 0xf2, 0xd3, 0x61, 0xee, 0x0b, 0x05, 0x05,
- 0x0d, 0x60, 0x5b, 0x29, 0x41, 0x59, 0xc5, 0xc3, 0x74, 0xef, 0xe0, 0x29,
- 0x51, 0x6e, 0xef, 0xe0, 0x54, 0x1a, 0xe7, 0x04, 0xe0, 0x60, 0xc2, 0x79,
- 0x73, 0x68, 0x6c, 0xe1, 0xe0, 0x5c, 0x0b, 0xe1, 0x02, 0x84, 0xf5, 0xe0,
- 0x49, 0xde, 0x67, 0x65, 0x6d, 0xe5, 0xe0, 0x3b, 0x40, 0x6d, 0x75, 0x72,
- 0x6f, 0x67, 0x61, 0xf7, 0xe0, 0x2a, 0xfa, 0xec, 0x07, 0x07, 0x08, 0x03,
- 0xe0, 0x29, 0xaa, 0x73, 0x65, 0x6c, 0xf6, 0xe0, 0x60, 0x8c, 0x6f, 0x70,
- 0x6f, 0x6c, 0xf3, 0xe0, 0x3a, 0xa9, 0xe2, 0xc4, 0x76, 0x61, 0x74, 0x76,
- 0x75, 0x6f, 0x70, 0xed, 0xe0, 0x5a, 0x73, 0xeb, 0x03, 0x07, 0x87, 0x75,
- 0x72, 0x61, 0x7a, 0xe1, 0xdf, 0x12, 0x69, 0x6e, 0x6f, 0xe8, 0xe0, 0x22,
- 0xc3, 0xe5, 0xe0, 0x29, 0xc9, 0xe9, 0x0a, 0x05, 0x0b, 0x0c, 0x60, 0x33,
- 0x78, 0xe0, 0x23, 0x6b, 0x7a, 0x75, 0xf2, 0xc9, 0xeb, 0xee, 0x04, 0xe0,
- 0x60, 0xe3, 0x74, 0x65, 0xee, 0xe0, 0x5c, 0xf6, 0xec, 0x04, 0xe0, 0x5d,
- 0x18, 0x2d, 0x62, 0x6f, 0xf8, 0xe0, 0x28, 0xe8, 0x62, 0x61, 0xf2, 0xc9,
- 0x1c, 0xe7, 0x03, 0x06, 0x8b, 0x6e, 0x65, 0xf4, 0xe0, 0x42, 0x09, 0x65,
- 0x6e, 0x74, 0x6f, 0x73, 0x69, 0x74, 0xe5, 0xe0, 0x51, 0xe2, 0x61, 0xfa,
- 0xe0, 0x5c, 0x86, 0x65, 0x62, 0x61, 0x73, 0xe8, 0xd4, 0x0c, 0x64, 0xf2,
- 0xe0, 0x59, 0x0a, 0xe3, 0x03, 0x06, 0x8b, 0x68, 0x69, 0xe4, 0xe0, 0x5b,
- 0x8f, 0xe5, 0x02, 0x84, 0xf2, 0xe0, 0x50, 0x9f, 0xe9, 0xe0, 0x55, 0x23,
- 0xe1, 0xe0, 0x2e, 0x69, 0xae, 0x60, 0x5b, 0x23, 0x03, 0xc1, 0x5d, 0xec,
- 0x20, 0x17, 0x12, 0x0d, 0x40, 0x5e, 0x35, 0x15, 0x41, 0x1b, 0x04, 0x06,
- 0x09, 0x41, 0x1a, 0x0d, 0x40, 0xb1, 0x1c, 0x40, 0xea, 0x60, 0x32, 0x70,
- 0x51, 0x21, 0x4e, 0x8c, 0x47, 0xf0, 0xc1, 0x10, 0x1f, 0xc3, 0x03, 0x0b,
- 0x84, 0xf8, 0x05, 0x41, 0x07, 0xdb, 0x5f, 0x64, 0xe9, 0xe0, 0x51, 0xd5,
- 0xe6, 0xe0, 0x33, 0x5b, 0xe1, 0xc4, 0xac, 0xf9, 0x04, 0xe0, 0x61, 0x44,
- 0xee, 0x02, 0x84, 0xf8, 0xe0, 0x48, 0x79, 0xe7, 0x60, 0x51, 0xc0, 0xc8,
- 0x60, 0xf6, 0x06, 0x60, 0x46, 0x1b, 0xdb, 0x15, 0xae, 0x60, 0x46, 0x28,
- 0xd4, 0xa9, 0xf5, 0x12, 0x09, 0x11, 0x04, 0x02, 0x0f, 0x0b, 0x4f, 0xdd,
- 0x60, 0x29, 0x0c, 0x55, 0xa5, 0x44, 0x87, 0xcd, 0xc8, 0xf8, 0x04, 0xe0,
- 0x5f, 0x96, 0xf5, 0xe0, 0x3f, 0x0d, 0xee, 0x02, 0x84, 0xee, 0xe0, 0x55,
- 0x61, 0xe4, 0x04, 0xe0, 0x5f, 0x6d, 0x62, 0xe5, 0xe0, 0x34, 0x37, 0xeb,
- 0xe0, 0x54, 0x51, 0xe8, 0x8b, 0xe7, 0x05, 0x04, 0xe0, 0x5c, 0xdb, 0xf3,
- 0xe0, 0x5c, 0xde, 0x61, 0xee, 0xe0, 0x39, 0x71, 0xe3, 0x02, 0x84, 0xe3,
- 0xe0, 0x5a, 0x55, 0xe1, 0xe0, 0x48, 0x98, 0xe2, 0x05, 0x06, 0xe0, 0x4f,
- 0x34, 0x6c, 0x69, 0xee, 0xe0, 0x4f, 0x32, 0x61, 0x72, 0xf4, 0xc6, 0xb6,
- 0xf4, 0x05, 0x27, 0xe0, 0x60, 0x9f, 0xe4, 0x06, 0x60, 0x5f, 0x18, 0xc1,
- 0xa7, 0xae, 0x0a, 0x06, 0x04, 0x57, 0xd3, 0x60, 0x34, 0xc8, 0xc8, 0x3d,
- 0xf5, 0x60, 0x50, 0x68, 0xcd, 0xe5, 0xe7, 0xe0, 0x5e, 0x94, 0xe3, 0x04,
- 0xe0, 0x5e, 0x6e, 0x6f, 0x2e, 0xe9, 0xe0, 0x5e, 0x50, 0xae, 0x60, 0x45,
- 0x97, 0x54, 0xa9, 0xc4, 0x5c, 0xf0, 0x06, 0x43, 0x0d, 0xe0, 0x53, 0x69,
- 0xec, 0x04, 0xe0, 0x60, 0x8b, 0x66, 0x69, 0x6e, 0x61, 0x6e, 0xe3, 0xe0,
- 0x2e, 0x59, 0xef, 0x12, 0x05, 0x0d, 0x0a, 0x05, 0x07, 0x05, 0x2e, 0x17,
- 0x1c, 0x07, 0x07, 0x3b, 0x07, 0x20, 0xe0, 0x5d, 0x6e, 0x77, 0xe9, 0xe0,
- 0x49, 0x44, 0x76, 0xe5, 0x06, 0x60, 0x47, 0xde, 0xd8, 0x84, 0x73, 0xe9,
- 0xe0, 0x39, 0xbd, 0xf4, 0x04, 0xe0, 0x50, 0xdc, 0xf4, 0x60, 0x5e, 0xcc,
- 0x8f, 0x73, 0xe5, 0xe0, 0x39, 0x0a, 0x72, 0x65, 0x6e, 0xf3, 0xe0, 0x33,
- 0xe7, 0x70, 0xf0, 0xe0, 0x5a, 0x1d, 0xee, 0x05, 0x04, 0x1b, 0xd0, 0x1f,
- 0xe7, 0xe0, 0x51, 0x36, 0xe4, 0x02, 0x86, 0x72, 0x69, 0xee, 0xe0, 0x56,
- 0xb6, 0x6f, 0xee, 0x04, 0xe0, 0x60, 0x29, 0x2e, 0x63, 0x6c, 0x6f, 0x75,
- 0x64, 0x61, 0x70, 0xf0, 0xe0, 0x42, 0x58, 0xad, 0x04, 0xe0, 0x2b, 0xba,
- 0xb2, 0xe0, 0x2b, 0xba, 0xed, 0x07, 0x09, 0x60, 0x47, 0x50, 0xc6, 0x50,
- 0x62, 0x61, 0x72, 0xe4, 0x60, 0x56, 0xfd, 0xc2, 0x7b, 0xae, 0x60, 0x5e,
- 0x00, 0xc0, 0x6e, 0xec, 0x04, 0xe0, 0x5f, 0xf8, 0xe9, 0x02, 0x88, 0x74,
- 0x61, 0x70, 0x75, 0xee, 0xe0, 0x50, 0xfd, 0x70, 0x6f, 0xf0, 0x04, 0xe0,
- 0x5e, 0xde, 0x6d, 0xe3, 0xe0, 0x5e, 0xe9, 0x69, 0x73, 0x69, 0xf2, 0xe0,
- 0x55, 0x5b, 0x68, 0x6d, 0x75, 0xf3, 0xe0, 0x49, 0xd1, 0xe7, 0x05, 0x09,
- 0xe0, 0x5e, 0x69, 0x6f, 0x69, 0x70, 0xae, 0x60, 0x5f, 0x29, 0xc0, 0x99,
- 0xe9, 0x02, 0x87, 0x73, 0x74, 0x69, 0xe3, 0xe0, 0x5b, 0x59, 0xee, 0x02,
- 0x85, 0x74, 0xef, 0xe0, 0x49, 0xb0, 0x6c, 0x69, 0x6e, 0x65, 0xae, 0x08,
- 0x60, 0x52, 0x0a, 0x4c, 0x26, 0xc0, 0x6e, 0xf3, 0x04, 0xe0, 0x4f, 0x1d,
- 0x65, 0x72, 0x76, 0x69, 0xe3, 0xe0, 0x5f, 0x2b, 0x64, 0xe9, 0x60, 0x50,
- 0x18, 0xcd, 0x7b, 0xe3, 0x05, 0x04, 0xe0, 0x5a, 0x83, 0xeb, 0xe0, 0x4b,
- 0xea, 0x61, 0xec, 0x02, 0x87, 0x7a, 0x6f, 0x6e, 0xe5, 0xe0, 0x3d, 0x43,
- 0x68, 0x6f, 0x73, 0x74, 0x2e, 0x64, 0x61, 0xf0, 0xe0, 0x3b, 0x42, 0xe1,
- 0x04, 0xe0, 0x3d, 0x5f, 0xe2, 0x60, 0x4c, 0xd8, 0x82, 0xee, 0xe0, 0x4b,
- 0xf7, 0xec, 0x60, 0x53, 0x7f, 0xca, 0x46, 0xeb, 0x04, 0xe0, 0x5f, 0x58,
- 0xb3, 0xe0, 0x5e, 0xcd, 0xe9, 0x11, 0x0c, 0x0a, 0x05, 0x3c, 0x2b, 0x12,
- 0x14, 0x0f, 0x17, 0x07, 0x04, 0x60, 0x5c, 0x66, 0xc2, 0x03, 0xf6, 0x06,
- 0x60, 0x49, 0xb9, 0xd4, 0x06, 0x6f, 0xf2, 0xe0, 0x53, 0xd6, 0x74, 0x74,
- 0x6c, 0x65, 0x73, 0x74, 0xe1, 0xe0, 0x4c, 0x39, 0x70, 0xf3, 0xe0, 0x5c,
- 0xf3, 0xee, 0x04, 0x0c, 0x16, 0x91, 0x6f, 0x64, 0x65, 0x6f, 0x62, 0x6a,
- 0x65, 0x63, 0xf4, 0xe0, 0x55, 0xea, 0xeb, 0x04, 0xe0, 0x5f, 0x11, 0x79,
- 0x61, 0x72, 0xe4, 0x04, 0xe0, 0x47, 0x29, 0x2d, 0x63, 0x6c, 0x6f, 0x75,
- 0xe4, 0xe0, 0x58, 0x41, 0xe4, 0x03, 0x05, 0x84, 0x1f, 0xc3, 0xe0, 0x5a,
- 0xa6, 0xe5, 0xe0, 0x2a, 0xc4, 0xe1, 0xe0, 0x5a, 0x9f, 0x63, 0xef, 0xc6,
- 0x5f, 0xed, 0x05, 0x05, 0xe0, 0x5d, 0x55, 0x69, 0xf4, 0xe0, 0x40, 0x87,
- 0xe1, 0x03, 0x05, 0x84, 0x6e, 0xef, 0xe0, 0x4c, 0x58, 0xae, 0xe0, 0x41,
- 0x2b, 0x2d, 0x63, 0x69, 0x74, 0x79, 0xae, 0x06, 0x60, 0x5e, 0x19, 0x0e,
- 0x82, 0x72, 0x6f, 0x63, 0xeb, 0xe0, 0x5e, 0x54, 0x6c, 0xec, 0x04, 0xe0,
- 0x5c, 0x83, 0xe5, 0x02, 0x84, 0xf3, 0xe0, 0x52, 0x00, 0x68, 0x61, 0xed,
- 0xdf, 0xc9, 0x6b, 0xe5, 0x04, 0xe0, 0x5e, 0xa8, 0xf3, 0x02, 0x87, 0x63,
- 0x61, 0x6e, 0xe4, 0xe0, 0x41, 0x0f, 0x2d, 0xf0, 0xd2, 0x3b, 0xe7, 0x05,
- 0x04, 0xe0, 0x5c, 0x8d, 0xf5, 0xe0, 0x58, 0x02, 0x68, 0xf4, 0xe0, 0x49,
- 0x0c, 0x66, 0xe5, 0x05, 0x06, 0xe0, 0x5e, 0x7e, 0x73, 0x74, 0xf9, 0xe0,
- 0x5c, 0x8e, 0x69, 0x6e, 0x73, 0x75, 0x72, 0x61, 0xee, 0xe0, 0x59, 0x68,
- 0x65, 0xf2, 0x60, 0x48, 0x00, 0xd4, 0xdd, 0xe4, 0xe0, 0x5c, 0x1d, 0x62,
- 0xae, 0x18, 0x0b, 0x04, 0x4c, 0x43, 0x13, 0x60, 0x37, 0xd8, 0x0b, 0x07,
- 0x04, 0x03, 0x04, 0x1c, 0x0a, 0x02, 0x06, 0x10, 0x06, 0x0b, 0x0d, 0xd4,
- 0xbb, 0xee, 0x60, 0x44, 0x69, 0x03, 0x03, 0x03, 0x12, 0x0b, 0x13, 0x83,
- 0xe8, 0xe0, 0x55, 0x85, 0xe4, 0x41, 0x74, 0xe0, 0x43, 0x22, 0xe7, 0x02,
- 0x84, 0xe2, 0xe0, 0x5c, 0x78, 0xae, 0x60, 0x43, 0x2b, 0xd9, 0x5c, 0xe5,
- 0x13, 0x07, 0x04, 0x04, 0x04, 0x0a, 0x0a, 0x09, 0x16, 0x0f, 0x06, 0x15,
- 0x15, 0x60, 0x2f, 0xa0, 0xe0, 0x2b, 0xf1, 0x7a, 0x61, 0x6a, 0xf3, 0xe0,
- 0x4b, 0xab, 0xf8, 0xe0, 0x59, 0x0d, 0xf6, 0xe0, 0x47, 0xfa, 0xf3, 0xe0,
- 0x4e, 0xc8, 0xee, 0x04, 0xe0, 0x25, 0x98, 0x75, 0xe7, 0xe0, 0x5c, 0x15,
- 0xec, 0x04, 0xe0, 0x5c, 0x9c, 0x75, 0xf8, 0xe0, 0x46, 0xc3, 0xeb, 0x04,
- 0xe0, 0x57, 0xc5, 0xf3, 0xe0, 0x25, 0x83, 0xe9, 0x03, 0x07, 0x87, 0x74,
- 0x75, 0x6e, 0x67, 0xf3, 0xdf, 0x46, 0xf2, 0x60, 0x25, 0x74, 0xe0, 0x28,
- 0xc3, 0xeb, 0xe0, 0x47, 0xc3, 0xe7, 0x08, 0x60, 0x38, 0x20, 0x60, 0x24,
- 0x1f, 0xb0, 0x6e, 0x69, 0xe3, 0xe0, 0x4e, 0xe3, 0x66, 0x72, 0xe1, 0xe0,
- 0x5b, 0x5b, 0xe3, 0x03, 0x05, 0x86, 0x7a, 0xee, 0xe0, 0x24, 0xf1, 0x6c,
- 0x65, 0xf2, 0xe0, 0x51, 0xcf, 0xe3, 0x60, 0x56, 0xa6, 0xc5, 0x04, 0xe2,
- 0x03, 0x06, 0x85, 0x74, 0x69, 0xed, 0xe0, 0x27, 0x49, 0x6f, 0xf2, 0xe0,
- 0x4b, 0x33, 0x65, 0x73, 0xe2, 0xe0, 0x55, 0x39, 0xe1, 0x05, 0x06, 0x03,
- 0xde, 0xf3, 0xf3, 0x60, 0x4e, 0x09, 0xce, 0x08, 0xee, 0xde, 0xf8, 0x64,
- 0x70, 0x61, 0x67, 0x65, 0xf3, 0xe0, 0x44, 0x7c, 0xe3, 0x07, 0x07, 0x60,
- 0x5b, 0x6a, 0xc2, 0x03, 0x75, 0x62, 0x65, 0xad, 0xe0, 0x34, 0x53, 0xec,
- 0x04, 0xe0, 0x24, 0xdc, 0x73, 0x74, 0x61, 0x67, 0xe5, 0xe0, 0x24, 0xd7,
- 0xe1, 0x18, 0x06, 0x10, 0x0b, 0x12, 0x08, 0x07, 0x05, 0x04, 0x05, 0x39,
- 0x13, 0x06, 0x06, 0x06, 0x06, 0x07, 0x04, 0x0b, 0x60, 0x56, 0xd8, 0xc5,
- 0xa5, 0xfa, 0x60, 0x44, 0xf8, 0xd6, 0x4b, 0xf7, 0x05, 0x04, 0xe0, 0x5d,
- 0x37, 0xf9, 0xe0, 0x49, 0x9a, 0xae, 0x60, 0x58, 0xc4, 0xc2, 0xe5, 0x76,
- 0xe1, 0x04, 0xe0, 0x4d, 0xad, 0x67, 0xe9, 0xe0, 0x58, 0xd6, 0xf4, 0x05,
- 0x05, 0xe0, 0x5d, 0x1b, 0x72, 0xef, 0xe0, 0x5a, 0xea, 0x69, 0xee, 0x60,
- 0x56, 0x8a, 0xc5, 0x04, 0xf3, 0x03, 0xc0, 0x95, 0xe1, 0xe0, 0x52, 0xd0,
- 0xf2, 0x60, 0x24, 0xa2, 0xe0, 0x31, 0x4d, 0x71, 0xf5, 0xe0, 0x52, 0xbd,
- 0xf0, 0xe0, 0x4a, 0xff, 0x6f, 0xe3, 0xe0, 0x35, 0x01, 0xee, 0x05, 0x04,
- 0x0a, 0x1c, 0x85, 0xf8, 0xe0, 0x55, 0x83, 0xe7, 0x04, 0xe0, 0x4a, 0xf2,
- 0x73, 0xef, 0xe0, 0x4d, 0xe2, 0xe4, 0x06, 0x05, 0x06, 0xe0, 0x5c, 0xd1,
- 0x72, 0xef, 0xe0, 0x35, 0xc7, 0x69, 0x6e, 0x67, 0xae, 0xd7, 0xb9, 0x2d,
- 0x34, 0x2d, 0x73, 0x61, 0x6c, 0xe5, 0xe0, 0x21, 0xa8, 0x63, 0xe1, 0xe0,
- 0x49, 0x23, 0x62, 0xe9, 0xc3, 0xda, 0xed, 0x05, 0x04, 0xe0, 0x49, 0x14,
- 0xe4, 0xe0, 0x4a, 0x03, 0x62, 0x6f, 0x72, 0x67, 0x68, 0xe9, 0xe0, 0x40,
- 0x37, 0x6b, 0x61, 0xf3, 0xe0, 0x5b, 0xa6, 0x69, 0x63, 0xe8, 0xe0, 0x4c,
- 0x98, 0x68, 0x70, 0xf0, 0xe0, 0x55, 0x03, 0x64, 0x65, 0xf3, 0xe0, 0x58,
- 0xa2, 0x63, 0x61, 0x69, 0xf8, 0xe0, 0x5a, 0xe8, 0x62, 0xae, 0xc4, 0x4d,
- 0x61, 0x6b, 0x65, 0x73, 0x76, 0x75, 0x65, 0xed, 0xe0, 0x58, 0xc9, 0x2d,
- 0x73, 0x70, 0xe5, 0xe0, 0x21, 0x15, 0x2d, 0x6f, 0x2d, 0x67, 0x2d, 0x69,
- 0xad, 0xe0, 0x33, 0x7f, 0xeb, 0x23, 0x12, 0x3a, 0x0a, 0x36, 0x41, 0x34,
- 0x09, 0x04, 0x40, 0x81, 0x0d, 0x41, 0x86, 0x2e, 0x0c, 0x1b, 0x41, 0x91,
- 0x40, 0x48, 0x06, 0x04, 0x40, 0x4d, 0x05, 0x43, 0xb0, 0x18, 0x60, 0x28,
- 0x0f, 0xe0, 0x27, 0x93, 0x1f, 0xc3, 0x04, 0xe0, 0x29, 0x4e, 0x61, 0x72,
- 0x1f, 0x43, 0x61, 0x1f, 0x45, 0x61, 0x6a, 0xef, 0xc8, 0x38, 0xf9, 0x09,
- 0x07, 0x60, 0x41, 0x10, 0x55, 0x70, 0xc5, 0xa5, 0x75, 0x72, 0x61, 0xe7,
- 0xe0, 0x25, 0x37, 0xef, 0x05, 0x08, 0xe0, 0x40, 0x15, 0x77, 0x61, 0xae,
- 0x60, 0x56, 0x08, 0xc4, 0x60, 0xf4, 0x02, 0x86, 0xef, 0x60, 0x5a, 0x67,
- 0xc1, 0xac, 0xe1, 0x02, 0x8a, 0xee, 0x02, 0x83, 0xe7, 0xca, 0xdb, 0xe1,
- 0xe0, 0x4d, 0xcd, 0x6d, 0xe2, 0xe0, 0x25, 0x1b, 0xf7, 0x04, 0xe0, 0x5b,
- 0xf7, 0xf0, 0x43, 0xc5, 0xdb, 0x07, 0xf6, 0x06, 0x07, 0x18, 0xe0, 0x40,
- 0xc4, 0x1f, 0x43, 0xe6, 0x24, 0xe0, 0x4c, 0x1e, 0xe9, 0x02, 0x8d, 0xf4,
- 0x02, 0x86, 0xf3, 0x60, 0x50, 0x2d, 0xc3, 0x0d, 0x65, 0xf3, 0xdb, 0x9c,
- 0xee, 0x04, 0xe0, 0x23, 0xeb, 0xee, 0xc1, 0x85, 0xe1, 0x07, 0x04, 0x60,
- 0x4c, 0x1a, 0xc3, 0xfa, 0xee, 0xe0, 0x4c, 0x44, 0xec, 0xe0, 0x45, 0x81,
- 0xf5, 0x12, 0x05, 0x05, 0x0b, 0x24, 0x40, 0x4a, 0x08, 0x2f, 0x3a, 0x09,
- 0x0e, 0x0d, 0x4b, 0x9b, 0xe0, 0x43, 0xa0, 0x7a, 0x75, 0xed, 0xdb, 0xc9,
- 0x77, 0x61, 0xee, 0xc8, 0xb7, 0xf4, 0x04, 0xe0, 0x21, 0x0e, 0x63, 0x68,
- 0xe1, 0xe0, 0x2c, 0xfd, 0xf3, 0x06, 0x08, 0x0b, 0xe0, 0x49, 0x9c, 0x74,
- 0x61, 0x6e, 0x61, 0xe9, 0xe0, 0x57, 0xe7, 0x68, 0xe9, 0x04, 0xe0, 0x4f,
- 0xe2, 0xed, 0x55, 0x86, 0xc5, 0x97, 0x61, 0x74, 0x73, 0x75, 0xae, 0x60,
- 0x52, 0xaa, 0xc3, 0x7a, 0xf2, 0x06, 0x03, 0x23, 0x06, 0x04, 0x84, 0x75,
- 0xed, 0xb6, 0xef, 0x07, 0x03, 0x07, 0x09, 0x03, 0xdb, 0xcf, 0xf4, 0xc7,
- 0x9c, 0x6d, 0x61, 0x74, 0x73, 0xf5, 0xd6, 0x76, 0x69, 0xf3, 0x04, 0xe0,
- 0x4a, 0x46, 0xe8, 0xda, 0xf3, 0xe7, 0xd2, 0x93, 0x62, 0xe5, 0xe0, 0x24,
- 0x47, 0x69, 0x79, 0xe1, 0xe0, 0x4e, 0xcd, 0xe7, 0xe0, 0x4c, 0xef, 0xe5,
- 0xe0, 0x4f, 0xe3, 0xe1, 0x02, 0x85, 0x74, 0xe5, 0xe0, 0x44, 0x1d, 0x73,
- 0x68, 0x69, 0xeb, 0xe0, 0x4f, 0xe0, 0x6f, 0x6b, 0x67, 0x72, 0xef, 0xe0,
- 0x22, 0xf4, 0xee, 0x04, 0x03, 0x07, 0x99, 0xef, 0xd4, 0x5a, 0x6e, 0x65,
- 0x70, 0xf0, 0xe0, 0x56, 0x5d, 0xe9, 0x04, 0x08, 0x05, 0x84, 0xf4, 0x04,
- 0xe0, 0x57, 0xba, 0xef, 0xc5, 0xad, 0x73, 0x61, 0xeb, 0xd8, 0x54, 0xed,
- 0xe0, 0x4b, 0x3a, 0xe7, 0xdc, 0xc3, 0x64, 0x65, 0x6e, 0xae, 0xe0, 0x2b,
- 0x2f, 0xed, 0x03, 0x04, 0x8e, 0xe9, 0xe0, 0x24, 0x03, 0xe5, 0x02, 0x85,
- 0x6e, 0xe1, 0xe0, 0x47, 0x90, 0x6a, 0x69, 0xed, 0xe0, 0x21, 0x45, 0xe1,
- 0x06, 0x05, 0x07, 0x0a, 0xda, 0x37, 0x74, 0x6f, 0xf2, 0xd8, 0x76, 0x6e,
- 0x6f, 0xae, 0x60, 0x4f, 0x76, 0xb5, 0x6d, 0x6f, 0x74, 0x6f, 0xae, 0x60,
- 0x53, 0x6f, 0xc5, 0xa7, 0x6b, 0x6f, 0x67, 0xe5, 0xe0, 0x55, 0xe8, 0x6c,
- 0x65, 0x75, 0x76, 0x65, 0xee, 0xe0, 0x42, 0xcf, 0xea, 0x04, 0xe0, 0x24,
- 0x5b, 0xf5, 0x04, 0xe0, 0x48, 0xc5, 0x6b, 0xf5, 0xc5, 0xd5, 0xe4, 0x02,
- 0x83, 0xef, 0xc2, 0xd6, 0x61, 0x6d, 0x61, 0x74, 0xf3, 0xd6, 0x98, 0x63,
- 0x68, 0x69, 0x6e, 0x6f, 0xf4, 0xe0, 0x22, 0xe7, 0x74, 0x69, 0x73, 0x74,
- 0x6f, 0xf2, 0xe0, 0x3c, 0xf0, 0x73, 0xae, 0xd1, 0xfb, 0xf2, 0x0c, 0x09,
- 0x05, 0x1d, 0x0c, 0x0a, 0x29, 0x60, 0x57, 0xb8, 0xc2, 0x4c, 0x1f, 0xc3,
- 0x02, 0x82, 0xf8, 0x9e, 0xe5, 0xc0, 0x5c, 0x79, 0xed, 0xe0, 0x3f, 0x5b,
- 0xef, 0x03, 0x06, 0x8b, 0x70, 0x79, 0x76, 0xee, 0xc3, 0xee, 0x6b, 0x73,
- 0x74, 0x61, 0x64, 0x65, 0x6c, 0xf6, 0xe0, 0x54, 0x26, 0x64, 0x73, 0x68,
- 0x65, 0xf2, 0xe0, 0x27, 0x6f, 0x69, 0x73, 0x74, 0x69, 0x61, 0x6e, 0xf3,
- 0x60, 0x4d, 0x86, 0xc6, 0x1d, 0xe5, 0x04, 0xe0, 0x57, 0xe6, 0x6c, 0xec,
- 0xe0, 0x35, 0x1d, 0xe1, 0x04, 0x0f, 0x06, 0x88, 0x73, 0xee, 0x02, 0x87,
- 0x6f, 0x64, 0x61, 0xf2, 0xe0, 0x58, 0x36, 0xe9, 0xe0, 0x21, 0x60, 0x6b,
- 0x6f, 0xf7, 0xe0, 0x48, 0x74, 0x67, 0x65, 0xf2, 0x60, 0x44, 0xe9, 0xcc,
- 0xdb, 0x61, 0x6e, 0x67, 0xe8, 0xe0, 0x28, 0xdc, 0xae, 0x60, 0x3e, 0xfc,
- 0x54, 0xa9, 0x44, 0x5c, 0xc1, 0xfb, 0xf0, 0x08, 0x41, 0xbf, 0x60, 0x56,
- 0xf8, 0xc1, 0x3a, 0xed, 0xe0, 0x59, 0xef, 0xef, 0x13, 0x11, 0x04, 0x1a,
- 0x18, 0x25, 0x0d, 0x06, 0x0f, 0x3a, 0x40, 0x4c, 0x09, 0x13, 0x15, 0x05,
- 0x05, 0x05, 0x89, 0xfa, 0x02, 0x84, 0xef, 0xe0, 0x59, 0xcc, 0xe1, 0x05,
- 0x60, 0x4f, 0x20, 0x84, 0xeb, 0xe0, 0x3d, 0xc6, 0xf9, 0xe0, 0x4f, 0x1e,
- 0xf5, 0x04, 0x05, 0x05, 0x86, 0x7a, 0xf5, 0xe0, 0x53, 0xae, 0x79, 0x61,
- 0xed, 0xc5, 0xe4, 0x6e, 0x6f, 0xf3, 0xe0, 0x3e, 0x7e, 0x68, 0x6f, 0xeb,
- 0xc5, 0x9b, 0xf4, 0x04, 0xe0, 0x3d, 0xd7, 0xef, 0x03, 0x03, 0x86, 0xf5,
- 0xc4, 0x7a, 0x68, 0x69, 0xf2, 0xe0, 0x4b, 0x5f, 0xae, 0x60, 0x54, 0x46,
- 0xc2, 0x0b, 0xf3, 0x04, 0x06, 0x11, 0x83, 0x75, 0x67, 0xe5, 0xe0, 0x31,
- 0x6a, 0xe8, 0x06, 0x40, 0xed, 0xe0, 0x44, 0xf3, 0xe9, 0x03, 0xd8, 0xf7,
- 0x6d, 0x69, 0xfa, 0xe0, 0x54, 0xc4, 0xe5, 0xd7, 0x2f, 0xe1, 0x46, 0x23,
- 0xe0, 0x48, 0xec, 0xf2, 0x02, 0x83, 0xf9, 0xd6, 0xe2, 0x69, 0x79, 0x61,
- 0xed, 0xe0, 0x4e, 0x21, 0x70, 0x65, 0xf2, 0xe0, 0x20, 0xf4, 0xef, 0x02,
- 0x84, 0xf2, 0xe0, 0x49, 0x94, 0x62, 0x69, 0x6e, 0x2e, 0xe5, 0xe0, 0x3a,
- 0x40, 0xee, 0x08, 0x08, 0x06, 0x11, 0x0b, 0xe0, 0x47, 0x7b, 0x79, 0x76,
- 0x65, 0x6c, 0xef, 0xe0, 0x58, 0x3b, 0x74, 0x75, 0xed, 0xe0, 0x50, 0x8b,
- 0xf3, 0x02, 0x86, 0x75, 0x6c, 0x61, 0xf4, 0xdc, 0x03, 0x6b, 0x6f, 0x77,
- 0x6f, 0xec, 0xe0, 0x4a, 0x42, 0x67, 0xf3, 0x04, 0xe0, 0x2c, 0xbf, 0x76,
- 0xe9, 0xe0, 0x43, 0x09, 0x61, 0x6e, 0xae, 0x60, 0x53, 0xc4, 0x89, 0xed,
- 0x05, 0x06, 0x0b, 0x11, 0x87, 0x76, 0x75, 0xf8, 0xe0, 0x47, 0xa1, 0xef,
- 0x02, 0x84, 0xf2, 0xe0, 0x4a, 0xa4, 0x6e, 0xef, 0xd0, 0x63, 0x6d, 0x75,
- 0xee, 0x04, 0xe0, 0x57, 0x5d, 0x61, 0x6c, 0x66, 0x6f, 0x72, 0x62, 0xf5,
- 0xe0, 0x42, 0xeb, 0x66, 0x6f, 0x72, 0xe2, 0xe0, 0x47, 0x7e, 0xe1, 0x06,
- 0x0f, 0x4a, 0xf4, 0xcb, 0xc1, 0x74, 0x73, 0xf5, 0x06, 0x60, 0x50, 0xa1,
- 0xc8, 0x31, 0x73, 0x68, 0x69, 0xed, 0xd2, 0x33, 0x67, 0x61, 0x6e, 0xe5,
- 0xe0, 0x55, 0xb4, 0x6c, 0x6f, 0x62, 0x72, 0x7a, 0xe5, 0xe0, 0x2c, 0x32,
- 0xeb, 0x03, 0x06, 0x85, 0x75, 0x62, 0x75, 0xee, 0xd9, 0xb8, 0x6f, 0x6e,
- 0xef, 0xc5, 0x3e, 0xe1, 0xe0, 0x53, 0x5a, 0xe7, 0x02, 0x84, 0xe5, 0xe0,
- 0x3c, 0xbf, 0xe1, 0x02, 0x85, 0x6e, 0xe5, 0xe0, 0x55, 0x55, 0xae, 0x60,
- 0x4d, 0x0b, 0xc3, 0xfd, 0x66, 0xf5, 0xe0, 0x30, 0x72, 0x65, 0xec, 0xe0,
- 0x57, 0x53, 0x64, 0x61, 0xe9, 0xd8, 0xb5, 0x63, 0x68, 0x69, 0xae, 0x60,
- 0x52, 0x80, 0xc4, 0x56, 0xe2, 0x03, 0x07, 0x83, 0x69, 0x65, 0x72, 0x7a,
- 0xf9, 0xdd, 0x09, 0xe5, 0xc0, 0xdb, 0x61, 0x79, 0x61, 0x73, 0xe8, 0xc3,
- 0x13, 0xee, 0x06, 0x09, 0x0b, 0xe0, 0x58, 0x4c, 0x78, 0x2d, 0x73, 0x65,
- 0x72, 0xf6, 0xe0, 0x3a, 0x22, 0x6f, 0x77, 0x73, 0x69, 0x74, 0x61, 0x6c,
- 0xec, 0xe0, 0x48, 0x1d, 0x69, 0x67, 0x68, 0x74, 0x70, 0x6f, 0x69, 0x6e,
- 0x74, 0x2e, 0x73, 0x79, 0x73, 0x74, 0x65, 0xed, 0xe0, 0x57, 0xcd, 0xed,
- 0x06, 0x60, 0x3d, 0x2a, 0xdb, 0x08, 0x70, 0x73, 0xf0, 0xdb, 0x05, 0xec,
- 0x04, 0x06, 0x06, 0x86, 0x1f, 0x43, 0xe6, 0xe0, 0x4f, 0xd1, 0x6f, 0x64,
- 0x7a, 0xeb, 0xdd, 0x93, 0x65, 0x70, 0xf0, 0xe0, 0x56, 0x84, 0xe1, 0xe0,
- 0x4f, 0xc1, 0xe9, 0x16, 0x05, 0x15, 0x0a, 0x40, 0x90, 0x26, 0x21, 0x1a,
- 0x11, 0x0d, 0x18, 0x04, 0x0a, 0x09, 0x07, 0x0a, 0x60, 0x54, 0xe1, 0xc1,
- 0xa7, 0x7a, 0xf5, 0xe0, 0x49, 0xc4, 0xf9, 0x03, 0xd8, 0x4a, 0xef, 0x04,
- 0xe0, 0x53, 0x26, 0xf3, 0x06, 0x55, 0xcf, 0xe0, 0x26, 0x50, 0x61, 0xf4,
- 0xe0, 0x4c, 0x48, 0xf7, 0x03, 0xc4, 0xf3, 0xe9, 0x5f, 0x04, 0xe0, 0x38,
- 0xd8, 0xf4, 0x02, 0x84, 0x63, 0xe8, 0xdf, 0x4f, 0xe1, 0x0b, 0x06, 0x04,
- 0x0a, 0x0b, 0x08, 0x17, 0x10, 0x14, 0x08, 0x8b, 0x79, 0x61, 0xed, 0xe0,
- 0x4d, 0x18, 0x75, 0xf2, 0xd1, 0xc4, 0x73, 0x68, 0x69, 0x6f, 0x62, 0x61,
- 0xf2, 0xe0, 0x4c, 0x71, 0x6e, 0x61, 0x6b, 0x61, 0x67, 0x75, 0x73, 0x75,
- 0xeb, 0xd8, 0x89, 0xed, 0x04, 0xe0, 0x55, 0xea, 0xef, 0xc4, 0x4c, 0xeb,
- 0x02, 0x88, 0x79, 0x75, 0x73, 0x68, 0x75, 0xae, 0xc2, 0x13, 0xe1, 0x03,
- 0xd4, 0x92, 0x74, 0x61, 0xae, 0x60, 0x49, 0x5c, 0xc8, 0xc4, 0xe8, 0x02,
- 0x89, 0x69, 0x72, 0x6f, 0x73, 0x68, 0xe9, 0xe0, 0x4b, 0x0a, 0xe1, 0xe0,
- 0x4c, 0xc6, 0x67, 0xe1, 0x02, 0x88, 0x77, 0x61, 0xae, 0x60, 0x49, 0x40,
- 0xc8, 0x2e, 0x74, 0x61, 0xae, 0x60, 0x4c, 0xc8, 0xc1, 0xc7, 0x64, 0x61,
- 0x69, 0x74, 0xef, 0xe0, 0x52, 0xc5, 0xe1, 0x02, 0x84, 0x6b, 0xe9, 0xd8,
- 0x54, 0xe9, 0xe0, 0x4e, 0x59, 0xae, 0x60, 0x49, 0x1a, 0x4a, 0xee, 0xc1,
- 0x72, 0xf3, 0x03, 0x14, 0x88, 0xef, 0x05, 0x06, 0xe0, 0x54, 0x23, 0x73,
- 0x61, 0x6b, 0xe9, 0xce, 0xa0, 0x66, 0x75, 0x6b, 0x75, 0x73, 0xe8, 0xcf,
- 0xc5, 0x68, 0x69, 0x77, 0x61, 0xe4, 0xe0, 0x3b, 0xe3, 0x61, 0x72, 0x61,
- 0xfa, 0xdf, 0x7b, 0xf2, 0x06, 0x05, 0x0a, 0xe0, 0x44, 0x2d, 0x79, 0xf5,
- 0xe0, 0x4e, 0x4c, 0x6f, 0x76, 0x6f, 0x67, 0x72, 0x61, 0xe4, 0xe0, 0x3c,
- 0x06, 0xe1, 0x04, 0xe0, 0x51, 0xbd, 0x72, 0x61, 0xae, 0xe0, 0x39, 0x50,
- 0xee, 0x07, 0x05, 0x05, 0x04, 0xe0, 0x52, 0x52, 0x6f, 0xeb, 0xe0, 0x4c,
- 0x4b, 0x6b, 0xef, 0xe0, 0x50, 0xa6, 0xe7, 0xe0, 0x4a, 0x96, 0xe4, 0xe0,
- 0x54, 0xf6, 0xed, 0x05, 0x04, 0xe0, 0x56, 0xdc, 0xef, 0xe0, 0x52, 0x26,
- 0xe9, 0x03, 0xdf, 0x2e, 0xee, 0xdb, 0xed, 0xec, 0x06, 0x60, 0x33, 0x79,
- 0xca, 0xa2, 0x61, 0x74, 0xe9, 0xe0, 0x28, 0x15, 0xeb, 0x03, 0x0a, 0x83,
- 0xf5, 0x03, 0xc4, 0x19, 0x63, 0x68, 0xe9, 0xe0, 0x4f, 0x6a, 0xef, 0xd1,
- 0xd9, 0x69, 0x72, 0x61, 0xf2, 0xe0, 0x47, 0x02, 0xea, 0xe0, 0x2c, 0x4c,
- 0x68, 0xef, 0x03, 0xce, 0x0e, 0x6b, 0xf5, 0xe0, 0x51, 0xd6, 0xe5, 0x04,
- 0xe0, 0x3b, 0x8c, 0xee, 0xe0, 0x47, 0x9b, 0x64, 0xf3, 0x60, 0x50, 0xf2,
- 0xc5, 0xa5, 0x63, 0x6b, 0x73, 0x2d, 0x61, 0x73, 0xf3, 0xe0, 0x28, 0xcc,
- 0x62, 0x69, 0x63, 0x68, 0xf5, 0xc4, 0x37, 0xe8, 0x09, 0x07, 0x16, 0x08,
- 0x60, 0x3b, 0x4a, 0xc9, 0xa5, 0x70, 0x6c, 0x61, 0xf9, 0xe0, 0x39, 0xe6,
- 0x6d, 0x65, 0x6c, 0xee, 0x02, 0x88, 0x79, 0x74, 0x73, 0x6b, 0xf9, 0xe0,
- 0x3b, 0x4d, 0x69, 0x74, 0x73, 0x6b, 0xe9, 0xe0, 0x3b, 0x54, 0x65, 0x72,
- 0x73, 0x6f, 0xee, 0xe0, 0x3b, 0x4d, 0xe1, 0x03, 0x06, 0x88, 0x72, 0xeb,
- 0x60, 0x3b, 0x37, 0x83, 0x6e, 0x68, 0x68, 0x6f, 0xe1, 0xe0, 0x4d, 0x97,
- 0x6b, 0x61, 0x73, 0xf3, 0xe0, 0x54, 0x50, 0xe7, 0x60, 0x3f, 0x47, 0xd6,
- 0xf1, 0xe6, 0xe0, 0x53, 0xa2, 0xe5, 0x0c, 0x0a, 0x05, 0x1f, 0x06, 0x07,
- 0x60, 0x33, 0x3e, 0xe0, 0x22, 0xa9, 0x79, 0x6d, 0x61, 0x63, 0x68, 0x69,
- 0xee, 0xe0, 0x2e, 0x7e, 0x74, 0xf2, 0xe0, 0x39, 0xa6, 0x72, 0x72, 0xf9,
- 0x03, 0x0b, 0x88, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0xe9, 0xe0,
- 0x4a, 0x0e, 0x6c, 0x6f, 0x67, 0x69, 0x73, 0xf4, 0xd9, 0x07, 0x68, 0x6f,
- 0xf4, 0xe0, 0x3f, 0x90, 0xf0, 0x5b, 0x67, 0xe0, 0x29, 0x5c, 0x6d, 0x62,
- 0x75, 0xe3, 0xe0, 0x4f, 0xc8, 0x69, 0xf3, 0xe0, 0x3e, 0xd0, 0x64, 0xe4,
- 0xe0, 0x53, 0xc7, 0xe1, 0x1a, 0x17, 0x04, 0x40, 0xa2, 0x0f, 0x40, 0x41,
- 0x40, 0x64, 0x40, 0x5f, 0x06, 0x40, 0x55, 0x40, 0xc6, 0x14, 0x26, 0x1f,
- 0x0e, 0x28, 0x10, 0xe0, 0x42, 0x8c, 0xfa, 0x04, 0x04, 0xdf, 0x28, 0x75,
- 0xee, 0xdf, 0x18, 0x69, 0x6d, 0x69, 0x65, 0x72, 0x7a, 0x2d, 0x64, 0x6f,
- 0x6c, 0xee, 0xe0, 0x43, 0xae, 0x79, 0xe1, 0xd0, 0xc3, 0x77, 0xe1, 0x0e,
- 0x03, 0x05, 0x06, 0x0d, 0x03, 0x1c, 0x10, 0x12, 0x04, 0x0f, 0x07, 0x10,
- 0x88, 0xfa, 0xd5, 0xfd, 0x75, 0xe5, 0xe0, 0x4c, 0xb9, 0x74, 0x61, 0xee,
- 0xe0, 0x3a, 0x32, 0x73, 0x61, 0x6b, 0x69, 0xae, 0x03, 0xde, 0x05, 0x6a,
- 0xf0, 0xe0, 0x44, 0x1c, 0xf2, 0xd6, 0x2f, 0xee, 0x03, 0x0c, 0x87, 0x69,
- 0x73, 0x68, 0x69, 0xae, 0x60, 0x4a, 0x47, 0x42, 0xcf, 0xc3, 0x82, 0x65,
- 0x68, 0x6f, 0xee, 0xe0, 0x4b, 0x03, 0x61, 0xe2, 0xe0, 0x4f, 0x14, 0xed,
- 0x02, 0x88, 0x69, 0x6e, 0x61, 0x6d, 0xe9, 0xe0, 0x47, 0x25, 0x61, 0xf4,
- 0xe0, 0x4a, 0x0e, 0xeb, 0x02, 0x84, 0x69, 0xf4, 0xc1, 0xad, 0x61, 0x6d,
- 0x69, 0x2e, 0x6e, 0xe1, 0x60, 0x4c, 0xe8, 0xc5, 0x47, 0x6a, 0xe9, 0xd4,
- 0xb1, 0xe9, 0x02, 0x86, 0x69, 0x73, 0xe8, 0xe0, 0x46, 0x28, 0xae, 0x5e,
- 0xe3, 0xe0, 0x2d, 0xf0, 0x68, 0x61, 0x72, 0xe1, 0xe0, 0x39, 0x3e, 0xe7,
- 0x02, 0x85, 0x75, 0x63, 0xe8, 0xc6, 0x26, 0x6f, 0x65, 0xae, 0x60, 0x49,
- 0xf7, 0xc0, 0xb6, 0x63, 0x68, 0x69, 0x6e, 0x61, 0xe7, 0xc5, 0xe2, 0xe2,
- 0xe0, 0x4c, 0x3b, 0xf5, 0x02, 0x89, 0x74, 0x6f, 0x6b, 0x65, 0x69, 0xee,
- 0xe0, 0x4c, 0xb0, 0xe6, 0xdc, 0x75, 0xf4, 0x03, 0x21, 0x8a, 0x73, 0xf5,
- 0x04, 0x07, 0x03, 0x87, 0x79, 0x61, 0x6d, 0xe1, 0xe0, 0x2a, 0x6c, 0xf5,
- 0xce, 0x45, 0x73, 0x68, 0x69, 0xeb, 0xe0, 0x4e, 0xd3, 0x72, 0x61, 0x67,
- 0x69, 0xae, 0x60, 0x4a, 0x2f, 0xc2, 0x4d, 0xef, 0x02, 0x83, 0xf7, 0xd9,
- 0x62, 0xf2, 0xe0, 0x38, 0xc5, 0xe1, 0x05, 0x07, 0xe0, 0x52, 0xe3, 0x73,
- 0x68, 0x69, 0xee, 0xe0, 0x4b, 0xf0, 0x67, 0x61, 0xed, 0xc1, 0x87, 0xf3,
- 0x07, 0x06, 0x1e, 0x1f, 0xe0, 0x30, 0x44, 0x7a, 0x75, 0xe2, 0xe0, 0x42,
- 0xaa, 0xf5, 0x04, 0x03, 0x08, 0x87, 0xf9, 0xd5, 0x55, 0x6d, 0x69, 0x67,
- 0x61, 0x75, 0xf2, 0xd1, 0x43, 0x6b, 0x61, 0x62, 0xe5, 0xe0, 0x49, 0x54,
- 0x67, 0xe1, 0x60, 0x48, 0xfc, 0xc6, 0x48, 0x68, 0xe9, 0x04, 0x09, 0x08,
- 0x85, 0x77, 0xe1, 0x45, 0x45, 0x58, 0xcc, 0xe0, 0x34, 0x92, 0x6d, 0x61,
- 0xae, 0x60, 0x49, 0xd8, 0xc3, 0x0e, 0x68, 0x61, 0xf2, 0xcc, 0xe2, 0xe2,
- 0xcc, 0xdf, 0xe1, 0x07, 0x05, 0x41, 0xc0, 0xe0, 0x4d, 0xc3, 0x6f, 0xeb,
- 0xe0, 0x4e, 0x9f, 0x6d, 0xe1, 0x04, 0xe0, 0x4c, 0xc5, 0x74, 0x73, 0xf5,
- 0xe0, 0x4b, 0x7b, 0xf2, 0x08, 0x0d, 0x06, 0x05, 0x06, 0x05, 0x08, 0x85,
- 0xf5, 0x02, 0x83, 0xed, 0xdd, 0xf7, 0x69, 0x7a, 0x61, 0xf7, 0xe0, 0x38,
- 0xd0, 0x74, 0x75, 0xfa, 0xe0, 0x42, 0x38, 0x70, 0xe1, 0xe0, 0x3d, 0x0a,
- 0xed, 0x60, 0x48, 0x7f, 0xc3, 0x0d, 0x6c, 0xf3, 0xe0, 0x48, 0x78, 0xe9,
- 0x03, 0xc5, 0xa1, 0xf9, 0xe0, 0x38, 0x52, 0x65, 0xec, 0xe0, 0x52, 0x2f,
- 0xe1, 0x04, 0x06, 0x10, 0x87, 0x74, 0x73, 0xf5, 0xe0, 0x49, 0x70, 0xf3,
- 0x02, 0x84, 0x75, 0x79, 0xe1, 0xac, 0x6a, 0xef, 0x04, 0xe0, 0x49, 0x70,
- 0xe8, 0xdb, 0x8b, 0x67, 0x61, 0x6e, 0xe4, 0xe0, 0x52, 0x0e, 0x63, 0xef,
- 0xc4, 0x47, 0x70, 0x73, 0xe9, 0xe0, 0x53, 0x95, 0xee, 0x0a, 0x05, 0x05,
- 0x0e, 0x07, 0x05, 0x06, 0x12, 0xc5, 0x5b, 0x7a, 0x61, 0xeb, 0xdc, 0xed,
- 0x75, 0xed, 0xe0, 0x48, 0x54, 0xef, 0x02, 0x85, 0x79, 0xe1, 0xe0, 0x4d,
- 0x87, 0x6e, 0x6a, 0xe9, 0xe0, 0x45, 0x91, 0x6e, 0xe1, 0x60, 0x47, 0x84,
- 0xc3, 0x77, 0x6d, 0x61, 0xeb, 0xd2, 0x99, 0xe9, 0x60, 0x47, 0xab, 0xc3,
- 0x38, 0xe5, 0x02, 0x8a, 0x79, 0x61, 0x6d, 0x61, 0xae, 0x60, 0x48, 0x86,
- 0xc5, 0xbe, 0x67, 0x61, 0xf3, 0xd3, 0xca, 0xe1, 0x06, 0x53, 0x8f, 0xe0,
- 0x3b, 0x51, 0x7a, 0x61, 0x77, 0xe1, 0xe0, 0x4b, 0x69, 0xed, 0x05, 0x0e,
- 0x40, 0x93, 0x8d, 0xef, 0x04, 0x03, 0xd3, 0xa5, 0xe5, 0xce, 0xab, 0xae,
- 0x60, 0x45, 0x54, 0xc9, 0xeb, 0xe9, 0x0c, 0x0f, 0x17, 0x04, 0x0f, 0x06,
- 0x20, 0x05, 0x0b, 0x06, 0x05, 0x86, 0xf4, 0x02, 0x86, 0x73, 0x75, 0xe5,
- 0xe0, 0x41, 0x93, 0x6f, 0x6e, 0xe4, 0xe0, 0x48, 0xc1, 0xf3, 0x03, 0x09,
- 0x86, 0xf5, 0x04, 0xe0, 0x4b, 0xcc, 0x6e, 0xe1, 0xdc, 0x84, 0x68, 0x69,
- 0xe8, 0xe0, 0x47, 0xb9, 0x61, 0xf4, 0xdc, 0xc1, 0x6f, 0xeb, 0xd4, 0x4e,
- 0x6e, 0xef, 0x02, 0x85, 0x79, 0x61, 0xed, 0xdc, 0x0f, 0x6b, 0x61, 0xf7,
- 0xe0, 0x47, 0xba, 0x6d, 0x69, 0xee, 0xe0, 0x48, 0x99, 0xeb, 0x03, 0x07,
- 0x87, 0x6f, 0x61, 0x6e, 0xe9, 0xe0, 0x2f, 0x2a, 0x69, 0x74, 0x61, 0x79,
- 0xe1, 0xcb, 0x71, 0x61, 0x77, 0x61, 0xae, 0x04, 0xe0, 0x48, 0xb4, 0xe8,
- 0x60, 0x4e, 0x45, 0xc3, 0x24, 0x6a, 0x69, 0xed, 0xcb, 0x80, 0xe9, 0x02,
- 0x85, 0x7a, 0x75, 0xed, 0xc4, 0x17, 0xe3, 0xdb, 0xcd, 0x67, 0x6f, 0xf2,
- 0xe0, 0x4e, 0x2a, 0x66, 0x75, 0xf2, 0xdb, 0x94, 0x61, 0x6d, 0xe1, 0xe0,
- 0x4b, 0xa2, 0xae, 0x5b, 0x79, 0xe0, 0x31, 0x7b, 0xe5, 0x02, 0x86, 0x79,
- 0x61, 0x6d, 0xe1, 0xca, 0x50, 0x6f, 0xeb, 0xdc, 0x01, 0xe1, 0x03, 0x04,
- 0x85, 0x6b, 0xf5, 0xc5, 0x5d, 0x69, 0x73, 0xe8, 0xdc, 0x8c, 0x67, 0x61,
- 0xf9, 0xd2, 0xf2, 0xec, 0x03, 0x05, 0x86, 0x75, 0xe7, 0xe0, 0x50, 0xe0,
- 0x6d, 0x79, 0xeb, 0xe0, 0x41, 0xe0, 0x69, 0xf3, 0xe0, 0x3b, 0x98, 0xeb,
- 0x05, 0x04, 0x04, 0x07, 0x86, 0x75, 0xe4, 0xdb, 0x37, 0x6f, 0xe7, 0xca,
- 0x12, 0x69, 0x6e, 0x6f, 0xeb, 0xe0, 0x4c, 0xf4, 0x65, 0x67, 0x61, 0xf7,
- 0xdc, 0x39, 0x61, 0x6d, 0x69, 0x67, 0x61, 0x68, 0x61, 0xf2, 0xe0, 0x24,
- 0xf0, 0xe9, 0x07, 0x05, 0x04, 0x05, 0xe0, 0x2a, 0x61, 0x7a, 0xf5, 0xe0,
- 0x37, 0x45, 0xf4, 0xe0, 0x2e, 0x7a, 0x73, 0xe5, 0xe0, 0x46, 0x15, 0x6e,
- 0x61, 0x6e, 0xae, 0x60, 0x47, 0xd6, 0xc5, 0x33, 0x68, 0xef, 0x04, 0xe0,
- 0x3b, 0x5f, 0x6b, 0x75, 0xae, 0x60, 0x47, 0x46, 0xc2, 0xf9, 0xe7, 0x02,
- 0x8c, 0x6f, 0x73, 0x68, 0x69, 0x6d, 0x61, 0xae, 0x60, 0x4c, 0x16, 0xc4,
- 0x9f, 0xe1, 0x06, 0x60, 0x4a, 0x23, 0xc3, 0x9f, 0x6d, 0xe9, 0x05, 0x05,
- 0xe0, 0x4c, 0x46, 0x6e, 0xef, 0xe0, 0x4c, 0x8b, 0x69, 0x73, 0xe8, 0xe0,
- 0x42, 0x83, 0xe4, 0x03, 0xc3, 0x26, 0xef, 0x02, 0x84, 0xed, 0xe0, 0x36,
- 0xf3, 0x67, 0x61, 0xf7, 0xcc, 0x3c, 0x61, 0xf3, 0xe0, 0x2e, 0xb9, 0x38,
- 0x73, 0xae, 0x05, 0x08, 0x5e, 0xa2, 0x87, 0x70, 0x6c, 0x2d, 0x77, 0x61,
- 0xf7, 0xde, 0xaa, 0x6e, 0x6c, 0x2d, 0x61, 0x6d, 0xf3, 0xde, 0xa2, 0x31,
- 0x32, 0xae, 0x15, 0x07, 0x0c, 0x04, 0x08, 0x04, 0x0a, 0x0d, 0x60, 0x30,
- 0x76, 0x47, 0x54, 0x04, 0x1c, 0x0a, 0x02, 0x16, 0x06, 0x0b, 0x8d, 0xf7,
- 0x60, 0x38, 0x32, 0x2e, 0xd0, 0xde, 0xf6, 0x05, 0x60, 0x38, 0x4e, 0x86,
- 0xe9, 0x60, 0x4c, 0x4a, 0xc5, 0xa5, 0xf5, 0xe0, 0x38, 0x47, 0xf4, 0x60,
- 0x37, 0xe2, 0x40, 0x41, 0xd8, 0x69, 0xf3, 0xe0, 0x38, 0x34, 0xee, 0x60,
- 0x37, 0xf4, 0x03, 0x03, 0x03, 0x12, 0x1e, 0x83, 0xe9, 0x06, 0x60, 0x38,
- 0x07, 0x03, 0xa3, 0xec, 0x60, 0x4c, 0x23, 0xc5, 0xa5, 0xe4, 0xe0, 0x38,
- 0x19, 0xea, 0x15, 0x09, 0x1c, 0x18, 0x24, 0x40, 0x7c, 0x04, 0x06, 0x1e,
- 0x12, 0x40, 0x9d, 0x0a, 0x28, 0x1f, 0x51, 0x3e, 0xe0, 0x2f, 0x7f, 0x1f,
- 0x43, 0xf8, 0x03, 0xc0, 0xa2, 0xf2, 0xc0, 0x9e, 0xf5, 0x07, 0x04, 0x06,
- 0x05, 0xe0, 0x39, 0x26, 0xf2, 0xe0, 0x50, 0x09, 0x6e, 0x69, 0xf0, 0xe0,
- 0x3d, 0xf1, 0x65, 0xe7, 0xe0, 0x30, 0x31, 0x2e, 0xed, 0xe0, 0x50, 0x8e,
- 0x73, 0xae, 0x06, 0x60, 0x4c, 0xd4, 0xc1, 0xd9, 0x77, 0x70, 0x65, 0x6e,
- 0x67, 0x69, 0x6e, 0x65, 0x70, 0x6f, 0x77, 0x65, 0xf2, 0xe0, 0x47, 0x66,
- 0xf0, 0x09, 0x04, 0x07, 0x60, 0x2f, 0xc4, 0xe0, 0x21, 0x93, 0xee, 0xe0,
- 0x29, 0x85, 0x6d, 0x6f, 0x72, 0xe7, 0xe0, 0x4d, 0x1b, 0xae, 0x08, 0x60,
- 0x3d, 0x9e, 0x47, 0x7a, 0xc5, 0xd8, 0xee, 0x60, 0x47, 0xdc, 0xc9, 0x4f,
- 0xef, 0x11, 0x05, 0x09, 0x0e, 0x0d, 0x04, 0x08, 0x06, 0x09, 0x06, 0x07,
- 0x07, 0x60, 0x46, 0x48, 0xca, 0x96, 0x7a, 0xe9, 0xe0, 0x4e, 0x0e, 0xf9,
- 0x04, 0xe0, 0x51, 0x2c, 0xef, 0xe0, 0x42, 0xf6, 0x75, 0x72, 0x6e, 0x61,
- 0xec, 0x04, 0xe0, 0x4e, 0x42, 0x69, 0xf3, 0xe0, 0x4c, 0x15, 0xf4, 0x04,
- 0xe0, 0x51, 0x15, 0x65, 0x6c, 0x75, 0x6c, 0xf5, 0xe0, 0x39, 0x30, 0xf3,
- 0xe0, 0x41, 0x46, 0xf2, 0x04, 0xe0, 0x4f, 0xa9, 0xf0, 0xcd, 0x68, 0x6c,
- 0x73, 0xf4, 0xe0, 0x45, 0x55, 0x69, 0x6e, 0x76, 0x69, 0x6c, 0xec, 0xe0,
- 0x38, 0x9a, 0x68, 0x61, 0x6e, 0xe1, 0xd9, 0xef, 0x67, 0x61, 0x73, 0xfa,
- 0xe0, 0x4f, 0xe6, 0x65, 0x74, 0x73, 0xf5, 0xe0, 0x4c, 0x97, 0xe2, 0x04,
- 0x09, 0xd1, 0x17, 0xf3, 0x04, 0xe0, 0x50, 0xd4, 0xae, 0xe0, 0x4f, 0x14,
- 0x6f, 0xea, 0xda, 0x82, 0xee, 0xe0, 0x4e, 0x8b, 0xed, 0x60, 0x3f, 0x64,
- 0xcf, 0xc6, 0xec, 0x06, 0x60, 0x3d, 0x4c, 0xd1, 0x20, 0x73, 0x2d, 0x73,
- 0x74, 0xef, 0x03, 0x02, 0x82, 0xb3, 0x84, 0xb2, 0x82, 0x31, 0x2e, 0x65,
- 0x6c, 0x61, 0x73, 0x74, 0xf8, 0xe0, 0x50, 0x83, 0xe9, 0x04, 0xe0, 0x4f,
- 0x14, 0x6e, 0x73, 0x65, 0x6b, 0x69, 0x6b, 0x6f, 0x67, 0x65, 0xee, 0xe0,
- 0x45, 0x40, 0xe5, 0x0e, 0x06, 0x07, 0x05, 0x05, 0x06, 0x40, 0x5e, 0x09,
- 0x51, 0xa5, 0xe0, 0x3e, 0x5a, 0x77, 0x65, 0xec, 0xe0, 0x2e, 0x7c, 0x76,
- 0x6e, 0x61, 0xeb, 0xe0, 0x44, 0xd0, 0x74, 0xfa, 0xe0, 0x4e, 0xb6, 0x73,
- 0xf3, 0xe0, 0x43, 0x8e, 0x6f, 0xee, 0x60, 0x34, 0x31, 0x85, 0xec, 0x03,
- 0x07, 0x97, 0x6c, 0x79, 0x62, 0x65, 0xe1, 0xd0, 0xe4, 0xe5, 0x02, 0x84,
- 0xee, 0xe0, 0x41, 0x6d, 0xae, 0x08, 0x60, 0x32, 0x96, 0x46, 0x84, 0xd6,
- 0x2a, 0x63, 0xec, 0x60, 0x38, 0x6c, 0xc7, 0x8e, 0x61, 0x73, 0x74, 0x69,
- 0x63, 0xae, 0x04, 0x0e, 0x0c, 0x8e, 0xf4, 0x04, 0xe0, 0x29, 0x2f, 0x73,
- 0x75, 0x6b, 0x61, 0x65, 0xf2, 0xe0, 0x26, 0x71, 0x73, 0x61, 0x76, 0x65,
- 0x69, 0x6e, 0x63, 0x6c, 0x6f, 0xf5, 0xdb, 0xd5, 0x72, 0x65, 0x67, 0x72,
- 0x75, 0x68, 0x6f, 0x73, 0x74, 0x69, 0xee, 0xe0, 0x36, 0x9b, 0x64, 0x6f,
- 0x67, 0x61, 0x64, 0x6f, 0xae, 0xe0, 0x4a, 0xf2, 0xe5, 0x04, 0xe0, 0x4e,
- 0x66, 0xfa, 0xe0, 0x4f, 0x07, 0x64, 0x2e, 0x77, 0x61, 0x66, 0x61, 0xe9,
- 0xe0, 0x4a, 0x9a, 0xe4, 0x04, 0xe0, 0x22, 0x05, 0x65, 0xf6, 0xe0, 0x4a,
- 0x90, 0xe3, 0x05, 0x1a, 0xe0, 0x45, 0x72, 0x6c, 0x6f, 0x75, 0xe4, 0x02,
- 0x87, 0xae, 0x02, 0x8d, 0xeb, 0xe0, 0x4c, 0xb8, 0x2d, 0x76, 0x65, 0x72,
- 0x2d, 0x6a, 0x70, 0x63, 0x2e, 0x69, 0xeb, 0xde, 0xba, 0x2e, 0x6e, 0x65,
- 0x65, 0xee, 0xe0, 0x4f, 0x7b, 0xe1, 0x0a, 0x05, 0x0a, 0x52, 0x0a, 0x60,
- 0x27, 0x13, 0xc5, 0x58, 0x77, 0x6f, 0xf2, 0xd5, 0x28, 0xed, 0x03, 0xdc,
- 0x8d, 0x62, 0x79, 0xec, 0xe0, 0x4d, 0xc2, 0x67, 0xf5, 0xe0, 0x3d, 0x96,
- 0xae, 0x05, 0x17, 0xe0, 0x4f, 0x85, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x66,
- 0x6f, 0x72, 0x63, 0x65, 0xae, 0x04, 0xe0, 0x4f, 0x6c, 0x63, 0x6f, 0x6d,
- 0x2e, 0xe3, 0xe0, 0x3e, 0x1a, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x68,
- 0x69, 0x66, 0xf4, 0xe0, 0x4c, 0x2b, 0xe9, 0x23, 0x40, 0x45, 0x05, 0x40,
- 0x4b, 0x23, 0x40, 0x82, 0x43, 0x2c, 0x11, 0x22, 0x19, 0x42, 0x66, 0x40,
- 0x4d, 0x2d, 0x3b, 0x27, 0x05, 0x12, 0x06, 0x0d, 0x40, 0x4d, 0x40, 0x54,
- 0x23, 0x0d, 0x06, 0xe0, 0x26, 0x19, 0xfa, 0x03, 0x3a, 0x84, 0xf5, 0x05,
- 0x08, 0xe0, 0x44, 0xe2, 0x6e, 0x6f, 0x6b, 0x75, 0xee, 0xe0, 0x44, 0xe4,
- 0xed, 0x02, 0x8c, 0xef, 0x04, 0xe0, 0x49, 0x86, 0x7a, 0x61, 0x6b, 0xe9,
- 0xe0, 0x4a, 0xee, 0xe9, 0x04, 0x06, 0x05, 0x87, 0x7a, 0x61, 0xeb, 0xe0,
- 0x3f, 0x6b, 0x73, 0xe1, 0xe0, 0x4d, 0x51, 0x6f, 0x74, 0x73, 0xf5, 0xe0,
- 0x4d, 0x4c, 0xae, 0x60, 0x48, 0xd3, 0xc4, 0x76, 0x65, 0xee, 0xd5, 0x7f,
- 0xae, 0xd9, 0x38, 0x79, 0xef, 0xe0, 0x4a, 0x40, 0xf7, 0x02, 0x83, 0xe9,
- 0xd6, 0x30, 0xe1, 0x08, 0x13, 0x08, 0x09, 0x0c, 0x07, 0xcb, 0xc7, 0xf4,
- 0x04, 0x07, 0xd8, 0x86, 0x73, 0x75, 0x6b, 0xe9, 0xe0, 0x43, 0xb5, 0x65,
- 0xae, 0x58, 0xa5, 0xe0, 0x34, 0x9f, 0xee, 0x04, 0xe0, 0x3c, 0x6b, 0xf5,
- 0xcc, 0xc3, 0xed, 0x03, 0xcb, 0x88, 0x69, 0xfa, 0xe0, 0x43, 0xa5, 0xeb,
- 0x04, 0xe0, 0x3f, 0x12, 0xf5, 0x03, 0xcc, 0x61, 0xee, 0xcc, 0x1f, 0x66,
- 0x75, 0x6e, 0xe5, 0xe0, 0x43, 0x44, 0x64, 0xe5, 0xe0, 0x44, 0x1c, 0xf6,
- 0x05, 0x05, 0x04, 0xcb, 0x17, 0x6f, 0x72, 0xf9, 0xd5, 0xd1, 0xe7, 0xe0,
- 0x48, 0x44, 0x61, 0x6e, 0xef, 0x02, 0x85, 0x76, 0xef, 0xe0, 0x4c, 0xc1,
- 0x2d, 0x66, 0x72, 0x61, 0x6e, 0x6b, 0xe9, 0xe0, 0x27, 0x26, 0xf4, 0x0c,
- 0x05, 0x11, 0x05, 0x0d, 0x29, 0x1b, 0x60, 0x4a, 0x69, 0xc3, 0xbc, 0x73,
- 0xae, 0xe0, 0x32, 0x6e, 0xef, 0x05, 0x03, 0xe0, 0x44, 0x21, 0xed, 0xd4,
- 0xf3, 0x69, 0x67, 0x61, 0x77, 0xe1, 0xe0, 0x4a, 0x34, 0x69, 0xe7, 0xe0,
- 0x35, 0xc6, 0x63, 0x6f, 0x75, 0x6c, 0x64, 0x62, 0x65, 0x77, 0x6f, 0xf2,
- 0xe0, 0x4e, 0x05, 0xe1, 0x08, 0x07, 0x05, 0x04, 0x0a, 0xe0, 0x4d, 0x46,
- 0x79, 0x61, 0x6e, 0x61, 0xe7, 0xce, 0x01, 0x6e, 0xef, 0xe0, 0x48, 0xe2,
- 0xed, 0xe0, 0x49, 0x79, 0xeb, 0x04, 0xe0, 0x3e, 0x85, 0x75, 0xf2, 0xe0,
- 0x45, 0x7c, 0x62, 0x61, 0xf3, 0xe0, 0x4a, 0xfa, 0x31, 0xae, 0x02, 0x8a,
- 0x65, 0x75, 0x72, 0x2e, 0x61, 0x72, 0x75, 0x62, 0x61, 0x2e, 0x6a, 0x65,
- 0x6e, 0x76, 0x2d, 0x61, 0x72, 0x75, 0x62, 0xe1, 0xe0, 0x36, 0x48, 0xae,
- 0x60, 0x23, 0x69, 0x60, 0x24, 0x5d, 0xc6, 0x57, 0xf3, 0x0d, 0x05, 0x1d,
- 0x18, 0x07, 0x04, 0x23, 0x2a, 0x1f, 0x08, 0xe0, 0x4d, 0x55, 0x75, 0xed,
- 0xe0, 0x32, 0x07, 0xf4, 0x06, 0x05, 0x0a, 0xe0, 0x4d, 0xf3, 0x6d, 0xe5,
- 0xe0, 0x25, 0x0f, 0x65, 0x69, 0x6e, 0x67, 0x65, 0x65, 0xeb, 0xe0, 0x2a,
- 0xc1, 0x61, 0x6e, 0x62, 0xf5, 0xe0, 0x4b, 0xa0, 0xf3, 0x02, 0x8f, 0x6d,
- 0x61, 0x72, 0x74, 0x65, 0x72, 0x74, 0x68, 0x61, 0x6e, 0x79, 0xef, 0xe0,
- 0x4c, 0xab, 0x68, 0x69, 0xeb, 0xe0, 0x48, 0x8d, 0x6d, 0x61, 0x69, 0xec,
- 0xe0, 0x4b, 0xb7, 0x6c, 0xe1, 0xde, 0xfa, 0x68, 0xe9, 0x03, 0x08, 0x90,
- 0x6e, 0x6f, 0x6d, 0x61, 0x6b, 0xe9, 0xd6, 0x41, 0x6b, 0xe1, 0x04, 0xe0,
- 0x4b, 0xff, 0x77, 0x61, 0xae, 0x60, 0x48, 0x48, 0x40, 0xd4, 0xc2, 0xec,
- 0x67, 0x61, 0xeb, 0xe0, 0x49, 0x10, 0xe5, 0x06, 0x07, 0x12, 0x04, 0xc4,
- 0xe9, 0x73, 0x61, 0x6b, 0xe9, 0xe0, 0x44, 0xcf, 0xf2, 0x04, 0xe0, 0x35,
- 0x4b, 0xf6, 0x04, 0xe0, 0x3f, 0xf2, 0x73, 0x63, 0x68, 0x75, 0xec, 0xe0,
- 0x25, 0xec, 0xee, 0xe0, 0x47, 0x3a, 0x68, 0x61, 0xf2, 0xe0, 0x48, 0xbb,
- 0xe1, 0x03, 0x06, 0x86, 0x68, 0x61, 0xf9, 0xe0, 0x32, 0x1b, 0xae, 0x60,
- 0x47, 0x27, 0xc1, 0x46, 0xad, 0x02, 0x89, 0x68, 0x6f, 0x63, 0x6b, 0x65,
- 0x79, 0xee, 0xd7, 0xaf, 0xe7, 0xc1, 0xcb, 0xae, 0x50, 0x33, 0x60, 0x36,
- 0xcb, 0xc4, 0x5c, 0xad, 0x0c, 0x0e, 0x25, 0x06, 0x0e, 0x04, 0x0a, 0x09,
- 0x21, 0x06, 0x06, 0x84, 0x77, 0x69, 0x74, 0x68, 0x2d, 0x74, 0x68, 0x65,
- 0x62, 0x61, 0xee, 0xe0, 0x47, 0xe3, 0x76, 0x65, 0x72, 0x79, 0xad, 0x05,
- 0x05, 0x06, 0x05, 0x87, 0x73, 0x77, 0xe5, 0xdf, 0x62, 0x6e, 0x69, 0xe3,
- 0xe0, 0x37, 0xec, 0x67, 0x6f, 0xef, 0xdb, 0xce, 0x65, 0x76, 0x69, 0xec,
- 0xe0, 0x4a, 0x4c, 0x62, 0xe1, 0xdb, 0xc3, 0x75, 0x62, 0x65, 0x72, 0xec,
- 0xa1, 0xf3, 0x02, 0x86, 0x6c, 0x69, 0xe3, 0xe0, 0x49, 0x15, 0x61, 0x76,
- 0xe5, 0xdb, 0xaf, 0x6e, 0x6f, 0x74, 0x2d, 0x63, 0x65, 0x72, 0x74, 0x69,
- 0x66, 0xe9, 0xe0, 0x42, 0xed, 0xec, 0x03, 0xd4, 0xa5, 0x65, 0xe5, 0xe0,
- 0x42, 0xdd, 0x69, 0x6e, 0x74, 0x6f, 0xad, 0x03, 0x06, 0x8d, 0x67, 0x61,
- 0xed, 0xe0, 0x4b, 0xc2, 0x63, 0x61, 0xf2, 0x04, 0xe0, 0x4b, 0xb9, 0x74,
- 0x6f, 0xef, 0xe0, 0x24, 0x79, 0x61, 0x6e, 0xe9, 0xe0, 0x23, 0x7d, 0x67,
- 0x6f, 0xee, 0xe0, 0x45, 0x1b, 0x66, 0x6f, 0x75, 0xee, 0xdb, 0x6b, 0x62,
- 0xf9, 0xd1, 0x99, 0xe1, 0x02, 0xb5, 0x6e, 0xad, 0x02, 0x91, 0x65, 0xee,
- 0x02, 0x86, 0x74, 0x65, 0x72, 0xf4, 0xc0, 0x99, 0x67, 0x69, 0x6e, 0xe5,
- 0xe0, 0x42, 0xcd, 0xe1, 0x04, 0x04, 0xc1, 0x9e, 0x72, 0xf4, 0xc1, 0xa5,
- 0xe3, 0x02, 0x8b, 0xf4, 0x04, 0xe0, 0x3e, 0x8d, 0x72, 0x65, 0xf3, 0xe0,
- 0x4b, 0x71, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0xe1, 0xe0, 0x42, 0x73, 0xad,
- 0x10, 0x16, 0x16, 0x15, 0x2c, 0x10, 0x06, 0x30, 0x08, 0x12, 0x15, 0x11,
- 0x1a, 0x40, 0x40, 0xa8, 0xf4, 0x02, 0x87, 0x68, 0x65, 0x72, 0x61, 0xf0,
- 0xc1, 0x73, 0xe5, 0x02, 0x86, 0x63, 0x68, 0xe9, 0xe0, 0x44, 0xb5, 0x61,
- 0xe3, 0xbd, 0xf3, 0x02, 0x86, 0x74, 0x75, 0xe4, 0xe0, 0x42, 0x42, 0xef,
- 0x02, 0x84, 0xf8, 0xe0, 0x2c, 0x76, 0x63, 0x69, 0x61, 0xec, 0xc1, 0x51,
- 0xf2, 0x02, 0x89, 0x6f, 0x63, 0x6b, 0x73, 0x74, 0xe1, 0xe0, 0x4b, 0x55,
- 0x65, 0x70, 0x75, 0x62, 0x6c, 0x69, 0xe3, 0xc1, 0x19, 0xf0, 0x04, 0x04,
- 0x0c, 0x8d, 0x6c, 0xe1, 0xc0, 0x60, 0x68, 0x6f, 0x74, 0x6f, 0x67, 0x72,
- 0x61, 0x70, 0xe8, 0xe0, 0x42, 0x46, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61,
- 0x6c, 0x74, 0x72, 0x61, 0xe9, 0xc0, 0xa0, 0xe1, 0x02, 0x83, 0xf4, 0xc0,
- 0xf9, 0xe9, 0xe0, 0x3b, 0x63, 0xee, 0x02, 0x86, 0x75, 0x72, 0xf3, 0xe0,
- 0x44, 0x52, 0x61, 0x73, 0x63, 0x61, 0xf2, 0xc0, 0xdc, 0x6d, 0x75, 0x73,
- 0x69, 0xe3, 0x9b, 0xec, 0x04, 0x1c, 0xc5, 0x60, 0xe9, 0x02, 0x8a, 0x6e,
- 0x75, 0x78, 0x2d, 0x75, 0x73, 0xe5, 0xe0, 0x33, 0xa5, 0x62, 0x65, 0xf2,
- 0x02, 0x86, 0x74, 0x61, 0x72, 0xe9, 0xc0, 0xba, 0xe1, 0xe0, 0x44, 0xf8,
- 0xe1, 0x02, 0x85, 0x77, 0xf9, 0xe0, 0x41, 0xf0, 0x6e, 0x64, 0x73, 0x63,
- 0xe1, 0xc0, 0xb9, 0x6b, 0x6e, 0x69, 0x67, 0xe8, 0xe0, 0x41, 0xf9, 0xe8,
- 0x02, 0x84, 0xf5, 0xe0, 0x3b, 0x0e, 0x61, 0x72, 0x64, 0x2d, 0x77, 0x6f,
- 0x72, 0xeb, 0xe0, 0x41, 0xcf, 0xe7, 0x03, 0x05, 0x86, 0x75, 0xf2, 0xe0,
- 0x4a, 0x6b, 0x72, 0x65, 0xe5, 0xe0, 0x23, 0xab, 0x65, 0x65, 0xeb, 0xe0,
- 0x37, 0xd3, 0x66, 0x69, 0x6e, 0x61, 0x6e, 0x63, 0x69, 0x61, 0x6c, 0x61,
- 0x64, 0x76, 0x69, 0xf3, 0xe0, 0x3d, 0x7d, 0xe4, 0x02, 0x85, 0x6f, 0xe3,
- 0xe0, 0x3d, 0x74, 0xe5, 0x02, 0x87, 0x73, 0x69, 0x67, 0xee, 0xe0, 0x41,
- 0x97, 0x6d, 0x6f, 0x63, 0x72, 0xe1, 0xe0, 0x41, 0x56, 0xe3, 0x06, 0x0d,
- 0x03, 0x0b, 0x06, 0x86, 0x75, 0x62, 0x69, 0x63, 0x6c, 0x65, 0x2d, 0x73,
- 0x6c, 0xe1, 0xe0, 0x26, 0x86, 0xf0, 0xd6, 0x04, 0x6f, 0x6e, 0x73, 0x65,
- 0x72, 0x76, 0x61, 0xf4, 0xe0, 0x26, 0x77, 0x68, 0x65, 0xe6, 0xe0, 0x37,
- 0x80, 0x65, 0x6c, 0x74, 0x69, 0xe3, 0xa6, 0xe1, 0x02, 0x86, 0x74, 0x65,
- 0xf2, 0xe0, 0x41, 0x58, 0x6e, 0x64, 0x69, 0x64, 0x61, 0xf4, 0xe0, 0x35,
- 0xea, 0xe2, 0x04, 0x0a, 0x08, 0x8a, 0x75, 0x6c, 0x6c, 0x73, 0x2d, 0x66,
- 0xe1, 0xe0, 0x23, 0x2b, 0x72, 0x75, 0x69, 0x6e, 0xf3, 0xe0, 0x2b, 0x38,
- 0x6f, 0x6f, 0x6b, 0x6b, 0x65, 0x65, 0xf0, 0xe0, 0x41, 0x2e, 0x6c, 0x6f,
- 0x67, 0xe7, 0xe0, 0x41, 0x27, 0x61, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69,
- 0xf3, 0xe0, 0x40, 0xe3, 0xf2, 0x05, 0x03, 0xe0, 0x4a, 0xe7, 0xf5, 0xca,
- 0x61, 0x69, 0xf3, 0x60, 0x20, 0xd5, 0xe0, 0x27, 0x80, 0xf0, 0x03, 0x10,
- 0x84, 0xe9, 0x02, 0x87, 0x72, 0x61, 0x6e, 0xe7, 0xe0, 0x49, 0x2d, 0x66,
- 0x6f, 0xee, 0xe0, 0x49, 0x67, 0xb6, 0xe0, 0x20, 0xba, 0x2e, 0x6c, 0x69,
- 0x6e, 0x6f, 0x64, 0xe5, 0xe0, 0x40, 0xa6, 0xef, 0x06, 0x07, 0x03, 0xe0,
- 0x4a, 0xac, 0x70, 0x73, 0x79, 0xf3, 0xe0, 0x4a, 0x4b, 0xe2, 0xd9, 0xab,
- 0xae, 0x60, 0x36, 0xfb, 0x51, 0x15, 0xc1, 0x60, 0xee, 0x19, 0x05, 0x06,
- 0x07, 0x40, 0x5c, 0x3a, 0x0f, 0x40, 0x85, 0x40, 0x6c, 0x0f, 0x40, 0x46,
- 0x1b, 0x46, 0x0b, 0x60, 0x34, 0x31, 0x4b, 0xd0, 0xc2, 0x66, 0x7a, 0xe1,
- 0xe0, 0x2e, 0x83, 0x76, 0x65, 0xf3, 0xe0, 0x40, 0xfb, 0x75, 0x79, 0x61,
- 0xed, 0xe0, 0x2e, 0xad, 0xf4, 0x07, 0x04, 0x03, 0x15, 0xe0, 0x4a, 0x54,
- 0xf5, 0xe0, 0x48, 0x6d, 0xec, 0xdc, 0x5a, 0x65, 0x72, 0xee, 0x02, 0x88,
- 0x65, 0xf4, 0x60, 0x25, 0xb0, 0xe0, 0x23, 0x76, 0x61, 0x74, 0x69, 0x6f,
- 0xee, 0xe0, 0x24, 0xad, 0xae, 0x13, 0x06, 0x04, 0x06, 0x06, 0x08, 0x40,
- 0x73, 0x60, 0x27, 0xf7, 0x45, 0x41, 0x56, 0x19, 0x43, 0xa7, 0xc2, 0x2e,
- 0xf4, 0x60, 0x47, 0xff, 0xc0, 0x82, 0xf0, 0xe0, 0x48, 0x7b, 0xec, 0x60,
- 0x47, 0xcf, 0xc0, 0xbf, 0xe9, 0x60, 0x47, 0xc6, 0xc1, 0x2f, 0xe3, 0x60,
- 0x46, 0x6d, 0x41, 0xa3, 0xc0, 0x8e, 0xe1, 0x60, 0x47, 0xae, 0xc1, 0x1a,
- 0xf3, 0x02, 0x8b, 0x75, 0xf2, 0x04, 0xe0, 0x48, 0x97, 0x61, 0x6e, 0xe3,
- 0xda, 0x44, 0xf4, 0x02, 0x86, 0x69, 0x74, 0xf5, 0xe0, 0x43, 0x51, 0x61,
- 0xee, 0x02, 0x89, 0x74, 0x63, 0x6c, 0x6f, 0x75, 0xe4, 0xe0, 0x2b, 0x70,
- 0x63, 0xe5, 0x02, 0x8a, 0x73, 0x2e, 0x73, 0x70, 0x61, 0x77, 0xee, 0xe0,
- 0x27, 0x39, 0x2e, 0x64, 0x61, 0x74, 0xe1, 0xe0, 0x24, 0x6e, 0xe7, 0x06,
- 0x60, 0x47, 0xe4, 0xc1, 0xf7, 0x61, 0x74, 0x6c, 0x61, 0xee, 0xe0, 0x48,
- 0xd4, 0xe6, 0x04, 0x40, 0x6a, 0x86, 0xef, 0x04, 0xe0, 0x49, 0xc9, 0xae,
- 0x19, 0x06, 0x09, 0x04, 0x0a, 0x06, 0x06, 0x06, 0x06, 0x06, 0x08, 0x4b,
- 0x75, 0x60, 0x2a, 0xc1, 0x11, 0x4f, 0x68, 0x41, 0x7c, 0x40, 0xb5, 0xc0,
- 0x51, 0xf6, 0x60, 0x48, 0x32, 0xc0, 0x42, 0xf4, 0x60, 0x47, 0x35, 0x40,
- 0xb5, 0x40, 0x65, 0x9f, 0xf3, 0xe0, 0x47, 0x53, 0xee, 0x60, 0x3e, 0xb2,
- 0x48, 0xd0, 0x40, 0x72, 0xc0, 0x4e, 0xec, 0x60, 0x47, 0x28, 0xc0, 0xc2,
- 0xeb, 0x60, 0x47, 0x72, 0xc0, 0x9d, 0xe8, 0x60, 0x47, 0xc7, 0xc0, 0xbe,
- 0xe5, 0x60, 0x3d, 0x9c, 0xca, 0x25, 0xe3, 0x60, 0x3d, 0x32, 0xca, 0xbc,
- 0xe2, 0x60, 0x3f, 0x1a, 0x48, 0x19, 0xc0, 0xb5, 0xe1, 0x60, 0x46, 0xf8,
- 0x41, 0x73, 0xc0, 0xdf, 0x69, 0x6e, 0xe9, 0xe0, 0x37, 0x0b, 0xae, 0x07,
- 0x04, 0x60, 0x36, 0x23, 0xd1, 0xd5, 0xed, 0xe0, 0x46, 0xef, 0xe3, 0xe0,
- 0x48, 0x51, 0xe4, 0x05, 0x0a, 0x11, 0xc0, 0x40, 0x75, 0x73, 0x74, 0x72,
- 0xe9, 0x60, 0x3d, 0x4c, 0xc9, 0x3e, 0xe9, 0x02, 0x86, 0x67, 0x65, 0xee,
- 0xe0, 0x46, 0x7f, 0x65, 0x2e, 0x70, 0x6f, 0xf2, 0xe0, 0x34, 0xea, 0xe5,
- 0x04, 0xe0, 0x3b, 0x60, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0xad,
- 0x04, 0x09, 0x08, 0x92, 0x72, 0x65, 0x76, 0x69, 0x65, 0xf7, 0xe0, 0x45,
- 0xc7, 0x70, 0x61, 0x6e, 0x65, 0xec, 0xe0, 0x45, 0xbf, 0x69, 0x6e, 0x71,
- 0xf5, 0x02, 0x86, 0x69, 0x72, 0xf9, 0xe0, 0x45, 0xb3, 0x65, 0x73, 0xf4,
- 0xe0, 0x45, 0xad, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0xef,
- 0xe0, 0x27, 0x82, 0xae, 0x4e, 0x2b, 0x4c, 0xb1, 0x41, 0x5a, 0x60, 0x2b,
- 0x5c, 0x9f, 0xe3, 0x05, 0x04, 0xe0, 0x48, 0xd8, 0xe8, 0xe0, 0x24, 0xf5,
- 0x2e, 0xe8, 0xe0, 0x48, 0x9e, 0xe1, 0x08, 0x06, 0x09, 0x08, 0x07, 0x08,
- 0x09, 0x86, 0x7a, 0x61, 0xf7, 0xe0, 0x2c, 0xf9, 0x77, 0x61, 0x73, 0x68,
- 0x69, 0xf2, 0xe0, 0x43, 0x47, 0x74, 0x73, 0x75, 0x6b, 0xe9, 0xe0, 0x31,
- 0xa3, 0x73, 0x68, 0x69, 0xeb, 0xe0, 0x2d, 0x3d, 0x6d, 0x69, 0xae, 0x60,
- 0x3d, 0x86, 0xc0, 0x7c, 0xe7, 0x04, 0xe0, 0x45, 0x57, 0x61, 0xf7, 0xc8,
- 0x5f, 0x62, 0x65, 0xae, 0xe0, 0x3d, 0x79, 0xae, 0x60, 0x3e, 0x2b, 0x42,
- 0xd8, 0xc4, 0x7e, 0xae, 0x0a, 0x06, 0x58, 0xc2, 0x45, 0x9e, 0x48, 0x89,
- 0xdb, 0x35, 0xf5, 0x60, 0x46, 0x18, 0xc0, 0xc2, 0xee, 0x60, 0x3f, 0x0a,
- 0x47, 0x58, 0x40, 0x72, 0xc1, 0x85, 0xad, 0x05, 0x04, 0x09, 0x0b, 0x90,
- 0x76, 0x70, 0xee, 0x8d, 0x74, 0x68, 0x65, 0x2d, 0x62, 0x61, 0xee, 0xd4,
- 0x14, 0x64, 0x73, 0x6c, 0xae, 0x60, 0x45, 0x8c, 0x42, 0x2f, 0xc0, 0x7d,
- 0xe2, 0x04, 0x06, 0xdf, 0x55, 0x75, 0x74, 0xf4, 0xe0, 0x25, 0x15, 0x72,
- 0xe2, 0xe0, 0x25, 0x12, 0x61, 0x64, 0x64, 0xf2, 0xde, 0x30, 0xed, 0x0c,
- 0x14, 0x0c, 0x04, 0x04, 0x60, 0x31, 0x7d, 0x54, 0x89, 0xc2, 0x03, 0x70,
- 0x65, 0xf2, 0x04, 0xe0, 0x41, 0x9a, 0x74, 0x72, 0x69, 0xf8, 0x04, 0xe0,
- 0x48, 0x1a, 0x63, 0xe4, 0xe0, 0x20, 0x34, 0x6d, 0xef, 0x04, 0xe0, 0x48,
- 0x17, 0x62, 0x69, 0x6c, 0xe9, 0xcf, 0x90, 0x69, 0xfa, 0xd1, 0x0f, 0xe4,
- 0xe0, 0x3d, 0xb3, 0xe1, 0x04, 0x03, 0x05, 0x86, 0xf2, 0xd1, 0x12, 0x6d,
- 0xe1, 0xe0, 0x46, 0x41, 0x6b, 0x61, 0xee, 0xe0, 0x2c, 0x28, 0x62, 0x61,
- 0xf2, 0xc3, 0x52, 0xec, 0x09, 0x0b, 0x07, 0x06, 0x60, 0x35, 0x4c, 0xd2,
- 0x83, 0x6f, 0x76, 0x65, 0x63, 0x6f, 0x6c, 0x6c, 0xe5, 0xe0, 0x37, 0xab,
- 0x69, 0x61, 0x64, 0x62, 0xef, 0xc1, 0x49, 0xae, 0x60, 0x41, 0x76, 0xc1,
- 0x5a, 0x2d, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0xec, 0xe0, 0x43, 0xc1,
- 0xeb, 0x05, 0x07, 0x03, 0x07, 0x8e, 0x75, 0x73, 0x61, 0xeb, 0xe0, 0x2c,
- 0x4c, 0x6f, 0xed, 0xa8, 0x69, 0xae, 0x60, 0x2c, 0x5a, 0xda, 0xff, 0x65,
- 0x64, 0x61, 0xae, 0x5d, 0x2e, 0x60, 0x21, 0xa3, 0x45, 0xc5, 0x41, 0x3f,
- 0xa0, 0xe1, 0x06, 0x03, 0x05, 0xe0, 0x45, 0xfc, 0xf7, 0xc8, 0x97, 0x74,
- 0xe1, 0xe0, 0x42, 0xc4, 0x72, 0x75, 0x67, 0xe1, 0xe0, 0x3f, 0x31, 0xe9,
- 0x05, 0x0b, 0x05, 0x06, 0x85, 0x7a, 0xf5, 0x02, 0x84, 0xee, 0xe0, 0x2c,
- 0x10, 0xeb, 0xc8, 0x2e, 0x79, 0xe1, 0xe0, 0x2c, 0x07, 0x74, 0x61, 0xf4,
- 0xe0, 0x42, 0x03, 0x6a, 0xe9, 0xe0, 0x2b, 0xfc, 0xe4, 0x45, 0x28, 0xe0,
- 0x26, 0xd1, 0x68, 0x65, 0xf9, 0xcd, 0xc8, 0x67, 0x6c, 0x65, 0x73, 0x69,
- 0x61, 0xf3, 0x02, 0x81, 0x2d, 0x63, 0x61, 0x72, 0x62, 0xef, 0xe0, 0x2f,
- 0x06, 0xe6, 0x60, 0x2c, 0x42, 0xd8, 0xb6, 0xe5, 0x06, 0x60, 0x42, 0x60,
- 0xc4, 0xde, 0xae, 0x60, 0x34, 0x0e, 0xcc, 0xd1, 0xe4, 0x09, 0x06, 0x06,
- 0x04, 0x60, 0x38, 0xe8, 0xce, 0x36, 0x76, 0xae, 0x4b, 0x1a, 0xdd, 0xbd,
- 0x72, 0x65, 0xf4, 0xe0, 0x3f, 0x88, 0x66, 0xae, 0xda, 0x6f, 0xae, 0x0b,
- 0x07, 0x06, 0x04, 0x60, 0x41, 0xfd, 0x41, 0xeb, 0xc0, 0x7e, 0x72, 0x65,
- 0x70, 0xec, 0xe0, 0x2e, 0x0b, 0xec, 0x60, 0x43, 0x4e, 0xc1, 0x85, 0xe9,
- 0xe0, 0x45, 0xab, 0xe6, 0x02, 0x8a, 0x6f, 0x72, 0x67, 0x65, 0x72, 0x6f,
- 0xe3, 0xe0, 0x3d, 0x89, 0x69, 0x72, 0x65, 0x77, 0x61, 0x6c, 0xec, 0xd4,
- 0x84, 0xe3, 0x09, 0x0a, 0x41, 0x33, 0x48, 0x7a, 0xe0, 0x3b, 0xae, 0xf5,
- 0x04, 0xe0, 0x46, 0xdc, 0x72, 0xf5, 0xe0, 0x2b, 0x39, 0x68, 0xe9, 0x04,
- 0x17, 0x19, 0x85, 0x6e, 0xef, 0x03, 0x04, 0x8a, 0x73, 0xe5, 0xc6, 0xee,
- 0x6d, 0x69, 0x79, 0x61, 0xae, 0x60, 0x41, 0x7b, 0xc3, 0x6b, 0x68, 0xe5,
- 0xd0, 0x71, 0x6b, 0xe1, 0x02, 0x91, 0x77, 0xe1, 0x02, 0x87, 0x6d, 0x69,
- 0x73, 0x61, 0xf4, 0xd0, 0x32, 0xae, 0x60, 0x41, 0xd2, 0xc2, 0xfb, 0xe9,
- 0xe0, 0x3b, 0x1f, 0x68, 0x61, 0xf2, 0xc6, 0xbd, 0x62, 0xe1, 0xe0, 0x41,
- 0x25, 0xe2, 0x08, 0x06, 0x04, 0x40, 0x92, 0xe0, 0x43, 0xa0, 0x78, 0x6f,
- 0xf3, 0xe0, 0x46, 0x40, 0x69, 0xe7, 0xc4, 0x36, 0x61, 0x72, 0xe1, 0x04,
- 0xe0, 0x40, 0xbd, 0x6b, 0x69, 0xae, 0x60, 0x3e, 0xe9, 0x45, 0xbd, 0xa9,
- 0xe1, 0x04, 0xe0, 0x40, 0xca, 0x6d, 0x61, 0x6c, 0x6c, 0x61, 0xed, 0xd1,
- 0x1f, 0x32, 0x33, 0xb4, 0xe0, 0x30, 0x5f, 0xae, 0x08, 0x60, 0x30, 0xd7,
- 0x44, 0x1b, 0xd1, 0x64, 0xf0, 0xe0, 0x43, 0xc7, 0xe8, 0x18, 0x2e, 0x05,
- 0x1d, 0x03, 0x35, 0x0c, 0x0e, 0x11, 0x41, 0xb2, 0x06, 0x06, 0x17, 0x12,
- 0x10, 0x41, 0xe0, 0x40, 0xb7, 0x08, 0x14, 0xd6, 0xd8, 0x1f, 0xc3, 0x07,
- 0x07, 0x04, 0x0a, 0xe0, 0x44, 0x87, 0xf8, 0x03, 0xc0, 0xba, 0xee, 0xc1,
- 0x84, 0x66, 0xe7, 0xc7, 0x02, 0x64, 0x6b, 0x6b, 0x69, 0x6e, 0x65, 0xee,
- 0xe0, 0x45, 0xc6, 0xe1, 0x03, 0x03, 0x86, 0xf0, 0xc5, 0xf1, 0x6d, 0x6d,
- 0x1f, 0xc3, 0xc6, 0x4f, 0xe2, 0xc7, 0x28, 0x7a, 0xe3, 0xe0, 0x45, 0x03,
- 0xf9, 0x06, 0x0d, 0x05, 0xe0, 0x41, 0x19, 0xf5, 0x02, 0x85, 0x6e, 0xe4,
- 0xe0, 0x2a, 0x67, 0x67, 0xe1, 0xe0, 0x37, 0xc7, 0x6c, 0x6c, 0xe5, 0xd3,
- 0x18, 0xe1, 0xe0, 0x44, 0x2f, 0xf6, 0xd3, 0x26, 0xf5, 0x08, 0x06, 0x09,
- 0x11, 0x05, 0xe0, 0x45, 0xba, 0xf2, 0x60, 0x2e, 0x5e, 0xd0, 0x64, 0x6e,
- 0xe7, 0x04, 0xe0, 0x3d, 0x1f, 0xf9, 0xdf, 0x3b, 0x69, 0x73, 0x73, 0x69,
- 0x65, 0x72, 0x2d, 0x6a, 0x75, 0x73, 0x74, 0x69, 0x63, 0xe5, 0xe0, 0x37,
- 0xe4, 0x67, 0xe8, 0xe0, 0x39, 0xc6, 0xae, 0x60, 0x3f, 0x5b, 0x46, 0x3b,
- 0x9c, 0xf4, 0x04, 0xe0, 0x45, 0xae, 0x74, 0x70, 0x62, 0xe9, 0xe0, 0x25,
- 0xd5, 0xf3, 0x02, 0x84, 0xe2, 0xe0, 0x39, 0xc0, 0xae, 0x5f, 0x7a, 0x48,
- 0x7a, 0xc6, 0xbb, 0xf2, 0x06, 0x60, 0x2b, 0x5b, 0xda, 0x37, 0x61, 0x2e,
- 0x68, 0x65, 0x61, 0x6c, 0xf4, 0xe0, 0x44, 0xde, 0xef, 0x13, 0x0d, 0x04,
- 0x27, 0x40, 0x46, 0x1f, 0x12, 0x28, 0x40, 0x61, 0x23, 0x19, 0x09, 0x05,
- 0x17, 0xe0, 0x41, 0x6b, 0xf9, 0x04, 0xe0, 0x2f, 0x5c, 0x6c, 0x61, 0x6e,
- 0x64, 0xe5, 0xe0, 0x3d, 0xcd, 0xf5, 0xe0, 0x34, 0x00, 0xf4, 0x05, 0x03,
- 0xe0, 0x45, 0x5a, 0xed, 0xd8, 0xaa, 0x65, 0xec, 0x05, 0x0c, 0xe0, 0x42,
- 0xde, 0x77, 0x69, 0x74, 0x68, 0x66, 0x6c, 0x69, 0x67, 0xe8, 0xe0, 0x3b,
- 0x3a, 0xae, 0x06, 0x60, 0x39, 0x6e, 0xca, 0xd1, 0xf4, 0xe0, 0x42, 0xcc,
- 0xf3, 0x02, 0xba, 0xf4, 0x06, 0x07, 0x28, 0xe0, 0x45, 0x03, 0x79, 0x68,
- 0x6f, 0x73, 0xf4, 0xde, 0xf7, 0x69, 0x6e, 0xe7, 0x05, 0x15, 0xe0, 0x45,
- 0x0e, 0xae, 0x02, 0x86, 0x6f, 0x76, 0xe8, 0xe0, 0x22, 0x92, 0x6d, 0x79,
- 0x6a, 0x69, 0x6e, 0x6f, 0x2e, 0x72, 0xf5, 0xe0, 0x44, 0xff, 0x2d, 0x63,
- 0x6c, 0x75, 0x73, 0x74, 0x65, 0xf2, 0xe0, 0x28, 0x79, 0x65, 0xe4, 0xd7,
- 0x53, 0xf0, 0x04, 0xe0, 0x41, 0xab, 0x69, 0xf4, 0xdf, 0x4e, 0xf2, 0x06,
- 0x04, 0x0f, 0xe0, 0x33, 0x76, 0xf4, 0xe0, 0x35, 0x72, 0xef, 0x02, 0x86,
- 0x6e, 0x6f, 0xe2, 0xe0, 0x29, 0x14, 0x6b, 0x61, 0xee, 0xe0, 0x32, 0x65,
- 0x6e, 0xe9, 0xe0, 0x3a, 0x44, 0xf0, 0x02, 0x88, 0x74, 0x6f, 0xae, 0x60,
- 0x2e, 0xcd, 0xd3, 0x35, 0x6c, 0x69, 0x78, 0xae, 0xe0, 0x33, 0xf1, 0xee,
- 0x09, 0x0d, 0x05, 0x07, 0x60, 0x39, 0x31, 0xc6, 0xb8, 0xea, 0x02, 0x83,
- 0xf9, 0xce, 0x14, 0x6f, 0xae, 0x60, 0x3a, 0x4a, 0xc4, 0x55, 0x67, 0xef,
- 0xe0, 0x39, 0x57, 0x65, 0x66, 0x6f, 0xf3, 0xe0, 0x40, 0x52, 0x61, 0xe9,
- 0xe0, 0x3f, 0xd1, 0x6d, 0xe5, 0x0c, 0x04, 0x22, 0x0f, 0x06, 0x05, 0x09,
- 0x07, 0x52, 0xa8, 0xc8, 0x76, 0x75, 0x6e, 0xe9, 0xa9, 0xf3, 0x05, 0x06,
- 0xe0, 0x44, 0x7f, 0x6b, 0x6c, 0xe5, 0xe0, 0x32, 0xdf, 0xe5, 0x02, 0x84,
- 0xee, 0xe0, 0x33, 0x15, 0x63, 0x75, 0x72, 0x69, 0x74, 0xf9, 0x02, 0x83,
- 0xf0, 0xde, 0xee, 0x6d, 0xe1, 0xde, 0xea, 0x6c, 0x69, 0xee, 0x02, 0x85,
- 0x75, 0xf8, 0xe0, 0x30, 0xa4, 0x6b, 0xae, 0xe0, 0x26, 0xb3, 0x67, 0x6f,
- 0xef, 0xe0, 0x2b, 0x72, 0x66, 0x74, 0xf0, 0xd6, 0x92, 0xe4, 0x03, 0xdb,
- 0x92, 0x65, 0xf0, 0xe0, 0x34, 0x4b, 0x62, 0x75, 0x69, 0xec, 0xe0, 0x3f,
- 0x3a, 0xae, 0xc9, 0xa5, 0xec, 0x0b, 0x0b, 0x05, 0x60, 0x30, 0x8c, 0x4a,
- 0xe1, 0x47, 0x1d, 0x81, 0xf4, 0x02, 0x85, 0x1f, 0x43, 0xe5, 0xc6, 0x05,
- 0xe1, 0xc6, 0x02, 0x6d, 0xe5, 0xe0, 0x34, 0xad, 0x64, 0x69, 0x6e, 0xe7,
- 0xe0, 0x41, 0xb3, 0xeb, 0x02, 0x90, 0xf5, 0x02, 0x88, 0x74, 0x6f, 0xae,
- 0x60, 0x27, 0xca, 0xda, 0x92, 0x72, 0xf9, 0xe0, 0x3f, 0x54, 0xeb, 0x60,
- 0x2d, 0xc7, 0xd4, 0x8e, 0xe6, 0x04, 0xe0, 0x42, 0x66, 0xf5, 0xe0, 0x41,
- 0xe4, 0x63, 0xeb, 0xe0, 0x37, 0x7b, 0xe2, 0x03, 0x06, 0x84, 0x1f, 0x43,
- 0xf8, 0xe0, 0x3c, 0xd1, 0xef, 0xe0, 0x3c, 0xcd, 0x62, 0x79, 0x2d, 0x73,
- 0x69, 0x74, 0xe5, 0xdc, 0x01, 0x61, 0xe2, 0xe0, 0x34, 0xa1, 0xee, 0x60,
- 0x30, 0x66, 0xd3, 0x6f, 0xed, 0x60, 0x42, 0x3a, 0xc1, 0x95, 0xec, 0x04,
- 0xe0, 0x3f, 0x19, 0xf8, 0x02, 0x84, 0xb3, 0xe0, 0x24, 0x0a, 0xae, 0x04,
- 0xe0, 0x24, 0x03, 0x6c, 0x69, 0xf6, 0xe0, 0x43, 0x51, 0xeb, 0x06, 0x60,
- 0x41, 0xee, 0xc1, 0xbe, 0xae, 0x04, 0xe0, 0x40, 0xd8, 0xe3, 0x60, 0x42,
- 0x6c, 0xc1, 0x34, 0xea, 0x02, 0x87, 0x65, 0x6c, 0x6d, 0xe5, 0xe0, 0x36,
- 0xe3, 0x61, 0x72, 0xf4, 0xe0, 0x3c, 0x78, 0xe9, 0x14, 0x06, 0x24, 0x0d,
- 0x40, 0x4f, 0x07, 0x05, 0x14, 0x10, 0x1a, 0x05, 0x04, 0x40, 0xd1, 0x11,
- 0x0a, 0xe0, 0x3d, 0xfb, 0x7a, 0x65, 0xee, 0xe0, 0x38, 0xd9, 0xf4, 0x04,
- 0xe0, 0x36, 0xbf, 0xe1, 0x04, 0xe0, 0x31, 0x8f, 0x63, 0x68, 0xe9, 0x07,
- 0x09, 0x60, 0x3b, 0xc7, 0xc7, 0x92, 0xef, 0x02, 0x82, 0xf4, 0x88, 0x6d,
- 0x69, 0xf9, 0x84, 0x6e, 0x61, 0x6b, 0xe1, 0xe0, 0x3b, 0xc3, 0x73, 0xe1,
- 0x02, 0x85, 0x79, 0x61, 0xed, 0xc3, 0xff, 0x6d, 0xe9, 0xcc, 0x8a, 0xf2,
- 0x02, 0x9f, 0xef, 0x08, 0x09, 0x08, 0x60, 0x37, 0x8c, 0xc0, 0xf0, 0xf3,
- 0x04, 0xe0, 0x3d, 0xce, 0x61, 0xeb, 0xc2, 0xd8, 0x6e, 0x6f, 0xae, 0x4c,
- 0xe3, 0xe0, 0x30, 0xdf, 0x6b, 0x61, 0xf7, 0xc3, 0xd9, 0xe1, 0x07, 0x04,
- 0x0b, 0x03, 0x04, 0x06, 0x86, 0xf9, 0xe0, 0x27, 0xac, 0xf4, 0x04, 0xe0,
- 0x37, 0xd0, 0x73, 0x75, 0xeb, 0xe0, 0x3e, 0x4b, 0xf2, 0xc9, 0x74, 0x6e,
- 0xe1, 0xc2, 0xad, 0x6b, 0x61, 0xf4, 0xe0, 0x27, 0xbb, 0x69, 0x7a, 0x75,
- 0xed, 0xcc, 0xaf, 0xe4, 0xc7, 0x5f, 0xf0, 0x03, 0xcf, 0xdf, 0xe8, 0xda,
- 0x31, 0x6f, 0xeb, 0xe0, 0x3b, 0x93, 0x6e, 0xef, 0x03, 0x04, 0x83, 0x68,
- 0xe1, 0xc3, 0x11, 0xe4, 0xc0, 0xc9, 0x2e, 0x74, 0xef, 0x60, 0x26, 0xf8,
- 0xd8, 0x9f, 0xed, 0x03, 0xcb, 0x97, 0xe5, 0x04, 0xe0, 0x34, 0xe1, 0x73,
- 0x68, 0x69, 0xed, 0xe0, 0x2b, 0xec, 0xeb, 0x03, 0x06, 0x85, 0x6f, 0x6e,
- 0xe5, 0xe0, 0x3d, 0x6d, 0x69, 0xed, 0xe0, 0x3d, 0x03, 0xe1, 0x02, 0x83,
- 0xf7, 0xc3, 0x1f, 0x72, 0xe9, 0xe0, 0x40, 0x99, 0x6a, 0xe9, 0xe0, 0x30,
- 0xcd, 0xe8, 0xe0, 0x29, 0xf3, 0x67, 0x61, 0x73, 0x68, 0xe9, 0x0d, 0x21,
- 0x05, 0x08, 0x17, 0x0a, 0x0c, 0x18, 0x19, 0x0c, 0x08, 0x07, 0x8a, 0xf9,
- 0x02, 0x93, 0xef, 0x02, 0x88, 0x73, 0x68, 0x69, 0x6e, 0xef, 0xe0, 0x3a,
- 0x2b, 0x64, 0x6f, 0x67, 0x61, 0xf7, 0xe0, 0x27, 0x37, 0x61, 0x6d, 0xe1,
- 0x04, 0xe0, 0x34, 0x3f, 0xf4, 0xe0, 0x3c, 0x6e, 0x75, 0xf2, 0xe0, 0x26,
- 0xa0, 0x74, 0x73, 0x75, 0x6e, 0xef, 0xe0, 0x3c, 0x64, 0xf3, 0x02, 0x8b,
- 0x75, 0x6d, 0x69, 0x79, 0x6f, 0x73, 0x68, 0xe9, 0xe0, 0x40, 0x83, 0x68,
- 0x69, 0x72, 0x61, 0x6b, 0x61, 0xf7, 0xd4, 0xa4, 0xef, 0x04, 0xe0, 0x26,
- 0xfd, 0x6d, 0xe9, 0xe0, 0x3c, 0xf3, 0xee, 0x02, 0x83, 0xe5, 0xcb, 0x09,
- 0x61, 0x72, 0x75, 0xf3, 0xc7, 0x2f, 0xed, 0x02, 0x88, 0x75, 0x72, 0x61,
- 0x79, 0xe1, 0xe0, 0x3c, 0x22, 0x61, 0x74, 0x73, 0xf5, 0x03, 0xc1, 0x9a,
- 0x73, 0x68, 0x69, 0xed, 0xca, 0xa2, 0xeb, 0x02, 0x88, 0x75, 0x72, 0x75,
- 0x6d, 0xe5, 0xe0, 0x3e, 0xcf, 0xe1, 0x04, 0xe0, 0x36, 0xd8, 0xe7, 0x04,
- 0xe0, 0x33, 0xcb, 0xf5, 0xe0, 0x40, 0x25, 0x69, 0x7a, 0xf5, 0x04, 0xe0,
- 0x37, 0x9c, 0x6d, 0xef, 0xe0, 0x3c, 0x46, 0x68, 0x69, 0x72, 0x6f, 0x73,
- 0xe8, 0xd3, 0x0d, 0x63, 0x68, 0x69, 0xe3, 0xe0, 0x26, 0xb6, 0x61, 0x67,
- 0x61, 0x74, 0x73, 0x75, 0xed, 0xe0, 0x39, 0x16, 0xae, 0x04, 0xe0, 0x3d,
- 0x44, 0x66, 0x75, 0x6b, 0xf5, 0x60, 0x37, 0x7b, 0xc4, 0xf5, 0x64, 0xe1,
- 0x04, 0xe0, 0x38, 0xf3, 0x6b, 0x61, 0xae, 0x60, 0x37, 0x22, 0x3e, 0x44,
- 0x68, 0xc4, 0x4d, 0xe3, 0x04, 0xe0, 0x28, 0xa6, 0x68, 0x69, 0xf3, 0xc6,
- 0xc2, 0xae, 0x60, 0x3c, 0xb2, 0xc0, 0x5c, 0xe5, 0x0c, 0x06, 0x40, 0x4d,
- 0x08, 0x0d, 0x0b, 0x08, 0x07, 0xe0, 0x2d, 0xb3, 0x74, 0x65, 0xed, 0xe0,
- 0x27, 0x4c, 0xf2, 0x09, 0x0e, 0x21, 0x04, 0x4e, 0x8a, 0xe0, 0x31, 0xdc,
- 0x1f, 0x43, 0x78, 0x79, 0xae, 0x04, 0xe0, 0x2c, 0x7e, 0x6d, 0x1f, 0x43,
- 0xf8, 0x8c, 0xef, 0x02, 0x93, 0x79, 0xae, 0x04, 0xe0, 0x2c, 0x70, 0x6d,
- 0x6f, 0x72, 0x65, 0x2d, 0x6f, 0x67, 0x2d, 0x72, 0x6f, 0xed, 0xc9, 0x8f,
- 0x6b, 0xf5, 0x04, 0xe0, 0x40, 0x7d, 0x73, 0xf3, 0xe0, 0x3a, 0x91, 0xed,
- 0xe0, 0x35, 0x6d, 0xe5, 0x04, 0xe0, 0x41, 0x5c, 0x2d, 0x66, 0x6f, 0x72,
- 0x2d, 0x6d, 0x6f, 0xf2, 0xe0, 0x31, 0x21, 0x70, 0x66, 0x6f, 0x72, 0xe7,
- 0xe0, 0x2c, 0x10, 0xed, 0x02, 0x83, 0xf3, 0xd8, 0xf2, 0x6e, 0xe5, 0x60,
- 0x3c, 0xee, 0xc2, 0xbe, 0xec, 0x04, 0xe0, 0x3f, 0x9a, 0x73, 0x69, 0xee,
- 0xe0, 0x2e, 0x23, 0x6b, 0x69, 0x6e, 0x61, 0xee, 0xe0, 0x3b, 0xe3, 0x67,
- 0x75, 0x72, 0xe9, 0xe0, 0x38, 0xca, 0xe1, 0x02, 0x84, 0xf6, 0xe0, 0x38,
- 0x6b, 0x6c, 0x74, 0xe8, 0x06, 0x05, 0x06, 0xe0, 0x41, 0x07, 0x63, 0xe1,
- 0xe0, 0x3e, 0x49, 0xae, 0x60, 0x3a, 0x5c, 0xc4, 0x15, 0x2d, 0x63, 0x61,
- 0x72, 0x65, 0x72, 0x65, 0x66, 0x6f, 0xf2, 0xe0, 0x37, 0x44, 0x64, 0x66,
- 0xe3, 0x5f, 0xf8, 0xe0, 0x20, 0xff, 0xe2, 0x04, 0xe0, 0x3f, 0x62, 0x2e,
- 0xe3, 0x04, 0xe0, 0x3f, 0xad, 0x6c, 0x64, 0x6d, 0x61, 0x69, 0xec, 0xe0,
- 0x40, 0x57, 0xe1, 0x16, 0x04, 0x10, 0x0e, 0x24, 0x3b, 0x17, 0x0d, 0x40,
- 0x49, 0x40, 0x54, 0x14, 0x29, 0x15, 0x11, 0x08, 0x0c, 0x21, 0xe0, 0x3a,
- 0x41, 0xfa, 0xe0, 0x24, 0xff, 0x79, 0xe1, 0x02, 0x87, 0x73, 0x68, 0x69,
- 0xed, 0xe0, 0x3a, 0xfa, 0x6b, 0x61, 0xf7, 0xc9, 0xf5, 0xf5, 0x04, 0xe0,
- 0x3e, 0x45, 0xe7, 0x04, 0xe0, 0x37, 0xf9, 0xe5, 0xe0, 0x2a, 0x6a, 0xf4,
- 0x06, 0x07, 0x0a, 0xe0, 0x31, 0x55, 0x74, 0x66, 0x6a, 0x65, 0xec, 0xcc,
- 0xf9, 0x73, 0x75, 0x6b, 0x61, 0x69, 0x63, 0xe8, 0xe0, 0x35, 0x3a, 0xef,
- 0x02, 0x85, 0x79, 0x61, 0xed, 0xc9, 0xab, 0x67, 0xe1, 0xc9, 0xa6, 0xf3,
- 0x05, 0x10, 0x1b, 0xc7, 0xe7, 0xf5, 0x02, 0x8a, 0x72, 0xe1, 0x04, 0xe0,
- 0x3e, 0xfc, 0xad, 0xe0, 0x31, 0x61, 0xe4, 0xc9, 0x91, 0xe8, 0x02, 0x91,
- 0xe9, 0x02, 0x88, 0xed, 0x03, 0xd2, 0xb7, 0x6f, 0xf4, 0xc5, 0x75, 0x6b,
- 0x61, 0x6d, 0xe9, 0xc5, 0x25, 0x62, 0x61, 0x6e, 0xe7, 0xe0, 0x2f, 0x12,
- 0x61, 0xed, 0x04, 0xe0, 0x29, 0x6d, 0xe9, 0xe0, 0x24, 0xf0, 0xf2, 0x05,
- 0x06, 0x05, 0xcd, 0x5c, 0x69, 0x6d, 0xe1, 0xe0, 0x3b, 0x64, 0x65, 0xe9,
- 0xe0, 0x3c, 0x16, 0xe1, 0x60, 0x34, 0x88, 0xc8, 0x98, 0xf0, 0x02, 0x85,
- 0x70, 0x6f, 0xf5, 0xdc, 0x24, 0x6d, 0xe9, 0xe0, 0x34, 0x7d, 0xee, 0x06,
- 0x04, 0x03, 0x09, 0x0d, 0x8e, 0xf9, 0xe0, 0x24, 0xe6, 0xef, 0xd8, 0x1e,
- 0xee, 0x03, 0xc9, 0x7f, 0x61, 0xee, 0xe0, 0x3e, 0x39, 0xe7, 0x02, 0x85,
- 0x6f, 0xf5, 0xe0, 0x3e, 0x48, 0x67, 0x6c, 0xe9, 0xc5, 0xd4, 0xe4, 0x04,
- 0xe0, 0x24, 0x2b, 0x63, 0x72, 0x61, 0x66, 0x74, 0xe5, 0xe0, 0x3e, 0xf7,
- 0xe1, 0x04, 0xe0, 0x34, 0xa8, 0xed, 0x05, 0x08, 0xe0, 0x37, 0x31, 0x69,
- 0x67, 0x61, 0x77, 0xe1, 0xe0, 0x3e, 0x02, 0x61, 0xeb, 0xc9, 0x8f, 0xed,
- 0x05, 0x05, 0x14, 0x05, 0xa5, 0x75, 0xf2, 0xe0, 0x39, 0xc6, 0xed, 0x02,
- 0x88, 0x65, 0x72, 0x66, 0x65, 0xf3, 0xe0, 0x38, 0x29, 0x61, 0x72, 0x66,
- 0x65, 0x61, 0xf3, 0xe0, 0x39, 0x94, 0x62, 0xf5, 0xe0, 0x2b, 0x05, 0xe1,
- 0x04, 0x0d, 0x06, 0x88, 0xf4, 0x02, 0x85, 0x6f, 0xee, 0xe0, 0x3a, 0xf2,
- 0x61, 0xed, 0xe0, 0x34, 0xf4, 0xf2, 0x60, 0x33, 0xf2, 0xca, 0x1b, 0x6d,
- 0x61, 0x74, 0x73, 0xf5, 0xe0, 0x35, 0x36, 0x64, 0xe1, 0xe0, 0x39, 0xdd,
- 0x2d, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x2d, 0xef, 0xe0, 0x33, 0x5f, 0xec,
- 0x04, 0x0b, 0xc7, 0x3d, 0xe6, 0x03, 0xca, 0x96, 0x6d, 0x6f, 0x6f, 0xee,
- 0xe0, 0x3e, 0x7d, 0xe4, 0xe0, 0x2f, 0xf8, 0xeb, 0x03, 0x12, 0x8d, 0xf5,
- 0x03, 0x06, 0x84, 0x73, 0x61, 0xee, 0xe0, 0x37, 0x35, 0xe9, 0xe0, 0x37,
- 0x31, 0xe2, 0xe0, 0x23, 0xf0, 0xef, 0x02, 0x84, 0xee, 0xe0, 0x31, 0x15,
- 0x64, 0x61, 0xf4, 0xe0, 0x23, 0x80, 0x61, 0x74, 0xe1, 0xe0, 0x28, 0x38,
- 0xe9, 0x06, 0x05, 0x04, 0xe0, 0x3d, 0xdf, 0x70, 0xe8, 0xe0, 0x2c, 0x8b,
- 0xe4, 0xe0, 0x2c, 0x86, 0x62, 0x61, 0xf2, 0xc8, 0xca, 0xe7, 0x05, 0x06,
- 0xe0, 0x33, 0xa1, 0xe9, 0x60, 0x36, 0x7d, 0xc6, 0x99, 0x65, 0x62, 0xef,
- 0xcc, 0x4b, 0x65, 0x62, 0x61, 0x72, 0xf5, 0xe0, 0x3a, 0x85, 0xe4, 0x02,
- 0x83, 0xf3, 0xc5, 0x99, 0x61, 0x6e, 0xef, 0xe0, 0x3a, 0x4e, 0xe3, 0x02,
- 0x9a, 0x68, 0xe9, 0x04, 0x08, 0x05, 0x83, 0x72, 0x6f, 0x67, 0x61, 0x74,
- 0xe1, 0xda, 0xfa, 0x6f, 0xea, 0xe0, 0x3b, 0xb3, 0xee, 0xc3, 0xc0, 0xea,
- 0xe0, 0x38, 0xef, 0xe3, 0xe0, 0x2f, 0x3f, 0xe2, 0x05, 0x04, 0xe0, 0x33,
- 0x45, 0xed, 0xe0, 0x33, 0x3d, 0x69, 0x6b, 0xe9, 0xe0, 0x3d, 0x09, 0xe7,
- 0x27, 0x30, 0x04, 0x1b, 0x04, 0x0b, 0x0b, 0x40, 0x59, 0x40, 0x6f, 0x40,
- 0xae, 0x42, 0x42, 0x0d, 0x15, 0x40, 0x56, 0x1d, 0x40, 0xa6, 0x08, 0x09,
- 0x40, 0x74, 0x1c, 0x04, 0x0a, 0x40, 0x85, 0x05, 0x57, 0xd8, 0x55, 0x5f,
- 0x49, 0x2b, 0xa1, 0x1f, 0xc3, 0x02, 0x9a, 0x7c, 0x6e, 0x73, 0x74, 0x69,
- 0xe7, 0x02, 0x88, 0x6c, 0x69, 0x65, 0x66, 0x65, 0xf2, 0xd5, 0xb3, 0x62,
- 0x65, 0x73, 0x74, 0x65, 0x6c, 0x6c, 0xe5, 0xd5, 0xa9, 0xe1, 0x04, 0x06,
- 0xc6, 0x63, 0x1f, 0x45, 0x4b, 0xe7, 0xc6, 0x16, 0x6c, 0x73, 0x1f, 0xc3,
- 0xe0, 0x38, 0x60, 0xfa, 0xe0, 0x2b, 0x15, 0xf9, 0x05, 0x07, 0xe0, 0x3e,
- 0x74, 0x6f, 0x6b, 0x75, 0xf4, 0xe0, 0x33, 0xff, 0x65, 0x6f, 0x6e, 0xe7,
- 0x05, 0x60, 0x22, 0x32, 0x85, 0x67, 0xe9, 0xe0, 0x27, 0x78, 0xf8, 0xe0,
- 0x2a, 0xf6, 0xf7, 0x04, 0xe0, 0x3e, 0x5d, 0x61, 0x6e, 0x67, 0xea, 0xda,
- 0x78, 0x76, 0xae, 0x04, 0xe0, 0x3e, 0x41, 0xe1, 0x60, 0x3c, 0x92, 0xb3,
- 0xf5, 0x12, 0x09, 0x0b, 0x04, 0x0b, 0x0b, 0x04, 0x05, 0x4d, 0x6b, 0x4d,
- 0x1b, 0x5a, 0xb3, 0x43, 0x24, 0xc5, 0xa5, 0x73, 0x68, 0x69, 0x6b, 0x61,
- 0xed, 0xe0, 0x39, 0x9a, 0x6f, 0x76, 0x64, 0x61, 0x67, 0x65, 0x61, 0x69,
- 0xe4, 0xd9, 0x1c, 0xec, 0xe0, 0x2e, 0xa8, 0xea, 0x03, 0xc3, 0x26, 0x61,
- 0x72, 0x61, 0xf4, 0xe0, 0x3c, 0xdd, 0xe9, 0x02, 0x84, 0x74, 0xe1, 0xdc,
- 0x7e, 0xe4, 0xe0, 0x3c, 0x92, 0xe3, 0xe0, 0x32, 0x33, 0x62, 0xae, 0xe0,
- 0x2b, 0xff, 0xe1, 0x02, 0x86, 0x72, 0x64, 0xe9, 0xe0, 0x39, 0xbd, 0x6d,
- 0x2e, 0xe7, 0xe0, 0x3c, 0xf6, 0xf3, 0x07, 0x06, 0x60, 0x31, 0x7c, 0xcc,
- 0x69, 0x6a, 0x2e, 0xe2, 0xe0, 0x3a, 0xc5, 0xae, 0x10, 0x05, 0x05, 0x0d,
- 0x04, 0x0e, 0x06, 0x04, 0x0a, 0x06, 0x04, 0x60, 0x35, 0x39, 0xc3, 0xac,
- 0xf6, 0x24, 0xe0, 0x37, 0x87, 0xf4, 0x60, 0x32, 0x22, 0x84, 0xf3, 0x05,
- 0x15, 0xe0, 0x36, 0x12, 0x76, 0x61, 0x6c, 0xe2, 0xe0, 0x37, 0x20, 0xf2,
- 0xe0, 0x36, 0xa2, 0xef, 0x05, 0x04, 0xe0, 0x36, 0x95, 0xf3, 0xe0, 0x35,
- 0x65, 0xe6, 0xe0, 0x3c, 0x19, 0xee, 0x60, 0x36, 0x0d, 0xc0, 0x83, 0xed,
- 0xe0, 0x31, 0xfc, 0x6a, 0x61, 0x6e, 0x2d, 0x6d, 0x61, 0xf9, 0xe0, 0x2e,
- 0x1e, 0xe8, 0x60, 0x31, 0xea, 0xc4, 0x92, 0xe6, 0xe0, 0x31, 0xe4, 0xe1,
- 0x04, 0xe0, 0x37, 0x60, 0xe8, 0xe0, 0x3b, 0xf2, 0xf2, 0x0b, 0x05, 0x04,
- 0x40, 0x40, 0x13, 0x0e, 0x2e, 0xe0, 0x3c, 0xe0, 0xf5, 0x60, 0x3b, 0xe1,
- 0xbb, 0xf0, 0xe0, 0x31, 0x9f, 0xef, 0x06, 0x06, 0x13, 0x06, 0x0b, 0x8c,
- 0x7a, 0x6e, 0xf9, 0xe0, 0x39, 0xc4, 0xf5, 0x02, 0x86, 0xf0, 0x60, 0x3a,
- 0x81, 0xc2, 0xdd, 0x6e, 0x64, 0x68, 0x61, 0x6e, 0x64, 0xec, 0xe0, 0x2d,
- 0xce, 0x73, 0x73, 0xe5, 0xe0, 0x38, 0xd5, 0xee, 0x04, 0xe0, 0x36, 0x55,
- 0x64, 0x61, 0xf2, 0xe0, 0x38, 0xce, 0x6b, 0x73, 0x2d, 0x74, 0xe8, 0x04,
- 0xe0, 0x2d, 0x02, 0xe9, 0xd4, 0x03, 0xe3, 0xd7, 0xe9, 0xe9, 0x03, 0x08,
- 0x84, 0x77, 0x2e, 0x67, 0x6f, 0xf6, 0xe0, 0x38, 0x6b, 0xf0, 0xe0, 0x3b,
- 0xa6, 0xed, 0xca, 0x45, 0xe5, 0x04, 0x05, 0xc4, 0x8f, 0x74, 0xe1, 0xe0,
- 0x2f, 0x37, 0xe1, 0xe0, 0x2a, 0x19, 0xe1, 0x07, 0x09, 0x0d, 0x0b, 0xe0,
- 0x27, 0xb5, 0xf4, 0x04, 0xe0, 0x2d, 0x82, 0xe9, 0xe0, 0x3a, 0x97, 0x70,
- 0xe8, 0x02, 0x84, 0x6f, 0xf8, 0xc1, 0xd5, 0x69, 0xe3, 0xe0, 0x3a, 0x8a,
- 0xee, 0x05, 0x60, 0x3b, 0x54, 0x81, 0x76, 0xe9, 0xe0, 0x36, 0xb3, 0x6a,
- 0x65, 0xf7, 0xc2, 0x57, 0xae, 0x60, 0x36, 0x81, 0x44, 0x5c, 0x40, 0x57,
- 0xc1, 0xa4, 0xef, 0x10, 0x40, 0xfd, 0x19, 0x2d, 0x13, 0x0f, 0x06, 0x1c,
- 0x0e, 0x1a, 0x0a, 0x06, 0x0c, 0x0d, 0xba, 0xf6, 0x06, 0x03, 0x04, 0xe0,
- 0x3c, 0xb7, 0xf4, 0xc3, 0xe5, 0x65, 0xf2, 0xce, 0x83, 0xae, 0x1f, 0x08,
- 0x06, 0x0c, 0x13, 0x0d, 0x0d, 0x14, 0x11, 0x0d, 0x0c, 0x04, 0x0d, 0x0a,
- 0x0e, 0x12, 0x50, 0xa1, 0x4a, 0x5c, 0x03, 0x3c, 0x40, 0x47, 0x59, 0x5e,
- 0x44, 0x56, 0x17, 0xc0, 0x48, 0xf6, 0x60, 0x30, 0xb3, 0x4a, 0x67, 0xc0,
- 0x42, 0xf5, 0x60, 0x3a, 0x28, 0xc0, 0xbf, 0xf4, 0x60, 0x3a, 0x18, 0x1e,
- 0x03, 0x0f, 0x40, 0x82, 0x33, 0x32, 0x9f, 0xf3, 0x50, 0xb7, 0x60, 0x21,
- 0x6c, 0x42, 0xd7, 0x44, 0xf2, 0x27, 0x1a, 0x03, 0x15, 0x40, 0x90, 0x1c,
- 0xc1, 0x8a, 0xf0, 0x60, 0x39, 0xd9, 0x27, 0x03, 0x17, 0x18, 0x40, 0x79,
- 0x40, 0x65, 0x9f, 0xee, 0x08, 0x60, 0x3a, 0xfb, 0x40, 0xa6, 0xc0, 0xb2,
- 0xe3, 0xe0, 0x2b, 0x23, 0xed, 0x60, 0x38, 0x93, 0x41, 0x49, 0x03, 0x07,
- 0x03, 0x17, 0x18, 0x40, 0x90, 0x1c, 0x0f, 0x23, 0x1f, 0x3a, 0xc0, 0xff,
- 0xec, 0x60, 0x30, 0x58, 0x41, 0x8a, 0x46, 0x9d, 0x41, 0x53, 0x03, 0x2f,
- 0x40, 0x79, 0x17, 0xc0, 0x4e, 0xeb, 0x60, 0x39, 0xb7, 0x03, 0x1e, 0x39,
- 0x40, 0x7c, 0x40, 0x63, 0xc1, 0x39, 0xe9, 0x5b, 0xd5, 0x5d, 0xdf, 0x1a,
- 0x40, 0x91, 0x40, 0x42, 0x23, 0x9f, 0xe8, 0xe0, 0x39, 0xab, 0xe7, 0x60,
- 0x39, 0x7d, 0x40, 0x44, 0x15, 0x1e, 0x40, 0x9d, 0x23, 0x1f, 0xba, 0xe5,
- 0x60, 0x30, 0x1d, 0x4a, 0x25, 0x40, 0x42, 0xc1, 0x7b, 0xe3, 0x60, 0x34,
- 0x74, 0x45, 0x30, 0x03, 0x03, 0x15, 0x40, 0xac, 0x40, 0x51, 0xba, 0xe2,
- 0x60, 0x30, 0xff, 0x40, 0x90, 0x47, 0xc9, 0x1d, 0x0a, 0x17, 0x1b, 0x40,
- 0x79, 0x17, 0x40, 0x4e, 0x9f, 0xe1, 0x60, 0x2f, 0xf3, 0x40, 0xfa, 0x48,
- 0x76, 0x0a, 0x1a, 0x40, 0xd3, 0x23, 0xc0, 0x59, 0xf5, 0x02, 0x90, 0x76,
- 0xae, 0x0a, 0x60, 0x2f, 0xdc, 0x06, 0x0d, 0x40, 0xf1, 0xc7, 0x57, 0xed,
- 0xe0, 0x39, 0x69, 0x70, 0x69, 0xec, 0xe0, 0x20, 0x0b, 0xf4, 0x08, 0x05,
- 0x08, 0x04, 0x05, 0xe0, 0x3b, 0x90, 0x73, 0xf5, 0xe0, 0x35, 0xee, 0x70,
- 0x61, 0x6e, 0x74, 0x68, 0xe5, 0xcc, 0xf5, 0xef, 0xe0, 0x20, 0x3f, 0x65,
- 0x6d, 0xe2, 0xc5, 0x27, 0x64, 0x6e, 0x73, 0xae, 0x04, 0xe0, 0x38, 0xb9,
- 0xe3, 0x60, 0x3a, 0xda, 0xc0, 0xa7, 0xf3, 0x04, 0x05, 0xca, 0xca, 0x68,
- 0xe9, 0xe0, 0x34, 0x36, 0xe5, 0x04, 0xe0, 0x33, 0x18, 0xee, 0xe0, 0x37,
- 0x28, 0xf2, 0x02, 0x87, 0x6c, 0x69, 0x63, 0xe5, 0xe0, 0x36, 0xad, 0x69,
- 0xfa, 0xe0, 0x34, 0xd3, 0xf0, 0x4a, 0xb1, 0xe0, 0x30, 0xae, 0xef, 0x05,
- 0x10, 0xe0, 0x3b, 0x44, 0xe7, 0x04, 0xe0, 0x3b, 0x4f, 0x6c, 0xe5, 0x06,
- 0x42, 0x33, 0xe0, 0x39, 0x14, 0xe3, 0xcc, 0x45, 0x64, 0x79, 0xe5, 0xe0,
- 0x29, 0x30, 0xee, 0x06, 0x4a, 0x89, 0xe0, 0x20, 0xfc, 0x6f, 0x68, 0x65,
- 0xae, 0xe0, 0x32, 0x33, 0xec, 0x05, 0x0b, 0xe0, 0x39, 0x8a, 0xe6, 0x04,
- 0xe0, 0x3b, 0x25, 0x66, 0x61, 0x6e, 0xae, 0xdd, 0x08, 0xe4, 0x04, 0xe0,
- 0x3b, 0x1a, 0x70, 0xef, 0xcb, 0xdd, 0xeb, 0x03, 0xca, 0x64, 0x61, 0x73,
- 0xe5, 0xe0, 0x2c, 0xdf, 0x6a, 0x6f, 0x6d, 0xe5, 0xd7, 0x03, 0xe9, 0x02,
- 0x83, 0xf0, 0xd7, 0xcd, 0x61, 0x6e, 0xe9, 0xe0, 0x31, 0x81, 0xe4, 0x02,
- 0x84, 0xef, 0xe0, 0x32, 0x1d, 0x61, 0x64, 0xe4, 0xe0, 0x38, 0xb9, 0xe2,
- 0x02, 0x84, 0xef, 0xe0, 0x30, 0x41, 0xae, 0x11, 0x04, 0x07, 0x04, 0x04,
- 0x04, 0x06, 0x5e, 0x40, 0x4a, 0x66, 0x47, 0x24, 0x48, 0x36, 0xc0, 0xbd,
- 0xf3, 0xe0, 0x37, 0x17, 0xf0, 0x60, 0x38, 0x69, 0x40, 0xbf, 0xab, 0xed,
- 0xe0, 0x33, 0x46, 0xe8, 0xe0, 0x39, 0x8a, 0xe7, 0xe0, 0x39, 0x02, 0xe5,
- 0x60, 0x2e, 0xd9, 0xc9, 0x7a, 0xe3, 0xe0, 0x38, 0x67, 0xae, 0x0f, 0x04,
- 0x06, 0x4f, 0xd8, 0x59, 0x09, 0x4b, 0x54, 0x03, 0x43, 0xcd, 0x37, 0xc0,
- 0xb2, 0xf5, 0xe0, 0x3a, 0xa1, 0xe9, 0x60, 0x38, 0x52, 0xc0, 0x8e, 0x64,
- 0x79, 0xee, 0xd1, 0xdc, 0xee, 0x04, 0xe0, 0x3a, 0x8f, 0x69, 0x65, 0x7a,
- 0x6e, 0xef, 0xe0, 0x35, 0xcf, 0xed, 0x0b, 0x05, 0x4d, 0xc4, 0x60, 0x25,
- 0x30, 0x45, 0xf7, 0xc1, 0x8b, 0x69, 0xee, 0xe0, 0x2b, 0x95, 0xe2, 0xe0,
- 0x37, 0xe5, 0xec, 0x08, 0x05, 0x27, 0x15, 0x08, 0xe0, 0x3a, 0x20, 0x75,
- 0xe7, 0xe0, 0x36, 0x55, 0xef, 0x04, 0x05, 0x05, 0x84, 0x70, 0xf0, 0xe0,
- 0x2a, 0xe1, 0x6f, 0xed, 0xe0, 0x31, 0xa5, 0xe7, 0xe0, 0x2d, 0xa9, 0xe2,
- 0x04, 0xe0, 0x38, 0xc1, 0x61, 0xec, 0x04, 0xe0, 0x3a, 0x46, 0xae, 0x04,
- 0xe0, 0x38, 0xd0, 0xf3, 0xe0, 0x38, 0xc1, 0xe9, 0x03, 0x07, 0x86, 0x77,
- 0x69, 0x63, 0xe5, 0xe0, 0x28, 0x93, 0x74, 0x63, 0xe8, 0xe0, 0x24, 0x2a,
- 0xe4, 0xe0, 0x2a, 0xa7, 0xe5, 0x04, 0xe0, 0x3a, 0x23, 0xe5, 0xc0, 0xaa,
- 0xe1, 0xe0, 0x32, 0xb3, 0xea, 0x03, 0x05, 0x83, 0x1f, 0x43, 0xf8, 0xc1,
- 0xac, 0xef, 0xc1, 0xa9, 0xe5, 0x04, 0x08, 0xc2, 0x20, 0xf2, 0x03, 0xc7,
- 0x2e, 0xe4, 0xe0, 0x22, 0x85, 0xed, 0xe0, 0x35, 0xad, 0xe9, 0x0f, 0x06,
- 0x40, 0x44, 0x07, 0x16, 0x0f, 0x05, 0x0c, 0x0b, 0x48, 0x31, 0xe0, 0x31,
- 0x2c, 0xf6, 0x60, 0x24, 0x6c, 0xc9, 0x8b, 0xf4, 0x05, 0x05, 0x06, 0x13,
- 0x88, 0x70, 0x61, 0x67, 0xe5, 0x9d, 0x6c, 0x61, 0xe2, 0xe0, 0x38, 0xd3,
- 0x68, 0x75, 0xe2, 0x06, 0x60, 0x2f, 0xb5, 0xc9, 0x12, 0x70, 0x72, 0x65,
- 0x76, 0x69, 0x65, 0xf7, 0xe0, 0x2c, 0x2c, 0x61, 0x70, 0x70, 0x2e, 0xf3,
- 0xe0, 0x39, 0x68, 0xad, 0x02, 0x86, 0x72, 0x65, 0x70, 0xef, 0xd5, 0x07,
- 0x70, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x72, 0x69, 0x74, 0x2e, 0x65, 0xe4,
- 0xe0, 0x39, 0x20, 0x72, 0xec, 0x60, 0x23, 0xd8, 0xcd, 0x18, 0xee, 0x02,
- 0x8e, 0xef, 0x02, 0x85, 0x7a, 0xe1, 0xe0, 0x34, 0xfe, 0x77, 0x61, 0xee,
- 0xe0, 0x34, 0xf8, 0x61, 0xee, 0xe0, 0x30, 0xb2, 0x6c, 0x64, 0x65, 0x73,
- 0xeb, 0x04, 0xe0, 0x32, 0x64, 0x1f, 0x43, 0xe5, 0xe0, 0x32, 0x62, 0x69,
- 0xfa, 0xe0, 0x31, 0xcc, 0xe6, 0x04, 0xe0, 0x36, 0x71, 0x75, 0xae, 0x60,
- 0x30, 0x95, 0xc7, 0x2d, 0x65, 0x68, 0x74, 0x61, 0x76, 0x75, 0x6f, 0xe1,
- 0xe0, 0x2a, 0x18, 0x61, 0xec, 0xd1, 0x62, 0xe8, 0x04, 0xe0, 0x39, 0x54,
- 0xef, 0xd6, 0x69, 0xe7, 0x4b, 0x65, 0x54, 0xb9, 0x54, 0x54, 0xc4, 0xde,
- 0xe5, 0x0d, 0x08, 0x0c, 0x34, 0x07, 0x09, 0x60, 0x36, 0xdf, 0x40, 0x5c,
- 0xc1, 0xa7, 0xf4, 0x03, 0xc4, 0x53, 0xf3, 0xe0, 0x22, 0xff, 0xef, 0x04,
- 0xe0, 0x37, 0xd2, 0x72, 0xe7, 0x60, 0x37, 0x3f, 0xc0, 0x70, 0xee, 0x04,
- 0x13, 0x09, 0x84, 0xf4, 0x08, 0x60, 0x23, 0x96, 0x47, 0xfe, 0xcd, 0x84,
- 0x6c, 0x65, 0x6e, 0x74, 0x61, 0x70, 0xe9, 0xe0, 0x37, 0xf5, 0xef, 0x04,
- 0xe0, 0x32, 0x7a, 0xf6, 0xe0, 0x32, 0x79, 0x6b, 0xe1, 0xc2, 0x12, 0xae,
- 0x08, 0x60, 0x2b, 0x3e, 0x44, 0xfb, 0xc7, 0x84, 0xee, 0x60, 0x36, 0x2a,
- 0xc0, 0x5a, 0x69, 0x73, 0x65, 0xe9, 0xe0, 0x32, 0xec, 0x68, 0x69, 0x72,
- 0x6e, 0x2e, 0xee, 0xe0, 0x29, 0xf8, 0x65, 0xeb, 0x02, 0x86, 0x67, 0x61,
- 0x6c, 0xe1, 0xdb, 0x47, 0xae, 0xe0, 0x32, 0x27, 0xe4, 0x09, 0x07, 0x60,
- 0x25, 0x54, 0x52, 0x35, 0xc1, 0x3a, 0x79, 0x6e, 0x69, 0xe1, 0xe0, 0x27,
- 0x24, 0xe1, 0x04, 0xe0, 0x27, 0x1c, 0x6e, 0x73, 0xeb, 0xe0, 0x27, 0x19,
- 0xe3, 0xe0, 0x37, 0x0e, 0xe2, 0x05, 0x60, 0x38, 0x8a, 0xa4, 0xe9, 0xe0,
- 0x36, 0x3a, 0xe1, 0x10, 0x08, 0x0c, 0x06, 0x0f, 0x32, 0x15, 0x60, 0x32,
- 0x84, 0x43, 0x6e, 0x40, 0x9a, 0xc1, 0x9d, 0xf5, 0x03, 0xc0, 0xb2, 0xec,
- 0xe0, 0x29, 0x40, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x64, 0x65, 0xf6,
- 0xe0, 0x38, 0x76, 0x72, 0x64, 0xe5, 0xe0, 0x37, 0x48, 0x6e, 0xe7, 0x02,
- 0x83, 0xf7, 0xd4, 0x95, 0x61, 0x76, 0x69, 0x69, 0xeb, 0xe0, 0x32, 0x4b,
- 0xed, 0x06, 0x05, 0x1f, 0xe0, 0x32, 0xf2, 0x76, 0xe9, 0xe0, 0x2d, 0xd7,
- 0xe5, 0x07, 0x06, 0x4d, 0xeb, 0xe0, 0x2a, 0x6b, 0xf3, 0x60, 0x37, 0x59,
- 0xc1, 0x02, 0xad, 0x02, 0x88, 0x73, 0x65, 0x72, 0x76, 0x65, 0xf2, 0xd5,
- 0x99, 0x68, 0x6f, 0xf3, 0xe0, 0x2e, 0x89, 0x61, 0x67, 0x6f, 0xf2, 0xe0,
- 0x32, 0xf7, 0xec, 0x05, 0x04, 0xe0, 0x38, 0x34, 0xf3, 0xe0, 0x32, 0x0f,
- 0xec, 0x06, 0x52, 0xe5, 0xe0, 0x23, 0xbd, 0xf5, 0xe0, 0x36, 0x8f, 0xe9,
- 0xe0, 0x28, 0xdd, 0x31, 0xb2, 0xe0, 0x36, 0xc8, 0xae, 0x06, 0x60, 0x26,
- 0xb3, 0xd1, 0x64, 0x76, 0x62, 0x72, 0x70, 0x6c, 0x73, 0xe2, 0xcd, 0x18,
- 0xe6, 0x1c, 0x08, 0x12, 0x01, 0x04, 0x41, 0xa0, 0x0e, 0x03, 0x41, 0xda,
- 0x40, 0xc3, 0x17, 0x0c, 0x40, 0x90, 0x04, 0x10, 0x40, 0xf4, 0x1e, 0x40,
- 0x6a, 0x04, 0x08, 0xc7, 0x31, 0x1f, 0x43, 0x78, 0x72, 0xe4, 0xe0, 0x36,
- 0x58, 0xf9, 0x05, 0x06, 0xe0, 0x35, 0xc6, 0x72, 0x65, 0xf3, 0xe0, 0x30,
- 0xc6, 0x6c, 0x6b, 0x65, 0xf3, 0xc4, 0x41, 0x76, 0xe7, 0xe0, 0x35, 0xd4,
- 0xf5, 0x0c, 0x31, 0x0b, 0x26, 0x0f, 0x2a, 0x40, 0x58, 0x40, 0x6d, 0x19,
- 0x8b, 0xf4, 0x05, 0x17, 0x06, 0x04, 0x85, 0x75, 0x72, 0xe5, 0x04, 0x05,
- 0xc8, 0x01, 0x6d, 0x61, 0x69, 0xec, 0x85, 0x68, 0x6f, 0x73, 0x74, 0x69,
- 0x6e, 0x67, 0xae, 0xe0, 0x37, 0x0f, 0x74, 0x73, 0xf5, 0xe0, 0x35, 0xc9,
- 0x73, 0xf5, 0xdc, 0x49, 0x62, 0xef, 0xe0, 0x35, 0x4f, 0x61, 0xe2, 0xe0,
- 0x2c, 0x57, 0xf3, 0x06, 0x60, 0x2e, 0xd5, 0xc2, 0x92, 0xf3, 0xe0, 0x31,
- 0x83, 0xf2, 0x03, 0x18, 0x85, 0xf5, 0x05, 0x0c, 0xe0, 0x31, 0xcc, 0x6b,
- 0x61, 0x77, 0x61, 0x2e, 0x6d, 0x69, 0x79, 0xe1, 0xe0, 0x2b, 0xf9, 0x64,
- 0x6f, 0xee, 0xe0, 0x31, 0xfb, 0x6e, 0xe9, 0xe0, 0x34, 0xa4, 0x61, 0xee,
- 0xe0, 0x2b, 0xcc, 0xef, 0x02, 0x86, 0x73, 0x73, 0xeb, 0xe0, 0x2f, 0x13,
- 0x69, 0x73, 0xeb, 0xe0, 0x30, 0xe8, 0xee, 0x07, 0x0b, 0x60, 0x34, 0xf7,
- 0xc2, 0x4c, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x66, 0xee, 0xc3,
- 0xc8, 0xe1, 0x03, 0x06, 0x88, 0x68, 0x61, 0x73, 0x68, 0xe9, 0xbb, 0x67,
- 0x61, 0x74, 0x61, 0xae, 0xe0, 0x2c, 0x0b, 0x62, 0x61, 0xf3, 0xdb, 0x26,
- 0xeb, 0x03, 0xc0, 0x48, 0xf5, 0x0a, 0x04, 0x10, 0x05, 0x09, 0x07, 0x07,
- 0xe0, 0x2c, 0x91, 0x79, 0xe1, 0xc8, 0x36, 0xf3, 0x04, 0xe0, 0x2f, 0xce,
- 0x68, 0x69, 0x6d, 0x61, 0xae, 0x60, 0x31, 0xa4, 0x43, 0xb7, 0x89, 0x72,
- 0xef, 0xe0, 0x2c, 0xa4, 0x6d, 0x69, 0x74, 0x73, 0x75, 0xae, 0xe0, 0x2b,
- 0xdb, 0x69, 0xae, 0x4c, 0x7e, 0xe0, 0x28, 0xd0, 0x64, 0x6f, 0x6d, 0xe9,
- 0xe0, 0x2c, 0x50, 0x63, 0x68, 0xe9, 0x03, 0xdf, 0xd4, 0x79, 0x61, 0x6d,
- 0xe1, 0xe0, 0x28, 0xae, 0xe1, 0x02, 0x85, 0x79, 0xe1, 0xe0, 0x2b, 0x9c,
- 0xe7, 0xe0, 0x2b, 0xa0, 0x6a, 0xe9, 0x0c, 0x09, 0x05, 0x18, 0x04, 0x06,
- 0x0f, 0x14, 0x06, 0xe0, 0x2c, 0x0b, 0x79, 0x6f, 0x73, 0x68, 0x69, 0x64,
- 0xe1, 0xce, 0x9f, 0x74, 0xf3, 0xe0, 0x35, 0xbb, 0xf3, 0x02, 0x86, 0x68,
- 0x69, 0xf2, 0xe0, 0x26, 0xec, 0xe1, 0x02, 0x88, 0x77, 0x61, 0xae, 0x40,
- 0x5f, 0xe0, 0x31, 0x88, 0x74, 0xef, 0xd2, 0x9d, 0xef, 0xe0, 0x2d, 0xd1,
- 0x6e, 0x6f, 0x6d, 0x69, 0xf9, 0xac, 0x6d, 0xe9, 0x02, 0x85, 0x6e, 0xef,
- 0xe0, 0x2b, 0x51, 0xae, 0x60, 0x2c, 0x23, 0xc7, 0x56, 0x6b, 0x61, 0x77,
- 0xe1, 0x02, 0x89, 0x67, 0x75, 0x63, 0x68, 0x69, 0x6b, 0xef, 0xce, 0x5a,
- 0xae, 0x5a, 0x31, 0xd1, 0xe5, 0x69, 0x64, 0x65, 0xf2, 0xdb, 0x28, 0x65,
- 0x64, 0xe1, 0xe0, 0x2c, 0x08, 0xe5, 0x05, 0x0e, 0xe0, 0x31, 0x63, 0x74,
- 0x74, 0x65, 0x72, 0x74, 0x64, 0x61, 0x73, 0x6e, 0x65, 0x74, 0xfa, 0xd3,
- 0x20, 0x66, 0x75, 0xeb, 0xce, 0x2f, 0x64, 0x61, 0x69, 0x2e, 0x69, 0x77,
- 0x61, 0xf4, 0xe0, 0x31, 0x7c, 0x63, 0x68, 0x75, 0xae, 0x04, 0xe0, 0x2a,
- 0xe7, 0x74, 0xef, 0x60, 0x30, 0x7d, 0xc2, 0x78, 0xf4, 0x04, 0xe0, 0x34,
- 0xd6, 0x70, 0x61, 0x63, 0x63, 0x65, 0x73, 0xf3, 0xd3, 0x74, 0xf3, 0xd7,
- 0x57, 0xf2, 0x10, 0x0a, 0x08, 0x40, 0xd0, 0x1e, 0x40, 0x5f, 0x3d, 0x60,
- 0x22, 0x27, 0x50, 0x00, 0xc2, 0x4f, 0x1f, 0xc3, 0x02, 0x82, 0xf8, 0x97,
- 0xe6, 0xe0, 0x2b, 0x40, 0x75, 0x73, 0x6b, 0x79, 0x2e, 0xe4, 0xd8, 0x22,
- 0xef, 0x09, 0x04, 0x09, 0x06, 0x40, 0xaa, 0xe0, 0x28, 0x82, 0xf9, 0xe0,
- 0x2f, 0xcd, 0xf3, 0x04, 0xe0, 0x2f, 0xc4, 0x69, 0xee, 0xd3, 0x75, 0x6e,
- 0x74, 0xe9, 0xe0, 0x22, 0x46, 0xed, 0x02, 0x89, 0xae, 0x04, 0xe0, 0x23,
- 0xaf, 0xe8, 0xe0, 0x34, 0x81, 0xad, 0x14, 0x09, 0x06, 0x04, 0x05, 0x06,
- 0x04, 0x06, 0x07, 0x17, 0x0f, 0x05, 0x09, 0x04, 0x02, 0x04, 0x05, 0x0a,
- 0xdf, 0xb4, 0xf7, 0x40, 0x77, 0x42, 0x5c, 0x55, 0x5c, 0xd3, 0xae, 0xf6,
- 0x40, 0x6e, 0xe0, 0x2b, 0x3a, 0xf5, 0xe0, 0x2b, 0xa2, 0xf4, 0x4d, 0xc2,
- 0xdd, 0xf3, 0xf3, 0x50, 0x28, 0xe0, 0x20, 0x27, 0xf2, 0xe0, 0x2b, 0xbf,
- 0xf0, 0x40, 0x55, 0xe0, 0x34, 0x64, 0xef, 0x19, 0x60, 0x31, 0x8c, 0xc3,
- 0x0e, 0xee, 0x0e, 0x04, 0x42, 0x92, 0x4d, 0x6d, 0x5b, 0xc8, 0x42, 0x0e,
- 0x42, 0x51, 0xc3, 0xf3, 0xea, 0xe0, 0x35, 0x7b, 0xe8, 0xe0, 0x35, 0x77,
- 0xed, 0x31, 0x4d, 0x5e, 0x52, 0xb0, 0x48, 0x50, 0x42, 0xdc, 0x2c, 0x44,
- 0x8a, 0xc4, 0x3e, 0xeb, 0x57, 0xda, 0xdc, 0x76, 0xe9, 0x1d, 0x4d, 0x5e,
- 0x60, 0x21, 0x15, 0xc1, 0x7d, 0xe8, 0xe0, 0x2b, 0x7a, 0xe7, 0x90, 0xe6,
- 0xe0, 0x2e, 0x81, 0xe4, 0x4f, 0xd3, 0xdd, 0xd6, 0xe3, 0x05, 0x60, 0x2b,
- 0x20, 0x9a, 0xe1, 0xe0, 0x35, 0x41, 0xe1, 0x08, 0x60, 0x2e, 0x66, 0x42,
- 0xe3, 0xc3, 0x0e, 0xfa, 0xe0, 0x35, 0x18, 0xe7, 0x04, 0xe0, 0x2e, 0xff,
- 0xe1, 0xe0, 0x25, 0x2f, 0x69, 0x75, 0x6c, 0xe9, 0x02, 0x81, 0x2d, 0xf6,
- 0x03, 0x0b, 0x81, 0xe5, 0x03, 0x07, 0x81, 0x6e, 0x65, 0x7a, 0x69, 0xe1,
- 0x02, 0x81, 0x2d, 0x67, 0x69, 0x75, 0xec, 0xe0, 0x2e, 0x85, 0xe5, 0x08,
- 0x07, 0x08, 0x40, 0x42, 0xe0, 0x2d, 0x1f, 0x73, 0x65, 0x6e, 0xe9, 0xe0,
- 0x30, 0x01, 0x6e, 0x63, 0x68, 0x6b, 0x69, 0xf3, 0xd9, 0x5b, 0xe5, 0x09,
- 0x06, 0x07, 0x04, 0x14, 0x0e, 0xe0, 0x34, 0xbd, 0x74, 0x6c, 0xf3, 0xe0,
- 0x33, 0x80, 0x73, 0x69, 0x74, 0x65, 0xae, 0xd7, 0x30, 0x6d, 0xf9, 0xcd,
- 0x9e, 0xe4, 0x02, 0x89, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0xf0, 0xe0, 0x32,
- 0x06, 0x64, 0x6e, 0x73, 0xae, 0x56, 0xb6, 0xdb, 0x4a, 0x62, 0x6f, 0xf8,
- 0x02, 0x81, 0x2d, 0x6f, 0x73, 0xae, 0x60, 0x34, 0x31, 0xc0, 0x8a, 0x2e,
- 0xe8, 0xe0, 0x34, 0x2b, 0x64, 0x72, 0xe9, 0xc1, 0xdb, 0xe1, 0x05, 0x2b,
- 0xe0, 0x29, 0xb7, 0x6d, 0x65, 0xf2, 0x02, 0x86, 0x63, 0x61, 0x6e, 0xf6,
- 0xcc, 0x89, 0xae, 0x06, 0x0c, 0x08, 0xe0, 0x33, 0x12, 0xf7, 0x02, 0x85,
- 0x69, 0xeb, 0xe0, 0x34, 0x3e, 0x65, 0xe2, 0xdd, 0x60, 0x70, 0x68, 0x6f,
- 0x74, 0xef, 0xe0, 0x34, 0x1b, 0x6d, 0x65, 0xe4, 0xd6, 0x7d, 0x31, 0x2d,
- 0x64, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0xe4, 0xd6, 0x74, 0xad, 0x02,
- 0x95, 0x70, 0x61, 0x72, 0xad, 0x02, 0x82, 0xb2, 0x82, 0x31, 0x2e, 0x62,
- 0x61, 0x72, 0x65, 0x6d, 0x65, 0x74, 0x61, 0xec, 0xc0, 0xeb, 0x31, 0x2e,
- 0x70, 0x61, 0x61, 0x73, 0x2e, 0x6d, 0x61, 0x73, 0x73, 0x69, 0x76, 0x65,
- 0x67, 0x72, 0x69, 0xe4, 0xe0, 0x34, 0x28, 0xef, 0x0f, 0x07, 0x04, 0x40,
- 0x81, 0x09, 0x19, 0x54, 0xbd, 0x4c, 0x73, 0x4a, 0xd9, 0xc7, 0x82, 0x75,
- 0x6e, 0x64, 0xe1, 0xe0, 0x27, 0xa2, 0xf3, 0xe0, 0x2f, 0xdc, 0xf2, 0x0a,
- 0x0c, 0x0b, 0x07, 0x13, 0x1c, 0x06, 0xe0, 0x24, 0x13, 0x75, 0xed, 0x06,
- 0x60, 0x33, 0x19, 0xc1, 0x02, 0xfa, 0xe0, 0x23, 0xe8, 0xf4, 0x02, 0x83,
- 0xe5, 0xc1, 0x34, 0x61, 0xec, 0xe0, 0x32, 0xb4, 0x73, 0xe1, 0x60, 0x2d,
- 0x72, 0xc4, 0xa5, 0xec, 0x02, 0x85, 0x1f, 0x43, 0xec, 0x05, 0x81, 0xe9,
- 0x02, 0x81, 0x2d, 0x63, 0x65, 0x73, 0xe5, 0xe0, 0x2b, 0xae, 0xe7, 0x02,
- 0x90, 0x6f, 0x74, 0x2e, 0xe8, 0x02, 0x83, 0x69, 0xf3, 0x83, 0x65, 0x72,
- 0x2e, 0x6e, 0xe1, 0xdd, 0xdd, 0x65, 0x62, 0x6c, 0x6f, 0x63, 0xeb, 0xe0,
- 0x32, 0xbd, 0xe4, 0x60, 0x32, 0x3f, 0xc1, 0x96, 0xad, 0x05, 0x03, 0x04,
- 0x06, 0x87, 0x74, 0xe8, 0x8e, 0x73, 0x6f, 0xed, 0x8a, 0x6f, 0x75, 0xf2,
- 0xe0, 0x23, 0x8e, 0x6d, 0x6f, 0x72, 0xe5, 0xe0, 0x30, 0x93, 0x62, 0x65,
- 0x74, 0x74, 0x65, 0xf2, 0xe0, 0x30, 0x8a, 0xef, 0x50, 0x57, 0x52, 0x59,
- 0x4e, 0xb0, 0xc2, 0x4c, 0xec, 0x03, 0x04, 0x88, 0xec, 0xe0, 0x2c, 0x83,
- 0x6b, 0x65, 0x62, 0x69, 0xe2, 0xe0, 0x2c, 0x7d, 0x69, 0x6f, 0x6e, 0x65,
- 0x74, 0x77, 0x6f, 0xf2, 0x8c, 0x67, 0xe7, 0xe0, 0x2c, 0xf9, 0xee, 0x04,
- 0x04, 0xde, 0xa1, 0x77, 0xeb, 0xdc, 0x4d, 0x63, 0x2e, 0x66, 0x72, 0x2d,
- 0x70, 0x61, 0x72, 0x2e, 0x73, 0x63, 0xf7, 0xdb, 0x91, 0xed, 0x04, 0xe0,
- 0x33, 0x6a, 0xae, 0x60, 0x31, 0x67, 0x40, 0x6e, 0xba, 0xec, 0x0b, 0x10,
- 0x0e, 0x2a, 0x13, 0x0c, 0x06, 0x5b, 0x7a, 0xd1, 0xcb, 0xf9, 0x06, 0x60,
- 0x25, 0xb4, 0xcd, 0x9c, 0x6e, 0x6e, 0x68, 0x6f, 0x73, 0xf4, 0xe0, 0x2d,
- 0x82, 0x74, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x6d, 0x75, 0x6e,
- 0xe9, 0xd0, 0x1d, 0xef, 0x05, 0x03, 0x18, 0xd4, 0x5e, 0xf7, 0xc2, 0x61,
- 0xf2, 0x08, 0x09, 0x5d, 0xf7, 0x4c, 0xdb, 0xc2, 0x24, 0xe9, 0x04, 0xe0,
- 0x26, 0x4a, 0xf0, 0xe0, 0x29, 0xa5, 0x65, 0x6e, 0xe3, 0xe0, 0x2c, 0x13,
- 0xf0, 0x04, 0xe0, 0x32, 0x18, 0xf0, 0xe0, 0x2a, 0x5f, 0xe9, 0x07, 0x08,
- 0x60, 0x20, 0x08, 0xd1, 0x9e, 0x67, 0x68, 0xf4, 0x60, 0x30, 0x27, 0xc0,
- 0x74, 0xe3, 0xdc, 0x0e, 0xe5, 0x02, 0x83, 0xf3, 0xc6, 0x9a, 0x6b, 0x6b,
- 0xe5, 0xe0, 0x23, 0x4d, 0x64, 0x72, 0xf6, 0xe0, 0x32, 0xe5, 0xe1, 0x06,
- 0x03, 0x06, 0xe0, 0x31, 0x45, 0xf4, 0xdc, 0xcf, 0x70, 0x2e, 0xe9, 0xe0,
- 0x26, 0xa8, 0x6b, 0x73, 0x74, 0xe1, 0xe0, 0x2e, 0xb4, 0xeb, 0xe0, 0x21,
- 0x6f, 0xea, 0x06, 0x04, 0x5f, 0x55, 0xd3, 0x6f, 0xe5, 0xe0, 0x27, 0x14,
- 0x61, 0xec, 0xe0, 0x27, 0x19, 0xe9, 0x0c, 0x0e, 0x06, 0x40, 0x5d, 0x22,
- 0x2c, 0x04, 0x09, 0xe0, 0x31, 0xe6, 0xf4, 0x05, 0x04, 0xe0, 0x32, 0xa8,
- 0xee, 0xe0, 0x2b, 0x3e, 0xea, 0xe0, 0x23, 0x53, 0x73, 0xe8, 0x5d, 0x20,
- 0xd5, 0x82, 0xf2, 0x02, 0x9d, 0xed, 0x02, 0x85, 0x64, 0xe1, 0xe0, 0x30,
- 0xa3, 0xae, 0x0e, 0x60, 0x27, 0x97, 0x40, 0x79, 0x46, 0xf2, 0x41, 0xf6,
- 0x40, 0x51, 0xc1, 0x02, 0xee, 0x60, 0x27, 0x9a, 0xc8, 0x1c, 0xe5, 0x07,
- 0x21, 0x0d, 0x5c, 0x27, 0xd6, 0x21, 0xf7, 0x02, 0x85, 0x65, 0xe2, 0xe0,
- 0x30, 0xfb, 0x61, 0x6c, 0xec, 0x02, 0x8a, 0x65, 0x64, 0x72, 0x65, 0x70,
- 0x6c, 0x69, 0xf4, 0xd9, 0x5e, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61,
- 0xf9, 0xdc, 0x6a, 0xee, 0x02, 0x84, 0xfa, 0xe0, 0x2b, 0x49, 0x65, 0x74,
- 0x2e, 0xe3, 0xdb, 0x01, 0x62, 0x61, 0x73, 0xe5, 0xe0, 0x31, 0x57, 0xee,
- 0x03, 0x06, 0x8e, 0xee, 0x60, 0x26, 0x8c, 0xc3, 0x0d, 0xe1, 0x04, 0xe0,
- 0x2f, 0xe3, 0x6e, 0xe3, 0x04, 0xe0, 0x30, 0xb0, 0xe9, 0xcc, 0x81, 0xae,
- 0x05, 0x44, 0x13, 0xcc, 0xc3, 0xe3, 0xe0, 0x31, 0xca, 0xec, 0x02, 0x86,
- 0xed, 0x60, 0x31, 0x19, 0xc1, 0x02, 0x65, 0x67, 0x65, 0x61, 0xf2, 0x03,
- 0xdc, 0x09, 0xad, 0x07, 0x04, 0x04, 0x04, 0x03, 0xcd, 0xc6, 0x73, 0xe7,
- 0xdb, 0xff, 0x6a, 0xf0, 0xdb, 0xfb, 0x67, 0xe2, 0xdb, 0xf7, 0xe4, 0xcd,
- 0xc9, 0x61, 0xf5, 0xdb, 0xf0, 0xe5, 0xe0, 0x2d, 0x13, 0xe4, 0x04, 0xe0,
- 0x30, 0x5f, 0x65, 0xec, 0xd6, 0xfa, 0xae, 0x06, 0x60, 0x2b, 0x81, 0xc4,
- 0x5c, 0xe3, 0x04, 0xe0, 0x30, 0x81, 0x6c, 0x6f, 0x75, 0x64, 0x70, 0x6c,
- 0x61, 0x74, 0x66, 0x6f, 0x72, 0xed, 0xe0, 0x31, 0x74, 0xe8, 0x06, 0x04,
- 0x09, 0xe0, 0x20, 0x50, 0xf6, 0xe0, 0x20, 0x5c, 0xf3, 0x04, 0xe0, 0x30,
- 0x26, 0xeb, 0xe0, 0x20, 0x53, 0x2d, 0x6d, 0x75, 0x65, 0x6e, 0x73, 0xf4,
- 0xe0, 0x20, 0xc4, 0xe5, 0x0c, 0x05, 0x08, 0x10, 0x08, 0x05, 0x06, 0x45,
- 0x21, 0xe0, 0x2a, 0x4c, 0xf4, 0x5b, 0x61, 0xd4, 0xa9, 0x73, 0x74, 0x65,
- 0x2d, 0xe9, 0xe0, 0x25, 0x6d, 0xf2, 0x03, 0xdf, 0xac, 0xf2, 0x04, 0xe0,
- 0x2e, 0xaf, 0x61, 0xf2, 0x60, 0x2a, 0xf9, 0xc4, 0x76, 0x6e, 0x74, 0x69,
- 0x67, 0x65, 0xf2, 0xd8, 0xb6, 0x69, 0xf2, 0xe0, 0x27, 0xfd, 0x65, 0x64,
- 0x62, 0xe1, 0xc4, 0xa9, 0xe4, 0x06, 0x19, 0x04, 0xe0, 0x2b, 0xa7, 0x6f,
- 0x72, 0xe1, 0x02, 0x87, 0x70, 0x65, 0x6f, 0x70, 0xec, 0xdc, 0x23, 0x69,
- 0x6e, 0x66, 0x72, 0x61, 0x63, 0x6c, 0x6f, 0x75, 0xe4, 0xe0, 0x2e, 0x83,
- 0xea, 0xe0, 0x2f, 0xb9, 0xe5, 0x04, 0xe0, 0x29, 0xc5, 0xf2, 0xe0, 0x2e,
- 0x64, 0xe3, 0xe0, 0x2f, 0x3f, 0x62, 0xf8, 0x02, 0x81, 0x2d, 0xef, 0xc1,
- 0x0d, 0xe1, 0x09, 0x06, 0x40, 0x4b, 0x0e, 0x13, 0x12, 0x06, 0x8c, 0x75,
- 0x73, 0xeb, 0xe0, 0x2f, 0x94, 0xf3, 0x02, 0xb9, 0xf4, 0x06, 0x0d, 0x08,
- 0xe0, 0x31, 0x08, 0x76, 0x70, 0xf3, 0x02, 0x85, 0xae, 0x53, 0x62, 0xc6,
- 0x84, 0xad, 0xcc, 0xec, 0x73, 0x74, 0x61, 0x63, 0xeb, 0xe0, 0x30, 0xe6,
- 0x6c, 0xf9, 0x02, 0x85, 0x6c, 0xe2, 0xe0, 0x30, 0xde, 0xad, 0x02, 0x8b,
- 0x74, 0x65, 0x72, 0x72, 0x61, 0x72, 0x69, 0xf5, 0xe0, 0x27, 0x3b, 0x65,
- 0x64, 0xe7, 0xe0, 0x29, 0x43, 0x68, 0x69, 0x6f, 0xee, 0x04, 0xe0, 0x30,
- 0xe3, 0x73, 0x74, 0x6f, 0xf2, 0xe0, 0x21, 0xf2, 0xf2, 0x05, 0x5a, 0x98,
- 0xd4, 0xe3, 0xed, 0x04, 0xe0, 0x30, 0xd1, 0xe5, 0xcf, 0x3d, 0xee, 0x06,
- 0x60, 0x2e, 0x5e, 0xc2, 0x69, 0x74, 0x61, 0x73, 0x79, 0x6c, 0x65, 0x61,
- 0x67, 0x75, 0xe5, 0xce, 0x09, 0xed, 0x02, 0x8a, 0x69, 0x6c, 0xf9, 0x04,
- 0xe0, 0x30, 0xb1, 0xe4, 0xdc, 0xf1, 0x2e, 0xf0, 0xe0, 0x2e, 0x46, 0x6b,
- 0x65, 0x66, 0xf5, 0xdd, 0xaf, 0xe9, 0x06, 0x46, 0x80, 0xe0, 0x27, 0xcd,
- 0x72, 0x77, 0xe9, 0xca, 0x15, 0xe7, 0xe0, 0x2f, 0x1a, 0xe5, 0x22, 0x11,
- 0x40, 0xb2, 0x2b, 0x40, 0x86, 0x1a, 0x40, 0x61, 0x1f, 0x0d, 0x05, 0x40,
- 0xb1, 0x40, 0xf2, 0x27, 0x0a, 0x24, 0x11, 0x16, 0x41, 0x7a, 0x40, 0x43,
- 0x14, 0x40, 0x48, 0x03, 0x0f, 0xe0, 0x25, 0x39, 0x7a, 0x70, 0x72, 0x6f,
- 0x78, 0x79, 0x2e, 0x6b, 0x75, 0x6c, 0x65, 0x75, 0x76, 0x65, 0xee, 0xd3,
- 0x07, 0xf8, 0x07, 0x08, 0x27, 0x04, 0x40, 0x53, 0x8b, 0x74, 0x72, 0x61,
- 0x73, 0xf0, 0xe0, 0x29, 0x66, 0xf0, 0x03, 0x09, 0x84, 0x72, 0x65, 0x73,
- 0xf3, 0x60, 0x2d, 0x6a, 0xc2, 0xdd, 0x6f, 0xf3, 0xd1, 0xe4, 0x65, 0x72,
- 0xf4, 0x04, 0xe0, 0x30, 0x37, 0x73, 0x2d, 0x63, 0x6f, 0x6d, 0x70, 0x74,
- 0x61, 0x62, 0x6c, 0x65, 0xf3, 0xe0, 0x2f, 0x99, 0x6e, 0xe5, 0xd4, 0x98,
- 0x65, 0x63, 0x75, 0x74, 0x65, 0x2d, 0x61, 0x70, 0x69, 0xae, 0x08, 0x04,
- 0x1a, 0x42, 0x86, 0x16, 0x05, 0x9a, 0x69, 0xec, 0xc2, 0xec, 0x65, 0x75,
- 0xad, 0x05, 0x08, 0x42, 0xbd, 0x83, 0x73, 0x6f, 0x75, 0x74, 0xe8, 0xe0,
- 0x28, 0x21, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0xec, 0xe0, 0x28, 0x17,
- 0xe1, 0x03, 0xc2, 0xf9, 0x70, 0xad, 0x04, 0x42, 0xdb, 0x93, 0x73, 0x6f,
- 0x75, 0x74, 0xe8, 0x04, 0xe0, 0x28, 0x01, 0x65, 0x61, 0x73, 0x74, 0xad,
- 0x07, 0x42, 0xd5, 0x60, 0x25, 0x23, 0x82, 0xb4, 0xe0, 0x27, 0xfa, 0x63,
- 0x68, 0x61, 0x6e, 0x67, 0xe5, 0x60, 0x2c, 0xee, 0xc2, 0xdd, 0xae, 0x02,
- 0x89, 0x6f, 0x72, 0x74, 0x73, 0x69, 0x6e, 0x66, 0xef, 0x8a, 0x66, 0x75,
- 0x74, 0x75, 0x72, 0x65, 0x63, 0x6d, 0x73, 0x2e, 0xe1, 0xcd, 0x27, 0xf6,
- 0x02, 0x8d, 0x6a, 0x65, 0x2d, 0x6f, 0x67, 0x2d, 0x68, 0x6f, 0x72, 0xee,
- 0xe0, 0x2b, 0x4b, 0x65, 0xee, 0x07, 0x0c, 0x60, 0x26, 0x05, 0xc5, 0x2f,
- 0x1f, 0x43, 0x61, 0x1f, 0x45, 0x61, 0x1f, 0x45, 0xe1, 0xe0, 0x27, 0xf2,
- 0x61, 0x73, 0xf3, 0xe0, 0x27, 0xec, 0xf5, 0x09, 0x10, 0x06, 0x33, 0x60,
- 0x2c, 0xc6, 0xc2, 0x69, 0x72, 0xef, 0x02, 0x86, 0x76, 0x69, 0xf3, 0xe0,
- 0x22, 0xdf, 0x64, 0x69, 0xf2, 0xe0, 0x2e, 0xe1, 0x6e, 0x2e, 0xe5, 0xe0,
- 0x2f, 0x64, 0xae, 0x0c, 0x11, 0x09, 0x03, 0x5d, 0xcb, 0x47, 0xfb, 0x46,
- 0xa3, 0xc2, 0xc8, 0xf0, 0x03, 0xde, 0x09, 0x79, 0x74, 0x68, 0x6f, 0x6e,
- 0x61, 0x6e, 0x79, 0x77, 0x68, 0xe5, 0xd4, 0xe0, 0x6d, 0x65, 0x74, 0x65,
- 0x6f, 0xf2, 0xe0, 0x2e, 0x51, 0xe9, 0xc8, 0x40, 0x65, 0x6e, 0x63, 0x6f,
- 0x77, 0x61, 0xf9, 0xd7, 0x51, 0xad, 0x0a, 0x0e, 0x08, 0x02, 0x02, 0x02,
- 0x57, 0x35, 0xd3, 0xc8, 0x77, 0x65, 0x73, 0x74, 0xad, 0x05, 0x60, 0x25,
- 0xd4, 0x82, 0xb3, 0xe0, 0x25, 0xd6, 0x6e, 0x6f, 0x72, 0x74, 0xe8, 0xe0,
- 0x25, 0xb9, 0xb4, 0x86, 0xb3, 0x84, 0xb2, 0x82, 0x31, 0x2e, 0x65, 0x76,
- 0x65, 0x6e, 0x6e, 0x6f, 0xe4, 0xe0, 0x27, 0x54, 0xf4, 0x08, 0x07, 0x04,
- 0x60, 0x26, 0xab, 0xc8, 0x3d, 0x6e, 0xe5, 0x60, 0x27, 0xd5, 0xc5, 0x87,
- 0xe3, 0xe0, 0x2d, 0x90, 0x61, 0x6a, 0x69, 0xed, 0xca, 0xd5, 0xf3, 0x0a,
- 0x34, 0x04, 0x09, 0x09, 0x4e, 0x45, 0xe0, 0x20, 0x48, 0xf4, 0x05, 0x05,
- 0xe0, 0x28, 0x14, 0x2e, 0xf0, 0xe0, 0x2d, 0x76, 0xad, 0x03, 0x0c, 0x88,
- 0x6d, 0x6f, 0x6e, 0x2d, 0x62, 0x6c, 0x6f, 0x67, 0x75, 0xe5, 0xc5, 0xbf,
- 0x6c, 0x65, 0x2d, 0x70, 0x61, 0x74, 0xf2, 0x8f, 0x61, 0x2d, 0x6c, 0x61,
- 0x2d, 0x6d, 0xe1, 0x02, 0x83, 0x73, 0xe9, 0x83, 0x69, 0x73, 0xef, 0xc6,
- 0xb9, 0xf0, 0xe0, 0x2d, 0x47, 0xe1, 0x04, 0xe0, 0x28, 0x77, 0xee, 0xe0,
- 0x2c, 0xe4, 0xae, 0x57, 0xa5, 0x45, 0x83, 0x4b, 0x09, 0x03, 0x83, 0x2d,
- 0x31, 0x2e, 0x61, 0x78, 0x61, 0x72, 0x6e, 0x65, 0xf4, 0xd6, 0xa3, 0xf2,
- 0x08, 0x0c, 0x51, 0xf5, 0x4b, 0x14, 0xd0, 0x27, 0x6f, 0x74, 0xe9, 0x02,
- 0x82, 0xeb, 0x82, 0x63, 0xe1, 0xe0, 0x2d, 0x6d, 0xe9, 0x02, 0x84, 0xed,
- 0xe0, 0x22, 0xcc, 0x63, 0xf3, 0x8f, 0x71, 0x75, 0x69, 0x70, 0x6d, 0x65,
- 0x6e, 0xf4, 0x60, 0x2b, 0x7d, 0xc2, 0xdd, 0x70, 0xf3, 0xe0, 0x26, 0xf5,
- 0xee, 0x0f, 0x22, 0x12, 0x04, 0x1d, 0x04, 0x0e, 0x20, 0x0f, 0x04, 0x60,
- 0x25, 0x5f, 0xc6, 0x44, 0xf4, 0x02, 0x9c, 0x65, 0xf2, 0x02, 0x87, 0x74,
- 0x61, 0x69, 0xee, 0xe0, 0x26, 0x77, 0x70, 0x72, 0x69, 0x73, 0xe5, 0x04,
- 0xe0, 0x2b, 0xc0, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0xae, 0xdd, 0xc3, 0xae,
- 0xdc, 0xd7, 0xf3, 0x02, 0x8a, 0x63, 0x61, 0x6c, 0x65, 0x64, 0x2e, 0xf3,
- 0xe0, 0x2b, 0x47, 0x2e, 0xf4, 0xe0, 0x2c, 0xd5, 0xe9, 0xe0, 0x22, 0xd5,
- 0xe7, 0x03, 0x0f, 0x85, 0x69, 0x6e, 0xe5, 0x04, 0xe0, 0x2b, 0x20, 0x65,
- 0xf2, 0x58, 0x79, 0x52, 0xa5, 0xc2, 0xdd, 0x65, 0xf2, 0xe0, 0x26, 0xd7,
- 0xae, 0x60, 0x2c, 0x62, 0xb3, 0xe6, 0xe0, 0x2c, 0x8f, 0xe5, 0x02, 0x85,
- 0x72, 0xe7, 0xe0, 0x2b, 0xab, 0x62, 0x61, 0xeb, 0xe0, 0x23, 0x4c, 0x64,
- 0x6f, 0xe6, 0x02, 0x8d, 0x74, 0x68, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72,
- 0x6e, 0xe5, 0xe0, 0x24, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65,
- 0x74, 0xae, 0x60, 0x2a, 0xef, 0xc2, 0xac, 0xe3, 0x02, 0x84, 0xf2, 0xe0,
- 0x2c, 0x3f, 0x6f, 0x72, 0x65, 0x61, 0xf0, 0xe0, 0x23, 0xc9, 0xe1, 0xe0,
- 0x24, 0xd0, 0x2d, 0x72, 0x6f, 0xef, 0xe0, 0x29, 0xca, 0xed, 0x07, 0x40,
- 0xaa, 0x0b, 0x0d, 0x10, 0x93, 0xf2, 0x06, 0x07, 0x0a, 0xe0, 0x2b, 0x7c,
- 0x73, 0x74, 0x75, 0x64, 0x69, 0xef, 0x90, 0x6e, 0x6f, 0x74, 0x65, 0x62,
- 0x6f, 0x6f, 0x6b, 0xf3, 0x86, 0x61, 0x70, 0x70, 0x75, 0x69, 0x2d, 0x70,
- 0x72, 0x6f, 0x64, 0xae, 0x06, 0x16, 0x05, 0x08, 0x12, 0x99, 0x75, 0x73,
- 0xad, 0x05, 0x05, 0xe0, 0x25, 0x7d, 0x77, 0xe5, 0xe0, 0x25, 0x82, 0x67,
- 0x6f, 0x76, 0xad, 0x40, 0x61, 0xe0, 0x24, 0xf8, 0x73, 0x61, 0xad, 0xc0,
- 0x59, 0x6d, 0x65, 0xad, 0x40, 0x5b, 0xe0, 0x24, 0xf6, 0x65, 0x75, 0xad,
- 0x07, 0x03, 0x40, 0x49, 0xe0, 0x24, 0xf6, 0x77, 0xe5, 0xb7, 0x6e, 0x6f,
- 0xf2, 0xc0, 0x49, 0xe3, 0x02, 0x91, 0x6e, 0x2d, 0x6e, 0x6f, 0x72, 0x74,
- 0xe8, 0x02, 0x84, 0x77, 0x65, 0x73, 0x74, 0x2d, 0xb1, 0xce, 0x8e, 0x61,
- 0xad, 0xe0, 0x25, 0x24, 0xe1, 0x02, 0xa6, 0x70, 0xad, 0x03, 0x09, 0x93,
- 0x73, 0x6f, 0x75, 0x74, 0xe8, 0x09, 0xe0, 0x25, 0x1f, 0x6e, 0x6f, 0x72,
- 0x74, 0x68, 0x65, 0x61, 0x73, 0x74, 0xad, 0x05, 0x60, 0x25, 0x23, 0x82,
- 0xb3, 0xe0, 0x25, 0x25, 0x65, 0xe1, 0xe0, 0x24, 0xf8, 0x66, 0x2d, 0x73,
- 0x6f, 0x75, 0x74, 0xe8, 0xe0, 0x25, 0x05, 0xf0, 0x04, 0xe0, 0x2b, 0x8d,
- 0x72, 0x65, 0xf3, 0xe0, 0x2a, 0x2c, 0x69, 0x6c, 0x69, 0xe1, 0x02, 0x81,
- 0x2d, 0x72, 0x6f, 0x6d, 0xe1, 0xd7, 0x7c, 0x65, 0xf2, 0x02, 0x88, 0x67,
- 0x65, 0x6e, 0x63, 0xf9, 0xe0, 0x29, 0xef, 0xe3, 0xe0, 0x2a, 0x62, 0xe2,
- 0x05, 0x08, 0xe0, 0x27, 0xff, 0x61, 0x69, 0x78, 0x61, 0x64, 0xe1, 0xcb,
- 0x43, 0x2e, 0xeb, 0xe0, 0x2a, 0x45, 0x61, 0xe9, 0xe0, 0x2a, 0x61, 0xec,
- 0x07, 0x04, 0x0f, 0x5a, 0x28, 0xce, 0x69, 0x76, 0xe5, 0xd5, 0x22, 0x65,
- 0x6d, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x2e, 0xe3, 0x03, 0xd4, 0xb7, 0xef,
- 0xc7, 0xac, 0xe2, 0x02, 0x86, 0x6c, 0x61, 0xe7, 0xe0, 0x27, 0xd1, 0xae,
- 0xcb, 0x51, 0x6b, 0x6c, 0x6f, 0x67, 0x65, 0x73, 0xae, 0xe0, 0x28, 0x1e,
- 0xe9, 0x03, 0x07, 0x82, 0x68, 0x65, 0x69, 0x6a, 0xe9, 0xc1, 0xf7, 0xe7,
- 0xa5, 0xe4, 0x05, 0x5c, 0xc3, 0xce, 0x11, 0xf3, 0x05, 0x05, 0xe0, 0x20,
- 0xa9, 0x6b, 0xef, 0xe0, 0x25, 0x72, 0x62, 0x65, 0xf2, 0xe0, 0x25, 0x6c,
- 0xe7, 0x05, 0x07, 0xe0, 0x2c, 0x4b, 0x6f, 0x69, 0x73, 0xed, 0xe0, 0x2b,
- 0x53, 0x65, 0xf2, 0xd6, 0x0b, 0xe5, 0x07, 0x52, 0x08, 0x4b, 0x44, 0xce,
- 0xf3, 0x72, 0xef, 0x02, 0x86, 0x2d, 0x73, 0x74, 0x61, 0x67, 0x65, 0x2e,
- 0xef, 0xdb, 0xc2, 0xe4, 0x07, 0x41, 0x24, 0x07, 0x08, 0x29, 0x85, 0xf5,
- 0x06, 0x04, 0x09, 0xe0, 0x2c, 0x15, 0x67, 0xe9, 0xd9, 0x34, 0x63, 0x61,
- 0xf4, 0x03, 0xdf, 0x86, 0xef, 0xd1, 0x26, 0xae, 0x1c, 0x06, 0x09, 0x06,
- 0x0a, 0x1d, 0x06, 0x10, 0x08, 0x15, 0x0f, 0x12, 0x09, 0x08, 0x10, 0x04,
- 0x0d, 0x07, 0x0d, 0x11, 0x4a, 0x37, 0x03, 0x3c, 0x40, 0x47, 0xd9, 0x5e,
- 0xfa, 0x60, 0x29, 0xa5, 0xc0, 0xab, 0xf6, 0x60, 0x20, 0x0e, 0x4a, 0x67,
- 0x40, 0x42, 0xba, 0xf5, 0x60, 0x29, 0xb1, 0xc0, 0x90, 0xf4, 0x60, 0x29,
- 0x72, 0x1e, 0x12, 0x40, 0x82, 0x33, 0xb2, 0xf3, 0x13, 0x60, 0x21, 0x6c,
- 0x46, 0x9d, 0x41, 0x53, 0x1a, 0x03, 0x15, 0x40, 0x79, 0x17, 0x1c, 0x40,
- 0x51, 0xc1, 0x39, 0xe3, 0x04, 0xe0, 0x2b, 0xc0, 0xef, 0xe0, 0x2b, 0x9e,
- 0xf2, 0x60, 0x29, 0x52, 0xc1, 0xe1, 0xf0, 0x60, 0x20, 0xcc, 0x48, 0x59,
- 0x27, 0x03, 0x17, 0x18, 0x40, 0x79, 0x17, 0x2b, 0x23, 0x9f, 0xee, 0x60,
- 0x29, 0x8c, 0x40, 0xc0, 0xc1, 0x58, 0xed, 0x60, 0x24, 0x1b, 0x43, 0xc6,
- 0x41, 0x49, 0x03, 0x07, 0x03, 0x17, 0x18, 0x40, 0x79, 0x33, 0x0f, 0x40,
- 0x42, 0xc1, 0x39, 0xec, 0x5f, 0xa5, 0x41, 0x8a, 0x46, 0x9d, 0x41, 0x53,
- 0x03, 0x2f, 0x40, 0x90, 0xc0, 0x4e, 0xeb, 0x0e, 0x60, 0x28, 0xf8, 0x03,
- 0x1e, 0x1b, 0x1e, 0x40, 0x7c, 0x40, 0x63, 0xc1, 0x39, 0xf2, 0xdf, 0x35,
- 0xe9, 0x4b, 0x1f, 0x5d, 0xdf, 0x40, 0xab, 0xc0, 0x84, 0xe8, 0x60, 0x28,
- 0xf8, 0x40, 0xa8, 0xc0, 0x84, 0xe7, 0x60, 0x28, 0xc6, 0x40, 0x41, 0x03,
- 0x15, 0x1e, 0x40, 0x5b, 0x21, 0x21, 0x23, 0x1f, 0xba, 0xe6, 0xe0, 0x28,
- 0xf4, 0xe5, 0x5f, 0x5f, 0x45, 0x86, 0x43, 0xf4, 0x40, 0xab, 0x40, 0x42,
- 0xc1, 0x7b, 0xe4, 0x60, 0x28, 0xc2, 0x21, 0xc0, 0xc7, 0xe3, 0x60, 0x27,
- 0x72, 0x41, 0x4c, 0x40, 0x57, 0x40, 0x8e, 0x40, 0x51, 0xba, 0xe2, 0x60,
- 0x20, 0xc8, 0x47, 0xc9, 0x1d, 0x0a, 0x17, 0x12, 0x27, 0x40, 0x5b, 0x17,
- 0x1c, 0x32, 0x9f, 0xe1, 0x5f, 0x2d, 0x40, 0xfa, 0x48, 0x76, 0x24, 0x40,
- 0xf6, 0xc0, 0x59, 0x6f, 0x67, 0x61, 0xf7, 0xe0, 0x24, 0xf6, 0x69, 0x74,
- 0x6f, 0x72, 0xf8, 0xe0, 0x29, 0xf1, 0x67, 0xe5, 0x04, 0x0f, 0x08, 0x88,
- 0xf3, 0x02, 0x86, 0x75, 0x69, 0xf4, 0xe0, 0x25, 0x19, 0x74, 0x61, 0x63,
- 0xeb, 0xd4, 0xde, 0x6b, 0x65, 0xf9, 0x60, 0x25, 0x11, 0xc5, 0xa9, 0x63,
- 0x6f, 0x6d, 0x70, 0x75, 0xf4, 0xd5, 0x4e, 0x61, 0xf0, 0xde, 0xa6, 0x65,
- 0xeb, 0xe0, 0x29, 0x24, 0xae, 0x06, 0x06, 0x59, 0x03, 0xd0, 0x0d, 0xe3,
- 0x60, 0x28, 0xa7, 0xc0, 0xc0, 0xe1, 0xe0, 0x29, 0x2f, 0xe3, 0x06, 0x2b,
- 0x04, 0xe0, 0x2a, 0x81, 0xef, 0x07, 0x0a, 0x0c, 0x06, 0xe0, 0x2a, 0x8c,
- 0x6e, 0xef, 0x04, 0xe0, 0x20, 0x21, 0xed, 0xe0, 0x27, 0xe7, 0x6d, 0x6d,
- 0x65, 0x72, 0x63, 0x65, 0x2d, 0x73, 0x68, 0xef, 0xd8, 0xf1, 0x6c, 0x6f,
- 0xe7, 0xe0, 0x27, 0xd5, 0x2e, 0xe2, 0x60, 0x28, 0x4a, 0xc0, 0xe7, 0xee,
- 0xe0, 0x29, 0x29, 0x68, 0x69, 0x7a, 0x65, 0x6e, 0x2e, 0x66, 0x75, 0x6b,
- 0xf5, 0xe0, 0x28, 0x6a, 0xe2, 0x04, 0xe0, 0x25, 0xb7, 0xe9, 0x02, 0x84,
- 0x7a, 0xae, 0xcc, 0x15, 0xee, 0x04, 0xe0, 0x25, 0x9f, 0xef, 0xdc, 0x32,
- 0xe1, 0x03, 0x17, 0xa8, 0xf4, 0x05, 0x05, 0xe0, 0x2a, 0x51, 0x6f, 0xee,
- 0xe0, 0x21, 0x94, 0x69, 0x6e, 0x67, 0x2d, 0x6f, 0x72, 0x67, 0x61, 0xee,
- 0xe0, 0x26, 0xe0, 0xf3, 0x02, 0x8b, 0x79, 0x70, 0x61, 0x6e, 0x65, 0x6c,
- 0xae, 0x4c, 0x86, 0xdc, 0x40, 0xf4, 0x03, 0x05, 0x86, 0x75, 0x73, 0xb2,
- 0xcf, 0xc4, 0x61, 0x73, 0x69, 0xe1, 0xcf, 0xbe, 0x2d, 0x6b, 0x61, 0x7a,
- 0x61, 0x6b, 0x68, 0x73, 0xf4, 0xdb, 0xd2, 0x72, 0xf4, 0xe0, 0x27, 0x8b,
- 0xb4, 0xc6, 0xf9, 0xb1, 0x02, 0x88, 0x36, 0x34, 0x2e, 0x61, 0xf2, 0xe0,
- 0x28, 0x17, 0x32, 0xae, 0xdf, 0x1b, 0xae, 0x58, 0x9f, 0xd1, 0x64, 0xe4,
- 0x22, 0x06, 0x40, 0xeb, 0x0a, 0x12, 0x1e, 0x04, 0x1b, 0x40, 0x50, 0x03,
- 0x40, 0x74, 0x40, 0x57, 0x09, 0x05, 0x40, 0xeb, 0x11, 0x06, 0x06, 0x41,
- 0x7c, 0x38, 0x05, 0x40, 0xce, 0x60, 0x21, 0x66, 0x21, 0x92, 0x1f, 0x43,
- 0x78, 0xee, 0xdf, 0x0f, 0xf9, 0x05, 0x5c, 0x0a, 0xcd, 0x6e, 0xee, 0x0b,
- 0x08, 0x04, 0x07, 0x40, 0x68, 0x1d, 0x05, 0x1e, 0xc0, 0xb2, 0xf6, 0x03,
- 0xc0, 0xbd, 0xb6, 0xe0, 0x29, 0x9d, 0xf5, 0xe0, 0x29, 0x99, 0x73, 0x65,
- 0x72, 0xf6, 0xe0, 0x26, 0xe6, 0x64, 0x6e, 0xf3, 0x03, 0x03, 0x98, 0xb1,
- 0xc6, 0x77, 0xae, 0x0b, 0x4b, 0xf7, 0x4b, 0x7b, 0x41, 0xfb, 0x4d, 0x0c,
- 0xc0, 0x56, 0xe4, 0x03, 0xc0, 0x84, 0x61, 0x70, 0x70, 0x6e, 0x6f, 0xe4,
- 0xdf, 0xf6, 0xad, 0x0e, 0x09, 0x07, 0x06, 0x08, 0x06, 0x05, 0x09, 0x42,
- 0x0e, 0x42, 0x83, 0xc0, 0x9a, 0xf7, 0x04, 0x2a, 0xc4, 0xf3, 0x69, 0xeb,
- 0xdf, 0x98, 0x72, 0x65, 0x6d, 0xef, 0xe0, 0x21, 0xca, 0x70, 0x69, 0xe3,
- 0xe0, 0x28, 0x54, 0x6f, 0x66, 0x66, 0x69, 0xe3, 0xe0, 0x21, 0xbd, 0x6d,
- 0x61, 0xe9, 0xe0, 0x22, 0x8b, 0x62, 0x6c, 0xef, 0xdb, 0xe4, 0x61, 0x74,
- 0xad, 0x02, 0x84, 0x77, 0xef, 0xd2, 0x93, 0x68, 0x6f, 0xed, 0xe0, 0x21,
- 0xa3, 0xe1, 0x04, 0x06, 0xc1, 0xb2, 0x74, 0x68, 0xef, 0xe0, 0x25, 0xd2,
- 0x6d, 0xe9, 0x02, 0x87, 0x73, 0x63, 0x68, 0x65, 0xf3, 0xc4, 0x85, 0x63,
- 0x2d, 0x64, 0x6e, 0xf3, 0xd8, 0xfe, 0x35, 0xb3, 0xe0, 0x28, 0x24, 0xae,
- 0x03, 0x0e, 0x86, 0x68, 0x6f, 0x6d, 0x65, 0x2d, 0x77, 0x65, 0x62, 0x73,
- 0x65, 0x72, 0xf6, 0xc5, 0xe2, 0x64, 0x64, 0x6e, 0xf3, 0xc4, 0x64, 0x63,
- 0x6f, 0x73, 0xe9, 0xc4, 0x5c, 0xad, 0x04, 0x03, 0x08, 0x86, 0x76, 0xf0,
- 0x94, 0x6f, 0x2d, 0x73, 0x61, 0xf5, 0xe0, 0x28, 0x18, 0x69, 0x70, 0x32,
- 0xb4, 0xc5, 0xc2, 0x62, 0x65, 0x72, 0x6c, 0x69, 0xee, 0xc5, 0xba, 0x77,
- 0x65, 0x62, 0x2e, 0x6c, 0x69, 0xee, 0xe0, 0x22, 0x64, 0xf6, 0x02, 0x8b,
- 0xf2, 0x05, 0x20, 0xe0, 0x28, 0xba, 0x63, 0x61, 0xed, 0xd8, 0xa5, 0xe1,
- 0xe0, 0x28, 0xd3, 0xf5, 0x05, 0x05, 0x04, 0x06, 0x86, 0x72, 0xe2, 0xe0,
- 0x24, 0x8a, 0x70, 0xef, 0xc1, 0xca, 0x6e, 0x6c, 0xef, 0xe0, 0x27, 0x22,
- 0x63, 0x6b, 0x64, 0xee, 0xd3, 0xd9, 0xe2, 0xcd, 0x20, 0xf4, 0xe0, 0x24,
- 0xf6, 0xf3, 0x03, 0x03, 0x85, 0xf4, 0xdf, 0xea, 0x6d, 0x79, 0xee, 0xc1,
- 0x19, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0xae, 0x04, 0xe0, 0x25, 0x74, 0xed,
- 0x58, 0x30, 0xd0, 0x03, 0xf2, 0x08, 0x04, 0x07, 0x06, 0x05, 0x03, 0x0c,
- 0x9b, 0x1f, 0x43, 0xf8, 0x8f, 0x75, 0x64, 0xae, 0x4a, 0x6b, 0xdd, 0x12,
- 0x72, 0x2e, 0xe1, 0xe0, 0x28, 0x6e, 0x6f, 0x62, 0xe1, 0xdd, 0xe7, 0xe9,
- 0xdd, 0x87, 0x65, 0x61, 0x6d, 0x68, 0x6f, 0x73, 0x74, 0x65, 0xf2, 0xe0,
- 0x27, 0x4d, 0xe1, 0x03, 0x0d, 0x86, 0xf9, 0x03, 0xc3, 0xac, 0xe4, 0x03,
- 0xc3, 0xaa, 0x64, 0xee, 0xe0, 0x27, 0x3c, 0x6e, 0x67, 0xe5, 0xe0, 0x21,
- 0x36, 0x6d, 0xed, 0xd8, 0xd1, 0xae, 0x5a, 0x90, 0x49, 0xd3, 0xc2, 0xac,
- 0xf0, 0xcd, 0x3b, 0xef, 0x10, 0x08, 0x05, 0x06, 0x06, 0x06, 0x20, 0x03,
- 0x06, 0x12, 0x60, 0x26, 0x18, 0x41, 0xbd, 0x81, 0x77, 0x6e, 0x6c, 0x6f,
- 0xe1, 0xe0, 0x25, 0xdf, 0x76, 0xf2, 0xe0, 0x26, 0x90, 0x73, 0x68, 0x69,
- 0xae, 0xcb, 0xd9, 0x70, 0x61, 0xe1, 0xe0, 0x26, 0xfe, 0x6f, 0x6d, 0x64,
- 0x6e, 0xf3, 0xb6, 0xee, 0x05, 0x08, 0x0e, 0xdd, 0x2a, 0x74, 0x65, 0x78,
- 0x69, 0x73, 0xf4, 0xd4, 0x47, 0xe7, 0x02, 0x86, 0x74, 0x68, 0x61, 0xf0,
- 0xdf, 0x50, 0x6e, 0x61, 0xe9, 0xdf, 0x4b, 0x65, 0xf4, 0xc0, 0x79, 0xed,
- 0xd7, 0xea, 0x6a, 0x69, 0xee, 0xe0, 0x27, 0xe3, 0x65, 0xf3, 0x03, 0xd1,
- 0xad, 0x6e, 0x74, 0x65, 0x78, 0x69, 0x73, 0x74, 0xae, 0x60, 0x25, 0x0c,
- 0xc2, 0xc8, 0xe3, 0x04, 0xe0, 0x25, 0x68, 0xf4, 0xe0, 0x24, 0x9f, 0xee,
- 0x07, 0x3c, 0x05, 0x4c, 0x7c, 0xd9, 0x6b, 0xf3, 0x07, 0x0e, 0x07, 0x08,
- 0x06, 0x05, 0x86, 0x75, 0xf0, 0x04, 0xe0, 0x27, 0x93, 0x64, 0x61, 0x74,
- 0xe5, 0x44, 0x7d, 0xd3, 0x04, 0x6b, 0x69, 0x6e, 0xe7, 0xe0, 0x20, 0xe9,
- 0x69, 0x73, 0x6b, 0x69, 0x6e, 0xeb, 0xca, 0x10, 0x68, 0x6f, 0x6d, 0xe5,
- 0xc4, 0x67, 0x66, 0x6f, 0xf2, 0xd1, 0x92, 0x64, 0x6f, 0x6a, 0xef, 0xd3,
- 0xd3, 0x61, 0x6c, 0x69, 0xe1, 0xd3, 0xcc, 0xe9, 0x05, 0xe0, 0x21, 0xde,
- 0x65, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x74, 0x72, 0x6f, 0x76, 0x73, 0xeb,
- 0xcc, 0x70, 0x6c, 0x75, 0x67, 0x6f, 0x6c, 0x65, 0xeb, 0xd8, 0x8b, 0xeb,
- 0x4d, 0x35, 0xda, 0x37, 0xe9, 0x0c, 0x11, 0x0b, 0x40, 0x58, 0x1e, 0x0f,
- 0x1a, 0x17, 0xe0, 0x24, 0x52, 0x76, 0xf4, 0x02, 0x85, 0x74, 0x61, 0xf3,
- 0xd8, 0x09, 0x61, 0x73, 0x76, 0x75, 0x6f, 0xe4, 0xdc, 0x81, 0x74, 0x63,
- 0x68, 0x79, 0x6f, 0x75, 0x72, 0xe9, 0xe0, 0x26, 0x57, 0xf3, 0x05, 0x21,
- 0xe0, 0x24, 0x88, 0xeb, 0x02, 0x90, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e,
- 0x73, 0x62, 0x65, 0x72, 0x65, 0x69, 0x63, 0xe8, 0xc3, 0xf3, 0x73, 0x74,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0xae, 0x51, 0x1a, 0x50, 0xeb, 0xc2, 0x4a,
- 0x63, 0xef, 0x03, 0x03, 0x9a, 0xf6, 0xd3, 0x72, 0xf5, 0x02, 0x93, 0x72,
- 0x73, 0x65, 0xae, 0x02, 0x86, 0x74, 0x65, 0xe1, 0xe0, 0x26, 0xff, 0x67,
- 0x72, 0x6f, 0xf5, 0xe0, 0x26, 0x04, 0xee, 0xe0, 0x25, 0x3b, 0x72, 0x64,
- 0xf3, 0x02, 0x85, 0x65, 0xfa, 0xe0, 0x26, 0xe7, 0x61, 0xf9, 0xe0, 0x25,
- 0xce, 0x72, 0x65, 0x63, 0xf4, 0x05, 0x03, 0xe0, 0x26, 0xdb, 0xef, 0xc4,
- 0xd9, 0x2e, 0x71, 0x75, 0x69, 0x63, 0x6b, 0x63, 0x6f, 0x6e, 0x6e, 0x65,
- 0x63, 0x74, 0xae, 0x48, 0x43, 0xdd, 0x46, 0x68, 0x65, 0x72, 0x2e, 0x73,
- 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0xee, 0xe0, 0x23, 0x2a, 0x67, 0xe9,
- 0x02, 0x93, 0x74, 0x61, 0xec, 0x04, 0xe0, 0x26, 0xaf, 0x6f, 0x63, 0x65,
- 0x61, 0x6e, 0x73, 0x70, 0x61, 0x63, 0xe5, 0xdd, 0x76, 0xe3, 0xd7, 0xaf,
- 0xe5, 0x05, 0x06, 0xe0, 0x24, 0xd6, 0x6e, 0x62, 0x69, 0xe5, 0xd7, 0x92,
- 0x6c, 0x64, 0x64, 0x61, 0x6e, 0x75, 0x6f, 0x72, 0xf2, 0xde, 0xf2, 0xe1,
- 0x02, 0x85, 0x6d, 0x6f, 0xee, 0xcd, 0x9e, 0x64, 0xe5, 0xce, 0x9e, 0xe8,
- 0x04, 0xe0, 0x24, 0x29, 0x2e, 0x62, 0x79, 0x74, 0x65, 0x6d, 0x61, 0x72,
- 0xeb, 0xe0, 0x23, 0x1d, 0x67, 0x63, 0xe1, 0xe0, 0x23, 0x8c, 0x66, 0xae,
- 0x60, 0x20, 0x00, 0x83, 0xe5, 0x12, 0x40, 0x6d, 0x0b, 0x16, 0x0c, 0x1b,
- 0x31, 0x27, 0x05, 0x10, 0x0f, 0x08, 0x05, 0x0e, 0xe0, 0x25, 0x01, 0xf6,
- 0x08, 0x14, 0x13, 0x0d, 0x23, 0xe0, 0x25, 0xed, 0x69, 0x63, 0x65, 0x73,
- 0x2e, 0x72, 0x65, 0x73, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x67, 0x69, 0x6e,
- 0xe7, 0xe0, 0x25, 0x2b, 0x65, 0x6c, 0x6f, 0xf0, 0x02, 0x89, 0x6d, 0x65,
- 0x6e, 0x74, 0x2e, 0x72, 0xf5, 0xd1, 0xdd, 0x65, 0xf2, 0xd4, 0x72, 0x63,
- 0x64, 0x6e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0xef, 0xe0, 0x25, 0xfd,
- 0xae, 0x06, 0x0c, 0x52, 0x4a, 0xd2, 0x59, 0x73, 0x74, 0x61, 0x74, 0x69,
- 0x63, 0x2e, 0x6c, 0x61, 0xee, 0xd9, 0xca, 0x61, 0x64, 0x6f, 0x62, 0x65,
- 0x61, 0x65, 0x6d, 0x63, 0x6c, 0x6f, 0x75, 0xe4, 0xe0, 0x25, 0xda, 0xad,
- 0x03, 0xdf, 0x16, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x65, 0xf2, 0xcf, 0x2f,
- 0xf4, 0x04, 0xe0, 0x24, 0x80, 0x61, 0xae, 0x58, 0x3e, 0xcc, 0x26, 0xf3,
- 0x05, 0x0c, 0xe0, 0x24, 0x68, 0xe9, 0x04, 0xe0, 0x25, 0xca, 0x67, 0xee,
- 0x60, 0x22, 0xeb, 0xc2, 0xdd, 0x61, 0xae, 0xdd, 0x27, 0xf0, 0x04, 0xe0,
- 0x24, 0x25, 0x6f, 0x72, 0x74, 0xe5, 0xe0, 0x22, 0xfe, 0xee, 0x02, 0x8a,
- 0xf4, 0x02, 0x83, 0xe9, 0xd8, 0xd4, 0xe1, 0xe0, 0x23, 0x5a, 0xef, 0x03,
- 0xd8, 0x06, 0x2d, 0x73, 0x74, 0x61, 0x67, 0x69, 0x6e, 0xe7, 0xd7, 0xfe,
- 0x6d, 0xef, 0x04, 0x07, 0xc8, 0xfd, 0x63, 0x72, 0xe1, 0x49, 0x24, 0xda,
- 0xad, 0xae, 0x02, 0x8b, 0x6a, 0x65, 0x6c, 0x61, 0x73, 0x74, 0x69, 0xe3,
- 0xe0, 0x25, 0x78, 0x64, 0x61, 0x74, 0xe1, 0x02, 0x87, 0x64, 0x65, 0x74,
- 0x65, 0xe3, 0xdb, 0x62, 0x63, 0x65, 0x6e, 0x74, 0x65, 0xf2, 0xe0, 0x25,
- 0x10, 0xec, 0x06, 0x05, 0x11, 0x05, 0xd8, 0xf9, 0x6f, 0x69, 0xf4, 0xde,
- 0xa6, 0xec, 0x05, 0x01, 0xe0, 0x25, 0x54, 0x2d, 0x6f, 0x67, 0x6c, 0x69,
- 0x61, 0x73, 0x74, 0xf2, 0xde, 0xbd, 0x69, 0x76, 0xe5, 0xc3, 0x43, 0x68,
- 0xe9, 0xe0, 0x24, 0x07, 0x67, 0xf2, 0xe0, 0x20, 0x60, 0xe6, 0x04, 0xe0,
- 0x23, 0xdb, 0x69, 0x6e, 0x69, 0x6d, 0x61, 0xae, 0x60, 0x24, 0x29, 0xc0,
- 0xe4, 0xe4, 0x02, 0x85, 0x79, 0xee, 0xe0, 0x24, 0x1e, 0x69, 0x62, 0x6f,
- 0xf8, 0xe0, 0x24, 0x8d, 0xe3, 0x03, 0xd5, 0x67, 0xe9, 0xe0, 0x24, 0x1c,
- 0x62, 0x69, 0xe1, 0xd1, 0x87, 0xe1, 0x02, 0x84, 0x74, 0xee, 0xde, 0x99,
- 0xec, 0x51, 0x67, 0x51, 0x37, 0xc2, 0x69, 0xae, 0x0b, 0x03, 0x04, 0x51,
- 0x41, 0x47, 0x77, 0x45, 0xd8, 0xc1, 0x5a, 0xf4, 0xca, 0x37, 0xec, 0xe0,
- 0x24, 0x82, 0x63, 0xef, 0x04, 0xe0, 0x24, 0xe3, 0xef, 0xe0, 0x24, 0x34,
- 0xe4, 0x05, 0x2c, 0xe0, 0x22, 0x49, 0x6e, 0xf3, 0x07, 0x07, 0x05, 0x03,
- 0x06, 0x05, 0x84, 0x73, 0xae, 0x60, 0x22, 0x04, 0xc2, 0x2f, 0x6c, 0x69,
- 0xf6, 0xdd, 0x20, 0xeb, 0xd7, 0x4e, 0x67, 0x65, 0xe5, 0xe0, 0x20, 0xcf,
- 0x66, 0x72, 0xe5, 0xdd, 0x12, 0xb5, 0xe0, 0x24, 0xb2, 0xae, 0x4e, 0xb2,
- 0xd5, 0xe1, 0x2d, 0x64, 0x6e, 0xf3, 0xc1, 0x79, 0xe3, 0x58, 0xd9, 0xc6,
- 0x2d, 0xe1, 0x10, 0x07, 0x0b, 0x16, 0x38, 0x09, 0x05, 0x08, 0x0b, 0x16,
- 0x09, 0x18, 0x54, 0x2d, 0xcd, 0x65, 0x7a, 0x61, 0x69, 0x66, 0xf5, 0xcd,
- 0x7e, 0xf9, 0x04, 0xe0, 0x24, 0x8a, 0x6e, 0x69, 0x67, 0xe8, 0xcd, 0x84,
- 0x76, 0x76, 0xe5, 0x02, 0x86, 0x73, 0x69, 0x69, 0xe4, 0xde, 0x53, 0x6e,
- 0xea, 0x02, 0x82, 0x1f, 0x43, 0x61, 0x72, 0xe7, 0xde, 0x48, 0xf4, 0x06,
- 0x17, 0x05, 0x0a, 0xce, 0xbf, 0x74, 0xef, 0x03, 0x04, 0x86, 0x77, 0xe5,
- 0xda, 0xcd, 0x72, 0x65, 0x6c, 0xe1, 0xc6, 0xc8, 0x6c, 0x6f, 0x63, 0x61,
- 0xec, 0xe0, 0x20, 0xf7, 0x73, 0xf5, 0xe0, 0x23, 0x14, 0xe5, 0x04, 0xe0,
- 0x24, 0x46, 0xae, 0x5e, 0xda, 0xc3, 0xb7, 0xe1, 0x04, 0xe0, 0x24, 0x3c,
- 0x62, 0x61, 0x73, 0xe5, 0xcd, 0x8c, 0xf0, 0x03, 0xcc, 0xe2, 0x6c, 0x69,
- 0xe5, 0xce, 0x2a, 0xee, 0x5b, 0x7d, 0xc3, 0xa0, 0x6d, 0x6e, 0x73, 0x65,
- 0x72, 0xf6, 0xda, 0x4b, 0xeb, 0x02, 0x83, 0xee, 0xd1, 0x68, 0x6c, 0x61,
- 0xeb, 0xdb, 0x6b, 0xe9, 0x04, 0x04, 0x04, 0x86, 0x77, 0xe1, 0xd8, 0xb9,
- 0xf4, 0xe0, 0x22, 0x35, 0x73, 0x65, 0x6e, 0xae, 0xdd, 0xf0, 0xe7, 0xd4,
- 0x3b, 0x67, 0x65, 0x73, 0x74, 0x61, 0xee, 0xe0, 0x20, 0x58, 0xe5, 0x03,
- 0x0b, 0x85, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x61, 0x6e, 0x65, 0xec, 0xc0,
- 0x72, 0x6a, 0x65, 0xef, 0xcc, 0xf2, 0x67, 0xf5, 0xcc, 0xef, 0x62, 0xf5,
- 0xe0, 0x22, 0x83, 0xae, 0x05, 0x52, 0x6d, 0xd1, 0x64, 0x67, 0xf6, 0xe0,
- 0x23, 0xc0, 0xe3, 0x26, 0x12, 0x23, 0x08, 0x05, 0x40, 0xa7, 0x06, 0x16,
- 0x40, 0x6e, 0x03, 0x04, 0x43, 0x56, 0x40, 0x69, 0x41, 0x6a, 0x05, 0x40,
- 0x9a, 0x41, 0xb5, 0x0e, 0x3f, 0x2f, 0x40, 0xb0, 0x0d, 0x41, 0xad, 0x04,
- 0x55, 0x56, 0x1e, 0xc2, 0x51, 0xfa, 0x05, 0x51, 0x52, 0xd2, 0x4f, 0xe5,
- 0x02, 0x84, 0x73, 0xf4, 0xde, 0xe1, 0x6c, 0x61, 0xe4, 0xcc, 0x6f, 0xf9,
- 0x07, 0x10, 0x05, 0x49, 0x41, 0xda, 0x37, 0xef, 0x04, 0xe0, 0x22, 0x88,
- 0x6e, 0xae, 0x03, 0xcc, 0x52, 0x6c, 0x69, 0xee, 0xe0, 0x23, 0x48, 0x6d,
- 0xf2, 0xe0, 0x22, 0x7b, 0x61, 0x2e, 0xe7, 0xe0, 0x20, 0xa8, 0xf8, 0x04,
- 0xe0, 0x23, 0x6d, 0xae, 0xd0, 0x3d, 0xf6, 0x48, 0x61, 0xdb, 0x08, 0xf5,
- 0x0a, 0x09, 0x40, 0x6a, 0x0a, 0x0a, 0x05, 0xe0, 0x22, 0xce, 0x74, 0x65,
- 0x67, 0x69, 0x72, 0xec, 0xe0, 0x22, 0x59, 0x73, 0xf4, 0x02, 0xb3, 0x6f,
- 0xed, 0x02, 0x9f, 0x65, 0xf2, 0x02, 0x94, 0xae, 0x03, 0xca, 0x7b, 0x73,
- 0x70, 0x65, 0x65, 0x64, 0x70, 0x61, 0x72, 0x74, 0x6e, 0x65, 0x72, 0xae,
- 0xe0, 0x22, 0x94, 0x2d, 0x6f, 0x63, 0xe9, 0xe0, 0x23, 0x17, 0x2e, 0x6d,
- 0x65, 0x74, 0x61, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x75, 0x6d, 0x2e, 0xe3,
- 0xdf, 0xf9, 0xae, 0x04, 0x08, 0x0b, 0x85, 0x74, 0x65, 0x73, 0x74, 0x69,
- 0x6e, 0xe7, 0x9c, 0x72, 0x65, 0x74, 0x72, 0x6f, 0x73, 0x6e, 0x75, 0xe2,
- 0xdf, 0xb2, 0x70, 0x72, 0x6f, 0xe4, 0x8c, 0xe4, 0x02, 0x86, 0x69, 0x73,
- 0x72, 0x65, 0xe3, 0x83, 0x65, 0x76, 0x2e, 0x74, 0x68, 0x69, 0x6e, 0x67,
- 0x64, 0x75, 0xf3, 0xcf, 0xfd, 0xf2, 0x02, 0x83, 0xf6, 0xd5, 0x47, 0x69,
- 0x74, 0xe9, 0x9d, 0x70, 0x63, 0x61, 0x6b, 0x65, 0x2e, 0xe9, 0xe0, 0x22,
- 0x67, 0x6e, 0xe5, 0xe0, 0x20, 0xcd, 0xe9, 0x02, 0x89, 0x73, 0x69, 0x6e,
- 0x65, 0x6c, 0xec, 0xe0, 0x21, 0x1e, 0x61, 0xe2, 0xd9, 0x44, 0x74, 0xae,
- 0x5d, 0xb8, 0xc3, 0x02, 0xf3, 0x02, 0x86, 0x78, 0x2e, 0xe3, 0xe0, 0x22,
- 0xa3, 0xae, 0x03, 0xca, 0xd2, 0x6b, 0x65, 0x6c, 0x69, 0x77, 0x65, 0xe2,
- 0xca, 0xc4, 0xf2, 0x0d, 0x10, 0x09, 0x09, 0x12, 0x16, 0x11, 0x49, 0x35,
- 0x56, 0x9b, 0xc2, 0x69, 0x79, 0x70, 0x74, 0x6f, 0x6e, 0x6f, 0x6d, 0x69,
- 0x63, 0x2e, 0x6e, 0x65, 0xf4, 0xe0, 0x22, 0x75, 0x75, 0x69, 0x73, 0xe5,
- 0x60, 0x20, 0x17, 0xc2, 0x69, 0xef, 0x03, 0xc9, 0xd2, 0x74, 0x6f, 0xee,
- 0xdb, 0x6c, 0xe9, 0x03, 0x05, 0x84, 0x6d, 0x65, 0xe1, 0xc7, 0x63, 0x63,
- 0xeb, 0xcf, 0x61, 0xae, 0x5b, 0xb4, 0xc5, 0x56, 0xe5, 0x03, 0x03, 0x83,
- 0xf7, 0xdf, 0x7e, 0xed, 0xda, 0x10, 0x64, 0x69, 0xf4, 0x05, 0x52, 0x5f,
- 0xcf, 0xef, 0x75, 0xee, 0xd5, 0xba, 0xe1, 0x04, 0x04, 0xd3, 0x39, 0x6e,
- 0xeb, 0xd9, 0x90, 0x66, 0x74, 0x69, 0x6e, 0x67, 0xae, 0xce, 0x76, 0xae,
- 0x47, 0x31, 0xd9, 0x05, 0xf1, 0xce, 0xc4, 0xf0, 0xe0, 0x20, 0x9e, 0xef,
- 0x14, 0x29, 0x06, 0x06, 0x04, 0x3b, 0x40, 0x4c, 0x41, 0x72, 0x17, 0x03,
- 0x04, 0x17, 0x06, 0x03, 0x4d, 0x4d, 0xd2, 0x5b, 0xf5, 0x04, 0x04, 0x07,
- 0x8b, 0x72, 0xf3, 0xd6, 0x1a, 0x70, 0x6f, 0xee, 0x5f, 0xa3, 0xc2, 0x69,
- 0xee, 0x02, 0x84, 0x74, 0xf2, 0xdf, 0xcc, 0x63, 0xe9, 0xdd, 0x0f, 0x63,
- 0x68, 0x70, 0x6f, 0x74, 0x61, 0x74, 0x6f, 0x66, 0x72, 0x69, 0xe5, 0xcd,
- 0x12, 0x73, 0x65, 0x6e, 0xfa, 0xdb, 0x5c, 0x72, 0x73, 0xe9, 0xe0, 0x20,
- 0x3e, 0x70, 0xf2, 0xde, 0x91, 0xef, 0x03, 0x28, 0x8c, 0xf0, 0x05, 0x08,
- 0xe0, 0x21, 0xcd, 0x65, 0x72, 0x61, 0x74, 0x69, 0xf6, 0xdf, 0x16, 0xae,
- 0x0e, 0x03, 0x03, 0x4f, 0xa7, 0x46, 0x47, 0x48, 0x48, 0x41, 0xc3, 0x40,
- 0x65, 0x9f, 0xf2, 0xdf, 0x4d, 0xf0, 0xdf, 0x83, 0xed, 0x5d, 0xfb, 0xc1,
- 0x4c, 0xec, 0x04, 0xe0, 0x21, 0xae, 0x62, 0x6c, 0x6f, 0xe7, 0xe0, 0x20,
- 0xaf, 0xeb, 0xcc, 0x24, 0xee, 0x05, 0x17, 0x19, 0x03, 0x8f, 0xf4, 0x02,
- 0x8b, 0xf2, 0x03, 0xdc, 0xa6, 0x61, 0x63, 0x74, 0x6f, 0xf2, 0xdf, 0x29,
- 0xe1, 0x02, 0x83, 0xe7, 0xcf, 0xce, 0xe3, 0xdf, 0xcb, 0xf3, 0x02, 0x91,
- 0x75, 0xec, 0x02, 0x87, 0xf4, 0x03, 0xc8, 0x39, 0xe1, 0xd9, 0xbf, 0x61,
- 0x64, 0x6f, 0xae, 0xd4, 0x9d, 0x74, 0x72, 0xf5, 0xd4, 0xdc, 0xee, 0xde,
- 0x1e, 0xe6, 0x02, 0x85, 0x65, 0x72, 0xe5, 0xdc, 0x81, 0xae, 0x55, 0xa3,
- 0x48, 0xa6, 0xc2, 0xb3, 0x64, 0xef, 0xde, 0xf1, 0xed, 0x09, 0x04, 0x2f,
- 0x21, 0x04, 0x5e, 0xf2, 0xc2, 0x04, 0x73, 0xe5, 0xd5, 0x69, 0xf0, 0x02,
- 0xa5, 0x75, 0x74, 0xe5, 0x04, 0x1a, 0xdf, 0xcd, 0xae, 0x02, 0x86, 0x65,
- 0x73, 0x74, 0xe1, 0xc3, 0x58, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x61,
- 0x77, 0x73, 0x2e, 0x63, 0x6f, 0xed, 0x42, 0xb8, 0xde, 0x60, 0x2d, 0xb1,
- 0xd7, 0xec, 0xe1, 0x03, 0xde, 0x57, 0xee, 0xde, 0xe6, 0xed, 0x02, 0x99,
- 0x75, 0xee, 0x02, 0x91, 0x69, 0x74, 0xf9, 0x04, 0xe0, 0x21, 0x0d, 0x2d,
- 0x70, 0x72, 0x6f, 0xae, 0x60, 0x20, 0x68, 0xc0, 0x7d, 0x65, 0xae, 0xd9,
- 0x79, 0x62, 0x61, 0xee, 0xde, 0x96, 0x63, 0xe1, 0xd4, 0x20, 0xae, 0x1b,
- 0x03, 0x03, 0x0a, 0x08, 0x0a, 0x17, 0x06, 0x03, 0x0e, 0x0b, 0x12, 0x0e,
- 0x0b, 0x03, 0x0d, 0x08, 0x0e, 0x06, 0x0b, 0x08, 0x0d, 0x11, 0x4c, 0xc1,
- 0xcc, 0x40, 0xf9, 0xdf, 0x5d, 0xf7, 0xde, 0x6d, 0xf6, 0x54, 0xf0, 0x49,
- 0xca, 0x40, 0x9d, 0x40, 0x42, 0xba, 0xf5, 0x5e, 0x56, 0x3c, 0x40, 0x90,
- 0xc1, 0xa6, 0xf4, 0x5e, 0x51, 0x1e, 0x12, 0x40, 0x82, 0x33, 0x32, 0x9f,
- 0xf3, 0x54, 0xd4, 0x41, 0x8a, 0x46, 0x9d, 0x41, 0x2c, 0x27, 0x1a, 0x03,
- 0x15, 0x40, 0x79, 0x17, 0x1c, 0x40, 0x51, 0x40, 0xd5, 0xc0, 0x64, 0xf2,
- 0x5f, 0x15, 0x0f, 0xc0, 0xf4, 0xf1, 0xde, 0xf3, 0xf0, 0x55, 0xae, 0x48,
- 0x59, 0x27, 0x03, 0x17, 0x18, 0x40, 0x79, 0x17, 0x2b, 0xa3, 0xee, 0x55,
- 0xa0, 0x48, 0xd0, 0x40, 0x72, 0x40, 0x4e, 0xc1, 0x58, 0xed, 0x58, 0xfc,
- 0x43, 0xc6, 0x41, 0x4c, 0x07, 0x03, 0x17, 0x18, 0x40, 0x79, 0x33, 0x40,
- 0x8b, 0xc0, 0xff, 0xec, 0x54, 0x89, 0x41, 0x8a, 0x46, 0x9d, 0x41, 0x56,
- 0x2f, 0x40, 0x90, 0xc0, 0x4e, 0xeb, 0x5d, 0xeb, 0x03, 0x1e, 0x1b, 0x1e,
- 0x40, 0x7c, 0xc1, 0x9c, 0xea, 0xde, 0xc8, 0xe9, 0x08, 0x5d, 0xdf, 0x17,
- 0x40, 0xc7, 0xc0, 0x51, 0xf1, 0xe0, 0x20, 0x47, 0xe8, 0x5d, 0xdd, 0x40,
- 0xa8, 0x40, 0x65, 0x9f, 0xe7, 0x5d, 0xab, 0x40, 0x41, 0x18, 0x1e, 0x40,
- 0x5b, 0x21, 0x21, 0x23, 0x1f, 0xba, 0xe6, 0x5d, 0xdb, 0x12, 0xc0, 0xe7,
- 0xe5, 0x54, 0x44, 0x49, 0x7a, 0x40, 0xab, 0x40, 0x42, 0xc1, 0x7b, 0xe4,
- 0x5d, 0xa9, 0x21, 0x40, 0xc7, 0xc1, 0x26, 0xe3, 0x5c, 0x58, 0x41, 0x4c,
- 0x1e, 0x1b, 0x1e, 0x40, 0x8e, 0x40, 0x51, 0xba, 0xe2, 0x55, 0xae, 0x47,
- 0xc9, 0x1d, 0x0a, 0x17, 0x12, 0x09, 0x1e, 0x40, 0x5b, 0x17, 0x1c, 0x32,
- 0x9f, 0xe1, 0x54, 0x13, 0x40, 0xfa, 0x48, 0x76, 0x03, 0x1e, 0x03, 0x36,
- 0x40, 0xc0, 0x40, 0x59, 0xc0, 0xff, 0xec, 0x03, 0x04, 0x8c, 0x6f, 0xe7,
- 0xc9, 0xc2, 0x6c, 0x65, 0x67, 0xe5, 0x03, 0xdf, 0xd7, 0x66, 0x61, 0xee,
- 0xdd, 0x04, 0xae, 0xcb, 0xc2, 0xe7, 0xd7, 0x0e, 0x66, 0xe6, 0xda, 0xec,
- 0x64, 0xe5, 0x04, 0x07, 0xc9, 0x0f, 0xf3, 0x03, 0xdf, 0xbe, 0xf0, 0xd5,
- 0x9c, 0x62, 0x65, 0x72, 0x67, 0x2e, 0x70, 0x61, 0xe7, 0xdf, 0x4e, 0x63,
- 0x6f, 0x74, 0xf4, 0xd0, 0xc0, 0xe1, 0xca, 0x0d, 0xae, 0x1a, 0x05, 0x09,
- 0x12, 0x05, 0x06, 0x0e, 0x0d, 0x0b, 0x05, 0x09, 0x04, 0x0a, 0x06, 0x09,
- 0x12, 0x0d, 0x12, 0x57, 0xea, 0x44, 0x56, 0x41, 0x9f, 0xc0, 0xc8, 0xf6,
- 0x5d, 0x73, 0xc0, 0x9d, 0xf5, 0x4f, 0x3c, 0x4d, 0xd8, 0x0a, 0x03, 0xc2,
- 0x65, 0xf4, 0x08, 0x5c, 0xe6, 0x1d, 0x21, 0x12, 0xc0, 0x82, 0x65, 0x63,
- 0x68, 0x6e, 0x6f, 0x6c, 0xef, 0xcd, 0xfe, 0xf3, 0x5c, 0xf9, 0xc0, 0xb5,
- 0xf2, 0x5c, 0xf7, 0x07, 0xc2, 0x2e, 0xf0, 0x05, 0x5c, 0xec, 0xc1, 0x36,
- 0xec, 0x03, 0xdf, 0x54, 0x61, 0xe3, 0xde, 0xf1, 0xee, 0x54, 0x51, 0x48,
- 0x8f, 0x40, 0x5a, 0x40, 0x72, 0x40, 0xf4, 0xc0, 0x78, 0xed, 0x5c, 0xd3,
- 0x03, 0x40, 0xc9, 0x2b, 0x40, 0x7c, 0xc0, 0xff, 0xec, 0x53, 0x58, 0xc9,
- 0x7a, 0xeb, 0x03, 0xdd, 0xb7, 0xf2, 0x52, 0xfd, 0xcc, 0x35, 0xea, 0x5d,
- 0x90, 0xa1, 0xe9, 0x5c, 0xd7, 0x03, 0x03, 0x40, 0x8e, 0x40, 0x65, 0x9f,
- 0xe7, 0x5c, 0xd0, 0x18, 0xc2, 0x36, 0x66, 0x69, 0x6e, 0x61, 0x6e, 0x63,
- 0xe9, 0xc1, 0x52, 0xe5, 0x02, 0x86, 0x76, 0x65, 0x6e, 0xf4, 0xde, 0x9b,
- 0x64, 0x75, 0x63, 0x61, 0x74, 0x69, 0xef, 0xca, 0xbb, 0xe3, 0x4e, 0xb3,
- 0x4d, 0x28, 0x40, 0xd1, 0x03, 0x36, 0x40, 0xc0, 0xc1, 0x53, 0xe2, 0x09,
- 0x4a, 0xa2, 0x49, 0xed, 0x47, 0xe9, 0x30, 0xa7, 0x75, 0x73, 0x69, 0x6e,
- 0x65, 0xf3, 0xde, 0x73, 0xe1, 0x5c, 0x8d, 0x40, 0x94, 0x33, 0x0f, 0xc1,
- 0x7b, 0xee, 0x08, 0x03, 0x0a, 0x07, 0x03, 0x0b, 0xde, 0xac, 0xf4, 0xdd,
- 0x72, 0x73, 0x2e, 0x6a, 0x6f, 0x79, 0x65, 0x6e, 0xf4, 0xde, 0xad, 0x70,
- 0x79, 0x2e, 0x67, 0xe4, 0xca, 0x76, 0xe7, 0xdd, 0x5e, 0xae, 0x43, 0xaf,
- 0x43, 0x2e, 0x44, 0x26, 0x4d, 0x55, 0xc6, 0x57, 0x2d, 0x6e, 0x6f, 0x72,
- 0x74, 0xe8, 0x02, 0x84, 0x77, 0x65, 0x73, 0x74, 0x2d, 0x31, 0xae, 0x02,
- 0x94, 0x65, 0x62, 0x2e, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x61, 0x77,
- 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0xe3, 0xca, 0x43, 0x61, 0x69, 0x72,
- 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x61,
- 0x77, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0xe3, 0xc7, 0xc7, 0xec, 0x0a,
- 0x11, 0x41, 0x12, 0x13, 0x1c, 0x5b, 0x0e, 0xc2, 0x03, 0x75, 0xe2, 0x04,
- 0x04, 0xde, 0x59, 0x6d, 0xe5, 0xdc, 0x0f, 0xae, 0x03, 0xdb, 0x79, 0xf4,
- 0xdb, 0xe4, 0xef, 0x03, 0xc1, 0x0a, 0x75, 0xe4, 0x0e, 0x09, 0x0e, 0x23,
- 0x06, 0x17, 0x0a, 0x0d, 0x20, 0x0c, 0x40, 0x52, 0xdd, 0x52, 0x79, 0x63,
- 0x6c, 0x75, 0x73, 0x74, 0xe5, 0xc3, 0x59, 0x73, 0x69, 0x74, 0x65, 0x2e,
- 0x62, 0x75, 0x69, 0x6c, 0x64, 0x65, 0xf2, 0xdd, 0xba, 0x6e, 0x73, 0xae,
- 0x0b, 0x03, 0x05, 0x03, 0x05, 0x58, 0xf0, 0x41, 0xf4, 0xc0, 0x56, 0xf5,
- 0xdd, 0xa9, 0xf0, 0x49, 0x98, 0xc4, 0x05, 0xe9, 0xcd, 0xb7, 0xe3, 0x4d,
- 0xbd, 0xd0, 0x41, 0x61, 0x73, 0xe9, 0xcd, 0xbb, 0x6a, 0x69, 0x66, 0xe6,
- 0xdc, 0x99, 0xe6, 0x03, 0x08, 0x85, 0x75, 0x6e, 0x63, 0x74, 0x69, 0xef,
- 0xd8, 0x48, 0x72, 0x6f, 0xee, 0xd1, 0x9b, 0x6c, 0x61, 0x72, 0xe5, 0xc3,
- 0x41, 0x65, 0x72, 0x61, 0x2e, 0x73, 0x69, 0x74, 0xe5, 0xdd, 0xcd, 0x63,
- 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0xec, 0x03, 0xdc, 0xe6, 0xec, 0xd3, 0xc9,
- 0xe1, 0x02, 0x8f, 0x70, 0xf0, 0x03, 0xdd, 0xa4, 0x73, 0x2e, 0x64, 0x69,
- 0x67, 0x69, 0x74, 0xe1, 0xdd, 0x0d, 0x63, 0x63, 0x65, 0x73, 0x73, 0xae,
- 0x03, 0xdd, 0x92, 0x68, 0x6f, 0xf3, 0xdd, 0x91, 0x36, 0x36, 0xae, 0x02,
- 0x84, 0x7a, 0xef, 0xcd, 0x3b, 0xf7, 0xdd, 0x37, 0xae, 0x07, 0x0d, 0x10,
- 0x13, 0x15, 0xd3, 0x8c, 0x6e, 0x6f, 0x73, 0x70, 0x61, 0x6d, 0x70, 0x72,
- 0x6f, 0x78, 0xf9, 0xdd, 0x89, 0x6d, 0x65, 0x74, 0x61, 0x63, 0x65, 0x6e,
- 0x74, 0x72, 0x75, 0x6d, 0x2e, 0x63, 0xfa, 0xdd, 0x6f, 0x6a, 0x65, 0x6c,
- 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x2e, 0x74,
- 0x69, 0xed, 0xdd, 0x23, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x68, 0x6f, 0x73,
- 0x74, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0xae, 0xdc,
- 0xaf, 0x67, 0x6f, 0xef, 0xda, 0x87, 0x2d, 0x66, 0x72, 0x31, 0x2e, 0x75,
- 0x6e, 0x69, 0x73, 0x70, 0x61, 0xe3, 0xd3, 0xa8, 0x74, 0xe8, 0xc7, 0xc0,
- 0xe9, 0x02, 0x86, 0x6e, 0xe9, 0x47, 0x88, 0xc9, 0xd0, 0x63, 0xeb, 0x03,
- 0xdd, 0x32, 0x72, 0x69, 0xf3, 0xd7, 0x67, 0xe5, 0x03, 0x09, 0x8b, 0x76,
- 0x65, 0x72, 0x61, 0x70, 0x70, 0xf3, 0xdc, 0x1a, 0x72, 0xeb, 0x03, 0xdb,
- 0xa5, 0x73, 0x74, 0x61, 0xe7, 0xc7, 0x92, 0x61, 0xee, 0xc7, 0x91, 0xe1,
- 0x02, 0x86, 0x6e, 0x2e, 0x72, 0xe9, 0xdc, 0x11, 0x69, 0xed, 0xda, 0x9d,
- 0xeb, 0x41, 0xfb, 0xc9, 0xa5, 0xe9, 0x0e, 0x08, 0x40, 0x54, 0x15, 0x04,
- 0x07, 0x0c, 0x59, 0x10, 0x41, 0x55, 0xc2, 0x03, 0x76, 0x69, 0x6c, 0x61,
- 0x76, 0xe9, 0xda, 0x08, 0xf4, 0x04, 0x40, 0x46, 0x85, 0xf9, 0x03, 0xdc,
- 0xdf, 0xae, 0x06, 0x08, 0x0f, 0x07, 0xdb, 0xb9, 0x79, 0x6f, 0x6b, 0x6f,
- 0x68, 0x61, 0xed, 0x95, 0xf3, 0x02, 0x85, 0x65, 0x6e, 0x64, 0xe1, 0xa7,
- 0x61, 0x70, 0x70, 0x6f, 0x72, 0xef, 0xa1, 0x6e, 0x61, 0x67, 0x6f, 0x79,
- 0xe1, 0x9a, 0xeb, 0x03, 0x04, 0x8a, 0x6f, 0x62, 0xe5, 0x92, 0x69, 0x74,
- 0x61, 0x6b, 0x79, 0x75, 0x73, 0x68, 0xf5, 0x88, 0x61, 0x77, 0x61, 0x73,
- 0x61, 0x6b, 0x69, 0x2e, 0x6a, 0x70, 0x85, 0xe9, 0x50, 0xb9, 0xcb, 0xe3,
- 0x61, 0xe4, 0xd7, 0x64, 0xf3, 0x02, 0x87, 0x74, 0x72, 0x6f, 0x6e, 0xae,
- 0xdb, 0xd8, 0x63, 0xef, 0x03, 0xdc, 0x85, 0x66, 0x72, 0x65, 0xe1, 0xd8,
- 0x8d, 0x72, 0xe3, 0xda, 0x8a, 0x70, 0x72, 0x69, 0x61, 0xee, 0xda, 0x5d,
- 0xe5, 0x02, 0x85, 0x73, 0x7a, 0xf9, 0xca, 0xd2, 0x6e, 0xe3, 0xd9, 0xb0,
- 0xe1, 0xc3, 0xb4, 0xe8, 0x0b, 0x2a, 0x0a, 0x0d, 0x1f, 0x40, 0xcd, 0x2e,
- 0x37, 0xda, 0xc7, 0xf5, 0x05, 0x03, 0x13, 0xdb, 0x42, 0xf2, 0xc6, 0xb5,
- 0x6f, 0xae, 0x08, 0x50, 0xb8, 0x48, 0x48, 0x41, 0x69, 0x89, 0x79, 0x61,
- 0x6d, 0x61, 0x6e, 0x61, 0xf3, 0xda, 0x31, 0x6e, 0xe7, 0x02, 0x85, 0x6e,
- 0x61, 0xed, 0xc5, 0x45, 0x62, 0x75, 0xeb, 0xc5, 0x40, 0x74, 0x72, 0x2e,
- 0x6b, 0x31, 0x32, 0x2e, 0xed, 0xc2, 0x8b, 0xf2, 0x02, 0x84, 0x6f, 0xed,
- 0xda, 0xa4, 0x69, 0x73, 0x74, 0xed, 0xc7, 0x25, 0xef, 0x05, 0x03, 0x04,
- 0x09, 0x85, 0xf9, 0xd1, 0x99, 0x77, 0xe4, 0xc9, 0x16, 0xf3, 0x02, 0x82,
- 0xe8, 0x82, 0x65, 0xe9, 0xda, 0x26, 0x6e, 0x61, 0xee, 0xda, 0x21, 0x66,
- 0xf5, 0xd8, 0xb4, 0xe9, 0x10, 0x09, 0x09, 0x0b, 0x27, 0x0a, 0x08, 0x07,
- 0x06, 0x28, 0x0c, 0x0d, 0x07, 0x03, 0xd9, 0x60, 0x7a, 0x75, 0x2e, 0x74,
- 0x6f, 0x74, 0xf4, 0xd2, 0xe4, 0x79, 0x6f, 0x64, 0x61, 0xae, 0x53, 0x0f,
- 0xc5, 0x85, 0xf4, 0x02, 0x85, 0x6f, 0x73, 0xe5, 0xda, 0x1b, 0xe1, 0xd6,
- 0x84, 0xf2, 0x02, 0x84, 0x79, 0xf5, 0xd6, 0x7d, 0x75, 0x72, 0x67, 0x69,
- 0x65, 0x6e, 0x73, 0x2d, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x73, 0x74, 0x65,
- 0xf3, 0x03, 0xdb, 0x1e, 0x2d, 0x65, 0x6e, 0x2d, 0x66, 0x72, 0x61, 0x6e,
- 0x63, 0xe5, 0xdb, 0x14, 0xf0, 0x02, 0x83, 0xf3, 0xda, 0xa5, 0x70, 0xf5,
- 0xd6, 0xe3, 0xee, 0x03, 0xcd, 0x39, 0x74, 0xe1, 0xd9, 0x7b, 0x6d, 0x6b,
- 0x65, 0x6e, 0xf4, 0xd9, 0xa3, 0x6c, 0x6c, 0x6f, 0xf5, 0xc4, 0x85, 0x6b,
- 0xf5, 0x06, 0x03, 0x0b, 0x04, 0x02, 0x88, 0xfa, 0xc4, 0x67, 0xf3, 0x02,
- 0x84, 0x68, 0x69, 0xee, 0x94, 0x65, 0xe9, 0xd3, 0xdf, 0x6d, 0xe1, 0xd8,
- 0x59, 0xea, 0x8a, 0x68, 0xef, 0x03, 0xc4, 0x51, 0xeb, 0xd7, 0x09, 0x67,
- 0xef, 0xc4, 0x4c, 0x6a, 0x69, 0x77, 0x61, 0x2e, 0x6e, 0x61, 0x67, 0x61,
- 0xf3, 0xd3, 0xc6, 0x68, 0x61, 0x79, 0x61, 0x61, 0x6b, 0x61, 0x73, 0x61,
- 0x6b, 0xe1, 0xd9, 0x71, 0x67, 0x61, 0x73, 0x61, 0xeb, 0xce, 0xd0, 0xe5,
- 0xcf, 0x2e, 0xe3, 0x02, 0x86, 0x68, 0x69, 0x62, 0xf5, 0xcf, 0xf4, 0x61,
- 0x70, 0xf0, 0xcb, 0x7d, 0xe5, 0x02, 0xa5, 0xf2, 0x02, 0x97, 0xee, 0x02,
- 0x84, 0x6f, 0x76, 0xf4, 0x96, 0xe9, 0x03, 0x05, 0x83, 0x76, 0x74, 0x73,
- 0xe9, 0x8f, 0x68, 0xe9, 0x83, 0x67, 0x6f, 0xf6, 0x88, 0x6b, 0x61, 0xf3,
- 0x02, 0x81, 0x73, 0x79, 0x2e, 0xf5, 0xd9, 0x5f, 0x61, 0xf0, 0x5a, 0x07,
- 0xc0, 0xfb, 0xe1, 0x07, 0x0b, 0x10, 0x49, 0x75, 0xcf, 0xa8, 0xf2, 0x02,
- 0x85, 0x74, 0x65, 0xf2, 0xd8, 0x13, 0xe9, 0xc9, 0x5b, 0xee, 0x03, 0xd5,
- 0xb5, 0x6e, 0x65, 0xec, 0x03, 0xda, 0xe1, 0x73, 0x64, 0x76, 0xf2, 0xda,
- 0xb9, 0xed, 0x02, 0x8a, 0x70, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0xf0,
- 0xd7, 0xf3, 0x62, 0x61, 0x67, 0x72, 0xe9, 0xda, 0x37, 0xae, 0x05, 0x54,
- 0x63, 0xc4, 0x5c, 0xf4, 0x03, 0xda, 0xae, 0x72, 0x65, 0x6e, 0x64, 0x68,
- 0x6f, 0x73, 0x74, 0x69, 0x6e, 0xe7, 0xc2, 0xd2, 0xe6, 0x07, 0x58, 0x5c,
- 0x40, 0xa5, 0xc1, 0xa7, 0x2d, 0x69, 0x70, 0xe6, 0xd9, 0x88, 0xe5, 0x08,
- 0x12, 0x11, 0x0d, 0x4b, 0x88, 0xcd, 0x56, 0x73, 0x65, 0x6e, 0xe1, 0x02,
- 0x81, 0x2d, 0x66, 0x6f, 0x72, 0xec, 0x03, 0xd2, 0x27, 0x1f, 0xc3, 0xca,
- 0xfc, 0xf2, 0x03, 0xd9, 0x49, 0xf4, 0x02, 0x84, 0x6d, 0xe7, 0xc2, 0x45,
- 0x69, 0x66, 0x69, 0xe3, 0xd7, 0x96, 0x6e, 0xf4, 0x03, 0xc6, 0xd1, 0x72,
- 0x61, 0x6c, 0x75, 0x73, 0xae, 0xda, 0x38, 0x63, 0x68, 0x69, 0xf2, 0xd2,
- 0xba, 0xe4, 0x04, 0x27, 0xda, 0x37, 0xee, 0x03, 0x08, 0x95, 0x37, 0x37,
- 0x2d, 0x73, 0x73, 0xec, 0xda, 0x30, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x2e,
- 0x61, 0x74, 0x6c, 0x61, 0x73, 0x73, 0x69, 0x61, 0x6e, 0x2d, 0x64, 0x65,
- 0xf6, 0xda, 0x1b, 0x2d, 0x65, 0x64, 0xe7, 0xcb, 0xc0, 0xae, 0xd3, 0xd8,
- 0xe3, 0x04, 0x03, 0xda, 0x2c, 0xe9, 0xcc, 0x50, 0xae, 0x13, 0x06, 0x06,
- 0x05, 0x07, 0x04, 0x03, 0x04, 0x05, 0x17, 0x0a, 0x02, 0x06, 0x0b, 0x05,
- 0x06, 0x02, 0x09, 0x8d, 0xf7, 0x32, 0x1b, 0x2e, 0xd0, 0xde, 0xf6, 0x40,
- 0x6f, 0x06, 0xd0, 0xde, 0xf5, 0x40, 0x69, 0xc9, 0x57, 0xf4, 0x03, 0xc0,
- 0x41, 0xf8, 0xd4, 0x5d, 0xf3, 0x40, 0x40, 0x96, 0xf2, 0xd1, 0x3d, 0xf0,
- 0x40, 0x5c, 0x8f, 0xef, 0x18, 0x40, 0x4f, 0x86, 0xee, 0x0a, 0x03, 0x03,
- 0x03, 0x12, 0x0b, 0x13, 0x03, 0xd8, 0x02, 0xf6, 0xd4, 0x3f, 0xed, 0xd4,
- 0x3c, 0xea, 0xd4, 0x39, 0xe8, 0xd4, 0x36, 0xed, 0x16, 0x03, 0x13, 0x0a,
- 0x03, 0x03, 0x0c, 0xd0, 0xd2, 0xec, 0xb2, 0xeb, 0x02, 0xba, 0xf9, 0xd4,
- 0x24, 0xe9, 0x04, 0x03, 0x23, 0x92, 0xee, 0xd4, 0x1c, 0xe4, 0xd4, 0x19,
- 0xe8, 0x45, 0x75, 0xcb, 0x88, 0xe7, 0x02, 0x98, 0xf5, 0xd4, 0x0e, 0xe6,
- 0xa6, 0xe4, 0x02, 0x83, 0xe5, 0xd4, 0x06, 0xe3, 0xd4, 0x03, 0xe3, 0x03,
- 0x03, 0x83, 0xf4, 0xd3, 0xfc, 0xef, 0xd3, 0xf9, 0xe1, 0xd3, 0xf6, 0xe1,
- 0x05, 0x03, 0x03, 0x03, 0x83, 0xfa, 0xd3, 0xed, 0xf3, 0xd3, 0xea, 0xf2,
- 0xd3, 0xe7, 0xec, 0xd3, 0xe4, 0xeb, 0xd3, 0xe1, 0xe2, 0x09, 0x56, 0xb3,
- 0x40, 0xc4, 0x40, 0x5c, 0xc0, 0x6d, 0xe7, 0xd8, 0xef, 0xe1, 0x14, 0x05,
- 0x2e, 0x1d, 0x40, 0x5a, 0x16, 0x04, 0x1d, 0x40, 0x4b, 0x1e, 0x05, 0x07,
- 0x07, 0x0d, 0x08, 0x1c, 0xd7, 0xd4, 0x78, 0x69, 0xe1, 0xc0, 0xfc, 0xf4,
- 0x07, 0x0b, 0x05, 0x09, 0x0a, 0xd9, 0x32, 0x68, 0x6f, 0x6c, 0x69, 0xe3,
- 0x03, 0xd9, 0x4d, 0xae, 0xd6, 0x2f, 0x66, 0x6f, 0xef, 0xd8, 0x4b, 0x65,
- 0x72, 0x69, 0x6e, 0xe7, 0x56, 0x63, 0xc2, 0xdd, 0x61, 0xee, 0x03, 0xd2,
- 0xa7, 0x7a, 0x61, 0xf2, 0xd7, 0x30, 0xae, 0xc7, 0xc4, 0xf3, 0x05, 0x07,
- 0x07, 0xd6, 0x8b, 0x69, 0x6e, 0xef, 0x58, 0x24, 0xc1, 0x02, 0xe5, 0x03,
- 0xd9, 0x1e, 0xf2, 0xd0, 0xa9, 0xe1, 0x03, 0xd9, 0x17, 0x63, 0x61, 0xed,
- 0xd8, 0xf0, 0xf2, 0x0a, 0x14, 0x04, 0x0a, 0x03, 0x12, 0x56, 0x67, 0xc2,
- 0x69, 0xf2, 0x02, 0x85, 0x64, 0x2e, 0xe3, 0xd8, 0xc6, 0x61, 0x72, 0xe1,
- 0x02, 0x81, 0x2d, 0x6d, 0x61, 0x73, 0xf3, 0xd2, 0x66, 0x67, 0xef, 0xd6,
- 0x14, 0xe5, 0x03, 0xd8, 0xeb, 0x65, 0xf2, 0x56, 0x80, 0xc2, 0x69, 0xe4,
- 0xd6, 0x7b, 0x62, 0x6f, 0x6e, 0x69, 0xe1, 0x02, 0x81, 0x2d, 0x69, 0x67,
- 0x6c, 0x65, 0x73, 0x69, 0x61, 0xf3, 0xd6, 0xcf, 0xe1, 0x02, 0x83, 0xf6,
- 0xd4, 0x8d, 0x63, 0x61, 0x6c, 0x2e, 0x6d, 0x79, 0x74, 0x68, 0x69, 0x63,
- 0x2d, 0x62, 0x65, 0x61, 0x73, 0xf4, 0xd7, 0x9e, 0xf0, 0x03, 0x04, 0x88,
- 0x6f, 0xef, 0xd7, 0xb7, 0x69, 0x74, 0x61, 0xec, 0x42, 0x8d, 0xd6, 0x1f,
- 0x65, 0x74, 0x6f, 0xf7, 0xd7, 0x6a, 0x6f, 0xe2, 0xcf, 0xf1, 0xee, 0x05,
- 0x0d, 0x05, 0xd1, 0x28, 0x76, 0x61, 0x2d, 0x61, 0x70, 0x70, 0x73, 0x2e,
- 0xe3, 0x44, 0x49, 0xd4, 0x40, 0x74, 0x68, 0xef, 0xcf, 0xdc, 0x64, 0x79,
- 0xf0, 0xc9, 0x7a, 0xed, 0x09, 0x38, 0x04, 0x48, 0x31, 0x4e, 0x07, 0xc2,
- 0x03, 0xf0, 0x05, 0x07, 0x1f, 0xd8, 0x4b, 0x6f, 0x62, 0x61, 0x73, 0xf3,
- 0xd6, 0x68, 0xe9, 0x02, 0x8f, 0x6e, 0xe1, 0x02, 0x83, 0xf3, 0xd7, 0x07,
- 0x67, 0x72, 0x61, 0x6e, 0x64, 0xe5, 0xd6, 0xff, 0x64, 0x61, 0x6e, 0xef,
- 0x02, 0x81, 0x2d, 0x6d, 0x65, 0x64, 0xe9, 0xd6, 0x49, 0xe1, 0x02, 0x83,
- 0xee, 0xd1, 0xb7, 0x69, 0x67, 0x6e, 0xae, 0xce, 0xb1, 0x65, 0xf2, 0xd6,
- 0x96, 0x64, 0x76, 0xf2, 0xd5, 0x68, 0xec, 0x09, 0x08, 0x08, 0x55, 0xcd,
- 0x40, 0x4c, 0xc2, 0x03, 0x76, 0x69, 0x6e, 0x6b, 0x6c, 0xe5, 0xd6, 0xeb,
- 0x74, 0x61, 0x6e, 0x69, 0x73, 0xf3, 0xcf, 0xa8, 0x61, 0xe2, 0xd1, 0x89,
- 0x68, 0x63, 0xe5, 0xcf, 0xc5, 0x67, 0x6c, 0x69, 0x61, 0xf2, 0xcf, 0xaa,
- 0xe6, 0x03, 0xd6, 0x8c, 0xea, 0xd6, 0xeb, 0xe2, 0x03, 0xd8, 0x01, 0x6c,
- 0x65, 0x2d, 0x6d, 0x6f, 0x64, 0xe5, 0xd5, 0x29, 0x61, 0xae, 0x03, 0xd5,
- 0x17, 0xec, 0xd7, 0x9a, 0xae, 0x08, 0x0e, 0x51, 0x7b, 0x41, 0x5a, 0xc1,
- 0x1d, 0x72, 0x65, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x2e, 0x63, 0x6c, 0x6f,
- 0xf5, 0xcb, 0xa6, 0xe9, 0x56, 0x1a, 0xc0, 0x84, 0x2d, 0x63, 0x65, 0x6e,
- 0x74, 0x72, 0x61, 0xec, 0xce, 0x74, 0x36, 0xb6, 0xc1, 0xc3, 0xae, 0x07,
- 0x42, 0xc0, 0x43, 0x98, 0xd1, 0x64, 0x63, 0x64, 0x6e, 0x37, 0xb7, 0xd4,
- 0xe9, 0xe2, 0x24, 0x35, 0x17, 0x21, 0x40, 0x84, 0x05, 0x13, 0x40, 0x96,
- 0x0c, 0x40, 0xe0, 0x15, 0x19, 0x41, 0x52, 0x1b, 0x41, 0x0c, 0x0d, 0x09,
- 0x40, 0xe0, 0x08, 0x25, 0x10, 0x42, 0x52, 0x09, 0x43, 0xe9, 0x47, 0x2d,
- 0xc1, 0x4c, 0x1f, 0xc3, 0x04, 0x0a, 0x05, 0x91, 0xf8, 0x02, 0x83, 0xed,
- 0xcf, 0x3b, 0xae, 0x42, 0x72, 0x86, 0x66, 0x72, 0xf5, 0xcb, 0xd3, 0xe5,
- 0x02, 0x83, 0xf4, 0xc6, 0x6e, 0x64, 0x1f, 0x43, 0x65, 0x64, 0x64, 0x6a,
- 0x1f, 0xc3, 0xd5, 0xd8, 0xe1, 0x05, 0x03, 0x48, 0x06, 0x8c, 0xec, 0xc4,
- 0xd2, 0x69, 0x64, 0x1f, 0xc3, 0xc8, 0x0b, 0xfa, 0x07, 0x54, 0xc5, 0x40,
- 0x8d, 0xc2, 0x03, 0x7a, 0x2e, 0x64, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x65,
- 0x61, 0x72, 0x74, 0xe8, 0xd7, 0x36, 0xf9, 0x07, 0x04, 0x03, 0x03, 0x06,
- 0xd7, 0x2e, 0x74, 0xef, 0xca, 0xd3, 0xeb, 0xc7, 0x83, 0xe7, 0xca, 0x7f,
- 0x65, 0x6e, 0x2e, 0xf3, 0xc6, 0xad, 0x64, 0x67, 0x6f, 0x73, 0x7a, 0x63,
- 0xfa, 0xd2, 0x6c, 0xf5, 0x0b, 0x09, 0x0e, 0x03, 0x12, 0x18, 0x04, 0x06,
- 0x25, 0xd5, 0x11, 0xfa, 0x03, 0xd4, 0xa2, 0x65, 0x6e, 0xae, 0xcb, 0x84,
- 0xf9, 0x03, 0xd7, 0x0c, 0x73, 0x68, 0xef, 0x03, 0xc7, 0xfe, 0x75, 0xf3,
- 0xc8, 0x8b, 0xf4, 0xd6, 0x06, 0xf3, 0x02, 0x89, 0x69, 0x6e, 0x65, 0x73,
- 0xf3, 0x55, 0xbb, 0xc1, 0x3c, 0x61, 0x6e, 0x2e, 0xeb, 0xd5, 0x96, 0xee,
- 0x02, 0x84, 0x6b, 0xf9, 0xd0, 0xe3, 0x67, 0xef, 0x02, 0x88, 0x74, 0x61,
- 0x6b, 0x61, 0x64, 0xe1, 0xc4, 0xff, 0x6f, 0x6e, 0xef, 0xc4, 0xfa, 0x6c,
- 0xf3, 0xc7, 0x30, 0x6b, 0x68, 0x61, 0xf2, 0xd4, 0xe2, 0x69, 0xec, 0x02,
- 0x8a, 0x74, 0x77, 0x69, 0x74, 0x68, 0x64, 0x61, 0xf2, 0xd2, 0xcb, 0xe4,
- 0x04, 0x0c, 0xd6, 0xac, 0x65, 0xf2, 0x03, 0xd4, 0x4a, 0x2e, 0x63, 0x6f,
- 0x64, 0xe5, 0xd6, 0x98, 0x2e, 0x72, 0x75, 0xee, 0xd6, 0x96, 0x64, 0x65,
- 0xea, 0xd0, 0x31, 0xf4, 0x54, 0x9d, 0xc2, 0x03, 0xf3, 0x06, 0x09, 0x54,
- 0x89, 0xc2, 0x03, 0x73, 0x2e, 0x64, 0x65, 0x73, 0x69, 0xe7, 0xc2, 0x48,
- 0xe2, 0xd5, 0x30, 0xf2, 0x0a, 0x09, 0x09, 0x0e, 0x31, 0x12, 0x0d, 0x16,
- 0xd5, 0xf8, 0x1f, 0x43, 0x78, 0x6e, 0x6e, 0x1f, 0x43, 0xf8, 0xb4, 0xf9,
- 0x02, 0x83, 0xee, 0xd4, 0xdb, 0xe1, 0xd0, 0x2f, 0xf5, 0x02, 0x85, 0x73,
- 0x73, 0xe5, 0xc3, 0x52, 0x6d, 0x75, 0x6e, 0xe4, 0xcf, 0x44, 0xef, 0x05,
- 0x0f, 0x04, 0x0a, 0x89, 0x77, 0x73, 0x65, 0x72, 0x73, 0x61, 0x66, 0x65,
- 0x74, 0x79, 0x6d, 0x61, 0xf2, 0xcc, 0xdd, 0x74, 0xe8, 0xc2, 0xa7, 0x6e,
- 0x6e, 0x6f, 0xf9, 0x03, 0xd4, 0xa9, 0xf3, 0xcf, 0xa4, 0x6b, 0xe5, 0x03,
- 0xc8, 0xa7, 0x2d, 0xe9, 0xc9, 0xe0, 0x61, 0x64, 0xf7, 0xcf, 0x86, 0xe9,
- 0x02, 0x86, 0x6e, 0x64, 0x69, 0xf3, 0xcd, 0xc2, 0x64, 0x67, 0x65, 0x73,
- 0x74, 0x6f, 0xee, 0xd4, 0xa1, 0xe5, 0x02, 0x84, 0x73, 0xe3, 0xcf, 0x86,
- 0x6d, 0x61, 0x6e, 0xe7, 0xca, 0x67, 0xe1, 0x03, 0x09, 0x84, 0x73, 0x69,
- 0x6c, 0x69, 0x61, 0x2e, 0xed, 0xd5, 0x9e, 0x6e, 0xe4, 0xc4, 0x98, 0x64,
- 0x65, 0xf3, 0xcb, 0x86, 0xae, 0x53, 0xf5, 0xc1, 0xfb, 0x70, 0x6c, 0x61,
- 0x63, 0x65, 0x64, 0xae, 0x55, 0x4c, 0x40, 0x7d, 0x9c, 0xef, 0x13, 0x04,
- 0x0b, 0x09, 0x14, 0x0d, 0x1c, 0x05, 0x05, 0x3b, 0x03, 0x03, 0x08, 0x09,
- 0x0a, 0x53, 0x5a, 0xc1, 0xbe, 0x7a, 0xe5, 0xc6, 0x2f, 0xf9, 0x03, 0xd4,
- 0xd0, 0x66, 0x72, 0x69, 0x65, 0xee, 0xd4, 0xca, 0xf8, 0x03, 0xd5, 0xc0,
- 0x66, 0x75, 0xf3, 0xcc, 0x1f, 0xf5, 0x02, 0x89, 0x74, 0xe9, 0x03, 0xd4,
- 0xcd, 0x71, 0xf5, 0xd4, 0x35, 0xee, 0x03, 0xce, 0xce, 0x63, 0xe5, 0xd2,
- 0x38, 0xf3, 0x02, 0x87, 0xf4, 0x03, 0xce, 0x42, 0xe9, 0xd3, 0x39, 0xe3,
- 0xd3, 0x0c, 0xef, 0x06, 0x04, 0x54, 0x94, 0xc0, 0xfb, 0x6d, 0xec, 0xce,
- 0x71, 0xeb, 0x04, 0x08, 0xd5, 0x82, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0xe5,
- 0xd4, 0x0e, 0x69, 0xee, 0xd5, 0x7f, 0xee, 0x45, 0xcc, 0xcd, 0x65, 0xed,
- 0x4d, 0x2b, 0xc8, 0x4d, 0xec, 0x06, 0x0e, 0x03, 0x04, 0x04, 0x8a, 0x7a,
- 0x61, 0x6e, 0xef, 0x03, 0xd3, 0x63, 0x2d, 0x61, 0x6c, 0x74, 0xef, 0xce,
- 0x55, 0xf4, 0xd4, 0x5c, 0x6f, 0xe7, 0xcd, 0x13, 0x69, 0xf6, 0xd2, 0x9c,
- 0x65, 0x73, 0x6c, 0x61, 0x77, 0x69, 0x65, 0xe3, 0xd0, 0x91, 0x64, 0x6c,
- 0x79, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x6e, 0x6f, 0x77, 0x68, 0x65, 0x72,
- 0xe5, 0xd2, 0x6b, 0xeb, 0xcf, 0x03, 0xe6, 0xd3, 0x8e, 0x65, 0x68, 0x72,
- 0x69, 0x6e, 0xe7, 0xc1, 0x8d, 0xe4, 0x03, 0xcc, 0xdb, 0x1f, 0x43, 0xf8,
- 0xd3, 0x8f, 0xe1, 0x03, 0xcb, 0x9b, 0x76, 0x69, 0x73, 0xf4, 0xcb, 0x9e,
- 0xae, 0x04, 0x06, 0xd3, 0x0b, 0x74, 0x65, 0x6c, 0xe5, 0xca, 0x7c, 0x6e,
- 0x6f, 0x72, 0xe4, 0xc8, 0x52, 0xee, 0x06, 0x05, 0x52, 0xf8, 0xc2, 0x03,
- 0x72, 0x2e, 0xec, 0xc4, 0xb2, 0x70, 0x70, 0x61, 0x72, 0x69, 0x62, 0xe1,
- 0xd2, 0x8b, 0xed, 0x07, 0x0e, 0x52, 0x6c, 0x07, 0xc2, 0x69, 0x6f, 0x61,
- 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0xf3, 0xd2, 0x0e,
- 0xe4, 0xd3, 0x80, 0xec, 0x06, 0x10, 0x41, 0x25, 0xd1, 0x9a, 0xf5, 0x02,
- 0x84, 0x73, 0xe8, 0xd3, 0xd2, 0xe5, 0x03, 0xd4, 0xc7, 0x62, 0x69, 0xf4,
- 0xcb, 0x26, 0xef, 0x05, 0x05, 0x07, 0xc1, 0x0a, 0x78, 0x63, 0xed, 0xd3,
- 0x9d, 0x6f, 0x6d, 0x62, 0x65, 0xf2, 0xd4, 0xb1, 0xe7, 0x06, 0x40, 0xe8,
- 0x09, 0xd3, 0xb8, 0xf3, 0x04, 0x03, 0xc0, 0xd5, 0xf9, 0xcc, 0xf7, 0x70,
- 0x6f, 0x74, 0xae, 0x16, 0x03, 0x03, 0x07, 0x08, 0x06, 0x03, 0x05, 0x05,
- 0x0a, 0x05, 0x03, 0x0a, 0x06, 0x03, 0x04, 0x04, 0x40, 0x54, 0x0b, 0xd2,
- 0xd9, 0xf6, 0xc0, 0x40, 0xf5, 0xd1, 0xb6, 0xf4, 0x03, 0xc8, 0x48, 0xf7,
- 0xd4, 0x78, 0xf3, 0x33, 0x51, 0x79, 0x42, 0x68, 0x0d, 0xa0, 0xf2, 0x53,
- 0xe9, 0x19, 0x0a, 0xaa, 0xf1, 0xc4, 0x20, 0xf0, 0x54, 0x03, 0xc0, 0x44,
- 0xee, 0x53, 0xb0, 0xc0, 0x78, 0xed, 0x42, 0xee, 0x45, 0x29, 0x12, 0x4b,
- 0xa5, 0xc0, 0x58, 0xec, 0x53, 0xcc, 0x30, 0xb7, 0xeb, 0xd3, 0xbf, 0xe9,
- 0x06, 0x53, 0xd7, 0x0a, 0xc0, 0x44, 0xee, 0xd4, 0x41, 0xe8, 0x53, 0xb2,
- 0x08, 0xc0, 0x50, 0xe7, 0xd3, 0xac, 0xe6, 0x53, 0xa9, 0xb8, 0xe4, 0x53,
- 0xd0, 0xad, 0xe3, 0x0c, 0x40, 0xf3, 0x42, 0xe7, 0x42, 0xb2, 0x4a, 0x76,
- 0x42, 0x70, 0x86, 0xef, 0x02, 0xad, 0xed, 0x03, 0xd4, 0x1a, 0xae, 0x08,
- 0x03, 0x03, 0x03, 0x03, 0x06, 0x05, 0x85, 0xf5, 0xc2, 0xa4, 0xf4, 0xd3,
- 0x81, 0xee, 0xd1, 0x41, 0xed, 0xd3, 0xea, 0xe5, 0x51, 0x3b, 0x42, 0x5e,
- 0x8a, 0xe3, 0x42, 0x92, 0xd1, 0x35, 0xe2, 0x42, 0x8d, 0xd0, 0xe0, 0xe1,
- 0x53, 0x68, 0x88, 0xae, 0x08, 0x03, 0x03, 0x03, 0x50, 0x95, 0xc2, 0xb0,
- 0xfa, 0xc3, 0xa0, 0xee, 0xd0, 0xc5, 0xeb, 0xd3, 0x80, 0xe9, 0x47, 0xad,
- 0xcb, 0x82, 0xe2, 0x07, 0x43, 0x8b, 0x4d, 0x7e, 0xc2, 0x68, 0xea, 0xd3,
- 0xd1, 0xe1, 0x53, 0x1f, 0x40, 0x4e, 0xc0, 0x60, 0x69, 0x74, 0x65, 0xae,
- 0x03, 0xd0, 0xf6, 0x78, 0xf9, 0xd0, 0xa0, 0x64, 0x6e, 0x73, 0xae, 0x50,
- 0xee, 0x42, 0xac, 0x9c, 0xae, 0x04, 0x03, 0x03, 0x83, 0xf6, 0xd3, 0x2a,
- 0xeb, 0xd0, 0xe2, 0xe7, 0xd3, 0x8b, 0xe2, 0x52, 0x1e, 0xb2, 0x63, 0x6b,
- 0x62, 0x75, 0x73, 0x74, 0xe5, 0xd2, 0x46, 0x61, 0x63, 0xeb, 0x04, 0x06,
- 0xd3, 0x90, 0x66, 0x72, 0x69, 0xe4, 0xcc, 0xe9, 0x62, 0x61, 0x75, 0x64,
- 0x63, 0x64, 0xee, 0xd3, 0x65, 0xea, 0x06, 0x04, 0x06, 0x07, 0xd3, 0x6f,
- 0x75, 0xe7, 0xcd, 0x49, 0x65, 0x72, 0x6b, 0xf2, 0xc6, 0x98, 0x61, 0x72,
- 0xeb, 0x47, 0xc3, 0xc3, 0x0d, 0xae, 0xce, 0xc6, 0xe9, 0x13, 0x40, 0x5d,
- 0x18, 0x0d, 0x03, 0x05, 0x22, 0x03, 0x08, 0x05, 0x1d, 0x0d, 0x50, 0x26,
- 0x40, 0x49, 0xc2, 0x03, 0xfa, 0x04, 0x04, 0xd3, 0x4f, 0x65, 0xee, 0xcd,
- 0x91, 0xae, 0x18, 0x03, 0x04, 0x03, 0x07, 0x06, 0x05, 0x06, 0x03, 0x03,
- 0x05, 0x03, 0x03, 0x03, 0x4b, 0x94, 0x43, 0x0b, 0x41, 0xc6, 0x40, 0x5a,
- 0xc2, 0x08, 0xfa, 0xd0, 0xe3, 0x77, 0xe6, 0xd3, 0x2d, 0xf5, 0xc2, 0xe3,
- 0xf4, 0x50, 0xeb, 0x40, 0x82, 0xc0, 0x65, 0xf0, 0x50, 0xbe, 0x17, 0xc0,
- 0xf6, 0xee, 0x51, 0x05, 0xc0, 0xc0, 0xed, 0x4f, 0x5d, 0x41, 0x4c, 0xb9,
- 0xec, 0xd0, 0xaa, 0xeb, 0xd0, 0xf7, 0xe9, 0x50, 0xc1, 0xc1, 0x12, 0xe7,
- 0xd2, 0x55, 0xe5, 0xd1, 0x47, 0xe2, 0xc8, 0xa9, 0xe1, 0x50, 0x8c, 0xc2,
- 0x52, 0xf4, 0x02, 0x85, 0x74, 0x65, 0xf2, 0xd1, 0xfa, 0xe2, 0x02, 0x87,
- 0x75, 0x63, 0x6b, 0x65, 0xf4, 0xd1, 0xe3, 0x72, 0x69, 0x64, 0xe7, 0xcf,
- 0x75, 0xf2, 0x04, 0x03, 0xd2, 0x51, 0xeb, 0xce, 0x87, 0x61, 0x74, 0xef,
- 0xd1, 0x21, 0xf0, 0xc1, 0x94, 0xef, 0x51, 0x77, 0xc1, 0x5b, 0xee, 0x04,
- 0x18, 0xcb, 0x95, 0xe8, 0x03, 0x05, 0x87, 0x74, 0x68, 0xf5, 0xc3, 0xbd,
- 0x70, 0x68, 0x75, 0x6f, 0xe3, 0xca, 0x0f, 0xe4, 0x03, 0xc3, 0x7d, 0x75,
- 0xef, 0xca, 0x05, 0xe7, 0x51, 0x25, 0xc1, 0x8b, 0xeb, 0xd1, 0x2f, 0xe8,
- 0x03, 0xc7, 0x07, 0x61, 0xf2, 0xd1, 0x67, 0x66, 0x75, 0xeb, 0xd0, 0xbc,
- 0xe5, 0x05, 0x08, 0x07, 0xd0, 0xd1, 0xf6, 0x02, 0x82, 0x1f, 0x43, 0xe1,
- 0xca, 0xf3, 0x73, 0x7a, 0x63, 0x7a, 0xe1, 0xc0, 0x88, 0xec, 0x03, 0xc8,
- 0x3e, 0x61, 0xf7, 0xc3, 0x9d, 0xe2, 0x04, 0x03, 0xd0, 0x84, 0xe1, 0xd0,
- 0xc3, 0xae, 0x47, 0x89, 0xc9, 0x93, 0x61, 0xec, 0x02, 0x87, 0x79, 0x73,
- 0x74, 0x6f, 0xeb, 0xcd, 0xae, 0x6f, 0x77, 0x69, 0x65, 0xfa, 0xc3, 0x7e,
- 0xe8, 0x04, 0x03, 0xd2, 0x58, 0xfa, 0xd0, 0xff, 0x61, 0x72, 0xf4, 0xd0,
- 0x3c, 0xe7, 0x03, 0xd2, 0x4f, 0xae, 0x4b, 0xf0, 0xc4, 0x5c, 0xe5, 0x0e,
- 0x2d, 0x11, 0x1d, 0x07, 0x11, 0x13, 0x05, 0x09, 0x08, 0x06, 0x23, 0xd1,
- 0x76, 0xf4, 0x05, 0x0c, 0x17, 0xd2, 0x12, 0x74, 0x65, 0x72, 0x2d, 0x74,
- 0x68, 0x61, 0x6e, 0x2e, 0xf4, 0xc4, 0x92, 0xe1, 0x02, 0x87, 0x69, 0x6e,
- 0x61, 0x62, 0xef, 0xc8, 0x28, 0xae, 0x03, 0xcb, 0x3a, 0x74, 0x61, 0x69,
- 0x6c, 0x73, 0x63, 0xe1, 0xc3, 0xb1, 0x2e, 0xe1, 0xd0, 0xb7, 0xf3, 0x02,
- 0x88, 0xf4, 0x03, 0xd2, 0x07, 0x62, 0xf5, 0xcf, 0xce, 0x6b, 0x69, 0x64,
- 0xf9, 0xcd, 0x44, 0xf2, 0x02, 0x90, 0xec, 0x03, 0xd0, 0xbb, 0x65, 0xf6,
- 0x02, 0x85, 0x1f, 0x43, 0xe5, 0xcb, 0x00, 0xe1, 0xca, 0xfd, 0xe7, 0x05,
- 0x42, 0x68, 0xcd, 0xe7, 0x61, 0xed, 0xcf, 0xde, 0x70, 0x70, 0x75, 0x2e,
- 0xef, 0xcb, 0xc9, 0xee, 0x02, 0x8a, 0xf4, 0x02, 0x84, 0x72, 0xe5, 0xc9,
- 0x25, 0xec, 0xc5, 0x54, 0x65, 0xf6, 0xcd, 0x51, 0xec, 0x05, 0x04, 0x03,
- 0xc0, 0x8b, 0x6c, 0xf5, 0xc6, 0x5d, 0xe5, 0xce, 0x65, 0x61, 0x75, 0x2e,
- 0xf0, 0xcf, 0x47, 0x69, 0x61, 0xf2, 0xcb, 0x7d, 0x67, 0x65, 0x74, 0x2e,
- 0x61, 0x70, 0xf0, 0xd1, 0x97, 0xe5, 0x03, 0xd0, 0x4a, 0x70, 0xae, 0xc6,
- 0xcb, 0x64, 0x7a, 0x69, 0xee, 0xcc, 0xe0, 0xe1, 0x05, 0x04, 0x10, 0xc7,
- 0xfc, 0x75, 0xf4, 0xcf, 0x5a, 0xf2, 0x03, 0xc1, 0x90, 0x61, 0x6c, 0xf6,
- 0x02, 0x82, 0x1f, 0x43, 0x61, 0x68, 0xeb, 0xc9, 0xe8, 0x67, 0x6c, 0x65,
- 0x62, 0x6f, 0x61, 0xf2, 0xc7, 0xd2, 0xae, 0x04, 0x04, 0xcb, 0x0f, 0x67,
- 0xf9, 0xd1, 0x6b, 0xe1, 0xc5, 0x25, 0xe4, 0x02, 0x84, 0x2e, 0xf3, 0xcf,
- 0xe9, 0x86, 0xe3, 0x06, 0x0e, 0x50, 0x13, 0xc1, 0x39, 0x69, 0x2e, 0x64,
- 0x6e, 0x73, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0xf0, 0xc0, 0xd7, 0xae,
- 0x03, 0xcf, 0xa1, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e,
- 0xf3, 0xd0, 0x92, 0xe2, 0x08, 0x03, 0x45, 0x4e, 0x4a, 0x25, 0xc1, 0xbe,
- 0xf6, 0xcf, 0x8c, 0x73, 0xae, 0xc3, 0x75, 0xe1, 0x14, 0x05, 0x05, 0x09,
- 0x34, 0x40, 0xf5, 0x22, 0x0c, 0x40, 0x51, 0x04, 0x08, 0x0c, 0x07, 0x40,
- 0x40, 0x1d, 0xce, 0xe1, 0x79, 0x65, 0xf2, 0xcf, 0xdb, 0x75, 0x68, 0xe1,
- 0xcc, 0x0c, 0xf4, 0x02, 0x83, 0xf3, 0xc1, 0x64, 0xef, 0xc5, 0x82, 0xf3,
- 0x06, 0x04, 0x11, 0x07, 0xce, 0xdf, 0x6b, 0x65, 0xf4, 0x9c, 0xe9, 0x02,
- 0x86, 0x6c, 0x69, 0x63, 0xe1, 0xc8, 0x7f, 0x63, 0x73, 0x65, 0x72, 0x76,
- 0xe5, 0xc6, 0xeb, 0x68, 0x6b, 0x69, 0x72, 0xe9, 0xcd, 0x42, 0xe5, 0x02,
- 0x85, 0x62, 0x61, 0xec, 0xce, 0x8d, 0xae, 0x02, 0x83, 0xf3, 0xc0, 0x57,
- 0xe5, 0xd0, 0xc4, 0xf2, 0x11, 0x08, 0x40, 0x72, 0x19, 0x17, 0x0e, 0x06,
- 0x06, 0x03, 0x13, 0x03, 0x03, 0x4e, 0x51, 0xc1, 0x8e, 0xf5, 0x03, 0xc5,
- 0x0f, 0x65, 0xf2, 0xc8, 0x7c, 0x73, 0xf9, 0x03, 0x0d, 0x86, 0x6f, 0x6e,
- 0x6c, 0x69, 0x6e, 0x65, 0x2e, 0x63, 0xef, 0x4d, 0x5a, 0xc3, 0x4a, 0x63,
- 0x65, 0x6e, 0xf4, 0xc6, 0xca, 0xae, 0x10, 0x13, 0x03, 0x03, 0x0a, 0x0e,
- 0x08, 0x0d, 0x4b, 0x2f, 0x41, 0xcb, 0x42, 0xae, 0xc0, 0x7d, 0xf3, 0x03,
- 0x07, 0x84, 0x75, 0x70, 0x70, 0x6f, 0xf2, 0xd0, 0x64, 0x69, 0xf4, 0xd0,
- 0x1c, 0x68, 0xef, 0xcf, 0x84, 0xf0, 0x02, 0xa9, 0xf2, 0xd0, 0x3c, 0xef,
- 0x03, 0xcd, 0xa3, 0x6e, 0x6c, 0x69, 0xee, 0xd0, 0x08, 0xed, 0x02, 0x84,
- 0x6f, 0xe2, 0xd0, 0x0e, 0xe5, 0x03, 0xd0, 0x5c, 0xee, 0xcf, 0xd7, 0xe9,
- 0x03, 0xd0, 0x1e, 0xee, 0x29, 0xd0, 0x2b, 0xe3, 0x04, 0x05, 0xcc, 0xfb,
- 0x6c, 0x75, 0xe2, 0xd0, 0x49, 0xe1, 0xd0, 0x46, 0xe2, 0xcd, 0x7a, 0x72,
- 0x65, 0xec, 0x02, 0x81, 0x6c, 0x2d, 0x6f, 0x66, 0x2d, 0x6b, 0x6e, 0x6f,
- 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x69, 0x6e, 0xe6, 0xcf, 0xf3,
- 0x6c, 0x65, 0x74, 0x74, 0xe1, 0x02, 0x87, 0x74, 0x72, 0x61, 0x6e, 0xe9,
- 0xc9, 0x8c, 0x2d, 0x74, 0x72, 0x61, 0x6e, 0x69, 0xad, 0xc9, 0x83, 0xe9,
- 0x03, 0xce, 0x0e, 0x61, 0x2d, 0x76, 0x75, 0x6e, 0x67, 0x74, 0xe1, 0xc0,
- 0xd9, 0x67, 0x61, 0x69, 0xee, 0xcd, 0x9a, 0x65, 0x66, 0x6f, 0xef, 0xce,
- 0x3f, 0xe4, 0xc9, 0x89, 0xe3, 0x02, 0x8b, 0x6c, 0x61, 0xf9, 0x03, 0xcd,
- 0x86, 0x63, 0x61, 0xf2, 0xcd, 0xa0, 0x65, 0x6c, 0xef, 0xcc, 0x00, 0xb2,
- 0xcf, 0xc0, 0xb1, 0xcf, 0xbd, 0xb0, 0xcf, 0xba, 0xee, 0x05, 0x0b, 0x0c,
- 0xcd, 0x59, 0x7a, 0x61, 0x69, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0xe4, 0xcf,
- 0xbb, 0xe4, 0x04, 0x03, 0xcf, 0xc3, 0xef, 0xc8, 0x33, 0x61, 0xe9, 0xca,
- 0x55, 0x61, 0x6d, 0xe5, 0xc8, 0x3a, 0x6d, 0xe2, 0x02, 0x83, 0xec, 0xce,
- 0x1f, 0x69, 0x6e, 0xe1, 0xce, 0xb5, 0xec, 0x04, 0x1f, 0x11, 0x92, 0xf3,
- 0x02, 0x83, 0xe6, 0xcb, 0x80, 0x61, 0xee, 0x03, 0xcd, 0x9b, 0x2d, 0xf3,
- 0x02, 0x84, 0x1f, 0x43, 0xfc, 0x85, 0xf5, 0x02, 0x81, 0x65, 0x64, 0x74,
- 0x69, 0x72, 0x6f, 0xec, 0xcd, 0x89, 0xec, 0x02, 0x88, 0x6f, 0x6f, 0x6e,
- 0x69, 0x6e, 0xe7, 0xcc, 0xa4, 0x61, 0x6e, 0x67, 0xe5, 0xc9, 0x46, 0xe5,
- 0x02, 0x85, 0x73, 0x74, 0xf2, 0xc2, 0xbd, 0x6e, 0x61, 0x2d, 0x64, 0x65,
- 0x76, 0x69, 0xe3, 0xce, 0x4c, 0xe1, 0x03, 0xc7, 0xc6, 0x73, 0x68, 0x6f,
- 0xf6, 0xcd, 0x75, 0x6a, 0x64, 0xe4, 0x86, 0x69, 0xe4, 0x03, 0xce, 0x54,
- 0xe1, 0xc3, 0xab, 0x68, 0xe3, 0x02, 0x81, 0x63, 0x61, 0x76, 0x75, 0x6f,
- 0xf4, 0xc4, 0x7c, 0x64, 0x61, 0x64, 0x64, 0xea, 0xc9, 0x18, 0xe3, 0x04,
- 0x06, 0x06, 0xac, 0x6e, 0x69, 0x6e, 0xe8, 0xc6, 0x89, 0x6c, 0x69, 0x65,
- 0xf5, 0xc6, 0x83, 0xeb, 0x04, 0x13, 0x0a, 0x86, 0x79, 0x61, 0x72, 0x64,
- 0x73, 0x2e, 0x62, 0x61, 0x6e, 0x7a, 0x61, 0x69, 0x63, 0x6c, 0x6f, 0x75,
- 0xe4, 0xc0, 0xaa, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x61, 0x70, 0xf0, 0xce,
- 0x05, 0x64, 0x72, 0x6f, 0xf0, 0xce, 0x0c, 0x61, 0xee, 0xc6, 0x57, 0xe7,
- 0xc6, 0x50, 0xe2, 0x02, 0x91, 0xf9, 0x04, 0x06, 0xce, 0xf0, 0x6d, 0x69,
- 0x6c, 0xeb, 0xcd, 0xf7, 0x62, 0x6c, 0x75, 0xe5, 0xcd, 0xf1, 0x69, 0x61,
- 0x2d, 0x67, 0x6f, 0x72, 0xe1, 0xca, 0x28, 0xae, 0x48, 0x7c, 0x03, 0xc4,
- 0x5f, 0xae, 0x03, 0xcd, 0x55, 0xe2, 0x4d, 0x7d, 0xc1, 0x58, 0x2d, 0x64,
- 0x61, 0x74, 0xe1, 0xcd, 0xc5, 0xe1, 0x2c, 0x0c, 0x40, 0x49, 0x21, 0x05,
- 0x3a, 0x32, 0x41, 0x2d, 0x40, 0x64, 0x41, 0x0e, 0x40, 0xc9, 0x13, 0x41,
- 0x16, 0x36, 0x41, 0x21, 0x40, 0x99, 0x40, 0xdc, 0x40, 0xb8, 0x03, 0x40,
- 0xf2, 0x08, 0x40, 0x69, 0x40, 0x4b, 0x3d, 0x40, 0x74, 0x41, 0x14, 0x40,
- 0x88, 0x9c, 0x1f, 0x43, 0x69, 0x72, 0x6f, 0x70, 0x6f, 0x72, 0x74, 0xae,
- 0xc2, 0xbd, 0xfa, 0x07, 0x30, 0x07, 0x48, 0xae, 0xc5, 0xa5, 0xf5, 0x02,
- 0xa7, 0x72, 0xe5, 0x06, 0x09, 0x0e, 0x4e, 0x3a, 0xae, 0x77, 0x65, 0x62,
- 0x73, 0x69, 0x74, 0xe5, 0xce, 0x53, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69,
- 0x6e, 0x65, 0x72, 0x2e, 0x69, 0xef, 0xce, 0x58, 0x2d, 0x6d, 0x6f, 0x62,
- 0x69, 0xec, 0xca, 0xf2, 0x6d, 0x69, 0x6e, 0xef, 0xcb, 0x48, 0x69, 0x6d,
- 0x75, 0x74, 0xe8, 0xc3, 0x51, 0x65, 0x72, 0x62, 0x61, 0x69, 0x6a, 0x61,
- 0xee, 0xcc, 0x61, 0x79, 0xe1, 0x04, 0x04, 0x08, 0x87, 0x73, 0xe5, 0xc9,
- 0x7e, 0x67, 0x61, 0x77, 0x61, 0x2e, 0xeb, 0xc9, 0x7a, 0x62, 0x65, 0x2e,
- 0x6b, 0xf9, 0xc6, 0xe5, 0x2e, 0x6d, 0x69, 0x79, 0x61, 0xfa, 0xc6, 0x9d,
- 0xf8, 0x4c, 0x80, 0xc1, 0xa7, 0xf7, 0x05, 0x28, 0x08, 0xcd, 0xed, 0xf3,
- 0x05, 0x05, 0x12, 0xce, 0x00, 0x6d, 0x70, 0xf0, 0xc7, 0x3d, 0x67, 0x6c,
+ 0x64, 0x65, 0x6c, 0x6c, 0x61, 0x2d, 0x62, 0x72, 0x69, 0xe1, 0xe0, 0x48,
+ 0x93, 0x67, 0x6f, 0x6c, 0xe9, 0xd9, 0x4d, 0x65, 0xf9, 0x60, 0x60, 0xbf,
+ 0xca, 0xf7, 0x61, 0xf3, 0xe0, 0x68, 0xcc, 0xed, 0x60, 0x66, 0x6a, 0xc5,
+ 0x41, 0xec, 0x07, 0x60, 0x31, 0xfa, 0xe0, 0x37, 0x4e, 0x69, 0xf3, 0xe0,
+ 0x64, 0x03, 0xeb, 0x04, 0xe0, 0x5f, 0x96, 0x75, 0x72, 0xe5, 0xe0, 0x30,
+ 0xf1, 0xe4, 0x09, 0x04, 0x09, 0x07, 0x60, 0x4e, 0xec, 0xc4, 0x5e, 0xf8,
+ 0xe0, 0x60, 0x98, 0xe5, 0x04, 0xe0, 0x62, 0xa3, 0xec, 0xe0, 0x2c, 0x5d,
+ 0xe1, 0x60, 0x2b, 0x8e, 0xe0, 0x3f, 0xe8, 0xae, 0xc8, 0x2d, 0xe3, 0x02,
+ 0x89, 0x6b, 0x2e, 0x70, 0x73, 0x74, 0xed, 0xe0, 0x44, 0xc0, 0x68, 0x69,
+ 0x7a, 0xf5, 0xe0, 0x61, 0xd3, 0xe2, 0x04, 0xe0, 0x22, 0xdd, 0xe9, 0x06,
+ 0x60, 0x69, 0x08, 0xc2, 0x46, 0xae, 0x07, 0x06, 0x60, 0x57, 0xfe, 0xc6,
+ 0xdd, 0xf4, 0x60, 0x68, 0x7f, 0xc0, 0xb5, 0xee, 0x60, 0x69, 0x45, 0xc1,
+ 0xf9, 0x61, 0x72, 0xe5, 0xe0, 0x38, 0x71, 0xae, 0x60, 0x65, 0xa7, 0x40,
+ 0x5c, 0xc2, 0xdb, 0xad, 0x02, 0x8a, 0x73, 0x69, 0x65, 0x6d, 0x65, 0x6e,
+ 0xf3, 0xe0, 0x69, 0xd0, 0x69, 0x2d, 0x72, 0xe1, 0xe0, 0x5f, 0xd8, 0xee,
+ 0x60, 0x47, 0x04, 0xe0, 0x24, 0x13, 0xed, 0x04, 0xe0, 0x59, 0x10, 0xe1,
+ 0x04, 0xe0, 0x6b, 0x07, 0x66, 0x61, 0xee, 0xe0, 0x67, 0x89, 0xec, 0x06,
+ 0x60, 0x68, 0x3e, 0xc2, 0xbc, 0xe2, 0x60, 0x49, 0xf1, 0xe0, 0x21, 0x08,
+ 0xeb, 0x47, 0x2e, 0xe0, 0x63, 0xc4, 0xea, 0x02, 0x84, 0x1f, 0x43, 0xf8,
+ 0x82, 0x6f, 0x6e, 0xe4, 0xe0, 0x24, 0xec, 0xe9, 0x18, 0x1c, 0x40, 0x56,
+ 0x34, 0x40, 0x43, 0x0e, 0x40, 0xd5, 0x11, 0x40, 0xa1, 0x0d, 0x23, 0x0a,
+ 0x07, 0x0c, 0x19, 0x12, 0x05, 0x10, 0xd2, 0xda, 0x7a, 0xf5, 0x04, 0x07,
+ 0x06, 0x85, 0x73, 0x61, 0x77, 0xe1, 0xe0, 0x32, 0xc5, 0x6e, 0x61, 0xed,
+ 0xe0, 0x61, 0x4c, 0x6d, 0xe1, 0xe0, 0x20, 0x12, 0xe8, 0xe0, 0x64, 0x22,
+ 0xf9, 0x02, 0x93, 0xef, 0x02, 0x84, 0xf4, 0xe0, 0x4e, 0x53, 0x73, 0x68,
+ 0x69, 0xae, 0x60, 0x5e, 0xd1, 0x40, 0xf9, 0x44, 0xd8, 0xab, 0xe1, 0x09,
+ 0x0d, 0x05, 0x07, 0x08, 0x11, 0xe0, 0x5e, 0x62, 0xfa, 0x03, 0xd0, 0x68,
+ 0x61, 0x6b, 0x69, 0xae, 0x60, 0x5b, 0xb1, 0xcc, 0xd4, 0x77, 0xe1, 0xe0,
+ 0x21, 0x1c, 0x73, 0x68, 0x69, 0xf2, 0xe0, 0x32, 0x37, 0x6d, 0x61, 0xae,
+ 0x60, 0x5e, 0x69, 0xc0, 0x6f, 0xeb, 0x02, 0xa3, 0xef, 0x02, 0x84, 0x6e,
+ 0xef, 0xd1, 0xa0, 0xae, 0x60, 0x32, 0x68, 0xe0, 0x2b, 0xf1, 0xe4, 0xe0,
+ 0x4e, 0x07, 0xf4, 0x06, 0x15, 0x0b, 0xe0, 0x6a, 0x2e, 0x73, 0xf5, 0x03,
+ 0x05, 0x84, 0x6b, 0xe5, 0xe0, 0x65, 0x75, 0xe5, 0xe0, 0x61, 0x57, 0x62,
+ 0x69, 0x73, 0xe8, 0xe0, 0x67, 0xd0, 0xef, 0x07, 0x60, 0x24, 0x67, 0xe0,
+ 0x3d, 0xa7, 0xf9, 0xc5, 0x46, 0xe1, 0x02, 0x84, 0xee, 0xe0, 0x2d, 0x64,
+ 0xeb, 0x52, 0x8f, 0xe0, 0x51, 0x05, 0xf3, 0x04, 0x04, 0x0a, 0x88, 0x75,
+ 0xe7, 0xd0, 0xbb, 0x68, 0x69, 0x6d, 0x61, 0xae, 0x60, 0x5f, 0x48, 0xc4,
+ 0xd9, 0x63, 0x6f, 0x6e, 0x66, 0x75, 0xf3, 0xda, 0xf8, 0xe1, 0x04, 0x05,
+ 0x12, 0x83, 0x77, 0xe1, 0xe0, 0x2d, 0x0f, 0x74, 0x6f, 0xae, 0x09, 0x60,
+ 0x30, 0xbf, 0x60, 0x2e, 0x12, 0xc4, 0x84, 0xf3, 0x60, 0x5f, 0x1d, 0xc4,
+ 0x97, 0xf3, 0xd2, 0xc0, 0x6b, 0x69, 0x2e, 0xef, 0x60, 0x63, 0x9e, 0xc4,
+ 0x1f, 0x72, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0xae, 0x60, 0x4a, 0xb3, 0x40,
+ 0x74, 0xda, 0xaf, 0xee, 0x07, 0x10, 0x16, 0x0f, 0x06, 0xc2, 0x1d, 0xf4,
+ 0x05, 0x04, 0xe0, 0x69, 0xbe, 0xf3, 0xe0, 0x2f, 0x22, 0x65, 0x72, 0xe5,
+ 0xe0, 0x51, 0xe4, 0xef, 0x08, 0x06, 0x04, 0x53, 0x62, 0xe0, 0x4c, 0xd9,
+ 0x6b, 0x61, 0xed, 0xe0, 0x2c, 0xf8, 0xe8, 0xe0, 0x67, 0x80, 0xe2, 0xce,
+ 0xec, 0xe9, 0x04, 0xe0, 0x69, 0x9d, 0xf3, 0x04, 0xe0, 0x46, 0x15, 0x69,
+ 0x74, 0xe5, 0xca, 0xe3, 0x63, 0x6f, 0xed, 0xe0, 0x39, 0xb9, 0xe1, 0x07,
+ 0x08, 0x40, 0x7d, 0xe0, 0x30, 0xc1, 0x74, 0x6f, 0xae, 0x60, 0x65, 0xe7,
+ 0xc1, 0x74, 0xed, 0x03, 0xc0, 0x74, 0xe9, 0x10, 0x0a, 0x07, 0x05, 0x0a,
+ 0x06, 0x0c, 0x07, 0x05, 0x06, 0x0f, 0x08, 0x4f, 0x86, 0xc4, 0x82, 0x79,
+ 0x61, 0x6d, 0x61, 0x73, 0x68, 0x69, 0xf2, 0xd6, 0x1c, 0x75, 0x6f, 0x6e,
+ 0x75, 0xed, 0xd8, 0xd1, 0x74, 0xe1, 0xe0, 0x62, 0x81, 0x73, 0x61, 0x6e,
+ 0x72, 0x69, 0x6b, 0xf5, 0xe0, 0x30, 0x19, 0x6f, 0x67, 0x75, 0xee, 0xd0,
+ 0x74, 0xed, 0x02, 0x85, 0x69, 0x6e, 0xef, 0xd2, 0xf9, 0xe1, 0xe0, 0x5f,
+ 0xaf, 0xe9, 0x03, 0xd1, 0x97, 0xf3, 0xde, 0xaf, 0x65, 0xe3, 0xe0, 0x3d,
+ 0x0d, 0x62, 0x6f, 0xf3, 0xe0, 0x66, 0xf5, 0xe1, 0x04, 0x04, 0xcf, 0xa3,
+ 0xf7, 0xe0, 0x5a, 0x91, 0x73, 0x68, 0x69, 0xe7, 0xd9, 0x8d, 0xae, 0x60,
+ 0x5a, 0x3d, 0x42, 0xd1, 0xc6, 0x0b, 0x2d, 0x61, 0x6c, 0x70, 0xf3, 0xe0,
+ 0x3f, 0x4e, 0x61, 0xf4, 0xe0, 0x61, 0x1e, 0x6b, 0x61, 0xed, 0xd9, 0x58,
+ 0xed, 0x02, 0x85, 0x6f, 0xfa, 0xe0, 0x58, 0x8c, 0xe1, 0x04, 0xe0, 0x62,
+ 0xf2, 0xf4, 0xe0, 0x21, 0x1f, 0xec, 0x05, 0x06, 0xe0, 0x68, 0xde, 0x61,
+ 0xee, 0x60, 0x66, 0x8b, 0x81, 0xae, 0x20, 0x06, 0x0a, 0x08, 0x06, 0x09,
+ 0x0a, 0x09, 0x09, 0x08, 0x08, 0x06, 0x09, 0x08, 0x60, 0x2b, 0xd1, 0x5a,
+ 0x76, 0x3f, 0x40, 0x47, 0x4e, 0xf0, 0x46, 0x5f, 0x49, 0x44, 0x40, 0x5f,
+ 0xc0, 0x47, 0xf6, 0x60, 0x5c, 0x54, 0xca, 0xaa, 0xf4, 0x60, 0x65, 0xf0,
+ 0x03, 0x1e, 0x12, 0x40, 0xbe, 0xb2, 0xf3, 0x60, 0x65, 0xc9, 0x40, 0x59,
+ 0xc0, 0x79, 0xf2, 0x60, 0x65, 0xe1, 0xc1, 0xdb, 0xf0, 0x60, 0x65, 0xbb,
+ 0x40, 0x41, 0x18, 0xc0, 0xcc, 0xee, 0x60, 0x65, 0xcf, 0x40, 0x5a, 0x40,
+ 0x97, 0xc1, 0xd4, 0xed, 0x60, 0x64, 0x5d, 0x41, 0x68, 0x3c, 0xc2, 0x89,
+ 0xeb, 0x60, 0x65, 0xbc, 0x21, 0x41, 0x02, 0xc1, 0xa2, 0xe9, 0x60, 0x46,
+ 0xff, 0x5e, 0xdb, 0xc1, 0x1b, 0xe7, 0x60, 0x65, 0x8e, 0x40, 0xd2, 0xc0,
+ 0x53, 0xe5, 0x60, 0x5c, 0x01, 0xcc, 0x67, 0xe3, 0x60, 0x65, 0xc1, 0x18,
+ 0x40, 0xb5, 0xc0, 0x51, 0xe2, 0x60, 0x65, 0xd0, 0x40, 0x90, 0x25, 0xb2,
+ 0xe1, 0x60, 0x5b, 0xea, 0x49, 0xa2, 0x24, 0x40, 0xe4, 0x9b, 0xeb, 0x04,
+ 0xe0, 0x62, 0xe2, 0xe1, 0x03, 0xc3, 0x7b, 0xf3, 0xe0, 0x66, 0x0a, 0xe8,
+ 0x04, 0xe0, 0x57, 0xb8, 0xe1, 0x02, 0x8c, 0xf2, 0x04, 0xe0, 0x62, 0x28,
+ 0x61, 0xae, 0x60, 0x5c, 0x61, 0xc5, 0x44, 0x6d, 0x61, 0xae, 0x60, 0x3c,
+ 0x0b, 0x60, 0x20, 0x83, 0x40, 0x78, 0x45, 0x4f, 0xc3, 0xa0, 0x67, 0x72,
+ 0x61, 0x74, 0x69, 0x6f, 0xee, 0xe0, 0x50, 0xc0, 0x66, 0x75, 0x6e, 0xe5,
+ 0xe0, 0x60, 0x27, 0xe5, 0x04, 0xe0, 0x66, 0x04, 0xec, 0x60, 0x2b, 0xb9,
+ 0xe0, 0x26, 0x5e, 0xe4, 0x05, 0x0a, 0xe0, 0x51, 0x08, 0x74, 0x72, 0x65,
+ 0x2d, 0x67, 0x61, 0xf5, 0xe0, 0x32, 0xab, 0x6f, 0x72, 0x69, 0xae, 0x60,
+ 0x5e, 0x8c, 0xc7, 0x2c, 0x63, 0x72, 0xef, 0x02, 0x86, 0x73, 0x6f, 0xe6,
+ 0xe0, 0x65, 0xca, 0x6c, 0x69, 0x67, 0xe8, 0xe0, 0x62, 0x44, 0x62, 0xf5,
+ 0xe0, 0x5b, 0xd2, 0xe1, 0x02, 0x89, 0xf3, 0x04, 0xe0, 0x4b, 0x73, 0xf4,
+ 0xe0, 0x58, 0x26, 0xed, 0xe0, 0x65, 0x53, 0xae, 0x60, 0x3c, 0x00, 0x60,
+ 0x26, 0x2f, 0xc3, 0x37, 0xe7, 0x60, 0x3f, 0xd4, 0xe0, 0x27, 0xde, 0xe5,
+ 0x15, 0x17, 0x18, 0x06, 0x1b, 0x2c, 0x27, 0x06, 0x40, 0x62, 0x60, 0x35,
+ 0x7e, 0x5d, 0x6f, 0x49, 0x35, 0x45, 0xd5, 0xc4, 0x94, 0x73, 0xf3, 0x03,
+ 0x07, 0x84, 0x77, 0x69, 0x74, 0xe8, 0xe0, 0x3d, 0x99, 0xe9, 0xe0, 0x5e,
+ 0xb1, 0x65, 0x72, 0x6c, 0xe9, 0xe0, 0x63, 0xde, 0xf2, 0x05, 0x05, 0x08,
+ 0xd4, 0xe2, 0x1f, 0x43, 0xe5, 0xd4, 0xed, 0x73, 0x65, 0x69, 0x6e, 0xe5,
+ 0xe0, 0x37, 0x7d, 0x63, 0x6b, 0xed, 0xdb, 0xeb, 0xee, 0x60, 0x66, 0x1c,
+ 0xc1, 0x4a, 0xed, 0x06, 0x05, 0x05, 0xe0, 0x65, 0x92, 0x73, 0xe5, 0xe0,
+ 0x5a, 0x80, 0x6f, 0xf2, 0xe0, 0x33, 0x86, 0x62, 0x65, 0x72, 0x73, 0x2e,
+ 0x6c, 0xe9, 0xe0, 0x36, 0x7b, 0xec, 0x0c, 0x05, 0x07, 0x60, 0x59, 0xed,
+ 0x41, 0x18, 0x42, 0xf4, 0xc1, 0x87, 0x68, 0xf5, 0xe0, 0x62, 0x5c, 0x62,
+ 0x6f, 0x75, 0xf2, 0xe0, 0x50, 0x6c, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64,
+ 0x6c, 0x65, 0x74, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0xe1, 0xe0, 0x66,
+ 0x35, 0xe9, 0x02, 0x88, 0x77, 0x61, 0xae, 0x60, 0x5b, 0x7d, 0xc2, 0x3b,
+ 0xee, 0x02, 0x87, 0x66, 0x6f, 0x72, 0xf5, 0xe0, 0x4d, 0x2f, 0xad, 0x02,
+ 0x87, 0x76, 0x69, 0x67, 0xef, 0xe0, 0x42, 0x63, 0x69, 0x73, 0x65, 0x72,
+ 0xf6, 0xe0, 0x42, 0x5c, 0x67, 0x75, 0xf2, 0xe0, 0x60, 0x64, 0xe4, 0x06,
+ 0x31, 0x0a, 0xe0, 0x66, 0xab, 0xe9, 0x03, 0x0e, 0x84, 0xef, 0x02, 0x81,
+ 0x2d, 0x63, 0x61, 0x6d, 0x70, 0x69, 0x64, 0xe1, 0xe0, 0x5a, 0xfc, 0x63,
+ 0xe9, 0xdb, 0xb9, 0xe1, 0x05, 0x0d, 0xe0, 0x66, 0xbd, 0x74, 0x65, 0x63,
+ 0x68, 0xae, 0x04, 0xe0, 0x65, 0xba, 0xe2, 0xe0, 0x52, 0x28, 0xae, 0x60,
+ 0x61, 0xaf, 0x41, 0xdc, 0xc1, 0xe6, 0x65, 0x63, 0x69, 0x6e, 0xae, 0x60,
+ 0x5a, 0x6e, 0xcb, 0x77, 0xae, 0x0c, 0x06, 0x07, 0x60, 0x5e, 0x8c, 0x40,
+ 0x7e, 0x43, 0xa3, 0xc2, 0x40, 0xf3, 0x60, 0x63, 0xfe, 0xc0, 0xa5, 0xf0,
+ 0x60, 0x64, 0x9d, 0x24, 0xc0, 0xea, 0xe5, 0x60, 0x5a, 0x28, 0xca, 0xaa,
+ 0xae, 0x0b, 0x05, 0x5f, 0x69, 0x60, 0x2e, 0x89, 0x45, 0x46, 0xcc, 0x5d,
+ 0xf5, 0x60, 0x63, 0xc2, 0x83, 0xf3, 0x60, 0x63, 0xbd, 0xc0, 0xe7, 0xe4,
+ 0x04, 0xe0, 0x66, 0x6f, 0xae, 0x60, 0x5a, 0x12, 0xc6, 0xd0, 0xe3, 0x08,
+ 0x08, 0x07, 0x60, 0x53, 0x72, 0xd2, 0xdf, 0xf0, 0x04, 0xe0, 0x40, 0xad,
+ 0xf2, 0xc1, 0x3f, 0x6b, 0x69, 0x6e, 0xf3, 0xe0, 0x59, 0x50, 0x64, 0x69,
+ 0x72, 0xae, 0x60, 0x4f, 0xa3, 0xd2, 0xa9, 0xe2, 0x04, 0xe0, 0x64, 0x49,
+ 0xae, 0x60, 0x63, 0xed, 0xc0, 0x5a, 0xe1, 0x16, 0x15, 0x0c, 0x40, 0x7a,
+ 0x2f, 0x40, 0x4a, 0x12, 0x04, 0x31, 0x0a, 0x24, 0x16, 0x2c, 0x1a, 0x07,
+ 0x05, 0x19, 0xe0, 0x64, 0x1c, 0xfa, 0x03, 0x05, 0x87, 0x75, 0xf2, 0xe0,
+ 0x53, 0x90, 0x6f, 0x77, 0x73, 0xfa, 0xe0, 0x28, 0xf4, 0x65, 0xf0, 0xe0,
+ 0x40, 0x31, 0x79, 0x66, 0x69, 0x72, 0x73, 0x74, 0xae, 0x60, 0x55, 0x29,
+ 0xcd, 0xbd, 0xf4, 0x08, 0x0f, 0x40, 0x58, 0x06, 0xe0, 0x63, 0xea, 0xf4,
+ 0x04, 0xe0, 0x60, 0x3d, 0x61, 0x2d, 0x76, 0x61, 0x72, 0x6a, 0xea, 0xe0,
+ 0x52, 0xc9, 0x73, 0xf5, 0x0a, 0x06, 0x04, 0x05, 0x12, 0x03, 0x10, 0x03,
+ 0x04, 0x86, 0x7a, 0x61, 0xeb, 0xe0, 0x5b, 0x11, 0x79, 0xe1, 0xd0, 0xc0,
+ 0x75, 0xf2, 0xe0, 0x49, 0x98, 0xf3, 0x02, 0x8b, 0x68, 0xe9, 0x04, 0xe0,
+ 0x21, 0xd0, 0x67, 0xe5, 0xe0, 0x5f, 0xcb, 0x61, 0xeb, 0xd0, 0xd4, 0xee,
+ 0xd4, 0xa6, 0xed, 0x02, 0x89, 0x6f, 0x74, 0x6f, 0xae, 0x60, 0x5e, 0xe5,
+ 0xc3, 0x69, 0xe1, 0xe0, 0x48, 0xfc, 0xeb, 0xcf, 0x68, 0xe5, 0xe0, 0x5f,
+ 0x6c, 0xe4, 0x60, 0x60, 0x59, 0xc3, 0x1a, 0xe2, 0x02, 0x84, 0x75, 0xf3,
+ 0xce, 0x7b, 0xe1, 0xe0, 0x2d, 0x7b, 0x72, 0x69, 0xf8, 0xe0, 0x65, 0x50,
+ 0xe5, 0xe0, 0x3e, 0xc4, 0xf3, 0x08, 0x04, 0x0d, 0x0a, 0x07, 0xe0, 0x59,
+ 0x38, 0xf5, 0xe0, 0x24, 0x24, 0x73, 0xe1, 0x02, 0x81, 0x2d, 0x63, 0x61,
+ 0x72, 0x72, 0xe1, 0xe0, 0x3e, 0xaa, 0x68, 0x69, 0xeb, 0x4c, 0x9e, 0x60,
+ 0x3c, 0x1c, 0xcb, 0x03, 0x66, 0x6a, 0x6f, 0xf2, 0xe0, 0x24, 0x26, 0x61,
+ 0xeb, 0xde, 0xee, 0xf2, 0x0a, 0x0f, 0x07, 0x05, 0x05, 0x0e, 0x0c, 0xe0,
+ 0x62, 0xc1, 0xf5, 0x02, 0x85, 0x6d, 0x6f, 0xf2, 0xd5, 0x83, 0x67, 0x61,
+ 0x6d, 0xe5, 0xe0, 0x56, 0x67, 0x73, 0x68, 0x61, 0xec, 0xe0, 0x51, 0x92,
+ 0x72, 0xe9, 0xe0, 0x63, 0x26, 0x6e, 0xe1, 0xe0, 0x35, 0x7a, 0x6b, 0xe5,
+ 0x04, 0xe0, 0x59, 0x0b, 0xf4, 0x60, 0x4f, 0x06, 0x53, 0x68, 0xc2, 0xbc,
+ 0x69, 0xee, 0x02, 0x84, 0xe7, 0xe0, 0x5b, 0x27, 0xe5, 0xe0, 0x51, 0xa9,
+ 0x63, 0xe8, 0xe0, 0x5d, 0x7c, 0xf0, 0x04, 0xe0, 0x65, 0x0d, 0x2e, 0x66,
+ 0x61, 0x73, 0x74, 0x6c, 0xf9, 0x60, 0x32, 0x67, 0xe0, 0x32, 0x3c, 0x6f,
+ 0xf2, 0xd3, 0xec, 0xee, 0x0b, 0x05, 0x05, 0x0d, 0x60, 0x5d, 0x2c, 0x41,
+ 0x63, 0xc6, 0x4a, 0x74, 0xef, 0xe0, 0x2a, 0x2d, 0x6e, 0xef, 0xe0, 0x56,
+ 0x0b, 0xe7, 0x04, 0xe0, 0x63, 0x0c, 0x79, 0x73, 0x68, 0x6c, 0xe1, 0xe0,
+ 0x5e, 0x18, 0xe1, 0x02, 0x84, 0xf5, 0xe0, 0x4b, 0xb9, 0x67, 0x65, 0x6d,
+ 0xe5, 0xe0, 0x3c, 0x5a, 0x6d, 0x75, 0x72, 0x6f, 0x67, 0x61, 0xf7, 0xe0,
+ 0x2b, 0xe0, 0xec, 0x07, 0x07, 0x08, 0x03, 0xe0, 0x2a, 0x87, 0x73, 0x65,
+ 0x6c, 0xf6, 0xe0, 0x62, 0xcd, 0x6f, 0x70, 0x6f, 0x6c, 0xf3, 0xe0, 0x3b,
+ 0xbe, 0xe2, 0xc4, 0x8b, 0x61, 0x74, 0x76, 0x75, 0x6f, 0x70, 0xed, 0xe0,
+ 0x5c, 0x76, 0xeb, 0x03, 0x07, 0x87, 0x75, 0x72, 0x61, 0x7a, 0xe1, 0xdf,
+ 0xce, 0x69, 0x6e, 0x6f, 0xe8, 0xe0, 0x23, 0x8f, 0xe5, 0xe0, 0x2a, 0xa6,
+ 0xe9, 0x0a, 0x05, 0x0b, 0x0c, 0x60, 0x34, 0x3e, 0xe0, 0x24, 0xc1, 0x7a,
+ 0x75, 0xf2, 0xca, 0x5a, 0xee, 0x04, 0xe0, 0x64, 0x30, 0x74, 0x65, 0xee,
+ 0xe0, 0x5f, 0x02, 0xec, 0x04, 0xe0, 0x5f, 0x24, 0x2d, 0x62, 0x6f, 0xf8,
+ 0xe0, 0x29, 0xc4, 0x62, 0x61, 0xf2, 0xc9, 0x8b, 0xe7, 0x03, 0x06, 0x8b,
+ 0x6e, 0x65, 0xf4, 0xe0, 0x43, 0x6d, 0x65, 0x6e, 0x74, 0x6f, 0x73, 0x69,
+ 0x74, 0xe5, 0xe0, 0x53, 0xbd, 0x61, 0xfa, 0xe0, 0x5e, 0x92, 0x65, 0x62,
+ 0x61, 0x73, 0xe8, 0xd4, 0x97, 0x64, 0xf2, 0xe0, 0x5b, 0x0d, 0xe3, 0x03,
+ 0x06, 0x8b, 0x68, 0x69, 0xe4, 0xe0, 0x5d, 0x9c, 0xe5, 0x02, 0x84, 0xf2,
+ 0xe0, 0x52, 0x8a, 0xe9, 0xe0, 0x57, 0x2d, 0xe1, 0xe0, 0x2f, 0x5d, 0xae,
+ 0x60, 0x5d, 0x30, 0x03, 0xc1, 0x5c, 0xec, 0x20, 0x17, 0x12, 0x0d, 0x40,
+ 0x5e, 0x35, 0x15, 0x41, 0x2e, 0x04, 0x06, 0x09, 0x41, 0x1c, 0x0d, 0x40,
+ 0xb1, 0x1c, 0x41, 0x42, 0x60, 0x32, 0xf9, 0x51, 0xfb, 0x4e, 0xe6, 0x48,
+ 0x07, 0xc1, 0x19, 0x1f, 0xc3, 0x03, 0x0b, 0x84, 0xf8, 0x05, 0x41, 0x07,
+ 0xdc, 0x24, 0x64, 0xe9, 0xe0, 0x53, 0xb0, 0xe6, 0xe0, 0x34, 0x29, 0xe1,
+ 0xc4, 0xc2, 0xf9, 0x04, 0xe0, 0x63, 0xd8, 0xee, 0x02, 0x84, 0xf8, 0xe0,
+ 0x4a, 0x49, 0xe7, 0x60, 0x53, 0x9b, 0xc8, 0x88, 0xf6, 0x06, 0x60, 0x47,
+ 0xcc, 0xdb, 0xf8, 0xae, 0x60, 0x47, 0xd9, 0xd5, 0x05, 0xf5, 0x12, 0x09,
+ 0x11, 0x04, 0x02, 0x0f, 0x0b, 0x50, 0x62, 0x60, 0x29, 0x83, 0x56, 0xad,
+ 0x44, 0x71, 0xce, 0x6e, 0xf8, 0x04, 0xe0, 0x61, 0xe8, 0xf5, 0xe0, 0x40,
+ 0x5f, 0xee, 0x02, 0x84, 0xee, 0xe0, 0x57, 0x7d, 0xe4, 0x04, 0xe0, 0x61,
+ 0xae, 0x62, 0xe5, 0xe0, 0x35, 0x2a, 0xeb, 0xe0, 0x56, 0x5b, 0xe8, 0x8b,
+ 0xe7, 0x05, 0x04, 0xe0, 0x5e, 0xe7, 0xf3, 0xe0, 0x5e, 0xea, 0x61, 0xee,
+ 0xe0, 0x3a, 0x86, 0xe3, 0x02, 0x84, 0xe3, 0xe0, 0x5c, 0x62, 0xe1, 0xe0,
+ 0x4a, 0x73, 0xe2, 0x05, 0x06, 0xe0, 0x51, 0x38, 0x6c, 0x69, 0xee, 0xe0,
+ 0x51, 0x36, 0x61, 0x72, 0xf4, 0xc7, 0x25, 0xf4, 0x05, 0x27, 0xe0, 0x63,
+ 0x33, 0xe4, 0x06, 0x60, 0x61, 0x59, 0xc1, 0xfa, 0xae, 0x0a, 0x06, 0x04,
+ 0x58, 0x7f, 0x60, 0x36, 0x13, 0xc8, 0x55, 0xf5, 0x60, 0x60, 0x8e, 0xc0,
+ 0xdf, 0xe7, 0xe0, 0x60, 0xd5, 0xe3, 0x04, 0xe0, 0x60, 0xaf, 0x6f, 0x2e,
+ 0xe9, 0xe0, 0x60, 0x91, 0xae, 0x60, 0x47, 0x48, 0x55, 0x05, 0xc4, 0x90,
+ 0xf0, 0x06, 0x43, 0x22, 0xe0, 0x55, 0x7f, 0xec, 0x04, 0xe0, 0x63, 0x1f,
+ 0x66, 0x69, 0x6e, 0x61, 0x6e, 0xe3, 0xe0, 0x2f, 0x4c, 0xef, 0x12, 0x05,
+ 0x0d, 0x0a, 0x05, 0x07, 0x05, 0x2e, 0x17, 0x1c, 0x07, 0x07, 0x3b, 0x07,
+ 0x33, 0xe0, 0x5f, 0x9c, 0x77, 0xe9, 0xe0, 0x4b, 0x33, 0x76, 0xe5, 0x06,
+ 0x60, 0x49, 0xb0, 0xd9, 0x46, 0x73, 0xe9, 0xe0, 0x3a, 0xd8, 0xf4, 0x04,
+ 0xe0, 0x52, 0xb7, 0xf4, 0x60, 0x61, 0x16, 0x97, 0x73, 0xe5, 0xe0, 0x3a,
+ 0x24, 0x72, 0x65, 0x6e, 0xf3, 0xe0, 0x34, 0xda, 0x70, 0xf0, 0xe0, 0x5c,
+ 0x2a, 0xee, 0x05, 0x04, 0x1b, 0xd0, 0xa1, 0xe7, 0xe0, 0x53, 0x11, 0xe4,
+ 0x02, 0x86, 0x72, 0x69, 0xee, 0xe0, 0x58, 0xcf, 0x6f, 0xee, 0x04, 0xe0,
+ 0x62, 0xbd, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x61, 0x70, 0xf0, 0xe0,
+ 0x43, 0xf1, 0xad, 0x04, 0xe0, 0x2c, 0xa6, 0xb2, 0xe0, 0x2c, 0xa6, 0xed,
+ 0x07, 0x09, 0x60, 0x49, 0x20, 0xc6, 0x84, 0x62, 0x61, 0x72, 0xe4, 0x60,
+ 0x59, 0x00, 0xc2, 0x85, 0xae, 0x60, 0x60, 0x41, 0xc0, 0x6e, 0xec, 0x04,
+ 0xe0, 0x62, 0x8c, 0xe9, 0x02, 0x88, 0x74, 0x61, 0x70, 0x75, 0xee, 0xe0,
+ 0x52, 0xd8, 0x70, 0x6f, 0xf0, 0x04, 0xe0, 0x61, 0x28, 0x6d, 0xe3, 0xe0,
+ 0x62, 0x36, 0x69, 0x73, 0x69, 0xf2, 0xe0, 0x57, 0x79, 0x68, 0x6d, 0x75,
+ 0xf3, 0xe0, 0x4b, 0xbf, 0xe7, 0x05, 0x09, 0xe0, 0x60, 0xb3, 0x6f, 0x69,
+ 0x70, 0xae, 0x60, 0x61, 0x85, 0xc0, 0xa2, 0xe9, 0x02, 0x87, 0x73, 0x74,
+ 0x69, 0xe3, 0xe0, 0x5d, 0x65, 0xee, 0x02, 0x85, 0x74, 0xef, 0xe0, 0x4b,
+ 0x9e, 0x6c, 0x69, 0x6e, 0x65, 0xae, 0x08, 0x60, 0x5e, 0x96, 0x42, 0x52,
+ 0xc0, 0x4a, 0xf3, 0x04, 0xe0, 0x51, 0x05, 0x65, 0x72, 0x76, 0x69, 0xe3,
+ 0xe0, 0x61, 0x7d, 0x64, 0xe9, 0x60, 0x51, 0xf3, 0xcd, 0xe1, 0xe3, 0x05,
+ 0x04, 0xe0, 0x5c, 0x8f, 0xeb, 0xe0, 0x4d, 0xd7, 0x61, 0xec, 0x04, 0x07,
+ 0x09, 0x86, 0x7a, 0x6f, 0x6e, 0xe5, 0xe0, 0x3e, 0x7e, 0x70, 0x6c, 0x61,
+ 0x79, 0x65, 0xf2, 0xe0, 0x57, 0x1d, 0x68, 0x6f, 0x73, 0xf4, 0x02, 0x86,
+ 0x63, 0x65, 0xf2, 0xe0, 0x55, 0x24, 0x2e, 0x64, 0x61, 0xf0, 0xe0, 0x3c,
+ 0x45, 0xe1, 0x04, 0xe0, 0x3e, 0x9d, 0xe2, 0x60, 0x4e, 0xc3, 0x82, 0xee,
+ 0xe0, 0x4d, 0xe0, 0xec, 0x60, 0x55, 0x7b, 0xca, 0x78, 0xeb, 0x04, 0xe0,
+ 0x61, 0xd9, 0xb3, 0xe0, 0x4e, 0x67, 0xe9, 0x11, 0x11, 0x0a, 0x05, 0x3c,
+ 0x2b, 0x13, 0x14, 0x0f, 0x17, 0x07, 0x04, 0x60, 0x5e, 0x8e, 0xc2, 0x56,
+ 0xf6, 0x05, 0x05, 0xe0, 0x4b, 0x94, 0x6f, 0xf2, 0xe0, 0x55, 0xe0, 0xe5,
+ 0x49, 0x8a, 0xe0, 0x58, 0x2d, 0x74, 0x74, 0x6c, 0x65, 0x73, 0x74, 0xe1,
+ 0xe0, 0x4e, 0x1d, 0x70, 0xf3, 0xe0, 0x5f, 0x1c, 0xee, 0x04, 0x0c, 0x16,
+ 0x91, 0x6f, 0x64, 0x65, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0xf4, 0xe0, 0x5d,
+ 0x2e, 0xeb, 0x04, 0xe0, 0x61, 0x8d, 0x79, 0x61, 0x72, 0xe4, 0x04, 0xe0,
+ 0x48, 0xf6, 0x2d, 0x63, 0x6c, 0x6f, 0x75, 0xe4, 0xe0, 0x5a, 0x2c, 0xe4,
+ 0x03, 0x05, 0x84, 0x1f, 0xc3, 0xe0, 0x5c, 0x9a, 0xe5, 0xe0, 0x2b, 0x97,
+ 0xe1, 0xe0, 0x5c, 0x93, 0x63, 0xef, 0xc6, 0xb6, 0xed, 0x05, 0x05, 0xe0,
+ 0x5f, 0x87, 0x69, 0xf4, 0xe0, 0x41, 0xf7, 0xe1, 0x03, 0x05, 0x84, 0x6e,
+ 0xef, 0xe0, 0x4e, 0x44, 0xae, 0xe0, 0x42, 0xac, 0x2d, 0x63, 0x69, 0x74,
+ 0x79, 0xae, 0x06, 0x60, 0x60, 0x5e, 0x0d, 0x82, 0x72, 0x6f, 0x63, 0xeb,
+ 0xe0, 0x60, 0x8e, 0x6c, 0xec, 0x04, 0xe0, 0x5e, 0xac, 0xe5, 0x02, 0x84,
+ 0xf3, 0xe0, 0x53, 0xf2, 0x68, 0x61, 0xed, 0xe0, 0x20, 0x82, 0x6b, 0xe5,
+ 0x04, 0xe0, 0x61, 0x23, 0xf3, 0x02, 0x87, 0x63, 0x61, 0x6e, 0xe4, 0xe0,
+ 0x42, 0x8f, 0x2d, 0xf0, 0xd2, 0xc7, 0xe7, 0x05, 0x04, 0xe0, 0x5e, 0xb5,
+ 0xf5, 0xe0, 0x59, 0xf6, 0x68, 0xf4, 0xe0, 0x4a, 0xe5, 0x66, 0xe5, 0x05,
+ 0x06, 0xe0, 0x60, 0xf9, 0x73, 0x74, 0xf9, 0xe0, 0x5e, 0xb6, 0x69, 0x6e,
+ 0x73, 0x75, 0x72, 0x61, 0xee, 0xe0, 0x5b, 0x5b, 0x65, 0xf2, 0x60, 0x49,
+ 0xd5, 0xd5, 0x30, 0xe4, 0xe0, 0x5e, 0x45, 0x62, 0xae, 0x18, 0x0b, 0x4c,
+ 0xaf, 0x13, 0x60, 0x39, 0x2d, 0x0b, 0x07, 0x04, 0x03, 0x04, 0x1c, 0x0a,
+ 0x02, 0x06, 0x0b, 0x03, 0x06, 0x0b, 0x0d, 0xd4, 0xf3, 0xee, 0x60, 0x46,
+ 0x26, 0x03, 0x03, 0x03, 0x12, 0x0b, 0x11, 0x83, 0xe4, 0x41, 0x75, 0xe0,
+ 0x44, 0xe0, 0xe7, 0x02, 0x84, 0xe2, 0xe0, 0x5e, 0xa4, 0xae, 0x60, 0x44,
+ 0xc7, 0xd9, 0xec, 0xe5, 0x13, 0x07, 0x04, 0x04, 0x04, 0x0a, 0x09, 0x09,
+ 0x17, 0x0f, 0x06, 0x15, 0x15, 0x60, 0x30, 0x59, 0xe0, 0x2d, 0x64, 0x7a,
+ 0x61, 0x6a, 0xf3, 0xe0, 0x4d, 0x9a, 0xf8, 0xe0, 0x5b, 0x04, 0xf6, 0xe0,
+ 0x49, 0xd3, 0xf3, 0xe0, 0x50, 0x8e, 0xee, 0x04, 0xe0, 0x26, 0x60, 0x75,
+ 0xe7, 0xe0, 0x5e, 0x41, 0xec, 0x04, 0xe0, 0x5e, 0xd1, 0xf5, 0xe0, 0x3d,
+ 0xa4, 0xeb, 0x04, 0xe0, 0x59, 0xbe, 0xf3, 0xe0, 0x26, 0x4c, 0xe9, 0x03,
+ 0x08, 0x87, 0x74, 0x75, 0x6e, 0x67, 0xf3, 0xe0, 0x20, 0x03, 0xf2, 0x60,
+ 0x26, 0x3c, 0xe0, 0x29, 0xc1, 0xeb, 0xe0, 0x49, 0x9c, 0xe7, 0x08, 0x60,
+ 0x39, 0x22, 0x60, 0x25, 0x52, 0xb0, 0x6e, 0x69, 0xe3, 0xe0, 0x50, 0xa9,
+ 0x66, 0x72, 0xe1, 0xe0, 0x5d, 0x87, 0xe3, 0x03, 0x05, 0x86, 0x7a, 0xee,
+ 0xe0, 0x25, 0xb8, 0x6c, 0x65, 0xf2, 0xe0, 0x53, 0xc9, 0xe3, 0x60, 0x58,
+ 0x94, 0xc5, 0x42, 0xe2, 0x03, 0x06, 0x85, 0x74, 0x69, 0xed, 0xe0, 0x28,
+ 0x1b, 0x6f, 0xf2, 0xe0, 0x4d, 0x22, 0x65, 0x73, 0xe2, 0xe0, 0x57, 0x27,
+ 0xe1, 0x05, 0x06, 0x03, 0xdf, 0xaf, 0xf3, 0x60, 0x4f, 0xcf, 0xce, 0x7f,
+ 0xee, 0xdf, 0xb4, 0x64, 0x70, 0x61, 0x67, 0x65, 0xf3, 0xe0, 0x46, 0x37,
+ 0xe3, 0x07, 0x07, 0x60, 0x5d, 0x96, 0xc2, 0x56, 0x75, 0x62, 0x65, 0xad,
+ 0xe0, 0x35, 0x37, 0xec, 0x04, 0xe0, 0x25, 0xa4, 0x73, 0x74, 0x61, 0x67,
+ 0xe5, 0xe0, 0x25, 0x9f, 0xe1, 0x19, 0x06, 0x10, 0x0b, 0x12, 0x08, 0x07,
+ 0x05, 0x04, 0x05, 0x39, 0x13, 0x06, 0x06, 0x06, 0x06, 0x07, 0x40, 0x5b,
+ 0x0b, 0x60, 0x58, 0x78, 0xc6, 0x2c, 0xfa, 0x60, 0x46, 0xbd, 0xd6, 0xb1,
+ 0xf7, 0x05, 0x04, 0xe0, 0x5f, 0xb5, 0xf9, 0xe0, 0x4b, 0x71, 0xae, 0x60,
+ 0x5a, 0xba, 0xc3, 0x23, 0x76, 0xe1, 0x04, 0xe0, 0x4f, 0x72, 0x67, 0xe9,
+ 0xe0, 0x5a, 0xcc, 0xf4, 0x05, 0x05, 0xe0, 0x5f, 0x99, 0x72, 0xef, 0xe0,
+ 0x5d, 0x15, 0x69, 0xee, 0x60, 0x58, 0x81, 0xc5, 0x41, 0xf3, 0x03, 0xc0,
+ 0xec, 0xe1, 0xe0, 0x54, 0xe4, 0xf2, 0x60, 0x25, 0x69, 0xe0, 0x32, 0x73,
+ 0x71, 0xf5, 0xe0, 0x54, 0xd1, 0xf0, 0xe0, 0x4c, 0xed, 0x6f, 0xe3, 0xe0,
+ 0x35, 0xe6, 0xee, 0x05, 0x04, 0x0a, 0x1c, 0x85, 0xf8, 0xe0, 0x57, 0x70,
+ 0xe7, 0x04, 0xe0, 0x4c, 0xe0, 0x73, 0xef, 0xe0, 0x4f, 0xa7, 0xe4, 0x06,
+ 0x05, 0x06, 0xe0, 0x5f, 0x4f, 0x72, 0xef, 0xe0, 0x36, 0xcb, 0x69, 0x6e,
+ 0x67, 0xae, 0xd8, 0x66, 0x2d, 0x34, 0x2d, 0x73, 0x61, 0x6c, 0xe5, 0xe0,
+ 0x24, 0x3d, 0x63, 0xe1, 0xe0, 0x4a, 0xfa, 0x62, 0xe9, 0xc4, 0x33, 0xed,
+ 0x05, 0x04, 0xe0, 0x4a, 0xeb, 0xe4, 0xe0, 0x4b, 0xeb, 0x62, 0x6f, 0x72,
+ 0x67, 0x68, 0xe9, 0xe0, 0x41, 0xd2, 0x6b, 0x61, 0xf3, 0xe0, 0x5d, 0xda,
+ 0x69, 0x63, 0xe8, 0xe0, 0x4e, 0x66, 0x68, 0x70, 0xf0, 0xe0, 0x56, 0xf0,
+ 0x64, 0x65, 0xf3, 0xe0, 0x5a, 0x9a, 0x63, 0x61, 0x69, 0xf8, 0xe0, 0x5d,
+ 0x13, 0xe2, 0x03, 0xc0, 0x54, 0x65, 0x6c, 0x69, 0x6e, 0x67, 0xae, 0x04,
+ 0x0b, 0x08, 0x8b, 0x75, 0x73, 0xad, 0x02, 0xac, 0x77, 0x65, 0x73, 0x74,
+ 0xad, 0xae, 0x65, 0x75, 0xad, 0x02, 0x86, 0x77, 0xe5, 0xa1, 0x63, 0x61,
+ 0x2d, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0xec, 0x8d, 0x61, 0x70, 0xad,
+ 0x02, 0x89, 0x73, 0x6f, 0x75, 0x74, 0xe8, 0x02, 0x87, 0xad, 0x8f, 0x6e,
+ 0x6f, 0x72, 0x74, 0x68, 0x65, 0x61, 0x73, 0x74, 0xad, 0x02, 0x82, 0xb2,
+ 0x82, 0x31, 0x2e, 0x73, 0x61, 0x67, 0x65, 0x6d, 0x61, 0x6b, 0x65, 0x72,
+ 0x2e, 0xe1, 0xe0, 0x40, 0x13, 0xae, 0xc4, 0x4f, 0x61, 0x6b, 0x65, 0x73,
+ 0x76, 0x75, 0x65, 0xed, 0xe0, 0x5a, 0x8c, 0x2d, 0x73, 0x70, 0xe5, 0xe0,
+ 0x21, 0x80, 0x2d, 0x6f, 0x2d, 0x67, 0x2d, 0x69, 0xad, 0xe0, 0x34, 0x0b,
+ 0xeb, 0x23, 0x12, 0x3a, 0x0a, 0x36, 0x41, 0x36, 0x09, 0x04, 0x40, 0x81,
+ 0x0d, 0x41, 0x86, 0x2e, 0x0c, 0x1b, 0x41, 0xa4, 0x40, 0x48, 0x06, 0x04,
+ 0x40, 0x5b, 0x05, 0x43, 0xb0, 0x09, 0x60, 0x28, 0x84, 0xe0, 0x28, 0xde,
+ 0x1f, 0xc3, 0x04, 0xe0, 0x29, 0xd5, 0x61, 0x72, 0x1f, 0x43, 0x61, 0x1f,
+ 0x45, 0x61, 0x6a, 0xef, 0xc8, 0x5b, 0xf9, 0x09, 0x07, 0x60, 0x42, 0x54,
+ 0x55, 0xcc, 0xc6, 0x2c, 0x75, 0x72, 0x61, 0xe7, 0xe0, 0x25, 0xb0, 0xef,
+ 0x05, 0x08, 0xe0, 0x41, 0x59, 0x77, 0x61, 0xae, 0x60, 0x57, 0xa8, 0xc4,
+ 0x94, 0xf4, 0x02, 0x86, 0xef, 0x60, 0x5c, 0x3b, 0xc1, 0xff, 0xe1, 0x02,
+ 0x8a, 0xee, 0x02, 0x83, 0xe7, 0xca, 0xea, 0xe1, 0xe0, 0x4f, 0x51, 0x6d,
+ 0xe2, 0xe0, 0x25, 0x95, 0xf7, 0x04, 0xe0, 0x5e, 0x1e, 0xf0, 0x43, 0xc7,
+ 0xdb, 0x62, 0xf6, 0x06, 0x07, 0x18, 0xe0, 0x42, 0x08, 0x1f, 0x43, 0xe6,
+ 0x24, 0xe0, 0x4d, 0x8c, 0xe9, 0x02, 0x8d, 0xf4, 0x02, 0x86, 0xf3, 0x60,
+ 0x51, 0xdc, 0xc2, 0xf4, 0x65, 0xf3, 0xdb, 0xfb, 0xee, 0x04, 0xe0, 0x24,
+ 0x5d, 0xee, 0xc1, 0x87, 0xe1, 0x07, 0x04, 0x60, 0x4d, 0x88, 0xc4, 0x3b,
+ 0xee, 0xe0, 0x4d, 0xb2, 0xec, 0xe0, 0x47, 0x02, 0xf5, 0x12, 0x05, 0x05,
+ 0x0b, 0x24, 0x40, 0x4a, 0x08, 0x31, 0x3a, 0x09, 0x0e, 0x0d, 0x4b, 0xb7,
+ 0xe0, 0x45, 0x31, 0x7a, 0x75, 0xed, 0xdc, 0x28, 0x77, 0x61, 0xee, 0xc8,
+ 0xda, 0xf4, 0x04, 0xe0, 0x21, 0x78, 0x63, 0x68, 0xe1, 0xe0, 0x2d, 0x58,
+ 0xf3, 0x06, 0x08, 0x0b, 0xe0, 0x4b, 0x33, 0x74, 0x61, 0x6e, 0x61, 0xe9,
+ 0xe0, 0x59, 0xaa, 0x68, 0xe9, 0x04, 0xe0, 0x51, 0x91, 0xed, 0x55, 0xd7,
+ 0xc5, 0xa5, 0x61, 0x74, 0x73, 0x75, 0xae, 0x60, 0x54, 0x40, 0xc3, 0x83,
+ 0xf2, 0x06, 0x03, 0x23, 0x06, 0x04, 0x84, 0x75, 0xed, 0xb6, 0xef, 0x07,
+ 0x03, 0x07, 0x09, 0x03, 0xdc, 0x2e, 0xf4, 0xc7, 0xbf, 0x6d, 0x61, 0x74,
+ 0x73, 0xf5, 0xd6, 0xce, 0x69, 0xf3, 0x04, 0xe0, 0x4b, 0xc4, 0xe8, 0xdb,
+ 0x52, 0xe7, 0xd2, 0xd2, 0x62, 0xe5, 0xe0, 0x24, 0xc0, 0x69, 0x79, 0xe1,
+ 0xe0, 0x50, 0x6a, 0xe7, 0xe0, 0x4e, 0x73, 0xe5, 0xe0, 0x51, 0x92, 0xe1,
+ 0x02, 0x85, 0x74, 0xe5, 0xe0, 0x45, 0x9f, 0x73, 0x68, 0x69, 0xeb, 0xe0,
+ 0x51, 0x8f, 0x6f, 0x6b, 0x67, 0x72, 0xef, 0xe0, 0x23, 0x64, 0xee, 0x04,
+ 0x03, 0x07, 0x9b, 0xef, 0xd4, 0xa9, 0x6e, 0x65, 0x70, 0xf0, 0xe0, 0x57,
+ 0xfc, 0xe9, 0x04, 0x0a, 0x05, 0x84, 0xf4, 0x02, 0x83, 0xef, 0xc5, 0xd2,
+ 0xe1, 0xe0, 0x59, 0x8b, 0x73, 0x61, 0xeb, 0xd8, 0xa1, 0xed, 0xe0, 0x4c,
+ 0xa6, 0xe7, 0xdd, 0x25, 0x64, 0x65, 0x6e, 0xae, 0xe0, 0x2b, 0x83, 0xed,
+ 0x03, 0x04, 0x8e, 0xe9, 0xe0, 0x24, 0x7b, 0xe5, 0x02, 0x85, 0x6e, 0xe1,
+ 0xe0, 0x49, 0x1d, 0x6a, 0x69, 0xed, 0xe0, 0x21, 0xaf, 0xe1, 0x06, 0x05,
+ 0x07, 0x0a, 0xda, 0x94, 0x74, 0x6f, 0xf2, 0xd8, 0xc3, 0x6e, 0x6f, 0xae,
+ 0x60, 0x51, 0x23, 0xb5, 0x6d, 0x6f, 0x74, 0x6f, 0xae, 0x60, 0x55, 0x03,
+ 0xc5, 0xe5, 0x6b, 0x6f, 0x67, 0xe5, 0xe0, 0x57, 0x85, 0x6c, 0x65, 0x75,
+ 0x76, 0x65, 0xee, 0xe0, 0x44, 0x45, 0xea, 0x04, 0xe0, 0x24, 0xd3, 0xf5,
+ 0x04, 0xe0, 0x4a, 0x5a, 0x6b, 0xf5, 0xc5, 0xf6, 0xe4, 0x02, 0x83, 0xef,
+ 0xc2, 0xd6, 0x61, 0x6d, 0x61, 0x74, 0xf3, 0xd6, 0xee, 0x63, 0x68, 0x69,
+ 0x6e, 0x6f, 0xf4, 0xe0, 0x23, 0x57, 0x74, 0x69, 0x73, 0x74, 0x6f, 0xf2,
+ 0xe0, 0x3e, 0x1a, 0x73, 0xae, 0xd2, 0x38, 0xf2, 0x0c, 0x09, 0x05, 0x1d,
+ 0x0c, 0x0a, 0x29, 0x60, 0x59, 0x8a, 0xc2, 0x9f, 0x1f, 0xc3, 0x02, 0x82,
+ 0xf8, 0x9e, 0xe5, 0xc0, 0x5c, 0x79, 0xed, 0xe0, 0x40, 0x9d, 0xef, 0x03,
+ 0x06, 0x8b, 0x70, 0x79, 0x76, 0xee, 0xc4, 0x01, 0x6b, 0x73, 0x74, 0x61,
+ 0x64, 0x65, 0x6c, 0xf6, 0xe0, 0x55, 0xc4, 0x64, 0x73, 0x68, 0x65, 0xf2,
+ 0xe0, 0x27, 0xf4, 0x69, 0x73, 0x74, 0x69, 0x61, 0x6e, 0xf3, 0x60, 0x4f,
+ 0x21, 0xc6, 0x20, 0xe5, 0x04, 0xe0, 0x59, 0xb8, 0x6c, 0xec, 0xe0, 0x35,
+ 0xc5, 0xe1, 0x04, 0x0f, 0x06, 0x88, 0x73, 0xee, 0x02, 0x87, 0x6f, 0x64,
+ 0x61, 0xf2, 0xe0, 0x5a, 0x08, 0xe9, 0xe0, 0x21, 0xcd, 0x6b, 0x6f, 0xf7,
+ 0xe0, 0x4a, 0x09, 0x67, 0x65, 0xf2, 0x60, 0x46, 0x71, 0xcc, 0xe7, 0x61,
+ 0x6e, 0x67, 0xe8, 0xe0, 0x29, 0x66, 0xae, 0x60, 0x40, 0x3e, 0x55, 0x05,
+ 0x44, 0x90, 0xc2, 0x1f, 0xf0, 0x08, 0x41, 0xbf, 0x60, 0x58, 0xd3, 0xc1,
+ 0x84, 0xed, 0xe0, 0x5c, 0x14, 0xef, 0x13, 0x11, 0x04, 0x1a, 0x18, 0x25,
+ 0x0d, 0x06, 0x0f, 0x3a, 0x40, 0x4c, 0x09, 0x13, 0x15, 0x05, 0x05, 0x05,
+ 0x89, 0xfa, 0x02, 0x84, 0xef, 0xe0, 0x5b, 0xc2, 0xe1, 0x05, 0x60, 0x50,
+ 0xcd, 0x84, 0xeb, 0xe0, 0x3f, 0x08, 0xf9, 0xe0, 0x50, 0xcb, 0xf5, 0x04,
+ 0x05, 0x05, 0x86, 0x7a, 0xf5, 0xe0, 0x55, 0x4c, 0x79, 0x61, 0xed, 0xc6,
+ 0x05, 0x6e, 0x6f, 0xf3, 0xe0, 0x3f, 0xc0, 0x68, 0x6f, 0xeb, 0xc5, 0xbc,
+ 0xf4, 0x04, 0xe0, 0x3f, 0x19, 0xef, 0x03, 0x03, 0x86, 0xf5, 0xc4, 0x9b,
+ 0x68, 0x69, 0xf2, 0xe0, 0x4c, 0xe1, 0xae, 0x60, 0x55, 0xe3, 0xc2, 0x3e,
+ 0xf3, 0x04, 0x06, 0x11, 0x83, 0x75, 0x67, 0xe5, 0xe0, 0x31, 0xf5, 0xe8,
+ 0x06, 0x40, 0xed, 0xe0, 0x46, 0x71, 0xe9, 0x03, 0xd9, 0x54, 0x6d, 0x69,
+ 0xfa, 0xe0, 0x56, 0x61, 0xe5, 0xd7, 0x7c, 0xe1, 0x46, 0x44, 0xe0, 0x4a,
+ 0x86, 0xf2, 0x02, 0x83, 0xf9, 0xd7, 0x2f, 0x69, 0x79, 0x61, 0xed, 0xe0,
+ 0x4f, 0xce, 0x70, 0x65, 0xf2, 0xe0, 0x21, 0x62, 0xef, 0x02, 0x84, 0xf2,
+ 0xe0, 0x4b, 0x00, 0x62, 0x69, 0x6e, 0x2e, 0xe5, 0xe0, 0x3b, 0x58, 0xee,
+ 0x08, 0x08, 0x06, 0x11, 0x0b, 0xe0, 0x49, 0x10, 0x79, 0x76, 0x65, 0x6c,
+ 0xef, 0xe0, 0x5a, 0x16, 0x74, 0x75, 0xed, 0xe0, 0x52, 0x1f, 0xf3, 0x02,
+ 0x86, 0x75, 0x6c, 0x61, 0xf4, 0xdc, 0x5e, 0x6b, 0x6f, 0x77, 0x6f, 0xec,
+ 0xe0, 0x4b, 0xae, 0x67, 0xf3, 0x04, 0xe0, 0x2d, 0x43, 0x76, 0xe9, 0xe0,
+ 0x44, 0x88, 0x61, 0x6e, 0xae, 0x60, 0x55, 0x61, 0x89, 0xed, 0x05, 0x06,
+ 0x0b, 0x11, 0x87, 0x76, 0x75, 0xf8, 0xe0, 0x49, 0x2d, 0xef, 0x02, 0x84,
+ 0xf2, 0xe0, 0x4c, 0x26, 0x6e, 0xef, 0xd0, 0xa0, 0x6d, 0x75, 0xee, 0x04,
+ 0xe0, 0x59, 0x2f, 0x61, 0x6c, 0x66, 0x6f, 0x72, 0x62, 0xf5, 0xe0, 0x44,
+ 0x6a, 0x66, 0x6f, 0x72, 0xe2, 0xe0, 0x49, 0x0a, 0xe1, 0x06, 0x0f, 0x4b,
+ 0x10, 0xcb, 0xf2, 0x74, 0x73, 0xf5, 0x06, 0x60, 0x52, 0x35, 0xc8, 0xc2,
+ 0x73, 0x68, 0x69, 0xed, 0xd2, 0x80, 0x67, 0x61, 0x6e, 0xe5, 0xe0, 0x57,
+ 0x84, 0x6c, 0x6f, 0x62, 0x72, 0x7a, 0xe5, 0xe0, 0x2c, 0xb6, 0xeb, 0x03,
+ 0x06, 0x85, 0x75, 0x62, 0x75, 0xee, 0xda, 0x1a, 0x6f, 0x6e, 0xef, 0xc5,
+ 0x5f, 0xe1, 0xe0, 0x54, 0xf7, 0xe7, 0x02, 0x84, 0xe5, 0xe0, 0x3e, 0x01,
+ 0xe1, 0x02, 0x85, 0x6e, 0xe5, 0xe0, 0x57, 0x25, 0xae, 0x60, 0x4e, 0xb8,
+ 0xc3, 0xe4, 0x66, 0xf5, 0xe0, 0x30, 0xfd, 0x65, 0xec, 0xe0, 0x59, 0x2e,
+ 0x64, 0x61, 0xe9, 0xd9, 0x12, 0x63, 0x68, 0x69, 0xae, 0x60, 0x54, 0x1e,
+ 0xc4, 0x8a, 0xe2, 0x03, 0x07, 0x83, 0x69, 0x65, 0x72, 0x7a, 0xf9, 0xdd,
+ 0x72, 0xe5, 0xc0, 0xdb, 0x61, 0x79, 0x61, 0x73, 0xe8, 0xc3, 0x34, 0xee,
+ 0x06, 0x09, 0x0b, 0xe0, 0x5a, 0x71, 0x78, 0x2d, 0x73, 0x65, 0x72, 0xf6,
+ 0xe0, 0x3b, 0x3b, 0x6f, 0x77, 0x73, 0x69, 0x74, 0x61, 0x6c, 0xec, 0xe0,
+ 0x49, 0x92, 0x69, 0x67, 0x68, 0x74, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x2e,
+ 0x73, 0x79, 0x73, 0x74, 0x65, 0xed, 0xe0, 0x59, 0xb0, 0xed, 0x06, 0x60,
+ 0x3e, 0x6c, 0xdb, 0xeb, 0x70, 0x73, 0xf0, 0xdb, 0x60, 0xec, 0x04, 0x06,
+ 0x06, 0x86, 0x1f, 0x43, 0xe6, 0xe0, 0x51, 0x65, 0x6f, 0x64, 0x7a, 0xeb,
+ 0xdd, 0xfb, 0x65, 0x70, 0xf0, 0xe0, 0x58, 0x56, 0xe1, 0xe0, 0x51, 0x55,
+ 0xe9, 0x16, 0x05, 0x15, 0x0a, 0x40, 0x90, 0x26, 0x27, 0x25, 0x13, 0x0d,
+ 0x18, 0x04, 0x0a, 0x09, 0x07, 0x0a, 0x60, 0x56, 0xa0, 0xc1, 0xfa, 0x7a,
+ 0xf5, 0xe0, 0x4b, 0x46, 0xf9, 0x03, 0xd8, 0xa7, 0xef, 0x04, 0xe0, 0x54,
+ 0xc3, 0xf3, 0x06, 0x56, 0x1c, 0xe0, 0x27, 0x45, 0x61, 0xf4, 0xe0, 0x4d,
+ 0xf5, 0xf7, 0x03, 0xc5, 0x14, 0xe9, 0x5f, 0x71, 0xe0, 0x3a, 0x90, 0xf4,
+ 0x02, 0x84, 0x63, 0xe8, 0xdf, 0xbd, 0xe1, 0x0b, 0x06, 0x04, 0x0a, 0x0b,
+ 0x08, 0x17, 0x10, 0x14, 0x08, 0x8b, 0x79, 0x61, 0xed, 0xe0, 0x4e, 0xc5,
+ 0x75, 0xf2, 0xd2, 0x13, 0x73, 0x68, 0x69, 0x6f, 0x62, 0x61, 0xf2, 0xe0,
+ 0x4e, 0x1e, 0x6e, 0x61, 0x6b, 0x61, 0x67, 0x75, 0x73, 0x75, 0xeb, 0xd8,
+ 0xe6, 0xed, 0x04, 0xe0, 0x57, 0xbc, 0xef, 0xc4, 0x6d, 0xeb, 0x02, 0x88,
+ 0x79, 0x75, 0x73, 0x68, 0x75, 0xae, 0xc2, 0x34, 0xe1, 0x03, 0xd4, 0xdf,
+ 0x74, 0x61, 0xae, 0x60, 0x4a, 0xde, 0xc8, 0xe0, 0xe8, 0x02, 0x89, 0x69,
+ 0x72, 0x6f, 0x73, 0x68, 0xe9, 0xe0, 0x4c, 0xa5, 0xe1, 0xe0, 0x4e, 0x73,
+ 0x67, 0xe1, 0x02, 0x88, 0x77, 0x61, 0xae, 0x60, 0x4a, 0xc2, 0xc8, 0x4a,
+ 0x74, 0x61, 0xae, 0x60, 0x4e, 0x75, 0xc1, 0xae, 0x64, 0x61, 0x69, 0x74,
+ 0xef, 0xe0, 0x54, 0x62, 0xe1, 0x02, 0x84, 0x6b, 0xe9, 0xd8, 0xb6, 0xe9,
+ 0xe0, 0x4f, 0xed, 0xae, 0x60, 0x4a, 0x9c, 0x4b, 0x3c, 0xc1, 0x74, 0xf3,
+ 0x03, 0x14, 0x88, 0xef, 0x05, 0x06, 0xe0, 0x55, 0xf3, 0x73, 0x61, 0x6b,
+ 0xe9, 0xce, 0xdd, 0x66, 0x75, 0x6b, 0x75, 0x73, 0xe8, 0xd0, 0x05, 0x68,
+ 0x69, 0x77, 0x61, 0xe4, 0xe0, 0x3d, 0x25, 0x61, 0x72, 0x61, 0xfa, 0xdf,
+ 0xeb, 0xf2, 0x04, 0x05, 0x0a, 0x86, 0x79, 0xf5, 0xe0, 0x4f, 0xe2, 0x6f,
+ 0x76, 0x6f, 0x67, 0x72, 0x61, 0xe4, 0xe0, 0x3d, 0x4a, 0xeb, 0x60, 0x4e,
+ 0x3f, 0xc6, 0x14, 0xe1, 0x02, 0x84, 0x72, 0xe1, 0xd6, 0x2a, 0xae, 0x60,
+ 0x4e, 0x33, 0xc5, 0x21, 0xee, 0x05, 0x05, 0x05, 0x04, 0x84, 0x6f, 0xeb,
+ 0xe0, 0x4d, 0xf4, 0x6b, 0xef, 0xe0, 0x52, 0x40, 0xe7, 0xe0, 0x4c, 0x33,
+ 0xe4, 0xe0, 0x56, 0xc4, 0xae, 0x03, 0xd0, 0x1a, 0xef, 0x04, 0xe0, 0x53,
+ 0xe0, 0xee, 0xe0, 0x3a, 0x22, 0xed, 0x07, 0x04, 0x60, 0x4d, 0xfc, 0xca,
+ 0xf2, 0xef, 0xe0, 0x53, 0xb0, 0xe9, 0x03, 0xdf, 0x8b, 0xee, 0xdc, 0x42,
+ 0xec, 0x06, 0x60, 0x34, 0x26, 0xcb, 0x43, 0x61, 0x74, 0xe9, 0xe0, 0x28,
+ 0x5b, 0xeb, 0x03, 0x0a, 0x83, 0xf5, 0x03, 0xc4, 0x27, 0x63, 0x68, 0xe9,
+ 0xe0, 0x50, 0xeb, 0xef, 0xd2, 0x1c, 0x69, 0x72, 0x61, 0xf2, 0xe0, 0x48,
+ 0x5b, 0xea, 0xe0, 0x2c, 0xbf, 0x68, 0xef, 0x03, 0xce, 0x38, 0x6b, 0xf5,
+ 0xe0, 0x53, 0x60, 0xe5, 0x04, 0xe0, 0x3c, 0xbb, 0xee, 0xe0, 0x48, 0xf4,
+ 0x64, 0xf3, 0x60, 0x52, 0x7d, 0xc6, 0x2c, 0x63, 0x6b, 0x73, 0x2d, 0x61,
+ 0x73, 0xf3, 0xe0, 0x29, 0x18, 0x62, 0x69, 0x63, 0x68, 0xf5, 0xc4, 0x45,
+ 0xe8, 0x09, 0x07, 0x16, 0x08, 0x60, 0x3c, 0x79, 0xc9, 0xef, 0x70, 0x6c,
+ 0x61, 0xf9, 0xe0, 0x3b, 0x15, 0x6d, 0x65, 0x6c, 0xee, 0x02, 0x88, 0x79,
+ 0x74, 0x73, 0x6b, 0xf9, 0xe0, 0x3c, 0x7c, 0x69, 0x74, 0x73, 0x6b, 0xe9,
+ 0xe0, 0x3c, 0x83, 0x65, 0x72, 0x73, 0x6f, 0xee, 0xe0, 0x3c, 0x7c, 0xe1,
+ 0x03, 0x06, 0x88, 0x72, 0xeb, 0x60, 0x3c, 0x66, 0x83, 0x6e, 0x68, 0x68,
+ 0x6f, 0xe1, 0xe0, 0x4f, 0x18, 0x6b, 0x61, 0x73, 0xf3, 0xe0, 0x56, 0x0f,
+ 0xe7, 0x60, 0x40, 0xb4, 0xd7, 0x96, 0xe6, 0xe0, 0x55, 0x61, 0xe5, 0x0c,
+ 0x15, 0x05, 0x22, 0x06, 0x07, 0x60, 0x33, 0xef, 0xe0, 0x23, 0xfc, 0xf9,
+ 0x02, 0x89, 0x77, 0x6f, 0x72, 0x64, 0x2d, 0xef, 0xe0, 0x44, 0x09, 0x6d,
+ 0x61, 0x63, 0x68, 0x69, 0xee, 0xe0, 0x2e, 0xef, 0x74, 0xf2, 0xe0, 0x3a,
+ 0xca, 0x72, 0x72, 0xf9, 0x03, 0x0b, 0x8b, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0xe9, 0xe0, 0x4b, 0x90, 0x6c, 0x6f, 0x67, 0x69, 0x73, 0x74,
+ 0x69, 0xe3, 0xe0, 0x55, 0x45, 0x68, 0x6f, 0xf4, 0xe0, 0x40, 0xee, 0xf0,
+ 0x5b, 0xae, 0xe0, 0x2a, 0x70, 0x6d, 0x62, 0x75, 0xe3, 0xe0, 0x51, 0x45,
+ 0x69, 0xf3, 0xe0, 0x40, 0x2f, 0x64, 0xe4, 0xe0, 0x55, 0x78, 0xe1, 0x1a,
+ 0x17, 0x04, 0x40, 0xa2, 0x0f, 0x40, 0x41, 0x40, 0x64, 0x40, 0x5f, 0x06,
+ 0x40, 0x55, 0x40, 0xc6, 0x14, 0x26, 0x1f, 0x0e, 0x28, 0x10, 0xe0, 0x43,
+ 0xd7, 0xfa, 0x04, 0x04, 0xdf, 0x7f, 0x75, 0xee, 0xdf, 0x6f, 0x69, 0x6d,
+ 0x69, 0x65, 0x72, 0x7a, 0x2d, 0x64, 0x6f, 0x6c, 0xee, 0xe0, 0x45, 0x22,
+ 0x79, 0xe1, 0xd0, 0xf8, 0x77, 0xe1, 0x0e, 0x03, 0x05, 0x06, 0x0d, 0x03,
+ 0x1c, 0x10, 0x12, 0x04, 0x0f, 0x07, 0x10, 0x88, 0xfa, 0xd6, 0x39, 0x75,
+ 0xe5, 0xe0, 0x4e, 0x2c, 0x74, 0x61, 0xee, 0xe0, 0x3b, 0x53, 0x73, 0x61,
+ 0x6b, 0x69, 0xae, 0x03, 0xde, 0x54, 0x6a, 0xf0, 0xe0, 0x45, 0x87, 0xf2,
+ 0xd6, 0x6b, 0xee, 0x03, 0x0c, 0x87, 0x69, 0x73, 0x68, 0x69, 0xae, 0x60,
+ 0x4b, 0xd3, 0x42, 0xb6, 0xc3, 0x8b, 0x65, 0x68, 0x6f, 0xee, 0xe0, 0x4c,
+ 0x9d, 0x61, 0xe2, 0xe0, 0x50, 0x91, 0xed, 0x02, 0x88, 0x69, 0x6e, 0x61,
+ 0x6d, 0xe9, 0xe0, 0x48, 0x86, 0x61, 0xf4, 0xe0, 0x4b, 0x9a, 0xeb, 0x02,
+ 0x84, 0x69, 0xf4, 0xc1, 0xad, 0x61, 0x6d, 0x69, 0x2e, 0x6e, 0xe1, 0x60,
+ 0x4e, 0x5b, 0xc5, 0x83, 0x6a, 0xe9, 0xd4, 0xed, 0xe9, 0x02, 0x86, 0x69,
+ 0x73, 0xe8, 0xe0, 0x47, 0x73, 0xae, 0x5f, 0x3a, 0xe0, 0x2f, 0x0c, 0x68,
+ 0x61, 0x72, 0xe1, 0xe0, 0x3a, 0x5f, 0xe7, 0x02, 0x85, 0x75, 0x63, 0xe8,
+ 0xc6, 0x21, 0x6f, 0x65, 0xae, 0x60, 0x4b, 0x83, 0xc0, 0xc4, 0x63, 0x68,
+ 0x69, 0x6e, 0x61, 0xe7, 0xc5, 0xdd, 0xe2, 0xe0, 0x4d, 0xae, 0xf5, 0x02,
+ 0x89, 0x74, 0x6f, 0x6b, 0x65, 0x69, 0xee, 0xe0, 0x4e, 0x23, 0xe6, 0xdc,
+ 0xc2, 0xf4, 0x03, 0x21, 0x8a, 0x73, 0xf5, 0x04, 0x07, 0x03, 0x87, 0x79,
+ 0x61, 0x6d, 0xe1, 0xe0, 0x2a, 0xd1, 0xf5, 0xce, 0x71, 0x73, 0x68, 0x69,
+ 0xeb, 0xe0, 0x50, 0x50, 0x72, 0x61, 0x67, 0x69, 0xae, 0x60, 0x4b, 0xbb,
+ 0xc2, 0x34, 0xef, 0x02, 0x83, 0xf7, 0xd9, 0xaa, 0xf2, 0xe0, 0x39, 0xe6,
+ 0xe1, 0x05, 0x07, 0xe0, 0x54, 0x94, 0x73, 0x68, 0x69, 0xee, 0xe0, 0x4d,
+ 0x63, 0x67, 0x61, 0xed, 0xc1, 0x87, 0xf3, 0x07, 0x06, 0x1e, 0x1f, 0xe0,
+ 0x32, 0xea, 0x7a, 0x75, 0xe2, 0xe0, 0x44, 0x1e, 0xf5, 0x04, 0x03, 0x08,
+ 0x87, 0xf9, 0xd5, 0x91, 0x6d, 0x69, 0x67, 0x61, 0x75, 0xf2, 0xd1, 0x6f,
+ 0x6b, 0x61, 0x62, 0xe5, 0xe0, 0x4a, 0xe0, 0x67, 0xe1, 0x60, 0x4a, 0x88,
+ 0xc6, 0x38, 0x68, 0xe9, 0x04, 0x09, 0x08, 0x85, 0x77, 0xe1, 0x45, 0x40,
+ 0x59, 0x28, 0xe0, 0x35, 0xec, 0x6d, 0x61, 0xae, 0x60, 0x4b, 0x64, 0xc2,
+ 0xf5, 0x68, 0x61, 0xf2, 0xcd, 0x01, 0xe2, 0xcc, 0xfe, 0xe1, 0x07, 0x05,
+ 0x41, 0xc0, 0xe0, 0x4f, 0x3f, 0x6f, 0xeb, 0xe0, 0x50, 0x1c, 0x6d, 0xe1,
+ 0x04, 0xe0, 0x4e, 0x38, 0x74, 0x73, 0xf5, 0xe0, 0x4c, 0xee, 0xf2, 0x08,
+ 0x0d, 0x06, 0x05, 0x06, 0x05, 0x08, 0x85, 0xf5, 0x02, 0x83, 0xed, 0xde,
+ 0x4e, 0x69, 0x7a, 0x61, 0xf7, 0xe0, 0x39, 0xf1, 0x74, 0x75, 0xfa, 0xe0,
+ 0x43, 0xac, 0x70, 0xe1, 0xe0, 0x3e, 0x69, 0xed, 0x60, 0x4a, 0x0b, 0xc2,
+ 0xf4, 0x6c, 0xf3, 0xe0, 0x4a, 0x04, 0xe9, 0x03, 0xc5, 0x9c, 0xf9, 0xe0,
+ 0x39, 0x73, 0x65, 0xec, 0xe0, 0x53, 0xe0, 0xe1, 0x04, 0x06, 0x10, 0x87,
+ 0x74, 0x73, 0xf5, 0xe0, 0x4a, 0xfc, 0xf3, 0x02, 0x84, 0x75, 0x79, 0xe1,
+ 0xac, 0x6a, 0xef, 0x04, 0xe0, 0x4a, 0xfc, 0xe8, 0xdb, 0xd8, 0x67, 0x61,
+ 0x6e, 0xe4, 0xe0, 0x53, 0xbf, 0x63, 0xef, 0xc4, 0x42, 0x70, 0x73, 0xe9,
+ 0xe0, 0x55, 0x57, 0xee, 0x0a, 0x05, 0x05, 0x0e, 0x07, 0x05, 0x06, 0x12,
+ 0xc5, 0x56, 0x7a, 0x61, 0xeb, 0xdd, 0x43, 0x75, 0xed, 0xe0, 0x49, 0xe0,
+ 0xef, 0x02, 0x85, 0x79, 0xe1, 0xe0, 0x4f, 0x04, 0x6e, 0x6a, 0xe9, 0xe0,
+ 0x46, 0xf2, 0x6e, 0xe1, 0x60, 0x49, 0x00, 0xc3, 0x6e, 0x6d, 0x61, 0xeb,
+ 0xd2, 0xd5, 0xe9, 0x60, 0x49, 0x29, 0xc3, 0x2d, 0xe5, 0x02, 0x8a, 0x79,
+ 0x61, 0x6d, 0x61, 0xae, 0x60, 0x4a, 0x12, 0xc5, 0xaf, 0x67, 0x61, 0xf3,
+ 0xd4, 0x06, 0xe1, 0x06, 0x53, 0xcb, 0xe0, 0x3c, 0x91, 0x7a, 0x61, 0x77,
+ 0xe1, 0xe0, 0x4c, 0xdc, 0xed, 0x05, 0x0e, 0x40, 0x93, 0x8d, 0xef, 0x04,
+ 0x03, 0xd3, 0xe1, 0xe5, 0xce, 0xe0, 0xae, 0x60, 0x46, 0xb5, 0xca, 0x06,
+ 0xe9, 0x0c, 0x0f, 0x17, 0x04, 0x0f, 0x06, 0x20, 0x05, 0x0b, 0x06, 0x05,
+ 0x86, 0xf4, 0x02, 0x86, 0x73, 0x75, 0xe5, 0xe0, 0x43, 0x07, 0x6f, 0x6e,
+ 0xe4, 0xe0, 0x4a, 0x4d, 0xf3, 0x03, 0x09, 0x86, 0xf5, 0x04, 0xe0, 0x4d,
+ 0x3f, 0x6e, 0xe1, 0xdc, 0xdb, 0x68, 0x69, 0xe8, 0xe0, 0x49, 0x45, 0x61,
+ 0xf4, 0xdd, 0x18, 0x6f, 0xeb, 0xd4, 0x8f, 0x6e, 0xef, 0x02, 0x85, 0x79,
+ 0x61, 0xed, 0xdc, 0x65, 0x6b, 0x61, 0xf7, 0xe0, 0x49, 0x46, 0x6d, 0x69,
+ 0xee, 0xe0, 0x4a, 0x25, 0xeb, 0x03, 0x07, 0x87, 0x6f, 0x61, 0x6e, 0xe9,
+ 0xe0, 0x2f, 0xac, 0x69, 0x74, 0x61, 0x79, 0xe1, 0xcb, 0x90, 0x61, 0x77,
+ 0x61, 0xae, 0x04, 0xe0, 0x4a, 0x4e, 0xe8, 0x60, 0x4f, 0xc1, 0xc3, 0x59,
+ 0x6a, 0x69, 0xed, 0xcb, 0x9f, 0xe9, 0x02, 0x85, 0x7a, 0x75, 0xed, 0xc4,
+ 0x12, 0xe3, 0xdc, 0x23, 0x67, 0x6f, 0xf2, 0xe0, 0x4f, 0xa6, 0x66, 0x75,
+ 0xf2, 0xdb, 0xe3, 0x61, 0x6d, 0xe1, 0xe0, 0x4d, 0x15, 0xae, 0x5b, 0xc8,
+ 0xe0, 0x32, 0xa9, 0xe5, 0x02, 0x86, 0x79, 0x61, 0x6d, 0xe1, 0xca, 0x6c,
+ 0x6f, 0xeb, 0xdc, 0x58, 0xe1, 0x03, 0x04, 0x85, 0x6b, 0xf5, 0xc5, 0x58,
+ 0x69, 0x73, 0xe8, 0xdc, 0xe3, 0x67, 0x61, 0xf9, 0xd3, 0x2e, 0xec, 0x03,
+ 0x05, 0x86, 0x75, 0xe7, 0xe0, 0x52, 0x91, 0x6d, 0x79, 0xeb, 0xe0, 0x43,
+ 0x3b, 0x69, 0xf3, 0xe0, 0x3c, 0xf7, 0xeb, 0x05, 0x04, 0x04, 0x07, 0x86,
+ 0x75, 0xe4, 0xdb, 0x86, 0x6f, 0xe7, 0xca, 0x2e, 0x69, 0x6e, 0x6f, 0xeb,
+ 0xe0, 0x4e, 0x71, 0x65, 0x67, 0x61, 0xf7, 0xdc, 0x90, 0x61, 0x6d, 0x69,
+ 0x67, 0x61, 0x68, 0x61, 0xf2, 0xe0, 0x25, 0x2e, 0xe9, 0x07, 0x05, 0x04,
+ 0x05, 0xe0, 0x2a, 0xcb, 0x7a, 0xf5, 0xe0, 0x38, 0x66, 0xf4, 0xe0, 0x2e,
+ 0xfc, 0x73, 0xe5, 0xe0, 0x47, 0x8f, 0x6e, 0x61, 0x6e, 0xae, 0x60, 0x49,
+ 0x62, 0xc5, 0x24, 0x68, 0xef, 0x04, 0xe0, 0x3c, 0xbe, 0x6b, 0x75, 0xae,
+ 0x60, 0x48, 0xd2, 0xc2, 0xe0, 0xe7, 0x02, 0x8c, 0x6f, 0x73, 0x68, 0x69,
+ 0x6d, 0x61, 0xae, 0x60, 0x4d, 0x93, 0xc4, 0xd3, 0xe1, 0x06, 0x60, 0x4b,
+ 0x96, 0xc3, 0xa8, 0x6d, 0xe9, 0x05, 0x05, 0xe0, 0x4d, 0xc3, 0x6e, 0xef,
+ 0xe0, 0x4e, 0x08, 0x69, 0x73, 0xe8, 0xe0, 0x43, 0xce, 0xe4, 0x03, 0xc3,
+ 0x21, 0xef, 0x02, 0x84, 0xed, 0xe0, 0x38, 0x14, 0x67, 0x61, 0xf7, 0xcc,
+ 0x6a, 0x61, 0xf3, 0xe0, 0x2f, 0x58, 0x38, 0x73, 0xae, 0x60, 0x33, 0x5a,
+ 0x07, 0x07, 0x87, 0x31, 0x32, 0xae, 0x15, 0x07, 0x0c, 0x04, 0x08, 0x04,
+ 0x0a, 0x0d, 0x60, 0x31, 0x5a, 0x47, 0xc5, 0x04, 0x1c, 0x0a, 0x02, 0x14,
+ 0x06, 0x0b, 0x8d, 0xf7, 0x60, 0x39, 0x87, 0x2c, 0xd1, 0x0d, 0xf6, 0x05,
+ 0x60, 0x39, 0xa1, 0x86, 0xe9, 0x60, 0x4d, 0xd6, 0xc6, 0x2c, 0xf5, 0xe0,
+ 0x39, 0x9a, 0xf4, 0x60, 0x39, 0x37, 0x40, 0x41, 0xd8, 0xdd, 0xf3, 0xe0,
+ 0x39, 0x87, 0xee, 0x60, 0x39, 0x49, 0x03, 0x03, 0x03, 0x12, 0x1c, 0x83,
+ 0xe9, 0x06, 0x60, 0x39, 0x5c, 0x03, 0xa1, 0xec, 0x60, 0x4d, 0xaf, 0xc6,
+ 0x2c, 0xe4, 0xe0, 0x39, 0x6c, 0xea, 0x15, 0x09, 0x1b, 0x18, 0x20, 0x40,
+ 0x85, 0x04, 0x06, 0x1e, 0x12, 0x40, 0x9a, 0x0a, 0x28, 0x28, 0x51, 0x84,
+ 0xe0, 0x30, 0x89, 0x1f, 0x43, 0xf8, 0x03, 0xc0, 0xa6, 0xf2, 0xc0, 0xa2,
+ 0xf5, 0x07, 0x04, 0x06, 0x05, 0xe0, 0x3a, 0x80, 0xf2, 0xe0, 0x50, 0xa0,
+ 0x6e, 0x69, 0xf0, 0xe0, 0x3f, 0x5d, 0x65, 0xe7, 0xe0, 0x31, 0x16, 0xae,
+ 0xe0, 0x46, 0xe0, 0x73, 0xae, 0x06, 0x60, 0x4e, 0x60, 0xc2, 0x0c, 0x77,
+ 0x70, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x70, 0x6f, 0x77, 0x65, 0xf2,
+ 0xe0, 0x51, 0xb6, 0xf0, 0x09, 0x04, 0x07, 0x60, 0x30, 0xa8, 0xe0, 0x22,
+ 0xc3, 0xee, 0xe0, 0x2a, 0x01, 0x6d, 0x6f, 0x72, 0xe7, 0xe0, 0x4e, 0xa7,
+ 0xae, 0x04, 0xe0, 0x4c, 0x81, 0xee, 0x60, 0x49, 0x79, 0xc9, 0x8b, 0xef,
+ 0x11, 0x05, 0x09, 0x17, 0x0d, 0x04, 0x08, 0x06, 0x09, 0x06, 0x07, 0x07,
+ 0x60, 0x47, 0xdf, 0xcb, 0x0e, 0x7a, 0xe9, 0xe0, 0x4f, 0xd1, 0xf9, 0x04,
+ 0xe0, 0x53, 0x44, 0xef, 0xe0, 0x44, 0x6b, 0xf5, 0x02, 0x87, 0x77, 0x77,
+ 0x65, 0xe2, 0xe0, 0x3b, 0x62, 0x72, 0x6e, 0x61, 0xec, 0x04, 0xe0, 0x4f,
+ 0xfc, 0x69, 0xf3, 0xe0, 0x4d, 0x9c, 0xf4, 0x04, 0xe0, 0x53, 0x24, 0x65,
+ 0x6c, 0x75, 0x6c, 0xf5, 0xe0, 0x3a, 0x90, 0xf3, 0xe0, 0x42, 0x9c, 0xf2,
+ 0x04, 0xe0, 0x51, 0x6e, 0xf0, 0xcd, 0x9f, 0x6c, 0x73, 0xf4, 0xe0, 0x46,
+ 0xec, 0x69, 0x6e, 0x76, 0x69, 0x6c, 0xec, 0xe0, 0x39, 0xf0, 0x68, 0x61,
+ 0x6e, 0xe1, 0xda, 0x50, 0x67, 0x61, 0x73, 0xfa, 0xe0, 0x51, 0xab, 0x65,
+ 0x74, 0x73, 0xf5, 0xe0, 0x4e, 0x1e, 0xe2, 0x04, 0x09, 0xd1, 0x5e, 0xf3,
+ 0x04, 0xe0, 0x52, 0xe3, 0xae, 0xe0, 0x50, 0xd0, 0x6f, 0xea, 0xda, 0xe4,
+ 0xee, 0xe0, 0x50, 0x47, 0xed, 0x60, 0x40, 0xda, 0xd0, 0x0c, 0xec, 0x06,
+ 0x60, 0x3e, 0xc3, 0xd1, 0x65, 0x73, 0x2d, 0x73, 0x74, 0xef, 0x03, 0x02,
+ 0x82, 0xb3, 0x84, 0xb2, 0x82, 0x31, 0x2e, 0x65, 0x6c, 0x61, 0x73, 0x74,
+ 0xf8, 0xe0, 0x52, 0x53, 0xe9, 0x04, 0xe0, 0x50, 0xd9, 0x6e, 0x73, 0x65,
+ 0x6b, 0x69, 0x6b, 0x6f, 0x67, 0x65, 0xee, 0xe0, 0x46, 0xd7, 0xe5, 0x0e,
+ 0x06, 0x07, 0x05, 0x05, 0x06, 0x40, 0x5b, 0x09, 0x51, 0xf4, 0xe0, 0x40,
+ 0x1d, 0x77, 0x65, 0xec, 0xe0, 0x2f, 0x49, 0x76, 0x6e, 0x61, 0xeb, 0xe0,
+ 0x46, 0x67, 0x74, 0xfa, 0xe0, 0x50, 0x72, 0x73, 0xf3, 0xe0, 0x45, 0x13,
+ 0x6f, 0xee, 0x60, 0x35, 0x5d, 0x85, 0xec, 0x03, 0x07, 0x97, 0x6c, 0x79,
+ 0x62, 0x65, 0xe1, 0xd1, 0x2b, 0xe5, 0x02, 0x84, 0xee, 0xe0, 0x42, 0xc3,
+ 0xae, 0x08, 0x60, 0x33, 0xaa, 0x46, 0xda, 0xd6, 0x85, 0x63, 0xec, 0x60,
+ 0x39, 0xcc, 0xc7, 0x90, 0x61, 0x73, 0x74, 0x69, 0x63, 0xae, 0x04, 0x0e,
+ 0x09, 0x8e, 0xf4, 0x04, 0xe0, 0x29, 0xc4, 0x73, 0x75, 0x6b, 0x61, 0x65,
+ 0xf2, 0xe0, 0x26, 0xe3, 0x73, 0x61, 0x76, 0x65, 0x69, 0xee, 0xe0, 0x29,
+ 0x27, 0x72, 0x65, 0x67, 0x72, 0x75, 0x68, 0x6f, 0x73, 0x74, 0x69, 0xee,
+ 0xe0, 0x37, 0xed, 0x64, 0x6f, 0x67, 0x61, 0x64, 0x6f, 0xae, 0xe0, 0x4c,
+ 0x7c, 0xe5, 0x04, 0xe0, 0x50, 0x25, 0xfa, 0xe0, 0x51, 0xd2, 0x64, 0x2e,
+ 0x77, 0x61, 0x66, 0x61, 0xe9, 0xe0, 0x4c, 0x25, 0xe4, 0x04, 0xe0, 0x22,
+ 0x51, 0x65, 0xf6, 0xe0, 0x4c, 0x1b, 0xe3, 0x05, 0x1a, 0xe0, 0x47, 0x1a,
+ 0x6c, 0x6f, 0x75, 0xe4, 0x02, 0x87, 0xae, 0x02, 0x8d, 0xeb, 0xe0, 0x4e,
+ 0x75, 0x2d, 0x76, 0x65, 0x72, 0x2d, 0x6a, 0x70, 0x63, 0x2e, 0x69, 0xeb,
+ 0xdf, 0x31, 0x2e, 0x6e, 0x65, 0x65, 0xee, 0xe0, 0x51, 0x4b, 0xe1, 0x09,
+ 0x05, 0x0a, 0x0a, 0x60, 0x3a, 0x80, 0xc5, 0x55, 0x77, 0x6f, 0xf2, 0xd5,
+ 0x7e, 0xee, 0x03, 0xd2, 0x59, 0x65, 0x77, 0xe1, 0xe0, 0x38, 0x7e, 0xed,
+ 0x03, 0xdc, 0xf6, 0x62, 0x79, 0xec, 0xe0, 0x4f, 0x78, 0x67, 0xf5, 0xe0,
+ 0x3f, 0x0f, 0xae, 0x05, 0x17, 0xe0, 0x51, 0x8e, 0x73, 0x63, 0x61, 0x6c,
+ 0x65, 0x66, 0x6f, 0x72, 0x63, 0x65, 0xae, 0x04, 0xe0, 0x51, 0x36, 0x63,
+ 0x6f, 0x6d, 0x2e, 0xe3, 0xe0, 0x3c, 0xfb, 0x6c, 0x61, 0x79, 0x65, 0x72,
+ 0x73, 0x68, 0x69, 0x66, 0xf4, 0xe0, 0x4d, 0xd2, 0xe9, 0x23, 0x40, 0x45,
+ 0x05, 0x40, 0x4b, 0x23, 0x40, 0x82, 0x43, 0x47, 0x17, 0x34, 0x12, 0x42,
+ 0x5c, 0x40, 0x4d, 0x2f, 0x3b, 0x27, 0x05, 0x12, 0x06, 0x0d, 0x40, 0x5a,
+ 0x40, 0x54, 0x23, 0x0e, 0x06, 0xe0, 0x26, 0xbe, 0xfa, 0x03, 0x3a, 0x84,
+ 0xf5, 0x05, 0x08, 0xe0, 0x46, 0x81, 0x6e, 0x6f, 0x6b, 0x75, 0xee, 0xe0,
+ 0x46, 0x83, 0xed, 0x02, 0x8c, 0xef, 0x04, 0xe0, 0x4b, 0x08, 0x7a, 0x61,
+ 0x6b, 0xe9, 0xe0, 0x4c, 0x6f, 0xe9, 0x04, 0x06, 0x05, 0x87, 0x7a, 0x61,
+ 0xeb, 0xe0, 0x40, 0xbb, 0x73, 0xe1, 0xe0, 0x4f, 0x07, 0x6f, 0x74, 0x73,
+ 0xf5, 0xe0, 0x4f, 0x02, 0xae, 0x60, 0x4a, 0x55, 0xc4, 0xaa, 0x65, 0xee,
+ 0xd5, 0xcd, 0xae, 0xd9, 0x95, 0x79, 0xef, 0xe0, 0x4b, 0xc1, 0xf7, 0x02,
+ 0x83, 0xe9, 0xd6, 0x81, 0xe1, 0x08, 0x13, 0x08, 0x09, 0x0c, 0x07, 0xcb,
+ 0xf8, 0xf4, 0x04, 0x07, 0xd8, 0xe2, 0x73, 0x75, 0x6b, 0xe9, 0xe0, 0x45,
+ 0x46, 0x65, 0xae, 0x59, 0x01, 0xe0, 0x35, 0xf9, 0xee, 0x04, 0xe0, 0x3d,
+ 0xe4, 0xf5, 0xcc, 0xf4, 0xed, 0x03, 0xcb, 0xb9, 0x69, 0xfa, 0xe0, 0x45,
+ 0x36, 0xeb, 0x04, 0xe0, 0x40, 0x62, 0xf5, 0x03, 0xcc, 0x92, 0xee, 0xcc,
+ 0x50, 0x66, 0x75, 0x6e, 0xe5, 0xe0, 0x44, 0xd5, 0x64, 0xe5, 0xe0, 0x45,
+ 0xad, 0xf6, 0x05, 0x05, 0x04, 0xcb, 0x48, 0x6f, 0x72, 0xf9, 0xd6, 0x22,
+ 0xe7, 0xe0, 0x49, 0xc6, 0x61, 0x6e, 0xef, 0x02, 0x85, 0x76, 0xef, 0xe0,
+ 0x4e, 0x77, 0x2d, 0x66, 0x72, 0x61, 0x6e, 0x6b, 0xe9, 0xe0, 0x27, 0xb0,
+ 0xf4, 0x0c, 0x05, 0x11, 0x05, 0x0d, 0x29, 0x1b, 0x60, 0x4c, 0x00, 0xc4,
+ 0x2e, 0x73, 0xae, 0xe0, 0x33, 0x94, 0xef, 0x05, 0x03, 0xe0, 0x45, 0xc0,
+ 0xed, 0xd5, 0x41, 0x69, 0x67, 0x61, 0x77, 0xe1, 0xe0, 0x4b, 0xb5, 0x69,
+ 0xe7, 0xe0, 0x37, 0x0b, 0x63, 0x6f, 0x75, 0x6c, 0x64, 0x62, 0x65, 0x77,
+ 0x6f, 0xf2, 0xe0, 0x4f, 0xcc, 0xe1, 0x08, 0x07, 0x05, 0x04, 0x0a, 0xe0,
+ 0x4f, 0x05, 0x79, 0x61, 0x6e, 0x61, 0xe7, 0xce, 0x42, 0x6e, 0xef, 0xe0,
+ 0x4a, 0x64, 0xed, 0xe0, 0x4a, 0xfa, 0xeb, 0x04, 0xe0, 0x3f, 0xd5, 0x75,
+ 0xf2, 0xe0, 0x46, 0xf4, 0x62, 0x61, 0xf3, 0xe0, 0x4c, 0xae, 0x31, 0xae,
+ 0x02, 0x8a, 0x65, 0x75, 0x72, 0x2e, 0x61, 0x72, 0x75, 0x62, 0x61, 0x2e,
+ 0x6a, 0x65, 0x6e, 0x76, 0x2d, 0x61, 0x72, 0x75, 0x62, 0xe1, 0xe0, 0x37,
+ 0xa2, 0xae, 0x60, 0x23, 0xd3, 0x60, 0x25, 0x75, 0xc6, 0xaf, 0xf3, 0x0d,
+ 0x05, 0x1d, 0x18, 0x07, 0x04, 0x23, 0x2a, 0x1f, 0x08, 0xe0, 0x4f, 0x5e,
+ 0x75, 0xed, 0xe0, 0x33, 0x2d, 0xf4, 0x06, 0x05, 0x0a, 0xe0, 0x4f, 0xfc,
+ 0x6d, 0xe5, 0xe0, 0x25, 0x7d, 0x65, 0x69, 0x6e, 0x67, 0x65, 0x65, 0xeb,
+ 0xe0, 0x2b, 0x65, 0x61, 0x6e, 0x62, 0xf5, 0xe0, 0x4d, 0x56, 0xf3, 0x02,
+ 0x8f, 0x6d, 0x61, 0x72, 0x74, 0x65, 0x72, 0x74, 0x68, 0x61, 0x6e, 0x79,
+ 0xef, 0xe0, 0x4e, 0x6a, 0x68, 0x69, 0xeb, 0xe0, 0x4a, 0x0e, 0x6d, 0x61,
+ 0x69, 0xec, 0xe0, 0x4d, 0x6d, 0x6c, 0xe1, 0xdf, 0x37, 0x68, 0xe9, 0x03,
+ 0x08, 0x90, 0x6e, 0x6f, 0x6d, 0x61, 0x6b, 0xe9, 0xd6, 0x95, 0x6b, 0xe1,
+ 0x04, 0xe0, 0x4d, 0xb5, 0x77, 0x61, 0xae, 0x60, 0x49, 0xca, 0x40, 0xd3,
+ 0xc3, 0x21, 0x67, 0x61, 0xeb, 0xe0, 0x4a, 0x91, 0xe5, 0x06, 0x07, 0x12,
+ 0x04, 0xc5, 0x0a, 0x73, 0x61, 0x6b, 0xe9, 0xe0, 0x46, 0x47, 0xf2, 0x04,
+ 0xe0, 0x36, 0x9b, 0xf6, 0x04, 0xe0, 0x44, 0xac, 0x73, 0x63, 0x68, 0x75,
+ 0xec, 0xe0, 0x26, 0x5f, 0xee, 0xe0, 0x48, 0xbc, 0x68, 0x61, 0xf2, 0xe0,
+ 0x4a, 0x3c, 0xe1, 0x03, 0x06, 0x86, 0x68, 0x61, 0xf9, 0xe0, 0x33, 0x41,
+ 0xae, 0x60, 0x48, 0xa9, 0xc1, 0x45, 0xad, 0x02, 0x89, 0x68, 0x6f, 0x63,
+ 0x6b, 0x65, 0x79, 0xee, 0xd8, 0x0d, 0xe7, 0xc1, 0xe5, 0xae, 0x50, 0x72,
+ 0x60, 0x38, 0x0e, 0xc4, 0x90, 0xad, 0x0c, 0x0e, 0x22, 0x06, 0x0e, 0x0d,
+ 0x12, 0x21, 0x06, 0x06, 0x12, 0x84, 0x77, 0x69, 0x74, 0x68, 0x2d, 0x74,
+ 0x68, 0x65, 0x62, 0x61, 0xee, 0xe0, 0x4d, 0x7a, 0x76, 0x65, 0x72, 0x79,
+ 0xad, 0x05, 0x05, 0x06, 0x05, 0x84, 0x73, 0x77, 0xe5, 0xdf, 0xa5, 0x6e,
+ 0x69, 0xe3, 0xe0, 0x39, 0x58, 0x67, 0x6f, 0xef, 0xdc, 0x3c, 0x65, 0x76,
+ 0xe9, 0xaf, 0x62, 0xe1, 0xdc, 0x34, 0x75, 0x62, 0x65, 0x72, 0xec, 0xa9,
+ 0xf3, 0x02, 0x86, 0x6c, 0x69, 0xe3, 0xe0, 0x4a, 0x9b, 0x61, 0x76, 0xe5,
+ 0xdc, 0x20, 0x6e, 0x6f, 0x74, 0xad, 0x02, 0x83, 0xe3, 0xc0, 0x4e, 0xe1,
+ 0xe0, 0x44, 0x18, 0xec, 0x02, 0x8a, 0xef, 0x03, 0xd4, 0xf9, 0x63, 0x61,
+ 0xec, 0xe0, 0x4b, 0xd1, 0x65, 0xe5, 0xe0, 0x44, 0x78, 0x69, 0x6e, 0x74,
+ 0x6f, 0xad, 0x03, 0x06, 0x8d, 0x67, 0x61, 0xed, 0xe0, 0x4d, 0x7c, 0x63,
+ 0x61, 0xf2, 0x04, 0xe0, 0x4d, 0x73, 0x74, 0x6f, 0xef, 0xe0, 0x24, 0xe3,
+ 0x61, 0x6e, 0xe9, 0xe0, 0x23, 0xe6, 0x67, 0x6f, 0xee, 0xe0, 0x46, 0x8e,
+ 0x66, 0x6f, 0x75, 0xee, 0xdb, 0xd4, 0xe3, 0x02, 0x86, 0x6f, 0x6f, 0xec,
+ 0xe0, 0x43, 0xd0, 0x65, 0x72, 0x74, 0x69, 0x66, 0xe9, 0xe0, 0x4c, 0xe5,
+ 0x62, 0xf9, 0xd3, 0xa2, 0xe1, 0x05, 0x35, 0xe0, 0x43, 0x85, 0x6e, 0xad,
+ 0x02, 0x91, 0x65, 0xee, 0x02, 0x86, 0x74, 0x65, 0x72, 0xf4, 0xc0, 0x99,
+ 0x67, 0x69, 0x6e, 0xe5, 0xe0, 0x44, 0x4a, 0xe1, 0x04, 0x04, 0xc1, 0x9f,
+ 0x72, 0xf4, 0xc1, 0xa6, 0xe3, 0x02, 0x8b, 0xf4, 0x04, 0xe0, 0x3f, 0xd9,
+ 0x72, 0x65, 0xf3, 0xe0, 0x4d, 0x16, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0xe1,
+ 0xe0, 0x43, 0xf9, 0xad, 0x10, 0x16, 0x16, 0x15, 0x2c, 0x10, 0x06, 0x30,
+ 0x08, 0x12, 0x15, 0x11, 0x1a, 0x40, 0x41, 0xa8, 0xf4, 0x02, 0x87, 0x68,
+ 0x65, 0x72, 0x61, 0xf0, 0xc1, 0x74, 0xe5, 0x02, 0x86, 0x63, 0x68, 0xe9,
+ 0xe0, 0x46, 0x13, 0x61, 0xe3, 0xbd, 0xf3, 0x02, 0x86, 0x74, 0x75, 0xe4,
+ 0xe0, 0x43, 0xc8, 0xef, 0x02, 0x84, 0xf8, 0xe0, 0x2d, 0x34, 0x63, 0x69,
+ 0x61, 0xec, 0xc1, 0x52, 0xf2, 0x02, 0x89, 0x6f, 0x63, 0x6b, 0x73, 0x74,
+ 0xe1, 0xe0, 0x4c, 0xf7, 0x65, 0x70, 0x75, 0x62, 0x6c, 0x69, 0xe3, 0xc1,
+ 0x1a, 0xf0, 0x04, 0x04, 0x0c, 0x8d, 0x6c, 0xe1, 0xc0, 0x60, 0x68, 0x6f,
+ 0x74, 0x6f, 0x67, 0x72, 0x61, 0x70, 0xe8, 0xe0, 0x43, 0xc3, 0x65, 0x72,
+ 0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x74, 0x72, 0x61, 0xe9, 0xc0, 0xa0, 0xe1,
+ 0x02, 0x83, 0xf4, 0xc0, 0xfa, 0xe9, 0xe0, 0x3c, 0xa6, 0xee, 0x02, 0x86,
+ 0x75, 0x72, 0xf3, 0xe0, 0x45, 0xb0, 0x61, 0x73, 0x63, 0x61, 0xf2, 0xc0,
+ 0xdd, 0x6d, 0x75, 0x73, 0x69, 0xe3, 0x9b, 0xec, 0x04, 0x1c, 0xc5, 0x77,
+ 0xe9, 0x02, 0x8a, 0x6e, 0x75, 0x78, 0x2d, 0x75, 0x73, 0xe5, 0xe0, 0x34,
+ 0xdb, 0x62, 0x65, 0xf2, 0x02, 0x86, 0x74, 0x61, 0x72, 0xe9, 0xc0, 0xbb,
+ 0xe1, 0xe0, 0x46, 0x56, 0xe1, 0x02, 0x85, 0x77, 0xf9, 0xe0, 0x43, 0x6d,
+ 0x6e, 0x64, 0x73, 0x63, 0xe1, 0xc0, 0xba, 0x6b, 0x6e, 0x69, 0x67, 0xe8,
+ 0xe0, 0x43, 0x76, 0xe8, 0x02, 0x84, 0xf5, 0xe0, 0x3c, 0x51, 0x61, 0x72,
+ 0x64, 0x2d, 0x77, 0x6f, 0x72, 0xeb, 0xe0, 0x43, 0x4c, 0xe7, 0x03, 0x05,
+ 0x86, 0x75, 0xf2, 0xe0, 0x4c, 0x10, 0x72, 0x65, 0xe5, 0xe0, 0x24, 0x02,
+ 0x65, 0x65, 0xeb, 0xe0, 0x39, 0x28, 0x66, 0x69, 0x6e, 0x61, 0x6e, 0x63,
+ 0x69, 0x61, 0x6c, 0x61, 0x64, 0x76, 0x69, 0xf3, 0xe0, 0x3e, 0xc9, 0xe4,
+ 0x02, 0x85, 0x6f, 0xe3, 0xe0, 0x3e, 0xc0, 0xe5, 0x02, 0x87, 0x73, 0x69,
+ 0x67, 0xee, 0xe0, 0x43, 0x14, 0x6d, 0x6f, 0x63, 0x72, 0xe1, 0xe0, 0x42,
+ 0xdc, 0xe3, 0x06, 0x0d, 0x04, 0x0b, 0x06, 0x86, 0x75, 0x62, 0x69, 0x63,
+ 0x6c, 0x65, 0x2d, 0x73, 0x6c, 0xe1, 0xe0, 0x26, 0xed, 0xf0, 0xe0, 0x40,
+ 0x50, 0x6f, 0x6e, 0x73, 0x65, 0x72, 0x76, 0x61, 0xf4, 0xe0, 0x26, 0xdd,
+ 0x68, 0x65, 0xe6, 0xe0, 0x38, 0xd4, 0x65, 0x6c, 0x74, 0x69, 0xe3, 0xa6,
+ 0xe1, 0x02, 0x86, 0x74, 0x65, 0xf2, 0xe0, 0x42, 0xd4, 0x6e, 0x64, 0x69,
+ 0x64, 0x61, 0xf4, 0xe0, 0x37, 0x3b, 0xe2, 0x04, 0x0a, 0x08, 0x8a, 0x75,
+ 0x6c, 0x6c, 0x73, 0x2d, 0x66, 0xe1, 0xe0, 0x23, 0x81, 0x72, 0x75, 0x69,
+ 0x6e, 0xf3, 0xe0, 0x2b, 0xf5, 0x6f, 0x6f, 0x6b, 0x6b, 0x65, 0x65, 0xf0,
+ 0xe0, 0x42, 0xaa, 0x6c, 0x6f, 0x67, 0xe7, 0xe0, 0x42, 0xa3, 0x61, 0x6e,
+ 0x61, 0x72, 0x63, 0x68, 0x69, 0xf3, 0xe0, 0x42, 0x68, 0xf2, 0x06, 0x03,
+ 0x08, 0xe0, 0x4c, 0xcc, 0xf5, 0xca, 0x86, 0x69, 0xf3, 0x60, 0x21, 0x23,
+ 0xe0, 0x28, 0xcc, 0x2e, 0xed, 0xe0, 0x38, 0x4f, 0xf0, 0x04, 0x10, 0x11,
+ 0x84, 0xe9, 0x02, 0x87, 0x72, 0x61, 0x6e, 0xe7, 0xe0, 0x4a, 0xc1, 0x66,
+ 0x6f, 0xee, 0xe0, 0x4b, 0x04, 0x66, 0x73, 0x2e, 0x6e, 0x66, 0x74, 0x73,
+ 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0xae, 0xe0, 0x27, 0xa4, 0xb6, 0xe0,
+ 0x20, 0xf1, 0x2e, 0x6c, 0x69, 0x6e, 0x6f, 0x64, 0xe5, 0xe0, 0x42, 0x13,
+ 0xef, 0x07, 0x07, 0x60, 0x47, 0x4a, 0xc5, 0x3a, 0x70, 0x73, 0x79, 0xf3,
+ 0xe0, 0x4b, 0xde, 0xe2, 0xd9, 0xe5, 0xee, 0x19, 0x05, 0x06, 0x07, 0x40,
+ 0x5c, 0x3a, 0x0f, 0x40, 0x84, 0x40, 0x62, 0x0f, 0x40, 0x46, 0x1b, 0x46,
+ 0x1b, 0x60, 0x35, 0x66, 0x4c, 0x20, 0xc2, 0xb9, 0x7a, 0xe1, 0xe0, 0x2f,
+ 0x7d, 0x76, 0x65, 0xf3, 0xe0, 0x42, 0x5d, 0x75, 0x79, 0x61, 0xed, 0xe0,
+ 0x2f, 0xa7, 0xf4, 0x07, 0x04, 0x03, 0x15, 0xe0, 0x4c, 0x31, 0xf5, 0xe0,
+ 0x49, 0xf7, 0xec, 0xdc, 0x71, 0x65, 0x72, 0xee, 0x02, 0x88, 0x65, 0xf4,
+ 0x60, 0x26, 0x05, 0xe0, 0x24, 0xb4, 0x61, 0x74, 0x69, 0x6f, 0xee, 0xe0,
+ 0x25, 0x0d, 0xae, 0x13, 0x06, 0x04, 0x06, 0x06, 0x08, 0x40, 0x73, 0x60,
+ 0x28, 0x9e, 0x45, 0x94, 0x56, 0x75, 0x42, 0xe4, 0xc0, 0xf4, 0xf4, 0x60,
+ 0x49, 0x89, 0xc0, 0x82, 0xf0, 0xe0, 0x4a, 0x05, 0xec, 0x60, 0x49, 0x59,
+ 0xc0, 0xbf, 0xe9, 0x60, 0x49, 0x50, 0xc1, 0x38, 0xe3, 0x60, 0x47, 0xd8,
+ 0x41, 0xc2, 0xc0, 0x97, 0xe1, 0x60, 0x49, 0x38, 0xc1, 0x23, 0xf3, 0x02,
+ 0x8b, 0x75, 0xf2, 0x04, 0xe0, 0x4a, 0x32, 0x61, 0x6e, 0xe3, 0xda, 0x50,
+ 0xf4, 0x02, 0x86, 0x69, 0x74, 0xf5, 0xe0, 0x44, 0x9d, 0x61, 0xee, 0x02,
+ 0x89, 0x74, 0x63, 0x6c, 0x6f, 0x75, 0xe4, 0xe0, 0x2c, 0x41, 0x63, 0xe5,
+ 0x02, 0x8a, 0x73, 0x2e, 0x73, 0x70, 0x61, 0x77, 0xee, 0xe0, 0x27, 0xc1,
+ 0x2e, 0x64, 0x61, 0x74, 0xe1, 0xe0, 0x24, 0xce, 0xe7, 0x06, 0x60, 0x49,
+ 0x6e, 0xc2, 0x4a, 0x61, 0x74, 0x6c, 0x61, 0xee, 0xe0, 0x4a, 0x67, 0xe6,
+ 0x04, 0x40, 0x69, 0x86, 0xef, 0x04, 0xe0, 0x4b, 0xa6, 0xae, 0x19, 0x05,
+ 0x09, 0x04, 0x0a, 0x06, 0x06, 0x06, 0x06, 0x06, 0x08, 0x4b, 0x88, 0x60,
+ 0x2b, 0xf4, 0x11, 0x4f, 0x8e, 0x41, 0x9b, 0x40, 0xbe, 0xc0, 0x51, 0xf6,
+ 0x60, 0x49, 0xcd, 0xba, 0xf4, 0x60, 0x48, 0xc0, 0x40, 0xb5, 0x40, 0x6e,
+ 0x9f, 0xf3, 0xe0, 0x48, 0xde, 0xee, 0x60, 0x40, 0x18, 0x48, 0xf5, 0x40,
+ 0x72, 0xc0, 0x57, 0xec, 0x60, 0x48, 0xb3, 0xc0, 0xc2, 0xeb, 0x60, 0x48,
+ 0xfd, 0xc0, 0xae, 0xe8, 0x60, 0x49, 0x52, 0xc0, 0xc7, 0xe5, 0x60, 0x3e,
+ 0xf5, 0xca, 0x57, 0xe3, 0x60, 0x3f, 0x0d, 0xca, 0x75, 0xe2, 0x60, 0x40,
+ 0x8e, 0x48, 0x30, 0xc0, 0xbe, 0xe1, 0x60, 0x48, 0x83, 0x41, 0x7c, 0xc0,
+ 0xea, 0x69, 0x6e, 0xe9, 0xe0, 0x38, 0x59, 0xae, 0x07, 0x04, 0x60, 0x37,
+ 0x69, 0xd2, 0x23, 0xed, 0xe0, 0x48, 0x7a, 0xe3, 0xe0, 0x49, 0xe5, 0xe4,
+ 0x05, 0x0a, 0x07, 0xc0, 0x40, 0x75, 0x73, 0x74, 0x72, 0xe9, 0x60, 0x3e,
+ 0xa5, 0xc9, 0x6d, 0x69, 0x67, 0x65, 0xee, 0xe0, 0x48, 0x09, 0xe5, 0x04,
+ 0xe0, 0x3c, 0xa2, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0xad, 0x04,
+ 0x09, 0x08, 0x92, 0x72, 0x65, 0x76, 0x69, 0x65, 0xf7, 0xe0, 0x47, 0x4d,
+ 0x70, 0x61, 0x6e, 0x65, 0xec, 0xe0, 0x47, 0x45, 0x69, 0x6e, 0x71, 0xf5,
+ 0x02, 0x86, 0x69, 0x72, 0xf9, 0xe0, 0x47, 0x39, 0x65, 0x73, 0xf4, 0xe0,
+ 0x47, 0x33, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0xef, 0xe0,
+ 0x28, 0x3c, 0xae, 0x4e, 0x56, 0x4c, 0xa8, 0x41, 0x7f, 0x60, 0x2c, 0xb3,
+ 0x9f, 0xe3, 0x05, 0x04, 0xe0, 0x4a, 0xc0, 0xe8, 0xe0, 0x25, 0x5e, 0x2e,
+ 0xe8, 0xe0, 0x4a, 0x45, 0xe1, 0x08, 0x06, 0x09, 0x08, 0x07, 0x08, 0x09,
+ 0x86, 0x7a, 0x61, 0xf7, 0xe0, 0x2d, 0xfe, 0x77, 0x61, 0x73, 0x68, 0x69,
+ 0xf2, 0xe0, 0x44, 0xa8, 0x74, 0x73, 0x75, 0x6b, 0xe9, 0xe0, 0x32, 0xe6,
+ 0x73, 0x68, 0x69, 0xeb, 0xe0, 0x2e, 0x42, 0x6d, 0x69, 0xae, 0x60, 0x3e,
+ 0xf6, 0xc0, 0x7c, 0xe7, 0x04, 0xe0, 0x46, 0xea, 0x61, 0xf7, 0xc8, 0x7f,
+ 0x62, 0x65, 0xae, 0xe0, 0x3e, 0xe9, 0xae, 0x60, 0x3f, 0xa9, 0x42, 0xb1,
+ 0xc4, 0xba, 0xae, 0x0a, 0x06, 0x58, 0xd9, 0x45, 0xd0, 0x48, 0xf8, 0xdb,
+ 0xde, 0xf5, 0x60, 0x47, 0xad, 0xc0, 0xc2, 0xee, 0x60, 0x40, 0x77, 0x47,
+ 0x80, 0x40, 0x72, 0xc1, 0x99, 0xad, 0x05, 0x04, 0x0a, 0x0b, 0x90, 0x76,
+ 0x70, 0xee, 0x8e, 0x74, 0x68, 0x65, 0x2d, 0x62, 0x61, 0xee, 0xe0, 0x3b,
+ 0x21, 0x64, 0x73, 0x6c, 0xae, 0x60, 0x47, 0x1e, 0x42, 0x4c, 0xc0, 0x76,
+ 0xe2, 0x04, 0x06, 0xdf, 0xa1, 0x75, 0x74, 0xf4, 0xe0, 0x25, 0x97, 0x72,
+ 0xe2, 0xe0, 0x25, 0x94, 0x61, 0x64, 0x64, 0xf2, 0xde, 0x78, 0xed, 0x0c,
+ 0x14, 0x0c, 0x04, 0x04, 0x60, 0x32, 0xbe, 0x54, 0xdc, 0xc2, 0x56, 0x70,
+ 0x65, 0xf2, 0x04, 0xe0, 0x42, 0xfa, 0x74, 0x72, 0x69, 0xf8, 0x04, 0xe0,
+ 0x49, 0xd2, 0x63, 0xe4, 0xe0, 0x20, 0x83, 0x6d, 0xef, 0x04, 0xe0, 0x49,
+ 0xfe, 0x62, 0x69, 0x6c, 0xe9, 0xcf, 0xc0, 0x69, 0xfa, 0xd1, 0x48, 0xe4,
+ 0xe0, 0x3f, 0x30, 0xe1, 0x04, 0x03, 0x05, 0x86, 0xf2, 0xd1, 0x4b, 0x6d,
+ 0xe1, 0xe0, 0x47, 0xd5, 0x6b, 0x61, 0xee, 0xe0, 0x2d, 0x2c, 0x62, 0x61,
+ 0xf2, 0xc3, 0x6a, 0xec, 0x09, 0x0b, 0x07, 0x06, 0x60, 0x36, 0xa3, 0xd3,
+ 0x13, 0x6f, 0x76, 0x65, 0x63, 0x6f, 0x6c, 0x6c, 0xe5, 0xe0, 0x38, 0xe2,
+ 0x69, 0x61, 0x64, 0x62, 0xef, 0xc1, 0x58, 0xae, 0x60, 0x42, 0xd6, 0xc1,
+ 0x59, 0x2d, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x2d, 0xb1, 0xe0,
+ 0x3f, 0xe9, 0xeb, 0x05, 0x07, 0x03, 0x07, 0x8e, 0x75, 0x73, 0x61, 0xeb,
+ 0xe0, 0x2d, 0x4e, 0x6f, 0xed, 0xa8, 0x69, 0xae, 0x60, 0x2d, 0x5c, 0xdb,
+ 0xa0, 0x65, 0x64, 0x61, 0xae, 0x5d, 0x74, 0x60, 0x22, 0xb1, 0x46, 0x01,
+ 0x41, 0x41, 0xa0, 0xe1, 0x06, 0x03, 0x05, 0xe0, 0x47, 0x8e, 0xf7, 0xc8,
+ 0xb9, 0x74, 0xe1, 0xe0, 0x44, 0x21, 0x72, 0x75, 0x67, 0xe1, 0xe0, 0x40,
+ 0x85, 0xe9, 0x05, 0x0b, 0x05, 0x06, 0x85, 0x7a, 0xf5, 0x02, 0x84, 0xee,
+ 0xe0, 0x2d, 0x12, 0xeb, 0xc8, 0x4b, 0x79, 0xe1, 0xe0, 0x2d, 0x09, 0x74,
+ 0x61, 0xf4, 0xe0, 0x43, 0x61, 0x6a, 0xe9, 0xe0, 0x2c, 0xfe, 0xe4, 0x45,
+ 0x35, 0xe0, 0x27, 0xc6, 0x68, 0x65, 0xf9, 0xcd, 0xf2, 0x67, 0x6c, 0x65,
+ 0x73, 0x69, 0x61, 0xf3, 0x02, 0x81, 0x2d, 0x63, 0x61, 0x72, 0x62, 0xef,
+ 0xe0, 0x30, 0x32, 0xe6, 0x60, 0x2d, 0x44, 0xd9, 0x46, 0xe5, 0x06, 0x60,
+ 0x43, 0xbd, 0xc5, 0x66, 0xae, 0x60, 0x35, 0x5b, 0xcc, 0xe2, 0xe4, 0x09,
+ 0x06, 0x06, 0x04, 0x60, 0x3a, 0x2a, 0xce, 0xd9, 0x76, 0xae, 0x4b, 0x43,
+ 0xde, 0x6d, 0x72, 0x65, 0xf4, 0xe0, 0x40, 0xdc, 0x66, 0xae, 0xda, 0xb3,
+ 0xae, 0x0c, 0x0d, 0x06, 0x06, 0x04, 0x60, 0x43, 0x4d, 0x42, 0x1e, 0xc0,
+ 0x80, 0x72, 0x65, 0x70, 0xec, 0x04, 0xe0, 0x2f, 0x27, 0x69, 0xf4, 0xe0,
+ 0x21, 0x94, 0x70, 0x75, 0xe2, 0xe0, 0x48, 0xe2, 0xec, 0x60, 0x44, 0xb4,
+ 0xc1, 0xa4, 0xe9, 0xe0, 0x47, 0x39, 0xe6, 0x02, 0x8a, 0x6f, 0x72, 0x67,
+ 0x65, 0x72, 0x6f, 0xe3, 0xe0, 0x3e, 0xe6, 0x69, 0x72, 0x65, 0x77, 0x61,
+ 0x6c, 0xec, 0xd4, 0xbb, 0xe3, 0x09, 0x0a, 0x41, 0x3a, 0x48, 0x81, 0xe0,
+ 0x3d, 0x36, 0xf5, 0x04, 0xe0, 0x48, 0xb4, 0x72, 0xf5, 0xe0, 0x2c, 0x2e,
+ 0x68, 0xe9, 0x04, 0x17, 0x19, 0x85, 0x6e, 0xef, 0x03, 0x04, 0x8a, 0x73,
+ 0xe5, 0xc6, 0xfe, 0x6d, 0x69, 0x79, 0x61, 0xae, 0x60, 0x42, 0xcb, 0xc3,
+ 0xa0, 0x68, 0xe5, 0xd0, 0x9c, 0x6b, 0xe1, 0x02, 0x91, 0x77, 0xe1, 0x02,
+ 0x87, 0x6d, 0x69, 0x73, 0x61, 0xf4, 0xd0, 0x5d, 0xae, 0x60, 0x43, 0x22,
+ 0xc3, 0x30, 0xe9, 0xe0, 0x3c, 0x7f, 0x68, 0x61, 0xf2, 0xc6, 0xcd, 0x62,
+ 0xe1, 0xe0, 0x42, 0x76, 0xe2, 0x08, 0x06, 0x04, 0x40, 0x99, 0xe0, 0x45,
+ 0x1e, 0x78, 0x6f, 0xf3, 0xe0, 0x47, 0xd6, 0x69, 0xe7, 0xc4, 0x36, 0x61,
+ 0x72, 0xe1, 0x04, 0xe0, 0x42, 0x0e, 0x6b, 0x69, 0xae, 0x60, 0x40, 0x30,
+ 0x45, 0xfb, 0xa9, 0xe1, 0x04, 0xe0, 0x42, 0x1b, 0x6d, 0x61, 0x6c, 0x6c,
+ 0x61, 0xed, 0xe0, 0x3b, 0x54, 0x32, 0x33, 0xb4, 0xe0, 0x31, 0x90, 0xae,
+ 0x08, 0x60, 0x32, 0x0c, 0x44, 0x24, 0xd1, 0xfd, 0xf0, 0xe0, 0x45, 0x4b,
+ 0xe8, 0x18, 0x2e, 0x05, 0x23, 0x03, 0x35, 0x0c, 0x0e, 0x11, 0x41, 0xb4,
+ 0x06, 0x06, 0x0e, 0x12, 0x10, 0x41, 0xe1, 0x40, 0xc5, 0x09, 0x14, 0xd7,
+ 0x02, 0x1f, 0xc3, 0x07, 0x07, 0x04, 0x0a, 0xe0, 0x46, 0x0b, 0xf8, 0x03,
+ 0xc0, 0xc0, 0xee, 0xc1, 0x8c, 0x66, 0xe7, 0xc7, 0x11, 0x64, 0x6b, 0x6b,
+ 0x69, 0x6e, 0x65, 0xee, 0xe0, 0x47, 0x5b, 0xe1, 0x03, 0x03, 0x86, 0xf0,
+ 0xc6, 0x00, 0x6d, 0x6d, 0x1f, 0xc3, 0xc6, 0x5e, 0xe2, 0xc7, 0x3c, 0x7a,
+ 0xe3, 0xe0, 0x46, 0x90, 0xf9, 0x07, 0x0d, 0x05, 0x05, 0xe0, 0x42, 0x62,
+ 0xf5, 0x02, 0x85, 0x6e, 0xe4, 0xe0, 0x2b, 0x5a, 0x67, 0xe1, 0xe0, 0x38,
+ 0xfa, 0x70, 0x65, 0xf2, 0xdc, 0x93, 0x6c, 0x6c, 0xe5, 0xd3, 0x49, 0xe1,
+ 0xe0, 0x45, 0xad, 0xf6, 0xd3, 0x58, 0xf5, 0x08, 0x06, 0x09, 0x11, 0x05,
+ 0xe0, 0x47, 0x8b, 0xf2, 0x60, 0x2f, 0x89, 0xd0, 0x79, 0x6e, 0xe7, 0x04,
+ 0xe0, 0x3e, 0x5f, 0xf9, 0xdf, 0x93, 0x69, 0x73, 0x73, 0x69, 0x65, 0x72,
+ 0x2d, 0x6a, 0x75, 0x73, 0x74, 0x69, 0x63, 0xe5, 0xe0, 0x39, 0x14, 0x67,
+ 0xe8, 0xe0, 0x3b, 0x12, 0xae, 0x60, 0x40, 0xa5, 0x46, 0x83, 0xac, 0xf4,
+ 0x04, 0xe0, 0x47, 0x7f, 0x74, 0x70, 0x62, 0xe9, 0xe0, 0x26, 0x75, 0xf3,
+ 0x02, 0x84, 0xe2, 0xe0, 0x3b, 0x0c, 0xae, 0x5f, 0xcf, 0x48, 0xfb, 0xc7,
+ 0x11, 0xf2, 0x06, 0x60, 0x35, 0x5d, 0xd2, 0x06, 0x61, 0x2e, 0x68, 0x65,
+ 0x61, 0x6c, 0xf4, 0xe0, 0x46, 0x78, 0xef, 0x13, 0x0d, 0x04, 0x27, 0x40,
+ 0x48, 0x1f, 0x12, 0x28, 0x40, 0x61, 0x23, 0x19, 0x09, 0x05, 0x17, 0xe0,
+ 0x42, 0xe7, 0xf9, 0x04, 0xe0, 0x30, 0x87, 0x6c, 0x61, 0x6e, 0x64, 0xe5,
+ 0xe0, 0x3f, 0x0d, 0xf5, 0xe0, 0x35, 0x38, 0xf4, 0x05, 0x03, 0xe0, 0x47,
+ 0x2b, 0xed, 0xd8, 0xda, 0x65, 0xec, 0x05, 0x0c, 0xe0, 0x44, 0x5c, 0x77,
+ 0x69, 0x74, 0x68, 0x66, 0x6c, 0x69, 0x67, 0xe8, 0xe0, 0x3c, 0xa2, 0xae,
+ 0x06, 0x60, 0x3a, 0xba, 0xcb, 0x0c, 0xf4, 0xe0, 0x44, 0x4a, 0xf3, 0x02,
+ 0xbc, 0xf4, 0x06, 0x07, 0x28, 0xe0, 0x46, 0xd4, 0x79, 0x68, 0x6f, 0x73,
+ 0xf4, 0xdf, 0x4f, 0x69, 0x6e, 0xe7, 0x05, 0x15, 0xe0, 0x46, 0xdf, 0xae,
+ 0x02, 0x86, 0x6f, 0x76, 0xe8, 0xe0, 0x2e, 0x84, 0x6d, 0x79, 0x6a, 0x69,
+ 0x6e, 0x6f, 0x2e, 0x72, 0xf5, 0xe0, 0x46, 0xde, 0x2d, 0x63, 0x6c, 0x75,
+ 0x73, 0x74, 0x65, 0xf2, 0xe0, 0x29, 0x67, 0x65, 0xe4, 0x57, 0x5e, 0xdd,
+ 0x37, 0xf0, 0x04, 0xe0, 0x43, 0x18, 0x69, 0xf4, 0xdf, 0xa0, 0xf2, 0x06,
+ 0x04, 0x0f, 0xe0, 0x34, 0xac, 0xf4, 0xe0, 0x36, 0x88, 0xef, 0x02, 0x86,
+ 0x6e, 0x6f, 0xe2, 0xe0, 0x2a, 0x00, 0x6b, 0x61, 0xee, 0xe0, 0x33, 0xa4,
+ 0x6e, 0xe9, 0xe0, 0x3b, 0x9b, 0xf0, 0x02, 0x88, 0x74, 0x6f, 0xae, 0x60,
+ 0x2f, 0xf6, 0xd3, 0x86, 0x6c, 0x69, 0x78, 0xae, 0xe0, 0x35, 0x17, 0xee,
+ 0x09, 0x0d, 0x05, 0x07, 0x60, 0x3a, 0x88, 0xc6, 0xa8, 0xea, 0x02, 0x83,
+ 0xf9, 0xce, 0x36, 0x6f, 0xae, 0x60, 0x3b, 0xaf, 0xc4, 0x38, 0x67, 0xef,
+ 0xe0, 0x3a, 0xae, 0x65, 0x66, 0x6f, 0xf3, 0xe0, 0x41, 0x99, 0x61, 0xe9,
+ 0xe0, 0x41, 0x18, 0x6d, 0xe5, 0x0c, 0x04, 0x22, 0x0f, 0x06, 0x05, 0x09,
+ 0x07, 0x52, 0xd6, 0xc8, 0x7c, 0x75, 0x6e, 0xe9, 0xa9, 0xf3, 0x05, 0x06,
+ 0xe0, 0x46, 0x4e, 0x6b, 0x6c, 0xe5, 0xe0, 0x34, 0x1e, 0xe5, 0x02, 0x84,
+ 0xee, 0xe0, 0x34, 0x4b, 0x63, 0x75, 0x72, 0x69, 0x74, 0xf9, 0x02, 0x83,
+ 0xf0, 0xdf, 0x40, 0x6d, 0xe1, 0xdf, 0x3c, 0x6c, 0x69, 0xee, 0x02, 0x85,
+ 0x75, 0xf8, 0xe0, 0x31, 0xd9, 0x6b, 0xae, 0xe0, 0x27, 0x87, 0x67, 0x6f,
+ 0xef, 0xe0, 0x2c, 0x7d, 0x66, 0x74, 0xf0, 0xd6, 0x9b, 0xe4, 0x03, 0xdb,
+ 0xc6, 0x65, 0xf0, 0xe0, 0x35, 0x6a, 0x62, 0x75, 0x69, 0xec, 0xe0, 0x40,
+ 0x81, 0xae, 0xc9, 0xb7, 0xec, 0x0b, 0x0b, 0x05, 0x60, 0x31, 0xc3, 0x4a,
+ 0xe8, 0x47, 0x5b, 0x81, 0xf4, 0x02, 0x85, 0x1f, 0x43, 0xe5, 0xc6, 0x11,
+ 0xe1, 0xc6, 0x0e, 0x6d, 0xe5, 0xe0, 0x35, 0xc3, 0x64, 0x69, 0x6e, 0xe7,
+ 0xe0, 0x43, 0x2f, 0xeb, 0x02, 0x90, 0xf5, 0x02, 0x88, 0x74, 0x6f, 0xae,
+ 0x60, 0x28, 0xb6, 0xdb, 0x22, 0x72, 0xf9, 0xe0, 0x40, 0x9b, 0xeb, 0x60,
+ 0x2e, 0xf0, 0xd4, 0xe1, 0xe6, 0x04, 0xe0, 0x43, 0xe2, 0xf5, 0xe0, 0x43,
+ 0x60, 0x63, 0xeb, 0xe0, 0x38, 0xc0, 0xe2, 0x03, 0x06, 0x84, 0x1f, 0x43,
+ 0xf8, 0xe0, 0x3e, 0x0f, 0xef, 0xe0, 0x3e, 0x0b, 0x62, 0x79, 0x2d, 0x73,
+ 0x69, 0x74, 0xe5, 0xdc, 0x38, 0x61, 0xe2, 0xe0, 0x35, 0xb7, 0xee, 0x60,
+ 0x31, 0x9d, 0xd4, 0x07, 0xed, 0x60, 0x43, 0xb6, 0xc1, 0xe8, 0xec, 0x04,
+ 0xe0, 0x40, 0x60, 0xf8, 0x04, 0xe0, 0x41, 0x65, 0xb3, 0xe0, 0x24, 0xa7,
+ 0xeb, 0x06, 0x60, 0x43, 0x73, 0xc2, 0x11, 0xae, 0x04, 0xe0, 0x42, 0x5b,
+ 0xe3, 0x60, 0x43, 0xfa, 0xc1, 0x4f, 0xea, 0x02, 0x87, 0x65, 0x6c, 0x6d,
+ 0xe5, 0xe0, 0x38, 0x31, 0x61, 0x72, 0xf4, 0xe0, 0x3d, 0xbf, 0xe9, 0x14,
+ 0x06, 0x24, 0x0d, 0x40, 0x4f, 0x07, 0x05, 0x14, 0x10, 0x1a, 0x05, 0x04,
+ 0x40, 0xd1, 0x12, 0x0a, 0xe0, 0x3f, 0x60, 0x7a, 0x65, 0xee, 0xe0, 0x3a,
+ 0x39, 0xf4, 0x04, 0xe0, 0x38, 0x0d, 0xe1, 0x04, 0xe0, 0x32, 0xd7, 0x63,
+ 0x68, 0xe9, 0x07, 0x09, 0x60, 0x3d, 0x0e, 0xc8, 0x23, 0xef, 0x02, 0x82,
+ 0xf4, 0x88, 0x6d, 0x69, 0xf9, 0x84, 0x6e, 0x61, 0x6b, 0xe1, 0xe0, 0x3d,
+ 0x0a, 0x73, 0xe1, 0x02, 0x85, 0x79, 0x61, 0xed, 0xc4, 0x0f, 0x6d, 0xe9,
+ 0xcc, 0xb5, 0xf2, 0x02, 0x9f, 0xef, 0x08, 0x09, 0x08, 0x60, 0x38, 0xec,
+ 0xc0, 0xf0, 0xf3, 0x04, 0xe0, 0x3f, 0x1f, 0x61, 0xeb, 0xc2, 0xe8, 0x6e,
+ 0x6f, 0xae, 0x4d, 0x0e, 0xe0, 0x32, 0x05, 0x6b, 0x61, 0xf7, 0xc3, 0xe9,
+ 0xe1, 0x07, 0x04, 0x0b, 0x03, 0x04, 0x06, 0x86, 0xf9, 0xe0, 0x28, 0xa1,
+ 0xf4, 0x04, 0xe0, 0x39, 0x30, 0x73, 0x75, 0xeb, 0xe0, 0x3f, 0x9b, 0xf2,
+ 0xc9, 0x91, 0x6e, 0xe1, 0xc2, 0xbd, 0x6b, 0x61, 0xf4, 0xe0, 0x28, 0xb0,
+ 0x69, 0x7a, 0x75, 0xed, 0xcc, 0xda, 0xe4, 0xc7, 0x7b, 0xf0, 0x03, 0xd0,
+ 0x17, 0xe8, 0xda, 0x6e, 0x6f, 0xeb, 0xe0, 0x3c, 0xda, 0x6e, 0xef, 0x03,
+ 0x04, 0x83, 0x68, 0xe1, 0xc3, 0x21, 0xe4, 0xc0, 0xc9, 0x2e, 0x74, 0xef,
+ 0x60, 0x27, 0xed, 0xd9, 0x2d, 0xed, 0x03, 0xcb, 0xc1, 0xe5, 0x04, 0xe0,
+ 0x36, 0x19, 0x73, 0x68, 0x69, 0xed, 0xe0, 0x2d, 0x1f, 0xeb, 0x03, 0x06,
+ 0x85, 0x6f, 0x6e, 0xe5, 0xe0, 0x3e, 0xbd, 0x69, 0xed, 0xe0, 0x3e, 0x54,
+ 0xe1, 0x02, 0x83, 0xf7, 0xc3, 0x2f, 0x72, 0xe9, 0xe0, 0x42, 0x1e, 0x6a,
+ 0xe9, 0xe0, 0x32, 0x15, 0xe8, 0xe0, 0x2b, 0x07, 0x67, 0x61, 0x73, 0x68,
+ 0xe9, 0x0d, 0x21, 0x05, 0x08, 0x17, 0x0a, 0x0c, 0x18, 0x19, 0x0c, 0x08,
+ 0x07, 0x8a, 0xf9, 0x02, 0x93, 0xef, 0x02, 0x88, 0x73, 0x68, 0x69, 0x6e,
+ 0xef, 0xe0, 0x3b, 0x72, 0x64, 0x6f, 0x67, 0x61, 0xf7, 0xe0, 0x28, 0x2c,
+ 0x61, 0x6d, 0xe1, 0x04, 0xe0, 0x35, 0x74, 0xf4, 0xe0, 0x3d, 0xbf, 0x75,
+ 0xf2, 0xe0, 0x27, 0x95, 0x74, 0x73, 0x75, 0x6e, 0xef, 0xe0, 0x3d, 0xb5,
+ 0xf3, 0x02, 0x8b, 0x75, 0x6d, 0x69, 0x79, 0x6f, 0x73, 0x68, 0xe9, 0xe0,
+ 0x42, 0x08, 0x68, 0x69, 0x72, 0x61, 0x6b, 0x61, 0xf7, 0xd4, 0xb6, 0xef,
+ 0x04, 0xe0, 0x27, 0xf2, 0x6d, 0xe9, 0xe0, 0x3e, 0x43, 0xee, 0x02, 0x83,
+ 0xe5, 0xcb, 0x33, 0x61, 0x72, 0x75, 0xf3, 0xc7, 0x4a, 0xed, 0x02, 0x88,
+ 0x75, 0x72, 0x61, 0x79, 0xe1, 0xe0, 0x3d, 0x73, 0x61, 0x74, 0x73, 0xf5,
+ 0x03, 0xc1, 0xaa, 0x73, 0x68, 0x69, 0xed, 0xca, 0xc5, 0xeb, 0x02, 0x88,
+ 0x75, 0x72, 0x75, 0x6d, 0xe5, 0xe0, 0x40, 0x52, 0xe1, 0x04, 0xe0, 0x38,
+ 0x38, 0xe7, 0x04, 0xe0, 0x35, 0x00, 0xf5, 0xe0, 0x41, 0xaa, 0x69, 0x7a,
+ 0xf5, 0x04, 0xe0, 0x39, 0x0a, 0x6d, 0xef, 0xe0, 0x3d, 0x97, 0x68, 0x69,
+ 0x72, 0x6f, 0x73, 0xe8, 0xd3, 0x19, 0x63, 0x68, 0x69, 0xe3, 0xe0, 0x27,
+ 0xab, 0x61, 0x67, 0x61, 0x74, 0x73, 0x75, 0xed, 0xe0, 0x3a, 0x5d, 0xae,
+ 0x04, 0xe0, 0x3e, 0x94, 0x66, 0x75, 0x6b, 0xf5, 0x60, 0x38, 0xe9, 0xc4,
+ 0xd8, 0x64, 0xe1, 0x04, 0xe0, 0x3a, 0x3a, 0x6b, 0x61, 0xae, 0x60, 0x38,
+ 0x82, 0x40, 0x4c, 0x44, 0x4b, 0xc4, 0x81, 0xe3, 0x04, 0xe0, 0x29, 0xb9,
+ 0x68, 0x69, 0xf3, 0xc6, 0xdc, 0xae, 0x60, 0x3e, 0x01, 0xc0, 0x5c, 0xe5,
+ 0x0c, 0x06, 0x40, 0x4d, 0x08, 0x0d, 0x1a, 0x08, 0x07, 0xe0, 0x2e, 0xe3,
+ 0x74, 0x65, 0xed, 0xe0, 0x28, 0x73, 0xf2, 0x09, 0x0e, 0x21, 0x04, 0x4e,
+ 0xc1, 0xe0, 0x34, 0x35, 0x1f, 0x43, 0x78, 0x79, 0xae, 0x04, 0xe0, 0x2d,
+ 0xb8, 0x6d, 0x1f, 0x43, 0xf8, 0x8c, 0xef, 0x02, 0x93, 0x79, 0xae, 0x04,
+ 0xe0, 0x2d, 0xaa, 0x6d, 0x6f, 0x72, 0x65, 0x2d, 0x6f, 0x67, 0x2d, 0x72,
+ 0x6f, 0xed, 0xc9, 0xb1, 0x6b, 0xf5, 0x04, 0xe0, 0x42, 0x07, 0x73, 0xf3,
+ 0xe0, 0x3b, 0xd7, 0xed, 0xe0, 0x36, 0xbf, 0xe5, 0x04, 0xe0, 0x43, 0x33,
+ 0x2d, 0x66, 0x6f, 0x72, 0x2d, 0x6d, 0x6f, 0xf2, 0xe0, 0x32, 0x48, 0x70,
+ 0x66, 0x6f, 0x72, 0xe7, 0xe0, 0x2d, 0x4a, 0xed, 0x02, 0x83, 0xf3, 0xd9,
+ 0x2f, 0x6e, 0xe5, 0x60, 0x3e, 0x3d, 0xc2, 0xf3, 0xec, 0x05, 0x06, 0xe0,
+ 0x41, 0x17, 0x73, 0x69, 0xee, 0xe0, 0x2f, 0x61, 0x69, 0x6f, 0x68, 0xef,
+ 0x02, 0x84, 0x73, 0xf4, 0xc7, 0xf4, 0xae, 0xe0, 0x24, 0x4e, 0x6b, 0x69,
+ 0x6e, 0x61, 0xee, 0xe0, 0x3d, 0x23, 0x67, 0x75, 0x72, 0xe9, 0xe0, 0x3a,
+ 0x01, 0xe1, 0x02, 0x84, 0xf6, 0xe0, 0x39, 0xa2, 0x6c, 0x74, 0xe8, 0x06,
+ 0x05, 0x06, 0xe0, 0x42, 0xcf, 0x63, 0xe1, 0xe0, 0x3f, 0xbc, 0xae, 0x60,
+ 0x3b, 0x93, 0xc4, 0x53, 0x2d, 0x63, 0x61, 0x72, 0x65, 0x72, 0x65, 0x66,
+ 0x6f, 0xf2, 0xd0, 0x36, 0x64, 0x66, 0xe3, 0x60, 0x20, 0x93, 0xe0, 0x22,
+ 0x2d, 0xe2, 0x04, 0xe0, 0x40, 0xe0, 0x2e, 0xe3, 0x04, 0xe0, 0x41, 0x2b,
+ 0x6c, 0x64, 0x6d, 0x61, 0x69, 0xec, 0xe0, 0x2f, 0x38, 0xe1, 0x16, 0x04,
+ 0x10, 0x0e, 0x24, 0x3b, 0x17, 0x0d, 0x40, 0x49, 0x40, 0x54, 0x14, 0x29,
+ 0x15, 0x11, 0x08, 0x0c, 0x26, 0xe0, 0x3b, 0x7c, 0xfa, 0xe0, 0x25, 0xe4,
+ 0x79, 0xe1, 0x02, 0x87, 0x73, 0x68, 0x69, 0xed, 0xe0, 0x3c, 0x3b, 0x6b,
+ 0x61, 0xf7, 0xca, 0x10, 0xf5, 0x04, 0xe0, 0x3f, 0xba, 0xe7, 0x04, 0xe0,
+ 0x39, 0x30, 0xe5, 0xe0, 0x2b, 0x8c, 0xf4, 0x06, 0x07, 0x0a, 0xe0, 0x32,
+ 0x64, 0x74, 0x66, 0x6a, 0x65, 0xec, 0xcd, 0x1d, 0x73, 0x75, 0x6b, 0x61,
+ 0x69, 0x63, 0xe8, 0xe0, 0x36, 0x8a, 0xef, 0x02, 0x85, 0x79, 0x61, 0xed,
+ 0xc9, 0xc6, 0x67, 0xe1, 0xc9, 0xc1, 0xf3, 0x05, 0x10, 0x1b, 0xc7, 0xf8,
+ 0xf5, 0x02, 0x8a, 0x72, 0xe1, 0x04, 0xe0, 0x3e, 0x96, 0xad, 0xe0, 0x32,
+ 0x70, 0xe4, 0xc9, 0xac, 0xe8, 0x02, 0x91, 0xe9, 0x02, 0x88, 0xed, 0x03,
+ 0xd2, 0xb9, 0x6f, 0xf4, 0xc5, 0x80, 0x6b, 0x61, 0x6d, 0xe9, 0xc5, 0x31,
+ 0x62, 0x61, 0x6e, 0xe7, 0xe0, 0x2e, 0xae, 0x61, 0xed, 0x04, 0xe0, 0x2a,
+ 0x90, 0xe9, 0xe0, 0x25, 0xd5, 0xf2, 0x05, 0x06, 0x05, 0xcd, 0x84, 0x69,
+ 0x6d, 0xe1, 0xe0, 0x3c, 0xa4, 0x65, 0xe9, 0xe0, 0x3d, 0x56, 0xe1, 0x60,
+ 0x35, 0xd8, 0xc8, 0xbb, 0xf0, 0x02, 0x85, 0x70, 0x6f, 0xf5, 0xdc, 0x6a,
+ 0x6d, 0xe9, 0xe0, 0x35, 0xcd, 0xee, 0x06, 0x04, 0x03, 0x09, 0x0d, 0x8e,
+ 0xf9, 0xe0, 0x25, 0xcb, 0xef, 0xd8, 0x4d, 0xee, 0x03, 0xc9, 0x9a, 0x61,
+ 0xee, 0xe0, 0x3f, 0xae, 0xe7, 0x02, 0x85, 0x6f, 0xf5, 0xe0, 0x3f, 0xbd,
+ 0x67, 0x6c, 0xe9, 0xc5, 0xe3, 0xe4, 0x04, 0xe0, 0x25, 0x10, 0x63, 0x72,
+ 0x61, 0x66, 0x74, 0xe5, 0xe0, 0x40, 0x75, 0xe1, 0x04, 0xe0, 0x35, 0xf8,
+ 0xed, 0x05, 0x08, 0xe0, 0x38, 0x68, 0x69, 0x67, 0x61, 0x77, 0xe1, 0xe0,
+ 0x3f, 0x77, 0x61, 0xeb, 0xc9, 0xaa, 0xed, 0x05, 0x05, 0x14, 0x05, 0xa5,
+ 0x75, 0xf2, 0xe0, 0x3b, 0x07, 0xed, 0x02, 0x88, 0x65, 0x72, 0x66, 0x65,
+ 0xf3, 0xe0, 0x39, 0x60, 0x61, 0x72, 0x66, 0x65, 0x61, 0xf3, 0xe0, 0x3a,
+ 0xd5, 0x62, 0xf5, 0xe0, 0x2c, 0x31, 0xe1, 0x04, 0x0d, 0x06, 0x88, 0xf4,
+ 0x02, 0x85, 0x6f, 0xee, 0xe0, 0x3c, 0x32, 0x61, 0xed, 0xe0, 0x36, 0x44,
+ 0xf2, 0x60, 0x35, 0x42, 0xca, 0x40, 0x6d, 0x61, 0x74, 0x73, 0xf5, 0xe0,
+ 0x36, 0x94, 0x64, 0xe1, 0xe0, 0x3b, 0x1e, 0x2d, 0x72, 0x61, 0x64, 0x69,
+ 0x6f, 0x2d, 0xef, 0xe0, 0x34, 0xa1, 0xec, 0x04, 0x0b, 0xc7, 0x4e, 0xe6,
+ 0x03, 0xca, 0xb2, 0x6d, 0x6f, 0x6f, 0xee, 0xe0, 0x40, 0xfe, 0xe4, 0xe0,
+ 0x31, 0x07, 0xeb, 0x03, 0x12, 0x8d, 0xf5, 0x03, 0x06, 0x84, 0x73, 0x61,
+ 0xee, 0xe0, 0x38, 0x6c, 0xe9, 0xe0, 0x38, 0x68, 0xe2, 0xe0, 0x24, 0xd5,
+ 0xef, 0x02, 0x84, 0xee, 0xe0, 0x32, 0x3a, 0x64, 0x61, 0xf4, 0xe0, 0x24,
+ 0x65, 0x61, 0x74, 0xe1, 0xe0, 0x29, 0x5b, 0xe9, 0x06, 0x05, 0x04, 0xe0,
+ 0x3f, 0x5d, 0x70, 0xe8, 0xe0, 0x2d, 0xbd, 0xe4, 0xe0, 0x2d, 0xb8, 0x62,
+ 0x61, 0xf2, 0xc8, 0xe5, 0xe7, 0x05, 0x06, 0xe0, 0x34, 0xf1, 0xe9, 0x60,
+ 0x37, 0xb4, 0xc6, 0xd7, 0x65, 0x62, 0xef, 0xcc, 0x73, 0x65, 0x62, 0x61,
+ 0x72, 0xf5, 0xe0, 0x3b, 0xc5, 0xe4, 0x02, 0x83, 0xf3, 0xc5, 0xa6, 0x61,
+ 0x6e, 0xef, 0xe0, 0x3b, 0x8e, 0xe3, 0x03, 0x04, 0x9a, 0xeb, 0xe0, 0x35,
+ 0xdd, 0x68, 0xe9, 0x04, 0x08, 0x05, 0x83, 0x72, 0x6f, 0x67, 0x61, 0x74,
+ 0xe1, 0xdb, 0x3b, 0x6f, 0xea, 0xe0, 0x3d, 0x21, 0xee, 0xc3, 0xc7, 0xea,
+ 0xe0, 0x3a, 0x2b, 0xe3, 0xe0, 0x30, 0x49, 0xe2, 0x05, 0x04, 0xe0, 0x34,
+ 0x90, 0xed, 0xe0, 0x34, 0x88, 0x69, 0x6b, 0xe9, 0xe0, 0x3e, 0x79, 0xe7,
+ 0x27, 0x30, 0x04, 0x1b, 0x04, 0x0b, 0x0b, 0x40, 0x51, 0x40, 0x6f, 0x40,
+ 0xbe, 0x42, 0x40, 0x0d, 0x15, 0x40, 0x5a, 0x1d, 0x40, 0xa4, 0x0c, 0x08,
+ 0x40, 0x74, 0x1c, 0x04, 0x0b, 0x40, 0x85, 0x05, 0x58, 0x5d, 0x56, 0x19,
+ 0x49, 0x50, 0xa1, 0x1f, 0xc3, 0x02, 0x9a, 0x7c, 0x6e, 0x73, 0x74, 0x69,
+ 0xe7, 0x02, 0x88, 0x6c, 0x69, 0x65, 0x66, 0x65, 0xf2, 0xd5, 0xdb, 0x62,
+ 0x65, 0x73, 0x74, 0x65, 0x6c, 0x6c, 0xe5, 0xd5, 0xd1, 0xe1, 0x04, 0x06,
+ 0xc6, 0x6f, 0x1f, 0x45, 0x4b, 0xe7, 0xc6, 0x22, 0x6c, 0x73, 0x1f, 0xc3,
+ 0xe0, 0x39, 0x9c, 0xfa, 0xe0, 0x2c, 0x40, 0xf9, 0x05, 0x07, 0xe0, 0x40,
+ 0x37, 0x6f, 0x6b, 0x75, 0xf4, 0xe0, 0x35, 0x58, 0x65, 0x6f, 0x6e, 0xe7,
+ 0x05, 0x60, 0x23, 0x12, 0x85, 0x67, 0xe9, 0xe0, 0x28, 0x96, 0xf8, 0xe0,
+ 0x2c, 0x21, 0xf7, 0x04, 0xe0, 0x40, 0x20, 0x61, 0x6e, 0x67, 0xea, 0xda,
+ 0xbc, 0x76, 0xae, 0x04, 0xe0, 0x3f, 0xcd, 0xe1, 0x60, 0x3e, 0x02, 0xbc,
+ 0xf5, 0x12, 0x09, 0x0b, 0x04, 0x0b, 0x0b, 0x04, 0x05, 0x4d, 0x92, 0x4d,
+ 0x3a, 0x5b, 0x9f, 0x43, 0x2e, 0xc6, 0x2c, 0x73, 0x68, 0x69, 0x6b, 0x61,
+ 0xed, 0xe0, 0x3a, 0xd5, 0x6f, 0x76, 0x64, 0x61, 0x67, 0x65, 0x61, 0x69,
+ 0xe4, 0xd9, 0x62, 0xec, 0xe0, 0x2f, 0xb2, 0xea, 0x03, 0xc3, 0x2c, 0x61,
+ 0x72, 0x61, 0xf4, 0xe0, 0x3e, 0x56, 0xe9, 0x02, 0x84, 0x74, 0xe1, 0xdd,
+ 0x11, 0xe4, 0xe0, 0x3e, 0x13, 0xe3, 0xe0, 0x33, 0x71, 0x62, 0xae, 0xe0,
+ 0x2d, 0x32, 0x61, 0x6d, 0x2e, 0xe7, 0xe0, 0x3e, 0x77, 0xf3, 0x07, 0x06,
+ 0x60, 0x27, 0xce, 0xd7, 0xe2, 0x6a, 0x2e, 0xe2, 0xe0, 0x3c, 0x3b, 0xae,
+ 0x10, 0x05, 0x05, 0x0d, 0x04, 0x0e, 0x06, 0x04, 0x0a, 0x06, 0x04, 0x60,
+ 0x36, 0x73, 0xc3, 0xb5, 0xf6, 0x24, 0xe0, 0x38, 0xcb, 0xf4, 0x60, 0x33,
+ 0x75, 0x84, 0xf3, 0x05, 0x15, 0xe0, 0x37, 0x4c, 0x76, 0x61, 0x6c, 0xe2,
+ 0xe0, 0x38, 0x64, 0xf2, 0xe0, 0x37, 0xdc, 0xef, 0x05, 0x04, 0xe0, 0x37,
+ 0xcf, 0xf3, 0xe0, 0x36, 0x9f, 0xe6, 0xe0, 0x3d, 0x91, 0xee, 0x60, 0x37,
+ 0x47, 0xc0, 0x83, 0xed, 0xe0, 0x33, 0x4f, 0x6a, 0x61, 0x6e, 0x2d, 0x6d,
+ 0x61, 0xf9, 0xe0, 0x2f, 0x30, 0xe8, 0x60, 0x33, 0x3d, 0xc4, 0x79, 0xe6,
+ 0xe0, 0x33, 0x37, 0xe1, 0x04, 0xe0, 0x38, 0xa4, 0xe8, 0xe0, 0x3d, 0x6a,
+ 0xf2, 0x0b, 0x06, 0x04, 0x40, 0x40, 0x13, 0x0e, 0x3d, 0xe0, 0x3e, 0x9b,
+ 0xf5, 0x60, 0x3d, 0x59, 0xc0, 0x44, 0xf0, 0xe0, 0x32, 0xe4, 0xef, 0x06,
+ 0x06, 0x13, 0x06, 0x0b, 0x8c, 0x7a, 0x6e, 0xf9, 0xe0, 0x3b, 0x2a, 0xf5,
+ 0x02, 0x86, 0xf0, 0x60, 0x3b, 0xf6, 0xc3, 0x32, 0x6e, 0x64, 0x68, 0x61,
+ 0x6e, 0x64, 0xec, 0xe0, 0x2e, 0xdf, 0x73, 0x73, 0xe5, 0xe0, 0x3a, 0x17,
+ 0xee, 0x04, 0xe0, 0x37, 0x8e, 0x64, 0x61, 0xf2, 0xe0, 0x3a, 0x10, 0x6b,
+ 0x73, 0x2d, 0x74, 0xe8, 0x04, 0xe0, 0x2e, 0x1c, 0xe9, 0xd4, 0x32, 0xe3,
+ 0xd8, 0x36, 0xe9, 0x03, 0x08, 0x84, 0x77, 0x2e, 0x67, 0x6f, 0xf6, 0xe0,
+ 0x39, 0xad, 0xf0, 0xe0, 0x3d, 0x2e, 0xed, 0xca, 0x6f, 0xe5, 0x04, 0x05,
+ 0xc4, 0xa2, 0x74, 0xe1, 0xe0, 0x30, 0x60, 0xe1, 0xe0, 0x2b, 0x4b, 0xe1,
+ 0x08, 0x0c, 0x09, 0x0f, 0x0b, 0xe0, 0x28, 0xd3, 0x79, 0x6a, 0x61, 0x79,
+ 0x6c, 0x65, 0x61, 0x67, 0xf5, 0xe0, 0x3d, 0x5f, 0xf4, 0x04, 0xe0, 0x2e,
+ 0x86, 0xe9, 0xe0, 0x3c, 0x01, 0x70, 0xe8, 0x02, 0x84, 0x6f, 0xf8, 0xc3,
+ 0xa9, 0x69, 0xe3, 0x60, 0x27, 0x76, 0xd4, 0x7e, 0xee, 0x05, 0x60, 0x3c,
+ 0xbc, 0x81, 0x76, 0xe9, 0xe0, 0x37, 0xe7, 0x6a, 0x65, 0xf7, 0xc2, 0x55,
+ 0xae, 0x60, 0x37, 0xb5, 0x44, 0x90, 0x40, 0x57, 0xc1, 0xc8, 0xef, 0x10,
+ 0x40, 0xfc, 0x19, 0x2d, 0x13, 0x0f, 0x06, 0x1c, 0x0e, 0x19, 0x0a, 0x06,
+ 0x0c, 0x0d, 0xba, 0xf6, 0x06, 0x03, 0x04, 0xe0, 0x3e, 0x72, 0xf4, 0xc3,
+ 0xe8, 0x65, 0xf2, 0xce, 0x70, 0xae, 0x1f, 0x07, 0x06, 0x0c, 0x13, 0x0d,
+ 0x0d, 0x14, 0x11, 0x0d, 0x0c, 0x04, 0x0d, 0x0a, 0x0e, 0x12, 0x50, 0xbc,
+ 0x4a, 0xcb, 0x04, 0x3b, 0x40, 0x47, 0x59, 0xff, 0x44, 0x94, 0x17, 0xc0,
+ 0x48, 0xf6, 0x60, 0x31, 0xe9, 0x4a, 0xaa, 0xba, 0xf5, 0x60, 0x3b, 0x91,
+ 0xc0, 0xbf, 0xf4, 0x60, 0x3b, 0x81, 0x1e, 0x03, 0x0f, 0x40, 0x82, 0x3c,
+ 0x32, 0x9f, 0xf3, 0x50, 0xd1, 0x60, 0x22, 0xa4, 0x42, 0xb0, 0x45, 0x30,
+ 0x27, 0x1a, 0x03, 0x15, 0x40, 0x90, 0x25, 0xc1, 0xd4, 0xf0, 0x60, 0x3b,
+ 0x42, 0x27, 0x03, 0x17, 0x18, 0x40, 0x79, 0x40, 0x6e, 0x9f, 0xee, 0x08,
+ 0x60, 0x3c, 0x6d, 0x40, 0xb7, 0xc0, 0xeb, 0xe3, 0xe0, 0x2c, 0x36, 0xed,
+ 0x60, 0x39, 0xdd, 0x41, 0x68, 0x03, 0x07, 0x03, 0x17, 0x18, 0x40, 0x90,
+ 0x25, 0x17, 0x1b, 0x1f, 0x3a, 0xc1, 0x49, 0xec, 0x60, 0x31, 0x8f, 0x41,
+ 0xa5, 0x46, 0x95, 0x41, 0x72, 0x03, 0x2f, 0x40, 0x79, 0x17, 0xc0, 0x57,
+ 0xeb, 0x60, 0x3b, 0x20, 0x03, 0x1e, 0x39, 0x40, 0x7c, 0x40, 0x6c, 0xc1,
+ 0x83, 0xe9, 0x5c, 0x5f, 0x5e, 0xbe, 0x1a, 0x40, 0x91, 0x40, 0x53, 0x1b,
+ 0x9f, 0xe8, 0xe0, 0x3b, 0x14, 0xe7, 0x60, 0x3a, 0xe6, 0x40, 0x44, 0x15,
+ 0x1e, 0x40, 0xae, 0x1b, 0x1f, 0xba, 0xe5, 0x60, 0x31, 0x54, 0x4a, 0x57,
+ 0x40, 0x53, 0xc1, 0xbd, 0xe3, 0x60, 0x35, 0x9f, 0x45, 0x6e, 0x03, 0x03,
+ 0x15, 0x40, 0xb5, 0x40, 0x51, 0xba, 0xe2, 0x60, 0x32, 0x43, 0x40, 0x9e,
+ 0x47, 0xe0, 0x1d, 0x0a, 0x17, 0x1b, 0x40, 0x79, 0x17, 0x40, 0x57, 0x9f,
+ 0xe1, 0x60, 0x31, 0x2a, 0x41, 0x07, 0x48, 0x9b, 0x0a, 0x1a, 0x40, 0xe4,
+ 0x1b, 0xc0, 0x59, 0xf5, 0x02, 0x90, 0x76, 0xae, 0x0a, 0x60, 0x31, 0x13,
+ 0x06, 0x1a, 0x40, 0xf1, 0xc7, 0x6d, 0xed, 0xe0, 0x3a, 0xd2, 0x70, 0x69,
+ 0xec, 0xe0, 0x20, 0xe4, 0xf4, 0x08, 0x05, 0x08, 0x04, 0x05, 0xe0, 0x3d,
+ 0x4c, 0x73, 0xf5, 0xe0, 0x37, 0x23, 0x70, 0x61, 0x6e, 0x74, 0x68, 0xe5,
+ 0xcc, 0xe5, 0xef, 0xe0, 0x21, 0x18, 0x65, 0x6d, 0xe2, 0xc5, 0x36, 0x64,
+ 0x6e, 0x73, 0xae, 0x04, 0xe0, 0x3a, 0x20, 0xe3, 0x60, 0x3c, 0x5f, 0xc0,
+ 0xaf, 0xf3, 0x04, 0x05, 0xca, 0xea, 0x68, 0xe9, 0xe0, 0x35, 0x61, 0xe5,
+ 0x04, 0xe0, 0x34, 0x43, 0xee, 0xe0, 0x38, 0x5c, 0xf2, 0x02, 0x87, 0x6c,
+ 0x69, 0x63, 0xe5, 0xe0, 0x37, 0xe1, 0x69, 0xfa, 0xe0, 0x36, 0x08, 0xf0,
+ 0x4a, 0xd1, 0xe0, 0x32, 0x4a, 0xef, 0x05, 0x10, 0xe0, 0x3d, 0x00, 0xe7,
+ 0x04, 0xe0, 0x3d, 0x0b, 0x6c, 0xe5, 0x06, 0x42, 0x37, 0xe0, 0x3a, 0xcc,
+ 0xe3, 0xcc, 0x35, 0x64, 0x79, 0xe5, 0xe0, 0x2a, 0x5c, 0xee, 0x06, 0x4a,
+ 0xa9, 0xe0, 0x21, 0xdf, 0x6f, 0x68, 0x65, 0xae, 0xe0, 0x33, 0x5e, 0xec,
+ 0x05, 0x0a, 0xe0, 0x3a, 0xf4, 0xe6, 0x04, 0xe0, 0x3c, 0xe1, 0x66, 0x61,
+ 0xee, 0xc1, 0xd3, 0xe4, 0x04, 0xe0, 0x3c, 0xd7, 0x70, 0xef, 0xcb, 0xcf,
+ 0xeb, 0x03, 0xca, 0x85, 0x61, 0x73, 0xe5, 0xe0, 0x2d, 0xf9, 0x6a, 0x6f,
+ 0x6d, 0xe5, 0xd7, 0x3e, 0xe9, 0x02, 0x83, 0xf0, 0xd8, 0x25, 0x61, 0x6e,
+ 0xe9, 0xe0, 0x32, 0xc3, 0xe4, 0x02, 0x84, 0xef, 0xe0, 0x33, 0x49, 0x61,
+ 0x64, 0xe4, 0xe0, 0x3a, 0x23, 0xe2, 0x02, 0x84, 0xef, 0xe0, 0x31, 0x86,
+ 0xae, 0x11, 0x04, 0x07, 0x04, 0x04, 0x04, 0x06, 0x5f, 0x1a, 0x4a, 0xb9,
+ 0x47, 0x3c, 0x48, 0x58, 0xc0, 0xc0, 0xf3, 0xe0, 0x38, 0x62, 0xf0, 0x60,
+ 0x39, 0xd3, 0x40, 0xbf, 0xbc, 0xed, 0xe0, 0x34, 0x72, 0xe8, 0xe0, 0x3a,
+ 0xfd, 0xe7, 0xe0, 0x3a, 0x6c, 0xe5, 0x60, 0x30, 0x11, 0xc9, 0xac, 0xe3,
+ 0xe0, 0x39, 0xd1, 0xae, 0x0f, 0x04, 0x06, 0x4f, 0xf6, 0x5a, 0x18, 0x4b,
+ 0x5d, 0x03, 0x44, 0x01, 0x37, 0xc0, 0xb2, 0xf5, 0xe0, 0x3c, 0x5e, 0xe9,
+ 0x60, 0x39, 0xbc, 0xc0, 0x8e, 0x64, 0x79, 0xee, 0xd1, 0xfe, 0xee, 0x04,
+ 0xe0, 0x3c, 0x4c, 0x69, 0x65, 0x7a, 0x6e, 0xef, 0xe0, 0x37, 0x04, 0xed,
+ 0x0b, 0x05, 0x4d, 0xe0, 0x60, 0x26, 0x40, 0x46, 0x3e, 0xc1, 0xd5, 0x69,
+ 0xee, 0xe0, 0x2c, 0x99, 0xe2, 0xe0, 0x39, 0x4f, 0xec, 0x0a, 0x05, 0x29,
+ 0x15, 0x08, 0x40, 0xca, 0xe0, 0x3b, 0x0f, 0x75, 0xe7, 0xe0, 0x37, 0x88,
+ 0xef, 0x04, 0x05, 0x05, 0x84, 0x70, 0xf0, 0xe0, 0x2b, 0xe3, 0x6f, 0xed,
+ 0xe0, 0x32, 0xcf, 0xe7, 0xe0, 0x2e, 0xda, 0xe2, 0x04, 0xe0, 0x3a, 0x32,
+ 0x61, 0xec, 0x04, 0xe0, 0x3c, 0x01, 0xae, 0x06, 0x60, 0x31, 0x09, 0xc9,
+ 0x36, 0xf3, 0xe0, 0x3a, 0x38, 0xe9, 0x03, 0x07, 0x86, 0x77, 0x69, 0x63,
+ 0xe5, 0xe0, 0x29, 0xbc, 0x74, 0x63, 0xe8, 0xe0, 0x25, 0x3d, 0xe4, 0xe0,
+ 0x2b, 0xa7, 0xe5, 0x04, 0xe0, 0x3b, 0xdc, 0xe5, 0xc0, 0xa8, 0xe1, 0xe0,
+ 0x33, 0xdb, 0xea, 0x03, 0x05, 0x83, 0x1f, 0x43, 0xf8, 0xc1, 0xae, 0xef,
+ 0xc1, 0xab, 0xe5, 0x04, 0x08, 0xc2, 0x24, 0xf2, 0x03, 0xc7, 0x47, 0xe4,
+ 0xe0, 0x23, 0x98, 0xed, 0xe0, 0x36, 0xde, 0xe9, 0x0f, 0x06, 0x40, 0x42,
+ 0x07, 0x16, 0x0f, 0x05, 0x0c, 0x0b, 0x48, 0x51, 0xe0, 0x32, 0xc7, 0xf6,
+ 0x60, 0x25, 0x83, 0xc9, 0xa8, 0xf4, 0x05, 0x06, 0x06, 0x13, 0x85, 0x70,
+ 0x61, 0x67, 0xe5, 0xc9, 0x6a, 0x6c, 0x61, 0xe2, 0xe0, 0x3a, 0x41, 0x68,
+ 0x75, 0xe2, 0x06, 0x60, 0x31, 0x04, 0xc9, 0x31, 0x70, 0x72, 0x65, 0x76,
+ 0x69, 0x65, 0xf7, 0xe0, 0x30, 0x95, 0x61, 0x70, 0xf0, 0xc9, 0x4c, 0xad,
+ 0x02, 0x86, 0x72, 0x65, 0x70, 0xef, 0xd5, 0x3a, 0x70, 0x61, 0x67, 0x65,
+ 0x73, 0x2e, 0x72, 0x69, 0x74, 0x2e, 0x65, 0xe4, 0xe0, 0x3a, 0x7b, 0x72,
+ 0xec, 0x60, 0x24, 0xed, 0xcd, 0x2d, 0xee, 0x02, 0x8e, 0xef, 0x02, 0x85,
+ 0x7a, 0xe1, 0xe0, 0x36, 0x31, 0x77, 0x61, 0xee, 0xe0, 0x36, 0x2b, 0x61,
+ 0xee, 0xe0, 0x31, 0xdc, 0x6c, 0x64, 0x65, 0x73, 0xeb, 0x04, 0xe0, 0x33,
+ 0x8e, 0x1f, 0x43, 0xe5, 0xe0, 0x33, 0x8c, 0x69, 0xfa, 0xe0, 0x32, 0xf6,
+ 0xe6, 0x04, 0xe0, 0x37, 0xd7, 0x75, 0xae, 0x60, 0x31, 0xbf, 0xc7, 0x6b,
+ 0x65, 0x68, 0x74, 0x61, 0x76, 0x75, 0x6f, 0xe1, 0xe0, 0x2b, 0x1a, 0x61,
+ 0xec, 0xd1, 0x84, 0xe8, 0x04, 0xe0, 0x3b, 0x0f, 0x2e, 0x73, 0x72, 0x76,
+ 0xae, 0xdb, 0xe6, 0xe7, 0x4b, 0x56, 0x60, 0x2a, 0x4b, 0xc5, 0x66, 0xe5,
+ 0x0d, 0x08, 0x0c, 0x34, 0x07, 0x09, 0x60, 0x38, 0x44, 0x40, 0x5c, 0xc1,
+ 0xfa, 0xf4, 0x03, 0xc4, 0x5f, 0xf3, 0xe0, 0x24, 0x11, 0xef, 0x04, 0xe0,
+ 0x39, 0x40, 0x72, 0xe7, 0x60, 0x38, 0xa4, 0xc0, 0x81, 0xee, 0x04, 0x13,
+ 0x09, 0x84, 0xf4, 0x08, 0x60, 0x24, 0xac, 0x47, 0xf6, 0xce, 0x2e, 0x6c,
+ 0x65, 0x6e, 0x74, 0x61, 0x70, 0xe9, 0xe0, 0x39, 0x63, 0xef, 0x04, 0xe0,
+ 0x33, 0xab, 0xf6, 0xe0, 0x33, 0xaa, 0x6b, 0xe1, 0xc2, 0x1c, 0xae, 0x08,
+ 0x60, 0x2c, 0x50, 0x45, 0x10, 0xc7, 0xcb, 0xee, 0x60, 0x37, 0x8d, 0xc0,
+ 0x5c, 0x69, 0x73, 0x65, 0xe9, 0xe0, 0x34, 0x1d, 0x68, 0x69, 0x72, 0x6e,
+ 0x2e, 0xee, 0xe0, 0x2a, 0xf7, 0x65, 0xeb, 0x02, 0x86, 0x67, 0x61, 0x6c,
+ 0xe1, 0xdc, 0x04, 0xae, 0xe0, 0x33, 0x4e, 0xe4, 0x09, 0x07, 0x60, 0x26,
+ 0x74, 0x52, 0x83, 0xc1, 0x84, 0x79, 0x6e, 0x69, 0xe1, 0xe0, 0x28, 0x4c,
+ 0xe1, 0x04, 0xe0, 0x28, 0x44, 0x6e, 0x73, 0xeb, 0xe0, 0x28, 0x41, 0xe3,
+ 0xe0, 0x38, 0x73, 0xe2, 0x06, 0x60, 0x3a, 0x02, 0xc0, 0x63, 0xe9, 0xe0,
+ 0x37, 0x9e, 0xe1, 0x10, 0x08, 0x0c, 0x06, 0x0f, 0x32, 0x15, 0x60, 0x33,
+ 0xb4, 0x43, 0xa2, 0x40, 0x9a, 0xc1, 0xf0, 0xf5, 0x03, 0xc0, 0xb4, 0xec,
+ 0xe0, 0x2a, 0x3e, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x64, 0x65, 0xf6,
+ 0xe0, 0x3a, 0x3b, 0x72, 0x64, 0xe5, 0xe0, 0x38, 0xb5, 0x6e, 0xe7, 0x02,
+ 0x83, 0xf7, 0xd4, 0xcd, 0x61, 0x76, 0x69, 0x69, 0xeb, 0xe0, 0x33, 0x7b,
+ 0xed, 0x06, 0x05, 0x1f, 0xe0, 0x34, 0x21, 0x76, 0xe9, 0xe0, 0x2f, 0x16,
+ 0xe5, 0x07, 0x06, 0x4e, 0x03, 0xe0, 0x2c, 0x0a, 0xf3, 0x60, 0x38, 0xc6,
+ 0xc1, 0x4c, 0xad, 0x02, 0x88, 0x73, 0x65, 0x72, 0x76, 0x65, 0xf2, 0xd5,
+ 0xfb, 0x68, 0x6f, 0xf3, 0xe0, 0x2f, 0xce, 0x61, 0x67, 0x6f, 0xf2, 0xe0,
+ 0x34, 0x26, 0xec, 0x05, 0x04, 0xe0, 0x39, 0xeb, 0xf3, 0xe0, 0x33, 0x3f,
+ 0xec, 0x06, 0x53, 0x1f, 0xe0, 0x24, 0xf0, 0xf5, 0xe0, 0x37, 0xf3, 0xe9,
+ 0xe0, 0x29, 0xdb, 0x31, 0xb2, 0xe0, 0x38, 0x35, 0xae, 0x06, 0x60, 0x27,
+ 0xd1, 0xd1, 0xfd, 0x76, 0x62, 0x72, 0x70, 0x6c, 0x73, 0xe2, 0xcd, 0x2f,
+ 0xe6, 0x1e, 0x08, 0x12, 0x01, 0x04, 0x41, 0xa8, 0x0e, 0x03, 0x41, 0xde,
+ 0x40, 0xc8, 0x0d, 0x0d, 0x40, 0x9d, 0x04, 0x11, 0x40, 0xf2, 0x1e, 0x40,
+ 0x70, 0x04, 0x08, 0x40, 0xa3, 0xc6, 0x8b, 0x1f, 0x43, 0x78, 0x72, 0xe4,
+ 0xe0, 0x37, 0xba, 0xf9, 0x05, 0x06, 0xe0, 0x37, 0x28, 0x72, 0x65, 0xf3,
+ 0xe0, 0x31, 0xea, 0x6c, 0x6b, 0x65, 0xf3, 0xc4, 0x52, 0x76, 0xe7, 0xe0,
+ 0x37, 0x36, 0xf5, 0x0c, 0x31, 0x0b, 0x26, 0x0f, 0x31, 0x40, 0x59, 0x40,
+ 0x6d, 0x19, 0x8b, 0xf4, 0x05, 0x17, 0x06, 0x04, 0x85, 0x75, 0x72, 0xe5,
+ 0x04, 0x05, 0xc7, 0xe5, 0x6d, 0x61, 0x69, 0xec, 0x85, 0x68, 0x6f, 0x73,
+ 0x74, 0x69, 0x6e, 0x67, 0xae, 0xe0, 0x38, 0x8c, 0x74, 0x73, 0xf5, 0xe0,
+ 0x37, 0x2b, 0x73, 0xf5, 0xdd, 0x1b, 0x62, 0xef, 0xe0, 0x36, 0xb1, 0x61,
+ 0xe2, 0xe0, 0x2d, 0x94, 0xf3, 0x06, 0x60, 0x2f, 0xf9, 0xc2, 0x9c, 0xf3,
+ 0xe0, 0x32, 0xb1, 0xf2, 0x03, 0x18, 0x85, 0xf5, 0x05, 0x0c, 0xe0, 0x32,
+ 0xfa, 0x6b, 0x61, 0x77, 0x61, 0x2e, 0x6d, 0x69, 0x79, 0xe1, 0xe0, 0x2d,
+ 0x36, 0x64, 0x6f, 0xee, 0xe0, 0x33, 0x29, 0x6e, 0xe9, 0xe0, 0x36, 0x04,
+ 0x61, 0xee, 0xe0, 0x2d, 0x09, 0xef, 0x02, 0x86, 0x73, 0x73, 0xeb, 0xe0,
+ 0x30, 0x37, 0x69, 0x73, 0xeb, 0xe0, 0x32, 0x16, 0xee, 0x08, 0x06, 0x0b,
+ 0x60, 0x36, 0x52, 0xc2, 0x9f, 0x6e, 0x65, 0xec, 0xe0, 0x2c, 0xb2, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x66, 0xee, 0xc3, 0xd2, 0xe1, 0x03,
+ 0x06, 0x88, 0x68, 0x61, 0x73, 0x68, 0xe9, 0xbb, 0x67, 0x61, 0x74, 0x61,
+ 0xae, 0xe0, 0x2d, 0x41, 0x62, 0x61, 0xf3, 0xdb, 0xf1, 0xeb, 0x03, 0xc0,
+ 0x49, 0xf5, 0x0a, 0x04, 0x10, 0x05, 0x09, 0x07, 0x07, 0xe0, 0x2d, 0xd5,
+ 0x79, 0xe1, 0xc8, 0x18, 0xf3, 0x04, 0xe0, 0x30, 0xeb, 0x68, 0x69, 0x6d,
+ 0x61, 0xae, 0x60, 0x32, 0xcb, 0x43, 0xeb, 0x89, 0x72, 0xef, 0xe0, 0x2d,
+ 0xe8, 0x6d, 0x69, 0x74, 0x73, 0x75, 0xae, 0xe0, 0x2d, 0x11, 0x69, 0xae,
+ 0x4c, 0x8d, 0xe0, 0x2a, 0x1c, 0x64, 0x6f, 0x6d, 0xe9, 0xe0, 0x2d, 0x86,
+ 0x63, 0x68, 0xe9, 0x04, 0xe0, 0x20, 0xdc, 0x79, 0x61, 0x6d, 0xe1, 0xe0,
+ 0x29, 0xb8, 0xe1, 0x02, 0x85, 0x79, 0xe1, 0xe0, 0x2c, 0xd1, 0xe7, 0xe0,
+ 0x2c, 0xd5, 0x6a, 0xe9, 0x0c, 0x09, 0x05, 0x18, 0x04, 0x06, 0x0f, 0x14,
+ 0x06, 0xe0, 0x2d, 0x4e, 0x79, 0x6f, 0x73, 0x68, 0x69, 0x64, 0xe1, 0xce,
+ 0xb2, 0x74, 0xf3, 0xe0, 0x37, 0x1e, 0xf3, 0x02, 0x86, 0x68, 0x69, 0xf2,
+ 0xe0, 0x27, 0xe0, 0xe1, 0x02, 0x88, 0x77, 0x61, 0xae, 0x40, 0x5f, 0xe0,
+ 0x32, 0xad, 0x74, 0xef, 0xd2, 0xc8, 0xef, 0xe0, 0x2e, 0xed, 0x6e, 0x6f,
+ 0x6d, 0x69, 0xf9, 0xac, 0x6d, 0xe9, 0x02, 0x85, 0x6e, 0xef, 0xe0, 0x2c,
+ 0x86, 0xae, 0x60, 0x2d, 0x66, 0xc7, 0x6b, 0x6b, 0x61, 0x77, 0xe1, 0x02,
+ 0x89, 0x67, 0x75, 0x63, 0x68, 0x69, 0x6b, 0xef, 0xce, 0x6d, 0xae, 0x5a,
+ 0xfb, 0xd2, 0x5e, 0x69, 0x64, 0x65, 0xf2, 0xdb, 0xf2, 0x65, 0x64, 0xe1,
+ 0xe0, 0x2d, 0x4b, 0xe5, 0x05, 0x0e, 0xe0, 0x32, 0x88, 0x74, 0x74, 0x65,
+ 0x72, 0x74, 0x64, 0x61, 0x73, 0x6e, 0x65, 0x74, 0xfa, 0xd3, 0x68, 0x66,
+ 0x75, 0xeb, 0xce, 0x42, 0x64, 0x61, 0x69, 0x2e, 0x69, 0x77, 0x61, 0xf4,
+ 0xe0, 0x32, 0xa1, 0x63, 0x68, 0x75, 0xae, 0x04, 0xe0, 0x2c, 0x1c, 0x74,
+ 0xef, 0x60, 0x31, 0xa3, 0xc2, 0xaa, 0xf4, 0x04, 0xe0, 0x36, 0x39, 0x70,
+ 0x61, 0x63, 0x63, 0x65, 0x73, 0xf3, 0xd3, 0xcc, 0xf3, 0xd7, 0xf6, 0xf2,
+ 0x11, 0x0a, 0x08, 0x40, 0xd0, 0x1e, 0x40, 0x5f, 0x40, 0x41, 0x60, 0x23,
+ 0x3f, 0x50, 0x3d, 0xc2, 0xa2, 0x1f, 0xc3, 0x02, 0x82, 0xf8, 0x97, 0xe6,
+ 0xe0, 0x2c, 0x74, 0x75, 0x73, 0x6b, 0x79, 0x2e, 0xe4, 0xd8, 0xd3, 0xef,
+ 0x09, 0x04, 0x09, 0x06, 0x40, 0xaa, 0xe0, 0x29, 0xa4, 0xf9, 0xe0, 0x30,
+ 0xf2, 0xf3, 0x04, 0xe0, 0x30, 0xe9, 0x69, 0xee, 0xd3, 0xc9, 0x6e, 0x74,
+ 0xe9, 0xe0, 0x23, 0x4b, 0xed, 0x02, 0x89, 0xae, 0x04, 0xe0, 0x24, 0xcb,
+ 0xe8, 0xe0, 0x35, 0xe3, 0xad, 0x15, 0x09, 0x06, 0x04, 0x05, 0x06, 0x04,
+ 0x06, 0x07, 0x16, 0x10, 0x05, 0x09, 0x04, 0x04, 0x04, 0x05, 0x07, 0xe0,
+ 0x20, 0xbf, 0xf7, 0x42, 0xde, 0x56, 0x01, 0x51, 0xa0, 0xc2, 0x99, 0xf6,
+ 0x60, 0x2a, 0x76, 0xc2, 0x74, 0xf5, 0xe0, 0x2c, 0xe4, 0xf4, 0x4d, 0xd5,
+ 0xdf, 0x1b, 0xf3, 0x50, 0x56, 0xe0, 0x25, 0x32, 0xf2, 0xe0, 0x2c, 0xfa,
+ 0xf0, 0x60, 0x2a, 0x5d, 0xcb, 0xba, 0xef, 0x18, 0x60, 0x32, 0xb2, 0xc3,
+ 0x47, 0xee, 0x0d, 0x04, 0x42, 0x9e, 0x41, 0xff, 0x4b, 0x91, 0x5e, 0xc2,
+ 0x46, 0x70, 0x9b, 0xea, 0xe0, 0x36, 0xf8, 0xe8, 0xe0, 0x36, 0xf4, 0xed,
+ 0x4d, 0xa3, 0x53, 0xab, 0x48, 0x63, 0x40, 0x89, 0x42, 0x74, 0x25, 0x48,
+ 0x88, 0xc0, 0x66, 0xeb, 0x58, 0x8a, 0xdd, 0x27, 0xe9, 0x4d, 0x8e, 0x5c,
+ 0x97, 0x45, 0x85, 0xc5, 0x9c, 0xe8, 0xe0, 0x2c, 0xb5, 0xe7, 0xe0, 0x2a,
+ 0x18, 0xe6, 0xe0, 0x2f, 0x99, 0xe4, 0x4f, 0xff, 0xde, 0xc2, 0xe3, 0x60,
+ 0x2a, 0x0b, 0x42, 0x59, 0x9b, 0xe1, 0x08, 0x60, 0x2f, 0x81, 0x42, 0xee,
+ 0xc3, 0x47, 0xfa, 0xe0, 0x36, 0x85, 0xe7, 0x04, 0xe0, 0x30, 0x24, 0xe1,
+ 0xe0, 0x26, 0x2b, 0x69, 0x75, 0x6c, 0xe9, 0x02, 0x81, 0x2d, 0xf6, 0x03,
+ 0x0b, 0x81, 0xe5, 0x03, 0x07, 0x81, 0x6e, 0x65, 0x7a, 0x69, 0xe1, 0x02,
+ 0x81, 0x2d, 0x67, 0x69, 0x75, 0xec, 0xe0, 0x2f, 0xaa, 0xe5, 0x08, 0x07,
+ 0x08, 0x40, 0x42, 0xe0, 0x2e, 0x3a, 0x73, 0x65, 0x6e, 0xe9, 0xe0, 0x31,
+ 0x25, 0x6e, 0x63, 0x68, 0x6b, 0x69, 0xf3, 0xda, 0x24, 0xe5, 0x09, 0x06,
+ 0x07, 0x04, 0x14, 0x0e, 0xe0, 0x36, 0x69, 0x74, 0x6c, 0xf3, 0xe0, 0x34,
+ 0xe2, 0x73, 0x69, 0x74, 0x65, 0xae, 0xd7, 0xe1, 0x6d, 0xf9, 0xcd, 0xd0,
+ 0xe4, 0x02, 0x89, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0xf0, 0xe0, 0x33, 0x5d,
+ 0x64, 0x6e, 0x73, 0xae, 0x57, 0x57, 0xdc, 0x00, 0x62, 0x6f, 0xf8, 0x02,
+ 0x81, 0x2d, 0x6f, 0x73, 0xae, 0x60, 0x35, 0xa3, 0xc0, 0x95, 0x2e, 0xe8,
+ 0xe0, 0x35, 0x9d, 0x64, 0x72, 0xe9, 0xc1, 0xe7, 0xe1, 0x05, 0x2f, 0xe0,
+ 0x2a, 0xe7, 0x6d, 0x65, 0xf2, 0x02, 0x86, 0x63, 0x61, 0x6e, 0xf6, 0xcc,
+ 0x9b, 0xae, 0x04, 0x0c, 0x08, 0x85, 0xf7, 0x02, 0x85, 0x69, 0xeb, 0xe0,
+ 0x35, 0xaa, 0x65, 0xe2, 0xde, 0x69, 0x70, 0x68, 0x6f, 0x74, 0xef, 0xe0,
+ 0x35, 0x87, 0x6d, 0x65, 0xe4, 0xd7, 0x2e, 0xe1, 0x60, 0x32, 0x8d, 0xc3,
+ 0x08, 0x31, 0x2d, 0x64, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0xe4, 0xd7,
+ 0x1f, 0xad, 0x02, 0x95, 0x70, 0x61, 0x72, 0xad, 0x02, 0x82, 0xb2, 0x82,
+ 0x31, 0x2e, 0x62, 0x61, 0x72, 0x65, 0x6d, 0x65, 0x74, 0x61, 0xec, 0xd5,
+ 0x48, 0x31, 0x2e, 0x70, 0x61, 0x61, 0x73, 0x2e, 0x6d, 0x61, 0x73, 0x73,
+ 0x69, 0x76, 0x65, 0x67, 0x72, 0xe9, 0xe0, 0x26, 0xcd, 0xef, 0x0f, 0x07,
+ 0x04, 0x40, 0x86, 0x09, 0x19, 0x55, 0x53, 0x4c, 0xf1, 0x4a, 0xd8, 0xc8,
+ 0x13, 0x75, 0x6e, 0x64, 0xe1, 0xe0, 0x28, 0xc1, 0xf3, 0xe0, 0x30, 0xfd,
+ 0xf2, 0x0b, 0x0c, 0x0b, 0x07, 0x04, 0x13, 0x1c, 0x06, 0xe0, 0x24, 0xfe,
+ 0x75, 0xed, 0x06, 0x60, 0x34, 0x77, 0xc1, 0x4c, 0xfa, 0xe0, 0x24, 0xe0,
+ 0xf4, 0x02, 0x83, 0xe5, 0xc1, 0x3c, 0x61, 0xec, 0xe0, 0x34, 0x12, 0x73,
+ 0xe1, 0x60, 0x2e, 0x93, 0xc4, 0xd9, 0x6d, 0xf3, 0xcb, 0x92, 0xec, 0x02,
+ 0x85, 0x1f, 0x43, 0xec, 0x05, 0x81, 0xe9, 0x02, 0x81, 0x2d, 0x63, 0x65,
+ 0x73, 0xe5, 0xe0, 0x2c, 0xc1, 0xe7, 0x02, 0x90, 0x6f, 0x74, 0x2e, 0xe8,
+ 0x02, 0x83, 0x69, 0xf3, 0x83, 0x65, 0x72, 0x2e, 0x6e, 0xe1, 0xde, 0xdb,
+ 0x65, 0x62, 0x6c, 0x6f, 0x63, 0xeb, 0xe0, 0x34, 0x17, 0xe4, 0x60, 0x33,
+ 0x90, 0xc1, 0xe9, 0xad, 0x05, 0x03, 0x04, 0x06, 0x87, 0x74, 0xe8, 0x8e,
+ 0x73, 0x6f, 0xed, 0x8a, 0x6f, 0x75, 0xf2, 0xe0, 0x24, 0x82, 0x6d, 0x6f,
+ 0x72, 0xe5, 0xe0, 0x31, 0xe2, 0x62, 0x65, 0x74, 0x74, 0x65, 0xf2, 0xe0,
+ 0x31, 0xd9, 0xef, 0x50, 0x96, 0x53, 0x15, 0x4f, 0x06, 0xc2, 0x9f, 0xec,
+ 0x03, 0x04, 0x88, 0xec, 0xe0, 0x2d, 0x96, 0x6b, 0x65, 0x62, 0x69, 0xe2,
+ 0xe0, 0x2d, 0x90, 0x69, 0x6f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0xf2, 0x8c,
+ 0x67, 0xe7, 0xe0, 0x2e, 0x16, 0xee, 0x04, 0x04, 0xdf, 0xa8, 0x77, 0xeb,
+ 0xdd, 0x4c, 0x63, 0xae, 0xd4, 0x59, 0xed, 0x04, 0xe0, 0x35, 0x18, 0xae,
+ 0x60, 0x32, 0xc2, 0x40, 0x6e, 0xc0, 0x43, 0xec, 0x0c, 0x10, 0x0c, 0x0e,
+ 0x2a, 0x13, 0x0c, 0x06, 0x5c, 0x74, 0xd1, 0xea, 0xf9, 0x06, 0x60, 0x2a,
+ 0x11, 0xca, 0xeb, 0x6e, 0x6e, 0x68, 0x6f, 0x73, 0xf4, 0xe0, 0x2e, 0xa7,
+ 0x75, 0x74, 0x74, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0xf7, 0xe0, 0x31, 0x46,
+ 0x74, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x6d, 0x75, 0x6e, 0xe9,
+ 0xd0, 0x58, 0xef, 0x05, 0x03, 0x18, 0xd4, 0xf0, 0xf7, 0xc2, 0x65, 0xf2,
+ 0x08, 0x09, 0x5e, 0xfa, 0x4c, 0xe7, 0xc2, 0x2e, 0xe9, 0x04, 0xe0, 0x27,
+ 0x60, 0xf0, 0xe0, 0x2a, 0xca, 0x65, 0x6e, 0xe3, 0xe0, 0x2d, 0x22, 0xf0,
+ 0x04, 0xe0, 0x34, 0x71, 0xf0, 0xe0, 0x2b, 0x6e, 0xe9, 0x07, 0x08, 0x60,
+ 0x21, 0x10, 0xd1, 0xec, 0x67, 0x68, 0xf4, 0x60, 0x31, 0x72, 0xc0, 0x76,
+ 0xe3, 0xdd, 0x09, 0xe5, 0x02, 0x83, 0xf3, 0xc6, 0x99, 0x6b, 0x6b, 0xe5,
+ 0xe0, 0x24, 0x34, 0x64, 0x72, 0xf6, 0xe0, 0x34, 0x56, 0xe1, 0x06, 0x03,
+ 0x06, 0xe0, 0x32, 0x92, 0xf4, 0xdd, 0xc9, 0x70, 0x2e, 0xe9, 0xe0, 0x20,
+ 0x02, 0x6b, 0x73, 0x74, 0xe1, 0xe0, 0x2f, 0xcc, 0xeb, 0xe0, 0x22, 0x76,
+ 0xea, 0x07, 0x04, 0x60, 0x20, 0x5c, 0xd4, 0x07, 0xe5, 0xe0, 0x28, 0x3b,
+ 0x61, 0xec, 0xe0, 0x28, 0x40, 0xe9, 0x0c, 0x0e, 0x06, 0x40, 0x5b, 0x22,
+ 0x2c, 0x04, 0x09, 0xe0, 0x33, 0x87, 0xf4, 0x05, 0x04, 0xe0, 0x34, 0x47,
+ 0xee, 0xe0, 0x2c, 0x4c, 0xea, 0xe0, 0x24, 0x39, 0x73, 0xe8, 0x5e, 0x1d,
+ 0xd6, 0x24, 0xf2, 0x02, 0x9d, 0xed, 0x02, 0x85, 0x64, 0xe1, 0xe0, 0x31,
+ 0xef, 0xae, 0x0e, 0x60, 0x28, 0xbe, 0x40, 0x87, 0x46, 0xfa, 0x42, 0x0e,
+ 0x40, 0x51, 0xc1, 0x0b, 0xee, 0x60, 0x28, 0xc1, 0xc8, 0x3f, 0xe5, 0x07,
+ 0x1f, 0x0d, 0x5d, 0x22, 0xd6, 0xc7, 0xf7, 0x02, 0x83, 0xe5, 0xd0, 0x0b,
+ 0x61, 0x6c, 0xec, 0x02, 0x8a, 0x65, 0x64, 0x72, 0x65, 0x70, 0x6c, 0x69,
+ 0xf4, 0xda, 0x3b, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0xf9, 0xdd,
+ 0x65, 0xee, 0x02, 0x84, 0xfa, 0xe0, 0x2c, 0x59, 0x65, 0x74, 0x2e, 0xe3,
+ 0xdb, 0xfc, 0x62, 0x61, 0x73, 0xe5, 0xe0, 0x32, 0xab, 0xee, 0x03, 0x06,
+ 0x8e, 0xee, 0x60, 0x27, 0xb5, 0xc2, 0xf4, 0xe1, 0x04, 0xe0, 0x31, 0x31,
+ 0x6e, 0xe3, 0x04, 0xe0, 0x32, 0x0f, 0xe9, 0xcc, 0xa5, 0xae, 0x05, 0x43,
+ 0xee, 0xcd, 0x5a, 0xe3, 0xe0, 0x33, 0x29, 0xec, 0x02, 0x86, 0xed, 0x60,
+ 0x32, 0x70, 0xc1, 0x4c, 0x65, 0x67, 0x65, 0x61, 0xf2, 0x03, 0xdd, 0x04,
+ 0xad, 0x07, 0x04, 0x04, 0x04, 0x03, 0xcd, 0xe9, 0x73, 0xe7, 0xdc, 0xfa,
+ 0x6a, 0xf0, 0xdc, 0xf6, 0x67, 0xe2, 0xdc, 0xf2, 0xe4, 0xcd, 0xec, 0x61,
+ 0xf5, 0xdc, 0xeb, 0xe5, 0xe0, 0x2e, 0x2c, 0xe4, 0x04, 0xe0, 0x31, 0xb6,
+ 0x65, 0xec, 0xd7, 0xb8, 0xae, 0x06, 0x60, 0x2c, 0x9b, 0xc4, 0x90, 0xe3,
+ 0x04, 0xe0, 0x31, 0xd8, 0x6c, 0x6f, 0x75, 0x64, 0x70, 0x6c, 0x61, 0x74,
+ 0x66, 0x6f, 0x72, 0xed, 0xe0, 0x32, 0xd3, 0xe8, 0x06, 0x04, 0x09, 0xe0,
+ 0x21, 0x58, 0xf6, 0xe0, 0x21, 0x64, 0xf3, 0x04, 0xe0, 0x31, 0x74, 0xeb,
+ 0xe0, 0x21, 0x5b, 0x2d, 0x6d, 0x75, 0x65, 0x6e, 0x73, 0xf4, 0xe0, 0x21,
+ 0xbc, 0xe5, 0x0c, 0x05, 0x08, 0x11, 0x08, 0x05, 0x0b, 0x60, 0x30, 0xb5,
+ 0xc2, 0x13, 0xf4, 0x5c, 0x5c, 0xd4, 0xfc, 0x73, 0x74, 0x65, 0x2d, 0xe9,
+ 0xe0, 0x26, 0x88, 0xf2, 0x04, 0xe0, 0x20, 0xbc, 0xf2, 0x04, 0xe0, 0x2f,
+ 0xfa, 0x61, 0xf2, 0x60, 0x2c, 0x12, 0xc4, 0xaa, 0x6e, 0x74, 0x69, 0x67,
+ 0x65, 0xf2, 0xd9, 0x92, 0x69, 0xf2, 0xe0, 0x29, 0x22, 0x65, 0x64, 0x62,
+ 0x61, 0x63, 0xeb, 0x48, 0xf7, 0xe0, 0x2a, 0x19, 0xe4, 0x06, 0x19, 0x04,
+ 0xe0, 0x2c, 0xbb, 0x6f, 0x72, 0xe1, 0x02, 0x87, 0x70, 0x65, 0x6f, 0x70,
+ 0xec, 0xdd, 0x21, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x63, 0x6c, 0x6f, 0x75,
+ 0xe4, 0xe0, 0x2f, 0xc9, 0xea, 0xe0, 0x31, 0x01, 0xe5, 0x04, 0xe0, 0x2a,
+ 0xcf, 0xf2, 0xe0, 0x2f, 0xaa, 0xe3, 0xe0, 0x30, 0x87, 0x62, 0xf8, 0x02,
+ 0x81, 0x2d, 0xef, 0xc1, 0x1f, 0xe1, 0x09, 0x06, 0x40, 0x4a, 0x0e, 0x13,
+ 0x12, 0x06, 0x8c, 0x75, 0x73, 0xeb, 0xe0, 0x30, 0xdc, 0xf3, 0x02, 0xb8,
+ 0xf4, 0x06, 0x0d, 0x08, 0xe0, 0x32, 0xa3, 0x76, 0x70, 0xf3, 0x02, 0x85,
+ 0xae, 0x54, 0x02, 0xc6, 0xda, 0xad, 0xcf, 0x29, 0x73, 0x74, 0x61, 0x63,
+ 0xeb, 0xe0, 0x32, 0x42, 0x6c, 0xf9, 0x02, 0x85, 0x6c, 0xe2, 0xe0, 0x32,
+ 0x3a, 0xad, 0x02, 0x8c, 0x74, 0x65, 0x72, 0x72, 0x61, 0x72, 0x69, 0x75,
+ 0xed, 0xe0, 0x32, 0x57, 0x65, 0xe4, 0xd7, 0x54, 0x68, 0x69, 0x6f, 0xee,
+ 0x04, 0xe0, 0x32, 0x7f, 0x73, 0x74, 0x6f, 0xf2, 0xe0, 0x22, 0xd5, 0xf2,
+ 0x05, 0x5b, 0x8e, 0xd5, 0x3f, 0xed, 0x04, 0xe0, 0x32, 0x6d, 0xe5, 0xcf,
+ 0xa9, 0xee, 0x06, 0x60, 0x2f, 0xa7, 0xc2, 0xbc, 0x74, 0x61, 0x73, 0x79,
+ 0x6c, 0x65, 0x61, 0x67, 0x75, 0xe5, 0xce, 0x50, 0xed, 0x02, 0x8a, 0x69,
+ 0x6c, 0xf9, 0x04, 0xe0, 0x32, 0x4d, 0xe4, 0xdd, 0xf3, 0x2e, 0xf0, 0xe0,
+ 0x2f, 0x8f, 0x6b, 0x65, 0x66, 0xf5, 0xde, 0xb3, 0xe9, 0x06, 0x46, 0x7d,
+ 0xe0, 0x29, 0x19, 0x72, 0x77, 0xe9, 0xca, 0x38, 0xe7, 0xe0, 0x30, 0x74,
+ 0x35, 0x2e, 0xf3, 0xe0, 0x31, 0x92, 0xe5, 0x23, 0x11, 0x40, 0x76, 0x08,
+ 0x2b, 0x40, 0x83, 0x1a, 0x40, 0x5f, 0x1f, 0x0d, 0x05, 0x40, 0xb9, 0x41,
+ 0x17, 0x27, 0x0a, 0x24, 0x10, 0x16, 0x41, 0x7d, 0x40, 0x43, 0x14, 0x40,
+ 0x48, 0x03, 0x10, 0xe0, 0x26, 0x4f, 0x7a, 0x70, 0x72, 0x6f, 0x78, 0x79,
+ 0x2e, 0x6b, 0x75, 0x6c, 0x65, 0x75, 0x76, 0x65, 0xee, 0xd3, 0xa1, 0xf8,
+ 0x06, 0x08, 0x34, 0x04, 0x0b, 0x8b, 0x74, 0x72, 0x61, 0x73, 0xf0, 0xe0,
+ 0x2a, 0x6b, 0xf0, 0x03, 0x12, 0x88, 0x72, 0x65, 0x73, 0xf3, 0x04, 0xe0,
+ 0x31, 0xd9, 0xae, 0x04, 0xe0, 0x2e, 0xa3, 0x76, 0x61, 0xec, 0xca, 0x2f,
+ 0xef, 0x04, 0xe0, 0x2e, 0x26, 0xf3, 0xd2, 0x61, 0x65, 0x72, 0xf4, 0x04,
+ 0xe0, 0x31, 0xc0, 0x73, 0x2d, 0x63, 0x6f, 0x6d, 0x70, 0x74, 0x61, 0x62,
+ 0x6c, 0x65, 0xf3, 0xe0, 0x30, 0xe8, 0x6e, 0xe5, 0xd5, 0x3e, 0x65, 0x63,
+ 0x75, 0x74, 0x65, 0x2d, 0x61, 0x70, 0xe9, 0xc2, 0x69, 0x63, 0x68, 0x61,
+ 0x6e, 0x67, 0xe5, 0x60, 0x2e, 0x6a, 0xc3, 0x32, 0xae, 0x02, 0x89, 0x6f,
+ 0x72, 0x74, 0x73, 0x69, 0x6e, 0x66, 0xef, 0x8a, 0x66, 0x75, 0x74, 0x75,
+ 0x72, 0x65, 0x63, 0x6d, 0x73, 0x2e, 0xe1, 0xd9, 0x19, 0x77, 0x70, 0x2e,
+ 0x6c, 0x69, 0xf6, 0xd2, 0x9d, 0xf6, 0x02, 0x8d, 0x6a, 0x65, 0x2d, 0x6f,
+ 0x67, 0x2d, 0x68, 0x6f, 0x72, 0xee, 0xe0, 0x2c, 0x8c, 0x65, 0xee, 0x07,
+ 0x0c, 0x60, 0x27, 0x53, 0xc5, 0x22, 0x1f, 0x43, 0x61, 0x1f, 0x45, 0x61,
+ 0x1f, 0x45, 0xe1, 0xe0, 0x29, 0x2a, 0x61, 0x73, 0xf3, 0xe0, 0x29, 0x24,
+ 0xf5, 0x09, 0x0f, 0x06, 0x32, 0x60, 0x2e, 0x3e, 0xc2, 0xbc, 0x72, 0xef,
+ 0x02, 0x86, 0x76, 0x69, 0xf3, 0xe0, 0x24, 0x1e, 0x64, 0x69, 0xf2, 0xdd,
+ 0xc3, 0x6e, 0x2e, 0xe5, 0xe0, 0x31, 0x2e, 0xae, 0x0b, 0x11, 0x09, 0x03,
+ 0x60, 0x27, 0x16, 0x46, 0xc9, 0xc2, 0xee, 0xf0, 0x03, 0xc1, 0x2f, 0x79,
+ 0x74, 0x68, 0x6f, 0x6e, 0x61, 0x6e, 0x79, 0x77, 0x68, 0xe5, 0xd5, 0xc5,
+ 0x6d, 0x65, 0x74, 0x65, 0x6f, 0xf2, 0xe0, 0x2f, 0xcf, 0xe9, 0xc8, 0x91,
+ 0x65, 0x6e, 0x63, 0x6f, 0x77, 0x61, 0xf9, 0xd8, 0x6d, 0xad, 0x0a, 0x0f,
+ 0x06, 0x02, 0x02, 0x02, 0x58, 0x52, 0xd3, 0xef, 0x77, 0x65, 0x73, 0x74,
+ 0xad, 0x06, 0x60, 0x27, 0x24, 0xc5, 0x33, 0xb3, 0xe0, 0x2c, 0x57, 0x6e,
+ 0x6f, 0xf2, 0xe0, 0x2c, 0x4d, 0xb4, 0x86, 0xb3, 0x84, 0xb2, 0x82, 0x31,
+ 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x6e, 0x6f, 0xe4, 0xe0, 0x28, 0x8f, 0xf4,
+ 0x08, 0x07, 0x04, 0x60, 0x27, 0xe6, 0xc8, 0xce, 0x6e, 0xe5, 0x60, 0x29,
+ 0x10, 0xc5, 0xc5, 0xe3, 0xe0, 0x2f, 0x12, 0x61, 0x6a, 0x69, 0xed, 0xcb,
+ 0x1f, 0xf3, 0x0a, 0x34, 0x04, 0x09, 0x07, 0x4e, 0xe1, 0xe0, 0x21, 0x7a,
+ 0xf4, 0x05, 0x05, 0xe0, 0x29, 0x4f, 0x2e, 0xf0, 0xe0, 0x2e, 0xf8, 0xad,
+ 0x03, 0x0c, 0x88, 0x6d, 0x6f, 0x6e, 0x2d, 0x62, 0x6c, 0x6f, 0x67, 0x75,
+ 0xe5, 0xc5, 0xf0, 0x6c, 0x65, 0x2d, 0x70, 0x61, 0x74, 0xf2, 0x8f, 0x61,
+ 0x2d, 0x6c, 0x61, 0x2d, 0x6d, 0xe1, 0x02, 0x83, 0x73, 0xe9, 0x83, 0x69,
+ 0x73, 0xef, 0xc6, 0xed, 0xf0, 0xe0, 0x2e, 0xc9, 0xe1, 0x04, 0xe0, 0x29,
+ 0xbc, 0xee, 0xe0, 0x2e, 0x5d, 0xae, 0x58, 0xcc, 0x50, 0xaa, 0x03, 0x83,
+ 0x2d, 0x31, 0x2e, 0x61, 0x78, 0x61, 0x72, 0x6e, 0x65, 0xf4, 0xd7, 0xc2,
+ 0xf2, 0x08, 0x0c, 0x52, 0xe0, 0x4b, 0x5e, 0xd0, 0x76, 0x6f, 0x74, 0xe9,
+ 0x02, 0x82, 0xeb, 0x82, 0x63, 0xe1, 0xe0, 0x2e, 0xf1, 0xe9, 0x02, 0x84,
+ 0xed, 0xe0, 0x24, 0x22, 0x63, 0xf3, 0x8f, 0x71, 0x75, 0x69, 0x70, 0x6d,
+ 0x65, 0x6e, 0xf4, 0x60, 0x2c, 0xf6, 0xc3, 0x32, 0x70, 0xf3, 0xe0, 0x28,
+ 0x32, 0xee, 0x0f, 0x2a, 0x12, 0x04, 0x1d, 0x04, 0x0e, 0x20, 0x0f, 0x04,
+ 0x60, 0x26, 0x94, 0xc6, 0x82, 0xf4, 0x02, 0x9c, 0x65, 0xf2, 0x02, 0x87,
+ 0x74, 0x61, 0x69, 0xee, 0xe0, 0x27, 0xb4, 0x70, 0x72, 0x69, 0x73, 0xe5,
+ 0x04, 0xe0, 0x2d, 0x3b, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0xae, 0xde, 0xe3,
+ 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0xed, 0xdc, 0x79, 0xf3,
+ 0x02, 0x8a, 0x63, 0x61, 0x6c, 0x65, 0x64, 0x2e, 0xf3, 0xe0, 0x2c, 0xb8,
+ 0x2e, 0xf4, 0xe0, 0x2e, 0x51, 0xe9, 0xe0, 0x24, 0x23, 0xe7, 0x03, 0x0f,
+ 0x85, 0x69, 0x6e, 0xe5, 0x04, 0xe0, 0x2c, 0x91, 0x65, 0xf2, 0x59, 0x9d,
+ 0x52, 0xf2, 0xc3, 0x32, 0x65, 0xf2, 0xe0, 0x28, 0x0c, 0xae, 0x60, 0x2d,
+ 0xde, 0xb3, 0xe6, 0xe0, 0x2e, 0x0b, 0xe5, 0x02, 0x85, 0x72, 0xe7, 0xe0,
+ 0x2d, 0x1e, 0x62, 0x61, 0xeb, 0xe0, 0x24, 0x9a, 0x64, 0x6f, 0xe6, 0x02,
+ 0x8d, 0x74, 0x68, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0xe5, 0xe0,
+ 0x25, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0xae, 0x60,
+ 0x2c, 0x60, 0xc2, 0xc2, 0xe3, 0x02, 0x84, 0xf2, 0xe0, 0x2b, 0xd7, 0x6f,
+ 0x72, 0x65, 0x61, 0xf0, 0xe0, 0x25, 0x1f, 0xe1, 0xe0, 0x26, 0x05, 0x2d,
+ 0x72, 0x6f, 0xef, 0xe0, 0x2b, 0x1e, 0xed, 0x07, 0x40, 0xcf, 0x0b, 0x0d,
+ 0x10, 0x93, 0xf2, 0x06, 0x07, 0x0a, 0xe0, 0x2c, 0xef, 0x73, 0x74, 0x75,
+ 0x64, 0x69, 0xef, 0x90, 0x6e, 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b,
+ 0xf3, 0x86, 0x61, 0x70, 0x70, 0x75, 0x69, 0x2d, 0x70, 0x72, 0x6f, 0x64,
+ 0xae, 0x07, 0x16, 0x05, 0x08, 0x06, 0x22, 0x98, 0x75, 0x73, 0xad, 0x05,
+ 0x05, 0xe0, 0x26, 0xb1, 0x77, 0xe5, 0xe0, 0x26, 0xb6, 0x67, 0x6f, 0x76,
+ 0xad, 0x40, 0x85, 0xe0, 0x26, 0x08, 0x73, 0x61, 0xad, 0xc0, 0x7d, 0x6d,
+ 0x65, 0xad, 0x40, 0x7f, 0xe0, 0x26, 0x06, 0x69, 0x6c, 0xad, 0xe0, 0x26,
+ 0x7d, 0x65, 0x75, 0xad, 0x04, 0x04, 0x08, 0x85, 0x77, 0xe5, 0xc0, 0x58,
+ 0x73, 0x6f, 0x75, 0x74, 0xe8, 0xe0, 0x26, 0x89, 0x6e, 0x6f, 0xf2, 0xc0,
+ 0x61, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0xec, 0xe0, 0x26, 0x7a, 0xe3,
+ 0x02, 0x91, 0x6e, 0x2d, 0x6e, 0x6f, 0x72, 0x74, 0xe8, 0x02, 0x84, 0x77,
+ 0x65, 0x73, 0x74, 0x2d, 0xb1, 0xcf, 0x31, 0xe1, 0xe0, 0x26, 0x3b, 0xe1,
+ 0x02, 0xb5, 0x70, 0xad, 0x03, 0x18, 0x93, 0x73, 0x6f, 0x75, 0x74, 0xe8,
+ 0x04, 0xe0, 0x26, 0x4e, 0x65, 0x61, 0x73, 0x74, 0xad, 0x06, 0x13, 0x60,
+ 0x26, 0x33, 0x82, 0xb4, 0xe0, 0x26, 0x48, 0x6e, 0x6f, 0x72, 0x74, 0x68,
+ 0x65, 0x61, 0x73, 0x74, 0xad, 0x05, 0x60, 0x26, 0x33, 0x82, 0xb3, 0xe0,
+ 0x26, 0x35, 0x65, 0xe1, 0xe0, 0x26, 0x08, 0x66, 0x2d, 0x73, 0x6f, 0x75,
+ 0x74, 0xe8, 0xe0, 0x26, 0x15, 0xf0, 0x04, 0xe0, 0x2c, 0xe4, 0x72, 0x65,
+ 0xf3, 0xe0, 0x2b, 0x77, 0x69, 0x6c, 0x69, 0xe1, 0x02, 0x81, 0x2d, 0x72,
+ 0x6f, 0x6d, 0xe1, 0xd8, 0x80, 0x65, 0xf2, 0x02, 0x88, 0x67, 0x65, 0x6e,
+ 0x63, 0xf9, 0xe0, 0x2b, 0x3b, 0xe3, 0xe0, 0x2b, 0xb0, 0xe2, 0x05, 0x08,
+ 0xe0, 0x29, 0x18, 0x61, 0x69, 0x78, 0x61, 0x64, 0xe1, 0xcb, 0xb6, 0x2e,
+ 0xeb, 0xe0, 0x2b, 0x93, 0x61, 0xe9, 0xe0, 0x2b, 0xaf, 0xec, 0x07, 0x04,
+ 0x0f, 0x5b, 0x39, 0xce, 0x73, 0x76, 0xe5, 0xd6, 0x1d, 0x65, 0x6d, 0x65,
+ 0x6e, 0x74, 0x6f, 0x72, 0x2e, 0xe3, 0x03, 0xd5, 0xa9, 0xef, 0xc7, 0xc5,
+ 0xe2, 0x02, 0x86, 0x6c, 0x61, 0xe7, 0xe0, 0x28, 0xea, 0xae, 0xcb, 0xc4,
+ 0x6b, 0x6c, 0x6f, 0x67, 0x65, 0x73, 0xae, 0xe0, 0x29, 0x37, 0xe9, 0x03,
+ 0x07, 0x82, 0x68, 0x65, 0x69, 0x6a, 0xe9, 0xc1, 0xf9, 0xe7, 0xa4, 0xe4,
+ 0x05, 0x5d, 0xab, 0xce, 0x77, 0xf3, 0x05, 0x05, 0xe0, 0x21, 0xd2, 0x6b,
+ 0xef, 0xe0, 0x26, 0x82, 0x62, 0x65, 0xf2, 0xe0, 0x26, 0x7c, 0xe7, 0x05,
+ 0x06, 0xe0, 0x2d, 0xed, 0x6f, 0x69, 0xf3, 0xe0, 0x2d, 0xad, 0x65, 0xf2,
+ 0xd7, 0x07, 0xe5, 0x07, 0x5b, 0xdb, 0x42, 0x5a, 0xcf, 0xac, 0x72, 0xef,
+ 0x02, 0x86, 0x2d, 0x73, 0x74, 0x61, 0x67, 0x65, 0x2e, 0xef, 0xdc, 0xb6,
+ 0xe4, 0x07, 0x41, 0x26, 0x07, 0x08, 0x2a, 0x85, 0xf5, 0x06, 0x04, 0x0a,
+ 0xe0, 0x2d, 0xb6, 0x67, 0xe9, 0xda, 0x3e, 0x63, 0x61, 0xf4, 0x04, 0xe0,
+ 0x20, 0x9d, 0xef, 0xd1, 0xe4, 0xae, 0x1c, 0x06, 0x08, 0x06, 0x0a, 0x1d,
+ 0x06, 0x10, 0x08, 0x14, 0x10, 0x12, 0x09, 0x08, 0x10, 0x04, 0x0e, 0x07,
+ 0x0d, 0x11, 0x4a, 0xa6, 0x04, 0x3b, 0x40, 0x47, 0xd9, 0xff, 0xfa, 0x60,
+ 0x2a, 0xf3, 0xc0, 0xab, 0xf6, 0x60, 0x21, 0x2a, 0x4a, 0xaa, 0x3a, 0xba,
+ 0xf5, 0x60, 0x2b, 0x00, 0xc0, 0x90, 0xf4, 0x60, 0x2a, 0xc1, 0x1e, 0x12,
+ 0x40, 0x82, 0x3c, 0xb2, 0xf3, 0x13, 0x60, 0x22, 0xa4, 0x46, 0x95, 0x41,
+ 0x72, 0x1a, 0x03, 0x15, 0x40, 0x79, 0x17, 0x25, 0x40, 0x51, 0xc1, 0x83,
+ 0xe3, 0x04, 0xe0, 0x2d, 0x62, 0xef, 0xe0, 0x2d, 0x01, 0xf2, 0x60, 0x2a,
+ 0xa1, 0xc1, 0xd4, 0xf0, 0x60, 0x21, 0xf6, 0x48, 0x7e, 0x27, 0x03, 0x17,
+ 0x18, 0x40, 0x79, 0x17, 0x3c, 0x1b, 0x9f, 0xee, 0x60, 0x2a, 0xdb, 0x40,
+ 0xc9, 0xc1, 0xa2, 0xed, 0x60, 0x25, 0x2c, 0x43, 0xe5, 0x41, 0x68, 0x03,
+ 0x07, 0x03, 0x17, 0x18, 0x40, 0x79, 0x3c, 0x17, 0x3a, 0xc1, 0x83, 0xec,
+ 0x60, 0x20, 0xc3, 0x41, 0xa5, 0x46, 0x95, 0x41, 0x72, 0x03, 0x2f, 0x40,
+ 0x90, 0xc0, 0x57, 0xeb, 0x0e, 0x60, 0x2a, 0x47, 0x03, 0x1e, 0x1b, 0x1e,
+ 0x40, 0x7c, 0x40, 0x6c, 0xc1, 0x83, 0xf2, 0xd8, 0x91, 0xe9, 0x4b, 0x8f,
+ 0x5e, 0xbe, 0x40, 0xab, 0xc0, 0x8d, 0xe8, 0x60, 0x2a, 0x47, 0x40, 0xa8,
+ 0xc0, 0x8d, 0xe7, 0x60, 0x2a, 0x15, 0x40, 0x41, 0x03, 0x15, 0x1e, 0x40,
+ 0x5b, 0x21, 0x32, 0x1b, 0x1f, 0xba, 0xe6, 0xe0, 0x2a, 0x43, 0xe5, 0x60,
+ 0x20, 0x7c, 0x45, 0x84, 0x44, 0x28, 0x40, 0xab, 0x40, 0x53, 0xc1, 0xbd,
+ 0xe4, 0x60, 0x2a, 0x10, 0x21, 0xc0, 0xd0, 0xe3, 0x60, 0x28, 0xa1, 0x41,
+ 0x6b, 0x40, 0x57, 0x40, 0x97, 0x40, 0x51, 0xba, 0xe2, 0x60, 0x21, 0xff,
+ 0x47, 0xe0, 0x1d, 0x0a, 0x17, 0x12, 0x27, 0x40, 0x5b, 0x17, 0x25, 0x32,
+ 0x9f, 0xe1, 0x60, 0x20, 0x49, 0x41, 0x07, 0x48, 0x9b, 0x24, 0x40, 0xff,
+ 0xc0, 0x59, 0x6f, 0x67, 0x61, 0xf7, 0xe0, 0x26, 0x0f, 0x69, 0x74, 0x6f,
+ 0x72, 0xf8, 0xe0, 0x2b, 0x47, 0x67, 0xe5, 0x04, 0x0f, 0x08, 0x89, 0xf3,
+ 0x02, 0x86, 0x75, 0x69, 0xf4, 0xe0, 0x26, 0x32, 0x74, 0x61, 0x63, 0xeb,
+ 0xd5, 0xd8, 0x6b, 0x65, 0xf9, 0x60, 0x26, 0x2a, 0xc5, 0xf1, 0x63, 0x6f,
+ 0x6d, 0x70, 0x75, 0xf4, 0xe0, 0x28, 0xce, 0x61, 0xf0, 0xdf, 0xbf, 0x65,
+ 0xeb, 0xe0, 0x2a, 0x70, 0xae, 0x06, 0x06, 0x5a, 0x12, 0xd0, 0x4a, 0xe3,
+ 0x60, 0x29, 0xf3, 0xc0, 0xc9, 0xe1, 0xe0, 0x2a, 0x84, 0xe3, 0x06, 0x2b,
+ 0x04, 0xe0, 0x2c, 0x20, 0xef, 0x07, 0x0a, 0x0c, 0x06, 0xe0, 0x2c, 0x2b,
+ 0x6e, 0xef, 0x04, 0xe0, 0x21, 0x4a, 0xed, 0xe0, 0x29, 0x30, 0x6d, 0x6d,
+ 0x65, 0x72, 0x63, 0x65, 0x2d, 0x73, 0x68, 0xef, 0xda, 0x00, 0x6c, 0x6f,
+ 0xe7, 0xe0, 0x29, 0x1e, 0x2e, 0xe2, 0x60, 0x29, 0x96, 0xc0, 0xf0, 0xee,
+ 0xe0, 0x2a, 0x7e, 0x68, 0x69, 0x7a, 0x65, 0x6e, 0x2e, 0x66, 0x75, 0x6b,
+ 0xf5, 0xe0, 0x29, 0xb6, 0xe2, 0x04, 0xe0, 0x26, 0xce, 0xe9, 0x02, 0x84,
+ 0x7a, 0xae, 0xcc, 0xa8, 0xee, 0x04, 0xe0, 0x26, 0xb6, 0xef, 0xdd, 0x2e,
+ 0xe1, 0x03, 0x17, 0xa8, 0xf4, 0x05, 0x05, 0xe0, 0x2b, 0xf0, 0x6f, 0xee,
+ 0xe0, 0x22, 0xa2, 0x69, 0x6e, 0x67, 0x2d, 0x6f, 0x72, 0x67, 0x61, 0xee,
+ 0xe0, 0x28, 0x1d, 0xf3, 0x02, 0x8b, 0x79, 0x70, 0x61, 0x6e, 0x65, 0x6c,
+ 0xae, 0x4d, 0x2a, 0xdb, 0x0d, 0xf4, 0x03, 0x05, 0x86, 0x75, 0x73, 0xb2,
+ 0xd0, 0x7d, 0x61, 0x73, 0x69, 0xe1, 0xd0, 0x77, 0x2d, 0x6b, 0x61, 0x7a,
+ 0x61, 0x6b, 0x68, 0x73, 0xf4, 0xdc, 0xce, 0x72, 0xf4, 0xe0, 0x28, 0xd7,
+ 0xb4, 0xc7, 0x33, 0xb1, 0x02, 0x88, 0x36, 0x34, 0x2e, 0x61, 0xf2, 0xe0,
+ 0x29, 0x63, 0x32, 0xae, 0xe0, 0x20, 0x42, 0xae, 0x59, 0xa4, 0xd1, 0xfd,
+ 0xe4, 0x22, 0x07, 0x40, 0xed, 0x0a, 0x12, 0x1e, 0x04, 0x1c, 0x40, 0x50,
+ 0x03, 0x40, 0x76, 0x40, 0x70, 0x09, 0x05, 0x40, 0xf1, 0x11, 0x06, 0x06,
+ 0x41, 0x6d, 0x38, 0x05, 0x40, 0xd7, 0x60, 0x22, 0x92, 0x21, 0x92, 0x1f,
+ 0x43, 0x78, 0xee, 0xe0, 0x20, 0x35, 0xf9, 0x05, 0x5d, 0x01, 0xcd, 0xd2,
+ 0xee, 0x0b, 0x08, 0x04, 0x07, 0x40, 0x6a, 0x1d, 0x05, 0x1e, 0xc0, 0xb3,
+ 0xf6, 0x03, 0xc0, 0xbf, 0xb6, 0xe0, 0x2a, 0xfb, 0xf5, 0xe0, 0x2a, 0xf7,
+ 0x73, 0x65, 0x72, 0xf6, 0xe0, 0x28, 0x2e, 0x64, 0x6e, 0xf3, 0x03, 0x03,
+ 0x99, 0xb1, 0xc6, 0xaf, 0xae, 0x0b, 0x4c, 0x99, 0x4b, 0xe6, 0x41, 0xdb,
+ 0x4d, 0x67, 0xc0, 0x56, 0xe4, 0x03, 0xc0, 0x86, 0x61, 0x70, 0x70, 0x6e,
+ 0x6f, 0xe4, 0xe0, 0x21, 0x18, 0xad, 0x0e, 0x0a, 0x07, 0x06, 0x08, 0x06,
+ 0x05, 0x09, 0x42, 0x2f, 0x42, 0x75, 0xc2, 0xc4, 0xf7, 0x04, 0x2b, 0xc5,
+ 0x07, 0x69, 0xeb, 0xe0, 0x20, 0xc4, 0x72, 0x65, 0x6d, 0xef, 0xe0, 0x22,
+ 0xd4, 0x70, 0x69, 0xe3, 0xe0, 0x29, 0xa5, 0x6f, 0x66, 0x66, 0x69, 0xe3,
+ 0xe0, 0x22, 0xc7, 0x6d, 0x61, 0xe9, 0xe0, 0x23, 0x95, 0x62, 0x6c, 0xef,
+ 0xdc, 0xd5, 0x61, 0x74, 0xad, 0x02, 0x84, 0x77, 0xef, 0xd3, 0x89, 0x68,
+ 0x6f, 0xed, 0xe0, 0x22, 0xad, 0xe1, 0x04, 0x06, 0xc1, 0xb9, 0x74, 0x68,
+ 0xef, 0xe0, 0x27, 0x0b, 0x6d, 0xe9, 0x02, 0x87, 0x73, 0x63, 0x68, 0x65,
+ 0xf3, 0xc4, 0x98, 0x63, 0x2d, 0x64, 0x6e, 0xf3, 0xd9, 0xe9, 0x35, 0xb3,
+ 0xe0, 0x29, 0x75, 0xae, 0x03, 0x0e, 0x86, 0x68, 0x6f, 0x6d, 0x65, 0x2d,
+ 0x77, 0x65, 0x62, 0x73, 0x65, 0x72, 0xf6, 0xc6, 0x18, 0x64, 0x64, 0x6e,
+ 0xf3, 0xc4, 0x77, 0x63, 0x6f, 0x73, 0xe9, 0xc4, 0x6f, 0xad, 0x04, 0x03,
+ 0x08, 0x86, 0x76, 0xf0, 0x94, 0x6f, 0x2d, 0x73, 0x61, 0xf5, 0xe0, 0x29,
+ 0x66, 0x69, 0x70, 0x32, 0xb4, 0xc5, 0xf8, 0x62, 0x65, 0x72, 0x6c, 0x69,
+ 0xee, 0xc5, 0xf0, 0x77, 0x65, 0x62, 0x2e, 0x6c, 0x69, 0xee, 0xe0, 0x23,
+ 0x78, 0xf6, 0x02, 0x8b, 0xf2, 0x05, 0x20, 0xe0, 0x2a, 0x55, 0x63, 0x61,
+ 0xed, 0xd9, 0x90, 0xe1, 0xe0, 0x2a, 0x6e, 0xf5, 0x05, 0x05, 0x04, 0x06,
+ 0x86, 0x72, 0xe2, 0xe0, 0x25, 0x9d, 0x70, 0xef, 0xc1, 0xeb, 0x6e, 0x6c,
+ 0xef, 0xe0, 0x28, 0x6a, 0x63, 0x6b, 0x64, 0xee, 0xd4, 0xd7, 0xe2, 0xcd,
+ 0xd8, 0xf4, 0xe0, 0x26, 0x1f, 0xf3, 0x03, 0x04, 0x85, 0xf4, 0xe0, 0x20,
+ 0xf4, 0x6d, 0x79, 0xee, 0xc1, 0x1f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0xae,
+ 0x04, 0xe0, 0x26, 0xb9, 0xed, 0x59, 0x1c, 0xd0, 0x6f, 0xf2, 0x08, 0x04,
+ 0x07, 0x06, 0x05, 0x03, 0x0c, 0x9b, 0x1f, 0x43, 0xf8, 0x8f, 0x75, 0x64,
+ 0xae, 0x4a, 0xfa, 0xdd, 0xd3, 0x72, 0x2e, 0xe1, 0xe0, 0x29, 0xd1, 0x6f,
+ 0x62, 0xe1, 0xdf, 0x09, 0xe9, 0xde, 0xa9, 0x65, 0x61, 0x6d, 0x68, 0x6f,
+ 0x73, 0x74, 0x65, 0xf2, 0xe0, 0x28, 0x9d, 0xe1, 0x03, 0x0d, 0x86, 0xf9,
+ 0x03, 0xc3, 0xbe, 0xe4, 0x03, 0xc3, 0xbc, 0x64, 0xee, 0xe0, 0x28, 0x8c,
+ 0x6e, 0x67, 0xe5, 0xe0, 0x22, 0x3f, 0x6d, 0xed, 0xd9, 0xb2, 0xae, 0x5b,
+ 0x84, 0x4a, 0x07, 0xc2, 0xd4, 0xf0, 0xcd, 0xf2, 0xef, 0x10, 0x08, 0x05,
+ 0x06, 0x06, 0x06, 0x22, 0x03, 0x06, 0x12, 0x60, 0x27, 0x5d, 0x42, 0x10,
+ 0x81, 0x77, 0x6e, 0x6c, 0x6f, 0xe1, 0xe0, 0x27, 0x26, 0x76, 0xf2, 0xe0,
+ 0x27, 0xd7, 0x73, 0x68, 0x69, 0xae, 0xcc, 0x90, 0x70, 0x61, 0xe1, 0xe0,
+ 0x28, 0x4e, 0x6f, 0x6d, 0x64, 0x6e, 0xf3, 0xb8, 0xee, 0x05, 0x08, 0x10,
+ 0xde, 0x4a, 0x74, 0x65, 0x78, 0x69, 0x73, 0xf4, 0xd5, 0x47, 0xe7, 0x02,
+ 0x87, 0x74, 0x68, 0x61, 0xf0, 0xe0, 0x20, 0x59, 0x6e, 0x61, 0xe9, 0xe0,
+ 0x20, 0x53, 0x65, 0xf4, 0xc0, 0x92, 0xed, 0xd8, 0xd2, 0x6a, 0x69, 0xee,
+ 0xe0, 0x29, 0x4c, 0x65, 0xf3, 0x03, 0xd2, 0x9f, 0x6e, 0x74, 0x65, 0x78,
+ 0x69, 0x73, 0x74, 0xae, 0x60, 0x26, 0x4f, 0xc2, 0xee, 0xe3, 0x04, 0xe0,
+ 0x26, 0xad, 0xf4, 0xe0, 0x25, 0xe2, 0xee, 0x08, 0x40, 0x54, 0x05, 0x4d,
+ 0x18, 0xd9, 0xfb, 0xf3, 0x08, 0x0e, 0x07, 0x08, 0x06, 0x05, 0x06, 0x8c,
+ 0x75, 0xf0, 0x04, 0xe0, 0x28, 0xea, 0x64, 0x61, 0x74, 0xe5, 0x44, 0xae,
+ 0xd3, 0xb9, 0x6b, 0x69, 0x6e, 0xe7, 0xe0, 0x21, 0xee, 0x69, 0x73, 0x6b,
+ 0x69, 0x6e, 0xeb, 0xca, 0xab, 0x68, 0x6f, 0x6d, 0xe5, 0xc4, 0x98, 0x66,
+ 0x6f, 0xf2, 0xd2, 0x82, 0x64, 0x6f, 0x6a, 0xef, 0xd4, 0xcf, 0xe1, 0x02,
+ 0x85, 0x6c, 0x69, 0xe1, 0xd4, 0xc6, 0xe2, 0xe0, 0x27, 0xe9, 0xad, 0x02,
+ 0x88, 0x64, 0x79, 0x6e, 0x61, 0xed, 0xe0, 0x25, 0x47, 0x63, 0x6c, 0x6f,
+ 0xf5, 0xd9, 0xe2, 0xe9, 0x05, 0xe0, 0x22, 0xd6, 0x65, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x74, 0x72, 0x6f, 0x76, 0x73, 0xeb, 0xcd, 0x0c, 0x6c, 0x75,
+ 0x67, 0x6f, 0x6c, 0x65, 0xeb, 0xd9, 0x51, 0xeb, 0x56, 0xe5, 0xd2, 0x06,
+ 0xe9, 0x0d, 0x04, 0x11, 0x0b, 0x40, 0x58, 0x1e, 0x0f, 0x1b, 0x17, 0xe0,
+ 0x25, 0x78, 0x78, 0xae, 0xc9, 0xd1, 0x76, 0xf4, 0x02, 0x85, 0x74, 0x61,
+ 0xf3, 0xd8, 0xca, 0x61, 0x73, 0x76, 0x75, 0x6f, 0xe4, 0xdd, 0x83, 0x74,
+ 0x63, 0x68, 0x79, 0x6f, 0x75, 0x72, 0xe9, 0xe0, 0x27, 0x84, 0xf3, 0x05,
+ 0x21, 0xe0, 0x25, 0xaf, 0xeb, 0x02, 0x90, 0x75, 0x73, 0x73, 0x69, 0x6f,
+ 0x6e, 0x73, 0x62, 0x65, 0x72, 0x65, 0x69, 0x63, 0xe8, 0xc4, 0x08, 0x73,
+ 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0xae, 0x51, 0xee, 0x51, 0x09, 0xc2,
+ 0x7d, 0x63, 0xef, 0x03, 0x03, 0x9a, 0xf6, 0xd4, 0x45, 0xf5, 0x02, 0x93,
+ 0x72, 0x73, 0x65, 0xae, 0x02, 0x86, 0x74, 0x65, 0xe1, 0xe0, 0x28, 0x4a,
+ 0x67, 0x72, 0x6f, 0xf5, 0xe0, 0x28, 0x37, 0xee, 0xe0, 0x26, 0x62, 0x72,
+ 0x64, 0xf3, 0x02, 0x85, 0x65, 0xfa, 0xe0, 0x28, 0x32, 0x61, 0xf9, 0xe0,
+ 0x26, 0xfe, 0x72, 0x65, 0x63, 0xf4, 0x05, 0x03, 0xe0, 0x28, 0x55, 0xef,
+ 0xc5, 0x11, 0x2e, 0x71, 0x75, 0x69, 0x63, 0x6b, 0x63, 0x6f, 0x6e, 0x6e,
+ 0x65, 0x63, 0x74, 0xae, 0x48, 0xb1, 0xde, 0x08, 0x68, 0x65, 0x72, 0x2e,
+ 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0xee, 0xe0, 0x24, 0x42, 0x67,
+ 0xe9, 0x02, 0x94, 0x74, 0x61, 0xec, 0x04, 0xe0, 0x28, 0x29, 0x6f, 0x63,
+ 0x65, 0x61, 0x6e, 0x73, 0x70, 0x61, 0x63, 0xe5, 0xe0, 0x23, 0xb8, 0xe3,
+ 0xd8, 0x6f, 0xe5, 0x05, 0x06, 0xe0, 0x25, 0xfc, 0x6e, 0x62, 0x69, 0xe5,
+ 0xd8, 0x52, 0x6c, 0x64, 0x64, 0x61, 0x6e, 0x75, 0x6f, 0x72, 0xf2, 0xdf,
+ 0xda, 0xe1, 0x02, 0x85, 0x6d, 0x6f, 0xee, 0xce, 0x53, 0x64, 0xe5, 0xcf,
+ 0x68, 0xe8, 0x04, 0xe0, 0x25, 0x4f, 0x2e, 0x62, 0x79, 0x74, 0x65, 0x6d,
+ 0x61, 0x72, 0xeb, 0xe0, 0x24, 0x34, 0x67, 0x63, 0xe1, 0xe0, 0x24, 0xb0,
+ 0x66, 0xae, 0x60, 0x20, 0xf2, 0x83, 0xe5, 0x12, 0x40, 0x68, 0x0c, 0x16,
+ 0x0c, 0x1b, 0x31, 0x27, 0x05, 0x10, 0x0f, 0x08, 0x05, 0x0e, 0xe0, 0x26,
+ 0x7e, 0xf6, 0x08, 0x11, 0x13, 0x0d, 0x20, 0xe0, 0x27, 0x6c, 0x69, 0x63,
+ 0x65, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x67,
+ 0xe9, 0xc1, 0xf5, 0x65, 0x6c, 0x6f, 0xf0, 0x02, 0x89, 0x6d, 0x65, 0x6e,
+ 0x74, 0x2e, 0x72, 0xf5, 0xd2, 0xbe, 0x65, 0xf2, 0xd5, 0x5e, 0x63, 0x64,
+ 0x6e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0xef, 0xe0, 0x27, 0x87, 0xae,
+ 0x05, 0x0c, 0xe0, 0x25, 0xd6, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x2e,
+ 0x6c, 0x61, 0xee, 0xd3, 0x01, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x61, 0x65,
+ 0x6d, 0x63, 0x6c, 0x6f, 0xf5, 0xc3, 0xf4, 0xad, 0x04, 0xe0, 0x20, 0x03,
+ 0x62, 0x75, 0x69, 0x6c, 0x64, 0x65, 0xf2, 0xd0, 0x08, 0xf4, 0x04, 0xe0,
+ 0x25, 0xb4, 0x61, 0xae, 0x60, 0x23, 0xb4, 0xc2, 0x9c, 0xf3, 0x05, 0x0c,
+ 0xe0, 0x25, 0x9b, 0xe9, 0x04, 0xe0, 0x27, 0x47, 0x67, 0xee, 0x60, 0x24,
+ 0x13, 0xc3, 0x32, 0x61, 0xae, 0xde, 0x13, 0xf0, 0x04, 0xe0, 0x25, 0x4f,
+ 0x6f, 0x72, 0x74, 0xe5, 0xe0, 0x24, 0x25, 0xee, 0x02, 0x8a, 0xf4, 0x02,
+ 0x83, 0xe9, 0xd9, 0xc7, 0xe1, 0xe0, 0x24, 0x84, 0xef, 0x03, 0xdc, 0x34,
+ 0x2d, 0x73, 0x74, 0x61, 0x67, 0x69, 0x6e, 0xe7, 0xdc, 0x2c, 0x6d, 0xef,
+ 0x04, 0x07, 0xc9, 0x97, 0x63, 0x72, 0xe1, 0x49, 0xbe, 0xdb, 0x3d, 0xae,
+ 0x02, 0x8b, 0x6a, 0x65, 0x6c, 0x61, 0x73, 0x74, 0x69, 0xe3, 0xe0, 0x26,
+ 0xc6, 0x64, 0x61, 0x74, 0xe1, 0x02, 0x87, 0x64, 0x65, 0x74, 0x65, 0xe3,
+ 0xdc, 0x76, 0x63, 0x65, 0x6e, 0x74, 0x65, 0xf2, 0xe0, 0x26, 0x4b, 0xec,
+ 0x06, 0x05, 0x11, 0x05, 0xd9, 0xf3, 0x6f, 0x69, 0xf4, 0xdf, 0x92, 0xec,
+ 0x05, 0x01, 0xe0, 0x26, 0xd1, 0x2d, 0x6f, 0x67, 0x6c, 0x69, 0x61, 0x73,
+ 0x74, 0xf2, 0xdf, 0xb3, 0x69, 0x76, 0xe5, 0xc3, 0x7e, 0x68, 0xe9, 0xe0,
+ 0x25, 0x3a, 0x67, 0xf2, 0xe0, 0x21, 0x55, 0xe6, 0x04, 0xe0, 0x25, 0x0e,
+ 0x69, 0x6e, 0x69, 0x6d, 0x61, 0xae, 0x60, 0x25, 0x5c, 0xc0, 0xef, 0xe4,
+ 0x02, 0x85, 0x79, 0xee, 0xe0, 0x25, 0x51, 0x69, 0x62, 0x6f, 0xf8, 0xe0,
+ 0x25, 0xd0, 0xe3, 0x03, 0xd6, 0x2b, 0xe9, 0xe0, 0x26, 0x52, 0x62, 0x69,
+ 0xe1, 0xd2, 0x6c, 0xe1, 0x02, 0x84, 0x74, 0xee, 0xdf, 0x8f, 0xec, 0x52,
+ 0x3d, 0x51, 0x8b, 0xc2, 0xbc, 0xae, 0x07, 0x4a, 0xd2, 0x54, 0xbf, 0xc1,
+ 0x59, 0x63, 0xef, 0x04, 0xe0, 0x26, 0x3c, 0xef, 0xe0, 0x25, 0x83, 0xe4,
+ 0x05, 0x2c, 0xe0, 0x23, 0x7e, 0x6e, 0xf3, 0x07, 0x07, 0x05, 0x03, 0x06,
+ 0x05, 0x84, 0x73, 0xae, 0x60, 0x23, 0x37, 0xc2, 0x4c, 0x6c, 0x69, 0xf6,
+ 0xde, 0x17, 0xeb, 0xd8, 0x2c, 0x67, 0x65, 0xe5, 0xe0, 0x21, 0xd1, 0x66,
+ 0x72, 0xe5, 0xde, 0x09, 0xb5, 0xe0, 0x26, 0x0b, 0xae, 0x4f, 0x94, 0xd6,
+ 0x48, 0x2d, 0x64, 0x6e, 0xf3, 0xc1, 0x9c, 0xe3, 0x59, 0xdc, 0xc6, 0x2b,
+ 0xe1, 0x11, 0x07, 0x0b, 0x16, 0x38, 0x09, 0x09, 0x05, 0x04, 0x0b, 0x16,
+ 0x09, 0x1b, 0x54, 0xf3, 0xcd, 0xcb, 0x7a, 0x61, 0x69, 0x66, 0xf5, 0xce,
+ 0x60, 0xf9, 0x04, 0xe0, 0x26, 0x11, 0x6e, 0x69, 0x67, 0xe8, 0xce, 0x66,
+ 0x76, 0x76, 0xe5, 0x02, 0x86, 0x73, 0x69, 0x69, 0xe4, 0xdf, 0x53, 0x6e,
+ 0xea, 0x02, 0x82, 0x1f, 0x43, 0x61, 0x72, 0xe7, 0xdf, 0x48, 0xf4, 0x06,
+ 0x17, 0x05, 0x0a, 0xcf, 0xa4, 0x74, 0xef, 0x03, 0x04, 0x86, 0x77, 0xe5,
+ 0xdb, 0xd9, 0x72, 0x65, 0x6c, 0xe1, 0xc7, 0x54, 0x6c, 0x6f, 0x63, 0x61,
+ 0xec, 0xe0, 0x22, 0x1c, 0x73, 0xf5, 0xe0, 0x24, 0x51, 0xe5, 0x04, 0xe0,
+ 0x25, 0xcd, 0xae, 0x5f, 0xda, 0xc3, 0xeb, 0xe1, 0x04, 0xe0, 0x25, 0xc3,
+ 0x62, 0x61, 0x73, 0xe5, 0xce, 0x6d, 0x72, 0x6b, 0x6c, 0x61, 0x6e, 0xe7,
+ 0xe0, 0x24, 0x65, 0xf0, 0x03, 0xcd, 0xba, 0x6c, 0x69, 0xe5, 0xcf, 0x02,
+ 0xee, 0x5c, 0x6a, 0xc3, 0xa9, 0x6d, 0xee, 0xc2, 0x20, 0xeb, 0x02, 0x83,
+ 0xee, 0xd2, 0x54, 0x6c, 0x61, 0xeb, 0xdc, 0x5c, 0xe9, 0x04, 0x04, 0x04,
+ 0x86, 0x77, 0xe1, 0xd9, 0xc3, 0xf4, 0xe0, 0x23, 0x64, 0x73, 0x65, 0x6e,
+ 0xae, 0xde, 0xeb, 0xe7, 0xd5, 0x04, 0x67, 0x65, 0x73, 0x74, 0x61, 0xee,
+ 0xe0, 0x21, 0x76, 0xe5, 0x03, 0x0e, 0x85, 0x6d, 0x6f, 0x6e, 0xae, 0x03,
+ 0xc6, 0x67, 0x70, 0x61, 0x6e, 0x65, 0xec, 0xc0, 0x8c, 0x6a, 0x65, 0xef,
+ 0xcd, 0xcc, 0x67, 0xf5, 0xcd, 0xc9, 0x62, 0xf5, 0xe0, 0x23, 0xb8, 0xae,
+ 0x05, 0x53, 0x53, 0xd1, 0xfd, 0x67, 0xf6, 0xe0, 0x25, 0x08, 0xe3, 0x27,
+ 0x12, 0x3c, 0x08, 0x05, 0x40, 0xb6, 0x06, 0x19, 0x40, 0x6a, 0x03, 0x18,
+ 0x43, 0x8b, 0x40, 0x6b, 0x41, 0x93, 0x05, 0x40, 0x9a, 0x41, 0xb2, 0x0e,
+ 0x3f, 0x40, 0x57, 0x40, 0xae, 0x0d, 0x41, 0xbe, 0x04, 0x55, 0xb2, 0x1e,
+ 0xc2, 0xa4, 0xfa, 0x05, 0x52, 0x40, 0xd2, 0xdf, 0xe5, 0x02, 0x84, 0x73,
+ 0xf4, 0xdf, 0xd7, 0x6c, 0x61, 0xe4, 0xcd, 0x48, 0xf9, 0x08, 0x10, 0x05,
+ 0x18, 0x52, 0xd7, 0xd2, 0x06, 0xef, 0x04, 0xe0, 0x23, 0xbb, 0x6e, 0xae,
+ 0x03, 0xcd, 0x2a, 0x6c, 0x69, 0xee, 0xe0, 0x24, 0x84, 0x6d, 0xf2, 0xe0,
+ 0x23, 0xae, 0x63, 0x6c, 0x69, 0xe3, 0x02, 0x8e, 0xae, 0x04, 0xe0, 0x21,
+ 0x47, 0xe3, 0x03, 0xcc, 0x59, 0x6f, 0x2e, 0xe9, 0xd0, 0x02, 0xad, 0xe0,
+ 0x23, 0xa6, 0x61, 0x2e, 0xe7, 0xe0, 0x21, 0xb8, 0xf8, 0x04, 0xe0, 0x24,
+ 0xd2, 0xae, 0xd1, 0x0a, 0xf6, 0x48, 0xe3, 0xdb, 0xeb, 0xf5, 0x0a, 0x09,
+ 0x40, 0x79, 0x0a, 0x0a, 0x05, 0xe0, 0x24, 0x24, 0x74, 0x65, 0x67, 0x69,
+ 0x72, 0xec, 0xe0, 0x24, 0x77, 0x73, 0xf4, 0x02, 0xb4, 0x6f, 0xed, 0x02,
+ 0x9f, 0x65, 0xf2, 0x02, 0x94, 0xae, 0x03, 0xcb, 0x1c, 0x73, 0x70, 0x65,
+ 0x65, 0x64, 0x70, 0x61, 0x72, 0x74, 0x6e, 0x65, 0x72, 0xae, 0xe0, 0x23,
+ 0xc1, 0x2d, 0x6f, 0x63, 0xe9, 0xe0, 0x24, 0x8a, 0x2e, 0x6d, 0x65, 0x74,
+ 0x61, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x75, 0x6d, 0x2e, 0xe3, 0xe0, 0x21,
+ 0x09, 0xae, 0x05, 0x08, 0x0c, 0x05, 0x96, 0x74, 0x65, 0x73, 0x74, 0x69,
+ 0x6e, 0xe7, 0x9d, 0x72, 0x65, 0x74, 0x72, 0x6f, 0x73, 0x6e, 0x75, 0xe2,
+ 0xe0, 0x20, 0xb3, 0x70, 0x72, 0x6f, 0xe4, 0x8c, 0xe4, 0x02, 0x86, 0x69,
+ 0x73, 0x72, 0x65, 0xe3, 0x83, 0x65, 0x76, 0x2e, 0x74, 0x68, 0x69, 0x6e,
+ 0x67, 0x64, 0x75, 0xf3, 0xd0, 0xc7, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x73,
+ 0x63, 0x61, 0x6c, 0xe5, 0xdc, 0xec, 0xf2, 0x02, 0x83, 0xf6, 0xd9, 0x4e,
+ 0x69, 0x74, 0xe9, 0x9d, 0x70, 0x63, 0x61, 0x6b, 0x65, 0x2e, 0xe9, 0xe0,
+ 0x23, 0x7b, 0x6e, 0xe5, 0xe0, 0x21, 0xd0, 0xe9, 0x02, 0x89, 0x73, 0x69,
+ 0x6e, 0x65, 0x6c, 0xec, 0xe0, 0x22, 0x21, 0x61, 0xe2, 0xda, 0x1f, 0x74,
+ 0xae, 0x5e, 0x86, 0xc3, 0x37, 0xf3, 0x03, 0x04, 0x84, 0x78, 0xae, 0xc6,
+ 0x02, 0xe2, 0xe0, 0x20, 0x61, 0xae, 0x03, 0xcb, 0x76, 0x6b, 0x65, 0x6c,
+ 0x69, 0x77, 0x65, 0xe2, 0xcb, 0x68, 0xf2, 0x0d, 0x0b, 0x09, 0x09, 0x12,
+ 0x17, 0x11, 0x49, 0xc8, 0x57, 0x0c, 0xc2, 0xbc, 0x79, 0x70, 0x74, 0x6f,
+ 0x6e, 0x6f, 0x6d, 0x69, 0xe3, 0xcb, 0x74, 0x75, 0x69, 0x73, 0xe5, 0x60,
+ 0x21, 0x1c, 0xc2, 0xbc, 0xef, 0x03, 0xca, 0x66, 0x74, 0x6f, 0xee, 0xdc,
+ 0x33, 0xe9, 0x03, 0x05, 0x84, 0x6d, 0x65, 0xe1, 0xc7, 0xd8, 0x63, 0xeb,
+ 0xd0, 0x21, 0xae, 0x5c, 0x7b, 0xc5, 0x9d, 0xe5, 0x03, 0x04, 0x83, 0xf7,
+ 0xe0, 0x20, 0x81, 0xed, 0xda, 0xd6, 0x64, 0x69, 0xf4, 0x05, 0x53, 0x06,
+ 0xd0, 0x9f, 0x75, 0xee, 0xd6, 0x87, 0xe1, 0x04, 0x04, 0xd3, 0xd7, 0x6e,
+ 0xeb, 0xda, 0x56, 0x66, 0x74, 0x69, 0x6e, 0x67, 0xae, 0xcf, 0x33, 0xae,
+ 0x47, 0xa5, 0xd9, 0x95, 0xf1, 0xcf, 0x83, 0xf0, 0x03, 0x06, 0x88, 0x73,
+ 0x65, 0x72, 0xf6, 0xd9, 0x37, 0x72, 0x61, 0x70, 0x69, 0xe4, 0xe0, 0x23,
+ 0x71, 0xe1, 0x60, 0x20, 0x6b, 0xc3, 0x0a, 0xef, 0x14, 0x2b, 0x06, 0x0f,
+ 0x04, 0x3d, 0x40, 0x54, 0x41, 0x6e, 0x18, 0x03, 0x04, 0x15, 0x2a, 0x03,
+ 0x4d, 0xcc, 0xd2, 0xeb, 0xf5, 0x04, 0x04, 0x08, 0x8c, 0x72, 0xf3, 0xd6,
+ 0xd8, 0x70, 0x6f, 0xee, 0x60, 0x20, 0x93, 0xc2, 0xbc, 0xee, 0x02, 0x85,
+ 0x74, 0xf2, 0xe0, 0x20, 0xbb, 0x63, 0xe9, 0xdd, 0xc8, 0x63, 0x68, 0x70,
+ 0x6f, 0x74, 0x61, 0x74, 0x6f, 0x66, 0x72, 0x69, 0xe5, 0xcd, 0xb6, 0x73,
+ 0x65, 0x6e, 0xfa, 0xdc, 0x16, 0xf2, 0x02, 0x85, 0x73, 0xe9, 0xe0, 0x21,
+ 0x2a, 0x70, 0x6e, 0x65, 0x74, 0xae, 0xd7, 0xa5, 0x70, 0xf2, 0xdf, 0x67,
+ 0xef, 0x03, 0x2a, 0x8c, 0xf0, 0x05, 0x08, 0xe0, 0x23, 0x05, 0x65, 0x72,
+ 0x61, 0x74, 0x69, 0xf6, 0xdf, 0xf8, 0xae, 0x0e, 0x04, 0x04, 0x50, 0x4d,
+ 0x46, 0x5f, 0x48, 0x5e, 0x41, 0xd2, 0x40, 0x6e, 0x9f, 0xf2, 0xe0, 0x20,
+ 0x32, 0xf0, 0xe0, 0x20, 0x67, 0xed, 0x5e, 0xbf, 0xc1, 0x6b, 0xec, 0x04,
+ 0xe0, 0x22, 0xe4, 0x62, 0x6c, 0x6f, 0xe7, 0xe0, 0x22, 0x9e, 0xeb, 0xcc,
+ 0xb8, 0xee, 0x06, 0x05, 0x19, 0x19, 0x03, 0x8f, 0x76, 0x65, 0xf8, 0xca,
+ 0xf9, 0xf4, 0x02, 0x8c, 0xf2, 0x03, 0xdd, 0x4e, 0x61, 0x63, 0x74, 0x6f,
+ 0xf2, 0xe0, 0x20, 0x06, 0xe1, 0x02, 0x83, 0xe7, 0xd0, 0x6d, 0xe3, 0xe0,
+ 0x20, 0xa7, 0xf3, 0x02, 0x91, 0x75, 0xec, 0x02, 0x87, 0xf4, 0x03, 0xc8,
+ 0xa6, 0xe1, 0xda, 0x5c, 0x61, 0x64, 0x6f, 0xae, 0xd5, 0x41, 0x74, 0x72,
+ 0xf5, 0xd5, 0x80, 0xee, 0xde, 0xea, 0xe6, 0x02, 0x85, 0x65, 0x72, 0xe5,
+ 0xdd, 0x27, 0xae, 0x56, 0x59, 0x48, 0xc9, 0xc2, 0xc6, 0x64, 0xef, 0xdf,
+ 0xcc, 0xed, 0x08, 0x04, 0x30, 0x21, 0x5f, 0xd1, 0xc2, 0x57, 0x73, 0xe5,
+ 0xd6, 0x13, 0xf0, 0x02, 0xa6, 0x75, 0x74, 0xe5, 0x05, 0x1a, 0xe0, 0x20,
+ 0xb1, 0xae, 0x02, 0x86, 0x65, 0x73, 0x74, 0xe1, 0xc3, 0x8b, 0x61, 0x6d,
+ 0x61, 0x7a, 0x6f, 0x6e, 0x61, 0x77, 0x73, 0x2e, 0x63, 0x6f, 0xed, 0x42,
+ 0xda, 0xdf, 0x7a, 0x2d, 0xb1, 0xdd, 0xe2, 0xe1, 0x03, 0xdf, 0x30, 0xee,
+ 0xdf, 0xc1, 0xed, 0x02, 0x99, 0x75, 0xee, 0x02, 0x91, 0x69, 0x74, 0xf9,
+ 0x04, 0xe0, 0x22, 0x3b, 0x2d, 0x70, 0x72, 0x6f, 0xae, 0x60, 0x21, 0x5e,
+ 0xc0, 0x76, 0x65, 0xae, 0xda, 0x16, 0x62, 0x61, 0xee, 0xdf, 0x71, 0xae,
+ 0x1b, 0x04, 0x03, 0x09, 0x08, 0x0a, 0x17, 0x06, 0x03, 0x0e, 0x0b, 0x12,
+ 0x0e, 0x0b, 0x03, 0x0d, 0x08, 0x0e, 0x06, 0x0b, 0x08, 0x0d, 0x11, 0x4d,
+ 0x5b, 0xcc, 0x47, 0xf9, 0xe0, 0x20, 0x4d, 0xf7, 0xdf, 0x4b, 0xf6, 0x55,
+ 0x9c, 0x49, 0xfc, 0x40, 0xae, 0x3a, 0xba, 0xf5, 0x5f, 0x35, 0x3c, 0x40,
+ 0x90, 0xc1, 0xf9, 0xf4, 0x5f, 0x30, 0x1e, 0x12, 0x40, 0x82, 0x3c, 0x32,
+ 0x9f, 0xf3, 0x55, 0x81, 0x41, 0xa5, 0x46, 0x95, 0x41, 0x4b, 0x27, 0x1a,
+ 0x03, 0x15, 0x40, 0x79, 0x17, 0x25, 0x40, 0x51, 0x40, 0xdd, 0xc0, 0xa6,
+ 0xf2, 0x5f, 0xfd, 0x17, 0xc0, 0xd6, 0xf1, 0xdf, 0xd2, 0xf0, 0x56, 0x68,
+ 0x48, 0x7e, 0x27, 0x03, 0x17, 0x18, 0x40, 0x79, 0x17, 0x3c, 0x9b, 0xee,
+ 0x56, 0x5a, 0x48, 0xf5, 0x40, 0x72, 0x40, 0x57, 0xc1, 0xa2, 0xed, 0x59,
+ 0x9d, 0x43, 0xe5, 0x41, 0x6b, 0x07, 0x03, 0x17, 0x18, 0x40, 0x79, 0x3c,
+ 0x40, 0x8b, 0xc1, 0x49, 0xec, 0x55, 0x36, 0x41, 0xa5, 0x46, 0x95, 0x41,
+ 0x75, 0x2f, 0x40, 0x90, 0xc0, 0x57, 0xeb, 0x5e, 0xca, 0x03, 0x1e, 0x1b,
+ 0x1e, 0x40, 0x7c, 0xc1, 0xef, 0xea, 0xdf, 0xb0, 0xe9, 0x08, 0x5e, 0xbe,
+ 0x17, 0x40, 0xd0, 0xc0, 0x51, 0xf1, 0xe0, 0x21, 0x79, 0xe8, 0x5e, 0xbc,
+ 0x40, 0xa8, 0x40, 0x6e, 0x9f, 0xe7, 0x5e, 0x8a, 0x40, 0x41, 0x18, 0x1e,
+ 0x40, 0x5b, 0x21, 0x32, 0x1b, 0x1f, 0xba, 0xe6, 0x5e, 0xba, 0x12, 0xc0,
+ 0xf0, 0xe5, 0x54, 0xf1, 0x49, 0xac, 0x40, 0xab, 0x40, 0x53, 0xc1, 0xbd,
+ 0xe4, 0x5e, 0x88, 0x21, 0x40, 0xd0, 0xc1, 0x2e, 0xe3, 0x5d, 0x18, 0x41,
+ 0x6b, 0x1e, 0x1b, 0x1e, 0x40, 0x97, 0x40, 0x51, 0xba, 0xe2, 0x56, 0x76,
+ 0x47, 0xe0, 0x1d, 0x0a, 0x17, 0x12, 0x09, 0x1e, 0x40, 0x5b, 0x17, 0x25,
+ 0x32, 0x9f, 0xe1, 0x54, 0xc0, 0x41, 0x07, 0x48, 0x9b, 0x03, 0x1e, 0x03,
+ 0x36, 0x40, 0xc9, 0x40, 0x59, 0xc1, 0x49, 0xec, 0x03, 0x04, 0x8d, 0x6f,
+ 0xe7, 0xca, 0x4e, 0x6c, 0x65, 0x67, 0xe5, 0x04, 0xe0, 0x21, 0x08, 0x66,
+ 0x61, 0xee, 0xdd, 0xe0, 0xae, 0xcc, 0x56, 0xe7, 0xd7, 0xae, 0x66, 0xe6,
+ 0xdb, 0x95, 0x64, 0xe5, 0x04, 0x08, 0xc9, 0x99, 0xf3, 0x04, 0xe0, 0x20,
+ 0xee, 0xf0, 0xd6, 0x62, 0x62, 0x65, 0x72, 0x67, 0xae, 0xdc, 0xbf, 0xe3,
+ 0x02, 0x85, 0x6f, 0x74, 0xf4, 0xd1, 0x38, 0x6b, 0x70, 0x69, 0x74, 0xae,
+ 0x03, 0x07, 0x87, 0x70, 0x6c, 0x2d, 0x77, 0x61, 0xf7, 0x8e, 0x6e, 0x6c,
+ 0x2d, 0x61, 0x6d, 0xf3, 0x87, 0x66, 0x72, 0x2d, 0x70, 0x61, 0x72, 0x2e,
+ 0x73, 0x63, 0xf7, 0xc8, 0x2d, 0xe1, 0xca, 0x7b, 0xae, 0x1a, 0x05, 0x09,
+ 0x13, 0x05, 0x06, 0x0f, 0x0d, 0x0b, 0x05, 0x09, 0x04, 0x0a, 0x06, 0x09,
+ 0x12, 0x0c, 0x12, 0x58, 0x67, 0x44, 0x94, 0x41, 0xa8, 0xc0, 0xd1, 0xf6,
+ 0x5e, 0x2f, 0xc0, 0xae, 0xf5, 0x5d, 0xd0, 0x0a, 0x03, 0x40, 0xdf, 0xc1,
+ 0xd9, 0xf4, 0x08, 0x5d, 0xa2, 0x1d, 0x21, 0x12, 0xc0, 0x82, 0x65, 0x63,
+ 0x68, 0x6e, 0x6f, 0x6c, 0x6f, 0xe7, 0xcb, 0xe5, 0xf3, 0x5d, 0xb4, 0xc0,
+ 0xb5, 0xf2, 0x5d, 0xb2, 0x07, 0xc2, 0x3f, 0xf0, 0x05, 0x5d, 0xa7, 0xc1,
+ 0x3f, 0xec, 0x04, 0xe0, 0x20, 0x32, 0x61, 0xe3, 0xdf, 0xbc, 0xee, 0x54,
+ 0xe6, 0x48, 0xb4, 0x40, 0x5a, 0x40, 0x72, 0x41, 0x0e, 0xc0, 0x6f, 0xed,
+ 0x5d, 0x8d, 0x03, 0x40, 0xc9, 0x3c, 0x40, 0x74, 0xc1, 0x49, 0xec, 0x53,
+ 0xe0, 0xc9, 0xac, 0xeb, 0x03, 0xde, 0x82, 0xf2, 0x4b, 0xc4, 0xd4, 0x7b,
+ 0xea, 0x5e, 0x4a, 0xb2, 0xe9, 0x5d, 0x91, 0x03, 0x03, 0x40, 0x8e, 0x40,
+ 0x6e, 0x9f, 0xe7, 0x5d, 0x8a, 0x18, 0xc2, 0x89, 0x66, 0x69, 0x6e, 0x61,
+ 0x6e, 0x63, 0xe9, 0xc1, 0x64, 0xe5, 0x02, 0x86, 0x76, 0x65, 0x6e, 0xf4,
+ 0xdf, 0x66, 0x64, 0x75, 0x63, 0x61, 0x74, 0x69, 0xef, 0xcb, 0x2d, 0xe3,
+ 0x5c, 0x93, 0x40, 0xd3, 0x03, 0x36, 0x40, 0x92, 0x37, 0xc1, 0x6e, 0xe2,
+ 0x09, 0x4b, 0x15, 0x4a, 0x1e, 0x48, 0x00, 0x30, 0xa7, 0x75, 0x73, 0x69,
+ 0x6e, 0x65, 0xf3, 0xdf, 0x3f, 0xe1, 0x5d, 0x48, 0x40, 0x94, 0x3c, 0x17,
+ 0xc1, 0xbd, 0xee, 0x08, 0x03, 0x0a, 0x07, 0x03, 0x0d, 0xdf, 0xb8, 0xf4,
+ 0xde, 0x36, 0x73, 0x2e, 0x6a, 0x6f, 0x79, 0x65, 0x6e, 0xf4, 0xdf, 0xc9,
+ 0x70, 0x79, 0x2e, 0x67, 0xe4, 0xca, 0xe9, 0xe7, 0xde, 0x22, 0xae, 0x09,
+ 0x43, 0xd1, 0x43, 0x62, 0x51, 0xa3, 0xc6, 0xaf, 0xf6, 0xde, 0xd2, 0x2d,
+ 0x6e, 0x6f, 0x72, 0x74, 0xe8, 0x02, 0x84, 0x77, 0x65, 0x73, 0x74, 0x2d,
+ 0x31, 0xae, 0x02, 0x94, 0x65, 0x62, 0x2e, 0x61, 0x6d, 0x61, 0x7a, 0x6f,
+ 0x6e, 0x61, 0x77, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0xe3, 0xca, 0xb4,
+ 0x61, 0x69, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x61, 0x6d, 0x61, 0x7a,
+ 0x6f, 0x6e, 0x61, 0x77, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0xe3, 0xc8,
+ 0x2d, 0xec, 0x0a, 0x11, 0x41, 0x23, 0x21, 0x26, 0x5b, 0x9e, 0xc2, 0x56,
+ 0x75, 0xe2, 0x04, 0x04, 0xdf, 0x65, 0x6d, 0xe5, 0xdc, 0xc8, 0xae, 0x03,
+ 0xdc, 0x30, 0xf4, 0xdc, 0x9d, 0xef, 0x03, 0xc1, 0x1b, 0x75, 0xe4, 0x0e,
+ 0x09, 0x0e, 0x32, 0x06, 0x19, 0x0a, 0x0d, 0x20, 0x0c, 0x40, 0x52, 0xde,
+ 0x4d, 0x79, 0x63, 0x6c, 0x75, 0x73, 0x74, 0xe5, 0xc3, 0x82, 0x73, 0x69,
+ 0x74, 0x65, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x65, 0xf2, 0xde, 0x84,
+ 0x6e, 0x73, 0xae, 0x0c, 0x03, 0x06, 0x03, 0x0d, 0x05, 0x4a, 0x81, 0x4e,
+ 0xe4, 0xc2, 0x7d, 0xf5, 0xde, 0x72, 0xf0, 0x4a, 0x07, 0x54, 0x0f, 0xa6,
+ 0xe9, 0xce, 0x13, 0xe3, 0x07, 0x52, 0xc6, 0x4b, 0x66, 0xc0, 0x9e, 0xec,
+ 0x4e, 0x13, 0xd0, 0xc9, 0xe2, 0x5b, 0x91, 0xc2, 0xd2, 0x61, 0x73, 0xe9,
+ 0xdd, 0x29, 0x6a, 0x69, 0x66, 0xe6, 0xdd, 0x4c, 0xe6, 0x03, 0x08, 0x85,
+ 0x75, 0x6e, 0x63, 0x74, 0x69, 0xef, 0xd8, 0xbe, 0x72, 0x6f, 0xee, 0xd2,
+ 0x14, 0x6c, 0x61, 0x72, 0xe5, 0x43, 0x58, 0xdb, 0x2b, 0x65, 0x72, 0x61,
+ 0x2e, 0x73, 0x69, 0x74, 0xe5, 0xde, 0xd6, 0x63, 0x6f, 0x6e, 0x74, 0x72,
+ 0x6f, 0xec, 0x03, 0xdd, 0x94, 0xec, 0xdd, 0x00, 0xe1, 0x02, 0x8f, 0x70,
+ 0xf0, 0x03, 0xde, 0x60, 0x73, 0x2e, 0x64, 0x69, 0x67, 0x69, 0x74, 0xe1,
+ 0xdd, 0xcf, 0x63, 0x63, 0x65, 0x73, 0x73, 0xae, 0x03, 0xde, 0x4e, 0x68,
+ 0x6f, 0xf3, 0xde, 0x4d, 0x36, 0x36, 0xae, 0x02, 0x84, 0x7a, 0xef, 0xcd,
+ 0x88, 0xf7, 0xdd, 0xf0, 0xae, 0x07, 0x0d, 0x10, 0x13, 0x15, 0xd4, 0x15,
+ 0x6e, 0x6f, 0x73, 0x70, 0x61, 0x6d, 0x70, 0x72, 0x6f, 0x78, 0xf9, 0xde,
+ 0x55, 0x6d, 0x65, 0x74, 0x61, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x75, 0x6d,
+ 0x2e, 0x63, 0xfa, 0xde, 0x78, 0x6a, 0x65, 0x6c, 0x61, 0x73, 0x74, 0x69,
+ 0x63, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x2e, 0x74, 0x69, 0xed, 0xdd, 0xdc,
+ 0x69, 0x6e, 0x74, 0x65, 0x72, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x6f, 0x6c,
+ 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0xae, 0xdd, 0x73, 0x67, 0x6f, 0xef,
+ 0xdb, 0x2d, 0x2d, 0x66, 0x72, 0x31, 0x2e, 0x75, 0x6e, 0x69, 0x73, 0x70,
+ 0x61, 0xe3, 0xd4, 0x28, 0x74, 0xe8, 0xc8, 0x19, 0xe9, 0x03, 0x06, 0x8d,
+ 0x6e, 0xe9, 0x47, 0xe1, 0xc9, 0xec, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63,
+ 0x72, 0x79, 0x70, 0x74, 0xe5, 0xd4, 0x05, 0x63, 0xeb, 0x03, 0xde, 0x1f,
+ 0x72, 0x69, 0xf3, 0xd7, 0xcd, 0xe5, 0x03, 0x13, 0x8b, 0x76, 0x65, 0x72,
+ 0x61, 0x70, 0x70, 0x73, 0xae, 0x04, 0x04, 0xdc, 0xb5, 0x74, 0xe5, 0xdd,
+ 0x23, 0xe3, 0xdd, 0xbf, 0x72, 0xeb, 0x03, 0xda, 0x5a, 0x73, 0x74, 0x61,
+ 0xe7, 0xda, 0x55, 0x61, 0xee, 0xc7, 0xd2, 0xe1, 0x02, 0x86, 0x6e, 0x2e,
+ 0x72, 0xe9, 0xdd, 0xad, 0x69, 0xed, 0xdb, 0x2d, 0xeb, 0x41, 0xfb, 0xc9,
+ 0xef, 0xe9, 0x0e, 0x08, 0x40, 0x54, 0x15, 0x04, 0x07, 0x0c, 0x59, 0x91,
+ 0x41, 0x64, 0xc2, 0x56, 0x76, 0x69, 0x6c, 0x61, 0x76, 0xe9, 0xda, 0x96,
+ 0xf4, 0x04, 0x40, 0x46, 0x85, 0xf9, 0x03, 0xdd, 0xc2, 0xae, 0x06, 0x08,
+ 0x0f, 0x07, 0xdc, 0x52, 0x79, 0x6f, 0x6b, 0x6f, 0x68, 0x61, 0xed, 0x95,
+ 0xf3, 0x02, 0x85, 0x65, 0x6e, 0x64, 0xe1, 0xa7, 0x61, 0x70, 0x70, 0x6f,
+ 0x72, 0xef, 0xa1, 0x6e, 0x61, 0x67, 0x6f, 0x79, 0xe1, 0x9a, 0xeb, 0x03,
+ 0x04, 0x8a, 0x6f, 0x62, 0xe5, 0x92, 0x69, 0x74, 0x61, 0x6b, 0x79, 0x75,
+ 0x73, 0x68, 0xf5, 0x88, 0x61, 0x77, 0x61, 0x73, 0x61, 0x6b, 0x69, 0x2e,
+ 0x6a, 0x70, 0x85, 0xe9, 0x51, 0x17, 0xcc, 0x68, 0x61, 0xe4, 0xd7, 0xbf,
+ 0xf3, 0x02, 0x87, 0x74, 0x72, 0x6f, 0x6e, 0xae, 0xdc, 0x82, 0x63, 0xef,
+ 0x03, 0xdd, 0x68, 0x66, 0x72, 0x65, 0xe1, 0xd8, 0xea, 0x72, 0xe3, 0xdb,
+ 0x1a, 0x70, 0x72, 0x69, 0x61, 0xee, 0xda, 0xed, 0xe5, 0x02, 0x85, 0x73,
+ 0x7a, 0xf9, 0xcb, 0x25, 0x6e, 0xe3, 0xda, 0x3d, 0xe1, 0xc3, 0xd3, 0xe8,
+ 0x0b, 0x2a, 0x0a, 0x0d, 0x1f, 0x40, 0xcd, 0x2e, 0x37, 0xdb, 0xaa, 0xf5,
+ 0x05, 0x03, 0x13, 0xdc, 0xde, 0xf2, 0xc6, 0xf7, 0x6f, 0xae, 0x08, 0x51,
+ 0x23, 0x48, 0x6b, 0x41, 0x6b, 0x89, 0x79, 0x61, 0x6d, 0x61, 0x6e, 0x61,
+ 0xf3, 0xda, 0xc1, 0x6e, 0xe7, 0x02, 0x85, 0x6e, 0x61, 0xed, 0xc5, 0x83,
+ 0x62, 0x75, 0xeb, 0xc5, 0x7e, 0x74, 0x72, 0x2e, 0x6b, 0x31, 0x32, 0x2e,
+ 0xed, 0xc2, 0xae, 0xf2, 0x02, 0x84, 0x6f, 0xed, 0xdb, 0x45, 0x69, 0x73,
+ 0x74, 0xed, 0xc7, 0x6b, 0xef, 0x05, 0x03, 0x04, 0x09, 0x85, 0xf9, 0xd2,
+ 0x12, 0x77, 0xe4, 0xc9, 0x61, 0xf3, 0x02, 0x82, 0xe8, 0x82, 0x65, 0xe9,
+ 0xda, 0xb6, 0x6e, 0x61, 0xee, 0xda, 0xb1, 0x66, 0xf5, 0xd9, 0x42, 0xe9,
+ 0x10, 0x09, 0x09, 0x0b, 0x27, 0x0a, 0x08, 0x07, 0x06, 0x28, 0x0c, 0x0d,
+ 0x07, 0x03, 0xd9, 0xf0, 0x7a, 0x75, 0x2e, 0x74, 0x6f, 0x74, 0xf4, 0xd3,
+ 0x36, 0x79, 0x6f, 0x64, 0x61, 0xae, 0x53, 0x61, 0xc5, 0xc1, 0xf4, 0x02,
+ 0x85, 0x6f, 0x73, 0xe5, 0xda, 0xab, 0xe1, 0xd6, 0xdf, 0xf2, 0x02, 0x84,
+ 0x79, 0xf5, 0xd6, 0xd8, 0x75, 0x72, 0x67, 0x69, 0x65, 0x6e, 0x73, 0x2d,
+ 0x64, 0x65, 0x6e, 0x74, 0x69, 0x73, 0x74, 0x65, 0xf3, 0x03, 0xdb, 0xc7,
+ 0x2d, 0x65, 0x6e, 0x2d, 0x66, 0x72, 0x61, 0x6e, 0x63, 0xe5, 0xdb, 0xbd,
+ 0xf0, 0x02, 0x83, 0xf3, 0xdc, 0x41, 0x70, 0xf5, 0xd7, 0x3e, 0xee, 0x03,
+ 0xcd, 0x79, 0x74, 0xe1, 0xda, 0x0b, 0x6d, 0x6b, 0x65, 0x6e, 0xf4, 0xda,
+ 0x33, 0x6c, 0x6c, 0x6f, 0xf5, 0xc4, 0xc3, 0x6b, 0xf5, 0x06, 0x03, 0x0b,
+ 0x04, 0x02, 0x88, 0xfa, 0xc4, 0xa5, 0xf3, 0x02, 0x84, 0x68, 0x69, 0xee,
+ 0x94, 0x65, 0xe9, 0xd4, 0x31, 0x6d, 0xe1, 0xd8, 0xe7, 0xea, 0x8a, 0x68,
+ 0xef, 0x03, 0xc4, 0x8f, 0xeb, 0xd7, 0x64, 0x67, 0xef, 0xc4, 0x8a, 0x6a,
+ 0x69, 0x77, 0x61, 0x2e, 0x6e, 0x61, 0x67, 0x61, 0xf3, 0xd4, 0x18, 0x68,
+ 0x61, 0x79, 0x61, 0x61, 0x6b, 0x61, 0x73, 0x61, 0x6b, 0xe1, 0xda, 0x01,
+ 0x67, 0x61, 0x73, 0x61, 0xeb, 0xcf, 0x29, 0xe5, 0xcf, 0x8b, 0xe3, 0x02,
+ 0x86, 0x68, 0x69, 0x62, 0xf5, 0xd0, 0x5f, 0x61, 0x70, 0xf0, 0xcb, 0xa7,
+ 0xe5, 0x02, 0xa5, 0xf2, 0x02, 0x97, 0xee, 0x02, 0x84, 0x6f, 0x76, 0xf4,
+ 0x96, 0xe9, 0x03, 0x05, 0x83, 0x76, 0x74, 0x73, 0xe9, 0x8f, 0x68, 0xe9,
+ 0x83, 0x67, 0x6f, 0xf6, 0x88, 0x6b, 0x61, 0xf3, 0x02, 0x81, 0x73, 0x79,
+ 0x2e, 0xf5, 0xd9, 0xef, 0x61, 0xf0, 0x5b, 0xa3, 0xc0, 0x42, 0xe1, 0x07,
+ 0x0b, 0x10, 0x49, 0xbf, 0xcf, 0xee, 0xf2, 0x02, 0x85, 0x74, 0x65, 0xf2,
+ 0xd8, 0xa1, 0xe9, 0xc9, 0xae, 0xee, 0x03, 0xd6, 0x10, 0x6e, 0x65, 0xec,
+ 0x03, 0xdb, 0xc4, 0x73, 0x64, 0x76, 0xf2, 0xdb, 0x5d, 0xed, 0x02, 0x8a,
+ 0x70, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0xf0, 0xd8, 0x81, 0x62, 0x61,
+ 0x67, 0x72, 0xe9, 0xda, 0xe0, 0xae, 0x05, 0x54, 0xbf, 0xc4, 0x90, 0x74,
+ 0x72, 0x65, 0x6e, 0x64, 0x68, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0xe7, 0xc3,
+ 0x09, 0xe6, 0x07, 0x58, 0xef, 0x40, 0xa5, 0xc1, 0xfa, 0x2d, 0x69, 0x70,
+ 0xe6, 0xda, 0x24, 0xe5, 0x08, 0x12, 0x11, 0x0d, 0x4b, 0xb5, 0xcd, 0xc5,
+ 0x73, 0x65, 0x6e, 0xe1, 0x02, 0x81, 0x2d, 0x66, 0x6f, 0x72, 0xec, 0x03,
+ 0xd2, 0x7c, 0x1f, 0xc3, 0xcb, 0x29, 0xf2, 0x03, 0xd9, 0xe5, 0xf4, 0x02,
+ 0x84, 0x6d, 0xe7, 0xc2, 0x72, 0x69, 0x66, 0x69, 0xe3, 0xd8, 0x27, 0x6e,
+ 0xf4, 0x03, 0xc7, 0x10, 0x72, 0x61, 0x6c, 0x75, 0x73, 0xae, 0xda, 0xdf,
+ 0x63, 0x68, 0x69, 0xf2, 0xd3, 0x0f, 0xe4, 0x05, 0x49, 0x3d, 0xd2, 0x06,
+ 0xee, 0x03, 0x0f, 0xb8, 0x37, 0x37, 0x2d, 0xf3, 0x02, 0x87, 0x74, 0x6f,
+ 0x72, 0x61, 0xe7, 0xd2, 0xf8, 0xf3, 0xac, 0xae, 0x02, 0x94, 0x70, 0x72,
+ 0x6f, 0x64, 0x2e, 0x61, 0x74, 0x6c, 0x61, 0x73, 0x73, 0x69, 0x61, 0x6e,
+ 0x2d, 0x64, 0x65, 0xf6, 0xda, 0xb8, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x66,
+ 0x6c, 0x61, 0x72, 0xe5, 0x05, 0x08, 0x03, 0xda, 0x9c, 0x67, 0x6c, 0x6f,
+ 0x62, 0x61, 0xec, 0xda, 0xa1, 0xe3, 0xc6, 0xdf, 0x61, 0x6e, 0x79, 0x63,
+ 0xe1, 0xce, 0x21, 0x2d, 0x65, 0x64, 0xe7, 0xcb, 0xc8, 0xe3, 0x04, 0x03,
+ 0xda, 0xea, 0xe9, 0xcc, 0x6d, 0xae, 0x13, 0x06, 0x06, 0x05, 0x07, 0x04,
+ 0x03, 0x04, 0x05, 0x17, 0x0a, 0x02, 0x06, 0x0b, 0x03, 0x06, 0x02, 0x09,
+ 0x8d, 0xf7, 0x32, 0x1b, 0x2c, 0xd1, 0x0d, 0xf6, 0x40, 0x6d, 0x06, 0xd1,
+ 0x0d, 0xf5, 0x40, 0x67, 0xd8, 0x88, 0xf4, 0x03, 0xc0, 0x41, 0xf8, 0xd4,
+ 0x94, 0xf3, 0x40, 0x40, 0x94, 0xf2, 0xd1, 0x6a, 0xf0, 0x40, 0x5a, 0x8f,
+ 0xef, 0x18, 0x40, 0x4d, 0x86, 0xee, 0x0a, 0x03, 0x03, 0x03, 0x12, 0x0b,
+ 0x11, 0x03, 0xd8, 0x6f, 0xf6, 0xd4, 0x76, 0xed, 0xd4, 0x73, 0xea, 0xd4,
+ 0x70, 0xe8, 0xd4, 0x6d, 0xed, 0x16, 0x03, 0x11, 0x0a, 0x03, 0x03, 0x0c,
+ 0xd1, 0x01, 0xec, 0xb0, 0xeb, 0x02, 0xb8, 0xf9, 0xd4, 0x5b, 0xe9, 0x04,
+ 0x03, 0x21, 0x92, 0xee, 0xd4, 0x53, 0xe4, 0xd4, 0x50, 0xe8, 0xd1, 0x2a,
+ 0xe7, 0x02, 0x98, 0xf5, 0xd4, 0x47, 0xe6, 0xa6, 0xe4, 0x02, 0x83, 0xe5,
+ 0xd4, 0x3f, 0xe3, 0xd4, 0x3c, 0xe3, 0x03, 0x03, 0x83, 0xf4, 0xd4, 0x35,
+ 0xef, 0xd4, 0x32, 0xe1, 0xd4, 0x2f, 0xe1, 0x05, 0x03, 0x03, 0x03, 0x83,
+ 0xfa, 0xd4, 0x26, 0xf3, 0xd4, 0x23, 0xf2, 0xd4, 0x20, 0xec, 0xd4, 0x1d,
+ 0xeb, 0xd4, 0x1a, 0xe2, 0x09, 0x57, 0x1e, 0x40, 0xc6, 0x40, 0x5c, 0xc0,
+ 0x76, 0xe7, 0xc6, 0xc8, 0xe1, 0x14, 0x05, 0x2a, 0x1d, 0x40, 0x5a, 0x16,
+ 0x04, 0x28, 0x40, 0x4b, 0x28, 0x05, 0x07, 0x07, 0x0d, 0x08, 0x1c, 0xd8,
+ 0x83, 0x78, 0x69, 0xe1, 0xc1, 0x03, 0xf4, 0x06, 0x0b, 0x05, 0x09, 0xd9,
+ 0xfd, 0x68, 0x6f, 0x6c, 0x69, 0xe3, 0x03, 0xda, 0x0e, 0xae, 0xd6, 0x9b,
+ 0x66, 0x6f, 0xef, 0xd8, 0xc2, 0x65, 0x72, 0x69, 0x6e, 0xe7, 0x56, 0xcf,
+ 0xc3, 0x32, 0x61, 0xee, 0x03, 0xd2, 0xe1, 0x7a, 0x61, 0xf2, 0xd7, 0x9e,
+ 0xf3, 0x05, 0x07, 0x07, 0xd6, 0xfc, 0x69, 0x6e, 0xef, 0x58, 0x9e, 0xc1,
+ 0x4c, 0xe5, 0x03, 0xd9, 0xe2, 0xf2, 0xd0, 0xdc, 0xe1, 0x03, 0xd9, 0xdb,
+ 0x63, 0x61, 0xed, 0xd9, 0x75, 0xf2, 0x0a, 0x14, 0x04, 0x0a, 0x03, 0x12,
+ 0x56, 0xd8, 0xc2, 0xbc, 0xf2, 0x02, 0x85, 0x64, 0x2e, 0xe3, 0xd9, 0x48,
+ 0x61, 0x72, 0xe1, 0x02, 0x81, 0x2d, 0x6d, 0x61, 0x73, 0xf3, 0xd2, 0xa3,
+ 0x67, 0xef, 0xd6, 0x83, 0xe5, 0x03, 0xd9, 0xaf, 0x65, 0xf2, 0x56, 0xf1,
+ 0xc2, 0xbc, 0xe4, 0xd6, 0xec, 0x62, 0x6f, 0x6e, 0x69, 0xe1, 0x02, 0x81,
+ 0x2d, 0x69, 0x67, 0x6c, 0x65, 0x73, 0x69, 0x61, 0xf3, 0xd7, 0x40, 0xe1,
+ 0x02, 0x83, 0xf6, 0xd4, 0xc9, 0x63, 0x61, 0x6c, 0x2e, 0x6d, 0x79, 0x74,
+ 0x68, 0x69, 0x63, 0x2d, 0x62, 0x65, 0x61, 0x73, 0xf4, 0xd8, 0x18, 0xf0,
+ 0x03, 0x04, 0x88, 0x6f, 0xef, 0xd9, 0x34, 0x69, 0x74, 0x61, 0xec, 0x42,
+ 0xab, 0xd6, 0xc5, 0x65, 0x74, 0x6f, 0xf7, 0xd7, 0xe4, 0x6f, 0xe2, 0xd0,
+ 0x24, 0xee, 0x07, 0x0d, 0x05, 0x05, 0x05, 0xd1, 0x4f, 0x76, 0x61, 0x2d,
+ 0x61, 0x70, 0x70, 0x73, 0x2e, 0xe3, 0x44, 0x70, 0xd4, 0xac, 0x74, 0x68,
+ 0xef, 0xd0, 0x0d, 0x64, 0x79, 0xf0, 0xc9, 0x83, 0x61, 0x72, 0xf9, 0xce,
+ 0x4e, 0x2e, 0xf2, 0xd8, 0x95, 0xed, 0x09, 0x38, 0x04, 0x48, 0x3a, 0x4e,
+ 0x64, 0xc2, 0x56, 0xf0, 0x05, 0x07, 0x1f, 0xd9, 0x04, 0x6f, 0x62, 0x61,
+ 0x73, 0xf3, 0xd6, 0xce, 0xe9, 0x02, 0x8f, 0x6e, 0xe1, 0x02, 0x83, 0xf3,
+ 0xd7, 0x76, 0x67, 0x72, 0x61, 0x6e, 0x64, 0xe5, 0xd7, 0x6e, 0x64, 0x61,
+ 0x6e, 0xef, 0x02, 0x81, 0x2d, 0x6d, 0x65, 0x64, 0xe9, 0xd6, 0xaf, 0xe1,
+ 0x02, 0x83, 0xee, 0xd1, 0xe9, 0x69, 0x67, 0x6e, 0xae, 0xce, 0xef, 0x65,
+ 0xf2, 0xd6, 0xfc, 0x64, 0x76, 0xf2, 0xd5, 0xcc, 0xec, 0x0a, 0x08, 0x08,
+ 0x09, 0x56, 0x29, 0x40, 0x4c, 0xc2, 0x56, 0x76, 0x69, 0x6e, 0x6b, 0x6c,
+ 0xe5, 0xd7, 0x59, 0x74, 0x61, 0x6e, 0x69, 0x73, 0xf3, 0xcf, 0xcf, 0x63,
+ 0x75, 0x6c, 0x61, 0x74, 0x6f, 0xf2, 0xcc, 0x80, 0x61, 0xe2, 0xd1, 0xb1,
+ 0x68, 0x63, 0xe5, 0xcf, 0xe3, 0x67, 0x6c, 0x69, 0x61, 0xf2, 0xcf, 0xc8,
+ 0xe6, 0x03, 0xd6, 0xf9, 0xea, 0xd7, 0x50, 0xe2, 0x03, 0xd8, 0xb0, 0x6c,
+ 0x65, 0x2d, 0x6d, 0x6f, 0x64, 0xe5, 0xd5, 0x83, 0x61, 0xae, 0x03, 0xd5,
+ 0x71, 0xec, 0xd8, 0x07, 0xae, 0x08, 0x0e, 0x51, 0xa3, 0x41, 0x59, 0xc1,
+ 0x33, 0x72, 0x65, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x2e, 0x63, 0x6c, 0x6f,
+ 0xf5, 0xc4, 0x0f, 0xe9, 0x56, 0x76, 0xc0, 0x8d, 0x2d, 0x63, 0x65, 0x6e,
+ 0x74, 0x72, 0x61, 0xec, 0xd3, 0xed, 0x36, 0xb6, 0xc1, 0xcc, 0xae, 0x08,
+ 0x08, 0x42, 0xc9, 0x43, 0x9c, 0xd1, 0xfd, 0x74, 0x73, 0x2e, 0x6e, 0x65,
+ 0xf4, 0xd8, 0x62, 0x63, 0x64, 0x6e, 0x37, 0xb7, 0xd5, 0x3a, 0xe2, 0x24,
+ 0x35, 0x17, 0x22, 0x40, 0x83, 0x05, 0x13, 0x40, 0x96, 0x0c, 0x40, 0xe9,
+ 0x15, 0x19, 0x41, 0x57, 0x1b, 0x41, 0x14, 0x0d, 0x09, 0x40, 0xd7, 0x08,
+ 0x15, 0x10, 0x42, 0x42, 0x09, 0x44, 0x2a, 0x47, 0x33, 0xc1, 0x6b, 0x1f,
+ 0xc3, 0x04, 0x0a, 0x05, 0x91, 0xf8, 0x02, 0x83, 0xed, 0xcf, 0x50, 0xae,
+ 0x42, 0x7b, 0x86, 0x66, 0x72, 0xf5, 0xcc, 0x01, 0xe5, 0x02, 0x83, 0xf4,
+ 0xc6, 0x6b, 0x64, 0x1f, 0x43, 0x65, 0x64, 0x64, 0x6a, 0x1f, 0xc3, 0xd6,
+ 0x2b, 0xe1, 0x05, 0x03, 0x47, 0xf3, 0x8c, 0xec, 0xc4, 0xe2, 0x69, 0x64,
+ 0x1f, 0xc3, 0xc7, 0xf8, 0xfa, 0x07, 0x55, 0x18, 0x40, 0x8d, 0xc2, 0x56,
+ 0x7a, 0x2e, 0x64, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x65, 0x61, 0x72, 0x74,
+ 0xe8, 0xd7, 0xea, 0xf9, 0x07, 0x05, 0x03, 0x03, 0x06, 0xd7, 0xd3, 0x74,
+ 0x6f, 0xed, 0xd2, 0x9e, 0xeb, 0xc7, 0x6f, 0xe7, 0xca, 0x9a, 0x65, 0x6e,
+ 0x2e, 0xf3, 0xc6, 0xa6, 0x64, 0x67, 0x6f, 0x73, 0x7a, 0x63, 0xfa, 0xd2,
+ 0x89, 0xf5, 0x0b, 0x09, 0x0e, 0x03, 0x12, 0x18, 0x04, 0x06, 0x24, 0xd5,
+ 0x64, 0xfa, 0x03, 0xd4, 0xf4, 0x65, 0x6e, 0xae, 0xcb, 0xb1, 0xf9, 0x03,
+ 0xd7, 0xb1, 0x73, 0x68, 0xef, 0x03, 0xc7, 0xea, 0x75, 0xf3, 0xc8, 0x7d,
+ 0xf4, 0xd7, 0x64, 0xf3, 0x02, 0x89, 0x69, 0x6e, 0x65, 0x73, 0xf3, 0x56,
+ 0x16, 0xc1, 0x86, 0x61, 0x6e, 0x2e, 0xeb, 0xd5, 0xf1, 0xee, 0x02, 0x84,
+ 0x6b, 0xf9, 0xd1, 0x01, 0x67, 0xef, 0x02, 0x88, 0x74, 0x61, 0x6b, 0x61,
+ 0x64, 0xe1, 0xc5, 0x14, 0x6f, 0x6e, 0xef, 0xc5, 0x0f, 0x6c, 0xf3, 0xc7,
+ 0x1c, 0x6b, 0x68, 0x61, 0xf2, 0xd5, 0x34, 0x69, 0xec, 0x02, 0x8a, 0x74,
+ 0x77, 0x69, 0x74, 0x68, 0x64, 0x61, 0xf2, 0xd2, 0xea, 0xe4, 0x04, 0x0b,
+ 0xd7, 0x52, 0x65, 0xf2, 0x03, 0xd4, 0x9c, 0x2e, 0x63, 0x6f, 0xe4, 0xd7,
+ 0x4b, 0x2e, 0x72, 0x75, 0xee, 0xd7, 0x4a, 0x64, 0x65, 0xea, 0xd0, 0x50,
+ 0xf4, 0x54, 0xf0, 0xc2, 0x56, 0xf3, 0x06, 0x09, 0x54, 0xdc, 0xc2, 0x56,
+ 0x73, 0x2e, 0x64, 0x65, 0x73, 0x69, 0xe7, 0xc2, 0x53, 0xe2, 0xd5, 0x8c,
+ 0xf2, 0x0a, 0x09, 0x09, 0x0e, 0x31, 0x12, 0x0d, 0x16, 0xd6, 0x9e, 0x1f,
+ 0x43, 0x78, 0x6e, 0x6e, 0x1f, 0x43, 0xf8, 0xb4, 0xf9, 0x02, 0x83, 0xee,
+ 0xd5, 0x2e, 0xe1, 0xd0, 0x4e, 0xf5, 0x02, 0x85, 0x73, 0x73, 0xe5, 0xc3,
+ 0x60, 0x6d, 0x75, 0x6e, 0xe4, 0xcf, 0x59, 0xef, 0x05, 0x0f, 0x04, 0x0a,
+ 0x89, 0x77, 0x73, 0x65, 0x72, 0x73, 0x61, 0x66, 0x65, 0x74, 0x79, 0x6d,
+ 0x61, 0xf2, 0xcd, 0x08, 0x74, 0xe8, 0xc2, 0xa6, 0x6e, 0x6e, 0x6f, 0xf9,
+ 0x03, 0xd4, 0xfc, 0xf3, 0xcf, 0xc3, 0x6b, 0xe5, 0x03, 0xc8, 0xa3, 0x2d,
+ 0xe9, 0xca, 0x02, 0x61, 0x64, 0xf7, 0xcf, 0x9c, 0xe9, 0x02, 0x86, 0x6e,
+ 0x64, 0x69, 0xf3, 0xcd, 0xd7, 0x64, 0x67, 0x65, 0x73, 0x74, 0x6f, 0xee,
+ 0xd5, 0x05, 0xe5, 0x02, 0x84, 0x73, 0xe3, 0xcf, 0xa5, 0x6d, 0x61, 0x6e,
+ 0xe7, 0xca, 0x95, 0xe1, 0x03, 0x09, 0x84, 0x73, 0x69, 0x6c, 0x69, 0x61,
+ 0x2e, 0xed, 0xd6, 0x02, 0x6e, 0xe4, 0xc4, 0xa5, 0x64, 0x65, 0xf3, 0xcb,
+ 0xc2, 0xae, 0x54, 0x48, 0xc2, 0x1f, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x64,
+ 0xae, 0x55, 0xba, 0x40, 0x76, 0xac, 0xef, 0x13, 0x04, 0x0b, 0x0e, 0x14,
+ 0x0d, 0x1b, 0x0a, 0x05, 0x3b, 0x03, 0x03, 0x08, 0x09, 0x0a, 0x53, 0xa4,
+ 0xc2, 0x11, 0x7a, 0xe5, 0xc6, 0x1c, 0xf9, 0x03, 0xd6, 0x2f, 0x66, 0x72,
+ 0x69, 0x65, 0xee, 0xd5, 0x26, 0xf8, 0x04, 0x05, 0xd6, 0x60, 0x66, 0x75,
+ 0xf3, 0xcc, 0x49, 0x2e, 0xe3, 0xd4, 0x84, 0xf5, 0x02, 0x89, 0x74, 0xe9,
+ 0x03, 0xd5, 0x21, 0x71, 0xf5, 0xd4, 0x94, 0xee, 0x03, 0xce, 0xde, 0x63,
+ 0xe5, 0xd2, 0x77, 0xf3, 0x02, 0x87, 0xf4, 0x03, 0xce, 0x52, 0xe9, 0xd3,
+ 0x87, 0xe3, 0xd3, 0x5a, 0xef, 0x06, 0x04, 0x55, 0xee, 0xc0, 0x42, 0x6d,
+ 0xec, 0xce, 0x81, 0xeb, 0x04, 0x07, 0xd6, 0x24, 0x6f, 0x6e, 0x6c, 0x69,
+ 0xee, 0xd2, 0x81, 0x69, 0xee, 0xd6, 0x21, 0xee, 0x05, 0x45, 0xb0, 0xcd,
+ 0xcb, 0x65, 0xf3, 0xcb, 0x26, 0xed, 0x4d, 0x37, 0xc8, 0xde, 0xec, 0x06,
+ 0x0e, 0x03, 0x04, 0x04, 0x8a, 0x7a, 0x61, 0x6e, 0xef, 0x03, 0xd3, 0xad,
+ 0x2d, 0x61, 0x6c, 0x74, 0xef, 0xce, 0x61, 0xf4, 0xd4, 0xaf, 0x6f, 0xe7,
+ 0xcd, 0x1f, 0x69, 0xf6, 0xd2, 0xe3, 0x65, 0x73, 0x6c, 0x61, 0x77, 0x69,
+ 0x65, 0xe3, 0xd0, 0xa6, 0x64, 0x6c, 0x79, 0x67, 0x6f, 0x69, 0x6e, 0x67,
+ 0x6e, 0x6f, 0x77, 0x68, 0x65, 0x72, 0xe5, 0xd2, 0xb3, 0xeb, 0xcf, 0x19,
+ 0xe6, 0xd3, 0xd8, 0x65, 0x68, 0x72, 0x69, 0x6e, 0xe7, 0xc1, 0x83, 0xe4,
+ 0x03, 0xcc, 0xe7, 0x1f, 0x43, 0xf8, 0xd3, 0xd9, 0xe1, 0x03, 0xcb, 0xbd,
+ 0x76, 0x69, 0x73, 0xf4, 0xcb, 0xc0, 0xae, 0x04, 0x06, 0xd3, 0x55, 0x74,
+ 0x65, 0x6c, 0xe5, 0xca, 0xa1, 0x6e, 0x6f, 0x72, 0xe4, 0xc8, 0x65, 0xee,
+ 0x06, 0x05, 0x53, 0x42, 0xc2, 0x56, 0x72, 0x2e, 0xec, 0xd3, 0xc0, 0x70,
+ 0x70, 0x61, 0x72, 0x69, 0x62, 0xe1, 0xd2, 0xd5, 0xed, 0x07, 0x0e, 0x52,
+ 0xb6, 0x07, 0xc2, 0xbc, 0x6f, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d,
+ 0x65, 0x6e, 0x74, 0xf3, 0xd2, 0x56, 0xe4, 0xd3, 0xd3, 0xec, 0x06, 0x10,
+ 0x41, 0x2a, 0xd1, 0xdf, 0xf5, 0x02, 0x84, 0x73, 0xe8, 0xd5, 0x28, 0xe5,
+ 0x03, 0xd5, 0x64, 0x62, 0x69, 0xf4, 0xcb, 0x48, 0xef, 0x06, 0x05, 0x07,
+ 0x40, 0xff, 0x89, 0x78, 0x63, 0xed, 0xd3, 0xef, 0x6f, 0x6d, 0x62, 0x65,
+ 0xf2, 0xd5, 0x4d, 0xe7, 0x06, 0x40, 0xea, 0x09, 0xd4, 0x52, 0xf3, 0x04,
+ 0x03, 0xc0, 0xd7, 0xf9, 0xcd, 0x02, 0x70, 0x6f, 0x74, 0xae, 0x16, 0x03,
+ 0x03, 0x07, 0x08, 0x06, 0x03, 0x05, 0x05, 0x0a, 0x06, 0x03, 0x0a, 0x06,
+ 0x03, 0x04, 0x04, 0x40, 0x55, 0x0b, 0xd4, 0x2c, 0xf6, 0xc0, 0x41, 0xf5,
+ 0xd1, 0xfd, 0xf4, 0x03, 0xc0, 0x9e, 0xf7, 0xd4, 0xe5, 0xf3, 0x34, 0x51,
+ 0xbf, 0x42, 0x7b, 0x0d, 0xa1, 0xf2, 0x54, 0x25, 0x37, 0x0a, 0xaa, 0xf1,
+ 0xd3, 0x2d, 0xf0, 0x54, 0x5d, 0xc0, 0x47, 0xee, 0x54, 0x13, 0xc0, 0x6f,
+ 0xed, 0x40, 0x62, 0x1d, 0x48, 0x31, 0x4b, 0x80, 0xc0, 0x51, 0xec, 0x54,
+ 0x08, 0x40, 0x4e, 0xba, 0xeb, 0xd4, 0x20, 0xe9, 0x06, 0x54, 0x30, 0x0a,
+ 0xc0, 0x47, 0xee, 0xd4, 0xad, 0xe8, 0x53, 0xf5, 0x1e, 0xc0, 0x51, 0xe7,
+ 0xd4, 0x0d, 0xe6, 0x54, 0x0a, 0xb0, 0xe4, 0x54, 0x29, 0xae, 0xe3, 0x0b,
+ 0x40, 0xf7, 0x50, 0x52, 0x41, 0x9e, 0x40, 0xd5, 0x19, 0x88, 0xef, 0x02,
+ 0xad, 0xed, 0x03, 0xd4, 0x87, 0xae, 0x08, 0x02, 0x03, 0x03, 0x03, 0x06,
+ 0x04, 0x87, 0xf5, 0x98, 0xf4, 0xd3, 0xe4, 0xee, 0xd1, 0x89, 0xed, 0xd4,
+ 0x48, 0xe5, 0x51, 0x83, 0x42, 0x71, 0x8a, 0xe3, 0x07, 0xd4, 0x1b, 0xe2,
+ 0x03, 0xd3, 0xce, 0xf9, 0xd4, 0x64, 0xe1, 0x53, 0xac, 0x9e, 0xae, 0x08,
+ 0x03, 0x03, 0x03, 0x50, 0xcf, 0xc2, 0xda, 0xfa, 0xd2, 0xad, 0xee, 0xd1,
+ 0x0c, 0xeb, 0xd3, 0xda, 0xe9, 0x03, 0xd3, 0x8f, 0xe4, 0xd4, 0x47, 0xe2,
+ 0x07, 0x51, 0x4e, 0x41, 0x48, 0xc1, 0x33, 0xea, 0xd4, 0x3c, 0xe1, 0x53,
+ 0x80, 0x40, 0x45, 0xc0, 0x73, 0x69, 0x74, 0x65, 0xae, 0x03, 0xd1, 0x3b,
+ 0x78, 0xf9, 0xd0, 0xe5, 0x64, 0x6e, 0x73, 0xae, 0x51, 0x33, 0x42, 0xc2,
+ 0xac, 0x2e, 0xe2, 0x52, 0x7b, 0xb2, 0x63, 0x6b, 0x62, 0x75, 0x73, 0x74,
+ 0xe5, 0xd2, 0xa3, 0x62, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x77, 0x69,
+ 0x6e, 0x64, 0x6f, 0xf7, 0xd3, 0xd3, 0x61, 0x63, 0xeb, 0x04, 0x06, 0xd4,
+ 0x28, 0x66, 0x72, 0x69, 0xe4, 0xcc, 0xf1, 0x62, 0x61, 0x75, 0x64, 0x63,
+ 0x64, 0xee, 0xd3, 0xbe, 0xea, 0x06, 0x04, 0x06, 0x07, 0xd4, 0x07, 0x75,
+ 0xe7, 0xcd, 0x5a, 0x65, 0x72, 0x6b, 0xf2, 0xc6, 0xa6, 0x61, 0x72, 0xeb,
+ 0x47, 0xe3, 0xc2, 0xf4, 0xae, 0xce, 0xd6, 0xe9, 0x13, 0x40, 0x5d, 0x16,
+ 0x0f, 0x05, 0x05, 0x22, 0x03, 0x08, 0x05, 0x23, 0x0d, 0x50, 0x63, 0x40,
+ 0x49, 0xc2, 0x56, 0xfa, 0x04, 0x04, 0xd3, 0xe7, 0x65, 0xee, 0xcd, 0xa2,
+ 0xae, 0x18, 0x03, 0x04, 0x03, 0x07, 0x06, 0x05, 0x06, 0x03, 0x03, 0x05,
+ 0x03, 0x03, 0x03, 0x4b, 0x9b, 0x43, 0x14, 0x41, 0xfb, 0x40, 0x5a, 0xc2,
+ 0x1a, 0xfa, 0xd1, 0x28, 0x77, 0xe6, 0xd3, 0x96, 0xf5, 0xd1, 0xec, 0xf4,
+ 0x51, 0x30, 0x40, 0x82, 0xc0, 0x6e, 0xf0, 0x51, 0x03, 0x17, 0xc0, 0xff,
+ 0xee, 0x51, 0x4a, 0xc0, 0xc9, 0xed, 0x4f, 0x83, 0x41, 0x6b, 0xb9, 0xec,
+ 0xd0, 0xef, 0xeb, 0xd1, 0x3c, 0xe9, 0x51, 0x06, 0xc1, 0x1b, 0xe7, 0xd2,
+ 0xb4, 0xe5, 0xd1, 0x8c, 0xe2, 0xc8, 0xd7, 0xe1, 0x50, 0xd1, 0xc2, 0x66,
+ 0xf4, 0x02, 0x85, 0x74, 0x65, 0xf2, 0xd3, 0x4b, 0xe2, 0x02, 0x87, 0x75,
+ 0x63, 0x6b, 0x65, 0xf4, 0xd2, 0x31, 0x72, 0xe9, 0xc4, 0x5b, 0xf2, 0x03,
+ 0x03, 0x85, 0xeb, 0xce, 0x9a, 0x61, 0x74, 0xef, 0xd1, 0x69, 0xae, 0xcf,
+ 0x6f, 0x70, 0x2e, 0xf3, 0xd2, 0x87, 0xef, 0x51, 0xc3, 0xc1, 0xa5, 0xee,
+ 0x04, 0x18, 0xcb, 0x9a, 0xe8, 0x03, 0x05, 0x87, 0x74, 0x68, 0xf5, 0xc3,
+ 0x9a, 0x70, 0x68, 0x75, 0x6f, 0xe3, 0xca, 0x14, 0xe4, 0x03, 0xc3, 0x5a,
+ 0x75, 0xef, 0xca, 0x0a, 0xe7, 0x51, 0x71, 0xc1, 0xd5, 0xeb, 0xd1, 0x83,
+ 0xe8, 0x03, 0xc7, 0x25, 0x61, 0xf2, 0xd1, 0xb3, 0x66, 0x75, 0xeb, 0xd0,
+ 0xff, 0xe5, 0x05, 0x08, 0x07, 0xd1, 0x14, 0xf6, 0x02, 0x82, 0x1f, 0x43,
+ 0xe1, 0xca, 0xf8, 0x73, 0x7a, 0x63, 0x7a, 0xe1, 0xc0, 0x8e, 0xec, 0x04,
+ 0x05, 0xc8, 0x64, 0x73, 0x6b, 0xef, 0xc0, 0xe3, 0x61, 0xf7, 0xc3, 0x74,
+ 0xe2, 0x04, 0x03, 0xd0, 0xc1, 0xe1, 0xd1, 0x00, 0xae, 0x47, 0xa1, 0xc9,
+ 0xc1, 0x61, 0xec, 0x02, 0x87, 0x79, 0x73, 0x74, 0x6f, 0xeb, 0xcd, 0xb6,
+ 0x6f, 0x77, 0x69, 0x65, 0xfa, 0xc3, 0x55, 0xe8, 0x04, 0x03, 0xd2, 0xe8,
+ 0xfa, 0xd1, 0x45, 0x61, 0x72, 0xf4, 0xd0, 0x79, 0xe7, 0x03, 0xd2, 0xdf,
+ 0xae, 0x4b, 0xf9, 0xc4, 0x90, 0xe5, 0x0e, 0x2d, 0x11, 0x1d, 0x07, 0x11,
+ 0x13, 0x05, 0x09, 0x08, 0x06, 0x23, 0xd2, 0x06, 0xf4, 0x05, 0x0c, 0x17,
+ 0xd2, 0xa2, 0x74, 0x65, 0x72, 0x2d, 0x74, 0x68, 0x61, 0x6e, 0x2e, 0xf4,
+ 0xd1, 0xb6, 0xe1, 0x02, 0x87, 0x69, 0x6e, 0x61, 0x62, 0xef, 0xc8, 0x48,
+ 0xae, 0x03, 0xcb, 0x39, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x63, 0xe1, 0xc3,
+ 0x99, 0x2e, 0xe1, 0xd0, 0xfd, 0xf3, 0x02, 0x88, 0xf4, 0x03, 0xd2, 0x97,
+ 0x62, 0xf5, 0xd0, 0x0b, 0x6b, 0x69, 0x64, 0xf9, 0xcd, 0x4c, 0xf2, 0x02,
+ 0x90, 0xec, 0x03, 0xd1, 0x01, 0x65, 0xf6, 0x02, 0x85, 0x1f, 0x43, 0xe5,
+ 0xca, 0xff, 0xe1, 0xca, 0xfc, 0xe7, 0x05, 0x42, 0x3f, 0xce, 0x4d, 0x61,
+ 0xed, 0xd0, 0x1b, 0x70, 0x70, 0x75, 0x2e, 0xef, 0xcb, 0xd2, 0xee, 0x02,
+ 0x8a, 0xf4, 0x02, 0x84, 0x72, 0xe5, 0xc9, 0x24, 0xec, 0xc5, 0x5a, 0x65,
+ 0xf6, 0xcd, 0x59, 0xec, 0x05, 0x04, 0x03, 0xc0, 0x72, 0x6c, 0xf5, 0xc6,
+ 0x75, 0xe5, 0xce, 0x93, 0x61, 0x75, 0x2e, 0xf0, 0xcf, 0x84, 0x69, 0x61,
+ 0xf2, 0xcb, 0x86, 0x67, 0x65, 0x74, 0x2e, 0x61, 0x70, 0xf0, 0xd2, 0x35,
+ 0xe5, 0x03, 0xd0, 0x90, 0x70, 0xae, 0xc6, 0xe3, 0x64, 0x7a, 0x69, 0xee,
+ 0xcc, 0xe8, 0xe1, 0x05, 0x04, 0x10, 0xc8, 0x11, 0x75, 0xf4, 0xcf, 0x97,
+ 0xf2, 0x03, 0xc1, 0x70, 0x61, 0x6c, 0xf6, 0x02, 0x82, 0x1f, 0x43, 0x61,
+ 0x68, 0xeb, 0xc9, 0xe7, 0x67, 0x6c, 0x65, 0x62, 0x6f, 0x61, 0xf2, 0xc7,
+ 0xe7, 0xae, 0xcb, 0x20, 0xe4, 0x02, 0x84, 0x2e, 0xf3, 0xd0, 0x40, 0x86,
+ 0xe3, 0x07, 0x4f, 0xf7, 0x40, 0x78, 0xc1, 0x83, 0x69, 0x2e, 0x64, 0x6e,
+ 0x73, 0x74, 0x72, 0x61, 0x63, 0x65, 0xae, 0xd0, 0xdd, 0xe2, 0x08, 0x03,
+ 0x45, 0x72, 0x4a, 0x57, 0xc2, 0x11, 0xf6, 0xcf, 0xe2, 0x73, 0xae, 0xc3,
+ 0x78, 0xe1, 0x14, 0x05, 0x05, 0x09, 0x34, 0x40, 0xe5, 0x22, 0x0c, 0x40,
+ 0x51, 0x04, 0x08, 0x0c, 0x07, 0x40, 0x40, 0x1d, 0xcf, 0x9a, 0x79, 0x65,
+ 0xf2, 0xd0, 0x3a, 0x75, 0x68, 0xe1, 0xcc, 0x2d, 0xf4, 0x02, 0x83, 0xf3,
+ 0xc1, 0x54, 0xef, 0xc5, 0xb3, 0xf3, 0x06, 0x04, 0x11, 0x07, 0xcf, 0x35,
+ 0x6b, 0x65, 0xf4, 0x9c, 0xe9, 0x02, 0x86, 0x6c, 0x69, 0x63, 0xe1, 0xc8,
+ 0x97, 0x63, 0x73, 0x65, 0x72, 0x76, 0xe5, 0xc7, 0x24, 0x68, 0x6b, 0x69,
+ 0x72, 0xe9, 0xcd, 0x87, 0xe5, 0x02, 0x85, 0x62, 0x61, 0xec, 0xce, 0xe3,
+ 0xae, 0x02, 0x83, 0xf3, 0xc0, 0x54, 0xe5, 0xd1, 0x36, 0xf2, 0x0e, 0x08,
+ 0x40, 0x6e, 0x19, 0x17, 0x0e, 0x06, 0x06, 0x03, 0x4d, 0x9e, 0xc3, 0x0a,
+ 0xf5, 0x03, 0xc5, 0x43, 0x65, 0xf2, 0xc8, 0x97, 0x73, 0xf9, 0x03, 0x0d,
+ 0x86, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x2e, 0x63, 0xef, 0x4d, 0xa4,
+ 0xc3, 0x7d, 0x63, 0x65, 0x6e, 0xf4, 0xc7, 0x04, 0xae, 0x10, 0x13, 0x04,
+ 0x0a, 0x0e, 0x08, 0x0b, 0x4b, 0x57, 0x41, 0xf1, 0x42, 0xa6, 0x32, 0xc0,
+ 0x76, 0xf3, 0x03, 0x07, 0x84, 0x75, 0x70, 0x70, 0x6f, 0xf2, 0xd0, 0xd1,
+ 0x69, 0xf4, 0xd0, 0x86, 0x68, 0xef, 0xd0, 0xe9, 0xf0, 0x2a, 0xcf, 0xf2,
+ 0xef, 0x03, 0xcd, 0xfc, 0x6e, 0x6c, 0x69, 0xee, 0xd0, 0x74, 0xed, 0x02,
+ 0x84, 0x6f, 0xe2, 0xd0, 0x7a, 0xe5, 0x03, 0xd0, 0xdb, 0xee, 0xd0, 0x25,
+ 0xe9, 0x03, 0xd0, 0x8a, 0xee, 0x27, 0xd0, 0xac, 0xe3, 0x05, 0x4d, 0x4b,
+ 0xc1, 0xd8, 0x6c, 0x75, 0xe2, 0xd0, 0xc7, 0xe2, 0xcd, 0xd5, 0x72, 0x65,
+ 0xec, 0x02, 0x81, 0x6c, 0x2d, 0x6f, 0x66, 0x2d, 0x6b, 0x6e, 0x6f, 0x77,
+ 0x6c, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x69, 0x6e, 0xe6, 0xd0, 0x61, 0x6c,
+ 0x65, 0x74, 0x74, 0xe1, 0x02, 0x87, 0x74, 0x72, 0x61, 0x6e, 0xe9, 0xc9,
+ 0xb5, 0x2d, 0x74, 0x72, 0x61, 0x6e, 0x69, 0xad, 0xc9, 0xac, 0xe9, 0x03,
+ 0xce, 0x6b, 0x61, 0x2d, 0x76, 0x75, 0x6e, 0x67, 0x74, 0xe1, 0xc0, 0xd0,
+ 0x67, 0x61, 0x69, 0xee, 0xcd, 0xf7, 0x65, 0x66, 0x6f, 0xef, 0xce, 0x9c,
+ 0xe4, 0xc9, 0xb2, 0xe3, 0x02, 0x8b, 0x6c, 0x61, 0xf9, 0x03, 0xcd, 0xe3,
+ 0x63, 0x61, 0xf2, 0xcd, 0xfd, 0x65, 0x6c, 0xef, 0xcc, 0x3e, 0xee, 0x05,
+ 0x0b, 0x0c, 0xcd, 0xbf, 0x7a, 0x61, 0x69, 0x2e, 0x63, 0x6c, 0x6f, 0x75,
+ 0xe4, 0xd0, 0x82, 0xe4, 0x04, 0x03, 0xd0, 0x7c, 0xef, 0xc8, 0x5b, 0x61,
+ 0xe9, 0xca, 0x87, 0x61, 0x6d, 0xe5, 0xc8, 0x62, 0x6d, 0xe2, 0x02, 0x83,
+ 0xec, 0xce, 0x85, 0x69, 0x6e, 0xe1, 0xd0, 0x27, 0xec, 0x04, 0x1f, 0x11,
+ 0x92, 0xf3, 0x02, 0x83, 0xe6, 0xcb, 0xb1, 0x61, 0xee, 0x03, 0xce, 0x01,
+ 0x2d, 0xf3, 0x02, 0x84, 0x1f, 0x43, 0xfc, 0x85, 0xf5, 0x02, 0x81, 0x65,
+ 0x64, 0x74, 0x69, 0x72, 0x6f, 0xec, 0xcd, 0xef, 0xec, 0x02, 0x88, 0x6f,
+ 0x6f, 0x6e, 0x69, 0x6e, 0xe7, 0xcd, 0x08, 0x61, 0x6e, 0x67, 0xe5, 0xc9,
+ 0x78, 0xe5, 0x02, 0x85, 0x73, 0x74, 0xf2, 0xc2, 0xec, 0x6e, 0x61, 0x2d,
+ 0x64, 0x65, 0x76, 0x69, 0xe3, 0xce, 0xbb, 0xe1, 0x03, 0xc7, 0xee, 0x73,
+ 0x68, 0x6f, 0xf6, 0xcd, 0xdb, 0x6a, 0x64, 0xe4, 0x86, 0x69, 0xe4, 0x03,
+ 0xce, 0xc3, 0xe1, 0xc3, 0xec, 0x68, 0xe3, 0x02, 0x81, 0x63, 0x61, 0x76,
+ 0x75, 0x6f, 0xf4, 0xc4, 0xbd, 0x64, 0x61, 0x64, 0x64, 0xea, 0xc9, 0x4a,
+ 0xe3, 0x04, 0x06, 0x06, 0xac, 0x6e, 0x69, 0x6e, 0xe8, 0xc6, 0xb1, 0x6c,
+ 0x69, 0x65, 0xf5, 0xc6, 0xab, 0xeb, 0x04, 0x13, 0x0a, 0x86, 0x79, 0x61,
+ 0x72, 0x64, 0x73, 0x2e, 0x62, 0x61, 0x6e, 0x7a, 0x61, 0x69, 0x63, 0x6c,
+ 0x6f, 0x75, 0xe4, 0xc0, 0xb9, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x61, 0x70,
+ 0xf0, 0xce, 0x74, 0x64, 0x72, 0x6f, 0xf0, 0xcf, 0x7e, 0x61, 0xee, 0xc6,
+ 0x7f, 0xe7, 0xc6, 0x78, 0xe2, 0x02, 0x91, 0xf9, 0x04, 0x06, 0xcf, 0xa9,
+ 0x6d, 0x69, 0x6c, 0xeb, 0xcf, 0x69, 0x62, 0x6c, 0x75, 0xe5, 0xcf, 0x63,
+ 0x69, 0x61, 0x2d, 0x67, 0x6f, 0x72, 0xe1, 0xca, 0x59, 0xae, 0x48, 0xae,
+ 0x03, 0xc4, 0x93, 0xae, 0x03, 0xcd, 0xcc, 0xe2, 0x4d, 0xec, 0xc1, 0xa2,
+ 0x2d, 0x64, 0x61, 0x74, 0xe1, 0xce, 0x34, 0xe1, 0x2e, 0x0c, 0x40, 0x5d,
+ 0x21, 0x05, 0x3d, 0x2c, 0x41, 0x49, 0x40, 0x68, 0x41, 0x1c, 0x40, 0xd7,
+ 0x13, 0x40, 0xef, 0x36, 0x41, 0x21, 0x40, 0x99, 0x40, 0xe6, 0x40, 0xb8,
+ 0x03, 0x40, 0xf1, 0x08, 0x40, 0x69, 0x40, 0x60, 0x40, 0x4c, 0x40, 0x83,
+ 0x41, 0x16, 0x40, 0x88, 0x25, 0x89, 0x1f, 0x43, 0x69, 0x72, 0x6f, 0x70,
+ 0x6f, 0x72, 0x74, 0xae, 0xc2, 0xef, 0xfa, 0x08, 0x40, 0x43, 0x07, 0x48,
+ 0xca, 0xc6, 0x2c, 0xf5, 0x02, 0xba, 0x72, 0xe5, 0x09, 0x09, 0x04, 0x05,
+ 0x0e, 0x4e, 0xa5, 0xc0, 0x6d, 0x77, 0x65, 0x62, 0x73, 0x69, 0x74, 0xe5,
+ 0xce, 0xc7, 0x66, 0xe4, 0xce, 0xc4, 0x65, 0x64, 0xe7, 0xcb, 0x50, 0x63,
+ 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x2e, 0x69, 0xef, 0xcf,
+ 0x10, 0xad, 0x02, 0x87, 0x6d, 0x6f, 0x62, 0x69, 0xec, 0xcb, 0x38, 0x61,
+ 0x70, 0xe9, 0xce, 0xa2, 0x6d, 0x69, 0x6e, 0xef, 0xcb, 0x96, 0x69, 0x6d,
+ 0x75, 0x74, 0xe8, 0xc3, 0x7c, 0x65, 0x72, 0x62, 0x61, 0x69, 0x6a, 0x61,
+ 0xee, 0xcc, 0xb1, 0x79, 0xe1, 0x04, 0x04, 0x08, 0x87, 0x73, 0xe5, 0xc9,
+ 0x99, 0x67, 0x61, 0x77, 0x61, 0x2e, 0xeb, 0xc9, 0x95, 0x62, 0x65, 0x2e,
+ 0x6b, 0xf9, 0xc6, 0xf7, 0x2e, 0x6d, 0x69, 0x79, 0x61, 0xfa, 0xc6, 0xaf,
+ 0xf8, 0x4c, 0xd0, 0xc1, 0xfa, 0xf7, 0x05, 0x2b, 0x08, 0xce, 0x8d, 0xf3,
+ 0x05, 0x05, 0x12, 0xce, 0xa3, 0x6d, 0x70, 0xf0, 0xc7, 0x4f, 0x67, 0x6c,
0x6f, 0x62, 0x61, 0x6c, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x65, 0x72, 0x61,
- 0x74, 0xef, 0xcd, 0x1c, 0x61, 0x70, 0x70, 0x72, 0x75, 0x6e, 0x6e, 0x65,
- 0xf2, 0xcd, 0xe1, 0x64, 0x65, 0x76, 0x2e, 0x63, 0xe1, 0xcd, 0xdd, 0x61,
- 0xea, 0xc9, 0x11, 0xf6, 0x04, 0x14, 0x05, 0x8d, 0xef, 0x02, 0x86, 0x75,
- 0x65, 0x73, 0xae, 0xc2, 0x00, 0x63, 0x61, 0xf4, 0x03, 0xc3, 0x53, 0xae,
- 0x4c, 0x47, 0xc0, 0xfc, 0x69, 0x61, 0xee, 0xcc, 0x25, 0xe5, 0x02, 0x85,
- 0xf2, 0x42, 0x17, 0xc3, 0x0d, 0x6c, 0x6c, 0xe9, 0xc2, 0x5d, 0xae, 0x03,
- 0xcb, 0xb8, 0xf4, 0xcc, 0x60, 0xf5, 0x0b, 0x40, 0xc2, 0x20, 0x16, 0x04,
- 0x08, 0x13, 0x05, 0xcc, 0x8f, 0xf4, 0x02, 0x92, 0xef, 0x07, 0x48, 0xe5,
- 0x42, 0x52, 0xc2, 0x69, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x64, 0x65, 0xf6,
- 0xcd, 0x94, 0xe8, 0x05, 0x06, 0x15, 0xc0, 0x59, 0x6f, 0xf2, 0x4a, 0xb1,
- 0xc2, 0xdd, 0x67, 0x65, 0x61, 0xf2, 0x02, 0x85, 0x61, 0x70, 0xf0, 0xcc,
- 0x65, 0x2d, 0x73, 0x74, 0x61, 0x67, 0x69, 0x6e, 0xe7, 0xcd, 0x6f, 0xae,
- 0x07, 0x06, 0x07, 0x03, 0x03, 0x0e, 0x8b, 0x75, 0x73, 0xad, 0x40, 0x5a,
- 0x8d, 0x73, 0x61, 0x2d, 0x65, 0xe1, 0xc0, 0x5b, 0x6d, 0xe5, 0xbb, 0x69,
- 0xec, 0x91, 0x65, 0x75, 0xad, 0x04, 0x03, 0x07, 0xa7, 0x77, 0xe5, 0xa5,
- 0x6e, 0x6f, 0xf2, 0xae, 0x63, 0x61, 0x2d, 0x63, 0x65, 0x6e, 0x74, 0x72,
- 0x61, 0xec, 0xbd, 0xe1, 0x02, 0x9a, 0x70, 0xad, 0x02, 0x87, 0x73, 0x6f,
- 0x75, 0x74, 0xe8, 0x07, 0xa9, 0x6e, 0x6f, 0x72, 0x74, 0x68, 0x65, 0x61,
- 0x73, 0x74, 0xad, 0x03, 0x2a, 0x82, 0xb3, 0xac, 0x66, 0x2d, 0x73, 0x6f,
- 0x75, 0x74, 0xe8, 0x98, 0x2d, 0x66, 0x69, 0x70, 0x73, 0x2e, 0x75, 0x73,
- 0xad, 0x03, 0x03, 0x8a, 0x77, 0xe5, 0x8d, 0x67, 0x6f, 0x76, 0x2d, 0x77,
- 0x65, 0x73, 0x74, 0xad, 0x8a, 0x65, 0x61, 0x73, 0x74, 0xad, 0x02, 0x82,
- 0xb2, 0x82, 0x31, 0x2e, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x63, 0x6f,
- 0x67, 0x6e, 0x69, 0x74, 0xef, 0xcc, 0xe3, 0xf3, 0x03, 0x0b, 0x85, 0xf4,
- 0x02, 0x85, 0x72, 0x68, 0xe5, 0xc1, 0x32, 0xe5, 0xc1, 0x27, 0x70, 0x6f,
- 0xf3, 0xcb, 0x19, 0x2e, 0x62, 0x61, 0x73, 0x6b, 0x65, 0x74, 0x62, 0x61,
- 0xec, 0xcc, 0x18, 0xf2, 0x04, 0x0d, 0xcb, 0x21, 0x73, 0x6b, 0x6f, 0x67,
- 0x2d, 0xe8, 0x02, 0x84, 0x1f, 0x43, 0xf8, 0x82, 0x6f, 0x6c, 0xe1, 0xc6,
- 0x1d, 0x6b, 0xf2, 0xc6, 0x89, 0x67, 0x75, 0x73, 0x74, 0x6f, 0xf7, 0xc7,
- 0xee, 0xe4, 0x02, 0x87, 0x6e, 0x65, 0x64, 0x61, 0xec, 0xc6, 0x6a, 0xe9,
- 0x05, 0x4b, 0x0c, 0xc1, 0x8b, 0xe2, 0xca, 0xa3, 0x63, 0x74, 0xe9, 0xc5,
- 0x33, 0xae, 0x43, 0x1c, 0xc3, 0x14, 0xf4, 0x0b, 0x07, 0x0b, 0x03, 0x03,
- 0x15, 0x0d, 0x04, 0x0e, 0xcc, 0x32, 0x74, 0x6f, 0x72, 0x6e, 0xe5, 0xca,
- 0x42, 0x73, 0xf5, 0x02, 0x83, 0xed, 0xca, 0x90, 0x67, 0xe9, 0xc7, 0xab,
- 0xef, 0xcb, 0x10, 0xed, 0xc7, 0xad, 0x6c, 0x2e, 0x6a, 0x65, 0x6c, 0x61,
- 0x73, 0x74, 0x69, 0x63, 0x2e, 0x76, 0x70, 0x73, 0x2d, 0x68, 0x6f, 0x73,
- 0xf4, 0xcc, 0x2f, 0xe8, 0x02, 0x85, 0x6c, 0x65, 0xf4, 0xca, 0xa4, 0x2e,
- 0x63, 0xf8, 0xcc, 0x42, 0x61, 0xed, 0xc1, 0xdf, 0xae, 0x06, 0x03, 0x45,
- 0xd8, 0xc4, 0x5c, 0xf6, 0xc9, 0x6b, 0x6d, 0xe4, 0xcc, 0x30, 0x2d, 0x62,
- 0x61, 0x6e, 0x64, 0x2d, 0x63, 0x61, 0x6d, 0xf0, 0xcc, 0x04, 0xf3, 0x12,
- 0x05, 0x03, 0x40, 0x44, 0x0b, 0x17, 0x03, 0x2d, 0x04, 0x03, 0x0e, 0x40,
- 0xe8, 0x44, 0xd3, 0xc5, 0xa5, 0x75, 0x6b, 0xe5, 0xc6, 0xc7, 0xf4, 0xc3,
- 0xa9, 0xf3, 0x05, 0x04, 0x2d, 0x05, 0x84, 0x75, 0xf2, 0xc1, 0x82, 0xef,
- 0x02, 0x8a, 0x63, 0x69, 0x61, 0xf4, 0x03, 0xc9, 0x17, 0xe5, 0xc9, 0x8d,
- 0xae, 0x0d, 0x02, 0x04, 0x03, 0x03, 0x03, 0x0d, 0x45, 0x6c, 0x42, 0xdc,
- 0xc0, 0xbb, 0xee, 0x82, 0x6d, 0xe3, 0xcb, 0xe2, 0xe7, 0xca, 0x42, 0xe6,
- 0xca, 0x83, 0xe4, 0xc9, 0x66, 0xe3, 0xc9, 0xbd, 0x6e, 0x2e, 0xec, 0xc9,
- 0x6b, 0x61, 0xe2, 0xc7, 0x18, 0x2e, 0xeb, 0xc9, 0x77, 0xee, 0x03, 0xc7,
- 0x6f, 0xae, 0x03, 0xc8, 0xa6, 0xec, 0xc8, 0x02, 0xeb, 0x06, 0x05, 0x03,
- 0x04, 0xc3, 0x06, 0x76, 0x6f, 0xec, 0xc4, 0x98, 0xef, 0xc3, 0x51, 0x69,
- 0xed, 0xca, 0x16, 0x65, 0xf2, 0xca, 0x12, 0xe9, 0xc9, 0xfd, 0xe8, 0x03,
- 0x05, 0x9d, 0x6f, 0x72, 0xef, 0xc9, 0xe6, 0xe9, 0x04, 0x0b, 0xc6, 0xd0,
- 0x79, 0x61, 0xae, 0x03, 0xc6, 0xb6, 0x66, 0x75, 0xeb, 0xc1, 0x2e, 0x6b,
- 0x61, 0x67, 0x61, 0x2e, 0x74, 0x6f, 0x63, 0x68, 0x69, 0xe7, 0xc9, 0x71,
- 0x67, 0x61, 0x62, 0x61, 0xe4, 0xc9, 0x8d, 0x65, 0xf2, 0xc4, 0x58, 0xe4,
- 0xc9, 0xc9, 0x63, 0x6f, 0x6c, 0xe9, 0x02, 0x81, 0x2d, 0x70, 0x69, 0x63,
- 0x65, 0xee, 0xc9, 0x5e, 0xe1, 0x04, 0x0c, 0x13, 0xa1, 0x6d, 0x69, 0x6e,
- 0x61, 0x6d, 0x69, 0x2e, 0x68, 0x69, 0xf2, 0xc5, 0x0a, 0xeb, 0x02, 0x86,
- 0x75, 0x63, 0x68, 0xe9, 0xc5, 0x88, 0xe1, 0x02, 0x84, 0x77, 0xe1, 0xc5,
- 0xd5, 0xae, 0xc0, 0xd5, 0x68, 0xe9, 0x02, 0x85, 0x6b, 0x61, 0xf7, 0xc9,
- 0x53, 0xae, 0x09, 0x06, 0x04, 0x43, 0x8e, 0x44, 0x7e, 0xc1, 0x36, 0x79,
- 0x61, 0x6d, 0xe1, 0xc6, 0xdf, 0x74, 0xef, 0xc5, 0x65, 0x6d, 0xe9, 0xc6,
- 0x53, 0xe7, 0xc4, 0xe8, 0xf2, 0x11, 0x0b, 0x2d, 0x03, 0x03, 0x08, 0x09,
- 0x1c, 0x0e, 0x0f, 0x28, 0x43, 0x3a, 0x45, 0x26, 0xc1, 0xf6, 0x76, 0x6f,
- 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0xf2, 0xca, 0xc5, 0xf4, 0x05, 0x0f,
- 0x05, 0xca, 0xe1, 0x73, 0xae, 0x06, 0x03, 0x40, 0x76, 0xc8, 0xe8, 0xf6,
- 0xc9, 0x70, 0x6e, 0xe6, 0xca, 0xe8, 0xe5, 0x48, 0x2d, 0xc2, 0xb8, 0xae,
- 0x07, 0x03, 0x03, 0x47, 0x51, 0xc2, 0x28, 0xf3, 0xc9, 0x9e, 0xf0, 0xca,
- 0x22, 0xe4, 0x48, 0x5f, 0xc0, 0xe8, 0xf1, 0xc9, 0x72, 0xee, 0xc4, 0xa2,
- 0xed, 0x03, 0xc8, 0x8d, 0x65, 0xee, 0xc8, 0xd6, 0x6b, 0x68, 0x61, 0x6e,
- 0x67, 0x65, 0xec, 0xc4, 0x7b, 0xe9, 0x03, 0x03, 0x8d, 0x74, 0xe1, 0x91,
- 0x64, 0xe1, 0x02, 0x84, 0x67, 0x61, 0x77, 0x61, 0x2e, 0x77, 0xe1, 0xc4,
- 0xe7, 0x61, 0x6b, 0x65, 0x2e, 0x73, 0xe1, 0xc5, 0x4f, 0xe5, 0x04, 0x03,
- 0xc8, 0x8d, 0xee, 0xc3, 0x79, 0x6d, 0x61, 0x72, 0xeb, 0xc8, 0xfa, 0x63,
- 0x68, 0xe9, 0x03, 0xca, 0x87, 0x74, 0x65, 0x63, 0x74, 0x65, 0x73, 0xae,
- 0xc6, 0x58, 0xe1, 0x05, 0x03, 0x04, 0x0e, 0x8a, 0xef, 0xc3, 0x24, 0x6d,
- 0xe3, 0xc8, 0xe8, 0x6b, 0x61, 0x77, 0x61, 0xae, 0x03, 0xc7, 0x23, 0x73,
- 0x61, 0x69, 0xf4, 0xc4, 0xaa, 0x69, 0x2e, 0x73, 0x68, 0x69, 0x7a, 0x75,
- 0xef, 0xc8, 0x8a, 0xe2, 0xca, 0x58, 0xae, 0x45, 0x51, 0x43, 0x02, 0xc1,
- 0xfb, 0xf1, 0x05, 0x48, 0x46, 0xc2, 0x03, 0xf5, 0x02, 0x84, 0x69, 0xec,
- 0xc3, 0xb5, 0x61, 0x72, 0x65, 0xec, 0xc8, 0x4b, 0xf0, 0x06, 0x40, 0x92,
- 0x18, 0x12, 0x96, 0xf0, 0x08, 0x05, 0x31, 0x07, 0x07, 0x07, 0xc9, 0xe1,
- 0x75, 0x64, 0xef, 0xca, 0x05, 0xf3, 0x02, 0x9e, 0xf0, 0x02, 0x82, 0xef,
- 0x90, 0x61, 0x63, 0xe5, 0x02, 0x8d, 0x75, 0x73, 0x65, 0x72, 0x63, 0x6f,
- 0x6e, 0x74, 0x65, 0x6e, 0xf4, 0xca, 0x07, 0x68, 0x6f, 0x73, 0x74, 0xe5,
- 0xc4, 0xae, 0xae, 0x02, 0x86, 0x6c, 0x61, 0x69, 0xf2, 0xc8, 0xf7, 0x66,
- 0x62, 0x73, 0x62, 0xf8, 0xc9, 0xf0, 0xec, 0x03, 0xc8, 0x76, 0x69, 0xee,
- 0x8b, 0x65, 0x6e, 0x67, 0x69, 0xee, 0xc3, 0x22, 0x63, 0x68, 0x69, 0x7a,
- 0xe9, 0xc9, 0xdb, 0xae, 0x05, 0x07, 0x18, 0x06, 0x83, 0x72, 0x65, 0x6e,
- 0x64, 0xe5, 0xc8, 0xf0, 0x6f, 0x73, 0xae, 0x02, 0x84, 0x73, 0x74, 0x67,
- 0x2e, 0x66, 0x65, 0x64, 0x6f, 0x72, 0x61, 0x70, 0x72, 0x6f, 0x6a, 0x65,
- 0x63, 0xf4, 0xc6, 0xee, 0x6c, 0x6d, 0x70, 0xed, 0xc9, 0xb0, 0xe7, 0xc8,
- 0xbc, 0xe2, 0x03, 0xc8, 0x56, 0x61, 0x6e, 0x7a, 0x61, 0x69, 0x63, 0x6c,
- 0x6f, 0x75, 0xe4, 0xc8, 0x9d, 0xe9, 0x02, 0x85, 0x67, 0x65, 0xe5, 0xc8,
- 0x95, 0xae, 0x02, 0x88, 0x73, 0x74, 0x64, 0x6c, 0x69, 0xe2, 0xc9, 0x8a,
- 0x67, 0x6f, 0xf6, 0xc6, 0x3e, 0x61, 0xf2, 0x02, 0x87, 0x74, 0x6d, 0x65,
- 0x6e, 0xf4, 0xc7, 0x19, 0x65, 0x63, 0x69, 0x64, 0xe1, 0xc8, 0x20, 0xae,
- 0x06, 0x07, 0x43, 0x07, 0xc4, 0x62, 0x6e, 0x67, 0x72, 0x6f, 0xeb, 0xc8,
- 0x65, 0x67, 0x6f, 0x76, 0xae, 0x44, 0xe2, 0xc3, 0x2b, 0xad, 0x03, 0x09,
- 0xaa, 0x73, 0x6f, 0x75, 0x74, 0xe8, 0x02, 0x87, 0xad, 0x93, 0x6e, 0x6f,
- 0x72, 0x74, 0x68, 0x65, 0x61, 0x73, 0x74, 0xad, 0x03, 0x03, 0x82, 0xb3,
- 0xc5, 0x44, 0xb2, 0x82, 0x31, 0xae, 0x03, 0xc5, 0x3c, 0x61, 0x69, 0x72,
- 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x61,
- 0x77, 0xf3, 0xc9, 0x18, 0x65, 0x61, 0x73, 0xf4, 0xc5, 0x22, 0xef, 0x0a,
- 0x13, 0x0f, 0x03, 0x46, 0xa7, 0x40, 0x4c, 0xc2, 0x03, 0x73, 0xf4, 0x03,
- 0xc2, 0x0e, 0xe1, 0x04, 0x01, 0xc7, 0x0d, 0x2d, 0x76, 0x61, 0x6c, 0x6c,
- 0x65, 0xf9, 0xc7, 0x07, 0x6d, 0x6f, 0x72, 0x69, 0xae, 0x03, 0xc7, 0x55,
- 0x61, 0x6f, 0x6d, 0x6f, 0xf2, 0xc6, 0xee, 0xeb, 0xc5, 0xe3, 0x67, 0xe1,
- 0x41, 0xaf, 0xc1, 0x36, 0xee, 0x0d, 0x04, 0x0c, 0x17, 0x04, 0x0e, 0x40,
- 0x60, 0x05, 0x45, 0xd1, 0xc0, 0x70, 0x71, 0xf5, 0xc4, 0xa1, 0x70, 0x61,
- 0x63, 0x68, 0x69, 0x2e, 0x67, 0x69, 0x66, 0xf5, 0xc7, 0x28, 0xee, 0x02,
- 0x89, 0x61, 0x6b, 0x61, 0x2e, 0x67, 0x75, 0xee, 0xc3, 0x64, 0x2d, 0x61,
- 0x72, 0x62, 0x6f, 0x72, 0x2e, 0x6d, 0xe9, 0xc3, 0x18, 0x6a, 0xef, 0xc3,
- 0x70, 0xe7, 0x02, 0x84, 0x72, 0xf9, 0xc7, 0xb7, 0x69, 0x61, 0x6e, 0x67,
- 0xae, 0xc6, 0x10, 0xe4, 0x05, 0x05, 0x3d, 0x0c, 0x84, 0x1f, 0x43, 0xf8,
- 0xc0, 0x42, 0xf2, 0x02, 0x84, 0x6f, 0xe9, 0xc6, 0x4d, 0x69, 0xe1, 0x03,
- 0x06, 0x89, 0x74, 0x72, 0x61, 0x6e, 0xe9, 0x93, 0x62, 0x61, 0x72, 0x6c,
- 0x65, 0x74, 0x74, 0xe1, 0x9c, 0xad, 0x02, 0x8f, 0x74, 0x72, 0x61, 0x6e,
- 0x69, 0x2d, 0x62, 0x61, 0x72, 0x6c, 0x65, 0x74, 0xf4, 0xc1, 0xe4, 0x62,
- 0x61, 0x72, 0x6c, 0x65, 0x74, 0x74, 0x61, 0x2d, 0x74, 0x72, 0x61, 0x6e,
- 0xe9, 0xc6, 0x60, 0xef, 0x02, 0x83, 0xf9, 0xc6, 0xc8, 0x2e, 0x6e, 0x61,
- 0xf2, 0xc6, 0x87, 0x65, 0xe2, 0xc1, 0xe2, 0x61, 0x73, 0x75, 0x6f, 0x6c,
- 0xef, 0xc6, 0xb6, 0x63, 0x6f, 0xee, 0xc1, 0xb7, 0xe1, 0x03, 0x0b, 0x8c,
- 0xee, 0x02, 0x83, 0xe9, 0xc6, 0xe1, 0xae, 0x42, 0xc5, 0xc2, 0x61, 0x6d,
- 0x69, 0x7a, 0x75, 0x2e, 0x69, 0x73, 0x68, 0x69, 0xeb, 0xc3, 0x98, 0x6c,
- 0x79, 0x74, 0x69, 0x63, 0xf3, 0x03, 0xc8, 0x20, 0x2d, 0x67, 0x61, 0x74,
- 0x65, 0x77, 0x61, 0x79, 0xae, 0x03, 0x0b, 0x92, 0x75, 0x73, 0xad, 0x02,
- 0xab, 0x77, 0x65, 0x73, 0x74, 0xad, 0xad, 0x65, 0x75, 0xad, 0x02, 0x85,
- 0x77, 0x65, 0x73, 0xf4, 0x95, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0xec,
- 0x8d, 0x61, 0x70, 0xad, 0x02, 0x89, 0x73, 0x6f, 0x75, 0x74, 0xe8, 0x02,
- 0x87, 0xad, 0x8f, 0x6e, 0x6f, 0x72, 0x74, 0x68, 0x65, 0x61, 0x73, 0x74,
- 0xad, 0x02, 0x82, 0xb2, 0x82, 0x31, 0x2e, 0x61, 0x6d, 0x61, 0x7a, 0x6f,
- 0x6e, 0x61, 0xf7, 0xc6, 0xb5, 0xed, 0x0d, 0x08, 0x11, 0x0a, 0x04, 0x04,
- 0x0d, 0x04, 0x1c, 0x04, 0x28, 0xc7, 0x3d, 0x75, 0x73, 0x65, 0x6d, 0x65,
- 0xee, 0xc2, 0xb3, 0xf3, 0x02, 0x85, 0x74, 0x65, 0x72, 0xe4, 0xaa, 0x63,
- 0x6f, 0x6d, 0x70, 0x75, 0x74, 0xe5, 0xc7, 0xa2, 0x70, 0x6c, 0x69, 0x66,
- 0x79, 0x61, 0x70, 0xf0, 0xc7, 0x8a, 0x6f, 0xf4, 0xc6, 0x07, 0x6c, 0xe9,
- 0xc6, 0x03, 0xe9, 0x03, 0xc5, 0xea, 0x2e, 0x69, 0x62, 0x61, 0x72, 0x61,
- 0xeb, 0xc5, 0x7e, 0x66, 0xe1, 0xc5, 0x35, 0xe5, 0x02, 0x83, 0xf8, 0xc7,
- 0x81, 0x72, 0x69, 0x63, 0x61, 0xee, 0x02, 0x87, 0x66, 0x61, 0x6d, 0x69,
- 0xec, 0xc5, 0x3c, 0x65, 0x78, 0x70, 0x72, 0x65, 0xf3, 0xc5, 0x02, 0x62,
- 0xf5, 0xc2, 0x81, 0xe1, 0x05, 0x04, 0x04, 0x0e, 0x87, 0x7a, 0xef, 0xc6,
- 0x23, 0x6d, 0xe9, 0xc1, 0x0e, 0x6b, 0x75, 0x73, 0x61, 0x2e, 0x6b, 0x75,
- 0x6d, 0x61, 0x6d, 0x6f, 0xf4, 0xc5, 0x9e, 0x67, 0x61, 0x73, 0x61, 0xeb,
- 0xc2, 0x6a, 0xae, 0x41, 0x8c, 0xc0, 0x6d, 0xae, 0x40, 0xd8, 0x03, 0x45,
- 0x07, 0x9f, 0xec, 0x0e, 0x0a, 0x06, 0x1b, 0x13, 0x2a, 0x12, 0x0c, 0x04,
- 0x11, 0x0d, 0x11, 0xc6, 0x6e, 0x77, 0x61, 0x79, 0x73, 0x64, 0x61, 0x74,
- 0xe1, 0xc6, 0xfb, 0x76, 0x64, 0x61, 0xec, 0xc5, 0x84, 0xf4, 0x06, 0x0b,
- 0x40, 0xdd, 0xc1, 0xb5, 0xef, 0x02, 0x81, 0x2d, 0x61, 0x64, 0x69, 0x67,
- 0xe5, 0xc5, 0x04, 0x65, 0x72, 0x76, 0x69, 0x73, 0x74, 0xe1, 0xc4, 0x2e,
- 0xf3, 0x02, 0x8d, 0xf4, 0x02, 0x83, 0xef, 0xc4, 0xa3, 0x61, 0x68, 0x61,
- 0x75, 0xe7, 0xc5, 0x59, 0xe1, 0xc1, 0xdc, 0xf0, 0x02, 0x9b, 0x68, 0xe1,
- 0x02, 0x8e, 0x2e, 0x62, 0x6f, 0x75, 0x6e, 0x74, 0x79, 0x2d, 0x66, 0x75,
- 0x6c, 0xec, 0xc6, 0xce, 0x2d, 0x6d, 0x79, 0x71, 0x6e, 0x61, 0xf0, 0xc1,
- 0x6f, 0x31, 0x2e, 0x61, 0x65, 0x2e, 0x66, 0x6c, 0x6f, 0x77, 0xae, 0xc6,
- 0x13, 0xec, 0x04, 0x06, 0xc4, 0x7d, 0x73, 0x74, 0x61, 0xf4, 0xc5, 0x3a,
- 0x66, 0x69, 0x6e, 0x61, 0xee, 0xc4, 0x3c, 0xe9, 0x02, 0x84, 0x70, 0xe1,
- 0xc4, 0x71, 0x62, 0x61, 0xe2, 0xc4, 0xfc, 0x67, 0xe1, 0xc2, 0x7c, 0x65,
- 0xf3, 0x02, 0x84, 0x75, 0xee, 0xc2, 0x75, 0x73, 0x61, 0x6e, 0x64, 0x72,
- 0x69, 0xe1, 0xc4, 0x8b, 0x63, 0x65, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77,
- 0x6f, 0x72, 0xeb, 0xc6, 0x6f, 0xe1, 0x02, 0x86, 0x6e, 0x64, 0x2e, 0xe6,
- 0xc4, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x6a, 0xf5, 0xc4, 0xdb, 0xae, 0x09,
- 0x03, 0x03, 0x41, 0x5a, 0x43, 0x02, 0xc0, 0x6e, 0xec, 0xc4, 0x00, 0xe7,
- 0xc4, 0x1b, 0x65, 0xf5, 0xc3, 0x8c, 0xeb, 0x0b, 0x0a, 0x0a, 0x08, 0x03,
- 0x0a, 0x06, 0x22, 0x03, 0xc0, 0x55, 0x75, 0x6e, 0x65, 0x2e, 0x6b, 0x61,
- 0x67, 0xef, 0xc0, 0xdf, 0x74, 0x79, 0x75, 0x62, 0x69, 0x6e, 0x73, 0xeb,
- 0xc4, 0x52, 0x72, 0x65, 0x68, 0x61, 0x6d, 0xee, 0xc4, 0x9f, 0xef, 0xc1,
- 0x58, 0x6e, 0x6f, 0x6c, 0x75, 0x6f, 0x6b, 0x74, 0xe1, 0xc4, 0x92, 0x6b,
- 0x65, 0x73, 0xe8, 0xc4, 0x6b, 0xe9, 0x04, 0x0b, 0x07, 0x86, 0x74, 0x61,
- 0xae, 0x03, 0xc4, 0x69, 0x61, 0x6b, 0xe9, 0xc1, 0xcd, 0x73, 0x68, 0x69,
- 0x6d, 0xe1, 0xc2, 0xc3, 0x72, 0x75, 0x6e, 0xef, 0xc2, 0xbd, 0x2e, 0x6b,
- 0xef, 0xc3, 0xf0, 0xe4, 0xc4, 0xc2, 0xe1, 0x06, 0x04, 0x2c, 0x0b, 0x0b,
- 0x84, 0x73, 0xe8, 0xc1, 0x17, 0x6d, 0x61, 0xe9, 0x07, 0x03, 0x09, 0x05,
- 0x07, 0xc5, 0xa9, 0x7a, 0xe5, 0x8b, 0x6f, 0x72, 0x69, 0x67, 0x69, 0xee,
- 0x0f, 0xc5, 0xa9, 0x68, 0xe4, 0x0a, 0xc5, 0xa9, 0x65, 0x64, 0x67, 0xe5,
- 0x03, 0xc5, 0xa9, 0x2d, 0x73, 0x74, 0x61, 0x67, 0x69, 0x6e, 0xe7, 0xc5,
- 0xa1, 0x69, 0x77, 0x61, 0x2e, 0x6f, 0x6b, 0x61, 0x79, 0xe1, 0xc0, 0x56,
- 0x67, 0x69, 0x2e, 0x73, 0x68, 0x69, 0x6d, 0x61, 0xee, 0xc0, 0xe5, 0x64,
- 0xee, 0xc5, 0x86, 0x62, 0xe9, 0xc3, 0xc4, 0xae, 0xc0, 0xa0, 0xea, 0xc4,
- 0x45, 0xe9, 0x11, 0x2c, 0x0a, 0x13, 0x40, 0x64, 0x05, 0x09, 0x0b, 0x0b,
- 0x03, 0x07, 0x42, 0xa3, 0x42, 0x0e, 0x81, 0x7a, 0xf5, 0x03, 0x0a, 0x8d,
- 0x77, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x74, 0x73, 0xf5, 0x93, 0x6d, 0xe9,
- 0x02, 0x85, 0x73, 0x61, 0x74, 0xef, 0x8a, 0x2e, 0x74, 0xef, 0x89, 0x62,
- 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x66, 0x75, 0x6b, 0x75, 0x73, 0x68, 0x69,
- 0xed, 0xc3, 0x93, 0x76, 0x65, 0x6e, 0x63, 0x6c, 0x6f, 0x75, 0xe4, 0xc5,
- 0x51, 0xf3, 0x02, 0x89, 0x68, 0x6f, 0x2e, 0x73, 0x68, 0x69, 0xe7, 0xc3,
- 0x7d, 0x61, 0x69, 0x2e, 0x61, 0xe9, 0xc3, 0x37, 0xf2, 0x08, 0x0c, 0x04,
- 0x05, 0x14, 0x06, 0x07, 0x84, 0xf4, 0x02, 0x86, 0x72, 0x61, 0x66, 0xe6,
- 0xc1, 0x6f, 0xe5, 0xc2, 0xe2, 0x70, 0x6f, 0xf2, 0xa4, 0x6c, 0x69, 0xee,
- 0xc1, 0x57, 0x6b, 0x69, 0x74, 0x61, 0x70, 0x70, 0xf3, 0x02, 0x87, 0xae,
- 0x03, 0xc5, 0x12, 0xe5, 0xc4, 0x90, 0x2d, 0xe1, 0xc3, 0xe2, 0x66, 0x6f,
- 0x72, 0xe3, 0xc3, 0x92, 0x63, 0x72, 0x61, 0x66, 0xf4, 0xc2, 0x2a, 0x62,
- 0xf5, 0xc2, 0x9a, 0xad, 0x02, 0x91, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69,
- 0x63, 0x2d, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0xec, 0xc2, 0x12, 0x73,
- 0x75, 0x72, 0x76, 0x65, 0x69, 0x6c, 0x6c, 0x61, 0x6e, 0xe3, 0xc1, 0x11,
- 0x70, 0x2e, 0xe5, 0xc3, 0x61, 0x6f, 0x69, 0x2e, 0x68, 0x79, 0x6f, 0xe7,
- 0xc3, 0x27, 0x6e, 0x61, 0x6e, 0x2e, 0x65, 0x68, 0x69, 0x6d, 0xe5, 0xc3,
- 0x1d, 0x6b, 0x61, 0x77, 0x61, 0x2e, 0x6b, 0x61, 0x6e, 0x61, 0xe7, 0xaa,
- 0x64, 0xae, 0xb5, 0x62, 0x65, 0x74, 0x73, 0xf5, 0xc2, 0xff, 0xae, 0x42,
- 0x16, 0xc1, 0x60, 0x68, 0xae, 0x03, 0xc3, 0x14, 0xe3, 0xc3, 0x6d, 0xe7,
- 0x09, 0x0c, 0x24, 0x14, 0x07, 0x42, 0x4d, 0xc2, 0x03, 0x75, 0x6e, 0x69,
- 0x2e, 0x6f, 0x6b, 0x69, 0x6e, 0x61, 0xf7, 0xc2, 0xc1, 0xf2, 0x05, 0x0c,
- 0x0e, 0xc3, 0x14, 0x6f, 0xae, 0x02, 0x83, 0xf0, 0xc2, 0x35, 0xe2, 0x42,
- 0x41, 0xc0, 0xb5, 0xe9, 0x02, 0x86, 0x67, 0x65, 0x6e, 0xf4, 0xc2, 0x72,
- 0x63, 0x2e, 0xfa, 0xc2, 0xca, 0x61, 0xf2, 0xc3, 0x6b, 0xe5, 0x02, 0x8a,
- 0xee, 0x02, 0x84, 0x74, 0xf3, 0xc1, 0x86, 0xe3, 0xc2, 0x29, 0x6d, 0x61,
- 0x74, 0x73, 0xf5, 0xc1, 0x45, 0x64, 0x65, 0x6e, 0x65, 0xf3, 0xc2, 0xbd,
- 0xe1, 0x03, 0x02, 0x89, 0x6e, 0x6f, 0x2e, 0x6e, 0x69, 0x69, 0x67, 0x61,
- 0xf4, 0xc2, 0x73, 0x6b, 0x68, 0xe1, 0xc3, 0x04, 0xe6, 0x08, 0x0e, 0x06,
- 0x13, 0x41, 0xbd, 0xc2, 0x4f, 0x72, 0x69, 0x63, 0xe1, 0x03, 0xc4, 0x2c,
- 0xae, 0x03, 0xc4, 0x21, 0xe2, 0xc1, 0xe7, 0x6a, 0x6f, 0x72, 0xe4, 0xc2,
- 0x8c, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x6c, 0x6f, 0x74, 0x74, 0x65,
- 0x72, 0x79, 0x2e, 0x6f, 0x72, 0xe7, 0xc0, 0xbf, 0x2d, 0x73, 0x6f, 0x75,
- 0x74, 0x68, 0x2d, 0x31, 0x2e, 0x65, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63,
- 0x62, 0x65, 0x61, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0xeb, 0xc3, 0xeb, 0xe5,
- 0x08, 0x04, 0x2b, 0x40, 0xe9, 0x42, 0xcf, 0x81, 0x74, 0xee, 0xc2, 0x3f,
- 0x72, 0xef, 0x07, 0x06, 0x07, 0x06, 0x07, 0xc3, 0xc1, 0x70, 0x6f, 0x72,
- 0xf4, 0xc3, 0x45, 0x64, 0x72, 0x6f, 0x6d, 0xe5, 0xc0, 0xf3, 0x63, 0x6c,
- 0x75, 0xe2, 0xc0, 0xed, 0x62, 0x61, 0x74, 0x69, 0xe3, 0xc0, 0xe6, 0xae,
- 0x03, 0xc1, 0xfe, 0x6d, 0xf6, 0xc3, 0xbb, 0x6a, 0x72, 0xe9, 0xc2, 0x20,
- 0xe4, 0x0d, 0x0a, 0x13, 0x0a, 0x27, 0x03, 0x0a, 0x40, 0xe2, 0x40, 0xbd,
- 0xc1, 0xac, 0x79, 0x67, 0x65, 0x79, 0x61, 0xae, 0x41, 0xb7, 0xc1, 0x60,
- 0xf6, 0x02, 0x89, 0x69, 0x73, 0x6f, 0x72, 0x2e, 0x77, 0xf3, 0xc3, 0x80,
- 0xae, 0x03, 0xc2, 0x32, 0xed, 0xc1, 0x18, 0x75, 0x6c, 0xf4, 0x03, 0xc3,
- 0x83, 0x2e, 0xe8, 0xc1, 0xc3, 0x6f, 0x62, 0xe5, 0x02, 0x96, 0x69, 0xef,
- 0x02, 0x89, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0xe5, 0xc3, 0x4b, 0x2d,
- 0x73, 0x74, 0x61, 0x74, 0x69, 0xe3, 0xc3, 0x42, 0x61, 0x65, 0x6d, 0x63,
- 0x6c, 0x6f, 0x75, 0x64, 0xae, 0x43, 0x38, 0x9c, 0xed, 0xc1, 0xfc, 0x69,
- 0x6d, 0x6f, 0x2e, 0x63, 0x6f, 0x2e, 0xf5, 0xc3, 0x15, 0x61, 0x63, 0x68,
- 0x69, 0x2e, 0x74, 0x6f, 0x6b, 0xf9, 0xc1, 0x95, 0xe3, 0x0a, 0x1f, 0x0a,
- 0x40, 0x48, 0x10, 0x41, 0x29, 0xc1, 0x8b, 0xf4, 0x03, 0x03, 0x8e, 0xef,
- 0xc1, 0xd7, 0x69, 0x76, 0x65, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x2e, 0x62,
- 0x69, 0xfa, 0xc3, 0x1e, 0xae, 0x02, 0x84, 0x65, 0x64, 0x75, 0x2e, 0xe1,
- 0xc2, 0x18, 0x68, 0x69, 0x2e, 0x6e, 0x61, 0x67, 0x61, 0xee, 0xc1, 0x61,
- 0xe3, 0x04, 0x03, 0x0b, 0xa1, 0xf4, 0xc1, 0x78, 0x6f, 0x75, 0x6e, 0x74,
- 0x61, 0x6e, 0xf4, 0x40, 0x94, 0xc2, 0x69, 0x69, 0x64, 0x65, 0x6e, 0x74,
- 0xad, 0x02, 0x87, 0x70, 0x72, 0x65, 0x76, 0x65, 0xee, 0x8a, 0x69, 0x6e,
- 0x76, 0x65, 0x73, 0x74, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
- 0x61, 0xe5, 0xc1, 0x4e, 0xe5, 0x02, 0x8b, 0x73, 0x73, 0x63, 0x61, 0x6d,
- 0x2e, 0x6f, 0x72, 0xe7, 0xc2, 0xc8, 0x6e, 0x74, 0x75, 0xf2, 0xc1, 0x4a,
- 0xe1, 0x03, 0xc1, 0x32, 0x64, 0x65, 0xed, 0x03, 0xc0, 0x83, 0x69, 0x61,
- 0x2e, 0xe2, 0xc1, 0x2b, 0xae, 0x13, 0x05, 0x03, 0x04, 0x07, 0x04, 0x05,
- 0x05, 0x04, 0x0e, 0x10, 0x04, 0x10, 0x08, 0x04, 0x09, 0x03, 0xc0, 0x86,
- 0xfa, 0x2f, 0x1e, 0xc0, 0xab, 0xf6, 0xc1, 0x60, 0xf5, 0x31, 0xc2, 0x65,
- 0xf4, 0x03, 0x1d, 0xb3, 0xe8, 0xc2, 0x8f, 0xf3, 0x19, 0xc0, 0xf7, 0xf2,
- 0x18, 0x07, 0xc1, 0xe1, 0xf0, 0x40, 0xdc, 0xc0, 0x4e, 0xee, 0x0b, 0xc0,
- 0x5a, 0xed, 0x07, 0x03, 0x40, 0xc9, 0x2b, 0xc0, 0x7c, 0xfa, 0xc2, 0x72,
- 0xf7, 0xc2, 0x6f, 0xec, 0x03, 0x03, 0x83, 0xf3, 0xc2, 0x68, 0xeb, 0xc2,
- 0x65, 0x65, 0x67, 0x2e, 0xe2, 0xc1, 0xcf, 0xeb, 0x40, 0xe0, 0xa3, 0xe9,
- 0x06, 0x03, 0x03, 0x40, 0xf3, 0x9f, 0xed, 0xc2, 0x51, 0xec, 0xc2, 0x4e,
- 0xe4, 0xc2, 0x4b, 0xe7, 0x03, 0xc1, 0x0b, 0x6f, 0xf6, 0xc0, 0xe8, 0x66,
- 0xea, 0xc2, 0x3f, 0xe3, 0x05, 0x1e, 0x40, 0xc0, 0x9f, 0xf9, 0xc2, 0x36,
- 0xe2, 0xc0, 0xb7, 0xe1, 0x40, 0x72, 0xc0, 0x42, 0xe2, 0x0b, 0x16, 0x0b,
- 0x0c, 0x03, 0x0a, 0x0e, 0x0a, 0x05, 0x0e, 0x92, 0xf5, 0x02, 0x87, 0x64,
- 0x68, 0x61, 0x62, 0xe9, 0xc2, 0x18, 0x2e, 0x79, 0x61, 0x6d, 0x61, 0x67,
- 0x75, 0x63, 0x68, 0xe9, 0xc0, 0x60, 0xf2, 0x02, 0x84, 0x75, 0x7a, 0x7a,
- 0x6f, 0x2e, 0xe9, 0xc0, 0x43, 0xef, 0x02, 0x85, 0x67, 0x61, 0xe4, 0xc0,
- 0x6e, 0x2e, 0xf0, 0xc0, 0x4e, 0xec, 0xc0, 0x76, 0x6b, 0x68, 0x61, 0x7a,
- 0x69, 0x61, 0x2e, 0xf3, 0xc1, 0x60, 0xe9, 0x02, 0x83, 0x72, 0xe1, 0xac,
- 0x6b, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0xe2, 0x89, 0x65, 0x6e, 0x6f, 0x2e,
- 0x6f, 0x73, 0x61, 0x6b, 0xe1, 0xa3, 0xe3, 0x40, 0x72, 0xc1, 0x5b, 0xe2,
- 0x04, 0x04, 0xc1, 0xc0, 0x76, 0xe9, 0xc0, 0x46, 0x6f, 0x74, 0xf4, 0xc1,
- 0xbd, 0x61, 0x73, 0x68, 0x69, 0x72, 0x69, 0x2e, 0x68, 0x6f, 0x6b, 0x6b,
- 0x61, 0x69, 0x64, 0x6f, 0x2e, 0xea, 0x8d, 0x2e, 0x63, 0xe1, 0xc1, 0xa6,
- 0xe1, 0x03, 0x0b, 0x83, 0xf2, 0x02, 0x83, 0xf0, 0xc1, 0x9c, 0x62, 0x6f,
- 0x72, 0x74, 0x65, 0x2e, 0xee, 0x88, 0xe1, 0x03, 0xc1, 0x8e, 0x2e, 0x70,
- 0x72, 0xef, 0xc1, 0x8a, 0xae, 0x05, 0x09, 0x08, 0xc1, 0x6f, 0xf3, 0x02,
- 0x83, 0x73, 0xec, 0x90, 0xe5, 0xc1, 0x7b, 0x72, 0x75, 0x6e, 0x2e, 0x61,
- 0xf0, 0xc0, 0x7a, 0x70, 0x72, 0x6f, 0x64, 0x2e, 0x66, 0x61, 0x73, 0x74,
- 0x6c, 0xf9, 0xc1, 0x42, 0xb9, 0x03, 0xc1, 0x5d, 0x67, 0x75, 0x61, 0x63,
- 0x75, 0x2e, 0x62, 0xf2, 0xc1, 0x58, 0xb8, 0xc1, 0x52, 0xb7, 0xc1, 0x1c,
- 0xb6, 0x05, 0x03, 0x0a, 0xc1, 0x07, 0xb4, 0xc0, 0x67, 0x31, 0x31, 0x2e,
- 0xf4, 0xc1, 0x08, 0xb5, 0x03, 0xc1, 0x07, 0x67, 0x2e, 0x69, 0xee, 0xc1,
- 0x39, 0xb4, 0x04, 0x03, 0xc0, 0xf9, 0xf5, 0xc1, 0x29, 0x6c, 0x69, 0x6d,
- 0xe1, 0xc0, 0x5e, 0xb3, 0x04, 0x0b, 0xc0, 0xe3, 0x75, 0x74, 0x69, 0x6c,
- 0x69, 0x74, 0x69, 0x65, 0xf3, 0xc1, 0x13, 0xb2, 0xb6, 0xb2, 0x05, 0x04,
- 0x10, 0xc0, 0xc7, 0x69, 0xf8, 0xc0, 0x42, 0xb0, 0x02, 0x86, 0x33, 0x38,
- 0x2e, 0xe9, 0xc0, 0xcb, 0x30, 0x30, 0x2e, 0x68, 0xf5, 0xc0, 0xff, 0x2d,
- 0x64, 0x2e, 0x6a, 0xf0, 0xc0, 0xf4, 0xb1, 0x07, 0x06, 0x05, 0x05, 0x0c,
- 0xc0, 0x9c, 0x6b, 0x61, 0x70, 0xf0, 0xc0, 0xe2, 0x38, 0x30, 0xf2, 0xc0,
- 0xdd, 0x36, 0x2d, 0xe2, 0xc0, 0x95, 0x33, 0x33, 0x37, 0x2e, 0x70, 0x69,
- 0x63, 0x74, 0x75, 0xf2, 0xc0, 0x64, 0xb2, 0x02, 0x86, 0x68, 0x70, 0xae,
- 0x1e, 0x0e, 0x82, 0xb3, 0x06, 0x27, 0x16, 0x0d, 0x16, 0x8d, 0x77, 0x65,
- 0x62, 0xf3, 0x02, 0x95, 0x69, 0x74, 0x65, 0xae, 0x04, 0x04, 0x02, 0x84,
- 0x6e, 0xec, 0xc0, 0xae, 0xec, 0xa7, 0x63, 0xe8, 0xc0, 0xa8, 0xe2, 0xc0,
- 0x44, 0x65, 0x69, 0x74, 0x65, 0xae, 0x02, 0x82, 0xe4, 0xba, 0xe1, 0xc0,
- 0x7c, 0xf3, 0x02, 0x8b, 0x69, 0x74, 0x65, 0x77, 0x65, 0x62, 0x2e, 0x66,
- 0xf2, 0xc0, 0x8b, 0x61, 0x69, 0x74, 0x2e, 0x72, 0xf5, 0xc0, 0x83, 0x70,
- 0x61, 0x67, 0x69, 0x6e, 0x61, 0x77, 0x65, 0x62, 0x2e, 0xf0, 0xc0, 0x59,
- 0x6d, 0xe9, 0x02, 0x88, 0x77, 0x65, 0x62, 0x2e, 0x65, 0xf3, 0xc0, 0x6a,
- 0x6e, 0x73, 0x69, 0x64, 0x61, 0x2e, 0x73, 0xe5, 0xc0, 0x60, 0x6b, 0x6f,
- 0x74, 0x69, 0x73, 0x69, 0x76, 0x75, 0x2e, 0x66, 0xe9, 0xc0, 0x53, 0xe8,
- 0x02, 0x8a, 0x6f, 0x6d, 0x65, 0x70, 0x61, 0x67, 0x65, 0x2e, 0xe9, 0xa8,
- 0x6a, 0x65, 0x6d, 0x6d, 0x65, 0x73, 0x69, 0x64, 0x65, 0xae, 0x02, 0x83,
- 0x6e, 0xef, 0xb6, 0x64, 0xeb, 0xb3, 0xae, 0x02, 0xb1, 0x61, 0x7a, 0x75,
- 0x72, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x61, 0x70, 0x70, 0x73,
- 0x2e, 0x6e, 0x65, 0xf4, 0x9c, 0xb0, 0x03, 0x0e, 0x8a, 0xe5, 0x02, 0x87,
- 0x6d, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x8a, 0x2e, 0x76, 0xe3, 0x8a, 0x30,
- 0x31, 0x77, 0x77, 0x77, 0x2e, 0x63, 0x6f, 0x6d, 0x88, 0x2e, 0x62, 0x67,
- 0x84, 0x01,
+ 0x74, 0xef, 0xcd, 0x72, 0x61, 0x70, 0xf0, 0x03, 0xcd, 0x37, 0x72, 0x75,
+ 0x6e, 0x6e, 0x65, 0xf2, 0xce, 0x8f, 0x64, 0x65, 0x76, 0x2e, 0x63, 0xe1,
+ 0xce, 0x8b, 0x61, 0xea, 0xc9, 0x29, 0xf6, 0x03, 0x14, 0x8d, 0xef, 0x02,
+ 0x86, 0x75, 0x65, 0x73, 0xae, 0xc2, 0x1c, 0x63, 0x61, 0xf4, 0x03, 0xc3,
+ 0x7e, 0xae, 0x4c, 0x9e, 0xc1, 0x0c, 0xe5, 0x02, 0x85, 0xf2, 0x42, 0x45,
+ 0xc2, 0xf4, 0x6c, 0x6c, 0xe9, 0xc2, 0x8b, 0xae, 0x03, 0xcc, 0x0b, 0xf4,
+ 0xcc, 0xbc, 0xf5, 0x0b, 0x40, 0xde, 0x20, 0x16, 0x04, 0x08, 0x13, 0x05,
+ 0xcd, 0x19, 0xf4, 0x02, 0x8e, 0xef, 0x07, 0x49, 0x03, 0x42, 0x87, 0xc2,
+ 0xbc, 0x63, 0x6f, 0x64, 0xe5, 0xc3, 0x57, 0xe8, 0x05, 0x06, 0x15, 0xc0,
+ 0x79, 0x6f, 0xf2, 0x4b, 0x06, 0xc3, 0x32, 0x67, 0x65, 0x61, 0xf2, 0x02,
+ 0x85, 0x61, 0x70, 0xf0, 0xcc, 0xc5, 0x2d, 0x73, 0x74, 0x61, 0x67, 0x69,
+ 0x6e, 0xe7, 0xcd, 0xea, 0xae, 0x07, 0x06, 0x07, 0x05, 0x03, 0x20, 0x8c,
+ 0x75, 0x73, 0xad, 0x40, 0x7a, 0x8d, 0x73, 0x61, 0x2d, 0x65, 0xe1, 0xc0,
+ 0x7b, 0x6d, 0x65, 0xad, 0x28, 0xb3, 0x69, 0xec, 0xa3, 0x65, 0x75, 0xad,
+ 0x04, 0x04, 0x07, 0x85, 0x77, 0xe5, 0xc0, 0x43, 0x73, 0x6f, 0x75, 0x74,
+ 0xe8, 0xc0, 0x69, 0x6e, 0x6f, 0xf2, 0xc0, 0x44, 0x63, 0x65, 0x6e, 0x74,
+ 0x72, 0x61, 0xec, 0xc0, 0x5b, 0x63, 0x61, 0x2d, 0x63, 0x65, 0x6e, 0x74,
+ 0x72, 0x61, 0xec, 0xc0, 0x49, 0xe1, 0x02, 0xa5, 0x70, 0xad, 0x02, 0x92,
+ 0x73, 0x6f, 0x75, 0x74, 0xe8, 0x02, 0xbf, 0x65, 0x61, 0x73, 0x74, 0xad,
+ 0x04, 0x0f, 0x2a, 0x82, 0xb4, 0xbb, 0x6e, 0x6f, 0x72, 0x74, 0x68, 0x65,
+ 0x61, 0x73, 0x74, 0xad, 0x03, 0x2a, 0x82, 0xb3, 0xac, 0x66, 0x2d, 0x73,
+ 0x6f, 0x75, 0x74, 0xe8, 0x98, 0x2d, 0x66, 0x69, 0x70, 0x73, 0x2e, 0x75,
+ 0x73, 0xad, 0x03, 0x03, 0x8a, 0x77, 0xe5, 0x8d, 0x67, 0x6f, 0x76, 0x2d,
+ 0x77, 0x65, 0x73, 0x74, 0xad, 0x8a, 0x65, 0x61, 0x73, 0x74, 0xad, 0x02,
+ 0x82, 0xb2, 0x82, 0x31, 0x2e, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x63,
+ 0x6f, 0x67, 0x6e, 0x69, 0x74, 0xef, 0xcd, 0x3e, 0xf3, 0x03, 0x0b, 0x85,
+ 0xf4, 0x02, 0x85, 0x72, 0x68, 0xe5, 0xc1, 0x44, 0xe5, 0xc1, 0x39, 0x70,
+ 0x6f, 0xf3, 0xcb, 0x50, 0x2e, 0x62, 0x61, 0x73, 0x6b, 0x65, 0x74, 0x62,
+ 0x61, 0xec, 0xcc, 0x69, 0xf2, 0x04, 0x0d, 0xcb, 0x58, 0x73, 0x6b, 0x6f,
+ 0x67, 0x2d, 0xe8, 0x02, 0x84, 0x1f, 0x43, 0xf8, 0x82, 0x6f, 0x6c, 0xe1,
+ 0xc6, 0x20, 0x6b, 0xf2, 0xc6, 0x8c, 0x67, 0x75, 0x73, 0x74, 0x6f, 0xf7,
+ 0xc7, 0xf0, 0xe4, 0x02, 0x87, 0x6e, 0x65, 0x64, 0x61, 0xec, 0xc6, 0x6d,
+ 0xe9, 0x05, 0x4b, 0x4c, 0xc1, 0xd5, 0xe2, 0xca, 0xda, 0x63, 0x74, 0xe9,
+ 0xc5, 0x2c, 0xae, 0x43, 0x2b, 0xc3, 0x08, 0xf4, 0x0b, 0x07, 0x0b, 0x03,
+ 0x09, 0x15, 0x09, 0x04, 0x10, 0xcc, 0xb8, 0x74, 0x6f, 0x72, 0x6e, 0xe5,
+ 0xca, 0x79, 0x73, 0xf5, 0x02, 0x83, 0xed, 0xca, 0xc7, 0x67, 0xe9, 0xc7,
+ 0xad, 0xef, 0xcb, 0x50, 0xed, 0x03, 0xc7, 0xac, 0x65, 0x74, 0xe1, 0xcc,
+ 0xb5, 0x6c, 0x2e, 0x6a, 0x65, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e,
+ 0x76, 0x70, 0x73, 0x2d, 0x68, 0x6f, 0x73, 0xf4, 0xcc, 0x74, 0xe8, 0x03,
+ 0xc0, 0x85, 0x6c, 0x65, 0xf4, 0xca, 0xd4, 0x61, 0xed, 0xc1, 0xfd, 0xae,
+ 0x03, 0xca, 0x6f, 0xe5, 0x03, 0xc5, 0xdc, 0x6d, 0x66, 0x2e, 0x63, 0x61,
+ 0xed, 0xcc, 0x7a, 0x2d, 0x62, 0x61, 0x6e, 0x64, 0x2d, 0x63, 0x61, 0x6d,
+ 0xf0, 0xcc, 0x4b, 0xf3, 0x12, 0x05, 0x03, 0x40, 0x52, 0x0b, 0x17, 0x03,
+ 0x2d, 0x04, 0x03, 0x0e, 0x40, 0xf6, 0x44, 0xb6, 0xc6, 0x2c, 0x75, 0x6b,
+ 0xe5, 0xc6, 0xc5, 0xf4, 0xc3, 0x9e, 0xf3, 0x06, 0x04, 0x2d, 0x05, 0x0d,
+ 0x84, 0x75, 0xf2, 0xc1, 0x91, 0xef, 0x02, 0x8a, 0x63, 0x69, 0x61, 0xf4,
+ 0x03, 0xc9, 0x47, 0xe5, 0xc9, 0xbf, 0xae, 0x0d, 0x02, 0x04, 0x03, 0x03,
+ 0x03, 0x1a, 0x45, 0x5d, 0x43, 0x01, 0xc0, 0xc8, 0xee, 0x82, 0x6d, 0xe3,
+ 0xcc, 0x67, 0xe7, 0xca, 0x74, 0xe6, 0xca, 0xbe, 0xe4, 0xc9, 0x98, 0xe3,
+ 0xc9, 0xef, 0x6e, 0x2e, 0xec, 0xc9, 0x9d, 0x65, 0x73, 0x73, 0x6d, 0x65,
+ 0x6e, 0x74, 0x73, 0x2e, 0x63, 0xf8, 0xcc, 0x16, 0x61, 0xe2, 0xc7, 0x08,
+ 0x2e, 0xeb, 0xc9, 0x9c, 0xee, 0x03, 0xc7, 0x5f, 0xae, 0x03, 0xc8, 0xc9,
+ 0xec, 0xc8, 0x08, 0xeb, 0x06, 0x05, 0x03, 0x04, 0xc2, 0xed, 0x76, 0x6f,
+ 0xec, 0xc4, 0x7f, 0xef, 0xc3, 0x38, 0x69, 0xed, 0xca, 0x3b, 0x65, 0xf2,
+ 0xca, 0x37, 0xe9, 0xca, 0x22, 0xe8, 0x03, 0x05, 0x9d, 0x6f, 0x72, 0xef,
+ 0xca, 0x0b, 0xe9, 0x04, 0x0b, 0xc6, 0xc0, 0x79, 0x61, 0xae, 0x03, 0xc6,
+ 0xa6, 0x66, 0x75, 0xeb, 0xc1, 0x3c, 0x6b, 0x61, 0x67, 0x61, 0x2e, 0x74,
+ 0x6f, 0x63, 0x68, 0x69, 0xe7, 0xc9, 0x96, 0x67, 0x61, 0x62, 0x61, 0xe4,
+ 0xc9, 0xb2, 0x65, 0xf2, 0xc4, 0x3f, 0xe4, 0xc9, 0xee, 0x63, 0x6f, 0x6c,
+ 0xe9, 0x02, 0x81, 0x2d, 0x70, 0x69, 0x63, 0x65, 0xee, 0xc9, 0x83, 0xe1,
+ 0x04, 0x0c, 0x13, 0xa1, 0x6d, 0x69, 0x6e, 0x61, 0x6d, 0x69, 0x2e, 0x68,
+ 0x69, 0xf2, 0xc4, 0xfb, 0xeb, 0x02, 0x86, 0x75, 0x63, 0x68, 0xe9, 0xc5,
+ 0x79, 0xe1, 0x02, 0x84, 0x77, 0xe1, 0xc5, 0xc6, 0xae, 0xc0, 0xe3, 0x68,
+ 0xe9, 0x02, 0x85, 0x6b, 0x61, 0xf7, 0xc9, 0x78, 0xae, 0x09, 0x06, 0x04,
+ 0x43, 0x75, 0x44, 0xba, 0xc1, 0x38, 0x79, 0x61, 0x6d, 0xe1, 0xc6, 0xcf,
+ 0x74, 0xef, 0xc5, 0x56, 0x6d, 0xe9, 0xc6, 0x43, 0xe7, 0xc4, 0xd9, 0xf2,
+ 0x11, 0x0b, 0x2d, 0x03, 0x03, 0x08, 0x09, 0x1c, 0x0e, 0x1d, 0x28, 0x43,
+ 0x13, 0x45, 0x64, 0xc2, 0x49, 0x76, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77,
+ 0x6f, 0xf2, 0xca, 0xfc, 0xf4, 0x05, 0x0f, 0x05, 0xcb, 0x59, 0x73, 0xae,
+ 0x06, 0x03, 0x40, 0x84, 0xc9, 0x08, 0xf6, 0xc9, 0xa6, 0x6e, 0xe6, 0xcb,
+ 0x60, 0xe5, 0x48, 0x4f, 0xc3, 0x0e, 0xae, 0x07, 0x03, 0x03, 0x47, 0x67,
+ 0xc2, 0x40, 0xf3, 0xc9, 0xcc, 0xf0, 0xca, 0x61, 0xe4, 0x48, 0x84, 0xc0,
+ 0xf1, 0xf1, 0xc9, 0xa0, 0xee, 0xc4, 0x93, 0xed, 0x03, 0xc8, 0xb2, 0x65,
+ 0xee, 0xc8, 0xfb, 0x6b, 0x68, 0x61, 0x6e, 0x67, 0x65, 0xec, 0xc4, 0x6c,
+ 0xe9, 0x03, 0x03, 0x8d, 0x74, 0xe1, 0x91, 0x64, 0xe1, 0x02, 0x84, 0x67,
+ 0x61, 0x77, 0x61, 0x2e, 0x77, 0xe1, 0xc4, 0xd8, 0x61, 0x6b, 0x65, 0x2e,
+ 0x73, 0xe1, 0xc5, 0x3f, 0xe5, 0x04, 0x03, 0xc8, 0xb2, 0xee, 0xc3, 0x60,
+ 0x6d, 0x61, 0x72, 0xeb, 0xc9, 0x1f, 0x63, 0xe8, 0x02, 0x8d, 0xe9, 0x03,
+ 0xca, 0xfd, 0x74, 0x65, 0x63, 0x74, 0x65, 0x73, 0xae, 0xc6, 0x46, 0x65,
+ 0x72, 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x74, 0xae, 0xc9, 0xe3, 0xe1,
+ 0x05, 0x03, 0x04, 0x0e, 0x8a, 0xef, 0xc2, 0xfd, 0x6d, 0xe3, 0xc9, 0x08,
+ 0x6b, 0x61, 0x77, 0x61, 0xae, 0x03, 0xc7, 0x38, 0x73, 0x61, 0x69, 0xf4,
+ 0xc4, 0x8d, 0x69, 0x2e, 0x73, 0x68, 0x69, 0x7a, 0x75, 0xef, 0xc8, 0xa1,
+ 0xe2, 0xca, 0xc2, 0xae, 0x45, 0x33, 0x43, 0x37, 0xc2, 0x1f, 0xf1, 0x05,
+ 0x48, 0x5d, 0xc2, 0x56, 0xf5, 0x02, 0x84, 0x69, 0xec, 0xc3, 0x98, 0x61,
+ 0x72, 0x65, 0xec, 0xc8, 0x62, 0xf0, 0x06, 0x40, 0x81, 0x18, 0x12, 0x96,
+ 0xf0, 0x08, 0x05, 0x2b, 0x07, 0x07, 0x07, 0xca, 0x51, 0x75, 0x64, 0xef,
+ 0xca, 0x30, 0xf3, 0x02, 0x98, 0xf0, 0x02, 0x82, 0xef, 0x91, 0x61, 0x63,
+ 0xe5, 0x03, 0xc8, 0xb2, 0x75, 0x73, 0x65, 0x72, 0x63, 0x6f, 0x6e, 0x74,
+ 0x65, 0x6e, 0xf4, 0xca, 0x41, 0xae, 0x02, 0x86, 0x6c, 0x61, 0x69, 0xf2,
+ 0xc9, 0x1d, 0x66, 0x62, 0x73, 0x62, 0xf8, 0xca, 0x31, 0xec, 0x03, 0xc8,
+ 0xa4, 0x69, 0xee, 0x8b, 0x65, 0x6e, 0x67, 0x69, 0xee, 0xc3, 0x01, 0x63,
+ 0x68, 0x69, 0x7a, 0xe9, 0xca, 0x1c, 0xae, 0x03, 0x07, 0x98, 0x72, 0x65,
+ 0x6e, 0x64, 0xe5, 0xc9, 0x15, 0x6f, 0x73, 0xae, 0x02, 0x84, 0x73, 0x74,
+ 0x67, 0x2e, 0x66, 0x65, 0x64, 0x6f, 0x72, 0x61, 0x70, 0x72, 0x6f, 0x6a,
+ 0x65, 0x63, 0xf4, 0xc7, 0x0b, 0xe2, 0x03, 0xc8, 0x87, 0x61, 0x6e, 0x7a,
+ 0x61, 0x69, 0x63, 0x6c, 0x6f, 0x75, 0xe4, 0xc8, 0xce, 0xe9, 0x02, 0x85,
+ 0x67, 0x65, 0xe5, 0xc8, 0xc6, 0xae, 0x02, 0x88, 0x73, 0x74, 0x64, 0x6c,
+ 0x69, 0xe2, 0xc9, 0xd6, 0x67, 0x6f, 0xf6, 0xc6, 0x57, 0x61, 0xf2, 0x02,
+ 0x87, 0x74, 0x6d, 0x65, 0x6e, 0xf4, 0xc7, 0x41, 0x65, 0x63, 0x69, 0x64,
+ 0xe1, 0xc8, 0x51, 0xae, 0x06, 0x07, 0x42, 0xfb, 0xc4, 0x96, 0x6e, 0x67,
+ 0x72, 0x6f, 0xeb, 0xc8, 0x96, 0x67, 0x6f, 0x76, 0xae, 0x44, 0xd5, 0xc3,
+ 0x69, 0xad, 0x03, 0x08, 0x95, 0x73, 0x6f, 0x75, 0x74, 0xe8, 0x08, 0xc5,
+ 0x3f, 0x6e, 0x6f, 0x72, 0x74, 0x68, 0x65, 0x61, 0x73, 0x74, 0xad, 0x04,
+ 0x04, 0xc5, 0x33, 0x33, 0xae, 0xc5, 0x39, 0xb2, 0xc5, 0x33, 0x65, 0x61,
+ 0x73, 0xf4, 0xc5, 0x2b, 0xef, 0x0a, 0x13, 0x0f, 0x03, 0x46, 0xe5, 0x40,
+ 0x4c, 0xc2, 0x56, 0x73, 0xf4, 0x03, 0xc2, 0x0e, 0xe1, 0x04, 0x01, 0xc7,
+ 0x4b, 0x2d, 0x76, 0x61, 0x6c, 0x6c, 0x65, 0xf9, 0xc7, 0x45, 0x6d, 0x6f,
+ 0x72, 0x69, 0xae, 0x03, 0xc7, 0x93, 0x61, 0x6f, 0x6d, 0x6f, 0xf2, 0xc7,
+ 0x2c, 0xeb, 0xc6, 0x1f, 0x67, 0xe1, 0x41, 0xaf, 0xc1, 0x40, 0xee, 0x0d,
+ 0x04, 0x0c, 0x17, 0x04, 0x0e, 0x40, 0x60, 0x05, 0x46, 0x0f, 0xc0, 0x70,
+ 0x71, 0xf5, 0xc4, 0xaa, 0x70, 0x61, 0x63, 0x68, 0x69, 0x2e, 0x67, 0x69,
+ 0x66, 0xf5, 0xc7, 0x66, 0xee, 0x02, 0x89, 0x61, 0x6b, 0x61, 0x2e, 0x67,
+ 0x75, 0xee, 0xc3, 0x6e, 0x2d, 0x61, 0x72, 0x62, 0x6f, 0x72, 0x2e, 0x6d,
+ 0xe9, 0xc3, 0x22, 0x6a, 0xef, 0xc3, 0x79, 0xe7, 0x02, 0x84, 0x72, 0xf9,
+ 0xc9, 0x01, 0x69, 0x61, 0x6e, 0x67, 0xae, 0xc6, 0x4e, 0xe4, 0x05, 0x05,
+ 0x3d, 0x0c, 0x84, 0x1f, 0x43, 0xf8, 0xc0, 0x42, 0xf2, 0x02, 0x84, 0x6f,
+ 0xe9, 0xc6, 0x8b, 0x69, 0xe1, 0x03, 0x06, 0x89, 0x74, 0x72, 0x61, 0x6e,
+ 0xe9, 0x93, 0x62, 0x61, 0x72, 0x6c, 0x65, 0x74, 0x74, 0xe1, 0x9c, 0xad,
+ 0x02, 0x8f, 0x74, 0x72, 0x61, 0x6e, 0x69, 0x2d, 0x62, 0x61, 0x72, 0x6c,
+ 0x65, 0x74, 0xf4, 0xc1, 0xee, 0x62, 0x61, 0x72, 0x6c, 0x65, 0x74, 0x74,
+ 0x61, 0x2d, 0x74, 0x72, 0x61, 0x6e, 0xe9, 0xc6, 0x9e, 0xef, 0x02, 0x83,
+ 0xf9, 0xc7, 0x06, 0x2e, 0x6e, 0x61, 0xf2, 0xc6, 0xc5, 0x65, 0xe2, 0xc1,
+ 0xec, 0x61, 0x73, 0x75, 0x6f, 0x6c, 0xef, 0xc6, 0xf4, 0x63, 0x6f, 0xee,
+ 0xc1, 0xc1, 0xe1, 0x03, 0x0b, 0x8c, 0xee, 0x02, 0x83, 0xe9, 0xc7, 0x28,
+ 0xae, 0x42, 0xcf, 0xc2, 0x93, 0x6d, 0x69, 0x7a, 0x75, 0x2e, 0x69, 0x73,
+ 0x68, 0x69, 0xeb, 0xc3, 0xa1, 0x6c, 0x79, 0x74, 0x69, 0x63, 0xf3, 0x03,
+ 0xc8, 0xb1, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0xae, 0x03,
+ 0x0b, 0x92, 0x75, 0x73, 0xad, 0x02, 0xab, 0x77, 0x65, 0x73, 0x74, 0xad,
+ 0xad, 0x65, 0x75, 0xad, 0x02, 0x85, 0x77, 0x65, 0x73, 0xf4, 0x95, 0x63,
+ 0x65, 0x6e, 0x74, 0x72, 0x61, 0xec, 0x8d, 0x61, 0x70, 0xad, 0x02, 0x89,
+ 0x73, 0x6f, 0x75, 0x74, 0xe8, 0x02, 0x87, 0xad, 0x8f, 0x6e, 0x6f, 0x72,
+ 0x74, 0x68, 0x65, 0x61, 0x73, 0x74, 0xad, 0x02, 0x82, 0xb2, 0x82, 0x31,
+ 0x2e, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x61, 0xf7, 0xc6, 0xfc, 0xed,
+ 0x0d, 0x08, 0x11, 0x0a, 0x04, 0x04, 0x0d, 0x04, 0x1c, 0x04, 0x28, 0xc7,
+ 0xce, 0x75, 0x73, 0x65, 0x6d, 0x65, 0xee, 0xc2, 0xbc, 0xf3, 0x02, 0x85,
+ 0x74, 0x65, 0x72, 0xe4, 0xaa, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0xe5,
+ 0xc8, 0x04, 0x70, 0x6c, 0x69, 0x66, 0x79, 0x61, 0x70, 0xf0, 0xc8, 0x29,
+ 0x6f, 0xf4, 0xc6, 0x45, 0x6c, 0xe9, 0xc6, 0x41, 0xe9, 0x03, 0xc6, 0x28,
+ 0x2e, 0x69, 0x62, 0x61, 0x72, 0x61, 0xeb, 0xc5, 0xbc, 0x66, 0xe1, 0xc5,
+ 0x73, 0xe5, 0x02, 0x83, 0xf8, 0xc8, 0x12, 0x72, 0x69, 0x63, 0x61, 0xee,
+ 0x02, 0x87, 0x66, 0x61, 0x6d, 0x69, 0xec, 0xc5, 0x7a, 0x65, 0x78, 0x70,
+ 0x72, 0x65, 0xf3, 0xc5, 0x40, 0x62, 0xf5, 0xc2, 0x8a, 0xe1, 0x05, 0x04,
+ 0x04, 0x0e, 0x87, 0x7a, 0xef, 0xc6, 0x6a, 0x6d, 0xe9, 0xc1, 0x18, 0x6b,
+ 0x75, 0x73, 0x61, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x6d, 0x6f, 0xf4, 0xc5,
+ 0xdc, 0x67, 0x61, 0x73, 0x61, 0xeb, 0xc2, 0x73, 0xae, 0x41, 0x96, 0xc0,
+ 0x6c, 0xae, 0x40, 0xe2, 0x03, 0x45, 0x44, 0x9f, 0xec, 0x0e, 0x0a, 0x06,
+ 0x1b, 0x13, 0x2a, 0x12, 0x16, 0x04, 0x11, 0x0d, 0x11, 0xc6, 0xf5, 0x77,
+ 0x61, 0x79, 0x73, 0x64, 0x61, 0x74, 0xe1, 0xc7, 0x4d, 0x76, 0x64, 0x61,
+ 0xec, 0xc5, 0xc2, 0xf4, 0x06, 0x0b, 0x40, 0xe7, 0xc1, 0xb4, 0xef, 0x02,
+ 0x81, 0x2d, 0x61, 0x64, 0x69, 0x67, 0xe5, 0xc5, 0x42, 0x65, 0x72, 0x76,
+ 0x69, 0x73, 0x74, 0xe1, 0xc4, 0x6a, 0xf3, 0x02, 0x8d, 0xf4, 0x02, 0x83,
+ 0xef, 0xc4, 0xe1, 0x61, 0x68, 0x61, 0x75, 0xe7, 0xc5, 0x97, 0xe1, 0xc1,
+ 0xe5, 0xf0, 0x02, 0x9b, 0x68, 0xe1, 0x02, 0x8e, 0x2e, 0x62, 0x6f, 0x75,
+ 0x6e, 0x74, 0x79, 0x2d, 0x66, 0x75, 0x6c, 0xec, 0xc7, 0x30, 0x2d, 0x6d,
+ 0x79, 0x71, 0x6e, 0x61, 0xf0, 0xc1, 0x79, 0x31, 0x2e, 0x61, 0x65, 0x2e,
+ 0x66, 0x6c, 0x6f, 0x77, 0xae, 0xc6, 0x6d, 0xec, 0x04, 0x06, 0xc4, 0xbb,
+ 0x73, 0x74, 0x61, 0xf4, 0xc5, 0x89, 0x66, 0x69, 0x6e, 0x61, 0xee, 0xc4,
+ 0x7a, 0xe9, 0x03, 0x04, 0x85, 0x70, 0xe1, 0xc4, 0xae, 0x62, 0x61, 0xe2,
+ 0xc5, 0x39, 0x61, 0x73, 0x65, 0x73, 0x31, 0x32, 0xb1, 0xc6, 0xf3, 0x67,
+ 0xe1, 0xc2, 0x7b, 0x65, 0xf3, 0x02, 0x84, 0x75, 0xee, 0xc2, 0x74, 0x73,
+ 0x61, 0x6e, 0x64, 0x72, 0x69, 0xe1, 0xc4, 0xbf, 0x63, 0x65, 0x73, 0x2e,
+ 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0xeb, 0xc7, 0x04, 0xe1, 0x02, 0x86,
+ 0x6e, 0x64, 0x2e, 0xe6, 0xc4, 0x93, 0x68, 0x65, 0x61, 0x64, 0x6a, 0xf5,
+ 0xc5, 0x0f, 0xae, 0x09, 0x03, 0x03, 0x41, 0x59, 0x43, 0x37, 0xc0, 0x6e,
+ 0xec, 0xc4, 0x34, 0xe7, 0xc4, 0x4f, 0x65, 0xf5, 0xc3, 0xbe, 0xeb, 0x0b,
+ 0x0a, 0x0a, 0x08, 0x03, 0x0a, 0x06, 0x22, 0x03, 0xc0, 0x55, 0x75, 0x6e,
+ 0x65, 0x2e, 0x6b, 0x61, 0x67, 0xef, 0xc0, 0xdf, 0x74, 0x79, 0x75, 0x62,
+ 0x69, 0x6e, 0x73, 0xeb, 0xc4, 0x86, 0x72, 0x65, 0x68, 0x61, 0x6d, 0xee,
+ 0xc4, 0xd3, 0xef, 0xc1, 0x57, 0x6e, 0x6f, 0x6c, 0x75, 0x6f, 0x6b, 0x74,
+ 0xe1, 0xc4, 0xc6, 0x6b, 0x65, 0x73, 0xe8, 0xc4, 0x9f, 0xe9, 0x04, 0x0b,
+ 0x07, 0x86, 0x74, 0x61, 0xae, 0x03, 0xc4, 0x9d, 0x61, 0x6b, 0xe9, 0xc1,
+ 0xcc, 0x73, 0x68, 0x69, 0x6d, 0xe1, 0xc2, 0xf5, 0x72, 0x75, 0x6e, 0xef,
+ 0xc2, 0xef, 0x2e, 0x6b, 0xef, 0xc4, 0x24, 0xe4, 0xc4, 0xff, 0xe1, 0x06,
+ 0x04, 0x2c, 0x0b, 0x0b, 0x84, 0x73, 0xe8, 0xc1, 0x16, 0x6d, 0x61, 0xe9,
+ 0x07, 0x03, 0x09, 0x05, 0x07, 0xc5, 0xf1, 0x7a, 0xe5, 0x8b, 0x6f, 0x72,
+ 0x69, 0x67, 0x69, 0xee, 0x0f, 0xc5, 0xf1, 0x68, 0xe4, 0x0a, 0xc5, 0xf1,
+ 0x65, 0x64, 0x67, 0xe5, 0x03, 0xc5, 0xf1, 0x2d, 0x73, 0x74, 0x61, 0x67,
+ 0x69, 0x6e, 0xe7, 0xc5, 0xe9, 0x69, 0x77, 0x61, 0x2e, 0x6f, 0x6b, 0x61,
+ 0x79, 0xe1, 0xc0, 0x56, 0x67, 0x69, 0x2e, 0x73, 0x68, 0x69, 0x6d, 0x61,
+ 0xee, 0xc0, 0xe4, 0x64, 0xee, 0xc5, 0xce, 0x62, 0xe9, 0xc3, 0xf8, 0xae,
+ 0xc0, 0x9f, 0xea, 0xc4, 0x82, 0xe9, 0x11, 0x2c, 0x09, 0x13, 0x40, 0x64,
+ 0x05, 0x09, 0x0b, 0x0b, 0x03, 0x07, 0x42, 0xd8, 0x42, 0x61, 0x81, 0x7a,
+ 0xf5, 0x03, 0x0a, 0x8d, 0x77, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x74, 0x73,
+ 0xf5, 0x93, 0x6d, 0xe9, 0x02, 0x85, 0x73, 0x61, 0x74, 0xef, 0x8a, 0x2e,
+ 0x74, 0xef, 0x89, 0x62, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x66, 0x75, 0x6b,
+ 0x75, 0x73, 0x68, 0x69, 0xed, 0xc3, 0xc7, 0x76, 0x65, 0x6e, 0x63, 0x6c,
+ 0x6f, 0xf5, 0xc4, 0x15, 0xf3, 0x02, 0x89, 0x68, 0x6f, 0x2e, 0x73, 0x68,
+ 0x69, 0xe7, 0xc3, 0xb2, 0x61, 0x69, 0x2e, 0x61, 0xe9, 0xc3, 0x6c, 0xf2,
+ 0x08, 0x0c, 0x04, 0x05, 0x14, 0x06, 0x07, 0x84, 0xf4, 0x02, 0x86, 0x72,
+ 0x61, 0x66, 0xe6, 0xc1, 0x85, 0xe5, 0xc3, 0x17, 0x70, 0x6f, 0xf2, 0xa4,
+ 0x6c, 0x69, 0xee, 0xc1, 0x6d, 0x6b, 0x69, 0x74, 0x61, 0x70, 0x70, 0xf3,
+ 0x02, 0x87, 0xae, 0x03, 0xc5, 0x6b, 0xe5, 0xc4, 0xb8, 0x2d, 0xe1, 0xc4,
+ 0x20, 0x66, 0x6f, 0x72, 0xe3, 0xc3, 0xd8, 0x63, 0x72, 0x61, 0x66, 0xf4,
+ 0xc2, 0x5d, 0x62, 0xf5, 0xc2, 0xcf, 0xad, 0x02, 0x91, 0x74, 0x72, 0x61,
+ 0x66, 0x66, 0x69, 0x63, 0x2d, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0xec,
+ 0xc2, 0x45, 0x73, 0x75, 0x72, 0x76, 0x65, 0x69, 0x6c, 0x6c, 0x61, 0x6e,
+ 0xe3, 0xc1, 0x27, 0x70, 0x2e, 0xe5, 0xc3, 0xa7, 0x6f, 0x69, 0x2e, 0x68,
+ 0x79, 0x6f, 0xe7, 0xc3, 0x5c, 0x6e, 0x61, 0x6e, 0x2e, 0x65, 0x68, 0x69,
+ 0x6d, 0xe5, 0xc3, 0x52, 0x6b, 0x61, 0x77, 0x61, 0x2e, 0x6b, 0x61, 0x6e,
+ 0x61, 0xe7, 0xaa, 0x64, 0xae, 0xb5, 0x62, 0x65, 0x74, 0x73, 0xf5, 0xc3,
+ 0x34, 0xae, 0x42, 0x4b, 0xc1, 0x69, 0x68, 0xae, 0x03, 0xc3, 0x49, 0xe3,
+ 0xc3, 0xab, 0xe7, 0x09, 0x0c, 0x24, 0x14, 0x07, 0x42, 0x82, 0xc2, 0x56,
+ 0x75, 0x6e, 0x69, 0x2e, 0x6f, 0x6b, 0x69, 0x6e, 0x61, 0xf7, 0xc2, 0xf6,
+ 0xf2, 0x05, 0x0c, 0x0e, 0xc3, 0x52, 0x6f, 0xae, 0x02, 0x83, 0xf0, 0xc2,
+ 0x6a, 0xe2, 0x42, 0x76, 0xc0, 0xbe, 0xe9, 0x02, 0x86, 0x67, 0x65, 0x6e,
+ 0xf4, 0xc2, 0xa7, 0x63, 0x2e, 0xfa, 0xc2, 0xff, 0x61, 0xf2, 0xc3, 0xa9,
+ 0xe5, 0x02, 0x8a, 0xee, 0x02, 0x84, 0x74, 0xf3, 0xc1, 0xb9, 0xe3, 0xc2,
+ 0x5e, 0x6d, 0x61, 0x74, 0x73, 0xf5, 0xc1, 0x78, 0x64, 0x65, 0x6e, 0x65,
+ 0xf3, 0xc2, 0xf2, 0xe1, 0x03, 0x02, 0x89, 0x6e, 0x6f, 0x2e, 0x6e, 0x69,
+ 0x69, 0x67, 0x61, 0xf4, 0xc2, 0xa8, 0x6b, 0x68, 0xe1, 0xc3, 0x42, 0xe6,
+ 0x08, 0x0e, 0x06, 0x13, 0x41, 0xf2, 0xc2, 0xa2, 0x72, 0x69, 0x63, 0xe1,
+ 0x03, 0xc4, 0xb4, 0xae, 0x03, 0xc4, 0x7a, 0xe2, 0xc2, 0x1c, 0x6a, 0x6f,
+ 0x72, 0xe4, 0xc2, 0xc1, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x6c, 0x6f,
+ 0x74, 0x74, 0x65, 0x72, 0x79, 0x2e, 0x6f, 0x72, 0xe7, 0xc0, 0xe5, 0x2d,
+ 0x73, 0x6f, 0x75, 0x74, 0x68, 0x2d, 0x31, 0xae, 0x02, 0x92, 0x65, 0x6c,
+ 0x61, 0x73, 0x74, 0x69, 0x63, 0x62, 0x65, 0x61, 0x6e, 0x73, 0x74, 0x61,
+ 0x6c, 0xeb, 0xc4, 0x42, 0x61, 0x69, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x2e,
+ 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x61, 0x77, 0xf3, 0xc4, 0x5e, 0xe5,
+ 0x09, 0x04, 0x2b, 0x0e, 0x40, 0xf8, 0x43, 0x24, 0x81, 0x74, 0xee, 0xc2,
+ 0x5e, 0x72, 0xef, 0x07, 0x06, 0x07, 0x06, 0x07, 0xc4, 0x33, 0x70, 0x6f,
+ 0x72, 0xf4, 0xc3, 0x7d, 0x64, 0x72, 0x6f, 0x6d, 0xe5, 0xc1, 0x10, 0x63,
+ 0x6c, 0x75, 0xe2, 0xc1, 0x0a, 0x62, 0x61, 0x74, 0x69, 0xe3, 0xc1, 0x03,
+ 0xae, 0x03, 0xc2, 0x1d, 0x6d, 0xf6, 0xc4, 0x2d, 0x6d, 0xae, 0x02, 0x85,
+ 0x70, 0x61, 0xe7, 0xc3, 0x7d, 0x6c, 0x69, 0xf6, 0xc3, 0x78, 0x6a, 0x72,
+ 0xe9, 0xc2, 0x31, 0xe4, 0x0d, 0x0c, 0x13, 0x0a, 0x27, 0x03, 0x0a, 0x40,
+ 0xf1, 0x40, 0xbd, 0xc1, 0xff, 0x79, 0x67, 0x65, 0x79, 0x61, 0xae, 0x03,
+ 0xc1, 0xc5, 0xf2, 0xc3, 0x18, 0xf6, 0x02, 0x89, 0x69, 0x73, 0x6f, 0x72,
+ 0x2e, 0x77, 0xf3, 0xc3, 0xf0, 0xae, 0x03, 0xc2, 0x4a, 0xed, 0xc1, 0x27,
+ 0x75, 0x6c, 0xf4, 0x03, 0xc3, 0xe5, 0x2e, 0xe8, 0xc1, 0xd2, 0x6f, 0x62,
+ 0xe5, 0x02, 0x96, 0x69, 0xef, 0x02, 0x89, 0x72, 0x75, 0x6e, 0x74, 0x69,
+ 0x6d, 0xe5, 0xc3, 0x6e, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x69, 0xe3, 0xc3,
+ 0x65, 0x61, 0x65, 0x6d, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0xae, 0x43, 0x5b,
+ 0xac, 0xed, 0xc2, 0x14, 0x69, 0x6d, 0x6f, 0x2e, 0x63, 0x6f, 0x2e, 0xf5,
+ 0xc3, 0x36, 0xe1, 0x02, 0x8b, 0x70, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e,
+ 0x61, 0xf0, 0xc3, 0x61, 0x63, 0x68, 0x69, 0x2e, 0x74, 0x6f, 0x6b, 0xf9,
+ 0xc1, 0x97, 0xe3, 0x0a, 0x1f, 0x0a, 0x40, 0x48, 0x12, 0x41, 0x32, 0xc1,
+ 0xd5, 0xf4, 0x03, 0x03, 0x8e, 0xef, 0xc1, 0xe2, 0x69, 0x76, 0x65, 0x74,
+ 0x72, 0x61, 0x69, 0x6c, 0x2e, 0x62, 0x69, 0xfa, 0xc3, 0x44, 0xae, 0x02,
+ 0x84, 0x65, 0x64, 0x75, 0x2e, 0xe1, 0xc2, 0x23, 0x68, 0x69, 0x2e, 0x6e,
+ 0x61, 0x67, 0x61, 0xee, 0xc1, 0x63, 0xe3, 0x04, 0x03, 0x0b, 0xa1, 0xf4,
+ 0xc0, 0x51, 0x6f, 0x75, 0x6e, 0x74, 0x61, 0x6e, 0xf4, 0x40, 0x96, 0xc2,
+ 0xbc, 0x69, 0x64, 0x65, 0x6e, 0x74, 0xad, 0x02, 0x87, 0x70, 0x72, 0x65,
+ 0x76, 0x65, 0xee, 0x8a, 0x69, 0x6e, 0x76, 0x65, 0x73, 0x74, 0x69, 0x67,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x61, 0xe5, 0xc1, 0x59, 0xe5, 0x02,
+ 0x8b, 0x73, 0x73, 0x63, 0x61, 0x6d, 0x2e, 0x6f, 0x72, 0xe7, 0xc2, 0xee,
+ 0x6e, 0x74, 0x75, 0xf2, 0xc1, 0x5d, 0xe1, 0x02, 0x8c, 0x64, 0x65, 0xed,
+ 0x03, 0xc0, 0x86, 0x69, 0x61, 0x2e, 0xe2, 0xc1, 0x37, 0xae, 0xc1, 0x32,
+ 0xae, 0x13, 0x05, 0x03, 0x04, 0x07, 0x04, 0x05, 0x05, 0x04, 0x0e, 0x10,
+ 0x04, 0x10, 0x08, 0x04, 0x09, 0x03, 0xc0, 0x86, 0xfa, 0x2f, 0x1e, 0xc0,
+ 0xab, 0xf6, 0xc1, 0x69, 0xf5, 0x31, 0xc2, 0xb8, 0xf4, 0x03, 0x1d, 0xb3,
+ 0xe8, 0xc2, 0xe2, 0xf3, 0x19, 0xc1, 0x08, 0xf2, 0x18, 0x07, 0xc1, 0xd4,
+ 0xf0, 0x40, 0xdc, 0xc0, 0x57, 0xee, 0x0b, 0xc0, 0x5a, 0xed, 0x07, 0x03,
+ 0x40, 0xc9, 0x3c, 0xc0, 0x74, 0xfa, 0xc2, 0xc5, 0xf7, 0xc2, 0xc2, 0xec,
+ 0x03, 0x03, 0x83, 0xf3, 0xc2, 0xbb, 0xeb, 0xc2, 0xb8, 0x65, 0x67, 0x2e,
+ 0xe2, 0xc1, 0xe8, 0xeb, 0x40, 0xf1, 0x9b, 0xe9, 0x06, 0x03, 0x03, 0x40,
+ 0xfc, 0x9f, 0xed, 0xc2, 0xa4, 0xec, 0xc2, 0xa1, 0xe4, 0xc2, 0x9e, 0xe7,
+ 0x03, 0xc1, 0x14, 0x6f, 0xf6, 0xc0, 0xf1, 0x66, 0xea, 0xc2, 0x92, 0xe3,
+ 0x05, 0x1e, 0x40, 0xc9, 0x9f, 0xf9, 0xc2, 0x89, 0xe2, 0xc0, 0xc8, 0xe1,
+ 0x40, 0x72, 0xc0, 0x53, 0xe2, 0x0b, 0x16, 0x0b, 0x0c, 0x03, 0x0a, 0x0e,
+ 0x0a, 0x05, 0x0e, 0x92, 0xf5, 0x02, 0x87, 0x64, 0x68, 0x61, 0x62, 0xe9,
+ 0xc2, 0x6b, 0x2e, 0x79, 0x61, 0x6d, 0x61, 0x67, 0x75, 0x63, 0x68, 0xe9,
+ 0xc0, 0x60, 0xf2, 0x02, 0x84, 0x75, 0x7a, 0x7a, 0x6f, 0x2e, 0xe9, 0xc0,
+ 0x43, 0xef, 0x02, 0x85, 0x67, 0x61, 0xe4, 0xc0, 0x77, 0x2e, 0xf0, 0xc0,
+ 0x4e, 0xec, 0xc0, 0x87, 0x6b, 0x68, 0x61, 0x7a, 0x69, 0x61, 0x2e, 0xf3,
+ 0xc1, 0x53, 0xe9, 0x02, 0x83, 0x72, 0xe1, 0xac, 0x6b, 0x6f, 0x2e, 0x63,
+ 0x68, 0x69, 0xe2, 0x89, 0x65, 0x6e, 0x6f, 0x2e, 0x6f, 0x73, 0x61, 0x6b,
+ 0xe1, 0xa3, 0xe3, 0x40, 0x7b, 0xc1, 0xa5, 0xe2, 0x04, 0x04, 0xc2, 0x13,
+ 0x76, 0xe9, 0xc0, 0x57, 0x6f, 0x74, 0xf4, 0xc2, 0x10, 0x61, 0x73, 0x68,
+ 0x69, 0x72, 0x69, 0x2e, 0x68, 0x6f, 0x6b, 0x6b, 0x61, 0x69, 0x64, 0x6f,
+ 0x2e, 0xea, 0x8d, 0x2e, 0x63, 0xe1, 0xc1, 0xf9, 0xe1, 0x03, 0x0b, 0x83,
+ 0xf2, 0x02, 0x83, 0xf0, 0xc1, 0xef, 0x62, 0x6f, 0x72, 0x74, 0x65, 0x2e,
+ 0xee, 0x91, 0xe1, 0x03, 0xc1, 0xe1, 0xae, 0x02, 0x87, 0x76, 0x6f, 0x64,
+ 0x6b, 0xe1, 0xc1, 0xa6, 0x70, 0x72, 0xef, 0xc1, 0xd4, 0x32, 0x68, 0x6f,
+ 0x73, 0x74, 0x65, 0xe4, 0xc1, 0x94, 0xae, 0x04, 0x09, 0xc1, 0xb9, 0xf3,
+ 0x02, 0x83, 0x73, 0xec, 0x88, 0xe5, 0xc1, 0xbd, 0x70, 0x72, 0x6f, 0x64,
+ 0x2e, 0x66, 0x61, 0x73, 0x74, 0x6c, 0xf9, 0xc1, 0x4d, 0xb9, 0x03, 0xc1,
+ 0xa7, 0x67, 0x75, 0x61, 0x63, 0x75, 0x2e, 0x62, 0xf2, 0xc1, 0xa2, 0xb8,
+ 0xc1, 0x9c, 0xb7, 0xc1, 0x26, 0xb6, 0x05, 0x03, 0x0a, 0xc1, 0x11, 0xb4,
+ 0xc0, 0x64, 0x31, 0x31, 0x2e, 0xf4, 0xc1, 0x10, 0xb5, 0x03, 0xc1, 0x11,
+ 0x67, 0x2e, 0x69, 0xee, 0xc1, 0x83, 0xb4, 0x04, 0x03, 0xc1, 0x03, 0xf5,
+ 0xc1, 0x44, 0x6c, 0x69, 0x6d, 0xe1, 0xc0, 0x5c, 0xb3, 0x04, 0x0b, 0xc0,
+ 0xed, 0x75, 0x74, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0xf3, 0xc1, 0x2e,
+ 0xb2, 0xb3, 0xb2, 0x05, 0x04, 0x10, 0xc0, 0xd1, 0x69, 0xf8, 0xc0, 0x40,
+ 0xb0, 0x02, 0x86, 0x33, 0x38, 0x2e, 0xe9, 0xc0, 0xd3, 0x30, 0x30, 0x2e,
+ 0x68, 0xf5, 0xc1, 0x49, 0x2d, 0xe4, 0xc1, 0x03, 0xb1, 0x07, 0x06, 0x05,
+ 0x05, 0x0c, 0xc0, 0xa9, 0x6b, 0x61, 0x70, 0xf0, 0xc1, 0x00, 0x38, 0x30,
+ 0xf2, 0xc0, 0xfb, 0x36, 0x2d, 0xe2, 0xc0, 0xa0, 0x33, 0x33, 0x37, 0x2e,
+ 0x70, 0x69, 0x63, 0x74, 0x75, 0xf2, 0xc0, 0x6f, 0xb2, 0x03, 0x06, 0x93,
+ 0x68, 0x70, 0xae, 0x33, 0x0d, 0x82, 0x63, 0x68, 0x61, 0x72, 0x73, 0xae,
+ 0x04, 0x04, 0xc0, 0x7b, 0x70, 0xf2, 0xc0, 0x8c, 0x64, 0x65, 0xf6, 0xc0,
+ 0xd1, 0xb3, 0x06, 0x28, 0x0c, 0x0d, 0x16, 0x8d, 0x77, 0x65, 0x62, 0xf3,
+ 0x02, 0x96, 0x69, 0x74, 0x65, 0xae, 0x04, 0x04, 0x04, 0x84, 0x6e, 0xec,
+ 0xc0, 0xb8, 0x6c, 0xf5, 0xc0, 0xb4, 0x63, 0xe8, 0xc0, 0xb0, 0xe2, 0xb9,
+ 0x65, 0x69, 0x74, 0x65, 0xae, 0x02, 0x82, 0xe4, 0xb0, 0xe1, 0xc0, 0x75,
+ 0x73, 0x69, 0x74, 0x65, 0x77, 0x65, 0x62, 0x2e, 0x66, 0xf2, 0xc0, 0x96,
+ 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x77, 0x65, 0x62, 0x2e, 0xf0, 0xc0,
+ 0x5c, 0x6d, 0xe9, 0x02, 0x88, 0x77, 0x65, 0x62, 0x2e, 0x65, 0xf3, 0xc0,
+ 0x7d, 0x6e, 0x73, 0x69, 0x64, 0x61, 0x2e, 0x73, 0xe5, 0xc0, 0x73, 0x6b,
+ 0x6f, 0x74, 0x69, 0x73, 0x69, 0x76, 0x75, 0x2e, 0x66, 0xe9, 0xc0, 0x66,
+ 0xe8, 0x02, 0x8a, 0x6f, 0x6d, 0x65, 0x70, 0x61, 0x67, 0x65, 0x2e, 0xe9,
+ 0xab, 0x6a, 0x65, 0x6d, 0x6d, 0x65, 0x73, 0x69, 0x64, 0x65, 0xae, 0x02,
+ 0x84, 0x6e, 0xef, 0xc0, 0x49, 0x64, 0xeb, 0xc0, 0x45, 0xae, 0x03, 0xc0,
+ 0x70, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63,
+ 0x61, 0x70, 0x70, 0x73, 0x2e, 0x6e, 0x65, 0xf4, 0xac, 0xb0, 0x07, 0x02,
+ 0x02, 0x03, 0x0b, 0x06, 0xbb, 0xf4, 0x84, 0xea, 0x82, 0x67, 0xb0, 0x8e,
+ 0xe5, 0x02, 0x84, 0x6d, 0xed, 0xc0, 0x42, 0x2e, 0x76, 0xe3, 0x92, 0x61,
+ 0x6d, 0x2e, 0x6a, 0xf0, 0x8c, 0x30, 0xb1, 0x02, 0x88, 0x77, 0x77, 0x77,
+ 0x2e, 0x63, 0x6f, 0x6d, 0x88, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x63,
+ 0x6f, 0x64, 0x65, 0x2d, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x2d,
+ 0x73, 0x74, 0x67, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d,
+ 0x2e, 0x73, 0x61, 0x6c, 0x65, 0x73, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x2e,
+ 0x63, 0x6f, 0x6d, 0x8a, 0x2e, 0x62, 0x67, 0x84, 0x01,
};
diff --git a/src/3rdparty/libpsl/qt_attribution.json b/src/3rdparty/libpsl/qt_attribution.json
index 016203387a..cb5ad65a4d 100644
--- a/src/3rdparty/libpsl/qt_attribution.json
+++ b/src/3rdparty/libpsl/qt_attribution.json
@@ -20,7 +20,7 @@ supported by Qt (by the QNetworkCookieJar class).",
"Comment": "Consult https://github.com/publicsuffix/list for the sha1 but download from ...",
"Homepage": "http://publicsuffix.org/",
"Comment": "Suggested update schedule: twice per year (before a 6.x.0 release)",
- "Version": "883ced078a83f9d79a98933145425c221a5e51f0, fetched on 2024-01-25",
+ "Version": "903a83ff7bfc3148e3692e09396f9f3bdc9462ef, fetched on 2024-06-05",
"DownloadLocation": "https://publicsuffix.org/list/public_suffix_list.dat",
"License": "Mozilla Public License 2.0",
diff --git a/src/3rdparty/pcre2/import_from_pcre2_tarball.sh b/src/3rdparty/pcre2/import_from_pcre2_tarball.sh
index 7f97ef8f63..09f2ca9283 100755
--- a/src/3rdparty/pcre2/import_from_pcre2_tarball.sh
+++ b/src/3rdparty/pcre2/import_from_pcre2_tarball.sh
@@ -89,6 +89,7 @@ FILES="
src/sljit/sljitNativeARM_32.c
src/sljit/sljitNativeARM_64.c
src/sljit/sljitNativeARM_T2_32.c
+ src/sljit/sljitNativeLOONGARCH_64.c
src/sljit/sljitNativeMIPS_32.c
src/sljit/sljitNativeMIPS_64.c
src/sljit/sljitNativeMIPS_common.c
@@ -102,6 +103,8 @@ FILES="
src/sljit/sljitNativeX86_32.c
src/sljit/sljitNativeX86_64.c
src/sljit/sljitNativeX86_common.c
+ src/sljit/sljitSerialize.c
+ src/sljit/sljitUtils.c
src/sljit/allocator_src/sljitExecAllocatorPosix.c
src/sljit/allocator_src/sljitProtExecAllocatorPosix.c
src/sljit/allocator_src/sljitWXExecAllocatorPosix.c
diff --git a/src/3rdparty/pcre2/qt_attribution.json b/src/3rdparty/pcre2/qt_attribution.json
index b8862bd163..d9dc1ae697 100644
--- a/src/3rdparty/pcre2/qt_attribution.json
+++ b/src/3rdparty/pcre2/qt_attribution.json
@@ -8,8 +8,8 @@
"Description": "The PCRE library is a set of functions that implement regular expression pattern matching using the same syntax and semantics as Perl 5.",
"Homepage": "http://www.pcre.org/",
- "Version": "10.43",
- "DownloadLocation": "https://github.com/PCRE2Project/pcre2/releases/download/pcre2-10.43/pcre2-10.43.tar.bz2",
+ "Version": "10.44",
+ "DownloadLocation": "https://github.com/PCRE2Project/pcre2/releases/download/pcre2-10.44/pcre2-10.44.tar.bz2",
"License": "BSD 3-clause \"New\" or \"Revised\" License with PCRE2 binary-like Packages Exception",
"LicenseId": "LicenseRef-BSD-3-Clause-with-PCRE2-Binary-Like-Packages-Exception",
"LicenseFile": "LICENCE",
@@ -25,8 +25,8 @@
"Path": "src/sljit",
"Description": "The PCRE library is a set of functions that implement regular expression pattern matching using the same syntax and semantics as Perl 5.",
"Homepage": "http://www.pcre.org/",
- "Version": "10.43",
- "DownloadLocation": "https://github.com/PCRE2Project/pcre2/releases/download/pcre2-10.43/pcre2-10.43.tar.bz2",
+ "Version": "10.44",
+ "DownloadLocation": "https://github.com/PCRE2Project/pcre2/releases/download/pcre2-10.44/pcre2-10.44.tar.bz2",
"License": "BSD 2-clause \"Simplified\" License",
"LicenseId": "BSD-2-Clause",
"LicenseFile": "LICENCE-SLJIT",
diff --git a/src/3rdparty/pcre2/src/pcre2.h b/src/3rdparty/pcre2/src/pcre2.h
index d7a8ff5201..a322d9f2d5 100644
--- a/src/3rdparty/pcre2/src/pcre2.h
+++ b/src/3rdparty/pcre2/src/pcre2.h
@@ -42,9 +42,9 @@ POSSIBILITY OF SUCH DAMAGE.
/* The current PCRE version information. */
#define PCRE2_MAJOR 10
-#define PCRE2_MINOR 43
+#define PCRE2_MINOR 44
#define PCRE2_PRERELEASE
-#define PCRE2_DATE 2024-02-16
+#define PCRE2_DATE 2024-06-07
/* When an application links to a PCRE DLL in Windows, the symbols that are
imported have to be identified as such. When building PCRE2, the appropriate
@@ -604,6 +604,8 @@ PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \
PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \
pcre2_set_max_pattern_length(pcre2_compile_context *, PCRE2_SIZE); \
PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \
+ pcre2_set_max_pattern_compiled_length(pcre2_compile_context *, PCRE2_SIZE); \
+PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \
pcre2_set_max_varlookbehind(pcre2_compile_context *, uint32_t); \
PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \
pcre2_set_newline(pcre2_compile_context *, uint32_t); \
@@ -901,6 +903,7 @@ pcre2_compile are called by application code. */
#define pcre2_set_match_limit PCRE2_SUFFIX(pcre2_set_match_limit_)
#define pcre2_set_max_varlookbehind PCRE2_SUFFIX(pcre2_set_max_varlookbehind_)
#define pcre2_set_max_pattern_length PCRE2_SUFFIX(pcre2_set_max_pattern_length_)
+#define pcre2_set_max_pattern_compiled_length PCRE2_SUFFIX(pcre2_set_max_pattern_compiled_length_)
#define pcre2_set_newline PCRE2_SUFFIX(pcre2_set_newline_)
#define pcre2_set_parens_nest_limit PCRE2_SUFFIX(pcre2_set_parens_nest_limit_)
#define pcre2_set_offset_limit PCRE2_SUFFIX(pcre2_set_offset_limit_)
diff --git a/src/3rdparty/pcre2/src/pcre2_compile.c b/src/3rdparty/pcre2/src/pcre2_compile.c
index 8b364977c4..8e6787aba3 100644
--- a/src/3rdparty/pcre2/src/pcre2_compile.c
+++ b/src/3rdparty/pcre2/src/pcre2_compile.c
@@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language.
Written by Philip Hazel
Original API code Copyright (c) 1997-2012 University of Cambridge
- New API code Copyright (c) 2016-2023 University of Cambridge
+ New API code Copyright (c) 2016-2024 University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
@@ -808,7 +808,8 @@ enum { ERR0 = COMPILE_ERROR_BASE,
ERR61, ERR62, ERR63, ERR64, ERR65, ERR66, ERR67, ERR68, ERR69, ERR70,
ERR71, ERR72, ERR73, ERR74, ERR75, ERR76, ERR77, ERR78, ERR79, ERR80,
ERR81, ERR82, ERR83, ERR84, ERR85, ERR86, ERR87, ERR88, ERR89, ERR90,
- ERR91, ERR92, ERR93, ERR94, ERR95, ERR96, ERR97, ERR98, ERR99, ERR100 };
+ ERR91, ERR92, ERR93, ERR94, ERR95, ERR96, ERR97, ERR98, ERR99, ERR100,
+ ERR101 };
/* This is a table of start-of-pattern options such as (*UTF) and settings such
as (*LIMIT_MATCH=nnnn) and (*CRLF). For completeness and backward
@@ -7549,7 +7550,8 @@ for (;; pptr++)
if (lengthptr != NULL)
{
PCRE2_SIZE delta;
- if (PRIV(ckd_smul)(&delta, repeat_min - 1, length_prevgroup) ||
+ if (PRIV(ckd_smul)(&delta, repeat_min - 1,
+ (int)length_prevgroup) ||
OFLOW_MAX - *lengthptr < delta)
{
*errorcodeptr = ERR20;
@@ -7599,7 +7601,7 @@ for (;; pptr++)
{
PCRE2_SIZE delta;
if (PRIV(ckd_smul)(&delta, repeat_max,
- length_prevgroup + 1 + 2 + 2*LINK_SIZE) ||
+ (int)length_prevgroup + 1 + 2 + 2*LINK_SIZE) ||
OFLOW_MAX + (2 + 2*LINK_SIZE) - *lengthptr < delta)
{
*errorcodeptr = ERR20;
@@ -9908,7 +9910,7 @@ do
*bptr |= branchlength; /* branchlength never more than 65535 */
bptr = *pptrptr;
}
-while (*bptr == META_ALT);
+while (META_CODE(*bptr) == META_ALT);
/* If any branch is of variable length, the whole lookbehind is of variable
length. If the maximum length of any branch exceeds the maximum for variable
@@ -10601,14 +10603,21 @@ if (length > MAX_PATTERN_SIZE)
goto HAD_CB_ERROR;
}
-/* Compute the size of, and then get and initialize, the data block for storing
-the compiled pattern and names table. Integer overflow should no longer be
-possible because nowadays we limit the maximum value of cb.names_found and
-cb.name_entry_size. */
+/* Compute the size of, then, if not too large, get and initialize the data
+block for storing the compiled pattern and names table. Integer overflow should
+no longer be possible because nowadays we limit the maximum value of
+cb.names_found and cb.name_entry_size. */
re_blocksize = sizeof(pcre2_real_code) +
CU2BYTES(length +
(PCRE2_SIZE)cb.names_found * (PCRE2_SIZE)cb.name_entry_size);
+
+if (re_blocksize > ccontext->max_pattern_compiled_length)
+ {
+ errorcode = ERR101;
+ goto HAD_CB_ERROR;
+ }
+
re = (pcre2_real_code *)
ccontext->memctl.malloc(re_blocksize, ccontext->memctl.memory_data);
if (re == NULL)
diff --git a/src/3rdparty/pcre2/src/pcre2_context.c b/src/3rdparty/pcre2/src/pcre2_context.c
index 0bc2ea0b04..9edbd1b2ae 100644
--- a/src/3rdparty/pcre2/src/pcre2_context.c
+++ b/src/3rdparty/pcre2/src/pcre2_context.c
@@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language.
Written by Philip Hazel
Original API code Copyright (c) 1997-2012 University of Cambridge
- New API code Copyright (c) 2016-2023 University of Cambridge
+ New API code Copyright (c) 2016-2024 University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
@@ -136,6 +136,7 @@ const pcre2_compile_context PRIV(default_compile_context) = {
NULL, /* Stack guard data */
PRIV(default_tables), /* Character tables */
PCRE2_UNSET, /* Max pattern length */
+ PCRE2_UNSET, /* Max pattern compiled length */
BSR_DEFAULT, /* Backslash R default */
NEWLINE_DEFAULT, /* Newline convention */
PARENS_NEST_LIMIT, /* As it says */
@@ -353,6 +354,13 @@ return 0;
}
PCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION
+pcre2_set_max_pattern_compiled_length(pcre2_compile_context *ccontext, PCRE2_SIZE length)
+{
+ccontext->max_pattern_compiled_length = length;
+return 0;
+}
+
+PCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION
pcre2_set_newline(pcre2_compile_context *ccontext, uint32_t newline)
{
switch(newline)
diff --git a/src/3rdparty/pcre2/src/pcre2_error.c b/src/3rdparty/pcre2/src/pcre2_error.c
index 1569f6315f..7fa997aa95 100644
--- a/src/3rdparty/pcre2/src/pcre2_error.c
+++ b/src/3rdparty/pcre2/src/pcre2_error.c
@@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language.
Written by Philip Hazel
Original API code Copyright (c) 1997-2012 University of Cambridge
- New API code Copyright (c) 2016-2023 University of Cambridge
+ New API code Copyright (c) 2016-2024 University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
@@ -189,6 +189,7 @@ static const unsigned char compile_error_texts[] =
"\\K is not allowed in lookarounds (but see PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK)\0"
/* 100 */
"branch too long in variable-length lookbehind assertion\0"
+ "compiled pattern would be longer than the limit set by the application\0"
;
/* Match-time and UTF error texts are in the same format. */
diff --git a/src/3rdparty/pcre2/src/pcre2_extuni.c b/src/3rdparty/pcre2/src/pcre2_extuni.c
index b23946b0d1..4ed9f00c55 100644
--- a/src/3rdparty/pcre2/src/pcre2_extuni.c
+++ b/src/3rdparty/pcre2/src/pcre2_extuni.c
@@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language.
Written by Philip Hazel
Original API code Copyright (c) 1997-2012 University of Cambridge
- New API code Copyright (c) 2016-2021 University of Cambridge
+ New API code Copyright (c) 2016-2024 University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
@@ -75,7 +75,11 @@ return NULL;
* Match an extended grapheme sequence *
*************************************************/
-/*
+/* NOTE: The logic contained in this function is replicated in three special-
+purpose functions in the pcre2_jit_compile.c module. If the logic below is
+changed, they must be kept in step so that the interpreter and the JIT have the
+same behaviour.
+
Arguments:
c the first character
eptr pointer to next character
@@ -92,6 +96,7 @@ PCRE2_SPTR
PRIV(extuni)(uint32_t c, PCRE2_SPTR eptr, PCRE2_SPTR start_subject,
PCRE2_SPTR end_subject, BOOL utf, int *xcount)
{
+BOOL was_ep_ZWJ = FALSE;
int lgb = UCD_GRAPHBREAK(c);
while (eptr < end_subject)
@@ -102,6 +107,12 @@ while (eptr < end_subject)
rgb = UCD_GRAPHBREAK(c);
if ((PRIV(ucp_gbtable)[lgb] & (1u << rgb)) == 0) break;
+ /* ZWJ followed by Extended Pictographic is allowed only if the ZWJ was
+ preceded by Extended Pictographic. */
+
+ if (lgb == ucp_gbZWJ && rgb == ucp_gbExtended_Pictographic && !was_ep_ZWJ)
+ break;
+
/* Not breaking between Regional Indicators is allowed only if there
are an even number of preceding RIs. */
@@ -129,12 +140,15 @@ while (eptr < end_subject)
if ((ricount & 1) != 0) break; /* Grapheme break required */
}
- /* If Extend or ZWJ follows Extended_Pictographic, do not update lgb; this
- allows any number of them before a following Extended_Pictographic. */
+ /* Set a flag when ZWJ follows Extended Pictographic (with optional Extend in
+ between; see next statement). */
+
+ was_ep_ZWJ = (lgb == ucp_gbExtended_Pictographic && rgb == ucp_gbZWJ);
+
+ /* If Extend follows Extended_Pictographic, do not update lgb; this allows
+ any number of them before a following ZWJ. */
- if ((rgb != ucp_gbExtend && rgb != ucp_gbZWJ) ||
- lgb != ucp_gbExtended_Pictographic)
- lgb = rgb;
+ if (rgb != ucp_gbExtend || lgb != ucp_gbExtended_Pictographic) lgb = rgb;
eptr += len;
if (xcount != NULL) *xcount += 1;
diff --git a/src/3rdparty/pcre2/src/pcre2_intmodedep.h b/src/3rdparty/pcre2/src/pcre2_intmodedep.h
index 5fcddce5fe..9bd9e694a4 100644
--- a/src/3rdparty/pcre2/src/pcre2_intmodedep.h
+++ b/src/3rdparty/pcre2/src/pcre2_intmodedep.h
@@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language.
Written by Philip Hazel
Original API code Copyright (c) 1997-2012 University of Cambridge
- New API code Copyright (c) 2016-2023 University of Cambridge
+ New API code Copyright (c) 2016-2024 University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
@@ -568,6 +568,7 @@ typedef struct pcre2_real_compile_context {
void *stack_guard_data;
const uint8_t *tables;
PCRE2_SIZE max_pattern_length;
+ PCRE2_SIZE max_pattern_compiled_length;
uint16_t bsr_convention;
uint16_t newline_convention;
uint32_t parens_nest_limit;
diff --git a/src/3rdparty/pcre2/src/pcre2_jit_compile.c b/src/3rdparty/pcre2/src/pcre2_jit_compile.c
index 050063ec6d..92f4fb858b 100644
--- a/src/3rdparty/pcre2/src/pcre2_jit_compile.c
+++ b/src/3rdparty/pcre2/src/pcre2_jit_compile.c
@@ -8,7 +8,7 @@ and semantics are as close as possible to those of the Perl 5 language.
Written by Philip Hazel
This module by Zoltan Herczeg
Original API code Copyright (c) 1997-2012 University of Cambridge
- New API code Copyright (c) 2016-2021 University of Cambridge
+ New API code Copyright (c) 2016-2024 University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
@@ -288,7 +288,7 @@ typedef struct bracket_backtrack {
/* For OP_ONCE. Less than 0 if not needed. */
int framesize;
/* For brackets with >3 alternatives. */
- struct sljit_put_label *matching_put_label;
+ struct sljit_jump *matching_mov_addr;
} u;
/* Points to our private memory word on the stack. */
int private_data_ptr;
@@ -5891,7 +5891,7 @@ while (TRUE)
chr++;
}
while (byte != 0);
- chr = (chr + 7) & ~7;
+ chr = (chr + 7) & (sljit_u32)(~7);
}
}
while (chars->count != 255 && bytes < bytes_end);
@@ -5951,7 +5951,10 @@ while (TRUE)
chr = *cc;
#ifdef SUPPORT_UNICODE
if (common->ucp && chr > 127)
- othercase[0] = UCD_OTHERCASE(chr);
+ {
+ chr = UCD_OTHERCASE(chr);
+ othercase[0] = (chr == (PCRE2_UCHAR)chr) ? chr : *cc;
+ }
else
#endif
othercase[0] = TABLE_GET(chr, common->fcc, chr);
@@ -6183,25 +6186,34 @@ if (max < 1)
/* Convert last_count to priority. */
for (i = 0; i < max; i++)
{
- SLJIT_ASSERT(chars[i].count > 0 && chars[i].last_count <= chars[i].count);
+ SLJIT_ASSERT(chars[i].last_count <= chars[i].count);
- if (chars[i].count == 1)
+ switch (chars[i].count)
{
+ case 0:
+ chars[i].count = 255;
+ chars[i].last_count = 0;
+ break;
+
+ case 1:
chars[i].last_count = (chars[i].last_count == 1) ? 7 : 5;
/* Simplifies algorithms later. */
chars[i].chars[1] = chars[i].chars[0];
- }
- else if (chars[i].count == 2)
- {
+ break;
+
+ case 2:
SLJIT_ASSERT(chars[i].chars[0] != chars[i].chars[1]);
if (is_powerof2(chars[i].chars[0] ^ chars[i].chars[1]))
chars[i].last_count = (chars[i].last_count == 2) ? 6 : 4;
else
chars[i].last_count = (chars[i].last_count == 2) ? 3 : 2;
- }
- else
+ break;
+
+ default:
chars[i].last_count = (chars[i].count == 255) ? 0 : 1;
+ break;
+ }
}
#ifdef JIT_HAS_FAST_FORWARD_CHAR_PAIR_SIMD
@@ -6941,7 +6953,7 @@ int i, byte, length = 0;
bit = bits[0] & 0x1;
/* All bits will be zero or one (since bit is zero or one). */
-all = -bit;
+all = (sljit_u8)-bit;
for (i = 0; i < 256; )
{
@@ -6958,7 +6970,7 @@ for (i = 0; i < 256; )
ranges[length] = i;
length++;
bit = cbit;
- all = -cbit;
+ all = (sljit_u8)-cbit; /* sign extend bit into byte */
}
i++;
}
@@ -7102,7 +7114,7 @@ for (i = 0; i < 32; i++)
byte = bits[i];
if (nclass)
- byte = ~byte;
+ byte = (sljit_u8)~byte;
j = 0;
while (byte != 0)
@@ -8003,7 +8015,7 @@ if (unicode_status & XCLASS_NEEDS_UCD)
if (cc[-1] == XCL_NOTPROP)
invertcmp ^= 0x1;
- OP2U(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_MEM1(TMP1), (sljit_sw)(PRIV(ucd_boolprop_sets) + (cc[1] >> 5)), SLJIT_IMM, (sljit_sw)1 << (cc[1] & 0x1f));
+ OP2U(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_MEM1(TMP1), (sljit_sw)(PRIV(ucd_boolprop_sets) + (cc[1] >> 5)), SLJIT_IMM, (sljit_sw)(1u << (cc[1] & 0x1f)));
add_jump(compiler, compares > 0 ? list : backtracks, JUMP(SLJIT_NOT_ZERO ^ invertcmp));
}
cc += 2;
@@ -8114,7 +8126,7 @@ if (unicode_status & XCLASS_NEEDS_UCD)
invertcmp ^= 0x1;
}
- OP2U(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_MEM1(TMP1), (sljit_sw)(PRIV(ucd_script_sets) + (cc[1] >> 5)), SLJIT_IMM, (sljit_sw)1 << (cc[1] & 0x1f));
+ OP2U(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_MEM1(TMP1), (sljit_sw)(PRIV(ucd_script_sets) + (cc[1] >> 5)), SLJIT_IMM, (sljit_sw)(1u << (cc[1] & 0x1f)));
add_jump(compiler, compares > 0 ? list : backtracks, JUMP(SLJIT_NOT_ZERO ^ invertcmp));
if (jump != NULL)
@@ -8685,6 +8697,10 @@ return cc;
#if PCRE2_CODE_UNIT_WIDTH != 32
+/* The code in this function copies the logic of the interpreter function that
+is defined in the pcre2_extuni.c source. If that code is updated, this
+function, and those below it, must be kept in step (note by PH, June 2024). */
+
static PCRE2_SPTR SLJIT_FUNC do_extuni_utf(jit_arguments *args, PCRE2_SPTR cc)
{
PCRE2_SPTR start_subject = args->begin;
@@ -8692,6 +8708,7 @@ PCRE2_SPTR end_subject = args->end;
int lgb, rgb, ricount;
PCRE2_SPTR prevcc, endcc, bptr;
BOOL first = TRUE;
+BOOL was_ep_ZWJ = FALSE;
uint32_t c;
prevcc = cc;
@@ -8712,6 +8729,12 @@ do
if ((PRIV(ucp_gbtable)[lgb] & (1 << rgb)) == 0)
break;
+ /* ZWJ followed by Extended Pictographic is allowed only if the ZWJ was
+ preceded by Extended Pictographic. */
+
+ if (lgb == ucp_gbZWJ && rgb == ucp_gbExtended_Pictographic && !was_ep_ZWJ)
+ break;
+
/* Not breaking between Regional Indicators is allowed only if there
are an even number of preceding RIs. */
@@ -8736,11 +8759,15 @@ do
if ((ricount & 1) != 0) break; /* Grapheme break required */
}
- /* If Extend or ZWJ follows Extended_Pictographic, do not update lgb; this
- allows any number of them before a following Extended_Pictographic. */
+ /* Set a flag when ZWJ follows Extended Pictographic (with optional Extend in
+ between; see next statement). */
+
+ was_ep_ZWJ = (lgb == ucp_gbExtended_Pictographic && rgb == ucp_gbZWJ);
- if ((rgb != ucp_gbExtend && rgb != ucp_gbZWJ) ||
- lgb != ucp_gbExtended_Pictographic)
+ /* If Extend follows Extended_Pictographic, do not update lgb; this allows
+ any number of them before a following ZWJ. */
+
+ if (rgb != ucp_gbExtend || lgb != ucp_gbExtended_Pictographic)
lgb = rgb;
prevcc = endcc;
@@ -8753,6 +8780,10 @@ return endcc;
#endif /* PCRE2_CODE_UNIT_WIDTH != 32 */
+/* The code in this function copies the logic of the interpreter function that
+is defined in the pcre2_extuni.c source. If that code is updated, this
+function, and the one below it, must be kept in step (note by PH, June 2024). */
+
static PCRE2_SPTR SLJIT_FUNC do_extuni_utf_invalid(jit_arguments *args, PCRE2_SPTR cc)
{
PCRE2_SPTR start_subject = args->begin;
@@ -8760,6 +8791,7 @@ PCRE2_SPTR end_subject = args->end;
int lgb, rgb, ricount;
PCRE2_SPTR prevcc, endcc, bptr;
BOOL first = TRUE;
+BOOL was_ep_ZWJ = FALSE;
uint32_t c;
prevcc = cc;
@@ -8780,6 +8812,12 @@ do
if ((PRIV(ucp_gbtable)[lgb] & (1 << rgb)) == 0)
break;
+ /* ZWJ followed by Extended Pictographic is allowed only if the ZWJ was
+ preceded by Extended Pictographic. */
+
+ if (lgb == ucp_gbZWJ && rgb == ucp_gbExtended_Pictographic && !was_ep_ZWJ)
+ break;
+
/* Not breaking between Regional Indicators is allowed only if there
are an even number of preceding RIs. */
@@ -8803,11 +8841,15 @@ do
break; /* Grapheme break required */
}
- /* If Extend or ZWJ follows Extended_Pictographic, do not update lgb; this
- allows any number of them before a following Extended_Pictographic. */
+ /* Set a flag when ZWJ follows Extended Pictographic (with optional Extend in
+ between; see next statement). */
+
+ was_ep_ZWJ = (lgb == ucp_gbExtended_Pictographic && rgb == ucp_gbZWJ);
- if ((rgb != ucp_gbExtend && rgb != ucp_gbZWJ) ||
- lgb != ucp_gbExtended_Pictographic)
+ /* If Extend follows Extended_Pictographic, do not update lgb; this allows
+ any number of them before a following ZWJ. */
+
+ if (rgb != ucp_gbExtend || lgb != ucp_gbExtended_Pictographic)
lgb = rgb;
prevcc = endcc;
@@ -8818,6 +8860,10 @@ while (cc < end_subject);
return endcc;
}
+/* The code in this function copies the logic of the interpreter function that
+is defined in the pcre2_extuni.c source. If that code is updated, this
+function must be kept in step (note by PH, June 2024). */
+
static PCRE2_SPTR SLJIT_FUNC do_extuni_no_utf(jit_arguments *args, PCRE2_SPTR cc)
{
PCRE2_SPTR start_subject = args->begin;
@@ -8825,6 +8871,7 @@ PCRE2_SPTR end_subject = args->end;
int lgb, rgb, ricount;
PCRE2_SPTR bptr;
uint32_t c;
+BOOL was_ep_ZWJ = FALSE;
/* Patch by PH */
/* GETCHARINC(c, cc); */
@@ -8848,6 +8895,12 @@ while (cc < end_subject)
if ((PRIV(ucp_gbtable)[lgb] & (1 << rgb)) == 0)
break;
+ /* ZWJ followed by Extended Pictographic is allowed only if the ZWJ was
+ preceded by Extended Pictographic. */
+
+ if (lgb == ucp_gbZWJ && rgb == ucp_gbExtended_Pictographic && !was_ep_ZWJ)
+ break;
+
/* Not breaking between Regional Indicators is allowed only if there
are an even number of preceding RIs. */
@@ -8875,11 +8928,15 @@ while (cc < end_subject)
break; /* Grapheme break required */
}
- /* If Extend or ZWJ follows Extended_Pictographic, do not update lgb; this
- allows any number of them before a following Extended_Pictographic. */
+ /* Set a flag when ZWJ follows Extended Pictographic (with optional Extend in
+ between; see next statement). */
+
+ was_ep_ZWJ = (lgb == ucp_gbExtended_Pictographic && rgb == ucp_gbZWJ);
- if ((rgb != ucp_gbExtend && rgb != ucp_gbZWJ) ||
- lgb != ucp_gbExtended_Pictographic)
+ /* If Extend follows Extended_Pictographic, do not update lgb; this allows
+ any number of them before a following ZWJ. */
+
+ if (rgb != ucp_gbExtend || lgb != ucp_gbExtended_Pictographic)
lgb = rgb;
cc++;
@@ -9836,7 +9893,7 @@ BACKTRACK_AS(recurse_backtrack)->matchingpath = LABEL();
return cc + 1 + LINK_SIZE;
}
-static sljit_s32 SLJIT_FUNC SLJIT_FUNC_ATTRIBUTE do_callout_jit(struct jit_arguments *arguments, pcre2_callout_block *callout_block, PCRE2_SPTR *jit_ovector)
+static sljit_s32 SLJIT_FUNC do_callout_jit(struct jit_arguments *arguments, pcre2_callout_block *callout_block, PCRE2_SPTR *jit_ovector)
{
PCRE2_SPTR begin;
PCRE2_SIZE *ovector;
@@ -11227,7 +11284,7 @@ if (has_alternatives)
if (i <= 3)
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(stacksize), SLJIT_IMM, 0);
else
- BACKTRACK_AS(bracket_backtrack)->u.matching_put_label = sljit_emit_put_label(compiler, SLJIT_MEM1(STACK_TOP), STACK(stacksize));
+ BACKTRACK_AS(bracket_backtrack)->u.matching_mov_addr = sljit_emit_mov_addr(compiler, SLJIT_MEM1(STACK_TOP), STACK(stacksize));
}
if (ket != OP_KETRMAX)
BACKTRACK_AS(bracket_backtrack)->alternative_matchingpath = LABEL();
@@ -11314,17 +11371,22 @@ if (bra == OP_BRAMINZERO)
/* Continue to the normal backtrack. */
}
-if ((ket != OP_KET && bra != OP_BRAMINZERO) || bra == OP_BRAZERO)
+if ((ket != OP_KET && bra != OP_BRAMINZERO) || bra == OP_BRAZERO || (has_alternatives && repeat_type != OP_EXACT))
count_match(common);
cc += 1 + LINK_SIZE;
if (opcode == OP_ONCE)
{
+ int data;
+ int framesize = BACKTRACK_AS(bracket_backtrack)->u.framesize;
+
+ SLJIT_ASSERT(SHRT_MIN <= framesize && framesize < SHRT_MAX/2);
/* We temporarily encode the needs_control_head in the lowest bit.
- Note: on the target architectures of SLJIT the ((x << 1) >> 1) returns
- the same value for small signed numbers (including negative numbers). */
- BACKTRACK_AS(bracket_backtrack)->u.framesize = (int)((unsigned)BACKTRACK_AS(bracket_backtrack)->u.framesize << 1) | (needs_control_head ? 1 : 0);
+ The real value should be short enough for this operation to work
+ without triggering Undefined Behaviour. */
+ data = (int)((short)((unsigned short)framesize << 1) | (needs_control_head ? 1 : 0));
+ BACKTRACK_AS(bracket_backtrack)->u.framesize = data;
}
return cc + repeat_length;
}
@@ -13005,7 +13067,7 @@ struct sljit_jump *once = NULL;
struct sljit_jump *cond = NULL;
struct sljit_label *rmin_label = NULL;
struct sljit_label *exact_label = NULL;
-struct sljit_put_label *put_label = NULL;
+struct sljit_jump *mov_addr = NULL;
if (*cc == OP_BRAZERO || *cc == OP_BRAMINZERO)
{
@@ -13166,8 +13228,8 @@ else if (has_alternatives)
{
sljit_emit_ijump(compiler, SLJIT_JUMP, TMP1, 0);
- SLJIT_ASSERT(CURRENT_AS(bracket_backtrack)->u.matching_put_label);
- sljit_set_put_label(CURRENT_AS(bracket_backtrack)->u.matching_put_label, LABEL());
+ SLJIT_ASSERT(CURRENT_AS(bracket_backtrack)->u.matching_mov_addr);
+ sljit_set_label(CURRENT_AS(bracket_backtrack)->u.matching_mov_addr, LABEL());
sljit_emit_op0(compiler, SLJIT_ENDBR);
}
else
@@ -13320,7 +13382,7 @@ if (has_alternatives)
if (alt_max <= 3)
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(stacksize), SLJIT_IMM, alt_count);
else
- put_label = sljit_emit_put_label(compiler, SLJIT_MEM1(STACK_TOP), STACK(stacksize));
+ mov_addr = sljit_emit_mov_addr(compiler, SLJIT_MEM1(STACK_TOP), STACK(stacksize));
}
if (offset != 0 && ket == OP_KETRMAX && common->optimized_cbracket[offset >> 1] != 0)
@@ -13346,7 +13408,7 @@ if (has_alternatives)
}
else
{
- sljit_set_put_label(put_label, LABEL());
+ sljit_set_label(mov_addr, LABEL());
sljit_emit_op0(compiler, SLJIT_ENDBR);
}
}
@@ -13878,7 +13940,7 @@ jump_list *match = NULL;
struct sljit_jump *next_alt = NULL;
struct sljit_jump *accept_exit = NULL;
struct sljit_label *quit;
-struct sljit_put_label *put_label = NULL;
+struct sljit_jump *mov_addr = NULL;
/* Recurse captures then. */
common->then_trap = NULL;
@@ -13941,7 +14003,7 @@ while (1)
if (alt_max > 1 || (recurse_flags & recurse_flag_accept_found))
{
if (alt_max > 3)
- put_label = sljit_emit_put_label(compiler, SLJIT_MEM1(STACK_TOP), STACK(1));
+ mov_addr = sljit_emit_mov_addr(compiler, SLJIT_MEM1(STACK_TOP), STACK(1));
else
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(1), SLJIT_IMM, alt_count);
}
@@ -13974,7 +14036,7 @@ while (1)
if (alt_max > 3)
{
sljit_emit_ijump(compiler, SLJIT_JUMP, TMP1, 0);
- sljit_set_put_label(put_label, LABEL());
+ sljit_set_label(mov_addr, LABEL());
sljit_emit_op0(compiler, SLJIT_ENDBR);
}
else
@@ -13985,7 +14047,7 @@ while (1)
}
else if (alt_max > 3)
{
- sljit_set_put_label(put_label, LABEL());
+ sljit_set_label(mov_addr, LABEL());
sljit_emit_op0(compiler, SLJIT_ENDBR);
}
else
@@ -14303,7 +14365,7 @@ if (common->has_then)
set_then_offsets(common, common->start, NULL);
}
-compiler = sljit_create_compiler(allocator_data, NULL);
+compiler = sljit_create_compiler(allocator_data);
if (!compiler)
{
SLJIT_FREE(common->optimized_cbracket, allocator_data);
@@ -14718,7 +14780,7 @@ if (common->getucdtype != NULL)
SLJIT_FREE(common->optimized_cbracket, allocator_data);
SLJIT_FREE(common->private_data_ptrs, allocator_data);
-executable_func = sljit_generate_code(compiler);
+executable_func = sljit_generate_code(compiler, 0, NULL);
executable_size = sljit_get_generated_code_size(compiler);
sljit_free_compiler(compiler);
diff --git a/src/3rdparty/pcre2/src/pcre2_jit_misc.c b/src/3rdparty/pcre2/src/pcre2_jit_misc.c
index bb6a5589cb..c3abc0b33b 100644
--- a/src/3rdparty/pcre2/src/pcre2_jit_misc.c
+++ b/src/3rdparty/pcre2/src/pcre2_jit_misc.c
@@ -141,8 +141,8 @@ if (startsize == 0 || maxsize == 0 || maxsize > SIZE_MAX - STACK_GROWTH_RATE)
return NULL;
if (startsize > maxsize)
startsize = maxsize;
-startsize = (startsize + STACK_GROWTH_RATE - 1) & ~(STACK_GROWTH_RATE - 1);
-maxsize = (maxsize + STACK_GROWTH_RATE - 1) & ~(STACK_GROWTH_RATE - 1);
+startsize = (startsize + STACK_GROWTH_RATE - 1) & (size_t)(~(STACK_GROWTH_RATE - 1));
+maxsize = (maxsize + STACK_GROWTH_RATE - 1) & (size_t)(~(STACK_GROWTH_RATE - 1));
jit_stack = PRIV(memctl_malloc)(sizeof(pcre2_real_jit_stack), (pcre2_memctl *)gcontext);
if (jit_stack == NULL) return NULL;
diff --git a/src/3rdparty/pcre2/src/pcre2_jit_simd_inc.h b/src/3rdparty/pcre2/src/pcre2_jit_simd_inc.h
index 783a85f50e..502977fc32 100644
--- a/src/3rdparty/pcre2/src/pcre2_jit_simd_inc.h
+++ b/src/3rdparty/pcre2/src/pcre2_jit_simd_inc.h
@@ -2176,7 +2176,7 @@ struct sljit_label *restart;
struct sljit_jump *jump[2];
SLJIT_ASSERT(common->mode == PCRE2_JIT_COMPLETE && offs1 > offs2);
-SLJIT_ASSERT(diff <= IN_UCHARS(max_fast_forward_char_pair_offset()));
+SLJIT_ASSERT(diff <= (unsigned)IN_UCHARS(max_fast_forward_char_pair_offset()));
/* Initialize. */
if (common->match_end_ptr != 0)
diff --git a/src/3rdparty/pcre2/src/pcre2_match.c b/src/3rdparty/pcre2/src/pcre2_match.c
index b4a970313d..6c422c2e5e 100644
--- a/src/3rdparty/pcre2/src/pcre2_match.c
+++ b/src/3rdparty/pcre2/src/pcre2_match.c
@@ -5862,7 +5862,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode,
{
ptrdiff_t diff = Feptr - mb->start_subject;
- uint32_t available = (diff > 65535)? 65535 : ((diff > 0)? diff : 0);
+ uint32_t available = (diff > 65535)? 65535 : ((diff > 0)? (int)diff : 0);
if (Lmin > available) RRETURN(MATCH_NOMATCH);
if (Lmax > available) Lmax = available;
Feptr -= Lmax;
diff --git a/src/3rdparty/pcre2/src/pcre2_tables.c b/src/3rdparty/pcre2/src/pcre2_tables.c
index e00252f1eb..097a1acca8 100644
--- a/src/3rdparty/pcre2/src/pcre2_tables.c
+++ b/src/3rdparty/pcre2/src/pcre2_tables.c
@@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language.
Written by Philip Hazel
Original API code Copyright (c) 1997-2012 University of Cambridge
- New API code Copyright (c) 2016-2021 University of Cambridge
+ New API code Copyright (c) 2016-2024 University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
@@ -171,9 +171,9 @@ are implementing).
6. Do not break after Prepend characters.
7. Do not break within emoji modifier sequences or emoji zwj sequences. That
- is, do not break between characters with the Extended_Pictographic property.
- Extend and ZWJ characters are allowed between the characters; this cannot be
- represented in this table, the code has to deal with it.
+ is, do not break between characters with the Extended_Pictographic property
+ if a ZWJ intervenes. Extend characters are allowed between the characters;
+ this cannot be represented in this table, the code has to deal with it.
8. Do not break within emoji flag sequences. That is, do not break between
regional indicator (RI) symbols if there are an odd number of RI characters
@@ -203,8 +203,8 @@ const uint32_t PRIV(ucp_gbtable)[] = {
ESZ|(1u<<ucp_gbT), /* 10 LVT */
(1u<<ucp_gbRegional_Indicator), /* 11 Regional Indicator */
ESZ, /* 12 Other */
- ESZ, /* 13 ZWJ */
- ESZ|(1u<<ucp_gbExtended_Pictographic) /* 14 Extended Pictographic */
+ ESZ|(1u<<ucp_gbExtended_Pictographic), /* 13 ZWJ */
+ ESZ /* 14 Extended Pictographic */
};
#undef ESZ
diff --git a/src/3rdparty/pcre2/src/sljit/allocator_src/sljitExecAllocatorApple.c b/src/3rdparty/pcre2/src/sljit/allocator_src/sljitExecAllocatorApple.c
index 95b9842fa9..9bd2094f46 100644
--- a/src/3rdparty/pcre2/src/sljit/allocator_src/sljitExecAllocatorApple.c
+++ b/src/3rdparty/pcre2/src/sljit/allocator_src/sljitExecAllocatorApple.c
@@ -41,9 +41,10 @@
#include <sys/utsname.h>
#include <stdlib.h>
-#define SLJIT_MAP_JIT (get_map_jit_flag())
#define SLJIT_UPDATE_WX_FLAGS(from, to, enable_exec)
+#ifdef MAP_JIT
+#define SLJIT_MAP_JIT (get_map_jit_flag())
static SLJIT_INLINE int get_map_jit_flag(void)
{
size_t page_size;
@@ -70,6 +71,9 @@ static SLJIT_INLINE int get_map_jit_flag(void)
}
return map_jit_flag;
}
+#else /* !defined(MAP_JIT) */
+#define SLJIT_MAP_JIT (0)
+#endif
#elif defined(SLJIT_CONFIG_ARM) && SLJIT_CONFIG_ARM
diff --git a/src/3rdparty/pcre2/src/sljit/allocator_src/sljitExecAllocatorCore.c b/src/3rdparty/pcre2/src/sljit/allocator_src/sljitExecAllocatorCore.c
index 6cd391104c..4e1119bc40 100644
--- a/src/3rdparty/pcre2/src/sljit/allocator_src/sljitExecAllocatorCore.c
+++ b/src/3rdparty/pcre2/src/sljit/allocator_src/sljitExecAllocatorCore.c
@@ -181,8 +181,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_malloc_exec(sljit_uw size)
header->executable_offset = free_block->header.executable_offset;
#endif /* SLJIT_HAS_EXECUTABLE_OFFSET */
AS_BLOCK_HEADER(header, size)->prev_size = size;
- }
- else {
+ } else {
sljit_remove_free_block(free_block);
header = (struct block_header*)free_block;
size = chunk_size;
@@ -230,26 +229,25 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_malloc_exec(sljit_uw size)
#endif /* SLJIT_HAS_EXECUTABLE_OFFSET */
sljit_insert_free_block(free_block, chunk_size);
next_header = AS_BLOCK_HEADER(free_block, chunk_size);
- }
- else {
+ } else {
/* All space belongs to this allocation. */
allocated_size += chunk_size;
header->size = chunk_size;
next_header = AS_BLOCK_HEADER(header, chunk_size);
}
- SLJIT_ALLOCATOR_UNLOCK();
next_header->size = 1;
next_header->prev_size = chunk_size;
#ifdef SLJIT_HAS_EXECUTABLE_OFFSET
next_header->executable_offset = executable_offset;
#endif /* SLJIT_HAS_EXECUTABLE_OFFSET */
+ SLJIT_ALLOCATOR_UNLOCK();
return MEM_START(header);
}
-SLJIT_API_FUNC_ATTRIBUTE void sljit_free_exec(void* ptr)
+SLJIT_API_FUNC_ATTRIBUTE void sljit_free_exec(void *ptr)
{
struct block_header *header;
- struct free_block* free_block;
+ struct free_block *free_block;
SLJIT_ALLOCATOR_LOCK();
header = AS_BLOCK_HEADER(ptr, -(sljit_sw)sizeof(struct block_header));
@@ -269,8 +267,7 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_free_exec(void* ptr)
free_block->size += header->size;
header = AS_BLOCK_HEADER(free_block, free_block->size);
header->prev_size = free_block->size;
- }
- else {
+ } else {
free_block = (struct free_block*)header;
sljit_insert_free_block(free_block, header->size);
}
@@ -308,7 +305,7 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_free_unused_memory_exec(void)
free_block = free_blocks;
while (free_block) {
next_free_block = free_block->next;
- if (!free_block->header.prev_size &&
+ if (!free_block->header.prev_size &&
AS_BLOCK_HEADER(free_block, free_block->size)->size == 1) {
total_size -= free_block->size;
sljit_remove_free_block(free_block);
@@ -317,14 +314,14 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_free_unused_memory_exec(void)
free_block = next_free_block;
}
- SLJIT_ASSERT((total_size && free_blocks) || (!total_size && !free_blocks));
+ SLJIT_ASSERT(total_size || (!total_size && !free_blocks));
SLJIT_UPDATE_WX_FLAGS(NULL, NULL, 1);
SLJIT_ALLOCATOR_UNLOCK();
}
#ifdef SLJIT_HAS_EXECUTABLE_OFFSET
-SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void* ptr)
+SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void *code)
{
- return ((struct block_header *)(ptr))[-1].executable_offset;
+ return ((struct block_header*)SLJIT_CODE_TO_PTR(code))[-1].executable_offset;
}
#endif /* SLJIT_HAS_EXECUTABLE_OFFSET */
diff --git a/src/3rdparty/pcre2/src/sljit/sljitConfigInternal.h b/src/3rdparty/pcre2/src/sljit/sljitConfigInternal.h
index ce4e7b04ec..de06dd8e0c 100644
--- a/src/3rdparty/pcre2/src/sljit/sljitConfigInternal.h
+++ b/src/3rdparty/pcre2/src/sljit/sljitConfigInternal.h
@@ -49,8 +49,8 @@ extern "C" {
sljit_s16, sljit_u16 : signed and unsigned 16 bit integer type
sljit_s32, sljit_u32 : signed and unsigned 32 bit integer type
sljit_sw, sljit_uw : signed and unsigned machine word, enough to store a pointer
- sljit_p : unsgined pointer value (usually the same as sljit_uw, but
- some 64 bit ABIs may use 32 bit pointers)
+ sljit_sp, sljit_up : signed and unsigned pointer value (usually the same as
+ sljit_uw, but some 64 bit ABIs may use 32 bit pointers)
sljit_f32 : 32 bit single precision floating point value
sljit_f64 : 64 bit double precision floating point value
@@ -98,6 +98,10 @@ extern "C" {
SLJIT_TMP_R(i) : accessing temporary registers
SLJIT_TMP_FR0 .. FR9 : accessing temporary floating point registers
SLJIT_TMP_FR(i) : accessing temporary floating point registers
+ SLJIT_TMP_DEST_REG : a temporary register for results
+ SLJIT_TMP_MEM_REG : a temporary base register for accessing memory
+ (can be the same as SLJIT_TMP_DEST_REG)
+ SLJIT_TMP_DEST_FREG : a temporary register for float results
SLJIT_FUNC : calling convention attribute for both calling JIT from C and C calling back from JIT
SLJIT_W(number) : defining 64 bit constants on 64 bit architectures (platform independent helper)
SLJIT_F64_SECOND(reg) : provides the register index of the second 32 bit part of a 64 bit
@@ -132,23 +136,23 @@ extern "C" {
*/
#ifndef SLJIT_MALLOC
-#define SLJIT_MALLOC(size, allocator_data) malloc(size)
+#define SLJIT_MALLOC(size, allocator_data) (malloc(size))
#endif
#ifndef SLJIT_FREE
-#define SLJIT_FREE(ptr, allocator_data) free(ptr)
+#define SLJIT_FREE(ptr, allocator_data) (free(ptr))
#endif
#ifndef SLJIT_MEMCPY
-#define SLJIT_MEMCPY(dest, src, len) memcpy(dest, src, len)
+#define SLJIT_MEMCPY(dest, src, len) (memcpy(dest, src, len))
#endif
#ifndef SLJIT_MEMMOVE
-#define SLJIT_MEMMOVE(dest, src, len) memmove(dest, src, len)
+#define SLJIT_MEMMOVE(dest, src, len) (memmove(dest, src, len))
#endif
#ifndef SLJIT_ZEROMEM
-#define SLJIT_ZEROMEM(dest, len) memset(dest, 0, len)
+#define SLJIT_ZEROMEM(dest, len) (memset(dest, 0, len))
#endif
/***************************/
@@ -198,7 +202,7 @@ extern "C" {
/* Type of public API functions. */
/*********************************/
-#ifndef SLJIT_API_FUNC_ATTRIBUTE
+#ifndef SLJIT_API_FUNC_ATTRIBUTE
#if (defined SLJIT_CONFIG_STATIC && SLJIT_CONFIG_STATIC)
/* Static ABI functions. For all-in-one programs. */
@@ -358,7 +362,8 @@ typedef long int sljit_sw;
#endif /* _WIN32 */
#endif
-typedef sljit_uw sljit_p;
+typedef sljit_sw sljit_sp;
+typedef sljit_uw sljit_up;
/* Floating point types. */
typedef float sljit_f32;
@@ -399,6 +404,10 @@ typedef double sljit_f64;
#define SLJIT_CONV_MAX_FLOAT SLJIT_CONV_RESULT_MAX_INT
#define SLJIT_CONV_MIN_FLOAT SLJIT_CONV_RESULT_MIN_INT
#define SLJIT_CONV_NAN_FLOAT SLJIT_CONV_RESULT_MIN_INT
+#elif (defined SLJIT_CONFIG_LOONGARCH && SLJIT_CONFIG_LOONGARCH)
+#define SLJIT_CONV_MAX_FLOAT SLJIT_CONV_RESULT_MAX_INT
+#define SLJIT_CONV_MIN_FLOAT SLJIT_CONV_RESULT_MIN_INT
+#define SLJIT_CONV_NAN_FLOAT SLJIT_CONV_RESULT_ZERO
#else
#error "Result for float to integer conversion is not defined"
#endif
@@ -522,19 +531,6 @@ typedef double sljit_f64;
#define SLJIT_FUNC
#endif /* !SLJIT_FUNC */
-/* Disable instrumentation for these functions as they may not be sound */
-#ifndef SLJIT_FUNC_ATTRIBUTE
-#if defined(__has_feature)
-#if __has_feature(memory_sanitizer)
-#define SLJIT_FUNC_ATTRIBUTE __attribute__((no_sanitize("memory")))
-#endif /* __has_feature(memory_sanitizer) */
-#endif /* defined(__has_feature) */
-#endif
-
-#ifndef SLJIT_FUNC_ATTRIBUTE
-#define SLJIT_FUNC_ATTRIBUTE
-#endif
-
#ifndef SLJIT_INDIRECT_CALL
#if ((defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) && (!defined _CALL_ELF || _CALL_ELF == 1)) \
|| ((defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32) && defined _AIX)
@@ -570,9 +566,9 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_free_unused_memory_exec(void);
#endif /* SLJIT_FREE_EXEC */
#if (defined SLJIT_PROT_EXECUTABLE_ALLOCATOR && SLJIT_PROT_EXECUTABLE_ALLOCATOR)
-SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void* ptr);
-#define SLJIT_EXEC_OFFSET(ptr) sljit_exec_offset(ptr)
-#endif
+SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void *code);
+#define SLJIT_EXEC_OFFSET(code) sljit_exec_offset(code)
+#endif /* SLJIT_PROT_EXECUTABLE_ALLOCATOR */
#endif /* SLJIT_EXECUTABLE_ALLOCATOR */
@@ -592,6 +588,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void* ptr);
#define SLJIT_NUMBER_OF_FLOAT_REGISTERS 7
#define SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS 0
#define SLJIT_NUMBER_OF_TEMPORARY_FLOAT_REGISTERS 1
+#define SLJIT_TMP_DEST_REG SLJIT_TMP_R0
+#define SLJIT_TMP_MEM_REG SLJIT_TMP_R0
+#define SLJIT_TMP_DEST_FREG SLJIT_TMP_FR0
#define SLJIT_LOCALS_OFFSET_BASE (8 * SSIZE_OF(sw))
#define SLJIT_PREF_SHIFT_REG SLJIT_R2
#define SLJIT_MASKED_SHIFT 1
@@ -612,6 +611,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void* ptr);
#define SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS 10
#define SLJIT_LOCALS_OFFSET_BASE (4 * SSIZE_OF(sw))
#endif /* !_WIN64 */
+#define SLJIT_TMP_DEST_REG SLJIT_TMP_R0
+#define SLJIT_TMP_MEM_REG SLJIT_TMP_R0
+#define SLJIT_TMP_DEST_FREG SLJIT_TMP_FR0
#define SLJIT_PREF_SHIFT_REG SLJIT_R3
#define SLJIT_MASKED_SHIFT 1
#define SLJIT_MASKED_SHIFT32 1
@@ -624,6 +626,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void* ptr);
#define SLJIT_NUMBER_OF_FLOAT_REGISTERS 14
#define SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS 8
#define SLJIT_NUMBER_OF_TEMPORARY_FLOAT_REGISTERS 2
+#define SLJIT_TMP_DEST_REG SLJIT_TMP_R1
+#define SLJIT_TMP_MEM_REG SLJIT_TMP_R1
+#define SLJIT_TMP_DEST_FREG SLJIT_TMP_FR0
#define SLJIT_LOCALS_OFFSET_BASE 0
#elif (defined SLJIT_CONFIG_ARM_64 && SLJIT_CONFIG_ARM_64)
@@ -634,6 +639,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void* ptr);
#define SLJIT_NUMBER_OF_FLOAT_REGISTERS 30
#define SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS 8
#define SLJIT_NUMBER_OF_TEMPORARY_FLOAT_REGISTERS 2
+#define SLJIT_TMP_DEST_REG SLJIT_TMP_R0
+#define SLJIT_TMP_MEM_REG SLJIT_TMP_R0
+#define SLJIT_TMP_DEST_FREG SLJIT_TMP_FR0
#define SLJIT_LOCALS_OFFSET_BASE (2 * (sljit_s32)sizeof(sljit_sw))
#define SLJIT_MASKED_SHIFT 1
#define SLJIT_MASKED_SHIFT32 1
@@ -646,6 +654,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void* ptr);
#define SLJIT_NUMBER_OF_FLOAT_REGISTERS 30
#define SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS 18
#define SLJIT_NUMBER_OF_TEMPORARY_FLOAT_REGISTERS 2
+#define SLJIT_TMP_DEST_REG SLJIT_TMP_R1
+#define SLJIT_TMP_MEM_REG SLJIT_TMP_R1
+#define SLJIT_TMP_DEST_FREG SLJIT_TMP_FR0
#if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) || (defined _AIX)
#define SLJIT_LOCALS_OFFSET_BASE ((6 + 8) * (sljit_s32)sizeof(sljit_sw))
#elif (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32)
@@ -670,6 +681,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void* ptr);
#endif
#define SLJIT_NUMBER_OF_TEMPORARY_REGISTERS 5
#define SLJIT_NUMBER_OF_TEMPORARY_FLOAT_REGISTERS 3
+#define SLJIT_TMP_DEST_REG SLJIT_TMP_R1
+#define SLJIT_TMP_MEM_REG SLJIT_TMP_R1
+#define SLJIT_TMP_DEST_FREG SLJIT_TMP_FR0
#define SLJIT_MASKED_SHIFT 1
#define SLJIT_MASKED_SHIFT32 1
@@ -681,6 +695,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void* ptr);
#define SLJIT_NUMBER_OF_FLOAT_REGISTERS 30
#define SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS 12
#define SLJIT_NUMBER_OF_TEMPORARY_FLOAT_REGISTERS 2
+#define SLJIT_TMP_DEST_REG SLJIT_TMP_R1
+#define SLJIT_TMP_MEM_REG SLJIT_TMP_R1
+#define SLJIT_TMP_DEST_FREG SLJIT_TMP_FR0
#define SLJIT_LOCALS_OFFSET_BASE 0
#define SLJIT_MASKED_SHIFT 1
#define SLJIT_MASKED_SHIFT32 1
@@ -714,6 +731,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void* ptr);
#define SLJIT_NUMBER_OF_FLOAT_REGISTERS 15
#define SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS 8
#define SLJIT_NUMBER_OF_TEMPORARY_FLOAT_REGISTERS 1
+#define SLJIT_TMP_DEST_REG SLJIT_TMP_R0
+#define SLJIT_TMP_MEM_REG SLJIT_TMP_R2
+#define SLJIT_TMP_DEST_FREG SLJIT_TMP_FR0
#define SLJIT_LOCALS_OFFSET_BASE SLJIT_S390X_DEFAULT_STACK_FRAME_SIZE
#define SLJIT_MASKED_SHIFT 1
@@ -725,6 +745,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void* ptr);
#define SLJIT_NUMBER_OF_FLOAT_REGISTERS 30
#define SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS 12
#define SLJIT_NUMBER_OF_TEMPORARY_FLOAT_REGISTERS 2
+#define SLJIT_TMP_DEST_REG SLJIT_TMP_R1
+#define SLJIT_TMP_MEM_REG SLJIT_TMP_R1
+#define SLJIT_TMP_DEST_FREG SLJIT_TMP_FR0
#define SLJIT_LOCALS_OFFSET_BASE 0
#define SLJIT_MASKED_SHIFT 1
#define SLJIT_MASKED_SHIFT32 1
@@ -738,6 +761,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void* ptr);
#define SLJIT_NUMBER_OF_FLOAT_REGISTERS 0
#define SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS 0
#define SLJIT_NUMBER_OF_TEMPORARY_FLOAT_REGISTERS 0
+#define SLJIT_TMP_DEST_REG 0
+#define SLJIT_TMP_MEM_REG 0
+#define SLJIT_TMP_DEST_FREG 0
#define SLJIT_LOCALS_OFFSET_BASE 0
#endif
diff --git a/src/3rdparty/pcre2/src/sljit/sljitExecAllocator.c b/src/3rdparty/pcre2/src/sljit/sljitExecAllocator.c
deleted file mode 100644
index 92d940ddc2..0000000000
--- a/src/3rdparty/pcre2/src/sljit/sljitExecAllocator.c
+++ /dev/null
@@ -1,411 +0,0 @@
-/*
- * Stack-less Just-In-Time compiler
- *
- * Copyright Zoltan Herczeg (hzmester@freemail.hu). All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification, are
- * permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice, this list of
- * conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright notice, this list
- * of conditions and the following disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDER(S) OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
- * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/*
- This file contains a simple executable memory allocator
-
- It is assumed, that executable code blocks are usually medium (or sometimes
- large) memory blocks, and the allocator is not too frequently called (less
- optimized than other allocators). Thus, using it as a generic allocator is
- not suggested.
-
- How does it work:
- Memory is allocated in continuous memory areas called chunks by alloc_chunk()
- Chunk format:
- [ block ][ block ] ... [ block ][ block terminator ]
-
- All blocks and the block terminator is started with block_header. The block
- header contains the size of the previous and the next block. These sizes
- can also contain special values.
- Block size:
- 0 - The block is a free_block, with a different size member.
- 1 - The block is a block terminator.
- n - The block is used at the moment, and the value contains its size.
- Previous block size:
- 0 - This is the first block of the memory chunk.
- n - The size of the previous block.
-
- Using these size values we can go forward or backward on the block chain.
- The unused blocks are stored in a chain list pointed by free_blocks. This
- list is useful if we need to find a suitable memory area when the allocator
- is called.
-
- When a block is freed, the new free block is connected to its adjacent free
- blocks if possible.
-
- [ free block ][ used block ][ free block ]
- and "used block" is freed, the three blocks are connected together:
- [ one big free block ]
-*/
-
-/* --------------------------------------------------------------------- */
-/* System (OS) functions */
-/* --------------------------------------------------------------------- */
-
-/* 64 KByte. */
-#define CHUNK_SIZE (sljit_uw)0x10000u
-
-/*
- alloc_chunk / free_chunk :
- * allocate executable system memory chunks
- * the size is always divisible by CHUNK_SIZE
- SLJIT_ALLOCATOR_LOCK / SLJIT_ALLOCATOR_UNLOCK :
- * provided as part of sljitUtils
- * only the allocator requires this lock, sljit is fully thread safe
- as it only uses local variables
-*/
-
-#ifdef _WIN32
-#define SLJIT_UPDATE_WX_FLAGS(from, to, enable_exec)
-
-static SLJIT_INLINE void* alloc_chunk(sljit_uw size)
-{
- return VirtualAlloc(NULL, size, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
-}
-
-static SLJIT_INLINE void free_chunk(void *chunk, sljit_uw size)
-{
- SLJIT_UNUSED_ARG(size);
- VirtualFree(chunk, 0, MEM_RELEASE);
-}
-
-#else /* POSIX */
-
-#if defined(__APPLE__) && defined(MAP_JIT)
-/*
- On macOS systems, returns MAP_JIT if it is defined _and_ we're running on a
- version where it's OK to have more than one JIT block or where MAP_JIT is
- required.
- On non-macOS systems, returns MAP_JIT if it is defined.
-*/
-#include <TargetConditionals.h>
-#if TARGET_OS_OSX
-#if defined SLJIT_CONFIG_X86 && SLJIT_CONFIG_X86
-#ifdef MAP_ANON
-#include <sys/utsname.h>
-#include <stdlib.h>
-
-#define SLJIT_MAP_JIT (get_map_jit_flag())
-
-static SLJIT_INLINE int get_map_jit_flag()
-{
- size_t page_size;
- void *ptr;
- struct utsname name;
- static int map_jit_flag = -1;
-
- if (map_jit_flag < 0) {
- map_jit_flag = 0;
- uname(&name);
-
- /* Kernel version for 10.14.0 (Mojave) or later */
- if (atoi(name.release) >= 18) {
- page_size = get_page_alignment() + 1;
- /* Only use MAP_JIT if a hardened runtime is used */
- ptr = mmap(NULL, page_size, PROT_WRITE | PROT_EXEC,
- MAP_PRIVATE | MAP_ANON, -1, 0);
-
- if (ptr != MAP_FAILED)
- munmap(ptr, page_size);
- else
- map_jit_flag = MAP_JIT;
- }
- }
- return map_jit_flag;
-}
-#endif /* MAP_ANON */
-#else /* !SLJIT_CONFIG_X86 */
-#if !(defined SLJIT_CONFIG_ARM && SLJIT_CONFIG_ARM)
-#error "Unsupported architecture"
-#endif /* SLJIT_CONFIG_ARM */
-#include <AvailabilityMacros.h>
-#include <pthread.h>
-
-#define SLJIT_MAP_JIT (MAP_JIT)
-#define SLJIT_UPDATE_WX_FLAGS(from, to, enable_exec) \
- apple_update_wx_flags(enable_exec)
-
-static SLJIT_INLINE void apple_update_wx_flags(sljit_s32 enable_exec)
-{
-#if MAC_OS_X_VERSION_MIN_REQUIRED >= 110000
- pthread_jit_write_protect_np(enable_exec);
-#else
-#error "Must target Big Sur or newer"
-#endif /* BigSur */
-}
-#endif /* SLJIT_CONFIG_X86 */
-#else /* !TARGET_OS_OSX */
-#define SLJIT_MAP_JIT (MAP_JIT)
-#endif /* TARGET_OS_OSX */
-#endif /* __APPLE__ && MAP_JIT */
-#ifndef SLJIT_UPDATE_WX_FLAGS
-#define SLJIT_UPDATE_WX_FLAGS(from, to, enable_exec)
-#endif /* !SLJIT_UPDATE_WX_FLAGS */
-#ifndef SLJIT_MAP_JIT
-#define SLJIT_MAP_JIT (0)
-#endif /* !SLJIT_MAP_JIT */
-
-static SLJIT_INLINE void* alloc_chunk(sljit_uw size)
-{
- void *retval;
- int prot = PROT_READ | PROT_WRITE | PROT_EXEC;
- int flags = MAP_PRIVATE;
- int fd = -1;
-
-#ifdef PROT_MAX
- prot |= PROT_MAX(prot);
-#endif
-
-#ifdef MAP_ANON
- flags |= MAP_ANON | SLJIT_MAP_JIT;
-#else /* !MAP_ANON */
- if (SLJIT_UNLIKELY((dev_zero < 0) && open_dev_zero()))
- return NULL;
-
- fd = dev_zero;
-#endif /* MAP_ANON */
-
- retval = mmap(NULL, size, prot, flags, fd, 0);
- if (retval == MAP_FAILED)
- return NULL;
-
-#ifdef __FreeBSD__
- /* HardenedBSD's mmap lies, so check permissions again */
- if (mprotect(retval, size, PROT_READ | PROT_WRITE | PROT_EXEC) < 0) {
- munmap(retval, size);
- return NULL;
- }
-#endif /* FreeBSD */
-
- SLJIT_UPDATE_WX_FLAGS(retval, (uint8_t *)retval + size, 0);
-
- return retval;
-}
-
-static SLJIT_INLINE void free_chunk(void *chunk, sljit_uw size)
-{
- munmap(chunk, size);
-}
-
-#endif /* windows */
-
-/* --------------------------------------------------------------------- */
-/* Common functions */
-/* --------------------------------------------------------------------- */
-
-#define CHUNK_MASK (~(CHUNK_SIZE - 1))
-
-struct block_header {
- sljit_uw size;
- sljit_uw prev_size;
-};
-
-struct free_block {
- struct block_header header;
- struct free_block *next;
- struct free_block *prev;
- sljit_uw size;
-};
-
-#define AS_BLOCK_HEADER(base, offset) \
- ((struct block_header*)(((sljit_u8*)base) + offset))
-#define AS_FREE_BLOCK(base, offset) \
- ((struct free_block*)(((sljit_u8*)base) + offset))
-#define MEM_START(base) ((void*)(((sljit_u8*)base) + sizeof(struct block_header)))
-#define ALIGN_SIZE(size) (((size) + sizeof(struct block_header) + 7u) & ~(sljit_uw)7)
-
-static struct free_block* free_blocks;
-static sljit_uw allocated_size;
-static sljit_uw total_size;
-
-static SLJIT_INLINE void sljit_insert_free_block(struct free_block *free_block, sljit_uw size)
-{
- free_block->header.size = 0;
- free_block->size = size;
-
- free_block->next = free_blocks;
- free_block->prev = NULL;
- if (free_blocks)
- free_blocks->prev = free_block;
- free_blocks = free_block;
-}
-
-static SLJIT_INLINE void sljit_remove_free_block(struct free_block *free_block)
-{
- if (free_block->next)
- free_block->next->prev = free_block->prev;
-
- if (free_block->prev)
- free_block->prev->next = free_block->next;
- else {
- SLJIT_ASSERT(free_blocks == free_block);
- free_blocks = free_block->next;
- }
-}
-
-SLJIT_API_FUNC_ATTRIBUTE void* sljit_malloc_exec(sljit_uw size)
-{
- struct block_header *header;
- struct block_header *next_header;
- struct free_block *free_block;
- sljit_uw chunk_size;
-
- SLJIT_ALLOCATOR_LOCK();
- if (size < (64 - sizeof(struct block_header)))
- size = (64 - sizeof(struct block_header));
- size = ALIGN_SIZE(size);
-
- free_block = free_blocks;
- while (free_block) {
- if (free_block->size >= size) {
- chunk_size = free_block->size;
- SLJIT_UPDATE_WX_FLAGS(NULL, NULL, 0);
- if (chunk_size > size + 64) {
- /* We just cut a block from the end of the free block. */
- chunk_size -= size;
- free_block->size = chunk_size;
- header = AS_BLOCK_HEADER(free_block, chunk_size);
- header->prev_size = chunk_size;
- AS_BLOCK_HEADER(header, size)->prev_size = size;
- }
- else {
- sljit_remove_free_block(free_block);
- header = (struct block_header*)free_block;
- size = chunk_size;
- }
- allocated_size += size;
- header->size = size;
- SLJIT_ALLOCATOR_UNLOCK();
- return MEM_START(header);
- }
- free_block = free_block->next;
- }
-
- chunk_size = (size + sizeof(struct block_header) + CHUNK_SIZE - 1) & CHUNK_MASK;
- header = (struct block_header*)alloc_chunk(chunk_size);
- if (!header) {
- SLJIT_ALLOCATOR_UNLOCK();
- return NULL;
- }
-
- chunk_size -= sizeof(struct block_header);
- total_size += chunk_size;
-
- header->prev_size = 0;
- if (chunk_size > size + 64) {
- /* Cut the allocated space into a free and a used block. */
- allocated_size += size;
- header->size = size;
- chunk_size -= size;
-
- free_block = AS_FREE_BLOCK(header, size);
- free_block->header.prev_size = size;
- sljit_insert_free_block(free_block, chunk_size);
- next_header = AS_BLOCK_HEADER(free_block, chunk_size);
- }
- else {
- /* All space belongs to this allocation. */
- allocated_size += chunk_size;
- header->size = chunk_size;
- next_header = AS_BLOCK_HEADER(header, chunk_size);
- }
- next_header->size = 1;
- next_header->prev_size = chunk_size;
- SLJIT_ALLOCATOR_UNLOCK();
- return MEM_START(header);
-}
-
-SLJIT_API_FUNC_ATTRIBUTE void sljit_free_exec(void* ptr)
-{
- struct block_header *header;
- struct free_block* free_block;
-
- SLJIT_ALLOCATOR_LOCK();
- header = AS_BLOCK_HEADER(ptr, -(sljit_sw)sizeof(struct block_header));
- allocated_size -= header->size;
-
- /* Connecting free blocks together if possible. */
- SLJIT_UPDATE_WX_FLAGS(NULL, NULL, 0);
-
- /* If header->prev_size == 0, free_block will equal to header.
- In this case, free_block->header.size will be > 0. */
- free_block = AS_FREE_BLOCK(header, -(sljit_sw)header->prev_size);
- if (SLJIT_UNLIKELY(!free_block->header.size)) {
- free_block->size += header->size;
- header = AS_BLOCK_HEADER(free_block, free_block->size);
- header->prev_size = free_block->size;
- }
- else {
- free_block = (struct free_block*)header;
- sljit_insert_free_block(free_block, header->size);
- }
-
- header = AS_BLOCK_HEADER(free_block, free_block->size);
- if (SLJIT_UNLIKELY(!header->size)) {
- free_block->size += ((struct free_block*)header)->size;
- sljit_remove_free_block((struct free_block*)header);
- header = AS_BLOCK_HEADER(free_block, free_block->size);
- header->prev_size = free_block->size;
- }
-
- /* The whole chunk is free. */
- if (SLJIT_UNLIKELY(!free_block->header.prev_size && header->size == 1)) {
- /* If this block is freed, we still have (allocated_size / 2) free space. */
- if (total_size - free_block->size > (allocated_size * 3 / 2)) {
- total_size -= free_block->size;
- sljit_remove_free_block(free_block);
- free_chunk(free_block, free_block->size + sizeof(struct block_header));
- }
- }
-
- SLJIT_UPDATE_WX_FLAGS(NULL, NULL, 1);
- SLJIT_ALLOCATOR_UNLOCK();
-}
-
-SLJIT_API_FUNC_ATTRIBUTE void sljit_free_unused_memory_exec(void)
-{
- struct free_block* free_block;
- struct free_block* next_free_block;
-
- SLJIT_ALLOCATOR_LOCK();
- SLJIT_UPDATE_WX_FLAGS(NULL, NULL, 0);
-
- free_block = free_blocks;
- while (free_block) {
- next_free_block = free_block->next;
- if (!free_block->header.prev_size &&
- AS_BLOCK_HEADER(free_block, free_block->size)->size == 1) {
- total_size -= free_block->size;
- sljit_remove_free_block(free_block);
- free_chunk(free_block, free_block->size + sizeof(struct block_header));
- }
- free_block = next_free_block;
- }
-
- SLJIT_ASSERT((total_size && free_blocks) || (!total_size && !free_blocks));
- SLJIT_UPDATE_WX_FLAGS(NULL, NULL, 1);
- SLJIT_ALLOCATOR_UNLOCK();
-}
diff --git a/src/3rdparty/pcre2/src/sljit/sljitLir.c b/src/3rdparty/pcre2/src/sljit/sljitLir.c
index 6f19300081..2dca17cd6f 100644
--- a/src/3rdparty/pcre2/src/sljit/sljitLir.c
+++ b/src/3rdparty/pcre2/src/sljit/sljitLir.c
@@ -152,28 +152,43 @@
#define SLJIT_SIMD_TYPE_MASK2(m) ((sljit_s32)0xc0000fff & ~(SLJIT_SIMD_FLOAT | SLJIT_SIMD_TEST | (m)))
/* Jump flags. */
-#define JUMP_LABEL 0x1
-#define JUMP_ADDR 0x2
+#define JUMP_ADDR 0x1
+#define JUMP_MOV_ADDR 0x2
/* SLJIT_REWRITABLE_JUMP is 0x1000. */
#if (defined SLJIT_CONFIG_X86 && SLJIT_CONFIG_X86)
-# define PATCH_MB 0x4
-# define PATCH_MW 0x8
+# define PATCH_MB 0x04
+# define PATCH_MW 0x08
#if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
# define PATCH_MD 0x10
-#endif
+# define MOV_ADDR_HI 0x20
+# define JUMP_MAX_SIZE ((sljit_uw)(10 + 3))
+# define CJUMP_MAX_SIZE ((sljit_uw)(2 + 10 + 3))
+#else /* !SLJIT_CONFIG_X86_64 */
+# define JUMP_MAX_SIZE ((sljit_uw)5)
+# define CJUMP_MAX_SIZE ((sljit_uw)6)
+#endif /* SLJIT_CONFIG_X86_64 */
# define TYPE_SHIFT 13
+#if (defined SLJIT_DEBUG && SLJIT_DEBUG)
+/* Bits 7..12 is for debug jump size, SLJIT_REWRITABLE_JUMP is 0x1000 */
+# define JUMP_SIZE_SHIFT 7
+#endif /* SLJIT_DEBUG */
#endif /* SLJIT_CONFIG_X86 */
#if (defined SLJIT_CONFIG_ARM_V6 && SLJIT_CONFIG_ARM_V6) || (defined SLJIT_CONFIG_ARM_V7 && SLJIT_CONFIG_ARM_V7)
-# define IS_BL 0x4
-# define PATCH_B 0x8
-#endif /* SLJIT_CONFIG_ARM_V6 || SLJIT_CONFIG_ARM_V6 */
+# define IS_BL 0x04
+# define PATCH_B 0x08
+#endif /* SLJIT_CONFIG_ARM_V6 || SLJIT_CONFIG_ARM_V7 */
#if (defined SLJIT_CONFIG_ARM_V6 && SLJIT_CONFIG_ARM_V6)
# define CPOOL_SIZE 512
#endif /* SLJIT_CONFIG_ARM_V6 */
+#if (defined SLJIT_CONFIG_ARM_V7 && SLJIT_CONFIG_ARM_V7)
+# define JUMP_SIZE_SHIFT 26
+# define JUMP_MAX_SIZE ((sljit_uw)3)
+#endif /* SLJIT_CONFIG_ARM_V7 */
+
#if (defined SLJIT_CONFIG_ARM_THUMB2 && SLJIT_CONFIG_ARM_THUMB2)
# define IS_COND 0x04
# define IS_BL 0x08
@@ -181,25 +196,30 @@
# define PATCH_TYPE1 0x10
/* conditional + imm20 */
# define PATCH_TYPE2 0x20
- /* IT + imm24 */
-# define PATCH_TYPE3 0x30
/* imm11 */
-# define PATCH_TYPE4 0x40
+# define PATCH_TYPE3 0x30
/* imm24 */
-# define PATCH_TYPE5 0x50
+# define PATCH_TYPE4 0x40
/* BL + imm24 */
-# define PATCH_BL 0x60
+# define PATCH_TYPE5 0x50
+ /* addwi/subwi */
+# define PATCH_TYPE6 0x60
/* 0xf00 cc code for branches */
+# define JUMP_SIZE_SHIFT 26
+# define JUMP_MAX_SIZE ((sljit_uw)5)
#endif /* SLJIT_CONFIG_ARM_THUMB2 */
#if (defined SLJIT_CONFIG_ARM_64 && SLJIT_CONFIG_ARM_64)
# define IS_COND 0x004
# define IS_CBZ 0x008
# define IS_BL 0x010
-# define PATCH_B 0x020
-# define PATCH_COND 0x040
-# define PATCH_ABS48 0x080
-# define PATCH_ABS64 0x100
+# define PATCH_COND 0x020
+# define PATCH_B 0x040
+# define PATCH_B32 0x080
+# define PATCH_ABS48 0x100
+# define PATCH_ABS64 0x200
+# define JUMP_SIZE_SHIFT 58
+# define JUMP_MAX_SIZE ((sljit_uw)5)
#endif /* SLJIT_CONFIG_ARM_64 */
#if (defined SLJIT_CONFIG_PPC && SLJIT_CONFIG_PPC)
@@ -210,8 +230,12 @@
#if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
# define PATCH_ABS32 0x040
# define PATCH_ABS48 0x080
+# define JUMP_SIZE_SHIFT 58
+# define JUMP_MAX_SIZE ((sljit_uw)7)
+#else /* !SLJIT_CONFIG_PPC_64 */
+# define JUMP_SIZE_SHIFT 26
+# define JUMP_MAX_SIZE ((sljit_uw)4)
#endif /* SLJIT_CONFIG_PPC_64 */
-# define REMOVE_COND 0x100
#endif /* SLJIT_CONFIG_PPC */
#if (defined SLJIT_CONFIG_MIPS && SLJIT_CONFIG_MIPS)
@@ -253,8 +277,11 @@
# define PATCH_ABS32 0x080
# define PATCH_ABS44 0x100
# define PATCH_ABS52 0x200
+# define JUMP_SIZE_SHIFT 58
+# define JUMP_MAX_SIZE ((sljit_uw)6)
#else /* !SLJIT_CONFIG_RISCV_64 */
-# define PATCH_REL32 0x0
+# define JUMP_SIZE_SHIFT 26
+# define JUMP_MAX_SIZE ((sljit_uw)2)
#endif /* SLJIT_CONFIG_RISCV_64 */
#endif /* SLJIT_CONFIG_RISCV */
@@ -268,6 +295,8 @@
# define PATCH_REL32 0x040
# define PATCH_ABS32 0x080
# define PATCH_ABS52 0x100
+# define JUMP_SIZE_SHIFT 58
+# define JUMP_MAX_SIZE ((sljit_uw)4)
#endif /* SLJIT_CONFIG_LOONGARCH */
/* Stack management. */
@@ -289,6 +318,14 @@
/* Utils can still be used even if SLJIT_CONFIG_UNSUPPORTED is set. */
#include "sljitUtils.c"
+#if (defined SLJIT_CONFIG_ARM_THUMB2 && SLJIT_CONFIG_ARM_THUMB2)
+#define SLJIT_CODE_TO_PTR(code) ((void*)((sljit_up)(code) & ~(sljit_up)0x1))
+#elif (defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL)
+#define SLJIT_CODE_TO_PTR(code) ((void*)(*(sljit_up*)code))
+#else /* !SLJIT_CONFIG_ARM_THUMB2 && !SLJIT_INDIRECT_CALL */
+#define SLJIT_CODE_TO_PTR(code) ((void*)(code))
+#endif /* SLJIT_CONFIG_ARM_THUMB2 || SLJIT_INDIRECT_CALL */
+
#if !(defined SLJIT_CONFIG_UNSUPPORTED && SLJIT_CONFIG_UNSUPPORTED)
#if (defined SLJIT_EXECUTABLE_ALLOCATOR && SLJIT_EXECUTABLE_ALLOCATOR)
@@ -417,7 +454,7 @@ static sljit_s32 compiler_initialized = 0;
static void init_compiler(void);
#endif
-SLJIT_API_FUNC_ATTRIBUTE struct sljit_compiler* sljit_create_compiler(void *allocator_data, void *exec_allocator_data)
+SLJIT_API_FUNC_ATTRIBUTE struct sljit_compiler* sljit_create_compiler(void *allocator_data)
{
struct sljit_compiler *compiler = (struct sljit_compiler*)SLJIT_MALLOC(sizeof(struct sljit_compiler), allocator_data);
if (!compiler)
@@ -428,10 +465,11 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_compiler* sljit_create_compiler(void *allo
sizeof(sljit_s8) == 1 && sizeof(sljit_u8) == 1
&& sizeof(sljit_s16) == 2 && sizeof(sljit_u16) == 2
&& sizeof(sljit_s32) == 4 && sizeof(sljit_u32) == 4
- && (sizeof(sljit_p) == 4 || sizeof(sljit_p) == 8)
- && sizeof(sljit_p) <= sizeof(sljit_sw)
+ && (sizeof(sljit_up) == 4 || sizeof(sljit_up) == 8)
+ && sizeof(sljit_up) <= sizeof(sljit_sw)
+ && sizeof(sljit_up) == sizeof(sljit_sp)
&& (sizeof(sljit_sw) == 4 || sizeof(sljit_sw) == 8)
- && (sizeof(sljit_uw) == 4 || sizeof(sljit_uw) == 8),
+ && (sizeof(sljit_uw) == sizeof(sljit_sw)),
invalid_integer_types);
SLJIT_COMPILE_ASSERT(SLJIT_REWRITABLE_JUMP != SLJIT_32,
rewritable_jump_and_single_op_must_not_be_the_same);
@@ -442,7 +480,6 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_compiler* sljit_create_compiler(void *allo
compiler->error = SLJIT_SUCCESS;
compiler->allocator_data = allocator_data;
- compiler->exec_allocator_data = exec_allocator_data;
compiler->buf = (struct sljit_memory_fragment*)SLJIT_MALLOC(BUF_SIZE, allocator_data);
compiler->abuf = (struct sljit_memory_fragment*)SLJIT_MALLOC(ABUF_SIZE, allocator_data);
@@ -537,37 +574,17 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_compiler_memory_error(struct sljit_compi
compiler->error = SLJIT_ERR_ALLOC_FAILED;
}
-#if (defined SLJIT_CONFIG_ARM_THUMB2 && SLJIT_CONFIG_ARM_THUMB2)
SLJIT_API_FUNC_ATTRIBUTE void sljit_free_code(void* code, void *exec_allocator_data)
{
SLJIT_UNUSED_ARG(exec_allocator_data);
- /* Remove thumb mode flag. */
- SLJIT_FREE_EXEC((void*)((sljit_uw)code & ~(sljit_uw)0x1), exec_allocator_data);
+ SLJIT_FREE_EXEC(SLJIT_CODE_TO_PTR(code), exec_allocator_data);
}
-#elif (defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL)
-SLJIT_API_FUNC_ATTRIBUTE void sljit_free_code(void* code, void *exec_allocator_data)
-{
- SLJIT_UNUSED_ARG(exec_allocator_data);
-
- /* Resolve indirection. */
- code = (void*)(*(sljit_uw*)code);
- SLJIT_FREE_EXEC(code, exec_allocator_data);
-}
-#else
-SLJIT_API_FUNC_ATTRIBUTE void sljit_free_code(void* code, void *exec_allocator_data)
-{
- SLJIT_UNUSED_ARG(exec_allocator_data);
-
- SLJIT_FREE_EXEC(code, exec_allocator_data);
-}
-#endif
SLJIT_API_FUNC_ATTRIBUTE void sljit_set_label(struct sljit_jump *jump, struct sljit_label* label)
{
if (SLJIT_LIKELY(!!jump) && SLJIT_LIKELY(!!label)) {
jump->flags &= (sljit_uw)~JUMP_ADDR;
- jump->flags |= JUMP_LABEL;
jump->u.label = label;
}
}
@@ -575,18 +592,11 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_label(struct sljit_jump *jump, struct sl
SLJIT_API_FUNC_ATTRIBUTE void sljit_set_target(struct sljit_jump *jump, sljit_uw target)
{
if (SLJIT_LIKELY(!!jump)) {
- jump->flags &= (sljit_uw)~JUMP_LABEL;
jump->flags |= JUMP_ADDR;
jump->u.target = target;
}
}
-SLJIT_API_FUNC_ATTRIBUTE void sljit_set_put_label(struct sljit_put_label *put_label, struct sljit_label *label)
-{
- if (SLJIT_LIKELY(!!put_label))
- put_label->label = label;
-}
-
#define SLJIT_CURRENT_FLAGS_ALL \
(SLJIT_CURRENT_FLAGS_32 | SLJIT_CURRENT_FLAGS_ADD | SLJIT_CURRENT_FLAGS_SUB | SLJIT_CURRENT_FLAGS_COMPARE)
@@ -681,31 +691,66 @@ static SLJIT_INLINE void reverse_buf(struct sljit_compiler *compiler)
compiler->buf = prev;
}
-/* Only used in RISC architectures where the instruction size is constant */
-#if !(defined SLJIT_CONFIG_X86 && SLJIT_CONFIG_X86) \
- && !(defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X)
-
-static SLJIT_INLINE sljit_uw compute_next_addr(struct sljit_label *label, struct sljit_jump *jump,
- struct sljit_const *const_, struct sljit_put_label *put_label)
+static SLJIT_INLINE void* allocate_executable_memory(sljit_uw size, sljit_s32 options,
+ void *exec_allocator_data, sljit_sw *executable_offset)
{
- sljit_uw result = ~(sljit_uw)0;
+ void *code;
+ struct sljit_generate_code_buffer *buffer;
+
+ if (SLJIT_LIKELY(!(options & SLJIT_GENERATE_CODE_BUFFER))) {
+ code = SLJIT_MALLOC_EXEC(size, exec_allocator_data);
+ *executable_offset = SLJIT_EXEC_OFFSET(code);
+ return code;
+ }
+
+ buffer = (struct sljit_generate_code_buffer*)exec_allocator_data;
+
+ if (size <= buffer->size) {
+ *executable_offset = buffer->executable_offset;
+ return buffer->buffer;
+ }
+
+ return NULL;
+}
+
+#define SLJIT_MAX_ADDRESS ~(sljit_uw)0
+
+#define SLJIT_GET_NEXT_SIZE(ptr) (ptr != NULL) ? ((ptr)->size) : SLJIT_MAX_ADDRESS
+#define SLJIT_GET_NEXT_ADDRESS(ptr) (ptr != NULL) ? ((ptr)->addr) : SLJIT_MAX_ADDRESS
+
+#if !(defined SLJIT_CONFIG_X86 && SLJIT_CONFIG_X86)
+
+#define SLJIT_NEXT_DEFINE_TYPES \
+ sljit_uw next_label_size; \
+ sljit_uw next_jump_addr; \
+ sljit_uw next_const_addr; \
+ sljit_uw next_min_addr
+
+#define SLJIT_NEXT_INIT_TYPES() \
+ next_label_size = SLJIT_GET_NEXT_SIZE(label); \
+ next_jump_addr = SLJIT_GET_NEXT_ADDRESS(jump); \
+ next_const_addr = SLJIT_GET_NEXT_ADDRESS(const_);
- if (label)
- result = label->size;
+#define SLJIT_GET_NEXT_MIN() \
+ next_min_addr = sljit_get_next_min(next_label_size, next_jump_addr, next_const_addr);
- if (jump && jump->addr < result)
- result = jump->addr;
+static SLJIT_INLINE sljit_uw sljit_get_next_min(sljit_uw next_label_size,
+ sljit_uw next_jump_addr, sljit_uw next_const_addr)
+{
+ sljit_uw result = next_jump_addr;
+
+ SLJIT_ASSERT(result == SLJIT_MAX_ADDRESS || result != next_const_addr);
- if (const_ && const_->addr < result)
- result = const_->addr;
+ if (next_const_addr < result)
+ result = next_const_addr;
- if (put_label && put_label->addr < result)
- result = put_label->addr;
+ if (next_label_size < result)
+ result = next_label_size;
return result;
}
-#endif /* !SLJIT_CONFIG_X86 && !SLJIT_CONFIG_S390X */
+#endif /* !SLJIT_CONFIG_X86 */
static SLJIT_INLINE void set_emit_enter(struct sljit_compiler *compiler,
sljit_s32 options, sljit_s32 args, sljit_s32 scratches, sljit_s32 saveds,
@@ -746,8 +791,9 @@ static SLJIT_INLINE void set_set_context(struct sljit_compiler *compiler,
static SLJIT_INLINE void set_label(struct sljit_label *label, struct sljit_compiler *compiler)
{
label->next = NULL;
+ label->u.index = compiler->label_count++;
label->size = compiler->size;
- if (compiler->last_label)
+ if (compiler->last_label != NULL)
compiler->last_label->next = label;
else
compiler->labels = label;
@@ -758,7 +804,21 @@ static SLJIT_INLINE void set_jump(struct sljit_jump *jump, struct sljit_compiler
{
jump->next = NULL;
jump->flags = flags;
- if (compiler->last_jump)
+ jump->u.label = NULL;
+ if (compiler->last_jump != NULL)
+ compiler->last_jump->next = jump;
+ else
+ compiler->jumps = jump;
+ compiler->last_jump = jump;
+}
+
+static SLJIT_INLINE void set_mov_addr(struct sljit_jump *jump, struct sljit_compiler *compiler, sljit_uw offset)
+{
+ jump->next = NULL;
+ jump->addr = compiler->size - offset;
+ jump->flags = JUMP_MOV_ADDR;
+ jump->u.label = NULL;
+ if (compiler->last_jump != NULL)
compiler->last_jump->next = jump;
else
compiler->jumps = jump;
@@ -769,26 +829,13 @@ static SLJIT_INLINE void set_const(struct sljit_const *const_, struct sljit_comp
{
const_->next = NULL;
const_->addr = compiler->size;
- if (compiler->last_const)
+ if (compiler->last_const != NULL)
compiler->last_const->next = const_;
else
compiler->consts = const_;
compiler->last_const = const_;
}
-static SLJIT_INLINE void set_put_label(struct sljit_put_label *put_label, struct sljit_compiler *compiler, sljit_uw offset)
-{
- put_label->next = NULL;
- put_label->label = NULL;
- put_label->addr = compiler->size - offset;
- put_label->flags = 0;
- if (compiler->last_put_label)
- compiler->last_put_label->next = put_label;
- else
- compiler->put_labels = put_label;
- compiler->last_put_label = put_label;
-}
-
#define ADDRESSING_DEPENDS_ON(exp, reg) \
(((exp) & SLJIT_MEM) && (((exp) & REG_MASK) == reg || OFFS_REG(exp) == reg))
@@ -1106,6 +1153,10 @@ static const char* op2_names[] = {
"ashr", "mashr", "rotl", "rotr"
};
+static const char* op2r_names[] = {
+ "muladd"
+};
+
static const char* op_src_dst_names[] = {
"fast_return", "skip_frames_before_fast_return",
"prefetch_l1", "prefetch_l2",
@@ -1187,13 +1238,19 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_generate_code(struct sljit_com
jump = compiler->jumps;
while (jump) {
/* All jumps have target. */
- CHECK_ARGUMENT(jump->flags & (JUMP_LABEL | JUMP_ADDR));
+ CHECK_ARGUMENT((jump->flags & JUMP_ADDR) || jump->u.label != NULL);
jump = jump->next;
}
#endif
CHECK_RETURN_OK;
}
+#if (defined SLJIT_CONFIG_X86 && SLJIT_CONFIG_X86)
+#define SLJIT_ENTER_CPU_SPECIFIC_OPTIONS (SLJIT_ENTER_USE_VEX)
+#else /* !SLJIT_CONFIG_X86 */
+#define SLJIT_ENTER_CPU_SPECIFIC_OPTIONS (0)
+#endif /* !SLJIT_CONFIG_X86 */
+
static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_enter(struct sljit_compiler *compiler,
sljit_s32 options, sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds,
sljit_s32 fscratches, sljit_s32 fsaveds, sljit_s32 local_size)
@@ -1202,9 +1259,9 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_enter(struct sljit_compil
#if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS)
if (options & SLJIT_ENTER_REG_ARG) {
- CHECK_ARGUMENT(!(options & ~(0x3 | SLJIT_ENTER_REG_ARG)));
+ CHECK_ARGUMENT(!(options & ~(0x3 | SLJIT_ENTER_REG_ARG | SLJIT_ENTER_CPU_SPECIFIC_OPTIONS)));
} else {
- CHECK_ARGUMENT(options == 0);
+ CHECK_ARGUMENT((options & ~SLJIT_ENTER_CPU_SPECIFIC_OPTIONS) == 0);
}
CHECK_ARGUMENT(SLJIT_KEPT_SAVEDS_COUNT(options) <= 3 && SLJIT_KEPT_SAVEDS_COUNT(options) <= saveds);
CHECK_ARGUMENT(scratches >= 0 && scratches <= SLJIT_NUMBER_OF_REGISTERS);
@@ -1238,11 +1295,17 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_enter(struct sljit_compil
fprintf(compiler->verbose, "],");
if (options & SLJIT_ENTER_REG_ARG) {
- fprintf(compiler->verbose, " enter:reg_arg,");
-
if (SLJIT_KEPT_SAVEDS_COUNT(options) > 0)
- fprintf(compiler->verbose, " keep:%d,", SLJIT_KEPT_SAVEDS_COUNT(options));
+ fprintf(compiler->verbose, " opt:reg_arg(%d),", SLJIT_KEPT_SAVEDS_COUNT(options));
+ else
+ fprintf(compiler->verbose, " opt:reg_arg,");
+ }
+
+#if (defined SLJIT_CONFIG_X86 && SLJIT_CONFIG_X86)
+ if (options & SLJIT_ENTER_USE_VEX) {
+ fprintf(compiler->verbose, " opt:use_vex,");
}
+#endif /* !SLJIT_CONFIG_X86 */
fprintf(compiler->verbose, " scratches:%d, saveds:%d, fscratches:%d, fsaveds:%d, local_size:%d\n",
scratches, saveds, fscratches, fsaveds, local_size);
@@ -1259,9 +1322,9 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_set_context(struct sljit_compi
#if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS)
if (options & SLJIT_ENTER_REG_ARG) {
- CHECK_ARGUMENT(!(options & ~(0x3 | SLJIT_ENTER_REG_ARG)));
+ CHECK_ARGUMENT(!(options & ~(0x3 | SLJIT_ENTER_REG_ARG | SLJIT_ENTER_CPU_SPECIFIC_OPTIONS)));
} else {
- CHECK_ARGUMENT(options == 0);
+ CHECK_ARGUMENT((options & ~SLJIT_ENTER_CPU_SPECIFIC_OPTIONS) == 0);
}
CHECK_ARGUMENT(SLJIT_KEPT_SAVEDS_COUNT(options) <= 3 && SLJIT_KEPT_SAVEDS_COUNT(options) <= saveds);
CHECK_ARGUMENT(scratches >= 0 && scratches <= SLJIT_NUMBER_OF_REGISTERS);
@@ -1295,11 +1358,17 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_set_context(struct sljit_compi
fprintf(compiler->verbose, "],");
if (options & SLJIT_ENTER_REG_ARG) {
- fprintf(compiler->verbose, " enter:reg_arg,");
-
if (SLJIT_KEPT_SAVEDS_COUNT(options) > 0)
- fprintf(compiler->verbose, " keep:%d,", SLJIT_KEPT_SAVEDS_COUNT(options));
+ fprintf(compiler->verbose, " opt:reg_arg(%d),", SLJIT_KEPT_SAVEDS_COUNT(options));
+ else
+ fprintf(compiler->verbose, " opt:reg_arg,");
+ }
+
+#if (defined SLJIT_CONFIG_X86 && SLJIT_CONFIG_X86)
+ if (options & SLJIT_ENTER_USE_VEX) {
+ fprintf(compiler->verbose, " opt:use_vex,");
}
+#endif /* !SLJIT_CONFIG_X86 */
fprintf(compiler->verbose, " scratches:%d, saveds:%d, fscratches:%d, fsaveds:%d, local_size:%d\n",
scratches, saveds, fscratches, fsaveds, local_size);
@@ -1308,6 +1377,8 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_set_context(struct sljit_compi
CHECK_RETURN_OK;
}
+#undef SLJIT_ENTER_CPU_SPECIFIC_OPTIONS
+
static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_return_void(struct sljit_compiler *compiler)
{
if (SLJIT_UNLIKELY(compiler->skip_checks)) {
@@ -1636,6 +1707,33 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_op2(struct sljit_compiler
CHECK_RETURN_OK;
}
+static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_op2r(struct sljit_compiler *compiler, sljit_s32 op,
+ sljit_s32 dst_reg,
+ sljit_s32 src1, sljit_sw src1w,
+ sljit_s32 src2, sljit_sw src2w)
+{
+#if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS)
+ CHECK_ARGUMENT((op | SLJIT_32) == SLJIT_MULADD32);
+ CHECK_ARGUMENT(FUNCTION_CHECK_IS_REG(dst_reg));
+ FUNCTION_CHECK_SRC(src1, src1w);
+ FUNCTION_CHECK_SRC(src2, src2w);
+ compiler->last_flags = 0;
+#endif
+#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)
+ if (SLJIT_UNLIKELY(!!compiler->verbose)) {
+ fprintf(compiler->verbose, " %s%s ", op2r_names[GET_OPCODE(op) - SLJIT_OP2R_BASE], !(op & SLJIT_32) ? "" : "32");
+
+ sljit_verbose_reg(compiler, dst_reg);
+ fprintf(compiler->verbose, ", ");
+ sljit_verbose_param(compiler, src1, src1w);
+ fprintf(compiler->verbose, ", ");
+ sljit_verbose_param(compiler, src2, src2w);
+ fprintf(compiler->verbose, "\n");
+ }
+#endif
+ CHECK_RETURN_OK;
+}
+
static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_shift_into(struct sljit_compiler *compiler, sljit_s32 op,
sljit_s32 dst_reg,
sljit_s32 src1_reg,
@@ -1721,11 +1819,11 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_get_register_index(sljit_s32 t
#if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS)
if (type == SLJIT_GP_REGISTER) {
CHECK_ARGUMENT((reg > 0 && reg <= SLJIT_NUMBER_OF_REGISTERS)
- || (reg >= SLJIT_TMP_REGISTER_BASE && reg <= (SLJIT_TMP_REGISTER_BASE + SLJIT_NUMBER_OF_TEMPORARY_REGISTERS)));
+ || (reg >= SLJIT_TMP_REGISTER_BASE && reg < (SLJIT_TMP_REGISTER_BASE + SLJIT_NUMBER_OF_TEMPORARY_REGISTERS)));
} else {
CHECK_ARGUMENT(type == SLJIT_FLOAT_REGISTER || ((type >> 12) == 0 || ((type >> 12) >= 3 && (type >> 12) <= 6)));
CHECK_ARGUMENT((reg > 0 && reg <= SLJIT_NUMBER_OF_FLOAT_REGISTERS)
- || (reg >= SLJIT_TMP_FREGISTER_BASE && reg <= (SLJIT_TMP_FREGISTER_BASE + SLJIT_NUMBER_OF_TEMPORARY_FLOAT_REGISTERS)));
+ || (reg >= SLJIT_TMP_FREGISTER_BASE && reg < (SLJIT_TMP_FREGISTER_BASE + SLJIT_NUMBER_OF_TEMPORARY_FLOAT_REGISTERS)));
}
#endif
CHECK_RETURN_OK;
@@ -2927,14 +3025,14 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_const(struct sljit_compil
CHECK_RETURN_OK;
}
-static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_put_label(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw dstw)
+static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_mov_addr(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw dstw)
{
#if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS)
FUNCTION_CHECK_DST(dst, dstw);
#endif
#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)
if (SLJIT_UNLIKELY(!!compiler->verbose)) {
- fprintf(compiler->verbose, " put_label ");
+ fprintf(compiler->verbose, " mov_addr ");
sljit_verbose_param(compiler, dst, dstw);
fprintf(compiler->verbose, "\n");
}
@@ -3058,6 +3156,8 @@ static sljit_s32 sljit_emit_fmem_unaligned(struct sljit_compiler *compiler, slji
# include "sljitNativeLOONGARCH_64.c"
#endif
+#include "sljitSerialize.c"
+
static SLJIT_INLINE sljit_s32 emit_mov_before_return(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src, sljit_sw srcw)
{
#if (defined SLJIT_64BIT_ARCHITECTURE && SLJIT_64BIT_ARCHITECTURE)
@@ -3288,7 +3388,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fmem_update(struct sljit_compiler
#if !(defined SLJIT_CONFIG_X86 && SLJIT_CONFIG_X86) \
&& !(defined SLJIT_CONFIG_ARM && SLJIT_CONFIG_ARM) \
- && !(defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X)
+ && !(defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X) \
+ && !(defined SLJIT_CONFIG_LOONGARCH && SLJIT_CONFIG_LOONGARCH)
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_mov(struct sljit_compiler *compiler, sljit_s32 type,
sljit_s32 freg,
diff --git a/src/3rdparty/pcre2/src/sljit/sljitLir.h b/src/3rdparty/pcre2/src/sljit/sljitLir.h
index 2ba6683c74..8b6fa69a0a 100644
--- a/src/3rdparty/pcre2/src/sljit/sljitLir.h
+++ b/src/3rdparty/pcre2/src/sljit/sljitLir.h
@@ -427,7 +427,10 @@ struct sljit_memory_fragment {
struct sljit_label {
struct sljit_label *next;
- sljit_uw addr;
+ union {
+ sljit_uw index;
+ sljit_uw addr;
+ } u;
/* The maximum size difference. */
sljit_uw size;
};
@@ -443,36 +446,35 @@ struct sljit_jump {
} u;
};
-struct sljit_put_label {
- struct sljit_put_label *next;
- struct sljit_label *label;
- sljit_uw addr;
- sljit_uw flags;
-};
-
struct sljit_const {
struct sljit_const *next;
sljit_uw addr;
};
+struct sljit_generate_code_buffer {
+ void *buffer;
+ sljit_uw size;
+ sljit_sw executable_offset;
+};
+
struct sljit_compiler {
sljit_s32 error;
sljit_s32 options;
struct sljit_label *labels;
struct sljit_jump *jumps;
- struct sljit_put_label *put_labels;
struct sljit_const *consts;
struct sljit_label *last_label;
struct sljit_jump *last_jump;
struct sljit_const *last_const;
- struct sljit_put_label *last_put_label;
void *allocator_data;
- void *exec_allocator_data;
+ void *user_data;
struct sljit_memory_fragment *buf;
struct sljit_memory_fragment *abuf;
+ /* Number of labels created by the compiler. */
+ sljit_uw label_count;
/* Available scratch registers. */
sljit_s32 scratches;
/* Available saved registers. */
@@ -492,15 +494,16 @@ struct sljit_compiler {
#if (defined SLJIT_HAS_STATUS_FLAGS_STATE && SLJIT_HAS_STATUS_FLAGS_STATE)
sljit_s32 status_flags_state;
-#endif
+#endif /* SLJIT_HAS_STATUS_FLAGS_STATE */
#if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)
sljit_s32 args_size;
-#endif
+#endif /* SLJIT_CONFIG_X86_32 */
#if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
+ /* Temporary fields. */
sljit_s32 mode32;
-#endif
+#endif /* SLJIT_CONFIG_X86_64 */
#if (defined SLJIT_CONFIG_ARM_V6 && SLJIT_CONFIG_ARM_V6)
/* Constant pool handling. */
@@ -511,7 +514,7 @@ struct sljit_compiler {
/* Other members. */
/* Contains pointer, "ldr pc, [...]" pairs. */
sljit_uw patches;
-#endif
+#endif /* SLJIT_CONFIG_ARM_V6 */
#if (defined SLJIT_CONFIG_ARM_V6 && SLJIT_CONFIG_ARM_V6) || (defined SLJIT_CONFIG_ARM_V7 && SLJIT_CONFIG_ARM_V7)
/* Temporary fields. */
@@ -520,40 +523,45 @@ struct sljit_compiler {
#if (defined SLJIT_CONFIG_ARM_32 && SLJIT_CONFIG_ARM_32) && (defined __SOFTFP__)
sljit_uw args_size;
-#endif
+#endif /* SLJIT_CONFIG_ARM_32 && __SOFTFP__ */
#if (defined SLJIT_CONFIG_PPC && SLJIT_CONFIG_PPC)
+ /* Temporary fields. */
sljit_u32 imm;
-#endif
+#endif /* SLJIT_CONFIG_PPC */
#if (defined SLJIT_CONFIG_MIPS && SLJIT_CONFIG_MIPS)
sljit_s32 delay_slot;
+ /* Temporary fields. */
sljit_s32 cache_arg;
sljit_sw cache_argw;
-#endif
+#endif /* SLJIT_CONFIG_MIPS */
#if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32)
sljit_uw args_size;
-#endif
+#endif /* SLJIT_CONFIG_MIPS_32 */
#if (defined SLJIT_CONFIG_RISCV && SLJIT_CONFIG_RISCV)
+ /* Temporary fields. */
sljit_s32 cache_arg;
sljit_sw cache_argw;
-#endif
+#endif /* SLJIT_CONFIG_RISCV */
#if (defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X)
/* Need to allocate register save area to make calls. */
+ /* Temporary fields. */
sljit_s32 mode;
-#endif
+#endif /* SLJIT_CONFIG_S390X */
#if (defined SLJIT_CONFIG_LOONGARCH && SLJIT_CONFIG_LOONGARCH)
+ /* Temporary fields. */
sljit_s32 cache_arg;
sljit_sw cache_argw;
-#endif
+#endif /* SLJIT_CONFIG_LOONGARCH */
#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)
FILE* verbose;
-#endif
+#endif /* SLJIT_VERBOSE */
#if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) \
|| (defined SLJIT_DEBUG && SLJIT_DEBUG)
@@ -564,7 +572,7 @@ struct sljit_compiler {
sljit_s32 last_return;
/* Local size passed to entry functions. */
sljit_s32 logical_local_size;
-#endif
+#endif /* SLJIT_ARGUMENT_CHECKS || SLJIT_DEBUG */
#if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) \
|| (defined SLJIT_DEBUG && SLJIT_DEBUG) \
@@ -572,7 +580,7 @@ struct sljit_compiler {
/* Trust arguments when an API function is called.
Used internally for calling API functions. */
sljit_s32 skip_checks;
-#endif
+#endif /* SLJIT_ARGUMENT_CHECKS || SLJIT_DEBUG || SLJIT_VERBOSE */
};
/* --------------------------------------------------------------------- */
@@ -583,12 +591,10 @@ struct sljit_compiler {
custom memory managers. This pointer is passed to SLJIT_MALLOC
and SLJIT_FREE macros. Most allocators (including the default
one) ignores this value, and it is recommended to pass NULL
- as a dummy value for allocator_data. The exec_allocator_data
- has the same purpose but this one is passed to SLJIT_MALLOC_EXEC /
- SLJIT_MALLOC_FREE functions.
+ as a dummy value for allocator_data.
Returns NULL if failed. */
-SLJIT_API_FUNC_ATTRIBUTE struct sljit_compiler* sljit_create_compiler(void *allocator_data, void *exec_allocator_data);
+SLJIT_API_FUNC_ATTRIBUTE struct sljit_compiler* sljit_create_compiler(void *allocator_data);
/* Frees everything except the compiled machine code. */
SLJIT_API_FUNC_ATTRIBUTE void sljit_free_compiler(struct sljit_compiler *compiler);
@@ -619,20 +625,31 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_compiler_memory_error(struct sljit_compi
of the compiler to out-of-memory status). */
SLJIT_API_FUNC_ATTRIBUTE void* sljit_alloc_memory(struct sljit_compiler *compiler, sljit_s32 size);
-/* Returns the allocator data passed to sljit_create_compiler. These pointers
- may contain context data even if the normal/exec allocator ignores it. */
-static SLJIT_INLINE void* sljit_get_allocator_data(struct sljit_compiler *compiler) { return compiler->allocator_data; }
-static SLJIT_INLINE void* sljit_get_exec_allocator_data(struct sljit_compiler *compiler) { return compiler->exec_allocator_data; }
+/* Returns the allocator data passed to sljit_create_compiler. */
+static SLJIT_INLINE void* sljit_compiler_get_allocator_data(struct sljit_compiler *compiler) { return compiler->allocator_data; }
+/* Sets/get the user data for a compiler. */
+static SLJIT_INLINE void sljit_compiler_set_user_data(struct sljit_compiler *compiler, void *user_data) { compiler->user_data = user_data; }
+static SLJIT_INLINE void* sljit_compiler_get_user_data(struct sljit_compiler *compiler) { return compiler->user_data; }
#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)
/* Passing NULL disables verbose. */
SLJIT_API_FUNC_ATTRIBUTE void sljit_compiler_verbose(struct sljit_compiler *compiler, FILE* verbose);
#endif
+/* Option bits for sljit_generate_code. */
+
+/* The exec_allocator_data points to a pre-allocated
+ buffer which type is sljit_generate_code_buffer. */
+#define SLJIT_GENERATE_CODE_BUFFER 0x1
+
/* Create executable code from the instruction stream. This is the final step
- of the code generation so no more instructions can be emitted after this call. */
+ of the code generation, and no more instructions can be emitted after this call.
+
+ options is the combination of SLJIT_GENERATE_CODE_* bits
+ exec_allocator_data is passed to SLJIT_MALLOC_EXEC and
+ SLJIT_MALLOC_FREE functions */
-SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compiler);
+SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compiler, sljit_s32 options, void *exec_allocator_data);
/* Free executable code. */
@@ -708,6 +725,11 @@ static SLJIT_INLINE sljit_uw sljit_get_generated_code_size(struct sljit_compiler
#define SLJIT_HAS_AVX2 101
#endif
+#if (defined SLJIT_CONFIG_LOONGARCH)
+/* [Not emulated] LASX support is available on LoongArch */
+#define SLJIT_HAS_LASX 201
+#endif
+
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_has_cpu_feature(sljit_s32 feature_type);
/* If type is between SLJIT_ORDERED_EQUAL and SLJIT_ORDERED_LESS_EQUAL,
@@ -777,17 +799,22 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_cmp_info(sljit_s32 type);
global / local context pointers) across function calls. The
value of n must be between 1 and 3. This option is only
supported by SLJIT_ENTER_REG_ARG calling convention. */
-#define SLJIT_ENTER_KEEP(n) (n)
+#define SLJIT_ENTER_KEEP(n) (n)
/* The compiled function uses an SLJIT specific register argument
calling convention. This is a lightweight function call type where
both the caller and the called functions must be compiled by
SLJIT. The type argument of the call must be SLJIT_CALL_REG_ARG
and all arguments must be stored in scratch registers. */
-#define SLJIT_ENTER_REG_ARG 0x00000004
+#define SLJIT_ENTER_REG_ARG 0x00000004
/* The local_size must be >= 0 and <= SLJIT_MAX_LOCAL_SIZE. */
-#define SLJIT_MAX_LOCAL_SIZE 1048576
+#define SLJIT_MAX_LOCAL_SIZE 1048576
+
+#if (defined SLJIT_CONFIG_X86 && SLJIT_CONFIG_X86)
+/* Use VEX prefix for all SIMD operations on x86. */
+#define SLJIT_ENTER_USE_VEX 0x00010000
+#endif /* !SLJIT_CONFIG_X86 */
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_enter(struct sljit_compiler *compiler,
sljit_s32 options, sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds,
@@ -855,7 +882,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return_to(struct sljit_compiler *c
int | 4 byte (physical_address & 0x3 == 0)
word | 4 byte if SLJIT_32BIT_ARCHITECTURE is defined and its value is 1
| 8 byte if SLJIT_64BIT_ARCHITECTURE is defined and its value is 1
- pointer | size of sljit_p type (4 byte on 32 bit machines, 4 or 8 byte
+ pointer | size of sljit_up type (4 byte on 32 bit machines, 4 or 8 byte
| on 64 bit machines)
Note: Different architectures have different addressing limitations.
@@ -913,6 +940,13 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return_to(struct sljit_compiler *c
#define SLJIT_IS_IMM(arg) ((arg) == SLJIT_IMM)
#define SLJIT_IS_REG_PAIR(arg) (!((arg) & SLJIT_MEM) && (arg) >= (SLJIT_MEM << 1))
+/* Macros for extracting registers from operands. */
+/* Support operands which contains a single register or
+ constructed using SLJIT_MEM1, SLJIT_MEM2, or SLJIT_REG_PAIR. */
+#define SLJIT_EXTRACT_REG(arg) ((arg) & 0x7f)
+/* Support operands which constructed using SLJIT_MEM2, or SLJIT_REG_PAIR. */
+#define SLJIT_EXTRACT_SECOND_REG(arg) ((arg) >> 8)
+
/* Sets 32 bit operation mode on 64 bit CPUs. This option is ignored on
32 bit CPUs. When this option is set for an arithmetic operation, only
the lower 32 bits of the input registers are used, and the CPU status
@@ -1084,7 +1118,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compile
S16 - signed 16 bit data transfer
U32 - unsigned int (32 bit) data transfer
S32 - signed int (32 bit) data transfer
- P - pointer (sljit_p) data transfer
+ P - pointer (sljit_up) data transfer
*/
/* Flags: - (does not modify flags) */
@@ -1251,6 +1285,19 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2u(struct sljit_compiler *compil
sljit_s32 src1, sljit_sw src1w,
sljit_s32 src2, sljit_sw src2w);
+/* Starting index of opcodes for sljit_emit_op2r. */
+#define SLJIT_OP2R_BASE 96
+
+/* Flags: - (may destroy flags) */
+#define SLJIT_MULADD (SLJIT_OP2R_BASE + 0)
+#define SLJIT_MULADD32 (SLJIT_MULADD | SLJIT_32)
+
+/* Similar to sljit_emit_fop2, except the destination is always a register. */
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2r(struct sljit_compiler *compiler, sljit_s32 op,
+ sljit_s32 dst_reg,
+ sljit_s32 src1, sljit_sw src1w,
+ sljit_s32 src2, sljit_sw src2w);
+
/* Emit a left or right shift operation, where the bits shifted
in comes from a separate source operand. All operands are
interpreted as unsigned integers.
@@ -1298,7 +1345,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_shift_into(struct sljit_compiler *
/* Starting index of opcodes for sljit_emit_op_src
and sljit_emit_op_dst. */
-#define SLJIT_OP_SRC_DST_BASE 96
+#define SLJIT_OP_SRC_DST_BASE 112
/* Fast return, see SLJIT_FAST_CALL for more details.
Note: src cannot be an immedate value
@@ -1350,7 +1397,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_dst(struct sljit_compiler *comp
sljit_s32 dst, sljit_sw dstw);
/* Starting index of opcodes for sljit_emit_fop1. */
-#define SLJIT_FOP1_BASE 128
+#define SLJIT_FOP1_BASE 144
/* Flags: - (does not modify flags) */
#define SLJIT_MOV_F64 (SLJIT_FOP1_BASE + 0)
@@ -1395,7 +1442,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compil
sljit_s32 src, sljit_sw srcw);
/* Starting index of opcodes for sljit_emit_fop2. */
-#define SLJIT_FOP2_BASE 160
+#define SLJIT_FOP2_BASE 176
/* Flags: - (may destroy flags) */
#define SLJIT_ADD_F64 (SLJIT_FOP2_BASE + 0)
@@ -1416,7 +1463,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop2(struct sljit_compiler *compil
sljit_s32 src2, sljit_sw src2w);
/* Starting index of opcodes for sljit_emit_fop2r. */
-#define SLJIT_FOP2R_BASE 168
+#define SLJIT_FOP2R_BASE 192
/* Flags: - (may destroy flags) */
#define SLJIT_COPYSIGN_F64 (SLJIT_FOP2R_BASE + 0)
@@ -2138,17 +2185,15 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_local_base(struct sljit_compiler *c
Flags: - (does not modify flags) */
SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw dstw, sljit_sw init_value);
-/* Store the value of a label (see: sljit_set_put_label)
+/* Store the value of a label (see: sljit_set_label / sljit_set_target)
Flags: - (does not modify flags) */
-SLJIT_API_FUNC_ATTRIBUTE struct sljit_put_label* sljit_emit_put_label(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw dstw);
-
-/* Set the value stored by put_label to this label. */
-SLJIT_API_FUNC_ATTRIBUTE void sljit_set_put_label(struct sljit_put_label *put_label, struct sljit_label *label);
+SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_mov_addr(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw dstw);
-/* After the code generation the address for label, jump and const instructions
- are computed. Since these structures are freed by sljit_free_compiler, the
- addresses must be preserved by the user program elsewere. */
-static SLJIT_INLINE sljit_uw sljit_get_label_addr(struct sljit_label *label) { return label->addr; }
+/* Provides the address of label, jump and const instructions after sljit_generate_code
+ is called. The returned value is unspecified before the sljit_generate_code call.
+ Since these structures are freed by sljit_free_compiler, the addresses must be
+ preserved by the user program elsewere. */
+static SLJIT_INLINE sljit_uw sljit_get_label_addr(struct sljit_label *label) { return label->u.addr; }
static SLJIT_INLINE sljit_uw sljit_get_jump_addr(struct sljit_jump *jump) { return jump->addr; }
static SLJIT_INLINE sljit_uw sljit_get_const_addr(struct sljit_const *const_) { return const_->addr; }
@@ -2222,6 +2267,98 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_current_flags(struct sljit_compiler *com
sljit_s32 current_flags);
/* --------------------------------------------------------------------- */
+/* Serialization functions */
+/* --------------------------------------------------------------------- */
+
+/* Label/jump/const enumeration functions. The items in each group
+ are enumerated in creation order. Serialization / deserialization
+ preserves this order for each group. For example the fifth label
+ after deserialization refers to the same machine code location as
+ the fifth label before the serialization. */
+static SLJIT_INLINE struct sljit_label *sljit_get_first_label(struct sljit_compiler *compiler) { return compiler->labels; }
+static SLJIT_INLINE struct sljit_jump *sljit_get_first_jump(struct sljit_compiler *compiler) { return compiler->jumps; }
+static SLJIT_INLINE struct sljit_const *sljit_get_first_const(struct sljit_compiler *compiler) { return compiler->consts; }
+
+static SLJIT_INLINE struct sljit_label *sljit_get_next_label(struct sljit_label *label) { return label->next; }
+static SLJIT_INLINE struct sljit_jump *sljit_get_next_jump(struct sljit_jump *jump) { return jump->next; }
+static SLJIT_INLINE struct sljit_const *sljit_get_next_const(struct sljit_const *const_) { return const_->next; }
+
+/* A number starting from 0 is assigned to each label, which
+represents its creation index. The first label created by the
+compiler has index 0, the second has index 1, the third has
+index 2, and so on. The returned value is unspecified after
+sljit_generate_code() is called. */
+static SLJIT_INLINE sljit_uw sljit_get_label_index(struct sljit_label *label) { return label->u.index; }
+
+/* The sljit_jump_has_label() and sljit_jump_has_target() functions
+returns non-zero value if a label or target is set for the jump
+respectively. Both may return with a zero value. The other two
+functions return the value assigned to the jump. */
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_jump_has_label(struct sljit_jump *jump);
+static SLJIT_INLINE struct sljit_label *sljit_jump_get_label(struct sljit_jump *jump) { return jump->u.label; }
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_jump_has_target(struct sljit_jump *jump);
+static SLJIT_INLINE sljit_uw sljit_jump_get_target(struct sljit_jump *jump) { return jump->u.target; }
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_jump_is_mov_addr(struct sljit_jump *jump);
+
+/* Option bits for sljit_serialize_compiler. */
+
+/* When debugging is enabled, the serialized buffer contains
+debugging information unless this option is specified. */
+#define SLJIT_SERIALIZE_IGNORE_DEBUG 0x1
+
+/* Serialize the internal structure of the compiler into a buffer.
+If the serialization is successful, the returned value is a newly
+allocated buffer which is allocated by the memory allocator assigned
+to the compiler. Otherwise the returned value is NULL. Unlike
+sljit_generate_code(), serialization does not modify the internal
+state of the compiler, so the code generation can be continued.
+
+ options must be the combination of SLJIT_SERIALIZE_* option bits
+ size is an output argument, which is set to the byte size of
+ the result buffer if the operation is successful
+
+Notes:
+ - This function is useful for ahead-of-time compilation (AOT).
+ - The returned buffer must be freed later by the caller.
+ The SLJIT_FREE() macro is suitable for this purpose:
+ SLJIT_FREE(returned_buffer, sljit_get_allocator_data(compiler))
+ - Memory allocated by sljit_alloc_memory() is not serialized.
+ - The type of the returned buffer is sljit_uw* to emphasize that
+ the buffer is word aligned. However, the 'size' output argument
+ contains the byte size, so this value is always divisible by
+ sizeof(sljit_uw).
+*/
+SLJIT_API_FUNC_ATTRIBUTE sljit_uw* sljit_serialize_compiler(struct sljit_compiler *compiler,
+ sljit_s32 options, sljit_uw *size);
+
+/* Construct a new compiler instance from a buffer produced by
+sljit_serialize_compiler(). If the operation is successful, the new
+compiler instance is returned. Otherwise the returned value is NULL.
+
+ buffer points to a word aligned memory data which was
+ created by sljit_serialize_compiler()
+ size is the byte size of the buffer
+ options must be 0
+ allocator_data specify an allocator specific data, see
+ sljit_create_compiler() for further details
+
+Notes:
+ - Labels assigned to jumps are restored with their
+ corresponding label in the label set created by
+ the deserializer. Target addresses assigned to
+ jumps are also restored. Uninitialized jumps
+ remain uninitialized.
+ - After the deserialization, sljit_generate_code() does
+ not need to be the next operation on the returned
+ compiler, the code generation can be continued.
+ Even sljit_serialize_compiler() can be called again.
+ - When debugging is enabled, a buffers without debug
+ information cannot be deserialized.
+*/
+SLJIT_API_FUNC_ATTRIBUTE struct sljit_compiler *sljit_deserialize_compiler(sljit_uw* buffer, sljit_uw size,
+ sljit_s32 options, void *allocator_data);
+
+/* --------------------------------------------------------------------- */
/* Miscellaneous utility functions */
/* --------------------------------------------------------------------- */
diff --git a/src/3rdparty/pcre2/src/sljit/sljitNativeARM_32.c b/src/3rdparty/pcre2/src/sljit/sljitNativeARM_32.c
index d44616d800..a253c06f01 100644
--- a/src/3rdparty/pcre2/src/sljit/sljitNativeARM_32.c
+++ b/src/3rdparty/pcre2/src/sljit/sljitNativeARM_32.c
@@ -120,6 +120,7 @@ static const sljit_u8 freg_ebit_map[((SLJIT_NUMBER_OF_FLOAT_REGISTERS + 2) << 1)
#define LDREX 0xe1900f9f
#define LDREXB 0xe1d00f9f
#define LDREXH 0xe1f00f9f
+#define MLA 0xe0200090
#define MOV 0xe1a00000
#define MUL 0xe0000090
#define MVN 0xe1e00000
@@ -482,11 +483,12 @@ static SLJIT_INLINE sljit_s32 detect_jump_type(struct sljit_jump *jump, sljit_uw
#if (defined SLJIT_CONFIG_ARM_V6 && SLJIT_CONFIG_ARM_V6)
if (jump->flags & IS_BL)
code_ptr--;
+#endif /* SLJIT_CONFIG_ARM_V6 */
if (jump->flags & JUMP_ADDR)
diff = ((sljit_sw)jump->u.target - (sljit_sw)(code_ptr + 2) - executable_offset);
else {
- SLJIT_ASSERT(jump->flags & JUMP_LABEL);
+ SLJIT_ASSERT(jump->u.label != NULL);
diff = ((sljit_sw)(code + jump->u.label->size) - (sljit_sw)(code_ptr + 2));
}
@@ -494,6 +496,7 @@ static SLJIT_INLINE sljit_s32 detect_jump_type(struct sljit_jump *jump, sljit_uw
if (diff & 0x3)
return 0;
+#if (defined SLJIT_CONFIG_ARM_V6 && SLJIT_CONFIG_ARM_V6)
if (jump->flags & IS_BL) {
if (diff <= 0x01ffffff && diff >= -0x02000000) {
*code_ptr = (BL - CONDITIONAL) | (*(code_ptr + 1) & COND_MASK);
@@ -508,20 +511,8 @@ static SLJIT_INLINE sljit_s32 detect_jump_type(struct sljit_jump *jump, sljit_uw
}
}
#else /* !SLJIT_CONFIG_ARM_V6 */
- if (jump->flags & JUMP_ADDR)
- diff = ((sljit_sw)jump->u.target - (sljit_sw)code_ptr - executable_offset);
- else {
- SLJIT_ASSERT(jump->flags & JUMP_LABEL);
- diff = ((sljit_sw)(code + jump->u.label->size) - (sljit_sw)code_ptr);
- }
-
- /* Branch to Thumb code has not been optimized yet. */
- if (diff & 0x3)
- return 0;
-
if (diff <= 0x01ffffff && diff >= -0x02000000) {
- code_ptr -= 2;
- *code_ptr = ((jump->flags & IS_BL) ? (BL - CONDITIONAL) : (B - CONDITIONAL)) | (code_ptr[2] & COND_MASK);
+ *code_ptr = ((jump->flags & IS_BL) ? (BL - CONDITIONAL) : (B - CONDITIONAL)) | (*code_ptr & COND_MASK);
jump->flags |= PATCH_B;
return 1;
}
@@ -529,7 +520,7 @@ static SLJIT_INLINE sljit_s32 detect_jump_type(struct sljit_jump *jump, sljit_uw
return 0;
}
-static SLJIT_INLINE void inline_set_jump_addr(sljit_uw jump_ptr, sljit_sw executable_offset, sljit_uw new_addr, sljit_s32 flush_cache)
+static void set_jump_addr(sljit_uw jump_ptr, sljit_sw executable_offset, sljit_uw new_addr, sljit_s32 flush_cache)
{
#if (defined SLJIT_CONFIG_ARM_V6 && SLJIT_CONFIG_ARM_V6)
sljit_ins *ptr = (sljit_ins*)jump_ptr;
@@ -628,7 +619,7 @@ static sljit_uw get_imm(sljit_uw imm);
static sljit_s32 load_immediate(struct sljit_compiler *compiler, sljit_s32 reg, sljit_uw imm);
static sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg, sljit_s32 arg, sljit_sw argw, sljit_s32 tmp_reg);
-static SLJIT_INLINE void inline_set_const(sljit_uw addr, sljit_sw executable_offset, sljit_uw new_constant, sljit_s32 flush_cache)
+static void set_const_value(sljit_uw addr, sljit_sw executable_offset, sljit_uw new_constant, sljit_s32 flush_cache)
{
#if (defined SLJIT_CONFIG_ARM_V6 && SLJIT_CONFIG_ARM_V6)
sljit_ins *ptr = (sljit_ins*)addr;
@@ -720,18 +711,120 @@ static SLJIT_INLINE void inline_set_const(sljit_uw addr, sljit_sw executable_off
#endif /* SLJIT_CONFIG_ARM_V6 */
}
-SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compiler)
+static SLJIT_INLINE sljit_sw mov_addr_get_length(struct sljit_jump *jump, sljit_ins *code_ptr, sljit_ins *code, sljit_sw executable_offset)
+{
+ sljit_uw addr;
+ sljit_sw diff;
+ SLJIT_UNUSED_ARG(executable_offset);
+
+ if (jump->flags & JUMP_ADDR)
+ addr = jump->u.target;
+ else
+ addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code + jump->u.label->size, executable_offset);
+
+ /* The pc+8 offset is represented by the 2 * SSIZE_OF(ins) below. */
+ diff = (sljit_sw)addr - (sljit_sw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);
+
+ if ((diff & 0x3) == 0 && diff <= (0x3fc + 2 * SSIZE_OF(ins)) && diff >= (-0x3fc + 2 * SSIZE_OF(ins))) {
+ jump->flags |= PATCH_B;
+ return 0;
+ }
+
+#if (defined SLJIT_CONFIG_ARM_V6 && SLJIT_CONFIG_ARM_V6)
+ return 0;
+#else /* !SLJIT_CONFIG_ARM_V6 */
+ return 1;
+#endif /* SLJIT_CONFIG_ARM_V6 */
+}
+
+#if (defined SLJIT_CONFIG_ARM_V7 && SLJIT_CONFIG_ARM_V7)
+
+static void reduce_code_size(struct sljit_compiler *compiler)
+{
+ struct sljit_label *label;
+ struct sljit_jump *jump;
+ struct sljit_const *const_;
+ SLJIT_NEXT_DEFINE_TYPES;
+ sljit_uw total_size;
+ sljit_uw size_reduce = 0;
+ sljit_sw diff;
+
+ label = compiler->labels;
+ jump = compiler->jumps;
+ const_ = compiler->consts;
+ SLJIT_NEXT_INIT_TYPES();
+
+ while (1) {
+ SLJIT_GET_NEXT_MIN();
+
+ if (next_min_addr == SLJIT_MAX_ADDRESS)
+ break;
+
+ if (next_min_addr == next_label_size) {
+ label->size -= size_reduce;
+
+ label = label->next;
+ next_label_size = SLJIT_GET_NEXT_SIZE(label);
+ }
+
+ if (next_min_addr == next_const_addr) {
+ const_->addr -= size_reduce;
+ const_ = const_->next;
+ next_const_addr = SLJIT_GET_NEXT_ADDRESS(const_);
+ continue;
+ }
+
+ if (next_min_addr != next_jump_addr)
+ continue;
+
+ jump->addr -= size_reduce;
+ if (!(jump->flags & JUMP_MOV_ADDR)) {
+ total_size = JUMP_MAX_SIZE - 1;
+
+ if (!(jump->flags & (SLJIT_REWRITABLE_JUMP | JUMP_ADDR))) {
+ /* Unit size: instruction. */
+ diff = (sljit_sw)jump->u.label->size - (sljit_sw)jump->addr - 2;
+
+ if (diff <= (0x01ffffff / SSIZE_OF(ins)) && diff >= (-0x02000000 / SSIZE_OF(ins)))
+ total_size = 1 - 1;
+ }
+
+ size_reduce += JUMP_MAX_SIZE - 1 - total_size;
+ } else {
+ /* Real size minus 1. Unit size: instruction. */
+ total_size = 1;
+
+ if (!(jump->flags & JUMP_ADDR)) {
+ diff = (sljit_sw)jump->u.label->size - (sljit_sw)jump->addr;
+ if (diff <= 0xff + 2 && diff >= -0xff + 2)
+ total_size = 0;
+ }
+
+ size_reduce += 1 - total_size;
+ }
+
+ jump->flags |= total_size << JUMP_SIZE_SHIFT;
+ jump = jump->next;
+ next_jump_addr = SLJIT_GET_NEXT_ADDRESS(jump);
+ }
+
+ compiler->size -= size_reduce;
+}
+
+#endif /* SLJIT_CONFIG_ARM_V7 */
+
+SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compiler, sljit_s32 options, void *exec_allocator_data)
{
struct sljit_memory_fragment *buf;
sljit_ins *code;
sljit_ins *code_ptr;
sljit_ins *buf_ptr;
sljit_ins *buf_end;
- sljit_uw size;
sljit_uw word_count;
- sljit_uw next_addr;
+ SLJIT_NEXT_DEFINE_TYPES;
sljit_sw executable_offset;
sljit_uw addr;
+ sljit_sw diff;
#if (defined SLJIT_CONFIG_ARM_V6 && SLJIT_CONFIG_ARM_V6)
sljit_uw cpool_size;
sljit_uw cpool_skip_alignment;
@@ -744,22 +837,22 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil
struct sljit_label *label;
struct sljit_jump *jump;
struct sljit_const *const_;
- struct sljit_put_label *put_label;
CHECK_ERROR_PTR();
CHECK_PTR(check_sljit_generate_code(compiler));
- reverse_buf(compiler);
/* Second code generation pass. */
#if (defined SLJIT_CONFIG_ARM_V6 && SLJIT_CONFIG_ARM_V6)
- size = compiler->size + (compiler->patches << 1);
+ compiler->size += (compiler->patches << 1);
if (compiler->cpool_fill > 0)
- size += compiler->cpool_fill + CONST_POOL_ALIGNMENT - 1;
+ compiler->size += compiler->cpool_fill + CONST_POOL_ALIGNMENT - 1;
#else /* !SLJIT_CONFIG_ARM_V6 */
- size = compiler->size;
+ reduce_code_size(compiler);
#endif /* SLJIT_CONFIG_ARM_V6 */
- code = (sljit_ins*)SLJIT_MALLOC_EXEC(size * sizeof(sljit_ins), compiler->exec_allocator_data);
+ code = (sljit_ins*)allocate_executable_memory(compiler->size * sizeof(sljit_ins), options, exec_allocator_data, &executable_offset);
PTR_FAIL_WITH_EXEC_IF(code);
+
+ reverse_buf(compiler);
buf = compiler->buf;
#if (defined SLJIT_CONFIG_ARM_V6 && SLJIT_CONFIG_ARM_V6)
@@ -773,33 +866,24 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil
code_ptr = code;
word_count = 0;
- next_addr = 1;
- executable_offset = SLJIT_EXEC_OFFSET(code);
-
label = compiler->labels;
jump = compiler->jumps;
const_ = compiler->consts;
- put_label = compiler->put_labels;
-
- if (label && label->size == 0) {
- label->addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code, executable_offset);
- label = label->next;
- }
+ SLJIT_NEXT_INIT_TYPES();
+ SLJIT_GET_NEXT_MIN();
do {
buf_ptr = (sljit_ins*)buf->memory;
buf_end = buf_ptr + (buf->used_size >> 2);
do {
- word_count++;
#if (defined SLJIT_CONFIG_ARM_V6 && SLJIT_CONFIG_ARM_V6)
if (cpool_size > 0) {
if (cpool_skip_alignment > 0) {
buf_ptr++;
cpool_skip_alignment--;
- }
- else {
+ } else {
if (SLJIT_UNLIKELY(resolve_const_pool_index(compiler, &first_patch, cpool_current_index, cpool_start_address, buf_ptr))) {
- SLJIT_FREE_EXEC(code, compiler->exec_allocator_data);
+ SLJIT_FREE_EXEC(code, exec_allocator_data);
compiler->error = SLJIT_ERR_ALLOC_FAILED;
return NULL;
}
@@ -807,59 +891,59 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil
if (++cpool_current_index >= cpool_size) {
SLJIT_ASSERT(!first_patch);
cpool_size = 0;
- if (label && label->size == word_count) {
- /* Points after the current instruction. */
- label->addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);
- label->size = (sljit_uw)(code_ptr - code);
- label = label->next;
-
- next_addr = compute_next_addr(label, jump, const_, put_label);
- }
}
}
- }
- else if ((*buf_ptr & 0xff000000) != PUSH_POOL) {
+ } else if ((*buf_ptr & 0xff000000) != PUSH_POOL) {
#endif /* SLJIT_CONFIG_ARM_V6 */
*code_ptr = *buf_ptr++;
- if (next_addr == word_count) {
+ if (next_min_addr == word_count) {
SLJIT_ASSERT(!label || label->size >= word_count);
SLJIT_ASSERT(!jump || jump->addr >= word_count);
SLJIT_ASSERT(!const_ || const_->addr >= word_count);
- SLJIT_ASSERT(!put_label || put_label->addr >= word_count);
- /* These structures are ordered by their address. */
- if (jump && jump->addr == word_count) {
-#if (defined SLJIT_CONFIG_ARM_V6 && SLJIT_CONFIG_ARM_V6)
- if (detect_jump_type(jump, code_ptr, code, executable_offset))
- code_ptr--;
- jump->addr = (sljit_uw)code_ptr;
-#else /* !SLJIT_CONFIG_ARM_V6 */
- jump->addr = (sljit_uw)(code_ptr - 2);
- if (detect_jump_type(jump, code_ptr, code, executable_offset))
- code_ptr -= 2;
-#endif /* SLJIT_CONFIG_ARM_V6 */
- jump = jump->next;
- }
- if (label && label->size == word_count) {
- /* code_ptr can be affected above. */
- label->addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr + 1, executable_offset);
- label->size = (sljit_uw)((code_ptr + 1) - code);
+ if (next_min_addr == next_label_size) {
+ label->u.addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);
+ label->size = (sljit_uw)(code_ptr - code);
label = label->next;
+ next_label_size = SLJIT_GET_NEXT_SIZE(label);
}
- if (const_ && const_->addr == word_count) {
+
+ /* These structures are ordered by their address. */
+ if (next_min_addr == next_jump_addr) {
+ if (!(jump->flags & JUMP_MOV_ADDR)) {
#if (defined SLJIT_CONFIG_ARM_V6 && SLJIT_CONFIG_ARM_V6)
- const_->addr = (sljit_uw)code_ptr;
+ if (detect_jump_type(jump, code_ptr, code, executable_offset))
+ code_ptr--;
+ jump->addr = (sljit_uw)code_ptr;
#else /* !SLJIT_CONFIG_ARM_V6 */
- const_->addr = (sljit_uw)(code_ptr - 1);
+ word_count += jump->flags >> JUMP_SIZE_SHIFT;
+ jump->addr = (sljit_uw)code_ptr;
+ if (!detect_jump_type(jump, code_ptr, code, executable_offset)) {
+ code_ptr[2] = code_ptr[0];
+ addr = ((code_ptr[0] & 0xf) << 12);
+ code_ptr[0] = MOVW | addr;
+ code_ptr[1] = MOVT | addr;
+ code_ptr += 2;
+ }
+ SLJIT_ASSERT((sljit_uw)code_ptr - jump->addr <= (jump->flags >> JUMP_SIZE_SHIFT) * sizeof(sljit_ins));
#endif /* SLJIT_CONFIG_ARM_V6 */
+ } else {
+#if (defined SLJIT_CONFIG_ARM_V7 && SLJIT_CONFIG_ARM_V7)
+ word_count += jump->flags >> JUMP_SIZE_SHIFT;
+#endif /* SLJIT_CONFIG_ARM_V7 */
+ addr = (sljit_uw)code_ptr;
+ code_ptr += mov_addr_get_length(jump, code_ptr, code, executable_offset);
+ jump->addr = addr;
+ }
+ jump = jump->next;
+ next_jump_addr = SLJIT_GET_NEXT_ADDRESS(jump);
+ } else if (next_min_addr == next_const_addr) {
+ const_->addr = (sljit_uw)code_ptr;
const_ = const_->next;
+ next_const_addr = SLJIT_GET_NEXT_ADDRESS(const_);
}
- if (put_label && put_label->addr == word_count) {
- SLJIT_ASSERT(put_label->label);
- put_label->addr = (sljit_uw)code_ptr;
- put_label = put_label->next;
- }
- next_addr = compute_next_addr(label, jump, const_, put_label);
+
+ SLJIT_GET_NEXT_MIN();
}
code_ptr++;
#if (defined SLJIT_CONFIG_ARM_V6 && SLJIT_CONFIG_ARM_V6)
@@ -879,14 +963,20 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil
last_pc_patch = code_ptr;
}
#endif /* SLJIT_CONFIG_ARM_V6 */
+ word_count++;
} while (buf_ptr < buf_end);
buf = buf->next;
} while (buf);
+ if (label && label->size == word_count) {
+ label->u.addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);
+ label->size = (sljit_uw)(code_ptr - code);
+ label = label->next;
+ }
+
SLJIT_ASSERT(!label);
SLJIT_ASSERT(!jump);
SLJIT_ASSERT(!const_);
- SLJIT_ASSERT(!put_label);
#if (defined SLJIT_CONFIG_ARM_V6 && SLJIT_CONFIG_ARM_V6)
SLJIT_ASSERT(cpool_size == 0);
@@ -901,7 +991,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil
cpool_current_index = 0;
while (buf_ptr < buf_end) {
if (SLJIT_UNLIKELY(resolve_const_pool_index(compiler, &first_patch, cpool_current_index, cpool_start_address, buf_ptr))) {
- SLJIT_FREE_EXEC(code, compiler->exec_allocator_data);
+ SLJIT_FREE_EXEC(code, exec_allocator_data);
compiler->error = SLJIT_ERR_ALLOC_FAILED;
return NULL;
}
@@ -914,43 +1004,64 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil
jump = compiler->jumps;
while (jump) {
+ addr = (jump->flags & JUMP_ADDR) ? jump->u.target : jump->u.label->u.addr;
buf_ptr = (sljit_ins*)jump->addr;
- if (jump->flags & PATCH_B) {
- addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(buf_ptr + 2, executable_offset);
- if (!(jump->flags & JUMP_ADDR)) {
- SLJIT_ASSERT(jump->flags & JUMP_LABEL);
- SLJIT_ASSERT((sljit_sw)(jump->u.label->addr - addr) <= 0x01ffffff && (sljit_sw)(jump->u.label->addr - addr) >= -0x02000000);
- *buf_ptr |= ((jump->u.label->addr - addr) >> 2) & 0x00ffffff;
- }
- else {
- SLJIT_ASSERT((sljit_sw)(jump->u.target - addr) <= 0x01ffffff && (sljit_sw)(jump->u.target - addr) >= -0x02000000);
- *buf_ptr |= ((jump->u.target - addr) >> 2) & 0x00ffffff;
- }
- }
- else if (jump->flags & SLJIT_REWRITABLE_JUMP) {
+ if (jump->flags & JUMP_MOV_ADDR) {
#if (defined SLJIT_CONFIG_ARM_V6 && SLJIT_CONFIG_ARM_V6)
- jump->addr = (sljit_uw)code_ptr;
- code_ptr[0] = (sljit_ins)buf_ptr;
- code_ptr[1] = *buf_ptr;
- inline_set_jump_addr((sljit_uw)code_ptr, executable_offset, (jump->flags & JUMP_LABEL) ? jump->u.label->addr : jump->u.target, 0);
- code_ptr += 2;
+ SLJIT_ASSERT((buf_ptr[0] & (sljit_ins)0xffff0000) == 0xe59f0000);
#else /* !SLJIT_CONFIG_ARM_V6 */
- inline_set_jump_addr((sljit_uw)buf_ptr, executable_offset, (jump->flags & JUMP_LABEL) ? jump->u.label->addr : jump->u.target, 0);
+ SLJIT_ASSERT((buf_ptr[0] & ~(sljit_ins)0xf000) == 0);
#endif /* SLJIT_CONFIG_ARM_V6 */
+
+ if (jump->flags & PATCH_B) {
+ SLJIT_ASSERT((((sljit_sw)addr - (sljit_sw)SLJIT_ADD_EXEC_OFFSET(buf_ptr + 2, executable_offset)) & 0x3) == 0);
+ diff = ((sljit_sw)addr - (sljit_sw)SLJIT_ADD_EXEC_OFFSET(buf_ptr + 2, executable_offset)) >> 2;
+
+ SLJIT_ASSERT(diff <= 0xff && diff >= -0xff);
+
+ addr = ADD;
+ if (diff < 0) {
+ diff = -diff;
+ addr = SUB;
+ }
+
+ buf_ptr[0] = addr | (buf_ptr[0] & 0xf000) | RN(TMP_PC) | (1 << 25) | (0xf << 8) | (sljit_ins)(diff & 0xff);
+ } else {
+#if (defined SLJIT_CONFIG_ARM_V6 && SLJIT_CONFIG_ARM_V6)
+ buf_ptr[((buf_ptr[0] & 0xfff) >> 2) + 2] = addr;
+#else /* !SLJIT_CONFIG_ARM_V6 */
+ buf_ptr[1] = MOVT | buf_ptr[0] | ((addr >> 12) & 0xf0000) | ((addr >> 16) & 0xfff);
+ buf_ptr[0] = MOVW | buf_ptr[0] | ((addr << 4) & 0xf0000) | (addr & 0xfff);
+#endif /* SLJIT_CONFIG_ARM_V6 */
+ }
+ } else if (jump->flags & PATCH_B) {
+ diff = (sljit_sw)addr - (sljit_sw)SLJIT_ADD_EXEC_OFFSET(buf_ptr + 2, executable_offset);
+ SLJIT_ASSERT(diff <= 0x01ffffff && diff >= -0x02000000);
+ *buf_ptr |= (diff >> 2) & 0x00ffffff;
} else {
#if (defined SLJIT_CONFIG_ARM_V6 && SLJIT_CONFIG_ARM_V6)
if (jump->flags & IS_BL)
buf_ptr--;
- if (*buf_ptr & (1 << 23))
- buf_ptr += ((*buf_ptr & 0xfff) >> 2) + 2;
- else
- buf_ptr += 1;
- *buf_ptr = (jump->flags & JUMP_LABEL) ? jump->u.label->addr : jump->u.target;
+
+ if (jump->flags & SLJIT_REWRITABLE_JUMP) {
+ jump->addr = (sljit_uw)code_ptr;
+ code_ptr[0] = (sljit_ins)buf_ptr;
+ code_ptr[1] = *buf_ptr;
+ set_jump_addr((sljit_uw)code_ptr, executable_offset, addr, 0);
+ code_ptr += 2;
+ } else {
+ if (*buf_ptr & (1 << 23))
+ buf_ptr += ((*buf_ptr & 0xfff) >> 2) + 2;
+ else
+ buf_ptr += 1;
+ *buf_ptr = addr;
+ }
#else /* !SLJIT_CONFIG_ARM_V6 */
- inline_set_jump_addr((sljit_uw)buf_ptr, executable_offset, (jump->flags & JUMP_LABEL) ? jump->u.label->addr : jump->u.target, 0);
+ set_jump_addr((sljit_uw)buf_ptr, executable_offset, addr, 0);
#endif /* SLJIT_CONFIG_ARM_V6 */
}
+
jump = jump->next;
}
@@ -967,30 +1078,14 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil
else
buf_ptr += 1;
/* Set the value again (can be a simple constant). */
- inline_set_const((sljit_uw)code_ptr, executable_offset, *buf_ptr, 0);
+ set_const_value((sljit_uw)code_ptr, executable_offset, *buf_ptr, 0);
code_ptr += 2;
const_ = const_->next;
}
#endif /* SLJIT_CONFIG_ARM_V6 */
- put_label = compiler->put_labels;
- while (put_label) {
- addr = put_label->label->addr;
- buf_ptr = (sljit_ins*)put_label->addr;
-
-#if (defined SLJIT_CONFIG_ARM_V6 && SLJIT_CONFIG_ARM_V6)
- SLJIT_ASSERT((buf_ptr[0] & 0xffff0000) == 0xe59f0000);
- buf_ptr[((buf_ptr[0] & 0xfff) >> 2) + 2] = addr;
-#else /* !SLJIT_CONFIG_ARM_V6 */
- SLJIT_ASSERT((buf_ptr[-1] & 0xfff00000) == MOVW && (buf_ptr[0] & 0xfff00000) == MOVT);
- buf_ptr[-1] |= ((addr << 4) & 0xf0000) | (addr & 0xfff);
- buf_ptr[0] |= ((addr >> 12) & 0xf0000) | ((addr >> 16) & 0xfff);
-#endif /* SLJIT_CONFIG_ARM_V6 */
- put_label = put_label->next;
- }
-
- SLJIT_ASSERT(code_ptr - code <= (sljit_s32)size);
+ SLJIT_ASSERT(code_ptr - code <= (sljit_s32)compiler->size);
compiler->error = SLJIT_ERR_COMPILED;
compiler->executable_offset = executable_offset;
@@ -1113,7 +1208,7 @@ static const sljit_ins data_transfer_insts[16] = {
/* Inverted immediate. */
#define INV_IMM 0x02
/* Source and destination is register. */
-#define MOVE_REG_CONV 0x04
+#define REGISTER_OP 0x04
/* Unused return value. */
#define UNUSED_RETURN 0x08
/* SET_FLAGS must be (1 << 20) as it is also the value of S bit (can be used for optimization). */
@@ -1498,7 +1593,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return_to(struct sljit_compiler *c
static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 flags,
sljit_uw dst, sljit_uw src1, sljit_uw src2)
{
- sljit_s32 is_masked;
+ sljit_s32 reg, is_masked;
sljit_uw shift_type;
switch (op) {
@@ -1515,7 +1610,7 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl
case SLJIT_MOV_U8:
case SLJIT_MOV_S8:
SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & ARGS_SWAPPED));
- if (flags & MOVE_REG_CONV)
+ if (flags & REGISTER_OP)
return push_inst(compiler, (op == SLJIT_MOV_U8 ? UXTB : SXTB) | RD(dst) | RM(src2));
if (dst != src2) {
@@ -1527,7 +1622,7 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl
case SLJIT_MOV_U16:
case SLJIT_MOV_S16:
SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & ARGS_SWAPPED));
- if (flags & MOVE_REG_CONV)
+ if (flags & REGISTER_OP)
return push_inst(compiler, (op == SLJIT_MOV_U16 ? UXTH : SXTH) | RD(dst) | RM(src2));
if (dst != src2) {
@@ -1543,11 +1638,11 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl
case SLJIT_CTZ:
SLJIT_ASSERT(!(flags & INV_IMM) && !(src2 & SRC2_IMM));
- SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & ARGS_SWAPPED));
+ SLJIT_ASSERT(src1 == TMP_REG1 && src2 != TMP_REG2 && !(flags & ARGS_SWAPPED));
#if (defined SLJIT_CONFIG_ARM_V6 && SLJIT_CONFIG_ARM_V6)
- FAIL_IF(push_inst(compiler, RSB | SRC2_IMM | RD(TMP_REG1) | RN(src2) | 0));
- FAIL_IF(push_inst(compiler, AND | RD(TMP_REG2) | RN(src2) | RM(TMP_REG1)));
- FAIL_IF(push_inst(compiler, CLZ | RD(dst) | RM(TMP_REG2)));
+ FAIL_IF(push_inst(compiler, RSB | SRC2_IMM | RD(TMP_REG2) | RN(src2) | 0));
+ FAIL_IF(push_inst(compiler, AND | RD(TMP_REG1) | RN(src2) | RM(TMP_REG2)));
+ FAIL_IF(push_inst(compiler, CLZ | RD(dst) | RM(TMP_REG1)));
FAIL_IF(push_inst(compiler, CMP | SET_FLAGS | SRC2_IMM | RN(dst) | 32));
return push_inst(compiler, (EOR ^ 0xf0000000) | SRC2_IMM | RD(dst) | RN(dst) | 0x1f);
#else /* !SLJIT_CONFIG_ARM_V6 */
@@ -1563,9 +1658,9 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl
case SLJIT_REV_U16:
case SLJIT_REV_S16:
- SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & ARGS_SWAPPED) && src2 != TMP_REG1 && dst != TMP_REG1);
+ SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & ARGS_SWAPPED));
FAIL_IF(push_inst(compiler, REV16 | RD(dst) | RM(src2)));
- if (dst == TMP_REG2 || (src2 == TMP_REG2 && op == SLJIT_REV_U16))
+ if (!(flags & REGISTER_OP))
return SLJIT_SUCCESS;
return push_inst(compiler, (op == SLJIT_REV_U16 ? UXTH : SXTH) | RD(dst) | RM(dst));
case SLJIT_ADD:
@@ -1601,10 +1696,11 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl
if (!(flags & SET_FLAGS))
return push_inst(compiler, MUL | RN(dst) | RM8(src2) | RM(src1));
- FAIL_IF(push_inst(compiler, SMULL | RN(TMP_REG1) | RD(dst) | RM8(src2) | RM(src1)));
+ reg = dst == TMP_REG1 ? TMP_REG2 : TMP_REG1;
+ FAIL_IF(push_inst(compiler, SMULL | RN(reg) | RD(dst) | RM8(src2) | RM(src1)));
/* cmp TMP_REG1, dst asr #31. */
- return push_inst(compiler, CMP | SET_FLAGS | RN(TMP_REG1) | RM(dst) | 0xfc0);
+ return push_inst(compiler, CMP | SET_FLAGS | RN(reg) | RM(dst) | 0xfc0);
case SLJIT_AND:
if ((flags & (UNUSED_RETURN | INV_IMM)) == UNUSED_RETURN)
@@ -1654,6 +1750,9 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl
is_masked = 0;
break;
+ case SLJIT_MULADD:
+ return push_inst(compiler, MLA | RN(dst) | RD(dst) | RM8(src2) | RM(src1));
+
default:
SLJIT_UNREACHABLE();
return SLJIT_SUCCESS;
@@ -1973,6 +2072,7 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3
sljit_s32 dst_reg;
sljit_s32 src1_reg = 0;
sljit_s32 src2_reg = 0;
+ sljit_s32 src2_tmp_reg = 0;
sljit_s32 flags = HAS_FLAGS(op) ? SET_FLAGS : 0;
sljit_s32 neg_op = 0;
sljit_u32 imm2;
@@ -1982,7 +2082,7 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3
if (flags & SET_FLAGS)
inp_flags &= ~ALLOW_DOUBLE_IMM;
- if (dst == TMP_REG2)
+ if (dst == TMP_REG1)
flags |= UNUSED_RETURN;
SLJIT_ASSERT(!(inp_flags & ALLOW_INV_IMM) || (inp_flags & ALLOW_IMM));
@@ -2068,17 +2168,6 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3
}
} while(0);
- /* Source 1. */
- if (FAST_IS_REG(src1))
- src1_reg = src1;
- else if (src1 & SLJIT_MEM) {
- FAIL_IF(emit_op_mem(compiler, inp_flags | LOAD_DATA, TMP_REG1, src1, src1w, TMP_REG1));
- src1_reg = TMP_REG1;
- } else if (!(inp_flags & ALLOW_DOUBLE_IMM) || src2_reg != 0 || op == SLJIT_SUB || op == SLJIT_SUBC) {
- FAIL_IF(load_immediate(compiler, TMP_REG1, (sljit_uw)src1w));
- src1_reg = TMP_REG1;
- }
-
/* Destination. */
dst_reg = FAST_IS_REG(dst) ? dst : TMP_REG2;
@@ -2088,21 +2177,44 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3
inp_flags &= ~SIGNED;
if (FAST_IS_REG(src2))
- return emit_op_mem(compiler, inp_flags, src2, dst, dstw, TMP_REG2);
+ return emit_op_mem(compiler, inp_flags, src2, dst, dstw, TMP_REG1);
}
if (FAST_IS_REG(src2) && dst_reg != TMP_REG2)
- flags |= MOVE_REG_CONV;
+ flags |= REGISTER_OP;
+
+ src2_tmp_reg = dst_reg;
+ } else {
+ if (op == SLJIT_REV_U16 || op == SLJIT_REV_S16) {
+ if (!(dst & SLJIT_MEM) && (!(src2 & SLJIT_MEM) || op == SLJIT_REV_S16))
+ flags |= REGISTER_OP;
+ }
+
+ src2_tmp_reg = FAST_IS_REG(src1) ? TMP_REG1 : TMP_REG2;
+ }
+
+ if (src2_reg == 0 && (src2 & SLJIT_MEM)) {
+ src2_reg = src2_tmp_reg;
+ FAIL_IF(emit_op_mem(compiler, inp_flags | LOAD_DATA, src2_reg, src2, src2w, TMP_REG1));
+ }
+
+ /* Source 1. */
+ if (FAST_IS_REG(src1))
+ src1_reg = src1;
+ else if (src1 & SLJIT_MEM) {
+ FAIL_IF(emit_op_mem(compiler, inp_flags | LOAD_DATA, TMP_REG1, src1, src1w, TMP_REG1));
+ src1_reg = TMP_REG1;
+ } else if (!(inp_flags & ALLOW_DOUBLE_IMM) || src2_reg != 0 || op == SLJIT_SUB || op == SLJIT_SUBC) {
+ FAIL_IF(load_immediate(compiler, TMP_REG1, (sljit_uw)src1w));
+ src1_reg = TMP_REG1;
}
/* Source 2. */
if (src2_reg == 0) {
- src2_reg = (op <= SLJIT_MOV_P) ? dst_reg : TMP_REG2;
+ src2_reg = src2_tmp_reg;
if (FAST_IS_REG(src2))
src2_reg = src2;
- else if (src2 & SLJIT_MEM)
- FAIL_IF(emit_op_mem(compiler, inp_flags | LOAD_DATA, src2_reg, src2, src2w, TMP_REG2));
else if (!(inp_flags & ALLOW_DOUBLE_IMM))
FAIL_IF(load_immediate(compiler, src2_reg, (sljit_uw)src2w));
else {
@@ -2122,8 +2234,8 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3
}
if (src2_reg == 0) {
- FAIL_IF(load_immediate(compiler, TMP_REG2, (sljit_uw)src2w));
- src2_reg = TMP_REG2;
+ FAIL_IF(load_immediate(compiler, src2_tmp_reg, (sljit_uw)src2w));
+ src2_reg = src2_tmp_reg;
} else {
FAIL_IF(emit_single_op(compiler, op, flags, (sljit_uw)dst_reg, (sljit_uw)src1_reg, (sljit_uw)src2_reg));
src1_reg = dst_reg;
@@ -2368,7 +2480,25 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2u(struct sljit_compiler *compil
CHECK(check_sljit_emit_op2(compiler, op, 1, 0, 0, src1, src1w, src2, src2w));
SLJIT_SKIP_CHECKS(compiler);
- return sljit_emit_op2(compiler, op, TMP_REG2, 0, src1, src1w, src2, src2w);
+ return sljit_emit_op2(compiler, op, TMP_REG1, 0, src1, src1w, src2, src2w);
+}
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2r(struct sljit_compiler *compiler, sljit_s32 op,
+ sljit_s32 dst_reg,
+ sljit_s32 src1, sljit_sw src1w,
+ sljit_s32 src2, sljit_sw src2w)
+{
+ CHECK_ERROR();
+ CHECK(check_sljit_emit_op2r(compiler, op, dst_reg, src1, src1w, src2, src2w));
+ ADJUST_LOCAL_OFFSET(src1, src1w);
+ ADJUST_LOCAL_OFFSET(src2, src2w);
+
+ switch (GET_OPCODE(op)) {
+ case SLJIT_MULADD:
+ return emit_op(compiler, op, 0, dst_reg, 0, src1, src1w, src2, src2w);
+ }
+
+ return SLJIT_SUCCESS;
}
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_shift_into(struct sljit_compiler *compiler, sljit_s32 op,
@@ -2533,8 +2663,8 @@ static sljit_s32 emit_fop_mem(struct sljit_compiler *compiler, sljit_s32 flags,
arg &= ~SLJIT_MEM;
if (SLJIT_UNLIKELY(arg & OFFS_REG_MASK)) {
- FAIL_IF(push_inst(compiler, ADD | RD(TMP_REG2) | RN(arg & REG_MASK) | RM(OFFS_REG(arg)) | (((sljit_ins)argw & 0x3) << 7)));
- arg = TMP_REG2;
+ FAIL_IF(push_inst(compiler, ADD | RD(TMP_REG1) | RN(arg & REG_MASK) | RM(OFFS_REG(arg)) | (((sljit_ins)argw & 0x3) << 7)));
+ arg = TMP_REG1;
argw = 0;
}
@@ -2547,25 +2677,25 @@ static sljit_s32 emit_fop_mem(struct sljit_compiler *compiler, sljit_s32 flags,
imm = get_imm((sljit_uw)argw & ~(sljit_uw)0x3fc);
if (imm) {
- FAIL_IF(push_inst(compiler, ADD | RD(TMP_REG2) | RN(arg & REG_MASK) | imm));
- return push_inst(compiler, EMIT_FPU_DATA_TRANSFER(inst, 1, TMP_REG2, reg, (argw & 0x3fc) >> 2));
+ FAIL_IF(push_inst(compiler, ADD | RD(TMP_REG1) | RN(arg & REG_MASK) | imm));
+ return push_inst(compiler, EMIT_FPU_DATA_TRANSFER(inst, 1, TMP_REG1, reg, (argw & 0x3fc) >> 2));
}
imm = get_imm((sljit_uw)-argw & ~(sljit_uw)0x3fc);
if (imm) {
argw = -argw;
- FAIL_IF(push_inst(compiler, SUB | RD(TMP_REG2) | RN(arg & REG_MASK) | imm));
- return push_inst(compiler, EMIT_FPU_DATA_TRANSFER(inst, 0, TMP_REG2, reg, (argw & 0x3fc) >> 2));
+ FAIL_IF(push_inst(compiler, SUB | RD(TMP_REG1) | RN(arg & REG_MASK) | imm));
+ return push_inst(compiler, EMIT_FPU_DATA_TRANSFER(inst, 0, TMP_REG1, reg, (argw & 0x3fc) >> 2));
}
}
if (arg) {
- FAIL_IF(load_immediate(compiler, TMP_REG2, (sljit_uw)argw));
- FAIL_IF(push_inst(compiler, ADD | RD(TMP_REG2) | RN(arg & REG_MASK) | RM(TMP_REG2)));
+ FAIL_IF(load_immediate(compiler, TMP_REG1, (sljit_uw)argw));
+ FAIL_IF(push_inst(compiler, ADD | RD(TMP_REG1) | RN(arg & REG_MASK) | RM(TMP_REG1)));
}
else
- FAIL_IF(load_immediate(compiler, TMP_REG2, (sljit_uw)argw));
+ FAIL_IF(load_immediate(compiler, TMP_REG1, (sljit_uw)argw));
- return push_inst(compiler, EMIT_FPU_DATA_TRANSFER(inst, 1, TMP_REG2, reg, 0));
+ return push_inst(compiler, EMIT_FPU_DATA_TRANSFER(inst, 1, TMP_REG1, reg, 0));
}
static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_sw_from_f64(struct sljit_compiler *compiler, sljit_s32 op,
@@ -2675,7 +2805,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compil
switch (GET_OPCODE(op)) {
case SLJIT_MOV_F64:
if (src != dst_r) {
- if (dst_r != TMP_FREG1)
+ if (!(dst & SLJIT_MEM))
FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VMOV_F32, op & SLJIT_32, dst_r, src, 0)));
else
dst_r = src;
@@ -2745,7 +2875,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop2(struct sljit_compiler *compil
return push_inst(compiler, EMIT_FPU_OPERATION((VNEG_F32 & ~COND_MASK) | 0xb0000000, op & SLJIT_32, dst_r, dst_r, 0));
}
- if (dst_r == TMP_FREG1)
+ if (dst_r != dst)
FAIL_IF(emit_fop_mem(compiler, (op & SLJIT_32), TMP_FREG1, dst, dstw));
return SLJIT_SUCCESS;
@@ -2974,27 +3104,25 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile
#if (defined SLJIT_CONFIG_ARM_V6 && SLJIT_CONFIG_ARM_V6)
if (type >= SLJIT_FAST_CALL)
PTR_FAIL_IF(prepare_blx(compiler));
+
+ jump->addr = compiler->size;
PTR_FAIL_IF(push_inst_with_unique_literal(compiler, ((EMIT_DATA_TRANSFER(WORD_SIZE | LOAD_DATA, 1,
type <= SLJIT_JUMP ? TMP_PC : TMP_REG1, TMP_PC, 0)) & ~COND_MASK) | get_cc(compiler, type), 0));
- if (jump->flags & SLJIT_REWRITABLE_JUMP) {
- jump->addr = compiler->size;
+ if (jump->flags & SLJIT_REWRITABLE_JUMP)
compiler->patches++;
- }
if (type >= SLJIT_FAST_CALL) {
jump->flags |= IS_BL;
+ jump->addr = compiler->size;
PTR_FAIL_IF(emit_blx(compiler));
}
-
- if (!(jump->flags & SLJIT_REWRITABLE_JUMP))
- jump->addr = compiler->size;
#else /* !SLJIT_CONFIG_ARM_V6 */
+ jump->addr = compiler->size;
if (type >= SLJIT_FAST_CALL)
jump->flags |= IS_BL;
- PTR_FAIL_IF(emit_imm(compiler, TMP_REG1, 0));
PTR_FAIL_IF(push_inst(compiler, (((type <= SLJIT_JUMP ? BX : BLX) | RM(TMP_REG1)) & ~COND_MASK) | get_cc(compiler, type)));
- jump->addr = compiler->size;
+ compiler->size += JUMP_MAX_SIZE - 1;
#endif /* SLJIT_CONFIG_ARM_V6 */
return jump;
}
@@ -3264,14 +3392,17 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_ijump(struct sljit_compiler *compi
#if (defined SLJIT_CONFIG_ARM_V6 && SLJIT_CONFIG_ARM_V6)
if (type >= SLJIT_FAST_CALL)
FAIL_IF(prepare_blx(compiler));
+ jump->addr = compiler->size;
FAIL_IF(push_inst_with_unique_literal(compiler, EMIT_DATA_TRANSFER(WORD_SIZE | LOAD_DATA, 1, type <= SLJIT_JUMP ? TMP_PC : TMP_REG1, TMP_PC, 0), 0));
- if (type >= SLJIT_FAST_CALL)
+ if (type >= SLJIT_FAST_CALL) {
+ jump->addr = compiler->size;
FAIL_IF(emit_blx(compiler));
+ }
#else /* !SLJIT_CONFIG_ARM_V6 */
- FAIL_IF(emit_imm(compiler, TMP_REG1, 0));
+ jump->addr = compiler->size;
FAIL_IF(push_inst(compiler, (type <= SLJIT_JUMP ? BX : BLX) | RM(TMP_REG1)));
+ compiler->size += JUMP_MAX_SIZE - 1;
#endif /* SLJIT_CONFIG_ARM_V6 */
- jump->addr = compiler->size;
return SLJIT_SUCCESS;
}
@@ -3425,7 +3556,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_select(struct sljit_compiler *comp
}
if (src1 & SLJIT_MEM) {
- FAIL_IF(emit_op_mem(compiler, WORD_SIZE | LOAD_DATA, (src2_reg != dst_reg) ? dst_reg : TMP_REG1, src1, src1w, TMP_REG2));
+ FAIL_IF(emit_op_mem(compiler, WORD_SIZE | LOAD_DATA, (src2_reg != dst_reg) ? dst_reg : TMP_REG1, src1, src1w, TMP_REG1));
if (src2_reg != dst_reg) {
src1 = src2_reg;
@@ -3488,8 +3619,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fselect(struct sljit_compiler *com
}
if (src1 & SLJIT_MEM) {
- FAIL_IF(emit_fop_mem(compiler, (type & SLJIT_32) | FPU_LOAD, TMP_FREG1, src1, src1w));
- src1 = TMP_FREG1;
+ FAIL_IF(emit_fop_mem(compiler, (type & SLJIT_32) | FPU_LOAD, TMP_FREG2, src1, src1w));
+ src1 = TMP_FREG2;
}
cc = get_cc(compiler, type & ~SLJIT_32);
@@ -4444,6 +4575,10 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compi
CHECK_PTR(check_sljit_emit_const(compiler, dst, dstw, init_value));
ADJUST_LOCAL_OFFSET(dst, dstw);
+ const_ = (struct sljit_const*)ensure_abuf(compiler, sizeof(struct sljit_const));
+ PTR_FAIL_IF(!const_);
+ set_const(const_, compiler);
+
dst_r = FAST_IS_REG(dst) ? dst : TMP_REG2;
#if (defined SLJIT_CONFIG_ARM_V6 && SLJIT_CONFIG_ARM_V6)
@@ -4454,22 +4589,18 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compi
PTR_FAIL_IF(emit_imm(compiler, dst_r, init_value));
#endif /* SLJIT_CONFIG_ARM_V6 */
- const_ = (struct sljit_const*)ensure_abuf(compiler, sizeof(struct sljit_const));
- PTR_FAIL_IF(!const_);
- set_const(const_, compiler);
-
if (dst & SLJIT_MEM)
PTR_FAIL_IF(emit_op_mem(compiler, WORD_SIZE, TMP_REG2, dst, dstw, TMP_REG1));
return const_;
}
-SLJIT_API_FUNC_ATTRIBUTE struct sljit_put_label* sljit_emit_put_label(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw dstw)
+SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_mov_addr(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw dstw)
{
- struct sljit_put_label *put_label;
+ struct sljit_jump *jump;
sljit_s32 dst_r;
CHECK_ERROR_PTR();
- CHECK_PTR(check_sljit_emit_put_label(compiler, dst, dstw));
+ CHECK_PTR(check_sljit_emit_mov_addr(compiler, dst, dstw));
ADJUST_LOCAL_OFFSET(dst, dstw);
dst_r = FAST_IS_REG(dst) ? dst : TMP_REG2;
@@ -4478,24 +4609,28 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_put_label* sljit_emit_put_label(struct slj
PTR_FAIL_IF(push_inst_with_unique_literal(compiler, EMIT_DATA_TRANSFER(WORD_SIZE | LOAD_DATA, 1, dst_r, TMP_PC, 0), 0));
compiler->patches++;
#else /* !SLJIT_CONFIG_ARM_V6 */
- PTR_FAIL_IF(emit_imm(compiler, dst_r, 0));
+ PTR_FAIL_IF(push_inst(compiler, RD(dst_r)));
#endif /* SLJIT_CONFIG_ARM_V6 */
- put_label = (struct sljit_put_label*)ensure_abuf(compiler, sizeof(struct sljit_put_label));
- PTR_FAIL_IF(!put_label);
- set_put_label(put_label, compiler, 0);
+ jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump));
+ PTR_FAIL_IF(!jump);
+ set_mov_addr(jump, compiler, 1);
+
+#if (defined SLJIT_CONFIG_ARM_V7 && SLJIT_CONFIG_ARM_V7)
+ compiler->size += 1;
+#endif /* SLJIT_CONFIG_ARM_V7 */
if (dst & SLJIT_MEM)
PTR_FAIL_IF(emit_op_mem(compiler, WORD_SIZE, TMP_REG2, dst, dstw, TMP_REG1));
- return put_label;
+ return jump;
}
SLJIT_API_FUNC_ATTRIBUTE void sljit_set_jump_addr(sljit_uw addr, sljit_uw new_target, sljit_sw executable_offset)
{
- inline_set_jump_addr(addr, executable_offset, new_target, 1);
+ set_jump_addr(addr, executable_offset, new_target, 1);
}
SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_sw new_constant, sljit_sw executable_offset)
{
- inline_set_const(addr, executable_offset, (sljit_uw)new_constant, 1);
+ set_const_value(addr, executable_offset, (sljit_uw)new_constant, 1);
}
diff --git a/src/3rdparty/pcre2/src/sljit/sljitNativeARM_64.c b/src/3rdparty/pcre2/src/sljit/sljitNativeARM_64.c
index b268582f42..5331ebdf42 100644
--- a/src/3rdparty/pcre2/src/sljit/sljitNativeARM_64.c
+++ b/src/3rdparty/pcre2/src/sljit/sljitNativeARM_64.c
@@ -71,6 +71,8 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = {
#define ADD 0x8b000000
#define ADDE 0x8b200000
#define ADDI 0x91000000
+#define ADR 0x10000000
+#define ADRP 0x90000000
#define AND 0x8a000000
#define ANDI 0x92000000
#define AND_v 0x0e201c00
@@ -202,77 +204,263 @@ static SLJIT_INLINE sljit_s32 emit_imm64_const(struct sljit_compiler *compiler,
return push_inst(compiler, MOVK | RD(dst) | ((sljit_ins)(imm >> 48) << 5) | (3 << 21));
}
-static SLJIT_INLINE sljit_sw detect_jump_type(struct sljit_jump *jump, sljit_ins *code_ptr, sljit_ins *code, sljit_sw executable_offset)
+static SLJIT_INLINE sljit_ins* detect_jump_type(struct sljit_jump *jump, sljit_ins *code_ptr, sljit_ins *code, sljit_sw executable_offset)
{
sljit_sw diff;
sljit_uw target_addr;
- if (jump->flags & SLJIT_REWRITABLE_JUMP) {
- jump->flags |= PATCH_ABS64;
- return 0;
- }
+ if (jump->flags & SLJIT_REWRITABLE_JUMP)
+ goto exit;
if (jump->flags & JUMP_ADDR)
target_addr = jump->u.target;
else {
- SLJIT_ASSERT(jump->flags & JUMP_LABEL);
+ SLJIT_ASSERT(jump->u.label != NULL);
target_addr = (sljit_uw)(code + jump->u.label->size) + (sljit_uw)executable_offset;
}
- diff = (sljit_sw)target_addr - (sljit_sw)(code_ptr - 4) - executable_offset;
+ diff = (sljit_sw)target_addr - (sljit_sw)code_ptr - executable_offset;
if (jump->flags & IS_COND) {
diff += SSIZE_OF(ins);
if (diff <= 0xfffff && diff >= -0x100000) {
- code_ptr[-5] ^= (jump->flags & IS_CBZ) ? (0x1 << 24) : 0x1;
- jump->addr -= sizeof(sljit_ins);
+ *(--code_ptr) ^= (jump->flags & IS_CBZ) ? (0x1 << 24) : 0x1;
jump->flags |= PATCH_COND;
- return 5;
+ jump->addr -= sizeof(sljit_ins);
+ return code_ptr;
}
diff -= SSIZE_OF(ins);
}
if (diff <= 0x7ffffff && diff >= -0x8000000) {
+ if (jump->flags & IS_COND)
+ code_ptr[-1] -= (4 << 5);
jump->flags |= PATCH_B;
- return 4;
+ return code_ptr;
}
if (target_addr < 0x100000000l) {
if (jump->flags & IS_COND)
- code_ptr[-5] -= (2 << 5);
- code_ptr[-2] = code_ptr[0];
- return 2;
+ code_ptr[-1] -= (2 << 5);
+ code_ptr[2] = code_ptr[0];
+ return code_ptr + 2;
+ }
+
+ if (diff <= 0xfffff000l && diff >= -0x100000000l) {
+ if (jump->flags & IS_COND)
+ code_ptr[-1] -= (2 << 5);
+ jump->flags |= PATCH_B32;
+ code_ptr[2] = code_ptr[0];
+ return code_ptr + 2;
}
if (target_addr < 0x1000000000000l) {
if (jump->flags & IS_COND)
- code_ptr[-5] -= (1 << 5);
+ code_ptr[-1] -= (1 << 5);
jump->flags |= PATCH_ABS48;
- code_ptr[-1] = code_ptr[0];
- return 1;
+ code_ptr[3] = code_ptr[0];
+ return code_ptr + 3;
}
+exit:
jump->flags |= PATCH_ABS64;
- return 0;
+ code_ptr[4] = code_ptr[0];
+ return code_ptr + 4;
}
-static SLJIT_INLINE sljit_sw put_label_get_length(struct sljit_put_label *put_label, sljit_uw max_label)
+static SLJIT_INLINE sljit_sw mov_addr_get_length(struct sljit_jump *jump, sljit_ins *code_ptr, sljit_ins *code, sljit_sw executable_offset)
{
- if (max_label < 0x100000000l) {
- put_label->flags = 0;
- return 2;
+ sljit_uw addr;
+ sljit_sw diff;
+ SLJIT_UNUSED_ARG(executable_offset);
+
+ SLJIT_ASSERT(jump->flags < ((sljit_uw)4 << JUMP_SIZE_SHIFT));
+ if (jump->flags & JUMP_ADDR)
+ addr = jump->u.target;
+ else
+ addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code + jump->u.label->size, executable_offset);
+
+ diff = (sljit_sw)addr - (sljit_sw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);
+
+ if (diff <= 0xfffff && diff >= -0x100000) {
+ jump->flags |= PATCH_B;
+ return 0;
}
- if (max_label < 0x1000000000000l) {
- put_label->flags = 1;
+ if (diff <= 0xfffff000l && diff >= -0x100000000l) {
+ SLJIT_ASSERT(jump->flags >= ((sljit_uw)1 << JUMP_SIZE_SHIFT));
+ jump->flags |= PATCH_B32;
return 1;
}
- put_label->flags = 2;
- return 0;
+ if (addr < 0x100000000l) {
+ SLJIT_ASSERT(jump->flags >= ((sljit_uw)1 << JUMP_SIZE_SHIFT));
+ return 1;
+ }
+
+ if (addr < 0x1000000000000l) {
+ SLJIT_ASSERT(jump->flags >= ((sljit_uw)2 << JUMP_SIZE_SHIFT));
+ jump->flags |= PATCH_ABS48;
+ return 2;
+ }
+
+ SLJIT_ASSERT(jump->flags >= ((sljit_uw)3 << JUMP_SIZE_SHIFT));
+ jump->flags |= PATCH_ABS64;
+ return 3;
+}
+
+static SLJIT_INLINE void generate_jump_or_mov_addr(struct sljit_jump *jump, sljit_sw executable_offset)
+{
+ sljit_sw addr = (sljit_sw)((jump->flags & JUMP_ADDR) ? jump->u.target : jump->u.label->u.addr);
+ sljit_ins* buf_ptr = (sljit_ins*)jump->addr;
+ sljit_u32 dst;
+ SLJIT_UNUSED_ARG(executable_offset);
+
+ if (!(jump->flags & JUMP_MOV_ADDR)) {
+ if (jump->flags & PATCH_COND) {
+ addr = (addr - (sljit_sw)SLJIT_ADD_EXEC_OFFSET(buf_ptr, executable_offset)) >> 2;
+ SLJIT_ASSERT(addr <= 0x3ffff && addr >= -0x40000);
+ buf_ptr[0] = (buf_ptr[0] & ~(sljit_ins)0xffffe0) | (sljit_ins)((addr & 0x7ffff) << 5);
+ return;
+ }
+
+ if (jump->flags & PATCH_B) {
+ addr = (addr - (sljit_sw)SLJIT_ADD_EXEC_OFFSET(buf_ptr, executable_offset)) >> 2;
+ SLJIT_ASSERT(addr <= 0x1ffffff && addr >= -0x2000000);
+ buf_ptr[0] = ((jump->flags & IS_BL) ? BL : B) | (sljit_ins)(addr & 0x3ffffff);
+ return;
+ }
+
+ dst = (buf_ptr[0] >> 5) & 0x1f;
+
+ if (jump->flags & PATCH_B32) {
+ addr -= (sljit_sw)SLJIT_ADD_EXEC_OFFSET(buf_ptr, executable_offset) & ~(sljit_sw)0xfff;
+ SLJIT_ASSERT(addr <= 0xfffff000l && addr >= -0x100000000l);
+ buf_ptr[0] = ADRP | (((sljit_ins)(addr >> 12) & 0x3) << 29) | (((sljit_ins)(addr >> 14) & 0x7ffff) << 5) | dst;
+ buf_ptr[1] = ADDI | dst | (dst << 5) | ((sljit_ins)(addr & 0xfff) << 10);
+ return;
+ }
+ } else {
+ dst = *buf_ptr;
+
+ if (jump->flags & PATCH_B) {
+ addr -= (sljit_sw)SLJIT_ADD_EXEC_OFFSET(buf_ptr, executable_offset);
+ SLJIT_ASSERT(addr <= 0xfffff && addr >= -0x100000);
+ buf_ptr[0] = ADR | (((sljit_ins)addr & 0x3) << 29) | (((sljit_ins)(addr >> 2) & 0x7ffff) << 5) | dst;
+ return;
+ }
+
+ if (jump->flags & PATCH_B32) {
+ addr -= ((sljit_sw)SLJIT_ADD_EXEC_OFFSET(buf_ptr, executable_offset)) & ~(sljit_sw)0xfff;
+ SLJIT_ASSERT(addr <= 0xffffffffl && addr >= -0x100000000l);
+ buf_ptr[0] = ADRP | (((sljit_ins)(addr >> 12) & 0x3) << 29) | (((sljit_ins)(addr >> 14) & 0x7ffff) << 5) | dst;
+ buf_ptr[1] = ADDI | dst | (dst << 5) | ((sljit_ins)(addr & 0xfff) << 10);
+ return;
+ }
+ }
+
+ SLJIT_ASSERT((jump->flags & (PATCH_ABS48 | PATCH_ABS64)) || (sljit_uw)addr <= (sljit_uw)0xffffffff);
+ SLJIT_ASSERT((jump->flags & PATCH_ABS64) || (sljit_uw)addr <= (sljit_uw)0xffffffffffff);
+
+ buf_ptr[0] = MOVZ | (((sljit_ins)addr & 0xffff) << 5) | dst;
+ buf_ptr[1] = MOVK | (((sljit_ins)(addr >> 16) & 0xffff) << 5) | (1 << 21) | dst;
+ if (jump->flags & (PATCH_ABS48 | PATCH_ABS64))
+ buf_ptr[2] = MOVK | (((sljit_ins)(addr >> 32) & 0xffff) << 5) | (2 << 21) | dst;
+
+ if (jump->flags & PATCH_ABS64)
+ buf_ptr[3] = MOVK | ((sljit_ins)((sljit_uw)addr >> 48) << 5) | (3 << 21) | dst;
+}
+
+static void reduce_code_size(struct sljit_compiler *compiler)
+{
+ struct sljit_label *label;
+ struct sljit_jump *jump;
+ struct sljit_const *const_;
+ SLJIT_NEXT_DEFINE_TYPES;
+ sljit_uw total_size;
+ sljit_uw size_reduce = 0;
+ sljit_sw diff;
+
+ label = compiler->labels;
+ jump = compiler->jumps;
+ const_ = compiler->consts;
+ SLJIT_NEXT_INIT_TYPES();
+
+ while (1) {
+ SLJIT_GET_NEXT_MIN();
+
+ if (next_min_addr == SLJIT_MAX_ADDRESS)
+ break;
+
+ if (next_min_addr == next_label_size) {
+ label->size -= size_reduce;
+
+ label = label->next;
+ next_label_size = SLJIT_GET_NEXT_SIZE(label);
+ }
+
+ if (next_min_addr == next_const_addr) {
+ const_->addr -= size_reduce;
+ const_ = const_->next;
+ next_const_addr = SLJIT_GET_NEXT_ADDRESS(const_);
+ continue;
+ }
+
+ if (next_min_addr != next_jump_addr)
+ continue;
+
+ jump->addr -= size_reduce;
+ if (!(jump->flags & JUMP_MOV_ADDR)) {
+ total_size = JUMP_MAX_SIZE;
+
+ if (!(jump->flags & SLJIT_REWRITABLE_JUMP)) {
+ if (jump->flags & JUMP_ADDR) {
+ if (jump->u.target < 0x100000000l)
+ total_size = 3;
+ else if (jump->u.target < 0x1000000000000l)
+ total_size = 4;
+ } else {
+ /* Unit size: instruction. */
+ diff = (sljit_sw)jump->u.label->size - (sljit_sw)jump->addr;
+
+ if ((jump->flags & IS_COND) && (diff + 1) <= (0xfffff / SSIZE_OF(ins)) && (diff + 1) >= (-0x100000 / SSIZE_OF(ins)))
+ total_size = 0;
+ else if (diff <= (0x7ffffff / SSIZE_OF(ins)) && diff >= (-0x8000000 / SSIZE_OF(ins)))
+ total_size = 1;
+ else if (diff <= (0xfffff000l / SSIZE_OF(ins)) && diff >= (-0x100000000l / SSIZE_OF(ins)))
+ total_size = 3;
+ }
+ }
+
+ size_reduce += JUMP_MAX_SIZE - total_size;
+ } else {
+ /* Real size minus 1. Unit size: instruction. */
+ total_size = 3;
+
+ if (!(jump->flags & JUMP_ADDR)) {
+ diff = (sljit_sw)jump->u.label->size - (sljit_sw)jump->addr;
+
+ if (diff <= (0xfffff / SSIZE_OF(ins)) && diff >= (-0x100000 / SSIZE_OF(ins)))
+ total_size = 0;
+ else if (diff <= (0xfffff000l / SSIZE_OF(ins)) && diff >= (-0x100000000l / SSIZE_OF(ins)))
+ total_size = 1;
+ } else if (jump->u.target < 0x100000000l)
+ total_size = 1;
+ else if (jump->u.target < 0x1000000000000l)
+ total_size = 2;
+
+ size_reduce += 3 - total_size;
+ }
+
+ jump->flags |= total_size << JUMP_SIZE_SHIFT;
+ jump = jump->next;
+ next_jump_addr = SLJIT_GET_NEXT_ADDRESS(jump);
+ }
+
+ compiler->size -= size_reduce;
}
-SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compiler)
+SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compiler, sljit_s32 options, void *exec_allocator_data)
{
struct sljit_memory_fragment *buf;
sljit_ins *code;
@@ -280,67 +468,73 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil
sljit_ins *buf_ptr;
sljit_ins *buf_end;
sljit_uw word_count;
- sljit_uw next_addr;
+ SLJIT_NEXT_DEFINE_TYPES;
sljit_sw executable_offset;
sljit_sw addr;
- sljit_u32 dst;
struct sljit_label *label;
struct sljit_jump *jump;
struct sljit_const *const_;
- struct sljit_put_label *put_label;
CHECK_ERROR_PTR();
CHECK_PTR(check_sljit_generate_code(compiler));
- reverse_buf(compiler);
- code = (sljit_ins*)SLJIT_MALLOC_EXEC(compiler->size * sizeof(sljit_ins), compiler->exec_allocator_data);
+ reduce_code_size(compiler);
+
+ code = (sljit_ins*)allocate_executable_memory(compiler->size * sizeof(sljit_ins), options, exec_allocator_data, &executable_offset);
PTR_FAIL_WITH_EXEC_IF(code);
+
+ reverse_buf(compiler);
buf = compiler->buf;
code_ptr = code;
word_count = 0;
- next_addr = 0;
- executable_offset = SLJIT_EXEC_OFFSET(code);
-
label = compiler->labels;
jump = compiler->jumps;
const_ = compiler->consts;
- put_label = compiler->put_labels;
+ SLJIT_NEXT_INIT_TYPES();
+ SLJIT_GET_NEXT_MIN();
do {
buf_ptr = (sljit_ins*)buf->memory;
buf_end = buf_ptr + (buf->used_size >> 2);
do {
*code_ptr = *buf_ptr++;
- if (next_addr == word_count) {
+ if (next_min_addr == word_count) {
SLJIT_ASSERT(!label || label->size >= word_count);
SLJIT_ASSERT(!jump || jump->addr >= word_count);
SLJIT_ASSERT(!const_ || const_->addr >= word_count);
- SLJIT_ASSERT(!put_label || put_label->addr >= word_count);
/* These structures are ordered by their address. */
- if (label && label->size == word_count) {
- label->addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);
+ if (next_min_addr == next_label_size) {
+ label->u.addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);
label->size = (sljit_uw)(code_ptr - code);
label = label->next;
+ next_label_size = SLJIT_GET_NEXT_SIZE(label);
}
- if (jump && jump->addr == word_count) {
- jump->addr = (sljit_uw)(code_ptr - 4);
- code_ptr -= detect_jump_type(jump, code_ptr, code, executable_offset);
- jump = jump->next;
- }
- if (const_ && const_->addr == word_count) {
+
+ if (next_min_addr == next_jump_addr) {
+ if (!(jump->flags & JUMP_MOV_ADDR)) {
+ word_count = word_count - 1 + (jump->flags >> JUMP_SIZE_SHIFT);
+ jump->addr = (sljit_uw)code_ptr;
+ code_ptr = detect_jump_type(jump, code_ptr, code, executable_offset);
+ SLJIT_ASSERT((jump->flags & PATCH_COND) || ((sljit_uw)code_ptr - jump->addr < (jump->flags >> JUMP_SIZE_SHIFT) * sizeof(sljit_ins)));
+ } else {
+ word_count += jump->flags >> JUMP_SIZE_SHIFT;
+ addr = (sljit_sw)code_ptr;
+ code_ptr += mov_addr_get_length(jump, code_ptr, code, executable_offset);
+ jump->addr = (sljit_uw)addr;
+ }
+
+ jump = jump->next;
+ next_jump_addr = SLJIT_GET_NEXT_ADDRESS(jump);
+ } else if (next_min_addr == next_const_addr) {
const_->addr = (sljit_uw)code_ptr;
const_ = const_->next;
+ next_const_addr = SLJIT_GET_NEXT_ADDRESS(const_);
}
- if (put_label && put_label->addr == word_count) {
- SLJIT_ASSERT(put_label->label);
- put_label->addr = (sljit_uw)(code_ptr - 3);
- code_ptr -= put_label_get_length(put_label, (sljit_uw)(SLJIT_ADD_EXEC_OFFSET(code, executable_offset) + put_label->label->size));
- put_label = put_label->next;
- }
- next_addr = compute_next_addr(label, jump, const_, put_label);
+
+ SLJIT_GET_NEXT_MIN();
}
code_ptr++;
word_count++;
@@ -350,7 +544,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil
} while (buf);
if (label && label->size == word_count) {
- label->addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);
+ label->u.addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);
label->size = (sljit_uw)(code_ptr - code);
label = label->next;
}
@@ -358,61 +552,14 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil
SLJIT_ASSERT(!label);
SLJIT_ASSERT(!jump);
SLJIT_ASSERT(!const_);
- SLJIT_ASSERT(!put_label);
SLJIT_ASSERT(code_ptr - code <= (sljit_sw)compiler->size);
jump = compiler->jumps;
while (jump) {
- do {
- addr = (sljit_sw)((jump->flags & JUMP_LABEL) ? jump->u.label->addr : jump->u.target);
- buf_ptr = (sljit_ins *)jump->addr;
-
- if (jump->flags & PATCH_B) {
- addr = (addr - (sljit_sw)SLJIT_ADD_EXEC_OFFSET(buf_ptr, executable_offset)) >> 2;
- SLJIT_ASSERT(addr <= 0x1ffffff && addr >= -0x2000000);
- buf_ptr[0] = ((jump->flags & IS_BL) ? BL : B) | (sljit_ins)(addr & 0x3ffffff);
- if (jump->flags & IS_COND)
- buf_ptr[-1] -= (4 << 5);
- break;
- }
- if (jump->flags & PATCH_COND) {
- addr = (addr - (sljit_sw)SLJIT_ADD_EXEC_OFFSET(buf_ptr, executable_offset)) >> 2;
- SLJIT_ASSERT(addr <= 0x3ffff && addr >= -0x40000);
- buf_ptr[0] = (buf_ptr[0] & ~(sljit_ins)0xffffe0) | (sljit_ins)((addr & 0x7ffff) << 5);
- break;
- }
-
- SLJIT_ASSERT((jump->flags & (PATCH_ABS48 | PATCH_ABS64)) || (sljit_uw)addr <= (sljit_uw)0xffffffff);
- SLJIT_ASSERT((jump->flags & PATCH_ABS64) || (sljit_uw)addr <= (sljit_uw)0xffffffffffff);
-
- dst = buf_ptr[0] & 0x1f;
- buf_ptr[0] = MOVZ | dst | (((sljit_ins)addr & 0xffff) << 5);
- buf_ptr[1] = MOVK | dst | (((sljit_ins)(addr >> 16) & 0xffff) << 5) | (1 << 21);
- if (jump->flags & (PATCH_ABS48 | PATCH_ABS64))
- buf_ptr[2] = MOVK | dst | (((sljit_ins)(addr >> 32) & 0xffff) << 5) | (2 << 21);
- if (jump->flags & PATCH_ABS64)
- buf_ptr[3] = MOVK | dst | ((sljit_ins)(addr >> 48) << 5) | (3 << 21);
- } while (0);
+ generate_jump_or_mov_addr(jump, executable_offset);
jump = jump->next;
}
- put_label = compiler->put_labels;
- while (put_label) {
- addr = (sljit_sw)put_label->label->addr;
- buf_ptr = (sljit_ins*)put_label->addr;
-
- buf_ptr[0] |= ((sljit_ins)addr & 0xffff) << 5;
- buf_ptr[1] |= ((sljit_ins)(addr >> 16) & 0xffff) << 5;
-
- if (put_label->flags >= 1)
- buf_ptr[2] |= ((sljit_ins)(addr >> 32) & 0xffff) << 5;
-
- if (put_label->flags >= 2)
- buf_ptr[3] |= (sljit_ins)(addr >> 48) << 5;
-
- put_label = put_label->next;
- }
-
compiler->error = SLJIT_ERR_COMPILED;
compiler->executable_offset = executable_offset;
compiler->executable_size = (sljit_uw)(code_ptr - code) * sizeof(sljit_ins);
@@ -693,7 +840,6 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s
imm = (flags & ARG2_IMM) ? arg2 : arg1;
switch (op) {
- case SLJIT_MUL:
case SLJIT_CLZ:
case SLJIT_CTZ:
case SLJIT_REV:
@@ -703,6 +849,8 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s
case SLJIT_REV_S32:
case SLJIT_ADDC:
case SLJIT_SUBC:
+ case SLJIT_MUL:
+ case SLJIT_MULADD:
/* No form with immediate operand (except imm 0, which
is represented by a ZERO register). */
break;
@@ -957,6 +1105,9 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s
/* fallthrough */
case SLJIT_ROTR:
return push_inst(compiler, (RORV ^ inv_bits) | RD(dst) | RN(arg1) | RM(arg2));
+ case SLJIT_MULADD:
+ compiler->status_flags_state = 0;
+ return push_inst(compiler, (MADD ^ inv_bits) | RD(dst) | RN(arg1) | RM(arg2) | RT2(dst));
default:
SLJIT_UNREACHABLE();
return SLJIT_SUCCESS;
@@ -1031,14 +1182,20 @@ static sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit_s32 flags, s
if (argw <= 0xff && argw >= -0x100)
return push_inst(compiler, STURBI | type | RT(reg) | RN(arg) | (((sljit_ins)argw & 0x1ff) << 12));
- if (argw >= 0) {
- if (argw <= 0xfff0ff && ((argw + 0x100) & 0xfff) <= 0x1ff) {
+ if (((argw + 0x100) & 0xfff) <= 0x1ff && argw <= 0xfff0ff && argw >= -0xfff100) {
+ if (argw >= 0) {
+ if (argw & 0x100)
+ argw += 0x1000;
+
FAIL_IF(push_inst(compiler, ADDI | (1 << 22) | RD(tmp_reg) | RN(arg) | (((sljit_ins)argw >> 12) << 10)));
return push_inst(compiler, STURBI | type | RT(reg) | RN(tmp_reg) | (((sljit_ins)argw & 0x1ff) << 12));
+ } else {
+ if (!(argw & 0x100))
+ argw -= 0x1000;
+
+ FAIL_IF(push_inst(compiler, SUBI | (1 << 22) | RD(tmp_reg) | RN(arg) | (((sljit_ins)-argw >> 12) << 10)));
+ return push_inst(compiler, STURBI | type | RT(reg) | RN(tmp_reg) | (((sljit_ins)argw & 0x1ff) << 12));
}
- } else if (argw >= -0xfff100 && ((-argw + 0xff) & 0xfff) <= 0x1ff) {
- FAIL_IF(push_inst(compiler, SUBI | (1 << 22) | RD(tmp_reg) | RN(arg) | (((sljit_ins)-argw >> 12) << 10)));
- return push_inst(compiler, STURBI | type | RT(reg) | RN(tmp_reg) | (((sljit_ins)argw & 0x1ff) << 12));
}
FAIL_IF(load_immediate(compiler, tmp_reg, argw));
@@ -1422,7 +1579,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile
op = GET_OPCODE(op);
if (op >= SLJIT_MOV && op <= SLJIT_MOV_P) {
/* Both operands are registers. */
- if (dst_r != TMP_REG1 && FAST_IS_REG(src))
+ if (FAST_IS_REG(dst) && FAST_IS_REG(src))
return emit_op_imm(compiler, op | ((op_flags & SLJIT_32) ? INT_OP : 0), dst_r, TMP_REG1, src);
switch (op) {
@@ -1472,7 +1629,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile
else if (!(src & SLJIT_MEM))
dst_r = src;
else
- FAIL_IF(emit_op_mem(compiler, mem_flags, dst_r, src, srcw, TMP_REG1));
+ FAIL_IF(emit_op_mem(compiler, mem_flags, dst_r, src, srcw, TMP_REG2));
if (dst & SLJIT_MEM)
return emit_op_mem(compiler, mem_flags | STORE, dst_r, dst, dstw, TMP_REG2);
@@ -1534,7 +1691,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile
mem_flags = INT_SIZE;
}
- if (dst == TMP_REG1)
+ if (dst == TMP_REG2)
flags |= UNUSED_RETURN;
if (src1 & SLJIT_MEM) {
@@ -1572,7 +1729,24 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2u(struct sljit_compiler *compil
CHECK(check_sljit_emit_op2(compiler, op, 1, 0, 0, src1, src1w, src2, src2w));
SLJIT_SKIP_CHECKS(compiler);
- return sljit_emit_op2(compiler, op, TMP_REG1, 0, src1, src1w, src2, src2w);
+ return sljit_emit_op2(compiler, op, TMP_REG2, 0, src1, src1w, src2, src2w);
+}
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2r(struct sljit_compiler *compiler, sljit_s32 op,
+ sljit_s32 dst_reg,
+ sljit_s32 src1, sljit_sw src1w,
+ sljit_s32 src2, sljit_sw src2w)
+{
+ CHECK_ERROR();
+ CHECK(check_sljit_emit_op2r(compiler, op, dst_reg, src1, src1w, src2, src2w));
+
+ switch (GET_OPCODE(op)) {
+ case SLJIT_MULADD:
+ SLJIT_SKIP_CHECKS(compiler);
+ return sljit_emit_op2(compiler, op, dst_reg, 0, src1, src1w, src2, src2w);
+ }
+
+ return SLJIT_SUCCESS;
}
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_shift_into(struct sljit_compiler *compiler, sljit_s32 op,
@@ -1753,18 +1927,18 @@ static sljit_s32 emit_fop_mem(struct sljit_compiler *compiler, sljit_s32 flags,
return push_inst(compiler, STR_FR | type | VT(reg)
| RN(arg & REG_MASK) | RM(OFFS_REG(arg)) | (argw ? (1 << 12) : 0));
- FAIL_IF(push_inst(compiler, ADD | RD(TMP_REG1) | RN(arg & REG_MASK) | RM(OFFS_REG(arg)) | ((sljit_ins)argw << 10)));
- return push_inst(compiler, STR_FI | type | VT(reg) | RN(TMP_REG1));
+ FAIL_IF(push_inst(compiler, ADD | RD(TMP_REG2) | RN(arg & REG_MASK) | RM(OFFS_REG(arg)) | ((sljit_ins)argw << 10)));
+ return push_inst(compiler, STR_FI | type | VT(reg) | RN(TMP_REG2));
}
arg &= REG_MASK;
if (!arg) {
- FAIL_IF(load_immediate(compiler, TMP_REG1, argw & ~(0xfff << shift)));
+ FAIL_IF(load_immediate(compiler, TMP_REG2, argw & ~(0xfff << shift)));
argw = (argw >> shift) & 0xfff;
- return push_inst(compiler, STR_FI | type | VT(reg) | RN(TMP_REG1) | ((sljit_ins)argw << 10));
+ return push_inst(compiler, STR_FI | type | VT(reg) | RN(TMP_REG2) | ((sljit_ins)argw << 10));
}
if (argw >= 0 && (argw & ((1 << shift) - 1)) == 0) {
@@ -1772,18 +1946,18 @@ static sljit_s32 emit_fop_mem(struct sljit_compiler *compiler, sljit_s32 flags,
return push_inst(compiler, STR_FI | type | VT(reg) | RN(arg) | ((sljit_ins)argw << (10 - shift)));
if (argw <= 0xffffff) {
- FAIL_IF(push_inst(compiler, ADDI | (1 << 22) | RD(TMP_REG1) | RN(arg) | (((sljit_ins)argw >> 12) << 10)));
+ FAIL_IF(push_inst(compiler, ADDI | (1 << 22) | RD(TMP_REG2) | RN(arg) | (((sljit_ins)argw >> 12) << 10)));
argw = ((argw & 0xfff) >> shift);
- return push_inst(compiler, STR_FI | type | VT(reg) | RN(TMP_REG1) | ((sljit_ins)argw << 10));
+ return push_inst(compiler, STR_FI | type | VT(reg) | RN(TMP_REG2) | ((sljit_ins)argw << 10));
}
}
if (argw <= 255 && argw >= -256)
return push_inst(compiler, STUR_FI | type | VT(reg) | RN(arg) | (((sljit_ins)argw & 0x1ff) << 12));
- FAIL_IF(load_immediate(compiler, TMP_REG1, argw));
- return push_inst(compiler, STR_FR | type | VT(reg) | RN(arg) | RM(TMP_REG1));
+ FAIL_IF(load_immediate(compiler, TMP_REG2, argw));
+ return push_inst(compiler, STR_FR | type | VT(reg) | RN(arg) | RM(TMP_REG2));
}
static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_sw_from_f64(struct sljit_compiler *compiler, sljit_s32 op,
@@ -1910,7 +2084,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compil
switch (GET_OPCODE(op)) {
case SLJIT_MOV_F64:
if (src != dst_r) {
- if (dst_r != TMP_FREG1)
+ if (!(dst & SLJIT_MEM))
FAIL_IF(push_inst(compiler, (FMOV ^ inv_bits) | VD(dst_r) | VN(src)));
else
dst_r = src;
@@ -2180,14 +2354,14 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile
if (type < SLJIT_JUMP) {
jump->flags |= IS_COND;
PTR_FAIL_IF(push_inst(compiler, B_CC | (6 << 5) | get_cc(compiler, type)));
- }
- else if (type >= SLJIT_FAST_CALL)
+ } else if (type >= SLJIT_FAST_CALL)
jump->flags |= IS_BL;
- PTR_FAIL_IF(emit_imm64_const(compiler, TMP_REG1, 0));
jump->addr = compiler->size;
- PTR_FAIL_IF(push_inst(compiler, ((type >= SLJIT_FAST_CALL) ? BLR : BR) | RN(TMP_REG1)));
+ PTR_FAIL_IF(push_inst(compiler, ((type >= SLJIT_FAST_CALL) ? BLR : BR) | RN(TMP_REG2)));
+ /* Maximum number of instructions required for generating a constant. */
+ compiler->size += JUMP_MAX_SIZE - 1;
return jump;
}
@@ -2236,9 +2410,11 @@ static SLJIT_INLINE struct sljit_jump* emit_cmp_to0(struct sljit_compiler *compi
inv_bits |= 1 << 24;
PTR_FAIL_IF(push_inst(compiler, (CBZ ^ inv_bits) | (6 << 5) | RT(src)));
- PTR_FAIL_IF(emit_imm64_const(compiler, TMP_REG1, 0));
jump->addr = compiler->size;
- PTR_FAIL_IF(push_inst(compiler, BR | RN(TMP_REG1)));
+ PTR_FAIL_IF(push_inst(compiler, BR | RN(TMP_REG2)));
+
+ /* Maximum number of instructions required for generating a constant. */
+ compiler->size += JUMP_MAX_SIZE - 1;
return jump;
}
@@ -2252,8 +2428,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_ijump(struct sljit_compiler *compi
if (src != SLJIT_IMM) {
if (src & SLJIT_MEM) {
ADJUST_LOCAL_OFFSET(src, srcw);
- FAIL_IF(emit_op_mem(compiler, WORD_SIZE, TMP_REG1, src, srcw, TMP_REG1));
- src = TMP_REG1;
+ FAIL_IF(emit_op_mem(compiler, WORD_SIZE, TMP_REG2, src, srcw, TMP_REG2));
+ src = TMP_REG2;
}
return push_inst(compiler, ((type >= SLJIT_FAST_CALL) ? BLR : BR) | RN(src));
}
@@ -2264,9 +2440,10 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_ijump(struct sljit_compiler *compi
set_jump(jump, compiler, JUMP_ADDR | ((type >= SLJIT_FAST_CALL) ? IS_BL : 0));
jump->u.target = (sljit_uw)srcw;
- FAIL_IF(emit_imm64_const(compiler, TMP_REG1, 0));
jump->addr = compiler->size;
- return push_inst(compiler, ((type >= SLJIT_FAST_CALL) ? BLR : BR) | RN(TMP_REG1));
+ /* Maximum number of instructions required for generating a constant. */
+ compiler->size += JUMP_MAX_SIZE - 1;
+ return push_inst(compiler, ((type >= SLJIT_FAST_CALL) ? BLR : BR) | RN(TMP_REG2));
}
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_icall(struct sljit_compiler *compiler, sljit_s32 type,
@@ -2314,7 +2491,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co
if (GET_OPCODE(op) < SLJIT_ADD) {
FAIL_IF(push_inst(compiler, CSINC | (cc << 12) | RD(dst_r) | RN(TMP_ZERO) | RM(TMP_ZERO)));
- if (dst_r == TMP_REG1) {
+ if (dst & SLJIT_MEM) {
mem_flags = (GET_OPCODE(op) == SLJIT_MOV ? WORD_SIZE : INT_SIZE) | STORE;
return emit_op_mem(compiler, mem_flags, TMP_REG1, dst, dstw, TMP_REG2);
}
@@ -2361,11 +2538,11 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_select(struct sljit_compiler *comp
if (src1 == SLJIT_IMM) {
if (type & SLJIT_32)
src1w = (sljit_s32)src1w;
- FAIL_IF(load_immediate(compiler, TMP_REG1, src1w));
- src1 = TMP_REG1;
+ FAIL_IF(load_immediate(compiler, TMP_REG2, src1w));
+ src1 = TMP_REG2;
} else if (src1 & SLJIT_MEM) {
- FAIL_IF(emit_op_mem(compiler, WORD_SIZE, TMP_REG1, src1, src1w, TMP_REG2));
- src1 = TMP_REG1;
+ FAIL_IF(emit_op_mem(compiler, WORD_SIZE, TMP_REG2, src1, src1w, TMP_REG2));
+ src1 = TMP_REG2;
}
cc = get_cc(compiler, type & ~SLJIT_32);
@@ -2386,8 +2563,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fselect(struct sljit_compiler *com
ADJUST_LOCAL_OFFSET(src1, src1w);
if (src1 & SLJIT_MEM) {
- FAIL_IF(emit_fop_mem(compiler, (type & SLJIT_32) ? INT_SIZE : WORD_SIZE, TMP_FREG1, src1, src1w));
- src1 = TMP_FREG1;
+ FAIL_IF(emit_fop_mem(compiler, (type & SLJIT_32) ? INT_SIZE : WORD_SIZE, TMP_FREG2, src1, src1w));
+ src1 = TMP_FREG2;
}
cc = get_cc(compiler, type & ~SLJIT_32);
@@ -2554,13 +2731,13 @@ static sljit_s32 sljit_emit_simd_mem_offset(struct sljit_compiler *compiler, slj
sljit_s32 mem = *mem_ptr;
if (SLJIT_UNLIKELY(mem & OFFS_REG_MASK)) {
- *mem_ptr = TMP_REG1;
- return push_inst(compiler, ADD | RD(TMP_REG1) | RN(mem & REG_MASK) | RM(OFFS_REG(mem)) | ((sljit_ins)(memw & 0x3) << 10));
+ *mem_ptr = TMP_REG2;
+ return push_inst(compiler, ADD | RD(TMP_REG2) | RN(mem & REG_MASK) | RM(OFFS_REG(mem)) | ((sljit_ins)(memw & 0x3) << 10));
}
if (!(mem & REG_MASK)) {
- *mem_ptr = TMP_REG1;
- return load_immediate(compiler, TMP_REG1, memw);
+ *mem_ptr = TMP_REG2;
+ return load_immediate(compiler, TMP_REG2, memw);
}
mem &= REG_MASK;
@@ -2570,11 +2747,11 @@ static sljit_s32 sljit_emit_simd_mem_offset(struct sljit_compiler *compiler, slj
return SLJIT_SUCCESS;
}
- *mem_ptr = TMP_REG1;
+ *mem_ptr = TMP_REG2;
if (memw < -0xffffff || memw > 0xffffff) {
- FAIL_IF(load_immediate(compiler, TMP_REG1, memw));
- return push_inst(compiler, ADD | RD(TMP_REG1) | RN(TMP_REG1) | RM(mem));
+ FAIL_IF(load_immediate(compiler, TMP_REG2, memw));
+ return push_inst(compiler, ADD | RD(TMP_REG2) | RN(TMP_REG2) | RM(mem));
}
ins = ADDI;
@@ -2585,16 +2762,16 @@ static sljit_s32 sljit_emit_simd_mem_offset(struct sljit_compiler *compiler, slj
}
if (memw > 0xfff) {
- FAIL_IF(push_inst(compiler, ins | (1 << 22) | RD(TMP_REG1) | RN(mem) | ((sljit_ins)(memw >> 12) << 10)));
+ FAIL_IF(push_inst(compiler, ins | (1 << 22) | RD(TMP_REG2) | RN(mem) | ((sljit_ins)(memw >> 12) << 10)));
memw &= 0xfff;
if (memw == 0)
return SLJIT_SUCCESS;
- mem = TMP_REG1;
+ mem = TMP_REG2;
}
- return push_inst(compiler, ins | RD(TMP_REG1) | RN(mem) | ((sljit_ins)memw << 10));
+ return push_inst(compiler, ins | RD(TMP_REG2) | RN(mem) | ((sljit_ins)memw << 10));
}
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_mov(struct sljit_compiler *compiler, sljit_s32 type,
@@ -2802,8 +2979,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_replicate(struct sljit_compil
return push_inst(compiler, MOVI | imm | VD(freg));
}
- FAIL_IF(load_immediate(compiler, TMP_REG1, srcw));
- src = TMP_REG1;
+ FAIL_IF(load_immediate(compiler, TMP_REG2, srcw));
+ src = TMP_REG2;
}
return push_inst(compiler, DUP_g | ins | VD(freg) | RN(src));
@@ -2872,8 +3049,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_lane_mov(struct sljit_compile
if (elem_size < 3)
srcdstw &= ((sljit_sw)1 << (((sljit_sw)1 << elem_size) << 3)) - 1;
- FAIL_IF(load_immediate(compiler, TMP_REG1, srcdstw));
- srcdst = TMP_REG1;
+ FAIL_IF(load_immediate(compiler, TMP_REG2, srcdstw));
+ srcdst = TMP_REG2;
}
if (type & SLJIT_SIMD_STORE) {
@@ -3030,7 +3207,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_sign(struct sljit_compiler *c
FAIL_IF(push_inst(compiler, USRA | (1 << 30) | (imms << 16) | VD(TMP_FREG1) | VN(TMP_FREG1)));
- dst_r = FAST_IS_REG(dst) ? dst : TMP_REG1;
+ dst_r = FAST_IS_REG(dst) ? dst : TMP_REG2;
ins = (0x1 << 16);
if (reg_size == 4 && elem_size == 0) {
@@ -3040,8 +3217,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_sign(struct sljit_compiler *c
FAIL_IF(push_inst(compiler, UMOV | ins | RD(dst_r) | VN(TMP_FREG1)));
- if (dst_r == TMP_REG1)
- return emit_op_mem(compiler, STORE | ((type & SLJIT_32) ? INT_SIZE : WORD_SIZE), TMP_REG1, dst, dstw, TMP_REG2);
+ if (dst_r == TMP_REG2)
+ return emit_op_mem(compiler, STORE | ((type & SLJIT_32) ? INT_SIZE : WORD_SIZE), TMP_REG2, dst, dstw, TMP_REG1);
return SLJIT_SUCCESS;
}
@@ -3264,26 +3441,28 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compi
return const_;
}
-SLJIT_API_FUNC_ATTRIBUTE struct sljit_put_label* sljit_emit_put_label(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw dstw)
+SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_mov_addr(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw dstw)
{
- struct sljit_put_label *put_label;
+ struct sljit_jump *jump;
sljit_s32 dst_r;
CHECK_ERROR_PTR();
- CHECK_PTR(check_sljit_emit_put_label(compiler, dst, dstw));
+ CHECK_PTR(check_sljit_emit_mov_addr(compiler, dst, dstw));
ADJUST_LOCAL_OFFSET(dst, dstw);
dst_r = FAST_IS_REG(dst) ? dst : TMP_REG1;
- PTR_FAIL_IF(emit_imm64_const(compiler, dst_r, 0));
+ PTR_FAIL_IF(push_inst(compiler, RD(dst_r)));
- put_label = (struct sljit_put_label*)ensure_abuf(compiler, sizeof(struct sljit_put_label));
- PTR_FAIL_IF(!put_label);
- set_put_label(put_label, compiler, 1);
+ jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump));
+ PTR_FAIL_IF(!jump);
+ set_mov_addr(jump, compiler, 1);
+
+ compiler->size += 3;
if (dst & SLJIT_MEM)
PTR_FAIL_IF(emit_op_mem(compiler, WORD_SIZE | STORE, dst_r, dst, dstw, TMP_REG2));
- return put_label;
+ return jump;
}
SLJIT_API_FUNC_ATTRIBUTE void sljit_set_jump_addr(sljit_uw addr, sljit_uw new_target, sljit_sw executable_offset)
diff --git a/src/3rdparty/pcre2/src/sljit/sljitNativeARM_T2_32.c b/src/3rdparty/pcre2/src/sljit/sljitNativeARM_T2_32.c
index c27c50ddb3..799954a859 100644
--- a/src/3rdparty/pcre2/src/sljit/sljitNativeARM_T2_32.c
+++ b/src/3rdparty/pcre2/src/sljit/sljitNativeARM_T2_32.c
@@ -157,6 +157,7 @@ static const sljit_u8 freg_ebit_map[((SLJIT_NUMBER_OF_FLOAT_REGISTERS + 2) << 1)
#define LSRSI 0x0800
#define LSR_W 0xfa20f000
#define LSR_WI 0xea4f0010
+#define MLA 0xfb000000
#define MOV 0x4600
#define MOVS 0x0000
#define MOVSI 0x2000
@@ -292,7 +293,7 @@ static sljit_s32 push_inst32(struct sljit_compiler *compiler, sljit_ins inst)
return SLJIT_SUCCESS;
}
-static SLJIT_INLINE sljit_s32 emit_imm32_const(struct sljit_compiler *compiler, sljit_s32 dst, sljit_uw imm)
+static sljit_s32 emit_imm32_const(struct sljit_compiler *compiler, sljit_s32 dst, sljit_uw imm)
{
FAIL_IF(push_inst32(compiler, MOVW | RD4(dst)
| COPY_BITS(imm, 12, 16, 4) | COPY_BITS(imm, 11, 26, 1) | COPY_BITS(imm, 8, 12, 3) | (imm & 0xff)));
@@ -300,137 +301,262 @@ static SLJIT_INLINE sljit_s32 emit_imm32_const(struct sljit_compiler *compiler,
| COPY_BITS(imm, 12 + 16, 16, 4) | COPY_BITS(imm, 11 + 16, 26, 1) | COPY_BITS(imm, 8 + 16, 12, 3) | ((imm & 0xff0000) >> 16));
}
-static SLJIT_INLINE void modify_imm32_const(sljit_u16 *inst, sljit_uw new_imm)
+/* Dst must be in bits[11-8] */
+static void set_imm32_const(sljit_u16 *inst, sljit_ins dst, sljit_uw new_imm)
{
- sljit_ins dst = inst[1] & 0x0f00;
- SLJIT_ASSERT(((inst[0] & 0xfbf0) == (MOVW >> 16)) && ((inst[2] & 0xfbf0) == (MOVT >> 16)) && dst == (inst[3] & 0x0f00));
inst[0] = (sljit_u16)((MOVW >> 16) | COPY_BITS(new_imm, 12, 0, 4) | COPY_BITS(new_imm, 11, 10, 1));
inst[1] = (sljit_u16)(dst | COPY_BITS(new_imm, 8, 12, 3) | (new_imm & 0xff));
inst[2] = (sljit_u16)((MOVT >> 16) | COPY_BITS(new_imm, 12 + 16, 0, 4) | COPY_BITS(new_imm, 11 + 16, 10, 1));
inst[3] = (sljit_u16)(dst | COPY_BITS(new_imm, 8 + 16, 12, 3) | ((new_imm & 0xff0000) >> 16));
}
-static SLJIT_INLINE sljit_s32 detect_jump_type(struct sljit_jump *jump, sljit_u16 *code_ptr, sljit_u16 *code, sljit_sw executable_offset)
+static SLJIT_INLINE void modify_imm32_const(sljit_u16 *inst, sljit_uw new_imm)
+{
+ sljit_ins dst = inst[1] & 0x0f00;
+ SLJIT_ASSERT(((inst[0] & 0xfbf0) == (MOVW >> 16)) && ((inst[2] & 0xfbf0) == (MOVT >> 16)) && dst == (inst[3] & 0x0f00));
+ set_imm32_const(inst, dst, new_imm);
+}
+
+static SLJIT_INLINE sljit_u16* detect_jump_type(struct sljit_jump *jump, sljit_u16 *code_ptr, sljit_u16 *code, sljit_sw executable_offset)
{
sljit_sw diff;
if (jump->flags & SLJIT_REWRITABLE_JUMP)
- return 0;
+ goto exit;
if (jump->flags & JUMP_ADDR) {
/* Branch to ARM code is not optimized yet. */
if (!(jump->u.target & 0x1))
- return 0;
- diff = ((sljit_sw)jump->u.target - (sljit_sw)(code_ptr + 2) - executable_offset) >> 1;
- }
- else {
- SLJIT_ASSERT(jump->flags & JUMP_LABEL);
- diff = ((sljit_sw)(code + jump->u.label->size) - (sljit_sw)(code_ptr + 2)) >> 1;
+ goto exit;
+ diff = (sljit_sw)jump->u.target - (sljit_sw)(code_ptr + 2) - executable_offset;
+ } else {
+ SLJIT_ASSERT(jump->u.label != NULL);
+ diff = (sljit_sw)(code + jump->u.label->size) - (sljit_sw)(code_ptr + 2);
}
if (jump->flags & IS_COND) {
SLJIT_ASSERT(!(jump->flags & IS_BL));
- if (diff <= 127 && diff >= -128) {
+ /* Size of the prefix IT instruction. */
+ diff += SSIZE_OF(u16);
+ if (diff <= 0xff && diff >= -0x100) {
jump->flags |= PATCH_TYPE1;
- return 5;
+ jump->addr = (sljit_uw)(code_ptr - 1);
+ return code_ptr - 1;
}
- if (diff <= 524287 && diff >= -524288) {
+ if (diff <= 0xfffff && diff >= -0x100000) {
jump->flags |= PATCH_TYPE2;
- return 4;
+ jump->addr = (sljit_uw)(code_ptr - 1);
+ return code_ptr;
}
- /* +1 comes from the prefix IT instruction. */
- diff--;
- if (diff <= 8388607 && diff >= -8388608) {
- jump->flags |= PATCH_TYPE3;
- return 3;
+ diff -= SSIZE_OF(u16);
+ } else if (jump->flags & IS_BL) {
+ /* Branch and link. */
+ if (diff <= 0xffffff && diff >= -0x1000000) {
+ jump->flags |= PATCH_TYPE5;
+ return code_ptr + 1;
}
+ goto exit;
+ } else if (diff <= 0x7ff && diff >= -0x800) {
+ jump->flags |= PATCH_TYPE3;
+ return code_ptr;
}
- else if (jump->flags & IS_BL) {
- if (diff <= 8388607 && diff >= -8388608) {
- jump->flags |= PATCH_BL;
- return 3;
- }
+
+ if (diff <= 0xffffff && diff >= -0x1000000) {
+ jump->flags |= PATCH_TYPE4;
+ return code_ptr + 1;
}
- else {
- if (diff <= 1023 && diff >= -1024) {
- jump->flags |= PATCH_TYPE4;
- return 4;
- }
- if (diff <= 8388607 && diff >= -8388608) {
- jump->flags |= PATCH_TYPE5;
- return 3;
- }
+
+exit:
+ code_ptr[4] = code_ptr[0];
+
+ if (jump->flags & IS_COND) {
+ code_ptr[3] = code_ptr[-1];
+ jump->addr = (sljit_uw)(code_ptr - 1);
+ }
+
+ return code_ptr + 4;
+}
+
+static SLJIT_INLINE sljit_sw mov_addr_get_length(struct sljit_jump *jump, sljit_u16 *code_ptr, sljit_u16 *code, sljit_sw executable_offset)
+{
+ sljit_uw addr;
+ sljit_sw diff;
+ SLJIT_UNUSED_ARG(executable_offset);
+
+ if (jump->flags & JUMP_ADDR)
+ addr = jump->u.target;
+ else
+ addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code + jump->u.label->size, executable_offset);
+
+ /* The pc+4 offset is represented by the 2 * SSIZE_OF(sljit_u16) below. */
+ diff = (sljit_sw)addr - (sljit_sw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);
+
+ /* Note: ADR with imm8 does not set the last bit (Thumb2 flag). */
+
+ if (diff <= 0xffd + 2 * SSIZE_OF(u16) && diff >= -0xfff + 2 * SSIZE_OF(u16)) {
+ jump->flags |= PATCH_TYPE6;
+ return 1;
}
- return 0;
+ return 3;
}
-static SLJIT_INLINE void set_jump_instruction(struct sljit_jump *jump, sljit_sw executable_offset)
+static SLJIT_INLINE void generate_jump_or_mov_addr(struct sljit_jump *jump, sljit_sw executable_offset)
{
sljit_s32 type = (jump->flags >> 4) & 0xf;
+ sljit_u16 *jump_inst = (sljit_u16*)jump->addr;
sljit_sw diff;
- sljit_u16 *jump_inst;
- sljit_s32 s, j1, j2;
+ sljit_ins ins;
+
+ diff = (sljit_sw)((jump->flags & JUMP_ADDR) ? jump->u.target : jump->u.label->u.addr);
if (SLJIT_UNLIKELY(type == 0)) {
- modify_imm32_const((sljit_u16*)jump->addr, (jump->flags & JUMP_LABEL) ? jump->u.label->addr : jump->u.target);
+ ins = (jump->flags & JUMP_MOV_ADDR) ? *jump_inst : RDN3(TMP_REG1);
+ set_imm32_const((sljit_u16*)jump->addr, ins, (sljit_uw)diff);
return;
}
- if (jump->flags & JUMP_ADDR) {
- SLJIT_ASSERT(jump->u.target & 0x1);
- diff = ((sljit_sw)jump->u.target - (sljit_sw)(jump->addr + sizeof(sljit_u32)) - executable_offset) >> 1;
- }
- else {
- SLJIT_ASSERT(jump->u.label->addr & 0x1);
- diff = ((sljit_sw)(jump->u.label->addr) - (sljit_sw)(jump->addr + sizeof(sljit_u32)) - executable_offset) >> 1;
+ if (SLJIT_UNLIKELY(type == 6)) {
+ SLJIT_ASSERT(jump->flags & JUMP_MOV_ADDR);
+ diff -= (sljit_sw)SLJIT_ADD_EXEC_OFFSET(jump_inst + 2, executable_offset) & ~(sljit_sw)0x3;
+
+ SLJIT_ASSERT(diff <= 0xfff && diff >= -0xfff);
+
+ ins = ADDWI >> 16;
+ if (diff <= 0) {
+ diff = -diff;
+ ins = SUBWI >> 16;
+ }
+
+ jump_inst[1] = (sljit_u16)(jump_inst[0] | COPY_BITS(diff, 8, 12, 3) | (diff & 0xff));
+ jump_inst[0] = (sljit_u16)(ins | 0xf | COPY_BITS(diff, 11, 10, 1));
+ return;
}
- jump_inst = (sljit_u16*)jump->addr;
+
+ SLJIT_ASSERT((diff & 0x1) != 0 && !(jump->flags & JUMP_MOV_ADDR));
+ diff = (diff - (sljit_sw)(jump->addr + sizeof(sljit_u32)) - executable_offset) >> 1;
switch (type) {
case 1:
/* Encoding T1 of 'B' instruction */
- SLJIT_ASSERT(diff <= 127 && diff >= -128 && (jump->flags & IS_COND));
+ SLJIT_ASSERT(diff <= 0x7f && diff >= -0x80 && (jump->flags & IS_COND));
jump_inst[0] = (sljit_u16)(0xd000 | (jump->flags & 0xf00) | ((sljit_ins)diff & 0xff));
return;
case 2:
/* Encoding T3 of 'B' instruction */
- SLJIT_ASSERT(diff <= 524287 && diff >= -524288 && (jump->flags & IS_COND));
+ SLJIT_ASSERT(diff <= 0x7ffff && diff >= -0x80000 && (jump->flags & IS_COND));
jump_inst[0] = (sljit_u16)(0xf000 | COPY_BITS(jump->flags, 8, 6, 4) | COPY_BITS(diff, 11, 0, 6) | COPY_BITS(diff, 19, 10, 1));
jump_inst[1] = (sljit_u16)(0x8000 | COPY_BITS(diff, 17, 13, 1) | COPY_BITS(diff, 18, 11, 1) | ((sljit_ins)diff & 0x7ff));
return;
case 3:
- SLJIT_ASSERT(jump->flags & IS_COND);
- *jump_inst++ = (sljit_u16)(IT | ((jump->flags >> 4) & 0xf0) | 0x8);
- diff--;
- type = 5;
- break;
- case 4:
/* Encoding T2 of 'B' instruction */
- SLJIT_ASSERT(diff <= 1023 && diff >= -1024 && !(jump->flags & IS_COND));
+ SLJIT_ASSERT(diff <= 0x3ff && diff >= -0x400 && !(jump->flags & IS_COND));
jump_inst[0] = (sljit_u16)(0xe000 | (diff & 0x7ff));
return;
}
- SLJIT_ASSERT(diff <= 8388607 && diff >= -8388608);
+ SLJIT_ASSERT(diff <= 0x7fffff && diff >= -0x800000);
+
+ /* Really complex instruction form for branches. Negate with sign bit. */
+ diff ^= ((diff >> 2) & 0x600000) ^ 0x600000;
- /* Really complex instruction form for branches. */
- s = (diff >> 23) & 0x1;
- j1 = (~(diff >> 22) ^ s) & 0x1;
- j2 = (~(diff >> 21) ^ s) & 0x1;
- jump_inst[0] = (sljit_u16)(0xf000 | ((sljit_ins)s << 10) | COPY_BITS(diff, 11, 0, 10));
- jump_inst[1] = (sljit_u16)((j1 << 13) | (j2 << 11) | (diff & 0x7ff));
+ jump_inst[0] = (sljit_u16)(0xf000 | COPY_BITS(diff, 11, 0, 10) | COPY_BITS(diff, 23, 10, 1));
+ jump_inst[1] = (sljit_u16)((diff & 0x7ff) | COPY_BITS(diff, 22, 13, 1) | COPY_BITS(diff, 21, 11, 1));
+
+ SLJIT_ASSERT(type == 4 || type == 5);
/* The others have a common form. */
- if (type == 5) /* Encoding T4 of 'B' instruction */
+ if (type == 4) /* Encoding T4 of 'B' instruction */
jump_inst[1] |= 0x9000;
- else if (type == 6) /* Encoding T1 of 'BL' instruction */
+ else /* Encoding T1 of 'BL' instruction */
jump_inst[1] |= 0xd000;
- else
- SLJIT_UNREACHABLE();
}
-SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compiler)
+static void reduce_code_size(struct sljit_compiler *compiler)
+{
+ struct sljit_label *label;
+ struct sljit_jump *jump;
+ struct sljit_const *const_;
+ SLJIT_NEXT_DEFINE_TYPES;
+ sljit_uw total_size;
+ sljit_uw size_reduce = 0;
+ sljit_sw diff;
+
+ label = compiler->labels;
+ jump = compiler->jumps;
+ const_ = compiler->consts;
+ SLJIT_NEXT_INIT_TYPES();
+
+ while (1) {
+ SLJIT_GET_NEXT_MIN();
+
+ if (next_min_addr == SLJIT_MAX_ADDRESS)
+ break;
+
+ if (next_min_addr == next_label_size) {
+ label->size -= size_reduce;
+
+ label = label->next;
+ next_label_size = SLJIT_GET_NEXT_SIZE(label);
+ }
+
+ if (next_min_addr == next_const_addr) {
+ const_->addr -= size_reduce;
+ const_ = const_->next;
+ next_const_addr = SLJIT_GET_NEXT_ADDRESS(const_);
+ continue;
+ }
+
+ if (next_min_addr != next_jump_addr)
+ continue;
+
+ jump->addr -= size_reduce;
+ if (!(jump->flags & JUMP_MOV_ADDR)) {
+ total_size = JUMP_MAX_SIZE;
+
+ if (!(jump->flags & (SLJIT_REWRITABLE_JUMP | JUMP_ADDR))) {
+ /* Unit size: instruction. */
+ diff = (sljit_sw)jump->u.label->size - (sljit_sw)jump->addr - 2;
+
+ if (jump->flags & IS_COND) {
+ diff++;
+
+ if (diff <= (0xff / SSIZE_OF(u16)) && diff >= (-0x100 / SSIZE_OF(u16)))
+ total_size = 0;
+ else if (diff <= (0xfffff / SSIZE_OF(u16)) && diff >= (-0x100000 / SSIZE_OF(u16)))
+ total_size = 1;
+ diff--;
+ } else if (!(jump->flags & IS_BL) && diff <= (0x7ff / SSIZE_OF(u16)) && diff >= (-0x800 / SSIZE_OF(u16)))
+ total_size = 1;
+
+ if (total_size == JUMP_MAX_SIZE && diff <= (0xffffff / SSIZE_OF(u16)) && diff >= (-0x1000000 / SSIZE_OF(u16)))
+ total_size = 2;
+ }
+
+ size_reduce += JUMP_MAX_SIZE - total_size;
+ } else {
+ /* Real size minus 1. Unit size: instruction. */
+ total_size = 3;
+
+ if (!(jump->flags & JUMP_ADDR)) {
+ diff = (sljit_sw)jump->u.label->size - (sljit_sw)jump->addr;
+
+ if (diff <= (0xffd / SSIZE_OF(u16)) && diff >= (-0xfff / SSIZE_OF(u16)))
+ total_size = 1;
+ }
+
+ size_reduce += 3 - total_size;
+ }
+
+ jump->flags |= total_size << JUMP_SIZE_SHIFT;
+ jump = jump->next;
+ next_jump_addr = SLJIT_GET_NEXT_ADDRESS(jump);
+ }
+
+ compiler->size -= size_reduce;
+}
+
+SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compiler, sljit_s32 options, void *exec_allocator_data)
{
struct sljit_memory_fragment *buf;
sljit_u16 *code;
@@ -438,64 +564,74 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil
sljit_u16 *buf_ptr;
sljit_u16 *buf_end;
sljit_uw half_count;
- sljit_uw next_addr;
+ SLJIT_NEXT_DEFINE_TYPES;
+ sljit_sw addr;
sljit_sw executable_offset;
struct sljit_label *label;
struct sljit_jump *jump;
struct sljit_const *const_;
- struct sljit_put_label *put_label;
CHECK_ERROR_PTR();
CHECK_PTR(check_sljit_generate_code(compiler));
- reverse_buf(compiler);
- code = (sljit_u16*)SLJIT_MALLOC_EXEC(compiler->size * sizeof(sljit_u16), compiler->exec_allocator_data);
+ reduce_code_size(compiler);
+
+ code = (sljit_u16*)allocate_executable_memory(compiler->size * sizeof(sljit_u16), options, exec_allocator_data, &executable_offset);
PTR_FAIL_WITH_EXEC_IF(code);
+
+ reverse_buf(compiler);
buf = compiler->buf;
code_ptr = code;
half_count = 0;
- next_addr = 0;
- executable_offset = SLJIT_EXEC_OFFSET(code);
-
label = compiler->labels;
jump = compiler->jumps;
const_ = compiler->consts;
- put_label = compiler->put_labels;
+ SLJIT_NEXT_INIT_TYPES();
+ SLJIT_GET_NEXT_MIN();
do {
buf_ptr = (sljit_u16*)buf->memory;
buf_end = buf_ptr + (buf->used_size >> 1);
do {
*code_ptr = *buf_ptr++;
- if (next_addr == half_count) {
+ if (next_min_addr == half_count) {
SLJIT_ASSERT(!label || label->size >= half_count);
SLJIT_ASSERT(!jump || jump->addr >= half_count);
SLJIT_ASSERT(!const_ || const_->addr >= half_count);
- SLJIT_ASSERT(!put_label || put_label->addr >= half_count);
/* These structures are ordered by their address. */
- if (label && label->size == half_count) {
- label->addr = ((sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset)) | 0x1;
+ if (next_min_addr == next_label_size) {
+ label->u.addr = ((sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset)) | 0x1;
label->size = (sljit_uw)(code_ptr - code);
label = label->next;
+ next_label_size = SLJIT_GET_NEXT_SIZE(label);
}
- if (jump && jump->addr == half_count) {
- jump->addr = (sljit_uw)code_ptr - ((jump->flags & IS_COND) ? 10 : 8);
- code_ptr -= detect_jump_type(jump, code_ptr, code, executable_offset);
- jump = jump->next;
- }
- if (const_ && const_->addr == half_count) {
+
+ if (next_min_addr == next_jump_addr) {
+ if (!(jump->flags & JUMP_MOV_ADDR)) {
+ half_count = half_count - 1 + (jump->flags >> JUMP_SIZE_SHIFT);
+ jump->addr = (sljit_uw)code_ptr;
+ code_ptr = detect_jump_type(jump, code_ptr, code, executable_offset);
+ SLJIT_ASSERT((sljit_uw)code_ptr - jump->addr <
+ ((jump->flags >> JUMP_SIZE_SHIFT) + ((jump->flags & 0xf0) <= PATCH_TYPE2)) * sizeof(sljit_u16));
+ } else {
+ half_count += jump->flags >> JUMP_SIZE_SHIFT;
+ addr = (sljit_sw)code_ptr;
+ code_ptr += mov_addr_get_length(jump, code_ptr, code, executable_offset);
+ jump->addr = (sljit_uw)addr;
+ }
+
+ jump = jump->next;
+ next_jump_addr = SLJIT_GET_NEXT_ADDRESS(jump);
+ } else if (next_min_addr == next_const_addr) {
const_->addr = (sljit_uw)code_ptr;
const_ = const_->next;
+ next_const_addr = SLJIT_GET_NEXT_ADDRESS(const_);
}
- if (put_label && put_label->addr == half_count) {
- SLJIT_ASSERT(put_label->label);
- put_label->addr = (sljit_uw)code_ptr;
- put_label = put_label->next;
- }
- next_addr = compute_next_addr(label, jump, const_, put_label);
+
+ SLJIT_GET_NEXT_MIN();
}
code_ptr++;
half_count++;
@@ -505,7 +641,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil
} while (buf);
if (label && label->size == half_count) {
- label->addr = ((sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset)) | 0x1;
+ label->u.addr = ((sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset)) | 0x1;
label->size = (sljit_uw)(code_ptr - code);
label = label->next;
}
@@ -513,21 +649,14 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil
SLJIT_ASSERT(!label);
SLJIT_ASSERT(!jump);
SLJIT_ASSERT(!const_);
- SLJIT_ASSERT(!put_label);
SLJIT_ASSERT(code_ptr - code <= (sljit_sw)compiler->size);
jump = compiler->jumps;
while (jump) {
- set_jump_instruction(jump, executable_offset);
+ generate_jump_or_mov_addr(jump, executable_offset);
jump = jump->next;
}
- put_label = compiler->put_labels;
- while (put_label) {
- modify_imm32_const((sljit_u16 *)put_label->addr, put_label->label->addr);
- put_label = put_label->next;
- }
-
compiler->error = SLJIT_ERR_COMPILED;
compiler->executable_offset = executable_offset;
compiler->executable_size = (sljit_uw)(code_ptr - code) * sizeof(sljit_u16);
@@ -657,10 +786,11 @@ static sljit_s32 load_immediate(struct sljit_compiler *compiler, sljit_s32 dst,
/* SET_FLAGS must be 0x100000 as it is also the value of S bit (can be used for optimization). */
#define SET_FLAGS 0x0100000
#define UNUSED_RETURN 0x0200000
+#define REGISTER_OP 0x0400000
static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 dst, sljit_uw arg1, sljit_uw arg2)
{
- /* dst must be register, TMP_REG1
+ /* dst must be register
arg1 must be register, imm
arg2 must be register, imm */
sljit_s32 reg;
@@ -686,6 +816,7 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s
case SLJIT_REV_U32:
case SLJIT_REV_S32:
case SLJIT_MUL:
+ case SLJIT_MULADD:
/* No form with immediate operand. */
break;
case SLJIT_MOV:
@@ -921,17 +1052,17 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s
return push_inst32(compiler, REV_W | RN4(arg2) | RD4(dst) | RM4(arg2));
case SLJIT_REV_U16:
case SLJIT_REV_S16:
- SLJIT_ASSERT(arg1 == TMP_REG2 && dst != TMP_REG2);
+ SLJIT_ASSERT(arg1 == TMP_REG2);
- flags &= 0xffff;
if (IS_2_LO_REGS(dst, arg2))
FAIL_IF(push_inst16(compiler, REV16 | RD3(dst) | RN3(arg2)));
else
FAIL_IF(push_inst32(compiler, REV16_W | RN4(arg2) | RD4(dst) | RM4(arg2)));
- if (dst == TMP_REG1 || (arg2 == TMP_REG1 && flags == SLJIT_REV_U16))
+ if (!(flags & REGISTER_OP))
return SLJIT_SUCCESS;
+ flags &= 0xffff;
if (reg_map[dst] <= 7)
return push_inst16(compiler, (flags == SLJIT_REV_U16 ? UXTH : SXTH) | RD3(dst) | RN3(dst));
return push_inst32(compiler, (flags == SLJIT_REV_U16 ? UXTH_W : SXTH_W) | RD4(dst) | RM4(dst));
@@ -966,10 +1097,10 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s
compiler->status_flags_state = 0;
if (!(flags & SET_FLAGS))
return push_inst32(compiler, MUL | RD4(dst) | RN4(arg1) | RM4(arg2));
- SLJIT_ASSERT(dst != TMP_REG2);
- FAIL_IF(push_inst32(compiler, SMULL | RT4(dst) | RD4(TMP_REG2) | RN4(arg1) | RM4(arg2)));
+ reg = (dst == TMP_REG2) ? TMP_REG1 : TMP_REG2;
+ FAIL_IF(push_inst32(compiler, SMULL | RT4(dst) | RD4(reg) | RN4(arg1) | RM4(arg2)));
/* cmp TMP_REG2, dst asr #31. */
- return push_inst32(compiler, CMP_W | RN4(TMP_REG2) | 0x70e0 | RM4(dst));
+ return push_inst32(compiler, CMP_W | RN4(reg) | 0x70e0 | RM4(dst));
case SLJIT_AND:
if (dst == (sljit_s32)arg1 && IS_2_LO_REGS(dst, arg2))
return push_inst16(compiler, ANDS | RD3(dst) | RN3(arg2));
@@ -985,37 +1116,44 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s
return push_inst16(compiler, EORS | RD3(dst) | RN3(arg2));
return push_inst32(compiler, EOR_W | (flags & SET_FLAGS) | RD4(dst) | RN4(arg1) | RM4(arg2));
case SLJIT_MSHL:
- FAIL_IF(push_inst32(compiler, ANDI | RD4(TMP_REG2) | RN4(arg2) | 0x1f));
- arg2 = TMP_REG2;
+ reg = (arg2 == TMP_REG1) ? TMP_REG1 : TMP_REG2;
+ FAIL_IF(push_inst32(compiler, ANDI | RD4(reg) | RN4(arg2) | 0x1f));
+ arg2 = (sljit_uw)reg;
/* fallthrough */
case SLJIT_SHL:
if (dst == (sljit_s32)arg1 && IS_2_LO_REGS(dst, arg2))
return push_inst16(compiler, LSLS | RD3(dst) | RN3(arg2));
return push_inst32(compiler, LSL_W | (flags & SET_FLAGS) | RD4(dst) | RN4(arg1) | RM4(arg2));
case SLJIT_MLSHR:
- FAIL_IF(push_inst32(compiler, ANDI | RD4(TMP_REG2) | RN4(arg2) | 0x1f));
- arg2 = TMP_REG2;
+ reg = (arg2 == TMP_REG1) ? TMP_REG1 : TMP_REG2;
+ FAIL_IF(push_inst32(compiler, ANDI | RD4(reg) | RN4(arg2) | 0x1f));
+ arg2 = (sljit_uw)reg;
/* fallthrough */
case SLJIT_LSHR:
if (dst == (sljit_s32)arg1 && IS_2_LO_REGS(dst, arg2))
return push_inst16(compiler, LSRS | RD3(dst) | RN3(arg2));
return push_inst32(compiler, LSR_W | (flags & SET_FLAGS) | RD4(dst) | RN4(arg1) | RM4(arg2));
case SLJIT_MASHR:
- FAIL_IF(push_inst32(compiler, ANDI | RD4(TMP_REG2) | RN4(arg2) | 0x1f));
- arg2 = TMP_REG2;
+ reg = (arg2 == TMP_REG1) ? TMP_REG1 : TMP_REG2;
+ FAIL_IF(push_inst32(compiler, ANDI | RD4(reg) | RN4(arg2) | 0x1f));
+ arg2 = (sljit_uw)reg;
/* fallthrough */
case SLJIT_ASHR:
if (dst == (sljit_s32)arg1 && IS_2_LO_REGS(dst, arg2))
return push_inst16(compiler, ASRS | RD3(dst) | RN3(arg2));
return push_inst32(compiler, ASR_W | (flags & SET_FLAGS) | RD4(dst) | RN4(arg1) | RM4(arg2));
case SLJIT_ROTL:
- FAIL_IF(push_inst32(compiler, RSB_WI | RD4(TMP_REG2) | RN4(arg2) | 0));
- arg2 = TMP_REG2;
+ reg = (arg2 == TMP_REG1) ? TMP_REG1 : TMP_REG2;
+ FAIL_IF(push_inst32(compiler, RSB_WI | RD4(reg) | RN4(arg2) | 0));
+ arg2 = (sljit_uw)reg;
/* fallthrough */
case SLJIT_ROTR:
if (dst == (sljit_s32)arg1 && IS_2_LO_REGS(dst, arg2))
return push_inst16(compiler, RORS | RD3(dst) | RN3(arg2));
return push_inst32(compiler, ROR_W | RD4(dst) | RN4(arg1) | RM4(arg2));
+ case SLJIT_MULADD:
+ compiler->status_flags_state = 0;
+ return push_inst32(compiler, MLA | RD4(dst) | RN4(arg1) | RM4(arg2) | RT4(dst));
}
SLJIT_UNREACHABLE();
@@ -1779,14 +1917,13 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile
sljit_s32 src, sljit_sw srcw)
{
sljit_s32 dst_r, flags;
- sljit_s32 op_flags = GET_ALL_FLAGS(op);
CHECK_ERROR();
CHECK(check_sljit_emit_op1(compiler, op, dst, dstw, src, srcw));
ADJUST_LOCAL_OFFSET(dst, dstw);
ADJUST_LOCAL_OFFSET(src, srcw);
- dst_r = FAST_IS_REG(dst) ? dst : TMP_REG1;
+ dst_r = FAST_IS_REG(dst) ? dst : TMP_REG2;
op = GET_OPCODE(op);
if (op >= SLJIT_MOV && op <= SLJIT_MOV_P) {
@@ -1826,35 +1963,37 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile
if (src == SLJIT_IMM)
FAIL_IF(emit_op_imm(compiler, SLJIT_MOV | ARG2_IMM, dst_r, TMP_REG2, (sljit_uw)srcw));
- else if (src & SLJIT_MEM) {
+ else if (src & SLJIT_MEM)
FAIL_IF(emit_op_mem(compiler, flags, dst_r, src, srcw, TMP_REG1));
- } else {
- if (dst_r != TMP_REG1)
- return emit_op_imm(compiler, op, dst_r, TMP_REG2, (sljit_uw)src);
+ else if (FAST_IS_REG(dst))
+ return emit_op_imm(compiler, op, dst_r, TMP_REG2, (sljit_uw)src);
+ else
dst_r = src;
- }
if (!(dst & SLJIT_MEM))
return SLJIT_SUCCESS;
- return emit_op_mem(compiler, flags | STORE, dst_r, dst, dstw, TMP_REG2);
+ return emit_op_mem(compiler, flags | STORE, dst_r, dst, dstw, TMP_REG1);
}
SLJIT_COMPILE_ASSERT(WORD_SIZE == 0, word_size_must_be_0);
- flags = HAS_FLAGS(op_flags) ? SET_FLAGS : 0;
+ flags = WORD_SIZE;
- if (op == SLJIT_REV_U16 || op == SLJIT_REV_S16)
+ if (op == SLJIT_REV_U16 || op == SLJIT_REV_S16) {
+ if (!(dst & SLJIT_MEM) && (!(src & SLJIT_MEM) || op == SLJIT_REV_S16))
+ op |= REGISTER_OP;
flags |= HALF_SIZE;
+ }
if (src & SLJIT_MEM) {
FAIL_IF(emit_op_mem(compiler, flags, TMP_REG1, src, srcw, TMP_REG1));
src = TMP_REG1;
}
- emit_op_imm(compiler, flags | op, dst_r, TMP_REG2, (sljit_uw)src);
+ emit_op_imm(compiler, op, dst_r, TMP_REG2, (sljit_uw)src);
if (SLJIT_UNLIKELY(dst & SLJIT_MEM))
- return emit_op_mem(compiler, flags | STORE, dst_r, dst, dstw, TMP_REG2);
+ return emit_op_mem(compiler, flags | STORE, dst_r, dst, dstw, TMP_REG1);
return SLJIT_SUCCESS;
}
@@ -1863,7 +2002,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile
sljit_s32 src1, sljit_sw src1w,
sljit_s32 src2, sljit_sw src2w)
{
- sljit_s32 dst_reg, flags, src2_reg;
+ sljit_s32 dst_reg, src2_tmp_reg, flags;
CHECK_ERROR();
CHECK(check_sljit_emit_op2(compiler, op, 0, dst, dstw, src1, src1w, src2, src2w));
@@ -1871,36 +2010,34 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile
ADJUST_LOCAL_OFFSET(src1, src1w);
ADJUST_LOCAL_OFFSET(src2, src2w);
- dst_reg = FAST_IS_REG(dst) ? dst : TMP_REG1;
+ dst_reg = FAST_IS_REG(dst) ? dst : TMP_REG2;
flags = HAS_FLAGS(op) ? SET_FLAGS : 0;
if (dst == TMP_REG1)
flags |= UNUSED_RETURN;
+ if (src2 == SLJIT_IMM)
+ flags |= ARG2_IMM;
+ else if (src2 & SLJIT_MEM) {
+ src2_tmp_reg = FAST_IS_REG(src1) ? TMP_REG1 : TMP_REG2;
+ emit_op_mem(compiler, WORD_SIZE, src2_tmp_reg, src2, src2w, TMP_REG1);
+ src2w = src2_tmp_reg;
+ } else
+ src2w = src2;
+
if (src1 == SLJIT_IMM)
flags |= ARG1_IMM;
else if (src1 & SLJIT_MEM) {
emit_op_mem(compiler, WORD_SIZE, TMP_REG1, src1, src1w, TMP_REG1);
src1w = TMP_REG1;
- }
- else
+ } else
src1w = src1;
- if (src2 == SLJIT_IMM)
- flags |= ARG2_IMM;
- else if (src2 & SLJIT_MEM) {
- src2_reg = (!(flags & ARG1_IMM) && (src1w == TMP_REG1)) ? TMP_REG2 : TMP_REG1;
- emit_op_mem(compiler, WORD_SIZE, src2_reg, src2, src2w, src2_reg);
- src2w = src2_reg;
- }
- else
- src2w = src2;
-
emit_op_imm(compiler, flags | GET_OPCODE(op), dst_reg, (sljit_uw)src1w, (sljit_uw)src2w);
if (!(dst & SLJIT_MEM))
return SLJIT_SUCCESS;
- return emit_op_mem(compiler, WORD_SIZE | STORE, dst_reg, dst, dstw, TMP_REG2);
+ return emit_op_mem(compiler, WORD_SIZE | STORE, dst_reg, dst, dstw, TMP_REG1);
}
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2u(struct sljit_compiler *compiler, sljit_s32 op,
@@ -1914,6 +2051,23 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2u(struct sljit_compiler *compil
return sljit_emit_op2(compiler, op, TMP_REG1, 0, src1, src1w, src2, src2w);
}
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2r(struct sljit_compiler *compiler, sljit_s32 op,
+ sljit_s32 dst_reg,
+ sljit_s32 src1, sljit_sw src1w,
+ sljit_s32 src2, sljit_sw src2w)
+{
+ CHECK_ERROR();
+ CHECK(check_sljit_emit_op2r(compiler, op, dst_reg, src1, src1w, src2, src2w));
+
+ switch (GET_OPCODE(op)) {
+ case SLJIT_MULADD:
+ SLJIT_SKIP_CHECKS(compiler);
+ return sljit_emit_op2(compiler, op, dst_reg, 0, src1, src1w, src2, src2w);
+ }
+
+ return SLJIT_SUCCESS;
+}
+
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_shift_into(struct sljit_compiler *compiler, sljit_s32 op,
sljit_s32 dst_reg,
sljit_s32 src1_reg,
@@ -2228,7 +2382,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compil
switch (GET_OPCODE(op)) {
case SLJIT_MOV_F64:
if (src != dst_r) {
- if (dst_r != TMP_FREG1)
+ if (!(dst & SLJIT_MEM))
FAIL_IF(push_inst32(compiler, VMOV_F32 | (op & SLJIT_32) | VD4(dst_r) | VM4(src)));
else
dst_r = src;
@@ -2519,7 +2673,6 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile
set_jump(jump, compiler, type & SLJIT_REWRITABLE_JUMP);
type &= 0xff;
- PTR_FAIL_IF(emit_imm32_const(compiler, TMP_REG1, 0));
if (type < SLJIT_JUMP) {
jump->flags |= IS_COND;
cc = get_cc(compiler, type);
@@ -2535,6 +2688,8 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile
PTR_FAIL_IF(push_inst16(compiler, BLX | RN3(TMP_REG1)));
}
+ /* Maximum number of instructions required for generating a constant. */
+ compiler->size += JUMP_MAX_SIZE - 1;
return jump;
}
@@ -2800,8 +2955,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_ijump(struct sljit_compiler *compi
set_jump(jump, compiler, JUMP_ADDR | ((type >= SLJIT_FAST_CALL) ? IS_BL : 0));
jump->u.target = (sljit_uw)srcw;
- FAIL_IF(emit_imm32_const(compiler, TMP_REG1, 0));
jump->addr = compiler->size;
+ /* Maximum number of instructions required for generating a constant. */
+ compiler->size += JUMP_MAX_SIZE - 1;
return push_inst16(compiler, (type <= SLJIT_JUMP ? BX : BLX) | RN3(TMP_REG1));
}
@@ -2968,7 +3124,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_select(struct sljit_compiler *comp
}
if (src1 & SLJIT_MEM) {
- FAIL_IF(emit_op_mem(compiler, WORD_SIZE, (src2_reg != dst_reg) ? dst_reg : TMP_REG1, src1, src1w, TMP_REG2));
+ FAIL_IF(emit_op_mem(compiler, WORD_SIZE, (src2_reg != dst_reg) ? dst_reg : TMP_REG1, src1, src1w, TMP_REG1));
if (src2_reg != dst_reg) {
src1 = src2_reg;
@@ -3040,8 +3196,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fselect(struct sljit_compiler *com
}
if (src1 & SLJIT_MEM) {
- FAIL_IF(emit_fop_mem(compiler, (type & SLJIT_32) | FPU_LOAD, TMP_FREG1, src1, src1w));
- src1 = TMP_FREG1;
+ FAIL_IF(emit_fop_mem(compiler, (type & SLJIT_32) | FPU_LOAD, TMP_FREG2, src1, src1w));
+ src1 = TMP_FREG2;
}
FAIL_IF(push_inst16(compiler, IT | (get_cc(compiler, type & ~SLJIT_32) << 4) | 0x8));
@@ -4106,25 +4262,26 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compi
return const_;
}
-SLJIT_API_FUNC_ATTRIBUTE struct sljit_put_label* sljit_emit_put_label(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw dstw)
+SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_mov_addr(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw dstw)
{
- struct sljit_put_label *put_label;
+ struct sljit_jump *jump;
sljit_s32 dst_r;
CHECK_ERROR_PTR();
- CHECK_PTR(check_sljit_emit_put_label(compiler, dst, dstw));
+ CHECK_PTR(check_sljit_emit_mov_addr(compiler, dst, dstw));
ADJUST_LOCAL_OFFSET(dst, dstw);
- put_label = (struct sljit_put_label*)ensure_abuf(compiler, sizeof(struct sljit_put_label));
- PTR_FAIL_IF(!put_label);
- set_put_label(put_label, compiler, 0);
+ jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump));
+ PTR_FAIL_IF(!jump);
+ set_mov_addr(jump, compiler, 0);
dst_r = FAST_IS_REG(dst) ? dst : TMP_REG1;
- PTR_FAIL_IF(emit_imm32_const(compiler, dst_r, 0));
+ PTR_FAIL_IF(push_inst16(compiler, RDN3(dst_r)));
+ compiler->size += 3;
if (dst & SLJIT_MEM)
PTR_FAIL_IF(emit_op_mem(compiler, WORD_SIZE | STORE, dst_r, dst, dstw, TMP_REG2));
- return put_label;
+ return jump;
}
SLJIT_API_FUNC_ATTRIBUTE void sljit_set_jump_addr(sljit_uw addr, sljit_uw new_target, sljit_sw executable_offset)
diff --git a/src/3rdparty/pcre2/src/sljit/sljitNativeLOONGARCH_64.c b/src/3rdparty/pcre2/src/sljit/sljitNativeLOONGARCH_64.c
new file mode 100644
index 0000000000..2e1d742aee
--- /dev/null
+++ b/src/3rdparty/pcre2/src/sljit/sljitNativeLOONGARCH_64.c
@@ -0,0 +1,3765 @@
+/*
+ * Stack-less Just-In-Time compiler
+ *
+ * Copyright Zoltan Herczeg (hzmester@freemail.hu). All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND CONTRIBUTORS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+ * SHALL THE COPYRIGHT HOLDER(S) OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+SLJIT_API_FUNC_ATTRIBUTE const char* sljit_get_platform_name(void)
+{
+ return "LOONGARCH" SLJIT_CPUINFO;
+}
+
+typedef sljit_u32 sljit_ins;
+
+#define TMP_REG1 (SLJIT_NUMBER_OF_REGISTERS + 2)
+#define TMP_REG2 (SLJIT_NUMBER_OF_REGISTERS + 3)
+#define TMP_REG3 (SLJIT_NUMBER_OF_REGISTERS + 4)
+#define TMP_ZERO 0
+
+/* Flags are kept in volatile registers. */
+#define EQUAL_FLAG (SLJIT_NUMBER_OF_REGISTERS + 5)
+#define RETURN_ADDR_REG TMP_REG2
+#define OTHER_FLAG (SLJIT_NUMBER_OF_REGISTERS + 6)
+
+#define TMP_FREG1 (SLJIT_NUMBER_OF_FLOAT_REGISTERS + 1)
+#define TMP_FREG2 (SLJIT_NUMBER_OF_FLOAT_REGISTERS + 2)
+
+static const sljit_u8 reg_map[SLJIT_NUMBER_OF_REGISTERS + 7] = {
+ 0, 4, 5, 6, 7, 8, 9, 10, 11, 16, 17, 18, 19, 20, 22, 31, 30, 29, 28, 27, 26, 25, 24, 23, 3, 13, 1, 14, 12, 15
+};
+
+static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = {
+ 0, 0, 1, 2, 3, 4, 5, 6, 7, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 31, 30, 29, 28, 27, 26, 25, 24, 8, 9
+};
+
+/* --------------------------------------------------------------------- */
+/* Instrucion forms */
+/* --------------------------------------------------------------------- */
+
+/*
+LoongArch instructions are 32 bits wide, belonging to 9 basic instruction formats (and variants of them):
+
+| Format name | Composition |
+| 2R | Opcode + Rj + Rd |
+| 3R | Opcode + Rk + Rj + Rd |
+| 4R | Opcode + Ra + Rk + Rj + Rd |
+| 2RI8 | Opcode + I8 + Rj + Rd |
+| 2RI12 | Opcode + I12 + Rj + Rd |
+| 2RI14 | Opcode + I14 + Rj + Rd |
+| 2RI16 | Opcode + I16 + Rj + Rd |
+| 1RI21 | Opcode + I21L + Rj + I21H |
+| I26 | Opcode + I26L + I26H |
+
+Rd is the destination register operand, while Rj, Rk and Ra (“a” stands for “additional”) are the source register operands.
+I8/I12/I14/I16/I21/I26 are immediate operands of respective width. The longer I21 and I26 are stored in separate higher and
+lower parts in the instruction word, denoted by the “L” and “H” suffixes. */
+
+#define RD(rd) ((sljit_ins)reg_map[rd])
+#define RJ(rj) ((sljit_ins)reg_map[rj] << 5)
+#define RK(rk) ((sljit_ins)reg_map[rk] << 10)
+#define RA(ra) ((sljit_ins)reg_map[ra] << 15)
+
+#define FD(fd) ((sljit_ins)reg_map[fd])
+#define FRD(fd) ((sljit_ins)freg_map[fd])
+#define FRJ(fj) ((sljit_ins)freg_map[fj] << 5)
+#define FRK(fk) ((sljit_ins)freg_map[fk] << 10)
+#define FRA(fa) ((sljit_ins)freg_map[fa] << 15)
+
+#define IMM_V(imm) ((sljit_ins)(imm) << 10)
+#define IMM_I8(imm) (((sljit_ins)(imm)&0xff) << 10)
+#define IMM_I12(imm) (((sljit_ins)(imm)&0xfff) << 10)
+#define IMM_I14(imm) (((sljit_ins)(imm)&0xfff3) << 10)
+#define IMM_I16(imm) (((sljit_ins)(imm)&0xffff) << 10)
+#define IMM_I20(imm) (((sljit_ins)(imm)&0xffffffff) >> 12 << 5)
+#define IMM_I21(imm) ((((sljit_ins)(imm)&0xffff) << 10) | (((sljit_ins)(imm) >> 16) & 0x1f))
+#define IMM_I26(imm) ((((sljit_ins)(imm)&0xffff) << 10) | (((sljit_ins)(imm) >> 16) & 0x3ff))
+
+#define OPC_I26(opc) ((sljit_ins)(opc) << 26)
+#define OPC_1RI21(opc) ((sljit_ins)(opc) << 26)
+#define OPC_2RI16(opc) ((sljit_ins)(opc) << 26)
+#define OPC_2RI14(opc) ((sljit_ins)(opc) << 24)
+#define OPC_2RI12(opc) ((sljit_ins)(opc) << 22)
+#define OPC_2RI8(opc) ((sljit_ins)(opc) << 18)
+#define OPC_4R(opc) ((sljit_ins)(opc) << 20)
+#define OPC_3R(opc) ((sljit_ins)(opc) << 15)
+#define OPC_2R(opc) ((sljit_ins)(opc) << 10)
+#define OPC_1RI20(opc) ((sljit_ins)(opc) << 25)
+
+/* Arithmetic operation instructions */
+#define ADD_W OPC_3R(0x20)
+#define ADD_D OPC_3R(0x21)
+#define SUB_W OPC_3R(0x22)
+#define SUB_D OPC_3R(0x23)
+#define ADDI_W OPC_2RI12(0xa)
+#define ADDI_D OPC_2RI12(0xb)
+#define ANDI OPC_2RI12(0xd)
+#define ORI OPC_2RI12(0xe)
+#define XORI OPC_2RI12(0xf)
+#define ADDU16I_D OPC_2RI16(0x4)
+#define LU12I_W OPC_1RI20(0xa)
+#define LU32I_D OPC_1RI20(0xb)
+#define LU52I_D OPC_2RI12(0xc)
+#define SLT OPC_3R(0x24)
+#define SLTU OPC_3R(0x25)
+#define SLTI OPC_2RI12(0x8)
+#define SLTUI OPC_2RI12(0x9)
+#define PCADDI OPC_1RI20(0xc)
+#define PCALAU12I OPC_1RI20(0xd)
+#define PCADDU12I OPC_1RI20(0xe)
+#define PCADDU18I OPC_1RI20(0xf)
+#define NOR OPC_3R(0x28)
+#define AND OPC_3R(0x29)
+#define OR OPC_3R(0x2a)
+#define XOR OPC_3R(0x2b)
+#define ORN OPC_3R(0x2c)
+#define ANDN OPC_3R(0x2d)
+#define MUL_W OPC_3R(0x38)
+#define MULH_W OPC_3R(0x39)
+#define MULH_WU OPC_3R(0x3a)
+#define MUL_D OPC_3R(0x3b)
+#define MULH_D OPC_3R(0x3c)
+#define MULH_DU OPC_3R(0x3d)
+#define MULW_D_W OPC_3R(0x3e)
+#define MULW_D_WU OPC_3R(0x3f)
+#define DIV_W OPC_3R(0x40)
+#define MOD_W OPC_3R(0x41)
+#define DIV_WU OPC_3R(0x42)
+#define MOD_WU OPC_3R(0x43)
+#define DIV_D OPC_3R(0x44)
+#define MOD_D OPC_3R(0x45)
+#define DIV_DU OPC_3R(0x46)
+#define MOD_DU OPC_3R(0x47)
+
+/* Bit-shift instructions */
+#define SLL_W OPC_3R(0x2e)
+#define SRL_W OPC_3R(0x2f)
+#define SRA_W OPC_3R(0x30)
+#define SLL_D OPC_3R(0x31)
+#define SRL_D OPC_3R(0x32)
+#define SRA_D OPC_3R(0x33)
+#define ROTR_W OPC_3R(0x36)
+#define ROTR_D OPC_3R(0x37)
+#define SLLI_W OPC_3R(0x81)
+#define SLLI_D ((sljit_ins)(0x41) << 16)
+#define SRLI_W OPC_3R(0x89)
+#define SRLI_D ((sljit_ins)(0x45) << 16)
+#define SRAI_W OPC_3R(0x91)
+#define SRAI_D ((sljit_ins)(0x49) << 16)
+#define ROTRI_W OPC_3R(0x99)
+#define ROTRI_D ((sljit_ins)(0x4d) << 16)
+
+/* Bit-manipulation instructions */
+#define CLO_W OPC_2R(0x4)
+#define CLZ_W OPC_2R(0x5)
+#define CTO_W OPC_2R(0x6)
+#define CTZ_W OPC_2R(0x7)
+#define CLO_D OPC_2R(0x8)
+#define CLZ_D OPC_2R(0x9)
+#define CTO_D OPC_2R(0xa)
+#define CTZ_D OPC_2R(0xb)
+#define REVB_2H OPC_2R(0xc)
+#define REVB_4H OPC_2R(0xd)
+#define REVB_2W OPC_2R(0xe)
+#define REVB_D OPC_2R(0xf)
+#define REVH_2W OPC_2R(0x10)
+#define REVH_D OPC_2R(0x11)
+#define BITREV_4B OPC_2R(0x12)
+#define BITREV_8B OPC_2R(0x13)
+#define BITREV_W OPC_2R(0x14)
+#define BITREV_D OPC_2R(0x15)
+#define EXT_W_H OPC_2R(0x16)
+#define EXT_W_B OPC_2R(0x17)
+#define BSTRINS_W (0x1 << 22 | 1 << 21)
+#define BSTRPICK_W (0x1 << 22 | 1 << 21 | 1 << 15)
+#define BSTRINS_D (0x2 << 22)
+#define BSTRPICK_D (0x3 << 22)
+
+/* Branch instructions */
+#define BEQZ OPC_1RI21(0x10)
+#define BNEZ OPC_1RI21(0x11)
+#define JIRL OPC_2RI16(0x13)
+#define B OPC_I26(0x14)
+#define BL OPC_I26(0x15)
+#define BEQ OPC_2RI16(0x16)
+#define BNE OPC_2RI16(0x17)
+#define BLT OPC_2RI16(0x18)
+#define BGE OPC_2RI16(0x19)
+#define BLTU OPC_2RI16(0x1a)
+#define BGEU OPC_2RI16(0x1b)
+
+/* Memory access instructions */
+#define LD_B OPC_2RI12(0xa0)
+#define LD_H OPC_2RI12(0xa1)
+#define LD_W OPC_2RI12(0xa2)
+#define LD_D OPC_2RI12(0xa3)
+
+#define ST_B OPC_2RI12(0xa4)
+#define ST_H OPC_2RI12(0xa5)
+#define ST_W OPC_2RI12(0xa6)
+#define ST_D OPC_2RI12(0xa7)
+
+#define LD_BU OPC_2RI12(0xa8)
+#define LD_HU OPC_2RI12(0xa9)
+#define LD_WU OPC_2RI12(0xaa)
+
+#define LDX_B OPC_3R(0x7000)
+#define LDX_H OPC_3R(0x7008)
+#define LDX_W OPC_3R(0x7010)
+#define LDX_D OPC_3R(0x7018)
+
+#define STX_B OPC_3R(0x7020)
+#define STX_H OPC_3R(0x7028)
+#define STX_W OPC_3R(0x7030)
+#define STX_D OPC_3R(0x7038)
+
+#define LDX_BU OPC_3R(0x7040)
+#define LDX_HU OPC_3R(0x7048)
+#define LDX_WU OPC_3R(0x7050)
+
+#define PRELD OPC_2RI12(0xab)
+
+/* Atomic memory access instructions */
+#define LL_W OPC_2RI14(0x20)
+#define SC_W OPC_2RI14(0x21)
+#define LL_D OPC_2RI14(0x22)
+#define SC_D OPC_2RI14(0x23)
+
+/* LoongArch V1.10 Instructions */
+#define AMCAS_B OPC_3R(0x70B0)
+#define AMCAS_H OPC_3R(0x70B1)
+#define AMCAS_W OPC_3R(0x70B2)
+#define AMCAS_D OPC_3R(0x70B3)
+
+/* Other instructions */
+#define BREAK OPC_3R(0x54)
+#define DBGCALL OPC_3R(0x55)
+#define SYSCALL OPC_3R(0x56)
+
+/* Basic Floating-Point Instructions */
+/* Floating-Point Arithmetic Operation Instructions */
+#define FADD_S OPC_3R(0x201)
+#define FADD_D OPC_3R(0x202)
+#define FSUB_S OPC_3R(0x205)
+#define FSUB_D OPC_3R(0x206)
+#define FMUL_S OPC_3R(0x209)
+#define FMUL_D OPC_3R(0x20a)
+#define FDIV_S OPC_3R(0x20d)
+#define FDIV_D OPC_3R(0x20e)
+#define FCMP_COND_S OPC_4R(0xc1)
+#define FCMP_COND_D OPC_4R(0xc2)
+#define FCOPYSIGN_S OPC_3R(0x225)
+#define FCOPYSIGN_D OPC_3R(0x226)
+#define FSEL OPC_4R(0xd0)
+#define FABS_S OPC_2R(0x4501)
+#define FABS_D OPC_2R(0x4502)
+#define FNEG_S OPC_2R(0x4505)
+#define FNEG_D OPC_2R(0x4506)
+#define FMOV_S OPC_2R(0x4525)
+#define FMOV_D OPC_2R(0x4526)
+
+/* Floating-Point Conversion Instructions */
+#define FCVT_S_D OPC_2R(0x4646)
+#define FCVT_D_S OPC_2R(0x4649)
+#define FTINTRZ_W_S OPC_2R(0x46a1)
+#define FTINTRZ_W_D OPC_2R(0x46a2)
+#define FTINTRZ_L_S OPC_2R(0x46a9)
+#define FTINTRZ_L_D OPC_2R(0x46aa)
+#define FFINT_S_W OPC_2R(0x4744)
+#define FFINT_S_L OPC_2R(0x4746)
+#define FFINT_D_W OPC_2R(0x4748)
+#define FFINT_D_L OPC_2R(0x474a)
+
+/* Floating-Point Move Instructions */
+#define FMOV_S OPC_2R(0x4525)
+#define FMOV_D OPC_2R(0x4526)
+#define MOVGR2FR_W OPC_2R(0x4529)
+#define MOVGR2FR_D OPC_2R(0x452a)
+#define MOVGR2FRH_W OPC_2R(0x452b)
+#define MOVFR2GR_S OPC_2R(0x452d)
+#define MOVFR2GR_D OPC_2R(0x452e)
+#define MOVFRH2GR_S OPC_2R(0x452f)
+#define MOVGR2FCSR OPC_2R(0x4530)
+#define MOVFCSR2GR OPC_2R(0x4532)
+#define MOVFR2CF OPC_2R(0x4534)
+#define MOVCF2FR OPC_2R(0x4535)
+#define MOVGR2CF OPC_2R(0x4536)
+#define MOVCF2GR OPC_2R(0x4537)
+
+/* Floating-Point Branch Instructions */
+#define BCEQZ OPC_I26(0x12)
+#define BCNEZ OPC_I26(0x12)
+
+/* Floating-Point Common Memory Access Instructions */
+#define FLD_S OPC_2RI12(0xac)
+#define FLD_D OPC_2RI12(0xae)
+#define FST_S OPC_2RI12(0xad)
+#define FST_D OPC_2RI12(0xaf)
+
+#define FLDX_S OPC_3R(0x7060)
+#define FLDX_D OPC_3R(0x7068)
+#define FSTX_S OPC_3R(0x7070)
+#define FSTX_D OPC_3R(0x7078)
+
+/* Vector Instructions */
+
+/* Vector Arithmetic Instructions */
+#define VOR_V OPC_3R(0xe24d)
+#define VXOR_V OPC_3R(0xe24e)
+#define VAND_V OPC_3R(0xe24c)
+#define VMSKLTZ OPC_2R(0x1ca710)
+
+/* Vector Memory Access Instructions */
+#define VLD OPC_2RI12(0xb0)
+#define VST OPC_2RI12(0xb1)
+#define XVLD OPC_2RI12(0xb2)
+#define XVST OPC_2RI12(0xb3)
+#define VSTELM OPC_2RI8(0xc40)
+
+/* Vector Float Conversion Instructions */
+#define VFCVTL_D_S OPC_2R(0x1ca77c)
+
+/* Vector Bit Manipulate Instructions */
+#define VSLLWIL OPC_2R(0x1cc200)
+
+/* Vector Move And Shuffle Instructions */
+#define VLDREPL OPC_2R(0xc0000)
+#define VINSGR2VR OPC_2R(0x1cbac0)
+#define VPICKVE2GR_U OPC_2R(0x1cbce0)
+#define VREPLGR2VR OPC_2R(0x1ca7c0)
+#define VREPLVE OPC_3R(0xe244)
+#define VREPLVEI OPC_2R(0x1cbde0)
+#define XVPERMI OPC_2RI8(0x1dfa)
+
+#define I12_MAX (0x7ff)
+#define I12_MIN (-0x800)
+#define BRANCH16_MAX (0x7fff << 2)
+#define BRANCH16_MIN (-(0x8000 << 2))
+#define BRANCH21_MAX (0xfffff << 2)
+#define BRANCH21_MIN (-(0x100000 << 2))
+#define JUMP_MAX (0x1ffffff << 2)
+#define JUMP_MIN (-(0x2000000 << 2))
+#define JIRL_MAX (0x7fff << 2)
+#define JIRL_MIN (-(0x8000 << 2))
+
+#define S32_MAX (0x7fffffffl)
+#define S32_MIN (-0x80000000l)
+#define S52_MAX (0x7ffffffffffffl)
+
+#define INST(inst, type) ((sljit_ins)((type & SLJIT_32) ? inst##_W : inst##_D))
+
+/* LoongArch CPUCFG register for feature detection */
+#define LOONGARCH_CFG2 0x02
+#define LOONGARCH_CFG2_LAMCAS (1 << 28)
+
+static sljit_u32 cfg2_feature_list = 0;
+
+/* According to Software Development and Build Convention for LoongArch Architectures,
++ the status of LSX and LASX extension must be checked through HWCAP */
+#include <sys/auxv.h>
+
+#define LOONGARCH_HWCAP_LSX (1 << 4)
+#define LOONGARCH_HWCAP_LASX (1 << 5)
+
+static sljit_u32 hwcap_feature_list = 0;
+
+/* Feature type */
+#define GET_CFG2 0
+#define GET_HWCAP 1
+
+static SLJIT_INLINE sljit_u32 get_cpu_features(sljit_u32 feature_type)
+ {
+ if (cfg2_feature_list == 0)
+ __asm__ ("cpucfg %0, %1" : "+&r"(cfg2_feature_list) : "r"(LOONGARCH_CFG2));
+ if (hwcap_feature_list == 0)
+ hwcap_feature_list = (sljit_u32)getauxval(AT_HWCAP);
+
+ return feature_type ? hwcap_feature_list : cfg2_feature_list;
+ }
+
+static sljit_s32 push_inst(struct sljit_compiler *compiler, sljit_ins ins)
+{
+ sljit_ins *ptr = (sljit_ins*)ensure_buf(compiler, sizeof(sljit_ins));
+ FAIL_IF(!ptr);
+ *ptr = ins;
+ compiler->size++;
+ return SLJIT_SUCCESS;
+}
+
+static SLJIT_INLINE sljit_ins* detect_jump_type(struct sljit_jump *jump, sljit_ins *code, sljit_sw executable_offset)
+{
+ sljit_sw diff;
+ sljit_uw target_addr;
+ sljit_ins *inst;
+
+ inst = (sljit_ins *)jump->addr;
+
+ if (jump->flags & SLJIT_REWRITABLE_JUMP)
+ goto exit;
+
+ if (jump->flags & JUMP_ADDR)
+ target_addr = jump->u.target;
+ else {
+ SLJIT_ASSERT(jump->u.label != NULL);
+ target_addr = (sljit_uw)(code + jump->u.label->size) + (sljit_uw)executable_offset;
+ }
+
+ diff = (sljit_sw)target_addr - (sljit_sw)inst - executable_offset;
+
+ if (jump->flags & IS_COND) {
+ diff += SSIZE_OF(ins);
+
+ if (diff >= BRANCH16_MIN && diff <= BRANCH16_MAX) {
+ inst--;
+ inst[0] = (inst[0] & 0xfc0003ff) ^ 0x4000000;
+ jump->flags |= PATCH_B;
+ jump->addr = (sljit_uw)inst;
+ return inst;
+ }
+
+ diff -= SSIZE_OF(ins);
+ }
+
+ if (diff >= JUMP_MIN && diff <= JUMP_MAX) {
+ if (jump->flags & IS_COND) {
+ inst[-1] |= (sljit_ins)IMM_I16(2);
+ }
+
+ jump->flags |= PATCH_J;
+ return inst;
+ }
+
+ if (diff >= S32_MIN && diff <= S32_MAX) {
+ if (jump->flags & IS_COND)
+ inst[-1] |= (sljit_ins)IMM_I16(3);
+
+ jump->flags |= PATCH_REL32;
+ inst[1] = inst[0];
+ return inst + 1;
+ }
+
+ if (target_addr <= (sljit_uw)S32_MAX) {
+ if (jump->flags & IS_COND)
+ inst[-1] |= (sljit_ins)IMM_I16(3);
+
+ jump->flags |= PATCH_ABS32;
+ inst[1] = inst[0];
+ return inst + 1;
+ }
+
+ if (target_addr <= S52_MAX) {
+ if (jump->flags & IS_COND)
+ inst[-1] |= (sljit_ins)IMM_I16(4);
+
+ jump->flags |= PATCH_ABS52;
+ inst[2] = inst[0];
+ return inst + 2;
+ }
+
+exit:
+ if (jump->flags & IS_COND)
+ inst[-1] |= (sljit_ins)IMM_I16(5);
+ inst[3] = inst[0];
+ return inst + 3;
+}
+
+static SLJIT_INLINE sljit_sw mov_addr_get_length(struct sljit_jump *jump, sljit_ins *code_ptr, sljit_ins *code, sljit_sw executable_offset)
+{
+ sljit_uw addr;
+ sljit_sw diff;
+ SLJIT_UNUSED_ARG(executable_offset);
+
+ SLJIT_ASSERT(jump->flags < ((sljit_uw)6 << JUMP_SIZE_SHIFT));
+ if (jump->flags & JUMP_ADDR)
+ addr = jump->u.target;
+ else
+ addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code + jump->u.label->size, executable_offset);
+
+ diff = (sljit_sw)addr - (sljit_sw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);
+
+ if (diff >= S32_MIN && diff <= S32_MAX) {
+ SLJIT_ASSERT(jump->flags >= ((sljit_uw)1 << JUMP_SIZE_SHIFT));
+ jump->flags |= PATCH_REL32;
+ return 1;
+ }
+
+ if (addr <= S32_MAX) {
+ SLJIT_ASSERT(jump->flags >= ((sljit_uw)1 << JUMP_SIZE_SHIFT));
+ jump->flags |= PATCH_ABS32;
+ return 1;
+ }
+
+ if (addr <= S52_MAX) {
+ SLJIT_ASSERT(jump->flags >= ((sljit_uw)2 << JUMP_SIZE_SHIFT));
+ jump->flags |= PATCH_ABS52;
+ return 2;
+ }
+
+ SLJIT_ASSERT(jump->flags >= ((sljit_uw)3 << JUMP_SIZE_SHIFT));
+ return 3;
+}
+
+static SLJIT_INLINE void load_addr_to_reg(struct sljit_jump *jump, sljit_sw executable_offset)
+{
+ sljit_uw flags = jump->flags;
+ sljit_uw addr = (flags & JUMP_ADDR) ? jump->u.target : jump->u.label->u.addr;
+ sljit_ins *ins = (sljit_ins*)jump->addr;
+ sljit_u32 reg = (flags & JUMP_MOV_ADDR) ? *ins : TMP_REG1;
+ SLJIT_UNUSED_ARG(executable_offset);
+
+ if (flags & PATCH_REL32) {
+ addr -= (sljit_uw)SLJIT_ADD_EXEC_OFFSET(ins, executable_offset);
+
+ SLJIT_ASSERT((sljit_sw)addr >= S32_MIN && (sljit_sw)addr <= S32_MAX);
+
+ if ((addr & 0x800) != 0)
+ addr += 0x1000;
+
+ ins[0] = PCADDU12I | RD(reg) | IMM_I20(addr);
+
+ if (!(flags & JUMP_MOV_ADDR)) {
+ SLJIT_ASSERT((ins[1] & OPC_2RI16(0x3f)) == JIRL);
+ ins[1] = (ins[1] & (OPC_2RI16(0x3f) | 0x3ff)) | IMM_I16((addr & 0xfff) >> 2);
+ } else
+ ins[1] = ADDI_D | RD(reg) | RJ(reg) | IMM_I12(addr);
+ return;
+ }
+
+ if (flags & PATCH_ABS32) {
+ SLJIT_ASSERT(addr <= S32_MAX);
+ ins[0] = LU12I_W | RD(reg) | (sljit_ins)(((addr & 0xffffffff) >> 12) << 5);
+ } else if (flags & PATCH_ABS52) {
+ ins[0] = LU12I_W | RD(reg) | (sljit_ins)(((addr & 0xffffffff) >> 12) << 5);
+ ins[1] = LU32I_D | RD(reg) | (sljit_ins)(((addr >> 32) & 0xfffff) << 5);
+ ins += 1;
+ } else {
+ ins[0] = LU12I_W | RD(reg) | (sljit_ins)(((addr & 0xffffffff) >> 12) << 5);
+ ins[1] = LU32I_D | RD(reg) | (sljit_ins)(((addr >> 32) & 0xfffff) << 5);
+ ins[2] = LU52I_D | RD(reg) | RJ(reg) | IMM_I12(addr >> 52);
+ ins += 2;
+ }
+
+ if (!(flags & JUMP_MOV_ADDR)) {
+ SLJIT_ASSERT((ins[1] & OPC_2RI16(0x3f)) == JIRL);
+ ins[1] = (ins[1] & (OPC_2RI16(0x3f) | 0x3ff)) | IMM_I16((addr & 0xfff) >> 2);
+ } else
+ ins[1] = ORI | RD(reg) | RJ(reg) | IMM_I12(addr);
+}
+
+static void reduce_code_size(struct sljit_compiler *compiler)
+{
+ struct sljit_label *label;
+ struct sljit_jump *jump;
+ struct sljit_const *const_;
+ SLJIT_NEXT_DEFINE_TYPES;
+ sljit_uw total_size;
+ sljit_uw size_reduce = 0;
+ sljit_sw diff;
+
+ label = compiler->labels;
+ jump = compiler->jumps;
+ const_ = compiler->consts;
+
+ SLJIT_NEXT_INIT_TYPES();
+
+ while (1) {
+ SLJIT_GET_NEXT_MIN();
+
+ if (next_min_addr == SLJIT_MAX_ADDRESS)
+ break;
+
+ if (next_min_addr == next_label_size) {
+ label->size -= size_reduce;
+
+ label = label->next;
+ next_label_size = SLJIT_GET_NEXT_SIZE(label);
+ }
+
+ if (next_min_addr == next_const_addr) {
+ const_->addr -= size_reduce;
+ const_ = const_->next;
+ next_const_addr = SLJIT_GET_NEXT_ADDRESS(const_);
+ continue;
+ }
+
+ if (next_min_addr != next_jump_addr)
+ continue;
+
+ jump->addr -= size_reduce;
+ if (!(jump->flags & JUMP_MOV_ADDR)) {
+ total_size = JUMP_MAX_SIZE;
+
+ if (!(jump->flags & SLJIT_REWRITABLE_JUMP)) {
+ if (jump->flags & JUMP_ADDR) {
+ if (jump->u.target <= S32_MAX)
+ total_size = 2;
+ else if (jump->u.target <= S52_MAX)
+ total_size = 3;
+ } else {
+ /* Unit size: instruction. */
+ diff = (sljit_sw)jump->u.label->size - (sljit_sw)jump->addr;
+
+ if ((jump->flags & IS_COND) && (diff + 1) <= (BRANCH16_MAX / SSIZE_OF(ins)) && (diff + 1) >= (BRANCH16_MIN / SSIZE_OF(ins)))
+ total_size = 0;
+ else if (diff >= (JUMP_MIN / SSIZE_OF(ins)) && diff <= (JUMP_MAX / SSIZE_OF(ins)))
+ total_size = 1;
+ else if (diff >= (S32_MIN / SSIZE_OF(ins)) && diff <= (S32_MAX / SSIZE_OF(ins)))
+ total_size = 2;
+ }
+ }
+
+ size_reduce += JUMP_MAX_SIZE - total_size;
+ jump->flags |= total_size << JUMP_SIZE_SHIFT;
+ } else {
+ total_size = 3;
+
+ if (!(jump->flags & JUMP_ADDR)) {
+ /* Real size minus 1. Unit size: instruction. */
+ diff = (sljit_sw)jump->u.label->size - (sljit_sw)jump->addr;
+
+ if (diff >= (S32_MIN / SSIZE_OF(ins)) && diff <= (S32_MAX / SSIZE_OF(ins)))
+ total_size = 1;
+ } else if (jump->u.target < S32_MAX)
+ total_size = 1;
+ else if (jump->u.target <= S52_MAX)
+ total_size = 2;
+
+ size_reduce += 3 - total_size;
+ jump->flags |= total_size << JUMP_SIZE_SHIFT;
+ }
+
+ jump = jump->next;
+ next_jump_addr = SLJIT_GET_NEXT_ADDRESS(jump);
+ }
+
+ compiler->size -= size_reduce;
+}
+
+SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compiler, sljit_s32 options, void *exec_allocator_data)
+{
+ struct sljit_memory_fragment *buf;
+ sljit_ins *code;
+ sljit_ins *code_ptr;
+ sljit_ins *buf_ptr;
+ sljit_ins *buf_end;
+ sljit_uw word_count;
+ SLJIT_NEXT_DEFINE_TYPES;
+ sljit_sw executable_offset;
+ sljit_uw addr;
+
+ struct sljit_label *label;
+ struct sljit_jump *jump;
+ struct sljit_const *const_;
+
+ CHECK_ERROR_PTR();
+ CHECK_PTR(check_sljit_generate_code(compiler));
+
+ reduce_code_size(compiler);
+
+ code = (sljit_ins*)allocate_executable_memory(compiler->size * sizeof(sljit_ins), options, exec_allocator_data, &executable_offset);
+ PTR_FAIL_WITH_EXEC_IF(code);
+
+ reverse_buf(compiler);
+ buf = compiler->buf;
+
+ code_ptr = code;
+ word_count = 0;
+ label = compiler->labels;
+ jump = compiler->jumps;
+ const_ = compiler->consts;
+ SLJIT_NEXT_INIT_TYPES();
+ SLJIT_GET_NEXT_MIN();
+
+ do {
+ buf_ptr = (sljit_ins*)buf->memory;
+ buf_end = buf_ptr + (buf->used_size >> 2);
+ do {
+ *code_ptr = *buf_ptr++;
+ if (next_min_addr == word_count) {
+ SLJIT_ASSERT(!label || label->size >= word_count);
+ SLJIT_ASSERT(!jump || jump->addr >= word_count);
+ SLJIT_ASSERT(!const_ || const_->addr >= word_count);
+
+ /* These structures are ordered by their address. */
+ if (next_min_addr == next_label_size) {
+ label->u.addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);
+ label->size = (sljit_uw)(code_ptr - code);
+ label = label->next;
+ next_label_size = SLJIT_GET_NEXT_SIZE(label);
+ }
+
+ if (next_min_addr == next_jump_addr) {
+ if (!(jump->flags & JUMP_MOV_ADDR)) {
+ word_count = word_count - 1 + (jump->flags >> JUMP_SIZE_SHIFT);
+ jump->addr = (sljit_uw)code_ptr;
+ code_ptr = detect_jump_type(jump, code, executable_offset);
+ SLJIT_ASSERT((jump->flags & PATCH_B) || ((sljit_uw)code_ptr - jump->addr < (jump->flags >> JUMP_SIZE_SHIFT) * sizeof(sljit_ins)));
+ } else {
+ word_count += jump->flags >> JUMP_SIZE_SHIFT;
+ addr = (sljit_uw)code_ptr;
+ code_ptr += mov_addr_get_length(jump, code_ptr, code, executable_offset);
+ jump->addr = addr;
+ }
+ jump = jump->next;
+ next_jump_addr = SLJIT_GET_NEXT_ADDRESS(jump);
+ } else if (next_min_addr == next_const_addr) {
+ const_->addr = (sljit_uw)code_ptr;
+ const_ = const_->next;
+ next_const_addr = SLJIT_GET_NEXT_ADDRESS(const_);
+ }
+
+ SLJIT_GET_NEXT_MIN();
+ }
+ code_ptr++;
+ word_count++;
+ } while (buf_ptr < buf_end);
+
+ buf = buf->next;
+ } while (buf);
+
+ if (label && label->size == word_count) {
+ label->u.addr = (sljit_uw)code_ptr;
+ label->size = (sljit_uw)(code_ptr - code);
+ label = label->next;
+ }
+
+ SLJIT_ASSERT(!label);
+ SLJIT_ASSERT(!jump);
+ SLJIT_ASSERT(!const_);
+ SLJIT_ASSERT(code_ptr - code <= (sljit_sw)compiler->size);
+
+ jump = compiler->jumps;
+ while (jump) {
+ do {
+ if (!(jump->flags & (PATCH_B | PATCH_J)) || (jump->flags & JUMP_MOV_ADDR)) {
+ load_addr_to_reg(jump, executable_offset);
+ break;
+ }
+
+ addr = (jump->flags & JUMP_ADDR) ? jump->u.target : jump->u.label->u.addr;
+ buf_ptr = (sljit_ins *)jump->addr;
+ addr -= (sljit_uw)SLJIT_ADD_EXEC_OFFSET(buf_ptr, executable_offset);
+
+ if (jump->flags & PATCH_B) {
+ SLJIT_ASSERT((sljit_sw)addr >= BRANCH16_MIN && (sljit_sw)addr <= BRANCH16_MAX);
+ buf_ptr[0] |= (sljit_ins)IMM_I16(addr >> 2);
+ break;
+ }
+
+ SLJIT_ASSERT((sljit_sw)addr >= JUMP_MIN && (sljit_sw)addr <= JUMP_MAX);
+ if (jump->flags & IS_CALL)
+ buf_ptr[0] = BL | (sljit_ins)IMM_I26(addr >> 2);
+ else
+ buf_ptr[0] = B | (sljit_ins)IMM_I26(addr >> 2);
+ } while (0);
+ jump = jump->next;
+ }
+
+ compiler->error = SLJIT_ERR_COMPILED;
+ compiler->executable_offset = executable_offset;
+ compiler->executable_size = (sljit_uw)(code_ptr - code) * sizeof(sljit_ins);
+
+ code = (sljit_ins *)SLJIT_ADD_EXEC_OFFSET(code, executable_offset);
+ code_ptr = (sljit_ins *)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);
+
+ SLJIT_CACHE_FLUSH(code, code_ptr);
+ SLJIT_UPDATE_WX_FLAGS(code, code_ptr, 1);
+ return code;
+}
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_has_cpu_feature(sljit_s32 feature_type)
+{
+ switch (feature_type)
+ {
+ case SLJIT_HAS_FPU:
+#ifdef SLJIT_IS_FPU_AVAILABLE
+ return (SLJIT_IS_FPU_AVAILABLE) != 0;
+#else
+ /* Available by default. */
+ return 1;
+#endif
+
+ case SLJIT_HAS_LASX:
+ return (LOONGARCH_HWCAP_LASX & get_cpu_features(GET_HWCAP));
+
+ case SLJIT_HAS_SIMD:
+ return (LOONGARCH_HWCAP_LSX & get_cpu_features(GET_HWCAP));
+
+ case SLJIT_HAS_ATOMIC:
+ return (LOONGARCH_CFG2_LAMCAS & get_cpu_features(GET_CFG2));
+
+ case SLJIT_HAS_CLZ:
+ case SLJIT_HAS_CTZ:
+ case SLJIT_HAS_REV:
+ case SLJIT_HAS_ROT:
+ case SLJIT_HAS_PREFETCH:
+ case SLJIT_HAS_COPY_F32:
+ case SLJIT_HAS_COPY_F64:
+ return 1;
+
+ default:
+ return 0;
+ }
+}
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_cmp_info(sljit_s32 type)
+{
+ SLJIT_UNUSED_ARG(type);
+
+ return 0;
+}
+
+/* --------------------------------------------------------------------- */
+/* Entry, exit */
+/* --------------------------------------------------------------------- */
+
+/* Creates an index in data_transfer_insts array. */
+#define LOAD_DATA 0x01
+#define WORD_DATA 0x00
+#define BYTE_DATA 0x02
+#define HALF_DATA 0x04
+#define INT_DATA 0x06
+#define SIGNED_DATA 0x08
+/* Separates integer and floating point registers */
+#define GPR_REG 0x0f
+#define DOUBLE_DATA 0x10
+#define SINGLE_DATA 0x12
+
+#define MEM_MASK 0x1f
+
+#define ARG_TEST 0x00020
+#define ALT_KEEP_CACHE 0x00040
+#define CUMULATIVE_OP 0x00080
+#define IMM_OP 0x00100
+#define MOVE_OP 0x00200
+#define SRC2_IMM 0x00400
+
+#define UNUSED_DEST 0x00800
+#define REG_DEST 0x01000
+#define REG1_SOURCE 0x02000
+#define REG2_SOURCE 0x04000
+#define SLOW_SRC1 0x08000
+#define SLOW_SRC2 0x10000
+#define SLOW_DEST 0x20000
+#define MEM_USE_TMP2 0x40000
+
+#define STACK_STORE ST_D
+#define STACK_LOAD LD_D
+
+static sljit_s32 load_immediate(struct sljit_compiler *compiler, sljit_s32 dst_r, sljit_sw imm)
+{
+ if (imm <= I12_MAX && imm >= I12_MIN)
+ return push_inst(compiler, ADDI_D | RD(dst_r) | RJ(TMP_ZERO) | IMM_I12(imm));
+
+ if (imm <= 0x7fffffffl && imm >= -0x80000000l) {
+ FAIL_IF(push_inst(compiler, LU12I_W | RD(dst_r) | (sljit_ins)(((imm & 0xffffffff) >> 12) << 5)));
+ return push_inst(compiler, ORI | RD(dst_r) | RJ(dst_r) | IMM_I12(imm));
+ } else if (imm <= 0x7ffffffffffffl && imm >= -0x8000000000000l) {
+ FAIL_IF(push_inst(compiler, LU12I_W | RD(dst_r) | (sljit_ins)(((imm & 0xffffffff) >> 12) << 5)));
+ FAIL_IF(push_inst(compiler, ORI | RD(dst_r) | RJ(dst_r) | IMM_I12(imm)));
+ return push_inst(compiler, LU32I_D | RD(dst_r) | (sljit_ins)(((imm >> 32) & 0xfffff) << 5));
+ }
+ FAIL_IF(push_inst(compiler, LU12I_W | RD(dst_r) | (sljit_ins)(((imm & 0xffffffff) >> 12) << 5)));
+ FAIL_IF(push_inst(compiler, ORI | RD(dst_r) | RJ(dst_r) | IMM_I12(imm)));
+ FAIL_IF(push_inst(compiler, LU32I_D | RD(dst_r) | (sljit_ins)(((imm >> 32) & 0xfffff) << 5)));
+ return push_inst(compiler, LU52I_D | RD(dst_r) | RJ(dst_r) | IMM_I12(imm >> 52));
+}
+
+#define STACK_MAX_DISTANCE (-I12_MIN)
+
+static sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg, sljit_s32 arg, sljit_sw argw);
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_enter(struct sljit_compiler *compiler,
+ sljit_s32 options, sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds,
+ sljit_s32 fscratches, sljit_s32 fsaveds, sljit_s32 local_size)
+{
+ sljit_s32 i, tmp, offset;
+ sljit_s32 saved_arg_count = SLJIT_KEPT_SAVEDS_COUNT(options);
+
+ CHECK_ERROR();
+ CHECK(check_sljit_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size));
+ set_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size);
+
+ local_size += GET_SAVED_REGISTERS_SIZE(scratches, saveds - saved_arg_count, 1);
+ local_size += GET_SAVED_FLOAT_REGISTERS_SIZE(fscratches, fsaveds, f64);
+
+ local_size = (local_size + SLJIT_LOCALS_OFFSET + 15) & ~0xf;
+ compiler->local_size = local_size;
+
+ if (local_size <= STACK_MAX_DISTANCE) {
+ /* Frequent case. */
+ FAIL_IF(push_inst(compiler, ADDI_D | RD(SLJIT_SP) | RJ(SLJIT_SP) | IMM_I12(-local_size)));
+ offset = local_size - SSIZE_OF(sw);
+ local_size = 0;
+ } else {
+ FAIL_IF(push_inst(compiler, ADDI_D | RD(SLJIT_SP) | RJ(SLJIT_SP) | IMM_I12(STACK_MAX_DISTANCE)));
+ local_size -= STACK_MAX_DISTANCE;
+
+ if (local_size > STACK_MAX_DISTANCE)
+ FAIL_IF(load_immediate(compiler, TMP_REG1, local_size));
+ offset = STACK_MAX_DISTANCE - SSIZE_OF(sw);
+ }
+
+ FAIL_IF(push_inst(compiler, STACK_STORE | RD(RETURN_ADDR_REG) | RJ(SLJIT_SP) | IMM_I12(offset)));
+
+ tmp = SLJIT_S0 - saveds;
+ for (i = SLJIT_S0 - saved_arg_count; i > tmp; i--) {
+ offset -= SSIZE_OF(sw);
+ FAIL_IF(push_inst(compiler, STACK_STORE | RD(i) | RJ(SLJIT_SP) | IMM_I12(offset)));
+ }
+
+ for (i = scratches; i >= SLJIT_FIRST_SAVED_REG; i--) {
+ offset -= SSIZE_OF(sw);
+ FAIL_IF(push_inst(compiler, STACK_STORE | RD(i) | RJ(SLJIT_SP) | IMM_I12(offset)));
+ }
+
+ tmp = SLJIT_FS0 - fsaveds;
+ for (i = SLJIT_FS0; i > tmp; i--) {
+ offset -= SSIZE_OF(f64);
+ FAIL_IF(push_inst(compiler, FST_D | FRD(i) | RJ(SLJIT_SP) | IMM_I12(offset)));
+ }
+
+ for (i = fscratches; i >= SLJIT_FIRST_SAVED_FLOAT_REG; i--) {
+ offset -= SSIZE_OF(f64);
+ FAIL_IF(push_inst(compiler, FST_D | FRD(i) | RJ(SLJIT_SP) | IMM_I12(offset)));
+ }
+
+ if (local_size > STACK_MAX_DISTANCE)
+ FAIL_IF(push_inst(compiler, SUB_D | RD(SLJIT_SP) | RJ(SLJIT_SP) | RK(TMP_REG1)));
+ else if (local_size > 0)
+ FAIL_IF(push_inst(compiler, ADDI_D | RD(SLJIT_SP) | RJ(SLJIT_SP) | IMM_I12(-local_size)));
+
+ if (options & SLJIT_ENTER_REG_ARG)
+ return SLJIT_SUCCESS;
+
+ arg_types >>= SLJIT_ARG_SHIFT;
+ saved_arg_count = 0;
+ tmp = SLJIT_R0;
+
+ while (arg_types > 0) {
+ if ((arg_types & SLJIT_ARG_MASK) < SLJIT_ARG_TYPE_F64) {
+ if (!(arg_types & SLJIT_ARG_TYPE_SCRATCH_REG)) {
+ FAIL_IF(push_inst(compiler, ADDI_D | RD(SLJIT_S0 - saved_arg_count) | RJ(tmp) | IMM_I12(0)));
+ saved_arg_count++;
+ }
+ tmp++;
+ }
+
+ arg_types >>= SLJIT_ARG_SHIFT;
+ }
+
+ return SLJIT_SUCCESS;
+}
+
+#undef STACK_MAX_DISTANCE
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_set_context(struct sljit_compiler *compiler,
+ sljit_s32 options, sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds,
+ sljit_s32 fscratches, sljit_s32 fsaveds, sljit_s32 local_size)
+{
+ CHECK_ERROR();
+ CHECK(check_sljit_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size));
+ set_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size);
+
+ local_size += GET_SAVED_REGISTERS_SIZE(scratches, saveds - SLJIT_KEPT_SAVEDS_COUNT(options), 1);
+ local_size += GET_SAVED_FLOAT_REGISTERS_SIZE(fscratches, fsaveds, f64);
+
+ compiler->local_size = (local_size + SLJIT_LOCALS_OFFSET + 15) & ~0xf;
+
+ return SLJIT_SUCCESS;
+}
+
+#define STACK_MAX_DISTANCE (-I12_MIN - 16)
+
+static sljit_s32 emit_stack_frame_release(struct sljit_compiler *compiler, sljit_s32 is_return_to)
+{
+ sljit_s32 i, tmp, offset;
+ sljit_s32 local_size = compiler->local_size;
+
+ if (local_size > STACK_MAX_DISTANCE) {
+ local_size -= STACK_MAX_DISTANCE;
+
+ if (local_size > STACK_MAX_DISTANCE) {
+ FAIL_IF(load_immediate(compiler, TMP_REG2, local_size));
+ FAIL_IF(push_inst(compiler, ADD_D | RD(SLJIT_SP) | RJ(SLJIT_SP) | RK(TMP_REG2)));
+ } else
+ FAIL_IF(push_inst(compiler, ADDI_D | RD(SLJIT_SP) | RJ(SLJIT_SP) | IMM_I12(local_size)));
+
+ local_size = STACK_MAX_DISTANCE;
+ }
+
+ SLJIT_ASSERT(local_size > 0);
+
+ offset = local_size - SSIZE_OF(sw);
+ if (!is_return_to)
+ FAIL_IF(push_inst(compiler, STACK_LOAD | RD(RETURN_ADDR_REG) | RJ(SLJIT_SP) | IMM_I12(offset)));
+
+ tmp = SLJIT_S0 - compiler->saveds;
+ for (i = SLJIT_S0 - SLJIT_KEPT_SAVEDS_COUNT(compiler->options); i > tmp; i--) {
+ offset -= SSIZE_OF(sw);
+ FAIL_IF(push_inst(compiler, STACK_LOAD | RD(i) | RJ(SLJIT_SP) | IMM_I12(offset)));
+ }
+
+ for (i = compiler->scratches; i >= SLJIT_FIRST_SAVED_REG; i--) {
+ offset -= SSIZE_OF(sw);
+ FAIL_IF(push_inst(compiler, STACK_LOAD | RD(i) | RJ(SLJIT_SP) | IMM_I12(offset)));
+ }
+
+ tmp = SLJIT_FS0 - compiler->fsaveds;
+ for (i = SLJIT_FS0; i > tmp; i--) {
+ offset -= SSIZE_OF(f64);
+ FAIL_IF(push_inst(compiler, FLD_D | FRD(i) | RJ(SLJIT_SP) | IMM_I12(offset)));
+ }
+
+ for (i = compiler->fscratches; i >= SLJIT_FIRST_SAVED_FLOAT_REG; i--) {
+ offset -= SSIZE_OF(f64);
+ FAIL_IF(push_inst(compiler, FLD_D | FRD(i) | RJ(SLJIT_SP) | IMM_I12(offset)));
+ }
+
+ return push_inst(compiler, ADDI_D | RD(SLJIT_SP) | RJ(SLJIT_SP) | IMM_I12(local_size));
+}
+
+#undef STACK_MAX_DISTANCE
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return_void(struct sljit_compiler *compiler)
+{
+ CHECK_ERROR();
+ CHECK(check_sljit_emit_return_void(compiler));
+
+ FAIL_IF(emit_stack_frame_release(compiler, 0));
+ return push_inst(compiler, JIRL | RD(TMP_ZERO) | RJ(RETURN_ADDR_REG) | IMM_I12(0));
+}
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return_to(struct sljit_compiler *compiler,
+ sljit_s32 src, sljit_sw srcw)
+{
+ CHECK_ERROR();
+ CHECK(check_sljit_emit_return_to(compiler, src, srcw));
+
+ if (src & SLJIT_MEM) {
+ ADJUST_LOCAL_OFFSET(src, srcw);
+ FAIL_IF(emit_op_mem(compiler, WORD_DATA | LOAD_DATA, TMP_REG1, src, srcw));
+ src = TMP_REG1;
+ srcw = 0;
+ } else if (src >= SLJIT_FIRST_SAVED_REG && src <= (SLJIT_S0 - SLJIT_KEPT_SAVEDS_COUNT(compiler->options))) {
+ FAIL_IF(push_inst(compiler, ADDI_D | RD(TMP_REG1) | RJ(src) | IMM_I12(0)));
+ src = TMP_REG1;
+ srcw = 0;
+ }
+
+ FAIL_IF(emit_stack_frame_release(compiler, 1));
+
+ SLJIT_SKIP_CHECKS(compiler);
+ return sljit_emit_ijump(compiler, SLJIT_JUMP, src, srcw);
+}
+
+/* --------------------------------------------------------------------- */
+/* Operators */
+/* --------------------------------------------------------------------- */
+
+static const sljit_ins data_transfer_insts[16 + 4] = {
+/* u w s */ ST_D /* st.d */,
+/* u w l */ LD_D /* ld.d */,
+/* u b s */ ST_B /* st.b */,
+/* u b l */ LD_BU /* ld.bu */,
+/* u h s */ ST_H /* st.h */,
+/* u h l */ LD_HU /* ld.hu */,
+/* u i s */ ST_W /* st.w */,
+/* u i l */ LD_WU /* ld.wu */,
+
+/* s w s */ ST_D /* st.d */,
+/* s w l */ LD_D /* ld.d */,
+/* s b s */ ST_B /* st.b */,
+/* s b l */ LD_B /* ld.b */,
+/* s h s */ ST_H /* st.h */,
+/* s h l */ LD_H /* ld.h */,
+/* s i s */ ST_W /* st.w */,
+/* s i l */ LD_W /* ld.w */,
+
+/* d s */ FST_D /* fst.d */,
+/* d l */ FLD_D /* fld.d */,
+/* s s */ FST_S /* fst.s */,
+/* s l */ FLD_S /* fld.s */,
+};
+
+static const sljit_ins data_transfer_insts_x[16 + 4] = {
+/* u w s */ STX_D /* stx.d */,
+/* u w l */ LDX_D /* ldx.d */,
+/* u b s */ STX_B /* stx.b */,
+/* u b l */ LDX_BU /* ldx.bu */,
+/* u h s */ STX_H /* stx.h */,
+/* u h l */ LDX_HU /* ldx.hu */,
+/* u i s */ STX_W /* stx.w */,
+/* u i l */ LDX_WU /* ldx.wu */,
+
+/* s w s */ STX_D /* stx.d */,
+/* s w l */ LDX_D /* ldx.d */,
+/* s b s */ STX_B /* stx.b */,
+/* s b l */ LDX_B /* ldx.b */,
+/* s h s */ STX_H /* stx.h */,
+/* s h l */ LDX_H /* ldx.h */,
+/* s i s */ STX_W /* stx.w */,
+/* s i l */ LDX_W /* ldx.w */,
+
+/* d s */ FSTX_D /* fstx.d */,
+/* d l */ FLDX_D /* fldx.d */,
+/* s s */ FSTX_S /* fstx.s */,
+/* s l */ FLDX_S /* fldx.s */,
+};
+
+static sljit_s32 push_mem_inst(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg, sljit_s32 arg, sljit_sw argw)
+{
+ sljit_ins ins;
+ sljit_s32 base = arg & REG_MASK;
+
+ SLJIT_ASSERT(arg & SLJIT_MEM);
+
+ if (arg & OFFS_REG_MASK) {
+ sljit_s32 offs = OFFS_REG(arg);
+
+ SLJIT_ASSERT(!argw);
+ ins = data_transfer_insts_x[flags & MEM_MASK] |
+ ((flags & MEM_MASK) <= GPR_REG ? RD(reg) : FRD(reg)) |
+ RJ(base) | RK(offs);
+ } else {
+ SLJIT_ASSERT(argw <= 0xfff && argw >= I12_MIN);
+
+ ins = data_transfer_insts[flags & MEM_MASK] |
+ ((flags & MEM_MASK) <= GPR_REG ? RD(reg) : FRD(reg)) |
+ RJ(base) | IMM_I12(argw);
+ }
+ return push_inst(compiler, ins);
+}
+
+/* Can perform an operation using at most 1 instruction. */
+static sljit_s32 getput_arg_fast(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg, sljit_s32 arg, sljit_sw argw)
+{
+ SLJIT_ASSERT(arg & SLJIT_MEM);
+
+ /* argw == 0 (ldx/stx rd, rj, rk) can be used.
+ * argw in [-2048, 2047] (ld/st rd, rj, imm) can be used. */
+ if (!argw || (!(arg & OFFS_REG_MASK) && (argw <= I12_MAX && argw >= I12_MIN))) {
+ /* Works for both absolute and relative addresses. */
+ if (SLJIT_UNLIKELY(flags & ARG_TEST))
+ return 1;
+
+ FAIL_IF(push_mem_inst(compiler, flags, reg, arg, argw));
+ return -1;
+ }
+ return 0;
+}
+
+#define TO_ARGW_HI(argw) (((argw) & ~0xfff) + (((argw) & 0x800) ? 0x1000 : 0))
+
+/* See getput_arg below.
+ Note: can_cache is called only for binary operators. */
+static sljit_s32 can_cache(sljit_s32 arg, sljit_sw argw, sljit_s32 next_arg, sljit_sw next_argw)
+{
+ SLJIT_ASSERT((arg & SLJIT_MEM) && (next_arg & SLJIT_MEM));
+
+ if (arg & OFFS_REG_MASK)
+ return 0;
+
+ if (arg == next_arg) {
+ if (((next_argw - argw) <= I12_MAX && (next_argw - argw) >= I12_MIN)
+ || TO_ARGW_HI(argw) == TO_ARGW_HI(next_argw))
+ return 1;
+ return 0;
+ }
+
+ return 0;
+}
+
+/* Emit the necessary instructions. See can_cache above. */
+static sljit_s32 getput_arg(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg, sljit_s32 arg, sljit_sw argw, sljit_s32 next_arg, sljit_sw next_argw)
+{
+ sljit_s32 base = arg & REG_MASK;
+ sljit_s32 tmp_r = (flags & MEM_USE_TMP2) ? TMP_REG2 : TMP_REG1;
+ sljit_sw offset;
+
+ SLJIT_ASSERT(arg & SLJIT_MEM);
+ if (!(next_arg & SLJIT_MEM)) {
+ next_arg = 0;
+ next_argw = 0;
+ }
+
+ if (SLJIT_UNLIKELY(arg & OFFS_REG_MASK)) {
+ argw &= 0x3;
+
+ if (SLJIT_UNLIKELY(argw))
+ FAIL_IF(push_inst(compiler, SLLI_D | RD(TMP_REG3) | RJ(OFFS_REG(arg)) | IMM_I12(argw)));
+ return push_mem_inst(compiler, flags, reg, SLJIT_MEM2(base, TMP_REG3), 0);
+ }
+
+ if (compiler->cache_arg == arg && argw - compiler->cache_argw <= I12_MAX && argw - compiler->cache_argw >= I12_MIN)
+ return push_mem_inst(compiler, flags, reg, SLJIT_MEM1(TMP_REG3), argw - compiler->cache_argw);
+
+ if (compiler->cache_arg == SLJIT_MEM && (argw - compiler->cache_argw <= I12_MAX) && (argw - compiler->cache_argw >= I12_MIN)) {
+ offset = argw - compiler->cache_argw;
+ } else {
+ sljit_sw argw_hi=TO_ARGW_HI(argw);
+ compiler->cache_arg = SLJIT_MEM;
+
+ if (next_arg && next_argw - argw <= I12_MAX && next_argw - argw >= I12_MIN && argw_hi != TO_ARGW_HI(next_argw)) {
+ FAIL_IF(load_immediate(compiler, TMP_REG3, argw));
+ compiler->cache_argw = argw;
+ offset = 0;
+ } else {
+ FAIL_IF(load_immediate(compiler, TMP_REG3, argw_hi));
+ compiler->cache_argw = argw_hi;
+ offset = argw & 0xfff;
+ argw = argw_hi;
+ }
+ }
+
+ if (!base)
+ return push_mem_inst(compiler, flags, reg, SLJIT_MEM1(TMP_REG3), offset);
+
+ if (arg == next_arg && next_argw - argw <= I12_MAX && next_argw - argw >= I12_MIN) {
+ compiler->cache_arg = arg;
+ FAIL_IF(push_inst(compiler, ADD_D | RD(TMP_REG3) | RJ(TMP_REG3) | RK(base)));
+ return push_mem_inst(compiler, flags, reg, SLJIT_MEM1(TMP_REG3), offset);
+ }
+
+ if (!offset)
+ return push_mem_inst(compiler, flags, reg, SLJIT_MEM2(base, TMP_REG3), 0);
+
+ FAIL_IF(push_inst(compiler, ADD_D | RD(tmp_r) | RJ(TMP_REG3) | RK(base)));
+ return push_mem_inst(compiler, flags, reg, SLJIT_MEM1(tmp_r), offset);
+}
+
+static sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg, sljit_s32 arg, sljit_sw argw)
+{
+ sljit_s32 base = arg & REG_MASK;
+ sljit_s32 tmp_r = TMP_REG1;
+
+ if (getput_arg_fast(compiler, flags, reg, arg, argw))
+ return compiler->error;
+
+ if ((flags & MEM_MASK) <= GPR_REG && (flags & LOAD_DATA))
+ tmp_r = reg;
+
+ if (SLJIT_UNLIKELY(arg & OFFS_REG_MASK)) {
+ argw &= 0x3;
+
+ if (SLJIT_UNLIKELY(argw))
+ FAIL_IF(push_inst(compiler, SLLI_D | RD(tmp_r) | RJ(OFFS_REG(arg)) | IMM_I12(argw)));
+ return push_mem_inst(compiler, flags, reg, SLJIT_MEM2(base, tmp_r), 0);
+ } else {
+ FAIL_IF(load_immediate(compiler, tmp_r, argw));
+
+ if (base != 0)
+ return push_mem_inst(compiler, flags, reg, SLJIT_MEM2(base, tmp_r), 0);
+ return push_mem_inst(compiler, flags, reg, SLJIT_MEM1(tmp_r), 0);
+ }
+}
+
+static SLJIT_INLINE sljit_s32 emit_op_mem2(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg, sljit_s32 arg1, sljit_sw arg1w, sljit_s32 arg2, sljit_sw arg2w)
+{
+ if (getput_arg_fast(compiler, flags, reg, arg1, arg1w))
+ return compiler->error;
+ return getput_arg(compiler, flags, reg, arg1, arg1w, arg2, arg2w);
+}
+
+#define IMM_EXTEND(v) (IMM_I12((op & SLJIT_32) ? (v) : (32 + (v))))
+
+/* andi/ori/xori are zero-extended */
+#define EMIT_LOGICAL(op_imm, op_reg) \
+ if (flags & SRC2_IMM) { \
+ if (op & SLJIT_SET_Z) {\
+ FAIL_IF(push_inst(compiler, ADDI_D | RD(EQUAL_FLAG) | RJ(TMP_ZERO) | IMM_I12(src2))); \
+ FAIL_IF(push_inst(compiler, op_reg | RD(EQUAL_FLAG) | RJ(src1) | RK(EQUAL_FLAG))); \
+ } \
+ if (!(flags & UNUSED_DEST)) { \
+ if (dst == src1) { \
+ FAIL_IF(push_inst(compiler, ADDI_D | RD(TMP_REG1) | RJ(TMP_ZERO) | IMM_I12(src2))); \
+ FAIL_IF(push_inst(compiler, op_reg | RD(dst) | RJ(src1) | RK(TMP_REG1))); \
+ } else { \
+ FAIL_IF(push_inst(compiler, ADDI_D | RD(dst) | RJ(TMP_ZERO) | IMM_I12(src2))); \
+ FAIL_IF(push_inst(compiler, op_reg | RD(dst) | RJ(src1) | RK(dst))); \
+ } \
+ } \
+ } else { \
+ if (op & SLJIT_SET_Z) \
+ FAIL_IF(push_inst(compiler, op_reg | RD(EQUAL_FLAG) | RJ(src1) | RK(src2))); \
+ if (!(flags & UNUSED_DEST)) \
+ FAIL_IF(push_inst(compiler, op_reg | RD(dst) | RJ(src1) | RK(src2))); \
+ } \
+ while (0)
+
+#define EMIT_SHIFT(imm, reg) \
+ op_imm = (imm); \
+ op_reg = (reg)
+
+static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 flags,
+ sljit_s32 dst, sljit_s32 src1, sljit_sw src2)
+{
+ sljit_s32 is_overflow, is_carry, carry_src_r, is_handled, reg;
+ sljit_ins op_imm, op_reg;
+ sljit_ins word_size = ((op & SLJIT_32) ? 32 : 64);
+
+ switch (GET_OPCODE(op)) {
+ case SLJIT_MOV:
+ SLJIT_ASSERT(src1 == TMP_ZERO && !(flags & SRC2_IMM));
+ if (dst != src2)
+ return push_inst(compiler, INST(ADD, op) | RD(dst) | RJ(src2) | IMM_I12(0));
+ return SLJIT_SUCCESS;
+
+ case SLJIT_MOV_U8:
+ SLJIT_ASSERT(src1 == TMP_ZERO && !(flags & SRC2_IMM));
+ if ((flags & (REG_DEST | REG2_SOURCE)) == (REG_DEST | REG2_SOURCE))
+ return push_inst(compiler, ANDI | RD(dst) | RJ(src2) | IMM_I12(0xff));
+ SLJIT_ASSERT(dst == src2);
+ return SLJIT_SUCCESS;
+
+ case SLJIT_MOV_S8:
+ SLJIT_ASSERT(src1 == TMP_ZERO && !(flags & SRC2_IMM));
+ if ((flags & (REG_DEST | REG2_SOURCE)) == (REG_DEST | REG2_SOURCE))
+ return push_inst(compiler, EXT_W_B | RD(dst) | RJ(src2));
+ SLJIT_ASSERT(dst == src2);
+ return SLJIT_SUCCESS;
+
+ case SLJIT_MOV_U16:
+ SLJIT_ASSERT(src1 == TMP_ZERO && !(flags & SRC2_IMM));
+ if ((flags & (REG_DEST | REG2_SOURCE)) == (REG_DEST | REG2_SOURCE))
+ return push_inst(compiler, INST(BSTRPICK, op) | RD(dst) | RJ(src2) | (15 << 16));
+ SLJIT_ASSERT(dst == src2);
+ return SLJIT_SUCCESS;
+
+ case SLJIT_MOV_S16:
+ SLJIT_ASSERT(src1 == TMP_ZERO && !(flags & SRC2_IMM));
+ if ((flags & (REG_DEST | REG2_SOURCE)) == (REG_DEST | REG2_SOURCE))
+ return push_inst(compiler, EXT_W_H | RD(dst) | RJ(src2));
+ SLJIT_ASSERT(dst == src2);
+ return SLJIT_SUCCESS;
+
+ case SLJIT_MOV_U32:
+ SLJIT_ASSERT(src1 == TMP_ZERO && !(flags & SRC2_IMM));
+ if ((flags & (REG_DEST | REG2_SOURCE)) == (REG_DEST | REG2_SOURCE))
+ return push_inst(compiler, BSTRPICK_D | RD(dst) | RJ(src2) | (31 << 16));
+ SLJIT_ASSERT(dst == src2);
+ return SLJIT_SUCCESS;
+
+ case SLJIT_MOV_S32:
+ SLJIT_ASSERT(src1 == TMP_ZERO && !(flags & SRC2_IMM));
+ if ((flags & (REG_DEST | REG2_SOURCE)) == (REG_DEST | REG2_SOURCE))
+ return push_inst(compiler, SLLI_W | RD(dst) | RJ(src2) | IMM_I12(0));
+ SLJIT_ASSERT(dst == src2);
+ return SLJIT_SUCCESS;
+
+ case SLJIT_CLZ:
+ SLJIT_ASSERT(src1 == TMP_ZERO && !(flags & SRC2_IMM));
+ return push_inst(compiler, INST(CLZ, op) | RD(dst) | RJ(src2));
+
+ case SLJIT_CTZ:
+ SLJIT_ASSERT(src1 == TMP_ZERO && !(flags & SRC2_IMM));
+ return push_inst(compiler, INST(CTZ, op) | RD(dst) | RJ(src2));
+
+ case SLJIT_REV:
+ SLJIT_ASSERT(src1 == TMP_ZERO && !(flags & SRC2_IMM));
+ return push_inst(compiler, ((op & SLJIT_32) ? REVB_2W : REVB_D) | RD(dst) | RJ(src2));
+
+ case SLJIT_REV_S16:
+ SLJIT_ASSERT(src1 == TMP_ZERO && !(flags & SRC2_IMM));
+ FAIL_IF(push_inst(compiler, REVB_2H | RD(dst) | RJ(src2)));
+ return push_inst(compiler, EXT_W_H | RD(dst) | RJ(dst));
+
+ case SLJIT_REV_U16:
+ SLJIT_ASSERT(src1 == TMP_ZERO && !(flags & SRC2_IMM));
+ FAIL_IF(push_inst(compiler, REVB_2H | RD(dst) | RJ(src2)));
+ return push_inst(compiler, INST(BSTRPICK, op) | RD(dst) | RJ(dst) | (15 << 16));
+
+ case SLJIT_REV_S32:
+ SLJIT_ASSERT(src1 == TMP_ZERO && !(flags & SRC2_IMM) && dst != TMP_REG1);
+ FAIL_IF(push_inst(compiler, REVB_2W | RD(dst) | RJ(src2)));
+ return push_inst(compiler, SLLI_W | RD(dst) | RJ(dst) | IMM_I12(0));
+
+ case SLJIT_REV_U32:
+ SLJIT_ASSERT(src1 == TMP_ZERO && !(flags & SRC2_IMM) && dst != TMP_REG1);
+ FAIL_IF(push_inst(compiler, REVB_2W | RD(dst) | RJ(src2)));
+ return push_inst(compiler, BSTRPICK_D | RD(dst) | RJ(dst) | (31 << 16));
+
+ case SLJIT_ADD:
+ /* Overflow computation (both add and sub): overflow = src1_sign ^ src2_sign ^ result_sign ^ carry_flag */
+ is_overflow = GET_FLAG_TYPE(op) == SLJIT_OVERFLOW;
+ carry_src_r = GET_FLAG_TYPE(op) == SLJIT_CARRY;
+
+ if (flags & SRC2_IMM) {
+ if (is_overflow) {
+ if (src2 >= 0)
+ FAIL_IF(push_inst(compiler, INST(ADDI, op) | RD(EQUAL_FLAG) | RJ(src1) | IMM_I12(0)));
+ else {
+ FAIL_IF(push_inst(compiler, INST(ADDI, op) | RD(EQUAL_FLAG) | RJ(TMP_ZERO) | IMM_I12(-1)));
+ FAIL_IF(push_inst(compiler, XOR | RD(EQUAL_FLAG) | RJ(src1) | RK(EQUAL_FLAG)));
+ }
+ } else if (op & SLJIT_SET_Z)
+ FAIL_IF(push_inst(compiler, INST(ADDI, op) | RD(EQUAL_FLAG) | RJ(src1) | IMM_I12(src2)));
+
+ /* Only the zero flag is needed. */
+ if (!(flags & UNUSED_DEST) || (op & VARIABLE_FLAG_MASK))
+ FAIL_IF(push_inst(compiler, INST(ADDI, op) | RD(dst) | RJ(src1) | IMM_I12(src2)));
+ } else {
+ if (is_overflow)
+ FAIL_IF(push_inst(compiler, XOR | RD(EQUAL_FLAG) | RJ(src1) | RK(src2)));
+ else if (op & SLJIT_SET_Z)
+ FAIL_IF(push_inst(compiler, INST(ADD, op) | RD(EQUAL_FLAG) | RJ(src1) | RK(src2)));
+
+ if (is_overflow || carry_src_r != 0) {
+ if (src1 != dst)
+ carry_src_r = (sljit_s32)src1;
+ else if (src2 != dst)
+ carry_src_r = (sljit_s32)src2;
+ else {
+ FAIL_IF(push_inst(compiler, INST(ADDI, op) | RD(OTHER_FLAG) | RJ(src1) | IMM_I12(0)));
+ carry_src_r = OTHER_FLAG;
+ }
+ }
+
+ /* Only the zero flag is needed. */
+ if (!(flags & UNUSED_DEST) || (op & VARIABLE_FLAG_MASK))
+ FAIL_IF(push_inst(compiler, INST(ADD, op) | RD(dst) | RJ(src1) | RK(src2)));
+ }
+
+ /* Carry is zero if a + b >= a or a + b >= b, otherwise it is 1. */
+ if (is_overflow || carry_src_r != 0) {
+ if (flags & SRC2_IMM)
+ FAIL_IF(push_inst(compiler, SLTUI | RD(OTHER_FLAG) | RJ(dst) | IMM_I12(src2)));
+ else
+ FAIL_IF(push_inst(compiler, SLTU | RD(OTHER_FLAG) | RJ(dst) | RK(carry_src_r)));
+ }
+
+ if (!is_overflow)
+ return SLJIT_SUCCESS;
+
+ FAIL_IF(push_inst(compiler, XOR | RD(TMP_REG1) | RJ(dst) | RK(EQUAL_FLAG)));
+ if (op & SLJIT_SET_Z)
+ FAIL_IF(push_inst(compiler, INST(ADD, op) | RD(EQUAL_FLAG) | RJ(dst) | IMM_I12(0)));
+ FAIL_IF(push_inst(compiler, INST(SRLI, op) | RD(TMP_REG1) | RJ(TMP_REG1) | IMM_EXTEND(31)));
+ return push_inst(compiler, XOR | RD(OTHER_FLAG) | RJ(TMP_REG1) | RK(OTHER_FLAG));
+
+ case SLJIT_ADDC:
+ carry_src_r = GET_FLAG_TYPE(op) == SLJIT_CARRY;
+
+ if (flags & SRC2_IMM) {
+ FAIL_IF(push_inst(compiler, ADDI_D | RD(dst) | RJ(src1) | IMM_I12(src2)));
+ } else {
+ if (carry_src_r != 0) {
+ if (src1 != dst)
+ carry_src_r = (sljit_s32)src1;
+ else if (src2 != dst)
+ carry_src_r = (sljit_s32)src2;
+ else {
+ FAIL_IF(push_inst(compiler, ADDI_D | RD(EQUAL_FLAG) | RJ(src1) | IMM_I12(0)));
+ carry_src_r = EQUAL_FLAG;
+ }
+ }
+
+ FAIL_IF(push_inst(compiler, ADD_D | RD(dst) | RJ(src1) | RK(src2)));
+ }
+
+ /* Carry is zero if a + b >= a or a + b >= b, otherwise it is 1. */
+ if (carry_src_r != 0) {
+ if (flags & SRC2_IMM)
+ FAIL_IF(push_inst(compiler, SLTUI | RD(EQUAL_FLAG) | RJ(dst) | IMM_I12(src2)));
+ else
+ FAIL_IF(push_inst(compiler, SLTU | RD(EQUAL_FLAG) | RJ(dst) | RK(carry_src_r)));
+ }
+
+ FAIL_IF(push_inst(compiler, ADD_D | RD(dst) | RJ(dst) | RK(OTHER_FLAG)));
+
+ if (carry_src_r == 0)
+ return SLJIT_SUCCESS;
+
+ /* Set ULESS_FLAG (dst == 0) && (OTHER_FLAG == 1). */
+ FAIL_IF(push_inst(compiler, SLTU | RD(OTHER_FLAG) | RJ(dst) | RK(OTHER_FLAG)));
+ /* Set carry flag. */
+ return push_inst(compiler, OR | RD(OTHER_FLAG) | RJ(OTHER_FLAG) | RK(EQUAL_FLAG));
+
+ case SLJIT_SUB:
+ if ((flags & SRC2_IMM) && src2 == I12_MIN) {
+ FAIL_IF(push_inst(compiler, ADDI_D | RD(TMP_REG2) | RJ(TMP_ZERO) | IMM_I12(src2)));
+ src2 = TMP_REG2;
+ flags &= ~SRC2_IMM;
+ }
+
+ is_handled = 0;
+
+ if (flags & SRC2_IMM) {
+ if (GET_FLAG_TYPE(op) == SLJIT_LESS) {
+ FAIL_IF(push_inst(compiler, SLTUI | RD(OTHER_FLAG) | RJ(src1) | IMM_I12(src2)));
+ is_handled = 1;
+ } else if (GET_FLAG_TYPE(op) == SLJIT_SIG_LESS) {
+ FAIL_IF(push_inst(compiler, SLTI | RD(OTHER_FLAG) | RJ(src1) | IMM_I12(src2)));
+ is_handled = 1;
+ }
+ }
+
+ if (!is_handled && GET_FLAG_TYPE(op) >= SLJIT_LESS && GET_FLAG_TYPE(op) <= SLJIT_SIG_LESS_EQUAL) {
+ is_handled = 1;
+
+ if (flags & SRC2_IMM) {
+ reg = (src1 == TMP_REG1) ? TMP_REG2 : TMP_REG1;
+ FAIL_IF(push_inst(compiler, ADDI_D | RD(reg) | RJ(TMP_ZERO) | IMM_I12(src2)));
+ src2 = reg;
+ flags &= ~SRC2_IMM;
+ }
+
+ switch (GET_FLAG_TYPE(op)) {
+ case SLJIT_LESS:
+ FAIL_IF(push_inst(compiler, SLTU | RD(OTHER_FLAG) | RJ(src1) | RK(src2)));
+ break;
+ case SLJIT_GREATER:
+ FAIL_IF(push_inst(compiler, SLTU | RD(OTHER_FLAG) | RJ(src2) | RK(src1)));
+ break;
+ case SLJIT_SIG_LESS:
+ FAIL_IF(push_inst(compiler, SLT | RD(OTHER_FLAG) | RJ(src1) | RK(src2)));
+ break;
+ case SLJIT_SIG_GREATER:
+ FAIL_IF(push_inst(compiler, SLT | RD(OTHER_FLAG) | RJ(src2) | RK(src1)));
+ break;
+ }
+ }
+
+ if (is_handled) {
+ if (flags & SRC2_IMM) {
+ if (op & SLJIT_SET_Z)
+ FAIL_IF(push_inst(compiler, INST(ADDI, op) | RD(EQUAL_FLAG) | RJ(src1) | IMM_I12(-src2)));
+ if (!(flags & UNUSED_DEST))
+ return push_inst(compiler, INST(ADDI, op) | RD(dst) | RJ(src1) | IMM_I12(-src2));
+ } else {
+ if (op & SLJIT_SET_Z)
+ FAIL_IF(push_inst(compiler, INST(SUB, op) | RD(EQUAL_FLAG) | RJ(src1) | RK(src2)));
+ if (!(flags & UNUSED_DEST))
+ return push_inst(compiler, INST(SUB, op) | RD(dst) | RJ(src1) | RK(src2));
+ }
+ return SLJIT_SUCCESS;
+ }
+
+ is_overflow = GET_FLAG_TYPE(op) == SLJIT_OVERFLOW;
+ is_carry = GET_FLAG_TYPE(op) == SLJIT_CARRY;
+
+ if (flags & SRC2_IMM) {
+ if (is_overflow) {
+ if (src2 >= 0)
+ FAIL_IF(push_inst(compiler, INST(ADDI, op) | RD(EQUAL_FLAG) | RJ(src1) | IMM_I12(0)));
+ else {
+ FAIL_IF(push_inst(compiler, INST(ADDI, op) | RD(EQUAL_FLAG) | RJ(src1) | IMM_I12(-1)));
+ FAIL_IF(push_inst(compiler, XOR | RD(EQUAL_FLAG) | RJ(src1) | RK(EQUAL_FLAG)));
+ }
+ } else if (op & SLJIT_SET_Z)
+ FAIL_IF(push_inst(compiler, INST(ADDI, op) | RD(EQUAL_FLAG) | RJ(src1) | IMM_I12(-src2)));
+
+ if (is_overflow || is_carry)
+ FAIL_IF(push_inst(compiler, SLTUI | RD(OTHER_FLAG) | RJ(src1) | IMM_I12(src2)));
+
+ /* Only the zero flag is needed. */
+ if (!(flags & UNUSED_DEST) || (op & VARIABLE_FLAG_MASK))
+ FAIL_IF(push_inst(compiler, INST(ADDI, op) | RD(dst) | RJ(src1) | IMM_I12(-src2)));
+ } else {
+ if (is_overflow)
+ FAIL_IF(push_inst(compiler, XOR | RD(EQUAL_FLAG) | RJ(src1) | RK(src2)));
+ else if (op & SLJIT_SET_Z)
+ FAIL_IF(push_inst(compiler, INST(SUB, op) | RD(EQUAL_FLAG) | RJ(src1) | RK(src2)));
+
+ if (is_overflow || is_carry)
+ FAIL_IF(push_inst(compiler, SLTU | RD(OTHER_FLAG) | RJ(src1) | RK(src2)));
+
+ /* Only the zero flag is needed. */
+ if (!(flags & UNUSED_DEST) || (op & VARIABLE_FLAG_MASK))
+ FAIL_IF(push_inst(compiler, INST(SUB, op) | RD(dst) | RJ(src1) | RK(src2)));
+ }
+
+ if (!is_overflow)
+ return SLJIT_SUCCESS;
+
+ FAIL_IF(push_inst(compiler, XOR | RD(TMP_REG1) | RJ(dst) | RK(EQUAL_FLAG)));
+ if (op & SLJIT_SET_Z)
+ FAIL_IF(push_inst(compiler, INST(ADDI, op) | RD(EQUAL_FLAG) | RJ(dst) | IMM_I12(0)));
+ FAIL_IF(push_inst(compiler, INST(SRLI, op) | RD(TMP_REG1) | RJ(TMP_REG1) | IMM_EXTEND(31)));
+ return push_inst(compiler, XOR | RD(OTHER_FLAG) | RJ(TMP_REG1) | RK(OTHER_FLAG));
+
+ case SLJIT_SUBC:
+ if ((flags & SRC2_IMM) && src2 == I12_MIN) {
+ FAIL_IF(push_inst(compiler, INST(ADDI, op) | RD(TMP_REG2) | RJ(TMP_ZERO) | IMM_I12(src2)));
+ src2 = TMP_REG2;
+ flags &= ~SRC2_IMM;
+ }
+
+ is_carry = GET_FLAG_TYPE(op) == SLJIT_CARRY;
+
+ if (flags & SRC2_IMM) {
+ if (is_carry)
+ FAIL_IF(push_inst(compiler, SLTUI | RD(EQUAL_FLAG) | RJ(src1) | IMM_I12(src2)));
+
+ FAIL_IF(push_inst(compiler, INST(ADDI, op) | RD(dst) | RJ(src1) | IMM_I12(-src2)));
+ } else {
+ if (is_carry)
+ FAIL_IF(push_inst(compiler, SLTU | RD(EQUAL_FLAG) | RJ(src1) | RK(src2)));
+
+ FAIL_IF(push_inst(compiler, INST(SUB, op) | RD(dst) | RJ(src1) | RK(src2)));
+ }
+
+ if (is_carry)
+ FAIL_IF(push_inst(compiler, SLTU | RD(TMP_REG1) | RJ(dst) | RK(OTHER_FLAG)));
+
+ FAIL_IF(push_inst(compiler, INST(SUB, op) | RD(dst) | RJ(dst) | RK(OTHER_FLAG)));
+
+ if (!is_carry)
+ return SLJIT_SUCCESS;
+
+ return push_inst(compiler, OR | RD(OTHER_FLAG) | RJ(EQUAL_FLAG) | RK(TMP_REG1));
+
+ case SLJIT_MUL:
+ SLJIT_ASSERT(!(flags & SRC2_IMM));
+
+ if (GET_FLAG_TYPE(op) != SLJIT_OVERFLOW)
+ return push_inst(compiler, INST(MUL, op) | RD(dst) | RJ(src1) | RK(src2));
+
+ if (op & SLJIT_32) {
+ FAIL_IF(push_inst(compiler, MUL_D | RD(OTHER_FLAG) | RJ(src1) | RK(src2)));
+ FAIL_IF(push_inst(compiler, MUL_W | RD(dst) | RJ(src1) | RK(src2)));
+ return push_inst(compiler, SUB_D | RD(OTHER_FLAG) | RJ(dst) | RK(OTHER_FLAG));
+ }
+
+ FAIL_IF(push_inst(compiler, MULH_D | RD(EQUAL_FLAG) | RJ(src1) | RK(src2)));
+ FAIL_IF(push_inst(compiler, MUL_D | RD(dst) | RJ(src1) | RK(src2)));
+ FAIL_IF(push_inst(compiler, SRAI_D | RD(OTHER_FLAG) | RJ(dst) | IMM_I12((63))));
+ return push_inst(compiler, SUB_D | RD(OTHER_FLAG) | RJ(EQUAL_FLAG) | RK(OTHER_FLAG));
+
+ case SLJIT_AND:
+ EMIT_LOGICAL(ANDI, AND);
+ return SLJIT_SUCCESS;
+
+ case SLJIT_OR:
+ EMIT_LOGICAL(ORI, OR);
+ return SLJIT_SUCCESS;
+
+ case SLJIT_XOR:
+ EMIT_LOGICAL(XORI, XOR);
+ return SLJIT_SUCCESS;
+
+ case SLJIT_SHL:
+ case SLJIT_MSHL:
+ if (op & SLJIT_32) {
+ EMIT_SHIFT(SLLI_W, SLL_W);
+ } else {
+ EMIT_SHIFT(SLLI_D, SLL_D);
+ }
+ break;
+
+ case SLJIT_LSHR:
+ case SLJIT_MLSHR:
+ if (op & SLJIT_32) {
+ EMIT_SHIFT(SRLI_W, SRL_W);
+ } else {
+ EMIT_SHIFT(SRLI_D, SRL_D);
+ }
+ break;
+
+ case SLJIT_ASHR:
+ case SLJIT_MASHR:
+ if (op & SLJIT_32) {
+ EMIT_SHIFT(SRAI_W, SRA_W);
+ } else {
+ EMIT_SHIFT(SRAI_D, SRA_D);
+ }
+ break;
+
+ case SLJIT_ROTL:
+ case SLJIT_ROTR:
+ if (flags & SRC2_IMM) {
+ SLJIT_ASSERT(src2 != 0);
+
+ if (GET_OPCODE(op) == SLJIT_ROTL)
+ src2 = word_size - src2;
+ return push_inst(compiler, INST(ROTRI, op) | RD(dst) | RJ(src1) | IMM_I12(src2));
+ }
+
+ if (src2 == TMP_ZERO) {
+ if (dst != src1)
+ return push_inst(compiler, INST(ADDI, op) | RD(dst) | RJ(src1) | IMM_I12(0));
+ return SLJIT_SUCCESS;
+ }
+
+ if (GET_OPCODE(op) == SLJIT_ROTL) {
+ FAIL_IF(push_inst(compiler, INST(SUB, op)| RD(OTHER_FLAG) | RJ(TMP_ZERO) | RK(src2)));
+ src2 = OTHER_FLAG;
+ }
+ return push_inst(compiler, INST(ROTR, op) | RD(dst) | RJ(src1) | RK(src2));
+
+ default:
+ SLJIT_UNREACHABLE();
+ return SLJIT_SUCCESS;
+ }
+
+ if (flags & SRC2_IMM) {
+ if (op & SLJIT_SET_Z)
+ FAIL_IF(push_inst(compiler, op_imm | RD(EQUAL_FLAG) | RJ(src1) | IMM_I12(src2)));
+
+ if (flags & UNUSED_DEST)
+ return SLJIT_SUCCESS;
+ return push_inst(compiler, op_imm | RD(dst) | RJ(src1) | IMM_I12(src2));
+ }
+
+ if (op & SLJIT_SET_Z)
+ FAIL_IF(push_inst(compiler, op_reg | RD(EQUAL_FLAG) | RJ(src1) | RK(src2)));
+
+ if (flags & UNUSED_DEST)
+ return SLJIT_SUCCESS;
+ return push_inst(compiler, op_reg | RD(dst) | RJ(src1) | RK(src2));
+}
+
+#undef IMM_EXTEND
+
+static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 flags,
+ sljit_s32 dst, sljit_sw dstw,
+ sljit_s32 src1, sljit_sw src1w,
+ sljit_s32 src2, sljit_sw src2w)
+{
+ /* arg1 goes to TMP_REG1 or src reg
+ arg2 goes to TMP_REG2, imm or src reg
+ TMP_REG3 can be used for caching
+ result goes to TMP_REG2, so put result can use TMP_REG1 and TMP_REG3. */
+ sljit_s32 dst_r = TMP_REG2;
+ sljit_s32 src1_r;
+ sljit_sw src2_r = 0;
+ sljit_s32 src2_tmp_reg = (GET_OPCODE(op) >= SLJIT_OP2_BASE && FAST_IS_REG(src1)) ? TMP_REG1 : TMP_REG2;
+
+ if (!(flags & ALT_KEEP_CACHE)) {
+ compiler->cache_arg = 0;
+ compiler->cache_argw = 0;
+ }
+
+ if (dst == 0) {
+ SLJIT_ASSERT(HAS_FLAGS(op));
+ flags |= UNUSED_DEST;
+ dst = TMP_REG2;
+ } else if (FAST_IS_REG(dst)) {
+ dst_r = dst;
+ flags |= REG_DEST;
+ if (flags & MOVE_OP)
+ src2_tmp_reg = dst_r;
+ } else if ((dst & SLJIT_MEM) && !getput_arg_fast(compiler, flags | ARG_TEST, TMP_REG1, dst, dstw))
+ flags |= SLOW_DEST;
+
+ if (flags & IMM_OP) {
+ if (src2 == SLJIT_IMM && src2w != 0 && src2w <= I12_MAX && src2w >= I12_MIN) {
+ flags |= SRC2_IMM;
+ src2_r = src2w;
+ } else if ((flags & CUMULATIVE_OP) && src1 == SLJIT_IMM && src1w != 0 && src1w <= I12_MAX && src1w >= I12_MIN) {
+ flags |= SRC2_IMM;
+ src2_r = src1w;
+
+ /* And swap arguments. */
+ src1 = src2;
+ src1w = src2w;
+ src2 = SLJIT_IMM;
+ /* src2w = src2_r unneeded. */
+ }
+ }
+
+ /* Source 1. */
+ if (FAST_IS_REG(src1)) {
+ src1_r = src1;
+ flags |= REG1_SOURCE;
+ } else if (src1 == SLJIT_IMM) {
+ if (src1w) {
+ FAIL_IF(load_immediate(compiler, TMP_REG1, src1w));
+ src1_r = TMP_REG1;
+ }
+ else
+ src1_r = TMP_ZERO;
+ } else {
+ if (getput_arg_fast(compiler, flags | LOAD_DATA, TMP_REG1, src1, src1w))
+ FAIL_IF(compiler->error);
+ else
+ flags |= SLOW_SRC1;
+ src1_r = TMP_REG1;
+ }
+
+ /* Source 2. */
+ if (FAST_IS_REG(src2)) {
+ src2_r = src2;
+ flags |= REG2_SOURCE;
+ if ((flags & (REG_DEST | MOVE_OP)) == MOVE_OP)
+ dst_r = (sljit_s32)src2_r;
+ } else if (src2 == SLJIT_IMM) {
+ if (!(flags & SRC2_IMM)) {
+ if (src2w) {
+ FAIL_IF(load_immediate(compiler, src2_tmp_reg, src2w));
+ src2_r = src2_tmp_reg;
+ } else {
+ src2_r = TMP_ZERO;
+ if (flags & MOVE_OP) {
+ if (dst & SLJIT_MEM)
+ dst_r = 0;
+ else
+ op = SLJIT_MOV;
+ }
+ }
+ }
+ } else {
+ if (getput_arg_fast(compiler, flags | LOAD_DATA, src2_tmp_reg, src2, src2w))
+ FAIL_IF(compiler->error);
+ else
+ flags |= SLOW_SRC2;
+
+ src2_r = src2_tmp_reg;
+ }
+
+ if ((flags & (SLOW_SRC1 | SLOW_SRC2)) == (SLOW_SRC1 | SLOW_SRC2)) {
+ SLJIT_ASSERT(src2_r == TMP_REG2);
+ if ((flags & SLOW_DEST) && !can_cache(src2, src2w, src1, src1w) && can_cache(src2, src2w, dst, dstw)) {
+ FAIL_IF(getput_arg(compiler, flags | LOAD_DATA, TMP_REG1, src1, src1w, src2, src2w));
+ FAIL_IF(getput_arg(compiler, flags | LOAD_DATA | MEM_USE_TMP2, TMP_REG2, src2, src2w, dst, dstw));
+ } else {
+ FAIL_IF(getput_arg(compiler, flags | LOAD_DATA, TMP_REG2, src2, src2w, src1, src1w));
+ FAIL_IF(getput_arg(compiler, flags | LOAD_DATA, TMP_REG1, src1, src1w, dst, dstw));
+ }
+ }
+ else if (flags & SLOW_SRC1)
+ FAIL_IF(getput_arg(compiler, flags | LOAD_DATA, TMP_REG1, src1, src1w, dst, dstw));
+ else if (flags & SLOW_SRC2)
+ FAIL_IF(getput_arg(compiler, flags | LOAD_DATA | ((src1_r == TMP_REG1) ? MEM_USE_TMP2 : 0), src2_tmp_reg, src2, src2w, dst, dstw));
+
+ FAIL_IF(emit_single_op(compiler, op, flags, dst_r, src1_r, src2_r));
+
+ if (dst & SLJIT_MEM) {
+ if (!(flags & SLOW_DEST)) {
+ getput_arg_fast(compiler, flags, dst_r, dst, dstw);
+ return compiler->error;
+ }
+ return getput_arg(compiler, flags, dst_r, dst, dstw, 0, 0);
+ }
+
+ return SLJIT_SUCCESS;
+}
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compiler, sljit_s32 op)
+{
+ CHECK_ERROR();
+ CHECK(check_sljit_emit_op0(compiler, op));
+
+ switch (GET_OPCODE(op)) {
+ case SLJIT_BREAKPOINT:
+ return push_inst(compiler, BREAK);
+ case SLJIT_NOP:
+ return push_inst(compiler, ANDI | RD(TMP_ZERO) | RJ(TMP_ZERO) | IMM_I12(0));
+ case SLJIT_LMUL_UW:
+ FAIL_IF(push_inst(compiler, ADDI_D | RD(TMP_REG1) | RJ(SLJIT_R1) | IMM_I12(0)));
+ FAIL_IF(push_inst(compiler, MULH_DU | RD(SLJIT_R1) | RJ(SLJIT_R0) | RK(SLJIT_R1)));
+ return push_inst(compiler, MUL_D | RD(SLJIT_R0) | RJ(SLJIT_R0) | RK(TMP_REG1));
+ case SLJIT_LMUL_SW:
+ FAIL_IF(push_inst(compiler, ADDI_D | RD(TMP_REG1) | RJ(SLJIT_R1) | IMM_I12(0)));
+ FAIL_IF(push_inst(compiler, MULH_D | RD(SLJIT_R1) | RJ(SLJIT_R0) | RK(SLJIT_R1)));
+ return push_inst(compiler, MUL_D | RD(SLJIT_R0) | RJ(SLJIT_R0) | RK(TMP_REG1));
+ case SLJIT_DIVMOD_UW:
+ FAIL_IF(push_inst(compiler, INST(ADDI, op) | RD(TMP_REG1) | RJ(SLJIT_R0) | IMM_I12(0)));
+ FAIL_IF(push_inst(compiler, ((op & SLJIT_32)? DIV_WU: DIV_DU) | RD(SLJIT_R0) | RJ(SLJIT_R0) | RK(SLJIT_R1)));
+ return push_inst(compiler, ((op & SLJIT_32)? MOD_WU: MOD_DU) | RD(SLJIT_R1) | RJ(TMP_REG1) | RK(SLJIT_R1));
+ case SLJIT_DIVMOD_SW:
+ FAIL_IF(push_inst(compiler, INST(ADDI, op) | RD(TMP_REG1) | RJ(SLJIT_R0) | IMM_I12(0)));
+ FAIL_IF(push_inst(compiler, INST(DIV, op) | RD(SLJIT_R0) | RJ(SLJIT_R0) | RK(SLJIT_R1)));
+ return push_inst(compiler, INST(MOD, op) | RD(SLJIT_R1) | RJ(TMP_REG1) | RK(SLJIT_R1));
+ case SLJIT_DIV_UW:
+ return push_inst(compiler, ((op & SLJIT_32)? DIV_WU: DIV_DU) | RD(SLJIT_R0) | RJ(SLJIT_R0) | RK(SLJIT_R1));
+ case SLJIT_DIV_SW:
+ return push_inst(compiler, INST(DIV, op) | RD(SLJIT_R0) | RJ(SLJIT_R0) | RK(SLJIT_R1));
+ case SLJIT_ENDBR:
+ case SLJIT_SKIP_FRAMES_BEFORE_RETURN:
+ return SLJIT_SUCCESS;
+ }
+
+ SLJIT_UNREACHABLE();
+ return SLJIT_ERR_UNSUPPORTED;
+}
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compiler, sljit_s32 op,
+ sljit_s32 dst, sljit_sw dstw,
+ sljit_s32 src, sljit_sw srcw)
+{
+ sljit_s32 flags = 0;
+
+ CHECK_ERROR();
+ CHECK(check_sljit_emit_op1(compiler, op, dst, dstw, src, srcw));
+ ADJUST_LOCAL_OFFSET(dst, dstw);
+ ADJUST_LOCAL_OFFSET(src, srcw);
+
+ if (op & SLJIT_32)
+ flags = INT_DATA | SIGNED_DATA;
+
+ switch (GET_OPCODE(op)) {
+ case SLJIT_MOV:
+ case SLJIT_MOV_P:
+ return emit_op(compiler, SLJIT_MOV, WORD_DATA | MOVE_OP, dst, dstw, TMP_ZERO, 0, src, srcw);
+
+ case SLJIT_MOV_U32:
+ return emit_op(compiler, SLJIT_MOV_U32, INT_DATA | MOVE_OP, dst, dstw, TMP_ZERO, 0, src, (src == SLJIT_IMM) ? (sljit_u32)srcw : srcw);
+
+ case SLJIT_MOV_S32:
+ /* Logical operators have no W variant, so sign extended input is necessary for them. */
+ case SLJIT_MOV32:
+ return emit_op(compiler, SLJIT_MOV_S32, INT_DATA | SIGNED_DATA | MOVE_OP, dst, dstw, TMP_ZERO, 0, src, (src == SLJIT_IMM) ? (sljit_s32)srcw : srcw);
+
+ case SLJIT_MOV_U8:
+ return emit_op(compiler, op, BYTE_DATA | MOVE_OP, dst, dstw, TMP_ZERO, 0, src, (src == SLJIT_IMM) ? (sljit_u8)srcw : srcw);
+
+ case SLJIT_MOV_S8:
+ return emit_op(compiler, op, BYTE_DATA | SIGNED_DATA | MOVE_OP, dst, dstw, TMP_ZERO, 0, src, (src == SLJIT_IMM) ? (sljit_s8)srcw : srcw);
+
+ case SLJIT_MOV_U16:
+ return emit_op(compiler, op, HALF_DATA | MOVE_OP, dst, dstw, TMP_ZERO, 0, src, (src == SLJIT_IMM) ? (sljit_u16)srcw : srcw);
+
+ case SLJIT_MOV_S16:
+ return emit_op(compiler, op, HALF_DATA | SIGNED_DATA | MOVE_OP, dst, dstw, TMP_ZERO, 0, src, (src == SLJIT_IMM) ? (sljit_s16)srcw : srcw);
+
+ case SLJIT_CLZ:
+ case SLJIT_CTZ:
+ case SLJIT_REV:
+ return emit_op(compiler, op, flags, dst, dstw, TMP_ZERO, 0, src, srcw);
+
+ case SLJIT_REV_U16:
+ case SLJIT_REV_S16:
+ return emit_op(compiler, op, HALF_DATA, dst, dstw, TMP_ZERO, 0, src, srcw);
+
+ case SLJIT_REV_U32:
+ case SLJIT_REV_S32:
+ return emit_op(compiler, op | SLJIT_32, INT_DATA, dst, dstw, TMP_ZERO, 0, src, srcw);
+ }
+
+ SLJIT_UNREACHABLE();
+ return SLJIT_SUCCESS;
+}
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compiler, sljit_s32 op,
+ sljit_s32 dst, sljit_sw dstw,
+ sljit_s32 src1, sljit_sw src1w,
+ sljit_s32 src2, sljit_sw src2w)
+{
+ sljit_s32 flags = 0;
+
+ CHECK_ERROR();
+ CHECK(check_sljit_emit_op2(compiler, op, 0, dst, dstw, src1, src1w, src2, src2w));
+ ADJUST_LOCAL_OFFSET(dst, dstw);
+ ADJUST_LOCAL_OFFSET(src1, src1w);
+ ADJUST_LOCAL_OFFSET(src2, src2w);
+
+ if (op & SLJIT_32) {
+ flags |= INT_DATA | SIGNED_DATA;
+ if (src1 == SLJIT_IMM)
+ src1w = (sljit_s32)src1w;
+ if (src2 == SLJIT_IMM)
+ src2w = (sljit_s32)src2w;
+ }
+
+
+ switch (GET_OPCODE(op)) {
+ case SLJIT_ADD:
+ case SLJIT_ADDC:
+ compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD;
+ return emit_op(compiler, op, flags | CUMULATIVE_OP | IMM_OP, dst, dstw, src1, src1w, src2, src2w);
+
+ case SLJIT_SUB:
+ case SLJIT_SUBC:
+ compiler->status_flags_state = SLJIT_CURRENT_FLAGS_SUB;
+ return emit_op(compiler, op, flags | IMM_OP, dst, dstw, src1, src1w, src2, src2w);
+
+ case SLJIT_MUL:
+ compiler->status_flags_state = 0;
+ return emit_op(compiler, op, flags | CUMULATIVE_OP, dst, dstw, src1, src1w, src2, src2w);
+
+ case SLJIT_AND:
+ case SLJIT_OR:
+ case SLJIT_XOR:
+ return emit_op(compiler, op, flags | CUMULATIVE_OP | IMM_OP, dst, dstw, src1, src1w, src2, src2w);
+
+ case SLJIT_SHL:
+ case SLJIT_MSHL:
+ case SLJIT_LSHR:
+ case SLJIT_MLSHR:
+ case SLJIT_ASHR:
+ case SLJIT_MASHR:
+ case SLJIT_ROTL:
+ case SLJIT_ROTR:
+ if (src2 == SLJIT_IMM) {
+ if (op & SLJIT_32)
+ src2w &= 0x1f;
+ else
+ src2w &= 0x3f;
+ }
+
+ return emit_op(compiler, op, flags | IMM_OP, dst, dstw, src1, src1w, src2, src2w);
+ }
+
+ SLJIT_UNREACHABLE();
+ return SLJIT_SUCCESS;
+}
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2u(struct sljit_compiler *compiler, sljit_s32 op,
+ sljit_s32 src1, sljit_sw src1w,
+ sljit_s32 src2, sljit_sw src2w)
+{
+ CHECK_ERROR();
+ CHECK(check_sljit_emit_op2(compiler, op, 1, 0, 0, src1, src1w, src2, src2w));
+
+ SLJIT_SKIP_CHECKS(compiler);
+ return sljit_emit_op2(compiler, op, 0, 0, src1, src1w, src2, src2w);
+}
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2r(struct sljit_compiler *compiler, sljit_s32 op,
+ sljit_s32 dst_reg,
+ sljit_s32 src1, sljit_sw src1w,
+ sljit_s32 src2, sljit_sw src2w)
+{
+ CHECK_ERROR();
+ CHECK(check_sljit_emit_op2r(compiler, op, dst_reg, src1, src1w, src2, src2w));
+
+ switch (GET_OPCODE(op)) {
+ case SLJIT_MULADD:
+ SLJIT_SKIP_CHECKS(compiler);
+ FAIL_IF(sljit_emit_op2(compiler, SLJIT_MUL | (op & SLJIT_32), TMP_REG2, 0, src1, src1w, src2, src2w));
+ return push_inst(compiler, ADD_D | RD(dst_reg) | RJ(dst_reg) | RK(TMP_REG2));
+ }
+
+ return SLJIT_SUCCESS;
+}
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_shift_into(struct sljit_compiler *compiler, sljit_s32 op,
+ sljit_s32 dst_reg,
+ sljit_s32 src1_reg,
+ sljit_s32 src2_reg,
+ sljit_s32 src3, sljit_sw src3w)
+{
+ sljit_s32 is_left;
+ sljit_ins ins1, ins2, ins3;
+ sljit_s32 inp_flags = ((op & SLJIT_32) ? INT_DATA : WORD_DATA) | LOAD_DATA;
+ sljit_sw bit_length = (op & SLJIT_32) ? 32 : 64;
+
+
+ CHECK_ERROR();
+ CHECK(check_sljit_emit_shift_into(compiler, op, dst_reg, src1_reg, src2_reg, src3, src3w));
+
+ is_left = (GET_OPCODE(op) == SLJIT_SHL || GET_OPCODE(op) == SLJIT_MSHL);
+
+ if (src1_reg == src2_reg) {
+ SLJIT_SKIP_CHECKS(compiler);
+ return sljit_emit_op2(compiler, (is_left ? SLJIT_ROTL : SLJIT_ROTR) | (op & SLJIT_32), dst_reg, 0, src1_reg, 0, src3, src3w);
+ }
+
+ ADJUST_LOCAL_OFFSET(src3, src3w);
+
+ if (src3 == SLJIT_IMM) {
+ src3w &= bit_length - 1;
+
+ if (src3w == 0)
+ return SLJIT_SUCCESS;
+
+ if (is_left) {
+ ins1 = INST(SLLI, op) | IMM_I12(src3w);
+ src3w = bit_length - src3w;
+ ins2 = INST(SRLI, op) | IMM_I12(src3w);
+ } else {
+ ins1 = INST(SRLI, op) | IMM_I12(src3w);
+ src3w = bit_length - src3w;
+ ins2 = INST(SLLI, op) | IMM_I12(src3w);
+ }
+
+ FAIL_IF(push_inst(compiler, ins1 | RD(dst_reg) | RJ(src1_reg)));
+ FAIL_IF(push_inst(compiler, ins2 | RD(TMP_REG1) | RJ(src2_reg)));
+ return push_inst(compiler, OR | RD(dst_reg) | RJ(dst_reg) | RK(TMP_REG1));
+ }
+
+ if (src3 & SLJIT_MEM) {
+ FAIL_IF(emit_op_mem(compiler, inp_flags, TMP_REG2, src3, src3w));
+ src3 = TMP_REG2;
+ } else if (dst_reg == src3) {
+ push_inst(compiler, INST(ADDI, op) | RD(TMP_REG2) | RJ(src3) | IMM_I12(0));
+ src3 = TMP_REG2;
+ }
+
+ if (is_left) {
+ ins1 = INST(SLL, op);
+ ins2 = INST(SRLI, op);
+ ins3 = INST(SRL, op);
+ } else {
+ ins1 = INST(SRL, op);
+ ins2 = INST(SLLI, op);
+ ins3 = INST(SLL, op);
+ }
+
+ FAIL_IF(push_inst(compiler, ins1 | RD(dst_reg) | RJ(src1_reg) | RK(src3)));
+
+ if (!(op & SLJIT_SHIFT_INTO_NON_ZERO)) {
+ FAIL_IF(push_inst(compiler, ins2 | RD(TMP_REG1) | RJ(src2_reg) | IMM_I12(1)));
+ FAIL_IF(push_inst(compiler, XORI | RD(TMP_REG2) | RJ(src3) | IMM_I12((sljit_ins)bit_length - 1)));
+ src2_reg = TMP_REG1;
+ } else
+ FAIL_IF(push_inst(compiler, INST(SUB, op) | RD(TMP_REG2) | RJ(TMP_ZERO) | RK(src3)));
+
+ FAIL_IF(push_inst(compiler, ins3 | RD(TMP_REG1) | RJ(src2_reg) | RK(TMP_REG2)));
+ return push_inst(compiler, OR | RD(dst_reg) | RJ(dst_reg) | RK(TMP_REG1));
+}
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_src(struct sljit_compiler *compiler, sljit_s32 op,
+ sljit_s32 src, sljit_sw srcw)
+{
+ sljit_s32 base = src & REG_MASK;
+
+ CHECK_ERROR();
+ CHECK(check_sljit_emit_op_src(compiler, op, src, srcw));
+ ADJUST_LOCAL_OFFSET(src, srcw);
+
+ switch (op) {
+ case SLJIT_FAST_RETURN:
+ if (FAST_IS_REG(src))
+ FAIL_IF(push_inst(compiler, ADDI_D | RD(RETURN_ADDR_REG) | RJ(src) | IMM_I12(0)));
+ else
+ FAIL_IF(emit_op_mem(compiler, WORD_DATA | LOAD_DATA, RETURN_ADDR_REG, src, srcw));
+
+ return push_inst(compiler, JIRL | RD(TMP_ZERO) | RJ(RETURN_ADDR_REG) | IMM_I12(0));
+ case SLJIT_SKIP_FRAMES_BEFORE_FAST_RETURN:
+ return SLJIT_SUCCESS;
+ case SLJIT_PREFETCH_L1:
+ case SLJIT_PREFETCH_L2:
+ case SLJIT_PREFETCH_L3:
+ case SLJIT_PREFETCH_ONCE:
+ if (SLJIT_UNLIKELY(src & OFFS_REG_MASK)) {
+ srcw &= 0x3;
+ if (SLJIT_UNLIKELY(srcw))
+ FAIL_IF(push_inst(compiler, SLLI_D | RD(TMP_REG1) | RJ(OFFS_REG(src)) | IMM_I12(srcw)));
+ FAIL_IF(push_inst(compiler, ADD_D | RD(TMP_REG1) | RJ(base) | RK(TMP_REG1)));
+ } else {
+ if (base && srcw <= I12_MAX && srcw >= I12_MIN)
+ return push_inst(compiler,PRELD | RJ(base) | IMM_I12(srcw));
+
+ FAIL_IF(load_immediate(compiler, TMP_REG1, srcw));
+ if (base != 0)
+ FAIL_IF(push_inst(compiler, ADD_D | RD(TMP_REG1) | RJ(base) | RK(TMP_REG1)));
+ }
+ return push_inst(compiler, PRELD | RD(0) | RJ(TMP_REG1));
+ }
+ return SLJIT_SUCCESS;
+}
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_dst(struct sljit_compiler *compiler, sljit_s32 op,
+ sljit_s32 dst, sljit_sw dstw)
+{
+ sljit_s32 dst_r;
+
+ CHECK_ERROR();
+ CHECK(check_sljit_emit_op_dst(compiler, op, dst, dstw));
+ ADJUST_LOCAL_OFFSET(dst, dstw);
+
+ switch (op) {
+ case SLJIT_FAST_ENTER:
+ if (FAST_IS_REG(dst))
+ return push_inst(compiler, ADDI_D | RD(dst) | RJ(RETURN_ADDR_REG) | IMM_I12(0));
+
+ SLJIT_ASSERT(RETURN_ADDR_REG == TMP_REG2);
+ break;
+ case SLJIT_GET_RETURN_ADDRESS:
+ dst_r = FAST_IS_REG(dst) ? dst : TMP_REG2;
+ FAIL_IF(emit_op_mem(compiler, WORD_DATA | LOAD_DATA, dst_r, SLJIT_MEM1(SLJIT_SP), compiler->local_size - SSIZE_OF(sw)));
+ break;
+ }
+
+ if (dst & SLJIT_MEM)
+ return emit_op_mem(compiler, WORD_DATA, TMP_REG2, dst, dstw);
+
+ return SLJIT_SUCCESS;
+}
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_register_index(sljit_s32 type, sljit_s32 reg)
+{
+ CHECK_REG_INDEX(check_sljit_get_register_index(type, reg));
+
+ if (type == SLJIT_GP_REGISTER)
+ return reg_map[reg];
+
+ if (type != SLJIT_FLOAT_REGISTER && type != SLJIT_SIMD_REG_128 && type != SLJIT_SIMD_REG_256)
+ return -1;
+
+ return freg_map[reg];
+}
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_custom(struct sljit_compiler *compiler,
+ void *instruction, sljit_u32 size)
+{
+ SLJIT_UNUSED_ARG(size);
+ CHECK_ERROR();
+ CHECK(check_sljit_emit_op_custom(compiler, instruction, size));
+
+ return push_inst(compiler, *(sljit_ins*)instruction);
+}
+
+/* --------------------------------------------------------------------- */
+/* Floating point operators */
+/* --------------------------------------------------------------------- */
+#define SET_COND(cond) (sljit_ins)(cond << 15)
+
+#define COND_CUN SET_COND(0x8) /* UN */
+#define COND_CEQ SET_COND(0x4) /* EQ */
+#define COND_CUEQ SET_COND(0xc) /* UN EQ */
+#define COND_CLT SET_COND(0x2) /* LT */
+#define COND_CULT SET_COND(0xa) /* UN LT */
+#define COND_CLE SET_COND(0x6) /* LT EQ */
+#define COND_CULE SET_COND(0xe) /* UN LT EQ */
+#define COND_CNE SET_COND(0x10) /* GT LT */
+#define COND_CUNE SET_COND(0x18) /* UN GT LT */
+#define COND_COR SET_COND(0x14) /* GT LT EQ */
+
+#define FINST(inst, type) (sljit_ins)((type & SLJIT_32) ? inst##_S : inst##_D)
+#define FCD(cd) (sljit_ins)(cd & 0x7)
+#define FCJ(cj) (sljit_ins)((cj & 0x7) << 5)
+#define FCA(ca) (sljit_ins)((ca & 0x7) << 15)
+#define F_OTHER_FLAG 1
+
+#define FLOAT_DATA(op) (DOUBLE_DATA | ((op & SLJIT_32) >> 7))
+
+/* convert to inter exact toward zero */
+static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_sw_from_f64(struct sljit_compiler *compiler, sljit_s32 op,
+ sljit_s32 dst, sljit_sw dstw,
+ sljit_s32 src, sljit_sw srcw)
+{
+ sljit_ins inst;
+ sljit_u32 word_data = 0;
+ sljit_s32 dst_r = FAST_IS_REG(dst) ? dst : TMP_REG2;
+
+ switch (GET_OPCODE(op))
+ {
+ case SLJIT_CONV_SW_FROM_F64:
+ word_data = 1;
+ inst = FINST(FTINTRZ_L, op);
+ break;
+ case SLJIT_CONV_S32_FROM_F64:
+ inst = FINST(FTINTRZ_W, op);
+ break;
+ default:
+ inst = BREAK;
+ SLJIT_UNREACHABLE();
+ }
+
+ if (src & SLJIT_MEM) {
+ FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, src, srcw, dst, dstw));
+ src = TMP_FREG1;
+ }
+
+ FAIL_IF(push_inst(compiler, inst | FRD(TMP_FREG1) | FRJ(src)));
+ FAIL_IF(push_inst(compiler, FINST(MOVFR2GR, word_data) | RD(dst_r) | FRJ(TMP_FREG1)));
+
+ if (dst & SLJIT_MEM)
+ return emit_op_mem2(compiler, word_data ? WORD_DATA : INT_DATA, TMP_REG2, dst, dstw, 0, 0);
+ return SLJIT_SUCCESS;
+}
+
+static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_f64_from_w(struct sljit_compiler *compiler, sljit_s32 op,
+ sljit_s32 dst, sljit_sw dstw,
+ sljit_s32 src, sljit_sw srcw)
+{
+ sljit_ins inst;
+ sljit_u32 word_data = 0;
+ sljit_s32 dst_r = FAST_IS_REG(dst) ? dst : TMP_FREG1;
+
+ switch (GET_OPCODE(op))
+ {
+ case SLJIT_CONV_F64_FROM_SW:
+ word_data = 1;
+ inst = (sljit_ins)((op & SLJIT_32) ? FFINT_S_L : FFINT_D_L);
+ break;
+ case SLJIT_CONV_F64_FROM_S32:
+ inst = (sljit_ins)((op & SLJIT_32) ? FFINT_S_W : FFINT_D_W);
+ break;
+ default:
+ inst = BREAK;
+ SLJIT_UNREACHABLE();
+ }
+
+ if (src & SLJIT_MEM) {
+ FAIL_IF(emit_op_mem2(compiler, (word_data ? WORD_DATA : INT_DATA) | LOAD_DATA, TMP_REG1, src, srcw, dst, dstw));
+ src = TMP_REG1;
+ } else if (src == SLJIT_IMM) {
+ if (GET_OPCODE(op) == SLJIT_CONV_F64_FROM_S32)
+ srcw = (sljit_s32)srcw;
+
+ FAIL_IF(load_immediate(compiler, TMP_REG1, srcw));
+ src = TMP_REG1;
+ }
+ FAIL_IF(push_inst(compiler, (word_data ? MOVGR2FR_D : MOVGR2FR_W) | FRD(dst_r) | RJ(src)));
+ FAIL_IF(push_inst(compiler, inst | FRD(dst_r) | FRJ(dst_r)));
+
+ if (dst & SLJIT_MEM)
+ return emit_op_mem2(compiler, FLOAT_DATA(op), TMP_FREG1, dst, dstw, 0, 0);
+ return SLJIT_SUCCESS;
+}
+
+static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_f64_from_sw(struct sljit_compiler *compiler, sljit_s32 op,
+ sljit_s32 dst, sljit_sw dstw,
+ sljit_s32 src, sljit_sw srcw)
+{
+ return sljit_emit_fop1_conv_f64_from_w(compiler, op, dst, dstw, src, srcw);
+}
+
+static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_f64_from_uw(struct sljit_compiler *compiler, sljit_s32 op,
+ sljit_s32 dst, sljit_sw dstw,
+ sljit_s32 src, sljit_sw srcw)
+{
+ sljit_ins inst;
+ sljit_u32 word_data = 0;
+ sljit_s32 dst_r = FAST_IS_REG(dst) ? dst : TMP_FREG1;
+
+ switch (GET_OPCODE(op))
+ {
+ case SLJIT_CONV_F64_FROM_UW:
+ word_data = 1;
+ inst = (sljit_ins)((op & SLJIT_32) ? FFINT_S_L : FFINT_D_L);
+ break;
+ case SLJIT_CONV_F64_FROM_U32:
+ inst = (sljit_ins)((op & SLJIT_32) ? FFINT_S_W : FFINT_D_W);
+ break;
+ default:
+ inst = BREAK;
+ SLJIT_UNREACHABLE();
+ }
+
+ if (src & SLJIT_MEM) {
+ FAIL_IF(emit_op_mem2(compiler, (word_data ? WORD_DATA : INT_DATA) | LOAD_DATA, TMP_REG1, src, srcw, dst, dstw));
+ src = TMP_REG1;
+ } else if (src == SLJIT_IMM) {
+ if (GET_OPCODE(op) == SLJIT_CONV_F64_FROM_U32)
+ srcw = (sljit_u32)srcw;
+
+ FAIL_IF(load_immediate(compiler, TMP_REG1, srcw));
+ src = TMP_REG1;
+ }
+
+ if (!word_data)
+ FAIL_IF(push_inst(compiler, SRLI_W | RD(src) | RJ(src) | IMM_I12(0)));
+
+ FAIL_IF(push_inst(compiler, BLT | RJ(src) | RD(TMP_ZERO) | IMM_I16(4)));
+
+ FAIL_IF(push_inst(compiler, (word_data ? MOVGR2FR_D : MOVGR2FR_W) | FRD(dst_r) | RJ(src)));
+ FAIL_IF(push_inst(compiler, inst | FRD(dst_r) | FRJ(dst_r)));
+ FAIL_IF(push_inst(compiler, B | IMM_I26(7)));
+
+ FAIL_IF(push_inst(compiler, ANDI | RD(TMP_REG2) | RJ(src) | IMM_I12(1)));
+ FAIL_IF(push_inst(compiler, (word_data ? SRLI_D : SRLI_W) | RD(TMP_REG1) | RJ(src) | IMM_I12(1)));
+ FAIL_IF(push_inst(compiler, OR | RD(TMP_REG1) | RJ(TMP_REG1) | RK(TMP_REG2)));
+ FAIL_IF(push_inst(compiler, INST(MOVGR2FR, (!word_data)) | FRD(dst_r) | RJ(TMP_REG1)));
+ FAIL_IF(push_inst(compiler, inst | FRD(dst_r) | FRJ(dst_r)));
+ FAIL_IF(push_inst(compiler, FINST(FADD, op) | FRD(dst_r) | FRJ(dst_r) | FRK(dst_r)));
+
+ if (dst & SLJIT_MEM)
+ return emit_op_mem2(compiler, FLOAT_DATA(op), TMP_FREG1, dst, dstw, 0, 0);
+ return SLJIT_SUCCESS;
+}
+
+static SLJIT_INLINE sljit_s32 sljit_emit_fop1_cmp(struct sljit_compiler *compiler, sljit_s32 op,
+ sljit_s32 src1, sljit_sw src1w,
+ sljit_s32 src2, sljit_sw src2w)
+{
+ if (src1 & SLJIT_MEM) {
+ FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, src1, src1w, src2, src2w));
+ src1 = TMP_FREG1;
+ }
+
+ if (src2 & SLJIT_MEM) {
+ FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG2, src2, src2w, 0, 0));
+ src2 = TMP_FREG2;
+ }
+
+ FAIL_IF(push_inst(compiler, XOR | RD(OTHER_FLAG) | RJ(OTHER_FLAG) | RK(OTHER_FLAG)));
+
+ switch (GET_FLAG_TYPE(op)) {
+ case SLJIT_F_EQUAL:
+ case SLJIT_ORDERED_EQUAL:
+ FAIL_IF(push_inst(compiler, FINST(FCMP_COND, op) | COND_CEQ | FCD(F_OTHER_FLAG) | FRJ(src1) | FRK(src2)));
+ break;
+ case SLJIT_F_LESS:
+ case SLJIT_ORDERED_LESS:
+ FAIL_IF(push_inst(compiler, FINST(FCMP_COND, op) | COND_CLT | FCD(F_OTHER_FLAG) | FRJ(src1) | FRK(src2)));
+ break;
+ case SLJIT_F_GREATER:
+ case SLJIT_ORDERED_GREATER:
+ FAIL_IF(push_inst(compiler, FINST(FCMP_COND, op) | COND_CLT | FCD(F_OTHER_FLAG) | FRJ(src2) | FRK(src1)));
+ break;
+ case SLJIT_UNORDERED_OR_GREATER:
+ FAIL_IF(push_inst(compiler, FINST(FCMP_COND, op) | COND_CULT | FCD(F_OTHER_FLAG) | FRJ(src2) | FRK(src1)));
+ break;
+ case SLJIT_UNORDERED_OR_LESS:
+ FAIL_IF(push_inst(compiler, FINST(FCMP_COND, op) | COND_CULT | FCD(F_OTHER_FLAG) | FRJ(src1) | FRK(src2)));
+ break;
+ case SLJIT_UNORDERED_OR_EQUAL:
+ FAIL_IF(push_inst(compiler, FINST(FCMP_COND, op) | COND_CUEQ | FCD(F_OTHER_FLAG) | FRJ(src1) | FRK(src2)));
+ break;
+ default: /* SLJIT_UNORDERED */
+ FAIL_IF(push_inst(compiler, FINST(FCMP_COND, op) | COND_CUN | FCD(F_OTHER_FLAG) | FRJ(src1) | FRK(src2)));
+ }
+ return push_inst(compiler, MOVCF2GR | RD(OTHER_FLAG) | FCJ(F_OTHER_FLAG));
+}
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compiler, sljit_s32 op,
+ sljit_s32 dst, sljit_sw dstw,
+ sljit_s32 src, sljit_sw srcw)
+{
+ sljit_s32 dst_r;
+
+ CHECK_ERROR();
+ compiler->cache_arg = 0;
+ compiler->cache_argw = 0;
+
+ SLJIT_COMPILE_ASSERT((SLJIT_32 == 0x100) && !(DOUBLE_DATA & 0x2), float_transfer_bit_error);
+ SELECT_FOP1_OPERATION_WITH_CHECKS(compiler, op, dst, dstw, src, srcw);
+
+ if (GET_OPCODE(op) == SLJIT_CONV_F64_FROM_F32)
+ op ^= SLJIT_32;
+
+ dst_r = FAST_IS_REG(dst) ? dst : TMP_FREG1;
+
+ if (src & SLJIT_MEM) {
+ FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op) | LOAD_DATA, dst_r, src, srcw, dst, dstw));
+ src = dst_r;
+ }
+
+ switch (GET_OPCODE(op)) {
+ case SLJIT_MOV_F64:
+ if (src != dst_r) {
+ if (!(dst & SLJIT_MEM))
+ FAIL_IF(push_inst(compiler, FINST(FMOV, op) | FRD(dst_r) | FRJ(src)));
+ else
+ dst_r = src;
+ }
+ break;
+ case SLJIT_NEG_F64:
+ FAIL_IF(push_inst(compiler, FINST(FNEG, op) | FRD(dst_r) | FRJ(src)));
+ break;
+ case SLJIT_ABS_F64:
+ FAIL_IF(push_inst(compiler, FINST(FABS, op) | FRD(dst_r) | FRJ(src)));
+ break;
+ case SLJIT_CONV_F64_FROM_F32:
+ /* The SLJIT_32 bit is inverted because sljit_f32 needs to be loaded from the memory. */
+ FAIL_IF(push_inst(compiler, ((op & SLJIT_32) ? FCVT_D_S : FCVT_S_D) | FRD(dst_r) | FRJ(src)));
+ op ^= SLJIT_32;
+ break;
+ }
+
+ if (dst & SLJIT_MEM)
+ return emit_op_mem2(compiler, FLOAT_DATA(op), dst_r, dst, dstw, 0, 0);
+ return SLJIT_SUCCESS;
+}
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop2(struct sljit_compiler *compiler, sljit_s32 op,
+ sljit_s32 dst, sljit_sw dstw,
+ sljit_s32 src1, sljit_sw src1w,
+ sljit_s32 src2, sljit_sw src2w)
+{
+ sljit_s32 dst_r, flags = 0;
+
+ CHECK_ERROR();
+ CHECK(check_sljit_emit_fop2(compiler, op, dst, dstw, src1, src1w, src2, src2w));
+ ADJUST_LOCAL_OFFSET(dst, dstw);
+ ADJUST_LOCAL_OFFSET(src1, src1w);
+ ADJUST_LOCAL_OFFSET(src2, src2w);
+
+ compiler->cache_arg = 0;
+ compiler->cache_argw = 0;
+
+ dst_r = FAST_IS_REG(dst) ? dst : TMP_FREG2;
+
+ if (src1 & SLJIT_MEM) {
+ if (getput_arg_fast(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, src1, src1w)) {
+ FAIL_IF(compiler->error);
+ src1 = TMP_FREG1;
+ } else
+ flags |= SLOW_SRC1;
+ }
+
+ if (src2 & SLJIT_MEM) {
+ if (getput_arg_fast(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG2, src2, src2w)) {
+ FAIL_IF(compiler->error);
+ src2 = TMP_FREG2;
+ } else
+ flags |= SLOW_SRC2;
+ }
+
+ if ((flags & (SLOW_SRC1 | SLOW_SRC2)) == (SLOW_SRC1 | SLOW_SRC2)) {
+ if ((dst & SLJIT_MEM) && !can_cache(src1, src1w, src2, src2w) && can_cache(src1, src1w, dst, dstw)) {
+ FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG2, src2, src2w, src1, src1w));
+ FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, src1, src1w, dst, dstw));
+ } else {
+ FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, src1, src1w, src2, src2w));
+ FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG2, src2, src2w, dst, dstw));
+ }
+ }
+ else if (flags & SLOW_SRC1)
+ FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, src1, src1w, dst, dstw));
+ else if (flags & SLOW_SRC2)
+ FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG2, src2, src2w, dst, dstw));
+
+ if (flags & SLOW_SRC1)
+ src1 = TMP_FREG1;
+ if (flags & SLOW_SRC2)
+ src2 = TMP_FREG2;
+
+ switch (GET_OPCODE(op)) {
+ case SLJIT_ADD_F64:
+ FAIL_IF(push_inst(compiler, FINST(FADD, op) | FRD(dst_r) | FRJ(src1) | FRK(src2)));
+ break;
+ case SLJIT_SUB_F64:
+ FAIL_IF(push_inst(compiler, FINST(FSUB, op) | FRD(dst_r) | FRJ(src1) | FRK(src2)));
+ break;
+ case SLJIT_MUL_F64:
+ FAIL_IF(push_inst(compiler, FINST(FMUL, op) | FRD(dst_r) | FRJ(src1) | FRK(src2)));
+ break;
+ case SLJIT_DIV_F64:
+ FAIL_IF(push_inst(compiler, FINST(FDIV, op) | FRD(dst_r) | FRJ(src1) | FRK(src2)));
+ break;
+ }
+
+ if (dst_r != dst)
+ FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op), TMP_FREG2, dst, dstw, 0, 0));
+ return SLJIT_SUCCESS;
+}
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop2r(struct sljit_compiler *compiler, sljit_s32 op,
+ sljit_s32 dst_freg,
+ sljit_s32 src1, sljit_sw src1w,
+ sljit_s32 src2, sljit_sw src2w)
+{
+ sljit_s32 reg;
+
+ CHECK_ERROR();
+ CHECK(check_sljit_emit_fop2r(compiler, op, dst_freg, src1, src1w, src2, src2w));
+ ADJUST_LOCAL_OFFSET(src1, src1w);
+ ADJUST_LOCAL_OFFSET(src2, src2w);
+
+ if (src2 & SLJIT_MEM) {
+ FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, src2, src2w, 0, 0));
+ src2 = TMP_FREG1;
+ }
+
+ if (src1 & SLJIT_MEM) {
+ reg = (dst_freg == src2) ? TMP_FREG1 : dst_freg;
+ FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op) | LOAD_DATA, reg, src1, src1w, 0, 0));
+ src1 = reg;
+ }
+
+ return push_inst(compiler, FINST(FCOPYSIGN, op) | FRD(dst_freg) | FRJ(src1) | FRK(src2));
+}
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fset32(struct sljit_compiler *compiler,
+ sljit_s32 freg, sljit_f32 value)
+{
+ union {
+ sljit_s32 imm;
+ sljit_f32 value;
+ } u;
+
+ CHECK_ERROR();
+ CHECK(check_sljit_emit_fset32(compiler, freg, value));
+
+ u.value = value;
+
+ if (u.imm == 0)
+ return push_inst(compiler, MOVGR2FR_W | RJ(TMP_ZERO) | FRD(freg));
+
+ FAIL_IF(load_immediate(compiler, TMP_REG1, u.imm));
+ return push_inst(compiler, MOVGR2FR_W | RJ(TMP_REG1) | FRD(freg));
+}
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fset64(struct sljit_compiler *compiler,
+ sljit_s32 freg, sljit_f64 value)
+{
+ union {
+ sljit_sw imm;
+ sljit_f64 value;
+ } u;
+
+ CHECK_ERROR();
+ CHECK(check_sljit_emit_fset64(compiler, freg, value));
+
+ u.value = value;
+
+ if (u.imm == 0)
+ return push_inst(compiler, MOVGR2FR_D | RJ(TMP_ZERO) | FRD(freg));
+
+ FAIL_IF(load_immediate(compiler, TMP_REG1, u.imm));
+ return push_inst(compiler, MOVGR2FR_D | RJ(TMP_REG1) | FRD(freg));
+}
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fcopy(struct sljit_compiler *compiler, sljit_s32 op,
+ sljit_s32 freg, sljit_s32 reg)
+{
+ sljit_ins inst;
+
+ CHECK_ERROR();
+ CHECK(check_sljit_emit_fcopy(compiler, op, freg, reg));
+
+ if (GET_OPCODE(op) == SLJIT_COPY_TO_F64)
+ inst = ((op & SLJIT_32) ? MOVGR2FR_W : MOVGR2FR_D) | FRD(freg) | RJ(reg);
+ else
+ inst = ((op & SLJIT_32) ? MOVFR2GR_S : MOVFR2GR_D) | RD(reg) | FRJ(freg);
+ return push_inst(compiler, inst);
+}
+
+/* --------------------------------------------------------------------- */
+/* Conditional instructions */
+/* --------------------------------------------------------------------- */
+
+SLJIT_API_FUNC_ATTRIBUTE struct sljit_label* sljit_emit_label(struct sljit_compiler *compiler)
+{
+ struct sljit_label *label;
+
+ CHECK_ERROR_PTR();
+ CHECK_PTR(check_sljit_emit_label(compiler));
+
+ if (compiler->last_label && compiler->last_label->size == compiler->size)
+ return compiler->last_label;
+
+ label = (struct sljit_label*)ensure_abuf(compiler, sizeof(struct sljit_label));
+ PTR_FAIL_IF(!label);
+ set_label(label, compiler);
+ return label;
+}
+
+static sljit_ins get_jump_instruction(sljit_s32 type)
+{
+ switch (type) {
+ case SLJIT_EQUAL:
+ case SLJIT_ATOMIC_NOT_STORED:
+ return BNE | RJ(EQUAL_FLAG) | RD(TMP_ZERO);
+ case SLJIT_NOT_EQUAL:
+ case SLJIT_ATOMIC_STORED:
+ return BEQ | RJ(EQUAL_FLAG) | RD(TMP_ZERO);
+ case SLJIT_LESS:
+ case SLJIT_GREATER:
+ case SLJIT_SIG_LESS:
+ case SLJIT_SIG_GREATER:
+ case SLJIT_OVERFLOW:
+ case SLJIT_CARRY:
+ return BEQ | RJ(OTHER_FLAG) | RD(TMP_ZERO);
+ case SLJIT_GREATER_EQUAL:
+ case SLJIT_LESS_EQUAL:
+ case SLJIT_SIG_GREATER_EQUAL:
+ case SLJIT_SIG_LESS_EQUAL:
+ case SLJIT_NOT_OVERFLOW:
+ case SLJIT_NOT_CARRY:
+ return BNE | RJ(OTHER_FLAG) | RD(TMP_ZERO);
+ case SLJIT_F_EQUAL:
+ case SLJIT_ORDERED_EQUAL:
+ case SLJIT_F_LESS:
+ case SLJIT_ORDERED_LESS:
+ case SLJIT_ORDERED_GREATER:
+ case SLJIT_UNORDERED_OR_GREATER:
+ case SLJIT_F_GREATER:
+ case SLJIT_UNORDERED_OR_LESS:
+ case SLJIT_UNORDERED_OR_EQUAL:
+ case SLJIT_UNORDERED:
+ return BEQ | RJ(OTHER_FLAG) | RD(TMP_ZERO);
+ case SLJIT_ORDERED_NOT_EQUAL:
+ case SLJIT_ORDERED_LESS_EQUAL:
+ case SLJIT_ORDERED_GREATER_EQUAL:
+ case SLJIT_F_NOT_EQUAL:
+ case SLJIT_UNORDERED_OR_NOT_EQUAL:
+ case SLJIT_UNORDERED_OR_GREATER_EQUAL:
+ case SLJIT_UNORDERED_OR_LESS_EQUAL:
+ case SLJIT_F_LESS_EQUAL:
+ case SLJIT_F_GREATER_EQUAL:
+ case SLJIT_ORDERED:
+ return BNE | RJ(OTHER_FLAG) | RD(TMP_ZERO);
+ default:
+ /* Not conditional branch. */
+ return 0;
+ }
+}
+
+SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compiler *compiler, sljit_s32 type)
+{
+ struct sljit_jump *jump;
+ sljit_ins inst;
+
+ CHECK_ERROR_PTR();
+ CHECK_PTR(check_sljit_emit_jump(compiler, type));
+
+ jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump));
+ PTR_FAIL_IF(!jump);
+ set_jump(jump, compiler, type & SLJIT_REWRITABLE_JUMP);
+ type &= 0xff;
+
+ inst = get_jump_instruction(type);
+
+ if (inst != 0) {
+ PTR_FAIL_IF(push_inst(compiler, inst));
+ jump->flags |= IS_COND;
+ }
+
+ jump->addr = compiler->size;
+ inst = JIRL | RJ(TMP_REG1) | IMM_I16(0);
+
+ if (type >= SLJIT_FAST_CALL) {
+ jump->flags |= IS_CALL;
+ inst |= RD(RETURN_ADDR_REG);
+ }
+
+ PTR_FAIL_IF(push_inst(compiler, inst));
+
+ /* Maximum number of instructions required for generating a constant. */
+ compiler->size += JUMP_MAX_SIZE - 1;
+ return jump;
+}
+
+SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_call(struct sljit_compiler *compiler, sljit_s32 type,
+ sljit_s32 arg_types)
+{
+ SLJIT_UNUSED_ARG(arg_types);
+ CHECK_ERROR_PTR();
+ CHECK_PTR(check_sljit_emit_call(compiler, type, arg_types));
+
+ if (type & SLJIT_CALL_RETURN) {
+ PTR_FAIL_IF(emit_stack_frame_release(compiler, 0));
+ type = SLJIT_JUMP | (type & SLJIT_REWRITABLE_JUMP);
+ }
+
+ SLJIT_SKIP_CHECKS(compiler);
+ return sljit_emit_jump(compiler, type);
+}
+
+SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_cmp(struct sljit_compiler *compiler, sljit_s32 type,
+ sljit_s32 src1, sljit_sw src1w,
+ sljit_s32 src2, sljit_sw src2w)
+{
+ struct sljit_jump *jump;
+ sljit_s32 flags;
+ sljit_ins inst;
+ sljit_s32 src2_tmp_reg = FAST_IS_REG(src1) ? TMP_REG1 : TMP_REG2;
+
+ CHECK_ERROR_PTR();
+ CHECK_PTR(check_sljit_emit_cmp(compiler, type, src1, src1w, src2, src2w));
+ ADJUST_LOCAL_OFFSET(src1, src1w);
+ ADJUST_LOCAL_OFFSET(src2, src2w);
+
+ compiler->cache_arg = 0;
+ compiler->cache_argw = 0;
+
+ flags = ((type & SLJIT_32) ? INT_DATA : WORD_DATA) | LOAD_DATA;
+
+ if (src1 & SLJIT_MEM) {
+ PTR_FAIL_IF(emit_op_mem2(compiler, flags, TMP_REG1, src1, src1w, src2, src2w));
+ src1 = TMP_REG1;
+ }
+
+ if (src2 & SLJIT_MEM) {
+ PTR_FAIL_IF(emit_op_mem2(compiler, flags, src2_tmp_reg, src2, src2w, 0, 0));
+ src2 = src2_tmp_reg;
+ }
+
+ if (src1 == SLJIT_IMM) {
+ if (src1w != 0) {
+ PTR_FAIL_IF(load_immediate(compiler, TMP_REG1, src1w));
+ src1 = TMP_REG1;
+ }
+ else
+ src1 = TMP_ZERO;
+ }
+
+ if (src2 == SLJIT_IMM) {
+ if (src2w != 0) {
+ PTR_FAIL_IF(load_immediate(compiler, src2_tmp_reg, src2w));
+ src2 = src2_tmp_reg;
+ }
+ else
+ src2 = TMP_ZERO;
+ }
+
+ jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump));
+ PTR_FAIL_IF(!jump);
+ set_jump(jump, compiler, (sljit_u32)((type & SLJIT_REWRITABLE_JUMP) | IS_COND));
+ type &= 0xff;
+
+ switch (type) {
+ case SLJIT_EQUAL:
+ inst = BNE | RJ(src1) | RD(src2);
+ break;
+ case SLJIT_NOT_EQUAL:
+ inst = BEQ | RJ(src1) | RD(src2);
+ break;
+ case SLJIT_LESS:
+ inst = BGEU | RJ(src1) | RD(src2);
+ break;
+ case SLJIT_GREATER_EQUAL:
+ inst = BLTU | RJ(src1) | RD(src2);
+ break;
+ case SLJIT_GREATER:
+ inst = BGEU | RJ(src2) | RD(src1);
+ break;
+ case SLJIT_LESS_EQUAL:
+ inst = BLTU | RJ(src2) | RD(src1);
+ break;
+ case SLJIT_SIG_LESS:
+ inst = BGE | RJ(src1) | RD(src2);
+ break;
+ case SLJIT_SIG_GREATER_EQUAL:
+ inst = BLT | RJ(src1) | RD(src2);
+ break;
+ case SLJIT_SIG_GREATER:
+ inst = BGE | RJ(src2) | RD(src1);
+ break;
+ case SLJIT_SIG_LESS_EQUAL:
+ inst = BLT | RJ(src2) | RD(src1);
+ break;
+ default:
+ inst = BREAK;
+ SLJIT_UNREACHABLE();
+ }
+
+ PTR_FAIL_IF(push_inst(compiler, inst));
+
+ jump->addr = compiler->size;
+ PTR_FAIL_IF(push_inst(compiler, JIRL | RD(TMP_ZERO) | RJ(TMP_REG1) | IMM_I12(0)));
+
+ /* Maximum number of instructions required for generating a constant. */
+ compiler->size += JUMP_MAX_SIZE - 1;
+
+ return jump;
+}
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_ijump(struct sljit_compiler *compiler, sljit_s32 type, sljit_s32 src, sljit_sw srcw)
+{
+ struct sljit_jump *jump;
+
+ CHECK_ERROR();
+ CHECK(check_sljit_emit_ijump(compiler, type, src, srcw));
+
+ if (src != SLJIT_IMM) {
+ if (src & SLJIT_MEM) {
+ ADJUST_LOCAL_OFFSET(src, srcw);
+ FAIL_IF(emit_op_mem(compiler, WORD_DATA | LOAD_DATA, TMP_REG1, src, srcw));
+ src = TMP_REG1;
+ }
+ return push_inst(compiler, JIRL | RD((type >= SLJIT_FAST_CALL) ? RETURN_ADDR_REG : TMP_ZERO) | RJ(src) | IMM_I12(0));
+ }
+
+ /* These jumps are converted to jump/call instructions when possible. */
+ jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump));
+ FAIL_IF(!jump);
+ set_jump(jump, compiler, JUMP_ADDR | ((type >= SLJIT_FAST_CALL) ? IS_CALL : 0));
+ jump->u.target = (sljit_uw)srcw;
+
+ jump->addr = compiler->size;
+ FAIL_IF(push_inst(compiler, JIRL | RD((type >= SLJIT_FAST_CALL) ? RETURN_ADDR_REG : TMP_ZERO) | RJ(TMP_REG1) | IMM_I12(0)));
+
+ /* Maximum number of instructions required for generating a constant. */
+ compiler->size += JUMP_MAX_SIZE - 1;
+
+ return SLJIT_SUCCESS;
+}
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_icall(struct sljit_compiler *compiler, sljit_s32 type,
+ sljit_s32 arg_types,
+ sljit_s32 src, sljit_sw srcw)
+{
+ SLJIT_UNUSED_ARG(arg_types);
+ CHECK_ERROR();
+ CHECK(check_sljit_emit_icall(compiler, type, arg_types, src, srcw));
+
+ if (src & SLJIT_MEM) {
+ ADJUST_LOCAL_OFFSET(src, srcw);
+ FAIL_IF(emit_op_mem(compiler, WORD_DATA | LOAD_DATA, TMP_REG1, src, srcw));
+ src = TMP_REG1;
+ }
+
+ if (type & SLJIT_CALL_RETURN) {
+ if (src >= SLJIT_FIRST_SAVED_REG && src <= (SLJIT_S0 - SLJIT_KEPT_SAVEDS_COUNT(compiler->options))) {
+ FAIL_IF(push_inst(compiler, ADDI_D | RD(TMP_REG1) | RJ(src) | IMM_I12(0)));
+ src = TMP_REG1;
+ }
+
+ FAIL_IF(emit_stack_frame_release(compiler, 0));
+ type = SLJIT_JUMP;
+ }
+
+ SLJIT_SKIP_CHECKS(compiler);
+ return sljit_emit_ijump(compiler, type, src, srcw);
+}
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *compiler, sljit_s32 op,
+ sljit_s32 dst, sljit_sw dstw,
+ sljit_s32 type)
+{
+ sljit_s32 src_r, dst_r, invert;
+ sljit_s32 saved_op = op;
+ sljit_s32 mem_type = ((op & SLJIT_32) || op == SLJIT_MOV32) ? (INT_DATA | SIGNED_DATA) : WORD_DATA;
+
+ CHECK_ERROR();
+ CHECK(check_sljit_emit_op_flags(compiler, op, dst, dstw, type));
+ ADJUST_LOCAL_OFFSET(dst, dstw);
+
+ op = GET_OPCODE(op);
+ dst_r = (op < SLJIT_ADD && FAST_IS_REG(dst)) ? dst : TMP_REG2;
+
+ compiler->cache_arg = 0;
+ compiler->cache_argw = 0;
+
+ if (op >= SLJIT_ADD && (dst & SLJIT_MEM))
+ FAIL_IF(emit_op_mem2(compiler, mem_type | LOAD_DATA, TMP_REG1, dst, dstw, dst, dstw));
+
+ if (type < SLJIT_F_EQUAL) {
+ src_r = OTHER_FLAG;
+ invert = type & 0x1;
+
+ switch (type) {
+ case SLJIT_EQUAL:
+ case SLJIT_NOT_EQUAL:
+ FAIL_IF(push_inst(compiler, SLTUI | RD(dst_r) | RJ(EQUAL_FLAG) | IMM_I12(1)));
+ src_r = dst_r;
+ break;
+ case SLJIT_ATOMIC_STORED:
+ case SLJIT_ATOMIC_NOT_STORED:
+ FAIL_IF(push_inst(compiler, SLTUI | RD(dst_r) | RJ(EQUAL_FLAG) | IMM_I12(1)));
+ src_r = dst_r;
+ invert ^= 0x1;
+ break;
+ case SLJIT_OVERFLOW:
+ case SLJIT_NOT_OVERFLOW:
+ if (compiler->status_flags_state & (SLJIT_CURRENT_FLAGS_ADD | SLJIT_CURRENT_FLAGS_SUB)) {
+ src_r = OTHER_FLAG;
+ break;
+ }
+ FAIL_IF(push_inst(compiler, SLTUI | RD(dst_r) | RJ(OTHER_FLAG) | IMM_I12(1)));
+ src_r = dst_r;
+ invert ^= 0x1;
+ break;
+ }
+ } else {
+ invert = 0;
+ src_r = OTHER_FLAG;
+
+ switch (type) {
+ case SLJIT_ORDERED_NOT_EQUAL:
+ case SLJIT_ORDERED_LESS_EQUAL:
+ case SLJIT_ORDERED_GREATER_EQUAL:
+ case SLJIT_F_NOT_EQUAL:
+ case SLJIT_UNORDERED_OR_NOT_EQUAL:
+ case SLJIT_UNORDERED_OR_GREATER_EQUAL:
+ case SLJIT_UNORDERED_OR_LESS_EQUAL:
+ case SLJIT_F_LESS_EQUAL:
+ case SLJIT_F_GREATER_EQUAL:
+ case SLJIT_ORDERED:
+ invert = 1;
+ break;
+ }
+ }
+
+ if (invert) {
+ FAIL_IF(push_inst(compiler, XORI | RD(dst_r) | RJ(src_r) | IMM_I12(1)));
+ src_r = dst_r;
+ }
+
+ if (op < SLJIT_ADD) {
+ if (dst & SLJIT_MEM)
+ return emit_op_mem(compiler, mem_type, src_r, dst, dstw);
+
+ if (src_r != dst_r)
+ return push_inst(compiler, ADDI_D | RD(dst_r) | RJ(src_r) | IMM_I12(0));
+ return SLJIT_SUCCESS;
+ }
+
+ mem_type |= CUMULATIVE_OP | IMM_OP | ALT_KEEP_CACHE;
+
+ if (dst & SLJIT_MEM)
+ return emit_op(compiler, saved_op, mem_type, dst, dstw, TMP_REG1, 0, src_r, 0);
+ return emit_op(compiler, saved_op, mem_type, dst, dstw, dst, dstw, src_r, 0);
+}
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_select(struct sljit_compiler *compiler, sljit_s32 type,
+ sljit_s32 dst_reg,
+ sljit_s32 src1, sljit_sw src1w,
+ sljit_s32 src2_reg)
+{
+ sljit_ins *ptr;
+ sljit_uw size;
+ sljit_s32 inp_flags = ((type & SLJIT_32) ? INT_DATA : WORD_DATA) | LOAD_DATA;
+
+ CHECK_ERROR();
+ CHECK(check_sljit_emit_select(compiler, type, dst_reg, src1, src1w, src2_reg));
+ ADJUST_LOCAL_OFFSET(src1, src1w);
+
+ if (dst_reg != src2_reg) {
+ if (dst_reg == src1) {
+ src1 = src2_reg;
+ src1w = 0;
+ type ^= 0x1;
+ } else {
+ if (ADDRESSING_DEPENDS_ON(src1, dst_reg)) {
+ FAIL_IF(push_inst(compiler, ADDI_D | RD(TMP_REG1) | RJ(dst_reg) | IMM_I12(0)));
+
+ if ((src1 & REG_MASK) == dst_reg)
+ src1 = (src1 & ~REG_MASK) | TMP_REG1;
+
+ if (OFFS_REG(src1) == dst_reg)
+ src1 = (src1 & ~OFFS_REG_MASK) | TO_OFFS_REG(TMP_REG1);
+ }
+
+ FAIL_IF(push_inst(compiler, ADDI_D | RD(dst_reg) | RJ(src2_reg) | IMM_I12(0)));
+ }
+ }
+
+ size = compiler->size;
+
+ ptr = (sljit_ins*)ensure_buf(compiler, sizeof(sljit_ins));
+ FAIL_IF(!ptr);
+ compiler->size++;
+
+ if (src1 & SLJIT_MEM) {
+ FAIL_IF(emit_op_mem(compiler, inp_flags, dst_reg, src1, src1w));
+ } else if (src1 == SLJIT_IMM) {
+ if (type & SLJIT_32)
+ src1w = (sljit_s32)src1w;
+ FAIL_IF(load_immediate(compiler, dst_reg, src1w));
+ } else
+ FAIL_IF(push_inst(compiler, ADDI_D | RD(dst_reg) | RJ(src1) | IMM_I12(0)));
+
+ *ptr = get_jump_instruction(type & ~SLJIT_32) | IMM_I16(compiler->size - size);
+ return SLJIT_SUCCESS;
+}
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fselect(struct sljit_compiler *compiler, sljit_s32 type,
+ sljit_s32 dst_freg,
+ sljit_s32 src1, sljit_sw src1w,
+ sljit_s32 src2_freg)
+{
+ sljit_s32 invert = 0;
+
+ CHECK_ERROR();
+ CHECK(check_sljit_emit_fselect(compiler, type, dst_freg, src1, src1w, src2_freg));
+
+ ADJUST_LOCAL_OFFSET(src1, src1w);
+
+ if ((type & ~SLJIT_32) == SLJIT_EQUAL || (type & ~SLJIT_32) == SLJIT_NOT_EQUAL) {
+ if ((type & ~SLJIT_32) == SLJIT_EQUAL)
+ invert = 1;
+ FAIL_IF(push_inst(compiler, MOVGR2CF | FCD(F_OTHER_FLAG) | RJ(EQUAL_FLAG)));
+ } else {
+ if (get_jump_instruction(type & ~SLJIT_32) == (BNE | RJ(OTHER_FLAG) | RD(TMP_ZERO)))
+ invert = 1;
+ FAIL_IF(push_inst(compiler, MOVGR2CF | FCD(F_OTHER_FLAG) | RJ(OTHER_FLAG)));
+ }
+
+ if (src1 & SLJIT_MEM) {
+ FAIL_IF(emit_op_mem(compiler, FLOAT_DATA(type) | LOAD_DATA, TMP_FREG2, src1, src1w));
+ if (invert)
+ return push_inst(compiler, FSEL | FRD(dst_freg) | FRJ(TMP_FREG2) | FRK(src2_freg) | FCA(F_OTHER_FLAG));
+ return push_inst(compiler, FSEL | FRD(dst_freg) | FRJ(src2_freg) | FRK(TMP_FREG2) | FCA(F_OTHER_FLAG));
+ } else {
+ if (invert)
+ return push_inst(compiler, FSEL | FRD(dst_freg) | FRJ(src1) | FRK(src2_freg) | FCA(F_OTHER_FLAG));
+ return push_inst(compiler, FSEL | FRD(dst_freg) | FRJ(src2_freg) | FRK(src1) | FCA(F_OTHER_FLAG));
+ }
+}
+
+#undef FLOAT_DATA
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_mem(struct sljit_compiler *compiler, sljit_s32 type,
+ sljit_s32 reg,
+ sljit_s32 mem, sljit_sw memw)
+{
+ sljit_s32 flags;
+
+ CHECK_ERROR();
+ CHECK(check_sljit_emit_mem(compiler, type, reg, mem, memw));
+
+ if (!(reg & REG_PAIR_MASK))
+ return sljit_emit_mem_unaligned(compiler, type, reg, mem, memw);
+
+ if (SLJIT_UNLIKELY(mem & OFFS_REG_MASK)) {
+ memw &= 0x3;
+
+ if (SLJIT_UNLIKELY(memw != 0)) {
+ FAIL_IF(push_inst(compiler, SLLI_D | RD(TMP_REG1) | RJ(OFFS_REG(mem)) | IMM_I12(memw)));
+ FAIL_IF(push_inst(compiler, ADD_D| RD(TMP_REG1) | RJ(TMP_REG1) | RK(mem & REG_MASK)));
+ } else
+ FAIL_IF(push_inst(compiler, ADD_D| RD(TMP_REG1) | RJ(mem & REG_MASK) | RK(OFFS_REG(mem))));
+
+ mem = TMP_REG1;
+ memw = 0;
+ } else if (memw > I12_MAX - SSIZE_OF(sw) || memw < I12_MIN) {
+ if (((memw + 0x800) & 0xfff) <= 0xfff - SSIZE_OF(sw)) {
+ FAIL_IF(load_immediate(compiler, TMP_REG1, TO_ARGW_HI(memw)));
+ memw &= 0xfff;
+ } else {
+ FAIL_IF(load_immediate(compiler, TMP_REG1, memw));
+ memw = 0;
+ }
+
+ if (mem & REG_MASK)
+ FAIL_IF(push_inst(compiler, ADD_D| RD(TMP_REG1) | RJ(TMP_REG1) | RK(mem & REG_MASK)));
+
+ mem = TMP_REG1;
+ } else {
+ mem &= REG_MASK;
+ memw &= 0xfff;
+ }
+
+ SLJIT_ASSERT((memw >= 0 && memw <= I12_MAX - SSIZE_OF(sw)) || (memw > I12_MAX && memw <= 0xfff));
+
+ if (!(type & SLJIT_MEM_STORE) && mem == REG_PAIR_FIRST(reg)) {
+ FAIL_IF(push_mem_inst(compiler, WORD_DATA | LOAD_DATA, REG_PAIR_SECOND(reg), SLJIT_MEM1(mem), (memw + SSIZE_OF(sw)) & 0xfff));
+ return push_mem_inst(compiler, WORD_DATA | LOAD_DATA, REG_PAIR_FIRST(reg), SLJIT_MEM1(mem), memw);
+ }
+
+ flags = WORD_DATA | (!(type & SLJIT_MEM_STORE) ? LOAD_DATA : 0);
+
+ FAIL_IF(push_mem_inst(compiler, flags, REG_PAIR_FIRST(reg), SLJIT_MEM1(mem), memw));
+ return push_mem_inst(compiler, flags, REG_PAIR_SECOND(reg), SLJIT_MEM1(mem), (memw + SSIZE_OF(sw)) & 0xfff);
+}
+
+#undef TO_ARGW_HI
+
+static sljit_s32 sljit_emit_simd_mem_offset(struct sljit_compiler *compiler, sljit_s32 *mem_ptr, sljit_sw memw)
+{
+ sljit_s32 mem = *mem_ptr;
+
+ if (SLJIT_UNLIKELY(mem & OFFS_REG_MASK)) {
+ *mem_ptr = TMP_REG3;
+ FAIL_IF(push_inst(compiler, SLLI_D | RD(TMP_REG3) | RJ(OFFS_REG(mem)) | IMM_I12(memw & 0x3)));
+ return push_inst(compiler, ADD_D | RD(TMP_REG3) | RJ(TMP_REG3) | RK(mem & REG_MASK));
+ }
+
+ if (!(mem & REG_MASK)) {
+ *mem_ptr = TMP_REG3;
+ return load_immediate(compiler, TMP_REG3, memw);
+ }
+
+ mem &= REG_MASK;
+
+ if (memw == 0) {
+ *mem_ptr = mem;
+ return SLJIT_SUCCESS;
+ }
+
+ *mem_ptr = TMP_REG3;
+
+ FAIL_IF(load_immediate(compiler, TMP_REG3, memw));
+ return push_inst(compiler, ADD_D | RD(TMP_REG3) | RJ(TMP_REG3) | RK(mem));
+}
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_mov(struct sljit_compiler *compiler, sljit_s32 type,
+ sljit_s32 freg,
+ sljit_s32 srcdst, sljit_sw srcdstw)
+{
+ sljit_s32 reg_size = SLJIT_SIMD_GET_REG_SIZE(type);
+ sljit_ins ins = 0;
+
+ CHECK_ERROR();
+ CHECK(check_sljit_emit_simd_mov(compiler, type, freg, srcdst, srcdstw));
+
+ ADJUST_LOCAL_OFFSET(srcdst, srcdstw);
+
+ if (reg_size != 5 && reg_size != 4)
+ return SLJIT_ERR_UNSUPPORTED;
+
+ if (reg_size == 5 && !(get_cpu_features(GET_HWCAP) & LOONGARCH_HWCAP_LASX))
+ return SLJIT_ERR_UNSUPPORTED;
+
+ if (type & SLJIT_SIMD_TEST)
+ return SLJIT_SUCCESS;
+
+ if (!(srcdst & SLJIT_MEM)) {
+ if (type & SLJIT_SIMD_STORE)
+ ins = FRD(srcdst) | FRJ(freg) | FRK(freg);
+ else
+ ins = FRD(freg) | FRJ(srcdst) | FRK(srcdst);
+
+ if (reg_size == 5)
+ ins |= VOR_V | (sljit_ins)1 << 26;
+ else
+ ins |= VOR_V;
+
+ return push_inst(compiler, ins);
+ }
+
+ ins = (type & SLJIT_SIMD_STORE) ? VST : VLD;
+
+ if (reg_size == 5)
+ ins = (type & SLJIT_SIMD_STORE) ? XVST : XVLD;
+
+ if (FAST_IS_REG(srcdst) && srcdst >= 0 && (srcdstw >= I12_MIN && srcdstw <= I12_MAX))
+ return push_inst(compiler, ins | FRD(freg) | RJ((sljit_u8)srcdst) | IMM_I12(srcdstw));
+ else {
+ FAIL_IF(sljit_emit_simd_mem_offset(compiler, &srcdst, srcdstw));
+ return push_inst(compiler, ins | FRD(freg) | RJ(srcdst) | IMM_I12(0));
+ }
+}
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_replicate(struct sljit_compiler *compiler, sljit_s32 type,
+ sljit_s32 freg,
+ sljit_s32 src, sljit_sw srcw)
+{
+ sljit_s32 reg_size = SLJIT_SIMD_GET_REG_SIZE(type);
+ sljit_s32 elem_size = SLJIT_SIMD_GET_ELEM_SIZE(type);
+ sljit_ins ins = 0;
+
+ CHECK_ERROR();
+ CHECK(check_sljit_emit_simd_replicate(compiler, type, freg, src, srcw));
+
+ ADJUST_LOCAL_OFFSET(src, srcw);
+
+ if (reg_size != 5 && reg_size != 4)
+ return SLJIT_ERR_UNSUPPORTED;
+
+ if (reg_size == 5 && !(get_cpu_features(GET_HWCAP) & LOONGARCH_HWCAP_LASX))
+ return SLJIT_ERR_UNSUPPORTED;
+
+ if (type & SLJIT_SIMD_TEST)
+ return SLJIT_SUCCESS;
+
+ if (src & SLJIT_MEM) {
+ FAIL_IF(sljit_emit_simd_mem_offset(compiler, &src, srcw));
+
+ if (reg_size == 5)
+ ins = (sljit_ins)1 << 25;
+
+ return push_inst(compiler, VLDREPL | ins | FRD(freg) | RJ(src) | (sljit_ins)1 << (23 - elem_size));
+ }
+
+ if (reg_size == 5)
+ ins = (sljit_ins)1 << 26;
+
+ if (type & SLJIT_SIMD_FLOAT) {
+ if (src == SLJIT_IMM)
+ return push_inst(compiler, VREPLGR2VR | ins | FRD(freg) | RJ(TMP_ZERO) | (sljit_ins)elem_size << 10);
+
+ FAIL_IF(push_inst(compiler, VREPLVE | ins | FRD(freg) | FRJ(src) | RK(TMP_ZERO) | (sljit_ins)elem_size << 15));
+
+ if (reg_size == 5) {
+ ins = (sljit_ins)(0x44 << 10);
+ return push_inst(compiler, XVPERMI | ins | FRD(freg) | FRJ(freg));
+ }
+
+ return SLJIT_SUCCESS;
+ }
+
+ ins |= VREPLGR2VR | (sljit_ins)elem_size << 10;
+
+ if (src == SLJIT_IMM) {
+ FAIL_IF(load_immediate(compiler, TMP_REG2, srcw));
+ src = TMP_REG2;
+ }
+
+ return push_inst(compiler, ins | FRD(freg) | RJ(src));
+}
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_lane_mov(struct sljit_compiler *compiler, sljit_s32 type,
+ sljit_s32 freg, sljit_s32 lane_index,
+ sljit_s32 srcdst, sljit_sw srcdstw)
+{
+ sljit_s32 reg_size = SLJIT_SIMD_GET_REG_SIZE(type);
+ sljit_s32 elem_size = SLJIT_SIMD_GET_ELEM_SIZE(type);
+ sljit_ins ins = 0;
+
+ CHECK_ERROR();
+ CHECK(check_sljit_emit_simd_lane_mov(compiler, type, freg, lane_index, srcdst, srcdstw));
+
+ ADJUST_LOCAL_OFFSET(srcdst, srcdstw);
+
+ if (reg_size != 5 && reg_size != 4)
+ return SLJIT_ERR_UNSUPPORTED;
+
+ if (reg_size == 5 && !(get_cpu_features(GET_HWCAP) & LOONGARCH_HWCAP_LASX))
+ return SLJIT_ERR_UNSUPPORTED;
+
+ if ((type & SLJIT_SIMD_FLOAT) && (elem_size < 2 || elem_size > 3))
+ return SLJIT_ERR_UNSUPPORTED;
+
+ if ((type & SLJIT_SIMD_FLOAT) && (elem_size < 2 || elem_size > 3))
+ return SLJIT_ERR_UNSUPPORTED;
+
+ if (type & SLJIT_SIMD_TEST)
+ return SLJIT_SUCCESS;
+
+ if (type & SLJIT_SIMD_LANE_ZERO) {
+ ins = (reg_size == 5) ? ((sljit_ins)1 << 26) : 0;
+
+ if ((type & SLJIT_SIMD_FLOAT) && freg == srcdst) {
+ FAIL_IF(push_inst(compiler, VOR_V | ins | FRD(TMP_FREG1) | FRJ(freg) | FRK(freg)));
+ srcdst = TMP_FREG1;
+ srcdstw = 0;
+ }
+
+ FAIL_IF(push_inst(compiler, VXOR_V | ins | FRD(freg) | FRJ(freg) | FRK(freg)));
+ }
+
+ if (srcdst & SLJIT_MEM) {
+ FAIL_IF(sljit_emit_simd_mem_offset(compiler, &srcdst, srcdstw));
+
+ if (reg_size == 5)
+ ins = (sljit_ins)1 << 25;
+
+ if (type & SLJIT_SIMD_STORE) {
+ ins |= (sljit_ins)lane_index << 18 | (sljit_ins)(1 << (23 - elem_size));
+ return push_inst(compiler, VSTELM | ins | FRD(freg) | RJ(srcdst));
+ } else {
+ emit_op_mem(compiler, (elem_size == 3 ? WORD_DATA : (elem_size == 2 ? INT_DATA : (elem_size == 1 ? HALF_DATA : BYTE_DATA))) | LOAD_DATA, TMP_REG1, srcdst | SLJIT_MEM, 0);
+ srcdst = TMP_REG1;
+ ins = (sljit_ins)(0x3f ^ (0x1f >> elem_size)) << 10;
+
+ if (reg_size == 5) {
+ if (elem_size < 2) {
+ FAIL_IF(push_inst(compiler, VOR_V | (sljit_ins)1 << 26 | FRD(TMP_FREG1) | FRJ(freg) | FRK(freg)));
+ if (lane_index >= (2 << (3 - elem_size))) {
+ FAIL_IF(push_inst(compiler, XVPERMI | (sljit_ins)1 << 18 | FRD(TMP_FREG1) | FRJ(freg) | IMM_I8(1)));
+ FAIL_IF(push_inst(compiler, VINSGR2VR | ins | FRD(TMP_FREG1) | RJ(srcdst) | IMM_V(lane_index % (2 << (3 - elem_size)))));
+ return push_inst(compiler, XVPERMI | (sljit_ins)1 << 18 | FRD(freg) | FRJ(TMP_FREG1) | IMM_I8(2));
+ } else {
+ FAIL_IF(push_inst(compiler, VINSGR2VR | ins | FRD(freg) | RJ(srcdst) | IMM_V(lane_index)));
+ return push_inst(compiler, XVPERMI | (sljit_ins)1 << 18 | FRD(freg) | FRJ(TMP_FREG1) | IMM_I8(18));
+ }
+ } else
+ ins = (sljit_ins)(0x3f ^ (0x3f >> elem_size)) << 10 | (sljit_ins)1 << 26;
+ }
+
+ return push_inst(compiler, VINSGR2VR | ins | FRD(freg) | RJ(srcdst) | IMM_V(lane_index));
+ }
+ }
+
+ if (type & SLJIT_SIMD_FLOAT) {
+ ins = (reg_size == 5) ? (sljit_ins)(0x3f ^ (0x3f >> elem_size)) << 10 | (sljit_ins)1 << 26 : (sljit_ins)(0x3f ^ (0x1f >> elem_size)) << 10;
+
+ if (type & SLJIT_SIMD_STORE) {
+ FAIL_IF(push_inst(compiler, VPICKVE2GR_U | ins | RD(TMP_REG1) | FRJ(freg) | IMM_V(lane_index)));
+ return push_inst(compiler, VINSGR2VR | ins | FRD(srcdst) | RJ(TMP_REG1) | IMM_V(0));
+ } else {
+ FAIL_IF(push_inst(compiler, VPICKVE2GR_U | ins | RD(TMP_REG1) | FRJ(srcdst) | IMM_V(0)));
+ return push_inst(compiler, VINSGR2VR | ins | FRD(freg) | RJ(TMP_REG1) | IMM_V(lane_index));
+ }
+ }
+
+ if (srcdst == SLJIT_IMM) {
+ FAIL_IF(load_immediate(compiler, TMP_REG1, srcdstw));
+ srcdst = TMP_REG1;
+ }
+
+ if (type & SLJIT_SIMD_STORE) {
+ ins = (sljit_ins)(0x3f ^ (0x1f >> elem_size)) << 10;
+
+ if (type & SLJIT_SIMD_LANE_SIGNED)
+ ins |= (sljit_ins)(VPICKVE2GR_U ^ (0x7 << 18));
+ else
+ ins |= VPICKVE2GR_U;
+
+ if (reg_size == 5) {
+ if (elem_size < 2) {
+ if (lane_index >= (2 << (3 - elem_size))) {
+ if (type & SLJIT_SIMD_LANE_SIGNED)
+ ins |= (sljit_ins)(VPICKVE2GR_U ^ (0x7 << 18));
+ else
+ ins |= VPICKVE2GR_U;
+
+ FAIL_IF(push_inst(compiler, VOR_V | (sljit_ins)1 << 26 | FRD(TMP_FREG1) | FRJ(freg) | FRK(freg)));
+ FAIL_IF(push_inst(compiler, XVPERMI | (sljit_ins)1 << 18 | FRD(TMP_FREG1) | FRJ(freg) | IMM_I8(1)));
+ return push_inst(compiler, ins | RD(srcdst) | FRJ(TMP_FREG1) | IMM_V(lane_index % (2 << (3 - elem_size))));
+ }
+ } else {
+ ins ^= (sljit_ins)1 << (15 - elem_size);
+ ins |= (sljit_ins)1 << 26;
+ }
+ }
+
+ return push_inst(compiler, ins | RD(srcdst) | FRJ(freg) | IMM_V(lane_index));
+ } else {
+ ins = (sljit_ins)(0x3f ^ (0x1f >> elem_size)) << 10;
+
+ if (reg_size == 5) {
+ if (elem_size < 2) {
+ FAIL_IF(push_inst(compiler, VOR_V | (sljit_ins)1 << 26 | FRD(TMP_FREG1) | FRJ(freg) | FRK(freg)));
+ if (lane_index >= (2 << (3 - elem_size))) {
+ FAIL_IF(push_inst(compiler, XVPERMI | (sljit_ins)1 << 18 | FRD(TMP_FREG1) | FRJ(freg) | IMM_I8(1)));
+ FAIL_IF(push_inst(compiler, VINSGR2VR | ins | FRD(TMP_FREG1) | RJ(srcdst) | IMM_V(lane_index % (2 << (3 - elem_size)))));
+ return push_inst(compiler, XVPERMI | (sljit_ins)1 << 18 | FRD(freg) | FRJ(TMP_FREG1) | IMM_I8(2));
+ } else {
+ FAIL_IF(push_inst(compiler, VINSGR2VR | ins | FRD(freg) | RJ(srcdst) | IMM_V(lane_index)));
+ return push_inst(compiler, XVPERMI | (sljit_ins)1 << 18 | FRD(freg) | FRJ(TMP_FREG1) | IMM_I8(18));
+ }
+ } else
+ ins = (sljit_ins)(0x3f ^ (0x3f >> elem_size)) << 10 | (sljit_ins)1 << 26;
+ }
+
+ return push_inst(compiler, VINSGR2VR | ins | FRD(freg) | RJ(srcdst) | IMM_V(lane_index));
+ }
+
+ return SLJIT_ERR_UNSUPPORTED;
+}
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_lane_replicate(struct sljit_compiler *compiler, sljit_s32 type,
+ sljit_s32 freg,
+ sljit_s32 src, sljit_s32 src_lane_index)
+{
+ sljit_s32 reg_size = SLJIT_SIMD_GET_REG_SIZE(type);
+ sljit_s32 elem_size = SLJIT_SIMD_GET_ELEM_SIZE(type);
+ sljit_ins ins = 0;
+
+ CHECK_ERROR();
+ CHECK(check_sljit_emit_simd_lane_replicate(compiler, type, freg, src, src_lane_index));
+
+ if (reg_size != 5 && reg_size != 4)
+ return SLJIT_ERR_UNSUPPORTED;
+
+ if (reg_size == 5 && !(get_cpu_features(GET_HWCAP) & LOONGARCH_HWCAP_LASX))
+ return SLJIT_ERR_UNSUPPORTED;
+
+ if (type & SLJIT_SIMD_TEST)
+ return SLJIT_SUCCESS;
+
+ ins = (sljit_ins)(0x3f ^ (0x1f >> elem_size)) << 10;
+
+ if (reg_size == 5) {
+ FAIL_IF(push_inst(compiler, VREPLVEI | (sljit_ins)1 << 26 | ins | FRD(freg) | FRJ(src) | IMM_V(src_lane_index % (2 << (3 - elem_size)))));
+
+ ins = (src_lane_index < (2 << (3 - elem_size))) ? (sljit_ins)(0x44 << 10) : (sljit_ins)(0xee << 10);
+
+ return push_inst(compiler, XVPERMI | ins | FRD(freg) | FRJ(freg));
+ }
+
+ return push_inst(compiler, VREPLVEI | ins | FRD(freg) | FRJ(src) | IMM_V(src_lane_index));
+}
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_extend(struct sljit_compiler *compiler, sljit_s32 type,
+ sljit_s32 freg,
+ sljit_s32 src, sljit_sw srcw)
+{
+ sljit_s32 reg_size = SLJIT_SIMD_GET_REG_SIZE(type);
+ sljit_s32 elem_size = SLJIT_SIMD_GET_ELEM_SIZE(type);
+ sljit_s32 elem2_size = SLJIT_SIMD_GET_ELEM2_SIZE(type);
+ sljit_ins ins = 0;
+
+ CHECK_ERROR();
+ CHECK(check_sljit_emit_simd_extend(compiler, type, freg, src, srcw));
+
+ ADJUST_LOCAL_OFFSET(src, srcw);
+
+ if (reg_size != 5 && reg_size != 4)
+ return SLJIT_ERR_UNSUPPORTED;
+
+ if (reg_size == 5 && !(get_cpu_features(GET_HWCAP) & LOONGARCH_HWCAP_LASX))
+ return SLJIT_ERR_UNSUPPORTED;
+
+ if (type & SLJIT_SIMD_TEST)
+ return SLJIT_SUCCESS;
+
+ if (src & SLJIT_MEM) {
+ ins = (type & SLJIT_SIMD_STORE) ? VST : VLD;
+
+ if (reg_size == 5)
+ ins = (type & SLJIT_SIMD_STORE) ? XVST : XVLD;
+
+ if (FAST_IS_REG(src) && src >= 0 && (srcw >= I12_MIN && srcw <= I12_MAX))
+ FAIL_IF(push_inst(compiler, ins | FRD(freg) | RJ(src) | IMM_I12(srcw)));
+ else {
+ FAIL_IF(sljit_emit_simd_mem_offset(compiler, &src, srcw));
+ FAIL_IF(push_inst(compiler, ins | FRD(freg) | RJ(src) | IMM_I12(0)));
+ }
+ src = freg;
+ }
+
+ if (type & SLJIT_SIMD_FLOAT) {
+ if (elem_size != 2 || elem2_size != 3)
+ return SLJIT_ERR_UNSUPPORTED;
+
+ ins = 0;
+ if (reg_size == 5) {
+ ins = (sljit_ins)1 << 26;
+ FAIL_IF(push_inst(compiler, XVPERMI | FRD(src) | FRJ(src) | IMM_I8(16)));
+ }
+
+ return push_inst(compiler, VFCVTL_D_S | ins | FRD(freg) | FRJ(src));
+ }
+
+ ins = (type & SLJIT_SIMD_EXTEND_SIGNED) ? VSLLWIL : (VSLLWIL | (sljit_ins)1 << 18);
+
+ if (reg_size == 5)
+ ins |= (sljit_ins)1 << 26;
+
+ do {
+ if (reg_size == 5)
+ FAIL_IF(push_inst(compiler, XVPERMI | FRD(src) | FRJ(src) | IMM_I8(16)));
+
+ FAIL_IF(push_inst(compiler, ins | ((sljit_ins)1 << (13 + elem_size)) | FRD(freg) | FRJ(src)));
+ src = freg;
+ } while (++elem_size < elem2_size);
+
+ return SLJIT_SUCCESS;
+}
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_sign(struct sljit_compiler *compiler, sljit_s32 type,
+ sljit_s32 freg,
+ sljit_s32 dst, sljit_sw dstw)
+{
+ sljit_s32 reg_size = SLJIT_SIMD_GET_REG_SIZE(type);
+ sljit_s32 elem_size = SLJIT_SIMD_GET_ELEM_SIZE(type);
+ sljit_ins ins = 0;
+ sljit_s32 dst_r;
+
+ CHECK_ERROR();
+ CHECK(check_sljit_emit_simd_sign(compiler, type, freg, dst, dstw));
+
+ ADJUST_LOCAL_OFFSET(dst, dstw);
+
+ if (reg_size != 5 && reg_size != 4)
+ return SLJIT_ERR_UNSUPPORTED;
+
+ if (reg_size == 5 && !(get_cpu_features(GET_HWCAP) & LOONGARCH_HWCAP_LASX))
+ return SLJIT_ERR_UNSUPPORTED;
+
+ if (elem_size > 3 || ((type & SLJIT_SIMD_FLOAT) && elem_size < 2))
+ return SLJIT_ERR_UNSUPPORTED;
+
+ if (type & SLJIT_SIMD_TEST)
+ return SLJIT_SUCCESS;
+
+ dst_r = FAST_IS_REG(dst) ? dst : TMP_REG2;
+
+ if (reg_size == 5)
+ ins = (sljit_ins)1 << 26;
+
+ FAIL_IF(push_inst(compiler, VMSKLTZ | ins | (sljit_ins)(elem_size << 10) | FRD(TMP_FREG1) | FRJ(freg)));
+
+ FAIL_IF(push_inst(compiler, VPICKVE2GR_U | (sljit_ins)(0x3c << 10) | RD(dst_r) | FRJ(TMP_FREG1)));
+
+ if (reg_size == 5) {
+ FAIL_IF(push_inst(compiler, VPICKVE2GR_U | (sljit_ins)(0x38 << 10) | ins | RD(TMP_REG3) | FRJ(TMP_FREG1) | IMM_V(2)));
+ FAIL_IF(push_inst(compiler, SLLI_W | RD(TMP_REG3) | RJ(TMP_REG3) | IMM_I12(2 << (3 - elem_size))));
+ FAIL_IF(push_inst(compiler, OR | RD(dst_r) | RJ(dst_r) | RK(TMP_REG3)));
+ }
+
+ if (dst_r == TMP_REG2)
+ return emit_op_mem(compiler, ((type & SLJIT_32) ? INT_DATA : WORD_DATA), TMP_REG2, dst, dstw);
+
+ return SLJIT_SUCCESS;
+}
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_op2(struct sljit_compiler *compiler, sljit_s32 type,
+ sljit_s32 dst_freg, sljit_s32 src1_freg, sljit_s32 src2_freg)
+{
+ sljit_s32 reg_size = SLJIT_SIMD_GET_REG_SIZE(type);
+ sljit_s32 elem_size = SLJIT_SIMD_GET_ELEM_SIZE(type);
+ sljit_ins ins = 0;
+
+ CHECK_ERROR();
+ CHECK(check_sljit_emit_simd_op2(compiler, type, dst_freg, src1_freg, src2_freg));
+
+ if (reg_size != 5 && reg_size != 4)
+ return SLJIT_ERR_UNSUPPORTED;
+
+ if (reg_size == 5 && !(get_cpu_features(GET_HWCAP) & LOONGARCH_HWCAP_LASX))
+ return SLJIT_ERR_UNSUPPORTED;
+
+ if ((type & SLJIT_SIMD_FLOAT) && (elem_size < 2 || elem_size > 3))
+ return SLJIT_ERR_UNSUPPORTED;
+
+ if (type & SLJIT_SIMD_TEST)
+ return SLJIT_SUCCESS;
+
+ switch (SLJIT_SIMD_GET_OPCODE(type)) {
+ case SLJIT_SIMD_OP2_AND:
+ ins = VAND_V;
+ break;
+ case SLJIT_SIMD_OP2_OR:
+ ins = VOR_V;
+ break;
+ case SLJIT_SIMD_OP2_XOR:
+ ins = VXOR_V;
+ break;
+ }
+
+ if (reg_size == 5)
+ ins |= (sljit_ins)1 << 26;
+
+ return push_inst(compiler, ins | FRD(dst_freg) | FRJ(src1_freg) | FRK(src2_freg));
+}
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_atomic_load(struct sljit_compiler *compiler,
+ sljit_s32 op,
+ sljit_s32 dst_reg,
+ sljit_s32 mem_reg)
+{
+ sljit_ins ins;
+
+ CHECK_ERROR();
+ CHECK(check_sljit_emit_atomic_load(compiler, op, dst_reg, mem_reg));
+
+ switch(GET_OPCODE(op)) {
+ case SLJIT_MOV_U8:
+ ins = LD_BU;
+ break;
+ case SLJIT_MOV_U16:
+ ins = LD_HU;
+ break;
+ case SLJIT_MOV32:
+ ins = LD_W;
+ break;
+ case SLJIT_MOV_U32:
+ ins = LD_WU;
+ break;
+ default:
+ ins = LD_D;
+ break;
+ }
+
+ return push_inst(compiler, ins | RD(dst_reg) | RJ(mem_reg) | IMM_I12(0));
+}
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_atomic_store(struct sljit_compiler *compiler,
+ sljit_s32 op,
+ sljit_s32 src_reg,
+ sljit_s32 mem_reg,
+ sljit_s32 temp_reg)
+{
+ sljit_ins ins = 0;
+ sljit_ins unsign = 0;
+ sljit_s32 tmp = temp_reg;
+
+ CHECK_ERROR();
+ CHECK(check_sljit_emit_atomic_store(compiler, op, src_reg, mem_reg, temp_reg));
+
+ switch (GET_OPCODE(op)) {
+ case SLJIT_MOV_U8:
+ ins = AMCAS_B;
+ unsign = BSTRPICK_D | (7 << 16);
+ break;
+ case SLJIT_MOV_U16:
+ ins = AMCAS_H;
+ unsign = BSTRPICK_D | (15 << 16);
+ break;
+ case SLJIT_MOV32:
+ ins = AMCAS_W;
+ break;
+ case SLJIT_MOV_U32:
+ ins = AMCAS_W;
+ unsign = BSTRPICK_D | (31 << 16);
+ break;
+ default:
+ ins = AMCAS_D;
+ break;
+ }
+
+ if (op & SLJIT_SET_ATOMIC_STORED) {
+ FAIL_IF(push_inst(compiler, XOR | RD(TMP_REG1) | RJ(temp_reg) | RK(TMP_ZERO)));
+ tmp = TMP_REG1;
+ }
+ FAIL_IF(push_inst(compiler, ins | RD(tmp) | RJ(mem_reg) | RK(src_reg)));
+ if (!(op & SLJIT_SET_ATOMIC_STORED))
+ return SLJIT_SUCCESS;
+
+ if (unsign)
+ FAIL_IF(push_inst(compiler, unsign | RD(tmp) | RJ(tmp)));
+
+ FAIL_IF(push_inst(compiler, XOR | RD(EQUAL_FLAG) | RJ(tmp) | RK(temp_reg)));
+ return push_inst(compiler, SLTUI | RD(EQUAL_FLAG) | RJ(EQUAL_FLAG) | IMM_I12(1));
+}
+
+static SLJIT_INLINE sljit_s32 emit_const(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw init_value, sljit_ins last_ins)
+{
+ SLJIT_UNUSED_ARG(last_ins);
+
+ FAIL_IF(push_inst(compiler, LU12I_W | RD(dst) | (sljit_ins)(((init_value & 0xffffffff) >> 12) << 5)));
+ FAIL_IF(push_inst(compiler, LU32I_D | RD(dst) | (sljit_ins)(((init_value >> 32) & 0xfffff) << 5)));
+ FAIL_IF(push_inst(compiler, LU52I_D | RD(dst) | RJ(dst) | (sljit_ins)(IMM_I12(init_value >> 52))));
+ return push_inst(compiler, ORI | RD(dst) | RJ(dst) | IMM_I12(init_value));
+}
+
+SLJIT_API_FUNC_ATTRIBUTE void sljit_set_jump_addr(sljit_uw addr, sljit_uw new_target, sljit_sw executable_offset)
+{
+ sljit_ins *inst = (sljit_ins*)addr;
+ SLJIT_UNUSED_ARG(executable_offset);
+
+ SLJIT_UPDATE_WX_FLAGS(inst, inst + 4, 0);
+
+ SLJIT_ASSERT((inst[0] & OPC_1RI20(0x7f)) == LU12I_W);
+ inst[0] = (inst[0] & (OPC_1RI20(0x7f) | 0x1f)) | (sljit_ins)(((new_target & 0xffffffff) >> 12) << 5);
+
+ SLJIT_ASSERT((inst[1] & OPC_1RI20(0x7f)) == LU32I_D);
+ inst[1] = (inst[1] & (OPC_1RI20(0x7f) | 0x1f)) | (sljit_ins)(sljit_ins)(((new_target >> 32) & 0xfffff) << 5);
+
+ SLJIT_ASSERT((inst[2] & OPC_2RI12(0x3ff)) == LU52I_D);
+ inst[2] = (inst[2] & (OPC_2RI12(0x3ff) | 0x3ff)) | IMM_I12(new_target >> 52);
+
+ SLJIT_ASSERT((inst[3] & OPC_2RI12(0x3ff)) == ORI || (inst[3] & OPC_2RI16(0x3f)) == JIRL);
+ if ((inst[3] & OPC_2RI12(0x3ff)) == ORI)
+ inst[3] = (inst[3] & (OPC_2RI12(0x3ff) | 0x3ff)) | IMM_I12(new_target);
+ else
+ inst[3] = (inst[3] & (OPC_2RI16(0x3f) | 0x3ff)) | IMM_I12((new_target & 0xfff) >> 2);
+
+ SLJIT_UPDATE_WX_FLAGS(inst, inst + 4, 1);
+
+ inst = (sljit_ins *)SLJIT_ADD_EXEC_OFFSET(inst, executable_offset);
+ SLJIT_CACHE_FLUSH(inst, inst + 4);
+}
+
+SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw dstw, sljit_sw init_value)
+{
+ struct sljit_const *const_;
+ sljit_s32 dst_r;
+
+ CHECK_ERROR_PTR();
+ CHECK_PTR(check_sljit_emit_const(compiler, dst, dstw, init_value));
+ ADJUST_LOCAL_OFFSET(dst, dstw);
+
+ const_ = (struct sljit_const*)ensure_abuf(compiler, sizeof(struct sljit_const));
+ PTR_FAIL_IF(!const_);
+ set_const(const_, compiler);
+
+ dst_r = FAST_IS_REG(dst) ? dst : TMP_REG2;
+ PTR_FAIL_IF(emit_const(compiler, dst_r, init_value, 0));
+
+ if (dst & SLJIT_MEM)
+ PTR_FAIL_IF(emit_op_mem(compiler, WORD_DATA, TMP_REG2, dst, dstw));
+
+ return const_;
+}
+
+SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_mov_addr(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw dstw)
+{
+ struct sljit_jump *jump;
+ sljit_s32 dst_r;
+
+ CHECK_ERROR_PTR();
+ CHECK_PTR(check_sljit_emit_mov_addr(compiler, dst, dstw));
+ ADJUST_LOCAL_OFFSET(dst, dstw);
+
+ jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump));
+ PTR_FAIL_IF(!jump);
+ set_mov_addr(jump, compiler, 0);
+
+ dst_r = FAST_IS_REG(dst) ? dst : TMP_REG2;
+ PTR_FAIL_IF(push_inst(compiler, (sljit_ins)dst_r));
+
+ compiler->size += JUMP_MAX_SIZE - 1;
+
+ if (dst & SLJIT_MEM)
+ PTR_FAIL_IF(emit_op_mem(compiler, WORD_DATA, TMP_REG2, dst, dstw));
+
+ return jump;
+}
+
+SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_sw new_constant, sljit_sw executable_offset)
+{
+ sljit_set_jump_addr(addr, (sljit_uw)new_constant, executable_offset);
+}
diff --git a/src/3rdparty/pcre2/src/sljit/sljitNativeMIPS_32.c b/src/3rdparty/pcre2/src/sljit/sljitNativeMIPS_32.c
index 9620b945f6..91153e5f25 100644
--- a/src/3rdparty/pcre2/src/sljit/sljitNativeMIPS_32.c
+++ b/src/3rdparty/pcre2/src/sljit/sljitNativeMIPS_32.c
@@ -225,7 +225,7 @@ static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_t
sljit_ins f64_hi = TA(6), f64_lo = TA(7);
#endif /* SLJIT_LITTLE_ENDIAN */
- SLJIT_ASSERT(reg_map[TMP_REG1] == 4 && freg_map[TMP_FREG1] == 12);
+ SLJIT_ASSERT(reg_map[TMP_REG2] == 4 && freg_map[TMP_FREG1] == 12);
arg_types >>= SLJIT_ARG_SHIFT;
@@ -370,7 +370,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_call(struct sljit_compile
} else if (type & SLJIT_CALL_RETURN)
PTR_FAIL_IF(emit_stack_frame_release(compiler, 0, &ins));
- SLJIT_ASSERT(DR(PIC_ADDR_REG) == 25 && PIC_ADDR_REG == TMP_REG2);
+ SLJIT_ASSERT(DR(PIC_ADDR_REG) == 25);
if (ins == NOP && compiler->delay_slot != UNMOVABLE_INS)
jump->flags |= IS_MOVABLE;
@@ -441,7 +441,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_icall(struct sljit_compiler *compi
return sljit_emit_ijump(compiler, type, src, srcw);
}
- SLJIT_ASSERT(DR(PIC_ADDR_REG) == 25 && PIC_ADDR_REG == TMP_REG2);
+ SLJIT_ASSERT(DR(PIC_ADDR_REG) == 25);
if (src == SLJIT_IMM)
FAIL_IF(load_immediate(compiler, DR(PIC_ADDR_REG), srcw));
diff --git a/src/3rdparty/pcre2/src/sljit/sljitNativeMIPS_64.c b/src/3rdparty/pcre2/src/sljit/sljitNativeMIPS_64.c
index 52a0d3fb7a..b9f03a7bd2 100644
--- a/src/3rdparty/pcre2/src/sljit/sljitNativeMIPS_64.c
+++ b/src/3rdparty/pcre2/src/sljit/sljitNativeMIPS_64.c
@@ -225,7 +225,7 @@ static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_t
sljit_ins prev_ins = *ins_ptr;
sljit_ins ins = NOP;
- SLJIT_ASSERT(reg_map[TMP_REG1] == 4 && freg_map[TMP_FREG1] == 12);
+ SLJIT_ASSERT(reg_map[TMP_REG2] == 4 && freg_map[TMP_FREG1] == 12);
arg_types >>= SLJIT_ARG_SHIFT;
@@ -309,7 +309,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_call(struct sljit_compile
if ((type & 0xff) != SLJIT_CALL_REG_ARG)
PTR_FAIL_IF(call_with_args(compiler, arg_types, &ins));
- SLJIT_ASSERT(DR(PIC_ADDR_REG) == 25 && PIC_ADDR_REG == TMP_REG2);
+ SLJIT_ASSERT(DR(PIC_ADDR_REG) == 25);
if (ins == NOP && compiler->delay_slot != UNMOVABLE_INS)
jump->flags |= IS_MOVABLE;
@@ -366,7 +366,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_icall(struct sljit_compiler *compi
return sljit_emit_ijump(compiler, type, src, srcw);
}
- SLJIT_ASSERT(DR(PIC_ADDR_REG) == 25 && PIC_ADDR_REG == TMP_REG2);
+ SLJIT_ASSERT(DR(PIC_ADDR_REG) == 25 && PIC_ADDR_REG == TMP_REG1);
if (src == SLJIT_IMM)
FAIL_IF(load_immediate(compiler, DR(PIC_ADDR_REG), srcw));
diff --git a/src/3rdparty/pcre2/src/sljit/sljitNativeMIPS_common.c b/src/3rdparty/pcre2/src/sljit/sljitNativeMIPS_common.c
index 807b3474ea..88eb30b7f1 100644
--- a/src/3rdparty/pcre2/src/sljit/sljitNativeMIPS_common.c
+++ b/src/3rdparty/pcre2/src/sljit/sljitNativeMIPS_common.c
@@ -83,7 +83,7 @@ typedef sljit_u32 sljit_ins;
#define TMP_REG3 (SLJIT_NUMBER_OF_REGISTERS + 4)
/* For position independent code, t9 must contain the function address. */
-#define PIC_ADDR_REG TMP_REG2
+#define PIC_ADDR_REG TMP_REG1
/* Floating point status register. */
#define FCSR_REG 31
@@ -95,7 +95,7 @@ typedef sljit_u32 sljit_ins;
#define OTHER_FLAG 1
static const sljit_u8 reg_map[SLJIT_NUMBER_OF_REGISTERS + 7] = {
- 0, 2, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 24, 23, 22, 21, 20, 19, 18, 17, 16, 29, 4, 25, 31, 3, 1
+ 0, 2, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 24, 23, 22, 21, 20, 19, 18, 17, 16, 29, 25, 4, 31, 3, 1
};
#define TMP_FREG1 (SLJIT_NUMBER_OF_FLOAT_REGISTERS + 1)
@@ -504,7 +504,7 @@ static SLJIT_INLINE sljit_ins* detect_jump_type(struct sljit_jump *jump, sljit_i
if (jump->flags & JUMP_ADDR)
target_addr = jump->u.target;
else {
- SLJIT_ASSERT(jump->flags & JUMP_LABEL);
+ SLJIT_ASSERT(jump->u.label != NULL);
target_addr = (sljit_uw)(code + jump->u.label->size) + (sljit_uw)executable_offset;
}
@@ -635,75 +635,66 @@ static __attribute__ ((noinline)) void sljit_cache_flush(void* code, void* code_
#if (defined SLJIT_CONFIG_MIPS_64 && SLJIT_CONFIG_MIPS_64)
-static SLJIT_INLINE sljit_sw put_label_get_length(struct sljit_put_label *put_label, sljit_uw max_label)
+static SLJIT_INLINE sljit_sw mov_addr_get_length(struct sljit_jump *jump, sljit_ins *code, sljit_sw executable_offset)
{
- if (max_label < 0x80000000l) {
- put_label->flags = PATCH_ABS32;
+ sljit_uw addr;
+ SLJIT_UNUSED_ARG(executable_offset);
+
+ if (jump->flags & JUMP_ADDR)
+ addr = jump->u.target;
+ else
+ addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code + jump->u.label->size, executable_offset);
+
+ if (addr < 0x80000000l) {
+ jump->flags |= PATCH_ABS32;
return 1;
}
- if (max_label < 0x800000000000l) {
- put_label->flags = PATCH_ABS48;
+ if (addr < 0x800000000000l) {
+ jump->flags |= PATCH_ABS48;
return 3;
}
- put_label->flags = 0;
return 5;
}
#endif /* SLJIT_CONFIG_MIPS_64 */
-static SLJIT_INLINE void load_addr_to_reg(void *dst, sljit_u32 reg)
+static SLJIT_INLINE void load_addr_to_reg(struct sljit_jump *jump)
{
- struct sljit_jump *jump;
- struct sljit_put_label *put_label;
- sljit_uw flags;
- sljit_ins *inst;
- sljit_uw addr;
-
- if (reg != 0) {
- jump = (struct sljit_jump*)dst;
- flags = jump->flags;
- inst = (sljit_ins*)jump->addr;
- addr = (flags & JUMP_LABEL) ? jump->u.label->addr : jump->u.target;
- } else {
- put_label = (struct sljit_put_label*)dst;
-#if (defined SLJIT_CONFIG_MIPS_64 && SLJIT_CONFIG_MIPS_64)
- flags = put_label->flags;
-#endif
- inst = (sljit_ins*)put_label->addr;
- addr = put_label->label->addr;
- reg = *inst;
- }
+ sljit_uw flags = jump->flags;
+ sljit_ins *ins = (sljit_ins*)jump->addr;
+ sljit_uw addr = (flags & JUMP_ADDR) ? jump->u.target : jump->u.label->u.addr;
+ sljit_u32 reg = (flags & JUMP_MOV_ADDR) ? *ins : PIC_ADDR_REG;
#if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32)
- inst[0] = LUI | T(reg) | IMM(addr >> 16);
+ ins[0] = LUI | T(reg) | IMM(addr >> 16);
#else /* !SLJIT_CONFIG_MIPS_32 */
if (flags & PATCH_ABS32) {
SLJIT_ASSERT(addr < 0x80000000l);
- inst[0] = LUI | T(reg) | IMM(addr >> 16);
+ ins[0] = LUI | T(reg) | IMM(addr >> 16);
}
else if (flags & PATCH_ABS48) {
SLJIT_ASSERT(addr < 0x800000000000l);
- inst[0] = LUI | T(reg) | IMM(addr >> 32);
- inst[1] = ORI | S(reg) | T(reg) | IMM((addr >> 16) & 0xffff);
- inst[2] = DSLL | T(reg) | D(reg) | SH_IMM(16);
- inst += 2;
+ ins[0] = LUI | T(reg) | IMM(addr >> 32);
+ ins[1] = ORI | S(reg) | T(reg) | IMM((addr >> 16) & 0xffff);
+ ins[2] = DSLL | T(reg) | D(reg) | SH_IMM(16);
+ ins += 2;
}
else {
- inst[0] = LUI | T(reg) | IMM(addr >> 48);
- inst[1] = ORI | S(reg) | T(reg) | IMM((addr >> 32) & 0xffff);
- inst[2] = DSLL | T(reg) | D(reg) | SH_IMM(16);
- inst[3] = ORI | S(reg) | T(reg) | IMM((addr >> 16) & 0xffff);
- inst[4] = DSLL | T(reg) | D(reg) | SH_IMM(16);
- inst += 4;
+ ins[0] = LUI | T(reg) | IMM(addr >> 48);
+ ins[1] = ORI | S(reg) | T(reg) | IMM((addr >> 32) & 0xffff);
+ ins[2] = DSLL | T(reg) | D(reg) | SH_IMM(16);
+ ins[3] = ORI | S(reg) | T(reg) | IMM((addr >> 16) & 0xffff);
+ ins[4] = DSLL | T(reg) | D(reg) | SH_IMM(16);
+ ins += 4;
}
#endif /* SLJIT_CONFIG_MIPS_32 */
- inst[1] = ORI | S(reg) | T(reg) | IMM(addr & 0xffff);
+ ins[1] = ORI | S(reg) | T(reg) | IMM(addr & 0xffff);
}
-SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compiler)
+SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compiler, sljit_s32 options, void *exec_allocator_data)
{
struct sljit_memory_fragment *buf;
sljit_ins *code;
@@ -711,77 +702,76 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil
sljit_ins *buf_ptr;
sljit_ins *buf_end;
sljit_uw word_count;
- sljit_uw next_addr;
+ SLJIT_NEXT_DEFINE_TYPES;
sljit_sw executable_offset;
sljit_uw addr;
-
struct sljit_label *label;
struct sljit_jump *jump;
struct sljit_const *const_;
- struct sljit_put_label *put_label;
CHECK_ERROR_PTR();
CHECK_PTR(check_sljit_generate_code(compiler));
reverse_buf(compiler);
- code = (sljit_ins*)SLJIT_MALLOC_EXEC(compiler->size * sizeof(sljit_ins), compiler->exec_allocator_data);
+ code = (sljit_ins*)allocate_executable_memory(compiler->size * sizeof(sljit_ins), options, exec_allocator_data, &executable_offset);
PTR_FAIL_WITH_EXEC_IF(code);
buf = compiler->buf;
code_ptr = code;
word_count = 0;
- next_addr = 0;
- executable_offset = SLJIT_EXEC_OFFSET(code);
-
label = compiler->labels;
jump = compiler->jumps;
const_ = compiler->consts;
- put_label = compiler->put_labels;
+ SLJIT_NEXT_INIT_TYPES();
+ SLJIT_GET_NEXT_MIN();
do {
buf_ptr = (sljit_ins*)buf->memory;
buf_end = buf_ptr + (buf->used_size >> 2);
do {
*code_ptr = *buf_ptr++;
- if (next_addr == word_count) {
+ if (next_min_addr == word_count) {
SLJIT_ASSERT(!label || label->size >= word_count);
SLJIT_ASSERT(!jump || jump->addr >= word_count);
SLJIT_ASSERT(!const_ || const_->addr >= word_count);
- SLJIT_ASSERT(!put_label || put_label->addr >= word_count);
/* These structures are ordered by their address. */
- if (label && label->size == word_count) {
- label->addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);
+ if (next_min_addr == next_label_size) {
+ label->u.addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);
label->size = (sljit_uw)(code_ptr - code);
label = label->next;
+ next_label_size = SLJIT_GET_NEXT_SIZE(label);
}
- if (jump && jump->addr == word_count) {
+
+ if (next_min_addr == next_jump_addr) {
+ if (!(jump->flags & JUMP_MOV_ADDR)) {
#if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32)
- word_count += 2;
-#else
- word_count += 6;
-#endif
- jump->addr = (sljit_uw)(code_ptr - 1);
- code_ptr = detect_jump_type(jump, code, executable_offset);
+ word_count += 2;
+#else /* !SLJIT_CONFIG_MIPS_32 */
+ word_count += 6;
+#endif /* SLJIT_CONFIG_MIPS_32 */
+ jump->addr = (sljit_uw)(code_ptr - 1);
+ code_ptr = detect_jump_type(jump, code, executable_offset);
+ } else {
+ jump->addr = (sljit_uw)code_ptr;
+#if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32)
+ code_ptr += 1;
+ word_count += 1;
+#else /* !SLJIT_CONFIG_MIPS_32 */
+ code_ptr += mov_addr_get_length(jump, code, executable_offset);
+ word_count += 5;
+#endif /* SLJIT_CONFIG_MIPS_32 */
+ }
+
jump = jump->next;
- }
- if (const_ && const_->addr == word_count) {
+ next_jump_addr = SLJIT_GET_NEXT_ADDRESS(jump);
+ } else if (next_min_addr == next_const_addr) {
const_->addr = (sljit_uw)code_ptr;
const_ = const_->next;
+ next_const_addr = SLJIT_GET_NEXT_ADDRESS(const_);
}
- if (put_label && put_label->addr == word_count) {
- SLJIT_ASSERT(put_label->label);
- put_label->addr = (sljit_uw)code_ptr;
-#if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32)
- code_ptr += 1;
- word_count += 1;
-#else
- code_ptr += put_label_get_length(put_label, (sljit_uw)(SLJIT_ADD_EXEC_OFFSET(code, executable_offset) + put_label->label->size));
- word_count += 5;
-#endif
- put_label = put_label->next;
- }
- next_addr = compute_next_addr(label, jump, const_, put_label);
+
+ SLJIT_GET_NEXT_MIN();
}
code_ptr++;
word_count++;
@@ -791,7 +781,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil
} while (buf);
if (label && label->size == word_count) {
- label->addr = (sljit_uw)code_ptr;
+ label->u.addr = (sljit_uw)code_ptr;
label->size = (sljit_uw)(code_ptr - code);
label = label->next;
}
@@ -799,13 +789,12 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil
SLJIT_ASSERT(!label);
SLJIT_ASSERT(!jump);
SLJIT_ASSERT(!const_);
- SLJIT_ASSERT(!put_label);
SLJIT_ASSERT(code_ptr - code <= (sljit_sw)compiler->size);
jump = compiler->jumps;
while (jump) {
do {
- addr = (jump->flags & JUMP_LABEL) ? jump->u.label->addr : jump->u.target;
+ addr = (jump->flags & JUMP_ADDR) ? jump->u.target : jump->u.label->u.addr;
buf_ptr = (sljit_ins *)jump->addr;
if (jump->flags & PATCH_B) {
@@ -821,15 +810,10 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil
break;
}
- load_addr_to_reg(jump, PIC_ADDR_REG);
+ load_addr_to_reg(jump);
} while (0);
- jump = jump->next;
- }
- put_label = compiler->put_labels;
- while (put_label) {
- load_addr_to_reg(put_label, 0);
- put_label = put_label->next;
+ jump = jump->next;
}
compiler->error = SLJIT_ERR_COMPILED;
@@ -932,9 +916,9 @@ static sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit_s32 flags, s
static sljit_s32 emit_stack_frame_release(struct sljit_compiler *compiler, sljit_s32 frame_size, sljit_ins *ins_ptr);
#if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32)
-#define SELECT_OP(a, b) (b)
+#define SELECT_OP(d, w) (w)
#else
-#define SELECT_OP(a, b) (!(op & SLJIT_32) ? a : b)
+#define SELECT_OP(d, w) (!(op & SLJIT_32) ? (d) : (w))
#endif
#if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32)
@@ -1001,9 +985,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_enter(struct sljit_compiler *compi
offset = local_size - SSIZE_OF(sw);
} else {
FAIL_IF(load_immediate(compiler, OTHER_FLAG, local_size));
- FAIL_IF(push_inst(compiler, ADDU_W | S(SLJIT_SP) | TA(0) | D(TMP_REG2), DR(TMP_REG2)));
+ FAIL_IF(push_inst(compiler, ADDU_W | S(SLJIT_SP) | TA(0) | D(TMP_REG1), DR(TMP_REG1)));
FAIL_IF(push_inst(compiler, SUBU_W | S(SLJIT_SP) | TA(OTHER_FLAG) | D(SLJIT_SP), DR(SLJIT_SP)));
- base = S(TMP_REG2);
+ base = S(TMP_REG1);
offset = -SSIZE_OF(sw);
#if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32)
local_size = 0;
@@ -1212,8 +1196,8 @@ static sljit_s32 emit_stack_frame_release(struct sljit_compiler *compiler, sljit
if (tmp < frame_size)
tmp = frame_size;
- FAIL_IF(load_immediate(compiler, DR(TMP_REG1), local_size - tmp));
- FAIL_IF(push_inst(compiler, ADDU_W | S(SLJIT_SP) | T(TMP_REG1) | D(SLJIT_SP), DR(SLJIT_SP)));
+ FAIL_IF(load_immediate(compiler, DR(TMP_REG2), local_size - tmp));
+ FAIL_IF(push_inst(compiler, ADDU_W | S(SLJIT_SP) | T(TMP_REG2) | D(SLJIT_SP), DR(SLJIT_SP)));
local_size = tmp;
}
@@ -1711,7 +1695,7 @@ static sljit_s32 emit_rev16(struct sljit_compiler *compiler, sljit_s32 op, sljit
static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 flags,
sljit_s32 dst, sljit_s32 src1, sljit_sw src2)
{
- sljit_s32 is_overflow, is_carry, carry_src_ar, is_handled;
+ sljit_s32 is_overflow, is_carry, carry_src_ar, is_handled, reg;
sljit_ins op_imm, op_v;
#if (defined SLJIT_CONFIG_MIPS_64 && SLJIT_CONFIG_MIPS_64)
sljit_ins ins, op_dimm, op_dimm32, op_dv;
@@ -1963,8 +1947,9 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl
is_handled = 1;
if (flags & SRC2_IMM) {
- FAIL_IF(push_inst(compiler, ADDIU | SA(0) | T(TMP_REG2) | IMM(src2), DR(TMP_REG2)));
- src2 = TMP_REG2;
+ reg = (src1 == TMP_REG1) ? TMP_REG2 : TMP_REG1;
+ FAIL_IF(push_inst(compiler, ADDIU | SA(0) | T(reg) | IMM(src2), DR(reg)));
+ src2 = reg;
flags &= ~SRC2_IMM;
}
@@ -2283,7 +2268,7 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3
sljit_s32 dst_r = TMP_REG2;
sljit_s32 src1_r;
sljit_sw src2_r = 0;
- sljit_s32 sugg_src2_r = TMP_REG2;
+ sljit_s32 src2_tmp_reg = (GET_OPCODE(op) >= SLJIT_OP2_BASE && FAST_IS_REG(src1)) ? TMP_REG1 : TMP_REG2;
if (!(flags & ALT_KEEP_CACHE)) {
compiler->cache_arg = 0;
@@ -2299,7 +2284,7 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3
dst_r = dst;
flags |= REG_DEST;
if (flags & MOVE_OP)
- sugg_src2_r = dst_r;
+ src2_tmp_reg = dst_r;
}
else if ((dst & SLJIT_MEM) && !getput_arg_fast(compiler, flags | ARG_TEST, DR(TMP_REG1), dst, dstw))
flags |= SLOW_DEST;
@@ -2351,8 +2336,8 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3
else if (src2 == SLJIT_IMM) {
if (!(flags & SRC2_IMM)) {
if (src2w) {
- FAIL_IF(load_immediate(compiler, DR(sugg_src2_r), src2w));
- src2_r = sugg_src2_r;
+ FAIL_IF(load_immediate(compiler, DR(src2_tmp_reg), src2w));
+ src2_r = src2_tmp_reg;
}
else {
src2_r = 0;
@@ -2366,16 +2351,16 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3
}
}
else {
- if (getput_arg_fast(compiler, flags | LOAD_DATA, DR(sugg_src2_r), src2, src2w))
+ if (getput_arg_fast(compiler, flags | LOAD_DATA, DR(src2_tmp_reg), src2, src2w))
FAIL_IF(compiler->error);
else
flags |= SLOW_SRC2;
- src2_r = sugg_src2_r;
+ src2_r = src2_tmp_reg;
}
if ((flags & (SLOW_SRC1 | SLOW_SRC2)) == (SLOW_SRC1 | SLOW_SRC2)) {
SLJIT_ASSERT(src2_r == TMP_REG2);
- if (!can_cache(src1, src1w, src2, src2w) && can_cache(src1, src1w, dst, dstw)) {
+ if ((flags & SLOW_DEST) && !can_cache(src1, src1w, src2, src2w) && can_cache(src1, src1w, dst, dstw)) {
FAIL_IF(getput_arg(compiler, flags | LOAD_DATA, DR(TMP_REG2), src2, src2w, src1, src1w));
FAIL_IF(getput_arg(compiler, flags | LOAD_DATA, DR(TMP_REG1), src1, src1w, dst, dstw));
}
@@ -2387,7 +2372,7 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3
else if (flags & SLOW_SRC1)
FAIL_IF(getput_arg(compiler, flags | LOAD_DATA, DR(TMP_REG1), src1, src1w, dst, dstw));
else if (flags & SLOW_SRC2)
- FAIL_IF(getput_arg(compiler, flags | LOAD_DATA, DR(sugg_src2_r), src2, src2w, dst, dstw));
+ FAIL_IF(getput_arg(compiler, flags | LOAD_DATA, DR(src2_tmp_reg), src2, src2w, dst, dstw));
FAIL_IF(emit_single_op(compiler, op, flags, dst_r, src1_r, src2_r));
@@ -2659,12 +2644,28 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2u(struct sljit_compiler *compil
#if (defined SLJIT_CONFIG_MIPS_64 && SLJIT_CONFIG_MIPS_64)
#define SELECT_OP3(op, src2w, D, D32, W) (((op & SLJIT_32) ? (W) : ((src2w) < 32) ? (D) : (D32)) | (((sljit_ins)src2w & 0x1f) << 6))
-#define SELECT_OP2(op, D, W) ((op & SLJIT_32) ? (W) : (D))
#else /* !SLJIT_CONFIG_MIPS_64 */
#define SELECT_OP3(op, src2w, D, D32, W) ((W) | ((sljit_ins)(src2w) << 6))
-#define SELECT_OP2(op, D, W) (W)
#endif /* SLJIT_CONFIG_MIPS_64 */
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2r(struct sljit_compiler *compiler, sljit_s32 op,
+ sljit_s32 dst_reg,
+ sljit_s32 src1, sljit_sw src1w,
+ sljit_s32 src2, sljit_sw src2w)
+{
+ CHECK_ERROR();
+ CHECK(check_sljit_emit_op2r(compiler, op, dst_reg, src1, src1w, src2, src2w));
+
+ switch (GET_OPCODE(op)) {
+ case SLJIT_MULADD:
+ SLJIT_SKIP_CHECKS(compiler);
+ FAIL_IF(sljit_emit_op2(compiler, SLJIT_MUL | (op & SLJIT_32), TMP_REG2, 0, src1, src1w, src2, src2w));
+ return push_inst(compiler, SELECT_OP(DADDU, ADDU) | S(dst_reg) | T(TMP_REG2) | D(dst_reg), DR(dst_reg));
+ }
+
+ return SLJIT_SUCCESS;
+}
+
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_shift_into(struct sljit_compiler *compiler, sljit_s32 op,
sljit_s32 dst_reg,
sljit_s32 src1_reg,
@@ -2718,18 +2719,18 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_shift_into(struct sljit_compiler *
FAIL_IF(emit_op_mem(compiler, inp_flags, DR(TMP_REG2), src3, src3w));
src3 = TMP_REG2;
} else if (dst_reg == src3) {
- FAIL_IF(push_inst(compiler, SELECT_OP2(op, DADDU, ADDU) | S(src3) | TA(0) | D(TMP_REG2), DR(TMP_REG2)));
+ FAIL_IF(push_inst(compiler, SELECT_OP(DADDU, ADDU) | S(src3) | TA(0) | D(TMP_REG2), DR(TMP_REG2)));
src3 = TMP_REG2;
}
if (is_left) {
- ins1 = SELECT_OP2(op, DSRL, SRL);
- ins2 = SELECT_OP2(op, DSLLV, SLLV);
- ins3 = SELECT_OP2(op, DSRLV, SRLV);
+ ins1 = SELECT_OP(DSRL, SRL);
+ ins2 = SELECT_OP(DSLLV, SLLV);
+ ins3 = SELECT_OP(DSRLV, SRLV);
} else {
- ins1 = SELECT_OP2(op, DSLL, SLL);
- ins2 = SELECT_OP2(op, DSRLV, SRLV);
- ins3 = SELECT_OP2(op, DSLLV, SLLV);
+ ins1 = SELECT_OP(DSLL, SLL);
+ ins2 = SELECT_OP(DSRLV, SRLV);
+ ins3 = SELECT_OP(DSLLV, SLLV);
}
FAIL_IF(push_inst(compiler, ins2 | S(src3) | T(src1_reg) | D(dst_reg), DR(dst_reg)));
@@ -2739,14 +2740,13 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_shift_into(struct sljit_compiler *
FAIL_IF(push_inst(compiler, XORI | S(src3) | T(TMP_REG2) | ((sljit_ins)bit_length - 1), DR(TMP_REG2)));
src2_reg = TMP_REG1;
} else
- FAIL_IF(push_inst(compiler, SELECT_OP2(op, DSUBU, SUBU) | SA(0) | T(src3) | D(TMP_REG2), DR(TMP_REG2)));
+ FAIL_IF(push_inst(compiler, SELECT_OP(DSUBU, SUBU) | SA(0) | T(src3) | D(TMP_REG2), DR(TMP_REG2)));
FAIL_IF(push_inst(compiler, ins3 | S(TMP_REG2) | T(src2_reg) | D(TMP_REG1), DR(TMP_REG1)));
return push_inst(compiler, OR | S(dst_reg) | T(TMP_REG1) | D(dst_reg), DR(dst_reg));
}
#undef SELECT_OP3
-#undef SELECT_OP2
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_src(struct sljit_compiler *compiler, sljit_s32 op,
sljit_s32 src, sljit_sw srcw)
@@ -3103,7 +3103,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compil
switch (GET_OPCODE(op)) {
case SLJIT_MOV_F64:
if (src != dst_r) {
- if (dst_r != TMP_FREG1)
+ if (!(dst & SLJIT_MEM))
FAIL_IF(push_inst(compiler, MOV_fmt(FMT(op)) | FS(src) | FD(dst_r), MOVABLE_INS));
else
dst_r = src;
@@ -3162,11 +3162,10 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop2(struct sljit_compiler *compil
}
if ((flags & (SLOW_SRC1 | SLOW_SRC2)) == (SLOW_SRC1 | SLOW_SRC2)) {
- if (!can_cache(src1, src1w, src2, src2w) && can_cache(src1, src1w, dst, dstw)) {
+ if ((dst & SLJIT_MEM) && !can_cache(src1, src1w, src2, src2w) && can_cache(src1, src1w, dst, dstw)) {
FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, FR(TMP_FREG2), src2, src2w, src1, src1w));
FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, FR(TMP_FREG1), src1, src1w, dst, dstw));
- }
- else {
+ } else {
FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, FR(TMP_FREG1), src1, src1w, src2, src2w));
FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, FR(TMP_FREG2), src2, src2w, dst, dstw));
}
@@ -3361,10 +3360,10 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile
PTR_FAIL_IF(push_inst(compiler, inst, UNMOVABLE_INS));
if (type <= SLJIT_JUMP)
- PTR_FAIL_IF(push_inst(compiler, JR | S(TMP_REG2), UNMOVABLE_INS));
+ PTR_FAIL_IF(push_inst(compiler, JR | S(PIC_ADDR_REG), UNMOVABLE_INS));
else {
jump->flags |= IS_JAL;
- PTR_FAIL_IF(push_inst(compiler, JALR | S(TMP_REG2) | DA(RETURN_ADDR_REG), UNMOVABLE_INS));
+ PTR_FAIL_IF(push_inst(compiler, JALR | S(PIC_ADDR_REG) | DA(RETURN_ADDR_REG), UNMOVABLE_INS));
}
jump->addr = compiler->size;
@@ -3392,8 +3391,8 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile
#define RESOLVE_IMM2() \
if (src2 == SLJIT_IMM) { \
if (src2w) { \
- PTR_FAIL_IF(load_immediate(compiler, DR(TMP_REG2), src2w)); \
- src2 = TMP_REG2; \
+ PTR_FAIL_IF(load_immediate(compiler, DR(src2_tmp_reg), src2w)); \
+ src2 = src2_tmp_reg; \
} \
else \
src2 = 0; \
@@ -3406,6 +3405,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_cmp(struct sljit_compiler
struct sljit_jump *jump;
sljit_s32 flags;
sljit_ins inst;
+ sljit_s32 src2_tmp_reg = FAST_IS_REG(src1) ? TMP_REG1 : TMP_REG2;
CHECK_ERROR_PTR();
CHECK_PTR(check_sljit_emit_cmp(compiler, type, src1, src1w, src2, src2w));
@@ -3426,8 +3426,8 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_cmp(struct sljit_compiler
}
if (src2 & SLJIT_MEM) {
- PTR_FAIL_IF(emit_op_mem2(compiler, flags, DR(TMP_REG2), src2, src2w, 0, 0));
- src2 = TMP_REG2;
+ PTR_FAIL_IF(emit_op_mem2(compiler, flags, DR(src2_tmp_reg), src2, src2w, 0, 0));
+ src2 = src2_tmp_reg;
}
jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump));
@@ -3515,7 +3515,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_cmp(struct sljit_compiler
PTR_FAIL_IF(push_inst(compiler, (type == SLJIT_EQUAL ? BNE : BEQ) | S(TMP_REG1) | TA(0) | BRANCH_LENGTH, UNMOVABLE_INS));
}
- PTR_FAIL_IF(push_inst(compiler, JR | S(TMP_REG2), UNMOVABLE_INS));
+ PTR_FAIL_IF(push_inst(compiler, JR | S(PIC_ADDR_REG), UNMOVABLE_INS));
jump->addr = compiler->size;
PTR_FAIL_IF(push_inst(compiler, NOP, UNMOVABLE_INS));
@@ -3553,11 +3553,11 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_ijump(struct sljit_compiler *compi
if (compiler->delay_slot != UNMOVABLE_INS)
jump->flags |= IS_MOVABLE;
- src = TMP_REG2;
+ src = PIC_ADDR_REG;
} else if (src & SLJIT_MEM) {
ADJUST_LOCAL_OFFSET(src, srcw);
- FAIL_IF(emit_op_mem(compiler, WORD_DATA | LOAD_DATA, DR(TMP_REG2), src, srcw));
- src = TMP_REG2;
+ FAIL_IF(emit_op_mem(compiler, WORD_DATA | LOAD_DATA, DR(PIC_ADDR_REG), src, srcw));
+ src = PIC_ADDR_REG;
}
if (type <= SLJIT_JUMP)
@@ -3755,8 +3755,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_select(struct sljit_compiler *comp
#if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 1 && SLJIT_MIPS_REV < 6)
if (src1 & SLJIT_MEM) {
- FAIL_IF(emit_op_mem(compiler, inp_flags, DR(TMP_REG2), src1, src1w));
- src1 = TMP_REG2;
+ FAIL_IF(emit_op_mem(compiler, inp_flags, DR(TMP_REG1), src1, src1w));
+ src1 = TMP_REG1;
} else if (src1 == SLJIT_IMM) {
#if (defined SLJIT_CONFIG_MIPS_64 && SLJIT_CONFIG_MIPS_64)
if (type & SLJIT_32)
@@ -3784,13 +3784,13 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_select(struct sljit_compiler *comp
type ^= 0x1;
} else {
if (ADDRESSING_DEPENDS_ON(src1, dst_reg)) {
- FAIL_IF(push_inst(compiler, ADDU_W | S(dst_reg) | TA(0) | D(TMP_REG2), DR(TMP_REG2)));
+ FAIL_IF(push_inst(compiler, ADDU_W | S(dst_reg) | TA(0) | D(TMP_REG1), DR(TMP_REG1)));
if ((src1 & REG_MASK) == dst_reg)
- src1 = (src1 & ~REG_MASK) | TMP_REG2;
+ src1 = (src1 & ~REG_MASK) | TMP_REG1;
if (OFFS_REG(src1) == dst_reg)
- src1 = (src1 & ~OFFS_REG_MASK) | TO_OFFS_REG(TMP_REG2);
+ src1 = (src1 & ~OFFS_REG_MASK) | TO_OFFS_REG(TMP_REG1);
}
FAIL_IF(push_inst(compiler, mov_ins | S(src2_reg) | TA(0) | D(dst_reg), DR(dst_reg)));
@@ -3847,8 +3847,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fselect(struct sljit_compiler *com
#if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 1 && SLJIT_MIPS_REV < 6)
if (src1 & SLJIT_MEM) {
- FAIL_IF(emit_op_mem(compiler, FLOAT_DATA(type) | LOAD_DATA, FR(TMP_FREG1), src1, src1w));
- src1 = TMP_FREG1;
+ FAIL_IF(emit_op_mem(compiler, FLOAT_DATA(type) | LOAD_DATA, FR(TMP_FREG2), src1, src1w));
+ src1 = TMP_FREG2;
}
return push_inst(compiler, get_select_cc(type, 1) | FMT(type) | FS(src1) | FD(dst_freg), MOVABLE_INS);
@@ -4231,18 +4231,18 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compi
return const_;
}
-SLJIT_API_FUNC_ATTRIBUTE struct sljit_put_label* sljit_emit_put_label(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw dstw)
+SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_mov_addr(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw dstw)
{
- struct sljit_put_label *put_label;
+ struct sljit_jump *jump;
sljit_s32 dst_r;
CHECK_ERROR_PTR();
- CHECK_PTR(check_sljit_emit_put_label(compiler, dst, dstw));
+ CHECK_PTR(check_sljit_emit_mov_addr(compiler, dst, dstw));
ADJUST_LOCAL_OFFSET(dst, dstw);
- put_label = (struct sljit_put_label*)ensure_abuf(compiler, sizeof(struct sljit_put_label));
- PTR_FAIL_IF(!put_label);
- set_put_label(put_label, compiler, 0);
+ jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump));
+ PTR_FAIL_IF(!jump);
+ set_mov_addr(jump, compiler, 0);
dst_r = FAST_IS_REG(dst) ? dst : TMP_REG2;
PTR_FAIL_IF(push_inst(compiler, (sljit_ins)dst_r, UNMOVABLE_INS));
@@ -4255,5 +4255,5 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_put_label* sljit_emit_put_label(struct slj
if (dst & SLJIT_MEM)
PTR_FAIL_IF(emit_op_mem(compiler, WORD_DATA, DR(TMP_REG2), dst, dstw));
- return put_label;
+ return jump;
}
diff --git a/src/3rdparty/pcre2/src/sljit/sljitNativePPC_common.c b/src/3rdparty/pcre2/src/sljit/sljitNativePPC_common.c
index 54977f02e3..1f17d90423 100644
--- a/src/3rdparty/pcre2/src/sljit/sljitNativePPC_common.c
+++ b/src/3rdparty/pcre2/src/sljit/sljitNativePPC_common.c
@@ -98,7 +98,7 @@ static void ppc_cache_flush(sljit_ins *from, sljit_ins *to)
#if (defined SLJIT_PASS_ENTRY_ADDR_TO_CALL && SLJIT_PASS_ENTRY_ADDR_TO_CALL)
#define TMP_CALL_REG (SLJIT_NUMBER_OF_REGISTERS + 5)
#else
-#define TMP_CALL_REG TMP_REG2
+#define TMP_CALL_REG TMP_REG1
#endif
#define TMP_FREG1 (SLJIT_NUMBER_OF_FLOAT_REGISTERS + 1)
@@ -310,24 +310,23 @@ static sljit_s32 push_inst(struct sljit_compiler *compiler, sljit_ins ins)
return SLJIT_SUCCESS;
}
-static SLJIT_INLINE sljit_s32 detect_jump_type(struct sljit_jump *jump, sljit_ins *code_ptr, sljit_ins *code, sljit_sw executable_offset)
+static SLJIT_INLINE sljit_ins* detect_jump_type(struct sljit_jump *jump, sljit_ins *code_ptr, sljit_ins *code, sljit_sw executable_offset)
{
sljit_sw diff;
sljit_uw target_addr;
- sljit_uw extra_jump_flags;
#if (defined SLJIT_PASS_ENTRY_ADDR_TO_CALL && SLJIT_PASS_ENTRY_ADDR_TO_CALL) && (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32)
if (jump->flags & (SLJIT_REWRITABLE_JUMP | IS_CALL))
- return 0;
+ goto exit;
#else
if (jump->flags & SLJIT_REWRITABLE_JUMP)
- return 0;
+ goto exit;
#endif
if (jump->flags & JUMP_ADDR)
target_addr = jump->u.target;
else {
- SLJIT_ASSERT(jump->flags & JUMP_LABEL);
+ SLJIT_ASSERT(jump->u.label != NULL);
target_addr = (sljit_uw)(code + jump->u.label->size) + (sljit_uw)executable_offset;
}
@@ -336,101 +335,256 @@ static SLJIT_INLINE sljit_s32 detect_jump_type(struct sljit_jump *jump, sljit_in
goto keep_address;
#endif
- diff = ((sljit_sw)target_addr - (sljit_sw)(code_ptr) - executable_offset) & ~0x3l;
+ diff = (sljit_sw)target_addr - (sljit_sw)code_ptr - executable_offset;
- extra_jump_flags = 0;
if (jump->flags & IS_COND) {
if (diff <= 0x7fff && diff >= -0x8000) {
jump->flags |= PATCH_B;
- return 1;
+ return code_ptr;
}
if (target_addr <= 0xffff) {
jump->flags |= PATCH_B | PATCH_ABS_B;
- return 1;
+ return code_ptr;
}
- extra_jump_flags = REMOVE_COND;
diff -= SSIZE_OF(ins);
}
if (diff <= 0x01ffffff && diff >= -0x02000000) {
- jump->flags |= PATCH_B | extra_jump_flags;
- return 1;
+ jump->flags |= PATCH_B;
+ } else if (target_addr <= 0x01ffffff) {
+ jump->flags |= PATCH_B | PATCH_ABS_B;
}
- if (target_addr <= 0x03ffffff) {
- jump->flags |= PATCH_B | PATCH_ABS_B | extra_jump_flags;
- return 1;
+ if (jump->flags & PATCH_B) {
+ if (!(jump->flags & IS_COND))
+ return code_ptr;
+
+ code_ptr[0] = BCx | (2 << 2) | ((code_ptr[0] ^ (8 << 21)) & 0x03ff0001);
+ code_ptr[1] = Bx;
+ jump->addr += sizeof(sljit_ins);
+ jump->flags -= IS_COND;
+ return code_ptr + 1;
}
#if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
#if (defined SLJIT_PASS_ENTRY_ADDR_TO_CALL && SLJIT_PASS_ENTRY_ADDR_TO_CALL)
keep_address:
-#endif
- if (target_addr <= 0x7fffffff) {
+#endif /* SLJIT_PASS_ENTRY_ADDR_TO_CALL */
+ if (target_addr < 0x80000000l) {
jump->flags |= PATCH_ABS32;
- return 1;
+ code_ptr[2] = MTCTR | S(TMP_CALL_REG);
+ code_ptr[3] = code_ptr[0];
+ return code_ptr + 3;
}
- if (target_addr <= 0x7fffffffffffl) {
+ if (target_addr < 0x800000000000l) {
jump->flags |= PATCH_ABS48;
- return 1;
+ code_ptr[4] = MTCTR | S(TMP_CALL_REG);
+ code_ptr[5] = code_ptr[0];
+ return code_ptr + 5;
}
-#endif
+#endif /* SLJIT_CONFIG_PPC_64 */
- return 0;
+exit:
+#if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32)
+ code_ptr[2] = MTCTR | S(TMP_CALL_REG);
+ code_ptr[3] = code_ptr[0];
+#else /* !SLJIT_CONFIG_PPC_32 */
+ code_ptr[5] = MTCTR | S(TMP_CALL_REG);
+ code_ptr[6] = code_ptr[0];
+#endif /* SLJIT_CONFIG_PPC_32 */
+ return code_ptr + JUMP_MAX_SIZE - 1;
}
#if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
-static SLJIT_INLINE sljit_sw put_label_get_length(struct sljit_put_label *put_label, sljit_uw max_label)
+static SLJIT_INLINE sljit_sw mov_addr_get_length(struct sljit_jump *jump, sljit_ins *code, sljit_sw executable_offset)
{
- if (max_label < 0x100000000l) {
- put_label->flags = 0;
+ sljit_uw addr;
+ SLJIT_UNUSED_ARG(executable_offset);
+
+ SLJIT_ASSERT(jump->flags < ((sljit_uw)5 << JUMP_SIZE_SHIFT));
+ if (jump->flags & JUMP_ADDR)
+ addr = jump->u.target;
+ else
+ addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code + jump->u.label->size, executable_offset);
+
+ if (addr < 0x80000000l) {
+ SLJIT_ASSERT(jump->flags >= ((sljit_uw)1 << JUMP_SIZE_SHIFT));
+ jump->flags |= PATCH_ABS32;
return 1;
}
- if (max_label < 0x1000000000000l) {
- put_label->flags = 1;
+ if (addr < 0x800000000000l) {
+ SLJIT_ASSERT(jump->flags >= ((sljit_uw)3 << JUMP_SIZE_SHIFT));
+ jump->flags |= PATCH_ABS48;
return 3;
}
- put_label->flags = 2;
+ SLJIT_ASSERT(jump->flags >= ((sljit_uw)4 << JUMP_SIZE_SHIFT));
return 4;
}
-static SLJIT_INLINE void put_label_set(struct sljit_put_label *put_label)
-{
- sljit_uw addr = put_label->label->addr;
- sljit_ins *inst = (sljit_ins *)put_label->addr;
- sljit_u32 reg = *inst;
+#endif /* SLJIT_CONFIG_PPC_64 */
- if (put_label->flags == 0) {
- SLJIT_ASSERT(addr < 0x100000000l);
- inst[0] = ORIS | S(TMP_ZERO) | A(reg) | IMM(addr >> 16);
- }
- else {
- if (put_label->flags == 1) {
- SLJIT_ASSERT(addr < 0x1000000000000l);
- inst[0] = ORI | S(TMP_ZERO) | A(reg) | IMM(addr >> 32);
+static void generate_jump_or_mov_addr(struct sljit_jump *jump, sljit_sw executable_offset)
+{
+ sljit_uw flags = jump->flags;
+ sljit_uw addr = (flags & JUMP_ADDR) ? jump->u.target : jump->u.label->u.addr;
+ sljit_ins *ins = (sljit_ins*)jump->addr;
+ sljit_s32 reg;
+ SLJIT_UNUSED_ARG(executable_offset);
+
+ if (flags & PATCH_B) {
+ if (flags & IS_COND) {
+ if (!(flags & PATCH_ABS_B)) {
+ addr -= (sljit_uw)SLJIT_ADD_EXEC_OFFSET(ins, executable_offset);
+ SLJIT_ASSERT((sljit_sw)addr <= 0x7fff && (sljit_sw)addr >= -0x8000);
+ ins[0] = BCx | ((sljit_ins)addr & 0xfffc) | (ins[0] & 0x03ff0001);
+ } else {
+ SLJIT_ASSERT(addr <= 0xffff);
+ ins[0] = BCx | ((sljit_ins)addr & 0xfffc) | 0x2 | ((*ins) & 0x03ff0001);
+ }
+ return;
}
- else {
- inst[0] = ORIS | S(TMP_ZERO) | A(reg) | IMM(addr >> 48);
- inst[1] = ORI | S(reg) | A(reg) | IMM((addr >> 32) & 0xffff);
- inst++;
+
+ if (!(flags & PATCH_ABS_B)) {
+ addr -= (sljit_uw)SLJIT_ADD_EXEC_OFFSET(ins, executable_offset);
+ SLJIT_ASSERT((sljit_sw)addr <= 0x01ffffff && (sljit_sw)addr >= -0x02000000);
+ ins[0] = Bx | ((sljit_ins)addr & 0x03fffffc) | (ins[0] & 0x1);
+ } else {
+ SLJIT_ASSERT(addr <= 0x03ffffff);
+ ins[0] = Bx | ((sljit_ins)addr & 0x03fffffc) | 0x2 | (ins[0] & 0x1);
}
+ return;
+ }
+
+ reg = (flags & JUMP_MOV_ADDR) ? (sljit_s32)ins[0] : TMP_CALL_REG;
+
+#if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32)
+ ins[0] = ADDIS | D(reg) | A(0) | IMM(addr >> 16);
+ ins[1] = ORI | S(reg) | A(reg) | IMM(addr);
+#else /* !SLJIT_CONFIG_PPC_32 */
+
+ /* The TMP_ZERO cannot be used because it is restored for tail calls. */
+ if (flags & PATCH_ABS32) {
+ SLJIT_ASSERT(addr < 0x80000000l);
+ ins[0] = ADDIS | D(reg) | A(0) | IMM(addr >> 16);
+ ins[1] = ORI | S(reg) | A(reg) | IMM(addr);
+ return;
+ }
- inst[1] = SLDI(32) | S(reg) | A(reg);
- inst[2] = ORIS | S(reg) | A(reg) | IMM((addr >> 16) & 0xffff);
- inst += 2;
+ if (flags & PATCH_ABS48) {
+ SLJIT_ASSERT(addr < 0x800000000000l);
+ ins[0] = ADDIS | D(reg) | A(0) | IMM(addr >> 32);
+ ins[1] = ORI | S(reg) | A(reg) | IMM(addr >> 16);
+ ins[2] = SLDI(16) | S(reg) | A(reg);
+ ins[3] = ORI | S(reg) | A(reg) | IMM(addr);
+ return;
}
- inst[1] = ORI | S(reg) | A(reg) | IMM(addr & 0xffff);
+ ins[0] = ADDIS | D(reg) | A(0) | IMM(addr >> 48);
+ ins[1] = ORI | S(reg) | A(reg) | IMM(addr >> 32);
+ ins[2] = SLDI(32) | S(reg) | A(reg);
+ ins[3] = ORIS | S(reg) | A(reg) | IMM(addr >> 16);
+ ins[4] = ORI | S(reg) | A(reg) | IMM(addr);
+#endif /* SLJIT_CONFIG_PPC_32 */
}
+static void reduce_code_size(struct sljit_compiler *compiler)
+{
+ struct sljit_label *label;
+ struct sljit_jump *jump;
+ struct sljit_const *const_;
+ SLJIT_NEXT_DEFINE_TYPES;
+ sljit_uw total_size;
+ sljit_uw size_reduce = 0;
+ sljit_sw diff;
+
+ label = compiler->labels;
+ jump = compiler->jumps;
+ const_ = compiler->consts;
+ SLJIT_NEXT_INIT_TYPES();
+
+ while (1) {
+ SLJIT_GET_NEXT_MIN();
+
+ if (next_min_addr == SLJIT_MAX_ADDRESS)
+ break;
+
+ if (next_min_addr == next_label_size) {
+ label->size -= size_reduce;
+
+ label = label->next;
+ next_label_size = SLJIT_GET_NEXT_SIZE(label);
+ }
+
+ if (next_min_addr == next_const_addr) {
+ const_->addr -= size_reduce;
+ const_ = const_->next;
+ next_const_addr = SLJIT_GET_NEXT_ADDRESS(const_);
+ continue;
+ }
+
+ if (next_min_addr != next_jump_addr)
+ continue;
+
+ jump->addr -= size_reduce;
+ if (!(jump->flags & JUMP_MOV_ADDR)) {
+ total_size = JUMP_MAX_SIZE - 1;
+
+ if (!(jump->flags & SLJIT_REWRITABLE_JUMP)) {
+ if (jump->flags & JUMP_ADDR) {
+ if (jump->u.target <= 0x01ffffff)
+ total_size = 1 - 1;
+#if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
+ else if (jump->u.target < 0x80000000l)
+ total_size = 4 - 1;
+ else if (jump->u.target < 0x800000000000l)
+ total_size = 6 - 1;
+#endif /* SLJIT_CONFIG_PPC_64 */
+ } else {
+ /* Unit size: instruction. */
+ diff = (sljit_sw)jump->u.label->size - (sljit_sw)jump->addr;
+
+ if (jump->flags & IS_COND) {
+ if (diff <= (0x7fff / SSIZE_OF(ins)) && diff >= (-0x8000 / SSIZE_OF(ins)))
+ total_size = 1 - 1;
+ else if ((diff - 1) <= (0x01ffffff / SSIZE_OF(ins)) && (diff - 1) >= (-0x02000000 / SSIZE_OF(ins)))
+ total_size = 2 - 1;
+ } else if (diff <= (0x01ffffff / SSIZE_OF(ins)) && diff >= (-0x02000000 / SSIZE_OF(ins)))
+ total_size = 1 - 1;
+ }
+ }
+
+ size_reduce += (JUMP_MAX_SIZE - 1) - total_size;
+ jump->flags |= total_size << JUMP_SIZE_SHIFT;
+#if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
+ } else {
+ total_size = (sljit_uw)4 << JUMP_SIZE_SHIFT;
+
+ if (jump->flags & JUMP_ADDR) {
+ if (jump->u.target < 0x80000000l) {
+ total_size = (sljit_uw)1 << JUMP_SIZE_SHIFT;
+ size_reduce += 3;
+ } else if (jump->u.target < 0x800000000000l) {
+ total_size = (sljit_uw)3 << JUMP_SIZE_SHIFT;
+ size_reduce += 1;
+ }
+ }
+ jump->flags |= total_size;
#endif /* SLJIT_CONFIG_PPC_64 */
+ }
-SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compiler)
+ jump = jump->next;
+ next_jump_addr = SLJIT_GET_NEXT_ADDRESS(jump);
+ }
+
+ compiler->size -= size_reduce;
+}
+
+SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compiler, sljit_s32 options, void *exec_allocator_data)
{
struct sljit_memory_fragment *buf;
sljit_ins *code;
@@ -438,18 +592,17 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil
sljit_ins *buf_ptr;
sljit_ins *buf_end;
sljit_uw word_count;
- sljit_uw next_addr;
+ SLJIT_NEXT_DEFINE_TYPES;
sljit_sw executable_offset;
- sljit_uw addr;
struct sljit_label *label;
struct sljit_jump *jump;
struct sljit_const *const_;
- struct sljit_put_label *put_label;
CHECK_ERROR_PTR();
CHECK_PTR(check_sljit_generate_code(compiler));
- reverse_buf(compiler);
+
+ reduce_code_size(compiler);
#if (defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL)
/* add to compiler->size additional instruction space to hold the trampoline and padding */
@@ -459,93 +612,64 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil
compiler->size += (sizeof(struct sljit_function_context) / sizeof(sljit_ins));
#endif
#endif
- code = (sljit_ins*)SLJIT_MALLOC_EXEC(compiler->size * sizeof(sljit_ins), compiler->exec_allocator_data);
+ code = (sljit_ins*)allocate_executable_memory(compiler->size * sizeof(sljit_ins), options, exec_allocator_data, &executable_offset);
PTR_FAIL_WITH_EXEC_IF(code);
+
+ reverse_buf(compiler);
buf = compiler->buf;
code_ptr = code;
word_count = 0;
- next_addr = 0;
- executable_offset = SLJIT_EXEC_OFFSET(code);
-
label = compiler->labels;
jump = compiler->jumps;
const_ = compiler->consts;
- put_label = compiler->put_labels;
+ SLJIT_NEXT_INIT_TYPES();
+ SLJIT_GET_NEXT_MIN();
do {
buf_ptr = (sljit_ins*)buf->memory;
buf_end = buf_ptr + (buf->used_size >> 2);
do {
*code_ptr = *buf_ptr++;
- if (next_addr == word_count) {
+ if (next_min_addr == word_count) {
SLJIT_ASSERT(!label || label->size >= word_count);
SLJIT_ASSERT(!jump || jump->addr >= word_count);
SLJIT_ASSERT(!const_ || const_->addr >= word_count);
- SLJIT_ASSERT(!put_label || put_label->addr >= word_count);
/* These structures are ordered by their address. */
- if (label && label->size == word_count) {
+ if (next_min_addr == next_label_size) {
/* Just recording the address. */
- label->addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);
+ label->u.addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);
label->size = (sljit_uw)(code_ptr - code);
label = label->next;
+ next_label_size = SLJIT_GET_NEXT_SIZE(label);
}
- if (jump && jump->addr == word_count) {
-#if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32)
- jump->addr = (sljit_uw)(code_ptr - 3);
-#else
- jump->addr = (sljit_uw)(code_ptr - 6);
-#endif
- if (detect_jump_type(jump, code_ptr, code, executable_offset)) {
-#if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32)
- code_ptr[-3] = code_ptr[0];
- code_ptr -= 3;
-#else
- if (jump->flags & PATCH_ABS32) {
- code_ptr -= 3;
- code_ptr[-1] = code_ptr[2];
- code_ptr[0] = code_ptr[3];
- }
- else if (jump->flags & PATCH_ABS48) {
- code_ptr--;
- code_ptr[-1] = code_ptr[0];
- code_ptr[0] = code_ptr[1];
- /* rldicr rX,rX,32,31 -> rX,rX,16,47 */
- SLJIT_ASSERT((code_ptr[-3] & 0xfc00ffff) == 0x780007c6);
- code_ptr[-3] ^= 0x8422;
- /* oris -> ori */
- code_ptr[-2] ^= 0x4000000;
- }
- else {
- code_ptr[-6] = code_ptr[0];
- code_ptr -= 6;
- }
-#endif
- if (jump->flags & REMOVE_COND) {
- code_ptr[0] = BCx | (2 << 2) | ((code_ptr[0] ^ (8 << 21)) & 0x03ff0001);
- code_ptr++;
- jump->addr += sizeof(sljit_ins);
- code_ptr[0] = Bx;
- jump->flags -= IS_COND;
- }
+
+ if (next_min_addr == next_jump_addr) {
+ if (!(jump->flags & JUMP_MOV_ADDR)) {
+ word_count += jump->flags >> JUMP_SIZE_SHIFT;
+ jump->addr = (sljit_uw)code_ptr;
+ code_ptr = detect_jump_type(jump, code_ptr, code, executable_offset);
+ SLJIT_ASSERT(((sljit_uw)code_ptr - jump->addr <= (jump->flags >> JUMP_SIZE_SHIFT) * sizeof(sljit_ins)));
+ } else {
+ jump->addr = (sljit_uw)code_ptr;
+#if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
+ word_count += jump->flags >> JUMP_SIZE_SHIFT;
+ code_ptr += mov_addr_get_length(jump, code, executable_offset);
+#else /* !SLJIT_CONFIG_PPC_64 */
+ word_count++;
+ code_ptr++;
+#endif /* SLJIT_CONFIG_PPC_64 */
}
jump = jump->next;
- }
- if (const_ && const_->addr == word_count) {
+ next_jump_addr = SLJIT_GET_NEXT_ADDRESS(jump);
+ } else if (next_min_addr == next_const_addr) {
const_->addr = (sljit_uw)code_ptr;
const_ = const_->next;
+ next_const_addr = SLJIT_GET_NEXT_ADDRESS(const_);
}
- if (put_label && put_label->addr == word_count) {
- SLJIT_ASSERT(put_label->label);
- put_label->addr = (sljit_uw)code_ptr;
-#if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
- code_ptr += put_label_get_length(put_label, (sljit_uw)(SLJIT_ADD_EXEC_OFFSET(code, executable_offset) + put_label->label->size));
- word_count += 4;
-#endif
- put_label = put_label->next;
- }
- next_addr = compute_next_addr(label, jump, const_, put_label);
+
+ SLJIT_GET_NEXT_MIN();
}
code_ptr++;
word_count++;
@@ -555,7 +679,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil
} while (buf);
if (label && label->size == word_count) {
- label->addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);
+ label->u.addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);
label->size = (sljit_uw)(code_ptr - code);
label = label->next;
}
@@ -563,7 +687,6 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil
SLJIT_ASSERT(!label);
SLJIT_ASSERT(!jump);
SLJIT_ASSERT(!const_);
- SLJIT_ASSERT(!put_label);
#if (defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL)
SLJIT_ASSERT(code_ptr - code <= (sljit_sw)(compiler->size - (sizeof(struct sljit_function_context) / sizeof(sljit_ins))));
@@ -573,84 +696,10 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil
jump = compiler->jumps;
while (jump) {
- do {
- addr = (jump->flags & JUMP_LABEL) ? jump->u.label->addr : jump->u.target;
- buf_ptr = (sljit_ins *)jump->addr;
-
- if (jump->flags & PATCH_B) {
- if (jump->flags & IS_COND) {
- if (!(jump->flags & PATCH_ABS_B)) {
- addr -= (sljit_uw)SLJIT_ADD_EXEC_OFFSET(buf_ptr, executable_offset);
- SLJIT_ASSERT((sljit_sw)addr <= 0x7fff && (sljit_sw)addr >= -0x8000);
- *buf_ptr = BCx | ((sljit_ins)addr & 0xfffc) | ((*buf_ptr) & 0x03ff0001);
- }
- else {
- SLJIT_ASSERT(addr <= 0xffff);
- *buf_ptr = BCx | ((sljit_ins)addr & 0xfffc) | 0x2 | ((*buf_ptr) & 0x03ff0001);
- }
- }
- else {
- if (!(jump->flags & PATCH_ABS_B)) {
- addr -= (sljit_uw)SLJIT_ADD_EXEC_OFFSET(buf_ptr, executable_offset);
- SLJIT_ASSERT((sljit_sw)addr <= 0x01ffffff && (sljit_sw)addr >= -0x02000000);
- *buf_ptr = Bx | ((sljit_ins)addr & 0x03fffffc) | ((*buf_ptr) & 0x1);
- }
- else {
- SLJIT_ASSERT(addr <= 0x03ffffff);
- *buf_ptr = Bx | ((sljit_ins)addr & 0x03fffffc) | 0x2 | ((*buf_ptr) & 0x1);
- }
- }
- break;
- }
-
- /* Set the fields of immediate loads. */
-#if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32)
- SLJIT_ASSERT(((buf_ptr[0] | buf_ptr[1]) & 0xffff) == 0);
- buf_ptr[0] |= (sljit_ins)(addr >> 16) & 0xffff;
- buf_ptr[1] |= (sljit_ins)addr & 0xffff;
-#else
- if (jump->flags & PATCH_ABS32) {
- SLJIT_ASSERT(addr <= 0x7fffffff);
- SLJIT_ASSERT(((buf_ptr[0] | buf_ptr[1]) & 0xffff) == 0);
- buf_ptr[0] |= (sljit_ins)(addr >> 16) & 0xffff;
- buf_ptr[1] |= (sljit_ins)addr & 0xffff;
- break;
- }
-
- if (jump->flags & PATCH_ABS48) {
- SLJIT_ASSERT(addr <= 0x7fffffffffff);
- SLJIT_ASSERT(((buf_ptr[0] | buf_ptr[1] | buf_ptr[3]) & 0xffff) == 0);
- buf_ptr[0] |= (sljit_ins)(addr >> 32) & 0xffff;
- buf_ptr[1] |= (sljit_ins)(addr >> 16) & 0xffff;
- buf_ptr[3] |= (sljit_ins)addr & 0xffff;
- break;
- }
-
- SLJIT_ASSERT(((buf_ptr[0] | buf_ptr[1] | buf_ptr[3] | buf_ptr[4]) & 0xffff) == 0);
- buf_ptr[0] |= (sljit_ins)(addr >> 48) & 0xffff;
- buf_ptr[1] |= (sljit_ins)(addr >> 32) & 0xffff;
- buf_ptr[3] |= (sljit_ins)(addr >> 16) & 0xffff;
- buf_ptr[4] |= (sljit_ins)addr & 0xffff;
-#endif
- } while (0);
+ generate_jump_or_mov_addr(jump, executable_offset);
jump = jump->next;
}
- put_label = compiler->put_labels;
- while (put_label) {
-#if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32)
- addr = put_label->label->addr;
- buf_ptr = (sljit_ins *)put_label->addr;
-
- SLJIT_ASSERT((buf_ptr[0] & 0xfc1f0000) == ADDIS && (buf_ptr[1] & 0xfc000000) == ORI);
- buf_ptr[0] |= (addr >> 16) & 0xffff;
- buf_ptr[1] |= addr & 0xffff;
-#else
- put_label_set(put_label);
-#endif
- put_label = put_label->next;
- }
-
compiler->error = SLJIT_ERR_COMPILED;
compiler->executable_offset = executable_offset;
@@ -671,11 +720,9 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil
#if (defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL)
compiler->executable_size = (sljit_uw)(code_ptr - code) * sizeof(sljit_ins) + sizeof(struct sljit_function_context);
-
return code_ptr;
#else
compiler->executable_size = (sljit_uw)(code_ptr - code) * sizeof(sljit_ins);
-
return code;
#endif
}
@@ -937,14 +984,16 @@ static sljit_s32 emit_stack_frame_release(struct sljit_compiler *compiler, sljit
sljit_s32 i, tmp, base, offset;
sljit_s32 local_size = compiler->local_size;
+ SLJIT_ASSERT(TMP_CALL_REG != TMP_REG2);
+
base = SLJIT_SP;
if (local_size > STACK_MAX_DISTANCE) {
- base = TMP_REG1;
+ base = TMP_REG2;
if (local_size > 2 * STACK_MAX_DISTANCE + LR_SAVE_OFFSET) {
FAIL_IF(push_inst(compiler, STACK_LOAD | D(base) | A(SLJIT_SP) | IMM(0)));
local_size = 0;
} else {
- FAIL_IF(push_inst(compiler, ADDI | D(TMP_REG1) | A(SLJIT_SP) | IMM(local_size - STACK_MAX_DISTANCE)));
+ FAIL_IF(push_inst(compiler, ADDI | D(TMP_REG2) | A(SLJIT_SP) | IMM(local_size - STACK_MAX_DISTANCE)));
local_size = STACK_MAX_DISTANCE;
}
}
@@ -986,7 +1035,7 @@ static sljit_s32 emit_stack_frame_release(struct sljit_compiler *compiler, sljit
if (local_size > 0)
return push_inst(compiler, ADDI | D(SLJIT_SP) | A(base) | IMM(local_size));
- SLJIT_ASSERT(base == TMP_REG1);
+ SLJIT_ASSERT(base == TMP_REG2);
return push_inst(compiler, OR | S(base) | A(SLJIT_SP) | B(base));
}
@@ -1253,7 +1302,7 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3
sljit_s32 dst_r = TMP_REG2;
sljit_s32 src1_r;
sljit_s32 src2_r;
- sljit_s32 sugg_src2_r = TMP_REG2;
+ sljit_s32 src2_tmp_reg = (!(input_flags & ALT_SIGN_EXT) && GET_OPCODE(op) >= SLJIT_OP2_BASE && FAST_IS_REG(src1)) ? TMP_REG1 : TMP_REG2;
sljit_s32 flags = input_flags & (ALT_FORM1 | ALT_FORM2 | ALT_FORM3 | ALT_FORM4 | ALT_FORM5 | ALT_SIGN_EXT | ALT_SET_FLAGS);
/* Destination check. */
@@ -1264,24 +1313,7 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3
flags |= REG_DEST;
if (op >= SLJIT_MOV && op <= SLJIT_MOV_P)
- sugg_src2_r = dst_r;
- }
-
- /* Source 1. */
- if (FAST_IS_REG(src1)) {
- src1_r = src1;
- flags |= REG1_SOURCE;
- }
- else if (src1 == SLJIT_IMM) {
- src1_r = TMP_ZERO;
- if (src1w != 0) {
- FAIL_IF(load_immediate(compiler, TMP_REG1, src1w));
- src1_r = TMP_REG1;
- }
- }
- else {
- FAIL_IF(emit_op_mem(compiler, input_flags | LOAD_DATA, TMP_REG1, src1, src1w, TMP_REG1));
- src1_r = TMP_REG1;
+ src2_tmp_reg = dst_r;
}
/* Source 2. */
@@ -1291,17 +1323,30 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3
if (!(flags & REG_DEST) && op >= SLJIT_MOV && op <= SLJIT_MOV_P)
dst_r = src2_r;
- }
- else if (src2 == SLJIT_IMM) {
+ } else if (src2 == SLJIT_IMM) {
src2_r = TMP_ZERO;
if (src2w != 0) {
- FAIL_IF(load_immediate(compiler, sugg_src2_r, src2w));
- src2_r = sugg_src2_r;
+ FAIL_IF(load_immediate(compiler, src2_tmp_reg, src2w));
+ src2_r = src2_tmp_reg;
}
+ } else {
+ FAIL_IF(emit_op_mem(compiler, input_flags | LOAD_DATA, src2_tmp_reg, src2, src2w, TMP_REG1));
+ src2_r = src2_tmp_reg;
}
- else {
- FAIL_IF(emit_op_mem(compiler, input_flags | LOAD_DATA, sugg_src2_r, src2, src2w, TMP_REG2));
- src2_r = sugg_src2_r;
+
+ /* Source 1. */
+ if (FAST_IS_REG(src1)) {
+ src1_r = src1;
+ flags |= REG1_SOURCE;
+ } else if (src1 == SLJIT_IMM) {
+ src1_r = TMP_ZERO;
+ if (src1w != 0) {
+ FAIL_IF(load_immediate(compiler, TMP_REG1, src1w));
+ src1_r = TMP_REG1;
+ }
+ } else {
+ FAIL_IF(emit_op_mem(compiler, input_flags | LOAD_DATA, TMP_REG1, src1, src1w, TMP_REG1));
+ src1_r = TMP_REG1;
}
FAIL_IF(emit_single_op(compiler, op, flags, dst_r, src1_r, src2_r));
@@ -1757,7 +1802,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile
compiler->status_flags_state = SLJIT_CURRENT_FLAGS_SUB;
if (GET_FLAG_TYPE(op) >= SLJIT_LESS && GET_FLAG_TYPE(op) <= SLJIT_LESS_EQUAL) {
- if (dst == TMP_REG2) {
+ if (dst == TMP_REG1) {
if (TEST_UL_IMM(src2, src2w)) {
compiler->imm = (sljit_ins)src2w & 0xffff;
return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM1 | ALT_FORM2, dst, dstw, src1, src1w, TMP_REG2, 0);
@@ -1772,7 +1817,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile
return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM1 | ALT_FORM3, dst, dstw, src1, src1w, src2, src2w);
}
- if (dst == TMP_REG2 && GET_FLAG_TYPE(op) <= SLJIT_SIG_LESS_EQUAL) {
+ if (dst == TMP_REG1 && GET_FLAG_TYPE(op) <= SLJIT_SIG_LESS_EQUAL) {
if (TEST_SL_IMM(src2, src2w)) {
compiler->imm = (sljit_ins)src2w & 0xffff;
return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM2 | ALT_FORM3, dst, dstw, src1, src1w, TMP_REG2, 0);
@@ -1911,13 +1956,31 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2u(struct sljit_compiler *compil
CHECK(check_sljit_emit_op2(compiler, op, 1, 0, 0, src1, src1w, src2, src2w));
SLJIT_SKIP_CHECKS(compiler);
- return sljit_emit_op2(compiler, op, TMP_REG2, 0, src1, src1w, src2, src2w);
+ return sljit_emit_op2(compiler, op, TMP_REG1, 0, src1, src1w, src2, src2w);
}
#undef TEST_ADD_FORM1
#undef TEST_SUB_FORM2
#undef TEST_SUB_FORM3
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2r(struct sljit_compiler *compiler, sljit_s32 op,
+ sljit_s32 dst_reg,
+ sljit_s32 src1, sljit_sw src1w,
+ sljit_s32 src2, sljit_sw src2w)
+{
+ CHECK_ERROR();
+ CHECK(check_sljit_emit_op2r(compiler, op, dst_reg, src1, src1w, src2, src2w));
+
+ switch (GET_OPCODE(op)) {
+ case SLJIT_MULADD:
+ SLJIT_SKIP_CHECKS(compiler);
+ FAIL_IF(sljit_emit_op2(compiler, SLJIT_MUL | (op & SLJIT_32), TMP_REG2, 0, src1, src1w, src2, src2w));
+ return push_inst(compiler, ADD | D(dst_reg) | A(dst_reg) | B(TMP_REG2));
+ }
+
+ return SLJIT_SUCCESS;
+}
+
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_shift_into(struct sljit_compiler *compiler, sljit_s32 op,
sljit_s32 dst_reg,
sljit_s32 src1_reg,
@@ -2228,7 +2291,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compil
/* Fall through. */
case SLJIT_MOV_F64:
if (src != dst_r) {
- if (dst_r != TMP_FREG1)
+ if (!(dst & SLJIT_MEM))
FAIL_IF(push_inst(compiler, FMR | FD(dst_r) | FB(src)));
else
dst_r = src;
@@ -2268,7 +2331,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop2(struct sljit_compiler *compil
}
if (src2 & SLJIT_MEM) {
- FAIL_IF(emit_op_mem(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG2, src2, src2w, TMP_REG2));
+ FAIL_IF(emit_op_mem(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG2, src2, src2w, TMP_REG1));
src2 = TMP_FREG2;
}
@@ -2451,7 +2514,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile
type &= 0xff;
if ((type | 0x1) == SLJIT_NOT_CARRY)
- PTR_FAIL_IF(push_inst(compiler, ADDE | RC(ALT_SET_FLAGS) | D(TMP_REG1) | A(TMP_ZERO) | B(TMP_ZERO)));
+ PTR_FAIL_IF(push_inst(compiler, ADDE | RC(ALT_SET_FLAGS) | D(TMP_REG2) | A(TMP_ZERO) | B(TMP_ZERO)));
/* In PPC, we don't need to touch the arguments. */
if (type < SLJIT_JUMP)
@@ -2461,10 +2524,11 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile
jump->flags |= IS_CALL;
#endif
- PTR_FAIL_IF(emit_const(compiler, TMP_CALL_REG, 0));
- PTR_FAIL_IF(push_inst(compiler, MTCTR | S(TMP_CALL_REG)));
jump->addr = compiler->size;
PTR_FAIL_IF(push_inst(compiler, BCCTR | bo_bi_flags | (type >= SLJIT_FAST_CALL ? 1 : 0)));
+
+ /* Maximum number of instructions required for generating a constant. */
+ compiler->size += JUMP_MAX_SIZE - 1;
return jump;
}
@@ -2498,18 +2562,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_ijump(struct sljit_compiler *compi
CHECK_ERROR();
CHECK(check_sljit_emit_ijump(compiler, type, src, srcw));
- if (FAST_IS_REG(src)) {
-#if (defined SLJIT_PASS_ENTRY_ADDR_TO_CALL && SLJIT_PASS_ENTRY_ADDR_TO_CALL)
- if (type >= SLJIT_CALL && src != TMP_CALL_REG) {
- FAIL_IF(push_inst(compiler, OR | S(src) | A(TMP_CALL_REG) | B(src)));
- src_r = TMP_CALL_REG;
- }
- else
- src_r = src;
-#else /* SLJIT_PASS_ENTRY_ADDR_TO_CALL */
- src_r = src;
-#endif /* SLJIT_PASS_ENTRY_ADDR_TO_CALL */
- } else if (src == SLJIT_IMM) {
+ if (src == SLJIT_IMM) {
/* These jumps are converted to jump/call instructions when possible. */
jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump));
FAIL_IF(!jump);
@@ -2521,8 +2574,24 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_ijump(struct sljit_compiler *compi
jump->flags |= IS_CALL;
#endif /* SLJIT_PASS_ENTRY_ADDR_TO_CALL */
- FAIL_IF(emit_const(compiler, TMP_CALL_REG, 0));
- src_r = TMP_CALL_REG;
+ jump->addr = compiler->size;
+ FAIL_IF(push_inst(compiler, BCCTR | (20 << 21) | (type >= SLJIT_FAST_CALL ? 1 : 0)));
+
+ /* Maximum number of instructions required for generating a constant. */
+ compiler->size += JUMP_MAX_SIZE - 1;
+ return SLJIT_SUCCESS;
+ }
+
+ if (FAST_IS_REG(src)) {
+#if (defined SLJIT_PASS_ENTRY_ADDR_TO_CALL && SLJIT_PASS_ENTRY_ADDR_TO_CALL)
+ if (type >= SLJIT_CALL && src != TMP_CALL_REG) {
+ FAIL_IF(push_inst(compiler, OR | S(src) | A(TMP_CALL_REG) | B(src)));
+ src_r = TMP_CALL_REG;
+ } else
+ src_r = src;
+#else /* SLJIT_PASS_ENTRY_ADDR_TO_CALL */
+ src_r = src;
+#endif /* SLJIT_PASS_ENTRY_ADDR_TO_CALL */
} else {
ADJUST_LOCAL_OFFSET(src, srcw);
FAIL_IF(emit_op_mem(compiler, WORD_DATA | LOAD_DATA, TMP_CALL_REG, src, srcw, TMP_CALL_REG));
@@ -2530,8 +2599,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_ijump(struct sljit_compiler *compi
}
FAIL_IF(push_inst(compiler, MTCTR | S(src_r)));
- if (jump)
- jump->addr = compiler->size;
return push_inst(compiler, BCCTR | (20 << 21) | (type >= SLJIT_FAST_CALL ? 1 : 0));
}
@@ -2748,13 +2815,13 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_select(struct sljit_compiler *comp
type ^= 0x1;
} else {
if (ADDRESSING_DEPENDS_ON(src1, dst_reg)) {
- FAIL_IF(push_inst(compiler, OR | S(dst_reg) | A(TMP_REG2) | B(dst_reg)));
+ FAIL_IF(push_inst(compiler, OR | S(dst_reg) | A(TMP_REG1) | B(dst_reg)));
if ((src1 & REG_MASK) == dst_reg)
- src1 = (src1 & ~REG_MASK) | TMP_REG2;
+ src1 = (src1 & ~REG_MASK) | TMP_REG1;
if (OFFS_REG(src1) == dst_reg)
- src1 = (src1 & ~OFFS_REG_MASK) | TO_OFFS_REG(TMP_REG2);
+ src1 = (src1 & ~OFFS_REG_MASK) | TO_OFFS_REG(TMP_REG1);
}
FAIL_IF(push_inst(compiler, OR | S(src2_reg) | A(dst_reg) | B(src2_reg)));
@@ -3061,31 +3128,31 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compi
return const_;
}
-SLJIT_API_FUNC_ATTRIBUTE struct sljit_put_label* sljit_emit_put_label(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw dstw)
+SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_mov_addr(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw dstw)
{
- struct sljit_put_label *put_label;
+ struct sljit_jump *jump;
sljit_s32 dst_r;
CHECK_ERROR_PTR();
- CHECK_PTR(check_sljit_emit_put_label(compiler, dst, dstw));
+ CHECK_PTR(check_sljit_emit_mov_addr(compiler, dst, dstw));
ADJUST_LOCAL_OFFSET(dst, dstw);
- put_label = (struct sljit_put_label*)ensure_abuf(compiler, sizeof(struct sljit_put_label));
- PTR_FAIL_IF(!put_label);
- set_put_label(put_label, compiler, 0);
+ jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump));
+ PTR_FAIL_IF(!jump);
+ set_mov_addr(jump, compiler, 0);
dst_r = FAST_IS_REG(dst) ? dst : TMP_REG2;
+ PTR_FAIL_IF(push_inst(compiler, (sljit_ins)dst_r));
#if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32)
- PTR_FAIL_IF(emit_const(compiler, dst_r, 0));
+ compiler->size++;
#else
- PTR_FAIL_IF(push_inst(compiler, (sljit_ins)dst_r));
compiler->size += 4;
#endif
if (dst & SLJIT_MEM)
PTR_FAIL_IF(emit_op(compiler, SLJIT_MOV, WORD_DATA, dst, dstw, TMP_REG1, 0, TMP_REG2, 0));
- return put_label;
+ return jump;
}
SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_sw new_constant, sljit_sw executable_offset)
diff --git a/src/3rdparty/pcre2/src/sljit/sljitNativeRISCV_common.c b/src/3rdparty/pcre2/src/sljit/sljitNativeRISCV_common.c
index 64bd411d9d..d86100a80c 100644
--- a/src/3rdparty/pcre2/src/sljit/sljitNativeRISCV_common.c
+++ b/src/3rdparty/pcre2/src/sljit/sljitNativeRISCV_common.c
@@ -181,24 +181,23 @@ static SLJIT_INLINE sljit_ins* detect_jump_type(struct sljit_jump *jump, sljit_i
if (jump->flags & JUMP_ADDR)
target_addr = jump->u.target;
else {
- SLJIT_ASSERT(jump->flags & JUMP_LABEL);
+ SLJIT_ASSERT(jump->u.label != NULL);
target_addr = (sljit_uw)(code + jump->u.label->size) + (sljit_uw)executable_offset;
}
diff = (sljit_sw)target_addr - (sljit_sw)inst - executable_offset;
if (jump->flags & IS_COND) {
- inst--;
diff += SSIZE_OF(ins);
if (diff >= BRANCH_MIN && diff <= BRANCH_MAX) {
- jump->flags |= PATCH_B;
+ inst--;
inst[0] = (inst[0] & 0x1fff07f) ^ 0x1000;
+ jump->flags |= PATCH_B;
jump->addr = (sljit_uw)inst;
return inst;
}
- inst++;
diff -= SSIZE_OF(ins);
}
@@ -265,83 +264,109 @@ exit:
#if (defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64)
-static SLJIT_INLINE sljit_sw put_label_get_length(struct sljit_put_label *put_label, sljit_uw max_label)
+static SLJIT_INLINE sljit_sw mov_addr_get_length(struct sljit_jump *jump, sljit_ins *code_ptr, sljit_ins *code, sljit_sw executable_offset)
{
- if (max_label <= (sljit_uw)S32_MAX) {
- put_label->flags = PATCH_ABS32;
+ sljit_uw addr;
+ sljit_sw diff;
+ SLJIT_UNUSED_ARG(executable_offset);
+
+ SLJIT_ASSERT(jump->flags < ((sljit_uw)6 << JUMP_SIZE_SHIFT));
+ if (jump->flags & JUMP_ADDR)
+ addr = jump->u.target;
+ else
+ addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code + jump->u.label->size, executable_offset);
+
+ diff = (sljit_sw)addr - (sljit_sw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);
+
+ if (diff >= S32_MIN && diff <= S32_MAX) {
+ SLJIT_ASSERT(jump->flags >= ((sljit_uw)1 << JUMP_SIZE_SHIFT));
+ jump->flags |= PATCH_REL32;
+ return 1;
+ }
+
+ if (addr <= S32_MAX) {
+ SLJIT_ASSERT(jump->flags >= ((sljit_uw)1 << JUMP_SIZE_SHIFT));
+ jump->flags |= PATCH_ABS32;
return 1;
}
- if (max_label <= S44_MAX) {
- put_label->flags = PATCH_ABS44;
+ if (addr <= S44_MAX) {
+ SLJIT_ASSERT(jump->flags >= ((sljit_uw)3 << JUMP_SIZE_SHIFT));
+ jump->flags |= PATCH_ABS44;
return 3;
}
- if (max_label <= S52_MAX) {
- put_label->flags = PATCH_ABS52;
+ if (addr <= S52_MAX) {
+ SLJIT_ASSERT(jump->flags >= ((sljit_uw)4 << JUMP_SIZE_SHIFT));
+ jump->flags |= PATCH_ABS52;
return 4;
}
- put_label->flags = 0;
+ SLJIT_ASSERT(jump->flags >= ((sljit_uw)5 << JUMP_SIZE_SHIFT));
return 5;
}
#endif /* SLJIT_CONFIG_RISCV_64 */
-static SLJIT_INLINE void load_addr_to_reg(void *dst, sljit_u32 reg)
+static SLJIT_INLINE void load_addr_to_reg(struct sljit_jump *jump, sljit_sw executable_offset)
{
- struct sljit_jump *jump = NULL;
- struct sljit_put_label *put_label;
- sljit_uw flags;
- sljit_ins *inst;
+ sljit_uw flags = jump->flags;
+ sljit_uw addr = (flags & JUMP_ADDR) ? jump->u.target : jump->u.label->u.addr;
+ sljit_ins *ins = (sljit_ins*)jump->addr;
+ sljit_u32 reg = (flags & JUMP_MOV_ADDR) ? *ins : TMP_REG1;
#if (defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64)
sljit_sw high;
#endif
- sljit_uw addr;
+ SLJIT_UNUSED_ARG(executable_offset);
- if (reg != 0) {
- jump = (struct sljit_jump*)dst;
- flags = jump->flags;
- inst = (sljit_ins*)jump->addr;
- addr = (flags & JUMP_LABEL) ? jump->u.label->addr : jump->u.target;
- } else {
- put_label = (struct sljit_put_label*)dst;
#if (defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64)
- flags = put_label->flags;
-#endif
- inst = (sljit_ins*)put_label->addr;
- addr = put_label->label->addr;
- reg = *inst;
+ if (flags & PATCH_REL32) {
+ addr -= (sljit_uw)SLJIT_ADD_EXEC_OFFSET(ins, executable_offset);
+
+ SLJIT_ASSERT((sljit_sw)addr >= S32_MIN && (sljit_sw)addr <= S32_MAX);
+
+ if ((addr & 0x800) != 0)
+ addr += 0x1000;
+
+ ins[0] = AUIPC | RD(reg) | (sljit_ins)((sljit_sw)addr & ~0xfff);
+
+ if (!(flags & JUMP_MOV_ADDR)) {
+ SLJIT_ASSERT((ins[1] & 0x707f) == JALR);
+ ins[1] = (ins[1] & 0xfffff) | IMM_I(addr);
+ } else
+ ins[1] = ADDI | RD(reg) | RS1(reg) | IMM_I(addr);
+ return;
}
+#endif
if ((addr & 0x800) != 0)
addr += 0x1000;
#if (defined SLJIT_CONFIG_RISCV_32 && SLJIT_CONFIG_RISCV_32)
- inst[0] = LUI | RD(reg) | (sljit_ins)((sljit_sw)addr & ~0xfff);
+ ins[0] = LUI | RD(reg) | (sljit_ins)((sljit_sw)addr & ~0xfff);
#else /* !SLJIT_CONFIG_RISCV_32 */
if (flags & PATCH_ABS32) {
SLJIT_ASSERT(addr <= S32_MAX);
- inst[0] = LUI | RD(reg) | (sljit_ins)((sljit_sw)addr & ~0xfff);
+ ins[0] = LUI | RD(reg) | (sljit_ins)((sljit_sw)addr & ~0xfff);
} else if (flags & PATCH_ABS44) {
high = (sljit_sw)addr >> 12;
SLJIT_ASSERT((sljit_uw)high <= 0x7fffffff);
if (high > S32_MAX) {
SLJIT_ASSERT((high & 0x800) != 0);
- inst[0] = LUI | RD(reg) | (sljit_ins)0x80000000u;
- inst[1] = XORI | RD(reg) | RS1(reg) | IMM_I(high);
+ ins[0] = LUI | RD(reg) | (sljit_ins)0x80000000u;
+ ins[1] = XORI | RD(reg) | RS1(reg) | IMM_I(high);
} else {
if ((high & 0x800) != 0)
high += 0x1000;
- inst[0] = LUI | RD(reg) | (sljit_ins)(high & ~0xfff);
- inst[1] = ADDI | RD(reg) | RS1(reg) | IMM_I(high);
+ ins[0] = LUI | RD(reg) | (sljit_ins)(high & ~0xfff);
+ ins[1] = ADDI | RD(reg) | RS1(reg) | IMM_I(high);
}
- inst[2] = SLLI | RD(reg) | RS1(reg) | IMM_I(12);
- inst += 2;
+ ins[2] = SLLI | RD(reg) | RS1(reg) | IMM_I(12);
+ ins += 2;
} else {
high = (sljit_sw)addr >> 32;
@@ -350,30 +375,128 @@ static SLJIT_INLINE void load_addr_to_reg(void *dst, sljit_u32 reg)
if (flags & PATCH_ABS52) {
SLJIT_ASSERT(addr <= S52_MAX);
- inst[0] = LUI | RD(TMP_REG3) | (sljit_ins)(high << 12);
+ ins[0] = LUI | RD(TMP_REG3) | (sljit_ins)(high << 12);
} else {
if ((high & 0x800) != 0)
high += 0x1000;
- inst[0] = LUI | RD(TMP_REG3) | (sljit_ins)(high & ~0xfff);
- inst[1] = ADDI | RD(TMP_REG3) | RS1(TMP_REG3) | IMM_I(high);
- inst++;
+ ins[0] = LUI | RD(TMP_REG3) | (sljit_ins)(high & ~0xfff);
+ ins[1] = ADDI | RD(TMP_REG3) | RS1(TMP_REG3) | IMM_I(high);
+ ins++;
}
- inst[1] = LUI | RD(reg) | (sljit_ins)((sljit_sw)addr & ~0xfff);
- inst[2] = SLLI | RD(TMP_REG3) | RS1(TMP_REG3) | IMM_I((flags & PATCH_ABS52) ? 20 : 32);
- inst[3] = XOR | RD(reg) | RS1(reg) | RS2(TMP_REG3);
- inst += 3;
+ ins[1] = LUI | RD(reg) | (sljit_ins)((sljit_sw)addr & ~0xfff);
+ ins[2] = SLLI | RD(TMP_REG3) | RS1(TMP_REG3) | IMM_I((flags & PATCH_ABS52) ? 20 : 32);
+ ins[3] = XOR | RD(reg) | RS1(reg) | RS2(TMP_REG3);
+ ins += 3;
}
#endif /* !SLJIT_CONFIG_RISCV_32 */
- if (jump != NULL) {
- SLJIT_ASSERT((inst[1] & 0x707f) == JALR);
- inst[1] = (inst[1] & 0xfffff) | IMM_I(addr);
+ if (!(flags & JUMP_MOV_ADDR)) {
+ SLJIT_ASSERT((ins[1] & 0x707f) == JALR);
+ ins[1] = (ins[1] & 0xfffff) | IMM_I(addr);
} else
- inst[1] = ADDI | RD(reg) | RS1(reg) | IMM_I(addr);
+ ins[1] = ADDI | RD(reg) | RS1(reg) | IMM_I(addr);
+}
+
+static void reduce_code_size(struct sljit_compiler *compiler)
+{
+ struct sljit_label *label;
+ struct sljit_jump *jump;
+ struct sljit_const *const_;
+ SLJIT_NEXT_DEFINE_TYPES;
+ sljit_uw total_size;
+ sljit_uw size_reduce = 0;
+ sljit_sw diff;
+
+ label = compiler->labels;
+ jump = compiler->jumps;
+ const_ = compiler->consts;
+ SLJIT_NEXT_INIT_TYPES();
+
+ while (1) {
+ SLJIT_GET_NEXT_MIN();
+
+ if (next_min_addr == SLJIT_MAX_ADDRESS)
+ break;
+
+ if (next_min_addr == next_label_size) {
+ label->size -= size_reduce;
+
+ label = label->next;
+ next_label_size = SLJIT_GET_NEXT_SIZE(label);
+ }
+
+ if (next_min_addr == next_const_addr) {
+ const_->addr -= size_reduce;
+ const_ = const_->next;
+ next_const_addr = SLJIT_GET_NEXT_ADDRESS(const_);
+ continue;
+ }
+
+ if (next_min_addr != next_jump_addr)
+ continue;
+
+ jump->addr -= size_reduce;
+ if (!(jump->flags & JUMP_MOV_ADDR)) {
+ total_size = JUMP_MAX_SIZE;
+
+ if (!(jump->flags & SLJIT_REWRITABLE_JUMP)) {
+ if (jump->flags & JUMP_ADDR) {
+#if (defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64)
+ if (jump->u.target <= S32_MAX)
+ total_size = 2;
+ else if (jump->u.target <= S44_MAX)
+ total_size = 4;
+ else if (jump->u.target <= S52_MAX)
+ total_size = 5;
+#endif /* SLJIT_CONFIG_RISCV_64 */
+ } else {
+ /* Unit size: instruction. */
+ diff = (sljit_sw)jump->u.label->size - (sljit_sw)jump->addr;
+
+ if ((jump->flags & IS_COND) && (diff + 1) <= (BRANCH_MAX / SSIZE_OF(ins)) && (diff + 1) >= (BRANCH_MIN / SSIZE_OF(ins)))
+ total_size = 0;
+ else if (diff >= (JUMP_MIN / SSIZE_OF(ins)) && diff <= (JUMP_MAX / SSIZE_OF(ins)))
+ total_size = 1;
+#if (defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64)
+ else if (diff >= (S32_MIN / SSIZE_OF(ins)) && diff <= (S32_MAX / SSIZE_OF(ins)))
+ total_size = 2;
+#endif /* SLJIT_CONFIG_RISCV_64 */
+ }
+ }
+
+ size_reduce += JUMP_MAX_SIZE - total_size;
+ jump->flags |= total_size << JUMP_SIZE_SHIFT;
+#if (defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64)
+ } else {
+ total_size = 5;
+
+ if (!(jump->flags & JUMP_ADDR)) {
+ /* Real size minus 1. Unit size: instruction. */
+ diff = (sljit_sw)jump->u.label->size - (sljit_sw)jump->addr;
+
+ if (diff >= (S32_MIN / SSIZE_OF(ins)) && diff <= (S32_MAX / SSIZE_OF(ins)))
+ total_size = 1;
+ } else if (jump->u.target < S32_MAX)
+ total_size = 1;
+ else if (jump->u.target < S44_MAX)
+ total_size = 3;
+ else if (jump->u.target <= S52_MAX)
+ total_size = 4;
+
+ size_reduce += 5 - total_size;
+ jump->flags |= total_size << JUMP_SIZE_SHIFT;
+#endif /* !SLJIT_CONFIG_RISCV_64 */
+ }
+
+ jump = jump->next;
+ next_jump_addr = SLJIT_GET_NEXT_ADDRESS(jump);
+ }
+
+ compiler->size -= size_reduce;
}
-SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compiler)
+SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compiler, sljit_s32 options, void *exec_allocator_data)
{
struct sljit_memory_fragment *buf;
sljit_ins *code;
@@ -381,77 +504,78 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil
sljit_ins *buf_ptr;
sljit_ins *buf_end;
sljit_uw word_count;
- sljit_uw next_addr;
+ SLJIT_NEXT_DEFINE_TYPES;
sljit_sw executable_offset;
sljit_uw addr;
struct sljit_label *label;
struct sljit_jump *jump;
struct sljit_const *const_;
- struct sljit_put_label *put_label;
CHECK_ERROR_PTR();
CHECK_PTR(check_sljit_generate_code(compiler));
- reverse_buf(compiler);
- code = (sljit_ins*)SLJIT_MALLOC_EXEC(compiler->size * sizeof(sljit_ins), compiler->exec_allocator_data);
+ reduce_code_size(compiler);
+
+ code = (sljit_ins*)allocate_executable_memory(compiler->size * sizeof(sljit_ins), options, exec_allocator_data, &executable_offset);
PTR_FAIL_WITH_EXEC_IF(code);
+
+ reverse_buf(compiler);
buf = compiler->buf;
code_ptr = code;
word_count = 0;
- next_addr = 0;
- executable_offset = SLJIT_EXEC_OFFSET(code);
-
label = compiler->labels;
jump = compiler->jumps;
const_ = compiler->consts;
- put_label = compiler->put_labels;
+ SLJIT_NEXT_INIT_TYPES();
+ SLJIT_GET_NEXT_MIN();
do {
buf_ptr = (sljit_ins*)buf->memory;
buf_end = buf_ptr + (buf->used_size >> 2);
do {
*code_ptr = *buf_ptr++;
- if (next_addr == word_count) {
+ if (next_min_addr == word_count) {
SLJIT_ASSERT(!label || label->size >= word_count);
SLJIT_ASSERT(!jump || jump->addr >= word_count);
SLJIT_ASSERT(!const_ || const_->addr >= word_count);
- SLJIT_ASSERT(!put_label || put_label->addr >= word_count);
/* These structures are ordered by their address. */
- if (label && label->size == word_count) {
- label->addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);
+ if (next_min_addr == next_label_size) {
+ label->u.addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);
label->size = (sljit_uw)(code_ptr - code);
label = label->next;
+ next_label_size = SLJIT_GET_NEXT_SIZE(label);
}
- if (jump && jump->addr == word_count) {
+
+ if (next_min_addr == next_jump_addr) {
+ if (!(jump->flags & JUMP_MOV_ADDR)) {
+ word_count = word_count - 1 + (jump->flags >> JUMP_SIZE_SHIFT);
+ jump->addr = (sljit_uw)code_ptr;
+ code_ptr = detect_jump_type(jump, code, executable_offset);
+ SLJIT_ASSERT((jump->flags & PATCH_B) || ((sljit_uw)code_ptr - jump->addr < (jump->flags >> JUMP_SIZE_SHIFT) * sizeof(sljit_ins)));
+ } else {
#if (defined SLJIT_CONFIG_RISCV_32 && SLJIT_CONFIG_RISCV_32)
- word_count += 1;
-#else
- word_count += 5;
-#endif
- jump->addr = (sljit_uw)code_ptr;
- code_ptr = detect_jump_type(jump, code, executable_offset);
+ word_count += 1;
+ jump->addr = (sljit_uw)code_ptr;
+ code_ptr += 1;
+#else /* !SLJIT_CONFIG_RISCV_32 */
+ word_count += jump->flags >> JUMP_SIZE_SHIFT;
+ addr = (sljit_uw)code_ptr;
+ code_ptr += mov_addr_get_length(jump, code_ptr, code, executable_offset);
+ jump->addr = addr;
+#endif /* SLJIT_CONFIG_RISCV_32 */
+ }
jump = jump->next;
- }
- if (const_ && const_->addr == word_count) {
+ next_jump_addr = SLJIT_GET_NEXT_ADDRESS(jump);
+ } else if (next_min_addr == next_const_addr) {
const_->addr = (sljit_uw)code_ptr;
const_ = const_->next;
+ next_const_addr = SLJIT_GET_NEXT_ADDRESS(const_);
}
- if (put_label && put_label->addr == word_count) {
- SLJIT_ASSERT(put_label->label);
- put_label->addr = (sljit_uw)code_ptr;
-#if (defined SLJIT_CONFIG_RISCV_32 && SLJIT_CONFIG_RISCV_32)
- code_ptr += 1;
- word_count += 1;
-#else
- code_ptr += put_label_get_length(put_label, (sljit_uw)(SLJIT_ADD_EXEC_OFFSET(code, executable_offset) + put_label->label->size));
- word_count += 5;
-#endif
- put_label = put_label->next;
- }
- next_addr = compute_next_addr(label, jump, const_, put_label);
+
+ SLJIT_GET_NEXT_MIN();
}
code_ptr++;
word_count++;
@@ -461,7 +585,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil
} while (buf);
if (label && label->size == word_count) {
- label->addr = (sljit_uw)code_ptr;
+ label->u.addr = (sljit_uw)code_ptr;
label->size = (sljit_uw)(code_ptr - code);
label = label->next;
}
@@ -469,18 +593,17 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil
SLJIT_ASSERT(!label);
SLJIT_ASSERT(!jump);
SLJIT_ASSERT(!const_);
- SLJIT_ASSERT(!put_label);
SLJIT_ASSERT(code_ptr - code <= (sljit_sw)compiler->size);
jump = compiler->jumps;
while (jump) {
do {
- if (!(jump->flags & (PATCH_B | PATCH_J | PATCH_REL32))) {
- load_addr_to_reg(jump, TMP_REG1);
+ if (!(jump->flags & (PATCH_B | PATCH_J)) || (jump->flags & JUMP_MOV_ADDR)) {
+ load_addr_to_reg(jump, executable_offset);
break;
}
- addr = (jump->flags & JUMP_LABEL) ? jump->u.label->addr : jump->u.target;
+ addr = (jump->flags & JUMP_ADDR) ? jump->u.target : jump->u.label->u.addr;
buf_ptr = (sljit_ins *)jump->addr;
addr -= (sljit_uw)SLJIT_ADD_EXEC_OFFSET(buf_ptr, executable_offset);
@@ -491,31 +614,12 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil
break;
}
-#if (defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64)
- if (jump->flags & PATCH_REL32) {
- SLJIT_ASSERT((sljit_sw)addr >= S32_MIN && (sljit_sw)addr <= S32_MAX);
-
- if ((addr & 0x800) != 0)
- addr += 0x1000;
-
- buf_ptr[0] = AUIPC | RD(TMP_REG1) | (sljit_ins)((sljit_sw)addr & ~0xfff);
- SLJIT_ASSERT((buf_ptr[1] & 0x707f) == JALR);
- buf_ptr[1] |= IMM_I(addr);
- break;
- }
-#endif
-
SLJIT_ASSERT((sljit_sw)addr >= JUMP_MIN && (sljit_sw)addr <= JUMP_MAX);
addr = (addr & 0xff000) | ((addr & 0x800) << 9) | ((addr & 0x7fe) << 20) | ((addr & 0x100000) << 11);
buf_ptr[0] = JAL | RD((jump->flags & IS_CALL) ? RETURN_ADDR_REG : TMP_ZERO) | (sljit_ins)addr;
} while (0);
- jump = jump->next;
- }
- put_label = compiler->put_labels;
- while (put_label) {
- load_addr_to_reg(put_label, 0);
- put_label = put_label->next;
+ jump = jump->next;
}
compiler->error = SLJIT_ERR_COMPILED;
@@ -599,6 +703,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_cmp_info(sljit_s32 type)
#define SLOW_SRC1 0x08000
#define SLOW_SRC2 0x10000
#define SLOW_DEST 0x20000
+#define MEM_USE_TMP2 0x40000
#if (defined SLJIT_CONFIG_RISCV_32 && SLJIT_CONFIG_RISCV_32)
#define STACK_STORE SW
@@ -883,7 +988,6 @@ static sljit_s32 push_mem_inst(struct sljit_compiler *compiler, sljit_s32 flags,
/* Can perform an operation using at most 1 instruction. */
static sljit_s32 getput_arg_fast(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg, sljit_s32 arg, sljit_sw argw)
{
-
SLJIT_ASSERT(arg & SLJIT_MEM);
if (!(arg & OFFS_REG_MASK) && argw <= SIMM_MAX && argw >= SIMM_MIN) {
@@ -928,7 +1032,7 @@ static sljit_s32 can_cache(sljit_s32 arg, sljit_sw argw, sljit_s32 next_arg, slj
static sljit_s32 getput_arg(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg, sljit_s32 arg, sljit_sw argw, sljit_s32 next_arg, sljit_sw next_argw)
{
sljit_s32 base = arg & REG_MASK;
- sljit_s32 tmp_r = TMP_REG1;
+ sljit_s32 tmp_r = (flags & MEM_USE_TMP2) ? TMP_REG2 : TMP_REG1;
sljit_sw offset, argw_hi;
SLJIT_ASSERT(arg & SLJIT_MEM);
@@ -937,11 +1041,6 @@ static sljit_s32 getput_arg(struct sljit_compiler *compiler, sljit_s32 flags, sl
next_argw = 0;
}
- /* Since tmp can be the same as base or offset registers,
- * these might be unavailable after modifying tmp. */
- if ((flags & MEM_MASK) <= GPR_REG && (flags & LOAD_DATA) && reg == TMP_REG2)
- tmp_r = reg;
-
if (SLJIT_UNLIKELY(arg & OFFS_REG_MASK)) {
argw &= 0x3;
@@ -1187,7 +1286,7 @@ static sljit_s32 emit_rev16(struct sljit_compiler *compiler, sljit_s32 op, sljit
static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 flags,
sljit_s32 dst, sljit_s32 src1, sljit_sw src2)
{
- sljit_s32 is_overflow, is_carry, carry_src_r, is_handled;
+ sljit_s32 is_overflow, is_carry, carry_src_r, is_handled, reg;
sljit_ins op_imm, op_reg;
#if (defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64)
sljit_ins word = (sljit_ins)(op & SLJIT_32) >> 5;
@@ -1197,20 +1296,20 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl
switch (GET_OPCODE(op)) {
case SLJIT_MOV:
- SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM));
+ SLJIT_ASSERT(src1 == TMP_ZERO && !(flags & SRC2_IMM));
if (dst != src2)
return push_inst(compiler, ADDI | RD(dst) | RS1(src2) | IMM_I(0));
return SLJIT_SUCCESS;
case SLJIT_MOV_U8:
- SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM));
+ SLJIT_ASSERT(src1 == TMP_ZERO && !(flags & SRC2_IMM));
if ((flags & (REG_DEST | REG2_SOURCE)) == (REG_DEST | REG2_SOURCE))
return push_inst(compiler, ANDI | RD(dst) | RS1(src2) | IMM_I(0xff));
SLJIT_ASSERT(dst == src2);
return SLJIT_SUCCESS;
case SLJIT_MOV_S8:
- SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM));
+ SLJIT_ASSERT(src1 == TMP_ZERO && !(flags & SRC2_IMM));
if ((flags & (REG_DEST | REG2_SOURCE)) == (REG_DEST | REG2_SOURCE)) {
FAIL_IF(push_inst(compiler, SLLI | WORD | RD(dst) | RS1(src2) | IMM_EXTEND(24)));
return push_inst(compiler, SRAI | WORD | RD(dst) | RS1(dst) | IMM_EXTEND(24));
@@ -1219,7 +1318,7 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl
return SLJIT_SUCCESS;
case SLJIT_MOV_U16:
- SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM));
+ SLJIT_ASSERT(src1 == TMP_ZERO && !(flags & SRC2_IMM));
if ((flags & (REG_DEST | REG2_SOURCE)) == (REG_DEST | REG2_SOURCE)) {
FAIL_IF(push_inst(compiler, SLLI | WORD | RD(dst) | RS1(src2) | IMM_EXTEND(16)));
return push_inst(compiler, SRLI | WORD | RD(dst) | RS1(dst) | IMM_EXTEND(16));
@@ -1228,7 +1327,7 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl
return SLJIT_SUCCESS;
case SLJIT_MOV_S16:
- SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM));
+ SLJIT_ASSERT(src1 == TMP_ZERO && !(flags & SRC2_IMM));
if ((flags & (REG_DEST | REG2_SOURCE)) == (REG_DEST | REG2_SOURCE)) {
FAIL_IF(push_inst(compiler, SLLI | WORD | RD(dst) | RS1(src2) | IMM_EXTEND(16)));
return push_inst(compiler, SRAI | WORD | RD(dst) | RS1(dst) | IMM_EXTEND(16));
@@ -1238,7 +1337,7 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl
#if (defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64)
case SLJIT_MOV_U32:
- SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM));
+ SLJIT_ASSERT(src1 == TMP_ZERO && !(flags & SRC2_IMM));
if ((flags & (REG_DEST | REG2_SOURCE)) == (REG_DEST | REG2_SOURCE)) {
FAIL_IF(push_inst(compiler, SLLI | RD(dst) | RS1(src2) | IMM_I(32)));
return push_inst(compiler, SRLI | RD(dst) | RS1(dst) | IMM_I(32));
@@ -1247,7 +1346,7 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl
return SLJIT_SUCCESS;
case SLJIT_MOV_S32:
- SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM));
+ SLJIT_ASSERT(src1 == TMP_ZERO && !(flags & SRC2_IMM));
if ((flags & (REG_DEST | REG2_SOURCE)) == (REG_DEST | REG2_SOURCE))
return push_inst(compiler, ADDI | 0x8 | RD(dst) | RS1(src2) | IMM_I(0));
SLJIT_ASSERT(dst == src2);
@@ -1256,7 +1355,7 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl
case SLJIT_CLZ:
case SLJIT_CTZ:
- SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM));
+ SLJIT_ASSERT(src1 == TMP_ZERO && !(flags & SRC2_IMM));
return emit_clz_ctz(compiler, op, dst, src2);
case SLJIT_REV:
@@ -1264,17 +1363,17 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl
#if (defined SLJIT_CONFIG_RISCV_32 && SLJIT_CONFIG_RISCV_32)
case SLJIT_REV_U32:
#endif /* SLJIT_CONFIG_RISCV_32 */
- SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM));
+ SLJIT_ASSERT(src1 == TMP_ZERO && !(flags & SRC2_IMM));
return emit_rev(compiler, op, dst, src2);
case SLJIT_REV_U16:
case SLJIT_REV_S16:
- SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM));
+ SLJIT_ASSERT(src1 == TMP_ZERO && !(flags & SRC2_IMM));
return emit_rev16(compiler, op, dst, src2);
#if (defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64)
case SLJIT_REV_U32:
- SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM) && dst != TMP_REG1);
+ SLJIT_ASSERT(src1 == TMP_ZERO && !(flags & SRC2_IMM) && dst != TMP_REG1);
FAIL_IF(emit_rev(compiler, op, dst, src2));
if (dst == TMP_REG2)
return SLJIT_SUCCESS;
@@ -1402,8 +1501,9 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl
is_handled = 1;
if (flags & SRC2_IMM) {
- FAIL_IF(push_inst(compiler, ADDI | RD(TMP_REG2) | RS1(TMP_ZERO) | IMM_I(src2)));
- src2 = TMP_REG2;
+ reg = (src1 == TMP_REG1) ? TMP_REG2 : TMP_REG1;
+ FAIL_IF(push_inst(compiler, ADDI | RD(reg) | RS1(TMP_ZERO) | IMM_I(src2)));
+ src2 = reg;
flags &= ~SRC2_IMM;
}
@@ -1631,7 +1731,7 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3
sljit_s32 dst_r = TMP_REG2;
sljit_s32 src1_r;
sljit_sw src2_r = 0;
- sljit_s32 sugg_src2_r = TMP_REG2;
+ sljit_s32 src2_tmp_reg = (GET_OPCODE(op) >= SLJIT_OP2_BASE && FAST_IS_REG(src1)) ? TMP_REG1 : TMP_REG2;
if (!(flags & ALT_KEEP_CACHE)) {
compiler->cache_arg = 0;
@@ -1647,7 +1747,7 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3
dst_r = dst;
flags |= REG_DEST;
if (flags & MOVE_OP)
- sugg_src2_r = dst_r;
+ src2_tmp_reg = dst_r;
}
else if ((dst & SLJIT_MEM) && !getput_arg_fast(compiler, flags | ARG_TEST, TMP_REG1, dst, dstw))
flags |= SLOW_DEST;
@@ -1673,16 +1773,14 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3
if (FAST_IS_REG(src1)) {
src1_r = src1;
flags |= REG1_SOURCE;
- }
- else if (src1 == SLJIT_IMM) {
+ } else if (src1 == SLJIT_IMM) {
if (src1w) {
FAIL_IF(load_immediate(compiler, TMP_REG1, src1w, TMP_REG3));
src1_r = TMP_REG1;
}
else
src1_r = TMP_ZERO;
- }
- else {
+ } else {
if (getput_arg_fast(compiler, flags | LOAD_DATA, TMP_REG1, src1, src1w))
FAIL_IF(compiler->error);
else
@@ -1696,14 +1794,12 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3
flags |= REG2_SOURCE;
if ((flags & (REG_DEST | MOVE_OP)) == MOVE_OP)
dst_r = (sljit_s32)src2_r;
- }
- else if (src2 == SLJIT_IMM) {
+ } else if (src2 == SLJIT_IMM) {
if (!(flags & SRC2_IMM)) {
if (src2w) {
- FAIL_IF(load_immediate(compiler, sugg_src2_r, src2w, TMP_REG3));
- src2_r = sugg_src2_r;
- }
- else {
+ FAIL_IF(load_immediate(compiler, src2_tmp_reg, src2w, TMP_REG3));
+ src2_r = src2_tmp_reg;
+ } else {
src2_r = TMP_ZERO;
if (flags & MOVE_OP) {
if (dst & SLJIT_MEM)
@@ -1713,30 +1809,28 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3
}
}
}
- }
- else {
- if (getput_arg_fast(compiler, flags | LOAD_DATA, sugg_src2_r, src2, src2w))
+ } else {
+ if (getput_arg_fast(compiler, flags | LOAD_DATA, src2_tmp_reg, src2, src2w))
FAIL_IF(compiler->error);
else
flags |= SLOW_SRC2;
- src2_r = sugg_src2_r;
+ src2_r = src2_tmp_reg;
}
if ((flags & (SLOW_SRC1 | SLOW_SRC2)) == (SLOW_SRC1 | SLOW_SRC2)) {
SLJIT_ASSERT(src2_r == TMP_REG2);
- if (!can_cache(src1, src1w, src2, src2w) && can_cache(src1, src1w, dst, dstw)) {
+ if ((flags & SLOW_DEST) && !can_cache(src2, src2w, src1, src1w) && can_cache(src2, src2w, dst, dstw)) {
+ FAIL_IF(getput_arg(compiler, flags | LOAD_DATA, TMP_REG1, src1, src1w, src2, src2w));
+ FAIL_IF(getput_arg(compiler, flags | LOAD_DATA | MEM_USE_TMP2, TMP_REG2, src2, src2w, dst, dstw));
+ } else {
FAIL_IF(getput_arg(compiler, flags | LOAD_DATA, TMP_REG2, src2, src2w, src1, src1w));
FAIL_IF(getput_arg(compiler, flags | LOAD_DATA, TMP_REG1, src1, src1w, dst, dstw));
}
- else {
- FAIL_IF(getput_arg(compiler, flags | LOAD_DATA, TMP_REG1, src1, src1w, src2, src2w));
- FAIL_IF(getput_arg(compiler, flags | LOAD_DATA, TMP_REG2, src2, src2w, dst, dstw));
- }
}
else if (flags & SLOW_SRC1)
FAIL_IF(getput_arg(compiler, flags | LOAD_DATA, TMP_REG1, src1, src1w, dst, dstw));
else if (flags & SLOW_SRC2)
- FAIL_IF(getput_arg(compiler, flags | LOAD_DATA, sugg_src2_r, src2, src2w, dst, dstw));
+ FAIL_IF(getput_arg(compiler, flags | LOAD_DATA | ((src1_r == TMP_REG1) ? MEM_USE_TMP2 : 0), src2_tmp_reg, src2, src2w, dst, dstw));
FAIL_IF(emit_single_op(compiler, op, flags, dst_r, src1_r, src2_r));
@@ -1819,42 +1913,42 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile
case SLJIT_MOV32:
#endif
case SLJIT_MOV_P:
- return emit_op(compiler, SLJIT_MOV, WORD_DATA | MOVE_OP, dst, dstw, TMP_REG1, 0, src, srcw);
+ return emit_op(compiler, SLJIT_MOV, WORD_DATA | MOVE_OP, dst, dstw, TMP_ZERO, 0, src, srcw);
#if (defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64)
case SLJIT_MOV_U32:
- return emit_op(compiler, SLJIT_MOV_U32, INT_DATA | MOVE_OP, dst, dstw, TMP_REG1, 0, src, (src == SLJIT_IMM) ? (sljit_u32)srcw : srcw);
+ return emit_op(compiler, SLJIT_MOV_U32, INT_DATA | MOVE_OP, dst, dstw, TMP_ZERO, 0, src, (src == SLJIT_IMM) ? (sljit_u32)srcw : srcw);
case SLJIT_MOV_S32:
/* Logical operators have no W variant, so sign extended input is necessary for them. */
case SLJIT_MOV32:
- return emit_op(compiler, SLJIT_MOV_S32, INT_DATA | SIGNED_DATA | MOVE_OP, dst, dstw, TMP_REG1, 0, src, (src == SLJIT_IMM) ? (sljit_s32)srcw : srcw);
+ return emit_op(compiler, SLJIT_MOV_S32, INT_DATA | SIGNED_DATA | MOVE_OP, dst, dstw, TMP_ZERO, 0, src, (src == SLJIT_IMM) ? (sljit_s32)srcw : srcw);
#endif
case SLJIT_MOV_U8:
- return emit_op(compiler, op, BYTE_DATA | MOVE_OP, dst, dstw, TMP_REG1, 0, src, (src == SLJIT_IMM) ? (sljit_u8)srcw : srcw);
+ return emit_op(compiler, op, BYTE_DATA | MOVE_OP, dst, dstw, TMP_ZERO, 0, src, (src == SLJIT_IMM) ? (sljit_u8)srcw : srcw);
case SLJIT_MOV_S8:
- return emit_op(compiler, op, BYTE_DATA | SIGNED_DATA | MOVE_OP, dst, dstw, TMP_REG1, 0, src, (src == SLJIT_IMM) ? (sljit_s8)srcw : srcw);
+ return emit_op(compiler, op, BYTE_DATA | SIGNED_DATA | MOVE_OP, dst, dstw, TMP_ZERO, 0, src, (src == SLJIT_IMM) ? (sljit_s8)srcw : srcw);
case SLJIT_MOV_U16:
- return emit_op(compiler, op, HALF_DATA | MOVE_OP, dst, dstw, TMP_REG1, 0, src, (src == SLJIT_IMM) ? (sljit_u16)srcw : srcw);
+ return emit_op(compiler, op, HALF_DATA | MOVE_OP, dst, dstw, TMP_ZERO, 0, src, (src == SLJIT_IMM) ? (sljit_u16)srcw : srcw);
case SLJIT_MOV_S16:
- return emit_op(compiler, op, HALF_DATA | SIGNED_DATA | MOVE_OP, dst, dstw, TMP_REG1, 0, src, (src == SLJIT_IMM) ? (sljit_s16)srcw : srcw);
+ return emit_op(compiler, op, HALF_DATA | SIGNED_DATA | MOVE_OP, dst, dstw, TMP_ZERO, 0, src, (src == SLJIT_IMM) ? (sljit_s16)srcw : srcw);
case SLJIT_CLZ:
case SLJIT_CTZ:
case SLJIT_REV:
- return emit_op(compiler, op, flags, dst, dstw, TMP_REG1, 0, src, srcw);
+ return emit_op(compiler, op, flags, dst, dstw, TMP_ZERO, 0, src, srcw);
case SLJIT_REV_U16:
case SLJIT_REV_S16:
- return emit_op(compiler, op, HALF_DATA, dst, dstw, TMP_REG1, 0, src, srcw);
+ return emit_op(compiler, op, HALF_DATA, dst, dstw, TMP_ZERO, 0, src, srcw);
case SLJIT_REV_U32:
case SLJIT_REV_S32:
- return emit_op(compiler, op | SLJIT_32, INT_DATA, dst, dstw, TMP_REG1, 0, src, srcw);
+ return emit_op(compiler, op | SLJIT_32, INT_DATA, dst, dstw, TMP_ZERO, 0, src, srcw);
}
SLJIT_UNREACHABLE();
@@ -1941,6 +2035,30 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2u(struct sljit_compiler *compil
return sljit_emit_op2(compiler, op, 0, 0, src1, src1w, src2, src2w);
}
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2r(struct sljit_compiler *compiler, sljit_s32 op,
+ sljit_s32 dst_reg,
+ sljit_s32 src1, sljit_sw src1w,
+ sljit_s32 src2, sljit_sw src2w)
+{
+#if (defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64)
+ sljit_ins word = (sljit_ins)(op & SLJIT_32) >> 5;
+#endif /* SLJIT_CONFIG_RISCV_64 */
+
+ CHECK_ERROR();
+ CHECK(check_sljit_emit_op2r(compiler, op, dst_reg, src1, src1w, src2, src2w));
+
+ SLJIT_ASSERT(WORD == 0 || WORD == 0x8);
+
+ switch (GET_OPCODE(op)) {
+ case SLJIT_MULADD:
+ SLJIT_SKIP_CHECKS(compiler);
+ FAIL_IF(sljit_emit_op2(compiler, SLJIT_MUL | (op & SLJIT_32), TMP_REG2, 0, src1, src1w, src2, src2w));
+ return push_inst(compiler, ADD | WORD | RD(dst_reg) | RS1(dst_reg) | RS2(TMP_REG2));
+ }
+
+ return SLJIT_SUCCESS;
+}
+
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_shift_into(struct sljit_compiler *compiler, sljit_s32 op,
sljit_s32 dst_reg,
sljit_s32 src1_reg,
@@ -2292,7 +2410,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compil
switch (GET_OPCODE(op)) {
case SLJIT_MOV_F64:
if (src != dst_r) {
- if (dst_r != TMP_FREG1)
+ if (!(dst & SLJIT_MEM))
FAIL_IF(push_inst(compiler, FSGNJ_S | FMT(op) | FRD(dst_r) | FRS1(src) | FRS2(src)));
else
dst_r = src;
@@ -2351,11 +2469,10 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop2(struct sljit_compiler *compil
}
if ((flags & (SLOW_SRC1 | SLOW_SRC2)) == (SLOW_SRC1 | SLOW_SRC2)) {
- if (!can_cache(src1, src1w, src2, src2w) && can_cache(src1, src1w, dst, dstw)) {
+ if ((dst & SLJIT_MEM) && !can_cache(src1, src1w, src2, src2w) && can_cache(src1, src1w, dst, dstw)) {
FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG2, src2, src2w, src1, src1w));
FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, src1, src1w, dst, dstw));
- }
- else {
+ } else {
FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, src1, src1w, src2, src2w));
FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG2, src2, src2w, dst, dstw));
}
@@ -2391,7 +2508,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop2(struct sljit_compiler *compil
return push_inst(compiler, FSGNJ_S | FMT(op) | FRD(dst_r) | FRS1(src1) | FRS2(src2));
}
- if (dst_r == TMP_FREG2)
+ if (dst_r != dst)
FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op), TMP_FREG2, dst, dstw, 0, 0));
return SLJIT_SUCCESS;
@@ -2522,11 +2639,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile
PTR_FAIL_IF(push_inst(compiler, inst));
/* Maximum number of instructions required for generating a constant. */
-#if (defined SLJIT_CONFIG_RISCV_32 && SLJIT_CONFIG_RISCV_32)
- compiler->size += 1;
-#else
- compiler->size += 5;
-#endif
+ compiler->size += JUMP_MAX_SIZE - 1;
return jump;
}
@@ -2553,6 +2666,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_cmp(struct sljit_compiler
struct sljit_jump *jump;
sljit_s32 flags;
sljit_ins inst;
+ sljit_s32 src2_tmp_reg = FAST_IS_REG(src1) ? TMP_REG1 : TMP_REG2;
CHECK_ERROR_PTR();
CHECK_PTR(check_sljit_emit_cmp(compiler, type, src1, src1w, src2, src2w));
@@ -2573,8 +2687,8 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_cmp(struct sljit_compiler
}
if (src2 & SLJIT_MEM) {
- PTR_FAIL_IF(emit_op_mem2(compiler, flags, TMP_REG2, src2, src2w, 0, 0));
- src2 = TMP_REG2;
+ PTR_FAIL_IF(emit_op_mem2(compiler, flags, src2_tmp_reg, src2, src2w, 0, 0));
+ src2 = src2_tmp_reg;
}
if (src1 == SLJIT_IMM) {
@@ -2588,8 +2702,8 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_cmp(struct sljit_compiler
if (src2 == SLJIT_IMM) {
if (src2w != 0) {
- PTR_FAIL_IF(load_immediate(compiler, TMP_REG2, src2w, TMP_REG3));
- src2 = TMP_REG2;
+ PTR_FAIL_IF(load_immediate(compiler, src2_tmp_reg, src2w, TMP_REG3));
+ src2 = src2_tmp_reg;
}
else
src2 = TMP_ZERO;
@@ -2639,11 +2753,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_cmp(struct sljit_compiler
PTR_FAIL_IF(push_inst(compiler, JALR | RD(TMP_ZERO) | RS1(TMP_REG1) | IMM_I(0)));
/* Maximum number of instructions required for generating a constant. */
-#if (defined SLJIT_CONFIG_RISCV_32 && SLJIT_CONFIG_RISCV_32)
- compiler->size += 1;
-#else
- compiler->size += 5;
-#endif
+ compiler->size += JUMP_MAX_SIZE - 1;
return jump;
}
@@ -2675,11 +2785,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_ijump(struct sljit_compiler *compi
FAIL_IF(push_inst(compiler, JALR | RD((type >= SLJIT_FAST_CALL) ? RETURN_ADDR_REG : TMP_ZERO) | RS1(TMP_REG1) | IMM_I(0)));
/* Maximum number of instructions required for generating a constant. */
-#if (defined SLJIT_CONFIG_RISCV_32 && SLJIT_CONFIG_RISCV_32)
- compiler->size += 1;
-#else
- compiler->size += 5;
-#endif
+ compiler->size += JUMP_MAX_SIZE - 1;
return SLJIT_SUCCESS;
}
@@ -2826,13 +2932,13 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_select(struct sljit_compiler *comp
type ^= 0x1;
} else {
if (ADDRESSING_DEPENDS_ON(src1, dst_reg)) {
- FAIL_IF(push_inst(compiler, ADDI | RD(TMP_REG2) | RS1(dst_reg) | IMM_I(0)));
+ FAIL_IF(push_inst(compiler, ADDI | RD(TMP_REG1) | RS1(dst_reg) | IMM_I(0)));
if ((src1 & REG_MASK) == dst_reg)
- src1 = (src1 & ~REG_MASK) | TMP_REG2;
+ src1 = (src1 & ~REG_MASK) | TMP_REG1;
if (OFFS_REG(src1) == dst_reg)
- src1 = (src1 & ~OFFS_REG_MASK) | TO_OFFS_REG(TMP_REG2);
+ src1 = (src1 & ~OFFS_REG_MASK) | TO_OFFS_REG(TMP_REG1);
}
FAIL_IF(push_inst(compiler, ADDI | WORD | RD(dst_reg) | RS1(src2_reg) | IMM_I(0)));
@@ -2856,7 +2962,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_select(struct sljit_compiler *comp
} else
FAIL_IF(push_inst(compiler, ADDI | WORD | RD(dst_reg) | RS1(src1) | IMM_I(0)));
- *ptr = get_jump_instruction(type & ~SLJIT_32) | (sljit_ins)((compiler->size - size) << 9);
+ size = compiler->size - size;
+ *ptr = get_jump_instruction(type & ~SLJIT_32) | (sljit_ins)((size & 0x7) << 9) | (sljit_ins)((size >> 3) << 25);
return SLJIT_SUCCESS;
}
@@ -2895,7 +3002,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fselect(struct sljit_compiler *com
else
FAIL_IF(push_inst(compiler, FSGNJ_S | FMT(type) | FRD(dst_freg) | FRS1(src1) | FRS2(src1)));
- *ptr = get_jump_instruction(type & ~SLJIT_32) | (sljit_ins)((compiler->size - size) << 9);
+ size = compiler->size - size;
+ *ptr = get_jump_instruction(type & ~SLJIT_32) | (sljit_ins)((size & 0x7) << 9) | (sljit_ins)((size >> 3) << 25);
return SLJIT_SUCCESS;
}
@@ -2980,31 +3088,31 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compi
return const_;
}
-SLJIT_API_FUNC_ATTRIBUTE struct sljit_put_label* sljit_emit_put_label(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw dstw)
+SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_mov_addr(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw dstw)
{
- struct sljit_put_label *put_label;
+ struct sljit_jump *jump;
sljit_s32 dst_r;
CHECK_ERROR_PTR();
- CHECK_PTR(check_sljit_emit_put_label(compiler, dst, dstw));
+ CHECK_PTR(check_sljit_emit_mov_addr(compiler, dst, dstw));
ADJUST_LOCAL_OFFSET(dst, dstw);
- put_label = (struct sljit_put_label*)ensure_abuf(compiler, sizeof(struct sljit_put_label));
- PTR_FAIL_IF(!put_label);
- set_put_label(put_label, compiler, 0);
+ jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump));
+ PTR_FAIL_IF(!jump);
+ set_mov_addr(jump, compiler, 0);
dst_r = FAST_IS_REG(dst) ? dst : TMP_REG2;
PTR_FAIL_IF(push_inst(compiler, (sljit_ins)dst_r));
#if (defined SLJIT_CONFIG_RISCV_32 && SLJIT_CONFIG_RISCV_32)
compiler->size += 1;
-#else
+#else /* !SLJIT_CONFIG_RISCV_32 */
compiler->size += 5;
-#endif
+#endif /* SLJIT_CONFIG_RISCV_32 */
if (dst & SLJIT_MEM)
PTR_FAIL_IF(emit_op_mem(compiler, WORD_DATA, TMP_REG2, dst, dstw));
- return put_label;
+ return jump;
}
SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_sw new_constant, sljit_sw executable_offset)
diff --git a/src/3rdparty/pcre2/src/sljit/sljitNativeS390X.c b/src/3rdparty/pcre2/src/sljit/sljitNativeS390X.c
index 67516f9b32..99e846350f 100644
--- a/src/3rdparty/pcre2/src/sljit/sljitNativeS390X.c
+++ b/src/3rdparty/pcre2/src/sljit/sljitNativeS390X.c
@@ -38,12 +38,9 @@ SLJIT_API_FUNC_ATTRIBUTE const char* sljit_get_platform_name(void)
return "s390x" SLJIT_CPUINFO;
}
-/* Instructions. */
+/* Instructions are stored as 64 bit values regardless their size. */
typedef sljit_uw sljit_ins;
-/* Instruction tags (most significant halfword). */
-static const sljit_ins sljit_ins_const = (sljit_ins)1 << 48;
-
#define TMP_REG1 (SLJIT_NUMBER_OF_REGISTERS + 2)
#define TMP_REG2 (SLJIT_NUMBER_OF_REGISTERS + 3)
@@ -140,50 +137,21 @@ static SLJIT_INLINE sljit_gpr gpr(sljit_s32 r)
return reg_map[r];
}
-/* Size of instruction in bytes. Tags must already be cleared. */
-static SLJIT_INLINE sljit_uw sizeof_ins(sljit_ins ins)
-{
- /* keep faulting instructions */
- if (ins == 0)
- return 2;
-
- if ((ins & 0x00000000ffffL) == ins)
- return 2;
- if ((ins & 0x0000ffffffffL) == ins)
- return 4;
- if ((ins & 0xffffffffffffL) == ins)
- return 6;
-
- SLJIT_UNREACHABLE();
- return (sljit_uw)-1;
-}
-
static sljit_s32 push_inst(struct sljit_compiler *compiler, sljit_ins ins)
{
sljit_ins *ibuf = (sljit_ins *)ensure_buf(compiler, sizeof(sljit_ins));
FAIL_IF(!ibuf);
*ibuf = ins;
+
+ SLJIT_ASSERT(ins <= 0xffffffffffffL);
+
compiler->size++;
- return SLJIT_SUCCESS;
-}
+ if (ins & 0xffff00000000L)
+ compiler->size++;
-static sljit_s32 encode_inst(void **ptr, sljit_ins ins)
-{
- sljit_u16 *ibuf = (sljit_u16 *)*ptr;
- sljit_uw size = sizeof_ins(ins);
+ if (ins & 0xffffffff0000L)
+ compiler->size++;
- SLJIT_ASSERT((size & 6) == size);
- switch (size) {
- case 6:
- *ibuf++ = (sljit_u16)(ins >> 32);
- /* fallthrough */
- case 4:
- *ibuf++ = (sljit_u16)(ins >> 16);
- /* fallthrough */
- case 2:
- *ibuf++ = (sljit_u16)(ins);
- }
- *ptr = (void*)ibuf;
return SLJIT_SUCCESS;
}
@@ -1424,97 +1392,60 @@ static sljit_s32 emit_non_commutative(struct sljit_compiler *compiler, const str
return emit_rrf(compiler, ins, dst, src1, src1w, src2, src2w);
}
-SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compiler)
+SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compiler, sljit_s32 options, void *exec_allocator_data)
{
struct sljit_label *label;
struct sljit_jump *jump;
- struct sljit_s390x_const *const_;
- struct sljit_put_label *put_label;
+ struct sljit_const *const_;
sljit_sw executable_offset;
- sljit_uw ins_size = 0; /* instructions */
+ sljit_uw ins_size = compiler->size << 1;
sljit_uw pool_size = 0; /* literal pool */
sljit_uw pad_size;
- sljit_uw i, j = 0;
+ sljit_uw half_count;
+ SLJIT_NEXT_DEFINE_TYPES;
struct sljit_memory_fragment *buf;
- void *code, *code_ptr;
+ sljit_ins *buf_ptr;
+ sljit_ins *buf_end;
+ sljit_u16 *code;
+ sljit_u16 *code_ptr;
sljit_uw *pool, *pool_ptr;
- sljit_sw source, offset; /* TODO(carenas): only need 32 bit */
+ sljit_ins ins;
+ sljit_sw source, offset;
CHECK_ERROR_PTR();
CHECK_PTR(check_sljit_generate_code(compiler));
reverse_buf(compiler);
- /* branch handling */
- label = compiler->labels;
jump = compiler->jumps;
- put_label = compiler->put_labels;
-
- /* TODO(carenas): compiler->executable_size could be calculated
- * before to avoid the following loop (except for
- * pool_size)
- */
- /* calculate the size of the code */
- for (buf = compiler->buf; buf != NULL; buf = buf->next) {
- sljit_uw len = buf->used_size / sizeof(sljit_ins);
- sljit_ins *ibuf = (sljit_ins *)buf->memory;
- for (i = 0; i < len; ++i, ++j) {
- sljit_ins ins = ibuf[i];
-
- /* TODO(carenas): instruction tag vs size/addr == j
- * using instruction tags for const is creative
- * but unlike all other architectures, and is not
- * done consistently for all other objects.
- * This might need reviewing later.
- */
- if (ins & sljit_ins_const) {
- pool_size += sizeof(*pool);
- ins &= ~sljit_ins_const;
- }
- if (label && label->size == j) {
- label->size = ins_size;
- label = label->next;
- }
- if (jump && jump->addr == j) {
- if ((jump->flags & SLJIT_REWRITABLE_JUMP) || (jump->flags & JUMP_ADDR)) {
- /* encoded: */
- /* brasl %r14, <rel_addr> (or brcl <mask>, <rel_addr>) */
- /* replace with: */
- /* lgrl %r1, <pool_addr> */
- /* bras %r14, %r1 (or bcr <mask>, %r1) */
- pool_size += sizeof(*pool);
- ins_size += 2;
- }
- jump = jump->next;
- }
- if (put_label && put_label->addr == j) {
- pool_size += sizeof(*pool);
- put_label = put_label->next;
- }
- ins_size += sizeof_ins(ins);
+ while (jump != NULL) {
+ if (jump->flags & (SLJIT_REWRITABLE_JUMP | JUMP_ADDR | JUMP_MOV_ADDR)) {
+ /* encoded: */
+ /* brasl %r14, <rel_addr> (or brcl <mask>, <rel_addr>) */
+ /* replace with: */
+ /* lgrl %r1, <pool_addr> */
+ /* bras %r14, %r1 (or bcr <mask>, %r1) */
+ pool_size += sizeof(*pool);
+ if (!(jump->flags & JUMP_MOV_ADDR))
+ ins_size += 2;
}
+ jump = jump->next;
}
- /* emit trailing label */
- if (label && label->size == j) {
- label->size = ins_size;
- label = label->next;
+ const_ = compiler->consts;
+ while (const_) {
+ pool_size += sizeof(*pool);
+ const_ = const_->next;
}
- SLJIT_ASSERT(!label);
- SLJIT_ASSERT(!jump);
- SLJIT_ASSERT(!put_label);
-
/* pad code size to 8 bytes so is accessible with half word offsets */
/* the literal pool needs to be doubleword aligned */
pad_size = ((ins_size + 7UL) & ~7UL) - ins_size;
SLJIT_ASSERT(pad_size < 8UL);
/* allocate target buffer */
- code = SLJIT_MALLOC_EXEC(ins_size + pad_size + pool_size,
- compiler->exec_allocator_data);
+ code = (sljit_u16*)allocate_executable_memory(ins_size + pad_size + pool_size, options, exec_allocator_data, &executable_offset);
PTR_FAIL_WITH_EXEC_IF(code);
code_ptr = code;
- executable_offset = SLJIT_EXEC_OFFSET(code);
/* TODO(carenas): pool is optional, and the ABI recommends it to
* be created before the function code, instead of
@@ -1523,130 +1454,166 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil
*/
pool = (sljit_uw *)((sljit_uw)code + ins_size + pad_size);
pool_ptr = pool;
- const_ = (struct sljit_s390x_const *)compiler->consts;
+ buf = compiler->buf;
+ half_count = 0;
- /* update label addresses */
label = compiler->labels;
- while (label) {
- label->addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(
- (sljit_uw)code_ptr + label->size, executable_offset);
- label = label->next;
- }
-
- /* reset jumps */
jump = compiler->jumps;
- put_label = compiler->put_labels;
+ const_ = compiler->consts;
+ SLJIT_NEXT_INIT_TYPES();
+ SLJIT_GET_NEXT_MIN();
- /* emit the code */
- j = 0;
- for (buf = compiler->buf; buf != NULL; buf = buf->next) {
- sljit_uw len = buf->used_size / sizeof(sljit_ins);
- sljit_ins *ibuf = (sljit_ins *)buf->memory;
- for (i = 0; i < len; ++i, ++j) {
- sljit_ins ins = ibuf[i];
- if (ins & sljit_ins_const) {
- /* clear the const tag */
- ins &= ~sljit_ins_const;
+ do {
+ buf_ptr = (sljit_ins*)buf->memory;
+ buf_end = buf_ptr + (buf->used_size >> 3);
+ do {
+ ins = *buf_ptr++;
+
+ if (next_min_addr == half_count) {
+ SLJIT_ASSERT(!label || label->size >= half_count);
+ SLJIT_ASSERT(!jump || jump->addr >= half_count);
+ SLJIT_ASSERT(!const_ || const_->addr >= half_count);
+
+ if (next_min_addr == next_label_size) {
+ label->u.addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);
+ label = label->next;
+ next_label_size = SLJIT_GET_NEXT_SIZE(label);
+ }
- /* update instruction with relative address of constant */
- source = (sljit_sw)code_ptr;
- offset = (sljit_sw)pool_ptr - source;
+ if (next_min_addr == next_jump_addr) {
+ if (SLJIT_UNLIKELY(jump->flags & JUMP_MOV_ADDR)) {
+ source = (sljit_sw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);
+
+ jump->addr = (sljit_uw)pool_ptr;
+
+ /* store target into pool */
+ offset = (sljit_sw)SLJIT_ADD_EXEC_OFFSET(pool_ptr, executable_offset) - source;
+ pool_ptr++;
+
+ SLJIT_ASSERT(!(offset & 1));
+ offset >>= 1;
+ SLJIT_ASSERT(is_s32(offset));
+ ins |= (sljit_ins)offset & 0xffffffff;
+ } else if (jump->flags & (SLJIT_REWRITABLE_JUMP | JUMP_ADDR)) {
+ sljit_ins arg;
+
+ jump->addr = (sljit_uw)pool_ptr;
+
+ /* load address into tmp1 */
+ source = (sljit_sw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);
+ offset = (sljit_sw)SLJIT_ADD_EXEC_OFFSET(pool_ptr, executable_offset) - source;
+
+ SLJIT_ASSERT(!(offset & 1));
+ offset >>= 1;
+ SLJIT_ASSERT(is_s32(offset));
+
+ code_ptr[0] = (sljit_u16)(0xc408 | R4A(tmp1) /* lgrl */);
+ code_ptr[1] = (sljit_u16)(offset >> 16);
+ code_ptr[2] = (sljit_u16)offset;
+ code_ptr += 3;
+ pool_ptr++;
+
+ /* branch to tmp1 */
+ arg = (ins >> 36) & 0xf;
+ if (((ins >> 32) & 0xf) == 4) {
+ /* brcl -> bcr */
+ ins = bcr(arg, tmp1);
+ } else {
+ SLJIT_ASSERT(((ins >> 32) & 0xf) == 5);
+ /* brasl -> basr */
+ ins = basr(arg, tmp1);
+ }
+
+ /* Adjust half_count. */
+ half_count += 2;
+ } else
+ jump->addr = (sljit_uw)code_ptr;
+
+ jump = jump->next;
+ next_jump_addr = SLJIT_GET_NEXT_ADDRESS(jump);
+ } else if (next_min_addr == next_const_addr) {
+ /* update instruction with relative address of constant */
+ source = (sljit_sw)code_ptr;
+ offset = (sljit_sw)pool_ptr - source;
+
+ SLJIT_ASSERT(!(offset & 0x1));
+ offset >>= 1; /* halfword (not byte) offset */
+ SLJIT_ASSERT(is_s32(offset));
- SLJIT_ASSERT(!(offset & 1));
- offset >>= 1; /* halfword (not byte) offset */
- SLJIT_ASSERT(is_s32(offset));
+ ins |= (sljit_ins)offset & 0xffffffff;
- ins |= (sljit_ins)offset & 0xffffffff;
+ /* update address */
+ const_->addr = (sljit_uw)pool_ptr;
- /* update address */
- const_->const_.addr = (sljit_uw)pool_ptr;
+ /* store initial value into pool and update pool address */
+ *(pool_ptr++) = (sljit_uw)(((struct sljit_s390x_const*)const_)->init_value);
- /* store initial value into pool and update pool address */
- *(pool_ptr++) = (sljit_uw)const_->init_value;
+ /* move to next constant */
+ const_ = const_->next;
+ next_const_addr = SLJIT_GET_NEXT_ADDRESS(const_);
+ }
- /* move to next constant */
- const_ = (struct sljit_s390x_const *)const_->const_.next;
+ SLJIT_GET_NEXT_MIN();
}
- if (jump && jump->addr == j) {
- sljit_sw target = (sljit_sw)((jump->flags & JUMP_LABEL) ? jump->u.label->addr : jump->u.target);
- if ((jump->flags & SLJIT_REWRITABLE_JUMP) || (jump->flags & JUMP_ADDR)) {
- sljit_ins op, arg;
- jump->addr = (sljit_uw)pool_ptr;
+ if (ins & 0xffff00000000L) {
+ *code_ptr++ = (sljit_u16)(ins >> 32);
+ half_count++;
+ }
- /* load address into tmp1 */
- source = (sljit_sw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);
- offset = (sljit_sw)SLJIT_ADD_EXEC_OFFSET(pool_ptr, executable_offset) - source;
+ if (ins & 0xffffffff0000L) {
+ *code_ptr++ = (sljit_u16)(ins >> 16);
+ half_count++;
+ }
- SLJIT_ASSERT(!(offset & 1));
- offset >>= 1;
- SLJIT_ASSERT(is_s32(offset));
+ *code_ptr++ = (sljit_u16)ins;
+ half_count++;
+ } while (buf_ptr < buf_end);
- encode_inst(&code_ptr, lgrl(tmp1, offset & 0xffffffff));
-
- /* store jump target into pool and update pool address */
- *(pool_ptr++) = (sljit_uw)target;
-
- /* branch to tmp1 */
- op = (ins >> 32) & 0xf;
- arg = (ins >> 36) & 0xf;
- switch (op) {
- case 4: /* brcl -> bcr */
- ins = bcr(arg, tmp1);
- break;
- case 5: /* brasl -> basr */
- ins = basr(arg, tmp1);
- break;
- default:
- abort();
- }
- }
- else {
- jump->addr = (sljit_uw)code_ptr + 2;
- source = (sljit_sw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);
- offset = target - source;
+ buf = buf->next;
+ } while (buf);
- /* offset must be halfword aligned */
- SLJIT_ASSERT(!(offset & 1));
- offset >>= 1;
- SLJIT_ASSERT(is_s32(offset)); /* TODO(mundaym): handle arbitrary offsets */
+ if (next_label_size == half_count) {
+ label->u.addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);
+ label = label->next;
+ }
- /* patch jump target */
- ins |= (sljit_ins)offset & 0xffffffff;
- }
- jump = jump->next;
- }
- if (put_label && put_label->addr == j) {
- source = (sljit_sw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);
+ SLJIT_ASSERT(!label);
+ SLJIT_ASSERT(!jump);
+ SLJIT_ASSERT(!const_);
+ SLJIT_ASSERT(code + (ins_size >> 1) == code_ptr);
+ SLJIT_ASSERT((sljit_u8 *)pool + pool_size == (sljit_u8 *)pool_ptr);
- SLJIT_ASSERT(put_label->label);
- put_label->addr = (sljit_uw)code_ptr;
+ jump = compiler->jumps;
+ while (jump != NULL) {
+ offset = (sljit_sw)((jump->flags & JUMP_ADDR) ? jump->u.target : jump->u.label->u.addr);
- /* store target into pool */
- *pool_ptr = put_label->label->addr;
- offset = (sljit_sw)SLJIT_ADD_EXEC_OFFSET(pool_ptr, executable_offset) - source;
- pool_ptr++;
+ if (jump->flags & (SLJIT_REWRITABLE_JUMP | JUMP_ADDR | JUMP_MOV_ADDR)) {
+ /* Store jump target into pool. */
+ *(sljit_uw*)(jump->addr) = (sljit_uw)offset;
+ } else {
+ code_ptr = (sljit_u16*)jump->addr;
+ offset -= (sljit_sw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);
- SLJIT_ASSERT(!(offset & 1));
- offset >>= 1;
- SLJIT_ASSERT(is_s32(offset));
- ins |= (sljit_ins)offset & 0xffffffff;
+ /* offset must be halfword aligned */
+ SLJIT_ASSERT(!(offset & 1));
+ offset >>= 1;
+ SLJIT_ASSERT(is_s32(offset)); /* TODO(mundaym): handle arbitrary offsets */
- put_label = put_label->next;
- }
- encode_inst(&code_ptr, ins);
+ code_ptr[1] = (sljit_u16)(offset >> 16);
+ code_ptr[2] = (sljit_u16)offset;
}
+ jump = jump->next;
}
- SLJIT_ASSERT((sljit_u8 *)code + ins_size == code_ptr);
- SLJIT_ASSERT((sljit_u8 *)pool + pool_size == (sljit_u8 *)pool_ptr);
compiler->error = SLJIT_ERR_COMPILED;
compiler->executable_offset = executable_offset;
compiler->executable_size = ins_size;
if (pool_size)
compiler->executable_size += (pad_size + pool_size);
- code = SLJIT_ADD_EXEC_OFFSET(code, executable_offset);
- code_ptr = SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);
+
+ code = (sljit_u16 *)SLJIT_ADD_EXEC_OFFSET(code, executable_offset);
+ code_ptr = (sljit_u16 *)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);
SLJIT_CACHE_FLUSH(code, code_ptr);
SLJIT_UPDATE_WX_FLAGS(code, code_ptr, 1);
return code;
@@ -2497,7 +2464,7 @@ static sljit_s32 sljit_emit_sub(struct sljit_compiler *compiler, sljit_s32 op,
const struct ins_forms *forms;
sljit_ins ins;
- if (dst == (sljit_s32)tmp0 && flag_type <= SLJIT_SIG_LESS_EQUAL) {
+ if (dst == TMP_REG2 && flag_type <= SLJIT_SIG_LESS_EQUAL) {
int compare_signed = flag_type >= SLJIT_SIG_LESS;
compiler->status_flags_state |= SLJIT_CURRENT_FLAGS_COMPARE;
@@ -2597,7 +2564,7 @@ done:
- the first operand is less if the sign bit of the result is not set
The -result operation sets the corrent sign, because the result cannot be zero.
The overflow is considered greater, since the result must be equal to INT_MIN so its sign bit is set. */
- FAIL_IF(push_inst(compiler, brc(0xe, 2 + 2)));
+ FAIL_IF(push_inst(compiler, brc(0xe, (op & SLJIT_32) ? (2 + 1) : (2 + 2))));
FAIL_IF(push_inst(compiler, (op & SLJIT_32) ? lcr(tmp1, dst_r) : lcgr(tmp1, dst_r)));
}
else if (op & SLJIT_SET_Z)
@@ -2759,7 +2726,7 @@ static sljit_s32 sljit_emit_bitwise(struct sljit_compiler *compiler, sljit_s32 o
sljit_s32 type = GET_OPCODE(op);
const struct ins_forms *forms;
- if (src2 == SLJIT_IMM && (!(op & SLJIT_SET_Z) || (type == SLJIT_AND && dst == (sljit_s32)tmp0))) {
+ if (src2 == SLJIT_IMM && (!(op & SLJIT_SET_Z) || (type == SLJIT_AND && dst == TMP_REG2))) {
sljit_s32 count16 = 0;
sljit_uw imm = (sljit_uw)src2w;
@@ -2775,13 +2742,13 @@ static sljit_s32 sljit_emit_bitwise(struct sljit_compiler *compiler, sljit_s32 o
if ((imm & 0xffff000000000000ull) != 0)
count16++;
- if (type == SLJIT_AND && dst == (sljit_s32)tmp0 && count16 == 1) {
- sljit_gpr src_r = tmp0;
+ if (type == SLJIT_AND && dst == TMP_REG2 && count16 == 1) {
+ sljit_gpr src_r = tmp1;
if (FAST_IS_REG(src1))
src_r = gpr(src1 & REG_MASK);
else
- FAIL_IF(emit_move(compiler, tmp0, src1, src1w));
+ FAIL_IF(emit_move(compiler, tmp1, src1, src1w));
if ((imm & 0x000000000000ffffull) != 0 || imm == 0)
return push_inst(compiler, 0xa7010000 /* tmll */ | R20A(src_r) | imm);
@@ -3002,11 +2969,31 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2u(struct sljit_compiler *compil
sljit_s32 src1, sljit_sw src1w,
sljit_s32 src2, sljit_sw src2w)
{
+ sljit_s32 dst_reg = (GET_OPCODE(op) == SLJIT_SUB || GET_OPCODE(op) == SLJIT_AND) ? TMP_REG2 : TMP_REG1;
+
CHECK_ERROR();
CHECK(check_sljit_emit_op2(compiler, op, 1, 0, 0, src1, src1w, src2, src2w));
SLJIT_SKIP_CHECKS(compiler);
- return sljit_emit_op2(compiler, op, (sljit_s32)tmp0, 0, src1, src1w, src2, src2w);
+ return sljit_emit_op2(compiler, op, dst_reg, 0, src1, src1w, src2, src2w);
+}
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2r(struct sljit_compiler *compiler, sljit_s32 op,
+ sljit_s32 dst_reg,
+ sljit_s32 src1, sljit_sw src1w,
+ sljit_s32 src2, sljit_sw src2w)
+{
+ CHECK_ERROR();
+ CHECK(check_sljit_emit_op2r(compiler, op, dst_reg, src1, src1w, src2, src2w));
+
+ switch (GET_OPCODE(op)) {
+ case SLJIT_MULADD:
+ SLJIT_SKIP_CHECKS(compiler);
+ FAIL_IF(sljit_emit_op2(compiler, SLJIT_MUL | (op & SLJIT_32), 0 /* tmp0 */, 0, src1, src1w, src2, src2w));
+ return push_inst(compiler, ((op & SLJIT_32) ? 0x1a00 /* ar */ : 0xb9080000 /* agr */) | R4A(gpr(dst_reg)) | R0A(tmp0));
+ }
+
+ return SLJIT_SUCCESS;
}
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_shift_into(struct sljit_compiler *compiler, sljit_s32 op,
@@ -3415,12 +3402,10 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compil
FAIL_IF(push_inst(compiler, ins | F4(dst_r) | F0(src)));
}
- if (!(dst & SLJIT_MEM))
- return SLJIT_SUCCESS;
-
- SLJIT_ASSERT(dst_r == TMP_FREG1);
+ if (dst & SLJIT_MEM)
+ return float_mem(compiler, FLOAT_STORE | (op & SLJIT_32), TMP_FREG1, dst, dstw);
- return float_mem(compiler, FLOAT_STORE | (op & SLJIT_32), TMP_FREG1, dst, dstw);
+ return SLJIT_SUCCESS;
}
#define FLOAT_MOV(op, dst_r, src_r) \
@@ -3491,7 +3476,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop2(struct sljit_compiler *compil
if (dst & SLJIT_MEM)
return float_mem(compiler, FLOAT_STORE | (op & SLJIT_32), TMP_FREG1, dst, dstw);
- SLJIT_ASSERT(dst_r != TMP_FREG1);
return SLJIT_SUCCESS;
}
@@ -3738,8 +3722,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co
FAIL_IF(push_inst(compiler,
WHEN2(op & SLJIT_32, lochi, locghi)));
} else {
- /* TODO(mundaym): no load/store-on-condition 2 facility (ipm? branch-and-set?) */
- abort();
+ FAIL_IF(push_load_imm_inst(compiler, loc_r, 1));
+ FAIL_IF(push_inst(compiler, brc(mask, 2 + 2)));
+ FAIL_IF(push_load_imm_inst(compiler, loc_r, 0));
}
#undef LEVAL
@@ -3837,8 +3822,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_select(struct sljit_compiler *comp
return push_inst(compiler, ins | R36A(dst_r) | (mask << 32) | (sljit_ins)(src1w & 0xffff) << 16);
}
- FAIL_IF(push_load_imm_inst(compiler, tmp0, src1w));
- src_r = tmp0;
+ FAIL_IF(push_load_imm_inst(compiler, tmp1, src1w));
+ src_r = tmp1;
} else
src_r = gpr(src1);
@@ -4474,9 +4459,9 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compi
dst_r = FAST_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0;
if (have_genext())
- PTR_FAIL_IF(push_inst(compiler, sljit_ins_const | lgrl(dst_r, 0)));
+ PTR_FAIL_IF(push_inst(compiler, lgrl(dst_r, 0)));
else {
- PTR_FAIL_IF(push_inst(compiler, sljit_ins_const | larl(tmp1, 0)));
+ PTR_FAIL_IF(push_inst(compiler, larl(tmp1, 0)));
PTR_FAIL_IF(push_inst(compiler, lg(dst_r, 0, r0, tmp1)));
}
@@ -4503,20 +4488,18 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_sw new_consta
sljit_set_jump_addr(addr, (sljit_uw)new_constant, executable_offset);
}
-SLJIT_API_FUNC_ATTRIBUTE struct sljit_put_label *sljit_emit_put_label(
- struct sljit_compiler *compiler,
- sljit_s32 dst, sljit_sw dstw)
+SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_mov_addr(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw dstw)
{
- struct sljit_put_label *put_label;
+ struct sljit_jump *jump;
sljit_gpr dst_r;
CHECK_ERROR_PTR();
- CHECK_PTR(check_sljit_emit_put_label(compiler, dst, dstw));
+ CHECK_PTR(check_sljit_emit_mov_addr(compiler, dst, dstw));
ADJUST_LOCAL_OFFSET(dst, dstw);
- put_label = (struct sljit_put_label*)ensure_abuf(compiler, sizeof(struct sljit_put_label));
- PTR_FAIL_IF(!put_label);
- set_put_label(put_label, compiler, 0);
+ jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump));
+ PTR_FAIL_IF(!jump);
+ set_mov_addr(jump, compiler, 0);
dst_r = FAST_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0;
@@ -4530,7 +4513,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_put_label *sljit_emit_put_label(
if (dst & SLJIT_MEM)
PTR_FAIL_IF(store_word(compiler, dst_r, dst, dstw, 0));
- return put_label;
+ return jump;
}
/* TODO(carenas): EVAL probably should move up or be refactored */
diff --git a/src/3rdparty/pcre2/src/sljit/sljitNativeSPARC_32.c b/src/3rdparty/pcre2/src/sljit/sljitNativeSPARC_32.c
deleted file mode 100644
index 218992b355..0000000000
--- a/src/3rdparty/pcre2/src/sljit/sljitNativeSPARC_32.c
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
- * Stack-less Just-In-Time compiler
- *
- * Copyright Zoltan Herczeg (hzmester@freemail.hu). All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification, are
- * permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice, this list of
- * conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright notice, this list
- * of conditions and the following disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDER(S) OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
- * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-static sljit_s32 load_immediate(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw imm)
-{
- if (imm <= SIMM_MAX && imm >= SIMM_MIN)
- return push_inst(compiler, OR | D(dst) | S1(0) | IMM(imm), DR(dst));
-
- FAIL_IF(push_inst(compiler, SETHI | D(dst) | ((imm >> 10) & 0x3fffff), DR(dst)));
- return (imm & 0x3ff) ? push_inst(compiler, OR | D(dst) | S1(dst) | IMM_ARG | (imm & 0x3ff), DR(dst)) : SLJIT_SUCCESS;
-}
-
-#define ARG2(flags, src2) ((flags & SRC2_IMM) ? IMM(src2) : S2(src2))
-
-static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_u32 flags,
- sljit_s32 dst, sljit_s32 src1, sljit_sw src2)
-{
- SLJIT_COMPILE_ASSERT(ICC_IS_SET == SET_FLAGS, icc_is_set_and_set_flags_must_be_the_same);
-
- switch (op) {
- case SLJIT_MOV:
- SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM));
- if (dst != src2)
- return push_inst(compiler, OR | D(dst) | S1(0) | S2(src2), DR(dst));
- return SLJIT_SUCCESS;
-
- case SLJIT_MOV_U8:
- case SLJIT_MOV_S8:
- SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM));
- if ((flags & (REG_DEST | REG2_SOURCE)) == (REG_DEST | REG2_SOURCE)) {
- if (op == SLJIT_MOV_U8)
- return push_inst(compiler, AND | D(dst) | S1(src2) | IMM(0xff), DR(dst));
- FAIL_IF(push_inst(compiler, SLL | D(dst) | S1(src2) | IMM(24), DR(dst)));
- return push_inst(compiler, SRA | D(dst) | S1(dst) | IMM(24), DR(dst));
- }
- SLJIT_ASSERT(dst == src2);
- return SLJIT_SUCCESS;
-
- case SLJIT_MOV_U16:
- case SLJIT_MOV_S16:
- SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM));
- if ((flags & (REG_DEST | REG2_SOURCE)) == (REG_DEST | REG2_SOURCE)) {
- FAIL_IF(push_inst(compiler, SLL | D(dst) | S1(src2) | IMM(16), DR(dst)));
- return push_inst(compiler, (op == SLJIT_MOV_S16 ? SRA : SRL) | D(dst) | S1(dst) | IMM(16), DR(dst));
- }
- SLJIT_ASSERT(dst == src2);
- return SLJIT_SUCCESS;
-
- case SLJIT_NOT:
- SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM));
- return push_inst(compiler, XNOR | (flags & SET_FLAGS) | D(dst) | S1(0) | S2(src2), DRF(dst, flags));
-
- case SLJIT_CLZ:
- SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM));
- FAIL_IF(push_inst(compiler, SUB | SET_FLAGS | D(0) | S1(src2) | S2(0), SET_FLAGS));
- FAIL_IF(push_inst(compiler, OR | D(TMP_REG1) | S1(0) | S2(src2), DR(TMP_REG1)));
- FAIL_IF(push_inst(compiler, BICC | DA(0x1) | (7 & DISP_MASK), UNMOVABLE_INS));
- FAIL_IF(push_inst(compiler, OR | D(dst) | S1(0) | IMM(32), UNMOVABLE_INS));
- FAIL_IF(push_inst(compiler, OR | D(dst) | S1(0) | IMM(-1), DR(dst)));
-
- /* Loop. */
- FAIL_IF(push_inst(compiler, SUB | SET_FLAGS | D(0) | S1(TMP_REG1) | S2(0), SET_FLAGS));
- FAIL_IF(push_inst(compiler, SLL | D(TMP_REG1) | S1(TMP_REG1) | IMM(1), DR(TMP_REG1)));
- FAIL_IF(push_inst(compiler, BICC | DA(0xe) | ((sljit_ins)-2 & DISP_MASK), UNMOVABLE_INS));
- return push_inst(compiler, ADD | D(dst) | S1(dst) | IMM(1), UNMOVABLE_INS);
-
- case SLJIT_ADD:
- compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD;
- return push_inst(compiler, ADD | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DRF(dst, flags));
-
- case SLJIT_ADDC:
- compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD;
- return push_inst(compiler, ADDC | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DRF(dst, flags));
-
- case SLJIT_SUB:
- compiler->status_flags_state = SLJIT_CURRENT_FLAGS_SUB;
- return push_inst(compiler, SUB | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DRF(dst, flags));
-
- case SLJIT_SUBC:
- compiler->status_flags_state = SLJIT_CURRENT_FLAGS_SUB;
- return push_inst(compiler, SUBC | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DRF(dst, flags));
-
- case SLJIT_MUL:
- compiler->status_flags_state = 0;
- FAIL_IF(push_inst(compiler, SMUL | D(dst) | S1(src1) | ARG2(flags, src2), DR(dst)));
- if (!(flags & SET_FLAGS))
- return SLJIT_SUCCESS;
- FAIL_IF(push_inst(compiler, SRA | D(TMP_REG1) | S1(dst) | IMM(31), DR(TMP_REG1)));
- FAIL_IF(push_inst(compiler, RDY | D(TMP_LINK), DR(TMP_LINK)));
- return push_inst(compiler, SUB | SET_FLAGS | D(0) | S1(TMP_REG1) | S2(TMP_LINK), MOVABLE_INS | SET_FLAGS);
-
- case SLJIT_AND:
- return push_inst(compiler, AND | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DRF(dst, flags));
-
- case SLJIT_OR:
- return push_inst(compiler, OR | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DRF(dst, flags));
-
- case SLJIT_XOR:
- return push_inst(compiler, XOR | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DRF(dst, flags));
-
- case SLJIT_SHL:
- FAIL_IF(push_inst(compiler, SLL | D(dst) | S1(src1) | ARG2(flags, src2), DR(dst)));
- return !(flags & SET_FLAGS) ? SLJIT_SUCCESS : push_inst(compiler, SUB | SET_FLAGS | D(0) | S1(dst) | S2(0), SET_FLAGS);
-
- case SLJIT_LSHR:
- FAIL_IF(push_inst(compiler, SRL | D(dst) | S1(src1) | ARG2(flags, src2), DR(dst)));
- return !(flags & SET_FLAGS) ? SLJIT_SUCCESS : push_inst(compiler, SUB | SET_FLAGS | D(0) | S1(dst) | S2(0), SET_FLAGS);
-
- case SLJIT_ASHR:
- FAIL_IF(push_inst(compiler, SRA | D(dst) | S1(src1) | ARG2(flags, src2), DR(dst)));
- return !(flags & SET_FLAGS) ? SLJIT_SUCCESS : push_inst(compiler, SUB | SET_FLAGS | D(0) | S1(dst) | S2(0), SET_FLAGS);
- }
-
- SLJIT_UNREACHABLE();
- return SLJIT_SUCCESS;
-}
-
-static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_types, sljit_s32 *src)
-{
- sljit_s32 reg_index = 8;
- sljit_s32 word_reg_index = 8;
- sljit_s32 float_arg_index = 1;
- sljit_s32 double_arg_count = 0;
- sljit_u32 float_offset = (16 + 6) * sizeof(sljit_sw);
- sljit_s32 types = 0;
- sljit_s32 reg = 0;
- sljit_s32 move_to_tmp2 = 0;
-
- if (src)
- reg = reg_map[*src & REG_MASK];
-
- arg_types >>= SLJIT_ARG_SHIFT;
-
- while (arg_types) {
- types = (types << SLJIT_ARG_SHIFT) | (arg_types & SLJIT_ARG_MASK);
-
- switch (arg_types & SLJIT_ARG_MASK) {
- case SLJIT_ARG_TYPE_F64:
- float_arg_index++;
- double_arg_count++;
- if (reg_index == reg || reg_index + 1 == reg)
- move_to_tmp2 = 1;
- reg_index += 2;
- break;
- case SLJIT_ARG_TYPE_F32:
- float_arg_index++;
- if (reg_index == reg)
- move_to_tmp2 = 1;
- reg_index++;
- break;
- default:
- if (reg_index != word_reg_index && reg_index == reg)
- move_to_tmp2 = 1;
- reg_index++;
- word_reg_index++;
- break;
- }
-
- arg_types >>= SLJIT_ARG_SHIFT;
- }
-
- if (move_to_tmp2) {
- if (reg < 14)
- FAIL_IF(push_inst(compiler, OR | D(TMP_REG1) | S1(0) | S2A(reg), DR(TMP_REG1)));
- *src = TMP_REG1;
- }
-
- arg_types = types;
-
- while (arg_types) {
- switch (arg_types & SLJIT_ARG_MASK) {
- case SLJIT_ARG_TYPE_F64:
- float_arg_index--;
- if (float_arg_index == 4 && double_arg_count == 4) {
- /* The address is not doubleword aligned, so two instructions are required to store the double. */
- FAIL_IF(push_inst(compiler, STF | FD(float_arg_index) | S1(SLJIT_SP) | IMM((16 + 7) * sizeof(sljit_sw)), MOVABLE_INS));
- FAIL_IF(push_inst(compiler, STF | FD(float_arg_index) | (1 << 25) | S1(SLJIT_SP) | IMM((16 + 8) * sizeof(sljit_sw)), MOVABLE_INS));
- }
- else
- FAIL_IF(push_inst(compiler, STDF | FD(float_arg_index) | S1(SLJIT_SP) | IMM(float_offset), MOVABLE_INS));
- float_offset -= sizeof(sljit_f64);
- break;
- case SLJIT_ARG_TYPE_F32:
- float_arg_index--;
- FAIL_IF(push_inst(compiler, STF | FD(float_arg_index) | S1(SLJIT_SP) | IMM(float_offset), MOVABLE_INS));
- float_offset -= sizeof(sljit_f64);
- break;
- default:
- break;
- }
-
- arg_types >>= SLJIT_ARG_SHIFT;
- }
-
- float_offset = (16 + 6) * sizeof(sljit_sw);
-
- while (types) {
- switch (types & SLJIT_ARG_MASK) {
- case SLJIT_ARG_TYPE_F64:
- reg_index -= 2;
- if (reg_index < 14) {
- if ((reg_index & 0x1) != 0) {
- FAIL_IF(push_inst(compiler, LDUW | DA(reg_index) | S1(SLJIT_SP) | IMM(float_offset), reg_index));
- if (reg_index < 8 + 6 - 1)
- FAIL_IF(push_inst(compiler, LDUW | DA(reg_index + 1) | S1(SLJIT_SP) | IMM(float_offset + sizeof(sljit_sw)), reg_index + 1));
- }
- else
- FAIL_IF(push_inst(compiler, LDD | DA(reg_index) | S1(SLJIT_SP) | IMM(float_offset), reg_index));
- }
- float_offset -= sizeof(sljit_f64);
- break;
- case SLJIT_ARG_TYPE_F32:
- reg_index--;
- if (reg_index < 8 + 6)
- FAIL_IF(push_inst(compiler, LDUW | DA(reg_index) | S1(SLJIT_SP) | IMM(float_offset), reg_index));
- float_offset -= sizeof(sljit_f64);
- break;
- default:
- reg_index--;
- word_reg_index--;
-
- if (reg_index != word_reg_index) {
- if (reg_index < 14)
- FAIL_IF(push_inst(compiler, OR | DA(reg_index) | S1(0) | S2A(word_reg_index), reg_index));
- else
- FAIL_IF(push_inst(compiler, STW | DA(word_reg_index) | S1(SLJIT_SP) | IMM(92), word_reg_index));
- }
- break;
- }
-
- types >>= SLJIT_ARG_SHIFT;
- }
-
- return SLJIT_SUCCESS;
-}
-
-static SLJIT_INLINE sljit_s32 emit_const(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw init_value)
-{
- FAIL_IF(push_inst(compiler, SETHI | D(dst) | ((init_value >> 10) & 0x3fffff), DR(dst)));
- return push_inst(compiler, OR | D(dst) | S1(dst) | IMM_ARG | (init_value & 0x3ff), DR(dst));
-}
-
-SLJIT_API_FUNC_ATTRIBUTE void sljit_set_jump_addr(sljit_uw addr, sljit_uw new_target, sljit_sw executable_offset)
-{
- sljit_ins *inst = (sljit_ins *)addr;
- SLJIT_UNUSED_ARG(executable_offset);
-
- SLJIT_UPDATE_WX_FLAGS(inst, inst + 2, 0);
- SLJIT_ASSERT(((inst[0] & 0xc1c00000) == 0x01000000) && ((inst[1] & 0xc1f82000) == 0x80102000));
- inst[0] = (inst[0] & 0xffc00000) | ((new_target >> 10) & 0x3fffff);
- inst[1] = (inst[1] & 0xfffffc00) | (new_target & 0x3ff);
- SLJIT_UPDATE_WX_FLAGS(inst, inst + 2, 1);
- inst = (sljit_ins *)SLJIT_ADD_EXEC_OFFSET(inst, executable_offset);
- SLJIT_CACHE_FLUSH(inst, inst + 2);
-}
-
-SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_sw new_constant, sljit_sw executable_offset)
-{
- sljit_set_jump_addr(addr, (sljit_uw)new_constant, executable_offset);
-}
diff --git a/src/3rdparty/pcre2/src/sljit/sljitNativeSPARC_common.c b/src/3rdparty/pcre2/src/sljit/sljitNativeSPARC_common.c
deleted file mode 100644
index c8d19e16c6..0000000000
--- a/src/3rdparty/pcre2/src/sljit/sljitNativeSPARC_common.c
+++ /dev/null
@@ -1,1673 +0,0 @@
-/*
- * Stack-less Just-In-Time compiler
- *
- * Copyright Zoltan Herczeg (hzmester@freemail.hu). All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification, are
- * permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice, this list of
- * conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright notice, this list
- * of conditions and the following disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDER(S) OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
- * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-SLJIT_API_FUNC_ATTRIBUTE const char* sljit_get_platform_name(void)
-{
- return "SPARC" SLJIT_CPUINFO;
-}
-
-/* Length of an instruction word
- Both for sparc-32 and sparc-64 */
-typedef sljit_u32 sljit_ins;
-
-#if (defined SLJIT_CACHE_FLUSH_OWN_IMPL && SLJIT_CACHE_FLUSH_OWN_IMPL)
-
-static void sparc_cache_flush(sljit_ins *from, sljit_ins *to)
-{
-#if defined(__SUNPRO_C) && __SUNPRO_C < 0x590
- __asm (
- /* if (from == to) return */
- "cmp %i0, %i1\n"
- "be .leave\n"
- "nop\n"
-
- /* loop until from >= to */
- ".mainloop:\n"
- "flush %i0\n"
- "add %i0, 8, %i0\n"
- "cmp %i0, %i1\n"
- "bcs .mainloop\n"
- "nop\n"
-
- /* The comparison was done above. */
- "bne .leave\n"
- /* nop is not necessary here, since the
- sub operation has no side effect. */
- "sub %i0, 4, %i0\n"
- "flush %i0\n"
- ".leave:"
- );
-#else
- if (SLJIT_UNLIKELY(from == to))
- return;
-
- do {
- __asm__ volatile (
- "flush %0\n"
- : : "r"(from)
- );
- /* Operates at least on doubleword. */
- from += 2;
- } while (from < to);
-
- if (from == to) {
- /* Flush the last word. */
- from --;
- __asm__ volatile (
- "flush %0\n"
- : : "r"(from)
- );
- }
-#endif
-}
-
-#endif /* (defined SLJIT_CACHE_FLUSH_OWN_IMPL && SLJIT_CACHE_FLUSH_OWN_IMPL) */
-
-/* TMP_REG2 is not used by getput_arg */
-#define TMP_REG1 (SLJIT_NUMBER_OF_REGISTERS + 2)
-#define TMP_REG2 (SLJIT_NUMBER_OF_REGISTERS + 3)
-#define TMP_REG3 (SLJIT_NUMBER_OF_REGISTERS + 4)
-/* This register is modified by calls, which affects the instruction
- in the delay slot if it is used as a source register. */
-#define TMP_LINK (SLJIT_NUMBER_OF_REGISTERS + 5)
-
-#define TMP_FREG1 (SLJIT_NUMBER_OF_FLOAT_REGISTERS + 1)
-#define TMP_FREG2 (SLJIT_NUMBER_OF_FLOAT_REGISTERS + 2)
-
-static const sljit_u8 reg_map[SLJIT_NUMBER_OF_REGISTERS + 6] = {
- 0, 8, 9, 10, 11, 23, 22, 21, 20, 19, 18, 17, 16, 29, 28, 27, 26, 25, 24, 14, 1, 12, 13, 15
-};
-
-static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = {
- 0, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30
-};
-
-/* --------------------------------------------------------------------- */
-/* Instrucion forms */
-/* --------------------------------------------------------------------- */
-
-#define D(d) ((sljit_ins)reg_map[d] << 25)
-#define FD(d) ((sljit_ins)freg_map[d] << 25)
-#define FDN(d) (((sljit_ins)freg_map[d] | 0x1) << 25)
-#define DA(d) ((sljit_ins)(d) << 25)
-#define S1(s1) ((sljit_ins)reg_map[s1] << 14)
-#define FS1(s1) ((sljit_ins)freg_map[s1] << 14)
-#define S1A(s1) ((sljit_ins)(s1) << 14)
-#define S2(s2) ((sljit_ins)reg_map[s2])
-#define FS2(s2) ((sljit_ins)freg_map[s2])
-#define FS2N(s2) ((sljit_ins)freg_map[s2] | 0x1)
-#define S2A(s2) ((sljit_ins)(s2))
-#define IMM_ARG 0x2000
-#define DOP(op) ((sljit_ins)(op) << 5)
-#define IMM(imm) (((sljit_ins)(imm) & 0x1fff) | IMM_ARG)
-
-#define DR(dr) (reg_map[dr])
-#define DRF(dr, flags) ((sljit_s32)(reg_map[dr] | ((flags) & SET_FLAGS)))
-#define OPC1(opcode) ((sljit_ins)(opcode) << 30)
-#define OPC2(opcode) ((sljit_ins)(opcode) << 22)
-#define OPC3(opcode) ((sljit_ins)(opcode) << 19)
-#define SET_FLAGS OPC3(0x10)
-
-#define ADD (OPC1(0x2) | OPC3(0x00))
-#define ADDC (OPC1(0x2) | OPC3(0x08))
-#define AND (OPC1(0x2) | OPC3(0x01))
-#define ANDN (OPC1(0x2) | OPC3(0x05))
-#define CALL (OPC1(0x1))
-#define FABSS (OPC1(0x2) | OPC3(0x34) | DOP(0x09))
-#define FADDD (OPC1(0x2) | OPC3(0x34) | DOP(0x42))
-#define FADDS (OPC1(0x2) | OPC3(0x34) | DOP(0x41))
-#define FCMPD (OPC1(0x2) | OPC3(0x35) | DOP(0x52))
-#define FCMPS (OPC1(0x2) | OPC3(0x35) | DOP(0x51))
-#define FDIVD (OPC1(0x2) | OPC3(0x34) | DOP(0x4e))
-#define FDIVS (OPC1(0x2) | OPC3(0x34) | DOP(0x4d))
-#define FDTOI (OPC1(0x2) | OPC3(0x34) | DOP(0xd2))
-#define FDTOS (OPC1(0x2) | OPC3(0x34) | DOP(0xc6))
-#define FITOD (OPC1(0x2) | OPC3(0x34) | DOP(0xc8))
-#define FITOS (OPC1(0x2) | OPC3(0x34) | DOP(0xc4))
-#define FMOVS (OPC1(0x2) | OPC3(0x34) | DOP(0x01))
-#define FMULD (OPC1(0x2) | OPC3(0x34) | DOP(0x4a))
-#define FMULS (OPC1(0x2) | OPC3(0x34) | DOP(0x49))
-#define FNEGS (OPC1(0x2) | OPC3(0x34) | DOP(0x05))
-#define FSTOD (OPC1(0x2) | OPC3(0x34) | DOP(0xc9))
-#define FSTOI (OPC1(0x2) | OPC3(0x34) | DOP(0xd1))
-#define FSUBD (OPC1(0x2) | OPC3(0x34) | DOP(0x46))
-#define FSUBS (OPC1(0x2) | OPC3(0x34) | DOP(0x45))
-#define JMPL (OPC1(0x2) | OPC3(0x38))
-#define LDD (OPC1(0x3) | OPC3(0x03))
-#define LDDF (OPC1(0x3) | OPC3(0x23))
-#define LDF (OPC1(0x3) | OPC3(0x20))
-#define LDUW (OPC1(0x3) | OPC3(0x00))
-#define NOP (OPC1(0x0) | OPC2(0x04))
-#define OR (OPC1(0x2) | OPC3(0x02))
-#define ORN (OPC1(0x2) | OPC3(0x06))
-#define RDY (OPC1(0x2) | OPC3(0x28) | S1A(0))
-#define RESTORE (OPC1(0x2) | OPC3(0x3d))
-#define SAVE (OPC1(0x2) | OPC3(0x3c))
-#define SETHI (OPC1(0x0) | OPC2(0x04))
-#define SLL (OPC1(0x2) | OPC3(0x25))
-#define SLLX (OPC1(0x2) | OPC3(0x25) | (1 << 12))
-#define SRA (OPC1(0x2) | OPC3(0x27))
-#define SRAX (OPC1(0x2) | OPC3(0x27) | (1 << 12))
-#define SRL (OPC1(0x2) | OPC3(0x26))
-#define SRLX (OPC1(0x2) | OPC3(0x26) | (1 << 12))
-#define STD (OPC1(0x3) | OPC3(0x07))
-#define STDF (OPC1(0x3) | OPC3(0x27))
-#define STF (OPC1(0x3) | OPC3(0x24))
-#define STW (OPC1(0x3) | OPC3(0x04))
-#define SUB (OPC1(0x2) | OPC3(0x04))
-#define SUBC (OPC1(0x2) | OPC3(0x0c))
-#define TA (OPC1(0x2) | OPC3(0x3a) | (8 << 25))
-#define WRY (OPC1(0x2) | OPC3(0x30) | DA(0))
-#define XOR (OPC1(0x2) | OPC3(0x03))
-#define XNOR (OPC1(0x2) | OPC3(0x07))
-
-#if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32)
-#define MAX_DISP (0x1fffff)
-#define MIN_DISP (-0x200000)
-#define DISP_MASK ((sljit_ins)0x3fffff)
-
-#define BICC (OPC1(0x0) | OPC2(0x2))
-#define FBFCC (OPC1(0x0) | OPC2(0x6))
-#define SLL_W SLL
-#define SDIV (OPC1(0x2) | OPC3(0x0f))
-#define SMUL (OPC1(0x2) | OPC3(0x0b))
-#define UDIV (OPC1(0x2) | OPC3(0x0e))
-#define UMUL (OPC1(0x2) | OPC3(0x0a))
-#else
-#define SLL_W SLLX
-#endif
-
-#define SIMM_MAX (0x0fff)
-#define SIMM_MIN (-0x1000)
-
-/* dest_reg is the absolute name of the register
- Useful for reordering instructions in the delay slot. */
-static sljit_s32 push_inst(struct sljit_compiler *compiler, sljit_ins ins, sljit_s32 delay_slot)
-{
- sljit_ins *ptr;
- SLJIT_ASSERT((delay_slot & DST_INS_MASK) == UNMOVABLE_INS
- || (delay_slot & DST_INS_MASK) == MOVABLE_INS
- || (delay_slot & DST_INS_MASK) == ((ins >> 25) & 0x1f));
- ptr = (sljit_ins*)ensure_buf(compiler, sizeof(sljit_ins));
- FAIL_IF(!ptr);
- *ptr = ins;
- compiler->size++;
- compiler->delay_slot = delay_slot;
- return SLJIT_SUCCESS;
-}
-
-static SLJIT_INLINE sljit_ins* detect_jump_type(struct sljit_jump *jump, sljit_ins *code_ptr, sljit_ins *code, sljit_sw executable_offset)
-{
- sljit_sw diff;
- sljit_uw target_addr;
- sljit_ins *inst;
- sljit_ins saved_inst;
-
- if (jump->flags & SLJIT_REWRITABLE_JUMP)
- return code_ptr;
-
- if (jump->flags & JUMP_ADDR)
- target_addr = jump->u.target;
- else {
- SLJIT_ASSERT(jump->flags & JUMP_LABEL);
- target_addr = (sljit_uw)(code + jump->u.label->size) + (sljit_uw)executable_offset;
- }
- inst = (sljit_ins*)jump->addr;
-
-#if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32)
- if (jump->flags & IS_CALL) {
- /* Call is always patchable on sparc 32. */
- jump->flags |= PATCH_CALL;
- if (jump->flags & IS_MOVABLE) {
- inst[0] = inst[-1];
- inst[-1] = CALL;
- jump->addr -= sizeof(sljit_ins);
- return inst;
- }
- inst[0] = CALL;
- inst[1] = NOP;
- return inst + 1;
- }
-#else
- /* Both calls and BPr instructions shall not pass this point. */
-#error "Implementation required"
-#endif
-
- if (jump->flags & IS_COND)
- inst--;
-
- diff = ((sljit_sw)target_addr - (sljit_sw)(inst - 1) - executable_offset) >> 2;
-
- if (jump->flags & IS_MOVABLE) {
- if (diff <= MAX_DISP && diff >= MIN_DISP) {
- jump->flags |= PATCH_B;
- inst--;
- if (jump->flags & IS_COND) {
- saved_inst = inst[0];
- inst[0] = inst[1] ^ (1 << 28);
- inst[1] = saved_inst;
- } else {
- inst[1] = inst[0];
- inst[0] = BICC | DA(0x8);
- }
- jump->addr = (sljit_uw)inst;
- return inst + 1;
- }
- }
-
- diff += SSIZE_OF(ins);
-
- if (diff <= MAX_DISP && diff >= MIN_DISP) {
- jump->flags |= PATCH_B;
- if (jump->flags & IS_COND)
- inst[0] ^= (1 << 28);
- else
- inst[0] = BICC | DA(0x8);
- inst[1] = NOP;
- jump->addr = (sljit_uw)inst;
- return inst + 1;
- }
-
- return code_ptr;
-}
-
-SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compiler)
-{
- struct sljit_memory_fragment *buf;
- sljit_ins *code;
- sljit_ins *code_ptr;
- sljit_ins *buf_ptr;
- sljit_ins *buf_end;
- sljit_uw word_count;
- sljit_uw next_addr;
- sljit_sw executable_offset;
- sljit_sw addr;
-
- struct sljit_label *label;
- struct sljit_jump *jump;
- struct sljit_const *const_;
- struct sljit_put_label *put_label;
-
- CHECK_ERROR_PTR();
- CHECK_PTR(check_sljit_generate_code(compiler));
- reverse_buf(compiler);
-
- code = (sljit_ins*)SLJIT_MALLOC_EXEC(compiler->size * sizeof(sljit_ins), compiler->exec_allocator_data);
- PTR_FAIL_WITH_EXEC_IF(code);
- buf = compiler->buf;
-
- code_ptr = code;
- word_count = 0;
- next_addr = 0;
- executable_offset = SLJIT_EXEC_OFFSET(code);
-
- label = compiler->labels;
- jump = compiler->jumps;
- const_ = compiler->consts;
- put_label = compiler->put_labels;
-
- do {
- buf_ptr = (sljit_ins*)buf->memory;
- buf_end = buf_ptr + (buf->used_size >> 2);
- do {
- *code_ptr = *buf_ptr++;
- if (next_addr == word_count) {
- SLJIT_ASSERT(!label || label->size >= word_count);
- SLJIT_ASSERT(!jump || jump->addr >= word_count);
- SLJIT_ASSERT(!const_ || const_->addr >= word_count);
- SLJIT_ASSERT(!put_label || put_label->addr >= word_count);
-
- /* These structures are ordered by their address. */
- if (label && label->size == word_count) {
- /* Just recording the address. */
- label->addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);
- label->size = (sljit_uw)(code_ptr - code);
- label = label->next;
- }
- if (jump && jump->addr == word_count) {
-#if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32)
- jump->addr = (sljit_uw)(code_ptr - 3);
-#else
- jump->addr = (sljit_uw)(code_ptr - 6);
-#endif
- code_ptr = detect_jump_type(jump, code_ptr, code, executable_offset);
- jump = jump->next;
- }
- if (const_ && const_->addr == word_count) {
- /* Just recording the address. */
- const_->addr = (sljit_uw)code_ptr;
- const_ = const_->next;
- }
- if (put_label && put_label->addr == word_count) {
- SLJIT_ASSERT(put_label->label);
- put_label->addr = (sljit_uw)code_ptr;
- put_label = put_label->next;
- }
- next_addr = compute_next_addr(label, jump, const_, put_label);
- }
- code_ptr ++;
- word_count ++;
- } while (buf_ptr < buf_end);
-
- buf = buf->next;
- } while (buf);
-
- if (label && label->size == word_count) {
- label->addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);
- label->size = (sljit_uw)(code_ptr - code);
- label = label->next;
- }
-
- SLJIT_ASSERT(!label);
- SLJIT_ASSERT(!jump);
- SLJIT_ASSERT(!const_);
- SLJIT_ASSERT(!put_label);
- SLJIT_ASSERT(code_ptr - code <= (sljit_s32)compiler->size);
-
- jump = compiler->jumps;
- while (jump) {
- do {
- addr = (sljit_sw)((jump->flags & JUMP_LABEL) ? jump->u.label->addr : jump->u.target);
- buf_ptr = (sljit_ins *)jump->addr;
-
- if (jump->flags & PATCH_CALL) {
- addr = (addr - (sljit_sw)SLJIT_ADD_EXEC_OFFSET(buf_ptr, executable_offset)) >> 2;
- SLJIT_ASSERT(addr <= 0x1fffffff && addr >= -0x20000000);
- buf_ptr[0] = CALL | ((sljit_ins)addr & 0x3fffffff);
- break;
- }
- if (jump->flags & PATCH_B) {
- addr = (addr - (sljit_sw)SLJIT_ADD_EXEC_OFFSET(buf_ptr, executable_offset)) >> 2;
- SLJIT_ASSERT(addr <= MAX_DISP && addr >= MIN_DISP);
- buf_ptr[0] = (buf_ptr[0] & ~DISP_MASK) | ((sljit_ins)addr & DISP_MASK);
- break;
- }
-
- /* Set the fields of immediate loads. */
-#if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32)
- SLJIT_ASSERT(((buf_ptr[0] & 0xc1cfffff) == 0x01000000) && ((buf_ptr[1] & 0xc1f83fff) == 0x80102000));
- buf_ptr[0] |= (sljit_ins)(addr >> 10) & 0x3fffff;
- buf_ptr[1] |= (sljit_ins)addr & 0x3ff;
-#else
-#error "Implementation required"
-#endif
- } while (0);
- jump = jump->next;
- }
-
- put_label = compiler->put_labels;
- while (put_label) {
- addr = (sljit_sw)put_label->label->addr;
- buf_ptr = (sljit_ins *)put_label->addr;
-
-#if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32)
- SLJIT_ASSERT(((buf_ptr[0] & 0xc1cfffff) == 0x01000000) && ((buf_ptr[1] & 0xc1f83fff) == 0x80102000));
- buf_ptr[0] |= (addr >> 10) & 0x3fffff;
- buf_ptr[1] |= addr & 0x3ff;
-#else
-#error "Implementation required"
-#endif
- put_label = put_label->next;
- }
-
- compiler->error = SLJIT_ERR_COMPILED;
- compiler->executable_offset = executable_offset;
- compiler->executable_size = (sljit_uw)(code_ptr - code) * sizeof(sljit_ins);
-
- code = (sljit_ins *)SLJIT_ADD_EXEC_OFFSET(code, executable_offset);
- code_ptr = (sljit_ins *)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);
-
- SLJIT_CACHE_FLUSH(code, code_ptr);
- SLJIT_UPDATE_WX_FLAGS(code, code_ptr, 1);
- return code;
-}
-
-SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_has_cpu_feature(sljit_s32 feature_type)
-{
- switch (feature_type) {
- case SLJIT_HAS_FPU:
-#ifdef SLJIT_IS_FPU_AVAILABLE
- return SLJIT_IS_FPU_AVAILABLE;
-#else
- /* Available by default. */
- return 1;
-#endif
-
- case SLJIT_HAS_ZERO_REGISTER:
- return 1;
-
-#if (defined SLJIT_CONFIG_SPARC_64 && SLJIT_CONFIG_SPARC_64)
- case SLJIT_HAS_CMOV:
- return 1;
-#endif
-
- default:
- return 0;
- }
-}
-
-/* --------------------------------------------------------------------- */
-/* Entry, exit */
-/* --------------------------------------------------------------------- */
-
-/* Creates an index in data_transfer_insts array. */
-#define LOAD_DATA 0x01
-#define WORD_DATA 0x00
-#define BYTE_DATA 0x02
-#define HALF_DATA 0x04
-#define INT_DATA 0x06
-#define SIGNED_DATA 0x08
-/* Separates integer and floating point registers */
-#define GPR_REG 0x0f
-#define DOUBLE_DATA 0x10
-#define SINGLE_DATA 0x12
-
-#define MEM_MASK 0x1f
-
-#define ARG_TEST 0x00020
-#define ALT_KEEP_CACHE 0x00040
-#define CUMULATIVE_OP 0x00080
-#define IMM_OP 0x00100
-#define MOVE_OP 0x00200
-#define SRC2_IMM 0x00400
-
-#define REG_DEST 0x00800
-#define REG2_SOURCE 0x01000
-#define SLOW_SRC1 0x02000
-#define SLOW_SRC2 0x04000
-#define SLOW_DEST 0x08000
-
-/* SET_FLAGS (0x10 << 19) also belong here! */
-
-#if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32)
-#include "sljitNativeSPARC_32.c"
-#else
-#include "sljitNativeSPARC_64.c"
-#endif
-
-SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_enter(struct sljit_compiler *compiler,
- sljit_s32 options, sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds,
- sljit_s32 fscratches, sljit_s32 fsaveds, sljit_s32 local_size)
-{
- sljit_s32 reg_index, types, tmp;
- sljit_u32 float_offset, args_offset;
- sljit_s32 saved_arg_index, scratch_arg_index, float_arg_index;
-
- CHECK_ERROR();
- CHECK(check_sljit_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size));
- set_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size);
-
- local_size = (local_size + SLJIT_LOCALS_OFFSET + 7) & ~0x7;
- compiler->local_size = local_size;
-
- if (local_size <= -SIMM_MIN) {
- FAIL_IF(push_inst(compiler, SAVE | D(SLJIT_SP) | S1(SLJIT_SP) | IMM(-local_size), UNMOVABLE_INS));
- }
- else {
- FAIL_IF(load_immediate(compiler, TMP_REG1, -local_size));
- FAIL_IF(push_inst(compiler, SAVE | D(SLJIT_SP) | S1(SLJIT_SP) | S2(TMP_REG1), UNMOVABLE_INS));
- }
-
- arg_types >>= SLJIT_ARG_SHIFT;
-
- types = arg_types;
- float_offset = 16 * sizeof(sljit_sw);
- reg_index = 24;
-
- while (types && reg_index < 24 + 6) {
- switch (types & SLJIT_ARG_MASK) {
- case SLJIT_ARG_TYPE_F64:
- if (reg_index & 0x1) {
- FAIL_IF(push_inst(compiler, STW | DA(reg_index) | S1(SLJIT_SP) | IMM(float_offset), MOVABLE_INS));
- if (reg_index >= 24 + 6 - 1)
- break;
- FAIL_IF(push_inst(compiler, STW | DA(reg_index + 1) | S1(SLJIT_SP) | IMM(float_offset + sizeof(sljit_sw)), MOVABLE_INS));
- } else
- FAIL_IF(push_inst(compiler, STD | DA(reg_index) | S1(SLJIT_SP) | IMM(float_offset), MOVABLE_INS));
-
- float_offset += sizeof(sljit_f64);
- reg_index++;
- break;
- case SLJIT_ARG_TYPE_F32:
- FAIL_IF(push_inst(compiler, STW | DA(reg_index) | S1(SLJIT_SP) | IMM(float_offset), MOVABLE_INS));
- float_offset += sizeof(sljit_f64);
- break;
- }
-
- reg_index++;
- types >>= SLJIT_ARG_SHIFT;
- }
-
- args_offset = (16 + 1 + 6) * sizeof(sljit_sw);
- float_offset = 16 * sizeof(sljit_sw);
- reg_index = 24;
- saved_arg_index = 24;
- scratch_arg_index = 8 - 1;
- float_arg_index = 1;
-
- while (arg_types) {
- switch (arg_types & SLJIT_ARG_MASK) {
- case SLJIT_ARG_TYPE_F64:
- if (reg_index < 24 + 6 - 1) {
- FAIL_IF(push_inst(compiler, LDDF | FD(float_arg_index) | S1(SLJIT_SP) | IMM(float_offset), MOVABLE_INS));
- } else if (reg_index < 24 + 6) {
- FAIL_IF(push_inst(compiler, LDF | FD(float_arg_index) | S1(SLJIT_SP) | IMM(float_offset), MOVABLE_INS));
- FAIL_IF(push_inst(compiler, LDF | FD(float_arg_index) | (1 << 25) | S1A(30) | IMM(args_offset), MOVABLE_INS));
- } else {
- FAIL_IF(push_inst(compiler, LDF | FD(float_arg_index) | S1A(30) | IMM(args_offset), MOVABLE_INS));
- FAIL_IF(push_inst(compiler, LDF | FD(float_arg_index) | (1 << 25) | S1A(30) | IMM(args_offset + sizeof(sljit_sw)), MOVABLE_INS));
- }
-
- float_arg_index++;
- float_offset += sizeof(sljit_f64);
- reg_index++;
- break;
- case SLJIT_ARG_TYPE_F32:
- if (reg_index < 24 + 6)
- FAIL_IF(push_inst(compiler, LDF | FD(float_arg_index) | S1(SLJIT_SP) | IMM(float_offset), MOVABLE_INS));
- else
- FAIL_IF(push_inst(compiler, LDF | FD(float_arg_index) | S1A(30) | IMM(args_offset), MOVABLE_INS));
- float_arg_index++;
- float_offset += sizeof(sljit_f64);
- break;
- default:
- scratch_arg_index++;
-
- if (!(arg_types & SLJIT_ARG_TYPE_SCRATCH_REG)) {
- tmp = saved_arg_index++;
- if (tmp == reg_index)
- break;
- } else
- tmp = scratch_arg_index;
-
- if (reg_index < 24 + 6)
- FAIL_IF(push_inst(compiler, OR | DA(tmp) | S1(0) | S2A(reg_index), tmp));
- else
- FAIL_IF(push_inst(compiler, LDUW | DA(tmp) | S1A(30) | IMM(args_offset), tmp));
- break;
- }
-
- reg_index++;
- arg_types >>= SLJIT_ARG_SHIFT;
- }
-
- return SLJIT_SUCCESS;
-}
-
-SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_set_context(struct sljit_compiler *compiler,
- sljit_s32 options, sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds,
- sljit_s32 fscratches, sljit_s32 fsaveds, sljit_s32 local_size)
-{
- CHECK_ERROR();
- CHECK(check_sljit_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size));
- set_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size);
-
- compiler->local_size = (local_size + SLJIT_LOCALS_OFFSET + 7) & ~0x7;
- return SLJIT_SUCCESS;
-}
-
-SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return_void(struct sljit_compiler *compiler)
-{
- CHECK_ERROR();
- CHECK(check_sljit_emit_return_void(compiler));
-
- FAIL_IF(push_inst(compiler, JMPL | D(0) | S1A(31) | IMM(8), UNMOVABLE_INS));
- return push_inst(compiler, RESTORE | D(SLJIT_R0) | S1(SLJIT_R0) | S2(0), UNMOVABLE_INS);
-}
-
-SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src, sljit_sw srcw)
-{
- CHECK_ERROR();
- CHECK(check_sljit_emit_return(compiler, op, src, srcw));
-
- if (TYPE_CAST_NEEDED(op) || !FAST_IS_REG(src)) {
- FAIL_IF(emit_mov_before_return(compiler, op, src, srcw));
- src = SLJIT_R0;
- }
-
- FAIL_IF(push_inst(compiler, JMPL | D(0) | S1A(31) | IMM(8), UNMOVABLE_INS));
- return push_inst(compiler, RESTORE | D(SLJIT_R0) | S1(src) | S2(0), UNMOVABLE_INS);
-}
-
-/* --------------------------------------------------------------------- */
-/* Operators */
-/* --------------------------------------------------------------------- */
-
-#if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32)
-#define ARCH_32_64(a, b) a
-#else
-#define ARCH_32_64(a, b) b
-#endif
-
-static const sljit_ins data_transfer_insts[16 + 4] = {
-/* u w s */ ARCH_32_64(OPC1(3) | OPC3(0x04) /* stw */, OPC1(3) | OPC3(0x0e) /* stx */),
-/* u w l */ ARCH_32_64(OPC1(3) | OPC3(0x00) /* lduw */, OPC1(3) | OPC3(0x0b) /* ldx */),
-/* u b s */ OPC1(3) | OPC3(0x05) /* stb */,
-/* u b l */ OPC1(3) | OPC3(0x01) /* ldub */,
-/* u h s */ OPC1(3) | OPC3(0x06) /* sth */,
-/* u h l */ OPC1(3) | OPC3(0x02) /* lduh */,
-/* u i s */ OPC1(3) | OPC3(0x04) /* stw */,
-/* u i l */ OPC1(3) | OPC3(0x00) /* lduw */,
-
-/* s w s */ ARCH_32_64(OPC1(3) | OPC3(0x04) /* stw */, OPC1(3) | OPC3(0x0e) /* stx */),
-/* s w l */ ARCH_32_64(OPC1(3) | OPC3(0x00) /* lduw */, OPC1(3) | OPC3(0x0b) /* ldx */),
-/* s b s */ OPC1(3) | OPC3(0x05) /* stb */,
-/* s b l */ OPC1(3) | OPC3(0x09) /* ldsb */,
-/* s h s */ OPC1(3) | OPC3(0x06) /* sth */,
-/* s h l */ OPC1(3) | OPC3(0x0a) /* ldsh */,
-/* s i s */ OPC1(3) | OPC3(0x04) /* stw */,
-/* s i l */ ARCH_32_64(OPC1(3) | OPC3(0x00) /* lduw */, OPC1(3) | OPC3(0x08) /* ldsw */),
-
-/* d s */ OPC1(3) | OPC3(0x27),
-/* d l */ OPC1(3) | OPC3(0x23),
-/* s s */ OPC1(3) | OPC3(0x24),
-/* s l */ OPC1(3) | OPC3(0x20),
-};
-
-#undef ARCH_32_64
-
-/* Can perform an operation using at most 1 instruction. */
-static sljit_s32 getput_arg_fast(struct sljit_compiler *compiler, sljit_u32 flags, sljit_s32 reg, sljit_s32 arg, sljit_sw argw)
-{
- SLJIT_ASSERT(arg & SLJIT_MEM);
-
- if ((!(arg & OFFS_REG_MASK) && argw <= SIMM_MAX && argw >= SIMM_MIN)
- || ((arg & OFFS_REG_MASK) && (argw & 0x3) == 0)) {
- /* Works for both absoulte and relative addresses (immediate case). */
- if (SLJIT_UNLIKELY(flags & ARG_TEST))
- return 1;
- FAIL_IF(push_inst(compiler, data_transfer_insts[flags & MEM_MASK]
- | ((flags & MEM_MASK) <= GPR_REG ? D(reg) : FD(reg))
- | S1(arg & REG_MASK) | ((arg & OFFS_REG_MASK) ? S2(OFFS_REG(arg)) : IMM(argw)),
- ((flags & MEM_MASK) <= GPR_REG && (flags & LOAD_DATA)) ? DR(reg) : MOVABLE_INS));
- return -1;
- }
- return 0;
-}
-
-/* See getput_arg below.
- Note: can_cache is called only for binary operators. Those
- operators always uses word arguments without write back. */
-static sljit_s32 can_cache(sljit_s32 arg, sljit_sw argw, sljit_s32 next_arg, sljit_sw next_argw)
-{
- SLJIT_ASSERT((arg & SLJIT_MEM) && (next_arg & SLJIT_MEM));
-
- /* Simple operation except for updates. */
- if (arg & OFFS_REG_MASK) {
- argw &= 0x3;
- SLJIT_ASSERT(argw);
- next_argw &= 0x3;
- if ((arg & OFFS_REG_MASK) == (next_arg & OFFS_REG_MASK) && argw == next_argw)
- return 1;
- return 0;
- }
-
- if (((next_argw - argw) <= SIMM_MAX && (next_argw - argw) >= SIMM_MIN))
- return 1;
- return 0;
-}
-
-/* Emit the necessary instructions. See can_cache above. */
-static sljit_s32 getput_arg(struct sljit_compiler *compiler, sljit_u32 flags, sljit_s32 reg, sljit_s32 arg, sljit_sw argw, sljit_s32 next_arg, sljit_sw next_argw)
-{
- sljit_s32 base, arg2, delay_slot;
- sljit_ins dest;
-
- SLJIT_ASSERT(arg & SLJIT_MEM);
- if (!(next_arg & SLJIT_MEM)) {
- next_arg = 0;
- next_argw = 0;
- }
-
- base = arg & REG_MASK;
- if (SLJIT_UNLIKELY(arg & OFFS_REG_MASK)) {
- argw &= 0x3;
-
- /* Using the cache. */
- if (((SLJIT_MEM | (arg & OFFS_REG_MASK)) == compiler->cache_arg) && (argw == compiler->cache_argw))
- arg2 = TMP_REG3;
- else {
- if ((arg & OFFS_REG_MASK) == (next_arg & OFFS_REG_MASK) && argw == (next_argw & 0x3)) {
- compiler->cache_arg = SLJIT_MEM | (arg & OFFS_REG_MASK);
- compiler->cache_argw = argw;
- arg2 = TMP_REG3;
- }
- else if ((flags & LOAD_DATA) && ((flags & MEM_MASK) <= GPR_REG) && reg != base && reg != OFFS_REG(arg))
- arg2 = reg;
- else /* It must be a mov operation, so tmp1 must be free to use. */
- arg2 = TMP_REG1;
- FAIL_IF(push_inst(compiler, SLL_W | D(arg2) | S1(OFFS_REG(arg)) | IMM_ARG | (sljit_ins)argw, DR(arg2)));
- }
- }
- else {
- /* Using the cache. */
- if ((compiler->cache_arg == SLJIT_MEM) && (argw - compiler->cache_argw) <= SIMM_MAX && (argw - compiler->cache_argw) >= SIMM_MIN) {
- if (argw != compiler->cache_argw) {
- FAIL_IF(push_inst(compiler, ADD | D(TMP_REG3) | S1(TMP_REG3) | IMM(argw - compiler->cache_argw), DR(TMP_REG3)));
- compiler->cache_argw = argw;
- }
- arg2 = TMP_REG3;
- } else {
- if ((next_argw - argw) <= SIMM_MAX && (next_argw - argw) >= SIMM_MIN) {
- compiler->cache_arg = SLJIT_MEM;
- compiler->cache_argw = argw;
- arg2 = TMP_REG3;
- }
- else if ((flags & LOAD_DATA) && ((flags & MEM_MASK) <= GPR_REG) && reg != base)
- arg2 = reg;
- else /* It must be a mov operation, so tmp1 must be free to use. */
- arg2 = TMP_REG1;
- FAIL_IF(load_immediate(compiler, arg2, argw));
- }
- }
-
- dest = ((flags & MEM_MASK) <= GPR_REG ? D(reg) : FD(reg));
- delay_slot = ((flags & MEM_MASK) <= GPR_REG && (flags & LOAD_DATA)) ? DR(reg) : MOVABLE_INS;
- if (!base)
- return push_inst(compiler, data_transfer_insts[flags & MEM_MASK] | dest | S1(arg2) | IMM(0), delay_slot);
- return push_inst(compiler, data_transfer_insts[flags & MEM_MASK] | dest | S1(base) | S2(arg2), delay_slot);
-}
-
-static SLJIT_INLINE sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit_u32 flags, sljit_s32 reg, sljit_s32 arg, sljit_sw argw)
-{
- if (getput_arg_fast(compiler, flags, reg, arg, argw))
- return compiler->error;
- compiler->cache_arg = 0;
- compiler->cache_argw = 0;
- return getput_arg(compiler, flags, reg, arg, argw, 0, 0);
-}
-
-static SLJIT_INLINE sljit_s32 emit_op_mem2(struct sljit_compiler *compiler, sljit_u32 flags, sljit_s32 reg, sljit_s32 arg1, sljit_sw arg1w, sljit_s32 arg2, sljit_sw arg2w)
-{
- if (getput_arg_fast(compiler, flags, reg, arg1, arg1w))
- return compiler->error;
- return getput_arg(compiler, flags, reg, arg1, arg1w, arg2, arg2w);
-}
-
-static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_u32 flags,
- sljit_s32 dst, sljit_sw dstw,
- sljit_s32 src1, sljit_sw src1w,
- sljit_s32 src2, sljit_sw src2w)
-{
- /* arg1 goes to TMP_REG1 or src reg
- arg2 goes to TMP_REG2, imm or src reg
- TMP_REG3 can be used for caching
- result goes to TMP_REG2, so put result can use TMP_REG1 and TMP_REG3. */
- sljit_s32 dst_r = TMP_REG2;
- sljit_s32 src1_r;
- sljit_sw src2_r = 0;
- sljit_s32 sugg_src2_r = TMP_REG2;
-
- if (!(flags & ALT_KEEP_CACHE)) {
- compiler->cache_arg = 0;
- compiler->cache_argw = 0;
- }
-
- if (dst != TMP_REG2) {
- if (FAST_IS_REG(dst)) {
- dst_r = dst;
- flags |= REG_DEST;
- if (flags & MOVE_OP)
- sugg_src2_r = dst_r;
- }
- else if ((dst & SLJIT_MEM) && !getput_arg_fast(compiler, flags | ARG_TEST, TMP_REG1, dst, dstw))
- flags |= SLOW_DEST;
- }
-
- if (flags & IMM_OP) {
- if ((src2 & SLJIT_IMM) && src2w) {
- if (src2w <= SIMM_MAX && src2w >= SIMM_MIN) {
- flags |= SRC2_IMM;
- src2_r = src2w;
- }
- }
- if (!(flags & SRC2_IMM) && (flags & CUMULATIVE_OP) && (src1 & SLJIT_IMM) && src1w) {
- if (src1w <= SIMM_MAX && src1w >= SIMM_MIN) {
- flags |= SRC2_IMM;
- src2_r = src1w;
-
- /* And swap arguments. */
- src1 = src2;
- src1w = src2w;
- src2 = SLJIT_IMM;
- /* src2w = src2_r unneeded. */
- }
- }
- }
-
- /* Source 1. */
- if (FAST_IS_REG(src1))
- src1_r = src1;
- else if (src1 & SLJIT_IMM) {
- if (src1w) {
- FAIL_IF(load_immediate(compiler, TMP_REG1, src1w));
- src1_r = TMP_REG1;
- }
- else
- src1_r = 0;
- }
- else {
- if (getput_arg_fast(compiler, flags | LOAD_DATA, TMP_REG1, src1, src1w))
- FAIL_IF(compiler->error);
- else
- flags |= SLOW_SRC1;
- src1_r = TMP_REG1;
- }
-
- /* Source 2. */
- if (FAST_IS_REG(src2)) {
- src2_r = src2;
- flags |= REG2_SOURCE;
- if ((flags & (REG_DEST | MOVE_OP)) == MOVE_OP)
- dst_r = src2_r;
- }
- else if (src2 & SLJIT_IMM) {
- if (!(flags & SRC2_IMM)) {
- if (src2w) {
- FAIL_IF(load_immediate(compiler, sugg_src2_r, src2w));
- src2_r = sugg_src2_r;
- }
- else {
- src2_r = 0;
- if (flags & MOVE_OP) {
- if (dst & SLJIT_MEM)
- dst_r = 0;
- else
- op = SLJIT_MOV;
- }
- }
- }
- }
- else {
- if (getput_arg_fast(compiler, flags | LOAD_DATA, sugg_src2_r, src2, src2w))
- FAIL_IF(compiler->error);
- else
- flags |= SLOW_SRC2;
- src2_r = sugg_src2_r;
- }
-
- if ((flags & (SLOW_SRC1 | SLOW_SRC2)) == (SLOW_SRC1 | SLOW_SRC2)) {
- SLJIT_ASSERT(src2_r == TMP_REG2);
- if (!can_cache(src1, src1w, src2, src2w) && can_cache(src1, src1w, dst, dstw)) {
- FAIL_IF(getput_arg(compiler, flags | LOAD_DATA, TMP_REG2, src2, src2w, src1, src1w));
- FAIL_IF(getput_arg(compiler, flags | LOAD_DATA, TMP_REG1, src1, src1w, dst, dstw));
- }
- else {
- FAIL_IF(getput_arg(compiler, flags | LOAD_DATA, TMP_REG1, src1, src1w, src2, src2w));
- FAIL_IF(getput_arg(compiler, flags | LOAD_DATA, TMP_REG2, src2, src2w, dst, dstw));
- }
- }
- else if (flags & SLOW_SRC1)
- FAIL_IF(getput_arg(compiler, flags | LOAD_DATA, TMP_REG1, src1, src1w, dst, dstw));
- else if (flags & SLOW_SRC2)
- FAIL_IF(getput_arg(compiler, flags | LOAD_DATA, sugg_src2_r, src2, src2w, dst, dstw));
-
- FAIL_IF(emit_single_op(compiler, op, flags, dst_r, src1_r, src2_r));
-
- if (dst & SLJIT_MEM) {
- if (!(flags & SLOW_DEST)) {
- getput_arg_fast(compiler, flags, dst_r, dst, dstw);
- return compiler->error;
- }
- return getput_arg(compiler, flags, dst_r, dst, dstw, 0, 0);
- }
-
- return SLJIT_SUCCESS;
-}
-
-SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compiler, sljit_s32 op)
-{
- CHECK_ERROR();
- CHECK(check_sljit_emit_op0(compiler, op));
-
- op = GET_OPCODE(op);
- switch (op) {
- case SLJIT_BREAKPOINT:
- return push_inst(compiler, TA, UNMOVABLE_INS);
- case SLJIT_NOP:
- return push_inst(compiler, NOP, UNMOVABLE_INS);
- case SLJIT_LMUL_UW:
- case SLJIT_LMUL_SW:
-#if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32)
- FAIL_IF(push_inst(compiler, (op == SLJIT_LMUL_UW ? UMUL : SMUL) | D(SLJIT_R0) | S1(SLJIT_R0) | S2(SLJIT_R1), DR(SLJIT_R0)));
- return push_inst(compiler, RDY | D(SLJIT_R1), DR(SLJIT_R1));
-#else
-#error "Implementation required"
-#endif
- case SLJIT_DIVMOD_UW:
- case SLJIT_DIVMOD_SW:
- case SLJIT_DIV_UW:
- case SLJIT_DIV_SW:
- SLJIT_COMPILE_ASSERT((SLJIT_DIVMOD_UW & 0x2) == 0 && SLJIT_DIV_UW - 0x2 == SLJIT_DIVMOD_UW, bad_div_opcode_assignments);
-#if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32)
- if ((op | 0x2) == SLJIT_DIV_UW)
- FAIL_IF(push_inst(compiler, WRY | S1(0), MOVABLE_INS));
- else {
- FAIL_IF(push_inst(compiler, SRA | D(TMP_REG1) | S1(SLJIT_R0) | IMM(31), DR(TMP_REG1)));
- FAIL_IF(push_inst(compiler, WRY | S1(TMP_REG1), MOVABLE_INS));
- }
- if (op <= SLJIT_DIVMOD_SW)
- FAIL_IF(push_inst(compiler, OR | D(TMP_REG2) | S1(0) | S2(SLJIT_R0), DR(TMP_REG2)));
- FAIL_IF(push_inst(compiler, ((op | 0x2) == SLJIT_DIV_UW ? UDIV : SDIV) | D(SLJIT_R0) | S1(SLJIT_R0) | S2(SLJIT_R1), DR(SLJIT_R0)));
- if (op >= SLJIT_DIV_UW)
- return SLJIT_SUCCESS;
- FAIL_IF(push_inst(compiler, SMUL | D(SLJIT_R1) | S1(SLJIT_R0) | S2(SLJIT_R1), DR(SLJIT_R1)));
- return push_inst(compiler, SUB | D(SLJIT_R1) | S1(TMP_REG2) | S2(SLJIT_R1), DR(SLJIT_R1));
-#else
-#error "Implementation required"
-#endif
- case SLJIT_ENDBR:
- case SLJIT_SKIP_FRAMES_BEFORE_RETURN:
- return SLJIT_SUCCESS;
- }
-
- return SLJIT_SUCCESS;
-}
-
-SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compiler, sljit_s32 op,
- sljit_s32 dst, sljit_sw dstw,
- sljit_s32 src, sljit_sw srcw)
-{
- sljit_u32 flags = HAS_FLAGS(op) ? SET_FLAGS : 0;
-
- CHECK_ERROR();
- CHECK(check_sljit_emit_op1(compiler, op, dst, dstw, src, srcw));
- ADJUST_LOCAL_OFFSET(dst, dstw);
- ADJUST_LOCAL_OFFSET(src, srcw);
-
- op = GET_OPCODE(op);
- switch (op) {
- case SLJIT_MOV:
-#if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32)
- case SLJIT_MOV_U32:
- case SLJIT_MOV_S32:
- case SLJIT_MOV32:
-#endif
- case SLJIT_MOV_P:
- return emit_op(compiler, SLJIT_MOV, flags | WORD_DATA | MOVE_OP, dst, dstw, TMP_REG1, 0, src, srcw);
-
- case SLJIT_MOV_U8:
- return emit_op(compiler, SLJIT_MOV_U8, flags | BYTE_DATA | MOVE_OP, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_u8)srcw : srcw);
-
- case SLJIT_MOV_S8:
- return emit_op(compiler, SLJIT_MOV_S8, flags | BYTE_DATA | SIGNED_DATA | MOVE_OP, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_s8)srcw : srcw);
-
- case SLJIT_MOV_U16:
- return emit_op(compiler, SLJIT_MOV_U16, flags | HALF_DATA | MOVE_OP, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_u16)srcw : srcw);
-
- case SLJIT_MOV_S16:
- return emit_op(compiler, SLJIT_MOV_S16, flags | HALF_DATA | SIGNED_DATA | MOVE_OP, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_s16)srcw : srcw);
-
- case SLJIT_NOT:
- case SLJIT_CLZ:
- return emit_op(compiler, op, flags, dst, dstw, TMP_REG1, 0, src, srcw);
- }
-
- return SLJIT_SUCCESS;
-}
-
-SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compiler, sljit_s32 op,
- sljit_s32 dst, sljit_sw dstw,
- sljit_s32 src1, sljit_sw src1w,
- sljit_s32 src2, sljit_sw src2w)
-{
- sljit_u32 flags = HAS_FLAGS(op) ? SET_FLAGS : 0;
-
- CHECK_ERROR();
- CHECK(check_sljit_emit_op2(compiler, op, 0, dst, dstw, src1, src1w, src2, src2w));
- ADJUST_LOCAL_OFFSET(dst, dstw);
- ADJUST_LOCAL_OFFSET(src1, src1w);
- ADJUST_LOCAL_OFFSET(src2, src2w);
-
- op = GET_OPCODE(op);
- switch (op) {
- case SLJIT_ADD:
- case SLJIT_ADDC:
- case SLJIT_MUL:
- case SLJIT_AND:
- case SLJIT_OR:
- case SLJIT_XOR:
- return emit_op(compiler, op, flags | CUMULATIVE_OP | IMM_OP, dst, dstw, src1, src1w, src2, src2w);
-
- case SLJIT_SUB:
- case SLJIT_SUBC:
- return emit_op(compiler, op, flags | IMM_OP, dst, dstw, src1, src1w, src2, src2w);
-
- case SLJIT_SHL:
- case SLJIT_LSHR:
- case SLJIT_ASHR:
-#if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32)
- if (src2 & SLJIT_IMM)
- src2w &= 0x1f;
-#else
- SLJIT_UNREACHABLE();
-#endif
- return emit_op(compiler, op, flags | IMM_OP, dst, dstw, src1, src1w, src2, src2w);
- }
-
- return SLJIT_SUCCESS;
-}
-
-SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2u(struct sljit_compiler *compiler, sljit_s32 op,
- sljit_s32 src1, sljit_sw src1w,
- sljit_s32 src2, sljit_sw src2w)
-{
- CHECK_ERROR();
- CHECK(check_sljit_emit_op2(compiler, op, 1, 0, 0, src1, src1w, src2, src2w));
-
-#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \
- || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS)
- compiler->skip_checks = 1;
-#endif
- return sljit_emit_op2(compiler, op, TMP_REG2, 0, src1, src1w, src2, src2w);
-}
-
-SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_src(struct sljit_compiler *compiler, sljit_s32 op,
- sljit_s32 src, sljit_sw srcw)
-{
- CHECK_ERROR();
- CHECK(check_sljit_emit_op_src(compiler, op, src, srcw));
- ADJUST_LOCAL_OFFSET(src, srcw);
-
- switch (op) {
- case SLJIT_FAST_RETURN:
- if (FAST_IS_REG(src))
- FAIL_IF(push_inst(compiler, OR | D(TMP_LINK) | S1(0) | S2(src), DR(TMP_LINK)));
- else
- FAIL_IF(emit_op_mem(compiler, WORD_DATA | LOAD_DATA, TMP_LINK, src, srcw));
-
- FAIL_IF(push_inst(compiler, JMPL | D(0) | S1(TMP_LINK) | IMM(8), UNMOVABLE_INS));
- return push_inst(compiler, NOP, UNMOVABLE_INS);
- case SLJIT_SKIP_FRAMES_BEFORE_FAST_RETURN:
- case SLJIT_PREFETCH_L1:
- case SLJIT_PREFETCH_L2:
- case SLJIT_PREFETCH_L3:
- case SLJIT_PREFETCH_ONCE:
- return SLJIT_SUCCESS;
- }
-
- return SLJIT_SUCCESS;
-}
-
-SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_register_index(sljit_s32 reg)
-{
- CHECK_REG_INDEX(check_sljit_get_register_index(reg));
- return reg_map[reg];
-}
-
-SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_float_register_index(sljit_s32 reg)
-{
- CHECK_REG_INDEX(check_sljit_get_float_register_index(reg));
- return freg_map[reg];
-}
-
-SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_custom(struct sljit_compiler *compiler,
- void *instruction, sljit_u32 size)
-{
- CHECK_ERROR();
- CHECK(check_sljit_emit_op_custom(compiler, instruction, size));
-
- return push_inst(compiler, *(sljit_ins*)instruction, UNMOVABLE_INS);
-}
-
-/* --------------------------------------------------------------------- */
-/* Floating point operators */
-/* --------------------------------------------------------------------- */
-
-#define FLOAT_DATA(op) ((sljit_ins)DOUBLE_DATA | (((sljit_ins)(op) & SLJIT_32) >> 7))
-#define SELECT_FOP(op, single, double) ((op & SLJIT_32) ? single : double)
-#define FLOAT_TMP_MEM_OFFSET (22 * sizeof(sljit_sw))
-
-static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_sw_from_f64(struct sljit_compiler *compiler, sljit_s32 op,
- sljit_s32 dst, sljit_sw dstw,
- sljit_s32 src, sljit_sw srcw)
-{
- if (src & SLJIT_MEM) {
- FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, src, srcw, dst, dstw));
- src = TMP_FREG1;
- }
-
- FAIL_IF(push_inst(compiler, SELECT_FOP(op, FSTOI, FDTOI) | FD(TMP_FREG1) | FS2(src), MOVABLE_INS));
-
- if (FAST_IS_REG(dst)) {
- FAIL_IF(emit_op_mem2(compiler, SINGLE_DATA, TMP_FREG1, SLJIT_MEM1(SLJIT_SP), FLOAT_TMP_MEM_OFFSET, SLJIT_MEM1(SLJIT_SP), FLOAT_TMP_MEM_OFFSET));
- return emit_op_mem2(compiler, WORD_DATA | LOAD_DATA, dst, SLJIT_MEM1(SLJIT_SP), FLOAT_TMP_MEM_OFFSET, SLJIT_MEM1(SLJIT_SP), FLOAT_TMP_MEM_OFFSET);
- }
-
- /* Store the integer value from a VFP register. */
- return emit_op_mem2(compiler, SINGLE_DATA, TMP_FREG1, dst, dstw, 0, 0);
-}
-
-static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_f64_from_sw(struct sljit_compiler *compiler, sljit_s32 op,
- sljit_s32 dst, sljit_sw dstw,
- sljit_s32 src, sljit_sw srcw)
-{
- sljit_s32 dst_r = FAST_IS_REG(dst) ? dst : TMP_FREG1;
-
- if (src & SLJIT_IMM) {
-#if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
- if (GET_OPCODE(op) == SLJIT_CONV_F64_FROM_S32)
- srcw = (sljit_s32)srcw;
-#endif
- FAIL_IF(load_immediate(compiler, TMP_REG1, srcw));
- src = TMP_REG1;
- srcw = 0;
- }
-
- if (FAST_IS_REG(src)) {
- FAIL_IF(emit_op_mem2(compiler, WORD_DATA, src, SLJIT_MEM1(SLJIT_SP), FLOAT_TMP_MEM_OFFSET, SLJIT_MEM1(SLJIT_SP), FLOAT_TMP_MEM_OFFSET));
- src = SLJIT_MEM1(SLJIT_SP);
- srcw = FLOAT_TMP_MEM_OFFSET;
- }
-
- FAIL_IF(emit_op_mem2(compiler, SINGLE_DATA | LOAD_DATA, TMP_FREG1, src, srcw, dst, dstw));
- FAIL_IF(push_inst(compiler, SELECT_FOP(op, FITOS, FITOD) | FD(dst_r) | FS2(TMP_FREG1), MOVABLE_INS));
-
- if (dst & SLJIT_MEM)
- return emit_op_mem2(compiler, FLOAT_DATA(op), TMP_FREG1, dst, dstw, 0, 0);
- return SLJIT_SUCCESS;
-}
-
-static SLJIT_INLINE sljit_s32 sljit_emit_fop1_cmp(struct sljit_compiler *compiler, sljit_s32 op,
- sljit_s32 src1, sljit_sw src1w,
- sljit_s32 src2, sljit_sw src2w)
-{
- if (src1 & SLJIT_MEM) {
- FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, src1, src1w, src2, src2w));
- src1 = TMP_FREG1;
- }
-
- if (src2 & SLJIT_MEM) {
- FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG2, src2, src2w, 0, 0));
- src2 = TMP_FREG2;
- }
-
- return push_inst(compiler, SELECT_FOP(op, FCMPS, FCMPD) | FS1(src1) | FS2(src2), FCC_IS_SET | MOVABLE_INS);
-}
-
-SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compiler, sljit_s32 op,
- sljit_s32 dst, sljit_sw dstw,
- sljit_s32 src, sljit_sw srcw)
-{
- sljit_s32 dst_r;
-
- CHECK_ERROR();
- compiler->cache_arg = 0;
- compiler->cache_argw = 0;
-
- SLJIT_COMPILE_ASSERT((SLJIT_32 == 0x100) && !(DOUBLE_DATA & 0x2), float_transfer_bit_error);
- SELECT_FOP1_OPERATION_WITH_CHECKS(compiler, op, dst, dstw, src, srcw);
-
- if (GET_OPCODE(op) == SLJIT_CONV_F64_FROM_F32)
- op ^= SLJIT_32;
-
- dst_r = FAST_IS_REG(dst) ? dst : TMP_FREG1;
-
- if (src & SLJIT_MEM) {
- FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op) | LOAD_DATA, dst_r, src, srcw, dst, dstw));
- src = dst_r;
- }
-
- switch (GET_OPCODE(op)) {
- case SLJIT_MOV_F64:
- if (src != dst_r) {
- if (dst_r != TMP_FREG1) {
- FAIL_IF(push_inst(compiler, FMOVS | FD(dst_r) | FS2(src), MOVABLE_INS));
- if (!(op & SLJIT_32))
- FAIL_IF(push_inst(compiler, FMOVS | FDN(dst_r) | FS2N(src), MOVABLE_INS));
- }
- else
- dst_r = src;
- }
- break;
- case SLJIT_NEG_F64:
- FAIL_IF(push_inst(compiler, FNEGS | FD(dst_r) | FS2(src), MOVABLE_INS));
- if (dst_r != src && !(op & SLJIT_32))
- FAIL_IF(push_inst(compiler, FMOVS | FDN(dst_r) | FS2N(src), MOVABLE_INS));
- break;
- case SLJIT_ABS_F64:
- FAIL_IF(push_inst(compiler, FABSS | FD(dst_r) | FS2(src), MOVABLE_INS));
- if (dst_r != src && !(op & SLJIT_32))
- FAIL_IF(push_inst(compiler, FMOVS | FDN(dst_r) | FS2N(src), MOVABLE_INS));
- break;
- case SLJIT_CONV_F64_FROM_F32:
- FAIL_IF(push_inst(compiler, SELECT_FOP(op, FSTOD, FDTOS) | FD(dst_r) | FS2(src), MOVABLE_INS));
- op ^= SLJIT_32;
- break;
- }
-
- if (dst & SLJIT_MEM)
- FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op), dst_r, dst, dstw, 0, 0));
- return SLJIT_SUCCESS;
-}
-
-SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop2(struct sljit_compiler *compiler, sljit_s32 op,
- sljit_s32 dst, sljit_sw dstw,
- sljit_s32 src1, sljit_sw src1w,
- sljit_s32 src2, sljit_sw src2w)
-{
- sljit_s32 dst_r, flags = 0;
-
- CHECK_ERROR();
- CHECK(check_sljit_emit_fop2(compiler, op, dst, dstw, src1, src1w, src2, src2w));
- ADJUST_LOCAL_OFFSET(dst, dstw);
- ADJUST_LOCAL_OFFSET(src1, src1w);
- ADJUST_LOCAL_OFFSET(src2, src2w);
-
- compiler->cache_arg = 0;
- compiler->cache_argw = 0;
-
- dst_r = FAST_IS_REG(dst) ? dst : TMP_FREG2;
-
- if (src1 & SLJIT_MEM) {
- if (getput_arg_fast(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, src1, src1w)) {
- FAIL_IF(compiler->error);
- src1 = TMP_FREG1;
- } else
- flags |= SLOW_SRC1;
- }
-
- if (src2 & SLJIT_MEM) {
- if (getput_arg_fast(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG2, src2, src2w)) {
- FAIL_IF(compiler->error);
- src2 = TMP_FREG2;
- } else
- flags |= SLOW_SRC2;
- }
-
- if ((flags & (SLOW_SRC1 | SLOW_SRC2)) == (SLOW_SRC1 | SLOW_SRC2)) {
- if (!can_cache(src1, src1w, src2, src2w) && can_cache(src1, src1w, dst, dstw)) {
- FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG2, src2, src2w, src1, src1w));
- FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, src1, src1w, dst, dstw));
- }
- else {
- FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, src1, src1w, src2, src2w));
- FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG2, src2, src2w, dst, dstw));
- }
- }
- else if (flags & SLOW_SRC1)
- FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, src1, src1w, dst, dstw));
- else if (flags & SLOW_SRC2)
- FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG2, src2, src2w, dst, dstw));
-
- if (flags & SLOW_SRC1)
- src1 = TMP_FREG1;
- if (flags & SLOW_SRC2)
- src2 = TMP_FREG2;
-
- switch (GET_OPCODE(op)) {
- case SLJIT_ADD_F64:
- FAIL_IF(push_inst(compiler, SELECT_FOP(op, FADDS, FADDD) | FD(dst_r) | FS1(src1) | FS2(src2), MOVABLE_INS));
- break;
-
- case SLJIT_SUB_F64:
- FAIL_IF(push_inst(compiler, SELECT_FOP(op, FSUBS, FSUBD) | FD(dst_r) | FS1(src1) | FS2(src2), MOVABLE_INS));
- break;
-
- case SLJIT_MUL_F64:
- FAIL_IF(push_inst(compiler, SELECT_FOP(op, FMULS, FMULD) | FD(dst_r) | FS1(src1) | FS2(src2), MOVABLE_INS));
- break;
-
- case SLJIT_DIV_F64:
- FAIL_IF(push_inst(compiler, SELECT_FOP(op, FDIVS, FDIVD) | FD(dst_r) | FS1(src1) | FS2(src2), MOVABLE_INS));
- break;
- }
-
- if (dst_r == TMP_FREG2)
- FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op), TMP_FREG2, dst, dstw, 0, 0));
-
- return SLJIT_SUCCESS;
-}
-
-#undef FLOAT_DATA
-#undef SELECT_FOP
-
-/* --------------------------------------------------------------------- */
-/* Other instructions */
-/* --------------------------------------------------------------------- */
-
-SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_enter(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw dstw)
-{
- CHECK_ERROR();
- CHECK(check_sljit_emit_fast_enter(compiler, dst, dstw));
- ADJUST_LOCAL_OFFSET(dst, dstw);
-
- if (FAST_IS_REG(dst))
- return push_inst(compiler, OR | D(dst) | S1(0) | S2(TMP_LINK), UNMOVABLE_INS);
-
- /* Memory. */
- FAIL_IF(emit_op_mem(compiler, WORD_DATA, TMP_LINK, dst, dstw));
- compiler->delay_slot = UNMOVABLE_INS;
- return SLJIT_SUCCESS;
-}
-
-/* --------------------------------------------------------------------- */
-/* Conditional instructions */
-/* --------------------------------------------------------------------- */
-
-SLJIT_API_FUNC_ATTRIBUTE struct sljit_label* sljit_emit_label(struct sljit_compiler *compiler)
-{
- struct sljit_label *label;
-
- CHECK_ERROR_PTR();
- CHECK_PTR(check_sljit_emit_label(compiler));
-
- if (compiler->last_label && compiler->last_label->size == compiler->size)
- return compiler->last_label;
-
- label = (struct sljit_label*)ensure_abuf(compiler, sizeof(struct sljit_label));
- PTR_FAIL_IF(!label);
- set_label(label, compiler);
- compiler->delay_slot = UNMOVABLE_INS;
- return label;
-}
-
-static sljit_ins get_cc(struct sljit_compiler *compiler, sljit_s32 type)
-{
- switch (type) {
- case SLJIT_EQUAL:
- case SLJIT_NOT_EQUAL_F64: /* Unordered. */
- return DA(0x1);
-
- case SLJIT_NOT_EQUAL:
- case SLJIT_EQUAL_F64:
- return DA(0x9);
-
- case SLJIT_LESS:
- case SLJIT_GREATER_F64: /* Unordered. */
- case SLJIT_CARRY:
- return DA(0x5);
-
- case SLJIT_GREATER_EQUAL:
- case SLJIT_LESS_EQUAL_F64:
- case SLJIT_NOT_CARRY:
- return DA(0xd);
-
- case SLJIT_GREATER:
- case SLJIT_GREATER_EQUAL_F64: /* Unordered. */
- return DA(0xc);
-
- case SLJIT_LESS_EQUAL:
- case SLJIT_LESS_F64:
- return DA(0x4);
-
- case SLJIT_SIG_LESS:
- return DA(0x3);
-
- case SLJIT_SIG_GREATER_EQUAL:
- return DA(0xb);
-
- case SLJIT_SIG_GREATER:
- return DA(0xa);
-
- case SLJIT_SIG_LESS_EQUAL:
- return DA(0x2);
-
- case SLJIT_OVERFLOW:
- if (!(compiler->status_flags_state & (SLJIT_CURRENT_FLAGS_ADD | SLJIT_CURRENT_FLAGS_SUB)))
- return DA(0x9);
- /* fallthrough */
-
- case SLJIT_UNORDERED_F64:
- return DA(0x7);
-
- case SLJIT_NOT_OVERFLOW:
- if (!(compiler->status_flags_state & (SLJIT_CURRENT_FLAGS_ADD | SLJIT_CURRENT_FLAGS_SUB)))
- return DA(0x1);
- /* fallthrough */
-
- case SLJIT_ORDERED_F64:
- return DA(0xf);
-
- default:
- SLJIT_UNREACHABLE();
- return DA(0x8);
- }
-}
-
-SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compiler *compiler, sljit_s32 type)
-{
- struct sljit_jump *jump;
-
- CHECK_ERROR_PTR();
- CHECK_PTR(check_sljit_emit_jump(compiler, type));
-
- jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump));
- PTR_FAIL_IF(!jump);
- set_jump(jump, compiler, type & SLJIT_REWRITABLE_JUMP);
- type &= 0xff;
-
- if (type < SLJIT_EQUAL_F64) {
- jump->flags |= IS_COND;
- if (((compiler->delay_slot & DST_INS_MASK) != UNMOVABLE_INS) && !(compiler->delay_slot & ICC_IS_SET))
- jump->flags |= IS_MOVABLE;
-#if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32)
- PTR_FAIL_IF(push_inst(compiler, BICC | get_cc(compiler, type ^ 1) | 5, UNMOVABLE_INS));
-#else
-#error "Implementation required"
-#endif
- }
- else if (type < SLJIT_JUMP) {
- jump->flags |= IS_COND;
- if (((compiler->delay_slot & DST_INS_MASK) != UNMOVABLE_INS) && !(compiler->delay_slot & FCC_IS_SET))
- jump->flags |= IS_MOVABLE;
-#if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32)
- PTR_FAIL_IF(push_inst(compiler, FBFCC | get_cc(compiler, type ^ 1) | 5, UNMOVABLE_INS));
-#else
-#error "Implementation required"
-#endif
- }
- else {
- if ((compiler->delay_slot & DST_INS_MASK) != UNMOVABLE_INS)
- jump->flags |= IS_MOVABLE;
- if (type >= SLJIT_FAST_CALL)
- jump->flags |= IS_CALL;
- }
-
- PTR_FAIL_IF(emit_const(compiler, TMP_REG1, 0));
- PTR_FAIL_IF(push_inst(compiler, JMPL | D(type >= SLJIT_FAST_CALL ? TMP_LINK : 0) | S1(TMP_REG1) | IMM(0), UNMOVABLE_INS));
- jump->addr = compiler->size;
- PTR_FAIL_IF(push_inst(compiler, NOP, UNMOVABLE_INS));
-
- return jump;
-}
-
-SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_call(struct sljit_compiler *compiler, sljit_s32 type,
- sljit_s32 arg_types)
-{
- CHECK_ERROR_PTR();
- CHECK_PTR(check_sljit_emit_call(compiler, type, arg_types));
-
- PTR_FAIL_IF(call_with_args(compiler, arg_types, NULL));
-
-#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \
- || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS)
- compiler->skip_checks = 1;
-#endif
-
- return sljit_emit_jump(compiler, type);
-}
-
-SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_ijump(struct sljit_compiler *compiler, sljit_s32 type, sljit_s32 src, sljit_sw srcw)
-{
- struct sljit_jump *jump = NULL;
- sljit_s32 src_r;
-
- CHECK_ERROR();
- CHECK(check_sljit_emit_ijump(compiler, type, src, srcw));
- ADJUST_LOCAL_OFFSET(src, srcw);
-
- if (FAST_IS_REG(src))
- src_r = src;
- else if (src & SLJIT_IMM) {
- jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump));
- FAIL_IF(!jump);
- set_jump(jump, compiler, JUMP_ADDR);
- jump->u.target = (sljit_uw)srcw;
-
- if ((compiler->delay_slot & DST_INS_MASK) != UNMOVABLE_INS)
- jump->flags |= IS_MOVABLE;
- if (type >= SLJIT_FAST_CALL)
- jump->flags |= IS_CALL;
-
- FAIL_IF(emit_const(compiler, TMP_REG1, 0));
- src_r = TMP_REG1;
- }
- else {
- FAIL_IF(emit_op_mem(compiler, WORD_DATA | LOAD_DATA, TMP_REG1, src, srcw));
- src_r = TMP_REG1;
- }
-
- FAIL_IF(push_inst(compiler, JMPL | D(type >= SLJIT_FAST_CALL ? TMP_LINK : 0) | S1(src_r) | IMM(0), UNMOVABLE_INS));
- if (jump)
- jump->addr = compiler->size;
- return push_inst(compiler, NOP, UNMOVABLE_INS);
-}
-
-SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_icall(struct sljit_compiler *compiler, sljit_s32 type,
- sljit_s32 arg_types,
- sljit_s32 src, sljit_sw srcw)
-{
- CHECK_ERROR();
- CHECK(check_sljit_emit_icall(compiler, type, arg_types, src, srcw));
-
- if (src & SLJIT_MEM) {
- ADJUST_LOCAL_OFFSET(src, srcw);
- FAIL_IF(emit_op_mem(compiler, WORD_DATA | LOAD_DATA, TMP_REG1, src, srcw));
- src = TMP_REG1;
- }
-
- FAIL_IF(call_with_args(compiler, arg_types, &src));
-
-#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \
- || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS)
- compiler->skip_checks = 1;
-#endif
-
- return sljit_emit_ijump(compiler, type, src, srcw);
-}
-
-SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *compiler, sljit_s32 op,
- sljit_s32 dst, sljit_sw dstw,
- sljit_s32 type)
-{
- sljit_s32 reg;
- sljit_u32 flags = HAS_FLAGS(op) ? SET_FLAGS : 0;
-
- CHECK_ERROR();
- CHECK(check_sljit_emit_op_flags(compiler, op, dst, dstw, type));
- ADJUST_LOCAL_OFFSET(dst, dstw);
-
-#if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32)
- op = GET_OPCODE(op);
- reg = (op < SLJIT_ADD && FAST_IS_REG(dst)) ? dst : TMP_REG2;
-
- compiler->cache_arg = 0;
- compiler->cache_argw = 0;
-
- if (op >= SLJIT_ADD && (dst & SLJIT_MEM))
- FAIL_IF(emit_op_mem2(compiler, WORD_DATA | LOAD_DATA, TMP_REG1, dst, dstw, dst, dstw));
-
- type &= 0xff;
- if (type < SLJIT_EQUAL_F64)
- FAIL_IF(push_inst(compiler, BICC | get_cc(compiler, type) | 3, UNMOVABLE_INS));
- else
- FAIL_IF(push_inst(compiler, FBFCC | get_cc(compiler, type) | 3, UNMOVABLE_INS));
-
- FAIL_IF(push_inst(compiler, OR | D(reg) | S1(0) | IMM(1), UNMOVABLE_INS));
- FAIL_IF(push_inst(compiler, OR | D(reg) | S1(0) | IMM(0), UNMOVABLE_INS));
-
- if (op >= SLJIT_ADD) {
- flags |= CUMULATIVE_OP | IMM_OP | ALT_KEEP_CACHE;
- if (dst & SLJIT_MEM)
- return emit_op(compiler, op, flags, dst, dstw, TMP_REG1, 0, TMP_REG2, 0);
- return emit_op(compiler, op, flags, dst, 0, dst, 0, TMP_REG2, 0);
- }
-
- if (!(dst & SLJIT_MEM))
- return SLJIT_SUCCESS;
-
- return emit_op_mem(compiler, WORD_DATA, TMP_REG2, dst, dstw);
-#else
-#error "Implementation required"
-#endif
-}
-
-SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compiler, sljit_s32 type,
- sljit_s32 dst_reg,
- sljit_s32 src, sljit_sw srcw)
-{
- CHECK_ERROR();
- CHECK(check_sljit_emit_cmov(compiler, type, dst_reg, src, srcw));
-
-#if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32)
- return sljit_emit_cmov_generic(compiler, type, dst_reg, src, srcw);;
-#else
-#error "Implementation required"
-#endif
-}
-
-SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw dstw, sljit_sw init_value)
-{
- struct sljit_const *const_;
- sljit_s32 dst_r;
-
- CHECK_ERROR_PTR();
- CHECK_PTR(check_sljit_emit_const(compiler, dst, dstw, init_value));
- ADJUST_LOCAL_OFFSET(dst, dstw);
-
- const_ = (struct sljit_const*)ensure_abuf(compiler, sizeof(struct sljit_const));
- PTR_FAIL_IF(!const_);
- set_const(const_, compiler);
-
- dst_r = FAST_IS_REG(dst) ? dst : TMP_REG2;
- PTR_FAIL_IF(emit_const(compiler, dst_r, init_value));
-
- if (dst & SLJIT_MEM)
- PTR_FAIL_IF(emit_op_mem(compiler, WORD_DATA, TMP_REG2, dst, dstw));
- return const_;
-}
-
-SLJIT_API_FUNC_ATTRIBUTE struct sljit_put_label* sljit_emit_put_label(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw dstw)
-{
- struct sljit_put_label *put_label;
- sljit_s32 dst_r;
-
- CHECK_ERROR_PTR();
- CHECK_PTR(check_sljit_emit_put_label(compiler, dst, dstw));
- ADJUST_LOCAL_OFFSET(dst, dstw);
-
- put_label = (struct sljit_put_label*)ensure_abuf(compiler, sizeof(struct sljit_put_label));
- PTR_FAIL_IF(!put_label);
- set_put_label(put_label, compiler, 0);
-
- dst_r = FAST_IS_REG(dst) ? dst : TMP_REG2;
- PTR_FAIL_IF(emit_const(compiler, dst_r, 0));
-
- if (dst & SLJIT_MEM)
- PTR_FAIL_IF(emit_op_mem(compiler, WORD_DATA, TMP_REG2, dst, dstw));
- return put_label;
-}
diff --git a/src/3rdparty/pcre2/src/sljit/sljitNativeX86_32.c b/src/3rdparty/pcre2/src/sljit/sljitNativeX86_32.c
index ba4a1ebbc2..59ea04a5c8 100644
--- a/src/3rdparty/pcre2/src/sljit/sljitNativeX86_32.c
+++ b/src/3rdparty/pcre2/src/sljit/sljitNativeX86_32.c
@@ -283,28 +283,25 @@ static sljit_s32 emit_vex_instruction(struct sljit_compiler *compiler, sljit_uw
/* Enter / return */
/* --------------------------------------------------------------------- */
-static sljit_u8* generate_far_jump_code(struct sljit_jump *jump, sljit_u8 *code_ptr, sljit_sw executable_offset)
+static sljit_u8* detect_far_jump_type(struct sljit_jump *jump, sljit_u8 *code_ptr, sljit_sw executable_offset)
{
sljit_uw type = jump->flags >> TYPE_SHIFT;
if (type == SLJIT_JUMP) {
*code_ptr++ = JMP_i32;
- jump->addr++;
- }
- else if (type >= SLJIT_FAST_CALL) {
+ } else if (type >= SLJIT_FAST_CALL) {
*code_ptr++ = CALL_i32;
- jump->addr++;
- }
- else {
+ } else {
*code_ptr++ = GROUP_0F;
*code_ptr++ = get_jump_code(type);
- jump->addr += 2;
}
- if (jump->flags & JUMP_LABEL)
- jump->flags |= PATCH_MW;
- else
+ jump->addr = (sljit_uw)code_ptr;
+
+ if (jump->flags & JUMP_ADDR)
sljit_unaligned_store_sw(code_ptr, (sljit_sw)(jump->u.target - (jump->addr + 4) - (sljit_uw)executable_offset));
+ else
+ jump->flags |= PATCH_MW;
code_ptr += 4;
return code_ptr;
@@ -1249,6 +1246,68 @@ static sljit_s32 sljit_emit_get_return_address(struct sljit_compiler *compiler,
/* Other operations */
/* --------------------------------------------------------------------- */
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_select(struct sljit_compiler *compiler, sljit_s32 type,
+ sljit_s32 dst_reg,
+ sljit_s32 src1, sljit_sw src1w,
+ sljit_s32 src2_reg)
+{
+ sljit_s32 dst = dst_reg;
+ sljit_sw dstw = 0;
+ sljit_sw src2w = 0;
+
+ CHECK_ERROR();
+ CHECK(check_sljit_emit_select(compiler, type, dst_reg, src1, src1w, src2_reg));
+
+ ADJUST_LOCAL_OFFSET(src1, src1w);
+
+ CHECK_EXTRA_REGS(dst, dstw, (void)0);
+ CHECK_EXTRA_REGS(src1, src1w, (void)0);
+ CHECK_EXTRA_REGS(src2_reg, src2w, (void)0);
+
+ type &= ~SLJIT_32;
+
+ if (dst & SLJIT_MEM) {
+ if (src1 == SLJIT_IMM || (!(src1 & SLJIT_MEM) && (src2_reg & SLJIT_MEM))) {
+ EMIT_MOV(compiler, TMP_REG1, 0, src1, src1w);
+ src1 = src2_reg;
+ src1w = src2w;
+ type ^= 0x1;
+ } else
+ EMIT_MOV(compiler, TMP_REG1, 0, src2_reg, src2w);
+
+ dst_reg = TMP_REG1;
+ } else {
+ if (dst_reg != src2_reg) {
+ if (dst_reg == src1) {
+ src1 = src2_reg;
+ src1w = src2w;
+ type ^= 0x1;
+ } else if (ADDRESSING_DEPENDS_ON(src1, dst_reg)) {
+ EMIT_MOV(compiler, dst_reg, 0, src1, src1w);
+ src1 = src2_reg;
+ src1w = src2w;
+ type ^= 0x1;
+ } else
+ EMIT_MOV(compiler, dst_reg, 0, src2_reg, src2w);
+ }
+ }
+
+ if (sljit_has_cpu_feature(SLJIT_HAS_CMOV) && (src1 != SLJIT_IMM || dst_reg != TMP_REG1)) {
+ if (SLJIT_UNLIKELY(src1 == SLJIT_IMM)) {
+ EMIT_MOV(compiler, TMP_REG1, 0, src1, src1w);
+ src1 = TMP_REG1;
+ src1w = 0;
+ }
+
+ FAIL_IF(emit_groupf(compiler, U8(get_jump_code((sljit_uw)type) - 0x40), dst_reg, src1, src1w));
+ } else
+ FAIL_IF(emit_cmov_generic(compiler, type, dst_reg, src1, src1w));
+
+ if (dst & SLJIT_MEM)
+ return emit_mov(compiler, dst, dstw, TMP_REG1, 0);
+ return SLJIT_SUCCESS;
+}
+
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_mem(struct sljit_compiler *compiler, sljit_s32 type,
sljit_s32 reg,
sljit_s32 mem, sljit_sw memw)
@@ -1449,10 +1508,10 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fset32(struct sljit_compiler *comp
if (u.imm == 0) {
inst[2] = PXOR_x_xm;
- inst[3] = U8(freg | (freg << 3) | MOD_REG);
+ inst[3] = U8(freg_map[freg] | (freg_map[freg] << 3) | MOD_REG);
} else {
inst[2] = MOVD_x_rm;
- inst[3] = U8(reg_map[TMP_REG1] | (freg << 3) | MOD_REG);
+ inst[3] = U8(reg_map[TMP_REG1] | (freg_map[freg] << 3) | MOD_REG);
}
return SLJIT_SUCCESS;
@@ -1462,7 +1521,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fset64(struct sljit_compiler *comp
sljit_s32 freg, sljit_f64 value)
{
sljit_u8 *inst;
- sljit_s32 tmp_freg = freg;
union {
sljit_s32 imm[2];
sljit_f64 value;
@@ -1478,8 +1536,18 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fset64(struct sljit_compiler *comp
return emit_groupf(compiler, PXOR_x_xm | EX86_PREF_66 | EX86_SSE2, freg, freg, 0);
EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_IMM, u.imm[1]);
- } else
+ } else {
+ SLJIT_ASSERT(cpu_feature_list != 0);
+
+ if (!(cpu_feature_list & CPU_FEATURE_SSE41) && u.imm[1] != 0 && u.imm[0] != u.imm[1]) {
+ EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), 0, SLJIT_IMM, u.imm[0]);
+ EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), sizeof(sljit_sw), SLJIT_IMM, u.imm[1]);
+
+ return emit_groupf(compiler, MOVLPD_x_m | EX86_SSE2, freg, SLJIT_MEM1(SLJIT_SP), 0);
+ }
+
EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_IMM, u.imm[0]);
+ }
FAIL_IF(emit_groupf(compiler, MOVD_x_rm | EX86_PREF_66 | EX86_SSE2_OP1, freg, TMP_REG1, 0));
@@ -1493,23 +1561,17 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fset64(struct sljit_compiler *comp
inst[0] = GROUP_0F;
inst[1] = SHUFPS_x_xm;
- inst[2] = U8(MOD_REG | (freg << 3) | freg);
+ inst[2] = U8(MOD_REG | (freg_map[freg] << 3) | freg_map[freg]);
inst[3] = 0x51;
return SLJIT_SUCCESS;
}
if (u.imm[0] != u.imm[1]) {
- SLJIT_ASSERT(u.imm[1] != 0 && cpu_feature_list != 0);
-
+ SLJIT_ASSERT(cpu_feature_list & CPU_FEATURE_SSE41);
EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_IMM, u.imm[1]);
- if (cpu_feature_list & CPU_FEATURE_SSE41) {
- FAIL_IF(emit_groupf_ext(compiler, PINSRD_x_rm_i8 | EX86_PREF_66 | VEX_OP_0F3A | EX86_SSE2_OP1, freg, TMP_REG1, 0));
- return emit_byte(compiler, 1);
- }
-
- FAIL_IF(emit_groupf(compiler, MOVD_x_rm | EX86_PREF_66 | EX86_SSE2_OP1, TMP_FREG, TMP_REG1, 0));
- tmp_freg = TMP_FREG;
+ FAIL_IF(emit_groupf_ext(compiler, PINSRD_x_rm_i8 | EX86_PREF_66 | VEX_OP_0F3A | EX86_SSE2_OP1, freg, TMP_REG1, 0));
+ return emit_byte(compiler, 1);
}
inst = (sljit_u8*)ensure_buf(compiler, 1 + 3);
@@ -1518,7 +1580,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fset64(struct sljit_compiler *comp
inst[0] = GROUP_0F;
inst[1] = UNPCKLPS_x_xm;
- inst[2] = U8(MOD_REG | (freg << 3) | tmp_freg);
+ inst[2] = U8(MOD_REG | (freg_map[freg] << 3) | freg_map[freg]);
return SLJIT_SUCCESS;
}
@@ -1581,7 +1643,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fcopy(struct sljit_compiler *compi
inst[0] = GROUP_66;
inst[1] = GROUP_0F;
inst[2] = PSHUFD_x_xm;
- inst[3] = U8(MOD_REG | (TMP_FREG << 3) | freg);
+ inst[3] = U8(MOD_REG | (TMP_FREG << 3) | freg_map[freg]);
inst[4] = 1;
} else if (reg != 0)
FAIL_IF(emit_groupf(compiler, MOVD_x_rm | EX86_PREF_66 | EX86_SSE2_OP1, TMP_FREG, reg, regw));
@@ -1597,7 +1659,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fcopy(struct sljit_compiler *compi
inst[0] = GROUP_0F;
inst[1] = UNPCKLPS_x_xm;
- inst[2] = U8(MOD_REG | (freg << 3) | (reg == 0 ? freg : TMP_FREG));
+ inst[2] = U8(MOD_REG | (freg_map[freg] << 3) | freg_map[reg == 0 ? freg : TMP_FREG]);
} else
FAIL_IF(emit_groupf(compiler, MOVD_rm_x | EX86_PREF_66 | EX86_SSE2_OP1, TMP_FREG, reg, regw));
diff --git a/src/3rdparty/pcre2/src/sljit/sljitNativeX86_64.c b/src/3rdparty/pcre2/src/sljit/sljitNativeX86_64.c
index f313f3f038..1ab79293c7 100644
--- a/src/3rdparty/pcre2/src/sljit/sljitNativeX86_64.c
+++ b/src/3rdparty/pcre2/src/sljit/sljitNativeX86_64.c
@@ -358,26 +358,28 @@ static sljit_s32 emit_vex_instruction(struct sljit_compiler *compiler, sljit_uw
/* Enter / return */
/* --------------------------------------------------------------------- */
-static sljit_u8* generate_far_jump_code(struct sljit_jump *jump, sljit_u8 *code_ptr)
+static sljit_u8* detect_far_jump_type(struct sljit_jump *jump, sljit_u8 *code_ptr)
{
sljit_uw type = jump->flags >> TYPE_SHIFT;
- int short_addr = !(jump->flags & SLJIT_REWRITABLE_JUMP) && !(jump->flags & JUMP_LABEL) && (jump->u.target <= 0xffffffff);
+ int short_addr = !(jump->flags & SLJIT_REWRITABLE_JUMP) && (jump->flags & JUMP_ADDR) && (jump->u.target <= 0xffffffff);
/* The relative jump below specialized for this case. */
- SLJIT_ASSERT(reg_map[TMP_REG2] >= 8);
+ SLJIT_ASSERT(reg_map[TMP_REG2] >= 8 && TMP_REG2 != SLJIT_TMP_DEST_REG);
if (type < SLJIT_JUMP) {
/* Invert type. */
- *code_ptr++ = U8(get_jump_code(type ^ 0x1) - 0x10);
- *code_ptr++ = short_addr ? (6 + 3) : (10 + 3);
+ code_ptr[0] = U8(get_jump_code(type ^ 0x1) - 0x10);
+ code_ptr[1] = short_addr ? (6 + 3) : (10 + 3);
+ code_ptr += 2;
}
- *code_ptr++ = short_addr ? REX_B : (REX_W | REX_B);
- *code_ptr++ = MOV_r_i32 | reg_lmap[TMP_REG2];
+ code_ptr[0] = short_addr ? REX_B : (REX_W | REX_B);
+ code_ptr[1] = MOV_r_i32 | reg_lmap[TMP_REG2];
+ code_ptr += 2;
jump->addr = (sljit_uw)code_ptr;
- if (jump->flags & JUMP_LABEL)
+ if (!(jump->flags & JUMP_ADDR))
jump->flags |= PATCH_MD;
else if (short_addr)
sljit_unaligned_store_s32(code_ptr, (sljit_s32)jump->u.target);
@@ -386,60 +388,62 @@ static sljit_u8* generate_far_jump_code(struct sljit_jump *jump, sljit_u8 *code_
code_ptr += short_addr ? sizeof(sljit_s32) : sizeof(sljit_sw);
- *code_ptr++ = REX_B;
- *code_ptr++ = GROUP_FF;
- *code_ptr++ = U8(MOD_REG | (type >= SLJIT_FAST_CALL ? CALL_rm : JMP_rm) | reg_lmap[TMP_REG2]);
+ code_ptr[0] = REX_B;
+ code_ptr[1] = GROUP_FF;
+ code_ptr[2] = U8(MOD_REG | (type >= SLJIT_FAST_CALL ? CALL_rm : JMP_rm) | reg_lmap[TMP_REG2]);
- return code_ptr;
+ return code_ptr + 3;
}
-static sljit_u8* generate_put_label_code(struct sljit_put_label *put_label, sljit_u8 *code_ptr, sljit_uw max_label)
+static sljit_u8* generate_mov_addr_code(struct sljit_jump *jump, sljit_u8 *code_ptr, sljit_u8 *code, sljit_sw executable_offset)
{
- if (max_label > HALFWORD_MAX) {
- put_label->addr -= put_label->flags;
- put_label->flags = PATCH_MD;
- return code_ptr;
- }
+ sljit_uw addr;
+ sljit_sw diff;
+ SLJIT_UNUSED_ARG(executable_offset);
- if (put_label->flags == 0) {
- /* Destination is register. */
- code_ptr = (sljit_u8*)put_label->addr - 2 - sizeof(sljit_uw);
+ SLJIT_ASSERT(((jump->flags >> JUMP_SIZE_SHIFT) & 0x1f) <= 10);
+ if (jump->flags & JUMP_ADDR)
+ addr = jump->u.target;
+ else
+ addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code, executable_offset) + jump->u.label->size;
- SLJIT_ASSERT((code_ptr[0] & 0xf8) == REX_W);
- SLJIT_ASSERT((code_ptr[1] & 0xf8) == MOV_r_i32);
+ if (addr > 0xffffffffl) {
+ diff = (sljit_sw)addr - (sljit_sw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);
- if ((code_ptr[0] & 0x07) != 0) {
- code_ptr[0] = U8(code_ptr[0] & ~0x08);
- code_ptr += 2 + sizeof(sljit_s32);
- }
- else {
- code_ptr[0] = code_ptr[1];
- code_ptr += 1 + sizeof(sljit_s32);
+ if (diff <= HALFWORD_MAX && diff >= HALFWORD_MIN) {
+ SLJIT_ASSERT(((jump->flags >> JUMP_SIZE_SHIFT) & 0x1f) >= 7);
+ code_ptr -= SSIZE_OF(s32) - 1;
+
+ SLJIT_ASSERT((code_ptr[-3 - SSIZE_OF(s32)] & 0xf8) == REX_W);
+ SLJIT_ASSERT((code_ptr[-2 - SSIZE_OF(s32)] & 0xf8) == MOV_r_i32);
+
+ code_ptr[-3 - SSIZE_OF(s32)] = U8(REX_W | ((code_ptr[-3 - SSIZE_OF(s32)] & 0x1) << 2));
+ code_ptr[-1 - SSIZE_OF(s32)] = U8(((code_ptr[-2 - SSIZE_OF(s32)] & 0x7) << 3) | 0x5);
+ code_ptr[-2 - SSIZE_OF(s32)] = LEA_r_m;
+
+ jump->flags |= PATCH_MW;
+ return code_ptr;
}
- put_label->addr = (sljit_uw)code_ptr;
+ jump->flags |= PATCH_MD;
return code_ptr;
}
- code_ptr -= put_label->flags + (2 + sizeof(sljit_uw));
- SLJIT_MEMMOVE(code_ptr, code_ptr + (2 + sizeof(sljit_uw)), put_label->flags);
+ code_ptr -= 2 + sizeof(sljit_uw);
SLJIT_ASSERT((code_ptr[0] & 0xf8) == REX_W);
+ SLJIT_ASSERT((code_ptr[1] & 0xf8) == MOV_r_i32);
- if ((code_ptr[1] & 0xf8) == MOV_r_i32) {
- code_ptr += 2 + sizeof(sljit_uw);
- SLJIT_ASSERT((code_ptr[0] & 0xf8) == REX_W);
+ if ((code_ptr[0] & 0x07) != 0) {
+ SLJIT_ASSERT(((jump->flags >> JUMP_SIZE_SHIFT) & 0x1f) >= 6);
+ code_ptr[0] = U8(code_ptr[0] & ~0x08);
+ code_ptr += 2 + sizeof(sljit_s32);
+ } else {
+ SLJIT_ASSERT(((jump->flags >> JUMP_SIZE_SHIFT) & 0x1f) >= 5);
+ code_ptr[0] = code_ptr[1];
+ code_ptr += 1 + sizeof(sljit_s32);
}
- SLJIT_ASSERT(code_ptr[1] == MOV_rm_r);
-
- code_ptr[0] = U8(code_ptr[0] & ~0x4);
- code_ptr[1] = MOV_rm_i32;
- code_ptr[2] = U8(code_ptr[2] & ~(0x7 << 3));
-
- code_ptr = (sljit_u8*)(put_label->addr - (2 + sizeof(sljit_uw)) + sizeof(sljit_s32));
- put_label->addr = (sljit_uw)code_ptr;
- put_label->flags = 0;
return code_ptr;
}
@@ -1003,6 +1007,46 @@ static sljit_s32 sljit_emit_get_return_address(struct sljit_compiler *compiler,
/* Other operations */
/* --------------------------------------------------------------------- */
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_select(struct sljit_compiler *compiler, sljit_s32 type,
+ sljit_s32 dst_reg,
+ sljit_s32 src1, sljit_sw src1w,
+ sljit_s32 src2_reg)
+{
+ CHECK_ERROR();
+ CHECK(check_sljit_emit_select(compiler, type, dst_reg, src1, src1w, src2_reg));
+
+ ADJUST_LOCAL_OFFSET(src1, src1w);
+
+ compiler->mode32 = type & SLJIT_32;
+ type &= ~SLJIT_32;
+
+ if (dst_reg != src2_reg) {
+ if (dst_reg == src1) {
+ src1 = src2_reg;
+ src1w = 0;
+ type ^= 0x1;
+ } else if (ADDRESSING_DEPENDS_ON(src1, dst_reg)) {
+ EMIT_MOV(compiler, dst_reg, 0, src1, src1w);
+ src1 = src2_reg;
+ src1w = 0;
+ type ^= 0x1;
+ } else
+ EMIT_MOV(compiler, dst_reg, 0, src2_reg, 0);
+ }
+
+ if (sljit_has_cpu_feature(SLJIT_HAS_CMOV)) {
+ if (SLJIT_UNLIKELY(src1 == SLJIT_IMM)) {
+ EMIT_MOV(compiler, TMP_REG2, 0, src1, src1w);
+ src1 = TMP_REG2;
+ src1w = 0;
+ }
+
+ return emit_groupf(compiler, U8(get_jump_code((sljit_uw)type) - 0x40), dst_reg, src1, src1w);
+ }
+
+ return emit_cmov_generic(compiler, type, dst_reg, src1, src1w);
+}
+
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_mem(struct sljit_compiler *compiler, sljit_s32 type,
sljit_s32 reg,
sljit_s32 mem, sljit_sw memw)
diff --git a/src/3rdparty/pcre2/src/sljit/sljitNativeX86_common.c b/src/3rdparty/pcre2/src/sljit/sljitNativeX86_common.c
index c2c0421349..ecb7e9be3b 100644
--- a/src/3rdparty/pcre2/src/sljit/sljitNativeX86_common.c
+++ b/src/3rdparty/pcre2/src/sljit/sljitNativeX86_common.c
@@ -24,12 +24,6 @@
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#if defined(__has_feature)
-#if __has_feature(memory_sanitizer)
-#include <sanitizer/msan_interface.h>
-#endif /* __has_feature(memory_sanitizer) */
-#endif /* defined(__has_feature) */
-
SLJIT_API_FUNC_ATTRIBUTE const char* sljit_get_platform_name(void)
{
return "x86" SLJIT_CPUINFO;
@@ -72,7 +66,6 @@ SLJIT_API_FUNC_ATTRIBUTE const char* sljit_get_platform_name(void)
#if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)
-
static const sljit_u8 reg_map[SLJIT_NUMBER_OF_REGISTERS + 3] = {
0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 5, 7, 6, 4, 3
};
@@ -379,6 +372,11 @@ static const sljit_u8 freg_lmap[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 2] = {
#define RET() (*inst++ = RET_near)
#define RET_I16(n) (*inst++ = RET_i16, *inst++ = U8(n), *inst++ = 0)
+#define SLJIT_INST_LABEL 255
+#define SLJIT_INST_JUMP 254
+#define SLJIT_INST_MOV_ADDR 253
+#define SLJIT_INST_CONST 252
+
/* Multithreading does not affect these static variables, since they store
built-in CPU features. Therefore they can be overwritten by different threads
if they detect the CPU features in the same time. */
@@ -392,6 +390,7 @@ static const sljit_u8 freg_lmap[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 2] = {
#define CPU_FEATURE_CMOV 0x020
#define CPU_FEATURE_AVX 0x040
#define CPU_FEATURE_AVX2 0x080
+#define CPU_FEATURE_OSXSAVE 0x100
static sljit_u32 cpu_feature_list = 0;
@@ -490,22 +489,50 @@ static void execute_cpu_id(sljit_u32 info[4])
}
#endif /* _MSC_VER && _MSC_VER >= 1400 */
+}
-#if defined(__has_feature)
-#if __has_feature(memory_sanitizer)
-__msan_unpoison(info, 4 * sizeof(sljit_u32));
-#endif /* __has_feature(memory_sanitizer) */
-#endif /* defined(__has_feature) */
+static sljit_u32 execute_get_xcr0_low(void)
+{
+ sljit_u32 xcr0;
+
+#if defined(_MSC_VER) && _MSC_VER >= 1400
+ xcr0 = (sljit_u32)_xgetbv(0);
+
+#elif defined(__GNUC__) || defined(__INTEL_COMPILER) || defined(__SUNPRO_C) || defined(__TINYC__)
+
+ /* AT&T syntax. */
+ __asm__ (
+ "xorl %%ecx, %%ecx\n"
+ "xgetbv\n"
+ : "=a" (xcr0)
+ :
+#if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)
+ : "ecx", "edx"
+#else /* !SLJIT_CONFIG_X86_32 */
+ : "rcx", "rdx"
+#endif /* SLJIT_CONFIG_X86_32 */
+ );
+
+#else /* _MSC_VER < 1400 */
+
+ /* Intel syntax. */
+ __asm {
+ mov ecx, 0
+ xgetbv
+ mov xcr0, eax
+ }
+
+#endif /* _MSC_VER && _MSC_VER >= 1400 */
+ return xcr0;
}
static void get_cpu_features(void)
{
sljit_u32 feature_list = CPU_FEATURE_DETECTED;
- sljit_u32 info[4];
+ sljit_u32 info[4] = {0};
sljit_u32 max_id;
- info[0] = 0;
execute_cpu_id(info);
max_id = info[0];
@@ -526,6 +553,8 @@ static void get_cpu_features(void)
if (info[2] & 0x80000)
feature_list |= CPU_FEATURE_SSE41;
+ if (info[2] & 0x8000000)
+ feature_list |= CPU_FEATURE_OSXSAVE;
if (info[2] & 0x10000000)
feature_list |= CPU_FEATURE_AVX;
#if (defined SLJIT_DETECT_SSE2 && SLJIT_DETECT_SSE2)
@@ -537,12 +566,14 @@ static void get_cpu_features(void)
}
info[0] = 0x80000001;
- info[2] = 0; /* Silences an incorrect compiler warning. */
execute_cpu_id(info);
if (info[2] & 0x20)
feature_list |= CPU_FEATURE_LZCNT;
+ if ((feature_list & CPU_FEATURE_OSXSAVE) && (execute_get_xcr0_low() & 0x4) == 0)
+ feature_list &= ~(sljit_u32)(CPU_FEATURE_AVX | CPU_FEATURE_AVX2);
+
cpu_feature_list = feature_list;
}
@@ -617,52 +648,47 @@ static sljit_u8 get_jump_code(sljit_uw type)
}
#if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)
-static sljit_u8* generate_far_jump_code(struct sljit_jump *jump, sljit_u8 *code_ptr, sljit_sw executable_offset);
-#else
-static sljit_u8* generate_far_jump_code(struct sljit_jump *jump, sljit_u8 *code_ptr);
-static sljit_u8* generate_put_label_code(struct sljit_put_label *put_label, sljit_u8 *code_ptr, sljit_uw max_label);
-#endif
+static sljit_u8* detect_far_jump_type(struct sljit_jump *jump, sljit_u8 *code_ptr, sljit_sw executable_offset);
+#else /* !SLJIT_CONFIG_X86_32 */
+static sljit_u8* detect_far_jump_type(struct sljit_jump *jump, sljit_u8 *code_ptr);
+static sljit_u8* generate_mov_addr_code(struct sljit_jump *jump, sljit_u8 *code_ptr, sljit_u8 *code, sljit_sw executable_offset);
+#endif /* SLJIT_CONFIG_X86_32 */
-static sljit_u8* generate_near_jump_code(struct sljit_jump *jump, sljit_u8 *code_ptr, sljit_u8 *code, sljit_sw executable_offset)
+static sljit_u8* detect_near_jump_type(struct sljit_jump *jump, sljit_u8 *code_ptr, sljit_u8 *code, sljit_sw executable_offset)
{
sljit_uw type = jump->flags >> TYPE_SHIFT;
sljit_s32 short_jump;
sljit_uw label_addr;
- if (jump->flags & JUMP_LABEL)
- label_addr = (sljit_uw)(code + jump->u.label->size);
- else
+ if (jump->flags & JUMP_ADDR)
label_addr = jump->u.target - (sljit_uw)executable_offset;
+ else
+ label_addr = (sljit_uw)(code + jump->u.label->size);
#if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
- if ((sljit_sw)(label_addr - (jump->addr + 2)) > HALFWORD_MAX || (sljit_sw)(label_addr - (jump->addr + 6)) < HALFWORD_MIN)
- return generate_far_jump_code(jump, code_ptr);
-#endif
+ if ((sljit_sw)(label_addr - (sljit_uw)(code_ptr + 6)) > HALFWORD_MAX || (sljit_sw)(label_addr - (sljit_uw)(code_ptr + 5)) < HALFWORD_MIN)
+ return detect_far_jump_type(jump, code_ptr);
+#endif /* SLJIT_CONFIG_X86_64 */
- short_jump = (sljit_sw)(label_addr - (jump->addr + 2)) >= -128 && (sljit_sw)(label_addr - (jump->addr + 2)) <= 127;
+ short_jump = (sljit_sw)(label_addr - (sljit_uw)(code_ptr + 2)) >= -0x80 && (sljit_sw)(label_addr - (sljit_uw)(code_ptr + 2)) <= 0x7f;
if (type == SLJIT_JUMP) {
if (short_jump)
*code_ptr++ = JMP_i8;
else
*code_ptr++ = JMP_i32;
- jump->addr++;
- }
- else if (type >= SLJIT_FAST_CALL) {
+ } else if (type > SLJIT_JUMP) {
short_jump = 0;
*code_ptr++ = CALL_i32;
- jump->addr++;
- }
- else if (short_jump) {
+ } else if (short_jump) {
*code_ptr++ = U8(get_jump_code(type) - 0x10);
- jump->addr++;
- }
- else {
+ } else {
*code_ptr++ = GROUP_0F;
*code_ptr++ = get_jump_code(type);
- jump->addr += 2;
}
+ jump->addr = (sljit_uw)code_ptr;
+
if (short_jump) {
jump->flags |= PATCH_MB;
code_ptr += sizeof(sljit_s8);
@@ -674,7 +700,172 @@ static sljit_u8* generate_near_jump_code(struct sljit_jump *jump, sljit_u8 *code
return code_ptr;
}
-SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compiler)
+static void generate_jump_or_mov_addr(struct sljit_jump *jump, sljit_sw executable_offset)
+{
+ sljit_uw flags = jump->flags;
+ sljit_uw addr = (flags & JUMP_ADDR) ? jump->u.target : jump->u.label->u.addr;
+ sljit_uw jump_addr = jump->addr;
+ SLJIT_UNUSED_ARG(executable_offset);
+
+ if (SLJIT_UNLIKELY(flags & JUMP_MOV_ADDR)) {
+#if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)
+ sljit_unaligned_store_sw((void*)(jump_addr - sizeof(sljit_sw)), (sljit_sw)addr);
+#else /* SLJIT_CONFIG_X86_32 */
+ if (flags & PATCH_MD) {
+ SLJIT_ASSERT(addr > HALFWORD_MAX);
+ sljit_unaligned_store_sw((void*)(jump_addr - sizeof(sljit_sw)), (sljit_sw)addr);
+ return;
+ }
+
+ if (flags & PATCH_MW) {
+ addr -= (sljit_uw)SLJIT_ADD_EXEC_OFFSET((sljit_u8*)jump_addr, executable_offset);
+ SLJIT_ASSERT((sljit_sw)addr <= HALFWORD_MAX && (sljit_sw)addr >= HALFWORD_MIN);
+ } else {
+ SLJIT_ASSERT(addr <= HALFWORD_MAX);
+ }
+ sljit_unaligned_store_s32((void*)(jump_addr - sizeof(sljit_s32)), (sljit_s32)addr);
+#endif /* !SLJIT_CONFIG_X86_32 */
+ return;
+ }
+
+#if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
+ if (SLJIT_UNLIKELY(flags & PATCH_MD)) {
+ SLJIT_ASSERT(!(flags & JUMP_ADDR));
+ sljit_unaligned_store_sw((void*)jump_addr, (sljit_sw)addr);
+ return;
+ }
+#endif /* SLJIT_CONFIG_X86_64 */
+
+ addr -= (sljit_uw)SLJIT_ADD_EXEC_OFFSET((sljit_u8*)jump_addr, executable_offset);
+
+ if (flags & PATCH_MB) {
+ addr -= sizeof(sljit_s8);
+ SLJIT_ASSERT((sljit_sw)addr <= 0x7f && (sljit_sw)addr >= -0x80);
+ *(sljit_u8*)jump_addr = U8(addr);
+ return;
+ } else if (flags & PATCH_MW) {
+ addr -= sizeof(sljit_s32);
+#if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)
+ sljit_unaligned_store_sw((void*)jump_addr, (sljit_sw)addr);
+#else /* !SLJIT_CONFIG_X86_32 */
+ SLJIT_ASSERT((sljit_sw)addr <= HALFWORD_MAX && (sljit_sw)addr >= HALFWORD_MIN);
+ sljit_unaligned_store_s32((void*)jump_addr, (sljit_s32)addr);
+#endif /* SLJIT_CONFIG_X86_32 */
+ }
+}
+
+static void reduce_code_size(struct sljit_compiler *compiler)
+{
+ struct sljit_label *label;
+ struct sljit_jump *jump;
+ sljit_uw next_label_size;
+ sljit_uw next_jump_addr;
+ sljit_uw next_min_addr;
+ sljit_uw size_reduce = 0;
+ sljit_sw diff;
+ sljit_uw type;
+#if (defined SLJIT_DEBUG && SLJIT_DEBUG)
+ sljit_uw size_reduce_max;
+#endif /* SLJIT_DEBUG */
+
+ label = compiler->labels;
+ jump = compiler->jumps;
+
+ next_label_size = SLJIT_GET_NEXT_SIZE(label);
+ next_jump_addr = SLJIT_GET_NEXT_ADDRESS(jump);
+
+ while (1) {
+ next_min_addr = next_label_size;
+ if (next_jump_addr < next_min_addr)
+ next_min_addr = next_jump_addr;
+
+ if (next_min_addr == SLJIT_MAX_ADDRESS)
+ break;
+
+ if (next_min_addr == next_label_size) {
+ label->size -= size_reduce;
+
+ label = label->next;
+ next_label_size = SLJIT_GET_NEXT_SIZE(label);
+ }
+
+ if (next_min_addr != next_jump_addr)
+ continue;
+
+ if (!(jump->flags & JUMP_MOV_ADDR)) {
+#if (defined SLJIT_DEBUG && SLJIT_DEBUG)
+ size_reduce_max = size_reduce + (((jump->flags >> TYPE_SHIFT) < SLJIT_JUMP) ? CJUMP_MAX_SIZE : JUMP_MAX_SIZE);
+#endif /* SLJIT_DEBUG */
+
+ if (!(jump->flags & SLJIT_REWRITABLE_JUMP)) {
+ if (jump->flags & JUMP_ADDR) {
+#if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
+ if (jump->u.target <= 0xffffffffl)
+ size_reduce += sizeof(sljit_s32);
+#endif /* SLJIT_CONFIG_X86_64 */
+ } else {
+ /* Unit size: instruction. */
+ diff = (sljit_sw)jump->u.label->size - (sljit_sw)(jump->addr - size_reduce);
+ type = jump->flags >> TYPE_SHIFT;
+
+#if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
+ if (type == SLJIT_JUMP) {
+ if (diff <= 0x7f + 2 && diff >= -0x80 + 2)
+ size_reduce += JUMP_MAX_SIZE - 2;
+ else if (diff <= HALFWORD_MAX + 5 && diff >= HALFWORD_MIN + 5)
+ size_reduce += JUMP_MAX_SIZE - 5;
+ } else if (type < SLJIT_JUMP) {
+ if (diff <= 0x7f + 2 && diff >= -0x80 + 2)
+ size_reduce += CJUMP_MAX_SIZE - 2;
+ else if (diff <= HALFWORD_MAX + 6 && diff >= HALFWORD_MIN + 6)
+ size_reduce += CJUMP_MAX_SIZE - 6;
+ } else {
+ if (diff <= HALFWORD_MAX + 5 && diff >= HALFWORD_MIN + 5)
+ size_reduce += JUMP_MAX_SIZE - 5;
+ }
+#else /* !SLJIT_CONFIG_X86_64 */
+ if (type == SLJIT_JUMP) {
+ if (diff <= 0x7f + 2 && diff >= -0x80 + 2)
+ size_reduce += JUMP_MAX_SIZE - 2;
+ } else if (type < SLJIT_JUMP) {
+ if (diff <= 0x7f + 2 && diff >= -0x80 + 2)
+ size_reduce += CJUMP_MAX_SIZE - 2;
+ }
+#endif /* SLJIT_CONFIG_X86_64 */
+ }
+ }
+
+#if (defined SLJIT_DEBUG && SLJIT_DEBUG)
+ jump->flags |= (size_reduce_max - size_reduce) << JUMP_SIZE_SHIFT;
+#endif /* SLJIT_DEBUG */
+#if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
+ } else {
+#if (defined SLJIT_DEBUG && SLJIT_DEBUG)
+ size_reduce_max = size_reduce + 10;
+#endif /* SLJIT_DEBUG */
+
+ if (!(jump->flags & JUMP_ADDR)) {
+ diff = (sljit_sw)jump->u.label->size - (sljit_sw)(jump->addr - size_reduce - 3);
+
+ if (diff <= HALFWORD_MAX && diff >= HALFWORD_MIN)
+ size_reduce += 3;
+ } else if (jump->u.target <= 0xffffffffl)
+ size_reduce += (jump->flags & MOV_ADDR_HI) ? 4 : 5;
+
+#if (defined SLJIT_DEBUG && SLJIT_DEBUG)
+ jump->flags |= (size_reduce_max - size_reduce) << JUMP_SIZE_SHIFT;
+#endif /* SLJIT_DEBUG */
+#endif /* SLJIT_CONFIG_X86_64 */
+ }
+
+ jump = jump->next;
+ next_jump_addr = SLJIT_GET_NEXT_ADDRESS(jump);
+ }
+
+ compiler->size -= size_reduce;
+}
+
+SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compiler, sljit_s32 options, void *exec_allocator_data)
{
struct sljit_memory_fragment *buf;
sljit_u8 *code;
@@ -683,77 +874,82 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil
sljit_u8 *buf_end;
sljit_u8 len;
sljit_sw executable_offset;
- sljit_uw jump_addr;
+#if (defined SLJIT_DEBUG && SLJIT_DEBUG)
+ sljit_uw addr;
+#endif /* SLJIT_DEBUG */
struct sljit_label *label;
struct sljit_jump *jump;
struct sljit_const *const_;
- struct sljit_put_label *put_label;
CHECK_ERROR_PTR();
CHECK_PTR(check_sljit_generate_code(compiler));
- reverse_buf(compiler);
+
+ reduce_code_size(compiler);
/* Second code generation pass. */
- code = (sljit_u8*)SLJIT_MALLOC_EXEC(compiler->size, compiler->exec_allocator_data);
+ code = (sljit_u8*)allocate_executable_memory(compiler->size, options, exec_allocator_data, &executable_offset);
PTR_FAIL_WITH_EXEC_IF(code);
+
+ reverse_buf(compiler);
buf = compiler->buf;
code_ptr = code;
label = compiler->labels;
jump = compiler->jumps;
const_ = compiler->consts;
- put_label = compiler->put_labels;
- executable_offset = SLJIT_EXEC_OFFSET(code);
do {
buf_ptr = buf->memory;
buf_end = buf_ptr + buf->used_size;
do {
len = *buf_ptr++;
- if (len > 0) {
+ SLJIT_ASSERT(len > 0);
+ if (len < SLJIT_INST_CONST) {
/* The code is already generated. */
SLJIT_MEMCPY(code_ptr, buf_ptr, len);
code_ptr += len;
buf_ptr += len;
- }
- else {
- switch (*buf_ptr) {
- case 0:
- label->addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);
+ } else {
+ switch (len) {
+ case SLJIT_INST_LABEL:
+ label->u.addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);
label->size = (sljit_uw)(code_ptr - code);
label = label->next;
break;
- case 1:
- jump->addr = (sljit_uw)code_ptr;
+ case SLJIT_INST_JUMP:
+#if (defined SLJIT_DEBUG && SLJIT_DEBUG)
+ addr = (sljit_uw)code_ptr;
+#endif /* SLJIT_DEBUG */
if (!(jump->flags & SLJIT_REWRITABLE_JUMP))
- code_ptr = generate_near_jump_code(jump, code_ptr, code, executable_offset);
+ code_ptr = detect_near_jump_type(jump, code_ptr, code, executable_offset);
else {
#if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)
- code_ptr = generate_far_jump_code(jump, code_ptr, executable_offset);
-#else
- code_ptr = generate_far_jump_code(jump, code_ptr);
-#endif
+ code_ptr = detect_far_jump_type(jump, code_ptr, executable_offset);
+#else /* !SLJIT_CONFIG_X86_32 */
+ code_ptr = detect_far_jump_type(jump, code_ptr);
+#endif /* SLJIT_CONFIG_X86_32 */
}
+
+ SLJIT_ASSERT((sljit_uw)code_ptr - addr <= ((jump->flags >> JUMP_SIZE_SHIFT) & 0x1f));
jump = jump->next;
break;
- case 2:
- const_->addr = ((sljit_uw)code_ptr) - sizeof(sljit_sw);
- const_ = const_->next;
+ case SLJIT_INST_MOV_ADDR:
+#if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
+ code_ptr = generate_mov_addr_code(jump, code_ptr, code, executable_offset);
+#endif /* SLJIT_CONFIG_X86_64 */
+ jump->addr = (sljit_uw)code_ptr;
+ jump = jump->next;
break;
default:
- SLJIT_ASSERT(*buf_ptr == 3);
- SLJIT_ASSERT(put_label->label);
- put_label->addr = (sljit_uw)code_ptr;
-#if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
- code_ptr = generate_put_label_code(put_label, code_ptr, (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code, executable_offset) + put_label->label->size);
-#endif
- put_label = put_label->next;
+ SLJIT_ASSERT(len == SLJIT_INST_CONST);
+ const_->addr = ((sljit_uw)code_ptr) - sizeof(sljit_sw);
+ const_ = const_->next;
break;
}
- buf_ptr++;
}
} while (buf_ptr < buf_end);
+
SLJIT_ASSERT(buf_ptr == buf_end);
buf = buf->next;
} while (buf);
@@ -761,61 +957,14 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil
SLJIT_ASSERT(!label);
SLJIT_ASSERT(!jump);
SLJIT_ASSERT(!const_);
- SLJIT_ASSERT(!put_label);
SLJIT_ASSERT(code_ptr <= code + compiler->size);
jump = compiler->jumps;
while (jump) {
- if (jump->flags & (PATCH_MB | PATCH_MW)) {
- if (jump->flags & JUMP_LABEL)
- jump_addr = jump->u.label->addr;
- else
- jump_addr = jump->u.target;
-
- jump_addr -= jump->addr + (sljit_uw)executable_offset;
-
- if (jump->flags & PATCH_MB) {
- jump_addr -= sizeof(sljit_s8);
- SLJIT_ASSERT((sljit_sw)jump_addr >= -128 && (sljit_sw)jump_addr <= 127);
- *(sljit_u8*)jump->addr = U8(jump_addr);
- } else {
- jump_addr -= sizeof(sljit_s32);
-#if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)
- sljit_unaligned_store_sw((void*)jump->addr, (sljit_sw)jump_addr);
-#else
- SLJIT_ASSERT((sljit_sw)jump_addr >= HALFWORD_MIN && (sljit_sw)jump_addr <= HALFWORD_MAX);
- sljit_unaligned_store_s32((void*)jump->addr, (sljit_s32)jump_addr);
-#endif
- }
- }
-#if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
- else if (jump->flags & PATCH_MD) {
- SLJIT_ASSERT(jump->flags & JUMP_LABEL);
- sljit_unaligned_store_sw((void*)jump->addr, (sljit_sw)jump->u.label->addr);
- }
-#endif
-
+ generate_jump_or_mov_addr(jump, executable_offset);
jump = jump->next;
}
- put_label = compiler->put_labels;
- while (put_label) {
-#if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)
- sljit_unaligned_store_sw((void*)(put_label->addr - sizeof(sljit_sw)), (sljit_sw)put_label->label->addr);
-#else
- if (put_label->flags & PATCH_MD) {
- SLJIT_ASSERT(put_label->label->addr > HALFWORD_MAX);
- sljit_unaligned_store_sw((void*)(put_label->addr - sizeof(sljit_sw)), (sljit_sw)put_label->label->addr);
- }
- else {
- SLJIT_ASSERT(put_label->label->addr <= HALFWORD_MAX);
- sljit_unaligned_store_s32((void*)(put_label->addr - sizeof(sljit_s32)), (sljit_s32)put_label->label->addr);
- }
-#endif
-
- put_label = put_label->next;
- }
-
compiler->error = SLJIT_ERR_COMPILED;
compiler->executable_offset = executable_offset;
compiler->executable_size = (sljit_uw)(code_ptr - code);
@@ -921,8 +1070,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_cmp_info(sljit_s32 type)
BINARY_IMM32(op_imm, immw, arg, argw); \
} \
else { \
- FAIL_IF(emit_load_imm64(compiler, (arg == TMP_REG1) ? TMP_REG2 : TMP_REG1, immw)); \
- inst = emit_x86_instruction(compiler, 1, (arg == TMP_REG1) ? TMP_REG2 : TMP_REG1, 0, arg, argw); \
+ FAIL_IF(emit_load_imm64(compiler, FAST_IS_REG(arg) ? TMP_REG2 : TMP_REG1, immw)); \
+ inst = emit_x86_instruction(compiler, 1, FAST_IS_REG(arg) ? TMP_REG2 : TMP_REG1, 0, arg, argw); \
FAIL_IF(!inst); \
*inst = (op_mr); \
} \
@@ -2248,10 +2397,9 @@ static sljit_s32 emit_test_binary(struct sljit_compiler *compiler,
inst = emit_x86_instruction(compiler, 1, SLJIT_IMM, src2w, src1, src1w);
FAIL_IF(!inst);
*inst = GROUP_F7;
- }
- else {
- FAIL_IF(emit_load_imm64(compiler, TMP_REG1, src2w));
- inst = emit_x86_instruction(compiler, 1, TMP_REG1, 0, src1, src1w);
+ } else {
+ FAIL_IF(emit_load_imm64(compiler, FAST_IS_REG(src1) ? TMP_REG2 : TMP_REG1, src2w));
+ inst = emit_x86_instruction(compiler, 1, FAST_IS_REG(src1) ? TMP_REG2 : TMP_REG1, 0, src1, src1w);
FAIL_IF(!inst);
*inst = TEST_rm_r;
}
@@ -2488,8 +2636,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile
compiler->mode32 = op & SLJIT_32;
#endif
- SLJIT_ASSERT(dst != TMP_REG1 || HAS_FLAGS(op));
-
switch (GET_OPCODE(op)) {
case SLJIT_ADD:
if (!HAS_FLAGS(op)) {
@@ -2583,12 +2729,44 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2u(struct sljit_compiler *compil
compiler->mode32 = op & SLJIT_32;
#endif
- if (opcode == SLJIT_SUB) {
+ if (opcode == SLJIT_SUB)
return emit_cmp_binary(compiler, src1, src1w, src2, src2w);
- }
+
return emit_test_binary(compiler, src1, src1w, src2, src2w);
}
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2r(struct sljit_compiler *compiler, sljit_s32 op,
+ sljit_s32 dst_reg,
+ sljit_s32 src1, sljit_sw src1w,
+ sljit_s32 src2, sljit_sw src2w)
+{
+ sljit_u8* inst;
+ sljit_sw dstw = 0;
+
+ CHECK_ERROR();
+ CHECK(check_sljit_emit_op2r(compiler, op, dst_reg, src1, src1w, src2, src2w));
+ ADJUST_LOCAL_OFFSET(src1, src1w);
+ ADJUST_LOCAL_OFFSET(src2, src2w);
+
+ CHECK_EXTRA_REGS(dst_reg, dstw, (void)0);
+ CHECK_EXTRA_REGS(src1, src1w, (void)0);
+ CHECK_EXTRA_REGS(src2, src2w, (void)0);
+#if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
+ compiler->mode32 = op & SLJIT_32;
+#endif
+
+ switch (GET_OPCODE(op)) {
+ case SLJIT_MULADD:
+ FAIL_IF(emit_mul(compiler, TMP_REG1, 0, src1, src1w, src2, src2w));
+ inst = emit_x86_instruction(compiler, 1, TMP_REG1, 0, dst_reg, dstw);
+ FAIL_IF(!inst);
+ *inst = ADD_rm_r;
+ return SLJIT_SUCCESS;
+ }
+
+ return SLJIT_SUCCESS;
+}
+
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_shift_into(struct sljit_compiler *compiler, sljit_s32 op,
sljit_s32 dst_reg,
sljit_s32 src1_reg,
@@ -3117,19 +3295,17 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop2(struct sljit_compiler *compil
dst_r = dst;
if (dst == src1)
; /* Do nothing here. */
- else if (dst == src2 && (op == SLJIT_ADD_F64 || op == SLJIT_MUL_F64)) {
+ else if (dst == src2 && (GET_OPCODE(op) == SLJIT_ADD_F64 || GET_OPCODE(op) == SLJIT_MUL_F64)) {
/* Swap arguments. */
src2 = src1;
src2w = src1w;
- }
- else if (dst != src2)
+ } else if (dst != src2)
FAIL_IF(emit_sse2_load(compiler, op & SLJIT_32, dst_r, src1, src1w));
else {
dst_r = TMP_FREG;
FAIL_IF(emit_sse2_load(compiler, op & SLJIT_32, TMP_FREG, src1, src1w));
}
- }
- else {
+ } else {
dst_r = TMP_FREG;
FAIL_IF(emit_sse2_load(compiler, op & SLJIT_32, TMP_FREG, src1, src1w));
}
@@ -3152,7 +3328,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop2(struct sljit_compiler *compil
break;
}
- if (dst_r == TMP_FREG)
+ if (dst_r != dst)
return emit_sse2_store(compiler, op & SLJIT_32, dst, dstw, TMP_FREG);
return SLJIT_SUCCESS;
}
@@ -3215,10 +3391,9 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_label* sljit_emit_label(struct sljit_compi
PTR_FAIL_IF(!label);
set_label(label, compiler);
- inst = (sljit_u8*)ensure_buf(compiler, 2);
+ inst = (sljit_u8*)ensure_buf(compiler, 1);
PTR_FAIL_IF(!inst);
- inst[0] = 0;
- inst[1] = 0;
+ inst[0] = SLJIT_INST_LABEL;
return label;
}
@@ -3236,18 +3411,13 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile
set_jump(jump, compiler, (sljit_u32)((type & SLJIT_REWRITABLE_JUMP) | ((type & 0xff) << TYPE_SHIFT)));
type &= 0xff;
+ jump->addr = compiler->size;
/* Worst case size. */
-#if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)
- compiler->size += (type >= SLJIT_JUMP) ? 5 : 6;
-#else
- compiler->size += (type >= SLJIT_JUMP) ? (10 + 3) : (2 + 10 + 3);
-#endif
-
- inst = (sljit_u8*)ensure_buf(compiler, 2);
+ compiler->size += (type >= SLJIT_JUMP) ? JUMP_MAX_SIZE : CJUMP_MAX_SIZE;
+ inst = (sljit_u8*)ensure_buf(compiler, 1);
PTR_FAIL_IF_NULL(inst);
- inst[0] = 0;
- inst[1] = 1;
+ inst[0] = SLJIT_INST_JUMP;
return jump;
}
@@ -3268,20 +3438,14 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_ijump(struct sljit_compiler *compi
set_jump(jump, compiler, (sljit_u32)(JUMP_ADDR | (type << TYPE_SHIFT)));
jump->u.target = (sljit_uw)srcw;
+ jump->addr = compiler->size;
/* Worst case size. */
-#if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)
- compiler->size += 5;
-#else
- compiler->size += 10 + 3;
-#endif
-
- inst = (sljit_u8*)ensure_buf(compiler, 2);
+ compiler->size += JUMP_MAX_SIZE;
+ inst = (sljit_u8*)ensure_buf(compiler, 1);
FAIL_IF_NULL(inst);
- inst[0] = 0;
- inst[1] = 1;
- }
- else {
+ inst[0] = SLJIT_INST_JUMP;
+ } else {
#if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
/* REX_W is not necessary (src is not immediate). */
compiler->mode32 = 1;
@@ -3414,82 +3578,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co
#endif /* SLJIT_CONFIG_X86_64 */
}
-SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_select(struct sljit_compiler *compiler, sljit_s32 type,
- sljit_s32 dst_reg,
- sljit_s32 src1, sljit_sw src1w,
- sljit_s32 src2_reg)
-{
-#if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)
- sljit_s32 dst = dst_reg;
- sljit_sw dstw = 0;
-#endif /* SLJIT_CONFIG_X86_32 */
- sljit_sw src2w = 0;
-
- CHECK_ERROR();
- CHECK(check_sljit_emit_select(compiler, type, dst_reg, src1, src1w, src2_reg));
-
- ADJUST_LOCAL_OFFSET(src1, src1w);
-
- CHECK_EXTRA_REGS(dst, dstw, (void)0);
- CHECK_EXTRA_REGS(src1, src1w, (void)0);
- CHECK_EXTRA_REGS(src2_reg, src2w, (void)0);
-
-#if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
- compiler->mode32 = type & SLJIT_32;
-#endif /* SLJIT_CONFIG_X86_64 */
- type &= ~SLJIT_32;
-
-#if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)
- if (dst & SLJIT_MEM) {
- if (src1 == SLJIT_IMM || (!(src1 & SLJIT_MEM) && (src2_reg & SLJIT_MEM))) {
- EMIT_MOV(compiler, TMP_REG1, 0, src1, src1w);
- src1 = src2_reg;
- src1w = src2w;
- type ^= 0x1;
- } else
- EMIT_MOV(compiler, TMP_REG1, 0, src2_reg, src2w);
-
- dst_reg = TMP_REG1;
- } else {
-#endif /* SLJIT_CONFIG_X86_32 */
- if (dst_reg != src2_reg) {
- if (dst_reg == src1) {
- src1 = src2_reg;
- src1w = src2w;
- type ^= 0x1;
- } else {
- if (ADDRESSING_DEPENDS_ON(src1, dst_reg)) {
- EMIT_MOV(compiler, dst_reg, 0, src1, src1w);
- src1 = src2_reg;
- src1w = src2w;
- type ^= 0x1;
- } else
- EMIT_MOV(compiler, dst_reg, 0, src2_reg, src2w);
- }
- }
-
- if (SLJIT_UNLIKELY(src1 == SLJIT_IMM)) {
- SLJIT_ASSERT(dst_reg != TMP_REG1);
- EMIT_MOV(compiler, TMP_REG1, 0, src1, src1w);
- src1 = TMP_REG1;
- src1w = 0;
- }
-#if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)
- }
-#endif /* SLJIT_CONFIG_X86_32 */
-
- if (sljit_has_cpu_feature(SLJIT_HAS_CMOV))
- FAIL_IF(emit_groupf(compiler, U8(get_jump_code((sljit_uw)type) - 0x40), dst_reg, src1, src1w));
- else
- FAIL_IF(emit_cmov_generic(compiler, type, dst_reg, src1, src1w));
-
-#if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)
- if (dst_reg == TMP_REG1)
- return emit_mov(compiler, dst, dstw, TMP_REG1, 0);
-#endif /* SLJIT_CONFIG_X86_32 */
- return SLJIT_SUCCESS;
-}
-
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fselect(struct sljit_compiler *compiler, sljit_s32 type,
sljit_s32 dst_freg,
sljit_s32 src1, sljit_sw src1w,
@@ -3581,7 +3669,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_mov(struct sljit_compiler *co
if (type & SLJIT_SIMD_TEST)
return SLJIT_SUCCESS;
- if (op & VEX_256)
+ if ((op & VEX_256) || ((cpu_feature_list & CPU_FEATURE_AVX) && (compiler->options & SLJIT_ENTER_USE_VEX)))
return emit_vex_instruction(compiler, op, freg, 0, srcdst, srcdstw);
return emit_groupf(compiler, op, freg, srcdst, srcdstw);
@@ -3593,9 +3681,10 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_replicate(struct sljit_compil
{
sljit_s32 reg_size = SLJIT_SIMD_GET_REG_SIZE(type);
sljit_s32 elem_size = SLJIT_SIMD_GET_ELEM_SIZE(type);
+ sljit_s32 use_vex = (cpu_feature_list & CPU_FEATURE_AVX) && (compiler->options & SLJIT_ENTER_USE_VEX);
sljit_u8 *inst;
sljit_u8 opcode = 0;
- sljit_uw size;
+ sljit_uw op;
CHECK_ERROR();
CHECK(check_sljit_emit_simd_replicate(compiler, type, freg, src, srcw));
@@ -3616,20 +3705,55 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_replicate(struct sljit_compil
return SLJIT_ERR_UNSUPPORTED;
#endif /* SLJIT_CONFIG_X86_32 */
- if (cpu_feature_list & CPU_FEATURE_AVX2) {
- if (reg_size < 4 || reg_size > 5)
- return SLJIT_ERR_UNSUPPORTED;
+ if (reg_size != 4 && (reg_size != 5 || !(cpu_feature_list & CPU_FEATURE_AVX2)))
+ return SLJIT_ERR_UNSUPPORTED;
- if (src != SLJIT_IMM && (reg_size == 5 || elem_size < 3 || !(type & SLJIT_SIMD_FLOAT))) {
- if (type & SLJIT_SIMD_TEST)
- return SLJIT_SUCCESS;
+ if (type & SLJIT_SIMD_TEST)
+ return SLJIT_SUCCESS;
+
+ if (reg_size == 5)
+ use_vex = 1;
+ if (use_vex && src != SLJIT_IMM) {
+ op = 0;
+
+ switch (elem_size) {
+ case 0:
+ if (cpu_feature_list & CPU_FEATURE_AVX2)
+ op = VPBROADCASTB_x_xm | EX86_PREF_66 | VEX_OP_0F38 | EX86_SSE2;
+ break;
+ case 1:
+ if (cpu_feature_list & CPU_FEATURE_AVX2)
+ op = VPBROADCASTW_x_xm | EX86_PREF_66 | VEX_OP_0F38 | EX86_SSE2;
+ break;
+ case 2:
+ if (type & SLJIT_SIMD_FLOAT) {
+ if ((cpu_feature_list & CPU_FEATURE_AVX2) || ((cpu_feature_list & CPU_FEATURE_AVX) && (src & SLJIT_MEM)))
+ op = VBROADCASTSS_x_xm | EX86_PREF_66 | VEX_OP_0F38 | EX86_SSE2;
+ } else if (cpu_feature_list & CPU_FEATURE_AVX2)
+ op = VPBROADCASTD_x_xm | EX86_PREF_66 | VEX_OP_0F38 | EX86_SSE2;
+ break;
+ default:
+#if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
+ if (!(type & SLJIT_SIMD_FLOAT)) {
+ if (cpu_feature_list & CPU_FEATURE_AVX2)
+ op = VPBROADCASTQ_x_xm | EX86_PREF_66 | VEX_OP_0F38 | EX86_SSE2;
+ break;
+ }
+#endif /* SLJIT_CONFIG_X86_64 */
+
+ if (reg_size == 5)
+ op = VBROADCASTSD_x_xm | EX86_PREF_66 | VEX_OP_0F38 | EX86_SSE2;
+ break;
+ }
+
+ if (op != 0) {
if (!(src & SLJIT_MEM) && !(type & SLJIT_SIMD_FLOAT)) {
#if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
if (elem_size >= 3)
compiler->mode32 = 0;
#endif /* SLJIT_CONFIG_X86_64 */
- FAIL_IF(emit_groupf(compiler, MOVD_x_rm | EX86_PREF_66 | EX86_SSE2_OP1, freg, src, srcw));
+ FAIL_IF(emit_vex_instruction(compiler, MOVD_x_rm | VEX_AUTO_W | EX86_PREF_66 | EX86_SSE2_OP1, freg, 0, src, srcw));
#if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
compiler->mode32 = 1;
#endif /* SLJIT_CONFIG_X86_64 */
@@ -3637,51 +3761,40 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_replicate(struct sljit_compil
srcw = 0;
}
- switch (elem_size) {
- case 0:
- size = VPBROADCASTB_x_xm | EX86_PREF_66 | VEX_OP_0F38 | EX86_SSE2;
- break;
- case 1:
- size = VPBROADCASTW_x_xm | EX86_PREF_66 | VEX_OP_0F38 | EX86_SSE2;
- break;
- case 2:
- size = ((type & SLJIT_SIMD_FLOAT) ? VBROADCASTSS_x_xm : VPBROADCASTD_x_xm) | EX86_PREF_66 | VEX_OP_0F38 | EX86_SSE2;
- break;
- default:
-#if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)
- size = VBROADCASTSD_x_xm | EX86_PREF_66 | VEX_OP_0F38 | EX86_SSE2;
-#else /* !SLJIT_CONFIG_X86_32 */
- size = ((type & SLJIT_SIMD_FLOAT) ? VBROADCASTSD_x_xm : VPBROADCASTQ_x_xm) | EX86_PREF_66 | VEX_OP_0F38 | EX86_SSE2;
-#endif /* SLJIT_CONFIG_X86_32 */
- break;
- }
-
if (reg_size == 5)
- size |= VEX_256;
+ op |= VEX_256;
- return emit_vex_instruction(compiler, size, freg, 0, src, srcw);
+ return emit_vex_instruction(compiler, op, freg, 0, src, srcw);
}
- } else if (reg_size != 4)
- return SLJIT_ERR_UNSUPPORTED;
-
- if (type & SLJIT_SIMD_TEST)
- return SLJIT_SUCCESS;
+ }
if (type & SLJIT_SIMD_FLOAT) {
if (src == SLJIT_IMM) {
- if (reg_size == 5)
- return emit_vex_instruction(compiler, XORPD_x_xm | VEX_256 | (elem_size == 3 ? EX86_PREF_66 : 0) | EX86_SSE2 | VEX_SSE2_OPV, freg, freg, freg, 0);
+ if (use_vex)
+ return emit_vex_instruction(compiler, XORPD_x_xm | (reg_size == 5 ? VEX_256 : 0) | (elem_size == 3 ? EX86_PREF_66 : 0) | EX86_SSE2 | VEX_SSE2_OPV, freg, freg, freg, 0);
return emit_groupf(compiler, XORPD_x_xm | (elem_size == 3 ? EX86_PREF_66 : 0) | EX86_SSE2, freg, freg, 0);
}
+ SLJIT_ASSERT(reg_size == 4);
+
+ if (use_vex) {
+ if (elem_size == 3)
+ return emit_vex_instruction(compiler, MOVDDUP_x_xm | EX86_PREF_F2 | EX86_SSE2, freg, 0, src, srcw);
+
+ SLJIT_ASSERT(!(src & SLJIT_MEM));
+ FAIL_IF(emit_vex_instruction(compiler, SHUFPS_x_xm | EX86_SSE2 | VEX_SSE2_OPV, freg, src, src, 0));
+ return emit_byte(compiler, 0);
+ }
+
if (elem_size == 2 && freg != src) {
FAIL_IF(emit_sse2_load(compiler, 1, freg, src, srcw));
src = freg;
srcw = 0;
}
- FAIL_IF(emit_groupf(compiler, (elem_size == 2 ? SHUFPS_x_xm : MOVDDUP_x_xm) | (elem_size == 2 ? 0 : EX86_PREF_F2) | EX86_SSE2, freg, src, srcw));
+ op = (elem_size == 2 ? SHUFPS_x_xm : MOVDDUP_x_xm) | (elem_size == 2 ? 0 : EX86_PREF_F2) | EX86_SSE2;
+ FAIL_IF(emit_groupf(compiler, op, freg, src, srcw));
if (elem_size == 2)
return emit_byte(compiler, 0);
@@ -3706,8 +3819,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_replicate(struct sljit_compil
#endif /* SLJIT_CONFIG_X86_64 */
if (srcw == 0 || srcw == -1) {
- if (reg_size == 5)
- return emit_vex_instruction(compiler, (srcw == 0 ? PXOR_x_xm : PCMPEQD_x_xm) | VEX_256 | EX86_PREF_66 | EX86_SSE2 | VEX_SSE2_OPV, freg, freg, freg, 0);
+ if (use_vex)
+ return emit_vex_instruction(compiler, (srcw == 0 ? PXOR_x_xm : PCMPEQD_x_xm) | (reg_size == 5 ? VEX_256 : 0) | EX86_PREF_66 | EX86_SSE2 | VEX_SSE2_OPV, freg, freg, freg, 0);
return emit_groupf(compiler, (srcw == 0 ? PXOR_x_xm : PCMPEQD_x_xm) | EX86_PREF_66 | EX86_SSE2, freg, freg, 0);
}
@@ -3721,16 +3834,17 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_replicate(struct sljit_compil
src = TMP_REG1;
srcw = 0;
+
}
- size = 2;
+ op = 2;
opcode = MOVD_x_rm;
switch (elem_size) {
case 0:
if (!FAST_IS_REG(src)) {
opcode = 0x3a /* Prefix of PINSRB_x_rm_i8. */;
- size = 3;
+ op = 3;
}
break;
case 1:
@@ -3747,44 +3861,66 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_replicate(struct sljit_compil
#endif /* SLJIT_CONFIG_X86_64 */
}
- inst = emit_x86_instruction(compiler, size | EX86_PREF_66 | EX86_SSE2_OP1, freg, 0, src, srcw);
- FAIL_IF(!inst);
- inst[0] = GROUP_0F;
- inst[1] = opcode;
+ if (use_vex) {
+ if (opcode != MOVD_x_rm) {
+ op = (opcode == 0x3a) ? (PINSRB_x_rm_i8 | VEX_OP_0F3A) : opcode;
+ FAIL_IF(emit_vex_instruction(compiler, op | EX86_PREF_66 | EX86_SSE2_OP1 | VEX_SSE2_OPV, freg, freg, src, srcw));
+ } else
+ FAIL_IF(emit_vex_instruction(compiler, MOVD_x_rm | VEX_AUTO_W | EX86_PREF_66 | EX86_SSE2_OP1, freg, 0, src, srcw));
+ } else {
+ inst = emit_x86_instruction(compiler, op | EX86_PREF_66 | EX86_SSE2_OP1, freg, 0, src, srcw);
+ FAIL_IF(!inst);
+ inst[0] = GROUP_0F;
+ inst[1] = opcode;
- if (reg_size == 5) {
- SLJIT_ASSERT(opcode == MOVD_x_rm);
+ if (op == 3) {
+ SLJIT_ASSERT(opcode == 0x3a);
+ inst[2] = PINSRB_x_rm_i8;
+ }
+ }
+
+ if (use_vex && elem_size >= 2) {
#if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)
- size = VPBROADCASTD_x_xm;
+ op = VPBROADCASTD_x_xm;
#else /* !SLJIT_CONFIG_X86_32 */
- size = (elem_size == 3) ? VPBROADCASTQ_x_xm : VPBROADCASTD_x_xm;
+ op = (elem_size == 3) ? VPBROADCASTQ_x_xm : VPBROADCASTD_x_xm;
#endif /* SLJIT_CONFIG_X86_32 */
- return emit_vex_instruction(compiler, size | VEX_256 | EX86_PREF_66 | VEX_OP_0F38 | EX86_SSE2, freg, 0, freg, 0);
+ return emit_vex_instruction(compiler, op | ((reg_size == 5) ? VEX_256 : 0) | EX86_PREF_66 | VEX_OP_0F38 | EX86_SSE2, freg, 0, freg, 0);
}
- if (size == 3) {
- SLJIT_ASSERT(opcode == 0x3a);
- inst[2] = PINSRB_x_rm_i8;
- }
+ SLJIT_ASSERT(reg_size == 4);
if (opcode != MOVD_x_rm)
FAIL_IF(emit_byte(compiler, 0));
switch (elem_size) {
case 0:
+ if (use_vex) {
+ FAIL_IF(emit_vex_instruction(compiler, PXOR_x_xm | EX86_PREF_66 | EX86_SSE2 | VEX_SSE2_OPV, TMP_FREG, TMP_FREG, TMP_FREG, 0));
+ return emit_vex_instruction(compiler, PSHUFB_x_xm | EX86_PREF_66 | VEX_OP_0F38 | EX86_SSE2 | VEX_SSE2_OPV, freg, freg, TMP_FREG, 0);
+ }
FAIL_IF(emit_groupf(compiler, PXOR_x_xm | EX86_PREF_66 | EX86_SSE2, TMP_FREG, TMP_FREG, 0));
return emit_groupf_ext(compiler, PSHUFB_x_xm | EX86_PREF_66 | VEX_OP_0F38 | EX86_SSE2, freg, TMP_FREG, 0);
case 1:
- FAIL_IF(emit_groupf(compiler, PSHUFLW_x_xm | EX86_PREF_F2 | EX86_SSE2, freg, freg, 0));
+ if (use_vex)
+ FAIL_IF(emit_vex_instruction(compiler, PSHUFLW_x_xm | EX86_PREF_F2 | EX86_SSE2, freg, 0, freg, 0));
+ else
+ FAIL_IF(emit_groupf(compiler, PSHUFLW_x_xm | EX86_PREF_F2 | EX86_SSE2, freg, freg, 0));
FAIL_IF(emit_byte(compiler, 0));
/* fallthrough */
default:
- FAIL_IF(emit_groupf(compiler, PSHUFD_x_xm | EX86_PREF_66 | EX86_SSE2, freg, freg, 0));
+ if (use_vex)
+ FAIL_IF(emit_vex_instruction(compiler, PSHUFD_x_xm | EX86_PREF_66 | EX86_SSE2, freg, 0, freg, 0));
+ else
+ FAIL_IF(emit_groupf(compiler, PSHUFD_x_xm | EX86_PREF_66 | EX86_SSE2, freg, freg, 0));
return emit_byte(compiler, 0);
#if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
case 3:
compiler->mode32 = 1;
- FAIL_IF(emit_groupf(compiler, PSHUFD_x_xm | EX86_PREF_66 | EX86_SSE2, freg, freg, 0));
+ if (use_vex)
+ FAIL_IF(emit_vex_instruction(compiler, PSHUFD_x_xm | EX86_PREF_66 | EX86_SSE2, freg, 0, freg, 0));
+ else
+ FAIL_IF(emit_groupf(compiler, PSHUFD_x_xm | EX86_PREF_66 | EX86_SSE2, freg, freg, 0));
return emit_byte(compiler, 0x44);
#endif /* SLJIT_CONFIG_X86_64 */
}
@@ -3796,9 +3932,10 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_lane_mov(struct sljit_compile
{
sljit_s32 reg_size = SLJIT_SIMD_GET_REG_SIZE(type);
sljit_s32 elem_size = SLJIT_SIMD_GET_ELEM_SIZE(type);
+ sljit_s32 use_vex = (cpu_feature_list & CPU_FEATURE_AVX) && (compiler->options & SLJIT_ENTER_USE_VEX);
sljit_u8 *inst;
sljit_u8 opcode = 0;
- sljit_uw size;
+ sljit_uw op;
sljit_s32 freg_orig = freg;
#if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)
sljit_s32 srcdst_is_ereg = 0;
@@ -3814,6 +3951,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_lane_mov(struct sljit_compile
if (reg_size == 5) {
if (!(cpu_feature_list & CPU_FEATURE_AVX2))
return SLJIT_ERR_UNSUPPORTED;
+ use_vex = 1;
} else if (reg_size != 4)
return SLJIT_ERR_UNSUPPORTED;
@@ -3865,20 +4003,23 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_lane_mov(struct sljit_compile
}
if (elem_size == 2) {
- if (reg_size == 4)
- return emit_groupf(compiler, MOVD_x_rm | EX86_PREF_66 | EX86_SSE2_OP1, freg, srcdst, srcdstw);
- return emit_vex_instruction(compiler, MOVD_x_rm | VEX_AUTO_W | EX86_PREF_66 | EX86_SSE2_OP1, freg, 0, srcdst, srcdstw);
+ if (use_vex)
+ return emit_vex_instruction(compiler, MOVD_x_rm | VEX_AUTO_W | EX86_PREF_66 | EX86_SSE2_OP1, freg, 0, srcdst, srcdstw);
+ return emit_groupf(compiler, MOVD_x_rm | EX86_PREF_66 | EX86_SSE2_OP1, freg, srcdst, srcdstw);
}
} else if (srcdst & SLJIT_MEM) {
SLJIT_ASSERT(elem_size == 2 || elem_size == 3);
- if (reg_size == 4)
- return emit_groupf(compiler, MOVSD_x_xm | (elem_size == 2 ? EX86_PREF_F3 : EX86_PREF_F2) | EX86_SSE2, freg, srcdst, srcdstw);
- return emit_vex_instruction(compiler, MOVSD_x_xm | (elem_size == 2 ? EX86_PREF_F3 : EX86_PREF_F2) | EX86_SSE2, freg, 0, srcdst, srcdstw);
+ if (use_vex)
+ return emit_vex_instruction(compiler, MOVSD_x_xm | (elem_size == 2 ? EX86_PREF_F3 : EX86_PREF_F2) | EX86_SSE2, freg, 0, srcdst, srcdstw);
+ return emit_groupf(compiler, MOVSD_x_xm | (elem_size == 2 ? EX86_PREF_F3 : EX86_PREF_F2) | EX86_SSE2, freg, srcdst, srcdstw);
} else if (elem_size == 3) {
- if (reg_size == 4)
- return emit_groupf(compiler, MOVQ_x_xm | EX86_PREF_F3 | EX86_SSE2, freg, srcdst, 0);
- return emit_vex_instruction(compiler, MOVQ_x_xm | EX86_PREF_F3 | EX86_SSE2, freg, 0, srcdst, 0);
+ if (use_vex)
+ return emit_vex_instruction(compiler, MOVQ_x_xm | EX86_PREF_F3 | EX86_SSE2, freg, 0, srcdst, 0);
+ return emit_groupf(compiler, MOVQ_x_xm | EX86_PREF_F3 | EX86_SSE2, freg, srcdst, 0);
+ } else if (use_vex) {
+ FAIL_IF(emit_vex_instruction(compiler, XORPD_x_xm | EX86_SSE2 | VEX_SSE2_OPV, TMP_FREG, TMP_FREG, TMP_FREG, 0));
+ return emit_vex_instruction(compiler, MOVSD_x_xm | EX86_PREF_F3 | EX86_SSE2 | VEX_SSE2_OPV, freg, TMP_FREG, srcdst, 0);
}
}
@@ -3886,18 +4027,21 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_lane_mov(struct sljit_compile
freg = TMP_FREG;
lane_index -= (1 << (4 - elem_size));
} else if ((type & SLJIT_SIMD_FLOAT) && freg == srcdst) {
- FAIL_IF(emit_sse2_load(compiler, elem_size == 2, TMP_FREG, srcdst, srcdstw));
+ if (use_vex)
+ FAIL_IF(emit_vex_instruction(compiler, MOVSD_x_xm | (elem_size == 2 ? EX86_PREF_F3 : EX86_PREF_F2) | EX86_SSE2 | VEX_SSE2_OPV, TMP_FREG, TMP_FREG, srcdst, srcdstw));
+ else
+ FAIL_IF(emit_sse2_load(compiler, elem_size == 2, TMP_FREG, srcdst, srcdstw));
srcdst = TMP_FREG;
srcdstw = 0;
}
- size = ((!(type & SLJIT_SIMD_FLOAT) || elem_size != 2) ? EX86_PREF_66 : 0)
+ op = ((!(type & SLJIT_SIMD_FLOAT) || elem_size != 2) ? EX86_PREF_66 : 0)
| ((type & SLJIT_SIMD_FLOAT) ? XORPD_x_xm : PXOR_x_xm) | EX86_SSE2;
- if (reg_size == 5)
- FAIL_IF(emit_vex_instruction(compiler, size | VEX_256 | VEX_SSE2_OPV, freg, freg, freg, 0));
+ if (use_vex)
+ FAIL_IF(emit_vex_instruction(compiler, op | (reg_size == 5 ? VEX_256 : 0) | VEX_SSE2_OPV, freg, freg, freg, 0));
else
- FAIL_IF(emit_groupf(compiler, size, freg, freg, 0));
+ FAIL_IF(emit_groupf(compiler, op, freg, freg, 0));
} else if (reg_size == 5 && lane_index >= (1 << (4 - elem_size))) {
FAIL_IF(emit_vex_instruction(compiler, ((type & SLJIT_SIMD_FLOAT) ? VEXTRACTF128_x_ym : VEXTRACTI128_x_ym) | VEX_256 | EX86_PREF_66 | VEX_OP_0F3A | EX86_SSE2, freg, 0, TMP_FREG, 0));
FAIL_IF(emit_byte(compiler, 1));
@@ -3910,58 +4054,80 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_lane_mov(struct sljit_compile
if (elem_size == 3) {
if (srcdst & SLJIT_MEM) {
if (type & SLJIT_SIMD_STORE)
- size = lane_index == 0 ? MOVLPD_m_x : MOVHPD_m_x;
+ op = lane_index == 0 ? MOVLPD_m_x : MOVHPD_m_x;
else
- size = lane_index == 0 ? MOVLPD_x_m : MOVHPD_x_m;
+ op = lane_index == 0 ? MOVLPD_x_m : MOVHPD_x_m;
- FAIL_IF(emit_groupf(compiler, size | EX86_PREF_66 | EX86_SSE2, freg, srcdst, srcdstw));
+ /* VEX prefix clears upper bits of the target register. */
+ if (use_vex && ((type & SLJIT_SIMD_STORE) || reg_size == 4 || freg == TMP_FREG))
+ FAIL_IF(emit_vex_instruction(compiler, op | EX86_PREF_66 | EX86_SSE2
+ | ((type & SLJIT_SIMD_STORE) ? 0 : VEX_SSE2_OPV), freg, (type & SLJIT_SIMD_STORE) ? 0 : freg, srcdst, srcdstw));
+ else
+ FAIL_IF(emit_groupf(compiler, op | EX86_PREF_66 | EX86_SSE2, freg, srcdst, srcdstw));
/* In case of store, freg is not TMP_FREG. */
} else if (type & SLJIT_SIMD_STORE) {
- if (lane_index == 1)
+ if (lane_index == 1) {
+ if (use_vex)
+ return emit_vex_instruction(compiler, MOVHLPS_x_x | EX86_SSE2 | VEX_SSE2_OPV, srcdst, srcdst, freg, 0);
return emit_groupf(compiler, MOVHLPS_x_x | EX86_SSE2, srcdst, freg, 0);
+ }
+ if (use_vex)
+ return emit_vex_instruction(compiler, MOVSD_x_xm | EX86_PREF_F2 | EX86_SSE2 | VEX_SSE2_OPV, srcdst, srcdst, freg, 0);
return emit_sse2_load(compiler, 0, srcdst, freg, 0);
+ } else if (use_vex && (reg_size == 4 || freg == TMP_FREG)) {
+ if (lane_index == 1)
+ FAIL_IF(emit_vex_instruction(compiler, MOVLHPS_x_x | EX86_SSE2 | VEX_SSE2_OPV, freg, freg, srcdst, 0));
+ else
+ FAIL_IF(emit_vex_instruction(compiler, MOVSD_x_xm | EX86_PREF_F2 | EX86_SSE2 | VEX_SSE2_OPV, freg, freg, srcdst, 0));
} else {
if (lane_index == 1)
FAIL_IF(emit_groupf(compiler, MOVLHPS_x_x | EX86_SSE2, freg, srcdst, 0));
else
- FAIL_IF(emit_sse2_store(compiler, 0, freg, 0, srcdst));
+ FAIL_IF(emit_sse2_load(compiler, 0, freg, srcdst, 0));
}
} else if (type & SLJIT_SIMD_STORE) {
- if (lane_index == 0)
+ if (lane_index == 0) {
+ if (use_vex)
+ return emit_vex_instruction(compiler, ((srcdst & SLJIT_MEM) ? MOVSD_xm_x : MOVSD_x_xm) | EX86_PREF_F3 | EX86_SSE2
+ | ((srcdst & SLJIT_MEM) ? 0 : VEX_SSE2_OPV), freg, ((srcdst & SLJIT_MEM) ? 0 : freg), srcdst, srcdstw);
return emit_sse2_store(compiler, 1, srcdst, srcdstw, freg);
+ }
if (srcdst & SLJIT_MEM) {
- FAIL_IF(emit_groupf_ext(compiler, EXTRACTPS_x_xm | EX86_PREF_66 | VEX_OP_0F3A | EX86_SSE2, freg, srcdst, srcdstw));
+ if (use_vex)
+ FAIL_IF(emit_vex_instruction(compiler, EXTRACTPS_x_xm | EX86_PREF_66 | VEX_OP_0F3A | EX86_SSE2, freg, 0, srcdst, srcdstw));
+ else
+ FAIL_IF(emit_groupf_ext(compiler, EXTRACTPS_x_xm | EX86_PREF_66 | VEX_OP_0F3A | EX86_SSE2, freg, srcdst, srcdstw));
+ return emit_byte(compiler, U8(lane_index));
+ }
+
+ if (use_vex) {
+ FAIL_IF(emit_vex_instruction(compiler, SHUFPS_x_xm | EX86_SSE2 | VEX_SSE2_OPV, srcdst, freg, freg, 0));
return emit_byte(compiler, U8(lane_index));
}
if (srcdst == freg)
- size = SHUFPS_x_xm | EX86_SSE2;
+ op = SHUFPS_x_xm | EX86_SSE2;
else {
- if (cpu_feature_list & CPU_FEATURE_AVX) {
- FAIL_IF(emit_vex_instruction(compiler, SHUFPS_x_xm | EX86_SSE2 | VEX_SSE2_OPV, srcdst, freg, freg, 0));
- return emit_byte(compiler, U8(lane_index));
- }
-
switch (lane_index) {
case 1:
- size = MOVSHDUP_x_xm | EX86_PREF_F3 | EX86_SSE2;
+ op = MOVSHDUP_x_xm | EX86_PREF_F3 | EX86_SSE2;
break;
case 2:
- size = MOVHLPS_x_x | EX86_SSE2;
+ op = MOVHLPS_x_x | EX86_SSE2;
break;
default:
SLJIT_ASSERT(lane_index == 3);
- size = PSHUFD_x_xm | EX86_PREF_66 | EX86_SSE2;
+ op = PSHUFD_x_xm | EX86_PREF_66 | EX86_SSE2;
break;
}
}
- FAIL_IF(emit_groupf(compiler, size, srcdst, freg, 0));
+ FAIL_IF(emit_groupf(compiler, op, srcdst, freg, 0));
- size &= 0xff;
- if (size == SHUFPS_x_xm || size == PSHUFD_x_xm)
+ op &= 0xff;
+ if (op == SHUFPS_x_xm || op == PSHUFD_x_xm)
return emit_byte(compiler, U8(lane_index));
return SLJIT_SUCCESS;
@@ -3993,7 +4159,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_lane_mov(struct sljit_compile
srcdstw = 0;
}
- size = 3;
+ op = 3;
switch (elem_size) {
case 0:
@@ -4001,7 +4167,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_lane_mov(struct sljit_compile
break;
case 1:
if (!(type & SLJIT_SIMD_STORE)) {
- size = 2;
+ op = 2;
opcode = PINSRW_x_rm_i8;
} else
opcode = PEXTRW_rm_x_i8;
@@ -4018,15 +4184,20 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_lane_mov(struct sljit_compile
#endif /* SLJIT_CONFIG_X86_64 */
}
- inst = emit_x86_instruction(compiler, size | EX86_PREF_66 | EX86_SSE2_OP1, freg, 0, srcdst, srcdstw);
- FAIL_IF(!inst);
- inst[0] = GROUP_0F;
+ if (use_vex && (type & SLJIT_SIMD_STORE)) {
+ op = opcode | ((op == 3) ? VEX_OP_0F3A : 0);
+ FAIL_IF(emit_vex_instruction(compiler, op | EX86_PREF_66 | VEX_AUTO_W | EX86_SSE2_OP1 | VEX_SSE2_OPV, freg, 0, srcdst, srcdstw));
+ } else {
+ inst = emit_x86_instruction(compiler, op | EX86_PREF_66 | EX86_SSE2_OP1, freg, 0, srcdst, srcdstw);
+ FAIL_IF(!inst);
+ inst[0] = GROUP_0F;
- if (size == 3) {
- inst[1] = 0x3a;
- inst[2] = opcode;
- } else
- inst[1] = opcode;
+ if (op == 3) {
+ inst[1] = 0x3a;
+ inst[2] = opcode;
+ } else
+ inst[1] = opcode;
+ }
FAIL_IF(emit_byte(compiler, U8(lane_index)));
@@ -4056,23 +4227,23 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_lane_mov(struct sljit_compile
compiler->mode32 = (type & SLJIT_32);
- size = 2;
+ op = 2;
if (elem_size == 0)
- size |= EX86_REX;
+ op |= EX86_REX;
if (elem_size == 2) {
if (type & SLJIT_32)
return SLJIT_SUCCESS;
SLJIT_ASSERT(!(compiler->mode32));
- size = 1;
+ op = 1;
}
- inst = emit_x86_instruction(compiler, size, srcdst, 0, srcdst, 0);
+ inst = emit_x86_instruction(compiler, op, srcdst, 0, srcdst, 0);
FAIL_IF(!inst);
- if (size != 1) {
+ if (op != 1) {
inst[0] = GROUP_0F;
inst[1] = U8((elem_size == 0) ? MOVSX_r_rm8 : MOVSX_r_rm16);
} else
@@ -4096,6 +4267,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_lane_replicate(struct sljit_c
{
sljit_s32 reg_size = SLJIT_SIMD_GET_REG_SIZE(type);
sljit_s32 elem_size = SLJIT_SIMD_GET_ELEM_SIZE(type);
+ sljit_s32 use_vex = (cpu_feature_list & CPU_FEATURE_AVX) && (compiler->options & SLJIT_ENTER_USE_VEX);
sljit_uw pref;
sljit_u8 byte;
#if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)
@@ -4115,6 +4287,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_lane_replicate(struct sljit_c
if (reg_size == 5) {
if (!(cpu_feature_list & CPU_FEATURE_AVX2))
return SLJIT_ERR_UNSUPPORTED;
+ use_vex = 1;
} else if (reg_size != 4)
return SLJIT_ERR_UNSUPPORTED;
@@ -4136,8 +4309,11 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_lane_replicate(struct sljit_c
return emit_byte(compiler, U8(byte | (byte << 4)));
}
- if (src_lane_index == 0)
+ if (src_lane_index == 0) {
+ if (use_vex)
+ return emit_vex_instruction(compiler, MOVDDUP_x_xm | EX86_PREF_F2 | EX86_SSE2, freg, 0, src, 0);
return emit_groupf(compiler, MOVDDUP_x_xm | EX86_PREF_F2 | EX86_SSE2, freg, src, 0);
+ }
/* Changes it to SHUFPD_x_xm. */
pref = EX86_PREF_66;
@@ -4163,7 +4339,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_lane_replicate(struct sljit_c
FAIL_IF(emit_byte(compiler, byte));
FAIL_IF(emit_vex_instruction(compiler, SHUFPS_x_xm | VEX_256 | pref | EX86_SSE2 | VEX_SSE2_OPV, freg, freg, freg, 0));
byte = U8(src_lane_index);
- } else if (freg != src && (cpu_feature_list & CPU_FEATURE_AVX)) {
+ } else if (use_vex) {
FAIL_IF(emit_vex_instruction(compiler, SHUFPS_x_xm | pref | EX86_SSE2 | VEX_SSE2_OPV, freg, src, src, 0));
} else {
if (freg != src)
@@ -4192,7 +4368,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_lane_replicate(struct sljit_c
src = freg;
}
- if ((freg != src && !(cpu_feature_list & CPU_FEATURE_AVX2)) || src_lane_index != 0) {
+ if (src_lane_index != 0 || (freg != src && (!(cpu_feature_list & CPU_FEATURE_AVX2) || !use_vex))) {
pref = 0;
if ((src_lane_index & 0x3) == 0) {
@@ -4202,7 +4378,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_lane_replicate(struct sljit_c
pref = EX86_PREF_F2;
byte = U8(src_lane_index >> 1);
} else {
- if (freg == src || !(cpu_feature_list & CPU_FEATURE_AVX2)) {
+ if (!use_vex) {
if (freg != src)
FAIL_IF(emit_groupf(compiler, MOVDQA_x_xm | EX86_PREF_66 | EX86_SSE2, freg, src, 0));
@@ -4214,14 +4390,17 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_lane_replicate(struct sljit_c
}
if (pref != 0) {
- FAIL_IF(emit_groupf(compiler, PSHUFLW_x_xm | pref | EX86_SSE2, freg, src, 0));
+ if (use_vex)
+ FAIL_IF(emit_vex_instruction(compiler, PSHUFLW_x_xm | pref | EX86_SSE2, freg, 0, src, 0));
+ else
+ FAIL_IF(emit_groupf(compiler, PSHUFLW_x_xm | pref | EX86_SSE2, freg, src, 0));
FAIL_IF(emit_byte(compiler, byte));
}
src = freg;
}
- if (cpu_feature_list & CPU_FEATURE_AVX2)
+ if (use_vex && (cpu_feature_list & CPU_FEATURE_AVX2))
return emit_vex_instruction(compiler, VPBROADCASTB_x_xm | (reg_size == 5 ? VEX_256 : 0) | EX86_PREF_66 | VEX_OP_0F38 | EX86_SSE2, freg, 0, src, 0);
SLJIT_ASSERT(reg_size == 4);
@@ -4229,7 +4408,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_lane_replicate(struct sljit_c
return emit_groupf_ext(compiler, PSHUFB_x_xm | EX86_PREF_66 | VEX_OP_0F38 | EX86_SSE2, freg, TMP_FREG, 0);
}
- if ((cpu_feature_list & CPU_FEATURE_AVX2) && src_lane_index == 0 && elem_size <= 3) {
+ if ((cpu_feature_list & CPU_FEATURE_AVX2) && use_vex && src_lane_index == 0 && elem_size <= 3) {
switch (elem_size) {
case 1:
pref = VPBROADCASTW_x_xm | EX86_PREF_66 | VEX_OP_0F38 | EX86_SSE2;
@@ -4291,11 +4470,14 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_lane_replicate(struct sljit_c
src_lane_index >>= 1;
pref = (src_lane_index & 2) == 0 ? EX86_PREF_F2 : EX86_PREF_F3;
- FAIL_IF(emit_groupf(compiler, PSHUFLW_x_xm | pref | EX86_SSE2, freg, src, 0));
+ if (use_vex)
+ FAIL_IF(emit_vex_instruction(compiler, PSHUFLW_x_xm | pref | EX86_SSE2, freg, 0, src, 0));
+ else
+ FAIL_IF(emit_groupf(compiler, PSHUFLW_x_xm | pref | EX86_SSE2, freg, src, 0));
byte = U8(byte | (byte << 2));
FAIL_IF(emit_byte(compiler, U8(byte | (byte << 4))));
- if ((cpu_feature_list & CPU_FEATURE_AVX2) && pref == EX86_PREF_F2)
+ if ((cpu_feature_list & CPU_FEATURE_AVX2) && use_vex && pref == EX86_PREF_F2)
return emit_vex_instruction(compiler, VPBROADCASTD_x_xm | EX86_PREF_66 | VEX_OP_0F38 | EX86_SSE2, freg, 0, freg, 0);
src = freg;
@@ -4310,7 +4492,10 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_lane_replicate(struct sljit_c
break;
}
- FAIL_IF(emit_groupf(compiler, PSHUFD_x_xm | EX86_PREF_66 | EX86_SSE2, freg, src, 0));
+ if (use_vex)
+ FAIL_IF(emit_vex_instruction(compiler, PSHUFD_x_xm | EX86_PREF_66 | EX86_SSE2, freg, 0, src, 0));
+ else
+ FAIL_IF(emit_groupf(compiler, PSHUFD_x_xm | EX86_PREF_66 | EX86_SSE2, freg, src, 0));
return emit_byte(compiler, U8(byte | (byte << 4)));
}
@@ -4321,6 +4506,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_extend(struct sljit_compiler
sljit_s32 reg_size = SLJIT_SIMD_GET_REG_SIZE(type);
sljit_s32 elem_size = SLJIT_SIMD_GET_ELEM_SIZE(type);
sljit_s32 elem2_size = SLJIT_SIMD_GET_ELEM2_SIZE(type);
+ sljit_s32 use_vex = (cpu_feature_list & CPU_FEATURE_AVX) && (compiler->options & SLJIT_ENTER_USE_VEX);
sljit_u8 opcode;
CHECK_ERROR();
@@ -4335,6 +4521,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_extend(struct sljit_compiler
if (reg_size == 5) {
if (!(cpu_feature_list & CPU_FEATURE_AVX2))
return SLJIT_ERR_UNSUPPORTED;
+ use_vex = 1;
} else if (reg_size != 4)
return SLJIT_ERR_UNSUPPORTED;
@@ -4345,9 +4532,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_extend(struct sljit_compiler
if (type & SLJIT_SIMD_TEST)
return SLJIT_SUCCESS;
- if (reg_size == 4)
- return emit_groupf(compiler, CVTPS2PD_x_xm | EX86_SSE2, freg, src, srcw);
- return emit_vex_instruction(compiler, CVTPS2PD_x_xm | VEX_256 | EX86_SSE2, freg, 0, src, srcw);
+ if (use_vex)
+ return emit_vex_instruction(compiler, CVTPS2PD_x_xm | ((reg_size == 5) ? VEX_256 : 0) | EX86_SSE2, freg, 0, src, srcw);
+ return emit_groupf(compiler, CVTPS2PD_x_xm | EX86_SSE2, freg, src, srcw);
}
switch (elem_size) {
@@ -4382,9 +4569,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_extend(struct sljit_compiler
if (type & SLJIT_SIMD_TEST)
return SLJIT_SUCCESS;
- if (reg_size == 4)
- return emit_groupf_ext(compiler, opcode | EX86_PREF_66 | VEX_OP_0F38 | EX86_SSE2, freg, src, srcw);
- return emit_vex_instruction(compiler, opcode | VEX_256 | EX86_PREF_66 | VEX_OP_0F38 | EX86_SSE2, freg, 0, src, srcw);
+ if (use_vex)
+ return emit_vex_instruction(compiler, opcode | ((reg_size == 5) ? VEX_256 : 0) | EX86_PREF_66 | VEX_OP_0F38 | EX86_SSE2, freg, 0, src, srcw);
+ return emit_groupf_ext(compiler, opcode | EX86_PREF_66 | VEX_OP_0F38 | EX86_SSE2, freg, src, srcw);
}
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_sign(struct sljit_compiler *compiler, sljit_s32 type,
@@ -4393,8 +4580,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_sign(struct sljit_compiler *c
{
sljit_s32 reg_size = SLJIT_SIMD_GET_REG_SIZE(type);
sljit_s32 elem_size = SLJIT_SIMD_GET_ELEM_SIZE(type);
+ sljit_s32 use_vex = (cpu_feature_list & CPU_FEATURE_AVX) && (compiler->options & SLJIT_ENTER_USE_VEX);
sljit_s32 dst_r;
- sljit_uw pref;
+ sljit_uw op;
sljit_u8 *inst;
CHECK_ERROR();
@@ -4414,20 +4602,28 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_sign(struct sljit_compiler *c
if (type & SLJIT_SIMD_TEST)
return SLJIT_SUCCESS;
- pref = EX86_PREF_66 | EX86_SSE2_OP2;
+ op = EX86_PREF_66 | EX86_SSE2_OP2;
switch (elem_size) {
case 1:
- FAIL_IF(emit_groupf(compiler, PACKSSWB_x_xm | EX86_PREF_66 | EX86_SSE2, TMP_FREG, freg, 0));
+ if (use_vex)
+ FAIL_IF(emit_vex_instruction(compiler, PACKSSWB_x_xm | EX86_PREF_66 | EX86_SSE2 | VEX_SSE2_OPV, TMP_FREG, freg, freg, 0));
+ else
+ FAIL_IF(emit_groupf(compiler, PACKSSWB_x_xm | EX86_PREF_66 | EX86_SSE2, TMP_FREG, freg, 0));
freg = TMP_FREG;
break;
case 2:
- pref = EX86_SSE2_OP2;
+ op = EX86_SSE2_OP2;
break;
}
dst_r = FAST_IS_REG(dst) ? dst : TMP_REG1;
- FAIL_IF(emit_groupf(compiler, (elem_size < 2 ? PMOVMSKB_r_x : MOVMSKPS_r_x) | pref, dst_r, freg, 0));
+ op |= (elem_size < 2) ? PMOVMSKB_r_x : MOVMSKPS_r_x;
+
+ if (use_vex)
+ FAIL_IF(emit_vex_instruction(compiler, op, dst_r, 0, freg, 0));
+ else
+ FAIL_IF(emit_groupf(compiler, op, dst_r, freg, 0));
#if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
compiler->mode32 = type & SLJIT_32;
@@ -4459,14 +4655,14 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_sign(struct sljit_compiler *c
FAIL_IF(emit_vex_instruction(compiler, PACKSSWB_x_xm | VEX_256 | EX86_PREF_66 | EX86_SSE2 | VEX_SSE2_OPV, TMP_FREG, freg, TMP_FREG, 0));
FAIL_IF(emit_groupf(compiler, PMOVMSKB_r_x | EX86_PREF_66 | EX86_SSE2_OP2, dst_r, TMP_FREG, 0));
} else {
- pref = MOVMSKPS_r_x | VEX_256 | EX86_SSE2_OP2;
+ op = MOVMSKPS_r_x | VEX_256 | EX86_SSE2_OP2;
if (elem_size == 0)
- pref = PMOVMSKB_r_x | VEX_256 | EX86_PREF_66 | EX86_SSE2_OP2;
+ op = PMOVMSKB_r_x | VEX_256 | EX86_PREF_66 | EX86_SSE2_OP2;
else if (elem_size == 3)
- pref |= EX86_PREF_66;
+ op |= EX86_PREF_66;
- FAIL_IF(emit_vex_instruction(compiler, pref, dst_r, 0, freg, 0));
+ FAIL_IF(emit_vex_instruction(compiler, op, dst_r, 0, freg, 0));
}
if (dst_r == TMP_REG1) {
@@ -4497,7 +4693,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_op2(struct sljit_compiler *co
{
sljit_s32 reg_size = SLJIT_SIMD_GET_REG_SIZE(type);
sljit_s32 elem_size = SLJIT_SIMD_GET_ELEM_SIZE(type);
- sljit_s32 needs_move = 0;
sljit_uw op = 0;
CHECK_ERROR();
@@ -4540,20 +4735,18 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_op2(struct sljit_compiler *co
if (type & SLJIT_SIMD_TEST)
return SLJIT_SUCCESS;
- needs_move = dst_freg != src1_freg && dst_freg != src2_freg;
-
- if (reg_size == 5 || (needs_move && (cpu_feature_list & CPU_FEATURE_AVX2))) {
+ if (reg_size == 5 || ((cpu_feature_list & CPU_FEATURE_AVX) && (compiler->options & SLJIT_ENTER_USE_VEX))) {
if (reg_size == 5)
op |= VEX_256;
return emit_vex_instruction(compiler, op | EX86_SSE2 | VEX_SSE2_OPV, dst_freg, src1_freg, src2_freg, 0);
}
- if (needs_move) {
- FAIL_IF(emit_simd_mov(compiler, type, dst_freg, src1_freg));
- } else if (dst_freg != src1_freg) {
- SLJIT_ASSERT(dst_freg == src2_freg);
- src2_freg = src1_freg;
+ if (dst_freg != src1_freg) {
+ if (dst_freg == src2_freg)
+ src2_freg = src1_freg;
+ else
+ FAIL_IF(emit_simd_mov(compiler, type, dst_freg, src1_freg));
}
FAIL_IF(emit_groupf(compiler, op | EX86_SSE2, dst_freg, src2_freg, 0));
@@ -4727,11 +4920,10 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compi
return NULL;
#endif
- inst = (sljit_u8*)ensure_buf(compiler, 2);
+ inst = (sljit_u8*)ensure_buf(compiler, 1);
PTR_FAIL_IF(!inst);
- inst[0] = 0;
- inst[1] = 2;
+ inst[0] = SLJIT_INST_CONST;
#if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
if (dst & SLJIT_MEM)
@@ -4742,52 +4934,48 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compi
return const_;
}
-SLJIT_API_FUNC_ATTRIBUTE struct sljit_put_label* sljit_emit_put_label(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw dstw)
+SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_mov_addr(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw dstw)
{
- struct sljit_put_label *put_label;
+ struct sljit_jump *jump;
sljit_u8 *inst;
#if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
sljit_s32 reg;
- sljit_uw start_size;
-#endif
+#endif /* SLJIT_CONFIG_X86_64 */
CHECK_ERROR_PTR();
- CHECK_PTR(check_sljit_emit_put_label(compiler, dst, dstw));
+ CHECK_PTR(check_sljit_emit_mov_addr(compiler, dst, dstw));
ADJUST_LOCAL_OFFSET(dst, dstw);
CHECK_EXTRA_REGS(dst, dstw, (void)0);
- put_label = (struct sljit_put_label*)ensure_abuf(compiler, sizeof(struct sljit_put_label));
- PTR_FAIL_IF(!put_label);
- set_put_label(put_label, compiler, 0);
+ jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump));
+ PTR_FAIL_IF(!jump);
+ set_mov_addr(jump, compiler, 0);
#if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
compiler->mode32 = 0;
reg = FAST_IS_REG(dst) ? dst : TMP_REG1;
- if (emit_load_imm64(compiler, reg, 0))
- return NULL;
-#else
- if (emit_mov(compiler, dst, dstw, SLJIT_IMM, 0))
- return NULL;
-#endif
+ PTR_FAIL_IF(emit_load_imm64(compiler, reg, 0));
+ jump->addr = compiler->size;
-#if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
- if (dst & SLJIT_MEM) {
- start_size = compiler->size;
- if (emit_mov(compiler, dst, dstw, TMP_REG1, 0))
- return NULL;
- put_label->flags = compiler->size - start_size;
- }
-#endif
+ if (reg_map[reg] >= 8)
+ jump->flags |= MOV_ADDR_HI;
+#else /* !SLJIT_CONFIG_X86_64 */
+ PTR_FAIL_IF(emit_mov(compiler, dst, dstw, SLJIT_IMM, 0));
+#endif /* SLJIT_CONFIG_X86_64 */
- inst = (sljit_u8*)ensure_buf(compiler, 2);
+ inst = (sljit_u8*)ensure_buf(compiler, 1);
PTR_FAIL_IF(!inst);
- inst[0] = 0;
- inst[1] = 3;
+ inst[0] = SLJIT_INST_MOV_ADDR;
+
+#if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
+ if (dst & SLJIT_MEM)
+ PTR_FAIL_IF(emit_mov(compiler, dst, dstw, TMP_REG1, 0));
+#endif /* SLJIT_CONFIG_X86_64 */
- return put_label;
+ return jump;
}
SLJIT_API_FUNC_ATTRIBUTE void sljit_set_jump_addr(sljit_uw addr, sljit_uw new_target, sljit_sw executable_offset)
diff --git a/src/3rdparty/pcre2/src/sljit/sljitProtExecAllocator.c b/src/3rdparty/pcre2/src/sljit/sljitProtExecAllocator.c
deleted file mode 100644
index 915411fbed..0000000000
--- a/src/3rdparty/pcre2/src/sljit/sljitProtExecAllocator.c
+++ /dev/null
@@ -1,474 +0,0 @@
-/*
- * Stack-less Just-In-Time compiler
- *
- * Copyright Zoltan Herczeg (hzmester@freemail.hu). All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification, are
- * permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice, this list of
- * conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright notice, this list
- * of conditions and the following disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDER(S) OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
- * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/*
- This file contains a simple executable memory allocator
-
- It is assumed, that executable code blocks are usually medium (or sometimes
- large) memory blocks, and the allocator is not too frequently called (less
- optimized than other allocators). Thus, using it as a generic allocator is
- not suggested.
-
- How does it work:
- Memory is allocated in continuous memory areas called chunks by alloc_chunk()
- Chunk format:
- [ block ][ block ] ... [ block ][ block terminator ]
-
- All blocks and the block terminator is started with block_header. The block
- header contains the size of the previous and the next block. These sizes
- can also contain special values.
- Block size:
- 0 - The block is a free_block, with a different size member.
- 1 - The block is a block terminator.
- n - The block is used at the moment, and the value contains its size.
- Previous block size:
- 0 - This is the first block of the memory chunk.
- n - The size of the previous block.
-
- Using these size values we can go forward or backward on the block chain.
- The unused blocks are stored in a chain list pointed by free_blocks. This
- list is useful if we need to find a suitable memory area when the allocator
- is called.
-
- When a block is freed, the new free block is connected to its adjacent free
- blocks if possible.
-
- [ free block ][ used block ][ free block ]
- and "used block" is freed, the three blocks are connected together:
- [ one big free block ]
-*/
-
-/* --------------------------------------------------------------------- */
-/* System (OS) functions */
-/* --------------------------------------------------------------------- */
-
-/* 64 KByte. */
-#define CHUNK_SIZE (sljit_uw)0x10000
-
-struct chunk_header {
- void *executable;
-};
-
-/*
- alloc_chunk / free_chunk :
- * allocate executable system memory chunks
- * the size is always divisible by CHUNK_SIZE
- SLJIT_ALLOCATOR_LOCK / SLJIT_ALLOCATOR_UNLOCK :
- * provided as part of sljitUtils
- * only the allocator requires this lock, sljit is fully thread safe
- as it only uses local variables
-*/
-
-#ifndef __NetBSD__
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <string.h>
-
-#ifndef O_NOATIME
-#define O_NOATIME 0
-#endif
-
-/* this is a linux extension available since kernel 3.11 */
-#ifndef O_TMPFILE
-#define O_TMPFILE 020200000
-#endif
-
-#ifndef _GNU_SOURCE
-char *secure_getenv(const char *name);
-int mkostemp(char *template, int flags);
-#endif
-
-static SLJIT_INLINE int create_tempfile(void)
-{
- int fd;
- char tmp_name[256];
- size_t tmp_name_len = 0;
- char *dir;
- struct stat st;
-#if defined(SLJIT_SINGLE_THREADED) && SLJIT_SINGLE_THREADED
- mode_t mode;
-#endif
-
-#ifdef HAVE_MEMFD_CREATE
- /* this is a GNU extension, make sure to use -D_GNU_SOURCE */
- fd = memfd_create("sljit", MFD_CLOEXEC);
- if (fd != -1) {
- fchmod(fd, 0);
- return fd;
- }
-#endif
-
- dir = secure_getenv("TMPDIR");
-
- if (dir) {
- tmp_name_len = strlen(dir);
- if (tmp_name_len > 0 && tmp_name_len < sizeof(tmp_name)) {
- if ((stat(dir, &st) == 0) && S_ISDIR(st.st_mode))
- strcpy(tmp_name, dir);
- }
- }
-
-#ifdef P_tmpdir
- if (!tmp_name_len) {
- tmp_name_len = strlen(P_tmpdir);
- if (tmp_name_len > 0 && tmp_name_len < sizeof(tmp_name))
- strcpy(tmp_name, P_tmpdir);
- }
-#endif
- if (!tmp_name_len) {
- strcpy(tmp_name, "/tmp");
- tmp_name_len = 4;
- }
-
- SLJIT_ASSERT(tmp_name_len > 0 && tmp_name_len < sizeof(tmp_name));
-
- if (tmp_name[tmp_name_len - 1] == '/')
- tmp_name[--tmp_name_len] = '\0';
-
-#ifdef __linux__
- /*
- * the previous trimming might had left an empty string if TMPDIR="/"
- * so work around the problem below
- */
- fd = open(tmp_name_len ? tmp_name : "/",
- O_TMPFILE | O_EXCL | O_RDWR | O_NOATIME | O_CLOEXEC, 0);
- if (fd != -1)
- return fd;
-#endif
-
- if (tmp_name_len + 7 >= sizeof(tmp_name))
- return -1;
-
- strcpy(tmp_name + tmp_name_len, "/XXXXXX");
-#if defined(SLJIT_SINGLE_THREADED) && SLJIT_SINGLE_THREADED
- mode = umask(0777);
-#endif
- fd = mkostemp(tmp_name, O_CLOEXEC | O_NOATIME);
-#if defined(SLJIT_SINGLE_THREADED) && SLJIT_SINGLE_THREADED
- umask(mode);
-#else
- fchmod(fd, 0);
-#endif
-
- if (fd == -1)
- return -1;
-
- if (unlink(tmp_name)) {
- close(fd);
- return -1;
- }
-
- return fd;
-}
-
-static SLJIT_INLINE struct chunk_header* alloc_chunk(sljit_uw size)
-{
- struct chunk_header *retval;
- int fd;
-
- fd = create_tempfile();
- if (fd == -1)
- return NULL;
-
- if (ftruncate(fd, (off_t)size)) {
- close(fd);
- return NULL;
- }
-
- retval = (struct chunk_header *)mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
-
- if (retval == MAP_FAILED) {
- close(fd);
- return NULL;
- }
-
- retval->executable = mmap(NULL, size, PROT_READ | PROT_EXEC, MAP_SHARED, fd, 0);
-
- if (retval->executable == MAP_FAILED) {
- munmap((void *)retval, size);
- close(fd);
- return NULL;
- }
-
- close(fd);
- return retval;
-}
-#else
-/*
- * MAP_REMAPDUP is a NetBSD extension available sinde 8.0, make sure to
- * adjust your feature macros (ex: -D_NETBSD_SOURCE) as needed
- */
-static SLJIT_INLINE struct chunk_header* alloc_chunk(sljit_uw size)
-{
- struct chunk_header *retval;
-
- retval = (struct chunk_header *)mmap(NULL, size,
- PROT_READ | PROT_WRITE | PROT_MPROTECT(PROT_EXEC),
- MAP_ANON | MAP_SHARED, -1, 0);
-
- if (retval == MAP_FAILED)
- return NULL;
-
- retval->executable = mremap(retval, size, NULL, size, MAP_REMAPDUP);
- if (retval->executable == MAP_FAILED) {
- munmap((void *)retval, size);
- return NULL;
- }
-
- if (mprotect(retval->executable, size, PROT_READ | PROT_EXEC) == -1) {
- munmap(retval->executable, size);
- munmap((void *)retval, size);
- return NULL;
- }
-
- return retval;
-}
-#endif /* NetBSD */
-
-static SLJIT_INLINE void free_chunk(void *chunk, sljit_uw size)
-{
- struct chunk_header *header = ((struct chunk_header *)chunk) - 1;
-
- munmap(header->executable, size);
- munmap((void *)header, size);
-}
-
-/* --------------------------------------------------------------------- */
-/* Common functions */
-/* --------------------------------------------------------------------- */
-
-#define CHUNK_MASK (~(CHUNK_SIZE - 1))
-
-struct block_header {
- sljit_uw size;
- sljit_uw prev_size;
- sljit_sw executable_offset;
-};
-
-struct free_block {
- struct block_header header;
- struct free_block *next;
- struct free_block *prev;
- sljit_uw size;
-};
-
-#define AS_BLOCK_HEADER(base, offset) \
- ((struct block_header*)(((sljit_u8*)base) + offset))
-#define AS_FREE_BLOCK(base, offset) \
- ((struct free_block*)(((sljit_u8*)base) + offset))
-#define MEM_START(base) ((void*)((base) + 1))
-#define ALIGN_SIZE(size) (((size) + sizeof(struct block_header) + 7u) & ~(sljit_uw)7)
-
-static struct free_block* free_blocks;
-static sljit_uw allocated_size;
-static sljit_uw total_size;
-
-static SLJIT_INLINE void sljit_insert_free_block(struct free_block *free_block, sljit_uw size)
-{
- free_block->header.size = 0;
- free_block->size = size;
-
- free_block->next = free_blocks;
- free_block->prev = NULL;
- if (free_blocks)
- free_blocks->prev = free_block;
- free_blocks = free_block;
-}
-
-static SLJIT_INLINE void sljit_remove_free_block(struct free_block *free_block)
-{
- if (free_block->next)
- free_block->next->prev = free_block->prev;
-
- if (free_block->prev)
- free_block->prev->next = free_block->next;
- else {
- SLJIT_ASSERT(free_blocks == free_block);
- free_blocks = free_block->next;
- }
-}
-
-SLJIT_API_FUNC_ATTRIBUTE void* sljit_malloc_exec(sljit_uw size)
-{
- struct chunk_header *chunk_header;
- struct block_header *header;
- struct block_header *next_header;
- struct free_block *free_block;
- sljit_uw chunk_size;
- sljit_sw executable_offset;
-
- SLJIT_ALLOCATOR_LOCK();
- if (size < (64 - sizeof(struct block_header)))
- size = (64 - sizeof(struct block_header));
- size = ALIGN_SIZE(size);
-
- free_block = free_blocks;
- while (free_block) {
- if (free_block->size >= size) {
- chunk_size = free_block->size;
- if (chunk_size > size + 64) {
- /* We just cut a block from the end of the free block. */
- chunk_size -= size;
- free_block->size = chunk_size;
- header = AS_BLOCK_HEADER(free_block, chunk_size);
- header->prev_size = chunk_size;
- header->executable_offset = free_block->header.executable_offset;
- AS_BLOCK_HEADER(header, size)->prev_size = size;
- }
- else {
- sljit_remove_free_block(free_block);
- header = (struct block_header*)free_block;
- size = chunk_size;
- }
- allocated_size += size;
- header->size = size;
- SLJIT_ALLOCATOR_UNLOCK();
- return MEM_START(header);
- }
- free_block = free_block->next;
- }
-
- chunk_size = sizeof(struct chunk_header) + sizeof(struct block_header);
- chunk_size = (chunk_size + size + CHUNK_SIZE - 1) & CHUNK_MASK;
-
- chunk_header = alloc_chunk(chunk_size);
- if (!chunk_header) {
- SLJIT_ALLOCATOR_UNLOCK();
- return NULL;
- }
-
- executable_offset = (sljit_sw)((sljit_u8*)chunk_header->executable - (sljit_u8*)chunk_header);
-
- chunk_size -= sizeof(struct chunk_header) + sizeof(struct block_header);
- total_size += chunk_size;
-
- header = (struct block_header *)(chunk_header + 1);
-
- header->prev_size = 0;
- header->executable_offset = executable_offset;
- if (chunk_size > size + 64) {
- /* Cut the allocated space into a free and a used block. */
- allocated_size += size;
- header->size = size;
- chunk_size -= size;
-
- free_block = AS_FREE_BLOCK(header, size);
- free_block->header.prev_size = size;
- free_block->header.executable_offset = executable_offset;
- sljit_insert_free_block(free_block, chunk_size);
- next_header = AS_BLOCK_HEADER(free_block, chunk_size);
- }
- else {
- /* All space belongs to this allocation. */
- allocated_size += chunk_size;
- header->size = chunk_size;
- next_header = AS_BLOCK_HEADER(header, chunk_size);
- }
- next_header->size = 1;
- next_header->prev_size = chunk_size;
- next_header->executable_offset = executable_offset;
- SLJIT_ALLOCATOR_UNLOCK();
- return MEM_START(header);
-}
-
-SLJIT_API_FUNC_ATTRIBUTE void sljit_free_exec(void* ptr)
-{
- struct block_header *header;
- struct free_block* free_block;
-
- SLJIT_ALLOCATOR_LOCK();
- header = AS_BLOCK_HEADER(ptr, -(sljit_sw)sizeof(struct block_header));
- header = AS_BLOCK_HEADER(header, -header->executable_offset);
- allocated_size -= header->size;
-
- /* Connecting free blocks together if possible. */
-
- /* If header->prev_size == 0, free_block will equal to header.
- In this case, free_block->header.size will be > 0. */
- free_block = AS_FREE_BLOCK(header, -(sljit_sw)header->prev_size);
- if (SLJIT_UNLIKELY(!free_block->header.size)) {
- free_block->size += header->size;
- header = AS_BLOCK_HEADER(free_block, free_block->size);
- header->prev_size = free_block->size;
- }
- else {
- free_block = (struct free_block*)header;
- sljit_insert_free_block(free_block, header->size);
- }
-
- header = AS_BLOCK_HEADER(free_block, free_block->size);
- if (SLJIT_UNLIKELY(!header->size)) {
- free_block->size += ((struct free_block*)header)->size;
- sljit_remove_free_block((struct free_block*)header);
- header = AS_BLOCK_HEADER(free_block, free_block->size);
- header->prev_size = free_block->size;
- }
-
- /* The whole chunk is free. */
- if (SLJIT_UNLIKELY(!free_block->header.prev_size && header->size == 1)) {
- /* If this block is freed, we still have (allocated_size / 2) free space. */
- if (total_size - free_block->size > (allocated_size * 3 / 2)) {
- total_size -= free_block->size;
- sljit_remove_free_block(free_block);
- free_chunk(free_block, free_block->size +
- sizeof(struct chunk_header) +
- sizeof(struct block_header));
- }
- }
-
- SLJIT_ALLOCATOR_UNLOCK();
-}
-
-SLJIT_API_FUNC_ATTRIBUTE void sljit_free_unused_memory_exec(void)
-{
- struct free_block* free_block;
- struct free_block* next_free_block;
-
- SLJIT_ALLOCATOR_LOCK();
-
- free_block = free_blocks;
- while (free_block) {
- next_free_block = free_block->next;
- if (!free_block->header.prev_size &&
- AS_BLOCK_HEADER(free_block, free_block->size)->size == 1) {
- total_size -= free_block->size;
- sljit_remove_free_block(free_block);
- free_chunk(free_block, free_block->size +
- sizeof(struct chunk_header) +
- sizeof(struct block_header));
- }
- free_block = next_free_block;
- }
-
- SLJIT_ASSERT((total_size && free_blocks) || (!total_size && !free_blocks));
- SLJIT_ALLOCATOR_UNLOCK();
-}
-
-SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void* ptr)
-{
- return ((struct block_header *)(ptr))[-1].executable_offset;
-}
diff --git a/src/3rdparty/pcre2/src/sljit/sljitSerialize.c b/src/3rdparty/pcre2/src/sljit/sljitSerialize.c
new file mode 100644
index 0000000000..6ef161fd49
--- /dev/null
+++ b/src/3rdparty/pcre2/src/sljit/sljitSerialize.c
@@ -0,0 +1,516 @@
+/*
+ * Stack-less Just-In-Time compiler
+ *
+ * Copyright Zoltan Herczeg (hzmester@freemail.hu). All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND CONTRIBUTORS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+ * SHALL THE COPYRIGHT HOLDER(S) OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_jump_has_label(struct sljit_jump *jump)
+{
+ return !(jump->flags & JUMP_ADDR) && (jump->u.label != NULL);
+}
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_jump_has_target(struct sljit_jump *jump)
+{
+ return (jump->flags & JUMP_ADDR) != 0;
+}
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_jump_is_mov_addr(struct sljit_jump *jump)
+{
+ return (jump->flags & JUMP_MOV_ADDR) != 0;
+}
+
+#define SLJIT_SERIALIZE_DEBUG ((sljit_u16)0x1)
+
+struct sljit_serialized_compiler {
+ sljit_u32 signature;
+ sljit_u16 version;
+ sljit_u16 cpu_type;
+
+ sljit_uw buf_segment_count;
+ sljit_uw label_count;
+ sljit_uw jump_count;
+ sljit_uw const_count;
+
+ sljit_s32 options;
+ sljit_s32 scratches;
+ sljit_s32 saveds;
+ sljit_s32 fscratches;
+ sljit_s32 fsaveds;
+ sljit_s32 local_size;
+ sljit_uw size;
+
+#if (defined SLJIT_HAS_STATUS_FLAGS_STATE && SLJIT_HAS_STATUS_FLAGS_STATE)
+ sljit_s32 status_flags_state;
+#endif /* SLJIT_HAS_STATUS_FLAGS_STATE */
+
+#if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)
+ sljit_s32 args_size;
+#endif /* SLJIT_CONFIG_X86_32 */
+
+#if ((defined SLJIT_CONFIG_ARM_32 && SLJIT_CONFIG_ARM_32) && (defined __SOFTFP__)) \
+ || (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32)
+ sljit_uw args_size;
+#endif /* (SLJIT_CONFIG_ARM_32 && __SOFTFP__) || SLJIT_CONFIG_MIPS_32 */
+
+#if (defined SLJIT_CONFIG_ARM_V6 && SLJIT_CONFIG_ARM_V6)
+ sljit_uw cpool_diff;
+ sljit_uw cpool_fill;
+ sljit_uw patches;
+#endif /* SLJIT_CONFIG_ARM_V6 */
+
+#if (defined SLJIT_CONFIG_MIPS && SLJIT_CONFIG_MIPS)
+ sljit_s32 delay_slot;
+#endif /* SLJIT_CONFIG_MIPS */
+
+};
+
+struct sljit_serialized_debug_info {
+ sljit_sw last_flags;
+ sljit_s32 last_return;
+ sljit_s32 logical_local_size;
+};
+
+struct sljit_serialized_label {
+ sljit_uw size;
+};
+
+struct sljit_serialized_jump {
+ sljit_uw addr;
+ sljit_uw flags;
+ sljit_uw value;
+};
+
+struct sljit_serialized_const {
+ sljit_uw addr;
+};
+
+#define SLJIT_SERIALIZE_ALIGN(v) (((v) + sizeof(sljit_uw) - 1) & ~(sljit_uw)(sizeof(sljit_uw) - 1))
+#if (defined SLJIT_LITTLE_ENDIAN && SLJIT_LITTLE_ENDIAN)
+#define SLJIT_SERIALIZE_SIGNATURE 0x534c4a54
+#else /* !SLJIT_LITTLE_ENDIAN */
+#define SLJIT_SERIALIZE_SIGNATURE 0x544a4c53
+#endif /* SLJIT_LITTLE_ENDIAN */
+#define SLJIT_SERIALIZE_VERSION 1
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_uw* sljit_serialize_compiler(struct sljit_compiler *compiler,
+ sljit_s32 options, sljit_uw *size)
+{
+ sljit_uw serialized_size = sizeof(struct sljit_serialized_compiler);
+ struct sljit_memory_fragment *buf;
+ struct sljit_label *label;
+ struct sljit_jump *jump;
+ struct sljit_const *const_;
+ struct sljit_serialized_compiler *serialized_compiler;
+ struct sljit_serialized_label *serialized_label;
+ struct sljit_serialized_jump *serialized_jump;
+ struct sljit_serialized_const *serialized_const;
+#if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) \
+ || (defined SLJIT_DEBUG && SLJIT_DEBUG)
+ struct sljit_serialized_debug_info *serialized_debug_info;
+#endif /* SLJIT_ARGUMENT_CHECKS || SLJIT_DEBUG */
+ sljit_uw counter, used_size;
+ sljit_u8 *result;
+ sljit_u8 *ptr;
+ SLJIT_UNUSED_ARG(options);
+
+ if (size != NULL)
+ *size = 0;
+
+ PTR_FAIL_IF(compiler->error);
+
+#if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) \
+ || (defined SLJIT_DEBUG && SLJIT_DEBUG)
+ if (!(options & SLJIT_SERIALIZE_IGNORE_DEBUG))
+ serialized_size += sizeof(struct sljit_serialized_debug_info);
+#endif /* SLJIT_ARGUMENT_CHECKS || SLJIT_DEBUG */
+
+#if (defined SLJIT_CONFIG_ARM_V6 && SLJIT_CONFIG_ARM_V6)
+ serialized_size += SLJIT_SERIALIZE_ALIGN(compiler->cpool_fill * (sizeof(sljit_uw) + 1));
+#endif /* SLJIT_CONFIG_ARM_V6 */
+
+ /* Compute the size of the data. */
+ buf = compiler->buf;
+ while (buf != NULL) {
+ serialized_size += sizeof(sljit_uw) + SLJIT_SERIALIZE_ALIGN(buf->used_size);
+ buf = buf->next;
+ }
+
+ serialized_size += compiler->label_count * sizeof(struct sljit_serialized_label);
+
+ jump = compiler->jumps;
+ while (jump != NULL) {
+ serialized_size += sizeof(struct sljit_serialized_jump);
+ jump = jump->next;
+ }
+
+ const_ = compiler->consts;
+ while (const_ != NULL) {
+ serialized_size += sizeof(struct sljit_serialized_const);
+ const_ = const_->next;
+ }
+
+ result = (sljit_u8*)SLJIT_MALLOC(serialized_size, compiler->allocator_data);
+ PTR_FAIL_IF_NULL(result);
+
+ if (size != NULL)
+ *size = serialized_size;
+
+ ptr = result;
+ serialized_compiler = (struct sljit_serialized_compiler*)ptr;
+ ptr += sizeof(struct sljit_serialized_compiler);
+
+ serialized_compiler->signature = SLJIT_SERIALIZE_SIGNATURE;
+ serialized_compiler->version = SLJIT_SERIALIZE_VERSION;
+ serialized_compiler->cpu_type = 0;
+ serialized_compiler->label_count = compiler->label_count;
+ serialized_compiler->options = compiler->options;
+ serialized_compiler->scratches = compiler->scratches;
+ serialized_compiler->saveds = compiler->saveds;
+ serialized_compiler->fscratches = compiler->fscratches;
+ serialized_compiler->fsaveds = compiler->fsaveds;
+ serialized_compiler->local_size = compiler->local_size;
+ serialized_compiler->size = compiler->size;
+
+#if (defined SLJIT_HAS_STATUS_FLAGS_STATE && SLJIT_HAS_STATUS_FLAGS_STATE)
+ serialized_compiler->status_flags_state = compiler->status_flags_state;
+#endif /* SLJIT_HAS_STATUS_FLAGS_STATE */
+
+#if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32) \
+ || ((defined SLJIT_CONFIG_ARM_32 && SLJIT_CONFIG_ARM_32) && (defined __SOFTFP__)) \
+ || (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32)
+ serialized_compiler->args_size = compiler->args_size;
+#endif /* SLJIT_CONFIG_X86_32 || (SLJIT_CONFIG_ARM_32 && __SOFTFP__) || SLJIT_CONFIG_MIPS_32 */
+
+#if (defined SLJIT_CONFIG_ARM_V6 && SLJIT_CONFIG_ARM_V6)
+ serialized_compiler->cpool_diff = compiler->cpool_diff;
+ serialized_compiler->cpool_fill = compiler->cpool_fill;
+ serialized_compiler->patches = compiler->patches;
+
+ SLJIT_MEMCPY(ptr, compiler->cpool, compiler->cpool_fill * sizeof(sljit_uw));
+ SLJIT_MEMCPY(ptr + compiler->cpool_fill * sizeof(sljit_uw), compiler->cpool_unique, compiler->cpool_fill);
+ ptr += SLJIT_SERIALIZE_ALIGN(compiler->cpool_fill * (sizeof(sljit_uw) + 1));
+#endif /* SLJIT_CONFIG_ARM_V6 */
+
+#if (defined SLJIT_CONFIG_MIPS && SLJIT_CONFIG_MIPS)
+ serialized_compiler->delay_slot = compiler->delay_slot;
+#endif /* SLJIT_CONFIG_MIPS */
+
+ buf = compiler->buf;
+ counter = 0;
+ while (buf != NULL) {
+ used_size = buf->used_size;
+ *(sljit_uw*)ptr = used_size;
+ ptr += sizeof(sljit_uw);
+ SLJIT_MEMCPY(ptr, buf->memory, used_size);
+ ptr += SLJIT_SERIALIZE_ALIGN(used_size);
+ buf = buf->next;
+ counter++;
+ }
+ serialized_compiler->buf_segment_count = counter;
+
+ label = compiler->labels;
+ while (label != NULL) {
+ serialized_label = (struct sljit_serialized_label*)ptr;
+ serialized_label->size = label->size;
+ ptr += sizeof(struct sljit_serialized_label);
+ label = label->next;
+ }
+
+ jump = compiler->jumps;
+ counter = 0;
+ while (jump != NULL) {
+ serialized_jump = (struct sljit_serialized_jump*)ptr;
+ serialized_jump->addr = jump->addr;
+ serialized_jump->flags = jump->flags;
+
+ if (jump->flags & JUMP_ADDR)
+ serialized_jump->value = jump->u.target;
+ else if (jump->u.label != NULL)
+ serialized_jump->value = jump->u.label->u.index;
+ else
+ serialized_jump->value = SLJIT_MAX_ADDRESS;
+
+ ptr += sizeof(struct sljit_serialized_jump);
+ jump = jump->next;
+ counter++;
+ }
+ serialized_compiler->jump_count = counter;
+
+ const_ = compiler->consts;
+ counter = 0;
+ while (const_ != NULL) {
+ serialized_const = (struct sljit_serialized_const*)ptr;
+ serialized_const->addr = const_->addr;
+ ptr += sizeof(struct sljit_serialized_const);
+ const_ = const_->next;
+ counter++;
+ }
+ serialized_compiler->const_count = counter;
+
+#if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) \
+ || (defined SLJIT_DEBUG && SLJIT_DEBUG)
+ if (!(options & SLJIT_SERIALIZE_IGNORE_DEBUG)) {
+ serialized_debug_info = (struct sljit_serialized_debug_info*)ptr;
+ serialized_debug_info->last_flags = compiler->last_flags;
+ serialized_debug_info->last_return = compiler->last_return;
+ serialized_debug_info->logical_local_size = compiler->logical_local_size;
+ serialized_compiler->cpu_type |= SLJIT_SERIALIZE_DEBUG;
+#if (defined SLJIT_DEBUG && SLJIT_DEBUG)
+ ptr += sizeof(struct sljit_serialized_debug_info);
+#endif /* SLJIT_DEBUG */
+ }
+#endif /* SLJIT_ARGUMENT_CHECKS || SLJIT_DEBUG */
+
+ SLJIT_ASSERT((sljit_uw)(ptr - result) == serialized_size);
+ return (sljit_uw*)result;
+}
+
+SLJIT_API_FUNC_ATTRIBUTE struct sljit_compiler *sljit_deserialize_compiler(sljit_uw* buffer, sljit_uw size,
+ sljit_s32 options, void *allocator_data)
+{
+ struct sljit_compiler *compiler;
+ struct sljit_serialized_compiler *serialized_compiler;
+ struct sljit_serialized_label *serialized_label;
+ struct sljit_serialized_jump *serialized_jump;
+ struct sljit_serialized_const *serialized_const;
+#if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) \
+ || (defined SLJIT_DEBUG && SLJIT_DEBUG)
+ struct sljit_serialized_debug_info *serialized_debug_info;
+#endif /* SLJIT_ARGUMENT_CHECKS || SLJIT_DEBUG */
+ struct sljit_memory_fragment *buf;
+ struct sljit_memory_fragment *last_buf;
+ struct sljit_label *label;
+ struct sljit_label *last_label;
+ struct sljit_label **label_list = NULL;
+ struct sljit_jump *jump;
+ struct sljit_jump *last_jump;
+ struct sljit_const *const_;
+ struct sljit_const *last_const;
+ sljit_u8 *ptr = (sljit_u8*)buffer;
+ sljit_u8 *end = ptr + size;
+ sljit_uw i, used_size, aligned_size, label_count;
+ SLJIT_UNUSED_ARG(options);
+
+ if (size < sizeof(struct sljit_serialized_compiler) || (size & (sizeof(sljit_uw) - 1)) != 0)
+ return NULL;
+
+ serialized_compiler = (struct sljit_serialized_compiler*)ptr;
+
+ if (serialized_compiler->signature != SLJIT_SERIALIZE_SIGNATURE || serialized_compiler->version != SLJIT_SERIALIZE_VERSION)
+ return NULL;
+
+ compiler = sljit_create_compiler(allocator_data);
+ PTR_FAIL_IF(compiler == NULL);
+
+ compiler->label_count = serialized_compiler->label_count;
+ compiler->options = serialized_compiler->options;
+ compiler->scratches = serialized_compiler->scratches;
+ compiler->saveds = serialized_compiler->saveds;
+ compiler->fscratches = serialized_compiler->fscratches;
+ compiler->fsaveds = serialized_compiler->fsaveds;
+ compiler->local_size = serialized_compiler->local_size;
+ compiler->size = serialized_compiler->size;
+
+#if (defined SLJIT_HAS_STATUS_FLAGS_STATE && SLJIT_HAS_STATUS_FLAGS_STATE)
+ compiler->status_flags_state = serialized_compiler->status_flags_state;
+#endif /* SLJIT_HAS_STATUS_FLAGS_STATE */
+
+#if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32) \
+ || ((defined SLJIT_CONFIG_ARM_32 && SLJIT_CONFIG_ARM_32) && (defined __SOFTFP__)) \
+ || (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32)
+ compiler->args_size = serialized_compiler->args_size;
+#endif /* SLJIT_CONFIG_X86_32 || (SLJIT_CONFIG_ARM_32 && __SOFTFP__) || SLJIT_CONFIG_MIPS_32 */
+
+#if (defined SLJIT_CONFIG_ARM_V6 && SLJIT_CONFIG_ARM_V6)
+ used_size = serialized_compiler->cpool_fill;
+ aligned_size = SLJIT_SERIALIZE_ALIGN(used_size * (sizeof(sljit_uw) + 1));
+ compiler->cpool_diff = serialized_compiler->cpool_diff;
+ compiler->cpool_fill = used_size;
+ compiler->patches = serialized_compiler->patches;
+
+ if ((sljit_uw)(end - ptr) < aligned_size)
+ goto error;
+
+ SLJIT_MEMCPY(compiler->cpool, ptr, used_size * sizeof(sljit_uw));
+ SLJIT_MEMCPY(compiler->cpool_unique, ptr + used_size * sizeof(sljit_uw), used_size);
+ ptr += aligned_size;
+#endif /* SLJIT_CONFIG_ARM_V6 */
+
+#if (defined SLJIT_CONFIG_MIPS && SLJIT_CONFIG_MIPS)
+ compiler->delay_slot = serialized_compiler->delay_slot;
+#endif /* SLJIT_CONFIG_MIPS */
+
+#if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) \
+ || (defined SLJIT_DEBUG && SLJIT_DEBUG)
+ if (!(serialized_compiler->cpu_type & SLJIT_SERIALIZE_DEBUG))
+ goto error;
+#endif /* SLJIT_ARGUMENT_CHECKS || SLJIT_DEBUG */
+
+ ptr += sizeof(struct sljit_serialized_compiler);
+ i = serialized_compiler->buf_segment_count;
+ last_buf = NULL;
+ while (i > 0) {
+ if ((sljit_uw)(end - ptr) < sizeof(sljit_uw))
+ goto error;
+
+ used_size = *(sljit_uw*)ptr;
+ aligned_size = SLJIT_SERIALIZE_ALIGN(used_size);
+ ptr += sizeof(sljit_uw);
+
+ if ((sljit_uw)(end - ptr) < aligned_size)
+ goto error;
+
+ if (last_buf == NULL) {
+ SLJIT_ASSERT(compiler->buf != NULL && compiler->buf->next == NULL);
+ buf = compiler->buf;
+ } else {
+ buf = (struct sljit_memory_fragment*)SLJIT_MALLOC(BUF_SIZE, allocator_data);
+ if (!buf)
+ goto error;
+ buf->next = NULL;
+ }
+
+ buf->used_size = used_size;
+ SLJIT_MEMCPY(buf->memory, ptr, used_size);
+
+ if (last_buf != NULL)
+ last_buf->next = buf;
+ last_buf = buf;
+
+ ptr += aligned_size;
+ i--;
+ }
+
+ last_label = NULL;
+ label_count = serialized_compiler->label_count;
+ if ((sljit_uw)(end - ptr) < label_count * sizeof(struct sljit_serialized_label))
+ goto error;
+
+ label_list = (struct sljit_label **)SLJIT_MALLOC(label_count * sizeof(struct sljit_label*), allocator_data);
+ if (label_list == NULL)
+ goto error;
+
+ for (i = 0; i < label_count; i++) {
+ label = (struct sljit_label*)ensure_abuf(compiler, sizeof(struct sljit_label));
+ if (label == NULL)
+ goto error;
+
+ serialized_label = (struct sljit_serialized_label*)ptr;
+ label->next = NULL;
+ label->u.index = i;
+ label->size = serialized_label->size;
+
+ if (last_label != NULL)
+ last_label->next = label;
+ else
+ compiler->labels = label;
+ last_label = label;
+
+ label_list[i] = label;
+ ptr += sizeof(struct sljit_serialized_label);
+ }
+ compiler->last_label = last_label;
+
+ last_jump = NULL;
+ i = serialized_compiler->jump_count;
+ if ((sljit_uw)(end - ptr) < i * sizeof(struct sljit_serialized_jump))
+ goto error;
+
+ while (i > 0) {
+ jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump));
+ if (jump == NULL)
+ goto error;
+
+ serialized_jump = (struct sljit_serialized_jump*)ptr;
+ jump->next = NULL;
+ jump->addr = serialized_jump->addr;
+ jump->flags = serialized_jump->flags;
+
+ if (!(serialized_jump->flags & JUMP_ADDR)) {
+ if (serialized_jump->value != SLJIT_MAX_ADDRESS) {
+ if (serialized_jump->value >= label_count)
+ goto error;
+ jump->u.label = label_list[serialized_jump->value];
+ } else
+ jump->u.label = NULL;
+ } else
+ jump->u.target = serialized_jump->value;
+
+ if (last_jump != NULL)
+ last_jump->next = jump;
+ else
+ compiler->jumps = jump;
+ last_jump = jump;
+
+ ptr += sizeof(struct sljit_serialized_jump);
+ i--;
+ }
+ compiler->last_jump = last_jump;
+
+ SLJIT_FREE(label_list, allocator_data);
+ label_list = NULL;
+
+ last_const = NULL;
+ i = serialized_compiler->const_count;
+ if ((sljit_uw)(end - ptr) < i * sizeof(struct sljit_serialized_const))
+ goto error;
+
+ while (i > 0) {
+ const_ = (struct sljit_const*)ensure_abuf(compiler, sizeof(struct sljit_const));
+ if (const_ == NULL)
+ goto error;
+
+ serialized_const = (struct sljit_serialized_const*)ptr;
+ const_->next = NULL;
+ const_->addr = serialized_const->addr;
+
+ if (last_const != NULL)
+ last_const->next = const_;
+ else
+ compiler->consts = const_;
+ last_const = const_;
+
+ ptr += sizeof(struct sljit_serialized_const);
+ i--;
+ }
+ compiler->last_const = last_const;
+
+#if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) \
+ || (defined SLJIT_DEBUG && SLJIT_DEBUG)
+ if ((sljit_uw)(end - ptr) < sizeof(struct sljit_serialized_debug_info))
+ goto error;
+
+ serialized_debug_info = (struct sljit_serialized_debug_info*)ptr;
+ compiler->last_flags = (sljit_s32)serialized_debug_info->last_flags;
+ compiler->last_return = serialized_debug_info->last_return;
+ compiler->logical_local_size = serialized_debug_info->logical_local_size;
+#endif /* SLJIT_ARGUMENT_CHECKS || SLJIT_DEBUG */
+
+ return compiler;
+
+error:
+ sljit_free_compiler(compiler);
+ if (label_list != NULL)
+ SLJIT_FREE(label_list, allocator_data);
+ return NULL;
+}
diff --git a/src/3rdparty/pcre2/src/sljit/sljitWXExecAllocator.c b/src/3rdparty/pcre2/src/sljit/sljitWXExecAllocator.c
deleted file mode 100644
index 6893813155..0000000000
--- a/src/3rdparty/pcre2/src/sljit/sljitWXExecAllocator.c
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
- * Stack-less Just-In-Time compiler
- *
- * Copyright Zoltan Herczeg (hzmester@freemail.hu). All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification, are
- * permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice, this list of
- * conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright notice, this list
- * of conditions and the following disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDER(S) OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
- * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/*
- This file contains a simple W^X executable memory allocator for POSIX
- like systems and Windows
-
- In *NIX, MAP_ANON is required (that is considered a feature) so make
- sure to set the right availability macros for your system or the code
- will fail to build.
-
- If your system doesn't support mapping of anonymous pages (ex: IRIX) it
- is also likely that it doesn't need this allocator and should be using
- the standard one instead.
-
- It allocates a separate map for each code block and may waste a lot of
- memory, because whatever was requested, will be rounded up to the page
- size (minimum 4KB, but could be even bigger).
-
- It changes the page permissions (RW <-> RX) as needed and therefore, if you
- will be updating the code after it has been generated, need to make sure to
- block any concurrent execution, or could result in a SIGBUS, that could
- even manifest itself at a different address than the one that was being
- modified.
-
- Only use if you are unable to use the regular allocator because of security
- restrictions and adding exceptions to your application or the system are
- not possible.
-*/
-
-#define SLJIT_UPDATE_WX_FLAGS(from, to, enable_exec) \
- sljit_update_wx_flags((from), (to), (enable_exec))
-
-#ifndef _WIN32
-#include <sys/types.h>
-#include <sys/mman.h>
-
-#ifdef __NetBSD__
-#define SLJIT_PROT_WX PROT_MPROTECT(PROT_EXEC)
-#define check_se_protected(ptr, size) (0)
-#else /* POSIX */
-#if !(defined SLJIT_SINGLE_THREADED && SLJIT_SINGLE_THREADED)
-#include <pthread.h>
-#define SLJIT_SE_LOCK() pthread_mutex_lock(&se_lock)
-#define SLJIT_SE_UNLOCK() pthread_mutex_unlock(&se_lock)
-#endif /* !SLJIT_SINGLE_THREADED */
-
-#define check_se_protected(ptr, size) generic_se_protected(ptr, size)
-
-static SLJIT_INLINE int generic_se_protected(void *ptr, sljit_uw size)
-{
- if (SLJIT_LIKELY(!mprotect(ptr, size, PROT_EXEC)))
- return mprotect(ptr, size, PROT_READ | PROT_WRITE);
-
- return -1;
-}
-#endif /* NetBSD */
-
-#ifndef SLJIT_SE_LOCK
-#define SLJIT_SE_LOCK()
-#endif
-#ifndef SLJIT_SE_UNLOCK
-#define SLJIT_SE_UNLOCK()
-#endif
-#ifndef SLJIT_PROT_WX
-#define SLJIT_PROT_WX 0
-#endif
-
-SLJIT_API_FUNC_ATTRIBUTE void* sljit_malloc_exec(sljit_uw size)
-{
-#if !(defined SLJIT_SINGLE_THREADED && SLJIT_SINGLE_THREADED) \
- && !defined(__NetBSD__)
- static pthread_mutex_t se_lock = PTHREAD_MUTEX_INITIALIZER;
-#endif
- static int se_protected = !SLJIT_PROT_WX;
- int prot = PROT_READ | PROT_WRITE | SLJIT_PROT_WX;
- sljit_uw* ptr;
-
- if (SLJIT_UNLIKELY(se_protected < 0))
- return NULL;
-
-#ifdef PROT_MAX
- prot |= PROT_MAX(PROT_READ | PROT_WRITE | PROT_EXEC);
-#endif
-
- size += sizeof(sljit_uw);
- ptr = (sljit_uw*)mmap(NULL, size, prot, MAP_PRIVATE | MAP_ANON, -1, 0);
-
- if (ptr == MAP_FAILED)
- return NULL;
-
- if (SLJIT_UNLIKELY(se_protected > 0)) {
- SLJIT_SE_LOCK();
- se_protected = check_se_protected(ptr, size);
- SLJIT_SE_UNLOCK();
- if (SLJIT_UNLIKELY(se_protected < 0)) {
- munmap((void *)ptr, size);
- return NULL;
- }
- }
-
- *ptr++ = size;
- return ptr;
-}
-
-#undef SLJIT_PROT_WX
-#undef SLJIT_SE_UNLOCK
-#undef SLJIT_SE_LOCK
-
-SLJIT_API_FUNC_ATTRIBUTE void sljit_free_exec(void* ptr)
-{
- sljit_uw *start_ptr = ((sljit_uw*)ptr) - 1;
- munmap((void*)start_ptr, *start_ptr);
-}
-
-static void sljit_update_wx_flags(void *from, void *to, sljit_s32 enable_exec)
-{
- sljit_uw page_mask = (sljit_uw)get_page_alignment();
- sljit_uw start = (sljit_uw)from;
- sljit_uw end = (sljit_uw)to;
- int prot = PROT_READ | (enable_exec ? PROT_EXEC : PROT_WRITE);
-
- SLJIT_ASSERT(start < end);
-
- start &= ~page_mask;
- end = (end + page_mask) & ~page_mask;
-
- mprotect((void*)start, end - start, prot);
-}
-
-#else /* windows */
-
-SLJIT_API_FUNC_ATTRIBUTE void* sljit_malloc_exec(sljit_uw size)
-{
- sljit_uw *ptr;
-
- size += sizeof(sljit_uw);
- ptr = (sljit_uw*)VirtualAlloc(NULL, size,
- MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
-
- if (!ptr)
- return NULL;
-
- *ptr++ = size;
-
- return ptr;
-}
-
-SLJIT_API_FUNC_ATTRIBUTE void sljit_free_exec(void* ptr)
-{
- sljit_uw start = (sljit_uw)ptr - sizeof(sljit_uw);
-#if defined(SLJIT_DEBUG) && SLJIT_DEBUG
- sljit_uw page_mask = (sljit_uw)get_page_alignment();
-
- SLJIT_ASSERT(!(start & page_mask));
-#endif
- VirtualFree((void*)start, 0, MEM_RELEASE);
-}
-
-static void sljit_update_wx_flags(void *from, void *to, sljit_s32 enable_exec)
-{
- DWORD oldprot;
- sljit_uw page_mask = (sljit_uw)get_page_alignment();
- sljit_uw start = (sljit_uw)from;
- sljit_uw end = (sljit_uw)to;
- DWORD prot = enable_exec ? PAGE_EXECUTE : PAGE_READWRITE;
-
- SLJIT_ASSERT(start < end);
-
- start &= ~page_mask;
- end = (end + page_mask) & ~page_mask;
-
- VirtualProtect((void*)start, end - start, prot, &oldprot);
-}
-
-#endif /* !windows */
-
-SLJIT_API_FUNC_ATTRIBUTE void sljit_free_unused_memory_exec(void)
-{
- /* This allocator does not keep unused memory for future allocations. */
-}
diff --git a/src/3rdparty/sqlite/qt_attribution.json b/src/3rdparty/sqlite/qt_attribution.json
index c5a5b12062..0910c709e2 100644
--- a/src/3rdparty/sqlite/qt_attribution.json
+++ b/src/3rdparty/sqlite/qt_attribution.json
@@ -7,8 +7,8 @@
"Description": "SQLite is a small C library that implements a self-contained, embeddable, zero-configuration SQL database engine.",
"Homepage": "https://www.sqlite.org/",
- "Version": "3.45.3",
- "DownloadLocation": "https://www.sqlite.org/2024/sqlite-amalgamation-3450300.zip",
+ "Version": "3.46.0",
+ "DownloadLocation": "https://www.sqlite.org/2024/sqlite-amalgamation-3460000.zip",
"License": "SQLite Blessing",
"LicenseId": "blessing",
"Copyright": "The authors disclaim copyright to the source code. However, a license can be obtained if needed."
diff --git a/src/3rdparty/sqlite/sqlite3.c b/src/3rdparty/sqlite/sqlite3.c
index 08c593e55c..eaa24a1310 100644
--- a/src/3rdparty/sqlite/sqlite3.c
+++ b/src/3rdparty/sqlite/sqlite3.c
@@ -1,6 +1,6 @@
/******************************************************************************
** This file is an amalgamation of many separate C source files from SQLite
-** version 3.45.3. By combining all the individual C code files into this
+** version 3.46.0. By combining all the individual C code files into this
** single large file, the entire code can be compiled as a single translation
** unit. This allows many compilers to do optimizations that would not be
** possible if the files were compiled separately. Performance improvements
@@ -18,7 +18,7 @@
** separate file. This file contains only code for the core SQLite library.
**
** The content in this amalgamation comes from Fossil check-in
-** 8653b758870e6ef0c98d46b3ace27849054a.
+** 96c92aba00c8375bc32fafcdf12429c58bd8.
*/
#define SQLITE_CORE 1
#define SQLITE_AMALGAMATION 1
@@ -459,9 +459,9 @@ extern "C" {
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
** [sqlite_version()] and [sqlite_source_id()].
*/
-#define SQLITE_VERSION "3.45.3"
-#define SQLITE_VERSION_NUMBER 3045003
-#define SQLITE_SOURCE_ID "2024-04-15 13:34:05 8653b758870e6ef0c98d46b3ace27849054af85da891eb121e9aaa537f1e8355"
+#define SQLITE_VERSION "3.46.0"
+#define SQLITE_VERSION_NUMBER 3046000
+#define SQLITE_SOURCE_ID "2024-05-23 13:25:27 96c92aba00c8375bc32fafcdf12429c58bd8aabfcadab6683e35bbb9cdebf19e"
/*
** CAPI3REF: Run-Time Library Version Numbers
@@ -1077,11 +1077,11 @@ struct sqlite3_file {
** </ul>
** xLock() upgrades the database file lock. In other words, xLock() moves the
** database file lock in the direction NONE toward EXCLUSIVE. The argument to
-** xLock() is always on of SHARED, RESERVED, PENDING, or EXCLUSIVE, never
+** xLock() is always one of SHARED, RESERVED, PENDING, or EXCLUSIVE, never
** SQLITE_LOCK_NONE. If the database file lock is already at or above the
** requested lock, then the call to xLock() is a no-op.
** xUnlock() downgrades the database file lock to either SHARED or NONE.
-* If the lock is already at or below the requested lock state, then the call
+** If the lock is already at or below the requested lock state, then the call
** to xUnlock() is a no-op.
** The xCheckReservedLock() method checks whether any database connection,
** either in this process or in some other process, is holding a RESERVED,
@@ -3618,8 +3618,8 @@ SQLITE_API int sqlite3_set_authorizer(
#define SQLITE_RECURSIVE 33 /* NULL NULL */
/*
-** CAPI3REF: Tracing And Profiling Functions
-** METHOD: sqlite3
+** CAPI3REF: Deprecated Tracing And Profiling Functions
+** DEPRECATED
**
** These routines are deprecated. Use the [sqlite3_trace_v2()] interface
** instead of the routines described here.
@@ -7200,6 +7200,12 @@ SQLITE_API int sqlite3_autovacuum_pages(
** The exceptions defined in this paragraph might change in a future
** release of SQLite.
**
+** Whether the update hook is invoked before or after the
+** corresponding change is currently unspecified and may differ
+** depending on the type of change. Do not rely on the order of the
+** hook call with regards to the final result of the operation which
+** triggers the hook.
+**
** The update hook implementation must not do anything that will modify
** the database connection that invoked the update hook. Any actions
** to modify the database connection must be deferred until after the
@@ -8670,7 +8676,7 @@ SQLITE_API int sqlite3_test_control(int op, ...);
** The sqlite3_keyword_count() interface returns the number of distinct
** keywords understood by SQLite.
**
-** The sqlite3_keyword_name(N,Z,L) interface finds the N-th keyword and
+** The sqlite3_keyword_name(N,Z,L) interface finds the 0-based N-th keyword and
** makes *Z point to that keyword expressed as UTF8 and writes the number
** of bytes in the keyword into *L. The string that *Z points to is not
** zero-terminated. The sqlite3_keyword_name(N,Z,L) routine returns
@@ -10249,24 +10255,45 @@ SQLITE_API const char *sqlite3_vtab_collation(sqlite3_index_info*,int);
** <li value="2"><p>
** ^(If the sqlite3_vtab_distinct() interface returns 2, that means
** that the query planner does not need the rows returned in any particular
-** order, as long as rows with the same values in all "aOrderBy" columns
-** are adjacent.)^ ^(Furthermore, only a single row for each particular
-** combination of values in the columns identified by the "aOrderBy" field
-** needs to be returned.)^ ^It is always ok for two or more rows with the same
-** values in all "aOrderBy" columns to be returned, as long as all such rows
-** are adjacent. ^The virtual table may, if it chooses, omit extra rows
-** that have the same value for all columns identified by "aOrderBy".
-** ^However omitting the extra rows is optional.
+** order, as long as rows with the same values in all columns identified
+** by "aOrderBy" are adjacent.)^ ^(Furthermore, when two or more rows
+** contain the same values for all columns identified by "colUsed", all but
+** one such row may optionally be omitted from the result.)^
+** The virtual table is not required to omit rows that are duplicates
+** over the "colUsed" columns, but if the virtual table can do that without
+** too much extra effort, it could potentially help the query to run faster.
** This mode is used for a DISTINCT query.
** <li value="3"><p>
-** ^(If the sqlite3_vtab_distinct() interface returns 3, that means
-** that the query planner needs only distinct rows but it does need the
-** rows to be sorted.)^ ^The virtual table implementation is free to omit
-** rows that are identical in all aOrderBy columns, if it wants to, but
-** it is not required to omit any rows. This mode is used for queries
+** ^(If the sqlite3_vtab_distinct() interface returns 3, that means the
+** virtual table must return rows in the order defined by "aOrderBy" as
+** if the sqlite3_vtab_distinct() interface had returned 0. However if
+** two or more rows in the result have the same values for all columns
+** identified by "colUsed", then all but one such row may optionally be
+** omitted.)^ Like when the return value is 2, the virtual table
+** is not required to omit rows that are duplicates over the "colUsed"
+** columns, but if the virtual table can do that without
+** too much extra effort, it could potentially help the query to run faster.
+** This mode is used for queries
** that have both DISTINCT and ORDER BY clauses.
** </ol>
**
+** <p>The following table summarizes the conditions under which the
+** virtual table is allowed to set the "orderByConsumed" flag based on
+** the value returned by sqlite3_vtab_distinct(). This table is a
+** restatement of the previous four paragraphs:
+**
+** <table border=1 cellspacing=0 cellpadding=10 width="90%">
+** <tr>
+** <td valign="top">sqlite3_vtab_distinct() return value
+** <td valign="top">Rows are returned in aOrderBy order
+** <td valign="top">Rows with the same value in all aOrderBy columns are adjacent
+** <td valign="top">Duplicates over all colUsed columns may be omitted
+** <tr><td>0<td>yes<td>yes<td>no
+** <tr><td>1<td>no<td>yes<td>no
+** <tr><td>2<td>no<td>yes<td>yes
+** <tr><td>3<td>yes<td>yes<td>yes
+** </table>
+**
** ^For the purposes of comparing virtual table output values to see if the
** values are same value for sorting purposes, two NULL values are considered
** to be the same. In other words, the comparison operator is "IS"
@@ -12312,6 +12339,30 @@ SQLITE_API int sqlite3changegroup_schema(sqlite3_changegroup*, sqlite3*, const c
SQLITE_API int sqlite3changegroup_add(sqlite3_changegroup*, int nData, void *pData);
/*
+** CAPI3REF: Add A Single Change To A Changegroup
+** METHOD: sqlite3_changegroup
+**
+** This function adds the single change currently indicated by the iterator
+** passed as the second argument to the changegroup object. The rules for
+** adding the change are just as described for [sqlite3changegroup_add()].
+**
+** If the change is successfully added to the changegroup, SQLITE_OK is
+** returned. Otherwise, an SQLite error code is returned.
+**
+** The iterator must point to a valid entry when this function is called.
+** If it does not, SQLITE_ERROR is returned and no change is added to the
+** changegroup. Additionally, the iterator must not have been opened with
+** the SQLITE_CHANGESETAPPLY_INVERT flag. In this case SQLITE_ERROR is also
+** returned.
+*/
+SQLITE_API int sqlite3changegroup_add_change(
+ sqlite3_changegroup*,
+ sqlite3_changeset_iter*
+);
+
+
+
+/*
** CAPI3REF: Obtain A Composite Changeset From A Changegroup
** METHOD: sqlite3_changegroup
**
@@ -13115,8 +13166,8 @@ struct Fts5PhraseIter {
** EXTENSION API FUNCTIONS
**
** xUserData(pFts):
-** Return a copy of the context pointer the extension function was
-** registered with.
+** Return a copy of the pUserData pointer passed to the xCreateFunction()
+** API when the extension function was registered.
**
** xColumnTotalSize(pFts, iCol, pnToken):
** If parameter iCol is less than zero, set output variable *pnToken
@@ -14314,6 +14365,8 @@ struct fts5_api {
# define SQLITE_OMIT_ALTERTABLE
#endif
+#define SQLITE_DIGIT_SEPARATOR '_'
+
/*
** Return true (non-zero) if the input is an integer that is too large
** to fit in 32-bits. This macro is used inside of various testcase()
@@ -14606,8 +14659,8 @@ SQLITE_PRIVATE void sqlite3HashClear(Hash*);
#define TK_TRUEFALSE 170
#define TK_ISNOT 171
#define TK_FUNCTION 172
-#define TK_UMINUS 173
-#define TK_UPLUS 174
+#define TK_UPLUS 173
+#define TK_UMINUS 174
#define TK_TRUTH 175
#define TK_REGISTER 176
#define TK_VECTOR 177
@@ -14616,8 +14669,9 @@ SQLITE_PRIVATE void sqlite3HashClear(Hash*);
#define TK_ASTERISK 180
#define TK_SPAN 181
#define TK_ERROR 182
-#define TK_SPACE 183
-#define TK_ILLEGAL 184
+#define TK_QNUMBER 183
+#define TK_SPACE 184
+#define TK_ILLEGAL 185
/************** End of parse.h ***********************************************/
/************** Continuing where we left off in sqliteInt.h ******************/
@@ -14879,7 +14933,7 @@ typedef INT16_TYPE LogEst;
# define SQLITE_PTRSIZE __SIZEOF_POINTER__
# elif defined(i386) || defined(__i386__) || defined(_M_IX86) || \
defined(_M_ARM) || defined(__arm__) || defined(__x86) || \
- (defined(__APPLE__) && defined(__POWERPC__)) || \
+ (defined(__APPLE__) && defined(__ppc__)) || \
(defined(__TOS_AIX__) && !defined(__64BIT__))
# define SQLITE_PTRSIZE 4
# else
@@ -15147,7 +15201,7 @@ SQLITE_PRIVATE u32 sqlite3WhereTrace;
** 0x00000010 Display sqlite3_index_info xBestIndex calls
** 0x00000020 Range an equality scan metrics
** 0x00000040 IN operator decisions
-** 0x00000080 WhereLoop cost adjustements
+** 0x00000080 WhereLoop cost adjustments
** 0x00000100
** 0x00000200 Covering index decisions
** 0x00000400 OR optimization
@@ -16296,6 +16350,7 @@ SQLITE_PRIVATE int sqlite3BtreeIntegrityCheck(
sqlite3 *db, /* Database connection that is running the check */
Btree *p, /* The btree to be checked */
Pgno *aRoot, /* An array of root pages numbers for individual trees */
+ sqlite3_value *aCnt, /* OUT: entry counts for each btree in aRoot[] */
int nRoot, /* Number of entries in aRoot[] */
int mxErr, /* Stop reporting errors after this many */
int *pnErr, /* OUT: Write number of errors seen to this variable */
@@ -16566,12 +16621,12 @@ typedef struct VdbeOpList VdbeOpList;
#define OP_Vacuum 5
#define OP_VFilter 6 /* jump, synopsis: iplan=r[P3] zplan='P4' */
#define OP_VUpdate 7 /* synopsis: data=r[P3@P2] */
-#define OP_Init 8 /* jump, synopsis: Start at P2 */
+#define OP_Init 8 /* jump0, synopsis: Start at P2 */
#define OP_Goto 9 /* jump */
#define OP_Gosub 10 /* jump */
-#define OP_InitCoroutine 11 /* jump */
-#define OP_Yield 12 /* jump */
-#define OP_MustBeInt 13 /* jump */
+#define OP_InitCoroutine 11 /* jump0 */
+#define OP_Yield 12 /* jump0 */
+#define OP_MustBeInt 13 /* jump0 */
#define OP_Jump 14 /* jump */
#define OP_Once 15 /* jump */
#define OP_If 16 /* jump */
@@ -16579,22 +16634,22 @@ typedef struct VdbeOpList VdbeOpList;
#define OP_IsType 18 /* jump, synopsis: if typeof(P1.P3) in P5 goto P2 */
#define OP_Not 19 /* same as TK_NOT, synopsis: r[P2]= !r[P1] */
#define OP_IfNullRow 20 /* jump, synopsis: if P1.nullRow then r[P3]=NULL, goto P2 */
-#define OP_SeekLT 21 /* jump, synopsis: key=r[P3@P4] */
-#define OP_SeekLE 22 /* jump, synopsis: key=r[P3@P4] */
-#define OP_SeekGE 23 /* jump, synopsis: key=r[P3@P4] */
-#define OP_SeekGT 24 /* jump, synopsis: key=r[P3@P4] */
+#define OP_SeekLT 21 /* jump0, synopsis: key=r[P3@P4] */
+#define OP_SeekLE 22 /* jump0, synopsis: key=r[P3@P4] */
+#define OP_SeekGE 23 /* jump0, synopsis: key=r[P3@P4] */
+#define OP_SeekGT 24 /* jump0, synopsis: key=r[P3@P4] */
#define OP_IfNotOpen 25 /* jump, synopsis: if( !csr[P1] ) goto P2 */
#define OP_IfNoHope 26 /* jump, synopsis: key=r[P3@P4] */
#define OP_NoConflict 27 /* jump, synopsis: key=r[P3@P4] */
#define OP_NotFound 28 /* jump, synopsis: key=r[P3@P4] */
#define OP_Found 29 /* jump, synopsis: key=r[P3@P4] */
-#define OP_SeekRowid 30 /* jump, synopsis: intkey=r[P3] */
+#define OP_SeekRowid 30 /* jump0, synopsis: intkey=r[P3] */
#define OP_NotExists 31 /* jump, synopsis: intkey=r[P3] */
-#define OP_Last 32 /* jump */
-#define OP_IfSmaller 33 /* jump */
+#define OP_Last 32 /* jump0 */
+#define OP_IfSizeBetween 33 /* jump */
#define OP_SorterSort 34 /* jump */
#define OP_Sort 35 /* jump */
-#define OP_Rewind 36 /* jump */
+#define OP_Rewind 36 /* jump0 */
#define OP_SorterNext 37 /* jump */
#define OP_Prev 38 /* jump */
#define OP_Next 39 /* jump */
@@ -16606,7 +16661,7 @@ typedef struct VdbeOpList VdbeOpList;
#define OP_IdxGE 45 /* jump, synopsis: key=r[P3@P4] */
#define OP_RowSetRead 46 /* jump, synopsis: r[P3]=rowset(P1) */
#define OP_RowSetTest 47 /* jump, synopsis: if r[P3] in rowset(P1) goto P2 */
-#define OP_Program 48 /* jump */
+#define OP_Program 48 /* jump0 */
#define OP_FkIfZero 49 /* jump, synopsis: if fkctr[P1]==0 goto P2 */
#define OP_IsNull 50 /* jump, same as TK_ISNULL, synopsis: if r[P1]==NULL goto P2 */
#define OP_NotNull 51 /* jump, same as TK_NOTNULL, synopsis: if r[P1]!=NULL goto P2 */
@@ -16636,7 +16691,7 @@ typedef struct VdbeOpList VdbeOpList;
#define OP_Null 75 /* synopsis: r[P2..P3]=NULL */
#define OP_SoftNull 76 /* synopsis: r[P1]=NULL */
#define OP_Blob 77 /* synopsis: r[P2]=P4 (len=P1) */
-#define OP_Variable 78 /* synopsis: r[P2]=parameter(P1,P4) */
+#define OP_Variable 78 /* synopsis: r[P2]=parameter(P1) */
#define OP_Move 79 /* synopsis: r[P2@P3]=r[P1@P3] */
#define OP_Copy 80 /* synopsis: r[P2@P3+1]=r[P1@P3+1] */
#define OP_SCopy 81 /* synopsis: r[P2]=r[P1] */
@@ -16760,14 +16815,15 @@ typedef struct VdbeOpList VdbeOpList;
#define OPFLG_OUT2 0x10 /* out2: P2 is an output */
#define OPFLG_OUT3 0x20 /* out3: P3 is an output */
#define OPFLG_NCYCLE 0x40 /* ncycle:Cycles count against P1 */
+#define OPFLG_JUMP0 0x80 /* jump0: P2 might be zero */
#define OPFLG_INITIALIZER {\
/* 0 */ 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x41, 0x00,\
-/* 8 */ 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01,\
-/* 16 */ 0x03, 0x03, 0x01, 0x12, 0x01, 0x49, 0x49, 0x49,\
-/* 24 */ 0x49, 0x01, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,\
-/* 32 */ 0x41, 0x01, 0x41, 0x41, 0x41, 0x01, 0x41, 0x41,\
+/* 8 */ 0x81, 0x01, 0x01, 0x81, 0x83, 0x83, 0x01, 0x01,\
+/* 16 */ 0x03, 0x03, 0x01, 0x12, 0x01, 0xc9, 0xc9, 0xc9,\
+/* 24 */ 0xc9, 0x01, 0x49, 0x49, 0x49, 0x49, 0xc9, 0x49,\
+/* 32 */ 0xc1, 0x01, 0x41, 0x41, 0xc1, 0x01, 0x41, 0x41,\
/* 40 */ 0x41, 0x41, 0x41, 0x26, 0x26, 0x41, 0x23, 0x0b,\
-/* 48 */ 0x01, 0x01, 0x03, 0x03, 0x0b, 0x0b, 0x0b, 0x0b,\
+/* 48 */ 0x81, 0x01, 0x03, 0x03, 0x0b, 0x0b, 0x0b, 0x0b,\
/* 56 */ 0x0b, 0x0b, 0x01, 0x03, 0x03, 0x03, 0x01, 0x41,\
/* 64 */ 0x01, 0x00, 0x00, 0x02, 0x02, 0x08, 0x00, 0x10,\
/* 72 */ 0x10, 0x10, 0x00, 0x10, 0x00, 0x10, 0x10, 0x00,\
@@ -16927,6 +16983,8 @@ SQLITE_PRIVATE RecordCompare sqlite3VdbeFindCompare(UnpackedRecord*);
SQLITE_PRIVATE void sqlite3VdbeLinkSubProgram(Vdbe *, SubProgram *);
SQLITE_PRIVATE int sqlite3VdbeHasSubProgram(Vdbe*);
+SQLITE_PRIVATE void sqlite3MemSetArrayInt64(sqlite3_value *aMem, int iIdx, i64 val);
+
SQLITE_PRIVATE int sqlite3NotPureFunc(sqlite3_context*);
#ifdef SQLITE_ENABLE_BYTECODE_VTAB
SQLITE_PRIVATE int sqlite3VdbeBytecodeVtabInit(sqlite3*);
@@ -17514,6 +17572,10 @@ struct FuncDefHash {
};
#define SQLITE_FUNC_HASH(C,L) (((C)+(L))%SQLITE_FUNC_HASH_SZ)
+#if defined(SQLITE_USER_AUTHENTICATION)
+# warning "The SQLITE_USER_AUTHENTICATION extension is deprecated. \
+ See ext/userauth/user-auth.txt for details."
+#endif
#ifdef SQLITE_USER_AUTHENTICATION
/*
** Information held in the "sqlite3" database connection object and used
@@ -17817,7 +17879,7 @@ struct sqlite3 {
#define SQLITE_CursorHints 0x00000400 /* Add OP_CursorHint opcodes */
#define SQLITE_Stat4 0x00000800 /* Use STAT4 data */
/* TH3 expects this value ^^^^^^^^^^ to be 0x0000800. Don't change it */
-#define SQLITE_PushDown 0x00001000 /* The push-down optimization */
+#define SQLITE_PushDown 0x00001000 /* WHERE-clause push-down opt */
#define SQLITE_SimplifyJoin 0x00002000 /* Convert LEFT JOIN to JOIN */
#define SQLITE_SkipScan 0x00004000 /* Skip-scans */
#define SQLITE_PropagateConst 0x00008000 /* The constant propagation opt */
@@ -18390,8 +18452,7 @@ struct Table {
#define TF_HasStored 0x00000040 /* Has one or more STORED columns */
#define TF_HasGenerated 0x00000060 /* Combo: HasVirtual + HasStored */
#define TF_WithoutRowid 0x00000080 /* No rowid. PRIMARY KEY is the key */
-#define TF_StatsUsed 0x00000100 /* Query planner decisions affected by
- ** Index.aiRowLogEst[] values */
+#define TF_MaybeReanalyze 0x00000100 /* Maybe run ANALYZE on this table */
#define TF_NoVisibleRowid 0x00000200 /* No user-visible "rowid" column */
#define TF_OOOHidden 0x00000400 /* Out-of-Order hidden columns */
#define TF_HasNotNull 0x00000800 /* Contains NOT NULL constraints */
@@ -19191,10 +19252,12 @@ struct IdList {
**
** Union member validity:
**
-** u1.zIndexedBy fg.isIndexedBy && !fg.isTabFunc
-** u1.pFuncArg fg.isTabFunc && !fg.isIndexedBy
-** u2.pIBIndex fg.isIndexedBy && !fg.isCte
-** u2.pCteUse fg.isCte && !fg.isIndexedBy
+** u1.zIndexedBy fg.isIndexedBy && !fg.isTabFunc
+** u1.pFuncArg fg.isTabFunc && !fg.isIndexedBy
+** u1.nRow !fg.isTabFunc && !fg.isIndexedBy
+**
+** u2.pIBIndex fg.isIndexedBy && !fg.isCte
+** u2.pCteUse fg.isCte && !fg.isIndexedBy
*/
struct SrcItem {
Schema *pSchema; /* Schema to which this item is fixed */
@@ -19222,6 +19285,7 @@ struct SrcItem {
unsigned isOn :1; /* u3.pOn was once valid and non-NULL */
unsigned isSynthUsing :1; /* u3.pUsing is synthesized from NATURAL */
unsigned isNestedFrom :1; /* pSelect is a SF_NestedFrom subquery */
+ unsigned rowidUsed :1; /* The ROWID of this table is referenced */
} fg;
int iCursor; /* The VDBE cursor number used to access this table */
union {
@@ -19232,6 +19296,7 @@ struct SrcItem {
union {
char *zIndexedBy; /* Identifier from "INDEXED BY <zIndex>" clause */
ExprList *pFuncArg; /* Arguments to table-valued-function */
+ u32 nRow; /* Number of rows in a VALUES clause */
} u1;
union {
Index *pIBIndex; /* Index structure corresponding to u1.zIndexedBy */
@@ -19489,11 +19554,12 @@ struct Select {
#define SF_View 0x0200000 /* SELECT statement is a view */
#define SF_NoopOrderBy 0x0400000 /* ORDER BY is ignored for this query */
#define SF_UFSrcCheck 0x0800000 /* Check pSrc as required by UPDATE...FROM */
-#define SF_PushDown 0x1000000 /* SELECT has be modified by push-down opt */
+#define SF_PushDown 0x1000000 /* Modified by WHERE-clause push-down opt */
#define SF_MultiPart 0x2000000 /* Has multiple incompatible PARTITIONs */
#define SF_CopyCte 0x4000000 /* SELECT statement is a copy of a CTE */
#define SF_OrderByReqd 0x8000000 /* The ORDER BY clause may not be omitted */
#define SF_UpdateFrom 0x10000000 /* Query originates with UPDATE FROM */
+#define SF_Correlated 0x20000000 /* True if references the outer context */
/* True if S exists and has SF_NestedFrom */
#define IsNestedFrom(S) ((S)!=0 && ((S)->selFlags&SF_NestedFrom)!=0)
@@ -19733,6 +19799,7 @@ struct Parse {
u8 disableLookaside; /* Number of times lookaside has been disabled */
u8 prepFlags; /* SQLITE_PREPARE_* flags */
u8 withinRJSubrtn; /* Nesting level for RIGHT JOIN body subroutines */
+ u8 bHasWith; /* True if statement contains WITH */
#if defined(SQLITE_DEBUG) || defined(SQLITE_COVERAGE_TEST)
u8 earlyCleanup; /* OOM inside sqlite3ParserAddCleanup() */
#endif
@@ -20412,6 +20479,9 @@ struct Window {
** due to the SQLITE_SUBTYPE flag */
};
+SQLITE_PRIVATE Select *sqlite3MultiValues(Parse *pParse, Select *pLeft, ExprList *pRow);
+SQLITE_PRIVATE void sqlite3MultiValuesEnd(Parse *pParse, Select *pVal);
+
#ifndef SQLITE_OMIT_WINDOWFUNC
SQLITE_PRIVATE void sqlite3WindowDelete(sqlite3*, Window*);
SQLITE_PRIVATE void sqlite3WindowUnlinkFromSelect(Window*);
@@ -20729,6 +20799,7 @@ SQLITE_PRIVATE int sqlite3ErrorToParser(sqlite3*,int);
SQLITE_PRIVATE void sqlite3Dequote(char*);
SQLITE_PRIVATE void sqlite3DequoteExpr(Expr*);
SQLITE_PRIVATE void sqlite3DequoteToken(Token*);
+SQLITE_PRIVATE void sqlite3DequoteNumber(Parse*, Expr*);
SQLITE_PRIVATE void sqlite3TokenInit(Token*,char*);
SQLITE_PRIVATE int sqlite3KeywordCode(const unsigned char*, int);
SQLITE_PRIVATE int sqlite3RunParser(Parse*, const char*);
@@ -20759,7 +20830,7 @@ SQLITE_PRIVATE void sqlite3ExprFunctionUsable(Parse*,const Expr*,const FuncDef*)
SQLITE_PRIVATE void sqlite3ExprAssignVarNumber(Parse*, Expr*, u32);
SQLITE_PRIVATE void sqlite3ExprDelete(sqlite3*, Expr*);
SQLITE_PRIVATE void sqlite3ExprDeleteGeneric(sqlite3*,void*);
-SQLITE_PRIVATE void sqlite3ExprDeferredDelete(Parse*, Expr*);
+SQLITE_PRIVATE int sqlite3ExprDeferredDelete(Parse*, Expr*);
SQLITE_PRIVATE void sqlite3ExprUnmapAndDelete(Parse*, Expr*);
SQLITE_PRIVATE ExprList *sqlite3ExprListAppend(Parse*,ExprList*,Expr*);
SQLITE_PRIVATE ExprList *sqlite3ExprListAppendVector(Parse*,ExprList*,IdList*,Expr*);
@@ -20982,12 +21053,10 @@ SQLITE_PRIVATE void sqlite3LeaveMutexAndCloseZombie(sqlite3*);
SQLITE_PRIVATE u32 sqlite3IsTrueOrFalse(const char*);
SQLITE_PRIVATE int sqlite3ExprIdToTrueFalse(Expr*);
SQLITE_PRIVATE int sqlite3ExprTruthValue(const Expr*);
-SQLITE_PRIVATE int sqlite3ExprIsConstant(Expr*);
-SQLITE_PRIVATE int sqlite3ExprIsConstantNotJoin(Expr*);
+SQLITE_PRIVATE int sqlite3ExprIsConstant(Parse*,Expr*);
SQLITE_PRIVATE int sqlite3ExprIsConstantOrFunction(Expr*, u8);
SQLITE_PRIVATE int sqlite3ExprIsConstantOrGroupBy(Parse*, Expr*, ExprList*);
-SQLITE_PRIVATE int sqlite3ExprIsTableConstant(Expr*,int);
-SQLITE_PRIVATE int sqlite3ExprIsSingleTableConstraint(Expr*,const SrcList*,int);
+SQLITE_PRIVATE int sqlite3ExprIsSingleTableConstraint(Expr*,const SrcList*,int,int);
#ifdef SQLITE_ENABLE_CURSOR_HINTS
SQLITE_PRIVATE int sqlite3ExprContainsSubquery(Expr*);
#endif
@@ -21172,7 +21241,9 @@ SQLITE_PRIVATE void sqlite3ErrorWithMsg(sqlite3*, int, const char*,...);
SQLITE_PRIVATE void sqlite3Error(sqlite3*,int);
SQLITE_PRIVATE void sqlite3ErrorClear(sqlite3*);
SQLITE_PRIVATE void sqlite3SystemError(sqlite3*,int);
+#if !defined(SQLITE_OMIT_BLOB_LITERAL)
SQLITE_PRIVATE void *sqlite3HexToBlob(sqlite3*, const char *z, int n);
+#endif
SQLITE_PRIVATE u8 sqlite3HexToInt(int h);
SQLITE_PRIVATE int sqlite3TwoPartName(Parse *, Token *, Token *, Token **);
@@ -24219,13 +24290,14 @@ struct DateTime {
int tz; /* Timezone offset in minutes */
double s; /* Seconds */
char validJD; /* True (1) if iJD is valid */
- char rawS; /* Raw numeric value stored in s */
char validYMD; /* True (1) if Y,M,D are valid */
char validHMS; /* True (1) if h,m,s are valid */
- char validTZ; /* True (1) if tz is valid */
- char tzSet; /* Timezone was set explicitly */
- char isError; /* An overflow has occurred */
- char useSubsec; /* Display subsecond precision */
+ char nFloor; /* Days to implement "floor" */
+ unsigned rawS : 1; /* Raw numeric value stored in s */
+ unsigned isError : 1; /* An overflow has occurred */
+ unsigned useSubsec : 1; /* Display subsecond precision */
+ unsigned isUtc : 1; /* Time is known to be UTC */
+ unsigned isLocal : 1; /* Time is known to be localtime */
};
@@ -24323,6 +24395,8 @@ static int parseTimezone(const char *zDate, DateTime *p){
sgn = +1;
}else if( c=='Z' || c=='z' ){
zDate++;
+ p->isLocal = 0;
+ p->isUtc = 1;
goto zulu_time;
}else{
return c!=0;
@@ -24335,7 +24409,6 @@ static int parseTimezone(const char *zDate, DateTime *p){
p->tz = sgn*(nMn + nHr*60);
zulu_time:
while( sqlite3Isspace(*zDate) ){ zDate++; }
- p->tzSet = 1;
return *zDate!=0;
}
@@ -24379,7 +24452,6 @@ static int parseHhMmSs(const char *zDate, DateTime *p){
p->m = m;
p->s = s + ms;
if( parseTimezone(zDate, p) ) return 1;
- p->validTZ = (p->tz!=0)?1:0;
return 0;
}
@@ -24426,16 +24498,41 @@ static void computeJD(DateTime *p){
p->validJD = 1;
if( p->validHMS ){
p->iJD += p->h*3600000 + p->m*60000 + (sqlite3_int64)(p->s*1000 + 0.5);
- if( p->validTZ ){
+ if( p->tz ){
p->iJD -= p->tz*60000;
p->validYMD = 0;
p->validHMS = 0;
- p->validTZ = 0;
+ p->tz = 0;
+ p->isUtc = 1;
+ p->isLocal = 0;
}
}
}
/*
+** Given the YYYY-MM-DD information current in p, determine if there
+** is day-of-month overflow and set nFloor to the number of days that
+** would need to be subtracted from the date in order to bring the
+** date back to the end of the month.
+*/
+static void computeFloor(DateTime *p){
+ assert( p->validYMD || p->isError );
+ assert( p->D>=0 && p->D<=31 );
+ assert( p->M>=0 && p->M<=12 );
+ if( p->D<=28 ){
+ p->nFloor = 0;
+ }else if( (1<<p->M) & 0x15aa ){
+ p->nFloor = 0;
+ }else if( p->M!=2 ){
+ p->nFloor = (p->D==31);
+ }else if( p->Y%4!=0 || (p->Y%100==0 && p->Y%400!=0) ){
+ p->nFloor = p->D - 28;
+ }else{
+ p->nFloor = p->D - 29;
+ }
+}
+
+/*
** Parse dates of the form
**
** YYYY-MM-DD HH:MM:SS.FFF
@@ -24473,12 +24570,16 @@ static int parseYyyyMmDd(const char *zDate, DateTime *p){
p->Y = neg ? -Y : Y;
p->M = M;
p->D = D;
- if( p->validTZ ){
+ computeFloor(p);
+ if( p->tz ){
computeJD(p);
}
return 0;
}
+
+static void clearYMD_HMS_TZ(DateTime *p); /* Forward declaration */
+
/*
** Set the time to the current time reported by the VFS.
**
@@ -24488,6 +24589,9 @@ static int setDateTimeToCurrent(sqlite3_context *context, DateTime *p){
p->iJD = sqlite3StmtCurrentTime(context);
if( p->iJD>0 ){
p->validJD = 1;
+ p->isUtc = 1;
+ p->isLocal = 0;
+ clearYMD_HMS_TZ(p);
return 0;
}else{
return 1;
@@ -24626,7 +24730,7 @@ static void computeYMD_HMS(DateTime *p){
static void clearYMD_HMS_TZ(DateTime *p){
p->validYMD = 0;
p->validHMS = 0;
- p->validTZ = 0;
+ p->tz = 0;
}
#ifndef SQLITE_OMIT_LOCALTIME
@@ -24758,7 +24862,7 @@ static int toLocaltime(
p->validHMS = 1;
p->validJD = 0;
p->rawS = 0;
- p->validTZ = 0;
+ p->tz = 0;
p->isError = 0;
return SQLITE_OK;
}
@@ -24778,12 +24882,12 @@ static const struct {
float rLimit; /* Maximum NNN value for this transform */
float rXform; /* Constant used for this transform */
} aXformType[] = {
- { 6, "second", 4.6427e+14, 1.0 },
- { 6, "minute", 7.7379e+12, 60.0 },
- { 4, "hour", 1.2897e+11, 3600.0 },
- { 3, "day", 5373485.0, 86400.0 },
- { 5, "month", 176546.0, 2592000.0 },
- { 4, "year", 14713.0, 31536000.0 },
+ /* 0 */ { 6, "second", 4.6427e+14, 1.0 },
+ /* 1 */ { 6, "minute", 7.7379e+12, 60.0 },
+ /* 2 */ { 4, "hour", 1.2897e+11, 3600.0 },
+ /* 3 */ { 3, "day", 5373485.0, 86400.0 },
+ /* 4 */ { 5, "month", 176546.0, 30.0*86400.0 },
+ /* 5 */ { 4, "year", 14713.0, 365.0*86400.0 },
};
/*
@@ -24815,14 +24919,20 @@ static void autoAdjustDate(DateTime *p){
** NNN.NNNN seconds
** NNN months
** NNN years
+** +/-YYYY-MM-DD HH:MM:SS.SSS
+** ceiling
+** floor
** start of month
** start of year
** start of week
** start of day
** weekday N
** unixepoch
+** auto
** localtime
** utc
+** subsec
+** subsecond
**
** Return 0 on success and 1 if there is any kind of error. If the error
** is in a system call (i.e. localtime()), then an error message is written
@@ -24853,6 +24963,37 @@ static int parseModifier(
}
break;
}
+ case 'c': {
+ /*
+ ** ceiling
+ **
+ ** Resolve day-of-month overflow by rolling forward into the next
+ ** month. As this is the default action, this modifier is really
+ ** a no-op that is only included for symmetry. See "floor".
+ */
+ if( sqlite3_stricmp(z, "ceiling")==0 ){
+ computeJD(p);
+ clearYMD_HMS_TZ(p);
+ rc = 0;
+ p->nFloor = 0;
+ }
+ break;
+ }
+ case 'f': {
+ /*
+ ** floor
+ **
+ ** Resolve day-of-month overflow by rolling back to the end of the
+ ** previous month.
+ */
+ if( sqlite3_stricmp(z, "floor")==0 ){
+ computeJD(p);
+ p->iJD -= p->nFloor*86400000;
+ clearYMD_HMS_TZ(p);
+ rc = 0;
+ }
+ break;
+ }
case 'j': {
/*
** julianday
@@ -24879,7 +25020,9 @@ static int parseModifier(
** show local time.
*/
if( sqlite3_stricmp(z, "localtime")==0 && sqlite3NotPureFunc(pCtx) ){
- rc = toLocaltime(p, pCtx);
+ rc = p->isLocal ? SQLITE_OK : toLocaltime(p, pCtx);
+ p->isUtc = 0;
+ p->isLocal = 1;
}
break;
}
@@ -24904,7 +25047,7 @@ static int parseModifier(
}
#ifndef SQLITE_OMIT_LOCALTIME
else if( sqlite3_stricmp(z, "utc")==0 && sqlite3NotPureFunc(pCtx) ){
- if( p->tzSet==0 ){
+ if( p->isUtc==0 ){
i64 iOrigJD; /* Original localtime */
i64 iGuess; /* Guess at the corresponding utc time */
int cnt = 0; /* Safety to prevent infinite loop */
@@ -24927,7 +25070,8 @@ static int parseModifier(
memset(p, 0, sizeof(*p));
p->iJD = iGuess;
p->validJD = 1;
- p->tzSet = 1;
+ p->isUtc = 1;
+ p->isLocal = 0;
}
rc = SQLITE_OK;
}
@@ -24947,7 +25091,7 @@ static int parseModifier(
&& r>=0.0 && r<7.0 && (n=(int)r)==r ){
sqlite3_int64 Z;
computeYMD_HMS(p);
- p->validTZ = 0;
+ p->tz = 0;
p->validJD = 0;
computeJD(p);
Z = ((p->iJD + 129600000)/86400000) % 7;
@@ -24987,7 +25131,7 @@ static int parseModifier(
p->h = p->m = 0;
p->s = 0.0;
p->rawS = 0;
- p->validTZ = 0;
+ p->tz = 0;
p->validJD = 0;
if( sqlite3_stricmp(z,"month")==0 ){
p->D = 1;
@@ -25058,6 +25202,7 @@ static int parseModifier(
x = p->M>0 ? (p->M-1)/12 : (p->M-12)/12;
p->Y += x;
p->M -= x*12;
+ computeFloor(p);
computeJD(p);
p->validHMS = 0;
p->validYMD = 0;
@@ -25104,11 +25249,12 @@ static int parseModifier(
z += n;
while( sqlite3Isspace(*z) ) z++;
n = sqlite3Strlen30(z);
- if( n>10 || n<3 ) break;
+ if( n<3 || n>10 ) break;
if( sqlite3UpperToLower[(u8)z[n-1]]=='s' ) n--;
computeJD(p);
assert( rc==1 );
rRounder = r<0 ? -0.5 : +0.5;
+ p->nFloor = 0;
for(i=0; i<ArraySize(aXformType); i++){
if( aXformType[i].nName==n
&& sqlite3_strnicmp(aXformType[i].zName, z, n)==0
@@ -25116,21 +25262,24 @@ static int parseModifier(
){
switch( i ){
case 4: { /* Special processing to add months */
- assert( strcmp(aXformType[i].zName,"month")==0 );
+ assert( strcmp(aXformType[4].zName,"month")==0 );
computeYMD_HMS(p);
p->M += (int)r;
x = p->M>0 ? (p->M-1)/12 : (p->M-12)/12;
p->Y += x;
p->M -= x*12;
+ computeFloor(p);
p->validJD = 0;
r -= (int)r;
break;
}
case 5: { /* Special processing to add years */
int y = (int)r;
- assert( strcmp(aXformType[i].zName,"year")==0 );
+ assert( strcmp(aXformType[5].zName,"year")==0 );
computeYMD_HMS(p);
+ assert( p->M>=0 && p->M<=12 );
p->Y += y;
+ computeFloor(p);
p->validJD = 0;
r -= (int)r;
break;
@@ -25385,21 +25534,82 @@ static void dateFunc(
}
/*
+** Compute the number of days after the most recent January 1.
+**
+** In other words, compute the zero-based day number for the
+** current year:
+**
+** Jan01 = 0, Jan02 = 1, ..., Jan31 = 30, Feb01 = 31, ...
+** Dec31 = 364 or 365.
+*/
+static int daysAfterJan01(DateTime *pDate){
+ DateTime jan01 = *pDate;
+ assert( jan01.validYMD );
+ assert( jan01.validHMS );
+ assert( pDate->validJD );
+ jan01.validJD = 0;
+ jan01.M = 1;
+ jan01.D = 1;
+ computeJD(&jan01);
+ return (int)((pDate->iJD-jan01.iJD+43200000)/86400000);
+}
+
+/*
+** Return the number of days after the most recent Monday.
+**
+** In other words, return the day of the week according
+** to this code:
+**
+** 0=Monday, 1=Tuesday, 2=Wednesday, ..., 6=Sunday.
+*/
+static int daysAfterMonday(DateTime *pDate){
+ assert( pDate->validJD );
+ return (int)((pDate->iJD+43200000)/86400000) % 7;
+}
+
+/*
+** Return the number of days after the most recent Sunday.
+**
+** In other words, return the day of the week according
+** to this code:
+**
+** 0=Sunday, 1=Monday, 2=Tues, ..., 6=Saturday
+*/
+static int daysAfterSunday(DateTime *pDate){
+ assert( pDate->validJD );
+ return (int)((pDate->iJD+129600000)/86400000) % 7;
+}
+
+/*
** strftime( FORMAT, TIMESTRING, MOD, MOD, ...)
**
** Return a string described by FORMAT. Conversions as follows:
**
-** %d day of month
+** %d day of month 01-31
+** %e day of month 1-31
** %f ** fractional seconds SS.SSS
+** %F ISO date. YYYY-MM-DD
+** %G ISO year corresponding to %V 0000-9999.
+** %g 2-digit ISO year corresponding to %V 00-99
** %H hour 00-24
-** %j day of year 000-366
+** %k hour 0-24 (leading zero converted to space)
+** %I hour 01-12
+** %j day of year 001-366
** %J ** julian day number
+** %l hour 1-12 (leading zero converted to space)
** %m month 01-12
** %M minute 00-59
+** %p "am" or "pm"
+** %P "AM" or "PM"
+** %R time as HH:MM
** %s seconds since 1970-01-01
** %S seconds 00-59
-** %w day of week 0-6 Sunday==0
-** %W week of year 00-53
+** %T time as HH:MM:SS
+** %u day of week 1-7 Monday==1, Sunday==7
+** %w day of week 0-6 Sunday==0, Monday==1
+** %U week of year 00-53 (First Sunday is start of week 01)
+** %V week of year 01-53 (First week containing Thursday is week 01)
+** %W week of year 00-53 (First Monday is start of week 01)
** %Y year 0000-9999
** %% %
*/
@@ -25436,7 +25646,7 @@ static void strftimeFunc(
sqlite3_str_appendf(&sRes, cf=='d' ? "%02d" : "%2d", x.D);
break;
}
- case 'f': {
+ case 'f': { /* Fractional seconds. (Non-standard) */
double s = x.s;
if( s>59.999 ) s = 59.999;
sqlite3_str_appendf(&sRes, "%06.3f", s);
@@ -25446,6 +25656,21 @@ static void strftimeFunc(
sqlite3_str_appendf(&sRes, "%04d-%02d-%02d", x.Y, x.M, x.D);
break;
}
+ case 'G': /* Fall thru */
+ case 'g': {
+ DateTime y = x;
+ assert( y.validJD );
+ /* Move y so that it is the Thursday in the same week as x */
+ y.iJD += (3 - daysAfterMonday(&x))*86400000;
+ y.validYMD = 0;
+ computeYMD(&y);
+ if( cf=='g' ){
+ sqlite3_str_appendf(&sRes, "%02d", y.Y%100);
+ }else{
+ sqlite3_str_appendf(&sRes, "%04d", y.Y);
+ }
+ break;
+ }
case 'H':
case 'k': {
sqlite3_str_appendf(&sRes, cf=='H' ? "%02d" : "%2d", x.h);
@@ -25459,25 +25684,11 @@ static void strftimeFunc(
sqlite3_str_appendf(&sRes, cf=='I' ? "%02d" : "%2d", h);
break;
}
- case 'W': /* Fall thru */
- case 'j': {
- int nDay; /* Number of days since 1st day of year */
- DateTime y = x;
- y.validJD = 0;
- y.M = 1;
- y.D = 1;
- computeJD(&y);
- nDay = (int)((x.iJD-y.iJD+43200000)/86400000);
- if( cf=='W' ){
- int wd; /* 0=Monday, 1=Tuesday, ... 6=Sunday */
- wd = (int)(((x.iJD+43200000)/86400000)%7);
- sqlite3_str_appendf(&sRes,"%02d",(nDay+7-wd)/7);
- }else{
- sqlite3_str_appendf(&sRes,"%03d",nDay+1);
- }
+ case 'j': { /* Day of year. Jan01==1, Jan02==2, and so forth */
+ sqlite3_str_appendf(&sRes,"%03d",daysAfterJan01(&x)+1);
break;
}
- case 'J': {
+ case 'J': { /* Julian day number. (Non-standard) */
sqlite3_str_appendf(&sRes,"%.16g",x.iJD/86400000.0);
break;
}
@@ -25520,13 +25731,33 @@ static void strftimeFunc(
sqlite3_str_appendf(&sRes,"%02d:%02d:%02d", x.h, x.m, (int)x.s);
break;
}
- case 'u': /* Fall thru */
- case 'w': {
- char c = (char)(((x.iJD+129600000)/86400000) % 7) + '0';
+ case 'u': /* Day of week. 1 to 7. Monday==1, Sunday==7 */
+ case 'w': { /* Day of week. 0 to 6. Sunday==0, Monday==1 */
+ char c = (char)daysAfterSunday(&x) + '0';
if( c=='0' && cf=='u' ) c = '7';
sqlite3_str_appendchar(&sRes, 1, c);
break;
}
+ case 'U': { /* Week num. 00-53. First Sun of the year is week 01 */
+ sqlite3_str_appendf(&sRes,"%02d",
+ (daysAfterJan01(&x)-daysAfterSunday(&x)+7)/7);
+ break;
+ }
+ case 'V': { /* Week num. 01-53. First week with a Thur is week 01 */
+ DateTime y = x;
+ /* Adjust y so that is the Thursday in the same week as x */
+ assert( y.validJD );
+ y.iJD += (3 - daysAfterMonday(&x))*86400000;
+ y.validYMD = 0;
+ computeYMD(&y);
+ sqlite3_str_appendf(&sRes,"%02d", daysAfterJan01(&y)/7+1);
+ break;
+ }
+ case 'W': { /* Week num. 00-53. First Mon of the year is week 01 */
+ sqlite3_str_appendf(&sRes,"%02d",
+ (daysAfterJan01(&x)-daysAfterMonday(&x)+7)/7);
+ break;
+ }
case 'Y': {
sqlite3_str_appendf(&sRes,"%04d",x.Y);
break;
@@ -25673,9 +25904,7 @@ static void timediffFunc(
d1.iJD = d2.iJD - d1.iJD;
d1.iJD += (u64)1486995408 * (u64)100000;
}
- d1.validYMD = 0;
- d1.validHMS = 0;
- d1.validTZ = 0;
+ clearYMD_HMS_TZ(&d1);
computeYMD_HMS(&d1);
sqlite3StrAccumInit(&sRes, 0, 0, 0, 100);
sqlite3_str_appendf(&sRes, "%c%04d-%02d-%02d %02d:%02d:%06.3f",
@@ -25744,6 +25973,36 @@ static void currentTimeFunc(
}
#endif
+#if !defined(SQLITE_OMIT_DATETIME_FUNCS) && defined(SQLITE_DEBUG)
+/*
+** datedebug(...)
+**
+** This routine returns JSON that describes the internal DateTime object.
+** Used for debugging and testing only. Subject to change.
+*/
+static void datedebugFunc(
+ sqlite3_context *context,
+ int argc,
+ sqlite3_value **argv
+){
+ DateTime x;
+ if( isDate(context, argc, argv, &x)==0 ){
+ char *zJson;
+ zJson = sqlite3_mprintf(
+ "{iJD:%lld,Y:%d,M:%d,D:%d,h:%d,m:%d,tz:%d,"
+ "s:%.3f,validJD:%d,validYMS:%d,validHMS:%d,"
+ "nFloor:%d,rawS:%d,isError:%d,useSubsec:%d,"
+ "isUtc:%d,isLocal:%d}",
+ x.iJD, x.Y, x.M, x.D, x.h, x.m, x.tz,
+ x.s, x.validJD, x.validYMD, x.validHMS,
+ x.nFloor, x.rawS, x.isError, x.useSubsec,
+ x.isUtc, x.isLocal);
+ sqlite3_result_text(context, zJson, -1, sqlite3_free);
+ }
+}
+#endif /* !SQLITE_OMIT_DATETIME_FUNCS && SQLITE_DEBUG */
+
+
/*
** This function registered all of the above C functions as SQL
** functions. This should be the only routine in this file with
@@ -25759,6 +26018,9 @@ SQLITE_PRIVATE void sqlite3RegisterDateTimeFunctions(void){
PURE_DATE(datetime, -1, 0, 0, datetimeFunc ),
PURE_DATE(strftime, -1, 0, 0, strftimeFunc ),
PURE_DATE(timediff, 2, 0, 0, timediffFunc ),
+#ifdef SQLITE_DEBUG
+ PURE_DATE(datedebug, -1, 0, 0, datedebugFunc ),
+#endif
DFUNCTION(current_time, 0, 0, 0, ctimeFunc ),
DFUNCTION(current_timestamp, 0, 0, 0, ctimestampFunc),
DFUNCTION(current_date, 0, 0, 0, cdateFunc ),
@@ -30174,6 +30436,24 @@ static void sqlite3MallocAlarm(int nByte){
sqlite3_mutex_enter(mem0.mutex);
}
+#ifdef SQLITE_DEBUG
+/*
+** This routine is called whenever an out-of-memory condition is seen,
+** It's only purpose to to serve as a breakpoint for gdb or similar
+** code debuggers when working on out-of-memory conditions, for example
+** caused by PRAGMA hard_heap_limit=N.
+*/
+static SQLITE_NOINLINE void test_oom_breakpoint(u64 n){
+ static u64 nOomFault = 0;
+ nOomFault += n;
+ /* The assert() is never reached in a human lifetime. It is here mostly
+ ** to prevent code optimizers from optimizing out this function. */
+ assert( (nOomFault>>32) < 0xffffffff );
+}
+#else
+# define test_oom_breakpoint(X) /* No-op for production builds */
+#endif
+
/*
** Do a memory allocation with statistics and alarms. Assume the
** lock is already held.
@@ -30200,6 +30480,7 @@ static void mallocWithAlarm(int n, void **pp){
if( mem0.hardLimit ){
nUsed = sqlite3StatusValue(SQLITE_STATUS_MEMORY_USED);
if( nUsed >= mem0.hardLimit - nFull ){
+ test_oom_breakpoint(1);
*pp = 0;
return;
}
@@ -30488,6 +30769,7 @@ SQLITE_PRIVATE void *sqlite3Realloc(void *pOld, u64 nBytes){
sqlite3MallocAlarm(nDiff);
if( mem0.hardLimit>0 && nUsed >= mem0.hardLimit - nDiff ){
sqlite3_mutex_leave(mem0.mutex);
+ test_oom_breakpoint(1);
return 0;
}
}
@@ -31390,13 +31672,14 @@ SQLITE_API void sqlite3_str_vappendf(
}
exp = s.iDP-1;
- if( xtype==etGENERIC && precision>0 ) precision--;
/*
** If the field type is etGENERIC, then convert to either etEXP
** or etFLOAT, as appropriate.
*/
if( xtype==etGENERIC ){
+ assert( precision>0 );
+ precision--;
flag_rtz = !flag_alternateform;
if( exp<-4 || exp>precision ){
xtype = etEXP;
@@ -31712,9 +31995,13 @@ SQLITE_API void sqlite3_str_vappendf(
sqlite3_str_appendall(pAccum, pItem->zAlias);
}else{
Select *pSel = pItem->pSelect;
- assert( pSel!=0 );
+ assert( pSel!=0 ); /* Because of tag-20240424-1 */
if( pSel->selFlags & SF_NestedFrom ){
sqlite3_str_appendf(pAccum, "(join-%u)", pSel->selId);
+ }else if( pSel->selFlags & SF_MultiValue ){
+ assert( !pItem->fg.isTabFunc && !pItem->fg.isIndexedBy );
+ sqlite3_str_appendf(pAccum, "%u-ROW VALUES CLAUSE",
+ pItem->u1.nRow);
}else{
sqlite3_str_appendf(pAccum, "(subquery-%u)", pSel->selId);
}
@@ -32491,8 +32778,10 @@ SQLITE_PRIVATE void sqlite3TreeViewSrcList(TreeView *pView, const SrcList *pSrc)
x.printfFlags |= SQLITE_PRINTF_INTERNAL;
sqlite3_str_appendf(&x, "{%d:*} %!S", pItem->iCursor, pItem);
if( pItem->pTab ){
- sqlite3_str_appendf(&x, " tab=%Q nCol=%d ptr=%p used=%llx",
- pItem->pTab->zName, pItem->pTab->nCol, pItem->pTab, pItem->colUsed);
+ sqlite3_str_appendf(&x, " tab=%Q nCol=%d ptr=%p used=%llx%s",
+ pItem->pTab->zName, pItem->pTab->nCol, pItem->pTab,
+ pItem->colUsed,
+ pItem->fg.rowidUsed ? "+rowid" : "");
}
if( (pItem->fg.jointype & (JT_LEFT|JT_RIGHT))==(JT_LEFT|JT_RIGHT) ){
sqlite3_str_appendf(&x, " FULL-OUTER-JOIN");
@@ -32532,12 +32821,14 @@ SQLITE_PRIVATE void sqlite3TreeViewSrcList(TreeView *pView, const SrcList *pSrc)
sqlite3TreeViewIdList(pView, pItem->u3.pUsing, (--n)>0, "USING");
}
if( pItem->pSelect ){
+ sqlite3TreeViewPush(&pView, i+1<pSrc->nSrc);
if( pItem->pTab ){
Table *pTab = pItem->pTab;
sqlite3TreeViewColumnList(pView, pTab->aCol, pTab->nCol, 1);
}
assert( (int)pItem->fg.isNestedFrom == IsNestedFrom(pItem->pSelect) );
sqlite3TreeViewSelect(pView, pItem->pSelect, (--n)>0);
+ sqlite3TreeViewPop(&pView);
}
if( pItem->fg.isTabFunc ){
sqlite3TreeViewExprList(pView, pItem->u1.pFuncArg, 0, "func-args:");
@@ -32641,7 +32932,7 @@ SQLITE_PRIVATE void sqlite3TreeViewSelect(TreeView *pView, const Select *p, u8 m
sqlite3TreeViewItem(pView, "LIMIT", (n--)>0);
sqlite3TreeViewExpr(pView, p->pLimit->pLeft, p->pLimit->pRight!=0);
if( p->pLimit->pRight ){
- sqlite3TreeViewItem(pView, "OFFSET", (n--)>0);
+ sqlite3TreeViewItem(pView, "OFFSET", 0);
sqlite3TreeViewExpr(pView, p->pLimit->pRight, 0);
sqlite3TreeViewPop(&pView);
}
@@ -34943,6 +35234,44 @@ SQLITE_PRIVATE void sqlite3DequoteExpr(Expr *p){
}
/*
+** Expression p is a QNUMBER (quoted number). Dequote the value in p->u.zToken
+** and set the type to INTEGER or FLOAT. "Quoted" integers or floats are those
+** that contain '_' characters that must be removed before further processing.
+*/
+SQLITE_PRIVATE void sqlite3DequoteNumber(Parse *pParse, Expr *p){
+ assert( p!=0 || pParse->db->mallocFailed );
+ if( p ){
+ const char *pIn = p->u.zToken;
+ char *pOut = p->u.zToken;
+ int bHex = (pIn[0]=='0' && (pIn[1]=='x' || pIn[1]=='X'));
+ int iValue;
+ assert( p->op==TK_QNUMBER );
+ p->op = TK_INTEGER;
+ do {
+ if( *pIn!=SQLITE_DIGIT_SEPARATOR ){
+ *pOut++ = *pIn;
+ if( *pIn=='e' || *pIn=='E' || *pIn=='.' ) p->op = TK_FLOAT;
+ }else{
+ if( (bHex==0 && (!sqlite3Isdigit(pIn[-1]) || !sqlite3Isdigit(pIn[1])))
+ || (bHex==1 && (!sqlite3Isxdigit(pIn[-1]) || !sqlite3Isxdigit(pIn[1])))
+ ){
+ sqlite3ErrorMsg(pParse, "unrecognized token: \"%s\"", p->u.zToken);
+ }
+ }
+ }while( *pIn++ );
+ if( bHex ) p->op = TK_INTEGER;
+
+ /* tag-20240227-a: If after dequoting, the number is an integer that
+ ** fits in 32 bits, then it must be converted into EP_IntValue. Other
+ ** parts of the code expect this. See also tag-20240227-b. */
+ if( p->op==TK_INTEGER && sqlite3GetInt32(p->u.zToken, &iValue) ){
+ p->u.iValue = iValue;
+ p->flags |= EP_IntValue;
+ }
+ }
+}
+
+/*
** If the input token p is quoted, try to adjust the token to remove
** the quotes. This is not always possible:
**
@@ -36881,7 +37210,7 @@ SQLITE_PRIVATE const char *sqlite3OpcodeName(int i){
/* 30 */ "SeekRowid" OpHelp("intkey=r[P3]"),
/* 31 */ "NotExists" OpHelp("intkey=r[P3]"),
/* 32 */ "Last" OpHelp(""),
- /* 33 */ "IfSmaller" OpHelp(""),
+ /* 33 */ "IfSizeBetween" OpHelp(""),
/* 34 */ "SorterSort" OpHelp(""),
/* 35 */ "Sort" OpHelp(""),
/* 36 */ "Rewind" OpHelp(""),
@@ -36926,7 +37255,7 @@ SQLITE_PRIVATE const char *sqlite3OpcodeName(int i){
/* 75 */ "Null" OpHelp("r[P2..P3]=NULL"),
/* 76 */ "SoftNull" OpHelp("r[P1]=NULL"),
/* 77 */ "Blob" OpHelp("r[P2]=P4 (len=P1)"),
- /* 78 */ "Variable" OpHelp("r[P2]=parameter(P1,P4)"),
+ /* 78 */ "Variable" OpHelp("r[P2]=parameter(P1)"),
/* 79 */ "Move" OpHelp("r[P2@P3]=r[P1@P3]"),
/* 80 */ "Copy" OpHelp("r[P2@P3+1]=r[P1@P3+1]"),
/* 81 */ "SCopy" OpHelp("r[P2]=r[P1]"),
@@ -39324,8 +39653,12 @@ static int unixLogErrorAtLine(
** available, the error message will often be an empty string. Not a
** huge problem. Incorrectly concluding that the GNU version is available
** could lead to a segfault though.
+ **
+ ** Forum post 3f13857fa4062301 reports that the Android SDK may use
+ ** int-type return, depending on its version.
*/
-#if defined(STRERROR_R_CHAR_P) || defined(__USE_GNU)
+#if (defined(STRERROR_R_CHAR_P) || defined(__USE_GNU)) \
+ && !defined(ANDROID) && !defined(__ANDROID__)
zErr =
# endif
strerror_r(iErrno, aErr, sizeof(aErr)-1);
@@ -44423,12 +44756,19 @@ static int unixOpen(
rc = SQLITE_READONLY_DIRECTORY;
}else if( errno!=EISDIR && isReadWrite ){
/* Failed to open the file for read/write access. Try read-only. */
+ UnixUnusedFd *pReadonly = 0;
flags &= ~(SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE);
openFlags &= ~(O_RDWR|O_CREAT);
flags |= SQLITE_OPEN_READONLY;
openFlags |= O_RDONLY;
isReadonly = 1;
- fd = robust_open(zName, openFlags, openMode);
+ pReadonly = findReusableFd(zName, flags);
+ if( pReadonly ){
+ fd = pReadonly->fd;
+ sqlite3_free(pReadonly);
+ }else{
+ fd = robust_open(zName, openFlags, openMode);
+ }
}
}
if( fd<0 ){
@@ -69879,6 +70219,7 @@ struct IntegrityCk {
StrAccum errMsg; /* Accumulate the error message text here */
u32 *heap; /* Min-heap used for analyzing cell coverage */
sqlite3 *db; /* Database connection running the check */
+ i64 nRow; /* Number of rows visited in current tree */
};
/*
@@ -70353,8 +70694,47 @@ int corruptPageError(int lineno, MemPage *p){
# define SQLITE_CORRUPT_PAGE(pMemPage) SQLITE_CORRUPT_PGNO(pMemPage->pgno)
#endif
+/* Default value for SHARED_LOCK_TRACE macro if shared-cache is disabled
+** or if the lock tracking is disabled. This is always the value for
+** release builds.
+*/
+#define SHARED_LOCK_TRACE(X,MSG,TAB,TYPE) /*no-op*/
+
#ifndef SQLITE_OMIT_SHARED_CACHE
+#if 0
+/* ^---- Change to 1 and recompile to enable shared-lock tracing
+** for debugging purposes.
+**
+** Print all shared-cache locks on a BtShared. Debugging use only.
+*/
+static void sharedLockTrace(
+ BtShared *pBt,
+ const char *zMsg,
+ int iRoot,
+ int eLockType
+){
+ BtLock *pLock;
+ if( iRoot>0 ){
+ printf("%s-%p %u%s:", zMsg, pBt, iRoot, eLockType==READ_LOCK?"R":"W");
+ }else{
+ printf("%s-%p:", zMsg, pBt);
+ }
+ for(pLock=pBt->pLock; pLock; pLock=pLock->pNext){
+ printf(" %p/%u%s", pLock->pBtree, pLock->iTable,
+ pLock->eLock==READ_LOCK ? "R" : "W");
+ while( pLock->pNext && pLock->pBtree==pLock->pNext->pBtree ){
+ pLock = pLock->pNext;
+ printf(",%u%s", pLock->iTable, pLock->eLock==READ_LOCK ? "R" : "W");
+ }
+ }
+ printf("\n");
+ fflush(stdout);
+}
+#undef SHARED_LOCK_TRACE
+#define SHARED_LOCK_TRACE(X,MSG,TAB,TYPE) sharedLockTrace(X,MSG,TAB,TYPE)
+#endif /* Shared-lock tracing */
+
#ifdef SQLITE_DEBUG
/*
**** This function is only used as part of an assert() statement. ***
@@ -70431,6 +70811,8 @@ static int hasSharedCacheTableLock(
iTab = iRoot;
}
+ SHARED_LOCK_TRACE(pBtree->pBt,"hasLock",iRoot,eLockType);
+
/* Search for the required lock. Either a write-lock on root-page iTab, a
** write-lock on the schema table, or (if the client is reading) a
** read-lock on iTab will suffice. Return 1 if any of these are found. */
@@ -70564,6 +70946,8 @@ static int setSharedCacheTableLock(Btree *p, Pgno iTable, u8 eLock){
BtLock *pLock = 0;
BtLock *pIter;
+ SHARED_LOCK_TRACE(pBt,"setLock", iTable, eLock);
+
assert( sqlite3BtreeHoldsMutex(p) );
assert( eLock==READ_LOCK || eLock==WRITE_LOCK );
assert( p->db!=0 );
@@ -70631,6 +71015,8 @@ static void clearAllSharedCacheTableLocks(Btree *p){
assert( p->sharable || 0==*ppIter );
assert( p->inTrans>0 );
+ SHARED_LOCK_TRACE(pBt, "clearAllLocks", 0, 0);
+
while( *ppIter ){
BtLock *pLock = *ppIter;
assert( (pBt->btsFlags & BTS_EXCLUSIVE)==0 || pBt->pWriter==pLock->pBtree );
@@ -70669,6 +71055,9 @@ static void clearAllSharedCacheTableLocks(Btree *p){
*/
static void downgradeAllSharedCacheTableLocks(Btree *p){
BtShared *pBt = p->pBt;
+
+ SHARED_LOCK_TRACE(pBt, "downgradeLocks", 0, 0);
+
if( pBt->pWriter==p ){
BtLock *pLock;
pBt->pWriter = 0;
@@ -75282,9 +75671,12 @@ static int accessPayload(
if( pCur->aOverflow==0
|| nOvfl*(int)sizeof(Pgno) > sqlite3MallocSize(pCur->aOverflow)
){
- Pgno *aNew = (Pgno*)sqlite3Realloc(
- pCur->aOverflow, nOvfl*2*sizeof(Pgno)
- );
+ Pgno *aNew;
+ if( sqlite3FaultSim(413) ){
+ aNew = 0;
+ }else{
+ aNew = (Pgno*)sqlite3Realloc(pCur->aOverflow, nOvfl*2*sizeof(Pgno));
+ }
if( aNew==0 ){
return SQLITE_NOMEM_BKPT;
}else{
@@ -75294,6 +75686,12 @@ static int accessPayload(
memset(pCur->aOverflow, 0, nOvfl*sizeof(Pgno));
pCur->curFlags |= BTCF_ValidOvfl;
}else{
+ /* Sanity check the validity of the overflow page cache */
+ assert( pCur->aOverflow[0]==nextPage
+ || pCur->aOverflow[0]==0
+ || CORRUPT_DB );
+ assert( pCur->aOverflow[0]!=0 || pCur->aOverflow[offset/ovflSize]==0 );
+
/* If the overflow page-list cache has been allocated and the
** entry for the first required overflow page is valid, skip
** directly to it.
@@ -75775,6 +76173,23 @@ SQLITE_PRIVATE int sqlite3BtreeFirst(BtCursor *pCur, int *pRes){
return rc;
}
+#ifdef SQLITE_DEBUG
+/* The cursors is CURSOR_VALID and has BTCF_AtLast set. Verify that
+** this flags are true for a consistent database.
+**
+** This routine is is called from within assert() statements only.
+** It is an internal verification routine and does not appear in production
+** builds.
+*/
+static int cursorIsAtLastEntry(BtCursor *pCur){
+ int ii;
+ for(ii=0; ii<pCur->iPage; ii++){
+ if( pCur->aiIdx[ii]!=pCur->apPage[ii]->nCell ) return 0;
+ }
+ return pCur->ix==pCur->pPage->nCell-1 && pCur->pPage->leaf!=0;
+}
+#endif
+
/* Move the cursor to the last entry in the table. Return SQLITE_OK
** on success. Set *pRes to 0 if the cursor actually points to something
** or set *pRes to 1 if the table is empty.
@@ -75803,18 +76218,7 @@ SQLITE_PRIVATE int sqlite3BtreeLast(BtCursor *pCur, int *pRes){
/* If the cursor already points to the last entry, this is a no-op. */
if( CURSOR_VALID==pCur->eState && (pCur->curFlags & BTCF_AtLast)!=0 ){
-#ifdef SQLITE_DEBUG
- /* This block serves to assert() that the cursor really does point
- ** to the last entry in the b-tree. */
- int ii;
- for(ii=0; ii<pCur->iPage; ii++){
- assert( pCur->aiIdx[ii]==pCur->apPage[ii]->nCell );
- }
- assert( pCur->ix==pCur->pPage->nCell-1 || CORRUPT_DB );
- testcase( pCur->ix!=pCur->pPage->nCell-1 );
- /* ^-- dbsqlfuzz b92b72e4de80b5140c30ab71372ca719b8feb618 */
- assert( pCur->pPage->leaf );
-#endif
+ assert( cursorIsAtLastEntry(pCur) || CORRUPT_DB );
*pRes = 0;
return SQLITE_OK;
}
@@ -75867,6 +76271,7 @@ SQLITE_PRIVATE int sqlite3BtreeTableMoveto(
}
if( pCur->info.nKey<intKey ){
if( (pCur->curFlags & BTCF_AtLast)!=0 ){
+ assert( cursorIsAtLastEntry(pCur) || CORRUPT_DB );
*pRes = -1;
return SQLITE_OK;
}
@@ -76333,10 +76738,10 @@ SQLITE_PRIVATE i64 sqlite3BtreeRowCountEst(BtCursor *pCur){
assert( cursorOwnsBtShared(pCur) );
assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) );
- /* Currently this interface is only called by the OP_IfSmaller
- ** opcode, and it that case the cursor will always be valid and
- ** will always point to a leaf node. */
- if( NEVER(pCur->eState!=CURSOR_VALID) ) return -1;
+ /* Currently this interface is only called by the OP_IfSizeBetween
+ ** opcode and the OP_Count opcode with P3=1. In either case,
+ ** the cursor will always be valid unless the btree is empty. */
+ if( pCur->eState!=CURSOR_VALID ) return 0;
if( NEVER(pCur->pPage->leaf==0) ) return -1;
n = pCur->pPage->nCell;
@@ -78467,7 +78872,7 @@ static int balance_nonroot(
** table-interior, index-leaf, or index-interior).
*/
if( pOld->aData[0]!=apOld[0]->aData[0] ){
- rc = SQLITE_CORRUPT_BKPT;
+ rc = SQLITE_CORRUPT_PAGE(pOld);
goto balance_cleanup;
}
@@ -78491,7 +78896,7 @@ static int balance_nonroot(
memset(&b.szCell[b.nCell], 0, sizeof(b.szCell[0])*(limit+pOld->nOverflow));
if( pOld->nOverflow>0 ){
if( NEVER(limit<pOld->aiOvfl[0]) ){
- rc = SQLITE_CORRUPT_BKPT;
+ rc = SQLITE_CORRUPT_PAGE(pOld);
goto balance_cleanup;
}
limit = pOld->aiOvfl[0];
@@ -79134,7 +79539,7 @@ static int anotherValidCursor(BtCursor *pCur){
&& pOther->eState==CURSOR_VALID
&& pOther->pPage==pCur->pPage
){
- return SQLITE_CORRUPT_BKPT;
+ return SQLITE_CORRUPT_PAGE(pCur->pPage);
}
}
return SQLITE_OK;
@@ -79194,7 +79599,7 @@ static int balance(BtCursor *pCur){
/* The page being written is not a root page, and there is currently
** more than one reference to it. This only happens if the page is one
** of its own ancestor pages. Corruption. */
- rc = SQLITE_CORRUPT_BKPT;
+ rc = SQLITE_CORRUPT_PAGE(pPage);
}else{
MemPage * const pParent = pCur->apPage[iPage-1];
int const iIdx = pCur->aiIdx[iPage-1];
@@ -79358,7 +79763,7 @@ static SQLITE_NOINLINE int btreeOverwriteOverflowCell(
rc = btreeGetPage(pBt, ovflPgno, &pPage, 0);
if( rc ) return rc;
if( sqlite3PagerPageRefcount(pPage->pDbPage)!=1 || pPage->isInit ){
- rc = SQLITE_CORRUPT_BKPT;
+ rc = SQLITE_CORRUPT_PAGE(pPage);
}else{
if( iOffset+ovflPageSize<(u32)nTotal ){
ovflPgno = get4byte(pPage->aData);
@@ -79386,7 +79791,7 @@ static int btreeOverwriteCell(BtCursor *pCur, const BtreePayload *pX){
if( pCur->info.pPayload + pCur->info.nLocal > pPage->aDataEnd
|| pCur->info.pPayload < pPage->aData + pPage->cellOffset
){
- return SQLITE_CORRUPT_BKPT;
+ return SQLITE_CORRUPT_PAGE(pPage);
}
if( pCur->info.nLocal==nTotal ){
/* The entire cell is local */
@@ -79467,7 +79872,7 @@ SQLITE_PRIVATE int sqlite3BtreeInsert(
** Which can only happen if the SQLITE_NoSchemaError flag was set when
** the schema was loaded. This cannot be asserted though, as a user might
** set the flag, load the schema, and then unset the flag. */
- return SQLITE_CORRUPT_BKPT;
+ return SQLITE_CORRUPT_PGNO(pCur->pgnoRoot);
}
}
@@ -79590,7 +79995,7 @@ SQLITE_PRIVATE int sqlite3BtreeInsert(
if( pPage->nFree<0 ){
if( NEVER(pCur->eState>CURSOR_INVALID) ){
/* ^^^^^--- due to the moveToRoot() call above */
- rc = SQLITE_CORRUPT_BKPT;
+ rc = SQLITE_CORRUPT_PAGE(pPage);
}else{
rc = btreeComputeFreeSpace(pPage);
}
@@ -79632,7 +80037,7 @@ SQLITE_PRIVATE int sqlite3BtreeInsert(
CellInfo info;
assert( idx>=0 );
if( idx>=pPage->nCell ){
- return SQLITE_CORRUPT_BKPT;
+ return SQLITE_CORRUPT_PAGE(pPage);
}
rc = sqlite3PagerWrite(pPage->pDbPage);
if( rc ){
@@ -79659,10 +80064,10 @@ SQLITE_PRIVATE int sqlite3BtreeInsert(
** necessary to add the PTRMAP_OVERFLOW1 pointer-map entry. */
assert( rc==SQLITE_OK ); /* clearCell never fails when nLocal==nPayload */
if( oldCell < pPage->aData+pPage->hdrOffset+10 ){
- return SQLITE_CORRUPT_BKPT;
+ return SQLITE_CORRUPT_PAGE(pPage);
}
if( oldCell+szNew > pPage->aDataEnd ){
- return SQLITE_CORRUPT_BKPT;
+ return SQLITE_CORRUPT_PAGE(pPage);
}
memcpy(oldCell, newCell, szNew);
return SQLITE_OK;
@@ -79764,7 +80169,7 @@ SQLITE_PRIVATE int sqlite3BtreeTransferRow(BtCursor *pDest, BtCursor *pSrc, i64
nIn = pSrc->info.nLocal;
aIn = pSrc->info.pPayload;
if( aIn+nIn>pSrc->pPage->aDataEnd ){
- return SQLITE_CORRUPT_BKPT;
+ return SQLITE_CORRUPT_PAGE(pSrc->pPage);
}
nRem = pSrc->info.nPayload;
if( nIn==nRem && nIn<pDest->pPage->maxLocal ){
@@ -79789,7 +80194,7 @@ SQLITE_PRIVATE int sqlite3BtreeTransferRow(BtCursor *pDest, BtCursor *pSrc, i64
if( nRem>nIn ){
if( aIn+nIn+4>pSrc->pPage->aDataEnd ){
- return SQLITE_CORRUPT_BKPT;
+ return SQLITE_CORRUPT_PAGE(pSrc->pPage);
}
ovflIn = get4byte(&pSrc->info.pPayload[nIn]);
}
@@ -79885,7 +80290,7 @@ SQLITE_PRIVATE int sqlite3BtreeDelete(BtCursor *pCur, u8 flags){
assert( rc!=SQLITE_OK || CORRUPT_DB || pCur->eState==CURSOR_VALID );
if( rc || pCur->eState!=CURSOR_VALID ) return rc;
}else{
- return SQLITE_CORRUPT_BKPT;
+ return SQLITE_CORRUPT_PGNO(pCur->pgnoRoot);
}
}
assert( pCur->eState==CURSOR_VALID );
@@ -79894,14 +80299,14 @@ SQLITE_PRIVATE int sqlite3BtreeDelete(BtCursor *pCur, u8 flags){
iCellIdx = pCur->ix;
pPage = pCur->pPage;
if( pPage->nCell<=iCellIdx ){
- return SQLITE_CORRUPT_BKPT;
+ return SQLITE_CORRUPT_PAGE(pPage);
}
pCell = findCell(pPage, iCellIdx);
if( pPage->nFree<0 && btreeComputeFreeSpace(pPage) ){
- return SQLITE_CORRUPT_BKPT;
+ return SQLITE_CORRUPT_PAGE(pPage);
}
if( pCell<&pPage->aCellIdx[pPage->nCell] ){
- return SQLITE_CORRUPT_BKPT;
+ return SQLITE_CORRUPT_PAGE(pPage);
}
/* If the BTREE_SAVEPOSITION bit is on, then the cursor position must
@@ -79992,7 +80397,7 @@ SQLITE_PRIVATE int sqlite3BtreeDelete(BtCursor *pCur, u8 flags){
n = pCur->pPage->pgno;
}
pCell = findCell(pLeaf, pLeaf->nCell-1);
- if( pCell<&pLeaf->aData[4] ) return SQLITE_CORRUPT_BKPT;
+ if( pCell<&pLeaf->aData[4] ) return SQLITE_CORRUPT_PAGE(pLeaf);
nCell = pLeaf->xCellSize(pLeaf, pCell);
assert( MX_CELL_SIZE(pBt) >= nCell );
pTmp = pBt->pTmpSpace;
@@ -80108,7 +80513,7 @@ static int btreeCreateTable(Btree *p, Pgno *piTable, int createTabFlags){
*/
sqlite3BtreeGetMeta(p, BTREE_LARGEST_ROOT_PAGE, &pgnoRoot);
if( pgnoRoot>btreePagecount(pBt) ){
- return SQLITE_CORRUPT_BKPT;
+ return SQLITE_CORRUPT_PGNO(pgnoRoot);
}
pgnoRoot++;
@@ -80156,7 +80561,7 @@ static int btreeCreateTable(Btree *p, Pgno *piTable, int createTabFlags){
}
rc = ptrmapGet(pBt, pgnoRoot, &eType, &iPtrPage);
if( eType==PTRMAP_ROOTPAGE || eType==PTRMAP_FREEPAGE ){
- rc = SQLITE_CORRUPT_BKPT;
+ rc = SQLITE_CORRUPT_PGNO(pgnoRoot);
}
if( rc!=SQLITE_OK ){
releasePage(pRoot);
@@ -80246,14 +80651,14 @@ static int clearDatabasePage(
assert( sqlite3_mutex_held(pBt->mutex) );
if( pgno>btreePagecount(pBt) ){
- return SQLITE_CORRUPT_BKPT;
+ return SQLITE_CORRUPT_PGNO(pgno);
}
rc = getAndInitPage(pBt, pgno, &pPage, 0);
if( rc ) return rc;
if( (pBt->openFlags & BTREE_SINGLE)==0
&& sqlite3PagerPageRefcount(pPage->pDbPage) != (1 + (pgno==1))
){
- rc = SQLITE_CORRUPT_BKPT;
+ rc = SQLITE_CORRUPT_PAGE(pPage);
goto cleardatabasepage_out;
}
hdr = pPage->hdrOffset;
@@ -80357,7 +80762,7 @@ static int btreeDropTable(Btree *p, Pgno iTable, int *piMoved){
assert( p->inTrans==TRANS_WRITE );
assert( iTable>=2 );
if( iTable>btreePagecount(pBt) ){
- return SQLITE_CORRUPT_BKPT;
+ return SQLITE_CORRUPT_PGNO(iTable);
}
rc = sqlite3BtreeClearTable(p, iTable, 0);
@@ -80951,6 +81356,9 @@ static int checkTreePage(
** number of cells on the page. */
nCell = get2byte(&data[hdr+3]);
assert( pPage->nCell==nCell );
+ if( pPage->leaf || pPage->intKey==0 ){
+ pCheck->nRow += nCell;
+ }
/* EVIDENCE-OF: R-23882-45353 The cell pointer array of a b-tree page
** immediately follows the b-tree page header. */
@@ -81062,6 +81470,7 @@ static int checkTreePage(
btreeHeapInsert(heap, (pc<<16)|(pc+size-1));
}
}
+ assert( heap!=0 );
/* Add the freeblocks to the min-heap
**
** EVIDENCE-OF: R-20690-50594 The second field of the b-tree page header
@@ -81161,6 +81570,7 @@ SQLITE_PRIVATE int sqlite3BtreeIntegrityCheck(
sqlite3 *db, /* Database connection that is running the check */
Btree *p, /* The btree to be checked */
Pgno *aRoot, /* An array of root pages numbers for individual trees */
+ Mem *aCnt, /* Memory cells to write counts for each tree to */
int nRoot, /* Number of entries in aRoot[] */
int mxErr, /* Stop reporting errors after this many */
int *pnErr, /* OUT: Write number of errors seen to this variable */
@@ -81174,7 +81584,9 @@ SQLITE_PRIVATE int sqlite3BtreeIntegrityCheck(
int bPartial = 0; /* True if not checking all btrees */
int bCkFreelist = 1; /* True to scan the freelist */
VVA_ONLY( int nRef );
+
assert( nRoot>0 );
+ assert( aCnt!=0 );
/* aRoot[0]==0 means this is a partial check */
if( aRoot[0]==0 ){
@@ -81247,15 +81659,18 @@ SQLITE_PRIVATE int sqlite3BtreeIntegrityCheck(
testcase( pBt->db->flags & SQLITE_CellSizeCk );
pBt->db->flags &= ~(u64)SQLITE_CellSizeCk;
for(i=0; (int)i<nRoot && sCheck.mxErr; i++){
- i64 notUsed;
- if( aRoot[i]==0 ) continue;
+ sCheck.nRow = 0;
+ if( aRoot[i] ){
+ i64 notUsed;
#ifndef SQLITE_OMIT_AUTOVACUUM
- if( pBt->autoVacuum && aRoot[i]>1 && !bPartial ){
- checkPtrmap(&sCheck, aRoot[i], PTRMAP_ROOTPAGE, 0);
- }
+ if( pBt->autoVacuum && aRoot[i]>1 && !bPartial ){
+ checkPtrmap(&sCheck, aRoot[i], PTRMAP_ROOTPAGE, 0);
+ }
#endif
- sCheck.v0 = aRoot[i];
- checkTreePage(&sCheck, aRoot[i], &notUsed, LARGEST_INT64);
+ sCheck.v0 = aRoot[i];
+ checkTreePage(&sCheck, aRoot[i], &notUsed, LARGEST_INT64);
+ }
+ sqlite3MemSetArrayInt64(aCnt, i, sCheck.nRow);
}
pBt->db->flags = savedDbFlags;
@@ -83310,6 +83725,13 @@ SQLITE_PRIVATE void sqlite3VdbeMemSetInt64(Mem *pMem, i64 val){
}
}
+/*
+** Set the iIdx'th entry of array aMem[] to contain integer value val.
+*/
+SQLITE_PRIVATE void sqlite3MemSetArrayInt64(sqlite3_value *aMem, int iIdx, i64 val){
+ sqlite3VdbeMemSetInt64(&aMem[iIdx], val);
+}
+
/* A no-op destructor */
SQLITE_PRIVATE void sqlite3NoopDestructor(void *p){ UNUSED_PARAMETER(p); }
@@ -83998,14 +84420,20 @@ static int valueFromExpr(
}
/* Handle negative integers in a single step. This is needed in the
- ** case when the value is -9223372036854775808.
- */
- if( op==TK_UMINUS
- && (pExpr->pLeft->op==TK_INTEGER || pExpr->pLeft->op==TK_FLOAT) ){
- pExpr = pExpr->pLeft;
- op = pExpr->op;
- negInt = -1;
- zNeg = "-";
+ ** case when the value is -9223372036854775808. Except - do not do this
+ ** for hexadecimal literals. */
+ if( op==TK_UMINUS ){
+ Expr *pLeft = pExpr->pLeft;
+ if( (pLeft->op==TK_INTEGER || pLeft->op==TK_FLOAT) ){
+ if( ExprHasProperty(pLeft, EP_IntValue)
+ || pLeft->u.zToken[0]!='0' || (pLeft->u.zToken[1] & ~0x20)!='X'
+ ){
+ pExpr = pLeft;
+ op = pExpr->op;
+ negInt = -1;
+ zNeg = "-";
+ }
+ }
}
if( op==TK_STRING || op==TK_FLOAT || op==TK_INTEGER ){
@@ -84014,12 +84442,26 @@ static int valueFromExpr(
if( ExprHasProperty(pExpr, EP_IntValue) ){
sqlite3VdbeMemSetInt64(pVal, (i64)pExpr->u.iValue*negInt);
}else{
- zVal = sqlite3MPrintf(db, "%s%s", zNeg, pExpr->u.zToken);
- if( zVal==0 ) goto no_mem;
- sqlite3ValueSetStr(pVal, -1, zVal, SQLITE_UTF8, SQLITE_DYNAMIC);
+ i64 iVal;
+ if( op==TK_INTEGER && 0==sqlite3DecOrHexToI64(pExpr->u.zToken, &iVal) ){
+ sqlite3VdbeMemSetInt64(pVal, iVal*negInt);
+ }else{
+ zVal = sqlite3MPrintf(db, "%s%s", zNeg, pExpr->u.zToken);
+ if( zVal==0 ) goto no_mem;
+ sqlite3ValueSetStr(pVal, -1, zVal, SQLITE_UTF8, SQLITE_DYNAMIC);
+ }
}
- if( (op==TK_INTEGER || op==TK_FLOAT ) && affinity==SQLITE_AFF_BLOB ){
- sqlite3ValueApplyAffinity(pVal, SQLITE_AFF_NUMERIC, SQLITE_UTF8);
+ if( affinity==SQLITE_AFF_BLOB ){
+ if( op==TK_FLOAT ){
+ assert( pVal && pVal->z && pVal->flags==(MEM_Str|MEM_Term) );
+ sqlite3AtoF(pVal->z, &pVal->u.r, pVal->n, SQLITE_UTF8);
+ pVal->flags = MEM_Real;
+ }else if( op==TK_INTEGER ){
+ /* This case is required by -9223372036854775808 and other strings
+ ** that look like integers but cannot be handled by the
+ ** sqlite3DecOrHexToI64() call above. */
+ sqlite3ValueApplyAffinity(pVal, SQLITE_AFF_NUMERIC, SQLITE_UTF8);
+ }
}else{
sqlite3ValueApplyAffinity(pVal, affinity, SQLITE_UTF8);
}
@@ -84289,17 +84731,17 @@ SQLITE_PRIVATE int sqlite3Stat4Column(
sqlite3_value **ppVal /* OUT: Extracted value */
){
u32 t = 0; /* a column type code */
- int nHdr; /* Size of the header in the record */
- int iHdr; /* Next unread header byte */
- int iField; /* Next unread data byte */
- int szField = 0; /* Size of the current data field */
+ u32 nHdr; /* Size of the header in the record */
+ u32 iHdr; /* Next unread header byte */
+ i64 iField; /* Next unread data byte */
+ u32 szField = 0; /* Size of the current data field */
int i; /* Column index */
u8 *a = (u8*)pRec; /* Typecast byte array */
Mem *pMem = *ppVal; /* Write result into this Mem object */
assert( iCol>0 );
iHdr = getVarint32(a, nHdr);
- if( nHdr>nRec || iHdr>=nHdr ) return SQLITE_CORRUPT_BKPT;
+ if( nHdr>(u32)nRec || iHdr>=nHdr ) return SQLITE_CORRUPT_BKPT;
iField = nHdr;
for(i=0; i<=iCol; i++){
iHdr += getVarint32(&a[iHdr], t);
@@ -85334,6 +85776,15 @@ static void resolveP2Values(Vdbe *p, int *pMaxFuncArgs){
assert( aLabel!=0 ); /* True because of tag-20230419-1 */
pOp->p2 = aLabel[ADDR(pOp->p2)];
}
+
+ /* OPFLG_JUMP opcodes never have P2==0, though OPFLG_JUMP0 opcodes
+ ** might */
+ assert( pOp->p2>0
+ || (sqlite3OpcodeProperty[pOp->opcode] & OPFLG_JUMP0)!=0 );
+
+ /* Jumps never go off the end of the bytecode array */
+ assert( pOp->p2<p->nOp
+ || (sqlite3OpcodeProperty[pOp->opcode] & OPFLG_JUMP)==0 );
break;
}
}
@@ -87741,7 +88192,7 @@ SQLITE_PRIVATE int sqlite3VdbeHalt(Vdbe *p){
/* Check for immediate foreign key violations. */
if( p->rc==SQLITE_OK || (p->errorAction==OE_Fail && !isSpecialError) ){
- sqlite3VdbeCheckFk(p, 0);
+ (void)sqlite3VdbeCheckFk(p, 0);
}
/* If the auto-commit flag is set and this is the only active writer
@@ -88911,17 +89362,15 @@ SQLITE_PRIVATE int sqlite3IntFloatCompare(i64 i, double r){
return (x<r) ? -1 : (x>r);
}else{
i64 y;
- double s;
if( r<-9223372036854775808.0 ) return +1;
if( r>=9223372036854775808.0 ) return -1;
y = (i64)r;
if( i<y ) return -1;
if( i>y ) return +1;
- s = (double)i;
- testcase( doubleLt(s,r) );
- testcase( doubleLt(r,s) );
- testcase( doubleEq(r,s) );
- return (s<r) ? -1 : (s>r);
+ testcase( doubleLt(((double)i),r) );
+ testcase( doubleLt(r,((double)i)) );
+ testcase( doubleEq(r,((double)i)) );
+ return (((double)i)<r) ? -1 : (((double)i)>r);
}
}
@@ -92329,7 +92778,6 @@ SQLITE_API int sqlite3_stmt_scanstatus_v2(
}
if( flags & SQLITE_SCANSTAT_COMPLEX ){
idx = iScan;
- pScan = &p->aScan[idx];
}else{
/* If the COMPLEX flag is clear, then this function must ignore any
** ScanStatus structures with ScanStatus.addrLoop set to 0. */
@@ -92342,6 +92790,8 @@ SQLITE_API int sqlite3_stmt_scanstatus_v2(
}
}
if( idx>=p->nScan ) return 1;
+ assert( pScan==0 || pScan==&p->aScan[idx] );
+ pScan = &p->aScan[idx];
switch( iScanStatusOp ){
case SQLITE_SCANSTAT_NLOOP: {
@@ -93790,7 +94240,7 @@ case OP_Return: { /* in1 */
**
** See also: EndCoroutine
*/
-case OP_InitCoroutine: { /* jump */
+case OP_InitCoroutine: { /* jump0 */
assert( pOp->p1>0 && pOp->p1<=(p->nMem+1 - p->nCursor) );
assert( pOp->p2>=0 && pOp->p2<p->nOp );
assert( pOp->p3>=0 && pOp->p3<p->nOp );
@@ -93813,7 +94263,9 @@ jump_to_p2:
**
** The instruction at the address in register P1 is a Yield.
** Jump to the P2 parameter of that Yield.
-** After the jump, register P1 becomes undefined.
+** After the jump, the value register P1 is left with a value
+** such that subsequent OP_Yields go back to the this same
+** OP_EndCoroutine instruction.
**
** See also: InitCoroutine
*/
@@ -93825,8 +94277,8 @@ case OP_EndCoroutine: { /* in1 */
pCaller = &aOp[pIn1->u.i];
assert( pCaller->opcode==OP_Yield );
assert( pCaller->p2>=0 && pCaller->p2<p->nOp );
+ pIn1->u.i = (int)(pOp - p->aOp) - 1;
pOp = &aOp[pCaller->p2 - 1];
- pIn1->flags = MEM_Undefined;
break;
}
@@ -93843,7 +94295,7 @@ case OP_EndCoroutine: { /* in1 */
**
** See also: InitCoroutine
*/
-case OP_Yield: { /* in1, jump */
+case OP_Yield: { /* in1, jump0 */
int pcDest;
pIn1 = &aMem[pOp->p1];
assert( VdbeMemDynamic(pIn1)==0 );
@@ -94173,19 +94625,15 @@ case OP_Blob: { /* out2 */
break;
}
-/* Opcode: Variable P1 P2 * P4 *
-** Synopsis: r[P2]=parameter(P1,P4)
+/* Opcode: Variable P1 P2 * * *
+** Synopsis: r[P2]=parameter(P1)
**
** Transfer the values of bound parameter P1 into register P2
-**
-** If the parameter is named, then its name appears in P4.
-** The P4 value is used by sqlite3_bind_parameter_name().
*/
case OP_Variable: { /* out2 */
Mem *pVar; /* Value being transferred */
assert( pOp->p1>0 && pOp->p1<=p->nVar );
- assert( pOp->p4.z==0 || pOp->p4.z==sqlite3VListNumToName(p->pVList,pOp->p1) );
pVar = &p->aVar[pOp->p1 - 1];
if( sqlite3VdbeMemTooBig(pVar) ){
goto too_big;
@@ -94706,7 +95154,7 @@ case OP_AddImm: { /* in1 */
** without data loss, then jump immediately to P2, or if P2==0
** raise an SQLITE_MISMATCH exception.
*/
-case OP_MustBeInt: { /* jump, in1 */
+case OP_MustBeInt: { /* jump0, in1 */
pIn1 = &aMem[pOp->p1];
if( (pIn1->flags & MEM_Int)==0 ){
applyAffinity(pIn1, SQLITE_AFF_NUMERIC, encoding);
@@ -94747,7 +95195,7 @@ case OP_RealAffinity: { /* in1 */
}
#endif
-#ifndef SQLITE_OMIT_CAST
+#if !defined(SQLITE_OMIT_CAST) && !defined(SQLITE_OMIT_ANALYZE)
/* Opcode: Cast P1 P2 * * *
** Synopsis: affinity(r[P1])
**
@@ -96319,11 +96767,16 @@ case OP_MakeRecord: {
switch( len ){
default: zPayload[7] = (u8)(v&0xff); v >>= 8;
zPayload[6] = (u8)(v&0xff); v >>= 8;
+ /* no break */ deliberate_fall_through
case 6: zPayload[5] = (u8)(v&0xff); v >>= 8;
zPayload[4] = (u8)(v&0xff); v >>= 8;
+ /* no break */ deliberate_fall_through
case 4: zPayload[3] = (u8)(v&0xff); v >>= 8;
+ /* no break */ deliberate_fall_through
case 3: zPayload[2] = (u8)(v&0xff); v >>= 8;
+ /* no break */ deliberate_fall_through
case 2: zPayload[1] = (u8)(v&0xff); v >>= 8;
+ /* no break */ deliberate_fall_through
case 1: zPayload[0] = (u8)(v&0xff);
}
zPayload += len;
@@ -97242,7 +97695,8 @@ case OP_SequenceTest: {
** is the only cursor opcode that works with a pseudo-table.
**
** P3 is the number of fields in the records that will be stored by
-** the pseudo-table.
+** the pseudo-table. If P2 is 0 or negative then the pseudo-cursor
+** will return NULL for every column.
*/
case OP_OpenPseudo: {
VdbeCursor *pCx;
@@ -97385,10 +97839,10 @@ case OP_ColumnsUsed: {
**
** See also: Found, NotFound, SeekGt, SeekGe, SeekLt
*/
-case OP_SeekLT: /* jump, in3, group, ncycle */
-case OP_SeekLE: /* jump, in3, group, ncycle */
-case OP_SeekGE: /* jump, in3, group, ncycle */
-case OP_SeekGT: { /* jump, in3, group, ncycle */
+case OP_SeekLT: /* jump0, in3, group, ncycle */
+case OP_SeekLE: /* jump0, in3, group, ncycle */
+case OP_SeekGE: /* jump0, in3, group, ncycle */
+case OP_SeekGT: { /* jump0, in3, group, ncycle */
int res; /* Comparison result */
int oc; /* Opcode */
VdbeCursor *pC; /* The cursor to seek */
@@ -98055,7 +98509,7 @@ case OP_Found: { /* jump, in3, ncycle */
**
** See also: Found, NotFound, NoConflict, SeekRowid
*/
-case OP_SeekRowid: { /* jump, in3, ncycle */
+case OP_SeekRowid: { /* jump0, in3, ncycle */
VdbeCursor *pC;
BtCursor *pCrsr;
int res;
@@ -98814,7 +99268,7 @@ case OP_NullRow: {
** configured to use Prev, not Next.
*/
case OP_SeekEnd: /* ncycle */
-case OP_Last: { /* jump, ncycle */
+case OP_Last: { /* jump0, ncycle */
VdbeCursor *pC;
BtCursor *pCrsr;
int res;
@@ -98848,28 +99302,38 @@ case OP_Last: { /* jump, ncycle */
break;
}
-/* Opcode: IfSmaller P1 P2 P3 * *
+/* Opcode: IfSizeBetween P1 P2 P3 P4 *
**
-** Estimate the number of rows in the table P1. Jump to P2 if that
-** estimate is less than approximately 2**(0.1*P3).
+** Let N be the approximate number of rows in the table or index
+** with cursor P1 and let X be 10*log2(N) if N is positive or -1
+** if N is zero.
+**
+** Jump to P2 if X is in between P3 and P4, inclusive.
*/
-case OP_IfSmaller: { /* jump */
+case OP_IfSizeBetween: { /* jump */
VdbeCursor *pC;
BtCursor *pCrsr;
int res;
i64 sz;
assert( pOp->p1>=0 && pOp->p1<p->nCursor );
+ assert( pOp->p4type==P4_INT32 );
+ assert( pOp->p3>=-1 && pOp->p3<=640*2 );
+ assert( pOp->p4.i>=-1 && pOp->p4.i<=640*2 );
pC = p->apCsr[pOp->p1];
assert( pC!=0 );
pCrsr = pC->uc.pCursor;
assert( pCrsr );
rc = sqlite3BtreeFirst(pCrsr, &res);
if( rc ) goto abort_due_to_error;
- if( res==0 ){
+ if( res!=0 ){
+ sz = -1; /* -Infinity encoding */
+ }else{
sz = sqlite3BtreeRowCountEst(pCrsr);
- if( ALWAYS(sz>=0) && sqlite3LogEst((u64)sz)<pOp->p3 ) res = 1;
+ assert( sz>0 );
+ sz = sqlite3LogEst((u64)sz);
}
+ res = sz>=pOp->p3 && sz<=pOp->p4.i;
VdbeBranchTaken(res!=0,2);
if( res ) goto jump_to_p2;
break;
@@ -98922,7 +99386,7 @@ case OP_Sort: { /* jump ncycle */
** from the beginning toward the end. In other words, the cursor is
** configured to use Next, not Prev.
*/
-case OP_Rewind: { /* jump, ncycle */
+case OP_Rewind: { /* jump0, ncycle */
VdbeCursor *pC;
BtCursor *pCrsr;
int res;
@@ -99569,11 +100033,18 @@ case OP_CreateBtree: { /* out2 */
break;
}
-/* Opcode: SqlExec * * * P4 *
+/* Opcode: SqlExec P1 P2 * P4 *
**
** Run the SQL statement or statements specified in the P4 string.
-** Disable Auth and Trace callbacks while those statements are running if
-** P1 is true.
+**
+** The P1 parameter is a bitmask of options:
+**
+** 0x0001 Disable Auth and Trace callbacks while the statements
+** in P4 are running.
+**
+** 0x0002 Set db->nAnalysisLimit to P2 while the statements in
+** P4 are running.
+**
*/
case OP_SqlExec: {
char *zErr;
@@ -99581,6 +100052,7 @@ case OP_SqlExec: {
sqlite3_xauth xAuth;
#endif
u8 mTrace;
+ int savedAnalysisLimit;
sqlite3VdbeIncrWriteCounter(p, 0);
db->nSqlExec++;
@@ -99589,18 +100061,23 @@ case OP_SqlExec: {
xAuth = db->xAuth;
#endif
mTrace = db->mTrace;
- if( pOp->p1 ){
+ savedAnalysisLimit = db->nAnalysisLimit;
+ if( pOp->p1 & 0x0001 ){
#ifndef SQLITE_OMIT_AUTHORIZATION
db->xAuth = 0;
#endif
db->mTrace = 0;
}
+ if( pOp->p1 & 0x0002 ){
+ db->nAnalysisLimit = pOp->p2;
+ }
rc = sqlite3_exec(db, pOp->p4.z, 0, 0, &zErr);
db->nSqlExec--;
#ifndef SQLITE_OMIT_AUTHORIZATION
db->xAuth = xAuth;
#endif
db->mTrace = mTrace;
+ db->nAnalysisLimit = savedAnalysisLimit;
if( zErr || rc ){
sqlite3VdbeError(p, "%s", zErr);
sqlite3_free(zErr);
@@ -99752,11 +100229,11 @@ case OP_DropTrigger: {
/* Opcode: IntegrityCk P1 P2 P3 P4 P5
**
** Do an analysis of the currently open database. Store in
-** register P1 the text of an error message describing any problems.
-** If no problems are found, store a NULL in register P1.
+** register (P1+1) the text of an error message describing any problems.
+** If no problems are found, store a NULL in register (P1+1).
**
-** The register P3 contains one less than the maximum number of allowed errors.
-** At most reg(P3) errors will be reported.
+** The register (P1) contains one less than the maximum number of allowed
+** errors. At most reg(P1) errors will be reported.
** In other words, the analysis stops as soon as reg(P1) errors are
** seen. Reg(P1) is updated with the number of errors remaining.
**
@@ -99776,19 +100253,21 @@ case OP_IntegrityCk: {
Mem *pnErr; /* Register keeping track of errors remaining */
assert( p->bIsReader );
+ assert( pOp->p4type==P4_INTARRAY );
nRoot = pOp->p2;
aRoot = pOp->p4.ai;
assert( nRoot>0 );
+ assert( aRoot!=0 );
assert( aRoot[0]==(Pgno)nRoot );
- assert( pOp->p3>0 && pOp->p3<=(p->nMem+1 - p->nCursor) );
- pnErr = &aMem[pOp->p3];
+ assert( pOp->p1>0 && (pOp->p1+1)<=(p->nMem+1 - p->nCursor) );
+ pnErr = &aMem[pOp->p1];
assert( (pnErr->flags & MEM_Int)!=0 );
assert( (pnErr->flags & (MEM_Str|MEM_Blob))==0 );
- pIn1 = &aMem[pOp->p1];
+ pIn1 = &aMem[pOp->p1+1];
assert( pOp->p5<db->nDb );
assert( DbMaskTest(p->btreeMask, pOp->p5) );
- rc = sqlite3BtreeIntegrityCheck(db, db->aDb[pOp->p5].pBt, &aRoot[1], nRoot,
- (int)pnErr->u.i+1, &nErr, &z);
+ rc = sqlite3BtreeIntegrityCheck(db, db->aDb[pOp->p5].pBt, &aRoot[1],
+ &aMem[pOp->p3], nRoot, (int)pnErr->u.i+1, &nErr, &z);
sqlite3VdbeMemSetNull(pIn1);
if( nErr==0 ){
assert( z==0 );
@@ -99915,7 +100394,9 @@ case OP_RowSetTest: { /* jump, in1, in3 */
** P1 contains the address of the memory cell that contains the first memory
** cell in an array of values used as arguments to the sub-program. P2
** contains the address to jump to if the sub-program throws an IGNORE
-** exception using the RAISE() function. Register P3 contains the address
+** exception using the RAISE() function. P2 might be zero, if there is
+** no possibility that an IGNORE exception will be raised.
+** Register P3 contains the address
** of a memory cell in this (the parent) VM that is used to allocate the
** memory required by the sub-vdbe at runtime.
**
@@ -99923,7 +100404,7 @@ case OP_RowSetTest: { /* jump, in1, in3 */
**
** If P5 is non-zero, then recursive program invocation is enabled.
*/
-case OP_Program: { /* jump */
+case OP_Program: { /* jump0 */
int nMem; /* Number of memory registers for sub-program */
int nByte; /* Bytes of runtime space required for sub-program */
Mem *pRt; /* Register to allocate runtime space */
@@ -101472,7 +101953,7 @@ case OP_Filter: { /* jump */
** error is encountered.
*/
case OP_Trace:
-case OP_Init: { /* jump */
+case OP_Init: { /* jump0 */
int i;
#ifndef SQLITE_OMIT_TRACE
char *zTrace;
@@ -105373,10 +105854,10 @@ static int bytecodevtabColumn(
#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
case 9: /* nexec */
- sqlite3_result_int(ctx, pOp->nExec);
+ sqlite3_result_int64(ctx, pOp->nExec);
break;
case 10: /* ncycle */
- sqlite3_result_int(ctx, pOp->nCycle);
+ sqlite3_result_int64(ctx, pOp->nCycle);
break;
#else
case 9: /* nexec */
@@ -106520,7 +107001,7 @@ static int lookupName(
Parse *pParse, /* The parsing context */
const char *zDb, /* Name of the database containing table, or NULL */
const char *zTab, /* Name of table containing column, or NULL */
- const char *zCol, /* Name of the column. */
+ const Expr *pRight, /* Name of the column. */
NameContext *pNC, /* The name context used to resolve the name */
Expr *pExpr /* Make this EXPR node point to the selected column */
){
@@ -106537,6 +107018,7 @@ static int lookupName(
Table *pTab = 0; /* Table holding the row */
Column *pCol; /* A column of pTab */
ExprList *pFJMatch = 0; /* Matches for FULL JOIN .. USING */
+ const char *zCol = pRight->u.zToken;
assert( pNC ); /* the name context cannot be NULL. */
assert( zCol ); /* The Z in X.Y.Z cannot be NULL */
@@ -106768,7 +107250,8 @@ static int lookupName(
if( pParse->bReturning ){
if( (pNC->ncFlags & NC_UBaseReg)!=0
&& ALWAYS(zTab==0
- || sqlite3StrICmp(zTab,pParse->pTriggerTab->zName)==0)
+ || sqlite3StrICmp(zTab,pParse->pTriggerTab->zName)==0
+ || isValidSchemaTableName(zTab, pParse->pTriggerTab, 0))
){
pExpr->iTable = op!=TK_DELETE;
pTab = pParse->pTriggerTab;
@@ -106872,6 +107355,11 @@ static int lookupName(
&& ALWAYS(VisibleRowid(pMatch->pTab) || pMatch->fg.isNestedFrom)
){
cnt = cntTab;
+#if SQLITE_ALLOW_ROWID_IN_VIEW+0==2
+ if( pMatch->pTab!=0 && IsView(pMatch->pTab) ){
+ eNewExprOp = TK_NULL;
+ }
+#endif
if( pMatch->fg.isNestedFrom==0 ) pExpr->iColumn = -1;
pExpr->affExpr = SQLITE_AFF_INTEGER;
}
@@ -107025,6 +107513,10 @@ static int lookupName(
sqlite3ErrorMsg(pParse, "%s: %s.%s.%s", zErr, zDb, zTab, zCol);
}else if( zTab ){
sqlite3ErrorMsg(pParse, "%s: %s.%s", zErr, zTab, zCol);
+ }else if( cnt==0 && ExprHasProperty(pRight,EP_DblQuoted) ){
+ sqlite3ErrorMsg(pParse, "%s: \"%s\" - should this be a"
+ " string literal in single-quotes?",
+ zErr, zCol);
}else{
sqlite3ErrorMsg(pParse, "%s: %s", zErr, zCol);
}
@@ -107058,8 +107550,12 @@ static int lookupName(
** If a generated column is referenced, set bits for every column
** of the table.
*/
- if( pExpr->iColumn>=0 && cnt==1 && pMatch!=0 ){
- pMatch->colUsed |= sqlite3ExprColUsed(pExpr);
+ if( pMatch ){
+ if( pExpr->iColumn>=0 ){
+ pMatch->colUsed |= sqlite3ExprColUsed(pExpr);
+ }else{
+ pMatch->fg.rowidUsed = 1;
+ }
}
pExpr->op = eNewExprOp;
@@ -107302,7 +107798,6 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){
*/
case TK_ID:
case TK_DOT: {
- const char *zColumn;
const char *zTable;
const char *zDb;
Expr *pRight;
@@ -107311,7 +107806,7 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){
zDb = 0;
zTable = 0;
assert( !ExprHasProperty(pExpr, EP_IntValue) );
- zColumn = pExpr->u.zToken;
+ pRight = pExpr;
}else{
Expr *pLeft = pExpr->pLeft;
testcase( pNC->ncFlags & NC_IdxExpr );
@@ -107330,14 +107825,13 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){
}
assert( ExprUseUToken(pLeft) && ExprUseUToken(pRight) );
zTable = pLeft->u.zToken;
- zColumn = pRight->u.zToken;
assert( ExprUseYTab(pExpr) );
if( IN_RENAME_OBJECT ){
sqlite3RenameTokenRemap(pParse, (void*)pExpr, (void*)pRight);
sqlite3RenameTokenRemap(pParse, (void*)&pExpr->y.pTab, (void*)pLeft);
}
}
- return lookupName(pParse, zDb, zTable, zColumn, pNC, pExpr);
+ return lookupName(pParse, zDb, zTable, pRight, pNC, pExpr);
}
/* Resolve function names
@@ -107513,11 +108007,9 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){
#endif
}
}
-#ifndef SQLITE_OMIT_WINDOWFUNC
- else if( ExprHasProperty(pExpr, EP_WinFunc) ){
+ else if( ExprHasProperty(pExpr, EP_WinFunc) || pExpr->pLeft ){
is_agg = 1;
}
-#endif
sqlite3WalkExprList(pWalker, pList);
if( is_agg ){
if( pExpr->pLeft ){
@@ -107587,6 +108079,7 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){
testcase( pNC->ncFlags & NC_PartIdx );
testcase( pNC->ncFlags & NC_IdxExpr );
testcase( pNC->ncFlags & NC_GenCol );
+ assert( pExpr->x.pSelect );
if( pNC->ncFlags & NC_SelfRef ){
notValidImpl(pParse, pNC, "subqueries", pExpr, pExpr);
}else{
@@ -107595,6 +108088,7 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){
assert( pNC->nRef>=nRef );
if( nRef!=pNC->nRef ){
ExprSetProperty(pExpr, EP_VarSelect);
+ pExpr->x.pSelect->selFlags |= SF_Correlated;
}
pNC->ncFlags |= NC_Subquery;
}
@@ -108120,6 +108614,7 @@ static int resolveSelectStep(Walker *pWalker, Select *p){
if( pOuterNC ) pOuterNC->nNestedSelect++;
for(i=0; i<p->pSrc->nSrc; i++){
SrcItem *pItem = &p->pSrc->a[i];
+ assert( pItem->zName!=0 || pItem->pSelect!=0 );/* Test of tag-20240424-1*/
if( pItem->pSelect && (pItem->pSelect->selFlags & SF_Resolved)==0 ){
int nRef = pOuterNC ? pOuterNC->nRef : 0;
const char *zSavedContext = pParse->zAuthContext;
@@ -109426,11 +109921,12 @@ SQLITE_PRIVATE void sqlite3ExprSetErrorOffset(Expr *pExpr, int iOfst){
** appear to be quoted. If the quotes were of the form "..." (double-quotes)
** then the EP_DblQuoted flag is set on the expression node.
**
-** Special case: If op==TK_INTEGER and pToken points to a string that
-** can be translated into a 32-bit integer, then the token is not
-** stored in u.zToken. Instead, the integer values is written
-** into u.iValue and the EP_IntValue flag is set. No extra storage
+** Special case (tag-20240227-a): If op==TK_INTEGER and pToken points to
+** a string that can be translated into a 32-bit integer, then the token is
+** not stored in u.zToken. Instead, the integer values is written
+** into u.iValue and the EP_IntValue flag is set. No extra storage
** is allocated to hold the integer text and the dequote flag is ignored.
+** See also tag-20240227-b.
*/
SQLITE_PRIVATE Expr *sqlite3ExprAlloc(
sqlite3 *db, /* Handle for sqlite3DbMallocRawNN() */
@@ -109446,7 +109942,7 @@ SQLITE_PRIVATE Expr *sqlite3ExprAlloc(
if( pToken ){
if( op!=TK_INTEGER || pToken->z==0
|| sqlite3GetInt32(pToken->z, &iValue)==0 ){
- nExtra = pToken->n+1;
+ nExtra = pToken->n+1; /* tag-20240227-a */
assert( iValue>=0 );
}
}
@@ -109878,6 +110374,7 @@ SQLITE_PRIVATE void sqlite3ExprAssignVarNumber(Parse *pParse, Expr *pExpr, u32 n
static SQLITE_NOINLINE void sqlite3ExprDeleteNN(sqlite3 *db, Expr *p){
assert( p!=0 );
assert( db!=0 );
+exprDeleteRestart:
assert( !ExprUseUValue(p) || p->u.iValue>=0 );
assert( !ExprUseYWin(p) || !ExprUseYSub(p) );
assert( !ExprUseYWin(p) || p->y.pWin!=0 || db->mallocFailed );
@@ -109893,7 +110390,6 @@ static SQLITE_NOINLINE void sqlite3ExprDeleteNN(sqlite3 *db, Expr *p){
if( !ExprHasProperty(p, (EP_TokenOnly|EP_Leaf)) ){
/* The Expr.x union is never used at the same time as Expr.pRight */
assert( (ExprUseXList(p) && p->x.pList==0) || p->pRight==0 );
- if( p->pLeft && p->op!=TK_SELECT_COLUMN ) sqlite3ExprDeleteNN(db, p->pLeft);
if( p->pRight ){
assert( !ExprHasProperty(p, EP_WinFunc) );
sqlite3ExprDeleteNN(db, p->pRight);
@@ -109908,6 +110404,19 @@ static SQLITE_NOINLINE void sqlite3ExprDeleteNN(sqlite3 *db, Expr *p){
}
#endif
}
+ if( p->pLeft && p->op!=TK_SELECT_COLUMN ){
+ Expr *pLeft = p->pLeft;
+ if( !ExprHasProperty(p, EP_Static)
+ && !ExprHasProperty(pLeft, EP_Static)
+ ){
+ /* Avoid unnecessary recursion on unary operators */
+ sqlite3DbNNFreeNN(db, p);
+ p = pLeft;
+ goto exprDeleteRestart;
+ }else{
+ sqlite3ExprDeleteNN(db, pLeft);
+ }
+ }
}
if( !ExprHasProperty(p, EP_Static) ){
sqlite3DbNNFreeNN(db, p);
@@ -109940,11 +110449,11 @@ SQLITE_PRIVATE void sqlite3ClearOnOrUsing(sqlite3 *db, OnOrUsing *p){
**
** The pExpr might be deleted immediately on an OOM error.
**
-** The deferred delete is (currently) implemented by adding the
-** pExpr to the pParse->pConstExpr list with a register number of 0.
+** Return 0 if the delete was successfully deferred. Return non-zero
+** if the delete happened immediately because of an OOM.
*/
-SQLITE_PRIVATE void sqlite3ExprDeferredDelete(Parse *pParse, Expr *pExpr){
- sqlite3ParserAddCleanup(pParse, sqlite3ExprDeleteGeneric, pExpr);
+SQLITE_PRIVATE int sqlite3ExprDeferredDelete(Parse *pParse, Expr *pExpr){
+ return 0==sqlite3ParserAddCleanup(pParse, sqlite3ExprDeleteGeneric, pExpr);
}
/* Invoke sqlite3RenameExprUnmap() and sqlite3ExprDelete() on the
@@ -110380,17 +110889,19 @@ SQLITE_PRIVATE SrcList *sqlite3SrcListDup(sqlite3 *db, const SrcList *p, int fla
pNewItem->iCursor = pOldItem->iCursor;
pNewItem->addrFillSub = pOldItem->addrFillSub;
pNewItem->regReturn = pOldItem->regReturn;
+ pNewItem->regResult = pOldItem->regResult;
if( pNewItem->fg.isIndexedBy ){
pNewItem->u1.zIndexedBy = sqlite3DbStrDup(db, pOldItem->u1.zIndexedBy);
+ }else if( pNewItem->fg.isTabFunc ){
+ pNewItem->u1.pFuncArg =
+ sqlite3ExprListDup(db, pOldItem->u1.pFuncArg, flags);
+ }else{
+ pNewItem->u1.nRow = pOldItem->u1.nRow;
}
pNewItem->u2 = pOldItem->u2;
if( pNewItem->fg.isCte ){
pNewItem->u2.pCteUse->nUse++;
}
- if( pNewItem->fg.isTabFunc ){
- pNewItem->u1.pFuncArg =
- sqlite3ExprListDup(db, pOldItem->u1.pFuncArg, flags);
- }
pTab = pNewItem->pTab = pOldItem->pTab;
if( pTab ){
pTab->nTabRef++;
@@ -110856,6 +111367,54 @@ SQLITE_PRIVATE Expr *sqlite3ExprSimplifiedAndOr(Expr *pExpr){
return pExpr;
}
+/*
+** pExpr is a TK_FUNCTION node. Try to determine whether or not the
+** function is a constant function. A function is constant if all of
+** the following are true:
+**
+** (1) It is a scalar function (not an aggregate or window function)
+** (2) It has either the SQLITE_FUNC_CONSTANT or SQLITE_FUNC_SLOCHNG
+** property.
+** (3) All of its arguments are constants
+**
+** This routine sets pWalker->eCode to 0 if pExpr is not a constant.
+** It makes no changes to pWalker->eCode if pExpr is constant. In
+** every case, it returns WRC_Abort.
+**
+** Called as a service subroutine from exprNodeIsConstant().
+*/
+static SQLITE_NOINLINE int exprNodeIsConstantFunction(
+ Walker *pWalker,
+ Expr *pExpr
+){
+ int n; /* Number of arguments */
+ ExprList *pList; /* List of arguments */
+ FuncDef *pDef; /* The function */
+ sqlite3 *db; /* The database */
+
+ assert( pExpr->op==TK_FUNCTION );
+ if( ExprHasProperty(pExpr, EP_TokenOnly)
+ || (pList = pExpr->x.pList)==0
+ ){;
+ n = 0;
+ }else{
+ n = pList->nExpr;
+ sqlite3WalkExprList(pWalker, pList);
+ if( pWalker->eCode==0 ) return WRC_Abort;
+ }
+ db = pWalker->pParse->db;
+ pDef = sqlite3FindFunction(db, pExpr->u.zToken, n, ENC(db), 0);
+ if( pDef==0
+ || pDef->xFinalize!=0
+ || (pDef->funcFlags & (SQLITE_FUNC_CONSTANT|SQLITE_FUNC_SLOCHNG))==0
+ || ExprHasProperty(pExpr, EP_WinFunc)
+ ){
+ pWalker->eCode = 0;
+ return WRC_Abort;
+ }
+ return WRC_Prune;
+}
+
/*
** These routines are Walker callbacks used to check expressions to
@@ -110884,6 +111443,7 @@ SQLITE_PRIVATE Expr *sqlite3ExprSimplifiedAndOr(Expr *pExpr){
** malformed schema error.
*/
static int exprNodeIsConstant(Walker *pWalker, Expr *pExpr){
+ assert( pWalker->eCode>0 );
/* If pWalker->eCode is 2 then any term of the expression that comes from
** the ON or USING clauses of an outer join disqualifies the expression
@@ -110903,6 +111463,8 @@ static int exprNodeIsConstant(Walker *pWalker, Expr *pExpr){
){
if( pWalker->eCode==5 ) ExprSetProperty(pExpr, EP_FromDDL);
return WRC_Continue;
+ }else if( pWalker->pParse ){
+ return exprNodeIsConstantFunction(pWalker, pExpr);
}else{
pWalker->eCode = 0;
return WRC_Abort;
@@ -110931,9 +111493,11 @@ static int exprNodeIsConstant(Walker *pWalker, Expr *pExpr){
case TK_IF_NULL_ROW:
case TK_REGISTER:
case TK_DOT:
+ case TK_RAISE:
testcase( pExpr->op==TK_REGISTER );
testcase( pExpr->op==TK_IF_NULL_ROW );
testcase( pExpr->op==TK_DOT );
+ testcase( pExpr->op==TK_RAISE );
pWalker->eCode = 0;
return WRC_Abort;
case TK_VARIABLE:
@@ -110955,15 +111519,15 @@ static int exprNodeIsConstant(Walker *pWalker, Expr *pExpr){
return WRC_Continue;
}
}
-static int exprIsConst(Expr *p, int initFlag, int iCur){
+static int exprIsConst(Parse *pParse, Expr *p, int initFlag){
Walker w;
w.eCode = initFlag;
+ w.pParse = pParse;
w.xExprCallback = exprNodeIsConstant;
w.xSelectCallback = sqlite3SelectWalkFail;
#ifdef SQLITE_DEBUG
w.xSelectCallback2 = sqlite3SelectWalkAssert2;
#endif
- w.u.iCur = iCur;
sqlite3WalkExpr(&w, p);
return w.eCode;
}
@@ -110975,9 +111539,15 @@ static int exprIsConst(Expr *p, int initFlag, int iCur){
** For the purposes of this function, a double-quoted string (ex: "abc")
** is considered a variable but a single-quoted string (ex: 'abc') is
** a constant.
+**
+** The pParse parameter may be NULL. But if it is NULL, there is no way
+** to determine if function calls are constant or not, and hence all
+** function calls will be considered to be non-constant. If pParse is
+** not NULL, then a function call might be constant, depending on the
+** function and on its parameters.
*/
-SQLITE_PRIVATE int sqlite3ExprIsConstant(Expr *p){
- return exprIsConst(p, 1, 0);
+SQLITE_PRIVATE int sqlite3ExprIsConstant(Parse *pParse, Expr *p){
+ return exprIsConst(pParse, p, 1);
}
/*
@@ -110993,8 +111563,24 @@ SQLITE_PRIVATE int sqlite3ExprIsConstant(Expr *p){
** can be added to the pParse->pConstExpr list and evaluated once when
** the prepared statement starts up. See sqlite3ExprCodeRunJustOnce().
*/
-SQLITE_PRIVATE int sqlite3ExprIsConstantNotJoin(Expr *p){
- return exprIsConst(p, 2, 0);
+static int sqlite3ExprIsConstantNotJoin(Parse *pParse, Expr *p){
+ return exprIsConst(pParse, p, 2);
+}
+
+/*
+** This routine examines sub-SELECT statements as an expression is being
+** walked as part of sqlite3ExprIsTableConstant(). Sub-SELECTs are considered
+** constant as long as they are uncorrelated - meaning that they do not
+** contain any terms from outer contexts.
+*/
+static int exprSelectWalkTableConstant(Walker *pWalker, Select *pSelect){
+ assert( pSelect!=0 );
+ assert( pWalker->eCode==3 || pWalker->eCode==0 );
+ if( (pSelect->selFlags & SF_Correlated)!=0 ){
+ pWalker->eCode = 0;
+ return WRC_Abort;
+ }
+ return WRC_Prune;
}
/*
@@ -111002,9 +111588,26 @@ SQLITE_PRIVATE int sqlite3ExprIsConstantNotJoin(Expr *p){
** for any single row of the table with cursor iCur. In other words, the
** expression must not refer to any non-deterministic function nor any
** table other than iCur.
+**
+** Consider uncorrelated subqueries to be constants if the bAllowSubq
+** parameter is true.
*/
-SQLITE_PRIVATE int sqlite3ExprIsTableConstant(Expr *p, int iCur){
- return exprIsConst(p, 3, iCur);
+static int sqlite3ExprIsTableConstant(Expr *p, int iCur, int bAllowSubq){
+ Walker w;
+ w.eCode = 3;
+ w.pParse = 0;
+ w.xExprCallback = exprNodeIsConstant;
+ if( bAllowSubq ){
+ w.xSelectCallback = exprSelectWalkTableConstant;
+ }else{
+ w.xSelectCallback = sqlite3SelectWalkFail;
+#ifdef SQLITE_DEBUG
+ w.xSelectCallback2 = sqlite3SelectWalkAssert2;
+#endif
+ }
+ w.u.iCur = iCur;
+ sqlite3WalkExpr(&w, p);
+ return w.eCode;
}
/*
@@ -111022,7 +111625,10 @@ SQLITE_PRIVATE int sqlite3ExprIsTableConstant(Expr *p, int iCur){
**
** (1) pExpr cannot refer to any table other than pSrc->iCursor.
**
-** (2) pExpr cannot use subqueries or non-deterministic functions.
+** (2a) pExpr cannot use subqueries unless the bAllowSubq parameter is
+** true and the subquery is non-correlated
+**
+** (2b) pExpr cannot use non-deterministic functions.
**
** (3) pSrc cannot be part of the left operand for a RIGHT JOIN.
** (Is there some way to relax this constraint?)
@@ -111051,7 +111657,8 @@ SQLITE_PRIVATE int sqlite3ExprIsTableConstant(Expr *p, int iCur){
SQLITE_PRIVATE int sqlite3ExprIsSingleTableConstraint(
Expr *pExpr, /* The constraint */
const SrcList *pSrcList, /* Complete FROM clause */
- int iSrc /* Which element of pSrcList to use */
+ int iSrc, /* Which element of pSrcList to use */
+ int bAllowSubq /* Allow non-correlated subqueries */
){
const SrcItem *pSrc = &pSrcList->a[iSrc];
if( pSrc->fg.jointype & JT_LTORJ ){
@@ -111076,7 +111683,8 @@ SQLITE_PRIVATE int sqlite3ExprIsSingleTableConstraint(
}
}
}
- return sqlite3ExprIsTableConstant(pExpr, pSrc->iCursor); /* rules (1), (2) */
+ /* Rules (1), (2a), and (2b) handled by the following: */
+ return sqlite3ExprIsTableConstant(pExpr, pSrc->iCursor, bAllowSubq);
}
@@ -111161,7 +111769,7 @@ SQLITE_PRIVATE int sqlite3ExprIsConstantOrGroupBy(Parse *pParse, Expr *p, ExprLi
*/
SQLITE_PRIVATE int sqlite3ExprIsConstantOrFunction(Expr *p, u8 isInit){
assert( isInit==0 || isInit==1 );
- return exprIsConst(p, 4+isInit, 0);
+ return exprIsConst(0, p, 4+isInit);
}
#ifdef SQLITE_ENABLE_CURSOR_HINTS
@@ -111409,13 +112017,13 @@ static void sqlite3SetHasNullFlag(Vdbe *v, int iCur, int regHasNull){
** The argument is an IN operator with a list (not a subquery) on the
** right-hand side. Return TRUE if that list is constant.
*/
-static int sqlite3InRhsIsConstant(Expr *pIn){
+static int sqlite3InRhsIsConstant(Parse *pParse, Expr *pIn){
Expr *pLHS;
int res;
assert( !ExprHasProperty(pIn, EP_xIsSelect) );
pLHS = pIn->pLeft;
pIn->pLeft = 0;
- res = sqlite3ExprIsConstant(pIn);
+ res = sqlite3ExprIsConstant(pParse, pIn);
pIn->pLeft = pLHS;
return res;
}
@@ -111684,7 +112292,7 @@ SQLITE_PRIVATE int sqlite3FindInIndex(
if( eType==0
&& (inFlags & IN_INDEX_NOOP_OK)
&& ExprUseXList(pX)
- && (!sqlite3InRhsIsConstant(pX) || pX->x.pList->nExpr<=2)
+ && (!sqlite3InRhsIsConstant(pParse,pX) || pX->x.pList->nExpr<=2)
){
pParse->nTab--; /* Back out the allocation of the unused cursor */
iTab = -1; /* Cursor is not allocated */
@@ -111967,7 +112575,7 @@ SQLITE_PRIVATE void sqlite3CodeRhsOfIN(
** this code only executes once. Because for a non-constant
** expression we need to rerun this code each time.
*/
- if( addrOnce && !sqlite3ExprIsConstant(pE2) ){
+ if( addrOnce && !sqlite3ExprIsConstant(pParse, pE2) ){
sqlite3VdbeChangeToNoop(v, addrOnce-1);
sqlite3VdbeChangeToNoop(v, addrOnce);
ExprClearProperty(pExpr, EP_Subrtn);
@@ -113131,12 +113739,6 @@ expr_code_doover:
assert( pExpr->u.zToken!=0 );
assert( pExpr->u.zToken[0]!=0 );
sqlite3VdbeAddOp2(v, OP_Variable, pExpr->iColumn, target);
- if( pExpr->u.zToken[1]!=0 ){
- const char *z = sqlite3VListNumToName(pParse->pVList, pExpr->iColumn);
- assert( pExpr->u.zToken[0]=='?' || (z && !strcmp(pExpr->u.zToken, z)) );
- pParse->pVList[0] = 0; /* Indicate VList may no longer be enlarged */
- sqlite3VdbeAppendP4(v, (char*)z, P4_STATIC);
- }
return target;
}
case TK_REGISTER: {
@@ -113310,7 +113912,9 @@ expr_code_doover:
}
#endif
- if( ConstFactorOk(pParse) && sqlite3ExprIsConstantNotJoin(pExpr) ){
+ if( ConstFactorOk(pParse)
+ && sqlite3ExprIsConstantNotJoin(pParse,pExpr)
+ ){
/* SQL functions can be expensive. So try to avoid running them
** multiple times if we know they always give the same result */
return sqlite3ExprCodeRunJustOnce(pParse, pExpr, -1);
@@ -113341,7 +113945,7 @@ expr_code_doover:
}
for(i=0; i<nFarg; i++){
- if( i<32 && sqlite3ExprIsConstant(pFarg->a[i].pExpr) ){
+ if( i<32 && sqlite3ExprIsConstant(pParse, pFarg->a[i].pExpr) ){
testcase( i==31 );
constMask |= MASKBIT32(i);
}
@@ -113483,8 +114087,9 @@ expr_code_doover:
if( !ExprHasProperty(pExpr, EP_Collate) ){
/* A TK_COLLATE Expr node without the EP_Collate tag is a so-called
** "SOFT-COLLATE" that is added to constraints that are pushed down
- ** from outer queries into sub-queries by the push-down optimization.
- ** Clear subtypes as subtypes may not cross a subquery boundary.
+ ** from outer queries into sub-queries by the WHERE-clause push-down
+ ** optimization. Clear subtypes as subtypes may not cross a subquery
+ ** boundary.
*/
assert( pExpr->pLeft );
sqlite3ExprCode(pParse, pExpr->pLeft, target);
@@ -113808,7 +114413,7 @@ SQLITE_PRIVATE int sqlite3ExprCodeTemp(Parse *pParse, Expr *pExpr, int *pReg){
if( ConstFactorOk(pParse)
&& ALWAYS(pExpr!=0)
&& pExpr->op!=TK_REGISTER
- && sqlite3ExprIsConstantNotJoin(pExpr)
+ && sqlite3ExprIsConstantNotJoin(pParse, pExpr)
){
*pReg = 0;
r2 = sqlite3ExprCodeRunJustOnce(pParse, pExpr, -1);
@@ -113872,7 +114477,7 @@ SQLITE_PRIVATE void sqlite3ExprCodeCopy(Parse *pParse, Expr *pExpr, int target){
** might choose to code the expression at initialization time.
*/
SQLITE_PRIVATE void sqlite3ExprCodeFactorable(Parse *pParse, Expr *pExpr, int target){
- if( pParse->okConstFactor && sqlite3ExprIsConstantNotJoin(pExpr) ){
+ if( pParse->okConstFactor && sqlite3ExprIsConstantNotJoin(pParse,pExpr) ){
sqlite3ExprCodeRunJustOnce(pParse, pExpr, target);
}else{
sqlite3ExprCodeCopy(pParse, pExpr, target);
@@ -113931,7 +114536,7 @@ SQLITE_PRIVATE int sqlite3ExprCodeExprList(
sqlite3VdbeAddOp2(v, copyOp, j+srcReg-1, target+i);
}
}else if( (flags & SQLITE_ECEL_FACTOR)!=0
- && sqlite3ExprIsConstantNotJoin(pExpr)
+ && sqlite3ExprIsConstantNotJoin(pParse,pExpr)
){
sqlite3ExprCodeRunJustOnce(pParse, pExpr, target+i);
}else{
@@ -115082,9 +115687,8 @@ static int agginfoPersistExprCb(Walker *pWalker, Expr *pExpr){
&& pAggInfo->aCol[iAgg].pCExpr==pExpr
){
pExpr = sqlite3ExprDup(db, pExpr, 0);
- if( pExpr ){
+ if( pExpr && !sqlite3ExprDeferredDelete(pParse, pExpr) ){
pAggInfo->aCol[iAgg].pCExpr = pExpr;
- sqlite3ExprDeferredDelete(pParse, pExpr);
}
}
}else{
@@ -115093,9 +115697,8 @@ static int agginfoPersistExprCb(Walker *pWalker, Expr *pExpr){
&& pAggInfo->aFunc[iAgg].pFExpr==pExpr
){
pExpr = sqlite3ExprDup(db, pExpr, 0);
- if( pExpr ){
+ if( pExpr && !sqlite3ExprDeferredDelete(pParse, pExpr) ){
pAggInfo->aFunc[iAgg].pFExpr = pExpr;
- sqlite3ExprDeferredDelete(pParse, pExpr);
}
}
}
@@ -117796,7 +118399,12 @@ SQLITE_PRIVATE void sqlite3AlterDropColumn(Parse *pParse, SrcList *pSrc, const T
if( i==pTab->iPKey ){
sqlite3VdbeAddOp2(v, OP_Null, 0, regOut);
}else{
+ char aff = pTab->aCol[i].affinity;
+ if( aff==SQLITE_AFF_REAL ){
+ pTab->aCol[i].affinity = SQLITE_AFF_NUMERIC;
+ }
sqlite3ExprCodeGetColumnOfTable(v, pTab, iCur, i, regOut);
+ pTab->aCol[i].affinity = aff;
}
nField++;
}
@@ -118715,7 +119323,7 @@ static void statGet(
if( iVal==2 && p->nRow*10 <= nDistinct*11 ) iVal = 1;
sqlite3_str_appendf(&sStat, " %llu", iVal);
#ifdef SQLITE_ENABLE_STAT4
- assert( p->current.anEq[i] );
+ assert( p->current.anEq[i] || p->nRow==0 );
#endif
}
sqlite3ResultStrAccum(context, &sStat);
@@ -118900,7 +119508,7 @@ static void analyzeOneTable(
for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
int nCol; /* Number of columns in pIdx. "N" */
- int addrRewind; /* Address of "OP_Rewind iIdxCur" */
+ int addrGotoEnd; /* Address of "OP_Rewind iIdxCur" */
int addrNextRow; /* Address of "next_row:" */
const char *zIdxName; /* Name of the index */
int nColTest; /* Number of columns to test for changes */
@@ -118924,9 +119532,14 @@ static void analyzeOneTable(
/*
** Pseudo-code for loop that calls stat_push():
**
- ** Rewind csr
- ** if eof(csr) goto end_of_scan;
** regChng = 0
+ ** Rewind csr
+ ** if eof(csr){
+ ** stat_init() with count = 0;
+ ** goto end_of_scan;
+ ** }
+ ** count()
+ ** stat_init()
** goto chng_addr_0;
**
** next_row:
@@ -118965,41 +119578,36 @@ static void analyzeOneTable(
sqlite3VdbeSetP4KeyInfo(pParse, pIdx);
VdbeComment((v, "%s", pIdx->zName));
- /* Invoke the stat_init() function. The arguments are:
+ /* Implementation of the following:
**
+ ** regChng = 0
+ ** Rewind csr
+ ** if eof(csr){
+ ** stat_init() with count = 0;
+ ** goto end_of_scan;
+ ** }
+ ** count()
+ ** stat_init()
+ ** goto chng_addr_0;
+ */
+ assert( regTemp2==regStat+4 );
+ sqlite3VdbeAddOp2(v, OP_Integer, db->nAnalysisLimit, regTemp2);
+
+ /* Arguments to stat_init():
** (1) the number of columns in the index including the rowid
** (or for a WITHOUT ROWID table, the number of PK columns),
** (2) the number of columns in the key without the rowid/pk
- ** (3) estimated number of rows in the index,
- */
+ ** (3) estimated number of rows in the index. */
sqlite3VdbeAddOp2(v, OP_Integer, nCol, regStat+1);
assert( regRowid==regStat+2 );
sqlite3VdbeAddOp2(v, OP_Integer, pIdx->nKeyCol, regRowid);
-#ifdef SQLITE_ENABLE_STAT4
- if( OptimizationEnabled(db, SQLITE_Stat4) ){
- sqlite3VdbeAddOp2(v, OP_Count, iIdxCur, regTemp);
- addrRewind = sqlite3VdbeAddOp1(v, OP_Rewind, iIdxCur);
- VdbeCoverage(v);
- }else
-#endif
- {
- addrRewind = sqlite3VdbeAddOp1(v, OP_Rewind, iIdxCur);
- VdbeCoverage(v);
- sqlite3VdbeAddOp3(v, OP_Count, iIdxCur, regTemp, 1);
- }
- assert( regTemp2==regStat+4 );
- sqlite3VdbeAddOp2(v, OP_Integer, db->nAnalysisLimit, regTemp2);
+ sqlite3VdbeAddOp3(v, OP_Count, iIdxCur, regTemp,
+ OptimizationDisabled(db, SQLITE_Stat4));
sqlite3VdbeAddFunctionCall(pParse, 0, regStat+1, regStat, 4,
&statInitFuncdef, 0);
+ addrGotoEnd = sqlite3VdbeAddOp1(v, OP_Rewind, iIdxCur);
+ VdbeCoverage(v);
- /* Implementation of the following:
- **
- ** Rewind csr
- ** if eof(csr) goto end_of_scan;
- ** regChng = 0
- ** goto next_push_0;
- **
- */
sqlite3VdbeAddOp2(v, OP_Integer, 0, regChng);
addrNextRow = sqlite3VdbeCurrentAddr(v);
@@ -119106,6 +119714,12 @@ static void analyzeOneTable(
}
/* Add the entry to the stat1 table. */
+ if( pIdx->pPartIdxWhere ){
+ /* Partial indexes might get a zero-entry in sqlite_stat1. But
+ ** an empty table is omitted from sqlite_stat1. */
+ sqlite3VdbeJumpHere(v, addrGotoEnd);
+ addrGotoEnd = 0;
+ }
callStatGet(pParse, regStat, STAT_GET_STAT1, regStat1);
assert( "BBB"[0]==SQLITE_AFF_TEXT );
sqlite3VdbeAddOp4(v, OP_MakeRecord, regTabname, 3, regTemp, "BBB", 0);
@@ -119129,6 +119743,13 @@ static void analyzeOneTable(
int addrIsNull;
u8 seekOp = HasRowid(pTab) ? OP_NotExists : OP_NotFound;
+ /* No STAT4 data is generated if the number of rows is zero */
+ if( addrGotoEnd==0 ){
+ sqlite3VdbeAddOp2(v, OP_Cast, regStat1, SQLITE_AFF_INTEGER);
+ addrGotoEnd = sqlite3VdbeAddOp1(v, OP_IfNot, regStat1);
+ VdbeCoverage(v);
+ }
+
if( doOnce ){
int mxCol = nCol;
Index *pX;
@@ -119181,7 +119802,7 @@ static void analyzeOneTable(
#endif /* SQLITE_ENABLE_STAT4 */
/* End of analysis */
- sqlite3VdbeJumpHere(v, addrRewind);
+ if( addrGotoEnd ) sqlite3VdbeJumpHere(v, addrGotoEnd);
}
@@ -120930,7 +121551,7 @@ SQLITE_PRIVATE void sqlite3FinishCoding(Parse *pParse){
}
sqlite3VdbeAddOp0(v, OP_Halt);
-#if SQLITE_USER_AUTHENTICATION
+#if SQLITE_USER_AUTHENTICATION && !defined(SQLITE_OMIT_SHARED_CACHE)
if( pParse->nTableLock>0 && db->init.busy==0 ){
sqlite3UserAuthInit(db);
if( db->auth.authLevel<UAUTH_User ){
@@ -123569,20 +124190,20 @@ SQLITE_PRIVATE void sqlite3EndTable(
int regRowid; /* Rowid of the next row to insert */
int addrInsLoop; /* Top of the loop for inserting rows */
Table *pSelTab; /* A table that describes the SELECT results */
+ int iCsr; /* Write cursor on the new table */
if( IN_SPECIAL_PARSE ){
pParse->rc = SQLITE_ERROR;
pParse->nErr++;
return;
}
+ iCsr = pParse->nTab++;
regYield = ++pParse->nMem;
regRec = ++pParse->nMem;
regRowid = ++pParse->nMem;
- assert(pParse->nTab==1);
sqlite3MayAbort(pParse);
- sqlite3VdbeAddOp3(v, OP_OpenWrite, 1, pParse->regRoot, iDb);
+ sqlite3VdbeAddOp3(v, OP_OpenWrite, iCsr, pParse->regRoot, iDb);
sqlite3VdbeChangeP5(v, OPFLAG_P2ISREG);
- pParse->nTab = 2;
addrTop = sqlite3VdbeCurrentAddr(v) + 1;
sqlite3VdbeAddOp3(v, OP_InitCoroutine, regYield, 0, addrTop);
if( pParse->nErr ) return;
@@ -123603,11 +124224,11 @@ SQLITE_PRIVATE void sqlite3EndTable(
VdbeCoverage(v);
sqlite3VdbeAddOp3(v, OP_MakeRecord, dest.iSdst, dest.nSdst, regRec);
sqlite3TableAffinity(v, p, 0);
- sqlite3VdbeAddOp2(v, OP_NewRowid, 1, regRowid);
- sqlite3VdbeAddOp3(v, OP_Insert, 1, regRec, regRowid);
+ sqlite3VdbeAddOp2(v, OP_NewRowid, iCsr, regRowid);
+ sqlite3VdbeAddOp3(v, OP_Insert, iCsr, regRec, regRowid);
sqlite3VdbeGoto(v, addrInsLoop);
sqlite3VdbeJumpHere(v, addrInsLoop);
- sqlite3VdbeAddOp1(v, OP_Close, 1);
+ sqlite3VdbeAddOp1(v, OP_Close, iCsr);
}
/* Compute the complete text of the CREATE statement */
@@ -123664,13 +124285,10 @@ SQLITE_PRIVATE void sqlite3EndTable(
/* Test for cycles in generated columns and illegal expressions
** in CHECK constraints and in DEFAULT clauses. */
if( p->tabFlags & TF_HasGenerated ){
- sqlite3VdbeAddOp4(v, OP_SqlExec, 1, 0, 0,
+ sqlite3VdbeAddOp4(v, OP_SqlExec, 0x0001, 0, 0,
sqlite3MPrintf(db, "SELECT*FROM\"%w\".\"%w\"",
db->aDb[iDb].zDbSName, p->zName), P4_DYNAMIC);
}
- sqlite3VdbeAddOp4(v, OP_SqlExec, 1, 0, 0,
- sqlite3MPrintf(db, "PRAGMA \"%w\".integrity_check(%Q)",
- db->aDb[iDb].zDbSName, p->zName), P4_DYNAMIC);
}
/* Add the table to the in-memory representation of the database.
@@ -132844,6 +133462,195 @@ SQLITE_PRIVATE void sqlite3AutoincrementEnd(Parse *pParse){
# define autoIncStep(A,B,C)
#endif /* SQLITE_OMIT_AUTOINCREMENT */
+/*
+** If argument pVal is a Select object returned by an sqlite3MultiValues()
+** that was able to use the co-routine optimization, finish coding the
+** co-routine.
+*/
+SQLITE_PRIVATE void sqlite3MultiValuesEnd(Parse *pParse, Select *pVal){
+ if( ALWAYS(pVal) && pVal->pSrc->nSrc>0 ){
+ SrcItem *pItem = &pVal->pSrc->a[0];
+ sqlite3VdbeEndCoroutine(pParse->pVdbe, pItem->regReturn);
+ sqlite3VdbeJumpHere(pParse->pVdbe, pItem->addrFillSub - 1);
+ }
+}
+
+/*
+** Return true if all expressions in the expression-list passed as the
+** only argument are constant.
+*/
+static int exprListIsConstant(Parse *pParse, ExprList *pRow){
+ int ii;
+ for(ii=0; ii<pRow->nExpr; ii++){
+ if( 0==sqlite3ExprIsConstant(pParse, pRow->a[ii].pExpr) ) return 0;
+ }
+ return 1;
+}
+
+/*
+** Return true if all expressions in the expression-list passed as the
+** only argument are both constant and have no affinity.
+*/
+static int exprListIsNoAffinity(Parse *pParse, ExprList *pRow){
+ int ii;
+ if( exprListIsConstant(pParse,pRow)==0 ) return 0;
+ for(ii=0; ii<pRow->nExpr; ii++){
+ Expr *pExpr = pRow->a[ii].pExpr;
+ assert( pExpr->op!=TK_RAISE );
+ assert( pExpr->affExpr==0 );
+ if( 0!=sqlite3ExprAffinity(pExpr) ) return 0;
+ }
+ return 1;
+
+}
+
+/*
+** This function is called by the parser for the second and subsequent
+** rows of a multi-row VALUES clause. Argument pLeft is the part of
+** the VALUES clause already parsed, argument pRow is the vector of values
+** for the new row. The Select object returned represents the complete
+** VALUES clause, including the new row.
+**
+** There are two ways in which this may be achieved - by incremental
+** coding of a co-routine (the "co-routine" method) or by returning a
+** Select object equivalent to the following (the "UNION ALL" method):
+**
+** "pLeft UNION ALL SELECT pRow"
+**
+** If the VALUES clause contains a lot of rows, this compound Select
+** object may consume a lot of memory.
+**
+** When the co-routine method is used, each row that will be returned
+** by the VALUES clause is coded into part of a co-routine as it is
+** passed to this function. The returned Select object is equivalent to:
+**
+** SELECT * FROM (
+** Select object to read co-routine
+** )
+**
+** The co-routine method is used in most cases. Exceptions are:
+**
+** a) If the current statement has a WITH clause. This is to avoid
+** statements like:
+**
+** WITH cte AS ( VALUES('x'), ('y') ... )
+** SELECT * FROM cte AS a, cte AS b;
+**
+** This will not work, as the co-routine uses a hard-coded register
+** for its OP_Yield instructions, and so it is not possible for two
+** cursors to iterate through it concurrently.
+**
+** b) The schema is currently being parsed (i.e. the VALUES clause is part
+** of a schema item like a VIEW or TRIGGER). In this case there is no VM
+** being generated when parsing is taking place, and so generating
+** a co-routine is not possible.
+**
+** c) There are non-constant expressions in the VALUES clause (e.g.
+** the VALUES clause is part of a correlated sub-query).
+**
+** d) One or more of the values in the first row of the VALUES clause
+** has an affinity (i.e. is a CAST expression). This causes problems
+** because the complex rules SQLite uses (see function
+** sqlite3SubqueryColumnTypes() in select.c) to determine the effective
+** affinity of such a column for all rows require access to all values in
+** the column simultaneously.
+*/
+SQLITE_PRIVATE Select *sqlite3MultiValues(Parse *pParse, Select *pLeft, ExprList *pRow){
+
+ if( pParse->bHasWith /* condition (a) above */
+ || pParse->db->init.busy /* condition (b) above */
+ || exprListIsConstant(pParse,pRow)==0 /* condition (c) above */
+ || (pLeft->pSrc->nSrc==0 &&
+ exprListIsNoAffinity(pParse,pLeft->pEList)==0) /* condition (d) above */
+ || IN_SPECIAL_PARSE
+ ){
+ /* The co-routine method cannot be used. Fall back to UNION ALL. */
+ Select *pSelect = 0;
+ int f = SF_Values | SF_MultiValue;
+ if( pLeft->pSrc->nSrc ){
+ sqlite3MultiValuesEnd(pParse, pLeft);
+ f = SF_Values;
+ }else if( pLeft->pPrior ){
+ /* In this case set the SF_MultiValue flag only if it was set on pLeft */
+ f = (f & pLeft->selFlags);
+ }
+ pSelect = sqlite3SelectNew(pParse, pRow, 0, 0, 0, 0, 0, f, 0);
+ pLeft->selFlags &= ~SF_MultiValue;
+ if( pSelect ){
+ pSelect->op = TK_ALL;
+ pSelect->pPrior = pLeft;
+ pLeft = pSelect;
+ }
+ }else{
+ SrcItem *p = 0; /* SrcItem that reads from co-routine */
+
+ if( pLeft->pSrc->nSrc==0 ){
+ /* Co-routine has not yet been started and the special Select object
+ ** that accesses the co-routine has not yet been created. This block
+ ** does both those things. */
+ Vdbe *v = sqlite3GetVdbe(pParse);
+ Select *pRet = sqlite3SelectNew(pParse, 0, 0, 0, 0, 0, 0, 0, 0);
+
+ /* Ensure the database schema has been read. This is to ensure we have
+ ** the correct text encoding. */
+ if( (pParse->db->mDbFlags & DBFLAG_SchemaKnownOk)==0 ){
+ sqlite3ReadSchema(pParse);
+ }
+
+ if( pRet ){
+ SelectDest dest;
+ pRet->pSrc->nSrc = 1;
+ pRet->pPrior = pLeft->pPrior;
+ pRet->op = pLeft->op;
+ pLeft->pPrior = 0;
+ pLeft->op = TK_SELECT;
+ assert( pLeft->pNext==0 );
+ assert( pRet->pNext==0 );
+ p = &pRet->pSrc->a[0];
+ p->pSelect = pLeft;
+ p->fg.viaCoroutine = 1;
+ p->addrFillSub = sqlite3VdbeCurrentAddr(v) + 1;
+ p->regReturn = ++pParse->nMem;
+ p->iCursor = -1;
+ p->u1.nRow = 2;
+ sqlite3VdbeAddOp3(v,OP_InitCoroutine,p->regReturn,0,p->addrFillSub);
+ sqlite3SelectDestInit(&dest, SRT_Coroutine, p->regReturn);
+
+ /* Allocate registers for the output of the co-routine. Do so so
+ ** that there are two unused registers immediately before those
+ ** used by the co-routine. This allows the code in sqlite3Insert()
+ ** to use these registers directly, instead of copying the output
+ ** of the co-routine to a separate array for processing. */
+ dest.iSdst = pParse->nMem + 3;
+ dest.nSdst = pLeft->pEList->nExpr;
+ pParse->nMem += 2 + dest.nSdst;
+
+ pLeft->selFlags |= SF_MultiValue;
+ sqlite3Select(pParse, pLeft, &dest);
+ p->regResult = dest.iSdst;
+ assert( pParse->nErr || dest.iSdst>0 );
+ pLeft = pRet;
+ }
+ }else{
+ p = &pLeft->pSrc->a[0];
+ assert( !p->fg.isTabFunc && !p->fg.isIndexedBy );
+ p->u1.nRow++;
+ }
+
+ if( pParse->nErr==0 ){
+ assert( p!=0 );
+ if( p->pSelect->pEList->nExpr!=pRow->nExpr ){
+ sqlite3SelectWrongNumTermsError(pParse, p->pSelect);
+ }else{
+ sqlite3ExprCodeExprList(pParse, pRow, p->regResult, 0, 0);
+ sqlite3VdbeAddOp1(pParse->pVdbe, OP_Yield, p->regReturn);
+ }
+ }
+ sqlite3ExprListDelete(pParse->db, pRow);
+ }
+
+ return pLeft;
+}
/* Forward declaration */
static int xferOptimization(
@@ -133180,25 +133987,40 @@ SQLITE_PRIVATE void sqlite3Insert(
if( pSelect ){
/* Data is coming from a SELECT or from a multi-row VALUES clause.
** Generate a co-routine to run the SELECT. */
- int regYield; /* Register holding co-routine entry-point */
- int addrTop; /* Top of the co-routine */
int rc; /* Result code */
- regYield = ++pParse->nMem;
- addrTop = sqlite3VdbeCurrentAddr(v) + 1;
- sqlite3VdbeAddOp3(v, OP_InitCoroutine, regYield, 0, addrTop);
- sqlite3SelectDestInit(&dest, SRT_Coroutine, regYield);
- dest.iSdst = bIdListInOrder ? regData : 0;
- dest.nSdst = pTab->nCol;
- rc = sqlite3Select(pParse, pSelect, &dest);
- regFromSelect = dest.iSdst;
- assert( db->pParse==pParse );
- if( rc || pParse->nErr ) goto insert_cleanup;
- assert( db->mallocFailed==0 );
- sqlite3VdbeEndCoroutine(v, regYield);
- sqlite3VdbeJumpHere(v, addrTop - 1); /* label B: */
- assert( pSelect->pEList );
- nColumn = pSelect->pEList->nExpr;
+ if( pSelect->pSrc->nSrc==1
+ && pSelect->pSrc->a[0].fg.viaCoroutine
+ && pSelect->pPrior==0
+ ){
+ SrcItem *pItem = &pSelect->pSrc->a[0];
+ dest.iSDParm = pItem->regReturn;
+ regFromSelect = pItem->regResult;
+ nColumn = pItem->pSelect->pEList->nExpr;
+ ExplainQueryPlan((pParse, 0, "SCAN %S", pItem));
+ if( bIdListInOrder && nColumn==pTab->nCol ){
+ regData = regFromSelect;
+ regRowid = regData - 1;
+ regIns = regRowid - (IsVirtual(pTab) ? 1 : 0);
+ }
+ }else{
+ int addrTop; /* Top of the co-routine */
+ int regYield = ++pParse->nMem;
+ addrTop = sqlite3VdbeCurrentAddr(v) + 1;
+ sqlite3VdbeAddOp3(v, OP_InitCoroutine, regYield, 0, addrTop);
+ sqlite3SelectDestInit(&dest, SRT_Coroutine, regYield);
+ dest.iSdst = bIdListInOrder ? regData : 0;
+ dest.nSdst = pTab->nCol;
+ rc = sqlite3Select(pParse, pSelect, &dest);
+ regFromSelect = dest.iSdst;
+ assert( db->pParse==pParse );
+ if( rc || pParse->nErr ) goto insert_cleanup;
+ assert( db->mallocFailed==0 );
+ sqlite3VdbeEndCoroutine(v, regYield);
+ sqlite3VdbeJumpHere(v, addrTop - 1); /* label B: */
+ assert( pSelect->pEList );
+ nColumn = pSelect->pEList->nExpr;
+ }
/* Set useTempTable to TRUE if the result of the SELECT statement
** should be written into a temporary table (template 4). Set to
@@ -137924,6 +138746,34 @@ static const PragmaName aPragmaName[] = {
/************** Continuing where we left off in pragma.c *********************/
/*
+** When the 0x10 bit of PRAGMA optimize is set, any ANALYZE commands
+** will be run with an analysis_limit set to the lessor of the value of
+** the following macro or to the actual analysis_limit if it is non-zero,
+** in order to prevent PRAGMA optimize from running for too long.
+**
+** The value of 2000 is chosen emperically so that the worst-case run-time
+** for PRAGMA optimize does not exceed 100 milliseconds against a variety
+** of test databases on a RaspberryPI-4 compiled using -Os and without
+** -DSQLITE_DEBUG. Of course, your mileage may vary. For the purpose of
+** this paragraph, "worst-case" means that ANALYZE ends up being
+** run on every table in the database. The worst case typically only
+** happens if PRAGMA optimize is run on a database file for which ANALYZE
+** has not been previously run and the 0x10000 flag is included so that
+** all tables are analyzed. The usual case for PRAGMA optimize is that
+** no ANALYZE commands will be run at all, or if any ANALYZE happens it
+** will be against a single table, so that expected timing for PRAGMA
+** optimize on a PI-4 is more like 1 millisecond or less with the 0x10000
+** flag or less than 100 microseconds without the 0x10000 flag.
+**
+** An analysis limit of 2000 is almost always sufficient for the query
+** planner to fully characterize an index. The additional accuracy from
+** a larger analysis is not usually helpful.
+*/
+#ifndef SQLITE_DEFAULT_OPTIMIZE_LIMIT
+# define SQLITE_DEFAULT_OPTIMIZE_LIMIT 2000
+#endif
+
+/*
** Interpret the given string as a safety level. Return 0 for OFF,
** 1 for ON or NORMAL, 2 for FULL, and 3 for EXTRA. Return 1 for an empty or
** unrecognized string argument. The FULL and EXTRA option is disallowed
@@ -139568,7 +140418,7 @@ SQLITE_PRIVATE void sqlite3Pragma(
/* Set the maximum error count */
mxErr = SQLITE_INTEGRITY_CHECK_ERROR_MAX;
if( zRight ){
- if( sqlite3GetInt32(zRight, &mxErr) ){
+ if( sqlite3GetInt32(pValue->z, &mxErr) ){
if( mxErr<=0 ){
mxErr = SQLITE_INTEGRITY_CHECK_ERROR_MAX;
}
@@ -139585,7 +140435,6 @@ SQLITE_PRIVATE void sqlite3Pragma(
Hash *pTbls; /* Set of all tables in the schema */
int *aRoot; /* Array of root page numbers of all btrees */
int cnt = 0; /* Number of entries in aRoot[] */
- int mxIdx = 0; /* Maximum number of indexes for any table */
if( OMIT_TEMPDB && i==1 ) continue;
if( iDb>=0 && i!=iDb ) continue;
@@ -139607,7 +140456,6 @@ SQLITE_PRIVATE void sqlite3Pragma(
if( pObjTab && pObjTab!=pTab ) continue;
if( HasRowid(pTab) ) cnt++;
for(nIdx=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, nIdx++){ cnt++; }
- if( nIdx>mxIdx ) mxIdx = nIdx;
}
if( cnt==0 ) continue;
if( pObjTab ) cnt++;
@@ -139627,11 +140475,11 @@ SQLITE_PRIVATE void sqlite3Pragma(
aRoot[0] = cnt;
/* Make sure sufficient number of registers have been allocated */
- sqlite3TouchRegister(pParse, 8+mxIdx);
+ sqlite3TouchRegister(pParse, 8+cnt);
sqlite3ClearTempRegCache(pParse);
/* Do the b-tree integrity checks */
- sqlite3VdbeAddOp4(v, OP_IntegrityCk, 2, cnt, 1, (char*)aRoot,P4_INTARRAY);
+ sqlite3VdbeAddOp4(v, OP_IntegrityCk, 1, cnt, 8, (char*)aRoot,P4_INTARRAY);
sqlite3VdbeChangeP5(v, (u8)i);
addr = sqlite3VdbeAddOp1(v, OP_IsNull, 2); VdbeCoverage(v);
sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0,
@@ -139641,6 +140489,36 @@ SQLITE_PRIVATE void sqlite3Pragma(
integrityCheckResultRow(v);
sqlite3VdbeJumpHere(v, addr);
+ /* Check that the indexes all have the right number of rows */
+ cnt = pObjTab ? 1 : 0;
+ sqlite3VdbeLoadString(v, 2, "wrong # of entries in index ");
+ for(x=sqliteHashFirst(pTbls); x; x=sqliteHashNext(x)){
+ int iTab = 0;
+ Table *pTab = sqliteHashData(x);
+ Index *pIdx;
+ if( pObjTab && pObjTab!=pTab ) continue;
+ if( HasRowid(pTab) ){
+ iTab = cnt++;
+ }else{
+ iTab = cnt;
+ for(pIdx=pTab->pIndex; ALWAYS(pIdx); pIdx=pIdx->pNext){
+ if( IsPrimaryKeyIndex(pIdx) ) break;
+ iTab++;
+ }
+ }
+ for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
+ if( pIdx->pPartIdxWhere==0 ){
+ addr = sqlite3VdbeAddOp3(v, OP_Eq, 8+cnt, 0, 8+iTab);
+ VdbeCoverageNeverNull(v);
+ sqlite3VdbeLoadString(v, 4, pIdx->zName);
+ sqlite3VdbeAddOp3(v, OP_Concat, 4, 2, 3);
+ integrityCheckResultRow(v);
+ sqlite3VdbeJumpHere(v, addr);
+ }
+ cnt++;
+ }
+ }
+
/* Make sure all the indices are constructed correctly.
*/
for(x=sqliteHashFirst(pTbls); x; x=sqliteHashNext(x)){
@@ -139964,21 +140842,9 @@ SQLITE_PRIVATE void sqlite3Pragma(
}
sqlite3VdbeAddOp2(v, OP_Next, iDataCur, loopTop); VdbeCoverage(v);
sqlite3VdbeJumpHere(v, loopTop-1);
- if( !isQuick ){
- sqlite3VdbeLoadString(v, 2, "wrong # of entries in index ");
- for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){
- if( pPk==pIdx ) continue;
- sqlite3VdbeAddOp2(v, OP_Count, iIdxCur+j, 3);
- addr = sqlite3VdbeAddOp3(v, OP_Eq, 8+j, 0, 3); VdbeCoverage(v);
- sqlite3VdbeChangeP5(v, SQLITE_NOTNULL);
- sqlite3VdbeLoadString(v, 4, pIdx->zName);
- sqlite3VdbeAddOp3(v, OP_Concat, 4, 2, 3);
- integrityCheckResultRow(v);
- sqlite3VdbeJumpHere(v, addr);
- }
- if( pPk ){
- sqlite3ReleaseTempRange(pParse, r2, pPk->nKeyCol);
- }
+ if( pPk ){
+ assert( !isQuick );
+ sqlite3ReleaseTempRange(pParse, r2, pPk->nKeyCol);
}
}
@@ -140276,44 +141142,63 @@ SQLITE_PRIVATE void sqlite3Pragma(
**
** The optional argument is a bitmask of optimizations to perform:
**
- ** 0x0001 Debugging mode. Do not actually perform any optimizations
- ** but instead return one line of text for each optimization
- ** that would have been done. Off by default.
+ ** 0x00001 Debugging mode. Do not actually perform any optimizations
+ ** but instead return one line of text for each optimization
+ ** that would have been done. Off by default.
**
- ** 0x0002 Run ANALYZE on tables that might benefit. On by default.
- ** See below for additional information.
+ ** 0x00002 Run ANALYZE on tables that might benefit. On by default.
+ ** See below for additional information.
**
- ** 0x0004 (Not yet implemented) Record usage and performance
- ** information from the current session in the
- ** database file so that it will be available to "optimize"
- ** pragmas run by future database connections.
+ ** 0x00010 Run all ANALYZE operations using an analysis_limit that
+ ** is the lessor of the current analysis_limit and the
+ ** SQLITE_DEFAULT_OPTIMIZE_LIMIT compile-time option.
+ ** The default value of SQLITE_DEFAULT_OPTIMIZE_LIMIT is
+ ** currently (2024-02-19) set to 2000, which is such that
+ ** the worst case run-time for PRAGMA optimize on a 100MB
+ ** database will usually be less than 100 milliseconds on
+ ** a RaspberryPI-4 class machine. On by default.
**
- ** 0x0008 (Not yet implemented) Create indexes that might have
- ** been helpful to recent queries
+ ** 0x10000 Look at tables to see if they need to be reanalyzed
+ ** due to growth or shrinkage even if they have not been
+ ** queried during the current connection. Off by default.
**
- ** The default MASK is and always shall be 0xfffe. 0xfffe means perform all
- ** of the optimizations listed above except Debug Mode, including new
- ** optimizations that have not yet been invented. If new optimizations are
- ** ever added that should be off by default, those off-by-default
- ** optimizations will have bitmasks of 0x10000 or larger.
+ ** The default MASK is and always shall be 0x0fffe. In the current
+ ** implementation, the default mask only covers the 0x00002 optimization,
+ ** though additional optimizations that are covered by 0x0fffe might be
+ ** added in the future. Optimizations that are off by default and must
+ ** be explicitly requested have masks of 0x10000 or greater.
**
** DETERMINATION OF WHEN TO RUN ANALYZE
**
** In the current implementation, a table is analyzed if only if all of
** the following are true:
**
- ** (1) MASK bit 0x02 is set.
+ ** (1) MASK bit 0x00002 is set.
**
- ** (2) The query planner used sqlite_stat1-style statistics for one or
- ** more indexes of the table at some point during the lifetime of
- ** the current connection.
+ ** (2) The table is an ordinary table, not a virtual table or view.
**
- ** (3) One or more indexes of the table are currently unanalyzed OR
- ** the number of rows in the table has increased by 25 times or more
- ** since the last time ANALYZE was run.
+ ** (3) The table name does not begin with "sqlite_".
+ **
+ ** (4) One or more of the following is true:
+ ** (4a) The 0x10000 MASK bit is set.
+ ** (4b) One or more indexes on the table lacks an entry
+ ** in the sqlite_stat1 table.
+ ** (4c) The query planner used sqlite_stat1-style statistics for one
+ ** or more indexes of the table at some point during the lifetime
+ ** of the current connection.
+ **
+ ** (5) One or more of the following is true:
+ ** (5a) One or more indexes on the table lacks an entry
+ ** in the sqlite_stat1 table. (Same as 4a)
+ ** (5b) The number of rows in the table has increased or decreased by
+ ** 10-fold. In other words, the current size of the table is
+ ** 10 times larger than the size in sqlite_stat1 or else the
+ ** current size is less than 1/10th the size in sqlite_stat1.
**
** The rules for when tables are analyzed are likely to change in
- ** future releases.
+ ** future releases. Future versions of SQLite might accept a string
+ ** literal argument to this pragma that contains a mnemonic description
+ ** of the options rather than a bitmap.
*/
case PragTyp_OPTIMIZE: {
int iDbLast; /* Loop termination point for the schema loop */
@@ -140325,6 +141210,10 @@ SQLITE_PRIVATE void sqlite3Pragma(
LogEst szThreshold; /* Size threshold above which reanalysis needed */
char *zSubSql; /* SQL statement for the OP_SqlExec opcode */
u32 opMask; /* Mask of operations to perform */
+ int nLimit; /* Analysis limit to use */
+ int nCheck = 0; /* Number of tables to be optimized */
+ int nBtree = 0; /* Number of btrees to scan */
+ int nIndex; /* Number of indexes on the current table */
if( zRight ){
opMask = (u32)sqlite3Atoi(zRight);
@@ -140332,6 +141221,14 @@ SQLITE_PRIVATE void sqlite3Pragma(
}else{
opMask = 0xfffe;
}
+ if( (opMask & 0x10)==0 ){
+ nLimit = 0;
+ }else if( db->nAnalysisLimit>0
+ && db->nAnalysisLimit<SQLITE_DEFAULT_OPTIMIZE_LIMIT ){
+ nLimit = 0;
+ }else{
+ nLimit = SQLITE_DEFAULT_OPTIMIZE_LIMIT;
+ }
iTabCur = pParse->nTab++;
for(iDbLast = zDb?iDb:db->nDb-1; iDb<=iDbLast; iDb++){
if( iDb==1 ) continue;
@@ -140340,23 +141237,61 @@ SQLITE_PRIVATE void sqlite3Pragma(
for(k=sqliteHashFirst(&pSchema->tblHash); k; k=sqliteHashNext(k)){
pTab = (Table*)sqliteHashData(k);
- /* If table pTab has not been used in a way that would benefit from
- ** having analysis statistics during the current session, then skip it.
- ** This also has the effect of skipping virtual tables and views */
- if( (pTab->tabFlags & TF_StatsUsed)==0 ) continue;
+ /* This only works for ordinary tables */
+ if( !IsOrdinaryTable(pTab) ) continue;
- /* Reanalyze if the table is 25 times larger than the last analysis */
- szThreshold = pTab->nRowLogEst + 46; assert( sqlite3LogEst(25)==46 );
+ /* Do not scan system tables */
+ if( 0==sqlite3StrNICmp(pTab->zName, "sqlite_", 7) ) continue;
+
+ /* Find the size of the table as last recorded in sqlite_stat1.
+ ** If any index is unanalyzed, then the threshold is -1 to
+ ** indicate a new, unanalyzed index
+ */
+ szThreshold = pTab->nRowLogEst;
+ nIndex = 0;
for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
+ nIndex++;
if( !pIdx->hasStat1 ){
- szThreshold = 0; /* Always analyze if any index lacks statistics */
- break;
+ szThreshold = -1; /* Always analyze if any index lacks statistics */
}
}
- if( szThreshold ){
- sqlite3OpenTable(pParse, iTabCur, iDb, pTab, OP_OpenRead);
- sqlite3VdbeAddOp3(v, OP_IfSmaller, iTabCur,
- sqlite3VdbeCurrentAddr(v)+2+(opMask&1), szThreshold);
+
+ /* If table pTab has not been used in a way that would benefit from
+ ** having analysis statistics during the current session, then skip it,
+ ** unless the 0x10000 MASK bit is set. */
+ if( (pTab->tabFlags & TF_MaybeReanalyze)!=0 ){
+ /* Check for size change if stat1 has been used for a query */
+ }else if( opMask & 0x10000 ){
+ /* Check for size change if 0x10000 is set */
+ }else if( pTab->pIndex!=0 && szThreshold<0 ){
+ /* Do analysis if unanalyzed indexes exists */
+ }else{
+ /* Otherwise, we can skip this table */
+ continue;
+ }
+
+ nCheck++;
+ if( nCheck==2 ){
+ /* If ANALYZE might be invoked two or more times, hold a write
+ ** transaction for efficiency */
+ sqlite3BeginWriteOperation(pParse, 0, iDb);
+ }
+ nBtree += nIndex+1;
+
+ /* Reanalyze if the table is 10 times larger or smaller than
+ ** the last analysis. Unconditional reanalysis if there are
+ ** unanalyzed indexes. */
+ sqlite3OpenTable(pParse, iTabCur, iDb, pTab, OP_OpenRead);
+ if( szThreshold>=0 ){
+ const LogEst iRange = 33; /* 10x size change */
+ sqlite3VdbeAddOp4Int(v, OP_IfSizeBetween, iTabCur,
+ sqlite3VdbeCurrentAddr(v)+2+(opMask&1),
+ szThreshold>=iRange ? szThreshold-iRange : -1,
+ szThreshold+iRange);
+ VdbeCoverage(v);
+ }else{
+ sqlite3VdbeAddOp2(v, OP_Rewind, iTabCur,
+ sqlite3VdbeCurrentAddr(v)+2+(opMask&1));
VdbeCoverage(v);
}
zSubSql = sqlite3MPrintf(db, "ANALYZE \"%w\".\"%w\"",
@@ -140366,11 +141301,27 @@ SQLITE_PRIVATE void sqlite3Pragma(
sqlite3VdbeAddOp4(v, OP_String8, 0, r1, 0, zSubSql, P4_DYNAMIC);
sqlite3VdbeAddOp2(v, OP_ResultRow, r1, 1);
}else{
- sqlite3VdbeAddOp4(v, OP_SqlExec, 0, 0, 0, zSubSql, P4_DYNAMIC);
+ sqlite3VdbeAddOp4(v, OP_SqlExec, nLimit ? 0x02 : 00, nLimit, 0,
+ zSubSql, P4_DYNAMIC);
}
}
}
sqlite3VdbeAddOp0(v, OP_Expire);
+
+ /* In a schema with a large number of tables and indexes, scale back
+ ** the analysis_limit to avoid excess run-time in the worst case.
+ */
+ if( !db->mallocFailed && nLimit>0 && nBtree>100 ){
+ int iAddr, iEnd;
+ VdbeOp *aOp;
+ nLimit = 100*nLimit/nBtree;
+ if( nLimit<100 ) nLimit = 100;
+ aOp = sqlite3VdbeGetOp(v, 0);
+ iEnd = sqlite3VdbeCurrentAddr(v);
+ for(iAddr=0; iAddr<iEnd; iAddr++){
+ if( aOp[iAddr].opcode==OP_SqlExec ) aOp[iAddr].p2 = nLimit;
+ }
+ }
break;
}
@@ -140634,9 +141585,9 @@ static int pragmaVtabBestIndex(sqlite3_vtab *tab, sqlite3_index_info *pIdxInfo){
seen[0] = 0;
seen[1] = 0;
for(i=0; i<pIdxInfo->nConstraint; i++, pConstraint++){
- if( pConstraint->usable==0 ) continue;
- if( pConstraint->op!=SQLITE_INDEX_CONSTRAINT_EQ ) continue;
if( pConstraint->iColumn < pTab->iHidden ) continue;
+ if( pConstraint->op!=SQLITE_INDEX_CONSTRAINT_EQ ) continue;
+ if( pConstraint->usable==0 ) return SQLITE_CONSTRAINT;
j = pConstraint->iColumn - pTab->iHidden;
assert( j < 2 );
seen[j] = i+1;
@@ -140649,16 +141600,13 @@ static int pragmaVtabBestIndex(sqlite3_vtab *tab, sqlite3_index_info *pIdxInfo){
j = seen[0]-1;
pIdxInfo->aConstraintUsage[j].argvIndex = 1;
pIdxInfo->aConstraintUsage[j].omit = 1;
- if( seen[1]==0 ){
- pIdxInfo->estimatedCost = (double)1000;
- pIdxInfo->estimatedRows = 1000;
- return SQLITE_OK;
- }
pIdxInfo->estimatedCost = (double)20;
pIdxInfo->estimatedRows = 20;
- j = seen[1]-1;
- pIdxInfo->aConstraintUsage[j].argvIndex = 2;
- pIdxInfo->aConstraintUsage[j].omit = 1;
+ if( seen[1] ){
+ j = seen[1]-1;
+ pIdxInfo->aConstraintUsage[j].argvIndex = 2;
+ pIdxInfo->aConstraintUsage[j].omit = 1;
+ }
return SQLITE_OK;
}
@@ -140678,6 +141626,7 @@ static void pragmaVtabCursorClear(PragmaVtabCursor *pCsr){
int i;
sqlite3_finalize(pCsr->pPragma);
pCsr->pPragma = 0;
+ pCsr->iRowid = 0;
for(i=0; i<ArraySize(pCsr->azArg); i++){
sqlite3_free(pCsr->azArg[i]);
pCsr->azArg[i] = 0;
@@ -141478,7 +142427,13 @@ SQLITE_PRIVATE void *sqlite3ParserAddCleanup(
void (*xCleanup)(sqlite3*,void*), /* The cleanup routine */
void *pPtr /* Pointer to object to be cleaned up */
){
- ParseCleanup *pCleanup = sqlite3DbMallocRaw(pParse->db, sizeof(*pCleanup));
+ ParseCleanup *pCleanup;
+ if( sqlite3FaultSim(300) ){
+ pCleanup = 0;
+ sqlite3OomFault(pParse->db);
+ }else{
+ pCleanup = sqlite3DbMallocRaw(pParse->db, sizeof(*pCleanup));
+ }
if( pCleanup ){
pCleanup->pNext = pParse->pCleanup;
pParse->pCleanup = pCleanup;
@@ -143600,9 +144555,16 @@ static void generateSortTail(
int addrExplain; /* Address of OP_Explain instruction */
#endif
- ExplainQueryPlan2(addrExplain, (pParse, 0,
- "USE TEMP B-TREE FOR %sORDER BY", pSort->nOBSat>0?"RIGHT PART OF ":"")
- );
+ nKey = pOrderBy->nExpr - pSort->nOBSat;
+ if( pSort->nOBSat==0 || nKey==1 ){
+ ExplainQueryPlan2(addrExplain, (pParse, 0,
+ "USE TEMP B-TREE FOR %sORDER BY", pSort->nOBSat?"LAST TERM OF ":""
+ ));
+ }else{
+ ExplainQueryPlan2(addrExplain, (pParse, 0,
+ "USE TEMP B-TREE FOR LAST %d TERMS OF ORDER BY", nKey
+ ));
+ }
sqlite3VdbeScanStatusRange(v, addrExplain,pSort->addrPush,pSort->addrPushEnd);
sqlite3VdbeScanStatusCounters(v, addrExplain, addrExplain, pSort->addrPush);
@@ -143640,7 +144602,6 @@ static void generateSortTail(
regRow = sqlite3GetTempRange(pParse, nColumn);
}
}
- nKey = pOrderBy->nExpr - pSort->nOBSat;
if( pSort->sortFlags & SORTFLAG_UseSorter ){
int regSortOut = ++pParse->nMem;
iSortTab = pParse->nTab++;
@@ -144245,8 +145206,7 @@ SQLITE_PRIVATE void sqlite3SubqueryColumnTypes(
NameContext sNC;
assert( pSelect!=0 );
- testcase( (pSelect->selFlags & SF_Resolved)==0 );
- assert( (pSelect->selFlags & SF_Resolved)!=0 || IN_RENAME_OBJECT );
+ assert( (pSelect->selFlags & SF_Resolved)!=0 );
assert( pTab->nCol==pSelect->pEList->nExpr || pParse->nErr>0 );
assert( aff==SQLITE_AFF_NONE || aff==SQLITE_AFF_BLOB );
if( db->mallocFailed || IN_RENAME_OBJECT ) return;
@@ -144257,17 +145217,22 @@ SQLITE_PRIVATE void sqlite3SubqueryColumnTypes(
for(i=0, pCol=pTab->aCol; i<pTab->nCol; i++, pCol++){
const char *zType;
i64 n;
+ int m = 0;
+ Select *pS2 = pSelect;
pTab->tabFlags |= (pCol->colFlags & COLFLAG_NOINSERT);
p = a[i].pExpr;
/* pCol->szEst = ... // Column size est for SELECT tables never used */
pCol->affinity = sqlite3ExprAffinity(p);
+ while( pCol->affinity<=SQLITE_AFF_NONE && pS2->pNext!=0 ){
+ m |= sqlite3ExprDataType(pS2->pEList->a[i].pExpr);
+ pS2 = pS2->pNext;
+ pCol->affinity = sqlite3ExprAffinity(pS2->pEList->a[i].pExpr);
+ }
if( pCol->affinity<=SQLITE_AFF_NONE ){
pCol->affinity = aff;
}
- if( pCol->affinity>=SQLITE_AFF_TEXT && pSelect->pNext ){
- int m = 0;
- Select *pS2;
- for(m=0, pS2=pSelect->pNext; pS2; pS2=pS2->pNext){
+ if( pCol->affinity>=SQLITE_AFF_TEXT && (pS2->pNext || pS2!=pSelect) ){
+ for(pS2=pS2->pNext; pS2; pS2=pS2->pNext){
m |= sqlite3ExprDataType(pS2->pEList->a[i].pExpr);
}
if( pCol->affinity==SQLITE_AFF_TEXT && (m&0x01)!=0 ){
@@ -144297,12 +145262,12 @@ SQLITE_PRIVATE void sqlite3SubqueryColumnTypes(
}
}
if( zType ){
- i64 m = sqlite3Strlen30(zType);
+ const i64 k = sqlite3Strlen30(zType);
n = sqlite3Strlen30(pCol->zCnName);
- pCol->zCnName = sqlite3DbReallocOrFree(db, pCol->zCnName, n+m+2);
+ pCol->zCnName = sqlite3DbReallocOrFree(db, pCol->zCnName, n+k+2);
pCol->colFlags &= ~(COLFLAG_HASTYPE|COLFLAG_HASCOLL);
if( pCol->zCnName ){
- memcpy(&pCol->zCnName[n+1], zType, m+1);
+ memcpy(&pCol->zCnName[n+1], zType, k+1);
pCol->colFlags |= COLFLAG_HASTYPE;
}
}
@@ -146699,7 +147664,7 @@ static void constInsert(
){
int i;
assert( pColumn->op==TK_COLUMN );
- assert( sqlite3ExprIsConstant(pValue) );
+ assert( sqlite3ExprIsConstant(pConst->pParse, pValue) );
if( ExprHasProperty(pColumn, EP_FixedCol) ) return;
if( sqlite3ExprAffinity(pValue)!=0 ) return;
@@ -146757,10 +147722,10 @@ static void findConstInWhere(WhereConst *pConst, Expr *pExpr){
pLeft = pExpr->pLeft;
assert( pRight!=0 );
assert( pLeft!=0 );
- if( pRight->op==TK_COLUMN && sqlite3ExprIsConstant(pLeft) ){
+ if( pRight->op==TK_COLUMN && sqlite3ExprIsConstant(pConst->pParse, pLeft) ){
constInsert(pConst,pRight,pLeft,pExpr);
}
- if( pLeft->op==TK_COLUMN && sqlite3ExprIsConstant(pRight) ){
+ if( pLeft->op==TK_COLUMN && sqlite3ExprIsConstant(pConst->pParse, pRight) ){
constInsert(pConst,pLeft,pRight,pExpr);
}
}
@@ -146981,6 +147946,18 @@ static int pushDownWindowCheck(Parse *pParse, Select *pSubq, Expr *pExpr){
** The hope is that the terms added to the inner query will make it more
** efficient.
**
+** NAME AMBIGUITY
+**
+** This optimization is called the "WHERE-clause push-down optimization".
+**
+** Do not confuse this optimization with another unrelated optimization
+** with a similar name: The "MySQL push-down optimization" causes WHERE
+** clause terms that can be evaluated using only the index and without
+** reference to the table are run first, so that if they are false,
+** unnecessary table seeks are avoided.
+**
+** RULES
+**
** Do not attempt this optimization if:
**
** (1) (** This restriction was removed on 2017-09-29. We used to
@@ -147046,10 +148023,10 @@ static int pushDownWindowCheck(Parse *pParse, Select *pSubq, Expr *pExpr){
** (9c) There is a RIGHT JOIN (or FULL JOIN) in between the ON/USING
** clause and the subquery.
**
-** Without this restriction, the push-down optimization might move
-** the ON/USING filter expression from the left side of a RIGHT JOIN
-** over to the right side, which leads to incorrect answers. See
-** also restriction (6) in sqlite3ExprIsSingleTableConstraint().
+** Without this restriction, the WHERE-clause push-down optimization
+** might move the ON/USING filter expression from the left side of a
+** RIGHT JOIN over to the right side, which leads to incorrect answers.
+** See also restriction (6) in sqlite3ExprIsSingleTableConstraint().
**
** (10) The inner query is not the right-hand table of a RIGHT JOIN.
**
@@ -147181,7 +148158,7 @@ static int pushDownWhereTerms(
}
#endif
- if( sqlite3ExprIsSingleTableConstraint(pWhere, pSrcList, iSrc) ){
+ if( sqlite3ExprIsSingleTableConstraint(pWhere, pSrcList, iSrc, 1) ){
nChng++;
pSubq->selFlags |= SF_PushDown;
while( pSubq ){
@@ -148316,8 +149293,7 @@ static void selectAddSubqueryTypeInfo(Walker *pWalker, Select *p){
if( p->selFlags & SF_HasTypeInfo ) return;
p->selFlags |= SF_HasTypeInfo;
pParse = pWalker->pParse;
- testcase( (p->selFlags & SF_Resolved)==0 );
- assert( (p->selFlags & SF_Resolved) || IN_RENAME_OBJECT );
+ assert( (p->selFlags & SF_Resolved) );
pTabList = p->pSrc;
for(i=0, pFrom=pTabList->a; i<pTabList->nSrc; i++, pFrom++){
Table *pTab = pFrom->pTab;
@@ -148387,6 +149363,8 @@ SQLITE_PRIVATE void sqlite3SelectPrep(
*/
static void printAggInfo(AggInfo *pAggInfo){
int ii;
+ sqlite3DebugPrintf("AggInfo %d/%p:\n",
+ pAggInfo->selId, pAggInfo);
for(ii=0; ii<pAggInfo->nColumn; ii++){
struct AggInfo_col *pCol = &pAggInfo->aCol[ii];
sqlite3DebugPrintf(
@@ -149577,7 +150555,7 @@ SQLITE_PRIVATE int sqlite3Select(
/* Generate code for all sub-queries in the FROM clause
*/
pSub = pItem->pSelect;
- if( pSub==0 ) continue;
+ if( pSub==0 || pItem->addrFillSub!=0 ) continue;
/* The code for a subquery should only be generated once. */
assert( pItem->addrFillSub==0 );
@@ -149608,7 +150586,7 @@ SQLITE_PRIVATE int sqlite3Select(
#endif
assert( pItem->pSelect && (pItem->pSelect->selFlags & SF_PushDown)!=0 );
}else{
- TREETRACE(0x4000,pParse,p,("Push-down not possible\n"));
+ TREETRACE(0x4000,pParse,p,("WHERE-lcause push-down not possible\n"));
}
/* Convert unused result columns of the subquery into simple NULL
@@ -150489,6 +151467,12 @@ select_end:
sqlite3ExprListDelete(db, pMinMaxOrderBy);
#ifdef SQLITE_DEBUG
if( pAggInfo && !db->mallocFailed ){
+#if TREETRACE_ENABLED
+ if( sqlite3TreeTrace & 0x20 ){
+ TREETRACE(0x20,pParse,p,("Finished with AggInfo\n"));
+ printAggInfo(pAggInfo);
+ }
+#endif
for(i=0; i<pAggInfo->nColumn; i++){
Expr *pExpr = pAggInfo->aCol[i].pCExpr;
if( pExpr==0 ) continue;
@@ -151670,6 +152654,72 @@ static ExprList *sqlite3ExpandReturning(
return pNew;
}
+/* If the Expr node is a subquery or an EXISTS operator or an IN operator that
+** uses a subquery, and if the subquery is SF_Correlated, then mark the
+** expression as EP_VarSelect.
+*/
+static int sqlite3ReturningSubqueryVarSelect(Walker *NotUsed, Expr *pExpr){
+ UNUSED_PARAMETER(NotUsed);
+ if( ExprUseXSelect(pExpr)
+ && (pExpr->x.pSelect->selFlags & SF_Correlated)!=0
+ ){
+ testcase( ExprHasProperty(pExpr, EP_VarSelect) );
+ ExprSetProperty(pExpr, EP_VarSelect);
+ }
+ return WRC_Continue;
+}
+
+
+/*
+** If the SELECT references the table pWalker->u.pTab, then do two things:
+**
+** (1) Mark the SELECT as as SF_Correlated.
+** (2) Set pWalker->eCode to non-zero so that the caller will know
+** that (1) has happened.
+*/
+static int sqlite3ReturningSubqueryCorrelated(Walker *pWalker, Select *pSelect){
+ int i;
+ SrcList *pSrc;
+ assert( pSelect!=0 );
+ pSrc = pSelect->pSrc;
+ assert( pSrc!=0 );
+ for(i=0; i<pSrc->nSrc; i++){
+ if( pSrc->a[i].pTab==pWalker->u.pTab ){
+ testcase( pSelect->selFlags & SF_Correlated );
+ pSelect->selFlags |= SF_Correlated;
+ pWalker->eCode = 1;
+ break;
+ }
+ }
+ return WRC_Continue;
+}
+
+/*
+** Scan the expression list that is the argument to RETURNING looking
+** for subqueries that depend on the table which is being modified in the
+** statement that is hosting the RETURNING clause (pTab). Mark all such
+** subqueries as SF_Correlated. If the subqueries are part of an
+** expression, mark the expression as EP_VarSelect.
+**
+** https://sqlite.org/forum/forumpost/2c83569ce8945d39
+*/
+static void sqlite3ProcessReturningSubqueries(
+ ExprList *pEList,
+ Table *pTab
+){
+ Walker w;
+ memset(&w, 0, sizeof(w));
+ w.xExprCallback = sqlite3ExprWalkNoop;
+ w.xSelectCallback = sqlite3ReturningSubqueryCorrelated;
+ w.u.pTab = pTab;
+ sqlite3WalkExprList(&w, pEList);
+ if( w.eCode ){
+ w.xExprCallback = sqlite3ReturningSubqueryVarSelect;
+ w.xSelectCallback = sqlite3SelectWalkNoop;
+ sqlite3WalkExprList(&w, pEList);
+ }
+}
+
/*
** Generate code for the RETURNING trigger. Unlike other triggers
** that invoke a subprogram in the bytecode, the code for RETURNING
@@ -151706,6 +152756,7 @@ static void codeReturningTrigger(
sSelect.pSrc = &sFrom;
sFrom.nSrc = 1;
sFrom.a[0].pTab = pTab;
+ sFrom.a[0].zName = pTab->zName; /* tag-20240424-1 */
sFrom.a[0].iCursor = -1;
sqlite3SelectPrep(pParse, &sSelect, 0);
if( pParse->nErr==0 ){
@@ -151732,6 +152783,7 @@ static void codeReturningTrigger(
int i;
int nCol = pNew->nExpr;
int reg = pParse->nMem+1;
+ sqlite3ProcessReturningSubqueries(pNew, pTab);
pParse->nMem += nCol+2;
pReturning->iRetReg = reg;
for(i=0; i<nCol; i++){
@@ -154942,6 +155994,8 @@ static int vtabCallConstructor(
db->pVtabCtx = &sCtx;
pTab->nTabRef++;
rc = xConstruct(db, pMod->pAux, nArg, azArg, &pVTable->pVtab, &zErr);
+ assert( pTab!=0 );
+ assert( pTab->nTabRef>1 || rc!=SQLITE_OK );
sqlite3DeleteTable(db, pTab);
db->pVtabCtx = sCtx.pPrior;
if( rc==SQLITE_NOMEM ) sqlite3OomFault(db);
@@ -154964,7 +156018,7 @@ static int vtabCallConstructor(
pVTable->nRef = 1;
if( sCtx.bDeclared==0 ){
const char *zFormat = "vtable constructor did not declare schema: %s";
- *pzErr = sqlite3MPrintf(db, zFormat, pTab->zName);
+ *pzErr = sqlite3MPrintf(db, zFormat, zModuleName);
sqlite3VtabUnlock(pVTable);
rc = SQLITE_ERROR;
}else{
@@ -155142,12 +156196,30 @@ SQLITE_API int sqlite3_declare_vtab(sqlite3 *db, const char *zCreateTable){
Table *pTab;
Parse sParse;
int initBusy;
+ int i;
+ const unsigned char *z;
+ static const u8 aKeyword[] = { TK_CREATE, TK_TABLE, 0 };
#ifdef SQLITE_ENABLE_API_ARMOR
if( !sqlite3SafetyCheckOk(db) || zCreateTable==0 ){
return SQLITE_MISUSE_BKPT;
}
#endif
+
+ /* Verify that the first two keywords in the CREATE TABLE statement
+ ** really are "CREATE" and "TABLE". If this is not the case, then
+ ** sqlite3_declare_vtab() is being misused.
+ */
+ z = (const unsigned char*)zCreateTable;
+ for(i=0; aKeyword[i]; i++){
+ int tokenType = 0;
+ do{ z += sqlite3GetToken(z, &tokenType); }while( tokenType==TK_SPACE );
+ if( tokenType!=aKeyword[i] ){
+ sqlite3ErrorWithMsg(db, SQLITE_ERROR, "syntax error");
+ return SQLITE_ERROR;
+ }
+ }
+
sqlite3_mutex_enter(db->mutex);
pCtx = db->pVtabCtx;
if( !pCtx || pCtx->bDeclared ){
@@ -155155,6 +156227,7 @@ SQLITE_API int sqlite3_declare_vtab(sqlite3 *db, const char *zCreateTable){
sqlite3_mutex_leave(db->mutex);
return SQLITE_MISUSE_BKPT;
}
+
pTab = pCtx->pTab;
assert( IsVirtual(pTab) );
@@ -155168,11 +156241,10 @@ SQLITE_API int sqlite3_declare_vtab(sqlite3 *db, const char *zCreateTable){
initBusy = db->init.busy;
db->init.busy = 0;
sParse.nQueryLoop = 1;
- if( SQLITE_OK==sqlite3RunParser(&sParse, zCreateTable)
- && ALWAYS(sParse.pNewTable!=0)
- && ALWAYS(!db->mallocFailed)
- && IsOrdinaryTable(sParse.pNewTable)
- ){
+ if( SQLITE_OK==sqlite3RunParser(&sParse, zCreateTable) ){
+ assert( sParse.pNewTable!=0 );
+ assert( !db->mallocFailed );
+ assert( IsOrdinaryTable(sParse.pNewTable) );
assert( sParse.zErrMsg==0 );
if( !pTab->aCol ){
Table *pNew = sParse.pNewTable;
@@ -157668,6 +158740,27 @@ static SQLITE_NOINLINE void filterPullDown(
}
/*
+** Loop pLoop is a WHERE_INDEXED level that uses at least one IN(...)
+** operator. Return true if level pLoop is guaranteed to visit only one
+** row for each key generated for the index.
+*/
+static int whereLoopIsOneRow(WhereLoop *pLoop){
+ if( pLoop->u.btree.pIndex->onError
+ && pLoop->nSkip==0
+ && pLoop->u.btree.nEq==pLoop->u.btree.pIndex->nKeyCol
+ ){
+ int ii;
+ for(ii=0; ii<pLoop->u.btree.nEq; ii++){
+ if( pLoop->aLTerm[ii]->eOperator & (WO_IS|WO_ISNULL) ){
+ return 0;
+ }
+ }
+ return 1;
+ }
+ return 0;
+}
+
+/*
** Generate code for the start of the iLevel-th loop in the WHERE clause
** implementation described by pWInfo.
*/
@@ -157745,7 +158838,7 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart(
if( pLevel->iFrom>0 && (pTabItem[0].fg.jointype & JT_LEFT)!=0 ){
pLevel->iLeftJoin = ++pParse->nMem;
sqlite3VdbeAddOp2(v, OP_Integer, 0, pLevel->iLeftJoin);
- VdbeComment((v, "init LEFT JOIN no-match flag"));
+ VdbeComment((v, "init LEFT JOIN match flag"));
}
/* Compute a safe address to jump to if we discover that the table for
@@ -158414,7 +159507,9 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart(
}
/* Record the instruction used to terminate the loop. */
- if( pLoop->wsFlags & WHERE_ONEROW ){
+ if( (pLoop->wsFlags & WHERE_ONEROW)
+ || (pLevel->u.in.nIn && regBignull==0 && whereLoopIsOneRow(pLoop))
+ ){
pLevel->op = OP_Noop;
}else if( bRev ){
pLevel->op = OP_Prev;
@@ -158804,6 +159899,12 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart(
** iLoop==3: Code all remaining expressions.
**
** An effort is made to skip unnecessary iterations of the loop.
+ **
+ ** This optimization of causing simple query restrictions to occur before
+ ** more complex one is call the "push-down" optimization in MySQL. Here
+ ** in SQLite, the name is "MySQL push-down", since there is also another
+ ** totally unrelated optimization called "WHERE-clause push-down".
+ ** Sometimes the qualifier is omitted, resulting in an ambiguity, so beware.
*/
iLoop = (pIdx ? 1 : 2);
do{
@@ -159054,7 +160155,16 @@ SQLITE_PRIVATE SQLITE_NOINLINE void sqlite3WhereRightJoinLoop(
pRJ->regReturn);
for(k=0; k<iLevel; k++){
int iIdxCur;
+ SrcItem *pRight;
+ assert( pWInfo->a[k].pWLoop->iTab == pWInfo->a[k].iFrom );
+ pRight = &pWInfo->pTabList->a[pWInfo->a[k].iFrom];
mAll |= pWInfo->a[k].pWLoop->maskSelf;
+ if( pRight->fg.viaCoroutine ){
+ sqlite3VdbeAddOp3(
+ v, OP_Null, 0, pRight->regResult,
+ pRight->regResult + pRight->pSelect->pEList->nExpr-1
+ );
+ }
sqlite3VdbeAddOp1(v, OP_NullRow, pWInfo->a[k].iTabCur);
iIdxCur = pWInfo->a[k].iIdxCur;
if( iIdxCur ){
@@ -160111,7 +161221,7 @@ static SQLITE_NOINLINE int exprMightBeIndexed2(
if( pIdx->aiColumn[i]!=XN_EXPR ) continue;
assert( pIdx->bHasExpr );
if( sqlite3ExprCompareSkip(pExpr,pIdx->aColExpr->a[i].pExpr,iCur)==0
- && pExpr->op!=TK_STRING
+ && !sqlite3ExprIsConstant(0,pIdx->aColExpr->a[i].pExpr)
){
aiCurCol[0] = iCur;
aiCurCol[1] = XN_EXPR;
@@ -160760,6 +161870,7 @@ SQLITE_PRIVATE void SQLITE_NOINLINE sqlite3WhereAddLimit(WhereClause *pWC, Selec
continue;
}
if( pWC->a[ii].leftCursor!=iCsr ) return;
+ if( pWC->a[ii].prereqRight!=0 ) return;
}
/* Check condition (5). Return early if it is not met. */
@@ -160774,12 +161885,14 @@ SQLITE_PRIVATE void SQLITE_NOINLINE sqlite3WhereAddLimit(WhereClause *pWC, Selec
/* All conditions are met. Add the terms to the where-clause object. */
assert( p->pLimit->op==TK_LIMIT );
- whereAddLimitExpr(pWC, p->iLimit, p->pLimit->pLeft,
- iCsr, SQLITE_INDEX_CONSTRAINT_LIMIT);
- if( p->iOffset>0 ){
+ if( p->iOffset!=0 && (p->selFlags & SF_Compound)==0 ){
whereAddLimitExpr(pWC, p->iOffset, p->pLimit->pRight,
iCsr, SQLITE_INDEX_CONSTRAINT_OFFSET);
}
+ if( p->iOffset==0 || (p->selFlags & SF_Compound)==0 ){
+ whereAddLimitExpr(pWC, p->iLimit, p->pLimit->pLeft,
+ iCsr, SQLITE_INDEX_CONSTRAINT_LIMIT);
+ }
}
}
@@ -161298,6 +162411,42 @@ static Expr *whereRightSubexprIsColumn(Expr *p){
}
/*
+** Term pTerm is guaranteed to be a WO_IN term. It may be a component term
+** of a vector IN expression of the form "(x, y, ...) IN (SELECT ...)".
+** This function checks to see if the term is compatible with an index
+** column with affinity idxaff (one of the SQLITE_AFF_XYZ values). If so,
+** it returns a pointer to the name of the collation sequence (e.g. "BINARY"
+** or "NOCASE") used by the comparison in pTerm. If it is not compatible
+** with affinity idxaff, NULL is returned.
+*/
+static SQLITE_NOINLINE const char *indexInAffinityOk(
+ Parse *pParse,
+ WhereTerm *pTerm,
+ u8 idxaff
+){
+ Expr *pX = pTerm->pExpr;
+ Expr inexpr;
+
+ assert( pTerm->eOperator & WO_IN );
+
+ if( sqlite3ExprIsVector(pX->pLeft) ){
+ int iField = pTerm->u.x.iField - 1;
+ inexpr.flags = 0;
+ inexpr.op = TK_EQ;
+ inexpr.pLeft = pX->pLeft->x.pList->a[iField].pExpr;
+ assert( ExprUseXSelect(pX) );
+ inexpr.pRight = pX->x.pSelect->pEList->a[iField].pExpr;
+ pX = &inexpr;
+ }
+
+ if( sqlite3IndexAffinityOk(pX, idxaff) ){
+ CollSeq *pRet = sqlite3ExprCompareCollSeq(pParse, pX);
+ return pRet ? pRet->zName : sqlite3StrBINARY;
+ }
+ return 0;
+}
+
+/*
** Advance to the next WhereTerm that matches according to the criteria
** established when the pScan object was initialized by whereScanInit().
** Return NULL if there are no more matching WhereTerms.
@@ -161347,16 +162496,24 @@ static WhereTerm *whereScanNext(WhereScan *pScan){
if( (pTerm->eOperator & pScan->opMask)!=0 ){
/* Verify the affinity and collating sequence match */
if( pScan->zCollName && (pTerm->eOperator & WO_ISNULL)==0 ){
- CollSeq *pColl;
+ const char *zCollName;
Parse *pParse = pWC->pWInfo->pParse;
pX = pTerm->pExpr;
- if( !sqlite3IndexAffinityOk(pX, pScan->idxaff) ){
- continue;
+
+ if( (pTerm->eOperator & WO_IN) ){
+ zCollName = indexInAffinityOk(pParse, pTerm, pScan->idxaff);
+ if( !zCollName ) continue;
+ }else{
+ CollSeq *pColl;
+ if( !sqlite3IndexAffinityOk(pX, pScan->idxaff) ){
+ continue;
+ }
+ assert(pX->pLeft);
+ pColl = sqlite3ExprCompareCollSeq(pParse, pX);
+ zCollName = pColl ? pColl->zName : sqlite3StrBINARY;
}
- assert(pX->pLeft);
- pColl = sqlite3ExprCompareCollSeq(pParse, pX);
- if( pColl==0 ) pColl = pParse->db->pDfltColl;
- if( sqlite3StrICmp(pColl->zName, pScan->zCollName) ){
+
+ if( sqlite3StrICmp(zCollName, pScan->zCollName) ){
continue;
}
}
@@ -161708,9 +162865,13 @@ static void translateColumnToCopy(
** are no-ops.
*/
#if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(WHERETRACE_ENABLED)
-static void whereTraceIndexInfoInputs(sqlite3_index_info *p){
+static void whereTraceIndexInfoInputs(
+ sqlite3_index_info *p, /* The IndexInfo object */
+ Table *pTab /* The TABLE that is the virtual table */
+){
int i;
if( (sqlite3WhereTrace & 0x10)==0 ) return;
+ sqlite3DebugPrintf("sqlite3_index_info inputs for %s:\n", pTab->zName);
for(i=0; i<p->nConstraint; i++){
sqlite3DebugPrintf(
" constraint[%d]: col=%d termid=%d op=%d usabled=%d collseq=%s\n",
@@ -161728,9 +162889,13 @@ static void whereTraceIndexInfoInputs(sqlite3_index_info *p){
p->aOrderBy[i].desc);
}
}
-static void whereTraceIndexInfoOutputs(sqlite3_index_info *p){
+static void whereTraceIndexInfoOutputs(
+ sqlite3_index_info *p, /* The IndexInfo object */
+ Table *pTab /* The TABLE that is the virtual table */
+){
int i;
if( (sqlite3WhereTrace & 0x10)==0 ) return;
+ sqlite3DebugPrintf("sqlite3_index_info outputs for %s:\n", pTab->zName);
for(i=0; i<p->nConstraint; i++){
sqlite3DebugPrintf(" usage[%d]: argvIdx=%d omit=%d\n",
i,
@@ -161744,8 +162909,8 @@ static void whereTraceIndexInfoOutputs(sqlite3_index_info *p){
sqlite3DebugPrintf(" estimatedRows=%lld\n", p->estimatedRows);
}
#else
-#define whereTraceIndexInfoInputs(A)
-#define whereTraceIndexInfoOutputs(A)
+#define whereTraceIndexInfoInputs(A,B)
+#define whereTraceIndexInfoOutputs(A,B)
#endif
/*
@@ -161929,7 +163094,7 @@ static SQLITE_NOINLINE void constructAutomaticIndex(
** WHERE clause (or the ON clause of a LEFT join) that constrain which
** rows of the target table (pSrc) that can be used. */
if( (pTerm->wtFlags & TERM_VIRTUAL)==0
- && sqlite3ExprIsSingleTableConstraint(pExpr, pTabList, pLevel->iFrom)
+ && sqlite3ExprIsSingleTableConstraint(pExpr, pTabList, pLevel->iFrom, 0)
){
pPartial = sqlite3ExprAnd(pParse, pPartial,
sqlite3ExprDup(pParse->db, pExpr, 0));
@@ -161971,7 +163136,7 @@ static SQLITE_NOINLINE void constructAutomaticIndex(
** if they go out of sync.
*/
if( IsView(pTable) ){
- extraCols = ALLBITS;
+ extraCols = ALLBITS & ~idxCols;
}else{
extraCols = pSrc->colUsed & (~idxCols | MASKBIT(BMS-1));
}
@@ -162198,7 +163363,7 @@ static SQLITE_NOINLINE void sqlite3ConstructBloomFilter(
for(pTerm=pWInfo->sWC.a; pTerm<pWCEnd; pTerm++){
Expr *pExpr = pTerm->pExpr;
if( (pTerm->wtFlags & TERM_VIRTUAL)==0
- && sqlite3ExprIsSingleTableConstraint(pExpr, pTabList, iSrc)
+ && sqlite3ExprIsSingleTableConstraint(pExpr, pTabList, iSrc, 0)
){
sqlite3ExprIfFalse(pParse, pTerm->pExpr, addrCont, SQLITE_JUMPIFNULL);
}
@@ -162324,7 +163489,7 @@ static sqlite3_index_info *allocateIndexInfo(
Expr *pE2;
/* Skip over constant terms in the ORDER BY clause */
- if( sqlite3ExprIsConstant(pExpr) ){
+ if( sqlite3ExprIsConstant(0, pExpr) ){
continue;
}
@@ -162359,7 +163524,7 @@ static sqlite3_index_info *allocateIndexInfo(
}
if( i==n ){
nOrderBy = n;
- if( (pWInfo->wctrlFlags & WHERE_DISTINCTBY) ){
+ if( (pWInfo->wctrlFlags & WHERE_DISTINCTBY) && !pSrc->fg.rowidUsed ){
eDistinct = 2 + ((pWInfo->wctrlFlags & WHERE_SORTBYGROUP)!=0);
}else if( pWInfo->wctrlFlags & WHERE_GROUPBY ){
eDistinct = 1;
@@ -162436,7 +163601,7 @@ static sqlite3_index_info *allocateIndexInfo(
pIdxInfo->nConstraint = j;
for(i=j=0; i<nOrderBy; i++){
Expr *pExpr = pOrderBy->a[i].pExpr;
- if( sqlite3ExprIsConstant(pExpr) ) continue;
+ if( sqlite3ExprIsConstant(0, pExpr) ) continue;
assert( pExpr->op==TK_COLUMN
|| (pExpr->op==TK_COLLATE && pExpr->pLeft->op==TK_COLUMN
&& pExpr->iColumn==pExpr->pLeft->iColumn) );
@@ -162488,11 +163653,11 @@ static int vtabBestIndex(Parse *pParse, Table *pTab, sqlite3_index_info *p){
sqlite3_vtab *pVtab = sqlite3GetVTable(pParse->db, pTab)->pVtab;
int rc;
- whereTraceIndexInfoInputs(p);
+ whereTraceIndexInfoInputs(p, pTab);
pParse->db->nSchemaLock++;
rc = pVtab->pModule->xBestIndex(pVtab, p);
pParse->db->nSchemaLock--;
- whereTraceIndexInfoOutputs(p);
+ whereTraceIndexInfoOutputs(p, pTab);
if( rc!=SQLITE_OK && rc!=SQLITE_CONSTRAINT ){
if( rc==SQLITE_NOMEM ){
@@ -163970,7 +165135,9 @@ static int whereLoopAddBtreeIndex(
}
if( pProbe->bUnordered || pProbe->bLowQual ){
if( pProbe->bUnordered ) opMask &= ~(WO_GT|WO_GE|WO_LT|WO_LE);
- if( pProbe->bLowQual ) opMask &= ~(WO_EQ|WO_IN|WO_IS);
+ if( pProbe->bLowQual && pSrc->fg.isIndexedBy==0 ){
+ opMask &= ~(WO_EQ|WO_IN|WO_IS);
+ }
}
assert( pNew->u.btree.nEq<pProbe->nColumn );
@@ -164237,10 +165404,13 @@ static int whereLoopAddBtreeIndex(
}
}
- /* Set rCostIdx to the cost of visiting selected rows in index. Add
- ** it to pNew->rRun, which is currently set to the cost of the index
- ** seek only. Then, if this is a non-covering index, add the cost of
- ** visiting the rows in the main table. */
+ /* Set rCostIdx to the estimated cost of visiting selected rows in the
+ ** index. The estimate is the sum of two values:
+ ** 1. The cost of doing one search-by-key to find the first matching
+ ** entry
+ ** 2. Stepping forward in the index pNew->nOut times to find all
+ ** additional matching entries.
+ */
assert( pSrc->pTab->szTabRow>0 );
if( pProbe->idxType==SQLITE_IDXTYPE_IPK ){
/* The pProbe->szIdxRow is low for an IPK table since the interior
@@ -164251,7 +165421,15 @@ static int whereLoopAddBtreeIndex(
}else{
rCostIdx = pNew->nOut + 1 + (15*pProbe->szIdxRow)/pSrc->pTab->szTabRow;
}
- pNew->rRun = sqlite3LogEstAdd(rLogSize, rCostIdx);
+ rCostIdx = sqlite3LogEstAdd(rLogSize, rCostIdx);
+
+ /* Estimate the cost of running the loop. If all data is coming
+ ** from the index, then this is just the cost of doing the index
+ ** lookup and scan. But if some data is coming out of the main table,
+ ** we also have to add in the cost of doing pNew->nOut searches to
+ ** locate the row in the main table that corresponds to the index entry.
+ */
+ pNew->rRun = rCostIdx;
if( (pNew->wsFlags & (WHERE_IDX_ONLY|WHERE_IPK|WHERE_EXPRIDX))==0 ){
pNew->rRun = sqlite3LogEstAdd(pNew->rRun, pNew->nOut + 16);
}
@@ -164357,7 +165535,9 @@ static int indexMightHelpWithOrderBy(
for(ii=0; ii<pOB->nExpr; ii++){
Expr *pExpr = sqlite3ExprSkipCollateAndLikely(pOB->a[ii].pExpr);
if( NEVER(pExpr==0) ) continue;
- if( pExpr->op==TK_COLUMN && pExpr->iTable==iCursor ){
+ if( (pExpr->op==TK_COLUMN || pExpr->op==TK_AGG_COLUMN)
+ && pExpr->iTable==iCursor
+ ){
if( pExpr->iColumn<0 ) return 1;
for(jj=0; jj<pIndex->nKeyCol; jj++){
if( pExpr->iColumn==pIndex->aiColumn[jj] ) return 1;
@@ -164614,7 +165794,7 @@ static void wherePartIdxExpr(
u8 aff;
if( pLeft->op!=TK_COLUMN ) return;
- if( !sqlite3ExprIsConstant(pRight) ) return;
+ if( !sqlite3ExprIsConstant(0, pRight) ) return;
if( !sqlite3IsBinary(sqlite3ExprCompareCollSeq(pParse, pPart)) ) return;
if( pLeft->iColumn<0 ) return;
aff = pIdx->pTable->aCol[pLeft->iColumn].affinity;
@@ -164963,7 +166143,7 @@ static int whereLoopAddBtree(
** unique index is used (making the index functionally non-unique)
** then the sqlite_stat1 data becomes important for scoring the
** plan */
- pTab->tabFlags |= TF_StatsUsed;
+ pTab->tabFlags |= TF_MaybeReanalyze;
}
#ifdef SQLITE_ENABLE_STAT4
sqlite3Stat4ProbeFree(pBuilder->pRec);
@@ -164986,6 +166166,21 @@ static int isLimitTerm(WhereTerm *pTerm){
}
/*
+** Return true if the first nCons constraints in the pUsage array are
+** marked as in-use (have argvIndex>0). False otherwise.
+*/
+static int allConstraintsUsed(
+ struct sqlite3_index_constraint_usage *aUsage,
+ int nCons
+){
+ int ii;
+ for(ii=0; ii<nCons; ii++){
+ if( aUsage[ii].argvIndex<=0 ) return 0;
+ }
+ return 1;
+}
+
+/*
** Argument pIdxInfo is already populated with all constraints that may
** be used by the virtual table identified by pBuilder->pNew->iTab. This
** function marks a subset of those constraints usable, invokes the
@@ -165125,13 +166320,20 @@ static int whereLoopAddVirtualOne(
*pbIn = 1; assert( (mExclude & WO_IN)==0 );
}
+ /* Unless pbRetryLimit is non-NULL, there should be no LIMIT/OFFSET
+ ** terms. And if there are any, they should follow all other terms. */
assert( pbRetryLimit || !isLimitTerm(pTerm) );
- if( isLimitTerm(pTerm) && *pbIn ){
+ assert( !isLimitTerm(pTerm) || i>=nConstraint-2 );
+ assert( !isLimitTerm(pTerm) || i==nConstraint-1 || isLimitTerm(pTerm+1) );
+
+ if( isLimitTerm(pTerm) && (*pbIn || !allConstraintsUsed(pUsage, i)) ){
/* If there is an IN(...) term handled as an == (separate call to
** xFilter for each value on the RHS of the IN) and a LIMIT or
- ** OFFSET term handled as well, the plan is unusable. Set output
- ** variable *pbRetryLimit to true to tell the caller to retry with
- ** LIMIT and OFFSET disabled. */
+ ** OFFSET term handled as well, the plan is unusable. Similarly,
+ ** if there is a LIMIT/OFFSET and there are other unused terms,
+ ** the plan cannot be used. In these cases set variable *pbRetryLimit
+ ** to true to tell the caller to retry with LIMIT and OFFSET
+ ** disabled. */
if( pIdxInfo->needToFreeIdxStr ){
sqlite3_free(pIdxInfo->idxStr);
pIdxInfo->idxStr = 0;
@@ -165988,7 +167190,7 @@ static i8 wherePathSatisfiesOrderBy(
if( MASKBIT(i) & obSat ) continue;
p = pOrderBy->a[i].pExpr;
mTerm = sqlite3WhereExprUsage(&pWInfo->sMaskSet,p);
- if( mTerm==0 && !sqlite3ExprIsConstant(p) ) continue;
+ if( mTerm==0 && !sqlite3ExprIsConstant(0,p) ) continue;
if( (mTerm&~orderDistinctMask)==0 ){
obSat |= MASKBIT(i);
}
@@ -166457,10 +167659,9 @@ static int wherePathSolver(WhereInfo *pWInfo, LogEst nRowEst){
if( pFrom->isOrdered==pWInfo->pOrderBy->nExpr ){
pWInfo->eDistinct = WHERE_DISTINCT_ORDERED;
}
- if( pWInfo->pSelect->pOrderBy
- && pWInfo->nOBSat > pWInfo->pSelect->pOrderBy->nExpr ){
- pWInfo->nOBSat = pWInfo->pSelect->pOrderBy->nExpr;
- }
+ /* vvv--- See check-in [12ad822d9b827777] on 2023-03-16 ---vvv */
+ assert( pWInfo->pSelect->pOrderBy==0
+ || pWInfo->nOBSat <= pWInfo->pSelect->pOrderBy->nExpr );
}else{
pWInfo->revMask = pFrom->revLoop;
if( pWInfo->nOBSat<=0 ){
@@ -166503,7 +167704,6 @@ static int wherePathSolver(WhereInfo *pWInfo, LogEst nRowEst){
}
}
-
pWInfo->nRowOut = pFrom->nRow;
/* Free temporary memory and return success */
@@ -166512,6 +167712,83 @@ static int wherePathSolver(WhereInfo *pWInfo, LogEst nRowEst){
}
/*
+** This routine implements a heuristic designed to improve query planning.
+** This routine is called in between the first and second call to
+** wherePathSolver(). Hence the name "Interstage" "Heuristic".
+**
+** The first call to wherePathSolver() (hereafter just "solver()") computes
+** the best path without regard to the order of the outputs. The second call
+** to the solver() builds upon the first call to try to find an alternative
+** path that satisfies the ORDER BY clause.
+**
+** This routine looks at the results of the first solver() run, and for
+** every FROM clause term in the resulting query plan that uses an equality
+** constraint against an index, disable other WhereLoops for that same
+** FROM clause term that would try to do a full-table scan. This prevents
+** an index search from being converted into a full-table scan in order to
+** satisfy an ORDER BY clause, since even though we might get slightly better
+** performance using the full-scan without sorting if the output size
+** estimates are very precise, we might also get severe performance
+** degradation using the full-scan if the output size estimate is too large.
+** It is better to err on the side of caution.
+**
+** Except, if the first solver() call generated a full-table scan in an outer
+** loop then stop this analysis at the first full-scan, since the second
+** solver() run might try to swap that full-scan for another in order to
+** get the output into the correct order. In other words, we allow a
+** rewrite like this:
+**
+** First Solver() Second Solver()
+** |-- SCAN t1 |-- SCAN t2
+** |-- SEARCH t2 `-- SEARCH t1
+** `-- SORT USING B-TREE
+**
+** The purpose of this routine is to disallow rewrites such as:
+**
+** First Solver() Second Solver()
+** |-- SEARCH t1 |-- SCAN t2 <--- bad!
+** |-- SEARCH t2 `-- SEARCH t1
+** `-- SORT USING B-TREE
+**
+** See test cases in test/whereN.test for the real-world query that
+** originally provoked this heuristic.
+*/
+static SQLITE_NOINLINE void whereInterstageHeuristic(WhereInfo *pWInfo){
+ int i;
+#ifdef WHERETRACE_ENABLED
+ int once = 0;
+#endif
+ for(i=0; i<pWInfo->nLevel; i++){
+ WhereLoop *p = pWInfo->a[i].pWLoop;
+ if( p==0 ) break;
+ if( (p->wsFlags & WHERE_VIRTUALTABLE)!=0 ) continue;
+ if( (p->wsFlags & (WHERE_COLUMN_EQ|WHERE_COLUMN_NULL|WHERE_COLUMN_IN))!=0 ){
+ u8 iTab = p->iTab;
+ WhereLoop *pLoop;
+ for(pLoop=pWInfo->pLoops; pLoop; pLoop=pLoop->pNextLoop){
+ if( pLoop->iTab!=iTab ) continue;
+ if( (pLoop->wsFlags & (WHERE_CONSTRAINT|WHERE_AUTO_INDEX))!=0 ){
+ /* Auto-index and index-constrained loops allowed to remain */
+ continue;
+ }
+#ifdef WHERETRACE_ENABLED
+ if( sqlite3WhereTrace & 0x80 ){
+ if( once==0 ){
+ sqlite3DebugPrintf("Loops disabled by interstage heuristic:\n");
+ once = 1;
+ }
+ sqlite3WhereLoopPrint(pLoop, &pWInfo->sWC);
+ }
+#endif /* WHERETRACE_ENABLED */
+ pLoop->prereq = ALLBITS; /* Prevent 2nd solver() from using this one */
+ }
+ }else{
+ break;
+ }
+ }
+}
+
+/*
** Most queries use only a single table (they are not joins) and have
** simple == constraints against indexed fields. This routine attempts
** to plan those simple cases using much less ceremony than the
@@ -166799,7 +168076,7 @@ static SQLITE_NOINLINE void whereCheckIfBloomFilterIsUseful(
SrcItem *pItem = &pWInfo->pTabList->a[pLoop->iTab];
Table *pTab = pItem->pTab;
if( (pTab->tabFlags & TF_HasStat1)==0 ) break;
- pTab->tabFlags |= TF_StatsUsed;
+ pTab->tabFlags |= TF_MaybeReanalyze;
if( i>=1
&& (pLoop->wsFlags & reqFlags)==reqFlags
/* vvvvvv--- Always the case if WHERE_COLUMN_EQ is defined */
@@ -166821,6 +168098,58 @@ static SQLITE_NOINLINE void whereCheckIfBloomFilterIsUseful(
}
/*
+** Expression Node callback for sqlite3ExprCanReturnSubtype().
+**
+** Only a function call is able to return a subtype. So if the node
+** is not a function call, return WRC_Prune immediately.
+**
+** A function call is able to return a subtype if it has the
+** SQLITE_RESULT_SUBTYPE property.
+**
+** Assume that every function is able to pass-through a subtype from
+** one of its argument (using sqlite3_result_value()). Most functions
+** are not this way, but we don't have a mechanism to distinguish those
+** that are from those that are not, so assume they all work this way.
+** That means that if one of its arguments is another function and that
+** other function is able to return a subtype, then this function is
+** able to return a subtype.
+*/
+static int exprNodeCanReturnSubtype(Walker *pWalker, Expr *pExpr){
+ int n;
+ FuncDef *pDef;
+ sqlite3 *db;
+ if( pExpr->op!=TK_FUNCTION ){
+ return WRC_Prune;
+ }
+ assert( ExprUseXList(pExpr) );
+ db = pWalker->pParse->db;
+ n = pExpr->x.pList ? pExpr->x.pList->nExpr : 0;
+ pDef = sqlite3FindFunction(db, pExpr->u.zToken, n, ENC(db), 0);
+ if( pDef==0 || (pDef->funcFlags & SQLITE_RESULT_SUBTYPE)!=0 ){
+ pWalker->eCode = 1;
+ return WRC_Prune;
+ }
+ return WRC_Continue;
+}
+
+/*
+** Return TRUE if expression pExpr is able to return a subtype.
+**
+** A TRUE return does not guarantee that a subtype will be returned.
+** It only indicates that a subtype return is possible. False positives
+** are acceptable as they only disable an optimization. False negatives,
+** on the other hand, can lead to incorrect answers.
+*/
+static int sqlite3ExprCanReturnSubtype(Parse *pParse, Expr *pExpr){
+ Walker w;
+ memset(&w, 0, sizeof(w));
+ w.pParse = pParse;
+ w.xExprCallback = exprNodeCanReturnSubtype;
+ sqlite3WalkExpr(&w, pExpr);
+ return w.eCode;
+}
+
+/*
** The index pIdx is used by a query and contains one or more expressions.
** In other words pIdx is an index on an expression. iIdxCur is the cursor
** number for the index and iDataCur is the cursor number for the corresponding
@@ -166852,20 +168181,12 @@ static SQLITE_NOINLINE void whereAddIndexedExpr(
}else{
continue;
}
- if( sqlite3ExprIsConstant(pExpr) ) continue;
- if( pExpr->op==TK_FUNCTION ){
+ if( sqlite3ExprIsConstant(0,pExpr) ) continue;
+ if( pExpr->op==TK_FUNCTION && sqlite3ExprCanReturnSubtype(pParse,pExpr) ){
/* Functions that might set a subtype should not be replaced by the
** value taken from an expression index since the index omits the
** subtype. https://sqlite.org/forum/forumpost/68d284c86b082c3e */
- int n;
- FuncDef *pDef;
- sqlite3 *db = pParse->db;
- assert( ExprUseXList(pExpr) );
- n = pExpr->x.pList ? pExpr->x.pList->nExpr : 0;
- pDef = sqlite3FindFunction(db, pExpr->u.zToken, n, ENC(db), 0);
- if( pDef==0 || (pDef->funcFlags & SQLITE_RESULT_SUBTYPE)!=0 ){
- continue;
- }
+ continue;
}
p = sqlite3DbMallocRaw(pParse->db, sizeof(IndexedExpr));
if( p==0 ) break;
@@ -167130,7 +168451,11 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin(
){
pWInfo->eDistinct = WHERE_DISTINCT_UNIQUE;
}
- ExplainQueryPlan((pParse, 0, "SCAN CONSTANT ROW"));
+ if( ALWAYS(pWInfo->pSelect)
+ && (pWInfo->pSelect->selFlags & SF_MultiValue)==0
+ ){
+ ExplainQueryPlan((pParse, 0, "SCAN CONSTANT ROW"));
+ }
}else{
/* Assign a bit from the bitmask to every term in the FROM clause.
**
@@ -167283,6 +168608,7 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin(
wherePathSolver(pWInfo, 0);
if( db->mallocFailed ) goto whereBeginError;
if( pWInfo->pOrderBy ){
+ whereInterstageHeuristic(pWInfo);
wherePathSolver(pWInfo, pWInfo->nRowOut+1);
if( db->mallocFailed ) goto whereBeginError;
}
@@ -167832,7 +169158,15 @@ SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo *pWInfo){
addr = sqlite3VdbeAddOp1(v, OP_IfPos, pLevel->iLeftJoin); VdbeCoverage(v);
assert( (ws & WHERE_IDX_ONLY)==0 || (ws & WHERE_INDEXED)!=0 );
if( (ws & WHERE_IDX_ONLY)==0 ){
- assert( pLevel->iTabCur==pTabList->a[pLevel->iFrom].iCursor );
+ SrcItem *pSrc = &pTabList->a[pLevel->iFrom];
+ assert( pLevel->iTabCur==pSrc->iCursor );
+ if( pSrc->fg.viaCoroutine ){
+ int m, n;
+ n = pSrc->regResult;
+ assert( pSrc->pTab!=0 );
+ m = pSrc->pTab->nCol;
+ sqlite3VdbeAddOp3(v, OP_Null, 0, n, n+m-1);
+ }
sqlite3VdbeAddOp1(v, OP_NullRow, pLevel->iTabCur);
}
if( (ws & WHERE_INDEXED)
@@ -167882,6 +169216,7 @@ SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo *pWInfo){
*/
if( pTabItem->fg.viaCoroutine ){
testcase( pParse->db->mallocFailed );
+ assert( pTabItem->regResult>=0 );
translateColumnToCopy(pParse, pLevel->addrBody, pLevel->iTabCur,
pTabItem->regResult, 0);
continue;
@@ -169186,7 +170521,7 @@ SQLITE_PRIVATE void sqlite3WindowListDelete(sqlite3 *db, Window *p){
** variable values in the expression tree.
*/
static Expr *sqlite3WindowOffsetExpr(Parse *pParse, Expr *pExpr){
- if( 0==sqlite3ExprIsConstant(pExpr) ){
+ if( 0==sqlite3ExprIsConstant(0,pExpr) ){
if( IN_RENAME_OBJECT ) sqlite3RenameExprUnmap(pParse, pExpr);
sqlite3ExprDelete(pParse->db, pExpr);
pExpr = sqlite3ExprAlloc(pParse->db, TK_NULL, 0, 0);
@@ -171278,6 +172613,14 @@ static void updateDeleteLimitError(
return pSelect;
}
+ /* Memory allocator for parser stack resizing. This is a thin wrapper around
+ ** sqlite3_realloc() that includes a call to sqlite3FaultSim() to facilitate
+ ** testing.
+ */
+ static void *parserStackRealloc(void *pOld, sqlite3_uint64 newSize){
+ return sqlite3FaultSim(700) ? 0 : sqlite3_realloc(pOld, newSize);
+ }
+
/* Construct a new Expr object from a single token */
static Expr *tokenExpr(Parse *pParse, int op, Token t){
@@ -171527,8 +172870,8 @@ static void updateDeleteLimitError(
#define TK_TRUEFALSE 170
#define TK_ISNOT 171
#define TK_FUNCTION 172
-#define TK_UMINUS 173
-#define TK_UPLUS 174
+#define TK_UPLUS 173
+#define TK_UMINUS 174
#define TK_TRUTH 175
#define TK_REGISTER 176
#define TK_VECTOR 177
@@ -171537,8 +172880,9 @@ static void updateDeleteLimitError(
#define TK_ASTERISK 180
#define TK_SPAN 181
#define TK_ERROR 182
-#define TK_SPACE 183
-#define TK_ILLEGAL 184
+#define TK_QNUMBER 183
+#define TK_SPACE 184
+#define TK_ILLEGAL 185
#endif
/**************** End token definitions ***************************************/
@@ -171579,6 +172923,9 @@ static void updateDeleteLimitError(
** sqlite3ParserARG_STORE Code to store %extra_argument into yypParser
** sqlite3ParserARG_FETCH Code to extract %extra_argument from yypParser
** sqlite3ParserCTX_* As sqlite3ParserARG_ except for %extra_context
+** YYREALLOC Name of the realloc() function to use
+** YYFREE Name of the free() function to use
+** YYDYNSTACK True if stack space should be extended on heap
** YYERRORSYMBOL is the code number of the error symbol. If not
** defined, then do no error processing.
** YYNSTATE the combined number of states.
@@ -171592,37 +172939,39 @@ static void updateDeleteLimitError(
** YY_NO_ACTION The yy_action[] code for no-op
** YY_MIN_REDUCE Minimum value for reduce actions
** YY_MAX_REDUCE Maximum value for reduce actions
+** YY_MIN_DSTRCTR Minimum symbol value that has a destructor
+** YY_MAX_DSTRCTR Maximum symbol value that has a destructor
*/
#ifndef INTERFACE
# define INTERFACE 1
#endif
/************* Begin control #defines *****************************************/
#define YYCODETYPE unsigned short int
-#define YYNOCODE 319
+#define YYNOCODE 322
#define YYACTIONTYPE unsigned short int
#define YYWILDCARD 101
#define sqlite3ParserTOKENTYPE Token
typedef union {
int yyinit;
sqlite3ParserTOKENTYPE yy0;
- TriggerStep* yy33;
- Window* yy41;
- Select* yy47;
- SrcList* yy131;
- struct TrigEvent yy180;
- struct {int value; int mask;} yy231;
- IdList* yy254;
- u32 yy285;
- ExprList* yy322;
- Cte* yy385;
- int yy394;
- Upsert* yy444;
- u8 yy516;
- With* yy521;
- const char* yy522;
- Expr* yy528;
- OnOrUsing yy561;
- struct FrameBound yy595;
+ ExprList* yy14;
+ With* yy59;
+ Cte* yy67;
+ Upsert* yy122;
+ IdList* yy132;
+ int yy144;
+ const char* yy168;
+ SrcList* yy203;
+ Window* yy211;
+ OnOrUsing yy269;
+ struct TrigEvent yy286;
+ struct {int value; int mask;} yy383;
+ u32 yy391;
+ TriggerStep* yy427;
+ Expr* yy454;
+ u8 yy462;
+ struct FrameBound yy509;
+ Select* yy555;
} YYMINORTYPE;
#ifndef YYSTACKDEPTH
#define YYSTACKDEPTH 100
@@ -171632,24 +172981,29 @@ typedef union {
#define sqlite3ParserARG_PARAM
#define sqlite3ParserARG_FETCH
#define sqlite3ParserARG_STORE
+#define YYREALLOC parserStackRealloc
+#define YYFREE sqlite3_free
+#define YYDYNSTACK 1
#define sqlite3ParserCTX_SDECL Parse *pParse;
#define sqlite3ParserCTX_PDECL ,Parse *pParse
#define sqlite3ParserCTX_PARAM ,pParse
#define sqlite3ParserCTX_FETCH Parse *pParse=yypParser->pParse;
#define sqlite3ParserCTX_STORE yypParser->pParse=pParse;
#define YYFALLBACK 1
-#define YYNSTATE 579
-#define YYNRULE 405
-#define YYNRULE_WITH_ACTION 340
-#define YYNTOKEN 185
-#define YY_MAX_SHIFT 578
-#define YY_MIN_SHIFTREDUCE 838
-#define YY_MAX_SHIFTREDUCE 1242
-#define YY_ERROR_ACTION 1243
-#define YY_ACCEPT_ACTION 1244
-#define YY_NO_ACTION 1245
-#define YY_MIN_REDUCE 1246
-#define YY_MAX_REDUCE 1650
+#define YYNSTATE 583
+#define YYNRULE 409
+#define YYNRULE_WITH_ACTION 344
+#define YYNTOKEN 186
+#define YY_MAX_SHIFT 582
+#define YY_MIN_SHIFTREDUCE 845
+#define YY_MAX_SHIFTREDUCE 1253
+#define YY_ERROR_ACTION 1254
+#define YY_ACCEPT_ACTION 1255
+#define YY_NO_ACTION 1256
+#define YY_MIN_REDUCE 1257
+#define YY_MAX_REDUCE 1665
+#define YY_MIN_DSTRCTR 205
+#define YY_MAX_DSTRCTR 319
/************* End control #defines *******************************************/
#define YY_NLOOKAHEAD ((int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0])))
@@ -171665,6 +173019,22 @@ typedef union {
# define yytestcase(X)
#endif
+/* Macro to determine if stack space has the ability to grow using
+** heap memory.
+*/
+#if YYSTACKDEPTH<=0 || YYDYNSTACK
+# define YYGROWABLESTACK 1
+#else
+# define YYGROWABLESTACK 0
+#endif
+
+/* Guarantee a minimum number of initial stack slots.
+*/
+#if YYSTACKDEPTH<=0
+# undef YYSTACKDEPTH
+# define YYSTACKDEPTH 2 /* Need a minimum stack size */
+#endif
+
/* Next are the tables used to determine what action to take based on the
** current state and lookahead token. These tables are used to implement
@@ -171716,619 +173086,630 @@ typedef union {
** yy_default[] Default action for each state.
**
*********** Begin parsing tables **********************************************/
-#define YY_ACTTAB_COUNT (2100)
+#define YY_ACTTAB_COUNT (2142)
static const YYACTIONTYPE yy_action[] = {
- /* 0 */ 572, 210, 572, 119, 116, 231, 572, 119, 116, 231,
- /* 10 */ 572, 1317, 379, 1296, 410, 566, 566, 566, 572, 411,
- /* 20 */ 380, 1317, 1279, 42, 42, 42, 42, 210, 1529, 72,
- /* 30 */ 72, 974, 421, 42, 42, 495, 305, 281, 305, 975,
- /* 40 */ 399, 72, 72, 126, 127, 81, 1217, 1217, 1054, 1057,
- /* 50 */ 1044, 1044, 124, 124, 125, 125, 125, 125, 480, 411,
- /* 60 */ 1244, 1, 1, 578, 2, 1248, 554, 119, 116, 231,
- /* 70 */ 319, 484, 147, 484, 528, 119, 116, 231, 533, 1330,
- /* 80 */ 419, 527, 143, 126, 127, 81, 1217, 1217, 1054, 1057,
- /* 90 */ 1044, 1044, 124, 124, 125, 125, 125, 125, 119, 116,
- /* 100 */ 231, 329, 123, 123, 123, 123, 122, 122, 121, 121,
- /* 110 */ 121, 120, 117, 448, 286, 286, 286, 286, 446, 446,
- /* 120 */ 446, 1568, 378, 1570, 1193, 377, 1164, 569, 1164, 569,
- /* 130 */ 411, 1568, 541, 261, 228, 448, 102, 146, 453, 318,
- /* 140 */ 563, 242, 123, 123, 123, 123, 122, 122, 121, 121,
- /* 150 */ 121, 120, 117, 448, 126, 127, 81, 1217, 1217, 1054,
- /* 160 */ 1057, 1044, 1044, 124, 124, 125, 125, 125, 125, 143,
- /* 170 */ 296, 1193, 341, 452, 121, 121, 121, 120, 117, 448,
- /* 180 */ 128, 1193, 1194, 1193, 149, 445, 444, 572, 120, 117,
- /* 190 */ 448, 125, 125, 125, 125, 118, 123, 123, 123, 123,
- /* 200 */ 122, 122, 121, 121, 121, 120, 117, 448, 458, 114,
- /* 210 */ 13, 13, 550, 123, 123, 123, 123, 122, 122, 121,
- /* 220 */ 121, 121, 120, 117, 448, 424, 318, 563, 1193, 1194,
- /* 230 */ 1193, 150, 1225, 411, 1225, 125, 125, 125, 125, 123,
- /* 240 */ 123, 123, 123, 122, 122, 121, 121, 121, 120, 117,
- /* 250 */ 448, 469, 344, 1041, 1041, 1055, 1058, 126, 127, 81,
- /* 260 */ 1217, 1217, 1054, 1057, 1044, 1044, 124, 124, 125, 125,
- /* 270 */ 125, 125, 1282, 526, 224, 1193, 572, 411, 226, 519,
- /* 280 */ 177, 83, 84, 123, 123, 123, 123, 122, 122, 121,
- /* 290 */ 121, 121, 120, 117, 448, 1010, 16, 16, 1193, 134,
- /* 300 */ 134, 126, 127, 81, 1217, 1217, 1054, 1057, 1044, 1044,
- /* 310 */ 124, 124, 125, 125, 125, 125, 123, 123, 123, 123,
- /* 320 */ 122, 122, 121, 121, 121, 120, 117, 448, 1045, 550,
- /* 330 */ 1193, 375, 1193, 1194, 1193, 254, 1438, 401, 508, 505,
- /* 340 */ 504, 112, 564, 570, 4, 929, 929, 435, 503, 342,
- /* 350 */ 464, 330, 362, 396, 1238, 1193, 1194, 1193, 567, 572,
- /* 360 */ 123, 123, 123, 123, 122, 122, 121, 121, 121, 120,
- /* 370 */ 117, 448, 286, 286, 371, 1581, 1607, 445, 444, 155,
- /* 380 */ 411, 449, 72, 72, 1289, 569, 1222, 1193, 1194, 1193,
- /* 390 */ 86, 1224, 273, 561, 547, 520, 520, 572, 99, 1223,
- /* 400 */ 6, 1281, 476, 143, 126, 127, 81, 1217, 1217, 1054,
- /* 410 */ 1057, 1044, 1044, 124, 124, 125, 125, 125, 125, 554,
- /* 420 */ 13, 13, 1031, 511, 1225, 1193, 1225, 553, 110, 110,
- /* 430 */ 224, 572, 1239, 177, 572, 429, 111, 199, 449, 573,
- /* 440 */ 449, 432, 1555, 1019, 327, 555, 1193, 272, 289, 370,
- /* 450 */ 514, 365, 513, 259, 72, 72, 547, 72, 72, 361,
- /* 460 */ 318, 563, 1613, 123, 123, 123, 123, 122, 122, 121,
- /* 470 */ 121, 121, 120, 117, 448, 1019, 1019, 1021, 1022, 28,
- /* 480 */ 286, 286, 1193, 1194, 1193, 1159, 572, 1612, 411, 904,
- /* 490 */ 192, 554, 358, 569, 554, 940, 537, 521, 1159, 437,
- /* 500 */ 415, 1159, 556, 1193, 1194, 1193, 572, 548, 548, 52,
- /* 510 */ 52, 216, 126, 127, 81, 1217, 1217, 1054, 1057, 1044,
- /* 520 */ 1044, 124, 124, 125, 125, 125, 125, 1193, 478, 136,
- /* 530 */ 136, 411, 286, 286, 1493, 509, 122, 122, 121, 121,
- /* 540 */ 121, 120, 117, 448, 1010, 569, 522, 219, 545, 545,
- /* 550 */ 318, 563, 143, 6, 536, 126, 127, 81, 1217, 1217,
- /* 560 */ 1054, 1057, 1044, 1044, 124, 124, 125, 125, 125, 125,
- /* 570 */ 1557, 123, 123, 123, 123, 122, 122, 121, 121, 121,
- /* 580 */ 120, 117, 448, 489, 1193, 1194, 1193, 486, 283, 1270,
- /* 590 */ 960, 254, 1193, 375, 508, 505, 504, 1193, 342, 574,
- /* 600 */ 1193, 574, 411, 294, 503, 960, 879, 193, 484, 318,
- /* 610 */ 563, 386, 292, 382, 123, 123, 123, 123, 122, 122,
- /* 620 */ 121, 121, 121, 120, 117, 448, 126, 127, 81, 1217,
- /* 630 */ 1217, 1054, 1057, 1044, 1044, 124, 124, 125, 125, 125,
- /* 640 */ 125, 411, 396, 1139, 1193, 872, 101, 286, 286, 1193,
- /* 650 */ 1194, 1193, 375, 1096, 1193, 1194, 1193, 1193, 1194, 1193,
- /* 660 */ 569, 459, 33, 375, 235, 126, 127, 81, 1217, 1217,
- /* 670 */ 1054, 1057, 1044, 1044, 124, 124, 125, 125, 125, 125,
- /* 680 */ 1437, 962, 572, 230, 961, 123, 123, 123, 123, 122,
- /* 690 */ 122, 121, 121, 121, 120, 117, 448, 1159, 230, 1193,
- /* 700 */ 158, 1193, 1194, 1193, 1556, 13, 13, 303, 960, 1233,
- /* 710 */ 1159, 154, 411, 1159, 375, 1584, 1177, 5, 371, 1581,
- /* 720 */ 431, 1239, 3, 960, 123, 123, 123, 123, 122, 122,
- /* 730 */ 121, 121, 121, 120, 117, 448, 126, 127, 81, 1217,
- /* 740 */ 1217, 1054, 1057, 1044, 1044, 124, 124, 125, 125, 125,
- /* 750 */ 125, 411, 210, 571, 1193, 1032, 1193, 1194, 1193, 1193,
- /* 760 */ 390, 855, 156, 1555, 376, 404, 1101, 1101, 492, 572,
- /* 770 */ 469, 344, 1322, 1322, 1555, 126, 127, 81, 1217, 1217,
- /* 780 */ 1054, 1057, 1044, 1044, 124, 124, 125, 125, 125, 125,
- /* 790 */ 130, 572, 13, 13, 532, 123, 123, 123, 123, 122,
- /* 800 */ 122, 121, 121, 121, 120, 117, 448, 304, 572, 457,
- /* 810 */ 229, 1193, 1194, 1193, 13, 13, 1193, 1194, 1193, 1300,
- /* 820 */ 467, 1270, 411, 1320, 1320, 1555, 1015, 457, 456, 436,
- /* 830 */ 301, 72, 72, 1268, 123, 123, 123, 123, 122, 122,
- /* 840 */ 121, 121, 121, 120, 117, 448, 126, 127, 81, 1217,
- /* 850 */ 1217, 1054, 1057, 1044, 1044, 124, 124, 125, 125, 125,
- /* 860 */ 125, 411, 384, 1076, 1159, 286, 286, 421, 314, 280,
- /* 870 */ 280, 287, 287, 461, 408, 407, 1539, 1159, 569, 572,
- /* 880 */ 1159, 1196, 569, 409, 569, 126, 127, 81, 1217, 1217,
- /* 890 */ 1054, 1057, 1044, 1044, 124, 124, 125, 125, 125, 125,
- /* 900 */ 457, 1485, 13, 13, 1541, 123, 123, 123, 123, 122,
- /* 910 */ 122, 121, 121, 121, 120, 117, 448, 202, 572, 462,
- /* 920 */ 1587, 578, 2, 1248, 843, 844, 845, 1563, 319, 409,
- /* 930 */ 147, 6, 411, 257, 256, 255, 208, 1330, 9, 1196,
- /* 940 */ 264, 72, 72, 1436, 123, 123, 123, 123, 122, 122,
- /* 950 */ 121, 121, 121, 120, 117, 448, 126, 127, 81, 1217,
- /* 960 */ 1217, 1054, 1057, 1044, 1044, 124, 124, 125, 125, 125,
- /* 970 */ 125, 572, 286, 286, 572, 1213, 411, 577, 315, 1248,
- /* 980 */ 421, 371, 1581, 356, 319, 569, 147, 495, 529, 1644,
- /* 990 */ 397, 935, 495, 1330, 71, 71, 934, 72, 72, 242,
- /* 1000 */ 1328, 105, 81, 1217, 1217, 1054, 1057, 1044, 1044, 124,
- /* 1010 */ 124, 125, 125, 125, 125, 123, 123, 123, 123, 122,
- /* 1020 */ 122, 121, 121, 121, 120, 117, 448, 1117, 286, 286,
- /* 1030 */ 1422, 452, 1528, 1213, 443, 286, 286, 1492, 1355, 313,
- /* 1040 */ 478, 569, 1118, 454, 351, 495, 354, 1266, 569, 209,
- /* 1050 */ 572, 418, 179, 572, 1031, 242, 385, 1119, 523, 123,
- /* 1060 */ 123, 123, 123, 122, 122, 121, 121, 121, 120, 117,
- /* 1070 */ 448, 1020, 108, 72, 72, 1019, 13, 13, 915, 572,
- /* 1080 */ 1498, 572, 286, 286, 98, 530, 1537, 452, 916, 1334,
- /* 1090 */ 1329, 203, 411, 286, 286, 569, 152, 211, 1498, 1500,
- /* 1100 */ 426, 569, 56, 56, 57, 57, 569, 1019, 1019, 1021,
- /* 1110 */ 447, 572, 411, 531, 12, 297, 126, 127, 81, 1217,
- /* 1120 */ 1217, 1054, 1057, 1044, 1044, 124, 124, 125, 125, 125,
- /* 1130 */ 125, 572, 411, 867, 15, 15, 126, 127, 81, 1217,
- /* 1140 */ 1217, 1054, 1057, 1044, 1044, 124, 124, 125, 125, 125,
- /* 1150 */ 125, 373, 529, 264, 44, 44, 126, 115, 81, 1217,
- /* 1160 */ 1217, 1054, 1057, 1044, 1044, 124, 124, 125, 125, 125,
- /* 1170 */ 125, 1498, 478, 1271, 417, 123, 123, 123, 123, 122,
- /* 1180 */ 122, 121, 121, 121, 120, 117, 448, 205, 1213, 495,
- /* 1190 */ 430, 867, 468, 322, 495, 123, 123, 123, 123, 122,
- /* 1200 */ 122, 121, 121, 121, 120, 117, 448, 572, 557, 1140,
- /* 1210 */ 1642, 1422, 1642, 543, 572, 123, 123, 123, 123, 122,
- /* 1220 */ 122, 121, 121, 121, 120, 117, 448, 572, 1422, 572,
- /* 1230 */ 13, 13, 542, 323, 1325, 411, 334, 58, 58, 349,
- /* 1240 */ 1422, 1170, 326, 286, 286, 549, 1213, 300, 895, 530,
- /* 1250 */ 45, 45, 59, 59, 1140, 1643, 569, 1643, 565, 417,
- /* 1260 */ 127, 81, 1217, 1217, 1054, 1057, 1044, 1044, 124, 124,
- /* 1270 */ 125, 125, 125, 125, 1367, 373, 500, 290, 1193, 512,
- /* 1280 */ 1366, 427, 394, 394, 393, 275, 391, 896, 1138, 852,
- /* 1290 */ 478, 258, 1422, 1170, 463, 1159, 12, 331, 428, 333,
- /* 1300 */ 1117, 460, 236, 258, 325, 460, 544, 1544, 1159, 1098,
- /* 1310 */ 491, 1159, 324, 1098, 440, 1118, 335, 516, 123, 123,
- /* 1320 */ 123, 123, 122, 122, 121, 121, 121, 120, 117, 448,
- /* 1330 */ 1119, 318, 563, 1138, 572, 1193, 1194, 1193, 112, 564,
- /* 1340 */ 201, 4, 238, 433, 935, 490, 285, 228, 1517, 934,
- /* 1350 */ 170, 560, 572, 142, 1516, 567, 572, 60, 60, 572,
- /* 1360 */ 416, 572, 441, 572, 535, 302, 875, 8, 487, 572,
- /* 1370 */ 237, 572, 416, 572, 485, 61, 61, 572, 449, 62,
- /* 1380 */ 62, 332, 63, 63, 46, 46, 47, 47, 361, 572,
- /* 1390 */ 561, 572, 48, 48, 50, 50, 51, 51, 572, 295,
- /* 1400 */ 64, 64, 482, 295, 539, 412, 471, 1031, 572, 538,
- /* 1410 */ 318, 563, 65, 65, 66, 66, 409, 475, 572, 1031,
- /* 1420 */ 572, 14, 14, 875, 1020, 110, 110, 409, 1019, 572,
- /* 1430 */ 474, 67, 67, 111, 455, 449, 573, 449, 98, 317,
- /* 1440 */ 1019, 132, 132, 133, 133, 572, 1561, 572, 974, 409,
- /* 1450 */ 6, 1562, 68, 68, 1560, 6, 975, 572, 6, 1559,
- /* 1460 */ 1019, 1019, 1021, 6, 346, 218, 101, 531, 53, 53,
- /* 1470 */ 69, 69, 1019, 1019, 1021, 1022, 28, 1586, 1181, 451,
- /* 1480 */ 70, 70, 290, 87, 215, 31, 1363, 394, 394, 393,
- /* 1490 */ 275, 391, 350, 109, 852, 107, 572, 112, 564, 483,
- /* 1500 */ 4, 1212, 572, 239, 153, 572, 39, 236, 1299, 325,
- /* 1510 */ 112, 564, 1298, 4, 567, 572, 32, 324, 572, 54,
- /* 1520 */ 54, 572, 1135, 353, 398, 165, 165, 567, 166, 166,
- /* 1530 */ 572, 291, 355, 572, 17, 357, 572, 449, 77, 77,
- /* 1540 */ 1313, 55, 55, 1297, 73, 73, 572, 238, 470, 561,
- /* 1550 */ 449, 472, 364, 135, 135, 170, 74, 74, 142, 163,
- /* 1560 */ 163, 374, 561, 539, 572, 321, 572, 886, 540, 137,
- /* 1570 */ 137, 339, 1353, 422, 298, 237, 539, 572, 1031, 572,
- /* 1580 */ 340, 538, 101, 369, 110, 110, 162, 131, 131, 164,
- /* 1590 */ 164, 1031, 111, 368, 449, 573, 449, 110, 110, 1019,
- /* 1600 */ 157, 157, 141, 141, 572, 111, 572, 449, 573, 449,
- /* 1610 */ 412, 288, 1019, 572, 882, 318, 563, 572, 219, 572,
- /* 1620 */ 241, 1012, 477, 263, 263, 894, 893, 140, 140, 138,
- /* 1630 */ 138, 1019, 1019, 1021, 1022, 28, 139, 139, 525, 455,
- /* 1640 */ 76, 76, 78, 78, 1019, 1019, 1021, 1022, 28, 1181,
- /* 1650 */ 451, 572, 1083, 290, 112, 564, 1575, 4, 394, 394,
- /* 1660 */ 393, 275, 391, 572, 1023, 852, 572, 479, 345, 263,
- /* 1670 */ 101, 567, 882, 1376, 75, 75, 1421, 501, 236, 260,
- /* 1680 */ 325, 112, 564, 359, 4, 101, 43, 43, 324, 49,
- /* 1690 */ 49, 901, 902, 161, 449, 101, 977, 978, 567, 1079,
- /* 1700 */ 1349, 260, 965, 932, 263, 114, 561, 1095, 517, 1095,
- /* 1710 */ 1083, 1094, 865, 1094, 151, 933, 1144, 114, 238, 1361,
- /* 1720 */ 558, 449, 1023, 559, 1426, 1278, 170, 1269, 1257, 142,
- /* 1730 */ 1601, 1256, 1258, 561, 1594, 1031, 496, 278, 213, 1346,
- /* 1740 */ 310, 110, 110, 939, 311, 312, 237, 11, 234, 111,
- /* 1750 */ 221, 449, 573, 449, 293, 395, 1019, 1408, 337, 1403,
- /* 1760 */ 1396, 338, 1031, 299, 343, 1413, 1412, 481, 110, 110,
- /* 1770 */ 506, 402, 225, 1296, 206, 367, 111, 1358, 449, 573,
- /* 1780 */ 449, 412, 1359, 1019, 1489, 1488, 318, 563, 1019, 1019,
- /* 1790 */ 1021, 1022, 28, 562, 207, 220, 80, 564, 389, 4,
- /* 1800 */ 1597, 1357, 552, 1356, 1233, 181, 267, 232, 1536, 1534,
- /* 1810 */ 455, 1230, 420, 567, 82, 1019, 1019, 1021, 1022, 28,
- /* 1820 */ 86, 217, 85, 1494, 190, 175, 183, 465, 185, 466,
- /* 1830 */ 36, 1409, 186, 187, 188, 499, 449, 244, 37, 99,
- /* 1840 */ 400, 1415, 1414, 488, 1417, 194, 473, 403, 561, 1483,
- /* 1850 */ 248, 92, 1505, 494, 198, 279, 112, 564, 250, 4,
- /* 1860 */ 348, 497, 405, 352, 1259, 251, 252, 515, 1316, 434,
- /* 1870 */ 1315, 1314, 94, 567, 1307, 886, 1306, 1031, 226, 406,
- /* 1880 */ 1611, 1610, 438, 110, 110, 1580, 1286, 524, 439, 308,
- /* 1890 */ 266, 111, 1285, 449, 573, 449, 449, 309, 1019, 366,
- /* 1900 */ 1284, 1609, 265, 1566, 1565, 442, 372, 1381, 561, 129,
- /* 1910 */ 550, 1380, 10, 1470, 383, 106, 316, 551, 100, 35,
- /* 1920 */ 534, 575, 212, 1339, 381, 387, 1187, 1338, 274, 276,
- /* 1930 */ 1019, 1019, 1021, 1022, 28, 277, 413, 1031, 576, 1254,
- /* 1940 */ 388, 1521, 1249, 110, 110, 167, 1522, 168, 148, 1520,
- /* 1950 */ 1519, 111, 306, 449, 573, 449, 222, 223, 1019, 839,
- /* 1960 */ 169, 79, 450, 214, 414, 233, 320, 145, 1093, 1091,
- /* 1970 */ 328, 182, 171, 1212, 918, 184, 240, 336, 243, 1107,
- /* 1980 */ 189, 172, 173, 423, 425, 88, 180, 191, 89, 90,
- /* 1990 */ 1019, 1019, 1021, 1022, 28, 91, 174, 1110, 245, 1106,
- /* 2000 */ 246, 159, 18, 247, 347, 1099, 263, 195, 1227, 493,
- /* 2010 */ 249, 196, 38, 854, 498, 368, 253, 360, 897, 197,
- /* 2020 */ 502, 93, 19, 20, 507, 884, 363, 510, 95, 307,
- /* 2030 */ 160, 96, 518, 97, 1175, 1060, 1146, 40, 21, 227,
- /* 2040 */ 176, 1145, 282, 284, 969, 200, 963, 114, 262, 1165,
- /* 2050 */ 22, 23, 24, 1161, 1169, 25, 1163, 1150, 34, 26,
- /* 2060 */ 1168, 546, 27, 204, 101, 103, 104, 1074, 7, 1061,
- /* 2070 */ 1059, 1063, 1116, 1064, 1115, 268, 269, 29, 41, 270,
- /* 2080 */ 1024, 866, 113, 30, 568, 392, 1183, 144, 178, 1182,
- /* 2090 */ 271, 928, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1602,
+ /* 0 */ 576, 128, 125, 232, 1622, 549, 576, 1290, 1281, 576,
+ /* 10 */ 328, 576, 1300, 212, 576, 128, 125, 232, 578, 412,
+ /* 20 */ 578, 391, 1542, 51, 51, 523, 405, 1293, 529, 51,
+ /* 30 */ 51, 983, 51, 51, 81, 81, 1107, 61, 61, 984,
+ /* 40 */ 1107, 1292, 380, 135, 136, 90, 1228, 1228, 1063, 1066,
+ /* 50 */ 1053, 1053, 133, 133, 134, 134, 134, 134, 1577, 412,
+ /* 60 */ 287, 287, 7, 287, 287, 422, 1050, 1050, 1064, 1067,
+ /* 70 */ 289, 556, 492, 573, 524, 561, 573, 497, 561, 482,
+ /* 80 */ 530, 262, 229, 135, 136, 90, 1228, 1228, 1063, 1066,
+ /* 90 */ 1053, 1053, 133, 133, 134, 134, 134, 134, 128, 125,
+ /* 100 */ 232, 1506, 132, 132, 132, 132, 131, 131, 130, 130,
+ /* 110 */ 130, 129, 126, 450, 1204, 1255, 1, 1, 582, 2,
+ /* 120 */ 1259, 1571, 420, 1582, 379, 320, 1174, 153, 1174, 1584,
+ /* 130 */ 412, 378, 1582, 543, 1341, 330, 111, 570, 570, 570,
+ /* 140 */ 293, 1054, 132, 132, 132, 132, 131, 131, 130, 130,
+ /* 150 */ 130, 129, 126, 450, 135, 136, 90, 1228, 1228, 1063,
+ /* 160 */ 1066, 1053, 1053, 133, 133, 134, 134, 134, 134, 287,
+ /* 170 */ 287, 1204, 1205, 1204, 255, 287, 287, 510, 507, 506,
+ /* 180 */ 137, 455, 573, 212, 561, 447, 446, 505, 573, 1616,
+ /* 190 */ 561, 134, 134, 134, 134, 127, 400, 243, 132, 132,
+ /* 200 */ 132, 132, 131, 131, 130, 130, 130, 129, 126, 450,
+ /* 210 */ 282, 471, 345, 132, 132, 132, 132, 131, 131, 130,
+ /* 220 */ 130, 130, 129, 126, 450, 574, 155, 936, 936, 454,
+ /* 230 */ 227, 521, 1236, 412, 1236, 134, 134, 134, 134, 132,
+ /* 240 */ 132, 132, 132, 131, 131, 130, 130, 130, 129, 126,
+ /* 250 */ 450, 130, 130, 130, 129, 126, 450, 135, 136, 90,
+ /* 260 */ 1228, 1228, 1063, 1066, 1053, 1053, 133, 133, 134, 134,
+ /* 270 */ 134, 134, 128, 125, 232, 450, 576, 412, 397, 1249,
+ /* 280 */ 180, 92, 93, 132, 132, 132, 132, 131, 131, 130,
+ /* 290 */ 130, 130, 129, 126, 450, 381, 387, 1204, 383, 81,
+ /* 300 */ 81, 135, 136, 90, 1228, 1228, 1063, 1066, 1053, 1053,
+ /* 310 */ 133, 133, 134, 134, 134, 134, 132, 132, 132, 132,
+ /* 320 */ 131, 131, 130, 130, 130, 129, 126, 450, 131, 131,
+ /* 330 */ 130, 130, 130, 129, 126, 450, 556, 1204, 302, 319,
+ /* 340 */ 567, 121, 568, 480, 4, 555, 1149, 1657, 1628, 1657,
+ /* 350 */ 45, 128, 125, 232, 1204, 1205, 1204, 1250, 571, 1169,
+ /* 360 */ 132, 132, 132, 132, 131, 131, 130, 130, 130, 129,
+ /* 370 */ 126, 450, 1169, 287, 287, 1169, 1019, 576, 422, 1019,
+ /* 380 */ 412, 451, 1602, 582, 2, 1259, 573, 44, 561, 95,
+ /* 390 */ 320, 110, 153, 565, 1204, 1205, 1204, 522, 522, 1341,
+ /* 400 */ 81, 81, 7, 44, 135, 136, 90, 1228, 1228, 1063,
+ /* 410 */ 1066, 1053, 1053, 133, 133, 134, 134, 134, 134, 295,
+ /* 420 */ 1149, 1658, 1040, 1658, 1204, 1147, 319, 567, 119, 119,
+ /* 430 */ 343, 466, 331, 343, 287, 287, 120, 556, 451, 577,
+ /* 440 */ 451, 1169, 1169, 1028, 319, 567, 438, 573, 210, 561,
+ /* 450 */ 1339, 1451, 546, 531, 1169, 1169, 1598, 1169, 1169, 416,
+ /* 460 */ 319, 567, 243, 132, 132, 132, 132, 131, 131, 130,
+ /* 470 */ 130, 130, 129, 126, 450, 1028, 1028, 1030, 1031, 35,
+ /* 480 */ 44, 1204, 1205, 1204, 472, 287, 287, 1328, 412, 1307,
+ /* 490 */ 372, 1595, 359, 225, 454, 1204, 195, 1328, 573, 1147,
+ /* 500 */ 561, 1333, 1333, 274, 576, 1188, 576, 340, 46, 196,
+ /* 510 */ 537, 217, 135, 136, 90, 1228, 1228, 1063, 1066, 1053,
+ /* 520 */ 1053, 133, 133, 134, 134, 134, 134, 19, 19, 19,
+ /* 530 */ 19, 412, 581, 1204, 1259, 511, 1204, 319, 567, 320,
+ /* 540 */ 944, 153, 425, 491, 430, 943, 1204, 488, 1341, 1450,
+ /* 550 */ 532, 1277, 1204, 1205, 1204, 135, 136, 90, 1228, 1228,
+ /* 560 */ 1063, 1066, 1053, 1053, 133, 133, 134, 134, 134, 134,
+ /* 570 */ 575, 132, 132, 132, 132, 131, 131, 130, 130, 130,
+ /* 580 */ 129, 126, 450, 287, 287, 528, 287, 287, 372, 1595,
+ /* 590 */ 1204, 1205, 1204, 1204, 1205, 1204, 573, 486, 561, 573,
+ /* 600 */ 889, 561, 412, 1204, 1205, 1204, 886, 40, 22, 22,
+ /* 610 */ 220, 243, 525, 1449, 132, 132, 132, 132, 131, 131,
+ /* 620 */ 130, 130, 130, 129, 126, 450, 135, 136, 90, 1228,
+ /* 630 */ 1228, 1063, 1066, 1053, 1053, 133, 133, 134, 134, 134,
+ /* 640 */ 134, 412, 180, 454, 1204, 879, 255, 287, 287, 510,
+ /* 650 */ 507, 506, 372, 1595, 1568, 1331, 1331, 576, 889, 505,
+ /* 660 */ 573, 44, 561, 559, 1207, 135, 136, 90, 1228, 1228,
+ /* 670 */ 1063, 1066, 1053, 1053, 133, 133, 134, 134, 134, 134,
+ /* 680 */ 81, 81, 422, 576, 377, 132, 132, 132, 132, 131,
+ /* 690 */ 131, 130, 130, 130, 129, 126, 450, 297, 287, 287,
+ /* 700 */ 460, 1204, 1205, 1204, 1204, 534, 19, 19, 448, 448,
+ /* 710 */ 448, 573, 412, 561, 230, 436, 1187, 535, 319, 567,
+ /* 720 */ 363, 432, 1207, 1435, 132, 132, 132, 132, 131, 131,
+ /* 730 */ 130, 130, 130, 129, 126, 450, 135, 136, 90, 1228,
+ /* 740 */ 1228, 1063, 1066, 1053, 1053, 133, 133, 134, 134, 134,
+ /* 750 */ 134, 412, 211, 949, 1169, 1041, 1110, 1110, 494, 547,
+ /* 760 */ 547, 1204, 1205, 1204, 7, 539, 1570, 1169, 376, 576,
+ /* 770 */ 1169, 5, 1204, 486, 3, 135, 136, 90, 1228, 1228,
+ /* 780 */ 1063, 1066, 1053, 1053, 133, 133, 134, 134, 134, 134,
+ /* 790 */ 576, 513, 19, 19, 427, 132, 132, 132, 132, 131,
+ /* 800 */ 131, 130, 130, 130, 129, 126, 450, 305, 1204, 433,
+ /* 810 */ 225, 1204, 385, 19, 19, 273, 290, 371, 516, 366,
+ /* 820 */ 515, 260, 412, 538, 1568, 549, 1024, 362, 437, 1204,
+ /* 830 */ 1205, 1204, 902, 1552, 132, 132, 132, 132, 131, 131,
+ /* 840 */ 130, 130, 130, 129, 126, 450, 135, 136, 90, 1228,
+ /* 850 */ 1228, 1063, 1066, 1053, 1053, 133, 133, 134, 134, 134,
+ /* 860 */ 134, 412, 1435, 514, 1281, 1204, 1205, 1204, 1204, 1205,
+ /* 870 */ 1204, 903, 48, 342, 1568, 1568, 1279, 1627, 1568, 911,
+ /* 880 */ 576, 129, 126, 450, 110, 135, 136, 90, 1228, 1228,
+ /* 890 */ 1063, 1066, 1053, 1053, 133, 133, 134, 134, 134, 134,
+ /* 900 */ 265, 576, 459, 19, 19, 132, 132, 132, 132, 131,
+ /* 910 */ 131, 130, 130, 130, 129, 126, 450, 1345, 204, 576,
+ /* 920 */ 459, 458, 50, 47, 19, 19, 49, 434, 1105, 573,
+ /* 930 */ 497, 561, 412, 428, 108, 1224, 1569, 1554, 376, 205,
+ /* 940 */ 550, 550, 81, 81, 132, 132, 132, 132, 131, 131,
+ /* 950 */ 130, 130, 130, 129, 126, 450, 135, 136, 90, 1228,
+ /* 960 */ 1228, 1063, 1066, 1053, 1053, 133, 133, 134, 134, 134,
+ /* 970 */ 134, 480, 576, 1204, 576, 1541, 412, 1435, 969, 315,
+ /* 980 */ 1659, 398, 284, 497, 969, 893, 1569, 1569, 376, 376,
+ /* 990 */ 1569, 461, 376, 1224, 459, 80, 80, 81, 81, 497,
+ /* 1000 */ 374, 114, 90, 1228, 1228, 1063, 1066, 1053, 1053, 133,
+ /* 1010 */ 133, 134, 134, 134, 134, 132, 132, 132, 132, 131,
+ /* 1020 */ 131, 130, 130, 130, 129, 126, 450, 1204, 1505, 576,
+ /* 1030 */ 1204, 1205, 1204, 1366, 316, 486, 281, 281, 497, 431,
+ /* 1040 */ 557, 288, 288, 402, 1340, 471, 345, 298, 429, 573,
+ /* 1050 */ 576, 561, 81, 81, 573, 374, 561, 971, 386, 132,
+ /* 1060 */ 132, 132, 132, 131, 131, 130, 130, 130, 129, 126,
+ /* 1070 */ 450, 231, 117, 81, 81, 287, 287, 231, 287, 287,
+ /* 1080 */ 576, 1511, 576, 1336, 1204, 1205, 1204, 139, 573, 556,
+ /* 1090 */ 561, 573, 412, 561, 441, 456, 969, 213, 558, 1511,
+ /* 1100 */ 1513, 1550, 969, 143, 143, 145, 145, 1368, 314, 478,
+ /* 1110 */ 444, 970, 412, 850, 851, 852, 135, 136, 90, 1228,
+ /* 1120 */ 1228, 1063, 1066, 1053, 1053, 133, 133, 134, 134, 134,
+ /* 1130 */ 134, 357, 412, 397, 1148, 304, 135, 136, 90, 1228,
+ /* 1140 */ 1228, 1063, 1066, 1053, 1053, 133, 133, 134, 134, 134,
+ /* 1150 */ 134, 1575, 323, 6, 862, 7, 135, 124, 90, 1228,
+ /* 1160 */ 1228, 1063, 1066, 1053, 1053, 133, 133, 134, 134, 134,
+ /* 1170 */ 134, 409, 408, 1511, 212, 132, 132, 132, 132, 131,
+ /* 1180 */ 131, 130, 130, 130, 129, 126, 450, 411, 118, 1204,
+ /* 1190 */ 116, 10, 352, 265, 355, 132, 132, 132, 132, 131,
+ /* 1200 */ 131, 130, 130, 130, 129, 126, 450, 576, 324, 306,
+ /* 1210 */ 576, 306, 1250, 469, 158, 132, 132, 132, 132, 131,
+ /* 1220 */ 131, 130, 130, 130, 129, 126, 450, 207, 1224, 1126,
+ /* 1230 */ 65, 65, 470, 66, 66, 412, 447, 446, 882, 531,
+ /* 1240 */ 335, 258, 257, 256, 1127, 1233, 1204, 1205, 1204, 327,
+ /* 1250 */ 1235, 874, 159, 576, 16, 480, 1085, 1040, 1234, 1128,
+ /* 1260 */ 136, 90, 1228, 1228, 1063, 1066, 1053, 1053, 133, 133,
+ /* 1270 */ 134, 134, 134, 134, 1029, 576, 81, 81, 1028, 1040,
+ /* 1280 */ 922, 576, 463, 1236, 576, 1236, 1224, 502, 107, 1435,
+ /* 1290 */ 923, 6, 576, 410, 1498, 882, 1029, 480, 21, 21,
+ /* 1300 */ 1028, 332, 1380, 334, 53, 53, 497, 81, 81, 874,
+ /* 1310 */ 1028, 1028, 1030, 445, 259, 19, 19, 533, 132, 132,
+ /* 1320 */ 132, 132, 131, 131, 130, 130, 130, 129, 126, 450,
+ /* 1330 */ 551, 301, 1028, 1028, 1030, 107, 532, 545, 121, 568,
+ /* 1340 */ 1188, 4, 1126, 1576, 449, 576, 462, 7, 1282, 418,
+ /* 1350 */ 462, 350, 1435, 576, 518, 571, 544, 1127, 121, 568,
+ /* 1360 */ 442, 4, 1188, 464, 533, 1180, 1223, 9, 67, 67,
+ /* 1370 */ 487, 576, 1128, 303, 410, 571, 54, 54, 451, 576,
+ /* 1380 */ 123, 944, 576, 417, 576, 333, 943, 1379, 576, 236,
+ /* 1390 */ 565, 576, 1574, 564, 68, 68, 7, 576, 451, 362,
+ /* 1400 */ 419, 182, 69, 69, 541, 70, 70, 71, 71, 540,
+ /* 1410 */ 565, 72, 72, 484, 55, 55, 473, 1180, 296, 1040,
+ /* 1420 */ 56, 56, 296, 493, 541, 119, 119, 410, 1573, 542,
+ /* 1430 */ 569, 418, 7, 120, 1244, 451, 577, 451, 465, 1040,
+ /* 1440 */ 1028, 576, 1557, 552, 476, 119, 119, 527, 259, 121,
+ /* 1450 */ 568, 240, 4, 120, 576, 451, 577, 451, 576, 477,
+ /* 1460 */ 1028, 576, 156, 576, 57, 57, 571, 576, 286, 229,
+ /* 1470 */ 410, 336, 1028, 1028, 1030, 1031, 35, 59, 59, 219,
+ /* 1480 */ 983, 60, 60, 220, 73, 73, 74, 74, 984, 451,
+ /* 1490 */ 75, 75, 1028, 1028, 1030, 1031, 35, 96, 216, 291,
+ /* 1500 */ 552, 565, 1188, 318, 395, 395, 394, 276, 392, 576,
+ /* 1510 */ 485, 859, 474, 1311, 410, 541, 576, 417, 1530, 1144,
+ /* 1520 */ 540, 399, 1188, 292, 237, 1153, 326, 38, 23, 576,
+ /* 1530 */ 1040, 576, 20, 20, 325, 299, 119, 119, 164, 76,
+ /* 1540 */ 76, 1529, 121, 568, 120, 4, 451, 577, 451, 203,
+ /* 1550 */ 576, 1028, 141, 141, 142, 142, 576, 322, 39, 571,
+ /* 1560 */ 341, 1021, 110, 264, 239, 901, 900, 423, 242, 908,
+ /* 1570 */ 909, 370, 173, 77, 77, 43, 479, 1310, 264, 62,
+ /* 1580 */ 62, 369, 451, 1028, 1028, 1030, 1031, 35, 1601, 1192,
+ /* 1590 */ 453, 1092, 238, 291, 565, 163, 1309, 110, 395, 395,
+ /* 1600 */ 394, 276, 392, 986, 987, 859, 481, 346, 264, 110,
+ /* 1610 */ 1032, 489, 576, 1188, 503, 1088, 261, 261, 237, 576,
+ /* 1620 */ 326, 121, 568, 1040, 4, 347, 1376, 413, 325, 119,
+ /* 1630 */ 119, 948, 319, 567, 351, 78, 78, 120, 571, 451,
+ /* 1640 */ 577, 451, 79, 79, 1028, 354, 356, 576, 360, 1092,
+ /* 1650 */ 110, 576, 974, 942, 264, 123, 457, 358, 239, 576,
+ /* 1660 */ 519, 451, 939, 1104, 123, 1104, 173, 576, 1032, 43,
+ /* 1670 */ 63, 63, 1324, 565, 168, 168, 1028, 1028, 1030, 1031,
+ /* 1680 */ 35, 576, 169, 169, 1308, 872, 238, 157, 1589, 576,
+ /* 1690 */ 86, 86, 365, 89, 568, 375, 4, 1103, 941, 1103,
+ /* 1700 */ 123, 576, 1040, 1389, 64, 64, 1188, 1434, 119, 119,
+ /* 1710 */ 571, 576, 82, 82, 563, 576, 120, 165, 451, 577,
+ /* 1720 */ 451, 413, 1362, 1028, 144, 144, 319, 567, 576, 1374,
+ /* 1730 */ 562, 498, 279, 451, 83, 83, 1439, 576, 166, 166,
+ /* 1740 */ 576, 1289, 554, 576, 1280, 565, 576, 12, 576, 1268,
+ /* 1750 */ 457, 146, 146, 1267, 576, 1028, 1028, 1030, 1031, 35,
+ /* 1760 */ 140, 140, 1269, 167, 167, 1609, 160, 160, 1359, 150,
+ /* 1770 */ 150, 149, 149, 311, 1040, 576, 312, 147, 147, 313,
+ /* 1780 */ 119, 119, 222, 235, 576, 1188, 396, 576, 120, 576,
+ /* 1790 */ 451, 577, 451, 1192, 453, 1028, 508, 291, 148, 148,
+ /* 1800 */ 1421, 1612, 395, 395, 394, 276, 392, 85, 85, 859,
+ /* 1810 */ 87, 87, 84, 84, 553, 576, 294, 576, 1426, 338,
+ /* 1820 */ 339, 1425, 237, 300, 326, 1416, 1409, 1028, 1028, 1030,
+ /* 1830 */ 1031, 35, 325, 344, 403, 483, 226, 1307, 52, 52,
+ /* 1840 */ 58, 58, 368, 1371, 1502, 566, 1501, 121, 568, 221,
+ /* 1850 */ 4, 208, 268, 209, 390, 1244, 1549, 1188, 1372, 1370,
+ /* 1860 */ 1369, 1547, 239, 184, 571, 233, 421, 1241, 95, 218,
+ /* 1870 */ 173, 1507, 193, 43, 91, 94, 178, 186, 467, 188,
+ /* 1880 */ 468, 1422, 13, 189, 190, 191, 501, 451, 245, 108,
+ /* 1890 */ 238, 401, 1428, 1427, 1430, 475, 404, 1496, 197, 565,
+ /* 1900 */ 14, 490, 249, 101, 1518, 496, 349, 280, 251, 201,
+ /* 1910 */ 353, 499, 252, 406, 1270, 253, 517, 1327, 1326, 435,
+ /* 1920 */ 1325, 1318, 103, 893, 1296, 413, 227, 407, 1040, 1626,
+ /* 1930 */ 319, 567, 1625, 1297, 119, 119, 439, 367, 1317, 1295,
+ /* 1940 */ 1624, 526, 120, 440, 451, 577, 451, 1594, 309, 1028,
+ /* 1950 */ 310, 373, 266, 267, 457, 1580, 1579, 443, 138, 1394,
+ /* 1960 */ 552, 1393, 11, 1483, 384, 115, 317, 1350, 109, 536,
+ /* 1970 */ 42, 579, 382, 214, 1349, 388, 1198, 389, 275, 277,
+ /* 1980 */ 278, 1028, 1028, 1030, 1031, 35, 580, 1265, 414, 1260,
+ /* 1990 */ 170, 415, 183, 1534, 1535, 1533, 171, 154, 307, 1532,
+ /* 2000 */ 846, 223, 224, 88, 452, 215, 172, 321, 234, 1102,
+ /* 2010 */ 152, 1188, 1100, 329, 185, 174, 1223, 925, 187, 241,
+ /* 2020 */ 337, 244, 1116, 192, 175, 176, 424, 426, 97, 194,
+ /* 2030 */ 98, 99, 100, 177, 1119, 1115, 246, 247, 161, 24,
+ /* 2040 */ 248, 348, 1238, 264, 1108, 250, 495, 199, 198, 15,
+ /* 2050 */ 861, 500, 369, 254, 504, 509, 512, 200, 102, 25,
+ /* 2060 */ 179, 361, 26, 364, 104, 891, 308, 162, 105, 904,
+ /* 2070 */ 520, 106, 1185, 1069, 1155, 17, 228, 27, 1154, 283,
+ /* 2080 */ 285, 263, 978, 202, 972, 123, 28, 1175, 29, 30,
+ /* 2090 */ 1179, 1171, 31, 1173, 1160, 41, 32, 206, 548, 33,
+ /* 2100 */ 110, 1178, 1083, 8, 112, 1070, 113, 1068, 1072, 34,
+ /* 2110 */ 1073, 560, 1125, 269, 1124, 270, 36, 18, 1194, 1033,
+ /* 2120 */ 873, 151, 122, 37, 393, 271, 272, 572, 181, 1193,
+ /* 2130 */ 1256, 1256, 1256, 935, 1256, 1256, 1256, 1256, 1256, 1256,
+ /* 2140 */ 1256, 1617,
};
static const YYCODETYPE yy_lookahead[] = {
- /* 0 */ 193, 193, 193, 274, 275, 276, 193, 274, 275, 276,
- /* 10 */ 193, 223, 219, 225, 206, 210, 211, 212, 193, 19,
- /* 20 */ 219, 233, 216, 216, 217, 216, 217, 193, 295, 216,
- /* 30 */ 217, 31, 193, 216, 217, 193, 228, 213, 230, 39,
- /* 40 */ 206, 216, 217, 43, 44, 45, 46, 47, 48, 49,
- /* 50 */ 50, 51, 52, 53, 54, 55, 56, 57, 193, 19,
- /* 60 */ 185, 186, 187, 188, 189, 190, 253, 274, 275, 276,
- /* 70 */ 195, 193, 197, 193, 261, 274, 275, 276, 253, 204,
- /* 80 */ 238, 204, 81, 43, 44, 45, 46, 47, 48, 49,
- /* 90 */ 50, 51, 52, 53, 54, 55, 56, 57, 274, 275,
- /* 100 */ 276, 262, 102, 103, 104, 105, 106, 107, 108, 109,
- /* 110 */ 110, 111, 112, 113, 239, 240, 239, 240, 210, 211,
- /* 120 */ 212, 314, 315, 314, 59, 316, 86, 252, 88, 252,
- /* 130 */ 19, 314, 315, 256, 257, 113, 25, 72, 296, 138,
- /* 140 */ 139, 266, 102, 103, 104, 105, 106, 107, 108, 109,
+ /* 0 */ 194, 276, 277, 278, 216, 194, 194, 217, 194, 194,
+ /* 10 */ 194, 194, 224, 194, 194, 276, 277, 278, 204, 19,
+ /* 20 */ 206, 202, 297, 217, 218, 205, 207, 217, 205, 217,
+ /* 30 */ 218, 31, 217, 218, 217, 218, 29, 217, 218, 39,
+ /* 40 */ 33, 217, 220, 43, 44, 45, 46, 47, 48, 49,
+ /* 50 */ 50, 51, 52, 53, 54, 55, 56, 57, 312, 19,
+ /* 60 */ 240, 241, 316, 240, 241, 194, 46, 47, 48, 49,
+ /* 70 */ 22, 254, 65, 253, 254, 255, 253, 194, 255, 194,
+ /* 80 */ 263, 258, 259, 43, 44, 45, 46, 47, 48, 49,
+ /* 90 */ 50, 51, 52, 53, 54, 55, 56, 57, 276, 277,
+ /* 100 */ 278, 285, 102, 103, 104, 105, 106, 107, 108, 109,
+ /* 110 */ 110, 111, 112, 113, 59, 186, 187, 188, 189, 190,
+ /* 120 */ 191, 310, 239, 317, 318, 196, 86, 198, 88, 317,
+ /* 130 */ 19, 319, 317, 318, 205, 264, 25, 211, 212, 213,
+ /* 140 */ 205, 121, 102, 103, 104, 105, 106, 107, 108, 109,
/* 150 */ 110, 111, 112, 113, 43, 44, 45, 46, 47, 48,
- /* 160 */ 49, 50, 51, 52, 53, 54, 55, 56, 57, 81,
- /* 170 */ 292, 59, 292, 298, 108, 109, 110, 111, 112, 113,
- /* 180 */ 69, 116, 117, 118, 72, 106, 107, 193, 111, 112,
- /* 190 */ 113, 54, 55, 56, 57, 58, 102, 103, 104, 105,
- /* 200 */ 106, 107, 108, 109, 110, 111, 112, 113, 120, 25,
- /* 210 */ 216, 217, 145, 102, 103, 104, 105, 106, 107, 108,
- /* 220 */ 109, 110, 111, 112, 113, 231, 138, 139, 116, 117,
- /* 230 */ 118, 164, 153, 19, 155, 54, 55, 56, 57, 102,
+ /* 160 */ 49, 50, 51, 52, 53, 54, 55, 56, 57, 240,
+ /* 170 */ 241, 116, 117, 118, 119, 240, 241, 122, 123, 124,
+ /* 180 */ 69, 298, 253, 194, 255, 106, 107, 132, 253, 141,
+ /* 190 */ 255, 54, 55, 56, 57, 58, 207, 268, 102, 103,
+ /* 200 */ 104, 105, 106, 107, 108, 109, 110, 111, 112, 113,
+ /* 210 */ 214, 128, 129, 102, 103, 104, 105, 106, 107, 108,
+ /* 220 */ 109, 110, 111, 112, 113, 134, 25, 136, 137, 300,
+ /* 230 */ 165, 166, 153, 19, 155, 54, 55, 56, 57, 102,
/* 240 */ 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
- /* 250 */ 113, 128, 129, 46, 47, 48, 49, 43, 44, 45,
+ /* 250 */ 113, 108, 109, 110, 111, 112, 113, 43, 44, 45,
/* 260 */ 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
- /* 270 */ 56, 57, 216, 193, 25, 59, 193, 19, 165, 166,
- /* 280 */ 193, 67, 24, 102, 103, 104, 105, 106, 107, 108,
- /* 290 */ 109, 110, 111, 112, 113, 73, 216, 217, 59, 216,
- /* 300 */ 217, 43, 44, 45, 46, 47, 48, 49, 50, 51,
+ /* 270 */ 56, 57, 276, 277, 278, 113, 194, 19, 22, 23,
+ /* 280 */ 194, 67, 24, 102, 103, 104, 105, 106, 107, 108,
+ /* 290 */ 109, 110, 111, 112, 113, 220, 250, 59, 252, 217,
+ /* 300 */ 218, 43, 44, 45, 46, 47, 48, 49, 50, 51,
/* 310 */ 52, 53, 54, 55, 56, 57, 102, 103, 104, 105,
- /* 320 */ 106, 107, 108, 109, 110, 111, 112, 113, 121, 145,
- /* 330 */ 59, 193, 116, 117, 118, 119, 273, 204, 122, 123,
- /* 340 */ 124, 19, 20, 134, 22, 136, 137, 19, 132, 127,
- /* 350 */ 128, 129, 24, 22, 23, 116, 117, 118, 36, 193,
+ /* 320 */ 106, 107, 108, 109, 110, 111, 112, 113, 106, 107,
+ /* 330 */ 108, 109, 110, 111, 112, 113, 254, 59, 205, 138,
+ /* 340 */ 139, 19, 20, 194, 22, 263, 22, 23, 231, 25,
+ /* 350 */ 72, 276, 277, 278, 116, 117, 118, 101, 36, 76,
/* 360 */ 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
- /* 370 */ 112, 113, 239, 240, 311, 312, 215, 106, 107, 241,
- /* 380 */ 19, 59, 216, 217, 223, 252, 115, 116, 117, 118,
- /* 390 */ 151, 120, 26, 71, 193, 308, 309, 193, 149, 128,
- /* 400 */ 313, 216, 269, 81, 43, 44, 45, 46, 47, 48,
- /* 410 */ 49, 50, 51, 52, 53, 54, 55, 56, 57, 253,
- /* 420 */ 216, 217, 100, 95, 153, 59, 155, 261, 106, 107,
- /* 430 */ 25, 193, 101, 193, 193, 231, 114, 25, 116, 117,
- /* 440 */ 118, 113, 304, 121, 193, 204, 59, 119, 120, 121,
- /* 450 */ 122, 123, 124, 125, 216, 217, 193, 216, 217, 131,
- /* 460 */ 138, 139, 230, 102, 103, 104, 105, 106, 107, 108,
+ /* 370 */ 112, 113, 89, 240, 241, 92, 73, 194, 194, 73,
+ /* 380 */ 19, 59, 188, 189, 190, 191, 253, 81, 255, 151,
+ /* 390 */ 196, 25, 198, 71, 116, 117, 118, 311, 312, 205,
+ /* 400 */ 217, 218, 316, 81, 43, 44, 45, 46, 47, 48,
+ /* 410 */ 49, 50, 51, 52, 53, 54, 55, 56, 57, 270,
+ /* 420 */ 22, 23, 100, 25, 59, 101, 138, 139, 106, 107,
+ /* 430 */ 127, 128, 129, 127, 240, 241, 114, 254, 116, 117,
+ /* 440 */ 118, 76, 76, 121, 138, 139, 263, 253, 264, 255,
+ /* 450 */ 205, 275, 87, 19, 89, 89, 194, 92, 92, 199,
+ /* 460 */ 138, 139, 268, 102, 103, 104, 105, 106, 107, 108,
/* 470 */ 109, 110, 111, 112, 113, 153, 154, 155, 156, 157,
- /* 480 */ 239, 240, 116, 117, 118, 76, 193, 23, 19, 25,
- /* 490 */ 22, 253, 23, 252, 253, 108, 87, 204, 89, 261,
- /* 500 */ 198, 92, 261, 116, 117, 118, 193, 306, 307, 216,
- /* 510 */ 217, 150, 43, 44, 45, 46, 47, 48, 49, 50,
- /* 520 */ 51, 52, 53, 54, 55, 56, 57, 59, 193, 216,
- /* 530 */ 217, 19, 239, 240, 283, 23, 106, 107, 108, 109,
- /* 540 */ 110, 111, 112, 113, 73, 252, 253, 142, 308, 309,
- /* 550 */ 138, 139, 81, 313, 145, 43, 44, 45, 46, 47,
+ /* 480 */ 81, 116, 117, 118, 129, 240, 241, 224, 19, 226,
+ /* 490 */ 314, 315, 23, 25, 300, 59, 22, 234, 253, 101,
+ /* 500 */ 255, 236, 237, 26, 194, 183, 194, 152, 72, 22,
+ /* 510 */ 145, 150, 43, 44, 45, 46, 47, 48, 49, 50,
+ /* 520 */ 51, 52, 53, 54, 55, 56, 57, 217, 218, 217,
+ /* 530 */ 218, 19, 189, 59, 191, 23, 59, 138, 139, 196,
+ /* 540 */ 135, 198, 232, 283, 232, 140, 59, 287, 205, 275,
+ /* 550 */ 116, 205, 116, 117, 118, 43, 44, 45, 46, 47,
/* 560 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
- /* 570 */ 307, 102, 103, 104, 105, 106, 107, 108, 109, 110,
- /* 580 */ 111, 112, 113, 281, 116, 117, 118, 285, 23, 193,
- /* 590 */ 25, 119, 59, 193, 122, 123, 124, 59, 127, 203,
- /* 600 */ 59, 205, 19, 268, 132, 25, 23, 22, 193, 138,
- /* 610 */ 139, 249, 204, 251, 102, 103, 104, 105, 106, 107,
+ /* 570 */ 194, 102, 103, 104, 105, 106, 107, 108, 109, 110,
+ /* 580 */ 111, 112, 113, 240, 241, 194, 240, 241, 314, 315,
+ /* 590 */ 116, 117, 118, 116, 117, 118, 253, 194, 255, 253,
+ /* 600 */ 59, 255, 19, 116, 117, 118, 23, 22, 217, 218,
+ /* 610 */ 142, 268, 205, 275, 102, 103, 104, 105, 106, 107,
/* 620 */ 108, 109, 110, 111, 112, 113, 43, 44, 45, 46,
/* 630 */ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
- /* 640 */ 57, 19, 22, 23, 59, 23, 25, 239, 240, 116,
- /* 650 */ 117, 118, 193, 11, 116, 117, 118, 116, 117, 118,
- /* 660 */ 252, 269, 22, 193, 15, 43, 44, 45, 46, 47,
+ /* 640 */ 57, 19, 194, 300, 59, 23, 119, 240, 241, 122,
+ /* 650 */ 123, 124, 314, 315, 194, 236, 237, 194, 117, 132,
+ /* 660 */ 253, 81, 255, 205, 59, 43, 44, 45, 46, 47,
/* 670 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
- /* 680 */ 273, 143, 193, 118, 143, 102, 103, 104, 105, 106,
- /* 690 */ 107, 108, 109, 110, 111, 112, 113, 76, 118, 59,
- /* 700 */ 241, 116, 117, 118, 304, 216, 217, 292, 143, 60,
- /* 710 */ 89, 241, 19, 92, 193, 193, 23, 22, 311, 312,
- /* 720 */ 231, 101, 22, 143, 102, 103, 104, 105, 106, 107,
+ /* 680 */ 217, 218, 194, 194, 194, 102, 103, 104, 105, 106,
+ /* 690 */ 107, 108, 109, 110, 111, 112, 113, 294, 240, 241,
+ /* 700 */ 120, 116, 117, 118, 59, 194, 217, 218, 211, 212,
+ /* 710 */ 213, 253, 19, 255, 194, 19, 23, 254, 138, 139,
+ /* 720 */ 24, 232, 117, 194, 102, 103, 104, 105, 106, 107,
/* 730 */ 108, 109, 110, 111, 112, 113, 43, 44, 45, 46,
/* 740 */ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
- /* 750 */ 57, 19, 193, 193, 59, 23, 116, 117, 118, 59,
- /* 760 */ 201, 21, 241, 304, 193, 206, 127, 128, 129, 193,
- /* 770 */ 128, 129, 235, 236, 304, 43, 44, 45, 46, 47,
+ /* 750 */ 57, 19, 264, 108, 76, 23, 127, 128, 129, 311,
+ /* 760 */ 312, 116, 117, 118, 316, 87, 306, 89, 308, 194,
+ /* 770 */ 92, 22, 59, 194, 22, 43, 44, 45, 46, 47,
/* 780 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
- /* 790 */ 22, 193, 216, 217, 193, 102, 103, 104, 105, 106,
- /* 800 */ 107, 108, 109, 110, 111, 112, 113, 231, 193, 193,
- /* 810 */ 193, 116, 117, 118, 216, 217, 116, 117, 118, 226,
- /* 820 */ 80, 193, 19, 235, 236, 304, 23, 211, 212, 231,
- /* 830 */ 204, 216, 217, 205, 102, 103, 104, 105, 106, 107,
+ /* 790 */ 194, 95, 217, 218, 265, 102, 103, 104, 105, 106,
+ /* 800 */ 107, 108, 109, 110, 111, 112, 113, 232, 59, 113,
+ /* 810 */ 25, 59, 194, 217, 218, 119, 120, 121, 122, 123,
+ /* 820 */ 124, 125, 19, 145, 194, 194, 23, 131, 232, 116,
+ /* 830 */ 117, 118, 35, 194, 102, 103, 104, 105, 106, 107,
/* 840 */ 108, 109, 110, 111, 112, 113, 43, 44, 45, 46,
/* 850 */ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
- /* 860 */ 57, 19, 193, 123, 76, 239, 240, 193, 253, 239,
- /* 870 */ 240, 239, 240, 244, 106, 107, 193, 89, 252, 193,
- /* 880 */ 92, 59, 252, 254, 252, 43, 44, 45, 46, 47,
+ /* 860 */ 57, 19, 194, 66, 194, 116, 117, 118, 116, 117,
+ /* 870 */ 118, 74, 242, 294, 194, 194, 206, 23, 194, 25,
+ /* 880 */ 194, 111, 112, 113, 25, 43, 44, 45, 46, 47,
/* 890 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
- /* 900 */ 284, 161, 216, 217, 193, 102, 103, 104, 105, 106,
- /* 910 */ 107, 108, 109, 110, 111, 112, 113, 231, 193, 244,
- /* 920 */ 187, 188, 189, 190, 7, 8, 9, 309, 195, 254,
- /* 930 */ 197, 313, 19, 127, 128, 129, 262, 204, 22, 117,
- /* 940 */ 24, 216, 217, 273, 102, 103, 104, 105, 106, 107,
+ /* 900 */ 24, 194, 194, 217, 218, 102, 103, 104, 105, 106,
+ /* 910 */ 107, 108, 109, 110, 111, 112, 113, 241, 232, 194,
+ /* 920 */ 212, 213, 242, 242, 217, 218, 242, 130, 11, 253,
+ /* 930 */ 194, 255, 19, 265, 149, 59, 306, 194, 308, 232,
+ /* 940 */ 309, 310, 217, 218, 102, 103, 104, 105, 106, 107,
/* 950 */ 108, 109, 110, 111, 112, 113, 43, 44, 45, 46,
/* 960 */ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
- /* 970 */ 57, 193, 239, 240, 193, 59, 19, 188, 253, 190,
- /* 980 */ 193, 311, 312, 16, 195, 252, 197, 193, 19, 301,
- /* 990 */ 302, 135, 193, 204, 216, 217, 140, 216, 217, 266,
- /* 1000 */ 204, 159, 45, 46, 47, 48, 49, 50, 51, 52,
+ /* 970 */ 57, 194, 194, 59, 194, 239, 19, 194, 25, 254,
+ /* 980 */ 303, 304, 23, 194, 25, 126, 306, 306, 308, 308,
+ /* 990 */ 306, 271, 308, 117, 286, 217, 218, 217, 218, 194,
+ /* 1000 */ 194, 159, 45, 46, 47, 48, 49, 50, 51, 52,
/* 1010 */ 53, 54, 55, 56, 57, 102, 103, 104, 105, 106,
- /* 1020 */ 107, 108, 109, 110, 111, 112, 113, 12, 239, 240,
- /* 1030 */ 193, 298, 238, 117, 253, 239, 240, 238, 259, 260,
- /* 1040 */ 193, 252, 27, 193, 77, 193, 79, 204, 252, 262,
- /* 1050 */ 193, 299, 300, 193, 100, 266, 278, 42, 204, 102,
+ /* 1020 */ 107, 108, 109, 110, 111, 112, 113, 59, 239, 194,
+ /* 1030 */ 116, 117, 118, 260, 254, 194, 240, 241, 194, 233,
+ /* 1040 */ 205, 240, 241, 205, 239, 128, 129, 270, 265, 253,
+ /* 1050 */ 194, 255, 217, 218, 253, 194, 255, 143, 280, 102,
/* 1060 */ 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
- /* 1070 */ 113, 117, 159, 216, 217, 121, 216, 217, 63, 193,
- /* 1080 */ 193, 193, 239, 240, 115, 116, 193, 298, 73, 240,
- /* 1090 */ 238, 231, 19, 239, 240, 252, 22, 24, 211, 212,
- /* 1100 */ 263, 252, 216, 217, 216, 217, 252, 153, 154, 155,
- /* 1110 */ 253, 193, 19, 144, 213, 268, 43, 44, 45, 46,
+ /* 1070 */ 113, 118, 159, 217, 218, 240, 241, 118, 240, 241,
+ /* 1080 */ 194, 194, 194, 239, 116, 117, 118, 22, 253, 254,
+ /* 1090 */ 255, 253, 19, 255, 233, 194, 143, 24, 263, 212,
+ /* 1100 */ 213, 194, 143, 217, 218, 217, 218, 261, 262, 271,
+ /* 1110 */ 254, 143, 19, 7, 8, 9, 43, 44, 45, 46,
/* 1120 */ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
- /* 1130 */ 57, 193, 19, 59, 216, 217, 43, 44, 45, 46,
+ /* 1130 */ 57, 16, 19, 22, 23, 294, 43, 44, 45, 46,
/* 1140 */ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
- /* 1150 */ 57, 193, 19, 24, 216, 217, 43, 44, 45, 46,
+ /* 1150 */ 57, 312, 194, 214, 21, 316, 43, 44, 45, 46,
/* 1160 */ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
- /* 1170 */ 57, 284, 193, 208, 209, 102, 103, 104, 105, 106,
- /* 1180 */ 107, 108, 109, 110, 111, 112, 113, 286, 59, 193,
- /* 1190 */ 232, 117, 291, 193, 193, 102, 103, 104, 105, 106,
- /* 1200 */ 107, 108, 109, 110, 111, 112, 113, 193, 204, 22,
- /* 1210 */ 23, 193, 25, 66, 193, 102, 103, 104, 105, 106,
- /* 1220 */ 107, 108, 109, 110, 111, 112, 113, 193, 193, 193,
- /* 1230 */ 216, 217, 85, 193, 238, 19, 16, 216, 217, 238,
- /* 1240 */ 193, 94, 193, 239, 240, 231, 117, 268, 35, 116,
- /* 1250 */ 216, 217, 216, 217, 22, 23, 252, 25, 208, 209,
+ /* 1170 */ 57, 106, 107, 286, 194, 102, 103, 104, 105, 106,
+ /* 1180 */ 107, 108, 109, 110, 111, 112, 113, 207, 158, 59,
+ /* 1190 */ 160, 22, 77, 24, 79, 102, 103, 104, 105, 106,
+ /* 1200 */ 107, 108, 109, 110, 111, 112, 113, 194, 194, 229,
+ /* 1210 */ 194, 231, 101, 80, 22, 102, 103, 104, 105, 106,
+ /* 1220 */ 107, 108, 109, 110, 111, 112, 113, 288, 59, 12,
+ /* 1230 */ 217, 218, 293, 217, 218, 19, 106, 107, 59, 19,
+ /* 1240 */ 16, 127, 128, 129, 27, 115, 116, 117, 118, 194,
+ /* 1250 */ 120, 59, 22, 194, 24, 194, 123, 100, 128, 42,
/* 1260 */ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
- /* 1270 */ 54, 55, 56, 57, 193, 193, 19, 5, 59, 66,
- /* 1280 */ 193, 263, 10, 11, 12, 13, 14, 74, 101, 17,
- /* 1290 */ 193, 46, 193, 146, 193, 76, 213, 77, 263, 79,
- /* 1300 */ 12, 260, 30, 46, 32, 264, 87, 193, 89, 29,
- /* 1310 */ 263, 92, 40, 33, 232, 27, 193, 108, 102, 103,
+ /* 1270 */ 54, 55, 56, 57, 117, 194, 217, 218, 121, 100,
+ /* 1280 */ 63, 194, 245, 153, 194, 155, 117, 19, 115, 194,
+ /* 1290 */ 73, 214, 194, 256, 161, 116, 117, 194, 217, 218,
+ /* 1300 */ 121, 77, 194, 79, 217, 218, 194, 217, 218, 117,
+ /* 1310 */ 153, 154, 155, 254, 46, 217, 218, 144, 102, 103,
/* 1320 */ 104, 105, 106, 107, 108, 109, 110, 111, 112, 113,
- /* 1330 */ 42, 138, 139, 101, 193, 116, 117, 118, 19, 20,
- /* 1340 */ 255, 22, 70, 130, 135, 65, 256, 257, 193, 140,
- /* 1350 */ 78, 63, 193, 81, 193, 36, 193, 216, 217, 193,
- /* 1360 */ 115, 193, 263, 193, 145, 268, 59, 48, 193, 193,
- /* 1370 */ 98, 193, 115, 193, 291, 216, 217, 193, 59, 216,
- /* 1380 */ 217, 161, 216, 217, 216, 217, 216, 217, 131, 193,
- /* 1390 */ 71, 193, 216, 217, 216, 217, 216, 217, 193, 260,
- /* 1400 */ 216, 217, 19, 264, 85, 133, 244, 100, 193, 90,
- /* 1410 */ 138, 139, 216, 217, 216, 217, 254, 244, 193, 100,
- /* 1420 */ 193, 216, 217, 116, 117, 106, 107, 254, 121, 193,
- /* 1430 */ 115, 216, 217, 114, 162, 116, 117, 118, 115, 244,
- /* 1440 */ 121, 216, 217, 216, 217, 193, 309, 193, 31, 254,
- /* 1450 */ 313, 309, 216, 217, 309, 313, 39, 193, 313, 309,
- /* 1460 */ 153, 154, 155, 313, 193, 150, 25, 144, 216, 217,
- /* 1470 */ 216, 217, 153, 154, 155, 156, 157, 0, 1, 2,
- /* 1480 */ 216, 217, 5, 149, 150, 22, 193, 10, 11, 12,
- /* 1490 */ 13, 14, 193, 158, 17, 160, 193, 19, 20, 116,
- /* 1500 */ 22, 25, 193, 24, 22, 193, 24, 30, 226, 32,
- /* 1510 */ 19, 20, 226, 22, 36, 193, 53, 40, 193, 216,
- /* 1520 */ 217, 193, 23, 193, 25, 216, 217, 36, 216, 217,
- /* 1530 */ 193, 99, 193, 193, 22, 193, 193, 59, 216, 217,
- /* 1540 */ 193, 216, 217, 193, 216, 217, 193, 70, 129, 71,
- /* 1550 */ 59, 129, 193, 216, 217, 78, 216, 217, 81, 216,
- /* 1560 */ 217, 193, 71, 85, 193, 133, 193, 126, 90, 216,
- /* 1570 */ 217, 152, 258, 61, 152, 98, 85, 193, 100, 193,
- /* 1580 */ 23, 90, 25, 121, 106, 107, 23, 216, 217, 216,
- /* 1590 */ 217, 100, 114, 131, 116, 117, 118, 106, 107, 121,
- /* 1600 */ 216, 217, 216, 217, 193, 114, 193, 116, 117, 118,
- /* 1610 */ 133, 22, 121, 193, 59, 138, 139, 193, 142, 193,
- /* 1620 */ 141, 23, 23, 25, 25, 120, 121, 216, 217, 216,
- /* 1630 */ 217, 153, 154, 155, 156, 157, 216, 217, 19, 162,
- /* 1640 */ 216, 217, 216, 217, 153, 154, 155, 156, 157, 1,
- /* 1650 */ 2, 193, 59, 5, 19, 20, 318, 22, 10, 11,
- /* 1660 */ 12, 13, 14, 193, 59, 17, 193, 23, 23, 25,
- /* 1670 */ 25, 36, 117, 193, 216, 217, 193, 23, 30, 25,
- /* 1680 */ 32, 19, 20, 23, 22, 25, 216, 217, 40, 216,
- /* 1690 */ 217, 7, 8, 23, 59, 25, 83, 84, 36, 23,
- /* 1700 */ 193, 25, 23, 23, 25, 25, 71, 153, 145, 155,
- /* 1710 */ 117, 153, 23, 155, 25, 23, 97, 25, 70, 193,
- /* 1720 */ 193, 59, 117, 236, 193, 193, 78, 193, 193, 81,
- /* 1730 */ 141, 193, 193, 71, 193, 100, 288, 287, 242, 255,
- /* 1740 */ 255, 106, 107, 108, 255, 255, 98, 243, 297, 114,
- /* 1750 */ 214, 116, 117, 118, 245, 191, 121, 271, 293, 267,
- /* 1760 */ 267, 246, 100, 246, 245, 271, 271, 293, 106, 107,
- /* 1770 */ 220, 271, 229, 225, 249, 219, 114, 259, 116, 117,
- /* 1780 */ 118, 133, 259, 121, 219, 219, 138, 139, 153, 154,
- /* 1790 */ 155, 156, 157, 280, 249, 243, 19, 20, 245, 22,
- /* 1800 */ 196, 259, 140, 259, 60, 297, 141, 297, 200, 200,
- /* 1810 */ 162, 38, 200, 36, 294, 153, 154, 155, 156, 157,
- /* 1820 */ 151, 150, 294, 283, 22, 43, 234, 18, 237, 200,
- /* 1830 */ 270, 272, 237, 237, 237, 18, 59, 199, 270, 149,
- /* 1840 */ 246, 272, 272, 200, 234, 234, 246, 246, 71, 246,
- /* 1850 */ 199, 158, 290, 62, 22, 200, 19, 20, 199, 22,
- /* 1860 */ 289, 221, 221, 200, 200, 199, 199, 115, 218, 64,
- /* 1870 */ 218, 218, 22, 36, 227, 126, 227, 100, 165, 221,
- /* 1880 */ 224, 224, 24, 106, 107, 312, 218, 305, 113, 282,
- /* 1890 */ 91, 114, 220, 116, 117, 118, 59, 282, 121, 218,
- /* 1900 */ 218, 218, 200, 317, 317, 82, 221, 265, 71, 148,
- /* 1910 */ 145, 265, 22, 277, 200, 158, 279, 140, 147, 25,
- /* 1920 */ 146, 202, 248, 250, 249, 247, 13, 250, 194, 194,
- /* 1930 */ 153, 154, 155, 156, 157, 6, 303, 100, 192, 192,
- /* 1940 */ 246, 213, 192, 106, 107, 207, 213, 207, 222, 213,
- /* 1950 */ 213, 114, 222, 116, 117, 118, 214, 214, 121, 4,
- /* 1960 */ 207, 213, 3, 22, 303, 15, 163, 16, 23, 23,
- /* 1970 */ 139, 151, 130, 25, 20, 142, 24, 16, 144, 1,
- /* 1980 */ 142, 130, 130, 61, 37, 53, 300, 151, 53, 53,
- /* 1990 */ 153, 154, 155, 156, 157, 53, 130, 116, 34, 1,
- /* 2000 */ 141, 5, 22, 115, 161, 68, 25, 68, 75, 41,
- /* 2010 */ 141, 115, 24, 20, 19, 131, 125, 23, 28, 22,
- /* 2020 */ 67, 22, 22, 22, 67, 59, 24, 96, 22, 67,
- /* 2030 */ 23, 149, 22, 25, 23, 23, 23, 22, 34, 141,
- /* 2040 */ 37, 97, 23, 23, 116, 22, 143, 25, 34, 75,
- /* 2050 */ 34, 34, 34, 88, 75, 34, 86, 23, 22, 34,
- /* 2060 */ 93, 24, 34, 25, 25, 142, 142, 23, 44, 23,
- /* 2070 */ 23, 23, 23, 11, 23, 25, 22, 22, 22, 141,
- /* 2080 */ 23, 23, 22, 22, 25, 15, 1, 23, 25, 1,
- /* 2090 */ 141, 135, 319, 319, 319, 319, 319, 319, 319, 141,
- /* 2100 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319,
- /* 2110 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319,
- /* 2120 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319,
- /* 2130 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319,
- /* 2140 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319,
- /* 2150 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319,
- /* 2160 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319,
- /* 2170 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319,
- /* 2180 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319,
- /* 2190 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319,
- /* 2200 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319,
- /* 2210 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319,
- /* 2220 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319,
- /* 2230 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319,
- /* 2240 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319,
- /* 2250 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319,
- /* 2260 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319,
- /* 2270 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319,
- /* 2280 */ 319, 319, 319, 319, 319,
+ /* 1330 */ 232, 270, 153, 154, 155, 115, 116, 66, 19, 20,
+ /* 1340 */ 183, 22, 12, 312, 254, 194, 262, 316, 209, 210,
+ /* 1350 */ 266, 239, 194, 194, 108, 36, 85, 27, 19, 20,
+ /* 1360 */ 265, 22, 183, 245, 144, 94, 25, 48, 217, 218,
+ /* 1370 */ 293, 194, 42, 270, 256, 36, 217, 218, 59, 194,
+ /* 1380 */ 25, 135, 194, 115, 194, 161, 140, 194, 194, 15,
+ /* 1390 */ 71, 194, 312, 63, 217, 218, 316, 194, 59, 131,
+ /* 1400 */ 301, 302, 217, 218, 85, 217, 218, 217, 218, 90,
+ /* 1410 */ 71, 217, 218, 19, 217, 218, 245, 146, 262, 100,
+ /* 1420 */ 217, 218, 266, 265, 85, 106, 107, 256, 312, 90,
+ /* 1430 */ 209, 210, 316, 114, 60, 116, 117, 118, 194, 100,
+ /* 1440 */ 121, 194, 194, 145, 115, 106, 107, 19, 46, 19,
+ /* 1450 */ 20, 24, 22, 114, 194, 116, 117, 118, 194, 245,
+ /* 1460 */ 121, 194, 164, 194, 217, 218, 36, 194, 258, 259,
+ /* 1470 */ 256, 194, 153, 154, 155, 156, 157, 217, 218, 150,
+ /* 1480 */ 31, 217, 218, 142, 217, 218, 217, 218, 39, 59,
+ /* 1490 */ 217, 218, 153, 154, 155, 156, 157, 149, 150, 5,
+ /* 1500 */ 145, 71, 183, 245, 10, 11, 12, 13, 14, 194,
+ /* 1510 */ 116, 17, 129, 227, 256, 85, 194, 115, 194, 23,
+ /* 1520 */ 90, 25, 183, 99, 30, 97, 32, 22, 22, 194,
+ /* 1530 */ 100, 194, 217, 218, 40, 152, 106, 107, 23, 217,
+ /* 1540 */ 218, 194, 19, 20, 114, 22, 116, 117, 118, 257,
+ /* 1550 */ 194, 121, 217, 218, 217, 218, 194, 133, 53, 36,
+ /* 1560 */ 23, 23, 25, 25, 70, 120, 121, 61, 141, 7,
+ /* 1570 */ 8, 121, 78, 217, 218, 81, 23, 227, 25, 217,
+ /* 1580 */ 218, 131, 59, 153, 154, 155, 156, 157, 0, 1,
+ /* 1590 */ 2, 59, 98, 5, 71, 23, 227, 25, 10, 11,
+ /* 1600 */ 12, 13, 14, 83, 84, 17, 23, 23, 25, 25,
+ /* 1610 */ 59, 194, 194, 183, 23, 23, 25, 25, 30, 194,
+ /* 1620 */ 32, 19, 20, 100, 22, 194, 194, 133, 40, 106,
+ /* 1630 */ 107, 108, 138, 139, 194, 217, 218, 114, 36, 116,
+ /* 1640 */ 117, 118, 217, 218, 121, 194, 194, 194, 23, 117,
+ /* 1650 */ 25, 194, 23, 23, 25, 25, 162, 194, 70, 194,
+ /* 1660 */ 145, 59, 23, 153, 25, 155, 78, 194, 117, 81,
+ /* 1670 */ 217, 218, 194, 71, 217, 218, 153, 154, 155, 156,
+ /* 1680 */ 157, 194, 217, 218, 194, 23, 98, 25, 321, 194,
+ /* 1690 */ 217, 218, 194, 19, 20, 194, 22, 153, 23, 155,
+ /* 1700 */ 25, 194, 100, 194, 217, 218, 183, 194, 106, 107,
+ /* 1710 */ 36, 194, 217, 218, 237, 194, 114, 243, 116, 117,
+ /* 1720 */ 118, 133, 194, 121, 217, 218, 138, 139, 194, 194,
+ /* 1730 */ 194, 290, 289, 59, 217, 218, 194, 194, 217, 218,
+ /* 1740 */ 194, 194, 140, 194, 194, 71, 194, 244, 194, 194,
+ /* 1750 */ 162, 217, 218, 194, 194, 153, 154, 155, 156, 157,
+ /* 1760 */ 217, 218, 194, 217, 218, 194, 217, 218, 257, 217,
+ /* 1770 */ 218, 217, 218, 257, 100, 194, 257, 217, 218, 257,
+ /* 1780 */ 106, 107, 215, 299, 194, 183, 192, 194, 114, 194,
+ /* 1790 */ 116, 117, 118, 1, 2, 121, 221, 5, 217, 218,
+ /* 1800 */ 273, 197, 10, 11, 12, 13, 14, 217, 218, 17,
+ /* 1810 */ 217, 218, 217, 218, 140, 194, 246, 194, 273, 295,
+ /* 1820 */ 247, 273, 30, 247, 32, 269, 269, 153, 154, 155,
+ /* 1830 */ 156, 157, 40, 246, 273, 295, 230, 226, 217, 218,
+ /* 1840 */ 217, 218, 220, 261, 220, 282, 220, 19, 20, 244,
+ /* 1850 */ 22, 250, 141, 250, 246, 60, 201, 183, 261, 261,
+ /* 1860 */ 261, 201, 70, 299, 36, 299, 201, 38, 151, 150,
+ /* 1870 */ 78, 285, 22, 81, 296, 296, 43, 235, 18, 238,
+ /* 1880 */ 201, 274, 272, 238, 238, 238, 18, 59, 200, 149,
+ /* 1890 */ 98, 247, 274, 274, 235, 247, 247, 247, 235, 71,
+ /* 1900 */ 272, 201, 200, 158, 292, 62, 291, 201, 200, 22,
+ /* 1910 */ 201, 222, 200, 222, 201, 200, 115, 219, 219, 64,
+ /* 1920 */ 219, 228, 22, 126, 221, 133, 165, 222, 100, 225,
+ /* 1930 */ 138, 139, 225, 219, 106, 107, 24, 219, 228, 219,
+ /* 1940 */ 219, 307, 114, 113, 116, 117, 118, 315, 284, 121,
+ /* 1950 */ 284, 222, 201, 91, 162, 320, 320, 82, 148, 267,
+ /* 1960 */ 145, 267, 22, 279, 201, 158, 281, 251, 147, 146,
+ /* 1970 */ 25, 203, 250, 249, 251, 248, 13, 247, 195, 195,
+ /* 1980 */ 6, 153, 154, 155, 156, 157, 193, 193, 305, 193,
+ /* 1990 */ 208, 305, 302, 214, 214, 214, 208, 223, 223, 214,
+ /* 2000 */ 4, 215, 215, 214, 3, 22, 208, 163, 15, 23,
+ /* 2010 */ 16, 183, 23, 139, 151, 130, 25, 20, 142, 24,
+ /* 2020 */ 16, 144, 1, 142, 130, 130, 61, 37, 53, 151,
+ /* 2030 */ 53, 53, 53, 130, 116, 1, 34, 141, 5, 22,
+ /* 2040 */ 115, 161, 75, 25, 68, 141, 41, 115, 68, 24,
+ /* 2050 */ 20, 19, 131, 125, 67, 67, 96, 22, 22, 22,
+ /* 2060 */ 37, 23, 22, 24, 22, 59, 67, 23, 149, 28,
+ /* 2070 */ 22, 25, 23, 23, 23, 22, 141, 34, 97, 23,
+ /* 2080 */ 23, 34, 116, 22, 143, 25, 34, 75, 34, 34,
+ /* 2090 */ 75, 88, 34, 86, 23, 22, 34, 25, 24, 34,
+ /* 2100 */ 25, 93, 23, 44, 142, 23, 142, 23, 23, 22,
+ /* 2110 */ 11, 25, 23, 25, 23, 22, 22, 22, 1, 23,
+ /* 2120 */ 23, 23, 22, 22, 15, 141, 141, 25, 25, 1,
+ /* 2130 */ 322, 322, 322, 135, 322, 322, 322, 322, 322, 322,
+ /* 2140 */ 322, 141, 322, 322, 322, 322, 322, 322, 322, 322,
+ /* 2150 */ 322, 322, 322, 322, 322, 322, 322, 322, 322, 322,
+ /* 2160 */ 322, 322, 322, 322, 322, 322, 322, 322, 322, 322,
+ /* 2170 */ 322, 322, 322, 322, 322, 322, 322, 322, 322, 322,
+ /* 2180 */ 322, 322, 322, 322, 322, 322, 322, 322, 322, 322,
+ /* 2190 */ 322, 322, 322, 322, 322, 322, 322, 322, 322, 322,
+ /* 2200 */ 322, 322, 322, 322, 322, 322, 322, 322, 322, 322,
+ /* 2210 */ 322, 322, 322, 322, 322, 322, 322, 322, 322, 322,
+ /* 2220 */ 322, 322, 322, 322, 322, 322, 322, 322, 322, 322,
+ /* 2230 */ 322, 322, 322, 322, 322, 322, 322, 322, 322, 322,
+ /* 2240 */ 322, 322, 322, 322, 322, 322, 322, 322, 322, 322,
+ /* 2250 */ 322, 322, 322, 322, 322, 322, 322, 322, 322, 322,
+ /* 2260 */ 322, 322, 322, 322, 322, 322, 322, 322, 322, 322,
+ /* 2270 */ 322, 322, 322, 322, 322, 322, 322, 322, 322, 322,
+ /* 2280 */ 322, 322, 322, 322, 322, 322, 322, 322, 322, 322,
+ /* 2290 */ 322, 322, 322, 322, 322, 322, 322, 322, 322, 322,
+ /* 2300 */ 322, 322, 322, 322, 322, 322, 322, 322, 322, 322,
+ /* 2310 */ 322, 322, 322, 322, 322, 322, 322, 322, 322, 322,
+ /* 2320 */ 322, 322, 322, 322, 322, 322, 322, 322,
};
-#define YY_SHIFT_COUNT (578)
+#define YY_SHIFT_COUNT (582)
#define YY_SHIFT_MIN (0)
-#define YY_SHIFT_MAX (2088)
+#define YY_SHIFT_MAX (2128)
static const unsigned short int yy_shift_ofst[] = {
- /* 0 */ 1648, 1477, 1272, 322, 322, 1, 1319, 1478, 1491, 1837,
- /* 10 */ 1837, 1837, 471, 0, 0, 214, 1093, 1837, 1837, 1837,
- /* 20 */ 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837,
- /* 30 */ 1837, 271, 271, 1219, 1219, 216, 88, 1, 1, 1,
- /* 40 */ 1, 1, 40, 111, 258, 361, 469, 512, 583, 622,
- /* 50 */ 693, 732, 803, 842, 913, 1073, 1093, 1093, 1093, 1093,
- /* 60 */ 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
- /* 70 */ 1093, 1093, 1093, 1093, 1113, 1093, 1216, 957, 957, 1635,
- /* 80 */ 1662, 1777, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837,
- /* 90 */ 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837,
- /* 100 */ 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837,
- /* 110 */ 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837,
- /* 120 */ 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837,
- /* 130 */ 1837, 137, 181, 181, 181, 181, 181, 181, 181, 94,
- /* 140 */ 430, 66, 65, 112, 366, 533, 533, 740, 1257, 533,
- /* 150 */ 533, 79, 79, 533, 412, 412, 412, 77, 412, 123,
- /* 160 */ 113, 113, 113, 22, 22, 2100, 2100, 328, 328, 328,
- /* 170 */ 239, 468, 468, 468, 468, 1015, 1015, 409, 366, 1187,
- /* 180 */ 1232, 533, 533, 533, 533, 533, 533, 533, 533, 533,
- /* 190 */ 533, 533, 533, 533, 533, 533, 533, 533, 533, 533,
- /* 200 */ 533, 969, 621, 621, 533, 642, 788, 788, 1133, 1133,
- /* 210 */ 822, 822, 67, 1193, 2100, 2100, 2100, 2100, 2100, 2100,
- /* 220 */ 2100, 1307, 954, 954, 585, 472, 640, 387, 695, 538,
- /* 230 */ 541, 700, 533, 533, 533, 533, 533, 533, 533, 533,
- /* 240 */ 533, 533, 222, 533, 533, 533, 533, 533, 533, 533,
- /* 250 */ 533, 533, 533, 533, 533, 1213, 1213, 1213, 533, 533,
- /* 260 */ 533, 565, 533, 533, 533, 916, 1147, 533, 533, 1288,
- /* 270 */ 533, 533, 533, 533, 533, 533, 533, 533, 639, 1280,
- /* 280 */ 209, 1129, 1129, 1129, 1129, 580, 209, 209, 1209, 768,
- /* 290 */ 917, 649, 1315, 1334, 405, 1334, 1383, 249, 1315, 1315,
- /* 300 */ 249, 1315, 405, 1383, 1441, 464, 1245, 1417, 1417, 1417,
- /* 310 */ 1323, 1323, 1323, 1323, 184, 184, 1335, 1476, 856, 1482,
- /* 320 */ 1744, 1744, 1665, 1665, 1773, 1773, 1665, 1669, 1671, 1802,
- /* 330 */ 1782, 1809, 1809, 1809, 1809, 1665, 1817, 1690, 1671, 1671,
- /* 340 */ 1690, 1802, 1782, 1690, 1782, 1690, 1665, 1817, 1693, 1791,
- /* 350 */ 1665, 1817, 1832, 1665, 1817, 1665, 1817, 1832, 1752, 1752,
- /* 360 */ 1752, 1805, 1850, 1850, 1832, 1752, 1749, 1752, 1805, 1752,
- /* 370 */ 1752, 1713, 1858, 1775, 1775, 1832, 1665, 1799, 1799, 1823,
- /* 380 */ 1823, 1761, 1765, 1890, 1665, 1757, 1761, 1771, 1774, 1690,
- /* 390 */ 1894, 1913, 1913, 1929, 1929, 1929, 2100, 2100, 2100, 2100,
- /* 400 */ 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100,
- /* 410 */ 2100, 207, 1220, 331, 620, 967, 806, 1074, 1499, 1432,
- /* 420 */ 1463, 1479, 1419, 1422, 1557, 1512, 1598, 1599, 1644, 1645,
- /* 430 */ 1654, 1660, 1555, 1505, 1684, 1462, 1670, 1563, 1619, 1593,
- /* 440 */ 1676, 1679, 1613, 1680, 1554, 1558, 1689, 1692, 1605, 1589,
- /* 450 */ 1955, 1959, 1941, 1803, 1950, 1951, 1945, 1946, 1831, 1820,
- /* 460 */ 1842, 1948, 1948, 1952, 1833, 1954, 1834, 1961, 1978, 1838,
- /* 470 */ 1851, 1948, 1852, 1922, 1947, 1948, 1836, 1932, 1935, 1936,
- /* 480 */ 1942, 1866, 1881, 1964, 1859, 1998, 1996, 1980, 1888, 1843,
- /* 490 */ 1937, 1981, 1939, 1933, 1968, 1869, 1896, 1988, 1993, 1995,
- /* 500 */ 1884, 1891, 1997, 1953, 1999, 2000, 1994, 2001, 1957, 1966,
- /* 510 */ 2002, 1931, 1990, 2006, 1962, 2003, 2007, 2004, 1882, 2010,
- /* 520 */ 2011, 2012, 2008, 2013, 2015, 1944, 1898, 2019, 2020, 1928,
- /* 530 */ 2014, 2023, 1903, 2022, 2016, 2017, 2018, 2021, 1965, 1974,
- /* 540 */ 1970, 2024, 1979, 1967, 2025, 2034, 2036, 2037, 2038, 2039,
- /* 550 */ 2028, 1923, 1924, 2044, 2022, 2046, 2047, 2048, 2049, 2050,
- /* 560 */ 2051, 2054, 2062, 2055, 2056, 2057, 2058, 2060, 2061, 2059,
- /* 570 */ 1956, 1938, 1949, 1958, 2063, 2064, 2070, 2085, 2088,
+ /* 0 */ 1792, 1588, 1494, 322, 322, 399, 306, 1319, 1339, 1430,
+ /* 10 */ 1828, 1828, 1828, 580, 399, 399, 399, 399, 399, 0,
+ /* 20 */ 0, 214, 1093, 1828, 1828, 1828, 1828, 1828, 1828, 1828,
+ /* 30 */ 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1130, 1130,
+ /* 40 */ 365, 365, 55, 278, 436, 713, 713, 201, 201, 201,
+ /* 50 */ 201, 40, 111, 258, 361, 469, 512, 583, 622, 693,
+ /* 60 */ 732, 803, 842, 913, 1073, 1093, 1093, 1093, 1093, 1093,
+ /* 70 */ 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
+ /* 80 */ 1093, 1093, 1093, 1113, 1093, 1216, 957, 957, 1523, 1602,
+ /* 90 */ 1674, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828,
+ /* 100 */ 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828,
+ /* 110 */ 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828,
+ /* 120 */ 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828,
+ /* 130 */ 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828,
+ /* 140 */ 137, 181, 181, 181, 181, 181, 181, 181, 96, 222,
+ /* 150 */ 143, 477, 713, 1133, 1268, 713, 713, 79, 79, 713,
+ /* 160 */ 770, 83, 65, 65, 65, 288, 162, 162, 2142, 2142,
+ /* 170 */ 696, 696, 696, 238, 474, 474, 474, 474, 1217, 1217,
+ /* 180 */ 678, 477, 324, 398, 713, 713, 713, 713, 713, 713,
+ /* 190 */ 713, 713, 713, 713, 713, 713, 713, 713, 713, 713,
+ /* 200 */ 713, 713, 713, 1220, 366, 366, 713, 917, 283, 283,
+ /* 210 */ 434, 434, 605, 605, 1298, 2142, 2142, 2142, 2142, 2142,
+ /* 220 */ 2142, 2142, 1179, 1157, 1157, 487, 527, 585, 645, 749,
+ /* 230 */ 914, 968, 752, 713, 713, 713, 713, 713, 713, 713,
+ /* 240 */ 713, 713, 713, 303, 713, 713, 713, 713, 713, 713,
+ /* 250 */ 713, 713, 713, 713, 713, 713, 797, 797, 797, 713,
+ /* 260 */ 713, 713, 959, 713, 713, 713, 1169, 1271, 713, 713,
+ /* 270 */ 1330, 713, 713, 713, 713, 713, 713, 713, 713, 629,
+ /* 280 */ 7, 91, 876, 876, 876, 876, 953, 91, 91, 1246,
+ /* 290 */ 1065, 1106, 1374, 1329, 1348, 468, 1348, 1394, 785, 1329,
+ /* 300 */ 1329, 785, 1329, 468, 1394, 859, 854, 1402, 1449, 1449,
+ /* 310 */ 1449, 1173, 1173, 1173, 1173, 1355, 1355, 1030, 1341, 405,
+ /* 320 */ 1230, 1795, 1795, 1711, 1711, 1829, 1829, 1711, 1717, 1719,
+ /* 330 */ 1850, 1833, 1860, 1860, 1860, 1860, 1711, 1868, 1740, 1719,
+ /* 340 */ 1719, 1740, 1850, 1833, 1740, 1833, 1740, 1711, 1868, 1745,
+ /* 350 */ 1843, 1711, 1868, 1887, 1711, 1868, 1711, 1868, 1887, 1801,
+ /* 360 */ 1801, 1801, 1855, 1900, 1900, 1887, 1801, 1797, 1801, 1855,
+ /* 370 */ 1801, 1801, 1761, 1912, 1830, 1830, 1887, 1711, 1862, 1862,
+ /* 380 */ 1875, 1875, 1810, 1815, 1940, 1711, 1807, 1810, 1821, 1823,
+ /* 390 */ 1740, 1945, 1963, 1963, 1974, 1974, 1974, 2142, 2142, 2142,
+ /* 400 */ 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142,
+ /* 410 */ 2142, 2142, 20, 1224, 256, 1111, 1115, 1114, 1192, 1496,
+ /* 420 */ 1424, 1505, 1427, 355, 1383, 1537, 1506, 1538, 1553, 1583,
+ /* 430 */ 1584, 1591, 1625, 541, 1445, 1562, 1450, 1572, 1515, 1428,
+ /* 440 */ 1532, 1592, 1629, 1520, 1630, 1639, 1510, 1544, 1662, 1675,
+ /* 450 */ 1551, 48, 1996, 2001, 1983, 1844, 1993, 1994, 1986, 1989,
+ /* 460 */ 1874, 1863, 1885, 1991, 1991, 1995, 1876, 1997, 1877, 2004,
+ /* 470 */ 2021, 1881, 1894, 1991, 1895, 1965, 1990, 1991, 1878, 1975,
+ /* 480 */ 1977, 1978, 1979, 1903, 1918, 2002, 1896, 2034, 2033, 2017,
+ /* 490 */ 1925, 1880, 1976, 2018, 1980, 1967, 2005, 1904, 1932, 2025,
+ /* 500 */ 2030, 2032, 1921, 1928, 2035, 1987, 2036, 2037, 2038, 2040,
+ /* 510 */ 1988, 2006, 2039, 1960, 2041, 2042, 1999, 2023, 2044, 2043,
+ /* 520 */ 1919, 2048, 2049, 2050, 2046, 2051, 2053, 1981, 1935, 2056,
+ /* 530 */ 2057, 1966, 2047, 2061, 1941, 2060, 2052, 2054, 2055, 2058,
+ /* 540 */ 2003, 2012, 2007, 2059, 2015, 2008, 2062, 2071, 2073, 2074,
+ /* 550 */ 2072, 2075, 2065, 1962, 1964, 2079, 2060, 2082, 2084, 2085,
+ /* 560 */ 2087, 2086, 2089, 2088, 2091, 2093, 2099, 2094, 2095, 2096,
+ /* 570 */ 2097, 2100, 2101, 2102, 1998, 1984, 1985, 2000, 2103, 2098,
+ /* 580 */ 2109, 2117, 2128,
};
-#define YY_REDUCE_COUNT (410)
-#define YY_REDUCE_MIN (-271)
-#define YY_REDUCE_MAX (1753)
+#define YY_REDUCE_COUNT (411)
+#define YY_REDUCE_MIN (-275)
+#define YY_REDUCE_MAX (1798)
static const short yy_reduce_ofst[] = {
- /* 0 */ -125, 733, 789, 241, 293, -123, -193, -191, -183, -187,
- /* 10 */ 166, 238, 133, -207, -199, -267, -176, -6, 204, 489,
- /* 20 */ 576, 598, -175, 686, 860, 615, 725, 1014, 778, 781,
- /* 30 */ 857, 616, 887, 87, 240, -192, 408, 626, 796, 843,
- /* 40 */ 854, 1004, -271, -271, -271, -271, -271, -271, -271, -271,
- /* 50 */ -271, -271, -271, -271, -271, -271, -271, -271, -271, -271,
- /* 60 */ -271, -271, -271, -271, -271, -271, -271, -271, -271, -271,
- /* 70 */ -271, -271, -271, -271, -271, -271, -271, -271, -271, 80,
- /* 80 */ 83, 313, 886, 888, 918, 938, 1021, 1034, 1036, 1141,
- /* 90 */ 1159, 1163, 1166, 1168, 1170, 1176, 1178, 1180, 1184, 1196,
- /* 100 */ 1198, 1205, 1215, 1225, 1227, 1236, 1252, 1254, 1264, 1303,
- /* 110 */ 1309, 1312, 1322, 1325, 1328, 1337, 1340, 1343, 1353, 1371,
- /* 120 */ 1373, 1384, 1386, 1411, 1413, 1420, 1424, 1426, 1458, 1470,
- /* 130 */ 1473, -271, -271, -271, -271, -271, -271, -271, -271, -271,
- /* 140 */ -271, -271, 138, 459, 396, -158, 470, 302, -212, 521,
- /* 150 */ 201, -195, -92, 559, 630, 632, 630, -271, 632, 901,
- /* 160 */ 63, 407, 670, -271, -271, -271, -271, 161, 161, 161,
- /* 170 */ 251, 335, 847, 979, 1097, 537, 588, 618, 628, 688,
- /* 180 */ 688, -166, -161, 674, 787, 794, 799, 852, 996, -122,
- /* 190 */ 837, -120, 1018, 1035, 415, 1047, 1001, 958, 1082, 400,
- /* 200 */ 1099, 779, 1137, 1142, 263, 1083, 1145, 1150, 1041, 1139,
- /* 210 */ 965, 1050, 362, 849, 752, 629, 675, 1162, 1173, 1090,
- /* 220 */ 1195, -194, 56, 185, -135, 232, 522, 560, 571, 601,
- /* 230 */ 617, 669, 683, 711, 850, 893, 1000, 1040, 1049, 1081,
- /* 240 */ 1087, 1101, 392, 1114, 1123, 1155, 1161, 1175, 1271, 1293,
- /* 250 */ 1299, 1330, 1339, 1342, 1347, 593, 1282, 1286, 1350, 1359,
- /* 260 */ 1368, 1314, 1480, 1483, 1507, 1085, 1338, 1526, 1527, 1487,
- /* 270 */ 1531, 560, 1532, 1534, 1535, 1538, 1539, 1541, 1448, 1450,
- /* 280 */ 1496, 1484, 1485, 1489, 1490, 1314, 1496, 1496, 1504, 1536,
- /* 290 */ 1564, 1451, 1486, 1492, 1509, 1493, 1465, 1515, 1494, 1495,
- /* 300 */ 1517, 1500, 1519, 1474, 1550, 1543, 1548, 1556, 1565, 1566,
- /* 310 */ 1518, 1523, 1542, 1544, 1525, 1545, 1513, 1553, 1552, 1604,
- /* 320 */ 1508, 1510, 1608, 1609, 1520, 1528, 1612, 1540, 1559, 1560,
- /* 330 */ 1592, 1591, 1595, 1596, 1597, 1629, 1638, 1594, 1569, 1570,
- /* 340 */ 1600, 1568, 1610, 1601, 1611, 1603, 1643, 1651, 1562, 1571,
- /* 350 */ 1655, 1659, 1640, 1663, 1666, 1664, 1667, 1641, 1650, 1652,
- /* 360 */ 1653, 1647, 1656, 1657, 1658, 1668, 1672, 1681, 1649, 1682,
- /* 370 */ 1683, 1573, 1582, 1607, 1615, 1685, 1702, 1586, 1587, 1642,
- /* 380 */ 1646, 1673, 1675, 1636, 1714, 1637, 1677, 1674, 1678, 1694,
- /* 390 */ 1719, 1734, 1735, 1746, 1747, 1750, 1633, 1661, 1686, 1738,
- /* 400 */ 1728, 1733, 1736, 1737, 1740, 1726, 1730, 1742, 1743, 1748,
- /* 410 */ 1753,
+ /* 0 */ -71, 194, 343, 835, -180, -177, 838, -194, -188, -185,
+ /* 10 */ -183, 82, 183, -65, 133, 245, 346, 407, 458, -178,
+ /* 20 */ 75, -275, -4, 310, 312, 489, 575, 596, 463, 686,
+ /* 30 */ 707, 725, 780, 1098, 856, 778, 1059, 1090, 708, 887,
+ /* 40 */ 86, 448, 980, 630, 680, 681, 684, 796, 801, 796,
+ /* 50 */ 801, -261, -261, -261, -261, -261, -261, -261, -261, -261,
+ /* 60 */ -261, -261, -261, -261, -261, -261, -261, -261, -261, -261,
+ /* 70 */ -261, -261, -261, -261, -261, -261, -261, -261, -261, -261,
+ /* 80 */ -261, -261, -261, -261, -261, -261, -261, -261, 391, 886,
+ /* 90 */ 888, 1013, 1016, 1081, 1087, 1151, 1159, 1177, 1185, 1188,
+ /* 100 */ 1190, 1194, 1197, 1203, 1247, 1260, 1264, 1267, 1269, 1273,
+ /* 110 */ 1315, 1322, 1335, 1337, 1356, 1362, 1418, 1425, 1453, 1457,
+ /* 120 */ 1465, 1473, 1487, 1495, 1507, 1517, 1521, 1534, 1543, 1546,
+ /* 130 */ 1549, 1552, 1554, 1560, 1581, 1590, 1593, 1595, 1621, 1623,
+ /* 140 */ -261, -261, -261, -261, -261, -261, -261, -261, -261, -261,
+ /* 150 */ -261, -186, -117, 260, 263, 460, 631, -74, 497, -181,
+ /* 160 */ -261, 939, 176, 274, 338, 676, -261, -261, -261, -261,
+ /* 170 */ -212, -212, -212, -184, 149, 777, 1061, 1103, 265, 419,
+ /* 180 */ -254, 670, 677, 677, -11, -129, 184, 488, 736, 789,
+ /* 190 */ 805, 844, 403, 529, 579, 668, 783, 841, 1158, 1112,
+ /* 200 */ 806, 861, 1095, 846, 839, 1031, -189, 1077, 1080, 1116,
+ /* 210 */ 1084, 1156, 1139, 1221, 46, 1099, 1037, 1118, 1171, 1214,
+ /* 220 */ 1210, 1258, -210, -190, -176, -115, 117, 262, 376, 490,
+ /* 230 */ 511, 520, 618, 639, 743, 901, 907, 958, 1014, 1055,
+ /* 240 */ 1108, 1193, 1244, 720, 1248, 1277, 1324, 1347, 1417, 1431,
+ /* 250 */ 1432, 1440, 1451, 1452, 1463, 1478, 1286, 1350, 1369, 1490,
+ /* 260 */ 1498, 1501, 773, 1509, 1513, 1528, 1292, 1367, 1535, 1536,
+ /* 270 */ 1477, 1542, 376, 1547, 1550, 1555, 1559, 1568, 1571, 1441,
+ /* 280 */ 1443, 1474, 1511, 1516, 1519, 1522, 773, 1474, 1474, 1503,
+ /* 290 */ 1567, 1594, 1484, 1527, 1556, 1570, 1557, 1524, 1573, 1545,
+ /* 300 */ 1548, 1576, 1561, 1587, 1540, 1575, 1606, 1611, 1622, 1624,
+ /* 310 */ 1626, 1582, 1597, 1598, 1599, 1601, 1603, 1563, 1608, 1605,
+ /* 320 */ 1604, 1564, 1566, 1655, 1660, 1578, 1579, 1665, 1586, 1607,
+ /* 330 */ 1610, 1642, 1641, 1645, 1646, 1647, 1679, 1688, 1644, 1618,
+ /* 340 */ 1619, 1648, 1628, 1659, 1649, 1663, 1650, 1700, 1702, 1612,
+ /* 350 */ 1615, 1706, 1708, 1689, 1709, 1712, 1713, 1715, 1691, 1698,
+ /* 360 */ 1699, 1701, 1693, 1704, 1707, 1705, 1714, 1703, 1718, 1710,
+ /* 370 */ 1720, 1721, 1632, 1634, 1664, 1666, 1729, 1751, 1635, 1636,
+ /* 380 */ 1692, 1694, 1716, 1722, 1684, 1763, 1685, 1723, 1724, 1727,
+ /* 390 */ 1730, 1768, 1783, 1784, 1793, 1794, 1796, 1683, 1686, 1690,
+ /* 400 */ 1782, 1779, 1780, 1781, 1785, 1788, 1774, 1775, 1786, 1787,
+ /* 410 */ 1789, 1798,
};
static const YYACTIONTYPE yy_default[] = {
- /* 0 */ 1648, 1648, 1648, 1478, 1243, 1354, 1243, 1243, 1243, 1478,
- /* 10 */ 1478, 1478, 1243, 1384, 1384, 1531, 1276, 1243, 1243, 1243,
- /* 20 */ 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1477, 1243,
- /* 30 */ 1243, 1243, 1243, 1564, 1564, 1243, 1243, 1243, 1243, 1243,
- /* 40 */ 1243, 1243, 1243, 1393, 1243, 1400, 1243, 1243, 1243, 1243,
- /* 50 */ 1243, 1479, 1480, 1243, 1243, 1243, 1530, 1532, 1495, 1407,
- /* 60 */ 1406, 1405, 1404, 1513, 1372, 1398, 1391, 1395, 1474, 1475,
- /* 70 */ 1473, 1626, 1480, 1479, 1243, 1394, 1442, 1458, 1441, 1243,
- /* 80 */ 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
- /* 90 */ 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
- /* 100 */ 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
- /* 110 */ 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
- /* 120 */ 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
- /* 130 */ 1243, 1450, 1457, 1456, 1455, 1464, 1454, 1451, 1444, 1443,
- /* 140 */ 1445, 1446, 1243, 1243, 1267, 1243, 1243, 1264, 1318, 1243,
- /* 150 */ 1243, 1243, 1243, 1243, 1550, 1549, 1243, 1447, 1243, 1276,
- /* 160 */ 1435, 1434, 1433, 1461, 1448, 1460, 1459, 1538, 1600, 1599,
- /* 170 */ 1496, 1243, 1243, 1243, 1243, 1243, 1243, 1564, 1243, 1243,
- /* 180 */ 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
- /* 190 */ 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
- /* 200 */ 1243, 1374, 1564, 1564, 1243, 1276, 1564, 1564, 1375, 1375,
- /* 210 */ 1272, 1272, 1378, 1243, 1545, 1345, 1345, 1345, 1345, 1354,
- /* 220 */ 1345, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
- /* 230 */ 1243, 1243, 1243, 1243, 1243, 1243, 1535, 1533, 1243, 1243,
- /* 240 */ 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
- /* 250 */ 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
- /* 260 */ 1243, 1243, 1243, 1243, 1243, 1350, 1243, 1243, 1243, 1243,
- /* 270 */ 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1593, 1243, 1508,
- /* 280 */ 1332, 1350, 1350, 1350, 1350, 1352, 1333, 1331, 1344, 1277,
- /* 290 */ 1250, 1640, 1410, 1399, 1351, 1399, 1637, 1397, 1410, 1410,
- /* 300 */ 1397, 1410, 1351, 1637, 1293, 1615, 1288, 1384, 1384, 1384,
- /* 310 */ 1374, 1374, 1374, 1374, 1378, 1378, 1476, 1351, 1344, 1243,
- /* 320 */ 1640, 1640, 1360, 1360, 1639, 1639, 1360, 1496, 1623, 1419,
- /* 330 */ 1321, 1327, 1327, 1327, 1327, 1360, 1261, 1397, 1623, 1623,
- /* 340 */ 1397, 1419, 1321, 1397, 1321, 1397, 1360, 1261, 1512, 1634,
- /* 350 */ 1360, 1261, 1486, 1360, 1261, 1360, 1261, 1486, 1319, 1319,
- /* 360 */ 1319, 1308, 1243, 1243, 1486, 1319, 1293, 1319, 1308, 1319,
- /* 370 */ 1319, 1582, 1243, 1490, 1490, 1486, 1360, 1574, 1574, 1387,
- /* 380 */ 1387, 1392, 1378, 1481, 1360, 1243, 1392, 1390, 1388, 1397,
- /* 390 */ 1311, 1596, 1596, 1592, 1592, 1592, 1645, 1645, 1545, 1608,
- /* 400 */ 1276, 1276, 1276, 1276, 1608, 1295, 1295, 1277, 1277, 1276,
- /* 410 */ 1608, 1243, 1243, 1243, 1243, 1243, 1243, 1603, 1243, 1540,
- /* 420 */ 1497, 1364, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
- /* 430 */ 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1551, 1243,
- /* 440 */ 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1424,
- /* 450 */ 1243, 1246, 1542, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
- /* 460 */ 1243, 1401, 1402, 1365, 1243, 1243, 1243, 1243, 1243, 1243,
- /* 470 */ 1243, 1416, 1243, 1243, 1243, 1411, 1243, 1243, 1243, 1243,
- /* 480 */ 1243, 1243, 1243, 1243, 1636, 1243, 1243, 1243, 1243, 1243,
- /* 490 */ 1243, 1511, 1510, 1243, 1243, 1362, 1243, 1243, 1243, 1243,
- /* 500 */ 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1291,
- /* 510 */ 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
- /* 520 */ 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
- /* 530 */ 1243, 1243, 1243, 1389, 1243, 1243, 1243, 1243, 1243, 1243,
- /* 540 */ 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1579, 1379,
- /* 550 */ 1243, 1243, 1243, 1243, 1627, 1243, 1243, 1243, 1243, 1243,
- /* 560 */ 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1619,
- /* 570 */ 1335, 1425, 1243, 1428, 1265, 1243, 1255, 1243, 1243,
+ /* 0 */ 1663, 1663, 1663, 1491, 1254, 1367, 1254, 1254, 1254, 1254,
+ /* 10 */ 1491, 1491, 1491, 1254, 1254, 1254, 1254, 1254, 1254, 1397,
+ /* 20 */ 1397, 1544, 1287, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
+ /* 30 */ 1254, 1254, 1254, 1254, 1254, 1490, 1254, 1254, 1254, 1254,
+ /* 40 */ 1578, 1578, 1254, 1254, 1254, 1254, 1254, 1563, 1562, 1254,
+ /* 50 */ 1254, 1254, 1406, 1254, 1413, 1254, 1254, 1254, 1254, 1254,
+ /* 60 */ 1492, 1493, 1254, 1254, 1254, 1543, 1545, 1508, 1420, 1419,
+ /* 70 */ 1418, 1417, 1526, 1385, 1411, 1404, 1408, 1487, 1488, 1486,
+ /* 80 */ 1641, 1493, 1492, 1254, 1407, 1455, 1471, 1454, 1254, 1254,
+ /* 90 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
+ /* 100 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
+ /* 110 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
+ /* 120 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
+ /* 130 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
+ /* 140 */ 1463, 1470, 1469, 1468, 1477, 1467, 1464, 1457, 1456, 1458,
+ /* 150 */ 1459, 1278, 1254, 1275, 1329, 1254, 1254, 1254, 1254, 1254,
+ /* 160 */ 1460, 1287, 1448, 1447, 1446, 1254, 1474, 1461, 1473, 1472,
+ /* 170 */ 1551, 1615, 1614, 1509, 1254, 1254, 1254, 1254, 1254, 1254,
+ /* 180 */ 1578, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
+ /* 190 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
+ /* 200 */ 1254, 1254, 1254, 1387, 1578, 1578, 1254, 1287, 1578, 1578,
+ /* 210 */ 1388, 1388, 1283, 1283, 1391, 1558, 1358, 1358, 1358, 1358,
+ /* 220 */ 1367, 1358, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
+ /* 230 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1548, 1546, 1254,
+ /* 240 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
+ /* 250 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
+ /* 260 */ 1254, 1254, 1254, 1254, 1254, 1254, 1363, 1254, 1254, 1254,
+ /* 270 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1608, 1254,
+ /* 280 */ 1521, 1343, 1363, 1363, 1363, 1363, 1365, 1344, 1342, 1357,
+ /* 290 */ 1288, 1261, 1655, 1423, 1412, 1364, 1412, 1652, 1410, 1423,
+ /* 300 */ 1423, 1410, 1423, 1364, 1652, 1304, 1630, 1299, 1397, 1397,
+ /* 310 */ 1397, 1387, 1387, 1387, 1387, 1391, 1391, 1489, 1364, 1357,
+ /* 320 */ 1254, 1655, 1655, 1373, 1373, 1654, 1654, 1373, 1509, 1638,
+ /* 330 */ 1432, 1332, 1338, 1338, 1338, 1338, 1373, 1272, 1410, 1638,
+ /* 340 */ 1638, 1410, 1432, 1332, 1410, 1332, 1410, 1373, 1272, 1525,
+ /* 350 */ 1649, 1373, 1272, 1499, 1373, 1272, 1373, 1272, 1499, 1330,
+ /* 360 */ 1330, 1330, 1319, 1254, 1254, 1499, 1330, 1304, 1330, 1319,
+ /* 370 */ 1330, 1330, 1596, 1254, 1503, 1503, 1499, 1373, 1588, 1588,
+ /* 380 */ 1400, 1400, 1405, 1391, 1494, 1373, 1254, 1405, 1403, 1401,
+ /* 390 */ 1410, 1322, 1611, 1611, 1607, 1607, 1607, 1660, 1660, 1558,
+ /* 400 */ 1623, 1287, 1287, 1287, 1287, 1623, 1306, 1306, 1288, 1288,
+ /* 410 */ 1287, 1623, 1254, 1254, 1254, 1254, 1254, 1254, 1618, 1254,
+ /* 420 */ 1553, 1510, 1377, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
+ /* 430 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1564,
+ /* 440 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
+ /* 450 */ 1254, 1437, 1254, 1257, 1555, 1254, 1254, 1254, 1254, 1254,
+ /* 460 */ 1254, 1254, 1254, 1414, 1415, 1378, 1254, 1254, 1254, 1254,
+ /* 470 */ 1254, 1254, 1254, 1429, 1254, 1254, 1254, 1424, 1254, 1254,
+ /* 480 */ 1254, 1254, 1254, 1254, 1254, 1254, 1651, 1254, 1254, 1254,
+ /* 490 */ 1254, 1254, 1254, 1524, 1523, 1254, 1254, 1375, 1254, 1254,
+ /* 500 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
+ /* 510 */ 1254, 1302, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
+ /* 520 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
+ /* 530 */ 1254, 1254, 1254, 1254, 1254, 1402, 1254, 1254, 1254, 1254,
+ /* 540 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
+ /* 550 */ 1593, 1392, 1254, 1254, 1254, 1254, 1642, 1254, 1254, 1254,
+ /* 560 */ 1254, 1352, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
+ /* 570 */ 1254, 1254, 1254, 1634, 1346, 1438, 1254, 1441, 1276, 1254,
+ /* 580 */ 1266, 1254, 1254,
};
/********** End of lemon-generated parsing tables *****************************/
@@ -172521,8 +173902,8 @@ static const YYCODETYPE yyFallback[] = {
0, /* TRUEFALSE => nothing */
0, /* ISNOT => nothing */
0, /* FUNCTION => nothing */
- 0, /* UMINUS => nothing */
0, /* UPLUS => nothing */
+ 0, /* UMINUS => nothing */
0, /* TRUTH => nothing */
0, /* REGISTER => nothing */
0, /* VECTOR => nothing */
@@ -172531,6 +173912,7 @@ static const YYCODETYPE yyFallback[] = {
0, /* ASTERISK => nothing */
0, /* SPAN => nothing */
0, /* ERROR => nothing */
+ 0, /* QNUMBER => nothing */
0, /* SPACE => nothing */
0, /* ILLEGAL => nothing */
};
@@ -172573,14 +173955,9 @@ struct yyParser {
#endif
sqlite3ParserARG_SDECL /* A place to hold %extra_argument */
sqlite3ParserCTX_SDECL /* A place to hold %extra_context */
-#if YYSTACKDEPTH<=0
- int yystksz; /* Current side of the stack */
- yyStackEntry *yystack; /* The parser's stack */
- yyStackEntry yystk0; /* First stack entry */
-#else
- yyStackEntry yystack[YYSTACKDEPTH]; /* The parser's stack */
- yyStackEntry *yystackEnd; /* Last entry in the stack */
-#endif
+ yyStackEntry *yystackEnd; /* Last entry in the stack */
+ yyStackEntry *yystack; /* The parser stack */
+ yyStackEntry yystk0[YYSTACKDEPTH]; /* Initial stack space */
};
typedef struct yyParser yyParser;
@@ -172794,8 +174171,8 @@ static const char *const yyTokenName[] = {
/* 170 */ "TRUEFALSE",
/* 171 */ "ISNOT",
/* 172 */ "FUNCTION",
- /* 173 */ "UMINUS",
- /* 174 */ "UPLUS",
+ /* 173 */ "UPLUS",
+ /* 174 */ "UMINUS",
/* 175 */ "TRUTH",
/* 176 */ "REGISTER",
/* 177 */ "VECTOR",
@@ -172804,142 +174181,145 @@ static const char *const yyTokenName[] = {
/* 180 */ "ASTERISK",
/* 181 */ "SPAN",
/* 182 */ "ERROR",
- /* 183 */ "SPACE",
- /* 184 */ "ILLEGAL",
- /* 185 */ "input",
- /* 186 */ "cmdlist",
- /* 187 */ "ecmd",
- /* 188 */ "cmdx",
- /* 189 */ "explain",
- /* 190 */ "cmd",
- /* 191 */ "transtype",
- /* 192 */ "trans_opt",
- /* 193 */ "nm",
- /* 194 */ "savepoint_opt",
- /* 195 */ "create_table",
- /* 196 */ "create_table_args",
- /* 197 */ "createkw",
- /* 198 */ "temp",
- /* 199 */ "ifnotexists",
- /* 200 */ "dbnm",
- /* 201 */ "columnlist",
- /* 202 */ "conslist_opt",
- /* 203 */ "table_option_set",
- /* 204 */ "select",
- /* 205 */ "table_option",
- /* 206 */ "columnname",
- /* 207 */ "carglist",
- /* 208 */ "typetoken",
- /* 209 */ "typename",
- /* 210 */ "signed",
- /* 211 */ "plus_num",
- /* 212 */ "minus_num",
- /* 213 */ "scanpt",
- /* 214 */ "scantok",
- /* 215 */ "ccons",
- /* 216 */ "term",
- /* 217 */ "expr",
- /* 218 */ "onconf",
- /* 219 */ "sortorder",
- /* 220 */ "autoinc",
- /* 221 */ "eidlist_opt",
- /* 222 */ "refargs",
- /* 223 */ "defer_subclause",
- /* 224 */ "generated",
- /* 225 */ "refarg",
- /* 226 */ "refact",
- /* 227 */ "init_deferred_pred_opt",
- /* 228 */ "conslist",
- /* 229 */ "tconscomma",
- /* 230 */ "tcons",
- /* 231 */ "sortlist",
- /* 232 */ "eidlist",
- /* 233 */ "defer_subclause_opt",
- /* 234 */ "orconf",
- /* 235 */ "resolvetype",
- /* 236 */ "raisetype",
- /* 237 */ "ifexists",
- /* 238 */ "fullname",
- /* 239 */ "selectnowith",
- /* 240 */ "oneselect",
- /* 241 */ "wqlist",
- /* 242 */ "multiselect_op",
- /* 243 */ "distinct",
- /* 244 */ "selcollist",
- /* 245 */ "from",
- /* 246 */ "where_opt",
- /* 247 */ "groupby_opt",
- /* 248 */ "having_opt",
- /* 249 */ "orderby_opt",
- /* 250 */ "limit_opt",
- /* 251 */ "window_clause",
- /* 252 */ "values",
- /* 253 */ "nexprlist",
- /* 254 */ "sclp",
- /* 255 */ "as",
- /* 256 */ "seltablist",
- /* 257 */ "stl_prefix",
- /* 258 */ "joinop",
- /* 259 */ "on_using",
- /* 260 */ "indexed_by",
- /* 261 */ "exprlist",
- /* 262 */ "xfullname",
- /* 263 */ "idlist",
- /* 264 */ "indexed_opt",
- /* 265 */ "nulls",
- /* 266 */ "with",
- /* 267 */ "where_opt_ret",
- /* 268 */ "setlist",
- /* 269 */ "insert_cmd",
- /* 270 */ "idlist_opt",
- /* 271 */ "upsert",
- /* 272 */ "returning",
- /* 273 */ "filter_over",
- /* 274 */ "likeop",
- /* 275 */ "between_op",
- /* 276 */ "in_op",
- /* 277 */ "paren_exprlist",
- /* 278 */ "case_operand",
- /* 279 */ "case_exprlist",
- /* 280 */ "case_else",
- /* 281 */ "uniqueflag",
- /* 282 */ "collate",
- /* 283 */ "vinto",
- /* 284 */ "nmnum",
- /* 285 */ "trigger_decl",
- /* 286 */ "trigger_cmd_list",
- /* 287 */ "trigger_time",
- /* 288 */ "trigger_event",
- /* 289 */ "foreach_clause",
- /* 290 */ "when_clause",
- /* 291 */ "trigger_cmd",
- /* 292 */ "trnm",
- /* 293 */ "tridxby",
- /* 294 */ "database_kw_opt",
- /* 295 */ "key_opt",
- /* 296 */ "add_column_fullname",
- /* 297 */ "kwcolumn_opt",
- /* 298 */ "create_vtab",
- /* 299 */ "vtabarglist",
- /* 300 */ "vtabarg",
- /* 301 */ "vtabargtoken",
- /* 302 */ "lp",
- /* 303 */ "anylist",
- /* 304 */ "wqitem",
- /* 305 */ "wqas",
- /* 306 */ "windowdefn_list",
- /* 307 */ "windowdefn",
- /* 308 */ "window",
- /* 309 */ "frame_opt",
- /* 310 */ "part_opt",
- /* 311 */ "filter_clause",
- /* 312 */ "over_clause",
- /* 313 */ "range_or_rows",
- /* 314 */ "frame_bound",
- /* 315 */ "frame_bound_s",
- /* 316 */ "frame_bound_e",
- /* 317 */ "frame_exclude_opt",
- /* 318 */ "frame_exclude",
+ /* 183 */ "QNUMBER",
+ /* 184 */ "SPACE",
+ /* 185 */ "ILLEGAL",
+ /* 186 */ "input",
+ /* 187 */ "cmdlist",
+ /* 188 */ "ecmd",
+ /* 189 */ "cmdx",
+ /* 190 */ "explain",
+ /* 191 */ "cmd",
+ /* 192 */ "transtype",
+ /* 193 */ "trans_opt",
+ /* 194 */ "nm",
+ /* 195 */ "savepoint_opt",
+ /* 196 */ "create_table",
+ /* 197 */ "create_table_args",
+ /* 198 */ "createkw",
+ /* 199 */ "temp",
+ /* 200 */ "ifnotexists",
+ /* 201 */ "dbnm",
+ /* 202 */ "columnlist",
+ /* 203 */ "conslist_opt",
+ /* 204 */ "table_option_set",
+ /* 205 */ "select",
+ /* 206 */ "table_option",
+ /* 207 */ "columnname",
+ /* 208 */ "carglist",
+ /* 209 */ "typetoken",
+ /* 210 */ "typename",
+ /* 211 */ "signed",
+ /* 212 */ "plus_num",
+ /* 213 */ "minus_num",
+ /* 214 */ "scanpt",
+ /* 215 */ "scantok",
+ /* 216 */ "ccons",
+ /* 217 */ "term",
+ /* 218 */ "expr",
+ /* 219 */ "onconf",
+ /* 220 */ "sortorder",
+ /* 221 */ "autoinc",
+ /* 222 */ "eidlist_opt",
+ /* 223 */ "refargs",
+ /* 224 */ "defer_subclause",
+ /* 225 */ "generated",
+ /* 226 */ "refarg",
+ /* 227 */ "refact",
+ /* 228 */ "init_deferred_pred_opt",
+ /* 229 */ "conslist",
+ /* 230 */ "tconscomma",
+ /* 231 */ "tcons",
+ /* 232 */ "sortlist",
+ /* 233 */ "eidlist",
+ /* 234 */ "defer_subclause_opt",
+ /* 235 */ "orconf",
+ /* 236 */ "resolvetype",
+ /* 237 */ "raisetype",
+ /* 238 */ "ifexists",
+ /* 239 */ "fullname",
+ /* 240 */ "selectnowith",
+ /* 241 */ "oneselect",
+ /* 242 */ "wqlist",
+ /* 243 */ "multiselect_op",
+ /* 244 */ "distinct",
+ /* 245 */ "selcollist",
+ /* 246 */ "from",
+ /* 247 */ "where_opt",
+ /* 248 */ "groupby_opt",
+ /* 249 */ "having_opt",
+ /* 250 */ "orderby_opt",
+ /* 251 */ "limit_opt",
+ /* 252 */ "window_clause",
+ /* 253 */ "values",
+ /* 254 */ "nexprlist",
+ /* 255 */ "mvalues",
+ /* 256 */ "sclp",
+ /* 257 */ "as",
+ /* 258 */ "seltablist",
+ /* 259 */ "stl_prefix",
+ /* 260 */ "joinop",
+ /* 261 */ "on_using",
+ /* 262 */ "indexed_by",
+ /* 263 */ "exprlist",
+ /* 264 */ "xfullname",
+ /* 265 */ "idlist",
+ /* 266 */ "indexed_opt",
+ /* 267 */ "nulls",
+ /* 268 */ "with",
+ /* 269 */ "where_opt_ret",
+ /* 270 */ "setlist",
+ /* 271 */ "insert_cmd",
+ /* 272 */ "idlist_opt",
+ /* 273 */ "upsert",
+ /* 274 */ "returning",
+ /* 275 */ "filter_over",
+ /* 276 */ "likeop",
+ /* 277 */ "between_op",
+ /* 278 */ "in_op",
+ /* 279 */ "paren_exprlist",
+ /* 280 */ "case_operand",
+ /* 281 */ "case_exprlist",
+ /* 282 */ "case_else",
+ /* 283 */ "uniqueflag",
+ /* 284 */ "collate",
+ /* 285 */ "vinto",
+ /* 286 */ "nmnum",
+ /* 287 */ "trigger_decl",
+ /* 288 */ "trigger_cmd_list",
+ /* 289 */ "trigger_time",
+ /* 290 */ "trigger_event",
+ /* 291 */ "foreach_clause",
+ /* 292 */ "when_clause",
+ /* 293 */ "trigger_cmd",
+ /* 294 */ "trnm",
+ /* 295 */ "tridxby",
+ /* 296 */ "database_kw_opt",
+ /* 297 */ "key_opt",
+ /* 298 */ "add_column_fullname",
+ /* 299 */ "kwcolumn_opt",
+ /* 300 */ "create_vtab",
+ /* 301 */ "vtabarglist",
+ /* 302 */ "vtabarg",
+ /* 303 */ "vtabargtoken",
+ /* 304 */ "lp",
+ /* 305 */ "anylist",
+ /* 306 */ "wqitem",
+ /* 307 */ "wqas",
+ /* 308 */ "withnm",
+ /* 309 */ "windowdefn_list",
+ /* 310 */ "windowdefn",
+ /* 311 */ "window",
+ /* 312 */ "frame_opt",
+ /* 313 */ "part_opt",
+ /* 314 */ "filter_clause",
+ /* 315 */ "over_clause",
+ /* 316 */ "range_or_rows",
+ /* 317 */ "frame_bound",
+ /* 318 */ "frame_bound_s",
+ /* 319 */ "frame_bound_e",
+ /* 320 */ "frame_exclude_opt",
+ /* 321 */ "frame_exclude",
};
#endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */
@@ -173042,351 +174422,363 @@ static const char *const yyRuleName[] = {
/* 92 */ "oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt",
/* 93 */ "oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt window_clause orderby_opt limit_opt",
/* 94 */ "values ::= VALUES LP nexprlist RP",
- /* 95 */ "values ::= values COMMA LP nexprlist RP",
- /* 96 */ "distinct ::= DISTINCT",
- /* 97 */ "distinct ::= ALL",
- /* 98 */ "distinct ::=",
- /* 99 */ "sclp ::=",
- /* 100 */ "selcollist ::= sclp scanpt expr scanpt as",
- /* 101 */ "selcollist ::= sclp scanpt STAR",
- /* 102 */ "selcollist ::= sclp scanpt nm DOT STAR",
- /* 103 */ "as ::= AS nm",
- /* 104 */ "as ::=",
- /* 105 */ "from ::=",
- /* 106 */ "from ::= FROM seltablist",
- /* 107 */ "stl_prefix ::= seltablist joinop",
- /* 108 */ "stl_prefix ::=",
- /* 109 */ "seltablist ::= stl_prefix nm dbnm as on_using",
- /* 110 */ "seltablist ::= stl_prefix nm dbnm as indexed_by on_using",
- /* 111 */ "seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_using",
- /* 112 */ "seltablist ::= stl_prefix LP select RP as on_using",
- /* 113 */ "seltablist ::= stl_prefix LP seltablist RP as on_using",
- /* 114 */ "dbnm ::=",
- /* 115 */ "dbnm ::= DOT nm",
- /* 116 */ "fullname ::= nm",
- /* 117 */ "fullname ::= nm DOT nm",
- /* 118 */ "xfullname ::= nm",
- /* 119 */ "xfullname ::= nm DOT nm",
- /* 120 */ "xfullname ::= nm DOT nm AS nm",
- /* 121 */ "xfullname ::= nm AS nm",
- /* 122 */ "joinop ::= COMMA|JOIN",
- /* 123 */ "joinop ::= JOIN_KW JOIN",
- /* 124 */ "joinop ::= JOIN_KW nm JOIN",
- /* 125 */ "joinop ::= JOIN_KW nm nm JOIN",
- /* 126 */ "on_using ::= ON expr",
- /* 127 */ "on_using ::= USING LP idlist RP",
- /* 128 */ "on_using ::=",
- /* 129 */ "indexed_opt ::=",
- /* 130 */ "indexed_by ::= INDEXED BY nm",
- /* 131 */ "indexed_by ::= NOT INDEXED",
- /* 132 */ "orderby_opt ::=",
- /* 133 */ "orderby_opt ::= ORDER BY sortlist",
- /* 134 */ "sortlist ::= sortlist COMMA expr sortorder nulls",
- /* 135 */ "sortlist ::= expr sortorder nulls",
- /* 136 */ "sortorder ::= ASC",
- /* 137 */ "sortorder ::= DESC",
- /* 138 */ "sortorder ::=",
- /* 139 */ "nulls ::= NULLS FIRST",
- /* 140 */ "nulls ::= NULLS LAST",
- /* 141 */ "nulls ::=",
- /* 142 */ "groupby_opt ::=",
- /* 143 */ "groupby_opt ::= GROUP BY nexprlist",
- /* 144 */ "having_opt ::=",
- /* 145 */ "having_opt ::= HAVING expr",
- /* 146 */ "limit_opt ::=",
- /* 147 */ "limit_opt ::= LIMIT expr",
- /* 148 */ "limit_opt ::= LIMIT expr OFFSET expr",
- /* 149 */ "limit_opt ::= LIMIT expr COMMA expr",
- /* 150 */ "cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret",
- /* 151 */ "where_opt ::=",
- /* 152 */ "where_opt ::= WHERE expr",
- /* 153 */ "where_opt_ret ::=",
- /* 154 */ "where_opt_ret ::= WHERE expr",
- /* 155 */ "where_opt_ret ::= RETURNING selcollist",
- /* 156 */ "where_opt_ret ::= WHERE expr RETURNING selcollist",
- /* 157 */ "cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt_ret",
- /* 158 */ "setlist ::= setlist COMMA nm EQ expr",
- /* 159 */ "setlist ::= setlist COMMA LP idlist RP EQ expr",
- /* 160 */ "setlist ::= nm EQ expr",
- /* 161 */ "setlist ::= LP idlist RP EQ expr",
- /* 162 */ "cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert",
- /* 163 */ "cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES returning",
- /* 164 */ "upsert ::=",
- /* 165 */ "upsert ::= RETURNING selcollist",
- /* 166 */ "upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt upsert",
- /* 167 */ "upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING upsert",
- /* 168 */ "upsert ::= ON CONFLICT DO NOTHING returning",
- /* 169 */ "upsert ::= ON CONFLICT DO UPDATE SET setlist where_opt returning",
- /* 170 */ "returning ::= RETURNING selcollist",
- /* 171 */ "insert_cmd ::= INSERT orconf",
- /* 172 */ "insert_cmd ::= REPLACE",
- /* 173 */ "idlist_opt ::=",
- /* 174 */ "idlist_opt ::= LP idlist RP",
- /* 175 */ "idlist ::= idlist COMMA nm",
- /* 176 */ "idlist ::= nm",
- /* 177 */ "expr ::= LP expr RP",
- /* 178 */ "expr ::= ID|INDEXED|JOIN_KW",
- /* 179 */ "expr ::= nm DOT nm",
- /* 180 */ "expr ::= nm DOT nm DOT nm",
- /* 181 */ "term ::= NULL|FLOAT|BLOB",
- /* 182 */ "term ::= STRING",
- /* 183 */ "term ::= INTEGER",
- /* 184 */ "expr ::= VARIABLE",
- /* 185 */ "expr ::= expr COLLATE ID|STRING",
- /* 186 */ "expr ::= CAST LP expr AS typetoken RP",
- /* 187 */ "expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP",
- /* 188 */ "expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP",
- /* 189 */ "expr ::= ID|INDEXED|JOIN_KW LP STAR RP",
- /* 190 */ "expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP filter_over",
- /* 191 */ "expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP filter_over",
- /* 192 */ "expr ::= ID|INDEXED|JOIN_KW LP STAR RP filter_over",
- /* 193 */ "term ::= CTIME_KW",
- /* 194 */ "expr ::= LP nexprlist COMMA expr RP",
- /* 195 */ "expr ::= expr AND expr",
- /* 196 */ "expr ::= expr OR expr",
- /* 197 */ "expr ::= expr LT|GT|GE|LE expr",
- /* 198 */ "expr ::= expr EQ|NE expr",
- /* 199 */ "expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr",
- /* 200 */ "expr ::= expr PLUS|MINUS expr",
- /* 201 */ "expr ::= expr STAR|SLASH|REM expr",
- /* 202 */ "expr ::= expr CONCAT expr",
- /* 203 */ "likeop ::= NOT LIKE_KW|MATCH",
- /* 204 */ "expr ::= expr likeop expr",
- /* 205 */ "expr ::= expr likeop expr ESCAPE expr",
- /* 206 */ "expr ::= expr ISNULL|NOTNULL",
- /* 207 */ "expr ::= expr NOT NULL",
- /* 208 */ "expr ::= expr IS expr",
- /* 209 */ "expr ::= expr IS NOT expr",
- /* 210 */ "expr ::= expr IS NOT DISTINCT FROM expr",
- /* 211 */ "expr ::= expr IS DISTINCT FROM expr",
- /* 212 */ "expr ::= NOT expr",
- /* 213 */ "expr ::= BITNOT expr",
- /* 214 */ "expr ::= PLUS|MINUS expr",
- /* 215 */ "expr ::= expr PTR expr",
- /* 216 */ "between_op ::= BETWEEN",
- /* 217 */ "between_op ::= NOT BETWEEN",
- /* 218 */ "expr ::= expr between_op expr AND expr",
- /* 219 */ "in_op ::= IN",
- /* 220 */ "in_op ::= NOT IN",
- /* 221 */ "expr ::= expr in_op LP exprlist RP",
- /* 222 */ "expr ::= LP select RP",
- /* 223 */ "expr ::= expr in_op LP select RP",
- /* 224 */ "expr ::= expr in_op nm dbnm paren_exprlist",
- /* 225 */ "expr ::= EXISTS LP select RP",
- /* 226 */ "expr ::= CASE case_operand case_exprlist case_else END",
- /* 227 */ "case_exprlist ::= case_exprlist WHEN expr THEN expr",
- /* 228 */ "case_exprlist ::= WHEN expr THEN expr",
- /* 229 */ "case_else ::= ELSE expr",
- /* 230 */ "case_else ::=",
- /* 231 */ "case_operand ::=",
- /* 232 */ "exprlist ::=",
- /* 233 */ "nexprlist ::= nexprlist COMMA expr",
- /* 234 */ "nexprlist ::= expr",
- /* 235 */ "paren_exprlist ::=",
- /* 236 */ "paren_exprlist ::= LP exprlist RP",
- /* 237 */ "cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt",
- /* 238 */ "uniqueflag ::= UNIQUE",
- /* 239 */ "uniqueflag ::=",
- /* 240 */ "eidlist_opt ::=",
- /* 241 */ "eidlist_opt ::= LP eidlist RP",
- /* 242 */ "eidlist ::= eidlist COMMA nm collate sortorder",
- /* 243 */ "eidlist ::= nm collate sortorder",
- /* 244 */ "collate ::=",
- /* 245 */ "collate ::= COLLATE ID|STRING",
- /* 246 */ "cmd ::= DROP INDEX ifexists fullname",
- /* 247 */ "cmd ::= VACUUM vinto",
- /* 248 */ "cmd ::= VACUUM nm vinto",
- /* 249 */ "vinto ::= INTO expr",
- /* 250 */ "vinto ::=",
- /* 251 */ "cmd ::= PRAGMA nm dbnm",
- /* 252 */ "cmd ::= PRAGMA nm dbnm EQ nmnum",
- /* 253 */ "cmd ::= PRAGMA nm dbnm LP nmnum RP",
- /* 254 */ "cmd ::= PRAGMA nm dbnm EQ minus_num",
- /* 255 */ "cmd ::= PRAGMA nm dbnm LP minus_num RP",
- /* 256 */ "plus_num ::= PLUS INTEGER|FLOAT",
- /* 257 */ "minus_num ::= MINUS INTEGER|FLOAT",
- /* 258 */ "cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END",
- /* 259 */ "trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause",
- /* 260 */ "trigger_time ::= BEFORE|AFTER",
- /* 261 */ "trigger_time ::= INSTEAD OF",
- /* 262 */ "trigger_time ::=",
- /* 263 */ "trigger_event ::= DELETE|INSERT",
- /* 264 */ "trigger_event ::= UPDATE",
- /* 265 */ "trigger_event ::= UPDATE OF idlist",
- /* 266 */ "when_clause ::=",
- /* 267 */ "when_clause ::= WHEN expr",
- /* 268 */ "trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI",
- /* 269 */ "trigger_cmd_list ::= trigger_cmd SEMI",
- /* 270 */ "trnm ::= nm DOT nm",
- /* 271 */ "tridxby ::= INDEXED BY nm",
- /* 272 */ "tridxby ::= NOT INDEXED",
- /* 273 */ "trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt",
- /* 274 */ "trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt",
- /* 275 */ "trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt",
- /* 276 */ "trigger_cmd ::= scanpt select scanpt",
- /* 277 */ "expr ::= RAISE LP IGNORE RP",
- /* 278 */ "expr ::= RAISE LP raisetype COMMA nm RP",
- /* 279 */ "raisetype ::= ROLLBACK",
- /* 280 */ "raisetype ::= ABORT",
- /* 281 */ "raisetype ::= FAIL",
- /* 282 */ "cmd ::= DROP TRIGGER ifexists fullname",
- /* 283 */ "cmd ::= ATTACH database_kw_opt expr AS expr key_opt",
- /* 284 */ "cmd ::= DETACH database_kw_opt expr",
- /* 285 */ "key_opt ::=",
- /* 286 */ "key_opt ::= KEY expr",
- /* 287 */ "cmd ::= REINDEX",
- /* 288 */ "cmd ::= REINDEX nm dbnm",
- /* 289 */ "cmd ::= ANALYZE",
- /* 290 */ "cmd ::= ANALYZE nm dbnm",
- /* 291 */ "cmd ::= ALTER TABLE fullname RENAME TO nm",
- /* 292 */ "cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist",
- /* 293 */ "cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm",
- /* 294 */ "add_column_fullname ::= fullname",
- /* 295 */ "cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm",
- /* 296 */ "cmd ::= create_vtab",
- /* 297 */ "cmd ::= create_vtab LP vtabarglist RP",
- /* 298 */ "create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm",
- /* 299 */ "vtabarg ::=",
- /* 300 */ "vtabargtoken ::= ANY",
- /* 301 */ "vtabargtoken ::= lp anylist RP",
- /* 302 */ "lp ::= LP",
- /* 303 */ "with ::= WITH wqlist",
- /* 304 */ "with ::= WITH RECURSIVE wqlist",
- /* 305 */ "wqas ::= AS",
- /* 306 */ "wqas ::= AS MATERIALIZED",
- /* 307 */ "wqas ::= AS NOT MATERIALIZED",
- /* 308 */ "wqitem ::= nm eidlist_opt wqas LP select RP",
- /* 309 */ "wqlist ::= wqitem",
- /* 310 */ "wqlist ::= wqlist COMMA wqitem",
- /* 311 */ "windowdefn_list ::= windowdefn_list COMMA windowdefn",
- /* 312 */ "windowdefn ::= nm AS LP window RP",
- /* 313 */ "window ::= PARTITION BY nexprlist orderby_opt frame_opt",
- /* 314 */ "window ::= nm PARTITION BY nexprlist orderby_opt frame_opt",
- /* 315 */ "window ::= ORDER BY sortlist frame_opt",
- /* 316 */ "window ::= nm ORDER BY sortlist frame_opt",
- /* 317 */ "window ::= nm frame_opt",
- /* 318 */ "frame_opt ::=",
- /* 319 */ "frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt",
- /* 320 */ "frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt",
- /* 321 */ "range_or_rows ::= RANGE|ROWS|GROUPS",
- /* 322 */ "frame_bound_s ::= frame_bound",
- /* 323 */ "frame_bound_s ::= UNBOUNDED PRECEDING",
- /* 324 */ "frame_bound_e ::= frame_bound",
- /* 325 */ "frame_bound_e ::= UNBOUNDED FOLLOWING",
- /* 326 */ "frame_bound ::= expr PRECEDING|FOLLOWING",
- /* 327 */ "frame_bound ::= CURRENT ROW",
- /* 328 */ "frame_exclude_opt ::=",
- /* 329 */ "frame_exclude_opt ::= EXCLUDE frame_exclude",
- /* 330 */ "frame_exclude ::= NO OTHERS",
- /* 331 */ "frame_exclude ::= CURRENT ROW",
- /* 332 */ "frame_exclude ::= GROUP|TIES",
- /* 333 */ "window_clause ::= WINDOW windowdefn_list",
- /* 334 */ "filter_over ::= filter_clause over_clause",
- /* 335 */ "filter_over ::= over_clause",
- /* 336 */ "filter_over ::= filter_clause",
- /* 337 */ "over_clause ::= OVER LP window RP",
- /* 338 */ "over_clause ::= OVER nm",
- /* 339 */ "filter_clause ::= FILTER LP WHERE expr RP",
- /* 340 */ "input ::= cmdlist",
- /* 341 */ "cmdlist ::= cmdlist ecmd",
- /* 342 */ "cmdlist ::= ecmd",
- /* 343 */ "ecmd ::= SEMI",
- /* 344 */ "ecmd ::= cmdx SEMI",
- /* 345 */ "ecmd ::= explain cmdx SEMI",
- /* 346 */ "trans_opt ::=",
- /* 347 */ "trans_opt ::= TRANSACTION",
- /* 348 */ "trans_opt ::= TRANSACTION nm",
- /* 349 */ "savepoint_opt ::= SAVEPOINT",
- /* 350 */ "savepoint_opt ::=",
- /* 351 */ "cmd ::= create_table create_table_args",
- /* 352 */ "table_option_set ::= table_option",
- /* 353 */ "columnlist ::= columnlist COMMA columnname carglist",
- /* 354 */ "columnlist ::= columnname carglist",
- /* 355 */ "nm ::= ID|INDEXED|JOIN_KW",
- /* 356 */ "nm ::= STRING",
- /* 357 */ "typetoken ::= typename",
- /* 358 */ "typename ::= ID|STRING",
- /* 359 */ "signed ::= plus_num",
- /* 360 */ "signed ::= minus_num",
- /* 361 */ "carglist ::= carglist ccons",
- /* 362 */ "carglist ::=",
- /* 363 */ "ccons ::= NULL onconf",
- /* 364 */ "ccons ::= GENERATED ALWAYS AS generated",
- /* 365 */ "ccons ::= AS generated",
- /* 366 */ "conslist_opt ::= COMMA conslist",
- /* 367 */ "conslist ::= conslist tconscomma tcons",
- /* 368 */ "conslist ::= tcons",
- /* 369 */ "tconscomma ::=",
- /* 370 */ "defer_subclause_opt ::= defer_subclause",
- /* 371 */ "resolvetype ::= raisetype",
- /* 372 */ "selectnowith ::= oneselect",
- /* 373 */ "oneselect ::= values",
- /* 374 */ "sclp ::= selcollist COMMA",
- /* 375 */ "as ::= ID|STRING",
- /* 376 */ "indexed_opt ::= indexed_by",
- /* 377 */ "returning ::=",
- /* 378 */ "expr ::= term",
- /* 379 */ "likeop ::= LIKE_KW|MATCH",
- /* 380 */ "case_operand ::= expr",
- /* 381 */ "exprlist ::= nexprlist",
- /* 382 */ "nmnum ::= plus_num",
- /* 383 */ "nmnum ::= nm",
- /* 384 */ "nmnum ::= ON",
- /* 385 */ "nmnum ::= DELETE",
- /* 386 */ "nmnum ::= DEFAULT",
- /* 387 */ "plus_num ::= INTEGER|FLOAT",
- /* 388 */ "foreach_clause ::=",
- /* 389 */ "foreach_clause ::= FOR EACH ROW",
- /* 390 */ "trnm ::= nm",
- /* 391 */ "tridxby ::=",
- /* 392 */ "database_kw_opt ::= DATABASE",
- /* 393 */ "database_kw_opt ::=",
- /* 394 */ "kwcolumn_opt ::=",
- /* 395 */ "kwcolumn_opt ::= COLUMNKW",
- /* 396 */ "vtabarglist ::= vtabarg",
- /* 397 */ "vtabarglist ::= vtabarglist COMMA vtabarg",
- /* 398 */ "vtabarg ::= vtabarg vtabargtoken",
- /* 399 */ "anylist ::=",
- /* 400 */ "anylist ::= anylist LP anylist RP",
- /* 401 */ "anylist ::= anylist ANY",
- /* 402 */ "with ::=",
- /* 403 */ "windowdefn_list ::= windowdefn",
- /* 404 */ "window ::= frame_opt",
+ /* 95 */ "oneselect ::= mvalues",
+ /* 96 */ "mvalues ::= values COMMA LP nexprlist RP",
+ /* 97 */ "mvalues ::= mvalues COMMA LP nexprlist RP",
+ /* 98 */ "distinct ::= DISTINCT",
+ /* 99 */ "distinct ::= ALL",
+ /* 100 */ "distinct ::=",
+ /* 101 */ "sclp ::=",
+ /* 102 */ "selcollist ::= sclp scanpt expr scanpt as",
+ /* 103 */ "selcollist ::= sclp scanpt STAR",
+ /* 104 */ "selcollist ::= sclp scanpt nm DOT STAR",
+ /* 105 */ "as ::= AS nm",
+ /* 106 */ "as ::=",
+ /* 107 */ "from ::=",
+ /* 108 */ "from ::= FROM seltablist",
+ /* 109 */ "stl_prefix ::= seltablist joinop",
+ /* 110 */ "stl_prefix ::=",
+ /* 111 */ "seltablist ::= stl_prefix nm dbnm as on_using",
+ /* 112 */ "seltablist ::= stl_prefix nm dbnm as indexed_by on_using",
+ /* 113 */ "seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_using",
+ /* 114 */ "seltablist ::= stl_prefix LP select RP as on_using",
+ /* 115 */ "seltablist ::= stl_prefix LP seltablist RP as on_using",
+ /* 116 */ "dbnm ::=",
+ /* 117 */ "dbnm ::= DOT nm",
+ /* 118 */ "fullname ::= nm",
+ /* 119 */ "fullname ::= nm DOT nm",
+ /* 120 */ "xfullname ::= nm",
+ /* 121 */ "xfullname ::= nm DOT nm",
+ /* 122 */ "xfullname ::= nm DOT nm AS nm",
+ /* 123 */ "xfullname ::= nm AS nm",
+ /* 124 */ "joinop ::= COMMA|JOIN",
+ /* 125 */ "joinop ::= JOIN_KW JOIN",
+ /* 126 */ "joinop ::= JOIN_KW nm JOIN",
+ /* 127 */ "joinop ::= JOIN_KW nm nm JOIN",
+ /* 128 */ "on_using ::= ON expr",
+ /* 129 */ "on_using ::= USING LP idlist RP",
+ /* 130 */ "on_using ::=",
+ /* 131 */ "indexed_opt ::=",
+ /* 132 */ "indexed_by ::= INDEXED BY nm",
+ /* 133 */ "indexed_by ::= NOT INDEXED",
+ /* 134 */ "orderby_opt ::=",
+ /* 135 */ "orderby_opt ::= ORDER BY sortlist",
+ /* 136 */ "sortlist ::= sortlist COMMA expr sortorder nulls",
+ /* 137 */ "sortlist ::= expr sortorder nulls",
+ /* 138 */ "sortorder ::= ASC",
+ /* 139 */ "sortorder ::= DESC",
+ /* 140 */ "sortorder ::=",
+ /* 141 */ "nulls ::= NULLS FIRST",
+ /* 142 */ "nulls ::= NULLS LAST",
+ /* 143 */ "nulls ::=",
+ /* 144 */ "groupby_opt ::=",
+ /* 145 */ "groupby_opt ::= GROUP BY nexprlist",
+ /* 146 */ "having_opt ::=",
+ /* 147 */ "having_opt ::= HAVING expr",
+ /* 148 */ "limit_opt ::=",
+ /* 149 */ "limit_opt ::= LIMIT expr",
+ /* 150 */ "limit_opt ::= LIMIT expr OFFSET expr",
+ /* 151 */ "limit_opt ::= LIMIT expr COMMA expr",
+ /* 152 */ "cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret",
+ /* 153 */ "where_opt ::=",
+ /* 154 */ "where_opt ::= WHERE expr",
+ /* 155 */ "where_opt_ret ::=",
+ /* 156 */ "where_opt_ret ::= WHERE expr",
+ /* 157 */ "where_opt_ret ::= RETURNING selcollist",
+ /* 158 */ "where_opt_ret ::= WHERE expr RETURNING selcollist",
+ /* 159 */ "cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt_ret",
+ /* 160 */ "setlist ::= setlist COMMA nm EQ expr",
+ /* 161 */ "setlist ::= setlist COMMA LP idlist RP EQ expr",
+ /* 162 */ "setlist ::= nm EQ expr",
+ /* 163 */ "setlist ::= LP idlist RP EQ expr",
+ /* 164 */ "cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert",
+ /* 165 */ "cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES returning",
+ /* 166 */ "upsert ::=",
+ /* 167 */ "upsert ::= RETURNING selcollist",
+ /* 168 */ "upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt upsert",
+ /* 169 */ "upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING upsert",
+ /* 170 */ "upsert ::= ON CONFLICT DO NOTHING returning",
+ /* 171 */ "upsert ::= ON CONFLICT DO UPDATE SET setlist where_opt returning",
+ /* 172 */ "returning ::= RETURNING selcollist",
+ /* 173 */ "insert_cmd ::= INSERT orconf",
+ /* 174 */ "insert_cmd ::= REPLACE",
+ /* 175 */ "idlist_opt ::=",
+ /* 176 */ "idlist_opt ::= LP idlist RP",
+ /* 177 */ "idlist ::= idlist COMMA nm",
+ /* 178 */ "idlist ::= nm",
+ /* 179 */ "expr ::= LP expr RP",
+ /* 180 */ "expr ::= ID|INDEXED|JOIN_KW",
+ /* 181 */ "expr ::= nm DOT nm",
+ /* 182 */ "expr ::= nm DOT nm DOT nm",
+ /* 183 */ "term ::= NULL|FLOAT|BLOB",
+ /* 184 */ "term ::= STRING",
+ /* 185 */ "term ::= INTEGER",
+ /* 186 */ "expr ::= VARIABLE",
+ /* 187 */ "expr ::= expr COLLATE ID|STRING",
+ /* 188 */ "expr ::= CAST LP expr AS typetoken RP",
+ /* 189 */ "expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP",
+ /* 190 */ "expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP",
+ /* 191 */ "expr ::= ID|INDEXED|JOIN_KW LP STAR RP",
+ /* 192 */ "expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP filter_over",
+ /* 193 */ "expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP filter_over",
+ /* 194 */ "expr ::= ID|INDEXED|JOIN_KW LP STAR RP filter_over",
+ /* 195 */ "term ::= CTIME_KW",
+ /* 196 */ "expr ::= LP nexprlist COMMA expr RP",
+ /* 197 */ "expr ::= expr AND expr",
+ /* 198 */ "expr ::= expr OR expr",
+ /* 199 */ "expr ::= expr LT|GT|GE|LE expr",
+ /* 200 */ "expr ::= expr EQ|NE expr",
+ /* 201 */ "expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr",
+ /* 202 */ "expr ::= expr PLUS|MINUS expr",
+ /* 203 */ "expr ::= expr STAR|SLASH|REM expr",
+ /* 204 */ "expr ::= expr CONCAT expr",
+ /* 205 */ "likeop ::= NOT LIKE_KW|MATCH",
+ /* 206 */ "expr ::= expr likeop expr",
+ /* 207 */ "expr ::= expr likeop expr ESCAPE expr",
+ /* 208 */ "expr ::= expr ISNULL|NOTNULL",
+ /* 209 */ "expr ::= expr NOT NULL",
+ /* 210 */ "expr ::= expr IS expr",
+ /* 211 */ "expr ::= expr IS NOT expr",
+ /* 212 */ "expr ::= expr IS NOT DISTINCT FROM expr",
+ /* 213 */ "expr ::= expr IS DISTINCT FROM expr",
+ /* 214 */ "expr ::= NOT expr",
+ /* 215 */ "expr ::= BITNOT expr",
+ /* 216 */ "expr ::= PLUS|MINUS expr",
+ /* 217 */ "expr ::= expr PTR expr",
+ /* 218 */ "between_op ::= BETWEEN",
+ /* 219 */ "between_op ::= NOT BETWEEN",
+ /* 220 */ "expr ::= expr between_op expr AND expr",
+ /* 221 */ "in_op ::= IN",
+ /* 222 */ "in_op ::= NOT IN",
+ /* 223 */ "expr ::= expr in_op LP exprlist RP",
+ /* 224 */ "expr ::= LP select RP",
+ /* 225 */ "expr ::= expr in_op LP select RP",
+ /* 226 */ "expr ::= expr in_op nm dbnm paren_exprlist",
+ /* 227 */ "expr ::= EXISTS LP select RP",
+ /* 228 */ "expr ::= CASE case_operand case_exprlist case_else END",
+ /* 229 */ "case_exprlist ::= case_exprlist WHEN expr THEN expr",
+ /* 230 */ "case_exprlist ::= WHEN expr THEN expr",
+ /* 231 */ "case_else ::= ELSE expr",
+ /* 232 */ "case_else ::=",
+ /* 233 */ "case_operand ::=",
+ /* 234 */ "exprlist ::=",
+ /* 235 */ "nexprlist ::= nexprlist COMMA expr",
+ /* 236 */ "nexprlist ::= expr",
+ /* 237 */ "paren_exprlist ::=",
+ /* 238 */ "paren_exprlist ::= LP exprlist RP",
+ /* 239 */ "cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt",
+ /* 240 */ "uniqueflag ::= UNIQUE",
+ /* 241 */ "uniqueflag ::=",
+ /* 242 */ "eidlist_opt ::=",
+ /* 243 */ "eidlist_opt ::= LP eidlist RP",
+ /* 244 */ "eidlist ::= eidlist COMMA nm collate sortorder",
+ /* 245 */ "eidlist ::= nm collate sortorder",
+ /* 246 */ "collate ::=",
+ /* 247 */ "collate ::= COLLATE ID|STRING",
+ /* 248 */ "cmd ::= DROP INDEX ifexists fullname",
+ /* 249 */ "cmd ::= VACUUM vinto",
+ /* 250 */ "cmd ::= VACUUM nm vinto",
+ /* 251 */ "vinto ::= INTO expr",
+ /* 252 */ "vinto ::=",
+ /* 253 */ "cmd ::= PRAGMA nm dbnm",
+ /* 254 */ "cmd ::= PRAGMA nm dbnm EQ nmnum",
+ /* 255 */ "cmd ::= PRAGMA nm dbnm LP nmnum RP",
+ /* 256 */ "cmd ::= PRAGMA nm dbnm EQ minus_num",
+ /* 257 */ "cmd ::= PRAGMA nm dbnm LP minus_num RP",
+ /* 258 */ "plus_num ::= PLUS INTEGER|FLOAT",
+ /* 259 */ "minus_num ::= MINUS INTEGER|FLOAT",
+ /* 260 */ "cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END",
+ /* 261 */ "trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause",
+ /* 262 */ "trigger_time ::= BEFORE|AFTER",
+ /* 263 */ "trigger_time ::= INSTEAD OF",
+ /* 264 */ "trigger_time ::=",
+ /* 265 */ "trigger_event ::= DELETE|INSERT",
+ /* 266 */ "trigger_event ::= UPDATE",
+ /* 267 */ "trigger_event ::= UPDATE OF idlist",
+ /* 268 */ "when_clause ::=",
+ /* 269 */ "when_clause ::= WHEN expr",
+ /* 270 */ "trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI",
+ /* 271 */ "trigger_cmd_list ::= trigger_cmd SEMI",
+ /* 272 */ "trnm ::= nm DOT nm",
+ /* 273 */ "tridxby ::= INDEXED BY nm",
+ /* 274 */ "tridxby ::= NOT INDEXED",
+ /* 275 */ "trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt",
+ /* 276 */ "trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt",
+ /* 277 */ "trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt",
+ /* 278 */ "trigger_cmd ::= scanpt select scanpt",
+ /* 279 */ "expr ::= RAISE LP IGNORE RP",
+ /* 280 */ "expr ::= RAISE LP raisetype COMMA nm RP",
+ /* 281 */ "raisetype ::= ROLLBACK",
+ /* 282 */ "raisetype ::= ABORT",
+ /* 283 */ "raisetype ::= FAIL",
+ /* 284 */ "cmd ::= DROP TRIGGER ifexists fullname",
+ /* 285 */ "cmd ::= ATTACH database_kw_opt expr AS expr key_opt",
+ /* 286 */ "cmd ::= DETACH database_kw_opt expr",
+ /* 287 */ "key_opt ::=",
+ /* 288 */ "key_opt ::= KEY expr",
+ /* 289 */ "cmd ::= REINDEX",
+ /* 290 */ "cmd ::= REINDEX nm dbnm",
+ /* 291 */ "cmd ::= ANALYZE",
+ /* 292 */ "cmd ::= ANALYZE nm dbnm",
+ /* 293 */ "cmd ::= ALTER TABLE fullname RENAME TO nm",
+ /* 294 */ "cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist",
+ /* 295 */ "cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm",
+ /* 296 */ "add_column_fullname ::= fullname",
+ /* 297 */ "cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm",
+ /* 298 */ "cmd ::= create_vtab",
+ /* 299 */ "cmd ::= create_vtab LP vtabarglist RP",
+ /* 300 */ "create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm",
+ /* 301 */ "vtabarg ::=",
+ /* 302 */ "vtabargtoken ::= ANY",
+ /* 303 */ "vtabargtoken ::= lp anylist RP",
+ /* 304 */ "lp ::= LP",
+ /* 305 */ "with ::= WITH wqlist",
+ /* 306 */ "with ::= WITH RECURSIVE wqlist",
+ /* 307 */ "wqas ::= AS",
+ /* 308 */ "wqas ::= AS MATERIALIZED",
+ /* 309 */ "wqas ::= AS NOT MATERIALIZED",
+ /* 310 */ "wqitem ::= withnm eidlist_opt wqas LP select RP",
+ /* 311 */ "withnm ::= nm",
+ /* 312 */ "wqlist ::= wqitem",
+ /* 313 */ "wqlist ::= wqlist COMMA wqitem",
+ /* 314 */ "windowdefn_list ::= windowdefn_list COMMA windowdefn",
+ /* 315 */ "windowdefn ::= nm AS LP window RP",
+ /* 316 */ "window ::= PARTITION BY nexprlist orderby_opt frame_opt",
+ /* 317 */ "window ::= nm PARTITION BY nexprlist orderby_opt frame_opt",
+ /* 318 */ "window ::= ORDER BY sortlist frame_opt",
+ /* 319 */ "window ::= nm ORDER BY sortlist frame_opt",
+ /* 320 */ "window ::= nm frame_opt",
+ /* 321 */ "frame_opt ::=",
+ /* 322 */ "frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt",
+ /* 323 */ "frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt",
+ /* 324 */ "range_or_rows ::= RANGE|ROWS|GROUPS",
+ /* 325 */ "frame_bound_s ::= frame_bound",
+ /* 326 */ "frame_bound_s ::= UNBOUNDED PRECEDING",
+ /* 327 */ "frame_bound_e ::= frame_bound",
+ /* 328 */ "frame_bound_e ::= UNBOUNDED FOLLOWING",
+ /* 329 */ "frame_bound ::= expr PRECEDING|FOLLOWING",
+ /* 330 */ "frame_bound ::= CURRENT ROW",
+ /* 331 */ "frame_exclude_opt ::=",
+ /* 332 */ "frame_exclude_opt ::= EXCLUDE frame_exclude",
+ /* 333 */ "frame_exclude ::= NO OTHERS",
+ /* 334 */ "frame_exclude ::= CURRENT ROW",
+ /* 335 */ "frame_exclude ::= GROUP|TIES",
+ /* 336 */ "window_clause ::= WINDOW windowdefn_list",
+ /* 337 */ "filter_over ::= filter_clause over_clause",
+ /* 338 */ "filter_over ::= over_clause",
+ /* 339 */ "filter_over ::= filter_clause",
+ /* 340 */ "over_clause ::= OVER LP window RP",
+ /* 341 */ "over_clause ::= OVER nm",
+ /* 342 */ "filter_clause ::= FILTER LP WHERE expr RP",
+ /* 343 */ "term ::= QNUMBER",
+ /* 344 */ "input ::= cmdlist",
+ /* 345 */ "cmdlist ::= cmdlist ecmd",
+ /* 346 */ "cmdlist ::= ecmd",
+ /* 347 */ "ecmd ::= SEMI",
+ /* 348 */ "ecmd ::= cmdx SEMI",
+ /* 349 */ "ecmd ::= explain cmdx SEMI",
+ /* 350 */ "trans_opt ::=",
+ /* 351 */ "trans_opt ::= TRANSACTION",
+ /* 352 */ "trans_opt ::= TRANSACTION nm",
+ /* 353 */ "savepoint_opt ::= SAVEPOINT",
+ /* 354 */ "savepoint_opt ::=",
+ /* 355 */ "cmd ::= create_table create_table_args",
+ /* 356 */ "table_option_set ::= table_option",
+ /* 357 */ "columnlist ::= columnlist COMMA columnname carglist",
+ /* 358 */ "columnlist ::= columnname carglist",
+ /* 359 */ "nm ::= ID|INDEXED|JOIN_KW",
+ /* 360 */ "nm ::= STRING",
+ /* 361 */ "typetoken ::= typename",
+ /* 362 */ "typename ::= ID|STRING",
+ /* 363 */ "signed ::= plus_num",
+ /* 364 */ "signed ::= minus_num",
+ /* 365 */ "carglist ::= carglist ccons",
+ /* 366 */ "carglist ::=",
+ /* 367 */ "ccons ::= NULL onconf",
+ /* 368 */ "ccons ::= GENERATED ALWAYS AS generated",
+ /* 369 */ "ccons ::= AS generated",
+ /* 370 */ "conslist_opt ::= COMMA conslist",
+ /* 371 */ "conslist ::= conslist tconscomma tcons",
+ /* 372 */ "conslist ::= tcons",
+ /* 373 */ "tconscomma ::=",
+ /* 374 */ "defer_subclause_opt ::= defer_subclause",
+ /* 375 */ "resolvetype ::= raisetype",
+ /* 376 */ "selectnowith ::= oneselect",
+ /* 377 */ "oneselect ::= values",
+ /* 378 */ "sclp ::= selcollist COMMA",
+ /* 379 */ "as ::= ID|STRING",
+ /* 380 */ "indexed_opt ::= indexed_by",
+ /* 381 */ "returning ::=",
+ /* 382 */ "expr ::= term",
+ /* 383 */ "likeop ::= LIKE_KW|MATCH",
+ /* 384 */ "case_operand ::= expr",
+ /* 385 */ "exprlist ::= nexprlist",
+ /* 386 */ "nmnum ::= plus_num",
+ /* 387 */ "nmnum ::= nm",
+ /* 388 */ "nmnum ::= ON",
+ /* 389 */ "nmnum ::= DELETE",
+ /* 390 */ "nmnum ::= DEFAULT",
+ /* 391 */ "plus_num ::= INTEGER|FLOAT",
+ /* 392 */ "foreach_clause ::=",
+ /* 393 */ "foreach_clause ::= FOR EACH ROW",
+ /* 394 */ "trnm ::= nm",
+ /* 395 */ "tridxby ::=",
+ /* 396 */ "database_kw_opt ::= DATABASE",
+ /* 397 */ "database_kw_opt ::=",
+ /* 398 */ "kwcolumn_opt ::=",
+ /* 399 */ "kwcolumn_opt ::= COLUMNKW",
+ /* 400 */ "vtabarglist ::= vtabarg",
+ /* 401 */ "vtabarglist ::= vtabarglist COMMA vtabarg",
+ /* 402 */ "vtabarg ::= vtabarg vtabargtoken",
+ /* 403 */ "anylist ::=",
+ /* 404 */ "anylist ::= anylist LP anylist RP",
+ /* 405 */ "anylist ::= anylist ANY",
+ /* 406 */ "with ::=",
+ /* 407 */ "windowdefn_list ::= windowdefn",
+ /* 408 */ "window ::= frame_opt",
};
#endif /* NDEBUG */
-#if YYSTACKDEPTH<=0
+#if YYGROWABLESTACK
/*
** Try to increase the size of the parser stack. Return the number
** of errors. Return 0 on success.
*/
static int yyGrowStack(yyParser *p){
+ int oldSize = 1 + (int)(p->yystackEnd - p->yystack);
int newSize;
int idx;
yyStackEntry *pNew;
- newSize = p->yystksz*2 + 100;
- idx = p->yytos ? (int)(p->yytos - p->yystack) : 0;
- if( p->yystack==&p->yystk0 ){
- pNew = malloc(newSize*sizeof(pNew[0]));
- if( pNew ) pNew[0] = p->yystk0;
+ newSize = oldSize*2 + 100;
+ idx = (int)(p->yytos - p->yystack);
+ if( p->yystack==p->yystk0 ){
+ pNew = YYREALLOC(0, newSize*sizeof(pNew[0]));
+ if( pNew==0 ) return 1;
+ memcpy(pNew, p->yystack, oldSize*sizeof(pNew[0]));
}else{
- pNew = realloc(p->yystack, newSize*sizeof(pNew[0]));
+ pNew = YYREALLOC(p->yystack, newSize*sizeof(pNew[0]));
+ if( pNew==0 ) return 1;
}
- if( pNew ){
- p->yystack = pNew;
- p->yytos = &p->yystack[idx];
+ p->yystack = pNew;
+ p->yytos = &p->yystack[idx];
#ifndef NDEBUG
- if( yyTraceFILE ){
- fprintf(yyTraceFILE,"%sStack grows from %d to %d entries.\n",
- yyTracePrompt, p->yystksz, newSize);
- }
-#endif
- p->yystksz = newSize;
+ if( yyTraceFILE ){
+ fprintf(yyTraceFILE,"%sStack grows from %d to %d entries.\n",
+ yyTracePrompt, oldSize, newSize);
}
- return pNew==0;
+#endif
+ p->yystackEnd = &p->yystack[newSize-1];
+ return 0;
}
+#endif /* YYGROWABLESTACK */
+
+#if !YYGROWABLESTACK
+/* For builds that do no have a growable stack, yyGrowStack always
+** returns an error.
+*/
+# define yyGrowStack(X) 1
#endif
/* Datatype of the argument to the memory allocated passed as the
@@ -173406,24 +174798,14 @@ SQLITE_PRIVATE void sqlite3ParserInit(void *yypRawParser sqlite3ParserCTX_PDECL)
#ifdef YYTRACKMAXSTACKDEPTH
yypParser->yyhwm = 0;
#endif
-#if YYSTACKDEPTH<=0
- yypParser->yytos = NULL;
- yypParser->yystack = NULL;
- yypParser->yystksz = 0;
- if( yyGrowStack(yypParser) ){
- yypParser->yystack = &yypParser->yystk0;
- yypParser->yystksz = 1;
- }
-#endif
+ yypParser->yystack = yypParser->yystk0;
+ yypParser->yystackEnd = &yypParser->yystack[YYSTACKDEPTH-1];
#ifndef YYNOERRORRECOVERY
yypParser->yyerrcnt = -1;
#endif
yypParser->yytos = yypParser->yystack;
yypParser->yystack[0].stateno = 0;
yypParser->yystack[0].major = 0;
-#if YYSTACKDEPTH>0
- yypParser->yystackEnd = &yypParser->yystack[YYSTACKDEPTH-1];
-#endif
}
#ifndef sqlite3Parser_ENGINEALWAYSONSTACK
@@ -173477,97 +174859,98 @@ static void yy_destructor(
** inside the C code.
*/
/********* Begin destructor definitions ***************************************/
- case 204: /* select */
- case 239: /* selectnowith */
- case 240: /* oneselect */
- case 252: /* values */
+ case 205: /* select */
+ case 240: /* selectnowith */
+ case 241: /* oneselect */
+ case 253: /* values */
+ case 255: /* mvalues */
{
-sqlite3SelectDelete(pParse->db, (yypminor->yy47));
-}
- break;
- case 216: /* term */
- case 217: /* expr */
- case 246: /* where_opt */
- case 248: /* having_opt */
- case 267: /* where_opt_ret */
- case 278: /* case_operand */
- case 280: /* case_else */
- case 283: /* vinto */
- case 290: /* when_clause */
- case 295: /* key_opt */
- case 311: /* filter_clause */
+sqlite3SelectDelete(pParse->db, (yypminor->yy555));
+}
+ break;
+ case 217: /* term */
+ case 218: /* expr */
+ case 247: /* where_opt */
+ case 249: /* having_opt */
+ case 269: /* where_opt_ret */
+ case 280: /* case_operand */
+ case 282: /* case_else */
+ case 285: /* vinto */
+ case 292: /* when_clause */
+ case 297: /* key_opt */
+ case 314: /* filter_clause */
{
-sqlite3ExprDelete(pParse->db, (yypminor->yy528));
-}
- break;
- case 221: /* eidlist_opt */
- case 231: /* sortlist */
- case 232: /* eidlist */
- case 244: /* selcollist */
- case 247: /* groupby_opt */
- case 249: /* orderby_opt */
- case 253: /* nexprlist */
- case 254: /* sclp */
- case 261: /* exprlist */
- case 268: /* setlist */
- case 277: /* paren_exprlist */
- case 279: /* case_exprlist */
- case 310: /* part_opt */
+sqlite3ExprDelete(pParse->db, (yypminor->yy454));
+}
+ break;
+ case 222: /* eidlist_opt */
+ case 232: /* sortlist */
+ case 233: /* eidlist */
+ case 245: /* selcollist */
+ case 248: /* groupby_opt */
+ case 250: /* orderby_opt */
+ case 254: /* nexprlist */
+ case 256: /* sclp */
+ case 263: /* exprlist */
+ case 270: /* setlist */
+ case 279: /* paren_exprlist */
+ case 281: /* case_exprlist */
+ case 313: /* part_opt */
{
-sqlite3ExprListDelete(pParse->db, (yypminor->yy322));
+sqlite3ExprListDelete(pParse->db, (yypminor->yy14));
}
break;
- case 238: /* fullname */
- case 245: /* from */
- case 256: /* seltablist */
- case 257: /* stl_prefix */
- case 262: /* xfullname */
+ case 239: /* fullname */
+ case 246: /* from */
+ case 258: /* seltablist */
+ case 259: /* stl_prefix */
+ case 264: /* xfullname */
{
-sqlite3SrcListDelete(pParse->db, (yypminor->yy131));
+sqlite3SrcListDelete(pParse->db, (yypminor->yy203));
}
break;
- case 241: /* wqlist */
+ case 242: /* wqlist */
{
-sqlite3WithDelete(pParse->db, (yypminor->yy521));
+sqlite3WithDelete(pParse->db, (yypminor->yy59));
}
break;
- case 251: /* window_clause */
- case 306: /* windowdefn_list */
+ case 252: /* window_clause */
+ case 309: /* windowdefn_list */
{
-sqlite3WindowListDelete(pParse->db, (yypminor->yy41));
+sqlite3WindowListDelete(pParse->db, (yypminor->yy211));
}
break;
- case 263: /* idlist */
- case 270: /* idlist_opt */
+ case 265: /* idlist */
+ case 272: /* idlist_opt */
{
-sqlite3IdListDelete(pParse->db, (yypminor->yy254));
+sqlite3IdListDelete(pParse->db, (yypminor->yy132));
}
break;
- case 273: /* filter_over */
- case 307: /* windowdefn */
- case 308: /* window */
- case 309: /* frame_opt */
- case 312: /* over_clause */
+ case 275: /* filter_over */
+ case 310: /* windowdefn */
+ case 311: /* window */
+ case 312: /* frame_opt */
+ case 315: /* over_clause */
{
-sqlite3WindowDelete(pParse->db, (yypminor->yy41));
+sqlite3WindowDelete(pParse->db, (yypminor->yy211));
}
break;
- case 286: /* trigger_cmd_list */
- case 291: /* trigger_cmd */
+ case 288: /* trigger_cmd_list */
+ case 293: /* trigger_cmd */
{
-sqlite3DeleteTriggerStep(pParse->db, (yypminor->yy33));
+sqlite3DeleteTriggerStep(pParse->db, (yypminor->yy427));
}
break;
- case 288: /* trigger_event */
+ case 290: /* trigger_event */
{
-sqlite3IdListDelete(pParse->db, (yypminor->yy180).b);
+sqlite3IdListDelete(pParse->db, (yypminor->yy286).b);
}
break;
- case 314: /* frame_bound */
- case 315: /* frame_bound_s */
- case 316: /* frame_bound_e */
+ case 317: /* frame_bound */
+ case 318: /* frame_bound_s */
+ case 319: /* frame_bound_e */
{
-sqlite3ExprDelete(pParse->db, (yypminor->yy595).pExpr);
+sqlite3ExprDelete(pParse->db, (yypminor->yy509).pExpr);
}
break;
/********* End destructor definitions *****************************************/
@@ -173601,9 +174984,26 @@ static void yy_pop_parser_stack(yyParser *pParser){
*/
SQLITE_PRIVATE void sqlite3ParserFinalize(void *p){
yyParser *pParser = (yyParser*)p;
- while( pParser->yytos>pParser->yystack ) yy_pop_parser_stack(pParser);
-#if YYSTACKDEPTH<=0
- if( pParser->yystack!=&pParser->yystk0 ) free(pParser->yystack);
+
+ /* In-lined version of calling yy_pop_parser_stack() for each
+ ** element left in the stack */
+ yyStackEntry *yytos = pParser->yytos;
+ while( yytos>pParser->yystack ){
+#ifndef NDEBUG
+ if( yyTraceFILE ){
+ fprintf(yyTraceFILE,"%sPopping %s\n",
+ yyTracePrompt,
+ yyTokenName[yytos->major]);
+ }
+#endif
+ if( yytos->major>=YY_MIN_DSTRCTR ){
+ yy_destructor(pParser, yytos->major, &yytos->minor);
+ }
+ yytos--;
+ }
+
+#if YYGROWABLESTACK
+ if( pParser->yystack!=pParser->yystk0 ) YYFREE(pParser->yystack);
#endif
}
@@ -173786,7 +175186,7 @@ static void yyStackOverflow(yyParser *yypParser){
** stack every overflows */
/******** Begin %stack_overflow code ******************************************/
- sqlite3ErrorMsg(pParse, "parser stack overflow");
+ sqlite3OomFault(pParse->db);
/******** End %stack_overflow code ********************************************/
sqlite3ParserARG_STORE /* Suppress warning about unused %extra_argument var */
sqlite3ParserCTX_STORE
@@ -173830,25 +175230,19 @@ static void yy_shift(
assert( yypParser->yyhwm == (int)(yypParser->yytos - yypParser->yystack) );
}
#endif
-#if YYSTACKDEPTH>0
- if( yypParser->yytos>yypParser->yystackEnd ){
- yypParser->yytos--;
- yyStackOverflow(yypParser);
- return;
- }
-#else
- if( yypParser->yytos>=&yypParser->yystack[yypParser->yystksz] ){
+ yytos = yypParser->yytos;
+ if( yytos>yypParser->yystackEnd ){
if( yyGrowStack(yypParser) ){
yypParser->yytos--;
yyStackOverflow(yypParser);
return;
}
+ yytos = yypParser->yytos;
+ assert( yytos <= yypParser->yystackEnd );
}
-#endif
if( yyNewState > YY_MAX_SHIFT ){
yyNewState += YY_MIN_REDUCE - YY_MIN_SHIFTREDUCE;
}
- yytos = yypParser->yytos;
yytos->stateno = yyNewState;
yytos->major = yyMajor;
yytos->minor.yy0 = yyMinor;
@@ -173858,411 +175252,415 @@ static void yy_shift(
/* For rule J, yyRuleInfoLhs[J] contains the symbol on the left-hand side
** of that rule */
static const YYCODETYPE yyRuleInfoLhs[] = {
- 189, /* (0) explain ::= EXPLAIN */
- 189, /* (1) explain ::= EXPLAIN QUERY PLAN */
- 188, /* (2) cmdx ::= cmd */
- 190, /* (3) cmd ::= BEGIN transtype trans_opt */
- 191, /* (4) transtype ::= */
- 191, /* (5) transtype ::= DEFERRED */
- 191, /* (6) transtype ::= IMMEDIATE */
- 191, /* (7) transtype ::= EXCLUSIVE */
- 190, /* (8) cmd ::= COMMIT|END trans_opt */
- 190, /* (9) cmd ::= ROLLBACK trans_opt */
- 190, /* (10) cmd ::= SAVEPOINT nm */
- 190, /* (11) cmd ::= RELEASE savepoint_opt nm */
- 190, /* (12) cmd ::= ROLLBACK trans_opt TO savepoint_opt nm */
- 195, /* (13) create_table ::= createkw temp TABLE ifnotexists nm dbnm */
- 197, /* (14) createkw ::= CREATE */
- 199, /* (15) ifnotexists ::= */
- 199, /* (16) ifnotexists ::= IF NOT EXISTS */
- 198, /* (17) temp ::= TEMP */
- 198, /* (18) temp ::= */
- 196, /* (19) create_table_args ::= LP columnlist conslist_opt RP table_option_set */
- 196, /* (20) create_table_args ::= AS select */
- 203, /* (21) table_option_set ::= */
- 203, /* (22) table_option_set ::= table_option_set COMMA table_option */
- 205, /* (23) table_option ::= WITHOUT nm */
- 205, /* (24) table_option ::= nm */
- 206, /* (25) columnname ::= nm typetoken */
- 208, /* (26) typetoken ::= */
- 208, /* (27) typetoken ::= typename LP signed RP */
- 208, /* (28) typetoken ::= typename LP signed COMMA signed RP */
- 209, /* (29) typename ::= typename ID|STRING */
- 213, /* (30) scanpt ::= */
- 214, /* (31) scantok ::= */
- 215, /* (32) ccons ::= CONSTRAINT nm */
- 215, /* (33) ccons ::= DEFAULT scantok term */
- 215, /* (34) ccons ::= DEFAULT LP expr RP */
- 215, /* (35) ccons ::= DEFAULT PLUS scantok term */
- 215, /* (36) ccons ::= DEFAULT MINUS scantok term */
- 215, /* (37) ccons ::= DEFAULT scantok ID|INDEXED */
- 215, /* (38) ccons ::= NOT NULL onconf */
- 215, /* (39) ccons ::= PRIMARY KEY sortorder onconf autoinc */
- 215, /* (40) ccons ::= UNIQUE onconf */
- 215, /* (41) ccons ::= CHECK LP expr RP */
- 215, /* (42) ccons ::= REFERENCES nm eidlist_opt refargs */
- 215, /* (43) ccons ::= defer_subclause */
- 215, /* (44) ccons ::= COLLATE ID|STRING */
- 224, /* (45) generated ::= LP expr RP */
- 224, /* (46) generated ::= LP expr RP ID */
- 220, /* (47) autoinc ::= */
- 220, /* (48) autoinc ::= AUTOINCR */
- 222, /* (49) refargs ::= */
- 222, /* (50) refargs ::= refargs refarg */
- 225, /* (51) refarg ::= MATCH nm */
- 225, /* (52) refarg ::= ON INSERT refact */
- 225, /* (53) refarg ::= ON DELETE refact */
- 225, /* (54) refarg ::= ON UPDATE refact */
- 226, /* (55) refact ::= SET NULL */
- 226, /* (56) refact ::= SET DEFAULT */
- 226, /* (57) refact ::= CASCADE */
- 226, /* (58) refact ::= RESTRICT */
- 226, /* (59) refact ::= NO ACTION */
- 223, /* (60) defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */
- 223, /* (61) defer_subclause ::= DEFERRABLE init_deferred_pred_opt */
- 227, /* (62) init_deferred_pred_opt ::= */
- 227, /* (63) init_deferred_pred_opt ::= INITIALLY DEFERRED */
- 227, /* (64) init_deferred_pred_opt ::= INITIALLY IMMEDIATE */
- 202, /* (65) conslist_opt ::= */
- 229, /* (66) tconscomma ::= COMMA */
- 230, /* (67) tcons ::= CONSTRAINT nm */
- 230, /* (68) tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf */
- 230, /* (69) tcons ::= UNIQUE LP sortlist RP onconf */
- 230, /* (70) tcons ::= CHECK LP expr RP onconf */
- 230, /* (71) tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt */
- 233, /* (72) defer_subclause_opt ::= */
- 218, /* (73) onconf ::= */
- 218, /* (74) onconf ::= ON CONFLICT resolvetype */
- 234, /* (75) orconf ::= */
- 234, /* (76) orconf ::= OR resolvetype */
- 235, /* (77) resolvetype ::= IGNORE */
- 235, /* (78) resolvetype ::= REPLACE */
- 190, /* (79) cmd ::= DROP TABLE ifexists fullname */
- 237, /* (80) ifexists ::= IF EXISTS */
- 237, /* (81) ifexists ::= */
- 190, /* (82) cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select */
- 190, /* (83) cmd ::= DROP VIEW ifexists fullname */
- 190, /* (84) cmd ::= select */
- 204, /* (85) select ::= WITH wqlist selectnowith */
- 204, /* (86) select ::= WITH RECURSIVE wqlist selectnowith */
- 204, /* (87) select ::= selectnowith */
- 239, /* (88) selectnowith ::= selectnowith multiselect_op oneselect */
- 242, /* (89) multiselect_op ::= UNION */
- 242, /* (90) multiselect_op ::= UNION ALL */
- 242, /* (91) multiselect_op ::= EXCEPT|INTERSECT */
- 240, /* (92) oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */
- 240, /* (93) oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt window_clause orderby_opt limit_opt */
- 252, /* (94) values ::= VALUES LP nexprlist RP */
- 252, /* (95) values ::= values COMMA LP nexprlist RP */
- 243, /* (96) distinct ::= DISTINCT */
- 243, /* (97) distinct ::= ALL */
- 243, /* (98) distinct ::= */
- 254, /* (99) sclp ::= */
- 244, /* (100) selcollist ::= sclp scanpt expr scanpt as */
- 244, /* (101) selcollist ::= sclp scanpt STAR */
- 244, /* (102) selcollist ::= sclp scanpt nm DOT STAR */
- 255, /* (103) as ::= AS nm */
- 255, /* (104) as ::= */
- 245, /* (105) from ::= */
- 245, /* (106) from ::= FROM seltablist */
- 257, /* (107) stl_prefix ::= seltablist joinop */
- 257, /* (108) stl_prefix ::= */
- 256, /* (109) seltablist ::= stl_prefix nm dbnm as on_using */
- 256, /* (110) seltablist ::= stl_prefix nm dbnm as indexed_by on_using */
- 256, /* (111) seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_using */
- 256, /* (112) seltablist ::= stl_prefix LP select RP as on_using */
- 256, /* (113) seltablist ::= stl_prefix LP seltablist RP as on_using */
- 200, /* (114) dbnm ::= */
- 200, /* (115) dbnm ::= DOT nm */
- 238, /* (116) fullname ::= nm */
- 238, /* (117) fullname ::= nm DOT nm */
- 262, /* (118) xfullname ::= nm */
- 262, /* (119) xfullname ::= nm DOT nm */
- 262, /* (120) xfullname ::= nm DOT nm AS nm */
- 262, /* (121) xfullname ::= nm AS nm */
- 258, /* (122) joinop ::= COMMA|JOIN */
- 258, /* (123) joinop ::= JOIN_KW JOIN */
- 258, /* (124) joinop ::= JOIN_KW nm JOIN */
- 258, /* (125) joinop ::= JOIN_KW nm nm JOIN */
- 259, /* (126) on_using ::= ON expr */
- 259, /* (127) on_using ::= USING LP idlist RP */
- 259, /* (128) on_using ::= */
- 264, /* (129) indexed_opt ::= */
- 260, /* (130) indexed_by ::= INDEXED BY nm */
- 260, /* (131) indexed_by ::= NOT INDEXED */
- 249, /* (132) orderby_opt ::= */
- 249, /* (133) orderby_opt ::= ORDER BY sortlist */
- 231, /* (134) sortlist ::= sortlist COMMA expr sortorder nulls */
- 231, /* (135) sortlist ::= expr sortorder nulls */
- 219, /* (136) sortorder ::= ASC */
- 219, /* (137) sortorder ::= DESC */
- 219, /* (138) sortorder ::= */
- 265, /* (139) nulls ::= NULLS FIRST */
- 265, /* (140) nulls ::= NULLS LAST */
- 265, /* (141) nulls ::= */
- 247, /* (142) groupby_opt ::= */
- 247, /* (143) groupby_opt ::= GROUP BY nexprlist */
- 248, /* (144) having_opt ::= */
- 248, /* (145) having_opt ::= HAVING expr */
- 250, /* (146) limit_opt ::= */
- 250, /* (147) limit_opt ::= LIMIT expr */
- 250, /* (148) limit_opt ::= LIMIT expr OFFSET expr */
- 250, /* (149) limit_opt ::= LIMIT expr COMMA expr */
- 190, /* (150) cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret */
- 246, /* (151) where_opt ::= */
- 246, /* (152) where_opt ::= WHERE expr */
- 267, /* (153) where_opt_ret ::= */
- 267, /* (154) where_opt_ret ::= WHERE expr */
- 267, /* (155) where_opt_ret ::= RETURNING selcollist */
- 267, /* (156) where_opt_ret ::= WHERE expr RETURNING selcollist */
- 190, /* (157) cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt_ret */
- 268, /* (158) setlist ::= setlist COMMA nm EQ expr */
- 268, /* (159) setlist ::= setlist COMMA LP idlist RP EQ expr */
- 268, /* (160) setlist ::= nm EQ expr */
- 268, /* (161) setlist ::= LP idlist RP EQ expr */
- 190, /* (162) cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert */
- 190, /* (163) cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES returning */
- 271, /* (164) upsert ::= */
- 271, /* (165) upsert ::= RETURNING selcollist */
- 271, /* (166) upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt upsert */
- 271, /* (167) upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING upsert */
- 271, /* (168) upsert ::= ON CONFLICT DO NOTHING returning */
- 271, /* (169) upsert ::= ON CONFLICT DO UPDATE SET setlist where_opt returning */
- 272, /* (170) returning ::= RETURNING selcollist */
- 269, /* (171) insert_cmd ::= INSERT orconf */
- 269, /* (172) insert_cmd ::= REPLACE */
- 270, /* (173) idlist_opt ::= */
- 270, /* (174) idlist_opt ::= LP idlist RP */
- 263, /* (175) idlist ::= idlist COMMA nm */
- 263, /* (176) idlist ::= nm */
- 217, /* (177) expr ::= LP expr RP */
- 217, /* (178) expr ::= ID|INDEXED|JOIN_KW */
- 217, /* (179) expr ::= nm DOT nm */
- 217, /* (180) expr ::= nm DOT nm DOT nm */
- 216, /* (181) term ::= NULL|FLOAT|BLOB */
- 216, /* (182) term ::= STRING */
- 216, /* (183) term ::= INTEGER */
- 217, /* (184) expr ::= VARIABLE */
- 217, /* (185) expr ::= expr COLLATE ID|STRING */
- 217, /* (186) expr ::= CAST LP expr AS typetoken RP */
- 217, /* (187) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP */
- 217, /* (188) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP */
- 217, /* (189) expr ::= ID|INDEXED|JOIN_KW LP STAR RP */
- 217, /* (190) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP filter_over */
- 217, /* (191) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP filter_over */
- 217, /* (192) expr ::= ID|INDEXED|JOIN_KW LP STAR RP filter_over */
- 216, /* (193) term ::= CTIME_KW */
- 217, /* (194) expr ::= LP nexprlist COMMA expr RP */
- 217, /* (195) expr ::= expr AND expr */
- 217, /* (196) expr ::= expr OR expr */
- 217, /* (197) expr ::= expr LT|GT|GE|LE expr */
- 217, /* (198) expr ::= expr EQ|NE expr */
- 217, /* (199) expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */
- 217, /* (200) expr ::= expr PLUS|MINUS expr */
- 217, /* (201) expr ::= expr STAR|SLASH|REM expr */
- 217, /* (202) expr ::= expr CONCAT expr */
- 274, /* (203) likeop ::= NOT LIKE_KW|MATCH */
- 217, /* (204) expr ::= expr likeop expr */
- 217, /* (205) expr ::= expr likeop expr ESCAPE expr */
- 217, /* (206) expr ::= expr ISNULL|NOTNULL */
- 217, /* (207) expr ::= expr NOT NULL */
- 217, /* (208) expr ::= expr IS expr */
- 217, /* (209) expr ::= expr IS NOT expr */
- 217, /* (210) expr ::= expr IS NOT DISTINCT FROM expr */
- 217, /* (211) expr ::= expr IS DISTINCT FROM expr */
- 217, /* (212) expr ::= NOT expr */
- 217, /* (213) expr ::= BITNOT expr */
- 217, /* (214) expr ::= PLUS|MINUS expr */
- 217, /* (215) expr ::= expr PTR expr */
- 275, /* (216) between_op ::= BETWEEN */
- 275, /* (217) between_op ::= NOT BETWEEN */
- 217, /* (218) expr ::= expr between_op expr AND expr */
- 276, /* (219) in_op ::= IN */
- 276, /* (220) in_op ::= NOT IN */
- 217, /* (221) expr ::= expr in_op LP exprlist RP */
- 217, /* (222) expr ::= LP select RP */
- 217, /* (223) expr ::= expr in_op LP select RP */
- 217, /* (224) expr ::= expr in_op nm dbnm paren_exprlist */
- 217, /* (225) expr ::= EXISTS LP select RP */
- 217, /* (226) expr ::= CASE case_operand case_exprlist case_else END */
- 279, /* (227) case_exprlist ::= case_exprlist WHEN expr THEN expr */
- 279, /* (228) case_exprlist ::= WHEN expr THEN expr */
- 280, /* (229) case_else ::= ELSE expr */
- 280, /* (230) case_else ::= */
- 278, /* (231) case_operand ::= */
- 261, /* (232) exprlist ::= */
- 253, /* (233) nexprlist ::= nexprlist COMMA expr */
- 253, /* (234) nexprlist ::= expr */
- 277, /* (235) paren_exprlist ::= */
- 277, /* (236) paren_exprlist ::= LP exprlist RP */
- 190, /* (237) cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */
- 281, /* (238) uniqueflag ::= UNIQUE */
- 281, /* (239) uniqueflag ::= */
- 221, /* (240) eidlist_opt ::= */
- 221, /* (241) eidlist_opt ::= LP eidlist RP */
- 232, /* (242) eidlist ::= eidlist COMMA nm collate sortorder */
- 232, /* (243) eidlist ::= nm collate sortorder */
- 282, /* (244) collate ::= */
- 282, /* (245) collate ::= COLLATE ID|STRING */
- 190, /* (246) cmd ::= DROP INDEX ifexists fullname */
- 190, /* (247) cmd ::= VACUUM vinto */
- 190, /* (248) cmd ::= VACUUM nm vinto */
- 283, /* (249) vinto ::= INTO expr */
- 283, /* (250) vinto ::= */
- 190, /* (251) cmd ::= PRAGMA nm dbnm */
- 190, /* (252) cmd ::= PRAGMA nm dbnm EQ nmnum */
- 190, /* (253) cmd ::= PRAGMA nm dbnm LP nmnum RP */
- 190, /* (254) cmd ::= PRAGMA nm dbnm EQ minus_num */
- 190, /* (255) cmd ::= PRAGMA nm dbnm LP minus_num RP */
- 211, /* (256) plus_num ::= PLUS INTEGER|FLOAT */
- 212, /* (257) minus_num ::= MINUS INTEGER|FLOAT */
- 190, /* (258) cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */
- 285, /* (259) trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */
- 287, /* (260) trigger_time ::= BEFORE|AFTER */
- 287, /* (261) trigger_time ::= INSTEAD OF */
- 287, /* (262) trigger_time ::= */
- 288, /* (263) trigger_event ::= DELETE|INSERT */
- 288, /* (264) trigger_event ::= UPDATE */
- 288, /* (265) trigger_event ::= UPDATE OF idlist */
- 290, /* (266) when_clause ::= */
- 290, /* (267) when_clause ::= WHEN expr */
- 286, /* (268) trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */
- 286, /* (269) trigger_cmd_list ::= trigger_cmd SEMI */
- 292, /* (270) trnm ::= nm DOT nm */
- 293, /* (271) tridxby ::= INDEXED BY nm */
- 293, /* (272) tridxby ::= NOT INDEXED */
- 291, /* (273) trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt */
- 291, /* (274) trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */
- 291, /* (275) trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */
- 291, /* (276) trigger_cmd ::= scanpt select scanpt */
- 217, /* (277) expr ::= RAISE LP IGNORE RP */
- 217, /* (278) expr ::= RAISE LP raisetype COMMA nm RP */
- 236, /* (279) raisetype ::= ROLLBACK */
- 236, /* (280) raisetype ::= ABORT */
- 236, /* (281) raisetype ::= FAIL */
- 190, /* (282) cmd ::= DROP TRIGGER ifexists fullname */
- 190, /* (283) cmd ::= ATTACH database_kw_opt expr AS expr key_opt */
- 190, /* (284) cmd ::= DETACH database_kw_opt expr */
- 295, /* (285) key_opt ::= */
- 295, /* (286) key_opt ::= KEY expr */
- 190, /* (287) cmd ::= REINDEX */
- 190, /* (288) cmd ::= REINDEX nm dbnm */
- 190, /* (289) cmd ::= ANALYZE */
- 190, /* (290) cmd ::= ANALYZE nm dbnm */
- 190, /* (291) cmd ::= ALTER TABLE fullname RENAME TO nm */
- 190, /* (292) cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */
- 190, /* (293) cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm */
- 296, /* (294) add_column_fullname ::= fullname */
- 190, /* (295) cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm */
- 190, /* (296) cmd ::= create_vtab */
- 190, /* (297) cmd ::= create_vtab LP vtabarglist RP */
- 298, /* (298) create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */
- 300, /* (299) vtabarg ::= */
- 301, /* (300) vtabargtoken ::= ANY */
- 301, /* (301) vtabargtoken ::= lp anylist RP */
- 302, /* (302) lp ::= LP */
- 266, /* (303) with ::= WITH wqlist */
- 266, /* (304) with ::= WITH RECURSIVE wqlist */
- 305, /* (305) wqas ::= AS */
- 305, /* (306) wqas ::= AS MATERIALIZED */
- 305, /* (307) wqas ::= AS NOT MATERIALIZED */
- 304, /* (308) wqitem ::= nm eidlist_opt wqas LP select RP */
- 241, /* (309) wqlist ::= wqitem */
- 241, /* (310) wqlist ::= wqlist COMMA wqitem */
- 306, /* (311) windowdefn_list ::= windowdefn_list COMMA windowdefn */
- 307, /* (312) windowdefn ::= nm AS LP window RP */
- 308, /* (313) window ::= PARTITION BY nexprlist orderby_opt frame_opt */
- 308, /* (314) window ::= nm PARTITION BY nexprlist orderby_opt frame_opt */
- 308, /* (315) window ::= ORDER BY sortlist frame_opt */
- 308, /* (316) window ::= nm ORDER BY sortlist frame_opt */
- 308, /* (317) window ::= nm frame_opt */
- 309, /* (318) frame_opt ::= */
- 309, /* (319) frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt */
- 309, /* (320) frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt */
- 313, /* (321) range_or_rows ::= RANGE|ROWS|GROUPS */
- 315, /* (322) frame_bound_s ::= frame_bound */
- 315, /* (323) frame_bound_s ::= UNBOUNDED PRECEDING */
- 316, /* (324) frame_bound_e ::= frame_bound */
- 316, /* (325) frame_bound_e ::= UNBOUNDED FOLLOWING */
- 314, /* (326) frame_bound ::= expr PRECEDING|FOLLOWING */
- 314, /* (327) frame_bound ::= CURRENT ROW */
- 317, /* (328) frame_exclude_opt ::= */
- 317, /* (329) frame_exclude_opt ::= EXCLUDE frame_exclude */
- 318, /* (330) frame_exclude ::= NO OTHERS */
- 318, /* (331) frame_exclude ::= CURRENT ROW */
- 318, /* (332) frame_exclude ::= GROUP|TIES */
- 251, /* (333) window_clause ::= WINDOW windowdefn_list */
- 273, /* (334) filter_over ::= filter_clause over_clause */
- 273, /* (335) filter_over ::= over_clause */
- 273, /* (336) filter_over ::= filter_clause */
- 312, /* (337) over_clause ::= OVER LP window RP */
- 312, /* (338) over_clause ::= OVER nm */
- 311, /* (339) filter_clause ::= FILTER LP WHERE expr RP */
- 185, /* (340) input ::= cmdlist */
- 186, /* (341) cmdlist ::= cmdlist ecmd */
- 186, /* (342) cmdlist ::= ecmd */
- 187, /* (343) ecmd ::= SEMI */
- 187, /* (344) ecmd ::= cmdx SEMI */
- 187, /* (345) ecmd ::= explain cmdx SEMI */
- 192, /* (346) trans_opt ::= */
- 192, /* (347) trans_opt ::= TRANSACTION */
- 192, /* (348) trans_opt ::= TRANSACTION nm */
- 194, /* (349) savepoint_opt ::= SAVEPOINT */
- 194, /* (350) savepoint_opt ::= */
- 190, /* (351) cmd ::= create_table create_table_args */
- 203, /* (352) table_option_set ::= table_option */
- 201, /* (353) columnlist ::= columnlist COMMA columnname carglist */
- 201, /* (354) columnlist ::= columnname carglist */
- 193, /* (355) nm ::= ID|INDEXED|JOIN_KW */
- 193, /* (356) nm ::= STRING */
- 208, /* (357) typetoken ::= typename */
- 209, /* (358) typename ::= ID|STRING */
- 210, /* (359) signed ::= plus_num */
- 210, /* (360) signed ::= minus_num */
- 207, /* (361) carglist ::= carglist ccons */
- 207, /* (362) carglist ::= */
- 215, /* (363) ccons ::= NULL onconf */
- 215, /* (364) ccons ::= GENERATED ALWAYS AS generated */
- 215, /* (365) ccons ::= AS generated */
- 202, /* (366) conslist_opt ::= COMMA conslist */
- 228, /* (367) conslist ::= conslist tconscomma tcons */
- 228, /* (368) conslist ::= tcons */
- 229, /* (369) tconscomma ::= */
- 233, /* (370) defer_subclause_opt ::= defer_subclause */
- 235, /* (371) resolvetype ::= raisetype */
- 239, /* (372) selectnowith ::= oneselect */
- 240, /* (373) oneselect ::= values */
- 254, /* (374) sclp ::= selcollist COMMA */
- 255, /* (375) as ::= ID|STRING */
- 264, /* (376) indexed_opt ::= indexed_by */
- 272, /* (377) returning ::= */
- 217, /* (378) expr ::= term */
- 274, /* (379) likeop ::= LIKE_KW|MATCH */
- 278, /* (380) case_operand ::= expr */
- 261, /* (381) exprlist ::= nexprlist */
- 284, /* (382) nmnum ::= plus_num */
- 284, /* (383) nmnum ::= nm */
- 284, /* (384) nmnum ::= ON */
- 284, /* (385) nmnum ::= DELETE */
- 284, /* (386) nmnum ::= DEFAULT */
- 211, /* (387) plus_num ::= INTEGER|FLOAT */
- 289, /* (388) foreach_clause ::= */
- 289, /* (389) foreach_clause ::= FOR EACH ROW */
- 292, /* (390) trnm ::= nm */
- 293, /* (391) tridxby ::= */
- 294, /* (392) database_kw_opt ::= DATABASE */
- 294, /* (393) database_kw_opt ::= */
- 297, /* (394) kwcolumn_opt ::= */
- 297, /* (395) kwcolumn_opt ::= COLUMNKW */
- 299, /* (396) vtabarglist ::= vtabarg */
- 299, /* (397) vtabarglist ::= vtabarglist COMMA vtabarg */
- 300, /* (398) vtabarg ::= vtabarg vtabargtoken */
- 303, /* (399) anylist ::= */
- 303, /* (400) anylist ::= anylist LP anylist RP */
- 303, /* (401) anylist ::= anylist ANY */
- 266, /* (402) with ::= */
- 306, /* (403) windowdefn_list ::= windowdefn */
- 308, /* (404) window ::= frame_opt */
+ 190, /* (0) explain ::= EXPLAIN */
+ 190, /* (1) explain ::= EXPLAIN QUERY PLAN */
+ 189, /* (2) cmdx ::= cmd */
+ 191, /* (3) cmd ::= BEGIN transtype trans_opt */
+ 192, /* (4) transtype ::= */
+ 192, /* (5) transtype ::= DEFERRED */
+ 192, /* (6) transtype ::= IMMEDIATE */
+ 192, /* (7) transtype ::= EXCLUSIVE */
+ 191, /* (8) cmd ::= COMMIT|END trans_opt */
+ 191, /* (9) cmd ::= ROLLBACK trans_opt */
+ 191, /* (10) cmd ::= SAVEPOINT nm */
+ 191, /* (11) cmd ::= RELEASE savepoint_opt nm */
+ 191, /* (12) cmd ::= ROLLBACK trans_opt TO savepoint_opt nm */
+ 196, /* (13) create_table ::= createkw temp TABLE ifnotexists nm dbnm */
+ 198, /* (14) createkw ::= CREATE */
+ 200, /* (15) ifnotexists ::= */
+ 200, /* (16) ifnotexists ::= IF NOT EXISTS */
+ 199, /* (17) temp ::= TEMP */
+ 199, /* (18) temp ::= */
+ 197, /* (19) create_table_args ::= LP columnlist conslist_opt RP table_option_set */
+ 197, /* (20) create_table_args ::= AS select */
+ 204, /* (21) table_option_set ::= */
+ 204, /* (22) table_option_set ::= table_option_set COMMA table_option */
+ 206, /* (23) table_option ::= WITHOUT nm */
+ 206, /* (24) table_option ::= nm */
+ 207, /* (25) columnname ::= nm typetoken */
+ 209, /* (26) typetoken ::= */
+ 209, /* (27) typetoken ::= typename LP signed RP */
+ 209, /* (28) typetoken ::= typename LP signed COMMA signed RP */
+ 210, /* (29) typename ::= typename ID|STRING */
+ 214, /* (30) scanpt ::= */
+ 215, /* (31) scantok ::= */
+ 216, /* (32) ccons ::= CONSTRAINT nm */
+ 216, /* (33) ccons ::= DEFAULT scantok term */
+ 216, /* (34) ccons ::= DEFAULT LP expr RP */
+ 216, /* (35) ccons ::= DEFAULT PLUS scantok term */
+ 216, /* (36) ccons ::= DEFAULT MINUS scantok term */
+ 216, /* (37) ccons ::= DEFAULT scantok ID|INDEXED */
+ 216, /* (38) ccons ::= NOT NULL onconf */
+ 216, /* (39) ccons ::= PRIMARY KEY sortorder onconf autoinc */
+ 216, /* (40) ccons ::= UNIQUE onconf */
+ 216, /* (41) ccons ::= CHECK LP expr RP */
+ 216, /* (42) ccons ::= REFERENCES nm eidlist_opt refargs */
+ 216, /* (43) ccons ::= defer_subclause */
+ 216, /* (44) ccons ::= COLLATE ID|STRING */
+ 225, /* (45) generated ::= LP expr RP */
+ 225, /* (46) generated ::= LP expr RP ID */
+ 221, /* (47) autoinc ::= */
+ 221, /* (48) autoinc ::= AUTOINCR */
+ 223, /* (49) refargs ::= */
+ 223, /* (50) refargs ::= refargs refarg */
+ 226, /* (51) refarg ::= MATCH nm */
+ 226, /* (52) refarg ::= ON INSERT refact */
+ 226, /* (53) refarg ::= ON DELETE refact */
+ 226, /* (54) refarg ::= ON UPDATE refact */
+ 227, /* (55) refact ::= SET NULL */
+ 227, /* (56) refact ::= SET DEFAULT */
+ 227, /* (57) refact ::= CASCADE */
+ 227, /* (58) refact ::= RESTRICT */
+ 227, /* (59) refact ::= NO ACTION */
+ 224, /* (60) defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */
+ 224, /* (61) defer_subclause ::= DEFERRABLE init_deferred_pred_opt */
+ 228, /* (62) init_deferred_pred_opt ::= */
+ 228, /* (63) init_deferred_pred_opt ::= INITIALLY DEFERRED */
+ 228, /* (64) init_deferred_pred_opt ::= INITIALLY IMMEDIATE */
+ 203, /* (65) conslist_opt ::= */
+ 230, /* (66) tconscomma ::= COMMA */
+ 231, /* (67) tcons ::= CONSTRAINT nm */
+ 231, /* (68) tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf */
+ 231, /* (69) tcons ::= UNIQUE LP sortlist RP onconf */
+ 231, /* (70) tcons ::= CHECK LP expr RP onconf */
+ 231, /* (71) tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt */
+ 234, /* (72) defer_subclause_opt ::= */
+ 219, /* (73) onconf ::= */
+ 219, /* (74) onconf ::= ON CONFLICT resolvetype */
+ 235, /* (75) orconf ::= */
+ 235, /* (76) orconf ::= OR resolvetype */
+ 236, /* (77) resolvetype ::= IGNORE */
+ 236, /* (78) resolvetype ::= REPLACE */
+ 191, /* (79) cmd ::= DROP TABLE ifexists fullname */
+ 238, /* (80) ifexists ::= IF EXISTS */
+ 238, /* (81) ifexists ::= */
+ 191, /* (82) cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select */
+ 191, /* (83) cmd ::= DROP VIEW ifexists fullname */
+ 191, /* (84) cmd ::= select */
+ 205, /* (85) select ::= WITH wqlist selectnowith */
+ 205, /* (86) select ::= WITH RECURSIVE wqlist selectnowith */
+ 205, /* (87) select ::= selectnowith */
+ 240, /* (88) selectnowith ::= selectnowith multiselect_op oneselect */
+ 243, /* (89) multiselect_op ::= UNION */
+ 243, /* (90) multiselect_op ::= UNION ALL */
+ 243, /* (91) multiselect_op ::= EXCEPT|INTERSECT */
+ 241, /* (92) oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */
+ 241, /* (93) oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt window_clause orderby_opt limit_opt */
+ 253, /* (94) values ::= VALUES LP nexprlist RP */
+ 241, /* (95) oneselect ::= mvalues */
+ 255, /* (96) mvalues ::= values COMMA LP nexprlist RP */
+ 255, /* (97) mvalues ::= mvalues COMMA LP nexprlist RP */
+ 244, /* (98) distinct ::= DISTINCT */
+ 244, /* (99) distinct ::= ALL */
+ 244, /* (100) distinct ::= */
+ 256, /* (101) sclp ::= */
+ 245, /* (102) selcollist ::= sclp scanpt expr scanpt as */
+ 245, /* (103) selcollist ::= sclp scanpt STAR */
+ 245, /* (104) selcollist ::= sclp scanpt nm DOT STAR */
+ 257, /* (105) as ::= AS nm */
+ 257, /* (106) as ::= */
+ 246, /* (107) from ::= */
+ 246, /* (108) from ::= FROM seltablist */
+ 259, /* (109) stl_prefix ::= seltablist joinop */
+ 259, /* (110) stl_prefix ::= */
+ 258, /* (111) seltablist ::= stl_prefix nm dbnm as on_using */
+ 258, /* (112) seltablist ::= stl_prefix nm dbnm as indexed_by on_using */
+ 258, /* (113) seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_using */
+ 258, /* (114) seltablist ::= stl_prefix LP select RP as on_using */
+ 258, /* (115) seltablist ::= stl_prefix LP seltablist RP as on_using */
+ 201, /* (116) dbnm ::= */
+ 201, /* (117) dbnm ::= DOT nm */
+ 239, /* (118) fullname ::= nm */
+ 239, /* (119) fullname ::= nm DOT nm */
+ 264, /* (120) xfullname ::= nm */
+ 264, /* (121) xfullname ::= nm DOT nm */
+ 264, /* (122) xfullname ::= nm DOT nm AS nm */
+ 264, /* (123) xfullname ::= nm AS nm */
+ 260, /* (124) joinop ::= COMMA|JOIN */
+ 260, /* (125) joinop ::= JOIN_KW JOIN */
+ 260, /* (126) joinop ::= JOIN_KW nm JOIN */
+ 260, /* (127) joinop ::= JOIN_KW nm nm JOIN */
+ 261, /* (128) on_using ::= ON expr */
+ 261, /* (129) on_using ::= USING LP idlist RP */
+ 261, /* (130) on_using ::= */
+ 266, /* (131) indexed_opt ::= */
+ 262, /* (132) indexed_by ::= INDEXED BY nm */
+ 262, /* (133) indexed_by ::= NOT INDEXED */
+ 250, /* (134) orderby_opt ::= */
+ 250, /* (135) orderby_opt ::= ORDER BY sortlist */
+ 232, /* (136) sortlist ::= sortlist COMMA expr sortorder nulls */
+ 232, /* (137) sortlist ::= expr sortorder nulls */
+ 220, /* (138) sortorder ::= ASC */
+ 220, /* (139) sortorder ::= DESC */
+ 220, /* (140) sortorder ::= */
+ 267, /* (141) nulls ::= NULLS FIRST */
+ 267, /* (142) nulls ::= NULLS LAST */
+ 267, /* (143) nulls ::= */
+ 248, /* (144) groupby_opt ::= */
+ 248, /* (145) groupby_opt ::= GROUP BY nexprlist */
+ 249, /* (146) having_opt ::= */
+ 249, /* (147) having_opt ::= HAVING expr */
+ 251, /* (148) limit_opt ::= */
+ 251, /* (149) limit_opt ::= LIMIT expr */
+ 251, /* (150) limit_opt ::= LIMIT expr OFFSET expr */
+ 251, /* (151) limit_opt ::= LIMIT expr COMMA expr */
+ 191, /* (152) cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret */
+ 247, /* (153) where_opt ::= */
+ 247, /* (154) where_opt ::= WHERE expr */
+ 269, /* (155) where_opt_ret ::= */
+ 269, /* (156) where_opt_ret ::= WHERE expr */
+ 269, /* (157) where_opt_ret ::= RETURNING selcollist */
+ 269, /* (158) where_opt_ret ::= WHERE expr RETURNING selcollist */
+ 191, /* (159) cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt_ret */
+ 270, /* (160) setlist ::= setlist COMMA nm EQ expr */
+ 270, /* (161) setlist ::= setlist COMMA LP idlist RP EQ expr */
+ 270, /* (162) setlist ::= nm EQ expr */
+ 270, /* (163) setlist ::= LP idlist RP EQ expr */
+ 191, /* (164) cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert */
+ 191, /* (165) cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES returning */
+ 273, /* (166) upsert ::= */
+ 273, /* (167) upsert ::= RETURNING selcollist */
+ 273, /* (168) upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt upsert */
+ 273, /* (169) upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING upsert */
+ 273, /* (170) upsert ::= ON CONFLICT DO NOTHING returning */
+ 273, /* (171) upsert ::= ON CONFLICT DO UPDATE SET setlist where_opt returning */
+ 274, /* (172) returning ::= RETURNING selcollist */
+ 271, /* (173) insert_cmd ::= INSERT orconf */
+ 271, /* (174) insert_cmd ::= REPLACE */
+ 272, /* (175) idlist_opt ::= */
+ 272, /* (176) idlist_opt ::= LP idlist RP */
+ 265, /* (177) idlist ::= idlist COMMA nm */
+ 265, /* (178) idlist ::= nm */
+ 218, /* (179) expr ::= LP expr RP */
+ 218, /* (180) expr ::= ID|INDEXED|JOIN_KW */
+ 218, /* (181) expr ::= nm DOT nm */
+ 218, /* (182) expr ::= nm DOT nm DOT nm */
+ 217, /* (183) term ::= NULL|FLOAT|BLOB */
+ 217, /* (184) term ::= STRING */
+ 217, /* (185) term ::= INTEGER */
+ 218, /* (186) expr ::= VARIABLE */
+ 218, /* (187) expr ::= expr COLLATE ID|STRING */
+ 218, /* (188) expr ::= CAST LP expr AS typetoken RP */
+ 218, /* (189) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP */
+ 218, /* (190) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP */
+ 218, /* (191) expr ::= ID|INDEXED|JOIN_KW LP STAR RP */
+ 218, /* (192) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP filter_over */
+ 218, /* (193) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP filter_over */
+ 218, /* (194) expr ::= ID|INDEXED|JOIN_KW LP STAR RP filter_over */
+ 217, /* (195) term ::= CTIME_KW */
+ 218, /* (196) expr ::= LP nexprlist COMMA expr RP */
+ 218, /* (197) expr ::= expr AND expr */
+ 218, /* (198) expr ::= expr OR expr */
+ 218, /* (199) expr ::= expr LT|GT|GE|LE expr */
+ 218, /* (200) expr ::= expr EQ|NE expr */
+ 218, /* (201) expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */
+ 218, /* (202) expr ::= expr PLUS|MINUS expr */
+ 218, /* (203) expr ::= expr STAR|SLASH|REM expr */
+ 218, /* (204) expr ::= expr CONCAT expr */
+ 276, /* (205) likeop ::= NOT LIKE_KW|MATCH */
+ 218, /* (206) expr ::= expr likeop expr */
+ 218, /* (207) expr ::= expr likeop expr ESCAPE expr */
+ 218, /* (208) expr ::= expr ISNULL|NOTNULL */
+ 218, /* (209) expr ::= expr NOT NULL */
+ 218, /* (210) expr ::= expr IS expr */
+ 218, /* (211) expr ::= expr IS NOT expr */
+ 218, /* (212) expr ::= expr IS NOT DISTINCT FROM expr */
+ 218, /* (213) expr ::= expr IS DISTINCT FROM expr */
+ 218, /* (214) expr ::= NOT expr */
+ 218, /* (215) expr ::= BITNOT expr */
+ 218, /* (216) expr ::= PLUS|MINUS expr */
+ 218, /* (217) expr ::= expr PTR expr */
+ 277, /* (218) between_op ::= BETWEEN */
+ 277, /* (219) between_op ::= NOT BETWEEN */
+ 218, /* (220) expr ::= expr between_op expr AND expr */
+ 278, /* (221) in_op ::= IN */
+ 278, /* (222) in_op ::= NOT IN */
+ 218, /* (223) expr ::= expr in_op LP exprlist RP */
+ 218, /* (224) expr ::= LP select RP */
+ 218, /* (225) expr ::= expr in_op LP select RP */
+ 218, /* (226) expr ::= expr in_op nm dbnm paren_exprlist */
+ 218, /* (227) expr ::= EXISTS LP select RP */
+ 218, /* (228) expr ::= CASE case_operand case_exprlist case_else END */
+ 281, /* (229) case_exprlist ::= case_exprlist WHEN expr THEN expr */
+ 281, /* (230) case_exprlist ::= WHEN expr THEN expr */
+ 282, /* (231) case_else ::= ELSE expr */
+ 282, /* (232) case_else ::= */
+ 280, /* (233) case_operand ::= */
+ 263, /* (234) exprlist ::= */
+ 254, /* (235) nexprlist ::= nexprlist COMMA expr */
+ 254, /* (236) nexprlist ::= expr */
+ 279, /* (237) paren_exprlist ::= */
+ 279, /* (238) paren_exprlist ::= LP exprlist RP */
+ 191, /* (239) cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */
+ 283, /* (240) uniqueflag ::= UNIQUE */
+ 283, /* (241) uniqueflag ::= */
+ 222, /* (242) eidlist_opt ::= */
+ 222, /* (243) eidlist_opt ::= LP eidlist RP */
+ 233, /* (244) eidlist ::= eidlist COMMA nm collate sortorder */
+ 233, /* (245) eidlist ::= nm collate sortorder */
+ 284, /* (246) collate ::= */
+ 284, /* (247) collate ::= COLLATE ID|STRING */
+ 191, /* (248) cmd ::= DROP INDEX ifexists fullname */
+ 191, /* (249) cmd ::= VACUUM vinto */
+ 191, /* (250) cmd ::= VACUUM nm vinto */
+ 285, /* (251) vinto ::= INTO expr */
+ 285, /* (252) vinto ::= */
+ 191, /* (253) cmd ::= PRAGMA nm dbnm */
+ 191, /* (254) cmd ::= PRAGMA nm dbnm EQ nmnum */
+ 191, /* (255) cmd ::= PRAGMA nm dbnm LP nmnum RP */
+ 191, /* (256) cmd ::= PRAGMA nm dbnm EQ minus_num */
+ 191, /* (257) cmd ::= PRAGMA nm dbnm LP minus_num RP */
+ 212, /* (258) plus_num ::= PLUS INTEGER|FLOAT */
+ 213, /* (259) minus_num ::= MINUS INTEGER|FLOAT */
+ 191, /* (260) cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */
+ 287, /* (261) trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */
+ 289, /* (262) trigger_time ::= BEFORE|AFTER */
+ 289, /* (263) trigger_time ::= INSTEAD OF */
+ 289, /* (264) trigger_time ::= */
+ 290, /* (265) trigger_event ::= DELETE|INSERT */
+ 290, /* (266) trigger_event ::= UPDATE */
+ 290, /* (267) trigger_event ::= UPDATE OF idlist */
+ 292, /* (268) when_clause ::= */
+ 292, /* (269) when_clause ::= WHEN expr */
+ 288, /* (270) trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */
+ 288, /* (271) trigger_cmd_list ::= trigger_cmd SEMI */
+ 294, /* (272) trnm ::= nm DOT nm */
+ 295, /* (273) tridxby ::= INDEXED BY nm */
+ 295, /* (274) tridxby ::= NOT INDEXED */
+ 293, /* (275) trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt */
+ 293, /* (276) trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */
+ 293, /* (277) trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */
+ 293, /* (278) trigger_cmd ::= scanpt select scanpt */
+ 218, /* (279) expr ::= RAISE LP IGNORE RP */
+ 218, /* (280) expr ::= RAISE LP raisetype COMMA nm RP */
+ 237, /* (281) raisetype ::= ROLLBACK */
+ 237, /* (282) raisetype ::= ABORT */
+ 237, /* (283) raisetype ::= FAIL */
+ 191, /* (284) cmd ::= DROP TRIGGER ifexists fullname */
+ 191, /* (285) cmd ::= ATTACH database_kw_opt expr AS expr key_opt */
+ 191, /* (286) cmd ::= DETACH database_kw_opt expr */
+ 297, /* (287) key_opt ::= */
+ 297, /* (288) key_opt ::= KEY expr */
+ 191, /* (289) cmd ::= REINDEX */
+ 191, /* (290) cmd ::= REINDEX nm dbnm */
+ 191, /* (291) cmd ::= ANALYZE */
+ 191, /* (292) cmd ::= ANALYZE nm dbnm */
+ 191, /* (293) cmd ::= ALTER TABLE fullname RENAME TO nm */
+ 191, /* (294) cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */
+ 191, /* (295) cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm */
+ 298, /* (296) add_column_fullname ::= fullname */
+ 191, /* (297) cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm */
+ 191, /* (298) cmd ::= create_vtab */
+ 191, /* (299) cmd ::= create_vtab LP vtabarglist RP */
+ 300, /* (300) create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */
+ 302, /* (301) vtabarg ::= */
+ 303, /* (302) vtabargtoken ::= ANY */
+ 303, /* (303) vtabargtoken ::= lp anylist RP */
+ 304, /* (304) lp ::= LP */
+ 268, /* (305) with ::= WITH wqlist */
+ 268, /* (306) with ::= WITH RECURSIVE wqlist */
+ 307, /* (307) wqas ::= AS */
+ 307, /* (308) wqas ::= AS MATERIALIZED */
+ 307, /* (309) wqas ::= AS NOT MATERIALIZED */
+ 306, /* (310) wqitem ::= withnm eidlist_opt wqas LP select RP */
+ 308, /* (311) withnm ::= nm */
+ 242, /* (312) wqlist ::= wqitem */
+ 242, /* (313) wqlist ::= wqlist COMMA wqitem */
+ 309, /* (314) windowdefn_list ::= windowdefn_list COMMA windowdefn */
+ 310, /* (315) windowdefn ::= nm AS LP window RP */
+ 311, /* (316) window ::= PARTITION BY nexprlist orderby_opt frame_opt */
+ 311, /* (317) window ::= nm PARTITION BY nexprlist orderby_opt frame_opt */
+ 311, /* (318) window ::= ORDER BY sortlist frame_opt */
+ 311, /* (319) window ::= nm ORDER BY sortlist frame_opt */
+ 311, /* (320) window ::= nm frame_opt */
+ 312, /* (321) frame_opt ::= */
+ 312, /* (322) frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt */
+ 312, /* (323) frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt */
+ 316, /* (324) range_or_rows ::= RANGE|ROWS|GROUPS */
+ 318, /* (325) frame_bound_s ::= frame_bound */
+ 318, /* (326) frame_bound_s ::= UNBOUNDED PRECEDING */
+ 319, /* (327) frame_bound_e ::= frame_bound */
+ 319, /* (328) frame_bound_e ::= UNBOUNDED FOLLOWING */
+ 317, /* (329) frame_bound ::= expr PRECEDING|FOLLOWING */
+ 317, /* (330) frame_bound ::= CURRENT ROW */
+ 320, /* (331) frame_exclude_opt ::= */
+ 320, /* (332) frame_exclude_opt ::= EXCLUDE frame_exclude */
+ 321, /* (333) frame_exclude ::= NO OTHERS */
+ 321, /* (334) frame_exclude ::= CURRENT ROW */
+ 321, /* (335) frame_exclude ::= GROUP|TIES */
+ 252, /* (336) window_clause ::= WINDOW windowdefn_list */
+ 275, /* (337) filter_over ::= filter_clause over_clause */
+ 275, /* (338) filter_over ::= over_clause */
+ 275, /* (339) filter_over ::= filter_clause */
+ 315, /* (340) over_clause ::= OVER LP window RP */
+ 315, /* (341) over_clause ::= OVER nm */
+ 314, /* (342) filter_clause ::= FILTER LP WHERE expr RP */
+ 217, /* (343) term ::= QNUMBER */
+ 186, /* (344) input ::= cmdlist */
+ 187, /* (345) cmdlist ::= cmdlist ecmd */
+ 187, /* (346) cmdlist ::= ecmd */
+ 188, /* (347) ecmd ::= SEMI */
+ 188, /* (348) ecmd ::= cmdx SEMI */
+ 188, /* (349) ecmd ::= explain cmdx SEMI */
+ 193, /* (350) trans_opt ::= */
+ 193, /* (351) trans_opt ::= TRANSACTION */
+ 193, /* (352) trans_opt ::= TRANSACTION nm */
+ 195, /* (353) savepoint_opt ::= SAVEPOINT */
+ 195, /* (354) savepoint_opt ::= */
+ 191, /* (355) cmd ::= create_table create_table_args */
+ 204, /* (356) table_option_set ::= table_option */
+ 202, /* (357) columnlist ::= columnlist COMMA columnname carglist */
+ 202, /* (358) columnlist ::= columnname carglist */
+ 194, /* (359) nm ::= ID|INDEXED|JOIN_KW */
+ 194, /* (360) nm ::= STRING */
+ 209, /* (361) typetoken ::= typename */
+ 210, /* (362) typename ::= ID|STRING */
+ 211, /* (363) signed ::= plus_num */
+ 211, /* (364) signed ::= minus_num */
+ 208, /* (365) carglist ::= carglist ccons */
+ 208, /* (366) carglist ::= */
+ 216, /* (367) ccons ::= NULL onconf */
+ 216, /* (368) ccons ::= GENERATED ALWAYS AS generated */
+ 216, /* (369) ccons ::= AS generated */
+ 203, /* (370) conslist_opt ::= COMMA conslist */
+ 229, /* (371) conslist ::= conslist tconscomma tcons */
+ 229, /* (372) conslist ::= tcons */
+ 230, /* (373) tconscomma ::= */
+ 234, /* (374) defer_subclause_opt ::= defer_subclause */
+ 236, /* (375) resolvetype ::= raisetype */
+ 240, /* (376) selectnowith ::= oneselect */
+ 241, /* (377) oneselect ::= values */
+ 256, /* (378) sclp ::= selcollist COMMA */
+ 257, /* (379) as ::= ID|STRING */
+ 266, /* (380) indexed_opt ::= indexed_by */
+ 274, /* (381) returning ::= */
+ 218, /* (382) expr ::= term */
+ 276, /* (383) likeop ::= LIKE_KW|MATCH */
+ 280, /* (384) case_operand ::= expr */
+ 263, /* (385) exprlist ::= nexprlist */
+ 286, /* (386) nmnum ::= plus_num */
+ 286, /* (387) nmnum ::= nm */
+ 286, /* (388) nmnum ::= ON */
+ 286, /* (389) nmnum ::= DELETE */
+ 286, /* (390) nmnum ::= DEFAULT */
+ 212, /* (391) plus_num ::= INTEGER|FLOAT */
+ 291, /* (392) foreach_clause ::= */
+ 291, /* (393) foreach_clause ::= FOR EACH ROW */
+ 294, /* (394) trnm ::= nm */
+ 295, /* (395) tridxby ::= */
+ 296, /* (396) database_kw_opt ::= DATABASE */
+ 296, /* (397) database_kw_opt ::= */
+ 299, /* (398) kwcolumn_opt ::= */
+ 299, /* (399) kwcolumn_opt ::= COLUMNKW */
+ 301, /* (400) vtabarglist ::= vtabarg */
+ 301, /* (401) vtabarglist ::= vtabarglist COMMA vtabarg */
+ 302, /* (402) vtabarg ::= vtabarg vtabargtoken */
+ 305, /* (403) anylist ::= */
+ 305, /* (404) anylist ::= anylist LP anylist RP */
+ 305, /* (405) anylist ::= anylist ANY */
+ 268, /* (406) with ::= */
+ 309, /* (407) windowdefn_list ::= windowdefn */
+ 311, /* (408) window ::= frame_opt */
};
/* For rule J, yyRuleInfoNRhs[J] contains the negative of the number
@@ -174363,316 +175761,320 @@ static const signed char yyRuleInfoNRhs[] = {
-9, /* (92) oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */
-10, /* (93) oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt window_clause orderby_opt limit_opt */
-4, /* (94) values ::= VALUES LP nexprlist RP */
- -5, /* (95) values ::= values COMMA LP nexprlist RP */
- -1, /* (96) distinct ::= DISTINCT */
- -1, /* (97) distinct ::= ALL */
- 0, /* (98) distinct ::= */
- 0, /* (99) sclp ::= */
- -5, /* (100) selcollist ::= sclp scanpt expr scanpt as */
- -3, /* (101) selcollist ::= sclp scanpt STAR */
- -5, /* (102) selcollist ::= sclp scanpt nm DOT STAR */
- -2, /* (103) as ::= AS nm */
- 0, /* (104) as ::= */
- 0, /* (105) from ::= */
- -2, /* (106) from ::= FROM seltablist */
- -2, /* (107) stl_prefix ::= seltablist joinop */
- 0, /* (108) stl_prefix ::= */
- -5, /* (109) seltablist ::= stl_prefix nm dbnm as on_using */
- -6, /* (110) seltablist ::= stl_prefix nm dbnm as indexed_by on_using */
- -8, /* (111) seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_using */
- -6, /* (112) seltablist ::= stl_prefix LP select RP as on_using */
- -6, /* (113) seltablist ::= stl_prefix LP seltablist RP as on_using */
- 0, /* (114) dbnm ::= */
- -2, /* (115) dbnm ::= DOT nm */
- -1, /* (116) fullname ::= nm */
- -3, /* (117) fullname ::= nm DOT nm */
- -1, /* (118) xfullname ::= nm */
- -3, /* (119) xfullname ::= nm DOT nm */
- -5, /* (120) xfullname ::= nm DOT nm AS nm */
- -3, /* (121) xfullname ::= nm AS nm */
- -1, /* (122) joinop ::= COMMA|JOIN */
- -2, /* (123) joinop ::= JOIN_KW JOIN */
- -3, /* (124) joinop ::= JOIN_KW nm JOIN */
- -4, /* (125) joinop ::= JOIN_KW nm nm JOIN */
- -2, /* (126) on_using ::= ON expr */
- -4, /* (127) on_using ::= USING LP idlist RP */
- 0, /* (128) on_using ::= */
- 0, /* (129) indexed_opt ::= */
- -3, /* (130) indexed_by ::= INDEXED BY nm */
- -2, /* (131) indexed_by ::= NOT INDEXED */
- 0, /* (132) orderby_opt ::= */
- -3, /* (133) orderby_opt ::= ORDER BY sortlist */
- -5, /* (134) sortlist ::= sortlist COMMA expr sortorder nulls */
- -3, /* (135) sortlist ::= expr sortorder nulls */
- -1, /* (136) sortorder ::= ASC */
- -1, /* (137) sortorder ::= DESC */
- 0, /* (138) sortorder ::= */
- -2, /* (139) nulls ::= NULLS FIRST */
- -2, /* (140) nulls ::= NULLS LAST */
- 0, /* (141) nulls ::= */
- 0, /* (142) groupby_opt ::= */
- -3, /* (143) groupby_opt ::= GROUP BY nexprlist */
- 0, /* (144) having_opt ::= */
- -2, /* (145) having_opt ::= HAVING expr */
- 0, /* (146) limit_opt ::= */
- -2, /* (147) limit_opt ::= LIMIT expr */
- -4, /* (148) limit_opt ::= LIMIT expr OFFSET expr */
- -4, /* (149) limit_opt ::= LIMIT expr COMMA expr */
- -6, /* (150) cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret */
- 0, /* (151) where_opt ::= */
- -2, /* (152) where_opt ::= WHERE expr */
- 0, /* (153) where_opt_ret ::= */
- -2, /* (154) where_opt_ret ::= WHERE expr */
- -2, /* (155) where_opt_ret ::= RETURNING selcollist */
- -4, /* (156) where_opt_ret ::= WHERE expr RETURNING selcollist */
- -9, /* (157) cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt_ret */
- -5, /* (158) setlist ::= setlist COMMA nm EQ expr */
- -7, /* (159) setlist ::= setlist COMMA LP idlist RP EQ expr */
- -3, /* (160) setlist ::= nm EQ expr */
- -5, /* (161) setlist ::= LP idlist RP EQ expr */
- -7, /* (162) cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert */
- -8, /* (163) cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES returning */
- 0, /* (164) upsert ::= */
- -2, /* (165) upsert ::= RETURNING selcollist */
- -12, /* (166) upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt upsert */
- -9, /* (167) upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING upsert */
- -5, /* (168) upsert ::= ON CONFLICT DO NOTHING returning */
- -8, /* (169) upsert ::= ON CONFLICT DO UPDATE SET setlist where_opt returning */
- -2, /* (170) returning ::= RETURNING selcollist */
- -2, /* (171) insert_cmd ::= INSERT orconf */
- -1, /* (172) insert_cmd ::= REPLACE */
- 0, /* (173) idlist_opt ::= */
- -3, /* (174) idlist_opt ::= LP idlist RP */
- -3, /* (175) idlist ::= idlist COMMA nm */
- -1, /* (176) idlist ::= nm */
- -3, /* (177) expr ::= LP expr RP */
- -1, /* (178) expr ::= ID|INDEXED|JOIN_KW */
- -3, /* (179) expr ::= nm DOT nm */
- -5, /* (180) expr ::= nm DOT nm DOT nm */
- -1, /* (181) term ::= NULL|FLOAT|BLOB */
- -1, /* (182) term ::= STRING */
- -1, /* (183) term ::= INTEGER */
- -1, /* (184) expr ::= VARIABLE */
- -3, /* (185) expr ::= expr COLLATE ID|STRING */
- -6, /* (186) expr ::= CAST LP expr AS typetoken RP */
- -5, /* (187) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP */
- -8, /* (188) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP */
- -4, /* (189) expr ::= ID|INDEXED|JOIN_KW LP STAR RP */
- -6, /* (190) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP filter_over */
- -9, /* (191) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP filter_over */
- -5, /* (192) expr ::= ID|INDEXED|JOIN_KW LP STAR RP filter_over */
- -1, /* (193) term ::= CTIME_KW */
- -5, /* (194) expr ::= LP nexprlist COMMA expr RP */
- -3, /* (195) expr ::= expr AND expr */
- -3, /* (196) expr ::= expr OR expr */
- -3, /* (197) expr ::= expr LT|GT|GE|LE expr */
- -3, /* (198) expr ::= expr EQ|NE expr */
- -3, /* (199) expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */
- -3, /* (200) expr ::= expr PLUS|MINUS expr */
- -3, /* (201) expr ::= expr STAR|SLASH|REM expr */
- -3, /* (202) expr ::= expr CONCAT expr */
- -2, /* (203) likeop ::= NOT LIKE_KW|MATCH */
- -3, /* (204) expr ::= expr likeop expr */
- -5, /* (205) expr ::= expr likeop expr ESCAPE expr */
- -2, /* (206) expr ::= expr ISNULL|NOTNULL */
- -3, /* (207) expr ::= expr NOT NULL */
- -3, /* (208) expr ::= expr IS expr */
- -4, /* (209) expr ::= expr IS NOT expr */
- -6, /* (210) expr ::= expr IS NOT DISTINCT FROM expr */
- -5, /* (211) expr ::= expr IS DISTINCT FROM expr */
- -2, /* (212) expr ::= NOT expr */
- -2, /* (213) expr ::= BITNOT expr */
- -2, /* (214) expr ::= PLUS|MINUS expr */
- -3, /* (215) expr ::= expr PTR expr */
- -1, /* (216) between_op ::= BETWEEN */
- -2, /* (217) between_op ::= NOT BETWEEN */
- -5, /* (218) expr ::= expr between_op expr AND expr */
- -1, /* (219) in_op ::= IN */
- -2, /* (220) in_op ::= NOT IN */
- -5, /* (221) expr ::= expr in_op LP exprlist RP */
- -3, /* (222) expr ::= LP select RP */
- -5, /* (223) expr ::= expr in_op LP select RP */
- -5, /* (224) expr ::= expr in_op nm dbnm paren_exprlist */
- -4, /* (225) expr ::= EXISTS LP select RP */
- -5, /* (226) expr ::= CASE case_operand case_exprlist case_else END */
- -5, /* (227) case_exprlist ::= case_exprlist WHEN expr THEN expr */
- -4, /* (228) case_exprlist ::= WHEN expr THEN expr */
- -2, /* (229) case_else ::= ELSE expr */
- 0, /* (230) case_else ::= */
- 0, /* (231) case_operand ::= */
- 0, /* (232) exprlist ::= */
- -3, /* (233) nexprlist ::= nexprlist COMMA expr */
- -1, /* (234) nexprlist ::= expr */
- 0, /* (235) paren_exprlist ::= */
- -3, /* (236) paren_exprlist ::= LP exprlist RP */
- -12, /* (237) cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */
- -1, /* (238) uniqueflag ::= UNIQUE */
- 0, /* (239) uniqueflag ::= */
- 0, /* (240) eidlist_opt ::= */
- -3, /* (241) eidlist_opt ::= LP eidlist RP */
- -5, /* (242) eidlist ::= eidlist COMMA nm collate sortorder */
- -3, /* (243) eidlist ::= nm collate sortorder */
- 0, /* (244) collate ::= */
- -2, /* (245) collate ::= COLLATE ID|STRING */
- -4, /* (246) cmd ::= DROP INDEX ifexists fullname */
- -2, /* (247) cmd ::= VACUUM vinto */
- -3, /* (248) cmd ::= VACUUM nm vinto */
- -2, /* (249) vinto ::= INTO expr */
- 0, /* (250) vinto ::= */
- -3, /* (251) cmd ::= PRAGMA nm dbnm */
- -5, /* (252) cmd ::= PRAGMA nm dbnm EQ nmnum */
- -6, /* (253) cmd ::= PRAGMA nm dbnm LP nmnum RP */
- -5, /* (254) cmd ::= PRAGMA nm dbnm EQ minus_num */
- -6, /* (255) cmd ::= PRAGMA nm dbnm LP minus_num RP */
- -2, /* (256) plus_num ::= PLUS INTEGER|FLOAT */
- -2, /* (257) minus_num ::= MINUS INTEGER|FLOAT */
- -5, /* (258) cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */
- -11, /* (259) trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */
- -1, /* (260) trigger_time ::= BEFORE|AFTER */
- -2, /* (261) trigger_time ::= INSTEAD OF */
- 0, /* (262) trigger_time ::= */
- -1, /* (263) trigger_event ::= DELETE|INSERT */
- -1, /* (264) trigger_event ::= UPDATE */
- -3, /* (265) trigger_event ::= UPDATE OF idlist */
- 0, /* (266) when_clause ::= */
- -2, /* (267) when_clause ::= WHEN expr */
- -3, /* (268) trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */
- -2, /* (269) trigger_cmd_list ::= trigger_cmd SEMI */
- -3, /* (270) trnm ::= nm DOT nm */
- -3, /* (271) tridxby ::= INDEXED BY nm */
- -2, /* (272) tridxby ::= NOT INDEXED */
- -9, /* (273) trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt */
- -8, /* (274) trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */
- -6, /* (275) trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */
- -3, /* (276) trigger_cmd ::= scanpt select scanpt */
- -4, /* (277) expr ::= RAISE LP IGNORE RP */
- -6, /* (278) expr ::= RAISE LP raisetype COMMA nm RP */
- -1, /* (279) raisetype ::= ROLLBACK */
- -1, /* (280) raisetype ::= ABORT */
- -1, /* (281) raisetype ::= FAIL */
- -4, /* (282) cmd ::= DROP TRIGGER ifexists fullname */
- -6, /* (283) cmd ::= ATTACH database_kw_opt expr AS expr key_opt */
- -3, /* (284) cmd ::= DETACH database_kw_opt expr */
- 0, /* (285) key_opt ::= */
- -2, /* (286) key_opt ::= KEY expr */
- -1, /* (287) cmd ::= REINDEX */
- -3, /* (288) cmd ::= REINDEX nm dbnm */
- -1, /* (289) cmd ::= ANALYZE */
- -3, /* (290) cmd ::= ANALYZE nm dbnm */
- -6, /* (291) cmd ::= ALTER TABLE fullname RENAME TO nm */
- -7, /* (292) cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */
- -6, /* (293) cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm */
- -1, /* (294) add_column_fullname ::= fullname */
- -8, /* (295) cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm */
- -1, /* (296) cmd ::= create_vtab */
- -4, /* (297) cmd ::= create_vtab LP vtabarglist RP */
- -8, /* (298) create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */
- 0, /* (299) vtabarg ::= */
- -1, /* (300) vtabargtoken ::= ANY */
- -3, /* (301) vtabargtoken ::= lp anylist RP */
- -1, /* (302) lp ::= LP */
- -2, /* (303) with ::= WITH wqlist */
- -3, /* (304) with ::= WITH RECURSIVE wqlist */
- -1, /* (305) wqas ::= AS */
- -2, /* (306) wqas ::= AS MATERIALIZED */
- -3, /* (307) wqas ::= AS NOT MATERIALIZED */
- -6, /* (308) wqitem ::= nm eidlist_opt wqas LP select RP */
- -1, /* (309) wqlist ::= wqitem */
- -3, /* (310) wqlist ::= wqlist COMMA wqitem */
- -3, /* (311) windowdefn_list ::= windowdefn_list COMMA windowdefn */
- -5, /* (312) windowdefn ::= nm AS LP window RP */
- -5, /* (313) window ::= PARTITION BY nexprlist orderby_opt frame_opt */
- -6, /* (314) window ::= nm PARTITION BY nexprlist orderby_opt frame_opt */
- -4, /* (315) window ::= ORDER BY sortlist frame_opt */
- -5, /* (316) window ::= nm ORDER BY sortlist frame_opt */
- -2, /* (317) window ::= nm frame_opt */
- 0, /* (318) frame_opt ::= */
- -3, /* (319) frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt */
- -6, /* (320) frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt */
- -1, /* (321) range_or_rows ::= RANGE|ROWS|GROUPS */
- -1, /* (322) frame_bound_s ::= frame_bound */
- -2, /* (323) frame_bound_s ::= UNBOUNDED PRECEDING */
- -1, /* (324) frame_bound_e ::= frame_bound */
- -2, /* (325) frame_bound_e ::= UNBOUNDED FOLLOWING */
- -2, /* (326) frame_bound ::= expr PRECEDING|FOLLOWING */
- -2, /* (327) frame_bound ::= CURRENT ROW */
- 0, /* (328) frame_exclude_opt ::= */
- -2, /* (329) frame_exclude_opt ::= EXCLUDE frame_exclude */
- -2, /* (330) frame_exclude ::= NO OTHERS */
- -2, /* (331) frame_exclude ::= CURRENT ROW */
- -1, /* (332) frame_exclude ::= GROUP|TIES */
- -2, /* (333) window_clause ::= WINDOW windowdefn_list */
- -2, /* (334) filter_over ::= filter_clause over_clause */
- -1, /* (335) filter_over ::= over_clause */
- -1, /* (336) filter_over ::= filter_clause */
- -4, /* (337) over_clause ::= OVER LP window RP */
- -2, /* (338) over_clause ::= OVER nm */
- -5, /* (339) filter_clause ::= FILTER LP WHERE expr RP */
- -1, /* (340) input ::= cmdlist */
- -2, /* (341) cmdlist ::= cmdlist ecmd */
- -1, /* (342) cmdlist ::= ecmd */
- -1, /* (343) ecmd ::= SEMI */
- -2, /* (344) ecmd ::= cmdx SEMI */
- -3, /* (345) ecmd ::= explain cmdx SEMI */
- 0, /* (346) trans_opt ::= */
- -1, /* (347) trans_opt ::= TRANSACTION */
- -2, /* (348) trans_opt ::= TRANSACTION nm */
- -1, /* (349) savepoint_opt ::= SAVEPOINT */
- 0, /* (350) savepoint_opt ::= */
- -2, /* (351) cmd ::= create_table create_table_args */
- -1, /* (352) table_option_set ::= table_option */
- -4, /* (353) columnlist ::= columnlist COMMA columnname carglist */
- -2, /* (354) columnlist ::= columnname carglist */
- -1, /* (355) nm ::= ID|INDEXED|JOIN_KW */
- -1, /* (356) nm ::= STRING */
- -1, /* (357) typetoken ::= typename */
- -1, /* (358) typename ::= ID|STRING */
- -1, /* (359) signed ::= plus_num */
- -1, /* (360) signed ::= minus_num */
- -2, /* (361) carglist ::= carglist ccons */
- 0, /* (362) carglist ::= */
- -2, /* (363) ccons ::= NULL onconf */
- -4, /* (364) ccons ::= GENERATED ALWAYS AS generated */
- -2, /* (365) ccons ::= AS generated */
- -2, /* (366) conslist_opt ::= COMMA conslist */
- -3, /* (367) conslist ::= conslist tconscomma tcons */
- -1, /* (368) conslist ::= tcons */
- 0, /* (369) tconscomma ::= */
- -1, /* (370) defer_subclause_opt ::= defer_subclause */
- -1, /* (371) resolvetype ::= raisetype */
- -1, /* (372) selectnowith ::= oneselect */
- -1, /* (373) oneselect ::= values */
- -2, /* (374) sclp ::= selcollist COMMA */
- -1, /* (375) as ::= ID|STRING */
- -1, /* (376) indexed_opt ::= indexed_by */
- 0, /* (377) returning ::= */
- -1, /* (378) expr ::= term */
- -1, /* (379) likeop ::= LIKE_KW|MATCH */
- -1, /* (380) case_operand ::= expr */
- -1, /* (381) exprlist ::= nexprlist */
- -1, /* (382) nmnum ::= plus_num */
- -1, /* (383) nmnum ::= nm */
- -1, /* (384) nmnum ::= ON */
- -1, /* (385) nmnum ::= DELETE */
- -1, /* (386) nmnum ::= DEFAULT */
- -1, /* (387) plus_num ::= INTEGER|FLOAT */
- 0, /* (388) foreach_clause ::= */
- -3, /* (389) foreach_clause ::= FOR EACH ROW */
- -1, /* (390) trnm ::= nm */
- 0, /* (391) tridxby ::= */
- -1, /* (392) database_kw_opt ::= DATABASE */
- 0, /* (393) database_kw_opt ::= */
- 0, /* (394) kwcolumn_opt ::= */
- -1, /* (395) kwcolumn_opt ::= COLUMNKW */
- -1, /* (396) vtabarglist ::= vtabarg */
- -3, /* (397) vtabarglist ::= vtabarglist COMMA vtabarg */
- -2, /* (398) vtabarg ::= vtabarg vtabargtoken */
- 0, /* (399) anylist ::= */
- -4, /* (400) anylist ::= anylist LP anylist RP */
- -2, /* (401) anylist ::= anylist ANY */
- 0, /* (402) with ::= */
- -1, /* (403) windowdefn_list ::= windowdefn */
- -1, /* (404) window ::= frame_opt */
+ -1, /* (95) oneselect ::= mvalues */
+ -5, /* (96) mvalues ::= values COMMA LP nexprlist RP */
+ -5, /* (97) mvalues ::= mvalues COMMA LP nexprlist RP */
+ -1, /* (98) distinct ::= DISTINCT */
+ -1, /* (99) distinct ::= ALL */
+ 0, /* (100) distinct ::= */
+ 0, /* (101) sclp ::= */
+ -5, /* (102) selcollist ::= sclp scanpt expr scanpt as */
+ -3, /* (103) selcollist ::= sclp scanpt STAR */
+ -5, /* (104) selcollist ::= sclp scanpt nm DOT STAR */
+ -2, /* (105) as ::= AS nm */
+ 0, /* (106) as ::= */
+ 0, /* (107) from ::= */
+ -2, /* (108) from ::= FROM seltablist */
+ -2, /* (109) stl_prefix ::= seltablist joinop */
+ 0, /* (110) stl_prefix ::= */
+ -5, /* (111) seltablist ::= stl_prefix nm dbnm as on_using */
+ -6, /* (112) seltablist ::= stl_prefix nm dbnm as indexed_by on_using */
+ -8, /* (113) seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_using */
+ -6, /* (114) seltablist ::= stl_prefix LP select RP as on_using */
+ -6, /* (115) seltablist ::= stl_prefix LP seltablist RP as on_using */
+ 0, /* (116) dbnm ::= */
+ -2, /* (117) dbnm ::= DOT nm */
+ -1, /* (118) fullname ::= nm */
+ -3, /* (119) fullname ::= nm DOT nm */
+ -1, /* (120) xfullname ::= nm */
+ -3, /* (121) xfullname ::= nm DOT nm */
+ -5, /* (122) xfullname ::= nm DOT nm AS nm */
+ -3, /* (123) xfullname ::= nm AS nm */
+ -1, /* (124) joinop ::= COMMA|JOIN */
+ -2, /* (125) joinop ::= JOIN_KW JOIN */
+ -3, /* (126) joinop ::= JOIN_KW nm JOIN */
+ -4, /* (127) joinop ::= JOIN_KW nm nm JOIN */
+ -2, /* (128) on_using ::= ON expr */
+ -4, /* (129) on_using ::= USING LP idlist RP */
+ 0, /* (130) on_using ::= */
+ 0, /* (131) indexed_opt ::= */
+ -3, /* (132) indexed_by ::= INDEXED BY nm */
+ -2, /* (133) indexed_by ::= NOT INDEXED */
+ 0, /* (134) orderby_opt ::= */
+ -3, /* (135) orderby_opt ::= ORDER BY sortlist */
+ -5, /* (136) sortlist ::= sortlist COMMA expr sortorder nulls */
+ -3, /* (137) sortlist ::= expr sortorder nulls */
+ -1, /* (138) sortorder ::= ASC */
+ -1, /* (139) sortorder ::= DESC */
+ 0, /* (140) sortorder ::= */
+ -2, /* (141) nulls ::= NULLS FIRST */
+ -2, /* (142) nulls ::= NULLS LAST */
+ 0, /* (143) nulls ::= */
+ 0, /* (144) groupby_opt ::= */
+ -3, /* (145) groupby_opt ::= GROUP BY nexprlist */
+ 0, /* (146) having_opt ::= */
+ -2, /* (147) having_opt ::= HAVING expr */
+ 0, /* (148) limit_opt ::= */
+ -2, /* (149) limit_opt ::= LIMIT expr */
+ -4, /* (150) limit_opt ::= LIMIT expr OFFSET expr */
+ -4, /* (151) limit_opt ::= LIMIT expr COMMA expr */
+ -6, /* (152) cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret */
+ 0, /* (153) where_opt ::= */
+ -2, /* (154) where_opt ::= WHERE expr */
+ 0, /* (155) where_opt_ret ::= */
+ -2, /* (156) where_opt_ret ::= WHERE expr */
+ -2, /* (157) where_opt_ret ::= RETURNING selcollist */
+ -4, /* (158) where_opt_ret ::= WHERE expr RETURNING selcollist */
+ -9, /* (159) cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt_ret */
+ -5, /* (160) setlist ::= setlist COMMA nm EQ expr */
+ -7, /* (161) setlist ::= setlist COMMA LP idlist RP EQ expr */
+ -3, /* (162) setlist ::= nm EQ expr */
+ -5, /* (163) setlist ::= LP idlist RP EQ expr */
+ -7, /* (164) cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert */
+ -8, /* (165) cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES returning */
+ 0, /* (166) upsert ::= */
+ -2, /* (167) upsert ::= RETURNING selcollist */
+ -12, /* (168) upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt upsert */
+ -9, /* (169) upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING upsert */
+ -5, /* (170) upsert ::= ON CONFLICT DO NOTHING returning */
+ -8, /* (171) upsert ::= ON CONFLICT DO UPDATE SET setlist where_opt returning */
+ -2, /* (172) returning ::= RETURNING selcollist */
+ -2, /* (173) insert_cmd ::= INSERT orconf */
+ -1, /* (174) insert_cmd ::= REPLACE */
+ 0, /* (175) idlist_opt ::= */
+ -3, /* (176) idlist_opt ::= LP idlist RP */
+ -3, /* (177) idlist ::= idlist COMMA nm */
+ -1, /* (178) idlist ::= nm */
+ -3, /* (179) expr ::= LP expr RP */
+ -1, /* (180) expr ::= ID|INDEXED|JOIN_KW */
+ -3, /* (181) expr ::= nm DOT nm */
+ -5, /* (182) expr ::= nm DOT nm DOT nm */
+ -1, /* (183) term ::= NULL|FLOAT|BLOB */
+ -1, /* (184) term ::= STRING */
+ -1, /* (185) term ::= INTEGER */
+ -1, /* (186) expr ::= VARIABLE */
+ -3, /* (187) expr ::= expr COLLATE ID|STRING */
+ -6, /* (188) expr ::= CAST LP expr AS typetoken RP */
+ -5, /* (189) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP */
+ -8, /* (190) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP */
+ -4, /* (191) expr ::= ID|INDEXED|JOIN_KW LP STAR RP */
+ -6, /* (192) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP filter_over */
+ -9, /* (193) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP filter_over */
+ -5, /* (194) expr ::= ID|INDEXED|JOIN_KW LP STAR RP filter_over */
+ -1, /* (195) term ::= CTIME_KW */
+ -5, /* (196) expr ::= LP nexprlist COMMA expr RP */
+ -3, /* (197) expr ::= expr AND expr */
+ -3, /* (198) expr ::= expr OR expr */
+ -3, /* (199) expr ::= expr LT|GT|GE|LE expr */
+ -3, /* (200) expr ::= expr EQ|NE expr */
+ -3, /* (201) expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */
+ -3, /* (202) expr ::= expr PLUS|MINUS expr */
+ -3, /* (203) expr ::= expr STAR|SLASH|REM expr */
+ -3, /* (204) expr ::= expr CONCAT expr */
+ -2, /* (205) likeop ::= NOT LIKE_KW|MATCH */
+ -3, /* (206) expr ::= expr likeop expr */
+ -5, /* (207) expr ::= expr likeop expr ESCAPE expr */
+ -2, /* (208) expr ::= expr ISNULL|NOTNULL */
+ -3, /* (209) expr ::= expr NOT NULL */
+ -3, /* (210) expr ::= expr IS expr */
+ -4, /* (211) expr ::= expr IS NOT expr */
+ -6, /* (212) expr ::= expr IS NOT DISTINCT FROM expr */
+ -5, /* (213) expr ::= expr IS DISTINCT FROM expr */
+ -2, /* (214) expr ::= NOT expr */
+ -2, /* (215) expr ::= BITNOT expr */
+ -2, /* (216) expr ::= PLUS|MINUS expr */
+ -3, /* (217) expr ::= expr PTR expr */
+ -1, /* (218) between_op ::= BETWEEN */
+ -2, /* (219) between_op ::= NOT BETWEEN */
+ -5, /* (220) expr ::= expr between_op expr AND expr */
+ -1, /* (221) in_op ::= IN */
+ -2, /* (222) in_op ::= NOT IN */
+ -5, /* (223) expr ::= expr in_op LP exprlist RP */
+ -3, /* (224) expr ::= LP select RP */
+ -5, /* (225) expr ::= expr in_op LP select RP */
+ -5, /* (226) expr ::= expr in_op nm dbnm paren_exprlist */
+ -4, /* (227) expr ::= EXISTS LP select RP */
+ -5, /* (228) expr ::= CASE case_operand case_exprlist case_else END */
+ -5, /* (229) case_exprlist ::= case_exprlist WHEN expr THEN expr */
+ -4, /* (230) case_exprlist ::= WHEN expr THEN expr */
+ -2, /* (231) case_else ::= ELSE expr */
+ 0, /* (232) case_else ::= */
+ 0, /* (233) case_operand ::= */
+ 0, /* (234) exprlist ::= */
+ -3, /* (235) nexprlist ::= nexprlist COMMA expr */
+ -1, /* (236) nexprlist ::= expr */
+ 0, /* (237) paren_exprlist ::= */
+ -3, /* (238) paren_exprlist ::= LP exprlist RP */
+ -12, /* (239) cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */
+ -1, /* (240) uniqueflag ::= UNIQUE */
+ 0, /* (241) uniqueflag ::= */
+ 0, /* (242) eidlist_opt ::= */
+ -3, /* (243) eidlist_opt ::= LP eidlist RP */
+ -5, /* (244) eidlist ::= eidlist COMMA nm collate sortorder */
+ -3, /* (245) eidlist ::= nm collate sortorder */
+ 0, /* (246) collate ::= */
+ -2, /* (247) collate ::= COLLATE ID|STRING */
+ -4, /* (248) cmd ::= DROP INDEX ifexists fullname */
+ -2, /* (249) cmd ::= VACUUM vinto */
+ -3, /* (250) cmd ::= VACUUM nm vinto */
+ -2, /* (251) vinto ::= INTO expr */
+ 0, /* (252) vinto ::= */
+ -3, /* (253) cmd ::= PRAGMA nm dbnm */
+ -5, /* (254) cmd ::= PRAGMA nm dbnm EQ nmnum */
+ -6, /* (255) cmd ::= PRAGMA nm dbnm LP nmnum RP */
+ -5, /* (256) cmd ::= PRAGMA nm dbnm EQ minus_num */
+ -6, /* (257) cmd ::= PRAGMA nm dbnm LP minus_num RP */
+ -2, /* (258) plus_num ::= PLUS INTEGER|FLOAT */
+ -2, /* (259) minus_num ::= MINUS INTEGER|FLOAT */
+ -5, /* (260) cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */
+ -11, /* (261) trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */
+ -1, /* (262) trigger_time ::= BEFORE|AFTER */
+ -2, /* (263) trigger_time ::= INSTEAD OF */
+ 0, /* (264) trigger_time ::= */
+ -1, /* (265) trigger_event ::= DELETE|INSERT */
+ -1, /* (266) trigger_event ::= UPDATE */
+ -3, /* (267) trigger_event ::= UPDATE OF idlist */
+ 0, /* (268) when_clause ::= */
+ -2, /* (269) when_clause ::= WHEN expr */
+ -3, /* (270) trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */
+ -2, /* (271) trigger_cmd_list ::= trigger_cmd SEMI */
+ -3, /* (272) trnm ::= nm DOT nm */
+ -3, /* (273) tridxby ::= INDEXED BY nm */
+ -2, /* (274) tridxby ::= NOT INDEXED */
+ -9, /* (275) trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt */
+ -8, /* (276) trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */
+ -6, /* (277) trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */
+ -3, /* (278) trigger_cmd ::= scanpt select scanpt */
+ -4, /* (279) expr ::= RAISE LP IGNORE RP */
+ -6, /* (280) expr ::= RAISE LP raisetype COMMA nm RP */
+ -1, /* (281) raisetype ::= ROLLBACK */
+ -1, /* (282) raisetype ::= ABORT */
+ -1, /* (283) raisetype ::= FAIL */
+ -4, /* (284) cmd ::= DROP TRIGGER ifexists fullname */
+ -6, /* (285) cmd ::= ATTACH database_kw_opt expr AS expr key_opt */
+ -3, /* (286) cmd ::= DETACH database_kw_opt expr */
+ 0, /* (287) key_opt ::= */
+ -2, /* (288) key_opt ::= KEY expr */
+ -1, /* (289) cmd ::= REINDEX */
+ -3, /* (290) cmd ::= REINDEX nm dbnm */
+ -1, /* (291) cmd ::= ANALYZE */
+ -3, /* (292) cmd ::= ANALYZE nm dbnm */
+ -6, /* (293) cmd ::= ALTER TABLE fullname RENAME TO nm */
+ -7, /* (294) cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */
+ -6, /* (295) cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm */
+ -1, /* (296) add_column_fullname ::= fullname */
+ -8, /* (297) cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm */
+ -1, /* (298) cmd ::= create_vtab */
+ -4, /* (299) cmd ::= create_vtab LP vtabarglist RP */
+ -8, /* (300) create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */
+ 0, /* (301) vtabarg ::= */
+ -1, /* (302) vtabargtoken ::= ANY */
+ -3, /* (303) vtabargtoken ::= lp anylist RP */
+ -1, /* (304) lp ::= LP */
+ -2, /* (305) with ::= WITH wqlist */
+ -3, /* (306) with ::= WITH RECURSIVE wqlist */
+ -1, /* (307) wqas ::= AS */
+ -2, /* (308) wqas ::= AS MATERIALIZED */
+ -3, /* (309) wqas ::= AS NOT MATERIALIZED */
+ -6, /* (310) wqitem ::= withnm eidlist_opt wqas LP select RP */
+ -1, /* (311) withnm ::= nm */
+ -1, /* (312) wqlist ::= wqitem */
+ -3, /* (313) wqlist ::= wqlist COMMA wqitem */
+ -3, /* (314) windowdefn_list ::= windowdefn_list COMMA windowdefn */
+ -5, /* (315) windowdefn ::= nm AS LP window RP */
+ -5, /* (316) window ::= PARTITION BY nexprlist orderby_opt frame_opt */
+ -6, /* (317) window ::= nm PARTITION BY nexprlist orderby_opt frame_opt */
+ -4, /* (318) window ::= ORDER BY sortlist frame_opt */
+ -5, /* (319) window ::= nm ORDER BY sortlist frame_opt */
+ -2, /* (320) window ::= nm frame_opt */
+ 0, /* (321) frame_opt ::= */
+ -3, /* (322) frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt */
+ -6, /* (323) frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt */
+ -1, /* (324) range_or_rows ::= RANGE|ROWS|GROUPS */
+ -1, /* (325) frame_bound_s ::= frame_bound */
+ -2, /* (326) frame_bound_s ::= UNBOUNDED PRECEDING */
+ -1, /* (327) frame_bound_e ::= frame_bound */
+ -2, /* (328) frame_bound_e ::= UNBOUNDED FOLLOWING */
+ -2, /* (329) frame_bound ::= expr PRECEDING|FOLLOWING */
+ -2, /* (330) frame_bound ::= CURRENT ROW */
+ 0, /* (331) frame_exclude_opt ::= */
+ -2, /* (332) frame_exclude_opt ::= EXCLUDE frame_exclude */
+ -2, /* (333) frame_exclude ::= NO OTHERS */
+ -2, /* (334) frame_exclude ::= CURRENT ROW */
+ -1, /* (335) frame_exclude ::= GROUP|TIES */
+ -2, /* (336) window_clause ::= WINDOW windowdefn_list */
+ -2, /* (337) filter_over ::= filter_clause over_clause */
+ -1, /* (338) filter_over ::= over_clause */
+ -1, /* (339) filter_over ::= filter_clause */
+ -4, /* (340) over_clause ::= OVER LP window RP */
+ -2, /* (341) over_clause ::= OVER nm */
+ -5, /* (342) filter_clause ::= FILTER LP WHERE expr RP */
+ -1, /* (343) term ::= QNUMBER */
+ -1, /* (344) input ::= cmdlist */
+ -2, /* (345) cmdlist ::= cmdlist ecmd */
+ -1, /* (346) cmdlist ::= ecmd */
+ -1, /* (347) ecmd ::= SEMI */
+ -2, /* (348) ecmd ::= cmdx SEMI */
+ -3, /* (349) ecmd ::= explain cmdx SEMI */
+ 0, /* (350) trans_opt ::= */
+ -1, /* (351) trans_opt ::= TRANSACTION */
+ -2, /* (352) trans_opt ::= TRANSACTION nm */
+ -1, /* (353) savepoint_opt ::= SAVEPOINT */
+ 0, /* (354) savepoint_opt ::= */
+ -2, /* (355) cmd ::= create_table create_table_args */
+ -1, /* (356) table_option_set ::= table_option */
+ -4, /* (357) columnlist ::= columnlist COMMA columnname carglist */
+ -2, /* (358) columnlist ::= columnname carglist */
+ -1, /* (359) nm ::= ID|INDEXED|JOIN_KW */
+ -1, /* (360) nm ::= STRING */
+ -1, /* (361) typetoken ::= typename */
+ -1, /* (362) typename ::= ID|STRING */
+ -1, /* (363) signed ::= plus_num */
+ -1, /* (364) signed ::= minus_num */
+ -2, /* (365) carglist ::= carglist ccons */
+ 0, /* (366) carglist ::= */
+ -2, /* (367) ccons ::= NULL onconf */
+ -4, /* (368) ccons ::= GENERATED ALWAYS AS generated */
+ -2, /* (369) ccons ::= AS generated */
+ -2, /* (370) conslist_opt ::= COMMA conslist */
+ -3, /* (371) conslist ::= conslist tconscomma tcons */
+ -1, /* (372) conslist ::= tcons */
+ 0, /* (373) tconscomma ::= */
+ -1, /* (374) defer_subclause_opt ::= defer_subclause */
+ -1, /* (375) resolvetype ::= raisetype */
+ -1, /* (376) selectnowith ::= oneselect */
+ -1, /* (377) oneselect ::= values */
+ -2, /* (378) sclp ::= selcollist COMMA */
+ -1, /* (379) as ::= ID|STRING */
+ -1, /* (380) indexed_opt ::= indexed_by */
+ 0, /* (381) returning ::= */
+ -1, /* (382) expr ::= term */
+ -1, /* (383) likeop ::= LIKE_KW|MATCH */
+ -1, /* (384) case_operand ::= expr */
+ -1, /* (385) exprlist ::= nexprlist */
+ -1, /* (386) nmnum ::= plus_num */
+ -1, /* (387) nmnum ::= nm */
+ -1, /* (388) nmnum ::= ON */
+ -1, /* (389) nmnum ::= DELETE */
+ -1, /* (390) nmnum ::= DEFAULT */
+ -1, /* (391) plus_num ::= INTEGER|FLOAT */
+ 0, /* (392) foreach_clause ::= */
+ -3, /* (393) foreach_clause ::= FOR EACH ROW */
+ -1, /* (394) trnm ::= nm */
+ 0, /* (395) tridxby ::= */
+ -1, /* (396) database_kw_opt ::= DATABASE */
+ 0, /* (397) database_kw_opt ::= */
+ 0, /* (398) kwcolumn_opt ::= */
+ -1, /* (399) kwcolumn_opt ::= COLUMNKW */
+ -1, /* (400) vtabarglist ::= vtabarg */
+ -3, /* (401) vtabarglist ::= vtabarglist COMMA vtabarg */
+ -2, /* (402) vtabarg ::= vtabarg vtabargtoken */
+ 0, /* (403) anylist ::= */
+ -4, /* (404) anylist ::= anylist LP anylist RP */
+ -2, /* (405) anylist ::= anylist ANY */
+ 0, /* (406) with ::= */
+ -1, /* (407) windowdefn_list ::= windowdefn */
+ -1, /* (408) window ::= frame_opt */
};
static void yy_accept(yyParser*); /* Forward Declaration */
@@ -174724,16 +176126,16 @@ static YYACTIONTYPE yy_reduce(
{ sqlite3FinishCoding(pParse); }
break;
case 3: /* cmd ::= BEGIN transtype trans_opt */
-{sqlite3BeginTransaction(pParse, yymsp[-1].minor.yy394);}
+{sqlite3BeginTransaction(pParse, yymsp[-1].minor.yy144);}
break;
case 4: /* transtype ::= */
-{yymsp[1].minor.yy394 = TK_DEFERRED;}
+{yymsp[1].minor.yy144 = TK_DEFERRED;}
break;
case 5: /* transtype ::= DEFERRED */
case 6: /* transtype ::= IMMEDIATE */ yytestcase(yyruleno==6);
case 7: /* transtype ::= EXCLUSIVE */ yytestcase(yyruleno==7);
- case 321: /* range_or_rows ::= RANGE|ROWS|GROUPS */ yytestcase(yyruleno==321);
-{yymsp[0].minor.yy394 = yymsp[0].major; /*A-overwrites-X*/}
+ case 324: /* range_or_rows ::= RANGE|ROWS|GROUPS */ yytestcase(yyruleno==324);
+{yymsp[0].minor.yy144 = yymsp[0].major; /*A-overwrites-X*/}
break;
case 8: /* cmd ::= COMMIT|END trans_opt */
case 9: /* cmd ::= ROLLBACK trans_opt */ yytestcase(yyruleno==9);
@@ -174756,7 +176158,7 @@ static YYACTIONTYPE yy_reduce(
break;
case 13: /* create_table ::= createkw temp TABLE ifnotexists nm dbnm */
{
- sqlite3StartTable(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,yymsp[-4].minor.yy394,0,0,yymsp[-2].minor.yy394);
+ sqlite3StartTable(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,yymsp[-4].minor.yy144,0,0,yymsp[-2].minor.yy144);
}
break;
case 14: /* createkw ::= CREATE */
@@ -174768,40 +176170,40 @@ static YYACTIONTYPE yy_reduce(
case 62: /* init_deferred_pred_opt ::= */ yytestcase(yyruleno==62);
case 72: /* defer_subclause_opt ::= */ yytestcase(yyruleno==72);
case 81: /* ifexists ::= */ yytestcase(yyruleno==81);
- case 98: /* distinct ::= */ yytestcase(yyruleno==98);
- case 244: /* collate ::= */ yytestcase(yyruleno==244);
-{yymsp[1].minor.yy394 = 0;}
+ case 100: /* distinct ::= */ yytestcase(yyruleno==100);
+ case 246: /* collate ::= */ yytestcase(yyruleno==246);
+{yymsp[1].minor.yy144 = 0;}
break;
case 16: /* ifnotexists ::= IF NOT EXISTS */
-{yymsp[-2].minor.yy394 = 1;}
+{yymsp[-2].minor.yy144 = 1;}
break;
case 17: /* temp ::= TEMP */
-{yymsp[0].minor.yy394 = pParse->db->init.busy==0;}
+{yymsp[0].minor.yy144 = pParse->db->init.busy==0;}
break;
case 19: /* create_table_args ::= LP columnlist conslist_opt RP table_option_set */
{
- sqlite3EndTable(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,yymsp[0].minor.yy285,0);
+ sqlite3EndTable(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,yymsp[0].minor.yy391,0);
}
break;
case 20: /* create_table_args ::= AS select */
{
- sqlite3EndTable(pParse,0,0,0,yymsp[0].minor.yy47);
- sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy47);
+ sqlite3EndTable(pParse,0,0,0,yymsp[0].minor.yy555);
+ sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy555);
}
break;
case 21: /* table_option_set ::= */
-{yymsp[1].minor.yy285 = 0;}
+{yymsp[1].minor.yy391 = 0;}
break;
case 22: /* table_option_set ::= table_option_set COMMA table_option */
-{yylhsminor.yy285 = yymsp[-2].minor.yy285|yymsp[0].minor.yy285;}
- yymsp[-2].minor.yy285 = yylhsminor.yy285;
+{yylhsminor.yy391 = yymsp[-2].minor.yy391|yymsp[0].minor.yy391;}
+ yymsp[-2].minor.yy391 = yylhsminor.yy391;
break;
case 23: /* table_option ::= WITHOUT nm */
{
if( yymsp[0].minor.yy0.n==5 && sqlite3_strnicmp(yymsp[0].minor.yy0.z,"rowid",5)==0 ){
- yymsp[-1].minor.yy285 = TF_WithoutRowid | TF_NoVisibleRowid;
+ yymsp[-1].minor.yy391 = TF_WithoutRowid | TF_NoVisibleRowid;
}else{
- yymsp[-1].minor.yy285 = 0;
+ yymsp[-1].minor.yy391 = 0;
sqlite3ErrorMsg(pParse, "unknown table option: %.*s", yymsp[0].minor.yy0.n, yymsp[0].minor.yy0.z);
}
}
@@ -174809,20 +176211,20 @@ static YYACTIONTYPE yy_reduce(
case 24: /* table_option ::= nm */
{
if( yymsp[0].minor.yy0.n==6 && sqlite3_strnicmp(yymsp[0].minor.yy0.z,"strict",6)==0 ){
- yylhsminor.yy285 = TF_Strict;
+ yylhsminor.yy391 = TF_Strict;
}else{
- yylhsminor.yy285 = 0;
+ yylhsminor.yy391 = 0;
sqlite3ErrorMsg(pParse, "unknown table option: %.*s", yymsp[0].minor.yy0.n, yymsp[0].minor.yy0.z);
}
}
- yymsp[0].minor.yy285 = yylhsminor.yy285;
+ yymsp[0].minor.yy391 = yylhsminor.yy391;
break;
case 25: /* columnname ::= nm typetoken */
{sqlite3AddColumn(pParse,yymsp[-1].minor.yy0,yymsp[0].minor.yy0);}
break;
case 26: /* typetoken ::= */
case 65: /* conslist_opt ::= */ yytestcase(yyruleno==65);
- case 104: /* as ::= */ yytestcase(yyruleno==104);
+ case 106: /* as ::= */ yytestcase(yyruleno==106);
{yymsp[1].minor.yy0.n = 0; yymsp[1].minor.yy0.z = 0;}
break;
case 27: /* typetoken ::= typename LP signed RP */
@@ -174841,7 +176243,7 @@ static YYACTIONTYPE yy_reduce(
case 30: /* scanpt ::= */
{
assert( yyLookahead!=YYNOCODE );
- yymsp[1].minor.yy522 = yyLookaheadToken.z;
+ yymsp[1].minor.yy168 = yyLookaheadToken.z;
}
break;
case 31: /* scantok ::= */
@@ -174855,17 +176257,17 @@ static YYACTIONTYPE yy_reduce(
{pParse->constraintName = yymsp[0].minor.yy0;}
break;
case 33: /* ccons ::= DEFAULT scantok term */
-{sqlite3AddDefaultValue(pParse,yymsp[0].minor.yy528,yymsp[-1].minor.yy0.z,&yymsp[-1].minor.yy0.z[yymsp[-1].minor.yy0.n]);}
+{sqlite3AddDefaultValue(pParse,yymsp[0].minor.yy454,yymsp[-1].minor.yy0.z,&yymsp[-1].minor.yy0.z[yymsp[-1].minor.yy0.n]);}
break;
case 34: /* ccons ::= DEFAULT LP expr RP */
-{sqlite3AddDefaultValue(pParse,yymsp[-1].minor.yy528,yymsp[-2].minor.yy0.z+1,yymsp[0].minor.yy0.z);}
+{sqlite3AddDefaultValue(pParse,yymsp[-1].minor.yy454,yymsp[-2].minor.yy0.z+1,yymsp[0].minor.yy0.z);}
break;
case 35: /* ccons ::= DEFAULT PLUS scantok term */
-{sqlite3AddDefaultValue(pParse,yymsp[0].minor.yy528,yymsp[-2].minor.yy0.z,&yymsp[-1].minor.yy0.z[yymsp[-1].minor.yy0.n]);}
+{sqlite3AddDefaultValue(pParse,yymsp[0].minor.yy454,yymsp[-2].minor.yy0.z,&yymsp[-1].minor.yy0.z[yymsp[-1].minor.yy0.n]);}
break;
case 36: /* ccons ::= DEFAULT MINUS scantok term */
{
- Expr *p = sqlite3PExpr(pParse, TK_UMINUS, yymsp[0].minor.yy528, 0);
+ Expr *p = sqlite3PExpr(pParse, TK_UMINUS, yymsp[0].minor.yy454, 0);
sqlite3AddDefaultValue(pParse,p,yymsp[-2].minor.yy0.z,&yymsp[-1].minor.yy0.z[yymsp[-1].minor.yy0.n]);
}
break;
@@ -174880,151 +176282,151 @@ static YYACTIONTYPE yy_reduce(
}
break;
case 38: /* ccons ::= NOT NULL onconf */
-{sqlite3AddNotNull(pParse, yymsp[0].minor.yy394);}
+{sqlite3AddNotNull(pParse, yymsp[0].minor.yy144);}
break;
case 39: /* ccons ::= PRIMARY KEY sortorder onconf autoinc */
-{sqlite3AddPrimaryKey(pParse,0,yymsp[-1].minor.yy394,yymsp[0].minor.yy394,yymsp[-2].minor.yy394);}
+{sqlite3AddPrimaryKey(pParse,0,yymsp[-1].minor.yy144,yymsp[0].minor.yy144,yymsp[-2].minor.yy144);}
break;
case 40: /* ccons ::= UNIQUE onconf */
-{sqlite3CreateIndex(pParse,0,0,0,0,yymsp[0].minor.yy394,0,0,0,0,
+{sqlite3CreateIndex(pParse,0,0,0,0,yymsp[0].minor.yy144,0,0,0,0,
SQLITE_IDXTYPE_UNIQUE);}
break;
case 41: /* ccons ::= CHECK LP expr RP */
-{sqlite3AddCheckConstraint(pParse,yymsp[-1].minor.yy528,yymsp[-2].minor.yy0.z,yymsp[0].minor.yy0.z);}
+{sqlite3AddCheckConstraint(pParse,yymsp[-1].minor.yy454,yymsp[-2].minor.yy0.z,yymsp[0].minor.yy0.z);}
break;
case 42: /* ccons ::= REFERENCES nm eidlist_opt refargs */
-{sqlite3CreateForeignKey(pParse,0,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy322,yymsp[0].minor.yy394);}
+{sqlite3CreateForeignKey(pParse,0,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy14,yymsp[0].minor.yy144);}
break;
case 43: /* ccons ::= defer_subclause */
-{sqlite3DeferForeignKey(pParse,yymsp[0].minor.yy394);}
+{sqlite3DeferForeignKey(pParse,yymsp[0].minor.yy144);}
break;
case 44: /* ccons ::= COLLATE ID|STRING */
{sqlite3AddCollateType(pParse, &yymsp[0].minor.yy0);}
break;
case 45: /* generated ::= LP expr RP */
-{sqlite3AddGenerated(pParse,yymsp[-1].minor.yy528,0);}
+{sqlite3AddGenerated(pParse,yymsp[-1].minor.yy454,0);}
break;
case 46: /* generated ::= LP expr RP ID */
-{sqlite3AddGenerated(pParse,yymsp[-2].minor.yy528,&yymsp[0].minor.yy0);}
+{sqlite3AddGenerated(pParse,yymsp[-2].minor.yy454,&yymsp[0].minor.yy0);}
break;
case 48: /* autoinc ::= AUTOINCR */
-{yymsp[0].minor.yy394 = 1;}
+{yymsp[0].minor.yy144 = 1;}
break;
case 49: /* refargs ::= */
-{ yymsp[1].minor.yy394 = OE_None*0x0101; /* EV: R-19803-45884 */}
+{ yymsp[1].minor.yy144 = OE_None*0x0101; /* EV: R-19803-45884 */}
break;
case 50: /* refargs ::= refargs refarg */
-{ yymsp[-1].minor.yy394 = (yymsp[-1].minor.yy394 & ~yymsp[0].minor.yy231.mask) | yymsp[0].minor.yy231.value; }
+{ yymsp[-1].minor.yy144 = (yymsp[-1].minor.yy144 & ~yymsp[0].minor.yy383.mask) | yymsp[0].minor.yy383.value; }
break;
case 51: /* refarg ::= MATCH nm */
-{ yymsp[-1].minor.yy231.value = 0; yymsp[-1].minor.yy231.mask = 0x000000; }
+{ yymsp[-1].minor.yy383.value = 0; yymsp[-1].minor.yy383.mask = 0x000000; }
break;
case 52: /* refarg ::= ON INSERT refact */
-{ yymsp[-2].minor.yy231.value = 0; yymsp[-2].minor.yy231.mask = 0x000000; }
+{ yymsp[-2].minor.yy383.value = 0; yymsp[-2].minor.yy383.mask = 0x000000; }
break;
case 53: /* refarg ::= ON DELETE refact */
-{ yymsp[-2].minor.yy231.value = yymsp[0].minor.yy394; yymsp[-2].minor.yy231.mask = 0x0000ff; }
+{ yymsp[-2].minor.yy383.value = yymsp[0].minor.yy144; yymsp[-2].minor.yy383.mask = 0x0000ff; }
break;
case 54: /* refarg ::= ON UPDATE refact */
-{ yymsp[-2].minor.yy231.value = yymsp[0].minor.yy394<<8; yymsp[-2].minor.yy231.mask = 0x00ff00; }
+{ yymsp[-2].minor.yy383.value = yymsp[0].minor.yy144<<8; yymsp[-2].minor.yy383.mask = 0x00ff00; }
break;
case 55: /* refact ::= SET NULL */
-{ yymsp[-1].minor.yy394 = OE_SetNull; /* EV: R-33326-45252 */}
+{ yymsp[-1].minor.yy144 = OE_SetNull; /* EV: R-33326-45252 */}
break;
case 56: /* refact ::= SET DEFAULT */
-{ yymsp[-1].minor.yy394 = OE_SetDflt; /* EV: R-33326-45252 */}
+{ yymsp[-1].minor.yy144 = OE_SetDflt; /* EV: R-33326-45252 */}
break;
case 57: /* refact ::= CASCADE */
-{ yymsp[0].minor.yy394 = OE_Cascade; /* EV: R-33326-45252 */}
+{ yymsp[0].minor.yy144 = OE_Cascade; /* EV: R-33326-45252 */}
break;
case 58: /* refact ::= RESTRICT */
-{ yymsp[0].minor.yy394 = OE_Restrict; /* EV: R-33326-45252 */}
+{ yymsp[0].minor.yy144 = OE_Restrict; /* EV: R-33326-45252 */}
break;
case 59: /* refact ::= NO ACTION */
-{ yymsp[-1].minor.yy394 = OE_None; /* EV: R-33326-45252 */}
+{ yymsp[-1].minor.yy144 = OE_None; /* EV: R-33326-45252 */}
break;
case 60: /* defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */
-{yymsp[-2].minor.yy394 = 0;}
+{yymsp[-2].minor.yy144 = 0;}
break;
case 61: /* defer_subclause ::= DEFERRABLE init_deferred_pred_opt */
case 76: /* orconf ::= OR resolvetype */ yytestcase(yyruleno==76);
- case 171: /* insert_cmd ::= INSERT orconf */ yytestcase(yyruleno==171);
-{yymsp[-1].minor.yy394 = yymsp[0].minor.yy394;}
+ case 173: /* insert_cmd ::= INSERT orconf */ yytestcase(yyruleno==173);
+{yymsp[-1].minor.yy144 = yymsp[0].minor.yy144;}
break;
case 63: /* init_deferred_pred_opt ::= INITIALLY DEFERRED */
case 80: /* ifexists ::= IF EXISTS */ yytestcase(yyruleno==80);
- case 217: /* between_op ::= NOT BETWEEN */ yytestcase(yyruleno==217);
- case 220: /* in_op ::= NOT IN */ yytestcase(yyruleno==220);
- case 245: /* collate ::= COLLATE ID|STRING */ yytestcase(yyruleno==245);
-{yymsp[-1].minor.yy394 = 1;}
+ case 219: /* between_op ::= NOT BETWEEN */ yytestcase(yyruleno==219);
+ case 222: /* in_op ::= NOT IN */ yytestcase(yyruleno==222);
+ case 247: /* collate ::= COLLATE ID|STRING */ yytestcase(yyruleno==247);
+{yymsp[-1].minor.yy144 = 1;}
break;
case 64: /* init_deferred_pred_opt ::= INITIALLY IMMEDIATE */
-{yymsp[-1].minor.yy394 = 0;}
+{yymsp[-1].minor.yy144 = 0;}
break;
case 66: /* tconscomma ::= COMMA */
{pParse->constraintName.n = 0;}
break;
case 68: /* tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf */
-{sqlite3AddPrimaryKey(pParse,yymsp[-3].minor.yy322,yymsp[0].minor.yy394,yymsp[-2].minor.yy394,0);}
+{sqlite3AddPrimaryKey(pParse,yymsp[-3].minor.yy14,yymsp[0].minor.yy144,yymsp[-2].minor.yy144,0);}
break;
case 69: /* tcons ::= UNIQUE LP sortlist RP onconf */
-{sqlite3CreateIndex(pParse,0,0,0,yymsp[-2].minor.yy322,yymsp[0].minor.yy394,0,0,0,0,
+{sqlite3CreateIndex(pParse,0,0,0,yymsp[-2].minor.yy14,yymsp[0].minor.yy144,0,0,0,0,
SQLITE_IDXTYPE_UNIQUE);}
break;
case 70: /* tcons ::= CHECK LP expr RP onconf */
-{sqlite3AddCheckConstraint(pParse,yymsp[-2].minor.yy528,yymsp[-3].minor.yy0.z,yymsp[-1].minor.yy0.z);}
+{sqlite3AddCheckConstraint(pParse,yymsp[-2].minor.yy454,yymsp[-3].minor.yy0.z,yymsp[-1].minor.yy0.z);}
break;
case 71: /* tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt */
{
- sqlite3CreateForeignKey(pParse, yymsp[-6].minor.yy322, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy322, yymsp[-1].minor.yy394);
- sqlite3DeferForeignKey(pParse, yymsp[0].minor.yy394);
+ sqlite3CreateForeignKey(pParse, yymsp[-6].minor.yy14, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy14, yymsp[-1].minor.yy144);
+ sqlite3DeferForeignKey(pParse, yymsp[0].minor.yy144);
}
break;
case 73: /* onconf ::= */
case 75: /* orconf ::= */ yytestcase(yyruleno==75);
-{yymsp[1].minor.yy394 = OE_Default;}
+{yymsp[1].minor.yy144 = OE_Default;}
break;
case 74: /* onconf ::= ON CONFLICT resolvetype */
-{yymsp[-2].minor.yy394 = yymsp[0].minor.yy394;}
+{yymsp[-2].minor.yy144 = yymsp[0].minor.yy144;}
break;
case 77: /* resolvetype ::= IGNORE */
-{yymsp[0].minor.yy394 = OE_Ignore;}
+{yymsp[0].minor.yy144 = OE_Ignore;}
break;
case 78: /* resolvetype ::= REPLACE */
- case 172: /* insert_cmd ::= REPLACE */ yytestcase(yyruleno==172);
-{yymsp[0].minor.yy394 = OE_Replace;}
+ case 174: /* insert_cmd ::= REPLACE */ yytestcase(yyruleno==174);
+{yymsp[0].minor.yy144 = OE_Replace;}
break;
case 79: /* cmd ::= DROP TABLE ifexists fullname */
{
- sqlite3DropTable(pParse, yymsp[0].minor.yy131, 0, yymsp[-1].minor.yy394);
+ sqlite3DropTable(pParse, yymsp[0].minor.yy203, 0, yymsp[-1].minor.yy144);
}
break;
case 82: /* cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select */
{
- sqlite3CreateView(pParse, &yymsp[-8].minor.yy0, &yymsp[-4].minor.yy0, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy322, yymsp[0].minor.yy47, yymsp[-7].minor.yy394, yymsp[-5].minor.yy394);
+ sqlite3CreateView(pParse, &yymsp[-8].minor.yy0, &yymsp[-4].minor.yy0, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy14, yymsp[0].minor.yy555, yymsp[-7].minor.yy144, yymsp[-5].minor.yy144);
}
break;
case 83: /* cmd ::= DROP VIEW ifexists fullname */
{
- sqlite3DropTable(pParse, yymsp[0].minor.yy131, 1, yymsp[-1].minor.yy394);
+ sqlite3DropTable(pParse, yymsp[0].minor.yy203, 1, yymsp[-1].minor.yy144);
}
break;
case 84: /* cmd ::= select */
{
SelectDest dest = {SRT_Output, 0, 0, 0, 0, 0, 0};
- sqlite3Select(pParse, yymsp[0].minor.yy47, &dest);
- sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy47);
+ sqlite3Select(pParse, yymsp[0].minor.yy555, &dest);
+ sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy555);
}
break;
case 85: /* select ::= WITH wqlist selectnowith */
-{yymsp[-2].minor.yy47 = attachWithToSelect(pParse,yymsp[0].minor.yy47,yymsp[-1].minor.yy521);}
+{yymsp[-2].minor.yy555 = attachWithToSelect(pParse,yymsp[0].minor.yy555,yymsp[-1].minor.yy59);}
break;
case 86: /* select ::= WITH RECURSIVE wqlist selectnowith */
-{yymsp[-3].minor.yy47 = attachWithToSelect(pParse,yymsp[0].minor.yy47,yymsp[-1].minor.yy521);}
+{yymsp[-3].minor.yy555 = attachWithToSelect(pParse,yymsp[0].minor.yy555,yymsp[-1].minor.yy59);}
break;
case 87: /* select ::= selectnowith */
{
- Select *p = yymsp[0].minor.yy47;
+ Select *p = yymsp[0].minor.yy555;
if( p ){
parserDoubleLinkSelect(pParse, p);
}
@@ -175032,8 +176434,8 @@ static YYACTIONTYPE yy_reduce(
break;
case 88: /* selectnowith ::= selectnowith multiselect_op oneselect */
{
- Select *pRhs = yymsp[0].minor.yy47;
- Select *pLhs = yymsp[-2].minor.yy47;
+ Select *pRhs = yymsp[0].minor.yy555;
+ Select *pLhs = yymsp[-2].minor.yy555;
if( pRhs && pRhs->pPrior ){
SrcList *pFrom;
Token x;
@@ -175043,148 +176445,145 @@ static YYACTIONTYPE yy_reduce(
pRhs = sqlite3SelectNew(pParse,0,pFrom,0,0,0,0,0,0);
}
if( pRhs ){
- pRhs->op = (u8)yymsp[-1].minor.yy394;
+ pRhs->op = (u8)yymsp[-1].minor.yy144;
pRhs->pPrior = pLhs;
if( ALWAYS(pLhs) ) pLhs->selFlags &= ~SF_MultiValue;
pRhs->selFlags &= ~SF_MultiValue;
- if( yymsp[-1].minor.yy394!=TK_ALL ) pParse->hasCompound = 1;
+ if( yymsp[-1].minor.yy144!=TK_ALL ) pParse->hasCompound = 1;
}else{
sqlite3SelectDelete(pParse->db, pLhs);
}
- yymsp[-2].minor.yy47 = pRhs;
+ yymsp[-2].minor.yy555 = pRhs;
}
break;
case 89: /* multiselect_op ::= UNION */
case 91: /* multiselect_op ::= EXCEPT|INTERSECT */ yytestcase(yyruleno==91);
-{yymsp[0].minor.yy394 = yymsp[0].major; /*A-overwrites-OP*/}
+{yymsp[0].minor.yy144 = yymsp[0].major; /*A-overwrites-OP*/}
break;
case 90: /* multiselect_op ::= UNION ALL */
-{yymsp[-1].minor.yy394 = TK_ALL;}
+{yymsp[-1].minor.yy144 = TK_ALL;}
break;
case 92: /* oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */
{
- yymsp[-8].minor.yy47 = sqlite3SelectNew(pParse,yymsp[-6].minor.yy322,yymsp[-5].minor.yy131,yymsp[-4].minor.yy528,yymsp[-3].minor.yy322,yymsp[-2].minor.yy528,yymsp[-1].minor.yy322,yymsp[-7].minor.yy394,yymsp[0].minor.yy528);
+ yymsp[-8].minor.yy555 = sqlite3SelectNew(pParse,yymsp[-6].minor.yy14,yymsp[-5].minor.yy203,yymsp[-4].minor.yy454,yymsp[-3].minor.yy14,yymsp[-2].minor.yy454,yymsp[-1].minor.yy14,yymsp[-7].minor.yy144,yymsp[0].minor.yy454);
}
break;
case 93: /* oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt window_clause orderby_opt limit_opt */
{
- yymsp[-9].minor.yy47 = sqlite3SelectNew(pParse,yymsp[-7].minor.yy322,yymsp[-6].minor.yy131,yymsp[-5].minor.yy528,yymsp[-4].minor.yy322,yymsp[-3].minor.yy528,yymsp[-1].minor.yy322,yymsp[-8].minor.yy394,yymsp[0].minor.yy528);
- if( yymsp[-9].minor.yy47 ){
- yymsp[-9].minor.yy47->pWinDefn = yymsp[-2].minor.yy41;
+ yymsp[-9].minor.yy555 = sqlite3SelectNew(pParse,yymsp[-7].minor.yy14,yymsp[-6].minor.yy203,yymsp[-5].minor.yy454,yymsp[-4].minor.yy14,yymsp[-3].minor.yy454,yymsp[-1].minor.yy14,yymsp[-8].minor.yy144,yymsp[0].minor.yy454);
+ if( yymsp[-9].minor.yy555 ){
+ yymsp[-9].minor.yy555->pWinDefn = yymsp[-2].minor.yy211;
}else{
- sqlite3WindowListDelete(pParse->db, yymsp[-2].minor.yy41);
+ sqlite3WindowListDelete(pParse->db, yymsp[-2].minor.yy211);
}
}
break;
case 94: /* values ::= VALUES LP nexprlist RP */
{
- yymsp[-3].minor.yy47 = sqlite3SelectNew(pParse,yymsp[-1].minor.yy322,0,0,0,0,0,SF_Values,0);
+ yymsp[-3].minor.yy555 = sqlite3SelectNew(pParse,yymsp[-1].minor.yy14,0,0,0,0,0,SF_Values,0);
}
break;
- case 95: /* values ::= values COMMA LP nexprlist RP */
+ case 95: /* oneselect ::= mvalues */
{
- Select *pRight, *pLeft = yymsp[-4].minor.yy47;
- pRight = sqlite3SelectNew(pParse,yymsp[-1].minor.yy322,0,0,0,0,0,SF_Values|SF_MultiValue,0);
- if( ALWAYS(pLeft) ) pLeft->selFlags &= ~SF_MultiValue;
- if( pRight ){
- pRight->op = TK_ALL;
- pRight->pPrior = pLeft;
- yymsp[-4].minor.yy47 = pRight;
- }else{
- yymsp[-4].minor.yy47 = pLeft;
- }
+ sqlite3MultiValuesEnd(pParse, yymsp[0].minor.yy555);
+}
+ break;
+ case 96: /* mvalues ::= values COMMA LP nexprlist RP */
+ case 97: /* mvalues ::= mvalues COMMA LP nexprlist RP */ yytestcase(yyruleno==97);
+{
+ yymsp[-4].minor.yy555 = sqlite3MultiValues(pParse, yymsp[-4].minor.yy555, yymsp[-1].minor.yy14);
}
break;
- case 96: /* distinct ::= DISTINCT */
-{yymsp[0].minor.yy394 = SF_Distinct;}
+ case 98: /* distinct ::= DISTINCT */
+{yymsp[0].minor.yy144 = SF_Distinct;}
break;
- case 97: /* distinct ::= ALL */
-{yymsp[0].minor.yy394 = SF_All;}
+ case 99: /* distinct ::= ALL */
+{yymsp[0].minor.yy144 = SF_All;}
break;
- case 99: /* sclp ::= */
- case 132: /* orderby_opt ::= */ yytestcase(yyruleno==132);
- case 142: /* groupby_opt ::= */ yytestcase(yyruleno==142);
- case 232: /* exprlist ::= */ yytestcase(yyruleno==232);
- case 235: /* paren_exprlist ::= */ yytestcase(yyruleno==235);
- case 240: /* eidlist_opt ::= */ yytestcase(yyruleno==240);
-{yymsp[1].minor.yy322 = 0;}
+ case 101: /* sclp ::= */
+ case 134: /* orderby_opt ::= */ yytestcase(yyruleno==134);
+ case 144: /* groupby_opt ::= */ yytestcase(yyruleno==144);
+ case 234: /* exprlist ::= */ yytestcase(yyruleno==234);
+ case 237: /* paren_exprlist ::= */ yytestcase(yyruleno==237);
+ case 242: /* eidlist_opt ::= */ yytestcase(yyruleno==242);
+{yymsp[1].minor.yy14 = 0;}
break;
- case 100: /* selcollist ::= sclp scanpt expr scanpt as */
+ case 102: /* selcollist ::= sclp scanpt expr scanpt as */
{
- yymsp[-4].minor.yy322 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy322, yymsp[-2].minor.yy528);
- if( yymsp[0].minor.yy0.n>0 ) sqlite3ExprListSetName(pParse, yymsp[-4].minor.yy322, &yymsp[0].minor.yy0, 1);
- sqlite3ExprListSetSpan(pParse,yymsp[-4].minor.yy322,yymsp[-3].minor.yy522,yymsp[-1].minor.yy522);
+ yymsp[-4].minor.yy14 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy14, yymsp[-2].minor.yy454);
+ if( yymsp[0].minor.yy0.n>0 ) sqlite3ExprListSetName(pParse, yymsp[-4].minor.yy14, &yymsp[0].minor.yy0, 1);
+ sqlite3ExprListSetSpan(pParse,yymsp[-4].minor.yy14,yymsp[-3].minor.yy168,yymsp[-1].minor.yy168);
}
break;
- case 101: /* selcollist ::= sclp scanpt STAR */
+ case 103: /* selcollist ::= sclp scanpt STAR */
{
Expr *p = sqlite3Expr(pParse->db, TK_ASTERISK, 0);
sqlite3ExprSetErrorOffset(p, (int)(yymsp[0].minor.yy0.z - pParse->zTail));
- yymsp[-2].minor.yy322 = sqlite3ExprListAppend(pParse, yymsp[-2].minor.yy322, p);
+ yymsp[-2].minor.yy14 = sqlite3ExprListAppend(pParse, yymsp[-2].minor.yy14, p);
}
break;
- case 102: /* selcollist ::= sclp scanpt nm DOT STAR */
+ case 104: /* selcollist ::= sclp scanpt nm DOT STAR */
{
Expr *pRight, *pLeft, *pDot;
pRight = sqlite3PExpr(pParse, TK_ASTERISK, 0, 0);
sqlite3ExprSetErrorOffset(pRight, (int)(yymsp[0].minor.yy0.z - pParse->zTail));
pLeft = tokenExpr(pParse, TK_ID, yymsp[-2].minor.yy0);
pDot = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight);
- yymsp[-4].minor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy322, pDot);
+ yymsp[-4].minor.yy14 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy14, pDot);
}
break;
- case 103: /* as ::= AS nm */
- case 115: /* dbnm ::= DOT nm */ yytestcase(yyruleno==115);
- case 256: /* plus_num ::= PLUS INTEGER|FLOAT */ yytestcase(yyruleno==256);
- case 257: /* minus_num ::= MINUS INTEGER|FLOAT */ yytestcase(yyruleno==257);
+ case 105: /* as ::= AS nm */
+ case 117: /* dbnm ::= DOT nm */ yytestcase(yyruleno==117);
+ case 258: /* plus_num ::= PLUS INTEGER|FLOAT */ yytestcase(yyruleno==258);
+ case 259: /* minus_num ::= MINUS INTEGER|FLOAT */ yytestcase(yyruleno==259);
{yymsp[-1].minor.yy0 = yymsp[0].minor.yy0;}
break;
- case 105: /* from ::= */
- case 108: /* stl_prefix ::= */ yytestcase(yyruleno==108);
-{yymsp[1].minor.yy131 = 0;}
+ case 107: /* from ::= */
+ case 110: /* stl_prefix ::= */ yytestcase(yyruleno==110);
+{yymsp[1].minor.yy203 = 0;}
break;
- case 106: /* from ::= FROM seltablist */
+ case 108: /* from ::= FROM seltablist */
{
- yymsp[-1].minor.yy131 = yymsp[0].minor.yy131;
- sqlite3SrcListShiftJoinType(pParse,yymsp[-1].minor.yy131);
+ yymsp[-1].minor.yy203 = yymsp[0].minor.yy203;
+ sqlite3SrcListShiftJoinType(pParse,yymsp[-1].minor.yy203);
}
break;
- case 107: /* stl_prefix ::= seltablist joinop */
+ case 109: /* stl_prefix ::= seltablist joinop */
{
- if( ALWAYS(yymsp[-1].minor.yy131 && yymsp[-1].minor.yy131->nSrc>0) ) yymsp[-1].minor.yy131->a[yymsp[-1].minor.yy131->nSrc-1].fg.jointype = (u8)yymsp[0].minor.yy394;
+ if( ALWAYS(yymsp[-1].minor.yy203 && yymsp[-1].minor.yy203->nSrc>0) ) yymsp[-1].minor.yy203->a[yymsp[-1].minor.yy203->nSrc-1].fg.jointype = (u8)yymsp[0].minor.yy144;
}
break;
- case 109: /* seltablist ::= stl_prefix nm dbnm as on_using */
+ case 111: /* seltablist ::= stl_prefix nm dbnm as on_using */
{
- yymsp[-4].minor.yy131 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-4].minor.yy131,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,0,&yymsp[0].minor.yy561);
+ yymsp[-4].minor.yy203 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-4].minor.yy203,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,0,&yymsp[0].minor.yy269);
}
break;
- case 110: /* seltablist ::= stl_prefix nm dbnm as indexed_by on_using */
+ case 112: /* seltablist ::= stl_prefix nm dbnm as indexed_by on_using */
{
- yymsp[-5].minor.yy131 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-5].minor.yy131,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,0,&yymsp[0].minor.yy561);
- sqlite3SrcListIndexedBy(pParse, yymsp[-5].minor.yy131, &yymsp[-1].minor.yy0);
+ yymsp[-5].minor.yy203 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-5].minor.yy203,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,0,&yymsp[0].minor.yy269);
+ sqlite3SrcListIndexedBy(pParse, yymsp[-5].minor.yy203, &yymsp[-1].minor.yy0);
}
break;
- case 111: /* seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_using */
+ case 113: /* seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_using */
{
- yymsp[-7].minor.yy131 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-7].minor.yy131,&yymsp[-6].minor.yy0,&yymsp[-5].minor.yy0,&yymsp[-1].minor.yy0,0,&yymsp[0].minor.yy561);
- sqlite3SrcListFuncArgs(pParse, yymsp[-7].minor.yy131, yymsp[-3].minor.yy322);
+ yymsp[-7].minor.yy203 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-7].minor.yy203,&yymsp[-6].minor.yy0,&yymsp[-5].minor.yy0,&yymsp[-1].minor.yy0,0,&yymsp[0].minor.yy269);
+ sqlite3SrcListFuncArgs(pParse, yymsp[-7].minor.yy203, yymsp[-3].minor.yy14);
}
break;
- case 112: /* seltablist ::= stl_prefix LP select RP as on_using */
+ case 114: /* seltablist ::= stl_prefix LP select RP as on_using */
{
- yymsp[-5].minor.yy131 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-5].minor.yy131,0,0,&yymsp[-1].minor.yy0,yymsp[-3].minor.yy47,&yymsp[0].minor.yy561);
+ yymsp[-5].minor.yy203 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-5].minor.yy203,0,0,&yymsp[-1].minor.yy0,yymsp[-3].minor.yy555,&yymsp[0].minor.yy269);
}
break;
- case 113: /* seltablist ::= stl_prefix LP seltablist RP as on_using */
+ case 115: /* seltablist ::= stl_prefix LP seltablist RP as on_using */
{
- if( yymsp[-5].minor.yy131==0 && yymsp[-1].minor.yy0.n==0 && yymsp[0].minor.yy561.pOn==0 && yymsp[0].minor.yy561.pUsing==0 ){
- yymsp[-5].minor.yy131 = yymsp[-3].minor.yy131;
- }else if( ALWAYS(yymsp[-3].minor.yy131!=0) && yymsp[-3].minor.yy131->nSrc==1 ){
- yymsp[-5].minor.yy131 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-5].minor.yy131,0,0,&yymsp[-1].minor.yy0,0,&yymsp[0].minor.yy561);
- if( yymsp[-5].minor.yy131 ){
- SrcItem *pNew = &yymsp[-5].minor.yy131->a[yymsp[-5].minor.yy131->nSrc-1];
- SrcItem *pOld = yymsp[-3].minor.yy131->a;
+ if( yymsp[-5].minor.yy203==0 && yymsp[-1].minor.yy0.n==0 && yymsp[0].minor.yy269.pOn==0 && yymsp[0].minor.yy269.pUsing==0 ){
+ yymsp[-5].minor.yy203 = yymsp[-3].minor.yy203;
+ }else if( ALWAYS(yymsp[-3].minor.yy203!=0) && yymsp[-3].minor.yy203->nSrc==1 ){
+ yymsp[-5].minor.yy203 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-5].minor.yy203,0,0,&yymsp[-1].minor.yy0,0,&yymsp[0].minor.yy269);
+ if( yymsp[-5].minor.yy203 ){
+ SrcItem *pNew = &yymsp[-5].minor.yy203->a[yymsp[-5].minor.yy203->nSrc-1];
+ SrcItem *pOld = yymsp[-3].minor.yy203->a;
pNew->zName = pOld->zName;
pNew->zDatabase = pOld->zDatabase;
pNew->pSelect = pOld->pSelect;
@@ -175200,153 +176599,153 @@ static YYACTIONTYPE yy_reduce(
pOld->zName = pOld->zDatabase = 0;
pOld->pSelect = 0;
}
- sqlite3SrcListDelete(pParse->db, yymsp[-3].minor.yy131);
+ sqlite3SrcListDelete(pParse->db, yymsp[-3].minor.yy203);
}else{
Select *pSubquery;
- sqlite3SrcListShiftJoinType(pParse,yymsp[-3].minor.yy131);
- pSubquery = sqlite3SelectNew(pParse,0,yymsp[-3].minor.yy131,0,0,0,0,SF_NestedFrom,0);
- yymsp[-5].minor.yy131 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-5].minor.yy131,0,0,&yymsp[-1].minor.yy0,pSubquery,&yymsp[0].minor.yy561);
+ sqlite3SrcListShiftJoinType(pParse,yymsp[-3].minor.yy203);
+ pSubquery = sqlite3SelectNew(pParse,0,yymsp[-3].minor.yy203,0,0,0,0,SF_NestedFrom,0);
+ yymsp[-5].minor.yy203 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-5].minor.yy203,0,0,&yymsp[-1].minor.yy0,pSubquery,&yymsp[0].minor.yy269);
}
}
break;
- case 114: /* dbnm ::= */
- case 129: /* indexed_opt ::= */ yytestcase(yyruleno==129);
+ case 116: /* dbnm ::= */
+ case 131: /* indexed_opt ::= */ yytestcase(yyruleno==131);
{yymsp[1].minor.yy0.z=0; yymsp[1].minor.yy0.n=0;}
break;
- case 116: /* fullname ::= nm */
+ case 118: /* fullname ::= nm */
{
- yylhsminor.yy131 = sqlite3SrcListAppend(pParse,0,&yymsp[0].minor.yy0,0);
- if( IN_RENAME_OBJECT && yylhsminor.yy131 ) sqlite3RenameTokenMap(pParse, yylhsminor.yy131->a[0].zName, &yymsp[0].minor.yy0);
+ yylhsminor.yy203 = sqlite3SrcListAppend(pParse,0,&yymsp[0].minor.yy0,0);
+ if( IN_RENAME_OBJECT && yylhsminor.yy203 ) sqlite3RenameTokenMap(pParse, yylhsminor.yy203->a[0].zName, &yymsp[0].minor.yy0);
}
- yymsp[0].minor.yy131 = yylhsminor.yy131;
+ yymsp[0].minor.yy203 = yylhsminor.yy203;
break;
- case 117: /* fullname ::= nm DOT nm */
+ case 119: /* fullname ::= nm DOT nm */
{
- yylhsminor.yy131 = sqlite3SrcListAppend(pParse,0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0);
- if( IN_RENAME_OBJECT && yylhsminor.yy131 ) sqlite3RenameTokenMap(pParse, yylhsminor.yy131->a[0].zName, &yymsp[0].minor.yy0);
+ yylhsminor.yy203 = sqlite3SrcListAppend(pParse,0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0);
+ if( IN_RENAME_OBJECT && yylhsminor.yy203 ) sqlite3RenameTokenMap(pParse, yylhsminor.yy203->a[0].zName, &yymsp[0].minor.yy0);
}
- yymsp[-2].minor.yy131 = yylhsminor.yy131;
+ yymsp[-2].minor.yy203 = yylhsminor.yy203;
break;
- case 118: /* xfullname ::= nm */
-{yymsp[0].minor.yy131 = sqlite3SrcListAppend(pParse,0,&yymsp[0].minor.yy0,0); /*A-overwrites-X*/}
+ case 120: /* xfullname ::= nm */
+{yymsp[0].minor.yy203 = sqlite3SrcListAppend(pParse,0,&yymsp[0].minor.yy0,0); /*A-overwrites-X*/}
break;
- case 119: /* xfullname ::= nm DOT nm */
-{yymsp[-2].minor.yy131 = sqlite3SrcListAppend(pParse,0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-X*/}
+ case 121: /* xfullname ::= nm DOT nm */
+{yymsp[-2].minor.yy203 = sqlite3SrcListAppend(pParse,0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-X*/}
break;
- case 120: /* xfullname ::= nm DOT nm AS nm */
+ case 122: /* xfullname ::= nm DOT nm AS nm */
{
- yymsp[-4].minor.yy131 = sqlite3SrcListAppend(pParse,0,&yymsp[-4].minor.yy0,&yymsp[-2].minor.yy0); /*A-overwrites-X*/
- if( yymsp[-4].minor.yy131 ) yymsp[-4].minor.yy131->a[0].zAlias = sqlite3NameFromToken(pParse->db, &yymsp[0].minor.yy0);
+ yymsp[-4].minor.yy203 = sqlite3SrcListAppend(pParse,0,&yymsp[-4].minor.yy0,&yymsp[-2].minor.yy0); /*A-overwrites-X*/
+ if( yymsp[-4].minor.yy203 ) yymsp[-4].minor.yy203->a[0].zAlias = sqlite3NameFromToken(pParse->db, &yymsp[0].minor.yy0);
}
break;
- case 121: /* xfullname ::= nm AS nm */
+ case 123: /* xfullname ::= nm AS nm */
{
- yymsp[-2].minor.yy131 = sqlite3SrcListAppend(pParse,0,&yymsp[-2].minor.yy0,0); /*A-overwrites-X*/
- if( yymsp[-2].minor.yy131 ) yymsp[-2].minor.yy131->a[0].zAlias = sqlite3NameFromToken(pParse->db, &yymsp[0].minor.yy0);
+ yymsp[-2].minor.yy203 = sqlite3SrcListAppend(pParse,0,&yymsp[-2].minor.yy0,0); /*A-overwrites-X*/
+ if( yymsp[-2].minor.yy203 ) yymsp[-2].minor.yy203->a[0].zAlias = sqlite3NameFromToken(pParse->db, &yymsp[0].minor.yy0);
}
break;
- case 122: /* joinop ::= COMMA|JOIN */
-{ yymsp[0].minor.yy394 = JT_INNER; }
+ case 124: /* joinop ::= COMMA|JOIN */
+{ yymsp[0].minor.yy144 = JT_INNER; }
break;
- case 123: /* joinop ::= JOIN_KW JOIN */
-{yymsp[-1].minor.yy394 = sqlite3JoinType(pParse,&yymsp[-1].minor.yy0,0,0); /*X-overwrites-A*/}
+ case 125: /* joinop ::= JOIN_KW JOIN */
+{yymsp[-1].minor.yy144 = sqlite3JoinType(pParse,&yymsp[-1].minor.yy0,0,0); /*X-overwrites-A*/}
break;
- case 124: /* joinop ::= JOIN_KW nm JOIN */
-{yymsp[-2].minor.yy394 = sqlite3JoinType(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,0); /*X-overwrites-A*/}
+ case 126: /* joinop ::= JOIN_KW nm JOIN */
+{yymsp[-2].minor.yy144 = sqlite3JoinType(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,0); /*X-overwrites-A*/}
break;
- case 125: /* joinop ::= JOIN_KW nm nm JOIN */
-{yymsp[-3].minor.yy394 = sqlite3JoinType(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0);/*X-overwrites-A*/}
+ case 127: /* joinop ::= JOIN_KW nm nm JOIN */
+{yymsp[-3].minor.yy144 = sqlite3JoinType(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0);/*X-overwrites-A*/}
break;
- case 126: /* on_using ::= ON expr */
-{yymsp[-1].minor.yy561.pOn = yymsp[0].minor.yy528; yymsp[-1].minor.yy561.pUsing = 0;}
+ case 128: /* on_using ::= ON expr */
+{yymsp[-1].minor.yy269.pOn = yymsp[0].minor.yy454; yymsp[-1].minor.yy269.pUsing = 0;}
break;
- case 127: /* on_using ::= USING LP idlist RP */
-{yymsp[-3].minor.yy561.pOn = 0; yymsp[-3].minor.yy561.pUsing = yymsp[-1].minor.yy254;}
+ case 129: /* on_using ::= USING LP idlist RP */
+{yymsp[-3].minor.yy269.pOn = 0; yymsp[-3].minor.yy269.pUsing = yymsp[-1].minor.yy132;}
break;
- case 128: /* on_using ::= */
-{yymsp[1].minor.yy561.pOn = 0; yymsp[1].minor.yy561.pUsing = 0;}
+ case 130: /* on_using ::= */
+{yymsp[1].minor.yy269.pOn = 0; yymsp[1].minor.yy269.pUsing = 0;}
break;
- case 130: /* indexed_by ::= INDEXED BY nm */
+ case 132: /* indexed_by ::= INDEXED BY nm */
{yymsp[-2].minor.yy0 = yymsp[0].minor.yy0;}
break;
- case 131: /* indexed_by ::= NOT INDEXED */
+ case 133: /* indexed_by ::= NOT INDEXED */
{yymsp[-1].minor.yy0.z=0; yymsp[-1].minor.yy0.n=1;}
break;
- case 133: /* orderby_opt ::= ORDER BY sortlist */
- case 143: /* groupby_opt ::= GROUP BY nexprlist */ yytestcase(yyruleno==143);
-{yymsp[-2].minor.yy322 = yymsp[0].minor.yy322;}
+ case 135: /* orderby_opt ::= ORDER BY sortlist */
+ case 145: /* groupby_opt ::= GROUP BY nexprlist */ yytestcase(yyruleno==145);
+{yymsp[-2].minor.yy14 = yymsp[0].minor.yy14;}
break;
- case 134: /* sortlist ::= sortlist COMMA expr sortorder nulls */
+ case 136: /* sortlist ::= sortlist COMMA expr sortorder nulls */
{
- yymsp[-4].minor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy322,yymsp[-2].minor.yy528);
- sqlite3ExprListSetSortOrder(yymsp[-4].minor.yy322,yymsp[-1].minor.yy394,yymsp[0].minor.yy394);
+ yymsp[-4].minor.yy14 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy14,yymsp[-2].minor.yy454);
+ sqlite3ExprListSetSortOrder(yymsp[-4].minor.yy14,yymsp[-1].minor.yy144,yymsp[0].minor.yy144);
}
break;
- case 135: /* sortlist ::= expr sortorder nulls */
+ case 137: /* sortlist ::= expr sortorder nulls */
{
- yymsp[-2].minor.yy322 = sqlite3ExprListAppend(pParse,0,yymsp[-2].minor.yy528); /*A-overwrites-Y*/
- sqlite3ExprListSetSortOrder(yymsp[-2].minor.yy322,yymsp[-1].minor.yy394,yymsp[0].minor.yy394);
+ yymsp[-2].minor.yy14 = sqlite3ExprListAppend(pParse,0,yymsp[-2].minor.yy454); /*A-overwrites-Y*/
+ sqlite3ExprListSetSortOrder(yymsp[-2].minor.yy14,yymsp[-1].minor.yy144,yymsp[0].minor.yy144);
}
break;
- case 136: /* sortorder ::= ASC */
-{yymsp[0].minor.yy394 = SQLITE_SO_ASC;}
+ case 138: /* sortorder ::= ASC */
+{yymsp[0].minor.yy144 = SQLITE_SO_ASC;}
break;
- case 137: /* sortorder ::= DESC */
-{yymsp[0].minor.yy394 = SQLITE_SO_DESC;}
+ case 139: /* sortorder ::= DESC */
+{yymsp[0].minor.yy144 = SQLITE_SO_DESC;}
break;
- case 138: /* sortorder ::= */
- case 141: /* nulls ::= */ yytestcase(yyruleno==141);
-{yymsp[1].minor.yy394 = SQLITE_SO_UNDEFINED;}
+ case 140: /* sortorder ::= */
+ case 143: /* nulls ::= */ yytestcase(yyruleno==143);
+{yymsp[1].minor.yy144 = SQLITE_SO_UNDEFINED;}
break;
- case 139: /* nulls ::= NULLS FIRST */
-{yymsp[-1].minor.yy394 = SQLITE_SO_ASC;}
+ case 141: /* nulls ::= NULLS FIRST */
+{yymsp[-1].minor.yy144 = SQLITE_SO_ASC;}
break;
- case 140: /* nulls ::= NULLS LAST */
-{yymsp[-1].minor.yy394 = SQLITE_SO_DESC;}
+ case 142: /* nulls ::= NULLS LAST */
+{yymsp[-1].minor.yy144 = SQLITE_SO_DESC;}
break;
- case 144: /* having_opt ::= */
- case 146: /* limit_opt ::= */ yytestcase(yyruleno==146);
- case 151: /* where_opt ::= */ yytestcase(yyruleno==151);
- case 153: /* where_opt_ret ::= */ yytestcase(yyruleno==153);
- case 230: /* case_else ::= */ yytestcase(yyruleno==230);
- case 231: /* case_operand ::= */ yytestcase(yyruleno==231);
- case 250: /* vinto ::= */ yytestcase(yyruleno==250);
-{yymsp[1].minor.yy528 = 0;}
+ case 146: /* having_opt ::= */
+ case 148: /* limit_opt ::= */ yytestcase(yyruleno==148);
+ case 153: /* where_opt ::= */ yytestcase(yyruleno==153);
+ case 155: /* where_opt_ret ::= */ yytestcase(yyruleno==155);
+ case 232: /* case_else ::= */ yytestcase(yyruleno==232);
+ case 233: /* case_operand ::= */ yytestcase(yyruleno==233);
+ case 252: /* vinto ::= */ yytestcase(yyruleno==252);
+{yymsp[1].minor.yy454 = 0;}
break;
- case 145: /* having_opt ::= HAVING expr */
- case 152: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==152);
- case 154: /* where_opt_ret ::= WHERE expr */ yytestcase(yyruleno==154);
- case 229: /* case_else ::= ELSE expr */ yytestcase(yyruleno==229);
- case 249: /* vinto ::= INTO expr */ yytestcase(yyruleno==249);
-{yymsp[-1].minor.yy528 = yymsp[0].minor.yy528;}
+ case 147: /* having_opt ::= HAVING expr */
+ case 154: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==154);
+ case 156: /* where_opt_ret ::= WHERE expr */ yytestcase(yyruleno==156);
+ case 231: /* case_else ::= ELSE expr */ yytestcase(yyruleno==231);
+ case 251: /* vinto ::= INTO expr */ yytestcase(yyruleno==251);
+{yymsp[-1].minor.yy454 = yymsp[0].minor.yy454;}
break;
- case 147: /* limit_opt ::= LIMIT expr */
-{yymsp[-1].minor.yy528 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[0].minor.yy528,0);}
+ case 149: /* limit_opt ::= LIMIT expr */
+{yymsp[-1].minor.yy454 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[0].minor.yy454,0);}
break;
- case 148: /* limit_opt ::= LIMIT expr OFFSET expr */
-{yymsp[-3].minor.yy528 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[-2].minor.yy528,yymsp[0].minor.yy528);}
+ case 150: /* limit_opt ::= LIMIT expr OFFSET expr */
+{yymsp[-3].minor.yy454 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[-2].minor.yy454,yymsp[0].minor.yy454);}
break;
- case 149: /* limit_opt ::= LIMIT expr COMMA expr */
-{yymsp[-3].minor.yy528 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[0].minor.yy528,yymsp[-2].minor.yy528);}
+ case 151: /* limit_opt ::= LIMIT expr COMMA expr */
+{yymsp[-3].minor.yy454 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[0].minor.yy454,yymsp[-2].minor.yy454);}
break;
- case 150: /* cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret */
+ case 152: /* cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret */
{
- sqlite3SrcListIndexedBy(pParse, yymsp[-2].minor.yy131, &yymsp[-1].minor.yy0);
- sqlite3DeleteFrom(pParse,yymsp[-2].minor.yy131,yymsp[0].minor.yy528,0,0);
+ sqlite3SrcListIndexedBy(pParse, yymsp[-2].minor.yy203, &yymsp[-1].minor.yy0);
+ sqlite3DeleteFrom(pParse,yymsp[-2].minor.yy203,yymsp[0].minor.yy454,0,0);
}
break;
- case 155: /* where_opt_ret ::= RETURNING selcollist */
-{sqlite3AddReturning(pParse,yymsp[0].minor.yy322); yymsp[-1].minor.yy528 = 0;}
+ case 157: /* where_opt_ret ::= RETURNING selcollist */
+{sqlite3AddReturning(pParse,yymsp[0].minor.yy14); yymsp[-1].minor.yy454 = 0;}
break;
- case 156: /* where_opt_ret ::= WHERE expr RETURNING selcollist */
-{sqlite3AddReturning(pParse,yymsp[0].minor.yy322); yymsp[-3].minor.yy528 = yymsp[-2].minor.yy528;}
+ case 158: /* where_opt_ret ::= WHERE expr RETURNING selcollist */
+{sqlite3AddReturning(pParse,yymsp[0].minor.yy14); yymsp[-3].minor.yy454 = yymsp[-2].minor.yy454;}
break;
- case 157: /* cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt_ret */
+ case 159: /* cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt_ret */
{
- sqlite3SrcListIndexedBy(pParse, yymsp[-5].minor.yy131, &yymsp[-4].minor.yy0);
- sqlite3ExprListCheckLength(pParse,yymsp[-2].minor.yy322,"set list");
- if( yymsp[-1].minor.yy131 ){
- SrcList *pFromClause = yymsp[-1].minor.yy131;
+ sqlite3SrcListIndexedBy(pParse, yymsp[-5].minor.yy203, &yymsp[-4].minor.yy0);
+ sqlite3ExprListCheckLength(pParse,yymsp[-2].minor.yy14,"set list");
+ if( yymsp[-1].minor.yy203 ){
+ SrcList *pFromClause = yymsp[-1].minor.yy203;
if( pFromClause->nSrc>1 ){
Select *pSubquery;
Token as;
@@ -175355,92 +176754,92 @@ static YYACTIONTYPE yy_reduce(
as.z = 0;
pFromClause = sqlite3SrcListAppendFromTerm(pParse,0,0,0,&as,pSubquery,0);
}
- yymsp[-5].minor.yy131 = sqlite3SrcListAppendList(pParse, yymsp[-5].minor.yy131, pFromClause);
+ yymsp[-5].minor.yy203 = sqlite3SrcListAppendList(pParse, yymsp[-5].minor.yy203, pFromClause);
}
- sqlite3Update(pParse,yymsp[-5].minor.yy131,yymsp[-2].minor.yy322,yymsp[0].minor.yy528,yymsp[-6].minor.yy394,0,0,0);
+ sqlite3Update(pParse,yymsp[-5].minor.yy203,yymsp[-2].minor.yy14,yymsp[0].minor.yy454,yymsp[-6].minor.yy144,0,0,0);
}
break;
- case 158: /* setlist ::= setlist COMMA nm EQ expr */
+ case 160: /* setlist ::= setlist COMMA nm EQ expr */
{
- yymsp[-4].minor.yy322 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy322, yymsp[0].minor.yy528);
- sqlite3ExprListSetName(pParse, yymsp[-4].minor.yy322, &yymsp[-2].minor.yy0, 1);
+ yymsp[-4].minor.yy14 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy14, yymsp[0].minor.yy454);
+ sqlite3ExprListSetName(pParse, yymsp[-4].minor.yy14, &yymsp[-2].minor.yy0, 1);
}
break;
- case 159: /* setlist ::= setlist COMMA LP idlist RP EQ expr */
+ case 161: /* setlist ::= setlist COMMA LP idlist RP EQ expr */
{
- yymsp[-6].minor.yy322 = sqlite3ExprListAppendVector(pParse, yymsp[-6].minor.yy322, yymsp[-3].minor.yy254, yymsp[0].minor.yy528);
+ yymsp[-6].minor.yy14 = sqlite3ExprListAppendVector(pParse, yymsp[-6].minor.yy14, yymsp[-3].minor.yy132, yymsp[0].minor.yy454);
}
break;
- case 160: /* setlist ::= nm EQ expr */
+ case 162: /* setlist ::= nm EQ expr */
{
- yylhsminor.yy322 = sqlite3ExprListAppend(pParse, 0, yymsp[0].minor.yy528);
- sqlite3ExprListSetName(pParse, yylhsminor.yy322, &yymsp[-2].minor.yy0, 1);
+ yylhsminor.yy14 = sqlite3ExprListAppend(pParse, 0, yymsp[0].minor.yy454);
+ sqlite3ExprListSetName(pParse, yylhsminor.yy14, &yymsp[-2].minor.yy0, 1);
}
- yymsp[-2].minor.yy322 = yylhsminor.yy322;
+ yymsp[-2].minor.yy14 = yylhsminor.yy14;
break;
- case 161: /* setlist ::= LP idlist RP EQ expr */
+ case 163: /* setlist ::= LP idlist RP EQ expr */
{
- yymsp[-4].minor.yy322 = sqlite3ExprListAppendVector(pParse, 0, yymsp[-3].minor.yy254, yymsp[0].minor.yy528);
+ yymsp[-4].minor.yy14 = sqlite3ExprListAppendVector(pParse, 0, yymsp[-3].minor.yy132, yymsp[0].minor.yy454);
}
break;
- case 162: /* cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert */
+ case 164: /* cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert */
{
- sqlite3Insert(pParse, yymsp[-3].minor.yy131, yymsp[-1].minor.yy47, yymsp[-2].minor.yy254, yymsp[-5].minor.yy394, yymsp[0].minor.yy444);
+ sqlite3Insert(pParse, yymsp[-3].minor.yy203, yymsp[-1].minor.yy555, yymsp[-2].minor.yy132, yymsp[-5].minor.yy144, yymsp[0].minor.yy122);
}
break;
- case 163: /* cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES returning */
+ case 165: /* cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES returning */
{
- sqlite3Insert(pParse, yymsp[-4].minor.yy131, 0, yymsp[-3].minor.yy254, yymsp[-6].minor.yy394, 0);
+ sqlite3Insert(pParse, yymsp[-4].minor.yy203, 0, yymsp[-3].minor.yy132, yymsp[-6].minor.yy144, 0);
}
break;
- case 164: /* upsert ::= */
-{ yymsp[1].minor.yy444 = 0; }
+ case 166: /* upsert ::= */
+{ yymsp[1].minor.yy122 = 0; }
break;
- case 165: /* upsert ::= RETURNING selcollist */
-{ yymsp[-1].minor.yy444 = 0; sqlite3AddReturning(pParse,yymsp[0].minor.yy322); }
+ case 167: /* upsert ::= RETURNING selcollist */
+{ yymsp[-1].minor.yy122 = 0; sqlite3AddReturning(pParse,yymsp[0].minor.yy14); }
break;
- case 166: /* upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt upsert */
-{ yymsp[-11].minor.yy444 = sqlite3UpsertNew(pParse->db,yymsp[-8].minor.yy322,yymsp[-6].minor.yy528,yymsp[-2].minor.yy322,yymsp[-1].minor.yy528,yymsp[0].minor.yy444);}
+ case 168: /* upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt upsert */
+{ yymsp[-11].minor.yy122 = sqlite3UpsertNew(pParse->db,yymsp[-8].minor.yy14,yymsp[-6].minor.yy454,yymsp[-2].minor.yy14,yymsp[-1].minor.yy454,yymsp[0].minor.yy122);}
break;
- case 167: /* upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING upsert */
-{ yymsp[-8].minor.yy444 = sqlite3UpsertNew(pParse->db,yymsp[-5].minor.yy322,yymsp[-3].minor.yy528,0,0,yymsp[0].minor.yy444); }
+ case 169: /* upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING upsert */
+{ yymsp[-8].minor.yy122 = sqlite3UpsertNew(pParse->db,yymsp[-5].minor.yy14,yymsp[-3].minor.yy454,0,0,yymsp[0].minor.yy122); }
break;
- case 168: /* upsert ::= ON CONFLICT DO NOTHING returning */
-{ yymsp[-4].minor.yy444 = sqlite3UpsertNew(pParse->db,0,0,0,0,0); }
+ case 170: /* upsert ::= ON CONFLICT DO NOTHING returning */
+{ yymsp[-4].minor.yy122 = sqlite3UpsertNew(pParse->db,0,0,0,0,0); }
break;
- case 169: /* upsert ::= ON CONFLICT DO UPDATE SET setlist where_opt returning */
-{ yymsp[-7].minor.yy444 = sqlite3UpsertNew(pParse->db,0,0,yymsp[-2].minor.yy322,yymsp[-1].minor.yy528,0);}
+ case 171: /* upsert ::= ON CONFLICT DO UPDATE SET setlist where_opt returning */
+{ yymsp[-7].minor.yy122 = sqlite3UpsertNew(pParse->db,0,0,yymsp[-2].minor.yy14,yymsp[-1].minor.yy454,0);}
break;
- case 170: /* returning ::= RETURNING selcollist */
-{sqlite3AddReturning(pParse,yymsp[0].minor.yy322);}
+ case 172: /* returning ::= RETURNING selcollist */
+{sqlite3AddReturning(pParse,yymsp[0].minor.yy14);}
break;
- case 173: /* idlist_opt ::= */
-{yymsp[1].minor.yy254 = 0;}
+ case 175: /* idlist_opt ::= */
+{yymsp[1].minor.yy132 = 0;}
break;
- case 174: /* idlist_opt ::= LP idlist RP */
-{yymsp[-2].minor.yy254 = yymsp[-1].minor.yy254;}
+ case 176: /* idlist_opt ::= LP idlist RP */
+{yymsp[-2].minor.yy132 = yymsp[-1].minor.yy132;}
break;
- case 175: /* idlist ::= idlist COMMA nm */
-{yymsp[-2].minor.yy254 = sqlite3IdListAppend(pParse,yymsp[-2].minor.yy254,&yymsp[0].minor.yy0);}
+ case 177: /* idlist ::= idlist COMMA nm */
+{yymsp[-2].minor.yy132 = sqlite3IdListAppend(pParse,yymsp[-2].minor.yy132,&yymsp[0].minor.yy0);}
break;
- case 176: /* idlist ::= nm */
-{yymsp[0].minor.yy254 = sqlite3IdListAppend(pParse,0,&yymsp[0].minor.yy0); /*A-overwrites-Y*/}
+ case 178: /* idlist ::= nm */
+{yymsp[0].minor.yy132 = sqlite3IdListAppend(pParse,0,&yymsp[0].minor.yy0); /*A-overwrites-Y*/}
break;
- case 177: /* expr ::= LP expr RP */
-{yymsp[-2].minor.yy528 = yymsp[-1].minor.yy528;}
+ case 179: /* expr ::= LP expr RP */
+{yymsp[-2].minor.yy454 = yymsp[-1].minor.yy454;}
break;
- case 178: /* expr ::= ID|INDEXED|JOIN_KW */
-{yymsp[0].minor.yy528=tokenExpr(pParse,TK_ID,yymsp[0].minor.yy0); /*A-overwrites-X*/}
+ case 180: /* expr ::= ID|INDEXED|JOIN_KW */
+{yymsp[0].minor.yy454=tokenExpr(pParse,TK_ID,yymsp[0].minor.yy0); /*A-overwrites-X*/}
break;
- case 179: /* expr ::= nm DOT nm */
+ case 181: /* expr ::= nm DOT nm */
{
Expr *temp1 = tokenExpr(pParse,TK_ID,yymsp[-2].minor.yy0);
Expr *temp2 = tokenExpr(pParse,TK_ID,yymsp[0].minor.yy0);
- yylhsminor.yy528 = sqlite3PExpr(pParse, TK_DOT, temp1, temp2);
+ yylhsminor.yy454 = sqlite3PExpr(pParse, TK_DOT, temp1, temp2);
}
- yymsp[-2].minor.yy528 = yylhsminor.yy528;
+ yymsp[-2].minor.yy454 = yylhsminor.yy454;
break;
- case 180: /* expr ::= nm DOT nm DOT nm */
+ case 182: /* expr ::= nm DOT nm DOT nm */
{
Expr *temp1 = tokenExpr(pParse,TK_ID,yymsp[-4].minor.yy0);
Expr *temp2 = tokenExpr(pParse,TK_ID,yymsp[-2].minor.yy0);
@@ -175449,27 +176848,27 @@ static YYACTIONTYPE yy_reduce(
if( IN_RENAME_OBJECT ){
sqlite3RenameTokenRemap(pParse, 0, temp1);
}
- yylhsminor.yy528 = sqlite3PExpr(pParse, TK_DOT, temp1, temp4);
+ yylhsminor.yy454 = sqlite3PExpr(pParse, TK_DOT, temp1, temp4);
}
- yymsp[-4].minor.yy528 = yylhsminor.yy528;
+ yymsp[-4].minor.yy454 = yylhsminor.yy454;
break;
- case 181: /* term ::= NULL|FLOAT|BLOB */
- case 182: /* term ::= STRING */ yytestcase(yyruleno==182);
-{yymsp[0].minor.yy528=tokenExpr(pParse,yymsp[0].major,yymsp[0].minor.yy0); /*A-overwrites-X*/}
+ case 183: /* term ::= NULL|FLOAT|BLOB */
+ case 184: /* term ::= STRING */ yytestcase(yyruleno==184);
+{yymsp[0].minor.yy454=tokenExpr(pParse,yymsp[0].major,yymsp[0].minor.yy0); /*A-overwrites-X*/}
break;
- case 183: /* term ::= INTEGER */
+ case 185: /* term ::= INTEGER */
{
- yylhsminor.yy528 = sqlite3ExprAlloc(pParse->db, TK_INTEGER, &yymsp[0].minor.yy0, 1);
- if( yylhsminor.yy528 ) yylhsminor.yy528->w.iOfst = (int)(yymsp[0].minor.yy0.z - pParse->zTail);
+ yylhsminor.yy454 = sqlite3ExprAlloc(pParse->db, TK_INTEGER, &yymsp[0].minor.yy0, 1);
+ if( yylhsminor.yy454 ) yylhsminor.yy454->w.iOfst = (int)(yymsp[0].minor.yy0.z - pParse->zTail);
}
- yymsp[0].minor.yy528 = yylhsminor.yy528;
+ yymsp[0].minor.yy454 = yylhsminor.yy454;
break;
- case 184: /* expr ::= VARIABLE */
+ case 186: /* expr ::= VARIABLE */
{
if( !(yymsp[0].minor.yy0.z[0]=='#' && sqlite3Isdigit(yymsp[0].minor.yy0.z[1])) ){
u32 n = yymsp[0].minor.yy0.n;
- yymsp[0].minor.yy528 = tokenExpr(pParse, TK_VARIABLE, yymsp[0].minor.yy0);
- sqlite3ExprAssignVarNumber(pParse, yymsp[0].minor.yy528, n);
+ yymsp[0].minor.yy454 = tokenExpr(pParse, TK_VARIABLE, yymsp[0].minor.yy0);
+ sqlite3ExprAssignVarNumber(pParse, yymsp[0].minor.yy454, n);
}else{
/* When doing a nested parse, one can include terms in an expression
** that look like this: #1 #2 ... These terms refer to registers
@@ -175478,194 +176877,203 @@ static YYACTIONTYPE yy_reduce(
assert( t.n>=2 );
if( pParse->nested==0 ){
sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &t);
- yymsp[0].minor.yy528 = 0;
+ yymsp[0].minor.yy454 = 0;
}else{
- yymsp[0].minor.yy528 = sqlite3PExpr(pParse, TK_REGISTER, 0, 0);
- if( yymsp[0].minor.yy528 ) sqlite3GetInt32(&t.z[1], &yymsp[0].minor.yy528->iTable);
+ yymsp[0].minor.yy454 = sqlite3PExpr(pParse, TK_REGISTER, 0, 0);
+ if( yymsp[0].minor.yy454 ) sqlite3GetInt32(&t.z[1], &yymsp[0].minor.yy454->iTable);
}
}
}
break;
- case 185: /* expr ::= expr COLLATE ID|STRING */
+ case 187: /* expr ::= expr COLLATE ID|STRING */
{
- yymsp[-2].minor.yy528 = sqlite3ExprAddCollateToken(pParse, yymsp[-2].minor.yy528, &yymsp[0].minor.yy0, 1);
+ yymsp[-2].minor.yy454 = sqlite3ExprAddCollateToken(pParse, yymsp[-2].minor.yy454, &yymsp[0].minor.yy0, 1);
}
break;
- case 186: /* expr ::= CAST LP expr AS typetoken RP */
+ case 188: /* expr ::= CAST LP expr AS typetoken RP */
{
- yymsp[-5].minor.yy528 = sqlite3ExprAlloc(pParse->db, TK_CAST, &yymsp[-1].minor.yy0, 1);
- sqlite3ExprAttachSubtrees(pParse->db, yymsp[-5].minor.yy528, yymsp[-3].minor.yy528, 0);
+ yymsp[-5].minor.yy454 = sqlite3ExprAlloc(pParse->db, TK_CAST, &yymsp[-1].minor.yy0, 1);
+ sqlite3ExprAttachSubtrees(pParse->db, yymsp[-5].minor.yy454, yymsp[-3].minor.yy454, 0);
}
break;
- case 187: /* expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP */
+ case 189: /* expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP */
{
- yylhsminor.yy528 = sqlite3ExprFunction(pParse, yymsp[-1].minor.yy322, &yymsp[-4].minor.yy0, yymsp[-2].minor.yy394);
+ yylhsminor.yy454 = sqlite3ExprFunction(pParse, yymsp[-1].minor.yy14, &yymsp[-4].minor.yy0, yymsp[-2].minor.yy144);
}
- yymsp[-4].minor.yy528 = yylhsminor.yy528;
+ yymsp[-4].minor.yy454 = yylhsminor.yy454;
break;
- case 188: /* expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP */
+ case 190: /* expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP */
{
- yylhsminor.yy528 = sqlite3ExprFunction(pParse, yymsp[-4].minor.yy322, &yymsp[-7].minor.yy0, yymsp[-5].minor.yy394);
- sqlite3ExprAddFunctionOrderBy(pParse, yylhsminor.yy528, yymsp[-1].minor.yy322);
+ yylhsminor.yy454 = sqlite3ExprFunction(pParse, yymsp[-4].minor.yy14, &yymsp[-7].minor.yy0, yymsp[-5].minor.yy144);
+ sqlite3ExprAddFunctionOrderBy(pParse, yylhsminor.yy454, yymsp[-1].minor.yy14);
}
- yymsp[-7].minor.yy528 = yylhsminor.yy528;
+ yymsp[-7].minor.yy454 = yylhsminor.yy454;
break;
- case 189: /* expr ::= ID|INDEXED|JOIN_KW LP STAR RP */
+ case 191: /* expr ::= ID|INDEXED|JOIN_KW LP STAR RP */
{
- yylhsminor.yy528 = sqlite3ExprFunction(pParse, 0, &yymsp[-3].minor.yy0, 0);
+ yylhsminor.yy454 = sqlite3ExprFunction(pParse, 0, &yymsp[-3].minor.yy0, 0);
}
- yymsp[-3].minor.yy528 = yylhsminor.yy528;
+ yymsp[-3].minor.yy454 = yylhsminor.yy454;
break;
- case 190: /* expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP filter_over */
+ case 192: /* expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP filter_over */
{
- yylhsminor.yy528 = sqlite3ExprFunction(pParse, yymsp[-2].minor.yy322, &yymsp[-5].minor.yy0, yymsp[-3].minor.yy394);
- sqlite3WindowAttach(pParse, yylhsminor.yy528, yymsp[0].minor.yy41);
+ yylhsminor.yy454 = sqlite3ExprFunction(pParse, yymsp[-2].minor.yy14, &yymsp[-5].minor.yy0, yymsp[-3].minor.yy144);
+ sqlite3WindowAttach(pParse, yylhsminor.yy454, yymsp[0].minor.yy211);
}
- yymsp[-5].minor.yy528 = yylhsminor.yy528;
+ yymsp[-5].minor.yy454 = yylhsminor.yy454;
break;
- case 191: /* expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP filter_over */
+ case 193: /* expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP filter_over */
{
- yylhsminor.yy528 = sqlite3ExprFunction(pParse, yymsp[-5].minor.yy322, &yymsp[-8].minor.yy0, yymsp[-6].minor.yy394);
- sqlite3WindowAttach(pParse, yylhsminor.yy528, yymsp[0].minor.yy41);
- sqlite3ExprAddFunctionOrderBy(pParse, yylhsminor.yy528, yymsp[-2].minor.yy322);
+ yylhsminor.yy454 = sqlite3ExprFunction(pParse, yymsp[-5].minor.yy14, &yymsp[-8].minor.yy0, yymsp[-6].minor.yy144);
+ sqlite3WindowAttach(pParse, yylhsminor.yy454, yymsp[0].minor.yy211);
+ sqlite3ExprAddFunctionOrderBy(pParse, yylhsminor.yy454, yymsp[-2].minor.yy14);
}
- yymsp[-8].minor.yy528 = yylhsminor.yy528;
+ yymsp[-8].minor.yy454 = yylhsminor.yy454;
break;
- case 192: /* expr ::= ID|INDEXED|JOIN_KW LP STAR RP filter_over */
+ case 194: /* expr ::= ID|INDEXED|JOIN_KW LP STAR RP filter_over */
{
- yylhsminor.yy528 = sqlite3ExprFunction(pParse, 0, &yymsp[-4].minor.yy0, 0);
- sqlite3WindowAttach(pParse, yylhsminor.yy528, yymsp[0].minor.yy41);
+ yylhsminor.yy454 = sqlite3ExprFunction(pParse, 0, &yymsp[-4].minor.yy0, 0);
+ sqlite3WindowAttach(pParse, yylhsminor.yy454, yymsp[0].minor.yy211);
}
- yymsp[-4].minor.yy528 = yylhsminor.yy528;
+ yymsp[-4].minor.yy454 = yylhsminor.yy454;
break;
- case 193: /* term ::= CTIME_KW */
+ case 195: /* term ::= CTIME_KW */
{
- yylhsminor.yy528 = sqlite3ExprFunction(pParse, 0, &yymsp[0].minor.yy0, 0);
+ yylhsminor.yy454 = sqlite3ExprFunction(pParse, 0, &yymsp[0].minor.yy0, 0);
}
- yymsp[0].minor.yy528 = yylhsminor.yy528;
+ yymsp[0].minor.yy454 = yylhsminor.yy454;
break;
- case 194: /* expr ::= LP nexprlist COMMA expr RP */
+ case 196: /* expr ::= LP nexprlist COMMA expr RP */
{
- ExprList *pList = sqlite3ExprListAppend(pParse, yymsp[-3].minor.yy322, yymsp[-1].minor.yy528);
- yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_VECTOR, 0, 0);
- if( yymsp[-4].minor.yy528 ){
- yymsp[-4].minor.yy528->x.pList = pList;
+ ExprList *pList = sqlite3ExprListAppend(pParse, yymsp[-3].minor.yy14, yymsp[-1].minor.yy454);
+ yymsp[-4].minor.yy454 = sqlite3PExpr(pParse, TK_VECTOR, 0, 0);
+ if( yymsp[-4].minor.yy454 ){
+ yymsp[-4].minor.yy454->x.pList = pList;
if( ALWAYS(pList->nExpr) ){
- yymsp[-4].minor.yy528->flags |= pList->a[0].pExpr->flags & EP_Propagate;
+ yymsp[-4].minor.yy454->flags |= pList->a[0].pExpr->flags & EP_Propagate;
}
}else{
sqlite3ExprListDelete(pParse->db, pList);
}
}
break;
- case 195: /* expr ::= expr AND expr */
-{yymsp[-2].minor.yy528=sqlite3ExprAnd(pParse,yymsp[-2].minor.yy528,yymsp[0].minor.yy528);}
+ case 197: /* expr ::= expr AND expr */
+{yymsp[-2].minor.yy454=sqlite3ExprAnd(pParse,yymsp[-2].minor.yy454,yymsp[0].minor.yy454);}
break;
- case 196: /* expr ::= expr OR expr */
- case 197: /* expr ::= expr LT|GT|GE|LE expr */ yytestcase(yyruleno==197);
- case 198: /* expr ::= expr EQ|NE expr */ yytestcase(yyruleno==198);
- case 199: /* expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ yytestcase(yyruleno==199);
- case 200: /* expr ::= expr PLUS|MINUS expr */ yytestcase(yyruleno==200);
- case 201: /* expr ::= expr STAR|SLASH|REM expr */ yytestcase(yyruleno==201);
- case 202: /* expr ::= expr CONCAT expr */ yytestcase(yyruleno==202);
-{yymsp[-2].minor.yy528=sqlite3PExpr(pParse,yymsp[-1].major,yymsp[-2].minor.yy528,yymsp[0].minor.yy528);}
+ case 198: /* expr ::= expr OR expr */
+ case 199: /* expr ::= expr LT|GT|GE|LE expr */ yytestcase(yyruleno==199);
+ case 200: /* expr ::= expr EQ|NE expr */ yytestcase(yyruleno==200);
+ case 201: /* expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ yytestcase(yyruleno==201);
+ case 202: /* expr ::= expr PLUS|MINUS expr */ yytestcase(yyruleno==202);
+ case 203: /* expr ::= expr STAR|SLASH|REM expr */ yytestcase(yyruleno==203);
+ case 204: /* expr ::= expr CONCAT expr */ yytestcase(yyruleno==204);
+{yymsp[-2].minor.yy454=sqlite3PExpr(pParse,yymsp[-1].major,yymsp[-2].minor.yy454,yymsp[0].minor.yy454);}
break;
- case 203: /* likeop ::= NOT LIKE_KW|MATCH */
+ case 205: /* likeop ::= NOT LIKE_KW|MATCH */
{yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.n|=0x80000000; /*yymsp[-1].minor.yy0-overwrite-yymsp[0].minor.yy0*/}
break;
- case 204: /* expr ::= expr likeop expr */
+ case 206: /* expr ::= expr likeop expr */
{
ExprList *pList;
int bNot = yymsp[-1].minor.yy0.n & 0x80000000;
yymsp[-1].minor.yy0.n &= 0x7fffffff;
- pList = sqlite3ExprListAppend(pParse,0, yymsp[0].minor.yy528);
- pList = sqlite3ExprListAppend(pParse,pList, yymsp[-2].minor.yy528);
- yymsp[-2].minor.yy528 = sqlite3ExprFunction(pParse, pList, &yymsp[-1].minor.yy0, 0);
- if( bNot ) yymsp[-2].minor.yy528 = sqlite3PExpr(pParse, TK_NOT, yymsp[-2].minor.yy528, 0);
- if( yymsp[-2].minor.yy528 ) yymsp[-2].minor.yy528->flags |= EP_InfixFunc;
+ pList = sqlite3ExprListAppend(pParse,0, yymsp[0].minor.yy454);
+ pList = sqlite3ExprListAppend(pParse,pList, yymsp[-2].minor.yy454);
+ yymsp[-2].minor.yy454 = sqlite3ExprFunction(pParse, pList, &yymsp[-1].minor.yy0, 0);
+ if( bNot ) yymsp[-2].minor.yy454 = sqlite3PExpr(pParse, TK_NOT, yymsp[-2].minor.yy454, 0);
+ if( yymsp[-2].minor.yy454 ) yymsp[-2].minor.yy454->flags |= EP_InfixFunc;
}
break;
- case 205: /* expr ::= expr likeop expr ESCAPE expr */
+ case 207: /* expr ::= expr likeop expr ESCAPE expr */
{
ExprList *pList;
int bNot = yymsp[-3].minor.yy0.n & 0x80000000;
yymsp[-3].minor.yy0.n &= 0x7fffffff;
- pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy528);
- pList = sqlite3ExprListAppend(pParse,pList, yymsp[-4].minor.yy528);
- pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy528);
- yymsp[-4].minor.yy528 = sqlite3ExprFunction(pParse, pList, &yymsp[-3].minor.yy0, 0);
- if( bNot ) yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy528, 0);
- if( yymsp[-4].minor.yy528 ) yymsp[-4].minor.yy528->flags |= EP_InfixFunc;
+ pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy454);
+ pList = sqlite3ExprListAppend(pParse,pList, yymsp[-4].minor.yy454);
+ pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy454);
+ yymsp[-4].minor.yy454 = sqlite3ExprFunction(pParse, pList, &yymsp[-3].minor.yy0, 0);
+ if( bNot ) yymsp[-4].minor.yy454 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy454, 0);
+ if( yymsp[-4].minor.yy454 ) yymsp[-4].minor.yy454->flags |= EP_InfixFunc;
}
break;
- case 206: /* expr ::= expr ISNULL|NOTNULL */
-{yymsp[-1].minor.yy528 = sqlite3PExpr(pParse,yymsp[0].major,yymsp[-1].minor.yy528,0);}
+ case 208: /* expr ::= expr ISNULL|NOTNULL */
+{yymsp[-1].minor.yy454 = sqlite3PExpr(pParse,yymsp[0].major,yymsp[-1].minor.yy454,0);}
break;
- case 207: /* expr ::= expr NOT NULL */
-{yymsp[-2].minor.yy528 = sqlite3PExpr(pParse,TK_NOTNULL,yymsp[-2].minor.yy528,0);}
+ case 209: /* expr ::= expr NOT NULL */
+{yymsp[-2].minor.yy454 = sqlite3PExpr(pParse,TK_NOTNULL,yymsp[-2].minor.yy454,0);}
break;
- case 208: /* expr ::= expr IS expr */
+ case 210: /* expr ::= expr IS expr */
{
- yymsp[-2].minor.yy528 = sqlite3PExpr(pParse,TK_IS,yymsp[-2].minor.yy528,yymsp[0].minor.yy528);
- binaryToUnaryIfNull(pParse, yymsp[0].minor.yy528, yymsp[-2].minor.yy528, TK_ISNULL);
+ yymsp[-2].minor.yy454 = sqlite3PExpr(pParse,TK_IS,yymsp[-2].minor.yy454,yymsp[0].minor.yy454);
+ binaryToUnaryIfNull(pParse, yymsp[0].minor.yy454, yymsp[-2].minor.yy454, TK_ISNULL);
}
break;
- case 209: /* expr ::= expr IS NOT expr */
+ case 211: /* expr ::= expr IS NOT expr */
{
- yymsp[-3].minor.yy528 = sqlite3PExpr(pParse,TK_ISNOT,yymsp[-3].minor.yy528,yymsp[0].minor.yy528);
- binaryToUnaryIfNull(pParse, yymsp[0].minor.yy528, yymsp[-3].minor.yy528, TK_NOTNULL);
+ yymsp[-3].minor.yy454 = sqlite3PExpr(pParse,TK_ISNOT,yymsp[-3].minor.yy454,yymsp[0].minor.yy454);
+ binaryToUnaryIfNull(pParse, yymsp[0].minor.yy454, yymsp[-3].minor.yy454, TK_NOTNULL);
}
break;
- case 210: /* expr ::= expr IS NOT DISTINCT FROM expr */
+ case 212: /* expr ::= expr IS NOT DISTINCT FROM expr */
{
- yymsp[-5].minor.yy528 = sqlite3PExpr(pParse,TK_IS,yymsp[-5].minor.yy528,yymsp[0].minor.yy528);
- binaryToUnaryIfNull(pParse, yymsp[0].minor.yy528, yymsp[-5].minor.yy528, TK_ISNULL);
+ yymsp[-5].minor.yy454 = sqlite3PExpr(pParse,TK_IS,yymsp[-5].minor.yy454,yymsp[0].minor.yy454);
+ binaryToUnaryIfNull(pParse, yymsp[0].minor.yy454, yymsp[-5].minor.yy454, TK_ISNULL);
}
break;
- case 211: /* expr ::= expr IS DISTINCT FROM expr */
+ case 213: /* expr ::= expr IS DISTINCT FROM expr */
{
- yymsp[-4].minor.yy528 = sqlite3PExpr(pParse,TK_ISNOT,yymsp[-4].minor.yy528,yymsp[0].minor.yy528);
- binaryToUnaryIfNull(pParse, yymsp[0].minor.yy528, yymsp[-4].minor.yy528, TK_NOTNULL);
+ yymsp[-4].minor.yy454 = sqlite3PExpr(pParse,TK_ISNOT,yymsp[-4].minor.yy454,yymsp[0].minor.yy454);
+ binaryToUnaryIfNull(pParse, yymsp[0].minor.yy454, yymsp[-4].minor.yy454, TK_NOTNULL);
}
break;
- case 212: /* expr ::= NOT expr */
- case 213: /* expr ::= BITNOT expr */ yytestcase(yyruleno==213);
-{yymsp[-1].minor.yy528 = sqlite3PExpr(pParse, yymsp[-1].major, yymsp[0].minor.yy528, 0);/*A-overwrites-B*/}
+ case 214: /* expr ::= NOT expr */
+ case 215: /* expr ::= BITNOT expr */ yytestcase(yyruleno==215);
+{yymsp[-1].minor.yy454 = sqlite3PExpr(pParse, yymsp[-1].major, yymsp[0].minor.yy454, 0);/*A-overwrites-B*/}
break;
- case 214: /* expr ::= PLUS|MINUS expr */
+ case 216: /* expr ::= PLUS|MINUS expr */
{
- yymsp[-1].minor.yy528 = sqlite3PExpr(pParse, yymsp[-1].major==TK_PLUS ? TK_UPLUS : TK_UMINUS, yymsp[0].minor.yy528, 0);
- /*A-overwrites-B*/
+ Expr *p = yymsp[0].minor.yy454;
+ u8 op = yymsp[-1].major + (TK_UPLUS-TK_PLUS);
+ assert( TK_UPLUS>TK_PLUS );
+ assert( TK_UMINUS == TK_MINUS + (TK_UPLUS - TK_PLUS) );
+ if( p && p->op==TK_UPLUS ){
+ p->op = op;
+ yymsp[-1].minor.yy454 = p;
+ }else{
+ yymsp[-1].minor.yy454 = sqlite3PExpr(pParse, op, p, 0);
+ /*A-overwrites-B*/
+ }
}
break;
- case 215: /* expr ::= expr PTR expr */
+ case 217: /* expr ::= expr PTR expr */
{
- ExprList *pList = sqlite3ExprListAppend(pParse, 0, yymsp[-2].minor.yy528);
- pList = sqlite3ExprListAppend(pParse, pList, yymsp[0].minor.yy528);
- yylhsminor.yy528 = sqlite3ExprFunction(pParse, pList, &yymsp[-1].minor.yy0, 0);
+ ExprList *pList = sqlite3ExprListAppend(pParse, 0, yymsp[-2].minor.yy454);
+ pList = sqlite3ExprListAppend(pParse, pList, yymsp[0].minor.yy454);
+ yylhsminor.yy454 = sqlite3ExprFunction(pParse, pList, &yymsp[-1].minor.yy0, 0);
}
- yymsp[-2].minor.yy528 = yylhsminor.yy528;
+ yymsp[-2].minor.yy454 = yylhsminor.yy454;
break;
- case 216: /* between_op ::= BETWEEN */
- case 219: /* in_op ::= IN */ yytestcase(yyruleno==219);
-{yymsp[0].minor.yy394 = 0;}
+ case 218: /* between_op ::= BETWEEN */
+ case 221: /* in_op ::= IN */ yytestcase(yyruleno==221);
+{yymsp[0].minor.yy144 = 0;}
break;
- case 218: /* expr ::= expr between_op expr AND expr */
+ case 220: /* expr ::= expr between_op expr AND expr */
{
- ExprList *pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy528);
- pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy528);
- yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_BETWEEN, yymsp[-4].minor.yy528, 0);
- if( yymsp[-4].minor.yy528 ){
- yymsp[-4].minor.yy528->x.pList = pList;
+ ExprList *pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy454);
+ pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy454);
+ yymsp[-4].minor.yy454 = sqlite3PExpr(pParse, TK_BETWEEN, yymsp[-4].minor.yy454, 0);
+ if( yymsp[-4].minor.yy454 ){
+ yymsp[-4].minor.yy454->x.pList = pList;
}else{
sqlite3ExprListDelete(pParse->db, pList);
}
- if( yymsp[-3].minor.yy394 ) yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy528, 0);
+ if( yymsp[-3].minor.yy144 ) yymsp[-4].minor.yy454 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy454, 0);
}
break;
- case 221: /* expr ::= expr in_op LP exprlist RP */
+ case 223: /* expr ::= expr in_op LP exprlist RP */
{
- if( yymsp[-1].minor.yy322==0 ){
+ if( yymsp[-1].minor.yy14==0 ){
/* Expressions of the form
**
** expr1 IN ()
@@ -175674,208 +177082,208 @@ static YYACTIONTYPE yy_reduce(
** simplify to constants 0 (false) and 1 (true), respectively,
** regardless of the value of expr1.
*/
- sqlite3ExprUnmapAndDelete(pParse, yymsp[-4].minor.yy528);
- yymsp[-4].minor.yy528 = sqlite3Expr(pParse->db, TK_STRING, yymsp[-3].minor.yy394 ? "true" : "false");
- if( yymsp[-4].minor.yy528 ) sqlite3ExprIdToTrueFalse(yymsp[-4].minor.yy528);
- }else{
- Expr *pRHS = yymsp[-1].minor.yy322->a[0].pExpr;
- if( yymsp[-1].minor.yy322->nExpr==1 && sqlite3ExprIsConstant(pRHS) && yymsp[-4].minor.yy528->op!=TK_VECTOR ){
- yymsp[-1].minor.yy322->a[0].pExpr = 0;
- sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy322);
+ sqlite3ExprUnmapAndDelete(pParse, yymsp[-4].minor.yy454);
+ yymsp[-4].minor.yy454 = sqlite3Expr(pParse->db, TK_STRING, yymsp[-3].minor.yy144 ? "true" : "false");
+ if( yymsp[-4].minor.yy454 ) sqlite3ExprIdToTrueFalse(yymsp[-4].minor.yy454);
+ }else{
+ Expr *pRHS = yymsp[-1].minor.yy14->a[0].pExpr;
+ if( yymsp[-1].minor.yy14->nExpr==1 && sqlite3ExprIsConstant(pParse,pRHS) && yymsp[-4].minor.yy454->op!=TK_VECTOR ){
+ yymsp[-1].minor.yy14->a[0].pExpr = 0;
+ sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy14);
pRHS = sqlite3PExpr(pParse, TK_UPLUS, pRHS, 0);
- yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_EQ, yymsp[-4].minor.yy528, pRHS);
- }else if( yymsp[-1].minor.yy322->nExpr==1 && pRHS->op==TK_SELECT ){
- yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy528, 0);
- sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy528, pRHS->x.pSelect);
+ yymsp[-4].minor.yy454 = sqlite3PExpr(pParse, TK_EQ, yymsp[-4].minor.yy454, pRHS);
+ }else if( yymsp[-1].minor.yy14->nExpr==1 && pRHS->op==TK_SELECT ){
+ yymsp[-4].minor.yy454 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy454, 0);
+ sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy454, pRHS->x.pSelect);
pRHS->x.pSelect = 0;
- sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy322);
- }else{
- yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy528, 0);
- if( yymsp[-4].minor.yy528==0 ){
- sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy322);
- }else if( yymsp[-4].minor.yy528->pLeft->op==TK_VECTOR ){
- int nExpr = yymsp[-4].minor.yy528->pLeft->x.pList->nExpr;
- Select *pSelectRHS = sqlite3ExprListToValues(pParse, nExpr, yymsp[-1].minor.yy322);
+ sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy14);
+ }else{
+ yymsp[-4].minor.yy454 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy454, 0);
+ if( yymsp[-4].minor.yy454==0 ){
+ sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy14);
+ }else if( yymsp[-4].minor.yy454->pLeft->op==TK_VECTOR ){
+ int nExpr = yymsp[-4].minor.yy454->pLeft->x.pList->nExpr;
+ Select *pSelectRHS = sqlite3ExprListToValues(pParse, nExpr, yymsp[-1].minor.yy14);
if( pSelectRHS ){
parserDoubleLinkSelect(pParse, pSelectRHS);
- sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy528, pSelectRHS);
+ sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy454, pSelectRHS);
}
}else{
- yymsp[-4].minor.yy528->x.pList = yymsp[-1].minor.yy322;
- sqlite3ExprSetHeightAndFlags(pParse, yymsp[-4].minor.yy528);
+ yymsp[-4].minor.yy454->x.pList = yymsp[-1].minor.yy14;
+ sqlite3ExprSetHeightAndFlags(pParse, yymsp[-4].minor.yy454);
}
}
- if( yymsp[-3].minor.yy394 ) yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy528, 0);
+ if( yymsp[-3].minor.yy144 ) yymsp[-4].minor.yy454 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy454, 0);
}
}
break;
- case 222: /* expr ::= LP select RP */
+ case 224: /* expr ::= LP select RP */
{
- yymsp[-2].minor.yy528 = sqlite3PExpr(pParse, TK_SELECT, 0, 0);
- sqlite3PExprAddSelect(pParse, yymsp[-2].minor.yy528, yymsp[-1].minor.yy47);
+ yymsp[-2].minor.yy454 = sqlite3PExpr(pParse, TK_SELECT, 0, 0);
+ sqlite3PExprAddSelect(pParse, yymsp[-2].minor.yy454, yymsp[-1].minor.yy555);
}
break;
- case 223: /* expr ::= expr in_op LP select RP */
+ case 225: /* expr ::= expr in_op LP select RP */
{
- yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy528, 0);
- sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy528, yymsp[-1].minor.yy47);
- if( yymsp[-3].minor.yy394 ) yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy528, 0);
+ yymsp[-4].minor.yy454 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy454, 0);
+ sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy454, yymsp[-1].minor.yy555);
+ if( yymsp[-3].minor.yy144 ) yymsp[-4].minor.yy454 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy454, 0);
}
break;
- case 224: /* expr ::= expr in_op nm dbnm paren_exprlist */
+ case 226: /* expr ::= expr in_op nm dbnm paren_exprlist */
{
SrcList *pSrc = sqlite3SrcListAppend(pParse, 0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0);
Select *pSelect = sqlite3SelectNew(pParse, 0,pSrc,0,0,0,0,0,0);
- if( yymsp[0].minor.yy322 ) sqlite3SrcListFuncArgs(pParse, pSelect ? pSrc : 0, yymsp[0].minor.yy322);
- yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy528, 0);
- sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy528, pSelect);
- if( yymsp[-3].minor.yy394 ) yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy528, 0);
+ if( yymsp[0].minor.yy14 ) sqlite3SrcListFuncArgs(pParse, pSelect ? pSrc : 0, yymsp[0].minor.yy14);
+ yymsp[-4].minor.yy454 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy454, 0);
+ sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy454, pSelect);
+ if( yymsp[-3].minor.yy144 ) yymsp[-4].minor.yy454 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy454, 0);
}
break;
- case 225: /* expr ::= EXISTS LP select RP */
+ case 227: /* expr ::= EXISTS LP select RP */
{
Expr *p;
- p = yymsp[-3].minor.yy528 = sqlite3PExpr(pParse, TK_EXISTS, 0, 0);
- sqlite3PExprAddSelect(pParse, p, yymsp[-1].minor.yy47);
+ p = yymsp[-3].minor.yy454 = sqlite3PExpr(pParse, TK_EXISTS, 0, 0);
+ sqlite3PExprAddSelect(pParse, p, yymsp[-1].minor.yy555);
}
break;
- case 226: /* expr ::= CASE case_operand case_exprlist case_else END */
+ case 228: /* expr ::= CASE case_operand case_exprlist case_else END */
{
- yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_CASE, yymsp[-3].minor.yy528, 0);
- if( yymsp[-4].minor.yy528 ){
- yymsp[-4].minor.yy528->x.pList = yymsp[-1].minor.yy528 ? sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy322,yymsp[-1].minor.yy528) : yymsp[-2].minor.yy322;
- sqlite3ExprSetHeightAndFlags(pParse, yymsp[-4].minor.yy528);
+ yymsp[-4].minor.yy454 = sqlite3PExpr(pParse, TK_CASE, yymsp[-3].minor.yy454, 0);
+ if( yymsp[-4].minor.yy454 ){
+ yymsp[-4].minor.yy454->x.pList = yymsp[-1].minor.yy454 ? sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy14,yymsp[-1].minor.yy454) : yymsp[-2].minor.yy14;
+ sqlite3ExprSetHeightAndFlags(pParse, yymsp[-4].minor.yy454);
}else{
- sqlite3ExprListDelete(pParse->db, yymsp[-2].minor.yy322);
- sqlite3ExprDelete(pParse->db, yymsp[-1].minor.yy528);
+ sqlite3ExprListDelete(pParse->db, yymsp[-2].minor.yy14);
+ sqlite3ExprDelete(pParse->db, yymsp[-1].minor.yy454);
}
}
break;
- case 227: /* case_exprlist ::= case_exprlist WHEN expr THEN expr */
+ case 229: /* case_exprlist ::= case_exprlist WHEN expr THEN expr */
{
- yymsp[-4].minor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy322, yymsp[-2].minor.yy528);
- yymsp[-4].minor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy322, yymsp[0].minor.yy528);
+ yymsp[-4].minor.yy14 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy14, yymsp[-2].minor.yy454);
+ yymsp[-4].minor.yy14 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy14, yymsp[0].minor.yy454);
}
break;
- case 228: /* case_exprlist ::= WHEN expr THEN expr */
+ case 230: /* case_exprlist ::= WHEN expr THEN expr */
{
- yymsp[-3].minor.yy322 = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy528);
- yymsp[-3].minor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy322, yymsp[0].minor.yy528);
+ yymsp[-3].minor.yy14 = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy454);
+ yymsp[-3].minor.yy14 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy14, yymsp[0].minor.yy454);
}
break;
- case 233: /* nexprlist ::= nexprlist COMMA expr */
-{yymsp[-2].minor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy322,yymsp[0].minor.yy528);}
+ case 235: /* nexprlist ::= nexprlist COMMA expr */
+{yymsp[-2].minor.yy14 = sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy14,yymsp[0].minor.yy454);}
break;
- case 234: /* nexprlist ::= expr */
-{yymsp[0].minor.yy322 = sqlite3ExprListAppend(pParse,0,yymsp[0].minor.yy528); /*A-overwrites-Y*/}
+ case 236: /* nexprlist ::= expr */
+{yymsp[0].minor.yy14 = sqlite3ExprListAppend(pParse,0,yymsp[0].minor.yy454); /*A-overwrites-Y*/}
break;
- case 236: /* paren_exprlist ::= LP exprlist RP */
- case 241: /* eidlist_opt ::= LP eidlist RP */ yytestcase(yyruleno==241);
-{yymsp[-2].minor.yy322 = yymsp[-1].minor.yy322;}
+ case 238: /* paren_exprlist ::= LP exprlist RP */
+ case 243: /* eidlist_opt ::= LP eidlist RP */ yytestcase(yyruleno==243);
+{yymsp[-2].minor.yy14 = yymsp[-1].minor.yy14;}
break;
- case 237: /* cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */
+ case 239: /* cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */
{
sqlite3CreateIndex(pParse, &yymsp[-7].minor.yy0, &yymsp[-6].minor.yy0,
- sqlite3SrcListAppend(pParse,0,&yymsp[-4].minor.yy0,0), yymsp[-2].minor.yy322, yymsp[-10].minor.yy394,
- &yymsp[-11].minor.yy0, yymsp[0].minor.yy528, SQLITE_SO_ASC, yymsp[-8].minor.yy394, SQLITE_IDXTYPE_APPDEF);
+ sqlite3SrcListAppend(pParse,0,&yymsp[-4].minor.yy0,0), yymsp[-2].minor.yy14, yymsp[-10].minor.yy144,
+ &yymsp[-11].minor.yy0, yymsp[0].minor.yy454, SQLITE_SO_ASC, yymsp[-8].minor.yy144, SQLITE_IDXTYPE_APPDEF);
if( IN_RENAME_OBJECT && pParse->pNewIndex ){
sqlite3RenameTokenMap(pParse, pParse->pNewIndex->zName, &yymsp[-4].minor.yy0);
}
}
break;
- case 238: /* uniqueflag ::= UNIQUE */
- case 280: /* raisetype ::= ABORT */ yytestcase(yyruleno==280);
-{yymsp[0].minor.yy394 = OE_Abort;}
+ case 240: /* uniqueflag ::= UNIQUE */
+ case 282: /* raisetype ::= ABORT */ yytestcase(yyruleno==282);
+{yymsp[0].minor.yy144 = OE_Abort;}
break;
- case 239: /* uniqueflag ::= */
-{yymsp[1].minor.yy394 = OE_None;}
+ case 241: /* uniqueflag ::= */
+{yymsp[1].minor.yy144 = OE_None;}
break;
- case 242: /* eidlist ::= eidlist COMMA nm collate sortorder */
+ case 244: /* eidlist ::= eidlist COMMA nm collate sortorder */
{
- yymsp[-4].minor.yy322 = parserAddExprIdListTerm(pParse, yymsp[-4].minor.yy322, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy394, yymsp[0].minor.yy394);
+ yymsp[-4].minor.yy14 = parserAddExprIdListTerm(pParse, yymsp[-4].minor.yy14, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy144, yymsp[0].minor.yy144);
}
break;
- case 243: /* eidlist ::= nm collate sortorder */
+ case 245: /* eidlist ::= nm collate sortorder */
{
- yymsp[-2].minor.yy322 = parserAddExprIdListTerm(pParse, 0, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy394, yymsp[0].minor.yy394); /*A-overwrites-Y*/
+ yymsp[-2].minor.yy14 = parserAddExprIdListTerm(pParse, 0, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy144, yymsp[0].minor.yy144); /*A-overwrites-Y*/
}
break;
- case 246: /* cmd ::= DROP INDEX ifexists fullname */
-{sqlite3DropIndex(pParse, yymsp[0].minor.yy131, yymsp[-1].minor.yy394);}
+ case 248: /* cmd ::= DROP INDEX ifexists fullname */
+{sqlite3DropIndex(pParse, yymsp[0].minor.yy203, yymsp[-1].minor.yy144);}
break;
- case 247: /* cmd ::= VACUUM vinto */
-{sqlite3Vacuum(pParse,0,yymsp[0].minor.yy528);}
+ case 249: /* cmd ::= VACUUM vinto */
+{sqlite3Vacuum(pParse,0,yymsp[0].minor.yy454);}
break;
- case 248: /* cmd ::= VACUUM nm vinto */
-{sqlite3Vacuum(pParse,&yymsp[-1].minor.yy0,yymsp[0].minor.yy528);}
+ case 250: /* cmd ::= VACUUM nm vinto */
+{sqlite3Vacuum(pParse,&yymsp[-1].minor.yy0,yymsp[0].minor.yy454);}
break;
- case 251: /* cmd ::= PRAGMA nm dbnm */
+ case 253: /* cmd ::= PRAGMA nm dbnm */
{sqlite3Pragma(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,0,0);}
break;
- case 252: /* cmd ::= PRAGMA nm dbnm EQ nmnum */
+ case 254: /* cmd ::= PRAGMA nm dbnm EQ nmnum */
{sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0,0);}
break;
- case 253: /* cmd ::= PRAGMA nm dbnm LP nmnum RP */
+ case 255: /* cmd ::= PRAGMA nm dbnm LP nmnum RP */
{sqlite3Pragma(pParse,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-1].minor.yy0,0);}
break;
- case 254: /* cmd ::= PRAGMA nm dbnm EQ minus_num */
+ case 256: /* cmd ::= PRAGMA nm dbnm EQ minus_num */
{sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0,1);}
break;
- case 255: /* cmd ::= PRAGMA nm dbnm LP minus_num RP */
+ case 257: /* cmd ::= PRAGMA nm dbnm LP minus_num RP */
{sqlite3Pragma(pParse,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-1].minor.yy0,1);}
break;
- case 258: /* cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */
+ case 260: /* cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */
{
Token all;
all.z = yymsp[-3].minor.yy0.z;
all.n = (int)(yymsp[0].minor.yy0.z - yymsp[-3].minor.yy0.z) + yymsp[0].minor.yy0.n;
- sqlite3FinishTrigger(pParse, yymsp[-1].minor.yy33, &all);
+ sqlite3FinishTrigger(pParse, yymsp[-1].minor.yy427, &all);
}
break;
- case 259: /* trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */
+ case 261: /* trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */
{
- sqlite3BeginTrigger(pParse, &yymsp[-7].minor.yy0, &yymsp[-6].minor.yy0, yymsp[-5].minor.yy394, yymsp[-4].minor.yy180.a, yymsp[-4].minor.yy180.b, yymsp[-2].minor.yy131, yymsp[0].minor.yy528, yymsp[-10].minor.yy394, yymsp[-8].minor.yy394);
+ sqlite3BeginTrigger(pParse, &yymsp[-7].minor.yy0, &yymsp[-6].minor.yy0, yymsp[-5].minor.yy144, yymsp[-4].minor.yy286.a, yymsp[-4].minor.yy286.b, yymsp[-2].minor.yy203, yymsp[0].minor.yy454, yymsp[-10].minor.yy144, yymsp[-8].minor.yy144);
yymsp[-10].minor.yy0 = (yymsp[-6].minor.yy0.n==0?yymsp[-7].minor.yy0:yymsp[-6].minor.yy0); /*A-overwrites-T*/
}
break;
- case 260: /* trigger_time ::= BEFORE|AFTER */
-{ yymsp[0].minor.yy394 = yymsp[0].major; /*A-overwrites-X*/ }
+ case 262: /* trigger_time ::= BEFORE|AFTER */
+{ yymsp[0].minor.yy144 = yymsp[0].major; /*A-overwrites-X*/ }
break;
- case 261: /* trigger_time ::= INSTEAD OF */
-{ yymsp[-1].minor.yy394 = TK_INSTEAD;}
+ case 263: /* trigger_time ::= INSTEAD OF */
+{ yymsp[-1].minor.yy144 = TK_INSTEAD;}
break;
- case 262: /* trigger_time ::= */
-{ yymsp[1].minor.yy394 = TK_BEFORE; }
+ case 264: /* trigger_time ::= */
+{ yymsp[1].minor.yy144 = TK_BEFORE; }
break;
- case 263: /* trigger_event ::= DELETE|INSERT */
- case 264: /* trigger_event ::= UPDATE */ yytestcase(yyruleno==264);
-{yymsp[0].minor.yy180.a = yymsp[0].major; /*A-overwrites-X*/ yymsp[0].minor.yy180.b = 0;}
+ case 265: /* trigger_event ::= DELETE|INSERT */
+ case 266: /* trigger_event ::= UPDATE */ yytestcase(yyruleno==266);
+{yymsp[0].minor.yy286.a = yymsp[0].major; /*A-overwrites-X*/ yymsp[0].minor.yy286.b = 0;}
break;
- case 265: /* trigger_event ::= UPDATE OF idlist */
-{yymsp[-2].minor.yy180.a = TK_UPDATE; yymsp[-2].minor.yy180.b = yymsp[0].minor.yy254;}
+ case 267: /* trigger_event ::= UPDATE OF idlist */
+{yymsp[-2].minor.yy286.a = TK_UPDATE; yymsp[-2].minor.yy286.b = yymsp[0].minor.yy132;}
break;
- case 266: /* when_clause ::= */
- case 285: /* key_opt ::= */ yytestcase(yyruleno==285);
-{ yymsp[1].minor.yy528 = 0; }
+ case 268: /* when_clause ::= */
+ case 287: /* key_opt ::= */ yytestcase(yyruleno==287);
+{ yymsp[1].minor.yy454 = 0; }
break;
- case 267: /* when_clause ::= WHEN expr */
- case 286: /* key_opt ::= KEY expr */ yytestcase(yyruleno==286);
-{ yymsp[-1].minor.yy528 = yymsp[0].minor.yy528; }
+ case 269: /* when_clause ::= WHEN expr */
+ case 288: /* key_opt ::= KEY expr */ yytestcase(yyruleno==288);
+{ yymsp[-1].minor.yy454 = yymsp[0].minor.yy454; }
break;
- case 268: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */
+ case 270: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */
{
- assert( yymsp[-2].minor.yy33!=0 );
- yymsp[-2].minor.yy33->pLast->pNext = yymsp[-1].minor.yy33;
- yymsp[-2].minor.yy33->pLast = yymsp[-1].minor.yy33;
+ assert( yymsp[-2].minor.yy427!=0 );
+ yymsp[-2].minor.yy427->pLast->pNext = yymsp[-1].minor.yy427;
+ yymsp[-2].minor.yy427->pLast = yymsp[-1].minor.yy427;
}
break;
- case 269: /* trigger_cmd_list ::= trigger_cmd SEMI */
+ case 271: /* trigger_cmd_list ::= trigger_cmd SEMI */
{
- assert( yymsp[-1].minor.yy33!=0 );
- yymsp[-1].minor.yy33->pLast = yymsp[-1].minor.yy33;
+ assert( yymsp[-1].minor.yy427!=0 );
+ yymsp[-1].minor.yy427->pLast = yymsp[-1].minor.yy427;
}
break;
- case 270: /* trnm ::= nm DOT nm */
+ case 272: /* trnm ::= nm DOT nm */
{
yymsp[-2].minor.yy0 = yymsp[0].minor.yy0;
sqlite3ErrorMsg(pParse,
@@ -175883,367 +177291,377 @@ static YYACTIONTYPE yy_reduce(
"statements within triggers");
}
break;
- case 271: /* tridxby ::= INDEXED BY nm */
+ case 273: /* tridxby ::= INDEXED BY nm */
{
sqlite3ErrorMsg(pParse,
"the INDEXED BY clause is not allowed on UPDATE or DELETE statements "
"within triggers");
}
break;
- case 272: /* tridxby ::= NOT INDEXED */
+ case 274: /* tridxby ::= NOT INDEXED */
{
sqlite3ErrorMsg(pParse,
"the NOT INDEXED clause is not allowed on UPDATE or DELETE statements "
"within triggers");
}
break;
- case 273: /* trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt */
-{yylhsminor.yy33 = sqlite3TriggerUpdateStep(pParse, &yymsp[-6].minor.yy0, yymsp[-2].minor.yy131, yymsp[-3].minor.yy322, yymsp[-1].minor.yy528, yymsp[-7].minor.yy394, yymsp[-8].minor.yy0.z, yymsp[0].minor.yy522);}
- yymsp[-8].minor.yy33 = yylhsminor.yy33;
+ case 275: /* trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt */
+{yylhsminor.yy427 = sqlite3TriggerUpdateStep(pParse, &yymsp[-6].minor.yy0, yymsp[-2].minor.yy203, yymsp[-3].minor.yy14, yymsp[-1].minor.yy454, yymsp[-7].minor.yy144, yymsp[-8].minor.yy0.z, yymsp[0].minor.yy168);}
+ yymsp[-8].minor.yy427 = yylhsminor.yy427;
break;
- case 274: /* trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */
+ case 276: /* trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */
{
- yylhsminor.yy33 = sqlite3TriggerInsertStep(pParse,&yymsp[-4].minor.yy0,yymsp[-3].minor.yy254,yymsp[-2].minor.yy47,yymsp[-6].minor.yy394,yymsp[-1].minor.yy444,yymsp[-7].minor.yy522,yymsp[0].minor.yy522);/*yylhsminor.yy33-overwrites-yymsp[-6].minor.yy394*/
+ yylhsminor.yy427 = sqlite3TriggerInsertStep(pParse,&yymsp[-4].minor.yy0,yymsp[-3].minor.yy132,yymsp[-2].minor.yy555,yymsp[-6].minor.yy144,yymsp[-1].minor.yy122,yymsp[-7].minor.yy168,yymsp[0].minor.yy168);/*yylhsminor.yy427-overwrites-yymsp[-6].minor.yy144*/
}
- yymsp[-7].minor.yy33 = yylhsminor.yy33;
+ yymsp[-7].minor.yy427 = yylhsminor.yy427;
break;
- case 275: /* trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */
-{yylhsminor.yy33 = sqlite3TriggerDeleteStep(pParse, &yymsp[-3].minor.yy0, yymsp[-1].minor.yy528, yymsp[-5].minor.yy0.z, yymsp[0].minor.yy522);}
- yymsp[-5].minor.yy33 = yylhsminor.yy33;
+ case 277: /* trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */
+{yylhsminor.yy427 = sqlite3TriggerDeleteStep(pParse, &yymsp[-3].minor.yy0, yymsp[-1].minor.yy454, yymsp[-5].minor.yy0.z, yymsp[0].minor.yy168);}
+ yymsp[-5].minor.yy427 = yylhsminor.yy427;
break;
- case 276: /* trigger_cmd ::= scanpt select scanpt */
-{yylhsminor.yy33 = sqlite3TriggerSelectStep(pParse->db, yymsp[-1].minor.yy47, yymsp[-2].minor.yy522, yymsp[0].minor.yy522); /*yylhsminor.yy33-overwrites-yymsp[-1].minor.yy47*/}
- yymsp[-2].minor.yy33 = yylhsminor.yy33;
+ case 278: /* trigger_cmd ::= scanpt select scanpt */
+{yylhsminor.yy427 = sqlite3TriggerSelectStep(pParse->db, yymsp[-1].minor.yy555, yymsp[-2].minor.yy168, yymsp[0].minor.yy168); /*yylhsminor.yy427-overwrites-yymsp[-1].minor.yy555*/}
+ yymsp[-2].minor.yy427 = yylhsminor.yy427;
break;
- case 277: /* expr ::= RAISE LP IGNORE RP */
+ case 279: /* expr ::= RAISE LP IGNORE RP */
{
- yymsp[-3].minor.yy528 = sqlite3PExpr(pParse, TK_RAISE, 0, 0);
- if( yymsp[-3].minor.yy528 ){
- yymsp[-3].minor.yy528->affExpr = OE_Ignore;
+ yymsp[-3].minor.yy454 = sqlite3PExpr(pParse, TK_RAISE, 0, 0);
+ if( yymsp[-3].minor.yy454 ){
+ yymsp[-3].minor.yy454->affExpr = OE_Ignore;
}
}
break;
- case 278: /* expr ::= RAISE LP raisetype COMMA nm RP */
+ case 280: /* expr ::= RAISE LP raisetype COMMA nm RP */
{
- yymsp[-5].minor.yy528 = sqlite3ExprAlloc(pParse->db, TK_RAISE, &yymsp[-1].minor.yy0, 1);
- if( yymsp[-5].minor.yy528 ) {
- yymsp[-5].minor.yy528->affExpr = (char)yymsp[-3].minor.yy394;
+ yymsp[-5].minor.yy454 = sqlite3ExprAlloc(pParse->db, TK_RAISE, &yymsp[-1].minor.yy0, 1);
+ if( yymsp[-5].minor.yy454 ) {
+ yymsp[-5].minor.yy454->affExpr = (char)yymsp[-3].minor.yy144;
}
}
break;
- case 279: /* raisetype ::= ROLLBACK */
-{yymsp[0].minor.yy394 = OE_Rollback;}
+ case 281: /* raisetype ::= ROLLBACK */
+{yymsp[0].minor.yy144 = OE_Rollback;}
break;
- case 281: /* raisetype ::= FAIL */
-{yymsp[0].minor.yy394 = OE_Fail;}
+ case 283: /* raisetype ::= FAIL */
+{yymsp[0].minor.yy144 = OE_Fail;}
break;
- case 282: /* cmd ::= DROP TRIGGER ifexists fullname */
+ case 284: /* cmd ::= DROP TRIGGER ifexists fullname */
{
- sqlite3DropTrigger(pParse,yymsp[0].minor.yy131,yymsp[-1].minor.yy394);
+ sqlite3DropTrigger(pParse,yymsp[0].minor.yy203,yymsp[-1].minor.yy144);
}
break;
- case 283: /* cmd ::= ATTACH database_kw_opt expr AS expr key_opt */
+ case 285: /* cmd ::= ATTACH database_kw_opt expr AS expr key_opt */
{
- sqlite3Attach(pParse, yymsp[-3].minor.yy528, yymsp[-1].minor.yy528, yymsp[0].minor.yy528);
+ sqlite3Attach(pParse, yymsp[-3].minor.yy454, yymsp[-1].minor.yy454, yymsp[0].minor.yy454);
}
break;
- case 284: /* cmd ::= DETACH database_kw_opt expr */
+ case 286: /* cmd ::= DETACH database_kw_opt expr */
{
- sqlite3Detach(pParse, yymsp[0].minor.yy528);
+ sqlite3Detach(pParse, yymsp[0].minor.yy454);
}
break;
- case 287: /* cmd ::= REINDEX */
+ case 289: /* cmd ::= REINDEX */
{sqlite3Reindex(pParse, 0, 0);}
break;
- case 288: /* cmd ::= REINDEX nm dbnm */
+ case 290: /* cmd ::= REINDEX nm dbnm */
{sqlite3Reindex(pParse, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0);}
break;
- case 289: /* cmd ::= ANALYZE */
+ case 291: /* cmd ::= ANALYZE */
{sqlite3Analyze(pParse, 0, 0);}
break;
- case 290: /* cmd ::= ANALYZE nm dbnm */
+ case 292: /* cmd ::= ANALYZE nm dbnm */
{sqlite3Analyze(pParse, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0);}
break;
- case 291: /* cmd ::= ALTER TABLE fullname RENAME TO nm */
+ case 293: /* cmd ::= ALTER TABLE fullname RENAME TO nm */
{
- sqlite3AlterRenameTable(pParse,yymsp[-3].minor.yy131,&yymsp[0].minor.yy0);
+ sqlite3AlterRenameTable(pParse,yymsp[-3].minor.yy203,&yymsp[0].minor.yy0);
}
break;
- case 292: /* cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */
+ case 294: /* cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */
{
yymsp[-1].minor.yy0.n = (int)(pParse->sLastToken.z-yymsp[-1].minor.yy0.z) + pParse->sLastToken.n;
sqlite3AlterFinishAddColumn(pParse, &yymsp[-1].minor.yy0);
}
break;
- case 293: /* cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm */
+ case 295: /* cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm */
{
- sqlite3AlterDropColumn(pParse, yymsp[-3].minor.yy131, &yymsp[0].minor.yy0);
+ sqlite3AlterDropColumn(pParse, yymsp[-3].minor.yy203, &yymsp[0].minor.yy0);
}
break;
- case 294: /* add_column_fullname ::= fullname */
+ case 296: /* add_column_fullname ::= fullname */
{
disableLookaside(pParse);
- sqlite3AlterBeginAddColumn(pParse, yymsp[0].minor.yy131);
+ sqlite3AlterBeginAddColumn(pParse, yymsp[0].minor.yy203);
}
break;
- case 295: /* cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm */
+ case 297: /* cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm */
{
- sqlite3AlterRenameColumn(pParse, yymsp[-5].minor.yy131, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0);
+ sqlite3AlterRenameColumn(pParse, yymsp[-5].minor.yy203, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0);
}
break;
- case 296: /* cmd ::= create_vtab */
+ case 298: /* cmd ::= create_vtab */
{sqlite3VtabFinishParse(pParse,0);}
break;
- case 297: /* cmd ::= create_vtab LP vtabarglist RP */
+ case 299: /* cmd ::= create_vtab LP vtabarglist RP */
{sqlite3VtabFinishParse(pParse,&yymsp[0].minor.yy0);}
break;
- case 298: /* create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */
+ case 300: /* create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */
{
- sqlite3VtabBeginParse(pParse, &yymsp[-3].minor.yy0, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, yymsp[-4].minor.yy394);
+ sqlite3VtabBeginParse(pParse, &yymsp[-3].minor.yy0, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, yymsp[-4].minor.yy144);
}
break;
- case 299: /* vtabarg ::= */
+ case 301: /* vtabarg ::= */
{sqlite3VtabArgInit(pParse);}
break;
- case 300: /* vtabargtoken ::= ANY */
- case 301: /* vtabargtoken ::= lp anylist RP */ yytestcase(yyruleno==301);
- case 302: /* lp ::= LP */ yytestcase(yyruleno==302);
+ case 302: /* vtabargtoken ::= ANY */
+ case 303: /* vtabargtoken ::= lp anylist RP */ yytestcase(yyruleno==303);
+ case 304: /* lp ::= LP */ yytestcase(yyruleno==304);
{sqlite3VtabArgExtend(pParse,&yymsp[0].minor.yy0);}
break;
- case 303: /* with ::= WITH wqlist */
- case 304: /* with ::= WITH RECURSIVE wqlist */ yytestcase(yyruleno==304);
-{ sqlite3WithPush(pParse, yymsp[0].minor.yy521, 1); }
+ case 305: /* with ::= WITH wqlist */
+ case 306: /* with ::= WITH RECURSIVE wqlist */ yytestcase(yyruleno==306);
+{ sqlite3WithPush(pParse, yymsp[0].minor.yy59, 1); }
break;
- case 305: /* wqas ::= AS */
-{yymsp[0].minor.yy516 = M10d_Any;}
+ case 307: /* wqas ::= AS */
+{yymsp[0].minor.yy462 = M10d_Any;}
break;
- case 306: /* wqas ::= AS MATERIALIZED */
-{yymsp[-1].minor.yy516 = M10d_Yes;}
+ case 308: /* wqas ::= AS MATERIALIZED */
+{yymsp[-1].minor.yy462 = M10d_Yes;}
break;
- case 307: /* wqas ::= AS NOT MATERIALIZED */
-{yymsp[-2].minor.yy516 = M10d_No;}
+ case 309: /* wqas ::= AS NOT MATERIALIZED */
+{yymsp[-2].minor.yy462 = M10d_No;}
break;
- case 308: /* wqitem ::= nm eidlist_opt wqas LP select RP */
+ case 310: /* wqitem ::= withnm eidlist_opt wqas LP select RP */
{
- yymsp[-5].minor.yy385 = sqlite3CteNew(pParse, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy322, yymsp[-1].minor.yy47, yymsp[-3].minor.yy516); /*A-overwrites-X*/
+ yymsp[-5].minor.yy67 = sqlite3CteNew(pParse, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy14, yymsp[-1].minor.yy555, yymsp[-3].minor.yy462); /*A-overwrites-X*/
}
break;
- case 309: /* wqlist ::= wqitem */
+ case 311: /* withnm ::= nm */
+{pParse->bHasWith = 1;}
+ break;
+ case 312: /* wqlist ::= wqitem */
{
- yymsp[0].minor.yy521 = sqlite3WithAdd(pParse, 0, yymsp[0].minor.yy385); /*A-overwrites-X*/
+ yymsp[0].minor.yy59 = sqlite3WithAdd(pParse, 0, yymsp[0].minor.yy67); /*A-overwrites-X*/
}
break;
- case 310: /* wqlist ::= wqlist COMMA wqitem */
+ case 313: /* wqlist ::= wqlist COMMA wqitem */
{
- yymsp[-2].minor.yy521 = sqlite3WithAdd(pParse, yymsp[-2].minor.yy521, yymsp[0].minor.yy385);
+ yymsp[-2].minor.yy59 = sqlite3WithAdd(pParse, yymsp[-2].minor.yy59, yymsp[0].minor.yy67);
}
break;
- case 311: /* windowdefn_list ::= windowdefn_list COMMA windowdefn */
+ case 314: /* windowdefn_list ::= windowdefn_list COMMA windowdefn */
{
- assert( yymsp[0].minor.yy41!=0 );
- sqlite3WindowChain(pParse, yymsp[0].minor.yy41, yymsp[-2].minor.yy41);
- yymsp[0].minor.yy41->pNextWin = yymsp[-2].minor.yy41;
- yylhsminor.yy41 = yymsp[0].minor.yy41;
+ assert( yymsp[0].minor.yy211!=0 );
+ sqlite3WindowChain(pParse, yymsp[0].minor.yy211, yymsp[-2].minor.yy211);
+ yymsp[0].minor.yy211->pNextWin = yymsp[-2].minor.yy211;
+ yylhsminor.yy211 = yymsp[0].minor.yy211;
}
- yymsp[-2].minor.yy41 = yylhsminor.yy41;
+ yymsp[-2].minor.yy211 = yylhsminor.yy211;
break;
- case 312: /* windowdefn ::= nm AS LP window RP */
+ case 315: /* windowdefn ::= nm AS LP window RP */
{
- if( ALWAYS(yymsp[-1].minor.yy41) ){
- yymsp[-1].minor.yy41->zName = sqlite3DbStrNDup(pParse->db, yymsp[-4].minor.yy0.z, yymsp[-4].minor.yy0.n);
+ if( ALWAYS(yymsp[-1].minor.yy211) ){
+ yymsp[-1].minor.yy211->zName = sqlite3DbStrNDup(pParse->db, yymsp[-4].minor.yy0.z, yymsp[-4].minor.yy0.n);
}
- yylhsminor.yy41 = yymsp[-1].minor.yy41;
+ yylhsminor.yy211 = yymsp[-1].minor.yy211;
}
- yymsp[-4].minor.yy41 = yylhsminor.yy41;
+ yymsp[-4].minor.yy211 = yylhsminor.yy211;
break;
- case 313: /* window ::= PARTITION BY nexprlist orderby_opt frame_opt */
+ case 316: /* window ::= PARTITION BY nexprlist orderby_opt frame_opt */
{
- yymsp[-4].minor.yy41 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy41, yymsp[-2].minor.yy322, yymsp[-1].minor.yy322, 0);
+ yymsp[-4].minor.yy211 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy211, yymsp[-2].minor.yy14, yymsp[-1].minor.yy14, 0);
}
break;
- case 314: /* window ::= nm PARTITION BY nexprlist orderby_opt frame_opt */
+ case 317: /* window ::= nm PARTITION BY nexprlist orderby_opt frame_opt */
{
- yylhsminor.yy41 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy41, yymsp[-2].minor.yy322, yymsp[-1].minor.yy322, &yymsp[-5].minor.yy0);
+ yylhsminor.yy211 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy211, yymsp[-2].minor.yy14, yymsp[-1].minor.yy14, &yymsp[-5].minor.yy0);
}
- yymsp[-5].minor.yy41 = yylhsminor.yy41;
+ yymsp[-5].minor.yy211 = yylhsminor.yy211;
break;
- case 315: /* window ::= ORDER BY sortlist frame_opt */
+ case 318: /* window ::= ORDER BY sortlist frame_opt */
{
- yymsp[-3].minor.yy41 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy41, 0, yymsp[-1].minor.yy322, 0);
+ yymsp[-3].minor.yy211 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy211, 0, yymsp[-1].minor.yy14, 0);
}
break;
- case 316: /* window ::= nm ORDER BY sortlist frame_opt */
+ case 319: /* window ::= nm ORDER BY sortlist frame_opt */
{
- yylhsminor.yy41 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy41, 0, yymsp[-1].minor.yy322, &yymsp[-4].minor.yy0);
+ yylhsminor.yy211 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy211, 0, yymsp[-1].minor.yy14, &yymsp[-4].minor.yy0);
}
- yymsp[-4].minor.yy41 = yylhsminor.yy41;
+ yymsp[-4].minor.yy211 = yylhsminor.yy211;
break;
- case 317: /* window ::= nm frame_opt */
+ case 320: /* window ::= nm frame_opt */
{
- yylhsminor.yy41 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy41, 0, 0, &yymsp[-1].minor.yy0);
+ yylhsminor.yy211 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy211, 0, 0, &yymsp[-1].minor.yy0);
}
- yymsp[-1].minor.yy41 = yylhsminor.yy41;
+ yymsp[-1].minor.yy211 = yylhsminor.yy211;
break;
- case 318: /* frame_opt ::= */
+ case 321: /* frame_opt ::= */
{
- yymsp[1].minor.yy41 = sqlite3WindowAlloc(pParse, 0, TK_UNBOUNDED, 0, TK_CURRENT, 0, 0);
+ yymsp[1].minor.yy211 = sqlite3WindowAlloc(pParse, 0, TK_UNBOUNDED, 0, TK_CURRENT, 0, 0);
}
break;
- case 319: /* frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt */
+ case 322: /* frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt */
{
- yylhsminor.yy41 = sqlite3WindowAlloc(pParse, yymsp[-2].minor.yy394, yymsp[-1].minor.yy595.eType, yymsp[-1].minor.yy595.pExpr, TK_CURRENT, 0, yymsp[0].minor.yy516);
+ yylhsminor.yy211 = sqlite3WindowAlloc(pParse, yymsp[-2].minor.yy144, yymsp[-1].minor.yy509.eType, yymsp[-1].minor.yy509.pExpr, TK_CURRENT, 0, yymsp[0].minor.yy462);
}
- yymsp[-2].minor.yy41 = yylhsminor.yy41;
+ yymsp[-2].minor.yy211 = yylhsminor.yy211;
break;
- case 320: /* frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt */
+ case 323: /* frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt */
{
- yylhsminor.yy41 = sqlite3WindowAlloc(pParse, yymsp[-5].minor.yy394, yymsp[-3].minor.yy595.eType, yymsp[-3].minor.yy595.pExpr, yymsp[-1].minor.yy595.eType, yymsp[-1].minor.yy595.pExpr, yymsp[0].minor.yy516);
+ yylhsminor.yy211 = sqlite3WindowAlloc(pParse, yymsp[-5].minor.yy144, yymsp[-3].minor.yy509.eType, yymsp[-3].minor.yy509.pExpr, yymsp[-1].minor.yy509.eType, yymsp[-1].minor.yy509.pExpr, yymsp[0].minor.yy462);
}
- yymsp[-5].minor.yy41 = yylhsminor.yy41;
+ yymsp[-5].minor.yy211 = yylhsminor.yy211;
break;
- case 322: /* frame_bound_s ::= frame_bound */
- case 324: /* frame_bound_e ::= frame_bound */ yytestcase(yyruleno==324);
-{yylhsminor.yy595 = yymsp[0].minor.yy595;}
- yymsp[0].minor.yy595 = yylhsminor.yy595;
+ case 325: /* frame_bound_s ::= frame_bound */
+ case 327: /* frame_bound_e ::= frame_bound */ yytestcase(yyruleno==327);
+{yylhsminor.yy509 = yymsp[0].minor.yy509;}
+ yymsp[0].minor.yy509 = yylhsminor.yy509;
break;
- case 323: /* frame_bound_s ::= UNBOUNDED PRECEDING */
- case 325: /* frame_bound_e ::= UNBOUNDED FOLLOWING */ yytestcase(yyruleno==325);
- case 327: /* frame_bound ::= CURRENT ROW */ yytestcase(yyruleno==327);
-{yylhsminor.yy595.eType = yymsp[-1].major; yylhsminor.yy595.pExpr = 0;}
- yymsp[-1].minor.yy595 = yylhsminor.yy595;
+ case 326: /* frame_bound_s ::= UNBOUNDED PRECEDING */
+ case 328: /* frame_bound_e ::= UNBOUNDED FOLLOWING */ yytestcase(yyruleno==328);
+ case 330: /* frame_bound ::= CURRENT ROW */ yytestcase(yyruleno==330);
+{yylhsminor.yy509.eType = yymsp[-1].major; yylhsminor.yy509.pExpr = 0;}
+ yymsp[-1].minor.yy509 = yylhsminor.yy509;
break;
- case 326: /* frame_bound ::= expr PRECEDING|FOLLOWING */
-{yylhsminor.yy595.eType = yymsp[0].major; yylhsminor.yy595.pExpr = yymsp[-1].minor.yy528;}
- yymsp[-1].minor.yy595 = yylhsminor.yy595;
+ case 329: /* frame_bound ::= expr PRECEDING|FOLLOWING */
+{yylhsminor.yy509.eType = yymsp[0].major; yylhsminor.yy509.pExpr = yymsp[-1].minor.yy454;}
+ yymsp[-1].minor.yy509 = yylhsminor.yy509;
break;
- case 328: /* frame_exclude_opt ::= */
-{yymsp[1].minor.yy516 = 0;}
+ case 331: /* frame_exclude_opt ::= */
+{yymsp[1].minor.yy462 = 0;}
break;
- case 329: /* frame_exclude_opt ::= EXCLUDE frame_exclude */
-{yymsp[-1].minor.yy516 = yymsp[0].minor.yy516;}
+ case 332: /* frame_exclude_opt ::= EXCLUDE frame_exclude */
+{yymsp[-1].minor.yy462 = yymsp[0].minor.yy462;}
break;
- case 330: /* frame_exclude ::= NO OTHERS */
- case 331: /* frame_exclude ::= CURRENT ROW */ yytestcase(yyruleno==331);
-{yymsp[-1].minor.yy516 = yymsp[-1].major; /*A-overwrites-X*/}
+ case 333: /* frame_exclude ::= NO OTHERS */
+ case 334: /* frame_exclude ::= CURRENT ROW */ yytestcase(yyruleno==334);
+{yymsp[-1].minor.yy462 = yymsp[-1].major; /*A-overwrites-X*/}
break;
- case 332: /* frame_exclude ::= GROUP|TIES */
-{yymsp[0].minor.yy516 = yymsp[0].major; /*A-overwrites-X*/}
+ case 335: /* frame_exclude ::= GROUP|TIES */
+{yymsp[0].minor.yy462 = yymsp[0].major; /*A-overwrites-X*/}
break;
- case 333: /* window_clause ::= WINDOW windowdefn_list */
-{ yymsp[-1].minor.yy41 = yymsp[0].minor.yy41; }
+ case 336: /* window_clause ::= WINDOW windowdefn_list */
+{ yymsp[-1].minor.yy211 = yymsp[0].minor.yy211; }
break;
- case 334: /* filter_over ::= filter_clause over_clause */
+ case 337: /* filter_over ::= filter_clause over_clause */
{
- if( yymsp[0].minor.yy41 ){
- yymsp[0].minor.yy41->pFilter = yymsp[-1].minor.yy528;
+ if( yymsp[0].minor.yy211 ){
+ yymsp[0].minor.yy211->pFilter = yymsp[-1].minor.yy454;
}else{
- sqlite3ExprDelete(pParse->db, yymsp[-1].minor.yy528);
+ sqlite3ExprDelete(pParse->db, yymsp[-1].minor.yy454);
}
- yylhsminor.yy41 = yymsp[0].minor.yy41;
+ yylhsminor.yy211 = yymsp[0].minor.yy211;
}
- yymsp[-1].minor.yy41 = yylhsminor.yy41;
+ yymsp[-1].minor.yy211 = yylhsminor.yy211;
break;
- case 335: /* filter_over ::= over_clause */
+ case 338: /* filter_over ::= over_clause */
{
- yylhsminor.yy41 = yymsp[0].minor.yy41;
+ yylhsminor.yy211 = yymsp[0].minor.yy211;
}
- yymsp[0].minor.yy41 = yylhsminor.yy41;
+ yymsp[0].minor.yy211 = yylhsminor.yy211;
break;
- case 336: /* filter_over ::= filter_clause */
+ case 339: /* filter_over ::= filter_clause */
{
- yylhsminor.yy41 = (Window*)sqlite3DbMallocZero(pParse->db, sizeof(Window));
- if( yylhsminor.yy41 ){
- yylhsminor.yy41->eFrmType = TK_FILTER;
- yylhsminor.yy41->pFilter = yymsp[0].minor.yy528;
+ yylhsminor.yy211 = (Window*)sqlite3DbMallocZero(pParse->db, sizeof(Window));
+ if( yylhsminor.yy211 ){
+ yylhsminor.yy211->eFrmType = TK_FILTER;
+ yylhsminor.yy211->pFilter = yymsp[0].minor.yy454;
}else{
- sqlite3ExprDelete(pParse->db, yymsp[0].minor.yy528);
+ sqlite3ExprDelete(pParse->db, yymsp[0].minor.yy454);
}
}
- yymsp[0].minor.yy41 = yylhsminor.yy41;
+ yymsp[0].minor.yy211 = yylhsminor.yy211;
break;
- case 337: /* over_clause ::= OVER LP window RP */
+ case 340: /* over_clause ::= OVER LP window RP */
{
- yymsp[-3].minor.yy41 = yymsp[-1].minor.yy41;
- assert( yymsp[-3].minor.yy41!=0 );
+ yymsp[-3].minor.yy211 = yymsp[-1].minor.yy211;
+ assert( yymsp[-3].minor.yy211!=0 );
}
break;
- case 338: /* over_clause ::= OVER nm */
+ case 341: /* over_clause ::= OVER nm */
{
- yymsp[-1].minor.yy41 = (Window*)sqlite3DbMallocZero(pParse->db, sizeof(Window));
- if( yymsp[-1].minor.yy41 ){
- yymsp[-1].minor.yy41->zName = sqlite3DbStrNDup(pParse->db, yymsp[0].minor.yy0.z, yymsp[0].minor.yy0.n);
+ yymsp[-1].minor.yy211 = (Window*)sqlite3DbMallocZero(pParse->db, sizeof(Window));
+ if( yymsp[-1].minor.yy211 ){
+ yymsp[-1].minor.yy211->zName = sqlite3DbStrNDup(pParse->db, yymsp[0].minor.yy0.z, yymsp[0].minor.yy0.n);
}
}
break;
- case 339: /* filter_clause ::= FILTER LP WHERE expr RP */
-{ yymsp[-4].minor.yy528 = yymsp[-1].minor.yy528; }
+ case 342: /* filter_clause ::= FILTER LP WHERE expr RP */
+{ yymsp[-4].minor.yy454 = yymsp[-1].minor.yy454; }
+ break;
+ case 343: /* term ::= QNUMBER */
+{
+ yylhsminor.yy454=tokenExpr(pParse,yymsp[0].major,yymsp[0].minor.yy0);
+ sqlite3DequoteNumber(pParse, yylhsminor.yy454);
+}
+ yymsp[0].minor.yy454 = yylhsminor.yy454;
break;
default:
- /* (340) input ::= cmdlist */ yytestcase(yyruleno==340);
- /* (341) cmdlist ::= cmdlist ecmd */ yytestcase(yyruleno==341);
- /* (342) cmdlist ::= ecmd (OPTIMIZED OUT) */ assert(yyruleno!=342);
- /* (343) ecmd ::= SEMI */ yytestcase(yyruleno==343);
- /* (344) ecmd ::= cmdx SEMI */ yytestcase(yyruleno==344);
- /* (345) ecmd ::= explain cmdx SEMI (NEVER REDUCES) */ assert(yyruleno!=345);
- /* (346) trans_opt ::= */ yytestcase(yyruleno==346);
- /* (347) trans_opt ::= TRANSACTION */ yytestcase(yyruleno==347);
- /* (348) trans_opt ::= TRANSACTION nm */ yytestcase(yyruleno==348);
- /* (349) savepoint_opt ::= SAVEPOINT */ yytestcase(yyruleno==349);
- /* (350) savepoint_opt ::= */ yytestcase(yyruleno==350);
- /* (351) cmd ::= create_table create_table_args */ yytestcase(yyruleno==351);
- /* (352) table_option_set ::= table_option (OPTIMIZED OUT) */ assert(yyruleno!=352);
- /* (353) columnlist ::= columnlist COMMA columnname carglist */ yytestcase(yyruleno==353);
- /* (354) columnlist ::= columnname carglist */ yytestcase(yyruleno==354);
- /* (355) nm ::= ID|INDEXED|JOIN_KW */ yytestcase(yyruleno==355);
- /* (356) nm ::= STRING */ yytestcase(yyruleno==356);
- /* (357) typetoken ::= typename */ yytestcase(yyruleno==357);
- /* (358) typename ::= ID|STRING */ yytestcase(yyruleno==358);
- /* (359) signed ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=359);
- /* (360) signed ::= minus_num (OPTIMIZED OUT) */ assert(yyruleno!=360);
- /* (361) carglist ::= carglist ccons */ yytestcase(yyruleno==361);
- /* (362) carglist ::= */ yytestcase(yyruleno==362);
- /* (363) ccons ::= NULL onconf */ yytestcase(yyruleno==363);
- /* (364) ccons ::= GENERATED ALWAYS AS generated */ yytestcase(yyruleno==364);
- /* (365) ccons ::= AS generated */ yytestcase(yyruleno==365);
- /* (366) conslist_opt ::= COMMA conslist */ yytestcase(yyruleno==366);
- /* (367) conslist ::= conslist tconscomma tcons */ yytestcase(yyruleno==367);
- /* (368) conslist ::= tcons (OPTIMIZED OUT) */ assert(yyruleno!=368);
- /* (369) tconscomma ::= */ yytestcase(yyruleno==369);
- /* (370) defer_subclause_opt ::= defer_subclause (OPTIMIZED OUT) */ assert(yyruleno!=370);
- /* (371) resolvetype ::= raisetype (OPTIMIZED OUT) */ assert(yyruleno!=371);
- /* (372) selectnowith ::= oneselect (OPTIMIZED OUT) */ assert(yyruleno!=372);
- /* (373) oneselect ::= values */ yytestcase(yyruleno==373);
- /* (374) sclp ::= selcollist COMMA */ yytestcase(yyruleno==374);
- /* (375) as ::= ID|STRING */ yytestcase(yyruleno==375);
- /* (376) indexed_opt ::= indexed_by (OPTIMIZED OUT) */ assert(yyruleno!=376);
- /* (377) returning ::= */ yytestcase(yyruleno==377);
- /* (378) expr ::= term (OPTIMIZED OUT) */ assert(yyruleno!=378);
- /* (379) likeop ::= LIKE_KW|MATCH */ yytestcase(yyruleno==379);
- /* (380) case_operand ::= expr */ yytestcase(yyruleno==380);
- /* (381) exprlist ::= nexprlist */ yytestcase(yyruleno==381);
- /* (382) nmnum ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=382);
- /* (383) nmnum ::= nm (OPTIMIZED OUT) */ assert(yyruleno!=383);
- /* (384) nmnum ::= ON */ yytestcase(yyruleno==384);
- /* (385) nmnum ::= DELETE */ yytestcase(yyruleno==385);
- /* (386) nmnum ::= DEFAULT */ yytestcase(yyruleno==386);
- /* (387) plus_num ::= INTEGER|FLOAT */ yytestcase(yyruleno==387);
- /* (388) foreach_clause ::= */ yytestcase(yyruleno==388);
- /* (389) foreach_clause ::= FOR EACH ROW */ yytestcase(yyruleno==389);
- /* (390) trnm ::= nm */ yytestcase(yyruleno==390);
- /* (391) tridxby ::= */ yytestcase(yyruleno==391);
- /* (392) database_kw_opt ::= DATABASE */ yytestcase(yyruleno==392);
- /* (393) database_kw_opt ::= */ yytestcase(yyruleno==393);
- /* (394) kwcolumn_opt ::= */ yytestcase(yyruleno==394);
- /* (395) kwcolumn_opt ::= COLUMNKW */ yytestcase(yyruleno==395);
- /* (396) vtabarglist ::= vtabarg */ yytestcase(yyruleno==396);
- /* (397) vtabarglist ::= vtabarglist COMMA vtabarg */ yytestcase(yyruleno==397);
- /* (398) vtabarg ::= vtabarg vtabargtoken */ yytestcase(yyruleno==398);
- /* (399) anylist ::= */ yytestcase(yyruleno==399);
- /* (400) anylist ::= anylist LP anylist RP */ yytestcase(yyruleno==400);
- /* (401) anylist ::= anylist ANY */ yytestcase(yyruleno==401);
- /* (402) with ::= */ yytestcase(yyruleno==402);
- /* (403) windowdefn_list ::= windowdefn (OPTIMIZED OUT) */ assert(yyruleno!=403);
- /* (404) window ::= frame_opt (OPTIMIZED OUT) */ assert(yyruleno!=404);
+ /* (344) input ::= cmdlist */ yytestcase(yyruleno==344);
+ /* (345) cmdlist ::= cmdlist ecmd */ yytestcase(yyruleno==345);
+ /* (346) cmdlist ::= ecmd (OPTIMIZED OUT) */ assert(yyruleno!=346);
+ /* (347) ecmd ::= SEMI */ yytestcase(yyruleno==347);
+ /* (348) ecmd ::= cmdx SEMI */ yytestcase(yyruleno==348);
+ /* (349) ecmd ::= explain cmdx SEMI (NEVER REDUCES) */ assert(yyruleno!=349);
+ /* (350) trans_opt ::= */ yytestcase(yyruleno==350);
+ /* (351) trans_opt ::= TRANSACTION */ yytestcase(yyruleno==351);
+ /* (352) trans_opt ::= TRANSACTION nm */ yytestcase(yyruleno==352);
+ /* (353) savepoint_opt ::= SAVEPOINT */ yytestcase(yyruleno==353);
+ /* (354) savepoint_opt ::= */ yytestcase(yyruleno==354);
+ /* (355) cmd ::= create_table create_table_args */ yytestcase(yyruleno==355);
+ /* (356) table_option_set ::= table_option (OPTIMIZED OUT) */ assert(yyruleno!=356);
+ /* (357) columnlist ::= columnlist COMMA columnname carglist */ yytestcase(yyruleno==357);
+ /* (358) columnlist ::= columnname carglist */ yytestcase(yyruleno==358);
+ /* (359) nm ::= ID|INDEXED|JOIN_KW */ yytestcase(yyruleno==359);
+ /* (360) nm ::= STRING */ yytestcase(yyruleno==360);
+ /* (361) typetoken ::= typename */ yytestcase(yyruleno==361);
+ /* (362) typename ::= ID|STRING */ yytestcase(yyruleno==362);
+ /* (363) signed ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=363);
+ /* (364) signed ::= minus_num (OPTIMIZED OUT) */ assert(yyruleno!=364);
+ /* (365) carglist ::= carglist ccons */ yytestcase(yyruleno==365);
+ /* (366) carglist ::= */ yytestcase(yyruleno==366);
+ /* (367) ccons ::= NULL onconf */ yytestcase(yyruleno==367);
+ /* (368) ccons ::= GENERATED ALWAYS AS generated */ yytestcase(yyruleno==368);
+ /* (369) ccons ::= AS generated */ yytestcase(yyruleno==369);
+ /* (370) conslist_opt ::= COMMA conslist */ yytestcase(yyruleno==370);
+ /* (371) conslist ::= conslist tconscomma tcons */ yytestcase(yyruleno==371);
+ /* (372) conslist ::= tcons (OPTIMIZED OUT) */ assert(yyruleno!=372);
+ /* (373) tconscomma ::= */ yytestcase(yyruleno==373);
+ /* (374) defer_subclause_opt ::= defer_subclause (OPTIMIZED OUT) */ assert(yyruleno!=374);
+ /* (375) resolvetype ::= raisetype (OPTIMIZED OUT) */ assert(yyruleno!=375);
+ /* (376) selectnowith ::= oneselect (OPTIMIZED OUT) */ assert(yyruleno!=376);
+ /* (377) oneselect ::= values */ yytestcase(yyruleno==377);
+ /* (378) sclp ::= selcollist COMMA */ yytestcase(yyruleno==378);
+ /* (379) as ::= ID|STRING */ yytestcase(yyruleno==379);
+ /* (380) indexed_opt ::= indexed_by (OPTIMIZED OUT) */ assert(yyruleno!=380);
+ /* (381) returning ::= */ yytestcase(yyruleno==381);
+ /* (382) expr ::= term (OPTIMIZED OUT) */ assert(yyruleno!=382);
+ /* (383) likeop ::= LIKE_KW|MATCH */ yytestcase(yyruleno==383);
+ /* (384) case_operand ::= expr */ yytestcase(yyruleno==384);
+ /* (385) exprlist ::= nexprlist */ yytestcase(yyruleno==385);
+ /* (386) nmnum ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=386);
+ /* (387) nmnum ::= nm (OPTIMIZED OUT) */ assert(yyruleno!=387);
+ /* (388) nmnum ::= ON */ yytestcase(yyruleno==388);
+ /* (389) nmnum ::= DELETE */ yytestcase(yyruleno==389);
+ /* (390) nmnum ::= DEFAULT */ yytestcase(yyruleno==390);
+ /* (391) plus_num ::= INTEGER|FLOAT */ yytestcase(yyruleno==391);
+ /* (392) foreach_clause ::= */ yytestcase(yyruleno==392);
+ /* (393) foreach_clause ::= FOR EACH ROW */ yytestcase(yyruleno==393);
+ /* (394) trnm ::= nm */ yytestcase(yyruleno==394);
+ /* (395) tridxby ::= */ yytestcase(yyruleno==395);
+ /* (396) database_kw_opt ::= DATABASE */ yytestcase(yyruleno==396);
+ /* (397) database_kw_opt ::= */ yytestcase(yyruleno==397);
+ /* (398) kwcolumn_opt ::= */ yytestcase(yyruleno==398);
+ /* (399) kwcolumn_opt ::= COLUMNKW */ yytestcase(yyruleno==399);
+ /* (400) vtabarglist ::= vtabarg */ yytestcase(yyruleno==400);
+ /* (401) vtabarglist ::= vtabarglist COMMA vtabarg */ yytestcase(yyruleno==401);
+ /* (402) vtabarg ::= vtabarg vtabargtoken */ yytestcase(yyruleno==402);
+ /* (403) anylist ::= */ yytestcase(yyruleno==403);
+ /* (404) anylist ::= anylist LP anylist RP */ yytestcase(yyruleno==404);
+ /* (405) anylist ::= anylist ANY */ yytestcase(yyruleno==405);
+ /* (406) with ::= */ yytestcase(yyruleno==406);
+ /* (407) windowdefn_list ::= windowdefn (OPTIMIZED OUT) */ assert(yyruleno!=407);
+ /* (408) window ::= frame_opt (OPTIMIZED OUT) */ assert(yyruleno!=408);
break;
/********** End reduce actions ************************************************/
};
@@ -176430,19 +177848,12 @@ SQLITE_PRIVATE void sqlite3Parser(
(int)(yypParser->yytos - yypParser->yystack));
}
#endif
-#if YYSTACKDEPTH>0
if( yypParser->yytos>=yypParser->yystackEnd ){
- yyStackOverflow(yypParser);
- break;
- }
-#else
- if( yypParser->yytos>=&yypParser->yystack[yypParser->yystksz-1] ){
if( yyGrowStack(yypParser) ){
yyStackOverflow(yypParser);
break;
}
}
-#endif
}
yyact = yy_reduce(yypParser,yyruleno,yymajor,yyminor sqlite3ParserCTX_PARAM);
}else if( yyact <= YY_MAX_SHIFTREDUCE ){
@@ -177513,27 +178924,58 @@ SQLITE_PRIVATE int sqlite3GetToken(const unsigned char *z, int *tokenType){
*tokenType = TK_INTEGER;
#ifndef SQLITE_OMIT_HEX_INTEGER
if( z[0]=='0' && (z[1]=='x' || z[1]=='X') && sqlite3Isxdigit(z[2]) ){
- for(i=3; sqlite3Isxdigit(z[i]); i++){}
- return i;
- }
+ for(i=3; 1; i++){
+ if( sqlite3Isxdigit(z[i])==0 ){
+ if( z[i]==SQLITE_DIGIT_SEPARATOR ){
+ *tokenType = TK_QNUMBER;
+ }else{
+ break;
+ }
+ }
+ }
+ }else
#endif
- for(i=0; sqlite3Isdigit(z[i]); i++){}
+ {
+ for(i=0; 1; i++){
+ if( sqlite3Isdigit(z[i])==0 ){
+ if( z[i]==SQLITE_DIGIT_SEPARATOR ){
+ *tokenType = TK_QNUMBER;
+ }else{
+ break;
+ }
+ }
+ }
#ifndef SQLITE_OMIT_FLOATING_POINT
- if( z[i]=='.' ){
- i++;
- while( sqlite3Isdigit(z[i]) ){ i++; }
- *tokenType = TK_FLOAT;
- }
- if( (z[i]=='e' || z[i]=='E') &&
- ( sqlite3Isdigit(z[i+1])
- || ((z[i+1]=='+' || z[i+1]=='-') && sqlite3Isdigit(z[i+2]))
- )
- ){
- i += 2;
- while( sqlite3Isdigit(z[i]) ){ i++; }
- *tokenType = TK_FLOAT;
- }
+ if( z[i]=='.' ){
+ if( *tokenType==TK_INTEGER ) *tokenType = TK_FLOAT;
+ for(i++; 1; i++){
+ if( sqlite3Isdigit(z[i])==0 ){
+ if( z[i]==SQLITE_DIGIT_SEPARATOR ){
+ *tokenType = TK_QNUMBER;
+ }else{
+ break;
+ }
+ }
+ }
+ }
+ if( (z[i]=='e' || z[i]=='E') &&
+ ( sqlite3Isdigit(z[i+1])
+ || ((z[i+1]=='+' || z[i+1]=='-') && sqlite3Isdigit(z[i+2]))
+ )
+ ){
+ if( *tokenType==TK_INTEGER ) *tokenType = TK_FLOAT;
+ for(i+=2; 1; i++){
+ if( sqlite3Isdigit(z[i])==0 ){
+ if( z[i]==SQLITE_DIGIT_SEPARATOR ){
+ *tokenType = TK_QNUMBER;
+ }else{
+ break;
+ }
+ }
+ }
+ }
#endif
+ }
while( IdChar(z[i]) ){
*tokenType = TK_ILLEGAL;
i++;
@@ -177698,10 +179140,13 @@ SQLITE_PRIVATE int sqlite3RunParser(Parse *pParse, const char *zSql){
if( tokenType>=TK_WINDOW ){
assert( tokenType==TK_SPACE || tokenType==TK_OVER || tokenType==TK_FILTER
|| tokenType==TK_ILLEGAL || tokenType==TK_WINDOW
+ || tokenType==TK_QNUMBER
);
#else
if( tokenType>=TK_SPACE ){
- assert( tokenType==TK_SPACE || tokenType==TK_ILLEGAL );
+ assert( tokenType==TK_SPACE || tokenType==TK_ILLEGAL
+ || tokenType==TK_QNUMBER
+ );
#endif /* SQLITE_OMIT_WINDOWFUNC */
if( AtomicLoad(&db->u1.isInterrupted) ){
pParse->rc = SQLITE_INTERRUPT;
@@ -177734,7 +179179,7 @@ SQLITE_PRIVATE int sqlite3RunParser(Parse *pParse, const char *zSql){
assert( n==6 );
tokenType = analyzeFilterKeyword((const u8*)&zSql[6], lastTokenParsed);
#endif /* SQLITE_OMIT_WINDOWFUNC */
- }else{
+ }else if( tokenType!=TK_QNUMBER ){
Token x;
x.z = zSql;
x.n = n;
@@ -188729,22 +190174,24 @@ static int fts3IntegrityMethod(
char **pzErr /* Write error message here */
){
Fts3Table *p = (Fts3Table*)pVtab;
- int rc;
+ int rc = SQLITE_OK;
int bOk = 0;
UNUSED_PARAMETER(isQuick);
rc = sqlite3Fts3IntegrityCheck(p, &bOk);
- assert( rc!=SQLITE_CORRUPT_VTAB || bOk==0 );
- if( rc!=SQLITE_OK && rc!=SQLITE_CORRUPT_VTAB ){
+ assert( rc!=SQLITE_CORRUPT_VTAB );
+ if( rc==SQLITE_ERROR || (rc&0xFF)==SQLITE_CORRUPT ){
*pzErr = sqlite3_mprintf("unable to validate the inverted index for"
" FTS%d table %s.%s: %s",
p->bFts4 ? 4 : 3, zSchema, zTabname, sqlite3_errstr(rc));
- }else if( bOk==0 ){
+ if( *pzErr ) rc = SQLITE_OK;
+ }else if( rc==SQLITE_OK && bOk==0 ){
*pzErr = sqlite3_mprintf("malformed inverted index for FTS%d table %s.%s",
p->bFts4 ? 4 : 3, zSchema, zTabname);
+ if( *pzErr==0 ) rc = SQLITE_NOMEM;
}
sqlite3Fts3SegmentsClose(p);
- return SQLITE_OK;
+ return rc;
}
@@ -200406,7 +201853,12 @@ SQLITE_PRIVATE int sqlite3Fts3IntegrityCheck(Fts3Table *p, int *pbOk){
sqlite3_finalize(pStmt);
}
- *pbOk = (rc==SQLITE_OK && cksum1==cksum2);
+ if( rc==SQLITE_CORRUPT_VTAB ){
+ rc = SQLITE_OK;
+ *pbOk = 0;
+ }else{
+ *pbOk = (rc==SQLITE_OK && cksum1==cksum2);
+ }
return rc;
}
@@ -201312,7 +202764,7 @@ static void fts3SnippetDetails(
}
mCover |= mPhrase;
- for(j=0; j<pPhrase->nToken; j++){
+ for(j=0; j<pPhrase->nToken && j<pIter->nSnippet; j++){
mHighlight |= (mPos>>j);
}
@@ -203973,7 +205425,6 @@ static void jsonAppendRawNZ(JsonString *p, const char *zIn, u32 N){
}
}
-
/* Append formatted text (not to exceed N bytes) to the JsonString.
*/
static void jsonPrintf(int N, JsonString *p, const char *zFormat, ...){
@@ -204031,6 +205482,40 @@ static void jsonAppendSeparator(JsonString *p){
jsonAppendChar(p, ',');
}
+/* c is a control character. Append the canonical JSON representation
+** of that control character to p.
+**
+** This routine assumes that the output buffer has already been enlarged
+** sufficiently to hold the worst-case encoding plus a nul terminator.
+*/
+static void jsonAppendControlChar(JsonString *p, u8 c){
+ static const char aSpecial[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 'b', 't', 'n', 0, 'f', 'r', 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ };
+ assert( sizeof(aSpecial)==32 );
+ assert( aSpecial['\b']=='b' );
+ assert( aSpecial['\f']=='f' );
+ assert( aSpecial['\n']=='n' );
+ assert( aSpecial['\r']=='r' );
+ assert( aSpecial['\t']=='t' );
+ assert( c>=0 && c<sizeof(aSpecial) );
+ assert( p->nUsed+7 <= p->nAlloc );
+ if( aSpecial[c] ){
+ p->zBuf[p->nUsed] = '\\';
+ p->zBuf[p->nUsed+1] = aSpecial[c];
+ p->nUsed += 2;
+ }else{
+ p->zBuf[p->nUsed] = '\\';
+ p->zBuf[p->nUsed+1] = 'u';
+ p->zBuf[p->nUsed+2] = '0';
+ p->zBuf[p->nUsed+3] = '0';
+ p->zBuf[p->nUsed+4] = "0123456789abcdef"[c>>4];
+ p->zBuf[p->nUsed+5] = "0123456789abcdef"[c&0xf];
+ p->nUsed += 6;
+ }
+}
+
/* Append the N-byte string in zIn to the end of the JsonString string
** under construction. Enclose the string in double-quotes ("...") and
** escape any double-quotes or backslash characters contained within the
@@ -204090,35 +205575,14 @@ static void jsonAppendString(JsonString *p, const char *zIn, u32 N){
}
c = z[0];
if( c=='"' || c=='\\' ){
- json_simple_escape:
if( (p->nUsed+N+3 > p->nAlloc) && jsonStringGrow(p,N+3)!=0 ) return;
p->zBuf[p->nUsed++] = '\\';
p->zBuf[p->nUsed++] = c;
}else if( c=='\'' ){
p->zBuf[p->nUsed++] = c;
}else{
- static const char aSpecial[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 'b', 't', 'n', 0, 'f', 'r', 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- };
- assert( sizeof(aSpecial)==32 );
- assert( aSpecial['\b']=='b' );
- assert( aSpecial['\f']=='f' );
- assert( aSpecial['\n']=='n' );
- assert( aSpecial['\r']=='r' );
- assert( aSpecial['\t']=='t' );
- assert( c>=0 && c<sizeof(aSpecial) );
- if( aSpecial[c] ){
- c = aSpecial[c];
- goto json_simple_escape;
- }
if( (p->nUsed+N+7 > p->nAlloc) && jsonStringGrow(p,N+7)!=0 ) return;
- p->zBuf[p->nUsed++] = '\\';
- p->zBuf[p->nUsed++] = 'u';
- p->zBuf[p->nUsed++] = '0';
- p->zBuf[p->nUsed++] = '0';
- p->zBuf[p->nUsed++] = "0123456789abcdef"[c>>4];
- p->zBuf[p->nUsed++] = "0123456789abcdef"[c&0xf];
+ jsonAppendControlChar(p, c);
}
z++;
N--;
@@ -204819,7 +206283,10 @@ static u32 jsonbValidityCheck(
if( !jsonIsOk[z[j]] && z[j]!='\'' ){
if( z[j]=='"' ){
if( x==JSONB_TEXTJ ) return j+1;
- }else if( z[j]!='\\' || j+1>=k ){
+ }else if( z[j]<=0x1f ){
+ /* Control characters in JSON5 string literals are ok */
+ if( x==JSONB_TEXTJ ) return j+1;
+ }else if( NEVER(z[j]!='\\') || j+1>=k ){
return j+1;
}else if( strchr("\"\\/bfnrt",z[j+1])!=0 ){
j++;
@@ -205114,9 +206581,14 @@ json_parse_restart:
return -1;
}
}else if( c<=0x1f ){
- /* Control characters are not allowed in strings */
- pParse->iErr = j;
- return -1;
+ if( c==0 ){
+ pParse->iErr = j;
+ return -1;
+ }
+ /* Control characters are not allowed in canonical JSON string
+ ** literals, but are allowed in JSON5 string literals. */
+ opcode = JSONB_TEXT5;
+ pParse->hasNonstd = 1;
}else if( c=='"' ){
opcode = JSONB_TEXT5;
}
@@ -205332,6 +206804,7 @@ json_parse_restart:
return i+4;
}
/* fall-through into the default case that checks for NaN */
+ /* no break */ deliberate_fall_through
}
default: {
u32 k;
@@ -205600,7 +207073,7 @@ static u32 jsonTranslateBlobToText(
zIn = (const char*)&pParse->aBlob[i+n];
jsonAppendChar(pOut, '"');
while( sz2>0 ){
- for(k=0; k<sz2 && zIn[k]!='\\' && zIn[k]!='"'; k++){}
+ for(k=0; k<sz2 && (jsonIsOk[(u8)zIn[k]] || zIn[k]=='\''); k++){}
if( k>0 ){
jsonAppendRawNZ(pOut, zIn, k);
if( k>=sz2 ){
@@ -205615,6 +207088,13 @@ static u32 jsonTranslateBlobToText(
sz2--;
continue;
}
+ if( zIn[0]<=0x1f ){
+ if( pOut->nUsed+7>pOut->nAlloc && jsonStringGrow(pOut,7) ) break;
+ jsonAppendControlChar(pOut, zIn[0]);
+ zIn++;
+ sz2--;
+ continue;
+ }
assert( zIn[0]=='\\' );
assert( sz2>=1 );
if( sz2<2 ){
@@ -205717,6 +207197,112 @@ static u32 jsonTranslateBlobToText(
return i+n+sz;
}
+/* Context for recursion of json_pretty()
+*/
+typedef struct JsonPretty JsonPretty;
+struct JsonPretty {
+ JsonParse *pParse; /* The BLOB being rendered */
+ JsonString *pOut; /* Generate pretty output into this string */
+ const char *zIndent; /* Use this text for indentation */
+ u32 szIndent; /* Bytes in zIndent[] */
+ u32 nIndent; /* Current level of indentation */
+};
+
+/* Append indentation to the pretty JSON under construction */
+static void jsonPrettyIndent(JsonPretty *pPretty){
+ u32 jj;
+ for(jj=0; jj<pPretty->nIndent; jj++){
+ jsonAppendRaw(pPretty->pOut, pPretty->zIndent, pPretty->szIndent);
+ }
+}
+
+/*
+** Translate the binary JSONB representation of JSON beginning at
+** pParse->aBlob[i] into a JSON text string. Append the JSON
+** text onto the end of pOut. Return the index in pParse->aBlob[]
+** of the first byte past the end of the element that is translated.
+**
+** This is a variant of jsonTranslateBlobToText() that "pretty-prints"
+** the output. Extra whitespace is inserted to make the JSON easier
+** for humans to read.
+**
+** If an error is detected in the BLOB input, the pOut->eErr flag
+** might get set to JSTRING_MALFORMED. But not all BLOB input errors
+** are detected. So a malformed JSONB input might either result
+** in an error, or in incorrect JSON.
+**
+** The pOut->eErr JSTRING_OOM flag is set on a OOM.
+*/
+static u32 jsonTranslateBlobToPrettyText(
+ JsonPretty *pPretty, /* Pretty-printing context */
+ u32 i /* Start rendering at this index */
+){
+ u32 sz, n, j, iEnd;
+ const JsonParse *pParse = pPretty->pParse;
+ JsonString *pOut = pPretty->pOut;
+ n = jsonbPayloadSize(pParse, i, &sz);
+ if( n==0 ){
+ pOut->eErr |= JSTRING_MALFORMED;
+ return pParse->nBlob+1;
+ }
+ switch( pParse->aBlob[i] & 0x0f ){
+ case JSONB_ARRAY: {
+ j = i+n;
+ iEnd = j+sz;
+ jsonAppendChar(pOut, '[');
+ if( j<iEnd ){
+ jsonAppendChar(pOut, '\n');
+ pPretty->nIndent++;
+ while( pOut->eErr==0 ){
+ jsonPrettyIndent(pPretty);
+ j = jsonTranslateBlobToPrettyText(pPretty, j);
+ if( j>=iEnd ) break;
+ jsonAppendRawNZ(pOut, ",\n", 2);
+ }
+ jsonAppendChar(pOut, '\n');
+ pPretty->nIndent--;
+ jsonPrettyIndent(pPretty);
+ }
+ jsonAppendChar(pOut, ']');
+ i = iEnd;
+ break;
+ }
+ case JSONB_OBJECT: {
+ j = i+n;
+ iEnd = j+sz;
+ jsonAppendChar(pOut, '{');
+ if( j<iEnd ){
+ jsonAppendChar(pOut, '\n');
+ pPretty->nIndent++;
+ while( pOut->eErr==0 ){
+ jsonPrettyIndent(pPretty);
+ j = jsonTranslateBlobToText(pParse, j, pOut);
+ if( j>iEnd ){
+ pOut->eErr |= JSTRING_MALFORMED;
+ break;
+ }
+ jsonAppendRawNZ(pOut, ": ", 2);
+ j = jsonTranslateBlobToPrettyText(pPretty, j);
+ if( j>=iEnd ) break;
+ jsonAppendRawNZ(pOut, ",\n", 2);
+ }
+ jsonAppendChar(pOut, '\n');
+ pPretty->nIndent--;
+ jsonPrettyIndent(pPretty);
+ }
+ jsonAppendChar(pOut, '}');
+ i = iEnd;
+ break;
+ }
+ default: {
+ i = jsonTranslateBlobToText(pParse, i, pOut);
+ break;
+ }
+ }
+ return i;
+}
+
+
/* Return true if the input pJson
**
** For performance reasons, this routine does not do a detailed check of the
@@ -206967,11 +208553,12 @@ static void jsonParseFunc(
if( p==0 ) return;
if( argc==1 ){
jsonDebugPrintBlob(p, 0, p->nBlob, 0, &out);
- sqlite3_result_text64(ctx, out.zText, out.nChar, SQLITE_DYNAMIC, SQLITE_UTF8);
+ sqlite3_result_text64(ctx,out.zText,out.nChar,SQLITE_TRANSIENT,SQLITE_UTF8);
}else{
jsonShowParse(p);
}
jsonParseFree(p);
+ sqlite3_str_reset(&out);
}
#endif /* SQLITE_DEBUG */
@@ -207070,13 +208657,6 @@ static void jsonArrayLengthFunc(
jsonParseFree(p);
}
-/* True if the string is all digits */
-static int jsonAllDigits(const char *z, int n){
- int i;
- for(i=0; i<n && sqlite3Isdigit(z[i]); i++){}
- return i==n;
-}
-
/* True if the string is all alphanumerics and underscores */
static int jsonAllAlphanum(const char *z, int n){
int i;
@@ -207141,7 +208721,7 @@ static void jsonExtractFunc(
** [NUMBER] ==> $[NUMBER] // Not PG. Purely for convenience
*/
jsonStringInit(&jx, ctx);
- if( jsonAllDigits(zPath, nPath) ){
+ if( sqlite3_value_type(argv[i])==SQLITE_INTEGER ){
jsonAppendRawNZ(&jx, "[", 1);
jsonAppendRaw(&jx, zPath, nPath);
jsonAppendRawNZ(&jx, "]", 2);
@@ -207636,6 +209216,40 @@ json_type_done:
}
/*
+** json_pretty(JSON)
+** json_pretty(JSON, INDENT)
+**
+** Return text that is a pretty-printed rendering of the input JSON.
+** If the argument is not valid JSON, return NULL.
+**
+** The INDENT argument is text that is used for indentation. If omitted,
+** it defaults to four spaces (the same as PostgreSQL).
+*/
+static void jsonPrettyFunc(
+ sqlite3_context *ctx,
+ int argc,
+ sqlite3_value **argv
+){
+ JsonString s; /* The output string */
+ JsonPretty x; /* Pretty printing context */
+
+ memset(&x, 0, sizeof(x));
+ x.pParse = jsonParseFuncArg(ctx, argv[0], 0);
+ if( x.pParse==0 ) return;
+ x.pOut = &s;
+ jsonStringInit(&s, ctx);
+ if( argc==1 || (x.zIndent = (const char*)sqlite3_value_text(argv[1]))==0 ){
+ x.zIndent = " ";
+ x.szIndent = 4;
+ }else{
+ x.szIndent = (u32)strlen(x.zIndent);
+ }
+ jsonTranslateBlobToPrettyText(&x, 0);
+ jsonReturnString(&s, 0, 0);
+ jsonParseFree(x.pParse);
+}
+
+/*
** json_valid(JSON)
** json_valid(JSON, FLAGS)
**
@@ -208649,6 +210263,8 @@ SQLITE_PRIVATE void sqlite3RegisterJsonFunctions(void){
JFUNCTION(jsonb_object, -1,0,1, 1,1,0, jsonObjectFunc),
JFUNCTION(json_patch, 2,1,1, 0,0,0, jsonPatchFunc),
JFUNCTION(jsonb_patch, 2,1,0, 0,1,0, jsonPatchFunc),
+ JFUNCTION(json_pretty, 1,1,0, 0,0,0, jsonPrettyFunc),
+ JFUNCTION(json_pretty, 2,1,0, 0,0,0, jsonPrettyFunc),
JFUNCTION(json_quote, 1,0,1, 1,0,0, jsonQuoteFunc),
JFUNCTION(json_remove, -1,1,1, 0,0,0, jsonRemoveFunc),
JFUNCTION(jsonb_remove, -1,1,0, 0,1,0, jsonRemoveFunc),
@@ -210548,6 +212164,8 @@ static int deserializeGeometry(sqlite3_value *pValue, RtreeConstraint *pCons){
return SQLITE_OK;
}
+SQLITE_PRIVATE int sqlite3IntFloatCompare(i64,double);
+
/*
** Rtree virtual table module xFilter method.
*/
@@ -210577,7 +212195,8 @@ static int rtreeFilter(
i64 iNode = 0;
int eType = sqlite3_value_numeric_type(argv[0]);
if( eType==SQLITE_INTEGER
- || (eType==SQLITE_FLOAT && sqlite3_value_double(argv[0])==iRowid)
+ || (eType==SQLITE_FLOAT
+ && 0==sqlite3IntFloatCompare(iRowid,sqlite3_value_double(argv[0])))
){
rc = findLeafNode(pRtree, iRowid, &pLeaf, &iNode);
}else{
@@ -211932,6 +213551,7 @@ constraint:
*/
static int rtreeBeginTransaction(sqlite3_vtab *pVtab){
Rtree *pRtree = (Rtree *)pVtab;
+ assert( pRtree->inWrTrans==0 );
pRtree->inWrTrans = 1;
return SQLITE_OK;
}
@@ -215486,7 +217106,7 @@ static void icuLoadCollation(
UCollator *pUCollator; /* ICU library collation object */
int rc; /* Return code from sqlite3_create_collation_x() */
- assert(nArg==2);
+ assert(nArg==2 || nArg==3);
(void)nArg; /* Unused parameter */
zLocale = (const char *)sqlite3_value_text(apArg[0]);
zName = (const char *)sqlite3_value_text(apArg[1]);
@@ -215501,7 +217121,39 @@ static void icuLoadCollation(
return;
}
assert(p);
-
+ if(nArg==3){
+ const char *zOption = (const char*)sqlite3_value_text(apArg[2]);
+ static const struct {
+ const char *zName;
+ UColAttributeValue val;
+ } aStrength[] = {
+ { "PRIMARY", UCOL_PRIMARY },
+ { "SECONDARY", UCOL_SECONDARY },
+ { "TERTIARY", UCOL_TERTIARY },
+ { "DEFAULT", UCOL_DEFAULT_STRENGTH },
+ { "QUARTERNARY", UCOL_QUATERNARY },
+ { "IDENTICAL", UCOL_IDENTICAL },
+ };
+ unsigned int i;
+ for(i=0; i<sizeof(aStrength)/sizeof(aStrength[0]); i++){
+ if( sqlite3_stricmp(zOption,aStrength[i].zName)==0 ){
+ ucol_setStrength(pUCollator, aStrength[i].val);
+ break;
+ }
+ }
+ if( i>=sizeof(aStrength)/sizeof(aStrength[0]) ){
+ sqlite3_str *pStr = sqlite3_str_new(sqlite3_context_db_handle(p));
+ sqlite3_str_appendf(pStr,
+ "unknown collation strength \"%s\" - should be one of:",
+ zOption);
+ for(i=0; i<sizeof(aStrength)/sizeof(aStrength[0]); i++){
+ sqlite3_str_appendf(pStr, " %s", aStrength[i].zName);
+ }
+ sqlite3_result_error(p, sqlite3_str_value(pStr), -1);
+ sqlite3_free(sqlite3_str_finish(pStr));
+ return;
+ }
+ }
rc = sqlite3_create_collation_v2(db, zName, SQLITE_UTF16, (void *)pUCollator,
icuCollationColl, icuCollationDel
);
@@ -215524,6 +217176,7 @@ SQLITE_PRIVATE int sqlite3IcuInit(sqlite3 *db){
void (*xFunc)(sqlite3_context*,int,sqlite3_value**);
} scalars[] = {
{"icu_load_collation",2,SQLITE_UTF8|SQLITE_DIRECTONLY,1, icuLoadCollation},
+ {"icu_load_collation",3,SQLITE_UTF8|SQLITE_DIRECTONLY,1, icuLoadCollation},
#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_ICU)
{"regexp", 2, SQLITE_ANY|SQLITEICU_EXTRAFLAGS, 0, icuRegexpFunc},
{"lower", 1, SQLITE_UTF16|SQLITEICU_EXTRAFLAGS, 0, icuCaseFunc16},
@@ -216674,6 +218327,7 @@ typedef unsigned int u32;
typedef unsigned short u16;
typedef unsigned char u8;
typedef sqlite3_int64 i64;
+typedef sqlite3_uint64 u64;
#endif
/*
@@ -217360,6 +219014,7 @@ static int rbuObjIterNext(sqlite3rbu *p, RbuObjIter *pIter){
if( rc!=SQLITE_ROW ){
rc = resetAndCollectError(pIter->pTblIter, &p->zErrmsg);
pIter->zTbl = 0;
+ pIter->zDataTbl = 0;
}else{
pIter->zTbl = (const char*)sqlite3_column_text(pIter->pTblIter, 0);
pIter->zDataTbl = (const char*)sqlite3_column_text(pIter->pTblIter,1);
@@ -219454,7 +221109,7 @@ static i64 rbuShmChecksum(sqlite3rbu *p){
u32 volatile *ptr;
p->rc = pDb->pMethods->xShmMap(pDb, 0, 32*1024, 0, (void volatile**)&ptr);
if( p->rc==SQLITE_OK ){
- iRet = ((i64)ptr[10] << 32) + ptr[11];
+ iRet = (i64)(((u64)ptr[10] << 32) + ptr[11]);
}
}
return iRet;
@@ -226925,14 +228580,14 @@ static int sessionChangesetNextOne(
p->rc = sessionInputBuffer(&p->in, 2);
if( p->rc!=SQLITE_OK ) return p->rc;
+ sessionDiscardData(&p->in);
+ p->in.iCurrent = p->in.iNext;
+
/* If the iterator is already at the end of the changeset, return DONE. */
if( p->in.iNext>=p->in.nData ){
return SQLITE_DONE;
}
- sessionDiscardData(&p->in);
- p->in.iCurrent = p->in.iNext;
-
op = p->in.aData[p->in.iNext++];
while( op=='T' || op=='P' ){
if( pbNew ) *pbNew = 1;
@@ -228667,6 +230322,7 @@ struct sqlite3_changegroup {
int rc; /* Error code */
int bPatch; /* True to accumulate patchsets */
SessionTable *pList; /* List of tables in current patch */
+ SessionBuffer rec;
sqlite3 *db; /* Configured by changegroup_schema() */
char *zDb; /* Configured by changegroup_schema() */
@@ -228965,108 +230621,128 @@ static int sessionChangesetExtendRecord(
}
/*
-** Add all changes in the changeset traversed by the iterator passed as
-** the first argument to the changegroup hash tables.
+** Locate or create a SessionTable object that may be used to add the
+** change currently pointed to by iterator pIter to changegroup pGrp.
+** If successful, set output variable (*ppTab) to point to the table
+** object and return SQLITE_OK. Otherwise, if some error occurs, return
+** an SQLite error code and leave (*ppTab) set to NULL.
*/
-static int sessionChangesetToHash(
- sqlite3_changeset_iter *pIter, /* Iterator to read from */
- sqlite3_changegroup *pGrp, /* Changegroup object to add changeset to */
- int bRebase /* True if hash table is for rebasing */
+static int sessionChangesetFindTable(
+ sqlite3_changegroup *pGrp,
+ const char *zTab,
+ sqlite3_changeset_iter *pIter,
+ SessionTable **ppTab
){
- u8 *aRec;
- int nRec;
int rc = SQLITE_OK;
SessionTable *pTab = 0;
- SessionBuffer rec = {0, 0, 0};
-
- while( SQLITE_ROW==sessionChangesetNext(pIter, &aRec, &nRec, 0) ){
- const char *zNew;
- int nCol;
- int op;
- int iHash;
- int bIndirect;
- SessionChange *pChange;
- SessionChange *pExist = 0;
- SessionChange **pp;
-
- /* Ensure that only changesets, or only patchsets, but not a mixture
- ** of both, are being combined. It is an error to try to combine a
- ** changeset and a patchset. */
- if( pGrp->pList==0 ){
- pGrp->bPatch = pIter->bPatchset;
- }else if( pIter->bPatchset!=pGrp->bPatch ){
- rc = SQLITE_ERROR;
- break;
- }
+ int nTab = (int)strlen(zTab);
+ u8 *abPK = 0;
+ int nCol = 0;
- sqlite3changeset_op(pIter, &zNew, &nCol, &op, &bIndirect);
- if( !pTab || sqlite3_stricmp(zNew, pTab->zName) ){
- /* Search the list for a matching table */
- int nNew = (int)strlen(zNew);
- u8 *abPK;
+ *ppTab = 0;
+ sqlite3changeset_pk(pIter, &abPK, &nCol);
- sqlite3changeset_pk(pIter, &abPK, 0);
- for(pTab = pGrp->pList; pTab; pTab=pTab->pNext){
- if( 0==sqlite3_strnicmp(pTab->zName, zNew, nNew+1) ) break;
- }
- if( !pTab ){
- SessionTable **ppTab;
+ /* Search the list for an existing table */
+ for(pTab = pGrp->pList; pTab; pTab=pTab->pNext){
+ if( 0==sqlite3_strnicmp(pTab->zName, zTab, nTab+1) ) break;
+ }
- pTab = sqlite3_malloc64(sizeof(SessionTable) + nCol + nNew+1);
- if( !pTab ){
- rc = SQLITE_NOMEM;
- break;
- }
- memset(pTab, 0, sizeof(SessionTable));
- pTab->nCol = nCol;
- pTab->abPK = (u8*)&pTab[1];
- memcpy(pTab->abPK, abPK, nCol);
- pTab->zName = (char*)&pTab->abPK[nCol];
- memcpy(pTab->zName, zNew, nNew+1);
-
- if( pGrp->db ){
- pTab->nCol = 0;
- rc = sessionInitTable(0, pTab, pGrp->db, pGrp->zDb);
- if( rc ){
- assert( pTab->azCol==0 );
- sqlite3_free(pTab);
- break;
- }
- }
+ /* If one was not found above, create a new table now */
+ if( !pTab ){
+ SessionTable **ppNew;
- /* The new object must be linked on to the end of the list, not
- ** simply added to the start of it. This is to ensure that the
- ** tables within the output of sqlite3changegroup_output() are in
- ** the right order. */
- for(ppTab=&pGrp->pList; *ppTab; ppTab=&(*ppTab)->pNext);
- *ppTab = pTab;
- }
+ pTab = sqlite3_malloc64(sizeof(SessionTable) + nCol + nTab+1);
+ if( !pTab ){
+ return SQLITE_NOMEM;
+ }
+ memset(pTab, 0, sizeof(SessionTable));
+ pTab->nCol = nCol;
+ pTab->abPK = (u8*)&pTab[1];
+ memcpy(pTab->abPK, abPK, nCol);
+ pTab->zName = (char*)&pTab->abPK[nCol];
+ memcpy(pTab->zName, zTab, nTab+1);
- if( !sessionChangesetCheckCompat(pTab, nCol, abPK) ){
- rc = SQLITE_SCHEMA;
- break;
+ if( pGrp->db ){
+ pTab->nCol = 0;
+ rc = sessionInitTable(0, pTab, pGrp->db, pGrp->zDb);
+ if( rc ){
+ assert( pTab->azCol==0 );
+ sqlite3_free(pTab);
+ return rc;
}
}
- if( nCol<pTab->nCol ){
- assert( pGrp->db );
- rc = sessionChangesetExtendRecord(pGrp, pTab, nCol, op, aRec, nRec, &rec);
- if( rc ) break;
- aRec = rec.aBuf;
- nRec = rec.nBuf;
- }
+ /* The new object must be linked on to the end of the list, not
+ ** simply added to the start of it. This is to ensure that the
+ ** tables within the output of sqlite3changegroup_output() are in
+ ** the right order. */
+ for(ppNew=&pGrp->pList; *ppNew; ppNew=&(*ppNew)->pNext);
+ *ppNew = pTab;
+ }
- if( sessionGrowHash(0, pIter->bPatchset, pTab) ){
- rc = SQLITE_NOMEM;
- break;
- }
+ /* Check that the table is compatible. */
+ if( !sessionChangesetCheckCompat(pTab, nCol, abPK) ){
+ rc = SQLITE_SCHEMA;
+ }
+
+ *ppTab = pTab;
+ return rc;
+}
+
+/*
+** Add the change currently indicated by iterator pIter to the hash table
+** belonging to changegroup pGrp.
+*/
+static int sessionOneChangeToHash(
+ sqlite3_changegroup *pGrp,
+ sqlite3_changeset_iter *pIter,
+ int bRebase
+){
+ int rc = SQLITE_OK;
+ int nCol = 0;
+ int op = 0;
+ int iHash = 0;
+ int bIndirect = 0;
+ SessionChange *pChange = 0;
+ SessionChange *pExist = 0;
+ SessionChange **pp = 0;
+ SessionTable *pTab = 0;
+ u8 *aRec = &pIter->in.aData[pIter->in.iCurrent + 2];
+ int nRec = (pIter->in.iNext - pIter->in.iCurrent) - 2;
+
+ /* Ensure that only changesets, or only patchsets, but not a mixture
+ ** of both, are being combined. It is an error to try to combine a
+ ** changeset and a patchset. */
+ if( pGrp->pList==0 ){
+ pGrp->bPatch = pIter->bPatchset;
+ }else if( pIter->bPatchset!=pGrp->bPatch ){
+ rc = SQLITE_ERROR;
+ }
+
+ if( rc==SQLITE_OK ){
+ const char *zTab = 0;
+ sqlite3changeset_op(pIter, &zTab, &nCol, &op, &bIndirect);
+ rc = sessionChangesetFindTable(pGrp, zTab, pIter, &pTab);
+ }
+
+ if( rc==SQLITE_OK && nCol<pTab->nCol ){
+ SessionBuffer *pBuf = &pGrp->rec;
+ rc = sessionChangesetExtendRecord(pGrp, pTab, nCol, op, aRec, nRec, pBuf);
+ aRec = pBuf->aBuf;
+ nRec = pBuf->nBuf;
+ assert( pGrp->db );
+ }
+
+ if( rc==SQLITE_OK && sessionGrowHash(0, pIter->bPatchset, pTab) ){
+ rc = SQLITE_NOMEM;
+ }
+
+ if( rc==SQLITE_OK ){
+ /* Search for existing entry. If found, remove it from the hash table.
+ ** Code below may link it back in. */
iHash = sessionChangeHash(
pTab, (pIter->bPatchset && op==SQLITE_DELETE), aRec, pTab->nChange
);
-
- /* Search for existing entry. If found, remove it from the hash table.
- ** Code below may link it back in.
- */
for(pp=&pTab->apChange[iHash]; *pp; pp=&(*pp)->pNext){
int bPkOnly1 = 0;
int bPkOnly2 = 0;
@@ -229081,19 +230757,41 @@ static int sessionChangesetToHash(
break;
}
}
+ }
+ if( rc==SQLITE_OK ){
rc = sessionChangeMerge(pTab, bRebase,
pIter->bPatchset, pExist, op, bIndirect, aRec, nRec, &pChange
);
- if( rc ) break;
- if( pChange ){
- pChange->pNext = pTab->apChange[iHash];
- pTab->apChange[iHash] = pChange;
- pTab->nEntry++;
- }
+ }
+ if( rc==SQLITE_OK && pChange ){
+ pChange->pNext = pTab->apChange[iHash];
+ pTab->apChange[iHash] = pChange;
+ pTab->nEntry++;
+ }
+
+ if( rc==SQLITE_OK ) rc = pIter->rc;
+ return rc;
+}
+
+/*
+** Add all changes in the changeset traversed by the iterator passed as
+** the first argument to the changegroup hash tables.
+*/
+static int sessionChangesetToHash(
+ sqlite3_changeset_iter *pIter, /* Iterator to read from */
+ sqlite3_changegroup *pGrp, /* Changegroup object to add changeset to */
+ int bRebase /* True if hash table is for rebasing */
+){
+ u8 *aRec;
+ int nRec;
+ int rc = SQLITE_OK;
+
+ while( SQLITE_ROW==(sessionChangesetNext(pIter, &aRec, &nRec, 0)) ){
+ rc = sessionOneChangeToHash(pGrp, pIter, bRebase);
+ if( rc!=SQLITE_OK ) break;
}
- sqlite3_free(rec.aBuf);
if( rc==SQLITE_OK ) rc = pIter->rc;
return rc;
}
@@ -229222,6 +230920,23 @@ SQLITE_API int sqlite3changegroup_add(sqlite3_changegroup *pGrp, int nData, void
}
/*
+** Add a single change to a changeset-group.
+*/
+SQLITE_API int sqlite3changegroup_add_change(
+ sqlite3_changegroup *pGrp,
+ sqlite3_changeset_iter *pIter
+){
+ if( pIter->in.iCurrent==pIter->in.iNext
+ || pIter->rc!=SQLITE_OK
+ || pIter->bInvert
+ ){
+ /* Iterator does not point to any valid entry or is an INVERT iterator. */
+ return SQLITE_ERROR;
+ }
+ return sessionOneChangeToHash(pGrp, pIter, 0);
+}
+
+/*
** Obtain a buffer containing a changeset representing the concatenation
** of all changesets added to the group so far.
*/
@@ -229270,6 +230985,7 @@ SQLITE_API void sqlite3changegroup_delete(sqlite3_changegroup *pGrp){
if( pGrp ){
sqlite3_free(pGrp->zDb);
sessionDeleteTable(0, pGrp->pList);
+ sqlite3_free(pGrp->rec.aBuf);
sqlite3_free(pGrp);
}
}
@@ -229671,6 +231387,7 @@ SQLITE_API int sqlite3rebaser_rebase_strm(
SQLITE_API void sqlite3rebaser_delete(sqlite3_rebaser *p){
if( p ){
sessionDeleteTable(0, p->grp.pList);
+ sqlite3_free(p->grp.rec.aBuf);
sqlite3_free(p);
}
}
@@ -229768,8 +231485,8 @@ struct Fts5PhraseIter {
** EXTENSION API FUNCTIONS
**
** xUserData(pFts):
-** Return a copy of the context pointer the extension function was
-** registered with.
+** Return a copy of the pUserData pointer passed to the xCreateFunction()
+** API when the extension function was registered.
**
** xColumnTotalSize(pFts, iCol, pnToken):
** If parameter iCol is less than zero, set output variable *pnToken
@@ -231365,6 +233082,9 @@ static void sqlite3Fts5UnicodeAscii(u8*, u8*);
** sqlite3Fts5ParserARG_STORE Code to store %extra_argument into fts5yypParser
** sqlite3Fts5ParserARG_FETCH Code to extract %extra_argument from fts5yypParser
** sqlite3Fts5ParserCTX_* As sqlite3Fts5ParserARG_ except for %extra_context
+** fts5YYREALLOC Name of the realloc() function to use
+** fts5YYFREE Name of the free() function to use
+** fts5YYDYNSTACK True if stack space should be extended on heap
** fts5YYERRORSYMBOL is the code number of the error symbol. If not
** defined, then do no error processing.
** fts5YYNSTATE the combined number of states.
@@ -231378,6 +233098,8 @@ static void sqlite3Fts5UnicodeAscii(u8*, u8*);
** fts5YY_NO_ACTION The fts5yy_action[] code for no-op
** fts5YY_MIN_REDUCE Minimum value for reduce actions
** fts5YY_MAX_REDUCE Maximum value for reduce actions
+** fts5YY_MIN_DSTRCTR Minimum symbol value that has a destructor
+** fts5YY_MAX_DSTRCTR Maximum symbol value that has a destructor
*/
#ifndef INTERFACE
# define INTERFACE 1
@@ -231404,6 +233126,9 @@ typedef union {
#define sqlite3Fts5ParserARG_PARAM ,pParse
#define sqlite3Fts5ParserARG_FETCH Fts5Parse *pParse=fts5yypParser->pParse;
#define sqlite3Fts5ParserARG_STORE fts5yypParser->pParse=pParse;
+#define fts5YYREALLOC realloc
+#define fts5YYFREE free
+#define fts5YYDYNSTACK 0
#define sqlite3Fts5ParserCTX_SDECL
#define sqlite3Fts5ParserCTX_PDECL
#define sqlite3Fts5ParserCTX_PARAM
@@ -231421,6 +233146,8 @@ typedef union {
#define fts5YY_NO_ACTION 82
#define fts5YY_MIN_REDUCE 83
#define fts5YY_MAX_REDUCE 110
+#define fts5YY_MIN_DSTRCTR 16
+#define fts5YY_MAX_DSTRCTR 24
/************* End control #defines *******************************************/
#define fts5YY_NLOOKAHEAD ((int)(sizeof(fts5yy_lookahead)/sizeof(fts5yy_lookahead[0])))
@@ -231436,6 +233163,22 @@ typedef union {
# define fts5yytestcase(X)
#endif
+/* Macro to determine if stack space has the ability to grow using
+** heap memory.
+*/
+#if fts5YYSTACKDEPTH<=0 || fts5YYDYNSTACK
+# define fts5YYGROWABLESTACK 1
+#else
+# define fts5YYGROWABLESTACK 0
+#endif
+
+/* Guarantee a minimum number of initial stack slots.
+*/
+#if fts5YYSTACKDEPTH<=0
+# undef fts5YYSTACKDEPTH
+# define fts5YYSTACKDEPTH 2 /* Need a minimum stack size */
+#endif
+
/* Next are the tables used to determine what action to take based on the
** current state and lookahead token. These tables are used to implement
@@ -231596,14 +233339,9 @@ struct fts5yyParser {
#endif
sqlite3Fts5ParserARG_SDECL /* A place to hold %extra_argument */
sqlite3Fts5ParserCTX_SDECL /* A place to hold %extra_context */
-#if fts5YYSTACKDEPTH<=0
- int fts5yystksz; /* Current side of the stack */
- fts5yyStackEntry *fts5yystack; /* The parser's stack */
- fts5yyStackEntry fts5yystk0; /* First stack entry */
-#else
- fts5yyStackEntry fts5yystack[fts5YYSTACKDEPTH]; /* The parser's stack */
- fts5yyStackEntry *fts5yystackEnd; /* Last entry in the stack */
-#endif
+ fts5yyStackEntry *fts5yystackEnd; /* Last entry in the stack */
+ fts5yyStackEntry *fts5yystack; /* The parser stack */
+ fts5yyStackEntry fts5yystk0[fts5YYSTACKDEPTH]; /* Initial stack space */
};
typedef struct fts5yyParser fts5yyParser;
@@ -231710,37 +233448,45 @@ static const char *const fts5yyRuleName[] = {
#endif /* NDEBUG */
-#if fts5YYSTACKDEPTH<=0
+#if fts5YYGROWABLESTACK
/*
** Try to increase the size of the parser stack. Return the number
** of errors. Return 0 on success.
*/
static int fts5yyGrowStack(fts5yyParser *p){
+ int oldSize = 1 + (int)(p->fts5yystackEnd - p->fts5yystack);
int newSize;
int idx;
fts5yyStackEntry *pNew;
- newSize = p->fts5yystksz*2 + 100;
- idx = p->fts5yytos ? (int)(p->fts5yytos - p->fts5yystack) : 0;
- if( p->fts5yystack==&p->fts5yystk0 ){
- pNew = malloc(newSize*sizeof(pNew[0]));
- if( pNew ) pNew[0] = p->fts5yystk0;
+ newSize = oldSize*2 + 100;
+ idx = (int)(p->fts5yytos - p->fts5yystack);
+ if( p->fts5yystack==p->fts5yystk0 ){
+ pNew = fts5YYREALLOC(0, newSize*sizeof(pNew[0]));
+ if( pNew==0 ) return 1;
+ memcpy(pNew, p->fts5yystack, oldSize*sizeof(pNew[0]));
}else{
- pNew = realloc(p->fts5yystack, newSize*sizeof(pNew[0]));
+ pNew = fts5YYREALLOC(p->fts5yystack, newSize*sizeof(pNew[0]));
+ if( pNew==0 ) return 1;
}
- if( pNew ){
- p->fts5yystack = pNew;
- p->fts5yytos = &p->fts5yystack[idx];
+ p->fts5yystack = pNew;
+ p->fts5yytos = &p->fts5yystack[idx];
#ifndef NDEBUG
- if( fts5yyTraceFILE ){
- fprintf(fts5yyTraceFILE,"%sStack grows from %d to %d entries.\n",
- fts5yyTracePrompt, p->fts5yystksz, newSize);
- }
-#endif
- p->fts5yystksz = newSize;
+ if( fts5yyTraceFILE ){
+ fprintf(fts5yyTraceFILE,"%sStack grows from %d to %d entries.\n",
+ fts5yyTracePrompt, oldSize, newSize);
}
- return pNew==0;
+#endif
+ p->fts5yystackEnd = &p->fts5yystack[newSize-1];
+ return 0;
}
+#endif /* fts5YYGROWABLESTACK */
+
+#if !fts5YYGROWABLESTACK
+/* For builds that do no have a growable stack, fts5yyGrowStack always
+** returns an error.
+*/
+# define fts5yyGrowStack(X) 1
#endif
/* Datatype of the argument to the memory allocated passed as the
@@ -231760,24 +233506,14 @@ static void sqlite3Fts5ParserInit(void *fts5yypRawParser sqlite3Fts5ParserCTX_PD
#ifdef fts5YYTRACKMAXSTACKDEPTH
fts5yypParser->fts5yyhwm = 0;
#endif
-#if fts5YYSTACKDEPTH<=0
- fts5yypParser->fts5yytos = NULL;
- fts5yypParser->fts5yystack = NULL;
- fts5yypParser->fts5yystksz = 0;
- if( fts5yyGrowStack(fts5yypParser) ){
- fts5yypParser->fts5yystack = &fts5yypParser->fts5yystk0;
- fts5yypParser->fts5yystksz = 1;
- }
-#endif
+ fts5yypParser->fts5yystack = fts5yypParser->fts5yystk0;
+ fts5yypParser->fts5yystackEnd = &fts5yypParser->fts5yystack[fts5YYSTACKDEPTH-1];
#ifndef fts5YYNOERRORRECOVERY
fts5yypParser->fts5yyerrcnt = -1;
#endif
fts5yypParser->fts5yytos = fts5yypParser->fts5yystack;
fts5yypParser->fts5yystack[0].stateno = 0;
fts5yypParser->fts5yystack[0].major = 0;
-#if fts5YYSTACKDEPTH>0
- fts5yypParser->fts5yystackEnd = &fts5yypParser->fts5yystack[fts5YYSTACKDEPTH-1];
-#endif
}
#ifndef sqlite3Fts5Parser_ENGINEALWAYSONSTACK
@@ -231891,9 +233627,26 @@ static void fts5yy_pop_parser_stack(fts5yyParser *pParser){
*/
static void sqlite3Fts5ParserFinalize(void *p){
fts5yyParser *pParser = (fts5yyParser*)p;
- while( pParser->fts5yytos>pParser->fts5yystack ) fts5yy_pop_parser_stack(pParser);
-#if fts5YYSTACKDEPTH<=0
- if( pParser->fts5yystack!=&pParser->fts5yystk0 ) free(pParser->fts5yystack);
+
+ /* In-lined version of calling fts5yy_pop_parser_stack() for each
+ ** element left in the stack */
+ fts5yyStackEntry *fts5yytos = pParser->fts5yytos;
+ while( fts5yytos>pParser->fts5yystack ){
+#ifndef NDEBUG
+ if( fts5yyTraceFILE ){
+ fprintf(fts5yyTraceFILE,"%sPopping %s\n",
+ fts5yyTracePrompt,
+ fts5yyTokenName[fts5yytos->major]);
+ }
+#endif
+ if( fts5yytos->major>=fts5YY_MIN_DSTRCTR ){
+ fts5yy_destructor(pParser, fts5yytos->major, &fts5yytos->minor);
+ }
+ fts5yytos--;
+ }
+
+#if fts5YYGROWABLESTACK
+ if( pParser->fts5yystack!=pParser->fts5yystk0 ) fts5YYFREE(pParser->fts5yystack);
#endif
}
@@ -232120,25 +233873,19 @@ static void fts5yy_shift(
assert( fts5yypParser->fts5yyhwm == (int)(fts5yypParser->fts5yytos - fts5yypParser->fts5yystack) );
}
#endif
-#if fts5YYSTACKDEPTH>0
- if( fts5yypParser->fts5yytos>fts5yypParser->fts5yystackEnd ){
- fts5yypParser->fts5yytos--;
- fts5yyStackOverflow(fts5yypParser);
- return;
- }
-#else
- if( fts5yypParser->fts5yytos>=&fts5yypParser->fts5yystack[fts5yypParser->fts5yystksz] ){
+ fts5yytos = fts5yypParser->fts5yytos;
+ if( fts5yytos>fts5yypParser->fts5yystackEnd ){
if( fts5yyGrowStack(fts5yypParser) ){
fts5yypParser->fts5yytos--;
fts5yyStackOverflow(fts5yypParser);
return;
}
+ fts5yytos = fts5yypParser->fts5yytos;
+ assert( fts5yytos <= fts5yypParser->fts5yystackEnd );
}
-#endif
if( fts5yyNewState > fts5YY_MAX_SHIFT ){
fts5yyNewState += fts5YY_MIN_REDUCE - fts5YY_MIN_SHIFTREDUCE;
}
- fts5yytos = fts5yypParser->fts5yytos;
fts5yytos->stateno = fts5yyNewState;
fts5yytos->major = fts5yyMajor;
fts5yytos->minor.fts5yy0 = fts5yyMinor;
@@ -232575,19 +234322,12 @@ static void sqlite3Fts5Parser(
(int)(fts5yypParser->fts5yytos - fts5yypParser->fts5yystack));
}
#endif
-#if fts5YYSTACKDEPTH>0
if( fts5yypParser->fts5yytos>=fts5yypParser->fts5yystackEnd ){
- fts5yyStackOverflow(fts5yypParser);
- break;
- }
-#else
- if( fts5yypParser->fts5yytos>=&fts5yypParser->fts5yystack[fts5yypParser->fts5yystksz-1] ){
if( fts5yyGrowStack(fts5yypParser) ){
fts5yyStackOverflow(fts5yypParser);
break;
}
}
-#endif
}
fts5yyact = fts5yy_reduce(fts5yypParser,fts5yyruleno,fts5yymajor,fts5yyminor sqlite3Fts5ParserCTX_PARAM);
}else if( fts5yyact <= fts5YY_MAX_SHIFTREDUCE ){
@@ -250799,7 +252539,7 @@ static void fts5SourceIdFunc(
){
assert( nArg==0 );
UNUSED_PARAM2(nArg, apUnused);
- sqlite3_result_text(pCtx, "fts5: 2024-04-15 13:34:05 8653b758870e6ef0c98d46b3ace27849054af85da891eb121e9aaa537f1e8355", -1, SQLITE_TRANSIENT);
+ sqlite3_result_text(pCtx, "fts5: 2024-05-23 13:25:27 96c92aba00c8375bc32fafcdf12429c58bd8aabfcadab6683e35bbb9cdebf19e", -1, SQLITE_TRANSIENT);
}
/*
@@ -250838,6 +252578,7 @@ static int fts5IntegrityMethod(
if( (rc&0xff)==SQLITE_CORRUPT ){
*pzErr = sqlite3_mprintf("malformed inverted index for FTS5 table %s.%s",
zSchema, zTabname);
+ rc = (*pzErr) ? SQLITE_OK : SQLITE_NOMEM;
}else if( rc!=SQLITE_OK ){
*pzErr = sqlite3_mprintf("unable to validate the inverted index for"
" FTS5 table %s.%s: %s",
@@ -250845,7 +252586,7 @@ static int fts5IntegrityMethod(
}
sqlite3Fts5IndexCloseReader(pTab->p.pIndex);
- return SQLITE_OK;
+ return rc;
}
static int fts5Init(sqlite3 *db){
diff --git a/src/3rdparty/sqlite/sqlite3.h b/src/3rdparty/sqlite/sqlite3.h
index 2618b37a7b..57df8dcf20 100644
--- a/src/3rdparty/sqlite/sqlite3.h
+++ b/src/3rdparty/sqlite/sqlite3.h
@@ -146,9 +146,9 @@ extern "C" {
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
** [sqlite_version()] and [sqlite_source_id()].
*/
-#define SQLITE_VERSION "3.45.3"
-#define SQLITE_VERSION_NUMBER 3045003
-#define SQLITE_SOURCE_ID "2024-04-15 13:34:05 8653b758870e6ef0c98d46b3ace27849054af85da891eb121e9aaa537f1e8355"
+#define SQLITE_VERSION "3.46.0"
+#define SQLITE_VERSION_NUMBER 3046000
+#define SQLITE_SOURCE_ID "2024-05-23 13:25:27 96c92aba00c8375bc32fafcdf12429c58bd8aabfcadab6683e35bbb9cdebf19e"
/*
** CAPI3REF: Run-Time Library Version Numbers
@@ -764,11 +764,11 @@ struct sqlite3_file {
** </ul>
** xLock() upgrades the database file lock. In other words, xLock() moves the
** database file lock in the direction NONE toward EXCLUSIVE. The argument to
-** xLock() is always on of SHARED, RESERVED, PENDING, or EXCLUSIVE, never
+** xLock() is always one of SHARED, RESERVED, PENDING, or EXCLUSIVE, never
** SQLITE_LOCK_NONE. If the database file lock is already at or above the
** requested lock, then the call to xLock() is a no-op.
** xUnlock() downgrades the database file lock to either SHARED or NONE.
-* If the lock is already at or below the requested lock state, then the call
+** If the lock is already at or below the requested lock state, then the call
** to xUnlock() is a no-op.
** The xCheckReservedLock() method checks whether any database connection,
** either in this process or in some other process, is holding a RESERVED,
@@ -3305,8 +3305,8 @@ SQLITE_API int sqlite3_set_authorizer(
#define SQLITE_RECURSIVE 33 /* NULL NULL */
/*
-** CAPI3REF: Tracing And Profiling Functions
-** METHOD: sqlite3
+** CAPI3REF: Deprecated Tracing And Profiling Functions
+** DEPRECATED
**
** These routines are deprecated. Use the [sqlite3_trace_v2()] interface
** instead of the routines described here.
@@ -6887,6 +6887,12 @@ SQLITE_API int sqlite3_autovacuum_pages(
** The exceptions defined in this paragraph might change in a future
** release of SQLite.
**
+** Whether the update hook is invoked before or after the
+** corresponding change is currently unspecified and may differ
+** depending on the type of change. Do not rely on the order of the
+** hook call with regards to the final result of the operation which
+** triggers the hook.
+**
** The update hook implementation must not do anything that will modify
** the database connection that invoked the update hook. Any actions
** to modify the database connection must be deferred until after the
@@ -8357,7 +8363,7 @@ SQLITE_API int sqlite3_test_control(int op, ...);
** The sqlite3_keyword_count() interface returns the number of distinct
** keywords understood by SQLite.
**
-** The sqlite3_keyword_name(N,Z,L) interface finds the N-th keyword and
+** The sqlite3_keyword_name(N,Z,L) interface finds the 0-based N-th keyword and
** makes *Z point to that keyword expressed as UTF8 and writes the number
** of bytes in the keyword into *L. The string that *Z points to is not
** zero-terminated. The sqlite3_keyword_name(N,Z,L) routine returns
@@ -9936,24 +9942,45 @@ SQLITE_API const char *sqlite3_vtab_collation(sqlite3_index_info*,int);
** <li value="2"><p>
** ^(If the sqlite3_vtab_distinct() interface returns 2, that means
** that the query planner does not need the rows returned in any particular
-** order, as long as rows with the same values in all "aOrderBy" columns
-** are adjacent.)^ ^(Furthermore, only a single row for each particular
-** combination of values in the columns identified by the "aOrderBy" field
-** needs to be returned.)^ ^It is always ok for two or more rows with the same
-** values in all "aOrderBy" columns to be returned, as long as all such rows
-** are adjacent. ^The virtual table may, if it chooses, omit extra rows
-** that have the same value for all columns identified by "aOrderBy".
-** ^However omitting the extra rows is optional.
+** order, as long as rows with the same values in all columns identified
+** by "aOrderBy" are adjacent.)^ ^(Furthermore, when two or more rows
+** contain the same values for all columns identified by "colUsed", all but
+** one such row may optionally be omitted from the result.)^
+** The virtual table is not required to omit rows that are duplicates
+** over the "colUsed" columns, but if the virtual table can do that without
+** too much extra effort, it could potentially help the query to run faster.
** This mode is used for a DISTINCT query.
** <li value="3"><p>
-** ^(If the sqlite3_vtab_distinct() interface returns 3, that means
-** that the query planner needs only distinct rows but it does need the
-** rows to be sorted.)^ ^The virtual table implementation is free to omit
-** rows that are identical in all aOrderBy columns, if it wants to, but
-** it is not required to omit any rows. This mode is used for queries
+** ^(If the sqlite3_vtab_distinct() interface returns 3, that means the
+** virtual table must return rows in the order defined by "aOrderBy" as
+** if the sqlite3_vtab_distinct() interface had returned 0. However if
+** two or more rows in the result have the same values for all columns
+** identified by "colUsed", then all but one such row may optionally be
+** omitted.)^ Like when the return value is 2, the virtual table
+** is not required to omit rows that are duplicates over the "colUsed"
+** columns, but if the virtual table can do that without
+** too much extra effort, it could potentially help the query to run faster.
+** This mode is used for queries
** that have both DISTINCT and ORDER BY clauses.
** </ol>
**
+** <p>The following table summarizes the conditions under which the
+** virtual table is allowed to set the "orderByConsumed" flag based on
+** the value returned by sqlite3_vtab_distinct(). This table is a
+** restatement of the previous four paragraphs:
+**
+** <table border=1 cellspacing=0 cellpadding=10 width="90%">
+** <tr>
+** <td valign="top">sqlite3_vtab_distinct() return value
+** <td valign="top">Rows are returned in aOrderBy order
+** <td valign="top">Rows with the same value in all aOrderBy columns are adjacent
+** <td valign="top">Duplicates over all colUsed columns may be omitted
+** <tr><td>0<td>yes<td>yes<td>no
+** <tr><td>1<td>no<td>yes<td>no
+** <tr><td>2<td>no<td>yes<td>yes
+** <tr><td>3<td>yes<td>yes<td>yes
+** </table>
+**
** ^For the purposes of comparing virtual table output values to see if the
** values are same value for sorting purposes, two NULL values are considered
** to be the same. In other words, the comparison operator is "IS"
@@ -11999,6 +12026,30 @@ SQLITE_API int sqlite3changegroup_schema(sqlite3_changegroup*, sqlite3*, const c
SQLITE_API int sqlite3changegroup_add(sqlite3_changegroup*, int nData, void *pData);
/*
+** CAPI3REF: Add A Single Change To A Changegroup
+** METHOD: sqlite3_changegroup
+**
+** This function adds the single change currently indicated by the iterator
+** passed as the second argument to the changegroup object. The rules for
+** adding the change are just as described for [sqlite3changegroup_add()].
+**
+** If the change is successfully added to the changegroup, SQLITE_OK is
+** returned. Otherwise, an SQLite error code is returned.
+**
+** The iterator must point to a valid entry when this function is called.
+** If it does not, SQLITE_ERROR is returned and no change is added to the
+** changegroup. Additionally, the iterator must not have been opened with
+** the SQLITE_CHANGESETAPPLY_INVERT flag. In this case SQLITE_ERROR is also
+** returned.
+*/
+SQLITE_API int sqlite3changegroup_add_change(
+ sqlite3_changegroup*,
+ sqlite3_changeset_iter*
+);
+
+
+
+/*
** CAPI3REF: Obtain A Composite Changeset From A Changegroup
** METHOD: sqlite3_changegroup
**
@@ -12802,8 +12853,8 @@ struct Fts5PhraseIter {
** EXTENSION API FUNCTIONS
**
** xUserData(pFts):
-** Return a copy of the context pointer the extension function was
-** registered with.
+** Return a copy of the pUserData pointer passed to the xCreateFunction()
+** API when the extension function was registered.
**
** xColumnTotalSize(pFts, iCol, pnToken):
** If parameter iCol is less than zero, set output variable *pnToken