diff --git a/Import/GacUI.cpp b/Import/GacUI.cpp index ecb112cc..5f914b77 100644 --- a/Import/GacUI.cpp +++ b/Import/GacUI.cpp @@ -2941,7 +2941,6 @@ GuiSolidBorderElement GuiSolidBorderElement::GuiSolidBorderElement() :color(0, 0, 0) - ,shape(ElementShape::Rectangle) { } @@ -2969,44 +2968,6 @@ GuiSolidBorderElement shape=value; } -/*********************************************************************** -GuiRoundBorderElement -***********************************************************************/ - - GuiRoundBorderElement::GuiRoundBorderElement() - :color(0, 0, 0) - ,radius(10) - { - } - - Color GuiRoundBorderElement::GetColor() - { - return color; - } - - void GuiRoundBorderElement::SetColor(Color value) - { - if(color!=value) - { - color=value; - InvokeOnElementStateChanged(); - } - } - - vint GuiRoundBorderElement::GetRadius() - { - return radius; - } - - void GuiRoundBorderElement::SetRadius(vint value) - { - if(radius!=value) - { - radius=value; - InvokeOnElementStateChanged(); - } - } - /*********************************************************************** Gui3DBorderElement ***********************************************************************/ @@ -3104,7 +3065,6 @@ GuiSolidBackgroundElement GuiSolidBackgroundElement::GuiSolidBackgroundElement() :color(255, 255, 255) - ,shape(ElementShape::Rectangle) { } @@ -3138,7 +3098,6 @@ GuiGradientBackgroundElement GuiGradientBackgroundElement::GuiGradientBackgroundElement() :direction(Horizontal) - ,shape(ElementShape::Rectangle) { } @@ -3196,6 +3155,54 @@ GuiGradientBackgroundElement shape=value; } +/*********************************************************************** +GuiRadialGradientBackgroundElement +***********************************************************************/ + + GuiRadialGradientBackgroundElement::GuiRadialGradientBackgroundElement() + { + } + + Color GuiRadialGradientBackgroundElement::GetColor1() + { + return color1; + } + + void GuiRadialGradientBackgroundElement::SetColor1(Color value) + { + SetColors(value, color2); + } + + Color GuiRadialGradientBackgroundElement::GetColor2() + { + return color2; + } + + void GuiRadialGradientBackgroundElement::SetColor2(Color value) + { + SetColors(color1, value); + } + + void GuiRadialGradientBackgroundElement::SetColors(Color value1, Color value2) + { + if(color1!=value1 || color2!=value2) + { + color1=value1; + color2=value2; + InvokeOnElementStateChanged(); + } + } + + ElementShape GuiRadialGradientBackgroundElement::GetShape() + { + return shape; + } + + void GuiRadialGradientBackgroundElement::SetShape(ElementShape value) + { + shape=value; + } + /*********************************************************************** GuiSolidLabelElement ***********************************************************************/ @@ -12937,7 +12944,6 @@ GuiTemplate GuiTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_IMPL) GuiTemplate::GuiTemplate() - :VisuallyEnabled_(true) { GuiTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_EVENT_INIT) } @@ -12948,392 +12954,7 @@ GuiTemplate } /*********************************************************************** -GuiControlTemplate -***********************************************************************/ - - GuiControlTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_IMPL) - - GuiControlTemplate::GuiControlTemplate() - :ContainerComposition_(this) - , FocusableComposition_(0) - { - GuiControlTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_EVENT_INIT) - } - - GuiControlTemplate::~GuiControlTemplate() - { - FinalizeAggregation(); - } - -/*********************************************************************** -GuiLabelTemplate -***********************************************************************/ - - GuiLabelTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_IMPL) - - GuiLabelTemplate::GuiLabelTemplate() - { - GuiLabelTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_EVENT_INIT) - } - - GuiLabelTemplate::~GuiLabelTemplate() - { - FinalizeAggregation(); - } - -/*********************************************************************** -GuiSinglelineTextBoxTemplate -***********************************************************************/ - - GuiSinglelineTextBoxTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_IMPL) - - GuiSinglelineTextBoxTemplate::GuiSinglelineTextBoxTemplate() - { - GuiSinglelineTextBoxTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_EVENT_INIT) - } - - GuiSinglelineTextBoxTemplate::~GuiSinglelineTextBoxTemplate() - { - FinalizeAggregation(); - } - -/*********************************************************************** -GuiDocumentLabelTemplate -***********************************************************************/ - - GuiDocumentLabelTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_IMPL) - - GuiDocumentLabelTemplate::GuiDocumentLabelTemplate() - { - GuiDocumentLabelTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_EVENT_INIT) - } - - GuiDocumentLabelTemplate::~GuiDocumentLabelTemplate() - { - FinalizeAggregation(); - } - -/*********************************************************************** -GuiMenuTemplate -***********************************************************************/ - - GuiMenuTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_IMPL) - - GuiMenuTemplate::GuiMenuTemplate() - { - GuiMenuTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_EVENT_INIT) - } - - GuiMenuTemplate::~GuiMenuTemplate() - { - FinalizeAggregation(); - } - -/*********************************************************************** -GuiWindowTemplate -***********************************************************************/ - - GuiWindowTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_IMPL) - - GuiWindowTemplate::GuiWindowTemplate() - :MaximizedBoxOption_(BoolOption::Customizable) - , MinimizedBoxOption_(BoolOption::Customizable) - , BorderOption_(BoolOption::Customizable) - , SizeBoxOption_(BoolOption::Customizable) - , IconVisibleOption_(BoolOption::Customizable) - , TitleBarOption_(BoolOption::Customizable) - , MaximizedBox_(true) - , MinimizedBox_(true) - , Border_(true) - , SizeBox_(true) - , IconVisible_(true) - , TitleBar_(true) - , CustomizedBorder_(false) - , Maximized_(false) - , CustomFrameEnabled_(true) - { - GuiWindowTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_EVENT_INIT) - } - - GuiWindowTemplate::~GuiWindowTemplate() - { - FinalizeAggregation(); - } - -/*********************************************************************** -GuiButtonTemplate -***********************************************************************/ - - GuiButtonTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_IMPL) - - GuiButtonTemplate::GuiButtonTemplate() - :State_(ButtonState::Normal) - { - GuiButtonTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_EVENT_INIT) - } - - GuiButtonTemplate::~GuiButtonTemplate() - { - FinalizeAggregation(); - } - -/*********************************************************************** -GuiSelectableButtonTemplate -***********************************************************************/ - - GuiSelectableButtonTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_IMPL) - - GuiSelectableButtonTemplate::GuiSelectableButtonTemplate() - :Selected_(false) - { - GuiSelectableButtonTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_EVENT_INIT) - } - - GuiSelectableButtonTemplate::~GuiSelectableButtonTemplate() - { - FinalizeAggregation(); - } - -/*********************************************************************** -GuiToolstripButtonTemplate -***********************************************************************/ - - GuiToolstripButtonTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_IMPL) - - GuiToolstripButtonTemplate::GuiToolstripButtonTemplate() - :SubMenuExisting_(false) - , SubMenuOpening_(false) - , SubMenuHost_(0) - { - GuiToolstripButtonTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_EVENT_INIT) - } - - GuiToolstripButtonTemplate::~GuiToolstripButtonTemplate() - { - FinalizeAggregation(); - } - -/*********************************************************************** -GuiListViewColumnHeaderTemplate -***********************************************************************/ - - GuiListViewColumnHeaderTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_IMPL) - - GuiListViewColumnHeaderTemplate::GuiListViewColumnHeaderTemplate() - :SortingState_(ColumnSortingState::NotSorted) - { - GuiListViewColumnHeaderTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_EVENT_INIT) - } - - GuiListViewColumnHeaderTemplate::~GuiListViewColumnHeaderTemplate() - { - FinalizeAggregation(); - } - -/*********************************************************************** -GuiComboBoxTemplate -***********************************************************************/ - - GuiComboBoxTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_IMPL) - - GuiComboBoxTemplate::GuiComboBoxTemplate() - :Commands_(nullptr) - , TextVisible_(true) - { - GuiComboBoxTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_EVENT_INIT) - } - - GuiComboBoxTemplate::~GuiComboBoxTemplate() - { - FinalizeAggregation(); - } - -/*********************************************************************** -GuiScrollTemplate -***********************************************************************/ - - GuiScrollTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_IMPL) - - GuiScrollTemplate::GuiScrollTemplate() - :Commands_(nullptr) - , TotalSize_(100) - , PageSize_(10) - , Position_(0) - { - GuiScrollTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_EVENT_INIT) - } - - GuiScrollTemplate::~GuiScrollTemplate() - { - FinalizeAggregation(); - } - -/*********************************************************************** -GuiScrollViewTemplate -***********************************************************************/ - - GuiScrollViewTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_IMPL) - - GuiScrollViewTemplate::GuiScrollViewTemplate() - { - GuiScrollViewTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_EVENT_INIT) - } - - GuiScrollViewTemplate::~GuiScrollViewTemplate() - { - FinalizeAggregation(); - } - -/*********************************************************************** -GuiMultilineTextBoxTemplate -***********************************************************************/ - - GuiMultilineTextBoxTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_IMPL) - - GuiMultilineTextBoxTemplate::GuiMultilineTextBoxTemplate() - :Commands_(nullptr) - { - GuiMultilineTextBoxTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_EVENT_INIT) - } - - GuiMultilineTextBoxTemplate::~GuiMultilineTextBoxTemplate() - { - FinalizeAggregation(); - } - -/*********************************************************************** -GuiListControlTemplate -***********************************************************************/ - - GuiListControlTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_IMPL) - - GuiListControlTemplate::GuiListControlTemplate() - { - GuiListControlTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_EVENT_INIT) - } - - GuiListControlTemplate::~GuiListControlTemplate() - { - FinalizeAggregation(); - } - -/*********************************************************************** -GuiTextListTemplate -***********************************************************************/ - - GuiTextListTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_IMPL) - - GuiTextListTemplate::GuiTextListTemplate() - { - GuiTextListTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_EVENT_INIT) - } - - GuiTextListTemplate::~GuiTextListTemplate() - { - FinalizeAggregation(); - } - -/*********************************************************************** -GuiDocumentViewerTemplate -***********************************************************************/ - - GuiDocumentViewerTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_IMPL) - - GuiDocumentViewerTemplate::GuiDocumentViewerTemplate() - { - GuiDocumentViewerTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_EVENT_INIT) - } - - GuiDocumentViewerTemplate::~GuiDocumentViewerTemplate() - { - FinalizeAggregation(); - } - -/*********************************************************************** -GuiListViewTemplate -***********************************************************************/ - - GuiListViewTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_IMPL) - - GuiListViewTemplate::GuiListViewTemplate() - { - GuiListViewTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_EVENT_INIT) - } - - GuiListViewTemplate::~GuiListViewTemplate() - { - FinalizeAggregation(); - } - -/*********************************************************************** -GuiTreeViewTemplate -***********************************************************************/ - - GuiTreeViewTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_IMPL) - - GuiTreeViewTemplate::GuiTreeViewTemplate() - { - GuiTreeViewTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_EVENT_INIT) - } - - GuiTreeViewTemplate::~GuiTreeViewTemplate() - { - FinalizeAggregation(); - } - -/*********************************************************************** -GuiTabTemplate -***********************************************************************/ - - GuiTabTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_IMPL) - - GuiTabTemplate::GuiTabTemplate() - :Commands_(nullptr) - , SelectedTabPage_(nullptr) - { - GuiTabTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_EVENT_INIT) - } - - GuiTabTemplate::~GuiTabTemplate() - { - FinalizeAggregation(); - } - -/*********************************************************************** -GuiDatePickerTemplate -***********************************************************************/ - - GuiDatePickerTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_IMPL) - - GuiDatePickerTemplate::GuiDatePickerTemplate() - :Commands_(nullptr) - { - GuiDatePickerTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_EVENT_INIT) - } - - GuiDatePickerTemplate::~GuiDatePickerTemplate() - { - FinalizeAggregation(); - } - -/*********************************************************************** -GuiDateComboBoxTemplate -***********************************************************************/ - - GuiDateComboBoxTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_IMPL) - - GuiDateComboBoxTemplate::GuiDateComboBoxTemplate() - { - GuiDateComboBoxTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_EVENT_INIT) - } - - GuiDateComboBoxTemplate::~GuiDateComboBoxTemplate() - { - FinalizeAggregation(); - } - -/*********************************************************************** -GuiListItemTemplate +Item GuiListItemTemplate ***********************************************************************/ void GuiListItemTemplate::OnInitialize() @@ -13343,8 +12964,6 @@ GuiListItemTemplate GuiListItemTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_IMPL) GuiListItemTemplate::GuiListItemTemplate() - :Selected_(false) - , Index_(0) { GuiListItemTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_EVENT_INIT) } @@ -13372,89 +12991,11 @@ GuiListItemTemplate } /*********************************************************************** -GuiTextListItemTemplate +Template Declarations ***********************************************************************/ - GuiTextListItemTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_IMPL) - - GuiTextListItemTemplate::GuiTextListItemTemplate() - { - GuiTextListItemTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_EVENT_INIT) - } - - GuiTextListItemTemplate::~GuiTextListItemTemplate() - { - FinalizeAggregation(); - } - -/*********************************************************************** -GuiTreeItemTemplate -***********************************************************************/ - - GuiTreeItemTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_IMPL) - - GuiTreeItemTemplate::GuiTreeItemTemplate() - :Expanding_(false) - , Expandable_(false) - , Level_(0) - { - GuiTreeItemTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_EVENT_INIT) - } - - GuiTreeItemTemplate::~GuiTreeItemTemplate() - { - FinalizeAggregation(); - } - -/*********************************************************************** -GuiGridCellTemplate -***********************************************************************/ - - GuiGridCellTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_IMPL) - - GuiGridCellTemplate::GuiGridCellTemplate() - { - GuiGridCellTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_EVENT_INIT) - } - - GuiGridCellTemplate::~GuiGridCellTemplate() - { - FinalizeAggregation(); - } - -/*********************************************************************** -GuiGridVisualizerTemplate -***********************************************************************/ - - GuiGridVisualizerTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_IMPL) - - GuiGridVisualizerTemplate::GuiGridVisualizerTemplate() - { - GuiGridVisualizerTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_EVENT_INIT) - } - - GuiGridVisualizerTemplate::~GuiGridVisualizerTemplate() - { - FinalizeAggregation(); - } - -/*********************************************************************** -GuiGridEditorTemplate -***********************************************************************/ - - GuiGridEditorTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_IMPL) - - GuiGridEditorTemplate::GuiGridEditorTemplate() - :CellValueSaved_(true) - , FocusControl_(nullptr) - { - GuiGridEditorTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_EVENT_INIT) - } - - GuiGridEditorTemplate::~GuiGridEditorTemplate() - { - FinalizeAggregation(); - } + GUI_CONTROL_TEMPLATE_DECL(GUI_TEMPLATE_CLASS_IMPL) + GUI_ITEM_TEMPLATE_DECL(GUI_TEMPLATE_CLASS_IMPL) } } } @@ -22692,7 +22233,7 @@ DataVisualizerFactory childTemplate->Set##NAME(itemTemplate->Get##NAME());\ });\ -#define FORWARD_EVENT_IMPL(CLASS, TYPE, NAME) FORWARD_EVENT(NAME) +#define FORWARD_EVENT_IMPL(CLASS, TYPE, NAME, VALUE) FORWARD_EVENT(NAME) GuiTemplate_PROPERTIES(FORWARD_EVENT_IMPL) GuiControlTemplate_PROPERTIES(FORWARD_EVENT_IMPL) diff --git a/Import/GacUI.h b/Import/GacUI.h index 923ff915..7b299286 100644 --- a/Import/GacUI.h +++ b/Import/GacUI.h @@ -3,6 +3,7 @@ THIS FILE IS AUTOMATICALLY GENERATED. DO NOT MODIFY DEVELOPER: Zihan Chen(vczh) ***********************************************************************/ #include "Vlpp.h" +#include "VlppWorkflowLibrary.h" /*********************************************************************** .\GUITYPES.H @@ -3399,9 +3400,9 @@ Event Receiver } } - /*********************************************************************** - Workflow to C++ Codegen Helpers - ***********************************************************************/ +/*********************************************************************** +Workflow to C++ Codegen Helpers +***********************************************************************/ namespace __vwsn { @@ -4967,19 +4968,31 @@ namespace vl namespace elements { -/*********************************************************************** -Elements -***********************************************************************/ - + /*********************************************************************** + Elements + ***********************************************************************/ + /// - /// Defines an shape for some . + /// Defines a shape for some . /// - enum class ElementShape + enum class ElementShapeType { /// Rectangle shape. Rectangle, /// Ellipse shape. Ellipse, + /// Round rectangle shape. + RoundRect, + }; + + /// + /// Defines a shape for some . + /// + struct ElementShape + { + ElementShapeType shapeType = ElementShapeType::Rectangle; + int radiusX = 0; + int radiusY = 0; }; /// @@ -5016,41 +5029,6 @@ Elements void SetShape(ElementShape value); }; - /// - /// Defines a rectangle border element with round corners and a thickness of one pixel. - /// - class GuiRoundBorderElement : public GuiElementBase - { - DEFINE_GUI_GRAPHICS_ELEMENT(GuiRoundBorderElement, L"RoundBorder") - protected: - Color color; - vint radius; - - GuiRoundBorderElement(); - public: - /// - /// Get the border color. - /// - /// The border color. - Color GetColor(); - /// - /// Set the border color. - /// - /// The new border color. - void SetColor(Color value); - - /// - /// Get the radius of round corners. - /// - /// The radius. - vint GetRadius(); - /// - /// Set the radius of round corners. - /// - /// The new radius. - void SetRadius(vint value); - }; - /// /// Defines a 3D-like rectangle element with a thickness of two pixels. /// @@ -5196,7 +5174,7 @@ Elements DEFINE_GUI_GRAPHICS_ELEMENT(GuiGradientBackgroundElement, L"GradientBackground") public: /// - /// Defines a direction of the . + /// Defines a direction of the . /// enum Direction { @@ -5265,6 +5243,58 @@ Elements /// The new shape. void SetShape(ElementShape value); }; + + /// + /// Defines a color-filled radial gradient element without border. + /// + class GuiRadialGradientBackgroundElement : public GuiElementBase + { + DEFINE_GUI_GRAPHICS_ELEMENT(GuiRadialGradientBackgroundElement, L"RadialGradientBackground") + protected: + Color color1; + Color color2; + ElementShape shape; + + GuiRadialGradientBackgroundElement(); + public: + /// + /// Get the left-top color. + /// + /// The left-top color. + Color GetColor1(); + /// + /// Set the border color. + /// + /// The new left-top color. + void SetColor1(Color value); + /// + /// Get the right bottom color. + /// + /// The right-bottom color. + Color GetColor2(); + /// + /// Set the border color. + /// + /// The new right-bottom color. + void SetColor2(Color value); + /// + /// Set colors of the element. + /// + /// The new left-top color. + /// The new right bottom color. + void SetColors(Color value1, Color value2); + + /// + /// Get the shape. + /// + /// The shape. + ElementShape GetShape(); + /// + /// Set the shape. + /// + /// The new shape. + void SetShape(ElementShape value); + }; /// /// Defines an element of a plain text. @@ -8143,15 +8173,15 @@ namespace vl namespace templates { -#define GUI_TEMPLATE_PROPERTY_DECL(CLASS, TYPE, NAME)\ +#define GUI_TEMPLATE_PROPERTY_DECL(CLASS, TYPE, NAME, VALUE)\ private:\ - TYPE NAME##_;\ + TYPE NAME##_ = VALUE;\ public:\ TYPE Get##NAME();\ void Set##NAME(TYPE const& value);\ compositions::GuiNotifyEvent NAME##Changed;\ -#define GUI_TEMPLATE_PROPERTY_IMPL(CLASS, TYPE, NAME)\ +#define GUI_TEMPLATE_PROPERTY_IMPL(CLASS, TYPE, NAME, VALUE)\ TYPE CLASS::Get##NAME()\ {\ return NAME##_;\ @@ -8165,9 +8195,64 @@ namespace vl }\ }\ -#define GUI_TEMPLATE_PROPERTY_EVENT_INIT(CLASS, TYPE, NAME)\ +#define GUI_TEMPLATE_PROPERTY_EVENT_INIT(CLASS, TYPE, NAME, VALUE)\ NAME##Changed.SetAssociatedComposition(this); +#define GUI_TEMPLATE_CLASS_DECL(CLASS, BASE)\ + class CLASS : public BASE, public AggregatableDescription\ + {\ + public:\ + CLASS();\ + ~CLASS();\ + CLASS ## _PROPERTIES(GUI_TEMPLATE_PROPERTY_DECL)\ + };\ + +#define GUI_TEMPLATE_CLASS_IMPL(CLASS, BASE)\ + CLASS ## _PROPERTIES(GUI_TEMPLATE_PROPERTY_IMPL)\ + CLASS::CLASS()\ + {\ + CLASS ## _PROPERTIES(GUI_TEMPLATE_PROPERTY_EVENT_INIT)\ + }\ + CLASS::~CLASS()\ + {\ + FinalizeAggregation();\ + }\ + +#define GUI_CONTROL_TEMPLATE_DECL(F)\ + F(GuiControlTemplate, GuiTemplate) \ + F(GuiLabelTemplate, GuiControlTemplate) \ + F(GuiSinglelineTextBoxTemplate, GuiControlTemplate) \ + F(GuiDocumentLabelTemplate, GuiControlTemplate) \ + F(GuiWindowTemplate, GuiControlTemplate) \ + F(GuiMenuTemplate, GuiWindowTemplate) \ + F(GuiButtonTemplate, GuiControlTemplate) \ + F(GuiSelectableButtonTemplate, GuiButtonTemplate) \ + F(GuiToolstripButtonTemplate, GuiSelectableButtonTemplate)\ + F(GuiListViewColumnHeaderTemplate, GuiToolstripButtonTemplate) \ + F(GuiComboBoxTemplate, GuiToolstripButtonTemplate) \ + F(GuiScrollTemplate, GuiControlTemplate) \ + F(GuiScrollViewTemplate, GuiControlTemplate) \ + F(GuiMultilineTextBoxTemplate, GuiScrollViewTemplate) \ + F(GuiDocumentViewerTemplate, GuiScrollViewTemplate) \ + F(GuiListControlTemplate, GuiScrollViewTemplate) \ + F(GuiTextListTemplate, GuiListControlTemplate) \ + F(GuiListViewTemplate, GuiListControlTemplate) \ + F(GuiTreeViewTemplate, GuiListControlTemplate) \ + F(GuiTabTemplate, GuiControlTemplate) \ + F(GuiDatePickerTemplate, GuiControlTemplate) \ + F(GuiDateComboBoxTemplate, GuiComboBoxTemplate) \ + +#define GUI_ITEM_TEMPLATE_DECL(F)\ + F(GuiTextListItemTemplate, GuiListItemTemplate) \ + F(GuiTreeItemTemplate, GuiTextListItemTemplate) \ + F(GuiGridCellTemplate, GuiControlTemplate) \ + F(GuiGridVisualizerTemplate, GuiGridCellTemplate) \ + F(GuiGridEditorTemplate, GuiGridCellTemplate) \ + +/*********************************************************************** +GuiTemplate +***********************************************************************/ + /// Represents a user customizable template. class GuiTemplate : public compositions::GuiBoundsComposition, public controls::GuiInstanceRootObject, public Description { @@ -8177,368 +8262,15 @@ namespace vl ~GuiTemplate(); #define GuiTemplate_PROPERTIES(F)\ - F(GuiTemplate, FontProperties, Font)\ - F(GuiTemplate, WString, Text)\ - F(GuiTemplate, bool, VisuallyEnabled)\ + F(GuiTemplate, FontProperties, Font, {} )\ + F(GuiTemplate, WString, Text, {} )\ + F(GuiTemplate, bool, VisuallyEnabled, true)\ GuiTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_DECL) }; /*********************************************************************** -Control Template -***********************************************************************/ - - class GuiControlTemplate : public GuiTemplate, public AggregatableDescription - { - public: - GuiControlTemplate(); - ~GuiControlTemplate(); - -#define GuiControlTemplate_PROPERTIES(F)\ - F(GuiControlTemplate, compositions::GuiGraphicsComposition*, ContainerComposition)\ - F(GuiControlTemplate, compositions::GuiGraphicsComposition*, FocusableComposition)\ - - GuiControlTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_DECL) - }; - -/*********************************************************************** -Basic Controls -***********************************************************************/ - - class GuiLabelTemplate :public GuiControlTemplate, public AggregatableDescription - { - public: - GuiLabelTemplate(); - ~GuiLabelTemplate(); - -#define GuiLabelTemplate_PROPERTIES(F)\ - F(GuiLabelTemplate, Color, DefaultTextColor)\ - F(GuiLabelTemplate, Color, TextColor)\ - - GuiLabelTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_DECL) - }; - - class GuiSinglelineTextBoxTemplate : public GuiControlTemplate, public AggregatableDescription - { - public: - GuiSinglelineTextBoxTemplate(); - ~GuiSinglelineTextBoxTemplate(); - -#define GuiSinglelineTextBoxTemplate_PROPERTIES(F)\ - F(GuiSinglelineTextBoxTemplate, elements::text::ColorEntry, TextColor)\ - F(GuiSinglelineTextBoxTemplate, Color, CaretColor)\ - - GuiSinglelineTextBoxTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_DECL) - }; - - class GuiDocumentLabelTemplate : public GuiControlTemplate, public AggregatableDescription - { - public: - GuiDocumentLabelTemplate(); - ~GuiDocumentLabelTemplate(); - -#define GuiDocumentLabelTemplate_PROPERTIES(F)\ - F(GuiDocumentLabelTemplate, Ptr, BaselineDocument)\ - F(GuiDocumentLabelTemplate, Color, CaretColor)\ - - GuiDocumentLabelTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_DECL) - }; - -/*********************************************************************** -Window -***********************************************************************/ - - enum class BoolOption - { - AlwaysTrue, - AlwaysFalse, - Customizable, - }; - - class GuiWindowTemplate : public GuiControlTemplate, public AggregatableDescription - { - public: - GuiWindowTemplate(); - ~GuiWindowTemplate(); - -#define GuiWindowTemplate_PROPERTIES(F)\ - F(GuiWindowTemplate, BoolOption, MaximizedBoxOption)\ - F(GuiWindowTemplate, BoolOption, MinimizedBoxOption)\ - F(GuiWindowTemplate, BoolOption, BorderOption)\ - F(GuiWindowTemplate, BoolOption, SizeBoxOption)\ - F(GuiWindowTemplate, BoolOption, IconVisibleOption)\ - F(GuiWindowTemplate, BoolOption, TitleBarOption)\ - F(GuiWindowTemplate, bool, MaximizedBox)\ - F(GuiWindowTemplate, bool, MinimizedBox)\ - F(GuiWindowTemplate, bool, Border)\ - F(GuiWindowTemplate, bool, SizeBox)\ - F(GuiWindowTemplate, bool, IconVisible)\ - F(GuiWindowTemplate, bool, TitleBar)\ - F(GuiWindowTemplate, bool, CustomizedBorder)\ - F(GuiWindowTemplate, bool, Maximized)\ - F(GuiWindowTemplate, TemplateProperty, TooltipTemplate)\ - F(GuiWindowTemplate, TemplateProperty, ShortcutKeyTemplate)\ - F(GuiWindowTemplate, bool, CustomFrameEnabled) - - GuiWindowTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_DECL) - }; - - class GuiMenuTemplate : public GuiWindowTemplate, public AggregatableDescription - { - public: - GuiMenuTemplate(); - ~GuiMenuTemplate(); - -#define GuiMenuTemplate_PROPERTIES(F) - - GuiMenuTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_DECL) - }; - -/*********************************************************************** -Button Controls -***********************************************************************/ - - class GuiButtonTemplate : public GuiControlTemplate, public AggregatableDescription - { - public: - GuiButtonTemplate(); - ~GuiButtonTemplate(); - -#define GuiButtonTemplate_PROPERTIES(F)\ - F(GuiButtonTemplate, controls::ButtonState, State)\ - - GuiButtonTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_DECL) - }; - - class GuiSelectableButtonTemplate : public GuiButtonTemplate, public AggregatableDescription - { - public: - GuiSelectableButtonTemplate(); - ~GuiSelectableButtonTemplate(); - -#define GuiSelectableButtonTemplate_PROPERTIES(F)\ - F(GuiSelectableButtonTemplate, bool, Selected)\ - - GuiSelectableButtonTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_DECL) - }; - -/*********************************************************************** -Toolstrip Controls -***********************************************************************/ - - class GuiToolstripButtonTemplate : public GuiSelectableButtonTemplate, public AggregatableDescription - { - public: - GuiToolstripButtonTemplate(); - ~GuiToolstripButtonTemplate(); - -#define GuiToolstripButtonTemplate_PROPERTIES(F)\ - F(GuiToolstripButtonTemplate, TemplateProperty, SubMenuTemplate)\ - F(GuiToolstripButtonTemplate, bool, SubMenuExisting)\ - F(GuiToolstripButtonTemplate, bool, SubMenuOpening)\ - F(GuiToolstripButtonTemplate, controls::GuiButton*, SubMenuHost)\ - F(GuiToolstripButtonTemplate, Ptr, Image)\ - F(GuiToolstripButtonTemplate, WString, ShortcutText)\ - - GuiToolstripButtonTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_DECL) - }; - - class GuiListViewColumnHeaderTemplate :public GuiToolstripButtonTemplate, public AggregatableDescription - { - public: - GuiListViewColumnHeaderTemplate(); - ~GuiListViewColumnHeaderTemplate(); - -#define GuiListViewColumnHeaderTemplate_PROPERTIES(F)\ - F(GuiListViewColumnHeaderTemplate, controls::ColumnSortingState, SortingState)\ - - GuiListViewColumnHeaderTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_DECL) - }; - - class GuiComboBoxTemplate : public GuiToolstripButtonTemplate, public AggregatableDescription - { - public: - GuiComboBoxTemplate(); - ~GuiComboBoxTemplate(); - -#define GuiComboBoxTemplate_PROPERTIES(F)\ - F(GuiComboBoxTemplate, controls::IComboBoxCommandExecutor*, Commands)\ - F(GuiComboBoxTemplate, bool, TextVisible)\ - - GuiComboBoxTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_DECL) - }; - -/*********************************************************************** -Scroll Controls -***********************************************************************/ - - class GuiScrollTemplate : public GuiControlTemplate, public AggregatableDescription - { - public: - GuiScrollTemplate(); - ~GuiScrollTemplate(); - -#define GuiScrollTemplate_PROPERTIES(F)\ - F(GuiScrollTemplate, controls::IScrollCommandExecutor*, Commands)\ - F(GuiScrollTemplate, vint, TotalSize)\ - F(GuiScrollTemplate, vint, PageSize)\ - F(GuiScrollTemplate, vint, Position)\ - - GuiScrollTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_DECL) - }; - -/*********************************************************************** -Scrollable Controls -***********************************************************************/ - - class GuiScrollViewTemplate : public GuiControlTemplate, public AggregatableDescription - { - public: - GuiScrollViewTemplate(); - ~GuiScrollViewTemplate(); - -#define GuiScrollViewTemplate_PROPERTIES(F)\ - F(GuiScrollViewTemplate, controls::GuiScroll*, HorizontalScroll)\ - F(GuiScrollViewTemplate, controls::GuiScroll*, VerticalScroll)\ - - GuiScrollViewTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_DECL) - }; - - class GuiMultilineTextBoxTemplate : public GuiScrollViewTemplate, public AggregatableDescription - { - public: - GuiMultilineTextBoxTemplate(); - ~GuiMultilineTextBoxTemplate(); - -#define GuiMultilineTextBoxTemplate_PROPERTIES(F)\ - F(GuiMultilineTextBoxTemplate, controls::ITextBoxCommandExecutor*, Commands)\ - F(GuiMultilineTextBoxTemplate, elements::text::ColorEntry, TextColor)\ - F(GuiMultilineTextBoxTemplate, Color, CaretColor)\ - - GuiMultilineTextBoxTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_DECL) - }; - - class GuiDocumentViewerTemplate : public GuiScrollViewTemplate, public AggregatableDescription - { - public: - GuiDocumentViewerTemplate(); - ~GuiDocumentViewerTemplate(); - -#define GuiDocumentViewerTemplate_PROPERTIES(F)\ - F(GuiDocumentViewerTemplate, Ptr, BaselineDocument)\ - F(GuiDocumentViewerTemplate, Color, CaretColor)\ - - GuiDocumentViewerTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_DECL) - }; - -/*********************************************************************** -List Controls -***********************************************************************/ - - class GuiListControlTemplate : public GuiScrollViewTemplate, public Description - { - public: - GuiListControlTemplate(); - ~GuiListControlTemplate(); - -#define GuiListControlTemplate_PROPERTIES(F)\ - F(GuiListControlTemplate, TemplateProperty, BackgroundTemplate)\ - - GuiListControlTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_DECL) - }; - - class GuiTextListTemplate : public GuiListControlTemplate, public AggregatableDescription - { - public: - GuiTextListTemplate(); - ~GuiTextListTemplate(); - -#define GuiTextListTemplate_PROPERTIES(F)\ - F(GuiTextListTemplate, Color, TextColor)\ - F(GuiTextListTemplate, TemplateProperty, CheckBulletTemplate)\ - F(GuiTextListTemplate, TemplateProperty, RadioBulletTemplate)\ - - GuiTextListTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_DECL) - }; - - class GuiListViewTemplate : public GuiListControlTemplate, public AggregatableDescription - { - public: - GuiListViewTemplate(); - ~GuiListViewTemplate(); - -#define GuiListViewTemplate_PROPERTIES(F)\ - F(GuiListViewTemplate, TemplateProperty, ColumnHeaderTemplate)\ - F(GuiListViewTemplate, Color, PrimaryTextColor)\ - F(GuiListViewTemplate, Color, SecondaryTextColor)\ - F(GuiListViewTemplate, Color, ItemSeparatorColor)\ - - GuiListViewTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_DECL) - }; - - class GuiTreeViewTemplate : public GuiListControlTemplate, public AggregatableDescription - { - public: - GuiTreeViewTemplate(); - ~GuiTreeViewTemplate(); - -#define GuiTreeViewTemplate_PROPERTIES(F)\ - F(GuiTreeViewTemplate, TemplateProperty, ExpandingDecoratorTemplate)\ - F(GuiTreeViewTemplate, Color, TextColor)\ - - GuiTreeViewTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_DECL) - }; - -/*********************************************************************** -Tab Controls -***********************************************************************/ - - class GuiTabTemplate : public GuiControlTemplate, public AggregatableDescription - { - public: - GuiTabTemplate(); - ~GuiTabTemplate(); - -#define GuiTabTemplate_PROPERTIES(F)\ - F(GuiTabTemplate, controls::ITabCommandExecutor*, Commands)\ - F(GuiTabTemplate, Ptr, TabPages)\ - F(GuiTabTemplate, controls::GuiTabPage*, SelectedTabPage)\ - - GuiTabTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_DECL) - }; - -/*********************************************************************** -Date Controls -***********************************************************************/ - - class GuiDatePickerTemplate : public GuiControlTemplate, public AggregatableDescription - { - public: - GuiDatePickerTemplate(); - ~GuiDatePickerTemplate(); - -#define GuiDatePickerTemplate_PROPERTIES(F)\ - F(GuiDatePickerTemplate, controls::IDatePickerCommandExecutor*, Commands)\ - F(GuiDatePickerTemplate, Locale, DateLocale)\ - F(GuiDatePickerTemplate, DateTime, Date)\ - - GuiDatePickerTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_DECL) - }; - - class GuiDateComboBoxTemplate : public GuiComboBoxTemplate, public AggregatableDescription - { - public: - GuiDateComboBoxTemplate(); - ~GuiDateComboBoxTemplate(); - -#define GuiDateComboBoxTemplate_PROPERTIES(F)\ - F(GuiDateComboBoxTemplate, TemplateProperty, DatePickerTemplate)\ - - GuiDateComboBoxTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_DECL) - }; - -/*********************************************************************** -Item Template +GuiListItemTemplate ***********************************************************************/ class GuiListItemTemplate : public GuiTemplate, public AggregatableDescription @@ -8550,90 +8282,179 @@ Item Template public: GuiListItemTemplate(); ~GuiListItemTemplate(); - + #define GuiListItemTemplate_PROPERTIES(F)\ - F(GuiListItemTemplate, bool, Selected)\ - F(GuiListItemTemplate, vint, Index)\ + F(GuiListItemTemplate, bool, Selected, false)\ + F(GuiListItemTemplate, vint, Index, 0)\ GuiListItemTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_DECL) - void BeginEditListItem(); + void BeginEditListItem(); void EndEditListItem(); void Initialize(controls::GuiListControl* _listControl); }; - class GuiTextListItemTemplate : public GuiListItemTemplate, public AggregatableDescription - { - public: - GuiTextListItemTemplate(); - ~GuiTextListItemTemplate(); - -#define GuiTextListItemTemplate_PROPERTIES(F)\ - F(GuiTextListItemTemplate, Color, TextColor)\ - F(GuiTextListItemTemplate, bool, Checked)\ +/*********************************************************************** +Control Template +***********************************************************************/ - GuiTextListItemTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_DECL) + enum class BoolOption + { + AlwaysTrue, + AlwaysFalse, + Customizable, }; + +#define GuiControlTemplate_PROPERTIES(F)\ + F(GuiControlTemplate, compositions::GuiGraphicsComposition*, ContainerComposition, this)\ + F(GuiControlTemplate, compositions::GuiGraphicsComposition*, FocusableComposition, nullptr)\ - class GuiTreeItemTemplate : public GuiTextListItemTemplate, public AggregatableDescription - { - public: - GuiTreeItemTemplate(); - ~GuiTreeItemTemplate(); +#define GuiLabelTemplate_PROPERTIES(F)\ + F(GuiLabelTemplate, Color, DefaultTextColor, {})\ + F(GuiLabelTemplate, Color, TextColor, {})\ + +#define GuiSinglelineTextBoxTemplate_PROPERTIES(F)\ + F(GuiSinglelineTextBoxTemplate, elements::text::ColorEntry, TextColor, {})\ + F(GuiSinglelineTextBoxTemplate, Color, CaretColor, {})\ + +#define GuiDocumentLabelTemplate_PROPERTIES(F)\ + F(GuiDocumentLabelTemplate, Ptr, BaselineDocument, {})\ + F(GuiDocumentLabelTemplate, Color, CaretColor, {})\ + +#define GuiWindowTemplate_PROPERTIES(F)\ + F(GuiWindowTemplate, BoolOption, MaximizedBoxOption, BoolOption::Customizable)\ + F(GuiWindowTemplate, BoolOption, MinimizedBoxOption, BoolOption::Customizable)\ + F(GuiWindowTemplate, BoolOption, BorderOption, BoolOption::Customizable)\ + F(GuiWindowTemplate, BoolOption, SizeBoxOption, BoolOption::Customizable)\ + F(GuiWindowTemplate, BoolOption, IconVisibleOption, BoolOption::Customizable)\ + F(GuiWindowTemplate, BoolOption, TitleBarOption, BoolOption::Customizable)\ + F(GuiWindowTemplate, bool, MaximizedBox, true)\ + F(GuiWindowTemplate, bool, MinimizedBox, true)\ + F(GuiWindowTemplate, bool, Border, true)\ + F(GuiWindowTemplate, bool, SizeBox, true)\ + F(GuiWindowTemplate, bool, IconVisible, true)\ + F(GuiWindowTemplate, bool, TitleBar, true)\ + F(GuiWindowTemplate, bool, CustomizedBorder, false)\ + F(GuiWindowTemplate, bool, Maximized, false)\ + F(GuiWindowTemplate, TemplateProperty, TooltipTemplate, {})\ + F(GuiWindowTemplate, TemplateProperty, ShortcutKeyTemplate, {})\ + F(GuiWindowTemplate, bool, CustomFrameEnabled, true)\ + +#define GuiMenuTemplate_PROPERTIES(F) + +#define GuiButtonTemplate_PROPERTIES(F)\ + F(GuiButtonTemplate, controls::ButtonState, State, controls::ButtonState::Normal)\ + +#define GuiSelectableButtonTemplate_PROPERTIES(F)\ + F(GuiSelectableButtonTemplate, bool, Selected, false)\ + +#define GuiToolstripButtonTemplate_PROPERTIES(F)\ + F(GuiToolstripButtonTemplate, TemplateProperty, SubMenuTemplate, {})\ + F(GuiToolstripButtonTemplate, bool, SubMenuExisting, false)\ + F(GuiToolstripButtonTemplate, bool, SubMenuOpening, false)\ + F(GuiToolstripButtonTemplate, controls::GuiButton*, SubMenuHost, nullptr)\ + F(GuiToolstripButtonTemplate, Ptr, Image, {})\ + F(GuiToolstripButtonTemplate, WString, ShortcutText, {})\ + +#define GuiListViewColumnHeaderTemplate_PROPERTIES(F)\ + F(GuiListViewColumnHeaderTemplate, controls::ColumnSortingState, SortingState, controls::ColumnSortingState::NotSorted)\ + +#define GuiComboBoxTemplate_PROPERTIES(F)\ + F(GuiComboBoxTemplate, controls::IComboBoxCommandExecutor*, Commands, nullptr)\ + F(GuiComboBoxTemplate, bool, TextVisible, true)\ + +#define GuiScrollTemplate_PROPERTIES(F)\ + F(GuiScrollTemplate, controls::IScrollCommandExecutor*, Commands, nullptr)\ + F(GuiScrollTemplate, vint, TotalSize, 100)\ + F(GuiScrollTemplate, vint, PageSize, 10)\ + F(GuiScrollTemplate, vint, Position, 0)\ + +#define GuiScrollViewTemplate_PROPERTIES(F)\ + F(GuiScrollViewTemplate, controls::GuiScroll*, HorizontalScroll, nullptr)\ + F(GuiScrollViewTemplate, controls::GuiScroll*, VerticalScroll, nullptr)\ + +#define GuiMultilineTextBoxTemplate_PROPERTIES(F)\ + F(GuiMultilineTextBoxTemplate, controls::ITextBoxCommandExecutor*, Commands, nullptr)\ + F(GuiMultilineTextBoxTemplate, elements::text::ColorEntry, TextColor, {})\ + F(GuiMultilineTextBoxTemplate, Color, CaretColor, {})\ + +#define GuiDocumentViewerTemplate_PROPERTIES(F)\ + F(GuiDocumentViewerTemplate, Ptr, BaselineDocument, {})\ + F(GuiDocumentViewerTemplate, Color, CaretColor, {})\ + +#define GuiListControlTemplate_PROPERTIES(F)\ + F(GuiListControlTemplate, TemplateProperty, BackgroundTemplate, {})\ + +#define GuiTextListTemplate_PROPERTIES(F)\ + F(GuiTextListTemplate, Color, TextColor, {})\ + F(GuiTextListTemplate, TemplateProperty, CheckBulletTemplate, {})\ + F(GuiTextListTemplate, TemplateProperty, RadioBulletTemplate, {})\ + +#define GuiListViewTemplate_PROPERTIES(F)\ + F(GuiListViewTemplate, TemplateProperty, ColumnHeaderTemplate, {})\ + F(GuiListViewTemplate, Color, PrimaryTextColor, {})\ + F(GuiListViewTemplate, Color, SecondaryTextColor, {})\ + F(GuiListViewTemplate, Color, ItemSeparatorColor, {})\ + +#define GuiTreeViewTemplate_PROPERTIES(F)\ + F(GuiTreeViewTemplate, TemplateProperty, ExpandingDecoratorTemplate, {})\ + F(GuiTreeViewTemplate, Color, TextColor, {})\ + +#define GuiTabTemplate_PROPERTIES(F)\ + F(GuiTabTemplate, controls::ITabCommandExecutor*, Commands, nullptr)\ + F(GuiTabTemplate, Ptr, TabPages, {})\ + F(GuiTabTemplate, controls::GuiTabPage*, SelectedTabPage, nullptr)\ + +#define GuiDatePickerTemplate_PROPERTIES(F)\ + F(GuiDatePickerTemplate, controls::IDatePickerCommandExecutor*, Commands, nullptr)\ + F(GuiDatePickerTemplate, Locale, DateLocale, {})\ + F(GuiDatePickerTemplate, DateTime, Date, {})\ + +#define GuiDateComboBoxTemplate_PROPERTIES(F)\ + F(GuiDateComboBoxTemplate, TemplateProperty, DatePickerTemplate, {})\ + +#define GuiListItemTemplate_PROPERTIES(F)\ + F(GuiListItemTemplate, bool, Selected, false)\ + F(GuiListItemTemplate, vint, Index, 0)\ + +/*********************************************************************** +Item Template +***********************************************************************/ + +#define GuiTextListItemTemplate_PROPERTIES(F)\ + F(GuiTextListItemTemplate, Color, TextColor, {})\ + F(GuiTextListItemTemplate, bool, Checked, false)\ #define GuiTreeItemTemplate_PROPERTIES(F)\ - F(GuiTreeItemTemplate, bool, Expanding)\ - F(GuiTreeItemTemplate, bool, Expandable)\ - F(GuiTreeItemTemplate, vint, Level)\ - F(GuiTreeItemTemplate, Ptr, Image)\ - - GuiTreeItemTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_DECL) - }; - - class GuiGridCellTemplate : public GuiControlTemplate, public AggregatableDescription - { - public: - GuiGridCellTemplate(); - ~GuiGridCellTemplate(); + F(GuiTreeItemTemplate, bool, Expanding, false)\ + F(GuiTreeItemTemplate, bool, Expandable, false)\ + F(GuiTreeItemTemplate, vint, Level, 0)\ + F(GuiTreeItemTemplate, Ptr, Image, {})\ #define GuiGridCellTemplate_PROPERTIES(F)\ - F(GuiGridCellTemplate, Color, PrimaryTextColor)\ - F(GuiGridCellTemplate, Color, SecondaryTextColor)\ - F(GuiGridCellTemplate, Color, ItemSeparatorColor)\ - F(GuiGridCellTemplate, Ptr, LargeImage)\ - F(GuiGridCellTemplate, Ptr, SmallImage)\ - - GuiGridCellTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_DECL) - }; - - class GuiGridVisualizerTemplate : public GuiGridCellTemplate, public AggregatableDescription - { - public: - GuiGridVisualizerTemplate(); - ~GuiGridVisualizerTemplate(); + F(GuiGridCellTemplate, Color, PrimaryTextColor, {})\ + F(GuiGridCellTemplate, Color, SecondaryTextColor, {})\ + F(GuiGridCellTemplate, Color, ItemSeparatorColor, {})\ + F(GuiGridCellTemplate, Ptr, LargeImage, {})\ + F(GuiGridCellTemplate, Ptr, SmallImage, {})\ #define GuiGridVisualizerTemplate_PROPERTIES(F)\ - F(GuiGridVisualizerTemplate, description::Value, RowValue)\ - F(GuiGridVisualizerTemplate, description::Value, CellValue)\ - F(GuiGridVisualizerTemplate, bool, Selected)\ - - GuiGridVisualizerTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_DECL) - }; - - class GuiGridEditorTemplate : public GuiGridCellTemplate, public AggregatableDescription - { - public: - GuiGridEditorTemplate(); - ~GuiGridEditorTemplate(); + F(GuiGridVisualizerTemplate, description::Value, RowValue, {})\ + F(GuiGridVisualizerTemplate, description::Value, CellValue, {})\ + F(GuiGridVisualizerTemplate, bool, Selected, false)\ #define GuiGridEditorTemplate_PROPERTIES(F)\ - F(GuiGridEditorTemplate, description::Value, RowValue)\ - F(GuiGridEditorTemplate, description::Value, CellValue)\ - F(GuiGridEditorTemplate, bool, CellValueSaved)\ - F(GuiGridEditorTemplate, controls::GuiControl*, FocusControl)\ + F(GuiGridEditorTemplate, description::Value, RowValue, {})\ + F(GuiGridEditorTemplate, description::Value, CellValue, {})\ + F(GuiGridEditorTemplate, bool, CellValueSaved, true)\ + F(GuiGridEditorTemplate, controls::GuiControl*, FocusControl, nullptr)\ - GuiGridEditorTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_DECL) - }; +/*********************************************************************** +Template Declarations +***********************************************************************/ + + GUI_CONTROL_TEMPLATE_DECL(GUI_TEMPLATE_CLASS_DECL) + GUI_ITEM_TEMPLATE_DECL(GUI_TEMPLATE_CLASS_DECL) } } } diff --git a/Import/GacUICompiler.cpp b/Import/GacUICompiler.cpp index 873252de..862942ba 100644 --- a/Import/GacUICompiler.cpp +++ b/Import/GacUICompiler.cpp @@ -1927,114 +1927,129 @@ namespace vl ParserText ***********************************************************************/ -const wchar_t parserTextBuffer[] = -L"\r\n" L"" -L"\r\n" L"class Query" -L"\r\n" L"{" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"enum NameOption" -L"\r\n" L"{" -L"\r\n" L"\tSpecified," -L"\r\n" L"\tAny," -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"enum ChildOption" -L"\r\n" L"{" -L"\r\n" L"\tDirect," -L"\r\n" L"\tIndirect," -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class PrimaryQuery : Query" -L"\r\n" L"{" -L"\r\n" L"\tChildOption\t\tchildOption;" -L"\r\n" L"\tNameOption\t\tattributeNameOption;" -L"\r\n" L"\ttoken\t\t\tattributeName;" -L"\r\n" L"\tNameOption\t\ttypeNameOption;" -L"\r\n" L"\ttoken\t\t\ttypeName;" -L"\r\n" L"\ttoken\t\t\treferenceName;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class CascadeQuery : Query" -L"\r\n" L"{" -L"\r\n" L"\tQuery\t\t\tparent;" -L"\r\n" L"\tQuery\t\t\tchild;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"enum BinaryOperator" -L"\r\n" L"{" -L"\r\n" L"\tExclusiveOr," -L"\r\n" L"\tIntersect," -L"\r\n" L"\tUnion," -L"\r\n" L"\tSubstract," -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class SetQuery : Query" -L"\r\n" L"{" -L"\r\n" L"\tQuery\t\t\tfirst;" -L"\r\n" L"\tQuery\t\t\tsecond;" -L"\r\n" L"\tBinaryOperator\top;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"token INDIRECT = \"////\";" -L"\r\n" L"token DIRECT = \"//\";" -L"\r\n" L"token NAME = \"[a-zA-Z_][a-zA-Z0-9]*\";" -L"\r\n" L"token WILDCARD = \"/*\";" -L"\r\n" L"token OPEN = \"/(\";" -L"\r\n" L"token CLOSE = \"/)\";" -L"\r\n" L"token XOR = \"/^\";" -L"\r\n" L"token INTERSECT = \"/*\";" -L"\r\n" L"token UNION = \"/+\";" -L"\r\n" L"token SUBSTRACT = \"-\";" -L"\r\n" L"token ATTRIBUTE = \"@\";" -L"\r\n" L"token COLON = \":\";" -L"\r\n" L"token DOT = \".\";" -L"\r\n" L"" -L"\r\n" L"discardtoken SPACE = \"/s+\";" -L"\r\n" L"" -L"\r\n" L"rule PrimaryQuery QPrimaryFragment" -L"\r\n" L"\t=\t(" -L"\r\n" L"\t\t\t(NAME : typeName with {typeNameOption=\"Specified\"})" -L"\r\n" L"\t\t\t| (\"*\" with {typeNameOption=\"Any\"})" -L"\r\n" L"\t\t)" -L"\r\n" L"\t\t[\".\" NAME : referenceName] as PrimaryQuery" -L"\r\n" L"\t;" -L"\r\n" L"" -L"\r\n" L"rule PrimaryQuery QPrimaryAttributed" -L"\r\n" L"\t= !QPrimaryFragment with {attributeNameOption=\"Any\"}" -L"\r\n" L"\t= \"@\" [NAME : attributeName] \":\" !QPrimaryFragment with {attributeNameOption=\"Specified\"}" -L"\r\n" L"\t;" -L"\r\n" L"" -L"\r\n" L"rule PrimaryQuery QPrimary" -L"\r\n" L"\t= (\"/\" with {childOption=\"Direct\"}) !QPrimaryAttributed" -L"\r\n" L"\t= (\"//\" with {childOption=\"Indirect\"}) !QPrimaryAttributed" -L"\r\n" L"\t= \"(\" !QueryRoot \")\"" -L"\r\n" L"\t;" -L"\r\n" L"" -L"\r\n" L"rule Query Query0" -L"\r\n" L"\t= !QPrimary" -L"\r\n" L"\t= Query0 : parent QPrimary : child as CascadeQuery;" -L"\r\n" L"" -L"\r\n" L"rule Query Query1" -L"\r\n" L"\t= !Query0" -L"\r\n" L"\t= Query1 : first \"^\" Query0 : second as SetQuery with {op=\"ExclusiveOr\"}" -L"\r\n" L"\t= Query1 : first \"*\" Query0 : second as SetQuery with {op=\"Intersect\"}" -L"\r\n" L"\t;" -L"\r\n" L"\t" -L"\r\n" L"rule Query Query2" -L"\r\n" L"\t= !Query1" -L"\r\n" L"\t= Query2 : first \"+\" Query1 : second as SetQuery with {op=\"Union\"}" -L"\r\n" L"\t= Query2 : first \"-\" Query1 : second as SetQuery with {op=\"Substract\"}" -L"\r\n" L"\t;" -L"\r\n" L"" -L"\r\n" L"rule Query QueryRoot" -L"\r\n" L"\t= !Query2" -L"\r\n" L"\t;" -; +const wchar_t* const parserTextBuffer[] = { + L"" L"\r\n" +, L"class Query" L"\r\n" +, L"{" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"enum NameOption" L"\r\n" +, L"{" L"\r\n" +, L"\tSpecified," L"\r\n" +, L"\tAny," L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"enum ChildOption" L"\r\n" +, L"{" L"\r\n" +, L"\tDirect," L"\r\n" +, L"\tIndirect," L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class PrimaryQuery : Query" L"\r\n" +, L"{" L"\r\n" +, L"\tChildOption\t\tchildOption;" L"\r\n" +, L"\tNameOption\t\tattributeNameOption;" L"\r\n" +, L"\ttoken\t\t\tattributeName;" L"\r\n" +, L"\tNameOption\t\ttypeNameOption;" L"\r\n" +, L"\ttoken\t\t\ttypeName;" L"\r\n" +, L"\ttoken\t\t\treferenceName;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class CascadeQuery : Query" L"\r\n" +, L"{" L"\r\n" +, L"\tQuery\t\t\tparent;" L"\r\n" +, L"\tQuery\t\t\tchild;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"enum BinaryOperator" L"\r\n" +, L"{" L"\r\n" +, L"\tExclusiveOr," L"\r\n" +, L"\tIntersect," L"\r\n" +, L"\tUnion," L"\r\n" +, L"\tSubstract," L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class SetQuery : Query" L"\r\n" +, L"{" L"\r\n" +, L"\tQuery\t\t\tfirst;" L"\r\n" +, L"\tQuery\t\t\tsecond;" L"\r\n" +, L"\tBinaryOperator\top;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"token INDIRECT = \"////\";" L"\r\n" +, L"token DIRECT = \"//\";" L"\r\n" +, L"token NAME = \"[a-zA-Z_][a-zA-Z0-9]*\";" L"\r\n" +, L"token WILDCARD = \"/*\";" L"\r\n" +, L"token OPEN = \"/(\";" L"\r\n" +, L"token CLOSE = \"/)\";" L"\r\n" +, L"token XOR = \"/^\";" L"\r\n" +, L"token INTERSECT = \"/*\";" L"\r\n" +, L"token UNION = \"/+\";" L"\r\n" +, L"token SUBSTRACT = \"-\";" L"\r\n" +, L"token ATTRIBUTE = \"@\";" L"\r\n" +, L"token COLON = \":\";" L"\r\n" +, L"token DOT = \".\";" L"\r\n" +, L"" L"\r\n" +, L"discardtoken SPACE = \"/s+\";" L"\r\n" +, L"" L"\r\n" +, L"rule PrimaryQuery QPrimaryFragment" L"\r\n" +, L"\t=\t(" L"\r\n" +, L"\t\t\t(NAME : typeName with {typeNameOption=\"Specified\"})" L"\r\n" +, L"\t\t\t| (\"*\" with {typeNameOption=\"Any\"})" L"\r\n" +, L"\t\t)" L"\r\n" +, L"\t\t[\".\" NAME : referenceName] as PrimaryQuery" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"rule PrimaryQuery QPrimaryAttributed" L"\r\n" +, L"\t= !QPrimaryFragment with {attributeNameOption=\"Any\"}" L"\r\n" +, L"\t= \"@\" [NAME : attributeName] \":\" !QPrimaryFragment with {attributeNameOption=\"Specified\"}" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"rule PrimaryQuery QPrimary" L"\r\n" +, L"\t= (\"/\" with {childOption=\"Direct\"}) !QPrimaryAttributed" L"\r\n" +, L"\t= (\"//\" with {childOption=\"Indirect\"}) !QPrimaryAttributed" L"\r\n" +, L"\t= \"(\" !QueryRoot \")\"" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"rule Query Query0" L"\r\n" +, L"\t= !QPrimary" L"\r\n" +, L"\t= Query0 : parent QPrimary : child as CascadeQuery;" L"\r\n" +, L"" L"\r\n" +, L"rule Query Query1" L"\r\n" +, L"\t= !Query0" L"\r\n" +, L"\t= Query1 : first \"^\" Query0 : second as SetQuery with {op=\"ExclusiveOr\"}" L"\r\n" +, L"\t= Query1 : first \"*\" Query0 : second as SetQuery with {op=\"Intersect\"}" L"\r\n" +, L"\t;" L"\r\n" +, L"\t" L"\r\n" +, L"rule Query Query2" L"\r\n" +, L"\t= !Query1" L"\r\n" +, L"\t= Query2 : first \"+\" Query1 : second as SetQuery with {op=\"Union\"}" L"\r\n" +, L"\t= Query2 : first \"-\" Query1 : second as SetQuery with {op=\"Substract\"}" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"rule Query QueryRoot" L"\r\n" +, L"\t= !Query2" L"\r\n" +, L"\t;" L"\r\n" +}; +const vint lengthTextBuffer[] = { + 2, 13, 3, 3, 2, 17, 3, 13, 7, 3, 2, 18, 3, 10, 12, 3, 2, 28, 3, 28, 35, 25, 30, 20, 25, 3, 2, 28, 3, 18, 17, 3 +, 2, 21, 3, 15, 13, 9, 13, 3, 2, 24, 3, 17, 18, 21, 3, 2, 26, 22, 39, 24, 20, 21, 19, 25, 21, 24, 24, 20, 18, 2, 29, 2 +, 36, 6, 56, 40, 5, 46, 4, 2, 38, 55, 92, 4, 2, 28, 58, 61, 23, 4, 2, 19, 14, 54, 2, 19, 12, 75, 73, 4, 3, 19, 12, 69 +, 73, 4, 2, 22, 12, 4 +}; +const vint lengthTextBufferTotal = 1943; vl::WString GuiIqGetParserTextBuffer() { - return parserTextBuffer; + vl::collections::Array textBuffer(lengthTextBufferTotal + 1); + wchar_t* reading = &textBuffer[0]; + for(vint i = 0; i < sizeof(parserTextBuffer) / sizeof(*parserTextBuffer); i++) + { + memcpy(reading, parserTextBuffer[i], lengthTextBuffer[i] * sizeof(wchar_t)); + reading += lengthTextBuffer[i]; + } + *reading = 0; + return &textBuffer[0]; } /*********************************************************************** @@ -2045,7 +2060,7 @@ const vint parserBufferLength = 5817; // 27819 bytes before compressing const vint parserBufferBlock = 1024; const vint parserBufferRemain = 697; const vint parserBufferRows = 6; -const char* parserBuffer[] = { +const char* const parserBuffer[] = { "\x00\x00\x81\x81\x84\x02\x81\x80\x07\x82\x00\x87\x80\x83\x21\x33\x3B\x31\x30\x64\x65\x11\x35\x35\x32\x39\x3D\x7F\x18\x99\x98\x8A\x85\x84\x8C\x28\x39\x69\x6D\x21\x36\x83\x8D\x8B\x8A\x8D\x19\x85\x08\x80\x0A\x90\x81\x92\x8B\x28\x99\x88\x0B\x93\x98\x83\x29\x32\x74\x2F\xA7\x91\x9B\x03\x94\x8E\x81\x1C\x8C\x8E\x90\x82\x8C\x8A\x8B\x96\x05\xC8\xA3\x28\x39\x34\x34\x33\x98\x1B\xBE\x81\x82\xAF\x81\x8A\x9C\x03\x2B\xD8\x80\x90\x33\x95\x32\x36\x3A\x50\xFF\x7F\x86\x81\x87\x8D\x91\x91\x79\x3A\x8D\x0B\x9B\xB0\x81\x30\x3A\x74\x20\xA2\x35\x34\x3D\x32\x27\x30\x6D\x65\x21\xA3\xB9\x85\xB0\x90\x91\x24\xC6\xB9\x33\x0B\x94\xC2\xB6\xB8\x72\xF4\xB6\xB8\xB5\x37\x24\x38\x3A\x69\x6F\x2E\x3B\xB2\xA8\x82\xB2\xC0\x69\x82\xFD\x88\x8B\xC8\x03\xA5\xA6\x64\x0E\xD0\xD2\xC4\xC8\x86\x8F\xBF\x68\xEA\xAC\xA1\x82\x3D\x32\x33\x8A\x5E\xE3\x0B\xD9\xB5\xD5\x8E\xBF\xB3\x81\xA6\xB5\x85\x8B\xDC\x39\x3C\x38\xB3\xFA\x90\xBC\xB0\x07\xD0\xDD\xCC\x26\x8E\x2B\x8A\xE0\x86\xDC\xE1\xBB\x79\xA2\xD1\xD3\xC0\xAB\xDE\x81\xDD\x37\xB9\x82\xC8\xA2\x80\xA6\x33\x34\x72\x73\x20\xB5\xE4\x99\x81\xEC\x9D\x02\x2B\xA9\xE0\x8F\x30\x39\xB0\xEB\x01\xD8\xF8\x97\xA9\xA9\x83\x39\x32\x63\x12\xCF\xB0\xA1\x0B\x97\x17\x95\xFD\x6B\x42\x83\x4A\x61\x61\x53\x80\x81\x05\xB1\x47\x80\x42\x09\x8A\x8B\x82\x40\x0D\xA8\x40\x7C\x40\xBB\x49\x1E\x10\x11\x49\x12\x15\x13\x10\x54\x04\x48\x42\x87\x00\x2F\x02\x8B\x7F\x08\xB1\x4A\x55\x41\x27\x98\x8A\x84\x87\xEB\x45\x4D\x8A\x88\x01\x25\x88\x48\x88\x02\x60\x8E\x11\x10\x4D\x05\x15\x07\x4A\x3B\x80\x4B\x15\x18\x2D\x3A\x11\x11\x0B\x5A\x1F\x1D\x17\x8F\x41\x83\x9A\x14\x0C\x2D\x39\x0D\x16\x0A\x2D\x90\x84\x78\x42\xBB\x57\x19\x10\x13\x44\x03\x11\x12\x14\x44\x11\x91\x43\x8B\x2A\x03\x02\x8E\x46\x34\x83\x41\x43\x13\x50\x05\x1E\x12\x97\x00\x6F\x88\x09\x99\x00\x61\x5C\x75\x40\x48\x43\x1C\x13\x13\x53\x05\x1C\x98\x00\x2F\xA9\x03\x9D\x9C\x50\x62\x98\x42\xA0\x00\x18\x1F\x12\x14\x7B\xAF\x8E\x17\x89\x52\xB1\x49\x03\x4A\x8F\x80\x46\x84\x15\x45\x12\x19\x9C\x8B\xEA\x41\x4F\x0A\x0A\x07\x23\x99\x4B\x4A\x48\x55\x1E\x11\x12\x4F\x2B\x99\xA4\x40\x2F\x2B\x03\x84\x00\x61\x51\xA5\x42\xAB\x53\x15\x12\x13\x14\x54\x12\x11\x10\x87\x31\x88\x49\xAC\x00\x2D\x2E\xAD\xA0\x4A\xBE\x81\x4E\xA9\x10\x54\x35\xA9\x12\x10\x55\x14\xAB\xAE\x40\xBB\x80\x1A\x02\xA7\x18\x7F\x9C\x4B\x54\x4F\x37\x9E\x13\xB2\x01\x7B\xAA\x0D\x67\xBF\x9A\x44\xA2\x40\x84\x84\x1F\x10\x15\xD8\x80\x4B\xAE\x0B\xC4\x61\x55\xBB\xB4\x08\x48\x53\x14\x14\xB7\x85\x1F\xB5\x40\x84\xAF\x03\x1F\x0A\x6D\x45\x41\x58\x89\x05\x50\x0B\x4A\xBF\x2E\x57\x68\x5A\x11\x72\x21\x17\x19\x5E\x5F\x5A\x0B\x4A\xC2\x01\xE8\x66\x44\xC1\x06\xC8\xC4\x1E\x0B\x52\x2F\x1F\x18\x1D\x53\x34\x13\x48\x1D\x3D\x85\x4D\xC4\x10\x20\x24\x0C\x0D\x14\x02\xCF\xC5\xC3\xC1\x5E\x74\x1E\x0C\xC0\xFD\x81\x44\xCA\xC3\x79\x10\xC8\xCB\x57\x16\x2B\x45\xCD\xC3\xC7\x72\xC2\xC6\x0B\x19\xDB\xC4\x07\x4A\x3F\xC0\x40\xCB\xC8\x25\xF1\xC7\xCA\xC4\x2B\xFF\xBE\xC9\xD1\x3A\xE9\xC2\x07\x4A\x4F\xF8\xC8\x65\xD3\x5F\x6E\x01\x0D\x2A\x2B\x58\xD0\x40\xD1\x30\xD4\xDA\xCA\x0E\x20\x28\x01\xD8\x08\x37\xB9\x80\x08\xD8\xCE\x41\x70\x0B\x1D\x69\x34\x18\x18\x08\x7B\x20\x09\xD8\x74\x8D\x4F\x63\x74\x08\x3D\x20\x02\x0B\x14\xC0\x63\x19\x1B\x77\x65\x24\x12\x08\x08\x7D\x20\x09\x08\x08\x7C\x23\xD2\x0A\x0A\x83\xEC\xDE\xD8\xDC\x72\xFF\x61\x72\x74\x92\x78\xDA\xDD\x10\x6E\x39\x13\xE1\xE1\x87\xE9\x00\xCB\x16\x7A\xEE\x03\xE1\xD9\x45\x27\xD0\x09\x6B\xAF\x6D\x6E\x1A\x6C\x74\xE0\x0D\x14\x08\x0D\x60\x05\xD2\x4E\x2C\xC2\x4C\xCB\xCB\x39\xC7\xDE\xD0\xD4\x4B\xDD\xDA\xED\xD5\x32\x1A\xD5\x42\xF0\x5C\xF9\xE1\xC5\xCA\x3E\x20\xD2\xDA\xD8\xA4\xE6\xE3\xDC\x63\x6B\xED\xDF\xD9\xDC\xCF\xD1\x76\xDD\xE5\x79\xFB\xDD\xDF\xDF\x69\x01\xEB\xE6\xE1\x88\xCA\xEC\xE1\xF4\x8F\xD4\xF2\xE4\xDD\x94\xEE\x16\xE6\x08\x98\xDA\xE4\xE0\xF8\x9E\xE0\x00\xEA\x08\xA2\xE4\xD8\x8D\xE9\x60\xE8\xE0\x6F\xEA\x6A\xEF\xE1\xEF\xEC\x82\x35\x75\x40\x37\x7C\x69\xDF\x74\x09\x6A\x05\x28\x80\xEE\x53\x66\x80\x17\x33\x02\x78\x02\x24\x7B\x02\x83\x66\x81\xE4\x63\x6C\x79\xF7\x6E\x7B\xF9\x50\x7E\x71\xE9\x51\x77\x39\x8C\x29\x7F\xFA\x7C\x68\x3E\xEE\x5E\x7F\x7D\x87\x69\x72\xD8\x0B\x7D\x70\xE9\x50\x75\x7A\x75\x63\x36\xFA\x59\x7D\x7D\xEF\x5D\x72\x7E\xA1\x62\x04\xC8\x4D\x79\x7E\xD7\x3B\x7C\x75\xD0\x7E\x7F\x1C\x32\x70\x66", "\xDA\x4A\x6A\x6A\x14\x87\x7B\x57\x18\x0B\x24\x26\x88\x8E\x64\x4A\x93\x61\xC5\x17\x65\x08\x37\x24\x0D\x63\x02\x3D\x62\xC8\x13\x80\x8B\x99\x6A\x60\x04\x40\x08\x82\x40\x0A\x85\x69\x20\x08\x31\x0D\x73\x35\x2C\x19\x41\x65\x20\x36\x9C\x89\x0F\x66\x91\x2C\x1A\x8A\x34\x0C\xAB\x43\x1B\x25\x77\x9B\x6B\x1B\xF1\x89\x30\x35\x96\x81\x04\x6F\x9E\x68\xC8\x1D\x80\x73\xB7\x32\x89\x8D\x93\x77\x7B\x0C\x97\x79\x73\xCD\x4D\x02\x01\xC5\x78\x30\x1F\xF3\x8E\x8E\xB0\x7A\x83\x70\xA0\x7C\x84\xEC\x67\x88\x91\xD6\x6F\x72\x04\x3A\x03\x70\x20\x85\x81\x8B\x41\xAE\x81\x6E\x86\x9D\x8D\x22\xB2\x83\x85\xED\x40\x72\x70\x84\x62\x80\x40\x04\x8E\x77\x28\xA2\x89\x20\x64\x95\x96\x17\xAE\x05\x06\x08\x81\x22\x82\xA4\x9E\x8A\x05\xCB\x76\x7E\xB3\x68\x6B\x83\x79\x24\x7E\x07\xB0\x82\x85\xEC\x64\x86\x6F\xAF\x96\x85\xF8\x2B\x83\x7C\x42\xA6\x78\x84\xD6\x6C\x94\x0D\x8D\x98\x84\xF0\x73\x7D\x7E\x9A\x9A\x7E\xEA\x40\x89\x98\x21\x84\x8F\x38\x3A\x21\x8C\xEF\x4F\x80\x8E\x4E\xB4\x8C\x61\x05\x30\x9F\x1E\xEE\x9A\x8C\x8A\x56\x64\x0E\x55\x84\x0F\x05\x2B\x2B\x9E\x80\x1B\x8D\x8C\xF4\x81\x72\x0F\x60\x8B\x55\xDD\x2F\x8F\x59\x08\x28\xA0\x00\x6F\x8E\x80\x5B\x2B\x26\xA1\x7A\x85\x6B\x30\xFA\x6F\x05\x16\xA5\x78\x04\x9F\x2E\x29\x33\xFA\x64\x08\xF0\x38\x3C\x0E\xD2\x83\x94\xCC\x13\x98\x90\x32\x00\x0F\x91\x91\x88\x2F\x44\xA2\x02\x44\x8B\x9E\x81\xA3\xA1\x2A\x93\xFA\x49\x06\x8A\x8F\xA3\x08\xA4\xDD\x82\xA7\x71\x24\xA4\x8F\x93\x90\x97\x8D\x16\x82\x04\x0A\x22\x9A\x27\x29\xB4\x0A\x6F\x29\x1A\x85\x41\xBD\x77\x38\x59\x80\x04\x96\xC7\x36\x9C\x15\xD6\x89\x5E\x81\x39\x5F\x9F\x30\x63\xA0\x10\x0C\x51\x21\x13\x7A\x20\x06\x4B\xAE\x26\x60\x30\x06\x6B\x28\x2B\x26\xAC\x7A\x83\xAF\x1F\xEF\x8E\xA7\x91\x6A\xA8\x6C\x5F\xA6\x74\x57\x2A\x77\xA9\x37\xA6\x70\xA6\xB0\x63\x88\x55\x44\x29\x9C\xAE\x80\x26\xAB\x63\xA1\xAF\x42\xE3\xAE\x81\x1D\x2B\x26\xB0\x69\xA6\x24\x0C\x16\x81\xAE\xB0\x73\xA9\x65\x20\x16\xAC\xD8\x78\xA1\x77\xBD\x96\x2A\x30\x5B\xB5\x3E\x58\x8A\xB2\xB1\xAF\xAE\x02\x06\x88\xA5\x21\x68\xEE\xAA\xB0\xC6\xA3\xAA\xAE\x5D\x3F\x28\xC8\x12\xB8\xA2\xA6\x0E\x29\xAF\x20\x16\xB1\x51\x26\x2E\xAE\x00\x00\xB2\xB1\xCC\x25\x21\x6E\x9E\xB6\xA9\x7C\x9C\x59\x20\x9D\x3B\x8A\x5A\xE0\x85\xB7\xDB\x96\x21\x06\x9D\xA2\x31\x0C\x56\x6E\x17\x95\x0D\xB9\xB1\xC7\xAB\xAF\x58\xED\xAA\x27\x18\x26\xB6\x24\x31\x06\x77\x77\x61\x37\xA8\x11\x1E\x0B\x70\x8D\xA0\x07\x7D\x79\x36\x8A\xD8\xA7\x3A\x30\xCA\x90\x71\x7B\x6B\x75\x08\x3C\x23\x0C\x0D\x75\x13\x0D\x1A\x76\x0D\x30\x39\x1B\x74\xBA\xCA\xB7\xBB\x71\xDA\xB0\x3C\xF1\x3A\x6B\x7C\xE1\xA3\xBE\x7E\x66\xB3\x3E\xF4\x96\x98\x04\xEB\xB9\x78\x4D\xF5\x21\x3D\x8F\xB7\xBD\xB8\x2E\x6A\xB9\x72\xD8\xBE\x04\x1A\x2A\x13\x25\x17\xD0\xB9\x1E\x56\xB0\xAE\xE5\xBC\xBC\xBB\x7A\x7F\xB9\x64\xA7\xB0\x6C\x01\xE5\xB9\x76\xE7\xA6\x26\x29\x97\xA9\xC0\xBD\x6D\xBF\xBD\xF1\xB3\xBD\x7D\x8E\x9F\xA7\xFC\x9D\xC0\xBB\x1F\xDE\xBC\x0B\xA3\xCA\xB0\xD3\x66\xC4\x0C\x04\xDA\x3A\x8A\xE9\xB1\x6F\x16\xE2\x03\xC1\x15\x23\xBC\x4E\xFD\x0D\xB3\xA2\x4A\xA2\x20\x0A\xAC\xA1\x0C\x15\x1B\x24\x2A\xD1\xA1\xAB\xCA\x74\xA2\x0E\xC4\xCD\xB4\xD0\x1B\xA2\x04\x1D\xAD\x37\x4D\xA1\xA3\x9F\x43\xB4\x88\xA5\x40\xB9\xC8\x4B\x95\xAB\xC5\x97\xAE\xB1\xA6\xDA\x9A\x6C\x4D\xE4\x06\xA7\x25\xE0\x7A\xA7\x92\x81\xA0\x19\x4D\xC0\x67\x27\xC1\x21\xCA\x45\x7F\xB3\x07\x2B\x23\xD1\x2B\xC7\x39\xA8\x43\xA0\x64\x20\x82\x36\xA8\xA4\xA2\x00\xC2\x9B\xA7\xBB\x84\xC7\xBF\xB3\x0C\xC5\x26\xD2\xA4\xB1\xBB\x8D\xFB\xB0\x6D\xED\xA2\x38\x64\xDE\xA0\xBC\x89\xE2\xB8\x3F\x01\xE8\xC5\xC0\x26\x3C\xCA\x91\xAF\xC0\xBE\xF9\xB4\xBF\x09\xF6\xA4\x70\x9A\xB6\xCC\xC6\x4E\xE0\x06\xD3\x74\x00\xD4\x80\xA3\xDF\xC7\x20\xFA\x22\xD5\x70\x13\xA7\x57\x49\xCE\xC0\xC2\x50\xD3\xB0\xD8\xB9\xB6\x40\x3B\xBA\xB8\xA9\xB8\x9E\x8A\xBF\xA0\x21\x70\x99\xDB\xC2\xAD\x87\xDA\x27\x32\x13\xD1\x1E\x32\x06\x6A\x5C\x2B\x26\xDB\x1A\xD2\x06\x74\xD8\xB8\xBE\x93\x22\xDB\xD3\xDB\xD9\xC5\x77\xAB\x02\xD4\x1C\xE5\xC5\xD4\x27\xC3\x89\x8A\x96\x20\xD9\xF5\x55\x0E\x0D\xD3\x37\xBF\xAC\xE6\xDA\xBF\x74\xDD\xD5\xBF\xDD\xAD\x05\xBB\xB6\xDD\xD7\x53\xC2\xCC\xDE\x07\xC6\xCB\x14\x75\x02\x0C\xF1\x05\x63\xCC\x84\x79\xB0\x42\x46\xBB\xDA\x6D\xDC\xDC\x06\xA4\x0B\x25\xC6\xE1\xDD\xDE\x19\x2A\xDA\x6F\xEC\xD5\xD7\x86\xBE\xC0\xDE\x20\xC6\xE1\x9D\xF5\xD9\x7B\xBD\xF9\xD2\xD7\x1A", "\xFC\xD8\xDD\x1E\xFF\xDC\x88\xA2\x02\xE0\x91\xD9\xBF\xDD\xE4\xA6\xE6\xBC\xA8\xD6\x23\x36\xEA\xB9\xD8\xCE\x8C\xE2\xC3\xE1\x00\xE3\x3E\x37\x90\x20\xB9\x9B\xA6\x9E\xEC\x82\x20\x37\x80\xA6\xCC\xF5\x92\x04\x1D\x2B\x23\xEA\x43\xF9\xC8\xEA\x02\xB6\x90\x10\x5B\xC9\x93\x0C\xA0\x69\x95\x94\x9D\x7E\xDE\x21\x90\x04\x3C\xC9\x8E\x8B\x5C\xC0\xED\x27\xA1\x82\xA6\x67\xAE\x95\x7B\xB0\x9D\x0F\xB5\x92\xC5\x3D\x48\xDB\xC6\x81\x96\xC2\x20\xA6\xD5\xBD\xDF\x9B\xF7\xD0\xE0\x21\xDB\xC9\x80\xA5\xEE\xD6\x03\xE7\x90\xC1\x40\xEE\xC6\x7B\xAD\xD2\xC6\x58\xF4\xC4\xDA\x1C\xD6\xE7\xC7\xAC\x8B\xB4\x5E\xC4\xF7\xE4\x86\xEC\xC5\xE2\xC7\xC3\xD9\x06\xC5\xEB\xEE\xE6\xD6\xE3\x67\x9B\xE5\x20\xD2\xD4\xDF\xDC\x22\xF1\xE7\xDF\xDC\xB0\xD5\x90\xD5\xBC\xE4\x39\xE5\xF1\xAA\x89\xEB\xF3\x95\xD2\x37\xF1\xD8\xDD\xE2\xBA\xA0\xD5\xE7\xD7\xF8\xE6\xD4\x3B\xE7\xE1\x1E\x29\xEA\x6F\x85\xCD\xE1\x2E\x44\xEB\xC8\xE8\x96\x22\x06\x65\xC1\x24\xD9\xE6\xCE\xDA\x6F\xAB\x23\xDB\xDC\xE0\x89\x58\x00\x2E\x55\x51\xF7\x91\xDA\x00\x1D\x33\xFB\x17\x76\x68\x16\x81\x2D\x62\x6A\xC6\xAB\xDC\xCC\xEA\x9C\x42\x49\xE7\xEA\x55\xAB\x88\x68\x4C\xAD\xFD\xD8\xF5\x85\x07\xAA\xC5\x26\xFE\x29\xB6\x20\x4F\x95\x9A\x6F\xAD\xF8\x82\x93\x6A\x7A\x18\x9E\x43\x76\x5B\x66\x76\x5D\x42\x31\x69\x71\x50\xE8\x3D\x76\xC5\x7F\x76\x27\x46\x74\xEB\x4B\x50\x4F\x7E\x7E\x4C\x71\x10\x4E\x73\x52\x7A\x65\x61\xF6\x72\x10\xF8\x75\x66\xEE\x71\x54\xFE\x7D\x75\xC6\x4B\x49\x58\x7E\x49\xA0\x64\x76\x06\x86\x34\x51\x49\x80\x25\x8C\x76\x71\x6A\x3D\x25\x41\x4D\xC6\x6A\x59\xC8\x6C\x7C\xA2\x73\x03\xA4\x72\x10\xA6\x79\x7B\x30\x73\x79\xEC\x65\x79\xEE\x64\x6A\xB1\x78\x79\xB3\x77\x78\x46\x66\x7B\x6E\x08\x7B\x82\x18\x7A\xD8\x63\x79\x02\x70\x84\x04\x77\x79\xC1\x7F\x6B\xB4\x73\x42\x42\x78\x7C\x45\x7C\x67\xC7\x1E\x67\x00\x10\x68\x30\x35\x61\x85\x65\x10\x61\x89\x7F\x79\x08\x68\x44\x5C\x68\xF7\x40\x6A\x49\x58\x7D\x00\x0A\x7D\x68\x87\x31\x01\x25\x10\x71\x80\x7E\x52\x47\x4F\xF9\x4E\x7C\x00\x19\x5B\xC2\x56\x12\xE7\x70\x46\x47\x70\x00\xEC\x78\x16\xFB\x71\x38\x1C\x0B\x12\x85\x8C\x4E\x83\x85\x47\x46\x5D\x33\x72\x04\x07\xFD\x45\x10\x8F\x80\x32\x58\x5A\x74\x58\x74\x06\x3E\x0F\x87\x81\x8A\x7F\x7A\x6E\x44\x05\x1C\x89\x1E\x83\x7F\x3C\x3A\x31\x8D\x87\x33\x05\x14\x8A\x43\x3F\x89\x25\x5E\x03\x5A\x88\x19\x98\x81\x7F\x68\x1E\x6C\x8C\x84\x07\x55\x51\x10\xF9\x22\x89\x64\x8A\x8A\x75\x72\x81\x30\x38\x87\x00\x0B\x5B\x81\x61\x8B\xC4\x1C\x11\xA7\x82\x51\xCB\x79\x07\x30\x0E\x54\xB7\x34\x58\x8B\x82\x8A\x74\x0D\x7D\x9D\x16\x8B\x5F\x5E\x03\xC5\x80\x03\xC1\x81\x61\x8A\x51\x8A\x1B\x3C\x85\x00\x0A\x50\xA7\x8A\x56\xC5\x81\x03\xC8\x86\x8D\x94\x6B\x8C\x1B\x3E\x8C\x01\x10\x8D\xF9\x5F\x8D\xD5\x86\x77\xCB\x51\x8B\xDA\x8C\x8D\x20\x00\x79\xD2\x84\x83\xD8\x61\x8E\x76\x7C\x6D\xE4\x8D\x88\xE6\x82\x34\x21\x37\x7A\xF3\x83\x71\xE2\x8B\x6D\xEB\x85\x83\xDB\x68\x8D\x8D\x8F\x8E\xE7\x81\x8F\xB9\x7C\x86\x6E\x8C\x87\xF7\x46\x18\x05\x10\x91\x74\x80\x8B\xCC\x8C\x8B\xB9\x58\x8E\x0E\x97\x31\x3E\x0C\x90\x01\x96\x54\x0F\x0B\x12\x1F\x96\x77\x46\x56\x90\xB2\x8B\x1A\xFC\x86\x7E\xF7\x49\x34\x08\x10\x55\x0C\x46\x4B\x11\x81\x48\x0D\x44\x03\xBE\x40\x10\xC0\x4A\x4B\x48\x39\x65\x18\x43\x82\x30\x4C\x65\xCC\x4C\x80\x30\x80\x4D\x70\x72\x4D\x2A\x4F\x5F\x2E\x5F\x42\xC8\x41\x43\x77\x3B\x4D\xEE\x3C\x39\xDE\x49\x43\xC5\x48\x3F\xA7\x3E\x43\xE3\x42\x76\xFF\x35\x44\x98\x5D\x8A\x88\x8B\x74\xF0\x79\x95\x95\x8E\x40\x79\x45\x10\x5F\x94\x86\x89\x8B\x56\xC1\x48\x80\x07\x61\x80\x75\x1B\x80\x2F\x85\x43\x11\x78\x66\x13\x83\x7F\x20\x88\x49\x4F\x96\x3A\x68\x92\x76\xA0\x44\x54\x65\x90\x59\x67\x9A\x80\x2E\x89\x94\x0D\x81\x83\x41\x91\x71\x9D\x2B\x92\x47\x4A\x8B\xC6\x3E\x45\x03\x90\x40\x26\x1F\x20\xDD\x29\x11\x58\x96\x98\xF2\x75\x52\x89\x96\x95\x8B\x9B\x12\x21\x00\x2D\xFF\x0B\x8A\x68\x13\x99\xE8\x42\x18\x02\x23\x02\x98\x93\x8D\xD2\x28\x14\x3A\x12\x20\x25\x01\x9A\xF4\x8A\x5C\xA3\x91\x90\x02\x27\x02\xA8\x90\x90\xF7\x8B\x9A\x76\x72\x20\x29\x08\x99\x1C\x92\x92\xF7\x42\x9B\x04\x92\x20\x2B\x08\x99\x1F\x03\x2F\xAC\x2B\x2E\xFF\x02\x20\xEB\x2C\x98\xC6\x97\x9C\x10\x22\x9C\xB5\x5B\x27\xC8\x9B\x2E\xC5\x99\x8B\xD7\x11\x10\x30\x42\x20\xF6\x80\x99\x67\x72\x31\xFF\x02\x9C\x83\x95\x10\xC0\x98\x9C\xDE\x91\x27\xC2\x9B\x2E\xD2\x28\x9C\xCC\x97\x9C\x9C\x98\x19\xA5\x95\x98", @@ -4202,7 +4217,7 @@ GuiItemPropertyDeserializer auto assignExpr = MakePtr(); assignExpr->op = WfBinaryOperator::Assign; - assignExpr->first = CopyExpression(propertyExpression); + assignExpr->first = CopyExpression(propertyExpression, true); if (acceptValueType->GetTypeDescriptor()->GetTypeDescriptorFlags() == TypeDescriptorFlags::Object) { @@ -4466,7 +4481,7 @@ namespace vl sp = Workflow_GetScriptPosition(context); } - void Visit(WfVirtualExpression* node)override + void Visit(WfVirtualCfeExpression* node)override { traverse_visitor::ExpressionVisitor::Visit(node); vint index = sp->nodePositions.Keys().IndexOf(node); @@ -4477,7 +4492,18 @@ namespace vl } } - void Visit(WfVirtualStatement* node)override + void Visit(WfVirtualCseExpression* node)override + { + traverse_visitor::ExpressionVisitor::Visit(node); + vint index = sp->nodePositions.Keys().IndexOf(node); + if (index != -1) + { + auto record = sp->nodePositions.Values()[index]; + Workflow_RecordScriptPosition(context, record.position, node->expandedExpression, record.availableAfter); + } + } + + void Visit(WfVirtualCseStatement* node)override { traverse_visitor::StatementVisitor::Visit(node); vint index = sp->nodePositions.Keys().IndexOf(node); @@ -4488,7 +4514,21 @@ namespace vl } } - void Visit(WfVirtualDeclaration* node)override + void Visit(WfVirtualCfeDeclaration* node)override + { + traverse_visitor::DeclarationVisitor::Visit(node); + vint index = sp->nodePositions.Keys().IndexOf(node); + if (index != -1) + { + auto record = sp->nodePositions.Values()[index]; + FOREACH(Ptr, decl, node->expandedDeclarations) + { + Workflow_RecordScriptPosition(context, record.position, decl, record.availableAfter); + } + } + } + + void Visit(WfVirtualCseDeclaration* node)override { traverse_visitor::DeclarationVisitor::Visit(node); vint index = sp->nodePositions.Keys().IndexOf(node); @@ -4691,6 +4731,17 @@ Shared Script Type Resolver (Script) { case Workflow_Compile: Workflow_GenerateAssembly(context, Path_Shared, errors, false, context.compilerCallback); + if (auto compiled = Workflow_GetModule(context, Path_Shared)) + { + for (vint i = 0; i < compiled->modules.Count(); i++) + { + auto& module = compiled->modules[i]; + if (module.module) + { + module.module = CopyModule(module.module, true); + } + } + } break; } } @@ -5362,7 +5413,8 @@ Workflow_GenerateInstanceClass class ReplaceDeclImplVisitor : public empty_visitor::DeclarationVisitor - , public empty_visitor::VirtualDeclarationVisitor + , public empty_visitor::VirtualCfeDeclarationVisitor + , public empty_visitor::VirtualCseDeclarationVisitor { public: Func()> statCtor; @@ -5374,27 +5426,32 @@ Workflow_GenerateInstanceClass { } - virtual void Dispatch(WfVirtualDeclaration* node)override + void Dispatch(WfVirtualCfeDeclaration* node)override { - node->Accept(static_cast(this)); + node->Accept(static_cast(this)); } - virtual void Visit(WfFunctionDeclaration* node)override + void Dispatch(WfVirtualCseDeclaration* node)override + { + node->Accept(static_cast(this)); + } + + void Visit(WfFunctionDeclaration* node)override { node->statement = statCtor(); } - virtual void Visit(WfConstructorDeclaration* node)override + void Visit(WfConstructorDeclaration* node)override { node->statement = statCtor(); } - virtual void Visit(WfDestructorDeclaration* node)override + void Visit(WfDestructorDeclaration* node)override { node->statement = statCtor(); } - virtual void Visit(WfClassDeclaration* node)override + void Visit(WfClassDeclaration* node)override { CopyFrom(unprocessed, node->declarations, true); } @@ -5715,15 +5772,8 @@ Workflow_GenerateInstanceClass if (!beforePrecompile) { { - auto presentationExpr = MakePtr(); - presentationExpr->name.value = L"presentation"; - - auto rmExpr = MakePtr(); - rmExpr->parent = presentationExpr; - rmExpr->name.value = L"IGuiResourceManager"; - auto getRmExpr = MakePtr(); - getRmExpr->parent = rmExpr; + getRmExpr->parent = GetExpressionFromTypeDescriptor(description::GetTypeDescriptor()); getRmExpr->name.value = L"GetResourceManager"; auto call1Expr = MakePtr(); diff --git a/Import/GacUICompiler.h b/Import/GacUICompiler.h index 607dc6bf..9366f2af 100644 --- a/Import/GacUICompiler.h +++ b/Import/GacUICompiler.h @@ -6,112 +6,8 @@ DEVELOPER: Zihan Chen(vczh) #include "GacUIReflection.h" #include "Vlpp.h" #include "VlppWorkflowCompiler.h" -#include "VlppWorkflow.h" - -/*********************************************************************** -.\GUIINSTANCEHELPERTYPES.H -***********************************************************************/ -/*********************************************************************** -Vczh Library++ 3.0 -Developer: Zihan Chen(vczh) -GacUI Reflection: Instance Helper Types - -Interfaces: -***********************************************************************/ - -#ifndef VCZH_PRESENTATION_REFLECTION_GUIINSTANCEHELPERTYPES -#define VCZH_PRESENTATION_REFLECTION_GUIINSTANCEHELPERTYPES - - -#if defined(__APPLE__) || defined(__APPLE_CC__) - -using namespace vl; -using namespace vl::presentation; -using namespace vl::presentation::elements; -using namespace vl::presentation::compositions; -using namespace vl::presentation::controls; -using namespace vl::presentation::templates; -using namespace vl::presentation::theme; - -#endif - -namespace vl -{ - namespace presentation - { - -/*********************************************************************** -Helper Types -***********************************************************************/ - - namespace helper_types - { - struct SiteValue - { - vint row = 0; - vint column = 0; - vint rowSpan = 1; - vint columnSpan = 1; - }; - } - } - -#ifndef VCZH_DEBUG_NO_REFLECTION - - namespace reflection - { - namespace description - { - -/*********************************************************************** -Type List -***********************************************************************/ - -#define GUIREFLECTIONHELPERTYPES_TYPELIST(F)\ - F(presentation::helper_types::SiteValue)\ - - GUIREFLECTIONHELPERTYPES_TYPELIST(DECL_TYPE_INFO) - } - } - -#endif -} - -#endif - -/*********************************************************************** -.\GUIINSTANCESHAREDSCRIPT.H -***********************************************************************/ -/*********************************************************************** -Vczh Library++ 3.0 -Developer: Zihan Chen(vczh) -GacUI Reflection: Shared Script - -Interfaces: -***********************************************************************/ - -#ifndef VCZH_PRESENTATION_REFLECTION_GUIINSTANCESHAREDSCRIPT -#define VCZH_PRESENTATION_REFLECTION_GUIINSTANCESHAREDSCRIPT - - -namespace vl -{ - namespace presentation - { - class GuiInstanceSharedScript :public Object, public Description - { - public: - WString language; - WString code; - GuiResourceTextPos codePosition; - - static Ptr LoadFromXml(Ptr resource, Ptr xml, GuiResourceError::List& errors); - Ptr SaveToXml(); - }; - } -} - -#endif +#include "VlppWorkflowLibrary.h" +#include "VlppWorkflowRuntime.h" /*********************************************************************** .\INSTANCEQUERY\GUIINSTANCEQUERY_AST.H @@ -301,6 +197,77 @@ namespace vl } #endif +/*********************************************************************** +.\GUIINSTANCEHELPERTYPES.H +***********************************************************************/ +/*********************************************************************** +Vczh Library++ 3.0 +Developer: Zihan Chen(vczh) +GacUI Reflection: Instance Helper Types + +Interfaces: +***********************************************************************/ + +#ifndef VCZH_PRESENTATION_REFLECTION_GUIINSTANCEHELPERTYPES +#define VCZH_PRESENTATION_REFLECTION_GUIINSTANCEHELPERTYPES + + +#if defined(__APPLE__) || defined(__APPLE_CC__) + +using namespace vl; +using namespace vl::presentation; +using namespace vl::presentation::elements; +using namespace vl::presentation::compositions; +using namespace vl::presentation::controls; +using namespace vl::presentation::templates; +using namespace vl::presentation::theme; + +#endif + +namespace vl +{ + namespace presentation + { + +/*********************************************************************** +Helper Types +***********************************************************************/ + + namespace helper_types + { + struct SiteValue + { + vint row = 0; + vint column = 0; + vint rowSpan = 1; + vint columnSpan = 1; + }; + } + } + +#ifndef VCZH_DEBUG_NO_REFLECTION + + namespace reflection + { + namespace description + { + +/*********************************************************************** +Type List +***********************************************************************/ + +#define GUIREFLECTIONHELPERTYPES_TYPELIST(F)\ + F(presentation::helper_types::SiteValue)\ + + GUIREFLECTIONHELPERTYPES_TYPELIST(DECL_TYPE_INFO) + } + } + +#endif +} + +#endif + /*********************************************************************** .\GUIINSTANCEREPRESENTATION.H ***********************************************************************/ @@ -541,6 +508,40 @@ Instance Style Context #endif +/*********************************************************************** +.\GUIINSTANCESHAREDSCRIPT.H +***********************************************************************/ +/*********************************************************************** +Vczh Library++ 3.0 +Developer: Zihan Chen(vczh) +GacUI Reflection: Shared Script + +Interfaces: +***********************************************************************/ + +#ifndef VCZH_PRESENTATION_REFLECTION_GUIINSTANCESHAREDSCRIPT +#define VCZH_PRESENTATION_REFLECTION_GUIINSTANCESHAREDSCRIPT + + +namespace vl +{ + namespace presentation + { + class GuiInstanceSharedScript :public Object, public Description + { + public: + WString language; + WString code; + GuiResourceTextPos codePosition; + + static Ptr LoadFromXml(Ptr resource, Ptr xml, GuiResourceError::List& errors); + Ptr SaveToXml(); + }; + } +} + +#endif + /*********************************************************************** .\INSTANCEQUERY\GUIINSTANCEQUERY.H ***********************************************************************/ @@ -1071,19 +1072,8 @@ GuiVrtualTypeInstanceLoader public: static Ptr CreateThemeName(theme::ThemeName themeName) { - auto presentationExpr = MakePtr(); - presentationExpr->name.value = L"presentation"; - - auto themeExpr = MakePtr(); - themeExpr->parent = presentationExpr; - themeExpr->name.value = L"theme"; - - auto themeNameExpr = MakePtr(); - themeNameExpr->parent = themeExpr; - themeNameExpr->name.value = L"ThemeName"; - auto refExpr = MakePtr(); - refExpr->parent = themeNameExpr; + refExpr->parent = GetExpressionFromTypeDescriptor(description::GetTypeDescriptor()); switch (themeName) { #define THEME_NAME_CASE(TEMPLATE, CONTROL) case theme::ThemeName::CONTROL: refExpr->name.value = L ## #CONTROL; break; diff --git a/Import/GacUIReflection.cpp b/Import/GacUIReflection.cpp index 99f75942..35c9bd1b 100644 --- a/Import/GacUIReflection.cpp +++ b/Import/GacUIReflection.cpp @@ -2612,10 +2612,17 @@ Type Declaration ENUM_NAMESPACE_ITEM(CaretMoveDown) END_ENUM_ITEM(IGuiGraphicsParagraph::CaretRelativePosition) - BEGIN_ENUM_ITEM(ElementShape) + BEGIN_ENUM_ITEM(ElementShapeType) ENUM_CLASS_ITEM(Rectangle) ENUM_CLASS_ITEM(Ellipse) - END_ENUM_ITEM(ElementShape) + ENUM_CLASS_ITEM(RoundRect) + END_ENUM_ITEM(ElementShapeType) + + BEGIN_STRUCT_MEMBER(ElementShape) + STRUCT_MEMBER(shapeType) + STRUCT_MEMBER(radiusX) + STRUCT_MEMBER(radiusY) + END_STRUCT_MEMBER(ElementShape) BEGIN_CLASS_MEMBER(GuiSolidBorderElement) CLASS_MEMBER_BASE(IGuiGraphicsElement) @@ -2625,14 +2632,6 @@ Type Declaration CLASS_MEMBER_PROPERTY_FAST(Shape) END_CLASS_MEMBER(GuiSolidBorderElement) - BEGIN_CLASS_MEMBER(GuiRoundBorderElement) - CLASS_MEMBER_BASE(IGuiGraphicsElement) - CLASS_MEMBER_EXTERNALCTOR(Ptr(), NO_PARAMETER, vl::reflection::description::Element_Constructor<::vl::presentation::elements::GuiRoundBorderElement>) - - CLASS_MEMBER_PROPERTY_FAST(Color) - CLASS_MEMBER_PROPERTY_FAST(Radius) - END_CLASS_MEMBER(GuiRoundBorderElement) - BEGIN_CLASS_MEMBER(Gui3DBorderElement) CLASS_MEMBER_BASE(IGuiGraphicsElement) CLASS_MEMBER_EXTERNALCTOR(Ptr(), NO_PARAMETER, vl::reflection::description::Element_Constructor<::vl::presentation::elements::Gui3DBorderElement>) @@ -2680,10 +2679,23 @@ Type Declaration CLASS_MEMBER_PROPERTY_FAST(Shape) END_CLASS_MEMBER(GuiGradientBackgroundElement) + BEGIN_CLASS_MEMBER(GuiRadialGradientBackgroundElement) + CLASS_MEMBER_BASE(IGuiGraphicsElement) + CLASS_MEMBER_EXTERNALCTOR(Ptr(), NO_PARAMETER, vl::reflection::description::Element_Constructor<::vl::presentation::elements::GuiRadialGradientBackgroundElement>) + + CLASS_MEMBER_METHOD(SetColors, {L"value1" _ L"value2"}) + + CLASS_MEMBER_PROPERTY_FAST(Color1) + CLASS_MEMBER_PROPERTY_FAST(Color2) + CLASS_MEMBER_PROPERTY_FAST(Shape) + END_CLASS_MEMBER(GuiRadialGradientBackgroundElement) + BEGIN_ENUM_ITEM(GuiGradientBackgroundElement::Direction) ENUM_ITEM_NAMESPACE(GuiGradientBackgroundElement) ENUM_NAMESPACE_ITEM(Horizontal) ENUM_NAMESPACE_ITEM(Vertical) + ENUM_NAMESPACE_ITEM(Slash) + ENUM_NAMESPACE_ITEM(Backslash) END_ENUM_ITEM(GuiGradientBackgroundElement::Direction) BEGIN_CLASS_MEMBER(GuiSolidLabelElement) @@ -3039,6 +3051,7 @@ namespace vl LoadParsingTypes(); XmlLoadTypes(); JsonLoadTypes(); + WfLoadLibraryTypes(); LoadGuiBasicTypes(); LoadGuiElementTypes(); LoadGuiCompositionTypes(); @@ -3079,7 +3092,7 @@ Type Declaration #define _ , -#define GUI_TEMPLATE_PROPERTY_REFLECTION(CLASS, TYPE, NAME)\ +#define GUI_TEMPLATE_PROPERTY_REFLECTION(CLASS, TYPE, NAME, VALUE)\ CLASS_MEMBER_PROPERTY_GUIEVENT_FAST(NAME) BEGIN_ENUM_ITEM(ButtonState) @@ -3166,34 +3179,9 @@ Type Declaration NAME ## _PROPERTIES(GUI_TEMPLATE_PROPERTY_REFLECTION)\ END_CLASS_MEMBER(NAME)\ - GUI_CONTROL_TEMPLATE(GuiControlTemplate, GuiTemplate) - GUI_CONTROL_TEMPLATE(GuiLabelTemplate, GuiControlTemplate) - GUI_CONTROL_TEMPLATE(GuiSinglelineTextBoxTemplate, GuiControlTemplate) - GUI_CONTROL_TEMPLATE(GuiDocumentLabelTemplate, GuiControlTemplate) - GUI_CONTROL_TEMPLATE(GuiMultilineTextBoxTemplate, GuiScrollViewTemplate) - GUI_CONTROL_TEMPLATE(GuiDocumentViewerTemplate, GuiScrollViewTemplate) - GUI_CONTROL_TEMPLATE(GuiMenuTemplate, GuiWindowTemplate) - GUI_CONTROL_TEMPLATE(GuiWindowTemplate, GuiControlTemplate) - GUI_CONTROL_TEMPLATE(GuiButtonTemplate, GuiControlTemplate) - GUI_CONTROL_TEMPLATE(GuiSelectableButtonTemplate, GuiButtonTemplate) - GUI_CONTROL_TEMPLATE(GuiToolstripButtonTemplate, GuiSelectableButtonTemplate) - GUI_CONTROL_TEMPLATE(GuiListViewColumnHeaderTemplate, GuiToolstripButtonTemplate) - GUI_CONTROL_TEMPLATE(GuiComboBoxTemplate, GuiToolstripButtonTemplate) - GUI_CONTROL_TEMPLATE(GuiScrollTemplate, GuiControlTemplate) - GUI_CONTROL_TEMPLATE(GuiScrollViewTemplate, GuiControlTemplate) - GUI_CONTROL_TEMPLATE(GuiListControlTemplate, GuiScrollViewTemplate) - GUI_CONTROL_TEMPLATE(GuiTextListTemplate, GuiListControlTemplate) - GUI_CONTROL_TEMPLATE(GuiListViewTemplate, GuiListControlTemplate) - GUI_CONTROL_TEMPLATE(GuiTreeViewTemplate, GuiListControlTemplate) - GUI_CONTROL_TEMPLATE(GuiTabTemplate, GuiControlTemplate) - GUI_CONTROL_TEMPLATE(GuiDatePickerTemplate, GuiControlTemplate) - GUI_CONTROL_TEMPLATE(GuiDateComboBoxTemplate, GuiComboBoxTemplate) GUI_CONTROL_TEMPLATE(GuiListItemTemplate, GuiTemplate) - GUI_CONTROL_TEMPLATE(GuiTextListItemTemplate, GuiListItemTemplate) - GUI_CONTROL_TEMPLATE(GuiTreeItemTemplate, GuiTextListItemTemplate) - GUI_CONTROL_TEMPLATE(GuiGridCellTemplate, GuiControlTemplate) - GUI_CONTROL_TEMPLATE(GuiGridVisualizerTemplate, GuiGridCellTemplate) - GUI_CONTROL_TEMPLATE(GuiGridEditorTemplate, GuiGridCellTemplate) + GUI_CONTROL_TEMPLATE_DECL(GUI_CONTROL_TEMPLATE) + GUI_ITEM_TEMPLATE_DECL(GUI_CONTROL_TEMPLATE) BEGIN_CLASS_MEMBER(GuiCommonDatePickerLook) CLASS_MEMBER_BASE(GuiTemplate) diff --git a/Import/GacUIReflection.h b/Import/GacUIReflection.h index 1ce1d47a..39721f23 100644 --- a/Import/GacUIReflection.h +++ b/Import/GacUIReflection.h @@ -5,7 +5,8 @@ DEVELOPER: Zihan Chen(vczh) #include "GacUI.h" #include "Vlpp.h" #include "VlppWorkflowCompiler.h" -#include "VlppWorkflow.h" +#include "VlppWorkflowLibrary.h" +#include "VlppWorkflowRuntime.h" /*********************************************************************** .\GUIINSTANCECOMPILEDWORKFLOW.H @@ -170,15 +171,16 @@ Type List (Elements) F(presentation::elements::IGuiGraphicsElement)\ F(presentation::elements::IGuiGraphicsParagraph)\ F(presentation::elements::IGuiGraphicsParagraph::CaretRelativePosition)\ + F(presentation::elements::ElementShapeType)\ F(presentation::elements::ElementShape)\ F(presentation::elements::GuiSolidBorderElement)\ - F(presentation::elements::GuiRoundBorderElement)\ F(presentation::elements::Gui3DBorderElement)\ F(presentation::elements::Gui3DSplitterElement)\ F(presentation::elements::Gui3DSplitterElement::Direction)\ F(presentation::elements::GuiSolidBackgroundElement)\ F(presentation::elements::GuiGradientBackgroundElement)\ F(presentation::elements::GuiGradientBackgroundElement::Direction)\ + F(presentation::elements::GuiRadialGradientBackgroundElement)\ F(presentation::elements::GuiSolidLabelElement)\ F(presentation::elements::GuiImageFrameElement)\ F(presentation::elements::GuiPolygonElement)\ @@ -265,6 +267,7 @@ Type List (Templates) F(presentation::controls::GuiComponent)\ F(presentation::controls::GuiInstanceRootObject)\ F(presentation::templates::GuiTemplate)\ + F(presentation::templates::GuiListItemTemplate)\ F(presentation::templates::GuiControlTemplate)\ F(presentation::templates::GuiLabelTemplate)\ F(presentation::templates::GuiSinglelineTextBoxTemplate)\ @@ -287,7 +290,6 @@ Type List (Templates) F(presentation::templates::GuiTabTemplate)\ F(presentation::templates::GuiDatePickerTemplate)\ F(presentation::templates::GuiDateComboBoxTemplate)\ - F(presentation::templates::GuiListItemTemplate)\ F(presentation::templates::GuiTextListItemTemplate)\ F(presentation::templates::GuiTreeItemTemplate)\ F(presentation::templates::GuiGridCellTemplate)\ diff --git a/Import/GacUIWindows.cpp b/Import/GacUIWindows.cpp index 5d11fdba..d7796725 100644 --- a/Import/GacUIWindows.cpp +++ b/Import/GacUIWindows.cpp @@ -1311,6 +1311,36 @@ IMPLEMENT_BRUSH_ELEMENT_RENDERER }\ }\ +#define IMPLEMENT_BRUSH_ELEMENT_RENDERER_RADIAL_GRADIENT_BRUSH(TRENDERER)\ + void TRENDERER::CreateBrush(IWindowsDirect2DRenderTarget* _renderTarget)\ + {\ + if(_renderTarget)\ + {\ + oldColor=Pair(element->GetColor1(), element->GetColor2());\ + brush=_renderTarget->CreateDirect2DRadialBrush(oldColor.key, oldColor.value);\ + }\ + }\ + void TRENDERER::DestroyBrush(IWindowsDirect2DRenderTarget* _renderTarget)\ + {\ + if(_renderTarget && brush)\ + {\ + _renderTarget->DestroyDirect2DRadialBrush(oldColor.key, oldColor.value);\ + brush=0;\ + }\ + }\ + void TRENDERER::OnElementStateChanged()\ + {\ + if(renderTarget)\ + {\ + Pair color=Pair(element->GetColor1(), element->GetColor2());\ + if(oldColor!=color)\ + {\ + DestroyBrush(renderTarget);\ + CreateBrush(renderTarget);\ + }\ + }\ + }\ + /*********************************************************************** GuiSolidBorderElementRenderer ***********************************************************************/ @@ -1318,42 +1348,36 @@ GuiSolidBorderElementRenderer IMPLEMENT_BRUSH_ELEMENT_RENDERER_SOLID_COLOR_BRUSH(GuiSolidBorderElementRenderer) IMPLEMENT_BRUSH_ELEMENT_RENDERER(GuiSolidBorderElementRenderer) { - ID2D1RenderTarget* d2dRenderTarget=renderTarget->GetDirect2DRenderTarget(); - switch(element->GetShape()) + ID2D1RenderTarget* d2dRenderTarget = renderTarget->GetDirect2DRenderTarget(); + auto shape = element->GetShape(); + + switch (shape.shapeType) { - case ElementShape::Rectangle: + case ElementShapeType::Rectangle: d2dRenderTarget->DrawRectangle( - D2D1::RectF((FLOAT)bounds.x1+0.5f, (FLOAT)bounds.y1+0.5f, (FLOAT)bounds.x2-0.5f, (FLOAT)bounds.y2-0.5f), + D2D1::RectF((FLOAT)bounds.x1 + 0.5f, (FLOAT)bounds.y1 + 0.5f, (FLOAT)bounds.x2 - 0.5f, (FLOAT)bounds.y2 - 0.5f), brush ); break; - case ElementShape::Ellipse: + case ElementShapeType::Ellipse: d2dRenderTarget->DrawEllipse( - D2D1::Ellipse(D2D1::Point2F((bounds.x1+bounds.x2)/2.0f, (bounds.y1+bounds.y2)/2.0f), bounds.Width()/2.0f, bounds.Height()/2.0f), + D2D1::Ellipse(D2D1::Point2F((bounds.x1 + bounds.x2) / 2.0f, (bounds.y1 + bounds.y2) / 2.0f), bounds.Width() / 2.0f, bounds.Height() / 2.0f), + brush + ); + break; + case ElementShapeType::RoundRect: + d2dRenderTarget->DrawRoundedRectangle( + D2D1::RoundedRect( + D2D1::RectF((FLOAT)bounds.x1 + 0.5f, (FLOAT)bounds.y1 + 0.5f, (FLOAT)bounds.x2 - 0.5f, (FLOAT)bounds.y2 - 0.5f), + (FLOAT)shape.radiusX, + (FLOAT)shape.radiusY + ), brush ); break; } } -/*********************************************************************** -GuiRoundBorderElementRenderer -***********************************************************************/ - - IMPLEMENT_BRUSH_ELEMENT_RENDERER_SOLID_COLOR_BRUSH(GuiRoundBorderElementRenderer) - IMPLEMENT_BRUSH_ELEMENT_RENDERER(GuiRoundBorderElementRenderer) - { - ID2D1RenderTarget* d2dRenderTarget=renderTarget->GetDirect2DRenderTarget(); - d2dRenderTarget->DrawRoundedRectangle( - D2D1::RoundedRect( - D2D1::RectF((FLOAT)bounds.x1+0.5f, (FLOAT)bounds.y1+0.5f, (FLOAT)bounds.x2-0.5f, (FLOAT)bounds.y2-0.5f), - (FLOAT)element->GetRadius(), - (FLOAT)element->GetRadius() - ), - brush - ); - } - /*********************************************************************** Gui3DBorderElementRenderer ***********************************************************************/ @@ -1537,20 +1561,32 @@ GuiSolidBackgroundElementRenderer IMPLEMENT_BRUSH_ELEMENT_RENDERER(GuiSolidBackgroundElementRenderer) { ID2D1RenderTarget* d2dRenderTarget=renderTarget->GetDirect2DRenderTarget(); - switch(element->GetShape()) + auto shape = element->GetShape(); + + switch(shape.shapeType) { - case ElementShape::Rectangle: + case ElementShapeType::Rectangle: d2dRenderTarget->FillRectangle( D2D1::RectF((FLOAT)bounds.x1, (FLOAT)bounds.y1, (FLOAT)bounds.x2, (FLOAT)bounds.y2), brush ); break; - case ElementShape::Ellipse: + case ElementShapeType::Ellipse: d2dRenderTarget->FillEllipse( D2D1::Ellipse(D2D1::Point2F((bounds.x1+bounds.x2)/2.0f, (bounds.y1+bounds.y2)/2.0f), bounds.Width()/2.0f, bounds.Height()/2.0f), brush ); break; + case ElementShapeType::RoundRect: + d2dRenderTarget->FillRoundedRectangle( + D2D1::RoundedRect( + D2D1::RectF((FLOAT)bounds.x1 + 0.5f, (FLOAT)bounds.y1 + 0.5f, (FLOAT)bounds.x2 - 0.5f, (FLOAT)bounds.y2 - 0.5f), + (FLOAT)shape.radiusX, + (FLOAT)shape.radiusY + ), + brush + ); + break; } } @@ -1602,20 +1638,76 @@ GuiGradientBackgroundElementRenderer brush->SetEndPoint(points[1]); ID2D1RenderTarget* d2dRenderTarget=renderTarget->GetDirect2DRenderTarget(); - switch(element->GetShape()) + auto shape = element->GetShape(); + + switch(shape.shapeType) { - case ElementShape::Rectangle: + case ElementShapeType::Rectangle: d2dRenderTarget->FillRectangle( D2D1::RectF((FLOAT)bounds.x1, (FLOAT)bounds.y1, (FLOAT)bounds.x2, (FLOAT)bounds.y2), brush ); break; - case ElementShape::Ellipse: + case ElementShapeType::Ellipse: d2dRenderTarget->FillEllipse( D2D1::Ellipse(D2D1::Point2F((bounds.x1+bounds.x2)/2.0f, (bounds.y1+bounds.y2)/2.0f), bounds.Width()/2.0f, bounds.Height()/2.0f), brush ); break; + case ElementShapeType::RoundRect: + d2dRenderTarget->FillRoundedRectangle( + D2D1::RoundedRect( + D2D1::RectF((FLOAT)bounds.x1 + 0.5f, (FLOAT)bounds.y1 + 0.5f, (FLOAT)bounds.x2 - 0.5f, (FLOAT)bounds.y2 - 0.5f), + (FLOAT)shape.radiusX, + (FLOAT)shape.radiusY + ), + brush + ); + break; + } + } + +/*********************************************************************** +GuiRadialGradientBackgroundElementRenderer +***********************************************************************/ + + IMPLEMENT_BRUSH_ELEMENT_RENDERER_RADIAL_GRADIENT_BRUSH(GuiRadialGradientBackgroundElementRenderer) + IMPLEMENT_BRUSH_ELEMENT_RENDERER(GuiRadialGradientBackgroundElementRenderer) + { + D2D1_POINT_2F center; + center.x = ((FLOAT)bounds.x1 + (FLOAT)bounds.x2) / 2; + center.y = ((FLOAT)bounds.y1 + (FLOAT)bounds.y2) / 2; + brush->SetCenter(center); + brush->SetRadiusX((FLOAT)bounds.Width() / 2); + brush->SetRadiusY((FLOAT)bounds.Height() / 2); + + ID2D1RenderTarget* d2dRenderTarget=renderTarget->GetDirect2DRenderTarget(); + auto shape = element->GetShape(); + + switch(shape.shapeType) + { + case ElementShapeType::Rectangle: + d2dRenderTarget->FillRectangle( + D2D1::RectF((FLOAT)bounds.x1, (FLOAT)bounds.y1, (FLOAT)bounds.x2, (FLOAT)bounds.y2), + brush + ); + break; + case ElementShapeType::Ellipse: + d2dRenderTarget->FillEllipse( + D2D1::Ellipse(D2D1::Point2F((bounds.x1+bounds.x2)/2.0f, (bounds.y1+bounds.y2)/2.0f), bounds.Width()/2.0f, bounds.Height()/2.0f), + brush + ); + break; + case ElementShapeType::RoundRect: + d2dRenderTarget->FillRoundedRectangle( + D2D1::RoundedRect( + D2D1::RectF((FLOAT)bounds.x1 + 0.5f, (FLOAT)bounds.y1 + 0.5f, (FLOAT)bounds.x2 - 0.5f, (FLOAT)bounds.y2 - 0.5f), + (FLOAT)shape.radiusX, + (FLOAT)shape.radiusY + ), + brush + ); + break; } } @@ -3656,6 +3748,57 @@ CachedResourceAllocator } }; + class CachedRadialBrushAllocator + { + typedef Pair ColorPair; + DEFINE_CACHED_RESOURCE_ALLOCATOR(ColorPair, ComPtr) + + IWindowsDirect2DRenderTarget* guiRenderTarget; + public: + CachedRadialBrushAllocator() + :guiRenderTarget(0) + { + } + + void SetRenderTarget(IWindowsDirect2DRenderTarget* _guiRenderTarget) + { + guiRenderTarget=_guiRenderTarget; + } + + ComPtr CreateInternal(ColorPair colors) + { + ID2D1RenderTarget* renderTarget=guiRenderTarget->GetDirect2DRenderTarget(); + ID2D1GradientStopCollection* stopCollection=0; + { + D2D1_GRADIENT_STOP stops[2]; + stops[0].color=GetD2DColor(colors.key); + stops[0].position=0.0f; + stops[1].color=GetD2DColor(colors.value); + stops[1].position=1.0f; + + HRESULT hr=renderTarget->CreateGradientStopCollection( + stops, + 2, + D2D1_GAMMA_2_2, + D2D1_EXTEND_MODE_CLAMP, + &stopCollection); + if(FAILED(hr)) return 0; + } + + ID2D1RadialGradientBrush* brush=0; + { + D2D1_POINT_2F points[2]={{0, 0}, {0, 0}}; + HRESULT hr=renderTarget->CreateRadialGradientBrush( + D2D1::RadialGradientBrushProperties(points[0], points[1], 1, 1), + stopCollection, + &brush); + stopCollection->Release(); + if(FAILED(hr)) return 0; + } + return brush; + } + }; + class CachedTextFormatAllocator { private: @@ -3870,6 +4013,7 @@ WindowsDirect2DRenderTarget CachedSolidBrushAllocator solidBrushes; CachedLinearBrushAllocator linearBrushes; + CachedRadialBrushAllocator radialBrushes; ImageCacheList imageCaches; ComPtr noAntialiasParams; @@ -3905,6 +4049,7 @@ WindowsDirect2DRenderTarget { solidBrushes.SetRenderTarget(this); linearBrushes.SetRenderTarget(this); + radialBrushes.SetRenderTarget(this); IDWriteFactory* dwriteFactory=GetWindowsDirect2DObjectProvider()->GetDirectWriteFactory(); IDWriteRenderingParams* defaultParams=0; @@ -4077,6 +4222,16 @@ WindowsDirect2DRenderTarget { linearBrushes.Destroy(Pair(c1, c2)); } + + ID2D1RadialGradientBrush* CreateDirect2DRadialBrush(Color c1, Color c2)override + { + return radialBrushes.Create(Pair(c1, c2)).Obj(); + } + + void DestroyDirect2DRadialBrush(Color c1, Color c2)override + { + radialBrushes.Destroy(Pair(c1, c2)); + } }; /*********************************************************************** @@ -4203,11 +4358,11 @@ void RendererMainDirect2D() GetCurrentController()->CallbackService()->InstallListener(&resourceManager); elements_windows_d2d::GuiSolidBorderElementRenderer::Register(); - elements_windows_d2d::GuiRoundBorderElementRenderer::Register(); elements_windows_d2d::Gui3DBorderElementRenderer::Register(); elements_windows_d2d::Gui3DSplitterElementRenderer::Register(); elements_windows_d2d::GuiSolidBackgroundElementRenderer::Register(); elements_windows_d2d::GuiGradientBackgroundElementRenderer::Register(); + elements_windows_d2d::GuiRadialGradientBackgroundElementRenderer::Register(); elements_windows_d2d::GuiSolidLabelElementRenderer::Register(); elements_windows_d2d::GuiImageFrameElementRenderer::Register(); elements_windows_d2d::GuiPolygonElementRenderer::Register(); @@ -8382,6 +8537,16 @@ WinDC ::Pie(FHandle, (int)Left, (int)Top, (int)Right, (int)Bottom, (int)StartX, (int)StartY, (int)EndX, (int)EndY); } + void WinDC::GradientRectH(TRIVERTEX* Vertices, vint VerticesCount, GRADIENT_RECT* Rectangles, vint RectangleCount) + { + GradientFill(FHandle, Vertices, (int)VerticesCount, Rectangles, (int)RectangleCount, GRADIENT_FILL_RECT_H); + } + + void WinDC::GradientRectV(TRIVERTEX* Vertices, vint VerticesCount, GRADIENT_RECT* Rectangles, vint RectangleCount) + { + GradientFill(FHandle, Vertices, (int)VerticesCount, Rectangles, (int)RectangleCount, GRADIENT_FILL_RECT_V); + } + void WinDC::GradientTriangle(TRIVERTEX* Vertices, vint VerticesCount, GRADIENT_TRIANGLE* Triangles, vint TriangleCount) { GradientFill(FHandle, Vertices, (int)VerticesCount, Triangles, (int)TriangleCount, GRADIENT_FILL_TRIANGLE); @@ -9006,14 +9171,19 @@ GuiSolidBorderElementRenderer { renderTarget->GetDC()->SetBrush(brush); renderTarget->GetDC()->SetPen(pen); - switch(element->GetShape()) + auto shape = element->GetShape(); + + switch(shape.shapeType) { - case ElementShape::Rectangle: + case ElementShapeType::Rectangle: renderTarget->GetDC()->Rectangle(bounds.Left(), bounds.Top(), bounds.Right()-1, bounds.Bottom()-1); break; - case ElementShape::Ellipse: + case ElementShapeType::Ellipse: renderTarget->GetDC()->Ellipse(bounds.Left(), bounds.Top(), bounds.Right()-1, bounds.Bottom()-1); break; + case ElementShapeType::RoundRect: + renderTarget->GetDC()->RoundRect(bounds.Left(), bounds.Top(), bounds.Right() - 1, bounds.Bottom() - 1, shape.radiusX * 2, shape.radiusY * 2); + break; } } } @@ -9030,52 +9200,6 @@ GuiSolidBorderElementRenderer } } -/*********************************************************************** -GuiRoundBorderElementRenderer -***********************************************************************/ - - void GuiRoundBorderElementRenderer::InitializeInternal() - { - IWindowsGDIResourceManager* resourceManager=GetWindowsGDIResourceManager(); - oldColor=element->GetColor(); - pen=resourceManager->CreateGdiPen(oldColor); - brush=resourceManager->CreateGdiBrush(Color(0, 0, 0, 0)); - } - - void GuiRoundBorderElementRenderer::FinalizeInternal() - { - IWindowsGDIResourceManager* resourceManager=GetWindowsGDIResourceManager(); - resourceManager->DestroyGdiPen(oldColor); - resourceManager->DestroyGdiBrush(Color(0, 0, 0, 0)); - } - - void GuiRoundBorderElementRenderer::RenderTargetChangedInternal(IWindowsGDIRenderTarget* oldRenderTarget, IWindowsGDIRenderTarget* newRenderTarget) - { - } - - void GuiRoundBorderElementRenderer::Render(Rect bounds) - { - if(oldColor.a>0) - { - vint ellipse=element->GetRadius()*2; - renderTarget->GetDC()->SetBrush(brush); - renderTarget->GetDC()->SetPen(pen); - renderTarget->GetDC()->RoundRect(bounds.Left(), bounds.Top(), bounds.Right()-1, bounds.Bottom()-1, ellipse, ellipse); - } - } - - void GuiRoundBorderElementRenderer::OnElementStateChanged() - { - Color color=element->GetColor(); - if(oldColor!=color) - { - IWindowsGDIResourceManager* resourceManager=GetWindowsGDIResourceManager(); - resourceManager->DestroyGdiPen(oldColor); - oldColor=color; - pen=resourceManager->CreateGdiPen(oldColor); - } - } - /*********************************************************************** Gui3DBorderElementRenderer ***********************************************************************/ @@ -9253,14 +9377,19 @@ GuiSolidBackgroundElementRenderer { renderTarget->GetDC()->SetPen(pen); renderTarget->GetDC()->SetBrush(brush); - switch(element->GetShape()) + auto shape = element->GetShape(); + + switch(shape.shapeType) { - case ElementShape::Rectangle: + case ElementShapeType::Rectangle: renderTarget->GetDC()->FillRect(bounds.Left(), bounds.Top(), bounds.Right(), bounds.Bottom()); break; - case ElementShape::Ellipse: + case ElementShapeType::Ellipse: renderTarget->GetDC()->Ellipse(bounds.Left(), bounds.Top(), bounds.Right()-1, bounds.Bottom()-1); break; + case ElementShapeType::RoundRect: + renderTarget->GetDC()->RoundRect(bounds.Left(), bounds.Top(), bounds.Right() - 1, bounds.Bottom() - 1, shape.radiusX * 2, shape.radiusY * 2); + break; } } } @@ -9297,92 +9426,132 @@ GuiGradientBackgroundElementRenderer void GuiGradientBackgroundElementRenderer::Render(Rect bounds) { - Color color1=element->GetColor1(); - Color color2=element->GetColor2(); - if(color1.a>0 || color2.a>0) + Color color1 = element->GetColor1(); + Color color2 = element->GetColor2(); + if (color1.a > 0 || color2.a > 0) { - TRIVERTEX vertices[4]; - GRADIENT_TRIANGLE triangles[2]; - - vertices[0].x=(int)bounds.x1; - vertices[0].y=(int)bounds.y1; - vertices[1].x=(int)bounds.x1; - vertices[1].y=(int)bounds.y2; - vertices[2].x=(int)bounds.x2; - vertices[2].y=(int)bounds.y2; - vertices[3].x=(int)bounds.x2; - vertices[3].y=(int)bounds.y1; - - triangles[0].Vertex1=0; - triangles[0].Vertex2=1; - triangles[0].Vertex3=2; - triangles[1].Vertex1=0; - triangles[1].Vertex2=2; - triangles[1].Vertex3=3; - - if(element->GetDirection()==GuiGradientBackgroundElement::Horizontal) + Ptr targetRegion, oldRegion, newRegion; + auto shape = element->GetShape(); + switch (shape.shapeType) { - vertices[0].Red=color1.r<<8; - vertices[0].Green=color1.g<<8; - vertices[0].Blue=color1.b<<8; - vertices[0].Alpha=0xFF00; - - vertices[1].Red=color1.r<<8; - vertices[1].Green=color1.g<<8; - vertices[1].Blue=color1.b<<8; - vertices[1].Alpha=0xFF00; - - vertices[2].Red=color2.r<<8; - vertices[2].Green=color2.g<<8; - vertices[2].Blue=color2.b<<8; - vertices[2].Alpha=0xFF00; - - vertices[3].Red=color2.r<<8; - vertices[3].Green=color2.g<<8; - vertices[3].Blue=color2.b<<8; - vertices[3].Alpha=0xFF00; + case ElementShapeType::Ellipse: + targetRegion = new WinRegion(bounds.x1, bounds.y1, bounds.x2 + 1, bounds.y2 + 1, false); + break; + case ElementShapeType::RoundRect: + targetRegion = new WinRegion(bounds.x1, bounds.y1, bounds.x2 + 1, bounds.y2 + 1, shape.radiusX * 2, shape.radiusY * 2); + break; } - else + + if (targetRegion) { - vertices[0].Red=color1.r<<8; - vertices[0].Green=color1.g<<8; - vertices[0].Blue=color1.b<<8; - vertices[0].Alpha=0xFF00; - - vertices[1].Red=color2.r<<8; - vertices[1].Green=color2.g<<8; - vertices[1].Blue=color2.b<<8; - vertices[1].Alpha=0xFF00; - - vertices[2].Red=color2.r<<8; - vertices[2].Green=color2.g<<8; - vertices[2].Blue=color2.b<<8; - vertices[2].Alpha=0xFF00; - - vertices[3].Red=color1.r<<8; - vertices[3].Green=color1.g<<8; - vertices[3].Blue=color1.b<<8; - vertices[3].Alpha=0xFF00; + oldRegion = renderTarget->GetDC()->GetClipRegion(); + newRegion = new WinRegion(oldRegion, targetRegion, RGN_AND); + renderTarget->GetDC()->ClipRegion(newRegion); } - - switch(element->GetShape()) + + switch (element->GetDirection()) { - case ElementShape::Rectangle: + case GuiGradientBackgroundElement::Horizontal: + case GuiGradientBackgroundElement::Vertical: { - renderTarget->GetDC()->GradientTriangle(vertices, 6, triangles, 2); + TRIVERTEX vertices[2]; + GRADIENT_RECT rectangles[1]; + + vertices[0].x = (int)bounds.x1; + vertices[0].y = (int)bounds.y1; + vertices[1].x = (int)bounds.x2; + vertices[1].y = (int)bounds.y2; + + rectangles[0].UpperLeft = 0; + rectangles[0].LowerRight = 1; + + vertices[0].Red = color1.r << 8; + vertices[0].Green = color1.g << 8; + vertices[0].Blue = color1.b << 8; + vertices[0].Alpha = color1.a << 8; + + vertices[1].Red = color2.r << 8; + vertices[1].Green = color2.g << 8; + vertices[1].Blue = color2.b << 8; + vertices[1].Alpha = color2.a << 8; + + switch (element->GetDirection()) + { + case GuiGradientBackgroundElement::Horizontal: + renderTarget->GetDC()->GradientRectH(vertices, sizeof(vertices) / sizeof(*vertices), rectangles, sizeof(rectangles) / sizeof(*rectangles)); + break; + case GuiGradientBackgroundElement::Vertical: + renderTarget->GetDC()->GradientRectV(vertices, sizeof(vertices) / sizeof(*vertices), rectangles, sizeof(rectangles) / sizeof(*rectangles)); + break; + } } break; - case ElementShape::Ellipse: + case GuiGradientBackgroundElement::Slash: + case GuiGradientBackgroundElement::Backslash: { - Ptr ellipseRegion=new WinRegion(bounds.x1, bounds.y1, bounds.x2+1, bounds.y2+1, false); - Ptr oldRegion=renderTarget->GetDC()->GetClipRegion(); - Ptr newRegion=new WinRegion(oldRegion, ellipseRegion, RGN_AND); - renderTarget->GetDC()->ClipRegion(newRegion); - renderTarget->GetDC()->GradientTriangle(vertices, 6, triangles, 2); - renderTarget->GetDC()->ClipRegion(oldRegion); + TRIVERTEX vertices[4]; + GRADIENT_TRIANGLE triangles[2]; + + switch (element->GetDirection()) + { + case GuiGradientBackgroundElement::Slash: + vertices[0].x = (int)bounds.x2; + vertices[0].y = (int)bounds.y1; + vertices[1].x = (int)bounds.x1; + vertices[1].y = (int)bounds.y1; + vertices[2].x = (int)bounds.x2; + vertices[2].y = (int)bounds.y2; + vertices[3].x = (int)bounds.x1; + vertices[3].y = (int)bounds.y2; + break; + case GuiGradientBackgroundElement::Backslash: + vertices[0].x = (int)bounds.x1; + vertices[0].y = (int)bounds.y1; + vertices[1].x = (int)bounds.x1; + vertices[1].y = (int)bounds.y2; + vertices[2].x = (int)bounds.x2; + vertices[2].y = (int)bounds.y1; + vertices[3].x = (int)bounds.x2; + vertices[3].y = (int)bounds.y2; + break; + } + + triangles[0].Vertex1 = 0; + triangles[0].Vertex2 = 1; + triangles[0].Vertex3 = 2; + triangles[1].Vertex1 = 1; + triangles[1].Vertex2 = 2; + triangles[1].Vertex3 = 3; + + vertices[0].Red = color1.r << 8; + vertices[0].Green = color1.g << 8; + vertices[0].Blue = color1.b << 8; + vertices[0].Alpha = color1.a << 8; + + vertices[1].Red = ((color1.r + color2.r) / 2) << 8; + vertices[1].Green = ((color1.g + color2.g) / 2) << 8; + vertices[1].Blue = ((color1.b + color2.b) / 2) << 8; + vertices[1].Alpha = ((color1.a + color2.a) / 2) << 8; + + vertices[2].Red = ((color1.r + color2.r) / 2) << 8; + vertices[2].Green = ((color1.g + color2.g) / 2) << 8; + vertices[2].Blue = ((color1.b + color2.b) / 2) << 8; + vertices[2].Alpha = ((color1.a + color2.a) / 2) << 8; + + vertices[3].Red = color2.r << 8; + vertices[3].Green = color2.g << 8; + vertices[3].Blue = color2.b << 8; + vertices[3].Alpha = color2.a << 8; + + renderTarget->GetDC()->GradientTriangle(vertices, sizeof(vertices) / sizeof(*vertices), triangles, sizeof(triangles) / sizeof(*triangles)); } break; } + + if (targetRegion) + { + renderTarget->GetDC()->ClipRegion(oldRegion); + } } } @@ -9390,6 +9559,112 @@ GuiGradientBackgroundElementRenderer { } +/*********************************************************************** +GuiRadialGradientBackgroundElementRenderer +***********************************************************************/ + + void GuiRadialGradientBackgroundElementRenderer::InitializeInternal() + { + IWindowsGDIResourceManager* resourceManager = GetWindowsGDIResourceManager(); + oldColor = element->GetColor2(); + pen = resourceManager->CreateGdiPen(oldColor); + brush = resourceManager->CreateGdiBrush(oldColor); + } + + void GuiRadialGradientBackgroundElementRenderer::FinalizeInternal() + { + IWindowsGDIResourceManager* resourceManager = GetWindowsGDIResourceManager(); + resourceManager->DestroyGdiPen(oldColor); + resourceManager->DestroyGdiBrush(oldColor); + } + + void GuiRadialGradientBackgroundElementRenderer::RenderTargetChangedInternal(IWindowsGDIRenderTarget* oldRenderTarget, IWindowsGDIRenderTarget* newRenderTarget) + { + } + + void GuiRadialGradientBackgroundElementRenderer::Render(Rect bounds) + { + Color color1 = element->GetColor1(); + Color color2 = element->GetColor2(); + if (color1.a > 0 || color2.a > 0) + { + Ptr targetRegion, oldRegion, newRegion; + auto shape = element->GetShape(); + switch (shape.shapeType) + { + case ElementShapeType::Rectangle: + targetRegion = new WinRegion(bounds.x1, bounds.y1, bounds.x2 + 1, bounds.y2 + 1, true); + break; + case ElementShapeType::Ellipse: + targetRegion = new WinRegion(bounds.x1, bounds.y1, bounds.x2 + 1, bounds.y2 + 1, false); + break; + case ElementShapeType::RoundRect: + targetRegion = new WinRegion(bounds.x1, bounds.y1, bounds.x2 + 1, bounds.y2 + 1, shape.radiusX * 2, shape.radiusY * 2); + break; + } + + oldRegion = renderTarget->GetDC()->GetClipRegion(); + newRegion = new WinRegion(oldRegion, targetRegion, RGN_AND); + renderTarget->GetDC()->ClipRegion(newRegion); + + renderTarget->GetDC()->SetPen(pen); + renderTarget->GetDC()->SetBrush(brush); + renderTarget->GetDC()->FillRect(bounds.Left(), bounds.Top(), bounds.Right(), bounds.Bottom()); + { + const vint triangleCount = 64; + TRIVERTEX vertices[triangleCount + 1]; + GRADIENT_TRIANGLE triangles[triangleCount]; + + vint cx = (bounds.x1 + bounds.x2) / 2; + vint cy = (bounds.y1 + bounds.y2) / 2; + vint rx = bounds.Width() / 2; + vint ry = bounds.Height() / 2; + for (vint i = 0; i < triangleCount; i++) + { + vertices[i].Red = color2.r << 8; + vertices[i].Green = color2.g << 8; + vertices[i].Blue = color2.b << 8; + vertices[i].Alpha = color2.a << 8; + + double theta = 3.1416 * 2 * i / triangleCount; + vertices[i].x = (LONG)(cx + cos(theta) * rx); + vertices[i].y = (LONG)(cy + sin(theta) * ry); + } + vertices[triangleCount].Red = color1.r << 8; + vertices[triangleCount].Green = color1.g << 8; + vertices[triangleCount].Blue = color1.b << 8; + vertices[triangleCount].Alpha = color1.a << 8; + vertices[triangleCount].x = (LONG)cx; + vertices[triangleCount].y = (LONG)cy; + + for (vint i = 0; i < triangleCount; i++) + { + triangles[i].Vertex1 = (ULONG)triangleCount; + triangles[i].Vertex2 = (ULONG)i; + triangles[i].Vertex3 = (ULONG)(i + 1) % triangleCount; + } + + renderTarget->GetDC()->GradientTriangle(vertices, sizeof(vertices) / sizeof(*vertices), triangles, sizeof(triangles) / sizeof(*triangles)); + } + + renderTarget->GetDC()->ClipRegion(oldRegion); + } + } + + void GuiRadialGradientBackgroundElementRenderer::OnElementStateChanged() + { + Color color = element->GetColor2(); + if (oldColor != color) + { + IWindowsGDIResourceManager* resourceManager = GetWindowsGDIResourceManager(); + resourceManager->DestroyGdiPen(oldColor); + resourceManager->DestroyGdiBrush(oldColor); + oldColor = color; + pen = resourceManager->CreateGdiPen(oldColor); + brush = resourceManager->CreateGdiBrush(oldColor); + } + } + /*********************************************************************** GuiSolidLabelElementRenderer ***********************************************************************/ @@ -10463,11 +10738,11 @@ void RendererMainGDI() GetCurrentController()->CallbackService()->InstallListener(&resourceManager); elements_windows_gdi::GuiSolidBorderElementRenderer::Register(); - elements_windows_gdi::GuiRoundBorderElementRenderer::Register(); elements_windows_gdi::Gui3DBorderElementRenderer::Register(); elements_windows_gdi::Gui3DSplitterElementRenderer::Register(); elements_windows_gdi::GuiSolidBackgroundElementRenderer::Register(); elements_windows_gdi::GuiGradientBackgroundElementRenderer::Register(); + elements_windows_gdi::GuiRadialGradientBackgroundElementRenderer::Register(); elements_windows_gdi::GuiSolidLabelElementRenderer::Register(); elements_windows_gdi::GuiImageFrameElementRenderer::Register(); elements_windows_gdi::GuiPolygonElementRenderer::Register(); diff --git a/Import/GacUIWindows.h b/Import/GacUIWindows.h index d62c5190..592e8c6b 100644 --- a/Import/GacUIWindows.h +++ b/Import/GacUIWindows.h @@ -4,70 +4,7 @@ DEVELOPER: Zihan Chen(vczh) ***********************************************************************/ #include "GacUI.h" #include "Vlpp.h" - -/*********************************************************************** -.\GRAPHICSELEMENT\WINDOWSDIRECT2D\GUIGRAPHICSLAYOUTPROVIDERWINDOWSDIRECT2D.H -***********************************************************************/ -/*********************************************************************** -Vczh Library++ 3.0 -Developer: Zihan Chen(vczh) -GacUI::Native Window::Direct2D Provider for Windows Implementation::Renderer - -Interfaces: -***********************************************************************/ - -#ifndef VCZH_PRESENTATION_ELEMENTS_GUIGRAPHICSLAYOUTPROVIDERWINDOWSDIRECT2D -#define VCZH_PRESENTATION_ELEMENTS_GUIGRAPHICSLAYOUTPROVIDERWINDOWSDIRECT2D - - -namespace vl -{ - namespace presentation - { - namespace elements_windows_d2d - { - class WindowsDirect2DLayoutProvider : public Object, public elements::IGuiGraphicsLayoutProvider - { - public: - Ptr CreateParagraph(const WString& text, elements::IGuiGraphicsRenderTarget* renderTarget, elements::IGuiGraphicsParagraphCallback* callback)override; - }; - } - } -} - -#endif - -/*********************************************************************** -.\GRAPHICSELEMENT\WINDOWSGDI\GUIGRAPHICSLAYOUTPROVIDERWINDOWSGDI.H -***********************************************************************/ -/*********************************************************************** -Vczh Library++ 3.0 -Developer: Zihan Chen(vczh) -GacUI::Native Window::GDI Provider for Windows Implementation::Renderer - -Interfaces: -***********************************************************************/ - -#ifndef VCZH_PRESENTATION_ELEMENTS_GUIGRAPHICSLAYOUTPROVIDERWINDOWSGDI -#define VCZH_PRESENTATION_ELEMENTS_GUIGRAPHICSLAYOUTPROVIDERWINDOWSGDI - - -namespace vl -{ - namespace presentation - { - namespace elements_windows_gdi - { - class WindowsGDILayoutProvider : public Object, public elements::IGuiGraphicsLayoutProvider - { - public: - Ptr CreateParagraph(const WString& text, elements::IGuiGraphicsRenderTarget* renderTarget, elements::IGuiGraphicsParagraphCallback* callback)override; - }; - } - } -} - -#endif +#include "VlppWorkflowLibrary.h" /*********************************************************************** .\NATIVEWINDOW\WINDOWS\GDI\WINGDI.H @@ -446,6 +383,8 @@ namespace vl void Chord(vint Left, vint Top, vint Right, vint Bottom, vint StartX, vint StartY, vint EndX, vint EndY); void Pie(RECT Bound, POINT Start, POINT End); void Pie(vint Left, vint Top, vint Right, vint Bottom, vint StartX, vint StartY, vint EndX, vint EndY); + void GradientRectH(TRIVERTEX* Vertices, vint VerticesCount, GRADIENT_RECT* Rectangles, vint RectangleCount); + void GradientRectV(TRIVERTEX* Vertices, vint VerticesCount, GRADIENT_RECT* Rectangles, vint RectangleCount); void GradientTriangle(TRIVERTEX* Vertices, vint VerticesCount, GRADIENT_TRIANGLE* Triangles, vint TriangleCount); void BeginPath(); @@ -536,6 +475,70 @@ namespace vl #endif +/*********************************************************************** +.\GRAPHICSELEMENT\WINDOWSDIRECT2D\GUIGRAPHICSLAYOUTPROVIDERWINDOWSDIRECT2D.H +***********************************************************************/ +/*********************************************************************** +Vczh Library++ 3.0 +Developer: Zihan Chen(vczh) +GacUI::Native Window::Direct2D Provider for Windows Implementation::Renderer + +Interfaces: +***********************************************************************/ + +#ifndef VCZH_PRESENTATION_ELEMENTS_GUIGRAPHICSLAYOUTPROVIDERWINDOWSDIRECT2D +#define VCZH_PRESENTATION_ELEMENTS_GUIGRAPHICSLAYOUTPROVIDERWINDOWSDIRECT2D + + +namespace vl +{ + namespace presentation + { + namespace elements_windows_d2d + { + class WindowsDirect2DLayoutProvider : public Object, public elements::IGuiGraphicsLayoutProvider + { + public: + Ptr CreateParagraph(const WString& text, elements::IGuiGraphicsRenderTarget* renderTarget, elements::IGuiGraphicsParagraphCallback* callback)override; + }; + } + } +} + +#endif + +/*********************************************************************** +.\GRAPHICSELEMENT\WINDOWSGDI\GUIGRAPHICSLAYOUTPROVIDERWINDOWSGDI.H +***********************************************************************/ +/*********************************************************************** +Vczh Library++ 3.0 +Developer: Zihan Chen(vczh) +GacUI::Native Window::GDI Provider for Windows Implementation::Renderer + +Interfaces: +***********************************************************************/ + +#ifndef VCZH_PRESENTATION_ELEMENTS_GUIGRAPHICSLAYOUTPROVIDERWINDOWSGDI +#define VCZH_PRESENTATION_ELEMENTS_GUIGRAPHICSLAYOUTPROVIDERWINDOWSGDI + + +namespace vl +{ + namespace presentation + { + namespace elements_windows_gdi + { + class WindowsGDILayoutProvider : public Object, public elements::IGuiGraphicsLayoutProvider + { + public: + Ptr CreateParagraph(const WString& text, elements::IGuiGraphicsRenderTarget* renderTarget, elements::IGuiGraphicsParagraphCallback* callback)override; + }; + } + } +} + +#endif + /*********************************************************************** .\NATIVEWINDOW\WINDOWS\SERVICESIMPL\WINDOWSASYNCSERVICE.H ***********************************************************************/ @@ -1218,6 +1221,8 @@ Functionality virtual void DestroyDirect2DBrush(Color color)=0; virtual ID2D1LinearGradientBrush* CreateDirect2DLinearBrush(Color c1, Color c2)=0; virtual void DestroyDirect2DLinearBrush(Color c1, Color c2)=0; + virtual ID2D1RadialGradientBrush* CreateDirect2DRadialBrush(Color c1, Color c2) = 0; + virtual void DestroyDirect2DRadialBrush(Color c1, Color c2) = 0; }; class Direct2DTextFormatPackage @@ -1319,11 +1324,6 @@ Renderers DEFINE_BRUSH_ELEMENT_RENDERER(GuiSolidBorderElement, GuiSolidBorderElementRenderer, ID2D1SolidColorBrush, Color) }; - class GuiRoundBorderElementRenderer : public Object, public IGuiGraphicsRenderer - { - DEFINE_BRUSH_ELEMENT_RENDERER(GuiRoundBorderElement, GuiRoundBorderElementRenderer, ID2D1SolidColorBrush, Color) - }; - class Gui3DBorderElementRenderer : public Object, public IGuiGraphicsRenderer { DEFINE_GUI_GRAPHICS_RENDERER(Gui3DBorderElement, Gui3DBorderElementRenderer, IWindowsDirect2DRenderTarget) @@ -1377,6 +1377,12 @@ Renderers DEFINE_BRUSH_ELEMENT_RENDERER(GuiGradientBackgroundElement, GuiGradientBackgroundElementRenderer, ID2D1LinearGradientBrush, ColorPair) }; + class GuiRadialGradientBackgroundElementRenderer : public Object, public IGuiGraphicsRenderer + { + typedef collections::Pair ColorPair; + DEFINE_BRUSH_ELEMENT_RENDERER(GuiRadialGradientBackgroundElement, GuiRadialGradientBackgroundElementRenderer, ID2D1RadialGradientBrush, ColorPair) + }; + class GuiSolidLabelElementRenderer : public Object, public IGuiGraphicsRenderer { DEFINE_GUI_GRAPHICS_RENDERER(GuiSolidLabelElement, GuiSolidLabelElementRenderer, IWindowsDirect2DRenderTarget) @@ -1681,22 +1687,6 @@ Renderers void OnElementStateChanged()override; }; - class GuiRoundBorderElementRenderer : public Object, public IGuiGraphicsRenderer - { - DEFINE_GUI_GRAPHICS_RENDERER(GuiRoundBorderElement, GuiRoundBorderElementRenderer, IWindowsGDIRenderTarget) - protected: - Color oldColor; - Ptr pen; - Ptr brush; - - void InitializeInternal(); - void FinalizeInternal(); - void RenderTargetChangedInternal(IWindowsGDIRenderTarget* oldRenderTarget, IWindowsGDIRenderTarget* newRenderTarget); - public: - void Render(Rect bounds)override; - void OnElementStateChanged()override; - }; - class Gui3DBorderElementRenderer : public Object, public IGuiGraphicsRenderer { DEFINE_GUI_GRAPHICS_RENDERER(Gui3DBorderElement, Gui3DBorderElementRenderer, IWindowsGDIRenderTarget) @@ -1759,6 +1749,22 @@ Renderers void OnElementStateChanged()override; }; + class GuiRadialGradientBackgroundElementRenderer : public Object, public IGuiGraphicsRenderer + { + DEFINE_GUI_GRAPHICS_RENDERER(GuiRadialGradientBackgroundElement, GuiRadialGradientBackgroundElementRenderer, IWindowsGDIRenderTarget) + protected: + Color oldColor; + Ptr pen; + Ptr brush; + + void InitializeInternal(); + void FinalizeInternal(); + void RenderTargetChangedInternal(IWindowsGDIRenderTarget* oldRenderTarget, IWindowsGDIRenderTarget* newRenderTarget); + public: + void Render(Rect bounds)override; + void OnElementStateChanged()override; + }; + class GuiSolidLabelElementRenderer : public Object, public IGuiGraphicsRenderer { DEFINE_GUI_GRAPHICS_RENDERER(GuiSolidLabelElement, GuiSolidLabelElementRenderer, IWindowsGDIRenderTarget) diff --git a/Import/Skins/DarkSkin/DarkSkin.cpp b/Import/Skins/DarkSkin/DarkSkin.cpp index 4ee1f5f4..40fa1bff 100644 --- a/Import/Skins/DarkSkin/DarkSkin.cpp +++ b/Import/Skins/DarkSkin/DarkSkin.cpp @@ -14771,7 +14771,7 @@ Class (::darkskin::RadioButtonTemplateConstructor) } (this->__vwsn_precompile_3 = ::vl::Ptr<::vl::presentation::elements::GuiSolidBackgroundElement>(::vl::reflection::description::Element_Constructor<::vl::presentation::elements::GuiSolidBackgroundElement>())); { - ::vl::__vwsn::This(this->__vwsn_precompile_3.Obj())->SetShape(::vl::presentation::elements::ElementShape::Ellipse); + ::vl::__vwsn::This(this->__vwsn_precompile_3.Obj())->SetShape([&](){ ::vl::presentation::elements::ElementShape __vwsn_temp__; __vwsn_temp__.shapeType = ::vl::presentation::elements::ElementShapeType::Ellipse; return __vwsn_temp__; }()); } { ::vl::__vwsn::This(this->__vwsn_precompile_2)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_3)); @@ -14788,7 +14788,7 @@ Class (::darkskin::RadioButtonTemplateConstructor) } (this->__vwsn_precompile_5 = ::vl::Ptr<::vl::presentation::elements::GuiSolidBorderElement>(::vl::reflection::description::Element_Constructor<::vl::presentation::elements::GuiSolidBorderElement>())); { - ::vl::__vwsn::This(this->__vwsn_precompile_5.Obj())->SetShape(::vl::presentation::elements::ElementShape::Ellipse); + ::vl::__vwsn::This(this->__vwsn_precompile_5.Obj())->SetShape([&](){ ::vl::presentation::elements::ElementShape __vwsn_temp__; __vwsn_temp__.shapeType = ::vl::presentation::elements::ElementShapeType::Ellipse; return __vwsn_temp__; }()); } { ::vl::__vwsn::This(this->__vwsn_precompile_4)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_5)); @@ -14805,7 +14805,7 @@ Class (::darkskin::RadioButtonTemplateConstructor) } (this->__vwsn_precompile_7 = ::vl::Ptr<::vl::presentation::elements::GuiSolidBackgroundElement>(::vl::reflection::description::Element_Constructor<::vl::presentation::elements::GuiSolidBackgroundElement>())); { - ::vl::__vwsn::This(this->__vwsn_precompile_7.Obj())->SetShape(::vl::presentation::elements::ElementShape::Ellipse); + ::vl::__vwsn::This(this->__vwsn_precompile_7.Obj())->SetShape([&](){ ::vl::presentation::elements::ElementShape __vwsn_temp__; __vwsn_temp__.shapeType = ::vl::presentation::elements::ElementShapeType::Ellipse; return __vwsn_temp__; }()); } { ::vl::__vwsn::This(this->__vwsn_precompile_6)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_7)); diff --git a/Import/Skins/DarkSkin/DarkSkin.h b/Import/Skins/DarkSkin/DarkSkin.h index 2ec566c4..8e52a153 100644 --- a/Import/Skins/DarkSkin/DarkSkin.h +++ b/Import/Skins/DarkSkin/DarkSkin.h @@ -4,6 +4,7 @@ DEVELOPER: Zihan Chen(vczh) ***********************************************************************/ #include "GacUI.h" #include "Vlpp.h" +#include "VlppWorkflowLibrary.h" /*********************************************************************** .\DARKSKINPARTIALCLASSES.H diff --git a/Import/Skins/DarkSkin/DarkSkinReflection.h b/Import/Skins/DarkSkin/DarkSkinReflection.h index 2737f4ff..cae989ea 100644 --- a/Import/Skins/DarkSkin/DarkSkinReflection.h +++ b/Import/Skins/DarkSkin/DarkSkinReflection.h @@ -6,6 +6,7 @@ DEVELOPER: Zihan Chen(vczh) #include "GacUI.h" #include "GacUIReflection.h" #include "Vlpp.h" +#include "VlppWorkflowLibrary.h" /*********************************************************************** .\DARKSKINREFLECTION.H diff --git a/Import/Vlpp.cpp b/Import/Vlpp.cpp index 264a59b5..714c91a0 100644 --- a/Import/Vlpp.cpp +++ b/Import/Vlpp.cpp @@ -11419,6 +11419,157 @@ Function Related } } +/*********************************************************************** +.\REFLECTION\GUITYPEDESCRIPTORPREDEFINED.CPP +***********************************************************************/ + +namespace vl +{ + using namespace collections; + + namespace reflection + { + namespace description + { + +/*********************************************************************** +IValueEnumerable +***********************************************************************/ + + Ptr IValueEnumerable::Create(collections::LazyList values) + { + Ptr> enumerable = new LazyList(values); + return new ValueEnumerableWrapper>>(enumerable); + } + +/*********************************************************************** +IValueList +***********************************************************************/ + + Ptr IValueList::Create() + { + return Create(LazyList()); + } + + Ptr IValueList::Create(Ptr values) + { + return Create(GetLazyList(values)); + } + + Ptr IValueList::Create(collections::LazyList values) + { + Ptr> list = new List; + CopyFrom(*list.Obj(), values); + return new ValueListWrapper>>(list); + } + +/*********************************************************************** +IObservableList +***********************************************************************/ + + class ReversedObservableList : public ObservableListBase + { + protected: + + void NotifyUpdateInternal(vint start, vint count, vint newCount)override + { + if (observableList) + { + observableList->ItemChanged(start, count, newCount); + } + } + public: + IValueObservableList* observableList = nullptr; + }; + + Ptr IValueObservableList::Create() + { + return Create(LazyList()); + } + + Ptr IValueObservableList::Create(Ptr values) + { + return Create(GetLazyList(values)); + } + + Ptr IValueObservableList::Create(collections::LazyList values) + { + auto list = MakePtr(); + CopyFrom(*list.Obj(), values); + auto wrapper = MakePtr>>(list); + list->observableList = wrapper.Obj(); + return wrapper; + } + +/*********************************************************************** +IValueDictionary +***********************************************************************/ + + Ptr IValueDictionary::Create() + { + Ptr> dictionary = new Dictionary; + return new ValueDictionaryWrapper>>(dictionary); + } + + Ptr IValueDictionary::Create(Ptr values) + { + Ptr> dictionary = new Dictionary; + CopyFrom(*dictionary.Obj(), GetLazyList(values)); + return new ValueDictionaryWrapper>>(dictionary); + } + + Ptr IValueDictionary::Create(collections::LazyList> values) + { + Ptr> dictionary = new Dictionary; + CopyFrom(*dictionary.Obj(), values); + return new ValueDictionaryWrapper>>(dictionary); + } + +/*********************************************************************** +IValueException +***********************************************************************/ + + class DefaultValueException : public Object, public IValueException + { + protected: + WString message; + + public: + DefaultValueException(const WString& _message) + :message(_message) + { + } + +#pragma push_macro("GetMessage") +#if defined GetMessage +#undef GetMessage +#endif + WString GetMessage()override + { + return message; + } +#pragma pop_macro("GetMessage") + + bool GetFatal()override + { + return false; + } + + Ptr GetCallStack()override + { + return nullptr; + } + }; + + Ptr IValueException::Create(const WString& message) + { + return new DefaultValueException(message); + } + } + } +} + + /*********************************************************************** .\REFLECTION\GUITYPEDESCRIPTORREFLECTION.CPP ***********************************************************************/ @@ -11441,8 +11592,6 @@ TypeName #ifndef VCZH_DEBUG_NO_REFLECTION - IMPL_TYPE_INFO_RENAME(vl::reflection::description::Sys, system::Sys) - IMPL_TYPE_INFO_RENAME(vl::reflection::description::Math, system::Math) IMPL_TYPE_INFO_RENAME(void, system::Void) IMPL_TYPE_INFO_RENAME(vl::reflection::description::VoidValue, system::Void) IMPL_TYPE_INFO_RENAME(vl::reflection::IDescriptable, system::Interface) @@ -11476,18 +11625,6 @@ TypeName IMPL_TYPE_INFO_RENAME(vl::reflection::description::IValueSubscription, system::Subscription) IMPL_TYPE_INFO_RENAME(vl::reflection::description::IValueCallStack, system::CallStack) IMPL_TYPE_INFO_RENAME(vl::reflection::description::IValueException, system::Exception) - IMPL_TYPE_INFO_RENAME(vl::reflection::description::CoroutineStatus, system::CoroutineStatus) - IMPL_TYPE_INFO_RENAME(vl::reflection::description::CoroutineResult, system::CoroutineResult) - IMPL_TYPE_INFO_RENAME(vl::reflection::description::ICoroutine, system::Coroutine) - IMPL_TYPE_INFO_RENAME(vl::reflection::description::EnumerableCoroutine::IImpl, system::EnumerableCoroutine::IImpl) - IMPL_TYPE_INFO_RENAME(vl::reflection::description::EnumerableCoroutine, system::EnumerableCoroutine) - IMPL_TYPE_INFO_RENAME(vl::reflection::description::AsyncStatus, system::AsyncStatus) - IMPL_TYPE_INFO_RENAME(vl::reflection::description::IAsync, system::Async) - IMPL_TYPE_INFO_RENAME(vl::reflection::description::IPromise, system::Promise) - IMPL_TYPE_INFO_RENAME(vl::reflection::description::IFuture, system::Future) - IMPL_TYPE_INFO_RENAME(vl::reflection::description::IAsyncScheduler, system::AsyncScheduler) - IMPL_TYPE_INFO_RENAME(vl::reflection::description::AsyncCoroutine::IImpl, system::AsyncCoroutine::IImpl) - IMPL_TYPE_INFO_RENAME(vl::reflection::description::AsyncCoroutine, system::AsyncCoroutine) IMPL_TYPE_INFO_RENAME(vl::reflection::description::IBoxedValue, system::reflection::BoxedValue) IMPL_TYPE_INFO_RENAME(vl::reflection::description::IBoxedValue::CompareResult, system::reflection::ValueType::CompareResult) @@ -11978,99 +12115,6 @@ LoadPredefinedTypes }; }; -#define PT(TYPE) PT_##TYPE -#define PT_vint Int -#define PT_vint8_t Int8 -#define PT_vint16_t Int16 -#define PT_vint32_t Int32 -#define PT_vint64_t Int64 -#define PT_vuint8_t UInt8 -#define PT_vuint16_t UInt16 -#define PT_vuint32_t UInt32 -#define PT_vuint64_t UInt64 -#define PT_float Single -#define PT_double Double -#define PT_bool Bool -#define PT_wchar_t Char -#define PT_WString String -#define PT_Locale Locale -#define PT_DateTime DateTime -#define PT_CONCAT_(A, B) A##B -#define PT_CONCAT(A, B) PT_CONCAT_(A, B) - - BEGIN_CLASS_MEMBER(Sys) - CLASS_MEMBER_STATIC_METHOD(Len, { L"value" }) - CLASS_MEMBER_STATIC_METHOD(Left, { L"value" _ L"length" }) - CLASS_MEMBER_STATIC_METHOD(Right, { L"value" _ L"length" }) - CLASS_MEMBER_STATIC_METHOD(Mid, { L"value" _ L"start" _ L"length" }) - CLASS_MEMBER_STATIC_METHOD(Find, { L"value" _ L"substr" }) - CLASS_MEMBER_STATIC_METHOD(ReverseEnumerable, { L"value" }) -#pragma push_macro("CompareString") -#if defined CompareString -#undef CompareString -#endif -#define DEFINE_COMPARE(TYPE) CLASS_MEMBER_STATIC_EXTERNALMETHOD(PT_CONCAT(Compare, PT(TYPE)), PROTECT_PARAMETERS({L"a" _ L"b"}), vint(*)(TYPE, TYPE), vl::reflection::description::Sys::Compare) - REFLECTION_PREDEFINED_PRIMITIVE_TYPES(DEFINE_COMPARE) - DEFINE_COMPARE(DateTime) - DEFINE_COMPARE(vint) -#undef DEFINE_COMPARE -#pragma pop_macro("CompareString") - END_CLASS_MEMBER(Sys) - - BEGIN_CLASS_MEMBER(Math) - CLASS_MEMBER_STATIC_EXTERNALMETHOD(AbsInt8, { L"value" }, vint8_t(*)(vint8_t), vl::reflection::description::Math::Abs) - CLASS_MEMBER_STATIC_EXTERNALMETHOD(AbsInt16, { L"value" }, vint16_t(*)(vint16_t), vl::reflection::description::Math::Abs) - CLASS_MEMBER_STATIC_EXTERNALMETHOD(AbsInt32, { L"value" }, vint32_t(*)(vint32_t), vl::reflection::description::Math::Abs) - CLASS_MEMBER_STATIC_EXTERNALMETHOD(AbsInt64, { L"value" }, vint64_t(*)(vint64_t), vl::reflection::description::Math::Abs) - CLASS_MEMBER_STATIC_EXTERNALMETHOD(AbsSingle, { L"value" }, float(*)(float), vl::reflection::description::Math::Abs) - CLASS_MEMBER_STATIC_EXTERNALMETHOD(AbsDouble, { L"value" }, double(*)(double), vl::reflection::description::Math::Abs) - -#define DEFINE_MINMAX(TYPE)\ - CLASS_MEMBER_STATIC_EXTERNALMETHOD(PT_CONCAT(Min, PT(TYPE)), PROTECT_PARAMETERS({L"a" _ L"b"}), TYPE(*)(TYPE, TYPE), vl::reflection::description::Math::Min)\ - CLASS_MEMBER_STATIC_EXTERNALMETHOD(PT_CONCAT(Max, PT(TYPE)), PROTECT_PARAMETERS({L"a" _ L"b"}), TYPE(*)(TYPE, TYPE), vl::reflection::description::Math::Max)\ - - REFLECTION_PREDEFINED_PRIMITIVE_TYPES(DEFINE_MINMAX) - DEFINE_MINMAX(DateTime) - DEFINE_MINMAX(vint) -#undef DEFINE_MINMAX - - CLASS_MEMBER_STATIC_METHOD(Sin, { L"value" }) - CLASS_MEMBER_STATIC_METHOD(Cos, { L"value" }) - CLASS_MEMBER_STATIC_METHOD(Tan, { L"value" }) - CLASS_MEMBER_STATIC_METHOD(ASin, { L"value" }) - CLASS_MEMBER_STATIC_METHOD(ACos, { L"value" }) - CLASS_MEMBER_STATIC_METHOD(ATan, { L"value" }) - CLASS_MEMBER_STATIC_METHOD(ATan2, { L"x" _ L"y" }) - - CLASS_MEMBER_STATIC_METHOD(Exp, { L"value" }) - CLASS_MEMBER_STATIC_METHOD(LogN, { L"value" }) - CLASS_MEMBER_STATIC_METHOD(Log10, { L"value" }) - CLASS_MEMBER_STATIC_METHOD(Log, { L"value" _ L"base" }) - CLASS_MEMBER_STATIC_METHOD(Pow, { L"value" _ L"power" }) - CLASS_MEMBER_STATIC_METHOD(Ceil, { L"value" }) - CLASS_MEMBER_STATIC_METHOD(Floor, { L"value" }) - CLASS_MEMBER_STATIC_METHOD(Round, { L"value" }) - CLASS_MEMBER_STATIC_METHOD(Trunc, { L"value" }) - END_CLASS_MEMBER(Math) - -#undef PT -#undef PT_vint8_t -#undef PT_vint16_t -#undef PT_vint32_t -#undef PT_vint64_t -#undef PT_vuint8_t -#undef PT_vuint16_t -#undef PT_vuint32_t -#undef PT_vuint64_t -#undef PT_float -#undef PT_double -#undef PT_bool -#undef PT_wchar_t -#undef PT_WString -#undef PT_DateTime -#undef PT_CONCAT_ -#undef PT_CONCAT - BEGIN_STRUCT_MEMBER_FLAG(VoidValue, TypeDescriptorFlags::Primitive) END_STRUCT_MEMBER(VoidValue) @@ -12183,77 +12227,6 @@ LoadPredefinedTypes CLASS_MEMBER_PROPERTY_READONLY_FAST(CallStack) END_INTERFACE_MEMBER(IValueException) - BEGIN_ENUM_ITEM(CoroutineStatus) - ENUM_CLASS_ITEM(Waiting) - ENUM_CLASS_ITEM(Executing) - ENUM_CLASS_ITEM(Stopped) - END_ENUM_ITEM(CoroutineStatus) - - BEGIN_INTERFACE_MEMBER(ICoroutine) - CLASS_MEMBER_METHOD(Resume, { L"raiseException" _ L"output" }) - CLASS_MEMBER_PROPERTY_READONLY_FAST(Failure) - CLASS_MEMBER_PROPERTY_READONLY_FAST(Status) - END_INTERFACE_MEMBER(ICoroutine) - - BEGIN_CLASS_MEMBER(CoroutineResult) - CLASS_MEMBER_CONSTRUCTOR(Ptr(), NO_PARAMETER) - CLASS_MEMBER_PROPERTY_FAST(Result) - CLASS_MEMBER_PROPERTY_FAST(Failure) - END_CLASS_MEMBER(CoroutineResult) - - BEGIN_INTERFACE_MEMBER_NOPROXY(EnumerableCoroutine::IImpl) - CLASS_MEMBER_BASE(IValueEnumerator) - END_INTERFACE_MEMBER(EnumerableCoroutine::IImpl) - - BEGIN_CLASS_MEMBER(EnumerableCoroutine) - CLASS_MEMBER_STATIC_METHOD(YieldAndPause, { L"impl" _ L"value" }) - CLASS_MEMBER_STATIC_METHOD(JoinAndPause, { L"impl" _ L"value" }) - CLASS_MEMBER_STATIC_METHOD(ReturnAndExit, { L"impl" }) - CLASS_MEMBER_STATIC_METHOD(Create, { L"creator" }) - END_CLASS_MEMBER(EnumerableCoroutine) - - BEGIN_ENUM_ITEM(AsyncStatus) - ENUM_CLASS_ITEM(Ready) - ENUM_CLASS_ITEM(Executing) - ENUM_CLASS_ITEM(Stopped) - END_ENUM_ITEM(AsyncStatus) - - BEGIN_INTERFACE_MEMBER(IAsync) - CLASS_MEMBER_PROPERTY_READONLY_FAST(Status) - CLASS_MEMBER_METHOD(Execute, { L"callback" }) - CLASS_MEMBER_STATIC_METHOD(Delay, { L"milliseconds" }) - END_INTERFACE_MEMBER(IAsync) - - BEGIN_INTERFACE_MEMBER_NOPROXY(IPromise) - CLASS_MEMBER_METHOD(SendResult, { L"result" }) - CLASS_MEMBER_METHOD(SendFailure, { L"failure" }) - END_INTERFACE_MEMBER(IPromise) - - BEGIN_INTERFACE_MEMBER_NOPROXY(IFuture) - CLASS_MEMBER_BASE(IAsync) - CLASS_MEMBER_BASE(IPromise) - CLASS_MEMBER_PROPERTY_READONLY_FAST(Promise) - CLASS_MEMBER_STATIC_METHOD(Create, NO_PARAMETER) - END_INTERFACE_MEMBER(IFuture) - - BEGIN_INTERFACE_MEMBER_NOPROXY(IAsyncScheduler) - CLASS_MEMBER_METHOD(Execute, { L"callback" }) - CLASS_MEMBER_METHOD(ExecuteInBackground, { L"callback" }) - CLASS_MEMBER_METHOD(DelayExecute, { L"callback" _ L"milliseconds" }) - CLASS_MEMBER_STATIC_METHOD(GetSchedulerForCurrentThread, NO_PARAMETER) - END_INTERFACE_MEMBER(IAsyncScheduler) - - BEGIN_INTERFACE_MEMBER_NOPROXY(AsyncCoroutine::IImpl) - CLASS_MEMBER_BASE(IAsync) - END_INTERFACE_MEMBER(AsyncCoroutine::IImpl) - - BEGIN_CLASS_MEMBER(AsyncCoroutine) - CLASS_MEMBER_STATIC_METHOD(AwaitAndRead, { L"impl" _ L"value" }) - CLASS_MEMBER_STATIC_METHOD(ReturnAndExit, { L"impl" _ L"value"}) - CLASS_MEMBER_STATIC_METHOD(Create, { L"creator" }) - CLASS_MEMBER_STATIC_METHOD(CreateAndRun, { L"creator" }) - END_CLASS_MEMBER(AsyncCoroutine) - BEGIN_INTERFACE_MEMBER_NOPROXY(IBoxedValue) CLASS_MEMBER_METHOD(Copy, NO_PARAMETER) END_INTERFACE_MEMBER(IBoxedValue) @@ -12726,6 +12699,1915 @@ LogTypeManager } +/*********************************************************************** +.\THREADING.CPP +***********************************************************************/ +#ifdef VCZH_MSVC + +namespace vl +{ + using namespace threading_internal; + using namespace collections; + +/*********************************************************************** +WaitableObject +***********************************************************************/ + + namespace threading_internal + { + struct WaitableData + { + HANDLE handle; + + WaitableData(HANDLE _handle) + :handle(_handle) + { + } + }; + } + + WaitableObject::WaitableObject() + :waitableData(0) + { + } + + void WaitableObject::SetData(threading_internal::WaitableData* data) + { + waitableData=data; + } + + bool WaitableObject::IsCreated() + { + return waitableData!=0; + } + + bool WaitableObject::Wait() + { + return WaitForTime(INFINITE); + } + + bool WaitableObject::WaitForTime(vint ms) + { + if(IsCreated()) + { + if(WaitForSingleObject(waitableData->handle, (DWORD)ms)==WAIT_OBJECT_0) + { + return true; + } + } + return false; + } + + bool WaitableObject::WaitAll(WaitableObject** objects, vint count) + { + Array handles(count); + for(vint i=0;iwaitableData->handle; + } + DWORD result=WaitForMultipleObjects((DWORD)count, &handles[0], TRUE, INFINITE); + return result==WAIT_OBJECT_0 || result==WAIT_ABANDONED_0; + + } + + bool WaitableObject::WaitAllForTime(WaitableObject** objects, vint count, vint ms) + { + Array handles(count); + for(vint i=0;iwaitableData->handle; + } + DWORD result=WaitForMultipleObjects((DWORD)count, &handles[0], TRUE, (DWORD)ms); + return result==WAIT_OBJECT_0 || result==WAIT_ABANDONED_0; + } + + vint WaitableObject::WaitAny(WaitableObject** objects, vint count, bool* abandoned) + { + Array handles(count); + for(vint i=0;iwaitableData->handle; + } + DWORD result=WaitForMultipleObjects((DWORD)count, &handles[0], FALSE, INFINITE); + if(WAIT_OBJECT_0 <= result && result handles(count); + for(vint i=0;iwaitableData->handle; + } + DWORD result=WaitForMultipleObjects((DWORD)count, &handles[0], FALSE, (DWORD)ms); + if(WAIT_OBJECT_0 <= result && resultdeleteAfterStopped; + ThreadLocalStorage::FixStorages(); + try + { + procedure(this, argument); + threadState=Thread::Stopped; + ThreadLocalStorage::ClearStorages(); + } + catch (...) + { + ThreadLocalStorage::ClearStorages(); + throw; + } + if(deleteAfterStopped) + { + delete this; + } + } + public: + ProceduredThread(Thread::ThreadProcedure _procedure, void* _argument, bool _deleteAfterStopped) + :procedure(_procedure) + ,argument(_argument) + ,deleteAfterStopped(_deleteAfterStopped) + { + } + }; + + class LambdaThread : public Thread + { + private: + Func procedure; + bool deleteAfterStopped; + + protected: + void Run() + { + bool deleteAfterStopped = this->deleteAfterStopped; + ThreadLocalStorage::FixStorages(); + try + { + procedure(); + threadState=Thread::Stopped; + ThreadLocalStorage::ClearStorages(); + } + catch (...) + { + ThreadLocalStorage::ClearStorages(); + throw; + } + if(deleteAfterStopped) + { + delete this; + } + } + public: + LambdaThread(const Func& _procedure, bool _deleteAfterStopped) + :procedure(_procedure) + ,deleteAfterStopped(_deleteAfterStopped) + { + } + }; + } + + void InternalThreadProc(Thread* thread) + { + thread->Run(); + } + + DWORD WINAPI InternalThreadProcWrapper(LPVOID lpParameter) + { + InternalThreadProc((Thread*)lpParameter); + return 0; + } + + Thread::Thread() + { + internalData=new ThreadData; + internalData->handle=CreateThread(NULL, 0, InternalThreadProcWrapper, this, CREATE_SUSPENDED, &internalData->id); + threadState=Thread::NotStarted; + SetData(internalData); + } + + Thread::~Thread() + { + if (internalData) + { + Stop(); + CloseHandle(internalData->handle); + delete internalData; + } + } + + Thread* Thread::CreateAndStart(ThreadProcedure procedure, void* argument, bool deleteAfterStopped) + { + if(procedure) + { + Thread* thread=new ProceduredThread(procedure, argument, deleteAfterStopped); + if(thread->Start()) + { + return thread; + } + else + { + delete thread; + } + } + return 0; + } + + Thread* Thread::CreateAndStart(const Func& procedure, bool deleteAfterStopped) + { + Thread* thread=new LambdaThread(procedure, deleteAfterStopped); + if(thread->Start()) + { + return thread; + } + else + { + delete thread; + } + return 0; + } + + void Thread::Sleep(vint ms) + { + ::Sleep((DWORD)ms); + } + + + vint Thread::GetCPUCount() + { + SYSTEM_INFO info; + GetSystemInfo(&info); + return info.dwNumberOfProcessors; + } + + vint Thread::GetCurrentThreadId() + { + return (vint)::GetCurrentThreadId(); + } + + bool Thread::Start() + { + if(threadState==Thread::NotStarted && internalData->handle!=NULL) + { + if(ResumeThread(internalData->handle)!=-1) + { + threadState=Thread::Running; + return true; + } + } + return false; + } + + bool Thread::Stop() + { + if(internalData->handle!=NULL) + { + if (SuspendThread(internalData->handle) != -1) + { + threadState=Thread::Stopped; + return true; + } + } + return false; + } + + Thread::ThreadState Thread::GetState() + { + return threadState; + } + + void Thread::SetCPU(vint index) + { + SetThreadAffinityMask(internalData->handle, ((vint)1 << index)); + } + +/*********************************************************************** +Mutex +***********************************************************************/ + + namespace threading_internal + { + struct MutexData : public WaitableData + { + MutexData(HANDLE _handle) + :WaitableData(_handle) + { + } + }; + } + + Mutex::Mutex() + :internalData(0) + { + } + + Mutex::~Mutex() + { + if(internalData) + { + CloseHandle(internalData->handle); + delete internalData; + } + } + + bool Mutex::Create(bool owned, const WString& name) + { + if(IsCreated())return false; + BOOL aOwned=owned?TRUE:FALSE; + LPCTSTR aName=name==L""?NULL:name.Buffer(); + HANDLE handle=CreateMutex(NULL, aOwned, aName); + if(handle) + { + internalData=new MutexData(handle); + SetData(internalData); + } + return IsCreated(); + } + + bool Mutex::Open(bool inheritable, const WString& name) + { + if(IsCreated())return false; + BOOL aInteritable=inheritable?TRUE:FALSE; + HANDLE handle=OpenMutex(SYNCHRONIZE, aInteritable, name.Buffer()); + if(handle) + { + internalData=new MutexData(handle); + SetData(internalData); + } + return IsCreated(); + } + + bool Mutex::Release() + { + if(IsCreated()) + { + return ReleaseMutex(internalData->handle)!=0; + } + return false; + } + +/*********************************************************************** +Semaphore +***********************************************************************/ + + namespace threading_internal + { + struct SemaphoreData : public WaitableData + { + SemaphoreData(HANDLE _handle) + :WaitableData(_handle) + { + } + }; + } + + Semaphore::Semaphore() + :internalData(0) + { + } + + Semaphore::~Semaphore() + { + if(internalData) + { + CloseHandle(internalData->handle); + delete internalData; + } + } + + bool Semaphore::Create(vint initialCount, vint maxCount, const WString& name) + { + if(IsCreated())return false; + LONG aInitial=(LONG)initialCount; + LONG aMax=(LONG)maxCount; + LPCTSTR aName=name==L""?NULL:name.Buffer(); + HANDLE handle=CreateSemaphore(NULL, aInitial, aMax, aName); + if(handle) + { + internalData=new SemaphoreData(handle); + SetData(internalData); + } + return IsCreated(); + } + + bool Semaphore::Open(bool inheritable, const WString& name) + { + if(IsCreated())return false; + BOOL aInteritable=inheritable?TRUE:FALSE; + HANDLE handle=OpenSemaphore(SYNCHRONIZE, aInteritable, name.Buffer()); + if(handle) + { + internalData=new SemaphoreData(handle); + SetData(internalData); + } + return IsCreated(); + } + + bool Semaphore::Release() + { + if(IsCreated()) + { + return Release(1)!=-1; + } + return false; + } + + vint Semaphore::Release(vint count) + { + if(IsCreated()) + { + LONG previous=-1; + if(ReleaseSemaphore(internalData->handle, (LONG)count, &previous)!=0) + { + return (vint)previous; + } + } + return -1; + } + +/*********************************************************************** +EventObject +***********************************************************************/ + + namespace threading_internal + { + struct EventData : public WaitableData + { + EventData(HANDLE _handle) + :WaitableData(_handle) + { + } + }; + } + + EventObject::EventObject() + :internalData(0) + { + } + + EventObject::~EventObject() + { + if(internalData) + { + CloseHandle(internalData->handle); + delete internalData; + } + } + + bool EventObject::CreateAutoUnsignal(bool signaled, const WString& name) + { + if(IsCreated())return false; + BOOL aSignaled=signaled?TRUE:FALSE; + LPCTSTR aName=name==L""?NULL:name.Buffer(); + HANDLE handle=CreateEvent(NULL, FALSE, aSignaled, aName); + if(handle) + { + internalData=new EventData(handle); + SetData(internalData); + } + return IsCreated(); + } + + bool EventObject::CreateManualUnsignal(bool signaled, const WString& name) + { + if(IsCreated())return false; + BOOL aSignaled=signaled?TRUE:FALSE; + LPCTSTR aName=name==L""?NULL:name.Buffer(); + HANDLE handle=CreateEvent(NULL, TRUE, aSignaled, aName); + if(handle) + { + internalData=new EventData(handle); + SetData(internalData); + } + return IsCreated(); + } + + bool EventObject::Open(bool inheritable, const WString& name) + { + if(IsCreated())return false; + BOOL aInteritable=inheritable?TRUE:FALSE; + HANDLE handle=OpenEvent(SYNCHRONIZE, aInteritable, name.Buffer()); + if(handle) + { + internalData=new EventData(handle); + SetData(internalData); + } + return IsCreated(); + } + + bool EventObject::Signal() + { + if(IsCreated()) + { + return SetEvent(internalData->handle)!=0; + } + return false; + } + + bool EventObject::Unsignal() + { + if(IsCreated()) + { + return ResetEvent(internalData->handle)!=0; + } + return false; + } + +/*********************************************************************** +ThreadPoolLite +***********************************************************************/ + + struct ThreadPoolQueueProcArgument + { + void(*proc)(void*); + void* argument; + }; + + DWORD WINAPI ThreadPoolQueueProc(void* argument) + { + Ptr proc=(ThreadPoolQueueProcArgument*)argument; + ThreadLocalStorage::FixStorages(); + try + { + proc->proc(proc->argument); + ThreadLocalStorage::ClearStorages(); + } + catch (...) + { + ThreadLocalStorage::ClearStorages(); + } + return 0; + } + + DWORD WINAPI ThreadPoolQueueFunc(void* argument) + { + Ptr> proc=(Func*)argument; + ThreadLocalStorage::FixStorages(); + try + { + (*proc.Obj())(); + ThreadLocalStorage::ClearStorages(); + } + catch (...) + { + ThreadLocalStorage::ClearStorages(); + } + return 0; + } + + ThreadPoolLite::ThreadPoolLite() + { + } + + ThreadPoolLite::~ThreadPoolLite() + { + } + + bool ThreadPoolLite::Queue(void(*proc)(void*), void* argument) + { + ThreadPoolQueueProcArgument* p=new ThreadPoolQueueProcArgument; + p->proc=proc; + p->argument=argument; + if(QueueUserWorkItem(&ThreadPoolQueueProc, p, WT_EXECUTEDEFAULT)) + { + return true; + } + else + { + delete p; + return false; + } + } + + bool ThreadPoolLite::Queue(const Func& proc) + { + Func* p=new Func(proc); + if(QueueUserWorkItem(&ThreadPoolQueueFunc, p, WT_EXECUTEDEFAULT)) + { + return true; + } + else + { + delete p; + return false; + } + } + +/*********************************************************************** +CriticalSection +***********************************************************************/ + + namespace threading_internal + { + struct CriticalSectionData + { + CRITICAL_SECTION criticalSection; + }; + } + + CriticalSection::Scope::Scope(CriticalSection& _criticalSection) + :criticalSection(&_criticalSection) + { + criticalSection->Enter(); + } + + CriticalSection::Scope::~Scope() + { + criticalSection->Leave(); + } + + CriticalSection::CriticalSection() + { + internalData=new CriticalSectionData; + InitializeCriticalSection(&internalData->criticalSection); + } + + CriticalSection::~CriticalSection() + { + DeleteCriticalSection(&internalData->criticalSection); + delete internalData; + } + + bool CriticalSection::TryEnter() + { + return TryEnterCriticalSection(&internalData->criticalSection)!=0; + } + + void CriticalSection::Enter() + { + EnterCriticalSection(&internalData->criticalSection); + } + + void CriticalSection::Leave() + { + LeaveCriticalSection(&internalData->criticalSection); + } + +/*********************************************************************** +ReaderWriterLock +***********************************************************************/ + + namespace threading_internal + { + struct ReaderWriterLockData + { + SRWLOCK lock; + }; + } + + ReaderWriterLock::ReaderScope::ReaderScope(ReaderWriterLock& _lock) + :lock(&_lock) + { + lock->EnterReader(); + } + + ReaderWriterLock::ReaderScope::~ReaderScope() + { + lock->LeaveReader(); + } + + ReaderWriterLock::WriterScope::WriterScope(ReaderWriterLock& _lock) + :lock(&_lock) + { + lock->EnterWriter(); + } + + ReaderWriterLock::WriterScope::~WriterScope() + { + lock->LeaveWriter(); + } + + ReaderWriterLock::ReaderWriterLock() + :internalData(new threading_internal::ReaderWriterLockData) + { + InitializeSRWLock(&internalData->lock); + } + + ReaderWriterLock::~ReaderWriterLock() + { + delete internalData; + } + + bool ReaderWriterLock::TryEnterReader() + { + return TryAcquireSRWLockShared(&internalData->lock)!=0; + } + + void ReaderWriterLock::EnterReader() + { + AcquireSRWLockShared(&internalData->lock); + } + + void ReaderWriterLock::LeaveReader() + { + ReleaseSRWLockShared(&internalData->lock); + } + + bool ReaderWriterLock::TryEnterWriter() + { + return TryAcquireSRWLockExclusive(&internalData->lock)!=0; + } + + void ReaderWriterLock::EnterWriter() + { + AcquireSRWLockExclusive(&internalData->lock); + } + + void ReaderWriterLock::LeaveWriter() + { + ReleaseSRWLockExclusive(&internalData->lock); + } + +/*********************************************************************** +ConditionVariable +***********************************************************************/ + + namespace threading_internal + { + struct ConditionVariableData + { + CONDITION_VARIABLE variable; + }; + } + + ConditionVariable::ConditionVariable() + :internalData(new threading_internal::ConditionVariableData) + { + InitializeConditionVariable(&internalData->variable); + } + + ConditionVariable::~ConditionVariable() + { + delete internalData; + } + + bool ConditionVariable::SleepWith(CriticalSection& cs) + { + return SleepConditionVariableCS(&internalData->variable, &cs.internalData->criticalSection, INFINITE)!=0; + } + + bool ConditionVariable::SleepWithForTime(CriticalSection& cs, vint ms) + { + return SleepConditionVariableCS(&internalData->variable, &cs.internalData->criticalSection, (DWORD)ms)!=0; + } + + bool ConditionVariable::SleepWithReader(ReaderWriterLock& lock) + { + return SleepConditionVariableSRW(&internalData->variable, &lock.internalData->lock, INFINITE, CONDITION_VARIABLE_LOCKMODE_SHARED)!=0; + } + + bool ConditionVariable::SleepWithReaderForTime(ReaderWriterLock& lock, vint ms) + { + return SleepConditionVariableSRW(&internalData->variable, &lock.internalData->lock, (DWORD)ms, CONDITION_VARIABLE_LOCKMODE_SHARED)!=0; + } + + bool ConditionVariable::SleepWithWriter(ReaderWriterLock& lock) + { + return SleepConditionVariableSRW(&internalData->variable, &lock.internalData->lock, INFINITE, 0)!=0; + } + + bool ConditionVariable::SleepWithWriterForTime(ReaderWriterLock& lock, vint ms) + { + return SleepConditionVariableSRW(&internalData->variable, &lock.internalData->lock, (DWORD)ms, 0)!=0; + } + + void ConditionVariable::WakeOnePending() + { + WakeConditionVariable(&internalData->variable); + } + + void ConditionVariable::WakeAllPendings() + { + WakeAllConditionVariable(&internalData->variable); + } + +/*********************************************************************** +SpinLock +***********************************************************************/ + + SpinLock::Scope::Scope(SpinLock& _spinLock) + :spinLock(&_spinLock) + { + spinLock->Enter(); + } + + SpinLock::Scope::~Scope() + { + spinLock->Leave(); + } + + SpinLock::SpinLock() + :token(0) + { + } + + SpinLock::~SpinLock() + { + } + + bool SpinLock::TryEnter() + { + return _InterlockedExchange(&token, 1)==0; + } + + void SpinLock::Enter() + { + while(_InterlockedCompareExchange(&token, 1, 0)!=0) + { + while(token!=0) _mm_pause(); + } + } + + void SpinLock::Leave() + { + _InterlockedExchange(&token, 0); + } + +/*********************************************************************** +ThreadLocalStorage +***********************************************************************/ + +#define KEY ((DWORD&)key) + + ThreadLocalStorage::ThreadLocalStorage(Destructor _destructor) + :destructor(_destructor) + { + static_assert(sizeof(key) >= sizeof(DWORD), "ThreadLocalStorage's key storage is not large enouth."); + PushStorage(this); + KEY = TlsAlloc(); + CHECK_ERROR(KEY != TLS_OUT_OF_INDEXES, L"vl::ThreadLocalStorage::ThreadLocalStorage()#Failed to alloc new thread local storage index."); + } + + ThreadLocalStorage::~ThreadLocalStorage() + { + TlsFree(KEY); + } + + void* ThreadLocalStorage::Get() + { + CHECK_ERROR(!disposed, L"vl::ThreadLocalStorage::Get()#Cannot access a disposed ThreadLocalStorage."); + return TlsGetValue(KEY); + } + + void ThreadLocalStorage::Set(void* data) + { + CHECK_ERROR(!disposed, L"vl::ThreadLocalStorage::Set()#Cannot access a disposed ThreadLocalStorage."); + TlsSetValue(KEY, data); + } + +#undef KEY +} +#endif + +/*********************************************************************** +ThreadLocalStorage Common Implementations +***********************************************************************/ + +namespace vl +{ + void ThreadLocalStorage::Clear() + { + CHECK_ERROR(!disposed, L"vl::ThreadLocalStorage::Clear()#Cannot access a disposed ThreadLocalStorage."); + if(destructor) + { + if (auto data = Get()) + { + destructor(data); + } + } + Set(nullptr); + } + + void ThreadLocalStorage::Dispose() + { + CHECK_ERROR(!disposed, L"vl::ThreadLocalStorage::Dispose()#Cannot access a disposed ThreadLocalStorage."); + Clear(); + disposed = true; + } + + struct TlsStorageLink + { + ThreadLocalStorage* storage = nullptr; + TlsStorageLink* next = nullptr; + }; + + volatile bool tlsFixed = false; + TlsStorageLink* tlsHead = nullptr; + TlsStorageLink** tlsTail = &tlsHead; + + void ThreadLocalStorage::PushStorage(ThreadLocalStorage* storage) + { + CHECK_ERROR(!tlsFixed, L"vl::ThreadLocalStorage::PushStorage(ThreadLocalStorage*)#Cannot create new ThreadLocalStorage instance after calling ThreadLocalStorage::FixStorages()."); + auto link = new TlsStorageLink; + link->storage = storage; + *tlsTail = link; + tlsTail = &link->next; + } + + void ThreadLocalStorage::FixStorages() + { + tlsFixed = true; + } + + void ThreadLocalStorage::ClearStorages() + { + FixStorages(); + auto current = tlsHead; + while (current) + { + current->storage->Clear(); + current = current->next; + } + } + + void ThreadLocalStorage::DisposeStorages() + { + FixStorages(); + auto current = tlsHead; + tlsHead = nullptr; + tlsTail = nullptr; + while (current) + { + current->storage->Dispose(); + + auto temp = current; + current = current->next; + delete temp; + } + } +} + + +/*********************************************************************** +.\THREADINGLINUX.CPP +***********************************************************************/ +#ifdef VCZH_GCC +#include +#include +#include +#include +#if defined(__APPLE__) || defined(__APPLE_CC__) +#include +#endif + + +namespace vl +{ + using namespace threading_internal; + using namespace collections; + + +/*********************************************************************** +Thread +***********************************************************************/ + + namespace threading_internal + { + struct ThreadData + { + pthread_t id; + EventObject ev; + }; + + class ProceduredThread : public Thread + { + private: + Thread::ThreadProcedure procedure; + void* argument; + bool deleteAfterStopped; + + protected: + void Run() + { + bool deleteAfterStopped = this->deleteAfterStopped; + ThreadLocalStorage::FixStorages(); + try + { + procedure(this, argument); + threadState=Thread::Stopped; + internalData->ev.Signal(); + ThreadLocalStorage::ClearStorages(); + } + catch (...) + { + ThreadLocalStorage::ClearStorages(); + throw; + } + if(deleteAfterStopped) + { + delete this; + } + } + public: + ProceduredThread(Thread::ThreadProcedure _procedure, void* _argument, bool _deleteAfterStopped) + :procedure(_procedure) + ,argument(_argument) + ,deleteAfterStopped(_deleteAfterStopped) + { + } + }; + + class LambdaThread : public Thread + { + private: + Func procedure; + bool deleteAfterStopped; + + protected: + void Run() + { + bool deleteAfterStopped = this->deleteAfterStopped; + ThreadLocalStorage::FixStorages(); + try + { + procedure(); + threadState=Thread::Stopped; + internalData->ev.Signal(); + ThreadLocalStorage::ClearStorages(); + } + catch (...) + { + ThreadLocalStorage::ClearStorages(); + throw; + } + if(deleteAfterStopped) + { + delete this; + } + } + public: + LambdaThread(const Func& _procedure, bool _deleteAfterStopped) + :procedure(_procedure) + ,deleteAfterStopped(_deleteAfterStopped) + { + } + }; + } + + void InternalThreadProc(Thread* thread) + { + thread->Run(); + } + + void* InternalThreadProcWrapper(void* lpParameter) + { + InternalThreadProc((Thread*)lpParameter); + return 0; + } + + Thread::Thread() + { + internalData=new ThreadData; + internalData->ev.CreateManualUnsignal(false); + threadState=Thread::NotStarted; + } + + Thread::~Thread() + { + if (internalData) + { + Stop(); + if (threadState!=Thread::NotStarted) + { + pthread_detach(internalData->id); + } + delete internalData; + } + } + + Thread* Thread::CreateAndStart(ThreadProcedure procedure, void* argument, bool deleteAfterStopped) + { + if(procedure) + { + Thread* thread=new ProceduredThread(procedure, argument, deleteAfterStopped); + if(thread->Start()) + { + return thread; + } + else + { + delete thread; + } + } + return 0; + } + + Thread* Thread::CreateAndStart(const Func& procedure, bool deleteAfterStopped) + { + Thread* thread=new LambdaThread(procedure, deleteAfterStopped); + if(thread->Start()) + { + return thread; + } + else + { + delete thread; + } + return 0; + } + + void Thread::Sleep(vint ms) + { + if (ms >= 1000) + { + sleep(ms / 1000); + } + if (ms % 1000) + { + usleep((ms % 1000) * 1000); + } + } + + vint Thread::GetCPUCount() + { + return (vint)sysconf(_SC_NPROCESSORS_ONLN); + } + + vint Thread::GetCurrentThreadId() + { + return (vint)::pthread_self(); + } + + bool Thread::Start() + { + if(threadState==Thread::NotStarted) + { + if(pthread_create(&internalData->id, nullptr, &InternalThreadProcWrapper, this)==0) + { + threadState=Thread::Running; + return true; + } + } + return false; + } + + bool Thread::Wait() + { + return internalData->ev.Wait(); + } + + bool Thread::Stop() + { + if (threadState==Thread::Running) + { + if(pthread_cancel(internalData->id)==0) + { + threadState=Thread::Stopped; + internalData->ev.Signal(); + return true; + } + } + return false; + } + + Thread::ThreadState Thread::GetState() + { + return threadState; + } + +/*********************************************************************** +Mutex +***********************************************************************/ + + namespace threading_internal + { + struct MutexData + { + Semaphore sem; + }; + }; + + Mutex::Mutex() + { + internalData = new MutexData; + } + + Mutex::~Mutex() + { + delete internalData; + } + + bool Mutex::Create(bool owned, const WString& name) + { + return internalData->sem.Create(owned ? 0 : 1, 1, name); + } + + bool Mutex::Open(bool inheritable, const WString& name) + { + return internalData->sem.Open(inheritable, name); + } + + bool Mutex::Release() + { + return internalData->sem.Release(); + } + + bool Mutex::Wait() + { + return internalData->sem.Wait(); + } + +/*********************************************************************** +Semaphore +***********************************************************************/ + + namespace threading_internal + { + struct SemaphoreData + { + sem_t semUnnamed; + sem_t* semNamed = nullptr; + }; + } + + Semaphore::Semaphore() + :internalData(0) + { + } + + Semaphore::~Semaphore() + { + if (internalData) + { + if (internalData->semNamed) + { + sem_close(internalData->semNamed); + } + else + { + sem_destroy(&internalData->semUnnamed); + } + delete internalData; + } + } + + bool Semaphore::Create(vint initialCount, vint maxCount, const WString& name) + { + if (internalData) return false; + if (initialCount > maxCount) return false; + + internalData = new SemaphoreData; +#if defined(__APPLE__) + + AString auuid; + if(name.Length() == 0) + { + CFUUIDRef cfuuid = CFUUIDCreate(kCFAllocatorDefault); + CFStringRef cfstr = CFUUIDCreateString(kCFAllocatorDefault, cfuuid); + auuid = CFStringGetCStringPtr(cfstr, kCFStringEncodingASCII); + + CFRelease(cfstr); + CFRelease(cfuuid); + } + auuid = auuid.Insert(0, "/"); + // OSX SEM_NAME_LENGTH = 31 + if(auuid.Length() >= 30) + auuid = auuid.Sub(0, 30); + + if ((internalData->semNamed = sem_open(auuid.Buffer(), O_CREAT, O_RDWR, initialCount)) == SEM_FAILED) + { + delete internalData; + internalData = 0; + return false; + } + +#else + if (name == L"") + { + if(sem_init(&internalData->semUnnamed, 0, (int)initialCount) == -1) + { + delete internalData; + internalData = 0; + return false; + } + } + else + { + AString astr = wtoa(name); + + if ((internalData->semNamed = sem_open(astr.Buffer(), O_CREAT, 0777, initialCount)) == SEM_FAILED) + { + delete internalData; + internalData = 0; + return false; + } + } +#endif + + Release(initialCount); + return true; + } + + bool Semaphore::Open(bool inheritable, const WString& name) + { + if (internalData) return false; + if (inheritable) return false; + + internalData = new SemaphoreData; + if (!(internalData->semNamed = sem_open(wtoa(name).Buffer(), 0))) + { + delete internalData; + internalData = 0; + return false; + } + + return true; + } + + bool Semaphore::Release() + { + return Release(1); + } + + vint Semaphore::Release(vint count) + { + for (vint i = 0; i < count; i++) + { + if (internalData->semNamed) + { + sem_post(internalData->semNamed); + } + else + { + sem_post(&internalData->semUnnamed); + } + } + return true; + } + + bool Semaphore::Wait() + { + if (internalData->semNamed) + { + return sem_wait(internalData->semNamed) == 0; + } + else + { + return sem_wait(&internalData->semUnnamed) == 0; + } + } + +/*********************************************************************** +EventObject +***********************************************************************/ + + namespace threading_internal + { + struct EventData + { + bool autoReset; + volatile bool signaled; + CriticalSection mutex; + ConditionVariable cond; + volatile vint counter = 0; + }; + } + + EventObject::EventObject() + { + internalData = nullptr; + } + + EventObject::~EventObject() + { + if (internalData) + { + delete internalData; + } + } + + bool EventObject::CreateAutoUnsignal(bool signaled, const WString& name) + { + if (name!=L"") return false; + if (internalData) return false; + + internalData = new EventData; + internalData->autoReset = true; + internalData->signaled = signaled; + return true; + } + + bool EventObject::CreateManualUnsignal(bool signaled, const WString& name) + { + if (name!=L"") return false; + if (internalData) return false; + + internalData = new EventData; + internalData->autoReset = false; + internalData->signaled = signaled; + return true; + } + + bool EventObject::Signal() + { + if (!internalData) return false; + + internalData->mutex.Enter(); + internalData->signaled = true; + if (internalData->counter) + { + if (internalData->autoReset) + { + internalData->cond.WakeOnePending(); + internalData->signaled = false; + } + else + { + internalData->cond.WakeAllPendings(); + } + } + internalData->mutex.Leave(); + return true; + } + + bool EventObject::Unsignal() + { + if (!internalData) return false; + + internalData->mutex.Enter(); + internalData->signaled = false; + internalData->mutex.Leave(); + return true; + } + + bool EventObject::Wait() + { + if (!internalData) return false; + + internalData->mutex.Enter(); + if (internalData->signaled) + { + if (internalData->autoReset) + { + internalData->signaled = false; + } + } + else + { + internalData->counter++; + internalData->cond.SleepWith(internalData->mutex); + internalData->counter--; + } + internalData->mutex.Leave(); + return true; + } + +/*********************************************************************** +ThreadPoolLite +***********************************************************************/ + + namespace threading_internal + { + struct ThreadPoolTask + { + Func task; + Ptr next; + }; + + struct ThreadPoolData + { + Semaphore semaphore; + EventObject taskFinishEvent; + Ptr taskBegin; + Ptr* taskEnd = nullptr; + volatile bool stopping = false; + List taskThreads; + }; + + SpinLock threadPoolLock; + ThreadPoolData* threadPoolData = nullptr; + + void ThreadPoolProc(Thread* thread, void* argument) + { + while (true) + { + Ptr task; + + threadPoolData->semaphore.Wait(); + SPIN_LOCK(threadPoolLock) + { + if (threadPoolData->taskBegin) + { + task = threadPoolData->taskBegin; + threadPoolData->taskBegin = task->next; + } + + if (!threadPoolData->taskBegin) + { + threadPoolData->taskEnd = &threadPoolData->taskBegin; + threadPoolData->taskFinishEvent.Signal(); + } + } + + if (task) + { + ThreadLocalStorage::FixStorages(); + try + { + task->task(); + ThreadLocalStorage::ClearStorages(); + } + catch (...) + { + ThreadLocalStorage::ClearStorages(); + } + } + else if (threadPoolData->stopping) + { + return; + } + } + } + + bool ThreadPoolQueue(const Func& proc) + { + SPIN_LOCK(threadPoolLock) + { + if (!threadPoolData) + { + threadPoolData = new ThreadPoolData; + threadPoolData->semaphore.Create(0, 65536); + threadPoolData->taskFinishEvent.CreateManualUnsignal(false); + threadPoolData->taskEnd = &threadPoolData->taskBegin; + + for (vint i = 0; i < Thread::GetCPUCount() * 4; i++) + { + threadPoolData->taskThreads.Add(Thread::CreateAndStart(&ThreadPoolProc, nullptr, false)); + } + } + + if (threadPoolData) + { + if (threadPoolData->stopping) + { + return false; + } + + auto task = MakePtr(); + task->task = proc; + *threadPoolData->taskEnd = task; + threadPoolData->taskEnd = &task->next; + threadPoolData->semaphore.Release(); + threadPoolData->taskFinishEvent.Unsignal(); + } + } + return true; + } + + bool ThreadPoolStop(bool discardPendingTasks) + { + SPIN_LOCK(threadPoolLock) + { + if (!threadPoolData) return false; + if (threadPoolData->stopping) return false; + + threadPoolData->stopping = true; + if (discardPendingTasks) + { + threadPoolData->taskEnd = &threadPoolData->taskBegin; + threadPoolData->taskBegin = nullptr; + } + + threadPoolData->semaphore.Release(threadPoolData->taskThreads.Count()); + } + + threadPoolData->taskFinishEvent.Wait(); + for (vint i = 0; i < threadPoolData->taskThreads.Count(); i++) + { + auto thread = threadPoolData->taskThreads[i]; + thread->Wait(); + delete thread; + } + threadPoolData->taskThreads.Clear(); + + SPIN_LOCK(threadPoolLock) + { + delete threadPoolData; + threadPoolData = nullptr; + } + return true; + } + } + + ThreadPoolLite::ThreadPoolLite() + { + } + + ThreadPoolLite::~ThreadPoolLite() + { + } + + bool ThreadPoolLite::Queue(void(*proc)(void*), void* argument) + { + return ThreadPoolQueue([proc, argument](){proc(argument);}); + } + + bool ThreadPoolLite::Queue(const Func& proc) + { + return ThreadPoolQueue(proc); + } + + bool ThreadPoolLite::Stop(bool discardPendingTasks) + { + return ThreadPoolStop(discardPendingTasks); + } + +/*********************************************************************** +CriticalSection +***********************************************************************/ + + namespace threading_internal + { + struct CriticalSectionData + { + pthread_mutex_t mutex; + }; + } + + CriticalSection::CriticalSection() + { + internalData = new CriticalSectionData; + pthread_mutex_init(&internalData->mutex, nullptr); + } + + CriticalSection::~CriticalSection() + { + pthread_mutex_destroy(&internalData->mutex); + delete internalData; + } + + bool CriticalSection::TryEnter() + { + return pthread_mutex_trylock(&internalData->mutex) == 0; + } + + void CriticalSection::Enter() + { + pthread_mutex_lock(&internalData->mutex); + } + + void CriticalSection::Leave() + { + pthread_mutex_unlock(&internalData->mutex); + } + + CriticalSection::Scope::Scope(CriticalSection& _criticalSection) + :criticalSection(&_criticalSection) + { + criticalSection->Enter(); + } + + CriticalSection::Scope::~Scope() + { + criticalSection->Leave(); + } + +/*********************************************************************** +ReaderWriterLock +***********************************************************************/ + + namespace threading_internal + { + struct ReaderWriterLockData + { + pthread_rwlock_t rwlock; + }; + } + + ReaderWriterLock::ReaderWriterLock() + { + internalData = new ReaderWriterLockData; + pthread_rwlock_init(&internalData->rwlock, nullptr); + } + + ReaderWriterLock::~ReaderWriterLock() + { + pthread_rwlock_destroy(&internalData->rwlock); + delete internalData; + } + + bool ReaderWriterLock::TryEnterReader() + { + return pthread_rwlock_tryrdlock(&internalData->rwlock) == 0; + } + + void ReaderWriterLock::EnterReader() + { + pthread_rwlock_rdlock(&internalData->rwlock); + } + + void ReaderWriterLock::LeaveReader() + { + pthread_rwlock_unlock(&internalData->rwlock); + } + + bool ReaderWriterLock::TryEnterWriter() + { + return pthread_rwlock_trywrlock(&internalData->rwlock) == 0; + } + + void ReaderWriterLock::EnterWriter() + { + pthread_rwlock_wrlock(&internalData->rwlock); + } + + void ReaderWriterLock::LeaveWriter() + { + pthread_rwlock_unlock(&internalData->rwlock); + } + + ReaderWriterLock::ReaderScope::ReaderScope(ReaderWriterLock& _lock) + :lock(&_lock) + { + lock->EnterReader(); + } + + ReaderWriterLock::ReaderScope::~ReaderScope() + { + lock->LeaveReader(); + } + + ReaderWriterLock::WriterScope::WriterScope(ReaderWriterLock& _lock) + :lock(&_lock) + { + lock->EnterWriter(); + } + + ReaderWriterLock::WriterScope::~WriterScope() + { + lock->LeaveReader(); + } + +/*********************************************************************** +ConditionVariable +***********************************************************************/ + + namespace threading_internal + { + struct ConditionVariableData + { + pthread_cond_t cond; + }; + } + + ConditionVariable::ConditionVariable() + { + internalData = new ConditionVariableData; + pthread_cond_init(&internalData->cond, nullptr); + } + + ConditionVariable::~ConditionVariable() + { + pthread_cond_destroy(&internalData->cond); + delete internalData; + } + + bool ConditionVariable::SleepWith(CriticalSection& cs) + { + return pthread_cond_wait(&internalData->cond, &cs.internalData->mutex) == 0; + } + + void ConditionVariable::WakeOnePending() + { + pthread_cond_signal(&internalData->cond); + } + + void ConditionVariable::WakeAllPendings() + { + pthread_cond_broadcast(&internalData->cond); + } + +/*********************************************************************** +SpinLock +***********************************************************************/ + + SpinLock::Scope::Scope(SpinLock& _spinLock) + :spinLock(&_spinLock) + { + spinLock->Enter(); + } + + SpinLock::Scope::~Scope() + { + spinLock->Leave(); + } + + SpinLock::SpinLock() + :token(0) + { + } + + SpinLock::~SpinLock() + { + } + + bool SpinLock::TryEnter() + { + return __sync_lock_test_and_set(&token, 1)==0; + } + + void SpinLock::Enter() + { + while(__sync_val_compare_and_swap(&token, 0, 1)!=0) + { + while(token!=0) _mm_pause(); + } + } + + void SpinLock::Leave() + { + __sync_lock_test_and_set(&token, 0); + } + +/*********************************************************************** +ThreadLocalStorage +***********************************************************************/ + +#define KEY ((pthread_key_t&)key) + + ThreadLocalStorage::ThreadLocalStorage(Destructor _destructor) + :destructor(_destructor) + { + static_assert(sizeof(key) >= sizeof(pthread_key_t), "ThreadLocalStorage's key storage is not large enouth."); + PushStorage(this); + auto error = pthread_key_create(&KEY, destructor); + CHECK_ERROR(error != EAGAIN && error != ENOMEM, L"vl::ThreadLocalStorage::ThreadLocalStorage()#Failed to create a thread local storage index."); + } + + ThreadLocalStorage::~ThreadLocalStorage() + { + pthread_key_delete(KEY); + } + + void* ThreadLocalStorage::Get() + { + CHECK_ERROR(!disposed, L"vl::ThreadLocalStorage::Get()#Cannot access a disposed ThreadLocalStorage."); + return pthread_getspecific(KEY); + } + + void ThreadLocalStorage::Set(void* data) + { + CHECK_ERROR(!disposed, L"vl::ThreadLocalStorage::Set()#Cannot access a disposed ThreadLocalStorage."); + pthread_setspecific(KEY, data); + } + +#undef KEY +} +#endif + + /*********************************************************************** .\PARSING\JSON\PARSINGJSON.CPP ***********************************************************************/ @@ -13149,111 +15031,126 @@ namespace vl ParserText ***********************************************************************/ -const wchar_t parserTextBuffer[] = -L"\r\n" L"" -L"\r\n" L"//////////////////////////////////////////////////////////////////" -L"\r\n" L"// AST" -L"\r\n" L"//////////////////////////////////////////////////////////////////" -L"\r\n" L"" -L"\r\n" L"class Node" -L"\r\n" L"{" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class Literal:Node" -L"\r\n" L"{" -L"\r\n" L"\tenum Value" -L"\r\n" L"\t{" -L"\r\n" L"\t\tTrue," -L"\r\n" L"\t\tFalse," -L"\r\n" L"\t\tNull," -L"\r\n" L"\t}" -L"\r\n" L"" -L"\r\n" L"\tValue value;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class String:Node" -L"\r\n" L"{" -L"\r\n" L"\ttoken content(JsonUnescapingString)\t\t\t\t@Color(\"String\");" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class Number:Node" -L"\r\n" L"{" -L"\r\n" L"\ttoken content;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class Array:Node" -L"\r\n" L"{" -L"\r\n" L"\tNode[] items;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class ObjectField:Node" -L"\r\n" L"{" -L"\r\n" L"\ttoken name(JsonUnescapingString)\t\t\t\t@Color(\"AttName\");" -L"\r\n" L"\tNode value;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class Object:Node" -L"\r\n" L"{" -L"\r\n" L"\tObjectField[] fields;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"//////////////////////////////////////////////////////////////////" -L"\r\n" L"// Lexer" -L"\r\n" L"//////////////////////////////////////////////////////////////////" -L"\r\n" L"" -L"\r\n" L"token TRUEVALUE = \"true\"\t\t\t\t\t\t\t@Color(\"Keyword\");" -L"\r\n" L"token FALSEVALUE = \"false\"\t\t\t\t\t\t\t@Color(\"Keyword\");" -L"\r\n" L"token NULLVALUE = \"null\"\t\t\t\t\t\t\t@Color(\"Keyword\");" -L"\r\n" L"token OBJOPEN = \"\\{\"\t\t\t\t\t\t\t\t@Color(\"Boundary\");" -L"\r\n" L"token OBJCLOSE = \"\\}\"\t\t\t\t\t\t\t\t@Color(\"Boundary\");" -L"\r\n" L"token ARROPEN = \"\\[\"\t\t\t\t\t\t\t\t@Color(\"Boundary\");" -L"\r\n" L"token ARRCLOSE = \"\\]\"\t\t\t\t\t\t\t\t@Color(\"Boundary\");" -L"\r\n" L"token COMMA = \",\";" -L"\r\n" L"token COLON = \":\";" -L"\r\n" L"token NUMBER = \"[\\-]?\\d+(.\\d+)?([eE][+\\-]?\\d+)?\"\t@Color(\"Number\");" -L"\r\n" L"token STRING = \"\"\"([^\\\\\"\"]|\\\\[^u]|\\\\u\\d{4})*\"\"\"\t\t@ContextColor();" -L"\r\n" L"" -L"\r\n" L"discardtoken SPACE = \"\\s+\";" -L"\r\n" L"" -L"\r\n" L"//////////////////////////////////////////////////////////////////" -L"\r\n" L"// Rules" -L"\r\n" L"//////////////////////////////////////////////////////////////////" -L"\r\n" L"" -L"\r\n" L"rule Node JLiteral" -L"\r\n" L"\t= STRING:content as String" -L"\r\n" L"\t= NUMBER:content as Number" -L"\r\n" L"\t= \"true\" as Literal with {value = \"True\"}" -L"\r\n" L"\t= \"false\" as Literal with {value = \"False\"}" -L"\r\n" L"\t= \"null\" as Literal with {value = \"Null\"}" -L"\r\n" L"\t;" -L"\r\n" L"" -L"\r\n" L"rule ObjectField JField" -L"\r\n" L"\t= STRING:name \":\" JValue:value as ObjectField" -L"\r\n" L"\t;" -L"\r\n" L"" -L"\r\n" L"rule Object JObject" -L"\r\n" L"\t= \"{\" [JField:fields {\",\" JField:fields} ] \"}\" as Object" -L"\r\n" L"\t;" -L"\r\n" L"" -L"\r\n" L"rule Array JArray" -L"\r\n" L"\t= \"[\" [JValue:items {\",\" JValue:items} ] \"]\" as Array" -L"\r\n" L"\t;" -L"\r\n" L"" -L"\r\n" L"rule Node JValue" -L"\r\n" L"\t= !JLiteral" -L"\r\n" L"\t= !JObject" -L"\r\n" L"\t= !JArray" -L"\r\n" L"\t;" -L"\r\n" L"" -L"\r\n" L"rule Node JRoot" -L"\r\n" L"\t= !JObject" -L"\r\n" L"\t= !JArray" -L"\r\n" L"\t;" -; +const wchar_t* const parserTextBuffer[] = { + L"" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"// AST" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"" L"\r\n" +, L"class Node" L"\r\n" +, L"{" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class Literal:Node" L"\r\n" +, L"{" L"\r\n" +, L"\tenum Value" L"\r\n" +, L"\t{" L"\r\n" +, L"\t\tTrue," L"\r\n" +, L"\t\tFalse," L"\r\n" +, L"\t\tNull," L"\r\n" +, L"\t}" L"\r\n" +, L"" L"\r\n" +, L"\tValue value;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class String:Node" L"\r\n" +, L"{" L"\r\n" +, L"\ttoken content(JsonUnescapingString)\t\t\t\t@Color(\"String\");" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class Number:Node" L"\r\n" +, L"{" L"\r\n" +, L"\ttoken content;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class Array:Node" L"\r\n" +, L"{" L"\r\n" +, L"\tNode[] items;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class ObjectField:Node" L"\r\n" +, L"{" L"\r\n" +, L"\ttoken name(JsonUnescapingString)\t\t\t\t@Color(\"AttName\");" L"\r\n" +, L"\tNode value;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class Object:Node" L"\r\n" +, L"{" L"\r\n" +, L"\tObjectField[] fields;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"// Lexer" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"" L"\r\n" +, L"token TRUEVALUE = \"true\"\t\t\t\t\t\t\t@Color(\"Keyword\");" L"\r\n" +, L"token FALSEVALUE = \"false\"\t\t\t\t\t\t\t@Color(\"Keyword\");" L"\r\n" +, L"token NULLVALUE = \"null\"\t\t\t\t\t\t\t@Color(\"Keyword\");" L"\r\n" +, L"token OBJOPEN = \"\\{\"\t\t\t\t\t\t\t\t@Color(\"Boundary\");" L"\r\n" +, L"token OBJCLOSE = \"\\}\"\t\t\t\t\t\t\t\t@Color(\"Boundary\");" L"\r\n" +, L"token ARROPEN = \"\\[\"\t\t\t\t\t\t\t\t@Color(\"Boundary\");" L"\r\n" +, L"token ARRCLOSE = \"\\]\"\t\t\t\t\t\t\t\t@Color(\"Boundary\");" L"\r\n" +, L"token COMMA = \",\";" L"\r\n" +, L"token COLON = \":\";" L"\r\n" +, L"token NUMBER = \"[\\-]?\\d+(.\\d+)?([eE][+\\-]?\\d+)?\"\t@Color(\"Number\");" L"\r\n" +, L"token STRING = \"\"\"([^\\\\\"\"]|\\\\[^u]|\\\\u\\d{4})*\"\"\"\t\t@ContextColor();" L"\r\n" +, L"" L"\r\n" +, L"discardtoken SPACE = \"\\s+\";" L"\r\n" +, L"" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"// Rules" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"" L"\r\n" +, L"rule Node JLiteral" L"\r\n" +, L"\t= STRING:content as String" L"\r\n" +, L"\t= NUMBER:content as Number" L"\r\n" +, L"\t= \"true\" as Literal with {value = \"True\"}" L"\r\n" +, L"\t= \"false\" as Literal with {value = \"False\"}" L"\r\n" +, L"\t= \"null\" as Literal with {value = \"Null\"}" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"rule ObjectField JField" L"\r\n" +, L"\t= STRING:name \":\" JValue:value as ObjectField" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"rule Object JObject" L"\r\n" +, L"\t= \"{\" [JField:fields {\",\" JField:fields} ] \"}\" as Object" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"rule Array JArray" L"\r\n" +, L"\t= \"[\" [JValue:items {\",\" JValue:items} ] \"]\" as Array" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"rule Node JValue" L"\r\n" +, L"\t= !JLiteral" L"\r\n" +, L"\t= !JObject" L"\r\n" +, L"\t= !JArray" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"rule Node JRoot" L"\r\n" +, L"\t= !JObject" L"\r\n" +, L"\t= !JArray" L"\r\n" +, L"\t;" L"\r\n" +}; +const vint lengthTextBuffer[] = { + 2, 68, 8, 68, 2, 12, 3, 3, 2, 20, 3, 13, 4, 9, 10, 9, 4, 2, 15, 3, 2, 19, 3, 59, 3, 2, 19, 3, 17, 3, 2, 18 +, 3, 16, 3, 2, 24, 3, 57, 14, 3, 2, 19, 3, 24, 3, 2, 68, 10, 68, 2, 51, 53, 51, 49, 50, 49, 50, 20, 20, 68, 67, 2, 29 +, 2, 68, 10, 68, 2, 20, 29, 29, 44, 46, 44, 4, 2, 25, 48, 4, 2, 21, 59, 4, 2, 19, 56, 4, 2, 18, 14, 13, 12, 4, 2, 17 +, 13, 12, 4 +}; +const vint lengthTextBufferTotal = 2018; vl::WString JsonGetParserTextBuffer() { - return parserTextBuffer; + vl::collections::Array textBuffer(lengthTextBufferTotal + 1); + wchar_t* reading = &textBuffer[0]; + for(vint i = 0; i < sizeof(parserTextBuffer) / sizeof(*parserTextBuffer); i++) + { + memcpy(reading, parserTextBuffer[i], lengthTextBuffer[i] * sizeof(wchar_t)); + reading += lengthTextBuffer[i]; + } + *reading = 0; + return &textBuffer[0]; } /*********************************************************************** @@ -13264,7 +15161,7 @@ const vint parserBufferLength = 3809; // 17748 bytes before compressing const vint parserBufferBlock = 1024; const vint parserBufferRemain = 737; const vint parserBufferRows = 4; -const char* parserBuffer[] = { +const char* const parserBuffer[] = { "\x00\x0B\x00\x02\x83\x80\x07\x7D\x00\x82\x03\xFF\x45\x08\x82\x83\x86\x81\x21\x6F\x6C\x2F\x32\x37\x84\x86\x02\x86\x00\x17\x82\x93\x24\x3A\x39\x34\x37\x67\x06\x98\x8A\x88\x8E\x84\x00\x88\x12\x94\x98\x87\x0B\x93\x81\x20\x3A\x74\x4E\x21\x2D\x35\x32\x90\x86\x92\x0C\xA6\xA8\x93\x85\x88\x84\x96\x86\x3F\x80\x0B\x25\x39\x3F\x3B\x88\x32\x36\x88\xB8\x88\x8A\x99\x88\x9F\x96\x40\x83\x83\xA5\xA7\xA1\xA4\x83\xA5\x04\xCD\xA9\x9D\x94\x81\xA1\xAE\xA9\x44\xC6\xB2\x28\xAC\xA9\x86\x93\xAC\x03\xBB\xAA\x8C\x88\x00\x8D\xB6\x81\x42\x6F\x35\x2E\x34\x31\x32\x39\x3C\x56\xE6\xA5\x89\xBE\xA3\xB4\x85\xB7\x7F\x83\xB1\xB3\xB5\xBF\xB9\xBC\x81\x58\x83\x9A\xAF\xAC\xB6\xB6\xC0\xB9\x74\xF6\xB8\xA5\xB8\xC7\xB2\xC4\xBE\x5B\x8E\xCD\xD0\xB0\xCD\xC3\xC9\x91\x96\x8D\x98\xCC\xC8\x82\x8D\xD3\x81\x4E\x75\x2D\x22\x35\x32\x3B\xC3\x82\x0C\x18\xB1\xCF\x8F\x36\x34\x3B\x32\x78\x74\x2A\xB8\x80\x06\xAF\xCB\x9C\x2E\xF2\x32\x21\x38\xBF\x7E\xE3\xE3\xFF\x3E\xC2\x81\xAC\x21\x37\xDB\xE1\x6C\x48\xC8\xE4\x08\x8C\xEA\x80\x27\x6F\x64\x35\x92\xE6\xE6\xD0\x82\xD3\xA9\xAB\xED\xDC\xED\xE8\x8E\xD3\x27\x62\x6A\x25\x23\x34\x3C\xF3\x7F\x80\x0C\xF0\xC0\x08\xFA\xF4\xF6\x23\x34\x65\x6C\x08\xA4\xFE\xEB\x82\xD2\x8E\x1E\x60\x4E\x7A\x72\x00\x21\x65\x81\x70\xC3\x79\x16\x82\x49\xCE\x65\x1D\x1B\x1C\x03\x90\x50\x01\x73\xCF\x61\x1C\x1B\x82\x03\x76\x16\x85\x1D\xDB\x5C\x7D\x7E\x40\xE0\x6A\x6C\x6A\x1C\x04\x81\x53\x19\x6D\xB7\x76\x6E\x7B\x87\x19\x43\x44\x7F\x7A\x74\x2C\x86\x6A\x19\xF8\x7A\x70\x84\x79\xF2\x44\x42\x7F\x8B\xF6\x75\x84\x1A\x75\x08\x40\x9E\x1B\x4C\x65\x14\x60\x40\x46\x3B\xA9\x70\x8F\x7D\xF9\x64\x18\x86\x40\x1A\xAC\x1C\x87\x8A\xE6\x43\x40\x83\x47\x67\x25\x83\x43\x89\xB6\x65\x16\x6C\x6F\x0F\x18\x44\x08\x46\x61\xBC\x66\x9A\x52\xEE\x64\x77\x9B\x4D\x69\x9C\x7B\x98\x9A\x6D\x88\x7F\x9B\x55\x71\x88\x79\x00\x46\x77\x82\x44\x16\x14\x55\x05\x16\x15\x10\x4C\x3D\x90\x90\x41\x40\x9D\x4C\x84\x6F\x02\x18\x4A\x02\xA2\x03\x46\x10\xA3\x14\x7E\x80\xAD\x9F\x93\x00\x26\x16\x87\x1C\x45\x98\x43\x00\x9E\x9C\x97\x75\x14\x13\x4C\x3F\x91\xA1\x11\x83\x83\x42\x91\x1D\x6C\x2C\x19\xA0\x43\xA5\x8B\x72\x87\x13\x42\x0A\x1F\x10\x14\x45\x0E\x1B\xA8\x42\xB7\x9C\x1B\x1F\xA6\xC0\x5B\x61\x62\x40\xB0\x8A\x13\x10\x13\x4F\x10\xA7\xAC\x41\xB9\xBD\x1D\xA9\x8B\x51\x4D\xB0\x01\x10\x52\x12\x13\xAD\xAD\xC7\x83\x49\xAF\x16\x06\x84\x80\x60\x41\x80\x50\xB2\x17\xB0\xC5\x85\x15\xB6\x40\xB9\x9D\x1C\x8B\xB6\xBF\x4C\x59\x5B\x13\x4D\x0D\x11\x12\x91\x3D\x6C\x04\x82\x7B\x94\x83\x1F\x10\xB1\x4E\x30\xB3\x42\x0E\xE8\x88\x6C\x7D\x95\x9E\x8D\x12\x11\x11\x52\x1F\x08\x46\xC1\x02\x5B\x1C\x15\x0B\x5D\x3F\x0C\x14\x19\x2B\x28\x0E\x0B\xC3\x2B\x29\x0F\x0C\x0A\x5B\x25\x15\x11\x17\x5B\x2B\x0B\xC1\xC3\x14\xD6\xC9\x9C\x42\x23\xDF\x70\xC0\x00\x53\x3B\x99\x12\x13\x47\x1B\x08\x46\xCB\x02\x62\x08\xC6\x17\x5C\x1C\x12\x09\x17\x7C\x35\xCB\x16\x17\x75\x38\xC5\xCD\x1D\x0F\xFB\x14\x0D\x1F\x29\x2A\x02\x0B\xA2\x0C\x48\xD8\x42\x91\x94\x93\x10\x15\x10\x43\x05\x1C\xAC\x42\x53\xDC\x13\x1F\x0A\x39\x89\x44\x7B\x98\xBE\x9C\xB3\x42\x12\x14\xAD\x66\x86\x04\x18\x64\xD2\x40\xD8\x0D\x90\x7E\x0A\x14\x6F\x2F\x14\x1C\x47\x76\x74\x1D\x00\x46\x73\xC2\x40\x10\x08\x24\x3C\x08\xD9\x85\x6C\x3E\x0D\xBC\x00\x80\x7B\xD2\xD8\x1B\x0E\x18\x45\xE3\xD9\x61\xEA\xD0\xDE\x1C\x74\x33\x68\x42\xE3\x77\xFA\xD9\xE2\x85\x7E\xDA\x60\x02\xE0\xD0\x4A\xD4\x42\xD2\x98\xD6\x8E\x09\x0C\xFA\x18\x41\xEA\x40\x92\xE9\xD4\xE6\x0E\x20\x29\xC2\x17\xCA\x47\x20\x08\xE8\x97\x29\xB4\x10\x09\x18\x73\x29\xED\x44\x96\x40\x0D\x0A\x01\xE9\x7C\xFE\x08\xEA\x13\x55\x02\xC4\xC2\xEB\x20\x30\xEE\x96\xEC\xB4\xE0\x01\x7B\x88\xB9\xFB\xED\xE5\xDF\xA8\xE2\x06\xA1\x19\x22\x33\xE5\xEF\xE4\x6C\x37\xD7\x1E\x73\x68\x20\x0B\x1C\x08\x51\x9C\x80\x09\x0F\x20\x22\x04\x16\x1C\x1C\x95\xFD\x1E\xEE\xBC\xC3\xEE\xED\xF9\x96\xAC\x18\xA5\xF5\xC9\xD8\xFA\xF4\xF7\xDE\xE0\xFB\x85\x19\xE3\xE5\xF6\x13\xA5\xD4\x60\x07\xFA\x4E\x78\x7B\xF7\x62\x06\x0D\xA8\x4C\x0C\xFD\x57\x76\x75\xEC\x60\x03\x7B\x74\x1D\x7B\xF7\x61\x7C\x7E\xF2\x62\x01\x35\xA9\x4A\x7F\xDF\x01\x78\x7A\x08\x18\x26\x83\x88\x6D\x83\xDA\x6D\x64\x0F\x22\x34\x2D\x6E\x08\x28\x85\xDE\x4F\x7E\x06\x10\x00\x0A\x46\x5F\x76\x0B\xFE\x1B\x81\x87\xFD\x5F\x75\x07\x18\x38\x84\xE9\x4A\x02\x86\x29\x65\x0F\x7D\x21\x0F\x79\xF3\x7A\x6D\x86", "\x0E\x40\x8A\x56\x4A\x4C\x3F\x10\xBC\x8B\x7F\x23\x81\x0A\x38\xC4\x2F\x87\xC9\x4A\x0C\x48\xFD\x34\x87\x6C\x55\x84\x0E\x0B\x33\x0A\x06\x8C\x1D\x8B\x87\x59\x8F\x7E\xEA\x2C\x74\x79\x21\x74\x25\x7C\x3A\x15\x78\x13\xBE\x84\x78\x0A\x96\x78\x04\x3C\x54\x0D\x16\xD2\x86\x23\xAF\x4F\x89\x41\x57\x97\x73\x1D\xC4\x3E\x04\x19\x0C\x10\x23\x7F\x9B\x87\x1E\xF9\x06\x81\x2D\x15\x7B\x0B\x20\x0B\x8E\xF8\x28\x7D\x41\x07\x77\x6F\x7B\x22\x0C\x06\x1A\xC5\x8C\x7E\x46\xB7\x37\x41\x02\x80\x05\x17\x65\x7D\x0B\x05\xA0\x03\x90\xEC\x6A\x0B\x20\x85\x97\x91\x44\x94\x94\x78\x8D\x95\x74\x10\x10\x92\x92\x53\xBB\x78\x95\x97\x95\x75\x1F\x1A\x9C\x92\x4F\x83\x90\x86\x67\x74\x93\xE1\x08\x2B\x96\x45\xA5\x0B\x84\x6E\x66\x84\x19\x59\x62\x20\xF9\x2B\x84\x92\x2D\x94\x8F\x69\x58\x8E\x47\x5D\x84\x25\x97\x59\x80\x99\x09\xF4\x24\x99\x23\x42\x23\x85\x61\x8E\x86\x96\x67\x61\x8F\x92\x43\x23\x64\x48\x95\x3C\x1D\x7D\x84\x12\x8C\x25\x9B\x87\x71\x86\x83\x1E\x25\x94\x8A\x1F\x44\x7C\x46\x4D\x53\x0F\x23\xE5\x7D\x95\x76\x8D\x4F\x9D\x3E\x52\x94\x2D\xA2\x0D\x0E\x4F\xB1\x89\x94\xE9\x91\x7B\x3A\xA0\x08\x90\x7B\xBA\x38\x9F\xF1\x8E\x84\x2B\xEA\x89\x8A\x84\xB6\x41\x93\x9B\x9C\x9E\x3F\xC9\x81\x47\x29\x83\x91\x8F\xA2\x90\x89\x1E\x5B\x85\x08\x8C\x1D\xA2\x90\x1A\xA4\x94\x41\xAE\x9C\x8C\x4B\x8E\x45\x76\x0B\xA4\xA7\x22\xA0\x09\x94\x88\xB5\x97\x8D\x83\x8A\x9A\xC9\x67\x67\xA2\xCB\x59\xA1\x41\x2E\x14\x07\x47\x88\x2B\xA6\xBD\x63\x91\x7A\x86\x83\xA6\x2F\xB0\x97\xA5\xFC\x51\x92\x04\x77\x63\xAA\x49\x98\x93\x97\x88\x9D\x90\xA6\x1A\xBB\x9B\xE5\x5D\x9D\x53\xA9\x94\xA1\xA7\x49\x18\x21\x56\xE8\x94\xA2\x75\xAC\x9D\xA1\xA8\x70\x9F\x43\x8B\xA9\xA8\xB0\xA0\x02\xAC\x64\x1A\x9D\x44\xFD\x9F\x8D\x38\x92\xA9\x9C\x30\x5E\x9A\x40\x60\x91\x8F\x2D\x9B\xA8\x21\x77\xBA\x6D\x40\xE5\x73\xA1\x82\xA6\xA8\xAD\x28\xB4\x9C\x43\xEE\x91\xAD\x7C\xAE\xA2\xA2\x6D\xB4\xA2\x4C\xFE\x36\x8E\x8D\x8E\x9B\x20\xBD\x83\x92\x34\xC2\x95\x9A\x63\xBE\xA1\xA4\x2E\x94\x52\x12\x6C\x6E\x6D\xB7\x9C\xB3\x9C\x31\x05\x04\x46\x22\xBB\x87\xCF\x87\x89\x8E\x4B\x86\xB4\xEA\x41\x81\xA7\xB7\x94\xAC\x21\x74\xB7\xA9\x0C\x77\xA4\x21\xBC\xB0\xAC\x3D\x5E\xB7\x6E\x5F\x84\xB7\xAC\xC3\xA9\xA6\xA0\x64\x0E\xA1\x5A\x87\xBC\xAD\xE4\x71\x88\x97\x7A\x9A\xA0\x46\x92\xB1\x07\x9D\x84\x25\xA7\x37\xA4\x38\x29\xBA\xBA\xA5\x4A\xAC\xA1\x96\x46\xB5\x9F\x29\xCB\xAA\xAD\x97\x89\x7F\x96\x53\x99\x88\x46\xD1\x91\x07\x2F\x88\x26\xBC\x7A\x61\x8C\xEA\x63\x8C\x65\x32\x84\x4F\x6E\x22\x09\x8D\x75\xED\x8F\x94\xE3\x94\xA1\x8B\xAE\xB4\xA1\x99\x08\x2B\xBF\xDB\xA3\x9F\xB3\xC2\x8E\x70\x41\x0E\x7B\x85\x74\x99\xB3\x2F\x67\x7F\xB0\x0A\x84\x28\x85\xCD\xA4\x83\xB2\x74\x3A\x73\x40\x4A\x6B\x84\xD3\xAE\x80\xB9\xC0\xA3\xBE\x8F\x7D\x86\xBC\x82\x28\xB8\xB8\x62\x8A\x65\x7B\xA8\x76\x8C\xFE\x71\xB8\xA9\xF3\xA8\x76\x1B\xF6\xB2\x9D\x2C\x98\xC1\x8B\x20\x88\x21\x8C\xC0\xB2\x9B\xC5\x74\x0D\xB2\x03\x37\x6C\x36\xBE\x4E\x07\x17\xFE\x42\xC0\x03\x2E\x70\x8D\xB6\xC2\xC2\x81\x0A\x69\x72\x20\xD9\xBE\x38\x91\x08\x22\x26\xDC\x9F\xAA\x9F\xB6\xC4\x90\x82\x20\x72\xBC\x7A\xAD\xAB\x4A\xD0\x47\x82\x83\x2D\xC1\xBA\xB6\xC0\xC7\x76\x60\x07\x95\xE2\x9D\xC6\x8B\x9A\xA1\xC6\x04\x33\xC6\x64\xD1\xC4\x0F\xB8\x60\xC8\x00\x3A\xD7\xB1\x82\x65\xC5\x8E\x9A\x9A\xA3\xCA\x00\x02\xCA\x64\xC4\xCC\x51\x30\xF2\xCA\xBA\x18\xD4\x90\x9A\x83\x23\xC6\x4A\xB5\xC5\xCD\x8C\x6F\xCD\x9C\xBE\x94\xCF\x65\x97\x74\x92\x78\xC2\xCA\xA1\xFC\xC9\x69\x1C\xE2\xCC\xD1\x9A\xBF\xB3\x7E\x84\x2D\xBF\xCF\x87\xD1\x6E\x45\xC0\x03\x91\xD6\xCE\xC0\xB7\x7E\x01\xD3\x24\x8F\xCD\xA9\xE3\x96\xC6\xB9\x80\x03\x64\x48\xC6\xB4\x46\xD8\x71\xD4\xCE\x58\x7D\x8F\xA3\x68\x21\xAE\xED\x70\x3B\x10\xEB\x73\xC4\xC5\x68\x47\xF1\x6F\x87\x4A\x90\x0B\x8D\x80\xBF\x61\x7B\xC0\x52\x04\x78\xE3\x76\x37\x8D\xCB\x6D\x37\xB1\x8D\x86\x81\xE9\x5E\x90\x7B\x0F\x98\x7F\x04\xAF\x96\x83\xF3\x69\x7A\x80\xD3\xDD\x75\xF4\x71\x73\x7F\x37\x98\xD8\x82\x12\x9A\x7C\x1B\x96\x8F\x7E\xF9\x41\x85\x0F\xE1\xCE\x7D\xF4\x08\x89\x82\x73\xCD\x81\xDB\x11\x99\x7E\x1B\x96\x88\x82\x05\xA0\xDE\xC7\x4D\x5A\xC1\x93\x39\xAD\xC3\x7D\x43\x21\xBD\x3C\xCB\xBE\x88\xAD\x74\xC4\x22\x68\x8B\x92\xAF\x8A\xC5\x7D\xB5\x71\x8F\x39\x99\xCC\x3D\xAE\xD1\xB6\x38\xAE\x05\x06\xDA\x83\x26\xB6\x7B\xA2\x05\x5F\x89\x9F\xAE\xDF\x82\xB4\xE4\xBC\xA0\xB0\x71\x93\xA2\x9D\xC5", "\xA0\x45\xB1\x78\x96\xA6\x64\xB5\x0E\xB9\x81\x10\xBF\xA7\xE5\x61\xA9\x41\xDB\xB7\xBB\xA2\xBF\xB4\xE7\x2D\xAD\xAA\x77\xB5\x71\xA7\x73\x76\xA0\x7B\xCB\x40\x48\x76\x5A\x33\x4E\xAD\x5E\x41\xBC\x3E\x4F\xCD\xC5\xBE\x4C\x36\x0B\x23\x24\x3C\x17\xF5\xA1\x9D\xF3\x34\xA2\xDE\x18\x07\xEA\x4F\xFB\xE9\x74\x8A\x48\xC1\x67\x5A\xA4\x37\x1A\x00\xEE\x74\x01\xDB\x7F\xA4\xE8\x31\x3B\x65\x1C\x34\x07\x6A\xE8\x38\x54\xEE\x6E\xED\xD7\x30\xEC\x6F\x1E\x04\xEF\xE3\x1C\x03\x5C\xAF\x3F\x1C\x6F\x46\x4D\xE9\xC2\xF3\x49\xF0\xCB\x43\x5E\xE1\x80\x0A\xF1\x65\x7C\x34\x52\x14\x98\xEC\x00\x5E\xD5\x0D\x59\xCD\x86\xF0\x52\xB8\x78\x6F\x16\xFC\x6F\xC0\xC6\x42\xF1\x86\xED\xF1\xE1\x90\xFB\x7E\x4A\x6D\xD8\x53\x9C\xE3\x70\xE6\x92\x4A\xF2\xCB\x5E\x69\x84\x9D\xE6\x4B\x3F\x2C\x40\xF5\xC2\xE2\xF5\xE9\xA4\xFE\x86\xE4\xFD\xD9\xF4\xE8\x2B\xF6\x59\xAD\xFD\x6B\x40\x1C\x87\xF2\xA5\x32\xF3\xCB\xE4\x4B\xF0\x43\x0A\xF4\xF0\x09\x5F\x2A\x20\xCE\xD4\x0F\xE6\xC7\xE5\xF9\xA6\xC8\xB9\xDA\x72\x13\xFA\xAF\x4F\x71\xF1\xC7\x89\xFA\xF9\xC8\x58\x21\xF3\xCE\x5F\xF8\x00\x11\xFA\xFB\xBF\x57\x71\xF0\xF3\x48\xB9\x62\xE7\x08\xFD\xAF\xEA\xFF\xE5\x81\xF6\x49\xA9\x60\xFE\x4C\x81\xF7\xF7\x9C\x46\x4D\x02\x8C\x0A\xF4\x45\xFD\x77\x7F\x02\x1D\x7B\x16\x26\x7F\x02\x8B\x75\x33\x5F\x68\xFB\x37\x80\x37\x12\x7B\x46\x24\x20\x0C\x85\x10\x06\x88\x18\x8A\x76\x20\x83\x78\x11\x15\x0E\x7F\x27\x34\x10\x19\x87\x80\x6C\x7E\x43\xE3\x7A\x2E\xBD\x20\x00\x14\x4C\x1B\x00\x7A\x1F\xFF\x0F\x7F\x85\x76\x24\x4E\x68\x2B\x1B\x83\x10\x2D\x87\x7F\x1F\x8C\x21\xB5\x73\x82\x68\x12\x10\xA9\x46\x82\x66\x69\x20\x29\x8F\x82\x67\x26\x24\xD5\x4A\x82\xF1\x1C\x80\x33\x85\x06\x35\x82\x82\x48\x89\x83\x3E\x8C\x2C\xC9\x59\x20\x87\x7E\x80\xAE\x70\x7E\x21\x8F\x26\x52\x77\x5F\x54\x7B\x84\xA6\x10\x5C\x3D\x87\x13\x8A\x7E\x6A\x17\x8C\x10\x83\x62\x10\x13\x8B\x78\x55\x8D\x62\x57\x88\x80\x8C\x5C\x4C\x4D\x2C\x22\x61\x8B\x78\x27\x84\x06\x47\x89\x80\x09\x80\x58\xBC\x19\x75\x5B\x84\x32\x2B\x82\x1B\x9A\x2C\x80\x65\x8B\x24\x67\x8E\x68\x09\x80\x5C\x2C\x28\x67\x86\x7F\x86\x71\x89\x86\x8E\x64\x87\xCE\x73\x10\x41\x1E\x5F\x07\x81\x78\xB5\x61\x81\x23\x12\x7B\x6F\x62\x89\x96\x8A\x7C\x81\x7F\x37\xC8\x77\x89\x81\x75\x4D\x84\x8C\x89\x50\x8C\x10\xDE\x7B\x78\x53\x8B\x26\x94\x23\x48\x3A\x82\x76\x83\x47\x87\x57\x1A\x78\x9B\x6B\x26\x46\x28\x30\x54\x3C\x80\xA7\x87\x76\x58\x80\x73\xC4\x1C\x22\xB2\x82\x83\x3B\x84\x1C\x63\x81\x81\x76\x7D\x1E\xFA\x7F\x26\xFC\x7B\x87\x07\x85\x8B\x4E\x87\x8B\x76\x69\x20\x00\x84\x84\xBD\x89\x07\xBF\x8E\x8C\x62\x74\x49\x86\x78\x78\x1A\x87\x80\xCB\x26\x20\xD5\x45\x88\xCF\x86\x20\x01\x82\x80\x45\x8E\x78\x65\x77\x83\x24\x8D\x76\xD5\x13\x10\x94\x74\x80\x6C\x0F\x7B\x3E\x13\x10\xEB\x71\x7F\xF1\x7C\x7D\xB2\x7F\x79\x0C\x89\x8D\x48\x22\x8D\x8E\x63\x76\xDE\x88\x8F\x81\x84\x49\xE2\x86\x83\xE9\x24\x41\xA6\x70\x40\xEA\x8C\x8E\xE5\x7F\x8E\xC3\x74\x7D\xB1\x73\x12\xB4\x75\x8F\xE3\x83\x10\xDB\x85\x78\x18\x63\x48\xFB\x8E\x81\x53\x4E\x8F\xA3\x75\x76\x91\x77\x8E\xD7\x19\x40\x05\x95\x78\x99\x75\x7D\xE9\x71\x8F\xD8\x31\x78\x04\x2D\x86\xA1\x7F\x90\xC5\x4C\x8F\x88\x8A\x8F\x18\x1F\x8D\xBC\x83\x8D\x0B\x81\x78\xAE\x61\x83\xE0\x75\x81\xF7\x86\x91\xAA\x8A\x51\x15\x90\x8E\x17\x9B\x80\x88\x17\x7C\xD7\x82\x80\xF6\x83\x84\x3A\x99\x8F\x14\x9F\x92\x2C\x9F\x72\xB9\x4B\x3F\xA5\x8E\x2A\xCE\x27\x7E\x51\x83\x80\x5F\x38\x90\x67\x27\x7D\x22\x2D\x1A\xF0\x79\x90\xB0\x73\x38\xDD\x73\x94\xF7\x75\x94\x08\x11\x91\xD6\x7D\x8D\x4A\x97\x94\xFD\x8E\x94\x20\x92\x21\x52\x92\x7C\x54\x9D\x95\xBE\x72\x91\x27\x3E\x7E\x5B\x9F\x96\xF2\x7C\x37\x4D\x7F\x95\x0C\x16\x36\x02\x88\x93\x0C\x1F\x89\x4D\x79\x75\x4F\x90\x00\x92\x75\x62\xA9\x89\x8F\x59\x45\x10\xA1\x88\x10\x13\x0C\x80\x83\x97\x98\x09\x81\x47\x75\x82\x21\xFE\x5C\x8A\x09\x1E\x8A\x79\x8C\x10\xBB\x83\x10\xD1\x85\x96\x5B\x72\x99\x8B\x80\x95\x56\x52\x4E\xBA\x8C\x80\x59\x7D\x99\x02\x81\x8C\x96\x92\x10\xFF\x8B\x34\x67\x93\x8B\x68\x98\x88\xA0\x94\x7E\x8C\x8F\x35\xC7\x5F\x9A\xF7\x77\x9A\x97\x82\x87\x2D\x94\x8D\xA0\x83\x89\x18\x14\x01\xBB\x91\x81\x99\x84\x37\xC3\x90\x9C\x37\x13\x8A\x7C\x97\x7F\x7E\x92\x63\xA6\x94\x99\x71\x43\x98\x85\x94\x24\x90\x9D\x92\x89\x99\x10\xB2\x79\x78\x0E\x90\x90\x02\x16\x93\xCA\x73\x91\x3C\x98\x9B\xE0\x71\x8E\x19\x93\x82\x1B\x9C\x2A\xE8\x88\x3E", @@ -21831,94 +23728,108 @@ namespace vl ParserText ***********************************************************************/ -const wchar_t parserTextBuffer[] = -L"\r\n" L"" -L"\r\n" L"//////////////////////////////////////////////////////////////////" -L"\r\n" L"// AST" -L"\r\n" L"//////////////////////////////////////////////////////////////////" -L"\r\n" L"" -L"\r\n" L"class Node" -L"\r\n" L"{" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class Text : Node" -L"\r\n" L"{" -L"\r\n" L"\ttoken content;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class CData : Node" -L"\r\n" L"{" -L"\r\n" L"\ttoken content (XmlUnescapeCData);" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class Attribute : Node" -L"\r\n" L"{" -L"\r\n" L"\ttoken name\t\t\t\t\t\t\t\t\t@Color(\"AttName\");" -L"\r\n" L"\ttoken value (XmlUnescapeAttributeValue)\t\t@Color(\"AttValue\");" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class Comment : Node" -L"\r\n" L"{" -L"\r\n" L"\ttoken content (XmlUnescapeComment);" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class Element : Node" -L"\r\n" L"{" -L"\r\n" L"\ttoken name\t\t\t\t\t\t\t\t\t@Color(\"TagName\");" -L"\r\n" L"\ttoken closingName\t\t\t\t\t\t\t@Color(\"TagName\");" -L"\r\n" L"\tAttribute[] attributes;" -L"\r\n" L"\tNode[] subNodes (XmlMergeTextFragment);" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class Instruction : Node" -L"\r\n" L"{" -L"\r\n" L"\ttoken name\t\t\t\t\t\t\t\t\t@Color(\"TagName\");" -L"\r\n" L"\tAttribute[] attributes;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class Document : Node" -L"\r\n" L"{" -L"\r\n" L"\tNode[] prologs;" -L"\r\n" L"\tElement rootElement;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"//////////////////////////////////////////////////////////////////" -L"\r\n" L"// Lexer" -L"\r\n" L"//////////////////////////////////////////////////////////////////" -L"\r\n" L"" -L"\r\n" L"token INSTRUCTION_OPEN = \"/\"\t\t@Color(\"Boundary\");" -L"\r\n" L"token COMPLEX_ELEMENT_OPEN = \"/\"\t\t@Color(\"Boundary\");" -L"\r\n" L"token ELEMENT_OPEN = \"/<\"\t\t\t\t@Color(\"Boundary\");" -L"\r\n" L"token ELEMENT_CLOSE = \"/>\"\t\t\t\t@Color(\"Boundary\");" -L"\r\n" L"token EQUAL = \"/=\";" -L"\r\n" L"" -L"\r\n" L"token NAME = \"[a-zA-Z0-9:._/-]+\"\t\t\t\t\t\t\t\t@ContextColor();" -L"\r\n" L"token ATTVALUE = \"\"\"[^<>\"\"]*\"\"|\'[^<>\']*\'\"\t\t\t\t\t\t@ContextColor();" -L"\r\n" L"token COMMENT = \"/]|-[^/->]|--[^>])*--/>\"\t\t\t@Color(\"Comment\");" -L"\r\n" L"token CDATA = \"/])*/]/]/>\";" -L"\r\n" L"token TEXT = \"([^<>=\"\"\' /r/n/ta-zA-Z0-9:._/-])+|\"\"|\'\";" -L"\r\n" L"" -L"\r\n" L"discardtoken SPACE = \"/s+\";" -L"\r\n" L"" -L"\r\n" L"//////////////////////////////////////////////////////////////////" -L"\r\n" L"// Rules" -L"\r\n" L"//////////////////////////////////////////////////////////////////" -L"\r\n" L"" -L"\r\n" L"rule Attribute XAttribute = NAME:name \"=\" ATTVALUE:value as Attribute;" -L"\r\n" L"rule Text XText = (NAME:content | EQUAL:content | ATTVALUE:content | TEXT:content) as Text;" -L"\r\n" L"rule CData XCData = CDATA:content as CData;" -L"\r\n" L"rule Comment XComment = COMMENT:content as Comment;" -L"\r\n" L"rule Element XElement = \"<\" NAME:name {XAttribute:attributes} (\"/>\" | \">\" {XSubNode:subNodes} \"\") as Element;" -L"\r\n" L"rule Node XSubNode = !XText | !XCData | !XComment | !XElement;" -L"\r\n" L"rule Instruction XInstruction = \"\" as Instruction;" -L"\r\n" L"rule Document XDocument = {XInstruction:prologs | XComment:prologs} XElement:rootElement as Document;" -; +const wchar_t* const parserTextBuffer[] = { + L"" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"// AST" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"" L"\r\n" +, L"class Node" L"\r\n" +, L"{" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class Text : Node" L"\r\n" +, L"{" L"\r\n" +, L"\ttoken content;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class CData : Node" L"\r\n" +, L"{" L"\r\n" +, L"\ttoken content (XmlUnescapeCData);" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class Attribute : Node" L"\r\n" +, L"{" L"\r\n" +, L"\ttoken name\t\t\t\t\t\t\t\t\t@Color(\"AttName\");" L"\r\n" +, L"\ttoken value (XmlUnescapeAttributeValue)\t\t@Color(\"AttValue\");" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class Comment : Node" L"\r\n" +, L"{" L"\r\n" +, L"\ttoken content (XmlUnescapeComment);" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class Element : Node" L"\r\n" +, L"{" L"\r\n" +, L"\ttoken name\t\t\t\t\t\t\t\t\t@Color(\"TagName\");" L"\r\n" +, L"\ttoken closingName\t\t\t\t\t\t\t@Color(\"TagName\");" L"\r\n" +, L"\tAttribute[] attributes;" L"\r\n" +, L"\tNode[] subNodes (XmlMergeTextFragment);" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class Instruction : Node" L"\r\n" +, L"{" L"\r\n" +, L"\ttoken name\t\t\t\t\t\t\t\t\t@Color(\"TagName\");" L"\r\n" +, L"\tAttribute[] attributes;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class Document : Node" L"\r\n" +, L"{" L"\r\n" +, L"\tNode[] prologs;" L"\r\n" +, L"\tElement rootElement;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"// Lexer" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"" L"\r\n" +, L"token INSTRUCTION_OPEN = \"/\"\t\t@Color(\"Boundary\");" L"\r\n" +, L"token COMPLEX_ELEMENT_OPEN = \"/\"\t\t@Color(\"Boundary\");" L"\r\n" +, L"token ELEMENT_OPEN = \"/<\"\t\t\t\t@Color(\"Boundary\");" L"\r\n" +, L"token ELEMENT_CLOSE = \"/>\"\t\t\t\t@Color(\"Boundary\");" L"\r\n" +, L"token EQUAL = \"/=\";" L"\r\n" +, L"" L"\r\n" +, L"token NAME = \"[a-zA-Z0-9:._/-]+\"\t\t\t\t\t\t\t\t@ContextColor();" L"\r\n" +, L"token ATTVALUE = \"\"\"[^<>\"\"]*\"\"|\'[^<>\']*\'\"\t\t\t\t\t\t@ContextColor();" L"\r\n" +, L"token COMMENT = \"/]|-[^/->]|--[^>])*--/>\"\t\t\t@Color(\"Comment\");" L"\r\n" +, L"token CDATA = \"/])*/]/]/>\";" L"\r\n" +, L"token TEXT = \"([^<>=\"\"\' /r/n/ta-zA-Z0-9:._/-])+|\"\"|\'\";" L"\r\n" +, L"" L"\r\n" +, L"discardtoken SPACE = \"/s+\";" L"\r\n" +, L"" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"// Rules" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"" L"\r\n" +, L"rule Attribute XAttribute = NAME:name \"=\" ATTVALUE:value as Attribute;" L"\r\n" +, L"rule Text XText = (NAME:content | EQUAL:content | ATTVALUE:content | TEXT:content) as Text;" L"\r\n" +, L"rule CData XCData = CDATA:content as CData;" L"\r\n" +, L"rule Comment XComment = COMMENT:content as Comment;" L"\r\n" +, L"rule Element XElement = \"<\" NAME:name {XAttribute:attributes} (\"/>\" | \">\" {XSubNode:subNodes} \"\") as Element;" L"\r\n" +, L"rule Node XSubNode = !XText | !XCData | !XComment | !XElement;" L"\r\n" +, L"rule Instruction XInstruction = \"\" as Instruction;" L"\r\n" +, L"rule Document XDocument = {XInstruction:prologs | XComment:prologs} XElement:rootElement as Document;" L"\r\n" +}; +const vint lengthTextBuffer[] = { + 2, 68, 8, 68, 2, 12, 3, 3, 2, 19, 3, 17, 3, 2, 20, 3, 36, 3, 2, 24, 3, 40, 63, 3, 2, 22, 3, 38, 3, 2, 22, 3 +, 40, 45, 26, 42, 3, 2, 26, 3, 40, 26, 3, 2, 23, 3, 18, 23, 3, 2, 68, 10, 68, 2, 55, 55, 58, 58, 50, 51, 21, 2, 58, 65 +, 75, 63, 56, 2, 29, 2, 68, 10, 68, 2, 72, 93, 45, 53, 134, 64, 93, 103 +}; +const vint lengthTextBufferTotal = 2487; vl::WString XmlGetParserTextBuffer() { - return parserTextBuffer; + vl::collections::Array textBuffer(lengthTextBufferTotal + 1); + wchar_t* reading = &textBuffer[0]; + for(vint i = 0; i < sizeof(parserTextBuffer) / sizeof(*parserTextBuffer); i++) + { + memcpy(reading, parserTextBuffer[i], lengthTextBuffer[i] * sizeof(wchar_t)); + reading += lengthTextBuffer[i]; + } + *reading = 0; + return &textBuffer[0]; } /*********************************************************************** @@ -21929,7 +23840,7 @@ const vint parserBufferLength = 4440; // 18926 bytes before compressing const vint parserBufferBlock = 1024; const vint parserBufferRemain = 344; const vint parserBufferRows = 5; -const char* parserBuffer[] = { +const char* const parserBuffer[] = { "\x00\x0E\x00\x02\x83\x80\x07\x7D\x00\x82\x03\xFF\x45\x08\x82\x83\x86\x81\x21\x6F\x6C\x2F\x32\x37\x84\x87\x02\x86\x00\x17\x82\x81\x24\x3C\x3A\x27\x30\x6D\x65\x06\x98\x8A\x80\x8E\x86\x00\x10\x92\x94\x98\x88\x04\x97\x80\x8E\x74\x56\x21\x2C\x35\x3A\x91\x8A\x84\x25\x8C\xA7\x89\x93\x8F\x98\x82\x8D\x08\xC0\x94\x21\x37\x37\x8D\x91\x91\x0C\xB9\x88\x9B\x91\x8D\x9C\x8C\xA0\x3F\x83\x83\xA5\xA0\x96\x98\x93\x93\x04\xCC\xAA\x9E\x93\x80\xA9\xAE\xA9\x44\xC6\x96\xA9\xA8\xAB\x82\xAC\xA7\x0C\xAD\xA9\xA3\x82\x27\x35\x3A\x37\x64\x61\x32\x39\x38\xA0\x9D\xB3\x86\x03\xBC\xAB\x8B\xBC\xB8\x01\xB7\xB7\x71\xF3\xB5\xA4\x8A\xA1\xAD\xBD\xA6\x7B\x88\xAA\xAA\xCC\xB6\xB4\xB8\xB9\x74\xDC\x82\x85\xC6\xB7\xC3\xAC\x97\x7D\xFF\x8F\xC2\xC2\xCD\x83\xBA\x00\x67\x89\xC4\x8B\xC3\xD5\xC4\xC0\xC8\x83\x89\x9F\xC1\xDD\xCC\xD3\x81\xC5\x9A\x81\xD1\xC4\x9C\x00\x8D\xDB\x87\x6F\x6E\x34\x25\x38\x3C\x3A\xBC\x8C\x05\x9D\xFF\x77\xD8\x84\xE0\x88\xDD\xBC\xBE\xC8\xC0\xE9\xD3\xCB\xD4\xCB\x68\xC1\x8F\xA7\xCD\x31\x92\xDC\xD7\x02\x89\x18\x9A\xEB\x8D\x8E\x39\x34\x62\x75\x3B\xDF\x74\xF5\xF0\xF3\xE7\x0F\xC4\x21\x34\x31\x36\xF2\xF2\xAF\x02\xC0\x90\x95\xE5\x32\xDE\xF7\xF2\xD8\x80\x0B\xC4\x2F\x33\x31\x3A\xEB\x74\x37\x74\x78\x7C\x19\x43\x45\x10\x1B\x65\x00\x82\x83\x3F\x0B\x18\x4D\x82\x40\x49\x2E\x13\x1C\x1D\x72\x35\x13\x18\x1D\x69\x39\x6B\x80\x01\x18\x5C\x82\x42\x13\x6F\x24\x12\x4A\x80\x1E\x88\x45\x88\x15\xC9\x4B\x8D\x03\x76\x2C\x9D\x74\x84\x78\xE2\x65\x15\x88\x41\x25\xAE\x15\x54\x70\xDC\x48\x49\x8C\x4C\xDF\x61\x7B\x6C\x7A\x00\x36\x13\x4D\x4D\x9D\x40\x93\x12\x7A\xEC\x44\x80\x53\x18\xB9\x7B\x66\x7E\x80\x4A\x94\x70\x81\x94\x02\x4C\x98\x73\x93\xF7\x79\x7B\x7D\x7F\xFF\x75\x74\x1C\x95\x00\x30\x12\x1D\x53\x67\x33\x1B\x82\x96\x03\x7C\x7E\x7C\x80\x0F\x88\x4D\x9B\x98\x6F\x34\x17\x81\x82\x5E\x8B\x80\x9B\x9C\x00\x8A\x08\x46\x9E\x02\x6B\x7F\x8A\x8F\x65\x26\x90\x97\x74\x02\x78\x9E\x95\x9B\x04\x6D\x93\x1A\x44\x73\x29\x1E\x18\x55\x21\x43\x04\xA2\x74\x85\x88\x80\x83\x8C\x03\x75\x85\x56\x00\x93\x91\x55\xA4\x9D\xD7\x58\x60\x03\x1C\x75\x22\x10\x8A\x88\x82\xB7\x78\xA3\x40\x6D\x91\x83\x85\x85\x17\x99\x8E\x18\x9F\x08\x74\xAE\x9D\x8F\x31\xA9\xAE\x7B\xAA\x02\x6D\xA2\x84\x85\x16\x98\x89\x6C\xA6\x02\x5A\xA1\x48\xB1\x00\x08\xB7\x89\x72\x60\x96\x9E\x91\x80\x02\x90\x08\x45\x0C\x18\x52\xB0\x73\xB5\x38\x4B\x82\x80\xB6\x49\x5A\xB7\x7C\xB7\xD9\x9E\xB6\x78\xB8\x84\x62\xB6\x7A\xB5\x08\x68\xB9\x12\x13\x53\x14\x12\x15\x15\x43\x14\x19\x13\x13\x4E\x1F\x1F\x10\x14\x45\x0E\x1A\xB3\x40\x2F\x3C\x0F\x0B\x0F\xC0\x5F\x61\x04\x46\x03\xD0\x8C\xBA\xBB\xF0\xB2\xB4\xBF\x17\x43\x0C\x1F\x13\x14\x45\x3B\xB2\x43\xBF\x2F\x3E\x0D\x66\x01\x18\x54\x09\xC5\x5E\x4F\x0D\x10\x14\x13\x45\x18\x1F\x15\x11\x20\xCD\x19\xBC\x15\xF6\xB8\xBA\xBD\x87\xFC\xBE\xBF\x08\xA7\x16\x5B\xCC\x42\xC6\x02\x53\x1B\xBB\x11\x20\xE3\xC5\xCB\xC9\x0C\xCE\xC0\xC6\xC4\x00\x2F\x02\xD2\x0F\x92\xBD\x54\x40\x71\x47\xC6\x8B\xCE\x13\x28\xF7\xB9\xBC\xCC\x08\x50\xDD\xBC\xB2\x39\x84\x4B\x88\x43\x57\xC0\x04\xC9\x11\x26\xCC\xDD\xCF\xC3\x45\x10\xD4\x42\xD4\x3E\x1F\x64\xAE\x61\x3A\x46\x81\x15\x15\x41\x0C\x12\xDB\x40\x52\xFD\x08\xC5\xB7\xF7\x40\xDE\x11\x10\x26\xC5\xC8\x42\xDE\x5B\x21\x1D\x0A\x1E\x41\x2D\x0A\x14\x0C\x2D\x39\x0A\x0E\x0B\x5F\x2F\x0D\x09\x17\x2B\x04\x8C\xAE\x7E\xA2\x81\x14\x14\x15\x56\x2D\xD5\x15\x11\x13\x18\x49\xE6\x40\x22\x1B\x1E\x14\x0F\x3E\x22\x0D\x16\x0A\x22\x3C\x17\x0A\xE7\xA0\xE7\x03\xEB\x09\xF9\x48\xDF\x55\xCC\x0F\x5D\xCD\xD4\x15\x22\x18\x45\xEF\xC4\xFE\xA1\x0D\x09\x0B\x28\x1E\xEA\xE2\x0F\x5D\x3C\x1D\x0A\xEF\x2D\x00\xF2\xF3\xF0\x5E\x00\xF9\x0A\x0A\xBB\xD5\xC5\xD7\x40\x59\xE8\xDB\x51\x5E\x44\x12\xE1\x10\x0B\x18\x58\xF8\xEF\x0B\x21\x2F\x0B\x17\x91\xD6\xDE\xFD\xEE\x17\x2F\x1D\x11\xF1\xF9\xBE\xE6\xFC\x1D\xF9\xE8\xC9\xFD\x17\xF2\xEC\xDD\x15\xC7\xD9\x09\x64\x8C\xCA\x40\x54\x21\xC4\x14\x09\x18\x7C\xF2\x43\xF8\xA0\x7D\x06\x08\x27\x00\x05\x17\x32\x0F\x05\x6E\x0F\x04\x7B\x7F\x61\x71\xC1\x45\x77\x70\x89\x6B\x71\x0A\x2B\x0C\x0F\xD2\x67\x07\x71\x0B\x45\x4A\x49\x03\x23\x0A\x28\x01\x0B\x08\x45\x05\x68\x42\x22\x8F\x05\x39\x2B\x06\x75\x93\x22\x40\xB5\x0C\x24\x7E\x81\x34\x50\x0B\x3C\x50\x47\x6E\x34\x68\x20\x1A\xB0\x86\x3B\x32\x85\x0E\x0B\x52\x0F\x0D\x38\x53\x0C\x3D\x72\x14\x0F\x03\x18\x23\x88", "\x81\x00\x08\x04\x24\x1C\x07\x0D\xFF\x41\x46\x1F\x2D\x80\x00\x2F\x91\x84\xA0\x68\x54\x20\x74\x4B\x88\x57\xBB\x2E\x07\x0F\xF2\x24\x0F\x80\x0C\x26\x8B\x00\x07\x8A\x12\xD2\x8D\x89\x27\x91\x88\x87\x80\x48\x84\x00\x44\x37\x8B\x1C\xAE\x01\x06\x3C\x18\x21\x1C\x82\x23\x8C\x34\x8D\x8A\x07\x20\x17\x6E\xC9\x20\x08\x8E\x1B\x61\x27\x88\x22\x02\x80\x08\x12\x74\x72\xCB\x45\x0C\x8F\x20\x02\x48\x4D\x65\x00\x05\x30\x33\x0B\x90\x76\x9B\x36\x19\x83\x2D\x8D\x34\xB6\x34\x92\x64\x99\x8A\x0C\x73\x88\x20\x4E\xB5\x8C\x89\xBB\x3E\x04\x1E\xFA\x87\x91\x3E\x95\x28\x04\x81\x82\x07\x11\x84\x95\x72\x26\x17\x70\x91\x8A\x95\x25\x23\x8F\x99\x93\x32\x13\x92\x20\x95\x91\x46\x1A\xEC\x85\x96\x17\x33\x04\x93\x04\x3E\x91\x2E\xA1\x93\x94\xBC\x65\x90\x04\x7E\x8C\x91\x2A\x83\x93\x73\x56\xAF\x90\x8F\xB1\x8C\x92\x23\x90\x90\x95\x32\x00\x0F\x96\x00\x03\x99\x19\x12\x08\x22\x6E\xB8\x95\x97\x3C\x91\x4D\x11\x70\x25\x88\x84\x25\x99\x89\xDA\x9E\x04\x08\x40\x08\x4C\x5C\x86\x52\x37\xD8\x98\x0B\x3B\xF4\x0E\x04\x19\x0E\x02\x32\xF7\x94\x8E\x3C\x96\x5E\x4A\x51\xA8\x94\x07\x22\x19\x8E\x31\x88\x99\x99\x23\xBB\x08\x04\xDA\x88\x93\xAD\x39\x8F\x91\x3E\x20\x00\x05\xA8\x95\x61\x40\xFC\x08\x95\xD0\x60\x07\xA0\x58\x13\x09\xA9\x27\x5C\x90\x3C\xA4\x56\x54\x21\x41\x50\x08\x0E\xA2\x04\x7F\x41\xA4\x94\x88\x8B\x53\x1B\x0D\x5F\x50\xB1\x15\xA1\xA0\x29\x13\x94\x08\x73\x9D\x00\x05\x0A\x8B\x9E\xFE\x85\xA7\x49\x83\xA6\x95\x90\x2B\x98\xA3\xB5\x8A\xA1\x24\xA2\xAE\xA0\x88\xA2\x02\xA2\x20\x14\xA2\x08\x16\xA8\xA2\x8D\xA0\xA2\x44\x88\x9F\xA0\x47\x8D\xAF\x9F\x17\x3B\xA3\x8F\x78\x8A\xA4\x4B\x90\x5A\x98\x8B\xB1\xA3\x9A\xF3\x9B\x94\x25\xAE\x50\x59\x58\x79\x30\x8C\x04\x20\x8C\x16\x64\xA0\x56\x61\x6E\x0D\x9E\xA4\x18\x21\x5C\xFA\x9C\xAD\x60\x72\x51\xA7\x3C\x1F\x07\x55\xC7\x95\xA1\x8B\x88\xA1\xA8\x78\x8B\xA0\xA0\x54\xA2\x05\x1F\x16\xA3\x9A\x75\xA6\xAE\x1B\x35\xAA\x89\xC4\xAE\xA8\xAF\x7A\xA2\xA0\x56\xC8\x97\x94\x20\x00\xAB\xA8\x42\xB5\x98\x61\x86\xB1\xA0\xC4\xBF\x55\xAD\xB2\x4D\x9D\x36\xF3\x91\x9F\x79\xAE\x04\x06\xF9\x88\x21\x6A\xB7\xAC\x9E\xDD\x38\xAB\xAF\x04\xA7\x97\x65\xD5\x99\xB2\x2C\x84\xAF\xA1\x11\xB6\xA2\x52\xA1\x76\xA0\x84\x8E\xAC\xA3\x51\xBB\xA1\x48\x84\xB6\xA4\xC9\x87\x9A\xAB\x8E\x5C\xAB\x4B\xA0\x0F\xAB\x47\xB4\xA6\xA6\xFB\x80\x54\x1D\x2F\xB6\xB9\xD8\xBE\xA3\xB6\xB6\xB5\xB4\x43\xA3\xA8\xB7\xA3\xBA\xB3\xB9\x96\xBE\xB6\x70\xD0\xAE\xA3\xF1\xB7\xB5\xA4\x56\xB5\xB9\x56\x8C\x59\xB8\x97\x8B\xA8\xA6\x32\xB3\x9E\x68\xD1\xB9\x4F\x3D\x54\x96\xB4\x33\x06\x10\x46\x7A\xBA\x9E\x9C\xB8\x8A\xA7\xEA\xB4\xB3\x75\xFF\xA8\xB3\xC0\x83\xAC\xAA\x46\xA8\xAB\x6E\x81\xAD\xA8\xF3\x81\xBF\xA9\xE7\xA5\xB8\x4A\xEB\xBB\xA5\xF6\xA7\x97\xBD\xCC\xB1\xBD\x6B\xF4\x00\x08\xB1\xB8\x96\xB1\xB2\x48\xAF\x40\x6A\xA0\xC5\xDC\x3E\x91\x0A\x18\x28\xC4\x5D\x9F\xB6\xAF\xDC\x10\xB0\xB6\x3D\xAC\x90\x76\xB9\x8A\xBB\xC1\x9C\xBD\xB0\x87\xAF\x91\x89\xEE\x0C\x9C\x51\x74\xBE\x4B\xA5\xBB\xC2\x0B\x36\x0C\xBE\x84\x05\xCC\xB5\xD2\xB4\xBB\x84\x82\xC2\xC6\x02\xF4\xB6\xC0\x9A\xBC\xB9\x82\xDF\xB8\xC3\x06\xD0\xC7\xC1\x53\xB7\xC6\x49\xC7\x8B\xC8\xE4\xAD\xA7\xC2\x5E\xBA\xC2\x74\xC0\x48\x0A\x14\x7D\x30\x4C\x65\xC9\x3B\x1B\xD8\x08\x22\x36\xFA\x9E\xCC\xD3\xA5\x9B\x64\xCE\x5E\x4B\xA4\xB3\xA3\x6D\x6D\x69\xA5\x93\x75\xC4\xA2\x56\x86\x92\xCF\x57\x54\x0E\x9D\xF9\x75\xCC\x40\xCF\x5A\xA6\x70\xC0\x0B\xDC\x08\x2B\xD0\x2C\x07\x4B\x3D\x61\x13\xBF\xA3\xEC\x3F\x8D\x11\x18\x26\xD2\xFA\x93\xD1\x18\x7E\x90\x7C\x2A\x01\x0E\xD0\x75\xD3\x9A\xA6\xBD\xCD\x2E\x47\xEF\x0C\x3E\xF0\x96\xBC\x2E\xF3\x30\x41\x37\xA9\x00\x23\xAF\xD9\xD3\xA9\x80\x4C\xD2\xD9\x67\x60\xD4\xBA\x32\xA4\xAB\xDE\x44\xD4\xC6\x2E\x9B\xC3\x41\xD2\xBB\x1B\xC5\xC4\x21\x23\xFF\xC6\xB5\xFF\xA0\xA0\x97\xBC\xAC\xC8\xBF\x89\xA0\xCA\xB6\xA8\xC1\x6E\x93\xAB\xB8\x2B\xC0\xBD\xBC\x10\xC4\xB9\x7A\xDD\xCC\xBD\x2F\xFE\xA0\xC3\xCD\xB3\xA7\x86\xF3\xB3\x9E\x2A\x83\x26\x8A\xA6\xA1\x9E\x9C\x70\x21\x7A\xE8\x43\x20\x9D\x38\xAB\x9F\x7C\xBF\xB1\xA5\x78\xB4\xDA\x44\x6F\x95\x04\x46\x7A\xDA\x9F\x7B\xE5\x0E\x9F\x21\x09\xCD\x6F\x76\xC1\xE0\x4D\xC4\xE6\xD4\xA8\xC2\xD0\x45\x81\xE3\x9E\x20\x0F\x79\x3B\x94\x8A\x4D\x97\x3A\x3F\x71\x36\x58\x0A\xE2\xAD\xD1\x04\x18\x18\x2B\xE2\x7D\x98\xE5\x9F\x78\x98\xA3\x8E\x88\x92\x4C\x32\x4F\x94\xA2\x08\xE0\x40\xC9\xE3\x42\x23\x32", "\x5C\xBF\xD8\x82\xD8\x8C\x9C\x72\x4B\xC2\x99\x9F\xE2\x37\x1D\xD7\x93\x87\xAC\xCA\xB0\x1A\x84\x26\x86\x3B\xDB\x85\x0F\xEB\xD4\x0C\xBD\x44\x22\x6F\xE8\x9B\xC6\x3A\x8E\xED\x45\x6C\xB7\xE4\x0E\x15\xF1\xE0\x97\x2D\xD2\x07\x8E\xC8\x26\xEA\x4A\x8F\xEA\x3F\xE1\xBB\xAC\x9E\xEE\xAB\xE5\x26\xF6\xCD\xCA\xF5\xC8\x8F\x92\xED\xE4\xAA\x30\xE8\x93\xCC\xF3\x96\xE7\xA9\xDE\x4C\xDC\xC0\xCA\xD7\x68\xC2\xC7\x06\x62\xC3\x26\xD8\xFE\xBF\x9C\x8C\xCD\xD3\xC6\x40\x75\xC1\x57\x52\xD3\xDA\x9D\xD5\xC2\xBD\x2B\xD8\xD9\xCB\x24\xB2\xC0\xB3\xDE\xCC\xAA\x40\xA1\xC8\xAC\x1B\xC4\xCC\x9C\xED\xD2\x21\xAC\x42\xE4\x9E\xEA\xC3\x9C\x19\x58\x98\x9C\x38\xCB\xEB\xD1\x04\x2D\xD2\xA6\xA2\xC2\x20\xB5\x9A\xD2\xE8\xE2\x90\x2D\xD4\x82\x28\x9C\x4D\xCB\xEA\xD2\xB3\xDE\x4A\xB9\x82\x26\x8B\x5D\xFA\x30\xF5\x44\xF4\xF0\x00\x59\x6D\xF5\xD8\xEE\xB2\xDE\x3E\xDE\xDF\xEC\x80\x06\x8A\x7F\xF8\xF2\xF3\xBA\xFC\xF6\x12\xFE\xDB\xE9\x87\xC0\x01\x47\x17\xEE\xEE\x6E\x46\xE3\x20\xBD\x51\xFB\x4D\x5E\x47\xF8\x5C\x24\xF0\x21\x77\xD9\xEA\xFA\xD3\xAB\x9E\x87\xD9\x9B\xC6\xEE\xE4\xC6\xEB\xB2\x4F\x8E\x8A\x88\x2B\xFD\xC6\xA8\xFE\xC5\xC9\xDA\xAF\xB2\x93\xB9\x98\x67\xC0\xB5\x91\x07\xD7\xC4\x67\xB2\xAB\xC6\xC9\xC9\x3D\x9C\x04\x15\x4E\x97\x78\x7B\x5B\x41\x44\xD8\x47\x44\x9D\x79\x1C\x65\x3B\x41\xB8\x40\x67\xAB\x79\x4D\x70\x6A\x45\x40\x44\x07\xCE\x79\x23\x62\x47\x79\x3E\x00\x7A\x03\x12\x7A\x48\x21\x06\xC3\x75\x7B\x1D\x84\x80\x13\x8F\x80\x08\x8A\x44\xAE\x7A\x81\x02\x1C\x81\x90\x63\x7E\x8E\x61\x82\x05\x84\x07\x07\x80\x02\x26\x8D\x81\x3E\x00\x7B\x09\x7E\x4D\x08\x18\x83\x63\x77\x7B\xEA\x6F\x82\xC9\x73\x10\x25\x8B\x83\xD3\x56\x83\x00\x26\x7E\x94\x46\x7B\xF4\x4F\x82\xE3\x77\x81\x48\x85\x83\x3E\x63\x4F\x38\x84\x10\x3A\x89\x6E\x43\x7E\x83\x18\x19\x35\x41\x88\x53\x70\x72\x5D\x46\x8F\x6B\xC2\x6A\x84\x3A\x71\x46\x32\x80\x73\x4E\x85\x6A\xFE\x61\x85\x03\x1A\x83\xC6\x7D\x83\x13\x8F\x83\x46\x48\x44\xCB\x76\x5E\x65\x8E\x6B\xD9\x4E\x6F\x5D\x85\x87\xE6\x52\x81\x5C\x4B\x84\x63\x8C\x7C\x2C\x8B\x63\x16\x08\x11\x81\x8B\x73\xAF\x2D\x62\x6F\x5C\x86\x5C\x44\x7D\x02\x1A\x37\x41\x8A\x74\x7F\x8F\x7E\x6E\x08\x86\x02\x1A\x83\x41\x7F\x82\x1F\x80\x84\x63\x8A\x74\x15\x82\x75\xD8\x7A\x1B\x9B\x38\x10\x9F\x87\x7D\x13\x78\x79\x55\x83\x81\x77\x81\x84\x5A\x7B\x89\xB8\x4F\x74\x00\x83\x10\x02\x8F\x74\x7A\x81\x44\x6E\x82\x86\xDF\x7D\x89\xD3\x51\x4F\xB5\x4C\x82\xBD\x44\x03\xC0\x43\x10\xC2\x45\x4B\xFE\x4B\x64\xF5\x7B\x4C\x7E\x6E\x4A\xC7\x41\x4D\x32\x55\x4B\x40\x0E\x7F\x67\x63\x29\x03\x82\x03\x6E\x68\x10\xD1\x8A\x44\x9E\x72\x67\xC7\x5B\x67\xB9\x64\x51\x45\x08\x67\x4C\x08\x6B\x0A\x7C\x4C\x85\x46\x8C\xDE\x83\x68\xFA\x33\x8E\xD3\x49\x68\x28\x80\x00\x2A\x8C\x1E\x92\x61\x82\x32\x08\x69\x08\x10\x8F\x33\x80\x69\x9C\x65\x3D\x9E\x66\x8E\x8F\x43\x6A\x44\x80\x64\x72\x72\x84\xF5\x41\x6B\x08\x10\x90\x26\x8E\x7B\x71\x60\x02\x43\x06\x6B\x4C\x38\x8F\x06\x94\x90\xBD\x65\x1A\x5E\x85\x5F\x2C\x47\x5F\x42\x65\x03\x76\x72\x10\x78\x7B\x61\x4A\x6C\x6C\xF5\x7D\x77\x31\x2F\x77\xBB\x12\x6D\xDE\x54\x6D\x84\x79\x51\x0E\x67\x78\xC3\x5A\x65\xDB\x6B\x78\xDD\x6A\x5C\xE0\x62\x66\x00\x29\x73\x0C\x1C\x46\xE5\x78\x11\xE7\x75\x88\x8A\x57\x5A\xEB\x74\x10\xED\x7D\x75\x36\x9F\x58\xF1\x7B\x77\x1B\x9E\x64\xD9\x50\x6D\xDB\x54\x52\xFB\x7E\x59\x3D\x92\x2B\x4C\x7C\x10\xD0\x7F\x74\x0F\x82\x8A\xAD\x63\x03\x56\x74\x10\x58\x70\x95\x20\x7E\x6C\x23\x75\x76\x2C\x7F\x06\x2E\x78\x72\x48\x80\x76\x67\x7F\x72\x6C\x72\x73\x43\x7C\x76\xD3\x4F\x74\x0D\x93\x10\xB8\x83\x54\xAA\x80\x00\xB5\x44\x2E\xF5\x37\x1F\xCC\x84\x07\x40\x30\x67\xC0\x1C\x01\x24\x12\x20\xE9\x8B\x8E\x61\x06\x24\x1D\x80\x1C\x1E\x09\x97\x59\x2E\x63\x48\x80\x26\x48\x80\x1C\x20\x02\x98\xEE\x1B\x85\x53\x23\x29\xF3\x40\x1C\xB7\x31\x2E\x8B\x91\x7C\xE6\x56\x37\x21\x50\x1C\xFE\x32\x99\xE6\x1F\x88\x49\x99\x1B\x0F\x8B\x63\xC0\x16\x02\x8A\x96\x1E\x6D\x96\x95\xA1\x2D\x17\x4F\x70\x1C\x28\x03\x9A\xE5\x10\x01\x22\x49\x10\xC2\x10\x1C\x9D\x10\x97\xB4\x95\x9B\x38\x12\x1C\x8F\x3F\x36\xB6\x90\x00\x9D\x13\x9B\xF7\x36\x22\x03\x19\x4C\xC0\x1B\x96\xD5\x40\x97\xCD\x15\x10\x4F\x4F\x9A\xBB\x9B\x9C\x24\x12\x1C\x6A\x48\x2C\xB5\x9D\x9B\xB4\x90\x24\xD1\x43\x9C\xFD\x8F\x96\xB0\x9D\x9C\x0C\x8C\x9C\xBC\x9C\x9D\x10\x7C\x94\x2F\x13\x54\xD6\x91\x91\xDF\x43\x54\xFF\x0A\x9B\x05\x18\x9E", @@ -22232,2655 +24143,6 @@ Table Generation } -/*********************************************************************** -.\REFLECTION\GUITYPEDESCRIPTORPREDEFINED.CPP -***********************************************************************/ - -namespace vl -{ - using namespace collections; - - namespace reflection - { - namespace description - { - -/*********************************************************************** -IValueEnumerable -***********************************************************************/ - - Ptr IValueEnumerable::Create(collections::LazyList values) - { - Ptr> enumerable = new LazyList(values); - return new ValueEnumerableWrapper>>(enumerable); - } - -/*********************************************************************** -IValueList -***********************************************************************/ - - Ptr IValueList::Create() - { - return Create(LazyList()); - } - - Ptr IValueList::Create(Ptr values) - { - return Create(GetLazyList(values)); - } - - Ptr IValueList::Create(collections::LazyList values) - { - Ptr> list = new List; - CopyFrom(*list.Obj(), values); - return new ValueListWrapper>>(list); - } - -/*********************************************************************** -IObservableList -***********************************************************************/ - - class ReversedObservableList : public ObservableListBase - { - protected: - - void NotifyUpdateInternal(vint start, vint count, vint newCount)override - { - if (observableList) - { - observableList->ItemChanged(start, count, newCount); - } - } - public: - IValueObservableList* observableList = nullptr; - }; - - Ptr IValueObservableList::Create() - { - return Create(LazyList()); - } - - Ptr IValueObservableList::Create(Ptr values) - { - return Create(GetLazyList(values)); - } - - Ptr IValueObservableList::Create(collections::LazyList values) - { - auto list = MakePtr(); - CopyFrom(*list.Obj(), values); - auto wrapper = MakePtr>>(list); - list->observableList = wrapper.Obj(); - return wrapper; - } - -/*********************************************************************** -IValueDictionary -***********************************************************************/ - - Ptr IValueDictionary::Create() - { - Ptr> dictionary = new Dictionary; - return new ValueDictionaryWrapper>>(dictionary); - } - - Ptr IValueDictionary::Create(Ptr values) - { - Ptr> dictionary = new Dictionary; - CopyFrom(*dictionary.Obj(), GetLazyList(values)); - return new ValueDictionaryWrapper>>(dictionary); - } - - Ptr IValueDictionary::Create(collections::LazyList> values) - { - Ptr> dictionary = new Dictionary; - CopyFrom(*dictionary.Obj(), values); - return new ValueDictionaryWrapper>>(dictionary); - } - -/*********************************************************************** -IValueException -***********************************************************************/ - - class DefaultValueException : public Object, public IValueException - { - protected: - WString message; - - public: - DefaultValueException(const WString& _message) - :message(_message) - { - } - -#pragma push_macro("GetMessage") -#if defined GetMessage -#undef GetMessage -#endif - WString GetMessage()override - { - return message; - } -#pragma pop_macro("GetMessage") - - bool GetFatal()override - { - return false; - } - - Ptr GetCallStack()override - { - return nullptr; - } - }; - - Ptr IValueException::Create(const WString& message) - { - return new DefaultValueException(message); - } - -/*********************************************************************** -CoroutineResult -***********************************************************************/ - - Value CoroutineResult::GetResult() - { - return result; - } - - void CoroutineResult::SetResult(const Value& value) - { - result = value; - } - - Ptr CoroutineResult::GetFailure() - { - return failure; - } - - void CoroutineResult::SetFailure(Ptr value) - { - failure = value; - } - -/*********************************************************************** -EnumerableCoroutine -***********************************************************************/ - - class CoroutineEnumerator : public Object, public virtual EnumerableCoroutine::IImpl, public Description - { - protected: - EnumerableCoroutine::Creator creator; - Ptr coroutine; - Value current; - vint index = -1; - Ptr joining; - - public: - CoroutineEnumerator(const EnumerableCoroutine::Creator& _creator) - :creator(_creator) - { - } - - Value GetCurrent()override - { - return current; - } - - vint GetIndex()override - { - return index; - } - - bool Next()override - { - if (!coroutine) - { - coroutine = creator(this); - } - - while (coroutine->GetStatus() == CoroutineStatus::Waiting) - { - if (joining) - { - if (joining->Next()) - { - current = joining->GetCurrent(); - index++; - return true; - } - else - { - joining = nullptr; - } - } - - coroutine->Resume(true, nullptr); - if (coroutine->GetStatus() != CoroutineStatus::Waiting) - { - break; - } - - if (!joining) - { - index++; - return true; - } - } - return false; - } - - void OnYield(const Value& value)override - { - current = value; - joining = nullptr; - } - - void OnJoin(Ptr value)override - { - if (!value) - { - throw Exception(L"Cannot join a null collection."); - } - current = Value(); - joining = value->CreateEnumerator(); - } - }; - - class CoroutineEnumerable : public Object, public virtual IValueEnumerable, public Description - { - protected: - EnumerableCoroutine::Creator creator; - - public: - CoroutineEnumerable(const EnumerableCoroutine::Creator& _creator) - :creator(_creator) - { - } - - Ptr CreateEnumerator()override - { - return new CoroutineEnumerator(creator); - } - }; - - void EnumerableCoroutine::YieldAndPause(IImpl* impl, const Value& value) - { - impl->OnYield(value); - } - - void EnumerableCoroutine::JoinAndPause(IImpl* impl, Ptr value) - { - impl->OnJoin(value); - } - - void EnumerableCoroutine::ReturnAndExit(IImpl* impl) - { - } - - Ptr EnumerableCoroutine::Create(const Creator& creator) - { - return new CoroutineEnumerable(creator); - } - -/*********************************************************************** -IAsync -***********************************************************************/ - - class DelayAsync : public Object, public virtual IAsync, public Description - { - protected: - SpinLock lock; - vint milliseconds; - AsyncStatus status = AsyncStatus::Ready; - - public: - DelayAsync(vint _milliseconds) - :milliseconds(_milliseconds) - { - } - - AsyncStatus GetStatus()override - { - return status; - } - - bool Execute(const Func)>& _callback)override - { - SPIN_LOCK(lock) - { - if (status != AsyncStatus::Ready) return false; - status = AsyncStatus::Executing; - IAsyncScheduler::GetSchedulerForCurrentThread()->DelayExecute([async = Ptr(this), callback = _callback]() - { - if (callback) - { - callback(nullptr); - } - }, milliseconds); - } - return true; - } - }; - - Ptr IAsync::Delay(vint milliseconds) - { - return new DelayAsync(milliseconds); - } - -/*********************************************************************** -IFuture -***********************************************************************/ - - class FutureAndPromiseAsync : public virtual IFuture, public virtual IPromise, public Description - { - public: - SpinLock lock; - AsyncStatus status = AsyncStatus::Ready; - Ptr cr; - Func)> callback; - - void ExecuteCallbackAndClear() - { - status = AsyncStatus::Stopped; - if (callback) - { - callback(cr); - } - cr = nullptr; - callback = {}; - } - - template - bool Send(F f) - { - SPIN_LOCK(lock) - { - if (status == AsyncStatus::Stopped || cr) return false; - cr = MakePtr(); - f(); - if (status == AsyncStatus::Executing) - { - ExecuteCallbackAndClear(); - } - } - return true; - } - - AsyncStatus GetStatus()override - { - return status; - } - - bool Execute(const Func)>& _callback)override - { - SPIN_LOCK(lock) - { - if (status != AsyncStatus::Ready) return false; - callback = _callback; - if (cr) - { - ExecuteCallbackAndClear(); - } - else - { - status = AsyncStatus::Executing; - } - } - return true; - } - - Ptr GetPromise()override - { - return this; - } - - bool SendResult(const Value& result)override - { - return Send([=]() - { - cr->SetResult(result); - }); - } - - bool SendFailure(Ptr failure)override - { - return Send([=]() - { - cr->SetFailure(failure); - }); - } - }; - - Ptr IFuture::Create() - { - return new FutureAndPromiseAsync(); - } - -/*********************************************************************** -IAsyncScheduler -***********************************************************************/ - - class AsyncSchedulerMap - { - public: - Dictionary> schedulers; - Ptr defaultScheduler; - }; - - AsyncSchedulerMap* asyncSchedulerMap = nullptr; - SpinLock asyncSchedulerLock; - -#define ENSURE_ASYNC_SCHEDULER_MAP\ - if (!asyncSchedulerMap) asyncSchedulerMap = new AsyncSchedulerMap; - -#define DISPOSE_ASYNC_SCHEDULER_MAP_IF_NECESSARY\ - if (asyncSchedulerMap->schedulers.Count() == 0 && !asyncSchedulerMap->defaultScheduler)\ - {\ - delete asyncSchedulerMap;\ - asyncSchedulerMap = nullptr;\ - }\ - - void IAsyncScheduler::RegisterDefaultScheduler(Ptr scheduler) - { - SPIN_LOCK(asyncSchedulerLock) - { - ENSURE_ASYNC_SCHEDULER_MAP - CHECK_ERROR(!asyncSchedulerMap->defaultScheduler, L"IAsyncScheduler::RegisterDefaultScheduler()#A default scheduler has already been registered."); - asyncSchedulerMap->defaultScheduler = scheduler; - } - } - - void IAsyncScheduler::RegisterSchedulerForCurrentThread(Ptr scheduler) - { - SPIN_LOCK(asyncSchedulerLock) - { - ENSURE_ASYNC_SCHEDULER_MAP - CHECK_ERROR(!asyncSchedulerMap->schedulers.Keys().Contains(Thread::GetCurrentThreadId()), L"IAsyncScheduler::RegisterDefaultScheduler()#A scheduler for this thread has already been registered."); - asyncSchedulerMap->schedulers.Add(Thread::GetCurrentThreadId(), scheduler); - } - } - - Ptr IAsyncScheduler::UnregisterDefaultScheduler() - { - Ptr scheduler; - SPIN_LOCK(asyncSchedulerLock) - { - if (asyncSchedulerMap) - { - scheduler = asyncSchedulerMap->defaultScheduler; - asyncSchedulerMap->defaultScheduler = nullptr; - DISPOSE_ASYNC_SCHEDULER_MAP_IF_NECESSARY - } - } - return scheduler; - } - - Ptr IAsyncScheduler::UnregisterSchedulerForCurrentThread() - { - Ptr scheduler; - SPIN_LOCK(asyncSchedulerLock) - { - if (asyncSchedulerMap) - { - vint index = asyncSchedulerMap->schedulers.Keys().IndexOf(Thread::GetCurrentThreadId()); - if (index != -1) - { - scheduler = asyncSchedulerMap->schedulers.Values()[index]; - asyncSchedulerMap->schedulers.Remove(Thread::GetCurrentThreadId()); - } - DISPOSE_ASYNC_SCHEDULER_MAP_IF_NECESSARY - } - } - return scheduler; - } - -#undef ENSURE_ASYNC_SCHEDULER_MAP -#undef DISPOSE_ASYNC_SCHEDULER_MAP_IF_NECESSARY - - Ptr IAsyncScheduler::GetSchedulerForCurrentThread() - { - Ptr scheduler; - SPIN_LOCK(asyncSchedulerLock) - { - CHECK_ERROR(asyncSchedulerMap != nullptr, L"IAsyncScheduler::GetSchedulerForCurrentThread()#There is no scheduler registered for the current thread."); - vint index = asyncSchedulerMap->schedulers.Keys().IndexOf(Thread::GetCurrentThreadId()); - if (index != -1) - { - scheduler = asyncSchedulerMap->schedulers.Values()[index]; - } - else if (asyncSchedulerMap->defaultScheduler) - { - scheduler = asyncSchedulerMap->defaultScheduler; - } - else - { - CHECK_FAIL(L"IAsyncScheduler::GetSchedulerForCurrentThread()#There is no scheduler registered for the current thread."); - } - } - return scheduler; - } - -/*********************************************************************** -AsyncCoroutine -***********************************************************************/ - - class CoroutineAsync : public Object, public virtual AsyncCoroutine::IImpl, public Description - { - protected: - Ptr coroutine; - AsyncCoroutine::Creator creator; - Ptr scheduler; - Func)> callback; - Value result; - - public: - CoroutineAsync(AsyncCoroutine::Creator _creator) - :creator(_creator) - { - } - - AsyncStatus GetStatus()override - { - if (!coroutine) - { - return AsyncStatus::Ready; - } - else if (coroutine->GetStatus() != CoroutineStatus::Stopped) - { - return AsyncStatus::Executing; - } - else - { - return AsyncStatus::Stopped; - } - } - - bool Execute(const Func)>& _callback)override - { - if (coroutine) return false; - scheduler = IAsyncScheduler::GetSchedulerForCurrentThread(); - callback = _callback; - coroutine = creator(this); - OnContinue(nullptr); - return true; - } - - Ptr GetScheduler()override - { - return scheduler; - } - - void OnContinue(Ptr output)override - { - scheduler->Execute([async = Ptr(this), output]() - { - async->coroutine->Resume(false, output); - if (async->coroutine->GetStatus() == CoroutineStatus::Stopped && async->callback) - { - auto result = MakePtr(); - if (async->coroutine->GetFailure()) - { - result->SetFailure(async->coroutine->GetFailure()); - } - else - { - result->SetResult(async->result); - } - async->callback(result); - } - }); - } - - void OnReturn(const Value& value)override - { - result = value; - } - }; - - void AsyncCoroutine::AwaitAndRead(IImpl* impl, Ptr value) - { - value->Execute([async = Ptr(impl)](auto output) - { - async->OnContinue(output); - }); - } - - void AsyncCoroutine::ReturnAndExit(IImpl* impl, const Value& value) - { - impl->OnReturn(value); - } - - Ptr AsyncCoroutine::Create(const Creator& creator) - { - return new CoroutineAsync(creator); - } - void AsyncCoroutine::CreateAndRun(const Creator& creator) - { - MakePtr(creator)->Execute( - [](Ptr cr) - { - if (cr->GetFailure()) - { -#pragma push_macro("GetMessage") -#if defined GetMessage -#undef GetMessage -#endif - throw Exception(cr->GetFailure()->GetMessage()); -#pragma pop_macro("GetMessage") - } - }); - } - -/*********************************************************************** -Libraries -***********************************************************************/ - - namespace system_sys - { - class ReverseEnumerable : public Object, public IValueEnumerable - { - protected: - Ptr list; - - class Enumerator : public Object, public IValueEnumerator - { - protected: - Ptr list; - vint index; - - public: - Enumerator(Ptr _list) - :list(_list), index(_list->GetCount()) - { - } - - Value GetCurrent() - { - return list->Get(index); - } - - vint GetIndex() - { - return list->GetCount() - 1 - index; - } - - bool Next() - { - if (index <= 0) return false; - index--; - return true; - } - }; - - public: - ReverseEnumerable(Ptr _list) - :list(_list) - { - } - - Ptr CreateEnumerator()override - { - return MakePtr(list); - } - }; - } - - Ptr Sys::ReverseEnumerable(Ptr value) - { - auto list = value.Cast(); - if (!list) - { - list = IValueList::Create(GetLazyList(value)); - } - return new system_sys::ReverseEnumerable(list); - } - -#define DEFINE_COMPARE(TYPE)\ - vint Sys::Compare(TYPE a, TYPE b)\ - {\ - auto result = TypedValueSerializerProvider::Compare(a, b);\ - switch (result)\ - {\ - case IBoxedValue::Smaller: return -1;\ - case IBoxedValue::Greater: return 1;\ - case IBoxedValue::Equal: return 0;\ - default:\ - CHECK_FAIL(L"Unexpected compare result.");\ - }\ - }\ - - REFLECTION_PREDEFINED_PRIMITIVE_TYPES(DEFINE_COMPARE) - DEFINE_COMPARE(DateTime) -#undef DEFINE_COMPARE - -#define DEFINE_MINMAX(TYPE)\ - TYPE Math::Min(TYPE a, TYPE b)\ - {\ - return Sys::Compare(a, b) < 0 ? a : b;\ - }\ - TYPE Math::Max(TYPE a, TYPE b)\ - {\ - return Sys::Compare(a, b) > 0 ? a : b;\ - }\ - - REFLECTION_PREDEFINED_PRIMITIVE_TYPES(DEFINE_MINMAX) - DEFINE_MINMAX(DateTime) -#undef DEFINE_MINMAX - } - } -} - - -/*********************************************************************** -.\THREADING.CPP -***********************************************************************/ -#ifdef VCZH_MSVC - -namespace vl -{ - using namespace threading_internal; - using namespace collections; - -/*********************************************************************** -WaitableObject -***********************************************************************/ - - namespace threading_internal - { - struct WaitableData - { - HANDLE handle; - - WaitableData(HANDLE _handle) - :handle(_handle) - { - } - }; - } - - WaitableObject::WaitableObject() - :waitableData(0) - { - } - - void WaitableObject::SetData(threading_internal::WaitableData* data) - { - waitableData=data; - } - - bool WaitableObject::IsCreated() - { - return waitableData!=0; - } - - bool WaitableObject::Wait() - { - return WaitForTime(INFINITE); - } - - bool WaitableObject::WaitForTime(vint ms) - { - if(IsCreated()) - { - if(WaitForSingleObject(waitableData->handle, (DWORD)ms)==WAIT_OBJECT_0) - { - return true; - } - } - return false; - } - - bool WaitableObject::WaitAll(WaitableObject** objects, vint count) - { - Array handles(count); - for(vint i=0;iwaitableData->handle; - } - DWORD result=WaitForMultipleObjects((DWORD)count, &handles[0], TRUE, INFINITE); - return result==WAIT_OBJECT_0 || result==WAIT_ABANDONED_0; - - } - - bool WaitableObject::WaitAllForTime(WaitableObject** objects, vint count, vint ms) - { - Array handles(count); - for(vint i=0;iwaitableData->handle; - } - DWORD result=WaitForMultipleObjects((DWORD)count, &handles[0], TRUE, (DWORD)ms); - return result==WAIT_OBJECT_0 || result==WAIT_ABANDONED_0; - } - - vint WaitableObject::WaitAny(WaitableObject** objects, vint count, bool* abandoned) - { - Array handles(count); - for(vint i=0;iwaitableData->handle; - } - DWORD result=WaitForMultipleObjects((DWORD)count, &handles[0], FALSE, INFINITE); - if(WAIT_OBJECT_0 <= result && result handles(count); - for(vint i=0;iwaitableData->handle; - } - DWORD result=WaitForMultipleObjects((DWORD)count, &handles[0], FALSE, (DWORD)ms); - if(WAIT_OBJECT_0 <= result && resultdeleteAfterStopped; - ThreadLocalStorage::FixStorages(); - try - { - procedure(this, argument); - threadState=Thread::Stopped; - ThreadLocalStorage::ClearStorages(); - } - catch (...) - { - ThreadLocalStorage::ClearStorages(); - throw; - } - if(deleteAfterStopped) - { - delete this; - } - } - public: - ProceduredThread(Thread::ThreadProcedure _procedure, void* _argument, bool _deleteAfterStopped) - :procedure(_procedure) - ,argument(_argument) - ,deleteAfterStopped(_deleteAfterStopped) - { - } - }; - - class LambdaThread : public Thread - { - private: - Func procedure; - bool deleteAfterStopped; - - protected: - void Run() - { - bool deleteAfterStopped = this->deleteAfterStopped; - ThreadLocalStorage::FixStorages(); - try - { - procedure(); - threadState=Thread::Stopped; - ThreadLocalStorage::ClearStorages(); - } - catch (...) - { - ThreadLocalStorage::ClearStorages(); - throw; - } - if(deleteAfterStopped) - { - delete this; - } - } - public: - LambdaThread(const Func& _procedure, bool _deleteAfterStopped) - :procedure(_procedure) - ,deleteAfterStopped(_deleteAfterStopped) - { - } - }; - } - - void InternalThreadProc(Thread* thread) - { - thread->Run(); - } - - DWORD WINAPI InternalThreadProcWrapper(LPVOID lpParameter) - { - InternalThreadProc((Thread*)lpParameter); - return 0; - } - - Thread::Thread() - { - internalData=new ThreadData; - internalData->handle=CreateThread(NULL, 0, InternalThreadProcWrapper, this, CREATE_SUSPENDED, &internalData->id); - threadState=Thread::NotStarted; - SetData(internalData); - } - - Thread::~Thread() - { - if (internalData) - { - Stop(); - CloseHandle(internalData->handle); - delete internalData; - } - } - - Thread* Thread::CreateAndStart(ThreadProcedure procedure, void* argument, bool deleteAfterStopped) - { - if(procedure) - { - Thread* thread=new ProceduredThread(procedure, argument, deleteAfterStopped); - if(thread->Start()) - { - return thread; - } - else - { - delete thread; - } - } - return 0; - } - - Thread* Thread::CreateAndStart(const Func& procedure, bool deleteAfterStopped) - { - Thread* thread=new LambdaThread(procedure, deleteAfterStopped); - if(thread->Start()) - { - return thread; - } - else - { - delete thread; - } - return 0; - } - - void Thread::Sleep(vint ms) - { - ::Sleep((DWORD)ms); - } - - - vint Thread::GetCPUCount() - { - SYSTEM_INFO info; - GetSystemInfo(&info); - return info.dwNumberOfProcessors; - } - - vint Thread::GetCurrentThreadId() - { - return (vint)::GetCurrentThreadId(); - } - - bool Thread::Start() - { - if(threadState==Thread::NotStarted && internalData->handle!=NULL) - { - if(ResumeThread(internalData->handle)!=-1) - { - threadState=Thread::Running; - return true; - } - } - return false; - } - - bool Thread::Stop() - { - if(internalData->handle!=NULL) - { - if (SuspendThread(internalData->handle) != -1) - { - threadState=Thread::Stopped; - return true; - } - } - return false; - } - - Thread::ThreadState Thread::GetState() - { - return threadState; - } - - void Thread::SetCPU(vint index) - { - SetThreadAffinityMask(internalData->handle, ((vint)1 << index)); - } - -/*********************************************************************** -Mutex -***********************************************************************/ - - namespace threading_internal - { - struct MutexData : public WaitableData - { - MutexData(HANDLE _handle) - :WaitableData(_handle) - { - } - }; - } - - Mutex::Mutex() - :internalData(0) - { - } - - Mutex::~Mutex() - { - if(internalData) - { - CloseHandle(internalData->handle); - delete internalData; - } - } - - bool Mutex::Create(bool owned, const WString& name) - { - if(IsCreated())return false; - BOOL aOwned=owned?TRUE:FALSE; - LPCTSTR aName=name==L""?NULL:name.Buffer(); - HANDLE handle=CreateMutex(NULL, aOwned, aName); - if(handle) - { - internalData=new MutexData(handle); - SetData(internalData); - } - return IsCreated(); - } - - bool Mutex::Open(bool inheritable, const WString& name) - { - if(IsCreated())return false; - BOOL aInteritable=inheritable?TRUE:FALSE; - HANDLE handle=OpenMutex(SYNCHRONIZE, aInteritable, name.Buffer()); - if(handle) - { - internalData=new MutexData(handle); - SetData(internalData); - } - return IsCreated(); - } - - bool Mutex::Release() - { - if(IsCreated()) - { - return ReleaseMutex(internalData->handle)!=0; - } - return false; - } - -/*********************************************************************** -Semaphore -***********************************************************************/ - - namespace threading_internal - { - struct SemaphoreData : public WaitableData - { - SemaphoreData(HANDLE _handle) - :WaitableData(_handle) - { - } - }; - } - - Semaphore::Semaphore() - :internalData(0) - { - } - - Semaphore::~Semaphore() - { - if(internalData) - { - CloseHandle(internalData->handle); - delete internalData; - } - } - - bool Semaphore::Create(vint initialCount, vint maxCount, const WString& name) - { - if(IsCreated())return false; - LONG aInitial=(LONG)initialCount; - LONG aMax=(LONG)maxCount; - LPCTSTR aName=name==L""?NULL:name.Buffer(); - HANDLE handle=CreateSemaphore(NULL, aInitial, aMax, aName); - if(handle) - { - internalData=new SemaphoreData(handle); - SetData(internalData); - } - return IsCreated(); - } - - bool Semaphore::Open(bool inheritable, const WString& name) - { - if(IsCreated())return false; - BOOL aInteritable=inheritable?TRUE:FALSE; - HANDLE handle=OpenSemaphore(SYNCHRONIZE, aInteritable, name.Buffer()); - if(handle) - { - internalData=new SemaphoreData(handle); - SetData(internalData); - } - return IsCreated(); - } - - bool Semaphore::Release() - { - if(IsCreated()) - { - return Release(1)!=-1; - } - return false; - } - - vint Semaphore::Release(vint count) - { - if(IsCreated()) - { - LONG previous=-1; - if(ReleaseSemaphore(internalData->handle, (LONG)count, &previous)!=0) - { - return (vint)previous; - } - } - return -1; - } - -/*********************************************************************** -EventObject -***********************************************************************/ - - namespace threading_internal - { - struct EventData : public WaitableData - { - EventData(HANDLE _handle) - :WaitableData(_handle) - { - } - }; - } - - EventObject::EventObject() - :internalData(0) - { - } - - EventObject::~EventObject() - { - if(internalData) - { - CloseHandle(internalData->handle); - delete internalData; - } - } - - bool EventObject::CreateAutoUnsignal(bool signaled, const WString& name) - { - if(IsCreated())return false; - BOOL aSignaled=signaled?TRUE:FALSE; - LPCTSTR aName=name==L""?NULL:name.Buffer(); - HANDLE handle=CreateEvent(NULL, FALSE, aSignaled, aName); - if(handle) - { - internalData=new EventData(handle); - SetData(internalData); - } - return IsCreated(); - } - - bool EventObject::CreateManualUnsignal(bool signaled, const WString& name) - { - if(IsCreated())return false; - BOOL aSignaled=signaled?TRUE:FALSE; - LPCTSTR aName=name==L""?NULL:name.Buffer(); - HANDLE handle=CreateEvent(NULL, TRUE, aSignaled, aName); - if(handle) - { - internalData=new EventData(handle); - SetData(internalData); - } - return IsCreated(); - } - - bool EventObject::Open(bool inheritable, const WString& name) - { - if(IsCreated())return false; - BOOL aInteritable=inheritable?TRUE:FALSE; - HANDLE handle=OpenEvent(SYNCHRONIZE, aInteritable, name.Buffer()); - if(handle) - { - internalData=new EventData(handle); - SetData(internalData); - } - return IsCreated(); - } - - bool EventObject::Signal() - { - if(IsCreated()) - { - return SetEvent(internalData->handle)!=0; - } - return false; - } - - bool EventObject::Unsignal() - { - if(IsCreated()) - { - return ResetEvent(internalData->handle)!=0; - } - return false; - } - -/*********************************************************************** -ThreadPoolLite -***********************************************************************/ - - struct ThreadPoolQueueProcArgument - { - void(*proc)(void*); - void* argument; - }; - - DWORD WINAPI ThreadPoolQueueProc(void* argument) - { - Ptr proc=(ThreadPoolQueueProcArgument*)argument; - ThreadLocalStorage::FixStorages(); - try - { - proc->proc(proc->argument); - ThreadLocalStorage::ClearStorages(); - } - catch (...) - { - ThreadLocalStorage::ClearStorages(); - } - return 0; - } - - DWORD WINAPI ThreadPoolQueueFunc(void* argument) - { - Ptr> proc=(Func*)argument; - ThreadLocalStorage::FixStorages(); - try - { - (*proc.Obj())(); - ThreadLocalStorage::ClearStorages(); - } - catch (...) - { - ThreadLocalStorage::ClearStorages(); - } - return 0; - } - - ThreadPoolLite::ThreadPoolLite() - { - } - - ThreadPoolLite::~ThreadPoolLite() - { - } - - bool ThreadPoolLite::Queue(void(*proc)(void*), void* argument) - { - ThreadPoolQueueProcArgument* p=new ThreadPoolQueueProcArgument; - p->proc=proc; - p->argument=argument; - if(QueueUserWorkItem(&ThreadPoolQueueProc, p, WT_EXECUTEDEFAULT)) - { - return true; - } - else - { - delete p; - return false; - } - } - - bool ThreadPoolLite::Queue(const Func& proc) - { - Func* p=new Func(proc); - if(QueueUserWorkItem(&ThreadPoolQueueFunc, p, WT_EXECUTEDEFAULT)) - { - return true; - } - else - { - delete p; - return false; - } - } - -/*********************************************************************** -CriticalSection -***********************************************************************/ - - namespace threading_internal - { - struct CriticalSectionData - { - CRITICAL_SECTION criticalSection; - }; - } - - CriticalSection::Scope::Scope(CriticalSection& _criticalSection) - :criticalSection(&_criticalSection) - { - criticalSection->Enter(); - } - - CriticalSection::Scope::~Scope() - { - criticalSection->Leave(); - } - - CriticalSection::CriticalSection() - { - internalData=new CriticalSectionData; - InitializeCriticalSection(&internalData->criticalSection); - } - - CriticalSection::~CriticalSection() - { - DeleteCriticalSection(&internalData->criticalSection); - delete internalData; - } - - bool CriticalSection::TryEnter() - { - return TryEnterCriticalSection(&internalData->criticalSection)!=0; - } - - void CriticalSection::Enter() - { - EnterCriticalSection(&internalData->criticalSection); - } - - void CriticalSection::Leave() - { - LeaveCriticalSection(&internalData->criticalSection); - } - -/*********************************************************************** -ReaderWriterLock -***********************************************************************/ - - namespace threading_internal - { - struct ReaderWriterLockData - { - SRWLOCK lock; - }; - } - - ReaderWriterLock::ReaderScope::ReaderScope(ReaderWriterLock& _lock) - :lock(&_lock) - { - lock->EnterReader(); - } - - ReaderWriterLock::ReaderScope::~ReaderScope() - { - lock->LeaveReader(); - } - - ReaderWriterLock::WriterScope::WriterScope(ReaderWriterLock& _lock) - :lock(&_lock) - { - lock->EnterWriter(); - } - - ReaderWriterLock::WriterScope::~WriterScope() - { - lock->LeaveWriter(); - } - - ReaderWriterLock::ReaderWriterLock() - :internalData(new threading_internal::ReaderWriterLockData) - { - InitializeSRWLock(&internalData->lock); - } - - ReaderWriterLock::~ReaderWriterLock() - { - delete internalData; - } - - bool ReaderWriterLock::TryEnterReader() - { - return TryAcquireSRWLockShared(&internalData->lock)!=0; - } - - void ReaderWriterLock::EnterReader() - { - AcquireSRWLockShared(&internalData->lock); - } - - void ReaderWriterLock::LeaveReader() - { - ReleaseSRWLockShared(&internalData->lock); - } - - bool ReaderWriterLock::TryEnterWriter() - { - return TryAcquireSRWLockExclusive(&internalData->lock)!=0; - } - - void ReaderWriterLock::EnterWriter() - { - AcquireSRWLockExclusive(&internalData->lock); - } - - void ReaderWriterLock::LeaveWriter() - { - ReleaseSRWLockExclusive(&internalData->lock); - } - -/*********************************************************************** -ConditionVariable -***********************************************************************/ - - namespace threading_internal - { - struct ConditionVariableData - { - CONDITION_VARIABLE variable; - }; - } - - ConditionVariable::ConditionVariable() - :internalData(new threading_internal::ConditionVariableData) - { - InitializeConditionVariable(&internalData->variable); - } - - ConditionVariable::~ConditionVariable() - { - delete internalData; - } - - bool ConditionVariable::SleepWith(CriticalSection& cs) - { - return SleepConditionVariableCS(&internalData->variable, &cs.internalData->criticalSection, INFINITE)!=0; - } - - bool ConditionVariable::SleepWithForTime(CriticalSection& cs, vint ms) - { - return SleepConditionVariableCS(&internalData->variable, &cs.internalData->criticalSection, (DWORD)ms)!=0; - } - - bool ConditionVariable::SleepWithReader(ReaderWriterLock& lock) - { - return SleepConditionVariableSRW(&internalData->variable, &lock.internalData->lock, INFINITE, CONDITION_VARIABLE_LOCKMODE_SHARED)!=0; - } - - bool ConditionVariable::SleepWithReaderForTime(ReaderWriterLock& lock, vint ms) - { - return SleepConditionVariableSRW(&internalData->variable, &lock.internalData->lock, (DWORD)ms, CONDITION_VARIABLE_LOCKMODE_SHARED)!=0; - } - - bool ConditionVariable::SleepWithWriter(ReaderWriterLock& lock) - { - return SleepConditionVariableSRW(&internalData->variable, &lock.internalData->lock, INFINITE, 0)!=0; - } - - bool ConditionVariable::SleepWithWriterForTime(ReaderWriterLock& lock, vint ms) - { - return SleepConditionVariableSRW(&internalData->variable, &lock.internalData->lock, (DWORD)ms, 0)!=0; - } - - void ConditionVariable::WakeOnePending() - { - WakeConditionVariable(&internalData->variable); - } - - void ConditionVariable::WakeAllPendings() - { - WakeAllConditionVariable(&internalData->variable); - } - -/*********************************************************************** -SpinLock -***********************************************************************/ - - SpinLock::Scope::Scope(SpinLock& _spinLock) - :spinLock(&_spinLock) - { - spinLock->Enter(); - } - - SpinLock::Scope::~Scope() - { - spinLock->Leave(); - } - - SpinLock::SpinLock() - :token(0) - { - } - - SpinLock::~SpinLock() - { - } - - bool SpinLock::TryEnter() - { - return _InterlockedExchange(&token, 1)==0; - } - - void SpinLock::Enter() - { - while(_InterlockedCompareExchange(&token, 1, 0)!=0) - { - while(token!=0) _mm_pause(); - } - } - - void SpinLock::Leave() - { - _InterlockedExchange(&token, 0); - } - -/*********************************************************************** -ThreadLocalStorage -***********************************************************************/ - -#define KEY ((DWORD&)key) - - ThreadLocalStorage::ThreadLocalStorage(Destructor _destructor) - :destructor(_destructor) - { - static_assert(sizeof(key) >= sizeof(DWORD), "ThreadLocalStorage's key storage is not large enouth."); - PushStorage(this); - KEY = TlsAlloc(); - CHECK_ERROR(KEY != TLS_OUT_OF_INDEXES, L"vl::ThreadLocalStorage::ThreadLocalStorage()#Failed to alloc new thread local storage index."); - } - - ThreadLocalStorage::~ThreadLocalStorage() - { - TlsFree(KEY); - } - - void* ThreadLocalStorage::Get() - { - CHECK_ERROR(!disposed, L"vl::ThreadLocalStorage::Get()#Cannot access a disposed ThreadLocalStorage."); - return TlsGetValue(KEY); - } - - void ThreadLocalStorage::Set(void* data) - { - CHECK_ERROR(!disposed, L"vl::ThreadLocalStorage::Set()#Cannot access a disposed ThreadLocalStorage."); - TlsSetValue(KEY, data); - } - -#undef KEY -} -#endif - -/*********************************************************************** -ThreadLocalStorage Common Implementations -***********************************************************************/ - -namespace vl -{ - void ThreadLocalStorage::Clear() - { - CHECK_ERROR(!disposed, L"vl::ThreadLocalStorage::Clear()#Cannot access a disposed ThreadLocalStorage."); - if(destructor) - { - if (auto data = Get()) - { - destructor(data); - } - } - Set(nullptr); - } - - void ThreadLocalStorage::Dispose() - { - CHECK_ERROR(!disposed, L"vl::ThreadLocalStorage::Dispose()#Cannot access a disposed ThreadLocalStorage."); - Clear(); - disposed = true; - } - - struct TlsStorageLink - { - ThreadLocalStorage* storage = nullptr; - TlsStorageLink* next = nullptr; - }; - - volatile bool tlsFixed = false; - TlsStorageLink* tlsHead = nullptr; - TlsStorageLink** tlsTail = &tlsHead; - - void ThreadLocalStorage::PushStorage(ThreadLocalStorage* storage) - { - CHECK_ERROR(!tlsFixed, L"vl::ThreadLocalStorage::PushStorage(ThreadLocalStorage*)#Cannot create new ThreadLocalStorage instance after calling ThreadLocalStorage::FixStorages()."); - auto link = new TlsStorageLink; - link->storage = storage; - *tlsTail = link; - tlsTail = &link->next; - } - - void ThreadLocalStorage::FixStorages() - { - tlsFixed = true; - } - - void ThreadLocalStorage::ClearStorages() - { - FixStorages(); - auto current = tlsHead; - while (current) - { - current->storage->Clear(); - current = current->next; - } - } - - void ThreadLocalStorage::DisposeStorages() - { - FixStorages(); - auto current = tlsHead; - tlsHead = nullptr; - tlsTail = nullptr; - while (current) - { - current->storage->Dispose(); - - auto temp = current; - current = current->next; - delete temp; - } - } -} - - -/*********************************************************************** -.\THREADINGLINUX.CPP -***********************************************************************/ -#ifdef VCZH_GCC -#include -#include -#include -#include -#if defined(__APPLE__) || defined(__APPLE_CC__) -#include -#endif - - -namespace vl -{ - using namespace threading_internal; - using namespace collections; - - -/*********************************************************************** -Thread -***********************************************************************/ - - namespace threading_internal - { - struct ThreadData - { - pthread_t id; - EventObject ev; - }; - - class ProceduredThread : public Thread - { - private: - Thread::ThreadProcedure procedure; - void* argument; - bool deleteAfterStopped; - - protected: - void Run() - { - bool deleteAfterStopped = this->deleteAfterStopped; - ThreadLocalStorage::FixStorages(); - try - { - procedure(this, argument); - threadState=Thread::Stopped; - internalData->ev.Signal(); - ThreadLocalStorage::ClearStorages(); - } - catch (...) - { - ThreadLocalStorage::ClearStorages(); - throw; - } - if(deleteAfterStopped) - { - delete this; - } - } - public: - ProceduredThread(Thread::ThreadProcedure _procedure, void* _argument, bool _deleteAfterStopped) - :procedure(_procedure) - ,argument(_argument) - ,deleteAfterStopped(_deleteAfterStopped) - { - } - }; - - class LambdaThread : public Thread - { - private: - Func procedure; - bool deleteAfterStopped; - - protected: - void Run() - { - bool deleteAfterStopped = this->deleteAfterStopped; - ThreadLocalStorage::FixStorages(); - try - { - procedure(); - threadState=Thread::Stopped; - internalData->ev.Signal(); - ThreadLocalStorage::ClearStorages(); - } - catch (...) - { - ThreadLocalStorage::ClearStorages(); - throw; - } - if(deleteAfterStopped) - { - delete this; - } - } - public: - LambdaThread(const Func& _procedure, bool _deleteAfterStopped) - :procedure(_procedure) - ,deleteAfterStopped(_deleteAfterStopped) - { - } - }; - } - - void InternalThreadProc(Thread* thread) - { - thread->Run(); - } - - void* InternalThreadProcWrapper(void* lpParameter) - { - InternalThreadProc((Thread*)lpParameter); - return 0; - } - - Thread::Thread() - { - internalData=new ThreadData; - internalData->ev.CreateManualUnsignal(false); - threadState=Thread::NotStarted; - } - - Thread::~Thread() - { - if (internalData) - { - Stop(); - if (threadState!=Thread::NotStarted) - { - pthread_detach(internalData->id); - } - delete internalData; - } - } - - Thread* Thread::CreateAndStart(ThreadProcedure procedure, void* argument, bool deleteAfterStopped) - { - if(procedure) - { - Thread* thread=new ProceduredThread(procedure, argument, deleteAfterStopped); - if(thread->Start()) - { - return thread; - } - else - { - delete thread; - } - } - return 0; - } - - Thread* Thread::CreateAndStart(const Func& procedure, bool deleteAfterStopped) - { - Thread* thread=new LambdaThread(procedure, deleteAfterStopped); - if(thread->Start()) - { - return thread; - } - else - { - delete thread; - } - return 0; - } - - void Thread::Sleep(vint ms) - { - if (ms >= 1000) - { - sleep(ms / 1000); - } - if (ms % 1000) - { - usleep((ms % 1000) * 1000); - } - } - - vint Thread::GetCPUCount() - { - return (vint)sysconf(_SC_NPROCESSORS_ONLN); - } - - vint Thread::GetCurrentThreadId() - { - return (vint)::pthread_self(); - } - - bool Thread::Start() - { - if(threadState==Thread::NotStarted) - { - if(pthread_create(&internalData->id, nullptr, &InternalThreadProcWrapper, this)==0) - { - threadState=Thread::Running; - return true; - } - } - return false; - } - - bool Thread::Wait() - { - return internalData->ev.Wait(); - } - - bool Thread::Stop() - { - if (threadState==Thread::Running) - { - if(pthread_cancel(internalData->id)==0) - { - threadState=Thread::Stopped; - internalData->ev.Signal(); - return true; - } - } - return false; - } - - Thread::ThreadState Thread::GetState() - { - return threadState; - } - -/*********************************************************************** -Mutex -***********************************************************************/ - - namespace threading_internal - { - struct MutexData - { - Semaphore sem; - }; - }; - - Mutex::Mutex() - { - internalData = new MutexData; - } - - Mutex::~Mutex() - { - delete internalData; - } - - bool Mutex::Create(bool owned, const WString& name) - { - return internalData->sem.Create(owned ? 0 : 1, 1, name); - } - - bool Mutex::Open(bool inheritable, const WString& name) - { - return internalData->sem.Open(inheritable, name); - } - - bool Mutex::Release() - { - return internalData->sem.Release(); - } - - bool Mutex::Wait() - { - return internalData->sem.Wait(); - } - -/*********************************************************************** -Semaphore -***********************************************************************/ - - namespace threading_internal - { - struct SemaphoreData - { - sem_t semUnnamed; - sem_t* semNamed = nullptr; - }; - } - - Semaphore::Semaphore() - :internalData(0) - { - } - - Semaphore::~Semaphore() - { - if (internalData) - { - if (internalData->semNamed) - { - sem_close(internalData->semNamed); - } - else - { - sem_destroy(&internalData->semUnnamed); - } - delete internalData; - } - } - - bool Semaphore::Create(vint initialCount, vint maxCount, const WString& name) - { - if (internalData) return false; - if (initialCount > maxCount) return false; - - internalData = new SemaphoreData; -#if defined(__APPLE__) - - AString auuid; - if(name.Length() == 0) - { - CFUUIDRef cfuuid = CFUUIDCreate(kCFAllocatorDefault); - CFStringRef cfstr = CFUUIDCreateString(kCFAllocatorDefault, cfuuid); - auuid = CFStringGetCStringPtr(cfstr, kCFStringEncodingASCII); - - CFRelease(cfstr); - CFRelease(cfuuid); - } - auuid = auuid.Insert(0, "/"); - // OSX SEM_NAME_LENGTH = 31 - if(auuid.Length() >= 30) - auuid = auuid.Sub(0, 30); - - if ((internalData->semNamed = sem_open(auuid.Buffer(), O_CREAT, O_RDWR, initialCount)) == SEM_FAILED) - { - delete internalData; - internalData = 0; - return false; - } - -#else - if (name == L"") - { - if(sem_init(&internalData->semUnnamed, 0, (int)initialCount) == -1) - { - delete internalData; - internalData = 0; - return false; - } - } - else - { - AString astr = wtoa(name); - - if ((internalData->semNamed = sem_open(astr.Buffer(), O_CREAT, 0777, initialCount)) == SEM_FAILED) - { - delete internalData; - internalData = 0; - return false; - } - } -#endif - - Release(initialCount); - return true; - } - - bool Semaphore::Open(bool inheritable, const WString& name) - { - if (internalData) return false; - if (inheritable) return false; - - internalData = new SemaphoreData; - if (!(internalData->semNamed = sem_open(wtoa(name).Buffer(), 0))) - { - delete internalData; - internalData = 0; - return false; - } - - return true; - } - - bool Semaphore::Release() - { - return Release(1); - } - - vint Semaphore::Release(vint count) - { - for (vint i = 0; i < count; i++) - { - if (internalData->semNamed) - { - sem_post(internalData->semNamed); - } - else - { - sem_post(&internalData->semUnnamed); - } - } - return true; - } - - bool Semaphore::Wait() - { - if (internalData->semNamed) - { - return sem_wait(internalData->semNamed) == 0; - } - else - { - return sem_wait(&internalData->semUnnamed) == 0; - } - } - -/*********************************************************************** -EventObject -***********************************************************************/ - - namespace threading_internal - { - struct EventData - { - bool autoReset; - volatile bool signaled; - CriticalSection mutex; - ConditionVariable cond; - volatile vint counter = 0; - }; - } - - EventObject::EventObject() - { - internalData = nullptr; - } - - EventObject::~EventObject() - { - if (internalData) - { - delete internalData; - } - } - - bool EventObject::CreateAutoUnsignal(bool signaled, const WString& name) - { - if (name!=L"") return false; - if (internalData) return false; - - internalData = new EventData; - internalData->autoReset = true; - internalData->signaled = signaled; - return true; - } - - bool EventObject::CreateManualUnsignal(bool signaled, const WString& name) - { - if (name!=L"") return false; - if (internalData) return false; - - internalData = new EventData; - internalData->autoReset = false; - internalData->signaled = signaled; - return true; - } - - bool EventObject::Signal() - { - if (!internalData) return false; - - internalData->mutex.Enter(); - internalData->signaled = true; - if (internalData->counter) - { - if (internalData->autoReset) - { - internalData->cond.WakeOnePending(); - internalData->signaled = false; - } - else - { - internalData->cond.WakeAllPendings(); - } - } - internalData->mutex.Leave(); - return true; - } - - bool EventObject::Unsignal() - { - if (!internalData) return false; - - internalData->mutex.Enter(); - internalData->signaled = false; - internalData->mutex.Leave(); - return true; - } - - bool EventObject::Wait() - { - if (!internalData) return false; - - internalData->mutex.Enter(); - if (internalData->signaled) - { - if (internalData->autoReset) - { - internalData->signaled = false; - } - } - else - { - internalData->counter++; - internalData->cond.SleepWith(internalData->mutex); - internalData->counter--; - } - internalData->mutex.Leave(); - return true; - } - -/*********************************************************************** -ThreadPoolLite -***********************************************************************/ - - namespace threading_internal - { - struct ThreadPoolTask - { - Func task; - Ptr next; - }; - - struct ThreadPoolData - { - Semaphore semaphore; - EventObject taskFinishEvent; - Ptr taskBegin; - Ptr* taskEnd = nullptr; - volatile bool stopping = false; - List taskThreads; - }; - - SpinLock threadPoolLock; - ThreadPoolData* threadPoolData = nullptr; - - void ThreadPoolProc(Thread* thread, void* argument) - { - while (true) - { - Ptr task; - - threadPoolData->semaphore.Wait(); - SPIN_LOCK(threadPoolLock) - { - if (threadPoolData->taskBegin) - { - task = threadPoolData->taskBegin; - threadPoolData->taskBegin = task->next; - } - - if (!threadPoolData->taskBegin) - { - threadPoolData->taskEnd = &threadPoolData->taskBegin; - threadPoolData->taskFinishEvent.Signal(); - } - } - - if (task) - { - ThreadLocalStorage::FixStorages(); - try - { - task->task(); - ThreadLocalStorage::ClearStorages(); - } - catch (...) - { - ThreadLocalStorage::ClearStorages(); - } - } - else if (threadPoolData->stopping) - { - return; - } - } - } - - bool ThreadPoolQueue(const Func& proc) - { - SPIN_LOCK(threadPoolLock) - { - if (!threadPoolData) - { - threadPoolData = new ThreadPoolData; - threadPoolData->semaphore.Create(0, 65536); - threadPoolData->taskFinishEvent.CreateManualUnsignal(false); - threadPoolData->taskEnd = &threadPoolData->taskBegin; - - for (vint i = 0; i < Thread::GetCPUCount() * 4; i++) - { - threadPoolData->taskThreads.Add(Thread::CreateAndStart(&ThreadPoolProc, nullptr, false)); - } - } - - if (threadPoolData) - { - if (threadPoolData->stopping) - { - return false; - } - - auto task = MakePtr(); - task->task = proc; - *threadPoolData->taskEnd = task; - threadPoolData->taskEnd = &task->next; - threadPoolData->semaphore.Release(); - threadPoolData->taskFinishEvent.Unsignal(); - } - } - return true; - } - - bool ThreadPoolStop(bool discardPendingTasks) - { - SPIN_LOCK(threadPoolLock) - { - if (!threadPoolData) return false; - if (threadPoolData->stopping) return false; - - threadPoolData->stopping = true; - if (discardPendingTasks) - { - threadPoolData->taskEnd = &threadPoolData->taskBegin; - threadPoolData->taskBegin = nullptr; - } - - threadPoolData->semaphore.Release(threadPoolData->taskThreads.Count()); - } - - threadPoolData->taskFinishEvent.Wait(); - for (vint i = 0; i < threadPoolData->taskThreads.Count(); i++) - { - auto thread = threadPoolData->taskThreads[i]; - thread->Wait(); - delete thread; - } - threadPoolData->taskThreads.Clear(); - - SPIN_LOCK(threadPoolLock) - { - delete threadPoolData; - threadPoolData = nullptr; - } - return true; - } - } - - ThreadPoolLite::ThreadPoolLite() - { - } - - ThreadPoolLite::~ThreadPoolLite() - { - } - - bool ThreadPoolLite::Queue(void(*proc)(void*), void* argument) - { - return ThreadPoolQueue([proc, argument](){proc(argument);}); - } - - bool ThreadPoolLite::Queue(const Func& proc) - { - return ThreadPoolQueue(proc); - } - - bool ThreadPoolLite::Stop(bool discardPendingTasks) - { - return ThreadPoolStop(discardPendingTasks); - } - -/*********************************************************************** -CriticalSection -***********************************************************************/ - - namespace threading_internal - { - struct CriticalSectionData - { - pthread_mutex_t mutex; - }; - } - - CriticalSection::CriticalSection() - { - internalData = new CriticalSectionData; - pthread_mutex_init(&internalData->mutex, nullptr); - } - - CriticalSection::~CriticalSection() - { - pthread_mutex_destroy(&internalData->mutex); - delete internalData; - } - - bool CriticalSection::TryEnter() - { - return pthread_mutex_trylock(&internalData->mutex) == 0; - } - - void CriticalSection::Enter() - { - pthread_mutex_lock(&internalData->mutex); - } - - void CriticalSection::Leave() - { - pthread_mutex_unlock(&internalData->mutex); - } - - CriticalSection::Scope::Scope(CriticalSection& _criticalSection) - :criticalSection(&_criticalSection) - { - criticalSection->Enter(); - } - - CriticalSection::Scope::~Scope() - { - criticalSection->Leave(); - } - -/*********************************************************************** -ReaderWriterLock -***********************************************************************/ - - namespace threading_internal - { - struct ReaderWriterLockData - { - pthread_rwlock_t rwlock; - }; - } - - ReaderWriterLock::ReaderWriterLock() - { - internalData = new ReaderWriterLockData; - pthread_rwlock_init(&internalData->rwlock, nullptr); - } - - ReaderWriterLock::~ReaderWriterLock() - { - pthread_rwlock_destroy(&internalData->rwlock); - delete internalData; - } - - bool ReaderWriterLock::TryEnterReader() - { - return pthread_rwlock_tryrdlock(&internalData->rwlock) == 0; - } - - void ReaderWriterLock::EnterReader() - { - pthread_rwlock_rdlock(&internalData->rwlock); - } - - void ReaderWriterLock::LeaveReader() - { - pthread_rwlock_unlock(&internalData->rwlock); - } - - bool ReaderWriterLock::TryEnterWriter() - { - return pthread_rwlock_trywrlock(&internalData->rwlock) == 0; - } - - void ReaderWriterLock::EnterWriter() - { - pthread_rwlock_wrlock(&internalData->rwlock); - } - - void ReaderWriterLock::LeaveWriter() - { - pthread_rwlock_unlock(&internalData->rwlock); - } - - ReaderWriterLock::ReaderScope::ReaderScope(ReaderWriterLock& _lock) - :lock(&_lock) - { - lock->EnterReader(); - } - - ReaderWriterLock::ReaderScope::~ReaderScope() - { - lock->LeaveReader(); - } - - ReaderWriterLock::WriterScope::WriterScope(ReaderWriterLock& _lock) - :lock(&_lock) - { - lock->EnterWriter(); - } - - ReaderWriterLock::WriterScope::~WriterScope() - { - lock->LeaveReader(); - } - -/*********************************************************************** -ConditionVariable -***********************************************************************/ - - namespace threading_internal - { - struct ConditionVariableData - { - pthread_cond_t cond; - }; - } - - ConditionVariable::ConditionVariable() - { - internalData = new ConditionVariableData; - pthread_cond_init(&internalData->cond, nullptr); - } - - ConditionVariable::~ConditionVariable() - { - pthread_cond_destroy(&internalData->cond); - delete internalData; - } - - bool ConditionVariable::SleepWith(CriticalSection& cs) - { - return pthread_cond_wait(&internalData->cond, &cs.internalData->mutex) == 0; - } - - void ConditionVariable::WakeOnePending() - { - pthread_cond_signal(&internalData->cond); - } - - void ConditionVariable::WakeAllPendings() - { - pthread_cond_broadcast(&internalData->cond); - } - -/*********************************************************************** -SpinLock -***********************************************************************/ - - SpinLock::Scope::Scope(SpinLock& _spinLock) - :spinLock(&_spinLock) - { - spinLock->Enter(); - } - - SpinLock::Scope::~Scope() - { - spinLock->Leave(); - } - - SpinLock::SpinLock() - :token(0) - { - } - - SpinLock::~SpinLock() - { - } - - bool SpinLock::TryEnter() - { - return __sync_lock_test_and_set(&token, 1)==0; - } - - void SpinLock::Enter() - { - while(__sync_val_compare_and_swap(&token, 0, 1)!=0) - { - while(token!=0) _mm_pause(); - } - } - - void SpinLock::Leave() - { - __sync_lock_test_and_set(&token, 0); - } - -/*********************************************************************** -ThreadLocalStorage -***********************************************************************/ - -#define KEY ((pthread_key_t&)key) - - ThreadLocalStorage::ThreadLocalStorage(Destructor _destructor) - :destructor(_destructor) - { - static_assert(sizeof(key) >= sizeof(pthread_key_t), "ThreadLocalStorage's key storage is not large enouth."); - PushStorage(this); - auto error = pthread_key_create(&KEY, destructor); - CHECK_ERROR(error != EAGAIN && error != ENOMEM, L"vl::ThreadLocalStorage::ThreadLocalStorage()#Failed to create a thread local storage index."); - } - - ThreadLocalStorage::~ThreadLocalStorage() - { - pthread_key_delete(KEY); - } - - void* ThreadLocalStorage::Get() - { - CHECK_ERROR(!disposed, L"vl::ThreadLocalStorage::Get()#Cannot access a disposed ThreadLocalStorage."); - return pthread_getspecific(KEY); - } - - void ThreadLocalStorage::Set(void* data) - { - CHECK_ERROR(!disposed, L"vl::ThreadLocalStorage::Set()#Cannot access a disposed ThreadLocalStorage."); - pthread_setspecific(KEY, data); - } - -#undef KEY -} -#endif - - /*********************************************************************** .\REGEX\REGEXPURE.CPP ***********************************************************************/ diff --git a/Import/Vlpp.h b/Import/Vlpp.h index ba093fbe..5cfbcb06 100644 --- a/Import/Vlpp.h +++ b/Import/Vlpp.h @@ -9583,4766 +9583,6 @@ Exceptions #endif -/*********************************************************************** -.\REFLECTION\GUITYPEDESCRIPTORPREDEFINED.H -***********************************************************************/ -/*********************************************************************** -Vczh Library++ 3.0 -Developer: Zihan Chen(vczh) -Framework::Reflection - -Interfaces: -***********************************************************************/ - -#ifndef VCZH_REFLECTION_GUITYPEDESCRIPTORPREDEFINED -#define VCZH_REFLECTION_GUITYPEDESCRIPTORPREDEFINED - -#include - -namespace vl -{ - namespace reflection - { - namespace description - { - struct VoidValue {}; - -/*********************************************************************** -Collections -***********************************************************************/ - - class IValueEnumerator : public virtual IDescriptable, public Description - { - public: - virtual Value GetCurrent() = 0; - virtual vint GetIndex() = 0; - virtual bool Next() = 0; - }; - - class IValueEnumerable : public virtual IDescriptable, public Description - { - public: - virtual Ptr CreateEnumerator() = 0; - - static Ptr Create(collections::LazyList values); - }; - - class IValueReadonlyList : public virtual IValueEnumerable, public Description - { - public: - virtual vint GetCount() = 0; - virtual Value Get(vint index) = 0; - virtual bool Contains(const Value& value) = 0; - virtual vint IndexOf(const Value& value) = 0; - }; - - class IValueList : public virtual IValueReadonlyList, public Description - { - public: - virtual void Set(vint index, const Value& value) = 0; - virtual vint Add(const Value& value) = 0; - virtual vint Insert(vint index, const Value& value) = 0; - virtual bool Remove(const Value& value) = 0; - virtual bool RemoveAt(vint index) = 0; - virtual void Clear() = 0; - - static Ptr Create(); - static Ptr Create(Ptr values); - static Ptr Create(collections::LazyList values); - }; - - class IValueObservableList : public virtual IValueList, public Description - { - typedef void ItemChangedProc(vint index, vint oldCount, vint newCount); - public: - Event ItemChanged; - - static Ptr Create(); - static Ptr Create(Ptr values); - static Ptr Create(collections::LazyList values); - }; - - class IValueReadonlyDictionary : public virtual IDescriptable, public Description - { - public: - virtual Ptr GetKeys() = 0; - virtual Ptr GetValues() = 0; - virtual vint GetCount() = 0; - virtual Value Get(const Value& key) = 0; - }; - - class IValueDictionary : public virtual IValueReadonlyDictionary, public Description - { - public: - virtual void Set(const Value& key, const Value& value) = 0; - virtual bool Remove(const Value& key) = 0; - virtual void Clear() = 0; - - static Ptr Create(); - static Ptr Create(Ptr values); - static Ptr Create(collections::LazyList> values); - }; - -/*********************************************************************** -Interface Implementation Proxy -***********************************************************************/ - - class IValueInterfaceProxy : public virtual IDescriptable, public Description - { - public: - virtual Value Invoke(IMethodInfo* methodInfo, Ptr arguments) = 0; - }; - - class IValueFunctionProxy : public virtual IDescriptable, public Description - { - public: - virtual Value Invoke(Ptr arguments) = 0; - }; - - class IValueSubscription : public virtual IDescriptable, public Description - { - typedef void ValueChangedProc(const Value& newValue); - public: - Event ValueChanged; - - virtual bool Open() = 0; - virtual bool Update() = 0; - virtual bool Close() = 0; - }; - -/*********************************************************************** -Interface Implementation Proxy (Implement) -***********************************************************************/ - - class ValueInterfaceRoot : public virtual IDescriptable - { - protected: - Ptr proxy; - - void SetProxy(Ptr value) - { - proxy = value; - } - public: - Ptr GetProxy() - { - return proxy; - } - }; - - template - class ValueInterfaceProxy - { - }; - -#pragma warning(push) -#pragma warning(disable:4250) - template - class ValueInterfaceImpl : public virtual ValueInterfaceRoot, public virtual TInterface, public ValueInterfaceProxy... - { - public: - ~ValueInterfaceImpl() - { - FinalizeAggregation(); - } - }; -#pragma warning(pop) - -/*********************************************************************** -Runtime Exception -***********************************************************************/ - - class IValueCallStack : public virtual IDescriptable, public Description - { - public: - virtual Ptr GetLocalVariables() = 0; - virtual Ptr GetLocalArguments() = 0; - virtual Ptr GetCapturedVariables() = 0; - virtual Ptr GetGlobalVariables() = 0; - virtual WString GetFunctionName() = 0; - virtual WString GetSourceCodeBeforeCodegen() = 0; - virtual WString GetSourceCodeAfterCodegen() = 0; - virtual vint GetRowBeforeCodegen() = 0; - virtual vint GetRowAfterCodegen() = 0; - }; - - class IValueException : public virtual IDescriptable, public Description - { - public: -#pragma push_macro("GetMessage") -#if defined GetMessage -#undef GetMessage -#endif - virtual WString GetMessage() = 0; -#pragma pop_macro("GetMessage") - virtual bool GetFatal() = 0; - virtual Ptr GetCallStack() = 0; - - static Ptr Create(const WString& message); - }; - -/*********************************************************************** -Coroutine -***********************************************************************/ - - enum class CoroutineStatus - { - Waiting, - Executing, - Stopped, - }; - - class CoroutineResult : public virtual IDescriptable, public Description - { - protected: - Value result; - Ptr failure; - - public: - Value GetResult(); - void SetResult(const Value& value); - Ptr GetFailure(); - void SetFailure(Ptr value); - }; - - class ICoroutine : public virtual IDescriptable, public Description - { - public: - virtual void Resume(bool raiseException, Ptr output) = 0; - virtual Ptr GetFailure() = 0; - virtual CoroutineStatus GetStatus() = 0; - }; - -/*********************************************************************** -Coroutine (Enumerable) -***********************************************************************/ - - class EnumerableCoroutine : public Object, public Description - { - public: - class IImpl : public virtual IValueEnumerator, public Description - { - public: - virtual void OnYield(const Value& value) = 0; - virtual void OnJoin(Ptr value) = 0; - }; - - typedef Func(IImpl*)> Creator; - - static void YieldAndPause(IImpl* impl, const Value& value); - static void JoinAndPause(IImpl* impl, Ptr value); - static void ReturnAndExit(IImpl* impl); - static Ptr Create(const Creator& creator); - }; - -/*********************************************************************** -Coroutine (Async) -***********************************************************************/ - - enum class AsyncStatus - { - Ready, - Executing, - Stopped, - }; - - class IAsync : public virtual IDescriptable, public Description - { - public: - virtual AsyncStatus GetStatus() = 0; - virtual bool Execute(const Func)>& callback) = 0; - - static Ptr Delay(vint milliseconds); - }; - - class IPromise : public virtual IDescriptable, public Description - { - public: - virtual bool SendResult(const Value& result) = 0; - virtual bool SendFailure(Ptr failure) = 0; - }; - - class IFuture : public virtual IAsync, public Description - { - public: - virtual Ptr GetPromise() = 0; - - static Ptr Create(); - }; - - class IAsyncScheduler : public virtual IDescriptable, public Description - { - public: - virtual void Execute(const Func& callback) = 0; - virtual void ExecuteInBackground(const Func& callback) = 0; - virtual void DelayExecute(const Func& callback, vint milliseconds) = 0; - - static void RegisterDefaultScheduler(Ptr scheduler); - static void RegisterSchedulerForCurrentThread(Ptr scheduler); - static Ptr UnregisterDefaultScheduler(); - static Ptr UnregisterSchedulerForCurrentThread(); - static Ptr GetSchedulerForCurrentThread(); - }; - - class AsyncCoroutine : public Object, public Description - { - public: - class IImpl : public virtual IAsync, public Description - { - public: - virtual Ptr GetScheduler() = 0; - virtual void OnContinue(Ptr output) = 0; - virtual void OnReturn(const Value& value) = 0; - }; - - typedef Func(IImpl*)> Creator; - - static void AwaitAndRead(IImpl* impl, Ptr value); - static void ReturnAndExit(IImpl* impl, const Value& value); - static Ptr Create(const Creator& creator); - static void CreateAndRun(const Creator& creator); - }; - -/*********************************************************************** -Libraries -***********************************************************************/ - -#define REFLECTION_PREDEFINED_PRIMITIVE_TYPES(F)\ - F(vuint8_t) \ - F(vuint16_t) \ - F(vuint32_t) \ - F(vuint64_t) \ - F(vint8_t) \ - F(vint16_t) \ - F(vint32_t) \ - F(vint64_t) \ - F(float) \ - F(double) \ - F(bool) \ - F(wchar_t) \ - F(WString) \ - F(Locale) \ - - class Sys : public Description - { - public: - static vint Len(const WString& value) { return value.Length(); } - static WString Left(const WString& value, vint length) { return value.Left(length); } - static WString Right(const WString& value, vint length) { return value.Right(length); } - static WString Mid(const WString& value, vint start, vint length) { return value.Sub(start, length); } - static vint Find(const WString& value, const WString& substr) { return INVLOC.FindFirst(value, substr, Locale::Normalization::None).key; } - -#define DEFINE_COMPARE(TYPE) static vint Compare(TYPE a, TYPE b); - REFLECTION_PREDEFINED_PRIMITIVE_TYPES(DEFINE_COMPARE) - DEFINE_COMPARE(DateTime) -#undef DEFINE_COMPARE - - static Ptr ReverseEnumerable(Ptr value); - }; - - class Math : public Description - { - public: - static vint8_t Abs(vint8_t value) { return value > 0 ? value : -value; } - static vint16_t Abs(vint16_t value) { return value > 0 ? value : -value; } - static vint32_t Abs(vint32_t value) { return value > 0 ? value : -value; } - static vint64_t Abs(vint64_t value) { return value > 0 ? value : -value; } - static float Abs(float value) { return value > 0 ? value : -value; } - static double Abs(double value) { return value > 0 ? value : -value; } - -#define DEFINE_MINMAX(TYPE)\ - static TYPE Min(TYPE a, TYPE b);\ - static TYPE Max(TYPE a, TYPE b);\ - - REFLECTION_PREDEFINED_PRIMITIVE_TYPES(DEFINE_MINMAX) - DEFINE_MINMAX(DateTime) -#undef DEFINE_MINMAX - - static double Sin(double value) { return sin(value); } - static double Cos(double value) { return cos(value); } - static double Tan(double value) { return tan(value); } - static double ASin(double value) { return asin(value); } - static double ACos(double value) { return acos(value); } - static double ATan(double value) { return atan(value); } - static double ATan2(double x, double y) { return atan2(y, x); } - - static double Exp(double value) { return exp(value); } - static double LogN(double value) { return log(value); } - static double Log10(double value) { return log10(value); } - static double Log(double value, double base) { return log(value) / log(base); } - static double Pow(double value, double power) { return pow(value, power); } - static double Ceil(double value) { return ceil(value); } - static double Floor(double value) { return floor(value); } - static double Round(double value) { return round(value); } - static double Trunc(double value) { return trunc(value); } - }; - } - } -} - -#endif - - -/*********************************************************************** -.\REFLECTION\GUITYPEDESCRIPTORBUILDER.H -***********************************************************************/ -/*********************************************************************** -Vczh Library++ 3.0 -Developer: Zihan Chen(vczh) -Framework::Reflection - -Interfaces: -***********************************************************************/ - -#ifndef VCZH_REFLECTION_GUITYPEDESCRIPTORBUILDER -#define VCZH_REFLECTION_GUITYPEDESCRIPTORBUILDER - - -namespace vl -{ - namespace collections - { - template - class ObservableList; - } - - namespace reflection - { - namespace description - { - -#ifndef VCZH_DEBUG_NO_REFLECTION - -/*********************************************************************** -TypeInfo -***********************************************************************/ - -#define DECL_TYPE_INFO(TYPENAME) template<>struct TypeInfo{ static const TypeInfoContent content; }; -#define IMPL_VL_TYPE_INFO(TYPENAME) const TypeInfoContent TypeInfo::content = { L ## #TYPENAME, nullptr, TypeInfoContent::VlppType }; -#define IMPL_CPP_TYPE_INFO(TYPENAME) const TypeInfoContent TypeInfo::content = { L ## #TYPENAME, nullptr, TypeInfoContent::CppType }; -#define IMPL_TYPE_INFO_RENAME(TYPENAME, EXPECTEDNAME) const TypeInfoContent TypeInfo::content = { L ## #EXPECTEDNAME, L ## #TYPENAME, TypeInfoContent::Renamed }; - - struct TypeInfoContent - { - enum TypeInfoCppName - { - VlppType, // vl:: - CppType, // - Renamed, // CppFullTypeName - }; - - const wchar_t* typeName; - const wchar_t* cppFullTypeName; - TypeInfoCppName cppName; - }; - - template - struct TypeInfo - { - }; - - template - ITypeDescriptor* GetTypeDescriptor() - { - return GetTypeDescriptor(TypeInfo::content.typeName); - } - -/*********************************************************************** -SerializableTypeDescriptor -***********************************************************************/ - - class TypeDescriptorImplBase : public Object, public ITypeDescriptor, private ITypeDescriptor::ICpp - { - private: - TypeDescriptorFlags typeDescriptorFlags; - const TypeInfoContent* typeInfoContent; - WString typeName; - WString cppFullTypeName; - - const WString& GetFullName()override; - - protected: - const TypeInfoContent* GetTypeInfoContentInternal(); - - public: - TypeDescriptorImplBase(TypeDescriptorFlags _typeDescriptorFlags, const TypeInfoContent* _typeInfoContent); - ~TypeDescriptorImplBase(); - - ITypeDescriptor::ICpp* GetCpp()override; - TypeDescriptorFlags GetTypeDescriptorFlags()override; - const WString& GetTypeName()override; - }; - - class ValueTypeDescriptorBase : public TypeDescriptorImplBase - { - protected: - bool loaded; - Ptr valueType; - Ptr enumType; - Ptr serializableType; - - virtual void LoadInternal();; - void Load(); - public: - ValueTypeDescriptorBase(TypeDescriptorFlags _typeDescriptorFlags, const TypeInfoContent* _typeInfoContent); - ~ValueTypeDescriptorBase(); - - bool IsAggregatable()override; - IValueType* GetValueType()override; - IEnumType* GetEnumType()override; - ISerializableType* GetSerializableType()override; - - vint GetBaseTypeDescriptorCount()override; - ITypeDescriptor* GetBaseTypeDescriptor(vint index)override; - bool CanConvertTo(ITypeDescriptor* targetType)override; - vint GetPropertyCount()override; - IPropertyInfo* GetProperty(vint index)override; - bool IsPropertyExists(const WString& name, bool inheritable)override; - IPropertyInfo* GetPropertyByName(const WString& name, bool inheritable)override; - vint GetEventCount()override; - IEventInfo* GetEvent(vint index)override; - bool IsEventExists(const WString& name, bool inheritable)override; - IEventInfo* GetEventByName(const WString& name, bool inheritable)override; - vint GetMethodGroupCount()override; - IMethodGroupInfo* GetMethodGroup(vint index)override; - bool IsMethodGroupExists(const WString& name, bool inheritable)override; - IMethodGroupInfo* GetMethodGroupByName(const WString& name, bool inheritable)override; - IMethodGroupInfo* GetConstructorGroup()override; - }; - - template - class TypedValueTypeDescriptorBase : public ValueTypeDescriptorBase - { - public: - TypedValueTypeDescriptorBase() - :ValueTypeDescriptorBase(TDFlags, &TypeInfo::content) - { - } - }; - -/*********************************************************************** -TypeInfoImp -***********************************************************************/ - - class TypeDescriptorTypeInfo : public Object, public ITypeInfo - { - protected: - ITypeDescriptor* typeDescriptor; - TypeInfoHint hint; - - public: - TypeDescriptorTypeInfo(ITypeDescriptor* _typeDescriptor, TypeInfoHint _hint); - ~TypeDescriptorTypeInfo(); - - Decorator GetDecorator()override; - TypeInfoHint GetHint()override; - ITypeInfo* GetElementType()override; - ITypeDescriptor* GetTypeDescriptor()override; - vint GetGenericArgumentCount()override; - ITypeInfo* GetGenericArgument(vint index)override; - WString GetTypeFriendlyName()override; - }; - - class DecoratedTypeInfo : public Object, public ITypeInfo - { - protected: - Ptr elementType; - - public: - DecoratedTypeInfo(Ptr _elementType); - ~DecoratedTypeInfo(); - - TypeInfoHint GetHint()override; - ITypeInfo* GetElementType()override; - ITypeDescriptor* GetTypeDescriptor()override; - vint GetGenericArgumentCount()override; - ITypeInfo* GetGenericArgument(vint index)override; - }; - - class RawPtrTypeInfo : public DecoratedTypeInfo - { - public: - RawPtrTypeInfo(Ptr _elementType); - ~RawPtrTypeInfo(); - - Decorator GetDecorator()override; - WString GetTypeFriendlyName()override; - }; - - class SharedPtrTypeInfo : public DecoratedTypeInfo - { - public: - SharedPtrTypeInfo(Ptr _elementType); - ~SharedPtrTypeInfo(); - - Decorator GetDecorator()override; - WString GetTypeFriendlyName()override; - }; - - class NullableTypeInfo : public DecoratedTypeInfo - { - public: - NullableTypeInfo(Ptr _elementType); - ~NullableTypeInfo(); - - Decorator GetDecorator()override; - WString GetTypeFriendlyName()override; - }; - - class GenericTypeInfo : public DecoratedTypeInfo - { - protected: - collections::List> genericArguments; - - public: - GenericTypeInfo(Ptr _elementType); - ~GenericTypeInfo(); - - Decorator GetDecorator()override; - vint GetGenericArgumentCount()override; - ITypeInfo* GetGenericArgument(vint index)override; - WString GetTypeFriendlyName()override; - - void AddGenericArgument(Ptr value); - }; - -/*********************************************************************** -ParameterInfoImpl -***********************************************************************/ - - class ParameterInfoImpl : public Object, public IParameterInfo - { - protected: - IMethodInfo* ownerMethod; - WString name; - Ptr type; - public: - ParameterInfoImpl(IMethodInfo* _ownerMethod, const WString& _name, Ptr _type); - ~ParameterInfoImpl(); - - ITypeDescriptor* GetOwnerTypeDescriptor()override; - const WString& GetName()override; - ITypeInfo* GetType()override; - IMethodInfo* GetOwnerMethod()override; - }; - -/*********************************************************************** -MethodInfoImpl -***********************************************************************/ - - class MethodInfoImpl : public Object, public IMethodInfo - { - friend class PropertyInfoImpl; - protected: - IMethodGroupInfo* ownerMethodGroup; - IPropertyInfo* ownerProperty; - collections::List> parameters; - Ptr returnInfo; - bool isStatic; - - virtual Value InvokeInternal(const Value& thisObject, collections::Array& arguments)=0; - virtual Value CreateFunctionProxyInternal(const Value& thisObject) = 0; - public: - MethodInfoImpl(IMethodGroupInfo* _ownerMethodGroup, Ptr _return, bool _isStatic); - ~MethodInfoImpl(); - - ITypeDescriptor* GetOwnerTypeDescriptor()override; - IPropertyInfo* GetOwnerProperty()override; - const WString& GetName()override; - IMethodGroupInfo* GetOwnerMethodGroup()override; - vint GetParameterCount()override; - IParameterInfo* GetParameter(vint index)override; - ITypeInfo* GetReturn()override; - bool IsStatic()override; - void CheckArguments(collections::Array& arguments)override; - Value Invoke(const Value& thisObject, collections::Array& arguments)override; - Value CreateFunctionProxy(const Value& thisObject)override; - bool AddParameter(Ptr parameter); - bool SetOwnerMethodgroup(IMethodGroupInfo* _ownerMethodGroup); - }; - -/*********************************************************************** -MethodGroupInfoImpl -***********************************************************************/ - - class MethodGroupInfoImpl : public Object, public IMethodGroupInfo - { - protected: - ITypeDescriptor* ownerTypeDescriptor; - WString name; - collections::List> methods; - public: - MethodGroupInfoImpl(ITypeDescriptor* _ownerTypeDescriptor, const WString& _name); - ~MethodGroupInfoImpl(); - - ITypeDescriptor* GetOwnerTypeDescriptor()override; - const WString& GetName()override; - vint GetMethodCount()override; - IMethodInfo* GetMethod(vint index)override; - bool AddMethod(Ptr _method); - }; - -/*********************************************************************** -EventInfoImpl -***********************************************************************/ - - class EventInfoImpl : public Object, public IEventInfo - { - friend class PropertyInfoImpl; - - protected: - ITypeDescriptor* ownerTypeDescriptor; - collections::List observingProperties; - WString name; - Ptr handlerType; - - virtual Ptr AttachInternal(DescriptableObject* thisObject, Ptr handler)=0; - virtual bool DetachInternal(DescriptableObject* thisObject, Ptr handler)=0; - virtual void InvokeInternal(DescriptableObject* thisObject, Ptr arguments)=0; - virtual Ptr GetHandlerTypeInternal()=0; - public: - EventInfoImpl(ITypeDescriptor* _ownerTypeDescriptor, const WString& _name); - ~EventInfoImpl(); - - ITypeDescriptor* GetOwnerTypeDescriptor()override; - const WString& GetName()override; - ITypeInfo* GetHandlerType()override; - vint GetObservingPropertyCount()override; - IPropertyInfo* GetObservingProperty(vint index)override; - Ptr Attach(const Value& thisObject, Ptr handler)override; - bool Detach(const Value& thisObject, Ptr handler)override; - void Invoke(const Value& thisObject, Ptr arguments)override; - }; - -/*********************************************************************** -TypeDescriptorImpl -***********************************************************************/ - - class PropertyInfoImpl : public Object, public IPropertyInfo - { - protected: - ITypeDescriptor* ownerTypeDescriptor; - WString name; - Ptr cpp; - MethodInfoImpl* getter; - MethodInfoImpl* setter; - EventInfoImpl* valueChangedEvent; - - public: - PropertyInfoImpl(ITypeDescriptor* _ownerTypeDescriptor, const WString& _name, MethodInfoImpl* _getter, MethodInfoImpl* _setter, EventInfoImpl* _valueChangedEvent); - ~PropertyInfoImpl(); - - ITypeDescriptor* GetOwnerTypeDescriptor()override; - const WString& GetName()override; - IPropertyInfo::ICpp* GetCpp()override; - - bool IsReadable()override; - bool IsWritable()override; - ITypeInfo* GetReturn()override; - IMethodInfo* GetGetter()override; - IMethodInfo* GetSetter()override; - IEventInfo* GetValueChangedEvent()override; - Value GetValue(const Value& thisObject)override; - void SetValue(Value& thisObject, const Value& newValue)override; - }; - - class PropertyInfoImpl_StaticCpp : public PropertyInfoImpl, private IPropertyInfo::ICpp - { - private: - WString referenceTemplate; - - const WString& GetReferenceTemplate()override; - - public: - PropertyInfoImpl_StaticCpp(ITypeDescriptor* _ownerTypeDescriptor, const WString& _name, MethodInfoImpl* _getter, MethodInfoImpl* _setter, EventInfoImpl* _valueChangedEvent, const WString& _referenceTemplate); - ~PropertyInfoImpl_StaticCpp(); - - IPropertyInfo::ICpp* GetCpp()override; - }; - -/*********************************************************************** -FieldInfoImpl -***********************************************************************/ - - class FieldInfoImpl : public Object, public IPropertyInfo - { - protected: - ITypeDescriptor* ownerTypeDescriptor; - Ptr returnInfo; - WString name; - - virtual Value GetValueInternal(const Value& thisObject)=0; - virtual void SetValueInternal(Value& thisObject, const Value& newValue)=0; - public: - FieldInfoImpl(ITypeDescriptor* _ownerTypeDescriptor, const WString& _name, Ptr _returnInfo); - ~FieldInfoImpl(); - - ITypeDescriptor* GetOwnerTypeDescriptor()override; - const WString& GetName()override; - bool IsReadable()override; - bool IsWritable()override; - ITypeInfo* GetReturn()override; - IMethodInfo* GetGetter()override; - IMethodInfo* GetSetter()override; - IEventInfo* GetValueChangedEvent()override; - Value GetValue(const Value& thisObject)override; - void SetValue(Value& thisObject, const Value& newValue)override; - }; - -/*********************************************************************** -TypeDescriptorImpl -***********************************************************************/ - - class TypeDescriptorImpl : public TypeDescriptorImplBase - { - private: - bool loaded; - collections::List baseTypeDescriptors; - collections::Dictionary> properties; - collections::Dictionary> events; - collections::Dictionary> methodGroups; - Ptr constructorGroup; - - protected: - MethodGroupInfoImpl* PrepareMethodGroup(const WString& name); - MethodGroupInfoImpl* PrepareConstructorGroup(); - IPropertyInfo* AddProperty(Ptr value); - IEventInfo* AddEvent(Ptr value); - IMethodInfo* AddMethod(const WString& name, Ptr value); - IMethodInfo* AddConstructor(Ptr value); - void AddBaseType(ITypeDescriptor* value); - - virtual void LoadInternal()=0; - void Load(); - public: - TypeDescriptorImpl(TypeDescriptorFlags _typeDescriptorFlags, const TypeInfoContent* _typeInfoContent); - ~TypeDescriptorImpl(); - - bool IsAggregatable()override; - IValueType* GetValueType()override; - IEnumType* GetEnumType()override; - ISerializableType* GetSerializableType()override; - - vint GetBaseTypeDescriptorCount()override; - ITypeDescriptor* GetBaseTypeDescriptor(vint index)override; - bool CanConvertTo(ITypeDescriptor* targetType)override; - - vint GetPropertyCount()override; - IPropertyInfo* GetProperty(vint index)override; - bool IsPropertyExists(const WString& name, bool inheritable)override; - IPropertyInfo* GetPropertyByName(const WString& name, bool inheritable)override; - - vint GetEventCount()override; - IEventInfo* GetEvent(vint index)override; - bool IsEventExists(const WString& name, bool inheritable)override; - IEventInfo* GetEventByName(const WString& name, bool inheritable)override; - - vint GetMethodGroupCount()override; - IMethodGroupInfo* GetMethodGroup(vint index)override; - bool IsMethodGroupExists(const WString& name, bool inheritable)override; - IMethodGroupInfo* GetMethodGroupByName(const WString& name, bool inheritable)override; - IMethodGroupInfo* GetConstructorGroup()override; - }; - -#endif - -/*********************************************************************** -TypeFlagTester -***********************************************************************/ - - enum class TypeFlags - { - NonGenericType =0, - FunctionType =1<<0, - EnumerableType =1<<1, - ReadonlyListType =1<<2, - ListType =1<<3, - ObservableListType =1<<4, - ReadonlyDictionaryType =1<<5, - DictionaryType =1<<6, - }; - - template - struct ValueRetriver - { - T* pointer; - }; - - template - struct ValueRetriver - { - T* pointer; - }; - - template - struct TypeFlagTester - { - static const TypeFlags Result=TypeFlags::NonGenericType; - }; - - template - struct TypeFlagTester - { - template - static void* Inherit(const Func* source){} - static char Inherit(void* source){} - static char Inherit(const void* source){} - - static const TypeFlags Result=sizeof(Inherit(((ValueRetriver*)0)->pointer))==sizeof(void*)?TypeFlags::FunctionType:TypeFlags::NonGenericType; - }; - - template - struct TypeFlagTester - { - template - static void* Inherit(const collections::LazyList* source){} - static char Inherit(void* source){} - static char Inherit(const void* source){} - - static const TypeFlags Result=sizeof(Inherit(((ValueRetriver*)0)->pointer))==sizeof(void*)?TypeFlags::EnumerableType:TypeFlags::NonGenericType; - }; - - template - struct TypeFlagTester - { - template - static void* Inherit(const collections::IEnumerable* source){} - static char Inherit(void* source){} - static char Inherit(const void* source){} - - static const TypeFlags Result=sizeof(Inherit(((ValueRetriver*)0)->pointer))==sizeof(void*)?TypeFlags::ReadonlyListType:TypeFlags::NonGenericType; - }; - - template - struct TypeFlagTester - { - template - static void* Inherit(collections::IEnumerable* source){} - static char Inherit(void* source){} - static char Inherit(const void* source){} - - static const TypeFlags Result=sizeof(Inherit(((ValueRetriver*)0)->pointer))==sizeof(void*)?TypeFlags::ListType:TypeFlags::NonGenericType; - }; - - template - struct TypeFlagTester - { - template - static void* Inherit(collections::ObservableList* source) {} - static char Inherit(void* source) {} - static char Inherit(const void* source) {} - - static const TypeFlags Result = sizeof(Inherit(((ValueRetriver*)0)->pointer)) == sizeof(void*) ? TypeFlags::ObservableListType : TypeFlags::NonGenericType; - }; - - template - struct TypeFlagTester - { - template - static void* Inherit(const collections::Dictionary* source){} - static char Inherit(void* source){} - static char Inherit(const void* source){} - - static const TypeFlags Result=sizeof(Inherit(((ValueRetriver*)0)->pointer))==sizeof(void*)?TypeFlags::ReadonlyDictionaryType:TypeFlags::NonGenericType; - }; - - template - struct TypeFlagTester - { - template - static void* Inherit(collections::Dictionary* source){} - static char Inherit(void* source){} - static char Inherit(const void* source){} - - static const TypeFlags Result=sizeof(Inherit(((ValueRetriver*)0)->pointer))==sizeof(void*)?TypeFlags::DictionaryType:TypeFlags::NonGenericType; - }; - -/*********************************************************************** -TypeFlagSelector -***********************************************************************/ - - template - struct TypeFlagSelectorCase - { - static const TypeFlags Result=TypeFlags::NonGenericType; - }; - - template - struct TypeFlagSelectorCase - { - static const TypeFlags Result=TypeFlags::FunctionType; - }; - - template - struct TypeFlagSelectorCase - { - static const TypeFlags Result=TypeFlags::EnumerableType; - }; - - template - struct TypeFlagSelectorCase - { - static const TypeFlags Result=TypeFlags::EnumerableType; - }; - - template - struct TypeFlagSelectorCase - { - static const TypeFlags Result=TypeFlags::ListType; - }; - - template - struct TypeFlagSelectorCase - { - static const TypeFlags Result = TypeFlags::ObservableListType; - }; - - template - struct TypeFlagSelectorCase - { - static const TypeFlags Result=TypeFlags::ReadonlyListType; - }; - - template - struct TypeFlagSelectorCase - { - static const TypeFlags Result=TypeFlags::DictionaryType; - }; - - template - struct TypeFlagSelectorCase - { - static const TypeFlags Result=TypeFlags::ReadonlyDictionaryType; - }; - - template - struct TypeFlagSelector - { - static const TypeFlags Result = - TypeFlagSelectorCase< - T, - (TypeFlags) - ( (vint)TypeFlagTester::Result - | (vint)TypeFlagTester::Result - | (vint)TypeFlagTester::Result - | (vint)TypeFlagTester::Result - | (vint)TypeFlagTester::Result - | (vint)TypeFlagTester::Result - | (vint)TypeFlagTester::Result - ) - >::Result; - }; - -/*********************************************************************** -TypeHintTester -***********************************************************************/ - - template - struct TypeHintTester - { - static const TypeInfoHint Result = TypeInfoHint::Normal; - }; - - template - struct TypeHintTesterForReference - { - static const TypeInfoHint Result = TypeInfoHint::NativeCollectionReference; - }; - - template<> - struct TypeHintTesterForReference - { - static const TypeInfoHint Result = TypeInfoHint::Normal; - }; - - template<> - struct TypeHintTesterForReference - { - static const TypeInfoHint Result = TypeInfoHint::Normal; - }; - - template - struct TypeHintTester - { - static const TypeInfoHint Result = TypeHintTester::Result; - }; - - template - struct TypeHintTester - { - static const TypeInfoHint Result = TypeHintTester::Result == TypeInfoHint::Normal - ? TypeHintTesterForReference::Result>::Result - : TypeHintTester::Result - ; - }; - - template - struct TypeHintTester - { - static const TypeInfoHint Result = TypeHintTester::Result; - }; - - template - struct TypeHintTester> - { - static const TypeInfoHint Result = TypeInfoHint::LazyList; - }; - - template - struct TypeHintTester> - { - static const TypeInfoHint Result = TypeInfoHint::Array; - }; - - template - struct TypeHintTester> - { - static const TypeInfoHint Result = TypeInfoHint::List; - }; - - template - struct TypeHintTester> - { - static const TypeInfoHint Result = TypeInfoHint::SortedList; - }; - - template - struct TypeHintTester> - { - static const TypeInfoHint Result = TypeInfoHint::ObservableList; - }; - - template - struct TypeHintTester> - { - static const TypeInfoHint Result = TypeInfoHint::Dictionary; - }; - -/*********************************************************************** -TypeInfoRetriver -***********************************************************************/ - - template - struct DetailTypeInfoRetriver - { - static const ITypeInfo::Decorator Decorator=ITypeInfo::TypeDescriptor; - typedef void Type; - typedef void TempValueType; - typedef void ResultReferenceType; - typedef void ResultNonReferenceType; - }; - - template - struct TypeInfoRetriver - { - static const TypeFlags TypeFlag = TypeFlagSelector::Result; - static const TypeInfoHint Hint = TypeHintTester::Result; - static const ITypeInfo::Decorator Decorator = DetailTypeInfoRetriver::Decorator; - - typedef typename DetailTypeInfoRetriver::Type Type; - typedef typename DetailTypeInfoRetriver::TempValueType TempValueType; - typedef typename DetailTypeInfoRetriver::ResultReferenceType ResultReferenceType; - typedef typename DetailTypeInfoRetriver::ResultNonReferenceType ResultNonReferenceType; - -#ifndef VCZH_DEBUG_NO_REFLECTION - static Ptr CreateTypeInfo() - { - return DetailTypeInfoRetriver::Type, TypeFlag>::CreateTypeInfo(Hint); - } -#endif - }; - -/*********************************************************************** -TypeInfoRetriver Helper Functions (BoxValue, UnboxValue) -***********************************************************************/ - - template - struct ValueAccessor - { - }; - - /// Box an reflectable object. Its type cannot be generic. - /// The boxed value. - /// Type of the object. - /// The object to box. - /// The type descriptor of the object (optional). - template - Value BoxValue(const T& object, ITypeDescriptor* typeDescriptor=0) - { - using Type = typename RemoveCVR::Type; - return ValueAccessor::Decorator>::BoxValue(object, typeDescriptor); - } - - /// Unbox an reflectable object. Its type cannot be generic. - /// The unboxed object. - /// Type of the object. - /// The value to unbox. - /// The type descriptor of the object (optional). - /// The name of the object to provide a friendly exception message if the conversion is failed (optional). - template - T UnboxValue(const Value& value, ITypeDescriptor* typeDescriptor=0, const WString& valueName=L"value") - { - using Type = typename RemoveCVR::Type; - return ValueAccessor::Decorator>::UnboxValue(value, typeDescriptor, valueName); - } - -/*********************************************************************** -TypeInfoRetriver Helper Functions (UnboxParameter) -***********************************************************************/ - - template - struct ParameterAccessor - { - }; - - /// Box an reflectable object. It supports generic types such as containers, functions, etc. - /// The boxed value. - /// Type of the object. - /// The object to box. - /// The type descriptor of the object (optional). - template - Value BoxParameter(typename TypeInfoRetriver::ResultReferenceType object, ITypeDescriptor* typeDescriptor=0) - { - return ParameterAccessor::ResultNonReferenceType, TypeInfoRetriver::TypeFlag>::BoxParameter(object, typeDescriptor); - } - - /// Box an reflectable object. It supports generic types such as containers, functions, etc. - /// Type of the object. - /// The value to unbox. - /// The unboxed object. - /// The type descriptor of the object (optional). - /// The name of the object to provide a friendly exception message if the conversion is failed (optional). - template - void UnboxParameter(const Value& value, T& result, ITypeDescriptor* typeDescriptor=0, const WString& valueName=L"value") - { - ParameterAccessor::TypeFlag>::UnboxParameter(value, result, typeDescriptor, valueName); - } - -#ifndef VCZH_DEBUG_NO_REFLECTION - -/*********************************************************************** -Value_xs -***********************************************************************/ - - class Value_xs - { - protected: - collections::Array arguments; - public: - Value_xs() - { - } - - template - Value_xs& operator,(T& value) - { - arguments.Resize(arguments.Count() + 1); - arguments[arguments.Count() - 1] = BoxParameter(value); - return *this; - } - - template - Value_xs& operator,(const T& value) - { - arguments.Resize(arguments.Count() + 1); - arguments[arguments.Count() - 1] = BoxParameter(value); - return *this; - } - - Value_xs& operator,(const Value& value) - { - arguments.Resize(arguments.Count()+1); - arguments[arguments.Count()-1]=value; - return *this; - } - - operator collections::Array&() - { - return arguments; - } - }; - -/*********************************************************************** -CustomFieldInfoImpl -***********************************************************************/ - - template - class CustomFieldInfoImpl : public FieldInfoImpl - { - protected: - TField TClass::* fieldRef; - - Value GetValueInternal(const Value& thisObject)override - { - TClass* object=UnboxValue(thisObject); - if(object) - { - return BoxParameter(object->*fieldRef, GetReturn()->GetTypeDescriptor()); - } - return Value(); - } - - void SetValueInternal(Value& thisObject, const Value& newValue)override - { - TClass* object=UnboxValue(thisObject); - if(object) - { - UnboxParameter(newValue, object->*fieldRef, GetReturn()->GetTypeDescriptor(), L"newValue"); - } - } - public: - CustomFieldInfoImpl(ITypeDescriptor* _ownerTypeDescriptor, const WString& _name, TField TClass::* _fieldRef) - :FieldInfoImpl(_ownerTypeDescriptor, _name, TypeInfoRetriver::CreateTypeInfo()) - , fieldRef(_fieldRef) - { - } - - IPropertyInfo::ICpp* GetCpp()override - { - return nullptr; - } - }; - -/*********************************************************************** -PrimitiveTypeDescriptor -***********************************************************************/ - - template - class SerializableValueType : public Object, public virtual IValueType - { - public: - Value CreateDefault()override - { - return BoxValue(TypedValueSerializerProvider::GetDefaultValue()); - } - - IBoxedValue::CompareResult Compare(const Value& a, const Value& b)override - { - auto va = UnboxValue(a); - auto vb = UnboxValue(b); - return TypedValueSerializerProvider::Compare(va, vb); - } - }; - - template - class SerializableType : public Object, public virtual ISerializableType - { - public: - bool Serialize(const Value& input, WString& output)override - { - return TypedValueSerializerProvider::Serialize(UnboxValue(input), output); - } - - bool Deserialize(const WString& input, Value& output)override - { - T value; - if (!TypedValueSerializerProvider::Deserialize(input, value)) - { - return false; - } - output = BoxValue(value); - return true; - } - }; - - template - class PrimitiveTypeDescriptor : public TypedValueTypeDescriptorBase - { - protected: - void LoadInternal()override - { - this->valueType = new SerializableValueType(); - this->serializableType = new SerializableType(); - } - }; - -/*********************************************************************** -EnumTypeDescriptor -***********************************************************************/ - - template - class EnumValueType : public Object, public virtual IValueType - { - public: - Value CreateDefault()override - { - return BoxValue(static_cast(0)); - } - - IBoxedValue::CompareResult Compare(const Value& a, const Value& b)override - { - auto ea = static_cast(UnboxValue(a)); - auto eb = static_cast(UnboxValue(b)); - if (ea < eb) return IBoxedValue::Smaller; - if (ea > eb)return IBoxedValue::Greater; - return IBoxedValue::Equal; - } - }; - - template - class EnumType : public Object, public virtual IEnumType - { - protected: - collections::Dictionary candidates; - - public: - void AddItem(WString name, T value) - { - candidates.Add(name, value); - } - - bool IsFlagEnum()override - { - return Flag; - } - - vint GetItemCount()override - { - return candidates.Count(); - } - - WString GetItemName(vint index)override - { - if (index < 0 || index >= candidates.Count()) - { - return L""; - } - return candidates.Keys()[index]; - } - - vuint64_t GetItemValue(vint index)override - { - if (index < 0 || index >= candidates.Count()) - { - return 0; - } - return static_cast(candidates.Values()[index]); - } - - vint IndexOfItem(WString name)override - { - return candidates.Keys().IndexOf(name); - } - - Value ToEnum(vuint64_t value)override - { - return BoxValue(static_cast(value)); - } - - vuint64_t FromEnum(const Value& value)override - { - return static_cast(UnboxValue(value)); - } - }; - - template - class EnumTypeDescriptor : public TypedValueTypeDescriptorBase - { - using TEnumType = EnumType; - protected: - Ptr enumType; - - void LoadInternal()override - { - this->enumType = new TEnumType; - this->valueType = new EnumValueType(); - TypedValueTypeDescriptorBase::enumType = enumType; - } - }; - -/*********************************************************************** -StructTypeDescriptor -***********************************************************************/ - - template - class StructValueType : public Object, public virtual IValueType - { - public: - Value CreateDefault()override - { - return BoxValue(T{}); - } - - IBoxedValue::CompareResult Compare(const Value& a, const Value& b)override - { - return IBoxedValue::NotComparable; - } - }; - - template - class StructTypeDescriptor : public TypedValueTypeDescriptorBase - { - protected: - template - class StructFieldInfo : public FieldInfoImpl - { - protected: - TField T::* field; - - Value GetValueInternal(const Value& thisObject)override - { - auto structValue = thisObject.GetBoxedValue().Cast>(); - if (!structValue) - { - throw ArgumentTypeMismtatchException(L"thisObject", GetOwnerTypeDescriptor(), Value::BoxedValue, thisObject); - } - return BoxValue(structValue->value.*field); - } - - void SetValueInternal(Value& thisObject, const Value& newValue)override - { - auto structValue = thisObject.GetBoxedValue().Cast>(); - if (!structValue) - { - throw ArgumentTypeMismtatchException(L"thisObject", GetOwnerTypeDescriptor(), Value::BoxedValue, thisObject); - } - (structValue->value.*field) = UnboxValue(newValue); - } - public: - StructFieldInfo(ITypeDescriptor* _ownerTypeDescriptor, TField T::* _field, const WString& _name) - :field(_field) - , FieldInfoImpl(_ownerTypeDescriptor, _name, TypeInfoRetriver::CreateTypeInfo()) - { - } - - IPropertyInfo::ICpp* GetCpp()override - { - return nullptr; - } - }; - - protected: - collections::Dictionary> fields; - - public: - StructTypeDescriptor() - { - this->valueType = new StructValueType(); - } - - vint GetPropertyCount()override - { - this->Load(); - return fields.Count(); - } - - IPropertyInfo* GetProperty(vint index)override - { - this->Load(); - if (index < 0 || index >= fields.Count()) - { - return nullptr; - } - return fields.Values()[index].Obj(); - } - - bool IsPropertyExists(const WString& name, bool inheritable)override - { - this->Load(); - return fields.Keys().Contains(name); - } - - IPropertyInfo* GetPropertyByName(const WString& name, bool inheritable)override - { - this->Load(); - vint index = fields.Keys().IndexOf(name); - if (index == -1) return nullptr; - return fields.Values()[index].Obj(); - } - }; -#endif - } - } -} - -#endif - - -/*********************************************************************** -.\REFLECTION\GUITYPEDESCRIPTORBUILDER_CONTAINER.H -***********************************************************************/ -/*********************************************************************** -Vczh Library++ 3.0 -Developer: Zihan Chen(vczh) -Framework::Reflection - -Interfaces: -***********************************************************************/ - -#ifndef VCZH_REFLECTION_GUITYPEDESCRIPTORBUILDER_CONTAINER -#define VCZH_REFLECTION_GUITYPEDESCRIPTORBUILDER_CONTAINER - - -namespace vl -{ - namespace reflection - { - namespace description - { - -/*********************************************************************** -Enumerable Wrappers -***********************************************************************/ - - template - class TypedEnumerator : public Object, public collections::IEnumerator - { - private: - Ptr enumerable; - Ptr enumerator; - vint index; - T value; - - public: - TypedEnumerator(Ptr _enumerable, vint _index, const T& _value) - :enumerable(_enumerable) - ,index(_index) - ,value(_value) - { - enumerator=enumerable->CreateEnumerator(); - vint current=-1; - while(current++Next(); - } - } - - TypedEnumerator(Ptr _enumerable) - :enumerable(_enumerable) - ,index(-1) - { - Reset(); - } - - collections::IEnumerator* Clone()const override - { - return new TypedEnumerator(enumerable, index, value); - } - - const T& Current()const override - { - return value; - } - - vint Index()const override - { - return index; - } - - bool Next() override - { - if(enumerator->Next()) - { - index++; - value=UnboxValue(enumerator->GetCurrent()); - return true; - } - else - { - return false; - } - } - - void Reset() override - { - index=-1; - enumerator=enumerable->CreateEnumerator(); - } - }; - - template - collections::LazyList GetLazyList(Ptr value) - { - return collections::LazyList(new TypedEnumerator(value)); - } - - template - collections::LazyList GetLazyList(Ptr value) - { - return collections::Range(0, value->GetCount()) - .Select([value](vint i) - { - return UnboxValue(value->Get(i)); - }); - } - - template - collections::LazyList GetLazyList(Ptr value) - { - return GetLazyList(Ptr(value)); - } - - template - collections::LazyList GetLazyList(Ptr value) - { - return GetLazyList(Ptr(value)); - } - - template - collections::LazyList> GetLazyList(Ptr value) - { - return collections::Range(0, value->GetCount()) - .Select([value](vint i) - { - return collections::Pair(UnboxValue(value->GetKeys()->Get(i)), UnboxValue(value->GetValues()->Get(i))); - }); - } - - template - collections::LazyList> GetLazyList(Ptr value) - { - return GetLazyList(Ptr(value)); - } - -/*********************************************************************** -Collection Wrappers -***********************************************************************/ - - namespace trait_helper - { - template - struct RemovePtr - { - typedef T Type; - }; - - template - struct RemovePtr - { - typedef T Type; - }; - - template - struct RemovePtr> - { - typedef T Type; - }; - } - -#pragma warning(push) -#pragma warning(disable:4250) - template - class ValueEnumeratorWrapper : public Object, public virtual IValueEnumerator - { - protected: - typedef typename trait_helper::RemovePtr::Type ContainerType; - typedef typename ContainerType::ElementType ElementType; - - T wrapperPointer; - public: - ValueEnumeratorWrapper(const T& _wrapperPointer) - :wrapperPointer(_wrapperPointer) - { - } - - Value GetCurrent()override - { - return BoxValue(wrapperPointer->Current()); - } - - vint GetIndex()override - { - return wrapperPointer->Index(); - } - - bool Next()override - { - return wrapperPointer->Next(); - } - }; - - template - class ValueEnumerableWrapper : public Object, public virtual IValueEnumerable - { - protected: - typedef typename trait_helper::RemovePtr::Type ContainerType; - typedef typename ContainerType::ElementType ElementType; - - T wrapperPointer; - public: - ValueEnumerableWrapper(const T& _wrapperPointer) - :wrapperPointer(_wrapperPointer) - { - } - - Ptr CreateEnumerator()override - { - return new ValueEnumeratorWrapper>>(wrapperPointer->CreateEnumerator()); - } - }; - -#define WRAPPER_POINTER ValueEnumerableWrapper::wrapperPointer - - template - class ValueReadonlyListWrapper : public ValueEnumerableWrapper, public virtual IValueReadonlyList - { - protected: - typedef typename trait_helper::RemovePtr::Type ContainerType; - typedef typename ContainerType::ElementType ElementType; - typedef typename KeyType::Type ElementKeyType; - - public: - ValueReadonlyListWrapper(const T& _wrapperPointer) - :ValueEnumerableWrapper(_wrapperPointer) - { - } - - vint GetCount()override - { - return WRAPPER_POINTER->Count(); - } - - Value Get(vint index)override - { - return BoxValue(WRAPPER_POINTER->Get(index)); - } - - bool Contains(const Value& value)override - { - ElementKeyType item=UnboxValue(value); - return WRAPPER_POINTER->Contains(item); - } - - vint IndexOf(const Value& value)override - { - ElementKeyType item=UnboxValue(value); - return WRAPPER_POINTER->IndexOf(item); - } - }; - - template - class ValueListWrapper : public ValueReadonlyListWrapper, public virtual IValueList - { - protected: - typedef typename trait_helper::RemovePtr::Type ContainerType; - typedef typename ContainerType::ElementType ElementType; - typedef typename KeyType::Type ElementKeyType; - - public: - ValueListWrapper(const T& _wrapperPointer) - :ValueReadonlyListWrapper(_wrapperPointer) - { - } - - void Set(vint index, const Value& value)override - { - ElementType item=UnboxValue(value); - WRAPPER_POINTER->Set(index, item); - } - - vint Add(const Value& value)override - { - ElementType item=UnboxValue(value); - return WRAPPER_POINTER->Add(item); - } - - vint Insert(vint index, const Value& value)override - { - ElementType item=UnboxValue(value); - return WRAPPER_POINTER->Insert(index, item); - } - - bool Remove(const Value& value)override - { - ElementKeyType item=UnboxValue(value); - return WRAPPER_POINTER->Remove(item); - } - - bool RemoveAt(vint index)override - { - return WRAPPER_POINTER->RemoveAt(index); - } - - void Clear()override - { - WRAPPER_POINTER->Clear(); - } - }; - - template - class ValueObservableListWrapper : public ValueListWrapper, public virtual IValueObservableList - { - public: - ValueObservableListWrapper(const T& _wrapperPointer) - :ValueListWrapper(_wrapperPointer) - { - } - }; - -#undef WRAPPER_POINTER - - template - class ValueReadonlyDictionaryWrapper : public virtual Object, public virtual IValueReadonlyDictionary - { - protected: - typedef typename trait_helper::RemovePtr::Type ContainerType; - typedef typename ContainerType::KeyContainer KeyContainer; - typedef typename ContainerType::ValueContainer ValueContainer; - typedef typename KeyContainer::ElementType KeyValueType; - typedef typename KeyType::Type KeyKeyType; - typedef typename ValueContainer::ElementType ValueType; - - T wrapperPointer; - Ptr keys; - Ptr values; - public: - ValueReadonlyDictionaryWrapper(const T& _wrapperPointer) - :wrapperPointer(_wrapperPointer) - { - } - - Ptr GetKeys()override - { - if(!keys) - { - keys=new ValueReadonlyListWrapper(&wrapperPointer->Keys()); - } - return keys; - } - - Ptr GetValues()override - { - if(!values) - { - values=new ValueReadonlyListWrapper(&wrapperPointer->Values()); - } - return values; - } - - vint GetCount()override - { - return wrapperPointer->Count(); - } - - Value Get(const Value& key)override - { - KeyKeyType item=UnboxValue(key); - ValueType result=wrapperPointer->Get(item); - return BoxValue(result); - } - }; - -#define WRAPPER_POINTER ValueReadonlyDictionaryWrapper::wrapperPointer -#define KEY_VALUE_TYPE typename ValueReadonlyDictionaryWrapper::KeyValueType -#define VALUE_TYPE typename ValueReadonlyDictionaryWrapper::ValueType -#define KEY_KEY_TYPE typename ValueReadonlyDictionaryWrapper::KeyKeyType - - template - class ValueDictionaryWrapper : public virtual ValueReadonlyDictionaryWrapper, public virtual IValueDictionary - { - public: - ValueDictionaryWrapper(const T& _wrapperPointer) - :ValueReadonlyDictionaryWrapper(_wrapperPointer) - { - } - - void Set(const Value& key, const Value& value)override - { - KEY_VALUE_TYPE item=UnboxValue(key); - VALUE_TYPE result=UnboxValue(value); - WRAPPER_POINTER->Set(item, result); - } - - bool Remove(const Value& key)override - { - KEY_KEY_TYPE item=UnboxValue(key); - return WRAPPER_POINTER->Remove(item); - } - - void Clear()override - { - WRAPPER_POINTER->Clear(); - } - }; -#undef WRAPPER_POINTER -#undef KEY_VALUE_TYPE -#undef VALUE_TYPE -#undef KEY_KEY_TYPE -#pragma warning(pop) - -/*********************************************************************** -DetailTypeInfoRetriver -***********************************************************************/ - - template - struct DetailTypeInfoRetriver - { - typedef DetailTypeInfoRetriver UpLevelRetriver; - - static const ITypeInfo::Decorator Decorator=UpLevelRetriver::Decorator; - typedef IValueEnumerable Type; - typedef typename UpLevelRetriver::TempValueType TempValueType; - typedef typename UpLevelRetriver::ResultReferenceType ResultReferenceType; - typedef typename UpLevelRetriver::ResultNonReferenceType ResultNonReferenceType; - -#ifndef VCZH_DEBUG_NO_REFLECTION - static Ptr CreateTypeInfo(TypeInfoHint hint) - { - typedef typename DetailTypeInfoRetriver::Type ContainerType; - typedef typename ContainerType::ElementType ElementType; - - auto arrayType = MakePtr(Description::GetAssociatedTypeDescriptor(), hint); - - auto genericType = MakePtr(arrayType); - genericType->AddGenericArgument(TypeInfoRetriver::CreateTypeInfo()); - - auto type = MakePtr(genericType); - return type; - } -#endif - }; - - template - struct DetailTypeInfoRetriver - { - typedef DetailTypeInfoRetriver UpLevelRetriver; - - static const ITypeInfo::Decorator Decorator=UpLevelRetriver::Decorator; - typedef IValueReadonlyList Type; - typedef typename UpLevelRetriver::TempValueType TempValueType; - typedef typename UpLevelRetriver::ResultReferenceType ResultReferenceType; - typedef typename UpLevelRetriver::ResultNonReferenceType ResultNonReferenceType; - -#ifndef VCZH_DEBUG_NO_REFLECTION - static Ptr CreateTypeInfo(TypeInfoHint hint) - { - typedef typename DetailTypeInfoRetriver::Type ContainerType; - typedef typename ContainerType::ElementType ElementType; - - auto arrayType = MakePtr(Description::GetAssociatedTypeDescriptor(), hint); - - auto genericType = MakePtr(arrayType); - genericType->AddGenericArgument(TypeInfoRetriver::CreateTypeInfo()); - - auto type = MakePtr(genericType); - return type; - } -#endif - }; - - template - struct DetailTypeInfoRetriver - { - typedef DetailTypeInfoRetriver UpLevelRetriver; - - static const ITypeInfo::Decorator Decorator=UpLevelRetriver::Decorator; - typedef IValueList Type; - typedef typename UpLevelRetriver::TempValueType TempValueType; - typedef typename UpLevelRetriver::ResultReferenceType ResultReferenceType; - typedef typename UpLevelRetriver::ResultNonReferenceType ResultNonReferenceType; - -#ifndef VCZH_DEBUG_NO_REFLECTION - static Ptr CreateTypeInfo(TypeInfoHint hint) - { - typedef typename DetailTypeInfoRetriver::Type ContainerType; - typedef typename ContainerType::ElementType ElementType; - - auto arrayType = MakePtr(Description::GetAssociatedTypeDescriptor(), hint); - - auto genericType = MakePtr(arrayType); - genericType->AddGenericArgument(TypeInfoRetriver::CreateTypeInfo()); - - auto type = MakePtr(genericType); - return type; - } -#endif - }; - - template - struct DetailTypeInfoRetriver - { - typedef DetailTypeInfoRetriver UpLevelRetriver; - - static const ITypeInfo::Decorator Decorator = UpLevelRetriver::Decorator; - typedef IValueObservableList Type; - typedef typename UpLevelRetriver::TempValueType TempValueType; - typedef typename UpLevelRetriver::ResultReferenceType ResultReferenceType; - typedef typename UpLevelRetriver::ResultNonReferenceType ResultNonReferenceType; - -#ifndef VCZH_DEBUG_NO_REFLECTION - static Ptr CreateTypeInfo(TypeInfoHint hint) - { - typedef typename DetailTypeInfoRetriver::Type ContainerType; - typedef typename ContainerType::ElementType ElementType; - - auto arrayType = MakePtr(Description::GetAssociatedTypeDescriptor(), hint); - - auto genericType = MakePtr(arrayType); - genericType->AddGenericArgument(TypeInfoRetriver::CreateTypeInfo()); - - auto type = MakePtr(genericType); - return type; - } -#endif - }; - - template - struct DetailTypeInfoRetriver - { - typedef DetailTypeInfoRetriver UpLevelRetriver; - - static const ITypeInfo::Decorator Decorator=UpLevelRetriver::Decorator; - typedef IValueReadonlyList Type; - typedef typename UpLevelRetriver::TempValueType TempValueType; - typedef typename UpLevelRetriver::ResultReferenceType ResultReferenceType; - typedef typename UpLevelRetriver::ResultNonReferenceType ResultNonReferenceType; - -#ifndef VCZH_DEBUG_NO_REFLECTION - static Ptr CreateTypeInfo(TypeInfoHint hint) - { - typedef typename DetailTypeInfoRetriver::Type ContainerType; - typedef typename ContainerType::KeyContainer KeyContainer; - typedef typename ContainerType::ValueContainer ValueContainer; - typedef typename KeyContainer::ElementType KeyType; - typedef typename ValueContainer::ElementType ValueType; - - auto arrayType = MakePtr(Description::GetAssociatedTypeDescriptor(), hint); - - auto genericType = MakePtr(arrayType); - genericType->AddGenericArgument(TypeInfoRetriver::CreateTypeInfo()); - genericType->AddGenericArgument(TypeInfoRetriver::CreateTypeInfo()); - - auto type = MakePtr(genericType); - return type; - } -#endif - }; - - template - struct DetailTypeInfoRetriver - { - typedef DetailTypeInfoRetriver UpLevelRetriver; - - static const ITypeInfo::Decorator Decorator=UpLevelRetriver::Decorator; - typedef IValueReadonlyList Type; - typedef typename UpLevelRetriver::TempValueType TempValueType; - typedef typename UpLevelRetriver::ResultReferenceType ResultReferenceType; - typedef typename UpLevelRetriver::ResultNonReferenceType ResultNonReferenceType; - -#ifndef VCZH_DEBUG_NO_REFLECTION - static Ptr CreateTypeInfo(TypeInfoHint hint) - { - typedef typename DetailTypeInfoRetriver::Type ContainerType; - typedef typename ContainerType::KeyContainer KeyContainer; - typedef typename ContainerType::ValueContainer ValueContainer; - typedef typename KeyContainer::ElementType KeyType; - typedef typename ValueContainer::ElementType ValueType; - - auto arrayType = MakePtr(Description::GetAssociatedTypeDescriptor(), hint); - - auto genericType = MakePtr(arrayType); - genericType->AddGenericArgument(TypeInfoRetriver::CreateTypeInfo()); - genericType->AddGenericArgument(TypeInfoRetriver::CreateTypeInfo()); - - auto type = MakePtr(genericType); - return type; - } -#endif - }; - -/*********************************************************************** -ParameterAccessor -***********************************************************************/ - - template - struct ParameterAccessor, TypeFlags::EnumerableType> - { - static Value BoxParameter(collections::LazyList& object, ITypeDescriptor* typeDescriptor) - { - Ptr result=IValueEnumerable::Create( - collections::From(object) - .Select([](const T& item) - { - return BoxValue(item); - }) - ); - - ITypeDescriptor* td = nullptr; -#ifndef VCZH_DEBUG_NO_REFLECTION - td = Description::GetAssociatedTypeDescriptor(); -#endif - return BoxValue>(result, td); - } - - static void UnboxParameter(const Value& value, collections::LazyList& result, ITypeDescriptor* typeDescriptor, const WString& valueName) - { - typedef typename collections::LazyList::ElementType ElementType; - Ptr listProxy=UnboxValue>(value, typeDescriptor, valueName); - result=GetLazyList(listProxy); - } - }; - - template - struct ParameterAccessor - { - static Value BoxParameter(T& object, ITypeDescriptor* typeDescriptor) - { - Ptr result=new ValueReadonlyListWrapper(&object); - - ITypeDescriptor* td = nullptr; -#ifndef VCZH_DEBUG_NO_REFLECTION - td = Description::GetAssociatedTypeDescriptor(); -#endif - return BoxValue>(result, td); - } - - static void UnboxParameter(const Value& value, T& result, ITypeDescriptor* typeDescriptor, const WString& valueName) - { - typedef typename T::ElementType ElementType; - Ptr listProxy=UnboxValue>(value, typeDescriptor, valueName); - collections::LazyList lazyList=GetLazyList(listProxy); - collections::CopyFrom(result, lazyList); - } - }; - - template - struct ParameterAccessor - { - static Value BoxParameter(T& object, ITypeDescriptor* typeDescriptor) - { - Ptr result=new ValueListWrapper(&object); - - ITypeDescriptor* td = nullptr; -#ifndef VCZH_DEBUG_NO_REFLECTION - td = Description::GetAssociatedTypeDescriptor(); -#endif - return BoxValue>(result, td); - } - - static void UnboxParameter(const Value& value, T& result, ITypeDescriptor* typeDescriptor, const WString& valueName) - { - typedef typename T::ElementType ElementType; - Ptr listProxy=UnboxValue>(value, typeDescriptor, valueName); - collections::LazyList lazyList=GetLazyList(listProxy); - collections::CopyFrom(result, lazyList); - } - }; - - template - struct ParameterAccessor, TypeFlags::ObservableListType> - { - static Value BoxParameter(collections::ObservableList& object, ITypeDescriptor* typeDescriptor) - { - ITypeDescriptor* td = nullptr; -#ifndef VCZH_DEBUG_NO_REFLECTION - td = Description::GetAssociatedTypeDescriptor(); -#endif - return BoxValue>(object.GetWrapper(), td); - } - }; - - template - struct ParameterAccessor - { - static Value BoxParameter(T& object, ITypeDescriptor* typeDescriptor) - { - Ptr result=new ValueReadonlyDictionaryWrapper(&object); - - ITypeDescriptor* td = nullptr; -#ifndef VCZH_DEBUG_NO_REFLECTION - td = Description::GetAssociatedTypeDescriptor(); -#endif - return BoxValue>(result, td); - } - - static void UnboxParameter(const Value& value, T& result, ITypeDescriptor* typeDescriptor, const WString& valueName) - { - typedef typename T::KeyContainer KeyContainer; - typedef typename T::ValueContainer ValueContainer; - typedef typename KeyContainer::ElementType KeyType; - typedef typename ValueContainer::ElementType ValueType; - - Ptr dictionaryProxy=UnboxValue>(value, typeDescriptor, valueName); - collections::LazyList> lazyList=GetLazyList(dictionaryProxy); - collections::CopyFrom(result, lazyList); - } - }; - - template - struct ParameterAccessor - { - static Value BoxParameter(T& object, ITypeDescriptor* typeDescriptor) - { - Ptr result=new ValueDictionaryWrapper(&object); - - ITypeDescriptor* td = nullptr; -#ifndef VCZH_DEBUG_NO_REFLECTION - td = Description::GetAssociatedTypeDescriptor(); -#endif - return BoxValue>(result, td); - } - - static void UnboxParameter(const Value& value, T& result, ITypeDescriptor* typeDescriptor, const WString& valueName) - { - typedef typename T::KeyContainer KeyContainer; - typedef typename T::ValueContainer ValueContainer; - typedef typename KeyContainer::ElementType KeyType; - typedef typename ValueContainer::ElementType ValueType; - - Ptr dictionaryProxy=UnboxValue>(value, typeDescriptor, valueName); - collections::LazyList> lazyList=GetLazyList(dictionaryProxy); - collections::CopyFrom(result, lazyList); - } - }; - } - } - - namespace collections - { - template::Type> - class ObservableListBase : public Object, public virtual collections::IEnumerable - { - protected: - collections::List items; - - virtual void NotifyUpdateInternal(vint start, vint count, vint newCount) - { - } - - virtual bool QueryInsert(vint index, const T& value) - { - return true; - } - - virtual void BeforeInsert(vint index, const T& value) - { - } - - virtual void AfterInsert(vint index, const T& value) - { - } - - virtual bool QueryRemove(vint index, const T& value) - { - return true; - } - - virtual void BeforeRemove(vint index, const T& value) - { - } - - virtual void AfterRemove(vint index, vint count) - { - } - - public: - ObservableListBase() - { - } - - ~ObservableListBase() - { - } - - collections::IEnumerator* CreateEnumerator()const - { - return items.CreateEnumerator(); - } - - bool NotifyUpdate(vint start, vint count = 1) - { - if (start<0 || start >= items.Count() || count <= 0 || start + count>items.Count()) - { - return false; - } - else - { - NotifyUpdateInternal(start, count, count); - return true; - } - } - - bool Contains(const K& item)const - { - return items.Contains(item); - } - - vint Count()const - { - return items.Count(); - } - - vint Count() - { - return items.Count(); - } - - const T& Get(vint index)const - { - return items.Get(index); - } - - const T& operator[](vint index)const - { - return items.Get(index); - } - - vint IndexOf(const K& item)const - { - return items.IndexOf(item); - } - - vint Add(const T& item) - { - return Insert(items.Count(), item); - } - - bool Remove(const K& item) - { - vint index = items.IndexOf(item); - if (index == -1) return false; - return RemoveAt(index); - } - - bool RemoveAt(vint index) - { - if (0 <= index && index < items.Count() && QueryRemove(index, items[index])) - { - BeforeRemove(index, items[index]); - T item = items[index]; - items.RemoveAt(index); - AfterRemove(index, 1); - NotifyUpdateInternal(index, 1, 0); - return true; - } - return false; - } - - bool RemoveRange(vint index, vint count) - { - if (count <= 0) return false; - if (0 <= index && index - class ObservableList : public ObservableListBase - { - protected: - Ptr observableList; - - void NotifyUpdateInternal(vint start, vint count, vint newCount)override - { - if (observableList) - { - observableList->ItemChanged(start, count, newCount); - } - } - public: - - Ptr GetWrapper() - { - if (!observableList) - { - observableList = new reflection::description::ValueObservableListWrapper*>(this); - } - return observableList; - } - }; - - namespace randomaccess_internal - { - template - struct RandomAccessable> - { - static const bool CanRead = true; - static const bool CanResize = false; - }; - - template - struct RandomAccessable> - { - static const bool CanRead = true; - static const bool CanResize = false; - }; - } - } -} - -#endif - -/*********************************************************************** -.\REFLECTION\GUITYPEDESCRIPTORBUILDER_STRUCT.H -***********************************************************************/ -/*********************************************************************** -Vczh Library++ 3.0 -Developer: Zihan Chen(vczh) -Framework::Reflection - -Interfaces: -***********************************************************************/ - -#ifndef VCZH_REFLECTION_GUITYPEDESCRIPTORBUILDER_STRUCT -#define VCZH_REFLECTION_GUITYPEDESCRIPTORBUILDER_STRUCT - - -namespace vl -{ - namespace reflection - { - namespace description - { - -/*********************************************************************** -DetailTypeInfoRetriver -***********************************************************************/ - - template - struct DetailTypeInfoRetriver - { - static const ITypeInfo::Decorator Decorator=ITypeInfo::TypeDescriptor; - typedef T Type; - typedef T TempValueType; - typedef T& ResultReferenceType; - typedef T ResultNonReferenceType; - -#ifndef VCZH_DEBUG_NO_REFLECTION - static Ptr CreateTypeInfo(TypeInfoHint hint) - { - return MakePtr(GetTypeDescriptor(), hint); - } -#endif - }; - - template - struct DetailTypeInfoRetriver - { - typedef DetailTypeInfoRetriver UpLevelRetriver; - - static const ITypeInfo::Decorator Decorator=UpLevelRetriver::Decorator; - typedef typename UpLevelRetriver::Type Type; - typedef T TempValueType; - typedef const T& ResultReferenceType; - typedef const T ResultNonReferenceType; - -#ifndef VCZH_DEBUG_NO_REFLECTION - static Ptr CreateTypeInfo(TypeInfoHint hint) - { - return TypeInfoRetriver::CreateTypeInfo(); - } -#endif - }; - - template - struct DetailTypeInfoRetriver - { - typedef DetailTypeInfoRetriver UpLevelRetriver; - - static const ITypeInfo::Decorator Decorator=UpLevelRetriver::Decorator; - typedef typename UpLevelRetriver::Type Type; - typedef T TempValueType; - typedef T& ResultReferenceType; - typedef T ResultNonReferenceType; - -#ifndef VCZH_DEBUG_NO_REFLECTION - static Ptr CreateTypeInfo(TypeInfoHint hint) - { - return TypeInfoRetriver::CreateTypeInfo(); - } -#endif - }; - - template - struct DetailTypeInfoRetriver - { - typedef DetailTypeInfoRetriver UpLevelRetriver; - - static const ITypeInfo::Decorator Decorator=ITypeInfo::RawPtr; - typedef typename UpLevelRetriver::Type Type; - typedef T* TempValueType; - typedef T*& ResultReferenceType; - typedef T* ResultNonReferenceType; - -#ifndef VCZH_DEBUG_NO_REFLECTION - static Ptr CreateTypeInfo(TypeInfoHint hint) - { - return MakePtr(TypeInfoRetriver::CreateTypeInfo()); - } -#endif - }; - - template - struct DetailTypeInfoRetriver, TypeFlags::NonGenericType> - { - typedef DetailTypeInfoRetriver UpLevelRetriver; - - static const ITypeInfo::Decorator Decorator=ITypeInfo::SharedPtr; - typedef typename UpLevelRetriver::Type Type; - typedef Ptr TempValueType; - typedef Ptr& ResultReferenceType; - typedef Ptr ResultNonReferenceType; - -#ifndef VCZH_DEBUG_NO_REFLECTION - static Ptr CreateTypeInfo(TypeInfoHint hint) - { - return MakePtr(TypeInfoRetriver::CreateTypeInfo()); - } -#endif - }; - - template - struct DetailTypeInfoRetriver, TypeFlags::NonGenericType> - { - typedef DetailTypeInfoRetriver UpLevelRetriver; - - static const ITypeInfo::Decorator Decorator=ITypeInfo::Nullable; - typedef typename UpLevelRetriver::Type Type; - typedef Nullable TempValueType; - typedef Nullable& ResultReferenceType; - typedef Nullable ResultNonReferenceType; - -#ifndef VCZH_DEBUG_NO_REFLECTION - static Ptr CreateTypeInfo(TypeInfoHint hint) - { - return MakePtr(TypeInfoRetriver::CreateTypeInfo()); - } -#endif - }; - - template - struct DetailTypeInfoRetriver - { - typedef DetailTypeInfoRetriver UpLevelRetriver; - - static const ITypeInfo::Decorator Decorator=UpLevelRetriver::Decorator; - typedef typename UpLevelRetriver::Type Type; - typedef typename UpLevelRetriver::TempValueType TempValueType; - typedef T& ResultReferenceType; - typedef T ResultNonReferenceType; - -#ifndef VCZH_DEBUG_NO_REFLECTION - static Ptr CreateTypeInfo(TypeInfoHint hint) - { - return TypeInfoRetriver::CreateTypeInfo(); - } -#endif - }; - - template<> - struct TypeInfoRetriver : public TypeInfoRetriver - { - }; - -/*********************************************************************** -ParameterAccessor -***********************************************************************/ - - template - struct ParameterAccessor - { - static Value BoxParameter(const T& object, ITypeDescriptor* typeDescriptor) - { - return BoxValue(object, typeDescriptor); - } - - static void UnboxParameter(const Value& value, T& result, ITypeDescriptor* typeDescriptor, const WString& valueName) - { - result=UnboxValue(value, typeDescriptor, valueName); - } - }; - - template - struct ValueAccessor - { - static Value BoxValue(T* object, ITypeDescriptor* typeDescriptor) - { - return Value::From(object); - } - - static T* UnboxValue(const Value& value, ITypeDescriptor* typeDescriptor, const WString& valueName) - { - if(value.IsNull()) return nullptr; - T* result = nullptr; - if (value.GetRawPtr()) - { - result = value.GetRawPtr()->SafeAggregationCast(); - } - if(!result) - { -#ifndef VCZH_DEBUG_NO_REFLECTION - if(!typeDescriptor) - { - typeDescriptor=GetTypeDescriptor(); - } - throw ArgumentTypeMismtatchException(valueName, typeDescriptor, Value::RawPtr, value); -#else - CHECK_FAIL(L"vl::reflection::description::UnboxValue()#Argument type mismatch."); -#endif - } - return result; - } - }; - - template - struct ValueAccessor, ITypeInfo::SharedPtr> - { - static Value BoxValue(Ptr object, ITypeDescriptor* typeDescriptor) - { - return Value::From(object); - } - - static Ptr UnboxValue(const Value& value, ITypeDescriptor* typeDescriptor, const WString& valueName) - { - if (value.IsNull()) return nullptr; - Ptr result; - if(value.GetValueType()==Value::RawPtr || value.GetValueType()==Value::SharedPtr) - { - result = value.GetRawPtr()->SafeAggregationCast(); - } - if(!result) - { -#ifndef VCZH_DEBUG_NO_REFLECTION - if(!typeDescriptor) - { - typeDescriptor=GetTypeDescriptor(); - } - throw ArgumentTypeMismtatchException(valueName, typeDescriptor, Value::SharedPtr, value); -#else - CHECK_FAIL(L"vl::reflection::description::UnboxValue()#Argument type mismatch."); -#endif - } - return result; - } - }; - - template - struct ValueAccessor, ITypeInfo::Nullable> - { - static Value BoxValue(Nullable object, ITypeDescriptor* typeDescriptor) - { - return object?ValueAccessor::BoxValue(object.Value(), typeDescriptor):Value(); - } - - static Nullable UnboxValue(const Value& value, ITypeDescriptor* typeDescriptor, const WString& valueName) - { - if(value.IsNull()) - { - return Nullable(); - } - else - { - return ValueAccessor::UnboxValue(value, typeDescriptor, valueName); - } - } - }; - - template - struct ValueAccessor - { - static Value BoxValue(const T& object, ITypeDescriptor* typeDescriptor) - { -#ifndef VCZH_DEBUG_NO_REFLECTION - if(!typeDescriptor) - { - typeDescriptor = GetTypeDescriptor::Type>(); - } -#endif - using Type = typename vl::RemoveCVR::Type; - return Value::From(new IValueType::TypedBox(object), typeDescriptor); - } - - static T UnboxValue(const Value& value, ITypeDescriptor* typeDescriptor, const WString& valueName) - { - using Type = typename vl::RemoveCVR::Type; - if (auto unboxedValue = value.GetBoxedValue().Cast>()) - { - return unboxedValue->value; - } - else - { -#ifndef VCZH_DEBUG_NO_REFLECTION - if (!typeDescriptor) - { - typeDescriptor = GetTypeDescriptor::Type>(); - } - throw ArgumentTypeMismtatchException(valueName, typeDescriptor, Value::BoxedValue, value); -#else - CHECK_FAIL(L"vl::reflection::description::UnboxValue()#Argument type mismatch."); -#endif - } - } - }; - - template<> - struct ValueAccessor - { - static Value BoxValue(const Value& object, ITypeDescriptor* typeDescriptor) - { - return object; - } - - static Value UnboxValue(const Value& value, ITypeDescriptor* typeDescriptor, const WString& valueName) - { - return value; - } - }; - - template<> - struct ValueAccessor - { - static Value BoxValue(const VoidValue& object, ITypeDescriptor* typeDescriptor) - { - return Value(); - } - - static VoidValue UnboxValue(const Value& value, ITypeDescriptor* typeDescriptor, const WString& valueName) - { - return VoidValue(); - } - }; - } - } -} - -#endif - -/*********************************************************************** -.\REFLECTION\GUITYPEDESCRIPTORCPPHELPER.H -***********************************************************************/ -/*********************************************************************** -Vczh Library++ 3.0 -Developer: Zihan Chen(vczh) -Framework::Reflection - -Interfaces: -***********************************************************************/ - -#ifndef VCZH_REFLECTION_GUITYPEDESCRIPTORCPPHELPER -#define VCZH_REFLECTION_GUITYPEDESCRIPTORCPPHELPER - - -namespace vl -{ - namespace __vwsn - { - template - struct RunOnExit - { - T* function; - - RunOnExit(T* _function) - :function(_function) - { - } - - ~RunOnExit() - { - function->operator()(); - } - }; - - template - T* This(T* thisValue) - { - CHECK_ERROR(thisValue != nullptr, L"The this pointer cannot be null."); - return thisValue; - } - - template - T* Ensure(T* pointer) - { - CHECK_ERROR(pointer != nullptr, L"The pointer cannot be null."); - return pointer; - } - - template - Ptr& Ensure(Ptr& pointer) - { - CHECK_ERROR(pointer != nullptr, L"The pointer cannot be null."); - return pointer; - } - - template - Ptr Ensure(Ptr&& pointer) - { - CHECK_ERROR(pointer != nullptr, L"The pointer cannot be null."); - return MoveValue(pointer); - } - - template - Nullable Ensure(Nullable&& nullable) - { - CHECK_ERROR(nullable, L"The pointer cannot be null."); - return MoveValue(nullable); - } - - template - Nullable& Ensure(Nullable& nullable) - { - CHECK_ERROR(nullable, L"The pointer cannot be null."); - return nullable; - } - - template - WString ToString(const T& value) - { - using Type = typename RemoveCVR::Type; - WString str; - CHECK_ERROR(reflection::description::TypedValueSerializerProvider::Serialize(value, str), L"Failed to serialize."); - return str; - } - - template - T Parse(const WString& str) - { - using Type = typename RemoveCVR::Type; - T value; - CHECK_ERROR(reflection::description::TypedValueSerializerProvider::Deserialize(str, value), L"Failed to serialize."); - return value; - } - - template - struct NullableCastHelper - { - static Nullable Cast(Nullable nullable) - { - return Nullable(static_cast(nullable.Value())); - } - }; - - template - struct NullableCastHelper - { - static Nullable Cast(Nullable nullable) - { - return Nullable(ToString(nullable.Value())); - } - }; - - template - struct NullableCastHelper - { - static Nullable Cast(Nullable nullable) - { - return Nullable(Parse(nullable.Value())); - } - }; - - template - Nullable NullableCast(Nullable nullable) - { - if (!nullable) return Nullable(); - return NullableCastHelper::Cast(nullable); - } - - template - TTo* RawPtrCast(TFrom* pointer) - { - if (!pointer) return nullptr; - return pointer->template SafeAggregationCast(); - } - - template - Ptr SharedPtrCast(TFrom* pointer) - { - if (!pointer) return nullptr; - return pointer->template SafeAggregationCast(); - } - - template - reflection::description::Value Box(const T& value) - { - using Type = typename RemoveCVR::Type; - return reflection::description::BoxParameter(const_cast(value)); - } - - template - T Unbox(const reflection::description::Value& value) - { - using Type = typename RemoveCVR::Type; - T result; - reflection::description::UnboxParameter(value, result); - return result; - } - - template - struct UnboxWeakHelper - { - }; - - template - struct UnboxWeakHelper - { - static T* Unbox(const reflection::description::Value& value) - { - if (value.IsNull()) return nullptr; - return value.GetRawPtr()->SafeAggregationCast(); - } - }; - - template - struct UnboxWeakHelper> - { - static Ptr Unbox(const reflection::description::Value& value) - { - if (value.IsNull()) return nullptr; - return value.GetRawPtr()->SafeAggregationCast(); - } - }; - - template - struct UnboxWeakHelper> - { - static Nullable Unbox(const reflection::description::Value& value) - { - if (value.IsNull()) return Nullable(); - auto boxed = value.GetBoxedValue().Cast>(); - if (!boxed) return Nullable(); - return Nullable(boxed->value); - } - }; - - template - T UnboxWeak(const reflection::description::Value& value) - { - using Type = typename RemoveCVR::Type; - return UnboxWeakHelper::Unbox(value); - } - - template - collections::LazyList Range(T begin, T end) - { - return collections::Range(begin, end - begin); - } - - template - bool InSet(const T& value, const collections::LazyList& collection) - { - return collection.Any([&](const T& element) {return element == value; }); - } - - template - bool InSet(const T& value, Ptr collection) - { - return InSet(value, reflection::description::GetLazyList(collection)); - } - - template - Ptr UnboxCollection(U& value) - { - auto boxedValue = reflection::description::BoxParameter(value); - Ptr result; - reflection::description::UnboxParameter>(boxedValue, result); - return result; - } - - template - Ptr UnboxCollection(const collections::LazyList& value) - { - auto boxedValue = reflection::description::BoxParameter>(const_cast&>(value)); - Ptr result; - reflection::description::UnboxParameter>(boxedValue, result); - return result; - } - - struct CreateList - { - using IValueList = reflection::description::IValueList; - - Ptr list; - - CreateList() - :list(IValueList::Create()) - { - } - - CreateList(Ptr _list) - :list(_list) - { - } - - template - CreateList Add(const T& value) - { - list->Add(Box(value)); - return{ list }; - } - }; - - struct CreateObservableList - { - using IValueObservableList = reflection::description::IValueObservableList; - - Ptr list; - - CreateObservableList() - :list(IValueObservableList::Create()) - { - } - - CreateObservableList(Ptr _list) - :list(_list) - { - } - - template - CreateObservableList Add(const T& value) - { - list->Add(Box(value)); - return{ list }; - } - }; - - struct CreateDictionary - { - using IValueDictionary = reflection::description::IValueDictionary; - - Ptr dictionary; - - CreateDictionary() - :dictionary(IValueDictionary::Create()) - { - } - - CreateDictionary(Ptr _dictionary) - :dictionary(_dictionary) - { - } - - template - CreateDictionary Add(const K& key, const V& value) - { - dictionary->Set(Box(key), Box(value)); - return{ dictionary }; - } - }; - - template - struct EventHelper - { - }; - - template - Ptr EventAttach(T& e, typename EventHelper::Handler handler) - { - return EventHelper::Attach(e, handler); - } - - template - bool EventDetach(T& e, Ptr handler) - { - return EventHelper::Detach(e, handler); - } - - template - decltype(auto) EventInvoke(T& e) - { - return EventHelper::Invoke(e); - } - - template - struct EventHelper> - { - using Handler = const Func&; - - class EventHandlerImpl : public Object, public reflection::description::IEventHandler - { - public: - Ptr handler; - - EventHandlerImpl(Ptr _handler) - :handler(_handler) - { - } - - bool IsAttached()override - { - return handler->IsAttached(); - } - }; - - static Ptr Attach(Event& e, Handler handler) - { - return MakePtr(e.Add(handler)); - } - - static bool Detach(Event& e, Ptr handler) - { - auto impl = handler.Cast(); - if (!impl) return false; - return e.Remove(impl->handler); - } - - static Event& Invoke(Event& e) - { - return e; - } - }; - } -} - -#endif - -/*********************************************************************** -.\REFLECTION\GUITYPEDESCRIPTORBUILDER_FUNCTION.H -***********************************************************************/ -/*********************************************************************** -Vczh Library++ 3.0 -Developer: Zihan Chen(vczh) -Framework::Reflection - -Interfaces: -***********************************************************************/ - -#ifndef VCZH_REFLECTION_GUITYPEDESCRIPTORBUILDER_FUNCTION -#define VCZH_REFLECTION_GUITYPEDESCRIPTORBUILDER_FUNCTION - - -namespace vl -{ - namespace reflection - { - namespace description - { - -/*********************************************************************** -DetailTypeInfoRetriver> -***********************************************************************/ - -#ifndef VCZH_DEBUG_NO_REFLECTION - namespace internal_helper - { - template - struct GenericArgumentAdder - { - static void Add(Ptr genericType) - { - } - }; - - template - struct GenericArgumentAdder> - { - static void Add(Ptr genericType) - { - genericType->AddGenericArgument(TypeInfoRetriver::CreateTypeInfo()); - GenericArgumentAdder>::Add(genericType); - } - }; - } -#endif - - template - struct DetailTypeInfoRetriver, TypeFlags::FunctionType> - { - typedef DetailTypeInfoRetriver, TypeFlags::NonGenericType> UpLevelRetriver; - - static const ITypeInfo::Decorator Decorator=UpLevelRetriver::Decorator; - typedef IValueList Type; - typedef typename UpLevelRetriver::TempValueType TempValueType; - typedef typename UpLevelRetriver::ResultReferenceType ResultReferenceType; - typedef typename UpLevelRetriver::ResultNonReferenceType ResultNonReferenceType; - -#ifndef VCZH_DEBUG_NO_REFLECTION - static Ptr CreateTypeInfo(TypeInfoHint hint) - { - auto functionType = MakePtr(Description::GetAssociatedTypeDescriptor(), hint); - - auto genericType = MakePtr(functionType); - genericType->AddGenericArgument(TypeInfoRetriver::CreateTypeInfo()); - internal_helper::GenericArgumentAdder>::Add(genericType); - - auto type = MakePtr(genericType); - return type; - } -#endif - }; - - template - struct DetailTypeInfoRetriver, TypeFlags::FunctionType> - : DetailTypeInfoRetriver, TypeFlags::FunctionType> - { - }; - -/*********************************************************************** -ValueFunctionProxyWrapper> -***********************************************************************/ - - template - class ValueFunctionProxyWrapper - { - }; - - namespace internal_helper - { - extern void UnboxSpecifiedParameter(Ptr arguments, vint index); - - template - void UnboxSpecifiedParameter(Ptr arguments, vint index, T0& p0, TArgs& ...args) - { - UnboxParameter::TempValueType>(arguments->Get(index), p0, 0, itow(index + 1) + L"-th argument"); - UnboxSpecifiedParameter(arguments, index + 1, args...); - } - - template - struct BoxedFunctionInvoker - { - static Value Invoke(const Func& function, Ptr arguments, typename RemoveCVR::Type&& ...args) - { - UnboxSpecifiedParameter(arguments, 0, args...); - R result = function(args...); - return BoxParameter(result); - } - }; - - template - struct BoxedFunctionInvoker - { - static Value Invoke(const Func& function, Ptr arguments, typename RemoveCVR::Type&& ...args) - { - UnboxSpecifiedParameter(arguments, 0, args...); - function(args...); - return Value(); - } - }; - } - - template - class ValueFunctionProxyWrapper : public Object, public virtual IValueFunctionProxy - { - typedef Func FunctionType; - protected: - FunctionType function; - - public: - ValueFunctionProxyWrapper(const FunctionType& _function) - :function(_function) - { - } - - FunctionType GetFunction() - { - return function; - } - - Value Invoke(Ptr arguments)override - { - if (!arguments || arguments->GetCount() != sizeof...(TArgs)) - { -#ifndef VCZH_DEBUG_NO_REFLECTION - throw ArgumentCountMismtatchException(); -#else - CHECK_FAIL(L"Argument count mismatch."); -#endif - } - return internal_helper::BoxedFunctionInvoker::Invoke(function, arguments, typename RemoveCVR::Type()...); - } - }; - -/*********************************************************************** -ParameterAccessor> -***********************************************************************/ - - namespace internal_helper - { - extern void AddValueToList(Ptr arguments); - - template - void AddValueToList(Ptr arguments, T0&& p0, TArgs&& ...args) - { - arguments->Add(description::BoxParameter(p0)); - AddValueToList(arguments, args...); - } - } - - template - struct ParameterAccessor, TypeFlags::FunctionType> - { - static Value BoxParameter(const Func& object, ITypeDescriptor* typeDescriptor) - { - typedef R(RawFunctionType)(TArgs...); - Ptr result=new ValueFunctionProxyWrapper(object); - - ITypeDescriptor* td = nullptr; -#ifndef VCZH_DEBUG_NO_REFLECTION - td = Description::GetAssociatedTypeDescriptor(); -#endif - return BoxValue>(result, td); - } - - static void UnboxParameter(const Value& value, Func& result, ITypeDescriptor* typeDescriptor, const WString& valueName) - { - typedef R(RawFunctionType)(TArgs...); - typedef ValueFunctionProxyWrapper ProxyType; - Ptr functionProxy=UnboxValue>(value, typeDescriptor, valueName); - if(functionProxy) - { - if(Ptr proxy=functionProxy.Cast()) - { - result=proxy->GetFunction(); - } - else - { - result=[functionProxy](TArgs ...args) - { - Ptr arguments = IValueList::Create(); - internal_helper::AddValueToList(arguments, ForwardValue(args)...); -#if defined VCZH_MSVC - typedef TypeInfoRetriver::TempValueType ResultType; -#elif defined VCZH_GCC - typedef typename TypeInfoRetriver::TempValueType ResultType; -#endif - ResultType proxyResult; - description::UnboxParameter(functionProxy->Invoke(arguments), proxyResult); - return proxyResult; - }; - } - } - } - }; - - template - struct ParameterAccessor, TypeFlags::FunctionType> : ParameterAccessor, TypeFlags::FunctionType> - { - }; - -#ifndef VCZH_DEBUG_NO_REFLECTION - -/*********************************************************************** -MethodInfoImpl -***********************************************************************/ - - template - class CustomConstructorInfoImpl{}; - - template - class CustomMethodInfoImpl{}; - - template - class CustomExternalMethodInfoImpl{}; - - template - class CustomStaticMethodInfoImpl{}; - - template - class CustomEventInfoImpl{}; - -/*********************************************************************** -CustomConstructorInfoImpl -***********************************************************************/ - - namespace internal_helper - { - extern void UnboxSpecifiedParameter(MethodInfoImpl* methodInfo, collections::Array& arguments, vint index); - - template - void UnboxSpecifiedParameter(MethodInfoImpl* methodInfo, collections::Array& arguments, vint index, T0& p0, TArgs& ...args) - { - UnboxParameter::TempValueType>(arguments[index], p0, methodInfo->GetParameter(index)->GetType()->GetTypeDescriptor(), itow(index) + L"-th argument"); - UnboxSpecifiedParameter(methodInfo, arguments, index + 1, args...); - } - - template - struct BoxedConstructorInvoker - { - static Value Invoke(MethodInfoImpl* methodInfo, collections::Array& arguments, typename RemoveCVR::Type&& ...args) - { - UnboxSpecifiedParameter(methodInfo, arguments, 0, args...); - R result = new typename TypeInfoRetriver::Type(args...); - return BoxParameter(result); - } - }; - - template - struct ConstructorArgumentAdder - { - static void Add(MethodInfoImpl* methodInfo, const wchar_t* parameterNames[], vint index) - { - } - }; - - template - struct ConstructorArgumentAdder> - { - static void Add(MethodInfoImpl* methodInfo, const wchar_t* parameterNames[], vint index) - { - methodInfo->AddParameter(new ParameterInfoImpl(methodInfo, parameterNames[index], TypeInfoRetriver::CreateTypeInfo())); - ConstructorArgumentAdder>::Add(methodInfo, parameterNames, index + 1); - } - }; - } - - template - class CustomConstructorInfoImpl : public MethodInfoImpl - { - protected: - Value InvokeInternal(const Value& thisObject, collections::Array& arguments)override - { - return internal_helper::BoxedConstructorInvoker::Invoke(this, arguments, typename RemoveCVR::Type()...); - } - - Value CreateFunctionProxyInternal(const Value& thisObject)override - { - Func proxy( - LAMBDA([](TArgs ...args)->R - { -#if defined VCZH_MSVC - R result = new TypeInfoRetriver::Type(args...); -#elif defined VCZH_GCC - R result = new typename TypeInfoRetriver::Type(args...); -#endif - return result; - }) - ); - return BoxParameter>(proxy); - } - public: - CustomConstructorInfoImpl(const wchar_t* parameterNames[]) - :MethodInfoImpl(0, TypeInfoRetriver::CreateTypeInfo(), true) - { - internal_helper::ConstructorArgumentAdder>::Add(this, parameterNames, 0); - } - - IMethodInfo::ICpp* GetCpp()override - { - return nullptr; - } - }; - -/*********************************************************************** -CustomMethodInfoImpl -CustomStaticMethodInfoImpl -***********************************************************************/ - - namespace internal_helper - { - template - struct BoxedMethodInvoker - { - static Value Invoke(TClass* object, R(__thiscall TClass::* method)(TArgs...), MethodInfoImpl* methodInfo, collections::Array& arguments, typename RemoveCVR::Type&& ...args) - { - UnboxSpecifiedParameter(methodInfo, arguments, 0, args...); - R result = (object->*method)(args...); - return BoxParameter(result, methodInfo->GetReturn()->GetTypeDescriptor()); - } - }; - - template - struct BoxedMethodInvoker - { - static Value Invoke(TClass* object, void(__thiscall TClass::* method)(TArgs...), MethodInfoImpl* methodInfo, collections::Array& arguments, typename RemoveCVR::Type&& ...args) - { - UnboxSpecifiedParameter(methodInfo, arguments, 0, args...); - (object->*method)(args...); - return Value(); - } - }; - - template - struct BoxedExternalMethodInvoker - { - static Value Invoke(TClass* object, R(*method)(TClass*, TArgs...), MethodInfoImpl* methodInfo, collections::Array& arguments, typename RemoveCVR::Type&& ...args) - { - UnboxSpecifiedParameter(methodInfo, arguments, 0, args...); - R result = method(object, args...); - return BoxParameter(result, methodInfo->GetReturn()->GetTypeDescriptor()); - } - }; - - template - struct BoxedExternalMethodInvoker - { - static Value Invoke(TClass* object, void(*method)(TClass*, TArgs...), MethodInfoImpl* methodInfo, collections::Array& arguments, typename RemoveCVR::Type&& ...args) - { - UnboxSpecifiedParameter(methodInfo, arguments, 0, args...); - method(object, args...); - return Value(); - } - }; - } - class MethodInfoImpl_StaticCpp : public MethodInfoImpl, private IMethodInfo::ICpp - { - private: - WString invokeTemplate; - WString closureTemplate; - - const WString& GetInvokeTemplate()override - { - return invokeTemplate; - } - - const WString& GetClosureTemplate()override - { - return closureTemplate; - } - public: - MethodInfoImpl_StaticCpp(IMethodGroupInfo* _ownerMethodGroup, Ptr _return, bool _isStatic, const wchar_t* _invokeTemplate, const wchar_t* _closureTemplate) - :MethodInfoImpl(_ownerMethodGroup, _return, _isStatic) - { - CHECK_ERROR((_invokeTemplate == nullptr) == (_closureTemplate == nullptr), L"MethodInfoImpl_StaticCpp::MethodInfoImpl_StaticCpp()#Templates should all be set or default at the same time."); - if (_invokeTemplate) - { - invokeTemplate = WString(_invokeTemplate, false); - } - if (_closureTemplate) - { - closureTemplate = WString(_closureTemplate, false); - } - } - - IMethodInfo::ICpp* GetCpp()override - { - return invokeTemplate.Length() == 0 || closureTemplate.Length() == 0 ? nullptr : this; - } - }; - - template - class CustomMethodInfoImpl : public MethodInfoImpl_StaticCpp - { - protected: - R(__thiscall TClass::* method)(TArgs...); - - Value InvokeInternal(const Value& thisObject, collections::Array& arguments)override - { - TClass* object=UnboxValue(thisObject, GetOwnerTypeDescriptor(), L"thisObject"); - return internal_helper::BoxedMethodInvoker::Invoke(object, method, this, arguments, typename RemoveCVR::Type()...); - } - - Value CreateFunctionProxyInternal(const Value& thisObject)override - { - TClass* object=UnboxValue(thisObject, GetOwnerTypeDescriptor(), L"thisObject"); - Func proxy(object, method); - return BoxParameter>(proxy); - } - public: - CustomMethodInfoImpl(const wchar_t* parameterNames[], R(__thiscall TClass::* _method)(TArgs...), const wchar_t* _invokeTemplate, const wchar_t* _closureTemplate) - :MethodInfoImpl_StaticCpp(0, TypeInfoRetriver::CreateTypeInfo(), false, _invokeTemplate, _closureTemplate) - ,method(_method) - { - internal_helper::ConstructorArgumentAdder>::Add(this, parameterNames, 0); - } - }; - - template - class CustomExternalMethodInfoImpl : public MethodInfoImpl_StaticCpp - { - protected: - R(*method)(TClass*, TArgs...); - - Value InvokeInternal(const Value& thisObject, collections::Array& arguments)override - { - TClass* object=UnboxValue(thisObject, GetOwnerTypeDescriptor(), L"thisObject"); - return internal_helper::BoxedExternalMethodInvoker::Invoke(object, method, this, arguments, typename RemoveCVR::Type()...); - } - - Value CreateFunctionProxyInternal(const Value& thisObject)override - { - TClass* object=UnboxValue(thisObject, GetOwnerTypeDescriptor(), L"thisObject"); - Func proxy = Curry(Func(method))(object); - return BoxParameter>(proxy); - } - public: - CustomExternalMethodInfoImpl(const wchar_t* parameterNames[], R(*_method)(TClass*, TArgs...), const wchar_t* _invokeTemplate, const wchar_t* _closureTemplate) - :MethodInfoImpl_StaticCpp(0, TypeInfoRetriver::CreateTypeInfo(), false, _invokeTemplate, _closureTemplate) - ,method(_method) - { - internal_helper::ConstructorArgumentAdder>::Add(this, parameterNames, 0); - } - }; - -/*********************************************************************** -CustomStaticMethodInfoImpl -***********************************************************************/ - - namespace internal_helper - { - template - struct BoxedStaticMethodInvoker - { - static Value Invoke(R(* method)(TArgs...), MethodInfoImpl* methodInfo, collections::Array& arguments, typename RemoveCVR::Type&& ...args) - { - UnboxSpecifiedParameter(methodInfo, arguments, 0, args...); - R result = method(args...); - return BoxParameter(result, methodInfo->GetReturn()->GetTypeDescriptor()); - } - }; - - template - struct BoxedStaticMethodInvoker - { - static Value Invoke(void(* method)(TArgs...), MethodInfoImpl* methodInfo, collections::Array& arguments, typename RemoveCVR::Type&& ...args) - { - UnboxSpecifiedParameter(methodInfo, arguments, 0, args...); - method(args...); - return Value(); - } - }; - } - - template - class CustomStaticMethodInfoImpl : public MethodInfoImpl_StaticCpp - { - protected: - R(* method)(TArgs...); - - Value InvokeInternal(const Value& thisObject, collections::Array& arguments)override - { - return internal_helper::BoxedStaticMethodInvoker::Invoke(method, this, arguments, typename RemoveCVR::Type()...); - } - - Value CreateFunctionProxyInternal(const Value& thisObject)override - { - Func proxy(method); - return BoxParameter>(proxy); - } - public: - CustomStaticMethodInfoImpl(const wchar_t* parameterNames[], R(* _method)(TArgs...), const wchar_t* _invokeTemplate, const wchar_t* _closureTemplate) - :MethodInfoImpl_StaticCpp(0, TypeInfoRetriver::CreateTypeInfo(), true, _invokeTemplate, _closureTemplate) - ,method(_method) - { - internal_helper::ConstructorArgumentAdder>::Add(this, parameterNames, 0); - } - }; - -/*********************************************************************** -CustomEventInfoImpl -***********************************************************************/ - - namespace internal_helper - { - template - struct BoxedEventInvoker - { - static void Invoke(Event& eventObject, Ptr arguments, typename RemoveCVR::Type&& ...args) - { - UnboxSpecifiedParameter(arguments, 0, args...); - eventObject(args...); - } - }; - } - - template - class CustomEventInfoImpl : public EventInfoImpl - { - protected: - Event TClass::* eventRef; - - Ptr AttachInternal(DescriptableObject* thisObject, Ptr handler)override - { - TClass* object = UnboxValue(Value::From(thisObject), GetOwnerTypeDescriptor(), L"thisObject"); - Event& eventObject = object->*eventRef; - auto func = Func([=](TArgs ...args) - { - auto arguments = IValueList::Create(); - internal_helper::AddValueToList(arguments, ForwardValue(args)...); - handler->Invoke(arguments); - }); - return __vwsn::EventAttach(eventObject, func); - } - - bool DetachInternal(DescriptableObject* thisObject, Ptr handler)override - { - TClass* object = UnboxValue(Value::From(thisObject), GetOwnerTypeDescriptor(), L"thisObject"); - Event& eventObject = object->*eventRef; - return __vwsn::EventDetach(eventObject, handler); - } - - void InvokeInternal(DescriptableObject* thisObject, Ptr arguments)override - { - TClass* object = UnboxValue(Value::From(thisObject), GetOwnerTypeDescriptor(), L"thisObject"); - Event& eventObject = object->*eventRef; - internal_helper::BoxedEventInvoker::Invoke(eventObject, arguments, typename RemoveCVR::Type()...); - } - - Ptr GetHandlerTypeInternal()override - { - return TypeInfoRetriver>::CreateTypeInfo(); - } - public: - CustomEventInfoImpl(ITypeDescriptor* _ownerTypeDescriptor, const WString& _name, Event TClass::* _eventRef) - :EventInfoImpl(_ownerTypeDescriptor, _name) - , eventRef(_eventRef) - { - } - - ~CustomEventInfoImpl() - { - } - - IEventInfo::ICpp* GetCpp()override - { - return nullptr; - } - }; - - template - struct CustomEventFunctionTypeRetriver - { - typedef vint Type; - }; - - template - struct CustomEventFunctionTypeRetriver TClass::*> - { - typedef TEvent Type; - }; -#endif - } - } -} - -#endif - -/*********************************************************************** -.\REFLECTION\GUITYPEDESCRIPTORMACROS.H -***********************************************************************/ -/*********************************************************************** -Vczh Library++ 3.0 -Developer: Zihan Chen(vczh) -Framework::Reflection - -Interfaces: -***********************************************************************/ - -#ifndef VCZH_REFLECTION_GUITYPEDESCRIPTORMACROS -#define VCZH_REFLECTION_GUITYPEDESCRIPTORMACROS - - -#ifndef VCZH_DEBUG_NO_REFLECTION - -/*********************************************************************** -Macros -***********************************************************************/ - -namespace vl -{ - namespace reflection - { - namespace description - { - template - struct CustomTypeDescriptorSelector{}; - - struct MethodPointerBinaryData - { - typedef collections::Dictionary MethodMap; - - class IIndexer : public virtual IDescriptable - { - public: - virtual void IndexMethodInfo(const MethodPointerBinaryData& data, IMethodInfo* methodInfo) = 0; - virtual IMethodInfo* GetIndexedMethodInfo(const MethodPointerBinaryData& data) = 0; - }; - - vint data[4]; - - static inline vint Compare(const MethodPointerBinaryData& a, const MethodPointerBinaryData& b) - { - { - auto result = a.data[0] - b.data[0]; - if (result != 0) return result; - } - { - auto result = a.data[1] - b.data[1]; - if (result != 0) return result; - } - { - auto result = a.data[2] - b.data[2]; - if (result != 0) return result; - } - { - auto result = a.data[3] - b.data[3]; - if (result != 0) return result; - } - return 0; - } - -#define COMPARE(OPERATOR)\ - inline bool operator OPERATOR(const MethodPointerBinaryData& d)const\ - {\ - return Compare(*this, d) OPERATOR 0;\ - } - - COMPARE(<) - COMPARE(<=) - COMPARE(>) - COMPARE(>=) - COMPARE(==) - COMPARE(!=) -#undef COMPARE - }; - - template - union MethodPointerBinaryDataRetriver - { - T methodPointer; - MethodPointerBinaryData binaryData; - - MethodPointerBinaryDataRetriver(T _methodPointer) - { - memset(&binaryData, 0, sizeof(binaryData)); - methodPointer = _methodPointer; - } - - const MethodPointerBinaryData& GetBinaryData() - { - static_assert(sizeof(T) <= sizeof(MethodPointerBinaryData), "Your C++ compiler is bad!"); - return binaryData; - } - }; - - template - struct MethodPointerBinaryDataRecorder - { - static void RecordMethod(const MethodPointerBinaryData& data, ITypeDescriptor* td, IMethodInfo* methodInfo) - { - } - }; - - template - struct MethodPointerBinaryDataRecorder - { - static void RecordMethod(const MethodPointerBinaryData& data, ITypeDescriptor* td, IMethodInfo* methodInfo) - { - auto impl = dynamic_cast(td); - CHECK_ERROR(impl != nullptr, L"Internal error: RecordMethod can only be called when registering methods."); - impl->IndexMethodInfo(data, methodInfo); - } - }; - - template - using FUNCTIONNAME_AddPointer = T*; - -/*********************************************************************** -Type -***********************************************************************/ - -#define BEGIN_TYPE_INFO_NAMESPACE namespace vl{namespace reflection{namespace description{ -#define END_TYPE_INFO_NAMESPACE }}} -#define ADD_TYPE_INFO(TYPENAME)\ - {\ - Ptr type=new CustomTypeDescriptorSelector::CustomTypeDescriptorImpl();\ - manager->SetTypeDescriptor(TypeInfo::content.typeName, type);\ - } - -/*********************************************************************** -InterfaceProxy -***********************************************************************/ - -#define INTERFACE_PROXY_CTOR_RAWPTR(INTERFACE)\ - static INTERFACE* Create(Ptr proxy)\ - {\ - auto obj = new ValueInterfaceProxy();\ - obj->SetProxy(proxy);\ - return obj;\ - }\ - -#define INTERFACE_PROXY_CTOR_SHAREDPTR(INTERFACE)\ - static Ptr Create(Ptr proxy)\ - {\ - auto obj = new ValueInterfaceProxy();\ - obj->SetProxy(proxy);\ - return obj;\ - }\ - -#define BEGIN_INTERFACE_PROXY_NOPARENT_HEADER(INTERFACE)\ - template<>\ - class ValueInterfaceProxy : public ValueInterfaceImpl\ - {\ - typedef INTERFACE _interface_proxy_InterfaceType;\ - public:\ - -#define BEGIN_INTERFACE_PROXY_NOPARENT_RAWPTR(INTERFACE)\ - BEGIN_INTERFACE_PROXY_NOPARENT_HEADER(INTERFACE)\ - INTERFACE_PROXY_CTOR_RAWPTR(INTERFACE)\ - -#define BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(INTERFACE)\ - BEGIN_INTERFACE_PROXY_NOPARENT_HEADER(INTERFACE)\ - INTERFACE_PROXY_CTOR_SHAREDPTR(INTERFACE)\ - -#define BEGIN_INTERFACE_PROXY_HEADER(INTERFACE, ...)\ - template<>\ - class ValueInterfaceProxy : public ValueInterfaceImpl\ - {\ - typedef INTERFACE _interface_proxy_InterfaceType;\ - public:\ - -#define BEGIN_INTERFACE_PROXY_RAWPTR(INTERFACE, ...)\ - BEGIN_INTERFACE_PROXY_HEADER(INTERFACE, __VA_ARGS__)\ - INTERFACE_PROXY_CTOR_RAWPTR(INTERFACE)\ - -#define BEGIN_INTERFACE_PROXY_SHAREDPTR(INTERFACE, ...)\ - BEGIN_INTERFACE_PROXY_HEADER(INTERFACE, __VA_ARGS__)\ - INTERFACE_PROXY_CTOR_SHAREDPTR(INTERFACE)\ - -#define END_INTERFACE_PROXY(INTERFACE)\ - }; - -/*********************************************************************** -InterfaceProxy::Invoke -***********************************************************************/ - - template - auto MethodTypeTrait(TArgument...)->TReturn(TClass::*)(TArgument...) - { - return nullptr; - } - -#define PREPARE_INVOKE_INTERFACE_PROXY(METHODNAME, ...)\ - static ITypeDescriptor* _interface_proxy_typeDescriptor = nullptr;\ - static IMethodInfo* _interface_proxy_methodInfo = nullptr;\ - if (_interface_proxy_typeDescriptor != static_cast(this)->GetTypeDescriptor())\ - {\ - _interface_proxy_typeDescriptor = static_cast(this)->GetTypeDescriptor();\ - CHECK_ERROR(_interface_proxy_typeDescriptor != nullptr, L"Internal error: The type of this interface has not been registered.");\ - auto impl = dynamic_cast(_interface_proxy_typeDescriptor);\ - CHECK_ERROR(impl != nullptr, L"Internal error: BEGIN_INTERFACE_PROXY is the only correct way to register an interface with a proxy.");\ - auto _interface_proxy_method\ - = (decltype(MethodTypeTrait<_interface_proxy_InterfaceType, decltype(METHODNAME(__VA_ARGS__))>(__VA_ARGS__)))\ - &_interface_proxy_InterfaceType::METHODNAME;\ - MethodPointerBinaryDataRetriver binaryData(_interface_proxy_method);\ - _interface_proxy_methodInfo = impl->GetIndexedMethodInfo(binaryData.GetBinaryData());\ - }\ - -#define INVOKE_INTERFACE_PROXY(METHODNAME, ...)\ - PREPARE_INVOKE_INTERFACE_PROXY(METHODNAME, __VA_ARGS__)\ - proxy->Invoke(_interface_proxy_methodInfo, IValueList::Create(collections::From((collections::Array&)(Value_xs(), __VA_ARGS__)))) - -#define INVOKE_INTERFACE_PROXY_NOPARAMS(METHODNAME)\ - PREPARE_INVOKE_INTERFACE_PROXY(METHODNAME)\ - proxy->Invoke(_interface_proxy_methodInfo, IValueList::Create()) - -#define INVOKEGET_INTERFACE_PROXY(METHODNAME, ...)\ - PREPARE_INVOKE_INTERFACE_PROXY(METHODNAME, __VA_ARGS__)\ - return UnboxValue(proxy->Invoke(_interface_proxy_methodInfo, IValueList::Create(collections::From((collections::Array&)(Value_xs(), __VA_ARGS__))))) - -#define INVOKEGET_INTERFACE_PROXY_NOPARAMS(METHODNAME)\ - PREPARE_INVOKE_INTERFACE_PROXY(METHODNAME)\ - return UnboxValue(proxy->Invoke(_interface_proxy_methodInfo, IValueList::Create())) - -/*********************************************************************** -Enum -***********************************************************************/ - -#define BEGIN_ENUM_ITEM_FLAG(TYPENAME, TDFLAGS)\ - template<>\ - struct CustomTypeDescriptorSelector\ - {\ - public:\ - class CustomTypeDescriptorImpl : public EnumTypeDescriptor\ - {\ - typedef TYPENAME EnumType;\ - public:\ - void LoadInternal()override\ - {\ - EnumTypeDescriptor::LoadInternal();\ - -#define BEGIN_ENUM_ITEM(TYPENAME) BEGIN_ENUM_ITEM_FLAG(TYPENAME, TypeDescriptorFlags::NormalEnum) -#define BEGIN_ENUM_ITEM_MERGABLE(TYPENAME) BEGIN_ENUM_ITEM_FLAG(TYPENAME, TypeDescriptorFlags::FlagEnum) - -#define END_ENUM_ITEM(TYPENAME)\ - }\ - };\ - }; - -#define ENUM_ITEM_NAMESPACE(TYPENAME) typedef TYPENAME EnumItemNamespace; -#define ENUM_ITEM(ITEMNAME) enumType->AddItem(L ## #ITEMNAME, ITEMNAME); -#define ENUM_NAMESPACE_ITEM(ITEMNAME) enumType->AddItem(L ## #ITEMNAME, EnumItemNamespace::ITEMNAME); -#define ENUM_CLASS_ITEM(ITEMNAME) enumType->AddItem(L ## #ITEMNAME, EnumType::ITEMNAME); - -/*********************************************************************** -Struct -***********************************************************************/ - -#define BEGIN_STRUCT_MEMBER_FLAG(TYPENAME, TDFLAGS)\ - template<>\ - struct CustomTypeDescriptorSelector\ - {\ - public:\ - class CustomTypeDescriptorImpl : public StructTypeDescriptor\ - {\ - typedef TYPENAME StructType;\ - protected:\ - void LoadInternal()override\ - { - -#define BEGIN_STRUCT_MEMBER(TYPENAME)\ - BEGIN_STRUCT_MEMBER_FLAG(TYPENAME, TypeDescriptorFlags::Struct) - -#define END_STRUCT_MEMBER(TYPENAME)\ - }\ - };\ - }; - -#define STRUCT_MEMBER(FIELDNAME)\ - fields.Add(L ## #FIELDNAME, new StructFieldInfoFIELDNAME)>(this, &StructType::FIELDNAME, L ## #FIELDNAME)); - -/*********************************************************************** -Class -***********************************************************************/ - -#define BEGIN_CLASS_MEMBER(TYPENAME)\ - template<>\ - struct CustomTypeDescriptorSelector\ - {\ - public:\ - class CustomTypeDescriptorImpl : public TypeDescriptorImpl\ - {\ - typedef TYPENAME ClassType;\ - static const TypeDescriptorFlags TDFlags = TypeDescriptorFlags::Class;\ - public:\ - CustomTypeDescriptorImpl()\ - :TypeDescriptorImpl(TDFlags, &TypeInfo::content)\ - {\ - Description::SetAssociatedTypeDescroptor(this);\ - }\ - ~CustomTypeDescriptorImpl()\ - {\ - Description::SetAssociatedTypeDescroptor(0);\ - }\ - protected:\ - bool IsAggregatable()override\ - {\ - return AcceptValue>::YesNoType>::Result;\ - }\ - void LoadInternal()override\ - { - -#define CLASS_MEMBER_BASE(TYPENAME)\ - AddBaseType(description::GetTypeDescriptor()); - -#define END_CLASS_MEMBER(TYPENAME)\ - if (GetBaseTypeDescriptorCount() == 0) CLASS_MEMBER_BASE(DescriptableObject)\ - }\ - };\ - }; - -/*********************************************************************** -Interface -***********************************************************************/ - -#define BEGIN_INTERFACE_MEMBER_NOPROXY_FLAG(TYPENAME, TDFLAGS)\ - template<>\ - struct CustomTypeDescriptorSelector\ - {\ - public:\ - class CustomTypeDescriptorImpl : public TypeDescriptorImpl, public MethodPointerBinaryData::IIndexer\ - {\ - typedef TYPENAME ClassType;\ - static const TypeDescriptorFlags TDFlags = TDFLAGS;\ - MethodPointerBinaryData::MethodMap methodsForProxy;\ - public:\ - CustomTypeDescriptorImpl()\ - :TypeDescriptorImpl(TDFLAGS, &TypeInfo::content)\ - {\ - Description::SetAssociatedTypeDescroptor(this);\ - }\ - ~CustomTypeDescriptorImpl()\ - {\ - Description::SetAssociatedTypeDescroptor(0);\ - }\ - void IndexMethodInfo(const MethodPointerBinaryData& data, IMethodInfo* methodInfo)override\ - {\ - methodsForProxy.Add(data, methodInfo);\ - }\ - IMethodInfo* GetIndexedMethodInfo(const MethodPointerBinaryData& data)override\ - {\ - Load();\ - return methodsForProxy[data];\ - }\ - protected:\ - void LoadInternal()override\ - { - -#define BEGIN_INTERFACE_MEMBER_NOPROXY(TYPENAME)\ - BEGIN_INTERFACE_MEMBER_NOPROXY_FLAG(TYPENAME, TypeDescriptorFlags::Interface) - -#define BEGIN_INTERFACE_MEMBER(TYPENAME)\ - BEGIN_INTERFACE_MEMBER_NOPROXY(TYPENAME)\ - CLASS_MEMBER_EXTERNALCTOR(decltype(ValueInterfaceProxy::Create(nullptr))(Ptr), { L"proxy" }, vl::reflection::description::ValueInterfaceProxy::Create) - -#define END_INTERFACE_MEMBER(TYPENAME)\ - if (GetBaseTypeDescriptorCount() == 0 && TDFlags == TypeDescriptorFlags::Interface) CLASS_MEMBER_BASE(IDescriptable)\ - }\ - };\ - }; - -/*********************************************************************** -Field -***********************************************************************/ - -#define CLASS_MEMBER_FIELD(FIELDNAME)\ - AddProperty(\ - new CustomFieldInfoImpl<\ - ClassType,\ - decltype(((ClassType*)0)->FIELDNAME)\ - >(this, L ## #FIELDNAME, &ClassType::FIELDNAME)\ - ); - -/*********************************************************************** -Constructor -***********************************************************************/ - -#define NO_PARAMETER {L""} -#define PROTECT_PARAMETERS(...) __VA_ARGS__ - -#define CLASS_MEMBER_CONSTRUCTOR(FUNCTIONTYPE, PARAMETERNAMES)\ - {\ - const wchar_t* parameterNames[]=PARAMETERNAMES;\ - AddConstructor(new CustomConstructorInfoImpl(parameterNames));\ - } - -#define CLASS_MEMBER_EXTERNALCTOR_TEMPLATE(FUNCTIONTYPE, PARAMETERNAMES, SOURCE, INVOKETEMPLATE, CLOSURETEMPLATE)\ - {\ - const wchar_t* parameterNames[]=PARAMETERNAMES;\ - AddConstructor(\ - new CustomStaticMethodInfoImpl(parameterNames, SOURCE, INVOKETEMPLATE, CLOSURETEMPLATE)\ - );\ - } - -#define CLASS_MEMBER_EXTERNALCTOR(FUNCTIONTYPE, PARAMETERNAMES, SOURCE)\ - CLASS_MEMBER_EXTERNALCTOR_TEMPLATE(FUNCTIONTYPE, PROTECT_PARAMETERS(PARAMETERNAMES), (FUNCTIONNAME_AddPointer)&::SOURCE, L"::" L ## #SOURCE L"($Arguments)", L"::vl::Func<$Func>(&::" L ## #SOURCE L")") - -/*********************************************************************** -Method -***********************************************************************/ - -#define CLASS_MEMBER_EXTERNALMETHOD_TEMPLATE(FUNCTIONNAME, PARAMETERNAMES, FUNCTIONTYPE, SOURCE, INVOKETEMPLATE, CLOSURETEMPLATE)\ - {\ - const wchar_t* parameterNames[]=PARAMETERNAMES;\ - AddMethod(\ - L ## #FUNCTIONNAME,\ - new CustomExternalMethodInfoImpl<\ - ClassType,\ - vl::function_lambda::LambdaRetriveType::FunctionType\ - >(parameterNames, SOURCE, INVOKETEMPLATE, CLOSURETEMPLATE)\ - );\ - } - -#define CLASS_MEMBER_EXTERNALMETHOD(FUNCTIONNAME, PARAMETERNAMES, FUNCTIONTYPE, SOURCE)\ - CLASS_MEMBER_EXTERNALMETHOD_TEMPLATE(FUNCTIONNAME, PROTECT_PARAMETERS(PARAMETERNAMES), FUNCTIONTYPE, &::SOURCE, L"::" L ## #SOURCE L"($This, $Arguments)", L"::vl::Func<$Func>($This, &::" L ## #SOURCE L")") - -#define CLASS_MEMBER_METHOD_OVERLOAD_RENAME_TEMPLATE(EXPECTEDNAME, FUNCTIONNAME, PARAMETERNAMES, FUNCTIONTYPE, INVOKETEMPLATE, CLOSURETEMPLATE)\ - {\ - const wchar_t* parameterNames[]=PARAMETERNAMES;\ - auto methodInfo = new CustomMethodInfoImpl<\ - ClassType,\ - vl::function_lambda::LambdaRetriveType::FunctionType\ - >\ - (parameterNames, (FUNCTIONTYPE)&ClassType::FUNCTIONNAME, INVOKETEMPLATE, CLOSURETEMPLATE);\ - AddMethod(\ - L ## #EXPECTEDNAME,\ - methodInfo\ - );\ - MethodPointerBinaryDataRetriver binaryDataRetriver(&ClassType::FUNCTIONNAME);\ - MethodPointerBinaryDataRecorder::RecordMethod(binaryDataRetriver.GetBinaryData(), this, methodInfo);\ - } - -#define CLASS_MEMBER_METHOD_OVERLOAD_RENAME(EXPECTEDNAME, FUNCTIONNAME, PARAMETERNAMES, FUNCTIONTYPE)\ - CLASS_MEMBER_METHOD_OVERLOAD_RENAME_TEMPLATE(EXPECTEDNAME, FUNCTIONNAME, PROTECT_PARAMETERS(PARAMETERNAMES), FUNCTIONTYPE, L"$This->" L ## #FUNCTIONNAME L"($Arguments)", L"::vl::Func<$Func>($This, &$Type::" L ## #FUNCTIONNAME L")") - -#define CLASS_MEMBER_METHOD_OVERLOAD(FUNCTIONNAME, PARAMETERNAMES, FUNCTIONTYPE)\ - CLASS_MEMBER_METHOD_OVERLOAD_RENAME_TEMPLATE(FUNCTIONNAME, FUNCTIONNAME, PROTECT_PARAMETERS(PARAMETERNAMES), FUNCTIONTYPE, nullptr, nullptr) - -#define CLASS_MEMBER_METHOD_RENAME(EXPECTEDNAME, FUNCTIONNAME, PARAMETERNAMES)\ - CLASS_MEMBER_METHOD_OVERLOAD_RENAME(EXPECTEDNAME, FUNCTIONNAME, PROTECT_PARAMETERS(PARAMETERNAMES), decltype(&ClassType::FUNCTIONNAME)) - -#define CLASS_MEMBER_METHOD(FUNCTIONNAME, PARAMETERNAMES)\ - CLASS_MEMBER_METHOD_OVERLOAD(FUNCTIONNAME, PROTECT_PARAMETERS(PARAMETERNAMES), decltype(&ClassType::FUNCTIONNAME)) - -/*********************************************************************** -Static Method -***********************************************************************/ - -#define CLASS_MEMBER_STATIC_EXTERNALMETHOD_TEMPLATE(FUNCTIONNAME, PARAMETERNAMES, FUNCTIONTYPE, SOURCE, INVOKETEMPLATE, CLOSURETEMPLATE)\ - {\ - const wchar_t* parameterNames[]=PARAMETERNAMES;\ - AddMethod(\ - L ## #FUNCTIONNAME,\ - new CustomStaticMethodInfoImpl<\ - vl::function_lambda::FunctionObjectRetriveType::FunctionType\ - >(parameterNames, (FUNCTIONTYPE)SOURCE, INVOKETEMPLATE, CLOSURETEMPLATE)\ - );\ - } - -#define CLASS_MEMBER_STATIC_EXTERNALMETHOD(FUNCTIONNAME, PARAMETERNAMES, FUNCTIONTYPE, SOURCE)\ - CLASS_MEMBER_STATIC_EXTERNALMETHOD_TEMPLATE(FUNCTIONNAME, PROTECT_PARAMETERS(PARAMETERNAMES), FUNCTIONTYPE, &::SOURCE, L"::" L ## #SOURCE L"($Arguments)", L"::vl::Func<$Func>(&::" L ## #SOURCE L")") - -#define CLASS_MEMBER_STATIC_METHOD_OVERLOAD(FUNCTIONNAME, PARAMETERNAMES, FUNCTIONTYPE)\ - CLASS_MEMBER_STATIC_EXTERNALMETHOD_TEMPLATE(FUNCTIONNAME, PROTECT_PARAMETERS(PARAMETERNAMES), FUNCTIONTYPE, &ClassType::FUNCTIONNAME, nullptr, nullptr) - -#define CLASS_MEMBER_STATIC_METHOD(FUNCTIONNAME, PARAMETERNAMES)\ - CLASS_MEMBER_STATIC_METHOD_OVERLOAD(FUNCTIONNAME, PROTECT_PARAMETERS(PARAMETERNAMES), decltype(&ClassType::FUNCTIONNAME)) - -/*********************************************************************** -Event -***********************************************************************/ - -#define CLASS_MEMBER_EVENT(EVENTNAME)\ - AddEvent(\ - new CustomEventInfoImpl<\ - ClassType,\ - CustomEventFunctionTypeRetriver::Type\ - >(this, L ## #EVENTNAME, &ClassType::EVENTNAME)\ - ); - -/*********************************************************************** -Property -***********************************************************************/ - -#define CLASS_MEMBER_PROPERTY_READONLY(PROPERTYNAME, GETTER)\ - AddProperty(\ - new PropertyInfoImpl(\ - this,\ - L ## #PROPERTYNAME,\ - dynamic_cast(GetMethodGroupByName(L ## #GETTER, true)->GetMethod(0)),\ - nullptr,\ - nullptr\ - )\ - ); - -#define CLASS_MEMBER_PROPERTY(PROPERTYNAME, GETTER, SETTER)\ - AddProperty(\ - new PropertyInfoImpl(\ - this,\ - L ## #PROPERTYNAME,\ - dynamic_cast(GetMethodGroupByName(L ## #GETTER, true)->GetMethod(0)),\ - dynamic_cast(GetMethodGroupByName(L ## #SETTER, true)->GetMethod(0)),\ - nullptr\ - )\ - ); - -#define CLASS_MEMBER_PROPERTY_EVENT(PROPERTYNAME, GETTER, SETTER, EVENT)\ - AddProperty(\ - new PropertyInfoImpl(\ - this,\ - L ## #PROPERTYNAME,\ - dynamic_cast(GetMethodGroupByName(L ## #GETTER, true)->GetMethod(0)),\ - dynamic_cast(GetMethodGroupByName(L ## #SETTER, true)->GetMethod(0)),\ - dynamic_cast(GetEventByName(L ## #EVENT, true))\ - )\ - ); - -#define CLASS_MEMBER_PROPERTY_EVENT_READONLY(PROPERTYNAME, GETTER, EVENT)\ - AddProperty(\ - new PropertyInfoImpl(\ - this,\ - L ## #PROPERTYNAME,\ - dynamic_cast(GetMethodGroupByName(L ## #GETTER, true)->GetMethod(0)),\ - nullptr,\ - dynamic_cast(GetEventByName(L ## #EVENT, true))\ - )\ - ); - -#define CLASS_MEMBER_PROPERTY_REFERENCETEMPLATE(PROPERTYNAME, GETTER, SETTER, REFERENCETEMPLATE)\ - AddProperty(\ - new PropertyInfoImpl_StaticCpp(\ - this,\ - L ## #PROPERTYNAME,\ - dynamic_cast(GetMethodGroupByName(L ## #GETTER, true)->GetMethod(0)),\ - dynamic_cast(GetMethodGroupByName(L ## #SETTER, true)->GetMethod(0)),\ - nullptr,\ - WString(REFERENCETEMPLATE, false)\ - )\ - ); - -#define CLASS_MEMBER_PROPERTY_READONLY_FAST(PROPERTYNAME)\ - CLASS_MEMBER_METHOD(Get##PROPERTYNAME, NO_PARAMETER)\ - CLASS_MEMBER_PROPERTY_READONLY(PROPERTYNAME, Get##PROPERTYNAME)\ - -#define CLASS_MEMBER_PROPERTY_FAST(PROPERTYNAME)\ - CLASS_MEMBER_METHOD(Get##PROPERTYNAME, NO_PARAMETER)\ - CLASS_MEMBER_METHOD(Set##PROPERTYNAME, {L"value"})\ - CLASS_MEMBER_PROPERTY(PROPERTYNAME, Get##PROPERTYNAME, Set##PROPERTYNAME)\ - -#define CLASS_MEMBER_PROPERTY_EVENT_FAST(PROPERTYNAME, EVENTNAME)\ - CLASS_MEMBER_METHOD(Get##PROPERTYNAME, NO_PARAMETER)\ - CLASS_MEMBER_METHOD(Set##PROPERTYNAME, {L"value"})\ - CLASS_MEMBER_PROPERTY_EVENT(PROPERTYNAME, Get##PROPERTYNAME, Set##PROPERTYNAME, EVENTNAME)\ - -#define CLASS_MEMBER_PROPERTY_EVENT_READONLY_FAST(PROPERTYNAME, EVENTNAME)\ - CLASS_MEMBER_METHOD(Get##PROPERTYNAME, NO_PARAMETER)\ - CLASS_MEMBER_PROPERTY_EVENT_READONLY(PROPERTYNAME, Get##PROPERTYNAME, EVENTNAME)\ - - } - } -} - -#endif -#endif - - -/*********************************************************************** -.\REFLECTION\GUITYPEDESCRIPTORREFLECTION.H -***********************************************************************/ -/*********************************************************************** -Vczh Library++ 3.0 -Developer: Zihan Chen(vczh) -Framework::Reflection - -Interfaces: -***********************************************************************/ - -#ifndef VCZH_REFLECTION_GUITYPEDESCRIPTORREFLECTION -#define VCZH_REFLECTION_GUITYPEDESCRIPTORREFLECTION - - -namespace vl -{ - namespace reflection - { - namespace description - { - -/*********************************************************************** -Predefined Types -***********************************************************************/ - -#ifndef VCZH_DEBUG_NO_REFLECTION - -#define REFLECTION_PREDEFINED_COMPLEX_TYPES(F, VOID_TYPE)\ - F(Sys) \ - F(Math) \ - F(VOID_TYPE) \ - F(VoidValue) \ - F(IDescriptable) \ - F(DescriptableObject) \ - F(DateTime) \ - F(IValueEnumerator) \ - F(IValueEnumerable) \ - F(IValueReadonlyList) \ - F(IValueList) \ - F(IValueObservableList) \ - F(IValueReadonlyDictionary) \ - F(IValueDictionary) \ - F(IValueInterfaceProxy) \ - F(IValueFunctionProxy) \ - F(IValueSubscription) \ - F(IValueCallStack) \ - F(IValueException) \ - F(CoroutineStatus) \ - F(CoroutineResult) \ - F(ICoroutine) \ - F(EnumerableCoroutine::IImpl) \ - F(EnumerableCoroutine) \ - F(AsyncStatus) \ - F(IAsync) \ - F(IPromise) \ - F(IFuture) \ - F(IAsyncScheduler) \ - F(AsyncCoroutine::IImpl) \ - F(AsyncCoroutine) \ - F(IBoxedValue) \ - F(IBoxedValue::CompareResult) \ - F(IValueType) \ - F(IEnumType) \ - F(ISerializableType) \ - F(ITypeInfo) \ - F(ITypeInfo::Decorator) \ - F(IMemberInfo) \ - F(IEventHandler) \ - F(IEventInfo) \ - F(IPropertyInfo) \ - F(IParameterInfo) \ - F(IMethodInfo) \ - F(IMethodGroupInfo) \ - F(TypeDescriptorFlags) \ - F(ITypeDescriptor) \ - - DECL_TYPE_INFO(Value) - REFLECTION_PREDEFINED_PRIMITIVE_TYPES(DECL_TYPE_INFO) - REFLECTION_PREDEFINED_COMPLEX_TYPES(DECL_TYPE_INFO, void) - -#endif - -#define DEFINE_TYPED_VALUE_SERIALIZER_PROVIDER(TYPENAME)\ - template<>\ - struct TypedValueSerializerProvider\ - {\ - static TYPENAME GetDefaultValue();\ - static bool Serialize(const TYPENAME& input, WString& output);\ - static bool Deserialize(const WString& input, TYPENAME& output);\ - static IBoxedValue::CompareResult Compare(const TYPENAME& a, const TYPENAME& b);\ - };\ - - DEFINE_TYPED_VALUE_SERIALIZER_PROVIDER(vuint8_t) - DEFINE_TYPED_VALUE_SERIALIZER_PROVIDER(vuint16_t) - DEFINE_TYPED_VALUE_SERIALIZER_PROVIDER(vuint32_t) - DEFINE_TYPED_VALUE_SERIALIZER_PROVIDER(vuint64_t) - DEFINE_TYPED_VALUE_SERIALIZER_PROVIDER(vint8_t) - DEFINE_TYPED_VALUE_SERIALIZER_PROVIDER(vint16_t) - DEFINE_TYPED_VALUE_SERIALIZER_PROVIDER(vint32_t) - DEFINE_TYPED_VALUE_SERIALIZER_PROVIDER(vint64_t) - DEFINE_TYPED_VALUE_SERIALIZER_PROVIDER(float) - DEFINE_TYPED_VALUE_SERIALIZER_PROVIDER(double) - DEFINE_TYPED_VALUE_SERIALIZER_PROVIDER(bool) - DEFINE_TYPED_VALUE_SERIALIZER_PROVIDER(wchar_t) - DEFINE_TYPED_VALUE_SERIALIZER_PROVIDER(WString) - DEFINE_TYPED_VALUE_SERIALIZER_PROVIDER(Locale) - DEFINE_TYPED_VALUE_SERIALIZER_PROVIDER(DateTime) - -#undef DEFINE_TYPED_VALUE_SERIALIZER_PROVIDER - -/*********************************************************************** -Interface Implementation Proxy (Implement) -***********************************************************************/ - -#ifndef VCZH_DEBUG_NO_REFLECTION - -#pragma warning(push) -#pragma warning(disable:4250) - BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(IValueEnumerator) - Value GetCurrent()override - { - INVOKEGET_INTERFACE_PROXY_NOPARAMS(GetCurrent); - } - - vint GetIndex()override - { - INVOKEGET_INTERFACE_PROXY_NOPARAMS(GetIndex); - } - - bool Next()override - { - INVOKEGET_INTERFACE_PROXY_NOPARAMS(Next); - } - END_INTERFACE_PROXY(IValueEnumerator) - - BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(IValueEnumerable) - Ptr CreateEnumerator()override - { - INVOKEGET_INTERFACE_PROXY_NOPARAMS(CreateEnumerator); - } - END_INTERFACE_PROXY(IValueEnumerable) - - BEGIN_INTERFACE_PROXY_SHAREDPTR(IValueReadonlyList, IValueEnumerable) - vint GetCount()override - { - INVOKEGET_INTERFACE_PROXY_NOPARAMS(GetCount); - } - - Value Get(vint index)override - { - INVOKEGET_INTERFACE_PROXY(Get, index); - } - - bool Contains(const Value& value)override - { - INVOKEGET_INTERFACE_PROXY(Contains, value); - } - - vint IndexOf(const Value& value)override - { - INVOKEGET_INTERFACE_PROXY(IndexOf, value); - } - END_INTERFACE_PROXY(IValueReadonlyList) - - BEGIN_INTERFACE_PROXY_SHAREDPTR(IValueList, IValueReadonlyList) - void Set(vint index, const Value& value)override - { - INVOKE_INTERFACE_PROXY(Set, index, value); - } - - vint Add(const Value& value)override - { - INVOKEGET_INTERFACE_PROXY(Add, value); - } - - vint Insert(vint index, const Value& value)override - { - INVOKEGET_INTERFACE_PROXY(Insert, index, value); - } - - bool Remove(const Value& value)override - { - INVOKEGET_INTERFACE_PROXY(Remove, value); - } - - bool RemoveAt(vint index)override - { - INVOKEGET_INTERFACE_PROXY(RemoveAt, index); - } - - void Clear()override - { - INVOKE_INTERFACE_PROXY_NOPARAMS(Clear); - } - END_INTERFACE_PROXY(IValueList) - - BEGIN_INTERFACE_PROXY_SHAREDPTR(IValueObservableList, IValueList) - END_INTERFACE_PROXY(IValueObservableList) - - BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(IValueReadonlyDictionary) - Ptr GetKeys()override - { - INVOKEGET_INTERFACE_PROXY_NOPARAMS(GetKeys); - } - - Ptr GetValues()override - { - INVOKEGET_INTERFACE_PROXY_NOPARAMS(GetValues); - } - - vint GetCount()override - { - INVOKEGET_INTERFACE_PROXY_NOPARAMS(GetCount); - } - - Value Get(const Value& key)override - { - INVOKEGET_INTERFACE_PROXY(Get, key); - } - END_INTERFACE_PROXY(IValueReadonlyDictionary) - - BEGIN_INTERFACE_PROXY_SHAREDPTR(IValueDictionary, IValueReadonlyDictionary) - void Set(const Value& key, const Value& value)override - { - INVOKE_INTERFACE_PROXY(Set, key, value); - } - - bool Remove(const Value& key)override - { - INVOKEGET_INTERFACE_PROXY(Remove, key); - } - - void Clear()override - { - INVOKE_INTERFACE_PROXY_NOPARAMS(Clear); - } - END_INTERFACE_PROXY(IValueDictionary) - - BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(IValueSubscription) - bool Open()override - { - INVOKEGET_INTERFACE_PROXY_NOPARAMS(Open); - } - - bool Update()override - { - INVOKEGET_INTERFACE_PROXY_NOPARAMS(Update); - } - - bool Close()override - { - INVOKEGET_INTERFACE_PROXY_NOPARAMS(Close); - } - END_INTERFACE_PROXY(IValueSubscription) - - BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(ICoroutine) - - void Resume(bool raiseException, Ptr output)override - { - INVOKE_INTERFACE_PROXY(Resume, raiseException, output); - } - - Ptr GetFailure()override - { - INVOKEGET_INTERFACE_PROXY_NOPARAMS(GetFailure); - } - - CoroutineStatus GetStatus()override - { - INVOKEGET_INTERFACE_PROXY_NOPARAMS(GetStatus); - } - END_INTERFACE_PROXY(ICoroutine) - - BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(IAsync) - - AsyncStatus GetStatus()override - { - INVOKEGET_INTERFACE_PROXY_NOPARAMS(GetStatus); - } - - bool Execute(const Func)>& callback)override - { - INVOKEGET_INTERFACE_PROXY(Execute, callback); - } - END_INTERFACE_PROXY(IAsync) - -#pragma warning(pop) - -#endif - -/*********************************************************************** -Helper Functions -***********************************************************************/ - - extern vint ITypeDescriptor_GetTypeDescriptorCount(); - extern ITypeDescriptor* ITypeDescriptor_GetTypeDescriptor(vint index); - extern ITypeDescriptor* ITypeDescriptor_GetTypeDescriptor(const WString& name); - extern ITypeDescriptor* ITypeDescriptor_GetTypeDescriptor(const Value& value); - -/*********************************************************************** -LoadPredefinedTypes -***********************************************************************/ - - extern bool LoadPredefinedTypes(); - } - } -} - -#endif - - /*********************************************************************** .\STREAM\BROADCASTSTREAM.H ***********************************************************************/ @@ -18088,6 +13328,4953 @@ namespace vl #endif +/*********************************************************************** +.\STREAM\RECORDERSTREAM.H +***********************************************************************/ +/*********************************************************************** +Vczh Library++ 3.0 +Developer: Zihan Chen(vczh) +Stream::RecorderStream + +Interfaces: + RecorderStream :备份流 +***********************************************************************/ + +#ifndef VCZH_STREAM_RECORDERSTREAM +#define VCZH_STREAM_RECORDERSTREAM + + +namespace vl +{ + namespace stream + { + /// A readable stream that, read from an stream, and write everything that is read to another stream. + class RecorderStream : public Object, public virtual IStream + { + protected: + IStream* in; + IStream* out; + public: + /// Create a stream. + /// The stream to read. + /// The stream to write what is read from "_in". + RecorderStream(IStream& _in, IStream& _out); + ~RecorderStream(); + + bool CanRead()const; + bool CanWrite()const; + bool CanSeek()const; + bool CanPeek()const; + bool IsLimited()const; + bool IsAvailable()const; + void Close(); + pos_t Position()const; + pos_t Size()const; + void Seek(pos_t _size); + void SeekFromBegin(pos_t _size); + void SeekFromEnd(pos_t _size); + vint Read(void* _buffer, vint _size); + vint Write(void* _buffer, vint _size); + vint Peek(void* _buffer, vint _size); + }; + } +} + +#endif + +/*********************************************************************** +.\THREADING.H +***********************************************************************/ +/*********************************************************************** +Vczh Library++ 3.0 +Developer: Zihan Chen(vczh) +Framework::Threading + +Classes: + Thread :线程 + CriticalSection + Mutex + Semaphore + EventObject +***********************************************************************/ + +#ifndef VCZH_THREADING +#define VCZH_THREADING + + +namespace vl +{ + +/*********************************************************************** +内核模式对象 +***********************************************************************/ + + namespace threading_internal + { + struct WaitableData; + struct ThreadData; + struct MutexData; + struct SemaphoreData; + struct EventData; + struct CriticalSectionData; + struct ReaderWriterLockData; + struct ConditionVariableData; + } + + /// Base type of all synchronization objects. + class WaitableObject : public Object, public NotCopyable + { +#if defined VCZH_MSVC + private: + threading_internal::WaitableData* waitableData; + protected: + + WaitableObject(); + void SetData(threading_internal::WaitableData* data); + public: + /// Test if the object has already been created. Some of the synchronization objects should initialize itself after the constructor. This function is only available in Windows. + /// Returns true if the object has already been created. + bool IsCreated(); + /// Wait for this object to signal. + /// Returns true if the object is signaled. Returns false if this operation failed. + bool Wait(); + /// Wait for this object to signal for a period of time. This function is only available in Windows. + /// Returns true if the object is signaled. Returns false if this operation failed, including time out. + /// Time in milliseconds. + bool WaitForTime(vint ms); + + /// Wait for multiple objects. This function is only available in Windows. + /// Returns true if all objects are signaled. Returns false if this operation failed. + /// A pointer to an array to pointers. + /// The number of objects in the array. + static bool WaitAll(WaitableObject** objects, vint count); + /// Wait for multiple objects for a period of time. This function is only available in Windows. + /// Returns true if all objects are signaled. Returns false if this operation failed, including time out. + /// A pointer to an array to pointers. + /// The number of objects in the array. + /// Time in milliseconds. + static bool WaitAllForTime(WaitableObject** objects, vint count, vint ms); + /// Wait for one of the objects. This function is only available in Windows. + /// Returns the index of the first signaled or abandoned object, according to the "abandoned" parameter. Returns -1 if this operation failed. + /// A pointer to an array to pointers. + /// The number of objects in the array. + /// Returns true if the waiting is canceled by an abandoned object. An abandoned object is caused by it's owner thread existing without releasing it. + static vint WaitAny(WaitableObject** objects, vint count, bool* abandoned); + /// Wait for one of the objects for a period of time. This function is only available in Windows. + /// Returns the index of the first signaled or abandoned object, according to the "abandoned" parameter. Returns -1 if this operation failed, including time out. + /// A pointer to an array to pointers. + /// The number of objects in the array. + /// Time in milliseconds. + /// Returns true if the waiting is canceled by an abandoned object. An abandoned object is caused by it's owner thread existing without releasing it. + static vint WaitAnyForTime(WaitableObject** objects, vint count, vint ms, bool* abandoned); +#elif defined VCZH_GCC + virtual bool Wait() = 0; +#endif + }; + + /// Representing a thread. [M:vl.Thread.CreateAndStart] is the suggested way to create threads. + class Thread : public WaitableObject + { + friend void InternalThreadProc(Thread* thread); + public: + /// Thread state. + enum ThreadState + { + /// The thread has not started. + NotStarted, + /// The thread is running. + Running, + /// The thread has been stopped. + Stopped + }; + + typedef void(*ThreadProcedure)(Thread*, void*); + protected: + threading_internal::ThreadData* internalData; + volatile ThreadState threadState; + + virtual void Run()=0; + + Thread(); + public: + ~Thread(); + + /// Create a thread using a function pointer. + /// Returns the created thread. + /// The function pointer. + /// The argument to call the function pointer. + /// Set to true (by default) to make the thread delete itself after the job is done. If you set this argument to true, you are not suggested to touch the returned thread pointer in any way. + static Thread* CreateAndStart(ThreadProcedure procedure, void* argument=0, bool deleteAfterStopped=true); + /// Create a thread using a function object or a lambda expression. + /// Returns the created thread. + /// The function object or the lambda expression. + /// Set to true (by default) to make the thread delete itself after the job is done. If you set this argument to true, you are not suggested to touch the returned thread pointer in any way. + static Thread* CreateAndStart(const Func& procedure, bool deleteAfterStopped=true); + /// Pause the caller thread for a period of time. + /// Time in milliseconds. + static void Sleep(vint ms); + /// Get the number of logical processors. + /// The number of logical processor. + static vint GetCPUCount(); + /// Get the current thread id. + /// The current thread id. + static vint GetCurrentThreadId(); + + /// Start the thread. + /// Returns true if this operation succeeded. + bool Start(); +#if defined VCZH_GCC + bool Wait(); +#endif + /// Stop the thread. + /// Returns true if this operation succeeded. + bool Stop(); + /// Get the state of the thread. + /// The state of the thread. + ThreadState GetState(); +#ifdef VCZH_MSVC + void SetCPU(vint index); +#endif + }; + + /// Mutex. + class Mutex : public WaitableObject + { + private: + threading_internal::MutexData* internalData; + public: + Mutex(); + ~Mutex(); + + /// Create a mutex. + /// Returns true if this operation succeeded. + /// Set to true to own the created mutex. + /// Name of the mutex. If it is not empty, than it is a global named mutex. This argument is ignored in Linux. + bool Create(bool owned=false, const WString& name=L""); + /// Open an existing global named mutex. + /// Returns true if this operation succeeded. + /// Set to true make the mutex visible to all all child processes. This argument is only used in Windows. + /// Name of the mutex. This argument is ignored in Linux. + bool Open(bool inheritable, const WString& name); + + /// + /// Release the mutex. + /// In the implementation for Linux, calling Release() more than once between two Wait(), or calling Wait() more than once between two Release(), will results in an undefined behavior. + /// + /// Returns true if this operation succeeded. + bool Release(); +#ifdef VCZH_GCC + bool Wait(); +#endif + }; + + /// Semaphore. + class Semaphore : public WaitableObject + { + private: + threading_internal::SemaphoreData* internalData; + public: + Semaphore(); + ~Semaphore(); + + /// Create a semaphore. + /// Returns true if this operation succeeded. + /// Define the counter of the semaphore. + /// Define the maximum value of the counter of the semaphore. This argument is only used in Windows. + /// Name of the semaphore. If it is not empty, than it is a global named semaphore. This argument is ignored in Linux. + bool Create(vint initialCount, vint maxCount, const WString& name=L""); + /// Open an existing global named semaphore. + /// Returns true if this operation succeeded. + /// Set to true make the semaphore visible to all all child processes. This argument is only used in Windows. + /// Name of the semaphore. This argument is ignored in Linux. + bool Open(bool inheritable, const WString& name); + + /// Release the semaphore once. + /// Returns true if this operation succeeded. + bool Release(); + /// Release the semaphore multiple times. + /// Returns true if this operation succeeded. + /// The amout to release. + vint Release(vint count); +#ifdef VCZH_GCC + bool Wait(); +#endif + }; + + /// Event. + class EventObject : public WaitableObject + { + private: + threading_internal::EventData* internalData; + public: + EventObject(); + ~EventObject(); + + /// Create an auto unsignal event. Auto unsignal means, when one thread waits for the event and succeeded, the event will become unsignaled immediately. + /// Returns true if this operation succeeded. + /// Set to true make the event signaled at the beginning. + /// Name of the event. If it is not empty, than it is a global named mutex. This argument is only used in Windows. + bool CreateAutoUnsignal(bool signaled, const WString& name=L""); + /// Create a manual unsignal event. + /// Returns true if this operation succeeded. + /// Set to true make the event signaled at the beginning. + /// Name of the event. If it is not empty, than it is a global named mutex. This argument is only used in Windows. + bool CreateManualUnsignal(bool signaled, const WString& name=L""); + /// Open an existing global named event. + /// Returns true if this operation succeeded. + /// Set to true make the event visible to all all child processes. This argument is only used in Windows. + /// Name of the event. This argument is only used in Windows. + bool Open(bool inheritable, const WString& name); + + /// Signal the event. + /// Returns true if this operation succeeded. + bool Signal(); + /// Unsignal the event. + /// Returns true if this operation succeeded. + bool Unsignal(); +#ifdef VCZH_GCC + bool Wait(); +#endif + }; + +/*********************************************************************** +线程池 +***********************************************************************/ + + /// A light-weight thread pool. + class ThreadPoolLite : public Object + { + private: + ThreadPoolLite(); + ~ThreadPoolLite(); + public: + /// Queue a function pointer. + /// Returns true if this operation succeeded. + /// The function pointer. + /// The argument to call the function pointer. + static bool Queue(void(*proc)(void*), void* argument); + /// Queue a function object. + /// Returns true if this operation succeeded. + /// The function object. + static bool Queue(const Func& proc); + + /// Queue a lambda expression. + /// The type of the lambda expression. + /// The lambda expression. + template + static void QueueLambda(const T& proc) + { + Queue(Func(proc)); + } + +#ifdef VCZH_GCC + static bool Stop(bool discardPendingTasks); +#endif + }; + +/*********************************************************************** +进程内对象 +***********************************************************************/ + + /// + /// } + /// ]]> + class CriticalSection : public Object, public NotCopyable + { + private: + friend class ConditionVariable; + threading_internal::CriticalSectionData* internalData; + public: + /// Create a critical section. + CriticalSection(); + ~CriticalSection(); + + /// Try enter a critical section. This function will return immediately. + /// Returns true if the current thread owned the critical section. + bool TryEnter(); + /// Enter a critical section. + void Enter(); + /// Leave a critical section. + void Leave(); + + public: + class Scope : public Object, public NotCopyable + { + private: + CriticalSection* criticalSection; + public: + Scope(CriticalSection& _criticalSection); + ~Scope(); + }; + }; + + /// + /// } + /// or + /// WRITER_LOCK(yourLock) + /// { + /// + /// } + /// ]]> + class ReaderWriterLock : public Object, public NotCopyable + { + private: + friend class ConditionVariable; + threading_internal::ReaderWriterLockData* internalData; + public: + /// Create a reader writer lock. + ReaderWriterLock(); + ~ReaderWriterLock(); + + /// Try acquire a reader lock. This function will return immediately. + /// Returns true if the current thread acquired the reader lock. + bool TryEnterReader(); + /// Acquire a reader lock. + void EnterReader(); + /// Release a reader lock. + void LeaveReader(); + /// Try acquire a writer lock. This function will return immediately. + /// Returns true if the current thread acquired the writer lock. + bool TryEnterWriter(); + /// Acquire a writer lock. + void EnterWriter(); + /// Release a writer lock. + void LeaveWriter(); + public: + class ReaderScope : public Object, public NotCopyable + { + private: + ReaderWriterLock* lock; + public: + ReaderScope(ReaderWriterLock& _lock); + ~ReaderScope(); + }; + + class WriterScope : public Object, public NotCopyable + { + private: + ReaderWriterLock* lock; + public: + WriterScope(ReaderWriterLock& _lock); + ~WriterScope(); + }; + }; + + /// Conditional variable. + class ConditionVariable : public Object, public NotCopyable + { + private: + threading_internal::ConditionVariableData* internalData; + public: + /// Create a conditional variable. + ConditionVariable(); + ~ConditionVariable(); + + /// Bind a conditional variable with a owned critical section and release it. When the function returns, the condition variable is activated, and the current thread owned the critical section again. + /// Returns true if this operation succeeded. + /// The critical section. + bool SleepWith(CriticalSection& cs); +#ifdef VCZH_MSVC + /// Bind a conditional variable with a owned critical section and release it for a period of time. When the function returns, the condition variable is activated or it is time out, and the current thread owned the critical section again. This function is only available in Windows. + /// Returns true if this operation succeeded. + /// The critical section. + /// Time in milliseconds. + bool SleepWithForTime(CriticalSection& cs, vint ms); + /// Bind a conditional variable with a owned reader lock and release it. When the function returns, the condition variable is activated, and the current thread owned the reader lock again. This function is only available in Windows. + /// Returns true if this operation succeeded. + /// The reader lock. + bool SleepWithReader(ReaderWriterLock& lock); + /// Bind a conditional variable with a owned reader lock and release it for a period of time. When the function returns, the condition variable is activated or it is time out, and the current thread owned the reader lock again. This function is only available in Windows. + /// Returns true if this operation succeeded. + /// The reader lock. + /// Time in milliseconds. + bool SleepWithReaderForTime(ReaderWriterLock& lock, vint ms); + /// Bind a conditional variable with a owned writer lock and release it. When the function returns, the condition variable is activated, and the current thread owned the writer lock again. This function is only available in Windows. + /// Returns true if this operation succeeded. + /// The writer lock. + bool SleepWithWriter(ReaderWriterLock& lock); + /// Bind a conditional variable with a owned writer lock and release it for a period of time. When the function returns, the condition variable is activated or it is time out, and the current thread owned the writer lock again. This function is only available in Windows. + /// Returns true if this operation succeeded. + /// The writer lock. + /// Time in milliseconds. + bool SleepWithWriterForTime(ReaderWriterLock& lock, vint ms); +#endif + /// Wake one thread that pending on this condition variable. + void WakeOnePending(); + /// Wake all thread that pending on this condition variable. + void WakeAllPendings(); + }; + +/*********************************************************************** +用户模式对象 +***********************************************************************/ + + typedef long LockedInt; + + /// + /// } + /// ]]> + class SpinLock : public Object, public NotCopyable + { + protected: + volatile LockedInt token; + public: + /// Create a spin lock. + SpinLock(); + ~SpinLock(); + + /// Try enter a spin lock. This function will return immediately. + /// Returns true if the current thread owned the spin lock. + bool TryEnter(); + /// Enter a spin lock. + void Enter(); + /// Leave a spin lock. + void Leave(); + + public: + class Scope : public Object, public NotCopyable + { + private: + SpinLock* spinLock; + public: + Scope(SpinLock& _spinLock); + ~Scope(); + }; + }; + +#define SPIN_LOCK(LOCK) SCOPE_VARIABLE(const SpinLock::Scope&, scope, LOCK) +#define CS_LOCK(LOCK) SCOPE_VARIABLE(const CriticalSection::Scope&, scope, LOCK) +#define READER_LOCK(LOCK) SCOPE_VARIABLE(const ReaderWriterLock::ReaderScope&, scope, LOCK) +#define WRITER_LOCK(LOCK) SCOPE_VARIABLE(const ReaderWriterLock::WriterScope&, scope, LOCK) + +/*********************************************************************** +Thread Local Storage + +ThreadLocalStorage and ThreadVariable are designed to be used as global value types only. +Dynamically create instances of them are undefined behavior. +***********************************************************************/ + + /// Thread local storage operations. + class ThreadLocalStorage : public Object, private NotCopyable + { + typedef void(*Destructor)(void*); + protected: + vuint64_t key; + Destructor destructor; + volatile bool disposed = false; + + static void PushStorage(ThreadLocalStorage* storage); + public: + ThreadLocalStorage(Destructor _destructor); + ~ThreadLocalStorage(); + + void* Get(); + void Set(void* data); + void Clear(); + void Dispose(); + + /// Fix all storage creation. + static void FixStorages(); + /// Clear all storages for the current thread. For threads that are created using [T:vl.Thread], this function will be automatically called when before the thread exit. + static void ClearStorages(); + /// Clear all storages for the current thread (should be the main thread) and clear all records. This function can only be called by the main thread when all other threads are exited. It will reduce noices when you want to detect memory leaks. + static void DisposeStorages(); + }; + + /// Thread local variable. This type can only be used to define global variables. Different threads can store different values to and obtain differnt values from a thread local variable. + /// Type of the storage. + template + class ThreadVariable : public Object, private NotCopyable + { + protected: + ThreadLocalStorage storage; + + static void Destructor(void* data) + { + if (data) + { + delete (T*)data; + } + } + public: + /// Create a thread local variable. + ThreadVariable() + :storage(&Destructor) + { + } + + ~ThreadVariable() + { + } + + /// Test if the storage has data. + /// Returns true if the storage has data. + bool HasData() + { + return storage.Get() != nullptr; + } + + /// Remove the data from this storage. + void Clear() + { + storage.Clear(); + } + + /// Get the stored data. + /// The stored ata. + T& Get() + { + return *(T*)storage.Get(); + } + + /// Set data to this storage. + /// The data to set. + void Set(const T& value) + { + storage.Clear(); + storage.Set(new T(value)); + } + }; + + template + class ThreadVariable : public Object, private NotCopyable + { + protected: + ThreadLocalStorage storage; + + public: + ThreadVariable() + :storage(nullptr) + { + } + + ~ThreadVariable() + { + } + + bool HasData() + { + return storage.Get() != nullptr; + } + + void Clear() + { + storage.Set(nullptr); + } + + T* Get() + { + return (T*)storage.Get(); + } + + void Set(T* value) + { + storage.Set((void*)value); + } + }; + +/*********************************************************************** +RepeatingTaskExecutor +***********************************************************************/ + + /// Queued task executor. It is different from a thread pool by: 1) Task execution is single threaded, 2) If you queue a task, it will override the the unexecuted queued task. + /// The type of the argument to run a task. + template + class RepeatingTaskExecutor : public Object + { + private: + SpinLock inputLock; + T inputData; + volatile bool inputDataAvailable; + SpinLock executingEvent; + volatile bool executing; + + void ExecutingProcInternal() + { + while(true) + { + bool currentInputDataAvailable; + T currentInputData; + SPIN_LOCK(inputLock) + { + currentInputData=inputData; + inputData=T(); + currentInputDataAvailable=inputDataAvailable; + inputDataAvailable=false; + if(!currentInputDataAvailable) + { + executing=false; + goto FINISH_EXECUTING; + } + } + Execute(currentInputData); + } + FINISH_EXECUTING: + executingEvent.Leave(); + } + + static void ExecutingProc(void* argument) + { + ((RepeatingTaskExecutor*)argument)->ExecutingProcInternal(); + } + + protected: + /// This function is called when it is ready to execute a task. Task execution is single threaded. All task code should be put inside the function. + /// The argument to run a task. + virtual void Execute(const T& input)=0; + + public: + /// Create a task executor. + RepeatingTaskExecutor() + :inputDataAvailable(false) + ,executing(false) + { + } + + ~RepeatingTaskExecutor() + { + EnsureTaskFinished(); + } + + /// Wait for all tasks to finish. + void EnsureTaskFinished() + { + executingEvent.Enter(); + executingEvent.Leave(); + } + + /// Queue a task. If there is a queued task that has not been executied yet, those tasks will be canceled. Only one task can be queued at the same moment. + /// The argument to run a task. + void SubmitTask(const T& input) + { + SPIN_LOCK(inputLock) + { + inputData=input; + inputDataAvailable=true; + } + if(!executing) + { + executing=true; + executingEvent.Enter(); + ThreadPoolLite::Queue(&ExecutingProc, this); + } + } + }; +} +#endif + + +/*********************************************************************** +.\REFLECTION\GUITYPEDESCRIPTORPREDEFINED.H +***********************************************************************/ +/*********************************************************************** +Vczh Library++ 3.0 +Developer: Zihan Chen(vczh) +Framework::Reflection + +Interfaces: +***********************************************************************/ + +#ifndef VCZH_REFLECTION_GUITYPEDESCRIPTORPREDEFINED +#define VCZH_REFLECTION_GUITYPEDESCRIPTORPREDEFINED + +#include + +namespace vl +{ + namespace reflection + { + namespace description + { + struct VoidValue {}; + +/*********************************************************************** +Collections +***********************************************************************/ + + class IValueEnumerator : public virtual IDescriptable, public Description + { + public: + virtual Value GetCurrent() = 0; + virtual vint GetIndex() = 0; + virtual bool Next() = 0; + }; + + class IValueEnumerable : public virtual IDescriptable, public Description + { + public: + virtual Ptr CreateEnumerator() = 0; + + static Ptr Create(collections::LazyList values); + }; + + class IValueReadonlyList : public virtual IValueEnumerable, public Description + { + public: + virtual vint GetCount() = 0; + virtual Value Get(vint index) = 0; + virtual bool Contains(const Value& value) = 0; + virtual vint IndexOf(const Value& value) = 0; + }; + + class IValueList : public virtual IValueReadonlyList, public Description + { + public: + virtual void Set(vint index, const Value& value) = 0; + virtual vint Add(const Value& value) = 0; + virtual vint Insert(vint index, const Value& value) = 0; + virtual bool Remove(const Value& value) = 0; + virtual bool RemoveAt(vint index) = 0; + virtual void Clear() = 0; + + static Ptr Create(); + static Ptr Create(Ptr values); + static Ptr Create(collections::LazyList values); + }; + + class IValueObservableList : public virtual IValueList, public Description + { + typedef void ItemChangedProc(vint index, vint oldCount, vint newCount); + public: + Event ItemChanged; + + static Ptr Create(); + static Ptr Create(Ptr values); + static Ptr Create(collections::LazyList values); + }; + + class IValueReadonlyDictionary : public virtual IDescriptable, public Description + { + public: + virtual Ptr GetKeys() = 0; + virtual Ptr GetValues() = 0; + virtual vint GetCount() = 0; + virtual Value Get(const Value& key) = 0; + }; + + class IValueDictionary : public virtual IValueReadonlyDictionary, public Description + { + public: + virtual void Set(const Value& key, const Value& value) = 0; + virtual bool Remove(const Value& key) = 0; + virtual void Clear() = 0; + + static Ptr Create(); + static Ptr Create(Ptr values); + static Ptr Create(collections::LazyList> values); + }; + +/*********************************************************************** +Interface Implementation Proxy +***********************************************************************/ + + class IValueInterfaceProxy : public virtual IDescriptable, public Description + { + public: + virtual Value Invoke(IMethodInfo* methodInfo, Ptr arguments) = 0; + }; + + class IValueFunctionProxy : public virtual IDescriptable, public Description + { + public: + virtual Value Invoke(Ptr arguments) = 0; + }; + + class IValueSubscription : public virtual IDescriptable, public Description + { + typedef void ValueChangedProc(const Value& newValue); + public: + Event ValueChanged; + + virtual bool Open() = 0; + virtual bool Update() = 0; + virtual bool Close() = 0; + }; + +/*********************************************************************** +Interface Implementation Proxy (Implement) +***********************************************************************/ + + class ValueInterfaceRoot : public virtual IDescriptable + { + protected: + Ptr proxy; + + void SetProxy(Ptr value) + { + proxy = value; + } + public: + Ptr GetProxy() + { + return proxy; + } + }; + + template + class ValueInterfaceProxy + { + }; + +#pragma warning(push) +#pragma warning(disable:4250) + template + class ValueInterfaceImpl : public virtual ValueInterfaceRoot, public virtual TInterface, public ValueInterfaceProxy... + { + public: + ~ValueInterfaceImpl() + { + FinalizeAggregation(); + } + }; +#pragma warning(pop) + +/*********************************************************************** +Runtime Exception +***********************************************************************/ + + class IValueCallStack : public virtual IDescriptable, public Description + { + public: + virtual Ptr GetLocalVariables() = 0; + virtual Ptr GetLocalArguments() = 0; + virtual Ptr GetCapturedVariables() = 0; + virtual Ptr GetGlobalVariables() = 0; + virtual WString GetFunctionName() = 0; + virtual WString GetSourceCodeBeforeCodegen() = 0; + virtual WString GetSourceCodeAfterCodegen() = 0; + virtual vint GetRowBeforeCodegen() = 0; + virtual vint GetRowAfterCodegen() = 0; + }; + + class IValueException : public virtual IDescriptable, public Description + { + public: +#pragma push_macro("GetMessage") +#if defined GetMessage +#undef GetMessage +#endif + virtual WString GetMessage() = 0; +#pragma pop_macro("GetMessage") + virtual bool GetFatal() = 0; + virtual Ptr GetCallStack() = 0; + + static Ptr Create(const WString& message); + }; + } + } +} + +#endif + + +/*********************************************************************** +.\REFLECTION\GUITYPEDESCRIPTORBUILDER.H +***********************************************************************/ +/*********************************************************************** +Vczh Library++ 3.0 +Developer: Zihan Chen(vczh) +Framework::Reflection + +Interfaces: +***********************************************************************/ + +#ifndef VCZH_REFLECTION_GUITYPEDESCRIPTORBUILDER +#define VCZH_REFLECTION_GUITYPEDESCRIPTORBUILDER + + +namespace vl +{ + namespace collections + { + template + class ObservableList; + } + + namespace reflection + { + namespace description + { + +#ifndef VCZH_DEBUG_NO_REFLECTION + +/*********************************************************************** +TypeInfo +***********************************************************************/ + +#define DECL_TYPE_INFO(TYPENAME) template<>struct TypeInfo{ static const TypeInfoContent content; }; +#define IMPL_VL_TYPE_INFO(TYPENAME) const TypeInfoContent TypeInfo::content = { L ## #TYPENAME, nullptr, TypeInfoContent::VlppType }; +#define IMPL_CPP_TYPE_INFO(TYPENAME) const TypeInfoContent TypeInfo::content = { L ## #TYPENAME, nullptr, TypeInfoContent::CppType }; +#define IMPL_TYPE_INFO_RENAME(TYPENAME, EXPECTEDNAME) const TypeInfoContent TypeInfo::content = { L ## #EXPECTEDNAME, L ## #TYPENAME, TypeInfoContent::Renamed }; + + struct TypeInfoContent + { + enum TypeInfoCppName + { + VlppType, // vl:: + CppType, // + Renamed, // CppFullTypeName + }; + + const wchar_t* typeName; + const wchar_t* cppFullTypeName; + TypeInfoCppName cppName; + }; + + template + struct TypeInfo + { + }; + + template + ITypeDescriptor* GetTypeDescriptor() + { + return GetTypeDescriptor(TypeInfo::content.typeName); + } + +/*********************************************************************** +SerializableTypeDescriptor +***********************************************************************/ + + class TypeDescriptorImplBase : public Object, public ITypeDescriptor, private ITypeDescriptor::ICpp + { + private: + TypeDescriptorFlags typeDescriptorFlags; + const TypeInfoContent* typeInfoContent; + WString typeName; + WString cppFullTypeName; + + const WString& GetFullName()override; + + protected: + const TypeInfoContent* GetTypeInfoContentInternal(); + + public: + TypeDescriptorImplBase(TypeDescriptorFlags _typeDescriptorFlags, const TypeInfoContent* _typeInfoContent); + ~TypeDescriptorImplBase(); + + ITypeDescriptor::ICpp* GetCpp()override; + TypeDescriptorFlags GetTypeDescriptorFlags()override; + const WString& GetTypeName()override; + }; + + class ValueTypeDescriptorBase : public TypeDescriptorImplBase + { + protected: + bool loaded; + Ptr valueType; + Ptr enumType; + Ptr serializableType; + + virtual void LoadInternal();; + void Load(); + public: + ValueTypeDescriptorBase(TypeDescriptorFlags _typeDescriptorFlags, const TypeInfoContent* _typeInfoContent); + ~ValueTypeDescriptorBase(); + + bool IsAggregatable()override; + IValueType* GetValueType()override; + IEnumType* GetEnumType()override; + ISerializableType* GetSerializableType()override; + + vint GetBaseTypeDescriptorCount()override; + ITypeDescriptor* GetBaseTypeDescriptor(vint index)override; + bool CanConvertTo(ITypeDescriptor* targetType)override; + vint GetPropertyCount()override; + IPropertyInfo* GetProperty(vint index)override; + bool IsPropertyExists(const WString& name, bool inheritable)override; + IPropertyInfo* GetPropertyByName(const WString& name, bool inheritable)override; + vint GetEventCount()override; + IEventInfo* GetEvent(vint index)override; + bool IsEventExists(const WString& name, bool inheritable)override; + IEventInfo* GetEventByName(const WString& name, bool inheritable)override; + vint GetMethodGroupCount()override; + IMethodGroupInfo* GetMethodGroup(vint index)override; + bool IsMethodGroupExists(const WString& name, bool inheritable)override; + IMethodGroupInfo* GetMethodGroupByName(const WString& name, bool inheritable)override; + IMethodGroupInfo* GetConstructorGroup()override; + }; + + template + class TypedValueTypeDescriptorBase : public ValueTypeDescriptorBase + { + public: + TypedValueTypeDescriptorBase() + :ValueTypeDescriptorBase(TDFlags, &TypeInfo::content) + { + } + }; + +/*********************************************************************** +TypeInfoImp +***********************************************************************/ + + class TypeDescriptorTypeInfo : public Object, public ITypeInfo + { + protected: + ITypeDescriptor* typeDescriptor; + TypeInfoHint hint; + + public: + TypeDescriptorTypeInfo(ITypeDescriptor* _typeDescriptor, TypeInfoHint _hint); + ~TypeDescriptorTypeInfo(); + + Decorator GetDecorator()override; + TypeInfoHint GetHint()override; + ITypeInfo* GetElementType()override; + ITypeDescriptor* GetTypeDescriptor()override; + vint GetGenericArgumentCount()override; + ITypeInfo* GetGenericArgument(vint index)override; + WString GetTypeFriendlyName()override; + }; + + class DecoratedTypeInfo : public Object, public ITypeInfo + { + protected: + Ptr elementType; + + public: + DecoratedTypeInfo(Ptr _elementType); + ~DecoratedTypeInfo(); + + TypeInfoHint GetHint()override; + ITypeInfo* GetElementType()override; + ITypeDescriptor* GetTypeDescriptor()override; + vint GetGenericArgumentCount()override; + ITypeInfo* GetGenericArgument(vint index)override; + }; + + class RawPtrTypeInfo : public DecoratedTypeInfo + { + public: + RawPtrTypeInfo(Ptr _elementType); + ~RawPtrTypeInfo(); + + Decorator GetDecorator()override; + WString GetTypeFriendlyName()override; + }; + + class SharedPtrTypeInfo : public DecoratedTypeInfo + { + public: + SharedPtrTypeInfo(Ptr _elementType); + ~SharedPtrTypeInfo(); + + Decorator GetDecorator()override; + WString GetTypeFriendlyName()override; + }; + + class NullableTypeInfo : public DecoratedTypeInfo + { + public: + NullableTypeInfo(Ptr _elementType); + ~NullableTypeInfo(); + + Decorator GetDecorator()override; + WString GetTypeFriendlyName()override; + }; + + class GenericTypeInfo : public DecoratedTypeInfo + { + protected: + collections::List> genericArguments; + + public: + GenericTypeInfo(Ptr _elementType); + ~GenericTypeInfo(); + + Decorator GetDecorator()override; + vint GetGenericArgumentCount()override; + ITypeInfo* GetGenericArgument(vint index)override; + WString GetTypeFriendlyName()override; + + void AddGenericArgument(Ptr value); + }; + +/*********************************************************************** +ParameterInfoImpl +***********************************************************************/ + + class ParameterInfoImpl : public Object, public IParameterInfo + { + protected: + IMethodInfo* ownerMethod; + WString name; + Ptr type; + public: + ParameterInfoImpl(IMethodInfo* _ownerMethod, const WString& _name, Ptr _type); + ~ParameterInfoImpl(); + + ITypeDescriptor* GetOwnerTypeDescriptor()override; + const WString& GetName()override; + ITypeInfo* GetType()override; + IMethodInfo* GetOwnerMethod()override; + }; + +/*********************************************************************** +MethodInfoImpl +***********************************************************************/ + + class MethodInfoImpl : public Object, public IMethodInfo + { + friend class PropertyInfoImpl; + protected: + IMethodGroupInfo* ownerMethodGroup; + IPropertyInfo* ownerProperty; + collections::List> parameters; + Ptr returnInfo; + bool isStatic; + + virtual Value InvokeInternal(const Value& thisObject, collections::Array& arguments)=0; + virtual Value CreateFunctionProxyInternal(const Value& thisObject) = 0; + public: + MethodInfoImpl(IMethodGroupInfo* _ownerMethodGroup, Ptr _return, bool _isStatic); + ~MethodInfoImpl(); + + ITypeDescriptor* GetOwnerTypeDescriptor()override; + IPropertyInfo* GetOwnerProperty()override; + const WString& GetName()override; + IMethodGroupInfo* GetOwnerMethodGroup()override; + vint GetParameterCount()override; + IParameterInfo* GetParameter(vint index)override; + ITypeInfo* GetReturn()override; + bool IsStatic()override; + void CheckArguments(collections::Array& arguments)override; + Value Invoke(const Value& thisObject, collections::Array& arguments)override; + Value CreateFunctionProxy(const Value& thisObject)override; + bool AddParameter(Ptr parameter); + bool SetOwnerMethodgroup(IMethodGroupInfo* _ownerMethodGroup); + }; + +/*********************************************************************** +MethodGroupInfoImpl +***********************************************************************/ + + class MethodGroupInfoImpl : public Object, public IMethodGroupInfo + { + protected: + ITypeDescriptor* ownerTypeDescriptor; + WString name; + collections::List> methods; + public: + MethodGroupInfoImpl(ITypeDescriptor* _ownerTypeDescriptor, const WString& _name); + ~MethodGroupInfoImpl(); + + ITypeDescriptor* GetOwnerTypeDescriptor()override; + const WString& GetName()override; + vint GetMethodCount()override; + IMethodInfo* GetMethod(vint index)override; + bool AddMethod(Ptr _method); + }; + +/*********************************************************************** +EventInfoImpl +***********************************************************************/ + + class EventInfoImpl : public Object, public IEventInfo + { + friend class PropertyInfoImpl; + + protected: + ITypeDescriptor* ownerTypeDescriptor; + collections::List observingProperties; + WString name; + Ptr handlerType; + + virtual Ptr AttachInternal(DescriptableObject* thisObject, Ptr handler)=0; + virtual bool DetachInternal(DescriptableObject* thisObject, Ptr handler)=0; + virtual void InvokeInternal(DescriptableObject* thisObject, Ptr arguments)=0; + virtual Ptr GetHandlerTypeInternal()=0; + public: + EventInfoImpl(ITypeDescriptor* _ownerTypeDescriptor, const WString& _name); + ~EventInfoImpl(); + + ITypeDescriptor* GetOwnerTypeDescriptor()override; + const WString& GetName()override; + ITypeInfo* GetHandlerType()override; + vint GetObservingPropertyCount()override; + IPropertyInfo* GetObservingProperty(vint index)override; + Ptr Attach(const Value& thisObject, Ptr handler)override; + bool Detach(const Value& thisObject, Ptr handler)override; + void Invoke(const Value& thisObject, Ptr arguments)override; + }; + +/*********************************************************************** +TypeDescriptorImpl +***********************************************************************/ + + class PropertyInfoImpl : public Object, public IPropertyInfo + { + protected: + ITypeDescriptor* ownerTypeDescriptor; + WString name; + Ptr cpp; + MethodInfoImpl* getter; + MethodInfoImpl* setter; + EventInfoImpl* valueChangedEvent; + + public: + PropertyInfoImpl(ITypeDescriptor* _ownerTypeDescriptor, const WString& _name, MethodInfoImpl* _getter, MethodInfoImpl* _setter, EventInfoImpl* _valueChangedEvent); + ~PropertyInfoImpl(); + + ITypeDescriptor* GetOwnerTypeDescriptor()override; + const WString& GetName()override; + IPropertyInfo::ICpp* GetCpp()override; + + bool IsReadable()override; + bool IsWritable()override; + ITypeInfo* GetReturn()override; + IMethodInfo* GetGetter()override; + IMethodInfo* GetSetter()override; + IEventInfo* GetValueChangedEvent()override; + Value GetValue(const Value& thisObject)override; + void SetValue(Value& thisObject, const Value& newValue)override; + }; + + class PropertyInfoImpl_StaticCpp : public PropertyInfoImpl, private IPropertyInfo::ICpp + { + private: + WString referenceTemplate; + + const WString& GetReferenceTemplate()override; + + public: + PropertyInfoImpl_StaticCpp(ITypeDescriptor* _ownerTypeDescriptor, const WString& _name, MethodInfoImpl* _getter, MethodInfoImpl* _setter, EventInfoImpl* _valueChangedEvent, const WString& _referenceTemplate); + ~PropertyInfoImpl_StaticCpp(); + + IPropertyInfo::ICpp* GetCpp()override; + }; + +/*********************************************************************** +FieldInfoImpl +***********************************************************************/ + + class FieldInfoImpl : public Object, public IPropertyInfo + { + protected: + ITypeDescriptor* ownerTypeDescriptor; + Ptr returnInfo; + WString name; + + virtual Value GetValueInternal(const Value& thisObject)=0; + virtual void SetValueInternal(Value& thisObject, const Value& newValue)=0; + public: + FieldInfoImpl(ITypeDescriptor* _ownerTypeDescriptor, const WString& _name, Ptr _returnInfo); + ~FieldInfoImpl(); + + ITypeDescriptor* GetOwnerTypeDescriptor()override; + const WString& GetName()override; + bool IsReadable()override; + bool IsWritable()override; + ITypeInfo* GetReturn()override; + IMethodInfo* GetGetter()override; + IMethodInfo* GetSetter()override; + IEventInfo* GetValueChangedEvent()override; + Value GetValue(const Value& thisObject)override; + void SetValue(Value& thisObject, const Value& newValue)override; + }; + +/*********************************************************************** +TypeDescriptorImpl +***********************************************************************/ + + class TypeDescriptorImpl : public TypeDescriptorImplBase + { + private: + bool loaded; + collections::List baseTypeDescriptors; + collections::Dictionary> properties; + collections::Dictionary> events; + collections::Dictionary> methodGroups; + Ptr constructorGroup; + + protected: + MethodGroupInfoImpl* PrepareMethodGroup(const WString& name); + MethodGroupInfoImpl* PrepareConstructorGroup(); + IPropertyInfo* AddProperty(Ptr value); + IEventInfo* AddEvent(Ptr value); + IMethodInfo* AddMethod(const WString& name, Ptr value); + IMethodInfo* AddConstructor(Ptr value); + void AddBaseType(ITypeDescriptor* value); + + virtual void LoadInternal()=0; + void Load(); + public: + TypeDescriptorImpl(TypeDescriptorFlags _typeDescriptorFlags, const TypeInfoContent* _typeInfoContent); + ~TypeDescriptorImpl(); + + bool IsAggregatable()override; + IValueType* GetValueType()override; + IEnumType* GetEnumType()override; + ISerializableType* GetSerializableType()override; + + vint GetBaseTypeDescriptorCount()override; + ITypeDescriptor* GetBaseTypeDescriptor(vint index)override; + bool CanConvertTo(ITypeDescriptor* targetType)override; + + vint GetPropertyCount()override; + IPropertyInfo* GetProperty(vint index)override; + bool IsPropertyExists(const WString& name, bool inheritable)override; + IPropertyInfo* GetPropertyByName(const WString& name, bool inheritable)override; + + vint GetEventCount()override; + IEventInfo* GetEvent(vint index)override; + bool IsEventExists(const WString& name, bool inheritable)override; + IEventInfo* GetEventByName(const WString& name, bool inheritable)override; + + vint GetMethodGroupCount()override; + IMethodGroupInfo* GetMethodGroup(vint index)override; + bool IsMethodGroupExists(const WString& name, bool inheritable)override; + IMethodGroupInfo* GetMethodGroupByName(const WString& name, bool inheritable)override; + IMethodGroupInfo* GetConstructorGroup()override; + }; + +#endif + +/*********************************************************************** +TypeFlagTester +***********************************************************************/ + + enum class TypeFlags + { + NonGenericType =0, + FunctionType =1<<0, + EnumerableType =1<<1, + ReadonlyListType =1<<2, + ListType =1<<3, + ObservableListType =1<<4, + ReadonlyDictionaryType =1<<5, + DictionaryType =1<<6, + }; + + template + struct ValueRetriver + { + T* pointer; + }; + + template + struct ValueRetriver + { + T* pointer; + }; + + template + struct TypeFlagTester + { + static const TypeFlags Result=TypeFlags::NonGenericType; + }; + + template + struct TypeFlagTester + { + template + static void* Inherit(const Func* source){} + static char Inherit(void* source){} + static char Inherit(const void* source){} + + static const TypeFlags Result=sizeof(Inherit(((ValueRetriver*)0)->pointer))==sizeof(void*)?TypeFlags::FunctionType:TypeFlags::NonGenericType; + }; + + template + struct TypeFlagTester + { + template + static void* Inherit(const collections::LazyList* source){} + static char Inherit(void* source){} + static char Inherit(const void* source){} + + static const TypeFlags Result=sizeof(Inherit(((ValueRetriver*)0)->pointer))==sizeof(void*)?TypeFlags::EnumerableType:TypeFlags::NonGenericType; + }; + + template + struct TypeFlagTester + { + template + static void* Inherit(const collections::IEnumerable* source){} + static char Inherit(void* source){} + static char Inherit(const void* source){} + + static const TypeFlags Result=sizeof(Inherit(((ValueRetriver*)0)->pointer))==sizeof(void*)?TypeFlags::ReadonlyListType:TypeFlags::NonGenericType; + }; + + template + struct TypeFlagTester + { + template + static void* Inherit(collections::IEnumerable* source){} + static char Inherit(void* source){} + static char Inherit(const void* source){} + + static const TypeFlags Result=sizeof(Inherit(((ValueRetriver*)0)->pointer))==sizeof(void*)?TypeFlags::ListType:TypeFlags::NonGenericType; + }; + + template + struct TypeFlagTester + { + template + static void* Inherit(collections::ObservableList* source) {} + static char Inherit(void* source) {} + static char Inherit(const void* source) {} + + static const TypeFlags Result = sizeof(Inherit(((ValueRetriver*)0)->pointer)) == sizeof(void*) ? TypeFlags::ObservableListType : TypeFlags::NonGenericType; + }; + + template + struct TypeFlagTester + { + template + static void* Inherit(const collections::Dictionary* source){} + static char Inherit(void* source){} + static char Inherit(const void* source){} + + static const TypeFlags Result=sizeof(Inherit(((ValueRetriver*)0)->pointer))==sizeof(void*)?TypeFlags::ReadonlyDictionaryType:TypeFlags::NonGenericType; + }; + + template + struct TypeFlagTester + { + template + static void* Inherit(collections::Dictionary* source){} + static char Inherit(void* source){} + static char Inherit(const void* source){} + + static const TypeFlags Result=sizeof(Inherit(((ValueRetriver*)0)->pointer))==sizeof(void*)?TypeFlags::DictionaryType:TypeFlags::NonGenericType; + }; + +/*********************************************************************** +TypeFlagSelector +***********************************************************************/ + + template + struct TypeFlagSelectorCase + { + static const TypeFlags Result=TypeFlags::NonGenericType; + }; + + template + struct TypeFlagSelectorCase + { + static const TypeFlags Result=TypeFlags::FunctionType; + }; + + template + struct TypeFlagSelectorCase + { + static const TypeFlags Result=TypeFlags::EnumerableType; + }; + + template + struct TypeFlagSelectorCase + { + static const TypeFlags Result=TypeFlags::EnumerableType; + }; + + template + struct TypeFlagSelectorCase + { + static const TypeFlags Result=TypeFlags::ListType; + }; + + template + struct TypeFlagSelectorCase + { + static const TypeFlags Result = TypeFlags::ObservableListType; + }; + + template + struct TypeFlagSelectorCase + { + static const TypeFlags Result=TypeFlags::ReadonlyListType; + }; + + template + struct TypeFlagSelectorCase + { + static const TypeFlags Result=TypeFlags::DictionaryType; + }; + + template + struct TypeFlagSelectorCase + { + static const TypeFlags Result=TypeFlags::ReadonlyDictionaryType; + }; + + template + struct TypeFlagSelector + { + static const TypeFlags Result = + TypeFlagSelectorCase< + T, + (TypeFlags) + ( (vint)TypeFlagTester::Result + | (vint)TypeFlagTester::Result + | (vint)TypeFlagTester::Result + | (vint)TypeFlagTester::Result + | (vint)TypeFlagTester::Result + | (vint)TypeFlagTester::Result + | (vint)TypeFlagTester::Result + ) + >::Result; + }; + +/*********************************************************************** +TypeHintTester +***********************************************************************/ + + template + struct TypeHintTester + { + static const TypeInfoHint Result = TypeInfoHint::Normal; + }; + + template + struct TypeHintTesterForReference + { + static const TypeInfoHint Result = TypeInfoHint::NativeCollectionReference; + }; + + template<> + struct TypeHintTesterForReference + { + static const TypeInfoHint Result = TypeInfoHint::Normal; + }; + + template<> + struct TypeHintTesterForReference + { + static const TypeInfoHint Result = TypeInfoHint::Normal; + }; + + template + struct TypeHintTester + { + static const TypeInfoHint Result = TypeHintTester::Result; + }; + + template + struct TypeHintTester + { + static const TypeInfoHint Result = TypeHintTester::Result == TypeInfoHint::Normal + ? TypeHintTesterForReference::Result>::Result + : TypeHintTester::Result + ; + }; + + template + struct TypeHintTester + { + static const TypeInfoHint Result = TypeHintTester::Result; + }; + + template + struct TypeHintTester> + { + static const TypeInfoHint Result = TypeInfoHint::LazyList; + }; + + template + struct TypeHintTester> + { + static const TypeInfoHint Result = TypeInfoHint::Array; + }; + + template + struct TypeHintTester> + { + static const TypeInfoHint Result = TypeInfoHint::List; + }; + + template + struct TypeHintTester> + { + static const TypeInfoHint Result = TypeInfoHint::SortedList; + }; + + template + struct TypeHintTester> + { + static const TypeInfoHint Result = TypeInfoHint::ObservableList; + }; + + template + struct TypeHintTester> + { + static const TypeInfoHint Result = TypeInfoHint::Dictionary; + }; + +/*********************************************************************** +TypeInfoRetriver +***********************************************************************/ + + template + struct DetailTypeInfoRetriver + { + static const ITypeInfo::Decorator Decorator=ITypeInfo::TypeDescriptor; + typedef void Type; + typedef void TempValueType; + typedef void ResultReferenceType; + typedef void ResultNonReferenceType; + }; + + template + struct TypeInfoRetriver + { + static const TypeFlags TypeFlag = TypeFlagSelector::Result; + static const TypeInfoHint Hint = TypeHintTester::Result; + static const ITypeInfo::Decorator Decorator = DetailTypeInfoRetriver::Decorator; + + typedef typename DetailTypeInfoRetriver::Type Type; + typedef typename DetailTypeInfoRetriver::TempValueType TempValueType; + typedef typename DetailTypeInfoRetriver::ResultReferenceType ResultReferenceType; + typedef typename DetailTypeInfoRetriver::ResultNonReferenceType ResultNonReferenceType; + +#ifndef VCZH_DEBUG_NO_REFLECTION + static Ptr CreateTypeInfo() + { + return DetailTypeInfoRetriver::Type, TypeFlag>::CreateTypeInfo(Hint); + } +#endif + }; + +/*********************************************************************** +TypeInfoRetriver Helper Functions (BoxValue, UnboxValue) +***********************************************************************/ + + template + struct ValueAccessor + { + }; + + /// Box an reflectable object. Its type cannot be generic. + /// The boxed value. + /// Type of the object. + /// The object to box. + /// The type descriptor of the object (optional). + template + Value BoxValue(const T& object, ITypeDescriptor* typeDescriptor=0) + { + using Type = typename RemoveCVR::Type; + return ValueAccessor::Decorator>::BoxValue(object, typeDescriptor); + } + + /// Unbox an reflectable object. Its type cannot be generic. + /// The unboxed object. + /// Type of the object. + /// The value to unbox. + /// The type descriptor of the object (optional). + /// The name of the object to provide a friendly exception message if the conversion is failed (optional). + template + T UnboxValue(const Value& value, ITypeDescriptor* typeDescriptor=0, const WString& valueName=L"value") + { + using Type = typename RemoveCVR::Type; + return ValueAccessor::Decorator>::UnboxValue(value, typeDescriptor, valueName); + } + +/*********************************************************************** +TypeInfoRetriver Helper Functions (UnboxParameter) +***********************************************************************/ + + template + struct ParameterAccessor + { + }; + + /// Box an reflectable object. It supports generic types such as containers, functions, etc. + /// The boxed value. + /// Type of the object. + /// The object to box. + /// The type descriptor of the object (optional). + template + Value BoxParameter(typename TypeInfoRetriver::ResultReferenceType object, ITypeDescriptor* typeDescriptor=0) + { + return ParameterAccessor::ResultNonReferenceType, TypeInfoRetriver::TypeFlag>::BoxParameter(object, typeDescriptor); + } + + /// Box an reflectable object. It supports generic types such as containers, functions, etc. + /// Type of the object. + /// The value to unbox. + /// The unboxed object. + /// The type descriptor of the object (optional). + /// The name of the object to provide a friendly exception message if the conversion is failed (optional). + template + void UnboxParameter(const Value& value, T& result, ITypeDescriptor* typeDescriptor=0, const WString& valueName=L"value") + { + ParameterAccessor::TypeFlag>::UnboxParameter(value, result, typeDescriptor, valueName); + } + +#ifndef VCZH_DEBUG_NO_REFLECTION + +/*********************************************************************** +Value_xs +***********************************************************************/ + + class Value_xs + { + protected: + collections::Array arguments; + public: + Value_xs() + { + } + + template + Value_xs& operator,(T& value) + { + arguments.Resize(arguments.Count() + 1); + arguments[arguments.Count() - 1] = BoxParameter(value); + return *this; + } + + template + Value_xs& operator,(const T& value) + { + arguments.Resize(arguments.Count() + 1); + arguments[arguments.Count() - 1] = BoxParameter(value); + return *this; + } + + Value_xs& operator,(const Value& value) + { + arguments.Resize(arguments.Count()+1); + arguments[arguments.Count()-1]=value; + return *this; + } + + operator collections::Array&() + { + return arguments; + } + }; + +/*********************************************************************** +CustomFieldInfoImpl +***********************************************************************/ + + template + class CustomFieldInfoImpl : public FieldInfoImpl + { + protected: + TField TClass::* fieldRef; + + Value GetValueInternal(const Value& thisObject)override + { + TClass* object=UnboxValue(thisObject); + if(object) + { + return BoxParameter(object->*fieldRef, GetReturn()->GetTypeDescriptor()); + } + return Value(); + } + + void SetValueInternal(Value& thisObject, const Value& newValue)override + { + TClass* object=UnboxValue(thisObject); + if(object) + { + UnboxParameter(newValue, object->*fieldRef, GetReturn()->GetTypeDescriptor(), L"newValue"); + } + } + public: + CustomFieldInfoImpl(ITypeDescriptor* _ownerTypeDescriptor, const WString& _name, TField TClass::* _fieldRef) + :FieldInfoImpl(_ownerTypeDescriptor, _name, TypeInfoRetriver::CreateTypeInfo()) + , fieldRef(_fieldRef) + { + } + + IPropertyInfo::ICpp* GetCpp()override + { + return nullptr; + } + }; + +/*********************************************************************** +PrimitiveTypeDescriptor +***********************************************************************/ + + template + class SerializableValueType : public Object, public virtual IValueType + { + public: + Value CreateDefault()override + { + return BoxValue(TypedValueSerializerProvider::GetDefaultValue()); + } + + IBoxedValue::CompareResult Compare(const Value& a, const Value& b)override + { + auto va = UnboxValue(a); + auto vb = UnboxValue(b); + return TypedValueSerializerProvider::Compare(va, vb); + } + }; + + template + class SerializableType : public Object, public virtual ISerializableType + { + public: + bool Serialize(const Value& input, WString& output)override + { + return TypedValueSerializerProvider::Serialize(UnboxValue(input), output); + } + + bool Deserialize(const WString& input, Value& output)override + { + T value; + if (!TypedValueSerializerProvider::Deserialize(input, value)) + { + return false; + } + output = BoxValue(value); + return true; + } + }; + + template + class PrimitiveTypeDescriptor : public TypedValueTypeDescriptorBase + { + protected: + void LoadInternal()override + { + this->valueType = new SerializableValueType(); + this->serializableType = new SerializableType(); + } + }; + +/*********************************************************************** +EnumTypeDescriptor +***********************************************************************/ + + template + class EnumValueType : public Object, public virtual IValueType + { + public: + Value CreateDefault()override + { + return BoxValue(static_cast(0)); + } + + IBoxedValue::CompareResult Compare(const Value& a, const Value& b)override + { + auto ea = static_cast(UnboxValue(a)); + auto eb = static_cast(UnboxValue(b)); + if (ea < eb) return IBoxedValue::Smaller; + if (ea > eb)return IBoxedValue::Greater; + return IBoxedValue::Equal; + } + }; + + template + class EnumType : public Object, public virtual IEnumType + { + protected: + collections::Dictionary candidates; + + public: + void AddItem(WString name, T value) + { + candidates.Add(name, value); + } + + bool IsFlagEnum()override + { + return Flag; + } + + vint GetItemCount()override + { + return candidates.Count(); + } + + WString GetItemName(vint index)override + { + if (index < 0 || index >= candidates.Count()) + { + return L""; + } + return candidates.Keys()[index]; + } + + vuint64_t GetItemValue(vint index)override + { + if (index < 0 || index >= candidates.Count()) + { + return 0; + } + return static_cast(candidates.Values()[index]); + } + + vint IndexOfItem(WString name)override + { + return candidates.Keys().IndexOf(name); + } + + Value ToEnum(vuint64_t value)override + { + return BoxValue(static_cast(value)); + } + + vuint64_t FromEnum(const Value& value)override + { + return static_cast(UnboxValue(value)); + } + }; + + template + class EnumTypeDescriptor : public TypedValueTypeDescriptorBase + { + using TEnumType = EnumType; + protected: + Ptr enumType; + + void LoadInternal()override + { + this->enumType = new TEnumType; + this->valueType = new EnumValueType(); + TypedValueTypeDescriptorBase::enumType = enumType; + } + }; + +/*********************************************************************** +StructTypeDescriptor +***********************************************************************/ + + template + class StructValueType : public Object, public virtual IValueType + { + public: + Value CreateDefault()override + { + return BoxValue(T{}); + } + + IBoxedValue::CompareResult Compare(const Value& a, const Value& b)override + { + return IBoxedValue::NotComparable; + } + }; + + template + class StructTypeDescriptor : public TypedValueTypeDescriptorBase + { + protected: + template + class StructFieldInfo : public FieldInfoImpl + { + protected: + TField T::* field; + + Value GetValueInternal(const Value& thisObject)override + { + auto structValue = thisObject.GetBoxedValue().Cast>(); + if (!structValue) + { + throw ArgumentTypeMismtatchException(L"thisObject", GetOwnerTypeDescriptor(), Value::BoxedValue, thisObject); + } + return BoxValue(structValue->value.*field); + } + + void SetValueInternal(Value& thisObject, const Value& newValue)override + { + auto structValue = thisObject.GetBoxedValue().Cast>(); + if (!structValue) + { + throw ArgumentTypeMismtatchException(L"thisObject", GetOwnerTypeDescriptor(), Value::BoxedValue, thisObject); + } + (structValue->value.*field) = UnboxValue(newValue); + } + public: + StructFieldInfo(ITypeDescriptor* _ownerTypeDescriptor, TField T::* _field, const WString& _name) + :field(_field) + , FieldInfoImpl(_ownerTypeDescriptor, _name, TypeInfoRetriver::CreateTypeInfo()) + { + } + + IPropertyInfo::ICpp* GetCpp()override + { + return nullptr; + } + }; + + protected: + collections::Dictionary> fields; + + public: + StructTypeDescriptor() + { + this->valueType = new StructValueType(); + } + + vint GetPropertyCount()override + { + this->Load(); + return fields.Count(); + } + + IPropertyInfo* GetProperty(vint index)override + { + this->Load(); + if (index < 0 || index >= fields.Count()) + { + return nullptr; + } + return fields.Values()[index].Obj(); + } + + bool IsPropertyExists(const WString& name, bool inheritable)override + { + this->Load(); + return fields.Keys().Contains(name); + } + + IPropertyInfo* GetPropertyByName(const WString& name, bool inheritable)override + { + this->Load(); + vint index = fields.Keys().IndexOf(name); + if (index == -1) return nullptr; + return fields.Values()[index].Obj(); + } + }; +#endif + } + } +} + +#endif + + +/*********************************************************************** +.\REFLECTION\GUITYPEDESCRIPTORBUILDER_CONTAINER.H +***********************************************************************/ +/*********************************************************************** +Vczh Library++ 3.0 +Developer: Zihan Chen(vczh) +Framework::Reflection + +Interfaces: +***********************************************************************/ + +#ifndef VCZH_REFLECTION_GUITYPEDESCRIPTORBUILDER_CONTAINER +#define VCZH_REFLECTION_GUITYPEDESCRIPTORBUILDER_CONTAINER + + +namespace vl +{ + namespace reflection + { + namespace description + { + +/*********************************************************************** +Enumerable Wrappers +***********************************************************************/ + + template + class TypedEnumerator : public Object, public collections::IEnumerator + { + private: + Ptr enumerable; + Ptr enumerator; + vint index; + T value; + + public: + TypedEnumerator(Ptr _enumerable, vint _index, const T& _value) + :enumerable(_enumerable) + ,index(_index) + ,value(_value) + { + enumerator=enumerable->CreateEnumerator(); + vint current=-1; + while(current++Next(); + } + } + + TypedEnumerator(Ptr _enumerable) + :enumerable(_enumerable) + ,index(-1) + { + Reset(); + } + + collections::IEnumerator* Clone()const override + { + return new TypedEnumerator(enumerable, index, value); + } + + const T& Current()const override + { + return value; + } + + vint Index()const override + { + return index; + } + + bool Next() override + { + if(enumerator->Next()) + { + index++; + value=UnboxValue(enumerator->GetCurrent()); + return true; + } + else + { + return false; + } + } + + void Reset() override + { + index=-1; + enumerator=enumerable->CreateEnumerator(); + } + }; + + template + collections::LazyList GetLazyList(Ptr value) + { + return collections::LazyList(new TypedEnumerator(value)); + } + + template + collections::LazyList GetLazyList(Ptr value) + { + return collections::Range(0, value->GetCount()) + .Select([value](vint i) + { + return UnboxValue(value->Get(i)); + }); + } + + template + collections::LazyList GetLazyList(Ptr value) + { + return GetLazyList(Ptr(value)); + } + + template + collections::LazyList GetLazyList(Ptr value) + { + return GetLazyList(Ptr(value)); + } + + template + collections::LazyList> GetLazyList(Ptr value) + { + return collections::Range(0, value->GetCount()) + .Select([value](vint i) + { + return collections::Pair(UnboxValue(value->GetKeys()->Get(i)), UnboxValue(value->GetValues()->Get(i))); + }); + } + + template + collections::LazyList> GetLazyList(Ptr value) + { + return GetLazyList(Ptr(value)); + } + +/*********************************************************************** +Collection Wrappers +***********************************************************************/ + + namespace trait_helper + { + template + struct RemovePtr + { + typedef T Type; + }; + + template + struct RemovePtr + { + typedef T Type; + }; + + template + struct RemovePtr> + { + typedef T Type; + }; + } + +#pragma warning(push) +#pragma warning(disable:4250) + template + class ValueEnumeratorWrapper : public Object, public virtual IValueEnumerator + { + protected: + typedef typename trait_helper::RemovePtr::Type ContainerType; + typedef typename ContainerType::ElementType ElementType; + + T wrapperPointer; + public: + ValueEnumeratorWrapper(const T& _wrapperPointer) + :wrapperPointer(_wrapperPointer) + { + } + + Value GetCurrent()override + { + return BoxValue(wrapperPointer->Current()); + } + + vint GetIndex()override + { + return wrapperPointer->Index(); + } + + bool Next()override + { + return wrapperPointer->Next(); + } + }; + + template + class ValueEnumerableWrapper : public Object, public virtual IValueEnumerable + { + protected: + typedef typename trait_helper::RemovePtr::Type ContainerType; + typedef typename ContainerType::ElementType ElementType; + + T wrapperPointer; + public: + ValueEnumerableWrapper(const T& _wrapperPointer) + :wrapperPointer(_wrapperPointer) + { + } + + Ptr CreateEnumerator()override + { + return new ValueEnumeratorWrapper>>(wrapperPointer->CreateEnumerator()); + } + }; + +#define WRAPPER_POINTER ValueEnumerableWrapper::wrapperPointer + + template + class ValueReadonlyListWrapper : public ValueEnumerableWrapper, public virtual IValueReadonlyList + { + protected: + typedef typename trait_helper::RemovePtr::Type ContainerType; + typedef typename ContainerType::ElementType ElementType; + typedef typename KeyType::Type ElementKeyType; + + public: + ValueReadonlyListWrapper(const T& _wrapperPointer) + :ValueEnumerableWrapper(_wrapperPointer) + { + } + + vint GetCount()override + { + return WRAPPER_POINTER->Count(); + } + + Value Get(vint index)override + { + return BoxValue(WRAPPER_POINTER->Get(index)); + } + + bool Contains(const Value& value)override + { + ElementKeyType item=UnboxValue(value); + return WRAPPER_POINTER->Contains(item); + } + + vint IndexOf(const Value& value)override + { + ElementKeyType item=UnboxValue(value); + return WRAPPER_POINTER->IndexOf(item); + } + }; + + template + class ValueListWrapper : public ValueReadonlyListWrapper, public virtual IValueList + { + protected: + typedef typename trait_helper::RemovePtr::Type ContainerType; + typedef typename ContainerType::ElementType ElementType; + typedef typename KeyType::Type ElementKeyType; + + public: + ValueListWrapper(const T& _wrapperPointer) + :ValueReadonlyListWrapper(_wrapperPointer) + { + } + + void Set(vint index, const Value& value)override + { + ElementType item=UnboxValue(value); + WRAPPER_POINTER->Set(index, item); + } + + vint Add(const Value& value)override + { + ElementType item=UnboxValue(value); + return WRAPPER_POINTER->Add(item); + } + + vint Insert(vint index, const Value& value)override + { + ElementType item=UnboxValue(value); + return WRAPPER_POINTER->Insert(index, item); + } + + bool Remove(const Value& value)override + { + ElementKeyType item=UnboxValue(value); + return WRAPPER_POINTER->Remove(item); + } + + bool RemoveAt(vint index)override + { + return WRAPPER_POINTER->RemoveAt(index); + } + + void Clear()override + { + WRAPPER_POINTER->Clear(); + } + }; + + template + class ValueObservableListWrapper : public ValueListWrapper, public virtual IValueObservableList + { + public: + ValueObservableListWrapper(const T& _wrapperPointer) + :ValueListWrapper(_wrapperPointer) + { + } + }; + +#undef WRAPPER_POINTER + + template + class ValueReadonlyDictionaryWrapper : public virtual Object, public virtual IValueReadonlyDictionary + { + protected: + typedef typename trait_helper::RemovePtr::Type ContainerType; + typedef typename ContainerType::KeyContainer KeyContainer; + typedef typename ContainerType::ValueContainer ValueContainer; + typedef typename KeyContainer::ElementType KeyValueType; + typedef typename KeyType::Type KeyKeyType; + typedef typename ValueContainer::ElementType ValueType; + + T wrapperPointer; + Ptr keys; + Ptr values; + public: + ValueReadonlyDictionaryWrapper(const T& _wrapperPointer) + :wrapperPointer(_wrapperPointer) + { + } + + Ptr GetKeys()override + { + if(!keys) + { + keys=new ValueReadonlyListWrapper(&wrapperPointer->Keys()); + } + return keys; + } + + Ptr GetValues()override + { + if(!values) + { + values=new ValueReadonlyListWrapper(&wrapperPointer->Values()); + } + return values; + } + + vint GetCount()override + { + return wrapperPointer->Count(); + } + + Value Get(const Value& key)override + { + KeyKeyType item=UnboxValue(key); + ValueType result=wrapperPointer->Get(item); + return BoxValue(result); + } + }; + +#define WRAPPER_POINTER ValueReadonlyDictionaryWrapper::wrapperPointer +#define KEY_VALUE_TYPE typename ValueReadonlyDictionaryWrapper::KeyValueType +#define VALUE_TYPE typename ValueReadonlyDictionaryWrapper::ValueType +#define KEY_KEY_TYPE typename ValueReadonlyDictionaryWrapper::KeyKeyType + + template + class ValueDictionaryWrapper : public virtual ValueReadonlyDictionaryWrapper, public virtual IValueDictionary + { + public: + ValueDictionaryWrapper(const T& _wrapperPointer) + :ValueReadonlyDictionaryWrapper(_wrapperPointer) + { + } + + void Set(const Value& key, const Value& value)override + { + KEY_VALUE_TYPE item=UnboxValue(key); + VALUE_TYPE result=UnboxValue(value); + WRAPPER_POINTER->Set(item, result); + } + + bool Remove(const Value& key)override + { + KEY_KEY_TYPE item=UnboxValue(key); + return WRAPPER_POINTER->Remove(item); + } + + void Clear()override + { + WRAPPER_POINTER->Clear(); + } + }; +#undef WRAPPER_POINTER +#undef KEY_VALUE_TYPE +#undef VALUE_TYPE +#undef KEY_KEY_TYPE +#pragma warning(pop) + +/*********************************************************************** +DetailTypeInfoRetriver +***********************************************************************/ + + template + struct DetailTypeInfoRetriver + { + typedef DetailTypeInfoRetriver UpLevelRetriver; + + static const ITypeInfo::Decorator Decorator=UpLevelRetriver::Decorator; + typedef IValueEnumerable Type; + typedef typename UpLevelRetriver::TempValueType TempValueType; + typedef typename UpLevelRetriver::ResultReferenceType ResultReferenceType; + typedef typename UpLevelRetriver::ResultNonReferenceType ResultNonReferenceType; + +#ifndef VCZH_DEBUG_NO_REFLECTION + static Ptr CreateTypeInfo(TypeInfoHint hint) + { + typedef typename DetailTypeInfoRetriver::Type ContainerType; + typedef typename ContainerType::ElementType ElementType; + + auto arrayType = MakePtr(Description::GetAssociatedTypeDescriptor(), hint); + + auto genericType = MakePtr(arrayType); + genericType->AddGenericArgument(TypeInfoRetriver::CreateTypeInfo()); + + auto type = MakePtr(genericType); + return type; + } +#endif + }; + + template + struct DetailTypeInfoRetriver + { + typedef DetailTypeInfoRetriver UpLevelRetriver; + + static const ITypeInfo::Decorator Decorator=UpLevelRetriver::Decorator; + typedef IValueReadonlyList Type; + typedef typename UpLevelRetriver::TempValueType TempValueType; + typedef typename UpLevelRetriver::ResultReferenceType ResultReferenceType; + typedef typename UpLevelRetriver::ResultNonReferenceType ResultNonReferenceType; + +#ifndef VCZH_DEBUG_NO_REFLECTION + static Ptr CreateTypeInfo(TypeInfoHint hint) + { + typedef typename DetailTypeInfoRetriver::Type ContainerType; + typedef typename ContainerType::ElementType ElementType; + + auto arrayType = MakePtr(Description::GetAssociatedTypeDescriptor(), hint); + + auto genericType = MakePtr(arrayType); + genericType->AddGenericArgument(TypeInfoRetriver::CreateTypeInfo()); + + auto type = MakePtr(genericType); + return type; + } +#endif + }; + + template + struct DetailTypeInfoRetriver + { + typedef DetailTypeInfoRetriver UpLevelRetriver; + + static const ITypeInfo::Decorator Decorator=UpLevelRetriver::Decorator; + typedef IValueList Type; + typedef typename UpLevelRetriver::TempValueType TempValueType; + typedef typename UpLevelRetriver::ResultReferenceType ResultReferenceType; + typedef typename UpLevelRetriver::ResultNonReferenceType ResultNonReferenceType; + +#ifndef VCZH_DEBUG_NO_REFLECTION + static Ptr CreateTypeInfo(TypeInfoHint hint) + { + typedef typename DetailTypeInfoRetriver::Type ContainerType; + typedef typename ContainerType::ElementType ElementType; + + auto arrayType = MakePtr(Description::GetAssociatedTypeDescriptor(), hint); + + auto genericType = MakePtr(arrayType); + genericType->AddGenericArgument(TypeInfoRetriver::CreateTypeInfo()); + + auto type = MakePtr(genericType); + return type; + } +#endif + }; + + template + struct DetailTypeInfoRetriver + { + typedef DetailTypeInfoRetriver UpLevelRetriver; + + static const ITypeInfo::Decorator Decorator = UpLevelRetriver::Decorator; + typedef IValueObservableList Type; + typedef typename UpLevelRetriver::TempValueType TempValueType; + typedef typename UpLevelRetriver::ResultReferenceType ResultReferenceType; + typedef typename UpLevelRetriver::ResultNonReferenceType ResultNonReferenceType; + +#ifndef VCZH_DEBUG_NO_REFLECTION + static Ptr CreateTypeInfo(TypeInfoHint hint) + { + typedef typename DetailTypeInfoRetriver::Type ContainerType; + typedef typename ContainerType::ElementType ElementType; + + auto arrayType = MakePtr(Description::GetAssociatedTypeDescriptor(), hint); + + auto genericType = MakePtr(arrayType); + genericType->AddGenericArgument(TypeInfoRetriver::CreateTypeInfo()); + + auto type = MakePtr(genericType); + return type; + } +#endif + }; + + template + struct DetailTypeInfoRetriver + { + typedef DetailTypeInfoRetriver UpLevelRetriver; + + static const ITypeInfo::Decorator Decorator=UpLevelRetriver::Decorator; + typedef IValueReadonlyList Type; + typedef typename UpLevelRetriver::TempValueType TempValueType; + typedef typename UpLevelRetriver::ResultReferenceType ResultReferenceType; + typedef typename UpLevelRetriver::ResultNonReferenceType ResultNonReferenceType; + +#ifndef VCZH_DEBUG_NO_REFLECTION + static Ptr CreateTypeInfo(TypeInfoHint hint) + { + typedef typename DetailTypeInfoRetriver::Type ContainerType; + typedef typename ContainerType::KeyContainer KeyContainer; + typedef typename ContainerType::ValueContainer ValueContainer; + typedef typename KeyContainer::ElementType KeyType; + typedef typename ValueContainer::ElementType ValueType; + + auto arrayType = MakePtr(Description::GetAssociatedTypeDescriptor(), hint); + + auto genericType = MakePtr(arrayType); + genericType->AddGenericArgument(TypeInfoRetriver::CreateTypeInfo()); + genericType->AddGenericArgument(TypeInfoRetriver::CreateTypeInfo()); + + auto type = MakePtr(genericType); + return type; + } +#endif + }; + + template + struct DetailTypeInfoRetriver + { + typedef DetailTypeInfoRetriver UpLevelRetriver; + + static const ITypeInfo::Decorator Decorator=UpLevelRetriver::Decorator; + typedef IValueReadonlyList Type; + typedef typename UpLevelRetriver::TempValueType TempValueType; + typedef typename UpLevelRetriver::ResultReferenceType ResultReferenceType; + typedef typename UpLevelRetriver::ResultNonReferenceType ResultNonReferenceType; + +#ifndef VCZH_DEBUG_NO_REFLECTION + static Ptr CreateTypeInfo(TypeInfoHint hint) + { + typedef typename DetailTypeInfoRetriver::Type ContainerType; + typedef typename ContainerType::KeyContainer KeyContainer; + typedef typename ContainerType::ValueContainer ValueContainer; + typedef typename KeyContainer::ElementType KeyType; + typedef typename ValueContainer::ElementType ValueType; + + auto arrayType = MakePtr(Description::GetAssociatedTypeDescriptor(), hint); + + auto genericType = MakePtr(arrayType); + genericType->AddGenericArgument(TypeInfoRetriver::CreateTypeInfo()); + genericType->AddGenericArgument(TypeInfoRetriver::CreateTypeInfo()); + + auto type = MakePtr(genericType); + return type; + } +#endif + }; + +/*********************************************************************** +ParameterAccessor +***********************************************************************/ + + template + struct ParameterAccessor, TypeFlags::EnumerableType> + { + static Value BoxParameter(collections::LazyList& object, ITypeDescriptor* typeDescriptor) + { + Ptr result=IValueEnumerable::Create( + collections::From(object) + .Select([](const T& item) + { + return BoxValue(item); + }) + ); + + ITypeDescriptor* td = nullptr; +#ifndef VCZH_DEBUG_NO_REFLECTION + td = Description::GetAssociatedTypeDescriptor(); +#endif + return BoxValue>(result, td); + } + + static void UnboxParameter(const Value& value, collections::LazyList& result, ITypeDescriptor* typeDescriptor, const WString& valueName) + { + typedef typename collections::LazyList::ElementType ElementType; + Ptr listProxy=UnboxValue>(value, typeDescriptor, valueName); + result=GetLazyList(listProxy); + } + }; + + template + struct ParameterAccessor + { + static Value BoxParameter(T& object, ITypeDescriptor* typeDescriptor) + { + Ptr result=new ValueReadonlyListWrapper(&object); + + ITypeDescriptor* td = nullptr; +#ifndef VCZH_DEBUG_NO_REFLECTION + td = Description::GetAssociatedTypeDescriptor(); +#endif + return BoxValue>(result, td); + } + + static void UnboxParameter(const Value& value, T& result, ITypeDescriptor* typeDescriptor, const WString& valueName) + { + typedef typename T::ElementType ElementType; + Ptr listProxy=UnboxValue>(value, typeDescriptor, valueName); + collections::LazyList lazyList=GetLazyList(listProxy); + collections::CopyFrom(result, lazyList); + } + }; + + template + struct ParameterAccessor + { + static Value BoxParameter(T& object, ITypeDescriptor* typeDescriptor) + { + Ptr result=new ValueListWrapper(&object); + + ITypeDescriptor* td = nullptr; +#ifndef VCZH_DEBUG_NO_REFLECTION + td = Description::GetAssociatedTypeDescriptor(); +#endif + return BoxValue>(result, td); + } + + static void UnboxParameter(const Value& value, T& result, ITypeDescriptor* typeDescriptor, const WString& valueName) + { + typedef typename T::ElementType ElementType; + Ptr listProxy=UnboxValue>(value, typeDescriptor, valueName); + collections::LazyList lazyList=GetLazyList(listProxy); + collections::CopyFrom(result, lazyList); + } + }; + + template + struct ParameterAccessor, TypeFlags::ObservableListType> + { + static Value BoxParameter(collections::ObservableList& object, ITypeDescriptor* typeDescriptor) + { + ITypeDescriptor* td = nullptr; +#ifndef VCZH_DEBUG_NO_REFLECTION + td = Description::GetAssociatedTypeDescriptor(); +#endif + return BoxValue>(object.GetWrapper(), td); + } + }; + + template + struct ParameterAccessor + { + static Value BoxParameter(T& object, ITypeDescriptor* typeDescriptor) + { + Ptr result=new ValueReadonlyDictionaryWrapper(&object); + + ITypeDescriptor* td = nullptr; +#ifndef VCZH_DEBUG_NO_REFLECTION + td = Description::GetAssociatedTypeDescriptor(); +#endif + return BoxValue>(result, td); + } + + static void UnboxParameter(const Value& value, T& result, ITypeDescriptor* typeDescriptor, const WString& valueName) + { + typedef typename T::KeyContainer KeyContainer; + typedef typename T::ValueContainer ValueContainer; + typedef typename KeyContainer::ElementType KeyType; + typedef typename ValueContainer::ElementType ValueType; + + Ptr dictionaryProxy=UnboxValue>(value, typeDescriptor, valueName); + collections::LazyList> lazyList=GetLazyList(dictionaryProxy); + collections::CopyFrom(result, lazyList); + } + }; + + template + struct ParameterAccessor + { + static Value BoxParameter(T& object, ITypeDescriptor* typeDescriptor) + { + Ptr result=new ValueDictionaryWrapper(&object); + + ITypeDescriptor* td = nullptr; +#ifndef VCZH_DEBUG_NO_REFLECTION + td = Description::GetAssociatedTypeDescriptor(); +#endif + return BoxValue>(result, td); + } + + static void UnboxParameter(const Value& value, T& result, ITypeDescriptor* typeDescriptor, const WString& valueName) + { + typedef typename T::KeyContainer KeyContainer; + typedef typename T::ValueContainer ValueContainer; + typedef typename KeyContainer::ElementType KeyType; + typedef typename ValueContainer::ElementType ValueType; + + Ptr dictionaryProxy=UnboxValue>(value, typeDescriptor, valueName); + collections::LazyList> lazyList=GetLazyList(dictionaryProxy); + collections::CopyFrom(result, lazyList); + } + }; + } + } + + namespace collections + { + template::Type> + class ObservableListBase : public Object, public virtual collections::IEnumerable + { + protected: + collections::List items; + + virtual void NotifyUpdateInternal(vint start, vint count, vint newCount) + { + } + + virtual bool QueryInsert(vint index, const T& value) + { + return true; + } + + virtual void BeforeInsert(vint index, const T& value) + { + } + + virtual void AfterInsert(vint index, const T& value) + { + } + + virtual bool QueryRemove(vint index, const T& value) + { + return true; + } + + virtual void BeforeRemove(vint index, const T& value) + { + } + + virtual void AfterRemove(vint index, vint count) + { + } + + public: + ObservableListBase() + { + } + + ~ObservableListBase() + { + } + + collections::IEnumerator* CreateEnumerator()const + { + return items.CreateEnumerator(); + } + + bool NotifyUpdate(vint start, vint count = 1) + { + if (start<0 || start >= items.Count() || count <= 0 || start + count>items.Count()) + { + return false; + } + else + { + NotifyUpdateInternal(start, count, count); + return true; + } + } + + bool Contains(const K& item)const + { + return items.Contains(item); + } + + vint Count()const + { + return items.Count(); + } + + vint Count() + { + return items.Count(); + } + + const T& Get(vint index)const + { + return items.Get(index); + } + + const T& operator[](vint index)const + { + return items.Get(index); + } + + vint IndexOf(const K& item)const + { + return items.IndexOf(item); + } + + vint Add(const T& item) + { + return Insert(items.Count(), item); + } + + bool Remove(const K& item) + { + vint index = items.IndexOf(item); + if (index == -1) return false; + return RemoveAt(index); + } + + bool RemoveAt(vint index) + { + if (0 <= index && index < items.Count() && QueryRemove(index, items[index])) + { + BeforeRemove(index, items[index]); + T item = items[index]; + items.RemoveAt(index); + AfterRemove(index, 1); + NotifyUpdateInternal(index, 1, 0); + return true; + } + return false; + } + + bool RemoveRange(vint index, vint count) + { + if (count <= 0) return false; + if (0 <= index && index + class ObservableList : public ObservableListBase + { + protected: + Ptr observableList; + + void NotifyUpdateInternal(vint start, vint count, vint newCount)override + { + if (observableList) + { + observableList->ItemChanged(start, count, newCount); + } + } + public: + + Ptr GetWrapper() + { + if (!observableList) + { + observableList = new reflection::description::ValueObservableListWrapper*>(this); + } + return observableList; + } + }; + + namespace randomaccess_internal + { + template + struct RandomAccessable> + { + static const bool CanRead = true; + static const bool CanResize = false; + }; + + template + struct RandomAccessable> + { + static const bool CanRead = true; + static const bool CanResize = false; + }; + } + } +} + +#endif + +/*********************************************************************** +.\REFLECTION\GUITYPEDESCRIPTORBUILDER_FUNCTION.H +***********************************************************************/ +/*********************************************************************** +Vczh Library++ 3.0 +Developer: Zihan Chen(vczh) +Framework::Reflection + +Interfaces: +***********************************************************************/ + +#ifndef VCZH_REFLECTION_GUITYPEDESCRIPTORBUILDER_FUNCTION +#define VCZH_REFLECTION_GUITYPEDESCRIPTORBUILDER_FUNCTION + + +namespace vl +{ + namespace reflection + { + namespace description + { + template + struct EventHelper + { + using Handler = const Func&; + + class EventHandlerImpl : public Object, public reflection::description::IEventHandler + { + public: + Ptr handler; + + EventHandlerImpl(Ptr _handler) + :handler(_handler) + { + } + + bool IsAttached()override + { + return handler->IsAttached(); + } + }; + + static Ptr Attach(Event& e, Handler handler) + { + return MakePtr(e.Add(handler)); + } + + static bool Detach(Event& e, Ptr handler) + { + auto impl = handler.Cast(); + if (!impl) return false; + return e.Remove(impl->handler); + } + + static Event& Invoke(Event& e) + { + return e; + } + }; + +/*********************************************************************** +DetailTypeInfoRetriver> +***********************************************************************/ + +#ifndef VCZH_DEBUG_NO_REFLECTION + namespace internal_helper + { + template + struct GenericArgumentAdder + { + static void Add(Ptr genericType) + { + } + }; + + template + struct GenericArgumentAdder> + { + static void Add(Ptr genericType) + { + genericType->AddGenericArgument(TypeInfoRetriver::CreateTypeInfo()); + GenericArgumentAdder>::Add(genericType); + } + }; + } +#endif + + template + struct DetailTypeInfoRetriver, TypeFlags::FunctionType> + { + typedef DetailTypeInfoRetriver, TypeFlags::NonGenericType> UpLevelRetriver; + + static const ITypeInfo::Decorator Decorator=UpLevelRetriver::Decorator; + typedef IValueList Type; + typedef typename UpLevelRetriver::TempValueType TempValueType; + typedef typename UpLevelRetriver::ResultReferenceType ResultReferenceType; + typedef typename UpLevelRetriver::ResultNonReferenceType ResultNonReferenceType; + +#ifndef VCZH_DEBUG_NO_REFLECTION + static Ptr CreateTypeInfo(TypeInfoHint hint) + { + auto functionType = MakePtr(Description::GetAssociatedTypeDescriptor(), hint); + + auto genericType = MakePtr(functionType); + genericType->AddGenericArgument(TypeInfoRetriver::CreateTypeInfo()); + internal_helper::GenericArgumentAdder>::Add(genericType); + + auto type = MakePtr(genericType); + return type; + } +#endif + }; + + template + struct DetailTypeInfoRetriver, TypeFlags::FunctionType> + : DetailTypeInfoRetriver, TypeFlags::FunctionType> + { + }; + +/*********************************************************************** +ValueFunctionProxyWrapper> +***********************************************************************/ + + template + class ValueFunctionProxyWrapper + { + }; + + namespace internal_helper + { + extern void UnboxSpecifiedParameter(Ptr arguments, vint index); + + template + void UnboxSpecifiedParameter(Ptr arguments, vint index, T0& p0, TArgs& ...args) + { + UnboxParameter::TempValueType>(arguments->Get(index), p0, 0, itow(index + 1) + L"-th argument"); + UnboxSpecifiedParameter(arguments, index + 1, args...); + } + + template + struct BoxedFunctionInvoker + { + static Value Invoke(const Func& function, Ptr arguments, typename RemoveCVR::Type&& ...args) + { + UnboxSpecifiedParameter(arguments, 0, args...); + R result = function(args...); + return BoxParameter(result); + } + }; + + template + struct BoxedFunctionInvoker + { + static Value Invoke(const Func& function, Ptr arguments, typename RemoveCVR::Type&& ...args) + { + UnboxSpecifiedParameter(arguments, 0, args...); + function(args...); + return Value(); + } + }; + } + + template + class ValueFunctionProxyWrapper : public Object, public virtual IValueFunctionProxy + { + typedef Func FunctionType; + protected: + FunctionType function; + + public: + ValueFunctionProxyWrapper(const FunctionType& _function) + :function(_function) + { + } + + FunctionType GetFunction() + { + return function; + } + + Value Invoke(Ptr arguments)override + { + if (!arguments || arguments->GetCount() != sizeof...(TArgs)) + { +#ifndef VCZH_DEBUG_NO_REFLECTION + throw ArgumentCountMismtatchException(); +#else + CHECK_FAIL(L"Argument count mismatch."); +#endif + } + return internal_helper::BoxedFunctionInvoker::Invoke(function, arguments, typename RemoveCVR::Type()...); + } + }; + +/*********************************************************************** +ParameterAccessor> +***********************************************************************/ + + namespace internal_helper + { + extern void AddValueToList(Ptr arguments); + + template + void AddValueToList(Ptr arguments, T0&& p0, TArgs&& ...args) + { + arguments->Add(description::BoxParameter(p0)); + AddValueToList(arguments, args...); + } + } + + template + struct ParameterAccessor, TypeFlags::FunctionType> + { + static Value BoxParameter(const Func& object, ITypeDescriptor* typeDescriptor) + { + typedef R(RawFunctionType)(TArgs...); + Ptr result=new ValueFunctionProxyWrapper(object); + + ITypeDescriptor* td = nullptr; +#ifndef VCZH_DEBUG_NO_REFLECTION + td = Description::GetAssociatedTypeDescriptor(); +#endif + return BoxValue>(result, td); + } + + static void UnboxParameter(const Value& value, Func& result, ITypeDescriptor* typeDescriptor, const WString& valueName) + { + typedef R(RawFunctionType)(TArgs...); + typedef ValueFunctionProxyWrapper ProxyType; + Ptr functionProxy=UnboxValue>(value, typeDescriptor, valueName); + if(functionProxy) + { + if(Ptr proxy=functionProxy.Cast()) + { + result=proxy->GetFunction(); + } + else + { + result=[functionProxy](TArgs ...args) + { + Ptr arguments = IValueList::Create(); + internal_helper::AddValueToList(arguments, ForwardValue(args)...); +#if defined VCZH_MSVC + typedef TypeInfoRetriver::TempValueType ResultType; +#elif defined VCZH_GCC + typedef typename TypeInfoRetriver::TempValueType ResultType; +#endif + ResultType proxyResult; + description::UnboxParameter(functionProxy->Invoke(arguments), proxyResult); + return proxyResult; + }; + } + } + } + }; + + template + struct ParameterAccessor, TypeFlags::FunctionType> : ParameterAccessor, TypeFlags::FunctionType> + { + }; + +#ifndef VCZH_DEBUG_NO_REFLECTION + +/*********************************************************************** +MethodInfoImpl +***********************************************************************/ + + template + class CustomConstructorInfoImpl{}; + + template + class CustomMethodInfoImpl{}; + + template + class CustomExternalMethodInfoImpl{}; + + template + class CustomStaticMethodInfoImpl{}; + + template + class CustomEventInfoImpl{}; + +/*********************************************************************** +CustomConstructorInfoImpl +***********************************************************************/ + + namespace internal_helper + { + extern void UnboxSpecifiedParameter(MethodInfoImpl* methodInfo, collections::Array& arguments, vint index); + + template + void UnboxSpecifiedParameter(MethodInfoImpl* methodInfo, collections::Array& arguments, vint index, T0& p0, TArgs& ...args) + { + UnboxParameter::TempValueType>(arguments[index], p0, methodInfo->GetParameter(index)->GetType()->GetTypeDescriptor(), itow(index) + L"-th argument"); + UnboxSpecifiedParameter(methodInfo, arguments, index + 1, args...); + } + + template + struct BoxedConstructorInvoker + { + static Value Invoke(MethodInfoImpl* methodInfo, collections::Array& arguments, typename RemoveCVR::Type&& ...args) + { + UnboxSpecifiedParameter(methodInfo, arguments, 0, args...); + R result = new typename TypeInfoRetriver::Type(args...); + return BoxParameter(result); + } + }; + + template + struct ConstructorArgumentAdder + { + static void Add(MethodInfoImpl* methodInfo, const wchar_t* parameterNames[], vint index) + { + } + }; + + template + struct ConstructorArgumentAdder> + { + static void Add(MethodInfoImpl* methodInfo, const wchar_t* parameterNames[], vint index) + { + methodInfo->AddParameter(new ParameterInfoImpl(methodInfo, parameterNames[index], TypeInfoRetriver::CreateTypeInfo())); + ConstructorArgumentAdder>::Add(methodInfo, parameterNames, index + 1); + } + }; + } + + template + class CustomConstructorInfoImpl : public MethodInfoImpl + { + protected: + Value InvokeInternal(const Value& thisObject, collections::Array& arguments)override + { + return internal_helper::BoxedConstructorInvoker::Invoke(this, arguments, typename RemoveCVR::Type()...); + } + + Value CreateFunctionProxyInternal(const Value& thisObject)override + { + Func proxy( + LAMBDA([](TArgs ...args)->R + { +#if defined VCZH_MSVC + R result = new TypeInfoRetriver::Type(args...); +#elif defined VCZH_GCC + R result = new typename TypeInfoRetriver::Type(args...); +#endif + return result; + }) + ); + return BoxParameter>(proxy); + } + public: + CustomConstructorInfoImpl(const wchar_t* parameterNames[]) + :MethodInfoImpl(0, TypeInfoRetriver::CreateTypeInfo(), true) + { + internal_helper::ConstructorArgumentAdder>::Add(this, parameterNames, 0); + } + + IMethodInfo::ICpp* GetCpp()override + { + return nullptr; + } + }; + +/*********************************************************************** +CustomMethodInfoImpl +CustomStaticMethodInfoImpl +***********************************************************************/ + + namespace internal_helper + { + template + struct BoxedMethodInvoker + { + static Value Invoke(TClass* object, R(__thiscall TClass::* method)(TArgs...), MethodInfoImpl* methodInfo, collections::Array& arguments, typename RemoveCVR::Type&& ...args) + { + UnboxSpecifiedParameter(methodInfo, arguments, 0, args...); + R result = (object->*method)(args...); + return BoxParameter(result, methodInfo->GetReturn()->GetTypeDescriptor()); + } + }; + + template + struct BoxedMethodInvoker + { + static Value Invoke(TClass* object, void(__thiscall TClass::* method)(TArgs...), MethodInfoImpl* methodInfo, collections::Array& arguments, typename RemoveCVR::Type&& ...args) + { + UnboxSpecifiedParameter(methodInfo, arguments, 0, args...); + (object->*method)(args...); + return Value(); + } + }; + + template + struct BoxedExternalMethodInvoker + { + static Value Invoke(TClass* object, R(*method)(TClass*, TArgs...), MethodInfoImpl* methodInfo, collections::Array& arguments, typename RemoveCVR::Type&& ...args) + { + UnboxSpecifiedParameter(methodInfo, arguments, 0, args...); + R result = method(object, args...); + return BoxParameter(result, methodInfo->GetReturn()->GetTypeDescriptor()); + } + }; + + template + struct BoxedExternalMethodInvoker + { + static Value Invoke(TClass* object, void(*method)(TClass*, TArgs...), MethodInfoImpl* methodInfo, collections::Array& arguments, typename RemoveCVR::Type&& ...args) + { + UnboxSpecifiedParameter(methodInfo, arguments, 0, args...); + method(object, args...); + return Value(); + } + }; + } + class MethodInfoImpl_StaticCpp : public MethodInfoImpl, private IMethodInfo::ICpp + { + private: + WString invokeTemplate; + WString closureTemplate; + + const WString& GetInvokeTemplate()override + { + return invokeTemplate; + } + + const WString& GetClosureTemplate()override + { + return closureTemplate; + } + public: + MethodInfoImpl_StaticCpp(IMethodGroupInfo* _ownerMethodGroup, Ptr _return, bool _isStatic, const wchar_t* _invokeTemplate, const wchar_t* _closureTemplate) + :MethodInfoImpl(_ownerMethodGroup, _return, _isStatic) + { + CHECK_ERROR((_invokeTemplate == nullptr) == (_closureTemplate == nullptr), L"MethodInfoImpl_StaticCpp::MethodInfoImpl_StaticCpp()#Templates should all be set or default at the same time."); + if (_invokeTemplate) + { + invokeTemplate = WString(_invokeTemplate, false); + } + if (_closureTemplate) + { + closureTemplate = WString(_closureTemplate, false); + } + } + + IMethodInfo::ICpp* GetCpp()override + { + return invokeTemplate.Length() == 0 || closureTemplate.Length() == 0 ? nullptr : this; + } + }; + + template + class CustomMethodInfoImpl : public MethodInfoImpl_StaticCpp + { + protected: + R(__thiscall TClass::* method)(TArgs...); + + Value InvokeInternal(const Value& thisObject, collections::Array& arguments)override + { + TClass* object=UnboxValue(thisObject, GetOwnerTypeDescriptor(), L"thisObject"); + return internal_helper::BoxedMethodInvoker::Invoke(object, method, this, arguments, typename RemoveCVR::Type()...); + } + + Value CreateFunctionProxyInternal(const Value& thisObject)override + { + TClass* object=UnboxValue(thisObject, GetOwnerTypeDescriptor(), L"thisObject"); + Func proxy(object, method); + return BoxParameter>(proxy); + } + public: + CustomMethodInfoImpl(const wchar_t* parameterNames[], R(__thiscall TClass::* _method)(TArgs...), const wchar_t* _invokeTemplate, const wchar_t* _closureTemplate) + :MethodInfoImpl_StaticCpp(0, TypeInfoRetriver::CreateTypeInfo(), false, _invokeTemplate, _closureTemplate) + ,method(_method) + { + internal_helper::ConstructorArgumentAdder>::Add(this, parameterNames, 0); + } + }; + + template + class CustomExternalMethodInfoImpl : public MethodInfoImpl_StaticCpp + { + protected: + R(*method)(TClass*, TArgs...); + + Value InvokeInternal(const Value& thisObject, collections::Array& arguments)override + { + TClass* object=UnboxValue(thisObject, GetOwnerTypeDescriptor(), L"thisObject"); + return internal_helper::BoxedExternalMethodInvoker::Invoke(object, method, this, arguments, typename RemoveCVR::Type()...); + } + + Value CreateFunctionProxyInternal(const Value& thisObject)override + { + TClass* object=UnboxValue(thisObject, GetOwnerTypeDescriptor(), L"thisObject"); + Func proxy = Curry(Func(method))(object); + return BoxParameter>(proxy); + } + public: + CustomExternalMethodInfoImpl(const wchar_t* parameterNames[], R(*_method)(TClass*, TArgs...), const wchar_t* _invokeTemplate, const wchar_t* _closureTemplate) + :MethodInfoImpl_StaticCpp(0, TypeInfoRetriver::CreateTypeInfo(), false, _invokeTemplate, _closureTemplate) + ,method(_method) + { + internal_helper::ConstructorArgumentAdder>::Add(this, parameterNames, 0); + } + }; + +/*********************************************************************** +CustomStaticMethodInfoImpl +***********************************************************************/ + + namespace internal_helper + { + template + struct BoxedStaticMethodInvoker + { + static Value Invoke(R(* method)(TArgs...), MethodInfoImpl* methodInfo, collections::Array& arguments, typename RemoveCVR::Type&& ...args) + { + UnboxSpecifiedParameter(methodInfo, arguments, 0, args...); + R result = method(args...); + return BoxParameter(result, methodInfo->GetReturn()->GetTypeDescriptor()); + } + }; + + template + struct BoxedStaticMethodInvoker + { + static Value Invoke(void(* method)(TArgs...), MethodInfoImpl* methodInfo, collections::Array& arguments, typename RemoveCVR::Type&& ...args) + { + UnboxSpecifiedParameter(methodInfo, arguments, 0, args...); + method(args...); + return Value(); + } + }; + } + + template + class CustomStaticMethodInfoImpl : public MethodInfoImpl_StaticCpp + { + protected: + R(* method)(TArgs...); + + Value InvokeInternal(const Value& thisObject, collections::Array& arguments)override + { + return internal_helper::BoxedStaticMethodInvoker::Invoke(method, this, arguments, typename RemoveCVR::Type()...); + } + + Value CreateFunctionProxyInternal(const Value& thisObject)override + { + Func proxy(method); + return BoxParameter>(proxy); + } + public: + CustomStaticMethodInfoImpl(const wchar_t* parameterNames[], R(* _method)(TArgs...), const wchar_t* _invokeTemplate, const wchar_t* _closureTemplate) + :MethodInfoImpl_StaticCpp(0, TypeInfoRetriver::CreateTypeInfo(), true, _invokeTemplate, _closureTemplate) + ,method(_method) + { + internal_helper::ConstructorArgumentAdder>::Add(this, parameterNames, 0); + } + }; + +/*********************************************************************** +CustomEventInfoImpl +***********************************************************************/ + + namespace internal_helper + { + template + struct BoxedEventInvoker + { + static void Invoke(Event& eventObject, Ptr arguments, typename RemoveCVR::Type&& ...args) + { + UnboxSpecifiedParameter(arguments, 0, args...); + eventObject(args...); + } + }; + } + + template + class CustomEventInfoImpl : public EventInfoImpl + { + protected: + Event TClass::* eventRef; + + Ptr AttachInternal(DescriptableObject* thisObject, Ptr handler)override + { + TClass* object = UnboxValue(Value::From(thisObject), GetOwnerTypeDescriptor(), L"thisObject"); + Event& eventObject = object->*eventRef; + auto func = Func([=](TArgs ...args) + { + auto arguments = IValueList::Create(); + internal_helper::AddValueToList(arguments, ForwardValue(args)...); + handler->Invoke(arguments); + }); + return EventHelper::Attach(eventObject, func); + } + + bool DetachInternal(DescriptableObject* thisObject, Ptr handler)override + { + TClass* object = UnboxValue(Value::From(thisObject), GetOwnerTypeDescriptor(), L"thisObject"); + Event& eventObject = object->*eventRef; + return EventHelper::Detach(eventObject, handler); + } + + void InvokeInternal(DescriptableObject* thisObject, Ptr arguments)override + { + TClass* object = UnboxValue(Value::From(thisObject), GetOwnerTypeDescriptor(), L"thisObject"); + Event& eventObject = object->*eventRef; + internal_helper::BoxedEventInvoker::Invoke(eventObject, arguments, typename RemoveCVR::Type()...); + } + + Ptr GetHandlerTypeInternal()override + { + return TypeInfoRetriver>::CreateTypeInfo(); + } + public: + CustomEventInfoImpl(ITypeDescriptor* _ownerTypeDescriptor, const WString& _name, Event TClass::* _eventRef) + :EventInfoImpl(_ownerTypeDescriptor, _name) + , eventRef(_eventRef) + { + } + + ~CustomEventInfoImpl() + { + } + + IEventInfo::ICpp* GetCpp()override + { + return nullptr; + } + }; + + template + struct CustomEventFunctionTypeRetriver + { + typedef vint Type; + }; + + template + struct CustomEventFunctionTypeRetriver TClass::*> + { + typedef TEvent Type; + }; +#endif + } + } +} + +#endif + +/*********************************************************************** +.\REFLECTION\GUITYPEDESCRIPTORBUILDER_STRUCT.H +***********************************************************************/ +/*********************************************************************** +Vczh Library++ 3.0 +Developer: Zihan Chen(vczh) +Framework::Reflection + +Interfaces: +***********************************************************************/ + +#ifndef VCZH_REFLECTION_GUITYPEDESCRIPTORBUILDER_STRUCT +#define VCZH_REFLECTION_GUITYPEDESCRIPTORBUILDER_STRUCT + + +namespace vl +{ + namespace reflection + { + namespace description + { + +/*********************************************************************** +DetailTypeInfoRetriver +***********************************************************************/ + + template + struct DetailTypeInfoRetriver + { + static const ITypeInfo::Decorator Decorator=ITypeInfo::TypeDescriptor; + typedef T Type; + typedef T TempValueType; + typedef T& ResultReferenceType; + typedef T ResultNonReferenceType; + +#ifndef VCZH_DEBUG_NO_REFLECTION + static Ptr CreateTypeInfo(TypeInfoHint hint) + { + return MakePtr(GetTypeDescriptor(), hint); + } +#endif + }; + + template + struct DetailTypeInfoRetriver + { + typedef DetailTypeInfoRetriver UpLevelRetriver; + + static const ITypeInfo::Decorator Decorator=UpLevelRetriver::Decorator; + typedef typename UpLevelRetriver::Type Type; + typedef T TempValueType; + typedef const T& ResultReferenceType; + typedef const T ResultNonReferenceType; + +#ifndef VCZH_DEBUG_NO_REFLECTION + static Ptr CreateTypeInfo(TypeInfoHint hint) + { + return TypeInfoRetriver::CreateTypeInfo(); + } +#endif + }; + + template + struct DetailTypeInfoRetriver + { + typedef DetailTypeInfoRetriver UpLevelRetriver; + + static const ITypeInfo::Decorator Decorator=UpLevelRetriver::Decorator; + typedef typename UpLevelRetriver::Type Type; + typedef T TempValueType; + typedef T& ResultReferenceType; + typedef T ResultNonReferenceType; + +#ifndef VCZH_DEBUG_NO_REFLECTION + static Ptr CreateTypeInfo(TypeInfoHint hint) + { + return TypeInfoRetriver::CreateTypeInfo(); + } +#endif + }; + + template + struct DetailTypeInfoRetriver + { + typedef DetailTypeInfoRetriver UpLevelRetriver; + + static const ITypeInfo::Decorator Decorator=ITypeInfo::RawPtr; + typedef typename UpLevelRetriver::Type Type; + typedef T* TempValueType; + typedef T*& ResultReferenceType; + typedef T* ResultNonReferenceType; + +#ifndef VCZH_DEBUG_NO_REFLECTION + static Ptr CreateTypeInfo(TypeInfoHint hint) + { + return MakePtr(TypeInfoRetriver::CreateTypeInfo()); + } +#endif + }; + + template + struct DetailTypeInfoRetriver, TypeFlags::NonGenericType> + { + typedef DetailTypeInfoRetriver UpLevelRetriver; + + static const ITypeInfo::Decorator Decorator=ITypeInfo::SharedPtr; + typedef typename UpLevelRetriver::Type Type; + typedef Ptr TempValueType; + typedef Ptr& ResultReferenceType; + typedef Ptr ResultNonReferenceType; + +#ifndef VCZH_DEBUG_NO_REFLECTION + static Ptr CreateTypeInfo(TypeInfoHint hint) + { + return MakePtr(TypeInfoRetriver::CreateTypeInfo()); + } +#endif + }; + + template + struct DetailTypeInfoRetriver, TypeFlags::NonGenericType> + { + typedef DetailTypeInfoRetriver UpLevelRetriver; + + static const ITypeInfo::Decorator Decorator=ITypeInfo::Nullable; + typedef typename UpLevelRetriver::Type Type; + typedef Nullable TempValueType; + typedef Nullable& ResultReferenceType; + typedef Nullable ResultNonReferenceType; + +#ifndef VCZH_DEBUG_NO_REFLECTION + static Ptr CreateTypeInfo(TypeInfoHint hint) + { + return MakePtr(TypeInfoRetriver::CreateTypeInfo()); + } +#endif + }; + + template + struct DetailTypeInfoRetriver + { + typedef DetailTypeInfoRetriver UpLevelRetriver; + + static const ITypeInfo::Decorator Decorator=UpLevelRetriver::Decorator; + typedef typename UpLevelRetriver::Type Type; + typedef typename UpLevelRetriver::TempValueType TempValueType; + typedef T& ResultReferenceType; + typedef T ResultNonReferenceType; + +#ifndef VCZH_DEBUG_NO_REFLECTION + static Ptr CreateTypeInfo(TypeInfoHint hint) + { + return TypeInfoRetriver::CreateTypeInfo(); + } +#endif + }; + + template<> + struct TypeInfoRetriver : public TypeInfoRetriver + { + }; + +/*********************************************************************** +ParameterAccessor +***********************************************************************/ + + template + struct ParameterAccessor + { + static Value BoxParameter(const T& object, ITypeDescriptor* typeDescriptor) + { + return BoxValue(object, typeDescriptor); + } + + static void UnboxParameter(const Value& value, T& result, ITypeDescriptor* typeDescriptor, const WString& valueName) + { + result=UnboxValue(value, typeDescriptor, valueName); + } + }; + + template + struct ValueAccessor + { + static Value BoxValue(T* object, ITypeDescriptor* typeDescriptor) + { + return Value::From(object); + } + + static T* UnboxValue(const Value& value, ITypeDescriptor* typeDescriptor, const WString& valueName) + { + if(value.IsNull()) return nullptr; + T* result = nullptr; + if (value.GetRawPtr()) + { + result = value.GetRawPtr()->SafeAggregationCast(); + } + if(!result) + { +#ifndef VCZH_DEBUG_NO_REFLECTION + if(!typeDescriptor) + { + typeDescriptor=GetTypeDescriptor(); + } + throw ArgumentTypeMismtatchException(valueName, typeDescriptor, Value::RawPtr, value); +#else + CHECK_FAIL(L"vl::reflection::description::UnboxValue()#Argument type mismatch."); +#endif + } + return result; + } + }; + + template + struct ValueAccessor, ITypeInfo::SharedPtr> + { + static Value BoxValue(Ptr object, ITypeDescriptor* typeDescriptor) + { + return Value::From(object); + } + + static Ptr UnboxValue(const Value& value, ITypeDescriptor* typeDescriptor, const WString& valueName) + { + if (value.IsNull()) return nullptr; + Ptr result; + if(value.GetValueType()==Value::RawPtr || value.GetValueType()==Value::SharedPtr) + { + result = value.GetRawPtr()->SafeAggregationCast(); + } + if(!result) + { +#ifndef VCZH_DEBUG_NO_REFLECTION + if(!typeDescriptor) + { + typeDescriptor=GetTypeDescriptor(); + } + throw ArgumentTypeMismtatchException(valueName, typeDescriptor, Value::SharedPtr, value); +#else + CHECK_FAIL(L"vl::reflection::description::UnboxValue()#Argument type mismatch."); +#endif + } + return result; + } + }; + + template + struct ValueAccessor, ITypeInfo::Nullable> + { + static Value BoxValue(Nullable object, ITypeDescriptor* typeDescriptor) + { + return object?ValueAccessor::BoxValue(object.Value(), typeDescriptor):Value(); + } + + static Nullable UnboxValue(const Value& value, ITypeDescriptor* typeDescriptor, const WString& valueName) + { + if(value.IsNull()) + { + return Nullable(); + } + else + { + return ValueAccessor::UnboxValue(value, typeDescriptor, valueName); + } + } + }; + + template + struct ValueAccessor + { + static Value BoxValue(const T& object, ITypeDescriptor* typeDescriptor) + { +#ifndef VCZH_DEBUG_NO_REFLECTION + if(!typeDescriptor) + { + typeDescriptor = GetTypeDescriptor::Type>(); + } +#endif + using Type = typename vl::RemoveCVR::Type; + return Value::From(new IValueType::TypedBox(object), typeDescriptor); + } + + static T UnboxValue(const Value& value, ITypeDescriptor* typeDescriptor, const WString& valueName) + { + using Type = typename vl::RemoveCVR::Type; + if (auto unboxedValue = value.GetBoxedValue().Cast>()) + { + return unboxedValue->value; + } + else + { +#ifndef VCZH_DEBUG_NO_REFLECTION + if (!typeDescriptor) + { + typeDescriptor = GetTypeDescriptor::Type>(); + } + throw ArgumentTypeMismtatchException(valueName, typeDescriptor, Value::BoxedValue, value); +#else + CHECK_FAIL(L"vl::reflection::description::UnboxValue()#Argument type mismatch."); +#endif + } + } + }; + + template<> + struct ValueAccessor + { + static Value BoxValue(const Value& object, ITypeDescriptor* typeDescriptor) + { + return object; + } + + static Value UnboxValue(const Value& value, ITypeDescriptor* typeDescriptor, const WString& valueName) + { + return value; + } + }; + + template<> + struct ValueAccessor + { + static Value BoxValue(const VoidValue& object, ITypeDescriptor* typeDescriptor) + { + return Value(); + } + + static VoidValue UnboxValue(const Value& value, ITypeDescriptor* typeDescriptor, const WString& valueName) + { + return VoidValue(); + } + }; + } + } +} + +#endif + +/*********************************************************************** +.\REFLECTION\GUITYPEDESCRIPTORMACROS.H +***********************************************************************/ +/*********************************************************************** +Vczh Library++ 3.0 +Developer: Zihan Chen(vczh) +Framework::Reflection + +Interfaces: +***********************************************************************/ + +#ifndef VCZH_REFLECTION_GUITYPEDESCRIPTORMACROS +#define VCZH_REFLECTION_GUITYPEDESCRIPTORMACROS + + +#ifndef VCZH_DEBUG_NO_REFLECTION + +/*********************************************************************** +Macros +***********************************************************************/ + +namespace vl +{ + namespace reflection + { + namespace description + { + template + struct CustomTypeDescriptorSelector{}; + + struct MethodPointerBinaryData + { + typedef collections::Dictionary MethodMap; + + class IIndexer : public virtual IDescriptable + { + public: + virtual void IndexMethodInfo(const MethodPointerBinaryData& data, IMethodInfo* methodInfo) = 0; + virtual IMethodInfo* GetIndexedMethodInfo(const MethodPointerBinaryData& data) = 0; + }; + + vint data[4]; + + static inline vint Compare(const MethodPointerBinaryData& a, const MethodPointerBinaryData& b) + { + { + auto result = a.data[0] - b.data[0]; + if (result != 0) return result; + } + { + auto result = a.data[1] - b.data[1]; + if (result != 0) return result; + } + { + auto result = a.data[2] - b.data[2]; + if (result != 0) return result; + } + { + auto result = a.data[3] - b.data[3]; + if (result != 0) return result; + } + return 0; + } + +#define COMPARE(OPERATOR)\ + inline bool operator OPERATOR(const MethodPointerBinaryData& d)const\ + {\ + return Compare(*this, d) OPERATOR 0;\ + } + + COMPARE(<) + COMPARE(<=) + COMPARE(>) + COMPARE(>=) + COMPARE(==) + COMPARE(!=) +#undef COMPARE + }; + + template + union MethodPointerBinaryDataRetriver + { + T methodPointer; + MethodPointerBinaryData binaryData; + + MethodPointerBinaryDataRetriver(T _methodPointer) + { + memset(&binaryData, 0, sizeof(binaryData)); + methodPointer = _methodPointer; + } + + const MethodPointerBinaryData& GetBinaryData() + { + static_assert(sizeof(T) <= sizeof(MethodPointerBinaryData), "Your C++ compiler is bad!"); + return binaryData; + } + }; + + template + struct MethodPointerBinaryDataRecorder + { + static void RecordMethod(const MethodPointerBinaryData& data, ITypeDescriptor* td, IMethodInfo* methodInfo) + { + } + }; + + template + struct MethodPointerBinaryDataRecorder + { + static void RecordMethod(const MethodPointerBinaryData& data, ITypeDescriptor* td, IMethodInfo* methodInfo) + { + auto impl = dynamic_cast(td); + CHECK_ERROR(impl != nullptr, L"Internal error: RecordMethod can only be called when registering methods."); + impl->IndexMethodInfo(data, methodInfo); + } + }; + + template + using FUNCTIONNAME_AddPointer = T*; + +/*********************************************************************** +Type +***********************************************************************/ + +#define BEGIN_TYPE_INFO_NAMESPACE namespace vl{namespace reflection{namespace description{ +#define END_TYPE_INFO_NAMESPACE }}} +#define ADD_TYPE_INFO(TYPENAME)\ + {\ + Ptr type=new CustomTypeDescriptorSelector::CustomTypeDescriptorImpl();\ + manager->SetTypeDescriptor(TypeInfo::content.typeName, type);\ + } + +/*********************************************************************** +InterfaceProxy +***********************************************************************/ + +#define INTERFACE_PROXY_CTOR_RAWPTR(INTERFACE)\ + static INTERFACE* Create(Ptr proxy)\ + {\ + auto obj = new ValueInterfaceProxy();\ + obj->SetProxy(proxy);\ + return obj;\ + }\ + +#define INTERFACE_PROXY_CTOR_SHAREDPTR(INTERFACE)\ + static Ptr Create(Ptr proxy)\ + {\ + auto obj = new ValueInterfaceProxy();\ + obj->SetProxy(proxy);\ + return obj;\ + }\ + +#define BEGIN_INTERFACE_PROXY_NOPARENT_HEADER(INTERFACE)\ + template<>\ + class ValueInterfaceProxy : public ValueInterfaceImpl\ + {\ + typedef INTERFACE _interface_proxy_InterfaceType;\ + public:\ + +#define BEGIN_INTERFACE_PROXY_NOPARENT_RAWPTR(INTERFACE)\ + BEGIN_INTERFACE_PROXY_NOPARENT_HEADER(INTERFACE)\ + INTERFACE_PROXY_CTOR_RAWPTR(INTERFACE)\ + +#define BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(INTERFACE)\ + BEGIN_INTERFACE_PROXY_NOPARENT_HEADER(INTERFACE)\ + INTERFACE_PROXY_CTOR_SHAREDPTR(INTERFACE)\ + +#define BEGIN_INTERFACE_PROXY_HEADER(INTERFACE, ...)\ + template<>\ + class ValueInterfaceProxy : public ValueInterfaceImpl\ + {\ + typedef INTERFACE _interface_proxy_InterfaceType;\ + public:\ + +#define BEGIN_INTERFACE_PROXY_RAWPTR(INTERFACE, ...)\ + BEGIN_INTERFACE_PROXY_HEADER(INTERFACE, __VA_ARGS__)\ + INTERFACE_PROXY_CTOR_RAWPTR(INTERFACE)\ + +#define BEGIN_INTERFACE_PROXY_SHAREDPTR(INTERFACE, ...)\ + BEGIN_INTERFACE_PROXY_HEADER(INTERFACE, __VA_ARGS__)\ + INTERFACE_PROXY_CTOR_SHAREDPTR(INTERFACE)\ + +#define END_INTERFACE_PROXY(INTERFACE)\ + }; + +/*********************************************************************** +InterfaceProxy::Invoke +***********************************************************************/ + + template + auto MethodTypeTrait(TArgument...)->TReturn(TClass::*)(TArgument...) + { + return nullptr; + } + +#define PREPARE_INVOKE_INTERFACE_PROXY(METHODNAME, ...)\ + static ITypeDescriptor* _interface_proxy_typeDescriptor = nullptr;\ + static IMethodInfo* _interface_proxy_methodInfo = nullptr;\ + if (_interface_proxy_typeDescriptor != static_cast(this)->GetTypeDescriptor())\ + {\ + _interface_proxy_typeDescriptor = static_cast(this)->GetTypeDescriptor();\ + CHECK_ERROR(_interface_proxy_typeDescriptor != nullptr, L"Internal error: The type of this interface has not been registered.");\ + auto impl = dynamic_cast(_interface_proxy_typeDescriptor);\ + CHECK_ERROR(impl != nullptr, L"Internal error: BEGIN_INTERFACE_PROXY is the only correct way to register an interface with a proxy.");\ + auto _interface_proxy_method\ + = (decltype(MethodTypeTrait<_interface_proxy_InterfaceType, decltype(METHODNAME(__VA_ARGS__))>(__VA_ARGS__)))\ + &_interface_proxy_InterfaceType::METHODNAME;\ + MethodPointerBinaryDataRetriver binaryData(_interface_proxy_method);\ + _interface_proxy_methodInfo = impl->GetIndexedMethodInfo(binaryData.GetBinaryData());\ + }\ + +#define INVOKE_INTERFACE_PROXY(METHODNAME, ...)\ + PREPARE_INVOKE_INTERFACE_PROXY(METHODNAME, __VA_ARGS__)\ + proxy->Invoke(_interface_proxy_methodInfo, IValueList::Create(collections::From((collections::Array&)(Value_xs(), __VA_ARGS__)))) + +#define INVOKE_INTERFACE_PROXY_NOPARAMS(METHODNAME)\ + PREPARE_INVOKE_INTERFACE_PROXY(METHODNAME)\ + proxy->Invoke(_interface_proxy_methodInfo, IValueList::Create()) + +#define INVOKEGET_INTERFACE_PROXY(METHODNAME, ...)\ + PREPARE_INVOKE_INTERFACE_PROXY(METHODNAME, __VA_ARGS__)\ + return UnboxValue(proxy->Invoke(_interface_proxy_methodInfo, IValueList::Create(collections::From((collections::Array&)(Value_xs(), __VA_ARGS__))))) + +#define INVOKEGET_INTERFACE_PROXY_NOPARAMS(METHODNAME)\ + PREPARE_INVOKE_INTERFACE_PROXY(METHODNAME)\ + return UnboxValue(proxy->Invoke(_interface_proxy_methodInfo, IValueList::Create())) + +/*********************************************************************** +Enum +***********************************************************************/ + +#define BEGIN_ENUM_ITEM_FLAG(TYPENAME, TDFLAGS)\ + template<>\ + struct CustomTypeDescriptorSelector\ + {\ + public:\ + class CustomTypeDescriptorImpl : public EnumTypeDescriptor\ + {\ + typedef TYPENAME EnumType;\ + public:\ + void LoadInternal()override\ + {\ + EnumTypeDescriptor::LoadInternal();\ + +#define BEGIN_ENUM_ITEM(TYPENAME) BEGIN_ENUM_ITEM_FLAG(TYPENAME, TypeDescriptorFlags::NormalEnum) +#define BEGIN_ENUM_ITEM_MERGABLE(TYPENAME) BEGIN_ENUM_ITEM_FLAG(TYPENAME, TypeDescriptorFlags::FlagEnum) + +#define END_ENUM_ITEM(TYPENAME)\ + }\ + };\ + }; + +#define ENUM_ITEM_NAMESPACE(TYPENAME) typedef TYPENAME EnumItemNamespace; +#define ENUM_ITEM(ITEMNAME) enumType->AddItem(L ## #ITEMNAME, ITEMNAME); +#define ENUM_NAMESPACE_ITEM(ITEMNAME) enumType->AddItem(L ## #ITEMNAME, EnumItemNamespace::ITEMNAME); +#define ENUM_CLASS_ITEM(ITEMNAME) enumType->AddItem(L ## #ITEMNAME, EnumType::ITEMNAME); + +/*********************************************************************** +Struct +***********************************************************************/ + +#define BEGIN_STRUCT_MEMBER_FLAG(TYPENAME, TDFLAGS)\ + template<>\ + struct CustomTypeDescriptorSelector\ + {\ + public:\ + class CustomTypeDescriptorImpl : public StructTypeDescriptor\ + {\ + typedef TYPENAME StructType;\ + protected:\ + void LoadInternal()override\ + { + +#define BEGIN_STRUCT_MEMBER(TYPENAME)\ + BEGIN_STRUCT_MEMBER_FLAG(TYPENAME, TypeDescriptorFlags::Struct) + +#define END_STRUCT_MEMBER(TYPENAME)\ + }\ + };\ + }; + +#define STRUCT_MEMBER(FIELDNAME)\ + fields.Add(L ## #FIELDNAME, new StructFieldInfoFIELDNAME)>(this, &StructType::FIELDNAME, L ## #FIELDNAME)); + +/*********************************************************************** +Class +***********************************************************************/ + +#define BEGIN_CLASS_MEMBER(TYPENAME)\ + template<>\ + struct CustomTypeDescriptorSelector\ + {\ + public:\ + class CustomTypeDescriptorImpl : public TypeDescriptorImpl\ + {\ + typedef TYPENAME ClassType;\ + static const TypeDescriptorFlags TDFlags = TypeDescriptorFlags::Class;\ + public:\ + CustomTypeDescriptorImpl()\ + :TypeDescriptorImpl(TDFlags, &TypeInfo::content)\ + {\ + Description::SetAssociatedTypeDescroptor(this);\ + }\ + ~CustomTypeDescriptorImpl()\ + {\ + Description::SetAssociatedTypeDescroptor(0);\ + }\ + protected:\ + bool IsAggregatable()override\ + {\ + return AcceptValue>::YesNoType>::Result;\ + }\ + void LoadInternal()override\ + { + +#define CLASS_MEMBER_BASE(TYPENAME)\ + AddBaseType(description::GetTypeDescriptor()); + +#define END_CLASS_MEMBER(TYPENAME)\ + if (GetBaseTypeDescriptorCount() == 0) CLASS_MEMBER_BASE(DescriptableObject)\ + }\ + };\ + }; + +/*********************************************************************** +Interface +***********************************************************************/ + +#define BEGIN_INTERFACE_MEMBER_NOPROXY_FLAG(TYPENAME, TDFLAGS)\ + template<>\ + struct CustomTypeDescriptorSelector\ + {\ + public:\ + class CustomTypeDescriptorImpl : public TypeDescriptorImpl, public MethodPointerBinaryData::IIndexer\ + {\ + typedef TYPENAME ClassType;\ + static const TypeDescriptorFlags TDFlags = TDFLAGS;\ + MethodPointerBinaryData::MethodMap methodsForProxy;\ + public:\ + CustomTypeDescriptorImpl()\ + :TypeDescriptorImpl(TDFLAGS, &TypeInfo::content)\ + {\ + Description::SetAssociatedTypeDescroptor(this);\ + }\ + ~CustomTypeDescriptorImpl()\ + {\ + Description::SetAssociatedTypeDescroptor(0);\ + }\ + void IndexMethodInfo(const MethodPointerBinaryData& data, IMethodInfo* methodInfo)override\ + {\ + methodsForProxy.Add(data, methodInfo);\ + }\ + IMethodInfo* GetIndexedMethodInfo(const MethodPointerBinaryData& data)override\ + {\ + Load();\ + return methodsForProxy[data];\ + }\ + protected:\ + void LoadInternal()override\ + { + +#define BEGIN_INTERFACE_MEMBER_NOPROXY(TYPENAME)\ + BEGIN_INTERFACE_MEMBER_NOPROXY_FLAG(TYPENAME, TypeDescriptorFlags::Interface) + +#define BEGIN_INTERFACE_MEMBER(TYPENAME)\ + BEGIN_INTERFACE_MEMBER_NOPROXY(TYPENAME)\ + CLASS_MEMBER_EXTERNALCTOR(decltype(ValueInterfaceProxy::Create(nullptr))(Ptr), { L"proxy" }, vl::reflection::description::ValueInterfaceProxy::Create) + +#define END_INTERFACE_MEMBER(TYPENAME)\ + if (GetBaseTypeDescriptorCount() == 0 && TDFlags == TypeDescriptorFlags::Interface) CLASS_MEMBER_BASE(IDescriptable)\ + }\ + };\ + }; + +/*********************************************************************** +Field +***********************************************************************/ + +#define CLASS_MEMBER_FIELD(FIELDNAME)\ + AddProperty(\ + new CustomFieldInfoImpl<\ + ClassType,\ + decltype(((ClassType*)0)->FIELDNAME)\ + >(this, L ## #FIELDNAME, &ClassType::FIELDNAME)\ + ); + +/*********************************************************************** +Constructor +***********************************************************************/ + +#define NO_PARAMETER {L""} +#define PROTECT_PARAMETERS(...) __VA_ARGS__ + +#define CLASS_MEMBER_CONSTRUCTOR(FUNCTIONTYPE, PARAMETERNAMES)\ + {\ + const wchar_t* parameterNames[]=PARAMETERNAMES;\ + AddConstructor(new CustomConstructorInfoImpl(parameterNames));\ + } + +#define CLASS_MEMBER_EXTERNALCTOR_TEMPLATE(FUNCTIONTYPE, PARAMETERNAMES, SOURCE, INVOKETEMPLATE, CLOSURETEMPLATE)\ + {\ + const wchar_t* parameterNames[]=PARAMETERNAMES;\ + AddConstructor(\ + new CustomStaticMethodInfoImpl(parameterNames, SOURCE, INVOKETEMPLATE, CLOSURETEMPLATE)\ + );\ + } + +#define CLASS_MEMBER_EXTERNALCTOR(FUNCTIONTYPE, PARAMETERNAMES, SOURCE)\ + CLASS_MEMBER_EXTERNALCTOR_TEMPLATE(FUNCTIONTYPE, PROTECT_PARAMETERS(PARAMETERNAMES), (FUNCTIONNAME_AddPointer)&::SOURCE, L"::" L ## #SOURCE L"($Arguments)", L"::vl::Func<$Func>(&::" L ## #SOURCE L")") + +/*********************************************************************** +Method +***********************************************************************/ + +#define CLASS_MEMBER_EXTERNALMETHOD_TEMPLATE(FUNCTIONNAME, PARAMETERNAMES, FUNCTIONTYPE, SOURCE, INVOKETEMPLATE, CLOSURETEMPLATE)\ + {\ + const wchar_t* parameterNames[]=PARAMETERNAMES;\ + AddMethod(\ + L ## #FUNCTIONNAME,\ + new CustomExternalMethodInfoImpl<\ + ClassType,\ + vl::function_lambda::LambdaRetriveType::FunctionType\ + >(parameterNames, SOURCE, INVOKETEMPLATE, CLOSURETEMPLATE)\ + );\ + } + +#define CLASS_MEMBER_EXTERNALMETHOD(FUNCTIONNAME, PARAMETERNAMES, FUNCTIONTYPE, SOURCE)\ + CLASS_MEMBER_EXTERNALMETHOD_TEMPLATE(FUNCTIONNAME, PROTECT_PARAMETERS(PARAMETERNAMES), FUNCTIONTYPE, &::SOURCE, L"::" L ## #SOURCE L"($This, $Arguments)", L"::vl::Func<$Func>($This, &::" L ## #SOURCE L")") + +#define CLASS_MEMBER_METHOD_OVERLOAD_RENAME_TEMPLATE(EXPECTEDNAME, FUNCTIONNAME, PARAMETERNAMES, FUNCTIONTYPE, INVOKETEMPLATE, CLOSURETEMPLATE)\ + {\ + const wchar_t* parameterNames[]=PARAMETERNAMES;\ + auto methodInfo = new CustomMethodInfoImpl<\ + ClassType,\ + vl::function_lambda::LambdaRetriveType::FunctionType\ + >\ + (parameterNames, (FUNCTIONTYPE)&ClassType::FUNCTIONNAME, INVOKETEMPLATE, CLOSURETEMPLATE);\ + AddMethod(\ + L ## #EXPECTEDNAME,\ + methodInfo\ + );\ + MethodPointerBinaryDataRetriver binaryDataRetriver(&ClassType::FUNCTIONNAME);\ + MethodPointerBinaryDataRecorder::RecordMethod(binaryDataRetriver.GetBinaryData(), this, methodInfo);\ + } + +#define CLASS_MEMBER_METHOD_OVERLOAD_RENAME(EXPECTEDNAME, FUNCTIONNAME, PARAMETERNAMES, FUNCTIONTYPE)\ + CLASS_MEMBER_METHOD_OVERLOAD_RENAME_TEMPLATE(EXPECTEDNAME, FUNCTIONNAME, PROTECT_PARAMETERS(PARAMETERNAMES), FUNCTIONTYPE, L"$This->" L ## #FUNCTIONNAME L"($Arguments)", L"::vl::Func<$Func>($This, &$Type::" L ## #FUNCTIONNAME L")") + +#define CLASS_MEMBER_METHOD_OVERLOAD(FUNCTIONNAME, PARAMETERNAMES, FUNCTIONTYPE)\ + CLASS_MEMBER_METHOD_OVERLOAD_RENAME_TEMPLATE(FUNCTIONNAME, FUNCTIONNAME, PROTECT_PARAMETERS(PARAMETERNAMES), FUNCTIONTYPE, nullptr, nullptr) + +#define CLASS_MEMBER_METHOD_RENAME(EXPECTEDNAME, FUNCTIONNAME, PARAMETERNAMES)\ + CLASS_MEMBER_METHOD_OVERLOAD_RENAME(EXPECTEDNAME, FUNCTIONNAME, PROTECT_PARAMETERS(PARAMETERNAMES), decltype(&ClassType::FUNCTIONNAME)) + +#define CLASS_MEMBER_METHOD(FUNCTIONNAME, PARAMETERNAMES)\ + CLASS_MEMBER_METHOD_OVERLOAD(FUNCTIONNAME, PROTECT_PARAMETERS(PARAMETERNAMES), decltype(&ClassType::FUNCTIONNAME)) + +/*********************************************************************** +Static Method +***********************************************************************/ + +#define CLASS_MEMBER_STATIC_EXTERNALMETHOD_TEMPLATE(FUNCTIONNAME, PARAMETERNAMES, FUNCTIONTYPE, SOURCE, INVOKETEMPLATE, CLOSURETEMPLATE)\ + {\ + const wchar_t* parameterNames[]=PARAMETERNAMES;\ + AddMethod(\ + L ## #FUNCTIONNAME,\ + new CustomStaticMethodInfoImpl<\ + vl::function_lambda::FunctionObjectRetriveType::FunctionType\ + >(parameterNames, (FUNCTIONTYPE)SOURCE, INVOKETEMPLATE, CLOSURETEMPLATE)\ + );\ + } + +#define CLASS_MEMBER_STATIC_EXTERNALMETHOD(FUNCTIONNAME, PARAMETERNAMES, FUNCTIONTYPE, SOURCE)\ + CLASS_MEMBER_STATIC_EXTERNALMETHOD_TEMPLATE(FUNCTIONNAME, PROTECT_PARAMETERS(PARAMETERNAMES), FUNCTIONTYPE, &::SOURCE, L"::" L ## #SOURCE L"($Arguments)", L"::vl::Func<$Func>(&::" L ## #SOURCE L")") + +#define CLASS_MEMBER_STATIC_METHOD_OVERLOAD(FUNCTIONNAME, PARAMETERNAMES, FUNCTIONTYPE)\ + CLASS_MEMBER_STATIC_EXTERNALMETHOD_TEMPLATE(FUNCTIONNAME, PROTECT_PARAMETERS(PARAMETERNAMES), FUNCTIONTYPE, &ClassType::FUNCTIONNAME, nullptr, nullptr) + +#define CLASS_MEMBER_STATIC_METHOD(FUNCTIONNAME, PARAMETERNAMES)\ + CLASS_MEMBER_STATIC_METHOD_OVERLOAD(FUNCTIONNAME, PROTECT_PARAMETERS(PARAMETERNAMES), decltype(&ClassType::FUNCTIONNAME)) + +/*********************************************************************** +Event +***********************************************************************/ + +#define CLASS_MEMBER_EVENT(EVENTNAME)\ + AddEvent(\ + new CustomEventInfoImpl<\ + ClassType,\ + CustomEventFunctionTypeRetriver::Type\ + >(this, L ## #EVENTNAME, &ClassType::EVENTNAME)\ + ); + +/*********************************************************************** +Property +***********************************************************************/ + +#define CLASS_MEMBER_PROPERTY_READONLY(PROPERTYNAME, GETTER)\ + AddProperty(\ + new PropertyInfoImpl(\ + this,\ + L ## #PROPERTYNAME,\ + dynamic_cast(GetMethodGroupByName(L ## #GETTER, true)->GetMethod(0)),\ + nullptr,\ + nullptr\ + )\ + ); + +#define CLASS_MEMBER_PROPERTY(PROPERTYNAME, GETTER, SETTER)\ + AddProperty(\ + new PropertyInfoImpl(\ + this,\ + L ## #PROPERTYNAME,\ + dynamic_cast(GetMethodGroupByName(L ## #GETTER, true)->GetMethod(0)),\ + dynamic_cast(GetMethodGroupByName(L ## #SETTER, true)->GetMethod(0)),\ + nullptr\ + )\ + ); + +#define CLASS_MEMBER_PROPERTY_EVENT(PROPERTYNAME, GETTER, SETTER, EVENT)\ + AddProperty(\ + new PropertyInfoImpl(\ + this,\ + L ## #PROPERTYNAME,\ + dynamic_cast(GetMethodGroupByName(L ## #GETTER, true)->GetMethod(0)),\ + dynamic_cast(GetMethodGroupByName(L ## #SETTER, true)->GetMethod(0)),\ + dynamic_cast(GetEventByName(L ## #EVENT, true))\ + )\ + ); + +#define CLASS_MEMBER_PROPERTY_EVENT_READONLY(PROPERTYNAME, GETTER, EVENT)\ + AddProperty(\ + new PropertyInfoImpl(\ + this,\ + L ## #PROPERTYNAME,\ + dynamic_cast(GetMethodGroupByName(L ## #GETTER, true)->GetMethod(0)),\ + nullptr,\ + dynamic_cast(GetEventByName(L ## #EVENT, true))\ + )\ + ); + +#define CLASS_MEMBER_PROPERTY_REFERENCETEMPLATE(PROPERTYNAME, GETTER, SETTER, REFERENCETEMPLATE)\ + AddProperty(\ + new PropertyInfoImpl_StaticCpp(\ + this,\ + L ## #PROPERTYNAME,\ + dynamic_cast(GetMethodGroupByName(L ## #GETTER, true)->GetMethod(0)),\ + dynamic_cast(GetMethodGroupByName(L ## #SETTER, true)->GetMethod(0)),\ + nullptr,\ + WString(REFERENCETEMPLATE, false)\ + )\ + ); + +#define CLASS_MEMBER_PROPERTY_READONLY_FAST(PROPERTYNAME)\ + CLASS_MEMBER_METHOD(Get##PROPERTYNAME, NO_PARAMETER)\ + CLASS_MEMBER_PROPERTY_READONLY(PROPERTYNAME, Get##PROPERTYNAME)\ + +#define CLASS_MEMBER_PROPERTY_FAST(PROPERTYNAME)\ + CLASS_MEMBER_METHOD(Get##PROPERTYNAME, NO_PARAMETER)\ + CLASS_MEMBER_METHOD(Set##PROPERTYNAME, {L"value"})\ + CLASS_MEMBER_PROPERTY(PROPERTYNAME, Get##PROPERTYNAME, Set##PROPERTYNAME)\ + +#define CLASS_MEMBER_PROPERTY_EVENT_FAST(PROPERTYNAME, EVENTNAME)\ + CLASS_MEMBER_METHOD(Get##PROPERTYNAME, NO_PARAMETER)\ + CLASS_MEMBER_METHOD(Set##PROPERTYNAME, {L"value"})\ + CLASS_MEMBER_PROPERTY_EVENT(PROPERTYNAME, Get##PROPERTYNAME, Set##PROPERTYNAME, EVENTNAME)\ + +#define CLASS_MEMBER_PROPERTY_EVENT_READONLY_FAST(PROPERTYNAME, EVENTNAME)\ + CLASS_MEMBER_METHOD(Get##PROPERTYNAME, NO_PARAMETER)\ + CLASS_MEMBER_PROPERTY_EVENT_READONLY(PROPERTYNAME, Get##PROPERTYNAME, EVENTNAME)\ + + } + } +} + +#endif +#endif + + +/*********************************************************************** +.\REFLECTION\GUITYPEDESCRIPTORREFLECTION.H +***********************************************************************/ +/*********************************************************************** +Vczh Library++ 3.0 +Developer: Zihan Chen(vczh) +Framework::Reflection + +Interfaces: +***********************************************************************/ + +#ifndef VCZH_REFLECTION_GUITYPEDESCRIPTORREFLECTION +#define VCZH_REFLECTION_GUITYPEDESCRIPTORREFLECTION + + +namespace vl +{ + namespace reflection + { + namespace description + { + +/*********************************************************************** +Predefined Types +***********************************************************************/ + +#define REFLECTION_PREDEFINED_PRIMITIVE_TYPES(F)\ + F(vuint8_t) \ + F(vuint16_t) \ + F(vuint32_t) \ + F(vuint64_t) \ + F(vint8_t) \ + F(vint16_t) \ + F(vint32_t) \ + F(vint64_t) \ + F(float) \ + F(double) \ + F(bool) \ + F(wchar_t) \ + F(WString) \ + F(Locale) \ + +#ifndef VCZH_DEBUG_NO_REFLECTION + +#define REFLECTION_PREDEFINED_COMPLEX_TYPES(F, VOID_TYPE)\ + F(VOID_TYPE) \ + F(VoidValue) \ + F(IDescriptable) \ + F(DescriptableObject) \ + F(DateTime) \ + F(IValueEnumerator) \ + F(IValueEnumerable) \ + F(IValueReadonlyList) \ + F(IValueList) \ + F(IValueObservableList) \ + F(IValueReadonlyDictionary) \ + F(IValueDictionary) \ + F(IValueInterfaceProxy) \ + F(IValueFunctionProxy) \ + F(IValueSubscription) \ + F(IValueCallStack) \ + F(IValueException) \ + F(IBoxedValue) \ + F(IBoxedValue::CompareResult) \ + F(IValueType) \ + F(IEnumType) \ + F(ISerializableType) \ + F(ITypeInfo) \ + F(ITypeInfo::Decorator) \ + F(IMemberInfo) \ + F(IEventHandler) \ + F(IEventInfo) \ + F(IPropertyInfo) \ + F(IParameterInfo) \ + F(IMethodInfo) \ + F(IMethodGroupInfo) \ + F(TypeDescriptorFlags) \ + F(ITypeDescriptor) \ + + DECL_TYPE_INFO(Value) + REFLECTION_PREDEFINED_PRIMITIVE_TYPES(DECL_TYPE_INFO) + REFLECTION_PREDEFINED_COMPLEX_TYPES(DECL_TYPE_INFO, void) + +#endif + +#define DEFINE_TYPED_VALUE_SERIALIZER_PROVIDER(TYPENAME)\ + template<>\ + struct TypedValueSerializerProvider\ + {\ + static TYPENAME GetDefaultValue();\ + static bool Serialize(const TYPENAME& input, WString& output);\ + static bool Deserialize(const WString& input, TYPENAME& output);\ + static IBoxedValue::CompareResult Compare(const TYPENAME& a, const TYPENAME& b);\ + };\ + + DEFINE_TYPED_VALUE_SERIALIZER_PROVIDER(vuint8_t) + DEFINE_TYPED_VALUE_SERIALIZER_PROVIDER(vuint16_t) + DEFINE_TYPED_VALUE_SERIALIZER_PROVIDER(vuint32_t) + DEFINE_TYPED_VALUE_SERIALIZER_PROVIDER(vuint64_t) + DEFINE_TYPED_VALUE_SERIALIZER_PROVIDER(vint8_t) + DEFINE_TYPED_VALUE_SERIALIZER_PROVIDER(vint16_t) + DEFINE_TYPED_VALUE_SERIALIZER_PROVIDER(vint32_t) + DEFINE_TYPED_VALUE_SERIALIZER_PROVIDER(vint64_t) + DEFINE_TYPED_VALUE_SERIALIZER_PROVIDER(float) + DEFINE_TYPED_VALUE_SERIALIZER_PROVIDER(double) + DEFINE_TYPED_VALUE_SERIALIZER_PROVIDER(bool) + DEFINE_TYPED_VALUE_SERIALIZER_PROVIDER(wchar_t) + DEFINE_TYPED_VALUE_SERIALIZER_PROVIDER(WString) + DEFINE_TYPED_VALUE_SERIALIZER_PROVIDER(Locale) + DEFINE_TYPED_VALUE_SERIALIZER_PROVIDER(DateTime) + +#undef DEFINE_TYPED_VALUE_SERIALIZER_PROVIDER + +/*********************************************************************** +Interface Implementation Proxy (Implement) +***********************************************************************/ + +#ifndef VCZH_DEBUG_NO_REFLECTION + +#pragma warning(push) +#pragma warning(disable:4250) + BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(IValueEnumerator) + Value GetCurrent()override + { + INVOKEGET_INTERFACE_PROXY_NOPARAMS(GetCurrent); + } + + vint GetIndex()override + { + INVOKEGET_INTERFACE_PROXY_NOPARAMS(GetIndex); + } + + bool Next()override + { + INVOKEGET_INTERFACE_PROXY_NOPARAMS(Next); + } + END_INTERFACE_PROXY(IValueEnumerator) + + BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(IValueEnumerable) + Ptr CreateEnumerator()override + { + INVOKEGET_INTERFACE_PROXY_NOPARAMS(CreateEnumerator); + } + END_INTERFACE_PROXY(IValueEnumerable) + + BEGIN_INTERFACE_PROXY_SHAREDPTR(IValueReadonlyList, IValueEnumerable) + vint GetCount()override + { + INVOKEGET_INTERFACE_PROXY_NOPARAMS(GetCount); + } + + Value Get(vint index)override + { + INVOKEGET_INTERFACE_PROXY(Get, index); + } + + bool Contains(const Value& value)override + { + INVOKEGET_INTERFACE_PROXY(Contains, value); + } + + vint IndexOf(const Value& value)override + { + INVOKEGET_INTERFACE_PROXY(IndexOf, value); + } + END_INTERFACE_PROXY(IValueReadonlyList) + + BEGIN_INTERFACE_PROXY_SHAREDPTR(IValueList, IValueReadonlyList) + void Set(vint index, const Value& value)override + { + INVOKE_INTERFACE_PROXY(Set, index, value); + } + + vint Add(const Value& value)override + { + INVOKEGET_INTERFACE_PROXY(Add, value); + } + + vint Insert(vint index, const Value& value)override + { + INVOKEGET_INTERFACE_PROXY(Insert, index, value); + } + + bool Remove(const Value& value)override + { + INVOKEGET_INTERFACE_PROXY(Remove, value); + } + + bool RemoveAt(vint index)override + { + INVOKEGET_INTERFACE_PROXY(RemoveAt, index); + } + + void Clear()override + { + INVOKE_INTERFACE_PROXY_NOPARAMS(Clear); + } + END_INTERFACE_PROXY(IValueList) + + BEGIN_INTERFACE_PROXY_SHAREDPTR(IValueObservableList, IValueList) + END_INTERFACE_PROXY(IValueObservableList) + + BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(IValueReadonlyDictionary) + Ptr GetKeys()override + { + INVOKEGET_INTERFACE_PROXY_NOPARAMS(GetKeys); + } + + Ptr GetValues()override + { + INVOKEGET_INTERFACE_PROXY_NOPARAMS(GetValues); + } + + vint GetCount()override + { + INVOKEGET_INTERFACE_PROXY_NOPARAMS(GetCount); + } + + Value Get(const Value& key)override + { + INVOKEGET_INTERFACE_PROXY(Get, key); + } + END_INTERFACE_PROXY(IValueReadonlyDictionary) + + BEGIN_INTERFACE_PROXY_SHAREDPTR(IValueDictionary, IValueReadonlyDictionary) + void Set(const Value& key, const Value& value)override + { + INVOKE_INTERFACE_PROXY(Set, key, value); + } + + bool Remove(const Value& key)override + { + INVOKEGET_INTERFACE_PROXY(Remove, key); + } + + void Clear()override + { + INVOKE_INTERFACE_PROXY_NOPARAMS(Clear); + } + END_INTERFACE_PROXY(IValueDictionary) + + BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(IValueSubscription) + bool Open()override + { + INVOKEGET_INTERFACE_PROXY_NOPARAMS(Open); + } + + bool Update()override + { + INVOKEGET_INTERFACE_PROXY_NOPARAMS(Update); + } + + bool Close()override + { + INVOKEGET_INTERFACE_PROXY_NOPARAMS(Close); + } + END_INTERFACE_PROXY(IValueSubscription) + +#pragma warning(pop) + +#endif + +/*********************************************************************** +Helper Functions +***********************************************************************/ + + extern vint ITypeDescriptor_GetTypeDescriptorCount(); + extern ITypeDescriptor* ITypeDescriptor_GetTypeDescriptor(vint index); + extern ITypeDescriptor* ITypeDescriptor_GetTypeDescriptor(const WString& name); + extern ITypeDescriptor* ITypeDescriptor_GetTypeDescriptor(const Value& value); + +/*********************************************************************** +LoadPredefinedTypes +***********************************************************************/ + + extern bool LoadPredefinedTypes(); + } + } +} + +#endif + + /*********************************************************************** .\PARSING\PARSING.H ***********************************************************************/ @@ -18876,757 +19063,6 @@ namespace vl #endif -/*********************************************************************** -.\STREAM\RECORDERSTREAM.H -***********************************************************************/ -/*********************************************************************** -Vczh Library++ 3.0 -Developer: Zihan Chen(vczh) -Stream::RecorderStream - -Interfaces: - RecorderStream :备份流 -***********************************************************************/ - -#ifndef VCZH_STREAM_RECORDERSTREAM -#define VCZH_STREAM_RECORDERSTREAM - - -namespace vl -{ - namespace stream - { - /// A readable stream that, read from an stream, and write everything that is read to another stream. - class RecorderStream : public Object, public virtual IStream - { - protected: - IStream* in; - IStream* out; - public: - /// Create a stream. - /// The stream to read. - /// The stream to write what is read from "_in". - RecorderStream(IStream& _in, IStream& _out); - ~RecorderStream(); - - bool CanRead()const; - bool CanWrite()const; - bool CanSeek()const; - bool CanPeek()const; - bool IsLimited()const; - bool IsAvailable()const; - void Close(); - pos_t Position()const; - pos_t Size()const; - void Seek(pos_t _size); - void SeekFromBegin(pos_t _size); - void SeekFromEnd(pos_t _size); - vint Read(void* _buffer, vint _size); - vint Write(void* _buffer, vint _size); - vint Peek(void* _buffer, vint _size); - }; - } -} - -#endif - -/*********************************************************************** -.\THREADING.H -***********************************************************************/ -/*********************************************************************** -Vczh Library++ 3.0 -Developer: Zihan Chen(vczh) -Framework::Threading - -Classes: - Thread :线程 - CriticalSection - Mutex - Semaphore - EventObject -***********************************************************************/ - -#ifndef VCZH_THREADING -#define VCZH_THREADING - - -namespace vl -{ - -/*********************************************************************** -内核模式对象 -***********************************************************************/ - - namespace threading_internal - { - struct WaitableData; - struct ThreadData; - struct MutexData; - struct SemaphoreData; - struct EventData; - struct CriticalSectionData; - struct ReaderWriterLockData; - struct ConditionVariableData; - } - - /// Base type of all synchronization objects. - class WaitableObject : public Object, public NotCopyable - { -#if defined VCZH_MSVC - private: - threading_internal::WaitableData* waitableData; - protected: - - WaitableObject(); - void SetData(threading_internal::WaitableData* data); - public: - /// Test if the object has already been created. Some of the synchronization objects should initialize itself after the constructor. This function is only available in Windows. - /// Returns true if the object has already been created. - bool IsCreated(); - /// Wait for this object to signal. - /// Returns true if the object is signaled. Returns false if this operation failed. - bool Wait(); - /// Wait for this object to signal for a period of time. This function is only available in Windows. - /// Returns true if the object is signaled. Returns false if this operation failed, including time out. - /// Time in milliseconds. - bool WaitForTime(vint ms); - - /// Wait for multiple objects. This function is only available in Windows. - /// Returns true if all objects are signaled. Returns false if this operation failed. - /// A pointer to an array to pointers. - /// The number of objects in the array. - static bool WaitAll(WaitableObject** objects, vint count); - /// Wait for multiple objects for a period of time. This function is only available in Windows. - /// Returns true if all objects are signaled. Returns false if this operation failed, including time out. - /// A pointer to an array to pointers. - /// The number of objects in the array. - /// Time in milliseconds. - static bool WaitAllForTime(WaitableObject** objects, vint count, vint ms); - /// Wait for one of the objects. This function is only available in Windows. - /// Returns the index of the first signaled or abandoned object, according to the "abandoned" parameter. Returns -1 if this operation failed. - /// A pointer to an array to pointers. - /// The number of objects in the array. - /// Returns true if the waiting is canceled by an abandoned object. An abandoned object is caused by it's owner thread existing without releasing it. - static vint WaitAny(WaitableObject** objects, vint count, bool* abandoned); - /// Wait for one of the objects for a period of time. This function is only available in Windows. - /// Returns the index of the first signaled or abandoned object, according to the "abandoned" parameter. Returns -1 if this operation failed, including time out. - /// A pointer to an array to pointers. - /// The number of objects in the array. - /// Time in milliseconds. - /// Returns true if the waiting is canceled by an abandoned object. An abandoned object is caused by it's owner thread existing without releasing it. - static vint WaitAnyForTime(WaitableObject** objects, vint count, vint ms, bool* abandoned); -#elif defined VCZH_GCC - virtual bool Wait() = 0; -#endif - }; - - /// Representing a thread. [M:vl.Thread.CreateAndStart] is the suggested way to create threads. - class Thread : public WaitableObject - { - friend void InternalThreadProc(Thread* thread); - public: - /// Thread state. - enum ThreadState - { - /// The thread has not started. - NotStarted, - /// The thread is running. - Running, - /// The thread has been stopped. - Stopped - }; - - typedef void(*ThreadProcedure)(Thread*, void*); - protected: - threading_internal::ThreadData* internalData; - volatile ThreadState threadState; - - virtual void Run()=0; - - Thread(); - public: - ~Thread(); - - /// Create a thread using a function pointer. - /// Returns the created thread. - /// The function pointer. - /// The argument to call the function pointer. - /// Set to true (by default) to make the thread delete itself after the job is done. If you set this argument to true, you are not suggested to touch the returned thread pointer in any way. - static Thread* CreateAndStart(ThreadProcedure procedure, void* argument=0, bool deleteAfterStopped=true); - /// Create a thread using a function object or a lambda expression. - /// Returns the created thread. - /// The function object or the lambda expression. - /// Set to true (by default) to make the thread delete itself after the job is done. If you set this argument to true, you are not suggested to touch the returned thread pointer in any way. - static Thread* CreateAndStart(const Func& procedure, bool deleteAfterStopped=true); - /// Pause the caller thread for a period of time. - /// Time in milliseconds. - static void Sleep(vint ms); - /// Get the number of logical processors. - /// The number of logical processor. - static vint GetCPUCount(); - /// Get the current thread id. - /// The current thread id. - static vint GetCurrentThreadId(); - - /// Start the thread. - /// Returns true if this operation succeeded. - bool Start(); -#if defined VCZH_GCC - bool Wait(); -#endif - /// Stop the thread. - /// Returns true if this operation succeeded. - bool Stop(); - /// Get the state of the thread. - /// The state of the thread. - ThreadState GetState(); -#ifdef VCZH_MSVC - void SetCPU(vint index); -#endif - }; - - /// Mutex. - class Mutex : public WaitableObject - { - private: - threading_internal::MutexData* internalData; - public: - Mutex(); - ~Mutex(); - - /// Create a mutex. - /// Returns true if this operation succeeded. - /// Set to true to own the created mutex. - /// Name of the mutex. If it is not empty, than it is a global named mutex. This argument is ignored in Linux. - bool Create(bool owned=false, const WString& name=L""); - /// Open an existing global named mutex. - /// Returns true if this operation succeeded. - /// Set to true make the mutex visible to all all child processes. This argument is only used in Windows. - /// Name of the mutex. This argument is ignored in Linux. - bool Open(bool inheritable, const WString& name); - - /// - /// Release the mutex. - /// In the implementation for Linux, calling Release() more than once between two Wait(), or calling Wait() more than once between two Release(), will results in an undefined behavior. - /// - /// Returns true if this operation succeeded. - bool Release(); -#ifdef VCZH_GCC - bool Wait(); -#endif - }; - - /// Semaphore. - class Semaphore : public WaitableObject - { - private: - threading_internal::SemaphoreData* internalData; - public: - Semaphore(); - ~Semaphore(); - - /// Create a semaphore. - /// Returns true if this operation succeeded. - /// Define the counter of the semaphore. - /// Define the maximum value of the counter of the semaphore. This argument is only used in Windows. - /// Name of the semaphore. If it is not empty, than it is a global named semaphore. This argument is ignored in Linux. - bool Create(vint initialCount, vint maxCount, const WString& name=L""); - /// Open an existing global named semaphore. - /// Returns true if this operation succeeded. - /// Set to true make the semaphore visible to all all child processes. This argument is only used in Windows. - /// Name of the semaphore. This argument is ignored in Linux. - bool Open(bool inheritable, const WString& name); - - /// Release the semaphore once. - /// Returns true if this operation succeeded. - bool Release(); - /// Release the semaphore multiple times. - /// Returns true if this operation succeeded. - /// The amout to release. - vint Release(vint count); -#ifdef VCZH_GCC - bool Wait(); -#endif - }; - - /// Event. - class EventObject : public WaitableObject - { - private: - threading_internal::EventData* internalData; - public: - EventObject(); - ~EventObject(); - - /// Create an auto unsignal event. Auto unsignal means, when one thread waits for the event and succeeded, the event will become unsignaled immediately. - /// Returns true if this operation succeeded. - /// Set to true make the event signaled at the beginning. - /// Name of the event. If it is not empty, than it is a global named mutex. This argument is only used in Windows. - bool CreateAutoUnsignal(bool signaled, const WString& name=L""); - /// Create a manual unsignal event. - /// Returns true if this operation succeeded. - /// Set to true make the event signaled at the beginning. - /// Name of the event. If it is not empty, than it is a global named mutex. This argument is only used in Windows. - bool CreateManualUnsignal(bool signaled, const WString& name=L""); - /// Open an existing global named event. - /// Returns true if this operation succeeded. - /// Set to true make the event visible to all all child processes. This argument is only used in Windows. - /// Name of the event. This argument is only used in Windows. - bool Open(bool inheritable, const WString& name); - - /// Signal the event. - /// Returns true if this operation succeeded. - bool Signal(); - /// Unsignal the event. - /// Returns true if this operation succeeded. - bool Unsignal(); -#ifdef VCZH_GCC - bool Wait(); -#endif - }; - -/*********************************************************************** -线程池 -***********************************************************************/ - - /// A light-weight thread pool. - class ThreadPoolLite : public Object - { - private: - ThreadPoolLite(); - ~ThreadPoolLite(); - public: - /// Queue a function pointer. - /// Returns true if this operation succeeded. - /// The function pointer. - /// The argument to call the function pointer. - static bool Queue(void(*proc)(void*), void* argument); - /// Queue a function object. - /// Returns true if this operation succeeded. - /// The function object. - static bool Queue(const Func& proc); - - /// Queue a lambda expression. - /// The type of the lambda expression. - /// The lambda expression. - template - static void QueueLambda(const T& proc) - { - Queue(Func(proc)); - } - -#ifdef VCZH_GCC - static bool Stop(bool discardPendingTasks); -#endif - }; - -/*********************************************************************** -进程内对象 -***********************************************************************/ - - /// - /// } - /// ]]> - class CriticalSection : public Object, public NotCopyable - { - private: - friend class ConditionVariable; - threading_internal::CriticalSectionData* internalData; - public: - /// Create a critical section. - CriticalSection(); - ~CriticalSection(); - - /// Try enter a critical section. This function will return immediately. - /// Returns true if the current thread owned the critical section. - bool TryEnter(); - /// Enter a critical section. - void Enter(); - /// Leave a critical section. - void Leave(); - - public: - class Scope : public Object, public NotCopyable - { - private: - CriticalSection* criticalSection; - public: - Scope(CriticalSection& _criticalSection); - ~Scope(); - }; - }; - - /// - /// } - /// or - /// WRITER_LOCK(yourLock) - /// { - /// - /// } - /// ]]> - class ReaderWriterLock : public Object, public NotCopyable - { - private: - friend class ConditionVariable; - threading_internal::ReaderWriterLockData* internalData; - public: - /// Create a reader writer lock. - ReaderWriterLock(); - ~ReaderWriterLock(); - - /// Try acquire a reader lock. This function will return immediately. - /// Returns true if the current thread acquired the reader lock. - bool TryEnterReader(); - /// Acquire a reader lock. - void EnterReader(); - /// Release a reader lock. - void LeaveReader(); - /// Try acquire a writer lock. This function will return immediately. - /// Returns true if the current thread acquired the writer lock. - bool TryEnterWriter(); - /// Acquire a writer lock. - void EnterWriter(); - /// Release a writer lock. - void LeaveWriter(); - public: - class ReaderScope : public Object, public NotCopyable - { - private: - ReaderWriterLock* lock; - public: - ReaderScope(ReaderWriterLock& _lock); - ~ReaderScope(); - }; - - class WriterScope : public Object, public NotCopyable - { - private: - ReaderWriterLock* lock; - public: - WriterScope(ReaderWriterLock& _lock); - ~WriterScope(); - }; - }; - - /// Conditional variable. - class ConditionVariable : public Object, public NotCopyable - { - private: - threading_internal::ConditionVariableData* internalData; - public: - /// Create a conditional variable. - ConditionVariable(); - ~ConditionVariable(); - - /// Bind a conditional variable with a owned critical section and release it. When the function returns, the condition variable is activated, and the current thread owned the critical section again. - /// Returns true if this operation succeeded. - /// The critical section. - bool SleepWith(CriticalSection& cs); -#ifdef VCZH_MSVC - /// Bind a conditional variable with a owned critical section and release it for a period of time. When the function returns, the condition variable is activated or it is time out, and the current thread owned the critical section again. This function is only available in Windows. - /// Returns true if this operation succeeded. - /// The critical section. - /// Time in milliseconds. - bool SleepWithForTime(CriticalSection& cs, vint ms); - /// Bind a conditional variable with a owned reader lock and release it. When the function returns, the condition variable is activated, and the current thread owned the reader lock again. This function is only available in Windows. - /// Returns true if this operation succeeded. - /// The reader lock. - bool SleepWithReader(ReaderWriterLock& lock); - /// Bind a conditional variable with a owned reader lock and release it for a period of time. When the function returns, the condition variable is activated or it is time out, and the current thread owned the reader lock again. This function is only available in Windows. - /// Returns true if this operation succeeded. - /// The reader lock. - /// Time in milliseconds. - bool SleepWithReaderForTime(ReaderWriterLock& lock, vint ms); - /// Bind a conditional variable with a owned writer lock and release it. When the function returns, the condition variable is activated, and the current thread owned the writer lock again. This function is only available in Windows. - /// Returns true if this operation succeeded. - /// The writer lock. - bool SleepWithWriter(ReaderWriterLock& lock); - /// Bind a conditional variable with a owned writer lock and release it for a period of time. When the function returns, the condition variable is activated or it is time out, and the current thread owned the writer lock again. This function is only available in Windows. - /// Returns true if this operation succeeded. - /// The writer lock. - /// Time in milliseconds. - bool SleepWithWriterForTime(ReaderWriterLock& lock, vint ms); -#endif - /// Wake one thread that pending on this condition variable. - void WakeOnePending(); - /// Wake all thread that pending on this condition variable. - void WakeAllPendings(); - }; - -/*********************************************************************** -用户模式对象 -***********************************************************************/ - - typedef long LockedInt; - - /// - /// } - /// ]]> - class SpinLock : public Object, public NotCopyable - { - protected: - volatile LockedInt token; - public: - /// Create a spin lock. - SpinLock(); - ~SpinLock(); - - /// Try enter a spin lock. This function will return immediately. - /// Returns true if the current thread owned the spin lock. - bool TryEnter(); - /// Enter a spin lock. - void Enter(); - /// Leave a spin lock. - void Leave(); - - public: - class Scope : public Object, public NotCopyable - { - private: - SpinLock* spinLock; - public: - Scope(SpinLock& _spinLock); - ~Scope(); - }; - }; - -#define SPIN_LOCK(LOCK) SCOPE_VARIABLE(const SpinLock::Scope&, scope, LOCK) -#define CS_LOCK(LOCK) SCOPE_VARIABLE(const CriticalSection::Scope&, scope, LOCK) -#define READER_LOCK(LOCK) SCOPE_VARIABLE(const ReaderWriterLock::ReaderScope&, scope, LOCK) -#define WRITER_LOCK(LOCK) SCOPE_VARIABLE(const ReaderWriterLock::WriterScope&, scope, LOCK) - -/*********************************************************************** -Thread Local Storage - -ThreadLocalStorage and ThreadVariable are designed to be used as global value types only. -Dynamically create instances of them are undefined behavior. -***********************************************************************/ - - /// Thread local storage operations. - class ThreadLocalStorage : public Object, private NotCopyable - { - typedef void(*Destructor)(void*); - protected: - vuint64_t key; - Destructor destructor; - volatile bool disposed = false; - - static void PushStorage(ThreadLocalStorage* storage); - public: - ThreadLocalStorage(Destructor _destructor); - ~ThreadLocalStorage(); - - void* Get(); - void Set(void* data); - void Clear(); - void Dispose(); - - /// Fix all storage creation. - static void FixStorages(); - /// Clear all storages for the current thread. For threads that are created using [T:vl.Thread], this function will be automatically called when before the thread exit. - static void ClearStorages(); - /// Clear all storages for the current thread (should be the main thread) and clear all records. This function can only be called by the main thread when all other threads are exited. It will reduce noices when you want to detect memory leaks. - static void DisposeStorages(); - }; - - /// Thread local variable. This type can only be used to define global variables. Different threads can store different values to and obtain differnt values from a thread local variable. - /// Type of the storage. - template - class ThreadVariable : public Object, private NotCopyable - { - protected: - ThreadLocalStorage storage; - - static void Destructor(void* data) - { - if (data) - { - delete (T*)data; - } - } - public: - /// Create a thread local variable. - ThreadVariable() - :storage(&Destructor) - { - } - - ~ThreadVariable() - { - } - - /// Test if the storage has data. - /// Returns true if the storage has data. - bool HasData() - { - return storage.Get() != nullptr; - } - - /// Remove the data from this storage. - void Clear() - { - storage.Clear(); - } - - /// Get the stored data. - /// The stored ata. - T& Get() - { - return *(T*)storage.Get(); - } - - /// Set data to this storage. - /// The data to set. - void Set(const T& value) - { - storage.Clear(); - storage.Set(new T(value)); - } - }; - - template - class ThreadVariable : public Object, private NotCopyable - { - protected: - ThreadLocalStorage storage; - - public: - ThreadVariable() - :storage(nullptr) - { - } - - ~ThreadVariable() - { - } - - bool HasData() - { - return storage.Get() != nullptr; - } - - void Clear() - { - storage.Set(nullptr); - } - - T* Get() - { - return (T*)storage.Get(); - } - - void Set(T* value) - { - storage.Set((void*)value); - } - }; - -/*********************************************************************** -RepeatingTaskExecutor -***********************************************************************/ - - /// Queued task executor. It is different from a thread pool by: 1) Task execution is single threaded, 2) If you queue a task, it will override the the unexecuted queued task. - /// The type of the argument to run a task. - template - class RepeatingTaskExecutor : public Object - { - private: - SpinLock inputLock; - T inputData; - volatile bool inputDataAvailable; - SpinLock executingEvent; - volatile bool executing; - - void ExecutingProcInternal() - { - while(true) - { - bool currentInputDataAvailable; - T currentInputData; - SPIN_LOCK(inputLock) - { - currentInputData=inputData; - inputData=T(); - currentInputDataAvailable=inputDataAvailable; - inputDataAvailable=false; - if(!currentInputDataAvailable) - { - executing=false; - goto FINISH_EXECUTING; - } - } - Execute(currentInputData); - } - FINISH_EXECUTING: - executingEvent.Leave(); - } - - static void ExecutingProc(void* argument) - { - ((RepeatingTaskExecutor*)argument)->ExecutingProcInternal(); - } - - protected: - /// This function is called when it is ready to execute a task. Task execution is single threaded. All task code should be put inside the function. - /// The argument to run a task. - virtual void Execute(const T& input)=0; - - public: - /// Create a task executor. - RepeatingTaskExecutor() - :inputDataAvailable(false) - ,executing(false) - { - } - - ~RepeatingTaskExecutor() - { - EnsureTaskFinished(); - } - - /// Wait for all tasks to finish. - void EnsureTaskFinished() - { - executingEvent.Enter(); - executingEvent.Leave(); - } - - /// Queue a task. If there is a queued task that has not been executied yet, those tasks will be canceled. Only one task can be queued at the same moment. - /// The argument to run a task. - void SubmitTask(const T& input) - { - SPIN_LOCK(inputLock) - { - inputData=input; - inputDataAvailable=true; - } - if(!executing) - { - executing=true; - executingEvent.Enter(); - ThreadPoolLite::Queue(&ExecutingProc, this); - } - } - }; -} -#endif - - /*********************************************************************** .\TUPLE.H ***********************************************************************/ diff --git a/Import/VlppWorkflowCompiler.cpp b/Import/VlppWorkflowCompiler.cpp index 7363bf7a..f5161b42 100644 --- a/Import/VlppWorkflowCompiler.cpp +++ b/Import/VlppWorkflowCompiler.cpp @@ -4,1709 +4,6 @@ DEVELOPER: Zihan Chen(vczh) ***********************************************************************/ #include "VlppWorkflowCompiler.h" -/*********************************************************************** -.\EXPRESSION\WFEXPRESSION.CPP -***********************************************************************/ - -namespace vl -{ - namespace workflow - { - using namespace stream; - using namespace collections; - using namespace parsing; - -/*********************************************************************** -Unescaping Functions -***********************************************************************/ - - void SetDefaultClassMember(vl::collections::List>& value, const vl::collections::List& tokens) - { - FOREACH(Ptr, decl, value) - { - if (!decl->classMember) - { - decl->classMember = MakePtr(); - decl->classMember->codeRange = decl->codeRange; - decl->classMember->kind = WfClassMemberKind::Normal; - } - } - } - - void UnescapeStringInternal(vl::parsing::ParsingToken& value, bool formatString) - { - MemoryStream memoryStream; - { - WString input = formatString ? value.value.Sub(2, value.value.Length() - 3) : value.value.Sub(1, value.value.Length() - 2); - const wchar_t* reading = input.Buffer(); - StreamWriter writer(memoryStream); - - while (wchar_t c = *reading++) - { - if (c == L'\\') - { - switch (wchar_t e = *reading++) - { - case L'r': - writer.WriteChar('\r'); - break; - case L'n': - writer.WriteChar('\n'); - break; - case L't': - writer.WriteChar('\t'); - break; - default: - writer.WriteChar(e); - } - } - else - { - writer.WriteChar(c); - } - } - } - - memoryStream.SeekFromBegin(0); - { - StreamReader reader(memoryStream); - value.value = reader.ReadToEnd(); - } - } - - void UnescapeFormatString(vl::parsing::ParsingToken& value, const vl::collections::List& tokens) - { - UnescapeStringInternal(value, true); - } - - void UnescapeString(vl::parsing::ParsingToken& value, const vl::collections::List& tokens) - { - UnescapeStringInternal(value, false); - } - - void EscapeString(const WString& text, ParsingWriter& writer) - { - writer.WriteChar(L'\"'); - const wchar_t* reading = text.Buffer(); - while (wchar_t c = *reading++) - { - switch (c) - { - case '\r': - writer.WriteString(L"\\r"); - break; - case '\n': - writer.WriteString(L"\\n"); - break; - case '\t': - writer.WriteString(L"\\t"); - break; - case '\"': - writer.WriteString(L"\\\""); - break; - case '\\': - writer.WriteString(L"\\\\"); - break; - default: - writer.WriteChar(c); - } - } - writer.WriteChar(L'\"'); - } - -/*********************************************************************** -Print (Type) -***********************************************************************/ - - class PrintTypeVisitor : public Object, public WfType::IVisitor - { - public: - WString indent; - ParsingWriter& writer; - - PrintTypeVisitor(const WString& _indent, ParsingWriter& _writer) - :indent(_indent), writer(_writer) - { - } - - void Visit(WfPredefinedType* node)override - { - writer.BeforePrint(node); - switch (node->name) - { - case WfPredefinedTypeName::Void: - writer.WriteString(L"void"); - break; - case WfPredefinedTypeName::Object: - writer.WriteString(L"object"); - break; - case WfPredefinedTypeName::Interface: - writer.WriteString(L"interface"); - break; - case WfPredefinedTypeName::Int: - writer.WriteString(L"int"); - break; - case WfPredefinedTypeName::UInt: - writer.WriteString(L"uint"); - break; - case WfPredefinedTypeName::Float: - writer.WriteString(L"float"); - break; - case WfPredefinedTypeName::Double: - writer.WriteString(L"double"); - break; - case WfPredefinedTypeName::String: - writer.WriteString(L"string"); - break; - case WfPredefinedTypeName::Char: - writer.WriteString(L"char"); - break; - case WfPredefinedTypeName::Bool: - writer.WriteString(L"bool"); - break; - } - writer.AfterPrint(node); - } - - void Visit(WfTopQualifiedType* node)override - { - writer.BeforePrint(node); - writer.WriteString(L"::" + node->name.value); - writer.AfterPrint(node); - } - - void Visit(WfReferenceType* node)override - { - writer.BeforePrint(node); - writer.WriteString(node->name.value); - writer.AfterPrint(node); - } - - void Visit(WfRawPointerType* node)override - { - writer.BeforePrint(node); - WfPrint(node->element, indent, writer); - writer.WriteString(L"*"); - writer.AfterPrint(node); - } - - void Visit(WfSharedPointerType* node)override - { - writer.BeforePrint(node); - WfPrint(node->element, indent, writer); - writer.WriteString(L"^"); - writer.AfterPrint(node); - } - - void Visit(WfNullableType* node)override - { - writer.BeforePrint(node); - WfPrint(node->element, indent, writer); - writer.WriteString(L"?"); - writer.AfterPrint(node); - } - - void Visit(WfEnumerableType* node)override - { - writer.BeforePrint(node); - WfPrint(node->element, indent, writer); - writer.WriteString(L"{}"); - writer.AfterPrint(node); - } - - void Visit(WfMapType* node)override - { - writer.BeforePrint(node); - if (node->writability == WfMapWritability::Readonly) - { - writer.WriteString(L"const "); - } - WfPrint(node->value, indent, writer); - writer.WriteString(L"["); - if (node->key) - { - WfPrint(node->key, indent, writer); - } - writer.WriteString(L"]"); - writer.AfterPrint(node); - } - - void Visit(WfObservableListType* node)override - { - writer.BeforePrint(node); - writer.WriteString(L"observe "); - WfPrint(node->element, indent, writer); - writer.WriteString(L"[]"); - writer.AfterPrint(node); - } - - void Visit(WfFunctionType* node)override - { - writer.BeforePrint(node); - writer.WriteString(L"(func "); - writer.WriteString(L"("); - FOREACH_INDEXER(Ptr, type, index, node->arguments) - { - if (index > 0) - { - writer.WriteString(L", "); - } - WfPrint(type, indent, writer); - } - writer.WriteString(L")"); - - writer.WriteString(L" : ("); - WfPrint(node->result, indent, writer); - writer.WriteString(L"))"); - writer.AfterPrint(node); - } - - void Visit(WfChildType* node)override - { - writer.BeforePrint(node); - WfPrint(node->parent, indent, writer); - writer.WriteString(L"::"); - writer.WriteString(node->name.value); - writer.AfterPrint(node); - } - }; - -/*********************************************************************** -Print (Expression) -***********************************************************************/ - - class PrintExpressionVisitor - : public Object - , public WfExpression::IVisitor - , public WfVirtualExpression::IVisitor - { - public: - WString indent; - ParsingWriter& writer; - - PrintExpressionVisitor(const WString& _indent, ParsingWriter& _writer) - :indent(_indent), writer(_writer) - { - } - - void Visit(WfThisExpression* node)override - { - writer.BeforePrint(node); - writer.WriteString(L"this"); - writer.AfterPrint(node); - } - - void Visit(WfTopQualifiedExpression* node)override - { - writer.BeforePrint(node); - writer.WriteString(L"::"); - writer.WriteString(node->name.value); - writer.AfterPrint(node); - } - - void Visit(WfReferenceExpression* node)override - { - writer.BeforePrint(node); - writer.WriteString(node->name.value); - writer.AfterPrint(node); - } - - void Visit(WfOrderedNameExpression* node)override - { - writer.BeforePrint(node); - writer.WriteString(node->name.value); - writer.AfterPrint(node); - } - - void Visit(WfOrderedLambdaExpression* node)override - { - writer.BeforePrint(node); - writer.WriteString(L"["); - WfPrint(node->body, indent, writer); - writer.WriteString(L"]"); - writer.AfterPrint(node); - } - - void Visit(WfMemberExpression* node)override - { - writer.BeforePrint(node); - WfPrint(node->parent, indent, writer); - writer.WriteString(L"."); - writer.WriteString(node->name.value); - writer.AfterPrint(node); - } - - void Visit(WfChildExpression* node)override - { - writer.BeforePrint(node); - WfPrint(node->parent, indent, writer); - writer.WriteString(L"::"); - writer.WriteString(node->name.value); - writer.AfterPrint(node); - } - - void Visit(WfLiteralExpression* node)override - { - writer.BeforePrint(node); - switch (node->value) - { - case WfLiteralValue::Null: - writer.WriteString(L"null"); - break; - case WfLiteralValue::True: - writer.WriteString(L"true"); - break; - case WfLiteralValue::False: - writer.WriteString(L"false"); - break; - } - writer.AfterPrint(node); - } - - void Visit(WfFloatingExpression* node)override - { - writer.BeforePrint(node); - writer.WriteString(node->value.value); - writer.AfterPrint(node); - } - - void Visit(WfIntegerExpression* node)override - { - writer.BeforePrint(node); - writer.WriteString(node->value.value); - writer.AfterPrint(node); - } - - void Visit(WfStringExpression* node)override - { - writer.BeforePrint(node); - EscapeString(node->value.value, writer); - writer.AfterPrint(node); - } - - void Visit(WfUnaryExpression* node)override - { - writer.BeforePrint(node); - writer.WriteString(L"("); - switch (node->op) - { - case WfUnaryOperator::Positive: - writer.WriteString(L"+"); - break; - case WfUnaryOperator::Negative: - writer.WriteString(L"-"); - break; - case WfUnaryOperator::Not: - writer.WriteString(L"!"); - break; - } - WfPrint(node->operand, indent, writer); - writer.WriteString(L")"); - writer.AfterPrint(node); - } - - void Visit(WfBinaryExpression* node)override - { - writer.BeforePrint(node); - if (node->op == WfBinaryOperator::Index) - { - WfPrint(node->first, indent, writer); - writer.WriteString(L"["); - WfPrint(node->second, indent, writer); - writer.WriteString(L"]"); - } - else - { - writer.WriteString(L"("); - WfPrint(node->first, indent, writer); - switch (node->op) - { - case WfBinaryOperator::Assign: - writer.WriteString(L" = "); - break; - case WfBinaryOperator::Union: - writer.WriteString(L" & "); - break; - case WfBinaryOperator::Intersect: - writer.WriteString(L" | "); - break; - case WfBinaryOperator::FailedThen: - writer.WriteString(L" ?? "); - break; - case WfBinaryOperator::Exp: - writer.WriteString(L" ^ "); - break; - case WfBinaryOperator::Add: - writer.WriteString(L" + "); - break; - case WfBinaryOperator::Sub: - writer.WriteString(L" - "); - break; - case WfBinaryOperator::Mul: - writer.WriteString(L" * "); - break; - case WfBinaryOperator::Div: - writer.WriteString(L" / "); - break; - case WfBinaryOperator::Mod: - writer.WriteString(L" % "); - break; - case WfBinaryOperator::Shl: - writer.WriteString(L" shl "); - break; - case WfBinaryOperator::Shr: - writer.WriteString(L" shr "); - break; - case WfBinaryOperator::LT: - writer.WriteString(L" < "); - break; - case WfBinaryOperator::GT: - writer.WriteString(L" > "); - break; - case WfBinaryOperator::LE: - writer.WriteString(L" <= "); - break; - case WfBinaryOperator::GE: - writer.WriteString(L" >= "); - break; - case WfBinaryOperator::EQ: - writer.WriteString(L" == "); - break; - case WfBinaryOperator::NE: - writer.WriteString(L" != "); - break; - case WfBinaryOperator::Xor: - writer.WriteString(L" xor "); - break; - case WfBinaryOperator::And: - writer.WriteString(L" and "); - break; - case WfBinaryOperator::Or: - writer.WriteString(L" or "); - break; - default:; - } - WfPrint(node->second, indent, writer); - writer.WriteString(L")"); - } - writer.AfterPrint(node); - } - - void Visit(WfLetExpression* node)override - { - writer.BeforePrint(node); - writer.WriteString(L"let "); - FOREACH_INDEXER(Ptr, var, index, node->variables) - { - if (index > 0) - { - writer.WriteString(L", "); - } - writer.WriteString(var->name.value); - writer.WriteString(L" = "); - WfPrint(var->value, indent, writer); - } - writer.WriteString(L" in ("); - WfPrint(node->expression, indent, writer); - writer.WriteString(L")"); - writer.AfterPrint(node); - } - - void Visit(WfIfExpression* node)override - { - writer.BeforePrint(node); - WfPrint(node->condition, indent, writer); - writer.WriteString(L" ? "); - WfPrint(node->trueBranch, indent, writer); - writer.WriteString(L" : "); - WfPrint(node->falseBranch, indent, writer); - writer.AfterPrint(node); - } - - void Visit(WfRangeExpression* node)override - { - writer.BeforePrint(node); - writer.WriteString(L"range "); - writer.WriteString(node->beginBoundary == WfRangeBoundary::Exclusive ? L"(" : L"["); - WfPrint(node->begin, indent, writer); - writer.WriteString(L", "); - WfPrint(node->end, indent, writer); - writer.WriteString(node->endBoundary == WfRangeBoundary::Exclusive ? L")" : L"]"); - writer.AfterPrint(node); - } - - void Visit(WfSetTestingExpression* node)override - { - writer.BeforePrint(node); - WfPrint(node->element, indent, writer); - if (node->test == WfSetTesting::NotIn) - { - writer.WriteString(L" not"); - } - writer.WriteString(L" in "); - WfPrint(node->collection, indent, writer); - writer.AfterPrint(node); - } - - void Visit(WfConstructorExpression* node)override - { - writer.BeforePrint(node); - writer.WriteString(L"{"); - FOREACH_INDEXER(Ptr, argument, index, node->arguments) - { - if (index > 0) - { - writer.WriteString(L" "); - } - WfPrint(argument->key, indent, writer); - if (argument->value) - { - writer.WriteString(L" : "); - WfPrint(argument->value, indent, writer); - } - } - writer.WriteString(L"}"); - writer.AfterPrint(node); - } - - void Visit(WfInferExpression* node)override - { - writer.BeforePrint(node); - WfPrint(node->expression, indent, writer); - writer.WriteString(L" of ("); - WfPrint(node->type, indent, writer); - writer.WriteString(L")"); - writer.AfterPrint(node); - } - - void Visit(WfTypeCastingExpression* node)override - { - writer.BeforePrint(node); - if (node->strategy == WfTypeCastingStrategy::Strong) - { - writer.WriteString(L"(cast ("); - WfPrint(node->type, indent, writer); - writer.WriteString(L") "); - WfPrint(node->expression, indent, writer); - writer.WriteString(L")"); - } - else - { - writer.WriteString(L"("); - WfPrint(node->expression, indent, writer); - writer.WriteString(L" as ("); - WfPrint(node->type, indent, writer); - writer.WriteString(L"))"); - } - writer.AfterPrint(node); - } - - void Visit(WfTypeTestingExpression* node)override - { - writer.BeforePrint(node); - WfPrint(node->expression, indent, writer); - switch (node->test) - { - case WfTypeTesting::IsType: - writer.WriteString(L" is ("); - WfPrint(node->type, indent, writer); - writer.WriteString(L")"); - break; - case WfTypeTesting::IsNotType: - writer.WriteString(L" is not ("); - WfPrint(node->type, indent, writer); - writer.WriteString(L")"); - break; - case WfTypeTesting::IsNull: - writer.WriteString(L" is null"); - break; - case WfTypeTesting::IsNotNull: - writer.WriteString(L" is not null"); - break; - } - writer.AfterPrint(node); - } - - void Visit(WfTypeOfTypeExpression* node)override - { - writer.BeforePrint(node); - writer.WriteString(L"typeof("); - WfPrint(node->type, indent, writer); - writer.WriteString(L")"); - writer.AfterPrint(node); - } - - void Visit(WfTypeOfExpressionExpression* node)override - { - writer.BeforePrint(node); - writer.WriteString(L"type("); - WfPrint(node->expression, indent, writer); - writer.WriteString(L")"); - writer.AfterPrint(node); - } - - void Visit(WfAttachEventExpression* node)override - { - writer.BeforePrint(node); - writer.WriteString(L"attach("); - WfPrint(node->event, indent, writer); - writer.WriteString(L", "); - WfPrint(node->function, indent, writer); - writer.WriteString(L")"); - writer.AfterPrint(node); - } - - void Visit(WfDetachEventExpression* node)override - { - writer.BeforePrint(node); - writer.WriteString(L"detach("); - WfPrint(node->event, indent, writer); - writer.WriteString(L", "); - WfPrint(node->handler, indent, writer); - writer.WriteString(L")"); - writer.AfterPrint(node); - } - - void Visit(WfObserveExpression* node)override - { - writer.BeforePrint(node); - WfPrint(node->parent, indent, writer); - writer.WriteString(L".observe"); - if (node->observeType == WfObserveType::ExtendedObserve) - { - writer.WriteString(L" as "); - writer.WriteString(node->name.value); - } - writer.WriteString(L"("); - WfPrint(node->expression, indent, writer); - if (node->events.Count() > 0) - { - writer.WriteString(L" on "); - FOREACH_INDEXER(Ptr, argument, index, node->events) - { - if (index > 0) - { - writer.WriteString(L", "); - } - WfPrint(argument, indent, writer); - } - } - writer.WriteString(L")"); - writer.AfterPrint(node); - } - - void Visit(WfCallExpression* node)override - { - writer.BeforePrint(node); - WfPrint(node->function, indent, writer); - writer.WriteString(L"("); - FOREACH_INDEXER(Ptr, argument, index, node->arguments) - { - if (index > 0) - { - writer.WriteString(L", "); - } - WfPrint(argument, indent, writer); - } - writer.WriteString(L")"); - writer.AfterPrint(node); - } - - void Visit(WfFunctionExpression* node)override - { - writer.BeforePrint(node); - WfPrint(Ptr(node->function), indent, writer); - writer.AfterPrint(node); - } - - void Visit(WfNewClassExpression* node)override - { - writer.BeforePrint(node); - writer.WriteString(L"new ("); - WfPrint(node->type, indent, writer); - writer.WriteString(L")"); - - writer.WriteString(L"("); - FOREACH_INDEXER(Ptr, argument, index, node->arguments) - { - if (index > 0) - { - writer.WriteString(L", "); - } - WfPrint(argument, indent, writer); - } - writer.WriteString(L")"); - - writer.AfterPrint(node); - } - - void Visit(WfNewInterfaceExpression* node)override - { - writer.BeforePrint(node); - writer.WriteString(L"new ("); - WfPrint(node->type, indent, writer); - writer.WriteString(L")"); - - writer.WriteLine(L""); - writer.WriteString(indent); - writer.WriteLine(L"{"); - FOREACH_INDEXER(Ptr, decl, index, node->declarations) - { - if (index > 0) - { - writer.WriteLine(L""); - } - - writer.WriteString(indent + L" "); - WfPrint(decl, indent + L" ", writer); - writer.WriteLine(L""); - } - writer.WriteString(indent); - writer.WriteString(L"}"); - - writer.AfterPrint(node); - } - - void Visit(WfVirtualExpression* node)override - { - if (node->expandedExpression) - { - writer.BeforePrint(node); - WfPrint(node->expandedExpression, indent, writer); - writer.AfterPrint(node); - } - else - { - node->Accept((WfVirtualExpression::IVisitor*)this); - } - } - - void Visit(WfBindExpression* node)override - { - writer.BeforePrint(node); - writer.WriteString(L"bind("); - WfPrint(node->expression, indent, writer); - writer.WriteString(L")"); - writer.AfterPrint(node); - } - - void Visit(WfFormatExpression* node)override - { - writer.BeforePrint(node); - writer.WriteString(L"$"); - EscapeString(node->value.value, writer); - writer.AfterPrint(node); - } - - void Visit(WfNewCoroutineExpression* node)override - { - writer.BeforePrint(node); - if (node->name.value == L"") - { - writer.WriteLine(L"$coroutine"); - } - else - { - writer.WriteString(L"$coroutine("); - writer.WriteString(node->name.value); - writer.WriteLine(L")"); - } - writer.WriteString(indent); - WfPrint(node->statement, indent, writer); - writer.AfterPrint(node); - } - - void Visit(WfMixinCastExpression* node)override - { - writer.BeforePrint(node); - writer.WriteString(L"new ("); - WfPrint(node->type, indent, writer); - writer.WriteString(L")"); - - writer.WriteString(L"(using "); - WfPrint(node->expression, indent, writer); - writer.AfterPrint(node); - } - - void Visit(WfExpectedTypeCastExpression* node)override - { - writer.BeforePrint(node); - if (node->strategy == WfTypeCastingStrategy::Strong) - { - writer.WriteString(L"(cast * "); - WfPrint(node->expression, indent, writer); - writer.WriteString(L")"); - } - else - { - writer.WriteString(L"("); - WfPrint(node->expression, indent, writer); - writer.WriteString(L" as *)"); - } - writer.AfterPrint(node); - } - }; - -/*********************************************************************** -Print (Statement) -***********************************************************************/ - - class PrintStatementVisitor - : public Object - , public WfStatement::IVisitor - , public WfVirtualStatement::IVisitor - , public WfCoroutineStatement::IVisitor - { - public: - WString indent; - ParsingWriter& writer; - - PrintStatementVisitor(const WString& _indent, ParsingWriter& _writer) - :indent(_indent), writer(_writer) - { - } - - void Visit(WfBreakStatement* node)override - { - writer.BeforePrint(node); - writer.WriteString(L"break;"); - writer.AfterPrint(node); - } - - void Visit(WfContinueStatement* node)override - { - writer.BeforePrint(node); - writer.WriteString(L"continue;"); - writer.AfterPrint(node); - } - - void Visit(WfReturnStatement* node)override - { - writer.BeforePrint(node); - if (node->expression) - { - writer.WriteString(L"return "); - WfPrint(node->expression, indent, writer); - writer.WriteString(L";"); - } - else - { - writer.WriteString(L"return;"); - } - writer.AfterPrint(node); - } - - void Visit(WfDeleteStatement* node)override - { - writer.BeforePrint(node); - writer.WriteString(L"delete "); - WfPrint(node->expression, indent, writer); - writer.WriteString(L";"); - writer.AfterPrint(node); - } - - void Visit(WfRaiseExceptionStatement* node)override - { - writer.BeforePrint(node); - if (node->expression) - { - writer.WriteString(L"raise "); - WfPrint(node->expression, indent, writer); - writer.WriteString(L";"); - } - else - { - writer.WriteString(L"raise;"); - } - writer.AfterPrint(node); - } - - void Visit(WfIfStatement* node)override - { - writer.BeforePrint(node); - writer.WriteString(L"if ("); - if (node->type) - { - writer.WriteString(L"var "); - writer.WriteString(node->name.value); - writer.WriteString(L" : "); - WfPrint(node->type, indent, writer); - writer.WriteString(L" = "); - } - WfPrint(node->expression, indent, writer); - writer.WriteLine(L")"); - - writer.WriteString(indent); - WfPrint(node->trueBranch, indent, writer); - if (node->falseBranch) - { - writer.WriteLine(L""); - writer.WriteString(indent); - if (node->falseBranch.Cast()) - { - writer.WriteString(L"else "); - WfPrint(node->falseBranch, indent, writer); - } - else - { - writer.WriteLine(L"else"); - writer.WriteString(indent); - WfPrint(node->falseBranch, indent, writer); - } - } - writer.AfterPrint(node); - } - - void Visit(WfWhileStatement* node)override - { - writer.BeforePrint(node); - writer.WriteString(L"while ("); - WfPrint(node->condition, indent, writer); - writer.WriteLine(L")"); - writer.WriteString(indent); - WfPrint(node->statement, indent, writer); - writer.AfterPrint(node); - } - - void Visit(WfTryStatement* node)override - { - writer.BeforePrint(node); - writer.WriteLine(L"try"); - writer.WriteString(indent); - WfPrint(node->protectedStatement, indent, writer); - - if (node->catchStatement) - { - writer.WriteLine(L""); - writer.WriteString(indent); - writer.WriteString(L"catch ("); - writer.WriteString(node->name.value); - writer.WriteLine(L")"); - writer.WriteString(indent); - WfPrint(node->catchStatement, indent, writer); - } - - if (node->finallyStatement) - { - writer.WriteLine(L""); - writer.WriteString(indent); - writer.WriteLine(L"finally"); - writer.WriteString(indent); - WfPrint(node->finallyStatement, indent, writer); - } - writer.AfterPrint(node); - } - - void Visit(WfBlockStatement* node)override - { - writer.BeforePrint(node); - writer.WriteLine(L"{"); - FOREACH(Ptr, statement, node->statements) - { - writer.WriteString(indent + L" "); - WfPrint(statement, indent + L" ", writer); - writer.WriteLine(L""); - } - writer.WriteString(indent); - writer.WriteString(L"}"); - writer.AfterPrint(node); - } - - void Visit(WfExpressionStatement* node)override - { - writer.BeforePrint(node); - WfPrint(node->expression, indent, writer); - writer.WriteString(L";"); - writer.AfterPrint(node); - } - - void Visit(WfVariableStatement* node)override - { - writer.BeforePrint(node); - WfPrint(Ptr(node->variable), indent, writer); - writer.AfterPrint(node); - } - - void Visit(WfVirtualStatement* node)override - { - if (node->expandedStatement) - { - writer.BeforePrint(node); - WfPrint(node->expandedStatement, indent, writer); - writer.AfterPrint(node); - } - else - { - node->Accept((WfVirtualStatement::IVisitor*)this); - } - } - - void Visit(WfSwitchStatement* node)override - { - writer.BeforePrint(node); - writer.WriteString(L"switch ("); - WfPrint(node->expression, indent, writer); - writer.WriteLine(L")"); - - writer.WriteString(indent); - writer.WriteLine(L"{"); - - FOREACH(Ptr, switchCase, node->caseBranches) - { - writer.WriteString(indent); - writer.WriteString(L" case "); - WfPrint(switchCase->expression, indent, writer); - writer.WriteLine(L":"); - writer.WriteString(indent + L" "); - WfPrint(switchCase->statement, indent + L" ", writer); - writer.WriteLine(L""); - } - if (node->defaultBranch) - { - writer.WriteString(indent); - writer.WriteLine(L" default:"); - writer.WriteString(indent + L" "); - WfPrint(node->defaultBranch, indent + L" ", writer); - writer.WriteLine(L""); - } - - writer.WriteString(indent); - writer.WriteString(L"}"); - writer.AfterPrint(node); - } - - void Visit(WfForEachStatement* node)override - { - writer.BeforePrint(node); - writer.WriteString(L"for ("); - writer.WriteString(node->name.value); - writer.WriteString(L" in "); - if (node->direction == WfForEachDirection::Reversed) - { - writer.WriteString(L"reversed "); - } - WfPrint(node->collection, indent, writer); - writer.WriteLine(L")"); - writer.WriteString(indent); - WfPrint(node->statement, indent, writer); - writer.AfterPrint(node); - } - - void Visit(WfCoProviderStatement* node)override - { - writer.BeforePrint(node); - if (node->name.value == L"") - { - writer.WriteString(L"$"); - } - else - { - writer.WriteString(node->name.value); - writer.WriteString(L" "); - } - WfPrint(node->statement, indent, writer); - writer.AfterPrint(node); - } - - void Visit(WfCoroutineStatement* node)override - { - node->Accept((WfCoroutineStatement::IVisitor*)this); - } - - void Visit(WfCoPauseStatement* node)override - { - writer.BeforePrint(node); - if (node->statement) - { - writer.WriteLine(L"$pause"); - writer.WriteString(indent); - WfPrint(node->statement, indent, writer); - } - else - { - writer.WriteString(L"$pause;"); - } - writer.AfterPrint(node); - } - - void Visit(WfCoOperatorStatement* node)override - { - if (node->varName.value != L"") - { - writer.WriteString(L"var "); - writer.WriteString(node->varName.value); - writer.WriteString(L" = "); - } - writer.WriteString(node->opName.value); - - FOREACH_INDEXER(Ptr, argument, index, node->arguments) - { - writer.WriteString(index == 0 ? L" " : L", "); - WfPrint(argument, indent, writer); - } - writer.WriteString(L";"); - } - }; - -/*********************************************************************** -Print (Declaration) -***********************************************************************/ - - class PrintDeclarationVisitor - : public Object - , public WfDeclaration::IVisitor - , public WfVirtualDeclaration::IVisitor - { - public: - WString indent; - ParsingWriter& writer; - - PrintDeclarationVisitor(const WString& _indent, ParsingWriter& _writer) - :indent(_indent), writer(_writer) - { - } - - void Visit(WfNamespaceDeclaration* node)override - { - writer.BeforePrint(node); - writer.WriteLine(L"namespace " + node->name.value); - writer.WriteString(indent); - writer.WriteLine(L"{"); - FOREACH_INDEXER(Ptr, decl, index, node->declarations) - { - if (index != 0) - { - writer.WriteLine(L""); - } - writer.WriteString(indent + L" "); - WfPrint(decl, indent + L" ", writer); - writer.WriteLine(L""); - } - writer.WriteString(indent); - writer.WriteString(L"}"); - writer.AfterPrint(node); - } - - void Visit(WfFunctionDeclaration* node)override - { - writer.BeforePrint(node); - writer.WriteString(L"func "); - if (node->anonymity == WfFunctionAnonymity::Named) - { - writer.WriteString(node->name.value); - } - - writer.WriteString(L"("); - FOREACH_INDEXER(Ptr, argument, index, node->arguments) - { - if (index > 0) - { - writer.WriteString(L", "); - } - FOREACH(Ptr, attribute, argument->attributes) - { - WfPrint(attribute, indent, writer); - writer.WriteString(L" "); - } - writer.WriteString(argument->name.value); - writer.WriteString(L" : "); - WfPrint(argument->type, indent, writer); - } - writer.WriteString(L")"); - - writer.WriteString(L" : ("); - WfPrint(node->returnType, indent, writer); - writer.WriteString(L")"); - if (node->statement) - { - writer.WriteLine(L""); - - writer.WriteString(indent); - WfPrint(node->statement, indent, writer); - } - else - { - writer.WriteString(L";"); - } - writer.AfterPrint(node); - } - - void Visit(WfVariableDeclaration* node)override - { - writer.BeforePrint(node); - writer.WriteString(L"var "); - writer.WriteString(node->name.value); - if (node->type) - { - writer.WriteString(L" : "); - WfPrint(node->type, indent, writer); - } - writer.WriteString(L" = "); - WfPrint(node->expression, indent, writer); - writer.WriteString(L";"); - writer.AfterPrint(node); - } - - void Visit(WfEventDeclaration* node)override - { - writer.BeforePrint(node); - writer.WriteString(L"event "); - writer.WriteString(node->name.value); - writer.WriteString(L"("); - FOREACH_INDEXER(Ptr, type, index, node->arguments) - { - if (index != 0) - { - writer.WriteString(L", "); - } - WfPrint(type, indent, writer); - } - writer.WriteString(L");"); - writer.AfterPrint(node); - } - - void Visit(WfPropertyDeclaration* node)override - { - writer.BeforePrint(node); - writer.WriteString(L"prop "); - writer.WriteString(node->name.value); - writer.WriteString(L" : "); - WfPrint(node->type, indent, writer); - writer.WriteString(L"{"); - writer.WriteString(node->getter.value); - if (node->setter.value != L"") - { - writer.WriteString(L", "); - writer.WriteString(node->setter.value); - } - if (node->valueChangedEvent.value != L"") - { - writer.WriteString(L" : "); - writer.WriteString(node->valueChangedEvent.value); - } - writer.WriteString(L"}"); - writer.AfterPrint(node); - } - - void Visit(WfConstructorDeclaration* node)override - { - writer.BeforePrint(node); - if (node->constructorType == WfConstructorType::RawPtr) - { - writer.WriteString(L"new* "); - } - else - { - writer.WriteString(L"new "); - } - - writer.WriteString(L"("); - FOREACH_INDEXER(Ptr, argument, index, node->arguments) - { - if (index > 0) - { - writer.WriteString(L", "); - } - writer.WriteString(argument->name.value); - writer.WriteString(L" : "); - WfPrint(argument->type, indent, writer); - } - writer.WriteString(L")"); - FOREACH_INDEXER(Ptr, call, callIndex, node->baseConstructorCalls) - { - writer.WriteLine(L""); - writer.WriteString(indent + L" "); - if (callIndex == 0) - { - writer.WriteString(L":"); - } - else - { - writer.WriteString(L","); - } - WfPrint(call->type, indent + L" ", writer); - writer.WriteString(L"("); - FOREACH_INDEXER(Ptr, argument, argumentIndex, call->arguments) - { - if (argumentIndex != 0) - { - writer.WriteString(L", "); - } - WfPrint(argument, indent + L" ", writer); - } - writer.WriteString(L")"); - } - - writer.WriteLine(L""); - writer.WriteString(indent); - WfPrint(node->statement, indent, writer); - writer.AfterPrint(node); - } - - void Visit(WfDestructorDeclaration* node)override - { - writer.BeforePrint(node); - writer.WriteLine(L"delete"); - writer.WriteString(indent); - WfPrint(node->statement, indent, writer); - writer.AfterPrint(node); - } - - void Visit(WfClassDeclaration* node)override - { - writer.BeforePrint(node); - switch (node->kind) - { - case WfClassKind::Class: - writer.WriteString(L"class "); - break; - case WfClassKind::Interface: - writer.WriteString(L"interface "); - break; - } - writer.WriteString(node->name.value); - if (node->constructorType == WfConstructorType::RawPtr) - { - writer.WriteString(L"*"); - } - - FOREACH_INDEXER(Ptr, type, index, node->baseTypes) - { - if (index == 0) - { - writer.WriteString(L" : "); - } - else - { - writer.WriteString(L", "); - } - WfPrint(type, indent, writer); - } - - writer.WriteLine(L""); - writer.WriteLine(indent + L"{"); - - FOREACH_INDEXER(Ptr, decl, index, node->declarations) - { - if (index > 0) - { - writer.WriteLine(L""); - } - - writer.WriteString(indent + L" "); - WfPrint(decl, indent + L" ", writer); - writer.WriteLine(L""); - } - - writer.WriteString(indent + L"}"); - writer.AfterPrint(node); - } - - void Visit(WfEnumDeclaration* node)override - { - writer.BeforePrint(node); - switch (node->kind) - { - case WfEnumKind::Normal: - writer.WriteString(L"enum "); - break; - case WfEnumKind::Flag: - writer.WriteString(L"flagenum "); - break; - } - writer.WriteLine(node->name.value); - writer.WriteLine(indent + L"{"); - - auto newIndent = indent + L" "; - FOREACH(Ptr, item, node->items) - { - FOREACH(Ptr, attribute, item->attributes) - { - writer.WriteString(newIndent); - WfPrint(attribute, newIndent, writer); - writer.WriteLine(L""); - } - writer.WriteString(newIndent); - writer.WriteString(item->name.value); - writer.WriteString(L" = "); - switch (item->kind) - { - case WfEnumItemKind::Constant: - writer.WriteString(item->number.value); - break; - case WfEnumItemKind::Intersection: - FOREACH_INDEXER(Ptr, itemInt, index, item->intersections) - { - if (index != 0)writer.WriteString(L" | "); - writer.WriteString(itemInt->name.value); - } - break; - } - writer.WriteLine(L","); - } - - writer.WriteString(indent + L"}"); - writer.AfterPrint(node); - } - - void Visit(WfStructDeclaration* node)override - { - writer.BeforePrint(node); - writer.WriteString(L"struct "); - writer.WriteLine(node->name.value); - writer.WriteLine(indent + L"{"); - - auto newIndent = indent + L" "; - FOREACH(Ptr, member, node->members) - { - FOREACH(Ptr, attribute, member->attributes) - { - writer.WriteString(newIndent); - WfPrint(attribute, newIndent, writer); - writer.WriteLine(L""); - } - writer.WriteString(newIndent); - writer.WriteString(member->name.value); - writer.WriteString(L" : "); - WfPrint(member->type, newIndent, writer); - writer.WriteLine(L";"); - } - - writer.WriteString(indent + L"}"); - writer.AfterPrint(node); - } - - void Visit(WfVirtualDeclaration* node)override - { - if (node->expandedDeclarations.Count() > 0) - { - writer.BeforePrint(node); - FOREACH_INDEXER(Ptr, decl, index, node->expandedDeclarations) - { - if (index > 0) - { - writer.WriteLine(L""); - writer.WriteString(indent); - } - WfPrint(decl, indent, writer); - if (index < node->expandedDeclarations.Count() - 1) - { - writer.WriteLine(L""); - } - } - writer.AfterPrint(node); - } - else - { - node->Accept(static_cast(this)); - } - } - - void Visit(WfAutoPropertyDeclaration* node)override - { - writer.BeforePrint(node); - writer.WriteString(L"prop "); - writer.WriteString(node->name.value); - writer.WriteString(L" : "); - WfPrint(node->type, indent, writer); - if (node->expression) - { - writer.WriteString(L" = "); - WfPrint(node->expression, indent, writer); - } - writer.WriteString(L" {"); - if (node->configConst == WfAPConst::Readonly) - { - if (node->configObserve == WfAPObserve::NotObservable) - { - writer.WriteString(L"const, not observe"); - } - else - { - writer.WriteString(L"const"); - } - } - else - { - if (node->configObserve == WfAPObserve::NotObservable) - { - writer.WriteString(L"not observe"); - } - } - writer.WriteString(L"}"); - writer.AfterPrint(node); - } - - void Visit(WfCastResultInterfaceDeclaration* node)override - { - writer.BeforePrint(node); - writer.WriteString(L"$interface "); - writer.WriteString(node->name.value); - writer.WriteString(L" : "); - WfPrint(node->baseType, indent, writer); - writer.WriteString(L"<"); - WfPrint(node->elementType, indent, writer); - writer.WriteString(L">;"); - writer.AfterPrint(node); - } - }; - -/*********************************************************************** -Print (Module) -***********************************************************************/ - - void WfPrint(Ptr node, const WString& indent, parsing::ParsingWriter& writer) - { - writer.BeforePrint(node.Obj()); - writer.WriteString(L"@"); - writer.WriteString(node->category.value); - writer.WriteString(L":"); - writer.WriteString(node->name.value); - if (node->value) - { - writer.WriteString(L"("); - WfPrint(node->value, indent, writer); - writer.WriteString(L")"); - } - writer.AfterPrint(node.Obj()); - } - - void WfPrint(Ptr node, const WString& indent, parsing::ParsingWriter& writer) - { - PrintTypeVisitor visitor(indent, writer); - node->Accept(&visitor); - } - - void WfPrint(Ptr node, const WString& indent, parsing::ParsingWriter& writer) - { - PrintExpressionVisitor visitor(indent, writer); - node->Accept(&visitor); - } - - void WfPrint(Ptr node, const WString& indent, parsing::ParsingWriter& writer) - { - PrintStatementVisitor visitor(indent, writer); - node->Accept(&visitor); - } - - void WfPrint(Ptr node, const WString& indent, parsing::ParsingWriter& writer) - { - FOREACH(Ptr, attribute, node->attributes) - { - WfPrint(attribute, indent, writer); - writer.WriteLine(L""); - writer.WriteString(indent); - } - - if (node->classMember) - { - switch (node->classMember->kind) - { - case WfClassMemberKind::Normal: - break; - case WfClassMemberKind::Static: - writer.WriteString(L"static "); - break; - case WfClassMemberKind::Override: - writer.WriteString(L"override "); - break; - } - } - - PrintDeclarationVisitor visitor(indent, writer); - node->Accept(&visitor); - } - - void WfPrint(Ptr node, const WString& indent, parsing::ParsingWriter& writer) - { - writer.WriteString(indent); - switch (node->moduleType) - { - case WfModuleType::Module: - writer.WriteLine(L"module " + node->name.value + L";"); - break; - case WfModuleType::Unit: - writer.WriteLine(L"unit " + node->name.value + L";"); - break; - } - - FOREACH(Ptr, path, node->paths) - { - writer.WriteString(indent); - writer.WriteString(L"using "); - FOREACH_INDEXER(Ptr, item, index, path->items) - { - if (index > 0) - { - writer.WriteString(L"::"); - } - FOREACH(Ptr, fragment, item->fragments) - { - if (auto name = fragment.Cast()) - { - writer.WriteString(name->name.value); - } - else - { - writer.WriteString(L"*"); - } - } - } - writer.WriteLine(L";"); - } - - FOREACH(Ptr, decl, node->declarations) - { - writer.WriteLine(L""); - writer.WriteString(indent); - WfPrint(decl, indent, writer); - writer.WriteLine(L""); - } - } - -/*********************************************************************** -Print (Module) -***********************************************************************/ - - void WfPrint(Ptr node, const WString& indent, stream::TextWriter& writer) - { - ParsingWriter parsingWriter(writer); - WfPrint(node, indent, parsingWriter); - } - - void WfPrint(Ptr node, const WString& indent, stream::TextWriter& writer) - { - ParsingWriter parsingWriter(writer); - WfPrint(node, indent, parsingWriter); - } - - void WfPrint(Ptr node, const WString& indent, stream::TextWriter& writer) - { - ParsingWriter parsingWriter(writer); - WfPrint(node, indent, parsingWriter); - } - - void WfPrint(Ptr node, const WString& indent, stream::TextWriter& writer) - { - ParsingWriter parsingWriter(writer); - WfPrint(node, indent, parsingWriter); - } - - void WfPrint(Ptr node, const WString& indent, stream::TextWriter& writer) - { - ParsingWriter parsingWriter(writer); - WfPrint(node, indent, parsingWriter); - } - - void WfPrint(Ptr node, const WString& indent, stream::TextWriter& writer) - { - ParsingWriter parsingWriter(writer); - WfPrint(node, indent, parsingWriter); - } - } -} - - /*********************************************************************** .\EXPRESSION\WFEXPRESSION_AST.CPP ***********************************************************************/ @@ -1832,17 +129,27 @@ Visitor Pattern Implementation visitor->Visit(this); } - void WfVirtualDeclaration::Accept(WfDeclaration::IVisitor* visitor) + void WfVirtualCfeDeclaration::Accept(WfDeclaration::IVisitor* visitor) { visitor->Visit(this); } - void WfAutoPropertyDeclaration::Accept(WfVirtualDeclaration::IVisitor* visitor) + void WfAutoPropertyDeclaration::Accept(WfVirtualCfeDeclaration::IVisitor* visitor) { visitor->Visit(this); } - void WfCastResultInterfaceDeclaration::Accept(WfVirtualDeclaration::IVisitor* visitor) + void WfCastResultInterfaceDeclaration::Accept(WfVirtualCfeDeclaration::IVisitor* visitor) + { + visitor->Visit(this); + } + + void WfVirtualCseDeclaration::Accept(WfDeclaration::IVisitor* visitor) + { + visitor->Visit(this); + } + + void WfStateMachineDeclaration::Accept(WfVirtualCseDeclaration::IVisitor* visitor) { visitor->Visit(this); } @@ -1892,6 +199,11 @@ Visitor Pattern Implementation visitor->Visit(this); } + void WfGotoStatement::Accept(WfStatement::IVisitor* visitor) + { + visitor->Visit(this); + } + void WfVariableStatement::Accept(WfStatement::IVisitor* visitor) { visitor->Visit(this); @@ -1902,22 +214,22 @@ Visitor Pattern Implementation visitor->Visit(this); } - void WfVirtualStatement::Accept(WfStatement::IVisitor* visitor) + void WfVirtualCseStatement::Accept(WfStatement::IVisitor* visitor) { visitor->Visit(this); } - void WfForEachStatement::Accept(WfVirtualStatement::IVisitor* visitor) + void WfForEachStatement::Accept(WfVirtualCseStatement::IVisitor* visitor) { visitor->Visit(this); } - void WfSwitchStatement::Accept(WfVirtualStatement::IVisitor* visitor) + void WfSwitchStatement::Accept(WfVirtualCseStatement::IVisitor* visitor) { visitor->Visit(this); } - void WfCoProviderStatement::Accept(WfVirtualStatement::IVisitor* visitor) + void WfCoProviderStatement::Accept(WfVirtualCseStatement::IVisitor* visitor) { visitor->Visit(this); } @@ -1937,6 +249,21 @@ Visitor Pattern Implementation visitor->Visit(this); } + void WfStateMachineStatement::Accept(WfStatement::IVisitor* visitor) + { + visitor->Visit(this); + } + + void WfStateSwitchStatement::Accept(WfStateMachineStatement::IVisitor* visitor) + { + visitor->Visit(this); + } + + void WfStateInvokeStatement::Accept(WfStateMachineStatement::IVisitor* visitor) + { + visitor->Visit(this); + } + void WfThisExpression::Accept(WfExpression::IVisitor* visitor) { visitor->Visit(this); @@ -2087,32 +414,42 @@ Visitor Pattern Implementation visitor->Visit(this); } - void WfVirtualExpression::Accept(WfExpression::IVisitor* visitor) + void WfVirtualCfeExpression::Accept(WfExpression::IVisitor* visitor) { visitor->Visit(this); } - void WfBindExpression::Accept(WfVirtualExpression::IVisitor* visitor) + void WfFormatExpression::Accept(WfVirtualCfeExpression::IVisitor* visitor) { visitor->Visit(this); } - void WfFormatExpression::Accept(WfVirtualExpression::IVisitor* visitor) + void WfVirtualCseExpression::Accept(WfExpression::IVisitor* visitor) { visitor->Visit(this); } - void WfNewCoroutineExpression::Accept(WfVirtualExpression::IVisitor* visitor) + void WfBindExpression::Accept(WfVirtualCseExpression::IVisitor* visitor) { visitor->Visit(this); } - void WfMixinCastExpression::Accept(WfVirtualExpression::IVisitor* visitor) + void WfNewCoroutineExpression::Accept(WfVirtualCseExpression::IVisitor* visitor) { visitor->Visit(this); } - void WfExpectedTypeCastExpression::Accept(WfVirtualExpression::IVisitor* visitor) + void WfMixinCastExpression::Accept(WfVirtualCseExpression::IVisitor* visitor) + { + visitor->Visit(this); + } + + void WfExpectedTypeCastExpression::Accept(WfVirtualCseExpression::IVisitor* visitor) + { + visitor->Visit(this); + } + + void WfCoOperatorExpression::Accept(WfVirtualCseExpression::IVisitor* visitor) { visitor->Visit(this); } @@ -2183,11 +520,15 @@ namespace vl IMPL_TYPE_INFO_RENAME(vl::workflow::WfEnumDeclaration, workflow::WfEnumDeclaration) IMPL_TYPE_INFO_RENAME(vl::workflow::WfStructMember, workflow::WfStructMember) IMPL_TYPE_INFO_RENAME(vl::workflow::WfStructDeclaration, workflow::WfStructDeclaration) - IMPL_TYPE_INFO_RENAME(vl::workflow::WfVirtualDeclaration, workflow::WfVirtualDeclaration) + IMPL_TYPE_INFO_RENAME(vl::workflow::WfVirtualCfeDeclaration, workflow::WfVirtualCfeDeclaration) IMPL_TYPE_INFO_RENAME(vl::workflow::WfAPConst, workflow::WfAPConst) IMPL_TYPE_INFO_RENAME(vl::workflow::WfAPObserve, workflow::WfAPObserve) IMPL_TYPE_INFO_RENAME(vl::workflow::WfAutoPropertyDeclaration, workflow::WfAutoPropertyDeclaration) IMPL_TYPE_INFO_RENAME(vl::workflow::WfCastResultInterfaceDeclaration, workflow::WfCastResultInterfaceDeclaration) + IMPL_TYPE_INFO_RENAME(vl::workflow::WfVirtualCseDeclaration, workflow::WfVirtualCseDeclaration) + IMPL_TYPE_INFO_RENAME(vl::workflow::WfStateInput, workflow::WfStateInput) + IMPL_TYPE_INFO_RENAME(vl::workflow::WfStateDeclaration, workflow::WfStateDeclaration) + IMPL_TYPE_INFO_RENAME(vl::workflow::WfStateMachineDeclaration, workflow::WfStateMachineDeclaration) IMPL_TYPE_INFO_RENAME(vl::workflow::WfBreakStatement, workflow::WfBreakStatement) IMPL_TYPE_INFO_RENAME(vl::workflow::WfContinueStatement, workflow::WfContinueStatement) IMPL_TYPE_INFO_RENAME(vl::workflow::WfReturnStatement, workflow::WfReturnStatement) @@ -2197,9 +538,10 @@ namespace vl IMPL_TYPE_INFO_RENAME(vl::workflow::WfWhileStatement, workflow::WfWhileStatement) IMPL_TYPE_INFO_RENAME(vl::workflow::WfTryStatement, workflow::WfTryStatement) IMPL_TYPE_INFO_RENAME(vl::workflow::WfBlockStatement, workflow::WfBlockStatement) + IMPL_TYPE_INFO_RENAME(vl::workflow::WfGotoStatement, workflow::WfGotoStatement) IMPL_TYPE_INFO_RENAME(vl::workflow::WfVariableStatement, workflow::WfVariableStatement) IMPL_TYPE_INFO_RENAME(vl::workflow::WfExpressionStatement, workflow::WfExpressionStatement) - IMPL_TYPE_INFO_RENAME(vl::workflow::WfVirtualStatement, workflow::WfVirtualStatement) + IMPL_TYPE_INFO_RENAME(vl::workflow::WfVirtualCseStatement, workflow::WfVirtualCseStatement) IMPL_TYPE_INFO_RENAME(vl::workflow::WfForEachDirection, workflow::WfForEachDirection) IMPL_TYPE_INFO_RENAME(vl::workflow::WfForEachStatement, workflow::WfForEachStatement) IMPL_TYPE_INFO_RENAME(vl::workflow::WfSwitchCase, workflow::WfSwitchCase) @@ -2208,6 +550,13 @@ namespace vl IMPL_TYPE_INFO_RENAME(vl::workflow::WfCoroutineStatement, workflow::WfCoroutineStatement) IMPL_TYPE_INFO_RENAME(vl::workflow::WfCoPauseStatement, workflow::WfCoPauseStatement) IMPL_TYPE_INFO_RENAME(vl::workflow::WfCoOperatorStatement, workflow::WfCoOperatorStatement) + IMPL_TYPE_INFO_RENAME(vl::workflow::WfStateSwitchType, workflow::WfStateSwitchType) + IMPL_TYPE_INFO_RENAME(vl::workflow::WfStateInvokeType, workflow::WfStateInvokeType) + IMPL_TYPE_INFO_RENAME(vl::workflow::WfStateMachineStatement, workflow::WfStateMachineStatement) + IMPL_TYPE_INFO_RENAME(vl::workflow::WfStateSwitchArgument, workflow::WfStateSwitchArgument) + IMPL_TYPE_INFO_RENAME(vl::workflow::WfStateSwitchCase, workflow::WfStateSwitchCase) + IMPL_TYPE_INFO_RENAME(vl::workflow::WfStateSwitchStatement, workflow::WfStateSwitchStatement) + IMPL_TYPE_INFO_RENAME(vl::workflow::WfStateInvokeStatement, workflow::WfStateInvokeStatement) IMPL_TYPE_INFO_RENAME(vl::workflow::WfThisExpression, workflow::WfThisExpression) IMPL_TYPE_INFO_RENAME(vl::workflow::WfTopQualifiedExpression, workflow::WfTopQualifiedExpression) IMPL_TYPE_INFO_RENAME(vl::workflow::WfReferenceExpression, workflow::WfReferenceExpression) @@ -2248,12 +597,14 @@ namespace vl IMPL_TYPE_INFO_RENAME(vl::workflow::WfFunctionExpression, workflow::WfFunctionExpression) IMPL_TYPE_INFO_RENAME(vl::workflow::WfNewClassExpression, workflow::WfNewClassExpression) IMPL_TYPE_INFO_RENAME(vl::workflow::WfNewInterfaceExpression, workflow::WfNewInterfaceExpression) - IMPL_TYPE_INFO_RENAME(vl::workflow::WfVirtualExpression, workflow::WfVirtualExpression) - IMPL_TYPE_INFO_RENAME(vl::workflow::WfBindExpression, workflow::WfBindExpression) + IMPL_TYPE_INFO_RENAME(vl::workflow::WfVirtualCfeExpression, workflow::WfVirtualCfeExpression) IMPL_TYPE_INFO_RENAME(vl::workflow::WfFormatExpression, workflow::WfFormatExpression) + IMPL_TYPE_INFO_RENAME(vl::workflow::WfVirtualCseExpression, workflow::WfVirtualCseExpression) + IMPL_TYPE_INFO_RENAME(vl::workflow::WfBindExpression, workflow::WfBindExpression) IMPL_TYPE_INFO_RENAME(vl::workflow::WfNewCoroutineExpression, workflow::WfNewCoroutineExpression) IMPL_TYPE_INFO_RENAME(vl::workflow::WfMixinCastExpression, workflow::WfMixinCastExpression) IMPL_TYPE_INFO_RENAME(vl::workflow::WfExpectedTypeCastExpression, workflow::WfExpectedTypeCastExpression) + IMPL_TYPE_INFO_RENAME(vl::workflow::WfCoOperatorExpression, workflow::WfCoOperatorExpression) IMPL_TYPE_INFO_RENAME(vl::workflow::WfModuleUsingFragment, workflow::WfModuleUsingFragment) IMPL_TYPE_INFO_RENAME(vl::workflow::WfModuleUsingNameFragment, workflow::WfModuleUsingNameFragment) IMPL_TYPE_INFO_RENAME(vl::workflow::WfModuleUsingWildCardFragment, workflow::WfModuleUsingWildCardFragment) @@ -2265,10 +616,13 @@ namespace vl IMPL_TYPE_INFO_RENAME(vl::workflow::WfExpression::IVisitor, workflow::WfExpression::IVisitor) IMPL_TYPE_INFO_RENAME(vl::workflow::WfStatement::IVisitor, workflow::WfStatement::IVisitor) IMPL_TYPE_INFO_RENAME(vl::workflow::WfDeclaration::IVisitor, workflow::WfDeclaration::IVisitor) - IMPL_TYPE_INFO_RENAME(vl::workflow::WfVirtualDeclaration::IVisitor, workflow::WfVirtualDeclaration::IVisitor) - IMPL_TYPE_INFO_RENAME(vl::workflow::WfVirtualStatement::IVisitor, workflow::WfVirtualStatement::IVisitor) + IMPL_TYPE_INFO_RENAME(vl::workflow::WfVirtualCfeDeclaration::IVisitor, workflow::WfVirtualCfeDeclaration::IVisitor) + IMPL_TYPE_INFO_RENAME(vl::workflow::WfVirtualCseDeclaration::IVisitor, workflow::WfVirtualCseDeclaration::IVisitor) + IMPL_TYPE_INFO_RENAME(vl::workflow::WfVirtualCseStatement::IVisitor, workflow::WfVirtualCseStatement::IVisitor) IMPL_TYPE_INFO_RENAME(vl::workflow::WfCoroutineStatement::IVisitor, workflow::WfCoroutineStatement::IVisitor) - IMPL_TYPE_INFO_RENAME(vl::workflow::WfVirtualExpression::IVisitor, workflow::WfVirtualExpression::IVisitor) + IMPL_TYPE_INFO_RENAME(vl::workflow::WfStateMachineStatement::IVisitor, workflow::WfStateMachineStatement::IVisitor) + IMPL_TYPE_INFO_RENAME(vl::workflow::WfVirtualCfeExpression::IVisitor, workflow::WfVirtualCfeExpression::IVisitor) + IMPL_TYPE_INFO_RENAME(vl::workflow::WfVirtualCseExpression::IVisitor, workflow::WfVirtualCseExpression::IVisitor) IMPL_TYPE_INFO_RENAME(vl::workflow::WfModuleUsingFragment::IVisitor, workflow::WfModuleUsingFragment::IVisitor) BEGIN_ENUM_ITEM(WfClassMemberKind) @@ -2587,12 +941,12 @@ namespace vl CLASS_MEMBER_FIELD(members) END_CLASS_MEMBER(WfStructDeclaration) - BEGIN_CLASS_MEMBER(WfVirtualDeclaration) + BEGIN_CLASS_MEMBER(WfVirtualCfeDeclaration) CLASS_MEMBER_BASE(WfDeclaration) - CLASS_MEMBER_METHOD_OVERLOAD(Accept, {L"visitor"}, void(WfVirtualDeclaration::*)(WfVirtualDeclaration::IVisitor* visitor)) + CLASS_MEMBER_METHOD_OVERLOAD(Accept, {L"visitor"}, void(WfVirtualCfeDeclaration::*)(WfVirtualCfeDeclaration::IVisitor* visitor)) CLASS_MEMBER_FIELD(expandedDeclarations) - END_CLASS_MEMBER(WfVirtualDeclaration) + END_CLASS_MEMBER(WfVirtualCfeDeclaration) BEGIN_ENUM_ITEM(WfAPConst) ENUM_ITEM_NAMESPACE(WfAPConst) @@ -2607,7 +961,7 @@ namespace vl END_ENUM_ITEM(WfAPObserve) BEGIN_CLASS_MEMBER(WfAutoPropertyDeclaration) - CLASS_MEMBER_BASE(WfVirtualDeclaration) + CLASS_MEMBER_BASE(WfVirtualCfeDeclaration) CLASS_MEMBER_CONSTRUCTOR(vl::Ptr(), NO_PARAMETER) @@ -2618,7 +972,7 @@ namespace vl END_CLASS_MEMBER(WfAutoPropertyDeclaration) BEGIN_CLASS_MEMBER(WfCastResultInterfaceDeclaration) - CLASS_MEMBER_BASE(WfVirtualDeclaration) + CLASS_MEMBER_BASE(WfVirtualCfeDeclaration) CLASS_MEMBER_CONSTRUCTOR(vl::Ptr(), NO_PARAMETER) @@ -2626,6 +980,37 @@ namespace vl CLASS_MEMBER_FIELD(elementType) END_CLASS_MEMBER(WfCastResultInterfaceDeclaration) + BEGIN_CLASS_MEMBER(WfVirtualCseDeclaration) + CLASS_MEMBER_BASE(WfDeclaration) + + CLASS_MEMBER_METHOD_OVERLOAD(Accept, {L"visitor"}, void(WfVirtualCseDeclaration::*)(WfVirtualCseDeclaration::IVisitor* visitor)) + CLASS_MEMBER_FIELD(expandedDeclarations) + END_CLASS_MEMBER(WfVirtualCseDeclaration) + + BEGIN_CLASS_MEMBER(WfStateInput) + CLASS_MEMBER_CONSTRUCTOR(vl::Ptr(), NO_PARAMETER) + + PARSING_TOKEN_FIELD(name) + CLASS_MEMBER_FIELD(arguments) + END_CLASS_MEMBER(WfStateInput) + + BEGIN_CLASS_MEMBER(WfStateDeclaration) + CLASS_MEMBER_CONSTRUCTOR(vl::Ptr(), NO_PARAMETER) + + PARSING_TOKEN_FIELD(name) + CLASS_MEMBER_FIELD(arguments) + CLASS_MEMBER_FIELD(statement) + END_CLASS_MEMBER(WfStateDeclaration) + + BEGIN_CLASS_MEMBER(WfStateMachineDeclaration) + CLASS_MEMBER_BASE(WfVirtualCseDeclaration) + + CLASS_MEMBER_CONSTRUCTOR(vl::Ptr(), NO_PARAMETER) + + CLASS_MEMBER_FIELD(inputs) + CLASS_MEMBER_FIELD(states) + END_CLASS_MEMBER(WfStateMachineDeclaration) + BEGIN_CLASS_MEMBER(WfBreakStatement) CLASS_MEMBER_BASE(WfStatement) @@ -2702,8 +1087,17 @@ namespace vl CLASS_MEMBER_CONSTRUCTOR(vl::Ptr(), NO_PARAMETER) CLASS_MEMBER_FIELD(statements) + PARSING_TOKEN_FIELD(endLabel) END_CLASS_MEMBER(WfBlockStatement) + BEGIN_CLASS_MEMBER(WfGotoStatement) + CLASS_MEMBER_BASE(WfStatement) + + CLASS_MEMBER_CONSTRUCTOR(vl::Ptr(), NO_PARAMETER) + + PARSING_TOKEN_FIELD(label) + END_CLASS_MEMBER(WfGotoStatement) + BEGIN_CLASS_MEMBER(WfVariableStatement) CLASS_MEMBER_BASE(WfStatement) @@ -2720,12 +1114,12 @@ namespace vl CLASS_MEMBER_FIELD(expression) END_CLASS_MEMBER(WfExpressionStatement) - BEGIN_CLASS_MEMBER(WfVirtualStatement) + BEGIN_CLASS_MEMBER(WfVirtualCseStatement) CLASS_MEMBER_BASE(WfStatement) - CLASS_MEMBER_METHOD_OVERLOAD(Accept, {L"visitor"}, void(WfVirtualStatement::*)(WfVirtualStatement::IVisitor* visitor)) + CLASS_MEMBER_METHOD_OVERLOAD(Accept, {L"visitor"}, void(WfVirtualCseStatement::*)(WfVirtualCseStatement::IVisitor* visitor)) CLASS_MEMBER_FIELD(expandedStatement) - END_CLASS_MEMBER(WfVirtualStatement) + END_CLASS_MEMBER(WfVirtualCseStatement) BEGIN_ENUM_ITEM(WfForEachDirection) ENUM_ITEM_NAMESPACE(WfForEachDirection) @@ -2734,7 +1128,7 @@ namespace vl END_ENUM_ITEM(WfForEachDirection) BEGIN_CLASS_MEMBER(WfForEachStatement) - CLASS_MEMBER_BASE(WfVirtualStatement) + CLASS_MEMBER_BASE(WfVirtualCseStatement) CLASS_MEMBER_CONSTRUCTOR(vl::Ptr(), NO_PARAMETER) @@ -2752,7 +1146,7 @@ namespace vl END_CLASS_MEMBER(WfSwitchCase) BEGIN_CLASS_MEMBER(WfSwitchStatement) - CLASS_MEMBER_BASE(WfVirtualStatement) + CLASS_MEMBER_BASE(WfVirtualCseStatement) CLASS_MEMBER_CONSTRUCTOR(vl::Ptr(), NO_PARAMETER) @@ -2762,7 +1156,7 @@ namespace vl END_CLASS_MEMBER(WfSwitchStatement) BEGIN_CLASS_MEMBER(WfCoProviderStatement) - CLASS_MEMBER_BASE(WfVirtualStatement) + CLASS_MEMBER_BASE(WfVirtualCseStatement) CLASS_MEMBER_CONSTRUCTOR(vl::Ptr(), NO_PARAMETER) @@ -2794,6 +1188,60 @@ namespace vl CLASS_MEMBER_FIELD(arguments) END_CLASS_MEMBER(WfCoOperatorStatement) + BEGIN_ENUM_ITEM(WfStateSwitchType) + ENUM_ITEM_NAMESPACE(WfStateSwitchType) + ENUM_NAMESPACE_ITEM(Default) + ENUM_NAMESPACE_ITEM(Pass) + ENUM_NAMESPACE_ITEM(PassAndReturn) + ENUM_NAMESPACE_ITEM(Ignore) + ENUM_NAMESPACE_ITEM(IgnoreAndReturn) + END_ENUM_ITEM(WfStateSwitchType) + + BEGIN_ENUM_ITEM(WfStateInvokeType) + ENUM_ITEM_NAMESPACE(WfStateInvokeType) + ENUM_NAMESPACE_ITEM(Goto) + ENUM_NAMESPACE_ITEM(Push) + END_ENUM_ITEM(WfStateInvokeType) + + BEGIN_CLASS_MEMBER(WfStateMachineStatement) + CLASS_MEMBER_BASE(WfStatement) + + CLASS_MEMBER_METHOD_OVERLOAD(Accept, {L"visitor"}, void(WfStateMachineStatement::*)(WfStateMachineStatement::IVisitor* visitor)) + END_CLASS_MEMBER(WfStateMachineStatement) + + BEGIN_CLASS_MEMBER(WfStateSwitchArgument) + CLASS_MEMBER_CONSTRUCTOR(vl::Ptr(), NO_PARAMETER) + + PARSING_TOKEN_FIELD(name) + END_CLASS_MEMBER(WfStateSwitchArgument) + + BEGIN_CLASS_MEMBER(WfStateSwitchCase) + CLASS_MEMBER_CONSTRUCTOR(vl::Ptr(), NO_PARAMETER) + + PARSING_TOKEN_FIELD(name) + CLASS_MEMBER_FIELD(arguments) + CLASS_MEMBER_FIELD(statement) + END_CLASS_MEMBER(WfStateSwitchCase) + + BEGIN_CLASS_MEMBER(WfStateSwitchStatement) + CLASS_MEMBER_BASE(WfStateMachineStatement) + + CLASS_MEMBER_CONSTRUCTOR(vl::Ptr(), NO_PARAMETER) + + CLASS_MEMBER_FIELD(type) + CLASS_MEMBER_FIELD(caseBranches) + END_CLASS_MEMBER(WfStateSwitchStatement) + + BEGIN_CLASS_MEMBER(WfStateInvokeStatement) + CLASS_MEMBER_BASE(WfStateMachineStatement) + + CLASS_MEMBER_CONSTRUCTOR(vl::Ptr(), NO_PARAMETER) + + CLASS_MEMBER_FIELD(type) + PARSING_TOKEN_FIELD(name) + CLASS_MEMBER_FIELD(arguments) + END_CLASS_MEMBER(WfStateInvokeStatement) + BEGIN_CLASS_MEMBER(WfThisExpression) CLASS_MEMBER_BASE(WfExpression) @@ -3146,31 +1594,38 @@ namespace vl CLASS_MEMBER_FIELD(declarations) END_CLASS_MEMBER(WfNewInterfaceExpression) - BEGIN_CLASS_MEMBER(WfVirtualExpression) + BEGIN_CLASS_MEMBER(WfVirtualCfeExpression) CLASS_MEMBER_BASE(WfExpression) - CLASS_MEMBER_METHOD_OVERLOAD(Accept, {L"visitor"}, void(WfVirtualExpression::*)(WfVirtualExpression::IVisitor* visitor)) + CLASS_MEMBER_METHOD_OVERLOAD(Accept, {L"visitor"}, void(WfVirtualCfeExpression::*)(WfVirtualCfeExpression::IVisitor* visitor)) CLASS_MEMBER_FIELD(expandedExpression) - END_CLASS_MEMBER(WfVirtualExpression) - - BEGIN_CLASS_MEMBER(WfBindExpression) - CLASS_MEMBER_BASE(WfVirtualExpression) - - CLASS_MEMBER_CONSTRUCTOR(vl::Ptr(), NO_PARAMETER) - - CLASS_MEMBER_FIELD(expression) - END_CLASS_MEMBER(WfBindExpression) + END_CLASS_MEMBER(WfVirtualCfeExpression) BEGIN_CLASS_MEMBER(WfFormatExpression) - CLASS_MEMBER_BASE(WfVirtualExpression) + CLASS_MEMBER_BASE(WfVirtualCfeExpression) CLASS_MEMBER_CONSTRUCTOR(vl::Ptr(), NO_PARAMETER) PARSING_TOKEN_FIELD(value) END_CLASS_MEMBER(WfFormatExpression) + BEGIN_CLASS_MEMBER(WfVirtualCseExpression) + CLASS_MEMBER_BASE(WfExpression) + + CLASS_MEMBER_METHOD_OVERLOAD(Accept, {L"visitor"}, void(WfVirtualCseExpression::*)(WfVirtualCseExpression::IVisitor* visitor)) + CLASS_MEMBER_FIELD(expandedExpression) + END_CLASS_MEMBER(WfVirtualCseExpression) + + BEGIN_CLASS_MEMBER(WfBindExpression) + CLASS_MEMBER_BASE(WfVirtualCseExpression) + + CLASS_MEMBER_CONSTRUCTOR(vl::Ptr(), NO_PARAMETER) + + CLASS_MEMBER_FIELD(expression) + END_CLASS_MEMBER(WfBindExpression) + BEGIN_CLASS_MEMBER(WfNewCoroutineExpression) - CLASS_MEMBER_BASE(WfVirtualExpression) + CLASS_MEMBER_BASE(WfVirtualCseExpression) CLASS_MEMBER_CONSTRUCTOR(vl::Ptr(), NO_PARAMETER) @@ -3179,7 +1634,7 @@ namespace vl END_CLASS_MEMBER(WfNewCoroutineExpression) BEGIN_CLASS_MEMBER(WfMixinCastExpression) - CLASS_MEMBER_BASE(WfVirtualExpression) + CLASS_MEMBER_BASE(WfVirtualCseExpression) CLASS_MEMBER_CONSTRUCTOR(vl::Ptr(), NO_PARAMETER) @@ -3188,7 +1643,7 @@ namespace vl END_CLASS_MEMBER(WfMixinCastExpression) BEGIN_CLASS_MEMBER(WfExpectedTypeCastExpression) - CLASS_MEMBER_BASE(WfVirtualExpression) + CLASS_MEMBER_BASE(WfVirtualCseExpression) CLASS_MEMBER_CONSTRUCTOR(vl::Ptr(), NO_PARAMETER) @@ -3196,6 +1651,14 @@ namespace vl CLASS_MEMBER_FIELD(expression) END_CLASS_MEMBER(WfExpectedTypeCastExpression) + BEGIN_CLASS_MEMBER(WfCoOperatorExpression) + CLASS_MEMBER_BASE(WfVirtualCseExpression) + + CLASS_MEMBER_CONSTRUCTOR(vl::Ptr(), NO_PARAMETER) + + PARSING_TOKEN_FIELD(name) + END_CLASS_MEMBER(WfCoOperatorExpression) + BEGIN_CLASS_MEMBER(WfModuleUsingFragment) CLASS_MEMBER_METHOD_OVERLOAD(Accept, {L"visitor"}, void(WfModuleUsingFragment::*)(WfModuleUsingFragment::IVisitor* visitor)) END_CLASS_MEMBER(WfModuleUsingFragment) @@ -3287,7 +1750,8 @@ namespace vl CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfExpression::IVisitor::*)(WfFunctionExpression* node)) CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfExpression::IVisitor::*)(WfNewClassExpression* node)) CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfExpression::IVisitor::*)(WfNewInterfaceExpression* node)) - CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfExpression::IVisitor::*)(WfVirtualExpression* node)) + CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfExpression::IVisitor::*)(WfVirtualCfeExpression* node)) + CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfExpression::IVisitor::*)(WfVirtualCseExpression* node)) END_INTERFACE_MEMBER(WfExpression) BEGIN_INTERFACE_MEMBER(WfStatement::IVisitor) @@ -3300,10 +1764,12 @@ namespace vl CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfStatement::IVisitor::*)(WfWhileStatement* node)) CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfStatement::IVisitor::*)(WfTryStatement* node)) CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfStatement::IVisitor::*)(WfBlockStatement* node)) + CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfStatement::IVisitor::*)(WfGotoStatement* node)) CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfStatement::IVisitor::*)(WfVariableStatement* node)) CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfStatement::IVisitor::*)(WfExpressionStatement* node)) - CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfStatement::IVisitor::*)(WfVirtualStatement* node)) + CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfStatement::IVisitor::*)(WfVirtualCseStatement* node)) CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfStatement::IVisitor::*)(WfCoroutineStatement* node)) + CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfStatement::IVisitor::*)(WfStateMachineStatement* node)) END_INTERFACE_MEMBER(WfStatement) BEGIN_INTERFACE_MEMBER(WfDeclaration::IVisitor) @@ -3317,32 +1783,46 @@ namespace vl CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfDeclaration::IVisitor::*)(WfClassDeclaration* node)) CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfDeclaration::IVisitor::*)(WfEnumDeclaration* node)) CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfDeclaration::IVisitor::*)(WfStructDeclaration* node)) - CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfDeclaration::IVisitor::*)(WfVirtualDeclaration* node)) + CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfDeclaration::IVisitor::*)(WfVirtualCfeDeclaration* node)) + CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfDeclaration::IVisitor::*)(WfVirtualCseDeclaration* node)) END_INTERFACE_MEMBER(WfDeclaration) - BEGIN_INTERFACE_MEMBER(WfVirtualDeclaration::IVisitor) - CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfVirtualDeclaration::IVisitor::*)(WfAutoPropertyDeclaration* node)) - CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfVirtualDeclaration::IVisitor::*)(WfCastResultInterfaceDeclaration* node)) - END_INTERFACE_MEMBER(WfVirtualDeclaration) + BEGIN_INTERFACE_MEMBER(WfVirtualCfeDeclaration::IVisitor) + CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfVirtualCfeDeclaration::IVisitor::*)(WfAutoPropertyDeclaration* node)) + CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfVirtualCfeDeclaration::IVisitor::*)(WfCastResultInterfaceDeclaration* node)) + END_INTERFACE_MEMBER(WfVirtualCfeDeclaration) - BEGIN_INTERFACE_MEMBER(WfVirtualStatement::IVisitor) - CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfVirtualStatement::IVisitor::*)(WfForEachStatement* node)) - CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfVirtualStatement::IVisitor::*)(WfSwitchStatement* node)) - CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfVirtualStatement::IVisitor::*)(WfCoProviderStatement* node)) - END_INTERFACE_MEMBER(WfVirtualStatement) + BEGIN_INTERFACE_MEMBER(WfVirtualCseDeclaration::IVisitor) + CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfVirtualCseDeclaration::IVisitor::*)(WfStateMachineDeclaration* node)) + END_INTERFACE_MEMBER(WfVirtualCseDeclaration) + + BEGIN_INTERFACE_MEMBER(WfVirtualCseStatement::IVisitor) + CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfVirtualCseStatement::IVisitor::*)(WfForEachStatement* node)) + CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfVirtualCseStatement::IVisitor::*)(WfSwitchStatement* node)) + CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfVirtualCseStatement::IVisitor::*)(WfCoProviderStatement* node)) + END_INTERFACE_MEMBER(WfVirtualCseStatement) BEGIN_INTERFACE_MEMBER(WfCoroutineStatement::IVisitor) CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfCoroutineStatement::IVisitor::*)(WfCoPauseStatement* node)) CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfCoroutineStatement::IVisitor::*)(WfCoOperatorStatement* node)) END_INTERFACE_MEMBER(WfCoroutineStatement) - BEGIN_INTERFACE_MEMBER(WfVirtualExpression::IVisitor) - CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfVirtualExpression::IVisitor::*)(WfBindExpression* node)) - CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfVirtualExpression::IVisitor::*)(WfFormatExpression* node)) - CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfVirtualExpression::IVisitor::*)(WfNewCoroutineExpression* node)) - CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfVirtualExpression::IVisitor::*)(WfMixinCastExpression* node)) - CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfVirtualExpression::IVisitor::*)(WfExpectedTypeCastExpression* node)) - END_INTERFACE_MEMBER(WfVirtualExpression) + BEGIN_INTERFACE_MEMBER(WfStateMachineStatement::IVisitor) + CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfStateMachineStatement::IVisitor::*)(WfStateSwitchStatement* node)) + CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfStateMachineStatement::IVisitor::*)(WfStateInvokeStatement* node)) + END_INTERFACE_MEMBER(WfStateMachineStatement) + + BEGIN_INTERFACE_MEMBER(WfVirtualCfeExpression::IVisitor) + CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfVirtualCfeExpression::IVisitor::*)(WfFormatExpression* node)) + END_INTERFACE_MEMBER(WfVirtualCfeExpression) + + BEGIN_INTERFACE_MEMBER(WfVirtualCseExpression::IVisitor) + CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfVirtualCseExpression::IVisitor::*)(WfBindExpression* node)) + CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfVirtualCseExpression::IVisitor::*)(WfNewCoroutineExpression* node)) + CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfVirtualCseExpression::IVisitor::*)(WfMixinCastExpression* node)) + CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfVirtualCseExpression::IVisitor::*)(WfExpectedTypeCastExpression* node)) + CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfVirtualCseExpression::IVisitor::*)(WfCoOperatorExpression* node)) + END_INTERFACE_MEMBER(WfVirtualCseExpression) BEGIN_INTERFACE_MEMBER(WfModuleUsingFragment::IVisitor) CLASS_MEMBER_METHOD_OVERLOAD(Visit, {L"node"}, void(WfModuleUsingFragment::IVisitor::*)(WfModuleUsingNameFragment* node)) @@ -3396,11 +1876,15 @@ namespace vl ADD_TYPE_INFO(vl::workflow::WfEnumDeclaration) ADD_TYPE_INFO(vl::workflow::WfStructMember) ADD_TYPE_INFO(vl::workflow::WfStructDeclaration) - ADD_TYPE_INFO(vl::workflow::WfVirtualDeclaration) + ADD_TYPE_INFO(vl::workflow::WfVirtualCfeDeclaration) ADD_TYPE_INFO(vl::workflow::WfAPConst) ADD_TYPE_INFO(vl::workflow::WfAPObserve) ADD_TYPE_INFO(vl::workflow::WfAutoPropertyDeclaration) ADD_TYPE_INFO(vl::workflow::WfCastResultInterfaceDeclaration) + ADD_TYPE_INFO(vl::workflow::WfVirtualCseDeclaration) + ADD_TYPE_INFO(vl::workflow::WfStateInput) + ADD_TYPE_INFO(vl::workflow::WfStateDeclaration) + ADD_TYPE_INFO(vl::workflow::WfStateMachineDeclaration) ADD_TYPE_INFO(vl::workflow::WfBreakStatement) ADD_TYPE_INFO(vl::workflow::WfContinueStatement) ADD_TYPE_INFO(vl::workflow::WfReturnStatement) @@ -3410,9 +1894,10 @@ namespace vl ADD_TYPE_INFO(vl::workflow::WfWhileStatement) ADD_TYPE_INFO(vl::workflow::WfTryStatement) ADD_TYPE_INFO(vl::workflow::WfBlockStatement) + ADD_TYPE_INFO(vl::workflow::WfGotoStatement) ADD_TYPE_INFO(vl::workflow::WfVariableStatement) ADD_TYPE_INFO(vl::workflow::WfExpressionStatement) - ADD_TYPE_INFO(vl::workflow::WfVirtualStatement) + ADD_TYPE_INFO(vl::workflow::WfVirtualCseStatement) ADD_TYPE_INFO(vl::workflow::WfForEachDirection) ADD_TYPE_INFO(vl::workflow::WfForEachStatement) ADD_TYPE_INFO(vl::workflow::WfSwitchCase) @@ -3421,6 +1906,13 @@ namespace vl ADD_TYPE_INFO(vl::workflow::WfCoroutineStatement) ADD_TYPE_INFO(vl::workflow::WfCoPauseStatement) ADD_TYPE_INFO(vl::workflow::WfCoOperatorStatement) + ADD_TYPE_INFO(vl::workflow::WfStateSwitchType) + ADD_TYPE_INFO(vl::workflow::WfStateInvokeType) + ADD_TYPE_INFO(vl::workflow::WfStateMachineStatement) + ADD_TYPE_INFO(vl::workflow::WfStateSwitchArgument) + ADD_TYPE_INFO(vl::workflow::WfStateSwitchCase) + ADD_TYPE_INFO(vl::workflow::WfStateSwitchStatement) + ADD_TYPE_INFO(vl::workflow::WfStateInvokeStatement) ADD_TYPE_INFO(vl::workflow::WfThisExpression) ADD_TYPE_INFO(vl::workflow::WfTopQualifiedExpression) ADD_TYPE_INFO(vl::workflow::WfReferenceExpression) @@ -3461,12 +1953,14 @@ namespace vl ADD_TYPE_INFO(vl::workflow::WfFunctionExpression) ADD_TYPE_INFO(vl::workflow::WfNewClassExpression) ADD_TYPE_INFO(vl::workflow::WfNewInterfaceExpression) - ADD_TYPE_INFO(vl::workflow::WfVirtualExpression) - ADD_TYPE_INFO(vl::workflow::WfBindExpression) + ADD_TYPE_INFO(vl::workflow::WfVirtualCfeExpression) ADD_TYPE_INFO(vl::workflow::WfFormatExpression) + ADD_TYPE_INFO(vl::workflow::WfVirtualCseExpression) + ADD_TYPE_INFO(vl::workflow::WfBindExpression) ADD_TYPE_INFO(vl::workflow::WfNewCoroutineExpression) ADD_TYPE_INFO(vl::workflow::WfMixinCastExpression) ADD_TYPE_INFO(vl::workflow::WfExpectedTypeCastExpression) + ADD_TYPE_INFO(vl::workflow::WfCoOperatorExpression) ADD_TYPE_INFO(vl::workflow::WfModuleUsingFragment) ADD_TYPE_INFO(vl::workflow::WfModuleUsingNameFragment) ADD_TYPE_INFO(vl::workflow::WfModuleUsingWildCardFragment) @@ -3478,10 +1972,13 @@ namespace vl ADD_TYPE_INFO(vl::workflow::WfExpression::IVisitor) ADD_TYPE_INFO(vl::workflow::WfStatement::IVisitor) ADD_TYPE_INFO(vl::workflow::WfDeclaration::IVisitor) - ADD_TYPE_INFO(vl::workflow::WfVirtualDeclaration::IVisitor) - ADD_TYPE_INFO(vl::workflow::WfVirtualStatement::IVisitor) + ADD_TYPE_INFO(vl::workflow::WfVirtualCfeDeclaration::IVisitor) + ADD_TYPE_INFO(vl::workflow::WfVirtualCseDeclaration::IVisitor) + ADD_TYPE_INFO(vl::workflow::WfVirtualCseStatement::IVisitor) ADD_TYPE_INFO(vl::workflow::WfCoroutineStatement::IVisitor) - ADD_TYPE_INFO(vl::workflow::WfVirtualExpression::IVisitor) + ADD_TYPE_INFO(vl::workflow::WfStateMachineStatement::IVisitor) + ADD_TYPE_INFO(vl::workflow::WfVirtualCfeExpression::IVisitor) + ADD_TYPE_INFO(vl::workflow::WfVirtualCseExpression::IVisitor) ADD_TYPE_INFO(vl::workflow::WfModuleUsingFragment::IVisitor) } @@ -3508,6 +2005,4228 @@ namespace vl } +/*********************************************************************** +.\EXPRESSION\WFEXPRESSION_PARSER.CPP +***********************************************************************/ +/*********************************************************************** +Vczh Library++ 3.0 +Developer: Zihan Chen(vczh) +Parser::WfExpression.parser.txt + +This file is generated by: Vczh Parser Generator +***********************************************************************/ + + +namespace vl +{ + namespace workflow + { +/*********************************************************************** +ParserText +***********************************************************************/ + +const wchar_t* const parserTextBuffer[] = { + L"" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"// AST (Root Types)" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"" L"\r\n" +, L"enum ClassMemberKind" L"\r\n" +, L"{" L"\r\n" +, L"\tStatic," L"\r\n" +, L"\tOverride," L"\r\n" +, L"\tNormal," L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class ClassMember" L"\r\n" +, L"{" L"\r\n" +, L"\tClassMemberKind\t\t\tkind;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class Type" L"\r\n" +, L"{" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class Expression" L"\r\n" +, L"{" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class Statement" L"\r\n" +, L"{" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class Attribute" L"\r\n" +, L"{" L"\r\n" +, L"\ttoken\t\t\t\t\tcategory;" L"\r\n" +, L"\ttoken\t\t\t\t\tname;" L"\r\n" +, L"\tExpression\t\t\t\tvalue;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class Declaration" L"\r\n" +, L"{" L"\r\n" +, L"\tAttribute[]\t\t\t\tattributes;" L"\r\n" +, L"\ttoken\t\t\t\t\tname;" L"\r\n" +, L"\tClassMember\t\t\t\tclassMember;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"// AST (Types)" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"" L"\r\n" +, L"enum PredefinedTypeName" L"\r\n" +, L"{" L"\r\n" +, L"\tVoid," L"\r\n" +, L"\tObject," L"\r\n" +, L"\tInterface," L"\r\n" +, L"\tInt," L"\r\n" +, L"\tUInt," L"\r\n" +, L"\tFloat," L"\r\n" +, L"\tDouble," L"\r\n" +, L"\tString," L"\r\n" +, L"\tChar," L"\r\n" +, L"\tBool," L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class PredefinedType : Type" L"\r\n" +, L"{" L"\r\n" +, L"\tPredefinedTypeName\t\tname;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class TopQualifiedType : Type" L"\r\n" +, L"{" L"\r\n" +, L"\ttoken\t\t\t\t\tname;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class ReferenceType : Type" L"\r\n" +, L"{" L"\r\n" +, L"\ttoken\t\t\t\t\tname;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class RawPointerType : Type" L"\r\n" +, L"{" L"\r\n" +, L"\tType\t\t\t\t\telement;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class SharedPointerType : Type" L"\r\n" +, L"{" L"\r\n" +, L"\tType\t\t\t\t\telement;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class NullableType : Type" L"\r\n" +, L"{" L"\r\n" +, L"\tType\t\t\t\t\telement;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class EnumerableType : Type" L"\r\n" +, L"{" L"\r\n" +, L"\tType\t\t\t\t\telement;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"enum MapWritability" L"\r\n" +, L"{" L"\r\n" +, L"\tReadonly," L"\r\n" +, L"\tWritable," L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class MapType : Type" L"\r\n" +, L"{" L"\r\n" +, L"\tMapWritability\t\t\twritability;" L"\r\n" +, L"\tType\t\t\t\t\tkey;" L"\r\n" +, L"\tType\t\t\t\t\tvalue;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class ObservableListType : Type" L"\r\n" +, L"{" L"\r\n" +, L"\tType\t\t\t\t\telement;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class FunctionType : Type" L"\r\n" +, L"{" L"\r\n" +, L"\tType\t\t\t\t\tresult;" L"\r\n" +, L"\tType[]\t\t\t\t\targuments;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class ChildType : Type" L"\r\n" +, L"{" L"\r\n" +, L"\tType\t\t\t\t\tparent;" L"\r\n" +, L"\ttoken\t\t\t\t\tname;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"// AST (Declarations)" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"" L"\r\n" +, L"class NamespaceDeclaration : Declaration" L"\r\n" +, L"{" L"\r\n" +, L"\tDeclaration[]\t\t\tdeclarations;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class FunctionArgument" L"\r\n" +, L"{" L"\r\n" +, L"\tAttribute[]\t\t\t\tattributes;" L"\r\n" +, L"\ttoken\t\t\t\t\tname;" L"\r\n" +, L"\tType\t\t\t\t\ttype;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"enum FunctionAnonymity" L"\r\n" +, L"{" L"\r\n" +, L"\tNamed," L"\r\n" +, L"\tAnonymous," L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class FunctionDeclaration : Declaration" L"\r\n" +, L"{" L"\r\n" +, L"\tFunctionAnonymity\t\tanonymity;" L"\r\n" +, L"\tFunctionArgument[]\t\targuments;" L"\r\n" +, L"\tType\t\t\t\t\treturnType;" L"\r\n" +, L"\tStatement\t\t\t\tstatement;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class VariableDeclaration : Declaration" L"\r\n" +, L"{" L"\r\n" +, L"\tType\t\t\t\t\ttype;" L"\r\n" +, L"\tExpression\t\t\t\texpression;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class EventDeclaration : Declaration" L"\r\n" +, L"{" L"\r\n" +, L"\tType[]\t\t\t\t\targuments;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class PropertyDeclaration : Declaration" L"\r\n" +, L"{" L"\r\n" +, L"\tType\t\t\t\t\ttype;" L"\r\n" +, L"\ttoken\t\t\t\t\tgetter;" L"\r\n" +, L"\ttoken\t\t\t\t\tsetter;" L"\r\n" +, L"\ttoken\t\t\t\t\tvalueChangedEvent;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"// AST (Class)" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"" L"\r\n" +, L"enum ClassKind" L"\r\n" +, L"{" L"\r\n" +, L"\tClass," L"\r\n" +, L"\tInterface," L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"enum ConstructorType" L"\r\n" +, L"{" L"\r\n" +, L"\tUndefined," L"\r\n" +, L"\tSharedPtr," L"\r\n" +, L"\tRawPtr," L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class BaseConstructorCall" L"\r\n" +, L"{" L"\r\n" +, L"\tType\t\t\t\t\ttype;" L"\r\n" +, L"\tExpression[]\t\t\targuments;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class ConstructorDeclaration : Declaration" L"\r\n" +, L"{" L"\r\n" +, L"\tConstructorType\t\t\tconstructorType;" L"\r\n" +, L"\tBaseConstructorCall[]\tbaseConstructorCalls;" L"\r\n" +, L"\tFunctionArgument[]\t\targuments;" L"\r\n" +, L"\tStatement\t\t\t\tstatement;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class DestructorDeclaration : Declaration" L"\r\n" +, L"{" L"\r\n" +, L"\tStatement\t\t\t\tstatement;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class ClassDeclaration : Declaration" L"\r\n" +, L"{" L"\r\n" +, L"\tClassKind\t\t\t\tkind;" L"\r\n" +, L"\tConstructorType\t\t\tconstructorType;" L"\r\n" +, L"\tType[]\t\t\t\t\tbaseTypes;" L"\r\n" +, L"\tDeclaration[]\t\t\tdeclarations (SetDefaultClassMember);" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"// AST (Enum)" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"" L"\r\n" +, L"enum EnumKind" L"\r\n" +, L"{" L"\r\n" +, L"\tNormal," L"\r\n" +, L"\tFlag," L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"enum EnumItemKind" L"\r\n" +, L"{" L"\r\n" +, L"\tConstant," L"\r\n" +, L"\tIntersection," L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class EnumItemIntersection" L"\r\n" +, L"{" L"\r\n" +, L"\ttoken\t\t\t\t\tname;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class EnumItem" L"\r\n" +, L"{" L"\r\n" +, L"\tAttribute[]\t\t\t\tattributes;" L"\r\n" +, L"\ttoken\t\t\t\t\tname;" L"\r\n" +, L"\tEnumItemKind\t\t\tkind;" L"\r\n" +, L"\ttoken\t\t\t\t\tnumber;" L"\r\n" +, L"\tEnumItemIntersection[]\tintersections;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class EnumDeclaration : Declaration" L"\r\n" +, L"{" L"\r\n" +, L"\tEnumKind\t\t\t\tkind;" L"\r\n" +, L"\tEnumItem[]\t\t\t\titems;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"// AST (Struct)" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"" L"\r\n" +, L"class StructMember" L"\r\n" +, L"{" L"\r\n" +, L"\tAttribute[]\t\t\t\tattributes;" L"\r\n" +, L"\ttoken\t\t\t\t\tname;" L"\r\n" +, L"\tType\t\t\t\t\ttype;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class StructDeclaration : Declaration" L"\r\n" +, L"{" L"\r\n" +, L"\tStructMember[]\t\t\tmembers;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"// AST (Virtual Context Free Expandable Declarations)" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"" L"\r\n" +, L"class VirtualCfeDeclaration : Declaration" L"\r\n" +, L"{" L"\r\n" +, L"\tDeclaration[]\t\t\texpandedDeclarations;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"enum APConst" L"\r\n" +, L"{" L"\r\n" +, L"\tReadonly," L"\r\n" +, L"\tWritable," L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"enum APObserve" L"\r\n" +, L"{" L"\r\n" +, L"\tObservable," L"\r\n" +, L"\tNotObservable," L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class AutoPropertyDeclaration : VirtualCfeDeclaration" L"\r\n" +, L"{" L"\r\n" +, L"\tType\t\t\t\t\ttype;" L"\r\n" +, L"\tAPConst\t\t\t\t\tconfigConst;" L"\r\n" +, L"\tAPObserve\t\t\t\tconfigObserve;" L"\r\n" +, L"\tExpression\t\t\t\texpression;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class CastResultInterfaceDeclaration : VirtualCfeDeclaration" L"\r\n" +, L"{" L"\r\n" +, L"\tType\t\t\t\t\tbaseType;" L"\r\n" +, L"\tType\t\t\t\t\telementType;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"// AST (Virtual Context Sensitive Expandable Declarations)" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"" L"\r\n" +, L"class VirtualCseDeclaration : Declaration" L"\r\n" +, L"{" L"\r\n" +, L"\tDeclaration[]\t\t\texpandedDeclarations;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class StateInput" L"\r\n" +, L"{" L"\r\n" +, L"\ttoken\t\t\t\t\tname;" L"\r\n" +, L"\tFunctionArgument[]\t\targuments;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class StateDeclaration" L"\r\n" +, L"{" L"\r\n" +, L"\ttoken\t\t\t\t\tname;" L"\r\n" +, L"\tFunctionArgument[]\t\targuments;" L"\r\n" +, L"\tStatement\t\t\t\tstatement;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class StateMachineDeclaration : VirtualCseDeclaration" L"\r\n" +, L"{" L"\r\n" +, L"\tStateInput[]\t\t\tinputs;" L"\r\n" +, L"\tStateDeclaration[]\t\tstates;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"// AST (Statements)" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"" L"\r\n" +, L"class BreakStatement : Statement" L"\r\n" +, L"{" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class ContinueStatement : Statement" L"\r\n" +, L"{" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class ReturnStatement : Statement" L"\r\n" +, L"{" L"\r\n" +, L"\tExpression\t\t\t\texpression;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class DeleteStatement : Statement" L"\r\n" +, L"{" L"\r\n" +, L"\tExpression\t\t\t\texpression;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class RaiseExceptionStatement : Statement" L"\r\n" +, L"{" L"\r\n" +, L"\tExpression\t\t\t\texpression;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class IfStatement : Statement" L"\r\n" +, L"{" L"\r\n" +, L"\tType\t\t\t\t\ttype;" L"\r\n" +, L"\ttoken\t\t\t\t\tname;" L"\r\n" +, L"\tExpression\t\t\t\texpression;" L"\r\n" +, L"\tStatement\t\t\t\ttrueBranch;" L"\r\n" +, L"\tStatement\t\t\t\tfalseBranch;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class WhileStatement : Statement" L"\r\n" +, L"{" L"\r\n" +, L"\tExpression\t\t\t\tcondition;" L"\r\n" +, L"\tStatement\t\t\t\tstatement;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class TryStatement : Statement" L"\r\n" +, L"{" L"\r\n" +, L"\tStatement\t\t\t\tprotectedStatement;" L"\r\n" +, L"\ttoken\t\t\t\t\tname;" L"\r\n" +, L"\tStatement\t\t\t\tcatchStatement;" L"\r\n" +, L"\tStatement\t\t\t\tfinallyStatement;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class BlockStatement : Statement" L"\r\n" +, L"{" L"\r\n" +, L"\tStatement[]\t\t\t\tstatements;" L"\r\n" +, L"\ttoken\t\t\t\t\tendLabel;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class GotoStatement : Statement" L"\r\n" +, L"{" L"\r\n" +, L"\ttoken\t\t\t\t\tlabel;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class VariableStatement : Statement" L"\r\n" +, L"{" L"\r\n" +, L"\tVariableDeclaration\t\tvariable;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class ExpressionStatement : Statement" L"\r\n" +, L"{" L"\r\n" +, L"\tExpression\t\t\t\texpression;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"// AST (Virtual Context Sensitive Expandable Statements)" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"" L"\r\n" +, L"class VirtualCseStatement : Statement" L"\r\n" +, L"{" L"\r\n" +, L"\tStatement\t\t\t\texpandedStatement;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"enum ForEachDirection" L"\r\n" +, L"{" L"\r\n" +, L"\tNormal," L"\r\n" +, L"\tReversed," L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class ForEachStatement : VirtualCseStatement" L"\r\n" +, L"{" L"\r\n" +, L"\ttoken\t\t\t\t\tname;" L"\r\n" +, L"\tForEachDirection\t\tdirection;" L"\r\n" +, L"\tExpression\t\t\t\tcollection;" L"\r\n" +, L"\tStatement\t\t\t\tstatement;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class SwitchCase" L"\r\n" +, L"{" L"\r\n" +, L"\tExpression\t\t\t\texpression;" L"\r\n" +, L"\tStatement\t\t\t\tstatement;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class SwitchStatement : VirtualCseStatement" L"\r\n" +, L"{" L"\r\n" +, L"\tExpression\t\t\t\texpression;" L"\r\n" +, L"\tSwitchCase[]\t\t\tcaseBranches;" L"\r\n" +, L"\tStatement\t\t\t\tdefaultBranch;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class CoProviderStatement : VirtualCseStatement" L"\r\n" +, L"{" L"\r\n" +, L"\ttoken\t\t\t\t\tname;" L"\r\n" +, L"\tStatement\t\t\t\tstatement;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"// AST (Coroutine Statements)" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"" L"\r\n" +, L"class CoroutineStatement : Statement" L"\r\n" +, L"{" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class CoPauseStatement : CoroutineStatement" L"\r\n" +, L"{" L"\r\n" +, L"\tStatement\t\t\t\tstatement;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class CoOperatorStatement : CoroutineStatement" L"\r\n" +, L"{" L"\r\n" +, L"\ttoken\t\t\t\t\tvarName;" L"\r\n" +, L"\ttoken\t\t\t\t\topName;" L"\r\n" +, L"\tExpression[]\t\t\targuments;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"// AST (State Machine Statements)" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"" L"\r\n" +, L"enum StateSwitchType" L"\r\n" +, L"{" L"\r\n" +, L"\tDefault," L"\r\n" +, L"\tPass," L"\r\n" +, L"\tPassAndReturn," L"\r\n" +, L"\tIgnore," L"\r\n" +, L"\tIgnoreAndReturn," L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"enum StateInvokeType" L"\r\n" +, L"{" L"\r\n" +, L"\tGoto," L"\r\n" +, L"\tPush," L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class StateMachineStatement : Statement" L"\r\n" +, L"{" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class StateSwitchArgument" L"\r\n" +, L"{" L"\r\n" +, L"\ttoken\t\t\t\t\tname;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class StateSwitchCase" L"\r\n" +, L"{" L"\r\n" +, L"\ttoken\t\t\t\t\tname;" L"\r\n" +, L"\tStateSwitchArgument[]\targuments;" L"\r\n" +, L"\tStatement\t\t\t\tstatement;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class StateSwitchStatement : StateMachineStatement" L"\r\n" +, L"{" L"\r\n" +, L"\tStateSwitchType\t\t\ttype;" L"\r\n" +, L"\tStateSwitchCase[]\t\tcaseBranches;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class StateInvokeStatement : StateMachineStatement" L"\r\n" +, L"{" L"\r\n" +, L"\tStateInvokeType\t\t\ttype;" L"\r\n" +, L"\ttoken\t\t\t\t\tname;" L"\r\n" +, L"\tExpression[]\t\t\targuments;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"// AST (Expressions)" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"" L"\r\n" +, L"class ThisExpression : Expression" L"\r\n" +, L"{" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class TopQualifiedExpression : Expression" L"\r\n" +, L"{" L"\r\n" +, L"\ttoken\t\t\t\t\tname;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class ReferenceExpression : Expression" L"\r\n" +, L"{" L"\r\n" +, L"\ttoken\t\t\t\t\tname;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class OrderedNameExpression : Expression" L"\r\n" +, L"{" L"\r\n" +, L"\ttoken\t\t\t\t\tname;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class OrderedLambdaExpression : Expression" L"\r\n" +, L"{" L"\r\n" +, L"\tExpression\t\t\t\tbody;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class MemberExpression : Expression" L"\r\n" +, L"{" L"\r\n" +, L"\tExpression\t\t\t\tparent;" L"\r\n" +, L"\ttoken\t\t\t\t\tname;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class ChildExpression : Expression" L"\r\n" +, L"{" L"\r\n" +, L"\tExpression\t\t\t\tparent;" L"\r\n" +, L"\ttoken\t\t\t\t\tname;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"enum LiteralValue" L"\r\n" +, L"{" L"\r\n" +, L"\tNull," L"\r\n" +, L"\tTrue," L"\r\n" +, L"\tFalse," L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class LiteralExpression : Expression" L"\r\n" +, L"{" L"\r\n" +, L"\tLiteralValue\t\t\tvalue;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class FloatingExpression : Expression" L"\r\n" +, L"{" L"\r\n" +, L"\ttoken\t\t\t\t\tvalue;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class IntegerExpression : Expression" L"\r\n" +, L"{" L"\r\n" +, L"\ttoken\t\t\t\t\tvalue;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class StringExpression : Expression" L"\r\n" +, L"{" L"\r\n" +, L"\ttoken\t\t\t\t\tvalue(UnescapeString);" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"enum UnaryOperator" L"\r\n" +, L"{" L"\r\n" +, L"\tPositive," L"\r\n" +, L"\tNegative," L"\r\n" +, L"\tNot," L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class UnaryExpression : Expression" L"\r\n" +, L"{" L"\r\n" +, L"\tUnaryOperator\t\t\top;" L"\r\n" +, L"\tExpression\t\t\t\toperand;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"enum BinaryOperator" L"\r\n" +, L"{" L"\r\n" +, L"\tAssign," L"\r\n" +, L"\tIndex," L"\r\n" +, L"\tUnion," L"\r\n" +, L"\tIntersect," L"\r\n" +, L"\tFailedThen," L"\r\n" +, L"\tExp," L"\r\n" +, L"\tAdd," L"\r\n" +, L"\tSub," L"\r\n" +, L"\tMul," L"\r\n" +, L"\tDiv," L"\r\n" +, L"\tMod," L"\r\n" +, L"\tShl," L"\r\n" +, L"\tShr," L"\r\n" +, L"\tLT," L"\r\n" +, L"\tGT," L"\r\n" +, L"\tLE," L"\r\n" +, L"\tGE," L"\r\n" +, L"\tEQ," L"\r\n" +, L"\tNE," L"\r\n" +, L"\tXor," L"\r\n" +, L"\tAnd," L"\r\n" +, L"\tOr," L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class BinaryExpression : Expression" L"\r\n" +, L"{" L"\r\n" +, L"\tBinaryOperator\t\t\top;" L"\r\n" +, L"\tExpression\t\t\t\tfirst;" L"\r\n" +, L"\tExpression\t\t\t\tsecond;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class LetVariable" L"\r\n" +, L"{" L"\r\n" +, L"\ttoken\t\t\t\t\tname;" L"\r\n" +, L"\tExpression\t\t\t\tvalue;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class LetExpression : Expression" L"\r\n" +, L"{" L"\r\n" +, L"\tLetVariable[]\t\t\tvariables;" L"\r\n" +, L"\tExpression\t\t\t\texpression;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class IfExpression : Expression" L"\r\n" +, L"{" L"\r\n" +, L"\tExpression\t\t\t\tcondition;" L"\r\n" +, L"\tExpression\t\t\t\ttrueBranch;" L"\r\n" +, L"\tExpression\t\t\t\tfalseBranch;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"enum RangeBoundary" L"\r\n" +, L"{" L"\r\n" +, L"\tInclusive," L"\r\n" +, L"\tExclusive," L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class RangeExpression : Expression" L"\r\n" +, L"{" L"\r\n" +, L"\tExpression\t\t\t\tbegin;" L"\r\n" +, L"\tRangeBoundary\t\t\tbeginBoundary;" L"\r\n" +, L"\tExpression\t\t\t\tend;" L"\r\n" +, L"\tRangeBoundary\t\t\tendBoundary;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"enum SetTesting" L"\r\n" +, L"{" L"\r\n" +, L"\tIn," L"\r\n" +, L"\tNotIn," L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class SetTestingExpression : Expression" L"\r\n" +, L"{" L"\r\n" +, L"\tSetTesting\t\t\t\ttest;" L"\r\n" +, L"\tExpression\t\t\t\telement;" L"\r\n" +, L"\tExpression\t\t\t\tcollection;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class ConstructorArgument" L"\r\n" +, L"{" L"\r\n" +, L"\tExpression\t\t\t\tkey;" L"\r\n" +, L"\tExpression\t\t\t\tvalue;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class ConstructorExpression : Expression" L"\r\n" +, L"{" L"\r\n" +, L"\tConstructorArgument[]\targuments;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class InferExpression : Expression" L"\r\n" +, L"{" L"\r\n" +, L"\tExpression\t\t\t\texpression;" L"\r\n" +, L"\tType\t\t\t\t\ttype;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"enum TypeCastingStrategy" L"\r\n" +, L"{" L"\r\n" +, L"\tStrong," L"\r\n" +, L"\tWeak," L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class TypeCastingExpression : Expression" L"\r\n" +, L"{" L"\r\n" +, L"\tTypeCastingStrategy\t\tstrategy;" L"\r\n" +, L"\tExpression\t\t\t\texpression;" L"\r\n" +, L"\tType\t\t\t\t\ttype;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"enum TypeTesting" L"\r\n" +, L"{" L"\r\n" +, L"\tIsType," L"\r\n" +, L"\tIsNotType," L"\r\n" +, L"\tIsNull," L"\r\n" +, L"\tIsNotNull," L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class TypeTestingExpression : Expression" L"\r\n" +, L"{" L"\r\n" +, L"\tTypeTesting\t\t\t\ttest;" L"\r\n" +, L"\tExpression\t\t\t\texpression;" L"\r\n" +, L"\tType\t\t\t\t\ttype;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class TypeOfTypeExpression : Expression" L"\r\n" +, L"{" L"\r\n" +, L"\tType\t\t\t\t\ttype;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class TypeOfExpressionExpression : Expression" L"\r\n" +, L"{" L"\r\n" +, L"\tExpression\t\t\t\texpression;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class AttachEventExpression : Expression" L"\r\n" +, L"{" L"\r\n" +, L"\tExpression\t\t\t\tevent;" L"\r\n" +, L"\tExpression\t\t\t\tfunction;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class DetachEventExpression : Expression" L"\r\n" +, L"{" L"\r\n" +, L"\tExpression\t\t\t\tevent;" L"\r\n" +, L"\tExpression\t\t\t\thandler;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"enum ObserveType" L"\r\n" +, L"{" L"\r\n" +, L"\tSimpleObserve," L"\r\n" +, L"\tExtendedObserve," L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class ObserveExpression : Expression" L"\r\n" +, L"{" L"\r\n" +, L"\tExpression\t\t\t\tparent;" L"\r\n" +, L"\tObserveType\t\t\t\tobserveType;" L"\r\n" +, L"\ttoken\t\t\t\t\tname;" L"\r\n" +, L"\tExpression\t\t\t\texpression;" L"\r\n" +, L"\tExpression[]\t\t\tevents;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class CallExpression : Expression" L"\r\n" +, L"{" L"\r\n" +, L"\tExpression\t\t\t\tfunction;" L"\r\n" +, L"\tExpression[]\t\t\targuments;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class FunctionExpression : Expression" L"\r\n" +, L"{" L"\r\n" +, L"\tFunctionDeclaration\t\tfunction;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class NewClassExpression : Expression" L"\r\n" +, L"{" L"\r\n" +, L"\tType\t\t\t\t\ttype;" L"\r\n" +, L"\tExpression[]\t\t\targuments;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class NewInterfaceExpression : Expression" L"\r\n" +, L"{" L"\r\n" +, L"\tType\t\t\t\t\ttype;" L"\r\n" +, L"\tDeclaration[]\t\t\tdeclarations (SetDefaultClassMember);" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"// AST (Virtual Context Free Expandable Expressions)" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"" L"\r\n" +, L"class VirtualCfeExpression : Expression" L"\r\n" +, L"{" L"\r\n" +, L"\tExpression\t\t\t\texpandedExpression;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class FormatExpression : VirtualCfeExpression" L"\r\n" +, L"{" L"\r\n" +, L"\ttoken\t\t\t\t\tvalue(UnescapeFormatString);" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"// AST (Virtual Context Sensitive Expandable Expressions)" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"" L"\r\n" +, L"class VirtualCseExpression : Expression" L"\r\n" +, L"{" L"\r\n" +, L"\tExpression\t\t\t\texpandedExpression;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class BindExpression : VirtualCseExpression" L"\r\n" +, L"{" L"\r\n" +, L"\tExpression\t\t\t\texpression;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class NewCoroutineExpression : VirtualCseExpression" L"\r\n" +, L"{" L"\r\n" +, L"\ttoken\t\t\t\t\tname;" L"\r\n" +, L"\tStatement\t\t\t\tstatement;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class MixinCastExpression : VirtualCseExpression" L"\r\n" +, L"{" L"\r\n" +, L"\tType\t\t\t\t\ttype;" L"\r\n" +, L"\tExpression\t\t\t\texpression;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class ExpectedTypeCastExpression : VirtualCseExpression" L"\r\n" +, L"{" L"\r\n" +, L"\tTypeCastingStrategy\t\tstrategy;" L"\r\n" +, L"\tExpression\t\t\t\texpression;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class CoOperatorExpression : VirtualCseExpression" L"\r\n" +, L"{" L"\r\n" +, L"\ttoken\t\t\t\t\tname;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"// AST (Module)" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"" L"\r\n" +, L"class ModuleUsingFragment" L"\r\n" +, L"{" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class ModuleUsingNameFragment : ModuleUsingFragment" L"\r\n" +, L"{" L"\r\n" +, L"\ttoken\t\t\t\t\tname;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class ModuleUsingWildCardFragment : ModuleUsingFragment" L"\r\n" +, L"{" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class ModuleUsingItem" L"\r\n" +, L"{" L"\r\n" +, L"\tModuleUsingFragment[]\tfragments;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class ModuleUsingPath" L"\r\n" +, L"{" L"\r\n" +, L"\tModuleUsingItem[]\t\titems;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"enum ModuleType" L"\r\n" +, L"{" L"\r\n" +, L"\tModule," L"\r\n" +, L"\tUnit," L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"class Module" L"\r\n" +, L"{" L"\r\n" +, L"\tModuleType\t\t\t\tmoduleType;" L"\r\n" +, L"\ttoken\t\t\t\t\tname;" L"\r\n" +, L"\tModuleUsingPath[]\t\tpaths;" L"\r\n" +, L"\tDeclaration[]\t\t\tdeclarations;" L"\r\n" +, L"}" L"\r\n" +, L"" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"// Lexer" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"" L"\r\n" +, L"token EXP = \"/^\";" L"\r\n" +, L"token ADD = \"/+\";" L"\r\n" +, L"token SUB = \"-\";" L"\r\n" +, L"token MUL = \"/*\";" L"\r\n" +, L"token DIV = \"//\";" L"\r\n" +, L"token MOD = \"%\";" L"\r\n" +, L"token UNION = \"&\";" L"\r\n" +, L"token INTERSECTION = \"/|\";" L"\r\n" +, L"token LE = \"//=\";" L"\r\n" +, L"token LT = \"/<\";" L"\r\n" +, L"token GT = \"/>\";" L"\r\n" +, L"token EQ = \"/=/=\";" L"\r\n" +, L"token NE = \"/!/=\";" L"\r\n" +, L"token ASSIGN = \"/=\";" L"\r\n" +, L"token FAILED_THEN = \"/?/?\";" L"\r\n" +, L"token QUESTION_MARK = \"/?\";" L"\r\n" +, L"token SCOPE_DELIMITER = \"::\";" L"\r\n" +, L"token COLON = \":\";" L"\r\n" +, L"token SEMICOLON = \";\";" L"\r\n" +, L"token COMMA = \",\";" L"\r\n" +, L"token DOT = \".\";" L"\r\n" +, L"token OPEN_ARRAY = \"/[\";" L"\r\n" +, L"token CLOSE_ARRAY = \"/]\";" L"\r\n" +, L"token OPEN_BRACE = \"/{\";" L"\r\n" +, L"token CLOSE_BRACE = \"/}\";" L"\r\n" +, L"token OPEN_BRACKET = \"/(\";" L"\r\n" +, L"token CLOSE_BRACKET = \"/)\";" L"\r\n" +, L"token AT = \"@\";" L"\r\n" +, L"" L"\r\n" +, L"token TYPE_VOID = \"void\";" L"\r\n" +, L"token TYPE_OBJECT = \"object\";" L"\r\n" +, L"token TYPE_INTERFACE = \"interface\";" L"\r\n" +, L"token TYPE_INT = \"int\";" L"\r\n" +, L"token TYPE_UINT = \"uint\";" L"\r\n" +, L"token TYPE_FLOAT = \"float\";" L"\r\n" +, L"token TYPE_DOUBLE = \"double\";" L"\r\n" +, L"token TYPE_STRING = \"string\";" L"\r\n" +, L"token TYPE_CHAR = \"char\";" L"\r\n" +, L"token TYPE_BOOL = \"bool\";" L"\r\n" +, L"" L"\r\n" +, L"token KEYWORD_CONST = \"const\";" L"\r\n" +, L"token KEYWORD_SHL = \"shl\";" L"\r\n" +, L"token KEYWORD_SHR = \"shr\";" L"\r\n" +, L"token KEYWORD_XOR = \"xor\";" L"\r\n" +, L"token KEYWORD_AND = \"and\";" L"\r\n" +, L"token KEYWORD_OR = \"or\";" L"\r\n" +, L"token KEYWORD_NOT = \"not\";" L"\r\n" +, L"token KEYWORD_NULL= \"null\";" L"\r\n" +, L"token KEYWORD_THIS= \"this\";" L"\r\n" +, L"token KEYWORD_TRUE= \"true\";" L"\r\n" +, L"token KEYWORD_FALSE = \"false\";" L"\r\n" +, L"token KEYWORD_LET = \"let\";" L"\r\n" +, L"token KEYWORD_IN = \"in\";" L"\r\n" +, L"token KEYWORD_RANGE = \"range\";" L"\r\n" +, L"token KEYWORD_NEW = \"new\";" L"\r\n" +, L"token KEYWORD_OF = \"of\";" L"\r\n" +, L"token KEYWORD_AS = \"as\";" L"\r\n" +, L"token KEYWORD_IS = \"is\";" L"\r\n" +, L"token KEYWORD_CAST = \"cast\";" L"\r\n" +, L"token KEYWORD_FUNC = \"func\";" L"\r\n" +, L"token KEYWORD_TYPEOF = \"typeof\";" L"\r\n" +, L"token KEYWORD_TYPE = \"type\";" L"\r\n" +, L"token KEYWORD_BIND = \"bind\";" L"\r\n" +, L"token KEYWORD_OBSERVE = \"observe\";" L"\r\n" +, L"token KEYWORD_ON = \"on\";" L"\r\n" +, L"token KEYWORD_ATTACH = \"attach\";" L"\r\n" +, L"token KEYWORD_DETACH = \"detach\";" L"\r\n" +, L"token KEYWORD_GOTO = \"goto\";" L"\r\n" +, L"token KEYWORD_VAR = \"var\";" L"\r\n" +, L"token KEYWORD_BREAK = \"break\";" L"\r\n" +, L"token KEYWORD_CONTINUE = \"continue\";" L"\r\n" +, L"token KEYWORD_RETURN = \"return\";" L"\r\n" +, L"token KEYWORD_DELETE = \"delete\";" L"\r\n" +, L"token KEYWORD_RAISE = \"raise\";" L"\r\n" +, L"token KEYWORD_IF = \"if\";" L"\r\n" +, L"token KEYWORD_ELSE = \"else\";" L"\r\n" +, L"token KEYWORD_SWITCH = \"switch\";" L"\r\n" +, L"token KEYWORD_CASE = \"case\";" L"\r\n" +, L"token KEYWORD_DEFAULT = \"default\";" L"\r\n" +, L"token KEYWORD_WHILE = \"while\";" L"\r\n" +, L"token KEYWORD_FOR = \"for\";" L"\r\n" +, L"token KEYWORD_REVERSED = \"reversed\";" L"\r\n" +, L"token KEYWORD_TRY = \"try\";" L"\r\n" +, L"token KEYWORD_CATCH = \"catch\";" L"\r\n" +, L"token KEYWORD_FINALLY = \"finally\";" L"\r\n" +, L"token KEYWORD_CLASS = \"class\";" L"\r\n" +, L"token KEYWORD_ENUM = \"enum\";" L"\r\n" +, L"token KEYWORD_FLAGENUM = \"flagenum\";" L"\r\n" +, L"token KEYWORD_STRUCT = \"struct\";" L"\r\n" +, L"token KEYWORD_PROP = \"prop\";" L"\r\n" +, L"token KEYWORD_EVENT = \"event\";" L"\r\n" +, L"token KEYWORD_STATIC = \"static\";" L"\r\n" +, L"token KEYWORD_OVERRIDE = \"override\";" L"\r\n" +, L"token KEYWORD_USING = \"using\";" L"\r\n" +, L"token KEYWORD_NAMESPACE = \"namespace\";" L"\r\n" +, L"token KEYWORD_MODULE = \"module\";" L"\r\n" +, L"token KEYWORD_UNIT = \"unit\";" L"\r\n" +, L"" L"\r\n" +, L"token STATE_MACHINE = \"/$state_machine\";" L"\r\n" +, L"token STATE_INPUT = \"/$state_input\";" L"\r\n" +, L"token STATE_SWITCH = \"/$switch\";" L"\r\n" +, L"token STATE_GOTO = \"/$goto_state\";" L"\r\n" +, L"token STATE_PUSH = \"/$push_state\";" L"\r\n" +, L"token STATE_DECL = \"/$state\";" L"\r\n" +, L"" L"\r\n" +, L"token COROUTINE_COROUTINE = \"/$coroutine\";" L"\r\n" +, L"token COROUTINE_PAUSE = \"/$pause\";" L"\r\n" +, L"token COROUTINE_INTERFACE = \"/$interface\";" L"\r\n" +, L"token COROUTINE_OPERATOR = \"/$[A-Z]/w*\";" L"\r\n" +, L"token COROUTINE_SIGN = \"/$\";" L"\r\n" +, L"" L"\r\n" +, L"token NAME = \"[a-zA-Z_]/w*\";" L"\r\n" +, L"token ORDERED_NAME = \"/$[0-9]*\";" L"\r\n" +, L"token FLOAT = \"/d+./d+\";" L"\r\n" +, L"token INTEGER = \"/d+\";" L"\r\n" +, L"token STRING = \"\'([^\'\\\\]|\\\\\\.)*\'|\"\"([^\"\"\\\\]|\\\\\\.)*\"\"\";" L"\r\n" +, L"token FORMATSTRING = \"/$(\'([^\'\\\\]|\\\\\\.)*\'|\"\"([^\"\"\\\\]|\\\\\\.)*\"\")\";" L"\r\n" +, L"" L"\r\n" +, L"discardtoken SPACE = \"/s+\";" L"\r\n" +, L"discardtoken COMMENT = \"///*([^*]|/*+[^//])*/*+//\";" L"\r\n" +, L"" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"// Rule (Type)" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"" L"\r\n" +, L"rule Type _Type" L"\r\n" +, L"\t= \"void\" as PredefinedType with {name=\"Void\"}" L"\r\n" +, L"\t= \"object\" as PredefinedType with {name=\"Object\"}" L"\r\n" +, L"\t= \"interface\" as PredefinedType with {name=\"Interface\"}" L"\r\n" +, L"\t= \"int\" as PredefinedType with {name=\"Int\"}" L"\r\n" +, L"\t= \"uint\" as PredefinedType with {name=\"UInt\"}" L"\r\n" +, L"\t= \"float\" as PredefinedType with {name=\"Float\"}" L"\r\n" +, L"\t= \"double\" as PredefinedType with {name=\"Double\"}" L"\r\n" +, L"\t= \"string\" as PredefinedType with {name=\"String\"}" L"\r\n" +, L"\t= \"char\" as PredefinedType with {name=\"Char\"}" L"\r\n" +, L"\t= \"bool\" as PredefinedType with {name=\"Bool\"}" L"\r\n" +, L"\t= NAME : name as ReferenceType" L"\r\n" +, L"\t= \"func\" \"(\" [_Type : arguments {\",\" _Type : arguments}] \")\" \":\" _Type : result as FunctionType" L"\r\n" +, L"\t= _Type : element \"*\" as RawPointerType" L"\r\n" +, L"\t= _Type : element \"^\" as SharedPointerType" L"\r\n" +, L"\t= _Type : element \"?\" as NullableType" L"\r\n" +, L"\t= _Type : element \"{\" \"}\" as EnumerableType" L"\r\n" +, L"\t= _Type : value \"[\" [_Type : key] \"]\" as MapType with {writability=\"Writable\"}" L"\r\n" +, L"\t= \"observe\" _Type : element \"[\" \"]\" as ObservableListType" L"\r\n" +, L"\t= \"const\" _Type : value \"[\" [_Type : key] \"]\" as MapType with {writability=\"Readonly\"}" L"\r\n" +, L"\t= _Type : parent \"::\" NAME : name as ChildType" L"\r\n" +, L"\t= \"::\" NAME : name as TopQualifiedType" L"\r\n" +, L"\t= \"(\" !_Type \")\"" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"// Rule (Expression)" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"" L"\r\n" +, L"rule ConstructorArgument _CtorFragment" L"\r\n" +, L"\t= _Expression : key [ \":\" _Expression : value] as ConstructorArgument" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"rule LetVariable _LetVariable" L"\r\n" +, L"\t= NAME : name \"=\" _Expression : value as LetVariable" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"rule Expression _VirtualExpression" L"\r\n" +, L"\t= FORMATSTRING : value as FormatExpression" L"\r\n" +, L"\t= \"bind\" \"(\" _Expression : expression \")\" as BindExpression" L"\r\n" +, L"\t= \"$coroutine\" [\"(\" NAME : name \")\"] _Block : statement as NewCoroutineExpression" L"\r\n" +, L"\t= \"new\" _Type : type \"(\" \"using\" _Expression : expression \")\" as MixinCastExpression" L"\r\n" +, L"\t= \"$\" \".\" NAME : name as CoOperatorExpression" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"rule Expression _ExpPrimitive" L"\r\n" +, L"\t= \"null\" as LiteralExpression with {value = \"Null\"}" L"\r\n" +, L"\t= \"true\" as LiteralExpression with {value = \"True\"}" L"\r\n" +, L"\t= \"false\" as LiteralExpression with {value = \"False\"}" L"\r\n" +, L"\t= INTEGER : value as IntegerExpression" L"\r\n" +, L"\t= FLOAT : value as FloatingExpression" L"\r\n" +, L"\t= STRING : value as StringExpression" L"\r\n" +, L"\t= \"this\" as ThisExpression" L"\r\n" +, L"\t= NAME : name as ReferenceExpression" L"\r\n" +, L"\t= ORDERED_NAME : name as OrderedNameExpression" L"\r\n" +, L"\t= \"(\" !_Expression \")\"" L"\r\n" +, L"\t= \"[\" _Expression : body \"]\" as OrderedLambdaExpression" L"\r\n" +, L"\t= _Function : function as FunctionExpression" L"\r\n" +, L"\t= \"let\" _LetVariable : variables {\",\" _LetVariable : variables} \"in\" \"(\" _Expression : expression \")\" as LetExpression" L"\r\n" +, L"\t= \"range\"" L"\r\n" +, L"\t\t((\"(\" with {beginBoundary = \"Exclusive\"}) | (\"[\" with {beginBoundary = \"Inclusive\"}))" L"\r\n" +, L"\t\t_Expression : begin \",\" _Expression : end" L"\r\n" +, L"\t\t((\")\" with {endBoundary = \"Exclusive\"}) | (\"]\" with {endBoundary = \"Inclusive\"}))" L"\r\n" +, L"\t\tas RangeExpression" L"\r\n" +, L"\t= \"{\" ({_CtorFragment : arguments} | {_CtorFragment : arguments \";\"}) \"}\" as ConstructorExpression" L"\r\n" +, L"\t= \"new\" _Type : type \"(\" [_Expression : arguments {\",\" _Expression : arguments}] \")\" as NewClassExpression" L"\r\n" +, L"\t= \"new\" _Type : type \"{\" {_MemberDeclaration : declarations} \"}\" as NewInterfaceExpression" L"\r\n" +, L"\t= _ExpPrimitive : parent \".\" \"observe\" \"(\" _Expression : expression [\"on\" _Expression : events {\",\" _Expression : events}]\")\" as ObserveExpression with {observeType = \"SimpleObserve\"}" L"\r\n" +, L"\t= _ExpPrimitive : parent \".\" \"observe\" \"as\" NAME : name \"(\" _Expression : expression [\"on\" _Expression : events {\",\" _Expression : events}]\")\" as ObserveExpression with {observeType = \"ExtendedObserve\"}" L"\r\n" +, L"\t= _ExpPrimitive : function \"(\" [_Expression : arguments {\",\" _Expression : arguments}] \")\" as CallExpression" L"\r\n" +, L"\t= _ExpPrimitive : parent \".\" NAME : name as MemberExpression" L"\r\n" +, L"\t= _ExpPrimitive : parent \"::\" NAME : name as ChildExpression" L"\r\n" +, L"\t= _ExpPrimitive : first \"[\" _Expression : second \"]\" as BinaryExpression with {op = \"Index\"}" L"\r\n" +, L"\t= _ExpPrimitive : element" L"\r\n" +, L"\t\t((\"in\" with {test=\"In\"}) | (\"not\" \"in\" with {test=\"NotIn\"}))" L"\r\n" +, L"\t\t_Expression : collection as SetTestingExpression" L"\r\n" +, L"\t= _ExpPrimitive : expression \"of\" _Type : type as InferExpression" L"\r\n" +, L"\t= _ExpPrimitive : expression" L"\r\n" +, L"\t\t(" L"\r\n" +, L"\t\t\t(" L"\r\n" +, L"\t\t\t\t(" L"\r\n" +, L"\t\t\t\t\t(\"is\" with {test=\"IsType\"})" L"\r\n" +, L"\t\t\t\t\t| (\"is\" \"not\" with {test=\"IsNotType\"})" L"\r\n" +, L"\t\t\t\t) _Type : type as TypeTestingExpression" L"\r\n" +, L"\t\t\t)" L"\r\n" +, L"\t\t\t| (\"is\" \"null\" as TypeTestingExpression with {test=\"IsNull\"})" L"\r\n" +, L"\t\t\t| (\"is\" \"not\" \"null\" as TypeTestingExpression with {test=\"IsNotNull\"})" L"\r\n" +, L"\t\t)" L"\r\n" +, L"\t= _ExpPrimitive : expression \"as\" _Type : type as TypeCastingExpression with {strategy = \"Weak\"}" L"\r\n" +, L"\t= _ExpPrimitive : expression \"as\" \"*\" as ExpectedTypeCastExpression with {strategy = \"Weak\"}" L"\r\n" +, L"\t= \"typeof\" \"(\" _Type : type \")\" as TypeOfTypeExpression" L"\r\n" +, L"\t= \"type\" \"(\" _Expression : expression \")\" as TypeOfExpressionExpression" L"\r\n" +, L"\t= \"attach\" \"(\" _Expression : event \",\" _Expression : function \")\" as AttachEventExpression" L"\r\n" +, L"\t= \"detach\" \"(\" _Expression : event \",\" _Expression : handler \")\" as DetachEventExpression" L"\r\n" +, L"\t= \"::\" NAME : name as TopQualifiedExpression" L"\r\n" +, L"\t= !_VirtualExpression" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"rule Expression _Exp0" L"\r\n" +, L"\t= !_ExpPrimitive" L"\r\n" +, L"\t= \"+\" _Exp0 : operand as UnaryExpression with {op = \"Positive\"}" L"\r\n" +, L"\t= \"-\" _Exp0 : operand as UnaryExpression with {op = \"Negative\"}" L"\r\n" +, L"\t= \"not\" _Exp0 : operand as UnaryExpression with {op = \"Not\"}" L"\r\n" +, L"\t= \"cast\" _Type : type _Exp0 : expression as TypeCastingExpression with {strategy = \"Strong\"}" L"\r\n" +, L"\t= \"cast\" \"*\" _Exp0 : expression as ExpectedTypeCastExpression with {strategy = \"Strong\"}" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"rule Expression _Exp1" L"\r\n" +, L"\t= !_Exp0" L"\r\n" +, L"\t= _Exp1 : first \"^\" _Exp0 : second as BinaryExpression with {op = \"Exp\"}" L"\r\n" +, L"\t;" L"\r\n" +, L"rule Expression _Exp2" L"\r\n" +, L"\t= !_Exp1" L"\r\n" +, L"\t= _Exp2 : first \"*\" _Exp1 : second as BinaryExpression with {op = \"Mul\"}" L"\r\n" +, L"\t= _Exp2 : first \"/\" _Exp1 : second as BinaryExpression with {op = \"Div\"}" L"\r\n" +, L"\t= _Exp2 : first \"%\" _Exp1 : second as BinaryExpression with {op = \"Mod\"}" L"\r\n" +, L"\t;" L"\r\n" +, L"rule Expression _Exp3" L"\r\n" +, L"\t= !_Exp2" L"\r\n" +, L"\t= _Exp3 : first \"+\" _Exp2 : second as BinaryExpression with {op = \"Add\"}" L"\r\n" +, L"\t= _Exp3 : first \"-\" _Exp2 : second as BinaryExpression with {op = \"Sub\"}" L"\r\n" +, L"\t= _Exp3 : first \"&\" _Exp2 : second as BinaryExpression with {op = \"Union\"}" L"\r\n" +, L"\t= _Exp3 : first \"|\" _Exp2 : second as BinaryExpression with {op = \"Intersect\"}" L"\r\n" +, L"\t;" L"\r\n" +, L"rule Expression _Exp4" L"\r\n" +, L"\t= !_Exp3" L"\r\n" +, L"\t= _Exp4 : first \"shl\" _Exp3 : second as BinaryExpression with {op = \"Shl\"}" L"\r\n" +, L"\t= _Exp4 : first \"shr\" _Exp3 : second as BinaryExpression with {op = \"Shr\"}" L"\r\n" +, L"\t;" L"\r\n" +, L"rule Expression _Exp5" L"\r\n" +, L"\t= !_Exp4" L"\r\n" +, L"\t= _Exp5 : first \"<\" _Exp4 : second as BinaryExpression with {op = \"LT\"}" L"\r\n" +, L"\t= _Exp5 : first \">\" _Exp4 : second as BinaryExpression with {op = \"GT\"}" L"\r\n" +, L"\t= _Exp5 : first \"<=\" _Exp4 : second as BinaryExpression with {op = \"LE\"}" L"\r\n" +, L"\t= _Exp5 : first \">=\" _Exp4 : second as BinaryExpression with {op = \"GE\"}" L"\r\n" +, L"\t= _Exp5 : first \"==\" _Exp4 : second as BinaryExpression with {op = \"EQ\"}" L"\r\n" +, L"\t= _Exp5 : first \"!=\" _Exp4 : second as BinaryExpression with {op = \"NE\"}" L"\r\n" +, L"\t;" L"\r\n" +, L"rule Expression _Exp6" L"\r\n" +, L"\t= !_Exp5" L"\r\n" +, L"\t= _Exp6 : first \"xor\" _Exp5 : second as BinaryExpression with {op = \"Xor\"}" L"\r\n" +, L"\t;" L"\r\n" +, L"rule Expression _Exp7" L"\r\n" +, L"\t= !_Exp6" L"\r\n" +, L"\t= _Exp7 : first \"and\" _Exp6 : second as BinaryExpression with {op = \"And\"}" L"\r\n" +, L"\t;" L"\r\n" +, L"rule Expression _Exp8" L"\r\n" +, L"\t= !_Exp7" L"\r\n" +, L"\t= _Exp8 : first \"or\" _Exp7 : second as BinaryExpression with {op = \"Or\"}" L"\r\n" +, L"\t;" L"\r\n" +, L"rule Expression _Exp9" L"\r\n" +, L"\t= !_Exp8" L"\r\n" +, L"\t= _Exp9 : first \"??\" _Exp8 : second as BinaryExpression with {op = \"FailedThen\"}" L"\r\n" +, L"\t;" L"\r\n" +, L"rule Expression _Exp10" L"\r\n" +, L"\t= !_Exp9" L"\r\n" +, L"\t= _Exp9 : condition \"?\" _Exp10 : trueBranch \":\" _Exp10 : falseBranch as IfExpression" L"\r\n" +, L"\t;" L"\r\n" +, L"rule Expression _Exp11" L"\r\n" +, L"\t= !_Exp10" L"\r\n" +, L"\t= _Exp10 : first \"=\" _Exp11 : second as BinaryExpression with {op = \"Assign\"}" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"rule Expression _Expression" L"\r\n" +, L"\t= !_Exp11" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"// Rule (Statement)" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"" L"\r\n" +, L"rule SwitchCase _SwitchCase" L"\r\n" +, L"\t= \"case\" _Expression : expression \":\" _Block : statement as SwitchCase" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"rule Statement _Block" L"\r\n" +, L"\t= \"{\" {_Statement : statements} [NAME : endLabel \":\" \";\"] \"}\" as BlockStatement" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"rule IfStatement _If" L"\r\n" +, L"\t= \"if\" \"(\" [\"var\" NAME : name \":\" _Type : type \"=\"] _Expression : expression \")\" _Block : trueBranch [\"else\" (_Block : falseBranch | _If : falseBranch)] as IfStatement" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"rule Statement _VirtualStatement" L"\r\n" +, L"\t= \"switch\" \"(\" _Expression : expression \")\" \"{\" {_SwitchCase : caseBranches} [\"default\" \":\" _Block : defaultBranch] \"}\" as SwitchStatement" L"\r\n" +, L"\t= \"for\" \"(\" NAME : name " L"\r\n" +, L"\t\t((\"in\" with {direction=\"Normal\"}) | (\"in\" \"reversed\" with {direction=\"Reversed\"}))" L"\r\n" +, L"\t\t_Expression : collection \")\" _Block : statement as ForEachStatement" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"rule Statement _CoStatement" L"\r\n" +, L"\t= \"$pause\" (\";\" | _Block : statement) as CoPauseStatement" L"\r\n" +, L"\t= [\"var\" NAME : varName \"=\"] COROUTINE_OPERATOR : opName [_Expression : arguments {\",\" _Expression : arguments}] \";\" as CoOperatorStatement" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"rule Statement _CoProvider" L"\r\n" +, L"\t= (\"$\" | COROUTINE_OPERATOR : name) _Block : statement as CoProviderStatement" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"rule StateSwitchStatement _StateSwitchHead" L"\r\n" +, L"\t= \"$switch\" \"(\" \"raise\" \")\" as StateSwitchStatement with {type = \"Default\"}" L"\r\n" +, L"\t= \"$switch\" \"(\" \"continue\" \")\" as StateSwitchStatement with {type = \"Pass\"}" L"\r\n" +, L"\t= \"$switch\" \"(\" \"continue\" \",\" \"return\" \")\" as StateSwitchStatement with {type = \"PassAndReturn\"}" L"\r\n" +, L"\t= \"$switch\" \"(\" \")\" as StateSwitchStatement with {type = \"Ignore\"}" L"\r\n" +, L"\t= \"$switch\" \"(\" \"return\" \")\" as StateSwitchStatement with {type = \"IgnoreAndReturn\"}" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"rule StateSwitchArgument _StateSwitchArgument" L"\r\n" +, L"\t= NAME : name as StateSwitchArgument" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"rule StateSwitchCase _StateSwitchCase" L"\r\n" +, L"\t= \"case\" NAME : name \"(\" [_StateSwitchArgument : arguments {\",\" _StateSwitchArgument : arguments}] \")\" \":\" _Block : statement as StateSwitchCase" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"rule Statement _StateStatement" L"\r\n" +, L"\t= !_StateSwitchHead \"{\" {_StateSwitchCase : caseBranches} \"}\"" L"\r\n" +, L"\t= ( (\"$goto_state\" with {type = \"Goto\"}) | (\"$push_state\" with {type = \"Push\"}) )" L"\r\n" +, L"\t\tNAME : name \"(\" [_Expression : arguments {\",\" _Expression : arguments}] \")\" \";\" as StateInvokeStatement" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"rule Statement _Statement" L"\r\n" +, L"\t= !_Block" L"\r\n" +, L"\t= \"goto\" NAME : label \";\" as GotoStatement" L"\r\n" +, L"\t= _Variable : variable as VariableStatement" L"\r\n" +, L"\t= \"break\" \";\" as BreakStatement" L"\r\n" +, L"\t= \"continue\" \";\" as ContinueStatement" L"\r\n" +, L"\t= \"return\" [_Expression : expression] \";\" as ReturnStatement" L"\r\n" +, L"\t= \"delete\" _Expression : expression \";\" as DeleteStatement" L"\r\n" +, L"\t= \"raise\" [_Expression : expression] \";\" as RaiseExceptionStatement" L"\r\n" +, L"\t= !_If" L"\r\n" +, L"\t= \"while\" \"(\" _Expression : condition \")\" _Block : statement as WhileStatement" L"\r\n" +, L"\t= \"try\" _Block : protectedStatement [\"catch\" \"(\" NAME : name \")\" _Block : catchStatement] [\"finally\" _Block : finallyStatement] as TryStatement" L"\r\n" +, L"\t= _Expression : expression \";\" as ExpressionStatement" L"\r\n" +, L"\t= !_VirtualStatement" L"\r\n" +, L"\t= !_CoStatement" L"\r\n" +, L"\t= !_StateStatement" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"// Rule (Declaration -- State Machine)" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"" L"\r\n" +, L"rule StateInput _StateInput" L"\r\n" +, L"\t= \"$state_input\" NAME : name \"(\" [_FunctionArgument : arguments {\",\" _FunctionArgument : arguments}] \")\" \";\" as StateInput" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"rule StateDeclaration _StateDecl" L"\r\n" +, L"\t= \"$state\" (\"default\" | NAME : name) \"(\" [_FunctionArgument : arguments {\",\" _FunctionArgument : arguments}] \")\" _Block : statement as StateDeclaration" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"rule StateMachineDeclaration _StateMachine" L"\r\n" +, L"\t= \"$state_machine\" \"{\" { _StateInput : inputs | _StateDecl : states} \"}\" as StateMachineDeclaration" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"// Rule (Declaration -- Basic)" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"" L"\r\n" +, L"rule Attribute _Attribute" L"\r\n" +, L"\t= \"@\" NAME : category \":\" NAME : name [\"(\" _Expression : value \")\"] as Attribute" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"rule NamespaceDeclaration _Namespace" L"\r\n" +, L"\t= \"namespace\" NAME : name \"{\" {_Declaration : declarations} \"}\" as NamespaceDeclaration" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"rule FunctionArgument _FunctionArgument" L"\r\n" +, L"\t= {_Attribute : attributes} NAME : name \":\" _Type : type as FunctionArgument" L"\r\n" +, L"\t;" L"\r\n" +, L"rule FunctionDeclaration _Function" L"\r\n" +, L"\t= \"func\" " L"\r\n" +, L"\t\t(" L"\r\n" +, L"\t\t\t(NAME : name \"(\" with {anonymity=\"Named\"})" L"\r\n" +, L"\t\t\t| (\"(\" with {anonymity=\"Anonymous\"})" L"\r\n" +, L"\t\t)" L"\r\n" +, L"\t\t[_FunctionArgument : arguments {\",\" _FunctionArgument : arguments}] \")\" \":\" _Type : returnType" L"\r\n" +, L"\t\t(_Block : statement | _CoProvider : statement | \";\") as FunctionDeclaration" L"\r\n" +, L"\t;" L"\r\n" +, L"rule VariableDeclaration _Variable" L"\r\n" +, L"\t= \"var\" NAME : name [\":\" _Type : type] \"=\" _Expression : expression \";\" as VariableDeclaration" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"rule EventDeclaration _Event" L"\r\n" +, L"\t= \"event\" NAME : name \"(\" [_Type : arguments {\",\" _Type : arguments}] \")\" \";\" as EventDeclaration" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"rule PropertyDeclaration _Property" L"\r\n" +, L"\t= \"prop\" NAME : name \":\" _Type : type \"{\" NAME : getter [\",\" NAME : setter] [\":\" NAME : valueChangedEvent] \"}\" as PropertyDeclaration" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"rule BaseConstructorCall _BaseConstructorCall" L"\r\n" +, L"\t= _Type : type \"(\" [_Expression : arguments {\",\" _Expression : arguments}] \")\" as BaseConstructorCall" L"\r\n" +, L"\t;" L"\r\n" +, L"rule ConstructorDeclaration _Constructor" L"\r\n" +, L"\t=\t(" L"\r\n" +, L"\t\t\t(\"new\" with {constructorType = \"SharedPtr\"})" L"\r\n" +, L"\t\t\t| (\"new\" \"*\" with {constructorType = \"RawPtr\"})" L"\r\n" +, L"\t\t)" L"\r\n" +, L"\t\t\"(\" [_FunctionArgument : arguments {\",\" _FunctionArgument : arguments}] \")\"" L"\r\n" +, L"\t\t[\":\" _BaseConstructorCall : baseConstructorCalls {\",\" _BaseConstructorCall : baseConstructorCalls}]" L"\r\n" +, L"\t\t_Block : statement as ConstructorDeclaration" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"rule DestructorDeclaration _Destructor" L"\r\n" +, L"\t= \"delete\" _Block : statement as DestructorDeclaration" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"rule ClassDeclaration _ClassBody" L"\r\n" +, L"\t= [\":\" _Type : baseTypes {\",\" _Type : baseTypes}] \"{\" {_MemberDeclaration : declarations} [_StateMachine : declarations] \"}\" as ClassDeclaration" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"rule ClassDeclaration _Class" L"\r\n" +, L"\t= \"class\" NAME : name !_ClassBody with {kind = \"Class\"} with {constructorType = \"Undefined\"}" L"\r\n" +, L"\t= \"interface\" NAME : name !_ClassBody with {kind = \"Interface\"} with {constructorType = \"SharedPtr\"}" L"\r\n" +, L"\t= \"interface\" NAME : name \"*\" !_ClassBody with {kind = \"Interface\"} with {constructorType = \"RawPtr\"}" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"rule EnumItemIntersection _EnumItemInt" L"\r\n" +, L"\t= NAME : name as EnumItemIntersection" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"rule EnumItem _EnumItemA" L"\r\n" +, L"\t= {_Attribute : attributes} NAME : name \"=\" INTEGER : number \",\" as EnumItem with {kind = \"Constant\"}" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"rule EnumItem _EnumItemB" L"\r\n" +, L"\t= {_Attribute : attributes} NAME : name \"=\" _EnumItemInt : intersections {\"|\" _EnumItemInt : intersections} \",\" as EnumItem with {kind = \"Intersection\"}" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"rule EnumDeclaration _Enum" L"\r\n" +, L"\t= \"enum\" NAME : name \"{\" _EnumItemA : items {_EnumItemA : items} \"}\" as EnumDeclaration with {kind = \"Normal\"}" L"\r\n" +, L"\t= \"flagenum\" NAME : name \"{\" _EnumItemA : items {_EnumItemA : items} {_EnumItemB : items} \"}\" as EnumDeclaration with {kind = \"Flag\"}" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"rule StructMember _StructMember" L"\r\n" +, L"\t= {_Attribute : attributes} NAME : name \":\" _Type : type \";\" as StructMember" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"rule StructDeclaration _Struct" L"\r\n" +, L"\t= \"struct\" NAME : name \"{\" {_StructMember : members} \"}\" as StructDeclaration" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"rule AutoPropertyDeclaration _APConfig" L"\r\n" +, L"\t= \"{\" \"}\"" L"\r\n" +, L"\t\t\tas AutoPropertyDeclaration" L"\r\n" +, L"\t\t\twith {configConst=\"Writable\"} with {configObserve=\"Observable\"}" L"\r\n" +, L"\t= \"{\" \"const\" \"}\"" L"\r\n" +, L"\t\t\tas AutoPropertyDeclaration" L"\r\n" +, L"\t\t\twith {configConst=\"Readonly\"} with {configObserve=\"Observable\"}" L"\r\n" +, L"\t= \"{\" \"not\" \"observe\" \"}\"" L"\r\n" +, L"\t\t\tas AutoPropertyDeclaration" L"\r\n" +, L"\t\t\twith {configConst=\"Writable\"} with {configObserve=\"NotObservable\"}" L"\r\n" +, L"\t= \"{\" \"const\" \",\" \"not\" \"observe\" \"}\"" L"\r\n" +, L"\t\t\tas AutoPropertyDeclaration" L"\r\n" +, L"\t\t\twith {configConst=\"Readonly\"} with {configObserve=\"NotObservable\"}" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"rule AutoPropertyDeclaration _AutoProperty" L"\r\n" +, L"\t= \"prop\" NAME : name \":\" _Type : type [\"=\" _Expression : expression] !_APConfig" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"rule CastResultInterfaceDeclaration _CastResultInterface" L"\r\n" +, L"\t= \"$interface\" NAME : name \":\" _Type : baseType \"<\" _Type : elementType \">\" \";\" as CastResultInterfaceDeclaration" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"// Rule (Declaration -- Branches)" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"" L"\r\n" +, L"rule Declaration _SharedDeclarationBranch" L"\r\n" +, L"\t= !_Namespace" L"\r\n" +, L"\t= !_Variable" L"\r\n" +, L"\t= !_Event" L"\r\n" +, L"\t= !_Property" L"\r\n" +, L"\t= !_Constructor" L"\r\n" +, L"\t= !_Destructor" L"\r\n" +, L"\t= !_Class" L"\r\n" +, L"\t= !_Enum" L"\r\n" +, L"\t= !_Struct" L"\r\n" +, L"\t= !_CastResultInterface" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"rule Declaration _MemberDeclarationBranch" L"\r\n" +, L"\t= !_Function" L"\r\n" +, L"\t= !_AutoProperty" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"rule Declaration _Declaration" L"\r\n" +, L"\t= {_Attribute : attributes} !_SharedDeclarationBranch" L"\r\n" +, L"\t= {_Attribute : attributes} !_MemberDeclarationBranch" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"rule ClassMember _ClassMember" L"\r\n" +, L"\t=\t\"static\" as ClassMember with {kind = \"Static\"}" L"\r\n" +, L"\t=\t\"override\" as ClassMember with {kind = \"Override\"}" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"rule Declaration _MemberDeclaration" L"\r\n" +, L"\t= {_Attribute : attributes} !_SharedDeclarationBranch" L"\r\n" +, L"\t= {_Attribute : attributes} [_ClassMember : classMember] !_MemberDeclarationBranch" L"\r\n" +, L"\t;" L"\r\n" +, L"" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"// Rule (Module)" L"\r\n" +, L"//////////////////////////////////////////////////////////////////" L"\r\n" +, L"" L"\r\n" +, L"rule ModuleUsingFragment _UsingFragment" L"\r\n" +, L"\t= NAME : name as ModuleUsingNameFragment" L"\r\n" +, L"\t= \"*\" as ModuleUsingWildCardFragment" L"\r\n" +, L"\t;" L"\r\n" +, L"rule ModuleUsingItem _UsingItem" L"\r\n" +, L"\t= _UsingFragment : fragments {_UsingFragment : fragments} as ModuleUsingItem" L"\r\n" +, L"\t;" L"\r\n" +, L"rule ModuleUsingPath _UsingPath" L"\r\n" +, L"\t= \"using\" _UsingItem : items {\"::\" _UsingItem : items} \";\" as ModuleUsingPath" L"\r\n" +, L"\t;" L"\r\n" +, L"rule Module _Module" L"\r\n" +, L"\t= (" L"\r\n" +, L"\t\t(\"module\" with {moduleType=\"Module\"})" L"\r\n" +, L"\t\t| (\"unit\" with {moduleType=\"Unit\"})" L"\r\n" +, L"\t\t) NAME : name \";\" {_UsingPath : paths} {_Declaration : declarations} as Module" L"\r\n" +, L"\t;" L"\r\n" +}; +const vint lengthTextBuffer[] = { + 2, 68, 21, 68, 2, 22, 3, 10, 12, 10, 3, 2, 19, 3, 26, 3, 2, 12, 3, 3, 2, 18, 3, 3, 2, 17, 3, 3, 2, 17, 3, 22 +, 18, 23, 3, 2, 19, 3, 29, 18, 30, 3, 2, 68, 16, 68, 2, 25, 3, 8, 10, 13, 7, 8, 9, 10, 10, 8, 8, 3, 2, 29, 3, 28 +, 3, 2, 31, 3, 18, 3, 2, 28, 3, 18, 3, 2, 29, 3, 20, 3, 2, 32, 3, 20, 3, 2, 27, 3, 20, 3, 2, 29, 3, 20, 3, 2 +, 21, 3, 12, 12, 3, 2, 22, 3, 32, 16, 18, 3, 2, 33, 3, 20, 3, 2, 27, 3, 19, 24, 3, 2, 24, 3, 19, 18, 3, 2, 68, 23 +, 68, 2, 42, 3, 32, 3, 2, 24, 3, 29, 18, 17, 3, 2, 24, 3, 9, 13, 3, 2, 41, 3, 32, 33, 23, 26, 3, 2, 41, 3, 17, 28 +, 3, 2, 38, 3, 24, 3, 2, 41, 3, 17, 20, 20, 31, 3, 2, 68, 16, 68, 2, 16, 3, 9, 13, 3, 2, 22, 3, 13, 13, 10, 3, 2 +, 27, 3, 17, 28, 3, 2, 44, 3, 37, 46, 33, 26, 3, 2, 43, 3, 26, 3, 2, 38, 3, 21, 37, 24, 56, 3, 2, 68, 15, 68, 2, 15 +, 3, 10, 8, 3, 2, 19, 3, 12, 16, 3, 2, 28, 3, 18, 3, 2, 16, 3, 29, 18, 23, 20, 40, 3, 2, 37, 3, 20, 23, 3, 2, 68 +, 17, 68, 2, 20, 3, 29, 18, 17, 3, 2, 39, 3, 28, 3, 2, 68, 55, 68, 2, 43, 3, 40, 3, 2, 14, 3, 12, 12, 3, 2, 16, 3 +, 14, 17, 3, 2, 55, 3, 17, 27, 30, 28, 3, 2, 62, 3, 21, 24, 3, 2, 68, 60, 68, 2, 43, 3, 40, 3, 2, 18, 3, 18, 33, 3 +, 2, 24, 3, 18, 33, 26, 3, 2, 55, 3, 25, 30, 3, 2, 68, 21, 68, 2, 34, 3, 3, 2, 37, 3, 3, 2, 35, 3, 28, 3, 2, 35 +, 3, 28, 3, 2, 43, 3, 28, 3, 2, 31, 3, 17, 18, 28, 27, 28, 3, 2, 34, 3, 27, 26, 3, 2, 32, 3, 35, 18, 31, 33, 3, 2 +, 34, 3, 29, 22, 3, 2, 33, 3, 19, 3, 2, 37, 3, 33, 3, 2, 39, 3, 28, 3, 2, 68, 58, 68, 2, 39, 3, 34, 3, 2, 23, 3 +, 10, 12, 3, 2, 46, 3, 18, 31, 28, 26, 3, 2, 18, 3, 28, 26, 3, 2, 45, 3, 28, 31, 30, 3, 2, 49, 3, 18, 26, 3, 2, 68 +, 31, 68, 2, 38, 3, 3, 2, 45, 3, 26, 3, 2, 48, 3, 21, 20, 28, 3, 2, 68, 35, 68, 2, 22, 3, 11, 8, 17, 10, 19, 3, 2 +, 22, 3, 8, 8, 3, 2, 41, 3, 3, 2, 27, 3, 18, 3, 2, 23, 3, 18, 35, 26, 3, 2, 52, 3, 26, 35, 3, 2, 52, 3, 26, 18 +, 28, 3, 2, 68, 22, 68, 2, 35, 3, 3, 2, 43, 3, 18, 3, 2, 40, 3, 18, 3, 2, 42, 3, 18, 3, 2, 44, 3, 22, 3, 2, 37 +, 3, 24, 18, 3, 2, 36, 3, 24, 18, 3, 2, 19, 3, 8, 8, 9, 3, 2, 38, 3, 24, 3, 2, 39, 3, 19, 3, 2, 38, 3, 19, 3 +, 2, 37, 3, 35, 3, 2, 20, 3, 12, 12, 7, 3, 2, 36, 3, 22, 25, 3, 2, 21, 3, 10, 9, 9, 13, 14, 7, 7, 7, 7, 7, 7 +, 7, 7, 6, 6, 6, 6, 6, 6, 7, 7, 6, 3, 2, 37, 3, 23, 23, 24, 3, 2, 19, 3, 18, 23, 3, 2, 34, 3, 29, 28, 3, 2 +, 33, 3, 27, 28, 29, 3, 2, 20, 3, 13, 13, 3, 2, 36, 3, 23, 33, 21, 31, 3, 2, 17, 3, 6, 9, 3, 2, 41, 3, 22, 25, 28 +, 3, 2, 27, 3, 21, 23, 3, 2, 42, 3, 35, 3, 2, 36, 3, 28, 17, 3, 2, 26, 3, 10, 8, 3, 2, 42, 3, 33, 28, 17, 3, 2 +, 18, 3, 10, 13, 10, 13, 3, 2, 42, 3, 23, 28, 17, 3, 2, 41, 3, 17, 3, 2, 47, 3, 28, 3, 2, 42, 3, 23, 26, 3, 2, 42 +, 3, 23, 25, 3, 2, 18, 3, 17, 19, 3, 2, 38, 3, 24, 30, 18, 28, 25, 3, 2, 35, 3, 26, 28, 3, 2, 39, 3, 33, 3, 2, 39 +, 3, 17, 28, 3, 2, 43, 3, 17, 56, 3, 2, 68, 54, 68, 2, 41, 3, 36, 3, 2, 47, 3, 41, 3, 2, 68, 59, 68, 2, 41, 3, 36 +, 3, 2, 45, 3, 28, 3, 2, 53, 3, 18, 26, 3, 2, 50, 3, 17, 28, 3, 2, 57, 3, 33, 28, 3, 2, 51, 3, 18, 3, 2, 68, 17 +, 68, 2, 27, 3, 3, 2, 53, 3, 18, 3, 2, 57, 3, 3, 2, 23, 3, 35, 3, 2, 23, 3, 28, 3, 2, 17, 3, 10, 8, 3, 2, 14 +, 3, 28, 18, 28, 32, 3, 2, 68, 10, 68, 2, 19, 19, 18, 19, 19, 18, 20, 28, 20, 20, 18, 18, 20, 20, 22, 29, 29, 31, 20, 24, 20 +, 18, 26, 27, 26, 27, 28, 29, 17, 2, 27, 31, 37, 25, 27, 29, 31, 31, 27, 27, 2, 32, 28, 28, 28, 28, 26, 28, 29, 29, 29, 32, 28 +, 26, 32, 28, 26, 26, 26, 30, 30, 34, 30, 30, 36, 26, 34, 34, 30, 28, 32, 38, 34, 34, 32, 26, 30, 34, 30, 36, 32, 28, 38, 28, 32 +, 36, 32, 30, 38, 34, 30, 32, 34, 38, 32, 40, 34, 30, 2, 42, 38, 34, 36, 36, 31, 2, 44, 36, 44, 42, 30, 2, 30, 34, 26, 24, 56 +, 66, 2, 29, 53, 2, 68, 16, 68, 2, 17, 48, 52, 58, 46, 48, 50, 52, 52, 48, 48, 33, 98, 42, 45, 40, 46, 81, 60, 89, 49, 41, 19 +, 4, 2, 68, 22, 68, 2, 40, 72, 4, 2, 31, 55, 4, 2, 36, 45, 62, 84, 87, 48, 4, 2, 31, 54, 54, 56, 41, 40, 39, 29, 39, 49 +, 25, 58, 47, 121, 12, 89, 45, 85, 22, 101, 109, 93, 186, 205, 111, 63, 63, 95, 28, 64, 52, 68, 31, 5, 6, 7, 34, 45, 45, 6, 66, 75 +, 5, 99, 95, 58, 74, 93, 92, 47, 24, 4, 2, 23, 19, 66, 66, 63, 95, 91, 4, 2, 23, 11, 75, 4, 23, 11, 75, 75, 75, 4, 23, 11 +, 75, 75, 77, 81, 4, 23, 11, 77, 77, 4, 23, 11, 74, 74, 75, 75, 75, 75, 4, 23, 11, 77, 4, 23, 11, 77, 4, 23, 11, 75, 4, 23 +, 11, 83, 4, 24, 11, 87, 4, 24, 12, 80, 4, 2, 29, 12, 4, 2, 68, 21, 68, 2, 29, 73, 4, 2, 23, 82, 4, 2, 22, 170, 4, 2 +, 34, 141, 27, 86, 71, 4, 2, 29, 60, 142, 4, 2, 28, 80, 4, 2, 44, 78, 78, 100, 69, 87, 4, 2, 47, 39, 4, 2, 39, 147, 4, 2 +, 32, 64, 84, 107, 4, 2, 27, 12, 45, 46, 34, 40, 63, 61, 70, 9, 81, 146, 56, 23, 18, 21, 4, 2, 68, 40, 68, 2, 29, 125, 4, 2 +, 34, 154, 4, 2, 44, 102, 4, 2, 68, 32, 68, 2, 27, 83, 4, 2, 38, 90, 4, 2, 41, 79, 4, 36, 12, 5, 47, 41, 5, 98, 79, 4 +, 36, 97, 4, 2, 30, 100, 4, 2, 36, 136, 4, 2, 47, 104, 4, 42, 6, 49, 52, 5, 79, 103, 48, 4, 2, 40, 57, 4, 2, 34, 147, 4 +, 2, 30, 95, 103, 104, 4, 2, 40, 40, 4, 2, 26, 104, 4, 2, 26, 155, 4, 2, 28, 113, 136, 4, 2, 33, 79, 4, 2, 32, 80, 4, 2 +, 40, 12, 31, 68, 20, 31, 68, 28, 31, 71, 40, 31, 71, 4, 2, 44, 82, 4, 2, 58, 116, 4, 2, 68, 35, 68, 2, 43, 16, 15, 12, 15 +, 18, 17, 12, 11, 13, 26, 4, 2, 43, 15, 19, 4, 2, 31, 56, 56, 4, 2, 31, 51, 55, 4, 2, 37, 56, 85, 4, 2, 68, 18, 68, 2 +, 41, 43, 39, 4, 33, 79, 4, 33, 80, 4, 21, 6, 41, 39, 82, 4 +}; +const vint lengthTextBufferTotal = 35080; + + vl::WString WfGetParserTextBuffer() + { + vl::collections::Array textBuffer(lengthTextBufferTotal + 1); + wchar_t* reading = &textBuffer[0]; + for(vint i = 0; i < sizeof(parserTextBuffer) / sizeof(*parserTextBuffer); i++) + { + memcpy(reading, parserTextBuffer[i], lengthTextBuffer[i] * sizeof(wchar_t)); + reading += lengthTextBuffer[i]; + } + *reading = 0; + return &textBuffer[0]; + } + +/*********************************************************************** +SerializedTable +***********************************************************************/ + +const vint parserBufferLength = 180878; // 2081110 bytes before compressing +const vint parserBufferBlock = 1024; +const vint parserBufferRemain = 654; +const vint parserBufferRows = 177; +const char* const parserBuffer[] = { +"\xFF\x00\x01\x82\x81\x8E\x33\x82\x81\x0A\x06\x81\x88\x81\x81\x24\x38\x3B\x30\x63\x68\x05\x36\x35\x36\x34\x3B\x22\x78\x70\x32\x25\x33\x3B\x39\x35\x37\x6E\x7F\x62\x83\x92\x91\x05\x84\x00\x26\x8C\x8E\x92\x39\x32\x31\x3A\x3A\x65\x24\xA4\x97\x07\x94\x98\x87\x97\x6F\x50\x32\x2F\x30\x3D\x32\x38\x3A\x79\x44\x25\x23\x3C\x31\x32\x39\x30\x74\x1F\xA1\x92\x92\x93\x0B\x92\xA7\x01\xC2\x21\x33\x35\x33\x20\x91\x39\x74\x72\x35\x23\x34\x3F\x36\x39\x21\x61\x6C\x2C\x2C\xA2\x90\x0B\x92\xB3\x51\xE9\x2E\x26\xA9\x38\x8E\x8C\x8E\x1E\xA0\xA4\xBF\x7E\x07\x91\xBB\xB4\x6E\x64\x2E\xBB\x8D\x8A\xA7\xB9\xBB\x06\x80\xC2\x2C\x3F\x33\x33\x35\x29\x0F\xB0\xAD\x35\x84\x3F\xBE\xBA\x81\x42\x1B\xA1\x27\xC9\xC5\x33\xC4\x8B\x8E\x89\x80\xC0\xB2\xB3\xBC\xB8\xBF\x64\x9E\x27\x82\xD1\x80\xB0\xAC\x29\x1C\xF5\x2C\x34\x39\x26\x8A\x9E\x33\x10\xE5\x02\xA4\xA6\xA0\xA4\xD0\xA6\x0F\x27\xB9\xC5\xD8\x31\x34\x36\xBD\x19\xFC\xB1\xAB\xAC\xA1\x96\x82\xE3\x43\x3D\xFF\xD4\x29\x3D\x9F\xB8\xB4\x06\xD0\xC3\x25\xAD\x8B\xD9\xA3\xA3\x49\xF2\xA4\xAB\x07\x94\xED\xD2\xEA\x73\x4D\x16\xC2\x3E\x9B\xB8\x0B\x93\xE7\xA5\xEF\x2F\x2D\x98\xEE\xAE\xCF\x7D\xDA\xCC\xB0\xA6\x84\xFA\xAA\xF6\x3E\xC8\x9E\xA8\xC8\xA6\xC8\xC7\xE7\x67\x42\x46\x54\x14\x61\x35\x14\x54\x7F\x8A\x7F\x74\x58\x7D\x03\x76\x79\x4F\x4E\x76\x29\x14\x1A\x4F\x08\xBE\x78\x67\x82\x4F\x42\x87\x55\x56\x5B\x5D\x52\x1D\x10\x72\x27\x15\x1F\x65\x8D\x64\x56\x07\x49\x27\xAA\x7E\x18\x56\x5A\x5C\x5E\x56\x75\xB5\x59\x74\x72\x4C\x0B\x46\x45\x8E\x55\x2B\x9C\x8E\x8A\x1C\xF0\x43\x73\x5D\x04\x27\x40\x9A\x89\x52\x6E\x35\x15\x19\x85\x24\xB3\x52\x07\x49\x4B\xAA\x7B\x4F\x4B\x6A\x47\x95\x65\x92\xDB\x5D\x72\x40\x8C\xD8\x77\x62\x4F\x6E\x06\x5C\x92\x50\x1B\x65\x30\x48\x92\x82\x4C\x75\x83\x41\x8D\x42\x6C\x8D\x87\x8B\x43\x57\x76\x6E\x7C\x34\xA7\x48\x99\x98\x10\x52\x44\x46\x45\x3D\x9A\x94\x48\x97\x03\x5C\x95\x11\x91\x6D\x18\x9F\x9B\x8C\x24\x48\x07\x4A\xA1\x01\x7F\x93\x89\x12\x8A\x66\x78\x7A\x40\x8A\xAD\x1C\xA2\x65\xAD\x70\x42\x1C\x55\x5C\x7A\x93\x48\x60\x03\x40\x61\xA5\x7E\x62\x20\x9C\x72\x73\x64\x50\x73\x40\x74\x13\x4C\x62\xA2\x8C\x73\x5A\x07\x4A\xAB\x89\x99\x43\x50\x4C\x64\x23\xA5\x57\x54\x17\x41\x7F\x64\x9C\x24\x4A\x07\x4A\xAF\xB1\xAF\x51\x7C\xA1\x23\x4C\x82\x40\x7D\x79\xA0\x43\x9B\x85\x4C\x4D\x96\x42\xB3\x46\x04\x66\x6E\x1B\x67\x09\xB4\xB1\x59\x01\x81\x46\x13\x7B\x75\x8B\xB5\x88\x53\xA6\x82\x40\x77\xB6\x72\x2D\x18\x52\xB5\x00\x89\x43\xB9\x1D\x6E\x19\xA0\x48\x88\x22\x94\x93\x7D\x86\xDA\xAC\xBE\xBA\x1B\xAB\x9A\xA2\x4A\xB3\x03\x50\xB6\xBE\x8C\xE8\xA4\x5C\x03\x49\x03\xF5\xBD\xBA\x8C\xB6\xB3\x5D\x03\x49\x0B\xC1\x47\x13\x1B\x5D\x5E\xB3\x5D\xC1\x06\x54\xC9\x12\x19\x01\xCC\x5E\x76\x41\x1B\xD7\xC2\xC4\x59\x7C\x82\x4C\x95\x6B\x66\x3E\x49\xC6\x4C\x42\x86\x49\xC9\xA5\x65\x27\x16\xCA\xAE\xC3\x8A\xCC\xC2\x40\x4C\x21\x97\xC8\x49\x1B\xC3\x4B\xC5\xCD\x74\x16\x16\x51\x1A\x61\x21\xA1\x4C\x59\x29\xC3\x49\xC8\x13\x69\x16\xA1\x5B\xCD\x23\x47\x07\x4A\xD3\x01\x4D\x11\x18\x1C\x09\xE5\xA9\xB4\x00\xE2\x6D\x14\x78\x8F\x30\xFE\x88\x85\x42\xF4\x4D\x19\x18\x1E\x6A\x66\x69\xAE\xB0\x5E\xCC\x56\x03\x49\x6B\xD1\xDF\x18\x19\xAA\x43\xD3\xBC\xD8\x02\x4D\x1F\xD9\xDC\x55\x1E\x44\xB6\x11\x47\x67\x12\xBF\x96\xBA\x75\xD7\xDC\x98\x79\xEA\x57\x1B\xA4\x6D\x33\x56\x4E\x41\x8B\xF6\xD0\xDC\xE1\x7A\xE7\x1E\x11\x18\x8B\x7C\xD1\x1A\xDF\x64\x80\xE9\x40\x97\x8E\xF8\xD1\xE4\x81\x74\x28\x13\x5F\x06\x27\x64\xEE\xDB\xE3\x65\x05\xE4\xB7\x15\xBE\x64\x10\x5A\x1C\x64\x16\xE8\xE4\xB3\x32\x69\x76\x42\xED\x93\xCB\x63\x1C\x1C\xB1\x79\xBC\xAF\x48\xFC\x82\x4E\xB2\x13\x65\x37\x13\x77\x54\x73\x0C\xD2\x49\x8A\x06\x4C\xF4\xF2\xF1\x5E\x6F\x10\x96\x1B\x65\x0A\xFF\x3C\xF3\x03\x4E\xF5\xF0\xCB\x72\x30\x63\x19\xF5\x5D\xFA\xBF\x3C\xC5\x03\x54\xCE\x12\x6A\x45\x42\xD5\xD5\xB3\x4C\x82\x4F\x12\x18\x54\x72\x16\x1D\xD0\x60\x88\xD8\x57\xFA\x28\xC1\x9E\xF8\xFC\x3E\x54\x46\xF7\xE2\x03\x2B\x73\x13\x30\x7E\x27\x32\x24\x0C\x09\x94\x62\x0C\x19\x61\x06\x7A\x33\x47\x26\x7D\x04\x9B\x20\x19\x39\x70\x7C\xB4\x62\x7C\x53\x02\x20\x32\x4E\x06\x85\x0C\x33\x11\x4D\x56\xCD\x32\x6E\x4C\x46\x51\x20\xFA\x3A\x24\x27\x3E\x20\x2A\xEF\x57\x5F\x1E\x00\x82\x23\x71\x52\x01\x0D\x1A\x54\x28\x23\xEF\x70\x0A\x46\x1F\x78\x35\xE0\x01\x21\x86\x6A\x55\x82\x38\x17\x8F\x30\x0F\xE1\x07\x0E", +"\x28\x2F\x0A\x2D\x96\x58\x7C\x49\x24\x80\x00\xFA\x28\x35\x64\x1B\x2D\x5F\x0F\xBB\x5C\x85\x86\x46\x26\x8A\x4F\x85\x82\x14\xCA\x83\x25\x90\x41\x24\x4B\xA8\x34\x0D\x1D\x72\x0E\x0D\x1C\xB5\x77\x51\x01\x33\x09\x98\x54\x0C\x22\x22\x55\x59\x7C\xBF\x62\x25\xD1\x02\x29\x65\x29\x28\x0E\x28\x06\x86\x88\x12\xBE\x2C\x8A\x6C\x6A\x5A\x20\x15\x4B\x87\x5C\x40\x56\x20\x42\x95\x45\x35\x70\x0F\x26\xA3\x09\x26\x77\x43\xAE\x0E\x0E\x6F\x0B\x0E\x94\x7D\x3F\x6F\x99\x35\x20\x90\x95\x32\x69\x44\x51\x42\x90\xB2\x0E\x82\x21\x98\x9D\x3E\x26\xBD\x34\x7A\x33\x8B\x8C\x5E\x00\x15\x43\x14\x77\x09\x69\x88\x30\x5B\x44\x99\x7B\x4F\x0E\xA9\x95\x33\x55\xAD\x90\x0D\xA6\x22\x84\x49\x36\x73\x21\x46\xB5\x94\x95\x74\x11\x22\x29\xA3\x26\x39\x81\x06\x3B\x98\x7E\x91\x38\x26\xAC\x24\x5A\xEB\x73\x89\x20\x75\x9A\x44\x1D\x1D\x9C\x28\xF2\x42\x24\x62\x88\x2D\x44\x1D\x59\x6B\x6B\x41\xBF\x50\x90\xC0\x91\x21\x2E\xF3\x2E\x8A\x00\x1C\x4E\x96\xC1\x88\x0C\x32\xF4\x22\x88\x00\x14\x0D\x37\xC9\x70\x8C\x0B\xD8\x72\x20\xE6\x54\x0C\x27\x51\x15\x0D\x58\x69\x0E\x82\x03\x96\x79\x5C\x01\x30\x3B\x3D\xF0\x09\x9F\x7D\xBD\x98\x84\xA4\x55\x98\xC1\x02\x24\x0A\x39\x39\x0B\x9D\x04\x07\x25\x44\x81\x2D\x8F\x7F\x1F\x90\x00\x35\x56\x56\xD9\x06\x76\x7A\x58\x46\x26\xA3\xB6\x4F\x08\xC6\x72\x96\x7A\x5E\x82\x26\x76\x21\xA6\x0E\xAD\x0D\x82\x4E\x86\xA1\x84\x8D\x58\x3C\xA2\x3C\xE4\x93\x97\x2A\x2B\x2E\xA1\xD6\x6C\x88\x7D\x3E\x6C\x24\xFA\x72\x35\x4D\x31\x42\x7F\x33\x80\x09\x64\x9E\x80\x6A\x68\xEB\x97\xA1\x8D\x56\x09\x0D\x9F\x3A\x9C\x0D\x43\x05\x64\x35\xE7\x8C\x90\x81\x0C\xAE\xA9\x61\x31\xAB\x14\xB1\x6E\x93\x96\x81\x27\xAA\x62\x99\xA8\x55\x53\xAB\x96\x34\x80\x00\xAC\x4F\xA3\x08\x0D\xB3\xAF\x6B\xFA\x16\xAD\xA9\x61\xB0\xAB\x81\x53\x41\x97\x4D\x6D\x9F\x0A\xCA\x33\x91\x82\x34\x74\x24\x7F\x1E\xAE\x46\x02\x2D\x23\x43\x11\x29\x54\x3C\x72\x9D\x00\x27\x28\xB1\x40\x65\x07\x4F\x6F\x71\x49\x21\x35\x42\xB1\x9D\x05\xB7\x6C\x20\xA0\x20\x51\x06\x38\xB2\x19\x7F\x52\x7D\x62\x82\x26\x38\x82\xAC\x26\x4B\x30\x28\xB3\x81\x18\xB3\x0C\xFD\x27\x0E\x57\x79\x03\x2E\xCF\x81\x20\xB4\x2B\x2D\x27\x4B\x65\x03\xA2\x83\x35\xB3\x2D\x8B\x2D\xB7\x49\x30\xB9\x2A\xD9\xB0\x22\xB1\x06\x20\xBB\xFC\x6C\x06\x48\xC5\x57\x97\x26\x5D\x27\x85\x7B\x2A\x80\xA9\x2C\x60\x24\x90\x03\x24\x90\x52\x3D\xB3\xB4\x8E\x06\xB9\x21\x8B\x61\x08\x4E\x4A\xB9\x85\xA0\x0D\xBB\x50\x39\x62\x23\xC6\x34\x3D\x22\x6E\xA5\x3C\x2C\x2E\x81\x21\x76\xDB\xBB\x27\xE5\x9E\xBC\x36\xCE\xAE\x0D\x78\x81\x23\xBC\x90\x1E\x87\x0C\x38\x58\x2B\x75\x8C\x71\xB0\xF6\xA8\x87\x27\xEF\xAE\x4E\x8C\x56\x83\x20\x2B\xA3\x0E\xBE\x69\x07\x0F\xFB\x71\x74\x23\xFD\x81\x85\xBF\xC9\xAD\xBD\x77\xAB\x86\xA5\x80\x36\x75\x0C\x19\x21\x0D\x5E\x06\x8B\x85\x39\x0E\xC7\x85\x10\xCF\x43\x7F\xCC\xB0\xBF\x41\x50\xBA\x20\x84\x98\xC2\x05\xF1\x8D\x85\xE3\x80\x02\xBB\x11\xC3\xC5\x80\xC1\xA0\x25\xDA\x83\x27\xB6\x94\x7A\x97\x48\x69\xB0\x01\xF5\xB1\xC6\xBD\x2B\x96\xC6\x40\x35\xB0\x29\x84\xA3\x80\x95\x52\x34\x29\x7E\xD2\x9E\x2A\xCE\x2C\x0E\xB5\x28\x22\x22\x51\x71\x5C\x30\x0F\xED\xAD\x41\x90\x33\x29\x55\x1B\x4A\x9B\x26\xE1\x2C\x0D\x42\xC1\x20\x91\xA1\x89\x5C\x65\xB8\x2C\x2D\xD6\x40\xBB\x40\x40\xBE\x83\x4B\x4E\xB4\x24\x00\xA0\x00\x74\x42\x0A\x2C\x34\xF2\x9A\x00\x27\x38\xCD\x40\x3C\x25\xCD\x53\x50\x35\xCE\x38\xB2\x9D\xDB\x06\x23\xD0\x4C\x60\x24\x0C\x99\x21\x33\x9F\xF9\x26\x5B\xE0\x41\x26\x59\x2A\xDA\xC3\x84\x40\x3B\xC4\x16\x98\x81\x20\x82\x2A\x2C\xA5\x96\xBE\x0D\x13\xC1\x21\xC5\x6C\xAC\x2B\xA5\x80\x02\x30\xC2\x06\x36\x5B\xA5\xA2\x20\x66\x95\x27\x81\xA0\x65\x0B\x2C\x64\x23\xD5\xA9\x85\x34\x32\x4A\x8C\x36\xD3\x00\x04\x90\x56\x36\xD6\x22\x2B\xE2\xD5\x9D\x4E\xD6\x58\x94\xC6\x33\xCA\x58\xBD\xD1\xD1\x9D\x42\x43\x97\xD6\x59\xD5\x80\x1A\xB4\xB3\x2C\xC4\x36\x41\x52\xD6\x6C\xD4\x33\x0A\x35\xAC\x2E\x35\xF7\x3D\x7F\xBA\x19\x78\xD2\xBA\xB1\xB5\xBA\xAF\xB2\x22\xDB\x81\x14\xD8\x57\xD6\xD8\xD8\xF7\x5E\x7F\xA7\x12\xF2\x45\xD9\x00\x18\xB2\x18\x5A\xC5\xA3\x72\xC2\x27\xDC\xA7\x29\x37\x6A\x6B\xDC\xDA\x77\xCA\x2B\xBE\x00\x03\xBC\x78\x66\xB2\x0F\xB9\x36\xD9\x20\xF8\xD4\x0D\xBA\xFB\xDA\xDA\x76\xEB\x80\xE0\x1B\x6F\xD6\x85\x74\x05\xDF\xD1\x0A\xD9\xDF\xD7\xCC\xE2\xA5\x0E\xED\xDA\xA5\x15\xC0\x00\x17\xD9\xC3\x86\xE4\x0D\xC2\x83\xD6\xE5\x34\xE8\xDA\xDD\xB6\x9B\xED\xDE\x01", +"\xCA\x29\xCC\x00\x18\xC5\x6E\xA0\x63\x97\xE4\x2D\x76\x5A\x30\xF2\xE6\x8E\xA2\x25\x9C\x2E\x76\xE7\x37\xD6\x43\xD3\x40\x03\xDC\x77\x28\xAF\xCC\x98\xBB\xA2\x42\x72\x08\xA4\xB6\x89\x82\x20\xB7\x3B\xFF\x1F\xB0\xCA\xED\x74\x5B\x42\xEA\x20\x44\xF8\x8C\x5F\xA3\x21\xCE\xE9\x20\x3B\x85\xDF\xD2\xC9\xB8\xB3\xB3\xDC\x38\xD7\x6F\x78\xD5\x3D\xE0\x48\x53\xE1\x21\x79\xD4\x2E\x56\x65\xFC\xEB\xD9\xDF\xEA\xEC\xF9\x96\x49\x20\xE4\xA1\x3F\x78\x67\xB0\x5D\xB9\xC8\x7B\x85\x3D\xE2\x23\x81\xB9\x4D\xCA\x39\x15\xA5\xEB\x02\x54\xEE\xBF\xA0\x26\x9B\x80\x14\x63\x42\x8B\xEB\x45\x9F\xE2\x59\xF1\xBF\xF5\xE9\xE7\x02\x2B\x0E\xA6\x93\xF1\xA1\xCA\xE9\xE9\xF2\x98\xE4\x21\x8E\xF3\x20\xE2\xCF\xFA\xEA\x6B\x3E\x21\xF4\x00\x1A\xF9\x2F\x45\xB7\x72\x43\xF8\x2E\x3C\xD7\x15\xDE\xD0\x00\x10\xD2\xE4\x93\xC5\xA6\x59\xF7\x3D\x3C\xFD\x33\xF4\xD3\xAA\xF0\xEB\x5C\x3A\xA0\xF7\xDE\xDE\x46\x5B\x6C\xE0\x01\xB1\xA4\x41\xEF\xA6\x28\x94\xF7\xF9\x27\xF8\x5D\x96\x27\xEB\x80\x03\xD4\x27\x14\x83\xFB\xF3\xEB\x36\xF9\xFD\x13\xFC\x0E\x50\x66\x21\xF8\xF3\x72\x0F\xEC\xD6\x6F\x8F\xEA\x24\x42\x81\x7A\xA3\xE3\xE4\xFB\xD3\xAF\x47\xEE\xF8\xDD\x69\xF0\x42\x09\x54\x47\xFB\x43\xA9\x65\xA4\xA3\xEB\x9C\xE2\xF4\xFF\x0D\x11\x23\x21\x72\x0E\x2D\xC1\x73\x7A\x57\x67\x2C\x1A\x27\x42\x01\x87\x7F\xBC\x64\x07\xEE\x7F\x7D\xDA\x73\x7F\x00\x0B\x64\x85\x7F\x4A\x24\x23\x00\x27\x18\x81\x01\x12\x49\xAC\x57\x80\x25\x4A\x21\x84\x7B\x26\x1F\x21\x22\xC6\x64\x07\x6A\x62\x10\xC2\x51\x16\xC5\x56\x22\x28\x20\x82\x6A\x2B\x23\x2B\x49\x7C\xCB\x75\x65\x73\x14\x4F\x01\x1C\x3C\x14\x82\x82\x60\x7F\x4D\x01\x13\x5D\xA2\x54\x76\x35\x8D\x82\x2A\x2F\x82\x1E\x24\x61\x66\x5E\x76\x5B\x61\x82\x3B\x2E\x64\xCD\x77\x3D\x42\x83\x81\x5C\x6A\x83\x75\x75\x7A\x78\x73\x70\x7B\x75\x70\x2C\x89\x10\x38\x81\x85\x30\x85\x77\x81\x78\x77\x5C\x8E\x21\x15\x56\x83\x00\x0B\x85\x4A\x85\x84\x97\x7E\x74\xA2\x73\x73\x4C\x14\x86\x66\x84\x84\x6C\x21\x79\x0F\x8D\x80\x73\x1A\x54\x2E\x8C\x64\xBF\x74\x45\x32\x84\x82\xCC\x74\x7A\x77\x70\x00\x3B\x89\x10\xE0\x64\x5D\x40\x85\x25\x09\x1B\x31\x0F\x7F\x87\x79\x74\x70\x7E\x87\x88\x57\x29\x86\x09\x1A\x73\x34\x5B\x39\x8F\x80\x26\x62\x2F\x7D\x61\x7B\x58\xA1\x6F\x58\x80\x51\x10\x69\x28\x87\x81\x85\x48\x62\x74\x88\x30\x1D\x84\x76\x8E\x89\x6D\x45\x78\x89\x8E\x88\x55\x88\x3C\x8C\x8D\x55\x90\x5F\x88\x70\x82\x07\x41\x6A\x86\x00\x02\x7C\xB0\x8D\x89\x80\x89\x8A\x52\x82\x87\x49\x71\x10\xEF\x73\x71\x75\x8F\x57\x42\x13\x58\x76\x2C\x18\x69\x69\x58\x02\x1C\x58\x75\x52\x12\xA7\x8B\x8B\xC6\x84\x59\xD6\x21\x7E\x03\x11\x7E\x77\x49\x17\x60\x28\x85\x3A\x44\x89\x89\x20\x28\xA1\x81\x5D\xA3\x8F\x83\xA5\x83\x89\x5D\x20\x29\xDE\x83\x85\x8A\x86\x85\xA8\x7A\x8D\x9A\x35\x8E\xDD\x83\x22\x2B\x47\x82\x01\x10\x5C\x49\x36\x19\x4D\x8F\x85\x00\x01\x29\xB5\x81\x89\x99\x7B\x79\x34\x7C\x8D\xF9\x87\x8E\xA0\x76\x8B\xB8\x8C\x14\xF0\x68\x59\x91\x28\x38\x99\x8A\x7C\x63\x73\x8E\x64\x17\x90\xE6\x8B\x28\x8A\x14\x60\x02\x16\x45\x7B\x47\x29\xB3\x2A\x14\x4D\x80\x91\xEF\x82\x29\x8A\x1A\x7A\xAC\x78\x68\x0F\x97\x28\x11\x9E\x91\x96\x15\x80\x6C\x82\x13\x1C\x91\x90\x12\x96\x19\xD5\x70\x00\x83\x60\x28\xDD\x44\x16\x1F\x76\x3B\x09\x9A\x18\xDC\x38\x29\x32\x28\x92\x51\x72\x6B\x25\x90\x2A\xA2\x21\x42\xD4\x82\x10\xE1\x72\x71\x95\x42\x77\xE8\x79\x8F\x8D\x51\x83\xBF\x8A\x7C\x7C\x84\x83\xE7\x76\x66\x4A\x9A\x2A\x75\x7B\x90\x3E\x8E\x5B\xD6\x51\x95\x7E\x69\x28\x4B\x98\x8E\xAC\x80\x00\x8B\x87\x85\x9C\x72\x67\x90\x2D\x95\x03\x9C\x8F\x6B\x81\x75\x1E\x53\x10\x1E\x5E\x16\xB3\x26\x40\x1A\x58\x2B\x8D\x6D\x3E\x9A\x8C\x3B\x23\x7D\x51\xAF\x20\x29\xB2\x2C\x15\x70\x91\x42\x66\x36\x2D\x0B\x9A\x62\x9C\x6D\x2A\x79\x91\x2C\x6F\x9C\x74\x7F\x92\x4F\x2B\x9C\x22\xA9\x5D\x81\x73\x3E\x56\xC1\x2C\x69\xDE\x21\x98\x9B\x84\x12\xB5\x70\x2D\xD2\x2E\x46\xC9\x89\x10\x29\x84\x5C\x51\x78\x78\xDA\x2C\x2D\xC2\x48\x89\x3C\x80\x96\x6F\x02\x16\x19\x9C\x62\xA0\x90\x00\xE4\x25\x04\xDD\x2F\x7D\xC9\x74\x06\x4D\x59\x9A\x2C\x4B\x9A\xAD\x9F\x9A\x0D\x89\x7F\xCB\x88\x7B\x06\x4B\x4E\xB6\x92\x9A\xEA\x4F\x7D\x3C\x93\x96\xE3\x20\x9C\xC8\x7D\x94\xC1\x87\x94\xC9\x4B\x95\xAC\x9E\x15\xE6\x25\x59\x54\x47\x99\xBB\x96\x97\xB9\x75\x99\x48\x92\x95\xE4\x2F\x9C\x9B\x91\x5C\x02\x13\x5C\x2B\x8D\x77\x49\x96\x04\xD0\x6E\x06\x16\x87\x6B\xA5\x97\x95\xE2\x64\x9C", +"\x02\x12\x9E\x07\x3A\x14\xE5\x96\x11\xC3\x9A\x95\x94\x76\x30\xF7\x2F\x9E\x74\x0A\x7A\x45\x61\x75\xFE\x7C\x9A\xE3\x9C\x94\x09\x14\x6C\x6E\x00\x12\x79\x0D\x06\x49\x3E\x98\x47\x62\x81\xEC\x97\x2F\xFE\x97\x1C\x52\x6F\x94\xC7\x6E\x81\x4D\x4B\x9E\xFD\x95\x95\xE7\x9D\x90\x59\x9F\x98\x58\x64\x9F\x32\x2B\x8A\x1C\x32\x78\xEA\x83\x93\x18\xA8\x80\x1A\xAA\x14\xFB\x86\x5B\x4F\x76\x80\x21\xAF\x81\x23\xA0\x12\xDF\x88\x62\x02\x1B\x11\x62\x44\x46\x15\x5B\x9F\x09\xAB\xA1\x75\x73\x87\xF0\x7A\x24\x74\x9C\x9F\xED\x90\x12\xCC\x64\x92\x01\x1B\x59\x3D\xAC\x42\x8D\x70\x00\x14\x35\xA3\x4A\x16\x2B\x7B\x84\x65\x0F\xAA\x50\x09\x17\xA4\xE3\x96\x75\x6C\x3F\xA2\x2A\x72\x33\x09\x16\x45\x0F\x31\x31\xDF\x72\x8F\x00\x00\x5C\xE9\x3F\x6A\x13\x3B\x50\x01\x17\x31\xC2\x6D\x94\x83\x72\x9B\xAC\x22\x30\x62\xA0\x00\x64\xA2\x4F\x54\x80\x00\xB0\x1C\x06\x54\x11\x19\x1A\x61\x11\x61\xAF\xA4\x02\x1D\xA6\x95\x6B\x90\x1C\x25\x06\x74\xAD\x2E\xA2\x36\x88\x1D\xA3\xA6\x66\x03\x99\xA5\x92\x98\x54\x4D\x88\x83\xAC\xA6\x85\xAF\x7D\x6F\xA1\xA7\x73\xA7\x14\x80\xAA\xA8\x3A\x39\xA7\x8D\xAD\x80\xF1\x9A\x31\x7F\x8E\x31\xA4\x92\x88\x02\x1D\xA7\x7F\xA6\xA7\x82\xA5\xA9\x84\xA4\x80\xB6\x89\x9F\xE4\x8D\x27\x79\xAE\x06\x50\x40\x98\x87\xA6\x9D\x3C\x73\x4B\x24\x3F\x32\x95\x68\x9F\x64\x64\x34\xFA\x33\xA6\xAE\x1E\x32\x79\x83\x2C\x5C\xAD\x99\xDF\x92\x13\x14\x91\x10\x56\x4C\x33\xAE\xAE\xA9\x75\x93\x98\x64\x13\xAC\x00\x05\xAC\x36\x32\x4F\xC9\x74\x7E\x47\x50\x26\x4D\x8F\xA6\x3C\x36\x54\x3E\x59\xA9\x32\x16\xAD\x61\x28\xAD\x42\x3F\xAB\xDD\x9A\x82\x51\x7A\x9B\x01\x18\x34\x4A\x3C\x06\xDB\x9B\x66\xE1\xAE\x99\x73\x13\x94\x01\x11\x7E\x52\x34\x35\x21\x4A\x81\x06\x14\xAF\x1C\x8D\xAE\x4F\x35\x37\x53\x36\x2B\xE0\xA1\x10\xDE\x91\x75\xEE\xA0\x00\xF0\xAB\xAF\x21\x4F\xA6\x77\x0C\x12\x0F\x12\x06\xBE\x15\xA0\xEA\x91\x35\x57\x88\x73\x04\x98\xA2\x32\x1B\x9A\x04\x71\x74\x53\xA1\x10\x45\x7D\x8C\xFF\x0B\x9F\x62\x34\x36\x6E\x09\x98\xB4\x7B\xA3\xFB\x75\x9D\x95\x61\x81\x90\x98\x35\x63\x35\x36\x72\x92\x4F\x94\x95\xB2\x10\xA1\x36\x29\xBF\xB1\x2B\xB5\xAB\xA7\xA7\xAB\x6A\x37\xB1\x58\x33\x38\x65\x05\xA4\x8F\x75\x77\x4D\x8F\x92\x83\x6D\x39\x60\x2B\x90\x6D\x0A\xB3\x15\x50\xB4\x82\x38\x3A\xDA\xA4\x12\x48\xB7\x3A\x71\x3D\xAF\x00\x0C\x3B\xA1\x37\x8F\xB3\x42\xB4\xA9\x31\x39\x88\x39\x7C\x66\x0D\x37\x7D\x88\x5E\x2E\x66\xB5\xAA\x32\x39\x39\x62\x3B\x24\x2B\xB4\x5D\x45\xB5\x3A\xB1\xB6\xA0\x38\x06\x50\xB5\x8F\x6D\x0D\x84\x35\x92\x10\x14\x4B\x3B\x2D\x74\x63\x9D\x65\xA1\xA4\x87\xA1\x54\x5F\x7A\x01\x13\xB7\xBC\x3F\x3D\x1C\xA4\xAA\x60\x9F\xA1\x7C\x7B\xB7\xBD\x42\xB7\x39\x64\xB7\x80\xB5\x77\x3C\xB2\x10\x90\x7E\x72\x57\x1E\x7A\x87\xBD\xB7\x89\xBF\xB7\xED\x60\xB9\x6E\x06\xB6\xFB\x2B\xA3\xCF\x38\x76\xF1\x45\x69\x4B\xA5\x82\x4D\x82\x9D\x7D\xB5\x3C\x9E\xB0\xB1\x68\x90\x00\xA8\xA9\x85\xCD\x32\xB7\xA6\xB1\x3D\xD3\x3B\x55\xC3\x14\xBA\x00\x03\xB2\xFE\x40\xAB\x4E\x8A\x85\xAE\xB0\x3D\x4F\x24\x24\xB2\xBF\x72\x11\xB9\x92\x24\x1E\x86\xBB\xB6\x15\xBD\xB1\x25\x65\xAF\x9F\x02\x19\x9C\x1A\xB4\xBC\xA5\xB7\x07\xFC\x6F\x3D\xD6\x2D\xB8\x01\x1F\xB8\x76\xBD\x84\xCE\xB0\x00\xCF\x31\xBD\xBF\xB5\x63\x35\xB6\x64\x24\x14\xBD\xDA\xB8\x3E\x3E\x56\x2B\x01\xB5\x94\x60\x2A\x9C\xFF\x04\xBB\x0B\x6D\x3F\x3E\x56\x3F\x14\x72\x94\xF9\xAB\x58\xE9\xBA\xB1\xE4\xA0\x00\xED\xB2\x3F\xDD\xBE\x06\x4D\xB5\xBB\x8D\x5D\x84\xF7\xB9\xBF\xFE\x3C\xB2\xAF\xAE\xB2\x4C\x11\xC0\xFC\x3A\xBF\xA8\xB6\xA2\x69\x9F\x23\xB9\xA8\xBF\x09\xC3\xC0\x95\x6F\xA6\x6F\x01\xC1\x65\x05\x51\x08\xCC\x60\xFB\xBD\xBF\x19\xBB\x75\x22\x1C\x63\x02\x41\x41\x06\x48\x40\x5A\x3B\x40\x0B\xC7\x63\x02\x12\x06\x6F\x36\xA0\x24\x1F\x8C\x03\x42\x80\x06\x44\x41\x27\xC3\x64\x27\xA2\xBC\x76\x5A\x19\x02\x1B\x41\x13\x2E\x41\xD4\x3C\x74\x9A\xBB\xB1\xA8\x4C\x5D\x00\x6D\xA2\x9F\x61\x8E\x58\x9D\x84\xFB\x92\xC4\x24\x68\xB9\x6F\xA1\x96\xEB\x86\xB2\x19\xA0\x00\x4A\xC3\x63\xF1\x5D\xBF\x2E\x3E\x10\x85\xB7\x4A\x12\x83\xC5\x25\xA8\xC2\x0D\xCF\xB2\x39\xC2\x61\x43\xC5\x77\xFD\xB4\x15\x58\xCC\x8E\x5A\xC7\xB2\x5C\xC0\x89\x0C\xCA\xBA\x36\xB7\xA0\x6A\xC2\xC6\x4B\xC6\xB7\xF7\xBF\xAF\xC9\x1A\x61\x2E\x3A\x17\x8D\x5F\x61\xEA\x52\x10\x31\x43\x43\xE0\x36\x43\x38\x4D\xA9\xA2\x89\xAC\x89\xAF\x8F\xEE\x80\x00\x3D\x4E\x32\xE9\xA8\x82\x29\xCD\x32\x6A\x19\xAA\x22\x3E\xC7\x78", +"\xCB\xBF\xCC\xA6\x45\xE4\x17\x06\x6A\x12\x04\xD2\x39\x17\x6C\x12\xC9\x5F\x44\xC9\x3E\x46\x2D\xF4\xA3\x10\xF4\xAC\x6A\xA0\xC6\x4E\xA2\xCC\xC8\x6E\xAF\x87\xAC\x6C\xC9\xEC\x2B\x40\x0E\x58\x6C\x19\x44\xC9\x45\x47\x44\xDA\x66\xBE\xF3\xB5\xBB\xF5\xBE\xC1\x40\xC2\x81\x59\x41\x45\xD2\xB2\x4F\x3F\xC7\xC9\x7E\xCD\x41\x5A\x4F\x3D\xB6\x2F\xC3\xF8\x81\x46\x63\x45\x46\x84\xC0\x8E\x86\xCC\x55\x4C\x11\xB7\x69\x4B\x46\x6D\x42\x53\x7B\xA5\x9A\x07\x68\x9A\xF7\x22\xB9\x27\x50\x48\xD8\xC1\x53\xCD\x42\x4F\xE7\xBB\x8C\xBD\xC1\x7F\xFF\x06\xCD\xA9\x43\xCE\x9A\x94\xCC\xA7\xAD\x46\x0E\xC9\x10\x75\x47\x47\x12\x4A\x47\xB9\xC2\xBF\x09\x18\xBE\xC2\x82\x9F\x9D\x79\x46\x95\x1B\xA0\xC6\x4D\xA0\x4C\xA4\x07\x4D\x8B\x9A\x81\x4C\xC6\x5E\xC7\x8B\x12\xB6\x76\x49\x99\xD0\xBE\x8A\xBC\xC0\x80\x81\x64\x1B\x90\x8E\x49\x48\x0E\x8D\x94\x33\x8D\xA4\x32\x16\xD1\x95\x18\x48\x2F\x1F\xC3\xEC\xCE\x48\x90\x42\x49\xC7\x92\xD1\x4E\x95\xD0\x70\xB6\x56\x24\xD1\x49\xEC\x75\xB6\xC1\xB1\x75\x23\xDF\xD1\x8F\x4E\xD2\xA6\xA9\xBA\xAB\xBC\x14\x20\xC1\x4A\x30\x13\x4A\x9C\x44\xA1\xC8\xAC\x90\x79\xBD\x84\x3B\xD0\xD0\xA2\x45\x27\x3F\xD1\x79\x4D\xC4\xB8\x68\xCB\x63\x2E\x65\x21\x3E\xD4\x3D\x46\x85\x55\x75\x92\x69\x1C\x6E\xB3\x7C\xCD\x63\x3C\xD5\x06\x51\xD7\xB9\x76\xBD\xBF\x6A\x18\xD1\x44\xDF\xD4\x99\x48\xD4\x52\xDA\xD0\x34\xCF\xC5\x3A\xD4\xD6\x47\xDB\x49\x67\xD1\x79\x65\xC5\x19\x48\xC8\x4A\xAA\x41\x4E\x68\x06\x9F\xCC\xC3\x4B\x75\xD7\x4B\xB9\x41\xBA\x5D\xBB\x8D\x89\xCB\xD7\xE9\x49\x4B\x79\xD0\x90\x82\xD2\x4E\x5A\x68\xA3\xFD\xC5\xCD\x2C\xDF\x4B\xB7\x4E\x2D\xE2\xB8\x5A\x91\xA5\xA7\x68\x0A\xB7\x65\x54\xD5\xB4\x4D\x1F\xE8\x43\x9A\x98\xAF\xBD\x9F\x97\x35\xD9\x4A\xCD\x9C\x60\xB5\xFF\xA3\xCF\x2A\x3B\x4C\x1D\x24\xC4\xB9\x66\xC4\xE9\x98\xAB\xF4\xC8\xDA\x5C\x11\xB8\xE2\x5E\xA1\xAE\x82\x96\xAE\xD7\xDA\x00\xDA\x4D\x2B\x47\xCE\x01\x1B\x18\xEB\x80\xC0\x0F\xC9\x4D\xA9\xD8\xD6\x62\x65\xC3\x51\x72\xBE\xC2\xDC\x15\x04\x76\x95\x16\xAD\x84\xC8\xD2\x4D\x04\x7F\xC3\xCF\xDA\x4D\xD1\xDE\xD9\xDE\x41\xD4\x9B\xD8\x4B\x5A\x6D\xB2\xCA\xAC\x14\x16\xD6\xD7\x7D\xD8\x9C\x14\xD0\xD8\xAA\xA9\x46\x76\xD0\xD9\x6B\xA2\xD9\x7E\xA2\xA9\x11\x16\xD9\x67\xB6\xD8\xE7\xDF\x7D\xC6\xC5\xBD\x1D\x45\x20\xAB\x11\xAA\x81\xA4\xDE\x93\xC6\xDE\x8F\xD8\x7F\x0F\xC6\xBB\x64\x0B\x4E\xF8\x89\xDD\x86\xA1\xD4\x88\xA4\xCD\x32\x19\xBD\x03\x55\x50\x6C\x0C\x4F\x69\x07\xBB\x34\xB9\xBA\x05\x93\xB1\x57\x3B\xE0\x4F\x5E\xE0\x7D\x9D\x13\xD2\xDB\xA6\x0D\x5F\x50\xDF\x7E\x93\x78\x78\x14\x9C\xD9\xA3\x6A\xA8\xA7\x14\x5E\x50\xDE\x2B\x9A\x3C\xCF\x65\x1E\xE4\x87\x25\xE5\x31\x0C\x58\xE2\xC2\x91\xD3\x77\xA0\xE3\x27\xED\xE2\xF0\x74\xBB\x1A\x10\x31\x87\x99\x54\x7F\x51\x97\xE4\xCF\x46\xDB\xC6\xE0\xB8\xBF\x8C\x40\xEF\xCE\x95\x6B\x98\x59\x1D\x98\xC3\x81\x8B\x14\x5E\x97\xB8\x22\xDA\x54\x46\xAB\xE0\xB3\x12\x6B\x92\x10\x20\x51\x42\x22\x56\x2D\xC7\xA5\xC8\xB5\xB8\xBB\xEC\xC9\x52\x2B\x50\xCF\x38\xDF\xC6\x2D\xCF\xE3\x2F\x59\xCD\xE5\xC3\xE4\x5E\xE7\xE0\x69\x3C\x89\x67\x2E\x52\x3D\x10\x53\x48\xE0\x7C\xF1\xCA\x5F\xB9\x81\xE7\x4F\xE3\xE7\x6A\xE2\xE4\x76\xE5\xE6\x55\xE1\xAB\x00\x96\x53\x76\x65\x69\x7A\x66\x10\x87\xEC\x67\x88\xC5\xDE\x00\x04\xE8\x81\x65\x69\xBC\xD0\x00\xFF\x52\x69\x50\xC2\xA2\x67\x5F\x33\x3E\x5A\xDA\x83\x82\x8E\xEE\xD2\x7F\x27\xBE\xAD\x60\x22\xDB\xF4\x54\xDB\xE5\x56\xDB\x29\xA1\xA1\x5F\x58\xE9\x42\x3A\xE9\xD3\x9D\xDD\x70\xC1\xC5\xA0\xEE\xD5\xF1\x5F\xC3\xFB\x91\xEB\x5D\xC9\xD6\x6E\xC1\xE8\xFF\x07\xBF\xB1\xE8\x6A\x40\xA0\x00\xD2\xAE\x53\x4D\xEA\x8B\x68\x59\x55\x52\x50\xD4\x5E\xE8\x9E\x85\x85\x26\x7F\x55\xEC\x50\x57\xEC\x4A\xD9\x8E\xB5\xDF\xC4\x79\xEF\x40\x5F\x50\x57\x69\x50\xED\x98\xBC\xCE\x00\xE5\x72\xD5\xE0\x4A\xD7\xE8\x55\xCF\xE2\xEB\x83\x22\xD2\x66\x5E\xEC\x5A\x53\x97\x09\x17\x7B\xD4\x90\xE1\xAE\xE7\xE6\x4E\xE7\x56\xD8\xE2\x56\xE4\xEE\x6D\x78\xBC\xE9\xA6\x8D\xEC\xF3\xE2\x57\xF5\xEF\x6F\xD2\xE5\xEA\xD4\xEC\xEC\xF1\xE8\xEE\x63\x55\x77\xDC\xEC\x9B\x24\x78\xD5\xDF\xE8\x51\x6F\x52\xEE\x6A\x5D\xEF\xDE\xB2\xE1\x0D\xD3\x12\xEC\xC4\xF0\xFB\xB4\xBB\x00\xE9\x53\xA8\x46\xF1\xDE\x27\xBF\x00\xEB\x4E\x20\xE0\x00\x78\x5E\x1B\x2F\xDC\x18\xC9\x77\xA6\x49\x31\x44\x38\xC1\x10\x23\xF0\x26\x27\xDC\xA0\x13\xDE\xE2\x4C\x15\x07\x27\x1F\x08\x87\xE2\x10\x34\xF7\x12\x3A\xF7\x12\x73\x13\x17\x3B\xFC", +"\xF3\x3D\xFC\x14\x3F\xF9\x10\x41\xF2\xF4\x43\xF3\x10\x45\xF2\x13\xA5\xC2\x10\xF4\xA5\x04\x58\x00\x05\x37\xF2\x10\x87\xEF\x02\x5E\x0A\xF3\x73\x1B\xF4\x01\x14\xAF\x41\x04\x04\x44\x01\xF5\x01\x13\xF5\x2B\x01\x00\x40\xFC\x14\x58\xF0\x00\xF4\xA3\x05\x55\x02\x04\x62\xF9\x10\x6B\xF0\x00\x2D\x0E\xF5\x00\x07\xF5\x19\x85\x37\x55\x0C\x04\x70\xF3\xF5\x2A\x05\xF6\x72\xF9\x10\xF4\xA4\x04\x49\x06\x05\x77\xF2\x10\x2F\x0F\x02\x30\x7B\xF7\xF5\xA5\x37\x4F\x04\x04\x6D\xF3\x10\x6D\xF5\x02\x5C\xA3\x17\x50\xB5\x05\x4E\x09\x04\x4F\x0E\x04\x8B\xF2\x10\x6D\xF6\x02\x2F\x95\xE3\xE5\x39\xA7\x4E\x04\x05\x45\x02\x05\x53\x05\x04\x43\x04\x05\x94\xFE\x04\x81\xF1\x10\x2F\x0C\x07\x01\xB3\x17\xA9\xF0\x00\x4C\x05\x04\xAA\x7F\x02\x3C\x0F\x02\x3D\x00\x6F\xAE\xF9\x67\x02\x17\x04\xB2\xF6\x8B\x2F\x0E\x03\xB6\xF0\x65\xB9\xF9\x10\x87\xEC\x04\x54\x0F\xFA\xB4\xF8\x6B\xC3\xF8\xE8\xBB\xF7\xFC\xBA\xFA\xFA\x3E\x00\x70\xCB\xF3\x10\x87\xE5\x04\x51\x03\xFB\x3D\x06\xFB\x45\xA3\xFD\x52\xF2\xB7\xBD\xF9\xBA\x2F\x01\x02\xB6\xFC\xAC\x73\x1D\xBF\x41\x03\x05\x53\x09\x04\x47\x08\xFA\xCF\xF0\x00\xB6\xF3\x6A\x94\xA3\xDB\xDA\x21\x04\x49\x01\xFB\x44\x0F\x05\x54\x08\x04\x45\x0E\x04\xB3\xFF\x03\x2F\x0F\x03\xE5\x26\x4A\x57\x22\x81\x01\x05\x55\x01\x11\x13\x02\xA6\x7D\xF2\x5F\x03\x26\x01\x04\x52\x03\x12\x08\x7E\x3F\x01\xCE\x29\x65\x73\x23\x04\x4F\x00\x14\x05\x02\x5F\x04\x08\x05\x02\x26\x09\x04\x4D\x01\x12\x00\x7D\x52\x07\xF5\x7A\x00\x1D\x03\x54\x10\x7E\x32\x45\x0D\x4F\x04\x09\x15\x7D\xCB\x71\x10\x6D\x7A\x0E\x15\x3D\xBA\x28\xA5\x63\x7C\x0F\x85\x01\xAA\x82\xE5\x67\x09\x6D\x7B\x07\x0C\x22\x13\x8C\x99\x02\x13\x13\x0D\x02\x0C\x84\x05\x80\x01\xB6\x7C\x02\x1F\x3A\xE1\x66\x65\x57\x17\x09\x14\x02\x21\x8D\xF6\x2E\x03\x45\x37\x6E\x5E\x76\x02\xBB\x7F\x2F\x0D\x00\xD2\x01\x10\x19\x02\xC8\x7B\x0B\x24\x43\xF8\x73\xEA\x25\x0E\x0A\x83\x7D\x54\x82\x0A\x16\x82\x2C\x8D\xFE\x2F\x01\x17\x1C\x31\x50\x82\x9A\x78\x5F\x0B\x8E\x04\x5F\x02\x10\x16\x82\x43\x05\x08\x08\x7F\x3D\x08\x01\x63\x7B\xB6\x5F\x43\x43\x07\x0B\x98\x81\x37\x81\x04\x71\x80\xF2\x7D\x03\x19\x06\x0E\xA1\x5F\x35\x52\x05\xED\x80\x1F\x83\x02\x4B\x05\x08\x0E\x7E\xE2\x72\xF8\x28\x03\x95\x61\x08\x02\x85\xC0\x02\x10\x3D\x8E\x06\xF0\x81\x22\x8B\x84\xCC\x7A\xF5\x69\x00\xD3\x16\x10\x5C\x7F\xD7\x61\x2C\x4B\x80\x07\x82\x08\x20\x0C\x01\x02\x84\xD2\x28\x69\x54\x01\x0B\x17\x81\x2F\x06\x05\x4F\x01\x12\x04\x02\xAA\x38\x92\x12\x11\x0E\x06\x0A\xA2\x0B\x9B\x49\x85\xAB\x87\x09\x02\x02\x25\x04\xFA\x54\x01\xFF\x55\x60\x6A\x03\x56\x07\x39\xB8\x71\x6B\x6D\x24\x2E\x98\x80\x49\x07\xF3\x61\x7C\x23\x0D\x07\xC5\x01\xF2\x37\x48\xEC\x37\x03\x35\x85\x7F\x0B\x92\x47\x87\x17\x09\x86\x54\x05\xEC\x74\x56\x24\x20\x02\x53\x85\xF2\x36\x86\x55\x00\x1B\xAA\x3D\x3A\x08\x44\x21\x03\x34\x8B\x48\xD6\x86\x08\x2A\x81\x20\x04\x05\x50\x5A\x19\x19\x4C\x22\x03\x1A\xB7\x84\x55\x88\x01\xC4\x03\x13\x09\x7B\xB1\x7D\x7F\x64\x02\xE9\x12\x34\x23\x02\x3C\x9F\x43\xD6\x80\x01\x92\x03\x64\x87\x04\x71\x68\x33\x27\x03\x24\x06\x1B\x8D\x4A\x6B\x83\x04\x48\x01\x03\x8A\x3D\x11\x0E\x28\x25\x00\x85\x88\x0A\xF4\x86\x1B\x8F\x02\x29\x82\xF5\x2A\x61\xD3\x46\x02\x53\x87\x7C\x60\x00\x89\x81\x0B\x17\x03\x27\x02\x05\x77\x7D\x05\x8E\x02\x08\x80\x6A\x43\x3C\xAC\x07\x02\x7F\x87\x57\x41\x89\x23\x8D\x24\x9F\x03\x29\x08\x04\x4C\x02\x36\x8B\x5E\x68\x04\x0D\x28\x00\x97\x8B\xA8\x30\x88\x49\x97\x7F\x34\x8A\x0A\x37\x88\x60\x48\x06\x72\x01\x0A\x1C\x89\x82\x5E\x27\xB2\x88\x2C\x04\x12\xC3\x88\x00\x18\x03\x5E\x0A\x05\x08\x8A\xF9\x70\x12\xC5\x02\x48\x9F\x89\x54\x86\x09\x04\x02\xA7\x82\x69\x2B\x03\x39\x85\x4D\x4A\x8F\xFE\x64\x89\xD7\x7E\x15\x2C\x03\x54\x9D\x82\x55\x8F\x2A\xB2\x88\x27\x0A\x04\xCE\x89\x80\x54\x03\x2D\x03\x1A\xA2\x5F\xB0\x8F\x05\x4E\x01\xDD\x6C\x02\xC1\x38\x7D\x2E\x00\xB9\x8B\xA6\x74\x89\xFE\x69\x02\x53\x00\x3F\x70\x27\x17\x0C\x17\xA6\x71\x5A\x91\x89\xF7\x7C\x0A\x12\x02\x03\x88\x9F\x5A\x09\x19\x10\x01\x1E\x8B\x66\x01\x08\xBA\x8C\x0C\xCC\x03\xE8\x6E\x87\x61\x0C\x2A\x31\x01\xB3\x81\x70\x02\x08\x5D\x91\x7D\xD9\x83\xEE\x41\x08\x4B\x42\x03\x5F\x89\x50\x74\x8B\xC9\x87\xF5\x6A\x0B\x19\x01\x19\xD7\x52\x67\x96\x8A\x88\x8F\x0B\x16\x82\x27\x0C\xFB\x50\x5A\xA4\x4E\x19\x34\x04\x33\x9B\x18\xBA\x8E\x04\x45\x03\x15\x0E\x8B\xC5\x1D\x06\x26\x8C\x2F\x74", +"\x17\xCF\x02\x11\x04\x8B\x66\x06\x06\x03\x8E\x35\x84\x17\xE7\x7F\xEB\x73\x0A\x37\x03\x39\xAE\x51\xC9\x80\x1B\xD8\x88\x60\x8A\x8D\x73\x00\x07\x05\x8C\x1B\x77\x18\xD8\x8B\x10\x07\x7F\x54\x00\x22\xB8\x15\x1C\x0B\x1D\x9D\x7C\x75\x8A\x8B\xF7\x7E\x08\x12\x7D\x21\x0A\x7A\x42\x53\x18\x1A\x01\xD3\x81\xE4\x7E\x8A\x7A\x86\x1C\xFD\x5D\x7E\x4F\x03\x66\x03\x07\x25\x8F\x6B\x2F\x1A\xE8\x8C\xFE\x74\x87\x54\x75\x0C\x3C\x01\xFD\x8E\x78\x7D\x8D\x6C\x82\x02\xC9\x80\x16\xB6\x44\x85\x59\x17\x3D\x03\x34\x98\x47\xC5\x8A\x08\x23\x7C\x29\x06\x05\x45\x01\xA4\x75\x60\x1A\x66\x07\x12\x8F\x22\x67\x1E\xB1\x8D\xE5\x64\x8B\x6E\x07\x07\x31\x8F\x76\x2D\x1C\xD4\x00\x15\x1D\x83\x48\x05\x7F\x53\x2F\x3A\x10\x04\x23\x93\xCA\x7D\x8E\x32\x8A\x03\xA7\x91\x86\x8A\x0F\xF4\x12\x2B\x24\x90\x46\x56\x40\x98\x8B\x23\x0A\x04\xCF\x02\xEA\x2A\x2D\x5D\x0A\x08\x3A\x8C\x1D\x92\x13\xD6\x01\x03\x8E\x8A\xE4\x3B\x08\x2D\x8D\x01\x8D\x21\xD8\x8B\x1B\x85\x02\x41\x03\x09\x10\x5A\x31\x02\x19\x6B\x00\x11\x13\x86\xAB\x4C\x2E\xA7\x88\xD3\x76\x17\xC5\x03\x4A\x43\x3C\x44\x16\x48\x05\x02\x17\x9A\x68\x4D\x92\x4C\x92\x02\x8A\x85\x0A\x12\x02\x27\x0D\xBF\x30\x53\x33\x66\x02\x64\x91\xD9\x26\x93\xFB\x7A\x01\xA0\x8D\x11\x15\x91\x96\x45\x0C\x07\x03\x25\x92\x09\xF3\x92\x6C\x94\x7F\x97\x8F\x04\x80\x01\xA3\x00\xC8\x48\x03\x86\x8B\x6D\x7E\x91\x09\x07\x8F\xF6\x7C\x4F\x49\x00\x8E\x94\x18\x74\x8B\x03\xA3\x7C\xD5\x3F\x6A\x54\x0A\x12\x11\x93\xB5\x66\x4F\x93\x03\x2B\x0F\x01\xB4\x90\xCE\x53\x03\x76\x6B\x09\x0F\x94\x22\x96\x12\xE7\x7F\xF7\x6D\x63\xEA\x6C\x09\x0F\x91\x59\x24\x17\x9A\x80\x33\x95\x7B\x54\x01\xD2\x7B\x60\xFB\x6B\x4D\x7C\x91\x45\x44\x95\x5F\x07\x0A\x08\x03\xFA\x75\x04\x50\x5B\x1D\x19\x2B\x4E\x03\x48\xBE\x92\x23\x0D\x14\xA2\x8C\x9C\x5E\x0A\x4F\x00\x4B\x97\x1A\xBA\x88\x26\x95\x92\xE8\x65\x02\x44\x03\x25\x5B\x08\x8A\x08\x91\x64\x00\x14\x02\x96\x30\x91\x31\x92\x03\x2C\x0E\x14\xD9\x09\x1E\x11\x02\xB6\x94\x58\x78\x95\xEF\x84\x05\x0D\x8A\x4A\x82\x71\x68\x02\x0A\x2B\x94\x80\x44\x19\xC9\x85\x10\x0C\x02\x4C\x01\x0B\x11\x75\x15\x72\x16\x0F\x29\xB8\x8D\x56\xE3\x94\x09\x27\x7F\x29\x0A\x12\xE0\x0C\x15\x03\x95\x7E\x93\xFF\x55\x03\x26\x04\x29\x80\x15\x15\x0A\x96\x49\x4C\x32\xBA\x96\xDE\x76\x17\xCD\x03\x4A\x4F\x87\x97\x1D\x22\x23\x10\x2B\x08\x29\x98\x34\xAE\x82\x88\x55\x05\xF4\x46\x89\x0E\x17\x05\x00\x99\xB6\x9F\x02\x50\x02\x0A\x16\x80\xD5\x3B\xE3\x70\x00\x16\x17\x97\x56\x21\x52\x95\x91\xCF\x70\xB5\x4C\x46\x45\x19\x02\x15\x9C\xD4\x17\x99\x13\x96\xFA\x43\x01\x5C\x76\x0D\x63\x02\x0B\x08\x98\xA9\x45\x1C\xCE\x97\x40\x9A\x80\x2B\x48\x00\x7E\x08\x96\x03\x21\x5B\x00\xCA\x98\x95\x55\x01\xFD\x74\x8C\xA8\x56\x20\x06\x1C\x17\x13\x86\xF7\x5C\x37\x81\x03\x26\x07\x00\xD0\x01\x33\x89\x3E\x50\x3A\x71\x65\x03\x2E\x01\x33\x80\x0C\x5D\x8D\x02\x89\x7D\xEE\x77\x92\x9C\x55\xB4\x28\x1D\xD5\x64\x7A\x2F\x76\x3C\x9F\x98\xC9\x7F\x01\xE3\x86\x1B\x09\x1A\x5F\x07\x68\xA9\x22\x9A\x98\x01\x8C\x81\x43\x89\x86\x45\x00\x1F\x6F\x00\x12\x01\x8C\x5F\x02\xB9\x0E\x6B\x65\x00\x0C\x18\x96\x04\x8C\x0E\xC8\x86\x13\x10\x02\x55\x04\x0A\x1F\x89\xBD\x9D\x37\xE1\x6B\x4B\x01\x03\x1E\x9C\x70\xA0\x7D\x99\x8C\x29\xE5\x94\x12\x0B\x49\x8C\x9E\xAE\x62\x03\x43\x96\x48\x74\x9B\x17\x1C\x91\x54\x07\x09\x22\x5F\xBD\x90\x24\xEF\x03\x17\x01\x46\x63\x04\x73\x80\x24\xCF\x98\x38\xB4\x8B\xE8\x84\x01\x89\x23\x0E\x28\x03\xD3\x95\x19\x64\x02\xEA\x93\x9B\x85\x99\x03\xA4\x7C\x26\x01\xE9\x0C\x9D\x65\x05\x03\xD3\x83\x3F\x55\x80\x91\x99\x38\xF8\x9B\x17\x03\x9E\xF7\x84\x4B\x85\x03\x37\x5B\x37\x87\x33\xF1\x54\x1E\x66\x03\x5D\x89\x64\xE4\x95\x3C\xBD\x8C\xC8\x81\x02\x49\x9E\x42\xBB\x65\xBD\x9C\x3B\x6B\x3F\x19\x01\x9E\xCF\x3C\x24\x89\x9E\xE3\x98\x0D\xCB\x85\x33\x8C\x9E\x24\x00\x1A\xB1\x0C\x34\x03\x0D\xB4\x5C\xF5\x8A\x9E\x5F\x02\x0A\x96\x83\xD0\x92\x05\x0B\x4B\xDE\x9B\x02\x41\x05\x05\x1A\x03\x2E\x0F\x02\x77\x02\x0A\x09\x03\x5D\x9E\x07\x84\x9E\xF8\x99\xFE\x6B\x7C\xF2\x64\x01\x6A\x03\x1A\xAA\x3C\x27\x03\x35\xC5\x02\xF8\x5B\x02\x61\x05\x05\x3A\x03\xFC\x9A\x05\x5F\x00\xFF\x9E\x9F\x6B\x06\x63\xBF\x89\xD0\x70\x2D\xF5\x89\x03\xB8\x9C\x24\x03\x0B\x30\x01\x16\x09\x03\x5D\x02\x0A\x0C\x03\xD3\x80\x6A\x6A\x87\x27\x0C\x0E\xBD\x9C\x19\x0B\x01\x2E\x07\x05\x2F\xA1\x36\x03\x0D\x91\x75\xF9\x9C\x7D\x42\x8E\x58\xB2", +"\xA1\x15\x05\x10\x68\x9B\xCD\x49\x08\x83\x32\x20\x84\x88\x73\x89\x10\x44\xA0\x00\x07\x01\x28\x03\x0B\x1E\x03\x13\x0C\x05\x5C\x01\x17\x1C\x03\x4D\xA4\x0B\x2E\x01\x14\x0A\x02\x27\x00\x1F\x02\x01\x49\xA6\x0B\x22\x01\x26\xAF\x44\xD1\xA3\x14\xAA\x01\x22\x07\x0D\x1E\x98\x62\x92\x05\x0C\x80\x15\x02\xA2\xB4\x8B\x22\x89\x08\x35\xAE\xFE\x24\x00\x0A\x08\xA2\x4A\xA4\x89\x8E\xA2\x28\xAD\x44\xDF\xA2\x15\xB8\xA2\x4A\xA3\x8B\xB3\xA2\x2F\xA4\x45\xA2\x01\x0A\x10\x03\xD3\x80\xEE\x50\x5B\x29\x06\x35\xF1\x82\x53\x8F\x01\x73\x03\x05\x31\x03\x1A\xAB\xCB\x15\x80\x10\x9B\x7F\x54\x01\x10\x89\x08\x49\xAE\xFE\x03\x7E\x0A\x19\xA2\x2A\x07\x89\xAF\x00\x15\x0B\x02\x4A\xA3\xE0\x7D\x02\x54\xA3\x93\xAB\x01\xC1\x72\x07\x53\x86\xCD\x7D\x81\xA8\xA0\x00\x38\x7F\x10\x28\x8F\x2B\xA5\x4F\x0E\x01\x52\x07\x0D\x10\x18\xFE\x0F\x13\x0B\x48\x10\x00\x01\x24\x04\x07\x2E\xA5\x32\x0E\x03\x50\x5B\x2E\xAF\x53\xBB\xA6\x05\x34\xA5\x8C\x68\xD2\x37\xA6\x2E\xB6\x15\xBD\xA2\x50\xBB\xA5\x48\x71\x4C\xB1\x03\x0B\x12\x47\xCF\xA1\x20\x07\xA7\x10\x2E\x03\x3A\x00\x08\x02\x01\xB2\x84\x0C\x22\x00\x10\x03\x15\x20\x02\x0E\x7D\x20\x1F\x26\x56\x37\xA4\x60\x28\x06\x20\x03\x1E\x00\x01\x50\x38\x04\x3D\x01\x6B\xA6\x05\x47\x22\x36\xA0\x01\x7D\x05\x01\x0A\x01\x69\xAD\x13\x55\xA7\x35\xA0\x86\xB3\x13\x9B\x9D\xA7\x6F\xAC\xC3\x19\x71\x19\x03\xA7\x49\x1D\x9C\xA7\xA7\x74\xAB\x4E\xA2\x03\xFB\x01\x86\x5C\x0B\x9B\xB1\xA7\x79\xAB\x4B\xF6\xA6\x08\x0A\x9F\xDF\x1A\x9F\xB3\x02\x6F\xA2\x41\x60\xA5\x0F\x62\xA7\x20\x04\x9C\xA6\xA6\x74\xA9\x63\x6A\xA7\x35\xBC\x5E\x0A\xAA\x9E\xB4\xA6\x5E\xA6\x4D\x8F\xAA\x45\x12\xA8\x14\xAC\x83\x3D\xA6\xA6\x30\x50\xA1\x1F\x46\xA4\xA8\x1F\xAF\xA4\xB0\xA6\x91\xAD\x50\xA5\xA8\x39\x92\xA9\xFB\xA5\xA2\xAB\xA8\x8C\xAA\x51\x83\xA9\x47\xA5\xA8\xE1\x82\xA6\x8B\xA9\x91\xAE\x50\xEF\x87\x1B\x08\x0A\x28\xAC\x9F\xA1\xA7\x10\x2D\x52\x82\xA8\x47\xAB\x0C\x1E\xAA\x04\x11\x17\xA3\xA4\x07\x21\xA8\x43\xA8\xA6\x25\xAB\x1F\xB5\x02\xA1\x19\x54\xBA\xAB\x52\xBD\x09\x4D\xAF\xA5\xBF\xA9\x6B\xA4\x04\x7C\x84\x98\x16\xAA\x44\xAD\xA4\xAC\x10\xC3\x1D\x55\xAA\xAB\x57\xBF\xA7\x19\xA9\xA0\xA2\xAA\xA8\xA5\x50\xA1\x6C\xB5\x08\xAB\x35\xAF\x9A\x91\x88\x39\x0D\x56\xBB\x63\x5B\xA1\xAB\x3E\xAC\xAE\x97\xA7\x3B\x6C\x57\xB3\xAB\x55\xB4\xA6\x25\xAB\x23\xAC\x03\xBE\xA6\x51\xFE\xA4\x60\xAF\xAA\x65\x01\xAA\x9C\x65\xD3\x48\x57\xD8\xA8\x08\x0C\xA0\x54\x98\x04\x16\xA7\x74\xAD\x4D\xC1\x65\x45\x0A\x66\x4C\xAC\xA6\x96\xAC\x11\x0E\x1E\xDB\xA4\x16\xBB\xA6\x5B\x00\x04\x3B\xA4\xCD\xAC\x4D\x8E\x52\x41\x7B\xA8\x22\x04\x05\x1B\xA7\xD5\xA6\x4D\x9B\x6B\x6B\xBD\x03\x20\x05\x0B\x17\xA7\x14\x06\x5A\xBA\x03\x6C\xB6\x15\xAC\xAC\x2F\x18\x36\x6E\xA3\x51\xC8\x50\x48\x02\xA7\xA2\xA8\xB1\xAA\xAC\xE0\xA6\x4D\xC6\x48\x63\x17\xA6\x60\xA4\xB8\xA0\x01\x18\x27\xCB\x17\x48\x72\xA7\xAC\xF5\xA6\x9A\xB4\xAC\x10\x0E\x5C\x96\x0B\x35\xBA\xA2\xD2\xAE\x8E\x38\x22\x6B\x98\xCB\x49\x21\x68\xB8\xAE\x24\xAB\xB9\xA1\x20\xD6\xAD\x5D\xF4\x03\x35\xBF\x01\x28\xAF\x7C\x22\x0B\xF2\x57\x5E\xE9\xAA\x7A\xBD\x09\xEC\xA9\x9D\x57\xA7\x3D\x06\x5A\xFD\x00\x4A\xBF\x14\x47\x0A\x7D\x35\xAF\xBC\xAB\x5D\xFF\x57\x35\xBB\x02\xA8\xAF\xBE\x91\xAC\x6B\xAC\x81\x39\xAF\x35\xBD\x02\x28\xA9\x5E\x7C\xA8\xB9\xA7\x4E\x87\x59\xD2\x01\x1A\x0B\x58\x28\x11\xAB\x2B\x08\xB0\x3E\x29\x65\xAA\xAE\x61\xA6\x82\x7F\xAD\xF5\xAD\x5C\xFA\xAE\x08\x08\xB0\x0F\xB0\xA5\x82\x61\xF7\x53\x43\x71\x5C\x58\xA9\xAE\xD9\xAA\xAF\x9B\x11\x11\xB8\x5F\xD6\xA6\x81\xA7\xB1\x09\xB3\xBB\x8D\xB0\xDD\xA2\x02\x10\xB2\x74\xB2\xB0\x4C\xA9\xAE\xAE\xA9\x0A\xBD\x61\x8A\x59\x83\x7A\xB0\x05\xA8\x35\x21\x03\x7D\x8E\x06\x6C\x01\x1E\x1F\xB0\x31\xB3\xBB\x9D\x60\xF7\xA2\x02\x23\x83\x36\xB8\xAC\x45\x04\xB5\x9C\xAD\x89\xAF\x73\x2C\xA8\x8C\xA9\xAF\x55\xB6\xB7\x97\xAD\x06\xAA\x65\x9D\xA9\x37\xB6\x70\x06\x2F\xC1\x6C\xA8\x5F\xAA\xCB\x7B\x66\x40\x01\xA6\x32\x01\x83\x89\x08\x39\xB0\x00\x76\xAC\x69\xB6\x17\x22\x07\x96\xA7\xAC\x10\x09\x5A\xDB\xAE\x6D\xB3\xA8\xE7\xA1\xB6\xB4\xB1\x05\xBD\x5A\xAA\x68\x3C\xAE\xB0\x7E\xA5\xB7\x83\xB5\xE0\xAA\x72\x52\xAE\x71\xAE\x03\xFC\x52\x99\xAD\xB2\xF1\x3F\x66\xB6\x16\x0B\x18\x01\x41\x07\x24\x19\xB4\x69\xA9\x57\xA1\xB2\x06\x79\xB3\x0A\xB1\xBF\x93\x39\x03\xB6\x5A\xBE\xB1\x37\xAB\xB1\x42\x18\x7E\x51\xB5\x54\xAB\x4C\xBB\x65\x30\xB9\x01\xB6", +"\x99\x21\x31\xB5\x3A\xBD\x69\xAB\x89\x55\xB7\xA5\x05\xB2\x5C\x64\xB4\x3E\xB1\x6A\x8C\xB1\x19\x19\x03\x88\xB6\xD4\x93\xA8\x20\xB8\x5F\xBD\xA9\x46\xA5\xB2\x19\xB0\xD8\x89\xB3\x32\x0B\x64\xA0\x0A\x93\xAA\xA8\x6C\xB1\x84\x2B\x49\x66\xA1\x03\x7B\x89\x42\x16\xB6\xB4\xB3\xB4\x96\xB3\x5B\xA8\x65\xE5\xB0\x54\xA7\xB3\xF8\x27\xC2\x47\x29\x55\xBC\x9D\x01\x0B\x2E\xB3\xB6\x96\xB1\x06\x32\x01\x3A\x89\x10\x6C\xB5\xB6\xA0\xB1\x28\x00\xD4\xA1\x01\xD5\xA9\x68\xD1\xB5\x4F\x0C\xA6\x96\xB3\x06\x04\x8D\x84\x0B\x6F\xEF\xB5\x94\xAC\xAE\xDC\xA9\x9D\x7A\xB3\xE8\xAD\x59\xC4\x20\x3E\x66\xAF\x3D\x0E\xDE\xA5\x02\x7C\xB1\x42\x2E\x00\x0D\x05\x8D\x09\x08\xE2\xBE\xB7\xF4\xAB\x5D\xED\xAE\x9E\xA0\xAF\xDD\xA2\xBC\xB7\x67\xF2\xAC\x47\x21\x22\xC2\xAC\xB8\xAF\xA5\x06\x31\x8B\x84\x03\x72\x93\xBA\x3D\xB5\xB8\x02\xBF\xBD\xB1\xAE\xF2\x52\x60\x89\xBA\xA4\xBA\x67\x94\xB6\xDC\x96\xB4\x1B\x0C\x1A\x89\x09\xCD\xA6\xB9\xDA\xA8\xE0\x96\xB9\xFD\xAD\x5F\xFF\xAC\xA0\x00\x4A\x17\x66\xE3\xAF\xB9\x7B\xBE\x6A\x96\xB7\x0D\x0F\x9A\x09\x08\xE9\xB8\xB9\x5E\xB0\x02\x7F\x56\x9E\xA8\xB1\x7D\xB0\xE0\xBB\xB1\x14\xBF\x63\x84\x59\xB1\xB4\xB0\xC7\xB7\xC2\x86\xB3\x02\x5B\x61\xC5\xB3\x59\xB0\xA7\x0A\xB8\xDD\x8D\xB9\x18\x00\x03\x4A\x8D\x42\x06\xBB\x4B\xBA\xCA\x9A\x3A\x3A\x0A\x67\xD6\xB3\x98\xB9\xAC\x9B\xAE\xCC\x9C\xB3\xA5\x34\x6E\xEA\x56\xCC\xB2\xB6\xBF\x75\x99\xB7\x01\x4D\xB6\x10\x7C\xBA\x9D\xB8\x90\xFD\x1D\x0C\x0B\xB5\x12\xB3\x71\x4F\xB9\xA9\xAA\xB1\x11\x64\xC5\xB7\x1E\xA1\xBC\x6A\xB6\x16\xD8\xAF\xA5\x31\x00\x07\x33\xB5\x81\x03\x6B\xF6\xB2\xAD\xA3\xBC\x4D\xBA\x5C\x46\xBC\x5E\xBA\x63\xBF\xB5\xB0\xB1\xB0\x56\xB9\xB2\x86\xB6\x0B\xB9\xB0\x49\xB5\x54\xAA\xB2\x4C\xB7\xD9\xA0\xBB\xA1\xB5\x06\x0F\xBD\x19\x0E\x01\x32\x00\x06\x2E\xB7\x81\x0E\x6E\xF6\xB1\xBC\xA0\x01\xF3\xB0\xA3\xB5\xB6\xD6\xBF\x11\xC1\xA5\x2C\xB0\x18\x7F\x14\x0C\x0B\x49\x5C\xAD\x50\xA0\x00\x10\x01\xBB\x79\xBE\xD2\xB2\x01\x18\x08\x0D\x27\x09\xF3\xBC\xB4\xA3\xAD\xB4\x97\xA7\xDB\xB1\x75\xA4\xB1\xA1\xA2\x5D\xB7\xA1\xD0\xB2\xAC\xA6\xBF\x67\x87\xB4\x8F\xBC\xAD\xD7\xA2\xCC\x9B\xAE\xE1\xAB\x1A\x0E\xB5\x94\x41\x21\x5F\xB5\xA8\xB8\xB3\xE9\xB9\x63\x80\xB9\xF7\xA0\x02\xDA\xB8\xF3\x9D\xBE\xDC\xAF\x7D\x8A\xB4\xD3\xA4\xBF\xEE\xAD\x9B\x8F\xB5\xBA\xBE\xC8\x77\xB9\x4F\x0E\xBD\xB0\xBB\x06\x05\x00\x16\x83\x80\xD0\xBE\x72\xB9\xB5\x9E\x4B\xD7\x95\xBF\x1A\xB0\x02\x3B\xB2\x9E\xA2\xB6\x20\x04\xD8\xA2\xBC\xAC\xB4\x7A\x98\xB3\x91\xAA\xB6\xD7\xA4\xC3\x9A\xBB\xAF\xB3\x54\x9D\xB4\xE0\xBA\x5F\x98\xBD\xBD\xA4\xB5\x07\xC8\x78\x8C\x32\xE2\xAE\xB1\x65\x01\xFD\xA5\xA9\xCB\xBC\x74\xB7\xB0\xD4\xAC\xBA\x0E\xC4\xEA\x9D\xA6\x09\xC2\x64\xCE\xA9\x05\xDB\xBA\x48\xB7\x9A\xA8\xBC\x67\xBF\x64\xF0\xA4\xED\x4C\x85\xFB\x76\x5A\x2C\x66\x20\xC2\xEE\x56\x16\x0B\x19\x01\x00\xA1\x21\x09\xC2\x5A\xBE\xEC\x56\x16\x43\xB4\x1E\x77\x00\xF3\xB9\x4E\x3D\xB7\x7B\xA2\x01\xD3\x97\xAB\xAA\xAE\x5A\x2C\xAE\x79\x2B\x5B\x91\xB1\xCC\x40\x59\x9C\x35\xF7\xAE\x0A\x9D\x09\x06\x04\x51\x52\x14\x08\xAB\x4F\x0B\x23\xC2\x96\x06\x86\xE9\x00\x45\x0E\x01\x33\x00\x06\x3E\x03\x93\x03\x87\x9C\xB7\x1A\xC5\xC3\x29\x7C\x22\x0F\xC3\xE2\x12\x85\xC1\xB3\x9E\xBD\xB3\x5A\xC5\xB6\xAE\xAC\x40\xB7\x4D\xDB\xBE\x1A\xDC\xC2\x82\xC6\xD0\xB4\xBF\x2E\xC2\x5D\x9D\x5C\x78\x16\x16\x62\xC1\x23\x24\xC3\x36\xC8\x86\xD7\x1B\x21\xD0\x03\x93\xC1\x0F\xEF\xBD\x19\x01\x03\x28\xA1\x42\x1E\xC4\xB4\xB7\x0E\xD4\xC4\x30\xB0\x85\xFD\xC0\x58\xBC\xB9\x1B\xAB\x01\x97\x43\x15\x2C\x5A\xD6\x5D\x7C\x33\xA8\xB8\xAA\x04\x3E\xAF\x46\xCB\x3D\x0D\x39\x6C\x10\xC4\x92\x8A\x95\xA2\xC4\x4D\xCD\x4A\xBB\xC7\x19\xCF\xBD\x31\x03\x0A\x0F\x26\x61\xC6\x87\x92\xC4\x1B\xDA\xC4\x4F\xC0\x7D\x28\xA8\x73\x59\x1F\x68\x56\x3C\x2F\xAC\x06\xB5\xA0\xB2\xAF\xC5\xA6\x58\xBA\xA6\x2F\xCE\xC3\x60\xB5\x4F\x4B\xC7\x7A\x47\x14\x4E\xC5\xA5\x30\xC6\xBA\xB5\xA0\x8D\x28\x23\x18\x57\xD7\xC6\x1E\xC5\xA9\x90\x52\xF0\x92\xAE\x66\xCD\x8D\xD6\x14\x38\xC9\xC0\x05\xAE\x08\x19\x8C\x75\xCD\x81\xE6\xC5\x7A\xB7\xA1\xA1\x7C\xB5\x86\xB1\x6E\xAC\x32\x3C\x56\x3B\xD4\xA9\xF6\xC6\x9E\xAB\xA0\x76\x8A\x8F\xBA\xB6\xFE\xB9\x4C\x52\x73\x58\x00\x02\x80\xC6\x8C\xF8\xC3\x2F\xD6\xA7\x68\xA7\x08\x05\xC9\x04\xC9\x71\xBD\x2F\x9A\x7C\x34\x0B\xCC\xA1\x81\xC9\x92\xA1\x3A\x33\x20\x4A\xAF\x27\x33\x27\x1F\xDA\xC9\x86\xC3\x8A\xF6\xA5\xB7", +"\xB1\xBB\xDF\xB3\xA2\x9E\xAC\x29\x22\x92\xD6\xC4\x49\xC8\xC6\xD6\xA3\x83\xA8\x93\xFB\x77\x92\x90\xAE\x74\xAF\x61\x05\x23\x82\x39\x31\x96\xC7\x89\x99\xC7\x43\xC5\xA9\x28\xB7\x12\xDC\x34\xD6\xAA\xC2\x64\x00\xB0\xBD\xB1\x2A\xB2\x84\x6D\x35\x12\x6C\x40\x4F\xC4\x43\xD8\xC4\xC7\xC7\x27\xEA\xAD\x47\xBC\x5A\xEE\x8E\x8C\x06\xBF\x43\x54\x27\xDB\xC9\x6B\xA6\x89\x33\xAF\xB5\x4A\x75\x60\x15\x20\xFD\x28\xA1\x14\x88\x82\xB6\x6A\xBF\xCA\x63\xC9\x2C\xF6\xB0\xB0\xCC\x11\x07\xB6\x49\xA6\xAD\xB7\xBA\x28\xD4\x23\x2D\xC5\x69\x0C\xC5\x37\xA6\x56\x4E\xCB\x24\xD0\xCA\x87\xC8\x8D\x8E\xAB\x6D\x8A\xC7\x28\x00\x04\x01\xCD\x3D\xB6\x6C\x99\x67\x26\x7D\x64\xB2\x60\x03\xE2\x01\x1A\x24\x5C\x1E\x08\x45\x0A\xA8\x20\x01\x05\x20\x00\x3E\x02\x98\xBB\xB5\x61\xD0\x64\x6E\x00\x96\x5E\x64\x87\x21\x55\xAD\x0C\x51\x0D\x9A\x8F\xCF\xD0\x92\xCC\xC9\xC2\x97\xC3\x14\x51\xD8\xCC\x85\xC3\xB6\x81\xC4\xEE\xA9\x17\x15\xCF\x60\xC0\xBF\xC6\xB7\x95\x48\xCC\xB6\x01\x55\x8C\xCC\x68\xD4\xC7\x91\xCB\x32\xD5\xCC\xA4\xC5\x83\x9B\xAA\x6C\xD1\x65\xB4\xCD\xA0\x9E\xCD\xC6\xC8\x8D\x90\xCF\x68\xD2\xAE\x8B\x63\x7F\x59\xC8\x97\xCB\x97\xA5\xC9\x49\xBF\xCB\xDB\xA1\x30\xC3\xCD\xDB\xB7\x99\x9A\x65\x66\xD3\xCD\x9C\xCD\xA0\xB6\xCC\xC7\xC8\x9B\x92\xCC\x65\xC3\xCC\x28\xB5\x3A\xC7\xCC\xE0\xC9\x9D\xB1\xAB\x67\xDC\xCE\xC6\xC9\x37\xE5\xCD\xE1\x07\x9A\xD6\xCD\x6A\xD9\xC2\x88\xC4\x35\xE4\x02\xD7\xCC\x88\xB1\xCD\x5E\x1A\xCC\x89\xCD\x36\xF8\x03\xF3\xC5\x9C\xA2\xCE\x6E\xC3\xCC\x3E\xB6\x3E\xE4\x02\xFC\xC1\x9C\xE6\xCC\x71\xC1\xCD\xB8\xAF\x38\xC5\xB9\x51\x69\x97\xCC\xCE\x4F\xDD\xCB\x25\xAC\xBF\x95\xCD\x73\xA7\x3C\x9E\x10\xD9\x4F\xAE\x89\xC2\x74\x47\xB4\xCA\xC4\xA1\xC3\x02\x85\xDC\x5A\x18\xD7\xFA\x8C\x3F\x6B\xAB\x03\x69\xCE\x2C\xC8\xA9\x39\x43\x47\x1A\xCB\x97\xC2\x95\xA2\x01\x29\xCC\xBA\xF9\x4C\xFD\x9C\xBD\xD5\xCD\x7D\xF1\xBC\x7C\xD5\xCB\x19\xD3\x44\xCB\xC5\x44\xB4\x8B\xC6\x1F\x23\xCD\xD0\x3D\xC9\x2A\xD0\xD1\x6B\xAF\xA2\xDB\xAD\x8C\xC2\x01\x12\xD4\x42\xC4\x38\x56\xC6\x4D\xAE\xC7\xA0\x10\xC5\xD7\xA3\x16\xDD\xA7\xED\x56\x8B\xC3\x67\x37\xCF\xCA\x0F\xD7\x1C\xF7\xD1\x2C\xD4\x68\xD3\xB3\x35\xAE\x01\xA6\xAF\x03\xE1\xCD\x3D\xBB\x9E\xCA\x08\x5D\xC3\xCA\xA9\xA9\x8C\xAE\x02\xD5\xC1\x9F\xAE\x9B\x6B\xB6\xD1\x65\xD0\x24\x2C\xAF\xFF\x5E\x7D\xF6\xCB\x44\xA2\x60\xCA\xCD\x37\xE7\xA6\x31\xD1\x74\xF8\xAD\x5D\xA5\xC3\x70\x00\x4C\x38\xD3\x72\xCC\xA2\xC3\xD1\x90\xDC\xCB\x14\x0C\xB5\x9E\xD2\x11\x00\xA6\xF7\xA6\x88\xB7\xA6\x53\x0F\xCA\xA4\xB2\x94\xC1\x59\xE4\xD3\x6A\xCE\x73\x66\xD1\x4D\xE0\x08\x36\xD8\xA3\xDC\xAC\x9D\xD0\xD3\x97\xD4\x4E\xFB\xD0\xF0\xB7\x6A\x96\x62\x3B\xDA\xD3\x20\x04\x4F\xC0\xAE\xED\xC8\x07\x30\x0B\xC8\x23\xD4\xD5\xC7\x50\xCE\xCF\x2D\xD2\xA4\x89\xD6\x35\xB6\xCA\x66\xD7\x0F\xF7\xD1\xA1\xC9\xA3\xD5\x30\x6C\xA6\xC4\x34\xD3\x10\xF5\xD2\x1E\xDD\x4D\xC1\x34\x90\xDB\xCA\xB2\xD2\x13\xCA\xD5\xB5\xBF\xA5\x92\xD4\xDC\xB6\xC9\x33\xC7\x61\x47\xD7\x42\xDA\xA5\xC9\xD7\x2F\xCB\xD6\x46\x39\xFC\xA2\xB3\x9A\xCB\x65\xA0\x01\x97\xAB\xD1\xCD\xC8\x26\xF4\xD4\x44\xD4\x68\xED\x30\x56\x1B\xB5\x71\xD6\x0D\x2C\xAC\x43\x3D\x9A\xBC\xCD\x37\xB4\x33\x37\x2D\x2D\x0F\xC6\x54\xDC\x13\x1D\xCF\x86\x38\x03\x84\xD1\x5C\xD2\xCA\x6B\xD8\x8D\xA2\xB4\x89\x14\xCF\x6F\xC8\x55\xE5\x44\xF7\xA2\x9C\xEB\xD2\x7F\xDF\xCE\x44\xD0\x62\x26\xAC\xB5\x0B\x4D\xC6\xB7\xC0\xD1\xAA\x4E\x00\x62\x2D\x0D\xF4\xC4\x9A\xAB\xCD\x37\x60\x13\xF7\x11\xBC\xAE\x67\x84\xC3\x1C\x4B\xCC\xBF\xD5\xD6\xF6\xC7\x4C\xF3\xCB\x30\xA6\x06\x26\xC5\x64\xBC\xC7\xAC\x54\x56\x58\xC8\x2C\xD5\xAB\x94\xB9\xC8\xCD\xAE\x5C\xC2\x3A\xC0\xD8\x8F\xC2\xB0\xED\x21\x67\xD3\x03\xB6\x11\x3D\xC8\xD9\x87\xA3\x07\x26\xAF\x5B\x8D\xD8\x58\xBF\x61\xC2\xCF\x39\x01\xB1\xA8\xC0\xC5\xD0\xD1\xEB\xAF\xCC\xA9\x73\x20\x7A\x85\xDE\xCF\x6E\xD4\xD9\x2E\xD2\x19\xD2\xAE\x5B\x14\xE7\x1C\xDA\x99\xCE\xD8\x36\xDB\x68\xD3\xC6\x9D\xDF\xB4\xBD\xD9\xC2\xD5\xAA\x44\xD2\x6A\xCA\xDA\x3E\x7C\xB4\xDC\xC0\xD6\xC7\xD7\x5A\xD8\x62\x1B\xDA\xFF\xC9\x02\x1E\xD8\xB2\xCF\xD9\xDC\xA9\x66\xF4\xCF\xC1\xC4\xB3\xE7\xD8\xC1\xDF\xA8\x38\xD9\x84\x1C\xDA\xBA\xDE\xB5\xAE\xD2\xC2\xD5\xD9\x68\xD8\x6F\xC5\xDB\x9C\xDC\xB6\xC8\xD8\x7E\xA3\xDB\x17\x65\xCF\x4D\xDB\xFF\xC7\x4D\xD0\xD9\x91\x02\x0B\x1F\xCB\x69\xF5\x73\xB9\xC6\xB7\xB7\xDB\xDA\xC9\xD0\x8C\xDC\x67\xFE\xD9\xBF\xD1\xB5", +"\x90\xDF\xD4\xD2\xDC\x56\xDA\x4E\xD5\xDD\xB4\xD4\x07\x17\xDD\x6E\xCD\xDB\x2C\xDC\x5C\xE7\xB8\xB8\xD8\xA9\xF2\xD2\xCC\xD2\xD9\x9A\xD8\x70\xF7\xDA\x11\x09\x04\x79\xD9\x4F\x1B\xDB\x8D\xDD\x6F\xFF\xD8\xD9\xD6\xB9\x90\x18\xE1\xD8\xDC\xA4\xC8\xE0\xB1\xD0\xC4\xD5\xB5\x97\xCB\x5C\xCE\xDA\x7C\xDE\x67\xE2\xDB\x89\xA4\xB5\x8A\xDE\xD9\xC1\xDA\x59\xDA\x70\xD2\xDA\xCC\xDB\xB3\x8E\xDC\xE7\xCF\xDC\xD4\xC4\x78\xCE\xDF\xBA\xC3\xBA\x82\xDE\xDA\xD3\xDE\xA7\xDE\x6D\xD4\xD6\x97\xD3\xBE\xA2\xDA\x69\xC2\x01\x91\xD6\x70\xE7\xD8\xE6\xD0\xE5\x65\xDB\x37\xC8\xD5\x8C\x48\x26\x27\x02\xC5\xC7\x05\x4C\xB7\x1A\x19\xD7\x5C\xD3\x75\xE5\xDE\x98\xD5\x97\xE8\xDD\xDF\xC4\xB8\x13\xAE\x2D\x7C\x4A\xC4\x43\xB3\x18\xC8\xFC\xCB\x72\xF2\xDC\x7E\xF6\xDE\xFC\xDD\xB2\x8E\xAB\x7D\x85\xD9\x32\xD6\x48\xEB\xAE\x62\xDC\xBE\xBD\x0A\x48\x23\x73\x57\xD2\x2F\xF9\xDE\x8E\xCA\xB7\x91\xE3\xA5\xDC\xC2\x14\xE0\x04\x29\x28\x2E\x73\xAD\xFA\xD7\x90\xC8\xDF\x0E\x0D\x4E\x30\xCA\x4E\xDC\xAB\x9E\xD7\x73\xA6\xCB\xE9\xD5\x2A\xE3\x4E\x3B\xD0\x02\x12\x2C\x61\x2D\x2C\xE0\xD3\x83\xD7\xA7\x09\x16\x8C\x2B\xE3\xAE\xD3\xCB\xCD\xAD\xB1\x2F\xCF\x18\xE6\x4D\xD7\x44\x19\x19\x46\x34\xE5\x18\x53\x2C\x1C\xE5\xC2\xBA\xE1\x98\xAE\xD6\x59\xB4\x52\xD3\xDB\x70\xB9\x66\xEE\x74\x15\x2B\xC8\xB9\xC7\x63\xE5\x03\x34\xC6\x8F\xAE\x02\x0D\x16\x01\x01\x06\xEB\x61\xE3\x62\xC6\xC2\xDA\xD2\x08\x1D\xCA\x67\xCD\x5B\x6C\xCA\xB1\xC3\xAD\x6D\xC8\x9C\xC8\xCB\x6D\xE4\x8D\xFE\x28\x28\xD1\xB0\x96\xD5\x9B\xD3\xD7\x21\xE0\x2F\xD5\x35\xD4\xD3\xAB\xA2\x03\x03\xFE\xE1\x12\xE7\x14\xE1\xE0\x31\x71\x42\x10\xC6\x06\xED\xE0\x1C\xE7\x76\xDE\xE1\x3B\xEF\xBE\x83\xE6\x96\x63\x29\x95\x36\x90\xCE\xD0\x44\xE0\xA9\xA9\xE1\x44\x00\xE4\xA1\xD7\x85\xC0\xD7\xF8\xC8\xAB\xA0\x0A\x9E\xA4\xD5\x13\xAE\x86\xC7\x46\xC3\x2B\xC7\x87\xE6\xEA\xD9\xAA\x36\x90\x0D\x18\xE5\x36\xD2\xC4\xB0\xE3\x6A\xC6\xE2\xD9\x47\x93\xE8\xA8\x25\xE7\xC3\xC8\x47\x61\x2A\xA6\x6E\x08\x06\x0C\xA7\x5C\xEE\x02\x35\x01\xF4\x89\x08\xBF\xE1\x14\xD9\x08\x18\x0E\x50\x92\x6C\xD8\xC1\xE4\x70\xAF\x12\xF0\x00\xF3\xDC\x9E\x88\xDF\x46\x26\xDE\xA6\xCE\xD8\xB1\xDF\x96\x1A\x98\xD9\x24\x48\x07\x03\x0A\xAE\x29\x97\x86\x33\x0E\x4B\x97\x1B\x11\xD3\x05\x27\x08\x9C\xDC\xB5\x8B\x1E\x50\xFC\x26\x0F\xE9\xD3\xE4\x38\x8A\xDE\xB7\x4A\xD2\x7E\xC2\xDE\x1F\xDD\x01\xDB\xA2\xB7\x84\xE3\xB8\xDD\xBF\xE0\xBE\x1B\x86\x35\x6B\x04\xB5\xA0\x54\xF6\x65\x4E\xE9\xD1\xA5\x80\xCC\xAA\xAB\x30\x34\x35\xAA\xC3\x8F\xF8\x6E\x6E\xDB\xE6\x04\xEA\x4E\x6B\x6E\xCA\x69\x9B\xBA\xAC\x3F\xD7\x54\xF0\x3F\x7E\x5F\x03\x47\xB6\x9F\x7B\x4F\x44\xE3\x4F\xF6\x4E\xE1\x9B\x9D\x84\x0B\xD1\xB4\xB4\x45\xEE\xAD\xF6\xA4\x42\xE1\x2C\xAC\x4C\x5A\xCA\x75\x29\x47\xB4\xDC\xD5\xA3\x95\xB2\x93\xD8\x95\xF5\x4E\x6B\xA0\x02\xC9\x3F\xA2\xC3\x52\x60\xAF\x68\xC7\xC1\x09\x0C\x81\x37\xEC\xD3\x8F\xB4\xF5\xBD\x2E\x51\xCD\x65\xC9\xE9\x50\xAC\x30\xD8\xBA\x0D\x32\xA0\x66\xC2\x62\xD4\x20\xEF\xA4\x7A\xFB\xCC\xEA\xC3\xD4\x81\x52\x1B\x03\x50\x5C\xBD\xA0\x81\x02\xA7\xE3\xA0\x52\x1E\xD7\xC0\xDE\x9C\xBF\xA3\xC5\x69\x92\xE2\xAC\xF0\xD2\x56\xE5\x41\x5C\xEA\x11\xC8\xB4\xF0\xBB\xD2\xF7\xBD\x98\x0F\x66\x18\xA9\x30\xF7\xE7\x81\xE6\x4D\xCC\x5E\x77\xB4\xCC\xC7\x9A\xC4\x0B\x40\x39\x0B\xAE\xDF\x3E\x6E\xC2\x01\x25\xD1\x37\xFA\xBF\x09\x51\xD1\x30\x7A\x2A\xB1\x75\xC0\xA1\xD6\x7D\xE4\x50\xC3\x10\x20\xC6\x2E\xB1\x75\x0E\xA9\x9D\xEF\xBB\x28\xE6\x93\xE9\xD1\x3B\xF6\xBE\x31\xD5\x0B\x3A\xB2\x78\xEF\xC3\xA6\xCC\xFF\xC3\xCA\x78\xE8\xA5\xB6\x74\x32\x68\xB3\x6A\xC1\x63\x33\xB6\x94\x2E\xE1\x9E\x07\x93\x03\xDA\xF6\xC1\x63\x2E\xA8\x6E\xD2\x9D\xD2\xE2\x5D\xDE\x67\x83\xC5\xF6\xA3\xE2\xEE\xBA\x58\xE3\xD4\xD3\xA9\xD7\xDD\xA4\x65\x2B\x21\x00\xCF\xB4\xE5\xA9\xD4\xEB\xD8\xEB\xE6\x8C\xCB\xC0\x84\xB7\xFD\xB0\xD3\xD8\xE2\xD6\xF5\xBC\x89\xDF\xAF\x66\x48\x73\x71\xE9\x29\x60\x4C\xD3\x62\xC3\xB5\x04\x27\x08\xBA\xDC\xB5\x29\x6E\x50\xA5\x9A\x6A\xF6\xC9\x65\xE8\x99\xFA\xB2\x09\xD5\x93\xD7\x62\xA5\x1C\xB5\x66\xCD\x26\xE6\x63\xEF\xEA\x5B\x8E\xEF\x75\xF6\x63\xD7\x41\x8F\x54\x2C\x44\xB2\xA5\x93\xAB\x1A\x71\x3C\x43\xC1\xC9\x09\x43\x59\x4E\x64\x59\x5E\x1B\x9A\x32\x29\xD6\x43\x0E\x32\x17\x01\x03\x00\x07\x49\x1E\xEF\x9C\xB2\xBE\xF9\xEE\x2F\x32\x16\x27\xBA\x3B\xE2\xE4\xD4\xBD\xB2\xEC\xCF\x5E\xDD\x6B\x3F\xD4\x0B\xE0\xE2\x22\xD6\x57\xF3\xEC", +"\xE9\xA2\xE0\xE1\x40\x81\xEC\x03\x0B\x4F\x78\xA0\x0E\x4E\x66\x94\xE2\x5E\x86\xE8\x1E\x1C\xF1\x0F\x30\xC2\x26\x0C\x02\xA4\xF0\xA7\xBE\x5C\x21\xF6\x9E\xA6\xEE\xA6\xB8\x84\x70\x3B\x6B\xF0\xE1\x00\xBD\xC5\xE1\x20\x28\xDC\x63\xC9\xD2\x6A\xAB\xD2\x75\x3D\x15\xFE\x59\x43\xBD\x67\xD0\x6A\x59\x64\xB4\x4E\xD2\x46\x13\xA8\x1E\xBD\xDE\xDE\xD6\xE2\x38\x5C\x34\xA8\xC5\xEB\x60\x15\xF1\x7E\x98\xBE\x8C\xFD\x09\x13\xA8\xFE\xB0\xEC\xEB\xBF\xE4\xED\xCB\x8E\xD6\xF1\xAA\xC3\x1D\x4C\xD2\x10\x01\xE4\x9A\x48\x8F\xEA\xAD\x3E\xF0\x70\xBA\xF1\xC8\x33\xE4\xD1\xD0\x8A\xC7\xF2\x76\x5D\xF7\x89\x6F\x6D\x27\x85\x2D\xA7\x9A\xE4\x38\x0E\xBF\x6C\x86\x08\x39\xFA\x4B\xEF\xF3\x15\x41\xE9\xAA\xAB\xA4\xD5\x2F\x92\xED\xDC\x28\xEB\xA4\xD8\xEE\x8F\xEC\x01\xD3\xC3\xE3\xE1\x5E\xD0\x6F\x15\x5D\xBD\x30\x32\xC4\x2E\x2F\x56\xA9\xE8\xCE\xEC\x0D\x10\x9C\x09\x08\xD2\xF4\xB5\x46\xF2\xC7\x79\x01\x75\xED\x2F\xD7\xE9\x9D\x99\xEF\x03\xF0\x57\xE9\xD0\x65\xF3\xE7\xAD\xDA\x5D\xFA\xAD\x79\xB1\x04\x50\x00\x8E\x17\x2F\x43\xC5\xDA\x2A\x38\xEE\x56\xDF\xAA\xF5\xC6\x2B\x39\xAF\x09\x36\x0E\xB8\x44\x07\x12\x34\xF7\x89\xE9\x39\xAF\xF4\x7B\x4E\xA9\xF4\x95\xA5\xEA\xC4\x50\xEC\xE7\x4E\xF4\xDE\x3E\xC2\x1E\x01\x82\xE9\x64\x70\xA2\x01\x3E\x04\xB6\xE8\xD0\x5C\xFA\x6E\x3D\xF7\x54\x7C\x5B\xAA\xA6\xD5\xCD\xF6\x96\x3F\x3D\x2D\xF4\xB3\xFA\x38\xB1\xF7\x7B\x1E\xE2\x5B\xF6\x10\x5C\xF6\x2E\xB2\xF6\xD8\xF3\xDB\x1F\x1F\x5D\xF0\x51\xBE\xF7\x9F\xFA\xF4\x81\xF4\xD0\x95\xF3\x6B\xA4\xEC\xCC\xB9\x7B\xBA\xBD\xC9\xF4\xD0\xC5\xD7\x6B\xF0\xEB\xE2\xF4\xC4\x6E\x03\xC8\xB9\x21\x18\x2D\x66\xA4\x03\x74\xB3\x40\x14\xB3\x76\xB2\xFA\xA7\xAD\x5B\xA0\xDC\xE1\xEA\x86\xC3\xEE\xD6\xBB\xFE\xA3\xEA\xFB\xB3\x7E\x8D\xB7\x5E\xE3\x52\xFC\xBB\x1E\x55\xB4\xBC\xBA\xEF\x93\xF8\xE4\xB5\x01\x37\xBB\x20\x37\xB8\xFB\xA8\x72\xA3\xB4\x92\xC0\xB5\x27\xD2\xBA\x80\xB0\xFA\xAE\x72\x8D\xBC\xC5\xF9\x2C\x16\xF8\x18\xF6\x00\xA5\xB3\x10\x4A\xB8\xC7\xE0\xB8\x2E\xC0\xD4\x85\xF8\x5F\xB0\x6C\xBC\xB0\x04\xD4\xC1\xA3\xB8\xD9\x97\xC1\xAE\xBB\x81\xF4\xC5\xBE\xE8\xF9\xFE\xB8\x18\xF9\x00\xB4\xB3\x10\x68\xBB\xCB\xF6\xBE\x8B\xD3\xDB\xBD\xEC\x29\xE5\xAC\xF4\xB8\xE3\xA5\xB7\xAA\xA6\xF1\x89\xBF\x86\xB2\x03\x34\x03\xE4\xAE\x5C\x02\x0E\xF2\xB3\xB1\x16\xCA\x6B\xB8\xB0\xC1\xF0\xC1\x9E\xBE\xE6\xE0\xBC\x79\x57\x75\xC3\xB1\xD6\xA5\xBD\x3B\xFB\xD9\x8D\xB7\x26\xBD\x83\xFD\x03\xCF\xE6\x2D\x29\xFC\xBF\xF3\x01\x24\x02\x8F\x74\xFA\x01\xD1\xB1\xD8\xA6\x9D\x8C\xAD\x9D\xAB\x5E\xC6\xB4\x4C\xA2\x01\xED\xA2\x42\x0A\xA8\x8F\xD3\x5A\xF8\xA5\x42\xB2\xAE\x4A\xAF\xA2\xBD\xFA\xAC\xBF\xF7\x87\xA9\x3E\xB0\xA7\x84\xF8\xC4\xA5\xF7\xBD\xFF\x56\xA8\xD7\xDF\xE0\xA9\x90\xFA\x05\xCD\xDC\x9C\xAE\xDE\xDE\xAA\xE2\xE5\xFB\x4E\xAF\xF2\xC2\xAB\xC8\xF8\xF7\xB7\xA8\xD8\xD9\xA9\x6E\xAF\xF3\xD3\xC0\xB3\xFF\xF7\xC1\xA8\xD8\xDD\x03\xA4\xF8\xCC\x86\xAA\xA4\xA8\xF8\x9E\xFE\x3F\xB6\xFC\x63\xAA\xAA\xB0\x87\xCC\xF8\x5E\x8E\xAA\x56\xBC\xAA\xB5\xF9\xF5\xF7\xFC\xBF\xF9\xFB\xE5\xAB\x56\xBC\xC0\xB1\xFE\xA1\xAB\xAA\x2C\xC8\xFA\xFE\xAA\xEA\xF8\xFD\x82\xAA\x04\x36\xAA\x6C\xEC\xFB\x96\xBE\x3D\x74\xFC\xCF\xFC\xF8\xD1\xFE\xC2\xA3\xF8\x9A\xFE\x08\x0A\xAC\xD8\xFB\xF8\xCC\xFD\xDC\xF3\x59\xD4\xC4\xEC\xFA\xFC\xBF\xF0\x39\xC8\x66\x61\x6D\xA7\xFF\xA6\xF7\xE2\xF8\x09\xF5\xB5\xC6\xB4\x84\xFC\x80\x8A\xFA\x71\xFB\xF4\xD6\xB8\xFF\xAD\xE8\x84\x13\x60\x96\xAD\xC7\xFF\xD7\x22\x00\x00\x73\x5D\x46\x5C\x1C\x5E\xE1\x1D\xFF\x47\x60\x3A\x5E\x89\x58\x71\x53\x54\x1A\x5D\x1E\x15\x00\x97\x57\x47\x7C\x03\x62\x82\x62\x00\xF0\x55\x23\x6C\x72\x41\x25\x2F\x59\xEF\x79\x73\x56\x5F\x13\x82\x84\x61\xF2\x76\x76\x3F\x5D\x80\x58\x01\xAE\x7F\x1A\x80\xD7\x79\x80\x78\x58\x9C\x5E\xD4\x51\xF6\x72\x60\xC3\x59\xE8\x58\xAA\x77\x60\xA6\x5D\x41\x5A\x81\x49\x2C\xC8\x7E\xF7\x7C\xA7\x45\x7B\x1E\x7C\x8A\x5E\xAE\x77\x69\x89\x5D\xAA\x5D\x62\x50\x80\xB5\x5B\xD6\x78\x80\x46\x09\x0A\x60\xD8\x75\xF3\x6C\x80\x11\x62\x0B\x89\xF3\x5A\x5D\x31\x82\x0E\x6C\x6C\x69\x5E\x6D\x7D\xF2\x7B\x01\x8C\x60\x49\x7F\xB6\x67\xEE\x72\x5D\xDE\x6A\xD3\x79\x01\xB6\x59\x6E\x5D\xFA\x70\x6E\x44\x14\xE2\x5A\x9A\x50\x04\xA3\x56\xB7\x5D\xEE\x53\xC1\x7C\x56\xC7\x5C\xEB\x50\x80\x72\x00\x71\x5B\x49\x00\xF0\x5D\x5A\xF0\x7D\xFB\x59\xF0\x5D\x75\x53\x79\xFD\x72\xDB\x4B\x7C\x6D\x5C\xE6\x5A\xFF\x4F\x7C\xF7\x09\xC4\x7D\xA5\x29", +"\x7C\x6B\x81\x0D\x0E\xEF\x59\x1E\x59\x7C\x1C\x8B\x7E\x6C\x76\xC4\x77\xC1\x79\x9A\x78\x5A\x89\x82\x8E\x6B\xF0\x4D\x79\x66\x77\xAB\x7B\xFF\x49\x29\x21\x13\x0F\x6D\x84\x72\x13\xCF\x20\x11\x61\x57\x06\x61\x31\x03\x0C\x0B\x84\x43\x04\x4B\x63\x61\x71\x84\x72\x13\x7B\x61\x14\x6A\xBE\x6C\x5F\x7A\x5B\x15\x64\xFD\x60\x7A\x20\x70\x28\x71\x81\x5F\x61\x05\x70\x15\x11\x89\x65\x71\x5B\x72\x25\x6D\xC5\x75\x00\x31\x01\x1D\x66\x10\x3A\x82\x93\x73\x29\x74\xA4\x7C\x61\xA7\x83\xC0\x73\xA3\x71\x67\x35\x6B\x10\x71\xAC\x45\x77\x34\x72\x23\x68\x3C\x38\x62\xAE\x46\xB9\x56\x8F\x5C\x71\xE3\x6D\x2F\x72\x03\x1A\x03\x27\x04\x35\x84\xC6\x4E\x71\x45\x68\xA7\x7C\x73\x6F\x76\x59\x7B\xD6\x0B\xE5\x5D\x79\x57\x06\x5B\x65\xE4\x54\x69\xD4\x7A\x25\x36\xCA\x7D\x71\xD9\x80\x64\x73\xC1\x52\x68\x52\x79\x37\x8E\x13\x1F\x83\x3B\x79\x2C\x63\x0E\xB5\x62\xE5\x80\x33\x8C\x24\x7A\x62\xE3\x6D\x2F\x61\x0D\xB8\x00\xB1\x00\x0B\x4D\x0F\x97\x83\x94\x72\x16\x78\xAD\x4C\x06\x7A\x59\xA3\x6E\x69\x41\x5E\xAB\x71\xA7\x61\xEA\x60\x77\x9B\x6A\x82\x76\xA6\x41\x71\xBE\x68\xA8\x6C\xCA\x52\x78\x8F\x81\xA9\x6A\xC1\x1A\x61\xC6\x5A\xAA\x6B\x5E\x7F\x69\x6D\x01\xA0\x65\x06\x30\x6A\xF5\x63\xF8\x6A\xBF\x74\x82\x03\x86\x45\x05\x10\xA1\x69\x8F\x6A\xFF\x69\xE9\x6A\x74\x71\x67\x07\x75\x97\x5A\x6A\x06\x6C\xA8\x7F\xA9\x46\x83\x13\x85\x83\x73\xE1\x56\x84\x81\x5C\x46\x88\x75\x5A\x84\x7E\x6B\x35\x58\x11\x2E\x6A\x93\x18\x48\x83\x0B\x9C\x69\xFA\x80\x2D\x87\x84\x40\x78\x06\x04\x52\x8D\x0B\xB3\x6A\x02\x87\xAD\x63\x9E\x14\x61\x39\x5B\x31\x8A\x08\xAE\x72\xC4\x83\x1D\x86\xDC\x73\x7B\x9D\x06\x3C\x13\x14\xAD\x6C\xD0\x82\x51\x84\x76\x6A\x4A\x09\x04\x58\x82\xCC\x74\x82\x23\x84\x97\x65\x12\xAC\x5D\xCD\x6B\xD2\x70\xAD\x43\x5B\xD2\x6B\x1E\x79\xC5\x4F\x83\xB6\x81\x34\x81\x03\x31\x00\x62\x87\x40\x02\x16\x8B\x85\xE2\x69\x53\x80\x02\x13\x59\x6D\x5E\x15\x8F\xAC\x5D\x6B\xDF\x6A\x56\x8F\x16\xA3\x6F\x5D\x84\x97\x6C\xDF\x72\x00\x3D\x52\x41\x09\x18\xB8\x85\xFB\x68\xDC\x66\xAE\x68\x85\x28\x83\x3C\x7C\xAE\x73\x67\x3B\x80\x08\x00\xAF\x45\x3A\x43\x65\x46\x80\x07\x36\x6B\x13\x08\xBE\x63\x53\x43\x86\xB4\x81\x61\x8D\xB2\x72\x7D\xA5\x03\x49\x05\x1A\x80\x84\xBE\x82\x5E\x8B\x73\x70\x6E\x0C\x6C\xEF\x65\xB0\x78\x6E\x7E\x6C\xD8\x61\xB0\x5D\x6F\x22\x01\xD1\x63\xB1\x45\x6E\xF3\x73\xC5\x64\x9B\x1A\x6C\x14\x1F\xF6\x61\x86\x60\x86\x5C\x6A\x68\x84\xAE\x7C\x77\x34\x00\xB8\x49\x10\x06\x87\x63\x86\x0E\x7A\x1A\xB8\x71\xF8\x44\x4B\x78\xB2\x6D\x2A\x82\x85\x33\x88\x0F\xA1\x86\x71\x86\x57\x85\x03\x3E\x00\x2C\x40\x76\x88\x1A\x8C\x85\xAC\x6F\xBC\x6F\xBA\x5D\x6D\x40\x6E\xD9\x72\xB4\x78\x6D\xBF\x6D\x6E\x65\xBD\x7A\x6E\x7F\x6C\x6D\x85\xBB\x43\x6E\x1D\x70\x56\x78\xCC\x5F\x6E\x64\x6F\xE4\x66\x9A\x48\x6F\xB9\x6E\xF2\x6E\xB9\x5A\x6F\xEE\x6D\x66\x80\xBD\x41\x6E\xB4\x6C\xD1\x60\xBE\x74\x87\xB1\x6D\x6C\x86\x1F\x99\x6F\x15\x71\xE2\x69\x1F\x94\x6E\xFB\x87\xEC\x6B\x1E\x9F\x6F\x9E\x6C\xF0\x6B\x15\xA4\x6B\xC2\x87\x28\x6C\xDF\x76\x00\xA5\x51\x42\x05\x21\x89\x87\x01\x85\x77\x8D\xC8\x69\x6F\xEF\x86\x33\x71\xE5\x10\x73\xEC\x66\x34\x78\xC0\x54\x73\x1B\x5B\x02\x7F\x19\x92\x87\x5A\x71\x84\x8A\x89\x7C\x77\x37\x01\x62\x83\x10\x0B\x86\x5A\x71\x59\x8D\xB2\x4C\x73\x4A\x06\x9E\x59\xBE\x41\x80\xFF\x57\x5E\x24\x2B\x07\x39\x3A\x86\xD9\x73\xCD\x73\x6F\x25\x8B\x64\x01\x52\x40\x87\x2D\x6D\x26\x8D\xC5\x7F\x5E\x17\x05\x5E\x04\xBB\x04\x5F\x01\x66\xF1\x5E\x4B\x79\x72\xBB\x73\x30\x7C\xDF\x42\x03\x2C\x40\x95\x84\xC6\x44\x73\xD6\x53\xBC\x56\x8F\x62\x6F\x70\x00\x96\x87\x4D\x6B\x00\x9C\x6B\x32\x76\x4D\x53\x3A\xAD\x65\x37\x5E\xE8\x32\x6B\xDC\x6F\x4E\x8B\x19\x85\x54\x46\x12\x47\x0F\x8B\x5D\x7F\x7A\x66\x97\x82\x02\x2D\x00\x61\x88\x6B\x54\x26\xB3\x67\x66\x89\xBC\x6D\x23\x8E\x55\xF5\x6A\x34\x6D\x32\x36\x06\x08\x68\x97\x82\x27\xBB\x6E\xCA\x72\x9D\x8D\x7B\x25\x89\x13\x57\x99\x8B\x27\x9B\x54\x7D\x8B\x35\x55\xB4\x70\x89\xCC\x66\x9C\x86\xCC\x6C\x74\x85\x8B\x65\x73\x97\x5E\x88\x07\x89\x34\x78\x75\x7F\x88\xD5\x71\x56\x07\xCD\x50\x8A\xCA\x71\x31\x78\x2B\x26\x56\xD1\x55\xA5\x84\xCF\x43\x65\xB6\x76\x8E\x8E\x4F\x60\x61\x08\x8A\x8F\x83\x22\x80\x89\x75\x56\xA7\x88\x85\x67\x7F\x44\x88\xB9\x65\x14\x86\x86\x32\x01\x47\x49\x10\x3A\x8A\x18\x8A\x2F\x82\x0C\x9A\x89\xAD\x82\x08\x0F\x20\xA3\x62\xB7\x8B\x68\x83\x03\x3B\x49\x09", +"\x04\xB2\x8D\x2B\xBD\x71\x08\x58\xAE\x5B\x9A\x45\x65\x47\x64\x04\x68\x93\x52\x10\x24\x32\x02\x1D\x94\x60\x2E\x4D\x26\x4C\x77\x2F\x34\x74\xE3\x24\x7F\x79\xD3\x46\x04\xDF\x8A\x2E\x5B\xD3\x68\x63\x78\x5B\x2D\x52\xB3\x69\x7F\x42\x76\xD9\x74\xD4\x4F\x75\x46\x74\xC4\x69\x63\x09\x75\xE6\x87\x52\x71\x1E\x8E\x55\xEB\x88\x54\x79\x83\x62\x00\x53\x75\x51\x76\xD5\x47\x6D\x7D\x5B\x57\x7F\xAF\x4C\x78\x6F\x6B\x10\x7E\x2F\xA1\x68\xF6\x7C\x23\x68\xFF\x4C\x60\x6E\x4A\x8C\x2B\x5E\x6A\x75\x02\x76\x61\x05\xD7\x4D\x20\x07\x77\x80\x05\x7F\x02\x20\x0F\x8C\xFC\x17\xD7\x79\x75\x92\x64\x1F\x86\xA3\x11\x1E\xC3\x88\x2F\x63\x4B\x1A\x71\x0E\x5E\x04\x0C\x02\x62\x8C\xDB\x86\xB8\x67\xC6\x61\x09\xA0\x5B\x17\x00\xC7\x7E\x14\x72\x70\x59\x6E\xE0\x69\x71\x3D\x0F\x1A\x7B\x96\x69\x65\x56\x7B\xE6\x79\x10\xAD\x70\x0B\x85\x1E\x7F\xAC\x25\x72\x8C\x87\x09\x78\xC6\x6A\x8C\x6A\x70\xCD\x8D\x32\x94\x2B\x0E\x78\xAE\x5B\x32\x82\x0D\x43\x8D\xCD\x85\xC7\x6D\x84\x8C\x70\x66\x7E\x0A\xBA\x71\xBF\x84\x8A\x86\x8F\x45\x8B\xC3\x85\x0D\x04\x32\x8F\x0B\x6B\x3D\xCF\x86\xC6\x50\x67\xE6\x8A\xBC\x88\xAA\x46\x66\xD7\x64\x79\x6A\x98\x5B\x67\xFD\x66\x52\x70\x9E\x73\x8B\x1B\x54\xD8\x84\xA0\x65\x67\xB4\x6D\xBB\x07\xA0\x5D\x67\xEA\x67\xB3\x88\x9A\x54\x85\x0A\x85\x6B\x60\xBB\x70\x66\x58\x5F\x6F\x6B\x99\x63\x8D\xFB\x67\xDB\x80\x1B\x81\x68\x79\x8F\x7D\x68\x9D\x4A\x66\xC3\x67\x6D\x67\xB4\x4B\x68\xAC\x32\x5B\x82\x35\xB9\x83\x1F\x8D\x17\x76\x03\x38\x01\x27\x04\xE4\x85\x32\xAD\x68\xFC\x55\xD7\x8D\xA1\x5F\x68\x97\x0F\xBF\x81\xE1\x76\x84\xBA\x67\xE5\x8E\x15\x17\x68\xDE\x54\xC0\x83\x51\x59\x76\xFE\x67\x07\x8C\x65\x56\x78\xBD\x2B\x70\x0D\x31\xBF\x62\x54\x8E\x84\x87\x03\x2C\x03\x27\x04\xEC\x83\x39\xA7\x70\xA5\x60\x23\x8A\x0E\xB8\x57\xAC\x76\x54\x83\xA2\x52\x84\x9D\x69\xC1\x81\xC2\x4A\x83\x1D\x06\x24\x71\x23\xA5\x54\xB5\x8D\x30\x88\xE5\x78\x78\x91\x1F\x98\x78\xB9\x34\x71\xF3\x80\xF4\x2D\xEB\x76\x83\x7D\x4B\x74\x81\x1C\x95\x87\x86\x85\xE4\x5A\x2C\x83\x04\xCA\x8A\xD6\x89\x8D\x61\x10\xCD\x84\x54\x81\x0C\xAE\x82\x84\x71\x4F\x00\x3D\xB7\x4A\xCE\x80\x61\x84\x3D\xA3\x86\x31\x01\x0E\x0D\x31\x49\x04\xEB\x8F\xB2\x86\x32\xB9\x27\x20\x7C\xD3\x8A\x10\x81\x8B\xF0\x87\x47\x80\xC9\x5C\x1A\xE3\x8E\xB8\x45\x3E\x94\x87\x49\x24\xC8\x81\x7B\x49\x50\x09\x04\x00\x9E\x3E\xAD\x68\x2B\x4B\x25\x7E\x3D\xB2\x84\x9A\x73\x83\x76\xD9\x60\x00\x9D\x72\xBA\x61\xC2\x62\x72\xD2\x21\x74\x87\x0F\xA9\x88\xE7\x8F\x70\x8B\x7C\x5F\x82\x02\x05\x28\x83\x3C\xBB\x70\xA9\x71\xFC\x8A\x40\x8B\x78\x2E\x72\x77\x54\x37\xAD\x70\xB0\x72\x4F\x09\xC4\x69\x72\x11\x92\xE2\x83\x41\xB0\x85\xFD\x8D\x17\x7C\x06\x83\x48\x09\x04\x0C\x93\x40\xA7\x70\x4A\x7E\x17\x8C\xBC\x54\x71\x0D\x3B\x41\x1A\xEE\x0F\x0B\x6F\x5B\x25\x85\x69\x03\x61\x3E\x90\xA7\x1C\xDF\x6A\x02\x2C\x40\x11\x9C\x69\x41\x91\x54\x12\x40\x64\x12\x66\x51\x11\x67\x44\x64\x04\xBA\x5F\xCE\x27\xB9\x00\xA4\x48\x91\xC3\x0A\x43\x5C\x20\x6F\x53\x76\x73\xFC\x85\xCF\x68\x54\xF0\x6B\xA6\x17\xC5\x74\x54\x54\x93\x70\x0B\xEB\x4E\x4F\xD2\x0E\xEF\x29\x60\x7B\x59\xE8\x88\xF8\x52\xCF\x4D\x8C\xF9\x71\x5B\x76\xD7\x53\x69\xAF\x2F\xF3\x4A\x9C\x60\x91\xA3\x81\xA5\x15\x0A\xAC\x74\x7B\x5A\x15\x61\x39\x1F\x90\x0F\x87\xA9\x83\xB2\x6E\x82\x1D\x2E\xCA\x28\x15\x3C\x64\x61\x92\x52\x0B\xEB\x66\x56\x8D\x6A\x0D\x9E\xAD\x5C\x1F\xD1\x1F\x7B\x0F\x8C\x56\x82\x75\x90\xA7\x10\x44\x91\x92\x54\x10\xEC\x57\x2D\x49\x04\x97\x90\x13\x64\x49\x95\x91\x89\x56\xA6\x1E\x41\x8E\x84\x72\x6A\xA5\x87\xBE\x6E\x82\x5D\x93\x0E\x9D\x2F\x3D\x90\x9B\x93\x70\x03\x49\x85\x61\xF2\x10\x1C\x6C\x3E\x49\x04\xAF\x92\x26\x9C\x4A\xB6\x91\x25\x54\x09\x04\x46\xB1\x2E\x32\x7E\x8C\x69\x46\xB1\x73\x01\x74\x3E\x75\x31\xA3\x5A\x70\x90\xEF\x25\x46\x88\x2F\xF2\x10\x24\x93\x4B\x92\x92\x66\x16\x26\x8F\x54\x06\x61\x34\x00\x06\x91\x10\x1A\x90\x85\x90\x48\x07\x47\xB6\x8E\x82\x7B\x04\x75\x85\x6A\x82\x7C\x91\x28\x9E\x47\xA3\x92\x5E\x62\xC7\x2C\x2A\x83\x0B\xC6\x93\x26\x82\x4F\x2B\x92\xE2\x91\xA5\x1D\xCB\x42\x49\x09\x04\x3A\x92\x4B\xA5\x93\x9C\x1B\x21\x97\x12\xAA\x85\x80\x84\x23\x92\x7B\x0D\x32\x12\x7F\xFE\x8A\xCB\x6E\x5A\xBC\x72\x0C\x0C\x0D\x27\x04\xFB\x93\x95\x8E\x50\x60\x89\xCE\x8B\x30\x76\x28\xB9\x07\x88\x88\x08\x0A\x28\x8F\x6F\x66\x7D\xA3\x82\x02\x2D\x89\x9A\x61\xBE\x62\x27\xB4\x89\x01\x95\x97", +"\x83\x50\x92\x2A\x78\x89\xA2\x8A\x27\x88\x94\x7C\x8B\x9A\x8E\x28\xBF\x89\x6F\x89\xAC\x69\xCB\x4F\x61\x0A\x6D\x44\x92\x26\xA9\x6A\x87\x89\x45\x96\x50\x97\x94\x69\x89\x42\x9A\x51\xB5\x86\x7F\x6E\xDB\x78\xCB\x43\x73\x51\x89\x97\x80\x87\x4A\x03\x27\x04\x4D\x9E\x4F\xAB\x60\xA3\x88\x35\x94\x68\x71\x68\xA6\x8B\x42\x88\x29\xB2\x87\x21\x8B\xA6\x8F\x2A\x9D\x8A\x3B\x07\xAC\x8F\x94\x52\x8A\x39\x94\x74\x55\x27\xA2\x92\xCD\x71\x00\x7A\x2A\x84\x70\x83\x90\x46\x9B\x51\x5C\x8A\x51\x56\x35\x73\x2B\x9A\x73\x17\x0D\xFF\x2B\xCD\x47\x86\xE2\x72\x41\x0D\x55\xBA\x52\xE4\x71\x49\x56\xCE\x7F\x76\xD7\x52\x62\x78\x2E\xA9\x7B\xFA\x73\x04\x74\xD9\x52\x76\xA0\x92\xBA\x6C\x54\xB9\x6A\xF6\x70\x1B\x9A\xCF\x4E\x46\x06\x76\x3F\x7A\xD0\x7E\x74\x6B\x76\xC3\x87\xAB\x45\x74\xFC\x73\x41\x77\x31\x09\x74\x93\x34\xA0\x2D\xD0\x52\x57\x9C\x29\x03\x20\x4C\x57\x34\x2F\x06\x9A\x74\xD3\x18\x34\x0E\x5E\x06\x0C\x02\x4E\x96\x9C\x58\x62\x94\x07\x3B\x7A\x8D\x4E\x1B\x08\xD1\x2B\x84\x41\x75\xFC\x73\x30\xA1\x8E\x9B\x8E\x41\x3F\xE2\x46\x62\x9B\x96\x7B\x52\x3A\x83\x6B\x64\x75\x6D\x7C\x00\x8B\x96\x89\x94\x43\x52\x59\x94\x96\x95\x07\x17\x0E\x38\x60\x6D\xE8\x8A\x66\x98\xD1\x6E\x56\x06\x7F\x88\x62\xE5\x70\x70\xA1\x95\x6D\x94\x11\xB7\x7F\xA6\x94\x08\x02\x59\x99\x78\x10\x34\x1B\x0E\xE1\x41\x97\x0E\x5E\x15\x0C\x02\x46\x97\x91\x95\x40\x3D\x26\x2C\x96\xFD\x06\x4F\x72\x02\x33\x4A\xD8\x1B\x36\x54\x99\x69\x7F\x92\x64\x6B\x79\x5B\xA2\x8E\x9F\x97\x6C\x57\x5D\x9D\x96\x34\x78\x23\x69\x57\xAD\x91\x20\x02\x5B\x79\x7F\x67\x96\xFD\x04\x6E\x7A\x5A\x8A\x97\x44\x04\x73\x90\x13\x0E\x97\xD0\x97\x6A\x02\x5D\xB0\x93\x1D\x55\x75\x92\x5B\x83\x29\xF6\x26\x6E\x9D\xE0\x77\x96\xA0\x97\x6C\x9B\xD5\x63\x96\x13\x7B\x77\x9F\x4B\xBF\x6B\x15\x65\x79\x95\x77\x12\x74\xA1\x94\x25\x53\x10\x14\x52\xDA\x8A\x8C\x09\xD1\x48\x89\xC1\x5D\xF6\x24\x7C\x61\x96\x3E\x02\xF1\x51\xD3\x4F\x5A\xDC\x8B\x90\x2D\xCB\x76\x3D\x61\x86\x9E\x12\x2E\xA3\x27\x3C\x77\x18\x0E\xD3\x41\x66\xB1\x94\xDA\x87\x4E\x75\x8B\xED\x8A\x34\x6F\x2E\xB0\x86\x4C\x76\xBA\x84\xD5\x65\x98\xD7\x51\xBE\x8C\x2E\xBB\x8B\x85\x6D\xBF\x8A\x5F\xA0\x75\xD8\x97\xCB\x89\x60\xAE\x27\xB4\x94\x7F\x9F\x08\x87\x8C\x84\x59\xC2\x80\x69\x4B\x8C\xBD\x90\x5B\x71\x5E\xB6\x75\x70\x76\xC4\x80\x80\x36\x1F\x74\x76\x1B\x90\x31\x94\x66\xA4\x8D\xC6\x85\x5C\x7C\x75\x48\x78\x43\x53\x2E\x97\x53\xD2\x5F\xB9\x87\x05\x99\x96\x22\x98\x37\x5B\x62\x91\x75\x8E\x8B\x89\x97\xB0\x5E\x8D\xC6\x58\x89\x9C\x65\xB8\x8B\x2B\x98\x8C\x98\xD5\x72\x98\xF4\x95\x8E\x9C\x5D\x86\x5F\x5E\x77\x8C\x9A\x39\xBE\x8E\x64\x74\x5A\x96\x4D\x7E\x98\xC0\x54\xC3\x8E\x4B\x8A\x99\x16\x8D\x91\x92\xD7\x48\x99\xFF\x97\x73\x5C\x64\x98\x8C\x93\x80\x8B\x2C\xB8\x2B\x29\x71\x77\x19\x2E\x15\x21\x3C\x85\x9B\x2C\x2E\x70\x7E\x02\x5E\x3C\xA3\x97\xE2\x68\x8E\xF6\x50\xEC\x6F\xA2\x46\x5B\xB6\x59\xE1\x1B\xAA\x57\x53\x0D\x82\xB5\x49\x15\x30\x86\x2F\x68\x8E\x88\xAA\x55\x9A\x22\x23\xA5\x92\x02\x14\x57\x50\x03\xA6\x95\xB8\x56\x97\x6E\x98\xC1\x8E\xDA\x76\x98\xDB\x94\x9C\x97\x46\xA2\x5F\x15\x7A\xA1\x9F\x15\x1F\x19\x44\x64\x7E\x78\x3A\x8C\x21\x36\x99\xAC\x94\xDF\x74\x9A\xD6\x50\x12\x23\xE0\x73\x9A\x62\x05\x77\x9E\x5F\xB8\x99\xC0\x93\xE9\x82\x6B\xA6\x97\xDF\x78\xA4\x96\x4D\x52\x9A\xC0\x80\xA5\x98\x3A\xA2\x9A\x99\x99\xA9\x95\x58\x66\x8D\xBF\x82\x29\x8E\x69\x8E\x9B\xB2\x9A\xA8\x94\x6A\xA6\x9A\x58\x74\xAA\x99\x66\xBB\x97\x6B\x98\x7E\x9A\x5D\xA9\x9A\x9C\x96\xAB\x90\xDE\x70\x9A\xB6\x9A\xAC\x9E\x64\x35\x9A\x4A\x1B\xAD\x9F\x65\x25\x65\x86\x62\xAE\x98\x87\x2B\x9B\xBD\x99\xBA\x9B\x6B\x81\x9B\x75\x6B\xB0\x93\x64\x90\x8C\xC5\x68\xEA\x82\xD0\x1F\x16\x6F\x5B\xA3\x5E\xE1\x75\x74\x64\x5F\xB7\x83\x10\x21\x8B\x37\x9A\x34\x94\x2E\xBD\x74\xF4\x65\x88\x98\xAA\x62\x99\xF7\x88\x52\x78\x62\x99\x99\x10\x9E\x62\x6E\x62\x95\x75\x06\x08\xBF\x83\x95\x64\x9B\xA2\x97\x9A\x9D\x66\x9F\x9B\x34\x9B\x9A\x93\xE1\x7C\x98\x8C\x59\x8C\x2F\x63\xB8\x57\x76\x9A\x90\x92\x5E\x91\x8C\x7B\x98\xC5\x84\x6C\xBF\x6B\x7F\x9B\x36\x5E\x64\xA0\x00\x8F\x5B\x0A\x10\x04\x1A\x95\x6C\x93\xB4\x5C\x46\xBC\x77\xBA\x03\x49\x0D\x73\x81\x78\xF8\x72\x43\x55\x39\xA9\x62\xDE\x09\x9F\x9C\x39\xA9\x56\x35\x64\xAB\x18\x40\x24\x07\x6C\x00\x24\x84\x3A\x84\x79\x5C\x90\x3E\x7E\x2D\x34\x54\x6C\x92\xD0\x9B\x4D\x6D\x83\x45\x9F\xCB\x94\x11", +"\x88\x9D\x7F\x7A\xD2\x9E\x6A\x0D\x9D\x65\x77\xD3\x96\xE6\x54\x78\x52\x9E\xA3\x2F\x87\x31\x75\x0A\x20\x92\x9D\x7B\x46\x99\x73\x74\x7F\x7C\x35\x49\x04\x6F\x9C\xAD\x5C\x76\x88\x99\x91\x9B\x35\x54\x02\x2F\x97\xEF\x4E\xF1\x42\x3F\x6C\x43\x24\x46\x6F\x7D\xB6\x41\x99\x7A\x97\xBE\x96\x31\xBD\x9B\x69\x9E\x00\x2F\xF2\x03\x34\xE6\x58\x60\x77\x76\x82\x76\x34\x00\x61\x72\x10\x06\x76\xAC\x40\x5B\x69\xD8\x46\x05\x98\x95\x64\x5B\xE2\x6F\x87\x3C\x58\x3C\x71\x51\xB8\x8C\x20\x71\x6F\x9B\xD9\x70\x35\x9D\x74\x65\x10\xDA\x4D\x16\xBD\x72\x8B\x8F\x74\x05\x82\x94\x14\x6A\x7D\x58\x15\x9E\x64\x96\xFC\x73\x15\x86\x62\x8D\x83\x6E\x9D\x85\x7A\x59\xBD\x97\x6D\x7C\xD9\x40\x51\x6F\x5A\xE8\x99\x77\x61\x76\x36\x02\xE9\x94\x10\x28\x9E\xBA\x77\x35\x5C\xDB\x4E\x9C\x33\x7E\xC7\x9B\x08\x9C\x5F\x56\x86\xC1\x85\x7B\x89\x77\x76\x2F\x72\x75\xE9\x4D\x77\x95\x79\x2F\x72\xDD\x46\x04\xD3\x9E\x2E\x54\xDD\x65\x54\xD6\x74\x7C\x91\xD4\x72\x99\x20\x03\x91\x63\x74\x9D\x77\x61\x0B\x77\x79\xA6\x5B\x5F\xE2\x75\xF8\x96\x42\xA5\x77\x90\x81\x4D\x68\xDE\x55\x32\x7A\x33\x73\x50\x75\xB5\x7E\x32\x1B\xB3\x73\xB9\x2A\x52\xF2\x99\xE1\x15\xDF\x4F\x21\xF7\x75\xBB\x9A\x6E\x9F\x19\xB0\x5C\x52\x83\x10\x0A\x85\xF9\x9F\x7C\x73\x6F\x9F\x19\x06\x7B\xED\x85\xA9\x71\x5B\x5F\x7F\x3C\x75\x0C\xA3\x90\x10\x7A\xB9\x9F\xAE\x76\x9B\x03\xA2\x58\x09\xE1\x4A\x79\x1D\x78\xA1\x94\x81\xA2\x78\x74\x85\x89\x79\x35\x9F\x78\x1D\x05\x8A\x76\x4D\x66\x77\x3A\x94\xBB\x9D\xFE\x70\x9B\xC1\x7B\xDB\x13\xE3\x43\x6B\xC7\x8F\x2A\x69\xE3\x4D\x69\xF1\x80\xE7\x51\xE6\x64\x12\x40\x7B\x8E\x7F\x7E\x85\x6B\x68\x79\x7C\x19\xE4\x5B\x78\x4B\x7B\x07\xA0\x09\x9B\x57\x55\x78\x09\xA1\x82\xB5\x9B\x26\xA0\x94\x78\x82\x9B\x53\x4A\x6A\x0A\xA9\x3C\xAC\xA0\x64\x7B\x97\x73\x13\x65\x35\x62\x78\x12\xAB\x3C\xAC\x77\x67\x7A\xE5\x11\x79\x13\xA0\x38\xA1\x05\xA6\x18\x5C\xA0\x73\x01\x88\x70\x7B\x66\x78\x06\x04\x17\xAF\xED\x55\xA1\x96\x7A\x0E\xA4\x72\x80\xA1\x23\xA2\x8D\x91\xE3\x42\x7B\x42\xA3\x95\x70\x6A\x45\xA1\x5A\x7B\x0A\xAC\xE5\x6D\xA0\x3D\x78\x13\xA0\x83\x8A\x8F\xD7\x2C\x14\xA2\x5D\x5E\x2E\xC8\x98\x16\xAE\x81\xA7\x9B\x25\xA1\x19\xA4\xFF\x6A\x7B\x68\xA1\xCD\x85\xE3\x57\x9D\x6C\xA2\x37\x8E\x86\xA0\x83\x2B\x0A\x12\xAF\x82\x91\x09\x74\xA3\x2B\x66\x87\xB4\xA0\x52\xA0\x92\x79\xC5\x76\x79\xEB\x22\x9B\x76\xE8\x6B\x23\xBD\x72\x9C\x73\x10\x34\x79\x4B\xA0\x75\x37\xE7\x56\x53\x22\x76\x85\x2C\xE7\x43\x35\x7E\x7B\x5F\x8A\xD2\x5C\x9F\x47\x69\x6F\x94\x89\x9B\x0D\x58\x70\x8A\x84\xE9\x72\x18\x8C\x7A\x7F\x1E\x5E\x3D\x72\x92\x7B\x40\x02\xE9\x7A\x52\xAF\xA2\x7B\x17\xE9\x7C\x04\xAC\x9F\x18\xAD\x7D\xAB\x57\x9E\x79\xCA\x8E\x12\x83\x65\xA3\x78\x15\x46\xEA\x48\x18\x67\x01\x4C\x75\xEA\x67\x7A\x09\x18\x30\x5B\x8C\x88\xA3\xFC\x74\x08\x0E\xF5\x12\xA3\x9C\x5B\x33\xAC\xAA\x09\x18\x56\x9E\x9E\x55\xE4\x79\xA2\x13\x19\x8E\x78\x6D\xB7\x17\x4B\x18\xCF\x74\x03\xB8\x66\xDF\xA1\x82\x18\xA7\x51\x55\xA8\x58\x07\x64\x53\x56\xA3\xF7\x16\xD5\x92\x63\x79\x08\x20\x7F\x36\xA2\x8B\x9D\xA3\xC9\x8D\x39\xA8\x5F\x1B\x08\xA7\x5F\x13\x8C\x83\x50\x66\xF6\xA3\x39\xA5\x50\x69\xA3\xF4\x63\x3A\xA7\x8C\x97\xA3\x67\x02\x3B\xA2\x20\x8E\x6A\x9F\x5A\x36\xA8\x52\x5C\xA3\x63\x31\x3D\xA8\x75\x43\x1E\xE0\xA0\x3E\xA2\x03\x9E\x5D\xE4\xA3\x43\xA8\x8C\xBE\xA3\x8E\x88\xC4\x00\x90\xB8\x55\xEC\xA0\x36\xA1\xA1\x66\x56\x2C\x62\x59\x67\x90\x87\x84\x20\x62\x42\xA2\x5D\x4C\xA4\x73\x31\x7C\x1F\x69\x88\xA3\xE1\xA2\xDA\x70\x05\xBC\xA3\x16\xA4\x41\xA8\x91\xAC\x94\x74\x03\x46\xA0\x4F\x4A\xA3\x03\xA7\x7D\x1E\x8C\xB9\xA4\x09\x18\xEC\x56\x0A\x2C\x40\x3F\xA5\x35\xAC\x93\x85\xA4\x1F\xA6\x9E\x51\x92\xB2\xA3\x3F\x18\x3D\xA8\xB9\x2B\xA4\x04\xA5\x4B\xAE\x04\xAB\x7D\xAA\x5C\x6E\x5D\x8F\x96\x30\xE8\xA1\x0F\x8A\x8E\x8C\x54\x1D\xA4\x51\xAB\x0D\x9F\x6D\x28\x87\xA7\x53\x76\x9D\x53\x28\xA4\x15\x33\x28\x0C\xA5\x11\xA5\x8E\x02\x8E\x9E\x58\x87\x5B\x54\xAA\xC1\x10\x6C\x1A\xA6\x55\xA1\x90\x98\xA5\x43\xA5\x36\xAF\x8E\x98\x05\xA6\x57\xF6\x53\x92\xB7\x80\x5F\xA5\x28\x73\x8F\x8D\xA4\x4B\xA6\x3D\xAE\x94\xA3\x9A\xFA\xA0\xDB\x70\x93\xA6\x7D\x10\xA6\x39\xA4\x95\x92\x63\x6D\xA6\x09\x60\xFC\x7D\x01\xA9\x78\xBD\x7C\xEA\x78\x9F\xE0\x79\xBD\x7C\x6E\x3D\x72\xDC\x7B\x40\x0E\xED\x47\x4F\x8E\xA5\xAF\x74\xEE\x7D\x7A\xBD\xA0\xF7\x9B\xEE\x62\x00\xC4\x7B\x0F\xA1\x70\x53\x1C", +"\xC7\x79\xBC\x74\x3A\xB3\x7B\x18\x1F\xB4\x79\xED\x77\x7B\x8D\xA5\x6A\xA1\xEE\x6C\x1B\xD6\x7A\x6B\xA2\x99\xB2\x7A\x37\x01\x65\xA2\x10\x17\xA6\x91\xA6\xAE\x75\x4B\x93\x7E\xDA\x9C\xB0\x7C\xE2\x41\xA2\xEC\x78\x0E\x84\x22\x25\xA6\x20\x7D\x6F\x99\x9B\x8E\x7B\x75\x1F\xDB\x7A\x6A\x31\x7D\x32\x02\x0D\x03\x08\x9B\x20\x85\x81\xF4\x57\x08\xB1\x7F\xB1\x9D\x83\x7F\x87\xB6\x97\xB7\x57\x8E\x9E\x5B\x62\xA6\x7B\x83\x93\x90\xF1\x55\x82\x3B\x2A\x32\x9B\x34\x18\x82\x7F\x16\x78\xAE\x8D\x42\x91\x31\x01\x0D\x0E\x4C\x80\x00\xD0\x91\x2A\x96\x48\x84\x8F\xC0\x83\x7B\x89\x47\x98\x93\x9B\x9C\x84\x79\x33\x80\x92\xB0\x81\x54\x9C\xE6\x2A\x41\x75\x45\xE5\x21\x1B\x1E\x78\x7E\x2E\xAC\x71\x03\x01\x73\x03\x05\x30\x7A\x4B\x41\xA8\xE3\x78\xF1\x8E\x9F\x91\x54\xDC\x5B\x95\x95\xA9\x58\x79\xF0\x81\x12\xA2\x0F\xB1\x57\x0B\xAB\xBD\x71\xD3\x4A\x9E\x5F\x25\xE4\x94\x33\xBC\x77\x8E\x9F\x68\x45\x08\x88\x76\x25\x55\x3A\x7D\xA0\xA6\xA2\x50\x57\xE5\x9A\x0D\x99\x9E\xD9\x92\x5B\x9B\x4D\xAC\x67\xA7\xA7\x44\x5F\x79\x98\x2E\x5A\x96\xEE\x95\xF1\x4E\x83\xA4\x9D\x0C\x0E\x7B\xB7\x22\xC0\x9C\x63\x0A\x7A\x8C\x06\xA0\x58\xF1\x98\x7C\xB3\x7F\x75\x81\x70\x79\x7C\xBC\x68\x2D\xA8\x08\x06\x7B\xBD\x75\x88\x9E\x2A\x5C\xDC\x67\x9D\xCE\x75\x0C\x03\x7D\x83\x04\xD5\x9C\xC8\x45\xE9\x7B\xA2\x70\x01\x8F\xAE\xA0\xBB\xA0\xDA\x83\xC7\x7A\x16\x9E\x77\x26\x93\xF8\x97\xDD\x63\x77\xE7\x9C\x1F\xAA\x16\xAB\x9F\x3E\x11\xFB\x9E\x5D\x73\xA0\x9D\x7D\xFC\x93\x68\x97\xA1\xBF\x98\xA2\x9F\x6B\xBC\x77\x8E\x9A\x41\x01\xA7\x89\x9B\xB2\x99\xDD\x93\x98\x53\x9A\x31\xA7\x2C\x20\x6D\xB6\x33\x79\x10\xB7\x91\x2F\xB7\xA9\xC0\x83\xB5\x99\xA7\xB8\x21\xDA\x9A\xC1\x5E\xA7\xA3\x66\xDE\x8C\x9A\x9E\xD2\x60\x9B\x0B\xA1\x7E\x90\x72\xAF\x99\x43\xA8\xF8\x57\x79\xB5\x9F\x22\x20\xBD\x90\x02\x3E\x9A\xEE\x98\xBE\x90\xA7\x54\xAA\x4B\x20\xAF\x97\xA9\x90\xA0\xF6\x9F\xBB\x99\x6F\xB2\x95\x5A\x9E\x77\x5D\x6F\x87\x9B\x75\x1D\x92\x7A\x6C\x80\x6C\x78\xA8\x61\xAF\x6C\x9B\x84\x98\x98\x9F\xAA\x69\x93\x9B\x7F\xA9\xB5\x94\x2A\x99\x99\xA0\x9B\x8E\x05\xA8\x85\x11\x87\xA9\x64\x69\xA8\x9B\x9C\x8F\xAA\xAA\x90\xA4\xB8\x96\x1C\x9C\x76\xAD\x5D\xBC\x68\x93\xA8\xA8\xA5\xA9\x9E\xAA\x98\xAB\xFE\x9A\xA9\x83\x71\x9C\xAA\x7E\x7C\xAC\x8A\xAB\x9D\xA8\xBE\x9B\x88\x7A\x9B\x2B\x9F\xA9\xA3\x8B\x2B\x10\x1E\x79\x9B\xAD\x4E\x09\x9A\x78\x20\xEC\x5E\x05\x2C\x40\xE3\xAB\xA3\x95\xA7\x8B\x9B\xBB\x65\xAB\xAE\x54\x79\xAA\x62\x20\xAC\xA2\xFD\x72\xAA\xD2\x98\xA7\x9C\x87\x43\x5C\xB8\xAB\xAB\xAD\x13\xA3\x9A\x86\xA8\xAD\xA7\x9C\x5E\x9B\x8B\xA9\xC8\x9D\xA8\xA3\x9B\xC1\xA9\xB9\x91\xA9\xAF\x9A\xB3\x55\xB4\xA7\xE1\x62\xA0\xBF\x98\xAE\x9B\xA9\x94\xAB\xD2\xAA\x58\x08\xB0\x99\xAA\x72\x2B\xA8\xA7\x67\x82\x9E\xC5\x9B\x22\x98\xAA\x91\x3B\x19\xAB\x27\x25\x78\x3D\x5E\x1A\xAE\x08\x2C\xDF\x57\x49\x09\x04\xC8\xA4\x6B\x5D\xAC\x3B\x0A\xEF\x72\x71\x2B\x97\xB8\x58\xA9\xA4\xB1\x80\x98\x13\x54\xC9\xA8\x86\x20\x9E\xB8\x9E\xB9\x5E\xB9\x13\x5B\x9E\x2C\x7F\x7D\x4F\x86\x04\x37\xAF\x17\xA8\x3C\x05\x73\xE0\x06\x95\xA4\xA2\x91\x56\xF3\x5B\x05\xA8\xAA\x61\x24\x51\x56\xE7\x23\x98\xAB\xAB\xF6\xA9\x64\x50\x54\x5B\x18\x2B\x54\x5E\x5E\xB9\x25\x73\x9C\xA7\x88\xAC\xD8\x69\x53\x41\xAC\x18\xA3\xB4\x9A\x1A\xF6\x69\x39\x87\xB4\x9B\x54\xEC\xAA\x57\x0B\xA7\xA3\x57\xF1\xA8\x3C\x5A\x55\xB3\xAC\x79\x5D\xCD\xA2\x03\x17\x88\x03\x07\x85\x8A\xB3\x9D\x04\x50\xAE\xD6\xA2\xB5\xBE\x76\x9E\x99\xD5\xA0\xE2\x6B\x30\x57\xAD\x6B\x65\xB0\x5A\xAD\x69\xA7\xA0\xA6\x69\xAE\xAB\xDB\x9B\xB4\x9F\x24\x80\x0A\xBB\x70\xA0\x0C\xDF\x7A\x01\x27\x04\xE1\xA6\x87\x40\x0A\xA8\x74\xA0\x0E\xB3\x93\xAD\x2A\x76\x84\x6A\x86\x40\x0A\x88\x0D\x10\x0C\x5A\x6E\x2D\x84\x63\xE3\xAD\x92\x2D\x01\x92\xAE\x35\x54\xB9\xA2\x83\x3E\x5C\x3C\x2E\x8D\x98\x5D\x44\xAC\x62\xA5\x2E\x21\x05\xD0\x58\x2E\x70\xB8\xB8\x93\x82\xAE\x0C\x03\x09\x27\x04\xAB\xAF\xE1\xA3\x22\x05\x55\x45\x06\xCB\x0A\xB8\xAF\xAD\xAB\x76\xE3\xA7\x93\x16\x06\x99\xAC\x08\x0B\xB9\x94\x68\xB7\xAC\xE6\xA3\xB9\x8A\x06\x50\x68\xEF\xA0\xB9\x8A\x06\x42\x03\xEF\xA6\x8F\x1C\xAE\x22\x7E\x40\x2D\x97\xA0\xAE\x58\xAD\x3C\x61\xBB\x8A\x54\xCC\x53\x9A\x71\xD3\x6B\x79\xFC\x74\xCC\x49\x10\x16\xAF\xB4\x5B\x9A\x7A\xFC\x52\x13\x8B\xAC\xDC\xA8\xE5\x6B\xA2\x26\x92\x35\x5E\xDB\x1B\x0D\xCC\x8C\x4A\x5B\xE6\x72\x9F\xE1\x32\xCC\xA9\x99\xA5\x83\xB1\xA6", +"\xC2\x1B\xEA\x7D\x7A\xFC\x76\x6D\xA1\x10\x38\xA6\xEB\xAF\x6A\xAB\x99\xAE\xAD\xBD\xA4\x96\xA4\xE5\x40\xA7\xA0\xA6\x70\xAC\x18\x04\xA7\xF2\x78\x97\x55\xBF\xB6\x7B\xAC\x3A\xB9\x5A\xE7\x73\x16\x1E\x7B\x01\xB0\x13\x3C\x77\x71\x4D\x42\x0D\xC0\x93\x7A\x16\x2A\x43\x50\x04\x1D\xAF\xD6\x50\x6A\x12\xBF\x6B\x16\xE9\x9F\x95\xA9\xA6\x72\x8F\x2D\x73\x8D\x5A\x46\xA7\xA4\x16\x29\xB7\xAC\xD4\x2E\xA9\x4C\x35\xFC\xA5\xEB\x45\x82\x9E\x2C\xC1\x1B\xBD\xB8\x4C\x51\xA0\xC0\x3C\x8A\xB5\xAD\xF3\x65\xAC\x8C\xC2\xB1\x6A\x29\xB3\x27\xA7\x4F\x54\x4B\x44\x4E\x3A\x60\x89\xAE\xB0\x3E\x07\x63\x51\xBA\x97\x53\x4F\x00\x0E\xB6\x7F\x03\x89\xAE\xA3\x5E\xA0\x14\x31\xA2\x49\xA4\x80\x1C\xDF\x75\xA2\x52\x19\x21\x81\x96\x94\xA9\x14\xB0\xA0\x7C\xD2\x41\xA3\x6D\x94\x8D\x82\xA7\x45\xA3\x59\xA7\xEA\x88\x8D\x6A\x88\xBF\x60\x1C\x62\x03\x3F\x83\x06\x04\x18\xBA\x3D\xB2\x88\xE4\x6B\x59\x8D\xAC\x7A\x59\x78\xA5\x16\x9C\x79\xAF\x84\xF7\x51\x4C\x89\xC9\x56\xA7\x34\x86\x42\x82\xAA\x55\x84\x3C\x83\x45\x82\x55\xBB\x69\x16\x30\xB4\x90\xA8\x42\x6A\x8F\x69\x48\x84\x16\x9A\x57\x70\x6F\xA2\x60\xA6\x68\xB1\x29\x85\xFA\x6E\x70\xAC\x82\x6C\xB2\x9A\x69\xA2\xB3\x69\x11\x85\x1C\xB8\x33\xB3\xB1\x57\x85\x1D\xB9\x13\xB7\xB1\xA9\x69\x1E\xBE\xAE\xBF\x84\xAC\x1A\x01\x12\x14\xB5\x8A\xA3\x60\x17\xB8\x8D\x70\x61\x33\x02\xFF\x92\x10\x00\xA0\x6F\x6F\xFE\x6C\x40\xB3\x70\xC2\x80\x20\x65\x15\x83\xAB\x9B\x71\xEF\x83\xB0\xB7\xA1\xCB\x1A\x04\x91\x3D\x94\x90\x2D\x91\x34\x83\x03\x34\x00\x75\x84\xCD\x08\x7A\xA2\x84\x80\xB2\x29\xB2\xC8\x91\xB1\xDD\x69\xC5\x22\xCB\xA4\x8F\xD2\x8C\x57\x85\x41\x92\x88\x33\x01\x0D\x09\xCB\xA5\x2B\xBB\xB3\x1F\xB3\xAE\x63\x62\x66\xB3\x13\x74\xBB\xAB\x85\x59\x83\xCD\x13\xCC\xBA\x8F\xC5\xB0\x84\x87\xCC\xAB\x88\x33\x01\xEF\x97\x12\x30\x88\xA5\xB0\x49\x87\xAB\x4D\x15\xE7\x6A\xD7\x75\xC5\xAD\x75\x43\x07\xA1\x18\x04\x97\x86\x8F\x3A\x7E\x8A\x52\x9C\x86\x18\x18\x11\xBB\x42\xA6\x8F\xB5\xB2\x51\x83\x03\x37\x00\x5C\xA2\x5D\x8B\x81\xA1\xB3\x66\x84\xE1\x5F\xAF\x6C\x86\x06\x6E\x7A\x86\xB0\x54\x9B\x23\xA5\x6B\x84\x1B\xB6\x86\x03\xB5\xF8\x67\xCE\xA0\x00\xBA\x85\xC6\x69\x71\x5B\x6C\x20\x8A\x52\x0C\xC7\x79\x85\xAC\x6E\x7E\x50\xD0\x99\x99\xE3\x85\xDB\x8C\x69\x9C\x6E\x06\xB5\x82\x8C\x96\x99\x1B\x14\x6D\x7D\xAB\x40\x8D\xB4\x57\x67\x43\xBD\x1B\x99\x8A\xAA\x8C\x27\xBA\x89\x5E\xB2\x6F\x63\x0C\x08\x03\x27\x86\x06\x04\x4C\xB3\xC6\xBD\xB2\xE2\xB3\x68\xAF\xCF\x8F\x6D\x01\xB6\x47\xBF\x1A\x9F\x99\x77\xA9\x48\x96\x33\xAE\x86\x19\xA4\x48\xB8\x1B\x96\x6C\xA7\x24\xC6\x65\xD2\x8C\x80\x10\xB6\x9F\x32\x0B\xAA\xB4\xBF\x60\x4B\xBB\x89\x79\x00\xC8\x87\x40\x08\x1C\xB3\xB4\xCF\xB2\xB2\x6F\x56\xB2\x69\x24\x6D\xCA\x8A\x0D\x8F\x87\x2A\x6F\x52\xBB\x38\xBC\x8F\x52\x24\xC8\x84\x03\x32\x61\x5E\x3E\x1F\x0A\x61\x9B\x90\xCB\x85\x5D\x6F\x1D\x89\x6F\x40\xB5\x7F\x85\x1E\x80\x88\xD6\x6C\xD8\x6A\x1E\x84\x6D\xBE\x6D\x7B\x8A\xD0\x9D\x88\x05\x89\xF1\x6A\xD4\xB3\x87\x99\x6E\xE3\x6B\xBC\x62\x70\xA0\x6D\x44\xB2\xBA\x7A\xB4\xD2\x6D\x83\x85\xAB\x81\x88\xBB\x6D\xE7\x64\x20\x80\xB6\xF1\x85\xE8\x6A\xAE\x73\xB5\x45\x6E\xE9\x63\x9A\x53\xB4\x8D\x86\x29\xBB\x10\xAB\xB5\xF5\x85\x5B\xB5\xBB\x6F\xB5\x7D\xB4\x7A\x82\xD7\x84\xB6\xFD\x84\x7B\x8A\xC8\x40\x6F\xA2\xA7\xF0\x69\xD7\xBE\x86\xC7\x6D\x67\xB3\x20\x91\x6E\x8D\xB6\x60\xBF\xD8\xA0\xB6\xEB\x87\x7F\x8A\xDA\x9C\xA5\x61\x6F\x7D\x87\xDA\xA8\xB4\x57\x6C\x6C\xB4\xD7\xA5\x6E\xB2\xB5\x0A\x0A\xC5\x95\x62\xF5\xB2\x61\x84\x03\x31\x00\xBE\x00\xD6\x35\xDC\xB3\x8E\x20\x6E\x65\xB2\xB7\x5F\x87\xB1\x6F\x5C\xBC\xD9\xA7\x87\x20\x7F\xEE\x60\xD9\xB5\xB5\xA3\xB7\xE9\x67\x0A\xB8\x87\x40\x96\x99\x60\xD7\xBA\x6E\x7F\xB5\xF3\x68\xDB\x83\xB6\xE2\x85\xF4\x61\xDA\xB2\xB6\xD0\xB4\x6D\xBA\xD8\xAC\xB6\x06\x89\x76\xB0\xDE\x8E\x55\x19\xB7\x82\x8C\xDB\x86\xB6\x93\xB7\x39\x84\xD1\x8A\xB7\x6A\xB7\xDC\x69\xD9\x8E\xB7\x76\xB7\x76\xBB\xB9\x5F\xB6\xE1\xB4\x7F\x8E\xDE\x9C\xB6\xC1\x6E\x01\xA5\x3F\xBA\xB5\x8B\x6C\x74\xBA\x67\x58\x6F\xE8\xB4\x81\xB4\xC9\xAD\xB7\xFE\x84\x7C\xB3\xDB\xA3\xA4\x08\xBB\x80\xB8\xDA\x9A\x8A\xFD\xB6\x82\x8B\xDB\x92\xB6\x91\x64\x65\xB6\xA8\x5A\x88\x43\x64\x66\xBD\xDC\xBA\xB6\xCF\xB4\x78\x84\xDB\x93\xB7\x46\x6C\x6E\x8B\xD5\xB7\xB6\xEA\xB6\xBA\x6A\xDF\xB5\xB6\x8B\xB6\x77\xB9\xE2\x9A\xB6\x0D\xBA\xF9\x77\xD8\x9E\x64\x07\xBB\xF5\x6D", +"\xDD\x81\xB6\x7B\xB5\x50\x95\xE1\xBD\x6E\xEF\xB6\x8C\xB3\xD9\x8C\xB5\x5B\xB3\x36\xBD\xC5\x8F\x5C\x68\xAF\x8B\x2D\xCC\x8A\x87\x1C\xBB\xC8\x61\xA9\x65\xB6\x49\x6D\x81\x8F\xCC\x79\xB8\xB9\xB6\xAB\x88\x1D\x24\x88\x32\x82\x89\x81\x4F\x40\xB9\xC0\xB5\x58\xBD\xC5\x74\x00\x33\x03\x8D\xA0\xCE\xBC\xB2\x55\xB7\xB5\x67\xD5\x8E\x90\x4B\xBA\x52\x92\xF2\x4F\x95\x3C\x88\x25\xB4\x55\x95\xB9\x42\x8B\xEA\x5C\x6A\x79\x72\xB3\x80\x0C\x00\x4B\x72\x52\x49\x8A\xF0\x55\x9A\x0C\x89\xC3\x71\x84\x99\x06\xAF\xB9\x30\x94\x3E\x92\x25\xB4\x00\xA8\x00\x0B\x41\xE8\xB7\x94\x5F\x8B\x52\x94\x52\x84\x94\x26\x97\x41\x9F\xBE\x5A\x86\x51\x54\x43\x9D\x51\xBE\xB1\x0F\x96\xA1\xB7\x27\x92\x57\x8A\xBA\x01\x7C\xE8\xBE\x89\x67\x00\xA0\x8F\x96\x91\x8A\x20\x97\x31\x79\xCB\x53\x94\x92\x18\xA5\xB8\x52\x96\xBA\x6A\x8B\x47\xBE\x50\xA2\x8A\x74\xA7\x29\x8D\x53\x9C\x61\x3F\x96\x63\xBF\x58\x6B\xB9\x98\x9A\xAC\x84\xFD\x50\xBA\xA8\xBA\x6C\x85\x2A\x9F\xBA\x63\xBB\x99\xBD\x13\x03\x70\x69\xBB\xA2\xB2\x54\x93\xB9\xB0\x89\xAC\xB5\x54\xB3\xBA\x4F\x89\x46\x01\x03\x31\x94\xD5\x59\x0C\x07\xF5\x55\x2F\xCD\xB1\x0C\x06\x4F\x40\x8B\x5D\x88\x97\x8E\xEC\xB4\xB4\x31\x01\x55\x64\xCE\x94\x59\xE0\x56\xA9\x83\x19\x94\x78\x80\x18\x9A\x8E\xCE\x99\x94\xFA\x65\x95\xA0\xF9\x45\xBB\x70\x03\xB1\xBE\xE7\xA5\xBB\x0E\x5E\xBA\x49\x10\x2A\xBB\x63\x87\xB4\xB7\xA3\x55\xBB\xE3\xB2\x9B\x1F\x5D\x46\xBA\xDB\xBB\xBB\x6D\xED\xA7\x6A\x97\xBA\x4F\x89\x11\x0A\x54\x13\x9B\x78\x25\x61\xB7\x0B\xB0\x5E\xC1\x92\x10\x08\x9C\x53\x9B\x9D\x5C\x70\x96\x99\x3F\xAE\xF7\x81\x66\x9B\x99\x11\x9E\x97\x94\xD0\xA9\x98\xF4\x88\xC3\xB6\x71\xA5\x99\x19\x9D\x8C\x90\xAC\xBD\xAB\x90\xA8\x2B\xB0\xB0\x98\xBC\xC2\xAA\x86\x63\x72\x9C\x9F\x74\x98\x90\x98\xAD\x84\x99\xAA\x57\xDC\x9E\x72\xAB\xAC\x7E\x98\xA1\x73\x73\xB5\x9C\x37\x29\xB6\x84\x61\xA7\x9D\x35\x77\x0C\x02\xF0\x81\x04\x04\xBC\x87\x9B\x70\x9E\x98\x0D\x9F\x95\xA9\x2E\x91\xBC\x45\x77\x98\x92\x71\xBC\xB4\x32\x6B\xC2\xBD\xF3\xB7\x8B\x17\x9D\xD1\x25\xF1\xA4\xB6\x59\x75\xB1\xA3\x5A\x9F\x9C\x1C\xBE\xC0\xA8\x0C\x84\xA9\x20\xBF\x59\x7A\x30\xA8\x9C\x80\x9C\x78\x9B\x72\xBA\x99\x85\x9D\xF8\xA8\xF2\xAF\x75\x2A\xBD\xA0\x98\x2F\x2B\xA9\xDC\x44\xD0\x81\x33\xB4\x8C\x88\x9B\xD1\x80\x26\x3C\x77\x4A\x49\x42\x09\xF6\xB4\x5A\x66\xBD\x7A\x5F\xEB\x53\x76\x8B\xB3\x5A\x64\x91\x53\x54\x6D\xBF\x6F\xB5\x0B\x81\xB7\xA3\x86\x0C\x07\x03\x26\x00\x5E\x3C\xDF\xB8\xDC\xA0\x59\xD0\x64\xC0\x60\xF1\xA9\x8D\x98\x67\xDA\x8C\x37\xBC\x67\x08\x6B\x61\xB1\x9E\x58\x5D\x6A\x8F\xE0\x86\xAF\x48\xBE\x70\x8F\xDF\x93\xCF\x60\x8D\x8E\xB2\x7D\xA6\x37\xBB\x66\x78\x8E\xD9\x7A\x37\xB9\x67\xAC\x68\xE4\xBF\x37\x99\x99\x9B\xBD\x81\x6D\x36\x9E\xBE\x85\x6C\xE2\x86\x0E\x94\xB5\x22\x01\xE0\xB0\xBB\x43\xBE\xE7\x51\xE3\xB2\x36\xBA\x67\xA4\xBC\x41\xBB\xF8\xA6\x7D\xAE\xBF\xDE\x8F\xF8\xBE\x8D\x6C\x6E\x48\xB0\x42\x94\xBE\x0C\xA3\x02\x9C\x6A\x00\x6C\x99\xBE\x53\x51\xFA\xAC\x8D\x64\x8D\xE2\xB0\x20\x80\x8E\x9A\xBE\xE0\x8F\xFA\x85\x6C\xB1\xBE\x75\xB6\xFA\xB9\x8F\xF8\x4B\xFE\x83\x3D\xB8\xBD\xC3\x84\x0D\x04\x03\x17\x8F\xBB\x3F\x91\xB4\xC9\x7E\x71\xDC\x8C\x04\x72\x0C\xB2\xA7\xE0\x8F\x23\x78\xC1\x51\x8D\xF3\xB0\x58\xBC\x9C\x22\xB5\x35\x01\xFB\x83\x10\x2D\x8F\xA8\xBC\xFC\x88\x0A\x8B\xB4\xF7\xA4\x7A\xBB\xE5\x24\x14\xD7\xB1\xF4\xB9\xCD\x9D\xB2\x42\xBB\x27\xB4\x03\x36\x00\x02\x93\x40\x02\x40\xA8\xBE\x05\x92\x2A\x7F\xFE\x88\x90\x22\x91\x2B\xBD\xC2\x4D\x90\x34\x70\x04\x9C\xC4\x6A\x90\xB3\xB0\x0B\x9A\xE5\x91\x83\x34\x03\x0D\x0B\x9E\x9A\x90\x5B\x67\x73\x9D\x41\x83\xC0\x6F\xB0\x95\x56\x00\xD0\x78\x25\x90\x5D\x71\xC2\x74\x72\xA3\x70\x74\x20\x4E\xA1\xA7\xD1\x92\x1B\x0F\x08\x40\x00\x1E\x16\x79\xA6\x84\x4C\x98\x79\x05\x51\x30\x00\x04\x5F\x25\xC2\x9E\xB6\xF7\x8E\xB5\x01\x62\x03\x07\x69\x36\xC0\x7F\xBD\x32\x66\xDB\xA0\x00\xEC\x63\x78\xA9\x52\x8E\x55\xD1\x62\xA3\x83\xBD\x5C\x89\x4E\x72\x36\x6B\x8E\x5C\x63\x3E\xC3\xB7\xBB\x51\x41\xC1\x22\x03\x38\x64\x8F\x44\xC1\xDB\xBD\x3A\x6B\x8D\x67\x2B\x8B\x8B\x39\x5C\x04\xF2\x63\x77\x95\xF5\x7B\x41\xB8\x63\x52\x02\x13\x9B\xBE\x60\x00\xFD\x61\x57\xBA\x90\x5A\xB8\x5A\x6B\x40\x64\x05\x1E\xC1\x8E\x58\x42\x6E\xDA\x90\xC1\xBE\x81\x13\x92\xF7\x8F\x91\xA7\x97\x41\x49\xC3\x5B\xBF\x1D\x66\xD7\x67\x66\x70\x13\x73\xC2\x2F\x8A\x48\xAB\x64\x56\x6B\xCA\x62\xDF\x92", +"\x65\x32\x65\x07\x5A\x48\x93\x8B\x31\x33\x4E\x6D\xC4\x5B\xBF\x65\x81\x0C\x79\x68\x6C\xC1\xCC\x89\xDC\xB7\xA9\xB4\xAD\x95\x84\x21\xCB\x94\x56\x8B\x79\xC0\x53\x84\x95\x4E\x85\x43\x2A\xD7\xB5\x09\xE6\x8C\x3F\x8D\xDB\xB9\x34\xA4\xA0\x30\x8D\xAC\x3F\x09\xEE\x65\xAD\x86\x1A\xB6\x9F\xB4\x8F\x77\x67\xCE\x8E\x07\xE8\xBE\xAA\xBC\x98\x9C\xF8\x85\xBE\x8E\xBD\xE7\xB8\xFB\xB2\xBE\x59\x99\xED\xBC\xF9\x86\x68\x86\x8F\x50\xB1\x9F\x7C\xBE\x1B\xC2\xEF\xB7\xF9\xAF\x66\xA0\xBE\xF2\xB6\xFB\xB2\xC2\xB9\xC0\x41\xB8\xFC\x82\xBF\xC2\xC3\x2D\xC3\xFA\xB3\xC2\xCE\xBE\x4A\x65\xC9\x1B\xC2\x94\x8E\x4F\x7E\x39\xB2\x01\xA0\x8D\xC7\x9A\xF0\x5C\x68\x25\xBC\xE6\x83\x3B\x16\xC3\xC2\x68\xE9\x88\xB9\x66\x8E\x16\xAF\x2C\x20\x0D\xF4\x8E\xF1\xA5\x96\xA1\xFF\x7A\x8E\x8D\xB1\xEF\xB0\x42\x8E\xA0\x13\x54\xF0\x8F\xB9\x2B\xC2\x1B\x92\x8B\x65\x0E\xC2\xB8\x5A\xA9\x21\xAF\x0E\x87\xA2\x2D\xA0\x38\xC4\x0E\xAB\xA6\xE3\xC1\x72\xB5\xD3\xBF\xB2\x08\xA4\x42\x8B\xC8\x5A\x91\x68\x69\x1B\xBE\x08\xEE\x69\xA0\xC0\x01\xC9\x9D\x91\xB2\x20\x00\x9E\x65\x05\xD5\xB2\x1A\x32\x1E\xBD\x11\xBC\xB1\x5E\xA7\xF9\x7F\x07\xDB\xB8\xBE\xB0\xB3\x6C\xA8\x5D\xA5\x02\xC6\x4A\x89\xBF\xA6\xC2\xBE\xBC\x17\x60\x13\x87\xC4\x33\x86\x3A\xCD\x47\x88\xC4\xA4\x95\x09\x63\xC9\xBF\xC0\x8C\x8A\x25\xB7\xAF\x98\xB2\xAF\x69\x1F\xBC\x08\xF3\xB7\x35\xB4\x02\xC9\x3B\xAB\xB2\xAF\x9E\x23\xCC\x0E\xDE\x6B\xB1\xB1\x06\x74\xD5\xBA\x85\x00\xC6\x22\x92\xCC\xBE\xC4\x68\xB5\x20\xBA\x11\xDD\x81\x57\xA9\xD3\x76\xCD\x84\xC5\xFC\xB3\x8C\x81\xEF\xA5\xB3\x41\x67\x6A\x6B\xED\x95\x86\xEC\xB2\xB7\xBD\x2A\xA0\xBB\x05\x6D\x67\x80\x2A\x8D\xC5\x65\xB2\x3F\xBF\x5C\x57\xB4\x9A\xB5\x42\xB0\x20\x89\xB6\x1D\xB7\x8E\xB8\x98\x82\xB5\xEE\x84\x51\xBE\xCD\x07\xB5\xBE\x95\x52\xBD\x0F\xE4\x6F\x35\xB5\xCE\x8D\x1C\x97\xB7\x13\x57\xAC\x29\x3A\xB5\x88\x64\xC0\x5C\xCD\xCF\xAB\xA8\x66\x6A\x87\xB5\xB7\x60\xB8\xF9\xB7\x83\xB2\xDD\xBA\xB6\xA2\xB5\xE4\xB4\x17\xCC\xB6\xE9\xB6\x63\xB3\xE3\x9C\xB7\x3B\xC2\x8B\xBA\x18\xD0\xB6\xE4\xB6\x88\xB0\xE1\xB7\xB8\xAD\xB4\x94\xBB\xDE\x9B\x54\x0C\xB9\x64\xBD\xDB\xB3\xC4\x95\xB5\x5C\xC0\xC2\x5C\x88\x27\xB8\x62\xCF\xE4\x8F\xC4\xB0\xBA\x08\x05\xBF\x6D\xB9\x16\xC7\x4F\xC9\xE4\xA7\x6F\x37\x8A\x00\x82\xC0\x7B\x88\xED\x6E\x08\xCA\xE3\x8E\x55\xA5\xC7\x69\xC7\xBF\x5A\xC1\x15\xC3\x1F\x71\xC1\x59\xA9\xE1\xBE\x05\x7A\x52\x05\x72\x87\xC2\xAF\x8E\xFE\xA0\xC4\x20\x91\xFC\xB5\x3F\xB3\xBF\x91\x71\x70\xCD\xC7\x41\xC0\x37\x8E\x7D\xAD\xCA\x7D\xC2\x20\x92\x4D\xCE\x0A\x8A\xC0\xB6\x70\x53\xC0\xE6\x96\xC0\x3D\x73\x40\xCF\xC8\x89\x90\x0B\xB5\x07\xC7\x42\x91\x23\x0B\xC0\x3C\xC5\x01\xC8\xC5\x3F\xAF\x14\x70\x06\x95\x71\x5E\x93\x18\xC7\x11\xDA\x69\xF3\x59\x09\xC0\x04\x21\x93\xCB\x93\x38\x99\x4C\xA5\xC0\x2E\x03\x0D\x09\x49\x83\x04\x99\x92\x28\x87\x4C\x89\x91\x9D\x91\x5E\x0B\xC2\x7A\xBE\x27\xC4\x2A\xC3\x51\x65\x92\xC5\x90\x09\xCE\x9E\xA0\x04\xE4\x91\x7C\xC6\x4E\xB8\x00\xB1\x93\x40\x01\x4B\xBA\xC7\xEC\x90\x7F\xC6\x77\xB7\x92\x66\x90\x78\x78\x80\x9F\xC4\x1F\xB3\xC8\xBC\x6F\xAD\xC3\x71\x93\x30\x94\x3D\x26\x92\xC2\x0C\x2A\x9B\x1F\xC3\x0B\x99\x80\x7D\xC4\x76\x6A\x93\x03\x06\x3A\x90\x21\xCA\xC8\xED\x91\x2D\x98\x48\x80\xB3\x58\x80\xF4\x13\x4F\xB7\x72\x7C\xB9\x97\x81\x53\xB2\xB9\x36\x01\x47\x73\x10\x1D\x74\x9C\xB8\x4E\x99\xEA\xB8\x88\x22\x96\x15\xBA\xAE\x69\x8A\xBB\xB8\x6C\xCD\x13\x1F\x93\xB3\xC7\x54\x93\x54\x95\x95\xB2\xBA\x42\x57\x58\xA8\x96\x74\x02\x62\x9D\x1F\x20\x34\x74\x01\x2F\x7C\x08\x27\x04\x57\xC9\x72\x93\x25\xD6\x96\x2F\x06\x7A\x95\x06\x2E\x96\x5C\xC8\x6C\x9A\xF3\xB3\x97\x4D\xBC\x37\xCA\xF1\x97\xBC\x0A\x9A\x9A\x9E\x6A\xB4\x9E\xE6\xAC\x94\xCF\x24\xDB\xC9\x18\x36\x94\xC0\x13\x14\xC9\x5E\x71\x96\xC6\x10\x36\xC9\x75\x78\x94\xCE\x25\xE0\xC9\x97\x97\x47\xC4\x26\xE9\xC9\x8C\xA8\x1D\x82\x68\x78\x5A\xAD\x9B\x2B\xB5\xA4\xBF\x96\xA5\x27\x12\xA2\x60\x84\x05\xC3\x94\x7A\x9C\x06\x3D\x72\xAA\x03\x49\x01\x29\xDA\xC9\x30\x06\x75\x0E\x25\xEC\x97\xF5\x35\x74\x9A\x9B\x54\x97\xAD\x9D\xA1\xC7\x26\xC9\x9C\xE4\x26\x9A\xC3\xB0\xA9\xAC\x13\xAD\xB6\xA4\x5E\x95\xCA\xC8\x38\x7F\xA1\x5C\x8D\xCA\x8B\xCB\xA3\xC6\x03\x13\xCA\x06\x04\xAC\xC9\x27\xED\xCA\x97\xCB\x6E\x6D\x5E\xA0\x6D\xD3\x97\x95\xA2\x5F\xB9\x58\x9E\xC9\x4E\xC4\x28\xCA\xBD\x22\x9F\x23\x8A\x21\xC3\x9E\xA7\xCA\x85\xAE\xF2\xBE\xBB\x30", +"\xBD\xB7\x86\x03\x33\xBC\x00\x01\xCD\xB3\xA4\x1D\x98\x1F\x9A\x9F\xC4\x71\x92\xBC\xEE\x8B\x62\x00\x2F\x80\x88\xAC\xBE\x96\x93\xF4\x93\xBC\xFA\x8B\xD1\xB6\xDD\x8A\xAA\x80\xCA\xBF\xA2\x28\xCE\xAA\x65\xCA\xB1\xA9\x12\xF9\x81\x66\x76\xC9\x95\x67\x95\xBD\x46\x9E\x7B\x58\xF5\x93\x8C\x5A\xBF\xD5\xBD\xF5\x9A\x8C\x24\x29\xCB\xB8\xD2\x20\xCA\xFF\xBA\x8C\x05\x1F\xCC\xCB\xCE\xCB\xBD\x00\x2D\xF9\xBC\xE5\xC7\xCE\xBB\x51\x55\x9C\xD5\xCA\x01\x13\x71\x8F\x9C\xD4\xCA\x54\x74\xF1\x97\x75\xDF\xC8\x9A\xC8\x63\x81\xCA\x1A\xBF\xAF\xC1\xB0\xA6\xC9\x1E\xBE\x76\xAA\x07\x92\xBD\x27\x9D\x64\x59\x72\x81\x9E\xF2\xC8\xDA\x90\x2F\xC9\x99\x5B\xBE\xBB\xC3\x2F\xDE\xA7\x0A\x28\xD8\xBA\x36\x60\xAB\x85\x1E\x9B\xA8\x3A\x99\xA2\xE4\xAB\x06\xAF\x6B\xB6\xA9\xB6\xA8\x53\xAA\xA7\xAE\xAB\xD1\x99\xAF\xAB\xB3\x5D\x9A\xD1\x54\xB6\x93\x33\xF7\xAB\x7D\xAF\xD1\x6C\xAF\xA1\xCB\x19\xBD\x4E\xCE\x30\xEF\x0B\xA2\xCB\xD3\xB8\x06\xA2\xA9\x01\xA1\xC2\xA3\xAD\xBA\x9F\xF7\x99\xC4\xAB\xB0\x8C\xCD\x11\xA1\xD3\x94\x86\x8A\xCD\xD6\xAA\x83\x53\x2C\xD5\xAC\xBF\x98\xB7\xA6\x81\xA8\x8E\x2A\xCE\xAC\x9E\xC5\x65\xAB\x73\x7A\xCB\xCB\xAA\x8C\x9B\xA6\x82\xCE\xC4\xA8\xB4\xCC\xF0\xAA\xCD\xC9\xAE\x81\xAA\x39\xCE\xDE\xA1\x6A\xBC\xAD\xF9\xAA\xCF\xCF\x27\xCF\xCC\xE2\xC9\xC4\xC3\x34\xE1\xCA\x10\xCD\xC5\xC6\xDC\x49\xAB\x50\xCD\xA8\xAE\xB0\x93\xCD\x10\xAD\x42\xC6\xB0\x80\x9B\x52\xCF\xA7\xAD\x37\xCB\xAB\x55\xCF\x1A\x95\x2A\xEF\x91\xC6\x9B\xB6\xA6\x2F\xFE\x75\xA0\xC8\x81\x9D\x2D\xAC\xC0\x64\x01\xC8\x3F\x60\x9C\x98\xC6\x5F\xEC\x52\x10\x2E\x5B\xEE\x80\x2D\x25\x77\x38\x37\x27\xC1\x0A\xC8\x3C\x98\x2E\xF8\x34\x7F\x7F\x2F\x49\x04\xA7\xCC\xAD\x53\x3A\xF6\x2D\xF8\x37\xB3\xB0\x2A\xDE\x6C\xAB\xCD\x7C\x1D\x3A\xD9\x89\x54\x42\x11\xB9\x07\x37\x9C\x9D\x75\xCE\x99\x77\x7B\x9C\x33\x00\xCB\x72\x10\x2E\x7C\xDF\x96\x3B\xA4\xA1\x59\x9D\x21\xCC\x94\x6C\x75\x8F\x6B\x5E\x9C\xD3\x9E\x74\xB9\x75\x68\xAA\x65\x85\x76\x8D\x20\xB8\xCD\xCC\xA4\x7F\xB8\x73\x3A\x9C\x3E\x70\x7B\x7E\xCE\x01\x04\xF0\xC5\x75\x9F\xA4\x44\x9E\x5D\x75\xAA\x99\xA7\xC7\xCC\x63\x79\x3C\xEF\x1A\xE8\xCA\xD8\x90\x0E\xEC\x91\x05\x3A\x97\x3A\x28\xF0\x1F\xAC\xC8\xFC\x10\x7B\x51\x47\x09\x04\xFC\xC9\xBD\x9F\x1F\x0E\x55\xE9\x41\xC5\x9F\x29\x60\x9D\x6F\x99\xA5\x2F\x01\xE9\xCE\xAA\xCF\x7D\x2D\xCF\x13\x1F\xA5\x57\x0C\x2C\x40\x03\xD0\xA5\xC3\x71\x35\xCF\x10\x0F\x1B\x07\xDD\x78\xCF\x6C\xCA\x74\x5B\x3F\xD3\x9D\xE7\x95\x03\x26\x45\x95\x49\xC5\xA4\x17\x95\x25\x50\xD0\xB3\xC8\xFC\x15\xCC\x60\x04\x61\x4A\xE0\x5D\x40\xE7\xAA\x1D\xD0\x06\xDB\x3E\xC7\xD0\xCF\x64\xC6\xC1\x15\x8D\x8D\x73\x64\x5B\x95\xA4\x8E\x33\x64\x12\x08\xDE\x2D\x26\xAC\x79\x4B\x41\xC8\xC7\x7D\x96\x5F\x09\x98\x05\xF2\x16\x04\x34\x57\x0B\xDF\x9C\x72\x10\x54\x07\x09\xD4\x10\xE9\xD0\x1F\xD2\x33\xC0\xC8\x35\x10\x65\x03\x0D\x1A\x14\x2E\xD0\xF4\xCC\x4D\xBB\xC6\x86\x70\x45\xAA\xB5\x0D\x3F\xD3\x47\xAA\x50\x7A\x37\x85\x9E\x0B\x70\x62\xA8\x49\x10\x16\xD1\xF3\xCE\x04\xD5\x42\xE6\x9C\xB9\x90\x22\xB4\x8C\x81\xB0\xD3\x54\xC6\xCF\x44\xDC\x48\x51\xD3\xFF\xC4\x68\x94\xD1\xD7\xBF\x49\x09\x3D\xA3\xD0\x24\x08\x0C\xD6\x43\xC2\xA3\x28\xD3\xF9\x64\x43\xE7\xAC\x37\xD0\x1D\x00\x5C\xA6\xD1\x53\xD3\xF7\x1D\xCB\x6C\xBB\x03\x04\xBB\xB9\x41\xE4\xD0\xD7\x50\xA1\x4D\x43\xC9\xA0\xC3\xA1\x0A\xD0\x46\xFF\x31\x6B\x16\x20\x37\x44\xDF\x1F\x58\x94\x37\x7A\x4C\x5E\x73\x31\x01\x57\x93\x10\x1F\x95\xDB\x71\x39\x75\xB2\x7F\xAA\xD8\x50\xE5\x9F\x11\xE8\xA2\x6A\x94\x2F\x9E\x45\xFF\x91\x05\xAF\xC4\xAB\xCF\x4C\x74\x76\x95\x0F\xD5\x99\x7A\x9B\xE9\x62\x41\x70\xD7\x7F\x95\x7B\x96\x42\x76\xD0\x52\x66\x0E\x75\x5D\xC0\xD1\x53\x1C\x77\xD1\x03\x20\x40\xE4\x08\x5E\x72\xD1\x49\x10\x3A\xD2\x59\xD2\x06\xD5\x52\x7F\x4A\x24\x3F\x27\x99\x1B\x87\x1A\x29\x3C\x56\xB1\x57\x8B\xCE\x1B\xC8\x08\x0D\xF2\x35\xD1\xB5\xD0\xFB\xC7\x46\xFA\xD1\x37\x00\x28\x07\x12\x12\xD3\x06\xD1\x1B\xDC\x91\x4E\x14\x29\x8E\xCA\xAB\xE3\x30\x04\x03\x71\xD1\x99\xA6\x56\xB0\x97\x72\x2E\x9A\xF3\x87\xD3\x42\x98\x38\xD1\x9C\x10\x8C\xE8\x9C\x69\x55\x67\x35\x4B\xA1\xD2\x90\x94\x2F\x4E\x59\x45\x9D\x2C\xD2\xC2\x72\x38\xB9\x27\x03\x36\x9E\x9E\x0B\x16\x76\xB3\x34\x45\xF1\x00\xA2\x03\x49\x0D\x4F\xC7\x91\xFB\x3A\x0E\xD7\x4D\x60\x4A\xB7\x12\x30\xD5\x48\xDC\x93\xA8\x63\xF0\xC0\xDE\x1A\x19\xAC\x56\x7A\x38\xDF\x35\x8C\x69\x6B\xAD", +"\xCC\xF0\x6A\xAC\xB7\xCA\x41\x7D\x3C\xC4\x38\xFE\x37\x6B\x39\x78\x81\xD4\xDF\x1D\x3E\xDC\x51\xCD\x20\xB0\x5C\x34\x07\x12\x22\xD4\x00\xD6\xB8\x32\x50\xE4\x56\x5E\x07\x27\x99\xFE\x60\xC5\xC6\x5A\x6C\x2B\x11\x19\x6C\xA2\xAE\xB9\x0E\xE3\xBD\xB5\x06\x6D\xEA\xBC\x8C\x15\x4B\x59\x9A\x4B\xDB\x1B\x8B\x5B\xD4\x48\x55\x07\x2D\xF1\x8D\xF1\x64\x49\xB0\x57\xAD\xD3\x1C\xCC\xE3\xC4\x73\x86\x27\x78\xD1\xD8\xB6\x15\x1E\x0B\x2A\xCF\x3E\xD7\x29\x49\x04\x4F\xD6\xDC\x9C\x3F\xC9\xD1\x76\x9D\xF7\x43\x48\xFB\x66\x79\x74\x5C\x7A\xB2\xAB\x9C\x33\x9F\x80\x05\x20\x33\x15\xB6\xD3\xD6\xCC\x54\xDF\xAB\x4B\xD6\x1E\xD2\x03\x14\xD3\x06\x04\x5A\xD9\x6C\x82\xD4\xE8\x70\xE5\x93\xCD\xA4\x1F\x14\x13\x35\x5B\x56\x9E\x6B\xE2\x4D\xF5\x48\x01\x7B\x9D\xF4\x4E\xA1\x81\x57\xEA\xB2\xAE\xB3\xA7\xC8\x0E\xDC\x8E\x3C\x5A\x71\xA2\x4F\xBE\x1E\x52\xD2\x52\xD3\x55\xCD\x20\x4D\xD6\x1E\xD3\x03\x28\xD5\x03\x06\x5A\xD1\xD7\x6C\xD5\x65\x96\x26\xDA\x7E\x86\x05\x71\xD6\x08\x03\x57\xF9\x9D\xD6\x4C\x5E\xDD\x77\xA3\x89\x70\x00\x05\x14\x48\xF8\xC4\xBB\x8D\xE5\xBB\x40\xBE\x8E\x82\xD5\xEC\x14\x58\xDF\x1F\x69\x63\x61\x38\x06\x08\x01\x4F\x83\x0F\x6A\x5A\xEC\xD6\x4B\x58\x7F\x7E\x0F\x2C\x40\xB3\xD6\x01\xD9\xDD\x30\xD6\x64\x00\x65\x96\xD7\x1F\x92\xA9\xBC\x0F\xDA\x8E\x61\x70\xAA\xD5\xD1\x9E\xB0\x6E\xAB\x42\x04\x6C\x0A\x29\xDD\x60\xAF\xD7\x13\x8A\x5B\xC5\xD4\xDE\x8E\x08\x00\x26\x6A\x05\xE4\x60\x0D\x71\x5C\xF6\x75\xC3\xD7\xBD\xA4\x20\x1D\x04\x78\x55\x72\xDB\x64\x4B\xD7\xE9\x10\x6F\xDF\x5C\xC5\x09\xBF\xD6\x5D\xAE\x63\xA6\x56\xAE\x83\x74\xD0\x31\x95\xD7\x4A\xAF\x35\x57\x5D\xF3\x01\x53\x74\x19\x0C\x42\xC3\xB4\x39\xD2\x63\x39\x4E\x38\xD6\xDC\xD6\x01\x92\xA3\x40\xD7\xF2\xD7\x88\x33\x6A\x68\xD7\x9D\x67\x19\x01\xA0\x1B\x04\xD9\xD5\x7E\xDB\x5A\xCA\xD7\xB5\x90\x41\xDD\x5D\xCD\xD7\xE3\xD6\x74\xD2\x60\xC2\xD7\x41\x6E\xBB\xA9\x04\x3E\xD7\x5E\x05\x19\x0D\x5E\xEF\xD7\x0A\x56\x25\xAA\xD9\x19\xD4\xB8\x35\x19\xD7\x61\xE0\xD4\x32\x00\x2C\x0C\x02\x5E\xD8\xB6\xD4\x55\xD0\xBB\x64\x00\xA5\x4C\xED\x4D\x5C\x82\x6C\xEE\xAB\xFE\xC0\x1B\xB0\x4E\x06\x0B\xEC\x41\x8C\x18\xB4\xEE\xA8\x14\x0D\x62\xE1\xB4\xD2\xCB\x30\x8D\x57\xC2\xCD\x0A\xA2\xA1\xCA\x8A\xB4\x34\x25\x35\x1D\xD1\x5F\xDB\xD8\xBE\xD0\xC0\x64\x62\xC9\xD0\x26\xDB\x7A\x98\x62\xF7\xAB\x2A\xD8\xD0\xB2\x02\x2C\xD8\xB2\x4D\x91\xDA\x8E\x7C\xD7\x6C\x8B\x8C\xD9\xFB\xB5\xD8\x7C\xD5\x0B\x7F\xAF\x8B\xB4\xE6\x9B\xA1\xCC\x63\xF6\x34\xDF\x1D\x8C\xAF\xD9\x7B\x9E\xA4\x9D\x8B\x8F\xCD\xB9\xA8\x16\x07\x8E\xA2\x53\x7E\xA8\xAE\x9D\x68\xD0\xE3\x73\x81\x46\xCE\xB2\x72\xF2\x4C\x9F\xF1\x14\x4C\x79\x2D\x8B\xA9\x19\xAA\x73\x76\x03\x0F\xA9\x02\x05\x94\xA7\x7D\x97\x53\xD9\x9F\x59\x98\x47\x9C\x77\x7F\x78\x97\xA2\x07\x1F\x7D\xE1\x77\x9F\x70\xA6\xB4\x75\xE9\xD2\x5F\x8C\xD8\x64\xA9\xEA\x76\x10\x7D\x3C\xEF\x77\xDB\x39\x32\x93\x38\xF7\x9F\xBA\x2E\xB9\x53\x69\xFC\x9F\x34\x02\x28\xB1\x10\x00\xA0\x97\xD9\x81\x73\x05\xBB\x94\xD6\x92\x0F\xD6\x65\xE3\xCB\x3A\xC7\x2B\xBF\x80\x87\xCE\xD5\xA8\x1B\x00\x04\x14\xA1\x73\xAE\x15\xAA\x54\xE0\xA1\xBD\x70\x4C\xB3\x10\x32\xB4\x7A\xA1\x0E\xA8\x34\xE7\xA1\x41\xA2\x1B\x71\xA4\xA2\xA0\x70\x1F\x10\xA9\x8A\x71\xCE\x63\xA6\x13\xA5\x87\xB8\x56\x71\xA1\x5B\x33\x87\x82\xDB\x8E\xA1\xF3\xC8\x87\xB5\x1D\xAD\xA3\x04\x9B\x88\x94\x0F\x16\xD9\x4F\x3F\xE3\x7C\x77\x74\x03\x49\x05\x6D\xC6\xD0\x5D\x37\x9E\xCF\x37\x70\xA0\x20\x7F\xF7\xA0\x25\xD3\xAE\x61\xCB\x44\x50\xD7\x41\x97\xBF\x91\xF9\xA5\xE8\x46\xDB\x49\x36\x24\xA8\x22\xA0\xAF\x72\x01\x26\x8C\x6E\xF3\xB9\xC0\x5E\x92\x8B\xA3\x04\x5F\xEC\xDA\x9E\xB1\xBD\x92\x13\xD3\xAE\x34\x10\x87\x74\x02\x27\x04\xBF\xD9\x5C\x9A\x13\xDB\xAE\x36\x1D\x8B\x83\x9D\xC3\xCF\x25\xAB\x35\x2C\x56\xE3\xAE\x4F\x06\x6E\xD5\x64\xBA\x35\xAA\xA7\x5E\x80\xDC\x6A\x54\xF7\xAF\x11\xEC\x83\x05\xDE\x27\xAB\x8E\x08\xDC\x57\x23\xC2\xD1\x07\xC3\x37\x48\xA8\xC0\x96\xC0\x83\xA5\x3B\xA4\x33\xA7\x06\x30\x61\xD4\xA2\x41\x05\x72\xF8\xA2\x71\xA4\xF7\xC0\x0E\xE1\xA5\x36\x9C\x59\xA9\x60\x3F\xA5\x33\x80\x5A\xA2\x95\xB1\xA4\xF7\x17\x4C\xA6\x93\x9D\x60\x59\xA6\x41\xA7\x94\x8B\xA4\xB6\xCD\xCB\xDE\x97\x92\xA4\x4F\xA7\x4B\xA9\xB7\xAE\xAA\x32\xA7\x61\xA0\xC4\xAE\xA5\x1C\xA5\xCA\xD8\x8A\x77\xA5\x29\x84\x52\xAA\xE8\x4A\xA5\x76\x2F\x63\x55\x98\xB7\xA3\x66\xA7\x44\xAD\xF3\x5B\xAD\xE7\x53\xD4\xD3\x93", +"\x85\x6D\x37\xDE\x40\xA2\x72\xFA\xDC\x5B\x7E\x48\xA9\xD8\xA9\xB1\x4E\xDC\xA4\xD1\x75\xEE\xDC\x54\xDC\x7F\x8B\x83\x42\xA6\x43\xDC\xD2\xA5\x74\xEB\xA5\x67\xC7\xCD\xD8\x93\xA2\xDC\x21\xDC\x34\xA4\x03\x24\x00\x2C\x40\xDE\xD2\x94\x9F\xDD\x2A\xDF\xCF\x64\xC8\x9E\xA5\x2B\xDD\xCF\xDF\xB9\x84\xDD\x65\xA4\x7F\x81\x73\xCB\xA6\x68\xDF\xD6\xD9\x98\xAE\x2F\x8B\xA6\xD7\xD8\x8C\xA0\xDD\xF0\xA3\x7B\x62\x20\xBF\xDD\x1D\xC5\xD9\xD5\xE9\x6C\x62\x3F\xDD\xD5\xD1\x74\xFB\xA3\x6D\xDC\xD7\xA7\x91\x86\xDD\x34\xA6\xDC\xD9\x2D\x99\xA5\x75\xDC\x41\xAD\xCB\x57\x02\x27\x04\xEA\xDB\x77\xCF\xDE\x2A\xDF\xE5\x5A\x67\x76\xA5\x63\xDD\xD3\xDC\x73\xC9\xB1\x29\xA7\x58\xA9\x79\xEA\xDD\x81\xA5\x54\xA9\x78\xE0\xDE\x5C\xDC\xD2\xD0\x4F\x6D\xA6\xEE\xAD\xAE\x7D\xEB\x6D\xAF\x0B\x1F\x6C\xAA\xED\x78\x00\xF2\xAC\x00\x04\xBF\xB2\xA6\xBA\xA6\xDD\x9C\x9B\xBE\xD9\xBF\xA5\xAE\xD1\x9C\xAE\x7B\xC6\x7B\x04\x76\x9A\x86\xA7\x03\xB0\xC7\x11\x79\x2B\xDA\x89\xC8\x82\xAB\xB3\x04\x9A\xDE\xDC\xEC\x54\xA0\x82\x04\x06\xA9\x7F\xAA\x3B\x16\x2E\x4F\x61\x85\xA5\x79\x9B\x77\x44\xA2\x6A\x51\xA1\x8F\xA1\x13\xA9\x23\x65\xA1\xBF\x9B\xAF\x15\x0F\x9C\x96\x41\x76\x6C\x64\xEC\x5D\xA1\x80\x00\x90\x9C\x88\xA1\x59\xC5\x56\x6F\xBF\xAD\xD2\xE0\xA8\xA8\xF0\xBD\xE7\x9A\xD9\x6C\x65\x2B\x12\x97\xDC\x18\x23\x9E\x8C\x04\xEC\x5E\xE5\xA4\xD9\x93\x97\x6E\x7B\x7A\xBD\xA6\xBF\xA9\x9A\xD9\x0E\xF0\x9E\x6C\xDA\xDE\xCA\x7C\x88\x77\x54\x25\xC7\xD5\x7F\xE6\x5B\x74\xDB\xA2\x22\xA5\xB2\x18\xB0\x5C\x9E\xD1\x10\x3A\xD9\x53\xA8\xF6\x98\xE9\x54\xE0\xFA\xAD\x35\x98\x3B\x80\xDA\xCF\x6A\xA0\xD0\xDE\x64\x9F\x86\xDA\xF9\x98\x68\xE2\xA9\x93\xD6\x67\x27\xC7\x25\xA9\xEB\x77\xA3\xD7\x79\xE6\xCC\xFC\x46\xCC\xAC\x35\xE4\xD5\x2B\xCF\x0C\x00\x36\xDB\xA2\x62\xCF\xB9\xAC\xAA\x8D\x9B\x6E\xCE\xAE\xA8\x36\xE0\xAD\x6A\xCC\xA0\xA6\x6D\xAD\xCD\x44\xDF\xCE\xC9\x5E\xF8\xAB\xBC\xAA\xBE\xA9\x9B\x69\xB2\x77\xCD\x7D\x9B\xF4\x82\x8C\xC0\xCA\xB9\x9C\x37\xC2\xA0\x7E\xCD\xE1\xCD\xAC\x8D\xCD\x82\xCC\xC3\xA7\xB0\x80\xCE\xCE\xA9\xC4\xA7\xAD\x9B\xD5\x46\xD5\xD6\xC7\x7B\x84\x1A\x6F\x58\xD9\xA3\xA3\x91\x7B\xE0\x04\x1C\x60\x05\x2C\x40\x7B\xE3\x89\x70\x1E\x3C\xAC\xC8\x0F\xFA\xD8\x7B\x75\xDA\x46\x64\x0C\xB5\xB4\xBD\xAC\x9D\xDD\xD6\xD9\xB4\x91\x55\x36\x16\xF3\x76\x30\xF4\xB0\x7F\xE2\x58\x9C\x99\xAC\xE0\x72\xAD\x07\xA4\xB7\x86\x5B\x3F\xB1\xDB\x88\xB7\xB3\xDC\x55\xE3\xD9\xC7\xAF\xB5\xCC\xD3\x9B\x0D\xAB\xB3\x92\xE2\x78\xAC\xBA\x80\x46\x77\x52\x95\xE1\x16\xA7\x89\xCC\xAF\x76\xAD\x4C\x5B\x89\xF2\xCC\x9E\xE3\x15\xED\x33\xE2\xAD\x9D\x76\x1D\xE0\xF4\x78\xE1\xC8\x0E\xC3\x55\xE4\x81\x04\x6A\xAC\x16\xAD\xB6\xAB\xA6\x82\xE1\xDC\xA4\x88\xC0\x5B\x98\xE1\xF3\xAE\x8A\xC0\xE3\x89\xE0\x43\xBB\x88\xC9\x59\x71\xCE\x9B\xB0\xF5\x56\xAE\x6D\x01\xE0\xA3\x22\x30\x61\x86\xAE\x41\x05\x8D\xD6\x63\x88\xAF\x6E\x7A\xB8\xAC\xE0\x5A\xA8\x34\xE1\xB9\x86\xAF\x6F\x2D\x2A\x6D\xBB\xB9\xAE\x9B\xAD\xFC\xD0\x02\x9E\xAE\x0E\xA6\xD9\x79\x89\xD1\x6C\xA3\xAE\xF9\x7F\xB7\xA3\x08\xD2\xE1\x1B\x0E\x70\x6D\xAE\x06\x04\x3D\xE8\x8D\xEF\xAE\xE8\x61\xEC\xA2\x31\x6D\x01\xC1\xE2\xED\xA3\xBC\xB8\xAE\xE0\xE1\xE5\xA3\x8E\xC1\xE4\x87\x5A\xF0\xA7\xB9\x85\xAF\x9A\xAC\xF0\xA8\xBC\xA7\xE3\x81\x0B\xE0\xDE\x54\x59\xE2\xD1\x0B\xE5\x00\xBD\xAE\x5A\xD2\xAD\xB6\x84\xBD\xB2\x00\xD8\xAF\x40\x08\xBD\xB9\xC9\x10\xDF\x40\xD2\x71\xC1\xE0\xF5\xC0\x98\x76\x70\xDA\xBD\x09\xDF\xA5\x0B\x90\xDB\xDC\xB1\x36\xC1\x39\x4C\x87\xA7\xEC\xAC\x64\xA9\x7D\xF2\x7A\x32\x01\xF2\xDB\x7C\xC1\xDF\xAA\xA6\xBD\x77\xBF\x88\xE3\x20\xE6\x67\xAC\xBF\xAD\x7B\xFF\x7F\xFF\xA6\x7D\xEE\xD9\xA8\xA4\x4D\xEF\x9A\xB5\x2D\xF1\x15\x86\x7A\xC0\x9F\xDF\x57\xA3\x51\xE0\x7B\x4F\xB0\x03\x07\x03\xB8\x8B\x91\xB0\x25\x57\x04\xBA\x16\x96\xB0\x2D\x0F\x6A\x18\x2E\xE9\x7F\x1B\xB2\x23\xCE\xC1\xBC\x92\x60\xA5\x08\xB6\x81\x8C\x35\xA9\x79\x09\xB4\x39\xF7\x2F\xC4\x5D\x0D\xBB\x8E\x3A\xB9\x3F\x60\xB0\xD2\x23\x03\x61\x6A\xE6\x52\x00\x87\x4F\xA7\xAB\x1D\x21\x8D\x96\xCA\x9C\xA9\x63\x51\xE3\x8A\xB8\x3B\x4A\xA2\x59\xE7\x70\xD5\xB0\x4C\x35\x6E\x58\x8A\xDD\xCE\x2B\x10\x7E\x38\xE8\x76\xCE\x48\xB3\xD3\xDA\xC4\xB2\x00\x4C\xB1\x0F\x2E\xC4\xB6\xCE\x50\xB0\x37\xEC\x49\xF8\x57\x54\xB3\x27\xD6\x9A\x58\xB1\x43\xA7\x0C\xC9\xFF\xAF\x61\x18\x7C\x18\xB3\x10\x22\xB1\x45\xC5\x46\xC9\xAD\x5B\xC4\x01\xC5\x49\xAA\x1D\xE7\xC2", +"\x89\xB1\x43\x8A\x10\xC9\xC4\x19\xC3\xB1\xAE\x0A\x8E\xC4\x94\xB0\x4F\x87\x85\xD3\x01\x7B\xB3\x47\x8D\xC7\xB9\xC5\x64\xB0\x34\xB6\x4D\x40\xC4\x24\xA7\x63\x66\x23\x9E\x6D\x87\xB3\x41\xDC\x9E\x63\xC4\xF0\xBD\x49\xC0\x1D\xE7\xC4\x90\xB0\x0D\x7C\x9A\xEC\xC4\x78\xB1\x44\xC7\xC9\xAD\x6A\x99\xB0\x19\x0B\xC9\x9F\xB5\xD3\xBF\x03\xC6\x14\xB5\x00\xD7\x85\x76\x8B\xCF\xA0\xB9\x69\xB5\x87\xB6\xDF\x9F\xB8\x66\xC4\x79\x81\x18\xE5\xB7\x07\xA4\x89\xB0\xE0\x87\xC6\x8E\xC6\x6B\xBB\x18\xEB\xB6\x12\xBB\x77\xBF\xDA\x9D\xE7\xE3\xB6\x83\xB0\x9E\xFE\xDD\x2C\xB9\x82\xB3\xE1\x89\xC9\xE7\x51\x66\xCC\x20\xB3\xD4\x29\x00\xB9\xB6\xEE\xAE\x59\xFB\x8D\xB5\x52\x03\x3C\xD1\x7E\x31\xB3\xB3\x12\xB0\xBB\x0C\x93\xB5\xB7\x71\x74\xBB\xE9\xB1\x41\x95\x15\xCF\xC4\x0A\x96\x5B\x05\xBA\xB5\xC8\x31\x03\x2C\x85\x6D\x54\xCE\xC3\x5C\x73\x6E\xEC\x8E\x89\x2F\x94\x1C\x02\x03\x31\x94\x32\x00\x7F\x7C\x00\x2C\x40\x1F\xE8\x19\x72\x03\x2E\xCE\x6E\x05\x0C\x0C\x25\xA3\xE8\x34\xB6\x0C\x06\xED\xB2\xBB\x9E\x9B\x25\x64\xA0\xF5\xBB\x03\xCB\xBD\xBD\x9A\xEB\x94\x4D\x02\x6A\x0B\x15\xD9\x04\x28\xEB\x8D\x6A\xA2\xCF\xC5\x54\x5B\x0B\x0C\xA9\x6F\xE8\x09\xEA\x49\x9B\xA0\xF3\xE8\x51\x54\x11\x0E\x86\x77\xE8\x1A\xEB\x48\x8B\xA3\xC5\xE8\x2C\xE9\x09\x0F\xA3\xEB\x6B\x41\xE8\xB7\xB3\xEA\x97\xC5\x8C\x88\x8D\xEF\x36\x03\x7E\xE4\xBB\x86\xE7\xEE\x9D\xE8\x34\x02\x3E\x07\x12\x1E\xE9\x22\xEA\x92\xEB\xA2\xE5\xB3\xB7\xBA\xB1\xB0\xA5\xE7\x29\x52\xE8\x66\x87\xC5\x74\x6B\x34\xEA\x8D\xEE\x51\xB8\xE8\x62\xE8\x8F\xE7\x4D\x7E\xE8\xEF\xBB\x99\xEA\xCE\xB6\xBB\x53\xEA\x42\x6C\xA6\xC5\xE9\x47\xEB\x9B\xE9\xA4\xE9\xE8\x63\xE8\x95\x5E\xA4\xF5\xE9\xE8\xB0\x9A\xE8\xA7\xEA\xE9\x7A\xE9\xBE\xB2\x02\x0E\x0E\xFC\xBB\xB1\xC3\xD3\x49\xCB\x16\x98\x0D\x0C\x2F\xDB\xA0\x05\xBD\x95\x9F\xD3\x63\xC9\xD3\xCB\xB6\xC5\x30\xFF\xD4\x3B\x6D\xB6\xC4\x30\xCA\xCC\xDD\xC8\xC3\xC8\xA8\x89\xBD\x13\xCE\xB9\xCC\xF4\x80\xCD\x1D\xBE\x23\x87\xFF\x51\xBD\xEA\xCA\xC8\xB0\x87\xCB\x99\x25\xBD\xCB\x91\x2F\xE4\xBC\x4D\x9A\xD7\xBB\x42\x12\xCE\x13\xCE\x45\x71\x5A\xBC\x77\x3A\xC9\x0A\x35\x08\x90\x98\xA0\xA1\x9E\x72\x8A\xB5\x56\x7D\x78\x6E\x59\x93\xCE\x87\x24\xCC\xAA\xE6\x11\x1E\x78\x6D\xBD\xD9\xB1\x34\xAD\x71\xB0\x5F\xDA\xB3\x10\x2B\xBD\xBA\x51\xDB\xB6\x92\x7A\xBC\x9A\x9F\x42\xBB\x8F\x74\xBD\xCF\xEA\x4F\x10\x1F\xC9\xC1\x54\x11\x89\xC7\x20\xEE\x01\x87\x85\x83\xC2\x10\x0F\xC8\x2A\xC0\x29\x85\x4B\x94\xC8\x51\x0B\x19\x97\x7B\x60\xE4\x19\xCB\xAB\xE4\x2C\xD7\x56\x1D\xC9\xEC\x26\x2D\x2F\xC9\x73\xC9\x98\xC2\x27\xE5\x01\x74\xCB\x0D\x06\x27\xC3\x04\x78\xCB\x08\xD4\x25\xFB\xC9\xAF\x95\x2F\xA3\x37\xC4\xCD\x79\xCE\x9A\xD4\x2E\xCA\xEB\x14\xCE\xAA\xEB\x81\xE7\xDB\xF9\xE8\x46\x32\x67\xF7\xCB\x2F\xBD\x86\xA5\xD3\x78\x00\x93\xEA\x4E\x76\xF3\x94\x99\xEB\x5C\xC2\xBC\xB8\x98\x99\x08\xCE\xA6\xE6\x62\x96\xCB\x07\xCE\xD0\xBC\x2E\xA3\x99\x45\xBE\x99\x9D\x30\xE0\xCA\x5E\xE2\xF1\x94\xAC\xA5\xEA\x3A\x9B\xAA\xEA\xD5\xB9\x7F\x18\xCF\xBA\xC7\x35\xF0\x9C\xB1\xE9\xD6\xB0\x32\xF2\xCB\xB5\xE8\xBD\xC2\x68\x91\x1E\xDD\xAB\x10\xEF\x22\x68\xCC\x1E\xAF\x0D\x01\xA7\x83\x04\x73\xA8\xD1\xE5\xB2\xA8\xAB\x52\xE1\xBD\xA9\x6D\x8F\xE1\xF7\x31\x14\xE1\x33\xC2\xAA\x9D\xE3\xDE\xAC\x33\xCD\xE3\xDD\x9B\xC1\xE8\x37\xF5\xCD\x38\xD9\xAF\xCE\xB0\xC8\xAB\x4D\x79\xCA\xAA\x86\xC4\xCE\x0F\xAD\x1B\xE9\x86\xE8\xDA\x0D\xAE\x19\xE3\xB6\xF8\x9A\x6F\xE0\x32\xD3\xAF\xF2\xE1\x1C\x8C\x43\x5F\x32\xCC\xED\x31\xCE\xD9\xC6\xB5\xEF\xE6\x69\xCE\x16\xE7\x33\xEC\xCD\x4E\xEE\x15\xE7\x7A\x58\xED\xD6\xB7\xCF\xC4\x37\xC1\xCD\x0A\xEF\xC6\xBC\xB0\xE6\xCB\x13\x7B\x18\xE4\x35\xEA\xED\x68\xEF\x85\x7E\x83\x81\x74\x6B\xEF\xD2\xC4\x86\xC8\xCE\x6E\xE2\xD5\xC2\xAF\xD8\xCD\xFE\x99\xDD\x1A\x39\xC1\x04\x9C\xCF\x5C\xE9\x99\x7D\x95\x27\x05\x37\x46\x6E\x5E\xEE\xA5\xCC\xE5\xC4\x0B\x49\x04\xA7\xEF\x0B\xCA\x4B\x64\xEE\xFC\x72\x9E\xBE\xE1\x6B\x10\x88\x9B\x0A\x1C\xDF\x4E\x02\x27\x04\xED\xEC\x69\x6B\x10\x78\x78\x15\x43\xAC\xDC\x53\xC5\xEB\x20\xE9\x69\x81\xE6\xFC\x72\xC7\x68\xBB\xC1\xEB\xBA\xED\xDE\x27\x97\xC7\x31\x87\x5B\xBC\x5C\xBA\xD4\x36\xEF\xC5\x78\xAE\xB9\xEC\xE5\x46\xA0\xE6\x2C\xDF\x79\x02\x27\x04\xF5\xEC\x69\x5E\xEE\xB9\xEE\x5D\xE4\xAC\xE4\xA2\xB8\x57\xBC\x5F\xBB\xDF\xCE\xC1\xEC\x4D\x58\xBD\xC4\xEF\xDA\xEC\xEF\xEC\xBD\xDC\x5E\x7A\xE6\xD6\xBE\xC4\x07\xDC\xC5\xA3", +"\xF2\xE0\xA8\x00\x01\x87\x97\x42\xD4\x15\x2A\x79\xF2\xEF\xEB\x54\x03\x29\xCE\x03\x05\xEA\xC5\xE7\x75\xEF\xA8\xBA\x3A\x62\x99\xEC\xA8\xB0\x9A\xDB\xE5\xB1\x99\x37\xB9\x11\xF4\xC4\x87\xD6\xDA\xF8\x70\xA2\x9B\x73\x94\xCE\x6F\x28\xF1\x55\x75\x86\x5F\x8D\xD1\x37\x76\x06\x17\x5A\x92\xD2\x40\x04\x49\xE1\x95\x8D\x6E\xF7\xB9\xE0\x59\xD2\x00\xE2\xCE\xBF\x98\xD5\x6A\x73\xD7\xFF\xE3\x54\xEC\xCB\xD6\x53\x28\xDF\xBE\xE0\x77\xFF\x70\x5E\x9A\xB2\xA9\xD2\x7D\x97\x2A\xD6\x06\x00\x96\x0B\x76\x60\x90\x4B\xC4\x96\xB3\xD3\x05\x26\x2C\x5B\x73\x5A\x94\x24\xD3\x03\x15\xF0\x01\x07\x05\xF6\x06\x16\xD2\xE7\x73\xFF\xDD\x99\xB8\x91\x21\xF2\x6F\xE3\xC2\xFA\x9B\x26\xF1\x44\x08\xC2\xD9\xC1\x1B\xCC\x78\x9C\xC2\xCC\x74\x2E\xF0\x0C\xFF\x4A\xCE\x58\x0F\x76\xB7\x00\x04\x12\x74\xFA\xD3\xF7\x19\x20\xE1\x05\xFB\xD3\x0C\x04\x07\x2C\x40\x5F\xF1\x49\xD1\x57\x27\xD4\x06\xD9\x38\xD4\x1C\xC1\xC8\x5B\x91\x42\xD0\xE6\x75\xEF\x0D\xD6\x96\x1F\x50\xC6\xCF\x1C\x92\x71\xDE\x5E\xBB\xA0\x14\xD5\xA6\xC7\xDF\x3D\x95\x17\xD5\x7C\x30\x3D\xF4\x91\x26\xD4\x55\xD8\x52\xC5\x56\x68\x93\x95\xAC\x52\xD8\x5D\x3A\xD4\x4C\xD9\x91\xAD\xE3\xB0\x85\x29\xC3\x2D\x4A\xDC\x8F\xE1\x4B\xD3\x9B\x06\xF2\x80\xA5\x4F\xDF\x88\xE9\xC5\x41\xD5\x51\xBB\x1B\xBC\x68\x37\xEF\x73\x50\x45\xBC\x08\xB8\x24\xFC\x17\xC5\xF6\xD3\x59\xF1\x03\x2B\xC5\xEC\x01\xFB\xD3\x0D\x0F\x4F\xC6\x04\xA7\xF3\x8A\xCC\xC5\xFE\xF1\x65\xF2\x00\xC7\xC6\xDA\x93\xC6\xC5\x48\xE3\x13\x6C\xF1\x15\xB2\x1B\xFC\xCF\x50\xD4\x71\xF0\xAD\x43\x51\xD3\xAC\x15\xD4\x1E\xF6\x92\x99\x5C\x7A\xF2\x33\xDC\xA6\x87\xD6\xF0\x1D\x62\xD0\x52\xF4\x00\xB2\x8E\x41\x09\xCC\xEB\xD5\x7E\xF0\xEC\x4F\x55\xC0\x74\xA4\x8E\x56\xD2\xC0\xFF\x6B\x5D\xD5\x4E\x0F\xCC\xD6\xF1\xAA\xA8\x64\xDC\xC1\xE7\x77\x94\xD6\x4A\x77\x59\xF5\xD5\xF0\x4E\x66\xDD\x05\xDC\xD6\x7B\xD4\x96\xD4\x6A\xE6\xF3\x4F\xBD\x69\xDD\x7D\x03\x20\xDF\x1C\xFC\xE7\x76\xA6\xBC\x3E\x07\xDA\x92\xAB\xF2\x01\xB0\x5D\xDC\x93\x10\x31\x9D\xC9\x9A\xCE\xE5\x77\x8B\xD9\x78\x9C\x38\xFA\x77\x97\x40\xF3\x4F\x66\xD6\x93\x64\x66\x97\xEC\xCB\xAB\x48\xBA\xEC\x56\xF1\x6A\xD2\x60\xF9\x12\xAE\xD7\x42\xFA\x65\x17\x5A\xA7\x03\x49\x01\xD1\xF6\xD6\xFC\xEE\x8F\xC6\xEE\x41\xCC\xF1\x7E\x6A\xDD\xB2\xD7\xD9\x23\xD1\x76\x3B\xD1\xC6\xCA\x01\xF2\xCA\x96\x54\xEA\xD6\x05\xF1\x33\xD3\x71\x37\xD2\x0D\xE1\x0C\x0F\x08\x18\x3D\x2B\xF5\x35\xDA\xA3\xB4\xCE\x6C\x92\xC7\x67\x52\xF6\xCF\x6A\x84\xFE\xC0\x46\xCF\xD0\xED\xF3\x8F\xD1\x64\xDA\xA8\x71\x73\xCC\x81\xC7\x5D\x53\xBD\x39\x4E\xF1\x41\xC1\xD9\xDF\x7C\x05\xD0\x46\xD1\x06\xF6\x6C\x36\xF3\xD4\xC0\xD2\xCE\xD4\x07\xD0\x5D\xFF\xD6\x82\xD6\x45\x0F\xD4\xCA\xF5\x7F\xD2\x35\xD1\x48\xE6\xD0\x36\xDB\x12\xD6\x48\xEB\xD0\x62\xD2\x50\xF5\xD5\xEF\xF4\x1C\x91\x0C\xD5\x80\xFD\x6F\x73\xD1\x9E\x44\xD5\xEC\xD1\x60\xF5\x6F\xD0\xC8\x22\xDA\xA4\xE7\x17\xDB\x42\xFE\xD6\x44\xD2\x11\xDA\x2C\x1E\xF5\x68\xF5\x99\xD4\x3B\xD7\x0C\x32\xF6\x1F\xF0\x4C\xDF\x5D\xAF\xF2\x8A\xA8\xF2\x17\x65\x98\xF1\x41\xFA\xC9\xD3\x54\xCB\xD3\x59\xF7\x52\xDE\x4B\x44\xD4\x78\x9B\x4D\xFD\x38\x76\x77\x37\xD8\x2E\x7E\x70\xBB\x90\x09\xFC\xD0\xA8\x4B\xF1\xD0\x78\x7F\x4E\xFD\x60\xA8\xD3\x3A\xD0\x4F\xF6\x75\xF2\xD1\x87\x36\xD8\xD4\xD5\x22\xF0\x56\xB5\x7B\xB2\x13\x9F\xF6\x16\xD3\x88\xE1\xF2\x9E\xF2\x4E\xF0\x48\xC1\xAD\xC4\xF1\xE1\x5A\xDA\xD6\xF5\xDE\xED\x2D\x1D\xCE\xE6\xF4\x24\x0B\xBE\xE8\x4B\xE4\x5D\x8C\xD6\x40\x0E\x58\xC7\xF6\xD8\xD2\x64\xFB\xD8\xDD\xD3\xED\xF0\x78\x76\x4E\xD0\xF6\xE3\xD1\x62\xFD\xC6\xE9\x13\x95\xF5\x9A\x67\xD9\xC6\xF7\xE3\xB3\x5A\x05\x2F\x55\xF6\x67\x58\x3D\xD0\x7F\x34\xF6\x8C\x06\x6D\xF9\xD2\xDB\x46\x43\x47\x57\xF6\xD7\xD7\x53\x34\xF5\x4D\x66\xD3\xC5\xA9\x38\xF7\x1E\xFB\xD4\xD6\xF5\x3C\xF4\xCB\x8E\xD3\xEC\x8C\x40\xF4\x5B\x65\xDA\xC4\xF5\x54\x4A\x89\x85\xA4\x88\xF5\x93\x07\x7A\xFC\xD4\xDF\xD7\xD1\xD5\x91\xA8\x23\x21\xD0\x74\xF7\x49\xD9\x60\xD5\xD9\x6D\xF7\x56\xFD\x5B\xAF\xD7\xF2\xF6\x55\xF6\x01\xE2\xF5\xA1\xF6\x03\x95\xD6\xF6\xD0\x01\xF9\x5A\xF2\x48\xEA\x63\xFC\xF5\x48\xC5\x97\x41\xD6\x28\x54\x22\xD1\xC8\x05\xD1\x83\x32\x78\xFA\xDD\xD1\xE0\xD7\x53\x5E\xFF\x5B\xDC\xB0\x10\x7B\x5F\xF7\xC4\xC2\xF6\xA6\xA8\x61\xF9\x57\x09\xF8\xDB\xF6\x1F\x7D\xDB\xFA\x9B\xBF\xF4\xAD\x0E\x4D\xFA\x55\x8F\xF6\x38\xD1\x30\xE4\xD3\x81\x9E\x39\xD9\xDC\xD4\x99\x9A\xF4\x66\xFB", +"\xC2\xF5\xF8\xD0\xF4\xF3\x62\xDD\xEE\xF6\xE3\xF4\x58\xF5\xE0\xE0\xD1\x4E\xD3\x6C\xF9\x28\xD3\x9D\x93\xA2\x1E\xD9\x3E\xB9\xF6\x01\x07\x6E\xFE\xC7\xC8\xF6\xBE\xF7\x4E\x0C\x4D\xEA\xF8\x8D\xF4\x8B\xFD\x5D\xEE\xF8\x1F\xED\xA5\x60\xE3\xE0\x97\x32\xF8\x67\xF4\x68\xCB\xF7\x92\xF7\x65\xF9\xE3\xF3\xD3\x38\x38\x2D\xD3\xE4\xCE\xCA\x00\xD2\x75\x05\x1F\xF0\xCA\x03\x06\xAC\xC3\x42\xD6\xCA\x05\xD9\x65\x08\x29\xF2\xF1\xB8\xC9\xFE\xAB\x2B\xE4\xEA\xE5\xCB\x17\xEF\xB2\xF5\xF9\xC1\xCA\x71\x79\xC9\xE1\xF8\xBE\x96\xA3\xC1\x75\xC1\xED\xB2\x99\xD7\xCA\x68\xB8\x00\x47\xE2\x40\x00\x36\xF4\xA9\xB3\x20\xCC\xC2\x0F\xE5\xCD\x4D\xE1\xBB\xAF\x89\xF9\xED\xF2\xAB\x14\xED\xB7\xF1\xE2\x7F\xED\x16\xE2\x37\xFC\xCA\x61\xE3\x39\xFC\xB2\xC5\xCD\x1A\xE0\xD8\xE9\xDD\x5D\xDA\x8C\xEF\xE4\xE9\x6A\xE7\xED\xA2\xF9\xDA\xE5\xB6\xE8\xE1\x12\xAE\x48\xF9\x4C\xF0\xED\x98\x2E\x3B\xF9\xB1\xBC\x22\x3B\x08\xC7\xA0\xEB\xDE\x08\xB0\x5E\xC8\xA3\x10\x22\xAC\xBA\x52\xCB\xAE\x15\x2E\xD1\x46\xDB\x9E\xF3\x5E\xA0\x00\xBA\xFA\xE7\xCB\x7D\xF8\x9C\xD4\xCF\xEE\xC6\x3D\xF4\x00\xD8\xCC\x00\x0A\x3D\xC1\x9D\xDC\xCD\xC1\xD0\x31\x9F\xCF\x70\xF1\xD2\x99\x17\x0B\x9D\xAF\x19\xD8\xE4\xE8\x4D\xCF\xE8\xCC\x23\xD7\xC3\xD7\x0C\x12\xF0\xEC\x5C\xC3\xC0\x00\x3E\xF0\x10\xFF\xFE\xAD\xD5\x1D\xF1\xC0\xCF\xC1\xF2\xD5\x9E\xD2\x11\xF6\x4C\xCC\xF7\xDD\x9C\x5D\x9D\x57\xA5\xD2\x00\x74\x2A\xDC\x57\x90\xF1\xAA\x54\x2B\xDC\x40\xB3\xFB\x32\xF0\x15\xF2\x4B\xE3\xD1\x88\x4A\x86\xD2\xCC\xE1\xBD\x54\xD1\x0E\x0C\x4B\xC3\x04\xBC\xD3\x85\xFE\x50\x5A\xF8\xFF\xC7\x42\xBE\xE1\xEB\xFB\x92\xF6\xA9\xCA\x4C\xE3\xF8\x18\xDA\xD1\x02\x22\xE3\xF1\x1D\xD4\x2A\x17\x4F\xCA\xD6\xA7\xF3\x40\x09\xCA\xD7\xFC\xA6\xF6\x08\x0D\xCA\xC9\xFC\x3F\xF8\x91\xAF\xBD\xB4\xF2\x93\xF5\x60\x9D\xDE\x30\xF1\x16\xC0\x9C\xFB\xCB\xC2\x99\xBD\xF0\x43\x79\xC7\xFD\x37\xF5\xD2\x46\xDF\xD7\x5F\xD4\xF0\x1E\x47\xDD\xC7\xC7\xF3\x24\xD6\x41\x09\xF3\xEA\xF2\xA4\xF2\x1F\xF6\x06\x29\xD4\xEF\xBF\x4A\xD8\xD3\xB9\xD4\x8F\xF3\x55\x61\x53\xE4\xAE\x4A\xDA\x22\xF7\x53\xFE\xD4\x44\xFF\x4B\xD6\xF4\xCE\x81\x92\xF3\x4F\xD5\xB1\x55\xF2\x6B\xC7\x87\xF3\xCD\xC3\xF6\x47\xD4\x27\xFA\x5F\xE4\x08\x41\xEF\x58\xD3\xB4\xE5\xD5\x20\xD5\x0D\x08\xE4\xC0\x00\x8E\xD4\xD8\xF1\x64\xE4\xFB\xDC\xF1\xF9\x19\x63\x30\xBD\x0E\x58\x66\xD7\x57\xC0\xF4\x7C\x9F\x38\xF4\x52\xA5\xF3\x39\xDA\x5F\xD0\x5A\xF2\x9E\xF6\xF7\x60\xD2\x7D\x0D\x20\x0A\xF6\x66\x36\xD7\x38\xD6\x0D\xF6\xDF\xF7\x4B\x38\xD6\xB0\x5D\x29\x0C\x02\x46\xFE\x14\xF7\xE0\xF4\x60\xF6\x9D\x1F\xFF\xFB\xBA\xD6\xE6\xD2\xF8\xD6\xE0\xF8\xDC\xD4\xD7\x0D\xDB\xBD\xA5\x5C\xFA\xF2\xB1\x6A\x76\xD9\x5B\xC5\xD8\xBB\xD6\xE3\xF4\xDF\xFF\xD6\xE5\xD7\x82\xD4\xF9\xE2\x87\x31\xD9\x20\xE9\xF9\xC2\xD8\xF4\xD4\xE7\xF5\x50\xDE\xFE\x4E\xF4\x78\xD5\x97\xA6\x56\x09\xD9\xE4\xF2\x26\x01\xF3\xFB\xD5\xE5\xF7\x85\xEB\xD7\x13\xD8\x56\xF8\x5C\xE8\xFE\x8B\xFF\x92\xDD\xF8\xC2\x83\x36\xD4\x17\xDA\x60\xD2\xFE\x5B\xFF\x73\x50\x65\xDF\x54\x10\xDB\x46\x09\xFB\xC2\xFF\x7D\x01\xDF\xF3\xFB\xCA\xFE\x4B\x59\xE0\xFF\xFC\xF3\xD7\x4F\x80\x1C\x65\x5B\xC6\x04\xD7\xFF\x1F\xD7\x5B\xFD\xFE\x7C\x4D\xE7\xF9\x47\x8B\xF8\x20\x7D\xE8\xF4\xFC\xE7\xD3\x16\x8F\xF1\xF2\x02\x17\xFE\xC7\xD6\x6A\xFB\xFD\xDB\xD7\xAA\xFF\x94\xF9\x47\x9F\xFE\xE1\xFD\x9B\xC3\xFE\xCC\xD8\xA4\xFE\x75\xD6\xFA\xFB\xFE\xE3\xFD\xEA\xFC\xF8\xDE\xFF\x55\x60\xFC\xF2\x79\xE3\xD7\xB2\x38\x88\x77\x91\x04\xF6\x7F\xAF\x26\xFF\x78\xFE\x79\x02\x14\x6D\xD3\x7D\xFE\x7C\xFB\x7F\xFB\x77\x90\x72\xFE\x03\x80\x30\x7F\xF2\x7E\xED\x7D\xBF\x6F\x5F\x7B\x74\x5D\xF4\x7F\x7E\x0C\x80\xFE\x7C\xEC\x7E\x84\x61\x00\x81\x30\x53\xFF\x45\x7F\xDE\x2A\xF3\x7F\x83\x6D\x02\x8B\xFC\x6F\x66\x15\xD8\x1F\x46\xAA\x09\x88\x7C\x1D\x0F\xCD\x29\x02\x87\xE6\x57\x03\x27\x02\x2F\x81\x10\x6E\x69\x7B\xC4\x65\x62\x6F\xB1\x47\xD9\x57\x70\x49\x6C\x82\x58\x93\x6E\xC5\x6E\xE6\x77\x01\x8D\xBA\x52\x6C\x58\x3A\x90\x73\x39\x67\xEE\x70\xC7\x46\x89\x5A\x93\x59\x6C\x3B\x6D\x2D\x65\x8F\x6E\x5B\x0A\x80\x76\x08\x08\x9A\x21\x3B\x0C\x79\x3F\x10\x93\x47\xB4\x39\x39\x67\x09\x1C\xCE\x5F\x77\x91\x0E\xD0\x65\x61\x11\x8A\x62\xAB\x40\xDE\x54\x36\x7C\x3B\x9D\x00\x16\x21\x18\x81\xB2\x4D\x05\x80\xDF\x54\x36\x2E\x67\xDE\x6E\x99\x79\x19\x81\x0B\x8D\xBA\x74\x9D\x71\x3A\x6A\x80\xE3\x2A\x2F\x80\xA0\x14\x44\x7D\x58\x10\x03\x92\x10", +"\x72\x80\x11\x02\xD7\x67\x14\x1E\x0E\x87\xD5\x0C\x03\xA7\x01\xB4\x67\xBF\x4C\x3E\x81\xC2\x1E\x0F\x83\x07\x94\x9D\x41\xFB\x02\x81\x78\x80\x34\x02\xEB\x66\x73\x18\x08\x86\x03\x85\x02\x83\x71\x91\x05\x46\x80\x21\x81\x0F\x84\x3B\x6B\xF3\x12\x02\xA4\x67\x6D\x81\x41\x70\x4B\x73\x35\x53\xB1\x70\x9C\x61\xE0\x02\x17\x23\x71\x59\x51\x0E\x06\x04\x70\x00\x08\xC1\x72\x18\x0D\x73\xD0\x6E\xF9\x50\x0C\x74\xB1\x32\x83\x7E\x52\x6A\x85\x07\x6D\x0E\x2D\x15\x3D\x0E\x76\x48\x0B\x83\x6D\xB4\x6E\x9F\x79\x52\x14\x2A\x35\x57\xF6\x6E\xF9\x42\x63\x10\x3E\x64\xE0\x38\x00\xA4\x80\x53\x82\x2E\x52\x05\x7C\x8B\x5B\xA4\x7F\xD9\x57\x3B\xAD\x81\xF7\x31\xF9\x4F\x8C\x11\x0B\x96\xF6\x73\x02\xD5\x02\xE9\x3A\x7F\x0A\xA3\x68\x17\x86\x76\x71\x2F\x3C\x02\xEE\x0B\xBE\x81\x59\x53\x0D\x01\x18\x85\x08\x5B\xB3\x62\x00\x7D\x6C\x1E\x79\x63\x83\x96\x56\x06\x73\x83\x71\x62\x70\x02\x89\x6D\xDC\x78\x1D\x71\x34\x86\x4C\x5E\x5E\x3E\xC1\x7A\x02\x91\x6D\x98\x1B\xA4\x64\xC4\x55\x14\x29\x10\x14\x07\xB4\x9F\x11\x77\x62\x02\x78\x6D\x9D\x5E\xC0\x42\x10\x14\xA4\x0E\xF0\x78\x81\x6C\x00\xD7\x77\xD6\x61\xD0\x74\x84\x7E\x9A\x79\x00\x47\x76\x02\x03\xA4\x77\xDC\x73\x09\x7C\xE8\x75\xDA\x6F\xCD\x0F\x7D\x50\x70\xBD\x77\xDA\x62\xD2\x70\x8B\x77\xDB\x55\xFA\x61\x56\x59\x76\x4C\x7C\xCC\x76\x65\x7B\xB0\x63\xDC\x69\xEA\x78\x7E\x92\x54\x3A\x78\x40\x87\xD4\x71\x35\x73\x03\x19\x97\x10\x77\x8D\x76\xB2\x74\x1B\x70\xD5\x7D\xB6\x6A\xF5\x6F\xED\x19\x77\x71\x76\x44\x7C\x1E\x12\xD1\x7A\xAE\x5E\xBC\x4F\xED\x10\x82\x51\x76\x89\x81\xD3\x76\xCC\x56\xB7\x6F\x08\xB2\xE2\x00\x77\xFB\x54\xAD\x77\x47\x7F\x53\x6E\xB5\x60\x09\x84\xAC\x28\x82\xA5\x7D\x35\x72\xE1\x61\x29\x84\x38\x71\xF2\x0F\xCD\x4C\x82\x96\x55\x33\x71\x49\x81\xD5\x75\x54\x6B\xF5\x70\x04\x98\x17\xAC\x6C\x4B\x72\x51\x37\x07\x37\x81\x5A\x07\x81\x5F\x78\x11\x65\x72\x30\x52\x9E\x5B\x6C\x50\x1E\x14\x59\x79\xE1\x35\x00\x7D\x70\x83\x01\x5A\x83\x6D\x53\x07\x00\xC4\x58\xD7\x79\x57\xA9\x71\x10\x3E\x0F\x5E\x18\x72\x02\x06\x5A\x49\xE3\x5D\x56\x06\x41\x7B\x55\x23\x75\xB1\x29\xD4\x22\xC5\x6C\xAD\x24\x71\x38\x73\x2B\x55\x5C\x83\x85\x13\x17\x8D\xC5\x5A\xE2\x48\x71\x9C\x70\xB7\x6E\xDF\x75\xAE\x20\xE9\x70\xC4\x63\xE2\x1B\x3F\xA5\x70\x9D\x5D\x74\x2B\x30\x86\x94\x25\x0C\xB1\xB0\x47\x71\xF6\x3C\xAC\x6E\x32\x77\x26\x8F\x13\x96\xF4\x67\x88\x4E\x6D\x72\x51\x28\x05\xB4\x6C\xAB\x13\x6D\x72\x01\x2A\x03\x27\x02\xA7\x82\x6C\x6F\x8F\x3A\xDB\x6F\xE3\x26\xAD\x04\xDC\x22\x72\x70\x65\x97\x00\xB8\x6A\xAC\x17\xD0\x24\xB7\x44\x9B\x1A\x6E\x7D\x7C\x74\x6F\x5B\x19\xCA\x4F\x47\x79\xB6\x6D\xF9\x7D\x03\x7E\x27\xD6\x80\x2A\x30\xEB\x4F\x6D\x7A\x5C\x61\xDB\x35\x83\x8E\x65\x72\x6F\x49\x71\x37\x82\x6D\x60\x9C\x3B\x36\x14\x72\xF8\x6C\x8B\x72\xBE\x6C\x06\x09\x91\x62\x08\x1B\xE4\x1D\x51\x1D\x05\x80\x6D\x87\x03\xE0\x6D\x7E\x78\x0E\x8A\x37\x57\x10\x18\x6F\xDF\x1B\x72\x87\x7C\x5C\x6C\x6A\x2C\x56\xDC\x5B\x06\x96\x51\xF3\x82\x4F\x04\xBF\x3A\x89\x46\xF4\x45\x82\x75\x6D\xE4\x77\xDD\x76\x49\x3D\x66\x47\xAC\x61\x06\x7B\xD8\x6A\x83\x72\x01\xB9\x6C\x32\x52\xA2\x39\x95\x5E\x0A\xB9\x05\x16\x67\x28\x6F\xAF\x6E\xF1\x2B\x30\x74\x7B\x79\x03\x05\xE6\x76\x6C\x89\x72\xE5\x0F\x62\x75\x40\x88\x0A\x81\x07\xA7\x82\x11\x73\xEA\x7C\x51\x3F\x20\x71\x2B\x5D\x09\x89\x52\x46\xA3\x74\x6E\x67\x4F\xFE\x83\x0D\x02\xF5\x66\x10\x1C\x10\x81\x08\xAC\x6F\x4B\x6F\x90\x52\x6C\x2D\xC6\x52\x1B\x44\xBB\x73\xDE\x06\x73\xB5\x6F\xAB\x33\xED\x6B\x76\x3B\x76\x7A\xBD\x6A\xA5\x01\x2F\x1F\x5B\x9B\x6C\xF0\x6D\xF8\x6C\xBD\x16\x07\x83\x04\x76\x81\x98\x52\xE6\x6C\xFC\x54\x72\x6C\x0F\x81\x08\x3E\x03\xDF\x3D\x2F\x73\x71\x3E\xF1\x29\xC3\x3E\x7D\x60\x50\x55\xA8\x70\x30\xCE\x01\x93\x01\x92\x84\xD3\x2E\x7D\x69\xBF\x67\xDF\x31\x03\xDC\x82\x6E\x43\xFB\x6B\xD8\x68\x0B\x9E\xBE\x79\xA1\x4D\x84\x0A\x55\x27\x85\x44\x2B\xE2\x64\x88\x4E\xBF\x78\xC3\x12\x54\x55\x85\xF9\x6F\xE3\x66\x42\x88\xA1\x42\xC1\x42\x76\x33\x00\xFB\x6F\xFE\x6E\xE4\x49\x44\x52\x59\x7A\x60\x56\xFB\x18\x4F\xE8\x7D\xB1\x78\x66\x3E\xF3\x48\x80\x73\xC3\x43\x1D\x39\x4F\x5F\x6D\x3B\x72\x67\x3D\x01\x7D\xE5\x43\xB3\x66\x76\x69\x7A\xC3\x4E\x4C\x75\x02\x55\x3A\x51\x30\x4B\xB3\x76\x81\x6D\x6C\x40\x7C\x38\x6F\xA0\x07\x1A\x8D\x5D\x19\x06\x9D\x17\x70\x30\xDC\x81\xE9\x39\x0A\x74\xCF\x6B\x82\x7E\xB3\x4C\xB9\x2F\x70\xC8\x80", +"\x72\x82\x2B\x83\x19\x84\xDE\x38\xC1\x7F\x79\x0C\x6D\xD2\x81\x5B\x80\x38\x65\x1A\x83\x28\x0F\xC7\x51\xE3\x28\x57\xD3\x71\x1A\x01\x35\x73\x20\x07\x8D\x70\xC6\x49\xAE\x23\x04\x51\x85\x2C\x33\x3F\x76\x77\x59\x90\x67\x5E\x46\xE4\x26\x12\xB4\x84\xDD\x56\x42\x76\x1C\x71\xC0\x2A\x5E\x76\x2D\x06\x71\x47\x7E\x77\x72\xE9\x50\x1E\x78\x2A\x92\xC7\x76\x00\x74\x71\x03\x02\x7B\x72\xAB\x81\x1F\x71\x31\x3B\xC6\x68\x8B\x43\x4E\xDE\x70\xC5\x00\x39\x72\x21\x77\x2B\x9F\xC6\x75\x0A\xE1\x71\xB8\x2B\x6A\x84\xF1\x54\x20\x7C\x2B\x86\x52\x7E\x0A\xAA\x52\xC5\x70\xC3\x81\x44\x73\xD6\x53\x23\x8F\x5F\x6D\xE4\x15\x6D\xD1\x3D\x20\x87\x26\x32\x26\x78\xC2\x4A\x17\xB7\xE4\x19\x83\xC6\x80\xD1\x53\x67\x54\x27\x79\x00\x44\x4D\x7F\xE4\x60\x68\x9B\x80\x02\x59\xAA\x60\x8A\x65\xBC\x7C\x74\x09\xB0\x16\x14\x70\x30\xA6\x73\x9B\x2E\x89\x50\x95\x77\xA6\x12\xE5\x35\x32\x54\x72\xD5\x08\x67\x33\xA5\x33\xCD\x49\xA7\x19\xE5\x5A\x75\x5D\x3F\x0F\x59\x57\x71\x6F\x14\x20\x88\x11\x86\x08\x9F\x46\x61\x52\x38\x31\x82\x87\x16\x55\x3B\x6C\x10\x84\x03\xE2\x5D\x96\x85\x07\x85\x9C\x87\xC7\x74\x99\x62\xB9\x56\xE6\x54\x5F\x12\x44\x1B\x01\x0C\x03\x49\x86\x10\x0C\x19\xAA\xC6\x1E\x73\x2F\x38\x83\x41\x1A\x5F\x42\x6F\xE3\x60\xCE\x67\xE6\x36\x4C\xA9\x73\x94\x63\x4D\x36\x54\x3D\x9A\x6E\x89\x6F\xE6\x31\x73\xCF\x73\xF2\x5D\x74\x77\xFC\x5E\x38\x52\x01\x21\x03\x27\x02\x47\x87\x1C\x60\x4D\x5B\x2F\x68\x9B\x69\x63\x65\xB9\x3D\x73\x71\x69\xDF\x72\x41\x61\x38\x77\x81\x64\x89\x46\x05\xBB\x86\x76\x58\xE4\x70\x44\x61\xF0\x22\x6A\x50\x89\x41\x85\x7D\x58\xFA\x72\x64\x5C\x1C\x30\x40\x7C\x43\x02\xD0\x54\xBB\x01\x75\xF3\x5D\x20\x65\xA1\x77\x4E\x71\xA3\x79\xD3\x74\xE7\x24\x4A\xE1\x5D\x07\x77\x33\x76\x2D\x0A\xA5\x7C\xCF\x53\x87\x1D\x74\x32\x00\x30\x76\x41\x02\x6F\x8C\x9C\x39\xD1\x57\x62\x4B\x74\x8F\x42\x7A\x54\xA1\x71\xBC\x41\xA5\x67\xD4\x6D\xB3\x54\x74\x7B\x35\x36\x76\xF9\x3F\x29\x3E\x37\x94\x1B\x81\xEA\x7A\x2C\x74\x74\x17\x76\x9D\x72\x41\x72\xA3\x7A\x1A\x8A\x94\x46\x74\x76\x01\x7C\x35\xE3\x80\x47\x7F\x38\x97\xA6\x03\xEA\x12\x87\x6B\x86\xCA\x86\xDB\x81\xCA\x58\x15\x77\xA6\x0C\xEA\x4E\x71\x76\x2F\xBB\x87\x2C\x45\x43\x74\xA1\x77\x73\x7D\x0D\xFA\x5C\xE4\x5D\x19\x01\x4C\x4B\x06\x0C\xDF\x28\x03\x2C\x40\x36\x87\x64\x39\x19\x00\x89\x70\x47\x7C\x25\x5A\x1D\xB4\xB4\x33\x00\x68\x86\x11\x00\x98\x42\x47\x73\x39\x82\xD2\x55\x0E\xCA\x60\x89\x87\xA8\x29\x10\x04\x0C\x09\xD4\x3D\x1D\xA3\x84\x40\x87\x72\x75\x39\x44\xA7\x33\x49\x70\xA3\x76\x0C\x47\x0F\x88\x87\x70\x87\xBA\x2B\x56\x28\x49\x7E\x3B\x97\xD1\x10\x0F\xCC\x74\xE5\x58\x13\x03\xF4\x85\x78\x89\xA6\x67\x1C\x94\xB8\x25\x87\x22\x00\x9B\x0A\x52\x04\x7B\x8F\x3C\x81\x1E\x97\x51\x44\x87\xA1\x86\xE3\x87\xE8\x87\x32\x69\x3C\x97\x5B\x4C\xF2\x07\x3F\xB0\x3F\xD8\x87\xEC\x85\xB8\x47\x5C\x57\xCE\x70\x01\x5D\x87\x97\x31\xEF\x87\x63\x45\xD0\x50\x3F\x84\x1C\x86\xEA\x6D\x86\x88\x75\x8E\x37\x9E\x72\xAA\x3C\x3C\x99\xD7\x00\x10\xEE\x02\x02\x89\x6B\x5F\x35\x2C\x4E\x45\x40\x95\x1E\x83\xE9\x3E\x5D\xEF\x58\xED\x86\x18\x06\x81\x8D\x3E\x91\x1E\xA2\x0F\x95\x88\x85\x86\x04\x8A\xF9\x82\x81\x8A\xA8\x6A\x1F\x8D\x84\x7E\x58\x0F\x89\x8C\x01\x04\x8C\x45\x7F\x3E\x9F\x1B\xA4\x0F\x86\x87\x56\x63\x44\x75\xA9\x5E\x7E\x88\x91\x18\x1F\xB8\xEA\x65\x64\xBA\x74\x8E\x4C\x1C\x35\x57\x7D\x76\x1F\xD5\x5C\x9C\x59\x77\xF2\x83\xDE\x75\xC8\x80\xAF\x54\x73\x5C\x38\x5F\xEB\x67\x53\xE1\x75\xF2\x52\x89\x64\x06\x06\xAE\x61\x08\x28\xEB\x31\x60\xEB\x74\xD8\x15\x85\x67\x61\x81\xD9\x6C\x2B\x7E\xFA\x3D\x34\xC6\x16\x0F\x67\xFE\x10\x5F\x7C\xAF\x61\x93\x56\x74\x12\x4B\xFE\x82\x32\x03\x6A\x14\xDE\x6A\x27\x66\xBE\x2F\xEE\x2A\x72\xF1\x80\xD9\x77\x58\x77\x81\x14\x7C\x38\xDD\x46\x5F\x4C\x29\x56\x17\x98\x3A\xD5\x15\x97\x36\x0B\x07\x09\x35\x11\xD7\x77\x3A\x16\x45\x7D\xD9\x21\x6E\x09\x65\x5B\x23\xA3\x80\x51\x2A\x56\x16\xD8\x40\xBB\x01\x69\x0D\x47\x86\x5A\x2E\xAB\x6A\x87\xAF\x3E\xEB\x58\xBA\x41\xAF\x34\xA1\x2A\x5B\x08\x05\x65\x29\xB7\x73\x47\x88\x94\x35\x1D\x43\x25\x8E\x44\x78\x56\x33\x30\x3A\x17\xB4\x71\xF4\x76\x6E\x11\x3A\x6F\xB3\x1E\xEE\x61\x88\x2E\x60\xE2\x2C\xF6\x76\xF8\x21\xBF\x7C\x6B\x1A\x19\x5F\x88\xF5\x77\x30\x8B\x18\x8B\x7F\x76\x4A\x94\x0A\x3A\xB9\x58\x78\x34\x7F\x89\x0F\x28\x7B\x9F\x60\x03\x06\x02\x2C\x40\x36\x89\x62\x79\xA7\x08\x19\x7A", +"\x03\x82\x27\x80\xA5\x5B\xA5\x0A\x6A\xAD\x88\x42\x2E\x43\x6F\x96\x78\xF2\x72\xA8\x74\xF1\x3C\x79\x76\x78\x3A\x02\x45\x68\x17\x88\x51\x6D\x40\x3C\xF1\x14\x7E\x1D\x7F\x06\x82\x0C\x69\x8D\x7A\xA5\x58\x3A\x64\xFC\x43\x89\x94\x1A\x5C\x79\xCA\x78\xF3\x7F\xE9\x68\x26\xB0\xF9\x4B\x89\xE0\x61\x66\x88\xFC\x0D\x91\x69\xC3\x73\xE0\x64\x5D\x5F\x7D\xE1\x7C\xB1\x4A\x06\x7F\x8C\x46\x56\x4E\x10\xB2\xA7\x45\x78\x51\x86\xAB\x7E\x90\x49\x89\x7D\xCF\x22\x3E\x77\x95\x5D\x46\xF2\x7C\x57\x69\x0B\x7D\xDE\x7F\xC2\x6D\xA5\x66\xFC\x65\x29\x33\x79\x2A\x7A\xB6\x7C\xEF\x1F\x66\x37\x18\x00\x53\x5E\x39\x94\x67\x95\x10\xF1\x2C\x9C\x36\x7C\x30\x25\xB7\xFC\x70\x0F\x3D\x84\x00\x00\x82\x48\xB5\x71\x40\x74\x9C\x4E\x98\x3C\x7E\x2F\x68\x33\x8A\x58\x6A\x8B\x7B\x92\x6D\xED\x78\xD2\x6B\x88\x32\x7F\xB2\x72\x47\x8A\x47\x54\x4A\x8F\xE7\x73\xF3\x16\x3A\xF0\x78\x7A\x78\xE5\x63\x95\x8E\x31\x67\x32\x42\x20\x7A\x5C\xCE\x7E\x08\x83\x60\x1A\xCB\x0B\xB9\x60\x00\x17\x01\x8E\x7A\x54\x03\x30\x8B\x33\x14\x8C\x83\xFE\x79\x25\x3A\xB9\x23\x83\x1D\x1E\x7B\x69\x0B\x86\x7D\x63\x03\x04\x05\x27\x04\x46\x8A\x32\x81\x20\x6D\x6C\x7B\x01\x8B\x64\x3F\x25\xB0\x06\x9F\x80\xDA\x1A\xAA\x01\x1B\x7F\x9F\x8A\x34\x5E\xAF\x2A\xFF\x54\x6A\x4B\x8A\xA8\x88\x6E\x6B\x38\x8E\xEC\x70\x2A\xB9\x12\x53\x8A\x31\x79\x93\x7C\xE7\x54\xBA\x76\x11\x12\xFE\x55\x14\xF4\x5C\x5F\x83\x59\x08\x4F\x8A\x83\x63\x24\x83\xF3\x4E\x13\xC5\x7C\x20\x6B\x4E\x43\xD8\x7A\xC9\x7D\xF1\x6C\xF2\x68\xF8\x4E\x7C\x8C\x7A\x88\x46\x63\x7F\xC0\x64\xE5\x70\x5B\x57\xF9\x47\x7B\x20\x81\x76\x82\x65\x7D\xC6\x7C\xEE\x7E\xF2\x5C\xF6\x53\x36\x3B\x7C\x12\x04\x59\x89\x4A\x60\x57\x8E\x9F\x71\x00\x34\x00\x73\x8B\xF7\x83\x92\x7F\xC4\x7A\x4D\x78\x2B\x80\xF7\x7A\x8A\x52\x7C\x33\x7B\xBB\x75\xB8\x72\xD9\x79\xF2\x68\xD3\x03\x8B\xCE\x7B\x67\x2C\xA9\x66\x9D\x68\xE3\x67\x2C\x91\xF7\x61\x7C\x8A\x8A\xB7\x88\xAA\x64\x28\x06\x56\x86\xF3\x54\xCE\x60\x82\x7F\x68\x4B\x66\x46\x8B\x98\x72\x6B\x49\xF5\x2B\xCC\x20\x8A\x19\x6C\x91\x89\x9D\x55\xA4\x8F\xEA\x73\x45\x16\x74\x41\x7D\xAA\x89\xAB\x05\x1B\x8B\xD6\x7B\xEB\x66\xBE\x04\xFB\x34\x0D\xD5\x66\x5A\x0E\x17\x39\xD9\x7B\xEC\x74\x35\x02\xCF\x4F\x8A\xA3\x2C\x68\x7F\x97\x3A\xDA\x7D\x6A\x0A\x9E\x61\x9D\x4C\x67\xBF\x79\x01\x67\xF3\x63\x9C\x8B\xED\x6E\xA4\x6C\x5A\x5E\x39\x3B\x79\x70\x39\x21\x40\x83\x7F\x50\x2B\x27\xA0\x77\x22\x54\xC6\x81\x60\x40\x3C\x8F\x87\x68\x50\x68\xE2\x6E\xFB\x24\x69\xF6\x88\x53\x69\x13\x7A\x8A\x7B\x4F\x88\xE8\x3E\x13\xE1\x8A\x00\x8A\x7D\x7C\x18\x65\x86\x7C\x18\x0E\x28\x90\x13\xB5\x7E\x16\x7E\x8A\x88\x2E\x6E\x06\x09\xF3\x63\x08\x3B\xFC\x1C\x7E\x44\x7B\x9F\x7C\x20\x7B\xB3\x89\xF0\x53\xD9\x39\xB4\x66\x3E\x85\x79\xA7\x7C\x4B\x48\x91\x79\xF4\x75\xA9\x4B\xF2\x38\x6A\xA8\x35\x08\x8E\x99\x34\xA7\x6C\xC8\x72\xFA\x4A\xFC\x16\x79\x19\x37\xC0\x7B\xD5\x7C\xCF\x77\x9B\x01\x2C\x9D\xFD\x1F\x1C\x44\x70\x2A\x68\x0E\x01\xB2\x8F\x68\x5A\xE6\x6D\x13\xCF\x35\x70\x6A\x6F\x79\x3C\x3F\x96\x2E\xF6\x71\x9F\x30\xFD\x79\x6A\xE4\x79\x8E\x29\x83\x7B\x1D\x6A\xE9\x7F\xAB\x4B\xC4\x78\x85\x7A\x7E\xEF\x0C\xDF\x7E\x12\x3A\xF9\x66\x2B\xAB\xFF\x64\x00\x0E\x2E\x3B\x03\x49\x02\xC9\x89\xF8\x74\xFE\x6C\xFF\x7B\x7F\xAB\x7F\xF7\x7D\xEB\x7C\x1C\x3F\x7A\x7B\x00\x82\xFF\x0F\x80\xE2\x89\xDA\x7D\xFD\x7F\xF6\x78\x3C\x05\x01\xA4\x11\x0A\x2A\x31\x8B\x23\x8E\x91\x88\x03\x81\x5B\x75\x01\x17\xFF\x03\x02\xD9\x7F\x0B\x80\xF4\x7B\xF3\x70\x65\x8E\xFF\x55\x61\x60\x7F\xC3\x7E\xA8\x8A\x15\x7E\x07\x85\x50\x28\xFF\x73\xF1\x78\x7F\x5A\x8B\x0C\x81\x94\x8D\xFF\x73\x65\x80\xFD\x72\xFF\x72\x8C\xC1\x7A\x03\x83\xFD\x7A\xFD\x74\x66\x8C\x33\xBE\xFE\x3C\x89\x4D\x7A\xA9\x7A\xEB\x7F\xFF\x78\xD5\x78\x32\x84\x00\x84\x42\x74\x8C\xF5\x69\x97\x88\x01\x8A\xFB\x64\x34\xAB\x19\xF5\x6B\xAE\x79\x2A\x32\xF8\x78\xD0\x80\x3D\x71\x34\xB4\x6E\x49\x7F\x16\x80\xCD\x7C\xA6\x8E\x87\x31\xFC\x66\x01\xB1\x19\xB2\x8A\x81\x8B\xC7\x29\x8C\x32\x38\x30\x6A\x9E\x32\x83\xB4\x40\x8A\x2A\x80\x68\x08\x0B\x82\xB6\x70\x52\x76\x01\x31\x00\x86\x02\xB7\x8C\xED\x7E\x88\x6B\x37\x33\x64\x7D\x0A\x0E\xD9\x30\x6C\x48\x6D\x04\x6B\x8A\x69\x76\x2C\x03\x87\xB1\x46\x00\xC0\x80\x8A\x88\x41\x85\x56\x7D\x01\x5D\x63\x84\x02\xBF\x18\xC4\x54\x49\x81\x7C\x77\x12\x87\xFB\x05\x53\x97\x02\xAB\x01\x98\x81\x0C\x3B\xD0\x74\x0B\x87\xDA\x8C\x3A\x7C", +"\xE7\x21\x11\xA9\x77\x03\x03\xD4\x74\xBD\x6C\xDB\x82\x3B\x6D\xDD\x52\x98\x73\x6C\x95\x3C\x89\x3A\x73\x3C\x72\x60\x20\x81\x05\x9D\x17\x7A\x5C\x8C\x84\x00\x0E\x87\x3D\x49\x5E\xA4\x51\xEE\x1D\x03\x93\x85\xDF\x81\x4A\x86\x3B\x89\x4B\x5B\x0A\x8C\xAD\x09\x03\x85\x6D\xCF\x35\x73\x82\xA7\x80\xC6\x82\xAE\x15\x05\xA1\x0A\xE7\x54\xD9\x8B\x5C\x80\x90\x0B\x4C\x8E\x71\x6A\x52\x55\x7A\x73\x8D\xD1\x4E\xB2\x2D\xA4\x84\xD6\x2E\x0D\x80\x07\xA6\xFB\x62\x81\xE0\x4E\x66\x83\xA6\x85\x06\x7C\x0C\x8C\x2B\x72\x02\x9F\x85\x05\x8F\x75\x81\x0F\x74\x1A\x8F\x83\x70\x59\x47\xF0\x38\x71\x1D\x02\x12\x59\x2E\x71\x0A\x8F\x95\x01\x0B\xBB\xAC\x03\x84\x8D\x8A\xD2\x80\xE0\x23\x34\x8D\xD5\x10\xC3\x17\xDB\x06\x02\x37\x8F\xDE\x83\x6A\x87\x37\x80\x13\x01\x0E\x80\x4E\x2E\x83\xDD\x82\xC9\x4B\x6C\x87\x25\x02\x6E\x70\x2E\x96\x07\x4A\x83\xDD\x85\x67\x6F\xBD\x3C\xFB\x61\xD4\x0B\xF3\x6D\x09\x65\x7C\x6D\x05\x21\x4A\xA4\x62\xB2\x84\x2B\x7C\x39\x9E\xD0\x36\x65\xC9\x89\xF7\x48\xA7\x62\x70\x78\xB0\x7C\xDA\x45\xEE\x5D\x70\x9C\x7D\xAF\x77\x5F\x8F\x7B\x62\x00\x82\x75\x1D\x46\x66\x2D\x92\x4B\x7D\x74\x9D\x61\x06\x0F\xAF\x62\x08\x01\xEC\x2B\x4B\x56\x8E\x3E\x67\x4B\x00\x46\x60\xB2\x60\x97\x5E\x04\xCE\x5E\x5D\x77\x4C\x7C\xA2\x82\xCB\x61\x1B\x80\x3F\x10\x07\xDA\x09\xE9\x83\x0E\x05\x18\x8A\x7C\x14\x46\x80\xB8\x70\x1C\xEB\x6D\x23\x72\x39\x01\xE0\x8F\x3B\x88\x89\x46\xC2\x67\x04\x1C\x51\xF0\x83\xBA\x71\x10\x8F\x7C\x73\x44\x99\x52\x77\x07\x9D\x04\x04\x0F\x8A\x87\x14\x19\x13\x49\x31\x94\x9C\x4B\x89\x38\x51\x8C\x73\xB6\x89\xD3\x8D\x48\x80\x7E\x67\x12\xB4\x00\x63\x6F\x41\x15\x42\x40\x96\x84\x48\x3A\x7E\x7C\x12\xA9\x62\x15\x89\x4F\x35\xE5\x82\x95\x84\xD9\x69\xE1\x23\xC7\x5E\x78\x63\x71\xFC\x3A\x26\x8E\x41\x02\xF7\x87\x8F\x78\x15\x81\x01\x40\x88\xC6\x77\xED\x74\x5E\x76\x58\x7E\xA0\x4C\xFB\x5C\xC1\x5A\x2C\x23\x05\x83\x6E\x59\x34\x21\x78\x38\x00\x16\x83\x56\x1B\x04\x1A\x0D\xD7\x3E\x51\x76\x2B\x79\x94\x60\x18\xB4\x00\x02\x86\xE6\x2C\x82\x85\xDE\x12\x82\x57\xDD\x29\x18\x98\xB0\x65\x3A\x01\x71\x87\x87\x3C\x3B\x2B\x7A\x5F\x87\xCA\x67\x0C\xD2\x73\x86\x43\x1B\x00\x0C\x01\x69\x86\x10\x0C\x3F\xAF\x0C\xFF\x61\x1A\x62\x99\x85\x21\x5C\x37\x75\x7C\x83\xCD\x4E\xF8\x05\x62\x8A\x58\xAA\x85\x11\x83\x38\x70\xCB\x65\xCE\x61\x70\x47\x73\xC8\x87\xAD\x86\xFE\x15\x6B\x8C\x9C\x71\x89\x55\xC4\x59\x74\x1C\x74\x38\x32\xDE\x83\x20\x0C\x37\x9F\x1B\xB1\xE9\x60\x87\x54\x2D\x53\x73\xE0\x86\x82\x87\x3D\x87\x1F\x95\xE9\x00\x89\x6E\x74\x3F\x5B\xE6\x82\x43\x71\x3C\x9E\xD1\x51\x94\x40\x74\x07\x88\xEB\x87\xFC\x83\x3D\x78\x3E\x98\x1C\x9A\x0E\x8F\x90\x03\x88\x11\x02\x93\x77\x03\x9F\x42\x82\x21\xB1\x10\xEF\x86\x0A\x4B\xD3\x86\x4B\x4D\x46\x62\x3B\x87\x77\x74\x0E\xB2\x00\xC8\x4A\x83\x01\x0E\x94\x39\x39\x42\x9F\x1F\x9D\x0E\xC2\x87\xE3\x87\xF8\x85\xF9\x87\x05\x94\x3A\x97\x40\x8C\x10\xFD\x82\x7A\x33\x1E\x93\x0A\x88\x2B\x0A\x67\x34\x20\xAE\x10\xC2\x90\x30\x88\x06\x77\x4A\x4B\x0A\x0B\x3D\x9E\xD3\x4A\x21\xBF\x90\x1F\x89\x27\x92\x01\x8C\x6D\x82\x82\x89\x20\x85\x21\xF5\x87\xD7\x28\x13\x88\x7C\x69\x09\x9D\x41\x90\x40\xBA\x59\x2D\x88\x8E\x86\x28\x92\x0B\x92\x0A\x99\xB5\x57\x1F\xAF\x7E\x31\x87\xB3\x40\xDA\x85\xEB\x81\xA8\x18\xE7\x5F\x1F\xB0\x0E\x99\x74\x34\x01\x98\x48\x0D\x04\xBF\x3C\x0B\x07\x09\x3D\x21\xE4\x38\x34\x01\xDD\x87\xFF\x84\x4B\x41\x88\x94\x69\x74\x00\x41\x87\xB2\x26\x6A\x31\x00\x8D\x05\x9D\x85\x83\x21\x9F\x21\xD9\x87\xB1\x54\xF3\x3C\x21\x93\x24\x47\x88\x91\x1E\xB2\x4E\x05\x2B\x8B\x90\x35\x91\x23\x94\x08\x94\x3F\x90\x44\xAF\xAB\x53\x4D\x7B\x5D\xB9\x85\x46\x01\x0F\x97\xEE\x5B\x43\xB4\x00\x68\x7C\x02\x02\x35\x7E\x5B\x05\x10\x97\xA3\x35\x44\x90\x20\x83\x6A\x39\x22\x4E\x37\xF7\x84\x02\x93\x82\x8F\xAC\x0A\x94\x76\x08\x8B\x86\xBD\x30\x2B\x97\x12\x3E\x8A\x89\x41\x97\x22\xB2\x91\x8C\x91\x0B\x88\xA9\x59\x83\x81\xAB\x53\x36\x70\x11\xBA\x16\xAD\x29\x39\x88\xE5\x64\xF0\x8B\xBA\x79\x23\x8D\x14\xA0\x79\xB1\x88\x12\x07\x2C\x8E\xC8\x72\x03\x19\xF8\x42\x04\x1B\x7E\x02\x8D\xB4\x7A\x34\x8D\x97\x88\x50\x72\xE5\x44\xF0\x0C\x6A\xB5\x78\xAA\x89\x31\x89\xEB\x88\x2E\x7A\x37\x6D\xFC\x02\x4B\x2F\x7F\xC9\x7E\x61\x4F\xEC\x4F\x8D\x93\xDF\x53\xA2\x29\x89\x31\x00\xFC\x74\x43\x0F\x3D\x85\xD1\x6C\xF1\x57\xD5\x21\x7E\x21\x7B\xAA\x83\xBC\x75\x1D\x95\x06\x10\x35\xB1\xFC\x19", +"\x6C\x1D\x7A\x3D\x69\x0D\x02\x05\x0C\x02\x24\x48\x89\x15\xAB\x7B\x6A\x8C\x27\x8C\x65\x46\xDB\x6D\x53\x80\x47\xA5\xFC\x78\x8B\x55\x8B\x3C\x2F\x55\x8B\x06\x8C\x6B\x95\x01\xBD\x00\xE6\x7F\x39\x81\xC3\x5B\x0E\x87\xD7\x8E\x69\x92\xB1\x72\x4E\x47\x36\x68\x6C\x1F\x8C\x6A\x76\xD9\x8A\x9A\x60\xCA\x45\xCB\x2D\x03\xD3\x8C\xE8\x65\x98\x8D\x7E\x73\x66\x81\x26\xBC\x77\x13\x7A\x06\x02\x98\x92\xF6\x7D\x1E\x9E\x5C\x7A\x32\x34\x1D\x87\x50\x39\x2C\x8D\x79\xD8\x8D\x6A\x80\x5D\x9E\xE8\x7B\x24\x80\x6B\x06\x47\x7C\x92\xD5\x5B\xA4\x78\x53\x85\x03\x0B\x16\xD6\x7B\x16\x03\x09\x44\x8B\x8D\x97\x6C\xD4\x76\x2B\x95\x16\xBC\x1C\x97\x8A\x8B\x47\x5E\x8A\xB3\x87\x93\x9E\x2E\x6A\xAC\x1E\x8B\x16\x47\x74\x68\x97\x79\xB3\x71\x5A\x88\x2D\xB7\x02\xA7\x8B\xDE\x05\x08\x7B\x23\x6B\x82\x75\x03\x08\x27\xA3\x17\xBF\x78\xEA\x89\x20\x7B\x36\x7E\x31\x74\xC4\x69\xF7\x71\x13\x8C\x7E\xEE\x8A\x23\x05\x5D\x49\xBE\x81\xEF\x6B\xE1\x78\xFB\x4A\x78\x51\x79\xFB\x8B\x14\x7A\x9E\x65\x58\x51\xE8\x10\x23\x8F\x8A\x13\x0E\x9B\x7F\x7F\x89\x80\x68\x03\x02\x05\x2C\x40\x06\x93\xB9\x89\x55\x79\xC7\x7A\xC1\x84\xDC\x65\x8F\x43\xF2\x10\x8C\x45\x7F\x0D\x8F\x21\x7A\xA6\x69\xC8\x76\x30\x8B\xFD\x0D\x79\x84\x79\xC8\x92\x9C\x34\xC3\x88\x61\x88\x7A\x43\xD3\x55\x7E\x70\x92\x10\x7F\xAF\x7D\xC4\x84\xFE\x73\x38\x0F\x13\xBA\x89\x3E\x7E\xA0\x7D\x20\x7E\x31\x93\xF4\x79\x30\x9A\x26\xEA\x35\xC1\x85\xCA\x93\x06\x81\xEA\x7D\xF4\x7B\xA9\x50\xFD\x1D\x8C\x34\x6D\xCF\x92\x51\x5A\x9E\x8A\x8F\x95\x58\x64\x26\xC1\x8A\x32\x7E\x04\x8D\x60\x91\xC0\x81\x8D\x8D\xC0\x79\x00\x05\x8C\x02\x03\x03\x8D\x36\x95\xC4\x7C\x98\x9D\x2B\x92\x71\x0F\x93\x4E\x2A\x0D\x8F\x66\x93\x32\x98\xF4\x64\x68\x4C\x6C\x7A\x2C\x17\x8C\xA6\x7E\x6B\x96\xE9\x72\x99\x91\xE4\x78\x26\xBA\x61\x9D\x34\xA1\x69\x68\x93\xC4\x83\x9A\x88\xAA\x43\x19\xFD\x47\x45\x8D\xF0\x52\xE6\x7E\x8B\x3A\x7B\x83\x08\x3C\x1E\x89\x92\x11\x02\xFD\x7F\xA1\x8B\xCF\x80\x92\x5D\x33\xAF\xFE\x58\x93\x8D\x8D\x4D\x8C\xAA\x8D\x34\x95\x00\x93\x00\xAC\x89\x13\x8D\xEE\x6A\xDD\x7F\x4A\x93\xCD\x85\x6D\x93\x35\x8C\x15\xC8\x8C\x94\x67\x9D\x8B\x4C\x97\xD2\x86\x7C\x3E\x47\xBE\x25\xC1\x93\x43\x8B\x00\x69\x0C\x01\xAA\x54\x00\x34\x3A\x97\x22\x26\x7B\x59\x8B\xFD\x90\x6E\x6C\xFD\x6D\x3D\x6D\x48\x92\x15\xE1\x91\x10\x93\xF2\x56\x83\x93\xE2\x02\xD1\x31\x50\xB8\xD2\x38\x00\xB7\x8D\x81\x01\xAE\x89\x20\x94\x91\x83\xCC\x3D\x1A\xA6\x27\x36\x80\x8C\x92\xB0\x8A\xC9\x6B\x91\x91\x51\xBE\x27\xEA\x6B\xC8\x8D\xE3\x31\x48\x94\x24\x98\x33\x9C\x51\xB3\x76\x41\x68\xCC\x83\x2E\x89\x4A\x90\xFE\x0B\xAF\x7D\x6A\x2E\xDB\x21\x83\xD4\x07\x30\x8B\xE7\x8B\x84\x69\x6D\x62\x3D\xAA\xCF\x17\x50\x22\x59\x56\x6E\x88\x3C\x06\x02\x6B\x62\x08\x34\xDA\x17\x50\x4C\x3C\x5F\x51\x0F\x56\x0C\x5B\xBF\x59\xB5\x47\xAB\x29\x50\x6D\x51\x23\x53\x1B\x50\x4C\x85\x6C\x6D\x0E\x87\xDB\x63\x94\x4F\x50\x15\x69\x91\x3B\xD9\x63\x85\x4A\x2D\x97\x2E\x50\x8E\x44\x02\xD8\x2C\x2A\x91\x20\x0A\xE6\x61\x2E\x75\xCA\x03\x33\xC6\x89\x5C\x65\x79\x67\xEF\x4C\x75\x9B\xDA\x44\xEE\x3C\x92\x9B\x7D\x84\x77\xD5\x87\x8A\x8E\x01\x97\xF7\x1C\x11\xD4\x64\x6A\x8F\x30\x64\xEC\x2D\xED\x81\x10\x0F\x3B\xBA\xC9\x71\x8E\x05\x76\x6E\x72\x50\x87\x27\x95\x28\x9D\x08\x9D\x1D\xFF\x94\x40\x92\x68\x8F\x9F\x8D\x8B\x88\xD1\x04\x12\x95\xA8\x3F\x30\xE1\x6F\xD7\x8A\x5A\x8F\x40\x55\xA1\x5A\x73\x75\x1E\xB3\x85\x41\x01\xDB\x8C\xAA\x90\x0E\x3D\x9E\x9D\x4E\x28\x9E\x28\x95\xC0\x8E\x4E\x1F\xF1\x72\xDC\x05\x8A\x55\xF2\x68\xFB\x37\x29\xC7\x8F\xCD\x29\xF2\x8E\x84\x4B\x7C\x9D\x15\x97\xAE\x4E\x8F\x75\x82\xE8\x8E\x50\x2B\xFA\x89\xB7\x1F\x17\xB9\x2D\x3D\x39\xD8\x8E\x55\x2A\xF6\x8C\xD3\x1C\x7D\x93\xCA\x69\x16\x5F\x8F\x8A\x6C\xDF\x39\x56\x70\x40\x6A\x4D\x44\x3F\xB2\xD3\x47\x72\xC4\x94\x4E\x1F\x0F\x32\x29\x72\xAA\x80\x48\x04\x5F\x47\x72\xAF\x88\x7B\x69\x68\x49\x87\x83\x31\x70\xBD\x3C\x10\x80\x00\x3C\x65\x40\x95\x09\x16\x9E\x2D\x0E\x45\xDF\x73\x07\xD0\x34\xA9\x81\xD0\x61\x68\x4F\x54\x97\xB9\x49\x55\x84\x9A\x38\x8F\x32\x01\x56\x96\xBF\x17\x55\x95\xAF\x8C\x57\xA1\xA2\x41\x8F\xE6\x77\xE1\x8F\x47\x64\xB2\x39\xAB\x88\xA7\x3B\x2A\x9E\x60\xDB\x2E\xE6\x8E\x62\x00\x58\x9B\x64\x11\x3E\x8A\x54\x74\x95\xB8\x84\x21\x02\xAA\x97\x20\x70\x7B\x2B\x05\x27\x04\x16\x96\xAE\x57\x88\x96\xBF\x92\x58\x70\xB0\x8F\x57\xB5\x2A\xF0\x56\x9F\x3D\xDE", +"\x55\xA5\x00\xDC\x66\x29\x1A\x49\x1E\x79\x01\x2D\x68\x91\x59\x87\xC8\x96\x38\x85\xB2\x94\x4D\x34\x71\x09\x96\xBE\x94\x5C\x84\xB0\x91\x27\x14\x9B\x12\x67\x73\xB2\x6C\x6D\x8B\x8E\x36\x3C\x26\x52\x06\x0D\x1E\x81\x08\x10\x1E\x89\x8F\x1B\x97\x7E\x84\x49\x3A\xF8\x88\xBC\x64\x3E\x97\x1C\xF6\x83\x6D\x64\xFC\x83\x19\x89\xF2\x01\xBB\x75\x3B\x30\x5E\x70\x24\x09\x02\xA8\x97\xC8\x55\xEE\x01\xB4\x8E\x57\xBD\xEE\x5E\x77\xE4\x8D\x41\x04\x7E\x1B\x69\x98\xB9\x0D\x5A\x91\x1E\x70\x30\x52\x97\x81\x02\xD4\x91\xD7\x74\xB5\x96\xA6\x2D\x2B\x93\x8F\x02\x96\xE5\x77\x26\x8D\xDC\x84\xD9\x1A\x24\xA1\x29\xF0\x81\xD0\x3C\xC0\x72\xD3\x92\x06\x0B\xCC\x50\x7D\x32\xE5\x6B\x96\x83\x05\xAA\x94\xDA\x95\x68\x9E\xBB\x79\x5A\xB2\x08\x78\x1B\x6E\x96\x43\x50\x7C\x39\x99\x4F\x49\x9D\xF7\x2E\x81\x77\x96\x6F\x96\xBB\x16\xDE\x95\x63\x9D\xBB\x7D\xB3\x29\xEF\x20\x66\xEB\x77\x30\x56\xDA\x91\x71\x9C\xB6\x80\x54\x27\x1F\xC4\x86\xD1\x41\x1B\x02\xD1\x80\x69\x8A\xFD\x49\x0D\x46\xC5\x1F\x73\xF2\x8E\xC0\x6E\x21\x5A\xD9\x85\x33\x93\x1A\xB7\x0C\xBC\x47\xDB\x63\x4C\x97\x6A\x74\x67\x86\x39\x9E\x19\xBA\x67\x40\x42\x9A\x58\xB0\x85\x86\x75\x06\x96\x37\x81\x20\xB0\x61\x39\x90\x03\x03\x1D\x91\x00\x8D\x0C\x99\x82\x80\x28\x60\x10\xA1\x90\xC2\x90\xEC\x86\x42\x4B\x79\x88\x84\x9C\x41\xBC\x2E\x92\x88\xD2\x87\x88\x48\xF5\x81\x84\x8B\x89\x8C\x43\x9A\x10\x9C\x88\xBF\x87\xE0\x86\xF8\x82\x79\x91\x8C\x95\x40\xB0\x20\xAB\x4A\x62\x90\xE8\x96\xF7\x86\x7D\x80\x47\x7C\x40\x9A\x22\xC1\x97\x16\x90\x30\x93\x61\x85\x86\x8F\x86\x98\x43\xBA\x21\xF2\x94\x53\x8E\x40\x90\x25\x97\x07\x99\x88\x80\x46\x9F\x2F\xD6\x97\x8F\x91\x5B\x91\x2C\x96\x4F\x7B\x8B\x8B\x45\xAC\x2F\xC5\x22\xEE\x97\x2D\x92\xE8\x86\x0B\x9D\x89\x92\x5F\xBE\xAD\x78\x90\xB3\x41\x3D\x93\x1C\x96\xCB\x15\x87\x81\x44\x98\xE8\x35\x64\x35\x01\x98\x49\x0D\x04\xBF\x36\x00\x1E\x7A\x0D\x30\xE4\x38\xD7\x42\xDA\x67\x2A\x94\x4B\x41\xC1\x97\xD1\x35\x00\x41\x87\x3C\x72\xFB\x97\xFB\x93\x04\x9B\x40\x97\xA6\x06\x3F\x48\x74\x15\x99\x4B\x33\x05\x99\x7A\x81\xEF\x3C\x45\x95\x2F\x9C\x98\x8A\x75\x23\x00\x15\x00\x84\x93\x12\x43\x61\xAF\x22\xA0\x53\x21\x97\x51\x93\x09\x9C\x7F\x94\x82\x86\x42\x9E\x30\xC5\x00\x2C\x98\x9A\x5A\x0B\x99\x05\x9E\x03\x11\x61\xB0\x01\x2E\x91\xB4\x90\x1A\x99\x07\x9A\x04\x0C\xFB\x19\x61\x96\x30\xC1\x87\x3D\x00\x1F\x98\x10\x9C\x79\x90\xBE\x97\x5E\xB5\x66\x51\x00\x46\x98\x11\x99\xF0\x81\x04\x0A\xC4\x93\x61\x8E\x22\xFD\x97\x2B\x4B\xDE\x20\x96\x71\x43\x79\xC0\x87\x77\x4B\x30\xB4\x00\xF4\x00\x16\x21\x18\x98\x82\x9D\xC2\x98\x60\x9C\x6A\x4B\x98\xC0\x96\xF8\x96\x27\x3B\x88\x9F\xC1\x9E\xD3\x61\x30\xEE\x02\x3B\x98\xE4\x95\x09\x9A\x83\x9A\xBF\x92\x1F\xB4\x30\xB6\x91\x2B\x4A\x15\x99\xBE\x37\x8D\x99\x11\x11\x63\xAC\xE8\x3C\x00\x55\x99\x0D\x9B\x1D\x9C\x8D\x98\xC3\x8E\x63\xA5\x31\xA4\x98\x81\x99\x3A\x9B\x10\x90\xDF\x53\x43\x97\xA6\x05\x31\x86\x99\x3A\x98\x24\x99\x22\x99\x88\x97\xC5\x8E\x03\x38\x31\xCF\x98\x7B\x99\x43\x9B\x0B\x9C\x8A\x97\xC6\x96\x62\x9C\x22\x96\x99\x43\x98\x2D\x98\x3C\x2E\xBF\x88\x9A\x82\xE5\x73\xC7\x45\x93\x49\x93\xF4\x52\x35\x91\x20\x08\x8D\x88\x65\x98\xF8\x1E\x7E\xBC\x89\x90\x7C\x59\x3B\xE4\x71\x4C\x80\x2B\xAF\xF1\x5F\x3C\xDB\x88\x4D\x64\xC3\x82\xB2\x77\x8E\x8A\xE2\x69\x23\x81\x8B\x23\x94\x12\x06\x0B\x64\x45\x9E\x3E\x74\x9C\x6C\x33\x6B\x8A\x75\x68\x98\x88\x91\x8D\x28\x9D\x92\x93\x29\xB9\x14\xB2\x00\x30\x93\x81\x02\x4C\x90\x3E\x91\x55\x80\xB3\x2A\x37\x41\x71\x19\x7A\x01\x6F\x50\x80\xC7\x6A\x93\x82\x54\xAA\x2E\xAB\x7E\xBD\x92\x83\x78\x49\x7B\xBB\x1E\xA6\x95\xED\x71\x1C\xB7\x7B\xD1\x69\x69\x6A\x85\x95\x29\x94\x59\x93\x58\x69\xF8\x3D\x13\x51\x7D\x9A\x92\x9B\x89\x18\x73\x76\x93\xEC\x6A\x23\xD9\x92\xA0\x8A\x16\x1D\x61\x8D\xB4\x8F\x59\x80\x4B\x83\x14\x87\x1F\xE6\x2C\x6E\x7F\x58\x95\x3E\x66\x96\x83\xE7\x28\x25\x99\x78\x6A\x93\x17\x8E\xAD\x93\x97\x9F\x4E\x8E\x4B\xAC\x17\xAC\x54\xF5\x98\x7A\x8B\x12\x7A\xBE\x8D\xE5\x77\x4B\xA5\x53\x79\x92\xF7\x7C\x7D\x88\x43\x39\xA0\x8B\xEF\x7F\x3E\x01\x33\x8C\x03\x46\x8C\x23\x7C\x0C\x01\x45\x92\x10\x0B\x51\xA6\x28\xE0\x7A\x34\x80\x22\x6E\x8D\x93\xCB\x81\x55\x39\x48\x80\x88\x35\x94\x17\x93\x1B\x97\x42\x49\x47\x99\x9B\x3B\x51\xB7\xD8\x5F\x8E\x75\x7F\x4E\x7D\x69\x4B\x53\x98\x92\x9C\xB2\x50\xCF\x26\x7A\xD6\x02\x38\x97\xA3\x63\x06", +"\x03\xA7\x80\x00\x35\x29\x8E\x65\x77\x95\x5C\x7A\xA6\x62\x4F\x96\xAB\x9B\x95\x49\xA0\x45\x82\xFB\x8E\xC3\x77\xDD\x8D\x61\x73\xA8\x82\x4D\xA5\x1D\xDE\x12\x22\x71\xB4\x8D\xCC\x8C\x4E\x63\x03\x0C\x54\x80\x00\x0E\x95\x7D\x8E\x82\x75\x98\x66\x60\x7D\x45\x70\x6A\x95\x2A\xD2\x9A\x97\x95\x8F\x83\x37\x98\x8C\x68\x28\x6D\x3A\xB6\x1E\xF7\x95\xAB\x94\x1A\x02\xBE\x90\xD8\x1C\xAF\x9E\x3D\xB1\x2A\xC3\x96\x01\x96\xBE\x94\xBA\x44\x60\x9A\x0C\x38\xA1\x08\x1F\xEB\x11\x55\x8D\xE4\x57\xAF\x91\x5C\x87\x19\x81\x56\xB9\x08\x0E\x96\xF0\x28\x88\x94\xE2\x02\x62\x90\xD7\x94\x58\xB1\x00\x18\x96\x06\x02\xC8\x99\xEF\x8B\xB1\x97\xD7\x9B\xF3\x04\x2D\xB4\x95\x46\x97\x2A\x7C\xDB\x79\x5A\x84\x29\x1C\x2C\x57\x24\x26\x96\xE1\x40\x94\x96\x6A\x32\x65\x9E\xD9\x9A\x36\x20\x36\x89\x51\xB1\x30\x98\x96\xB7\x83\xB0\x9C\x8A\x65\x6C\xB4\x2C\xF7\x05\x72\x87\xD4\x84\x2F\x97\x7C\x94\xD4\x89\x5F\xA3\x85\x75\x97\x32\x98\x4B\x91\x2C\x91\xA2\x43\x8B\x8C\x62\xAA\x31\xB5\x98\xE2\x96\x5C\x91\xBE\x30\xB7\x9F\xC3\x88\x44\xB8\x2F\xBC\x9B\x9E\x98\xE7\x95\x31\x91\xB6\x9D\x7F\x33\x0E\x5D\x31\xB5\x97\x70\x98\xD8\x2F\x18\x9E\x20\x03\xDD\x8C\xCE\x3C\x31\xF0\x00\x7E\x98\x26\x93\xF4\x6E\x84\x92\xC8\x95\x64\xAC\x31\xAB\x98\x90\x99\x23\x98\x8F\x72\xCF\x23\xC7\x99\x6D\x8A\x32\xD1\x90\x44\x75\x82\x2A\x1E\x99\xBC\x92\xC5\x83\x6F\xAC\x7B\x13\x99\xBE\x9A\x14\x99\x23\x9A\x04\x01\xFB\x19\x64\x91\x32\xEE\x9B\xC8\x3C\xF8\x99\x1A\x9A\xBE\x94\x8C\x84\x62\x85\x32\xFE\x58\xD7\x9B\xEC\x98\x64\x41\x89\x9D\xC9\x9D\x6E\x9F\x32\xC3\x98\xD6\x1E\xFB\x9A\x78\x9E\x0C\x97\x4D\x3C\x64\xAD\x22\xC9\x9B\xE9\x9A\x47\x47\x7F\x9C\xDC\x55\x03\x13\x05\x4B\x30\x83\x98\x6A\x21\x3A\x93\x75\x47\x80\x92\x8A\x90\x03\x36\x00\x31\x4A\x36\x00\xFE\x38\xEA\x88\x4E\x1D\xCC\x56\x01\x02\x22\xB5\x00\x5C\x44\x13\x9C\x4D\x5E\x06\x01\x3C\x90\x8A\x18\x22\xF0\x98\x10\x9C\xCB\x87\x4A\x48\x0B\x00\xF4\x79\x1F\x99\xE8\x1F\x9C\xE7\x5D\x10\x9F\xFD\x77\x24\x0A\xBF\x77\xC4\x2A\x38\xB7\x34\x2C\x9D\xE8\x86\x8B\x9C\x53\x3E\xC2\x94\x64\x9F\x32\x97\x99\x05\x2A\x1A\x9F\xB4\x4B\x40\x9E\xCC\x85\x03\x0D\x33\x88\x1B\x39\x8B\x19\x01\x34\x9A\x20\x03\xCD\x83\x67\xAE\x12\x96\x7A\x64\x9B\x04\x51\x37\x9E\xEB\x80\xA8\x9B\x72\x98\x2A\xCF\x8D\x71\x4C\x76\x7E\xC3\x7E\xCA\x96\x94\x85\x67\x95\xF7\x67\x99\x29\x7B\x15\x8E\x3A\x9E\xA5\x75\xE2\x6E\x4A\xAE\x33\x96\x8B\x50\x7C\xCC\x8A\x3C\x9C\x2A\x98\x21\x79\xA6\x53\xAC\x58\x92\xA3\x2C\xAD\x90\x61\x8D\xCB\x7C\xCF\x98\x67\xBE\x33\x8D\x10\x8A\x9A\x69\x87\xC4\x96\xF7\x8D\xCB\x33\x6B\xAF\x27\xE3\x71\x95\x9B\xD9\x0B\xAC\x94\xEC\x0F\xB1\x8B\xED\x3C\x35\xA0\x1F\x7E\x9A\x5D\x97\xC5\x6D\x57\x9B\xDA\x98\x15\x96\x06\xC5\x56\xC2\x94\xE9\x8D\xA2\x65\x77\x5C\xD8\x97\x42\x5C\x3A\xF0\x30\x58\x00\x16\x21\xA8\x99\x63\x94\xD9\x91\x0F\x8C\x2E\x94\x8F\xD8\x74\x61\x50\x69\x9D\xE3\x4F\xD9\x8E\x59\xB0\x56\x29\x96\x97\x57\x95\x96\xEE\x56\xB4\x9E\xEA\x89\x6D\x9D\xAE\x32\x96\x84\x9B\x36\x90\xF9\x93\x7D\x8E\x51\x53\x15\x82\x01\x09\x9D\x30\x03\x45\x9F\x49\x39\xB3\x90\xB2\x83\x6D\xB1\x3A\xA5\x9B\x2D\x97\x7B\x05\x59\x37\x8A\x2E\x2C\x4B\x75\xA4\x2C\xEE\x90\x5E\x3C\x5B\x9E\x60\x98\xD7\x9D\xDA\x9A\x75\xA7\x36\xCC\x9B\xF5\x48\xE7\x9A\x02\x98\x0E\x33\xDD\x83\x08\x15\x37\xA2\x98\x9A\x99\x14\x91\x68\x57\xC1\x96\xE0\x8A\x6E\xB4\x37\xE0\x9B\x00\x9D\x70\x9E\x1C\x9D\x7B\x98\xC6\x9C\x42\x8D\x31\xF1\x97\x79\x98\x74\x9F\x53\x31\xC0\x98\xC1\x99\xD6\x5C\x37\xE7\x9B\x6B\x91\x08\x9C\x7D\x9F\xBF\x93\xEF\x8A\x77\xAC\xE8\x3D\x98\xEC\x9D\x18\x9D\x00\x92\xA1\x4F\xC8\x89\x77\xB7\x37\xAF\x98\x04\x9D\x88\x49\xBB\x9B\x7F\x9E\xDD\x8A\xD4\x49\x38\xEC\x9B\x30\x9D\xE8\x84\x27\x9A\xE1\x92\xF0\x82\x5E\x99\x31\x93\x9C\x37\x9C\x10\x9C\xEC\x2A\x1E\x94\x51\x05\x71\xA3\x84\x41\x9C\x0C\x9C\x11\x03\x90\x9B\xC1\x96\xE4\x86\x77\x8A\x39\xD8\x9D\x7F\x41\xFD\x46\x0D\x03\x16\x41\xE2\x98\x70\x90\xD1\x75\x90\x26\x9C\x0E\x9E\x6C\x9E\x2D\x07\x03\x11\x29\x77\x00\x22\x9C\x27\x03\xF2\x6C\xCD\x9A\x10\x96\x03\x1C\x12\x77\x00\x23\x42\x37\x01\xE0\x86\xA4\x0C\x53\x30\xF2\x85\x79\xBA\x3B\xED\x6B\x5B\x99\x1A\x65\xCD\x9F\xDC\x57\xF3\x9B\x71\xA8\xCE\x4D\x59\x3F\x9E\x9A\x59\xD0\x99\x7A\x83\xF4\x80\x72\x95\x3C\xB2\x88\xFD\x9A\xA4\x9C\x3C\x2C\xC9\x90\xE5\x8E\x72\xAA\x27\xC5\x92\xBD\x39\x29\x9D\x40\x05\xCA\x95\x94\x9D\xDF", +"\x64\x35\xAE\x50\xDA\x98\x4A\x95\x42\x66\xCB\x9A\xD6\x80\x73\xA0\x7C\x42\x92\xED\x64\x01\x80\x3F\x93\x08\x3C\xF6\x96\x08\x36\x77\x75\x9E\x55\x65\x18\x02\x7E\x21\x21\x0B\xF7\x8C\x4A\xBE\x24\x85\x1A\xD7\x75\xF2\x61\xA1\x97\xEF\x95\x82\x0C\x3A\xAA\xCF\x63\x71\x3F\x30\xDC\x8D\xB7\x91\x91\x1C\x24\x50\x55\xB2\x3C\xCD\x9B\xD0\x71\x78\x71\x7D\x66\x1E\x07\x12\x14\x7C\x99\x2C\xAF\x85\xFC\x70\xD7\x8C\x67\x99\x57\x84\xB9\x5C\x06\x43\xE4\x57\x85\xB8\x82\x7D\x12\x43\x73\xA3\x2B\x8E\x71\x22\x79\x22\xBD\x8F\x98\x9E\xEE\x82\xAC\x85\x5E\x94\x90\x6D\x07\x5F\x3E\xBA\x85\xC7\x57\x6E\x86\xE8\x99\x1D\x7F\x90\x74\x0B\xAC\xE3\x14\x93\xA8\x86\xC8\x9D\xA4\x02\xF2\x98\x03\x08\x01\x2C\x40\x3E\x9F\x97\x9E\x66\x86\xEC\x50\x56\x8A\xF9\x8F\x7D\x9D\x3E\xE2\x71\xA8\x94\x6E\x84\xF2\x9F\x20\x7A\xFC\x80\x87\x73\x3E\xCB\x57\xEA\x70\xBA\x83\xB8\x85\x1C\x39\x8D\x74\x32\x7A\xE3\x4E\x85\x3A\x5E\x7F\x70\xEB\x98\xF4\x9C\x66\x4B\x7D\xBE\x1E\xCA\x9F\xDA\x84\xCB\x00\x42\x70\xF6\x98\x2D\x98\x05\x8F\x3F\xBF\x85\xB9\x9C\xE7\x56\x44\x70\x9E\x23\xE8\x88\x1C\x15\x0A\x4F\x80\xAB\x9C\xE2\x43\x49\x01\x37\x24\xEA\x98\x49\x1B\xF7\x0A\x49\x22\x96\x5A\x9F\xBD\x01\x14\x93\xF3\x99\x08\x38\x38\xD0\x9B\xFE\x9E\x38\x30\xC7\x9E\x9D\x0E\xF1\x8B\x71\xAD\x38\xA9\x6A\x11\x4B\x22\x9D\x7C\x9A\x88\x9A\xA8\x67\x79\xB9\x3E\xD9\x9D\x97\x31\xA5\x9C\x00\xA0\x0E\x07\xF3\x92\x01\x03\x40\xBD\x9C\x3B\x9E\xA9\x9F\x0F\x95\xEA\x9E\xE3\x97\x7A\x8E\x31\x8A\x66\x49\x3A\x72\x5F\x0D\x03\x16\x47\xF3\x8E\x79\xA4\xD1\x75\x90\x3F\x9F\xC7\x9C\x04\xA6\x2D\x08\x03\x11\x29\x78\x00\x7C\x3B\xCB\x5C\x00\x01\xE5\x2F\x12\x38\x03\x02\x44\xB7\x00\x5C\x44\x35\xA0\x9A\x58\x0E\x01\x78\x80\xF4\x71\x80\x9E\x40\xF0\x9D\xE8\x50\x50\x90\xB9\x5D\x05\xA7\xEE\x4F\x81\xB4\x00\x64\x86\x8A\x19\x66\x59\x0E\xA7\x46\x3B\x03\xB1\x1E\xBD\x40\xB4\x9E\x3F\xA1\x35\x9A\xA2\x73\x80\x00\x66\x8B\x66\x9E\x28\xDE\x9E\xEB\x1C\x03\x96\x57\x8F\xA1\x77\x03\x02\x7B\x80\x00\x64\x9E\x57\xA0\xB3\x9C\x95\x6D\x27\x96\xD7\x1B\x66\xB8\x34\xF8\x9E\x88\x76\x8B\x67\x68\x89\x9C\x98\xF5\x64\x73\xB4\x3D\xE9\x9E\x05\x1A\x1B\x86\x40\x00\x47\x88\xF7\x81\x23\x91\x14\xBF\x84\xD4\x98\xFB\x12\x32\x98\x3D\x9C\xCC\x9F\x7A\x97\x41\x8E\x2E\x69\x82\xFC\x63\x06\x54\xCC\x92\x06\xA8\xB3\x68\x41\xB5\x4C\x70\x35\x43\xA1\x9E\x79\x28\x92\xE6\x84\x4A\x97\x41\x96\x8D\x4D\x9D\x42\xA0\xA6\x70\xED\x93\xFE\x66\x83\xBE\x6A\x62\x4D\x64\xA1\x5B\x0A\x25\xA3\xAD\x9D\x4D\x8E\x09\x83\xF0\x45\x92\xA6\x84\xC9\x9D\x0E\x07\x01\x0C\x02\x24\x85\x81\x3F\xC2\x4F\xD8\x9F\x80\x66\xF6\x9F\xFB\x9C\xFD\x81\x7F\x9C\x3E\xBB\x85\xE6\x9F\x6F\x87\xA0\x07\xD2\x91\x9B\x9D\x75\xB8\xE3\x56\x9F\xCD\x84\xE2\x9F\xB3\x86\xD8\x9C\x0A\xA4\x7F\x82\xE4\x49\x9F\xDC\x9F\x6C\x86\xF7\x9B\xB1\x9D\xFC\x85\xF2\x27\x3F\xF1\x6C\xC0\x95\xE9\x9C\xFB\x9D\xB1\x98\x2B\x95\x14\x03\x61\x79\x9F\x55\x64\xDC\x8A\xC4\x79\x20\x0D\xF8\x87\x76\x93\x96\x4E\x94\xFC\x52\x4E\x9D\xFB\x9C\x78\x5E\x70\x23\x75\x86\x04\x5E\xA1\x93\x9A\xE2\x54\xB0\x99\xB8\x32\x44\x89\x75\x83\x43\xF6\x9F\xAC\x9C\xFD\x9E\x90\x3F\xC5\x30\xEB\x8D\x86\x88\x3B\xD0\x9D\xE1\x40\x69\x9E\xC2\x96\x32\x03\xB3\x8A\x87\xBC\x3A\xF5\x31\xBE\x9D\x71\xA2\xB0\x9C\x3E\x86\x0E\xBB\x7C\xB2\x3A\xAD\x9D\xCA\x9D\xEE\x9E\x08\x05\x1D\xAE\xFE\x8F\x87\xBB\x3A\xF1\xA1\xEF\x33\x79\xA1\x1B\x05\x1E\xA9\xEC\x92\x11\x28\x3C\xC0\x0B\x11\xA0\x9B\x9E\x00\xA4\xC7\x90\xF5\x80\x7A\x82\x3D\xFE\x63\x11\x4B\xA2\x9F\x02\xA5\xE1\x93\xDF\x9A\x7A\xB3\x20\x9D\x9C\x44\xA1\x09\xA3\x0B\xA7\x3F\x77\x12\x1E\xA3\x74\x40\xA3\x42\x4D\xA1\x90\x9F\x13\xA1\x23\x03\xF5\x98\x77\x8D\x2F\xFA\x9D\x54\xA1\x07\xA1\xCA\x9B\x3A\x48\x03\x13\x05\x6F\x40\xA6\xA0\xFD\x7D\x3A\x91\x0D\xA2\x05\xA3\x13\xB7\xC4\x39\x00\x31\x4A\x39\x00\x0E\x57\x49\x00\xF2\x4E\x16\x19\x01\x02\x22\xB8\x00\x5C\x44\xA3\xA0\x4D\x59\x07\x01\x3C\x9F\x01\x15\x80\x34\xA0\x51\xA0\xE0\x9A\x27\x92\x1E\x34\xF2\x15\x15\x15\x36\x03\x5A\xFC\x9E\xDD\x9D\x46\x07\x27\xA7\xEE\x41\x8A\xB4\x00\x3A\x26\x09\x02\xB0\xA3\x58\x42\x29\xA7\xA3\x2C\x8A\x91\x0F\xCE\xA2\x9C\x35\x94\xA2\xD1\x98\x83\x88\x3E\x94\x8A\xA0\x09\x56\xA2\x15\x03\x2A\xA0\x1F\xA7\x0A\xAF\xE4\x95\x66\x9E\x71\x5E\xA0\x60\xA1\x2D\xA3\x95\x9E\x1E\x97\xD1\x6B\x68\x99\x33\x95\xA1\x6A\x9F\xA2\x45\x26\xA1\x9D\x0B\x09\xAE\x7B\x87\x13\x9E\xA1", +"\xE2\x98\x50\xA3\xB0\x85\x0D\x02\x86\x22\x5C\x78\x44\x84\x09\xD5\xA1\x36\x02\xA9\x93\xD3\x9E\xEB\x9B\x86\xA2\x3F\xBD\x39\x90\x9B\x81\x02\x64\x9B\xF3\x9F\xEB\x86\x75\xB2\x2A\x97\x9B\x8C\x9C\x62\x9E\xA3\x9C\x17\xA5\x10\xA9\x87\x8D\x44\xA7\x96\xD7\x28\x82\xA0\x3A\xA7\xD9\x97\x10\xA8\x6D\x89\x44\xB1\x96\x88\x06\x5A\xA0\x66\x87\xDA\x92\x13\xB0\x88\xAC\x40\xAE\xA0\x63\x87\x92\xA2\x12\xA0\x25\xAC\x03\xBC\xAB\x11\x94\x2D\xA2\x6B\xA3\x81\x9F\x4A\x49\x26\xAF\x11\xBD\x7F\xB0\x01\x5C\xA2\x13\xA1\xA0\xA2\x0C\x02\x2C\xA3\x10\x02\x8B\x8C\x67\x64\xA2\x3E\xA3\x1F\x90\x5A\xA4\x09\xA1\x15\xA3\x62\xAE\x45\xF0\x12\x57\xA3\x87\xA1\xEE\x4B\x2B\xA3\x0B\x41\x8A\x8F\x46\x82\x02\x75\x90\xA3\xA2\x71\x89\xF4\x46\xEC\x50\x01\x20\x76\x65\xA3\xFC\x3A\x40\x29\x42\x02\x3D\xAD\xEE\x5E\x12\x50\xBB\x39\x00\xD2\x5C\x2F\x45\x74\xA5\x82\x54\x4C\x60\xEC\x4F\x45\xA5\x74\x23\x4A\x89\x99\x76\x38\x3F\xA4\x5F\x8C\xE8\x0F\x74\x6E\x31\x31\x55\xF2\xA3\x79\xA5\xDC\x52\xE7\x52\x01\x36\xF3\x02\x02\xF8\x78\x17\x76\x7C\xA5\x28\xAD\x50\x75\x8F\xB5\x88\x2A\x2E\xEF\x5D\xFC\xA3\x7B\x8A\xB0\x4B\x1F\xA5\x8F\xBD\x47\x82\x4B\xFF\xA2\x02\x1A\x5B\x9E\xD7\x99\xF8\x9E\x75\xA1\x11\xB0\x8B\x9C\xA3\x3B\x93\x9B\x58\x50\x00\xDA\x22\x5C\x64\x5D\x48\x85\x02\x02\x65\x85\xA4\x00\x76\x59\x0B\xB9\x7C\xBB\x42\xE7\xA1\x00\x73\x56\xA0\x8C\xA7\x15\xA1\xFB\x9D\x7E\x9C\x46\xC5\xA1\xB7\x9C\xCC\x6D\xB5\x9A\xFD\x94\xEC\x59\xD0\x48\x47\xB1\x2E\xD3\x43\xA0\xA3\x0C\x04\x39\xA2\x10\x0E\x8E\xBE\x44\xA3\x42\x66\xA3\x17\x98\x5A\xA1\xA2\x4A\x16\xBB\x88\x87\x38\x8A\x75\xD7\xA2\xB8\xA3\x40\x59\x40\xA4\x20\xAF\x02\xA8\x47\xAC\x8E\x8B\x15\x3A\x90\xD9\x2B\x2C\x84\x1E\xA4\x90\x83\x48\xE4\x2E\x0E\x2F\x03\xA5\x40\x01\x41\xA8\x1F\xA8\x92\x8D\x48\xF9\x02\xC5\x68\x07\x4B\x7D\xA6\x42\xA5\xC2\x73\x90\x91\x04\x65\x91\xFC\xA2\xBD\x91\x5F\x49\x43\xA5\x69\x14\x92\xA4\x5D\x5F\xA4\x38\x64\x31\xA4\x00\x04\x4C\xA5\x1E\xA6\x93\xB4\x47\xE8\xA4\xF6\xA3\x1F\x76\x84\xA2\x2E\x9D\x57\x55\x90\x84\x48\x97\xA4\x4A\x78\x3A\xA4\x46\x36\x4E\xA1\x03\x1F\x92\x89\xBB\x69\x84\xCD\x5C\x77\x5C\xB4\x5C\xEC\x22\xED\x4E\x77\x4A\x48\xC8\x98\x3F\x74\x10\x92\xBB\x9F\xB7\x93\xC4\x81\x02\x3D\x05\x7E\x6B\x83\x3E\x46\xA6\xA3\xA0\xF6\x27\x32\x29\x08\x25\x4A\xED\x5D\x96\xA5\x38\xA5\xC8\x9E\x87\x93\x17\x55\x8E\x8A\xEA\x1E\xA5\x1E\x02\x50\xA4\x2D\x72\x7A\x6A\x20\xB8\x93\xB0\x61\x7A\xA4\x7C\xA4\x02\xA6\x9F\xA3\x33\x88\xA6\x19\xD5\x30\x57\x1F\x90\x83\xA4\xFC\x8B\x0E\x52\x55\xAF\xC4\x78\x90\xB2\xD2\x16\x16\xB4\xA4\xFC\xA2\xAD\xA5\x06\x08\x2B\xAD\x76\x4B\x48\xDB\xA2\x67\xA5\x5E\xA4\x56\x5B\x4D\xA7\x28\xAD\x93\x84\x4A\x8C\x3A\x0C\x9A\x62\xA6\x45\x9C\x86\x78\x2C\xA7\x39\xAE\xE8\x31\x00\x56\xA5\x72\x5F\x84\x70\xAD\x89\x17\x0D\xE0\x56\xE8\x17\x74\x06\x79\x3B\x85\x7F\x75\x51\xAB\x7B\x46\x76\x55\x5B\x34\x00\xA7\xA5\x81\x03\xA9\xA7\x5C\xA3\xA0\x63\x29\x69\x20\xAC\xA5\x9A\xA4\x86\x9F\x91\x9D\x53\xAF\x29\xA3\x68\x40\x53\x50\x5F\x56\x09\x74\x34\x7F\x3E\x05\x6C\x9C\x2D\x91\x50\x02\xEE\xA5\xE9\xA4\xAC\x0F\x76\xA2\x5C\xA3\x2A\xB3\x01\x31\x4B\x82\x02\xF3\xA5\x6F\xA5\xBD\xA0\x53\xAF\x81\x99\x97\xB6\x31\x9C\xA2\x59\x9F\x7E\xA6\xCD\x94\x98\x55\xA1\x3F\x1C\x60\x68\x16\x02\xAD\x28\x0F\x36\xC7\xA1\x73\x49\xD2\x74\x98\x09\x04\x26\xA6\x72\x4E\x6D\x60\x79\x7B\x35\x3C\x81\x04\xB4\x62\x5F\x2B\x33\x06\x2C\x79\x6B\xAF\x4E\x3E\x1B\x76\x4A\x99\x8C\x06\x21\xA6\x36\xA7\xA4\x90\x0D\x00\x65\xA9\xBB\x88\x61\x79\x4C\x98\x7C\xF3\x39\x06\x2F\xE5\x48\x66\xAA\x6B\x32\x99\xA8\x8E\x76\x13\x40\x00\x66\x75\xB7\x72\x68\x0E\xAC\x63\x7B\x50\xEB\x33\x00\xD2\x74\x01\x05\x21\x46\x5A\x76\x4D\x3B\x6B\x9A\xE5\x06\x32\xDC\x74\xA7\xA6\x4F\x0D\x79\x79\x05\xBB\xA8\x63\xC8\x43\x03\xE2\x75\xAF\xA6\x5B\x73\x2E\x4B\x0B\x07\x09\x25\x4D\x89\x93\x48\x88\x4E\x4B\x35\x2F\x8A\x4D\x1C\x77\x3F\xAB\xE9\x21\x38\x04\x64\x9E\x45\xBA\x74\x96\x41\x33\x72\x4F\x57\x93\x7B\x48\xDC\x90\x05\x89\x08\x39\x90\x42\xB3\x1A\x4F\x64\xBF\x0D\x60\xF4\x58\xF4\x8D\xDE\x5C\x06\x0C\x2B\x43\x08\x3C\x8A\x28\x5F\x89\x61\x53\x35\xA2\x2F\x72\x93\x9F\x17\x7F\x6B\x88\x32\x00\x35\x01\x5B\x03\x49\x02\x72\xAA\x34\x88\xD7\x0F\x8B\x04\x83\x48\x40\x49\x61\xB5\x46\x84\x1A\x15\x4B\x8F\x7A\xC5\x4E\x62\x2F\x99\xA8\x61\x7C\x33\x32\x44\x82\x2B\x64\xBA\x3B\xAD\x03\x5A\x63\xCF\x80", +"\xE0\xA6\xFC\x5D\x38\xA2\x6B\x79\x00\x57\x46\xFD\x04\xFF\x86\x13\x3D\x15\x63\x9D\x35\x85\x70\xC2\x4B\x5F\xFA\x5D\xE6\x5C\x80\x43\xF6\x5E\x54\x36\x85\x62\xBE\x05\x47\xE8\x32\xF0\x91\x0B\x38\x6C\x41\xD8\x80\xF5\x3F\xC2\x75\x33\x81\x47\x01\x35\x2C\x61\x77\xAC\x0C\x67\x7E\x41\xC3\x4A\xA7\xB8\xA7\x65\x61\x31\x65\x19\x63\x00\x4C\xD0\x0C\xC0\x1C\xA6\x0E\x60\xCC\x97\x74\x74\x06\x02\x00\x0C\x81\x1D\x4F\x95\xA7\x7A\x42\x9B\x63\x10\x87\xA6\x95\x65\x07\x09\xB9\x34\xE2\x8E\xCB\x3D\xAC\x42\xDC\xA4\x2B\x66\x9B\x67\x65\x59\xC2\x37\x62\xE4\xA7\xFB\x48\xEA\x94\xD9\x88\x28\x98\x0A\x69\x4D\xA9\x5A\xD0\x72\x63\x58\xCA\x83\x45\x45\x03\x1C\x7F\x67\x04\x7F\x5F\xF1\x60\xE6\x62\xFD\x8D\x38\x65\x07\x82\xAD\x51\xC7\x28\x59\xD3\x62\x4B\x39\x08\x60\x60\xAB\x30\xA3\x1A\xAD\x4E\xB7\x41\x12\x61\x93\x00\x05\x67\x3A\x6C\xC3\x2A\xE1\x03\x50\xC4\x73\x90\x8C\x23\x82\x8A\x56\x3B\x6F\x01\x68\x21\x61\xC7\x5E\x5A\x42\x86\xFD\xA6\xE0\xA3\x38\x46\x03\x10\x01\x3E\x15\x09\x02\x27\xA9\x19\x4A\x19\x39\x1D\x4E\x82\x78\x49\x8B\x1B\xA3\x6B\xAB\x4D\xF9\xA4\x0C\xAD\x7E\xAC\x21\x7E\xD1\x0B\x83\x1D\xA7\xA8\x5E\x16\xA8\xA8\x68\x77\x43\x3E\xA3\xB5\x46\x5A\x18\xA1\xE7\xA7\xAB\x85\x30\x4F\x74\x15\xFF\x41\x98\x99\x4F\x8F\xA8\xD1\x40\x1B\x03\x0D\x00\x76\xA2\x3C\x12\x9D\x9B\xBF\x34\xA7\x41\x5F\x57\x62\x75\x36\xF0\x50\xFB\x4D\x9E\x99\x6E\x3C\xA7\x84\x5F\x29\xAB\xF2\xA2\x7A\xA1\x3C\xB4\xE4\x5D\x6A\x3C\x61\x07\x63\xBC\x01\xD7\x40\x18\x68\xAA\x23\x7E\x47\xBE\x56\xA8\x3B\x37\x63\x62\x6F\x31\x19\x6F\x3B\xAE\x1B\x53\x4F\x8A\x34\xCE\x60\xEB\xA7\xDF\xA0\x7B\xA1\x38\xBA\x9E\x86\x86\x36\x00\x39\x00\x96\x87\x40\x06\x65\x8D\x99\x70\x3F\xA0\x2E\x9C\x62\x20\x31\x0B\xA8\x2C\x7B\x5E\x36\x33\x99\x19\xB2\x50\x84\xA8\x42\xA8\x49\x5A\x02\x1D\x67\x8A\x9C\x7F\xC4\x40\x0D\xB3\x73\x58\x5D\xBB\x5F\x08\xAE\x75\x43\x03\x1E\x04\x2C\x40\x16\xA9\xE0\xA7\xCF\x95\xCC\x80\x90\xA3\xA6\x3C\xF0\x6E\x4D\xA6\x33\x85\xA9\x9A\x42\x67\x4D\x47\x92\xC7\x49\xA4\x8D\xC4\x2C\x97\x03\x9E\xD7\x94\x47\x46\x23\x42\x14\x5E\x9C\xB5\xE6\x56\x5A\x7B\x43\xF8\x8C\x27\xAB\xC3\x73\x4D\x98\x3F\xA6\xE6\x39\x86\x40\xA9\x9C\x87\x4D\x42\x91\xA2\xC1\x09\xA5\x8D\x52\xBF\x86\x13\x62\xD9\x71\x45\x64\x71\xAF\xCF\x0E\x9C\x9D\xB1\x37\x00\x34\x00\xF6\x8F\x40\x06\xFD\x8D\x47\xAC\x1A\xB2\x52\xA1\x73\x63\x35\xD1\x94\x46\x7D\x96\xAB\xA6\x61\xA5\xA5\x52\xD1\x9A\xFA\x8E\xC3\xA0\x4E\x43\x91\xAD\xBA\x9F\xA5\xAF\x2E\xCD\x73\x41\x87\xD5\xA6\x03\xAD\x98\xA0\x32\x57\x01\x36\x00\x44\x01\x2C\x20\x74\xA9\x26\xA8\x66\x82\x42\x41\x5D\x9D\xC4\x52\xA9\x7E\xA2\x6A\xA8\x28\xAE\x74\x99\x9A\x66\x9F\xBA\x52\xF4\x58\xA7\xA9\xAC\x86\x2F\xAC\x6B\x8B\x9C\x70\x5D\x8E\xE7\x33\x73\xAE\xA9\xA5\x84\xE8\xA5\x69\x83\x7F\x87\x7B\xA5\x2E\xF9\x8F\x37\x87\x5C\xAA\x28\xAD\x24\x98\x35\x8B\x89\x7B\x53\x83\x90\xFD\xA8\x70\xA9\x1F\x5F\x5F\xA2\x4F\x16\xE8\x2B\xC0\x64\xA5\x62\x88\xE1\x89\xC1\xA1\x89\x4C\x5B\x99\x6A\xB5\xEF\x74\x77\x2E\x92\x0B\xA0\x45\xA1\xB2\x44\x93\x97\x66\xB9\x4D\x8F\xA4\x9D\xA0\x36\xA0\x9F\x7C\x1F\x92\x96\x9F\x2E\x93\xF0\x34\x00\x05\x9A\x5A\x2C\x79\x8B\xAC\x4A\xAB\x2B\x4B\xB1\x2B\xF4\x61\xEB\x8A\xAD\x7A\x9E\x72\xC4\x83\x4F\x8E\x93\xB5\x13\xA2\x00\x29\x79\x53\x6A\x5D\x92\xA3\x92\x58\x58\x68\x85\x4B\xCA\x78\x1C\x9B\xFD\x88\x70\x90\x20\x9B\x9C\x94\x03\x02\x26\xA5\x99\xEE\x67\x1A\x03\x2A\x98\x00\x0D\xCA\x80\x4C\x82\xF8\x5B\x91\x05\x7D\x00\x82\x37\x97\x9A\x86\xCB\x79\x26\xA3\x23\xAA\x7E\x87\xA3\xC0\x4D\x2F\x9D\x9C\x2F\xCB\x9C\x4F\xBD\x17\xFF\x92\x83\x92\x69\x93\x29\x9E\xAA\xA7\xDD\x68\x4E\x81\x04\x4A\x93\xAE\x99\xA2\x2A\x6A\x94\xC1\x86\xAB\x90\x4E\x9B\x54\x52\x93\xB0\x92\xEA\x93\x4C\x6D\x7A\x36\x99\x94\x4D\x9B\x27\xB6\x93\xDE\x93\xCE\x92\x75\x5A\x37\x94\x9B\x01\x00\x84\x2A\xC5\x2B\xE6\x93\x7F\x7F\xC9\x66\xEC\x73\x71\x06\xE6\x6E\xCF\x36\x00\x6A\x1F\x74\x4A\xD8\x66\xC5\x8D\x26\x84\x38\xAA\xFD\x41\x3A\xDF\x79\x01\x2B\x3F\x79\xF4\x11\xF7\x7A\xAB\x7A\x18\xE8\x79\xD8\x2E\x52\xAA\x0F\xAD\xD3\x7A\xCE\x6D\x24\x6C\xF3\x4E\x89\x72\x77\x91\x8B\x76\x78\xED\x73\xA6\x5D\xE6\x58\x56\xBC\x49\x35\x8C\x71\x7A\x67\xAD\x44\x50\x5A\xB6\x2D\x47\x52\xFD\x48\xA4\x6A\x14\x35\x90\x8F\xB4\xA0\x7F\x1F\x68\x96\x04\x25\x94\xB4\x8C\xF7\x67\x0D\x00\xC4\x66\x10\x04\xAE\xBA\x1A\xAD\x94\x76\x4E\x8B\x92\xB1\x8A\xA6\x9E", +"\xD2\x99\xDC\x30\x34\xCB\xAB\x2C\x9B\x28\x6F\x47\x95\x70\x36\xD3\x83\xAD\x8C\x1F\x76\xA9\x3E\x95\x1D\x4D\xB4\x8A\x48\x9E\xD3\x84\x52\x8B\xF5\x02\x6A\x29\x9A\x5F\x8F\x4A\x9C\xBD\x59\x62\x73\x51\xBA\x00\xC4\x8D\x1C\x93\x63\x8F\x74\xA9\x08\x83\x09\xBB\x31\xB8\x56\xC2\x35\x0A\xAB\xF8\xA6\x61\xA4\xEF\x82\x6D\x9D\xAE\xA2\xF9\x4D\x8E\x44\x7C\xC4\x8D\x5C\x8A\x06\x03\xF0\x62\x08\x05\xFC\x75\x7A\xAF\x98\x84\x7E\x20\xAE\xAF\x7E\x20\xAB\x63\xBC\x54\xAA\xAA\xBF\x7D\xC2\x79\x34\x1C\x5F\x87\x94\x66\x56\x9C\x3A\x75\x63\xC9\x94\xA7\x72\xD0\x95\xBA\x0D\xAC\x88\x18\x8F\x2B\x8B\x86\xD1\x94\x29\x3A\xF8\x8C\x68\xAE\x99\x01\x00\x97\x2B\x96\x14\x17\x55\xFB\x6F\xE2\x49\xFF\x66\x03\x10\x94\x87\x91\x6B\x84\x42\x79\xFC\x56\x89\x53\x00\x73\x32\x91\x10\x80\x29\xAF\x54\x76\x17\xF8\x38\x40\x86\xBE\x30\xEA\x70\xC3\x1F\x4F\x88\x1D\x1B\x50\x50\x7D\x01\x55\x85\xAD\x7A\x42\x49\x98\x57\xF2\xAB\x0C\xAB\x53\x6C\x54\x87\xCB\x04\x75\x40\x08\xBB\x58\xBB\xA8\x2E\xA8\xF7\xAB\x11\x80\xBE\xA7\x5B\xAB\xB2\xB4\x50\x96\x43\x00\x82\xCD\x8D\xA5\x3F\x40\x81\x7D\x57\x01\x1B\x0C\x8B\x84\x16\x87\x06\x87\xD1\x97\x3D\x40\x21\x8F\x4B\xA2\x7A\x7F\x72\x59\x59\x2C\x3A\xC8\xA4\x1A\x6F\x31\xB4\x03\x38\x4C\xA3\xA6\xDB\x60\xD8\x2C\xCF\xA6\xAA\x0E\x33\xA8\xB3\xAB\x4C\xF1\x33\x42\xA7\x37\x84\x87\xAC\x08\x46\x34\xB2\x35\x74\x4C\xE2\xAC\x3F\xA7\x4C\x43\x98\xAD\x1A\x6A\xA4\x93\xB7\x5F\x7B\x3F\xA6\x32\x61\x48\xA8\x0D\x62\x06\x08\x03\x12\x1C\x46\x04\x06\xAD\xA8\x5E\x76\x41\x60\x33\x1A\x65\x0D\x69\x83\x98\xC3\x1D\xA6\x64\xAC\x92\xA4\xDE\x8B\x44\x3E\x0D\x7B\xC2\x6B\x29\xA8\x47\x0C\xA8\xE9\x5E\x08\xAE\x8E\xA9\xF7\x59\x01\x06\x5A\x83\x02\x88\xAD\x78\x62\x84\x33\xD1\xA9\x0D\x6E\xB3\xAD\x3D\xD0\x34\x8F\xAD\x3D\xAD\x99\xAE\x58\x5D\x40\x7F\x86\x57\x5A\xB2\x4D\xD3\x16\x42\x4D\xDB\x5B\x08\x3D\xF6\x41\x23\xA4\xE5\x55\x75\x4B\xA6\x30\x05\xA0\xA9\x7F\xAA\xCD\x5B\x9F\x9D\xB1\x4D\x53\x4C\xA9\x47\x0E\x13\xAE\x57\x4D\x09\x79\xB5\x84\x5A\x41\x1D\x64\x32\xF3\xA6\x27\x67\xBC\x7E\x32\x51\xC5\x25\xC2\x1E\xA9\xC5\x62\x01\x64\x0F\x62\x15\x62\x0B\x41\xA8\x9C\x65\x28\x46\xA1\x60\x99\x45\xE6\x2C\x66\x4E\x14\x83\xE2\x0B\x5B\xDB\xAD\x6D\x38\x3A\x3B\xB3\xAA\x9E\xA0\xD1\x8B\xC6\x14\x5B\xC3\x05\xC4\xA8\xB2\x12\xA6\xAD\x6A\x4F\x3A\xA3\x19\x43\x5B\xFD\x38\x50\xA8\x81\x65\xEB\x5F\x76\xA3\x0C\x6C\x9E\xAF\x51\xD7\xA8\xB6\xA6\x2D\xA9\xF4\xA0\x78\xA5\x36\x43\xAC\xB2\x8D\x6E\x33\x83\x64\xF8\x5F\xF1\xA4\x47\x32\xA0\x34\xA2\x84\xC3\x5D\xA8\x87\x5A\x35\xAB\x39\x2E\x8C\xA7\xFB\x57\xB7\xB3\x9C\x49\x33\x99\xAC\x63\xA9\x90\x5E\xD7\xAF\xC9\x54\xB9\x1A\xDA\x00\x00\xA4\x58\xEC\x72\x63\x40\x95\x5D\x43\xB4\x9F\xBE\xCA\x35\xAB\xA6\xA8\x63\x37\xF5\xA0\x9B\x54\xCB\x53\xA4\xAB\x88\x36\x00\x34\x01\xFE\x5E\x40\x00\x80\xA5\x01\x62\xA0\xBD\xF5\x0C\x59\x05\x61\xEE\x97\x01\x60\x81\xAB\x90\x4A\xA0\xA9\x90\x73\xA8\x24\xAF\x23\xA8\x39\xAE\x71\x4A\x9E\x52\xA0\x9D\x2E\xFD\x38\x15\xA8\x3A\x9E\x42\x67\xF8\x43\xCF\x3C\xA0\xAE\x82\x20\x60\x37\xAE\x10\xAA\x38\xAB\xD3\xA8\x44\xA6\x0A\x76\x00\x38\x00\xBA\x41\x81\x00\x2F\x41\x1E\x6A\x43\xA9\x2B\x7C\x50\xEC\x7A\x33\xA9\x8F\xAD\x10\xAB\xAD\x93\x44\xBF\xD1\x23\x5C\xF6\x5F\x25\xAE\x4E\xAF\x70\x47\x06\x01\x03\x18\xA4\x86\x04\x66\xAE\xEF\x8E\x67\xAB\x1F\xA8\x9A\xA4\x4B\xA7\xA9\xB2\x69\x23\x62\xD4\x94\x15\x54\x4A\x65\xC9\xA2\x77\xBE\x3F\xAB\x2E\xFA\xA9\xC2\x96\x55\xA8\xA6\x4F\x91\xA3\x4C\xB6\xB6\x80\xC5\x4F\xA9\xB9\x73\xB6\xAF\x41\xAF\x96\xAB\x50\xA2\x8C\xB7\x0C\xBB\xA9\xF9\xA8\x87\xA9\xDE\xAE\x9B\xAB\x4A\xB4\x88\x42\xC4\x57\x5C\xBC\xAC\xFC\x5C\xC5\xAF\x0D\x37\x03\x15\x01\x2A\x53\x86\x02\x97\xAF\xB4\xAF\x40\xA8\xF0\xAE\x34\x94\x3F\x93\x53\xEE\xAE\xEA\x34\xB8\xAD\x36\xAB\x24\x97\x4D\xBA\xA6\xBC\x52\xFB\x17\xF4\x34\xBD\xAF\x62\x35\x00\x9F\x35\x9D\xBB\x9A\x5E\xDD\x62\xB1\xA9\xB5\xAD\xE0\xAE\xB4\x20\x4F\xB0\x5B\x50\x5B\xE8\x78\xB6\xA8\x37\x59\xE1\xA9\xFE\x21\x77\xB0\xB9\xA6\x5E\x89\xAF\xDC\xA9\x87\xA8\x45\x04\x00\x9E\x4F\xA0\x09\x65\x12\xCD\x9C\x20\xAB\x26\x9F\x44\xA7\xE9\x94\x52\xA1\x26\xA2\x41\xF8\x91\x76\x9C\xC4\xA1\x1B\xA5\x7E\x7D\x52\xAF\xC6\x5E\x73\x36\x00\x31\xAA\xB0\x4B\x41\x9D\xBC\x89\xD0\x95\xAC\x8B\x34\xE7\x7D\x96\x6A\x87\x9A\x4E\xAD\xDC\xAB\x06\xA0\x2F\x52\x34\xF0\x7D\x2A\x79\x89\x57\x51\xAF\xA2\x9C\x4F\x88\x94\xB9", +"\x17\xFC\x92\xFC\x8B\xDF\xA8\x5A\xA8\xAA\xA3\x9C\x92\x40\x02\x27\xB8\x69\xA6\x78\x7F\x6B\x87\x51\xAE\xAA\x56\x31\x65\x91\x08\xB3\x4F\x6A\x79\x59\x79\x2D\x98\x44\x97\xCB\x84\xB6\x4A\x35\xF3\x78\x29\xAA\xF0\x4B\x58\xAF\x11\x5C\x00\x4F\x34\xB2\x5F\xC1\x93\x4D\xAB\x69\x91\x5C\x8C\x06\x0E\x56\xA0\x00\x30\x55\xEC\xAA\xCC\x93\xB9\xA8\xEB\x4E\xAE\xA7\x4E\x38\xAB\xAC\xA5\x14\x8C\xD6\x93\xBE\xAB\x77\x96\x91\x7C\x9D\x93\x4E\x81\x56\xDA\x93\x5E\xA9\x16\x3A\x78\x96\x81\x47\x34\x67\xAC\x99\xFD\x2E\x13\x26\x8D\x8D\x88\x62\x69\xC5\x8A\x47\x79\x01\x0B\x25\xCC\x79\xA6\x7A\xD6\xAB\x64\x6F\xB2\xA0\xC2\x70\xAD\xBE\xF3\x19\x6B\x37\x8C\x81\x78\xF6\x0F\xB3\xAB\x75\xA7\x6B\xBD\x5E\xB1\x76\x40\x8C\xD3\x6B\xDE\x7D\xB7\xA8\x02\x81\xAE\xA4\x28\xC2\x8A\x4E\xB0\x5C\x69\x0E\x04\xA4\x91\x10\x06\x69\x91\x61\xA8\x9A\x15\x92\x95\x99\x4C\x99\xBA\xAE\xC8\x86\xAF\x9A\x24\xE8\xAB\xE3\xAA\xCC\x61\x8C\x6C\xA6\x92\x99\x35\xAE\x9E\x5C\x85\x77\x47\xB1\x45\xA2\xA6\x92\x00\x8D\xD3\x86\x69\x0B\x58\xE4\x68\x00\xAC\xA4\x91\xDE\x9D\x06\x0D\x5F\xA1\x08\x3F\x57\xA7\x6A\x02\xAD\x97\xAF\x9F\xA2\x5A\xAC\x82\xB1\xBE\x88\x58\xD2\x2B\x0A\xAC\x40\x9D\xA2\x65\xC1\xA4\x68\x4A\xCA\x78\x00\x11\xAC\xCB\x94\xAC\x11\x85\xAF\xCF\x3E\x7D\x98\xB0\xAC\x9E\x1B\xAC\xF1\x32\x6B\x94\x08\x59\x6F\x15\x21\x8D\x38\xA5\xF7\x42\x06\xF8\x6F\x0D\x57\x0D\x06\xC4\xAC\x84\x28\xB1\xB6\x54\xEE\x84\xBE\x51\xC8\x39\x8B\xAE\xCB\xA0\x46\x70\xB1\xB1\xD9\x32\xAC\x29\x82\x4A\x6D\xEB\x16\xD2\x60\x10\x9D\xE5\x17\x5C\x9C\x6D\x46\xAD\x4F\x6E\xD5\xA9\xC9\xA0\x72\xB1\x6A\xA9\x61\xBB\x62\xA0\x7D\x74\xAC\x74\x00\x64\x45\x03\x10\x01\x1F\x5A\x82\x02\xA1\xAD\x0A\x62\xA2\xA9\x15\x3A\x6A\xB2\xB4\x94\x35\x9C\x47\xA9\xAD\x9F\xA6\xB9\x65\xD2\xA5\x5D\x4F\xB5\xA2\xC3\x45\xA8\x0D\xA8\xA6\xAF\xCE\xA8\x02\x68\x7C\x67\x61\x55\x4E\xA7\x46\xC7\x39\x6F\xAC\xB2\xAC\x68\x4F\xC6\x26\xB6\xA3\xC2\x4E\xAD\x6B\x35\x03\x4B\xFF\xAA\x67\x42\x1B\x6A\x0A\x21\x58\xB4\x46\x58\x79\xFC\x6C\xBB\x8D\x9D\x00\x03\x72\x3C\x47\x1E\xA1\xA8\xBD\xAC\x93\xAD\x17\x5D\x06\x05\x8D\xA9\x08\x17\xA6\x15\x60\xC5\xAC\xAD\xA4\xD2\x44\xD9\xAC\x8D\xBE\xB6\x9E\x63\xFC\xB1\x4A\x47\x71\xAD\x1A\xB6\x38\x69\x0A\x65\xC7\xA0\x04\x35\xA6\xA6\xAC\x8B\x03\x30\x9D\x18\xB9\x66\xA8\x12\x43\x53\x34\x17\xB7\x29\xB2\x70\xA0\xA8\x21\xB1\x69\xBB\x86\x68\x14\xBF\xA6\xC2\x29\x87\x03\x4F\x07\x7E\x16\x4C\x30\xB4\x95\xC3\x3E\x00\x4A\xA6\x7D\xB0\x98\x06\xBE\x35\x6B\xAE\xC8\x9A\x64\xF4\x00\x1C\xB2\x5C\x28\xAE\xAA\x24\xBC\x4B\x21\xC9\xB1\x3A\x3F\x30\xB5\xAD\x61\x2B\x6A\x15\x23\xB6\xAD\x67\x22\x96\x0B\x72\xA0\x01\x02\x1C\x84\x7D\x66\x24\xB6\x14\x14\x03\x2E\xC0\x11\xB2\x3C\x7E\x27\x32\x4D\xB2\x9E\x05\xA0\x9E\x9A\x91\xC8\x43\x05\x19\xB3\x9E\xB1\xF6\x15\x23\xB1\x03\x76\x7B\x43\x33\xC7\x44\x74\x5D\x87\xB3\x8E\x10\x28\xB1\x23\x56\x7B\x56\x54\xD1\x41\xC3\x29\x94\xB3\x18\x5C\xDC\x50\x03\x05\x0A\x72\xB9\x3C\xB2\xB5\x29\xD2\x10\x55\xB7\xA3\x4C\x95\xB4\xA8\xB2\x94\x43\x29\xC9\x0F\x8E\xB0\x59\xB1\x43\x71\x03\x05\x0A\x63\x4B\xB3\x29\x27\xB2\x5B\x2A\x4A\xB6\x45\x79\x4C\x30\xD0\x66\x65\xD5\x2D\x68\xB3\xA6\x12\x5A\xB6\xD8\x55\x97\xBD\x70\xB2\x00\x45\x42\xAC\x87\xA8\xB1\x5C\xB2\x2C\xB3\x97\xB4\x1B\xBD\x65\xC6\xA3\x32\x00\xB3\xB1\x87\x71\x2F\xB5\x4C\x20\x01\x2F\x0E\xB1\x87\x45\x42\x39\x92\x60\xB5\x27\xB2\x97\xB5\x43\xBA\x0E\xB1\x87\x66\xB2\xDA\x84\x63\xB6\xAF\x3B\x97\xB6\x43\xA4\xBB\x34\x00\x45\x42\x01\x9B\x64\xB1\x2C\xB1\xD4\x03\xCB\xA3\x22\x87\xB3\x5A\xA3\x1F\x9A\x59\xB3\x0F\x9B\x99\xA9\x52\x5D\x66\x81\x91\x14\x9D\xA2\x43\x85\x9B\x34\xB6\x47\x64\xCC\x9A\x38\xA8\xB3\x2B\xA1\x3E\x9A\x59\xB3\x81\x9D\x9A\xAD\x38\x9D\x66\xD7\x43\xE4\x5C\x1B\x01\x51\x45\xE5\x94\x9B\xB5\xCC\x8C\x67\x26\x9C\xC1\xB2\xB3\xB1\x88\x9D\x37\xBF\x81\x60\x00\x1D\x66\xC8\xB3\x19\x75\x1B\x01\x51\x45\x04\xA5\x9C\xB6\xCD\x8C\x67\x3F\x9E\x22\xA0\xB3\xB3\xCD\x9C\x39\xB1\x65\x01\x08\x1D\x66\xD8\xB3\x19\x74\x1C\x01\x51\x47\x26\xA5\x9D\xA5\xCD\x85\x66\x99\x02\x35\xA1\x21\xA2\x59\xB7\x05\xAC\x9D\xA6\x0E\x1D\x66\xE9\xB3\x3E\xA5\xA2\x42\x77\xA5\x3C\xBE\xE5\x06\xCD\x87\x47\xB8\xB3\x3D\xA3\xA2\xA2\x59\xB1\x28\xAD\x9E\xA3\x85\x0E\x66\xC7\xA4\x76\xA4\x18\x01\x57\x40\x4C\xA0\x96\xB4\x03\x2F\x29\x76\xB3\x5B\xA5\x00\xB7\xED\x88\x3D\xA3\x4C\x32\xCB\x96\xE8\x44\x39\x8C", +"\xA5\x01\xB7\x5B\xB4\x0E\x03\x4C\x27\xD0\xA7\x67\xE2\xA5\x3E\x00\x46\xA7\x82\xB2\x5C\xA9\x94\xA4\xCD\xB5\x67\xFF\xB3\x25\x74\x67\x5E\x59\xB4\xD3\x06\x24\x4D\x25\x45\x68\xB3\xB2\x17\xB5\x76\x4B\x88\xB4\x8A\x02\xD1\x26\xC2\x03\x53\x78\x11\x9D\xB2\x15\xB4\x3B\x95\x7E\x7E\x6E\x69\x25\xA7\x68\xD7\x06\x54\xB2\x7E\x91\xF4\x1B\x46\xB1\x4C\x85\x51\xA9\x12\xAF\xB4\xB3\x09\x8E\xB2\x8E\xB7\xB8\x86\x18\x09\xC3\x0B\xF0\x34\xB3\x16\xB4\x07\x79\xD0\x4C\x48\xBB\x06\x1E\xF0\x3B\x9C\x0D\xB4\x84\xB2\x5D\x29\xD5\x4D\x91\x6D\x7B\x28\x28\xB4\x66\xAB\x12\x54\xB2\x72\x39\x23\x69\xA6\x3E\xCD\x23\xA6\x11\x3A\x1D\xB2\xE4\x38\x52\x9A\x62\x90\xFE\x0C\x09\x23\x08\x1C\x42\x77\xAF\x0D\x71\x02\xB7\x52\xB3\x2E\xBD\x54\xBE\x01\x22\x69\xBD\x7E\x0D\x11\x61\x99\x53\xAD\x43\xB4\x07\x0F\x46\x0C\x65\xF1\xAA\x27\x8D\x06\x11\xAB\x3A\xB5\xA1\x0D\xB4\xCD\xA9\x64\xA2\x8A\x2F\x69\x3C\xB5\x8E\x19\x3C\x5C\x58\xB8\xA5\x72\x64\xB8\xB4\xFF\xB3\x42\xB6\x8E\x50\x98\x29\x52\x9A\xB3\xB3\xF3\x7A\x81\x87\xB5\xA4\x10\x55\xB1\xA5\x8B\xA3\xB9\x50\x69\x14\x92\x3A\x29\x8A\x3A\xB4\x8C\xB1\x51\xB3\xCF\x7E\x01\x1C\x3D\x83\x6C\x4B\x2D\x4E\x88\xDA\x8C\xF7\x71\x5B\x65\xD0\xB6\x69\xF3\xB2\xA2\x8D\x4F\xB4\x6E\x6F\xEE\x94\xAA\xA8\x32\x83\x53\x6C\x19\x42\xB5\x56\xB6\x0F\x07\x0D\xA0\x18\xA5\x68\x03\x43\x52\x0D\x79\xA0\xD7\x28\xA4\xB7\x24\xB7\x07\xBE\xCF\x88\x33\x84\x9F\x6D\x68\x5A\xB4\x54\x8E\x3E\x12\xAA\xBE\xF7\x7B\x27\x99\x3A\xC3\x29\xA2\xB2\x73\xB7\x3F\xB8\xF7\x9E\xD4\x96\x41\xFA\xA2\x65\x01\x62\xB4\x35\x99\x97\x0B\xAB\xBD\xC9\xA7\x6A\xBF\xB5\xFC\x77\x4F\xB5\x2E\x0C\x55\xBF\x07\xAF\xD5\xA6\x15\x31\xB5\x61\xA0\xDF\xA8\x1D\x05\x57\xB3\xAA\xA0\xB2\x67\x15\xF0\xB2\x3D\xB2\x58\xB4\xAA\xB7\x0A\xB5\x66\x62\xD7\x87\x29\xE6\xB5\x86\xB5\x93\xB3\x7E\x10\x5C\xB7\xA1\x9A\xA0\x4B\x16\xC2\xB5\xE7\xB4\x0A\xB7\x49\xB3\x53\xB8\xCC\x8D\xA3\x4B\x16\xB1\x8A\xF1\xB5\x9E\xB1\xC8\x1C\x5E\xB7\x40\x67\x54\xA1\xC9\x6F\xB5\x11\x77\x97\x01\xB5\xB7\x27\x08\xA2\xA8\x66\x83\xEC\x06\xB6\x18\x1A\xE0\xA9\xDF\x8A\x53\xB1\xA4\xAC\xD6\xBA\xC9\x40\x9A\x6D\x04\x7C\xB6\x6B\x8C\x36\xBC\xAF\xB1\x2D\x8B\x97\x18\xB6\x44\x03\x98\x8A\x99\x7B\x98\x23\xB0\xB6\xD8\xB4\xCA\x45\x94\x3F\x3D\x61\x9A\xD2\x8B\x61\xB4\x07\x10\xC8\xAB\x6B\xBA\x83\xBC\x28\x94\xB4\xE0\x27\x8B\x88\xA4\x8F\xBD\x19\x65\x8F\x18\x04\xB7\x6C\x6D\xB6\x90\x2B\x13\x84\x3C\x56\x9C\x6C\x95\xB6\xDF\x95\x08\x5B\xCE\xB5\xBA\x09\x86\x2A\xCA\x64\x6C\xED\x09\x1D\xB2\x70\x96\xA7\x92\x4B\x85\x06\x03\xC2\x21\x2A\xBF\xB6\x00\x12\xAA\xB1\x93\x83\x69\xBC\x11\x16\x5C\x29\x61\x61\x6F\x47\xB7\x17\x25\x47\xB5\x49\x87\x43\x8C\xD8\x65\x69\x82\x02\x67\xB5\x5D\x76\x9A\xB7\x09\x14\x95\xB0\x30\x5D\x6D\xD3\x9A\xC3\x99\x5D\x77\x30\x2F\x54\xBB\x61\x53\x98\x7E\x00\x7D\x5D\x43\x14\x72\x94\xC0\x5D\x40\xB5\xB2\xB7\x9C\x4F\xCB\x70\xB6\xF7\x05\x56\x29\x4D\x3B\x98\x2F\x11\x3D\xC8\xBB\x74\x67\xB1\x6D\x39\x7C\x6A\x3A\xB4\x36\xB5\xB7\xA7\xEC\x12\x9E\x00\xB7\x3E\x0B\x56\x2A\x60\x3C\x6F\xB9\x8B\x2C\xCA\x92\x9E\x4D\x80\x74\x00\x2E\x38\xE9\x4D\x40\xB9\xA4\xB6\xC6\x27\x76\x10\xB7\xB7\x8E\xD2\x4C\x94\xB6\x3C\xB6\xB9\xBA\x51\x71\x1B\xC0\x02\x16\x3B\x75\x8C\xE1\xB0\x69\xB3\x97\xB4\xEE\x1F\x6E\x97\x86\x00\x12\x77\x8E\x12\x5C\x71\xB2\x1D\x5D\xC8\x94\x77\x28\xB1\x43\xAC\xB1\x03\xAD\xB7\xCD\x25\x63\xA5\xD0\xA4\x6B\xCB\xB5\xFF\x81\x54\xB0\x01\x50\x76\xBB\xB8\x72\xD6\xB5\x58\xC9\xB5\x56\x80\xFF\xB2\x94\xB6\xC8\xA0\xE8\x73\x45\x3B\x69\xDE\x66\x05\xB5\x3F\xB6\x4C\x85\xF0\x00\x92\xA3\x08\xB3\x22\x5C\x82\x2B\x67\x48\xB6\x54\x15\x23\xBF\x32\x60\xA6\x01\xFB\x19\x41\xC0\x8B\x1B\xB6\xA4\xB3\x2E\xB1\xEC\x75\xD4\xA2\xE0\x41\x7D\x12\x3A\xE0\x88\x90\xB1\x6A\xBF\x9F\xBD\xDE\x99\x05\xAA\x71\x46\x33\xB0\x72\x94\x94\x65\xBD\xB1\xA3\xC6\x7E\x00\x67\xB7\x21\x3D\x34\x31\x57\x81\x6B\xB5\x26\x2B\xD6\xAC\x05\xA9\x3C\x64\x82\xE4\x06\xFC\xB1\x0F\x74\xB9\xBF\x43\x13\x6A\xFF\x70\xF9\xB7\x8E\x01\x94\x95\x23\x04\xA7\xAE\xD0\xBE\xE2\x16\xA3\x92\x04\xBB\x9C\xFE\x48\x1A\xAC\xB2\xAA\xDE\xBE\x43\xE5\x6C\x08\xB9\x4A\x05\x87\xA6\x1A\xA4\xA7\xA8\xD1\xA1\x43\x9D\x9B\x93\x4B\x40\x9C\xEE\x57\x19\xAB\xAA\x85\xD0\xAD\x6F\x88\x9D\x1A\xB8\xCC\x54\x17\x3B\x55\x94\xBF\xB2\x93\x36\x6F\x9B\x9F\xBF\x8F\x10\xBA\x10\x04\x83\xB4\xB1\x9E\xE0\x80\x6D\x97\xB8\x6D\x01\x5F\x9E\x0A", +"\xBB\x84\xB4\xB1\x85\xE1\x99\x4A\x27\xB8\x9C\x9C\xFC\xB2\x6D\xA0\x50\x0D\x8B\x2E\x8C\xB4\x67\xEA\x20\x63\xB2\xC4\x56\xA9\x87\x5F\xA2\xB8\x5D\xCF\x9E\x67\xA0\xB4\x88\x56\xF3\x80\xE6\x8F\x0A\x1A\xB2\xA9\x3C\xAC\x6C\xAE\xB6\x85\x8F\x25\xBB\x59\x72\x89\xBC\x78\x9B\x1A\x34\x6C\xF8\x83\x74\xB4\xAD\xB2\x77\x82\x67\x9B\x35\x1E\x01\x37\xDB\x5A\x09\xC0\xAA\x6D\x08\xCB\xB2\x7C\x19\xA3\xB2\x26\x1E\x71\xFF\x8E\x1D\x04\x2A\xB9\x95\x65\x42\xBE\xBF\xB6\xD8\x80\xDC\x7A\x83\x04\x52\x8B\x39\x7F\x84\x6E\xB4\xBA\xBF\x56\xB1\xA5\x70\xB8\xF7\x0A\x46\x3F\x50\x54\x4E\xBD\xB7\xBF\xCF\xB9\xDC\x52\xAC\x32\x0D\x61\x99\xE7\x8C\x36\xB0\xC5\xA0\x3D\x8C\x08\x80\xB9\xEE\x0A\x39\xBA\xED\x61\x8B\xB8\xB3\xBE\xE3\x8C\xE6\x65\x85\xC2\x6F\x72\x43\xEC\xB2\x7D\x5A\x23\x85\x07\x6C\x6C\xB7\xB7\x93\xB4\x77\x84\x24\xBD\x26\x7C\x6E\x12\xD6\xB9\x0B\x93\x53\xC0\xB7\x76\x2E\xF0\xB1\x47\x82\x94\x66\xBE\x7C\x52\x4A\xB5\x33\x22\xBF\x96\x52\x00\xBF\x11\x0F\x29\x08\x2D\x72\xDC\x80\x71\x80\x47\x81\x44\x04\x65\xB0\x6E\x82\x08\x29\xEE\x39\xB4\xAA\xB8\x90\x01\xEB\x60\x95\xB8\x05\x98\x36\x80\x2A\x13\xB9\xB0\xB9\x3B\x82\x2C\xB8\x0D\x04\xA7\xB8\xC9\x80\x00\x76\x81\x42\xB5\x5C\xBB\xE7\x77\x0C\x88\xCA\xAE\xDF\x57\x72\x27\x02\xAF\xB8\xB9\x97\x24\x84\x98\xB5\xA0\xB5\xE5\x81\x04\x37\xB9\x73\xB2\x67\xBA\x22\x85\x99\xB8\xB7\x9F\x5B\xBC\x73\x40\xB9\xD2\xB8\x5F\xBB\x2C\xBB\x98\x26\xCC\xA8\xE6\xBF\x67\xDA\xB9\xCD\xB7\x2B\x53\x0A\x0E\xBE\x3A\x46\x9E\xD3\x8D\x72\xC3\x8B\x91\x0F\x74\xB9\xD8\x5B\x85\x0F\x83\x32\xDD\x52\x6F\xCC\x13\x1D\xB2\xDC\x77\x00\xBF\xF4\x0B\x35\x0D\xF5\x22\xE5\x6E\xB9\x32\x7F\xFF\xB7\xB4\x1D\x8B\xBB\xCF\xA4\x38\x1C\x05\xA5\x58\xF7\xB9\xC6\xA4\xF5\xB4\xA9\x1E\x03\x01\x5C\xB7\xC3\x11\x0F\xE5\xB8\x4F\x89\x37\xBE\x2D\x75\xA0\xBF\xC9\x99\x73\x93\xBA\xD2\x48\x87\xBA\xB0\x78\x73\x1C\xCD\xB4\x5C\x83\x0A\x74\xB4\x6B\xB5\xD5\x74\x46\xBE\x0D\x0E\x03\x08\x34\x61\x2D\x55\x61\xA8\xB9\x93\xB9\x99\xAC\x65\xB3\xAF\xB3\xCB\xAA\x74\xC6\xB1\x25\xBB\x6F\x57\x4B\xBB\x1B\x63\x84\x33\xE9\x81\x6C\xBF\x02\x2E\xB6\x5D\x2A\x4D\xBA\x47\x56\xD2\xB1\x1C\x15\xC3\x69\x30\x3B\xBB\x54\x98\x7B\xA3\x20\x0C\x1E\xBA\xE9\xBE\x74\xE5\xAC\x81\x9E\x5B\x94\x26\x88\x75\x01\xB6\x14\x20\x15\xC3\x1E\x36\x41\xBB\x57\x9A\x00\x40\x6C\x11\x39\x0C\x1D\x3F\x06\x2F\x07\xB1\x07\x32\xAC\x10\x05\xA7\xB6\x38\x15\x86\x76\x77\x51\xBA\x61\x89\xFD\x10\xF1\x29\xAA\xB3\x19\xAD\x3A\xA1\x2D\x08\x07\x1E\x3D\xB3\xBA\x62\x04\xBF\x38\x0B\x07\x09\x2D\x75\x9C\x2D\x6A\xBA\xCB\x03\xC9\x29\xAA\xB5\x95\x25\xB3\xA6\x04\xA9\x31\x74\xBB\x5B\x36\x5D\xBF\xD0\x2B\xD4\xBE\x1C\x06\x0E\x08\x07\x34\x2B\xB8\xBA\x64\xA2\xBB\x29\xD7\xAC\x20\x7B\x75\xED\x41\x85\xBB\xAD\x16\x31\xB0\x4A\x3D\xD7\xB0\x1C\x3F\x75\x8A\x03\x19\x3C\xC1\xBB\x0F\x32\xB0\xBF\x21\xA3\x55\x9F\x01\x02\xBB\x65\xBA\xF5\x66\x23\x89\x74\x09\xD6\xBF\x1C\x0F\x12\xB0\x2F\x3F\x4E\x83\x01\x68\xBE\xA8\xB6\x38\x0B\x5B\x0E\x54\x58\x49\xAA\x2A\xC1\xB9\x40\x77\xC5\x3E\x76\x37\xEC\x98\x2D\x0B\x96\xC1\xA0\x30\x68\x55\xBD\xB4\xBF\x48\x81\xEC\x9E\x76\xA1\x07\xA7\xBA\xBC\xA6\x6B\xBF\xB1\xB4\x0F\xBC\x7E\xB7\x96\x2D\xBB\xAA\xBB\xD8\xB9\x91\x53\xB6\xB4\x2D\x0B\x5B\x11\x76\xB7\xBB\x68\x01\xCE\xB8\x6D\xB9\x74\x0C\x73\x5E\x39\x45\x82\x1B\xBB\x8A\x80\x9B\x2B\x1E\x48\xD7\x21\xDC\xBE\x85\xB0\x56\x40\xBB\xAF\xBB\xDE\xBA\x75\xB9\x16\x3D\x5B\x44\xEE\xA7\x01\x6B\x16\xB6\xBB\xE5\xB9\x74\xBF\x9A\x28\xDA\xBB\xED\x94\x0B\x4D\x8F\x32\xA4\x69\x59\x6A\xB9\xBB\xBB\x10\xA2\xEE\x9D\x77\xE9\x16\xC8\xBB\xE3\xBA\x78\xBA\xB9\xB5\xDC\xBF\xEC\xBD\xCE\x27\x02\xC0\x66\xE8\xB9\x6E\xBC\xAD\x2B\xDE\xBC\xED\xAD\x77\xD6\xBB\x81\x2C\xEC\xBA\x7F\xBD\xF9\x9F\xDE\xAC\xEA\x88\x77\x86\x9F\xFC\x52\xE8\xBB\x64\xB8\xB9\xB5\xD9\xBE\x56\xA4\x76\xF5\xBB\xB8\xBB\x37\x8A\xAB\x29\x8E\x89\x2D\x53\x23\x9D\xB9\x2C\x20\x6E\x01\x0D\x52\xD5\x12\x8F\x8A\xB3\x05\x24\xA8\x0E\x22\x4D\x81\x88\x25\x6F\x20\x8C\xBF\x5E\x54\x3E\x23\xAD\x7F\x0C\x71\x6F\x27\x44\x8A\x8E\x92\xE7\x55\xA2\x3C\x06\x50\x77\xCB\x35\x53\x17\x82\x72\x97\x82\x4C\x98\x88\x4C\xEC\x83\x5B\x3A\x16\xE2\x77\x3C\x88\xDD\x72\x04\x06\xE2\xBE\xF0\xB1\x0D\x20\xBC\x1D\xBC\x11\xBD\x8A\xBE\xC7\xBF\x47\x8B\x5A\x44\x12\xD4\xAB\x2C\xBD\x2E\x86\x79\xBF\xBB\xBF\x48\x90\xF1\xA8\x01\x41\x57\x33\xBD\xA5\x50\xB2\x69\xF6\x87\x49", +"\x97\xF1\xA8\x0E\x72\xBB\xE7\xBA\xC5\x01\x4D\xBC\xBD\xBC\xBE\xAF\xE1\x8B\x79\x88\x07\xEF\xB7\x44\x66\x60\xB8\xA8\xBC\xE5\xB6\xE1\x96\x4C\x47\xB8\x0F\xBD\xC3\x06\x62\x01\xCC\xB6\xD6\xA8\xEE\x9B\x79\xE2\xBB\x5D\xBC\xF2\xB7\x58\xB8\xB9\xBC\xE6\xBA\xEC\x88\x77\xE4\xBC\x70\xBC\x33\xBE\xCC\x20\xCD\xBB\xE4\xA6\xED\x87\x23\xA8\x07\x12\x3A\x65\x90\x6D\xB4\x8C\xB9\xCD\xB9\x23\xBF\x79\xF1\x06\xBD\x2F\x39\x88\x1B\xBF\x2B\x1D\x91\xBB\xF0\x87\x7A\xE0\x04\x72\x88\x9D\x14\x7F\x39\xC3\xB9\x10\x14\xF4\xAA\xCE\x3A\xBC\x00\x37\x1E\xBC\xAA\x36\xC4\xB0\xE4\xA8\x1D\x02\x12\xC3\xBC\x9B\xBC\x43\x8A\x5E\x80\xD4\xB8\xF4\x4B\x24\x9D\x07\xAF\xBC\x91\x89\x18\xBE\x30\xA1\x03\x2F\x25\x90\xBF\x7F\x58\x38\xBC\x0C\x2B\x0D\xBF\x8E\xBA\xD3\xB6\x6C\x3C\xF4\xAE\xAB\x21\xBC\x04\x5B\x11\xBC\x91\xBF\xC4\xB6\xE4\xAA\xF1\xBE\xAA\x1F\x62\x8C\x89\xFE\xB8\x84\xB8\x92\x81\x4B\xAA\xF5\xAF\x1E\xAD\xBD\x54\x85\xC6\xBB\xC2\x2B\xC2\xBA\xB3\x11\xF4\xA8\x0E\x30\x2F\x77\x88\x83\x01\xB4\xBD\x19\x98\x3A\x1C\xF0\x9E\x7A\xA1\xBD\x1F\xBD\x5B\xBD\x90\xB9\xD7\xB0\xEA\xB5\xF5\xA2\x7A\xD7\x70\x88\x88\x90\x91\xFD\x8C\x74\x4D\x48\x88\xEE\x8E\x79\xD0\xBC\xAC\xBC\x1A\xBD\x0B\x52\xD9\xB4\x91\xB5\x86\x67\x59\x95\xB2\xB8\x69\x19\x03\x9A\xAF\xAB\x0D\x66\xB0\xF7\xBE\xF8\x2C\xA6\x9E\x2F\xA1\xA5\x24\xB5\x68\xA7\x87\x47\x9A\xAF\x74\x2E\xB2\x6C\x33\xA6\xA4\xE3\x49\x6A\xA5\x1A\x13\x9A\x86\x5B\xC9\xBA\xC5\x9C\x88\x87\xDC\x5B\xDA\xAC\x92\xBC\x9A\xBC\x90\x46\xB2\x2C\x64\x2A\x0B\x28\x7E\x08\x3F\x2A\x65\x22\x5B\xA0\x50\x88\x34\x4F\x25\x48\x3B\x26\x0D\x69\x79\x2B\xF8\x99\x27\x52\x48\x44\x62\x8C\xBF\xF7\x3E\x93\x43\x60\xA2\x92\x74\x70\x71\xA6\xF0\x60\x91\xBE\x2D\x4A\x8A\x8D\xAE\x76\x90\x7D\xA2\x71\x75\xE4\x92\x2C\x88\xCB\xBF\x43\x63\x45\x43\xD7\x77\x91\x41\x41\x77\xA6\xFE\xBA\x2C\x9D\x9B\x42\x48\x46\xC8\x96\x32\xA7\x93\xE0\x74\xB5\xA4\x3F\x79\x2D\x4A\x48\x52\x91\x7E\x1E\x6E\x31\xC7\xAF\xAE\x9D\xF2\xAD\xEB\x9D\xCB\x37\x80\xB4\x23\xCE\xAF\x58\x9C\xD0\xAD\x58\xAB\x28\x99\x4C\x7C\x47\x89\x4C\xD6\x0F\xB4\xB7\x62\x7E\x9E\x83\xE7\x45\x03\x0C\x2E\x85\x82\x5B\x67\x01\xB0\xE2\x66\x78\x49\xDA\x7D\x75\x53\xF6\x5F\x9D\x4B\x67\xBC\x49\xF3\x67\x76\x8D\xF0\x24\x4E\x9D\xEC\x10\xD2\x11\x69\xE2\x8A\x83\x9A\xB8\x7D\xA6\xAA\xD0\x90\x5B\x60\x5F\xB9\xAA\xFD\x7B\xF6\x8A\xCA\x57\xFC\xA4\x97\x89\xBF\xAE\xD3\x5B\xA5\x46\xAB\x6D\xA5\x52\xAD\x2F\x95\x78\x2F\xD3\x9E\x0B\x12\xB0\x8E\x8A\x1B\x01\x18\x78\xE7\x87\xF1\xBC\xBF\x83\xD4\x7E\xAF\xA4\xB0\x91\x7D\xD0\x8C\xAB\xA2\x8E\x98\x65\x86\x13\x89\xB0\x3A\x3D\x6F\x88\x1E\x7C\x99\x8E\x80\xAC\xBB\x00\x7D\xF0\xB4\x09\x8C\x0D\xB1\xFE\x54\x03\xBC\xE5\x2F\x4D\x9F\x60\xB8\x9F\x21\xB1\xD9\x93\x08\xB1\x33\x95\x82\xB9\xAB\xA7\x60\x93\x79\xFE\xAC\xAA\x7F\x6E\x93\x3C\x92\x7D\xA4\x31\x89\x56\x85\x2F\x82\xB5\xC6\xA8\x0D\xB0\xA4\x6F\x3A\x51\x1D\x68\xB0\x7C\xB4\xBB\x3C\xAB\x68\x34\x79\xAB\x6D\xF0\x76\xEB\x15\xF3\x6A\x0F\x60\x6B\xD4\x79\x6A\xAC\xB2\xA5\xEE\x6B\xB4\x6E\x56\xBD\xB0\x6D\x7F\x1F\xB3\xDB\x7C\xB3\xA8\x63\x93\xFB\x44\x61\xA2\x92\xA2\xAB\x33\xB0\xDE\x7D\xB4\xA2\x7B\x16\xE2\x4C\x6A\xF3\x79\xF2\x78\x9D\x77\xAD\xA7\x24\x09\x20\xB4\xD4\xA8\xAB\x43\xBE\x94\x33\xD8\xA9\x10\xB2\xEE\x79\x4E\x24\xE8\x71\x7C\x84\x4F\x1F\x67\x84\x7B\xB3\xB2\x43\x9D\x5A\x7E\x83\xB9\x19\xB1\x6B\x37\x01\x33\x8E\x40\x01\xCD\x82\x6A\x8D\xFF\x74\x39\x8F\x7F\x7E\x8C\xB9\x9D\xE7\xBE\xD3\x86\x67\x8F\xFD\x39\xF5\x07\x94\xA3\x8D\xFB\x6A\xFF\x7E\xD1\x81\x01\x9A\x32\xA4\x57\xF6\x7F\x6F\x83\xD4\x60\x35\x9A\x3E\x9D\xFD\x74\x4F\xAF\xA3\x1D\x68\xAF\x7F\xAB\x7B\x95\x8A\x3F\x99\x65\x9D\x4F\x9C\x61\x8B\x4A\x00\x95\x04\x82\x04\xC5\xFF\xBD\x66\x9F\xFF\x9C\x80\x83\xC0\x22\x80\x50\x8C\xA8\x44\x04\xC3\x9F\x93\x67\x9A\x80\xA6\x8D\x0C\xC1\x7B\x9A\x03\xC2\x0C\xB7\xAF\x43\x01\x91\xD8\x2E\x8D\x83\x3E\x7C\xB4\xB0\xB4\x31\x0C\xAD\xA3\xD6\xBA\x6A\xB2\x00\x7D\x9F\x81\x01\xDF\x9B\x41\x94\x18\xA0\xE9\x15\x4D\xC9\x62\xC5\x65\x1D\xC2\x49\x42\x5B\xBA\x65\x15\x8B\x94\x6B\xB9\x00\x78\xA3\x75\x9A\x8E\xB1\xEA\xB6\x08\xB0\x83\x9C\x39\xD8\xA9\xB9\xB4\x6F\x9B\x7C\xA8\xEE\x94\x76\x83\x7C\xB5\xEF\x2E\x7D\x59\x9A\x28\x65\xA2\x94\xB1\x48\x03\x1E\x6A\xA0\x35\x89\xB6\xAF\x98\xBE\x25\x6B\x49\x52\x98\x66\x66\x6B\x89\xC4\x6E\xC0\x3A\x86\xFA\xA8\xA7\x97\x25\x08\xE0\xBC\x17\xAB\xCA", +"\x4F\x69\xAD\x65\x4B\x2D\x51\x9F\xA8\x95\x75\x8C\xFC\x7D\x00\xF8\x94\x59\x8F\x4D\x66\xAE\x65\x53\x6A\x77\x99\x3B\x9B\x04\xE6\x4D\x2E\xB1\xE0\x49\xD4\x6A\x66\xB0\x83\x54\x39\x93\xDB\x34\x00\x37\x8F\x81\x01\xCE\x8C\x49\x9B\x73\x9E\x03\xC0\x07\xDB\x6D\x2D\xBE\x6F\x91\x71\x83\xD6\x94\x1B\x83\xB7\x49\x07\xB7\x83\xE3\x83\x9A\xB6\xCD\x4B\x68\xB8\xC0\x45\xC4\x80\x0C\xB6\x00\x88\xB1\x6A\x51\xC1\x81\xCF\x2D\x7D\x97\xB0\x87\x65\x19\xAC\x8D\x3B\x92\xBF\x1B\x66\xCA\x7C\x95\x61\xE5\x16\x28\x75\xC0\x70\xB0\xD2\x8F\x15\x51\xFC\x6E\xCB\x39\x79\xAA\x1E\xA5\x95\x59\x85\xAA\xB4\x94\x86\xF5\x84\xA1\x30\x3D\x82\x79\x32\x8F\x62\x85\xED\x6F\xD9\xB1\xAD\x96\x11\x12\xDB\x8C\xEC\x3D\x39\xE7\x95\x74\x94\xB0\x72\xF2\x87\xEA\x82\x58\xB7\x54\xBC\xAC\x3E\x76\x3F\x94\x41\x40\x6F\xB2\x23\x03\x38\x5D\x8B\x73\x42\x19\x76\x8F\x3B\xC6\x76\xE0\x58\xF3\x5E\xD8\x76\x5E\x99\x75\x27\x77\x86\x5C\xC9\x72\xC9\x6E\xA9\x69\x98\x6D\x98\x0B\x66\x1A\x4E\x75\x97\x97\x9F\x0D\xC5\x08\xC8\x9F\xAD\xE0\x3D\x4C\x35\x76\x57\x75\xCC\xBF\x5D\x6E\x52\x93\xD5\x70\xEA\x3D\x76\xC9\x75\x7A\x67\x2E\x81\x5B\x45\x26\x80\x05\x82\x76\x38\x00\x9C\xB0\xC3\xB4\xCD\x43\xF2\x4D\xFC\xB2\x56\xB7\x83\xB3\xB1\x88\x2C\x1F\x9B\xF8\xA9\x57\x34\x27\x94\x19\x76\x9C\x10\xB7\x0C\x71\xA4\x90\x0E\x07\x01\x7F\x27\x85\xF1\x41\x0A\x9F\xAF\xC5\x4E\x8E\x78\xA1\x84\xA1\xAD\x44\x6A\x14\xB2\x08\x15\xB1\xCD\xB2\xD5\xB4\x50\x00\xE2\x84\x82\x6A\xB7\x13\x1C\xD6\x4F\xF8\x8C\x8B\x8F\xF7\xA8\xE3\x81\x68\x7A\x14\x8A\x03\x9C\x8E\x9D\x85\x8F\x8C\xC1\x8A\x1D\x8C\x7E\x43\x39\xA3\x0A\xA5\x8E\xAD\x7C\xDE\xB4\xC4\x54\xC6\xAD\x8A\xB6\x01\x2F\x62\xDF\xBE\xB1\xB0\x9C\xBC\xD6\xAC\xC7\x86\xF7\x60\xB2\xBA\x0C\xC2\xAC\x8B\x77\xA4\xA6\xF3\xB0\x0F\x11\x32\xAB\x99\x64\x5D\x05\x7D\x3E\x97\x24\x71\xA2\x7B\xC7\xB5\x13\x8A\xC4\x5C\x06\xD5\x4A\x8D\x82\x82\x58\xCE\x63\xD2\x76\x11\x8C\xC6\x5E\x06\x99\x82\x74\x7D\xC3\x76\x9D\x7E\x52\x9A\x0D\xD3\xB4\x97\x0D\x8A\x77\x10\x56\x92\x81\x19\x74\xD4\x7B\xB8\x72\x0B\xD4\xEE\x42\x4D\x56\x9A\x6D\x54\x28\x14\xD9\x66\xBD\xA4\x2E\xB2\x01\x32\x7D\x8A\x4D\x19\x02\xAD\x7F\x4A\x05\x08\x5D\xDE\xA8\x72\x04\x7C\x79\xC3\x96\x56\x5F\xC3\x14\xC9\x28\x70\x52\x9F\xE5\x6B\xB7\x36\x01\x2A\x95\x40\x07\x4A\x92\x16\x82\x43\x7A\xE4\x5E\x94\x5C\x94\x06\x33\x96\x92\x0D\x5F\x6B\x63\xE9\x8D\xA2\x54\xBC\x94\xA0\x33\x94\x23\x53\xCA\xB7\x0C\xCA\xB6\x75\xA0\x33\xA1\x01\xB9\x39\x02\x59\x81\x17\x76\x03\x01\x84\xB9\x30\x2E\x66\x91\x70\xBD\x28\x22\x71\xFD\x34\x19\x84\xC6\x7B\x48\x83\x2B\x88\x71\xC4\x82\x4D\x83\x31\x81\x86\x8C\x5A\x5F\x10\x20\x45\x4F\x56\xC0\x80\xBC\x84\x36\xC3\x8C\x6C\x88\x88\x06\x95\x82\x3E\x82\xB0\xC1\x44\x80\x38\xC1\x1B\xC6\xA9\x11\x06\x81\x66\x93\x83\xE2\xC1\xFA\x98\x33\x8C\x6E\x1A\x0C\xB8\x05\xBB\x55\x18\x82\xA9\xC2\xA7\x9B\xD5\x90\xFF\x94\xE0\x95\x7D\x73\x9F\x75\x9B\xD2\xA0\xC2\xBC\xE9\x30\x1B\xA8\x87\xB0\x43\x96\x99\x21\xB8\x7B\x97\x76\xC5\x5E\x9C\x9E\x8B\x32\xA1\x87\xD2\x85\xFA\xA0\xD0\xA3\xB0\x9B\x60\x9B\x4D\x25\x58\xB2\x24\x3C\x95\xAA\x9B\xDE\x54\xC3\x91\xD3\x93\xF8\x2A\xE1\x88\x70\xC2\x00\x5E\x39\xCC\xA2\x40\x03\x33\xA9\xC3\xBE\x8C\xB8\x35\x9E\x96\xA2\xA2\xEC\x39\xC8\x96\xD9\x9C\xB2\x87\x0F\xCB\x3B\xA4\xA3\xAB\xA3\x06\xC5\x6B\xA7\x65\x97\xEB\x8D\x3E\x93\x87\xE3\x97\xB4\xA2\x1B\x9F\x88\xA3\x44\x05\x22\xB3\xC6\x73\x85\x26\xA1\x5D\x05\x7D\x59\xF5\x98\xA8\xA9\x0A\xAB\x68\xAB\x42\xD6\x85\x00\xBD\x19\xA7\xB4\x85\x46\xAE\xFC\x92\x85\xAA\x08\xB7\xC3\x13\x8C\xD4\xBE\xDB\x33\x44\xC0\x31\x23\x7E\xAE\x48\xD9\x9F\x10\xC5\x18\xA5\x8A\xC0\x85\xB0\xFE\x93\x91\xA3\x3F\xE5\x71\xB1\xA0\x74\x70\xF4\x9D\xF6\x92\x2E\x8F\x5E\x59\x7E\x45\x7C\xF8\x83\x9C\x94\x9C\x3E\x06\x0D\xB3\x80\x00\x3F\x2C\xF8\x83\xF1\xC3\xBC\x98\x66\x99\xBD\x82\x9F\x57\x3C\x95\x71\xBD\x58\x5F\xB9\x0E\x05\xBE\x6A\x8C\xB5\x03\x15\x0E\x81\x04\x57\x83\xDA\x57\x88\x6E\xC0\x6C\x18\xC2\x92\x78\x0F\xA1\x07\xE4\x57\xA1\xC1\x86\x6F\x40\xC7\x5E\x64\x7A\x79\x10\xBB\x71\xAC\x9C\xD3\x51\xB3\x59\xCE\x6A\xE5\x66\x79\x6F\x07\xA8\x3F\xB4\x6E\x2F\x6E\xA0\x6E\x69\x64\x22\x56\x1D\xDF\xBC\x70\xDD\x47\x6E\x8A\x53\x1A\x40\x5C\x54\xEF\x61\x22\x81\xBB\x75\x89\x8B\x8E\xB4\x9E\x9B\x81\xE1\x6C\x45\x89\x7B\x6D\xFB\x3B\xDE\x7F\xC4\x06\x2A\xDF\x6E\x04\xC3\x4E\xCB\x74\x71\xBD\x40\xDE\x07\xC5\x50\x6E", +"\x70\x84\x9E\xC1\xED\x63\xBB\x27\xBC\x5C\x60\x0F\xC5\x30\x85\xB8\x6E\xA4\xC6\x63\x34\x29\xDA\x52\x49\x1A\xBF\x64\xB0\x6E\xCE\x36\x89\x87\x24\x52\x78\x69\x14\xDE\x85\x8B\xC5\xF9\x50\xA8\x52\xA3\xC7\x45\x8A\xBF\x11\x11\xA3\x8A\x9B\xB9\x43\x73\x6A\x3E\x4B\x75\x92\xBB\x9A\x47\xC2\x2C\x0B\xB7\x3D\xBC\xC4\x9B\x73\x6E\x53\x12\x77\x0D\xC0\x44\x52\xDF\x7D\x57\xD4\x6E\x7B\x84\xEE\x47\xFA\x6B\xEC\x21\x16\xDA\xDF\x2D\x7D\x05\xBB\x2B\x12\xCA\x8C\x87\x54\xCF\x71\xC9\x56\x63\xF2\x4E\x0C\xBB\x88\x6F\x0C\x5B\x87\x5C\xCF\xA6\x21\x57\x88\x88\x04\x69\x00\x9C\x5E\x04\xC7\x71\x9E\x50\x22\x9A\x32\x01\x39\x58\x2D\x59\x6E\xC4\x5D\x3F\x42\xC1\xC4\x43\x9A\x03\xB1\x10\x3F\x5C\xBB\xBD\x05\x99\xA8\xCF\xB2\x2F\xC6\xC6\xB0\x5E\x43\xBA\x02\x03\xA2\xBB\x92\xBF\x23\xB7\x04\xC2\x7C\x96\x79\xFE\xBA\xD4\x04\xA7\xBA\x56\xB9\xBC\xB5\x2F\xDB\x86\x4E\x54\x53\xBA\xF0\xBA\xC3\x06\x55\xBE\x75\x06\x14\x19\xEA\x86\x63\xB8\xC1\xFD\x7D\x2F\xBE\x62\x04\xBE\xBA\xE6\xB6\x0C\x30\x5E\x75\xB0\x00\x01\xFF\xA8\x66\xBC\xB0\xB7\xD4\xA6\xC6\xB5\x75\x8B\xBB\x78\xBB\x8E\xC7\x36\x67\x63\xCB\x0D\x76\xF1\x91\x60\x09\xC6\x59\xBC\xCB\x00\xC4\xC4\x90\x0D\xE7\xAF\x24\x94\x8C\xEB\x16\x0E\x2E\xAF\xBC\x5C\xBC\xCE\xB2\xDD\xBA\xF9\x95\x77\xBB\x57\xDA\x35\xD9\x2B\xCD\xC0\x16\xA3\xDC\xA8\x19\xCC\x79\xA1\x07\x40\x01\x47\xBD\x19\x06\xD9\xB1\x37\x0E\xB8\x11\x7B\x83\x02\xD3\xBD\x05\x20\xA6\xB8\x76\x34\xEB\xB8\xBA\x36\x7A\xF7\x55\xB8\xBD\xC3\x5A\xAE\xB8\xDB\xBF\xE3\xA7\x24\xA4\x7A\xC9\x8D\x01\x67\x60\xBD\xCB\xC6\xA5\x29\xEA\xAF\xF2\xB2\x78\xE9\xBD\x52\xBC\x34\x95\xB2\xBF\x5F\xC0\x26\x00\x02\x1A\x48\x29\x29\xB2\x9B\x65\x1A\x2D\x16\x56\x07\xF4\x08\x7A\x0B\x2B\x78\xAC\x09\xB2\xA7\xAB\xF6\x0E\xCE\xAE\x5A\x3A\x79\x22\x03\x2C\x20\x9C\x1F\x20\x72\x2A\x2D\xED\x5C\xAD\x0C\xC9\xBA\x3C\x64\x01\x78\xC6\xB2\x03\x50\xB3\x3F\x50\x45\x76\x16\x3A\x3C\x66\x01\x81\xC6\xA6\x02\xDD\x5B\x21\x16\x38\xC7\x09\x28\x03\x09\xC7\x32\x02\xAE\xB0\xE3\xC2\x9E\x0A\xF3\x0A\x07\x10\x8E\xA4\x02\xFA\x73\xC9\xC5\xA5\x0A\xE7\x1C\x0E\x17\x1C\xE3\x04\x59\x74\x9A\xC6\x4E\x0E\xCE\x1E\x1D\x0E\x39\xC2\x09\x31\x0E\xA1\xC7\x54\x08\x9D\x1C\x3C\x05\x74\xCF\x0F\x1F\xCC\xA8\x8E\xC3\x05\x3A\x1E\x79\x00\xEB\xC4\xC2\x9F\x3A\xC3\x0E\x3A\x3C\x5D\x9D\x02\x02\x1E\x21\x87\x9E\x06\x05\x3B\xCA\x0A\x3A\x3C\x76\x01\xB3\xC7\xE8\xB1\xEF\xC0\x24\x0A\xF3\x18\x07\x01\x8F\xB5\x64\x38\x01\xE1\xC7\x8D\x50\x00\x0A\x0F\x07\x1E\xDD\x38\xB9\x00\xCA\xC6\x9D\x1C\x3F\x04\x75\xC1\xA0\xB1\x1E\xE7\x04\x7A\xBF\x90\x20\xB2\x00\xA3\xA6\x7A\xCD\xFE\x19\x1D\xE3\x2A\x54\x22\xE9\x34\xEE\xC4\xA2\x1E\xEB\x1C\x05\x27\x3B\x91\xD1\x75\x77\xDF\x1B\x60\x8A\xCE\x1C\x00\x04\x3E\xDA\x1E\xF9\xCE\x78\x39\xC9\x0E\x6F\x06\xCE\x1F\x81\x9D\x09\x24\x0B\x0D\xD2\x6F\x14\x84\xBE\x12\x06\xCE\x18\x01\x0D\x3E\xC7\x60\x33\x5F\xE3\xB4\xED\x0F\xA6\x12\xFC\xC7\x57\x0D\x3F\xD2\x09\x39\x7E\xA4\x04\xF1\xC7\xEF\x0E\xCE\x1C\x01\x05\x40\xD8\x19\x26\x14\xBA\x76\x09\xC9\x06\x12\xCE\x1E\x01\x0D\x40\xD7\x4E\x27\xBF\x1A\x7F\x33\x1B\xF9\x7E\x02\xCF\x2C\x05\x41\xC2\x09\x3A\x80\xE5\xA0\xAE\x2B\xFD\x10\xDE\x9A\xE7\x12\x01\x1D\x20\xFF\x03\x4C\xC0\x54\x03\x01\x1D\x51\x92\xE7\x14\x01\x06\x21\xE2\x6B\x91\xC8\xF0\x0E\x9D\x1E\x05\x06\x84\xCB\x58\x90\x21\xD3\x1C\x3A\x1E\x18\x00\x13\xC8\xC4\xB7\x25\x0E\xD1\x1D\x3B\xBA\x3C\x1A\x00\x34\xC8\x37\x96\x75\x00\xA1\x1E\xE7\x71\x2F\x3A\x3C\x1C\x00\x26\xC8\x46\xC1\x94\x06\x05\x6A\x74\x8B\x21\x3A\x3C\x1E\x00\x41\xC9\xA6\x8F\x51\x71\xF9\x07\x94\x7A\x79\x25\xDC\x6E\xC6\xDE\x1B\xEE\x6D\x85\x54\x9D\x13\x7B\x91\x3C\x3A\x3C\x22\x00\x26\xC9\x65\xC1\x5B\xC1\x72\xB7\x35\x01\x2D\x7A\x3C\x24\x00\x26\xC8\x6E\xC2\x52\x04\x46\x10\x65\x56\x5B\x3A\x3C\x7E\x5E\xF5\xC7\xE2\x00\x41\xC4\x2D\x35\xEB\x15\x13\x9E\x91\xA7\x02\x28\x00\x13\xC8\xE4\xB3\x35\x17\xA4\x58\x5C\x3A\x3C\x2A\x00\x69\xC8\x74\x8E\x8C\x09\x89\x10\x14\xCE\x23\xE7\x04\x2C\x00\x26\xC8\xA1\xC1\x1B\x73\x3F\x10\xEA\x7A\x79\x2E\x00\x26\xC8\xC5\xB6\x3C\x11\xF6\x14\xD5\x76\x48\xC9\x08\x30\x00\x3A\xC8\x67\x4F\xEB\xB4\x31\x13\x31\xC5\x77\x1A\x79\x32\x00\x51\xC8\x4F\x94\x30\x53\x6A\x14\x4D\x9E\x47\xD3\x7F\xBA\x91\xB5\x71\xE0\x03\x51\xCB\x69\xC2\x46\x0A\xF3\x16\x01\x10\x92\xCC\xA1\xA5\xA2\x76\x18\x34\xA7\x3C\xCA\xF3\x18\x01\x20\x92\xD9\xA1\xA8\x95\x95\x11\xEF\x52", +"\xE7\x1A\x03\x17\x25\xFC\x0B\x9C\x9D\xBA\xC9\x59\x86\xCE\x1C\x07\x06\x42\xC6\x15\xB8\x23\x47\xA1\x83\x04\x9D\x1E\x0F\x01\x89\xC8\x24\xD2\xE2\x9B\x0D\x53\x1B\xCE\xC8\x9F\x02\xCE\x18\x08\x06\x42\xD9\x12\xDC\x05\x77\x17\xE4\x83\x3B\xC9\x3A\x49\x90\xCC\x26\xC3\x4A\x6E\xC0\x2C\x6E\x9D\xC9\x93\x01\xD7\x1E\x87\x22\xAC\x19\xE2\x21\xA5\x5F\xC9\xAD\xC5\x52\xC9\xD4\x91\x91\xCB\x92\x6A\x17\x80\x73\x9F\xB9\x44\x73\x64\xCB\x49\x00\x09\x06\x42\xDC\xE5\x8A\x73\xF8\x1B\x6F\x14\x27\xCB\x49\x02\x09\x05\x4F\xC1\xDE\xA3\xEE\x23\xBA\xF8\xC9\x3F\x12\x3E\xC9\xC3\x44\x4E\xC3\x84\x2A\x73\xD8\x9A\x82\x17\x81\xCA\x41\x04\xFD\x11\x47\xC6\x20\xCF\x86\xD4\xC5\x6F\x15\xC7\x96\xCE\x18\xEA\x15\x50\xC0\x1E\x0E\xEF\x23\xBA\xF9\xC9\x70\xCB\xBA\x5E\x84\xC1\x2F\xC7\x03\x15\xC3\x1C\x16\x3E\xC7\x6A\x62\xCE\x18\x13\x2E\x3D\xD9\x22\xED\x79\xFE\xBB\xF8\x10\xEF\xB8\xE2\x02\xE7\x1F\x05\x1E\x25\xF0\x61\xD0\xBB\x29\xCA\x9F\xC7\xDA\x12\xE7\x11\x06\x15\x26\xCC\x7B\xA8\x07\xFD\x16\xAB\x16\xCE\x1B\x0C\x06\x42\xDB\x02\x21\x3D\x1D\x21\x42\x20\x80\x02\x28\x25\x6D\xC4\x54\xC5\x2A\xC6\x95\xC7\xCA\x48\xCB\xA4\xCA\x52\xCB\xA9\xC4\x54\xDF\x07\x01\x95\x97\x0A\x2F\x12\xA3\xCA\x10\x26\xA8\xCB\x9A\x08\xB3\x39\x90\x62\x40\x21\x08\x9D\x1E\xC2\x2E\xEA\x11\x54\xC3\x86\x01\x2C\x4C\xCA\x48\x1F\xA0\xCA\x11\x2C\xFA\x10\x56\xD0\x7B\x30\x1C\x6B\xC7\x31\x1A\xD5\x0D\xE0\x3C\x0C\x0B\x55\xC5\x2A\xE1\x3C\x09\x3F\xFE\x28\xAD\xC8\xEB\x2E\xA9\xCC\xF3\x0F\xE5\xA4\x95\xCC\xCA\x66\xCB\xA2\xC8\x4F\x15\x7F\x1E\xF8\x3C\x0A\x2D\x95\xC4\xCA\x6F\xCA\xDB\x3C\xD3\x0A\xAE\xC6\xF2\x2E\x0E\x01\x95\xFE\x21\x8C\x20\xBC\xCA\x2D\x17\xE8\x1C\x93\x09\x3E\x1C\x2F\x7F\xCA\x6D\xC7\xC0\xCA\xF0\x3B\xB0\xC2\x28\x29\x1B\xE4\x19\x41\xCA\x09\x23\xC4\xCB\x52\xC9\xAF\xC4\x54\xDC\x49\x0E\x45\x15\x05\x90\xCB\xA3\x1E\x64\xCE\x11\x74\x59\xC8\x1B\xD0\x3E\x89\x06\x41\xCA\x36\x2B\x5D\xCB\xB3\xCB\x58\xC3\x7A\x3C\x24\x2A\x0F\xAE\x3F\xD0\xCB\xD0\x1B\xB4\xCC\x17\x8C\x1B\xD5\x96\xA7\xCB\x97\xCA\x9E\x1D\xE1\xA5\xFB\x1A\x58\xC9\x5D\x0C\x96\xB1\x1A\x2A\x29\xCC\x12\x6C\xCF\xE7\x14\x5B\xDC\xFB\x3D\x04\x04\xCB\xCF\x70\xD4\xC8\xCF\x1D\x25\x2A\x59\xCA\x2A\xDC\x96\xED\xC6\x7B\xCA\x9C\x16\xF1\x3F\x5B\x1C\x7A\x26\x2A\xC5\x97\xEF\x2A\xC8\xCA\xCB\xCA\x61\xCC\xE7\x1B\x13\x2D\x2E\xC9\x95\xCF\xCB\xBF\xCA\x89\x1F\x62\x05\x7F\x13\xFD\x23\x2E\xFB\x3C\x57\xCB\xAA\x3F\xEC\xC8\x6E\xCB\xBB\xC4\xF4\x07\x8A\x1E\x97\xC8\xCA\xE0\xCA\xD7\xC9\x5A\xCE\x16\x14\x58\x26\x2F\xD3\x90\xED\x09\x70\xCB\xD2\xC8\xD4\x3A\xBB\xC1\x13\x01\x2A\xD2\x45\x6F\xCB\x47\xCB\xF8\xCB\xCF\x1F\xB5\xC6\x8B\x05\xFF\x36\x97\xED\x09\x26\xB9\xFC\xCA\x6D\xCE\xB4\xC0\x01\xAA\x2E\xC4\x3D\x5E\x22\x0C\xCC\xB0\xCA\x52\xCC\xAE\xC4\xF4\x07\x1B\xC0\x34\x92\xCC\x5C\xCA\x9E\x1C\x8A\x60\xD7\x18\x61\xDD\x30\xCB\x95\x94\xCC\x9D\x20\x31\x28\x80\xCE\xA8\xC0\xF7\x13\x2A\xED\x96\xC5\x1B\x69\x12\xF5\xC9\x83\xC9\xAB\xC5\x54\xDF\x88\x3C\xC1\x6D\x3F\x2A\xCD\x9E\xA3\x82\xC9\x77\xC1\x54\xC2\x82\x03\x15\x12\xCC\xFF\x00\x6B\xB9\xDC\x18\xEE\x12\xBA\x6D\x1B\xC2\x41\x2F\x00\x5E\x1E\xB8\x1F\x4B\x10\xC8\xCC\x54\xCA\xB8\x26\x98\xBE\xCB\xB8\x1D\xFC\x10\x0B\xCA\xD2\x60\x10\x9F\x07\x30\x3D\x27\x60\x3A\x1E\x21\x23\x1A\x06\x7B\xA8\xB3\x1F\xF7\x07\x99\xC7\x1E\x46\xCC\xBD\xCA\x67\x1A\xE7\x1D\x48\x6E\x32\xD0\x73\xC5\xCA\x42\x21\x1C\x00\x95\xCA\x7A\x63\x10\x02\x33\xC5\x99\xAC\x2F\x57\xCD\x85\x1B\x42\x1A\xC9\xC9\x8B\x37\x59\x89\x1E\xDE\xCC\x09\x03\xAF\xB7\xCF\x1A\x08\x24\x01\x03\x33\xE7\x1C\xBD\x09\x69\xCD\x9F\x1D\x96\xCD\xB3\xCB\x65\xCF\x60\x13\x43\xAA\x29\xA1\x4A\x38\xCE\x41\x00\xB1\xCE\x63\xC4\x18\x36\x99\xEA\xA5\x15\x07\x3C\xCF\xCE\x1B\xCF\xC0\x5D\xDD\x33\xD2\x87\x33\x59\x61\x52\x41\xCF\x40\x01\xB3\xC5\x68\xC2\x44\x07\x9A\x8A\xA6\x96\xCD\x33\xCD\x61\xCD\x0C\x0A\x68\xD1\x37\x3F\x3A\x55\x3C\x4B\xCD\x78\x80\x3C\xCF\x7B\x02\x69\xC2\x08\x12\x43\x44\xCA\x42\x21\x03\x03\xA5\xC8\xEB\xBB\xCF\x1D\x34\xF7\x96\xAB\xCC\x3D\x03\x4E\xCD\x80\x22\xE7\x17\xBA\xA5\x35\xC8\x1C\x60\xCC\x6C\x07\x55\xCC\x4C\x11\xD7\xCA\x69\xC9\x2E\xE1\x10\x70\x1E\xB4\xCC\x8D\x1B\x20\x33\x7E\xC1\x7A\x5B\x63\x30\x3D\x3A\xCC\x51\xCD\xC4\x0A\xAE\xCF\x25\x15\x80\x2B\x2A\xCC\x9A\xE1\xCB\x6D\x18\x36\xCC\x4A\x1C\x4C\x8C\x96\x36\x35\xC7\x73\xB8\xCD\x09\x02\x6B\x01\xF7\xC0\xD3\xC6\x10\x1A", +"\x36\xFD\x9A\xFC\xCB\x9D\xCD\x85\x11\xC8\x5F\xB8\xCD\x94\x16\x10\x8F\x5A\x56\xCD\x35\x8B\x64\xCD\x42\x06\xAB\x95\xF6\x0F\x49\x1E\x35\xC6\xCA\xCF\xCC\xF9\xC8\xA0\x18\x78\x2D\x66\xD4\xA3\xB4\x82\x46\xCA\x61\x1C\xF1\x5C\x70\x63\x73\xC5\x6F\xD9\xB9\xA3\x6F\x56\xCD\x3C\x0C\x75\xCE\x41\x02\x10\x0B\x6D\xCC\x35\xC3\x9C\xE0\xCA\xF1\xCD\x01\xCE\xA3\xCF\x1E\x4B\x74\xA4\xD7\x00\x9C\xD8\xCD\x49\x43\x82\xCF\xAE\xC9\x21\x07\x71\xB0\x37\xE8\x99\xDA\xCC\xF3\xCC\x9D\x1E\xDD\x5F\xE1\xC8\x6A\xC7\x09\x3F\x01\x12\xCE\x2F\x13\x8F\xCF\xB7\xCB\xBD\xCC\x69\xD8\x38\xD1\x9B\xAC\xCC\x8F\xCC\x7B\xCC\x97\x36\xDA\xC0\x6C\xC3\x2A\xC6\x04\x23\x9C\xED\xCC\x5F\xC3\xC8\xC8\xD6\xC5\x72\xC4\x2A\xED\x49\x2A\x0E\x31\xCC\x88\xA3\x8C\xCF\xE8\x12\xBE\x1B\xBF\x28\x9C\xFB\xCB\x24\xCE\x6B\xCE\x6A\xCB\xE8\x12\x04\x31\x81\x82\x99\xA7\x02\x31\xA0\x8B\xCF\xA6\xCD\xD3\xCF\xA6\x0F\xF7\x3F\x9C\xF3\x4F\xF3\x4E\x52\xB8\x8D\x85\xD7\x36\x6D\xC3\x2B\xC4\x9D\x8F\x8F\x20\xCE\xAC\xCF\xCC\xCA\xC6\xCF\x6B\xC5\x2A\xC9\x1F\x3D\x50\x3A\x1E\xF8\xB7\x0A\x1E\xDA\xC3\x0C\x22\x38\xC4\xFC\x59\xCE\xBB\x68\x84\xCC\xEB\x2D\xE5\xC3\x6D\xCD\x38\xBF\x59\x44\xCD\xC9\xA4\x63\xCF\x49\x01\xA2\x86\x76\xCE\x1F\x27\x98\x93\xCE\x06\x03\x64\x27\xD6\xCA\xE7\xC1\x42\x12\x35\xCB\x9C\xA9\x87\xC6\xA2\xC8\x21\x51\xCE\xC8\x11\x1B\x6E\x6C\x79\x9C\x8B\xA6\x30\x01\xB3\xCB\xAF\x18\xEE\x33\xD1\x00\x76\x79\x01\x64\xCB\xB2\x5C\xAE\xB2\xB5\xCF\xE3\x05\x77\xCC\x66\x40\x98\xAF\x12\x75\x96\xA5\xCE\xAF\xC9\xD6\xC6\x72\xCB\x33\xCF\x9D\xA1\x64\x5D\xA7\x99\x7E\xD8\xA2\x2E\x00\xF7\x17\x28\x15\x9E\x93\x10\x68\xCE\x83\x00\xC1\xBF\xA8\xC9\x70\xDB\x79\x33\x9A\xFD\xCD\x60\xAE\x7B\x32\xB5\xCC\x0C\x17\x7A\xCB\x3D\xC7\x9D\xEA\x5E\x6A\xCF\xA5\xCD\xE7\xC9\xC9\xCF\x79\xD8\x66\x4D\x9C\xA3\x31\xD6\xCD\xDA\x0F\xE9\xCD\xE4\x2B\x5A\xC8\x34\xC3\x04\x44\xCF\x49\xCA\x85\x2C\xDB\xCE\xAF\x39\xA4\x4F\x3B\xEF\x9A\xDC\xCE\xCE\x02\xB8\x1C\x13\x0F\xF4\xCF\x5F\xCD\x63\x06\x9F\x82\x02\xD5\xCE\xA5\xC9\xEB\xCC\xCB\xC6\x2C\x3C\x40\x07\x9E\xC1\x3E\x46\xCB\x48\x1E\x04\x37\xFB\xC1\xF5\x21\x21\x0A\x9E\xDF\x12\x82\x16\x18\x43\x05\x33\x25\x1D\x22\x99\x03\x0A\x5C\x56\xCD\xD3\xCE\x97\xCF\x40\x05\xBB\xC6\x7D\xDC\x36\xF3\x9F\xB9\xCF\x9B\xCF\x9A\xCD\xDB\xC6\x29\x2E\x7D\xCF\x3E\xFC\x9D\xE4\xCD\x44\xCA\xF1\xCD\xE8\x2C\xFC\xCB\x4B\x27\x3F\xCB\x2A\x69\xCF\x3A\x3F\x02\x17\x4A\x16\x53\xC5\x06\x0F\x3F\xF0\x3D\x42\xCF\xF2\xCE\x81\x03\x6E\xCF\x13\x24\x66\xD2\x40\xF8\x9F\xFC\xCB\xCB\xCF\x24\x55\xF3\xCB\xD8\xCE\x7F\xC9\xF9\x16\x9B\xF1\x0C\xA7\xCF\x80\x17\xED\xC8\x48\xAA\x7D\xCC\xBD\x25\x3D\x12\xCC\x0E\xD1\x59\x0B\xD1\x1A\x08\x2C\xA5\x03\x41\xC0\x9E\xC9\xCF\x17\xCE\xA2\xC8\x69\x1A\x5C\x14\x80\xC9\x18\x30\x3D\x23\x0D\xA7\xCE\x98\x0E\x0B\xD4\xC3\xC0\x83\xDA\x3D\xC1\xA0\xBB\x19\xED\x2B\x1A\xD0\x99\x0B\xF3\x15\xF6\x10\x37\x24\x98\xBB\x19\x8C\x1F\x0B\xD0\xC9\xCD\xD3\xC1\xE9\x01\x42\xDD\xA0\xC1\x3E\xFF\x01\xB2\x1C\x94\x0F\x08\xD6\x37\x89\x42\xFB\x9D\xA9\x3E\x4C\xD0\x20\xD1\x3A\x1A\x08\xDE\x1C\x05\x7B\x38\x1A\x54\xD0\x24\xD0\xCC\x1E\x12\xD4\xE6\xC9\x85\xD6\x1B\x8E\xA1\x91\xCC\xFF\xCF\x98\x01\xD9\x18\xE0\x00\x86\xD5\x46\x11\xA0\xC8\xCA\xDB\xCE\x24\xD0\x51\x10\x9D\x17\x43\xCF\x42\xE5\x9F\xDD\xD0\x6B\x14\xE7\xCA\x1C\xD5\x05\x23\x86\xD0\x3E\xFA\x9F\xD8\xCC\x82\x25\x7F\x14\x17\xD2\x0D\xD0\x7B\xCD\x43\xF3\xA1\xEC\x1E\x7D\xD1\x34\xD1\xA7\xCC\x83\x1B\x76\x23\x44\xDE\x98\x8F\xD1\x90\xD1\x48\xD0\x24\xD0\xC4\xC8\xF4\x03\x86\x13\xA0\x92\xD1\x98\xD1\x4C\xD2\x26\xD0\x12\x2F\x54\xD5\x32\xDF\x97\xCF\xCF\x06\xD0\x40\xD3\xA6\xCC\xAA\xC5\xE1\x18\x21\x58\x38\x7A\xCB\x2F\xD0\x9A\xCD\x86\xCC\xE8\x1E\x55\xC0\x2B\xEC\xA0\xF7\xCE\x9A\xCE\xFE\xC8\x27\xD4\xE7\x16\x75\xD4\x40\xCB\x95\xE5\x1E\x5C\x15\x50\xD3\xD0\x1A\xE1\x2A\x8B\xC8\x31\xED\x31\x50\x0E\x6A\xCA\x77\x2B\x81\xCF\x45\x29\x60\xC2\x2C\xFB\x9C\xCD\x9B\xFC\xCA\x4A\xD1\xEE\xC6\xAE\xCC\x5B\xD7\x45\xE0\xA2\x89\xD1\x29\x3F\x5E\xD1\xCC\x09\xA6\x1C\x57\xC2\x03\x08\x54\x26\x10\xD5\xCA\xB7\xC8\x7E\xCE\x18\xDD\x7B\xD3\x89\x89\xA3\x87\xCB\x12\xCE\xA3\xC8\x2E\xD0\x16\xD5\x54\xDC\x45\xFB\x9E\xBE\xD1\x50\x0E\xC7\xC9\xAF\x3B\x18\xD5\xBF\xA5\x46\xD3\x96\xC7\xD1\xD9\x9D\x6F\xD0\xCF\x1C\xD2\xC5\x7C\xC9\x2A\xE3\xA3\xC8\xCC\x70\xD0\xD6\x2E\x34\xD6\xB3\xC6\x2C\x20\x2D\xD9\xA3\x80", +"\xCB\xDB\xD1\x77\xD1\x37\xD7\xFD\xC9\x5A\xC1\x47\xC5\x95\xF7\xD1\xF5\xCF\x7C\xD3\xA6\xCB\x1F\xD3\x5F\xC9\x5D\x31\x96\xFF\xD1\x91\xCB\x80\xD0\x69\xC8\x1E\xDE\x8D\xC1\x3A\xC1\x95\x97\xD1\x19\xD1\xA1\x1C\x42\xD2\xCD\xCD\x83\xD9\x3F\xCC\xA4\xE2\xCB\x0D\xD0\x41\x27\x54\x28\x29\x0C\x8E\xC6\xE1\xAE\xA3\x93\xD2\x03\xD3\xB9\xC9\x50\xCC\xB9\xC9\x09\x2E\x46\xD1\x98\xD2\xD1\x83\xD1\x8F\xD3\x2F\xD1\xC7\x0D\xBF\x13\x2E\xE0\x09\x25\xD2\x37\xB9\x93\xD1\x6D\xC9\x25\xDB\x69\xCA\x46\xD0\x42\x74\xCF\xF5\xD0\xA4\xCB\x46\xD4\x07\xDA\x90\xDE\x48\xE7\xA3\xD3\xD1\x69\x12\xC8\xCF\x41\x20\x27\xD7\xE6\xB5\xDF\x8A\x98\xBC\xD2\xF9\xCE\x9F\xD1\xDC\x1E\xBD\xCD\x92\xCA\x2A\xC3\xA5\xBE\xD1\x25\xD1\x85\xD3\x51\xD2\xE7\x0A\x7A\x15\x2F\xD0\xA4\xA2\xCB\x12\xD3\x9D\xD0\x00\xD0\xE8\xC4\x73\xD2\x4A\xFF\x03\x59\xCF\xCD\xD0\xAB\xD3\x33\xD7\x0A\xD1\xF4\x32\x49\xCB\x34\x40\xD1\x05\xCC\x59\x28\x1B\x04\x29\xDB\xE7\xAE\x4A\xDC\xA3\xE3\xD2\xA9\xD0\x3F\xD2\x59\xD0\xC2\xC4\x96\xC7\x2A\xEF\xA2\xF8\xD1\xAC\xCF\xAF\xD1\xDB\xC6\x2C\xD6\x61\xC8\x82\x0C\x95\xFF\xD2\x09\xD3\xC0\xD3\x28\xD3\x16\xD4\xF4\x1B\x30\xD8\xA5\xC9\xCA\x88\xD2\x8E\xD1\x51\xD2\x16\xDB\x89\xCB\x45\xE1\x98\x86\xD2\x44\xCB\xAB\xD0\x52\xD6\xD9\xC1\x83\xCD\x34\xE0\xA4\x8E\xD1\x2D\xCD\x5C\x33\x8B\xCC\x22\xD4\x97\xDF\x79\x26\xA5\xD0\xCA\x65\xCA\x3B\xD1\x56\xD1\xFF\xC4\x8A\xC9\x4A\x16\x95\xA7\xD1\xA4\xD2\xC1\xD0\x63\xD5\x13\x2D\x8A\xC7\x4C\xEA\xA6\x9D\xD2\x94\xD2\xB3\xD1\x2D\xD0\x00\x09\x91\xDF\x79\x1A\xA6\xDC\x14\xB1\xD0\x92\xCE\x5B\xD0\xD7\x10\x97\xC9\x5D\x2B\x95\xF4\xD2\xE8\xCB\xB8\xCA\x1D\xD3\x97\x26\x96\xCC\x46\xF6\xA2\xEA\xD2\x68\xD0\x68\xD1\x5B\xD3\x2B\xD6\xDC\x15\x46\xD7\xA3\xC8\xD3\x61\xD2\xE3\xC8\xBD\xC9\x3A\xD0\x85\xC0\x47\xE3\x98\x87\xD2\xB7\xD3\xC9\xD2\x70\xD4\x3A\xD9\x96\x0A\x47\xE5\x83\x58\xD3\x2F\x25\xA7\xD0\x5E\xD0\x19\xD6\x91\xD3\x47\xD8\xA6\xFB\xCF\xE1\xD2\xC5\xD2\x51\xD4\xCF\xC0\x92\xDF\x2C\xD6\x04\x68\xD3\x76\xD2\x81\xD3\x7A\xD1\x1E\xDD\x9E\xC4\x7A\x03\x9D\xCF\xD3\xF6\xD1\xF8\xD1\x70\xD4\xE6\xC3\x9C\xC8\x47\xF9\x18\x30\xCB\xFE\xD1\xC5\xD0\x40\xD1\x3D\xD7\x97\xDB\x4E\xFD\xA5\xE9\xD0\x66\xD2\x8C\xD0\x58\xCF\x37\xD2\x9D\xD7\x43\xCD\x1D\x74\xD3\x33\xD3\xC5\x01\x70\xCC\xAA\x28\x9F\xDA\x49\xDA\xA7\x83\xD1\x66\xD2\x96\xD1\x50\xD7\xA8\xC4\xA1\xCC\x4B\xD6\xA8\x85\xD4\x9B\xD2\xA8\x0D\x4D\xD6\xAC\x21\x92\xCA\x50\xD1\xA4\x8C\xD4\xFA\xD2\x07\xD5\x5E\xD0\x42\xD1\x54\xC0\x4A\xE9\xA5\x81\xD4\xDC\xD2\xCE\xD2\x56\xD0\x43\xDF\x96\xD4\x49\xF8\x2C\x65\xCB\xB2\xD3\xF3\xC9\x76\xD0\xBB\xCB\x9C\xCE\x30\xDD\x42\x54\xD2\x23\xD4\x71\xD2\x80\xD5\x1C\xDA\x8F\xC4\x4F\xCC\x34\x0B\x03\x5D\xD2\x7B\x19\x87\xD7\x86\xBA\x9E\xD2\x51\xEC\xA7\xE5\xD2\xFE\xCB\xF7\xD3\xD1\x1D\x44\xDA\xA3\xD3\x4F\xDE\xA6\x99\xD4\x17\xD5\x36\x1A\x81\xC9\x48\xD7\x5F\xD0\x51\xE8\xA4\xFB\xD3\x15\xD2\x2C\xD4\xCF\x1C\x2F\xD9\x97\xD2\x2A\xCB\xA9\xB2\xD0\x64\xD5\x9D\x1C\x61\xD6\x58\x2A\x54\xD1\x4C\xD7\xA9\xF2\xD3\x94\xD3\xB8\x1D\x50\xCE\x31\xDB\x99\xD5\x53\xEF\xA9\xED\xC6\xA5\xD2\x0F\xCE\x59\xD2\xC4\xC5\x95\xD8\x51\xCF\xA8\x95\xD4\xBB\x28\xBF\xCF\x67\xD5\x48\xDD\x8D\xDA\x38\xE2\xA6\xEB\x3F\x9F\x2A\x18\xCC\xA3\xD0\x4D\xD5\x99\xD5\x54\xDB\xA2\x83\xD5\x5A\xD5\xAB\xCC\x22\xD4\x47\xD4\x9C\xD9\x31\x20\xA6\xB8\xCC\x9D\xD1\x0A\xD0\x7C\xCF\xF9\xCF\x55\xCC\x52\xEE\xA8\xC7\x1E\x55\xCA\x53\xD3\xB8\x28\x2A\xD9\xA7\xC0\x2A\xFC\x3C\x35\xD3\x4B\xCA\x3B\xD7\xBB\x10\x51\xD6\x5B\xDA\x4D\xD9\xAA\xBE\xD3\xA4\xD4\x5A\xD6\xF9\xCE\x49\xD5\x9C\xCD\x63\x07\xA7\xF1\xD4\xC4\xD0\x2A\xD5\x83\xD0\x44\xD1\x54\xCE\x4E\xFC\xA6\x93\xD4\xB9\xD4\x13\xD5\x01\xD4\x57\xDE\xA3\xD2\x9E\x7D\x95\xD8\xD1\xA7\xD5\xD9\xCB\x90\xD1\xBD\xC3\xA9\xDD\x2F\xFC\x3C\x04\xCD\x49\xD4\xF0\xD1\x84\xCD\x54\xD0\xA7\xDB\x51\xDF\xA9\xBD\xD4\x8B\x02\xF3\xD3\x6A\x53\x4A\xDD\x94\xD5\x52\xC4\xAB\xEE\xD3\xDF\xD3\xCC\xD1\xB2\xD5\x4B\xDC\x5F\xC8\x51\xFA\x1C\x76\xD3\xD0\xD4\xD6\xD2\x36\xD6\x4C\xD2\x96\xD6\x52\xFC\xA7\xEA\xD4\xFE\xD3\x5B\xD7\xCE\x1A\x33\xDC\xAD\xC0\x54\xCD\xA9\x9C\xD5\x06\xD4\x28\xD6\x2D\x17\x21\xD1\xAD\xC4\x2E\xD3\xAB\xCA\xD3\x39\xD4\xE6\xD3\x45\xD2\x5F\xDC\x7D\xDB\x56\xFA\xAA\x9A\x1C\xCC\xD4\x0D\xD6\x48\xD2\xB8\xC0\xAC\xCD\x47\xC2\xAB\xB1\xD4\xE7\xD4\xA2\x1E\x88\xD7\x46\xD2\x94\xCB\x57\xEB\xA6\xED\xD5\x11\xD7\x32", +"\x03\x8A\xD7\xF8\x3D\xA2\xD2\x57\xCB\xA8\xF9\xD3\x67\xD4\x7B\xD5\x9A\xD2\x2F\xD5\xA3\xCC\x58\xF4\xA9\xF7\xD4\xFD\xD4\x51\xD2\x97\xD0\xDA\xC0\xAE\xC2\x59\xFF\xA8\x96\x32\x67\x00\x72\xD5\x5D\xD6\x5C\xD5\xAD\xC6\x4B\xC8\xA9\x9C\xD6\x24\xD4\x8F\xD4\x6E\xD3\x3C\xD0\xB0\xC9\x51\xC7\xA8\xF4\xCB\x52\xD5\x8A\xD6\x49\xD7\x62\xD9\xB2\xD9\x58\xDD\x42\x68\xD2\x00\xD5\x8E\xD6\xC3\xD2\x59\xDA\x36\xC5\x5A\xDC\xA5\xF1\xD2\xA7\x12\x9D\xD6\x06\x0B\x58\xDD\xB3\xC1\x2A\xEC\xA9\xF7\xD4\x6E\xD5\xA9\xD4\xBB\xD4\xE4\xC8\x54\xD3\x53\xC4\x14\xB6\xD3\x62\xD7\x8F\xD4\xD9\xD3\x36\xD8\xF4\x1C\x53\xF0\xA4\xEF\xD0\x2B\xD7\x98\xD7\x2E\xD2\x69\xD2\x89\xD8\x54\xE9\xAB\xF0\xD3\x69\xD7\xA1\xD4\x19\xD1\x64\xDF\xA9\xCD\x1B\xEE\x98\x90\xD5\x5B\x08\x56\xD7\xDA\xD6\x34\xD1\x54\xC2\x41\xEE\xA2\xE0\xCA\x21\x1E\x52\x4F\x03\x42\x70\xDA\x8A\xD6\x54\xCE\xAE\x97\xD5\x41\xCA\x1D\xD3\xE1\xD4\xA9\xC8\x4D\xD0\x57\x4B\xAE\xE8\xD4\x81\xD5\xC7\xD6\xE6\xD1\x13\xD6\x96\xDF\x38\x3D\xA6\xBB\x1E\xAE\xCD\x3C\xD2\xDE\xC3\x1A\x34\xF2\x2A\x59\xD9\xAE\x9B\xD7\xA8\xD7\x09\xCD\x50\xCE\x98\xBB\xB1\xC9\x5D\xEE\xAE\xAF\xD7\xAE\xD4\xA2\x1F\x09\x66\x46\xD0\xBB\xD5\x5D\xDB\xAE\xA7\xD3\x27\x03\x9F\xD4\x52\xC9\x74\xDD\x76\xCD\xCE\x9D\x59\x31\xD3\x05\xD6\xDB\xD6\xF0\xD5\xA8\xC6\x96\xC7\x81\x71\x9F\x9D\xCE\x4C\xCA\xF6\x16\x5B\x52\xD5\x2C\xB8\xDE\x43\xC3\xAF\xCF\xD7\x83\xD3\xA0\xCB\x09\x60\x6A\xD0\xBD\xD5\x5E\xCE\xAE\xE6\xD2\xA7\xCC\x83\x03\xD7\xD6\x7A\xDC\xBD\xDD\x5E\xDE\xAF\x9D\xCC\x66\xD3\x9A\x88\xF2\xC8\x13\xD8\xBD\xC7\x24\xDF\xAF\xE7\xD7\xA0\xD4\x9E\x1E\x9C\xCF\x58\xD8\xBE\xCD\x5F\xE0\xAF\xDD\xCA\x27\x02\x6C\x2E\xFB\xD3\x7E\xD7\x54\xC6\x4B\xC3\x43\x7D\x2D\xF4\xD7\xFC\xD7\xD0\x1E\x2C\xD6\xCC\xA2\x3C\xFA\xAF\xC3\xD7\x66\xD2\x21\x21\x10\xC2\x50\xD1\x54\xD0\x7B\x32\x90\x2B\xD0\x27\x03\x75\x03\xB2\xC9\x81\xDC\xBB\xD1\x1E\x7F\x9E\x9A\x31\x27\xD0\x44\xD5\x2E\x3F\x1F\x0A\xFC\x05\x7B\x1B\x46\x3D\xCB\x61\xD1\x80\x01\x3A\x05\x81\xD4\xCC\x4F\x60\xFF\x62\x0B\xD1\x38\x17\x29\x2E\xA3\xD1\xF2\xAA\x89\x31\x42\xE7\x04\x12\x2E\x7A\xD1\x2A\xD2\x40\x03\x83\xDC\x54\xD6\x7B\x5D\x9A\x8F\x26\xE3\x13\x11\xD8\x3C\xB0\xF8\xC5\xF6\x19\xF8\x1F\xA2\xAA\xD8\x1A\xD8\x0E\xDA\xEF\xCA\xE5\xCD\xB2\x20\x61\xD2\xCF\x22\xD8\xB0\xCE\x23\xAB\xBF\xCD\xEC\x14\xFF\x8C\x2D\xF8\xB0\x80\x00\x2C\xD9\xA5\xCA\x0B\xDD\xA8\xCC\x88\xC6\x3A\x32\xB0\x9E\xD8\xD8\x30\x13\xD9\x42\x02\x38\x28\xC1\xCE\x43\xC9\x04\x49\xD8\x4A\xCB\x25\xD9\xB7\xD0\xEA\x3F\x18\x4F\x62\xFC\xB0\x8E\xCE\x65\x1E\xA2\x3F\x0D\xD9\x83\xD8\xC4\xDA\x61\xF6\xBF\x50\xD8\x14\x03\x32\xD0\x90\xA7\x0C\xDC\x70\xDF\x62\xF4\xB0\xA7\x02\xF2\x67\x14\xD8\x19\xD8\x8B\xD9\x54\xDA\x62\xED\x8D\xDC\x1B\xA9\xC7\x20\xD9\x34\xB0\x8C\xD7\x12\x1A\x8E\x15\xB1\x87\xD1\x06\x02\x3A\xD8\x52\xCE\x8E\xD7\xF4\x18\x63\xF0\x8E\xFA\xD8\xEB\xAD\x37\xD9\x42\x04\x3C\x2F\xC7\xD3\x55\xD7\xB1\xE6\xD8\x84\xD9\xA1\x1E\x21\xDE\x76\xC8\xC8\xD2\xB8\x8D\x18\x65\x1E\xF0\x23\x46\xDA\xC0\x17\x24\x02\xC8\xC7\x2A\xD1\xB2\xBF\x1E\x93\xD8\xDF\xC5\x25\xDA\x8B\x3F\xBF\xC5\x65\xFC\x3C\x41\xCA\xD9\xD7\x07\x0E\x29\xDA\x78\xD6\x96\xDC\x52\x01\x4B\x4C\xCA\x9A\xD2\xBA\xCE\xA9\xD5\xC3\x9E\xBF\xCD\x1B\xF8\x23\x15\x5D\x79\xD9\x84\xD5\x2E\x3A\x1A\xD4\x16\x30\x03\x2B\x24\x0E\x5D\xD8\x30\xC9\xCD\x50\xCF\x25\x1F\xCA\xCE\x49\xFD\xA5\xB2\xD9\x5B\xD9\xC0\xCE\x51\xCF\x96\xD3\x82\x84\x40\xFB\xB2\xC5\xCA\xBD\xD9\x95\x10\xF1\x01\xD3\x5F\x8B\x3C\xCA\x8D\x95\xA1\xD5\x06\x02\x43\x24\x2C\xDF\xF9\xC8\xCC\xDE\x57\xF5\xC8\x30\x00\x5C\x14\x05\xDA\xB2\xD1\x97\x36\x54\xCA\x70\x2A\xAA\xEA\x2C\x8D\xC7\x94\xCE\xBF\xCF\xDE\xC4\x63\xDC\x79\x27\xC0\x05\xD3\x86\xD5\xBC\xD1\x37\xDA\x66\xD1\x78\xC1\x67\xE6\xB1\xD6\xD9\x45\xCA\x17\x62\xE6\xA1\x81\x0C\x39\xBC\x37\xEA\xB3\xB1\xCF\xE3\x36\x3D\xD4\xCF\x1E\x98\xBC\xA7\xC6\x44\xF7\xAB\x92\x8A\x12\xD9\x61\x3A\x3D\xDB\x9C\xD3\xCC\x22\x68\xEC\xA2\xA7\x02\x0E\x24\x4D\xD8\x97\x13\x9E\xD3\xB7\xDF\x66\xCB\xB4\xE3\xD6\xB9\xB3\x2E\x45\xD9\xD1\xA8\xC7\xC1\xCB\x28\xC8\xAB\x91\xCC\x14\xDA\x3D\xCD\x86\x75\x96\xD7\xF4\x0C\x66\xF4\x30\xCE\xD9\xC3\x38\x5E\xD9\xFB\x1C\x27\x0E\x14\x25\xDA\x02\xB3\xBC\x1E\x28\xD8\x10\x0C\x53\xC8\xE6\x03\xD1\xC9\x68\xDD\x89\x17\xDA\x6A\xD7\x8C\xD9\xE2\xCB\x96\xD9\x3A\x9F\x57\x0B\x50\x68\x07\x76\x5E\xA3\xCB\xFD\x15\x07", +"\x67\x3F\xA2\x65\xFF\xB3\xC2\xD8\xB4\x40\xB3\xD2\x0D\xDD\x8F\x1B\xCD\xC0\x69\xF6\xB4\xE0\xD9\x0C\xD8\x86\xDA\x46\xDB\x5E\xD5\xBF\xA0\xC9\x2F\xC3\x39\xD9\x6D\xD9\x75\xDB\xCA\xC9\xA8\xC5\xC4\xCA\x65\xCB\x95\xB4\xDA\x73\xCF\xA7\xD8\x4E\xDA\x6F\xD9\x9F\xA9\x69\xFC\xB4\xCD\x9B\x3E\xDB\xB5\xC6\x63\x21\xA8\xD5\x54\xC3\x6A\xC8\xC1\x45\xDA\xC4\xC7\x51\xDA\xEC\xC9\xA8\xC4\xC5\xDC\x2F\x33\xB4\xDC\xD9\x62\xDB\xA8\xD8\x46\xDD\xAC\xDD\x25\x52\x46\xF3\xA0\x9E\x13\x2A\x29\x79\x30\x5B\xDC\xA8\xCE\xD6\xD4\x82\x54\x8E\xF2\xDA\xFF\xCD\xA0\xCA\x18\xDE\x3B\xB9\x9A\xCE\x6A\xD2\xB5\xD0\xDA\x09\x02\x71\xDB\x5E\xDE\x36\xAD\xD0\xC6\x4B\xFE\xB1\xFD\x2E\x8D\xDB\x63\xD9\x5E\xD9\xB2\xD7\xCF\xC3\x69\xD6\x9B\xFF\x01\x8C\xD8\xD5\xCD\x66\xDA\x9E\xDB\xD9\xC6\x08\x12\xB6\xB9\xDA\x7C\xDA\x18\x00\x68\xDF\x24\x09\x79\xDA\x56\xDA\xB6\x8F\xDB\x63\xDA\xF1\xD2\x4E\xDC\x4B\x1D\xC9\xC6\x2A\xC3\xB6\xE6\xD2\x11\xDB\xBC\xCF\xE4\xD7\xB5\xD3\xD9\xC8\x3C\xE6\xAD\x86\x02\x22\x25\xA6\xD8\x6F\xD8\xB5\xD4\xD9\xD7\x69\xFA\xB5\xC4\xDB\x88\xCE\xDA\xD8\x24\xD9\x92\xA6\x96\xC1\x6E\xC6\x04\x03\xC3\xA3\xD4\xC7\xD9\x6F\xDE\x9E\x41\xDB\xD8\x53\xE9\x66\xAA\xDB\x41\xCB\x16\x25\x42\x03\x4C\x22\xD1\xC1\x6B\xF0\xB6\xC7\xDB\x64\xDB\xE2\xD8\x76\xDC\xE7\x1C\x77\x23\x08\x11\xD5\x50\xD3\xC3\xDB\xF0\xD9\x72\xD8\xBC\xD2\xDB\xC9\x6D\xCA\xB7\xAD\xD8\x91\xA8\xB6\xD5\xEE\xC0\xBA\xDC\x9A\x03\x6D\xF7\xA9\xA1\xDA\x8B\xCD\x91\xD9\x75\xDB\x40\xD9\xDA\xC6\x4B\xDC\xB7\x86\x02\xD8\x5F\xE8\xD9\x7A\xDD\xBD\xD2\xDE\xDB\x6F\xE7\xB5\xBA\xDA\x95\xD2\xB3\xD2\xCA\xAB\x32\x2F\xD1\xC3\x70\xD6\xB7\xB3\xDB\xEC\xDB\x07\xDE\x7B\xDC\x93\xDB\xDC\xC4\x61\xFF\x62\x6D\xD9\x44\x1F\x1B\x55\x13\x05\xC1\xD4\xDA\xDF\x6E\xDC\xB6\x9E\xDC\x81\xD9\x0A\xDF\x0C\xDD\x84\xD1\x54\xC4\x54\xDE\xB5\xCA\xCA\x60\xDB\x49\x29\x69\xDB\x20\x07\xDA\xCA\x6F\xF6\x93\x0A\xD5\x60\xD4\x2F\xDA\x56\xDD\x65\x36\x54\xDB\x4F\x2F\x98\xE9\xD9\x59\xDA\x80\xD9\x52\xD9\xA8\xC8\x2F\xCC\x6A\xDF\xB5\xF8\xDA\x20\xDC\x16\xDD\x67\xDF\x9B\xD0\xE3\xD5\x59\xF2\xB8\xBA\xDC\x5C\x34\xA3\xCA\x0B\x1A\x29\x32\xC3\x07\x6C\xC7\xB5\xFB\xD8\xC0\xCF\xA0\xCB\x22\x28\xBB\x00\x56\xC9\x71\xC6\x04\x78\xDB\x28\xDA\xE3\xDB\x87\xDB\xBA\xD3\x1D\x50\x01\x1D\x9A\xFF\xDA\x46\x05\x23\xDC\x52\xD9\xC9\xD5\x54\xD4\x5D\x23\xA4\xA9\x5C\x62\xDC\x28\xDC\x89\xDC\xE7\x1B\x8B\x7A\x6A\x37\xB5\xD2\xDB\xC8\xDA\xEA\xD9\x84\xDC\xBF\xD2\xDE\xDF\x72\xC1\xA2\xB4\xD0\x88\xDA\x76\xD8\x61\xDF\x81\x11\x06\x77\x8B\x71\xB5\xCF\xDC\x89\xD9\x35\xDC\xD1\x1B\x0E\x0E\x62\x08\x71\xC0\xB9\xDC\xDC\xCA\x38\x03\xDD\x32\xDF\xBA\xD6\xE7\xC9\xA5\x02\xA2\xF9\xDC\x64\xDC\xA2\xC8\x11\xCA\x0E\x6E\xE4\xD9\x71\xE3\xB9\xAD\x36\x66\xD3\x48\xC1\x9E\x15\x42\xD7\x60\x4B\x71\xC2\x04\x2D\xDC\x04\xDD\xF5\xDB\x23\xD8\xBE\xD6\xE1\xD8\xC6\x0D\xBA\xD0\x3E\x8F\xDD\xD0\xCF\x29\x48\xE2\xB1\xF4\xB4\x64\xD2\xBA\xE5\xC8\x51\x48\x9F\xBC\x09\xCE\x40\x63\x7A\xCB\x1E\xC4\xAE\xBC\x1E\xB5\x0F\xFB\x63\x2A\xDE\x7A\xD1\xC0\xC7\x09\x13\x01\x3B\xDB\x4A\xCA\xDB\x10\xC7\x4A\xE7\x12\x46\xD6\x4F\x12\x1D\x3C\x1E\x70\x1E\x0A\x97\x9C\xCF\x9B\x5C\x02\x31\x60\xEF\xBA\xE1\x13\xC3\xDC\x3F\xCF\x0A\x86\xDC\x21\x5A\x4F\x49\x16\x7A\xCA\xCA\xC5\xDC\xD7\x2B\xE7\xD6\xAF\x15\x65\x1A\x79\x3B\x90\x8D\x03\x70\x1E\x24\xA3\xE9\xCD\x0D\x0D\xEC\xC0\x2B\xC2\xBB\x93\x66\xC4\xDC\x71\x94\xC7\x4F\x25\x14\xEE\xD4\x5C\xEA\xBB\x93\x66\xDB\xDC\x61\xCE\x4A\x19\xEC\xC2\x44\xCD\x13\x16\x9B\x83\xA0\xA7\xCF\x68\x00\x39\xD7\xD9\xD8\x9D\x11\x76\xF2\xFC\x7F\xCC\xF2\xC0\xC6\x03\x4B\x12\xDF\xDE\xEE\xC1\x4E\xA1\x96\x71\xDD\x28\x1A\xE7\xCD\xEF\xD5\x3B\xB0\x68\xC3\x4F\x12\xA3\xB2\x10\x12\x5E\xA8\x14\x52\x3A\x8D\xC4\x7A\xC7\x09\x07\x4C\x48\xD7\x06\x02\x60\x03\xCB\xD0\xA9\xC7\xEE\xC5\x93\x69\xBB\x86\xDE\xEB\xDD\x93\x02\xC6\xDD\xE0\xD0\x90\x87\x78\xDE\x9D\xF2\xDD\xA2\x17\x05\xCB\x54\xC5\xF0\x06\x6D\xD7\x78\xD5\x9A\x86\x02\x9D\x01\x8D\xDF\x51\xCD\xE3\xDC\xB0\x7F\x78\xE5\xBC\xA1\xDE\x09\x03\x98\xDC\xC9\xD8\xE0\xD6\xF2\xC4\x2A\xDC\xBB\xBD\x0D\x2A\xDE\xDA\x8B\x2C\x17\xDE\xD0\x71\xC3\x08\x1B\x02\x32\xDE\xAD\xD3\x7E\xDC\xBA\xDA\xDA\xD2\x6B\x94\x76\xF8\xBC\x86\x02\x47\xDF\x9D\xDF\xB4\xDD\xE1\xD0\xEF\xC7\x79\xC9\xBC\x9C\xD0\x0B\xDE\xE3\x00\xA8\x66\xDA\xC2\xEE\xD0\x5B\xD9\x02\x48\xDE\x45\xCA\x9A\xDF\x54\x9E\xE6\xDC\xF3\xCF\x7A", +"\xC3\x04\x5F\xDE\x52\xDF\xA6\xDC\xD5\xDD\x4C\x68\xF0\xDE\xEB\x0A\xBC\xDE\x1C\xFE\x67\x56\x66\xB5\xCA\xD9\xD0\xBA\xC9\xBD\x60\xBD\xFC\xDD\xCC\x12\x33\xC8\xD3\xDC\xA8\x01\x70\x46\x7B\xC2\x04\x1C\x84\xD8\xDD\x77\xDC\xDB\xDE\xEA\xDE\xF6\xD8\x7A\xC7\xA0\xE0\xC7\x92\x4A\xA2\xDC\xC6\xDB\x20\x09\x08\x1B\x77\xED\x8D\xE2\xDE\xCC\xC0\x4D\xDF\xD4\xDD\xEC\xD3\x31\x6F\x49\x0D\xBE\xE9\xDE\x7C\xDE\xA7\xDD\xD5\xDE\xE7\xD8\xF2\xCC\x3E\x01\x9B\x94\x76\x0E\xDE\xC2\xDD\xF3\xCA\xE2\x54\x45\xCB\x98\x54\xBC\xB6\xDD\xBB\xDC\xEE\xD6\x59\xD4\xC7\x03\xEF\xB3\x44\xEB\xAE\xA7\x02\xEA\x5E\xC8\xD3\xF3\xCE\x98\xB6\x54\xC7\x7D\xE9\xBE\xA7\xD9\x3C\x1E\x1A\x2A\xA9\xA6\xBE\xD7\xD0\xD4\x7D\xE2\xBE\x96\xB1\x8F\x2D\x22\xDD\xA7\xD3\x31\x0E\xED\xCF\x20\xDF\xCC\x66\xD2\x37\x55\x87\xA7\xEE\xD3\xF6\xD0\x56\xD6\x7D\xE0\x95\xE6\xD2\xB5\x0E\x2F\xC7\xED\xD9\xF5\xD1\xBE\xC7\x09\x18\x8C\x91\xD1\xE5\xD7\xB0\xA3\xF4\xDD\x94\xDC\xBF\xD8\xEF\x9B\xBF\xD4\xDF\xF0\xD6\xB8\x4F\xF7\xDB\x7E\xD5\xFD\xC9\x08\x0D\x89\x84\xD8\x03\xDB\x93\x01\xB2\x93\xFC\xDD\xBD\xCB\x7D\xE7\x04\x02\x27\xEC\xDF\xF6\xD4\xF4\xDF\x24\x09\x20\x9C\x5C\xF0\x3D\x7F\x01\xC6\xB9\x73\x96\x51\xCE\xCA\xD3\x10\x18\x56\xF5\xB1\xE6\xC9\xB6\x66\xA3\xC8\x3A\xCD\x40\x8A\x50\xDA\x40\xD6\x62\xD9\x52\xD2\xD1\x26\x18\x4B\x53\x43\x0B\x80\xD4\x48\x78\x71\x89\x0C\xD2\xD1\x8F\x22\xD6\x6E\x82\x1B\x90\x00\x48\x4F\xC0\xE7\x00\xF8\xDF\x93\x01\xEA\x20\x6D\xDD\x97\xDE\x7F\xC3\xB2\x80\xE0\x05\x85\xF8\xDC\x53\xCE\x2C\xD3\x6A\x09\x3A\xE2\xC0\xDF\xD7\x66\xD3\x72\x0A\xCA\xD7\x04\xEE\xBE\xD8\x5D\xE2\xAA\x81\xCC\xCF\xCF\x4B\xD0\x9D\xD9\xE5\x39\xF4\xCC\x4E\x2F\xA6\xAB\xD5\x98\xD7\x20\xD6\xFD\xD3\x0F\xDE\x97\xD1\x81\xCF\xAC\xD6\xD5\x44\x1F\x54\xDA\x40\x06\x2C\x25\xB7\xC2\x2B\xEE\xAC\xE7\xD6\x7D\xD2\x19\xE3\x81\xDE\x0F\xDE\xAE\xC6\x6E\x01\xA3\x92\x04\x5A\xD7\x30\x18\xC6\xD5\x6B\xD5\x57\xC7\x82\xD7\x98\xF9\xD2\x4A\xE1\x45\xDC\x81\xD1\x64\xD6\x9D\xD3\x15\x11\xC1\x81\x02\x3C\xD7\x84\xD6\x91\xD0\xE9\x1E\x01\xEC\x5F\xC6\xB3\xD8\xE0\x3F\xE1\x26\xE1\x79\xD5\x29\x1F\x58\xD4\x5B\xCD\xA5\x9E\xD4\x44\xD4\x31\xE1\x6E\xCC\xE8\x14\x8F\xC0\x5A\xCA\xA9\x91\xCC\x59\xE0\x6F\xDB\xCC\xD2\xDE\xC0\xA6\xD0\x57\xDF\xC1\xD2\x18\x5C\xD6\x39\xE0\x7B\xCD\x13\x2F\x9F\xC6\x83\xE8\xB7\xE8\xE0\x54\xD7\x5D\xD6\xD5\xD6\x09\xE3\xB0\xC9\x50\xE6\xAC\xAF\xD4\x28\xD7\x7A\xD6\xD3\xD0\xE9\x12\xA1\xC2\x6E\xC8\xC2\x88\xDD\x55\xD7\x6F\xD7\xF0\xDD\x64\xD9\x3A\x87\x73\xFF\xC1\xE1\xE0\x87\xD5\xEE\xD3\x72\xCE\x0A\xE6\x98\xC9\x82\xE9\xC1\xDC\xE0\xD2\xCA\x16\xD7\x27\xE1\x10\xE1\x0A\xF6\x50\xE6\xA5\xB4\xD7\x86\xE1\x78\xDB\x9D\xD1\x0F\xE4\xCF\xC4\x5A\xDA\xC2\x81\xD6\x36\xD6\xE9\x64\x90\xD1\x78\xD5\xA6\xD1\x84\xDF\xA8\xD4\xE0\xED\xCA\x52\xE0\xD3\x1E\x07\xE9\x08\xF0\x58\xCB\xC2\xE9\x12\x51\xD4\xA3\x03\x2A\xE3\x0A\xE2\x08\xE0\x82\xCF\xAD\xC2\xE1\x59\x1E\x62\xE0\x26\xE2\x11\xE7\x0B\xE6\x5A\xC2\xAC\xA9\x17\x63\xD4\x5E\xE0\x82\xCC\x69\xD2\x09\xE0\x86\xDD\x42\x5B\xD7\x2B\xD7\xB0\xD6\x29\xE5\x18\xEB\x02\xF2\x53\xC1\x95\xF0\xD9\xD1\xE0\x0E\xE3\x25\xE1\xCE\xD6\xA1\xD8\x70\xDD\x42\x6E\xD6\xC0\xDD\x59\xE3\x0F\xE1\x75\xD6\xB7\xC5\x54\xD2\xAD\xE3\xE1\xD3\xE0\xCE\xCF\x31\xE7\x49\xD6\xBA\xCE\x83\xE7\xB1\xC4\x59\xA3\xD3\xE6\xD5\x1A\xD2\x13\xD6\x96\xDA\x31\xDF\xAE\xA7\xCF\xD6\xCB\x76\x0B\xC8\x3D\xE5\x2D\x0F\xFA\x86\xEC\xC0\xC4\xD7\xD8\xD9\xEB\xCE\x80\xD9\x2F\xD0\x0B\xF3\x81\xE0\x9F\xE1\xDE\xA5\xD1\xF3\x63\x55\xC8\x61\xDD\x0A\xFB\xA5\x31\xAE\x9D\x21\xEB\xD7\x83\xE2\xC4\xC9\x01\xEF\x87\x0A\x3F\xCA\xA0\xBF\x1D\x0C\xD0\xBA\xD2\x00\xD4\xEC\x3D\x10\xF2\x57\xFB\xC0\xC7\xD8\xE2\xE0\x8A\xE3\x3C\xE6\xA1\xDD\x09\x3B\x4D\xE2\xC4\xC8\xE0\x32\xE2\x72\xE2\x1A\xE4\x1F\xEF\x04\xEC\x2B\xFE\xC3\xC9\xD3\xA8\xD1\x3B\xD4\x8D\xD5\x0A\xE7\xB7\xDB\x52\xCF\x9F\x95\xE2\x4B\xE1\x34\xD3\x4E\xE2\x45\xD8\xB3\x0F\x56\xCB\xC3\xCD\xD6\xDE\xE0\x32\xE0\x34\xE6\xEC\x17\x14\xE7\x85\xFB\xC3\xE9\xD1\x6C\xE1\x75\xD3\x4F\xE7\x60\xD1\x14\xE7\x68\xC3\xC5\xF4\xE0\x53\xE2\xCD\xD0\x52\xE2\x0B\xEC\x04\xE1\x59\xFE\xC1\xDB\xE2\xF4\xD5\x5F\xE1\x33\xE6\x2C\xD5\x08\xF7\x89\xD7\xC1\xF7\xD4\x63\xE2\x3D\xE0\xC8\xD7\x2A\xE7\xB4\xCE\x48\xCE\xC2\xAD\xD5\x60\xD3\xB4\xE1\x1C\xE5\x23\xE3\x06\xF9\x1D\xD5\xC2\xE7\xE0\x70\xE2\xAB\xE1\x35\xE2\xE7\x0B\xA1\xC4\x49\xE8\xC5\xBE\xE1", +"\x7B\xE3\x19\xD6\x07\xD3\x25\xD1\x16\xF5\x8A\xFA\xC4\xA8\xE1\xD2\x66\x9B\xD0\x27\xE3\x70\xD0\x09\xF0\x83\xD4\xAB\xEB\xE2\x2D\xD7\xA2\xE2\x46\xD6\x31\xE9\x0F\xE1\x53\xF4\xAC\x9B\xE1\x4A\xD2\xC3\x07\x53\xE5\x1B\xE8\x19\xFC\x79\x3A\xAE\xB1\xE1\xF7\xE1\x9C\xE1\x67\xE3\x29\xE5\x17\xED\x63\x1E\xA5\x8E\xE2\x16\xD7\x72\xD4\x2B\xE2\x31\xE2\x0A\xE4\x7A\x14\xAF\xEE\xE2\xA5\xE0\xD5\xE0\x3B\xE3\x59\xD4\x17\xF7\x86\xE2\xA9\xF2\xD2\xA3\xE2\xB5\xE0\x5F\xE3\x0E\xEF\x0D\xEF\x3E\xF1\xC4\x81\xE3\xE4\xE1\x8D\xD8\xCF\x18\x1D\xE4\x15\xEA\x87\xC8\xC7\x9D\xE3\xEE\xE1\xB6\xD6\xE3\xD8\x81\xD1\x61\xD1\x8B\xF5\xC2\x8D\xD7\xB7\xD7\x12\xDD\x63\xE5\x3A\xEF\x03\xE2\x7E\xF8\xC2\xFD\xD6\x47\x1F\xBF\xD4\x14\x09\x52\xD0\xBC\xCF\x84\xCF\xC4\x8F\xD1\xF5\xE1\x6C\xD7\xE2\xDA\x0C\xDD\x1B\xED\x89\xF8\xC5\x9F\xCC\x11\xE2\xFB\xCF\x18\xD9\x2F\xD4\xBD\xD6\x88\xED\xC3\x98\xE2\xAE\xD3\x73\xD8\x47\xE4\x36\xE7\x1F\xF1\x8E\xF9\x8E\xA1\xE2\xBC\xDF\x3E\xD7\xD0\x1E\x60\x19\x80\xC0\x0A\x2C\x9F\x8D\xC5\x2A\xE3\x5D\x1B\xF8\xCD\x5A\xD2\xDF\xD0\x84\x30\xAA\xFE\xD4\x11\xCD\xFA\xE1\x52\xE4\x06\xE4\x13\xE8\x7A\x36\xC4\x9C\xDC\x77\xD4\x09\xE4\x59\xE2\x29\xE1\xB2\xDD\x89\xC1\xC7\x89\xE3\x42\xE3\xC5\xE0\x51\xE6\x1E\xE1\xB4\xD1\x90\xC2\xC6\x9F\xE3\xB8\xE1\x2E\xE2\x5F\xCF\x30\xE6\x19\xFB\x8F\xE1\xC8\xB5\xE3\x9D\x21\x32\xE0\x6E\xE3\x18\xE6\x22\xEF\x8C\xED\xC7\xE2\xD5\xF6\x3D\x0F\xE7\x65\xE3\x38\xE3\x08\xE8\x7A\x35\xC1\xD1\xD6\x25\xE5\xBE\xD2\x86\xE2\x2E\xE6\x0B\xE8\x91\xD6\xC3\xE5\x00\x67\xE2\xD8\xE3\xD2\xD2\x36\xEC\x0C\xFC\x91\xCE\xC3\xC8\x1E\x6D\xE2\x0C\xE7\x41\xDB\x48\xE7\x1D\xE5\x8B\xED\xC7\x88\xD4\xF7\xD2\x16\xE4\x37\xE2\x38\xEC\x1F\xEA\x58\xFA\x96\xDB\xE3\x42\xE5\x13\xE4\x1F\xE5\x66\xD5\x18\xF1\x57\xEF\xC7\x86\xD6\x7A\xE3\x1D\xE5\x97\xE5\x2F\xE0\x09\x2D\x5D\xE8\xC6\xC1\xE4\xF4\xE2\x31\xE6\xC2\xC8\x24\xD3\xB2\xD4\x2E\xCA\xC9\xB9\xD2\x5B\xE4\x10\xE6\x57\xE2\x44\xE4\xF4\x10\x85\xF3\xC8\xE9\xE1\x61\xE4\x1B\xE7\x60\xE5\x3A\xD7\xB3\xCB\x4A\xDA\xC9\xCC\xE4\x50\xE3\xD2\xE1\x30\xE2\x33\xE8\xAB\xD5\x91\xEB\xC6\x9D\xE4\x48\xD6\x65\xE3\xA1\xE3\x67\xD3\x1B\xEF\x91\xEE\xC2\xD9\xD4\x8C\xE5\x7D\xD7\xF3\xCC\x4A\xE5\xD1\xDB\x83\xF3\xC9\xE0\xD4\xAA\x0F\x6C\xE2\x79\xE2\x5A\xD9\x26\xEE\x91\xFB\xC9\xB0\xE4\x48\x1E\x70\xE0\x70\xD5\xE8\xD9\x21\xF3\x89\xC6\x95\xBF\xDB\xB9\xE2\xD9\xDE\xA3\xE3\x37\xEB\x60\xC6\x4B\xF0\xC3\xCE\xE3\x53\xE4\x57\xE6\xE6\xD1\x3D\xE6\x07\xEE\x6D\xF1\xC9\xE4\xE1\xDE\xE3\x23\xE4\x78\xE3\xE8\x12\x1E\xE9\x66\x12\xAA\xCD\xE1\x44\x1F\x1A\xCF\xDE\xD8\xC7\xCA\x63\xD6\x36\xFD\x98\xD4\xE3\x06\x02\x22\xCC\x89\xE3\xC8\xCF\x27\xF1\x43\xC0\xA6\xE3\x0C\x68\xD4\x45\xC9\xD3\x66\xDA\xC0\x65\xD0\x5B\xD3\x99\x97\xCF\x6E\x41\x21\xDD\xFE\xC9\x58\xE8\x2D\xEA\x59\xDD\x99\xF0\x1E\xC6\xD5\xD3\xCE\x99\xCB\x5A\xE7\x12\x0B\x97\xF4\xCA\xFD\xCE\x4E\xD4\x69\xCE\xA5\xDB\xD6\x88\x1F\x96\x36\xEB\xAF\xA7\xCF\x75\xCC\x70\xE4\x23\x0A\x5C\xE0\x6E\xD1\x97\xDD\xA3\xD9\xDD\x05\x1A\x6B\xCD\x19\xE7\xF4\xC1\xA2\x6C\x97\xCF\x29\x7C\xE5\x4B\xD0\x7F\xE4\x9A\xD0\x91\xBD\x5D\x16\x36\xFF\xC8\xF5\xDE\x99\xCC\x83\xE5\x21\x08\x61\xEB\xB7\xC4\x2A\xEB\x24\x20\xCD\x66\x0B\xA8\xCF\xA8\xC9\x26\x00\xF7\x02\x82\xCB\xBB\xAD\xCD\xFA\xE4\xF1\x0C\xC5\xE6\x0F\xD4\x2E\xFF\x54\x1D\xA3\xB5\xCD\x70\x1F\xB2\xCC\xDC\xD6\x00\x0B\xC0\xC0\xA2\x23\xCC\xE9\xD0\x6D\xDF\x0D\xD3\xBC\xDE\x13\xD6\x70\xDB\x13\x98\x06\x47\xCD\xAC\xE5\x79\x11\xCB\xE1\xB8\x0F\x32\xF8\x42\xCA\xCC\xAA\xD6\x88\xB6\xA1\x06\xB5\xCE\xF7\xDB\xA9\xDD\x36\xE9\x9E\x83\x02\xDE\xCD\xCE\xE1\xB8\xCD\x34\x13\x6E\xC0\x9A\xCE\xEA\x5F\x19\x70\x1F\x74\xCC\xDC\xD4\xDD\xC4\x33\xFF\x6A\x9D\xC7\xBF\xE6\x69\xDD\x40\xDF\x85\xDD\xA8\xC9\x6F\xDE\x8D\x63\xBF\x58\xDA\x0E\xD8\x37\xD9\x09\xD8\xEE\x11\x70\xD0\x5B\xC4\x9C\xA1\xE6\x03\x03\xB3\xE6\xD2\xE0\x6B\xE0\xE9\xD8\x74\xE4\xCD\xB9\xE6\x18\xAF\xA3\xE7\x28\x5F\x6A\xEB\x0F\xF2\x97\xE1\xCD\xB3\xDC\x0E\xCF\xB7\xE7\x7A\xE1\x20\x02\x72\xD2\x98\xC3\x04\x7D\xE6\xEF\xE4\x7D\xE3\xA0\xE1\x20\x06\x37\xFD\x60\xE2\xCD\xBF\x31\x2C\xCE\xB8\xE4\xCC\xCD\x6A\xE3\xE2\x96\x8F\xC9\xAA\xCC\xD8\x38\x16\xFC\x2F\xB0\xE7\xE7\x1D\x73\xC7\xBF\x39\xC0\xBD\xD2\x70\x1F\x42\xE3\xE9\xCE\xE8\xC5\x35\xE6\x81\xDB\xC8\xBE\xE6\x44\xCB\xA6\xCD\xF5\x69\x5B\xED\x4E\xCE\x16\xF1\x06\x55\xCE\x70\xE7\x26\xC7", +"\x0E\xD6\x67\x9F\x03\xF1\x99\xCD\x1C\xE0\xCE\xA5\x12\xFE\x53\x05\x54\xEC\xC0\x37\xF8\x18\xEB\xCE\x99\xC6\xAD\xE7\xDF\xDD\x73\xB7\xED\xD2\x11\xF8\x3B\xF6\xCC\xE0\xDD\xDE\xDB\x97\xDF\x40\x02\xEF\xC9\x98\xCF\x49\x04\xCF\x81\xE7\x7F\xD1\x31\xE4\xEF\xCF\x72\xE4\xCB\xCA\x72\xE8\x39\x47\x64\x1F\x44\xCB\x63\xF2\xC4\x2B\xB2\x8D\xCA\x72\x0E\x9E\xCA\xD2\xD7\x38\xC9\xCC\xDC\x1C\xF2\xC0\xB7\xD5\x5B\xB7\xCE\xAD\xDB\x9F\xE7\xA0\x3D\xC9\xE4\x70\xED\x8D\xC3\x1C\xC3\x26\x25\xCF\x70\xE6\xDB\xCD\xD5\xE3\xF5\xCE\x38\xF6\x15\x23\xCF\xB9\x1D\x2A\xD7\x8D\xCC\xDC\x1C\xF6\xC0\xB7\xCA\x9F\xEF\xC0\xEC\xE7\x13\xE4\xF1\xE4\xDB\xE0\xD0\xD6\xC9\xDC\x98\xFB\x28\x50\xE5\xC7\xCE\xB9\xE5\x40\x03\x7C\xD2\xE1\xD0\x99\xFA\xCE\x8C\xDE\xBC\xE6\x4B\xE4\x73\xD2\xFA\xC0\x37\xF4\x5E\xF0\x1C\x2F\x12\x9C\xE4\x91\xDA\x0F\xD0\x6F\xD7\x61\xDD\x3F\xC8\xCB\xC5\xCA\x2B\xE3\xF2\xE3\x5C\xE5\x6D\xC4\x20\xEC\x02\x6B\x9F\xBF\x1D\xED\xCF\x14\xD2\x04\x10\x80\xE2\x10\x10\x85\xCF\xD0\xF8\xC8\x74\xE6\x0A\xE9\x29\xE6\x82\xEE\x24\xE1\x3F\xCA\xC8\x83\xD0\xD5\xD4\x92\xE3\x57\x16\x24\xE6\x20\xE8\x89\xD4\xA4\x22\xE8\x0F\xBE\xE1\xE6\x05\xD0\x6D\xEB\x43\xFD\x8C\xEE\xCE\xBB\xE7\x86\xDF\x35\xE4\x99\x08\xEE\x10\x82\xD0\x5B\xC6\xAE\xAF\xE0\x72\xD6\x09\xE9\xFE\xCE\xD9\xDD\x19\xF6\x36\xE5\x13\x27\xCF\x2D\xD1\xAA\xE7\xAA\xE1\x7C\xE6\xA1\xC7\x75\xFD\xB4\xF8\xDC\x6B\xE3\x1B\xD0\xDC\xE2\x72\xDF\x02\xEF\x5B\xCD\xC3\xEA\xD8\x56\xD8\x5E\x19\x1D\xD3\x2D\xE4\x84\xCB\x3C\xF3\xC7\x80\xD9\x56\xD1\xB5\xE7\x0F\xD6\x0C\xDB\x85\xDD\x59\xD2\xA1\x81\xE4\x01\x16\x33\xDB\xCA\xD2\x11\xD8\x41\xFA\x42\xE3\xD1\xCE\xE4\x52\xD8\xB8\xDF\x19\xEE\x91\xD6\x10\x12\xA3\xD6\xCB\xE4\xD8\xFC\x18\xFD\xC6\x1B\xEF\x0F\x12\xC7\xC1\xA3\xE9\xD1\xC8\xE7\x60\xE8\x40\xD8\x1B\xDA\x88\xE8\x87\xC6\x8C\x05\xD2\xE8\xE8\xEC\xE2\x35\xE8\x91\xE1\xDB\x99\xEA\xD8\xA3\xE5\x3D\x4C\x15\x06\xDB\x4D\xD9\xD1\xE0\x91\xE0\x39\xFF\x61\xCD\xA2\x8C\xE4\xE7\xE2\xDB\xD6\x59\xD4\x0C\x1D\x38\xE1\xA5\xCF\xAF\xAE\xE0\x77\xCD\x3D\xEB\xCA\xD4\x80\xED\x3E\xED\x54\xD7\x0D\x36\xE0\xFA\xE3\xAE\xE3\x1C\xEC\x42\xE9\x2C\xEF\x55\xFC\xC0\xC7\xE3\x07\xDA\x56\xE9\xFE\xE7\x3E\xE6\xAB\xD9\x94\xCD\xAC\xFD\xD2\xBA\xE8\x2A\xE8\x6F\xE3\x70\xEC\x13\xF6\x45\x3F\xAA\xF7\xE4\x6F\xE1\x3C\xE6\x9A\xE2\x81\xEC\x26\xF1\x7B\x06\xAB\xFF\xE4\xCD\xE2\x60\xEA\x9C\xE6\xF5\xC4\x8D\xCD\x8A\xD6\xA3\xDE\xE0\x93\xE5\xAD\xD5\x93\xE4\x91\xEF\x24\xF9\x1D\xF2\xC8\xD2\xE4\xAB\xE9\x69\xE8\x5A\xC8\x24\xD8\x23\xEC\x37\x3A\xC8\xA6\xE5\xB3\xE8\x54\xE5\xEE\xC7\x61\xE0\x4D\xFA\x4C\xC1\xD3\x93\xE9\x56\xE4\x62\xE8\xD4\x09\x49\xE3\x2A\xE8\x93\xC8\xC6\xCB\xE9\xA7\xE5\x4B\xE4\xCF\x19\x4A\xE6\x09\xF7\x53\xEF\xD3\xD5\xE4\x1C\xE5\x2B\xE5\x23\xE1\x4B\xE8\x4C\xF5\x4B\xED\xC8\xB2\xE9\x04\xD3\x2F\xE6\x2F\xEA\xE6\xDC\xA5\x1F\xA7\xDD\xCA\x9B\xE8\x46\xE4\xC2\xE3\xC4\xD4\x43\xD9\x4D\xF2\x82\xC9\xCA\xF8\xE8\x8C\xE3\x85\xE8\x4E\xE6\x9F\xE2\x4E\xF7\x3B\xFA\x1C\x75\xE4\x37\xD3\x8A\xE8\x18\xE5\x52\xE9\x4F\xFE\x92\xFD\xC9\xE0\xE4\x79\xD2\x87\xEA\x12\xE8\xA2\xEA\x3C\xE9\x91\xC5\xCA\xA2\xE3\x22\xEA\x40\xE3\x36\xEC\x99\xE4\x1C\xE8\x7A\x27\xC6\xED\xE9\xCF\xCE\x95\xE9\x7E\xDE\x5B\xD1\x51\xEC\x84\xE9\x2E\x2F\xE3\xF5\xE8\x21\xD5\xA9\xE0\xA1\xEA\x92\xDC\x79\x37\xC6\xE0\xE9\x0D\xEB\x8E\xEB\xB5\xE6\xA7\xEF\x1B\xF9\x5A\xF1\xD4\xA0\xE1\xDC\xE9\xBD\xD2\x71\xE0\x6E\xE9\x54\xE9\x8E\xF5\xAF\xE7\xE1\x77\xDE\x1D\xE9\x2E\xEE\x55\xE6\x2B\xF3\x8E\xDA\xAA\xD2\xE9\x56\xEB\xEC\xE0\xCF\x1E\xC4\xDD\x2B\xEA\x57\xD1\x98\xBA\xEA\x83\xD1\xF7\xE4\xD4\x0B\x72\xEB\xF3\x05\x96\xEC\x7F\x1A\xE8\x94\xE2\x53\xEB\xAD\xDC\xE8\x10\xFF\xC6\x08\x1F\x4F\x38\xE5\x47\xCA\x8E\x15\x7E\x52\xD6\xDF\x3F\xE0\x3D\xE2\x9E\xC7\xB2\xAE\xDD\x11\xE1\x50\xCE\x95\xD0\x56\xC5\x27\x1C\x29\x78\xD7\xFF\xDF\x52\xDC\x45\x04\x4B\x13\x00\x1F\x93\xEB\x68\xBE\x15\x38\x21\x3F\xE4\xA3\xA7\xF1\x16\xC6\xC1\xD0\x9C\x29\x7D\x01\x3D\xE7\xFD\x45\x0E\x04\x4B\x1B\x0F\x19\xAC\xF4\x44\xDC\x14\xF9\x00\xCF\xE9\x04\xA4\x4B\x17\x0F\x02\xAD\xEE\x05\x36\x00\x5C\x15\x7A\x02\x69\xED\x8F\x9C\xA5\x13\x07\x2B\xD6\xBF\x98\x5C\x15\x78\x03\x6B\xEA\x00\x37\x12\x0F\x07\x2F\xD6\xB2\x00\x5C\x15\x76\x03\x6B\xED\xA3\xD6\xCB\xD5\x29\x0D\xB3\xCB\xD3\xCF\xD8\xA2\xC9\x34\xDF\xD7\x10\xCC\xCB\xAC\xDE\xB6\xC3\xD9\x27\x03\x62\xDA\x52\xCE\xB0\xE7", +"\x12\x08\xAC\xDF\xC0\x8A\xEB\x93\xE3\xAC\x1E\x63\xEF\xEC\x44\x4F\x43\x82\x12\xD6\xDD\xA4\x73\x42\xCA\xE8\x53\xCE\xB2\xE7\x12\x18\xAC\xD2\xB5\x9B\xEB\x27\x03\xCE\xEA\x54\xD8\x07\x00\x5A\xEF\xAD\xF7\x00\x24\xEB\xAF\xEA\xD4\xEB\x49\x02\xB5\xE2\xD5\xD5\x01\x2D\xD6\xAF\xEB\x34\x01\xD8\xEB\x6C\xEC\x4B\x16\x5B\xF2\x6A\xF8\xD6\xA7\x02\xBA\xEA\xA9\xD8\x6F\xED\xA4\xDE\x5B\xE7\x69\xC0\xD7\xE6\xDA\xC2\xEB\x95\xDA\x2F\xDF\xD7\x13\xCD\xDA\x74\x78\xB3\xC7\x1E\xA8\xE9\x81\x02\x36\xDB\xA9\xCC\x5C\xFC\xB7\x20\x95\xF6\x5E\x8C\xEB\xE9\xE9\x86\x55\xBA\xE3\xC6\x2B\x2A\xD3\xD6\xB8\xDF\x16\xEC\xEC\xE8\x64\xDE\x20\x0E\x5D\xE8\x74\xC5\x45\x9C\xEB\xAF\xEA\xF2\xEB\x49\x01\xB4\xE2\xD5\xC7\xAF\xE7\x04\x25\xEB\x52\xDA\xF5\xE9\x42\x04\xBD\xEE\x61\xEC\xAD\xE7\x04\x2E\xEB\x52\xDB\xF8\xEB\x49\x02\xB6\xE2\xD5\xD4\xAD\xC9\x04\x75\xEB\x2D\xEC\x0D\x75\x6E\xEB\xB7\xEA\xE8\xD0\xA7\xE2\xB7\xE5\xD9\x4F\x11\x1B\xE0\x3A\xDD\xD2\xD7\x37\xE8\x72\xF4\xB8\xFE\xE3\x90\x21\x77\xD9\x61\xEF\xF9\xCE\x5C\xFE\x64\xD1\x52\x91\xEC\x4C\xCB\xC7\xEB\x70\x04\x4B\x15\x61\xEA\x2A\xD7\xD8\xB5\xE9\x19\xED\x64\xA5\x79\xA7\xB2\xEF\x5A\xE0\xAF\xC9\x04\x62\xEB\x39\xEC\x11\xED\x42\x04\xC4\xE9\x63\xE6\xB1\xC9\x04\x28\xEC\x39\xEC\x15\xEE\x41\x04\xC5\xEB\x1B\xF0\x63\xAF\xD7\xB1\xEC\xF2\xEB\x1A\xEC\x7D\xEF\xB6\xEB\x63\xFA\xAF\xFD\xD8\x80\xEA\x88\xCE\x01\xE2\x8B\x0B\x9F\xDC\x94\x38\x71\xC5\xD9\x97\xDD\xE4\x35\x0A\xE5\xEE\xC4\xA0\xD8\xB8\xCC\xB2\xCF\xD8\xCF\xEC\x19\x10\x09\xEE\x08\x74\xC2\xE7\x5D\xFA\xB2\xE2\x4B\xDA\xEB\x59\xEC\x6F\xA4\x7E\xA4\xCB\xEF\x5D\xE0\xB1\xE3\xD7\xE5\xEB\x25\xEC\xF4\xE9\x8A\xE9\xB5\xEF\x5A\xEE\xAF\xEF\xD8\xF0\xEB\x71\xED\x1C\xEE\x8D\xEE\x20\x08\x63\xED\xB3\xF8\xE8\x75\xEC\x39\xED\x18\x03\x9D\xEF\xA1\xE7\xDD\xC2\xB4\xCE\xC8\x90\xDA\x85\xED\x08\xCD\x93\xEE\xB6\xD8\x68\xFC\x7B\x0A\xDA\xA0\x81\x8C\xED\xED\xE8\x76\xEA\xD5\xE8\x61\xF6\xB2\xDA\xD8\x94\xED\x39\xEC\x2F\xEE\x41\x00\xCC\xE6\x6A\xF0\x03\x22\xD9\x86\x02\x64\xED\x62\xEE\x99\xEE\x20\x08\x66\xE5\xB6\xEA\xD9\x83\x02\x6C\xEC\x17\xDE\x73\x9F\xCD\xE9\x63\xF2\xB1\xC9\x04\x34\xEC\xA2\xED\x39\xEE\x7D\xE8\xD5\xE5\x6C\xFC\xB5\xDB\xB9\xC5\xED\xE3\xDB\x20\xE1\xA1\xDA\x56\xEB\x54\xD4\x5D\x2E\xC3\x7E\xEC\x86\xE6\xBC\xE7\x28\x37\xAA\xEC\xF3\x1B\xAF\xFD\x2D\x4B\xEC\xB2\xED\x43\xEC\x74\xE8\xCA\xEB\x54\xD2\xB2\xCA\x05\x54\xEC\x8D\xEC\x49\xEE\xBB\xA0\xD2\xEE\x6B\xEE\xB4\xE4\x5D\x40\xED\xC5\xEC\x61\xEF\x40\x04\xD8\xE2\x6D\xF4\x81\x98\xDA\xE5\xEC\x9A\xED\x34\xEC\xA7\xED\xBD\xE4\x6D\xE5\xB6\xD6\xDB\x86\x02\xD8\xED\x62\xEF\xA8\xEB\x20\x05\x6A\xE5\xB8\xF4\x0D\xDC\xED\x16\xEE\x63\x5F\x32\xDD\xBF\xE5\xC9\x99\x72\xFB\xB4\x81\xEC\x9A\xCA\x96\xDA\xB1\x26\xA5\xD7\x5C\xF0\x69\xE3\xDB\x9C\xDE\x86\xEC\x52\xDF\x88\xDD\x9A\xD9\x68\xF1\xB2\xD4\xD7\xB4\x64\x7D\xE9\x7C\xEC\xA2\xCF\x5B\xAC\x6F\xE9\x2A\xDC\xD7\x89\x02\x1D\xED\x80\xEE\xA5\xE9\xCC\xE7\x70\xEA\xB6\xC9\xDC\xCE\xED\x0B\xEF\x1C\xEE\xA7\xE9\x21\x00\x63\xF5\xB6\xE1\xDA\x92\xEE\xDA\xED\x1C\xEF\x7D\xE9\x21\x09\x5F\xE9\xB5\xEB\xDA\xAB\xEA\xD7\xDA\xBF\xDB\x9D\xDE\x33\x1F\xD3\xC2\x0B\x03\xB6\xED\xC6\x85\xDB\x66\x30\xBA\xEB\x87\xDA\x6E\xE2\x74\xDD\x42\x4B\xDA\x6E\xDC\x06\xED\xCA\xEA\x89\xD5\x6B\xF5\x57\x37\xDA\xE0\xC7\xB9\xED\x48\xEF\xCC\xE9\x44\xB5\x73\xE8\x2A\xF7\xDC\x9C\xEC\x5D\xED\x9D\xED\xB1\xEF\xD8\xE3\x10\x09\xB6\xD9\xDC\x94\xA0\x3F\xEF\xBB\xEF\xB3\xEA\x20\x01\x6D\xE1\x75\xFB\x8F\x43\xEE\x06\x03\xA2\xEE\xC3\xEF\xE8\xE7\x77\xF3\xB8\xC2\x04\x15\xEE\x7E\xEF\xBB\x84\xC6\xE9\xF1\xEE\xA2\x6F\xBA\xFB\xD4\xCD\xE7\x54\xDA\x13\xBA\x55\xDB\xEB\xEF\x0F\xFD\xBA\xC8\xCE\xDC\xDA\x27\xEF\x99\xDF\xD8\xE9\x8B\xD5\x76\xE6\x65\x27\xDD\xE8\x22\xE9\x34\x7C\xEE\xAE\xEE\xDF\xEE\x6D\xFF\x88\xF6\xDC\xBF\xED\xDD\xEB\xB8\xED\x78\xE9\xC4\xED\x73\xF7\xBB\xCB\xDB\x83\x02\xCD\xEC\xBD\xED\xD0\xED\xD8\xE0\x78\xE3\x08\x02\xDE\xF7\xEE\x0F\xEF\x81\x01\xC4\xED\xF0\xE9\x74\xE5\xB6\xCB\xDD\x86\x02\x4D\xEF\x6E\xEE\xE3\xEE\xE3\xE2\x75\xEE\x74\xE2\x2B\x2A\x0F\x4E\x61\xAB\xEF\xD1\x19\xEB\xED\x8E\x24\xB2\xE9\xDB\xC6\xEC\x0E\xCE\xBA\xD9\xE6\xED\x06\xE7\xA7\xD3\xB5\xE1\xA6\xF3\xED\x2D\xEF\x7A\xEF\xCB\xED\xD2\x02\x7A\xEA\xBB\xDC\x9B\xB4\xEE\xBD\xED\xD3\xEE\xBF\xEB\xC3\xE3\x10\x19\xB9\xF7\xDD\x82\xEE\x02\x02\x82\xEC\xE3\xEC\x05\xAD\x7A\xEB\xBF\xEC", +"\x44\xF9\xEE\xEE\xEE\x0F\x9F\xEC\xEF\xEE\xE5\x7B\xE2\x08\x37\xDE\xF1\xEF\xB9\xEE\x81\x03\xEE\xE9\xFE\xE6\x78\xE1\x08\x08\xDE\x85\xE8\x0B\xA7\xDF\xEF\x40\x01\xF8\xE7\x77\xE5\xBD\xC2\xB9\x8F\xDB\xC5\xEE\x54\xDE\xB8\x11\xB0\xDA\xD0\x2A\xBE\xC3\x3D\x4C\xEF\xAD\xDC\xA3\xDB\xBC\xE2\x6B\xE1\xC5\xCA\x6C\xE7\x04\x5A\xDB\x4B\xCB\x51\x0F\x61\xEA\xDE\xEB\x72\xE1\x66\xD9\xDF\xCA\xCA\xF6\xEC\x90\x01\xF7\xED\xDF\xEA\x6F\xEF\xB4\xE1\xDF\xEE\xEE\xA8\xEE\x9C\xEE\xEA\xEF\xCB\xEC\x7A\xE3\xB1\xE6\xD7\xF0\xEF\x00\xF0\x95\x9F\xFC\xE9\xFE\xE5\x7F\xE1\x08\x37\xDF\xB1\xF0\xD3\x43\xFC\xED\x40\x03\xFF\xE8\x83\xE1\x20\xBD\xDE\xF7\xEE\x02\xF0\x81\x00\x01\xF1\xFE\xE6\x80\xFF\x74\xEF\xD6\x90\x23\x96\xDA\x4D\x2D\xAC\xED\x2F\xD6\x7D\xE4\x2A\xD0\xD8\x9F\xF0\x49\xCB\x10\xF0\xBE\x39\xB2\xE3\x7A\xE5\xC1\xD9\xD7\xA7\xF0\x47\xCB\xB7\xED\xF9\xEB\x05\xF3\x6C\xED\xC1\xE3\xD9\xAF\xF0\x27\xED\xF4\xEB\x0C\xF5\x07\xFE\x66\xFF\xB4\xF0\xD9\xB3\xEC\xF3\xEB\xDA\xE8\x9D\xE8\xBF\xEC\x63\xF3\x73\xFB\xD2\xCA\x39\x9F\xDB\xD0\xDB\xB4\x73\x09\xF9\x97\xCD\xC2\xFE\xAD\x9D\xEF\x4C\x1F\xCF\xEE\xF9\xC1\xF4\xE4\x85\xFE\xBE\xF5\xCC\xEC\xEE\x58\xF0\xA3\xCA\x16\xF2\x20\x06\x7E\xF1\xBF\xE8\xDF\x81\x02\xEA\xEE\x32\xF0\x7A\xB5\xFD\xEA\x88\xF8\xBB\xE1\xE1\x9B\xED\xEB\xEB\x4E\xED\xC3\xE8\xF7\xE4\x78\xFC\xBF\xFF\xE0\xF1\xEF\x41\xF1\x80\x03\x10\xF5\x11\xF5\x84\xE1\x08\x20\xBA\x8D\xF1\xAA\xDA\x39\xF2\x2E\x5C\xA9\xCD\x60\xF1\x96\xDC\xE0\xE8\xD8\xD1\xEA\xB3\x1E\x1E\xF3\x63\x0C\x87\xEC\x7B\x32\xDC\xDF\xEF\x80\xF0\x2C\xEC\x09\xF3\xED\xEB\x65\xE9\xBD\xD5\xDA\xAB\xEF\x97\xEC\x17\xF1\xA6\xEF\x11\xFA\x70\xF1\xC4\xCC\xDC\xE6\xF0\x46\xEE\x34\xF2\x9C\xEA\x0D\xFB\x6D\xEC\xC3\xF6\xD9\xEE\xF0\xC2\xE9\x5C\x3B\x7B\xDC\xEC\xE0\x5D\xE8\xB2\xF1\x3D\x39\xDB\xC3\xE7\x53\xF1\xF5\xEA\x1A\xF6\x79\xFE\xC0\xF6\xDA\xAE\xEE\x13\xEC\x98\xEC\xE3\x1F\x15\xFF\x87\xFB\xB7\xC1\xE2\x9D\xE9\x56\xF0\xF2\xEC\x21\xF4\x0B\xF3\x70\xFE\xC2\xC8\xDB\xE0\xF0\x67\xEC\x31\xF2\x2F\xF2\xE8\xE3\x89\xF8\xBF\xD5\xE2\x8D\xF1\xFD\xEE\x00\x03\xFF\xEE\x71\xE7\x71\xE6\xC6\xE9\xDA\xB0\xE5\x02\x02\xE7\xDB\x72\xEB\xF3\xE9\x58\xFD\xC0\xC6\xD7\xD7\xF1\xDA\xEF\x6C\xF0\xF7\xED\x0F\xF3\x8B\xF0\xC5\xDE\xE3\xB2\xF1\xE2\xEF\x70\xF0\xC0\xEF\xFC\xE2\x77\xF7\xBB\xF4\xDD\x82\x02\x76\xEF\xF8\xEF\xEB\xEA\x20\x01\x7B\xF1\xBF\xFB\xDD\x81\x02\x7D\xEF\x46\xF1\x0D\xF0\x00\x07\x83\xF4\xC7\xE3\x22\xEF\xF1\x1E\xF3\xFF\x87\x25\xF5\x11\xF9\x89\xE0\x00\x1B\xE2\xA1\xF2\x9D\xF0\x00\x03\x27\xF1\x24\xF2\x8E\xF9\x61\xEA\xDC\xA8\xF1\xCD\xDA\x71\xC8\x1D\xF3\x1A\xFF\x92\xE7\x9C\xD6\xE3\xE6\xEE\xD8\xF1\x45\xEE\x36\xF0\xF3\x1C\x8D\xFE\x9D\xF1\xE2\xA6\xEF\x28\xF1\xF1\xEF\x42\xF6\x10\xFD\x90\xF1\xBF\xCF\xE4\x81\x02\x11\xF3\x46\xF3\x44\xF1\x20\x05\x91\xED\xC4\xD7\xE4\x80\x00\x19\xF3\x90\xF3\x46\xF5\x23\xFF\x86\xEB\x45\xA0\xE4\xD5\xF2\x2A\x89\x91\xF1\x48\xF5\x24\xF7\x92\xF8\xCA\xE5\xBB\x43\xEF\xFF\xEB\x2E\x46\x59\xD0\x03\xF3\x10\x1F\x6F\xCA\x95\x9A\xF0\xCD\xEA\x6A\xF0\xF4\xEB\x14\x34\x6F\xE0\xC1\xDB\xDF\xA3\x1B\x04\xF3\x84\xF0\x2D\xF6\x04\xF8\x90\xE1\xCA\xCA\xE4\xB6\xF1\xC1\xED\xA2\xF1\x23\xF7\x28\xF0\x00\x09\xCA\xE1\xE4\xCB\xF2\x00\x01\xA6\xF1\x48\xF7\x29\xF1\x95\xFE\xCA\xD3\xE5\xA0\xED\xC2\xF1\x6C\xEC\x31\xF2\xE9\xEB\x78\xFC\xC4\xE0\xE5\xBA\xD9\xC3\x38\xB3\xD1\x79\xDA\x20\x07\xDE\xC9\x2A\xE5\xE2\x83\x02\x76\xF1\xF0\xE0\x1E\xF2\xBA\xE9\x93\xF8\xB5\xFB\xE4\xAD\x20\x3D\xF3\x41\x0C\xF8\xED\x2E\xF9\x85\xE9\xC1\xF0\xDD\xB7\xF1\x2C\xF1\x5C\xF3\x17\xF3\x17\xF9\x8E\xF0\xC4\xEB\xD8\x92\xF1\xC0\xF1\xC1\xED\x62\xF0\xE9\xEB\x98\xFE\xBD\xCD\xE6\xA8\xF2\x8F\xF3\x8E\xE2\x32\xF4\xC2\xD5\x93\xF5\xC6\xD4\x04\x0D\xE4\x71\x1E\xFA\xD9\xD8\x91\xA9\xC8\x96\xEE\xB0\xFD\xE6\xEB\xF2\x9A\x31\xB6\xF1\x14\xF7\x2D\xF4\x45\x03\xC1\xF2\xE5\x86\xF2\x74\xF2\xA0\xF1\x69\xF2\x28\xF8\x97\xFA\xB9\xF8\xE2\xBC\xEE\xBA\xF0\x84\xEC\x2F\xF0\xE8\xEB\x8E\xF4\xBD\xED\xE3\x8D\xF1\x3A\xF0\x00\x00\x0F\xF1\x24\xF1\x8F\xF3\xC7\xDE\xE5\xDC\xF2\x6D\xF1\x6F\xEF\xDD\xE9\xDC\xED\x09\x26\xCB\xD9\xBF\x4C\xCA\xC5\xF2\x53\xF3\x71\xF0\xD0\xEC\x96\xF0\xC2\xC8\x95\xD2\xF0\xCE\xF2\xBB\xF3\x5C\xF7\x0A\xF4\x9A\xE2\xC4\xE6\xE6\xDB\xF0\xA8\xF3\x2E\xF2\x6A\xF7\x1C\xFC\x9A\xEC\xB6\xEA\xE3\xAF\xF3\xBF\xF0\xA2\xEC\x62\xF7\xDA\xE9\x86\xF7\xB1\xEB\xE1\xCC\xEE\xE9", +"\xF2\xD3\xDB\x11\xF1\xC1\xD1\x54\xCB\x70\xE0\x44\x70\xED\x4C\xF0\xB5\xF0\x7D\xF1\x39\xF6\x9F\xE7\x2A\xF8\xE7\xF1\xF2\xFA\xF2\xE8\xF0\x7F\xF2\x3A\xFE\x9F\xF4\xCE\xEA\xE0\x81\xF4\xE5\xF1\x01\xF5\xDD\xE8\x1D\xF6\xA0\xEE\xCD\xEB\xD9\xB0\xF3\x0A\xF5\x33\xF0\x83\xF3\x18\xFE\xA0\xE5\xC6\xD0\xE8\xC7\xF1\xEA\xF3\xF8\xED\x4B\xF5\x8C\xD3\x9F\xEA\x73\xDB\xCD\xAE\xED\x71\x1E\x0D\xDC\x86\xF5\x0E\xFA\xA1\xFE\xD1\xF7\xE4\x9E\xEF\x9D\xF2\xB4\xEF\x67\xF6\xBA\xE5\x85\xFB\xCF\xE9\xE4\xD2\xD2\xE0\xF1\xFD\xF3\x8E\xF5\x10\xFD\x88\xE7\xC4\xC0\x00\x09\xF1\x21\xF2\xBE\xF2\x5F\xF6\x2B\xF0\x98\xE2\xCC\xDE\xE5\x84\xF3\x30\xF5\xC0\xEF\x82\xF0\xE2\xED\xA0\xE4\xB5\xCF\xE8\xC0\xEF\x11\xF5\x03\xF1\x8E\xEB\x47\xF5\xDB\xD7\xBE\xFE\xE3\xDD\xE9\x90\x20\xB2\xEA\x8F\xD9\xD8\xDC\x8F\xEF\xAE\xEF\xE9\xCA\xF3\xF7\xF2\xE6\xF0\x64\xEE\x15\xFD\xA4\xE2\xD1\xCF\xE9\x95\xEB\xFF\xF3\x71\xF0\x8A\xF1\xFD\xE6\x8E\xEB\xD1\xC5\xE8\xB0\xEF\x07\xF5\x17\xF5\x82\xF2\x4C\xF2\xA3\xE4\xD3\xF4\xE8\xE6\xF4\x36\xF4\x34\xF4\x8E\xF2\x42\xFF\xD8\xCA\xAB\xDE\xAA\xED\xE6\x81\xED\xA2\xCA\x8D\xD8\x70\xDD\x07\x60\x9B\xCF\xDF\x9B\xF4\x97\xEE\x9E\x1D\x8F\xD9\xEC\xE4\xA7\xF1\xB7\xFD\xE8\x94\xF0\xFF\xF0\x9C\xF1\x40\xF2\x27\xF3\x90\xFC\xD3\xFE\xE1\xBE\xF2\x07\xF2\x12\xF5\x94\xF2\x44\xF3\xA5\xE4\xC7\xC4\xEA\xAA\xF4\x10\xF2\x16\xF4\xA2\xF6\x45\xF0\x6D\xE1\xD3\xF6\xDE\xE3\xF4\xBA\xEF\x32\xF4\xC5\xEF\x4C\xF3\x80\xE9\xD3\xC6\xE1\x95\xF5\x7C\xD6\x4C\xF7\xBA\xEB\xF0\xCF\x57\x12\x84\x4D\xB9\xFE\xD9\x13\xF1\xFE\xE6\x59\xD3\xCA\xD6\xD7\xCB\x2A\xF1\x19\x1B\xF0\xA7\xF5\xFE\xE4\x9E\xF6\x43\xFA\xA7\xF3\xB2\xE0\xE8\xD3\xF3\x56\xF1\x3F\xF5\x9F\xF5\x1B\xF4\x20\xA3\xCA\xD5\xE9\xFA\xF2\x59\xF4\x46\xF3\x5F\xF0\x06\xF3\x98\xE3\xC3\xD2\xE5\xDF\xF3\x21\xF3\xF0\xF3\x78\xF6\x2B\xF5\x9E\xE4\xD6\xC2\xE1\xC6\xF5\x9E\xF1\x23\xF2\x15\xE8\xAD\xD8\x45\xF1\xD6\xE4\xB2\xE5\xDC\x3B\x15\x33\xDE\xE1\xCA\x59\xFE\x75\xE8\x7A\x2D\xB9\xE5\xE6\x78\xDE\x9A\xF0\x33\xF7\x4E\xFD\xA1\xE6\x2A\xDF\xE8\xAE\xF5\x05\xF2\x72\xF7\x88\xF1\xAC\xC3\xAE\xF0\xD5\xE5\xEB\xD5\xF3\x0C\xF3\xEB\xF3\xDC\xEA\x5D\xFC\xA5\xEC\xD7\xDF\xE9\xEE\xF5\x86\xF2\x78\xF6\x57\xF2\x5E\xF2\xAC\xE7\xBC\xF6\xEB\x9A\xF1\xF8\xF4\x95\xF2\xBE\xF3\x97\xE5\x49\xFF\xB3\xC6\xE9\xBF\xF3\x6D\xDA\x3E\xDF\xAE\x12\x0C\x61\x58\xEE\xD9\xE8\xEA\xF0\xF4\x71\x1E\x42\xDC\x95\xDC\xA9\xC7\xAD\xE9\xCB\xD9\xEB\xDA\x38\xDB\xF4\x87\xF5\xB7\xF7\xDE\xEF\xAD\xE5\xD1\xE1\xEB\xED\xEE\xE0\xF4\x29\xF6\xB9\xF1\x24\xF6\xA5\xF8\xD2\xDE\xE5\xDA\xF4\xBA\xF4\x8A\xF1\xA2\xF5\x57\xFB\xA8\xFF\xD5\xCD\xEA\xC1\xF5\x8F\xF5\x61\xF5\xA4\xF5\x58\xF3\xA9\xEA\xD3\xE0\xDB\xFB\xF5\x94\xE9\x7E\xF6\xCD\xF5\x7F\xE4\x7D\xE5\xA6\x93\x7F\x14\xEF\x1B\xCF\xA0\xCA\xE4\xDC\x4D\x10\x56\xC3\x2A\x18\xEB\x8B\xF6\xA8\xF1\xA0\xF5\x51\xCF\x61\xF1\x73\xF5\xD8\xE2\xE6\xBF\xF2\x14\xF7\x57\xF7\xDD\xF5\x16\xF7\xA2\xF9\xCB\xDA\xEC\x8E\xF2\x1C\xF7\x64\xF3\xFB\xEB\x3B\xF2\x7B\xFD\xCE\xF4\xDF\xA2\xF6\x82\xF6\xD8\xEB\x6C\xF4\xF7\xE5\x9B\xE0\xC2\xF7\xE6\xDE\xF2\x29\xF3\x95\xF2\x57\xF4\x4D\xF2\xE2\xC8\xC5\xE0\xED\xB3\xA2\x2D\xF6\xBF\xEB\xAA\xDF\xAF\xE1\xF1\xA7\x64\xC9\xEC\xC5\xA9\x1F\xBE\xBE\xEA\xAA\xDE\xAF\xE3\x37\xA2\x1D\xE8\xC7\xC1\xCA\x3A\xCC\x84\xF6\x56\xEF\xA8\xC9\xBD\x1B\x87\x76\x7B\x68\xF6\xF1\xDA\x20\xF7\x3F\x07\x59\xE8\xF3\x01\x90\xDC\x29\x24\xDA\x76\xF5\xB8\xF6\xAF\xDF\x4F\xEA\xD1\xBA\x27\xDF\xB6\xE5\xE0\x72\xF4\x1C\xF3\x40\x00\x77\xFE\x64\xF8\xBE\xC9\x04\x53\x00\xBC\xF7\x8B\xCA\x47\xBA\x46\x0C\xA5\x0F\x80\x0C\x95\xF6\xC9\xB1\xB9\x69\xBB\x4E\xE1\x24\x15\x4E\xF1\x0D\x29\x86\xD2\xD1\xF8\x11\xEB\xC1\x08\x09\x7E\xC9\xB7\x69\x0D\xFF\x03\x65\xE0\xA3\xF5\x3B\xE1\x5F\xD4\x78\xF4\x6B\xE6\xDE\xC6\x04\x48\xF7\xC9\xD6\xE5\xF6\xE0\x90\x73\x1D\xBC\xFF\x93\xD0\xEF\xC2\xB9\xD3\xB9\x0F\xCF\xFD\xDA\x14\xFE\xA1\x4F\x73\xE3\xEF\xC5\xF4\x37\xF6\x2E\x14\xFA\xF5\xDC\xEA\xBE\xEF\xE8\xAC\xEF\xA7\x02\xCE\xF7\xA5\xCB\xFB\xF5\x0F\x82\xCE\xA8\x03\x18\xEF\xB3\x09\xDA\xF7\x9E\x00\xF7\xF1\x22\x81\x49\xCC\x79\xF4\xEF\x80\x00\xBA\xDE\xC0\xE3\x41\xDC\x7C\xFE\xA6\xFA\xDD\xC7\xEF\xC9\xF7\xA1\xCF\x70\xBA\xDD\x15\x7D\xFF\xBC\xFE\x27\xC1\x73\x84\xF8\xDD\x8C\xCA\x19\xDE\xF5\x13\x2C\x1C\xFA\xC7\xF2\xC2\x93\xF8\xF8\xF6\x6D\xF7\xEE\xF1\x7D\xF9\xC1\xFE\xDC\x5C\x29\x4D\x00\xEE\xF6\x0F\xFA\x06", +"\xFD\x72\x91\x11\x16\x4C\xC8\x3D\x01\xDC\xEC\x52\xA4\xEB\x49\x04\x82\xFE\x84\xFB\xCC\xE9\x12\x18\xF8\x39\xE9\x19\xF9\xA9\x80\x80\xF1\xC3\xE2\xE5\xA8\x1D\xF7\xC9\xFC\x38\x67\xF3\x3F\x00\x8B\x6F\x22\x5A\xE1\xD6\x92\xA9\xF8\x40\xF7\x15\xF8\xFF\xF5\x85\xF3\xD2\xBC\xE0\xC2\xF0\xB2\xF8\xBD\xB9\x10\xF8\xA0\x10\xC1\xE1\x54\xCA\x7E\xD2\x3A\x1C\xDD\x02\x02\x1E\xFB\x1D\xF6\x7C\xF3\x10\x1B\xDF\xCA\x95\xBD\xF7\xC9\x52\x22\xF9\x07\xFE\x88\xFF\xC1\xE3\x04\x85\xF0\xD3\xF7\x9A\x0C\xA8\x16\xE7\x17\x7A\xF5\x54\xD9\xDE\xC9\xAD\x49\x0F\x7B\x83\x95\x2A\xF7\xF1\xA8\xC2\xFD\xD4\xD6\xC7\xC2\xF7\xD4\x62\xF8\xCD\xF0\x19\xF8\x90\x00\xC4\xFB\xDC\xC2\xF1\xCC\xF7\x6A\xF9\x2B\xF8\x1B\xF9\x95\xB1\xBD\xE5\xE0\xE6\xA5\xC4\xA4\xBC\x70\x27\xFA\x41\x01\x90\xF4\x2C\xFE\xE1\xE6\xF1\xC9\xCA\x68\xF9\xC8\x0E\x15\xFA\xA9\xC3\xC0\xEE\xE3\xDA\xF1\xF6\x14\x41\xCA\x8C\xC6\xCE\xF2\x82\xFB\xB2\xD4\xE4\xFF\x3C\x4F\xF0\x17\xF8\x16\xF9\x10\xFE\x85\xF9\xC8\xFC\xE4\xD8\xF1\xC8\xF8\x94\x1B\xCF\xD9\xB2\x78\x2E\x72\xBE\xF9\x4B\xE6\xF2\xED\xEA\x96\xF9\x42\xF8\xE9\xF4\x95\xF7\x45\x65\xE2\xC6\x04\x56\x8D\x8D\xF9\x4F\xFA\xE8\x01\xD9\x77\x07\x12\xE4\xC3\xEF\xD0\xF8\xF6\x30\xFD\xF6\x2E\xFF\xD1\x02\xD1\xAB\xDE\xC4\xED\x89\x02\x30\xF9\x35\xFB\x2F\xFD\x99\xFB\xBE\xE2\xE6\xE6\xA5\xFA\xA4\x16\xF5\x5A\xF8\x20\xF8\x99\xF3\xBE\x2A\xE6\xEA\xF2\x86\xF9\xBC\xF8\x83\x01\x00\xFE\x95\xFB\xC8\xF9\xE2\xF4\xF0\xA2\x07\x41\xCB\x26\xC7\x5C\x9B\xFF\xDF\x7C\xD7\xE5\xD9\xCD\xAA\xF8\xA9\xF9\x29\xFB\x2A\xFB\xA4\xB0\xC7\xF9\x0B\x10\x9E\xB8\x26\xD1\xC5\x75\x12\xD0\xF7\x2B\x12\x51\xC2\x5D\xC5\x48\x32\x56\x4C\x1A\xB3\xD1\xB2\x93\x9D\xF7\x94\xD7\xDD\xDC\xF3\xB4\x41\xDE\xF8\x79\xF8\x38\xFC\x9E\xFE\xA4\xC1\x49\x2B\x24\x6D\xC5\xE7\xC4\xFB\x0D\x3E\xFB\x6B\x0B\xCF\xEB\x54\x3D\xF3\x8E\xE9\x7A\xC6\x2C\x50\xC1\x0A\x76\xF9\x20\x8D\x22\xB0\xC9\xDB\xF9\x3F\xF7\x64\xFA\x14\xFF\x8C\xFD\xBF\xFB\xE8\x9B\xF0\xAD\xF9\x49\xCB\x4E\xF9\x22\x83\xAE\xED\x09\x3B\xBF\x6B\xED\xDA\xF9\x28\xF9\x90\xF9\x37\xFB\xA4\xF8\xC9\xE5\xE9\xF1\x23\x28\xFA\x48\xCA\x95\xFB\x30\xBC\x73\xD1\x54\xD1\x28\xBF\x62\xF2\xEA\x28\xE1\xF0\xDE\x41\x01\x0F\x00\xD4\xF0\x5E\xE6\xA5\x91\x8A\xAB\x84\x72\xED\xA9\xF2\x2A\x13\x14\x66\xDD\xFC\xCF\xFF\xF5\x45\xFA\xD5\xD4\xCF\x1F\xA2\x0B\x07\x11\x87\xC8\x95\xF8\x11\x81\x42\x68\xF7\xD8\xF0\xAA\xF1\xD5\xE8\x7F\xF2\xAE\xA7\x02\x7C\x01\x00\xE6\x4A\xD9\xE4\xE0\x07\x10\x5A\x28\x4E\x98\x0C\x0E\xF1\x9F\x1F\x6A\x17\xDD\x9F\xE7\xDE\xD7\xF6\x63\x5D\xFA\xB0\xD6\xB3\xD2\xBB\xE8\x00\x01\x75\xA4\x5F\xC1\x95\xF1\xD8\x02\x03\x3E\x01\x80\xE0\xDF\xCC\xD2\x0E\x8B\x4E\xDF\xDC\xEE\xC8\xF3\x5F\x33\x4E\xE3\x60\x3F\xFA\x0D\x0D\x29\xF5\xF0\xFA\x49\xCA\xB3\xD1\x26\xDE\x20\x00\x38\xEA\xEA\xD6\xE6\xB2\x15\x29\x36\x3F\xDF\xF2\xC7\xB0\xF8\xD8\xEF\x95\xF7\xBF\x87\xD8\x73\xE6\x4D\xDA\xF3\xE1\xDE\x15\x9E\x72\x9E\xEF\xF3\xDA\x38\x83\xFB\x36\x09\xFF\x13\xB3\x58\x7E\x2C\x6E\xD8\xF6\x81\x02\x81\x01\xCA\xF8\x00\xD9\xA8\xC3\xC0\xC1\x08\x2A\xCD\x8F\xE9\x48\xCA\xC2\xCC\xF4\xE2\x3D\x7F\xD9\xF6\xC7\x15\xCF\xBF\x1D\x9C\x44\xD5\x0E\x6D\x64\xB2\xFA\xDA\xFB\x5F\xEC\xF6\xA7\x02\x83\x01\xDE\xFA\x70\xFE\xB7\xF1\x88\xE4\x04\x35\xAD\x8F\x1F\x70\x1E\x43\x00\xDC\xE3\x13\xF7\x3B\xFD\xCA\xC9\xEE\xB0\x00\x4C\xE9\x6E\xEE\xB5\xCF\x10\x00\x37\xE0\x11\xE3\xA8\xAF\x12\xD6\xFB\xF5\xF2\x0F\xDF\xE4\x83\x19\x59\x72\xF1\x00\x56\xCD\x85\x00\xB8\xE4\x29\x87\x76\xE4\x0A\x8C\xC9\xCB\xCD\xC4\x1C\x5A\xFA\x05\xEB\x04\xD8\xEE\x11\xDE\xFB\x9B\xDA\x2F\x02\xE8\xEF\xFA\x64\xF7\x1A\xE8\x48\xA7\x27\x5E\xB8\xE0\xF7\xF0\xE6\x11\x8B\xDB\xE4\x96\xD9\x2C\xFE\xE5\xC5\x2A\xE1\xB2\xED\xFA\x5D\xE4\x72\xDB\x70\xF9\xB1\xF3\x58\xE9\xAE\xC3\xE9\xF7\xD4\xD0\xF1\x7E\xF2\x05\xFA\x55\xFE\x96\xE2\xC8\xF0\xE5\x90\xF6\xCF\xF2\x89\xF6\xB8\xF2\x6F\xFB\x30\xBF\xB7\xD8\xEC\xC4\xF2\x7F\xF6\xA3\xF1\xE0\xF6\xC7\xEB\x30\xBD\xD2\xD3\xED\xFC\xEE\xBE\xF4\xFB\xEC\xB0\xF2\xFF\xE5\xB2\xFE\xBF\xE7\xEC\xA6\xF2\xBB\xEB\x8D\xEF\xA0\x1F\xB7\xE0\x99\xFD\x6B\xD0\xB3\x82\xEC\xBF\xD9\x37\x02\x9B\x47\x48\xF7\xDD\xC6\x4B\xC4\xB3\x87\xFC\x07\xDB\x04\xFD\xEE\xF6\x26\xF9\xAA\xE8\xD2\xEB\xEA\x9E\xF3\xAD\xF5\xBA\xF4\x85\xFB\x5D\xA8\xB4\xE6\xDA\xCA\xED\x97\xFC\xE7\xF5\x0C\xFF\x5E\xF3\xC3\xF8\x67\xFB\x1F\x5E\xF8\xBC\xF5\x20\xFD\xAA\xF6\x88\xFF\x6A\xF4\xE2", +"\xF9\xDA\xE6\xEC\xDB\xF6\xF7\xF4\xFD\xEA\x8A\xF9\x91\x18\xCB\xDE\xDC\xFA\xE6\x80\xEC\x6D\xC7\xE1\xEB\x1D\x75\xC0\xEC\x72\xFF\x66\xD7\xB3\xD3\xFA\xF3\xC8\x1C\xFF\xCA\xD2\xC7\xF5\xBC\xEC\xD8\xC0\xE4\x8D\xFC\xAC\xF5\x07\xFE\x90\xF9\x62\xF6\xB1\xF3\xD8\xCE\xE3\xB3\xF5\x12\xF7\x5A\xF7\xA0\xF0\x11\xF5\xA8\xF9\xD5\xC7\xEA\xD2\xF6\x50\xFC\x8C\xF1\x88\xFE\x06\xF3\xE2\xFB\xC1\xE5\xF8\xF2\xF1\x27\xFC\xE7\xF8\x87\xFD\x3F\x79\x9B\xE1\xF0\xCD\xB4\xC5\xCA\xE6\xD8\x8D\xE3\x29\xD0\x76\xFD\x8C\xEA\xE2\xCA\xD9\xA4\xF1\xCF\xCE\x36\xFD\xF9\xF6\xCD\xFC\xE0\xEB\xCE\xCE\xF8\xCD\xF3\x45\xF6\x3C\xFD\x9D\xFB\xC2\xF4\xE7\xFB\xDB\xD7\xEC\xFD\xF6\xD6\xF3\xD4\xF0\x76\xF3\x35\xFA\x9D\xED\xCD\xFD\xE2\x88\xF4\xEC\xF1\xD8\xF0\x25\xF3\x71\xF6\x89\xED\xDC\xD8\xE2\x8F\xF7\x89\xF7\xC8\xF7\x84\xF1\x9F\xDB\x67\xEA\xCA\x1B\x4E\xD7\x45\x4E\xFA\xB7\xF9\x40\xDD\xFB\xD9\x4E\x53\xC9\xF9\xF8\x87\xFA\x5C\x34\xB9\xF5\xE8\xE3\x68\xF2\x82\xE1\xF5\xF6\x9C\xBB\xED\x45\xFC\x51\xFE\xA9\xFE\xC2\xF8\xEA\xF9\xD8\xEA\xFA\x9B\xF6\xD9\xF2\x9F\xEC\xE1\xF6\x22\xF0\xB2\xE9\xDC\xC7\xE6\xD4\xFC\x86\xFC\x2B\xFE\x89\xF8\xCB\xF8\xB2\xFD\xDA\xC7\xEB\xEB\xF4\xB2\xF7\x61\x22\xA6\xF9\xF2\xE8\xE0\xE8\xF6\xED\x6C\x4A\xFD\x1C\xE8\x66\xFF\x14\xF0\xC2\xF1\xA2\xF2\xF0\xD1\xFB\xCF\xFD\x26\xF5\xD3\xF2\xDF\xF7\xDA\xF0\xB8\xF9\xF6\xEE\xDE\x9E\xF6\x89\xF6\x30\xF6\x94\xFC\xD0\xF0\xEE\xE2\xCF\xC7\xFA\xE6\xF3\x89\xF6\xF4\xF2\xB9\xF9\x5F\xFF\xD8\xCA\x8E\xC4\x3D\x73\xFA\xCA\xEB\xC7\xF9\x84\xCB\xDD\xFD\xC3\xE3\xE4\xDC\xE6\xBF\xFC\x4A\xF5\x20\xFF\x36\xF6\x6E\xF5\xE1\xE4\xF5\xD1\xF8\xF5\xFC\x7A\xFD\x7D\xFE\x80\xF3\xD5\xF4\xA0\xED\xF5\xED\xE8\xAF\xFD\x8A\xF5\x58\xFD\x8C\xF1\x18\xF3\xA3\xEA\xCC\xF5\xE8\x8C\xF3\xF6\xF1\x6E\xEF\x96\xFC\xD1\x1D\xE5\xF5\xD9\xEA\xF7\xE0\xFC\x47\x1F\x5E\xD9\x4B\xD8\x62\x0F\xD2\xC4\x7A\x31\xB4\xF3\xF4\x49\xCB\x9E\xF5\x42\x04\xE2\xF3\xC6\xFC\xF4\xFE\xF8\xF0\xFC\x40\xFC\x39\xFF\xC6\xFB\xC8\xF3\x1D\x56\xF3\xC0\xE7\xD2\xFD\x15\xFD\x90\xFD\xAA\xFB\xE4\xF8\xED\xEC\xF5\xDA\xFB\xAE\xFD\xDC\xF2\x58\xFE\x77\xF2\xD6\xFE\x8E\xF4\xF5\xF0\xE3\xDA\xF2\xE7\xF2\x5C\xFF\xA2\xFD\xE9\xFD\xE8\xF7\xF9\xEE\xF8\xD4\xE8\x69\xDB\xD4\x17\x34\x34\xB7\xFF\xEF\xD3\x7A\xC4\xB5\x94\xFD\x6F\xF4\xA5\xDB\xF4\xED\x8E\xF9\xE9\xEE\xF7\xE4\x6B\x70\xFD\x47\x1E\xBA\xF7\xD2\xFD\xD4\xFD\xF1\xF7\xF7\xED\x8D\x83\xF1\x01\x02\x2A\xF4\xD3\xF0\x5D\xFF\xB4\xEC\xF2\xEC\xDA\x99\xDA\x4F\xFC\x94\xFC\xD5\xF2\xE5\xFC\xA8\xEC\xF9\xCE\xEA\xAE\xFE\x90\xF4\x98\xFF\x8D\xF6\xE9\xE8\x8C\xE3\xFB\xCA\x73\x09\xE2\x2F\x25\xC9\xEF\x5F\xFD\xF2\xE1\xD8\xF5\xC0\xFC\x3C\x5D\xDA\x32\xDA\x6B\xF5\xDD\xFA\xA6\xF8\xD0\xED\xD8\xF3\xED\xF2\xFD\xF9\xF3\xA4\xF6\x9F\xF6\xEF\xF7\xF4\x00\xFC\xC0\x00\x02\xFF\x5E\xF3\xA6\xF5\x9F\xF8\x29\xF1\xB5\xEC\xCA\xDF\xF8\x82\xFD\x03\xFE\x8E\xF1\xA1\xFE\xE0\xF2\xEE\xE8\xF4\xE4\xFB\xA8\xFC\x0B\xFE\x95\xF4\x02\xF4\x65\xF7\x7C\xEA\x6B\xC6\x09\x6C\xFE\x19\x6D\x3F\xCF\xDB\xFB\xF3\xF9\xB6\xFC\x79\x35\xB5\xA7\xDC\x41\xFF\xD1\xFC\xDC\xF4\xC7\xF9\x8A\xED\xAC\xC9\xE9\xA0\xEF\x69\xEE\xBE\xFC\x91\xFF\x1B\xF8\xEF\xF7\xCB\xD5\xFB\x98\xFC\xFC\xFC\x0D\xFE\xBF\xFA\x22\xF0\xF0\xF6\xFC\xE7\xD6\xDD\xFD\xE6\xFE\x17\xEF\xCA\xFA\x36\xFD\xF2\xF4\xCD\xEF\xFC\xB6\xF3\x31\xFF\x02\xF1\xD9\xFD\xA4\xE1\x5C\xE3\xFB\xFF\x2B\x0C\xF0\xEE\x91\x4A\xFF\x9E\xDA\xE6\x7B\xFC\xE9\xEF\xC0\xF6\xA0\xF5\x9E\x7F\x44\x0F\x8B\x6D\xCE\x59\xC6\x7E\x6B\x7E\x76\x7F\xF5\x79\x6F\x7E\x9E\x7E\x71\x7E\xA0\x7E\xF4\x7E\xAA\x7F\xF6\x7E\xDC\x7F\x7F\x7F\x81\x7A\x81\x7F\xB6\x7A\x7C\x7E\xB8\x7A\xB4\x7F\x7F\x7E\xB6\x7F\x81\x7E\x50\x79\x83\x7E\xBA\x7F\x05\x7F\xF3\x7A\x89\x7B\xF5\x7A\xBF\x7F\x8A\x7E\x4D\x7E\x64\x7F\x95\x7F\x24\x80\x97\x7F\x49\x78\x09\x01\x93\x79\x48\x65\xF1\x79\x03\x01\x44\x7F\x82\x7C\x46\x7F\x79\x78\xD7\x7F\x7B\x78\xD9\x7F\x1F\x7F\xD3\x7E\x1E\x7F\xF5\x7E\x20\x7F\x4B\x7B\xB1\x7F\x84\x7F\x89\x7B\x50\x7B\x18\x80\x81\x79\xB7\x7F\x1B\x80\xB9\x7F\x54\x79\x89\x7B\x24\x7B\xBD\x7F\x08\x7F\xE9\x7F\x3A\x76\xF1\x7F\x44\x78\xF3\x7F\xE9\x74\x5D\x6E\x71\x78\x27\x01\xF8\x73\x27\x6B\x79\x69\x2F\x80\x95\x7C\x16\x7F\xAA\x78\x33\x80\xAC\x78\x35\x80\x39\x80\x37\x80\xAC\x7F\x43\x0F\xAE\x7F\xB0\x7F\x89\x7B\xB2\x7F\x16\x80\x7D\x79\xB5\x7F\x41\x80\x1A\x80\x85\x79\xDE\x7E\x88\x7B\x4A\x80\x47\x80\x90\x7F\x5A", +"\x7B\x92\x7F\x92\x7A\x94\x7F\x39\x7A\xA0\x78\xAB\x6D\x61\x21\x6A\x7E\x5C\x0A\x56\x80\xA7\x7C\x3E\x7C\xD6\x7F\x18\x7F\xD8\x7F\x4B\x7A\x55\x76\x36\x80\x7D\x7F\x10\x80\xAD\x7F\x12\x80\xAF\x7F\x14\x80\x57\x7A\xB3\x7F\x66\x80\x40\x80\x5E\x7A\x01\x7F\xE8\x7F\x27\x80\x65\x78\xEB\x7F\xB3\x7E\xED\x7F\x8C\x7B\xEF\x7F\x8E\x7B\x4C\x80\x8E\x79\x26\x80\x87\x7F\x13\x6E\xA3\x6E\xD3\x7F\xBE\x79\xDB\x69\xB8\x6D\x27\x01\xC7\x73\x0A\x7E\xED\x7E\xA4\x7F\xC9\x7E\xA6\x7F\xCB\x7E\x9F\x7E\x7B\x7A\x73\x7E\x82\x80\xDB\x7F\xFD\x79\x50\x7F\xFD\x39\x52\x7F\xD6\x7E\x54\x7F\xFD\x7E\x56\x7F\xFF\x7E\xDB\x7E\x4E\x79\x8F\x80\x9B\x80\xC5\x6D\xDF\x7E\x8E\x7F\x58\x7B\x6F\x80\x57\x7E\x71\x80\x5C\x7B\xF7\x78\x58\x75\x09\x01\x26\x7C\x57\x7D\xD2\x7F\x9C\x77\x58\x80\x7D\x80\x48\x7F\x19\x7F\x4A\x7F\x3C\x79\x1C\x7F\xAE\x80\xB2\x7A\xDD\x7F\x47\x7E\xDF\x7F\x49\x7E\xE1\x7F\x4B\x7E\xE3\x7F\x4A\x79\xE5\x7F\x90\x80\xFE\x4F\xBA\x80\x50\x77\x19\x6D\xBD\x80\xEC\x7F\x8F\x7F\xEE\x7F\x91\x7F\xF0\x7F\x93\x7F\xC2\x77\x9A\x80\xE0\x80\x9C\x80\x21\x6E\xA6\x80\x98\x6E\x41\x65\xC7\x80\x80\x08\x05\x80\x79\x80\x07\x80\x1C\x7A\x09\x80\x79\x7A\xAA\x80\xDE\x7A\x0D\x80\x46\x7E\xAB\x7F\x84\x80\x60\x80\x86\x80\x62\x80\x4A\x80\x64\x80\x24\x7F\x86\x7A\x26\x7F\xBB\x7A\x8A\x7F\x51\x7E\x8C\x7F\x56\x7B\xBE\x80\x55\x7E\xC0\x80\xE3\x7E\xC2\x80\x59\x7E\x73\x80\x94\x7A\x6B\x7A\x63\x79\x27\x01\xEE\x79\x2C\x80\xC9\x80\xA4\x80\x9F\x80\x78\x7F\x03\x72\xA8\x7F\xCE\x7E\x11\x80\xA4\x77\x5F\x80\x3F\x0F\x61\x80\x88\x80\x4E\x7B\x3E\x80\x86\x7F\xEB\x80\xC5\x6D\x89\x7F\x59\x7F\x29\x7F\x5B\x7F\x92\x80\x5D\x7F\x94\x80\xB5\x7E\x96\x80\xB7\x7E\x98\x80\xB8\x79\xEA\x80\x8F\x77\x81\x67\x92\x79\xFB\x64\x78\x80\xB0\x76\xEE\x80\x77\x7F\xA8\x80\xF1\x7E\xF9\x80\xCF\x7C\xAC\x80\x5D\x80\x83\x80\xAF\x80\xD4\x80\xB4\x7A\x3B\x80\x63\x80\x3D\x80\x4A\x80\x3F\x80\x06\x81\x80\x7E\x08\x81\xB8\x7F\x0A\x81\x53\x7E\x0C\x81\xE1\x7E\x0E\x81\xBE\x7F\x10\x81\xE5\x7E\x12\x81\x5E\x7B\xEB\x79\xCB\x78\xCA\x80\x6F\x7A\xC0\x79\xFF\x00\xC2\x79\xF3\x80\x3D\x81\x9E\x80\x9D\x7F\x3D\x7E\x32\x80\x7E\x80\x34\x80\x80\x80\xA1\x79\x46\x81\xD3\x80\x20\x81\xDE\x7F\xFA\x7E\x53\x7F\x29\x7A\x04\x81\x7E\x7E\x4F\x81\x19\x80\x51\x81\x43\x80\x53\x81\x04\x7F\x55\x81\xBC\x7F\x57\x81\x49\x80\xDD\x80\x4B\x80\xE8\x80\xF2\x7F\x37\x81\xF6\x7D\x41\x65\x17\x81\x00\x00\x38\x7C\x98\x7F\x7D\x69\x7A\x80\xB8\x7C\xCB\x80\xAB\x78\x0B\x53\xCF\x80\xA0\x79\xD1\x80\x4D\x7F\x38\x80\x0E\x80\x3A\x80\x48\x7E\x83\x7F\x4A\x7E\xE9\x7A\xDA\x80\xEB\x7A\xB8\x80\xED\x7A\x86\x7B\x34\x78\x6C\x80\x81\x81\x6E\x80\xE5\x80\x70\x80\xE7\x80\x72\x80\xE9\x80\x74\x80\x2C\x79\x14\x7A\x3C\x0F\x16\x7A\x4C\x7C\x12\x7F\x8C\x81\xF5\x80\x65\x7E\x9D\x7E\xF8\x80\x0B\x80\xAB\x80\x7B\x7F\xAD\x80\x95\x81\x22\x81\x3B\x0F\x24\x81\x7B\x7E\x89\x80\x65\x80\x5B\x7A\x89\x7B\x2B\x81\x85\x7B\x5A\x7F\x87\x7B\x5C\x7F\xE0\x79\x57\x79\x20\x80\x60\x7F\x09\x7F\x62\x7F\x81\x81\xBA\x7E\x41\x6E\x2B\x6C\x95\x7B\xD4\x7F\x4A\x7C\x42\x7A\x98\x7E\x13\x7F\xB3\x81\x34\x7E\x17\x7F\xCD\x80\x7F\x80\x1A\x7F\xD0\x80\x4C\x7F\xA3\x79\x6F\x81\x85\x80\xF9\x7E\x00\x7A\x22\x7F\x74\x81\x55\x7F\x25\x7F\x57\x7F\x27\x7F\x2C\x81\x8B\x7F\x2E\x81\x8D\x7F\xE3\x80\xBF\x80\xA6\x81\xC1\x80\xA8\x81\xC3\x80\xAA\x81\x13\x81\xE0\x76\x5E\x81\x1A\x81\x67\x81\x38\x7B\xFF\x00\xC1\x7B\xAA\x7B\xA8\x6A\x19\x81\x3B\x7E\x1B\x81\x40\x81\x79\x7F\x1E\x81\xFB\x80\xB0\x80\xBB\x81\xFE\x80\x23\x81\x00\x81\x25\x81\x8A\x80\xC2\x81\x4A\x80\xC4\x81\xDC\x7E\xA1\x81\x1A\x79\xA3\x81\xBB\x80\x0B\x53\xA5\x81\x95\x80\xE6\x80\x97\x80\x83\x81\x4D\x80\x85\x81\xFC\x7D\x96\x7A\xC4\x6F\x04\x7B\x3F\x7A\x6D\x63\x9B\x7A\xE3\x71\x2C\x19\xCC\x7F\xCC\x6D\x3C\x6E\x73\x7F\x9F\x7B\x06\x80\x3E\x81\x08\x80\xB5\x81\xDC\x7A\x42\x81\xCD\x7E\x07\x82\x48\x81\x0F\x80\x47\x81\x70\x81\xD5\x80\x72\x81\xB3\x80\xE7\x81\xB5\x80\xE9\x81\xB7\x80\x58\x7F\xC5\x81\x2D\x81\xC7\x81\x2F\x81\xC9\x81\x5E\x7F\xE4\x79\xCC\x81\x4A\x80\x0A\x7F\x5B\x81\xE7\x7E\x5F\x7B\xC9\x7A\x4F\x7D\x6F\x7D\xCC\x7A\xF1\x0E\xCE\x7A\x86\x30\xFE\x7F\x9C\x7F\x00\x80\x0D\x06\x52\x6E\x2B\x82\x8F\x6F\x01\x82\x6D\x7E\x0B\x7E\x47\x7F\x0A\x80\x49\x7F\x0C\x80\x44\x81\x97\x81\x5E\x80\x0A\x82\xBD\x81\x0C\x82\xBF\x81\x26\x81\x4D\x81\x28\x81\x38\x81\xA9\x59\x11\x82\xB9", +"\x80\x13\x82\xEF\x7A\xC8\x81\xF1\x7A\xCA\x81\x4A\x80\x21\x80\x59\x81\xC0\x7F\x4B\x82\x0C\x7F\x6B\x7A\x97\x7B\xC0\x0A\xF1\x73\xB1\x7B\x44\x65\x66\x6E\x6A\x30\x9E\x7D\x22\x82\x01\x80\x9D\x10\x07\x7B\xE6\x6E\x5C\x82\x9B\x7E\x5E\x82\x69\x81\xDC\x81\x6B\x81\xDE\x81\x93\x81\xE0\x81\x78\x7B\x77\x7E\x35\x82\x98\x81\xD6\x80\x9A\x81\xD8\x80\x9C\x81\xB6\x80\xE4\x7F\x9F\x81\x1F\x7B\x71\x82\x21\x7B\x73\x82\x23\x7B\x75\x82\x81\x81\x77\x82\xF4\x81\x11\x81\xF6\x81\x5C\x81\x3A\x7A\x7D\x82\xEB\x0A\x61\x6E\x85\x82\x30\x7B\xFB\x7F\x19\x36\x7D\x6E\x70\x7F\x30\x79\x41\x65\xA3\x7C\xD0\x7F\x28\x77\xD8\x81\x2E\x82\xF6\x80\x30\x82\x15\x7D\x61\x82\xB8\x81\xDF\x81\xDA\x7F\x09\x82\x37\x82\xE3\x81\x71\x81\xE5\x81\x73\x81\xB7\x7A\x75\x81\x17\x80\x77\x81\x68\x80\x79\x81\x6A\x80\x4A\x80\xE2\x80\x93\x80\xE4\x80\x19\x82\xA7\x81\x1B\x82\xA9\x81\x84\x81\xAB\x81\x93\x7B\xAB\x82\xFE\x0A\x62\x7B\x9F\x7A\x2F\x7B\xE5\x70\x49\x09\xCC\x09\x67\x7B\x28\x82\xD0\x75\x99\x6E\x27\x01\x8E\x12\x98\x6F\xF4\x80\xBA\x82\xB4\x81\x5F\x82\xB6\x81\xBE\x82\xFA\x80\x63\x82\xFC\x80\x36\x82\xE2\x81\xFF\x80\xE4\x81\x82\x7A\xE6\x81\xC8\x82\xE8\x81\x05\x81\xEA\x81\x07\x81\xEC\x81\x09\x81\xEE\x81\x0B\x81\xF0\x81\x0D\x81\xF2\x81\x0F\x81\xA6\x82\x5A\x81\xA8\x82\x4C\x82\x5D\x81\xBC\x79\x66\x81\x57\x82\xC9\x73\x29\x81\xAC\x82\x2A\x6B\xE6\x73\x9E\x7A\x6A\x7D\xB0\x6E\xA3\x2B\xA2\x7B\x39\x74\x86\x7C\x25\x30\x24\x7A\xAD\x63\x06\x7E\xD7\x81\x7D\x69\xCC\x71\x8B\x82\xD4\x7F\x1C\x81\x3F\x0F\x7A\x7F\xC0\x82\xBA\x81\xE1\x81\x23\x7C\x26\x83\x93\x76\x99\x81\x3C\x80\x9B\x81\x85\x7F\x9D\x81\x1D\x7B\x9D\x82\x8E\x80\x9F\x82\x6B\x80\xA1\x82\x46\x80\xA3\x82\x16\x82\xFB\x23\xA5\x82\xD5\x82\xF5\x81\x05\x78\x33\x7F\xFB\x0D\x8D\x0E\x2C\x7E\x5F\x7E\x67\x7F\x61\x7E\x30\x7E\xC4\x75\x32\x7E\xBB\x82\x39\x81\xC8\x75\x09\x01\x11\x7F\xC8\x80\x11\x66\x1F\x83\x15\x7C\x21\x83\x04\x82\x1D\x81\x32\x82\xF3\x7E\xF0\x82\x08\x82\x27\x83\x94\x82\x38\x82\x49\x81\x2B\x83\x4B\x81\x2D\x83\x27\x81\x2F\x83\xC3\x81\xDC\x80\x38\x83\xD3\x21\x02\x7F\x7B\x81\x1D\x80\x7D\x81\x1F\x80\x76\x82\x48\x82\x81\x81\x4A\x82\x32\x7F\x74\x7F\x2B\x7E\xFE\x75\x2D\x7E\x1F\x77\x44\x83\x64\x7D\xD2\x6C\x1C\x25\xDA\x81\xA9\x6D\x67\x7E\x44\x0F\x17\x05\x0B\x76\xFB\x78\x4E\x83\xD9\x81\x68\x81\xDB\x81\x60\x82\xCE\x80\x62\x82\xB9\x81\x45\x81\xD2\x80\x28\x83\x87\x83\x4D\x7F\xB2\x80\xE0\x7F\xB4\x80\xE2\x7F\x9B\x82\xDB\x80\x31\x83\x4A\x80\x65\x83\xFF\x82\x54\x81\x01\x83\x56\x81\x03\x83\x58\x81\x05\x83\x79\x82\x07\x83\x7B\x82\xE0\x76\x40\x76\xE8\x42\x42\x76\x56\x1C\x5E\x7E\x5B\x7D\x50\x82\x61\x81\x97\x7E\x62\x77\x7F\x83\xEA\x82\x78\x83\xCC\x80\x83\x83\xDD\x81\x92\x81\x4C\x7A\x92\x82\xB1\x7A\x89\x83\x64\x82\x51\x7F\x4A\x81\x02\x81\x4C\x81\x81\x81\x4E\x81\xFB\x82\x50\x81\xFD\x82\x52\x81\x95\x83\x7C\x81\x97\x83\x7E\x81\x99\x83\x80\x81\x63\x83\x7F\x43\xCE\x81\xC6\x83\x25\x3A\x4E\x80\x07\x76\x6D\x63\xFA\x6C\xBE\x7E\xFC\x6C\xC0\x7E\x12\x83\x56\x82\xDE\x82\xB2\x7B\x84\x76\xF0\x79\xCF\x67\x4F\x83\x15\x7F\x31\x80\x82\x83\xED\x82\x84\x83\xBF\x82\x91\x82\xC1\x82\x58\x83\x4F\x7F\x95\x82\xD3\x7E\x8C\x83\xD7\x80\x8E\x83\xD9\x80\x90\x83\x9E\x81\x40\x82\x12\x82\xC6\x81\xA2\x81\x35\x83\x6D\x80\x37\x83\x0E\x83\x39\x83\x6B\x83\xC9\x83\xA7\x76\x35\x81\x90\x7B\xCB\x83\x23\x6D\xE9\x7E\x65\x81\x67\x79\xD8\x83\x80\x83\xD5\x7F\x90\x81\xFB\x23\xB0\x83\x81\x80\x8A\x83\xE2\x83\x40\x7A\x57\x83\x2A\x83\x97\x82\x2C\x83\x99\x82\x2E\x83\xEA\x83\x30\x83\xEC\x83\x70\x82\xEE\x83\x14\x82\xF0\x83\xA4\x81\xF2\x83\x6D\x82\x19\x6D\x3A\x83\x34\x81\x1C\x82\x99\x80\xD8\x82\xCF\x7D\x0E\x7F\x9D\x10\x10\x7F\x3C\x81\x09\x01\xD9\x83\x45\x7F\x8C\x82\xDC\x83\x31\x82\xB7\x81\xEF\x82\x86\x83\xB5\x83\x88\x83\x59\x83\xC4\x82\x39\x82\xC6\x82\x3B\x82\xF8\x82\x3D\x82\xFA\x82\x3F\x82\xEB\x81\x41\x82\xED\x81\x43\x82\xEF\x81\xD1\x82\xF1\x81\xD3\x82\xF3\x81\x3B\x83\xA7\x82\x3D\x83\x6F\x83\x5C\x7E\x41\x83\x8E\x7E\x43\x83\x39\x7F\x02\x76\x3B\x7F\x66\x72\x35\x7E\x41\x65\x3F\x7F\xA4\x7A\xD1\x7F\xAA\x83\x0B\x83\xDE\x82\x22\x83\x3B\x0F\x24\x83\xE0\x83\x29\x83\xB3\x83\x2F\x84\xF4\x82\xC5\x82\xF6\x82\xC7\x82\x15\x80\xC9\x82\x8B\x80\xCB\x82\x8D\x80\x93\x83\xDF\x80\x18\x84\x7C\x6D\xD0\x82\x30\x81\xD2\x82\x32\x81\x1A\x82\x1B\x84\xD6\x82\x1D", +"\x82\x1E\x84\x4A\x80\x73\x83\x24\x80\x69\x7F\x6D\x0C\x6B\x7F\x80\x82\x58\x77\x0F\x0C\xFD\x7F\xC1\x7E\xA5\x83\x89\x6D\x3C\x0F\x60\x77\xFF\x81\x43\x0F\x97\x79\x02\x01\x25\x84\x30\x80\x27\x84\x59\x80\x6A\x81\x5B\x80\x6C\x81\x94\x81\x07\x84\x50\x7A\xE4\x83\xB6\x83\x5C\x83\xB8\x83\x5E\x83\x6B\x82\x60\x83\x10\x82\x62\x83\xF3\x83\x64\x83\x66\x84\x59\x6E\x69\x84\x45\x82\x31\x81\x5F\x7F\xB6\x7E\x24\x79\xC8\x83\x98\x84\x8D\x77\x1E\x82\x72\x83\x8B\x81\x92\x77\x78\x30\xE3\x82\x71\x7F\x98\x77\x3B\x7B\xA2\x7F\x52\x84\x5F\x81\x87\x84\xAD\x83\xDD\x83\xAF\x83\x85\x83\x25\x83\x06\x84\x93\x82\xE3\x83\x5A\x83\x79\x7E\xB7\x83\x81\x81\x03\x81\xF9\x82\x76\x81\xBC\x83\x78\x81\xBE\x83\x7A\x81\xC0\x83\x67\x83\xC2\x83\x69\x83\xA4\x82\xF5\x83\xA3\x84\xF5\x78\x1C\x84\x36\x81\x71\x84\x81\x81\x73\x84\x63\x83\x75\x84\x0B\x0D\xC9\x77\x78\x84\xCB\x77\x7A\x84\x6F\x6D\xB3\x82\xD4\x7F\x66\x69\xCF\x7F\xA1\x7F\x4B\x7D\x79\x69\x85\x84\x57\x80\xDB\x83\x88\x84\x8E\x82\x8A\x84\x90\x82\xB1\x83\xE1\x83\xB8\x84\x08\x84\x8F\x84\xB1\x80\xBC\x84\xF6\x83\xC7\x51\xB9\x83\xEF\x84\xBB\x83\x37\x84\xFC\x82\x39\x84\xFE\x82\x3B\x84\x00\x83\x3D\x84\x02\x83\x3F\x84\x04\x83\x41\x84\x06\x83\xD7\x82\xF7\x81\xEB\x79\x09\x78\x57\x74\x80\x6D\x22\x69\x82\x6D\xD6\x84\x0F\x78\xD8\x84\x86\x6D\x55\x82\xCD\x7F\x02\x80\x17\x78\x64\x81\x24\x84\x00\x84\x55\x84\xC5\x6F\x54\x83\xA9\x7F\xF1\x82\xA3\x7E\xBC\x81\x70\x67\x5D\x84\x13\x80\x69\x82\x0E\x82\x67\x80\x64\x84\x81\x81\x94\x83\xF8\x84\x96\x83\xFA\x84\x98\x83\xFC\x84\x9A\x83\xFE\x84\x9C\x83\x00\x85\xA9\x82\xA0\x78\xB2\x7B\x97\x6D\x03\x01\x2B\x80\x47\x65\x2D\x80\x84\x84\x12\x85\x52\x83\x23\x83\x06\x82\x56\x83\xEC\x84\xC2\x82\xF3\x82\x0B\x82\xF5\x82\x1C\x85\xF7\x82\x60\x84\xBF\x84\xCA\x82\xC1\x84\xCC\x82\xC3\x84\xCE\x82\x81\x81\x9C\x84\x74\x82\x46\x82\xF4\x7A\xCA\x84\x67\x84\xC5\x6D\x6D\x83\x2B\x85\x08\x83\x3A\x7A\x51\x80\xB8\x67\xD7\x83\xAF\x84\xFA\x81\x0C\x83\x13\x85\x84\x74\xDE\x83\x2B\x84\xB6\x84\x2D\x84\x3B\x85\xB4\x83\x17\x85\xE5\x83\xEE\x84\xCB\x84\x5B\x51\xF1\x84\x65\x85\xC6\x76\x6C\x82\x59\x6E\x6F\x82\xA0\x81\x13\x84\x72\x82\x44\x82\x4A\x85\x9E\x84\x47\x82\xA0\x84\x5B\x79\xA2\x84\x4E\x85\x15\x7E\xFA\x83\xDF\x6C\x76\x80\x5D\x28\x23\x84\x06\x01\xE1\x84\x7B\x80\x8F\x81\x5A\x80\x91\x81\xB5\x84\x58\x84\xB7\x84\x5A\x84\xB9\x84\x30\x84\x5B\x83\x0B\x84\x5D\x83\x0D\x84\x5F\x83\x0F\x84\x61\x83\x92\x83\x21\x85\x9A\x84\x61\x79\x49\x85\xA2\x82\x4B\x85\xCB\x81\x74\x85\x61\x7F\xF8\x83\xB9\x7E\x79\x85\xB4\x6C\xF9\x81\x02\x82\xFB\x81\x4A\x7C\x6C\x7E\xA3\x80\xA0\x85\x5C\x0A\x7F\x85\x8E\x81\xE3\x84\xB2\x84\x29\x84\xEE\x82\x43\x81\x2C\x84\x62\x85\x6E\x81\x61\x85\x09\x84\x7C\x7B\x3A\x82\x8D\x83\x3C\x82\x8F\x83\x3E\x82\x9C\x82\x11\x84\x6D\x85\x42\x82\xEF\x83\x70\x85\x96\x85\x72\x85\x4C\x85\x99\x85\xCD\x81\x9B\x85\x4A\x80\xDF\x7D\xC5\x80\xC0\x6D\x7D\x85\x03\x01\xA7\x85\xB5\x7D\x33\x7D\xF7\x80\xAB\x85\x5C\x85\xAD\x85\x5E\x85\xAF\x85\x2E\x84\x88\x85\x5C\x84\x31\x84\x5E\x84\x33\x84\x41\x85\x35\x84\xC0\x84\xF4\x84\xBD\x83\xF6\x84\xBF\x83\x23\x85\xC1\x83\x25\x85\xC3\x83\x27\x85\xC5\x83\x68\x85\x50\x85\x70\x84\x01\x85\x3A\x7A\x9F\x85\x5D\x82\xDB\x84\xF0\x80\x32\x79\x56\x85\x1E\x83\x35\x85\xCE\x85\xBD\x82\xD0\x85\x33\x82\x39\x85\xBA\x84\x18\x85\x66\x82\x1A\x85\xD7\x85\x3F\x85\x5F\x84\xC0\x81\x61\x84\x0F\x82\x81\x81\x6C\x85\x9E\x82\x6E\x85\xA0\x82\xBE\x85\x36\x83\x97\x85\x6A\x83\xC2\x85\x49\x82\x76\x85\xDE\x7D\x9D\x85\x49\x83\x3C\x0F\x64\x79\x90\x02\x10\x85\x7E\x85\xF3\x85\xBC\x82\xA7\x7F\x15\x85\x1F\x81\x89\x85\xF2\x82\xB1\x85\x3A\x85\x0A\x52\x64\x85\x77\x85\x9A\x75\x67\x85\x22\x86\x9F\x75\x95\x84\x03\x86\x97\x84\x25\x86\x3E\x4E\x93\x85\x2D\x7E\x95\x85\x09\x86\xC0\x85\x98\x85\x33\x81\xA1\x84\xC4\x85\xCF\x81\x10\x86\x4D\x84\xE4\x6D\x3B\x81\x1D\x83\xE0\x84\x17\x86\xEC\x82\xCF\x85\xB4\x84\xDF\x83\xE8\x84\x59\x84\xD1\x79\x1E\x86\xF9\x85\x63\x85\x91\x84\xBD\x84\x24\x86\x59\x6E\xF3\x84\xB9\x85\x38\x84\xED\x83\xBC\x85\x14\x84\x08\x86\xF1\x83\x0A\x86\xC9\x84\x0C\x86\x6C\x83\x0E\x86\x61\x79\xD0\x81\x6B\x7A\xEC\x85\x20\x83\x9F\x80\x61\x81\x63\x81\xF1\x85\x3B\x86\xAB\x83\x81\x83\xE4\x84\xAE\x83\x8F\x82\x04\x84\x6D\x81\xD4\x85\xEB\x84\x45\x86\x90\x84\x8B\x85\x92\x84\x8D\x85\x94", +"\x84\x8F\x85\x96\x84\x91\x85\xEF\x84\x22\x85\xBD\x85\x3C\x84\x6A\x84\x3E\x84\x6C\x84\xD4\x82\x6E\x84\x3C\x83\xE9\x85\x2C\x85\x2C\x79\xFE\x6D\x6A\x34\x15\x86\xCA\x85\x3C\x86\x8D\x82\x65\x86\xE6\x84\x67\x86\x8C\x84\xEA\x84\x8E\x84\x6B\x86\xED\x84\x47\x86\xEF\x84\xBE\x84\xDB\x85\x43\x85\xDD\x85\xC2\x84\xDF\x85\xC4\x84\xE1\x85\xC6\x84\xE3\x85\xC8\x84\xEF\x84\x1A\x84\x33\x86\xCD\x84\xF9\x83\xA5\x84\x42\x83\xEE\x7C\x52\x7D\x44\x0F\xAF\x81\xC9\x85\x34\x85\x62\x86\x01\x84\x82\x85\x03\x84\x84\x85\x41\x86\x86\x85\x43\x86\x5B\x84\x3D\x85\x1B\x85\x87\x80\x1D\x85\xC1\x81\x1F\x85\x42\x80\x47\x85\xEF\x84\x2E\x86\x52\x86\x30\x86\x0B\x86\x32\x86\x75\x85\x34\x86\xEF\x84\x59\x86\xF8\x81\x0A\x83\xB0\x84\xD4\x81\x61\x81\xD6\x81\xA9\x83\xF2\x85\xA9\x86\x5A\x85\xE8\x67\xF6\x85\x55\x83\xAE\x85\xB2\x85\xB0\x86\xD5\x85\xB2\x86\xFD\x85\xB4\x86\x40\x85\x00\x86\x42\x85\x62\x84\x44\x85\x20\x85\x74\x86\x2C\x86\x42\x83\xBB\x86\x16\x84\x53\x86\x9C\x86\x4D\x85\x59\x6E\xE8\x85\x1D\x84\xEA\x85\xA0\x78\x5B\x86\x50\x83\x9F\x80\xBC\x72\x40\x7F\xB8\x82\xCB\x86\x53\x84\xF9\x7B\x36\x85\x56\x84\x38\x85\xD1\x86\x1F\x86\x8B\x86\x80\x7A\x3E\x85\xD7\x86\xFF\x85\x6A\x82\xBA\x83\x6A\x85\x61\x79\x04\x86\x32\x83\x06\x86\x34\x83\x51\x86\xE2\x86\xBD\x86\x54\x86\xBF\x86\x9A\x85\x9F\x86\x9C\x85\xA1\x86\x47\x84\xFD\x7D\xED\x71\xCC\x85\x7A\x6E\x24\x82\xA8\x04\x37\x6E\xAA\x84\xB4\x82\xA2\x7A\x5A\x82\x00\x82\x57\x85\xA0\x85\x59\x85\xF4\x86\x14\x85\x2A\x84\xD1\x85\x85\x85\x5F\x85\x8D\x84\xFA\x86\xB3\x86\x01\x81\x48\x86\x93\x84\xFF\x86\x27\x86\xEF\x84\x02\x87\x65\x84\x33\x83\xCF\x82\x15\x82\x68\x85\x18\x82\x7A\x86\x40\x84\x7C\x86\x42\x84\x7E\x86\x52\x85\xA0\x78\x20\x82\x7F\x82\xFA\x7F\x6D\x63\x4B\x6E\x30\x0C\x3A\x19\x8B\x01\xDA\x84\xED\x86\x59\x82\xAD\x84\xDF\x84\x77\x6A\xCB\x85\xAE\x82\xAA\x86\x89\x84\x83\x85\x40\x86\x05\x84\x24\x87\xF9\x86\x8A\x86\xB3\x85\x32\x84\xB5\x85\x34\x84\xB7\x85\x36\x84\x4C\x86\xF5\x84\x4E\x86\x3A\x84\x76\x86\xF9\x84\x78\x86\xFB\x84\x35\x87\xFD\x84\x37\x87\xFF\x84\x39\x87\x9E\x83\xDA\x7D\xC4\x7F\x9E\x09\x12\x87\x91\x6E\x6D\x63\x82\x82\x54\x15\x03\x7B\x4F\x82\x7E\x84\x44\x0F\x88\x82\x3C\x7B\xFF\x83\xCC\x86\x1F\x87\x5B\x85\x3F\x86\x5D\x85\x23\x87\xD3\x85\x60\x85\xB1\x86\x67\x82\xFB\x86\x28\x87\x90\x86\x49\x86\x61\x79\x4B\x86\x91\x83\xBA\x85\x05\x86\x4F\x86\x6F\x85\x77\x86\x9D\x84\x6B\x84\x9F\x84\x0A\x87\xC3\x85\x0C\x87\xC5\x85\x36\x86\x3A\x6D\xDA\x82\xC0\x0E\xDC\x82\xFF\x7F\xD4\x83\x31\x7B\x32\x3F\xB2\x82\x17\x87\xEE\x85\x3C\x0F\xB6\x82\xDE\x84\x51\x84\xF1\x86\xC6\x86\x03\x82\xF4\x85\x19\x86\x21\x87\xF7\x85\xF7\x86\x8D\x86\x7E\x87\xD4\x86\x80\x87\x27\x87\x0D\x82\xB6\x86\x8C\x80\xB8\x86\x1C\x80\x45\x80\xBC\x86\x8E\x87\x73\x85\x90\x87\x0D\x86\xC1\x86\x68\x85\xC3\x86\x68\x87\x68\x7F\x98\x87\xD3\x83\x37\x7B\x65\x7B\xEA\x56\xB4\x04\x94\x6E\x0C\x85\x29\x82\x3C\x0F\x6B\x7B\xE7\x82\x4B\x65\x6E\x7B\x27\x01\x4A\x87\x71\x87\xA5\x7F\xA7\x87\xA9\x80\xA9\x87\xD0\x86\xD2\x85\xD2\x86\x4E\x7F\x6A\x86\x1C\x86\x96\x82\xB4\x85\xE7\x83\xB6\x85\xE9\x83\xB8\x85\x87\x87\x4D\x86\x12\x84\x8A\x87\x07\x86\x8C\x87\x71\x85\xB8\x87\xC1\x85\xBA\x87\x56\x86\xBC\x87\x2A\x86\xCA\x83\x0E\x87\x66\x7F\x94\x7B\xA9\x86\x96\x87\x99\x7B\xCC\x7C\x19\x7C\x19\x83\xF8\x71\xD8\x09\xB1\x6E\x94\x77\x11\x83\xA4\x83\x18\x66\x2F\x71\x06\x01\x97\x6F\x03\x7E\xE6\x70\x63\x75\xD7\x62\x10\x72\x7D\x74\x4E\x82\xCC\x67\xC0\x6F\x31\x6C\x03\x88\x7A\x83\x97\x69\x09\x01\x8A\x00\xB6\x7B\x0F\x85\xF3\x87\x09\x88\x6A\x13\x27\x33\x6D\x2F\x45\x70\xEE\x6C\x27\x01\x8B\x00\x56\x7D\x02\x72\x80\x85\xF7\x20\xBE\x53\x0E\x05\xEA\x68\x90\x2F\xB7\x6D\x42\x7D\x03\x01\x1C\x88\x78\x75\x11\x70\xB9\x18\x21\x88\x79\x00\xC9\x07\xC5\x2F\x29\x18\x08\x85\xE7\x71\xAD\x6C\x1C\x83\xAE\x84\x7D\x69\x05\x6D\xEC\x86\xFB\x81\x5C\x0A\xE3\x00\xD3\x81\x24\x57\x0C\x59\x24\x02\xCD\x86\x87\x6F\x7A\x87\x22\x87\xAE\x86\x51\x87\x87\x85\xDA\x87\xD6\x85\x8A\x85\xDD\x87\x98\x82\xE8\x83\x9A\x82\xE1\x87\xEB\x83\xE3\x87\xBB\x85\x5D\x87\x50\x86\xE7\x87\xBF\x85\xE9\x87\x31\x86\x6D\x84\x9E\x86\x6F\x84\x9C\x78\x3E\x83\xA1\x0C\x01\x01\x35\x7F\x12\x78\x0F\x87\x63\x7D\x2D\x69\x3C\x01\x31\x7E\x33\x7E\x63\x86\xE2\x6D\x36\x7E\x34\x88\x48\x87\x07\x6D\x37\x88\xDA\x83\x87\x84\x3B", +"\x88\x3F\x7B\x3E\x88\x8C\x01\x40\x88\x82\x0B\xAC\x85\xAA\x87\xD7\x87\xF8\x86\x46\x88\x8C\x86\xDB\x87\x46\x86\x6D\x86\x29\x87\x6F\x86\x2B\x87\x71\x86\x28\x86\x73\x86\x68\x85\x75\x86\x53\x88\x5F\x87\x8D\x87\x79\x86\x8F\x87\x58\x88\xC0\x86\x92\x87\xCF\x81\x5C\x88\xAA\x0C\x5E\x88\x46\x84\xF1\x87\x62\x88\xAB\x65\x64\x88\x04\x76\x77\x83\x67\x88\x79\x76\xD1\x6B\x68\x7E\x09\x01\x7D\x83\xA3\x87\x79\x69\x6D\x88\x26\x84\x51\x83\x09\x01\x70\x88\xF2\x86\xD1\x1E\x3F\x53\x74\x88\x54\x11\x76\x88\xD6\x87\x7C\x87\xD8\x87\x96\x81\x7D\x87\x20\x86\x8F\x86\x68\x85\x91\x86\x58\x87\xDC\x85\x5A\x87\xDE\x85\x5C\x87\xF7\x84\x5E\x87\x24\x85\x60\x87\x26\x85\x62\x87\x28\x85\x64\x87\x2A\x85\x66\x87\xC2\x7F\xE8\x7E\x90\x7E\x41\x76\xB1\x74\x44\x87\xA1\x85\x96\x7E\xCF\x87\x89\x82\x11\x66\xA2\x88\x86\x84\xA4\x88\x06\x01\xA6\x88\xA5\x87\x60\x57\x72\x88\x04\x75\x18\x86\xD4\x87\xAC\x88\x16\x85\xAF\x88\x19\x85\x55\x73\x7D\x88\x4A\x88\x0C\x84\x4C\x88\x0E\x84\x4E\x88\x10\x84\x50\x88\x89\x87\x52\x88\x8B\x87\x88\x88\xE8\x87\x8A\x88\xB9\x87\x8C\x88\x0B\x87\x5A\x88\xCE\x84\xE9\x86\xAC\x81\xBC\x7E\xAD\x84\x7C\x76\x94\x30\x9E\x87\x5D\x86\xC4\x7E\x06\x01\xD0\x88\x82\x84\xCF\x67\xFD\x88\x1F\x88\x6F\x88\x3C\x88\xD6\x88\xA9\x88\x78\x87\xCE\x86\x42\x88\x77\x88\xAE\x88\x79\x88\xD3\x86\x47\x88\xD5\x86\x49\x88\x55\x87\xDE\x87\x57\x87\xE0\x87\x59\x87\xE2\x87\x5B\x87\xE4\x87\xE9\x88\xE6\x87\xEB\x88\x55\x88\xED\x88\xEA\x87\xEF\x88\x91\x87\xF1\x88\xA0\x86\xCF\x84\xEF\x84\xEC\x79\x48\x0F\xA9\x7B\x1D\x88\x9B\x7D\xBA\x08\xBF\x26\xCA\x88\x0C\x83\x00\x88\x2E\x80\xA7\x86\x51\x01\x85\x86\x01\x01\xD4\x88\x58\x85\x75\x38\x05\x89\xD3\x87\x41\x81\xD5\x87\xDC\x88\x0B\x89\xD9\x87\x7B\x88\x48\x88\xBB\x84\xB3\x88\xEE\x87\x66\x85\x2A\x87\xF2\x84\x00\x87\x2D\x7E\x2E\x87\x92\x85\x30\x87\x48\x85\x32\x87\x41\x89\x8A\x7B\x08\x87\xE4\x86\x55\x86\xEF\x84\xE7\x86\xF2\x88\x7F\x86\x93\x7B\x20\x84\x48\x0F\x22\x84\x75\x87\xCF\x88\x31\x89\x00\x00\x33\x89\x1D\x87\x35\x89\x71\x63\xAA\x88\x68\x11\xDB\x88\x1B\x86\x3E\x89\xFA\x85\xC3\x82\x65\x89\xE0\x88\x10\x89\x4B\x88\xDF\x87\x4D\x88\x14\x89\x4F\x88\x16\x89\x51\x88\xBB\x88\x87\x88\xBD\x88\x89\x88\x61\x87\x8B\x88\x7B\x86\x59\x88\x7D\x86\x5B\x88\x44\x84\x34\x7F\x93\x88\xF4\x7F\x38\x7F\x43\x0F\x3A\x7F\x23\x77\x3C\x7F\x25\x77\x3E\x7F\x1A\x87\x09\x85\x5A\x89\x77\x87\xA5\x88\x03\x89\x01\x53\xD7\x88\x4C\x84\x28\x84\xF5\x85\x08\x89\xAD\x88\x44\x88\xB1\x88\x52\x87\xB2\x83\xA7\x7E\xE1\x88\x8C\x85\xE3\x88\x8E\x85\xE5\x88\x90\x85\x88\x87\x03\x87\xE5\x87\x05\x87\x54\x88\x2F\x86\x56\x88\xBE\x86\x1E\x89\xBB\x87\x8E\x88\xC2\x86\x94\x87\xA9\x6D\x03\x85\xFC\x7A\x54\x77\xB6\x08\x77\x84\x3E\x87\xD7\x84\xFC\x7F\xD9\x84\xF9\x88\xFB\x81\x72\x7F\x47\x87\xA0\x88\x77\x6A\x00\x89\xA8\x85\x02\x89\x71\x88\x36\x89\xD9\x88\x38\x89\x63\x89\x34\x82\xAC\x87\x25\x87\x53\x87\x98\x89\x6A\x89\xE2\x88\x6C\x89\xE4\x88\x6E\x89\xE6\x88\x70\x89\xE8\x88\x72\x89\xEA\x88\x74\x89\xEC\x88\x76\x89\xEE\x88\x78\x89\x8D\x88\x20\x89\x0D\x87\x22\x89\x68\x85\xEE\x7C\x21\x0F\x9A\x7F\xC8\x87\xE4\x82\xAC\x84\xD5\x7A\x81\x6F\x89\x89\xA7\x88\x51\x7C\x8B\x89\xBF\x89\x60\x89\x06\x89\x41\x88\x66\x86\xAD\x86\x50\x87\x95\x89\x7A\x88\x26\x87\xD6\x86\x82\x87\xB4\x88\x84\x87\x2D\x7E\x86\x87\x6F\x89\xB9\x88\x17\x89\xD1\x89\x19\x89\xD3\x89\x1B\x89\xD5\x89\x1D\x89\xD7\x89\xF0\x88\x7A\x89\x53\x89\x3A\x87\x2C\x79\xAD\x89\x61\x7B\xAF\x89\xA9\x0B\xD5\x84\xB2\x89\x88\x89\x19\x36\x7B\x84\xD2\x83\x0D\x85\x9D\x10\xDD\x84\xEF\x86\x47\x65\xCE\x87\xC5\x7E\x8A\x89\xD3\x88\x8C\x89\x5F\x89\xF6\x5E\xD8\x88\x3D\x86\x91\x89\xED\x89\x4F\x87\x68\x86\xAD\x87\x0D\x89\xAF\x87\xF3\x89\xB1\x87\x01\x86\xB7\x86\x69\x80\xB5\x87\xBB\x7F\x9B\x86\x68\x85\x9D\x86\xD8\x89\x04\x8A\x21\x89\xF3\x88\x93\x7B\x08\x8A\x98\x7B\x0B\x78\x06\x85\x0D\x78\x31\x88\x3B\x0F\x10\x78\x70\x6D\x93\x7D\xC9\x87\x0E\x85\x09\x01\x13\x86\x4D\x83\x36\x88\x5B\x89\x5D\x89\xED\x85\x3D\x88\xC0\x89\x1F\x8A\xA8\x87\xC3\x89\xF8\x85\x7C\x88\xB0\x85\x7F\x87\xFC\x85\x0F\x89\xD8\x85\x56\x87\xDA\x85\xB6\x88\x93\x86\xB8\x88\x95\x86\xBA\x88\xE0\x85\xBC\x88\xE2\x85\xBE\x88\xE4\x85\xC0\x88\xE6\x85\x4C\x89\x52\x89\x33\x8A\x54\x89\x1F\x84\x29\x80\x98\x6D\x3A\x86\xBB\x89\x46\x8A\x1B\x8A\x32\x2B\x4A\x8A\x86", +"\x86\xB3\x84\x21\x8A\x7B\x87\x94\x89\xDD\x88\xFB\x85\xDF\x88\x6C\x86\x99\x89\x6E\x86\x9B\x89\x70\x86\x9D\x89\x72\x86\x9F\x89\x2F\x87\x04\x87\x31\x87\x15\x84\xEF\x84\x34\x87\x77\x89\x36\x87\x79\x89\x38\x87\xE8\x86\x66\x8A\x72\x84\x54\x85\xA2\x6D\x6A\x8A\x6C\x88\x6C\x8A\xE9\x89\x1D\x8A\x8F\x89\x64\x86\x71\x8A\x88\x86\xEE\x89\x23\x8A\xC6\x89\x97\x89\xD4\x7E\x79\x8A\x7F\x88\x7B\x8A\x81\x88\x7D\x8A\x83\x88\x7F\x8A\x48\x89\x81\x8A\x4A\x89\x83\x8A\x33\x87\x17\x84\x59\x6E\x30\x8A\x03\x8A\x89\x8A\x05\x8A\x67\x87\x53\x85\x0F\x7C\xE0\x73\x5B\x82\xE5\x89\xD5\x88\x1E\x87\xE8\x89\xE6\x89\x8E\x89\x61\x89\xE6\x63\x4D\x8A\xAB\x87\x4F\x8A\x69\x86\x3D\x89\x0E\x89\x3F\x89\x7E\x88\x83\x87\x43\x89\x68\x85\xF8\x89\xCE\x89\xFA\x89\x71\x89\x5C\x8A\x73\x89\x5E\x8A\x75\x89\xBF\x88\x86\x8A\x63\x87\x88\x8A\x65\x87\x8A\x8A\x06\x8A\x93\x7B\xEB\x86\x6E\x88\xC7\x86\xB2\x7B\xA3\x85\x83\x86\x90\x01\x91\x8A\xB8\x8A\x6F\x8A\x90\x89\x4C\x8A\xCF\x86\x3A\x89\xC5\x89\x96\x89\xE9\x84\x54\x87\x54\x8A\x11\x89\x56\x8A\x13\x89\xB7\x88\x15\x89\xC9\x8A\xD0\x89\xCB\x8A\xD2\x89\xCD\x8A\xD4\x89\xCF\x8A\xD6\x89\x87\x8A\x31\x8A\xAD\x8A\x90\x7B\xF8\x78\x01\x01\xF1\x80\xC4\x87\x5C\x0A\xBC\x89\x6B\x87\xEF\x7E\x27\x01\x47\x8A\x5C\x86\x04\x89\xEA\x89\x37\x89\x05\x82\x1A\x86\xC4\x89\xBE\x8A\x24\x8A\xC0\x8A\x26\x8A\x53\x8A\xFE\x85\xD9\x85\xD9\x86\x92\x86\xDB\x86\x94\x86\x45\x85\x96\x86\xB9\x86\x68\x85\xE1\x86\x84\x8A\xA9\x8A\x61\x79\xAB\x8A\x1F\x89\x32\x8A\xDA\x89\x34\x8A\xCF\x7D\xD7\x8A\xA3\x88\x45\x87\x3C\x0F\xF1\x80\xF4\x6D\x90\x88\xFF\x8A\xDE\x8A\xB5\x8A\x1C\x8A\xD5\x30\xBA\x8A\x57\x84\x74\x8A\x3B\x89\xB0\x88\xD8\x87\xE6\x83\x6B\x89\x12\x89\x6D\x89\xED\x8A\xF9\x89\x5A\x8A\xFB\x89\xF1\x8A\xFD\x89\xF3\x8A\xFF\x89\xF5\x8A\x01\x8A\xF7\x8A\xAC\x8A\xD3\x8A\xAE\x8A\xC5\x88\xE0\x76\x15\x81\xDB\x6D\x2F\x89\x00\x00\x00\x8B\x4B\x87\x3A\x88\x6D\x8A\xA8\x88\x07\x8B\xC1\x89\x09\x8B\x39\x89\x64\x89\xC1\x8A\x66\x89\x3C\x85\x0F\x8B\xC2\x8A\x9D\x8A\xC4\x8A\x80\x88\x44\x89\x2C\x87\x68\x85\x47\x89\xDE\x86\x49\x89\xBA\x86\x4B\x89\x59\x6E\x85\x8A\xF6\x8A\xD1\x8A\xF8\x8A\x47\x8B\x65\x8A\xD5\x8A\xCF\x7D\x3A\x81\x50\x35\xCE\x88\x45\x8A\x19\x8A\x03\x01\x04\x8B\x38\x88\x8D\x89\xE0\x8A\x95\x8A\x3E\x86\x72\x8A\x43\x88\xEF\x89\x75\x8A\x67\x89\x59\x8B\x69\x89\xE9\x8A\x38\x8B\xEB\x8A\x3A\x8B\x58\x8A\xEE\x8A\x3D\x8B\xCA\x8A\x97\x86\x5D\x8A\x99\x86\x5F\x8A\x2E\x8A\x4C\x89\x1F\x8B\xA8\x89\xD9\x89\x93\x87\xF0\x87\x7F\x89\x5A\x6E\xED\x80\xE6\x89\x50\x82\x66\x69\x5F\x86\xCA\x86\xA1\x88\x2D\x8B\x34\x89\x6E\x8A\x54\x8B\x4B\x8A\xDA\x88\xE3\x8A\x58\x8B\x5C\x8B\x5A\x8B\x44\x86\x0C\x8B\xB2\x88\xC3\x8A\xF5\x89\xC5\x8A\x4C\x89\xC7\x8A\x9E\x89\xE7\x88\xA0\x89\x18\x89\xA2\x89\x1A\x89\xA4\x89\x1C\x89\x57\x88\x02\x8A\x20\x8B\xF9\x8A\x22\x8B\x8B\x8A\xD0\x84\x81\x86\xC9\x22\x4D\x8B\x4F\x8B\xD1\x87\xA7\x80\xB7\x8A\x2E\x8B\xA3\x8B\x93\x8A\x31\x8B\xF6\x86\x78\x88\xE5\x8A\xF1\x89\xC7\x89\x9C\x8A\xC9\x89\x9A\x89\xCB\x89\x9C\x89\xCD\x89\xB3\x8B\xCF\x89\xB5\x8B\xFC\x89\xB7\x8B\xFE\x89\xB9\x8B\x00\x8A\xBB\x8B\x45\x8B\xBD\x8B\x6E\x8B\xBF\x8B\x70\x8B\x72\x84\xAD\x81\xA5\x86\x00\x7C\x74\x8B\xA0\x8B\x76\x8B\x02\x01\x78\x8B\xD8\x8A\x49\x8A\xA4\x8B\x70\x8A\x7D\x8B\x97\x8A\x22\x8A\xD1\x8B\x35\x8B\x3B\x89\x37\x8B\xCA\x89\x39\x8B\xCC\x89\x3B\x8B\xC8\x8A\x8B\x8B\xF0\x8A\x8D\x8B\xCC\x8A\x8F\x8B\xCE\x8A\x60\x8A\xD0\x8A\xC1\x88\xD2\x8A\xC3\x88\xD4\x8A\xAF\x8A\xEA\x86\xC5\x86\xA2\x8B\x64\x7B\xC8\x86\x27\x01\x1B\x6E\x59\x89\x75\x8B\x9B\x8B\xCD\x85\x1A\x8A\x92\x8A\x30\x8B\xEB\x89\x75\x88\xA7\x8B\x0B\x8B\x68\x89\x50\x8A\xAE\x87\x52\x8A\x5D\x8B\xD3\x8B\x7A\x8A\xD5\x8B\x7C\x8A\xD7\x8B\x7E\x8A\xB4\x8B\x80\x8A\xA1\x89\x82\x8A\x06\x87\x1C\x8B\xE3\x86\x2F\x8A\xE5\x86\x61\x79\x64\x8A\xE4\x8B\x0B\x8C\x2C\x79\x25\x8B\xD1\x88\x27\x8B\x44\x0F\xFE\x81\x6D\x7B\xFF\x88\xA1\x8B\x5E\x89\xCA\x8B\x19\x8C\x08\x8B\x53\x83\x57\x8B\x1D\x8C\x83\x8B\x1F\x8C\x25\x8A\x21\x8C\xDC\x87\x23\x8C\x9E\x8A\x25\x8C\xA0\x8A\x27\x8C\xA2\x8A\x29\x8C\xA4\x8A\x2B\x8C\xA6\x8A\x2D\x8C\xA8\x8A\x2F\x8C\x92\x8B\x31\x8C\x2D\x7E\x33\x8C\x96\x8B\xDB\x89\x4C\x89\x10\x87\xF2\x74\x97\x7A\xC6\x8B\x47\x76\x44\x65\x25\x82\xC6\x72\x2B\x89\xDE\x82\x66\x69\xA3\x7A\x81\x84\x3F\x0F\x17\x8A\xFC\x88\x3E\x8C\x48", +"\x8A\x06\x8B\xCB\x8B\x1A\x8C\xAB\x88\x1C\x8C\x4E\x8A\x1E\x8C\xBF\x8A\xF2\x89\x10\x8B\xFC\x86\x12\x8B\xFE\x86\x61\x8B\x82\x88\x2D\x87\x29\x86\x59\x6E\x86\x88\xF2\x8A\x03\x8C\xF4\x8A\x05\x8C\x6B\x8B\x07\x8C\x6D\x8B\x09\x8C\x48\x8B\x92\x7B\xCF\x7D\x3C\x87\x01\x8B\x99\x7A\x44\x65\x40\x87\x39\x19\xCF\x7A\x7C\x84\xDD\x82\x37\x7B\xD3\x7A\x87\x89\x6C\x8C\x3D\x8C\xEC\x8B\x32\x89\x52\x8B\x1E\x59\x65\x56\xCC\x8B\x0A\x8B\x76\x8C\x46\x8C\x78\x8C\xD1\x8B\xF9\x8B\xD4\x8B\xFB\x8B\xD6\x8B\xFD\x8B\xD8\x8B\xEF\x8A\xDA\x8B\x3F\x8B\xDC\x8B\x41\x8B\xDE\x8B\x43\x8B\xE0\x8B\x6C\x8B\x46\x8B\x8B\x8C\x6F\x8B\x35\x8C\xD9\x82\x69\x87\xAD\x82\x62\x8C\x91\x8C\x6D\x87\x01\x7B\x83\x82\x67\x8C\x98\x8C\x41\x65\x74\x87\xCD\x87\x9C\x8C\x15\x8C\xD2\x87\x17\x8C\xDF\x8A\xF1\x8B\xE1\x8A\xA6\x8B\x92\x89\xE4\x8A\xAC\x8B\xE6\x8A\x42\x86\xD2\x8B\x85\x8B\xFA\x8B\x87\x8B\xFC\x8B\x89\x8B\x3C\x8B\x17\x8B\x5B\x8A\x01\x8C\x84\x8C\xB6\x87\x07\x87\xA5\x89\x09\x87\xA7\x89\xEC\x87\xA9\x89\xBD\x87\xAB\x89\x75\x6E\xBC\x8C\x3D\x87\x60\x81\x9B\x87\xB1\x82\x33\x7B\x92\x7D\x90\x8C\x51\x6E\xA0\x87\x9A\x8C\x3C\x8A\xC8\x8C\xC9\x8B\xF0\x7C\xCB\x8C\xF7\x8C\xA0\x8C\xC6\x58\xA2\x8C\x44\x8C\xA4\x8C\xA9\x8B\x65\x82\x82\x8B\x00\x8D\x78\x8A\x4B\x8C\x5F\x8B\x9F\x8A\x7E\x8C\xA1\x8A\x80\x8C\x84\x88\x4C\x89\x83\x8C\x40\x8B\x85\x8C\x42\x8B\x87\x8C\x44\x8B\xB6\x8C\xE2\x8B\xB8\x8C\x34\x8C\x49\x8B\xBF\x87\xF6\x7F\xC1\x87\xC8\x7F\xCC\x09\xE1\x82\x38\x6B\xC3\x8C\xD2\x7A\x6A\x7B\xE6\x82\x60\x65\xB5\x07\x2C\x8B\x9D\x8C\x5C\x89\x9F\x8C\xB9\x8A\x73\x8C\x62\x89\x75\x8C\xBD\x8A\x77\x8C\x0D\x8B\x79\x8C\x22\x8C\xD6\x8C\xA9\x8C\xD8\x8C\xAB\x8C\xDA\x8C\xFE\x8B\xDC\x8C\x3E\x8B\xDE\x8C\x0E\x8D\xE0\x8C\x2E\x8C\x4E\x89\x30\x8C\x50\x89\xE7\x85\x57\x86\x2D\x7E\xBE\x87\xEB\x85\x0D\x8C\x3F\x8C\xFD\x73\xF4\x87\xC1\x87\xFD\x87\x36\x7F\x13\x83\xE1\x09\xFB\x87\x9B\x7F\x4B\x8D\x60\x88\xAF\x72\xF1\x71\x06\x67\xB0\x7D\x2B\x6B\x53\x80\x26\x8B\xCB\x88\x2C\x82\x02\x05\xB1\x74\x70\x75\xD8\x71\x1A\x83\x0F\x72\x8E\x7D\x07\x6D\x58\x8D\x38\x8C\xCB\x88\xBD\x74\x24\x72\x30\x7D\x57\x8D\x00\x84\xAC\x71\xBE\x71\x0B\x0D\xC7\x74\x41\x75\xBD\x70\x07\x75\x5E\x8D\x2C\x6B\x23\x72\xEA\x71\x2A\x74\x77\x6A\x64\x8D\xE2\x84\xA8\x78\x6C\x8D\xB9\x70\x27\x47\x4E\x71\x4F\x75\x24\x75\x4F\x80\x26\x75\x31\x72\x28\x75\x78\x8D\x6B\x8D\x21\x6B\xD5\x7B\xDF\x03\xE7\x74\x44\x75\x3D\x69\x98\x65\x85\x8D\x63\x8D\x87\x8D\xED\x71\xF4\x74\x67\x72\x42\x75\xF7\x74\xE8\x74\x09\x75\xF9\x6A\x1A\x75\x6F\x71\x90\x8D\xA9\x86\x7C\x8D\x58\x72\x94\x8A\x03\x71\xEC\x7E\x88\x72\xA4\x71\x18\x75\x0A\x75\x68\x8D\xBE\x72\x86\x8D\x9D\x8D\x21\x6B\x65\x72\x8B\x8D\x73\x8D\x5F\x71\x9D\x10\x6E\x72\x38\x75\x11\x66\x79\x8D\x01\x89\xD4\x7F\x7C\x8D\x20\x75\xA9\x78\xA1\x8D\x54\x80\xCA\x74\x97\x8D\x45\x75\x27\x75\x9A\x8D\xB1\x72\x9C\x8D\xC9\x8C\x5C\x1A\xB7\x8D\x2F\x75\xD4\x02\xAD\x8D\x02\x71\x7C\x72\x47\x6A\x8F\x8D\x6A\x8D\xAA\x8D\x02\x75\x3F\x75\x49\x6B\x05\x75\x40\x71\xAE\x8D\xCA\x8D\x48\x0F\x47\x75\xFD\x74\xC2\x8D\xFA\x8C\xB6\x7D\x90\x72\xD8\x70\xC0\x71\x80\x8D\x33\x75\x25\x75\xCD\x74\xFF\x00\xAA\x72\x1D\x88\x5C\x0A\xB4\x8D\xBD\x89\xD9\x8A\x10\x71\xCB\x71\x59\x75\x24\x74\xD9\x8D\x0E\x8C\x50\x7D\x5D\x75\x80\x69\xB8\x74\xCD\x8D\xC3\x8D\x63\x8C\xBB\x72\xDA\x71\xC0\x8D\x34\x72\x7D\x69\xE7\x8D\xF1\x8C\x9A\x18\x8F\x8C\xA0\x74\xEF\x8B\xF6\x2F\x01\x71\xCC\x73\x94\x8D\x5E\x7D\xB4\x69\x58\x32\x0D\x88\xAE\x6B\x2D\x89\x02\x01\x8D\x00\x27\x89\x45\x65\xC5\x5A\x23\x1C\xF4\x2F\xE0\x89\xEC\x8C\x09\x8E\xC4\x7D\x0F\x6D\x09\x01\xB6\x3B\x15\x8E\xF7\x8D\xB6\x74\x09\x01\x8F\x00\x1A\x8E\x1F\x8E\xEC\x76\x3A\x8C\xF4\x8C\xA7\x67\xFF\x8D\xBE\x8C\xCB\x7A\x61\x85\x52\x69\x90\x00\x19\x88\x44\x0F\x70\x0F\x91\x00\x70\x73\x9D\x6C\xB7\x73\x6D\x7A\x81\x82\xB4\x6E\x80\x75\x4A\x01\xD1\x7D\xEF\x8D\xA6\x83\x20\x8E\x04\x71\x26\x88\x02\x01\x92\x00\x0E\x8E\xBB\x8D\x4D\x69\x28\x5F\xD2\x83\x51\x8D\x00\x7E\x3A\x8E\xD5\x83\xB0\x6F\xE5\x8D\xE9\x8B\xDF\x7C\xA4\x7B\x19\x83\x0B\x8E\x01\x01\x28\x52\x46\x8E\xE9\x6B\x7B\x83\x55\x73\x99\x74\x5C\x0A\xB2\x8A\x47\x0F\x44\x8E\xA8\x6F\xE0\x82\x8D\x53\xA2\x83\x8C\x8D\x41\x75\x4E\x8E\x9A\x74\xB1\x6A\xCF\x67\x57\x8E\x43\x0F\x59\x8E\x61\x81\x17\x72\xD8\x8D\x2B\x6B\x64\x8E\x3F\x0F\x59\x8E\x9E\x8D\xC6\x74\xC2", +"\x68\xDF\x8D\x17\x75\x51\x75\xC5\x6A\xCC\x8D\x56\x8E\x23\x8D\x34\x8E\x9D\x7B\xC3\x01\xC5\x8D\xCE\x6A\xD7\x74\x2B\x72\xD2\x8D\x5C\x71\xD4\x8D\xEA\x74\x90\x10\xDF\x74\x69\x8E\x76\x8E\x4B\x8E\xF6\x87\x9C\x7B\x11\x78\x11\x0F\x60\x8C\xE1\x6A\x59\x71\xE7\x69\x71\x8E\xA4\x8D\x73\x8E\xE8\x6A\xA7\x8D\x66\x75\x7D\x69\x6B\x8E\x3B\x0F\x6D\x8E\x66\x71\xFD\x68\x1E\x8A\x71\x75\xA4\x72\x96\x8D\x5E\x8E\xF2\x68\x99\x8D\x94\x8E\x77\x8D\x07\x6D\x97\x8E\xB3\x6E\xF7\x87\xE3\x3A\x6E\x8E\x76\x71\x9C\x8E\x5F\x8D\x79\x71\x9F\x8E\x81\x8E\xFA\x74\x44\x0F\x7F\x71\x7F\x7C\xA5\x8E\x77\x8E\xA8\x8E\xB5\x6E\x7C\x8D\xAC\x8D\x90\x8E\x5C\x72\x34\x75\x3D\x72\xB9\x63\xB1\x8D\xC6\x7C\xA3\x78\x0A\x7D\x4C\x8E\xA9\x8E\x90\x71\x27\x47\x92\x71\xC8\x8D\x04\x8E\xFD\x69\x9D\x10\x7E\x72\xC1\x8E\x96\x67\xC3\x8E\x88\x8E\xA5\x7B\x53\x0E\xC6\x8E\x88\x66\xBB\x70\x70\x8D\xDB\x70\xA3\x8D\xBC\x8E\xE1\x8D\x35\x75\xB9\x63\x37\x75\xCE\x8E\x76\x4B\x87\x8E\xB6\x07\x13\x3F\x79\x8E\xC0\x0B\xCF\x8D\xAE\x71\xD1\x8D\xD7\x8E\xC1\x6A\xD9\x8E\x7A\x72\x82\x8D\xE2\x8D\xD7\x8D\xA4\x7C\x86\x8E\xD0\x8E\xE2\x8E\xAC\x6E\x3E\x8A\xAA\x8E\x4D\x75\x73\x69\xBB\x8E\xEC\x8E\x98\x8D\xC5\x71\x11\x66\xF3\x8D\xF1\x8E\x24\x7D\xB7\x8E\x35\x8E\x45\x8E\x5C\x7C\xEB\x8D\x1B\x75\xCB\x6F\x11\x66\xA6\x8E\x7D\x75\xD1\x8E\xF8\x87\xB2\x7B\xB7\x72\x62\x8E\x08\x8F\xB6\x8E\x41\x7C\x0C\x8F\x1B\x8E\x22\x8E\xF9\x8D\x80\x72\x79\x69\x09\x8F\xA3\x7B\x0B\x8F\xE3\x3A\x25\x8E\x2D\x74\x79\x8B\xC7\x0C\x26\x82\xA0\x15\xCA\x8E\xAD\x8E\xFF\x87\x3D\x7D\x27\x01\x94\x00\x51\x8E\x21\x8E\x9D\x10\x84\x75\x85\x8E\x6A\x88\xEB\x79\x90\x88\x5C\x02\x5F\x88\x03\x8F\x82\x8D\xF5\x7F\x49\x84\x75\x83\x46\x83\x66\x88\xB9\x8D\xBE\x6D\x4A\x83\x1E\x6D\x2D\x8F\x4B\x83\x4F\x6D\x30\x8F\x02\x01\x32\x8F\xD3\x73\x23\x6D\x95\x88\xCD\x68\x97\x88\x63\x7E\x99\x88\x3A\x8F\xF6\x24\x0E\x88\x48\x0F\x7C\x83\xDF\x8E\x4C\x83\x0C\x8C\x5D\x8C\x1E\x77\xA0\x83\xAB\x58\xEE\x04\xC9\x88\xB6\x89\x0C\x83\x28\x8E\xA8\x83\xB4\x8E\x2B\x6B\x51\x8F\x36\x8C\x97\x8B\x34\x8F\x8F\x7E\x44\x65\xCE\x83\x41\x87\xBF\x7E\x1F\x8D\xA4\x6C\xFB\x88\x29\x32\x12\x88\x3F\x8F\xD1\x81\xBA\x8C\x67\x8A\x3C\x8E\x01\x01\x8D\x81\x3A\x0F\x82\x14\x2E\x8F\x45\x8D\x53\x8F\xFC\x7D\x56\x89\xB9\x63\x58\x89\xF0\x8E\x76\x8F\x2D\x85\x7C\x89\x3F\x83\x43\x8F\xC4\x77\x2F\x7E\x64\x7D\x4B\x84\x3D\x7F\x9D\x10\x4F\x84\x6B\x8C\xD4\x74\x11\x66\x5F\x8F\xD6\x8A\x61\x8F\xD4\x73\xEA\x8C\x55\x77\x6C\x00\x1B\x8D\x93\x6F\x6E\x7F\xB5\x89\x13\x8E\x18\x87\x44\x0F\x80\x84\x50\x8F\x9E\x6E\x6F\x8F\xE6\x8B\xA2\x8D\x75\x69\xDF\x89\x96\x8C\x99\x87\xC4\x8C\x9F\x7F\x23\x8E\x77\x67\x2C\x8F\x5A\x86\x8F\x8F\x45\x8F\x91\x8F\xC6\x7F\x30\x88\x0D\x8A\x9B\x8C\xB4\x89\x0B\x85\xA3\x8F\xC2\x87\x20\x8D\xCE\x7F\xA7\x8F\x80\x69\xA9\x8F\xC4\x86\x78\x8F\x72\x83\x36\x8A\x7E\x82\xF8\x7F\xAF\x8F\x14\x8E\x79\x84\xB2\x8F\x5A\x77\x59\x8F\x68\x8C\x16\x78\x42\x8A\x6C\x8F\x3D\x8F\xAA\x8F\xBC\x8F\xA2\x86\x2E\x85\x4A\x78\xDD\x6D\x6D\x8F\xCC\x8F\x23\x8B\x8C\x8A\xF3\x7B\x52\x80\xCA\x8F\x03\x01\x8D\x8F\x24\x8B\xAB\x8F\x7A\x85\xB1\x8A\x9C\x8F\x6E\x8F\x17\x8D\x77\x8F\x9A\x8B\xDA\x8D\x01\x6D\x61\x81\xDB\x8A\x78\x75\xBA\x8F\xEB\x79\xFB\x8A\x00\x00\xFD\x8A\xA8\x8D\x07\x6D\xDA\x8F\x72\x84\xE8\x8C\xA2\x6E\xE3\x8F\x38\x8E\x72\x87\x9D\x10\x29\x8B\xD8\x8F\x72\x0B\x9D\x8F\xE1\x8F\x75\x80\xD9\x6D\x16\x81\xF9\x8F\xEF\x76\xE0\x8F\x8D\x8C\x8C\x8A\x41\x65\x31\x85\x95\x79\xA9\x71\x77\x6A\xF0\x8F\xD0\x84\xF2\x8F\x72\x6E\x9D\x80\xE4\x8F\xEC\x6C\x9D\x8B\x27\x01\xC3\x79\x13\x71\x09\x90\xFB\x8F\x03\x90\xC1\x8B\x87\x81\x82\x86\xD1\x8F\xCB\x8F\xBB\x8F\xD4\x8F\xD0\x84\xE7\x8B\x9D\x10\xA6\x86\x3E\x8F\x1C\x90\x09\x83\xCD\x8F\x0F\x87\x37\x8C\x7A\x8D\xD9\x8A\xC8\x6F\x11\x8C\xDF\x8F\xD3\x8F\xC0\x8B\x23\x89\x28\x90\xB5\x8D\x39\x8C\x0F\x88\xE3\x89\x49\x65\xFC\x6F\xFA\x8F\x02\x90\x2B\x7B\x11\x87\x4B\x87\x35\x6E\x15\x87\x9C\x7A\xFB\x0B\xFD\x8D\xA1\x7A\x44\x0F\x6A\x8C\x55\x6E\xCF\x67\x0A\x90\x30\x90\xDC\x8F\xB4\x6C\x1D\x8F\x7D\x84\x13\x87\x47\x0F\x93\x8C\x12\x04\x95\x8C\x11\x8A\x40\x8A\x9D\x10\x7E\x7C\xA2\x87\x48\x65\x37\x90\x01\x90\x2E\x90\xE5\x8B\xD0\x84\x49\x8D\x6A\x87\x3C\x90\x00\x7B\xA1\x67\x02\x7B\xAE\x2D\x41\x90\x86\x82\x06\x7B\xB8\x8F\x89\x69\xE9\x8F\xE2\x8F\x2F\x90\xDC\x89\x5D\x90\xBD\x8C\xC2\x7E\x4D", +"\x90\x0E\x8A\x7F\x66\x9D\x87\x98\x8F\x9F\x87\x83\x6E\x67\x90\x92\x69\x5E\x8F\x16\x90\x3A\x90\x19\x8D\x5E\x90\x26\x8E\x9A\x18\xC4\x87\xD0\x01\xE2\x82\x74\x90\x33\x90\x48\x0F\xCB\x87\x60\x7C\x59\x90\x1D\x90\x6B\x90\x5E\x8C\x31\x90\xE8\x8D\x9F\x80\x6D\x90\x10\x83\x78\x8E\x8A\x8E\x5A\x8E\x52\x09\x79\x6F\x4F\x8D\x55\x82\x66\x8E\xFD\x79\xFF\x00\x01\x0B\xE5\x7D\x84\x8F\x4B\x65\xC5\x5A\xAF\x31\xAB\x22\xB1\x20\xFE\x87\x98\x8B\xD1\x84\x3F\x0F\xD6\x73\x8D\x09\xD8\x73\xC7\x8D\xFB\x83\x04\x8F\x53\x8E\x2F\x70\x55\x8E\xA2\x80\x40\x8F\xF9\x87\xB0\x74\x92\x7E\x38\x70\xEE\x71\x9D\x8E\x61\x81\x61\x8D\x07\x8F\x7D\x69\xA4\x85\x7F\x8F\x67\x8D\x76\x8D\x46\x71\x11\x66\xBC\x90\x07\x8A\xDC\x8D\xBE\x6A\x70\x8E\x7F\x8E\x43\x75\xB0\x8E\x83\x8D\x48\x0F\xCF\x74\xDF\x8E\xC2\x90\x35\x8A\xD4\x8E\xDC\x66\x7F\x8D\xC7\x90\xAF\x8E\xC9\x8D\x82\x8E\x71\x0F\x84\x8E\x7D\x8F\x09\x01\xCE\x90\xCF\x7D\x7C\x8D\x89\x8D\x4B\x8F\xFD\x71\x95\x71\xBC\x8D\xA0\x8E\xCB\x8E\x3E\x72\x75\x8E\xB0\x90\xC3\x7F\x92\x8D\x9B\x8E\xA0\x8D\xB4\x74\xE1\x90\xEB\x8E\xF8\x74\xED\x8E\xDC\x8E\x90\x10\xFC\x74\xD9\x90\xBA\x6D\xE8\x90\x8C\x8E\x9E\x71\xB8\x0E\x04\x6B\xE9\x8E\xB1\x71\x94\x72\xE0\x8D\xF0\x90\xBE\x8E\x90\x10\xB3\x8E\x27\x7C\x2B\x6B\xDB\x90\x72\x84\xB9\x8E\x13\x75\x86\x71\xD3\x90\x72\x8D\xD5\x90\xB1\x8E\xB0\x8D\xE6\x90\xDA\x90\x4F\x6D\x7B\x8E\xC7\x8E\xAA\x70\xF9\x8E\xEF\x90\xFB\x8E\x48\x0F\xCD\x8E\x23\x90\xD1\x78\xF6\x90\x3D\x75\x49\x69\xC6\x8D\x39\x6B\x15\x91\xBD\x8D\x8D\x8D\xA6\x71\x0F\x91\xF5\x90\x6B\x7A\xF6\x8E\x0B\x0D\x40\x75\x05\x8E\xD8\x8E\xFD\x90\x72\x8E\xBD\x8E\xFC\x81\xEF\x8E\x5D\x8F\x5C\x0A\x05\x91\xD0\x84\x28\x91\xB8\x0E\xA2\x72\x2B\x91\xEA\x8E\x2D\x91\x91\x8E\x2F\x91\x52\x75\xFD\x8E\x54\x75\xE7\x90\xC6\x88\x53\x8D\x05\x8F\x9B\x8D\x3D\x70\xC1\x90\xB1\x90\x0D\x8F\x5E\x75\x1F\x73\xBB\x90\x48\x91\x14\x8F\x34\x90\xBF\x90\x9B\x71\x47\x91\xF2\x7D\xF7\x90\x6C\x75\xEF\x7C\x03\x8E\xB6\x90\x24\x8F\x28\x8E\x69\x90\x47\x65\x83\x84\x60\x70\xE0\x74\xF4\x0A\xDB\x1C\xFD\x8C\xBC\x8A\xCE\x8B\xD2\x8C\xD0\x8B\x9B\x8A\xA8\x8C\x24\x8C\xAA\x8C\x26\x8C\xAC\x8C\x28\x8C\xD9\x8B\x2A\x8C\xB6\x8B\x2C\x8C\xA3\x89\xB7\x87\xBA\x8B\xA6\x89\xBC\x8B\x94\x8B\x21\x8B\xC5\x85\x41\x8F\x92\x88\x71\x83\xA2\x86\x46\x8F\xB6\x68\x48\x8F\xB7\x38\xC5\x75\xDF\x90\x70\x78\x3C\x8F\xD9\x8F\x4D\x8B\xBA\x6E\x08\x90\x80\x72\x61\x91\x2A\x8D\xBB\x8A\x2C\x8D\x64\x91\x2E\x8D\x9A\x8A\xE7\x8A\xC8\x89\x32\x8D\x69\x91\x34\x8D\x6B\x91\x36\x8D\xAD\x8C\xFF\x8B\xAF\x8C\x3A\x8D\xB1\x8C\x0F\x8D\xB3\x8C\x11\x8D\xB5\x8C\x89\x8C\xB7\x8C\x23\x80\xC2\x86\x7A\x91\x40\x83\x7C\x91\x61\x88\x9D\x90\x96\x88\x03\x76\x49\x8F\xD4\x6C\x78\x83\x3F\x76\x9C\x88\xAD\x90\xD9\x6C\x87\x91\x5F\x91\x05\x45\xDE\x45\x55\x8B\x43\x8C\x63\x91\x0A\x89\xCF\x8B\x0C\x89\x0E\x8B\x49\x8C\x84\x8B\x11\x8B\x55\x8A\x13\x8B\x57\x8A\x15\x8B\x59\x8A\x38\x8D\x8C\x8B\x19\x8B\x4C\x89\x1B\x8B\x56\x8C\x3E\x8D\x58\x8C\x40\x8D\x63\x8A\x42\x8D\x42\x83\x44\x8D\x7F\x8F\x44\x65\x91\x7E\x0C\x0E\x93\x7E\xC6\x8F\xC3\x87\xCC\x88\x11\x85\x8F\x8A\x2B\x6B\x88\x91\x1F\x7D\x8A\x91\x02\x4D\x42\x8C\x37\x85\xA3\x8C\x2D\x8D\xA5\x8C\x2F\x8D\xA7\x8C\x21\x86\x59\x6E\xB5\x88\xEC\x8A\x98\x91\x6D\x91\xAE\x8C\x6F\x91\xDB\x8B\x71\x91\xB8\x8B\x73\x91\xDF\x8B\x75\x91\xE1\x8B\x77\x91\xBE\x8B\x5C\x8C\x1E\x90\x23\x89\x7A\x76\xF6\x88\xCF\x83\x7D\x76\xD9\x91\x64\x7B\x6A\x8F\xDD\x8A\x60\x86\x77\x6A\xDF\x91\x69\x8D\x60\x91\xE2\x91\xB8\x91\xE4\x91\xFE\x8C\xE6\x91\x03\x8D\xA6\x8C\x67\x91\xEA\x91\x61\x79\xEC\x91\x88\x8B\xC5\x91\x8A\x8B\xC7\x91\x00\x8C\xC9\x91\x9B\x84\x68\x8B\x61\x79\x6A\x8B\x12\x8D\xA2\x91\x14\x8D\xA4\x91\xE7\x8C\x49\x90\xCA\x6C\x60\x8E\x73\x8F\x2C\x91\x5C\x0A\x08\x92\xEE\x8F\xD1\x74\x8B\x91\xE3\x91\xF5\x86\xE5\x91\x8F\x91\xE7\x91\x91\x91\xD4\x8C\x68\x91\x4C\x8C\x6A\x91\x4E\x8C\x6C\x91\x50\x8C\x6E\x91\x52\x8C\x70\x91\x54\x8C\x72\x91\xE1\x8C\x74\x91\xE3\x8C\x76\x91\xE5\x8C\x95\x8B\x35\x86\x25\x92\xAD\x76\x2A\x8F\x57\x89\x7E\x8F\x2B\x8B\x27\x01\x2B\x92\x95\x8E\xA5\x70\x2E\x92\x0C\x92\x30\x92\x0E\x92\x32\x92\x10\x92\xE8\x91\x12\x92\x40\x89\xEB\x91\xF6\x89\x42\x83\xB2\x8B\xEF\x91\x9A\x91\xF1\x91\xB0\x8C\xF3\x91\xDD\x8B\xF5\x91\xB4\x8C\xF7\x91\x13\x8D\xF9\x91\xE3\x8B\x79\x91\x80\x8F\x5D\x88\xA7\x91\x1D\x77\xFC", +"\x7D\x7E\x91\x66\x70\x22\x77\x48\x70\x24\x77\x7A\x85\x4E\x84\x77\x90\x8D\x53\x79\x69\x4F\x92\xA4\x8E\x2D\x92\x0B\x92\xA5\x8B\xC2\x89\x8E\x91\xBB\x91\x65\x91\xBD\x91\x30\x8D\x4A\x8C\x94\x91\x37\x92\x96\x91\x39\x92\xEE\x91\x3B\x92\xF0\x91\x3D\x92\xF2\x91\x3F\x92\xF4\x91\x41\x92\xF6\x91\x43\x92\xF8\x91\x45\x92\x78\x91\x47\x92\x26\x90\x94\x88\xAD\x8F\x6A\x7F\x40\x6D\x3B\x8A\x64\x6F\x96\x8F\xB3\x8F\x52\x90\xE1\x89\x7F\x84\x78\x92\x6D\x92\x7A\x92\xB5\x91\x01\x4D\xB7\x91\x7F\x92\x56\x8B\xBA\x91\x33\x8B\xBC\x91\x3C\x89\x85\x92\xC0\x91\x7B\x8C\xC2\x91\x7D\x8C\xC6\x8A\x45\x89\x42\x83\x64\x8B\x85\x88\xDF\x86\x47\x84\xCB\x91\x4C\x89\x1F\x92\xA1\x91\x62\x8A\xE6\x86\xD1\x91\x47\x84\xD3\x91\xF4\x88\x40\x8E\xA1\x8F\xA9\x84\x83\x90\xB7\x89\xE2\x89\xB7\x82\x9A\x77\x11\x66\x7B\x92\xC0\x90\x17\x66\x52\x92\xAB\x92\xB9\x91\x81\x92\xAE\x92\x83\x92\xB0\x92\xE9\x91\x5A\x92\x14\x92\x5C\x92\x47\x84\x5E\x92\x8C\x92\x60\x92\x8E\x92\x62\x92\x90\x92\x64\x92\x92\x92\x66\x92\x94\x92\x68\x92\x96\x92\xFA\x91\x98\x92\xFC\x91\xDC\x89\xBE\x8F\x0F\x83\xC8\x77\x6B\x6D\x9E\x92\x7B\x6F\x47\x03\x97\x8F\xB4\x8F\x12\x8A\x48\x0F\x14\x8A\x50\x84\xF0\x86\xA7\x92\x69\x8E\x0A\x92\xAA\x92\xF2\x8B\x20\x8A\xF4\x8B\x73\x8A\x80\x8B\x34\x8B\xDE\x88\x2F\x70\xB2\x92\xF4\x89\x4C\x89\x15\x92\xD9\x8C\x17\x92\xDB\x8C\xDD\x86\xBA\x92\x66\x8B\x1A\x8B\x1D\x92\x2D\x7E\xBF\x92\x67\x92\x21\x92\x69\x92\x15\x8D\xFB\x91\x8A\x90\x83\x8F\xC0\x87\x05\x85\xA9\x14\x58\x30\xF9\x7F\xC2\x8F\xB3\x89\x0F\x8A\xF6\x92\xA2\x92\xAB\x84\x3C\x0F\x03\x80\x43\x8A\x32\x85\xCF\x67\xD0\x92\x51\x91\xD2\x92\x7E\x92\x01\x93\xE2\x8A\xD0\x8C\xA8\x8B\xBF\x91\x47\x8C\xBE\x91\x77\x8A\x8E\x86\xAE\x8B\x0B\x93\xDD\x92\x66\x7F\xDF\x92\x0A\x8D\xA3\x8A\x65\x8B\xA5\x8A\x67\x8B\xA7\x8A\xBE\x92\x1D\x8B\x2D\x7E\x93\x8B\xEA\x92\x6A\x92\xEC\x92\x1C\x93\x79\x8F\x68\x8A\x30\x85\xDC\x8A\x5E\x91\xFE\x92\xB6\x91\x62\x91\xD6\x92\x05\x93\xAF\x92\xF7\x8B\xAF\x92\x36\x92\x06\x8D\x4D\x8C\x08\x8D\x4F\x8C\x40\x93\x51\x8C\x42\x93\x53\x8C\x44\x93\x55\x8C\x46\x93\x57\x8C\xAA\x8A\x59\x8C\x42\x83\x5B\x8C\x4C\x93\x5B\x90\x23\x89\x8D\x8A\x73\x78\x06\x92\x07\x6D\x2E\x93\x8D\x72\x30\x93\x00\x93\xCE\x8C\x80\x92\x34\x93\x45\x8C\x57\x92\x34\x92\xAF\x86\xD5\x8C\xC1\x91\xEA\x8A\xC3\x91\xED\x91\x0E\x93\x37\x8D\x10\x93\x0C\x8D\xBB\x92\x66\x7F\xBD\x92\x69\x8B\x47\x93\x42\x83\x49\x93\x51\x89\xC3\x92\x66\x7F\xC5\x92\x93\x7B\x7B\x85\x76\x21\xB4\x91\x53\x93\xA9\x92\x55\x93\x79\x93\xFF\x8C\x36\x93\x11\x92\x92\x91\x7E\x93\xB3\x92\x80\x93\xB5\x92\xB1\x8B\xB7\x92\x47\x84\xB9\x92\x86\x93\x12\x93\xCA\x91\x14\x93\x42\x83\x16\x93\xE8\x92\x18\x93\x4A\x93\x1A\x93\x6C\x93\x9E\x8F\x0B\x90\x46\x8D\x70\x8C\x5A\x8F\xE6\x8F\x41\x91\xD5\x88\x2A\x92\xA8\x92\xAA\x14\x31\x93\x77\x93\xAC\x92\x56\x93\x99\x8A\xD3\x8C\x7D\x93\x5B\x93\xAF\x8B\x60\x8B\xB6\x92\x62\x8B\x4C\x89\xA5\x93\x82\x8C\x87\x93\x98\x8B\x89\x93\x1E\x92\x8B\x93\x47\x84\x8D\x93\x41\x8D\xED\x87\xDE\x7D\xEB\x8F\xED\x8F\x44\x65\x5D\x91\x52\x0C\xBA\x93\xD3\x92\x32\x93\xCF\x8C\x7E\x8B\x09\x89\xD7\x92\x90\x91\xC1\x93\x45\x88\x93\x91\x7F\x93\x86\x8B\x81\x93\x16\x92\x02\x86\x60\x93\x3C\x92\x62\x93\x3E\x92\x64\x93\x40\x92\x3D\x8D\xE2\x8C\x4F\x89\xEB\x87\x8E\x93\xD3\x93\x58\x86\x0C\x90\x5D\x6E\x8C\x90\x64\x90\x58\x82\x28\x8B\xF0\x85\x19\x78\x2D\x93\xDA\x93\xBC\x93\x7C\x8B\x02\x93\x4E\x87\x04\x93\xC0\x93\x66\x91\x9D\x93\xC3\x93\x3C\x93\xB0\x8B\x4A\x86\xA3\x93\x66\x7F\xC9\x93\x61\x79\x0D\x8D\x9D\x91\x3C\x8D\xCC\x91\xF1\x93\x3F\x8D\xF3\x93\xD2\x93\xE6\x8C\x4C\x89\x91\x93\x71\x8B\xFE\x8F\x4C\x8B\x71\x93\xDE\x91\x00\x94\x76\x93\x02\x94\x33\x93\xDE\x93\x93\x89\x57\x93\xD8\x92\x59\x93\xD8\x92\x09\x94\x5B\x92\x0B\x94\x85\x87\x0D\x94\x98\x8B\x0F\x94\x2D\x7E\x11\x94\x63\x92\xB2\x8C\x65\x92\xA0\x91\x17\x93\xC1\x92\x32\x8C\x8F\x93\x98\x8B\x1B\x94\x04\x90\x38\x86\x73\x8B\xDD\x91\xB9\x93\x96\x93\xBB\x93\x22\x94\xAA\x85\x03\x94\xAC\x86\xF5\x8B\x9B\x8A\x29\x94\xE1\x93\xE8\x8A\xE5\x93\xD7\x8C\xE7\x93\x0D\x93\xE9\x93\x63\x8B\x81\x8C\x10\x94\xCB\x93\x62\x8F\xD8\x4D\xA9\x93\x47\x84\xAB\x93\xF2\x93\xE4\x8C\xF4\x93\x19\x94\x0F\x86\x48\x92\x10\x6E\x0E\x90\xF5\x8F\x10\x90\x41\x65\x9E\x8B\xFE\x83\xCF\x92\x21\x94\x98\x93\x25\x94\xD1\x8C\x4C\x94\x84\x92\xDA", +"\x92\x3B\x93\x2C\x94\xC5\x93\xA2\x93\xC7\x93\x6B\x85\x54\x94\x32\x94\x56\x94\x14\x4E\x59\x94\x66\x7F\x5B\x94\x16\x94\x5D\x94\x18\x94\x46\x92\xAA\x89\x61\x94\xFD\x6D\x19\x90\xC3\x8B\x1F\x94\x42\x94\xA4\x7C\xFF\x92\x6B\x94\x03\x93\x7F\x8B\x06\x94\x6F\x94\x59\x92\x71\x94\xDC\x92\x2D\x94\xF7\x89\x2F\x94\x57\x94\x31\x94\x42\x83\x33\x94\xE4\x92\x35\x94\xE6\x92\x37\x94\xAC\x93\x39\x94\x5A\x8C\x3B\x94\x57\x94\x3D\x94\x1F\x90\x90\x6B\xAE\x81\x4A\x8E\x9F\x8B\x07\x92\x6A\x94\x8C\x91\x32\x8B\x27\x94\x6E\x94\xD9\x92\x90\x94\x5E\x8B\xC4\x93\x07\x8D\xC6\x93\x7F\x8C\x53\x94\x0B\x8D\xCA\x93\xA7\x93\x1C\x92\x45\x93\x8A\x93\x67\x93\x1E\x8B\x69\x93\x47\x84\x6B\x93\x82\x94\x99\x92\xA4\x90\xF9\x93\x5F\x90\xB2\x7B\xC9\x86\x7E\x83\x7D\x69\x73\x93\x9A\x72\x48\x70\xDB\x93\xBD\x93\xD5\x92\x99\x93\x0F\x92\x9B\x93\x58\x92\x08\x94\x13\x92\x2D\x7E\x0C\x93\x35\x8D\x83\x93\x99\x91\x19\x92\x9B\x91\x1B\x92\x94\x85\x7B\x94\x98\x8B\x7D\x94\xCE\x91\x17\x94\xD0\x91\xF5\x93\x43\x8D\xF7\x93\x89\x6E\xB3\x93\x05\x8B\x2C\x89\xF8\x8D\x35\x90\xFC\x92\xA9\x94\x43\x94\xCE\x94\x23\x94\xDD\x93\x8C\x94\xDF\x93\xAD\x94\x33\x92\xE2\x93\xF0\x89\xE4\x93\x9F\x93\xE6\x93\xA1\x93\x0C\x94\x75\x94\x01\x87\x77\x94\x98\x94\x79\x94\x5C\x4C\xE0\x94\x57\x94\xE2\x94\x68\x93\xCF\x91\xC2\x92\xE6\x94\xD2\x91\xE8\x94\xB9\x1C\x4B\x90\x97\x8C\x0F\x8C\x64\x8C\x3E\x90\x21\x8F\x40\x90\x4B\x87\x69\x8C\xA5\x92\xC5\x87\xFD\x92\x89\x94\x54\x93\xAB\x94\xCD\x8B\x82\x92\xAE\x94\x4B\x94\xF8\x94\x4D\x94\xFC\x94\x4F\x94\xFE\x94\x2E\x94\x00\x95\x46\x89\x02\x95\x47\x84\x99\x94\xEE\x93\x91\x92\xF0\x93\x42\x92\x5C\x94\x44\x92\x5E\x94\x81\x94\x24\x92\xC3\x94\x57\x94\x5F\x8C\x1D\x91\xFC\x70\xFA\x93\xDF\x82\xBA\x08\x7A\x0E\xF8\x0B\x4C\x6E\x54\x82\xF7\x92\x53\x90\x48\x0F\x55\x90\x15\x8A\xFE\x8A\x4E\x92\xAA\x94\x2F\x92\x20\x87\xAD\x92\xF7\x94\x7B\x93\xF9\x94\x36\x8B\xD6\x94\x42\x83\xD8\x94\x97\x91\xDA\x94\x5F\x92\xDC\x94\x61\x92\x9C\x91\x34\x94\x9E\x91\x36\x94\x91\x8B\x09\x95\xE4\x94\x0B\x95\x5F\x94\xF6\x93\x83\x94\xE9\x8C\x1E\x93\x6E\x90\x4C\x90\x6C\x87\x58\x8E\xC1\x8C\x6F\x87\x63\x90\x17\x95\xC5\x8C\x19\x95\x42\x7F\x6A\x41\x4A\x95\x53\x92\x4C\x95\xBF\x93\xF6\x8B\x07\x93\xA9\x74\x31\x8D\x4E\x94\x33\x8D\x50\x94\xD9\x94\x52\x94\xC8\x93\x2B\x95\x66\x7F\x2D\x95\x13\x93\xBB\x94\xCE\x93\xBD\x94\x48\x93\xBF\x94\x66\x7F\xC1\x94\x36\x95\xED\x92\x5E\x8C\x8F\x90\x3C\x95\x42\x6D\x32\x7B\xF2\x1B\x34\x7B\x52\x8D\xA4\x8F\xB6\x8F\x76\x90\xB9\x89\xEF\x94\x72\x93\x73\x95\xD4\x92\x0D\x92\x4D\x95\x8E\x94\xAF\x94\xD5\x94\xDB\x92\xD7\x94\x3D\x93\x98\x8B\x3F\x93\xB6\x94\x41\x93\x11\x93\x43\x93\x84\x95\x65\x93\xBC\x94\xCD\x91\x5F\x95\x7F\x94\xE5\x94\x62\x95\xE7\x94\x64\x95\x88\x67\x8F\x95\xC6\x94\xB3\x8A\x52\x09\x82\x90\x43\x95\xA3\x92\x44\x0F\x86\x90\xE8\x82\x49\x95\xF1\x94\x01\x94\x46\x94\x24\x94\xF5\x94\x26\x94\xA0\x95\x22\x95\x4F\x95\x24\x95\x0A\x93\x72\x94\xB3\x94\x74\x94\xB5\x94\x80\x95\xB7\x94\x55\x94\xB9\x94\xDF\x94\x85\x95\x15\x93\xCF\x93\x66\x7F\xD1\x93\xB2\x95\x35\x95\x1A\x94\x0E\x95\x0A\x6D\xEA\x94\x1F\x8F\x37\x7B\xB7\x95\x1A\x8F\xF3\x8E\x89\x8E\x3E\x8A\x80\x90\xEB\x09\x96\x90\xB4\x8F\x98\x90\x82\x75\x3C\x0F\x35\x45\x80\x6F\x3C\x7D\x3C\x0F\x1E\x73\x00\x00\x96\x00\x29\x8F\xAE\x6F\xEE\x95\x27\x01\x68\x6F\xA5\x94\xE2\x76\x09\x01\x98\x00\xF6\x95\xFF\x95\x76\x7D\xF8\x95\x09\x01\x51\x6F\xFB\x95\x9D\x10\xF3\x95\x9A\x00\x00\x96\xEF\x6B\x02\x96\x30\x6F\x95\x6A\xD9\x6F\x06\x01\x9C\x00\x09\x96\x61\x81\x42\x10\x9E\x00\x3F\x8E\x14\x87\x08\x0A\x6D\x64\x46\x64\xE5\x66\x0B\x88\x43\x0A\x9F\x6D\x70\x0F\x9F\x00\x70\x73\xD1\x7C\x45\x91\x3D\x90\x17\x96\x43\x0A\x05\x70\x0D\x47\xE6\x66\xE3\x09\x2F\x09\x21\x96\x4A\x65\xA7\x6F\x37\x8E\x39\x7D\x32\x7C\xDA\x5C\x1C\x67\xAB\x7B\x9D\x6C\x5E\x74\x27\x0B\x51\x0C\x2C\x2F\xDA\x64\x0A\x88\x29\x61\x8F\x16\x2F\x09\x32\x8E\x6D\x63\xA7\x6F\x2F\x6C\xBF\x0E\x0D\x24\x90\x95\x60\x90\x39\x74\x8F\x16\x68\x8F\x39\x8E\x09\x96\x33\x88\xD2\x8F\x6B\x88\x2B\x6B\xB1\x6F\x06\x84\x6C\x24\x13\x6D\x7F\x72\x8B\x45\x8B\x94\x04\x94\x8D\x94\x77\x95\x76\x8A\x08\x93\x04\x8D\x87\x92\x5C\x93\x38\x92\x5E\x93\x3A\x92\xEA\x93\x8D\x92\xEC\x93\x8F\x92\x2E\x95\xE5\x92\x30\x95\x93\x92\x32\x95\x95\x92\x34\x95\x97\x92\xA5\x91\x6C\x92\x91\x88\x6E", +"\x92\x9F\x4C\x1D\x93\x74\x83\x63\x88\xAC\x91\x81\x91\x47\x83\xEB\x82\x37\x86\x44\x0F\x37\x7E\x13\x8C\x79\x69\x4F\x96\x24\x87\x51\x96\x73\x67\x53\x96\x66\x4E\xAC\x8E\xF3\x94\x78\x93\x6C\x94\x35\x93\x39\x93\xD4\x94\x35\x92\x52\x95\x47\x84\x54\x95\x8A\x92\x56\x95\xE0\x92\x58\x95\xE2\x92\x5A\x95\x9A\x94\x5C\x95\x9C\x94\x5E\x95\xBE\x94\x0A\x95\x3A\x94\x0C\x95\xC4\x92\xA6\x91\x82\x8F\x70\x92\xAA\x91\x47\x8F\x75\x96\x8C\x67\xDA\x0B\x4A\x8F\xCC\x83\x2C\x7D\x4E\x8F\x69\x7E\x7C\x96\x77\x6A\x7E\x96\xB1\x88\x80\x96\x93\x14\x82\x96\xF8\x55\x5B\x0A\x1E\x95\x31\x92\x20\x95\x23\x95\x8F\x94\xA2\x95\x91\x94\xA4\x95\x93\x94\x5D\x92\x95\x94\x22\x50\x81\x95\x98\x8B\x83\x95\xA8\x93\xD6\x95\xAA\x93\xD8\x95\x98\x8B\xDA\x95\x61\x95\xDC\x95\x60\x94\x37\x95\xA7\x96\x43\x0F\xD6\x91\x61\x20\xA3\x83\x4C\x8D\xB5\x8F\x5C\x7D\xC5\x6B\xCD\x88\xAB\x96\x07\x6D\xAD\x96\x57\x83\xAF\x96\x57\x6E\xB1\x96\xEA\x33\xDE\x02\x55\x96\x48\x94\x05\x94\x58\x96\x02\x8D\xD3\x94\xAD\x8B\xB1\x94\x0A\x94\x73\x94\xFF\x94\xD0\x95\x76\x94\xD2\x95\x78\x94\xD4\x95\x2D\x86\x06\x95\x9F\x59\xC6\x96\x57\x94\xC8\x96\x9B\x96\xB3\x95\x0D\x95\xB5\x95\x4C\x8F\xF5\x88\xD5\x7A\xF7\x88\xFD\x6C\xBC\x95\x60\x81\x9F\x6D\xC6\x5C\xD9\x96\x20\x77\x7D\x69\x03\x97\xC5\x89\xDB\x96\x07\x26\xDD\x96\x71\x6F\x39\x0A\xD6\x83\xA8\x94\xD8\x96\x60\x65\x4C\x5A\x52\x96\x4C\x65\x54\x96\xB4\x96\x55\x92\xB6\x96\xCA\x95\xB8\x96\x8B\x96\xA3\x95\x53\x95\xA5\x95\x57\x94\xA7\x95\xD1\x95\xA9\x95\xA6\x93\xAB\x95\xC3\x96\xAD\x95\x86\x95\xAF\x95\x99\x96\x60\x95\xF6\x96\xCA\x96\x63\x95\xCC\x96\x85\x89\x9D\x10\x3A\x66\x63\x3F\x52\x8E\x07\x8E\x43\x7F\x4D\x8B\x06\x97\xAC\x8B\x08\x97\xFD\x40\x0A\x97\x76\x60\xB3\x96\x4B\x95\x79\x87\x87\x96\x7A\x93\xE5\x96\x50\x95\xF8\x8B\x8C\x96\x66\x7F\x8E\x96\x5F\x96\x8B\x92\x61\x96\xE1\x92\x63\x96\xE3\x92\x65\x96\x9B\x94\x67\x96\xE7\x92\x69\x96\xE9\x92\x6B\x96\xEB\x92\xC2\x94\x8D\x95\x54\x8F\x4A\x92\x7B\x8F\x4C\x92\xB2\x90\xAC\x96\x10\x97\xEF\x63\xB4\x06\x12\x97\x4B\x65\x14\x97\x3D\x97\x07\x89\x3F\x97\x9A\x93\x89\x96\x7C\x93\xE3\x93\x9E\x93\xCC\x95\x92\x94\xE9\x96\x28\x95\xEB\x96\x01\x95\xED\x96\x03\x95\xEF\x96\xE0\x86\xF1\x96\x78\x48\xF3\x96\xB1\x43\x89\x95\x98\x8B\x8B\x95\x1A\x94\x9E\x96\x7E\x89\x38\x95\x71\x92\x89\x0E\x70\x00\x86\x8F\x2E\x97\x48\x0F\x89\x8F\x3C\x8C\x11\x66\x36\x97\x90\x91\x38\x97\x3E\x42\x3A\x97\x70\x58\xDF\x96\x15\x97\x9F\x95\xE3\x96\x5B\x8B\x41\x97\xCB\x95\x28\x8A\xDA\x86\x7F\x95\xEC\x96\x21\x97\xB8\x94\x23\x97\xBA\x94\x25\x97\xD7\x95\x87\x95\x8C\x93\x79\x97\x57\x94\x7B\x97\xCB\x96\x56\x97\xA0\x96\x66\x95\xF8\x90\xBE\x68\xB1\x89\x23\x93\x71\x90\xA0\x92\xC5\x8F\xCA\x92\xEC\x94\xA4\x92\x99\x95\xCE\x92\x05\x97\x5D\x97\xB4\x52\x8B\x97\x12\x45\x8D\x97\x11\x63\x8F\x97\x63\x97\xEC\x89\xC6\x95\x6D\x94\xB7\x96\xA1\x95\x1A\x97\xBA\x96\x1C\x97\xBC\x96\xDE\x92\xBE\x96\xD1\x59\xC0\x96\x57\x94\xC2\x96\x9D\x97\xEF\x93\x14\x94\x31\x95\x7E\x94\x33\x95\x80\x94\x6C\x96\x8C\x95\x4D\x93\xA6\x84\xA0\x8F\x80\x01\xA2\x8F\x27\x93\x99\x8F\x9D\x10\xA0\x7F\x47\x95\xED\x8C\x7D\x96\xB6\x97\xDE\x52\xB8\x97\x19\x00\xBA\x97\x2C\x63\xBC\x97\x74\x95\x3E\x97\xBF\x97\x88\x96\x5A\x96\x9C\x93\xC3\x97\xE7\x96\xCD\x95\x5D\x93\xB4\x94\x09\x8D\xA8\x95\x61\x93\xAA\x95\x63\x93\xAC\x95\xCE\x97\x66\x93\x27\x97\x88\x95\x9A\x96\xA0\x94\x9C\x96\x90\x93\xDE\x95\x48\x84\xD2\x84\xC5\x7F\x0B\x8A\xF2\x92\xB0\x8F\xF5\x8C\xC4\x8F\xCD\x77\xB0\x97\xC7\x8F\xB7\x8F\xB3\x97\x91\x95\x88\x97\xE2\x97\x33\x77\xE4\x97\xE6\x97\x5A\x50\x13\x07\xE0\x96\xD3\x21\x89\x86\x4A\x94\x78\x95\xBD\x73\x09\x93\x96\x97\x14\x8B\x98\x97\x70\x97\x9A\x97\xD3\x95\x9C\x97\xD5\x95\x9E\x97\xC5\x96\xA0\x97\xD0\x93\xA2\x97\x59\x3A\xA1\x94\xFA\x39\x02\x98\xA5\x90\x25\x86\xF7\x7F\x39\x8A\x22\x93\xA8\x78\x10\x98\x25\x93\xA1\x92\xA3\x90\xD3\x96\x73\x6D\x29\x93\x13\x88\x0E\x97\x4E\x96\x12\x98\xDF\x77\x14\x98\x13\x97\x83\x96\x94\x8A\xC4\x95\xF4\x94\x56\x96\xF6\x94\xC8\x95\x1C\x98\xF2\x71\x7A\x95\x25\x95\x7C\x95\x27\x95\x94\x94\x29\x95\xB8\x92\xCA\x97\xC1\x59\x04\x95\x08\x4C\x75\x97\x35\x32\x08\x95\x28\x97\xB1\x95\xC9\x96\xD4\x97\xDD\x95\xF9\x96\x5D\x6E\xCF\x8F\x2A\x80\x35\x97\x40\x98\x35\x73\x42\x98\x61\x97\x44\x98\x18\x98\xAD\x78\x66\x97\xED\x97\x8A\x96\xC2\x93\x44", +"\x97\x98\x8B\x46\x97\xF3\x97\x5F\x93\xF5\x97\xEB\x93\xF7\x97\xED\x93\xF9\x97\x2F\x95\xCF\x97\x68\x96\xD1\x97\x6A\x96\xD3\x97\x54\x97\xD5\x97\x6D\x93\xDC\x89\x6F\x93\x52\x53\x41\x94\x48\x8E\x8C\x84\x67\x98\x4A\x65\x62\x97\xE9\x97\x64\x97\xEB\x97\x40\x97\x67\x97\x42\x97\x5A\x93\x70\x98\x57\x94\x72\x98\xCF\x95\xF4\x97\x20\x97\xF6\x97\x22\x97\xF8\x97\x24\x97\xFA\x97\xAE\x95\x15\x94\xE3\x94\x5C\x98\x2A\x97\x5E\x98\xA5\x97\xD6\x97\xA2\x86\x93\x93\xC2\x8E\x4D\x96\x5C\x0A\x89\x97\x33\x92\x89\x98\x49\x65\x8B\x98\x9D\x95\x54\x92\x91\x97\x1B\x98\x59\x96\x79\x95\x86\x92\x7B\x95\x95\x91\x7D\x95\x55\x95\x21\x98\x2A\x95\x71\x97\x2C\x95\x56\x98\x1D\x4E\xCD\x93\x9F\x97\xFC\x97\xA1\x97\xFE\x97\x6A\x93\x2D\x98\x6C\x59\x2F\x98\xC5\x94\x7E\x90\x3F\x7A\xA1\x80\x10\x91\x87\x94\x87\x98\xE0\x81\xAD\x98\x48\x65\xAF\x98\xDC\x93\x86\x96\x8E\x98\x6C\x98\xB5\x98\x01\x8D\x93\x97\x90\x98\x95\x97\xB5\x86\x29\x8A\xB3\x87\x2B\x8A\x44\x80\x2D\x8A\x07\x7F\x89\x7E\xBB\x75\xD5\x93\xEA\x8B\x5C\x97\x88\x98\xF8\x1C\x60\x97\x8A\x98\x69\x98\x90\x97\x76\x95\xB3\x98\xE4\x96\xDC\x98\xFB\x94\x6B\x97\xBB\x96\x6D\x97\x51\x98\x6F\x97\xBC\x98\x23\x98\xEE\x96\x25\x98\xF0\x96\xC4\x96\x5A\x94\x77\x97\xB3\x4B\x2B\x98\x19\x3A\xA4\x97\x2C\x97\xA6\x97\x72\x83\xCA\x98\x6F\x90\x5B\x6D\xFC\x93\x21\x2B\x64\x98\xEA\x98\x5F\x97\x81\x96\x43\x98\xB2\x96\x0D\x08\x6A\x98\x5C\x80\x69\x97\xC9\x95\x94\x97\xF4\x98\x1F\x98\xC4\x91\xBB\x98\x53\x98\xBD\x98\x82\x95\xBF\x98\xC6\x51\xC1\x98\x28\x98\xC3\x98\x2A\x98\xC5\x98\xC0\x94\xC7\x98\x10\x3A\x2F\x98\x4B\x8B\x06\x01\x88\x81\x4D\x92\xEC\x23\x65\x98\xBE\x73\xD2\x98\x47\x65\xD4\x98\xCF\x94\x9E\x95\xF0\x98\x9D\x93\x18\x99\xF3\x98\x6A\x97\x1B\x99\x82\x93\x1D\x99\xA4\x93\x54\x98\x37\x4E\x21\x99\xA9\x59\x23\x99\x00\x99\x29\x98\xD9\x95\x03\x99\x35\x32\x05\x99\xB4\x95\x2D\x97\x76\x92\x3F\x94\x06\x01\x07\x90\xB4\x97\xE1\x97\x0F\x99\x86\x01\xEC\x98\xAE\x98\xEE\x98\xBD\x97\x1B\x8C\xD1\x94\x56\x92\x19\x99\xC2\x97\x6F\x98\x1B\x97\x8D\x96\x1D\x97\x43\x50\xC8\x97\x4A\x4F\x41\x99\x35\x32\xCC\x97\x26\x98\x9D\x98\x26\x97\x9F\x98\xB0\x95\xD2\x97\xDB\x95\xA3\x98\x06\x99\xA5\x98\x27\x90\xE0\x95\x01\x8E\xB5\x93\x11\x90\x51\x4B\x0E\x99\xD1\x98\xEB\x98\x11\x99\x68\x98\x13\x99\xF0\x07\x15\x99\x8B\x84\xF1\x98\xDB\x98\x6D\x98\xE6\x96\x05\x8D\xB2\x94\xF2\x97\x96\x98\x74\x98\x98\x98\x76\x98\x9A\x98\x78\x98\x9C\x98\x7A\x98\xFB\x97\x6C\x99\x5B\x98\x6E\x99\x5D\x98\x80\x98\x5F\x98\x4D\x99\xB4\x6C\xC2\x8B\x00\x6E\x79\x99\xE1\x83\x33\x99\x46\x65\x35\x99\x85\x96\xBE\x93\x5B\x99\x17\x97\x5D\x99\x3A\x99\x84\x99\x0A\x84\xF0\x97\x6C\x97\xCE\x95\xEA\x96\x97\x98\x99\x97\x99\x98\x9B\x97\x9B\x98\xCD\x97\x90\x99\x9E\x98\xD0\x97\xA0\x98\x94\x99\xA2\x98\x96\x99\xA4\x98\x82\x98\x5E\x8C\x66\x69\x13\x90\x54\x55\x49\x8E\x30\x99\x54\x99\x6B\x00\x9F\x6D\x38\x7C\xEB\x29\xAF\x90\xC1\x99\x7A\x99\x10\x99\xB0\x96\x12\x99\xDE\x96\x10\x08\x38\x7C\xAD\x00\x00\x90\x22\x0F\x31\x99\xA2\x79\x9E\x99\xFE\x7D\x44\x98\x66\x69\x9F\x88\x01\x01\xA3\x00\xD1\x99\xAB\x98\x7B\x93\x6C\x24\xA7\x84\x37\x5C\xF0\x3D\xB5\x06\x31\x64\xB1\x73\x3B\x97\x74\x08\x41\x65\xCC\x87\x03\x01\xDB\x99\x1B\x90\xEB\x2F\xD3\x99\x59\x5F\xB4\x06\x36\x98\x7F\x66\xF7\x3D\x53\x3D\x1B\x64\x41\x0D\x0B\x97\xC2\x08\x41\x65\x51\x99\x48\x45\x0F\x8F\xB5\x97\xC2\x99\x66\x69\xB0\x81\x93\x61\xC0\x99\x06\x01\xDD\x99\xE5\x96\x6C\x24\x66\x69\x75\x4B\xA6\x00\x02\x9A\xED\x99\xFE\x99\x41\x65\x12\x8C\x31\x49\xDC\x99\xEE\x99\x08\x3C\xCA\x99\xDC\x96\xCC\x99\xF7\x99\xFA\x63\x66\x69\xBC\x90\x45\x4D\xC7\x99\x03\x9A\x11\x9A\xD3\x33\x13\x9A\x09\x97\x15\x9A\xE6\x99\xE4\x99\x66\x69\x48\x50\xA8\x00\x0A\x9A\x02\x01\x04\x9A\x67\x97\x06\x9A\x41\x65\xBF\x6E\x09\x01\x02\x62\x14\x90\x0F\x97\xC2\x99\x56\x99\xD3\x98\x44\x98\xB2\x7B\x2E\x6F\x03\x01\xA9\x00\x27\x9A\x2C\x0F\x1D\x9A\xDF\x25\x43\x91\x44\x0F\x23\x4E\xAF\x00\xDF\x8E\x29\x9A\x84\x99\xD5\x99\x44\x65\xA0\x99\x17\x00\x7F\x72\xE2\x5A\x66\x69\x77\x75\xC5\x55\x42\x9A\x3C\x9A\x45\x9A\x77\x6C\x44\x98\x83\x7D\xD4\x70\x0B\x0D\xFB\x33\x4A\x9A\x41\x65\x1E\x7D\xB0\x00\x4E\x9A\x32\x9A\x7C\x99\xED\x98\x7E\x99\x13\x07\x53\x9A\xC6\x70\x6D\x0C\x1E\x49\x68\x00\xE2\x5A\xB2\x7B\x22\x90\x35\x88\x53\x99\xC9\x99\x55\x99\x5D\x9A\x57\x99\x5F\x9A\x3F", +"\x88\xEF\x98\xA3\x99\xE0\x93\xC1\x97\xA6\x99\xD9\x98\x5B\x96\xB7\x98\x88\x92\xB9\x98\x8F\x96\x3F\x99\x0E\x94\x66\x99\xBB\x63\x43\x99\xE1\x80\x58\x98\x1D\x4E\x5A\x98\xFD\x97\x29\x97\xFF\x97\xF7\x96\xC4\x92\xC9\x98\x74\x99\x59\x8D\xB1\x97\x44\x0F\x70\x39\xAC\x00\x10\x9A\x5C\x9A\xCB\x99\x7D\x99\xCD\x99\x12\x64\x66\x69\x11\x7C\x03\x01\xAE\x00\x5B\x9A\x6B\x9A\x6B\x00\x33\x9A\x34\x99\x44\x98\xDB\x7D\x88\x66\x43\x58\x21\x82\x18\x7D\xFF\x7C\xD1\x1E\x7C\x5A\x2B\x90\xD0\x7C\xE8\x98\x31\x9A\x9C\x9A\x9E\x9A\x9F\x99\x58\x99\x8C\x98\xBE\x97\x48\x98\xC7\x95\x92\x97\xAB\x8B\xAE\x94\x2B\x94\xAA\x99\x88\x99\xAC\x99\x8A\x99\xAE\x99\x8C\x99\xB0\x99\x8E\x99\xB2\x99\x66\x96\x7B\x98\x50\x97\x7D\x98\x52\x97\x7F\x98\x4B\x93\x55\x97\x72\x99\xF1\x87\x09\x99\x68\x95\x6E\x73\x05\x88\x09\x01\xA1\x00\x1D\x88\x41\x96\x77\x38\xE3\x33\xFB\x37\x78\x67\x13\x98\xF8\x1C\xFD\x81\x19\x95\x6D\x8C\x0B\x9A\xAD\x9A\x6D\x9A\x34\x9A\x6F\x9A\x73\x88\x71\x9A\x65\x97\xD2\x94\x3B\x99\x75\x9A\x1D\x98\x77\x9A\x4E\x98\xB8\x98\x50\x98\xBD\x96\x52\x98\x40\x99\x1F\x99\xC1\x96\x80\x9A\x68\x84\x82\x9A\xC6\x51\x84\x9A\xC4\x98\x86\x9A\xC6\x98\x00\x98\x3C\x94\x2F\x98\x10\x95\x96\x95\x5C\x7D\x47\x0F\x65\x8C\xEC\x1F\x48\x96\xF6\x8F\x48\x0F\x44\x90\xC0\x95\xC8\x99\x9D\x99\x7B\x99\x93\x9A\x5E\x9A\x95\x9A\x7F\x99\xE3\x9A\xD7\x98\xE5\x9A\xA7\x99\x07\x94\xEF\x97\x86\x99\xE8\x96\xAB\x99\x6E\x97\xAD\x99\x22\x98\xAF\x99\x24\x98\xB1\x99\x69\x99\xB3\x99\x6B\x99\xB5\x99\x6D\x99\x7E\x98\x6F\x99\xB9\x99\x71\x99\xBB\x99\x1E\x77\xFD\x9A\x3A\x98\xE5\x8F\x92\x8C\xCD\x7A\x41\x95\x43\x87\x02\x92\x5A\x1C\x99\x8C\x0F\x98\xE0\x97\xE9\x98\xDE\x9A\x0B\x9B\x6E\x9A\x0D\x9B\x17\x98\x0F\x9B\xB3\x9A\xC0\x97\x18\x97\x5E\x99\x69\x97\xB8\x9A\xF6\x98\x17\x9B\xF8\x98\x19\x9B\xFA\x98\x1B\x9B\xFC\x98\x1D\x9B\xFE\x98\x27\x98\x46\x99\x25\x99\x48\x99\x27\x99\x8A\x95\x29\x99\x1D\x4E\xA3\x94\x23\x89\xE3\x95\x0A\x99\xF6\x8D\x6A\x95\x61\x90\xC2\x8C\x30\x9B\x3B\x98\x73\x87\xDB\x9A\xCF\x67\x43\x9A\x76\x9A\x12\x9A\x6C\x9A\x37\x9B\xE0\x9A\x39\x9B\x70\x9A\x59\x99\x74\x8C\x72\x9A\x4E\x95\xA5\x99\x4B\x98\x55\x8D\x7A\x8C\xF5\x98\xC5\x97\xF7\x98\xED\x9A\xF9\x98\x1E\x99\xFB\x98\x72\x97\xFD\x98\x74\x97\xFF\x98\x7C\x94\x01\x99\x34\x48\x49\x99\x7E\x59\x51\x9B\xC6\x51\x53\x9B\x6C\x90\xEA\x8C\x44\x96\xB0\x82\x72\x90\xEF\x8C\x03\x9B\x3B\x6E\xF3\x8C\x33\x9B\x86\x9B\x35\x9B\x09\x9B\x1F\x9A\x39\x97\x21\x9A\x8E\x97\x3C\x97\xB1\x9A\x5A\x99\xE4\x9A\x5C\x99\xE6\x9A\x6D\x9B\xD7\x9A\x6F\x9B\x3D\x99\xE8\x93\x2A\x8A\xCD\x82\x2C\x8A\x1E\x80\xE4\x98\x22\x80\x29\x7B\x17\x90\x54\x9B\x84\x9B\xB8\x95\x1B\x87\xBA\x95\x1E\x8D\x5B\x9B\x04\x9B\xB9\x63\xBF\x95\xF2\x8E\xAA\x98\x4F\x9A\x0A\x9B\x14\x9A\x94\x9A\x16\x9A\xE2\x9A\x68\x9B\x2B\x8D\x6A\x9B\x4A\x98\xB4\x98\xE8\x9A\x3A\x93\xA9\x99\x42\x9B\xBA\x9A\x18\x9B\xBC\x9A\x1A\x9B\xBE\x9A\x1C\x9B\xC0\x9A\x1E\x9B\xC2\x9A\x91\x99\x21\x9B\x93\x99\x23\x9B\x95\x99\xC8\x9A\x81\x98\xB1\x93\x48\x90\x63\x94\x47\x8D\x5A\x1C\x55\x9B\x9B\x7B\x18\x83\xE3\x3A\xE8\x95\xA1\x09\x15\x83\xFC\x87\x91\x90\xE7\x95\x06\x8E\x48\x0F\x02\x97\x3A\x9A\x00\x00\x5E\x7C\x47\x94\xA7\x9A\x3A\x3B\x70\x7D\x4B\x96\x24\x90\x44\x8A\x79\x69\xD2\x6F\xB5\x6F\x73\x64\x34\x23\x80\x99\xE7\x84\x6B\x9B\x99\x9B\xBD\x9B\x4C\x98\xB6\x98\xEA\x9A\x79\x9A\xEC\x9A\xC7\x97\xEE\x9A\x7D\x9A\xF0\x9A\xCB\x97\xF2\x9A\xBC\x80\xF4\x9A\xA9\x59\xF6\x9A\x26\x99\xF8\x9A\x28\x99\xFA\x9A\xA2\x94\x7D\x97\xA8\x91\x9A\x92\x04\x97\xAB\x91\x65\x88\x48\x83\x79\x96\x9D\x10\x7B\x96\x3E\x98\x5C\x0A\xEF\x9B\x07\x74\x5A\x6F\xB1\x0E\xF3\x9B\x1A\x98\x39\x99\x9A\x9B\xBE\x81\xD8\x86\xFC\x9B\x3E\x93\x64\x99\x1D\x4E\x97\x94\xBE\x98\x73\x97\xBC\x92\x04\x9C\x19\x6D\x06\x9C\x4E\x9B\x08\x9C\x50\x9B\x0A\x9C\xFA\x39\x0C\x9C\x6F\x92\xBD\x8F\xA1\x96\x7F\x91\xA3\x96\xCB\x29\xA5\x0B\xAE\x91\x9A\x88\xFA\x96\xAC\x90\x9D\x10\x4F\x8F\x86\x98\xD7\x2B\xCD\x6F\xF1\x9B\x6D\x1C\x1C\x9C\x98\x8A\xB5\x9A\x51\x8A\x3B\x99\x41\x9B\x71\x9B\x43\x9B\x73\x9B\x45\x9B\x75\x9B\x47\x9B\x77\x9B\x49\x9B\x79\x9B\x4B\x9B\x7B\x9B\x47\x99\xC7\x96\x7E\x9B\x88\x59\x80\x9B\xA9\x59\x82\x9B\x5E\x8C\x55\x8F\xD9\x03\x0C\x05\x58\x8F\x0C\x98\xDA\x91\xA7\x83\xD6\x96\x16\x9C\x27\x01\x18\x9C\x9C\x6F\xF7\x32\x1B\x9C\x3B\x9B\xE1\x96\x57\x96\x82\x99\xB6", +"\x9A\xC1\x97\x4A\x9C\x61\x99\xC6\x97\x23\x9C\xFE\x9B\x30\x94\x7E\x9A\xC6\x51\x68\x99\x4A\x9B\x6A\x99\xC2\x98\x92\x99\x85\x9A\xA1\x98\x87\x9A\x2B\x97\x4C\x99\x07\x99\xCE\x8F\xFB\x96\x5E\x6D\xFD\x96\xD1\x83\x39\x98\x41\x6D\x04\x92\x30\x89\xCF\x98\x41\x9C\x4C\x65\x41\x73\x21\x75\xB9\x9B\x8D\x91\xBB\x9B\x47\x9C\x20\x8C\x49\x9C\x93\x98\xE4\x2E\x95\x98\xBB\x9A\x60\x96\x75\x98\x62\x96\x77\x98\x64\x96\x79\x98\xCA\x9B\xB4\x99\x7C\x98\xB6\x99\xCE\x9B\xB8\x99\xD0\x9B\x97\x99\x84\x9C\x0F\x87\xFC\x83\x34\x97\x8E\x9C\x06\x01\x68\x9C\x3F\x96\x43\x9C\x3E\x05\x45\x9C\x49\x94\x1E\x9C\xF7\x9B\x6E\x9B\x4D\x98\x70\x9B\x73\x9C\x72\x9B\xFD\x9B\x74\x9B\xEF\x9A\x76\x9B\x27\x9C\x78\x9B\x29\x9C\x7A\x9B\xE1\x94\x7C\x9B\x1D\x4E\xF5\x96\x81\x9C\x70\x99\x83\x9C\xCA\x9A\xA4\x90\x7A\x8F\x90\x10\x7C\x8F\xC9\x94\xEE\x9B\x42\x9C\x6A\x9C\x6C\x19\xB5\x9C\xE2\x96\x6F\x9C\x48\x9C\x12\x9B\x1A\x99\xDE\x98\x97\x97\x9F\x9B\x46\x85\xA1\x9B\x68\x83\xA3\x9B\x78\x82\x23\x92\x7C\x97\x6E\x96\x31\x8F\x7E\x97\x90\x8F\x0F\x9C\xA2\x96\x83\x97\x4E\x99\x86\x89\x8C\x9B\xB9\x95\xD3\x9C\x90\x9C\xB3\x9C\x76\x72\x95\x9B\x69\x9B\x97\x9B\xA4\x99\xF6\x9B\xF2\x98\xDB\x9C\x3C\x99\xDD\x9C\x20\x98\xDF\x9C\x18\x8B\xE1\x9C\xC7\x84\xE3\x9C\x9B\x83\xE5\x9C\xBA\x99\xD2\x9B\xEE\x92\x9B\x92\x76\x84\x9D\x92\x08\x98\x9F\x92\x6A\x6F\x10\x8A\x8A\x9C\x44\x95\xB9\x63\x9B\x8F\x40\x9C\xB0\x9C\xD4\x9C\x90\x33\x6B\x9C\x93\x9C\xAC\x94\xBC\x9B\xFB\x9C\x61\x9B\x8B\x83\x99\x9C\x3E\x52\x62\x99\xE1\x59\x24\x9C\xC6\x51\x26\x9C\x20\x99\x28\x9C\x88\x93\x2A\x9C\x7C\x6D\x2C\x9C\x57\x9C\x4F\x9B\x7A\x97\x5A\x9C\x19\x6D\x5C\x9C\x57\x97\xC7\x92\xD9\x97\xC9\x92\xFF\x96\xDC\x97\x48\x0F\xDE\x97\xFB\x92\x52\x99\x77\x6A\xB1\x9C\x47\x0F\x91\x9C\x4C\x87\xE5\x84\x3C\x9B\xEC\x97\x1E\x9D\x68\x97\xFA\x94\xFD\x9C\x21\x9C\x1E\x85\xE0\x98\xA0\x9B\xE2\x98\xA2\x9B\x48\x80\xE5\x98\xC1\x7F\xA6\x9B\x09\x9D\xA8\x97\xF1\x92\xC7\x7F\xF3\x92\x6D\x7F\x0F\x9D\x26\x93\x11\x9D\xBD\x95\x13\x8A\x70\x95\xCF\x67\x3E\x9D\x43\x0F\x40\x9D\xD7\x9C\x6E\x9C\xB7\x9C\x1D\x9D\xBE\x9B\x1F\x9D\x60\x99\x45\x97\x22\x9D\xC8\x63\x24\x9D\x6E\x82\x78\x9C\xA9\x59\x7A\x9C\x53\x9C\x7C\x9C\x24\x99\x7E\x9C\xF7\x9A\x80\x9C\xF9\x9A\x88\x9A\x01\x98\x60\x98\xCA\x1C\xEF\x92\xDB\x82\x1F\x93\x50\x1F\x21\x93\xC1\x8F\x35\x98\x34\x9B\x59\x9D\x38\x98\xD2\x96\xF8\x92\xB9\x63\x2A\x93\x51\x93\x00\x00\x60\x9D\x3F\x0F\x62\x9D\x6C\x9C\x19\x98\x46\x9C\xD9\x9C\x97\x9C\xFC\x9C\x72\x9C\x6A\x9D\x74\x9C\xA6\x95\x6D\x9D\x88\x7F\x6F\x9D\x19\x6D\x71\x9D\xC4\x9C\x54\x9C\xC6\x9C\x56\x9C\xF4\x96\x58\x9C\xA9\x59\x4B\x99\xF8\x96\x98\x99\x26\x92\x41\x65\x2F\x85\x81\x05\x8B\x9D\x8D\x9D\x3B\x0F\x8F\x9D\x1A\x9D\x1F\x95\x73\x9A\x3E\x9B\xE7\x9A\xF8\x9B\x1E\x98\xFE\x9C\x1C\x99\x00\x9D\xDD\x8C\xDE\x94\x7B\x9C\x1F\x9B\x7D\x9C\xCC\x9B\x7F\x9C\xB7\x99\xCA\x9C\x25\x9B\xCC\x9C\x27\x9B\xFC\x7D\x84\x98\x05\x5F\xAF\x9C\x1A\x39\x17\x9D\xD4\x66\xF2\x9B\x90\x9D\x6B\x98\x11\x9B\x45\x9D\x91\x98\x2A\x94\x20\x9D\x35\x32\x9B\x9C\xC3\x9B\x9D\x9C\x8B\x99\x9F\x9C\x8D\x99\xA1\x9C\x8F\x99\xA3\x9C\x20\x9B\xA5\x9C\x22\x9B\xC6\x9A\x24\x9B\xA9\x9C\x07\x9D\xFC\x8F\x80\x86\xDE\x8F\x15\x9D\xCB\x9D\xF3\x9C\xD5\x9C\xCE\x9D\xB1\x9D\xB5\x96\xB3\x9D\x6C\x9B\xB8\x9C\x9B\x9B\xBA\x9C\x9D\x9B\x51\x94\xBA\x9D\x39\x8D\xBC\x9D\x72\x9D\xBE\x9D\x74\x9D\xC0\x9D\x76\x9D\xC2\x9D\x78\x9D\x82\x9C\xA7\x9D\xAB\x9C\xCB\x9A\x8B\x9A\x65\x8D\xB5\x93\xDA\x8A\xB7\x93\xFA\x81\x17\x9C\xCC\x9D\x96\x58\x19\x9D\xF6\x9C\xBA\x9B\xF8\x9C\xF1\x9D\xFA\x9C\x83\x99\xD2\x9D\xDD\x98\x49\x9D\xB2\x87\x63\x84\xB4\x87\x4D\x9D\xE2\x9C\x4F\x9D\xA4\x9B\xFA\x75\xE7\x98\xEA\x9D\xD6\x41\x0D\x9E\x29\x61\x0F\x9E\xB0\x98\x75\x95\x95\x9C\x93\x9D\x48\x8C\x98\x9C\x69\x9D\x71\x98\x6B\x9D\x20\x51\x9A\x9D\x7C\x6D\x26\x9D\xF1\x9A\x28\x9D\xCC\x93\x2A\x9D\xC5\x6D\x2C\x9D\xA3\x9D\x2E\x9D\xA3\x97\x30\x9D\x7C\x6D\x32\x9D\xFC\x7D\xCC\x9A\x11\x95\x31\x9B\xEF\x85\x0D\x99\xCA\x9D\x23\x9E\xEC\x9D\x18\x9D\xD6\x9C\xCF\x9D\x16\x99\x47\x9D\xB5\x9D\xB9\x9C\xF9\x9B\xBB\x9C\x97\x9D\xBD\x9C\x75\x9C\xBF\x9C\xFF\x9B\xC1\x9C\x27\x9D\xC3\x9C\x29\x9D\xC5\x9C\x07\x95\xC7\x9C\xC6\x51\xC9\x9C\x01\x9E\xCB\x9C\x03\x9E\xCD\x9C\x38\x95\x2C\x99\x65\x79\xAD\x9D\x24\x9E\x0C\x6F\x97\x58\x92\x9C\x10\x9E\x94\x9C\x12\x9E\xF5\x9B\xFC", +"\x9C\x4E\x9E\xF4\x9D\x50\x9E\xF6\x9D\x7E\x95\xF8\x9D\xC8\x91\x02\x9D\x9A\x86\x04\x9D\x29\x85\x06\x9D\x26\x9B\x08\x9D\xBC\x99\x05\x90\x39\x86\x66\x9C\x8F\x9C\x4B\x65\xB0\x9D\x6C\x9E\x1B\x9D\x96\x9C\x2B\x9E\x95\x9D\xD5\x9D\xCF\x63\x2F\x9E\xC6\x51\x1F\x97\xBD\x9A\xDB\x9D\xBF\x9A\xDD\x9D\xC1\x9A\x4E\x97\xC3\x9A\x9D\x94\x51\x97\xAD\x93\x53\x97\xE5\x9D\x7D\x9E\xE7\x9D\x8E\x8F\xD4\x9B\xB4\x93\x9A\x87\x77\x99\x06\x01\xBE\x99\xE0\x99\x07\x6D\xAE\x9D\x9F\x6F\x49\x9E\xEE\x9D\x86\x9E\xB2\x9D\x6F\x9E\x16\x9E\x19\x97\x5F\x99\xC4\x97\xBC\x9C\x4C\x9C\xBE\x9C\x4E\x9C\xC0\x9C\x50\x9C\xC2\x9C\x52\x9C\x9F\x9D\x73\x9D\x4C\x9B\x75\x9D\x07\x9C\x77\x9D\x09\x9C\x79\x9D\xFB\x9A\x7B\x9D\x13\x6C\x85\x94\x9B\x99\x46\x9E\x5F\x62\x68\x9E\x1A\x9C\x4A\x9E\xEF\x9D\x16\x97\x13\x9E\x70\x9E\x1F\x9C\x68\x82\x18\x9E\xDF\x98\x1A\x9E\xE1\x98\x66\x83\x13\x94\xCB\x9B\xE1\x9D\xCD\x9B\xE3\x9D\xCF\x9B\xAF\x93\xC9\x9A\xC6\x9D\xD7\x97\x3B\x8E\xA6\x94\x57\x34\x4D\x8B\xA7\x9E\x1A\x96\x25\x9E\xCB\x9E\xAB\x9E\xF0\x9D\xAD\x9E\x67\x9D\x46\x9D\x51\x95\x2D\x9E\x94\x98\x8D\x9E\xA9\x59\x8F\x9E\xC5\x9B\x91\x9E\xC7\x9B\x93\x9E\xC9\x9B\x95\x9E\xD8\x9E\xC4\x9A\xA6\x9C\xDB\x9E\xA8\x9C\xDD\x9E\xD1\x9B\x9D\x9E\xDB\x8F\x9F\x9E\xEB\x94\x9A\x87\xC7\x94\x2C\x90\x22\x9E\xC8\x9E\x48\x9E\xCD\x9D\x44\x9C\x4B\x9E\x81\x99\x65\x9D\x15\x9E\xEC\x9E\xA8\x99\x15\x9B\xF1\x97\x5E\x96\x73\x98\xD9\x9D\x90\x9E\x4A\x97\xA0\x9C\x4C\x97\xA2\x9C\xF9\x9E\xA4\x9C\xFB\x9E\xE2\x9D\x99\x9E\xC7\x9A\xFF\x9E\xAA\x9C\x63\x9E\x5C\x59\x41\x9E\xFE\x9A\x5C\x9B\x4F\x91\x56\x90\x3C\x9D\xA6\x9E\xC9\x9E\xF6\x37\xAA\x9E\x27\x9E\xEA\x97\x43\x9D\x8F\x98\xCF\x9E\xF3\x9D\x20\x9C\xFD\x86\x4A\x9D\xD4\x9E\x4C\x9D\xD6\x9E\xE3\x98\x1E\x9E\xE4\x9C\xA5\x9B\x7B\x90\x3A\x95\x6B\x75\xA9\x9B\x43\x0F\x01\x9B\x91\x6A\x89\x9B\x0B\x99\x43\x90\x5E\x9D\x11\x66\xE5\x9E\x59\x6F\x2F\x9F\x0C\x9F\xCC\x9E\xB2\x98\x0F\x9F\x70\x9C\x3E\x9B\x96\x9D\x2E\x9E\x98\x9D\x1E\x97\x31\x9E\x2A\x81\x9C\x9D\x7C\x6D\x9E\x9D\x5A\x9E\xA0\x9D\x5C\x9E\xA2\x9D\x78\x97\x3B\x9E\x2C\x98\x30\x9C\xC8\x98\xC3\x9E\xC3\x1C\x29\x9B\x94\x8F\xE0\x0E\xBA\x08\x53\x82\x2F\x9B\x62\x9C\x97\x95\x54\x90\x4B\x9F\x7D\x69\x4D\x9F\x3A\x96\x69\x9E\x26\x9E\xD5\x98\xA2\x99\x6E\x9E\x1C\x9D\x10\x9F\xB6\x9D\xE9\x9A\x51\x9E\x57\x9F\x53\x9E\x99\x9D\x76\x9C\x96\x94\x5C\x9F\xC5\x6D\x5E\x9F\x36\x9E\x5B\x9E\xF2\x96\x62\x9F\x02\x99\x64\x9F\x04\x99\x3D\x9E\xC5\x6D\x3F\x9E\x72\x83\xD7\x9B\x42\x9E\x49\x96\x65\x8E\x6B\x95\xD3\x02\x84\x82\xCB\x98\x65\x90\xB9\x63\xC6\x8C\xA9\x98\x67\x9C\x2E\x9F\x89\x27\xE8\x9E\x31\x9F\x8D\x98\x33\x9F\xD8\x98\x11\x9F\x13\x9B\xB0\x9E\xC0\x9B\x4B\x9C\xC2\x9B\x44\x9B\xC4\x9B\x46\x9B\xC6\x9B\x48\x9B\xC8\x9B\xBD\x9D\xDF\x9D\xBF\x9D\xD9\x9E\xC1\x9D\xA7\x9C\xC3\x9D\x9B\x9E\xC5\x9D\x7E\x9E\x28\x9B\xA8\x9B\x9B\x9F\xAF\x82\xC3\x8F\xEE\x8C\x93\x95\xF0\x8C\x6E\x95\x8B\x9B\xEE\x94\x2C\x9F\x2B\x6B\x75\x9F\x06\x70\xE7\x9E\x30\x9F\x79\x9F\xD0\x94\x7B\x9F\x88\x9E\x38\x93\x8A\x9E\xEF\x9E\x9A\x9C\xF1\x9E\x19\x6D\xF3\x9E\xB0\x9F\xF5\x9E\xB2\x9F\xF7\x9E\xB4\x9F\x1D\x9F\xE0\x9D\x1F\x9F\xDA\x9E\x21\x9F\xE4\x9D\x23\x9F\xE6\x9D\x52\x9D\x8E\x95\xBF\x9F\x56\x9B\xBF\x8C\xAA\x9B\x1D\x8D\xC7\x87\x37\x9D\x75\x90\x9D\x10\xB0\x9B\xE4\x89\x74\x9F\xA1\x9F\x7F\x1D\xA3\x9F\xCF\x9F\x37\x99\x29\x9E\x53\x9F\xDA\x9C\xAE\x9E\x48\x9D\x38\x9F\x19\x9E\xDC\x86\x1B\x9E\x3C\x9F\x4E\x9D\x7F\x81\x50\x9D\x7A\x82\x01\x9F\xF1\x8F\x06\x9E\x29\x90\x8E\x90\xE9\x9F\xD8\x9B\xC4\x8E\xB5\x6E\xDB\x9B\xCD\x09\xDD\x9B\x50\x8D\xDF\x9B\x94\x77\xEA\x8D\x44\x0F\x3C\x06\xB1\x00\x11\x96\xF7\x95\xB2\x91\xBD\x73\x1B\x9A\x67\x67\x8A\x86\x8D\x05\x11\xA0\x5D\x8E\xC9\x90\x14\x69\x60\x8E\x49\x74\x10\x73\x7D\x69\xD7\x6F\x09\x84\x22\xA0\xB2\x7B\x68\x8E\xF4\x90\x20\xA0\x92\x82\x8D\x05\x36\x91\xBE\x68\x6F\x8D\x39\x91\xFC\x90\xDA\x74\x2E\x91\xDB\x8E\x00\x91\xCE\x74\x25\x91\x31\xA0\xE9\x84\x33\xA0\xD0\x90\x06\x67\xD2\x90\xFB\x90\x4B\x72\x3B\x91\xDA\x8E\xFF\x90\xFC\x81\xD8\x90\x32\x91\xD6\x6F\x3C\x9A\x94\x05\xDD\x90\x8E\x8E\xE3\x6A\x21\x91\xE3\x90\xF8\x6A\x9D\x10\xEC\x74\xDF\x8E\x2B\xA0\xF8\x86\x41\xA0\xE9\x90\x48\x70\x77\x71\xB7\x90\x95\x8D\x0B\x91\x23\x8F\x74\x8D\xA2\x8E\x50\x91\x74\x93\x79\x69\x59\xA0\xE5\x8A\x5B\xA0\xF7\x90\x9F\x8D\xC9\x8E\x58\x91\x63\xA0\x9D", +"\x10\x02\x91\x89\x91\x2B\x6B\x68\xA0\xD2\x8C\x6A\xA0\x42\x9F\x39\x06\xBA\x8E\x0A\x91\xE2\x90\x25\xA0\xF1\x90\x71\x0F\xC0\x8E\x1A\x91\xFE\x55\x4E\xA0\x76\xA0\x2D\x75\x47\x72\xB8\x8D\x6D\xA0\x93\x70\xB9\x63\x19\x91\x30\xA0\x81\xA0\x21\xA0\x8C\x01\x12\x91\xD5\x8E\x38\x6B\x87\xA0\x51\x71\xDD\x8E\x3E\xA0\x8C\xA0\x32\xA0\x8E\xA0\xC4\x90\x29\x91\xE8\x8E\x37\xA0\x46\xA0\x39\xA0\x3C\x91\x3B\xA0\x30\x91\x95\xA0\x76\x58\x82\xA0\x98\xA0\xE6\x8E\x0B\x0D\x38\x91\x5F\xA0\x71\x8D\x7B\xA0\x0C\x91\xCA\x90\xB9\x63\xE4\x8D\xE8\x8F\x4D\xA0\x8D\xA0\x16\x01\xCF\x9C\x71\x0F\xCC\x71\x2E\x96\x29\xA0\x67\xA0\xA4\xA0\xB3\xA0\x61\x81\x0E\x8F\x07\x88\xB9\xA0\xB2\xA0\x2F\x7D\x20\x90\x48\x0F\xC1\x7B\xB2\x8D\x2A\xA0\xBA\xA0\x8B\x5F\x54\x91\x00\x8E\x8C\x9A\x20\x8F\xC6\x72\x7C\xA0\x94\x6A\x20\x8E\xEE\x86\x00\x00\xB2\x00\xD2\x9A\x08\x82\x82\x36\xA8\x9E\x16\x42\x53\x0C\xA8\x96\xB9\x63\x5B\x91\x2F\x99\x06\x01\x7A\x52\x7C\x7D\xF1\x40\xA0\x3E\x63\x9D\x49\x98\xD2\x9F\xB1\x92\x7F\x9F\x74\x9E\xBA\x98\x76\x9E\x1A\x92\x78\x9E\x90\x8B\x7A\x9E\xC2\x88\x7C\x9E\x43\x8D\x32\x9C\x71\x96\xA7\x97\x73\x96\x10\x9C\x38\x8F\x12\x9C\x3A\x6D\x69\x88\x4C\x96\xB1\x81\x79\x69\xDF\xA0\x5C\x73\x4C\x66\xBA\x5B\x62\x01\xE3\xA0\xB4\x9A\x2A\x9E\xD3\x9F\xFD\x9F\x56\x9F\xF0\x9E\x58\x9F\x63\x99\x84\x9F\xBF\x96\x00\x9C\x55\x98\x35\x9E\x57\x94\x45\x99\x55\x9C\x4D\x9B\x2D\x9D\x2E\x9C\x2F\x9D\x66\x9F\x10\x3A\xF2\xA0\x94\x77\xEA\x9C\xF5\xA0\xA2\x96\x76\x83\x3A\x9C\x83\x91\x02\x7E\x3D\x9C\xA9\x96\x9E\x88\x4D\x8B\xFE\xA0\x44\x65\xDA\x72\x51\x33\x03\xA1\x3D\x9B\xF2\x9D\x66\x9D\x7E\x9F\xBF\x9B\x13\x9F\xB9\x9A\x15\x9F\x89\x99\x17\x9F\xF4\x9E\x19\x9F\xDC\x9D\x1B\x9F\xDE\x9D\xDF\x9F\xB6\x9F\xE1\x9F\xB8\x9F\xFD\x9E\xBA\x9F\xE5\x9F\x9C\x9E\xE7\x9F\x33\x9D\x6D\x63\xCF\x96\xE8\x31\x48\x9F\xF6\x8D\xD5\x96\xDC\x91\x82\x9E\xDE\xA0\x60\x65\x29\xA1\x65\x38\x2B\xA1\x44\x9D\xA8\x9F\xAF\x9E\x40\x9B\x8B\x9E\xC6\x51\xD7\x9D\xAE\x9F\x35\xA1\xDA\x9F\x37\xA1\x92\x9E\x39\xA1\x94\x9E\x96\x96\x4F\x97\x97\x9E\xC5\x9A\xE3\x9F\xDC\x9E\xF0\xA0\x62\x9E\xDF\x9E\x85\x9C\x64\x8F\xBD\x7E\x66\x8F\xD0\x83\x48\xA1\x81\x76\x8C\x9C\x4E\x8B\x8B\x9D\x27\xA1\x6D\x63\x4F\xA1\x94\x3B\x51\xA1\x34\x9F\xFD\x9F\x71\x9E\x37\x9F\x7C\x8C\x39\x9F\x01\xA0\xD5\x9E\xC5\x84\xD7\x9E\x1E\x9F\x62\xA1\xFC\x9E\x64\xA1\xFE\x9E\x66\xA1\x89\x9A\x68\x9F\x1A\x6D\x27\x92\x72\xA1\x4E\xA1\x00\xA1\xB1\x5B\xF8\x8E\x51\x9F\x38\x99\xD4\x8C\x7A\xA1\xD1\x9E\xFF\x9F\xD3\x9E\x7E\xA1\x3B\x9F\x80\xA1\x3D\x9F\x05\xA0\x1F\x9E\x07\xA0\x43\xA1\xC7\x9D\xA8\x6C\x71\x5F\xAF\x6B\x72\x7D\x5A\x97\xD7\x93\xCF\x67\x73\xA1\x47\x0F\x75\xA1\xA9\x36\x77\xA1\xA7\x9F\x2F\xA1\x6E\x98\x55\xA1\xD5\x9F\x21\x9D\x0A\xA1\x23\x9D\x0C\xA1\xC9\x97\x0E\xA1\x42\x99\x10\xA1\x7A\x94\x8A\x9F\x76\x97\x8C\x9F\x7D\x9B\x8E\x9F\x4A\x99\x90\x9F\x15\x7E\x1A\xA1\x9B\x7F\x1C\xA1\x36\x8F\x74\x96\xED\x9C\x99\x99\x77\x92\xF0\x9C\xEC\x9F\x77\x6A\xA8\xA1\x43\x0F\xAA\xA1\x69\x3B\xAC\xA1\xD1\x9D\x53\xA1\x3F\x9B\x47\x9D\x08\xA1\xD6\x9F\xB3\xA1\x6C\x9D\xB5\xA1\x65\x99\xB7\xA1\x67\x99\x02\x9C\x0B\x53\x12\xA1\xA1\x9D\x14\xA1\x3A\x9E\x16\xA1\x3C\x9E\x18\xA1\x52\x9B\x2F\x98\x7D\x9D\x97\x87\x0A\x8A\x0B\x9D\x56\x77\x57\x9D\xC9\x7F\xAE\x97\x0B\x98\xEF\x9F\x84\x90\x13\x9D\x19\x95\xD8\x93\xCE\xA1\x3F\x0F\xD0\xA1\x17\x1E\xD2\xA1\x98\x9B\x35\x9F\x2E\xA1\x4F\x9E\xB7\x9D\xD2\x9E\xDE\x9C\x4B\x9D\xE0\x9C\x1C\x9E\x03\x9D\x3E\x9F\x05\x9D\x40\x9F\x0D\x7F\xD8\x97\x0C\x05\x36\x9D\xDB\x97\xF0\x9F\x39\x9D\x73\x9F\xFD\xA0\x8D\xA1\xE1\xA0\x00\x41\xFC\xA1\xF9\x9C\xFE\xA1\x7D\x9F\x00\xA2\xE7\xA0\xB8\x9D\x3E\x99\xEA\xA0\xDD\x94\xEC\xA0\x04\x8C\x98\x96\x3E\xA1\x85\xA1\x40\xA1\x87\xA1\x7A\x9D\xA8\x9D\x51\x77\x0A\x9D\xD4\x84\x07\x98\xAC\x97\xB1\x8F\x37\x98\xAF\x97\xF3\xA1\xCB\x92\x0E\x98\xC8\x9F\x48\x95\xE2\x6F\x4C\x65\xFA\xA1\x84\x33\x17\xA2\xCE\x9E\x79\xA1\xD0\x9E\x81\x87\xE8\xA0\x7B\x9A\x1F\xA2\x59\x95\xFA\x9D\xBA\x9E\xFC\x9D\xBC\x9E\xFE\x9D\xBE\x9E\x00\x9E\xC0\x9E\x02\x9E\x88\xA1\x29\xA2\x3A\x6D\xEA\xA1\x32\x98\x20\x93\x07\x85\x0D\x9D\xF4\x92\x34\x03\x5A\x9D\x87\x9D\x12\x9D\x90\x10\x8A\x9D\xC7\x9E\x7B\x52\x14\xA2\x71\x4B\xE2\xA0\x0D\x9F\xF4\x9B\x7C\x9F\x54\x9F\x5D\x99\xD7\xA1\xB2\xA1\x82\x9F\x59\x9F\xDB\xA1\x25\x9C\x86\x9F\x0B\x53\x88\x9F\x11\xA1\x37", +"\x9E\x17\x82\x5D\x9E\xA9\x59\x5F\x9E\x4B\xA2\x61\x9E\x4D\xA2\x04\x9E\xCE\x9C\x4F\x93\xAC\x9D\x5C\xA2\xF8\xA1\x3B\x0F\x39\xA2\x4E\x06\x3B\xA2\xEB\x9E\xAE\xA1\xED\x9E\x43\x97\xB1\xA1\xD6\x9D\xD7\x9F\x7C\x6D\xD9\x9F\x4F\x9C\xB1\x9F\x51\x9C\xB3\x9F\xFB\x9D\xB5\x9F\xFD\x9D\xB7\x9F\xFF\x9D\xB9\x9F\x60\x9E\xC4\x9D\x67\xA1\xBD\x9F\xC7\x9D\xD6\x8F\x55\x85\xFE\x93\x11\x66\x7D\xA2\xA1\x66\x5F\xA2\x16\xA2\x61\xA2\x1D\x9C\x93\xA1\x3E\xA2\xB0\x87\x1D\xA2\x9E\x9B\x04\xA2\x01\x9D\x06\xA2\x79\x9E\x08\xA2\x7B\x9E\x0A\xA2\x14\x81\xE9\x9D\x4C\xA1\xF7\x3C\x5E\xA2\x51\x67\x60\xA2\x91\xA1\xFA\x9F\xA4\xA2\x36\x9F\x95\xA1\x7C\xA1\x00\xA0\x16\x8B\x85\x93\x5D\xA1\x94\x96\x4D\x97\x60\xA1\x96\x9E\x23\xA2\x93\xA2\x3F\xA1\x95\xA2\xBB\x9F\x97\xA2\x08\xA0\xB2\x93\x03\x9F\xE1\x95\x12\x95\xCD\x98\x26\x91\xB8\x93\xE4\x5F\xB4\xA2\xE9\x2B\xF7\x40\x01\xA1\x90\xA1\xE9\x9E\xCD\x9E\x82\xA2\x1B\xA2\xEE\x97\xAA\x9F\x31\xA1\xC1\x9B\x33\xA1\x9C\x9C\x48\x97\x9E\x9C\x5C\xA1\xF6\x9E\x5E\xA1\xF8\x9E\xC3\xA2\xFA\x9E\x83\xA1\x20\x9F\x9F\x94\xC8\xA2\x41\xA1\x43\x8D\x21\x9E\xB2\xA2\x08\x52\xD4\xA2\x16\x06\xB4\x5B\xA1\xA2\xB7\xA2\xD1\x9F\x05\xA1\xE6\xA0\x30\xA1\x5C\x96\x87\x99\xE1\xA2\xD8\x9D\xE3\xA2\xDA\x9D\xE5\xA2\xDC\x9F\xE7\xA2\xDE\x9F\xE9\xA2\x82\xA1\xC5\xA2\x49\xA2\x94\xA2\x75\xA2\x96\xA2\x77\xA2\x25\x9F\xFA\x6D\x0A\xA0\x32\x90\x33\xA2\x44\x0F\xF8\x8F\x7C\xA2\xF4\xA2\x20\x07\xF6\xA2\xD7\xA2\x81\xA2\x63\xA2\xFC\x9F\xD4\xA1\x66\xA2\x87\xA2\xD9\xA1\x30\x9E\x6A\xA2\x25\x9D\x6C\xA2\x32\x78\xB9\xA1\x05\x95\xBB\xA1\x59\x98\x72\xA2\x19\x84\xA4\x9D\x19\x6D\xA6\x9D\x0E\xA3\x68\xA1\x0F\x87\x65\x9E\x14\x86\x16\xA3\x38\xA2\x8E\xA1\x8B\x3B\x1B\xA3\xE5\xA0\x70\x94\xAB\x9F\xB2\x9E\xAD\x9F\x4D\x9C\xAF\x9F\x8B\xA2\xDB\x9F\x8D\xA2\xDD\x9F\x8F\xA2\x3B\xA1\x91\xA2\x3D\xA1\xC6\xA2\x25\xA2\xEE\xA2\x27\xA2\xC2\x9E\x4E\xA2\x84\x94\x4F\x99\xE6\x6D\x26\xA1\x17\xA3\xB6\x03\xF2\x40\x6D\x38\x39\xA3\xFA\xA2\x3B\xA3\xDF\xA2\xAC\x9F\xFF\xA2\x59\xA1\x01\xA3\x18\x9F\x92\x96\x4B\x97\xC1\xA2\x1C\x9F\x07\xA3\xE0\x9F\xEB\xA2\xE2\x9F\xED\xA2\x0C\xA3\xC9\xA2\x30\xA3\x98\xA2\x08\x99\x11\xA3\x8D\x90\x66\x8D\x66\x94\x12\x90\x8C\xA1\x36\xA3\x15\xA2\x1A\xA3\xA2\xA2\x92\x9D\xFB\x9F\x94\x9D\x07\xA1\x56\xA1\xA9\x59\x58\xA1\x3F\xA3\x5A\xA1\x41\xA3\x03\xA3\x43\xA3\x05\xA3\x45\xA3\x64\xA3\x3C\xA1\x66\xA3\x24\xA2\x68\xA3\x2F\x9C\xC1\x9E\xA2\x94\x2B\x99\xC5\x9E\xD8\x23\x73\xA3\x4B\x65\x7F\xA2\x5F\x06\x57\xA3\x79\xA3\x89\x9E\x7B\xA3\x86\xA2\x8C\x9E\x21\xA3\x8E\x9E\x5A\x9F\x1D\x7E\x25\xA3\x99\x84\x27\xA3\x57\x98\x29\xA3\x83\x9A\x2B\xA3\x7C\x6D\x74\xA2\x8B\xA3\x4C\xA2\x28\xA2\x78\xA2\x38\x95\xC2\xA0\xB9\x63\x68\x9A\xD2\x9C\xCD\xA1\x53\xA3\x19\xA3\x8F\xA1\x95\xA3\xB9\xA2\xFF\xA1\x72\x9E\x01\xA2\x96\xA1\x03\xA2\x3A\x9F\x05\xA2\x03\xA0\x1D\x9E\x9C\xA1\x3F\x9F\x51\x9D\x47\x78\x27\x9F\x2A\x9B\x7A\x6E\xA9\x9A\x06\x01\x0E\x9A\xB0\xA3\x07\x6D\x9E\xA2\x19\x73\xD5\xA2\x55\xA3\x4D\x33\xB5\xA3\x7D\x93\x94\xA1\x3F\xA2\xA7\xA2\xF7\x9D\xA9\xA2\xBB\x9D\x21\xA2\x86\x8C\x09\xA3\x2D\x9C\xBF\x9E\xA8\xA3\x76\xA2\xAA\xA3\x0F\xA3\x16\x6D\x6E\xA3\x3C\x95\xD1\xA0\x8A\x8F\x3A\x0F\x71\x95\xB3\xA2\x74\xA3\xA0\xA2\x76\xA3\xF8\xA2\x10\x9B\xFD\xA1\x3D\xA2\xBA\xA2\xD4\xA3\x02\xA2\xFF\x9C\xD7\xA3\xF9\x9D\xD9\xA3\x10\x8D\xDB\xA3\x15\xA1\xDD\xA3\x17\xA1\x8C\xA3\x2E\x98\x89\xA1\x39\x95\x84\xA0\x3A\x07\x85\x9B\x16\x96\x27\x0B\x16\x87\x70\x9F\x43\x9E\x19\x87\xCB\xA1\x43\x0F\xE8\xA3\xF3\xA2\xEA\xA3\xB5\xA2\xF7\xA2\xD9\xA2\x52\x9F\xB6\xA3\x1A\xA2\xB8\xA3\x1C\xA2\xF3\xA3\xB9\x9D\xF5\xA3\x77\x9E\xAB\xA2\xED\xA0\xAD\xA2\xEF\xA0\xAF\xA2\x4D\x82\x3B\x90\xC0\x9F\x3D\x95\x3F\x95\x3F\x95\x6E\x9F\x16\x95\x22\xA4\x32\x9B\x35\xA2\x5B\x97\xCB\xA3\xB2\xA3\xAC\x58\xEC\xA3\x11\xA4\x92\xA1\xD2\xA3\xA5\xA2\x27\x8A\xD5\xA3\x75\x9E\x19\xA4\xEB\xA0\x1B\xA4\x22\xA2\xEE\xA0\x08\x8C\x4C\xA3\x8D\xA3\xFF\xA3\x94\x9F\x28\x9F\x2B\x9B\xC0\x8C\x59\x9B\x6C\x95\x9A\x9F\xEA\x9F\xF2\x8C\x5D\x9B\x0A\xA4\x4D\x8D\x7D\x69\xCC\xA3\x98\x0D\x0F\xA4\x2F\xA4\xA4\x9F\xB2\x9A\x6D\x9C\xE4\xA0\x58\xA3\xB0\x94\x5A\xA3\x3D\xA3\x5C\xA3\x7F\xA3\x5E\xA3\x36\xA1\x60\xA3\x1A\x9F\x62\xA3\x3A\xA1\x86\xA3\x47\xA3\x88\xA3\x49\xA3\x8A\xA3\xFC\xA3\xA9\xA3\x4D\xA3\xAB\xA3\x5C\x59\x40\xA4\xC5\xA3\x69\x95\xAD\x97\x6A\x6F\x73", +"\x90\x32\xA2\x8D\x9A\x9D\x10\xA1\x87\xDF\x97\x2C\x82\x5C\x0A\x4D\xA4\xD0\x1E\x4F\xA4\xB4\xA3\x77\xA3\xB6\x9C\x13\xA4\x64\xA2\x2C\x9E\xB1\x9E\x52\x9E\xB3\x9E\x54\x9E\xB5\x9E\x56\x9E\xB7\x9E\x58\x9E\xB9\x9E\x5F\x9F\xBB\x9E\x13\xA1\xBD\x9E\xDC\xA3\x4A\xA2\xDE\xA3\x0D\xA3\xE0\xA3\x31\xA3\xF1\x87\x6B\xA4\x6B\x9F\x1A\x95\x8D\x53\xBB\x95\x0F\xA2\xF4\xA1\x90\x10\xF2\x9F\x49\x65\xDC\x9A\x0D\xA4\x92\xA3\x37\xA3\x10\x2B\xD1\xA3\x17\x99\x33\xA4\x9C\x9B\x35\xA4\xE9\xA0\x37\xA4\x20\xA2\x39\xA4\xDA\xA3\x3B\xA4\x8A\x8C\x3D\xA4\xFE\xA3\x4E\xA3\x05\x6E\xE3\xA3\x4B\x87\x6B\xA4\xEC\x95\xF1\x9C\x8D\x53\xA1\x7B\xDE\x9B\x01\x8F\xE4\x8E\x33\x8F\xB1\x91\x3E\x9C\x54\x8E\x35\x9C\x2B\x6B\xE7\x6F\xD6\x99\x4D\x47\x17\x28\x23\xA0\x5D\x8D\xAC\xA0\x26\xA0\x71\x8F\x61\x8E\xBE\xA0\x77\x6A\xC4\xA4\x46\x9A\x8D\x61\x60\x28\x67\x8E\xA2\xA0\x4E\x62\x60\x65\x62\x67\x46\x19\x34\xA0\x9B\x69\x36\xA0\xA9\xA0\x2C\x91\x9E\xA0\x48\xA0\x17\x91\xCB\x68\xD5\xA4\xD0\xA4\x51\x9A\xC6\xA4\x60\x28\x8F\xA0\xD1\x90\x7D\x8E\xEB\x90\x17\x71\x34\x9D\x16\x75\x9F\xA0\x49\xA0\x66\x69\x4B\xA0\x03\x91\x5C\x0A\xE4\xA4\x85\x6C\xD2\xA4\x52\x4A\x50\xA0\x28\x0D\x6D\x70\x7A\xA0\xEE\x90\x22\x91\x51\x69\x8E\x8D\x16\x8F\xD1\x74\x79\x69\xF5\xA4\x92\x6C\xF7\xA4\x5A\x41\x79\x00\x7C\x8D\x93\x8D\xDD\xA4\x3A\x91\xDF\xA4\xFA\x8E\xBE\x8D\x84\x70\xE3\xA4\xD7\xA4\x06\xA5\xE8\x5B\x08\xA5\x99\xA0\xF9\x90\x5E\xA0\x59\x91\x60\xA0\xAB\xA0\x62\xA0\xAF\x8D\x94\x70\x11\xA5\x92\x9B\x11\x63\x17\x28\x07\x91\x20\x93\x14\x6B\xFC\xA4\x47\xA0\x0E\xA5\x23\x91\x1A\x6B\x1F\xA5\xB6\x9B\xFC\x42\x22\xA5\x42\xA0\x78\x67\xC8\x8E\x53\xA0\xCE\xA0\xFC\x81\x8A\xA0\x4C\xA0\xE6\x6F\x12\xA5\xE6\xA4\xF8\xA4\x2F\xA5\x41\x14\x91\xA0\x32\xA5\xCA\xA4\x7D\xA0\xFF\x00\xDE\x8E\x80\xA0\xAC\x73\x20\xA5\x2C\x63\x2E\xA5\xA6\xA0\xB8\x0E\x2A\x91\x0B\xA5\x38\xA0\xEE\xA4\xE0\xA4\x0F\xA5\xD6\x8D\x2B\xA5\x0C\x9B\xB2\x73\xE7\xA4\x16\xA5\xBE\x68\xA8\xA0\x19\xA5\xAA\xA0\xFD\xA4\x54\xA0\x6F\xA0\xA9\x72\x53\x75\xEE\x7D\xF4\xA4\x38\xA5\xA1\x64\x52\x4A\xB4\xA0\xFF\x00\xB6\xA0\xE4\x9B\x04\xA5\xA0\x6C\x13\xA5\x21\x1E\x4A\x7C\xBD\xA0\x62\x8D\xC3\xA4\x61\xA5\x53\xA5\x63\xA5\xA8\x6B\xD1\xA0\xC5\xA0\x03\xA5\x70\xA5\x2D\xA5\x60\x28\x29\x9B\x74\x69\x6E\x75\xE4\x71\x3F\xA5\xCF\xA0\x32\x97\x25\x89\xFD\x36\xF1\x95\x44\x0F\xB4\x7B\x01\x01\x39\x0F\x46\x6C\x7D\x69\xEB\x6F\xC5\xA4\x62\xA5\x07\xA5\x09\x7D\x00\x8F\xF3\x7C\xCE\x7C\x71\x6D\xBF\x7B\x27\x01\xC1\x7B\xF6\x71\x4D\x39\x77\xA5\x70\x58\x17\x28\x8E\xA5\x35\x7D\x54\x7C\x91\xA5\x93\x89\xE3\x7C\x29\x7D\xAF\x7C\xC1\x7C\xE7\x7C\xF5\x7C\x64\x00\xDE\x90\x74\x7C\xA6\xA1\x00\x09\x09\x7C\x43\x63\x02\x64\xDD\x7B\xA8\x64\xC8\x03\xDF\x7B\x27\x01\xE1\x7B\x2C\x92\x5C\x0A\x8A\xA5\xD1\xA4\x39\xA5\x8D\xA5\x34\x7D\x48\x65\x99\x7C\xFF\x7B\xBD\x7C\xD2\x7C\xB4\x17\xDB\x46\xA3\xA5\x5A\x4B\x49\x7C\x13\x66\x9A\xA2\x06\x01\xD6\x9A\x05\x7D\xEA\x6F\x98\xA5\x21\xA5\x60\x28\x9B\xA5\xBB\xA5\x36\x7D\x69\x7C\xBE\xA5\x8A\x7C\xD3\x7C\x47\x7C\xC2\xA5\xDE\x5C\x94\x0D\x07\x7C\xAA\xA5\x77\x7C\xAD\xA5\x0C\x7C\x2B\x6F\x22\x08\xA7\x98\xBD\x0D\xDF\x8E\xB6\xA5\xE5\xA4\x8C\xA5\x14\xA5\xCE\xA5\x47\x65\xBC\xA5\x27\x7D\xD2\xA5\xE4\x7C\xD4\xA5\x6D\x7C\x2B\x7D\x4A\x7C\x25\x7C\xE2\xA5\xCB\xA5\x46\xA5\xCD\xA5\xBA\xA5\xE8\xA5\xD0\xA5\x9A\x7C\x11\x8C\xBE\x7C\xC0\xA5\xFF\x64\x9E\xA5\xF8\x0D\x36\x7C\xB9\x63\xC5\x99\xF2\xA5\x45\xA5\x75\x38\xF5\xA5\xF1\x7C\x8F\xA5\x0B\x7D\x9E\xA5\x9B\x7C\xA1\xA5\xE5\x7C\xB0\x7C\x5B\x7C\x61\x81\x00\x9A\x38\x2A\x43\xA5\xCA\x4A\x04\xA6\x00\x7D\x52\x4A\xE7\xA5\x46\x65\xE9\xA5\xF1\x05\x0B\xA6\x2F\x96\x0D\xA6\xD6\xA5\xAB\x5C\xC4\xA5\xDA\xA0\x90\x10\x5E\x7C\x95\xA5\xBB\x74\x97\xA5\x15\xA6\x28\x47\xE6\xA5\xF6\xA5\x19\xA6\xF8\xA5\xBD\xA5\xE2\x7C\xFB\xA5\x9B\x33\xC1\xA5\xF0\x7B\x6F\x7C\x0D\x7D\x71\x7C\x82\x12\x73\x7C\xAF\xA5\x1D\x01\xD9\xA5\x89\x0C\xAB\xA5\x78\x7C\xBE\x61\x3D\x0C\x7B\x7C\x3C\x0F\x7D\x7C\x03\xA6\x2C\xA5\x99\xA5\x06\xA6\xE7\x7B\xCB\x7C\xE5\x95\x87\x7C\x43\x88\xA0\xA5\x1D\xA6\xED\xA5\x8C\x7C\x33\xA6\xD6\x7C\x41\x65\x90\x7C\x83\x12\x44\xA6\x52\xA5\x78\xA5\x17\xA6\x2B\xA6\x45\x96\x09\xA6\xD5\x7C\x1B\xA6\x38\x7D\x47\x65\x3A\x7D\xD3\x5C\x66\x69\xA2\x7C\x56\xA6\x38\x9B\x71\xA5\xB9\xA5\x07\xA6\x9C\xA5\x90\xA5\x5D\xA6\x43\x7C\xEB\xA5\x0C\xA6\x4F", +"\xA6\xE6\x7C\xC3\xA5\xB1\x7C\xF7\x6F\xB3\x7C\x65\xA6\x65\x9B\x67\xA6\x2A\xA6\x69\xA6\xCF\xA5\x9D\xA5\x6C\xA6\x88\x7C\x6E\xA6\x4E\xA6\xFC\xA5\xEE\xA5\xC3\x5C\xFF\x00\xC4\x7C\x76\xA6\x9F\x9A\xB8\xA5\x79\xA6\x48\xA6\xE1\x8E\xCE\x02\x4B\xA6\xDF\x93\x2B\x96\x6F\xA6\x81\xA6\x8D\xA6\xCB\x5C\x93\x0A\x41\x65\xD8\x7C\x86\xA6\xAF\x9A\x88\xA6\x21\x1E\x18\xA6\x5B\xA6\xBB\x7C\x55\x7C\x5F\xA6\x46\x65\x61\xA6\x8E\x7C\xE9\x7C\xEE\x61\xF6\x7B\x79\x69\xE3\xA5\xF6\xA4\x99\xA6\x2B\x0C\x9B\xA6\x33\x8E\x7C\xA6\xFE\x7B\x76\x0B\xA5\xA5\xF7\x7C\x49\x01\x63\x00\x13\x7D\xD2\x64\xC5\x95\xA6\x07\x1B\x7D\xFE\x7C\x39\x12\x16\xA6\xD4\x62\x02\x7D\xA4\xA6\x3F\x6E\x11\x66\xA7\xA6\x05\xA5\xA9\xA6\x46\x19\xAB\xA6\x43\xA4\x6B\xA6\xAE\xA6\xB3\x0E\x35\xA6\x79\x01\x0F\x7D\x42\x2C\x13\x02\xB4\xA6\x6D\x6E\xB1\x98\x54\x11\x17\x7D\xDC\x11\x8B\x55\x4C\x0D\x1C\x7D\x27\x01\x1E\x7D\x69\x8D\xB5\xA5\xF3\xA5\x05\xA6\x59\xA6\x7A\xA6\xF7\xA5\xAD\xA6\x26\x7D\x5E\xA6\x7F\xA6\x60\xA6\xA2\xA5\x51\xA6\xE7\x7C\x61\x81\x31\x50\xB5\x00\xE4\x9B\xC1\xA6\x69\xA5\xC3\xA6\x44\x7D\x99\x90\x2E\x7D\x97\xA6\x8B\xA5\x78\xA6\x9A\xA6\x5A\xA6\xAC\xA6\xC7\xA6\xE2\xA6\x6D\xA6\x2F\xA6\xBF\xA5\x31\xA6\xD5\xA5\xE7\xA6\x72\xA6\x0F\xA6\x81\x78\x52\x69\x47\x63\x6E\xA5\x46\x65\xD0\x64\x57\x62\xD0\xA6\x6A\x5C\x8C\x08\x05\x6C\x93\x53\x70\x73\x94\x53\x22\x96\x45\x65\x08\xA7\x5C\x5C\xB5\xA6\x4F\x7D\xEC\x36\x2F\x09\x10\xA7\xFA\x8C\xEC\x36\x9F\x6B\x91\x0E\x25\x39\x74\xA4\x7C\x74\x61\x74\x5B\x5C\x1B\xA0\x61\x81\xDC\xA0\x6E\x96\x5C\x0A\xF5\x6F\xCE\xA2\x1D\x43\x16\x43\xA4\xA4\x4D\x9E\xA6\xA4\xF5\x9D\xA8\xA4\x41\xA2\xAA\xA4\x43\xA2\xF7\xA3\x9F\x91\xF9\xA3\xE4\xA1\xFB\xA3\xE6\xA1\xFD\xA3\x6C\x59\xC3\xA1\x55\x82\xC5\xA1\x81\x89\x45\x83\x77\x38\x82\x91\x87\x8F\x48\x0F\x15\x9C\xCA\xA3\x2B\x6B\x28\xA7\x75\x99\x6F\x16\x61\x29\x2C\xA7\x81\x8B\x14\xA4\x7B\xA1\xB4\x92\x7D\xA1\xBE\xA2\x02\xA0\x9A\xA1\x04\xA0\xC4\x83\x06\xA0\x6E\x83\xA9\xA5\x45\x84\x0D\x9C\xA4\x90\x80\x97\x02\x01\x80\x91\xA4\x96\x64\x7E\xAF\x91\x9B\x88\x23\xA1\xB9\x63\x3F\x9C\xF2\xA2\x8A\x39\x3F\x7B\x4B\xA7\x7C\xA4\xD8\x9C\x96\xA3\x06\xA1\x1E\xA3\x7C\xA3\x19\x6D\x7E\xA3\xB4\x9E\x40\xA3\xB6\x9E\x8C\xA2\xB8\x9E\x8E\xA2\x45\xA2\x90\xA2\x47\xA2\x92\xA2\x0A\xA3\xC7\xA2\x69\xA3\xEF\xA2\xCA\xA2\x9F\xA1\xE0\x9E\x45\xA1\xC8\x88\xB4\x90\x43\x76\x07\xA4\x39\x8E\x4A\xA1\x16\x86\x08\x9F\x0A\x42\x69\xA7\xB6\x33\x4C\xA7\x06\x93\xF1\xA3\xA6\xA2\x17\xA4\x1E\xA2\x32\xA7\x93\x96\x44\xA2\x8A\xA4\x46\xA2\x8C\xA4\x48\xA2\x8E\xA4\x0B\xA3\x90\xA4\x6A\xA3\x92\xA4\x6C\xA3\x69\xA1\xCD\x83\x6B\xA1\x39\x19\x67\x8F\xAD\x9B\xF7\x66\x70\xA1\xC5\x8B\xFC\x90\x27\xA7\x50\x7C\x6A\xA7\xED\xA3\xA6\x9F\xD3\xA1\x83\xA2\xD3\x9D\xB7\x9A\x70\xA7\x7C\x6D\x72\xA7\x84\xA4\x74\xA7\x86\xA4\x76\xA7\x88\xA4\x78\xA7\x99\xA7\x7A\xA7\x9B\xA7\x7C\xA7\x9D\xA7\x7E\xA7\x9F\xA7\x80\xA7\x6B\xA3\xCB\xA2\xFD\x91\x8B\xA1\x5C\xA2\x48\xA7\xCB\xA0\x06\x2C\x8F\xA7\x6B\xA7\x64\x9D\x7E\xA4\x1D\xA3\xB3\xA7\x17\x9E\xBA\xA3\xF4\xA3\xBC\xA3\xAA\xA2\xBE\xA3\x07\xA2\xC0\xA3\x09\xA2\xC2\xA3\x0B\xA2\x3E\x9A\x21\x84\xA5\xA1\xBD\x75\x11\x66\xCC\xA7\x07\x9E\x4A\xA7\xCF\xA7\xB0\xA7\x53\xA4\x04\xA1\x6D\xA7\xFB\xA2\x68\x9D\x81\xA4\x81\x9F\x83\xA4\x83\x9F\x55\x9E\x77\x9C\xDD\xA1\x7F\x9A\xA1\xA3\xC0\x98\x70\xA2\xFB\x23\x39\x9E\x63\x9F\xE5\xA1\x65\x9F\x3A\xA7\x19\xA1\xE7\x9C\x42\x8F\xE9\x9C\xAC\x8F\xEB\x9C\x36\x9C\xC8\xA1\x11\x86\xEF\x9C\x2A\xA4\x76\xA4\xF4\x6F\xAE\xA7\xE8\xA7\x30\xA4\xB8\xA2\x32\xA4\x92\xA7\x34\xA4\x94\xA7\xA8\xA2\xD8\xA7\xD8\xA3\xAC\xA4\xF8\xA3\xAE\xA4\xA3\x91\x1F\xA4\x02\x85\x2B\xA2\xB8\x0E\xAB\x97\x83\x9D\x8D\x9B\x85\x9D\x31\xA2\x9A\xA4\x13\xA3\x5F\x77\xF6\xA1\xCF\x67\xE5\xA7\x0B\xA0\x60\x57\xAF\xA7\x0F\xA8\xF9\xA2\xEC\xA7\x59\xA3\xFD\xA2\x16\x9B\x3E\xA3\x73\xA7\x80\xA3\x75\xA7\x42\xA3\x77\xA7\x44\xA3\x79\xA7\x46\xA3\x7B\xA7\x48\xA3\x7D\xA7\x4A\xA3\x7F\xA7\xB0\xA4\x67\x9F\xB2\xA4\x63\xA7\xED\x90\xC8\x92\x21\x19\xA8\xA7\x49\x9F\xDD\x97\x12\xA2\x77\x6A\x2A\xA8\x12\xA3\x01\x53\x2D\xA8\x51\xA4\x96\x9B\xEE\xA3\x18\xA2\xF0\xA3\xB7\xA3\x4F\xA7\xA0\x93\x51\xA7\xC6\x91\xBF\xA2\xE6\xA2\x5F\xA4\x5F\xA1\x81\xA1\x65\xA3\x36\xA7\xFC\xA7\x38\xA7\xFE\xA7\x67\xA4\x3E\xA4\x44\xA8\xF6\x24\x50\xA2\x05\x98\x6D\x0C\x0C\x8A\x2E\xA2\x09\x98\x30", +"\xA2\xF2\xA1\x25\xA8\x72\xA4\xF9\x92\x4C\xA8\x07\x6D\x4E\xA8\x6F\xA3\x50\xA8\x0E\xA8\x52\xA8\xF7\x9C\x54\xA8\x3C\xA2\xD4\xA1\xD3\xA3\x93\xA7\xD6\xA7\x18\xA4\x16\xA8\xF6\xA3\x18\xA8\x35\xA7\x1A\xA8\x22\x92\x1C\xA8\x3A\x7A\x6A\xA8\x7F\x9D\x9D\x70\x53\xA2\x6E\xA8\x0E\x9D\x99\x6F\xB0\x0F\x57\xA2\x95\x95\x6C\xA4\xEF\x80\x3C\x98\xC9\x8F\xCB\xA7\x0D\xA8\x05\x42\x90\xA7\x58\x93\x2E\xA7\x73\x9E\x30\xA7\x47\x97\x90\x96\x49\x97\x5D\xA4\x38\xA1\x5E\xA8\xE8\xA2\x60\xA8\x87\xA3\x62\xA8\x8D\x9F\xFD\xA7\x8F\x9F\xE7\xA1\x81\x9B\x2F\x98\x62\x98\x69\x8A\x9C\xA2\x7D\x69\x77\xA8\x9F\x7D\x51\xA8\xF8\x9F\xD1\xA6\x10\xA8\xA5\xA4\x12\xA8\xA7\xA4\x14\xA8\xD6\xA3\x84\xA8\x1A\xA4\xDA\xA7\xAC\xA2\xDC\xA7\xAE\xA2\xDE\xA7\x14\x81\xC6\xA5\x70\x93\xB4\xA8\x79\x69\xB6\xA8\xA3\x6C\xB8\xA8\x36\x99\xBA\xA8\x2F\xA8\xD2\xA7\x7A\xA3\x6F\xA7\x99\xA3\x57\xA1\x88\xA2\xC5\x6D\x8A\xA2\x37\xA8\x82\xA3\x39\xA8\x84\xA3\x3B\xA8\x61\xA4\x3D\xA8\x63\xA4\x3F\xA8\x65\xA4\x39\xA7\x66\xA8\xB1\xA4\x69\xA4\x9E\x6D\xB1\xA2\x46\xA7\xAD\xA7\x8E\xA7\x9C\xA8\xD0\xA7\x54\xA4\x30\xA8\x56\xA4\x32\xA8\x14\x9F\x89\x92\xA2\xA8\x7C\x9A\xF4\xA7\x57\x9E\x34\x9E\x59\x9E\x89\x9F\x60\x9F\x8B\x9F\xE3\xA1\x63\xA8\x8F\xA4\x66\xA4\xDF\xA3\x68\xA4\xE1\xA3\x9E\x85\xB4\xA4\x22\xA4\xA2\x85\x0A\x9E\xA5\x85\x0C\xA8\xED\xA8\x2B\xA7\xEF\xA8\xEB\xA7\xD3\xA8\x97\xA3\xD5\xA8\xEF\xA7\x09\xA1\x68\xA2\x0B\xA1\xF3\xA7\x85\x9F\xF5\xA7\x79\x9C\xDF\xA1\x7F\x77\xF9\xA7\x39\x78\xA5\xA3\xC5\x6D\xA7\xA3\x02\xA9\x91\xA4\x3C\x94\xF1\xA2\xEB\xA8\x0C\xA9\xE6\x89\xCF\xA8\xA1\x99\xD0\x9F\x7D\xA8\xDB\xA2\x15\xA4\xDD\xA2\xB0\xA1\x14\xA9\xD8\xA1\x16\xA9\xB4\xA1\x18\xA9\x0D\xA1\xF9\xA8\x01\x9C\xF7\xA7\x22\x99\x1E\xA9\xBC\x48\x20\xA9\x0B\x53\x22\xA9\xE5\xA8\x03\xA9\x67\xA8\xE8\xA8\xE2\xA3\xCD\xA2\x49\xA7\xA5\x8F\x14\xA3\xFD\x93\x68\x94\xB5\xA8\x9B\xA8\x0E\xA9\xE9\xA7\x91\x9D\x7D\xA4\x11\xA8\x57\xA8\xBB\xA2\x50\xA7\xBD\xA2\x5B\xA8\x53\xA7\x98\x86\xA9\xA8\x62\xA4\xAB\xA8\xBE\xA1\xAD\xA8\xC0\xA1\xAF\xA8\x5B\x9C\x8E\xA3\x12\x86\xFF\x8F\x9A\xA8\x0D\xA9\x53\x0C\x9D\xA8\x28\x94\x9F\xA8\xB9\xA3\xBC\xA2\x97\xA1\x52\xA7\x7F\xA1\x59\xA9\x9B\xA1\x56\xA7\x9D\xA1\x9D\x83\xC8\xA7\x83\x98\x80\x9E\x40\x94\x67\xA7\x8D\xA7\x29\xA9\x7A\xA8\xB9\xA8\x28\x9E\xD2\xA8\x52\xA9\x4E\xA7\x54\xA9\x59\xA8\x56\xA9\x18\x92\x5C\xA8\x04\xA3\xA7\xA8\x06\xA3\x5A\xA9\xE1\xA8\x5C\xA9\xC8\x9C\x2D\xA3\x7C\x6D\x2F\xA3\xA1\xA7\x75\xA9\x8B\x90\x07\xA9\x47\xA4\x7F\x90\xB2\x7B\x67\x94\xC4\x79\x29\xA8\x4D\xA9\x67\xA9\x0F\xA9\x2C\xA1\x14\x9E\x7F\xA4\xD4\x9F\x32\xA9\x67\xA2\xF1\xA7\x69\xA2\x36\xA9\xB6\xA1\x38\xA9\x0F\xA1\xFB\xA8\x6F\xA2\xA3\xA3\xF5\x9A\x3E\xA9\xF4\x83\xBF\xA1\x7F\x9B\x60\xA9\x31\x9D\x62\xA9\x44\x0F\x88\x81\x8A\x81\xA0\x8F\xEC\xA8\x7B\xA9\xEE\xA8\x4F\xA9\xD0\x9D\xEF\xA3\x7F\xA8\x6A\xA9\x16\xA4\x82\xA8\x95\xA7\xC1\xA8\x38\xA4\xC3\xA8\x1C\xA4\xC5\xA8\x1E\xA4\xC7\xA8\x9F\x83\x05\x96\x48\x0F\xAF\xA3\xFC\xA0\x4D\xA8\x9B\xA9\x95\x1E\x68\xA9\x21\x95\xC0\xA9\xFC\xA2\x78\x9A\x5D\x96\xF5\xA8\x16\x9F\x5B\xA4\x5B\xA1\xA5\xA8\xC0\xA2\x98\xA7\xFC\xA8\x8B\xA4\xE2\xA1\x8D\xA4\xFA\xA3\x01\xA9\x41\xA9\x24\xA9\x43\xA9\x05\xA9\xF5\x6C\x94\xA9\xCD\x9A\x91\x8C\xC7\xA3\x03\x01\xC9\xA3\xCF\xA9\x76\xA8\xD1\xA9\x32\x06\xD3\xA9\x74\x9A\xD5\xA9\xEE\xA7\x3C\xA3\x82\xA4\x34\xA8\xB9\xA7\x36\xA8\xBB\xA7\x38\xA8\xBD\xA7\x3A\xA8\xBF\xA7\x3C\xA8\xC1\xA7\x3E\xA8\xC3\xA7\x40\xA8\xC5\xA7\x42\xA8\x2A\x99\xFF\xA3\xC4\xA3\x88\x9D\x71\x7A\x75\xA8\x47\xA7\xF3\xA9\xEE\x05\xF5\xA9\xB4\x9D\xF7\xA9\x85\x99\xF3\xA8\x32\xA1\xD9\xA9\x34\xA1\xDB\xA9\x81\xA3\xDD\xA9\x5D\xA8\xDF\xA9\xAB\xA9\xFD\xA8\xBC\xA1\xFF\xA8\xAC\xA8\x64\xA8\xAE\xA8\xFF\xA7\xE8\xA1\x3F\xA4\x15\x88\x95\x9F\x42\xA4\x00\x9B\x14\x95\x66\x8C\x49\xA8\x97\xA8\x4A\x9F\x4A\xA4\x3B\x0F\x0C\xA4\x68\xA7\xBA\xA9\x4E\xA9\x2E\xA8\x2D\xA9\x1C\xA3\xD4\xA8\xD4\xA7\xDC\x9C\xBF\xA8\x36\xA4\xC4\xA9\xAB\xA4\xC6\xA9\x3A\xA4\x1D\xA4\x3C\xA4\x8A\xA8\x3B\x87\x2A\xAA\x41\xA4\x70\x90\x3F\x0F\x4F\x90\x85\x30\x6F\x9F\x71\xA4\x0D\x98\x44\x0F\x46\x95\x3B\x9D\x36\xA2\x06\x01\xCD\xA8\x4F\x7D\x2A\xA9\x46\x98\xD6\x98\xB1\xA7\xBE\xA9\x3D\xAA\xD5\xA1\xEE\x9E\xA2\xA9\x20\xA3\x34\xA9\xDA\xA1\xA6\xA9\xDC\xA1\xA8\xA9\xB8\xA1\xAA\xA9\xBA\xA1\x21\xAA\x2A\xA3\xBD\xA1\x8D\xA9\xB0\xA9\x59", +"\x9C\xB2\xA9\x3E\x9E\xFC\x9A\x0D\xA0\x2B\xAA\x4B\xAA\x98\x8E\x98\x9F\x68\x6E\xC6\x9F\x49\xA4\x0A\xA8\xB8\xA4\xF2\xA9\x66\xA9\xD2\xA9\x9D\xA9\x52\xA1\x5E\xAA\x80\xA8\x13\xA8\xC2\xA9\x15\xA8\x98\xA1\xBD\xA3\x54\xA7\xBF\xA3\x72\xA9\xC1\xA3\x9E\xA1\x41\x9F\x04\x98\x7D\x90\x95\xA9\x23\x82\x24\x93\x87\x9B\xC4\x9F\x6E\xA1\x48\xA4\x73\xA4\x0F\xAA\xB9\xA9\xFA\x8C\x59\xAA\x02\x84\x50\xA9\x6C\xA7\x11\xA9\x6E\xA7\x5E\xAA\x1F\xA3\x9A\xA3\x63\xAA\x22\xA3\x65\xAA\x6B\xA2\x1A\xA9\x70\x9D\x1C\xA9\xD3\x76\xAC\xA9\x05\x9C\xAE\xA9\xD3\x21\x40\xA9\x65\xA8\x42\xA9\xE7\xA8\xE9\xA9\x8C\x6E\x74\xAA\x4A\xAA\x6D\xA4\x4B\xA4\xED\x9F\x70\x87\x92\xAA\x9C\x9F\x9C\xA4\x22\x8D\x07\x9B\x56\xAA\x11\xAA\xDD\x05\x13\xAA\x2D\xA1\x81\xA9\xF2\xA3\x86\xAA\xC0\xA8\x88\xAA\xD9\xA7\x8A\xAA\xDB\xA7\x8C\xAA\xDD\xA7\x8E\xAA\xE0\x8F\x3E\x96\xE6\xA7\xE2\x95\xB8\xAA\xE5\x95\xD9\x9B\x10\xA0\x2B\xA4\xC5\x87\xBA\xA4\x14\xA0\xBC\xA4\x92\x90\x1C\xA0\x2F\x97\x6E\x5D\x23\xA7\x73\xA5\xF7\x6F\xE0\x70\xFA\x6F\x2C\x92\xFE\x91\xD5\x7A\xE0\x64\x39\x96\xCC\x9F\x69\x9E\x08\x70\xB6\xA6\x60\x08\x4D\x29\x0C\x70\x20\x74\x8D\x62\x17\x70\x2A\x88\xD2\x21\x13\x70\x1A\x0C\x15\x70\x6E\x29\x17\x70\xE3\x8D\xCE\x5D\xCC\xA9\x59\x97\x09\x01\xD6\x3B\xA4\x7C\xF8\xAA\xF7\x20\xFA\xAA\x81\x17\x1F\x11\xBD\x37\x81\x62\xAC\xA5\xDD\x64\x22\x37\x32\x74\x8B\x0A\x53\x37\x4B\x06\x0D\x70\x3D\x1F\x17\x70\xEA\xAA\x5E\x6D\xEC\xAA\xEA\x64\x76\x9F\x5A\x6F\x59\x29\x72\x75\x09\x76\xF8\x9B\x1F\xA0\x58\x1F\x0E\xA4\xCE\xA3\x1B\x73\xC8\xA4\x86\xA7\xFE\xA4\x94\x8D\x27\xA0\xE4\x9B\x9E\x73\x74\xA1\xA5\x73\xA5\x5C\xDC\x0B\xD4\xA4\x01\xA5\x9A\x69\x2C\xAB\xA9\xA1\x2E\xAB\x53\x67\xE5\x20\xDA\xA4\xB5\x05\xDC\xA4\x58\xA5\xDE\xA4\x4D\xA5\x28\xA5\xFF\xA4\x75\x8D\x65\x75\x7C\x92\x5C\x0A\x34\xAB\xCF\xA1\x36\xAB\xE6\x42\xAB\x29\xE8\xA4\x43\xA0\xEA\xA4\x92\xA0\x8A\x72\x84\x8D\x32\xAB\xCF\x67\x45\xAB\xF9\xA1\x47\xAB\x91\x5C\x49\xAB\x88\x8D\x51\xA0\x39\x72\x3E\xA5\x1C\xA5\xD5\x8D\xEB\x74\xD5\xA4\x52\xAB\x7E\xA2\x54\xAB\x9C\x5C\xB1\x01\x09\xA5\xEA\x90\x4D\xAB\xA5\x8D\x64\xA0\x42\xAB\xD1\x92\x79\x69\x5F\xAB\x9F\xA2\x1A\x73\xEA\x42\x39\xAB\x42\x8F\x18\xA5\xCE\x6B\x0C\xA2\x23\x75\xFE\x90\xE1\xA4\x01\x91\x5E\xAB\x2D\xA4\xE9\x42\xA6\x73\xDF\x03\x23\xA5\x80\x9D\x25\xA5\x45\xA0\x78\x72\x5A\xA5\x33\xA5\x21\x6A\x79\xAB\x23\xAB\xF5\xA2\x94\x5C\x2F\xAB\xBD\x1E\x4A\xAB\x30\xA5\x14\x91\x26\xA5\x0D\xA5\x16\x91\x4F\xA5\x89\xA0\x86\xAB\xA1\xA4\xA2\x66\x6F\xAB\x3B\xA5\xCB\x04\x30\x75\x8F\xAB\x3E\xAB\x91\xAB\x29\xA5\xCB\x8D\x50\xAB\x11\x66\x6C\xAB\xCD\xA3\x88\xAB\x7B\xAB\x8A\xAB\x38\xAB\x55\xA5\x9B\x69\x4A\xA5\x3C\xAB\x0C\xA5\x9C\xAB\x28\xAB\xE4\x90\xB9\x63\x31\x91\xF3\xA4\x48\x67\x7A\xAB\x52\x67\x48\xAB\xF6\x1E\x70\xAB\x51\x01\xDE\x8D\x9B\xAB\x75\xAB\x3A\xA0\xF0\xA4\x5E\x6B\x5E\xA5\xAB\x7B\x44\xAB\xB4\xAB\x25\xAB\x58\x97\x90\x10\x66\xA5\xB0\xA0\xB2\x16\xC3\xAB\xEA\x42\x6C\xA5\x4A\x91\xB8\xA0\x77\x6A\xA2\xAB\x4E\xA4\x24\xAB\xCB\xAB\x73\xA5\xED\x94\x65\xA0\xCC\x94\x7D\x69\xD0\xAB\x79\xA4\xD2\xAB\x7C\xAB\x0D\x83\x8B\x8F\x31\x6E\xCA\xA0\xD5\xAA\x8A\x0C\x3F\x90\x33\xA5\xA7\x7B\x3C\x0F\x3C\x06\x67\x53\xE4\xAA\x80\xA5\x65\xA7\xC1\xA4\x05\xA8\x2B\x6B\xA5\x74\xC2\x74\x14\x69\xE7\xA3\x19\x71\xD7\x91\xB5\x90\x6C\x75\x2A\xAB\xC8\xAB\x2F\x67\x33\x71\xBE\x90\x69\xAB\x2F\x93\x79\x69\xEF\xAB\x96\x7F\x99\x70\x77\xA0\x6D\x8D\xB8\x0E\x3B\xAB\x73\xAB\xED\xA4\xBC\xAB\xEF\xA4\x77\xAB\x3D\xA0\xA0\xAB\x7D\x69\xFF\xAB\x27\x80\x01\xAC\x01\xA4\x84\x72\x7C\x8E\xD7\x69\x5A\xAB\x6E\xA0\x1D\xA5\xDE\x74\xD5\xA4\x0E\xAC\xC6\x83\x10\xAC\x9F\x72\x35\x6B\xDE\x90\x66\xAB\x92\x8E\x60\x71\x0C\xAC\xFE\xAB\x4A\x75\x89\x69\xEF\x6A\x65\xAB\x15\xAC\x88\xA0\xF2\x90\x19\xAC\x25\xAC\x78\x90\x57\x6B\xAB\x8E\xEB\xA4\xE0\x90\xAE\x8E\x61\xA0\x16\xAC\x5C\xAB\x78\xAB\x23\xAC\x77\x6A\x1A\xAC\xA3\x84\x1C\xAC\xDE\xAB\x64\x72\x08\x91\x31\xAC\x1E\x71\x74\xAB\x32\x75\xBD\xAB\x0A\xAC\xFF\x00\x7F\xA0\x8B\xA0\xA9\x47\x82\x72\x02\xAC\x7D\x8D\x88\x66\x31\xA5\xBB\xAB\x43\xAC\x09\xAC\x92\xAB\x3F\x69\x2C\xAC\x4A\xAC\x11\xAC\x1E\x91\xBA\x70\x3D\xA5\x4F\xAC\x50\x75\x3D\x91\x41\x65\x42\xA5\x48\xAC\x24\x4E\x55\xAC\x1D\xAC\x9B\x70\xC9\x70\x72\x00\x20\xAC\x5C\xAC\x46\x75\x54\xAC\x8F\x72\x48\xA5\x56\xA5\xBA\xAB\x81\xAB\xC9\x74\x83", +"\xAB\x7E\xA5\xFC\x81\xAF\xA0\xFC\x99\x24\xAC\x61\x75\x17\xA0\x24\x7C\xEC\x8D\x5F\x75\x75\xAC\xD0\x71\xBC\xA0\xCD\xAB\x50\x74\x32\x67\x7C\xAC\x62\x75\x15\x8F\xA3\x8E\x6A\xAB\x39\xAC\x29\x74\x4B\xAC\x55\x91\x95\x6C\x57\x91\x89\xAC\xEB\x9B\x86\x91\x8C\xA7\x4C\x9A\x08\xA6\x0F\xA0\x02\x8F\x93\x89\x5A\xAA\x7A\x9F\x3A\xAA\x3A\xA3\xF2\xA8\xD7\xA9\xFE\xA2\x19\xAA\xE2\xA2\xA3\xA8\xE4\xA2\x1D\xAA\x87\xA9\x1F\xAA\x6A\xAA\xE1\xA9\x61\x9F\x23\xAA\x5D\xA9\x25\xAA\x5F\xA9\x27\xAA\x81\x9B\x3C\xA7\xB4\x8F\x3E\xA7\x3F\x0F\x62\x7E\x76\x96\x39\x8F\x43\xA7\xB9\x63\x45\xA7\xF1\xA9\x2B\x6B\x90\xAC\x6A\xA6\xD9\xAA\x93\xAC\xC6\xAA\x9F\xA9\xD3\xA7\xDC\xA2\xF8\xA9\x57\xA4\xFA\xA9\x59\xA4\x35\xA8\x1B\xAA\xDB\xA8\xA0\xAC\x83\xA3\x88\xA9\x85\xA3\x8A\xA9\x04\xAA\xE2\xA8\x06\xAA\xE4\xA8\xB3\xAA\xE7\xA9\x31\x9C\x01\xA8\x7B\x91\x33\x9C\x7D\x91\xC2\xA4\x81\x97\x1F\xA1\x06\x76\xAB\x90\x64\xA7\x90\x10\x66\xA7\x27\xA9\x09\x01\xB8\xAC\x7B\xA6\x12\x8F\xE3\x3A\xBC\xAC\x19\xA2\xA0\xA9\x98\xA3\x61\xAA\xA5\xAA\xA4\xA9\x17\xA9\x85\xA4\xF8\xA8\x87\xA4\xFA\xA8\x89\xA4\xE0\xA9\x9A\xA7\xE2\xA9\x9C\xA7\xE4\xA9\x9E\xA7\x23\xA9\xA0\xA7\x04\xA9\x93\xA4\xCE\x9C\xC7\x88\xA1\x83\x61\x9C\x50\xAA\x63\x9C\xB2\x7B\x5C\x8F\xB6\xAC\x5C\x0A\xE1\xAC\xE0\xA6\xE3\xAC\xB5\x6E\xE5\xAC\x56\xA8\xC8\xAA\x81\xA8\x6C\xA9\xBB\xA3\xCC\xAA\x17\xA8\x43\xAA\xAD\xA4\x45\xAA\xAF\xA4\x47\xAA\xC6\x92\xA4\xA7\xFF\x91\x6C\xA1\x01\x92\x88\xA7\xC3\x7E\xAF\x6F\x18\x8A\xCB\xA8\x77\x6A\x06\xAD\x2C\xA6\xDF\xAA\x3E\x8A\x0A\xAD\xBF\xA9\xBD\xA8\x2F\xA7\x3F\xAA\xA9\xA4\x41\xAA\x33\xA7\x86\xA8\x5D\x95\x88\xA8\x19\x93\x09\xAA\x28\xAA\x68\xA8\x61\x98\xCA\xA7\x20\xAD\x07\x6D\x22\xAD\x9C\xA6\x1B\x8F\x09\xAD\x81\xAA\x78\xA1\x27\xAD\x53\xA9\xC9\xAA\x0E\xAD\xD7\xA7\x10\xAD\x85\xA8\x12\xAD\x19\xA8\x14\xAD\x1B\xA8\xCA\xA9\x2F\x8F\xC5\xAB\x71\x0F\xD1\x9C\x04\xAD\x27\x01\x39\xAD\xF8\xA6\xBA\xAC\xBD\xA4\x94\xAC\x9E\xAA\xBD\xA9\x55\xA8\x3F\xAD\x0C\xAD\x85\xAA\x42\xAD\x83\xA8\x44\xAD\xC2\xA8\xCE\xAA\xC4\xA8\xD0\xAA\xC6\xA8\xA9\x76\xAC\xAC\xD2\x83\xAE\xAC\x3B\x0F\x82\x89\x74\x92\x84\x89\xEE\x9C\x88\x8F\x9A\xAA\x50\xAD\x11\x8F\x53\xAD\x92\x90\x26\xAD\x83\xAA\x15\xAA\x12\x9F\x17\xAA\xE0\xA2\x9C\xAC\x00\xA3\x9E\xAC\x02\xA3\xC7\xAC\xDD\xA8\xC9\xAC\xDF\xA8\xCB\xAC\xF4\xAC\xC2\xA7\xF6\xAC\xC4\xA7\xF8\xAC\xC6\xA7\x91\xA9\x82\xA7\xD6\xAC\x54\x9D\xB0\x89\x0C\x9D\x90\xA8\x55\xA2\xE5\x0A\x94\xA8\x33\x8F\x0D\xAA\x71\x0F\x14\x9D\x79\xA9\x51\xAD\xC6\xA6\x71\xAD\x25\xAD\x3D\xAD\xAD\xA1\xBF\xAC\x84\xA2\x92\x98\xD6\xA8\x7D\xA3\xD8\xA8\x0B\x53\xDA\xA8\xFE\xA9\xDC\xA8\x00\xAA\xDE\xA8\x02\xAA\xE0\xA8\xCC\xAC\x8C\xA9\x5E\x9E\x8E\xA9\x4F\x85\xC1\xA1\x8C\x7E\xFF\xA3\xA5\x9E\x47\xA8\x57\x6D\x5B\x9D\x28\x93\x44\x0F\x3A\x9D\xE6\xA3\xAF\x74\x21\xAD\x70\xAD\x92\xAC\x54\xAD\x73\xAD\x9D\xAD\xB4\xA7\x71\x9C\xB6\xA7\xC5\x6D\xB8\xA7\xF2\xA7\xED\xAC\x19\xA9\x67\xAA\xDE\xA1\x3A\xA9\x44\x99\x3C\xA9\x56\x79\x6D\xAA\xAD\xAD\x6F\xAA\xA5\x9D\xB0\xAD\x25\x80\x34\xAD\x7C\x9D\x1E\xA8\xBE\x68\x6D\xA8\x21\xA8\xC2\x9F\xCA\x7F\x91\xAD\x3F\x8A\x5C\x9D\x74\xA8\x33\xAA\xF2\xAB\x11\x66\x97\xAD\x58\x9B\x08\xAD\xBB\xAC\x9B\xAD\xB2\xA7\xC1\xAD\xA9\x9F\x31\xA9\xF9\xA9\xF0\xA7\xFB\xA9\xC7\xAD\xBA\xA7\xEE\xAC\xBC\xA7\xF0\xAC\xBE\xA7\xF2\xAC\xC0\xA7\x82\xAD\x05\xAA\x84\xAD\x07\xAA\x86\xAD\x32\xAD\xB0\xA8\xFF\xA3\x8C\xA8\x46\x02\xC0\x8F\x96\xA4\x3D\x8A\x97\xAA\x05\x7B\x89\x9D\x3D\x98\x4B\xA9\x79\x69\xE5\xAD\x97\x9F\x24\xAD\xD5\x75\x95\xAC\x2C\xA9\x5C\xAA\x58\xAD\x74\xAD\x28\xAD\xA0\xA8\x2A\xAD\x31\xA7\x2C\xAD\x97\xA7\x34\xA7\x2F\xAD\x48\xAD\x89\xA8\x4A\xAD\x3A\x7A\xB2\xA8\x50\x93\x5C\xA2\x0C\xAE\x6C\x8E\x15\xA0\x4B\x7A\x10\xAE\xF9\x9F\x7F\xA9\xBC\xA8\x40\xAD\x0D\xAD\x55\xA9\x6D\xA9\x57\xA9\x6F\xA9\x8E\x8B\x81\xAD\xA5\xAC\xE3\xA9\x37\xA7\xE5\xA9\xD0\xAC\xF9\xAC\xE8\xA9\xFB\xAC\x64\x9E\xC9\xA8\x85\x98\x37\xAD\xB7\xAC\xBD\xAD\x3B\xAD\xE8\xAD\xBC\xA9\x4C\x9E\x4D\xA7\xE7\xAC\x13\xA9\xEE\xAD\x15\xA9\xEB\xAC\x35\xA9\xC8\xAD\x37\xA9\xEF\xAC\x39\xA9\x69\xAA\x28\xA3\x6B\xAA\xA4\xA3\xD0\xAD\x73\xA2\xAE\xAD\x01\x78\xD4\xAD\xA4\x84\xD6\xAD\x13\x6C\xEA\xA8\x4F\xAD\xE0\xAC\x41\xAE\x4A\xA6\x25\x30\xC0\xAD\x2F\xA9\xAF\xA1\xD6\xA1\xC4\xAD\x0B\x53\xC6\xAD\xA5\xA9\x4D\xAE\xA7\xA9\x4F\xAE\xA9\xA9\xF1\xAC\x20", +"\xAA\xA4\xAC\xFE\xA8\x35\xAE\x00\xA9\xF7\xAC\xE6\xA9\x39\xAE\xB5\xAA\x3B\xAE\x26\x9F\xEB\xA9\x75\xAA\x91\x6E\xD0\xA2\x1B\x91\x66\x81\x05\xAD\x60\xAE\x8C\xA6\x62\xAE\xE9\xAD\x5D\xAA\xEB\xAD\x54\xA1\x66\xAE\xA0\xAD\x71\xA7\xA2\xAD\xFB\x23\xA4\xAD\xF3\xAD\xFF\xA9\xF5\xAD\x01\xAA\xF7\xAD\x03\xAA\xF9\xAD\xCD\xAC\xFB\xAD\xCF\xAC\x26\xAA\xE6\xA8\x6C\x59\x26\xA9\x5E\xAE\x76\x75\x82\xAE\xE3\x8E\x72\xAD\x85\xAE\x13\xAE\x87\xAE\x5F\xAA\x85\xA2\xE9\xAC\xD7\xA8\x9B\xA3\xF2\x9E\x9D\xA3\x4E\x7E\x9F\xA3\x2B\x86\xCC\xAD\x81\x9A\xAE\xAA\x2B\x9C\xB0\xAA\x3E\x78\xD2\xAD\x2E\xA3\x59\xAE\xEF\x87\x5B\xAE\xDF\x95\x46\xA9\xCD\xA7\x71\x9F\x48\x0F\x15\xA3\x3F\xAE\x81\xAE\x8B\xA6\xA0\xAE\x9A\xAD\x44\xAE\x0E\x9F\xA1\xAA\xED\xA7\x16\xAA\x9A\xAC\x33\xA8\xC3\xAC\xFC\xA9\xC5\xAC\xA5\xAD\x7D\xAD\xA7\xAD\x7F\xAD\xA9\xAD\x33\xAE\x72\xAE\xF5\xAC\x36\xAE\x75\xAE\x38\xAE\x87\xAD\xFA\xAC\xA2\xA7\x32\xA3\x1D\x94\x2D\x99\x8B\x9D\x24\xAE\x77\xAA\x0E\xAE\x27\xAE\x56\xAD\x45\xAE\x91\xA7\x2C\xAE\x5B\xAD\x2E\xAE\x0F\xAD\x6E\xA9\x99\xA1\x70\xA9\x55\xA7\xE5\x85\x57\xA7\x51\x85\xDC\xAE\xF1\x87\x72\x8B\x50\x99\x4D\x8B\xE1\xAE\xA7\x8E\xE7\xAD\xBF\xAD\xA2\xAE\x7E\xA8\x14\xAE\xE8\xAE\xBE\xA8\xCA\xAA\x40\xAA\x5E\xAD\xC5\xA9\x60\xAD\xC7\xA9\x62\xAD\xC9\xA9\xD2\xAA\x5A\x90\x2E\x79\xF5\x8D\x99\x7A\xA2\x9E\x62\x4B\xE0\xAE\x9F\xAE\xF4\x8E\x0F\xAE\xE5\xAE\xC6\xAE\x80\xA9\x47\xAE\xA3\xAA\x67\xAE\x23\x86\xA9\xAE\xD8\x9F\xAB\xAE\xD3\x21\x33\x9E\x50\xAE\x6F\xAE\xA3\xAC\xF3\xAC\x34\xAE\xD6\xAE\x74\xAE\x85\xAD\x76\xAE\xDA\xAE\x3A\xAE\xF3\xAE\xA4\x90\x9A\x99\x90\xA3\x23\xAE\x11\xAF\xE6\x95\x13\xAF\xAB\x86\x9F\xAA\xD1\xA7\x16\xAF\xBE\xAC\x64\xAE\xC9\xAE\xFA\x9B\xD8\xA9\x7A\x9A\xF6\xA8\x42\xA2\x1A\xAE\x2E\xAD\x97\x96\x30\xAD\xAE\x93\xFE\xAD\x61\xA9\xB2\xAD\x01\xAB\x90\x10\xCE\xA9\xED\x9B\xBC\xAD\xC2\xAE\x12\xAF\xE4\xAE\x33\xAF\x57\xAD\xFD\xAE\xA4\xAE\x84\xAA\x00\xAF\x5C\xAD\xC3\xA9\x03\xAF\x42\xAA\x05\xAF\x44\xAA\xC8\xA9\x46\xAA\x1F\xAE\x52\x8F\xF4\x8F\xD5\x9B\xA6\x83\xEE\xA9\x75\x03\xF7\xAE\x30\xAF\xD2\x8E\x40\x86\x28\xAE\xD1\xA8\x97\xAC\x55\xA4\xB9\x96\x49\xAE\x33\xA9\x4B\xAE\x64\xAA\x6B\xAE\x66\xAA\x6D\xAE\x68\xAA\x21\xAF\x52\xAE\x71\xAE\x22\xAA\x73\xAE\x24\xAA\x37\xAE\x99\xAE\xB4\xAA\x43\xA8\x44\xA9\x06\xA9\xBB\xAE\xE1\xAB\x08\xA4\x83\xAC\xCD\x92\x55\xAA\x03\x01\xF8\xAE\x0A\x8F\x61\xAE\xE4\xAC\xFC\xAE\x2E\xA9\x57\x76\x5A\xAD\x54\xAF\xEA\xAE\x43\xAD\xEC\xAE\x89\xAA\xEE\xAE\x8B\xAA\xF0\xAE\x73\xA9\xF2\xAE\x92\xA9\xBE\x9F\x21\xA4\xBE\xAA\xC1\x9F\x2D\xAA\xC0\x0C\x3F\x90\x06\xAE\x42\x90\x9D\x10\x06\x9B\x69\x9A\x4B\xAF\xF2\x8E\x83\xAE\x8B\xAF\xC5\xAE\x62\xA2\x98\xAC\x6C\xAF\xC1\xAC\xEF\xAD\xCC\xAE\xF1\xAD\xFD\xA9\x8F\xAE\xA6\xAD\x91\xAE\xA8\xAD\x93\xAE\xAA\xAD\x95\xAE\xAC\xAD\x56\xAE\xB5\xAE\x8F\xA9\xB7\xAE\xC6\x2E\x73\xAA\x9C\xAF\xEC\xA9\x27\x8E\x3F\x87\x2D\x9B\x41\x87\x51\x90\xB6\xAD\x38\x9D\xB9\x63\x53\xAA\xBA\xAD\x5B\x8E\x38\xAD\x65\xAF\x84\xAE\xAB\xAF\xA3\xA2\x36\xAF\x3C\xAA\xA4\xAE\xA4\xAA\xA8\xAE\xA6\xAA\x9C\xA3\x23\xA3\x6E\x9D\xAA\xAA\x9D\x9D\xAC\xAA\x22\x4C\xCE\xAD\x1F\x79\x55\xAE\x2C\xA3\xBD\xAF\xAF\xAD\x71\xAA\x91\x9F\xC1\xAF\x7C\x90\x67\x95\x7C\xAE\x57\x9B\x0D\xAE\x46\x96\x5A\x9B\x1C\xAD\x8A\x9B\x7B\xAA\x85\xAF\xDB\xAA\xC1\xAE\xA8\xAF\xC3\xAE\x32\xAF\x4D\x87\xEA\xA7\x9E\xA9\xE6\xAC\x37\xAF\x58\xA8\xFD\x94\x5A\xA8\x85\xA9\x58\xA9\x32\xAE\x71\xA9\x97\xAF\x8D\xAA\x74\xA9\x89\xAD\x0F\x87\x95\xA4\xEF\xA1\x7F\x66\x95\xAA\x2D\x03\x94\x95\x92\xAD\x59\xA2\x39\x7B\x6E\xAD\x5F\xAE\x4C\xAF\x31\xAF\x4E\xAF\xFA\xAF\x34\xAF\xF0\xA8\xC7\xAE\x31\xA8\xCA\xAE\xF4\xA8\x3C\xAF\xDA\xA9\x7B\xAD\x5F\xA3\x86\xA9\xC8\xAC\xA2\xAC\x76\xAF\x23\xAF\xD5\xAE\x83\xAD\xD7\xAE\x27\xAF\xD9\xAE\x44\xAF\xB3\xA9\x29\xAA\xA8\x97\x03\xA4\xCC\xA1\x66\x7B\xAC\x9B\xF1\xAF\x4A\xA8\x85\x90\xC1\xAA\xC7\x8C\xE4\xAD\xD0\xAF\xAA\xAF\x39\xAA\x12\xAE\x51\xAF\x38\xAF\xC2\xAD\x55\x9F\x19\xAF\x41\x52\x8C\xAE\x26\x86\xA8\xAA\x24\xA3\xDD\xAF\x5D\x9F\xDF\xAF\x91\x80\x77\xAF\x6C\xAA\xA6\xAC\x6E\xAA\x5E\xA9\xB1\xA9\xAA\xAC\x45\xAF\xB9\xAE\x99\x8B\x03\x01\xD4\xAA\x2B\xA8\x0C\x83\xB6\xA4\x26\xAE\x55\x82\xE3\xAD\xFA\x87\x13\xA0\x97\x90\x5D\xB0\xB4\x8F\x09\x8E\xD1\xA0\x7F\x48\x74\xAC\x91\x74\x88\xAC\xE5\x99\xB9\x60\x15\x2A\x11\x96\xD1\xA0\xBD", +"\x00\xD4\xA0\xC2\xAF\x27\x96\x0E\x9E\x6C\x19\x6E\xB0\xD5\xAB\x09\x41\x71\xB0\xC9\xA0\xA7\x99\x2D\xA0\x00\x96\xD1\xA0\xBF\x00\x79\xB0\x6A\xB0\x4E\x9F\x20\x38\x95\x1E\x47\xAF\x71\x0F\xC3\x10\x23\x6F\xE9\xAB\x61\x81\x01\x0B\xC8\xA5\xEE\x7D\x3B\xA6\x8C\x0E\xAB\xA5\xFD\x0B\x7D\x2B\x0D\x7C\x22\x08\x89\xB0\xE0\xA7\xE2\x9B\xD0\x98\xCE\xA4\x07\x6D\x93\x90\x11\xAE\xE6\x16\xC1\x3E\x95\xB0\xDF\x6F\xD1\xA0\xC1\x00\x80\xB0\x56\xAC\x3B\x95\x67\x97\x9E\x0B\x76\xB0\xCF\x9A\x06\x01\xC2\x00\xA3\xB0\x62\xAC\xDF\x71\xA6\xB0\xE0\x01\xA8\xB0\x84\xAF\x02\x01\xC3\x00\xAC\xB0\x3D\xAC\x9B\x70\xCE\x6C\x80\x02\xB1\xB0\x2A\x9F\x01\x01\xC4\x00\xB5\xB0\xE3\x74\xDF\xAB\xBA\x6C\xB9\xB0\x4A\x96\x77\xB0\x01\x01\xC5\x00\xBE\xB0\x1E\x75\xC6\x0D\x3A\x0F\xD6\x64\xC1\xA0\xD0\xA0\xC4\xB0\x00\x00\xC6\x00\xC7\xB0\x4B\x75\x29\x66\xA3\xAB\x18\xA3\x89\xAB\x37\xAB\xAB\x29\xBA\xB0\xC3\xA0\x27\x01\xC7\x00\xD1\xB0\xB7\x38\xA4\x96\x8D\x58\xF0\xA6\xF6\x99\x0C\x56\x16\x0A\x99\x90\x42\x10\xC8\x00\x75\x6B\xF7\x6F\x70\x0F\xC9\x00\x70\x73\x97\x7C\x40\x72\x2F\x09\xED\xB0\x47\x65\xCF\xA6\x4C\x67\xFF\x0E\xEA\x62\xF9\xAE\x5C\xA6\xC8\xA6\x83\x02\xD6\x66\xEB\xB0\xEE\x7D\x60\x00\x3B\x73\x03\x01\xFD\xB0\x4C\x65\xF2\xB0\xF1\xAA\x83\x0B\x03\x5D\x15\xA7\x17\x83\x9D\xA6\x9E\xA5\x9F\xB0\x0D\x88\xD1\xA0\x36\x25\x68\xB0\x7C\x68\x72\xB0\xFE\x9A\x61\x29\xAB\x6C\xF1\x8D\x06\x01\xCB\x00\xA1\x74\x8D\xAC\x38\x90\x79\xA9\xE1\xB0\x0F\x90\xC7\x8B\x3E\xB0\xFB\xAF\x82\xAA\x52\xAF\x75\xAD\xD5\xA7\x55\xAF\x87\xAA\x93\xAF\xCD\xAA\x95\xAF\xCF\xAA\x06\xB0\xD1\xAA\x58\xA7\xE3\xA7\x5A\xA7\xD5\xAC\xA9\x91\xED\xAB\xD8\xAC\xF7\xA0\x78\x96\xF9\xA0\x85\x91\x19\xB1\xDF\xAC\x43\x7D\x5B\x89\x68\xAF\x7E\xA9\x6A\xAF\xF1\xA8\xAE\xAF\x77\xAD\x5B\xA3\x79\xAD\x5D\xA3\x22\xB0\x5C\xA4\x24\xB0\x7E\xAD\x26\xB0\xA2\xA3\x53\xAE\xAD\xA9\xE3\xAF\xA6\xA3\x57\xAE\xFB\x23\x90\xA9\x3C\x94\x65\xAD\x39\x98\x67\xAD\x74\x8F\x40\xA7\xB7\x38\x61\xA7\x3B\x9C\x61\x98\xBF\xA4\x24\xA1\xB3\x91\x8C\xA7\x1B\xB1\x64\x94\x1D\xB1\x7B\xA8\x11\x9E\x3D\xB1\x1C\xB0\x99\xAC\x3A\xAF\x9B\xAC\x20\xB0\x1A\xAA\x44\xB1\xDC\xA9\x46\xB1\xD1\xAE\x48\xB1\xF8\xA7\xB1\xAE\x2B\x9D\xB3\xAE\x10\x44\x4E\xB1\x8A\x77\xE7\xAF\x78\x85\x46\xAF\xD5\x91\x85\xA7\xF4\xAB\x87\xA7\x00\xAD\x12\x95\x02\xAD\x65\x9C\x38\xB1\x03\x01\x5F\xB1\x60\xAF\x16\x8C\x62\xB1\x6D\x9E\x64\xB1\xD4\xAF\x12\xA9\x18\xAF\x8A\xAE\xB7\xA7\x46\xB0\x06\x77\xDB\xAF\x9B\x9D\x4A\xB0\x87\x9F\x4C\xB0\xEA\x7F\x4E\xB0\x54\xAE\x50\xB0\xD1\xAD\x52\xB0\x70\xAA\x54\xB0\x2F\xB0\x56\xB0\xEE\x7C\x65\x8F\xA6\xA7\x6D\xA1\x30\xAA\x6F\xA1\x1E\xAD\x6E\x8C\x5C\xA2\x84\xB1\xA0\x9E\xF3\x86\xD2\xAF\x78\xA3\x65\xB1\x3F\xB1\x1E\xB0\x18\xAA\x69\xB1\x9D\xAC\xF7\xA8\xC9\xAD\x73\xAF\xCB\xAD\x51\xAE\x49\xB1\x97\xB1\x4B\xB1\x99\xB1\xBC\xAF\x9B\xB1\xD3\xAD\x77\xB1\xB1\xAD\x9F\xB1\xAD\x9C\x06\x01\x28\x92\x3A\x91\x5C\x0A\xA9\xB1\x04\x9F\xAB\xB1\x1E\xB1\x1A\xB0\x10\xA9\x8A\xB1\xA2\xAA\xD6\xAF\x44\xB0\x3E\x51\x8F\xB1\xEC\x77\x91\xB1\x32\x9E\xAD\xAE\xE7\x7F\xAF\xAE\xF3\x9A\x71\xB1\x38\x9E\x73\xB1\x59\x79\xE5\xAF\x58\xAE\xC0\xB1\xD5\xAD\x7F\xAF\x08\xA8\x06\x96\x19\x95\x72\x74\x21\x0F\x22\x57\x7E\xB1\xFF\x9A\xDC\xAC\x4D\xAD\xE2\xA7\xFC\x75\x11\x66\xC8\xB1\x29\xA7\x22\x7D\xAC\xB1\x51\xA9\x2B\xAE\x8F\xAF\x29\xAD\x01\xAF\x2B\xAD\x57\xAF\x2D\xAD\x46\xAD\x87\xA8\x1D\xAE\x31\xAD\x29\x7E\xD3\xAC\x70\x96\x1B\xA1\x04\xA8\x1D\xA1\x06\xA8\x83\x89\x40\xAC\xC4\x9E\x26\x77\xE2\xAD\xBB\xAD\x07\x6D\xF1\xB1\x47\xA9\xF8\x8C\x87\xB1\x87\x9E\x6B\xAF\x14\x9B\x40\xB1\x58\xA4\x42\xB1\x5A\xA4\x6B\xB1\x1C\xAA\x6D\xB1\xB6\xAF\xD2\xAE\xB8\xAF\xD4\xAE\x78\xAF\x25\xAF\x7A\xAF\xD8\xAE\x7C\xAF\xD1\xAC\x7E\xAF\xB6\xAA\x4F\xA2\xD8\xAD\x9B\x69\x20\xA8\xE9\x8D\x94\xAA\xF1\xA1\xE0\xAA\x7A\xAA\x27\xA8\x0C\xB2\x00\x09\x79\x69\x0F\xB2\xBC\xAE\xE7\x89\xCB\xB1\x50\xAF\x8D\xAF\xD0\x7E\x15\xAE\x6B\xA9\x91\xAF\x5D\xAD\x26\xB1\x11\xAD\x59\xAF\x13\xAD\x5B\xAF\x15\xAD\x5D\xAF\x17\xAD\x33\xAC\x37\x5C\xDA\x97\xC9\xAF\x10\xA2\xB9\x63\xB9\xAD\xAB\x9A\x2B\x6B\x36\xB2\x82\xAF\xF3\xB1\x39\xB2\xE6\xAE\x9E\xA8\x3D\xB2\xC1\xA9\x24\xB1\xCB\xAA\x41\xB2\x45\xAD\x43\xB2\x47\xAD\x45\xB2\x49\xAD\x09\xAF\xE0\x76\x01\xAE\xA9\x97\x9B\x69\xDA\xAD\x2D\xB2\x6E\xA4\x92\xA8\x10\x9D\x58\xA2\xE0\xAD\xB9\x63\xFA\x92\xCD", +"\xAF\x94\x90\x77\x6A\x52\xB2\x5A\xB0\x54\x84\x8C\xAF\x3B\xAA\x8B\xB1\xD0\xB1\x8D\xB1\xC5\xAD\xD3\xB1\x8B\x78\xD5\xB1\x5B\x9F\x93\xB1\x6D\xA2\x95\xB1\x58\x94\xDB\xB1\x71\xA2\x4C\xB1\x21\xA9\x75\xB1\xC7\x83\xE1\xB1\x5A\xAE\xE3\xB1\x2A\xA2\xA8\x97\x03\xAE\x0C\xB0\x95\x8F\x23\xA8\x71\xA8\x4C\xB2\x9B\xA4\x71\x0F\x5B\xA2\xC0\xAE\x27\x01\x73\xB2\x4F\xA8\x75\xB2\xF4\xB1\xA0\xAA\xCE\xB1\xC8\xAE\x76\xAD\xB0\xB1\x78\xAD\xB2\xB1\x7A\xAD\xB4\xB1\x4E\xAE\xF4\xAD\x20\xAF\xF6\xAD\x70\xAE\x28\xB0\x21\xB2\x2A\xB0\x26\xAF\xFC\xAD\x28\xAF\x2E\xB0\x72\xAA\xB2\xAD\x7A\xA2\x0C\x01\x8B\x9D\x9A\xB2\x78\xA8\x9C\xB2\x55\xB2\x15\xAF\xF6\xB1\x17\xAF\x79\xB2\xA7\xAE\xA1\xAD\x1B\xAF\x89\xA2\x1D\xAF\xA3\x75\x80\xB2\x26\xA3\xB8\xB1\x70\xB1\x4A\xB1\xAF\xAA\x86\xB2\x3F\xA9\x88\xB2\xCC\x84\x9A\xAE\x0A\xAA\x9F\xB1\xC8\x9D\xA8\x67\xA8\xB1\x3A\xB1\x14\xAF\xAC\xAF\x14\xB2\xDE\xA2\x16\xB2\xC2\xAC\x18\xB2\xC4\xAC\x1A\xB2\xC6\xAC\x1C\xB2\xA9\xB2\x92\xAE\xAB\xB2\xF8\xAD\x24\xAF\xAE\xB2\x23\xB2\x2C\xB0\x25\xB2\x77\xAE\x27\xB2\x79\xAE\xE9\xA8\xAC\x6D\x4D\x8B\xB8\xB2\x3C\x95\x63\xAE\x8E\xAF\xBE\xB2\x41\xB0\x23\xB1\x3F\xB2\x56\xAF\x5C\xB2\x5F\xAD\x28\xB1\x61\xAD\x2A\xB1\x63\xAD\x08\xB0\xC3\xA3\x7B\xAE\xB9\xAA\x63\x8C\x7E\xAE\x76\x67\xC7\x79\xC7\xB1\xD6\xB2\x4F\xAF\x56\xB2\x69\xA9\x58\xB2\xD6\xA9\x67\xB1\xCB\xAE\xDD\xB2\xCD\xAE\xDF\xB2\xCF\xAE\xE1\xB2\x6E\xAE\xAA\xB2\x22\xAF\xE5\xB2\x29\xB0\xFA\xAD\x2B\xB0\xB0\xB2\x2D\xB0\xE6\x98\xC7\x85\x03\x01\xD6\x93\x2D\xB1\x35\xB2\x09\xB3\x19\xB0\x3A\xB2\x77\xB2\xCF\xB1\xF6\xB2\x3E\xAA\xF9\xB1\x18\xAE\xFB\xB1\x3F\xAF\xFD\xB1\x1C\xAE\x60\xB2\x1E\xAE\x62\xB2\x25\x90\x5F\xAF\xAA\xB1\xBD\xAE\xB9\x63\xBF\xAE\x0A\xAE\x72\xB2\x25\xB3\x42\x9D\x1F\xB1\x3E\xAD\xFE\xAE\xF7\xB1\x16\xAE\x2C\xB3\x3D\xAF\x96\xA7\x61\xA3\x6F\xB1\x3B\xA9\x84\xB2\xFA\xA7\xDD\xB1\x22\x79\xDF\xB1\x4F\xB1\xBF\xAF\x5F\x79\xFF\xA3\x33\xA3\x89\x02\xB7\xB2\x3D\xB3\x87\x86\x3F\xB0\x3B\xB2\x21\x81\x0D\xB3\xC0\xAC\xDB\xB2\xB0\xAF\x11\xB3\xB2\xAF\xCE\xAE\xB4\xAF\xD0\xAE\x1D\xB2\x48\xB3\xCD\xAD\x4A\xB3\x1F\xA9\xCC\xB2\xAF\xA9\xBE\xB1\xB6\xAE\x8A\xB2\xB8\xAE\x8C\xB2\x35\xB1\x50\xA3\x94\x79\xF0\xB2\x56\xB3\x96\x8A\x58\xB3\x28\xB3\xA0\xB2\xF7\xB2\x83\xA9\x2F\xAE\x02\xB0\x31\xAE\x02\x8C\x20\xB2\x4F\xB0\x79\xAF\xA7\xAC\x7B\xAF\xA9\xAC\xD0\xB2\x33\xAD\x6F\xB3\xEC\x80\x58\xB0\x9F\x8C\x9C\x8B\x71\xA3\x78\x99\xD5\xB2\x26\x8D\x3B\xB1\x32\x9F\x3F\xB3\x9C\xAD\x2A\xB3\xA5\xAE\x9F\xAD\xC0\xB2\x8B\xAE\xC2\xB2\xD9\xA8\xC4\xB2\x34\x4F\xD7\xB1\xDE\x80\xD9\xB1\x03\x9C\x67\xB3\x3D\xA9\x69\xB3\xB1\xAA\xCE\xB2\xF7\x83\x9D\xB1\xB3\xB2\xD2\xB2\x8F\xA3\xEF\x79\x98\xB2\x09\x01\xF1\xB2\x50\x8B\x76\xB2\xAD\xAF\x15\xB2\xA2\xB2\x41\xB1\xA4\xB2\x43\xB1\xA6\xB2\x6C\xAE\xA8\xB2\x16\xB3\xE3\xB2\x18\xB3\x94\xAE\xE6\xB2\x1B\xB3\xAF\xB2\x98\xAE\x84\xB3\x7D\xAF\xD1\xB2\x87\xB3\xB0\x91\xE1\x9E\xE8\x8B\xE3\x9E\x5E\xB1\x74\xB3\xF3\x8B\x76\xB3\xB1\xB3\xDA\xB2\xB3\xB3\x17\xB2\xB5\xB3\x19\xB2\xB7\xB3\x72\xAF\xB9\xB3\x74\xAF\x17\xB3\x27\xB0\x19\xB3\xAD\xB2\xBF\xB3\xE8\xB2\x1D\xB3\xEA\xB2\x29\xAF\x78\xAE\x2B\xAF\x38\x95\x0C\xAA\x80\x82\x62\xAF\x51\x03\x73\xB3\x8F\xB3\xD7\xB2\xD3\xAF\xBD\xB2\xFE\xAF\x82\xA9\x00\xB0\x84\xA9\x0F\x93\x03\xB0\x7E\xB3\x05\xB0\x61\x8A\xF1\xAE\xC4\x88\x09\xB0\x05\x9E\x81\xAF\x74\xB2\x48\xA9\xBB\xB0\x54\xAA\xF5\xAF\x99\xB2\xCB\xB3\xE7\x9B\x27\xB3\xCE\xB3\xED\xAD\xAF\xAF\x4A\xAE\xF0\xAD\x6A\xAE\xF2\xAD\xB5\xB1\xD6\xB3\xB7\xB1\x75\xAF\xB9\xB1\xAC\xB2\x80\xB3\x22\xB2\x82\xB3\x24\xB2\xC2\xB3\x26\xB2\xC4\xB3\x28\xB2\xA9\x6D\x6A\x9F\x90\xB2\x2A\x0A\x05\xA4\xA1\xAF\xA4\xB1\x98\xAA\x05\x9B\x14\xB0\x39\xB1\xE9\xB3\x0A\xB3\xBC\xB2\x2D\xA7\x5B\xB3\x39\xAF\x80\x9F\x07\xB4\xB1\xAF\x09\xB4\xB3\xAF\x0B\xB4\x90\xAE\xE2\xB2\xB7\xAF\xE4\xB2\xBD\xB3\x1A\xB3\x96\xAE\x1C\xB3\xC1\xB3\x53\xB0\x85\xB3\xFF\xAD\x9F\xB1\x1A\xB4\x54\xA2\xF1\x0E\x25\xA4\x2E\x9B\x27\xA4\x9D\xAF\xFC\x81\xCC\xAF\x50\xB2\x08\xB3\x24\xB4\x26\xB3\x0B\xB3\xD4\xA9\x28\xB4\xA1\xB2\x0F\xB3\x1F\xB0\x22\x9C\x60\xB3\x13\xB3\x62\xB3\x15\xB3\xD7\xB3\xBB\xB3\xD9\xB3\x34\xB4\xDB\xB3\x36\xB4\xC0\xB3\xF6\xB3\x0A\x8C\x9A\xAF\x1F\x82\xD7\xAA\x96\xA4\x6E\x87\x99\x9F\xA2\xAF\xBF\xAA\x71\x0F\x9E\x9F\xBA\x89\x0E\xB2\x01\xB4\x03\xB1\x03\xB4\xD9\xB2\x05\xB4\x5D\xB3\x2B", +"\xB4\x5F\xB3\x2D\xB4\x61\xB3\x2F\xB4\xB5\xAF\x31\xB4\x1E\xB2\x33\xB4\xB9\xAF\xBE\xB3\x5A\xB4\xDD\xB3\x38\xB4\x9C\xB1\x3A\xB4\x55\xB0\xC5\xB3\xB6\x95\x60\xB4\x1B\xB4\x92\xA8\x0E\xB0\xFE\x18\x1F\xB4\x07\xAE\x90\x10\x1F\xA7\x70\xB2\x1C\x8D\x3C\xB3\x48\xB4\x3E\xB3\xCC\xB1\xFC\xAF\x0B\xAD\xF5\xB2\xFF\xAF\x26\x95\x01\xB0\xF1\xB3\x7D\xB3\xDF\x8C\xF4\xB3\x06\x8C\x7D\xB4\xBF\xB1\xA7\xB3\xE8\xAF\x30\xB0\xEA\xAF\xEB\x8C\xDB\xAD\x33\xB0\xC5\x87\x99\xA4\x94\xB2\x26\xA8\x38\xB0\x09\x01\xE9\x99\x9E\xA4\xCF\x67\xAE\xB3\x22\xA4\xF3\xB2\x3C\xB2\xFF\xAE\xF8\xB1\x5A\xB2\x02\xAF\xFA\xB2\x04\xAF\xFC\xB2\x06\xAF\xFE\xB2\x08\xAF\x00\xB3\xD3\xAA\x8A\xB3\xE3\x1B\x5C\xB0\xE3\xAE\x5E\xB0\x0D\xB2\xDC\xAA\xEA\x95\x43\x8E\x63\xB0\xD2\x83\x65\xB0\xCE\xB0\x8C\xB4\x69\xB0\xCD\xB4\xAD\xB0\xC2\x72\x44\x9F\x51\x8E\xE5\xA3\xDD\xB0\x2E\xAC\xC9\xB0\xD1\xB4\x4A\x7C\x25\xA7\x59\xA7\x79\x69\x61\x7D\x8F\xB4\x57\xB3\x92\xB3\xEA\xAD\x94\xB3\x53\xAF\xB4\xB4\xF8\xB2\x25\xB1\x30\xAE\xED\xAE\x04\xB0\xEF\xAE\xF5\xB3\x98\xAF\x44\x78\x52\xB1\xD2\x96\x54\xB1\x12\x67\x32\xB1\x41\xA7\x77\x96\x62\xA7\xF6\x24\xFA\xA0\xEC\x9B\x5C\x91\xCF\x67\xDC\xB4\x0C\xAF\x2F\x82\x12\xB2\xAC\x9E\x77\xB3\x1D\xB0\x4E\xB4\xB1\xB1\x50\xB4\x72\xB4\x52\xB4\x74\xB4\x63\xB3\x76\xB4\x65\xB3\xB0\xAE\xCA\xB2\xB2\xAE\xA3\xB3\xB4\xAE\x6B\xB3\xBE\xAF\x6D\xB3\x1A\x77\x02\xB2\x9F\x96\x34\x9C\x31\xB1\x5E\xA7\x37\x9C\xCE\x06\xAE\x0B\x20\xA1\xCD\x96\x00\xA6\xDD\xAC\xAA\x96\x79\xA9\xFA\xB4\x1C\xB1\x02\x8B\x9D\xB2\x35\xAF\xEC\xB3\xD5\xAF\x94\xB3\xD7\xAF\xC1\xB2\xD9\xAF\xAA\xAE\x7E\xB2\x9E\xA3\xC6\xB2\xA0\xA3\xC8\xB2\x49\xB3\x0B\xB5\x72\xB1\x0D\xB5\x74\xB1\x4E\xB3\x76\xB1\x9F\xB4\x78\xB1\xC2\xB1\xFD\xAC\x56\x8F\x5D\x8E\x64\xB4\xC1\x9F\x8A\xA7\x84\x86\x8C\xA7\x21\xB5\x60\xB1\x23\xB5\xBB\xB2\xD8\xB2\x3E\xB1\xB2\xB3\x01\xB5\xA3\xB2\x03\xB5\xEC\xAC\x0A\xB4\xA7\xB2\x30\xB4\xBA\xB3\x32\xB4\xBC\xB3\x79\xB4\x35\xB4\xBB\xAF\xE4\xAF\x0F\xB5\xE6\xAF\x39\xB5\xC1\xB1\x81\xB4\x3C\x9C\x18\xAD\xFC\x96\x00\x92\xF8\x88\x36\xB0\x34\x6E\xAA\xA7\x8B\x9D\x44\xB5\x85\xB1\xCA\x8C\xFD\xB4\xEA\x9E\xFF\xB4\x66\xB1\x2A\xB4\x6E\xAF\x08\xB4\x4E\xB5\x2E\xB4\x50\xB5\x75\xB4\x52\xB5\x77\xB4\x54\xB5\x7F\xB3\x98\xB1\x81\xB3\x51\xB0\xA8\xAC\x39\xB4\xC3\xB3\x86\xB3\x18\xB4\x3F\x76\x36\xAD\x3B\xB3\x07\x6D\x67\xB5\x37\xB3\x38\xB2\x6A\xB5\xDA\xA2\x6C\xB5\xAF\xB1\x4B\xB5\xB4\xB3\x4D\xB5\x4C\xAE\x4F\xB5\xB8\xB3\x51\xB5\x55\xB4\x53\xB5\x57\xB4\x55\xB5\x59\xB4\x57\xB5\x4D\xB1\x37\xB5\x89\xB2\x5B\xB5\xE2\xB1\x80\xB5\x45\xA8\x4D\x8F\x02\xAB\xF7\xB4\xDD\xA0\x03\x01\x85\xB5\xC9\xB1\x11\xB2\x7D\xA9\x91\xB3\x91\xB4\x20\xB1\xE1\xB4\x22\xB1\x2B\xB3\xB5\xB4\xFA\xB1\xB7\xB4\x58\xAF\xB9\xB4\x5A\xAF\x07\xAF\x5C\xAF\x64\xAD\x13\xB5\x03\xA8\xDF\x6C\x5D\xA7\x7B\x06\x82\x97\x08\xB2\xB3\xAC\x90\x10\x86\x97\xD7\x96\x2B\x6B\xA5\xB5\xF2\xB1\x86\xB1\xA8\xB5\xA5\x9F\xDF\xB4\x86\xAE\xAC\xB5\x4C\xB4\x79\xB3\xEF\xB3\x7B\xB3\x98\xB4\xE7\xB4\xF3\xB3\xE9\xB4\x9C\xB4\x5C\xB4\x8C\x8C\x47\x78\x64\xB2\x92\x8F\x04\xAE\x0A\x85\x24\xA8\xA8\xB4\x73\xA8\xF5\xA1\x33\xB2\x89\x0C\xDB\xB4\x6A\xB4\x47\x98\xC9\xB5\xA3\xAE\xCB\xB5\xB3\xB4\x43\xB3\xAF\xB5\x2D\xB3\xB1\xB5\xFC\xB1\x5E\xB2\xFE\xB1\x32\xB3\x00\xB2\x47\xB2\x55\x89\x42\xAC\x4B\xB2\x6C\xB2\xB7\xAD\x4B\xA8\xE0\xB5\x8D\xB4\x84\xB5\xE3\xB5\x5B\xAA\xE5\xB5\x40\xB0\xF4\xB2\xED\xB3\x41\xAD\xE4\xB4\x5B\xB2\xE6\xB4\x94\xAF\xE8\xB4\x96\xAF\xEA\xB4\x07\xB0\x99\xAF\xF8\xB3\x5C\xA7\x2A\xB2\xB5\x05\x67\xB2\x5D\x86\x84\x9D\x6A\xB2\xDE\xAD\xE4\xA3\xD2\x77\xF9\xB5\x79\x92\x77\x6A\xC4\xB5\x10\xB2\x87\xB5\xC7\xB5\x52\xA4\xAA\xB5\x40\xB3\x21\xB1\xCC\xB5\xAE\xB5\x03\xB6\xB6\xB4\x05\xB6\x27\xB1\x07\xB6\x29\xB1\x09\xB6\x2B\xB1\x0B\xB6\xD7\xB5\xEA\x8C\x8F\xB2\x3E\xB4\xF0\xA1\x92\xB2\x30\xB2\x28\xA4\xC8\x8F\x06\x01\x2B\x93\xB3\xAD\x5C\x0A\x1A\xB6\x37\xB2\x54\xB2\x88\xB5\x12\xA4\x9F\xB2\x00\xB5\x6E\xB5\xA3\xA9\x70\xB5\x8F\xB5\x72\xB5\x91\xB5\x74\xB5\x93\xB5\x76\xB5\x95\xB5\x78\xB5\xBB\xB1\x7A\xB5\x9A\xB1\x7C\xB5\x7E\xB4\x7E\xB5\x3B\xB4\x5D\xB5\x35\xAD\xAA\x9D\xD0\x8F\xAC\xB3\x06\x01\x3A\xB6\x53\xB2\xC6\xB5\xD0\xA8\x3C\xB1\xCD\xB3\x6D\xB4\x89\xAE\x97\xB3\x8E\xB1\x99\xB3\xA3\xAD\x9B\xB3\x83\x7B\xCA\xAD\xF6\xA7\x31\xB5\x66\xB3\x33\xB5\xDC\xB1\x35\xB5\xDE\xB1\x59\xB5\xE0", +"\xB1\x9C\xB5\x8B\xB2\x9E\xB5\xF5\xB4\x3D\xAE\xC9\x9D\x57\xB6\xA4\xB5\xFC\xB5\x96\xAC\x5E\xB6\x49\xB5\xCF\xB3\x8C\xB5\xD1\xB3\x8E\xB5\x70\xAF\x90\xB5\xD5\xB3\x92\xB5\x0D\xB4\xD8\xB3\x0F\xB4\xDA\xB3\x11\xB4\xE7\xB2\x13\xB4\xE9\xB2\x15\xB4\xEB\xB2\x17\xB4\xED\xB2\xDD\x8F\xEF\xB2\x43\xB5\x79\xB6\x9C\xB0\x1F\xB6\x93\xB3\x00\xB6\x27\xB5\x95\xB4\x4F\x98\x97\xB4\x84\x93\xF2\xB3\x9A\xB4\xD3\xB5\x88\x8C\x9D\xB4\x6C\xB3\x71\xB6\x6E\xB3\x73\xB6\xF8\x93\x02\xB3\x96\xA8\xED\xA9\x41\x65\xE7\x8F\x80\xAE\x60\x7D\x94\xB6\x29\xAE\x89\xB1\x26\xB5\x78\xB2\x28\xB5\xD1\xB1\x1F\x76\x63\xB6\x8D\xAE\x65\xB6\x8E\x78\x67\xB6\x1B\xA9\x9F\xB3\xE0\xA1\xE1\xAF\x4D\x89\x4D\xB6\xBD\xB1\x4F\xB6\x9E\xB4\x7F\xB4\x31\x9D\x9C\xAE\x4A\xAF\xFB\xB5\xDD\xB4\x75\xB3\xFE\xB5\x59\xB3\x47\x7B\x22\xB6\xFE\x9F\xEA\xB5\x45\xB3\x19\xAE\x47\xB3\x1B\xAE\x41\xAF\xFF\xB1\x43\xAF\x16\xAD\x9E\x9E\x36\xB3\xA6\xB5\x83\xAF\xF7\x8F\x4A\xA9\x99\xA9\x11\x66\x59\xB6\xFB\xB3\xA7\xB5\x5C\xB6\xA9\xB5\x6C\xB4\x7C\xB6\x6E\xB4\xD0\xB3\xDC\xB2\xD2\xB3\xDE\xB2\xD4\xB3\xA9\xAA\xBB\xB6\xAB\xAA\xBD\xB6\x1D\xA9\xA1\xB3\xCF\xAD\xBC\xB1\x58\xB5\xC3\xB6\xA3\xB6\xC5\xB6\xA8\xB3\x53\xB6\x84\x91\x63\xA9\x1E\x94\x77\xB6\x02\x01\xE2\xB6\x9B\xB2\xCA\xB1\x3D\xB6\x31\xA4\xB2\xB6\x29\xB3\x9A\xB6\xEB\x9A\x9C\xB6\xDB\x94\x54\xB4\x85\xB6\x56\xB4\x87\xB6\x58\xB4\x89\xB6\xDC\xB3\x8B\xB6\xDE\xB3\x8D\xB6\xE0\xB3\xEC\xB2\xE2\xB3\xBF\xB5\x71\x0F\x06\x90\x4D\x8B\x02\xB7\xB9\xB2\x04\xB7\x1D\xB6\x53\xA8\x7B\xB6\xAE\xB1\x4A\xB5\x41\xB6\x62\xAA\x6F\xAF\xA7\xAA\x71\xAF\xEF\xB6\xB6\xB1\x68\xB6\x0E\xB4\xC9\xB2\xBA\xB1\xCB\xB2\xF6\xB6\x99\xB5\x6F\xB6\x4F\xB3\x11\xB5\x51\xB3\x9F\xB1\xE4\xB3\x95\x7E\x0E\xAF\xEB\x09\x66\xB5\xAF\xB6\x69\xAF\x23\xB7\x3F\xB6\x6D\xB5\x40\xA2\xD2\xB6\x2E\xB3\xD4\xB6\x40\xAF\x61\xA1\x98\xB5\x87\xB2\x9A\xB5\xCF\xB2\x51\xB6\x80\xB4\xA6\xB6\xFD\xB6\xB5\xA9\x1A\x90\x00\xB7\x01\x01\x1E\xB7\xF2\xB2\xB0\xB3\x5F\xB6\x60\xAA\x6D\xAF\x42\xB6\x2C\xB4\x71\xB5\x73\xB4\x73\xB5\x07\xB5\x75\xB5\x09\xB5\xDA\xB1\x6B\xB6\x85\xB2\x32\xB7\x4A\xB7\x34\xB7\x38\xB5\xFA\xB6\xA0\xB4\x3B\xB5\xC7\xB3\x21\x90\xA7\x94\x82\xB1\x01\xB7\x3E\xB7\x5D\xB6\xCC\xB6\x8A\xB5\x25\xB7\x43\xB7\x21\xB0\xEE\xB6\x49\xB0\xF0\xB6\xDE\xAF\xF2\xB6\xAD\xAA\x64\xB7\x4B\xB3\x6D\xB6\x4D\xB3\x68\xB7\x9B\xB5\x6A\xB7\x3A\xB5\xFC\xB6\xBB\x79\xFA\xB3\x03\xB7\xCF\xA2\x41\x65\xC8\x94\x9D\xAE\x78\xB6\xCA\xB6\xCC\xB3\x74\xB7\x04\xB4\x60\xB6\x5A\xB7\x27\xB7\x43\xB6\x81\xB6\x45\xB6\x83\xB6\x47\xB6\x0E\xB7\x94\xB5\x10\xB7\x96\xB5\x12\xB7\x7B\xB4\x14\xB7\xA2\xB6\x10\xB5\xA4\xB6\xC0\xAF\x0B\xAA\xA8\xB6\x93\xAD\xDA\x9A\x17\xB6\xC5\x54\xE2\xB5\x90\xB7\x02\xB4\x4A\xB4\xF6\xA9\xCF\xB6\x29\xB5\x98\xB3\x2B\xB5\x1C\xAF\x2D\xB5\xAC\xAE\x2F\xB5\xAE\xAE\x69\xB6\x0A\xB5\x30\xB7\x0C\xB5\x66\xB7\xCD\xB2\x4B\xB7\xA6\xB3\x85\xB7\x5C\xB5\x4F\xB7\x0F\x95\x49\xAA\xA9\xB6\xC4\xAF\x9F\xAF\x1D\xB4\x15\x95\x3F\xB5\xFC\x81\xA5\xAF\x9F\x9F\x09\x01\x55\xB7\xAF\xB3\x24\xB5\x1B\xB0\x41\xB7\x8B\xB5\x26\xB7\xEA\xAC\x97\xB7\x29\xB7\x82\xB6\x2B\xB7\x0C\xB4\x2D\xB7\x86\xB6\x2F\xB7\x10\xB4\x79\xB5\x12\xB4\x7B\xB5\x83\xB3\x7D\xB5\x16\xB4\x7F\xB5\x90\xB6\x4A\x90\xC7\xB7\x96\xA4\x4D\xAA\x42\x87\x42\xB4\xC3\xAF\x89\xB4\x71\x0F\x45\xB4\xC2\xB5\x39\xB6\x72\xB7\xE6\xB6\xB0\xB7\x14\xAA\xB2\xB7\xB5\xB6\x42\x89\xB5\xB7\xC3\xB2\xB7\xB7\x1E\xAF\x9D\xB3\xF2\x77\x7D\xB7\xE0\xAF\xF4\xB6\xE2\xAF\xBF\xB7\x6A\xB3\xF8\xB6\xA4\xB7\xC3\xB7\x9D\xB5\xEA\xB7\x81\x67\x0B\xB0\x30\xB6\x0E\xA0\x88\x8E\x62\x90\x46\xA4\xF1\xB7\xA3\xAF\x66\x90\xAB\xB7\x97\xA4\xC9\xB6\xFB\xB4\xF8\xA0\x2B\xA9\xB0\xB6\x40\xB7\x07\xB7\x78\xB3\x23\xB6\x7A\xB3\xEB\xAE\x26\xB6\x42\xB2\xB3\xB5\x44\xB2\xB5\xB5\x46\xB2\x34\xB3\xAA\x82\x83\xB4\x11\xB8\x91\xB2\x92\xA8\x70\xA4\x72\xA8\x51\xAA\x99\xAA\x19\xB8\x35\xAA\x00\x00\xD2\xB7\xB0\xB4\x57\xB7\xE8\xB6\x94\xB7\x06\xB4\x6F\xB5\x5C\xB7\x44\xB6\x5E\xB7\x46\xB6\x60\xB7\x48\xB6\x62\xB7\xA0\xB3\x7F\xB7\x68\xB3\x08\xB8\xA4\xB3\xC1\xB7\x82\x81\x0C\xB8\x72\xB6\x0E\xB8\xB7\xAA\x31\xB0\xD7\xB4\x5F\xB0\xBC\xAA\x6D\x95\x34\xB6\xCA\x87\x39\xB0\xF3\x9F\xAD\xB7\x1C\xB8\x34\xB1\x1E\xB8\x3F\xB7\x92\xB7\x58\xB7\xA6\xAE\x95\xB7\xD9\xB7\x40\xB8\x98\xB7\x42\xB8\x9A\xB7\x44\xB8\x9C\xB7\x49\xB6\x9E\xB7\x4B\xB6\x31\xB7\xC1\xB6\xF7", +"\xB6\xE6\xB7\x50\xB6\xE8\xB7\x52\xB6\xC5\xB7\xBA\xAE\xDB\xB6\xC5\xB5\xB4\x20\xC1\xB4\xFA\xAE\x33\xB6\x7D\xAA\xC5\xB4\x61\xB0\xEB\x95\xC8\xB4\xA4\x83\x18\xB1\x88\x90\x8E\xB7\x79\x7D\xF7\xB7\xC8\xB5\x96\xB6\xE0\xB4\x98\xB6\xB3\xB6\x09\xB7\xFB\x9B\x0B\xB7\x57\x95\x0D\xB7\xDF\xB7\x0F\xB7\xE1\xB7\x88\xB6\xE3\xB7\x8A\xB6\xE5\xB7\x14\xB4\xE7\xB7\x8E\xB6\x52\x9B\xED\xB4\x95\xA8\xEF\xB4\x00\x66\xF1\xB4\xB1\xAC\x1D\xB8\x68\x88\x36\xB1\x84\xB8\xC8\xB6\x2B\x6B\x7A\x7D\xAE\xB7\x6B\xB4\xF9\xB7\xC7\xAA\x94\xB4\xEE\xB3\x96\xB4\xF0\xB3\x9D\xB6\x99\xB4\x3B\x8D\x9B\xB4\xA1\xB6\xD5\xB5\x90\x7B\x9D\xB8\x33\x8F\x9F\xB8\x24\x72\xA1\xB8\x60\xA7\xA6\x96\xDB\xAC\x16\x8E\xC0\xA4\x25\xA1\x8C\xA7\xA9\xB8\x5C\xB8\xAC\x83\xEA\xB3\xAD\xB1\xD6\xB7\x76\xB7\xA1\xA8\x78\xB7\x3E\xAF\x46\xB7\x30\xB3\xD6\xB6\xF0\xB5\xD8\xB6\xF2\xB5\x1F\x84\x3C\xB5\x5F\x9C\x14\x05\xFF\xAC\x33\xB8\x01\xAD\x41\xB5\xA8\x86\x79\xA9\xC5\xB8\x22\xB5\x3F\x81\xD4\xB7\xCD\xB1\x21\xB8\x40\xB6\x77\xB7\x6A\xB1\x79\xB7\xDC\xAF\x7B\xB7\x4B\xB0\x04\xB8\x4D\xB0\xE2\xB7\x4C\xB6\xE4\xB7\x4E\xB6\x71\xB8\xC4\xB6\x4D\xB7\x9E\xB1\x87\xB7\x63\x8F\x5F\xB5\x87\x9C\x61\xB5\xFE\x96\xDA\xB8\x03\x92\xA6\xB1\x6B\x8F\x5C\xA2\xDF\xB8\x45\xB5\xE1\xB8\x47\xB5\xEB\xB3\x27\xB4\xE8\xB5\x3E\xB2\x24\xB8\x92\xAF\x26\xB8\x5D\xB2\x28\xB8\x5F\xB2\x2A\xB8\x61\xB2\xBD\xB4\xE8\x7E\x82\xB5\xE0\xB6\x7D\x69\x01\xB9\x68\xB5\x61\xB1\x21\xB7\x7C\xA8\x20\xB8\x06\xB9\x42\xB3\x08\xB9\xCE\xB5\x25\xB8\x7C\xB3\xD1\xB5\x9F\xB6\x08\xB6\xD4\xB5\xEB\xB4\x5D\xB4\x0C\xB6\xAC\xA3\x4C\xAD\xFF\x00\x4E\xAD\xA7\xB8\x5C\x0A\x16\xB9\x86\xB5\x3C\xB6\x19\xB9\x63\xB1\x1B\xB9\x46\xAE\x01\xB6\x2D\xAE\x09\xB9\x40\xB2\x0B\xB9\xFB\xB2\x28\xB6\xFD\xB2\x2A\xB6\xFF\xB2\x43\x84\xDA\xB4\x81\x8F\xB9\xB5\xB4\x6C\xBB\xB5\x92\x0E\xBD\xB5\x6A\xAD\x09\xB2\x91\x79\xCA\xA1\x7C\xAA\xA5\xB4\x2E\xB9\x87\xB8\x1E\xB6\xE7\xB6\x24\xB7\x7D\xB6\xD8\xB7\xD8\xAF\x28\xB7\xDA\xAF\x48\xB0\xE9\xB8\x2C\xB7\xBC\xB6\xBB\xB7\x63\xB7\xBD\xB7\x34\xB5\x4A\xB8\x0E\xB5\x0A\xB8\x5A\xB5\x4E\xB8\xA5\xB6\x50\xB8\x29\xB2\x8B\xAD\x9C\x92\xEE\xA1\x2F\xB8\x6A\x6F\xDD\xAD\x86\x9D\x95\xA8\xA9\xB7\x95\xAD\x70\xB7\x01\x01\x2F\xB9\xDC\xB6\x31\xB9\xE5\xB6\x88\xB8\x51\xB9\xCA\xB8\x53\xB9\xE6\xB8\xB3\xB1\xCE\xB8\x5E\xA4\x46\xB8\xBE\xB6\x06\xB8\xC0\xB6\xF0\xB8\xC2\xB6\xF2\xB8\xF9\xB6\xF4\xB8\xFB\xB6\x75\xB8\x53\x6D\x07\xAC\xEE\x04\x0E\xA2\xDD\xB5\x34\xB8\x11\xA2\x36\xB8\xCF\x67\x74\xB9\x78\xB8\x18\xB9\x77\xB9\x50\xB9\xAC\xB8\xBD\xAC\x99\xB6\xAF\xB8\x9B\xB6\xB1\xB8\x0C\xB7\x9E\xB6\xB4\xB8\xA0\xB6\x20\x92\xA3\xB7\x63\xB9\x88\xB9\x6B\xB7\xF6\xB8\x03\x98\x98\x84\xD3\x84\xB8\x0E\x10\xB6\x5A\x8D\xDC\xAD\x2F\xB2\xE0\x9B\x57\xB8\x44\x0F\x6F\xB2\x46\xB4\x27\x01\x94\xB9\x1B\xB6\x76\xB9\x5E\xB8\x73\xB7\x89\xB8\xCA\xB5\x8B\xB8\x08\xB7\x9C\xB9\x0A\xB7\x9E\xB9\x90\xB8\xA0\xB9\x12\x94\xB5\xB8\xA3\xB9\xB7\xB8\x16\x8D\x28\xB9\xBB\xB8\xFC\x71\x51\xA2\x80\x9D\x8F\xA8\xA4\xB4\x69\xB2\xF5\x92\x6E\xB9\x11\xB0\x6D\xB2\x5A\xA2\x09\xAE\x14\xB9\x79\x69\xB7\xB9\x3B\xB6\x5B\xB6\xBA\xB9\xF8\xB7\x26\xB4\x35\xB9\x9B\xB9\x02\xB6\x38\xB9\xF9\xB2\x3A\xB9\xB8\xB4\x3C\xB9\xBA\xB4\x3E\xB9\xBC\xB4\x2C\xB6\x0D\x7F\xB5\xB2\x2F\x06\x8B\x9D\xDA\xB9\x5A\xB6\x69\xB5\x32\xB9\x88\xB1\x34\xB9\xE7\xAE\x1D\xB9\x59\xB2\x24\xB6\xB0\xB5\xE5\xB9\xB2\xB5\xE7\xB9\xB4\xB5\xBB\xB4\xB6\xB5\x11\xB9\x4A\x8B\x75\xB6\xD4\xB2\x53\xB7\x00\x00\xF0\xB9\xE3\xB6\x1C\xB6\x97\xB9\x22\xB7\x60\xB8\x3C\xB8\x59\xB7\x3E\xB8\x5B\xB7\x71\xB4\x5D\xB7\x05\xB5\x5F\xB7\x91\xB8\x5B\xB9\x2E\xB7\x32\xB5\x5E\xB9\x6C\xB6\x60\xB9\x36\xB5\x83\xB7\x4C\xB7\x73\xB8\x4E\xB7\x66\xB9\xFD\x6D\x5D\xAE\x2D\xB9\xB6\xB9\x4F\xB9\x0B\xBA\xBC\xB9\xE6\xB5\xBE\xB9\x22\xB8\xD0\xB6\xF9\xB9\xEB\xB5\xFB\xB9\xED\xB5\x0D\xB9\xEF\xB5\x0F\xB9\x33\xB3\x01\xBA\x35\xB3\x89\xB3\xA9\x86\x09\xA9\xCE\x98\xAD\xB6\x09\x01\x07\xBA\x8A\xB7\x09\xBA\xDD\xB9\x78\xB9\x99\xB9\xFD\xAF\xE1\xB9\x37\xB9\x1F\xB9\x0A\xB9\x21\xB9\x06\xB6\xD2\xB5\x24\xB9\xB6\xB8\x26\xB9\x28\x79\xC7\xB6\xF8\xB4\x11\x66\x3D\xBA\x1F\xB7\xE4\xB6\x40\xBA\x98\xB9\xDF\xB9\xF6\xB9\xAE\xB8\xE2\xB9\x46\xBA\x39\xB9\x48\xBA\x27\xB6\x4A\xBA\x29\xB6\x25\xB9\x0A\xB6\xF7\xB3\x01\xB3\x89\xB7\x53\xBA\xDD\xB6\xBE\xAE\xDF\xB6\x18\x81\x51\xBA\x26\xBA\x1A\xB9\x0C\xBA\x52\xB9\xE9", +"\xB6\x7E\xB6\xEB\xB6\x80\xB6\xDB\xB7\x99\xB7\xDD\xB7\x84\xB6\x92\xB8\x9D\xB7\x94\xB8\x11\xB7\x96\xB8\x13\xB7\x98\xB8\x8C\xB6\x9A\xB8\x17\xB7\x8F\xB6\x19\xB7\x84\x97\xB9\x63\x2B\x93\x2E\x99\xB8\xA9\x25\xBA\xAA\xB8\xE4\xB5\x28\xBA\xFF\xB5\xB2\xB4\xF7\xB9\x0E\xB3\x54\xB9\x2A\xB5\x56\xB9\x2C\xB5\x58\xB9\x92\xB1\xEA\xB8\x94\xB1\xEC\xB8\x96\xB1\xEE\xB8\x6E\xB8\x84\xB9\x70\xB8\x99\xB8\x72\xB8\x9B\xB8\x74\xB8\x21\xBA\xA4\xB8\x71\xB3\x01\x01\x51\x99\xA3\xB5\x86\xB8\x8A\xBA\xFD\xB5\x8C\xBA\xCD\xB6\x4E\x7A\xAD\xB5\x2C\xBA\xE3\xB9\xE5\xB4\x5D\xBA\x27\xB8\xFD\xB9\x29\xB8\xFF\xB9\x2B\xB8\x35\xBA\x6A\x90\xD2\x81\x38\xBA\x97\xA9\x72\xA3\x00\xB9\x6C\xBA\x33\xB9\x6E\xBA\x7A\xB9\x70\xBA\x91\xBA\xB4\xB7\x93\xBA\xB6\xB7\x95\xBA\xD6\xB1\xB9\xB7\xD8\xB1\x5C\xB9\x47\xB8\x19\xBA\x65\xB7\x6F\xB8\x33\xB7\x62\xB9\x70\xB6\x64\xB9\xA6\xB7\xA9\xB3\x3C\x0F\xB6\xA9\xEF\xB9\xC0\xBA\xF4\xB9\xC2\xBA\xE4\xB8\x42\xB7\xCC\xB8\xE7\xB8\x7E\xB9\xA6\xA8\x80\xB9\xF3\xB6\x48\xB8\xA2\xB3\x1B\xBA\x6E\xB6\xD3\xBA\x35\xB7\xA5\xB7\x37\xB7\xA8\xB9\xA3\x86\x04\x7E\xE2\x9E\xE2\x7C\x4D\x8B\x52\xBA\x56\xB7\xE2\xB8\x92\xB4\x59\xAD\x59\xBA\x45\xBA\xB0\xB8\xCF\xB5\xB2\xB8\x22\xB9\xA1\xB9\x4B\xBA\xC7\xB9\x4D\xBA\xB9\x8C\x5E\xB4\x6D\xA3\x65\xBA\x85\x9B\xE6\xB3\x58\x03\xF3\xBA\xDB\xBA\x13\xB2\x0D\xBA\x62\xB8\x0F\xBA\x96\xB7\x65\xB8\x74\xBA\x67\xB8\x76\xBA\x9B\xB7\x78\xBA\x6B\xB8\x7A\xBA\x9F\xB7\x7C\xBA\xA1\xB7\x7E\xBA\x15\xB7\x80\xBA\xB2\xB2\xA7\xB9\x8A\xB9\xF2\x87\xC6\xB8\xFB\x93\xB2\xB0\x75\xA4\x7D\xB8\x4E\xB9\xAA\xBA\x7A\xB6\xDD\xBA\x1C\xB9\xF9\xBA\xE9\xAE\xB1\xBA\x04\xB6\xB3\xBA\x0C\xB9\xB5\xBA\x0E\xB9\xB7\xBA\x10\xB9\xEB\xB9\x7C\x82\xEC\xB7\x84\xB4\x46\x9F\x27\x82\x63\xB5\xD1\x77\x09\xA4\x4C\xB9\x0B\xA4\x93\xB9\x0B\xBB\xFE\xB4\x93\xB7\x0E\xBA\x6F\xB4\x3F\xB8\x11\xBA\x41\xB8\x13\xBA\x43\xB8\x15\xBA\xF1\xB6\xCD\xBA\x81\xB9\xE6\xBA\xF5\xB6\xD1\xBA\x67\xB7\xEA\xBA\x69\xB7\xA6\xB9\x86\xB7\x21\xBB\x3D\xB4\x8E\xAD\x3F\xB4\xD6\x0E\x40\x95\xC7\xAF\x42\x95\xFC\xB8\x67\xBA\xCB\xAF\x22\xB4\x03\x01\xF4\xBA\xD3\xB7\x04\xB9\xC9\xB8\xDE\xBA\xD7\xB7\x7C\xB9\xA5\xB2\xE2\xBA\xDE\xA9\xD5\xB6\x48\xB7\x42\xAF\x9A\x9E\x81\xBA\xE9\xB7\x83\xBA\x44\x6E\x2E\xB8\x5B\xBB\x07\xB1\x13\xB8\xF0\xAF\xEA\xB1\x29\x9F\x18\xB8\x40\xBB\xBB\xAA\x77\x6A\x66\xBB\x3A\xB8\xF6\xBA\xAB\xB5\x2A\xBA\xE5\xB8\xE0\xBA\x7D\xB9\x46\xB3\x7F\xB9\x70\xBB\xC4\xA2\x72\xBB\x22\x9F\x1F\xBB\x58\xBB\xA3\xBA\x82\xB4\x52\xB8\x08\xA9\x12\xB6\x2B\x03\x88\x9B\x88\xB4\x17\xB8\xB9\x63\x8B\xB4\xB5\xB9\x3C\xBA\x43\xBB\x6B\xB5\x45\xBB\x0E\xBB\x47\xBB\x10\xBA\xEC\xB6\x12\xB3\xE8\xB8\x96\xBA\x5A\xB9\x4E\xBB\x17\xBA\x6A\xB6\xCF\xBA\x80\xB7\xE8\xBA\x82\xB7\x55\xBB\x84\xB7\x57\xBB\xC4\xB7\x93\xBB\x2F\x6E\x78\xBB\xD0\xB9\x81\xBB\x34\xB0\xEE\x9F\x61\xBB\x7E\xBB\xAF\x9B\x59\xB8\xAD\xB4\x6B\xBA\x29\xBB\x95\xB6\x79\xB9\x6A\xBB\xCB\xB8\x17\xAE\x44\xB7\xEC\xB5\x2F\xB3\xEE\xB5\x31\xB3\x33\xBA\xF1\xB5\x2C\xB8\x5E\xAF\x37\xBA\x23\xBB\xDD\xAB\xE4\x67\xF5\x87\xD8\xAA\xBE\xAD\x7C\xB8\xA5\xB4\xC5\x09\x7F\xB8\xC7\xB4\xC2\xB4\x64\xB0\xA3\xA1\x77\x7D\x89\xBA\x88\xA5\x4A\x65\x23\x0D\x7E\x7D\x3D\xBB\xA3\x18\xA1\x7D\x58\x01\x12\x6F\x12\x1B\x6E\x00\x96\xA4\xF9\x6B\x1F\xAB\x4F\x9E\x21\xAB\x7C\x73\x00\x84\x26\xAB\x7C\xB1\xAE\xAB\x19\xA5\xF7\xAB\x0E\xB1\x2B\x6B\x8D\x7D\x17\xB9\x47\x76\xFB\xAB\x40\x72\xDA\xA6\x1E\x67\x91\x8D\x6B\xA0\x6F\x8E\x50\x70\x29\xAC\x93\xA0\x90\x10\xCC\x90\x13\xA6\xFC\xBB\x30\xB9\xE3\x1B\x8C\xAB\x83\x06\x44\xA0\x9C\xA0\x82\xAB\x27\xA5\x9D\xAB\x40\xAB\x44\x0F\xF2\xA4\x72\xA0\x5C\x0A\x0C\xBC\x75\xB9\x0E\xBC\x57\xAB\xFA\xA4\x5A\x71\x5A\xAC\x81\x8D\x45\xAC\x57\xA0\x0B\xBC\x03\xBC\x4B\xAC\x0A\xA5\xAB\xAB\x4C\xA5\x08\xAC\x4E\xA5\x9E\xAB\x50\x72\xD5\xA4\x1B\xBC\x95\xB9\x2D\x1B\xB8\xAB\x8D\x0E\x72\xAB\xBA\x8D\x46\xA8\x90\xAB\xF7\xBB\x5C\xA5\x7E\x71\x2F\xBC\x26\xBC\xA4\xB0\x50\x07\x79\xA0\x6E\xAC\x06\x75\x1B\xA5\x35\xAC\xD6\x90\x46\xAC\x3C\xBC\xCE\x8D\xF7\x90\x86\xA0\x07\xBC\x4E\xAB\x18\x91\x47\xBC\xD3\xBB\x0F\xBC\x99\xAB\xAA\x90\x21\xBC\x76\xAB\x52\xAC\x53\x69\x4E\xBC\xE0\xB8\xE8\xBB\xA8\xAB\xB5\x05\xAA\xAB\x06\xAC\x37\xBC\xAD\xAB\x5B\xA5\x17\xAC\x90\x10\xB1\xAB\x19\xBC\x02\xBC\x48\xBC\x4B\xAC\xA1\x72\x6D\xAC\x12\xBC\x6F\xAC\x14\xBC\x39\xBC\x61\xBC\x71\x0F\x73", +"\xAC\x99\xB0\xFB\xBB\xF4\xBB\x2A\xB9\xC7\xAB\xFA\xBB\x1A\xBC\x73\xBC\x49\x91\xF2\x8D\x40\x91\x09\x01\x30\xBC\xB8\xB9\x2C\xAA\xD7\x6B\xCE\xB0\x75\xA5\x77\x6A\x7D\xBC\xDB\xB9\x79\xB8\xC7\xB7\x7B\xA5\x8F\x6A\x15\x95\xE4\xAB\x25\x8F\x9D\x88\xB5\x98\xF2\xBB\x71\x73\xBC\xBA\x5B\x8D\x60\x9C\x27\xAB\x60\xBC\xEC\x90\x28\x8E\xB9\x90\x46\x91\x7D\x69\x15\x67\x31\xBC\x0D\xAF\x46\x70\x38\xAC\x07\x6D\x9B\xBC\x7E\xBC\xB4\x20\x33\xBC\x05\xAC\x36\xBC\x49\xB2\x70\xAC\x5B\xAB\x45\xBC\x0A\xBC\x5F\xAC\xA1\xBC\x85\xBC\xC4\x8D\x98\xAB\x01\x01\x11\xBC\x4B\xA5\x9D\xA0\x5F\xBC\x84\xAB\xDE\x69\x84\xAC\xFD\xAB\x77\x6A\xAD\xBC\xF1\xB9\xAF\xBC\x37\x72\x58\xAB\xE6\x74\x4B\xBC\x67\xAB\x56\xA0\xD5\xA4\xBB\xBC\x08\xBA\xDB\x8D\x5C\xA0\x17\x66\x35\xBC\x96\xBC\x9E\x8E\x34\xAC\x2A\xAC\x71\x0F\xF3\x90\x36\xA5\x11\x67\x66\xBC\x3E\xBC\xAD\x71\x0B\x0D\xFA\x90\x6A\xBC\x42\xBC\xA8\xBC\x44\xBC\x0D\x91\x1E\xA5\x9F\xBC\x2B\x6B\xC5\xBC\x3E\xBA\xC7\xBC\xF7\x90\x40\xBC\xD8\xBC\xD3\x8D\x71\xAC\x85\xAB\xDE\xBC\x5C\x0A\xE0\xBC\x66\xBA\xE2\xBC\x4B\xAC\x4A\xBC\x53\xBC\x44\xAC\x55\xBC\xFF\x00\x35\xA5\xB2\xAB\x14\x67\x3D\xBC\xCF\xB4\x1F\x75\x1F\x91\x66\xAC\xA0\xA0\x3E\x6B\xC4\xBC\xF7\xBC\xB6\xB0\xB8\x70\x64\xAC\xFB\xBC\xBE\xAB\x68\xAC\xE9\xBC\xFF\x1D\xFF\xBC\xBF\xB0\x35\x6B\x68\xBC\x4E\x75\xF0\xBC\x51\xAC\x2D\xBC\xAE\xA0\xC0\xAB\xED\x8D\xDF\xBC\x78\xBC\x77\xAC\x48\x0F\x75\xBC\x71\xBC\xEA\xBC\x78\xBC\x14\xB1\x78\x90\xFE\x8E\x07\xBD\x91\xBC\x4E\x91\xDA\xB0\x06\xBD\xF6\xBC\x14\x88\x10\xB1\x49\xA0\xA6\xB5\x8B\xAC\xE0\xAB\xA2\x74\xF7\x6F\x73\x7D\xEB\xBC\x55\xB1\x4C\x65\xB2\x7D\x89\x31\x56\xB8\x43\xB4\xE9\xBB\xC4\x14\x7E\x1D\xFF\x2D\xA5\x7D\xE4\x82\x73\x7D\xCC\x00\x2B\x8E\x6D\xAD\x19\xB8\x02\x66\x00\xBD\x9B\x69\x03\x1B\xA3\x7D\x31\x2E\xED\xB7\xCF\x73\x31\xBD\x15\xB8\xEC\xAF\xEB\x9F\x27\x70\xF0\xBB\x72\x9E\x8F\xBC\xAF\x7D\x02\xB9\xC9\xB7\x41\xBB\xF9\x71\x94\xBC\x8B\xBC\x99\x90\x98\xBC\x1D\xBD\x09\x01\x4F\xBD\xFD\xBB\x9D\xBC\xB4\x68\xD5\xA4\x5A\xBD\x0D\xBC\xA3\xBC\x5A\xBC\x56\x05\xC6\x90\x41\xBC\xE6\xBC\xA9\xBC\xDC\xBC\xE2\xA4\x22\xBD\x07\x67\xD3\xBC\xF8\xBC\x12\xAC\x7E\x8D\x4C\xAB\xC1\xBC\x21\xAC\x4F\xAB\xB8\xBC\x66\xA0\x77\x6A\x5F\xBD\x1C\xBC\x61\xBD\xBE\xBC\x1F\xBC\x8F\x8E\x0D\xBD\x2C\xBC\x16\xBC\xC3\xBC\x6A\xBD\x69\x73\x08\xBD\xC8\xB0\x69\x09\x28\xBC\x5D\xBC\xA7\xBC\x6C\xBC\x95\xBC\x45\xBC\xD0\xBC\xF5\xBC\x6B\xBD\x4F\xBC\x62\xBD\x5E\x88\xCA\xBC\xEC\xA4\x5E\xBC\x2B\xBC\x3F\xAB\xA1\x8E\x70\xA0\x5E\xBD\x83\xBD\xD2\xB0\xFC\x70\xE4\xBC\xB3\xBC\x13\xBC\x38\xBC\x8A\xBD\x68\xBD\x6D\x72\x99\xBD\x6C\xBD\x40\xBD\xF9\xBC\x91\x71\x8E\xAB\x65\xBD\x80\x8E\xE7\xBC\x99\x71\x74\xBD\xD7\xAB\x79\x69\x77\xBD\x9C\xBC\x59\xBC\xED\x71\xA1\x71\x52\xBC\xAA\xBD\xC8\x90\xAC\xBD\x24\x91\x81\xBD\x02\x01\xB1\xBD\xA2\xBC\xBD\xBC\x04\xBC\xD0\x8D\x92\x72\x7D\xBD\x96\xBD\xAF\xAB\x62\xBC\xA4\xBD\x8F\xBD\x6B\xAC\x9B\x69\x57\xA5\x87\xBD\xCC\xBC\x43\xBC\xCE\xBC\xFF\xAA\x3F\x91\x5F\xA5\x27\x01\xBD\xBD\xAE\xBC\xED\xAF\xEC\xB1\x65\xA5\x79\xAC\x4B\x91\xB0\xBD\x1A\xBD\x7B\x6A\x7E\xAC\x70\x6B\x5C\x0A\xD4\xBD\xBC\xBC\xD6\xBD\x0D\x96\x81\xBC\xDF\x8E\xE1\xBD\xC6\xBC\xC0\xB4\x87\xBC\xFE\x70\x7C\xA5\x81\x6B\x67\xBD\x41\xAC\x22\xA6\x71\x0F\x01\x0B\xCC\xB4\x40\x72\xB7\x7D\x77\x38\xB9\x7D\xB6\x08\xBB\x7D\x84\xB4\x9F\x90\x68\x2E\xB1\x31\xCD\xB7\x0A\xB1\xCA\xB4\xC5\x7D\xC7\x7D\xC8\x6E\x27\x01\xCA\x7D\xEE\x7D\xCC\x7D\x55\x73\x91\xBB\xF6\x24\xB7\xA0\x4E\xBA\x70\x0F\xD4\x7D\xEE\x7D\xD9\x7D\xEE\xB0\xBA\x01\x8F\xAA\xE7\x91\xDD\x7D\x58\x86\xF7\x7D\xEE\x7D\xE3\x7D\x55\x73\x9C\x90\x8E\x8C\xF4\xA6\x50\x34\xA1\x1E\xF6\x7D\xEC\x7D\x70\x73\x51\x8F\xB7\x73\x47\x90\x83\x9B\xF3\x7D\x61\x74\xF5\x7D\x99\xA2\x27\x01\xED\x7D\xAB\x7B\xF9\x7D\x55\x73\xFB\x7D\x93\x9F\x1D\xBE\x64\x34\x1F\xBE\x79\x8F\x7D\xB0\xCA\x72\x09\x01\x7A\x54\x82\x6A\xE9\xB0\x27\x01\xCF\x00\x70\x73\xFF\x77\xB7\x73\xA4\xB9\x15\x7E\x0B\xBE\xE7\x79\xD6\x66\x15\x58\xA7\x67\x3F\x00\xFE\xB0\xF9\x78\xBB\x75\xA1\x9A\xDC\x66\x15\xBE\x5A\x8C\x66\x69\x65\x0F\xCD\x00\x70\x74\x36\xB7\x31\x00\x96\x87\x5D\x6C\x58\x86\x36\xBE\x81\x78\x39\xBE\x30\x9A\xC9\x9F\x73\x06\xBF\x4D\xDE\x7D\x45\xB9\x73\x92\x17\x66\x6E\x01\xFA\x39\x1D\x96\x3C\xBE\x3E\xBE\x2C\x10\x35\x96\xFA\xB5\xC5\x87\x6C\x7D\x44\x8F\x10\x3A\x61", +"\xBE\x47\xB9\x63\xBE\x19\x01\xFA\x39\x2F\x09\x41\xBE\xFD\x39\x43\xBE\x09\x7F\x45\xBE\x70\x73\x48\xBE\x7A\xBC\x92\xBC\x67\x06\x2F\xB1\x90\x93\x70\xBE\x4E\x11\x64\xBE\x6C\x59\x2F\x09\x7C\xBE\xA9\x76\x4C\xBE\x06\x67\x4E\xBE\x6A\x93\x50\xBE\x27\x01\x52\xBE\xA5\xA6\x68\xB4\x6C\xBE\x5F\xBE\x58\x86\x82\xBE\xC6\x12\x84\xBE\x10\x3A\x01\x0B\x09\xBE\x4D\x7F\x56\xBE\xD7\x2E\xDE\x7D\xFF\xBD\x64\xA5\xC3\x10\x04\x6F\x9F\xBE\xA4\x86\xE5\xB1\x09\x01\x08\x96\x29\x88\x19\x9C\x52\x06\xA4\x6F\x4D\x09\x29\x3B\x06\x02\xA7\x6F\x66\x69\x85\xA5\x00\x00\x87\xA5\x56\x8D\x5C\x0A\x02\x88\x2C\x96\x4F\x73\x7E\xA6\xE0\x22\x7F\x72\x00\x73\x25\x08\xE3\x6F\xD1\xA0\xD2\x00\xD1\x99\xB6\xBE\x49\x65\x40\x96\xC7\xB7\xBC\xBE\x82\x74\xF0\x71\xB8\x6E\x27\x01\xD3\x00\xA3\xBE\x03\xA7\xD9\xB4\x23\xB3\x77\x6A\x28\x88\xD3\xBB\xB1\xB4\x5A\xB3\x07\xB9\xF8\xB9\x2F\xBB\x25\xB6\x31\xBB\x3B\xB9\x5F\xBA\x3D\xB9\x61\xBA\x2B\xB6\xEC\xB4\xB8\xB5\x5B\xA7\x7F\x97\xD7\xAC\x17\xB5\x11\x9C\x5D\xB8\xA4\xBA\x7A\x96\xEE\xB1\xFE\x88\x11\x66\xD1\xBE\x58\xBC\x1D\xB8\x90\xB3\x41\xBA\x57\xBA\x57\xB2\xD5\xBE\x90\xBA\x6C\xBB\xB6\xB3\x6E\xBB\x1E\xAA\x8D\xBB\xEA\xA2\x49\xB7\xC0\xB7\x1D\xBA\xC2\xB7\xB4\xBB\x4D\x7F\xB9\xB8\x6E\xBE\x44\xB9\xE3\xBE\xBC\xB5\xD9\xAC\xE6\xBE\x9F\xB5\x04\x88\x1D\xA0\x02\x01\xD9\x99\x50\xBA\x7D\x69\xEC\xBE\x50\xBD\xEE\xBE\xC8\xB8\xF5\xB1\x2C\xBB\x36\xB9\x2E\xBB\x5B\xBA\xE4\xB9\xD9\xBE\xE6\xB9\xDB\xBE\xE8\xB9\xDD\xBE\x3F\xB9\x63\xBA\xDF\xA7\x84\xA7\xFE\xAC\x94\xBC\xFE\xBD\xDB\x91\x8B\xA7\x79\xA9\x0F\xBF\x5B\xBD\xFC\xB4\xF3\xB9\x0C\xBB\x6F\xBA\x3D\xB8\xA4\xBB\x10\xBB\x49\xBB\x66\xB8\x4B\xBB\x68\xB8\x4D\xBB\x7C\xB7\x4F\xBB\xE5\xBA\xAE\xBB\x49\xB8\x53\xBB\xFC\xBE\xB2\xBB\x1E\xBA\xA1\xBA\x20\xBA\x76\xBB\x90\x77\x6A\xA1\x19\xAD\xA2\xB1\x1B\xAD\x7D\xBB\x1D\xAD\xE9\x6F\x1F\xAD\x83\xB5\x2B\x6B\x28\xBF\x60\xBD\x96\xB9\x55\xBA\x27\xBA\xC5\xBB\x14\xBF\x44\xBA\x16\xBF\xFB\xBA\x20\xB9\xD0\xB5\x49\xBA\x23\xB9\x60\xBA\x4C\xBA\x62\xBA\x27\xB9\x13\x7A\x13\xB9\x6A\xBA\x0E\xBF\xA0\xBB\x89\xB5\xA2\xBB\x96\xB3\x63\xB8\x55\xB9\xDA\xB7\x57\xB9\x2A\xB7\x7A\xB7\xAA\xBB\x36\xBF\xAC\xBB\xBC\xB7\x9B\xBA\xBE\xB7\x3B\xBF\x09\xB8\x86\xB9\x0B\xB8\xFF\xBE\x4F\xB8\x41\xBF\xCA\x6C\x2A\xB9\x2C\xB9\x0D\xBF\x79\x69\x4D\xBF\x78\xBD\x4F\xBF\xEF\xBE\x56\xBA\x48\xB5\x2D\xBF\x46\xBB\xEA\xB6\x5E\xB3\xA6\xBB\x51\xB4\xA8\xBB\xCA\xBA\x97\xBA\x81\xB2\x99\xBA\x83\xB2\x51\xBB\x07\xB8\x73\xBF\x4B\xB8\xFD\xBE\x4D\xB8\x77\xBF\x25\x3A\x01\xBF\x72\x96\xC6\xA1\xAB\x91\x07\xA8\x13\x9C\x85\x97\x64\xBB\x02\x01\x7F\xBF\xB2\xBD\x11\xBF\x25\xB4\x84\xBF\xC3\xBA\x2E\xBF\x87\xBF\x70\xB4\x89\xBF\x04\xB5\x8B\xBF\x7F\xB2\x8D\xBF\xC7\xB2\x6F\xBF\x5D\xB9\x71\xBF\x5F\xB9\x93\xBF\x61\xB9\x75\xBF\xA5\xB9\x1F\xBA\xF5\xB8\x21\xBB\xD8\xB5\x8C\xAD\x6A\xB9\x79\xBB\x0D\xB0\xB0\xB9\xCD\xB7\xB8\x89\x80\xBB\x3B\x0F\xD8\x93\xA2\xBF\xBE\xBD\x46\xB5\x05\xB7\xBB\xA8\x53\xBF\x8C\xB8\xC0\xB9\x8E\xB8\xC2\xB9\x91\x96\x35\xBF\xEB\xB8\x37\xBF\x7E\xB7\x39\xBF\xE7\xBA\xB5\xBF\x1C\xBA\x3D\xBF\xFE\xBE\xB9\xBF\x89\xB9\xB6\xBB\x5A\xB1\x8C\xB9\xF5\xB5\x6F\xB9\x12\xB0\xFF\x00\x4F\xB2\xF5\xB7\x1B\x88\x63\xBF\x3E\xB6\xC6\xBB\x7B\xB9\x89\xBB\x6D\xBB\x8B\xBB\xE3\xBA\xF9\xBE\x08\xA3\x8F\xBB\xE4\x9F\x9A\xBE\x78\xBF\x04\xBB\x8A\xAD\xA2\xB4\x55\x9D\x82\x9D\x68\xB2\x2F\xA2\x6D\xB9\xDC\xB5\xF6\xB5\xCA\xAF\x90\x10\xB4\xB9\xE6\xBF\x09\x01\xC7\xBF\xD5\xBD\x03\xB9\xCA\xBF\x2A\xAE\xCC\xBF\xBF\xB9\x5A\xBA\x56\xBF\x47\xBA\x58\xBF\x5E\xBA\x5A\xBF\xDC\xBE\x5C\xBF\xDE\xBE\x5E\xBF\x1C\x91\x90\xAA\x02\xAE\x33\x98\xFA\xBF\x11\xB6\x22\xA8\x13\xB6\xD3\xB9\xDF\xAD\xF7\xB5\x48\x0F\x97\xB2\x4B\xBF\x5C\x0A\x05\xC0\xE2\xBD\x07\xC0\x2B\xBF\x44\xBB\x61\xB8\x66\xBF\x0F\xBB\x64\xB8\x31\xBF\x12\xBB\x33\xBF\x14\xBB\x69\xB8\x16\xBB\xE4\xBA\xD5\xBF\xB3\xBF\x1A\xBA\xD8\xBF\xE9\xBA\xB7\xBF\xD4\xBA\x97\xBF\xD6\xBA\xEE\xBA\x21\xAE\x7B\xA2\x05\xBA\x25\xC0\xE8\xBD\xF2\xB9\x0A\xBA\x6D\xBA\xAC\xBA\x75\xB7\xEB\xBF\xC8\xBB\xCD\xB8\xEE\xBF\x6F\xBB\x47\xB7\x8E\xBB\xD7\xB6\x73\xBB\xF4\xBF\x65\xB9\x79\xBF\x35\x7E\x03\xBA\xFC\x8D\x29\x92\xE7\xBF\xC3\xBB\x1F\xB8\x2B\xBB\xE0\xB9\xCD\xBF\x0C\xC0\x9D\xB9\xFC\xBA\x9F\xB9\xB3\xB8\xC5\xB9\xA2\xB9\xC0\x92\xC8\xB9\x1B\x93\xDE\xBF\x70\x78\x23\xBA\x7D\xBF\xD0\xBE\xE8\xBF\x06\xB7\x0A", +"\xC0\x2B\xBA\xB3\xB7\x62\xB6\xFE\xB7\x9A\xB3\x00\xB8\xC5\xB2\xAF\xBF\x30\xB5\xB1\xBF\xCE\xBA\x36\xC0\xD0\xBA\x9D\xBA\xD2\xBA\x3A\xC0\xEB\xBA\xD5\xBA\xED\xBA\x21\xBB\x39\xB7\x14\x8E\x05\xB3\xB1\xBC\x6A\x79\x24\xC0\x6E\xC0\xCB\xBF\x5D\xC0\x0B\xC0\xFA\xBA\x60\xC0\x57\xBF\xFD\xBA\x59\xBF\xFF\xBA\x5B\xBF\x01\xBB\x5D\xBF\x4E\xBA\x20\xB3\xF9\x78\x4D\x8B\x42\xC0\xE1\xBC\xDC\xB9\x82\xBF\x51\xBF\x42\xBA\x93\xB4\x15\xBF\x90\xAF\xD7\xBE\xFA\xB9\x19\xBF\xFC\xB9\x1B\xBF\xFE\xB9\xE9\xB9\x00\xBA\x37\xBB\x89\x90\xBB\xBA\xD3\xBB\x31\x79\x45\x9E\x41\xC0\x8B\xC0\x09\xC0\x8D\xC0\x71\xC0\xFC\xB7\xF0\x84\xB7\xB6\x47\xB0\x6B\xBF\x59\xB9\xDE\xB7\x16\xBA\xE0\xB7\x18\xBA\x7C\xC0\xAF\xBB\x38\xC0\xB1\xBB\x80\xC0\x56\xBB\xDC\xBF\x20\xBB\x69\xC0\x0A\xB2\x44\x0F\x86\xBA\x8B\x9D\x9C\xC0\xEC\xBC\x9E\xC0\x12\xBF\x9E\xB2\xEA\xBF\xC4\xBA\xF5\xBE\xD3\xB3\xF7\xBE\xA1\xAC\xF0\xBF\x61\xA8\xF2\xBF\x65\xA1\xD9\xB6\x1C\x94\xA5\xBA\x00\x00\xA7\xBA\x26\xA7\x59\xC0\xD2\xBE\x3B\xB8\x85\xBF\xA3\xBB\xA9\xBF\x48\xBB\xAB\xBF\x12\xBA\xAD\xBF\x2E\xB5\x78\xC0\xBA\xB7\x7A\xC0\x50\xBB\xD6\xBF\x52\xBB\x7E\xC0\x54\xBB\xC6\xC0\xB3\xBB\xC8\xC0\x92\xBB\x54\xC0\x62\x94\x77\xB8\xC8\xBF\x5C\xBD\x44\x0F\x98\xA9\x61\xBF\x7E\xBF\xB4\xC0\xB1\xB6\x70\xC0\x88\xBB\x4A\xC0\xE1\xBA\x4C\xC0\xF8\xBE\x4E\xC0\xFA\xBE\xDC\xC0\x86\xA1\xDE\xC0\x3E\x94\x51\xB7\x86\x94\xB3\xC0\x5A\xC0\x5F\xB8\x47\xC0\x65\xBF\xD4\x9D\x7A\xB2\x68\xAE\x7C\xB2\x69\x85\x76\xC0\x9C\xB3\xCB\xBA\x9E\xB3\xD4\xBF\x05\xB8\x91\xBF\x83\xB9\x97\xB8\xF1\xB8\x9F\xBA\xF3\xB8\xF9\xC0\xB5\xBB\xFB\xC0\x79\x83\x85\xB0\xFF\x00\x49\xAF\x6C\xC0\x07\x6D\xCF\xC0\xF5\xBA\x68\xBB\x13\xBF\xB6\xC0\x07\xC1\x44\xB3\x4B\xC0\xD3\xB6\x8C\xBB\x0C\xC1\xF1\xBF\x50\xC0\x90\xBB\x10\xC1\xCC\xA2\xFD\xC0\x06\xC0\x27\x8E\x08\xBB\xF0\xA9\x24\xBA\x04\xC0\x04\xC1\xF5\xB9\xF2\xBE\x8F\xBA\x5C\xB3\xE9\xC0\xA5\xBB\x73\xBA\x6A\xBF\xDC\xB7\x6C\xBF\xBE\xC0\xAB\xBB\xC0\xC0\xAD\xBB\xC2\xC0\x3A\xBF\xF5\xC0\x3C\xBF\xF7\xC0\x3E\xBF\x74\xBB\xA2\xBA\x2C\xC1\xB3\xA4\x06\xBB\x31\xB2\x21\xBD\xC4\xBF\x54\xB8\x6D\xC0\x15\xC1\xBB\xB9\x52\xBF\x37\xC1\xDF\xBA\x08\xC1\x8A\xBB\x3B\xC1\xEF\xBF\x3D\xC1\xDB\xC0\x3F\xC1\xF3\xBF\x41\xC1\xA7\x9B\x25\xBD\x96\xA4\x3B\xBB\x9D\x7A\x8F\xB9\xFC\xB3\x21\xB4\x92\xB9\xEB\xBE\x4A\xC1\x5C\xC0\x58\xBA\xA3\xC0\xE3\xB4\xA5\xC0\x2E\xBA\xA7\xC0\x30\xBA\x33\xBB\x32\xBA\x35\xBB\x34\xBA\xAD\xC0\x18\x8D\x81\xB0\x43\xB4\x28\x89\x40\xB4\x5F\xBB\x4F\xAA\xBD\xBB\xAE\x9B\x90\x10\xF4\xB7\xA6\xAF\x32\xC1\x81\xC1\x17\xC1\x2A\xC0\x19\xC1\x61\xB6\x7B\xB2\xBA\xC0\x90\xB1\xC9\xBA\xAE\xBF\x6D\xBF\xD3\xBF\xF1\xC0\x38\xBF\x59\xC1\xD7\xBF\x5B\xC1\x74\xBF\x28\xC1\x87\xB9\x2A\xC1\x0D\xB8\x61\xC1\x94\xBB\xA2\xB4\x32\xB0\xEE\xAF\x9B\x7B\x14\xB8\xC2\xBF\x6F\x95\x7F\xC1\x62\xBF\x69\xC1\xDE\xB9\xA6\xBF\xD4\xC0\xA8\xBF\x71\xBA\x88\xBF\x51\xC1\x94\xBA\xBC\xC0\xA9\xBB\x55\xC1\x6E\xBF\x57\xC1\x70\xBF\x95\xB8\xEF\xB8\x26\xC1\x85\xB9\xAE\xC1\x76\xBF\xB0\xC1\xF5\xBF\xCA\xB9\x23\x6D\x10\xB8\xBF\xBF\x30\xB8\x98\xBB\x96\xAA\x9A\xBB\x65\xB4\xFF\x00\x9D\xBB\x03\xC0\x06\x01\x33\xC1\x67\xBB\x08\xC0\x05\xC1\x6C\xC1\x6B\xBB\xEC\xBF\xF6\xBE\x0A\xC1\xD9\xC0\x72\xC1\xAA\xA8\x0E\xC1\x26\xA2\x76\xC1\x26\xBE\xB4\xC1\x53\xB8\xC4\xB4\x81\x90\x35\xB0\x47\xBF\xF2\xAF\xF1\x9F\xC0\xBB\x48\x65\x9F\xA4\x01\x01\xE1\xC1\x84\xBB\x35\xC1\xD3\xC0\x06\xC1\x6D\xC1\x39\xC1\x09\xC1\x70\xC1\x4D\xC0\xD0\xB8\x71\xBB\x74\xC1\xDD\xC0\xD4\xB8\x09\xA0\x63\xC1\x22\xA4\x7A\xB8\x99\xAD\x16\xA0\xF3\xC1\xE9\x95\xDC\xBB\x39\x98\xB7\xA4\x2A\xB9\xA8\x69\xEC\x99\x6E\x47\x14\xBD\xDA\xBB\x93\xBC\xF6\xBB\xA1\xBD\xEF\xBD\x60\x8D\xB7\x74\x7B\xBC\x77\x32\x73\xBC\xFF\xBB\x6F\x72\x01\xBC\xEB\x66\x9A\xBD\x26\xAC\x4C\x75\x6E\x8D\x64\xBD\xE5\xBC\xAB\xBD\xEE\xBD\xE2\x8D\xAB\xBC\xD1\xBC\x00\x3B\x2A\xC2\xD5\xB4\x57\xAC\x6F\xBD\x14\xAC\xC3\xBD\x15\xBC\x97\xBD\x52\x71\xBB\xBD\x8D\x4A\x36\xC2\x44\x69\x47\x72\x1F\xAC\x71\xBD\x67\xAC\x22\xAC\xAE\xBD\xBF\x74\x79\x69\xEF\x66\xA3\xBF\x82\x7D\x9A\x8E\x5D\xA0\x84\x96\xA6\xBC\xCD\xBD\xDA\xBC\xCF\xBD\x8C\xBD\x64\xBC\x29\xC2\xA5\xBD\x09\xBD\x63\xAC\x03\x75\x40\xAC\xF1\xAB\x3D\xAB\x95\xBD\x3C\xC2\xC5\xBD\x71\x0F\x71\xA0\xE0\x91\x2B\x6B\x4B\xC2\xFE\xC0\xB3\xBD\xE3\xBC\x3F\xAC\x03\xBD\x45\xAC\x47\xAC\x34\xC2\x1A\xC2\x58", +"\xC2\x84\xBD\xFC\x70\xEF\xBC\xB7\xBD\xD4\x90\x31\xC2\x40\xA5\xF4\xBC\x56\xC2\x24\xC2\x70\xC2\x9B\xBD\x4C\x71\x58\xAC\x86\x72\x3B\xC2\x6D\xBC\x36\xAC\x56\xBC\x3F\xC2\x56\x73\x7B\xC2\x2B\xC2\xC8\x70\x91\x72\x65\xAC\x45\xC2\xFC\xBC\x98\x72\x48\xC2\x0C\x75\x08\x8E\x86\xC2\x37\xC2\xC5\x74\xDD\x8D\x0C\xBD\x74\xC2\xCD\xBC\x08\xBC\x6F\xBC\x11\xBD\x7A\xAC\x77\x6A\x66\xC2\x44\xC1\x96\xA9\x96\xB0\xB9\x63\x17\xBD\x6E\xA5\x5C\x0A\x9D\xC2\x26\xC0\x45\xC1\xDD\xBD\x7D\xBE\xC1\xAB\x90\xC2\xD3\xBB\xF4\x70\xE5\xBD\x13\xA6\xA5\xC2\x43\xC0\x5C\x1A\x7A\xA5\xEB\xBD\x89\xBC\xCD\xA0\x71\xAC\xF0\xBD\x1B\x83\xFB\xA0\x48\xC1\x06\x01\x0D\x8E\xBD\xC1\xF0\xBE\xBF\xC1\x01\xC2\xE6\xC1\x6E\xC1\xED\xBF\x05\xC2\x0B\xC1\x07\xC2\x4F\xC0\xD2\xB8\x51\xC0\x01\xB2\x41\xB9\x6D\x92\x14\xB5\xF7\xBF\x9B\xBF\x1E\xA1\x33\xB1\xF4\xB4\x50\x80\xA5\xB8\xF1\x7D\x79\xA9\xBD\xC2\xE5\xC0\x85\xBB\x20\xB6\xE7\xB5\x4D\xC1\x29\xB4\xD6\xC0\xED\xB6\xD8\xC0\x25\xB0\xDA\xC0\xEC\xC1\x09\xC2\x0F\xC1\x5A\x7E\xE0\xBE\x80\xBE\x0D\xB6\x16\xB5\x05\xBF\x98\x88\x1B\xB5\xC0\xB8\xB8\xC2\xDE\xAC\x85\xB8\x01\x01\xD8\xC2\xED\xBE\x5D\xB8\x9F\xC0\x46\xC0\x6B\xC1\x83\xC1\x54\xBF\xA4\xC0\x17\xBF\xB2\xBA\x0F\xC0\xB4\xBA\xA9\xC0\xB6\xBA\xAB\xC0\xB8\xBA\x8E\xC1\x20\xAE\xD6\xB8\xF5\x04\x1D\xC2\xD0\x96\xE9\x31\xFF\xBF\xE9\x8D\xDC\xB8\x01\x01\xD0\x87\xE1\xB5\x77\x6A\xF4\xC2\x10\xBF\xF6\xC2\xD2\xC0\x25\xB5\xC1\xC2\xC7\xBB\x03\xC2\x6F\xC1\x45\xB7\x3C\xC1\xC7\xC2\x0D\xC1\xE5\xC2\xEE\xC1\x0B\xC2\xA4\x94\x43\xBF\x60\xB5\x1A\xAD\x62\xB5\xF6\xC1\x49\x6E\x65\xB5\x5C\xA2\x13\xC3\x29\xBF\xA4\xBF\x49\xB4\xF1\xBE\x0C\xB3\xF3\xBE\x4E\xC1\xC2\xC1\xAA\xBF\xC4\xC1\xC8\xBA\xC6\xC1\x8C\xBF\xA6\xC1\x98\xBA\x22\xC1\xED\xB8\xCC\xC1\x9C\xBA\xCE\xC1\x9E\xBA\x7F\xBA\xA0\xBA\x5F\xC1\x40\xBF\xF6\xBF\xAC\x9C\x60\xBF\x2C\x93\x11\x66\x2C\xC3\x4E\xBF\xC9\xBF\x28\xC0\xA1\xBB\x9E\xC1\xB5\xA7\x1A\xC1\x1A\xAF\x74\xC0\x64\xB6\x1E\xC1\x66\xB6\x3A\xC3\x8E\xBF\x3C\xC3\x9A\xBA\x3E\xC3\x72\xBF\xAC\xC1\x94\xBF\xDA\xBF\x96\xBF\xD2\xC1\x53\xC0\x46\xC3\xF1\x87\x64\xA5\x7C\xBF\xA8\xBA\xF3\xC2\x9C\xC1\xF9\xC2\x4C\xC1\x2D\xBB\xFC\xC2\x0D\xC0\x5C\xBA\xFF\xC2\x32\xBB\x01\xC3\x34\xBB\x03\xC3\x36\xBB\xDF\xBE\xCC\xC2\x6F\x96\xCE\xC2\x30\xB1\x06\xB2\x72\x92\x71\xBE\xA5\x70\x75\x92\xC9\xA1\x0B\xB2\x66\xC1\xC4\xB4\x5C\x0A\x4B\xC3\x80\xBF\x4D\xC3\x45\xC0\xC1\xBA\x9D\xC1\x0D\xBB\x2B\xC0\x2F\xBF\x2D\xC0\xEB\xC0\x4A\xBB\xED\xC0\xB8\xB7\xEF\xC0\xCC\xBA\xA8\xC1\x35\xC0\x5C\xC3\xB4\xBF\x5E\xC3\xB6\xBF\xD0\xC1\xB8\xBF\x3F\xBF\xBA\xBF\xCA\xC0\x80\x89\xAA\xB9\x6B\xA8\x0B\x0D\x2C\xB2\x1B\xC0\xAF\xB9\x32\xB6\xB1\xB9\x43\xB4\xC3\xBF\xF4\xAF\x78\xC3\x85\xC3\x6A\xC3\xA1\xC0\xF8\xBA\x84\xC1\xE9\xB5\x2D\xBA\xC9\xBB\x2F\xBA\xCB\xBB\x31\xBA\xCD\xBB\x8C\xC1\xCF\xBB\xB9\xBA\xD4\x91\x94\xBD\x8D\xB9\x48\xA8\xE7\xBB\xF2\xB7\xE4\xBF\xA0\xBF\x69\xC3\xBE\xC2\x83\xBF\x05\xB9\xE5\xC1\x19\xC3\xD1\xB6\x3A\xC1\x1C\xC3\x71\xC1\x1E\xC3\x3E\xC1\xC9\xC2\x40\xC1\x22\xC3\x23\x89\xBC\xBF\x06\x98\x56\x9D\x6B\xB9\x85\xB4\xC1\xBF\xDB\xC1\x24\xBB\x5D\x9D\xBB\xC1\x79\x69\x86\xC3\x4C\xC2\xC7\xB8\xA5\xBF\xC8\xC3\xFA\xC2\x5E\xC0\x8F\xC0\xC1\xB9\x61\xC0\xC3\xB9\x63\xC0\x5B\x95\x6D\xB8\x5D\xC3\x40\xC3\x7F\xC0\x9C\xC3\x3B\xC0\x62\xC3\x3D\xC0\xBB\xBF\x2E\xB6\x19\xC0\xDA\xB5\x0A\x98\xD9\xBB\x49\xBD\x20\xB4\x08\xAE\x99\xA8\x05\xBA\xE0\xC3\x67\xC2\x2E\xC3\x90\xB4\x6B\xC3\x31\xC3\xDD\xC2\x4D\xB4\xC5\xBA\x73\xC0\xC7\xBA\xFF\xB7\xA4\xC1\xEE\xC0\x58\xC3\xB0\xBF\xCA\xC1\xB2\xBF\x98\xC3\x37\xC0\x9A\xC3\xD9\xBF\x5D\xC1\xDB\xBF\x9E\xC3\xDD\xBF\xB2\xC1\x4C\x8F\xED\xB9\x31\x85\x38\xB6\x27\x01\x00\xC4\x9E\xC2\x15\xC3\xE3\xC3\x69\xBB\x18\xC3\x49\xC0\x1A\xC3\xC4\xC2\xCD\xC3\x06\xC2\xCC\xBB\xD1\xB8\xCE\xBB\xD3\xB8\xD0\xBB\x80\x86\x56\xC0\x8B\x9D\x20\xC4\xA6\xC2\x02\xC4\xDE\xB4\x8B\xC3\xE7\xC0\x8D\xC3\x4F\xC1\x30\xBF\x90\xC3\x32\xBF\x92\xC3\x01\xB8\x20\xC1\x03\xB8\x5A\xC3\x90\xBF\xF3\xC0\x92\xBF\x14\xC4\x39\xC0\xF1\xC3\x81\xC0\x3C\xC0\x83\xC0\xA0\xC3\x62\x79\x6B\xC0\x68\xC3\x00\x00\x33\xC4\xB1\xC2\x88\xC3\x50\xBF\xF8\xC2\xB0\xC3\x41\xB3\x6D\xC3\x85\xC1\xFD\xC2\x30\xBB\x71\xC3\xDA\xBE\x11\xC0\x1C\xBF\x13\xC0\x1E\xBF\x15\xC0\x0A\xAF\x3C\x7A\xAC\xC2\xB6\x93\x3A\xBA\xD2\xA2\x09\x01\x51\xC4\x9D\xC0\x44\xC0\x54\xC4\x8A\xC3\x04\xC4\x4B", +"\xB4\x32\xC3\xDE\xC2\xE7\xC1\xD7\xC0\xE9\xC1\xE2\xC2\xEB\xC1\x5B\xA9\xED\xC1\x4B\xA3\x1F\xB3\x44\x91\x21\xB3\x4D\x8B\x6A\xC4\xD0\xC0\x6C\xC4\xF7\xC2\x6E\xC4\x56\xC4\x21\xB6\x71\xC4\x07\xC4\xDF\xC2\xA7\xBB\xE1\xC2\x47\xB1\xE3\xC2\x78\xC4\x20\xC3\x7A\xC4\xD3\xC3\xDC\x89\x85\xC0\x00\xC0\x71\x0F\x3A\xB3\xD8\xB9\x12\xC3\xAF\xC3\x30\xC3\x70\xC4\x06\xC4\xCD\xB5\x6F\xC3\x18\xBF\x5C\xC4\x1A\xBF\x5E\xC4\xAA\xC0\x1D\xBF\xEA\xB9\x1F\xBF\x14\x81\xDE\xAE\x66\x9E\x2B\xC3\x98\xC4\xC0\xC2\xC9\xC3\x26\xC4\xCB\xC3\x04\xC2\x29\xC4\xC6\xC2\x2B\xC4\x08\xC2\xD1\xC3\x75\xC1\x90\xC4\x7F\x9E\xE0\xC0\xE2\xC0\xAD\xC3\x1F\xC4\xAA\xC4\xE4\xC3\x6C\xC3\xB2\xC3\x1E\xB9\x9D\xC4\xFE\xC2\x92\xC0\x10\xC0\x94\xC0\x12\xC0\x96\xC0\x14\xC0\xD6\xB5\xBE\xB4\xBC\xBA\x3B\xB7\xDA\x02\x32\xC4\xBC\xC4\x24\xC4\xAC\xC4\xD5\xC0\x73\xC4\xE0\xC2\x75\xC4\x8B\xC4\x77\xC4\x8B\xA9\x79\xC4\x41\xA8\xEF\xC1\xB7\xC4\x12\xC1\xC6\x9E\xFF\xC3\xCF\xC4\x36\xC1\xE5\xC3\x8E\xC0\x55\xBF\x90\xC0\x0E\xC0\xC3\xC4\x00\xC3\xA1\xC4\x02\xC3\xA3\xC4\xAC\xC0\xA5\xC4\xCB\xA9\x6D\xB7\xCD\xA9\x6F\xB7\xF2\xC2\x50\xC4\xE0\xC4\x00\xC2\xD1\xC4\xC1\xC1\x08\xC4\xA1\xC1\x54\xC3\xB8\xB6\x56\xC3\xBA\xB6\x0E\xC4\x79\xC0\x10\xC4\x7B\xC0\x12\xC4\x7D\xC0\xEF\xC3\xF6\xC0\x48\xC4\xC7\xC0\x18\xC4\xC9\xC0\x1A\xC4\xA7\xB6\x0D\xC2\x91\xC1\x10\x8C\xAA\x9A\x8C\xA7\x7F\xC4\x34\xC1\xE3\xC1\x4B\xC1\x05\xC4\x58\xC4\xB3\xC3\x86\xC1\xB5\xC3\x88\xC1\xB7\xC3\x8A\xC1\xB9\xC3\x75\xC3\x8D\xC1\xED\xC4\x36\xBA\xAF\xC0\xF5\xC2\xDC\xC1\x3B\x8C\xDF\xC1\x03\x01\x11\xC5\xE2\xC1\x4E\xC3\x64\xBF\x50\xC3\xC3\xAD\x52\xC3\x45\xB0\xA2\xC1\xD4\xB1\x0C\xC4\x93\xC3\xFE\xC4\xF0\xC0\x00\xC5\xF2\xC0\xAA\xC1\xF4\xC0\x04\xC5\x5C\xC1\x06\xC5\xF8\xC0\x08\xC5\xFA\xC0\x64\xC3\xA4\x90\x5A\xBB\xB9\xBB\x3B\x0F\x7A\xC1\xF0\xB7\xFB\xC3\xC2\xC3\xCF\xB7\x91\xBE\xAE\xC3\xC6\xC3\xA0\xC0\x99\xC4\xB1\xB7\x86\xC4\x9C\xC4\xE5\xC4\x70\xC3\xE7\xC4\x72\xC3\xE9\xC4\x74\xC3\xEB\xC4\x04\xC3\x20\xC5\x2D\xB8\x78\xC1\x84\xB4\xEE\xB7\xC8\xAF\x0C\xC3\x95\xB2\xFF\x00\x99\xC1\xD0\xB7\xBC\xC2\xF4\xC4\x17\xC3\xF6\xC4\x86\xBF\x34\xC3\xEA\xC0\x36\xC3\x0B\xC4\x38\xC3\xA5\xC1\xC8\xC1\xA7\xC1\x36\xC5\xA9\xC1\x02\xC5\xC3\xC0\x46\xC4\xC5\xC0\x3C\xC5\x5E\xC1\x52\xC0\xF4\xC3\x4C\xC4\x00\xA4\xA2\xC3\x91\xAA\x16\xB8\xD8\x18\x23\xAD\xEF\xAF\x45\xA4\xB9\xC1\x6C\x6E\xC4\xC3\xF3\xC4\x4C\xC5\x55\xC4\x4E\xC5\xFA\xB7\x50\xC5\x23\xB8\x5A\xC4\xD8\xBE\x9F\xC4\xA8\xC0\x56\xC5\x8B\xC1\x1E\xC5\xBB\xC3\x05\xC3\x48\xAA\x95\xBB\x0D\xC5\x1C\xC0\xD9\xC1\x0F\xB0\xC5\x9F\xB2\xB9\x35\xB8\x83\xC3\xCE\xAF\x2B\x6B\x28\xC5\xFE\xC1\x13\xC5\x82\xC1\xBE\xC4\xFB\xC2\x59\xC4\xC1\xC4\x5B\xC4\x54\xC5\x5D\xC4\xC5\xC4\x5F\xC4\xC7\xC4\x61\xC4\xC9\xC4\x38\xBB\x99\xC5\x80\xC5\x9E\xAF\x52\xBD\xAB\x9B\xBC\xBB\x7C\xC1\x38\xB3\xC0\xAA\xAB\xB4\x87\x97\x7D\x69\xA4\xC5\x43\xB4\xD3\xBE\xCE\xB6\x8D\xC5\xB0\xBA\x8F\xC5\xA6\xC0\x91\xC5\x89\xC1\x73\xC3\x94\xC5\x58\xC5\x76\xC3\x62\xC4\xAE\xC0\x0B\xAF\x23\xC5\x69\x6C\xD7\xAA\x16\xC2\xB8\xC5\x95\x90\x14\xC2\xD2\x96\x16\xC2\x83\xB8\xD6\xC2\x72\xB9\x00\x00\x19\x8E\xD2\xC5\x41\x9D\x36\xC4\x6F\xC4\x4F\xC5\x9B\xC4\x8E\xC5\xAB\xC5\x90\xC5\xAD\xC5\xA0\xC4\xAF\xC5\xA2\xC4\x60\xC4\xA4\xC4\x7B\x89\x78\xC3\xE8\x9C\xE1\xBE\xCB\xB9\x40\x6B\xBD\xB8\x38\x9C\x52\x0C\xF3\xB4\x59\xB1\x50\xB7\x14\x9C\xE9\xBE\x3F\x0F\xD8\x93\xDF\xC5\x14\xC3\xE2\xC3\x2F\xC3\xAB\xC4\xE2\xC4\xB7\xC0\x2E\xC5\xD2\xB1\x30\xC5\x7D\xB2\x32\xC5\x3F\xC4\x94\xC3\x21\xC1\x96\xC3\x23\xC1\x44\xC4\x25\xC1\x7D\xBA\x27\xC1\x42\xC3\x29\xC1\x3E\xC5\xFD\x39\x99\xBF\xF4\xA0\xD0\xC2\x36\x9C\x06\xBF\xD3\xC2\x97\x7F\x5B\xB1\xEB\xAB\xC3\xB8\x79\xA9\xFF\xC5\x2D\xC3\x22\xC4\x02\xC6\xBD\xC4\x15\xC5\xBF\xC4\xD6\xBE\xC7\xC5\x87\xC1\xC9\xC5\x1B\xC5\xCB\xC5\x1D\xC5\xCD\xC5\x1F\xC5\xCF\xC5\x4B\xAD\x7A\xB1\x22\xBF\x1E\xC2\x24\xBF\x64\x9C\x4B\xA1\xDD\xC5\x23\xC6\x4C\xC3\x27\xC0\x89\xC3\xDC\xBA\x37\xC4\xA7\xBF\x69\xC5\xF8\xC4\x1B\xC1\x08\xC6\x1D\xC1\x0A\xC6\x77\xC0\x34\xC5\x95\xC3\x72\xC5\x97\xC3\x7B\xBA\xCD\xC1\x12\xC6\xCF\xC1\x14\xC6\xAF\xC1\x16\xC6\xB1\xC1\x40\xC5\x29\xB9\x24\xC3\xF9\xB8\x26\xC3\xFB\xB8\xBB\xC5\x69\x8F\xFE\xB8\x05\x92\x05\xBA\x3C\xC6\x87\xC3\x3E\xC6\x6D\xC4\x40\xC6\xE3\xC5\x8C\xC5\xE5\xC5\xC6\xC5\xE7\xC5\xC8\xC5\xE9\xC5\x92\xC5\xEB\xC5\xEA\xC4\xED", +"\xC5\xEC\xC4\x33\xC6\x20\xAE\x48\xC3\x1E\xC4\x18\x8E\x66\xC5\xD5\xB7\xC0\xC1\x43\xC6\x88\xC4\x8A\xBF\x8A\xC4\x6E\xB1\x8C\xC4\xD8\xC4\x8E\xC4\xDA\xC4\xB6\xC4\x44\xA1\xA0\xB5\xD0\x9C\xFC\xC5\xC5\xBF\xCF\x67\x61\xC6\xE1\xC3\x63\x86\x82\xC4\x65\xC6\x84\xC4\xDC\xC2\x16\xC5\xC0\xC4\x52\xC5\x9E\xC4\x6C\xC6\xCA\xC5\x93\xC5\x30\xC6\x70\xC6\x59\xC5\xEF\xC5\xCF\xBE\xCD\xC2\x43\xB9\x81\x67\x95\xBE\x48\xB9\x1A\xB7\xFF\x00\xC1\xB5\x9A\xC1\x2B\x6B\x8A\xC6\x01\xC4\x25\xC6\x03\xC4\x8F\xC6\x87\xBB\x02\xC2\xAE\xC4\x1B\xC3\xCA\xBB\xCF\xB8\xB2\xC4\xC8\xC2\x2D\xC4\xCA\xC2\x83\xC6\x19\xC6\x17\xC0\x65\xB2\xB5\x05\xA5\xC3\xAE\xB9\x2E\xB2\xA8\xC3\x85\xC5\x9A\x8F\x28\xA8\x11\x66\xA7\xC6\x21\xC4\x01\xC6\xAA\xC6\x8B\xC5\xAD\xB8\x29\xC6\xF4\xBE\xD3\xC4\x89\xC4\xD5\xC4\x7E\xC6\xD7\xC4\xAB\xAD\xD9\xC4\x08\xAA\xDB\xC4\x84\xC6\x52\xC2\xB4\xAD\xBF\xC6\xF8\xB5\xA1\xC5\x71\xB2\x07\x6D\xC3\xC6\x34\xC4\xA9\xC6\xE2\xC5\xAB\xC6\x8E\xBA\x91\xC6\x2A\xC6\x6A\xC6\x2C\xC6\x95\xC6\x2E\xC6\x97\xC6\x2C\xC4\xBA\xC3\x2E\xC4\xBC\xC3\xC3\x90\x68\xB9\x6C\xA8\x2D\xA2\x43\xC5\x91\xA8\xD2\xB9\xFE\xBF\xE2\xBF\xD5\xB9\x71\x0F\x02\xC0\xA5\xC6\x5C\x0A\xDC\xC6\x52\xC4\x63\xC6\x8D\xC6\x2C\xBF\x42\xC6\xE8\xC0\x6A\xC5\x50\xC1\x8F\xB8\xD1\xBF\xC4\xB9\xEC\xC3\xC6\xB9\x66\xC0\x02\xBB\xC9\xB9\x2D\xB6\x8E\xB2\xF7\xC3\x84\xB4\x05\xAE\xDB\xC3\xFC\x81\x22\xC0\x96\xC4\xDB\xC6\x77\xC6\xE3\xB8\x25\xC4\xD2\xC4\xC3\xC2\xE8\xC1\xC5\xC2\xEA\xC1\xCF\xC3\x73\xC1\xB4\xC4\x0A\xC2\x2F\xC4\x55\x89\x1C\xC4\x8B\x9D\xFB\xC6\x6B\xC4\x81\xBF\x16\xC3\x78\xC6\x18\xC7\xF7\xC4\x7B\xC6\xAC\xBF\x7D\xC6\x64\xB3\x7F\xC6\xD0\xC6\x81\xC6\xD2\xC6\xB6\xC6\x72\x83\xD3\xB2\x57\xC0\xC6\xB1\xB5\x3B\x16\xC7\xF7\xBA\x57\xC4\xC9\xC6\x33\xC3\x44\xC6\x53\xC3\x0A\xC4\x75\xC0\x48\xC6\x1F\xC1\x0C\xC6\x41\xC4\x0E\xC6\x3D\xC3\x4E\xC6\x3F\xC3\x50\xC6\x41\xC3\x1D\xBB\x43\xC3\x7A\xC5\x4B\xC4\x0A\xC5\x6A\xC0\x92\xB6\x22\xC6\x3B\xC7\x86\xBB\xE1\xC6\x3E\xC7\x72\xC4\x1A\xC7\x74\xC4\x1C\xC7\x76\xC4\x1E\xC7\xE4\xC2\x20\xC7\xE6\xC2\x22\xC7\x02\x9F\x43\xC1\xDD\xC6\x81\xC5\x66\xC4\xD1\xA2\x0B\x9E\x3A\xC7\x89\xC5\x83\xC4\xC7\xC6\x9A\xB9\xE6\xC3\xE4\xC4\xE8\xC3\x91\xC0\x62\xC0\xFE\xBA\x64\xC0\x00\xBB\x09\xC7\x97\xC0\xFA\x8A\x99\xC0\xFC\x8A\x4D\x8B\x26\xC7\x80\xC4\x28\xC7\x23\xC4\xE1\xC4\xA8\xC5\x70\xC7\x6E\xC3\x93\xC6\xC2\xC4\x74\xC7\x93\xC0\x76\xC7\x95\xC0\x78\xC7\xC8\xC4\x03\xBB\xD4\xC1\x45\xA9\x65\xC7\xFC\xC6\xFC\xC3\x90\x10\x95\xC4\x02\xC1\x77\x6A\x7E\xC7\x12\xC5\x2A\xC5\xE9\xBF\x2B\xC7\x7A\xC6\xCB\xC6\x7C\xC6\xCD\xC6\x30\xC7\xCF\xC6\xBA\xAF\xD1\xC6\xFD\xAD\xD3\xC6\xA0\xA1\xFE\xB6\xDF\xAE\x5C\xA2\x98\xC7\x29\xC5\x3F\xC6\xFF\xC6\x79\xC6\x01\xC7\x40\xC7\x2F\xC5\xFA\xC4\xBB\xC0\x53\xC1\xBD\xC0\x77\xBA\xBF\xC0\x93\xB8\xC1\xC0\x74\xC5\x5A\xC1\x3A\xC5\xAD\xC1\x52\xC6\xD1\xC1\x54\xC6\xD3\xC1\x47\x78\xF5\xAE\x51\xA3\x8C\xA7\xAB\xC7\xA5\xC5\x9A\xC7\x6F\xC0\x68\xC5\xB0\xC7\x2D\xC7\xEC\xC0\x2F\xC7\x08\xB5\x31\xC7\xA3\xC7\x33\xC7\xA5\xC7\x35\xC7\xA2\x86\x92\xC4\xC7\x86\xCC\xC4\xF5\x6D\xAA\xC7\x56\xC7\xDB\xC2\xAC\xC6\xC2\xC2\x27\xC4\x1B\xC7\xB0\xC4\x1D\xC7\xB2\xC6\x1F\xC3\x61\xC7\x21\xC3\x63\xC7\x11\xC1\xED\x79\x52\xB7\x23\xC0\x6B\xC7\xD9\xC2\xFF\xC1\x67\xC5\x04\xC6\x38\xC1\xAE\xC6\x28\xC4\xB0\xC6\x1D\xC3\xE4\xC7\xD0\xC3\xB4\xC6\xD2\xC3\xE8\xC7\x23\xC3\x83\xA5\x6E\xB7\xC9\xB3\x55\xC7\x6C\xC7\x8E\xC6\x6E\xC7\x43\xBA\x84\xC7\xAA\xC5\x86\xC7\xAC\xC5\x88\xC7\xC4\xC4\x8A\xC7\xC6\xC4\x8C\xC7\xB2\xC5\x8E\xC7\x64\xBA\x91\xC7\x27\xC7\x04\xB3\x8C\xB7\x07\x9F\x00\xC8\xEE\xC7\xA6\xC5\x41\xC6\xAF\xC7\x39\xC4\x02\xC7\x3B\xC4\x6C\xC5\x43\xC7\x6E\xC5\x0D\xC4\x70\xC5\x3B\xC3\x48\xC7\x5B\xC3\x4A\xC7\xEE\xC3\x4C\xC7\xF0\xC3\xBF\xC7\x9D\xC3\x44\xC3\x9F\xC3\x52\xC7\x88\xB7\x11\xC8\x7F\xC7\x31\xAA\xFD\xB3\xF3\xBD\x1A\xB8\xA6\xC6\xDC\xC7\x97\xB6\x58\xC7\xA9\xC5\x17\xC5\x2B\xC6\x19\xC5\x2D\xC6\xB1\xC6\xB8\xC3\xE9\xC6\x95\xC5\xEB\xC6\x97\xC5\xE6\x7D\x39\xBB\xD8\xC3\x45\xC5\xD7\xC6\x7E\xC1\xD9\xC6\x6B\xBE\xFA\xC6\x37\xC8\x8A\xB8\x39\xC8\x05\xC8\x3B\xC8\xE4\xC6\x3D\xC8\xE6\xC6\x3F\xC8\x1C\xC5\x41\xC8\x31\xC6\x96\xC5\x5A\xC5\x98\xC5\x7A\xB0\x9A\xC5\xC5\xAF\x52\x82\x41\xB4\x49\xC8\x63\xBB\xDE\xC3\x97\xC7\x4E\xC8\xBD\xB9\x50\xC8\xE3\xC4\x85\xC7\x72\xC7\xE6\xC4\x09\xC8\xE8\xC4\x6E\xC6\x57", +"\xC5\x99\xC6\xCE\xC5\xB3\xC5\x20\xA4\xF1\xC1\x96\xBB\x52\xAD\x7E\x75\xB8\xC1\x11\xC7\x66\x69\x67\xB4\x9A\x95\x36\xC8\x01\xC8\xAE\xC7\x9C\xC7\xCC\xC7\x9E\xC7\x2E\xC7\xA0\xC7\xD0\xC7\xA2\xC7\x7A\xB4\xFB\xBE\xBE\xC7\x4E\xC7\x15\xC6\x2C\xC8\x19\xC4\x56\xC6\x6A\xA4\xB8\xBB\xFB\xBF\x6F\xA8\x86\xB4\x10\xB0\x1F\xC0\x93\xC4\xDD\xC1\x87\xC5\xC7\xC7\xC2\xC5\xE6\xC0\x00\xC7\x1B\xC8\xB1\xC7\x07\xC6\xB3\xC7\xA3\xC1\x20\xC8\x33\xC5\x22\xC8\x59\xC3\x24\xC8\x43\xC4\x38\xC5\x45\xC4\xBD\xC7\x5F\xC3\x16\xC4\x61\xC3\xC1\xC7\x63\xC3\x8F\xC7\xEB\xB7\xB5\xC5\x47\xC5\x93\xAA\xD6\xC5\x98\xA4\xF5\xC1\x96\xC1\xF7\xC1\xAA\xB4\x06\x01\xAC\xB4\xFA\xC1\x89\xC6\x66\xC8\x29\xBA\x68\xC8\x05\xC6\xA0\xC1\x45\xC6\xA1\xC8\x31\xC5\xA3\xC8\x0B\xC6\x4A\xC6\x0D\xC6\x4C\xC6\x0F\xC6\xA9\xC8\x11\xC6\x1B\xBB\x13\xC6\x8B\xC8\x53\xC6\x8D\xC8\x09\xC5\x8F\xC8\x10\xA3\x0C\xC5\xB6\xC5\xD4\xBB\x76\x68\xD6\xBB\xD5\xC5\xBA\xBB\x7E\xB8\xDA\x09\xDE\xAA\x7B\xB8\xA9\xC3\xB2\x7B\xCE\xBE\xEF\xB1\x7D\x69\x1E\x8E\x7F\xC8\x29\xC0\x8C\xC3\x9F\xC1\x67\xBF\x92\xBA\x69\xBF\xC5\xC1\xB5\xC7\xC7\xC1\xB7\xC7\x56\xC1\xB9\xC7\x58\xC1\xBB\xC7\xAB\xC1\xAB\xC8\x9B\xC3\x2A\xC8\xF2\xC3\xAF\xC8\x12\xB5\xF0\xC5\x02\xA8\xF2\xC5\x05\xB2\x1A\xC6\x7D\xC3\xE5\xBE\x1D\xC6\xCB\xC0\xFB\xC5\xBA\xC2\x31\xC1\x2B\x6B\xE8\xC8\x17\xC8\xC9\xC7\x8C\xC0\xF1\xC7\xAD\xC6\xB4\xC3\xCC\xC3\xF5\xC7\xCE\xC3\xF7\xC7\x1F\xC7\xF9\xC7\xB5\xC4\xB7\xB5\xFF\xC8\xD4\xAC\xF3\xA0\x15\xB5\x7C\xC3\xF5\xC5\x19\xB5\x39\x9C\xDA\xAC\x66\x7E\x1F\xC6\x1E\xB5\x21\xC6\xDD\xC5\x0C\xC9\xE0\xC5\xC3\xC5\xAE\xBA\xFB\xB7\x06\xC6\xB6\xB6\xC6\xC8\x09\xC6\xC8\xC8\x49\xC6\xA5\xC8\x0F\xC4\xF5\xC8\xCB\xC1\x26\xC8\x99\xC3\xF9\xC8\x15\xC4\x78\xC5\x17\xC4\xD4\xC8\x3F\xC5\xB1\xC8\x7A\xBF\x35\xC6\x3D\xB5\xD9\xB8\x5C\xC6\x89\xA7\xD2\x6B\x81\xB1\xF2\xC4\x29\xC9\x00\xC6\x8C\xC6\x29\xC7\x17\xC7\xCB\xC7\x9E\xC8\xCD\xC7\x91\xC3\xCF\xC7\x61\xB7\xD1\xC7\x88\xC8\xA4\xC7\xB1\xB2\xA6\xC7\x83\xA7\x47\x0F\xA1\xB1\xD4\x22\xA3\xB1\xC1\xC3\x17\x6E\x2A\xC3\x05\xBA\x4A\xC9\x24\xC6\xC5\xC6\xDF\xC6\x03\xC8\xA2\xC0\x3A\xC8\x92\xC6\x6B\xC8\x53\xC5\x6D\xC8\x55\xC5\x6F\xC8\xCC\xC5\x71\xC8\x32\xC6\x73\xC8\x2F\x8F\x74\xC6\x88\xBA\x1D\x8E\xC0\xC8\x8D\xBA\xD4\xBE\x68\xC6\x72\xC0\xF9\xC4\x42\xC7\x55\xC3\x44\xC7\x57\xC3\x34\xC9\xFF\xC4\x36\xC9\x11\xC4\x38\xC9\x13\xC4\x3A\xC9\x47\xC4\xFB\xC8\x49\xC4\xF3\xC3\x51\xC7\xD6\xC8\x24\xC9\xA0\xC2\x86\xC6\x09\xC9\x4F\xC4\x63\xC9\x3D\xC6\x2A\xBF\xAD\xC7\xEA\xC8\x38\xC4\xEC\xC8\x2C\xC0\x68\xBF\x11\xBB\x52\xC1\x75\xBA\x54\xC1\xF3\xC8\xC9\xC1\x84\xC9\x01\xC5\x86\xC9\x03\xC5\x28\xC8\x05\xC5\x8A\xC9\x07\xC5\x3E\xC9\x17\xC6\xE8\xC2\x1D\xC9\xCF\xC2\x3F\xA7\x85\x8F\xBE\xB5\x84\xBA\xC0\xB5\x87\xC5\x94\xC9\x62\xC6\x96\xC9\x64\xC6\x80\xC8\x4F\xC9\x9A\xC9\x8E\xC3\x9C\xC9\x2E\xC0\x9E\xC9\x13\xBB\xA0\xC9\x15\xBB\xB8\xC7\x79\xBA\xBA\xC7\xA5\xC9\x75\xC5\x88\xC9\x77\xC5\xA9\xC9\x3D\xC5\xAB\xC9\x55\xC6\x40\xC9\x8D\xB2\xF8\xBF\xBD\xBF\x93\x8F\x0F\xC7\xDB\xB5\x93\xB2\x60\xC5\xA9\xB4\xDF\xB5\x4B\xC8\x3F\x83\x79\x69\xB6\xC9\x8B\xC6\xE1\xC5\xCB\xB6\x19\xC8\x81\xC8\x50\xC9\x83\xC8\xCE\xC7\x85\xC8\x54\xC9\x87\xC8\x56\xB5\x57\xC9\x1E\xB3\xD5\xC7\xAC\x9C\xF4\xB5\x8E\xB9\xD7\xC9\xDE\xB5\x90\x10\xE5\xBF\xF9\xC6\x35\x0F\x78\xC9\xAD\xBA\xFD\x80\xC5\xC5\x7C\xC9\xC5\xC8\x7E\xC9\xFB\xC4\x80\xC9\xFD\xC4\x82\xC9\x35\xC5\xA3\xC9\x37\xC5\xF7\xC8\x39\xC5\xA7\xC9\x3B\xC5\xCB\xC9\x79\xC5\x59\xC9\xAF\xC9\x7E\xC5\x46\x02\xF9\xBF\xF8\xC3\x70\xA8\xFA\xC3\x03\xB3\x3E\xBB\xB3\xB9\xB5\xC9\xF6\xC9\x48\xC0\x19\xC7\xE0\xC7\x5C\xC7\xE2\xC7\x5E\xC7\x16\xC9\x60\xC7\x18\xC9\x21\xC7\xEC\xC6\xCF\x90\x0D\xC7\x52\xA2\x3A\x8A\xD8\xC3\x10\xC7\x5F\xC9\xDC\xC1\x13\xC7\x96\xC7\x07\x6D\xDD\xC9\xA8\xC6\x65\xC9\xE0\xC9\x66\xC6\xC8\xC6\x69\xC9\xE3\xC6\x07\xC8\xE8\xC5\x6D\xC9\xAE\xC5\x0B\xC8\xB0\xC5\x0D\xC8\xEE\xC5\x73\xC9\x73\xC6\x55\xB6\x63\x98\x5C\xA2\x2D\xCA\xC4\xC6\x4C\xC9\x81\xC7\xF5\xC4\x10\xC9\xDF\xC7\xF3\xC7\xE1\xC7\x14\xC9\x2A\xC4\x40\xC8\xB3\xC4\x1F\xCA\x62\xC7\x21\xCA\x71\x8B\x31\xC4\x41\xCA\x16\xCA\x18\xC1\x51\xC3\xC4\xC8\x41\xC7\xEF\xC8\x37\xC3\xF1\xC8\x39\xC3\x00\xCA\x4B\xC6\x02\xCA\x73\xC5\xC7\xC9\xBC\xC7\x06\xCA\x8A\xC8\x76\xBE\xAA\xC9\x50\xC7\x92\x9F\xA6\x98\x4E\xC4\xE3\xC0\x77\xC9\xE9\xC8\x4F\xC3\xEB", +"\xC8\x57\xCA\xED\xC8\xC6\xBA\x5A\xCA\x6D\xC5\x5C\xCA\x6F\xC5\xA1\xC9\x71\xC5\x60\xCA\x4D\xC6\x19\xBB\x4F\xC6\xD0\xC8\x51\xC6\xD2\xC8\xC0\xC7\xCD\xC9\xC2\xC7\xCA\xC4\x65\xC4\x09\x9E\x67\xC4\x6A\xC7\x6D\xCA\x0D\xC9\x97\xC9\x6F\xCA\x99\xC9\x71\xCA\x9B\xC9\xEE\xC8\x9D\xC9\xF0\xC8\x9F\xC9\xB6\xC7\xC3\xC9\xF4\xC8\xC5\xC9\xF6\xC8\x62\xCA\xF8\xC8\x64\xCA\xAC\xC8\x3C\xC9\xAE\xC8\x82\xCA\x25\x3A\x4F\xBA\x93\xC9\x55\xCA\x2C\xC5\x43\xB0\x2E\xC9\xFD\xB7\xFC\xC9\xB4\xC7\x93\xCA\xF2\xC8\x95\xCA\xA2\xC9\x97\xCA\x37\xC9\x7C\xCA\x4B\xC7\x7E\xCA\x4D\xC7\x66\xCA\xCC\xC9\x68\xCA\x8A\x9A\xD8\xC8\xB4\xC8\xDC\xC1\x95\xC7\x49\xC3\xE7\xC8\xA3\xCA\x70\xCA\x2D\xC5\x58\xCA\xB2\xC7\xA8\xCA\xA2\xC8\x76\xCA\x21\xC8\x78\xCA\x23\xC8\xCC\xC8\x49\xC7\xB0\xCA\x27\xC8\xB2\xCA\x29\xC8\x80\xCA\x2B\xC8\xB6\xCA\x52\xB3\xA7\xC4\x34\xA3\x62\xC9\xBE\xCA\x8D\xCA\xC0\xCA\x72\xCA\x09\xC4\x74\xCA\x1F\xC8\xC5\xCA\xA4\xC8\xC7\xCA\xA6\xC8\xC9\xCA\x25\xC8\xCB\xCA\x39\xC9\x9B\xCA\xFA\xC8\xCF\xCA\xFC\xC8\x9F\xCA\x7B\xC5\x2E\xC8\x4A\xB9\xB8\xC4\x4D\x8B\x42\xCA\x66\xC7\x44\xCA\x26\xC6\xD0\xC4\x47\xCA\xCA\xC3\x12\xC9\xAF\xC4\x4B\xCA\xB1\xC4\x4D\xCA\xB3\xC6\xEA\xC6\xB5\xC6\xFB\xC7\xD3\x9B\x30\xC8\x44\x96\xD9\xC7\xA4\x9E\x76\xC9\x06\x01\xEF\xCA\x92\xC7\x35\xC4\x30\xCA\xE0\xC6\x7A\xC9\xE2\xC6\xCA\xC6\x5B\xC7\xD4\xC4\x5D\xC7\xD6\xC4\x5F\xC7\x8D\xC4\xE6\xC7\x8F\xC4\xFE\xCA\x76\xA9\xD8\xBA\xEB\xC7\x14\xC7\x0B\xC9\xD6\xCA\x9D\xC8\xBC\xC9\x3A\xC4\x8F\xC3\x1E\xC8\x7F\xC9\x32\xC9\x45\xC7\xCA\xC8\x47\xC7\xE1\xCA\xA8\xC8\x04\xCA\xAA\xC8\xE5\xCA\x3B\xC9\x08\xCA\x3D\xC9\xD1\xCA\x6C\xB7\xFD\xC7\xF0\xC4\xFF\xC7\x28\xC9\x1C\xCB\x1A\xC8\x1E\xCB\x1C\xC8\x20\xCB\x04\xC7\xA4\xA8\xD2\xBF\xC8\xCA\x7A\xCA\xCD\xC8\x29\xCB\xCF\xC8\x89\xC8\x9C\xCA\x2D\xCB\x9E\xCA\x2F\xCB\xEE\xBA\xD7\xC7\x1B\xC0\x46\xC1\xEE\xCA\x35\xCB\xE2\xC9\x37\xCB\x9F\xC8\x2F\xC9\xC3\xCA\xC7\xC8\xDD\xCA\xC9\xC8\x5E\xCA\xCB\xC8\x3E\xCB\xCA\xCA\xED\xC3\xE4\xCA\xCD\xCA\xA8\xC9\xE7\xCA\x8B\xC9\xFD\xC8\x8D\xC9\xCF\xC9\xFC\xC0\xD2\xBB\xE0\xC5\xD3\xB4\x26\xC5\x02\x01\x06\xCB\x12\xC8\xFD\xC6\x4D\xC9\x3C\xC7\x85\xC4\x7B\xC9\xB8\xC0\x69\xAE\xE5\xC9\x10\xCB\xCE\xC6\x12\xCB\x80\xC6\x14\xCB\x82\xC6\x16\xCB\xE8\x9F\x5C\xC5\x47\xC8\x2E\xAA\x02\x9B\x7A\xC8\x2A\x82\x64\xC8\x2C\xCA\x4C\xCB\xBB\xC9\x8E\xCA\xBD\xC9\x90\xCA\xBF\xC9\x92\xCA\xC1\xC9\x94\xCA\x32\xC0\xC4\xC9\x17\xBB\xC6\xC9\xE3\xCA\x87\xC9\x2B\xCB\x89\xC9\x5D\xCB\x67\xCA\x0A\xCA\x0A\xB0\x46\xC8\xD7\xC1\x6C\x9F\x93\xC1\x94\x8C\x60\xBB\x45\xC9\x97\xC1\xF3\xB7\x15\xCA\x6E\xCA\x2B\xC5\xBF\xCA\xA5\xCA\xC1\xCA\xA0\xC8\x51\xCB\x31\xC9\x53\xCB\x33\xC9\xDF\xCA\x35\xC9\xAE\xCA\x85\xC9\x8F\xCB\xA6\xC9\x5B\xCB\x07\xCA\x93\xCB\xB5\xCA\x95\xCB\x94\xA4\x91\xC8\xA6\xC3\xE6\xAD\xB7\xC1\x7C\xBB\xB9\xC8\x37\xB0\x9D\x9F\xA0\xCB\x8A\xCA\xB9\xC9\x98\xC9\x1D\xCB\x84\xCB\x1F\xCB\xBE\xC9\x3C\xC4\x2F\xC0\x3E\xC4\xAA\xCB\xAC\xCA\x79\xCA\xAD\xCB\xA4\xC9\xAF\xCB\xC8\xC9\x91\xCB\xCA\xC9\xB3\xCB\x09\xCA\xEC\xC9\xB6\xCB\xB3\xC8\x12\xCA\x51\xBD\xFC\xBF\x53\x6F\x32\xB8\x9D\xCB\xBA\xC8\x9C\xBB\xBF\xCB\x2A\xC9\x9C\xC8\x36\xCB\xC4\xCB\x38\xCB\xC6\xCB\x21\xCB\xFD\xC9\x23\xCB\x81\xC9\xAB\xCB\x83\xC9\xCD\xCB\x03\xCA\x99\xCA\x05\xCA\xB1\xCB\x65\xCA\x67\xC0\xB0\x93\x8E\xC9\xB2\xC8\x75\xC8\x5E\xC8\x1C\xC2\xB9\x0D\xBD\xAA\xD9\xC8\xE5\x82\xBE\xC5\xC2\xAA\x03\x01\x68\xCB\x31\xC8\x6A\xCB\x45\xCA\xF0\xC7\x83\xC7\x69\xC8\x06\xC8\x6B\xC9\x94\xC6\x37\xCA\xEA\xC5\x39\xCA\xEC\xC5\xB1\xC5\x3C\xCA\x0F\xC8\x84\xCA\xE0\xC5\x0F\xC2\xD8\xBB\xE3\xC8\xB6\xC8\xA0\x7B\xC6\xB4\x15\xC2\x81\xB8\xD2\x96\xD2\xB4\x37\xBE\x06\x01\xAD\x7D\x8C\xBC\x2C\x8E\x27\x01\xA7\x7D\xCE\xAB\x0B\x8C\xB7\x73\x28\xB9\x76\x2F\x78\xBE\x8C\x8A\x15\x6C\x27\x01\x73\x7D\x99\x74\x01\x0B\x59\xB0\x69\xCB\xA3\x18\x89\xBE\x78\x67\x40\x6C\x28\xA4\x65\x0F\x4F\x84\x2F\xCC\xA8\xB7\x91\x54\xD3\x9A\xB7\x38\x43\x96\x17\x95\x35\x6C\x53\xBE\xB8\xCA\xD8\xCB\xFE\x8D\x08\x82\x36\xCC\xAA\xC3\x44\x6C\x42\xCC\x00\xCB\xB5\xA4\x46\xCC\x9F\x74\x37\xCC\x27\x01\xFA\x92\x3A\xCC\x43\xCC\xC8\xB7\x45\xCC\x54\x74\x57\xBE\x4F\xCC\x67\x17\x4A\xCC\x63\xCB\x4B\xC9\xDA\xC8\x47\x6C\x81\x74\x8C\x01\xE4\xA3\x65\x0F\x78\x7D\x5C\xBE\x30\xCC\xBF\xB4\x86\xBC\xB7\xA5\x6D\x0E\x7A\xC8\x65\x0F\xAB\x9D\x64\xCC\x3B\xCC\xD0\x75\xE7", +"\x7D\x69\xCC\x28\xCA\x97\x6C\xED\x72\x5A\xCC\x22\xC5\x5C\xCC\x70\xCC\x6A\x10\x34\xBE\x58\xCC\x06\x01\x8B\x7D\x56\x8D\x65\xCC\x24\xBD\xE4\xA5\x79\xCC\x11\xC7\x23\xA7\xDB\xC5\x25\xBE\x88\xC6\x11\x66\x3E\x8E\x16\xB0\x66\xAF\x73\x8A\xFE\xC6\xC2\xCB\xE3\xCB\xD8\xCA\x8F\xCA\x73\xCA\x91\xCA\x5B\xCA\xAA\xCA\x5D\xCA\xEB\xCB\x01\xCA\xED\xCB\x61\xCA\xCF\xCB\x63\xCA\xF1\xCB\x43\xCB\xD3\xCB\x2E\xCB\xCB\xC2\x9C\xC6\x79\xC3\x9E\xC6\xD0\xC9\x03\xC9\x20\xC9\x9E\x66\x60\x70\xF8\xC5\x21\xA1\xEC\xCA\xE8\xBE\x92\xC9\x6C\xCA\x06\x01\x89\xCC\xF7\xAF\x4D\xAF\xE7\x84\x8D\xCC\x8C\xCA\xC3\xCB\x90\xCC\x85\xCB\x92\xCC\x87\xCB\x94\xCC\x89\xCB\xAB\xCA\x8B\xCB\x96\xCA\x8D\xCB\x98\xCA\x9B\xCC\x9A\xCA\x9D\xCC\xE6\xCA\xB4\xCA\xD4\xCB\x1A\xC9\xA2\xCC\xF1\xC5\xE9\xC2\xE2\xBE\xEB\xC2\x46\xB9\x1C\xC6\xF9\xC5\x22\xA1\xC1\xB8\x5C\xB1\x0A\x76\x4D\x8B\xB1\xCC\x91\xAC\x42\xAE\xFB\xAE\xDA\xC2\x38\xC8\x0B\xCB\x59\xC7\x87\xC4\xE4\xC9\x52\xC9\xE6\xC9\x45\xB8\x55\xC9\xE9\xC9\xD3\xC7\x58\xC9\xD5\xCB\xFC\xAC\x42\xC9\xD7\xB8\x57\x8F\x23\xBF\x83\xCC\x25\xBF\x42\xB5\x79\xA9\xD7\xCC\xB9\xAC\x15\xCC\xF9\xAF\xC6\xC6\x03\xC6\x06\xCC\xC3\xC8\xD9\xCA\x7D\xC9\xDB\xCA\x22\xCB\xA9\xCB\x24\xCB\x55\xCB\x26\xCB\x57\xCB\xE2\xCA\x59\xCB\x90\xCB\xC5\xCC\x2C\xCB\x9F\xCC\x45\xCB\xB5\xCB\xE9\xCC\xF8\xB8\xA1\x7F\x88\x9C\xFE\xBD\x61\xC9\xEC\xC7\x09\x01\xF2\xCC\xE2\xAC\x10\xC2\x18\xB0\xF6\xCC\x27\xC6\x9A\xC4\x0C\xCB\x3F\xC7\x51\xC9\x3D\xC4\x53\xC9\xE3\xCC\xE8\xC9\x97\xB5\xEA\xC9\xDF\xB3\x46\xCB\x21\xBB\xC3\xB1\x2E\x89\x5C\xA2\x13\xCD\x07\xAD\x15\xCD\xB4\xCC\x6B\xCB\x57\xC7\xDD\xCC\x33\xCA\x0D\xCB\x19\xCA\x0F\xCB\x1B\xCA\x11\xCB\x1D\xCA\x13\xCB\x4F\xCA\xE7\xC7\x51\xCA\x9F\x8F\x90\xC9\xED\xB1\xAE\xCC\xBA\xC4\x12\xCD\x3C\xB0\x3C\xAD\xDB\xCC\x4F\xC8\x2F\xCD\x51\xC8\x6A\xC9\xCF\xBF\xE9\xC3\x05\xC7\xEB\xC3\x95\x96\x04\xCD\xB0\xCB\x42\xCB\xC6\xCC\xF3\xCB\x6D\x96\x1B\xC9\x03\xB2\xC4\xA1\x02\xC9\xB0\xC9\xC7\xA1\xB2\xC9\x6C\xAD\x9F\xBF\x80\xCB\x2B\x6B\x29\xCD\x82\xC5\x2B\xCD\xB0\x83\xB5\xCC\xA2\xCB\xD7\xCA\xA4\xCB\xFA\xCC\xFB\xC9\xFC\xCC\xE8\xCB\xFE\xCC\xEA\xCB\xCB\xCB\x3D\xCB\x99\xCC\x7B\xCA\x4D\xCD\xD0\xCB\x06\xCD\x92\xCB\xC7\xCC\xA0\xCC\xE8\xCC\xCD\xCC\xD1\xC9\x69\xB9\xD3\xC9\x26\xCA\xD5\xC9\x11\xCA\x54\xCC\x9B\xBB\x90\x10\x71\xB9\xF2\xC4\x5E\xCD\x3A\xAD\x8A\xAF\x42\xCD\xEF\xC7\x2A\xC7\x83\xCB\xB8\xCC\xC5\xCB\x86\xCB\xC7\xCB\xC0\xC9\x30\xC0\xC2\xC9\xBF\xCC\xAD\xCA\xC1\xCC\xAF\xCA\x70\xCD\x9C\xCC\x4F\xCD\x07\xCD\x74\xCD\x09\xCD\x76\xCD\x1C\xB5\x1A\xA5\x4D\x69\xE1\xBF\xD4\xB9\x20\xC0\x4E\xB2\x87\xC5\x83\xCD\x77\xC8\xD9\xCC\xA1\xAE\x43\xCD\x67\xC8\x45\xCD\x07\xCC\x52\xC8\x35\xCA\x6B\xC6\x0B\xCC\x6D\xC6\x0D\xCC\x6F\xC6\x0F\xCC\x71\xC6\x3D\xCA\xA0\x78\xD5\xC3\xEF\xC6\xD7\xC3\x98\xCB\xD9\xC3\xBE\xC6\x7E\xCB\x34\xA2\xAC\xC3\x27\xBB\x27\x01\xA4\xCD\x98\xAD\xF4\xCC\x16\xCD\x66\xC9\xF7\xCC\x28\xC6\x30\xCD\x1B\xCD\xE0\xCC\x1D\xCD\xE2\xCC\x6A\xB8\x34\xC0\x3F\xCB\xEF\xCB\x2A\xCB\x72\xCD\xD2\xCB\x99\xCD\x50\xB1\x2A\xAF\xF5\xCB\x9F\xC6\xF6\xC3\x24\xCA\x34\x98\x92\xC8\xF2\xC6\x56\xA2\x1E\xC0\x15\xB6\x98\xA8\x36\xB6\x8B\x9D\xC2\xCD\xB9\xCB\xC4\xCD\x2C\xCD\x04\xCC\x88\xCD\xF4\xCA\xAD\xC4\xF6\xCA\xAF\xC6\xB6\xC3\x56\xC8\x2F\xC6\x58\xC8\x71\xC9\x5A\xC8\x72\xC6\x2D\x85\x24\xC7\x28\xCD\x41\xCD\x43\xAE\x87\xCD\x4E\xC9\xEB\xCD\x18\xCA\x49\xCA\x1A\xCA\xF8\xCA\xE3\xC7\xFA\xCA\xE5\xC7\x38\xCD\x15\xCB\x3A\xCD\xC1\x8B\x53\xCA\x05\xBA\xE5\xCD\xB6\xC1\xE7\xCD\x61\xCD\x2D\xCD\xDD\xC7\xC2\xC8\xF2\xC7\xED\xCD\xF4\xC7\xEF\xCD\xF6\xC7\x03\xCE\xF8\xC7\xFC\xCA\xFA\xC7\x07\xCE\x6E\x93\x6B\xCA\x3F\xCD\xB0\xCC\xF9\xCD\xDA\xCC\xFB\xCD\x6C\xCB\x90\xC6\xDE\xCC\x51\xC5\x09\xCC\x87\xC7\xEA\xC3\x75\xC7\x07\xC7\x65\xC0\x38\x94\x51\xCD\x00\x9F\x61\xCB\x88\xB3\x76\xCC\x64\xC9\xAF\x82\x87\xC0\xF8\x0B\x89\xC0\xC1\xCD\x20\xCE\xA7\xCD\x22\xCE\x2E\xCD\xC4\xC5\x6E\xCB\xA6\xCA\xB9\xC0\x30\xC9\x47\xC6\xE9\xCB\xFF\xC9\x97\xCC\x5F\xCA\x6E\xCD\xD0\xCD\xC3\xCC\xF0\xCB\x97\xCD\x73\xCD\x2E\xCE\x1A\x94\xA1\xCA\xAF\xCC\x03\x01\x0B\xCE\x25\xAE\xDE\xBB\xAD\x86\x62\xCD\x9B\xC7\x89\xCD\x65\xCD\x91\xCC\xDA\xCA\x93\xCC\x75\xCA\x95\xCC\x77\xCA\x6C\xCD\xE0\xCA\x02\xCD\x28\xCB\xD1\xCD\x41\xCB\x22\xCD\x16\xB7\x24\xCD\x7C\xC5\x48\xCB\xD8\xC9\x94\xC7\x69\xBA\xBC\xCA\x79\x69\x52", +"\xCE\xE2\xAE\xE2\xC8\xF5\xCC\xC6\xCD\x18\xCD\xE4\xC5\x1A\xCD\x5A\xC7\x32\xCD\xCC\xC6\x72\xCB\xA1\xC7\x74\xCB\x32\xC7\x76\xCB\x34\xC7\x78\xCB\x86\x81\xA8\xC7\xA8\xC4\x0A\xCE\x39\xCE\xC4\xAE\x3B\xCE\x10\xCE\xAA\xCD\xF9\xCC\x5A\xCE\xFB\xCC\x5C\xCE\xDC\xCA\x5E\xCE\xC6\xCA\x60\xCE\xAC\xCB\x93\xCD\xAE\xCB\x95\xCD\xC4\xCC\x4B\xCE\xD4\xCD\x4D\xCE\xE6\x9F\xC3\xC7\x77\xA9\xF6\xAE\x8C\xA7\x70\xCE\xF6\xB0\x0D\xCE\x55\xCE\x0F\xCE\xDC\xCC\x3D\xCE\x77\xCE\xDF\xCC\x0E\xCB\x7A\xCE\x34\xCD\x73\xCB\x36\xCD\x75\xCB\x05\xCE\x77\xCB\x1B\xCE\x91\xC4\x6E\xCC\xEC\x8C\x02\xCB\xE4\xCD\x86\xCE\x73\xCE\x09\xCB\x67\xC9\xB1\xC3\xC9\xCD\x78\xCE\xFF\xCD\x33\xCD\x01\xCE\x1C\xCA\x17\xCE\x17\xC9\x19\xCE\x19\xC9\xB1\xCE\xDC\xC4\xEA\xC7\x13\xC1\x11\xCD\x1F\xCE\x8A\xCC\xD1\xAF\x88\xCE\xA5\xCE\x2C\xC9\xF9\xC9\x6F\xCB\x1C\xC1\x8E\xAE\x06\xB5\x3C\xCB\x61\xCE\x47\xCE\x58\xCB\x08\xC7\x2D\xCE\x0A\xC7\x68\xC0\xEB\xCA\x8B\xB9\x31\xCB\xAE\xA3\xF1\xC4\xBB\xC2\x51\xCE\xB7\xCE\xC5\xCD\xB9\xCE\xC7\xCD\x19\xCD\x25\xCE\xE6\xC5\xAD\xCD\xE5\xC6\xAF\xCD\x96\xC6\x6F\xC9\x98\xC6\xB3\xCD\x9A\xC6\xB5\xCD\x60\x8F\x53\xCC\x25\x88\x3C\x0F\x8D\xB7\xE3\xCE\x3D\x8E\xE5\xCE\xE8\xCD\xF2\xCA\x82\xC7\xC8\xCD\x46\xCD\x34\xCA\x27\xCE\x08\xC8\x29\xCE\x89\xC7\x2B\xCE\x77\xC7\xDB\xCE\x79\xC7\x0B\xC7\x12\xCC\x5C\xCC\x65\xCB\xF4\xC9\x40\xCD\xCC\xCE\x3D\xB0\x18\xC8\x31\xCA\x6F\xC7\xAB\xCD\x47\xCD\x3B\xAF\xE7\xCB\xA9\xCA\xBD\xCC\x96\xCC\x92\xCE\xEC\xCB\x94\xCE\xCE\xCB\x96\xCE\x4A\xCE\x66\xCE\x1E\xBB\x0A\xCD\x38\x95\x42\xC5\xDD\xCD\xA8\x04\x51\x0C\x06\xA4\x28\xC3\x32\xC8\x4A\xC8\xBF\xCD\x4D\xB9\x38\xCE\x11\xCF\x86\xCD\x13\xCF\x0A\xCB\xA6\xCE\xEA\xCE\x69\xC6\xEC\xCE\x54\xC8\xEE\xCE\xE7\xC6\xF0\xCE\xF2\xCD\xF2\xCE\x72\xC8\x11\xCC\xB4\xC5\x5D\xC8\xD9\xC8\x92\xC1\x5D\xBB\x26\xA4\x62\xC8\x98\xC1\xA3\xCD\xFC\xCE\x0E\xCE\xE9\xCD\xFC\xCD\xF8\xCC\x12\xCE\x18\xC5\x13\xC9\x15\xCE\x15\xC9\xC2\xCE\x1E\xCA\xC4\xCE\x20\xCA\x44\xC8\xBB\x8C\xD7\xCB\x7E\xCD\x67\xC7\xA5\xCD\xE5\x95\x79\xC8\x72\xCC\xFC\x81\x7C\xC8\xC9\x9F\x5C\x0A\xA0\xCE\x89\xAF\xA9\xAF\x33\xCF\x0E\xC9\xB5\xC0\xFD\xCD\x2C\xC7\xCB\xCD\xC8\xCB\x1E\xCD\xCE\xCD\xE4\xCC\x21\xCD\xE6\xCC\xEB\xC9\x81\xCE\x5F\xB4\x5B\xCF\x0F\xCA\x94\xC8\x9E\xC5\xAA\xC3\xB5\x82\x4A\xCF\x32\xCF\xFA\xCD\x34\xCF\xBA\xCE\x3D\xC7\xBC\xCE\xA8\xCE\x79\xCE\x9F\xC7\x7B\xCE\x86\xC8\x7D\xCE\xD2\xC7\x7F\xCE\xD4\xC7\x76\xCF\x31\xBE\x78\xCF\x84\xB4\x93\x6E\xFB\xCB\xB9\xCA\xDC\xC3\xBB\xC8\x03\x01\xBD\xC8\x16\x8A\xCF\x67\x66\xCF\xE4\x95\x68\xCF\x80\xCF\x6A\xCF\xE4\xC1\x6C\xCF\x9D\xC7\xA9\xCE\x87\xCF\xAB\xCE\x7C\xCE\xAD\xCE\x7E\xCE\xAF\xCE\x80\xCE\xC6\xCE\x1E\x77\x6A\xCE\x5B\xB0\xD4\xC5\x1B\xCC\x95\xA8\x67\xC1\x18\xCC\xD8\xC5\x95\xA8\xDD\xC8\x15\x8E\xD1\xA0\xD4\x00\xD4\xB4\x42\xC2\x02\xA4\x67\xCF\xF8\xAF\x9B\x7F\x3A\x8E\xD1\xA0\x98\xCF\x99\x74\x29\x9B\xB6\xCF\x6D\xAB\xD5\xA2\x46\x5F\x1E\x02\xBB\xA4\x72\xCE\xBF\xCF\xE4\xC8\x87\xC6\x49\xC2\x77\x6A\x1B\xBE\x3B\xCD\xCA\xCC\x00\xC9\xCC\xCC\xF3\xC5\x40\x72\xA7\xCC\x98\x05\x42\xA7\xB3\xC9\x71\x0F\xB5\xAC\x79\xC2\x50\x2A\x4D\x91\xE6\xC8\x7D\x89\x01\xC9\xBA\xB5\x04\xBF\xCF\xCC\xED\xC2\x23\xC9\x42\xBF\xD3\xCC\x20\xC6\x5D\xB1\x5F\xAC\xD1\xCF\x42\xC1\x25\xCD\x07\xC3\x37\x08\x09\xC3\x47\xA1\xEE\xCC\x39\xC6\x26\xBF\x6E\xC2\x27\x38\x7A\x90\x20\xBF\x5B\xC9\xA5\xA7\x5D\xC9\x46\xBF\xBC\xCB\x64\xB5\x5E\xC6\x8D\x9C\xE3\xBB\xD0\xCF\xFA\xCF\x12\xB9\xCC\xA4\xC5\xB1\x24\x72\x5C\x0A\xEE\xCF\xFF\xCA\xF0\xCF\x3C\xCD\x2B\xB9\xCE\xCF\x8F\xC2\x09\x01\x0C\xD0\xDC\x89\x18\xC6\x1E\xC9\xA6\xCC\x17\xB5\x9D\xBF\x70\xB3\x09\xA8\x2F\xCF\x84\xA0\x0B\xD0\x06\xD0\x63\xB2\x0E\xB6\x72\x0B\x8D\xAD\xF1\xC6\x8F\xAD\x93\xA8\xE0\xCD\x64\xC1\xD9\xC9\x1D\xD0\x75\xBD\x07\x6D\x14\xD0\x93\xA9\x30\xCB\x88\xBD\x35\x9D\xC0\xC3\x2C\xCF\x13\xCA\xD8\xC6\x2B\xD0\x40\xBD\x1F\xD0\x39\x90\x16\xC0\x0C\xCA\xB9\xC6\x31\x0E\xB9\xCD\x25\xD0\x58\x9D\x1D\xC0\xF4\xC6\xA0\xCD\x97\xC8\xF8\xC6\x86\x6E\x11\x66\x2E\xD0\xAC\xCF\x00\xAE\xDA\xCD\xCE\xB9\x25\xCA\xBA\xCD\x27\xCA\x34\xD0\x93\xC7\x96\xB2\xD7\xB9\x5C\xBE\x39\xD0\x63\xC4\x30\xCE\x81\xB5\x3F\xCA\xB3\xA8\xB4\xBE\xF6\x46\x3A\xD0\xC8\xA8\x3C\x0F\x0F\x7C\x38\xC7\x0A\xD0\x5D\xD0\x57\xD0\xC3\xC7\x1D\xCE\x43\xAB\x64\xD0\xD0\xC5\xD8\xCD\xD7\x6D\xAD\xCF\x05\x9F\x35\xCE\x34", +"\x91\x9B\xC2\x2D\xD0\x4F\x6D\x4F\xCE\x50\x92\x05\xD0\x5E\xD0\x6A\xD0\x31\xCC\x02\xCC\x52\xD0\xFF\x00\xBB\xCA\x8F\xBC\x49\xD0\x40\x9E\xD2\xCA\x83\xCE\xD4\xCA\x5C\xD0\x13\xD0\x20\xD0\xEA\x8F\x9D\xCE\xC5\xC7\xED\xCF\x86\xD0\xBA\xBA\xD1\xC5\x5C\xCC\x5E\x86\xBE\xBA\x04\xD0\x72\xD0\x77\xD0\x87\xD0\x18\xCB\xC9\xCE\xAA\x74\x56\xD0\x6A\xD0\x58\xD0\x08\xBF\xD8\x6F\x15\x7A\xE2\xCE\x64\xC2\x98\xD0\x21\xC5\xDE\xCE\x22\xBB\xE0\xC5\xD5\x81\x15\xC8\xF8\xCF\xA5\x40\x8B\xD0\xD1\xBB\x32\xCE\x95\xC9\xC2\xC3\x25\xC5\xBF\xA6\x7D\x69\x7F\xD0\x05\xBB\xEE\xBA\x27\xCF\xB8\xCB\x45\x9F\x7C\xCB\x47\x9F\xBD\xCD\x32\xAA\xDA\xC9\x8F\x69\x92\xD0\x65\xD0\x53\x91\x90\xC1\x44\xCF\x51\x82\x6D\x9F\x61\xC8\xB9\xD0\x72\x9F\x19\xB8\x58\x90\xA8\xD0\x93\xD0\x5B\xC5\xF7\xCB\xC1\xD0\x5E\xCF\x98\x09\x84\xC5\xC5\xD0\x7F\xBB\x37\xD0\x59\xC2\xBD\xD0\x99\xD0\x13\xBE\x31\x98\x1A\x8D\xD4\xC9\x9C\x87\x99\xBB\x61\xCF\x66\x69\xDE\xC1\xAF\xD0\x79\x69\xB1\xD0\xD6\xC7\xA1\xB4\x74\x84\xD9\xD0\xD8\xC3\x92\xCF\x32\xBD\xFC\xCB\x21\x8D\xFE\xCB\x5C\x6E\xDF\xCF\xCA\xD0\xAA\xD0\x8D\xD0\x33\xCE\x5D\xCC\xAD\x70\xDC\xC8\xB0\xCF\xBE\xA4\x12\xC2\xDC\x9B\xE0\xC8\x62\xB0\x54\xCE\x39\x98\x15\xBD\xB9\x63\x3C\x06\xD5\x00\xCC\xBE\xE5\xAB\x84\xA5\x27\x01\xB3\xBE\x97\xD0\x76\x6F\x4F\xAF\x92\x25\x5C\x0A\x25\x00\xBB\xBE\x82\x6F\x35\x6F\xA0\xB0\xCE\xB0\xC0\xBE\x19\xC2\x01\x01\xF0\x95\x30\xCA\x92\x25\x29\x9B\xC6\xBE\x60\xCC\x01\x96\x44\x0F\xE3\x9B\xF8\xAB\x03\x01\xFE\x95\x28\xA6\x4E\x47\x44\x01\xE9\xAB\xB0\xBE\x05\xD1\xD1\x99\xFA\x95\x57\xA6\x93\x9B\xAD\x32\x0B\xD1\x0D\xD1\x20\x6F\x4B\x6F\xDB\x6F\xBF\xBE\x27\xD1\xDC\xA6\xE5\x5A\xAB\x45\x6C\x00\x18\xD1\x0E\xD1\x63\x6F\x0A\x96\x44\x0F\x64\x08\x49\x73\x02\xD1\x21\xCC\x9D\x10\xB1\xBE\x06\xD1\x55\xD0\x27\x01\x04\x96\xB7\xBE\xA0\x6F\x43\x0A\x2C\xD1\x98\x6F\x29\x03\x01\x6F\xBB\xA0\x30\xD1\x11\xD1\xD1\x99\x45\xD1\xC3\xBE\xB8\xBE\x4A\x01\x37\xD1\x2E\xD1\x1E\x6F\x3A\xD1\x9D\x10\x64\x08\x54\x58\x9C\xD0\x49\xBF\x1C\x9A\x1E\xD1\x02\x01\x10\x96\x01\xB1\xDE\xA5\x3B\x02\x24\xD1\x41\x65\x41\xD1\xD1\x99\x3A\x6F\x4B\x65\x93\xB0\x3B\x02\x49\xD1\x3A\xB0\x37\x6F\x2F\xD1\xD3\x6F\x31\xD1\x13\xD1\x00\x00\x69\xD1\x4A\x65\x6B\xD1\x1E\x02\x55\xD1\x6F\xD1\x57\xD1\x89\xB0\xBD\x6E\x09\x01\xCF\x17\x93\x68\xC8\x7D\xD5\x20\xEC\xB0\x41\x66\x55\x73\xF0\xB0\xA0\xA6\x30\x96\x00\x65\xFC\x1C\x2A\xCC\xE6\xCD\xD1\x8E\x9E\x3B\xD6\x66\xD9\x00\x70\x73\x4F\x00\x84\xD1\x2F\x70\x92\xD1\xFD\xA6\x9C\x3B\xD4\x7C\xF8\xB0\xD7\xA5\x80\x0A\x8B\xD1\x43\x0F\x5C\x4B\x76\x0B\xD6\x66\xD6\x20\xAB\x7B\x00\xB1\x7E\x73\x02\x01\xA3\xD1\xEC\xA5\x91\xA6\xDA\x5C\x9C\xD1\x53\xCE\xF9\xA6\x82\x04\x70\x0F\x90\xD1\xEE\x7D\x58\x61\x6F\x72\x2F\x09\xB1\xD1\x87\xD1\x8B\x7C\xA9\xD1\x92\x68\x9E\xD1\xF1\x05\xA0\xD1\x70\x73\xFB\xB0\xA4\xD1\x01\x01\xBD\xD1\xA7\xD1\xFE\xA6\xAA\x14\xB7\xD1\x91\x68\x1A\xA6\xF2\x64\xFF\x95\x7D\xD1\x38\x2B\x15\x96\x31\xD0\x90\x01\x6B\x5F\xC7\xBE\x45\x9D\x06\x9A\x46\x10\x70\x0F\xE4\x00\xF8\x7D\x5E\x0F\xAA\xD1\xD9\xBC\x75\x69\xD9\x3E\x12\x64\x2A\x9A\xF8\x1C\x2F\x09\xE5\x97\xC2\x99\xD7\xD1\xF4\x6E\xE1\x9A\x37\x73\x27\x01\xE6\x00\x70\x73\xDA\x00\xE5\x6E\x1F\x94\xB3\x06\xA7\x06\xF5\x99\xD0\xD1\xDD\xD1\xD5\x20\xC8\xAE\x6C\x24\x9D\x66\x8A\x0D\xCF\xD1\x6A\x10\xB7\x9B\xE4\xD1\x09\x01\xDF\x00\x70\x73\xD7\x00\x69\xBE\x05\x80\xEB\xD1\xE3\x99\x77\x74\xEC\x9E\x6C\x24\x2F\x09\xFC\xD1\xC2\x99\xF3\xD1\xE2\x0D\xDB\xD1\x41\xD0\x4B\xD1\x4D\x55\x11\xA0\xBF\x49\xED\xD1\xC0\xBF\x6A\x6F\x68\x5A\xF8\xD1\x06\x01\xDD\x00\x70\x73\xD5\x00\xE9\xD1\x3F\xAE\xFF\xD1\x03\x64\x44\x9A\xEF\xD1\x09\x01\x17\xD2\x06\xD2\x32\xBE\xFD\x3E\xF4\x44\xCF\xCF\xE1\x91\x66\x00\xD6\x66\xDB\x00\x70\x73\xD4\x00\x18\xD2\x4B\xBF\x1A\xD2\x0F\xD2\x83\xA2\x03\xD2\x27\x01\x2A\xD2\x20\xD2\x69\x9C\x7E\x1D\xE2\x25\x6A\xC1\xFC\x48\xD6\x66\xE3\x00\x70\x73\x8A\x00\x2B\xD2\x1A\xCB\x2D\xD2\x09\xD2\xEE\xD1\xB4\x06\x2F\x09\x3C\xD2\x33\xD2\xB2\x9C\x28\x0D\x36\xD2\xF8\xD0\xC6\x5A\x38\xD2\x70\x0F\xE7\x00\x70\x73\x77\x00\x3D\xD2\x2B\xCA\xD9\xD1\xCE\xD1\x1A\xD1\x1C\xD2\x42\xD2\x27\x01\x4F\xD2\x45\xD2\xCC\xD1\x21\x0E\x32\x60\xF5\xD1\x50\x34\xF7\xD1\xC0\x73\x09\x01\xE0\x00\x70\x73\x67\x00\x50\xD2\x6E\xCE\xE1\x99\x53\xD2\x4D\xD1\x41\xD2\x86\x01\x2F\x09\x64\xD2\x59\xD2\xE3\xB6\x63", +"\x55\xDE\xCD\xF4\x8E\x12\x03\x70\x0F\xE6\xD1\xEE\x7D\xCC\x32\xD7\xD1\x21\x0F\xDA\xD1\xE4\x99\x55\xD2\x6B\xD2\x27\x01\xCC\x32\xAE\x96\xF8\x1C\x9D\x66\x2A\x0E\x7D\x4E\x01\xD2\x5E\xD2\x22\x9A\xC2\x08\x70\x0F\xA5\x1D\xAB\x7B\x1C\x00\x65\xD2\xB3\xAD\x3F\xD2\x7B\xD2\x6A\xD2\x6B\x00\x2F\x09\x8C\xD2\x6E\xD2\x5B\xC0\x70\x0A\x16\x4D\x24\xD2\x7D\x92\x26\xD2\x70\x0F\xC2\xCF\x70\x6B\x15\x00\xFD\xD1\xEA\xD1\xCD\xD1\xB4\x06\x1B\xD2\x91\xD2\x2F\x09\x9F\xD2\x95\xD2\xAF\x9D\x08\xD2\x90\xD2\x12\xB8\x85\xCD\x93\xAC\x5E\x9C\x08\xC3\xCF\x0B\x59\x44\xF6\x3A\xE1\xC8\x60\xCD\x89\x0A\x70\x0F\xE9\x00\x70\x73\x0B\x48\xFA\x8D\x2C\xD2\xA2\xD2\xEC\xD1\x40\xD2\x02\xD2\x1D\xD2\x7B\x43\xB3\x9B\xB4\x06\x07\xD2\x47\xD2\x2E\xD2\xA6\x9A\x8B\x55\xA8\x23\xD6\x66\xCA\x54\x71\xD0\x00\x00\x90\x9A\xA9\xC2\x5A\xD2\x4E\x8B\x68\xD2\x2F\x7D\x4C\x5A\x2F\x09\xCF\xD2\x9C\x9A\xC5\xD2\x35\xD2\xC7\xD2\xBA\xA6\x86\x35\xA4\xD2\xF9\xCB\x50\x08\xC8\x5F\x75\x34\x41\x6F\xDD\xD2\x10\x08\x70\x0F\xE5\x00\x70\x73\x39\x9A\x06\x8F\x66\xD2\x41\x8E\xD3\xD2\x05\x9A\xC1\xD2\x38\x9A\xC3\xD2\x86\x01\x9D\x66\x3A\x0E\x70\x4E\xF0\x4C\xBF\xD2\x86\xD2\x2A\xD1\x39\x0A\xB7\xD2\x70\x73\x61\xD1\x11\xA7\x8C\xB9\x7A\xD2\x85\xD2\x9D\xAD\x30\xD2\x09\x01\xFD\xD2\x8F\x9B\xF2\xD2\xA9\xBE\x31\x0F\xAB\xD2\x7A\x63\xC9\xD2\xB2\x26\xD6\x66\xE8\x00\x70\x73\x20\xD1\xFE\xD2\xBE\xC3\x00\xD3\x5D\xD2\x02\xD3\xEF\xD2\x02\x01\x11\xD3\x06\xD3\xDF\x72\x34\xD2\x49\x2A\x48\xD2\xE2\xB0\xF9\xD2\x97\x0B\xD6\x66\xA9\x41\xAB\x7B\x37\x2A\x78\xD2\xED\x04\x14\xD3\x54\xD2\xA5\xD2\x7E\x42\xD8\xD2\x08\xD3\x00\x00\x1E\xD3\x50\xB9\xC1\x3E\xD6\x66\xE2\x00\x70\x73\x5E\x7C\x26\xD3\x2F\x12\x28\xD3\x69\xD2\xC0\xD2\x56\xD2\xBB\x6F\xA8\xD2\xD7\xA0\x0D\x47\x2F\xD3\x51\xBF\x29\x45\xD6\x66\x9D\xD2\x9B\x74\x9E\x11\xDE\xBD\xAC\xAB\x51\x01\xED\xD2\xDC\xD1\x3B\xD3\xF2\xBA\x3D\xD3\xE6\x9E\x0C\x6F\x40\xD3\x9A\x7B\xA2\xCE\xFD\xD0\x4F\x08\xEB\xCC\x9D\x0B\x33\x5F\x46\xC5\x88\x8E\xB5\xD2\x31\x03\x70\x0F\xAD\x6F\xA7\x67\xC6\x5C\x36\xD3\xF5\x5B\x38\xD3\xD4\xD2\x5E\x97\x7D\xD2\xF5\x40\xF1\xD2\x1B\xD3\x46\xD2\xDA\xD2\xF7\xD2\xCD\x59\x28\x96\x43\x0A\x3E\xD1\x99\x90\x64\x08\xEB\x00\x70\xD3\x1A\x8E\xD1\xA0\xEB\x99\x91\xD0\x43\x10\xBB\x74\xF8\x33\xE2\xD1\x66\x9B\x29\xD3\xE1\xAB\xE1\x3D\x0A\xD3\x64\x34\x5F\xD2\x03\xD1\x9D\x10\x3C\x06\x75\xD2\xA3\xBE\x85\xCC\x4D\x8B\xFB\x99\x29\xD1\xBB\x97\x94\x9B\x81\xCF\xE8\xCE\x76\xCE\x37\xCF\xFA\xC9\x59\xCA\x8E\xCE\xFD\xCC\x90\xCE\xDE\xCA\x1D\xCF\x98\xCC\x1F\xCF\xEE\xCB\x49\xCE\xD2\xCD\x98\xCE\xB2\xAA\x23\xCD\xA1\xCC\xE1\xCF\x42\xB9\xE3\xCF\x03\xBF\xCE\xCC\x5F\xA7\xF6\xC5\xDA\xCF\x5A\xCD\xB4\xAC\x11\xD0\x34\xB2\x77\x6A\x8B\xD3\x66\xA6\x87\xD2\x67\x9B\xCE\xCE\x44\xCD\x36\xCF\x84\xCF\x26\xCE\x48\xCD\x73\xC7\x05\xCF\x0A\xC8\x07\xCF\x8B\xC7\x09\xCF\x8D\xC7\xB9\x7E\x16\xD0\x0B\xCA\x68\xAD\x56\xB1\xBE\xB8\xEE\xC2\x8F\xC9\xEA\xCF\x26\xC9\xEC\xCF\xDD\xC5\xB0\xD3\x77\xA6\xB2\xD3\xB8\x9B\xB4\xD3\xA9\xCD\xB6\xD3\x01\xCF\x31\xCD\xBE\xCE\xAA\xCE\xC0\xCE\x35\xCD\x55\xCF\x37\xCD\x57\xCF\x50\xCA\x59\xCF\xD5\xB8\xEA\xCC\xB0\xD2\xEC\xCC\x37\xC6\x83\xCC\xEE\x6F\x09\x01\x87\xD3\x71\xBC\xA6\x91\x00\x3E\xDB\xD2\x8B\x45\xF6\xCF\xF0\xCC\xCC\xD3\x33\xD1\xC6\x5A\xB3\xD3\x8F\xD3\x75\xCE\x67\xC6\xA7\xCE\xB8\xD3\x18\xCF\x3A\xCB\x9F\xAC\xD6\xCE\x93\xCE\xCF\xCD\xD9\xCE\x2C\xCE\x9E\x94\x9A\xCE\x42\xA1\xBB\x7E\x58\xC6\x0D\xCD\xFA\xB8\x89\x9C\xF0\xC9\xD4\x83\x10\xCD\x1A\xCB\x5C\x0A\xCD\xD3\x87\xA6\x7D\xD3\x84\x96\x56\xCE\xCA\xC7\xA1\xCF\x82\xC8\xA3\xCF\x84\xC8\x88\xCF\xE7\xC9\x8A\xCF\x56\xC9\x74\xCF\xA1\xD3\x9B\xCD\xFB\x83\x75\xC9\xC7\x92\x0C\xD4\xF0\xD3\x00\x56\x2B\xC9\xF8\xC9\x3E\xCE\xA5\xCB\x50\xCB\x68\xCD\x1A\xCF\x8F\xCD\x8A\xCB\xFB\xD3\x1E\xCF\xFD\xD3\x03\xCD\xDA\xCE\x00\xD4\xDC\xCE\xF4\xCB\x9A\xD0\x5E\xB5\x85\xC6\x3D\xCD\xA2\xB5\x50\xCE\x02\x01\x0D\xD4\x98\xA6\x0F\xD4\x45\x98\xA4\xCE\xB5\xD3\xD0\xCE\x26\xD4\x66\xCD\x94\xD3\xBB\xCC\x5D\xCE\x1B\xCF\x5F\xCE\x91\xCD\xCC\xCB\x9B\xD3\x9A\xCC\x21\xCF\x9E\xD3\x23\xCF\x4F\xC7\xA2\xD3\xEA\xBE\x2E\xB1\xAE\xC9\x7B\xC3\x18\xD0\xBC\xB5\x1A\xD0\x4F\xA3\x1C\xD0\x2B\x9F\x86\xAF\x3B\xD4\x22\xD4\xE8\x97\xF3\xD3\xF3\xCA\x4F\xCF\x11\xC9\x51\xCF\xF7\xCA\x53\xCF\x4C\xCA\x57\xC8\x4E\xCA\xDC\xD3\x39\xCD\xDE\xD3\x06\x91\x22\xD0\x7D", +"\x0B\x24\xD0\x28\xCF\x0A\xD2\xDF\xCD\x43\xD0\x96\xC8\x4D\xB2\x80\xCD\xC1\xC6\x7D\x69\x3C\xD4\x21\xD2\xE7\x97\x8E\xD3\x9F\xCF\x14\xC5\xE9\xCE\xB7\xD3\xEB\xCE\x03\xCF\x36\xCA\xBB\xD3\x6E\xC8\xB1\xCD\x70\xC8\x3F\xCF\x72\xC9\x41\xCF\xEE\xC4\xBE\xC3\x9F\xCD\x76\xD4\x61\xC5\xF3\xC9\x64\xC5\x03\x01\x7B\xD4\x68\xCC\x5F\xD2\x24\xD4\x1D\x86\x92\xD3\xD2\xCE\x46\xC6\xD4\xCE\x14\xBA\x06\xC7\x4C\xCD\x31\xD4\x98\x9E\xD5\xCD\x50\xB3\x69\xCA\x56\xD4\xB8\xC6\x0E\xCA\xDA\xD0\x10\xCA\x16\xCC\x44\xCC\x7F\xCD\xF7\xC6\x87\xC5\x95\xD4\x81\xCC\xCF\xD3\x10\xD4\x40\xD4\xD2\xD3\x42\xD4\xF6\xD3\x83\xD4\xB9\xD3\x6C\xC8\x86\xD4\x6E\xC9\x88\xD4\x70\xC9\x8A\xD4\xF4\xCD\xF4\xCE\x22\xCA\xA2\xB4\x2F\xB6\x4F\xD0\x7C\xCD\xAB\xD4\x5C\xCF\x95\xCF\xFD\xC3\xE3\xCD\x5C\xA2\xB0\xD4\xA8\xA6\x3E\xD4\x98\xD4\xAA\x8B\x9A\xD4\x3F\xCE\x70\xCB\xE1\xCC\x17\xD4\x1F\xCD\x19\xD4\xE5\xCC\x8C\xCF\xE7\xCC\x8E\xCF\xCE\x8F\xF7\xCD\x05\xBA\xCD\xD4\xC2\xA6\xCF\xD4\xE2\xCB\x4D\xCB\xE4\xCB\x4F\xCB\xA7\xCA\x29\xD4\xC4\xCA\x97\xD3\x54\xCB\x45\xCE\x56\xCB\xD8\xCE\x30\xD4\xFF\xD3\xA2\xD4\x01\xD4\xBC\x9F\x6B\xD0\xF9\xA0\x09\xCE\xCA\xCE\x94\xD4\x5F\xD4\x7E\xD4\x8B\xCA\x63\xCD\xB7\xCC\x59\xCE\xB9\xCC\x5B\xCE\x46\xD4\x8F\xCE\x48\xD4\x91\xCE\x4A\xD4\x6D\xCD\x4C\xD4\x6F\xCD\xA1\xD4\x63\xA1\xA3\xD4\x54\xBE\x2B\x99\x67\xD0\xA3\xD3\x07\x6D\xE0\xD4\xEE\xA6\xE2\xD4\xA8\xCD\xC1\xC8\x8A\xCE\x50\xCF\x3C\xC8\x52\xCF\x1A\xC5\xF0\xCD\xE8\xC6\x6A\xD4\x42\xC8\xFD\xCA\xAB\xCF\x80\xD0\xF6\xCE\xE5\xB3\xAB\xB6\x0A\xA9\x70\x8C\x21\xD4\x21\xD1\x60\xD4\x7F\xD4\xA7\xC5\x00\xCF\x16\xCF\x02\xCF\xB9\xD4\x6C\xC9\xBB\xD4\x38\xCA\xBD\xD3\x0C\xC8\xBF\xD3\x0E\xC8\xB9\x7E\x74\xD0\xA2\xCC\x27\xD5\x45\xA6\x8D\xD3\x14\x99\xE3\xD4\x58\xCE\x65\xA2\x9B\xD4\x41\xCE\x9D\xD4\x4C\xBB\x9F\xD4\xC2\xA2\x4E\xD4\x65\xCE\x1B\xD4\x67\xCE\x25\xCF\x7A\xAE\x22\xD5\xF6\xC6\x7C\xD0\x6D\xCE\x75\xC6\x06\x01\x11\xD5\x3B\x0F\xA0\x99\x11\xD4\x0F\xC9\x63\xD4\x48\xCA\x13\xCE\x4A\xCA\x67\xD4\xF9\xCA\x69\xD4\xFB\xCA\x1E\xD5\x1A\xCE\x6D\xD4\x18\x90\x82\xD0\x54\xB3\xCC\xD4\xF9\xD4\x3D\xD5\x14\xD5\x79\xC9\xD3\xD3\x2D\xD5\xD5\xD3\x5A\xD5\x00\xCE\x5C\xD5\x02\xCE\x5E\xD5\x04\xCE\x6B\xD4\x06\xCE\x62\xD5\x6E\x93\x88\xD0\x72\xB3\x8C\xA7\x53\xD5\x7C\xD3\x97\xD4\x3E\xD5\x13\xD4\xE3\xC9\x15\xD4\x71\xCB\xA5\xCF\x89\xCF\xA7\xCF\x8B\xCF\xA9\xCF\x8D\xCF\x20\xD5\xB2\xD0\x5B\xCC\xF2\xD0\x8F\xD0\x8D\xB3\xDF\xD4\x67\xD5\x0E\x9B\x69\xD5\xF7\xC9\x99\xD4\x82\xD4\x38\xCF\x84\xD4\xAE\xCD\x31\xD5\x0C\xCC\x33\xD5\x3A\xCA\x35\xD5\x10\xCC\x0B\xCF\xA6\xC4\x95\xD0\xDE\xC4\xF7\xD4\x5E\xD4\x28\xD5\xFA\xD4\xC1\xCB\xB6\xCC\x8F\xCC\xFE\xD4\x8B\xCD\xBA\xCC\x8D\xCD\x88\xCB\x2B\xD4\xBE\xCC\x2D\xD4\x9A\xD3\x2F\xD4\x63\xCE\x9D\xD3\x48\xD5\xDA\xD4\x75\xCF\x89\xD5\xA3\xA7\x1B\xD1\xFE\xC7\x4D\xD3\x79\xA9\x7B\xD5\x6B\xB0\x3C\xD5\x91\xD5\xD1\xD3\x15\xD5\x6B\xD5\x8B\xCE\xFF\xD4\x8D\xCE\x01\xD5\x96\xD3\x03\xD5\x98\xD3\x05\xD5\xD7\xCE\x07\xD5\x48\xCE\x47\xD5\xFB\xA7\x7C\xB4\xF2\xD4\x81\xA7\x10\xC8\x8B\xD5\xAC\xD0\xCC\x98\x14\xC8\x0F\xC5\xBE\xD5\x90\xD5\x3A\x9B\x92\xD5\x17\xCA\x6D\xCF\x81\xD5\xD5\xD4\x83\xD5\x18\xD4\x85\xD5\x1A\xD4\xB7\xD5\x1C\xD4\xDC\xD4\x73\x99\x4D\xD5\xA1\xCD\x0E\xAA\x5C\xCD\x3A\xD5\x8C\xD3\x7D\xD4\x68\xD5\xC3\xD5\x6A\xD5\xB6\xD4\xD2\xD4\x27\xD4\xE7\xD4\x95\xD3\x69\xCD\xEA\xD4\xCA\xCB\xCD\xD5\xFC\xD3\x72\xCF\xA0\xB7\x9F\xD3\xA5\xB3\x9A\xCD\xEA\xD5\xD6\xCB\x43\xCF\x94\xCF\x23\xA4\x96\x0E\x2A\xCF\x1E\xB4\xDD\xD0\x7F\xCB\xBB\xD0\x35\xC8\xF0\xD5\xB1\xD3\x20\xD3\xF2\xD3\x2A\xD5\xE1\xC9\x3F\xD5\x80\xA4\x44\xD4\xC2\xCA\xE8\xD4\x52\xCB\xFC\xD5\xFF\xCC\xEC\xD4\x01\xCD\xEE\xD4\xB4\xD5\xD1\xD5\x4C\xB3\xA0\xD3\x4A\xD5\x1D\xD4\x77\xBB\x7A\xCB\xBA\xCD\x5E\xC5\x9C\xCB\x08\xD4\x7D\xC1\x63\xC8\x0F\xD6\x37\xB8\xBF\xD5\x1F\xD3\xC1\xD5\xDE\xD5\xF4\xD5\x93\xD5\xD1\xD4\x95\xD5\x93\xD3\x1A\xD6\xFA\xD5\x2A\xD4\xC9\xCB\x1E\xD6\x99\xD3\x46\xCE\xCF\xD5\xFE\xD3\x08\xCF\x32\xD4\x0A\xCF\xDD\xCE\xF4\xD4\x19\xB4\xB7\xCB\xBC\xC6\x0C\xCE\x7B\xBB\xD0\xD0\x0D\xD6\x86\xC5\xEF\xD5\x47\x45\xDD\xD5\x14\xD6\xFB\xD4\x57\xCE\x7F\xD5\x4E\xCB\x1C\xCD\x6F\xCF\xCD\xCD\x33\xC0\x00\xD6\x1A\xBB\x02\xD6\x4C\xB8\xD6\xCD\xE1\xB3\x48\xD6\x65\x95\xCC\xD0\x08\xD6\xF1\x99\xDB\xCB\xDC\xD0\x51\xD0\xC2\xC3\xDF\xD0\x93\xD4\xA4\xD5\x3B\xD5\xF2", +"\xD5\xC2\xD5\x61\xD4\xFF\xCE\x81\xD4\xD4\xD3\xCA\xCD\xE2\xD5\xCC\xCD\xD6\xD4\x71\xCF\x20\xCD\x01\xD6\x50\xD4\x8C\xC8\x68\xCE\xA2\xD0\xD6\xC1\x40\xD0\xDA\xC6\xA6\xB4\xB8\xC8\xDD\xCB\xBD\xCB\xBD\xC5\xBC\xC8\xBF\xC5\x79\x69\x32\xD6\x7A\x74\x13\xD6\xD0\xD3\x72\xD6\x46\xCA\x58\xD5\xF5\xCA\x65\xD4\xEE\xCD\x1A\xD5\x16\xCE\x72\xD5\x18\xCE\x60\xD5\xC5\xCE\x76\xD5\xB2\xCE\xEC\xD5\x96\x7B\xAF\xCF\xFC\xD0\x1C\xCC\x49\xD2\xDD\xAA\xFB\xD0\xCB\xCF\x5A\x7D\x89\xD3\x8C\xA7\x92\x61\x0E\xD4\x7D\xD5\xDF\xD5\x56\xCA\x8A\xCD\xE5\xCB\x8C\xCD\x19\xCF\xE9\xD4\xCB\xD5\xEB\xD4\x40\xD6\xED\xD4\x42\xD6\xEF\xD4\x44\xD6\xF1\xD4\x33\xD4\x52\xCD\xD3\xCF\x1C\xC9\x04\xB2\xE4\xCF\xA7\xD3\x18\xB5\xA8\xCC\xF7\xC5\xB2\xAC\xDB\xCF\xFF\x00\xDD\xCF\x0A\xC9\x5C\x0A\xAA\xD6\x3D\xD4\xAC\xD6\x36\xD6\xE0\xD5\xA2\xCF\x86\xCF\x16\xD4\xE4\xD5\xD7\xD4\xE6\xD5\xD9\xD4\x87\xD5\xDB\xD4\x2C\xB1\x0F\xD5\xA3\xCC\xA5\xD3\xD9\xCD\xC2\xD6\xD0\xCC\xAB\xCC\xDF\xCE\xF0\xC2\x1F\xB5\xDD\xC5\xCC\xD6\x7C\xD4\x16\x98\x54\xD6\xA7\xD5\xFC\xD4\xA9\xD5\x40\xD5\xD3\xD4\xD3\xCE\xB9\xB6\x1F\xAF\xE5\xD5\xDA\xD3\xAE\xCE\x74\xD5\xB0\xCE\x9C\xD6\x5D\x9C\xF1\xCF\x65\x08\xF3\xCF\x1B\x71\x0B\xC3\xF5\xC6\xC2\x8F\x0E\xC3\x00\x00\x10\xC3\x8C\x0E\x79\x69\xE6\xD6\x96\xD4\xB2\xD4\x3F\xD4\x4D\xCF\x23\xCE\xDE\xC7\x93\xD6\x18\xD5\x66\xD4\x96\xD6\x54\xCF\x98\xD6\xC3\xCE\x9A\xD6\x58\xCF\x5B\xC8\x48\xB2\x43\x0F\x5C\xC9\x23\x0C\x5E\xC9\x6A\xD6\x60\xC9\x02\xD0\x71\xA1\x5C\xA2\x05\xD7\xB1\xD4\x8E\xD6\xB3\xD4\x09\xD7\x3C\xCE\xF6\xD5\x39\xD6\x41\xD5\xA7\xCB\x42\xCE\x6A\xCD\x44\xCE\xB6\xD6\x20\xD6\xB8\xD6\x22\xD6\x09\xD5\x84\xA1\x0B\xD5\xEC\xBA\xA5\xD4\x65\xC3\x1F\xD4\x46\xA8\xCB\xD6\x53\xD6\x8F\xD6\x15\xD6\x14\xCF\x04\xC8\x6C\xD5\x76\xD6\xD2\xD6\x82\xD5\xD8\xD3\xAC\xCE\xF3\xD6\xA8\xCF\xF5\xD6\xAA\xCF\xF7\xD6\xD4\xC6\xD7\xBD\x67\xC3\x3A\xD4\x01\x9A\xA5\xD5\xF3\xD5\x90\xD6\x05\xCC\x2C\xD5\xC6\xD5\xAB\xD5\x00\xD5\xAD\xD5\xBC\xCC\xAF\xD5\x1C\xCF\xFE\xD5\x2E\xD4\x5D\xD6\x7D\xCA\x5F\xD6\x95\xBF\x61\xD6\x3B\xA7\xAD\xC9\xC0\xD6\xA6\xD3\x1F\xC9\x19\xD0\x59\xCD\x81\xC3\x5B\xD4\x26\xBB\x30\xCF\x09\x01\x20\xD7\xCE\xD4\xCE\xD6\x51\xD7\xEA\xCD\x92\xD6\xEC\xCD\x94\xD6\x14\xCE\x0F\xD7\x68\xD4\xF1\xCD\x1D\xD5\x59\xC8\x43\xC8\x15\xD7\xC2\xD4\xE5\xD0\xEC\xA1\xA4\xC3\x71\xD4\xB5\xD0\xDA\xCB\xBC\xCD\x4F\xD6\xC0\xC6\x19\xB8\xD8\x93\x6E\xD7\xE1\xD4\x70\xD7\x3C\xD7\x35\xCF\x26\xD7\x75\xD6\xBD\xCE\x6E\xD5\xBF\xCE\x70\xD5\xC1\xCE\x11\xD7\x56\xCF\x13\xD7\xDD\xD3\x7D\xD7\xDF\xD3\x8E\xD4\xEF\xC9\xFE\xD6\x97\xC8\x92\xD4\x4A\xC5\xA6\x21\x3A\xD7\x23\xD7\xFE\xCE\x91\xD6\x53\xD7\x17\xD5\x53\xC8\x19\xD5\x3E\xC8\x97\xD6\x79\xD7\x5F\xD5\x7B\xD7\x1F\xD5\x49\xD7\xB7\xC6\x3C\xD0\xA8\xD4\x7B\xCD\xF9\xC3\xC7\xD4\xA9\xB7\x46\xD0\xA1\xD7\x6D\xD7\xA3\xD7\x08\xD7\xA5\xD7\x52\xD7\x74\xD6\x3F\xD7\x91\xD7\x75\xD7\x5B\xD5\x77\xD7\x5D\xD5\xAD\xD7\x73\xD5\x98\xD7\x6C\xD4\x9A\xD7\x6E\xD4\x23\xCA\x4D\xD0\xDC\xCD\x83\xD7\x93\xC8\xDA\xC3\x86\xD7\x9D\x10\x2A\xCA\xEB\xD2\x2B\x6B\x8A\xD7\x12\xD5\x8C\xD7\x55\xD6\x12\xD4\x73\xD7\xFE\xCD\x92\xD7\xD7\xD3\x94\xD7\xD9\xD3\x96\xD7\xDB\xD3\xC9\xD7\x75\xD5\xCB\xD7\x1F\x90\xDE\xD4\xA3\xD5\x4E\xD7\x6F\xD6\xE8\xD6\x3B\xD7\xDB\xD7\x57\xD5\xA7\xD7\x64\xD4\x0D\xD7\x95\xD6\xAB\xD7\x10\xD7\xC7\xD7\x99\xD6\xAF\xD7\x61\xD5\xE7\xD7\x6E\x93\xF6\xD4\x0B\xD4\xA2\xD7\x4F\xD7\x71\xD6\x8D\xD7\x82\xCF\x6D\xCB\xB7\xD4\x96\xD5\x2F\xD5\x0A\xCC\x99\xD5\xB0\xCD\x9B\xD5\x0E\xCC\x3B\xCA\xB4\xCD\x8C\xD4\xEA\x8F\x0E\xD5\x53\xD4\x04\xD7\xBC\xD7\xD0\xD4\xDA\x98\x05\xD8\x3A\xD6\xA6\xCB\x1B\xD6\xA8\xCB\x1D\xD6\x6B\xCD\x5B\xD7\xB2\xD5\x5D\xD7\xB1\xCA\x5F\xD7\x60\xC3\x61\xD7\x82\xBA\x63\xD6\xF3\x8F\xD7\xD5\xB7\xC9\x9F\xC2\x6F\xD0\x37\xCE\xBB\xD7\x00\xD8\x35\xD6\x71\xD7\x4E\xCF\xF1\xD7\x59\xD5\xC3\xD7\x6F\xD5\xC5\xD7\x71\xD5\xF7\xD7\x12\xD7\xF9\xD7\x9B\xD6\x44\x78\x38\xD5\xDB\xD6\x39\xD7\x2E\xD8\xE9\xD6\x56\xD5\x6B\xCF\xDD\xD7\xE1\xD5\x41\xD7\xE3\xD5\x43\xD7\xA6\xCF\x45\xD7\x86\xD5\x47\xD7\x88\xD5\xB1\xD7\x8A\xD5\xAB\xD0\x29\xD8\xAD\xD4\x4F\xD5\xB2\xC0\xEA\xD7\x00\x00\xD8\xD7\x54\xD5\xB0\x9A\x30\xD8\x0A\xD7\x11\xCE\xF2\xD7\xA9\xD7\x0E\xD7\xF5\xD7\x78\xD7\x1C\xD5\xAE\xD7\xF3\xCD\x7C\xD7\xF5\xCD\x80\x86\xD3\xCA\x65\xD5\x05\xBA\x57\xD8\x7C\xD5\x07\xD7\x15\xD8\x37\x93\x54", +"\xD7\xB0\xD6\xAC\xD5\xB2\xD6\x1C\xD6\xB4\xD6\xFD\xD5\xB1\xD5\x41\xD6\xB3\xD5\xE1\xA1\xE7\xD5\xD8\xD6\xB8\xD5\x4E\xD8\xA6\x98\x78\xD5\xA6\xBA\x4D\x8B\x6B\xD8\xC0\xD5\x70\xD6\x2F\xD8\x02\xD8\x90\xD3\xF5\xD3\xF7\xD5\x19\xD6\x19\xD8\x3C\xD6\xB3\xD6\x59\xD7\x49\xD4\x77\xD8\xB7\xD6\x79\xD8\xBF\xB6\xD2\xD5\xA2\xB7\xD4\xD5\xC7\xA7\x35\xD4\x0B\xC5\x4B\xCC\x96\xBB\xB5\xCE\x1F\xD7\x14\xD8\x7E\xD5\x44\xD8\xD1\xD6\xD6\xD3\xA4\xCF\x48\xD8\x84\xD5\x4A\xD8\x7B\xD8\x4C\xD8\xD9\xD6\x7E\xD8\xDD\xAE\xA1\xD5\x2E\xAF\x6A\xD8\x9F\xD8\xAD\xD6\xA4\xCA\xED\xD6\xF8\xD5\x40\xCE\x29\xD7\x43\xD5\x34\xBF\x45\xD5\x63\xA3\x23\xD6\x81\xB7\x25\xD6\x24\xCF\x27\xD6\xE9\xCF\xBB\xD5\x32\xCB\xBD\xD5\xE5\xD6\xB0\xD8\xCF\xD6\xAE\xD6\xAA\xD5\x71\xD8\x56\xD7\x73\xD8\x1B\xD8\x75\xD8\x3F\xD6\x1E\xD8\x78\xD8\x20\xD8\xCC\xCA\x22\xD8\xAD\xC8\x24\xD8\x75\xBB\x26\xD8\x0D\x90\x9B\xD8\x9A\xC5\x4A\xCB\xA9\xD6\xC5\xD8\x5A\xD8\x25\xD7\x25\xD4\x17\xD8\x28\xD7\x1A\xD8\x2A\xD7\x1C\xD8\x2C\xD7\xCF\xD8\x92\xD8\xD1\xD8\x5A\xCB\xD3\xD8\x9D\xCA\xD5\xD8\x60\xC1\xD7\xD8\x9A\xD8\x28\xD8\xDE\xC9\x0E\xCF\x6D\xD6\xEB\xD7\xF1\xD5\xED\xD7\xA4\xD7\x17\xCD\x62\xD4\x32\xD8\x0C\xD7\x5E\xD8\xF4\xD7\x55\xC8\xAC\xD7\x62\xD8\xC8\xD7\x3A\xD8\x14\xD7\x66\xD8\x5A\xCF\x07\xD6\xAC\xD4\x5D\xCF\x04\xA4\x0B\xD6\xCC\xB7\xD1\xD0\xB9\x63\x49\xC5\x7D\xC8\x3F\xD8\xEC\xD7\x34\xD1\x86\xD8\xEF\xD7\x43\xD8\xFB\xD8\x74\xD7\xF3\xD7\x76\xD7\x60\xD8\xC6\xD7\x01\xD9\xF8\xD7\x64\xD8\xB0\xD7\xFB\xD7\xF0\xC1\xC0\xD0\x66\xD6\xC2\xD0\x9A\xCB\x50\x90\x2C\xD6\x9E\xD7\x77\xD4\x9F\xCB\x51\xD6\x2D\xD8\x12\xD9\xF1\xD3\xEE\xD7\xEA\xD6\x56\xD6\xA1\xD8\x14\xD4\x46\xD8\x78\xD6\xD4\xD6\x7A\xD6\xD8\xD4\x73\xCF\xE8\xD5\x26\xD6\x05\xD6\x41\xC5\x4A\xD6\x08\x9E\xC3\xCD\x4D\xD6\x63\xB4\x0D\xD9\x90\x10\x63\xCF\x5D\xD4\xF5\xD8\x12\xD6\x34\xD6\x41\xD8\xB4\xD4\xC4\xD5\x8F\xD7\xC1\xD7\x85\xCF\xA3\xD8\xD3\xD6\xA5\xD8\xF2\xD6\xE3\xD7\xF4\xD6\xE5\xD7\xF6\xD6\x21\xD9\x79\xCB\x65\xD6\x08\xD9\xB7\xC5\x84\xD7\x31\xB8\x69\xD6\x00\xD0\x35\xD0\x48\x0F\x6C\xD6\xBA\xD7\x31\x2D\xDD\xD8\x87\xD8\xF4\xD3\x32\xCA\x90\xD7\x50\xD9\xDF\xD7\xA4\xD8\xE1\xD7\x44\xD7\x55\xD9\x46\xD7\x57\xD9\x48\xD7\x59\xD9\x9B\xAF\x5B\xD9\xC8\xD4\x09\xD6\xAC\xB7\xB7\xC8\xBA\xC5\x2D\xD6\xBC\xC5\x71\x0F\x9D\xA4\xBE\xC8\x11\x66\x83\xD8\x33\xD6\x85\xD8\x4B\xD9\x24\xD7\x89\xCE\xC5\xD5\xA8\xD7\x39\xCF\xAA\xD7\xFF\xD8\xF6\xD7\x1D\xD9\x39\xD8\x1F\xD9\xFA\xD7\x05\xD9\x64\xC7\xF1\xD8\x2E\xCA\xD3\xC5\x5B\xCF\xC5\xCF\xA3\xD6\x19\xCC\xD9\xC5\xF6\xD0\xA6\x27\xA8\xD6\x79\xA9\x09\x9A\x40\xD8\x30\xD9\x42\xD8\xA0\xCF\x33\xD9\x80\xD5\x35\xD9\x5A\xD6\x79\xD6\x5C\xD6\x7B\xD6\x5E\xD6\x7D\xD6\xD3\xC8\x68\xCA\xC2\xD3\xA6\xD4\xAF\xAC\xC5\xD3\xA9\xD3\xAA\xCC\xA2\xC6\xC9\xD6\x4F\xC4\xA1\xD9\x2E\xD9\x23\xD4\xA0\xD8\x17\xD9\xDE\xD7\x34\xD8\x93\xD7\x36\xD8\x95\xD7\x38\xD8\x97\xD7\x03\xD9\x99\xD7\x9B\xC6\xDB\xD6\xCB\xCC\x55\xD4\x0E\x9C\x66\xD7\xEC\xC2\xAD\x91\xE8\xCF\x41\xC9\xC9\xD3\x71\x0F\xF1\xC2\xFA\xCE\x01\x01\xBA\xD9\xF6\xD8\x13\xD9\x86\xD9\xBE\xD7\x72\xD7\xBE\xD9\x45\xD8\x51\xD9\x42\xD7\x6F\xD9\x49\xD8\x71\xD9\x4B\xD8\x73\xD9\x4D\xD8\x75\xD9\x35\xBE\xE0\xD3\xF2\xCF\xD8\xB8\xED\xCC\x61\xCF\xB2\x7B\x86\xD3\xCB\xD1\x17\xD7\x2E\x06\x12\x3E\x71\x3D\x15\x3E\x81\xD3\xFD\x3E\x83\xD3\x80\xB1\x3A\xC6\xF2\xC4\xD7\xD9\x49\xD9\x85\xD9\xA3\xD9\x4C\xD9\xF5\xD5\xE0\xD8\x8A\xD8\x8C\xCE\x67\xCD\x8D\xD8\x74\xD8\x8F\xD8\x04\xD5\x91\xD8\x2E\xD7\x93\xD8\x82\xB9\x95\xD8\x1C\xBB\x33\xD7\x82\xC0\x35\xD7\x0B\xCD\xFC\xCF\x44\xBF\xFE\xCF\x27\xC3\x61\xD9\xEB\x76\x0A\xD4\x51\xD2\x5C\x0A\xFC\xD9\xCE\xD3\x22\xD7\xBD\xD7\xF9\xD8\x73\xD6\x91\xD3\x27\xD7\xEE\xD6\x9C\xD4\xF0\xD6\x02\xB8\x6E\xA2\x77\xB5\x31\xD7\xEC\xA2\x97\xD8\x88\xAD\x5F\xBF\x08\xD0\x8B\x9D\x1D\xDA\xAB\xD6\x6D\xD8\xBD\xD9\xC0\xD7\x70\xD8\xE6\xD4\xB5\xD8\xE3\xD8\xB7\xD8\x31\xC0\x0A\xDA\x29\xDA\x4A\xB6\x2B\xDA\x67\xA3\x2D\xDA\xDB\xAE\xEF\xD8\x1E\xC6\x0F\xD0\x4C\xD7\x1E\xCE\x03\x01\x32\xDA\xCD\xD6\x34\xDA\xB1\xD8\xA3\xCB\xB3\xD8\x8B\xD8\x28\xD4\x06\xDA\xCC\xD8\x08\xDA\xCC\xD5\x3D\xDA\x82\xB2\x7A\xD8\xD7\xD6\xA9\xD8\x7D\xD8\x77\xC3\xBE\xD6\x54\xCD\x3D\xA7\x56\xCD\xB3\xD9\xB1\xC9\xA1\xC6\xC7\xD6\xA4\xC6\xF4\xD8\x00\x00\x4A\xDA\xE7\xD6\xD9\xD9\xFF\xD9\x87\xD9\xCF\xCE\x02\xDA\x24\xDA\xB4", +"\xD8\xD4\xD4\x36\xD9\x53\xD9\xD5\xD6\xA7\xD8\x59\xDA\xE5\xD9\xAA\xD8\xE7\xD9\x17\xD0\xA7\xD4\xD2\xC9\x79\xCF\xD2\xD7\x1B\xD7\xDC\xC1\x81\xCD\xD5\xD9\x67\xDA\x67\xD9\x15\xD9\xA5\xD9\xDD\xD9\xA2\xD8\x6D\xD9\x52\xD9\xE1\xD9\xA6\xD8\xE3\xD9\xA8\xD8\x77\xDA\x5B\xDA\x93\xD9\xD2\xCF\xD1\xD2\x8F\xD4\xE1\xCD\xB8\xAD\x87\xC5\x68\xDA\x06\xD7\x1F\xDA\x6E\xD8\x30\xA9\xDE\xD9\x89\xDA\xE0\xD9\xC2\xD9\xE2\xD7\xC4\xD9\xE4\xD7\xC6\xD9\xCA\xD7\x91\xDA\x35\x91\x6F\xD4\xEE\x04\xF0\xC6\x72\xD4\x31\xB6\x42\xD0\xD6\xC9\x29\xD9\x61\xC5\xB9\xD7\x10\xD9\x27\x01\x98\xDA\x21\xD7\x4A\xD9\x6B\xDA\xDB\xD9\x31\xD8\x36\xDA\x8A\xD9\x97\xD5\xED\xCE\x09\xD8\xEF\xCE\xBD\xD4\xF1\xCE\x0D\xD8\xF3\xCE\x0F\xD8\x8B\xA8\x4C\xD0\x8E\xA8\x4E\xD0\x82\xD6\x10\xD2\xAD\xDA\x7D\xCD\xA9\xB7\xD5\xD7\x51\xD5\x49\xDA\x84\xDA\x31\xD9\xDC\xD7\x87\xDA\x34\xD9\xDF\xD9\x47\xD8\x8B\xDA\x54\xD9\xA2\xDA\x56\xD9\xA4\xDA\xE6\xD7\xA6\xDA\xC9\xA7\x5A\xD0\x22\xAE\x05\xBA\xB4\xDA\x6F\xD7\x4C\xDA\xC6\xD8\xB2\xD8\x18\xD6\x04\xDA\x45\xD4\x57\xD7\x47\xD4\x54\xDA\xB5\xD6\xE7\xD8\x0B\xDA\xE9\xD8\x05\xCD\xEB\xD8\x44\xCB\xED\xD8\x45\xC3\x99\xD8\x70\x78\xFD\xD7\x1B\xDA\xB3\xDA\xD1\xDA\xA4\xD9\x80\xD4\x23\xDA\x6B\xD9\xF7\xD3\x68\xB1\xCB\xD8\xE4\xD8\xCD\xD8\x1D\xD8\x56\xDA\x8F\xBF\x58\xDA\x3A\xD9\x7C\xD8\xE9\xD5\xB9\xD5\x32\xA3\x11\xD8\xFD\xC5\xCF\x67\xE3\xDA\x8B\xD7\xE5\xDA\xDE\xD8\x88\xD9\x4E\xD9\x37\xDA\x59\xD6\x8E\xCD\x3E\xD6\x06\xDB\xB9\xD8\x60\xA4\xBB\xD8\xB0\xBB\xBD\xD8\x51\xD4\xBF\xD8\xEA\xA9\x9E\xD6\x2A\x90\x24\xD5\x87\xCA\x0B\xA9\x09\x01\x12\xDB\xD9\xD7\x14\xDB\x68\xD9\xFA\xD8\xBA\xDA\x5D\xD8\x8B\xD9\x5F\xD8\x8D\xD9\x61\xD8\x3D\xCF\x7A\xD7\x91\xD9\x3B\xD8\x9C\x78\x3D\xD8\x12\xD8\x77\x6A\x2B\xDB\x58\xD8\xE3\xD1\x20\xDA\x74\xCE\x2F\xDB\xFF\xDA\x4F\xD9\x01\xDB\x10\xB3\xEB\xDA\x02\xD5\xED\xDA\x76\xD8\x1D\xDB\x5F\xA8\x40\xDA\x89\xA3\x42\xDA\xD7\xCD\xF7\xDA\x2F\xC8\x95\xD9\x43\xCA\xFC\x81\x7D\xD0\x04\xCB\xD0\xDA\xA2\xD9\xF8\xD8\x42\xDB\x22\xDA\x89\xD8\x6F\xDA\x50\xDA\xF9\xD5\xC9\xD5\xFB\xD5\x05\xDB\xE6\xD8\x07\xDB\x42\xC4\x09\xDB\x7C\xD6\x49\xD5\xBE\xD8\x3D\xD9\x64\x9E\x68\xD8\xF9\x08\x31\xDA\xFC\xDA\x00\xDA\x37\xD6\x16\xD8\x03\xDA\xC7\xD5\x05\xDA\x62\xDB\x3D\xD6\x70\xCF\xAB\xD9\x39\xD9\x69\xDB\x3B\xD9\x6B\xDB\x0D\xDB\xF4\xAE\x80\xD8\xE1\xC0\x4D\x8B\x3E\xDB\x6C\xD8\x9A\xDA\x35\xDA\x44\xDB\x18\xDB\x6E\xCF\x1A\xDB\x7A\xDB\x8C\xCB\x0C\xDA\x24\xC1\x0E\xDA\xD1\xC8\x10\xDA\x4A\xC4\x12\xDA\xE3\xB3\xB3\xCE\x83\x9D\x9D\xD8\xE2\xDA\x71\xDB\x6C\xDA\x41\xD4\x6E\xDA\x00\xDB\xB8\xD4\xF8\xD3\xD0\xBF\x3B\xCB\x4C\xDB\xA8\xA8\x4E\xDB\x64\xA4\x50\xDB\x62\xD6\x52\xDB\xAC\xCC\xC8\xCE\xA2\xD5\xFE\xD7\x2A\xDB\x9B\xDB\xB8\xDA\x5B\xD8\x16\xD5\x31\xDB\xBC\xDA\x3A\xCF\xBE\xDA\x3C\xCF\xC0\xDA\x3E\xCF\xC2\xDA\x40\xCF\x9F\xD5\x8D\xD4\xC1\xD8\xE1\xCE\x33\xCB\xFB\xD9\xB0\xDB\x21\xDA\xA6\xD7\x30\xDB\x33\xD8\x19\xD9\xC4\xD7\x1B\xD9\x37\xD8\x8F\xD9\xC5\xD9\x38\xDB\x04\xD9\xC1\xD4\x94\xD9\x50\xD8\xDE\xC9\xA5\xD0\xDB\xD5\xDD\xC5\x85\xDB\x84\xD8\xF7\xD8\x41\xDB\xE7\xCE\x69\xD9\x15\xCF\x8A\xDB\x77\xD6\xA9\xD9\x37\xD9\x7B\xDB\xD6\xD6\x0A\xDB\x5A\xDA\x0C\xDB\xAB\xD8\xF9\xB3\xD9\xD8\xEA\xD0\xA9\xB0\xD3\xD0\x84\xC3\xFB\xDA\x5A\xDB\xDA\xDB\x91\xB7\x16\xD6\x57\xD6\xE5\xD4\x19\xDB\xAE\xD5\x1B\xDB\x65\xDB\xA4\xDB\x89\xA9\xA6\xDB\xE3\xA8\xA8\xDB\x18\xB7\x44\xDA\xC6\xB7\x29\xD6\xC9\xDA\x0A\xD6\x96\x0E\x2B\xCF\x18\xDA\x48\xC5\x97\xDA\xC3\xDB\x5C\xDB\xC5\xDB\x89\xDB\xBB\xDA\x07\xD8\x28\xCE\x4A\xCD\x2A\xCE\xA0\xD4\xF0\xD4\x0A\xD5\xFD\xDB\x25\xD8\xAA\xDB\x5D\x22\xB4\xD0\x4B\xD6\x4C\xAA\xC6\xAF\x9B\xCB\x95\xC1\x86\xD6\x2D\xCF\x2F\xD6\xEC\xDB\xA2\xC5\x1C\xDA\x09\xDC\xDB\xDB\x43\xDB\x5E\xDB\x9F\xDB\x06\xD8\xA1\xDB\x49\xCD\xA3\xDB\x4B\xCD\x46\xD5\xFB\xDB\xCE\xAC\x15\xDC\xD6\xD8\x17\xDC\x7D\xC5\xD8\xD0\x7F\xC5\x24\xD9\xCE\xD0\xEB\x09\xBB\xCB\x1F\xDC\x62\xD9\xBE\xCB\x2C\xD9\x06\x01\xD7\xDB\x84\xD9\xD9\xDB\x9B\xDA\x65\xAE\x88\xDA\xC0\xD9\xE0\xD7\xA0\xDA\x70\xD9\xDA\xDA\x72\xD9\xDC\xDA\x58\xD9\xDE\xDA\x22\xD9\xB8\xC6\xB5\xC1\x5E\xD9\x9C\xC5\x87\xB4\xD3\xD7\x63\xD9\x08\xDC\xEF\xDB\x44\xDC\x9E\xAD\x58\xD6\x8B\xDB\xF6\xDB\x8D\xDB\xC0\xCC\x8F\xDB\x10\xC6\x91\xDB\x7F\xCA\x93\xDB\x8C\xC9\x95\xDB\x90\xC8\x90\xCF\xE7\xD0\xA0\x0D\x85\xD6\x7D\xD9\x62\xBB\x88\xD6\x97", +"\xCF\x8A\xD6\x3D\xDB\x25\xDC\xF1\xDB\x3D\xD7\x68\xC9\x29\xDC\x18\xD8\x51\xDA\x78\xDB\x8E\xD8\xF7\xDB\xF1\xD6\x74\xDA\x8D\xDA\x76\xDA\x4D\xDC\x74\xD9\x4F\xDC\x2F\xD0\xE9\xDB\x08\xD6\x14\xCC\xA6\xCD\xC7\xD4\xB2\xCF\xDF\xC8\x20\x5F\x80\xB8\xA1\xD6\xB1\xCF\xC8\xBE\x17\x8E\xCA\x3C\x74\xD3\xFE\xD0\xAF\x76\x4C\x77\x93\xDC\xD7\xBD\x1D\xD1\x76\xBC\x27\x01\xE9\xD2\xBB\xD9\xDE\xD2\xC8\xD1\xCC\xA4\xEE\x00\x97\xDC\x25\xC9\x86\xB0\xB5\x75\xA2\xDC\x1A\x83\x3C\x06\xCC\xD2\xBA\x90\x4D\x96\xD2\x01\xD6\x3C\xEB\x07\x9E\xDC\xC8\xD2\x19\x7D\x8A\x5A\x69\xD2\x70\xA1\x60\x9B\x87\x74\x77\x6A\xD7\xD2\x76\xD1\x32\x58\xF6\xD9\xA6\xDC\xBC\x6E\xCE\xB0\xF0\x00\xBA\xCF\x20\xA7\x80\x6C\x31\x46\xA4\x9A\xD4\xA6\xB1\xDC\x7C\x5A\xB8\xC2\xE5\xC8\x3C\xDB\x07\x6D\x9A\x9A\x62\xD1\xC3\x3C\x29\xD5\x85\xDA\xFE\xDA\x28\xDC\x45\xDB\xA0\xDB\x02\xDB\xF9\xD3\x7C\xAD\x66\xDB\xA7\xC8\x68\xDB\xAD\xD9\x6A\xDB\x22\xDB\xC9\xCC\xC9\xD9\xD4\xCF\xCB\xD9\xEA\xC2\xCD\xD9\xE6\xCF\xF2\xB4\xC6\xD6\xAB\xD3\x90\x10\xB8\xD9\x4D\xD7\x00\x00\xCC\xDC\x6A\xD1\xBA\xDC\x14\xD9\xD2\xDA\xF0\xD7\xC6\xDB\xFC\xD8\x32\xDB\xFE\xD8\x3B\xCF\x1B\xD5\x36\xDB\x63\xD8\xBF\xD4\x65\xD8\x28\x79\xB1\xD9\xCC\xD9\x57\xD4\xE4\xDC\x57\xB1\xBF\xB8\xC8\xD3\xE3\xD6\x27\xC9\xF2\xC4\xEC\xDC\xB9\xDC\xCE\xDC\xA6\xD5\xFD\xDA\x2B\xD5\xF2\xDC\x18\xD9\xFD\xD8\x1A\xD9\x34\xDB\x1C\xD9\xF8\xDC\x02\xD9\xCE\xDB\xC7\xD9\xD0\xDB\x92\xDA\xCE\x96\x7B\xB1\x0A\xC3\x0F\xCD\x41\x65\xA8\xDC\xF0\xD9\x3F\x0F\xC2\x13\xBB\x55\xAF\xDC\xDC\xD2\xC9\xD2\x03\x64\x00\xD7\x02\xD7\xDB\xC9\x77\x6A\x07\xDD\x49\x65\x07\x64\xB7\xDA\xC4\xDB\xBF\xD7\x0C\xDC\xB4\xDB\x0E\xDC\x04\xCF\x10\xDC\x06\xCF\x12\xDC\xBA\xD6\x14\xDC\xBC\xD6\x2F\xCE\x03\xD4\x0C\xCD\x3E\x6E\x0E\xCD\xE4\xD3\x1D\xD7\xAB\xA7\x46\xA0\x5C\x0A\x2B\xDD\x48\x65\x2D\xDD\x5B\xDB\x26\xDC\x5D\xDB\x6A\xD9\xD3\xDC\x2A\xDC\xD5\xDC\xA2\xDB\xFA\xD3\xF9\xDB\xCA\xAC\x30\xDC\x97\xAE\x32\xDC\xEE\xD8\x34\xDC\x26\xCD\x02\x01\x09\xD0\x43\xDD\x27\x01\x45\xDD\xF1\xB0\xEE\xDC\xDA\xD9\x2F\xDD\xDC\xD9\x0D\xDD\xBF\xD9\xC8\xDB\x35\xD8\xCA\xDB\xC3\xD9\xCC\xDB\xA3\xDA\x15\xDD\xA5\xDA\x17\xDD\xFC\xC7\x37\xD4\x10\xD0\x3E\xCD\x39\xD5\x5C\xDD\x60\x65\x47\xDD\xF0\xDB\xAF\xB7\x03\xD8\x24\xCE\x5F\xDB\xE9\xDA\x3B\xD6\x7A\xDC\x07\xDA\x7C\xDC\x28\xDA\x57\xDA\x94\xD8\x24\xD6\x03\xD6\xF5\xDA\x31\x9D\xFD\xDC\xE2\xDC\xFF\xDC\x62\xBE\x7F\xC3\x6B\xAD\x69\xD7\x3D\xBD\x30\xD6\xCF\x67\x5D\xDD\x07\xA7\x5F\xDD\x2E\xDD\x0A\xDC\x30\xDD\xD2\xDC\xDE\xDB\xA8\xD9\x8C\xDB\x5B\xD6\x8E\xDB\xF1\xDA\x4E\xCD\xAE\xD9\x81\xCA\x7F\xD6\xFF\xDB\xA1\xC3\x36\xDC\x0D\xCA\x7C\xDA\xA9\xD4\xFD\xBF\xAE\xDA\x44\xD0\x2A\xD9\xFF\x00\x81\xDA\xCA\xD6\x73\xDD\xCD\xDC\xE4\xD2\x50\xD7\x2E\xDB\x4A\xDD\xDD\xDB\x0D\xDC\x2B\xDC\xBA\xD3\x35\xDD\xBC\xD3\x37\xDD\xBE\xD3\x45\xD6\xC0\xD3\x47\xD6\x57\xDD\xEE\xC9\x33\xD0\x06\xDC\x52\xD8\xA0\xD7\xB2\xDA\x09\x01\x91\xDD\x12\xA7\x93\xDD\x48\xDD\x74\xDC\x8E\xD7\x9E\xDB\x4C\xDD\x78\xDC\x61\xDB\x48\xDB\xCA\xD5\x4A\xDB\xCE\xD8\xD8\xDC\x27\xCB\xDA\xDC\x5E\xD7\x9F\xDD\xD0\xCA\x4B\xD5\x60\xDA\xA4\xDD\x3D\xD0\x27\x0E\x3F\xD0\xAB\xDA\xCA\xDA\xF3\xC6\xA9\xDD\x90\xD4\x6B\xCE\xAE\xD4\x3F\xDC\x99\x9A\x74\xDD\xCA\xDD\x76\xDD\xAB\xB8\x78\xDD\x0B\xD7\x0E\xDD\xF4\xDC\x10\xDD\xF6\xDC\x00\xD9\x13\xDD\x1E\xD9\xFA\xDC\x20\xD9\x83\xDC\x9A\xBF\xB8\xC6\xC4\xD4\x02\xDC\x6C\xB9\x7E\xDA\xC3\xDD\x29\xCA\x54\xD0\xD6\xD7\x44\xDD\xEB\xDD\x09\xDD\xB2\xDD\xD0\xDC\x0C\xDD\x31\xDD\xC7\xDB\x0F\xDD\xC9\xDB\x11\xDD\xCB\xDB\xF6\xDD\x90\xD9\xF8\xDD\x92\xD9\x6D\xDD\xDF\xDA\x3C\x0F\x6C\xCC\xEE\xB9\x5C\xA2\xC8\xDD\x44\x65\x75\xDD\x5A\xDC\x42\xB0\x4F\xDA\x7B\xDD\x8C\xD8\x7D\xDD\x53\xDA\x7F\xDD\x40\xC4\x3E\xDA\x6C\xB8\x53\xDD\x37\xB4\x55\xDD\xF6\xDA\xC3\xC7\xF9\xDA\x04\xDE\xAF\xDD\xED\xDC\x07\xDE\x01\xD8\x09\xDE\xF2\xDB\xA6\xD9\x5C\xDC\xDF\xDB\x9A\xDD\xAA\xD9\x9C\xDD\xAC\xD9\xD9\xDD\xDC\xDC\x7E\xD6\xDC\xDD\x91\xB6\x77\x80\x8C\xA7\x1B\xDE\x6D\x63\x1D\xDE\x88\xDB\x97\xDD\xB6\xDD\x4E\xDD\x2C\xDC\x50\xDD\x2E\xDC\xBA\xD8\x29\xDE\x5B\xB4\x3A\xDD\x24\x9F\x69\xCE\x97\xDB\x26\xDB\x3C\x0F\xAC\xB6\x68\xC4\x06\x01\x44\xDE\x3C\x67\xEC\xDD\x1E\xDE\xEC\xAD\x9D\xDA\x47\xDC\x6E\xD9\x49\xDC\xE2\xD9\x4B\xDC\xE4\xD9\x81\xDC\xE6\xD9\x3A\xDB\x7B\xC7\xEC\x8F\x4D\x8B\x5A\xDE\x9D\xD1\x5C\xDE\x47\xDE\x4B", +"\xDD\x98\xDD\xD6\xDA\x72\xDA\xD8\xDA\x7E\xDC\x64\xDE\x8E\xDA\x66\xDE\x78\xDA\xFA\xDD\x21\xD5\x85\xDC\x5C\xD9\x56\xDB\x50\xD5\x58\xDB\x02\x01\x6C\xDE\x94\x73\x6E\xDE\x4D\xDA\x64\xCD\x20\xDE\x76\xDB\xEA\xDA\x03\xDB\x3B\xDA\x90\xCD\xD6\xDD\x62\xCE\xD8\xDD\x21\xD8\xDA\xDD\xE8\xCA\xA1\xDD\x34\xDC\x53\xB3\x6F\xDB\x1A\xDE\x06\xDE\xB1\xDD\x33\xDE\xF0\xDC\x16\xD9\x63\xDD\x5F\xDE\x65\xDD\xC1\xD9\x67\xDD\xA1\xDA\x69\xDD\xDB\xDA\x6B\xDD\xDD\xDA\x15\xDE\x17\xCB\x44\x0F\x1C\xB7\x43\xDE\x98\xDE\x25\xDD\x0A\xDD\x72\xDB\xD0\xD6\xD5\xDA\x9E\xDA\xD7\xDA\x62\xDE\x8C\xDA\x76\xDE\x80\xDC\xA5\xDE\x4E\xDC\xA7\xDE\x84\xDC\x54\xDB\xF0\xCA\xF4\x66\x99\xDB\x55\xD8\x82\xDE\x3B\x0F\x46\xDE\x85\xDE\xFD\xD4\x87\xDE\x55\xD7\xC8\xD5\xD2\xDD\x63\xDB\xD4\xDD\x1C\xDB\x4D\xDE\x1E\xDB\x4F\xDE\xD3\xD5\x51\xDE\x9B\xCE\x8F\x6D\x2D\xAF\xAB\xB3\xC0\xDE\xAC\xDE\xC6\xDC\xCF\xDC\x9B\xDE\x86\xDA\x9D\xDE\x46\xDC\x9F\xDE\x48\xDC\xA1\xDE\x4A\xDC\xA3\xDE\x4C\xDC\xB8\xDE\x82\xDC\xBA\xDE\x4A\xD7\xE1\xAA\xC2\xD8\x03\x01\x11\xA6\x4F\xC4\xC1\xDE\xE3\xD2\xAD\xDE\x08\xDE\xDA\xDE\xD1\xDC\x70\xDE\x49\xDE\x47\xDB\x8A\xDE\x27\xDA\x26\xDE\x81\xDD\x0D\xDA\x83\xDD\x60\xD6\xA4\xD4\xB7\xCA\x7C\xDE\x78\xD9\xD4\xDB\xC8\xA3\x6B\xDE\xD7\xDE\xA6\x9A\x8F\x35\xAE\xDE\x9C\xDB\xB5\xD4\xCE\xDD\x71\xDE\xB2\xDE\x73\xDE\xB4\xDE\xD9\xDA\xE2\xDE\x65\xDE\xE4\xDE\x67\xDE\xE6\xDE\x7B\xDE\xBC\xDE\x07\xCB\x52\xD8\xAE\xD0\x66\xDA\xED\xDE\xB9\xA6\x14\x03\x06\xDF\xF0\xDE\x0B\xDD\x35\xDE\xD4\xDA\xA7\xD9\x72\xDE\xE0\xDB\x73\xDA\x38\xD9\xE3\xDB\x7D\xDB\x0B\xDB\x3C\xD9\x80\xDB\x3E\xD9\x01\xDC\xE2\xDD\x03\xDC\x1C\xB4\x05\xDC\x3C\xDC\x7B\xD0\x0F\xD9\x64\xCF\x30\xDE\x08\xDD\x99\xDE\xEF\xDC\x20\xDF\x75\xDC\xBB\xCE\x77\xDC\xE2\xD8\x52\xDA\x04\xDB\xCB\xDE\xF8\xDB\xCD\xDE\x4D\xDB\x13\xDC\x32\xD7\x2B\xDE\x2D\xC8\xA2\xDD\x18\xDC\x97\xCB\xFE\xDD\x0C\x0F\x60\xC8\x94\xC1\x59\xD3\x78\xD9\x29\xA4\x22\xDC\x83\xD6\x05\xDE\xB0\xDD\xEF\xDE\x9A\xDE\x3B\xDF\xCD\xDD\x94\xD5\x3E\xDF\x25\xDA\x42\xD5\xF7\xDE\x46\xC7\x27\xDE\x18\xBB\x1F\xDB\xC4\xC0\x21\xDB\x3F\xDE\x23\xDB\x51\xB8\x77\xD9\x61\xB4\x78\xAA\x93\xCF\x7D\xDE\x7B\xC8\x87\xC5\x1B\xDF\xA5\x9A\xDC\xD2\x1E\xDF\x59\xDF\xAF\xDE\xC7\xD8\xC6\xDE\xC9\xD8\xC8\xDE\xF6\xDE\xFC\xC4\x7D\xDC\x27\xDF\x75\xDA\xE4\xDB\x8F\xDA\xE6\xDB\x79\xDA\xA2\x86\x81\xD6\x2F\xDF\xFF\xDD\x6F\xA4\x60\xD9\x33\xDF\x6B\xD6\x70\xDF\x04\xDF\x73\xDF\xB2\xDC\xED\xDD\x8B\xBA\x3C\xDF\x83\xCF\x5D\xDF\x70\xDA\xEF\xD6\x7C\xDF\x80\xDD\x08\xDB\x82\xDD\xBC\xD8\x84\xDD\xFD\xDE\xE4\xD0\x51\xDC\xF2\xC1\xA2\xC5\xF4\xC1\x7C\xD9\xAF\xDA\xE7\xDD\xFF\x00\x80\xD9\x99\xCF\x11\x66\x71\xDF\xC5\xDC\x05\xDF\x8F\xDF\x5D\xDE\x88\xAE\xDD\xDE\x0D\xDE\x66\xDD\x0F\xDE\x68\xDD\x11\xDE\xCD\xDB\x13\xDE\x39\xDB\x14\xDF\x4F\xD8\xF1\xD0\xD8\xD5\xA6\x6E\xA0\xD6\xA6\xD6\xDF\xBB\xA1\xDF\x13\xC2\xFA\xD0\x8D\xDC\xBF\xDF\xC9\xB4\xF2\x7B\x1C\x8E\x10\x77\x75\x6B\xC3\x10\xF2\x00\x7B\x7D\xFF\xA0\x98\x0D\xE6\x35\xF6\xD9\xAA\x5A\x4F\x20\x61\x9A\x4C\xAC\xDC\x66\x36\x60\x1B\x01\xD2\xDF\x4B\x16\xBC\xDC\xE7\x6B\xD1\xA0\xF3\x00\xC0\xDC\x1E\x88\xD0\xB4\xAE\xD3\x6D\x92\xC4\x4C\x85\xD2\xC9\xD1\xDE\x4E\x1F\xDD\x34\xAA\x57\x03\x7D\x64\x95\x64\xD2\x9D\x7B\x0C\x0D\xA7\x2B\x76\x70\x73\x4D\xA6\x02\xA5\x91\xBE\xA8\x02\x26\x61\x95\xA8\x90\x5B\x2F\x09\xF2\xDF\x95\x89\x8D\x05\xE1\xD1\x1E\x7C\x91\xA6\x71\xA6\x9A\xD1\x35\x7C\xA2\xDC\xA3\x74\x27\x76\xBF\xDB\x90\x10\x35\x45\xF8\x00\x2E\xC1\x3A\x66\x96\x4F\x1B\xA0\xE6\xDF\x10\x79\xE8\xDF\x3A\x0F\x8C\x64\x00\x41\xC6\xCF\xA4\xAB\xCF\xA3\x51\x33\x66\x69\x70\x0F\xBA\xD2\xDA\xBD\x25\x4D\xD9\xBD\x44\xC5\x48\x06\x13\xE0\xD4\xB0\x54\xA3\xA0\x3E\x04\xD2\xB4\xAB\xA0\x3E\x9F\x6B\xEC\x0C\x52\x41\x73\x61\xEE\xDE\xC6\xDC\xB2\x26\xC3\xB0\x81\x78\xFB\x00\x10\xE0\x49\xD2\xA4\x64\xEC\xDF\xF6\xD1\x58\xA6\x07\xA5\x18\xE0\x27\x01\xFC\x00\x70\x73\xA2\xB0\xEA\xD2\x11\xA0\x33\xE0\x19\x96\x42\xDC\xBB\xA6\x14\xA5\x2F\x09\x3C\xE0\xBB\xD9\x17\x28\xFD\xDF\x84\x99\xA7\xB0\xDB\xDF\x4A\x7C\xC6\x5C\xFD\x00\x4B\xE0\x9F\xBE\x05\x71\xD7\x63\xE0\xCE\x90\x10\x67\xD1\x73\xD1\x19\xA7\x49\x65\xCB\xB0\x5C\x0A\x41\x00\x7F\x72\x0B\xA7\x57\x08\xBE\xBE\xCE\xB0\x42\x65\x78\xD3\x5C\x0A\x57\xE0\x48\x65\xCB\xB0\x19\xDC\x01\x53\xEC\x36\xE5\xB0\x08\x71\x23\x70\x3B\xBE\x6C\x0F\x8A\x66\x42", +"\x10\xC6\x00\x49\xBE\x01\x01\x71\xE0\x0A\x9F\x07\x70\x43\x29\x48\xE0\xFE\x7A\x91\x66\x25\x66\x6F\xE0\x27\x01\x18\xBC\x72\x9E\x03\x73\x2D\xD3\x17\x42\xC8\x28\x78\xE0\x5B\x7D\x12\xB1\x4F\xE0\x80\xBC\x1A\x66\x27\x01\xE8\xAA\xAA\x7D\xE5\x6F\x38\x56\x9F\xB0\x0E\xE0\x59\x0F\x66\x6C\x72\x74\xEF\x64\xEA\x42\x26\x96\xA4\xAB\x6E\xAB\xDC\xAB\x38\xE0\xF0\xDF\xEE\x7D\xF2\xDF\xD7\xD1\x94\xE0\xDC\xAB\x96\xE0\xD5\xB0\x71\x4B\x1B\x73\xF9\xDF\x7F\x72\xB8\x62\xA6\x5C\x84\xE0\xC2\xD1\xFF\xDF\x0E\xA6\x02\xE0\x4F\xE0\x70\xA1\x04\x00\x72\x74\x9F\xDC\xC9\xBE\x83\x9E\x3C\xBD\x48\x0F\x64\x08\xCD\x66\x87\xE0\xD2\xD9\xFF\x00\xC3\x10\x2C\x73\xDB\xDF\x04\xE0\x20\x73\xB9\xE0\xD7\xBD\xF3\x95\x05\xD3\xE1\x9B\xB9\x63\x55\xE0\x62\xE0\x22\x6F\x8D\xDF\x1D\xDF\xBF\x26\x6D\xD1\x5A\xB8\x53\x6F\x4C\xD1\xCC\xB0\xFF\x6B\x72\xD1\xC8\xE0\x09\x01\x88\xB0\x38\xDF\x0C\xD3\xB3\x08\x79\xD1\x94\x6F\x7B\xD1\xEA\xAB\x90\x10\x64\x08\x68\xA5\x25\xCC\x2B\x6B\x45\xE0\xE1\x83\x4A\xE0\x4C\xE0\xCA\xA5\x5F\xD1\x01\x01\xE3\xE0\x26\x83\xE5\xE0\x5D\x7D\x66\x69\x01\x0B\xEA\xE0\x5C\xBE\x8E\xB0\x3F\x83\x90\xB0\x38\x0B\x7D\x2B\xA8\xA5\xC4\x74\xD4\x7B\xBF\xBC\xD6\x7B\x39\xA6\x1F\xA7\x3E\xD1\x70\xA1\x08\x00\xB1\xE0\x95\xB0\x70\xA1\x09\x00\x01\xE1\x7C\xD1\x1D\xD7\x64\xE0\x03\xE0\x41\x65\x64\x08\x0A\x00\x05\xE1\x65\xD1\x3C\x0F\x64\x08\x0B\x00\x0D\xE1\xC1\xE0\x93\xDC\x3B\xDB\x61\xDA\x7D\x69\xC0\xD1\xF3\xCC\x8D\xD1\x9E\xA6\xD0\x7C\x30\xA6\x97\xD1\xFD\xA5\x7D\xA6\x20\xA6\x22\x7C\x84\xD3\x48\x0F\x85\xA6\x73\xD1\x18\xE1\x14\xCD\x08\xB1\x20\xE1\x8E\xA6\x1D\xE1\x36\x45\x98\xD1\xFA\xA6\x01\xE0\xD9\xA6\x96\x6A\xBF\xE0\x89\x66\x13\xE1\xB8\xC2\xC3\x10\x0D\x00\x12\xE1\x5C\xD1\x44\x0F\x20\xCC\x0E\x00\x39\xE1\xC0\xCF\x4B\xB9\x54\xDF\x23\x6A\x34\xBD\x8E\x65\x17\x2E\x82\xD7\x1A\xDC\x3B\x0F\x30\xBD\x0A\x2E\xED\xD9\xDC\x6F\x91\x6B\x12\xBE\x35\xE1\x2E\xE0\xFD\x79\x11\x00\x3E\xE1\x66\xBE\xEB\x0E\x7C\xE0\x9E\x84\xB7\x73\x98\xCE\x32\x00\xA9\xE0\xC7\x96\xF0\x67\x56\xE1\x06\x01\x62\x00\x72\xE0\xE8\x4A\xB7\x75\x34\xCC\x85\x06\x41\x3A\xAA\x8A\x8D\xBE\xEA\x02\x66\x6C\x70\x0F\x01\x0B\xD5\xCD\x9C\xBE\x6E\x06\xE6\x86\x59\xBE\x51\xE1\x53\xE1\x6D\xE0\x58\x23\xEE\x7D\x3C\x78\x58\xE1\xB7\x75\x5B\xE1\xF4\x96\x5D\xE1\xEE\x7D\x60\xE1\x3C\x74\x6D\x07\x63\xE1\x08\x82\x8B\xBE\xD0\x93\x68\xE1\xD1\x01\x6A\xE1\x3C\x70\x6D\xE1\xBB\x74\x57\xCC\x6A\x93\x13\xE1\x0E\x96\x03\x01\xA7\xBE\xFA\xBB\x0F\x6F\x1A\x0D\x11\x6F\x82\x12\x13\x6F\x53\xD1\x72\x01\x66\xD1\x26\xD1\x73\xD1\xA2\xBE\x46\xD1\x90\x33\x8F\x16\xCD\xE0\xC1\xBB\x7A\xD1\x0F\xD1\x4E\xD1\xEB\xDB\x02\x01\x12\xD1\xD4\xE0\x06\x01\x9C\xE1\x52\xD1\x47\xD1\xF7\x02\xDA\xE0\xCF\xE0\x7A\x6F\x3F\xD1\xB6\xE0\xE8\x01\x3E\xE1\xC3\x7D\x9F\xD9\xDD\xC5\xCB\xBE\x57\xDF\x19\x7D\x6D\x2F\xAE\xDF\x95\xB3\x37\xDE\x99\xDD\x5E\xDC\x9B\xDD\x60\xDC\x9D\xDD\x71\xCD\xF3\xDA\x08\xCD\x85\xDD\x3E\x9E\x87\xDD\x77\xCD\x89\xDD\xC3\xD6\xD9\xCF\xB6\xD9\xC7\xD6\xE9\xDC\x48\xDA\x02\x01\xB8\xE1\x31\xDE\x61\x2F\xBB\xE1\x6F\xDE\xB5\xDD\x32\xDD\xB7\xDD\xBA\xD4\xB9\xDD\x87\xD4\x0B\xD8\xB2\xCD\xBB\xDB\x8B\xD4\xC1\xD3\x63\xD7\x55\xCD\xC1\xD6\xE3\xDC\xA8\xD3\x21\xC9\xA5\x96\xC7\xD3\xC0\xD8\x09\xBF\xC2\xB8\xCB\xD3\xF2\xC4\xD3\xE1\xD7\xE0\xBA\xE1\xC6\x56\xBC\xE1\xE2\xB4\xAC\xCD\xB5\xDB\x8C\xD9\xF4\xDD\x8E\xD9\xB5\xDF\x6A\xDD\xB7\xDF\xCF\xDB\xC4\xDA\xBD\xC3\x47\x0F\x46\xA1\xFC\xD6\x38\xC6\xF9\xD9\xF7\xCF\xEF\xE1\xCA\xE0\x6F\x16\xD6\xE1\xC4\xDE\xEC\xD6\xE8\xDA\x88\xDE\x7C\xDD\xC9\xDE\x79\xDB\xC1\xE1\x92\xCD\x61\xDC\xCE\xC8\x63\xDC\xB3\xCA\x48\xDF\x8E\xC8\xC0\xDD\x04\xD4\x3E\xDD\x06\xD4\x1C\xDD\x5D\xD1\xFF\xB8\x05\xBA\xF0\xE1\x2C\xDD\xB2\x56\xF3\xE1\xD7\xE1\x3E\xD7\x0B\xDF\x60\xDE\x8A\xDA\x0E\xDF\x75\xDE\x10\xDF\x77\xDE\x12\xDF\x79\xDE\xB9\xDF\xDD\xD4\x30\xDA\x5C\xA2\x22\xE2\x46\xDD\x24\xE2\x2C\x59\xF4\xE1\xAF\xBA\xD0\xDD\x39\xDA\x40\xDF\x8B\xDE\x2C\xD4\x51\xDD\x80\xAD\xCF\xDE\x96\xD8\xD1\xDE\x02\xD4\xFB\xCF\xA3\xDC\x70\xDD\x39\xD4\xD1\xE1\x01\x01\x35\xE2\x5E\xDD\x57\x28\x0A\xE2\xE6\xDA\x4E\xDA\x0D\xE2\xC7\xDE\x77\xDB\x10\xE2\x7B\xDC\x5F\xDC\x13\xE2\xC3\xE1\x96\xCD\x91\xDE\x5E\xCB\xE9\xCA\xE5\x2E\xC9\xE1\xD6\xCF\x6F\x72\x81\x97\x59\xD4\xE7\xBE\x8E\xDD\x41\xE1\x18\xB6\x07\x6D\x4C\xE2\x92\xDD\x4E\xE2\x25\xE2\x0B\xE2\xE4\xD4\xAF\xD6\x38", +"\xDA\x71\xDA\x25\xDF\x74\xDE\x7E\xDF\x7F\xDC\x80\xDF\x78\xDE\x90\xDA\x31\xE2\xB2\xD9\xDE\xDD\xD9\xB5\xA7\xDD\x00\xDE\x8A\xDF\x52\xD8\xAD\xDD\x4F\xC4\x69\xE2\xC9\xDD\x6B\xE2\x38\xE2\x26\xE2\x76\xDC\xCF\xDD\x3F\xDF\x23\xDE\x41\xDF\x25\xDE\x61\xDF\xF9\xDE\x90\xDB\xFB\xDE\x60\xD7\x9D\xDF\x30\xD0\xD5\xC6\x32\xD0\xB5\xAD\x6D\xDC\xBE\xBB\xF2\xC9\x87\xC5\x83\xE2\x1C\xDE\x37\xE2\x78\x9F\x34\xDE\x92\xDF\x04\xD8\x75\xDB\x53\xE2\x89\xDE\xD6\xDC\x23\xB0\x40\xE2\xD3\xAE\x42\xE2\x0F\xDA\x18\xE2\xD5\xC8\x34\xDC\xB7\xCD\x2C\xA2\xE1\xDD\xD0\xD7\x71\xD2\x27\xD0\x75\xD4\x95\xDA\xDD\xC3\x8F\xDD\x11\x66\x9C\xE2\x45\xDE\x9E\xE2\xF7\x9F\xA0\xE2\x5B\xDF\x38\xD6\x94\xDF\x60\xDB\x3C\xE2\x8B\xE2\x3E\xE2\xB0\xD5\xA8\xE2\x1F\xB2\xAA\xE2\x92\xDB\xAC\xE2\x3F\xC9\x0C\xC7\xC3\xD4\x0E\xC7\xB5\xD7\xAA\xD4\x48\xCF\x53\xD0\xFE\xC3\x55\xD8\xBA\xE2\x5B\xDE\x85\xE2\x9F\xE2\xF1\xDE\x0A\xDE\x48\xDE\xD9\xE1\x4A\xDE\xB8\xDD\x2D\xDC\x11\xDC\x2F\xDC\x46\xDF\x2C\xDA\x44\xE2\xF3\xD4\x57\xDD\xE9\xD7\xAE\xDB\x06\x01\xD6\xE2\x6D\xDE\xD8\xE2\xBD\xE2\xDA\xE2\x21\xDF\xDC\xDE\xB1\xDE\x29\xE2\x9F\xDA\xE0\xDE\x63\xDE\x2D\xE2\xB7\xDE\xFD\xE1\x16\xDD\xFF\xE1\x30\xC4\x60\xD0\xD7\x8F\x34\xE2\x08\xE2\xE6\x16\x4F\xE2\x15\xDB\x6D\xDA\x5C\xDF\x89\xE2\x5E\xDF\xB6\xD8\x60\xDF\x25\xCB\x62\xDF\x8E\xCB\x64\xDF\x76\xC5\x66\xDF\xAF\xD9\x40\xDE\x99\x99\x0F\xDB\x87\xCC\x7D\x69\xEB\xE2\x83\xDE\xED\xE2\xCE\x9F\xBE\xE2\xEF\xDD\x5C\xD8\x0C\xDE\xF2\xDD\x0E\xDE\xF9\xE1\x35\xDB\xB9\xDB\x37\xDB\xF9\xE2\x6C\xDD\xFB\xE2\xDA\xB6\x16\xDF\x32\xCC\x2A\xD8\x27\xDB\x69\xC7\x29\xDB\xEA\xE2\x00\xE3\x7B\x63\x6C\xE2\x50\xE2\x86\xDE\x52\xE2\x79\xDF\x54\xE2\x7B\xDF\xFE\xC9\x7D\xDF\xE2\xDB\x7F\xDF\x29\xDF\xE5\xDB\x2B\xDF\x05\x78\x15\xE1\x14\xE3\x79\x69\x16\xE3\xC2\xDE\xBC\xE2\x19\xE3\xEF\xE2\xA1\xE2\x79\xDD\xC1\xE2\x21\xDE\x79\xDC\x55\xE2\x7E\xDD\x57\xE2\x4B\xD4\x14\xE2\x40\xCB\x16\xE2\xCE\xCA\x65\xDC\x5F\xCB\x67\xDC\xD7\xC8\xFF\xDE\xA9\xB7\x57\xDB\x20\xD4\xCA\xBE\x2F\xE3\x62\x2F\xD9\xE2\x5A\xDF\x1B\xE3\xB3\xDB\x1D\xE3\xF7\xE1\x33\xDB\x20\xE3\x12\xDD\x22\xE3\xF9\xDC\xE0\xE1\xC0\xD4\x26\xE3\xDF\xC0\xCC\xC0\x64\xA9\x21\xE2\x5E\xE3\x02\xE3\xB3\xDD\x0B\xDC\xDC\xE2\x64\xE3\x33\xDD\x85\xD4\xDC\xE1\xBC\xD4\xDE\xE1\x89\xD4\x6B\xE3\xFB\xDC\x6D\xE3\xE9\xC7\x48\x0F\xAA\xDE\x79\xA9\x43\xE3\x2B\xE0\x05\xDF\x73\xE3\x1A\xE3\x88\xD8\xF3\xDE\xDD\xE2\xF5\xDE\xA6\xE2\x45\xB1\xC7\xE2\x78\xB4\x0D\xE3\xC9\xC9\x0F\xE3\xA0\xDD\x11\xE3\x24\xDB\x59\xE3\xB1\x7B\xBF\xDE\xE9\xE2\x03\x01\x85\xE3\x1C\xDF\x09\xE2\x31\xE3\x03\xE3\x9D\xDB\x05\xE3\x28\xE2\xDE\xDE\x61\xDE\xF5\xE2\xB5\xDE\xF7\xE2\x76\xE2\x2F\xE2\x78\xE2\x80\xE3\x63\xD5\xDD\xC4\xAE\xD8\xD5\xE2\x72\xE3\xA0\xE3\x74\xE3\x96\xDD\x8B\xE3\x77\xE3\xDA\xE1\x30\xD5\x7A\xE3\x32\xD5\xBB\xDD\x34\xD5\xBD\xDD\x36\xD5\xBF\xDD\x3C\xDD\x06\xE0\x71\x0F\x30\xC1\x82\xE2\xB2\xE3\x86\xE2\x6D\xE2\x17\xD6\xA1\xA9\xC2\xE2\x71\xE2\x39\xDE\xE1\xDB\x3B\xDE\x7C\xDB\xDB\xDC\x7E\xDB\xDD\xDC\x2C\xDF\x96\xDB\x25\xDB\x49\xCB\xDA\xD5\x02\xDF\x8C\xA7\x9D\xE3\x72\xDF\x1D\xDF\x88\xE3\x47\xE3\xBF\xE2\x74\xDB\x7A\xDD\x0E\xE2\x22\xDE\x4D\xE3\x24\xDE\x4F\xE3\x06\xD5\x51\xE3\x64\xCE\x53\xE3\x5C\xCB\x55\xE3\x5D\xE2\x57\xE3\x90\xC7\x28\xE3\x7A\xD0\xAD\xD0\x9B\xE2\xC6\xE3\x60\xE3\x76\xDF\xE7\xDA\xCA\xE3\x4B\xE3\xD1\xDD\x37\xE3\x43\xCE\x39\xE3\xCF\xE3\x28\xDF\xD1\xE3\x2A\xDF\x7F\xDB\xE7\xDB\x2D\xDF\x07\xD9\x00\xDF\x9A\x7A\xB7\xD0\x3C\xBB\x7F\xDA\xC9\xD4\x90\x10\x35\xDF\x47\xD9\x00\x00\xDB\xE3\xAB\xDF\x73\xDF\xDE\xE3\x61\xE3\x8A\xE3\xD8\xE1\xB7\xE3\xDE\xE2\xDB\xE1\xE0\xE2\x36\xDD\xE2\xE2\x38\xDD\x47\xDF\xE5\xE2\xD5\xD5\xBF\xD0\xD4\xBC\xC4\xDC\xCD\xD0\x5F\xC8\xC3\xD0\x50\xDF\xD2\xE2\x62\xC5\xF4\xE3\xB9\xE1\x87\xE3\xB3\xE3\x89\xE3\xDC\xDB\x27\xE2\xF4\xDE\x4F\xB4\x8E\xE3\x6C\xB1\x90\xE3\x2A\xDA\xE3\xE2\x41\xDA\x20\xE4\x98\xD8\xD7\xD0\xD5\xBB\xE6\xD0\xBA\xCD\x62\xB4\x79\xAA\x9F\xC5\xD2\xD0\x5C\xD4\xFF\xB3\x09\x01\x11\xE4\x16\x88\xF2\xE1\xC7\xE3\x32\xE3\xC5\xDE\x34\xE3\x70\xE2\x96\xDF\x38\xE3\x98\xDF\x67\xDB\x9A\xDF\x20\xDB\x9C\xDF\x0C\xD5\x9E\xDF\x3C\xD0\x52\xDC\xD1\xD7\x88\xDF\xDA\xC1\x56\xDC\xDF\xCB\xE9\xDD\xD2\xE1\xF5\xE3\xEE\xE2\x15\xE4\x30\xE4\x88\xE2\xA4\xE3\xB1\xDF\xA0\xDE\xB3\xDF\xA2\xDE\xFB\xE1\xA4\xDE\x24\xE3\xA6\xDE\xAD\xE3\x77", +"\xC1\x6A\xDF\x91\xCF\x6B\xDC\xA3\xDF\xAA\xDD\x61\xC5\xA7\xDF\x67\xD6\x68\xE2\x61\xE4\x46\xE3\x63\xE4\x27\xDC\xB6\xE3\xF3\xDC\x65\xE3\xF5\xDC\xB7\xDB\xF7\xDC\x69\xE3\x14\xDD\x6D\xE4\xB9\xDE\x6F\xE4\x9D\xD6\x98\xE3\x6F\xCC\xBE\xDF\x5B\xD3\xA2\xD6\xC1\xDF\xF9\xD0\x8C\xDC\xDD\xBB\xC5\xDF\x54\xD3\x90\xDC\xA5\xBE\x36\x02\xB4\xE1\x32\x88\x1E\xCC\xD9\x03\x92\xE0\xF0\xD3\x92\x25\x37\xD2\x50\x32\x9A\xE0\x1C\x76\x70\x73\x4E\xE0\x3D\xE0\x69\xDA\x99\x0D\x68\x60\x9F\xE4\x7D\x47\x2F\x09\xA4\xE4\x26\xB3\x92\x25\x9F\x6B\x60\x0D\xE1\x36\x9F\x7D\x4A\x47\x09\xE1\x8D\xBC\x1E\xA0\xC2\xA4\x5C\x0A\x3D\xD1\xAB\xE1\x9E\xE1\x0C\x88\x7E\xBE\xE2\xD3\x0A\xC3\x55\xBD\x21\xC2\x30\x71\x23\xC2\x48\x73\xF5\x9F\xA0\x32\x31\xAB\x8E\xC2\xEA\xD2\xB8\xE4\xC5\xE4\x8F\x16\xA4\xBC\x2E\xC2\x9E\xBD\x6B\xBC\xA0\xBD\xB6\xBC\x41\xAB\x00\xBC\xB4\xA5\x27\x01\xB9\xE4\x48\x65\xA7\x6F\x50\xBC\xB1\xBC\x70\xBD\x80\xC2\x1F\xC2\xE2\x8D\x7E\xE0\x28\xC2\x46\x73\x75\xE0\x3B\x96\xA1\x6F\x7A\xBD\x36\xBD\x20\xBC\x96\xC2\xCE\xBD\x98\xC2\xFF\x00\x24\xBC\x5F\xAC\xD7\xE4\x47\x65\xD9\xE4\x4E\xC2\xC9\xBC\x50\xC2\xCB\xBC\xF6\x74\x97\xC2\x4C\xBC\xB9\x63\x55\xC2\x9F\xD0\xD6\xE4\xCB\xE4\xE5\xE4\xC0\xBD\x6D\x0C\xD7\xBC\xCF\xE4\xD8\xD1\xD1\xE4\xB9\xBD\xB2\x8E\xD5\xA4\xEF\xE4\xF0\x9B\xAC\xE1\x3B\x09\xAB\x8D\x6A\xC2\x8B\xC2\x04\xBD\x2A\xA5\x84\xC2\x08\xE5\x81\xE0\xCC\xE4\xB0\xBC\x80\x08\xA9\xBD\x2F\xC2\xB8\xBD\x76\xC2\x3C\xA0\xF3\xBC\x07\xE5\xFD\xE4\x43\x0A\xDA\xE4\xC6\x87\x9A\xAB\xE9\xE4\x53\xC2\xEB\xE4\x5E\xAC\xA7\xD0\x12\xE5\x1C\xD3\x1B\x96\xF7\x02\x33\xBC\x5C\xBC\x51\xC2\xF6\xE4\xEA\xE4\xF8\xE4\xC6\xBD\x11\xE5\x1E\xE5\x2B\xE5\x90\xBD\x4E\x8B\x69\xBC\x02\xE5\x66\xBD\xDB\xBC\xAD\xA0\x90\x10\x70\xBC\xA3\xC2\xFC\xE4\xE3\xE4\x69\x9E\x8F\x16\x64\xA5\xA2\xC2\xAA\xDC\x77\x6A\x28\xE5\x6A\xD3\x6E\xD3\xF7\x02\xCC\xAB\xD0\xD2\xCD\xD2\xCA\xE4\x41\xE5\x5A\x6F\x43\xE5\xD4\xAB\xA5\xE1\xD4\xE4\x75\xD0\x07\x6D\x48\xE5\x3F\x9D\x97\xE1\xD7\x6E\x23\xD9\xA0\xA0\x27\xBD\xE3\xAB\xB7\xC2\xB1\xE1\xEB\xCF\xB6\xE4\x56\xE5\x2B\x6B\x5B\xD1\x6A\xE2\x86\x35\xB2\x26\x87\x75\xA6\xE0\xA2\xA4\x6D\x38\xF5\xBB\xBF\xE4\x60\xE5\x56\xBD\x22\xC2\xED\xAB\x5C\x0A\x66\xE5\x84\xE2\x68\xE5\xB3\x08\x6A\xE5\x87\xAB\xA2\xE0\x16\xE0\x65\x38\xC7\xE4\xD6\xAB\xD4\xD0\x65\xE5\x5E\xE3\xCC\xE0\xCD\x75\x6B\xE5\x75\xA3\x8F\xA1\xCD\xE4\x06\xBC\xDD\xE4\xD2\xE4\x44\x0F\x33\xC2\x36\x90\xCF\x67\x75\xE5\x9D\xE2\x42\x6F\x78\x08\x79\xE5\x95\xAB\xEB\xA3\x87\xE5\x15\xE5\xB2\xBC\x29\xBC\xB4\xBC\x5F\xC2\x81\xC2\x45\xBC\xE0\xE4\xC9\xA5\x09\x01\x90\xE5\xBB\xE2\x92\xE5\x85\x07\x94\xE5\xE4\xBB\x6C\xE5\x4D\x33\xF9\xA4\xE7\xE4\x7C\xBD\x23\xE5\x89\xBD\x8B\xE5\x80\xBD\xC8\xE4\x68\x90\x30\x40\x82\xE5\xA8\x23\xA6\xE5\x49\x65\x93\xA3\x62\x01\x64\xAB\x4F\xC2\x5C\xC2\xAE\x74\x48\xD3\x50\xAC\x7E\xBD\x3D\xC2\xF9\xE4\x53\x71\xC8\xD0\xA2\xE5\xD7\xE2\x77\xE5\x93\xE5\x84\xE5\x7A\xE5\x22\xE0\x00\x41\x33\xBC\x01\xE5\x9A\xE5\x9F\xBD\xB5\xBC\x05\xE5\x98\xBD\x01\xA5\xC4\xE5\xB4\xE5\x69\xE5\xC9\xE5\x95\xE5\x7A\xA4\x8B\x3B\x7E\xAB\x9D\x70\x80\xAB\x18\xE5\x75\xC2\x3B\xE5\xE2\x8D\x6D\xC2\x8E\xE5\x11\x66\xC5\xE5\xEC\xE2\xC7\xE5\xA5\xE5\xD8\xE5\xA7\xE5\x86\xE5\xDB\xE5\x15\xE5\x4E\xAC\xAD\xE5\x04\xE5\x1A\xE5\x34\xA5\xC3\xE5\x8F\xE5\xD6\xE5\x78\xE5\xEA\xE5\xB7\xE5\xA8\xE5\x51\x33\x20\xE5\xD6\x8E\xDF\xE5\xF7\xE4\xC2\xBC\x36\x75\xF4\xE5\xE5\xE5\xF6\xE5\xC8\xE5\xFC\x16\x85\xE5\x96\xE5\xED\xE5\xC9\xBD\x5B\xBC\x9B\xA0\x39\xE5\x30\xC2\xE1\xE5\x40\xA5\x63\xBC\x47\x65\xD5\xE5\x2C\xE4\x8E\xDF\xB5\xE5\xF8\xE5\x48\x65\xB8\xE5\x60\x06\x36\xE5\xCB\xBD\x2E\xE5\x9D\xCD\xAE\xE5\xD2\xE5\x5D\xA5\xD1\xBD\x7C\xC3\x74\xE5\x04\xE6\xE9\xE5\x06\xE6\xCA\xE5\xB3\xA3\x8B\x3B\x44\xE5\x1D\xE0\x2E\xBD\x7D\x69\xE6\xE5\x17\xE3\xE8\xE5\x22\x08\xB6\xE5\x18\xE6\xFA\xE5\x7D\xE5\x7D\xAC\x4D\xE5\x16\xE1\x79\x69\x2F\xE6\x44\xE3\xA4\xE5\x32\xE6\x17\xE6\x47\x65\x19\xE6\xAD\xC2\x54\xE5\x27\xC2\xA0\xE5\xB8\x46\x25\xE6\x3E\xE6\x27\xE6\xD9\xE5\xCE\xA3\xA0\x3E\xB3\xC2\x05\x75\xEC\xBD\x22\x8F\x0F\xE6\x7F\xA5\xF6\x95\x90\xE0\x3D\x06\x53\xE1\x7A\x0F\x51\x73\x5E\xE1\x9B\x28\x93\xD1\xB5\x98\x5E\x00\x7F\x72\xB9\xD1\x83\x02\x9F\x6B\xE2\x0B\x35\x5E\xCA\xB0\x37\x65\x71\x03\xE8\x66\x59\xE6\x9B\x33\x61\xE1\x18\x00\x66\x6C\x5F\xE6\x32\x02\x61\xE6\x6B", +"\x0A\x63\xE6\x3C\x70\xE1\x07\x4A\x63\xA8\x03\xD6\x66\xB0\xE0\x8D\xB0\x61\xE1\x77\xE6\xD4\xE1\x27\x33\x2B\x04\x6F\xE6\x86\x11\x71\xE6\x41\xE0\xAA\x14\xDE\x37\x50\xE1\x24\x7A\x19\x00\x73\xE1\x03\xBE\x0E\x2C\x70\x73\xC9\x4A\xB7\x73\xED\xA6\x71\xCE\xF7\xB0\x2F\xE1\x4A\x01\x7E\xE6\xDC\x11\x80\xE6\x8D\xD6\xCC\xA5\x52\x4A\xD6\x66\xB7\x7C\x42\x10\xC4\x7B\xB7\x73\xEF\xBA\x7A\xBB\x4A\xA6\x9E\x3B\x92\xE6\x6A\x13\x94\xE6\x25\xE4\x29\x8F\x54\xE6\x90\x25\xFA\xBB\x4B\xDA\x64\x34\xFC\x48\x37\xD2\xF5\x3B\xA1\xE4\x66\x5A\x68\xE6\x01\x01\x1B\x00\x8D\xD2\xA6\xE4\xAB\xE6\xE6\xB6\xFC\x48\x2F\x09\xB2\xE6\x09\xD1\xF5\x3B\xA1\xE6\x7A\x63\xD8\x44\x80\x0A\x1C\x01\xB3\xE2\x12\xD2\xD1\xE0\x4F\xE1\x71\xD1\x9A\xE4\xB6\x5C\x9C\xE4\x33\xAF\xF9\x63\x7E\xD3\xBB\xD2\xFA\x8D\xDB\x1C\x54\xE1\x06\x01\xD4\xD1\xEE\x7D\xDF\xD1\x12\xD3\x2A\xBB\x8C\x0A\x23\xDD\x6D\x5F\x64\x9B\x64\xC2\xFF\x92\x7A\xE1\x8B\x45\xD6\x66\x8A\xD2\x12\xBD\x94\xD2\xD4\xE6\x95\xB6\xCA\xE6\x39\xD3\xCC\xE6\x25\xD2\x93\xD2\x66\x6C\x8D\x34\xF3\xB0\x5F\x09\xEB\x57\x99\xD2\xFF\x92\xC5\xE6\x3C\x0F\x51\x8F\xE1\xE6\xFA\x6B\x54\xE6\x1D\x00\xC8\xE6\x19\xB0\xE4\xE6\x2F\x7D\xE7\x72\x88\xE6\xD0\xE6\xD5\xD1\xA5\xE4\x8B\xBA\xF9\xE6\xEE\xE6\xB6\x91\xDE\xD1\x7F\x72\x8D\x34\xDC\xE6\xD7\x99\x89\xD2\x70\x73\xF3\xE6\xE6\xE6\xF1\xDB\x01\xE7\x32\x6F\xFF\x92\xE8\xE6\xC2\x95\x66\x00\xEB\xE6\x8B\x0A\xED\xE6\x0F\xE7\xB6\x91\x84\xE6\x61\x85\x1E\x00\x53\xE1\xEF\xDF\xFD\xE6\xD2\xE6\x5B\xE6\xBD\x73\xD3\xE6\xCE\xE0\x11\xD2\x4D\x55\x07\xE7\x40\xDB\xC1\xE0\x51\xE0\xF9\xD1\x31\xE0\xE2\xDF\x6F\x96\x1D\x60\xCB\xE6\x87\xDF\x92\xA8\xC2\xE6\x1E\xAB\xC6\xE6\x01\x01\x1F\x00\x1C\xE7\xFC\xE6\x03\x01\xD1\xE6\x2D\xBE\x20\xE7\xF8\x9B\x22\xE7\x23\xE2\x32\xDE\x13\x07\x26\xE7\x3E\xD4\x19\xE7\xCE\x78\x20\x00\xF7\xE6\x4A\x65\x21\xDD\x08\x3D\xDB\xD2\xDF\x5F\x3A\x3B\xAE\xE6\x6C\x56\xEE\x7D\x60\xD3\x60\x65\x49\xE7\xF1\x5F\x4B\xE7\xC6\x6F\xFD\x60\x72\x00\x93\xD2\x60\x65\x4C\xE7\x1F\x33\xD9\xD2\x1D\xD3\xDB\xD2\xCE\x6F\xB2\xE0\xFD\x79\x21\x00\x47\xE7\xB6\xAC\xE7\x04\x2B\x64\x49\xD2\xD3\x5A\x5A\x06\x4E\xE7\x01\x01\x22\x00\xB0\xE6\x00\x00\x6D\xE7\xFF\xE6\x5D\xDA\x64\x4E\x8A\xDC\xBB\x58\x64\x4E\x2F\x09\x70\xE7\xA5\xC6\x75\xE7\x45\x49\xBC\xE6\xA6\x9A\xBE\xE6\x27\x3F\x3A\x0F\x66\x9A\x71\xE1\x24\x7A\x23\x00\x37\xE7\x22\xCC\x08\x9B\xCD\xD2\x7E\x96\xB7\x73\xB5\xDC\xF8\xD2\xB6\xDA\x16\x01\x9F\x6B\x0B\x09\x63\x5F\xEE\xD2\xF0\x99\x82\xE7\x61\x85\x84\xE7\x78\x75\x67\xE5\x6A\x13\x9E\x3D\xEB\xD3\xD7\x99\x1D\xE7\xDD\x9A\x12\xBD\x7E\x96\xD7\xD1\xE2\x0B\x9A\xE7\x6C\xD3\xF7\xD9\x07\xD7\x2F\x09\x8B\xE7\x82\xD3\x07\xD7\x8F\xE7\xA5\x09\x91\xE7\x4B\xD3\x86\x01\x2C\x70\x66\x69\xAD\x6F\x7A\x37\xE8\xDE\xB9\x63\x7E\x96\x7F\xD2\x70\x73\x98\xE7\x7A\x63\xA3\xE7\xF6\xD9\xEC\xD3\xB4\xE7\xC0\x79\x96\xE7\xBE\xE7\x3B\x66\x98\xB0\x88\xE7\xF0\x7D\xA8\xE7\xA5\xE7\x1F\xDA\xAB\xE7\x41\x0D\xAD\xE7\x7C\xD2\xB4\x7C\xCD\xB0\x81\x78\xC0\xE7\xE8\xD3\x76\xE5\x99\xE7\x89\x45\x2F\xE7\xC7\xE7\x8D\xE7\x8D\x01\x9D\xE7\x28\x9A\x70\x73\xA0\xE7\x2F\xE3\xBB\xE7\x01\xD3\xD6\xE7\xFE\xD9\xD4\x07\xC3\xE7\x1E\xDA\xD7\xE7\xC9\xE7\x5E\x0E\xCB\xE7\x91\xD2\x0F\x71\x66\x69\xB6\xE7\x64\xE7\x36\xE2\x86\x11\xDE\xE7\x15\xD3\xE0\xE7\xD9\xDB\x3A\xE1\x24\x7A\x26\x00\xED\xE7\x5D\xBE\x5B\x0D\xA1\xE0\x20\x5B\x63\x01\xD9\xE7\x81\x7F\xA3\xE4\x2C\xE6\x49\xD2\x8A\x60\x40\xE0\x95\xE6\x85\xD8\xD6\x01\xAB\xE4\xDD\xD5\xD6\x01\xAF\xE4\x9F\x12\x72\x0D\xB2\xE4\x35\x5B\x44\xE7\xC0\x79\x27\x00\xF7\xE7\xAF\xD2\xEA\xD9\x50\x08\x17\x2B\x1A\xAB\x48\xE4\xAC\xDF\xCA\xD2\xFD\xE7\x50\x79\xF1\xDF\xD6\xD1\x60\x65\x93\x64\x57\x41\x34\xE0\x0B\xD3\x2C\xE0\xB3\x08\xA5\xE0\x14\xE6\xCB\xE0\xA8\x23\x7A\xE1\xA1\xA6\xC2\x7C\x0F\xE8\x40\x7A\xC0\x4F\xA8\xE6\x25\xD9\x5D\xBB\xC1\x3E\xA1\xE0\x7D\x61\x43\x6F\x1B\xE8\xF5\x00\x1D\xE8\x71\xE7\x4E\x90\x9B\x64\x8E\x33\xED\xAA\xF8\xC2\xC1\x3E\x26\xE8\x26\xB3\xC1\x3E\x2A\xE8\xE6\xA6\x20\x7C\xE8\xA6\xA6\xDC\xE5\xD3\x06\x01\x29\x00\x98\xE4\x8C\xE0\x05\x7E\x71\xDD\x3E\xD8\xBE\x5F\x12\xE7\x39\xE2\x2D\xC9\x95\xDF\x26\xDA\x97\xDF\xF8\xDE\x99\xDF\xFA\xDE\x9B\xDF\xFC\xDE\x54\xBE\x5F\xE2\xDD\xDD\x2D\xE6\xF6\xA0\xE5\xDC\xA3\xB8\x3B\x8F\x3C\x0F\xD0\xE1\x72\xDD\x09\x01\xC9\x3C\x5D\x8F\x8A\x94\x87\xE2\x3D\xDF\x06\xE3\x55\xE8\x5F", +"\xDF\x57\xE8\x8E\xE2\x59\xE8\x90\xE2\x5B\xE8\x92\xE2\x5D\xE8\xE3\xE1\x5F\xDA\xE5\xE1\xCB\xE1\xE0\xD6\x9C\xCD\x99\x90\xD4\xD9\xAE\xDD\x68\xE8\x9C\x95\xB4\xE3\x62\xDD\x0B\xDE\x7F\xE4\x78\xE3\x98\xD5\xBA\xE3\x9A\xD5\xBC\xE3\x9C\xD5\xBE\xE3\x9E\xD5\xC0\xE3\x46\xE2\x3F\x0F\x02\xE2\xD8\x91\x4B\xE1\xED\xD3\xDD\xB8\xDD\xC5\x69\xE8\x03\x91\x6B\xE8\xC8\xE3\xF3\xDB\x6F\xE2\xF5\xDB\x58\xD7\x8D\xE2\x0A\xE3\x8F\xE2\x62\xDC\x91\xE2\x23\xD8\x93\xE2\x3E\xC0\x86\x9C\x05\xD4\x5A\xC6\x07\xD4\xA4\xDF\x5A\x8F\x1A\xDA\x2F\xDE\x81\xE8\x52\xE8\x6C\xE8\x93\xDF\x6E\xE8\xCB\xE3\x4F\xE4\xFD\xE3\x51\xE4\xD9\xDC\x53\xE4\x65\xDF\x55\xE4\x34\xD7\xB1\xA8\x37\xD7\x88\xBD\x5C\x0A\x98\xE8\x72\xA0\x9A\xE8\x4B\xE4\x0C\xE2\xF9\xE3\xE3\xE3\x4C\xE3\xFC\xE3\x2B\xD7\xFE\xE3\xC2\xE1\x3C\xDE\x90\xDE\x3E\xDE\x10\xE3\x68\xDF\x08\x6E\x7B\xBF\xAD\xD3\x11\xC3\x07\x6D\xC2\xE8\xDA\xE6\x1D\x95\x9B\xE8\x36\xDE\xF4\xDB\x5D\xDC\x9F\xE8\xE7\xE3\xCE\xD5\xE9\xE3\xB5\xD5\xEB\xE3\xB2\xCB\xED\xE3\xB0\xD9\x78\xE8\xAD\xAC\x5F\xE8\xF0\xB4\x67\xD7\x63\xDA\xE7\xDC\x71\x0F\x65\xDA\x65\xD9\x03\x01\xD8\xE8\x09\x92\xDA\xE8\xC5\xE8\x6E\xE2\xC8\xD8\x4E\xE4\x56\xE8\x50\xE4\x58\xE8\x52\xE4\x5A\xE8\x54\xE4\x5C\xE8\xBD\xE8\x4B\xD0\xEE\xC6\x81\xD7\xBE\xBF\x4D\xDF\x50\xD0\x01\xDE\x0C\xE4\x94\xAD\x79\xD4\x79\x69\xF3\xE8\x2C\x92\xC4\xE8\xA1\xE3\x09\xDF\xA3\xE3\x32\xE4\x02\xB5\x34\xE4\x1B\xB2\x36\xE4\x3F\xDA\x38\xE4\x4F\xDB\x3A\xE4\x2E\xDA\x90\xE8\x1E\xE6\x96\xE2\x29\xE4\xC5\xDD\x36\xDF\xB0\xE8\x1C\x95\x97\x93\xB2\xE8\xA2\xE2\xE2\xE3\xA4\xE2\x0F\xE2\xCA\xE8\xE5\xD8\xCC\xE8\x58\xE2\xCE\xE8\xD2\xD8\x5B\xE2\x94\xCB\xD2\xE8\xAC\x89\xA8\xDA\xAD\xB9\x40\xD9\xBD\xC6\xCB\xDA\xB7\xD7\xE3\xBF\xB1\xDA\x22\xE9\x92\xDC\xB1\xE8\xDB\xE8\x22\xDF\xBE\xE1\x24\xDF\xCD\xE3\x26\xDF\x3A\xE3\x75\xE2\x3C\xE3\x81\xDF\x3E\xE3\x83\xDF\x7A\xE2\x3D\xE4\x8D\xA8\xCD\x4D\x81\x9D\x7D\xDA\x85\xD7\x0B\xE4\x12\xC7\x03\xDE\xCF\xDA\x02\x01\x0D\xE9\x64\xE5\x0F\xE9\x83\xE8\xB9\xDA\x85\xE8\xF1\xDD\x80\xE4\xF3\xDD\x82\xE4\xF5\xDD\x84\xE4\xF7\xDD\x7E\xE3\xF9\xDD\x79\xE2\x36\xD7\xE0\xDA\x40\xC0\x55\xD8\x58\xE9\x7C\x92\x5A\xE9\x2F\xE4\x7D\xE4\x17\xE4\x86\xE8\xB8\xE3\x08\xD8\x89\xE8\x0A\xD8\x8B\xE8\x0C\xD8\x9D\xD5\x0E\xD8\xBD\xDB\xEA\x8F\x2E\xDE\x56\xE9\x01\x01\x6C\xE9\x85\xAC\x25\xD2\x53\xE8\xD1\xCE\x07\xE3\x3A\xDA\x09\xE3\x00\xCD\x0B\xE3\xC2\xCC\x92\xE3\xD1\xCB\x94\xE3\xDB\xDD\x33\xE9\x68\x88\x13\xE3\x80\xE7\xCF\x67\x80\xE9\xB9\xBC\x82\xE9\x26\xE9\x49\xE3\xB4\xE8\xFA\xE3\xC3\xE2\xE5\xE3\x8C\xE2\xE0\xE8\xFF\xD5\x2F\xE9\xEA\xD8\x31\xE9\xB4\xCB\x8F\xE9\x27\xD8\xD2\xDB\x96\xD9\xA0\x80\x2B\xE3\x7F\xAE\x58\xDE\xF2\xE8\x82\xE8\x6F\xE9\xB4\xDD\x31\xE4\x8C\xE3\x33\xE4\x4F\xDD\xD7\xDC\x17\xE9\x28\xDE\x19\xE9\xA7\xDB\x1B\xE9\x25\xA9\x69\xDE\x22\xB3\x50\xE8\x23\xE9\x6A\xE8\xF5\xE8\x10\xE9\x4D\xD9\x0A\xDF\x13\xE9\x4C\xB5\x15\xE9\xE0\xB2\xB5\xE9\x63\xDF\xC9\xE2\x64\xDC\xCB\xE2\x2B\xC1\x4A\xDF\xA3\xD0\x0D\xCF\x44\x9E\xCF\x6D\x8B\x9D\x94\xE9\x2C\xD0\x9A\xD2\x83\xE9\x43\xD4\x9A\xE9\xCC\xE3\xC0\xE1\x3A\xDE\xCD\xE8\xD0\xE3\x3D\xDE\xD2\xE3\x67\xDF\x6C\xDB\xA2\xC6\xCD\xC0\x5C\xA2\xD4\xE9\xAF\xBD\xCD\xE6\xC3\x95\xF7\xE3\x51\xE2\xC7\xE8\x29\xE9\xE4\xE3\x2B\xE9\x64\xDB\x2D\xE9\x50\xE3\x59\xE2\x97\xCE\xA2\xE9\xC8\xCC\xD4\xE3\xA2\xC6\x83\xE3\x97\xE8\xAD\xE9\xDF\xE3\x62\xE3\x89\xD9\xB1\xE9\x14\xE9\xB3\xE9\xA7\xE2\x44\xDF\xA5\xDB\xB7\xE9\xFC\xDB\xB9\xE9\x51\xDB\xD6\xD5\xA6\xE9\x55\xDB\x8D\xD5\xA3\x9E\xD3\xE9\xFB\xE9\x7C\xE4\xAF\xE9\x65\xE4\xC4\xE9\x8D\xB5\xC6\xE9\x14\xB3\xC8\xE9\x0C\xE3\xCA\xE9\x17\xE2\x07\xEA\xA9\xDB\x9C\xCE\xAD\xD8\xD5\xDE\x9B\xE3\x57\xE9\x0F\xEA\xEA\xE9\x33\xE3\xEC\xE9\x35\xE3\xA5\xE2\x01\xEA\x8F\xE3\x03\xEA\xFA\xDB\x05\xEA\x31\xDC\x1B\xEA\xFE\xDB\xE7\xE2\x41\x65\x38\x7C\x06\x49\x2D\x70\x9D\xD0\xC1\xDB\x82\xDA\xE6\xE9\x02\xE7\x25\xE9\x40\xE9\xF1\xE2\x23\xDF\x0C\xDF\x72\xE2\x2B\xE2\x74\xE2\xB6\xDE\xAA\xE3\x86\xE4\xE5\xDE\x88\xE4\xBB\xDE\x0A\xEA\xBD\xDE\x01\xDF\xEF\xA9\x4D\x8B\x38\xEA\x17\xE7\x3A\xEA\xF6\xE8\xC9\xE3\xE8\xAC\xB5\xE8\xFA\xE8\xB7\xE8\xFC\xE8\xB9\xE8\xFE\xE8\xBB\xE8\x00\xE9\x11\xDA\xFE\xDE\xF1\xE3\xB6\xE2\x65\xC1\x66\xE2\x7A\xD9\xD7\xE8\x22\xEA\x08\xDF\xC2\xE9\x12\xE9\xFF\xE9\xC5\xE9\x28\xEA\x35\xE4\x2A\xEA\x52\xDD\x2C\xEA\x54\xDD\x2E\xEA\x16", +"\xDC\x3C\xE4\x71\xC2\x43\x9F\x76\xC8\x0A\xD9\x04\xDC\x0C\xD6\x53\xE9\x18\x95\x5F\xE4\x7F\xE9\x63\xEA\xB1\xDB\xDF\xD8\x66\xEA\x18\xE4\x8D\xE3\x69\xEA\x16\xE9\x6B\xEA\x41\xE2\x6D\xEA\x2A\xDE\x6F\xEA\x33\xDC\x71\xEA\x7C\xC2\x61\x8C\xF8\xCB\x43\x0F\x2B\xD6\x1E\xDC\x98\xE2\x9E\xCB\x2A\xE4\x7A\xEA\x00\x00\x4D\xEA\xEA\xD2\x6E\xE9\xFC\xE9\x16\xE4\xB0\xE9\x80\xEA\xB2\xE9\x4B\xDE\xB4\xE9\x84\xEA\xA9\xE2\x86\xEA\x50\xDE\x46\xD6\x34\xD4\x8A\xEA\xF4\xD0\x3E\xE4\x4D\xDF\x40\xE4\x6D\xDF\x52\xDF\xBA\xC1\xB8\xE2\x7D\x69\x96\xEA\x45\x91\x98\xEA\x10\xEA\x75\xE3\x7E\xE4\x5E\xE9\x87\xE8\xBD\xDA\x75\xE9\xBF\xDA\x7C\xE3\xBE\xD4\x65\xE9\x14\xDE\x46\xEA\x76\xD9\x7F\xD7\xEB\xAF\x7D\xDE\x78\xE4\x5F\xD9\x5C\xE4\x78\xEA\x7D\xCF\x94\xEA\xB0\xEA\xC1\x8D\xD6\xE9\x97\xE9\xF0\xDD\x64\xDD\x67\xE4\xDF\xDE\x69\xE4\xE1\xDE\x6B\xE4\xE3\xDE\x44\xEA\x13\xDF\xBF\xEA\x77\xCF\x71\xE4\x6A\xDC\x0F\x0D\x6C\xDC\xAC\xE8\x90\xB9\xBF\xBB\xEC\xD0\x23\xE7\x2B\x6B\xCA\xEA\x0C\xE7\xB2\xEA\x23\xEA\x4C\xE4\x25\xEA\xF9\xE8\x70\xE8\xFB\xE8\x72\xE8\xFD\xE8\x74\xE8\xFF\xE8\x76\xE8\x01\xE9\x38\xB7\x54\xDE\x0C\xA0\x98\xD9\x9D\xD9\x0D\xD2\x9B\xD9\xB5\xCF\xF7\xEA\x5A\x91\xD5\xE8\x03\xD7\x77\x6A\xED\x00\x73\xDC\x77\xDD\x9A\xEA\x12\xEA\x67\xEA\x14\xEA\x82\xEA\xC7\xE9\xA0\xEA\xC8\xE2\xA2\xEA\xD0\xDE\xA4\xEA\xBD\xD6\xDF\xDC\xBF\xD6\xE4\xE1\x65\xD7\x7B\xE8\xD2\xC2\xD1\xCC\xAB\xDB\x44\xA7\xFD\xEA\x29\xDD\x07\x6D\x00\xEB\x59\xDC\xCD\xEA\x1C\xE3\x72\xE9\x19\xE4\xB9\xE3\x1B\xE4\xBA\xDD\x1D\xE4\xBC\xDD\xBB\xD6\x0D\xEB\xBD\x87\x5E\xE8\x7A\xE8\x57\xCD\x61\xE8\x01\xDD\xEA\xE1\xD1\xD9\x04\xDD\xEE\xE1\x82\xDA\x1B\xEB\x9D\xDC\x07\xDF\x7D\xEA\x16\xDB\xC3\xE9\x05\xEB\x7F\xB6\x15\xEA\x53\xB4\x17\xEA\x8A\xE9\x19\xEA\x54\xE3\xCC\xE9\xCE\xC9\xC1\xE3\x19\xDD\x36\xC6\x1B\xDD\xF5\xCF\x05\xE2\xEE\xD3\xF2\xC4\x33\xEB\xD8\xD9\x2F\xD9\xCB\xDD\x02\xEB\x64\xE4\x6D\xE8\x66\xE4\x1E\xE3\xB2\xDF\x67\xE3\x10\xDE\x63\xE9\x12\xDE\xBD\xEA\xB8\xDF\xD8\xEA\x5A\xC9\xF1\xD9\x15\xDA\x19\xD7\xFF\xCF\x7F\xE2\x81\xC5\xAE\xE8\x7E\xE9\x26\x79\x01\xEB\xEE\xDD\x03\xEB\x51\xEB\x13\xEA\x3A\xEB\x07\xEB\x16\xEA\x09\xEB\x91\xE3\x3F\xEB\xEC\xE3\x41\xEB\x83\xCA\x07\xD0\xC8\xDF\x27\xCD\x05\xBA\x4B\xEB\xFD\xD9\x43\xDC\x1D\xEB\x63\xE3\x1F\xEB\x81\xEA\x9E\xEA\x02\xEA\xE1\xE2\x4E\xDE\x0B\xEB\x43\xE2\x27\xEB\x52\xDE\xA2\xD0\x66\xC3\x18\xEB\xA6\x92\xFF\xEA\x66\xEB\x91\xDF\xE0\xE3\x6F\xD8\x6A\xEB\x72\xBA\x3B\xEB\xD5\xCE\x3D\xEB\x94\xCD\x70\xEB\xE5\xE8\x72\xEB\x98\xBF\xE8\xE8\x66\xAD\xEA\xE8\xA0\xB8\xEC\xE8\x17\x66\x80\xC3\xE4\xB1\x5B\xCD\xAE\xEA\x79\x69\x78\xEB\xE4\xE7\xE1\xE7\x90\xDF\xAB\xBA\x48\xE3\xCE\xEA\x9E\xDE\xD0\xEA\xA6\xE3\xD2\xEA\xF6\xE2\xD4\xEA\x11\xDF\xD6\xEA\x30\xE2\x5B\xEB\xC3\xD3\x4D\xE9\xA5\xDD\x79\xCD\x51\xE9\x39\xE9\x29\xE4\x81\xE2\xEA\xDC\xA5\xEB\x33\xDA\x87\xDB\x3B\xEA\x5D\xE9\xCF\xEA\x53\xEB\x68\xE4\x55\xEB\xB4\xDF\x57\xEB\xB6\xDF\x59\xEB\xFE\xE1\x7B\xE9\x06\xC3\xE0\xBF\x9D\xD7\x75\xE4\xA5\xDF\x21\xE9\x0F\xE4\xBF\xEB\xA9\xE6\xD7\xE7\xD7\xE9\xE1\xD8\x85\xE9\x3D\xE2\x87\xE9\x1F\xD6\x89\xE9\x95\xEB\x83\xEB\xAB\xE2\x88\xEA\x56\xDD\xCD\xE2\xC1\xEA\xDF\xDD\xA9\xDA\xB1\xE2\x47\xE1\xB3\xE2\x6B\xB2\xDE\xEA\x2E\xD6\x01\xC0\x87\xC5\xD5\xEB\xA6\xE4\xBC\xD9\xC2\xEB\x76\xE3\x7D\xEB\x9D\xEA\xDF\xE2\x4C\xDE\x81\xEB\xCE\xDE\xE0\xEB\xCA\xE2\xE2\xEB\x2C\xDE\x3B\xD0\xDE\xDD\xFD\xDD\x86\xDF\xBB\xCD\xBB\xEB\x44\xD9\xD3\xE2\xCB\xD4\x77\xEB\x8C\xEB\xA9\xEB\x8E\xEB\x9C\xDA\xB0\xDF\xC5\xEB\xD1\xEA\xC7\xEB\x6A\xE4\xC9\xEB\xFC\xE1\xCB\xEB\xFA\xE2\xCD\xEB\xF6\xCD\x69\xE9\xB6\xB2\x5C\xA2\xF0\xEB\x99\xDA\xD7\xEB\x7B\xEB\xFE\xE9\x9C\xEA\x00\xEA\x7F\xEB\x29\xEA\xF9\xEB\x45\xDF\x1E\xE4\xE4\xE2\x85\xEB\xD2\xDE\x5F\xD0\x44\x0F\x61\xD0\x8B\x9D\x1B\xEC\xB5\xDA\xA7\xEB\xD8\xEB\xA3\xE2\x26\xEA\x2A\xE9\x92\xEB\x9E\xD4\x6E\xEB\x37\xE4\x26\xEC\x39\xE4\x28\xEC\x45\xE2\xB0\xA2\x54\xC7\xDD\xC5\x2E\xEC\xE4\xDA\xC1\xEB\x50\xEA\x9C\xE8\xF8\xE8\x9E\xE8\xEC\xDA\xA0\xE8\x88\xE9\xA2\xE8\x15\xE2\xA4\xE8\xD4\xD8\xA6\xE8\x84\xC0\xF4\xEA\x5A\x8D\x2B\xD8\x07\xB3\xF8\x75\x09\xEC\xD5\xE6\xAA\xEB\x1E\xEB\xB6\xEA\x73\xE9\x0F\xDC\x22\xEB\xDD\xE1\x77\xE9\xDF\xE1\x79\xE9\xC3\xDA\x37\xD5\xBB\xE9\x4D\x8B\x40\xEC\x13\xDB\x42\xEC\xC1\xE9\x01\xDA\x7F\xEA\xF5\xEB\x21\xEC\xF7\xEB\x9F\xEA\x24\xEC\x04", +"\xEA\x39\xEC\x1A\xE9\x3B\xEC\xE6\xE2\x09\xEA\xBB\xDF\x51\xD8\xBA\xCA\x7F\xDE\x5C\xE3\x96\xDC\x1C\xEB\xF3\xEB\xB5\xEA\xC4\xEB\x5F\xE9\x1F\xE3\x61\xE9\xFA\xE1\x12\xEC\x6C\xE4\x14\xEC\x25\xE3\x16\xEC\x67\xD8\x64\xD5\x96\xDE\x08\xEC\x7C\xEC\x43\xEC\xDC\xE8\x9D\xE8\xDE\xE8\x47\xEC\x9E\xE9\x5C\xD7\xA0\xE9\xF2\xDA\xF5\xE9\x75\xCD\xE2\xE9\xC7\xD6\xF9\xE9\x4A\xEB\x55\xEC\xC4\xBB\x0B\xEC\x45\xDC\xF2\xE2\xA5\xE3\x2A\xE2\xA7\xE3\x0F\xDF\xB1\xEB\x2E\xE2\xB3\xEB\xAC\xE3\x88\xEC\x27\xE3\x48\xEA\x17\xDF\x67\xC7\x9A\xE3\xFA\xDA\x7B\xEC\x34\xEB\x1F\xDF\xE7\xEA\xC6\xE8\x52\xEA\xD9\xE9\xB6\xE8\xCB\xE8\xB8\xE8\xD7\xDD\xBA\xE8\x0E\xE3\xBC\xE8\x5B\xEA\x81\xD0\xAF\xE3\x1F\xEA\xB0\xEC\xC0\x77\x9D\xEC\x96\xD2\x57\xEC\x7C\xEB\x59\xEC\x20\xEB\x74\xE9\x5C\xEC\x7B\xE3\x5E\xEC\x7D\xE3\x60\xEC\xBC\xDB\x8F\xE8\x42\x91\x53\xE0\xC3\xE3\x9E\xD0\x4F\xC4\x65\xEC\x2C\xDB\x67\xEC\x5B\xE9\xB2\xDB\x1F\xEC\x6B\xEC\x68\xEA\x22\xEC\x6A\xEA\x6F\xEC\x2B\xEA\x71\xEC\xB8\xE9\x73\xEC\x21\xE4\x63\xC4\x79\xD0\x07\xBB\xD8\xE3\x4B\xEA\x8C\xA7\xD8\xEC\x3F\xDB\x13\xD5\x8E\xEC\x41\xE9\xDD\xE8\x38\xDE\xDB\xE9\xCE\xE3\xDD\xE9\x00\xE4\xDF\xE9\x02\xE4\xD3\xE3\x04\xE4\xD5\xE3\x8A\xE4\xED\xD5\x71\x0F\x19\xDF\xF1\xE8\x42\x78\xC5\xEC\x16\xC1\xC7\xEC\xDD\xEC\xC9\xEC\x7E\xEB\x6D\xEC\x80\xEB\x1C\xE4\x82\xEB\xE4\xEC\x06\xEA\xE6\xEC\x3B\xE4\x22\xE4\x6D\xBD\xD3\xB0\x74\xEA\xCA\xB7\x0B\xD9\x2F\xAA\x5D\xE4\x0D\xE4\xEF\xEB\x04\xED\x6A\xC1\x9F\xEC\x5B\xDC\xF3\xEC\xBF\xE1\xDF\xE8\x12\xE2\xF2\xE9\x95\xEC\x9E\xDD\xD0\xE8\x95\xE3\xA4\xE9\xB7\xBB\x2E\xDF\xB2\xE2\x7F\x05\x26\xD9\x4E\xAA\x51\xDF\xA9\xB7\x63\xC5\x02\xED\x9A\x78\x1C\xED\xBE\xC1\x50\xEB\xB3\xE8\x52\xEB\x80\xEC\x54\xEB\x82\xEC\x21\xE3\xBB\xEA\xC1\xDA\xD0\xEC\xE1\xE1\xD2\xEC\x74\xC8\xE5\xEB\x59\xE4\xA1\xCE\x42\xD9\x41\xE4\x7C\xCF\x50\xD6\xA3\xEB\x8B\xEB\x8D\xEC\x68\xEC\x73\xDB\x8F\xEB\x39\xEB\x91\xEB\x6C\xEB\x3C\xEB\x37\xEC\x18\xE9\x0E\xED\x2D\xEA\x10\xED\x1C\xE9\x42\xCF\x44\xED\xA0\xDF\xAC\xDA\x54\xDC\x95\xC8\x5E\xEA\x5E\xE4\x4B\xED\x1A\xEB\x35\xED\xBF\xC2\x37\xED\x27\xE9\x4A\xE3\xC8\xE8\xFB\xE3\x35\xEC\x44\xD5\x55\xED\xB6\xE9\x57\xED\x6E\xEA\x59\xED\x43\xDA\x34\xDC\x85\xDF\x2C\xED\x8F\xE4\x21\xE5\xE9\xD0\x08\xD6\xFD\xCB\x89\xD6\xFF\xCB\x03\xED\x4D\xED\xDB\xEC\x7E\xEA\xC0\xE2\x99\xE9\x6A\xED\x9B\xE9\xEF\xE9\x42\xDF\xF1\xE9\xE8\xE3\xF3\xE9\x22\xCF\x27\xED\x8E\xE9\x99\xEC\xF0\xE3\xAC\xEC\x29\xE3\x1F\x6C\x8C\xE4\x53\xD3\x8E\xE4\x83\xD6\xDB\xBB\xC3\xDF\x92\xE4\x8D\xE4\x60\x88\xB6\xE1\xF2\xC4\xA1\xDC\x4A\xD1\xC3\xAE\xD9\xDE\xB3\xEA\xB5\xE3\x71\xE9\x08\xED\xF6\xEB\x1A\xE4\xF8\xEB\x0C\xED\xFA\xEB\x70\xED\x87\xEA\x72\xED\x0B\x9C\x9A\xEB\x53\xB1\x9C\xEB\xBC\xB8\xE4\xBE\x14\xEB\xE1\xD6\x24\x89\xAC\xD3\x4F\xE8\xCA\xDC\x2B\x6B\x9E\xED\x6E\xD1\x00\x6F\x4D\x55\x31\xEC\x28\xE9\x33\xEC\xEE\xE9\x6C\xED\xB8\xD8\x6E\xED\xC9\xE9\xFB\xEB\xCB\xE9\xFD\xEB\x86\xDD\xAF\xED\xEE\xB4\xB1\xED\x23\x6A\xD8\xCF\x1A\xB5\xD0\xD9\x49\x92\xD7\xBD\x7F\xE8\x4F\xC4\xBB\xED\xE2\xEA\x0B\xD2\xAE\x4C\xBF\xED\x69\xED\xED\xE9\xC9\xE8\xC3\xED\x3C\xDA\x94\xEB\x95\xCE\x96\xEB\xF2\xCB\xC9\xED\x19\xE2\x43\xEB\x91\xE8\x1A\xDD\xF4\xCF\x94\xE8\x48\xEB\x96\xE8\x9D\xED\x71\xDC\x24\xE7\xD9\xED\x1E\xEC\x17\xDB\x90\xEB\xC3\xC1\xDE\xED\x8C\xDE\xE0\xED\x20\xCF\xE2\xED\x9E\xCC\xE6\xE8\x96\xE3\xD2\xED\x3D\xDD\x61\x77\x3F\xDD\xED\xD9\x63\xEB\x80\xDE\x01\x01\xD6\xED\xA1\xE1\xBD\xED\xF0\xED\x7D\xEC\xA4\xED\x7F\xEC\xB7\xEA\xB6\xDB\xB9\xEA\xB8\xDB\x3E\xED\xBA\xDB\x40\xED\x6C\xE3\xAA\xEC\x70\x8F\x75\xEB\x59\xDD\x8B\x9D\x05\xEE\x81\xD9\x4C\x55\x08\xEE\xF1\xEC\x3C\xEA\x42\xE9\x3E\xEA\x44\xE9\x73\xE2\x46\xE9\x42\xEA\x48\xE9\x77\xE2\x82\xDF\x7A\xDE\x5C\xEB\x4B\xD7\x89\xEB\x6F\x96\x79\x69\x19\xEE\xA8\xDF\x1B\xEE\x18\x58\xA8\xEB\x56\xEC\x1E\xED\x1F\xDE\x4D\xE4\x46\xEC\x49\xDB\x48\xEC\xDD\xEB\x4A\xEC\x52\xE3\x4C\xEC\xEC\xD8\xA4\xD4\x29\xEB\x12\xEB\x2B\xEB\xEC\x9C\x68\xD7\xA1\xEB\xB9\x63\xF0\xE8\xC6\xDD\x06\x01\x2E\xEE\xC4\xEA\xD8\xED\x31\xEE\xDA\xED\x83\xED\xDC\xED\x6B\xED\x53\xED\x93\xEB\xC5\xED\x18\xEA\xC7\xED\x1A\xEA\xAD\xED\x1C\xEA\xFF\xEB\xB7\xEB\xE6\xEB\xBB\xC6\x37\xE9\xD1\xB9\x74\xD4\xE5\xDD\x61\xED\x78\xD4\x88\xD7\xCF\x67\x4A\xEE\x97\xBB\xA0\xED\x35\xEB\x61\xDD\x5C\xE9\xF4\xEB\xA5\xED\x6C\xEC\xA7\xED\x6E", +"\xEC\xA9\xED\x25\xEC\x25\xEB\x39\xDD\x58\xEE\x2F\xEA\xE6\xED\x1E\xE9\x0D\xA2\xC2\xDD\x61\xEB\x09\xE9\xC3\xC3\x94\xEA\x66\xEE\x9B\xC5\x68\xEE\xB3\xEC\x64\xEA\x69\xEC\x82\xED\x39\xED\x0C\xEE\xF8\xE1\x3C\xED\x68\xE3\x10\xEE\x23\xE3\x86\xEC\x6E\xE4\x14\xEE\xCC\xD7\x78\xCD\xB8\xCD\x1A\xC0\xE9\xEB\x26\xD0\xEB\xEB\xD1\xEB\xF1\xC9\xE8\xDD\x63\xED\xBA\xED\xEE\xED\x31\xE7\xBE\xED\xF1\xED\x38\xEB\x20\xEC\xDF\xEC\x0A\xED\x23\xEC\x71\xEE\x70\xEC\x73\xEE\x1F\xE4\x75\xEE\x70\xEA\x5A\xEE\xDB\xC8\x38\x8A\xDB\xCD\x93\xEE\x5E\xEE\x53\xDC\x60\xEE\xCC\xDA\xE3\xBF\xCE\xDA\x03\xEE\x00\x00\x7F\xEE\xA7\xC3\x9D\xEE\x1C\xEE\x4E\xED\xB0\xDE\x3D\xEA\xF3\xE2\xB3\xDE\xA4\xEC\x2C\xE2\xA6\xEC\xF8\xE2\x8D\xEE\x87\xE4\x8F\xEE\xE8\xD7\x18\xEC\x19\xDE\x05\xBA\xB8\xEE\x38\xE9\x4C\xEE\x69\x55\x94\xDD\x49\xDD\xB4\xEA\x0A\xEE\xAC\xEB\x0E\xEC\xAE\xEB\x10\xEC\xD3\xEA\x84\xEC\xD5\xEA\xC5\xEE\x45\xEA\xC7\xEE\xFC\xD7\xFD\xE2\x9B\xA2\x55\xD8\xCC\xEE\x5F\xEE\x72\xD2\x69\xEE\x95\xDD\x84\xE8\x6C\xEE\x0B\xEE\x5A\xEC\x34\xDD\xCC\xEC\xBB\xE3\x24\xEB\xBD\xE3\x26\xEB\xBE\xDD\xA5\xEA\xD3\xDE\x91\xE9\x2A\x68\x77\x6A\xE2\xEE\xB1\xEE\xE4\xEE\x82\xEE\x36\xEB\x04\xE3\x85\xEE\xF3\xED\x35\xC3\xF5\xED\x3F\xE2\x54\xEE\x3E\xEB\x56\xEE\x40\xEB\xE4\xED\xAD\xE2\x75\xEC\x64\xC4\xA4\xD0\x68\xC7\xAA\xE9\x88\xCA\x49\xEE\x9C\xEE\xCE\xEE\xF4\x57\x60\xDD\xE6\xEE\x6B\xEE\x7E\xEC\xD4\xEE\x3A\xED\xC6\xEB\x89\xEE\x56\xEB\x8B\xEE\x6A\xE3\x12\xEE\x7F\xE3\x62\xEC\x7C\xC4\x9A\xC0\x8C\xA7\xF7\xEE\x5A\xE4\xBA\xEE\x4D\xEE\x9F\xEE\x6A\xEC\x6D\xEE\xA2\xEE\x6F\xEE\x0B\xED\x23\xEB\x0D\xED\xA7\xEE\x27\xEC\xF1\xEE\xDE\x9E\xA2\xD0\x6D\xD0\xED\xEB\x94\xC4\x79\xEC\x38\xD7\x27\x01\x23\xEF\xC1\xE6\x9E\xEE\x09\xEE\x9B\xEA\xDE\xEC\x06\xEB\xE0\xEC\x83\xEA\xE2\xEC\x6C\xEA\xAB\xED\xA3\xEA\x31\xEF\x3B\xDD\xD3\xDE\x6E\xDB\x87\xBA\x7A\xEC\x0E\xEF\x9F\xED\xF9\xEE\x75\xDF\x83\xEE\x4F\xED\x0C\xEC\xA1\xEC\xAD\xEB\xA3\xEC\xAF\xEB\xA8\xE3\xC3\xEE\x43\xEA\xDB\xEE\xD7\xEA\xDD\xEE\xA8\xDE\x9D\x10\x9B\xEC\x82\xDA\x3A\xEF\x26\xD0\xC2\xE6\x4E\xEE\x86\xEE\xEA\xEE\x79\xE3\xEC\xEE\x8A\xE8\xEE\xEE\x8C\xE8\xF0\xEE\xBF\xE3\xF2\xEE\xE8\xEC\x66\xCC\x64\x6E\xAF\xEC\xAF\xE8\x4D\xEF\xBC\xED\xCF\xE0\x3C\xEF\x1D\xEE\xC3\xEB\x16\xEF\x87\xEE\x66\xE3\x19\xEF\xC8\xEB\x1B\xEF\x85\xE4\x5B\xEF\xB4\xEB\x5D\xEF\xC7\xCE\x48\x0F\xD9\xBA\x5C\xA2\x62\xEF\x73\xD4\x4F\xEF\x3A\xDF\xB4\xEC\xF7\xE8\x78\xDF\xEA\xEA\x08\xE3\x71\xE8\xA1\xE8\x73\xE8\xA3\xE8\x75\xE8\xA5\xE8\x56\xE4\x94\xE2\xF4\xE7\xE9\xDE\x46\xD3\x22\xEF\x0F\xEF\x81\xEE\x50\xEF\xFB\xEE\xA2\xE3\xFD\xEE\x51\xED\xF4\xED\x52\xEE\x36\xEC\x43\xEF\x85\xEA\x45\xEF\x0C\xEB\x47\xEF\x86\xEB\xCE\xE9\x34\xEF\x8B\xB7\xF8\xCE\xA6\xD0\xED\xED\x4E\xEF\xE6\x95\xA1\xED\x8D\xEF\x51\xEA\x48\xAE\xB7\xEC\x54\xEA\xB9\xEC\x56\xEA\xBB\xEC\x58\xEA\xBD\xEC\x5A\xEA\x94\xDB\x5C\xEA\x90\xED\xF2\xE3\x18\xDF\x87\xC5\x89\xEF\x5E\xED\x9F\xEF\x8C\xEF\x51\xEF\xBD\xEE\x1F\xEE\xBF\xEE\x0D\xDF\xC1\xEE\x41\xEA\xA9\xE3\x25\xEE\xAB\xE3\x27\xEE\x67\xE9\x05\xE4\x5C\xE5\x07\xE4\x13\x95\xA0\xAF\x0C\xD9\x19\xED\x71\x0F\x0E\xE4\x45\xE4\x75\xEF\xD7\xED\xCA\xEF\x12\xEF\xD1\xEE\xA3\xED\x3E\xEF\x29\xEF\x40\xEF\xA3\xEE\xE1\xEC\xA5\xEE\xE3\xEC\x2F\xEF\x3A\xEC\xAC\xEF\x29\xEC\x43\xED\x23\xE4\xA3\xB4\x02\xEC\x8F\xEA\x30\xED\xE3\xBF\x32\xED\x48\xEE\x03\x01\xC8\xEF\xE3\xDD\xE4\xEF\xD0\xEE\xCC\xDD\xFD\xE9\xF2\xED\xA4\xEF\xFF\xEE\xA6\xEF\x6D\xED\xA8\xEF\xA1\xEA\xAA\xEF\x84\xEB\xF1\xEF\x3C\xEC\xF3\xEF\x58\xE4\x5D\xED\xAC\xD2\xCF\xD0\x43\xD9\xDE\xEF\xFF\x00\x46\xD9\xE1\xEF\xFC\xEF\x9E\xEF\x8B\xEF\xE5\xEF\x01\xF0\x68\xEB\x38\xED\xFE\xEE\x6B\xC5\x00\xEF\xC6\xE2\x02\xEF\xDF\xEB\x0A\xF0\xE1\xEB\xA9\xEE\x89\xEA\x12\xED\xDE\xDD\x45\xED\x26\xD0\xDC\xCB\x91\xEA\xDE\xCB\x8A\xB4\xC7\xEF\x19\xF0\xB5\xEF\xE5\xEE\xE6\xEF\xE7\xEE\x15\xEF\x0D\xEC\x17\xEF\x0F\xEC\x7E\xEF\x11\xEC\x80\xEF\x64\xE9\x1D\xEF\x66\xE9\xB5\xEB\x96\xCB\x69\xDC\xBA\xCD\xE8\xD0\x48\xBD\x6E\xDF\xEB\xD0\x7C\xED\x76\xEF\x07\x6D\xFD\xEF\xD8\xC1\xFF\xEF\x4E\xEB\x67\xEB\x67\xED\x98\xE9\x66\xEF\xCA\xEC\x5B\xEC\xA8\xED\x2D\xEF\xAA\xED\xEF\xEF\x72\xEC\x0C\xF0\x74\xEC\x0C\xCF\xF2\xD0\x87\xDC\xAD\xD2\x54\xAD\xF8\xEA\xB4\xCF\x33\x8F\x99\xD9\x03\x88\xD1\xA0\x3F\x65\xFA\xBB\xAE\xE1\xEF\xED\x31\xEE\xCF\x6F\x41\x65\xB5\x07\x2C", +"\x00\x4C\xE8\xC4\xE6\xC7\xDF\x44\x0F\x98\xCF\xCC\xDF\x9A\x7D\xCE\xDF\xD0\x1E\xD0\xDF\xDF\xE7\xD9\xDF\x64\x00\xD4\xDF\xAA\x07\xEB\x35\x7C\xF0\xFF\x00\x98\xCF\x2D\x00\x85\xE7\x9D\x10\x51\x99\x76\xF0\x78\xD3\xE0\xA0\x79\xF0\xA2\x3F\xA4\xE7\x7C\xF0\xD4\xDF\xF8\x08\xD7\xDF\x12\x36\x94\x46\x26\x27\x7C\xF0\xB2\x7B\x75\x4B\x88\xF0\x56\x8D\x8A\xF0\xF3\x27\x7A\xF0\xF1\xE7\x8E\xF0\x3F\x73\x91\x0E\x05\x60\x95\xF0\xA6\x6C\x8E\xE1\x02\x01\x2E\x00\x71\xF0\xA5\xE6\xCC\xA4\x2F\x00\xA7\xF0\x72\xF0\xAB\x7D\x81\x78\x35\xDC\xCF\x6F\x85\x0F\x70\x0F\xA1\xD1\x12\xBD\xF0\xB0\xB7\x73\x86\xD1\x45\x65\x2B\xE8\xE7\x7C\x7A\xE1\xC6\xD1\xAC\x02\xAE\xD1\x91\xD1\x3C\xE7\x4F\x9E\x95\xD1\xD3\xA5\xAB\xE0\x1F\xA6\xBA\x5C\x8A\xD1\xB8\xD1\x84\x26\xAD\xD1\x82\xD1\xEE\x7D\x5F\x00\x61\xE1\xCD\xF0\x96\xD1\x2D\xE1\xFF\xA6\x46\xE8\x01\xA7\x11\x01\xBB\xF0\x2D\xA6\x9F\xD1\xBE\xF0\xEE\x7D\x5D\x00\x61\xE1\xDB\xF0\xD0\xF0\xC0\x7C\x00\xA7\x30\xE1\x7A\xE1\x6D\xE6\x8F\xDC\x75\xD3\x34\xE7\x00\x00\x55\xBE\x97\xE7\x08\xE4\x5B\x0C\x85\x64\x03\xE8\xEE\xAA\x5A\x6F\x53\x0C\x6B\xE7\x1C\xE8\x9C\xE0\x1E\xE8\x4C\x65\x84\x64\x76\x62\xED\xF0\x73\xB0\x29\x61\x53\x0C\x41\xE8\x9D\xE1\xD8\xA0\x95\x1E\x44\xE8\x1E\xA6\xE0\xF0\x21\xE1\x02\xA7\xAC\xF0\xE0\x6F\x43\xE6\x32\x00\xF7\xE7\x9D\x66\x75\x0C\x21\x47\x3D\x61\x7C\xB0\x1B\xAB\x6F\x16\xD9\xA0\x2D\xE8\xAA\xB7\x06\x01\x33\x00\x09\xF1\x82\xE1\x36\x38\x3E\xD3\xFA\xF0\x84\xB0\x35\xE1\x8D\xE0\x2A\x4A\xEF\xC4\x83\x76\xE3\xE7\x99\xBC\x79\x69\x1A\xE0\x4D\xE2\x31\xE6\x64\xD1\x05\xF1\xBD\xDC\x81\x78\x34\x00\x85\xF0\x48\x0F\x70\x0F\x38\xE8\xF3\xF0\x7F\xE1\x20\x11\x99\x8A\x9E\x0B\x00\xF1\x70\xA6\xAC\xE0\x31\xE1\x97\xDC\x29\xE7\x06\x01\x35\x00\xAB\xF0\xF4\x6B\x66\x69\xF6\x6A\x37\x00\xF7\xE7\x97\x75\x50\x7C\xB3\xE4\x61\x81\xEB\x29\x60\x1C\xE8\xE0\xAF\x7F\x44\xF1\x0E\xE8\xBA\xE0\x42\x10\x38\x00\x12\xE8\x67\xEE\xB9\x0D\x1C\x37\x17\xE8\x90\x74\x7C\x74\x5B\x5C\xF1\xF0\x2F\xF1\xAB\x7B\x9D\xE0\x32\xF0\xD9\x64\x54\xF1\xC1\xDC\x56\xF1\x6B\x1E\xFC\xF0\x58\xE0\x68\x5C\x5C\x01\x35\xF1\xC4\xF0\x02\xF1\xC6\xF0\x22\xE1\x39\xF1\x0A\xE1\xED\x72\x3D\xF1\x28\xF1\xD5\x6B\x54\xE6\x3A\x00\x2C\xF1\xB9\x63\x1E\x96\x20\x96\xC0\xF0\x72\x9E\x8F\xA6\xD5\x9B\x61\x29\x66\xF1\xC2\xD1\x92\xA6\xFF\xA5\x6F\xF1\xB8\xC2\x73\x7D\x04\xAB\x5D\x8F\x06\xAB\xD1\x23\x08\xAB\xFA\x0B\x0A\xAB\x8B\x37\xF2\x03\x3E\x05\xF7\xAA\x03\xB1\x12\xAB\xF4\xAA\x77\x38\xED\x67\x16\xAB\xA8\xE8\x3E\x6E\x19\xAB\x22\xE8\x6D\xD3\x76\xE0\x22\x37\x80\xF1\xDC\xDF\xA8\x7B\x27\x01\x3B\x00\x98\xE4\x25\xD1\x09\x01\x42\xD1\x30\x70\x2F\x69\x66\x6C\x54\x5B\x5A\x13\x33\x91\x5E\xE6\xC9\xF0\xE1\x64\x93\xA5\x09\x01\x25\xA6\x54\x74\x37\x06\xA6\xF1\x5A\x64\x4C\x5B\xA9\xF1\x27\xE8\x6F\x16\x37\x7D\xE4\xA6\xB5\xD1\x36\xF1\xC5\xF0\x93\xA6\x11\x01\xA5\xA5\xA7\xA5\xFC\xE0\xF2\xE0\x6D\x92\x3D\xA6\xDC\xA5\x39\x41\xDE\x7B\xE0\x7B\xDF\x8E\x7A\xE6\x4C\xEB\xE6\x37\xC2\x60\x8A\x8D\xA2\x80\xAA\xF1\x07\x65\xF9\xA5\xB9\xF1\xB8\xF0\x45\xE8\x9E\x7C\x47\xE8\x89\x7D\x03\xBA\x8C\xB0\xD5\x70\xB9\x68\xB2\xF1\xA3\x47\x15\x2A\xB5\xF1\x7B\xE6\x19\x7D\xB8\xF1\xFC\xA6\xC3\xF0\x7D\xF1\x00\xE0\x03\xF1\xBE\xF1\x02\xB2\xC4\xF1\x32\x10\x79\x3B\x77\xD1\x5E\x01\xE0\xA5\x10\x7C\xC9\xF1\xDD\xF1\xEA\x33\xDE\x37\xE0\xF1\xF1\xE1\x05\xDF\xE3\xF1\xEA\xDE\x2C\xE1\xDF\xF0\xD3\xF0\x30\xE1\x28\x8E\xF1\xA5\x13\xA6\xCA\xF1\x79\xEB\xE6\x16\xF5\xF1\xCF\xF1\xB6\xF1\x9D\xB0\xD1\xA5\xC8\xA3\xFB\xF1\x2E\xE1\xEF\xA5\x99\x90\x02\xA6\x01\xF2\xF3\xF1\xFC\x29\x05\xF2\xDA\x90\xD0\xF1\xF3\x5C\x09\xF2\xFA\xF1\xDE\xF0\x32\xA6\xFD\xF1\xE8\xF1\xB1\x24\xFF\x99\x2B\xD3\xA7\xD0\x02\xF2\xA6\xEB\x6F\x16\x13\xF2\x79\x67\x15\xF2\x7C\xE6\x17\xF2\x9E\x11\x0B\xF2\xD2\xF0\xD6\xF1\xD4\xF0\x38\xF1\x61\x81\x24\xA6\x87\x90\x31\x07\x11\xF2\xFC\x42\x24\xF2\xC3\x73\x26\xF2\xE2\xF1\x28\xF2\x93\x11\x2A\xF2\x82\xA6\xD2\x7B\xCA\xA6\x3E\x71\xA9\x14\x38\xA6\xB4\x52\x9E\x0B\xC2\xF1\x6F\x96\xEB\xF1\x7E\x1D\x79\x7C\x1F\x04\x41\xA6\x44\x0F\x43\xA6\x10\xF2\x21\xD1\x35\xF2\xEE\x03\x37\xF2\xF8\xF1\x39\xF2\x32\xF1\x19\xF2\x2B\xF2\x89\x40\x8F\x7C\x27\x01\xD0\xA6\xD5\xE4\x91\x08\x33\xF2\x6C\xB0\xB4\xF1\x06\xF2\xE1\xF1\x52\xF2\xD2\xF1\xE4\xF1\xC1\xD1\x1E\xE1\x3C\xF2\xA2\xA6\x3C\x0F\x64\xA6\x4D\xF2\xBB\xD9\x4F\xF2\xB1\xBC\x51\xF2\x73", +"\xDF\xF9\xF1\x29\xF2\x55\xF2\x67\xF2\xD6\x7C\x74\xA6\x87\x4B\x6B\xF2\xCB\xF1\x6D\xF2\xF8\x0B\x6F\xF2\x1D\xDF\x71\xF2\x3A\xF2\x73\xF2\x50\xA6\x1B\xF2\x69\xF1\x93\x0A\x25\xE1\x5F\xAC\x21\xF2\xC0\xEB\x11\x63\x7A\xF2\xC2\xF0\xF7\xF1\x70\xF2\x53\xF2\x79\xF1\xE5\xA6\xB6\xD1\x89\xD1\xB1\x7C\x95\xA6\xFF\x53\xF2\xF1\x4E\xF2\xDF\xF1\x60\xF2\x8C\xF2\x7D\xF2\x53\xF2\xFA\xDF\xD4\xF1\x01\xF1\x82\xF2\xBD\xF1\x1D\xF2\x41\x65\x1D\x7D\x96\xF2\x6C\xF2\x98\xF2\x14\xF2\x07\xF2\xAA\x14\x7E\xF2\x54\xF2\xE5\xF1\x66\xF2\x81\xF2\x2C\xF2\xFE\xF1\xEC\xE1\x48\x0F\xF2\xA6\x78\xF2\x03\xF2\x82\xE6\xA7\xF2\x25\xF2\xA9\xF2\x60\x63\xEA\xA5\x64\xF2\x90\xA6\xE6\xF1\x37\xF1\xC1\xE7\x16\x05\xEC\xAB\x23\xE6\xCA\x66\x50\xE5\x4F\x9F\x3E\x05\x6E\xE5\xE8\x31\xC0\xE4\x97\xBC\x72\xE5\xAA\xC2\x9C\x09\x66\x6C\x40\x9D\x7E\xE5\xFC\xAB\xD5\xE9\xBF\x0A\xD0\xF2\xF4\x9C\x60\x02\x88\xE5\x3F\xF2\xF0\xE5\xD1\xE5\xF2\xE5\xCD\x69\xD5\xA4\xB8\xE0\xBA\xE4\x0B\x9F\xD9\x0A\x98\xE5\xDC\xE4\xDB\xF2\x9C\xE5\xDE\xE4\x40\xA5\x9F\xE5\x64\xE5\xD5\xF2\xC6\xF2\xA2\x9F\x34\x23\xAA\xE5\x49\x2A\xFB\xA4\xE6\xF2\xBF\xE5\xC4\xBD\x55\xA0\xE5\x90\x84\xC2\xE0\xF2\xD8\xE4\xD7\xF2\x65\xB2\x80\xE5\x27\xAC\xBB\xE5\x6B\xC2\xF2\xBC\xFA\xE4\xE1\xE4\x6B\x06\xD6\xF2\xED\x9D\x6D\x1C\xCD\xE5\x92\xBD\x32\xAC\x95\xE2\xDC\xF2\x51\xE6\xFC\x81\x63\xC2\x03\xF3\x28\x08\x05\xF3\xA9\x9E\x07\xF3\x0C\xE5\x24\xA5\x14\x75\x8A\xE5\x20\xE6\xBF\x8E\xDF\xF2\x12\xF3\xE2\xF2\x42\x03\x20\xE5\xEF\xE5\xFE\xE5\x30\xE5\x00\xE6\x93\xAB\xF8\xF2\x1C\xF3\x74\xB0\xEF\xF2\x15\xE5\xFD\xE5\x0D\xE6\x19\xE5\x0D\xF3\xFD\xBC\x25\xF3\xED\xF2\xF6\x9F\x28\xF3\x0A\xE6\x4A\x07\xC2\xBD\xF3\xF2\x5B\xAC\x8C\xC2\x05\xBD\xB1\xE5\xCB\xEA\xEC\xF2\x84\x9E\xFB\xF2\x33\xBC\x1C\xE6\xF5\xE4\x78\xEE\xE7\xF2\xAF\xE5\x21\xE6\x7D\x69\x58\xBD\x3C\x73\x30\xF3\x6A\x9E\x79\xD9\xF0\xA5\x00\xE8\x45\xD3\x5E\x71\x26\xF3\xCD\x9F\x6D\x1C\x4C\xE5\x89\x69\x47\xF3\x04\xF3\x49\xF3\xB1\x0E\x42\xE6\x25\xBB\x44\xE6\xEB\xF2\xC5\xF2\x3D\xF3\x06\xF3\x3E\x05\x4D\xE6\x41\xBC\x4F\xE6\xC7\x72\x1E\x8F\xDD\xE0\xD3\xD9\xC3\xF2\x03\xC9\x5C\x0A\xBD\xE0\x97\xA0\xE5\xE6\xDE\xC8\x5C\x8D\x54\xBD\x70\xE5\xC1\xE4\x64\x6C\x55\xF3\x58\x07\xA0\xB2\xEE\xDF\xF2\x95\x27\x01\x54\xA6\x61\xE5\x90\x10\x2F\xA0\xA7\xD0\x6B\xF3\x40\xA0\xA5\xA0\xFF\xE4\x2D\xC2\x89\xE5\x36\xF3\x22\xBC\xF2\xBC\x8D\xE5\xDE\xCF\x75\xF3\xC0\xA0\x20\xE5\x99\xE5\xCC\xBD\x2F\xE5\x24\xE5\x31\xE5\xD7\x90\xD5\xA4\x7F\xF3\x29\x83\x83\xA0\x13\xED\xFC\x70\x44\xC2\x18\xF3\xDD\xF2\x00\xA5\x3A\xF3\x0C\xE7\x6A\xF3\x76\xF3\x81\xF3\x27\xBC\x28\xAC\x9A\xF3\x2D\xF3\x05\x69\x84\xC2\x94\xF3\xB7\x84\x96\xF3\xA6\xBD\x2C\xC2\x17\xA5\xF4\xE4\x93\xBD\xD1\xD2\x37\xF3\x0F\xE5\xD3\xE5\x9D\xF3\x17\x8F\x77\x6A\xA8\xF3\x51\x87\xAA\xF3\xFD\xF2\xC6\x0D\x9D\xBD\xCF\xE5\xD0\xE4\x0C\xF3\xCF\xBD\xE3\xE5\x89\xF3\xD6\x07\xA0\xF3\xF0\x09\xEE\xE5\x17\xE5\x2B\xF3\xE0\xE5\xCF\xBD\x78\xC2\xFB\xE4\x2E\x73\x8B\xF3\x29\xF3\x59\xAC\x85\xF3\x54\xBC\x0F\xBD\x90\x10\x26\xE5\x8D\xBD\x43\x07\xC4\xF3\xF7\x09\x36\xE5\x2D\xE5\x41\xF3\x59\xA5\x1F\xE6\x9B\xF3\x39\xF3\x7F\xE5\x12\xD0\x84\x06\xD8\xF3\x3F\xF3\x38\xE5\xBD\xF3\x03\xE5\xBF\xF3\xEB\xE4\x3E\xE5\x46\xE5\x07\x6D\xB7\xF3\xFB\xDF\xD5\xE7\xB8\xC2\x45\xE5\x22\xF1\xB6\xF3\xD8\xF3\x53\xF3\x1C\xBD\xC3\xE4\x8A\xF3\x6C\xF3\xC3\xE6\xC2\xE3\x13\xF1\xE1\xF3\xC9\xE4\xBC\x66\xFA\xF3\x61\xF3\xD8\xBC\x63\xF3\xCB\xF2\x95\xE4\xD4\xCC\x20\xAB\xB7\xE4\x4F\x03\x50\xF3\x69\x9E\x11\xF1\xBD\xE4\x24\xA0\x71\xF3\xCC\xF2\xC2\xE4\xD2\xBD\xC0\xE0\xFD\xF0\x96\x58\x11\xF1\x26\xC2\x82\xBC\x07\x6D\xAA\x66\x49\xF3\x53\x0C\xD9\xF2\x00\xF3\xD3\xF3\x0B\xAC\xB4\xF3\xF3\xDF\x1A\xF4\x0B\xF4\xEF\xF0\x95\x1E\x8C\xF3\xE5\xF2\x21\xF3\x90\xF3\x23\xF3\x83\x8E\xD5\xA4\x1B\xF4\x5E\xF3\x9E\x40\x27\xF4\x1E\xBC\xAB\xE5\x52\xA0\xA4\xF3\xCF\xBD\xED\xE4\xA7\xD0\x2F\xF4\x15\xF4\x1A\xF1\x32\x06\xBA\xE5\xF3\xE4\xBC\xE5\x52\xE6\x9B\xE5\xF4\xF2\x60\xC2\xF6\xF2\xC2\xE5\x84\xC2\x3A\xF4\xE1\xF2\x16\xF4\x32\xF4\x33\xF3\x91\xBD\xAE\xF3\x0A\xF3\x8F\xF3\xDE\xF3\xA5\xF3\xA6\x8D\xFE\xF3\x45\x91\x5C\x0A\x48\xF4\xFA\xF2\xF7\x32\x1D\xF4\x15\xF3\x7F\xAB\x17\xF3\xD1\xF3\xF1\xBC\x20\xF4\x46\xBC\x47\xF4\x25\xF4\x10\xF1\x4B\xF4\x49\xBC\xA9\x70\x24\x6B\x1F\xF4\x7F\xBD\x4D\xBC\x62\xF4\x1C\xF4\x65\xF4\xEE\xBC\xFA", +"\xBC\x0E\xE5\x45\xAC\xD5\xF3\xC2\xF3\x02\x0B\x63\xF4\x83\xB0\x3D\xF4\xDA\xF3\x0C\xE6\xE7\xF3\x3A\xE5\xCF\xBD\x11\xE6\x10\xF3\xEF\x0A\x76\xF4\x0E\x47\x78\xF4\x4C\xF4\x37\xE5\x95\xC2\x2A\xF4\x51\xF4\xCF\xBD\xEB\xF3\xF3\xF3\x24\xF4\x6D\xF4\x32\x06\x2B\xE6\x3A\xE8\x4E\xE5\x0A\xF4\x8D\xF4\xEE\x05\xF6\xF3\x42\xC2\x74\xF3\x80\xF4\x93\xF4\xDD\x05\x59\xF3\xFD\xB3\x19\xF4\x71\x6B\x81\xF4\x2A\x61\x79\x00\x02\xF4\x02\xE5\x04\xF4\x10\xF4\xFC\xF3\xC7\xE0\x84\xD0\x99\x05\xA6\x75\x80\x02\x5C\x0A\x3B\x00\x15\x98\xCE\x20\xA8\x4A\x5F\xE0\x43\xE6\x3C\x00\x87\xE1\x11\x66\x00\xE1\xE3\x6C\x80\x02\x29\x9B\xE9\x61\xE4\xBD\x3C\x0F\xA7\xF4\x07\xD1\xFF\x09\xAA\xF4\x23\x02\xAC\xF4\xAE\xF4\xBA\x18\xB0\xF4\x10\xD1\xB2\xF4\xB4\xF4\x7D\x69\x04\xE1\xB7\xF4\x23\x02\xB9\xF4\x94\x51\xF5\x4A\x58\xD1\x07\xF4\xF1\xBB\x09\xF4\x11\x73\xEB\xE5\xA3\xE0\xD3\xAB\x0E\xF4\xC9\xA4\xF2\xE5\x1D\xB5\xA4\xDC\x12\xF4\xCE\xF2\x13\x73\x28\xE6\xD6\xB0\xB6\xAB\xEC\x06\xD2\xF2\x55\xE5\x68\xD0\xD4\xF4\xF9\xE5\x96\xAB\xDC\xAB\x1E\xF4\x71\xF4\x87\xF3\xD5\xA4\x0C\xE1\xE0\xF4\xA5\xAB\xD7\xB0\xB7\xAB\xE4\xF2\x3A\xC2\x5E\xF4\x0E\xBD\x6A\xF4\x18\xAC\x84\xC2\xEF\xF4\x4A\xE6\x15\xE0\x1B\x73\xF0\xF2\x0D\x47\xF2\xF2\x87\xF4\xF1\xE5\x52\xF4\x47\xC2\x54\xF4\x3B\xF3\xBF\x02\x66\x6C\xA7\xE0\xDC\x0B\x3E\xF4\xA5\x70\x09\xF3\x20\xC2\xB0\xF3\x86\xF3\x60\xF4\x02\xF3\x5B\xF2\xDF\xF4\xFC\xF4\x7B\xE5\xFE\xF4\x36\xE5\xCE\xE5\x8E\xF3\x42\xF3\x43\xF4\x9D\xE5\xA2\xBD\x62\xC2\xEE\xF4\x09\xF5\x61\xAB\xB9\x62\xFC\xF2\x72\xEA\x78\xA0\x0D\xE5\x36\xF4\xEB\xE4\xC1\xF3\xCC\xF3\x15\xF5\xD5\xF4\x98\xE0\xA6\xAB\x56\xAB\xB4\xBD\x67\xF4\xF5\x9C\x02\xF5\xE9\xF3\x91\xF3\x1C\xE5\xFA\xF4\x22\xF5\xE9\xF4\x30\xF5\xF3\xF4\x32\xF5\x7E\xC2\x22\xE5\x35\xF5\x43\xF3\x19\xF3\xD4\xF3\x21\xF5\xF0\xF4\xB5\xAB\x55\xAB\x3D\xF5\x82\xF3\x49\xA5\x7A\xF4\x1B\xF5\xDD\xF3\x03\xF5\x7D\xF4\x45\xF5\x16\xF5\x54\xA3\x18\xF5\x84\xF4\x40\xF3\xAF\xF3\x0B\xF3\x42\xF5\xDF\xF3\x0F\x66\x9A\xC2\x1B\xE0\x07\x6D\xFB\xF4\x2E\xF5\xDB\xAB\x3C\xF5\xE3\xF4\x74\xBC\x4D\xF3\x08\x88\x11\x66\x5F\xF5\xE8\xF4\xD6\xF4\xDC\xAB\x95\xF4\xBC\xD0\x8B\xF4\x2B\x6B\x68\xF5\x34\xE6\x3B\xF5\xF2\xF4\x63\xF5\x82\xAC\x9C\xF4\xDF\x8E\x70\xF5\x40\xE6\x23\xF5\xA6\x5C\xA2\xF4\xE7\xF3\xA4\xF4\xDA\xF4\x12\xF1\xC1\x7B\x3D\x00\x16\xF1\x25\xBD\xA4\x60\x30\x01\xD0\xF4\x62\xE5\x08\xF4\x73\xE5\x86\x66\x7F\xAA\x8E\xF4\xDB\xAA\x6F\xF3\x1E\xC2\x05\xF4\xB8\x90\xCD\xF2\x12\xBD\x5C\x0A\x05\x73\x9C\xAA\x01\x70\x2E\xA0\xD5\xA4\x96\xF5\xEF\x8D\x61\x29\xEB\xF4\x29\xF5\x37\xF5\x88\xF3\x2C\xF5\xE5\x03\x9F\x8C\x9D\xF5\xF4\xF4\xD8\x74\x9F\xF5\x2C\xF4\x92\xF3\x84\xC2\x9B\xF5\x7A\xF1\xB6\x33\xFF\xF4\xCD\x59\x01\xF5\xC8\xF3\xFF\xE5\x72\xBD\xF7\xF2\x22\xF4\x9A\x69\xAC\xF5\x86\xB5\xA5\xF5\xC8\xBC\x0D\xF5\x4E\xF4\x0F\xF5\x58\xF5\x1D\xF5\xE8\xF2\x1B\xE5\x13\xF5\x5C\xF3\x07\x73\x8C\xF5\xEE\x05\x08\xF3\xBD\xF5\x5D\xC2\xBE\xE5\xB1\xF3\x45\xAC\x0F\xF3\x14\xF5\xA3\xF5\xC6\xF5\xDD\x05\xDC\xE5\x4F\xE9\xDE\xE5\xB2\xF5\x22\xF3\xB4\xF5\x1A\xF3\xAB\xF5\xA4\xF5\xAE\xF5\xC6\xF3\x68\xF4\xEC\xF4\x60\xF4\xCB\xF3\x7F\xF4\x46\x0A\xDB\xF5\x05\x42\xFC\xE5\xD0\xF3\x41\xF5\xC0\xF5\x44\xF3\x94\xA0\xDA\xF5\xD1\xF5\x00\x06\x2C\xE5\x4C\xF5\x1D\xE6\x4E\xF5\x36\xF5\xA9\xF5\x67\x69\x9A\xF5\xE4\xF5\x16\x43\xE5\xF3\x86\xF4\xD6\xF5\x2B\xF4\xD8\xF5\x3D\xE5\x5C\xF5\xE1\xE0\x95\xF5\xF7\xF5\x0D\xF4\x94\xDC\xB5\xA0\x65\xF5\xB6\xDC\x07\x6D\xB8\xF5\xDC\xB6\x86\xE0\x79\xBC\x54\xF3\xF8\xF3\x8E\x07\x02\xF6\x1B\xF1\x75\xF5\x5F\xEA\xD3\xF2\xE7\xE9\x08\xF6\x10\xF6\x32\x06\x7C\xF5\x4D\xF5\x8A\xAC\x5F\xE5\x7F\xF5\xDB\xF4\xB9\xC2\x49\xE2\x67\xE8\x57\x04\x71\xEF\x53\xC4\xA2\xED\x36\xF0\xD3\xEE\x38\xF0\x7C\xEF\x81\xE4\x0E\xEE\x83\xE4\x3D\xF0\x58\xEB\x3F\xF0\xBE\xEA\xE2\xE1\x53\xCD\x7A\xC3\xFE\xDC\x42\xEE\x1B\xC6\xB4\xED\xB7\xD9\x2B\xEE\xD8\x93\x38\xE1\xA1\xCB\x32\xD9\xF2\xEC\x90\xEC\xF4\xEC\x22\xED\xDC\xE9\x2E\xE9\xDE\xE9\xCF\xE8\xE0\xE9\xD1\xE8\xDE\xDC\xB9\xED\xCA\xD9\x64\xD7\xDE\xD6\xE6\xE1\xCC\xE1\xD0\xED\x07\xBF\x36\xD4\xB2\xF2\x88\xF5\x01\x01\x0C\xBF\x4F\xC4\x3B\xF6\xC0\xCB\x25\xF6\x14\xEF\x27\xF6\x54\xEF\xD5\xEE\x56\xEF\xD7\xEE\xB0\xEB\xD9\xEE\xB2\xEB\x82\xEF\xA9\xEC\x42\xED\x34\xC6\x21\xBF\x43\xC9\xEC\xD9\x53\xE9\x5B\x8F\x48\xC9\x82\xDA\x57\xF6\xE1\xCB\x3D", +"\xEF\x04\xEB\xA1\xEE\xEA\xEF\x2B\xEF\xA4\xEE\x57\xF0\x72\xEE\xEF\xEE\x74\xEE\x5B\xF0\xE7\xEC\xBE\xDB\x5D\xEB\x25\xC3\x45\xBF\x17\xDA\x7B\xEE\xC0\x13\x02\xEE\x4C\xEF\x05\x06\x23\xF6\x03\xCC\xA1\xEF\x11\xE9\xA3\xEF\x72\xF6\x6B\xEB\x41\xEF\x08\xEB\x08\xF0\x0A\xEB\x25\xF0\xFC\xEB\x27\xF0\xE3\xEB\xEC\xB9\x33\xE2\x05\xBA\x6E\xF6\x5C\xCC\x65\xEF\x1F\xF0\x03\xC7\x06\xF0\xC4\xED\x8F\xF6\x6F\xEB\x04\xEF\x71\xEB\x06\xEF\xCC\xE2\x1D\xE9\x81\xF1\x39\xF6\xCF\x67\x98\xF6\xF2\xD0\x9A\xF6\x04\xF0\x20\xF0\x9D\xF6\xDF\xED\x23\xF0\xE1\xED\xA1\xF6\x97\xEB\xA3\xF6\xAC\xC9\x32\xF6\xA4\xCC\x67\xB9\x4D\xF6\x63\xE2\x64\xE8\x6A\xD7\xFE\xB3\x0B\xA8\x57\x0A\x86\xF6\xB8\xC9\x59\xF6\xDC\xEC\x03\xF0\x8B\xF6\x52\xED\x8D\xF6\x6D\xEB\x9F\xF6\x38\xEC\x59\xF0\xE5\xEC\x7A\xF6\x11\xED\x27\x91\xA8\xDA\x5D\xEE\x05\x9F\xB9\xEE\xE4\xDD\xB3\xEE\x4E\xD5\xBD\xEB\x4A\xE2\xCD\x0A\xC0\xF6\x08\xCB\x1C\xF0\x51\xF0\xAB\xEB\x28\xF6\x67\xEF\x88\xE8\x69\xEF\x76\xE9\x6B\xEF\x78\xE9\x8D\xE8\x7A\xE9\x65\xF6\xCE\xEB\x9C\xD7\x7A\xEE\x2E\xF0\x87\xD6\x71\x0F\xD3\xEB\x17\xF0\x15\x09\xDA\xF6\xDE\xC6\x35\xF0\x5A\xF6\xE8\xEF\xE9\xEE\x54\xF0\xEB\xEE\x56\xF0\x5D\xEC\xE4\xF6\x5F\xEC\xE6\xF6\x61\xEC\xE8\xF6\xB6\xCD\x35\xE9\xAA\xDA\x76\xED\xC9\xEF\x90\xAD\x28\xD0\x42\xE4\x6E\xB2\x87\xC5\xA9\xF6\xBC\xDF\xF1\xCA\x6A\xEE\xC3\xF6\xA0\xEE\x3F\xEF\x8C\xF6\xEB\xEF\x42\xEF\xED\xEF\x44\xEF\xCB\xF6\x0F\xED\xCD\xF6\x5A\xED\x21\xD0\xCD\xD7\xC7\xDA\xCF\xD7\x94\xEE\x8A\xEF\xB4\xE2\x61\xEE\x29\xD0\xD6\xB9\xD4\xE2\x20\xEA\xC4\x0A\xF2\xF6\x2F\xCA\xDC\xF6\x70\xE9\xF6\xF6\x7B\xEF\xE0\xF6\xB8\xEA\xE2\xF6\xBA\xEA\xCE\xEC\xBC\xEA\x2F\xF6\x5A\xEB\x84\xEF\x54\x8F\xE8\xE2\xC3\xEC\x85\xF6\x3C\xF6\xD3\xDA\x1E\xEE\x20\xED\x43\xE9\xF5\xEC\x45\xE9\xFF\xE3\x3B\xE3\x01\xE4\x3D\xE3\x03\xE4\x4B\xE9\xF4\xAE\x7D\xE9\xB6\xEE\x0B\xF7\x77\xEC\x0D\xF7\x13\xEF\x0F\xF7\x28\xEF\xF7\xF6\x09\xED\x74\xF6\xEC\xEF\x76\xF6\xA6\xEE\x78\xF6\xA8\xEE\x19\xF7\x73\xED\x66\xD0\x3E\xEC\xF2\xC4\x4B\xF7\xDE\xC9\xAB\xF6\xC5\xF6\xA5\xEF\xC7\xF6\x54\xED\xC9\xF6\x56\xED\x17\xF7\x58\xED\x59\xF7\x08\xEA\x5D\xF0\x0C\xF7\xA8\xE9\x56\xDE\x25\xD5\x05\x8B\x5C\x0A\x5E\xF7\xA7\xE9\x60\xF7\x11\xF7\xC6\xF6\x13\xF7\x8E\xF6\x15\xF7\xA9\xEF\x67\xF7\x71\xED\x69\xF7\x65\xBE\x63\xEC\x8C\xA7\x72\xF7\x55\xDB\x74\xF7\xE9\xEF\x12\xF7\x53\xF7\x14\xF7\x55\xF7\xEE\xEF\x57\xF7\x30\xEF\x6E\xEF\x32\xEF\xAE\xEF\x50\xEC\x98\xEE\x53\xD8\xD2\xE9\x5C\xA2\x81\xF7\xBD\xDE\x83\xF7\x51\xF7\xA6\xED\x21\xEB\xFA\xF6\xCD\xEC\xFC\xF6\xCF\xEC\xFE\xF6\xD1\xEC\x6F\xEF\x4A\x8B\x4A\xEF\x8B\x9D\x94\xF7\xAD\xEC\x4D\xF7\xF4\xF6\x4F\xF7\x8A\xF6\x75\xF7\x62\xF7\x77\xF7\xC8\xF6\x79\xF7\x09\xF0\x7B\xF7\xAC\xED\x7D\xF7\x76\xEE\x49\xEF\xED\xCA\x80\xF7\x28\xF7\xA6\xF7\x2A\xF7\x11\xEA\x69\xEB\xAC\xF6\x9C\xF6\x63\xF7\x53\xEE\x65\xF7\x6F\xED\xB0\xF7\x46\xEF\x8C\xF7\x48\xEF\x70\xEF\xCB\xC4\x8C\xB3\x0D\xEA\x93\xF7\xB7\xF7\xDF\xC9\xB9\xF7\xD2\xEE\x2C\xF7\xDF\xF6\xF8\xF6\x68\xEF\x9A\xF7\xED\xEE\x2E\xEF\x8A\xF7\xF0\xEF\xC4\xF7\xAD\xEF\x94\xDE\xAA\xB3\x0E\x03\xA3\xF7\xCB\xF7\x96\xF7\x2D\xF7\xD1\xF7\xE1\xF6\xD3\xF7\x6A\xEF\xD5\xF7\x6C\xEF\x79\xF6\xD8\xF7\xF2\xEF\x66\xF6\xFC\xF3\xC4\xE3\xEA\xDC\xA4\xF7\x91\xED\x29\xF7\x4F\xEB\x2B\xF7\x71\xF6\xAA\xF7\x05\xF0\xBE\xF7\xA7\xEF\xAE\xF7\x90\xF6\xC2\xF7\xAB\xEF\xE8\xF7\x0D\xF0\xA1\xD0\x09\xEF\x8E\xD0\x0E\xC5\xD9\xE3\x79\xA9\xEE\xF7\xC5\xEF\xF0\xF7\x50\xF0\xF2\xF7\xBB\xF7\x61\xF7\xF5\xF7\xAC\xF7\x64\xF7\xF8\xF7\xA0\xF6\x91\xF6\xC8\xED\x93\xF6\xFE\xEB\xC6\xF7\xB0\xC0\xCB\xB4\x9E\xBB\x22\xF6\x3B\xF7\xF1\xDC\x7A\xEF\xD0\xF7\x52\xF7\x99\xF7\x70\xEE\x88\xF7\x16\xF7\xD6\xF7\x5A\xF0\xFC\xF7\x5C\xF0\x5B\xED\xF4\xEF\x2B\xF0\x23\x74\x76\xEA\xDD\xEF\xC7\xEA\x3F\xBB\x60\xEA\x10\xD6\x0C\x03\xDE\xF7\x27\xEF\xA9\xF7\x84\xF7\x76\xF7\x86\xF7\x78\xF7\x20\xF8\x7A\xF7\x22\xF8\xCC\xF6\x24\xF8\x7B\xF6\x8F\xC1\x27\xF8\x10\xF0\x5D\xBB\x2E\xED\xEF\xB7\x29\xE4\xFA\xEF\x3D\xE9\x3A\xF7\x58\xF6\xB7\xEF\x44\xEC\x8F\xEF\x37\xEE\xD3\xDD\x39\xEE\x2D\xD7\xDE\xEB\xB1\xF6\x10\xF8\x57\xEE\xB2\xF7\xAA\xEE\x26\xF8\x0F\xF0\x15\xED\x4C\xD6\x5F\xCF\x3B\xDC\xEC\xF6\x20\xDC\x45\xD9\x0A\xF7\x31\xF8\x70\xF6\x09\xF8\xF4\xF7\xAD\xF6\xF6\xF7\x07\xF0\x0E\xF8\xCA\xF6\x3A\xF8\x18\xF7\x3C\xF8\xCE\xF6\x0E\xF0\x2A\xF0\x40\xF8\x30", +"\xE7\x5F\xED\x7B\xCF\xEA\xDB\x98\x95\x9A\xEE\x71\xF7\x60\xF8\x79\xEF\xE8\xEE\xE0\xF7\x1D\xF8\xCB\xEC\xE3\xF7\xE3\xF6\xE5\xF7\xE5\xF6\x6D\xEF\x8E\xE8\xA0\xF7\x3E\xF8\x57\xF8\x8D\xEA\x6E\xF3\x51\xBC\x46\xF0\xAC\xEA\x58\xB8\xE1\xEA\x06\xEE\x77\x6A\x04\xF8\x99\xC7\xAE\xE9\xCE\xF7\xF3\xF7\x34\xF8\xAB\xF7\x36\xF8\xAD\xF7\x38\xF8\xAF\xF7\x69\xF8\x68\xF7\x6B\xF8\x1A\xF7\xFE\xF7\xE9\xEC\x4C\xCC\xF6\xEA\x8E\xDC\xF7\xD0\x77\xED\xA4\xD6\xC4\xDF\x9A\xED\xA3\xF8\x03\x7E\xD1\xA0\xDA\x21\x69\xF0\x4C\xDF\x28\xCF\x9C\xED\x74\xF4\x10\xBE\xC8\xD9\x49\xF6\xE0\xDC\x4B\xF6\xA5\xCC\x35\xF6\x04\xC9\x37\xF6\xCF\xE1\x2B\xEE\x9A\x69\xB1\xF8\xFC\xDC\xCB\xED\x9E\xB8\xCD\xED\xF4\xC5\xB3\xED\xCF\xD9\x50\xF6\xDF\xBF\xBA\xE0\xD4\xED\xCF\xF5\x22\x03\xFC\xED\xD3\xE8\xE9\xD9\xFA\xD6\xEB\xD9\xE3\xD3\xEA\xED\x27\xDD\xDF\x8E\xBD\xF8\x41\xF0\x65\xC3\x94\xF1\xFF\xED\x1D\xE2\x40\xDD\x1F\xE2\x5F\xC6\xA8\xF4\x7D\x02\xCB\xF8\x79\x83\xBF\xE8\xB7\xF8\x5C\x0A\xD4\xF8\x36\xF7\xE8\xD9\x04\xF6\x48\xE2\x8E\xAC\x5F\xAC\xE4\xF8\x6B\x92\xB6\xF6\xDD\xD6\xB6\xF8\x39\xE6\x43\xEE\xED\xE8\x8D\xDD\xA2\xEB\x2E\xF8\xC8\xD0\xEB\xF8\x83\xF8\xC5\xDA\x03\xE9\x1F\xA8\x46\xE1\xB0\xEE\x24\xEF\xD4\xF6\x3A\xE9\xD6\xF6\x19\x95\xBC\xF8\xDF\xF8\xC6\xB3\xEA\xF6\x97\xE2\xEC\xEB\x7E\xD9\x7D\xEE\x0F\xD6\xF6\xF8\x04\xF9\x88\x67\xAF\xE2\xAC\xB9\x03\xF7\x1F\xF7\x05\xF7\x21\xF7\xD5\xF6\xFF\xEC\xFF\x00\x3C\xE9\xEC\x7C\x11\x66\xF7\xF8\x8D\xF7\xAE\xE2\xC6\xDA\x4F\xE9\xCF\xB9\x02\xEC\x07\xE9\x81\xF6\x66\x69\xB5\xEE\x8A\xF5\x9B\x03\x0D\xF9\x1B\xC4\xC9\xEE\x1D\xC4\xD3\xF4\x21\x62\x29\xED\x50\x80\x49\xF7\x26\xF9\x2D\xF9\x8E\xED\x12\xE3\x5C\xF7\xB0\xF8\x28\xF9\xF0\xD8\xC4\xEF\xEA\xEC\x6E\xF7\x28\xDB\x6E\xF5\xE3\xF8\x7B\xC4\x15\x66\x27\x01\xBC\xE9\x95\xE9\x2B\x6B\x1B\xF9\xC5\xF7\x78\xD0\xCB\xF7\xB1\xC0\x92\xF7\xA8\xE1\xDE\xF8\x2E\xF9\xFA\xC5\x48\x0F\xE4\xE9\x4B\xF9\xCA\xF8\x4D\xF9\x07\xC9\x82\xE3\x81\x9E\xA7\xD0\x45\xF9\xD9\xF7\x08\xEF\x9F\xF8\x9C\xD8\xC8\xF7\x0F\xAF\x73\xD1\x58\xF9\xE9\xF7\x53\x85\xDB\xF7\x89\x81\xD1\x99\x60\xF9\xFD\xF7\xE9\xF6\xEB\xF7\xD6\xEC\xC9\xF8\x5F\x04\x37\xF9\xE9\x94\xD6\xE3\x51\xEC\xEB\xEC\x63\xAF\x13\xA6\x66\xF9\x25\xF8\x47\xF9\xA9\x86\xF3\xD8\xE4\xE5\x7D\x69\x74\xF9\x3D\xF8\xCB\xD0\xD9\xEF\x79\xC1\x09\xE4\x7B\xC1\x5C\xF8\x3D\xDC\x1A\xED\xC7\xD0\xCF\x67\x7B\xF9\x6C\xF8\x84\xF8\xAB\xF3\x14\xED\x86\xF8\x48\xE1\x1C\xDC\x27\xD9\x90\xEA\x08\xF9\x6E\xDC\x2B\xD9\x0B\xF9\x86\xF9\x6D\xF9\x00\xDC\xDA\xEA\x3F\xE4\x6C\xDF\x79\xED\x47\xF0\x4A\xED\xF5\xF8\x95\xF9\x53\xF9\x69\x9F\x3F\xD9\xD2\xF6\xCD\xEE\xAB\x0A\xC6\xEA\x08\xE9\xFC\x81\x64\xD9\x57\x90\x9F\xF9\x33\xF9\x0F\xB8\xA2\xF9\x01\xAD\xDF\xD2\xA7\xB4\x82\xF9\x7B\xD0\x77\xE4\x26\xA6\x52\xF9\xAC\xF9\x6C\xD0\x8F\xF7\xDE\x82\x5F\xF0\x9D\xCF\x61\xF0\x8E\xF5\xC2\xDF\x91\xE4\x1A\xCC\xA2\xF8\x37\x2A\xEE\xE0\x41\xF9\xC8\xF4\xAB\xDC\x8B\x06\xEE\xF8\x2E\xA3\xA0\xC6\x17\x66\x35\x3A\xD8\xA2\x88\x59\x66\x69\xF0\x06\x87\xBE\x99\xF0\xBE\xF9\x7F\xBE\xE1\xDC\xA3\x97\xCB\xF9\xA5\x70\x98\x43\x59\x3A\x66\x69\x50\x06\xD2\xF9\xAA\x74\x11\xA0\x6D\xBE\xE6\x86\xD8\xF9\xFA\x8D\x8E\x03\x59\x3A\x9B\xF1\x13\xB1\xE6\xF0\x41\x00\x87\xE6\x86\xE7\xFC\x88\x6E\xE7\x37\x78\xB7\x73\x47\xD5\x33\x00\x7A\xE1\x9F\x59\xD6\x66\x43\x00\x6E\xE7\x71\x00\x61\xE1\xF8\xF9\x35\x76\x64\xE1\xCB\x0B\x66\xE1\x1E\x92\x85\xE1\x03\x01\x40\x00\xC6\xF9\x55\xF1\xD3\xCD\x15\xF1\x8A\xE1\x9D\xBE\x1E\x8B\x94\xE7\xCE\x78\xEA\xF9\xD8\x6F\x74\xE1\x29\x32\xEE\xF9\x61\xE1\xF1\xF9\xF3\xF9\x78\x48\xF5\xF9\xF7\xF9\xF9\xF9\xB3\x75\xFC\xF9\xC0\x08\xFE\xF9\x15\x93\x00\xFA\xA3\x10\x03\xFA\x5F\xF1\x05\xFA\x6E\xE1\x58\x01\xAA\x8A\x6B\xF1\xB5\xE4\x89\xF5\xC4\xF2\xFB\x72\xB4\xEF\xD0\xE0\xC9\xF2\xFC\xD6\x91\xF5\x58\xDD\x20\xFA\x97\xF4\x20\x07\x66\x6C\x19\xD1\xBB\xA0\x18\xF4\xDF\x8E\xF9\x72\x4A\xF0\x31\xE7\xA1\x25\x9E\xF5\xF6\xF4\xC0\xE5\x61\xC2\xFF\x00\xA1\xF5\xE2\xF5\x38\xFA\xE3\xEF\x9A\x6F\x65\x32\x28\xF4\xF5\xF4\xE8\xF5\xCC\xF5\xF2\xBC\xEA\xF2\xE6\xF4\xB7\x03\x33\xFA\x38\xD1\x91\x6F\xAF\xF5\x0C\x6F\xB1\xF5\x7B\xF4\x0E\xE6\x37\xF4\xD5\xA4\x43\xFA\x8D\xF8\x11\xD2\x3B\xFA\xF2\xE4\xBC\xF5\x40\xF4\x4B\xF3\x7C\xF4\xEB\xE4\xC3\xF5\x4D\xFA\x78\x66\x2A\xFA\x5C\xFA\x84\xF4\x1A\xF5\xF1\xF5\x5E\xC2\xE9\xF5\x43\xF5\x20\xF5\x84\xC2\x59", +"\xFA\x1A\xEE\xDB\xE0\x0C\x3B\xD3\xF5\xD9\x4E\x9E\x70\xDF\xF5\xF8\xF4\xA3\xBD\x6F\xFA\x4F\xFA\x56\xD1\x73\xFA\xDD\xF5\x34\xF5\xFB\xF5\x88\xF4\xEB\xE4\xE1\xF5\x6B\xF9\x32\xFA\x66\xFA\x1C\x27\xE6\xF5\x7F\xC2\x3D\xFA\xF5\xF2\x3A\xBC\x44\xF5\x7A\xFA\x86\xFA\x13\x33\xEF\xF5\x35\xF3\x49\xFA\x11\xF5\x78\xFA\x71\x0F\x7E\xF4\x84\xFA\x70\xFA\x2F\xEE\x72\xFA\x53\x4D\xF9\xF5\xCE\xF9\x80\xFA\x4F\xF5\xEA\xF3\xFF\xF5\x7F\xAC\x29\xFA\x39\xFA\x4B\xD1\xB0\xE1\xE7\xF8\xF2\xF3\x31\xFA\x99\xFA\x4B\xEE\x7D\x6F\x2F\xD1\x1B\xBD\x96\xF4\x0E\xF6\x85\xFA\xA5\xFA\xAD\xFA\xDC\xE0\x8F\x6B\x74\xA5\x37\xFA\x7B\xFA\xA2\xE1\x53\x4D\x19\xF6\x6A\xFA\xFC\x73\x28\xBD\x17\x74\xB5\xE0\x20\xF1\x87\xE7\xEC\xF3\x2B\x6B\xA7\xD2\xB2\xCC\x17\xB0\xC3\xB4\xE7\xF9\xCA\xFA\x12\x96\xE2\x64\x50\xF1\x3A\x85\x3A\x65\x72\xE6\x9E\x44\x3A\x0B\x9A\xEF\xC6\xE0\x9A\xE1\x51\xF9\x9C\x3B\x66\x6C\x42\x63\xF6\xF1\x3F\xE7\x16\xF2\x77\x64\xAD\xF1\x06\x01\xAF\xF1\x63\x7F\xB4\x17\xD9\xFA\x65\xE6\x6B\x9E\x36\xF2\xBA\xF2\xAB\xF2\x9D\xF2\x44\x65\xB9\xF0\x2D\xF2\xBF\xF1\xFA\xE0\xDF\x03\xF7\xE0\x0F\xEB\xA6\x09\x9C\x41\x0B\x7C\xC6\xF1\xFC\xE0\xB1\xA5\xEB\x51\xDF\x8E\x6B\xE6\x4C\x65\xDA\xFA\x99\xF2\xDC\xFA\x27\xF2\x63\xF2\x18\xF2\xAD\xF2\xD1\xF0\x74\xF2\xD7\xF1\x65\x6B\xD9\xF1\x45\x90\x11\x66\xFB\xFA\x4B\x65\xFD\xFA\xA8\xF2\x61\xF2\x8D\xF2\x01\xFB\x72\xF2\x03\xFB\xFC\xF1\xB0\xF2\x1C\xF2\x44\xF2\x5C\x02\x46\xF2\x49\x2A\xA0\x38\xEE\xF1\x05\x07\x0F\x7C\x98\x9A\xD6\xF3\x69\xE6\xFC\xFA\xE5\xFA\xA9\x78\x8B\xF2\xFF\xFA\x38\xF2\x11\xFB\x7F\xF2\x13\xFB\x1A\xF2\x15\xFB\x83\xF2\xAD\xE0\xB2\x7B\x00\xF2\x5F\xAC\x0B\xFB\x4A\x65\x0D\xFB\xB9\xF2\x0F\xFB\x9B\xF2\x28\xFB\x58\x03\x3B\xF2\x7E\xF1\x21\xA6\x1A\x83\x0F\xF2\x31\xFB\xE4\xFA\xB5\x4B\x56\x0B\xDB\xFA\xEE\xE7\xDD\xFA\x2E\xA6\x02\xFB\x65\xF2\x04\xFB\xAF\xF2\x0D\xF2\x1E\xF2\x95\x5E\xFA\xFA\x40\xFB\x40\x52\x74\xE6\x4F\x0B\xFE\xFA\x44\xFB\x00\xFB\x46\xFB\x12\xFB\x48\xFB\x14\xFB\x0D\xF2\x52\xF6\x23\xA6\x94\xA5\x31\xF2\x32\xFB\x63\xF1\x41\xFB\x3A\x0B\x43\xFB\x25\xF1\x55\xFB\xBC\xF2\x47\xFB\xBE\xF2\xAE\xF2\xE7\xF1\x2D\xFB\x06\x7C\x3E\xF2\x72\x7C\xE0\x01\xF1\xFA\xB3\xF8\xF2\xAA\x56\x38\x3E\xA6\xA4\x65\x4A\xF2\x9D\x10\x4C\xF2\x3F\xFB\x22\xFB\x61\xFB\xA8\x03\x63\xFB\xB9\xE7\x62\xF2\x56\xFB\x29\xFB\x58\xFB\x2B\xFB\x57\xF2\x53\xA6\x59\xF2\x4E\xFB\x7A\xFB\x50\xFB\x42\xFB\x53\xFB\x64\xFB\x27\xFB\x80\xFB\xAC\xF2\x82\xFB\x56\xF2\x83\xA6\xA1\x7C\x27\x01\xFD\xE0\x84\xFA\x5F\xFB\x65\xE0\x23\xFB\x7D\xFB\xD2\xE7\x8D\xFB\x66\xFB\x57\xFB\x68\xFB\x49\xFB\x6A\xFB\xA1\xF2\xB2\x7C\x77\xF2\x79\xFB\x0C\xFB\x99\xFB\x8B\xFB\x7E\xFB\x10\xFB\x8E\xFB\xEA\xFA\x6D\x63\xEC\xFA\x30\xE1\x84\xA6\x57\xD2\x87\xFB\xA6\xFB\x7B\xFB\x52\xFB\x0E\xFB\x9A\xF2\xB7\xF1\x8E\xF2\x3A\xFB\x31\x96\x94\xF2\x01\x24\xB2\xFB\x33\xFB\xA7\xFB\xB6\xFB\x26\xFB\x7F\xFB\x9D\xFB\x81\xFB\x9F\xFB\x59\xFB\x3B\x7D\x61\x81\xA4\xF2\x13\xA6\x97\xFB\x47\x65\x34\xFB\xE7\xFA\x36\xFB\xB8\xFB\x38\xFB\xAC\xFB\x47\x0F\xAE\xFB\x1C\xF2\xB8\xC2\xB4\xF2\xA5\xFB\xBF\xFB\xB4\xFB\xE6\xFA\x50\xF2\xE8\xFA\x9C\xF2\x3A\xFB\xA1\xFB\x7F\xF1\xCB\xFA\x53\xE6\x9D\xF1\x2A\xE7\xE9\xF0\x53\xCD\x2E\xE7\x6D\xF3\x03\xEC\x10\xEF\x00\x64\xF1\xE7\x12\xF6\xB9\x63\xDF\x91\xB8\x44\x9A\xDC\x71\x66\xB9\xFA\x07\xEE\x31\xEE\x66\x69\x74\x6F\x45\x00\x6E\xF1\x29\xF1\x1C\xD1\x21\xF1\x31\xFA\x0B\xE7\xC3\xE8\x18\xE7\x71\x7D\x0D\x9A\x12\x3D\xE4\x9B\x00\xFC\xD9\xE8\xA9\x92\xE3\xFB\x0A\xFC\x0B\xFC\x0C\xFC\xE7\xF8\x3A\x66\x47\x00\xFB\xFB\x20\xBD\xF0\xFB\xF3\x64\x42\xF1\xD0\x5C\x66\x6C\x81\xE7\x0D\xFC\xF0\xBA\x91\xDC\x97\xCF\x11\xFC\xB7\xCF\x1D\xD7\xC6\xE7\xB2\x6A\xCD\x32\x5D\xF2\xD7\xE7\x19\xFC\x25\xFC\x87\xE0\x3A\xF1\x8D\x35\x26\xFC\xE4\x6F\xCE\xB0\x4A\x00\x83\xF5\x06\xE4\x8D\x34\xDC\xDF\xF7\x6F\x63\xCC\x20\x11\xF7\xE7\x92\xE1\x28\x0D\x78\x55\xFD\x0B\xB7\x4F\x61\x01\x86\x5F\x10\x08\x33\xFC\xF9\x2C\x2A\xFC\xC1\xFA\x90\x10\x1F\xFB\x01\x01\xAA\xDF\x07\xF6\x79\xD3\x3A\x85\xA3\x9A\x2A\x6B\x75\xDD\x41\xFC\x71\x0F\x35\x45\x4D\x00\x1D\xFC\x4B\xBD\xE6\xF0\x37\x10\xC1\xF2\x70\x0F\x4F\x00\x6E\xE7\x48\x9A\x31\xF1\x58\xFC\x79\xE7\x16\x98\x47\x46\x7A\xE1\x18\xFC\xD9\xB0\xDB\xA0\xA7\xF6\xB2\x76\x17\xFC\x4D\x58\xF0\x5A\x00\xF0\xF1\xF7\xBA\xF7\x1E\xF0\xBC\xF7\x1D\xC8\x21\xF0\x5A\xD7\x8D\xDE\x21", +"\xD6\x8F\xDE\x30\xE9\x8C\xED\x92\xDE\x52\xD4\x10\xDB\x70\x83\xD5\xCF\xC1\xF8\xD7\xCF\xC3\xF8\xA2\xB8\xC5\xF8\x4E\xF9\xB7\xED\x20\xF6\xBD\xE9\xD1\x72\x64\xFC\xA9\x5B\x27\x4D\x4F\xF0\x8D\xEB\x02\xF0\x10\xF7\x94\xF8\x0B\xF8\x96\xF8\x0D\xF8\x98\xF8\xF9\xF7\x9A\xF8\x7C\xF7\x9C\xF8\x51\xB1\xBF\xF8\xBA\xB8\x79\xFC\x61\xE2\x7B\xFC\xC6\xD3\xD1\xED\xCC\xF8\xC7\xF8\xE4\xD6\xF2\xC4\xAA\xF0\xDD\x91\x5C\x02\xE4\xDF\x1B\xF0\x68\xFC\x92\xF8\x62\xF8\x8A\xFC\x64\xF8\x0C\xF8\xBF\xF7\x67\xF8\x66\xF7\x90\xFC\xB1\xF7\x92\xFC\x6A\xF7\xD3\xEC\x01\xE2\xE8\xED\x03\xE2\x47\xEB\xD2\xF8\x8C\xA7\x9F\xFC\x3E\x98\xA1\xFC\x85\xFC\x32\xEE\x9E\xEC\x88\xFC\x50\xF7\x7A\xF8\x98\xF7\x7C\xF8\x1F\xF8\xFB\xF6\x7F\xF8\xFD\xF6\x81\xF8\xE7\xF6\xF8\xF8\x00\xE2\x7D\xF6\x59\xC6\x7F\xF6\x5B\xC6\xB2\xF9\x7F\x90\x83\xF6\x38\xEF\xFC\x16\x83\xFC\x89\x0C\xA2\xFC\x67\xFC\x07\xF8\x69\xFC\x68\xED\x4F\xEE\xC1\xED\xDD\xED\xAE\xF6\xF6\xED\xB0\xF6\xF8\xED\xB2\xF6\xE3\xED\x12\xF8\x49\xDF\x30\xEA\x16\xEE\x72\x8F\x8B\x9D\xB8\xFC\x46\xA7\xBA\xFC\xEC\x5A\xBC\xFC\xC6\xEC\x34\xEE\x5E\xDE\x1C\xF8\xC1\xFC\x55\xF0\xC3\xFC\x9B\xF7\xC5\xFC\x9D\xF7\xC7\xFC\xFF\xF6\xC9\xFC\x89\xEC\xFC\x95\x6A\x41\x50\xFC\x1A\x83\x47\xDA\x21\xF6\x98\x79\xD4\xFC\x8C\x0E\xD6\xFC\x86\xFC\x0A\xEC\xBE\xFC\x33\xF8\x97\xF7\x6E\xEE\x1E\xF8\x2C\xEF\xC4\xFC\x58\xF0\xAD\xFC\xC3\xF7\x82\xF8\x0E\xEB\x71\xFB\x5E\xDA\xE9\xE8\x2A\xEB\xF0\xF8\x07\xB2\xF2\xF8\x45\xEE\xB4\xC9\x94\xEA\xEA\xFC\x65\xE7\x5C\xFC\x34\xF0\xCD\xF7\xE7\xEF\x93\xF8\x0B\xFD\x2A\xEF\x0D\xFD\x75\xF6\x0F\xFD\x77\xF6\xE6\xF7\x58\xF7\xAF\xFC\x59\xEE\xCF\xF6\xFA\xF8\xAA\x97\xFC\xF8\xA3\xF9\xE3\xEE\x14\xF9\x00\xF9\x16\xF9\xD7\xF6\x02\xFD\x82\x0F\x04\xFD\x3F\x83\x06\xFD\xEE\xFC\x05\xED\xF0\xFC\xAF\xDF\x5C\xF6\x39\xF0\xD6\xEE\x3B\xF0\xD8\xEE\x2D\xF6\xCA\xEB\x34\xF7\xCC\xEB\x00\xF7\x16\xD7\x50\xF4\x1F\xE9\x05\xEC\x0A\xF9\x2E\xF8\x37\xB8\x1F\xFD\xA7\xB8\xEC\xFC\x66\xFC\x07\xFD\x33\xEE\x09\xFD\xE1\xE3\xDB\xED\xDC\xFC\x51\xEE\x65\xF8\x9E\xF6\xAB\xFC\xC1\xF7\x11\xFD\xFB\xF7\x13\xFD\x46\xF9\x1D\xA8\x31\xFD\x66\xB2\x11\xF9\xFD\xF8\xEA\xEB\x14\xB6\x23\xF7\x99\xEE\x52\xFD\x4C\x76\x3C\xFD\xE3\xDF\xBB\xFC\xDF\xF7\xF2\xFC\x0C\xFD\xC2\xFC\x0E\xFD\xF6\xFC\x10\xFD\x2C\xFD\x8B\xF7\x65\xFD\x59\xF9\xAB\xEE\x39\x6A\xCD\xB9\x1D\xF7\xAF\xEE\x34\xFD\xF8\xEE\x36\xFD\x29\xE4\x25\xF9\xD2\xFC\x82\xFC\xA0\xFC\x21\xFD\xFA\xEE\x0E\xF7\x81\xED\x5B\xFD\xDB\xFC\x90\xEF\x86\xE9\x92\xEF\x49\xEC\x94\xEF\x4B\xEC\x96\xEF\x4D\xEC\x98\xEF\x3E\xC0\x38\xF7\x74\xEF\x03\xFD\x8C\xFD\x13\xD9\xB6\xEF\xCC\xEF\x77\xDF\x36\xEE\x91\xEC\x38\xEE\x93\xEC\x1F\xD8\x25\xED\xC4\xE1\x97\xEC\x04\xD6\xF7\xE9\x9E\x6D\x30\xF9\x8A\xFD\x9F\xFD\xB9\xFC\x8D\xFD\xA0\xEF\x8F\xFD\x37\xEB\xBF\xFC\x76\xFD\x27\xFD\x78\xFD\x29\xFD\x7A\xFD\x2B\xFD\x80\xF8\xE7\xF7\x7E\xFD\x61\xF9\x75\x80\xF4\xEE\x2C\xE7\x87\x75\x72\xFD\x6F\x96\x3E\xFD\x75\xFD\x43\xFD\x29\xF6\x60\xE9\x2B\xF6\x62\xE9\x48\xFD\x13\xEC\x4A\xFD\x15\xEC\x4C\xFD\xAB\xEC\x76\xEC\xD3\xDB\x0B\xEF\x06\xB3\x3B\xBA\x8B\xFD\xB3\xFD\xA1\xFD\x22\xFD\xA4\xFC\x24\xFD\xA6\xFC\x26\xFD\x73\xF6\x28\xFD\x54\xF7\x2A\xFD\x56\xF7\x7C\xFD\xD7\xF7\xC1\xFD\x16\xBE\x7F\xF7\x79\xA9\x54\xFD\x0A\xC9\x56\xFD\xF5\x5A\xCB\xEF\x88\xF6\x65\xEA\x0A\xFD\xC0\xFC\x77\xFD\xF4\xFC\x79\xFD\xD4\xF7\x7B\xFD\xBF\xFD\x2D\xFD\xEA\xFD\x75\xF9\x9E\xF8\x48\xF9\xD1\xE9\xB7\x3E\xE9\xFC\xC7\xFD\xF0\xFD\x75\x34\xCA\xFD\xBE\xEE\xA2\xEC\xF4\xE2\x57\xEF\xA5\xEC\x61\xF6\xA7\xEC\x63\xF6\xD6\xEF\xD5\xF8\x2C\xAF\xA2\xF7\x5C\xA2\xEE\xFD\xA6\x91\xC9\xFD\x32\xF8\x91\xFD\x53\xF0\x7B\xF8\xF8\xFD\xBC\xFD\xFA\xFD\xBE\xFD\xC6\xFC\xC0\xFD\xC8\xFC\x1C\xF9\x1D\xEA\xA9\xDE\x56\xF9\x9E\xFC\x05\xFE\xB4\xFD\xF2\xFD\xB6\xFD\xFC\xEE\x1A\xFE\x9B\xF6\x6C\xFC\xDE\xFC\x01\xEF\xC0\xF7\xC6\xED\x52\xF8\x05\xEF\xE4\xFC\xE5\xED\x6B\xF7\x4C\xF7\xBE\xDE\x5D\xF9\x3C\xB7\x15\xFE\x29\xFE\xDD\xFD\x8E\xFD\x4E\xF7\x90\xFD\x50\xED\x0A\xF8\xA8\xFC\x8C\xFC\xAA\xFC\x8E\xFC\x0F\xF8\xFA\xF7\x0B\xF0\x2E\xFD\xB3\xF7\xA0\xD5\xC1\xEC\xDC\xF7\x3E\xFE\xA0\xFD\x4A\xD2\xDE\xFD\xD8\xFC\xA5\xFC\x6A\xFC\x45\xFE\xBD\xF7\xA9\xFC\xF7\xF7\x49\xFE\x68\xF8\xE8\xFD\x23\xF8\xFE\xFD\x7C\xF9\xCA\xFC\xD4\xFA\x48\xAF\x6A\xF9\xD8\xF6\x16\xFE\x02\xB2\x18\xFE\x61\xF8\x58\xFE\x63\xF8\x5A\xFE\x47\xFE\x5C", +"\xFE\xE6\xFD\x89\xF7\x5F\xFE\x3B\xF8\x61\xFE\x88\xF9\x8C\xD0\xFF\xF7\x8C\xD5\x01\xF8\xEC\xEC\xED\xFD\x3F\xFE\x54\xFE\x41\xFE\xA7\xF7\x43\xFE\x53\xEF\x09\xFE\x55\xEF\x0B\xFE\x5F\xF6\x58\xEF\x0E\xFE\xC4\xEE\xD2\xFD\x87\xEC\xD4\xFD\xD1\xDB\xD6\xFD\xA7\xE9\x78\xF9\xFB\xEF\x3B\xFD\x53\xFE\x6A\xFE\x78\xF8\x37\xF0\xCB\xFD\x2E\xF7\x0D\xEE\x30\xF7\x0F\xEE\x32\xF7\x3F\xED\x9E\xF7\x41\xED\xFB\xFC\x06\xD9\x7E\xF9\x3A\xBB\x80\xF9\xF8\xEF\x4E\xD5\xE0\xEF\xBE\xF6\xDB\xFD\xEB\xFC\x2A\xFE\xA3\xFC\x56\xFE\xE0\xFD\x6C\xFE\xA7\xFC\x6E\xFE\xE4\xFD\x87\xF7\x71\xFE\x21\xF8\x73\xFE\x6A\xF8\x75\xFE\x9D\xF8\x7D\xF9\x3F\xF8\x58\xF8\x1B\xDC\x4F\xDF\x1D\xDC\xA5\xFE\x16\xF9\x45\xF8\x0F\xE4\x68\xFE\x53\xCD\x94\xFE\xBC\xEE\xA4\xFD\xE9\xEA\x4C\xF8\xCA\xDE\x4E\xF8\xEF\xDA\x50\xF8\xE1\xFC\x35\xFE\xA2\xF6\x37\xFE\x07\xEF\x29\xF0\x5B\xEE\x28\xF8\x9E\xE6\x12\xF0\x48\xED\x73\xF8\x87\x82\x87\xC5\xC4\xFE\x5D\xDA\xC6\xFE\x80\xED\xB7\xFD\xF5\xFD\xB9\xFD\xE3\xFD\xBB\xFD\xE5\xFD\xBD\xFD\xE7\xFD\xFC\xFD\x7D\xFD\x23\xFE\x66\xFD\xBA\xFE\x85\xF8\xA4\xE6\x35\xFD\x2D\xF0\x91\xF9\x99\xE2\x13\xB0\x1E\xFD\x7D\xFE\xDF\xFE\x91\xF8\xAE\xFE\xDA\xFC\x1B\xFE\xF3\xFC\xF9\xF6\xF5\xFC\x1F\xFE\xE8\xFE\x21\xFE\xFD\xFD\xEB\xFE\x7F\xFD\x56\xF8\x6E\xF8\xBC\xFE\xE9\xDF\xDC\xEA\x74\xE4\xE6\xDD\x90\xF7\xB4\xF9\x1C\xC0\xC6\xFD\x93\xFE\x74\xFD\x19\xFE\x44\xFE\x6D\xFE\x30\xFE\x5F\xFD\xAF\xF6\x33\xFE\x55\xEE\xD0\xFE\xB3\xF6\xD2\xFE\xA4\xF6\x14\xF8\x13\xCC\x93\xED\x88\xDC\x11\xC2\xA4\xF8\xF9\xEA\x64\xF0\xFB\xEA\x40\xFC\x88\x7D\x28\xFC\x02\x01\x0C\xE0\xBC\xDC\x33\xE1\xB0\x77\xBB\xF4\x44\x0F\x0B\xE0\x27\xFF\xD2\xE0\xE6\xF0\x51\x00\xCE\xFA\xFE\xED\x8B\x03\x4D\x64\x1A\x65\xFE\x7A\x4A\x47\xF1\xF0\x52\x00\x6E\xE7\xC9\x4A\xD7\xD1\x4C\x64\xA2\x60\x3A\xFF\x5B\x7D\x4A\x47\x2F\x09\x8D\xE6\x0D\xE8\x30\x5B\x7C\xE7\xDC\xD2\xA3\xE6\x8C\xE7\xF4\xA5\x72\xA5\x32\xFF\x66\xF3\xFF\x00\x74\x6F\x53\x00\xFF\xFC\x0F\xD0\xC1\x7B\x55\xFF\x78\x75\xCD\xF4\x5F\x9A\xD6\x01\x60\xFC\xEE\xD5\x06\x01\xA1\x10\xAC\xF8\x25\xBD\xDF\x6E\x28\xE7\x54\x8D\x4D\xBD\x2C\xF9\x65\x66\x9F\x8C\x69\xE0\xD4\xF9\xBE\xE4\xCA\xF2\xA5\xF4\x92\xF5\xDD\xF4\x94\xF5\x6D\xF1\x3F\x7B\x6B\xFF\x36\xFA\x13\xA6\xEE\x72\xEF\x8D\xEC\x36\x3C\xFA\x93\xFA\xD2\xF3\x95\xFA\x40\xFA\xD5\xA4\x78\xFF\xD5\x9B\x7A\xFF\xA6\xF5\x7E\x8E\x8A\xFA\x44\xF4\x8C\xFA\xAA\xF5\xB6\xF5\xCF\x67\x81\xFF\x86\xB5\x83\xFF\xE6\xE4\xF1\xF2\xE8\xE4\x7C\xFF\x5F\xF4\x7E\xFF\x38\xF4\x20\xFB\x01\x01\x8C\xFF\xDC\xB6\x8E\xFF\xF7\x90\x86\xBD\xBD\xFA\x2A\xBC\x6C\xFA\x5A\xF5\x10\xA5\x84\xC2\x98\xFF\x29\xA7\x9A\xFF\x67\xBC\x5B\xC2\x69\xF4\xC1\xE5\x37\xAC\x8A\xFF\x11\x66\xA3\xFF\x1B\xB6\xA5\xFF\xF4\xEF\xBC\xF3\x1A\xF6\xCB\xF5\x94\xFA\xA9\xFF\x7E\xA0\x80\xFF\x6A\xFF\x89\x47\x1F\xF3\xC7\xF3\x55\xFA\x2C\xF3\xCA\xF3\xB7\xFF\x74\xFF\xB9\xFF\xCF\xF3\x89\xFA\x92\xFF\xF7\xF4\xB5\xFF\x41\xA5\xBF\xFF\xE6\x89\xAF\xFF\x97\xF3\xBD\x6A\x9A\xA0\x92\xFA\x9F\xFA\xF3\xF5\xFD\xF5\x96\xFA\xC8\xFF\x1A\xA7\xC1\xFF\x55\xF5\xE6\xF3\xB2\xFF\x9E\xFF\x4A\xFA\x60\xF4\x8A\xF4\x31\xFA\xAD\xFF\x37\xB2\x6B\xFF\x0F\xD0\xA9\xFA\xB1\xFA\xDE\xFF\x82\xAF\xE0\xFF\xAF\xFA\x6D\xF5\xDD\xFF\xB8\xFF\xF8\x41\x9B\xF4\x13\xF6\xE5\xF4\x81\xE9\x2B\x6B\xE4\xFF\x08\xBA\xEC\x36\xBC\xFA\xDC\xF3\x1B\xF6\x8A\xBC\x6F\xFF\x5E\xFF\x40\x7A\x55\x00\x36\xFF\x35\xAB\x98\x0D\x5D\x64\x5E\xF1\xF2\xE7\x04\xE4\x55\xA8\x18\x8A\x79\x83\x72\xDC\x73\xD4\x54\xFF\x7F\xC9\x60\x00\x00\xA7\xC6\x76\x5C\x02\x16\x7A\x44\x7A\x00\x80\xA6\x2D\x7C\xF1\x69\xF6\x40\xCB\x70\x9B\x63\xFF\x37\x64\x2A\xD5\x7F\x4C\x72\x81\x78\x5E\xA1\x11\x9F\x69\x29\x7D\x9C\x2D\x8A\x30\xF6\x6C\x03\x16\x16\x0A\x27\xC8\x38\x9C\x6F\xB3\x0E\x76\x70\x1E\x5B\x75\x68\x2A\x32\xE4\xB0\x1F\x00\xAA\x52\x07\xCA\x1F\x0E\x5B\x98\x7B\x84\x2B\xD9\x02\xE6\xE7\x6A\x20\x2F\x2B\x26\x6A\x7F\x69\x73\xA4\x2E\xB5\x32\xD3\x68\xCD\xD2\x26\x00\xB5\x7F\x5E\x00\x81\x68\x77\x05\x80\x4C\x01\x16\x80\x21\xD1\x47\x72\x31\x00\x90\xA2\x13\x03\x85\xF7\x67\x47\x71\xCC\x68\x7E\x01\x70\x1E\x1D\xC3\x6B\xDD\x35\xB2\x7D\x76\x78\x16\x7A\xBF\x0E\x3C\x00\x84\xD0\x4A\x9D\x56\x50\x06\x3C\x3E\x05\x82\x10\x80\x53\x72\x45\x00\xDC\xC7\x51\xEF\x78\x5C\x06\x6D\x34\x36\x68\xDC\x35\x26\x80\x23\xF4\x70\xC9\x6C\xFA\x49\x01\x8D\x03\x84\x05\x80\xEA\x7D\xF8\x75\x57\x00", +"\x9C\xD8\x5B\x3A\x07\x62\x06\x38\x72\x75\x7C\x36\x78\xFC\x2E\x6E\xE7\x5B\xC0\x50\xD2\x6E\xEC\x43\x06\x81\x6F\x06\xE1\x6D\x88\x31\x66\x00\xAA\x00\x56\x01\x96\x50\x03\x04\x84\x8C\x19\x16\x81\x9D\x7F\x6F\x66\x70\x1E\x1B\x01\x0E\x3B\x7D\x03\x04\x1E\x78\x0C\x7B\x24\x15\x51\x00\xB5\xC0\x70\x61\x39\x03\x84\x1C\x5B\x0F\x81\xDE\x05\x3E\x80\xFD\x3E\x7F\x00\x8A\x02\x91\x18\x3C\xE9\x26\xDA\x32\x16\x00\xB7\x73\xAD\xF4\x73\x00\xA9\x4A\x68\x69\x09\x08\x86\xE9\x7F\x14\x81\xBC\x05\x2F\x09\x19\x01\xBB\x66\x69\x03\x8F\xC2\x74\xB5\x04\xD9\x03\x3B\x80\x2C\x63\x63\x71\x16\x9B\x39\x02\x0E\x76\x74\x21\x6A\x26\x81\x8C\x78\x0C\x6F\x1D\x01\xA9\x9E\x6B\x04\x84\x05\x86\x4F\x6A\x23\x80\x4E\x07\x90\x00\xEB\x00\xA2\x1B\x01\x36\x71\x68\x30\xEE\x04\x0E\x81\xAE\x7A\x00\x00\x3F\x01\xA1\x01\x89\x28\x70\x05\x84\x0C\x82\x14\x80\x10\x80\xA0\x00\xEF\xDF\x23\xF0\x6C\x19\x34\x0A\x81\x88\x75\x24\x81\xE6\x06\x34\x00\x8C\x4D\x4E\x46\x70\x7B\x0F\x0C\x7B\x75\x3D\x35\x81\x65\x75\xC4\x00\x88\x01\x86\x03\x93\x04\x8C\x0C\x85\x16\x82\x03\x17\x65\x80\x9F\x00\xB8\x01\x98\x01\x90\x06\x86\x04\x83\x38\x6A\x0D\x80\xB8\x07\x5E\x00\xCE\xE6\x4E\x89\x33\x35\x7C\x01\x81\x16\x83\x36\x80\x4F\x80\xC8\x00\x9C\x1D\x33\x46\x60\x07\x81\x0F\x80\x2B\x05\x2E\x80\x53\x80\xA5\x08\x6D\x00\xB7\xEC\x7C\x02\x8A\x04\x86\xED\x73\x12\x80\x6C\x80\x2D\xD3\x32\x01\x81\x00\x8B\x01\x8E\x0D\x86\x1B\x50\x3D\x80\x82\x80\x8F\x00\xE3\x01\x83\x35\x1A\x07\x8B\x05\x87\x0D\x81\xD2\x0A\xB7\x73\x5C\x00\x6C\x01\x89\x95\x6D\x38\x22\x10\x85\xB0\x79\xF5\x6F\xEC\x19\x07\x01\xBE\x00\xA5\x01\x17\x07\x8D\x83\x04\x1C\x82\xC5\x53\x40\x80\xD6\x6F\x6E\xCE\x43\x02\x8F\x05\x8F\x34\x6C\xB7\x00\xA7\x06\x54\x80\xE1\x00\xD8\x12\x2F\x24\x03\x09\x83\x0A\x84\x0F\x82\x42\x80\x7C\x07\x28\x01\xAF\xE9\x47\xE4\x16\x04\x8E\x76\x77\x12\x80\x49\x80\x41\x58\x2F\x06\x6F\x01\xB3\x02\x98\x03\x85\x10\x85\x39\x29\x46\x81\x66\x80\x66\xEC\x4F\x01\x8B\x04\x8A\x01\x88\xC2\x2B\x15\x82\xDB\x72\x56\x80\x37\x01\x8F\xE2\x6A\x04\x16\x03\x84\x14\x84\x11\x82\x46\x1D\x9F\x80\x2E\x01\xEA\x00\xB8\x03\x80\x36\x73\xF6\x77\x54\x7D\x1B\x79\x73\x7E\x22\x0F\x17\x00\xA6\xC1\x6C\x26\x51\x06\x02\x2B\x80\xBC\x72\xA2\x07\xC9\xDC\x4F\x69\x5C\x29\x1E\xCE\x78\xEB\x7B\x92\x7D\x3B\x7C\x3C\x7E\x18\xFD\x44\xA7\x77\x3C\x42\x43\x7D\xC7\x7C\x2A\x7F\x1F\x7F\x74\x7C\x47\xD0\x7D\xD2\x24\x05\x83\xF8\x7E\xE9\x5C\x92\x7E\xC0\x5E\x26\x7B\x13\xEB\x44\xF1\x46\x24\x77\xC7\x50\xB3\x75\x9A\x64\xA4\x5F\x83\x36\x73\x01\xFA\xF9\x64\xF8\x65\xB5\x75\x35\x69\x7C\x6A\x4F\x5B\x5A\x7E\x47\xC9\x7A\xB3\x6A\xE6\x71\x30\x31\x18\x87\xF3\x7B\x60\x81\x58\x7E\xCB\xFC\x29\xD1\x4D\xF3\x6B\x45\x77\xE9\x71\x81\x69\x50\x6F\x6F\x47\x8D\x01\x9F\xFD\x4F\x06\x9F\x1C\x41\x8E\x7C\x5A\x79\x71\x7C\x5A\x7B\x42\xEB\x04\x03\x9E\xD8\x61\xE8\x76\x24\x3B\x2C\x80\xE6\x74\x7F\x64\x5D\xDA\x33\xEC\x48\x76\x77\xC5\x72\x26\x74\xC8\x76\xE7\x5E\x23\x77\x19\x95\x50\x16\x21\xCC\x47\x0D\x80\xB6\x64\x7C\x77\x9E\x6D\xDC\x75\x7D\xE2\x52\xD2\x67\xE6\x6B\x1D\x64\x44\x75\x68\x36\x69\x80\xD0\x80\x73\xEB\x7C\xEC\x4E\xF5\x79\x73\x77\x90\x7D\x32\x81\xCD\x77\xA8\x7E\xBD\x01\xE2\xF5\x4A\xF9\x40\x0E\x80\x8B\x66\x36\x83\xEC\x6A\xD7\x47\xBA\xEB\x7F\xF1\x69\x90\x78\xC8\x75\x9B\x7C\x5F\x44\x6D\x81\xF7\x71\x41\xEE\x3C\xA0\x41\xB0\x64\xB8\x7E\xFF\x76\xE0\x79\xAD\x70\xB7\x7E\xFF\x00\x09\xFB\x6F\xFF\x7F\x0D\x8C\xF1\x7D\x39\x76\x39\x7E\xA2\x07\x18\xDE\x2B\xF2\x44\xD7\x60\x6E\x37\x1D\x83\x25\x4C\x6C\x7F\xF1\x80\x9F\x01\xE5\x03\xA1\x06\x9D\x61\x72\xE4\x68\x1C\x6B\x9D\x35\xCC\x80\x13\xEE\x0C\xFD\x4C\x08\x7E\x67\x71\x82\x52\x8A\x77\xB5\x7C\xF6\x47\xD7\x01\xC0\xC6\x40\x96\x64\x0F\x84\x85\x78\x05\x7A\xC7\x7E\xE8\x74\x0C\x99\x4A\xF2\x67\x42\x78\x0F\x8E\xF1\x72\x3F\x82\xEB\x71\x4E\x08\x50\xF9\x0B\x04\xAD\x07\x80\x66\x7F\xF5\x77\xC4\x7F\x62\x80\xB9\x80\x13\x02\xF3\xD5\x6F\xE5\x76\xCB\x4C\xE3\x7D\x99\x63\x84\x52\x06\x81\x40\xF0\x65\xF1\x76\x1C\x63\xCB\x77\x9B\x53\x3D\x83\x6C\x80\xE6\x80\xEA\xCA\x4E\xD3\x6D\x8E\x45\xF3\x76\xA3\x72\xC2\x73\xF3\x32\x10\x81\x30\xF6\x0E\x04\x8D\x40\x79\xC9\x76\x4C\x4B\x1B\x6E\x7D\x80\xC0\x80\x19\x02\xC7\x96\x79\xE6\x67\x0E\x81\xD0\x71\xF1\x3B\x89\x80\xF9\x80\xC1\x01\x89\xF3\x7A\xCE\x6B\xCC\x7F\xEE\x78\xA4\x6C\xA9\x7F\x14\x72\xA7\xFE\x4A\x03\x96\x07", +"\x88\x11\x85\x1B\x84\xDA\x7E\x49\x7A\x12\x72\x38\xDC\x26\xC8\x42\xE1\x7F\x2A\x62\xEF\x7A\x52\x76\xB0\x7F\xEA\x80\x00\x02\xCC\x04\x98\x07\x8D\xCD\x73\x04\x79\x55\x76\x66\x7D\x44\x7C\xA9\xB7\x16\xE0\x70\xC6\x6B\x0E\x80\x24\x85\x39\x82\x93\x81\xC0\x7E\xA8\xEA\x21\xF2\x52\x56\x5D\x2C\x69\x42\x71\x35\x7E\xF0\x3C\x32\x81\x05\x02\x94\xED\x45\xFC\x75\xF6\x7F\x86\x7D\x06\x66\xE8\x6F\x55\x75\xA9\xB7\x0D\xFE\x79\x17\x44\x10\x8D\xE4\x7D\x0A\x7E\x5D\x7D\xE9\x5D\xBB\xF9\x3E\x9F\x49\xEB\x76\x6C\x7F\x9B\x7E\x62\x41\x04\x78\x41\x81\x7C\x84\x5B\x8B\x7E\x85\x69\x84\x7C\xF6\x79\x3C\x7E\xC7\x45\xF1\x7C\x80\x72\x44\x97\x31\x0E\x36\xA7\x5B\x23\x1F\x43\x7C\xFE\x73\xEA\x7C\xB5\xF8\x19\x08\x50\x0A\x91\xA6\x34\x85\x22\x0C\x01\xEC\x20\x25\x3E\xB8\x06\x0B\x05\x93\xE7\x7D\x25\x7E\x28\x80\x69\x48\x9C\x5F\xC8\x07\x6F\x13\x5F\x27\x61\xA4\x46\x4B\x30\x70\x02\x54\x83\x77\x7D\x46\x81\x93\xBE\x26\x05\xA5\x3F\x7C\x09\x08\x23\x3A\x27\x07\xA7\x81\xA8\x7F\xA7\x74\x66\xE1\x64\x01\x0B\xCF\x7D\x09\x08\xEE\x07\x3C\x68\x67\x5A\x01\x8C\x37\xE7\x33\x56\x74\x01\x03\xA1\x78\x81\x26\xB5\x33\x89\x73\xEE\x7D\x7A\x00\x21\x85\x6A\x16\x81\x63\x39\x43\x7E\xCB\x69\x0D\x7D\xE0\x86\x1D\xF4\x78\x1D\x16\x14\x81\xB0\x01\xBA\x6A\x88\x7D\x97\x3E\x9F\x59\x0A\xF4\x40\xE7\x3B\x15\x8D\xA0\x7B\x04\x83\x62\x02\xB7\x73\x19\x79\x42\x05\xB0\xD7\x25\x16\x80\x8C\x4F\x58\x82\xDB\x72\x66\x81\xBE\xD1\x00\x00\x28\x0B\x8E\xB8\x3E\x2C\x83\x30\x70\xE2\x48\x69\x81\x60\x09\x54\x05\x8D\x68\x77\x16\x89\xB6\x40\x57\x82\x08\x39\x96\x7F\x02\x01\x6D\xA4\x4C\xFB\x4F\xC5\x70\x88\x73\xD4\x4E\x19\x37\xA4\x2F\xD5\x4C\x08\xFC\x4E\xBF\x6A\xF0\x70\xEC\x74\xC1\x7E\xB0\x76\x44\x7F\x5A\xEF\x0A\xFD\x4E\xBA\x6C\xC7\x79\x1A\x87\xD6\x78\x4D\x75\x6F\x6B\xB9\xF8\x6E\xD1\x48\x5B\x62\xE3\x7D\x97\x32\x7E\x7F\x00\x62\x7E\x24\x02\x03\xBE\xEE\x60\xB8\x60\xBA\x72\xE2\x72\xE8\x7B\x51\x74\xA2\x7B\x49\xE9\x46\xEE\x72\xE2\x76\xE3\x74\x45\x69\x53\x83\xC3\x81\x26\x7B\x7C\xE8\x6F\x85\x5B\xED\x67\x9B\x75\xD0\x6A\x50\x6E\xC5\x80\xF1\x62\x18\x03\x92\xFE\x42\xFA\x63\x18\x84\xE8\x7D\x60\x82\xA1\x7F\x06\x7F\xD0\xFD\x05\xD9\x4A\x0C\x86\x76\x72\x23\x85\x02\x69\xBE\x6A\x7B\x02\x44\xC9\x4F\xF9\x63\x08\x56\xE5\x79\x97\x57\x65\x82\x45\x69\xFA\x1D\x19\x03\xBF\xEC\x61\xB4\x72\x64\x73\xD2\x71\xB1\x76\x6A\x7E\x2D\x71\x73\xFC\x5C\xC4\x53\x7A\x77\x73\x7A\xF3\x00\xE3\x6B\x24\x18\x67\x7E\x55\x02\xA9\x4F\x57\x06\x9C\x12\x56\x34\x84\x8E\x6D\xCC\x81\x35\x7F\xFA\xFE\x2F\xFC\x79\x2C\x71\xF1\x72\x02\x78\xE3\x7F\xC0\x76\x8D\x7F\xE3\xFC\x71\x04\x93\xE0\x7C\x0C\x86\x69\x7D\x0A\x6D\xD7\x80\x01\x5A\x5F\x03\x95\xFD\x5B\xD9\x63\xF4\x7D\x65\x7D\xD0\x7E\x51\x7E\x30\x7B\x39\x03\xDA\xDD\x7B\x0C\x9C\x76\x7D\x33\x80\xDF\x6A\x91\x6C\x8A\x81\x79\x69\x6F\x06\xAB\xD1\x51\x1B\x87\xEC\x78\x7F\x72\x2D\x76\xC2\x76\xDA\xE9\x41\xEC\x76\xB3\x63\xB2\x78\xCF\x75\xC8\x7A\x3E\x77\xF0\x74\xDA\xD6\x15\xFA\x6A\x06\x8A\x0E\x7C\x1A\x86\x73\x77\x62\x6F\xA4\x5C\x62\x79\x40\xC2\x49\x07\x8C\xBB\x6E\x2F\x82\xD7\x71\x30\x23\xA4\x81\x45\xEC\x26\xFB\x4D\xE1\x68\xED\x70\x8D\x6F\x69\x80\x7D\x75\xA8\x81\x32\xE9\x37\xF3\x78\xDA\x65\x5F\x7C\x27\x70\x5A\x70\x6A\x6F\x8A\x7C\x97\xC8\x39\xFA\x41\xF2\x62\x5B\x2F\x2F\x84\x47\x2D\x93\x26\xD0\x81\x4B\xF8\x22\x07\x8B\xFB\x64\x1D\x88\x8E\x6E\x74\x83\x62\x76\x23\x7B\x28\xED\x2A\x07\xAD\x04\x6F\x5E\x7B\x6E\x79\x6B\x81\xBB\x7A\xE4\x80\x6B\xD7\x17\x98\x6B\xAC\x22\x1C\x81\xF9\x6C\x70\x80\xB8\x7F\x16\x7F\x13\xFF\x30\xFD\x55\xFC\x7B\xF2\x76\x86\x7D\xCB\x7C\x2B\x7E\x5B\x7F\x9B\xF8\x65\x02\xB0\xF2\x7B\xB8\x71\xE9\x70\x56\x70\x61\x7F\xD7\x7C\x35\xFD\x16\xDD\x4B\xFC\x7F\x56\x7E\xBE\x74\x52\x74\xF3\x81\xD4\x75\xCE\x03\xF8\xFD\x66\xD8\x6F\xBE\x77\xE9\x79\xFC\x7B\xCB\x7B\x3E\x7C\x31\xF7\x1C\xEF\x73\xDC\x7E\xF4\x79\x1F\x80\xD4\x7C\x37\x48\x8F\x7C\x75\xFA\x20\xF2\x5C\x07\x8D\x82\x7E\x1D\x82\xE4\x78\xC2\x7A\x92\x7B\x07\xEC\x6E\x06\xB5\x0E\x99\x50\x19\x3E\x81\x53\x75\xB7\x7A\x2C\x76\xE2\xFD\x05\xEF\x72\xFA\x77\xC1\x74\xEB\x79\x07\x7C\xF6\x81\x48\x7E\xDA\x03\xAF\xFA\x6C\x0D\x97\xF0\x66\x65\x5A\x80\x82\xE7\x81\xDB\x81\x32\x03\xA0\xD9\x74\x0D\x84\xEA\x7E\x65\x7F\x6E\x83\xA1\x7F\xBC\x81\x62\xF6\x7B\x06\x9C\xBD\x7D\x1B\x80\xE2\x5F\xDB\x76\xA3\x45\x02\x5D\xE7\x03\xD6\xD8\x45\x10\x82\xB6\x71\xE8", +"\x7A\x83\x80\xCD\x81\xBA\x81\x36\x03\x9E\x08\xB8\x0C\x9C\xF4\x71\xE1\x74\x7E\x81\x83\x80\xFB\x81\x8C\x8A\x44\xFB\x56\xA3\x6B\x1E\x83\x40\x86\xA3\x2B\xE7\x81\x0C\x82\x1F\xED\x4A\x06\xBF\xDC\x6A\x1C\x81\x74\x7F\x9E\x77\xD0\x7B\x7C\x76\x45\xF7\x7B\xD9\x47\xDD\x64\xA6\x4B\x23\x80\xF6\x74\xD1\x07\x2B\x6F\x0D\xEF\x34\x07\x97\x10\x9D\x7A\x28\x3B\x85\xB4\x7C\x90\x7A\xA6\x81\x42\xF6\x24\xDA\x44\xD9\x72\xE3\x70\x3C\x85\xB1\x76\x74\x3E\xF6\x7E\xDD\xC5\x29\x08\x84\xEF\x4B\x21\x89\x84\x7F\x91\x75\xE8\x81\x2B\x82\xA7\xFD\x4D\x06\xA1\xA3\x6A\x6C\x7F\x44\x68\x75\x83\x68\x74\xE1\x81\x62\xC1\x7C\x03\xAB\x76\x7B\x1A\x71\xDB\x7B\x3D\x05\x0F\x82\x50\x20\x64\x04\xA3\xFB\x46\x0E\x99\x7D\x78\x38\x80\x97\x74\x4B\x74\x5D\x76\x8E\xDE\x3C\xD9\x53\x8E\x7E\x65\x72\xFC\x74\x42\x83\x53\x7C\xB8\x71\x16\x04\xAD\xC9\x48\x0D\x80\x22\x85\xE3\x71\xD9\x7E\xEE\x81\x08\x71\x59\x04\xCE\x06\x9B\x11\x81\x4D\x7E\x46\x86\x3E\x74\x3F\x76\xFC\x74\x16\x02\xFD\x05\x92\x11\x8A\x24\x8F\x43\x80\x6C\x82\x14\x78\xB1\x81\xE6\xCB\x6D\xF8\x50\x62\x77\x6F\x7C\x39\x6B\x31\x75\x81\x7C\x42\x82\x66\xDC\x43\xDF\x4E\xFA\x6B\x50\x7D\xAB\x5E\xB1\x69\x22\x83\x8B\x81\x8B\x04\x9E\x09\x9E\xDB\x6D\x1F\x8C\xE1\x7D\xDF\x7D\x7E\x7E\xF2\x7B\xFB\xFD\x01\xFE\x6A\xFB\x62\x0C\x8C\xEE\x7D\xFF\x46\x87\x75\x28\x7F\x28\x04\xF7\x08\x88\xBE\x31\x25\x82\x37\x84\x7D\x83\x06\x82\xE6\x7E\x81\xEC\x4E\xFB\x43\xB2\x60\x21\x8F\xE0\x7A\x84\x83\xE0\x76\x12\x82\xE6\xF8\x69\xF2\x6D\x08\x8F\x22\x62\x46\x86\x98\x75\x1E\x83\xF9\x7E\x84\xEE\x2E\xFC\x6B\xF1\x63\x1B\x86\xF1\x7F\x9B\x7E\xD9\x80\x12\x78\x4B\xFE\x26\xE0\x6A\x0D\x85\xE7\x7A\x95\x7B\xF9\x7A\x92\x74\xB9\x7C\x45\x03\xC2\x09\xA0\xDE\x37\x26\x8C\xE2\x7A\xF4\x76\x36\x83\x2C\x7F\xD3\x03\xEF\xFC\x55\x0F\x8D\x20\x89\x89\x7F\x81\x82\x2B\x7F\x08\x82\x4E\xFE\x7F\x04\xA4\x2D\x76\xC0\x76\xB6\x62\x5B\x02\x3A\x83\x3D\x3C\xEC\x04\xC2\xFC\x61\xFB\x6F\x27\x84\xF1\x7C\x9B\x80\xF5\x80\xB0\x7E\xD6\x03\xE2\xFA\x76\x13\x92\xE8\x74\x17\x87\x2C\x7C\x17\x64\x51\x7F\x7B\xCB\x5C\xDF\x58\xB4\x6C\xC1\x7A\x0B\x68\xAE\x7D\x84\x33\x6A\x82\x05\xED\x01\x0A\x80\xFA\x63\x28\x81\x3D\x81\x81\x81\x0D\x7D\x05\x82\x97\xF8\x74\x09\x8F\xF2\x6B\x28\x84\xD6\x7D\xA1\x83\x7F\x7F\x76\x7F\x8A\xF9\x25\x61\x47\xFC\x7A\x79\x07\xFF\x74\x08\x7F\x61\x62\x8C\x82\xAC\xE6\x1D\x09\x85\x13\x85\xE9\x76\xDF\x7A\xB7\x7D\x87\x7E\x73\x7F\xFF\xFE\x72\xFC\x69\xFB\x69\xEF\x76\x52\x82\xCC\x7D\x11\x65\x2E\x81\x02\xEC\x2A\xD5\x5B\xE6\x6A\xC4\x73\xFF\x53\x73\x82\xF2\x80\x2E\x05\x30\x05\xB6\xCD\x44\x13\x85\x1C\x8B\x9E\x77\x70\x80\x94\x77\xC2\x76\xA2\x04\x89\xB4\x64\x12\x8D\xA2\x69\xDF\x70\xAA\x66\x96\x81\xF4\x57\x5C\xED\x2B\x0A\xAC\xC0\x69\xFC\x62\x34\x84\x3B\x62\x9B\x81\x07\x72\x49\x05\xF8\x72\x5A\x14\x83\xE9\x7B\x3E\x84\xA6\x83\xB8\x7E\x05\x82\xE5\xFE\x33\xFD\x67\xFB\x7A\x29\x8A\x4B\x84\xA7\x80\x2F\x82\x82\x7F\x6D\xF8\x74\x04\x9A\x15\x97\x6B\x71\x9B\x7E\x78\x81\x17\x7D\xBF\x6C\xF9\xC1\x1A\xF5\x77\xA9\x21\x2B\x80\x95\x5B\xAC\x83\x77\x7F\xB2\x82\xE1\xFD\x35\x0A\xA4\xFB\x77\x29\x8A\x56\x81\xA7\x81\xAD\x7F\x9D\x82\x60\xFE\x3D\x0A\xB6\xF9\x70\x87\x68\xE7\x7C\xED\x79\xA0\x81\x59\x66\xC0\xDF\x04\x05\x90\x92\x66\x14\x82\x35\x69\xE4\x7C\xE5\x30\x2A\x73\xB8\x43\x54\xF8\x67\x04\x1A\x39\x72\xD1\x5E\xE7\x71\x84\x5F\x6C\x73\x17\xFE\x3B\xF9\x42\x9D\x78\xCF\x66\x2F\x85\x15\x7A\xD6\x79\x34\x00\x2E\xFC\x59\xDF\x68\x90\x2B\x9A\x79\x8A\x7E\x19\x5A\x1A\x01\xD4\x82\xBB\xFE\x47\x01\x8D\xAD\x7B\x9F\x7F\xD6\x6C\x0C\x05\xDA\x68\x28\x70\x4E\xE8\x00\xF9\x79\xB6\x6D\xDE\x35\xBF\x7F\xEE\x77\xAE\x77\xE7\x81\xEE\x04\x9D\x0A\x82\x16\x88\x2B\x84\x58\x84\x81\x83\x5A\x83\xC3\x82\x6D\x05\x89\x0B\xAF\x15\x95\x0B\x87\x16\x86\x3A\x7C\x98\x70\x58\x56\xA4\x96\x2A\xA7\x73\xE3\x6F\x0B\x87\x13\x5A\x9E\x63\x12\x01\xDE\x82\x6B\xF0\x4F\xDD\x58\xF5\x7D\xE5\x7D\x01\x79\x6C\x83\x36\x83\x50\x82\x64\x03\xEE\xF8\x53\x15\x88\xA8\x62\xCE\x7A\xBF\x77\x75\x80\x20\x77\x78\x01\x95\x07\x8E\x67\x6D\x59\x7A\xC9\x7B\x78\x80\x27\x7F\x96\x81\x9A\x04\x9E\x23\x18\x17\x85\x79\x7A\x5D\x87\xA7\x7D\x47\x76\xAD\x7E\xC2\x05\xE7\x0A\x9F\x14\x89\x2B\x86\x5C\x86\xB0\x82\x03\x82\xC4\x82\x74\xFE\x0A\x0B\xB9\xFA\x63\xF3\x7B\xF3\x02\x12\x76\x0E\x12\xC4\x80\x1A\x88\x0A\x03\xB1\x17\x93\x8C\x03\x5F\x84\x7D\x7C\xE8", +"\x2F\x15\x7F\x02\x05\xD0\x07\xB3\x0C\x9A\x18\x8F\xFC\x77\x47\x75\xF4\x77\x11\x77\xD3\xEF\x20\x06\xA6\xB8\x6A\x4A\x78\xE2\x72\xB7\x69\x64\x80\x0E\x71\xAA\xE8\x1E\xC4\x7D\xEF\x6A\xFA\x56\x72\x7C\x86\x7E\x8A\x7C\xBC\x77\x4C\x05\xA4\xD4\x4E\x15\x9D\xEA\x70\x55\x81\xBC\x83\x28\x82\x70\x7E\xA5\x04\xD5\x0A\x98\x36\x79\x11\x85\xD2\x65\x33\x82\x87\x72\xDE\x82\x27\x06\xBF\x0B\xAA\x0F\x95\xB7\x76\x56\x84\x96\x80\xBF\x7E\xE9\x7B\xFE\xFE\x38\x09\xA0\xF8\x78\xE7\x72\xE2\x7B\xB9\x82\x43\x83\xA6\x7E\xBA\xE0\x24\x03\xBB\x16\x80\xE0\x3D\x60\x86\x09\x7A\x7D\x82\x9B\x76\x08\xF8\x2F\xFD\x5E\x14\x95\xC4\x70\x52\x85\x91\x7E\x48\x82\x25\x7F\x63\xFD\x4C\xFC\x78\x13\x80\x40\x5D\x5C\x86\x64\x82\x78\x37\x4D\x81\xF4\x0A\x20\xD7\x6F\x06\x9D\xE8\x75\x87\x7C\xC9\x81\x8E\x82\x93\x77\xB2\x04\x88\x08\x83\x17\x9B\x2F\x85\x5C\x81\xA4\x83\x71\x83\xFF\x82\xC9\x05\x81\x0C\x86\x19\x87\x29\x81\x70\x78\xAD\x7E\xAE\x63\x99\x7E\xE0\x03\x86\xFB\x62\x0F\x82\x73\x7A\x90\x74\xCC\x75\x84\x33\xEB\x82\x67\x06\xF5\x0B\x95\x11\x8E\x24\x88\x46\x83\x74\x82\x1A\x83\xCF\x74\x93\x04\x96\xD9\x55\x12\x98\x64\x7E\xDA\x7B\xA0\x6F\x6F\x7A\x4A\x6D\xE0\x01\xEF\xED\x68\xFA\x6A\xF7\x6D\x64\x82\x03\x7B\x35\x7F\x43\x7E\xDD\x05\x9F\x09\x9F\x17\x91\xB5\x61\x55\x85\x4A\x6F\x78\x82\xE8\x6A\x32\x06\xCC\x9C\x57\x15\x82\x48\x7D\x3D\x80\x22\x7C\xFA\x75\xB5\x7E\x95\xEE\x6D\xFA\x7F\x0F\x8F\xEB\x76\x54\x86\x1B\x64\x8E\x83\x59\x7D\x96\x06\xDB\x0B\xAF\xF3\x78\x2F\x83\x61\x82\x88\x83\xC6\x80\x22\x82\x1D\x03\xC6\x08\x9F\x0C\x88\x22\x81\x32\x82\x89\x81\x87\x82\xA6\x74\xAC\xEE\x4E\xD2\x79\x0F\x88\xD6\x6A\x26\x86\xF6\x68\x62\x7F\xAA\x74\xB6\xEE\x00\x0D\xB0\x1A\x93\x81\x7F\xE7\x7C\xAC\x80\x8F\x83\xC0\x82\xFA\x05\xD4\x0C\xBC\x17\x8E\x33\x8E\x5F\x85\x9E\x80\x80\x83\x5B\x7F\x02\x06\xDA\xEE\x55\xDA\x74\x20\x80\xA4\x65\x40\x5E\xB2\x82\x22\x7D\xCC\x06\xB5\xFB\x51\x18\x81\x2E\x85\x6B\x87\x8C\x83\xD2\x81\x34\x82\x91\x04\xEB\x08\xBE\x0E\x8D\x23\x8D\x45\x84\x8E\x7C\x68\x7C\xB1\x3C\xEF\x01\xD5\x8D\x6F\x1A\x80\x37\x84\xF6\x74\x91\x81\x3C\x7E\x1F\x83\xF7\xFD\x36\x09\x9E\xF8\x62\x32\x80\xF0\x7C\xC8\x82\xC0\x7F\x39\x83\x3E\x05\x92\x27\x7A\x10\x9E\x57\x77\xD0\x37\xDB\x82\x96\x7C\xFA\x82\x11\xEF\x17\x0D\x88\xF4\x79\x34\x83\x4B\x87\x98\x80\xA6\x7E\x44\x77\xCA\x04\xBD\xDA\x74\x10\x8C\x74\x7E\x4C\x84\xCC\x78\x0E\x83\xF7\x67\x34\x02\xF6\x90\x7E\x07\x8B\x4D\x72\x5F\x81\xD0\x81\xC2\x82\x59\x83\x40\xFD\x34\x0D\xAE\x10\x94\x30\x84\x30\x80\xFA\x76\xC1\x80\xE9\x77\x59\xEF\x54\xDF\x68\xB2\x71\xF0\x7F\xF1\x70\x28\x7E\x31\x41\xA6\x45\x06\x07\xF1\xF4\x7E\x16\x88\x33\x83\x53\x80\xDA\x80\xBE\x82\x9B\x82\xFA\x06\xB8\x0A\xBC\x1B\x8C\x2B\x8E\x6F\x83\x97\x82\x63\x81\x5E\x82\xF5\xCE\x72\x08\xA1\x15\x74\x23\x80\x8C\x76\xCC\x83\xB2\x83\x7A\x83\x69\x06\xC8\xD9\x53\x19\x8B\xE4\x75\x65\x80\xC9\x7F\x95\x82\x2F\x7F\xD7\x06\xD9\x07\x99\x1B\x9B\x1E\x84\x09\x6F\x6D\x73\xBF\x5B\x2A\x6C\x31\x07\xFA\x0A\x99\x17\x9F\x38\x8F\x64\x86\xAC\x75\x94\x82\xEF\x82\xF0\x04\x86\x0A\xB2\x13\x88\x28\x8F\x74\x87\x7A\x81\xD4\x82\x08\x82\x53\x07\x92\x08\x95\x1D\x95\x10\x88\x97\x55\xBB\x61\xD6\x82\x56\x7D\xB1\x06\xDD\x0E\x87\x0F\x7F\x3A\x8A\x69\x81\xEC\x80\x78\x83\x6E\x82\x32\xFE\x61\xFA\x74\xF8\x61\x27\x82\x69\x7B\x9C\x80\x8E\x7F\x03\x81\x79\xFE\x73\xDE\x64\xAD\x6F\x3B\x81\x15\x79\xDC\x80\x84\x83\x8D\x82\x12\x06\xA3\x0E\xB6\x1A\x95\x30\x81\xE2\x70\x48\x74\x86\x83\x94\x83\x1A\x06\xD5\xDF\x5C\x18\x97\x7E\x7D\xB6\x6F\x97\x80\x59\x7C\x2E\x51\x84\x07\x80\xDD\x71\x1D\x83\x34\x8B\x62\x83\xB2\x7F\xF6\x75\xCA\x7E\x3A\xEE\x17\xFB\x7C\xB8\x79\xEC\x7E\xE3\x73\xB3\x7E\x03\x68\x6A\x76\x2F\xC1\x66\xFC\x7A\xF4\x6C\x30\x8E\x71\x85\x7D\x7E\xC2\x83\xAC\x7E\x0C\x07\xEA\x0C\x91\x1B\x8C\x3A\x83\x6D\x86\xCA\x83\x9B\x82\x6B\x83\x71\x06\xD8\x0D\x80\x1C\x8B\x2C\x81\x74\x85\x4B\x75\x8D\x81\xB8\x7C\xE7\xB3\x0C\x4F\x59\x1E\x93\xB6\x7E\x64\x84\xF3\x80\x1F\x83\xA7\x82\x89\x03\xD8\x08\x8B\x0E\x9A\x22\x8D\x38\x84\x8B\x83\xE3\x81\x23\x7B\x8D\x06\x80\x5F\x42\x1D\x85\xFD\x6D\x23\x86\x08\x7D\xC7\x83\xA3\x83\x28\x06\xC0\x0B\x89\xDA\x64\x28\x82\x3D\x82\xEC\x81\xD3\x82\x38\x7F\xB7\x07\xA3\x0A\xA7\x1D\x97\x27\x89\x76\x81\x9F\x82\x90\x81\x27\x81\xF5\xEF\x7B\x07\x9C\xD0\x57\x68\x7D\xB7\x64\x02\x79\x92\x80\xCE\x81\x94", +"\x06\xAD\x0F\x8F\x18\x8C\xF5\x78\x69\x87\x80\x82\xD2\x83\x35\x83\xD2\x06\xED\x0C\xB6\x1E\x95\x36\x82\x7E\x81\xF7\x82\xD4\x83\xDD\x83\x03\x06\xBF\x0A\x86\x90\x65\xEA\x5E\xEB\x7F\x31\x7C\xB0\x7F\x4B\x64\x57\x02\x93\x0D\x97\x1F\x94\x37\x89\x7D\x83\xC7\x80\xEA\x7A\xEE\x83\x4B\x07\xC6\xFC\x5F\x1F\x93\x27\x81\x7E\x80\xCB\x80\x49\x82\x2D\x83\xE5\x07\xFE\x04\xA7\x1F\x88\x13\x87\xC3\x6B\x58\x74\x61\x66\x6C\x7F\x78\x02\xE3\x7F\x62\x09\x80\x6E\x67\x45\x1D\xD2\x82\xE1\x82\xFA\x83\x0B\x07\xF6\x0F\x87\xB4\x71\x40\x81\xEB\x7D\xF6\x82\xD3\x83\x0A\x84\x50\x07\xFE\x0F\xA8\x1D\x80\x40\x8A\x6D\x83\x4E\x81\xB0\x82\x61\x75\xDA\xEF\x44\x0F\xBA\x2A\x06\xCD\x73\x92\x78\x59\x75\x99\x83\x12\x84\xF2\x07\xA2\xFB\x58\x13\x92\x7A\x7A\x78\x86\xDC\x83\x10\x82\xE5\x83\x45\x04\x8C\x07\x87\x11\x8E\x1C\x89\x44\x80\x72\x83\x25\x83\xEA\x60\xAE\xF9\x7F\x62\x70\xE6\x7D\x56\x76\x1C\x81\x21\x7E\x9E\x80\x9C\x74\xF3\x06\x87\x0E\x8E\x18\x82\x42\x8D\x4E\x83\xFB\x81\x7E\x83\x9B\x83\x83\x05\xB9\x0E\x85\x16\x9B\x39\x88\x5C\x85\xE7\x82\x5B\x83\x9F\x83\x70\x05\x80\xFC\x40\x32\x79\x2A\x87\xED\x78\x51\x82\xF1\x6F\x91\x7F\x63\xF0\x4B\xC7\x25\xC1\x66\x88\x74\xF4\x03\x00\x2B\xF0\x82\x89\x5E\x36\xFC\x7E\x3A\x38\x55\x27\x90\x31\xF5\x1C\x87\x7C\xE9\x72\xE1\x3E\x66\x69\x07\xE1\x4D\x7F\x68\x09\x5D\xD8\x02\x83\x31\x23\x79\xF9\x2F\x47\x46\x54\xBF\x5F\x44\x07\x00\x21\xA0\x24\x12\x78\x22\x85\x42\x23\xA5\x05\xEF\xBA\x46\x73\x38\x3B\x7B\x04\x71\x09\x75\x61\x0E\xAF\x80\x91\x08\xB5\xD7\x29\xFC\x61\x08\x0E\x6F\x1F\x29\x70\x98\x47\x76\x37\x1C\xF1\x4C\x49\x5B\x95\x79\x44\x87\xF2\x7F\xED\x6E\x6B\x78\xD8\x82\xE7\x91\x77\xC3\x10\x9B\x5A\xA5\x79\x09\x49\x2C\x81\xD0\x70\x56\x4B\x50\x01\xF9\x16\x06\x1F\x8C\x8C\x5F\x86\x71\xF2\x74\xBB\x75\xC9\x77\xEE\xEA\x15\xDF\x70\xAB\x77\x7C\x74\x73\x68\xBD\x83\x3B\x7C\xB5\x80\x74\x96\x05\x92\x55\xAC\x79\x1C\x85\x86\x70\x70\x80\x2C\x85\x20\x80\x16\x0A\x33\x11\xBF\xCA\x53\x52\x7B\xAE\x75\x4A\x75\xBB\x75\x2B\x75\xEF\xEA\x59\xD4\x71\xAB\x71\xD0\x6E\x8B\x83\x75\x82\x7A\x82\x80\x6E\x99\xFC\x6D\x02\xBC\x05\x8B\x19\x82\x2C\x78\xBE\x83\x13\x63\x2B\x00\xB1\x08\x9C\x1D\x0A\x23\x94\xB5\x5A\xBD\x74\x58\x70\xF7\x75\x27\x7C\x3B\xEE\x6A\xC7\x7D\xB8\x74\xD7\x6E\xC4\x74\xAF\x63\x04\x74\x67\x7C\x6D\xFF\x34\xF9\x51\xE3\x69\x0C\x86\x20\x72\x50\x6C\x38\x84\x64\x84\xB2\x08\xF6\x0D\x82\xF5\x6E\x38\x8E\x3E\x81\xD3\x7C\xFC\x81\x4D\x7F\xF2\x03\x9D\xFD\x79\xF3\x68\x43\x82\xDC\x78\xC9\x81\xD5\x81\xFE\x67\x5F\xEB\x00\xED\x5D\x15\x9F\xCD\x31\xCD\x7D\xE8\x80\xFB\x11\x70\x84\x58\x09\x63\x11\x8D\xE2\x4F\x38\x8D\xF7\x71\xE2\x82\xA2\x77\x89\x83\x1C\xEF\x36\x08\xA1\x08\x90\x26\x86\x4A\x46\xC6\x81\xF7\x78\x55\x4C\x10\x09\xD5\x0B\x12\x24\x8E\xFE\x54\x91\x82\xC5\x7A\xA6\x7E\x16\x7B\x18\x09\x81\xDF\x55\x1C\x8C\x39\x8C\x91\x86\xC3\x82\x8A\x76\xDC\x76\x24\x03\xFD\x2C\x61\x24\x93\x2D\x03\x92\x87\x0B\x60\x07\x82\xBB\x81\x16\x09\x9A\xDE\x69\x24\x9E\x81\x7A\x91\x81\x46\x83\x23\x44\xBB\x80\xFB\xDD\x19\xFA\x7D\x0D\x7A\xB5\x75\x4F\x5A\x73\x81\xF2\x80\x57\x83\xB0\x6F\x33\x12\xBF\x16\x1A\x47\x8D\x1B\x74\xE4\x81\xCD\x80\x93\x83\x37\x03\x87\x06\x8C\x13\x89\xF4\x7D\x93\x85\xE6\x79\x4B\x84\x60\x83\x1C\x08\xB8\xD7\x6D\x87\x5A\x6B\x65\x4C\x6E\xD8\x80\x54\x7E\xD9\x81\x4B\x06\x8F\x12\xB8\x23\x82\x47\x8C\x94\x85\x3E\x73\xC5\x67\x7E\x84\x10\x07\xA7\x12\x8F\xF7\x7B\x49\x8E\x62\x7D\x2A\x87\x52\x7F\x8B\x83\xFD\x91\x41\xBB\x45\x07\x83\x1F\x87\x1C\x82\xD2\x80\x09\x85\x01\x4D\x4A\x09\xCC\xEF\x7F\x15\x8F\x36\x82\x65\x80\xFF\x80\xED\x82\xFD\x83\x2F\x08\xFC\x0F\x96\x20\x83\x3F\x8C\x50\x84\x06\x84\xD5\x83\x7C\x7C\xA5\x06\xD9\x5B\x6A\xF5\x65\xEC\x7E\x8F\x7A\xD6\x77\x4D\x7F\x22\x68\x87\xC5\x77\x11\xAD\x04\x99\x47\x89\x74\x83\x05\x86\x5F\x84\x09\x84\x2E\x08\xE0\x0F\x82\x26\x91\x41\x86\x86\x82\xB9\x80\x41\x85\x23\x83\x7E\xD7\x7C\xBB\x4F\x8B\x7D\x4A\x81\x2D\x70\xAA\x7E\x78\x80\x79\x83\x49\x09\xE3\x12\x91\x24\x85\x4B\x8A\x23\x72\x51\x70\x67\x75\x62\x71\xE2\x05\xB0\x0C\x94\x15\x85\x2F\x86\x55\x85\x4C\x81\x8A\x81\xF3\x80\x9D\x10\x69\x03\x8B\x76\x52\x4C\x8B\x1C\x7F\x28\x1D\x4D\x85\xF3\x61\xC8\x04\xBB\xDA\x79\x24\x9F\x7B\x7C\x96\x81\xA9\x7E\x5B\x85\xE9\x7E\x70\x09\x83\x31\x71\x1B\x90\xA2\x70\x92\x82\x35\x86\x48\x84\xD6\x84\x54\xE8\x4C\x11\xB6", +"\x22\x8E\x46\x88\x8B\x80\x1A\x86\x2E\x84\x69\x84\xBC\x08\xBF\xD9\x52\xCB\x43\x38\x89\xB1\x76\xC9\x49\x5E\x85\xDF\x84\x71\xC7\x41\x13\x98\xBC\x63\x4E\x8C\x03\x7D\x38\x85\x74\x7F\xE3\x84\x8B\xFE\x49\x13\x87\xA9\x6B\x25\x89\xA4\x70\xBB\x7C\x22\x61\x29\x76\x62\x09\x93\x13\xA4\x25\x95\x4C\x84\x6C\x7D\xA0\x83\xDD\x83\x83\x82\x17\xFF\x7A\x0E\x99\xFC\x7C\x3B\x81\x81\x7E\xEF\x81\xE4\x4E\x01\x81\xF5\xEE\x58\x2D\x5F\x27\x90\x4E\x84\x98\x75\x16\x84\x65\x7F\x5B\x84\x96\xFD\x39\x11\x98\xF6\x7B\x45\x8A\xD9\x7A\x5E\x76\x8E\x81\x0D\x81\xE4\x03\xB6\xDE\x54\x61\x65\x31\x8C\x9B\x86\x56\x7A\x46\x80\xF0\x84\x6A\xC8\x62\x13\xBA\xC0\x64\x4F\x87\xD4\x7E\x3C\x86\xCE\x80\xF4\x84\x0B\x03\xEA\x13\x82\x3A\x76\x3A\x89\x7A\x65\x40\x5D\x85\x84\x07\x80\x08\x01\xF3\x13\xB5\x1C\x9D\x4B\x83\x7B\x80\x33\x84\x60\x84\xCD\x84\x64\x08\xF0\x0C\x9D\x26\x92\x33\x8F\x99\x84\xCE\x80\x3F\x7E\xB6\x83\x9E\xCE\x79\x52\x67\x28\x88\x94\x7D\x0D\x84\x32\x87\x8A\x84\xB0\x83\xF6\x09\x9C\x0D\xAE\x18\x92\x2A\x82\x9B\x84\xBC\x80\xDA\x80\xF3\x82\xA3\x06\x9A\x04\x93\x1F\x9C\x10\x8C\xF3\x01\x20\x62\x67\x7E\x14\x4D\x03\x0A\xF4\x13\x89\xF2\x6C\x41\x81\x4F\x83\x02\x84\xD9\x82\x18\x84\x66\x07\xB2\x10\xA4\x1F\x86\x4C\x8A\x76\x82\x2C\x7E\xE5\x83\x12\x81\x75\x04\xAC\x1E\x11\x29\x9F\x51\x85\x77\x81\x48\x86\x1C\x6D\x4E\x83\xEE\xDA\x6F\xF8\x6F\x5C\x71\xE3\x74\x49\x85\xDD\x82\xD4\x80\xCB\x7C\xDB\x08\xE4\xFC\x55\xB3\x73\x26\x8A\xCE\x6B\x47\x86\xF5\x75\x1E\x85\x2A\x0A\xA9\x0C\xA8\xAB\x7D\x3C\x8A\xEC\x78\x92\x83\xF2\x82\x49\x82\xCD\x07\xED\x14\x8F\x1F\x81\x1E\x81\x7D\x87\x72\x72\xEF\x82\x8D\x83\xC0\x07\x89\x76\x4C\x9E\x56\x53\x88\x06\x81\x19\x84\x81\x84\xEC\x74\x7D\x04\xBB\xDF\x7F\x11\x9D\x7D\x71\x48\x87\xF7\x77\x20\x83\xE0\x77\xA9\x04\xA7\x6F\x50\x28\x9C\x11\x81\x99\x83\x4C\x86\x9E\x85\x5A\x76\xC7\x07\xAC\x0C\x89\x1F\x88\x37\x8F\xA7\x82\xDD\x81\xA2\x82\x93\x76\x6E\x0A\xA9\x07\x85\x2A\x89\xFB\x60\x51\x82\xB7\x64\x12\x64\xA8\x7E\xEF\x07\xC7\x0A\xA9\x26\x92\x4F\x8B\x9A\x82\x4A\x84\x6E\x7E\x30\x84\xC4\x05\xE2\x10\xBD\x17\x91\x51\x88\x7B\x83\x46\x86\xEE\x83\x1A\x85\x01\x07\x9C\x7C\x6B\xB4\x72\xC8\x74\x42\x56\xE8\x64\x31\x68\x0A\x78\x09\x08\xF7\x12\xAB\xBF\x1E\x54\x8A\x7D\x84\xBE\x7C\x04\x85\xCB\x84\x2D\x08\xAF\x14\x94\x20\x9B\x4C\x89\xA5\x86\x57\x87\xFF\x82\x60\x85\xBC\x07\xA1\xFD\x5F\x7E\x73\x2B\x8D\x86\x82\x5B\x03\x16\x7C\xBB\x82\x83\xF9\x66\x68\x5D\x2A\x8E\x4E\x84\x93\x87\x51\x85\xF6\x74\x03\x85\x9F\x07\x88\x14\xA1\x1E\x8A\x50\x83\x7A\x84\x41\x85\xE9\x82\x07\x85\x59\xBB\x51\x10\xAB\xC7\x46\xEC\x71\xEF\x7D\x0A\x86\x64\x7C\x4C\x64\x94\xEA\x0C\x15\x92\x05\x95\x07\x8F\x9C\x86\x56\x86\xB8\x7E\x5C\x85\x6C\x06\xBA\x15\x94\x1B\x9C\x55\x8D\x7F\x86\x5A\x87\x0C\x84\x6C\x85\x01\x08\xDA\x15\xAE\xFB\x71\x12\x83\x85\x82\xE1\x7C\x9F\x82\xD3\x6F\x79\x05\xC4\xD5\x4D\x27\x94\x55\x8D\xAF\x84\x4C\x85\xC3\x83\x17\x82\x37\x09\xB1\x08\x9C\x28\x98\x1B\x8E\xA1\x82\x6F\x80\x88\x84\x9E\x81\x22\x0A\x95\xBE\x59\x1C\x83\xA2\x5F\x58\x80\x59\x7D\x64\x83\x35\x5F\x97\xED\x40\xF3\x5C\x66\x62\xCE\x7C\x0A\x79\x34\x7A\x41\x01\xD1\x78\x31\xFA\x48\x02\x87\x1D\x96\x0A\x84\x87\x85\x7F\x5B\x69\x71\x38\x5E\x6A\xF0\x3A\xF4\x7E\xBB\x3F\x88\x74\x05\x76\x5A\x7C\x46\x5F\xBC\x79\x19\x01\xE3\x71\x31\xD2\x7A\x9A\x73\x4B\x7A\xEB\x7F\xF1\x5A\x56\x84\x2E\xC1\x3D\xE9\x44\xEB\x7C\x52\x0C\x12\x83\x39\x78\xA7\x27\xA1\x85\xFD\xB3\x70\x00\x28\x22\x89\x29\x83\xA7\x72\xB6\x80\x67\x29\x97\x7F\x40\xD1\x3E\x16\xBF\x94\x6F\x08\x80\xFC\x7B\xFD\x7E\x31\x7A\xAD\x79\x61\xE0\x38\x16\xAD\xE2\x64\xB9\x20\xFE\x7C\x67\x85\xDC\x06\xA5\x85\x3D\xF9\x64\xBF\x2C\x99\x6B\x8D\x7E\xAD\x7F\xFE\x34\xF0\x3D\x84\x7D\x4C\xA4\x6B\x16\x91\xC7\x6B\xDD\x70\xBE\x7F\x26\x7A\xBB\x7D\xBD\x5E\xAB\x29\x70\xF6\x71\x24\x93\x07\x7B\x5D\x54\x3D\x79\x44\x21\xE3\x78\xB2\xA5\x51\x33\x7F\x03\x82\xDE\x7E\x06\x83\xDC\x51\xAF\x78\x40\x53\xBF\xF2\x3C\xE3\x62\xEF\x67\xD8\x76\x42\x85\xB0\x0F\xB7\x47\xC1\x85\x54\xFB\x1C\xF7\x46\x2E\x87\xDB\x78\xB8\x82\x02\x82\xE2\x84\x7E\x0E\x17\xFB\x02\x0F\x3D\x2D\x9E\xEB\x0B\xB1\x7B\x2C\x6A\x87\x00\xF8\x78\x43\xFC\x24\xE3\x71\x2D\x9E\xDE\x72\xBD\x7D\x6E\x87\xE5\x84\xB5\x78\xB8\xC2\x3E\xF6\x5D\xE3\x68\x90\x22\xB7\x85\x68\x7C\xF1\x7D\xC7\x7D\xC6\xFB\x03\xF7\x48\xEF\x72\xDD\x31", +"\x61\x53\x13\x5A\x50\x85\x3B\x52\xAD\x0B\xE5\xF6\x53\x2E\x9E\xDC\x75\xB9\x80\x74\x7F\x04\x80\x5C\x61\x30\xF2\x7F\x02\xAB\xAC\x30\x5C\x8C\xB8\x7B\x78\x7F\xEE\x85\xE2\x7D\xBD\x0B\xC7\xF7\x7D\xC8\x7B\x87\x31\x92\x06\x6D\x7C\xF2\x00\xBD\x85\xAF\x08\xC3\xE3\x5B\x2E\x89\x52\x18\x24\x78\xC8\x53\xBD\x7C\x3E\x3E\x27\x01\x53\x54\x4F\xF2\x44\x5E\x89\xBA\x7B\x1F\x83\xEB\x85\xE9\x7D\x43\x0F\x55\xF7\x6B\xED\x78\x92\x76\x21\x12\x70\x85\xEE\x84\xC9\x85\xFB\xA6\x14\x17\x90\xCA\x7B\x8D\x78\x16\x7A\x74\x7F\xE4\x7D\x84\x00\x95\xFB\x31\xF2\x77\xF3\x07\x5F\x86\xBC\x81\x7D\x84\xEF\x85\xF5\x85\x67\xF1\x20\xE5\x78\x37\x06\x4B\x35\x67\x53\x2E\x68\xF7\x85\xCD\x7D\xF5\x0B\xB9\x7D\x6A\x2F\x9A\x8D\x79\xBF\x84\x65\x7E\xFB\x84\x9E\x07\x96\xA6\x7E\x17\xB4\x2F\x85\x5C\x86\xBF\x80\x79\x84\xFE\x85\xC4\x85\xED\x0B\xE2\xF7\x66\xA5\x2A\xDE\x7F\x1F\x87\x7F\x85\x64\x72\xD7\x85\xC7\x0B\xB0\x17\x89\x2F\x92\x5D\x81\xBF\x3C\x1B\x84\xF6\x7D\xD5\x85\x63\x52\x0B\x18\x9E\x2F\x99\x60\x80\xBE\x87\xE7\x06\xF8\x85\x50\x79\xB6\xFA\x19\xC3\x62\xC6\x67\x2B\x52\xC2\x85\x21\x80\x3E\x79\xAB\x80\x2E\x07\xC8\x0B\x73\x45\x69\x07\x83\x5A\x70\x83\x85\x03\x87\x9C\x7D\x80\xF2\x5A\xB9\x01\xCB\x65\x94\x70\xC2\x83\x1D\x80\xE9\x84\xC7\x7D\x8F\xF2\x04\x18\xBD\xC5\x7A\x61\x8C\xBF\x79\x6B\x87\x0A\x87\xA4\x78\xD7\x00\x99\xC2\x75\x00\x89\x88\x52\x7C\x77\x82\x5D\xD7\x7C\xE1\x85\xB5\xA5\x66\xD8\x3C\xC2\x6C\x32\x56\xBA\x81\x82\x84\xE6\x84\x1F\x79\xC0\xF1\x42\xE4\x60\x07\x19\x5C\x82\xB7\x79\x16\x1D\xBD\x7D\x3E\x15\x58\xE7\x77\xF5\x48\xC7\x73\x8B\x69\xC4\x80\x25\x72\x46\x70\x05\x53\x9F\xA6\x1E\xE5\x6C\x2F\x9A\x5F\x8C\xB3\x7D\x7E\x34\xC2\x7D\x09\x53\x65\x0C\xAA\x9A\x69\x84\x68\x02\x8F\x3D\x4D\x84\x87\xCE\x07\x13\x86\xF8\x0D\x5C\x18\xB3\xEB\x73\xDB\x75\x1C\x78\x8C\x84\xC7\x7C\xD0\x85\xD1\x99\x71\x18\x9F\x35\x73\x63\x80\x69\x75\x8E\x85\x15\x86\x36\x86\xA8\x0B\xDC\x11\xAA\x2E\x9E\xA5\x76\x10\x02\x90\x87\x07\x84\x06\x79\xDF\xFB\x00\xE5\x61\xEF\x61\x31\x5C\xB4\x7A\x31\x11\x20\x86\x29\x86\xD7\xF0\x24\x18\x87\x32\x86\x60\x8B\xB8\x86\xC3\x79\xF0\x85\x1B\x81\x2B\x6B\x0E\x19\xB9\x70\x67\x02\x85\xC8\x87\xB3\x53\x26\x87\x44\x20\xA5\xA5\x4E\x17\x9D\x04\x10\x5E\x82\x99\x72\xBB\x50\xBD\x7D\xA6\x04\xD5\x0B\x86\x08\x36\xED\x68\x7A\x08\xB7\x7D\x87\x86\x28\x87\xA0\x6C\x4B\x0C\xAA\xC2\x66\x32\x92\x64\x87\x13\x7C\x7C\x86\x41\x00\x2D\x79\xF2\x0B\xA4\x00\x8A\x32\x61\xE7\x33\xC0\x82\x8D\x85\x01\x86\xC2\x7D\x69\xF2\x14\xF7\x57\x32\x83\x66\x8B\x11\x77\x70\x87\x03\x86\xCB\x85\x56\x0C\x93\xE5\x7C\x3C\x1D\x5F\x8F\x1F\x87\x96\x84\x63\x69\x5C\x86\x74\x0C\xBB\x19\xAA\xEC\x71\xDC\x72\x66\x54\x77\x7E\x41\x01\x6C\x3E\x68\xFF\x42\x19\x87\xEB\x72\x34\x5C\x61\x57\x99\x86\xEF\x85\xD3\x85\x02\xA7\x13\x18\x98\x9B\x4B\x66\x83\xCE\x84\x98\x87\xFD\x84\x21\x86\xD0\x0C\x88\x19\x84\xC4\x71\x37\x56\x6D\x1C\x9D\x84\x36\x66\x6C\x86\xA5\x0C\xE5\x19\xB0\x33\x87\x67\x81\xCD\x83\x9E\x85\xD2\x84\xAD\x85\x4B\x0B\xCA\x01\x8C\x33\x8C\x62\x85\x0C\x76\x78\x55\x50\x7D\xE8\x4C\xC2\x00\x83\x19\xA7\x31\x9A\x65\x8F\xC2\x3A\x77\x7E\xA4\x78\x7F\x86\x30\x0C\x9D\x21\x3C\x30\x8C\x64\x8F\x0F\x58\x93\x85\xB8\x53\x55\x79\x41\x0C\xC6\x19\x83\x31\x8F\x68\x85\xC3\x3E\x2C\x36\x3A\x3F\x6F\x47\x09\x0D\x8F\x19\xA4\x32\x97\x75\x07\x39\x79\x24\x05\xAC\x53\x70\x31\xCF\xA6\x67\x37\x53\x9B\x58\x40\x7E\xF8\x69\xA0\x3D\x50\x33\x81\x3E\x20\x0D\x96\x1A\xAC\x46\x64\x6E\x09\x52\x86\xA1\x3F\xAF\x06\x88\x3E\x39\x2C\x29\x1A\x83\xC4\x4B\x69\x83\x82\x74\xF5\x6E\xB5\x53\xBD\x79\x71\x0F\x2E\x11\xAD\x32\x95\x45\x57\x87\x7F\x53\x86\xE3\x76\x2B\x82\xE7\x06\x86\x0D\xA9\x1B\x88\x34\x81\xA8\x82\xD1\x81\xAA\x85\x37\x82\x91\x03\xFB\x16\x9D\x1A\x69\xCE\x77\x32\x81\x2F\x80\x1F\x7F\xBD\x80\xC4\x08\xAD\x99\x7A\x16\x92\x6A\x87\x74\x55\xA8\x85\xB3\x85\x6C\x82\x5F\x08\xFC\x11\xB5\x12\x80\x32\x87\x4B\x86\x0F\x7D\x2E\x82\x83\x85\x5B\x0A\x88\x16\xA6\x05\x8D\x18\x84\xD5\x87\xCB\x83\xAC\x80\x27\x7B\x22\xC9\x5A\x11\xA2\x5B\x7C\x46\x88\x8C\x78\xDB\x79\x57\x81\x0C\x7C\x9C\xDE\x1B\xF0\x40\x2C\x99\x3F\x82\xB0\x83\xFF\x80\xC1\x85\xC1\x84\x5A\x0A\x85\x13\xAA\x35\x87\x4C\x84\x60\x82\x86\x33\x2C\x7F\x49\x74\x6A\xF6\x6F\x99\x6C\xB7\x62\xD4\x67\xD7\x80\x09\x7E\x1E\x83\xA6\x82\xA1\x0A\x9E\x0F\xA6\x23\x80\x3D\x88\x8E\x82\xF4\x82", +"\x3A\x84\xD2\x83\xEC\x08\xA6\x0F\xAE\x23\x97\xC6\x71\xC2\x01\xC4\x82\x36\x7D\x11\x83\xA7\xB1\x05\x74\x4D\x36\x8F\xB3\x76\xB1\x82\xF6\x83\x5E\x87\xBF\x84\x7D\x0D\x81\x13\xBF\x35\x9C\x4C\x83\x3F\x83\x20\x86\x66\x80\xA0\x83\x23\xC7\x6D\x06\xA5\x18\x83\x6D\x89\x69\x7E\x5C\x86\x0C\x76\xC9\x86\xAF\x09\xE7\x11\x8D\xFB\x69\x47\x83\x8E\x73\x1D\x86\x71\x71\x76\x84\x87\xEB\x54\xD1\x70\x24\x91\x5E\x8D\xD5\x80\xAF\x87\xB6\x6E\xBD\x86\x62\x0D\xBF\x0C\xA2\xDF\x61\x32\x86\xD6\x83\xC8\x81\x6B\x87\x22\x83\x83\x0D\xD2\x59\x5D\x19\x91\x58\x79\x5E\x82\x28\x85\x6B\x81\x8D\x7E\x63\x06\xEF\xD1\x47\x16\x74\x6D\x8A\x6A\x7E\xB6\x84\x70\x76\xDC\x86\x86\xED\x4C\xFD\x6A\x29\x82\x47\x76\x4A\x85\x38\x73\x7E\x77\x77\x83\x30\x98\x5B\xDC\x6D\x0E\x84\x4D\x8F\x3A\x87\x31\x87\x6A\x6E\xB0\x84\x5C\x0D\xA7\x4E\x5E\x35\x8E\x40\x8D\x42\x81\x88\x82\x11\x85\x5B\x83\x48\x08\xB9\x0D\x8A\x21\x9B\x35\x8C\x84\x85\xD7\x82\x13\x85\x25\x82\x57\xC6\x06\xF2\x60\xA4\x7B\x6E\x83\xDF\x86\x80\x80\xDD\x83\x8B\x85\x4E\x09\xB0\x08\x90\x25\x92\x21\x82\x95\x85\x63\x85\x08\x83\x8F\x85\x7C\x03\xA1\x16\xBA\x69\x6F\x0E\x86\x3D\x67\x7B\x82\x14\x85\xF0\x81\xAA\x06\xC9\xDA\x54\x28\x74\x54\x7C\xDD\x84\xED\x78\x86\x84\x04\x66\x1A\x0A\xC5\xFA\x5B\x2C\x9F\x20\x8E\xE0\x85\x99\x80\x84\x87\x11\x82\x12\x0E\xB6\xD7\x77\x20\x9F\x86\x40\x95\x71\x37\x80\x01\x76\x0A\x78\xA7\x09\xCC\x13\xB4\xBF\x25\x70\x8C\x42\x84\xA3\x81\xB9\x83\xDC\x81\x85\x06\xBB\x07\x87\x1A\x94\x64\x77\xAA\x83\xB5\x7F\xA2\x83\xD6\x7E\x4F\x08\xE6\xFC\x1D\xF6\x64\x5B\x7D\xE1\x82\xC7\x7F\x87\x86\xFB\x70\x21\x0E\x9D\x08\xA3\x38\x93\x21\x81\x90\x85\x86\x82\x6B\x87\xFA\x81\x9B\x01\xFC\xD2\x4D\x2E\x9E\x71\x55\x85\x6D\xC8\x87\xD7\x7A\xEF\x86\x5C\xFD\x60\x1B\xA8\x29\x8B\xDA\x65\xA4\x80\xD4\x80\x6D\x85\x19\x83\x49\x0A\xEE\x75\x70\xC7\x79\x78\x4B\x43\x82\xBE\x86\x71\x86\x79\x6F\x73\x03\x98\x16\x89\x39\x98\x49\x8A\x96\x83\x99\x81\x89\x86\xAA\x84\x4F\x0E\xB7\x08\x91\x39\x97\xF3\x7B\x95\x7A\x1B\x6D\x6A\x75\xEC\x7E\x1C\x07\xBD\x10\x34\x38\x85\x23\x8E\x63\x7F\xBE\x84\xE3\x82\x8E\x81\x8E\x07\x9E\x06\xA4\xB8\x71\x3C\x8B\x72\x83\xF2\x82\xDE\x62\x90\x77\x7C\xC7\x0C\x4F\x56\x39\x93\xBB\x78\xE5\x82\xB2\x7D\x9F\x84\x2B\x71\x3B\x0E\xA9\xFB\x7D\x38\x90\x1A\x8F\xD4\x86\x92\x80\x80\x86\xA6\x6A\x4B\x0A\x91\x14\x91\xDE\x63\xF0\x7B\x7C\x53\xCF\x87\x63\x86\x15\x83\x91\x0D\x8F\x1D\x8E\x8D\x71\x74\x85\x3A\x83\xD2\x87\xE9\x81\x4A\x87\x8C\x06\xC1\x1C\x93\x17\x90\x84\x01\x21\x83\xB6\x86\xA7\x87\x21\x84\xCD\xEF\x09\x1C\x99\x2C\x8B\x70\x8B\xE4\x85\xC1\x85\x93\x86\x8A\x83\x27\x0E\xCF\x09\xA9\x38\x8C\xC5\x66\xE2\x7D\xED\x82\x3C\x63\x45\x87\x82\xF7\x0D\x1D\xBB\xFB\x79\x37\x84\xD6\x83\xDF\x81\x73\x87\x7E\x83\xCF\x0D\xFF\x0D\x91\x37\x86\x3F\x84\xE7\x86\x9C\x81\x2B\x83\xE4\x7B\xA2\x0D\xAF\x1D\x9D\x21\x8E\x56\x81\xD6\x82\xCD\x85\x49\x85\xE6\x7E\x6D\x0E\x92\x0E\xB7\x3A\x99\x48\x81\xE7\x83\x23\x87\xAE\x87\xC0\x6D\x5F\x0A\x8B\x3B\x40\x3B\x95\xBC\x72\xEC\x80\x94\x82\x90\x84\xBC\x83\x65\x03\xFA\x13\xA7\x0D\x9C\x4F\x83\x85\x7D\x4F\x82\x81\x80\xE1\x80\xC1\xF2\x6C\xEF\x76\x35\x92\x76\x83\x6E\x86\x0B\x87\x8D\x86\xA4\x86\x47\x08\xA4\x15\x89\x21\x8C\x3E\x8B\x84\x86\xF9\x81\x13\x84\xE8\x83\xAA\x0E\x86\x15\xA3\x2C\x8D\x86\x66\x23\x85\xBB\x63\xB8\x87\xD2\x7B\x7A\x09\xAD\xFD\x40\x16\x8C\x51\x87\xDA\x86\x45\x85\x6A\x86\x18\x85\xC7\x0E\xBC\x0E\x89\x3B\x9E\x39\x8F\xDA\x81\x0D\x85\xB3\x87\xBB\x7C\xFC\x04\x8F\x9E\x56\xA9\x54\x77\x88\x78\x84\xDC\x81\x11\x84\x1C\x87\x49\x0D\xBA\x1C\x8B\x35\x9C\x71\x8D\xD4\x80\x55\x87\xA0\x84\x2F\x82\x01\x0F\xAC\x15\xB1\x16\x85\x12\x8E\x01\x72\xA2\x81\xFB\x82\x8A\x82\xA4\xAF\x04\x1C\xA7\x39\x9B\x16\x76\xE9\x79\xB9\x84\xB1\x87\xE5\x86\x65\x0D\xF1\x07\xB7\xF3\x73\x78\x87\x86\x85\xE2\x85\x41\x84\x85\x85\x54\x0B\x8C\xD5\x6C\x3C\x8C\x29\x8E\x98\x7F\xA5\x76\x4B\x82\x0E\x87\x1C\x0F\xCE\x0D\x8F\x20\x95\x76\x82\xEB\x83\xCD\x86\xC6\x85\x6C\x87\x17\x09\xDB\x1D\xAA\x24\x99\x75\x86\x71\x83\xCE\x87\x43\x83\x6D\x85\x8C\xF9\x51\x01\xBA\x70\x6E\xB2\x60\xF3\x83\x88\x73\x51\x84\x84\x7F\x44\x0D\xB3\x1E\xB0\x8B\x68\x6E\x86\xED\x80\x2D\x85\x45\x84\xA8\x87\x3A\x09\xD2\x1E\xBC\x24\x9D\x76\x8E\x93\x86\xEA\x86\x00\x84\x36\x84\x43\x0F\xDB\x0A\xBC\x20\x8B\x48\x88\x9A\x7A\xE6\x86\x63\x86\x58\x87", +"\xC8\xFE\x7C\x14\x8F\x12\x90\x74\x83\xF2\x82\xD2\x85\xC9\x86\x1F\x87\xA8\x0E\xC0\x1C\x97\x3A\x90\x42\x80\x54\x82\xFD\x82\x9D\x80\x44\x7C\x29\xE4\x57\x10\xA9\xC9\x46\x73\x87\xF7\x83\xDA\x84\x58\x87\x7B\x87\x84\x06\xA1\x1E\xBE\x29\x9B\x77\x80\xA8\x85\xDF\x86\xA0\x85\x7F\x87\x84\x0A\xA9\x1E\xA2\x2D\x63\x78\x86\xC8\x68\xE4\x7C\x18\x79\xBE\x66\x74\xE7\x05\x05\x8A\x3F\x67\xC5\x7E\x99\x69\xB7\x80\x5C\x80\x69\x3B\x95\x02\xBF\x1C\x87\x87\x71\xFC\x45\x8D\x85\xAA\x87\x35\x85\xF3\x70\xC4\xD6\x52\x0B\x9C\xF4\x7C\x7E\x6B\xE2\x72\x36\x81\x0A\x06\xD6\x7E\xAB\x0F\xC2\x43\x40\x25\x92\xBD\x60\x8C\x84\x65\x75\x36\x84\xAC\x86\xA6\x7C\x4C\x7A\x55\xD9\x78\x12\x8E\x2A\x86\xBF\x84\xC0\x87\xC1\x87\x8E\x06\xE7\xDB\x45\xAD\x69\x6F\x79\xD8\x85\x12\x77\xC3\x61\x18\x79\xC5\x0F\x9B\x0C\xA2\x0C\x94\x3C\x8D\x87\x71\xF3\x39\x67\x87\xC9\x80\x22\x06\x9D\x21\x0D\x5C\x51\x0B\x89\x97\x31\xFA\x86\xE4\x83\xE9\x87\x12\xFE\x2C\x47\x5E\x24\x88\x7D\x4A\x08\x70\xF7\x84\x70\x86\x15\x81\xC2\x0D\xDB\x1A\xA5\x18\x49\x7D\x81\xF8\x81\xF7\x85\xAD\x7A\xB6\x86\x68\x01\xD9\x03\xBD\x3E\x91\xC7\x7F\xB9\x74\xB1\x6F\xEC\x87\x51\x63\x19\x95\x4C\xCD\x25\x3F\x8A\x7D\x87\xFE\x85\x23\x7E\x9D\x83\x11\x68\x05\xE9\x45\x0D\xA5\x26\x94\x80\x70\xDF\x83\xFD\x87\xED\x86\xFE\x87\x9A\x0D\xC1\x1B\x84\x0F\x93\x4B\x8F\xB0\x86\x2E\x87\xF6\x42\x2E\x05\xDE\x0F\x85\x1D\xA0\x3F\x82\x11\x8A\xE2\x81\x2B\x86\xF9\x74\x9B\x74\x8C\x09\xEC\xFA\x47\xDC\x7A\x70\x87\x2B\x76\x05\x7E\xFE\x86\x8E\x0E\xE6\x0F\x89\x20\x8E\xA7\x64\x93\x5B\x1D\x84\x58\x84\xFF\x81\xC3\x7E\xA6\x09\xC8\x0D\xBE\x06\x9B\x7F\x8D\xFE\x85\xFF\x87\x8B\x6C\x6E\x83\x5B\xD0\x79\xF2\x5D\x3F\x81\x81\x80\xAF\x84\xAF\x63\xCD\x62\xB8\x85\x33\x10\x88\x20\xB5\x40\x82\x85\x63\xE6\x80\xFA\x84\x0D\x88\xED\x84\x0F\x0A\x99\x1D\xA3\x71\x5B\x38\x86\xF9\x7A\x2C\x72\x0E\x89\x08\x6D\x00\x0A\xB9\xD4\x2C\x3F\x87\x79\x8E\x6E\x80\x8E\x81\x69\x74\xF6\x84\x08\x0F\xC9\xF2\x5C\x3A\x80\x65\x80\x01\x8F\x07\x89\x21\x83\x6B\x5D\x24\x0A\x84\x9D\x5C\x3F\x97\x53\x31\x01\x88\xC2\x7E\xA1\x86\x0A\x88\xBC\x0E\xB8\x14\x89\x42\x6C\x87\x3B\x04\x88\xF3\x84\xCA\x86\xE4\x87\xD2\x07\x87\x15\x8D\x14\x62\x3C\x85\x64\x75\x0C\x8A\xF1\x87\xCC\x87\x68\x10\xF7\x1F\x87\xBE\x74\x82\x8C\x02\x8C\x09\x8B\x9B\x84\xF4\x86\x2B\x02\xF3\x14\x83\x63\x68\x7D\x87\x00\x8D\x05\x8A\x08\x88\x1A\x6E\xAF\xEF\x70\x1B\x49\x2A\x87\x0A\x6F\x26\x80\x30\x73\x11\x89\x2B\x88\x41\x10\xEA\x20\x9A\xFB\x6D\xFF\x7D\x6B\x7B\x4F\x81\x1D\x88\x33\x88\x4D\x10\xAB\x15\x95\x1E\x43\x5B\x86\x02\x8B\xFD\x82\x0A\x7D\x89\x82\xBB\x01\x8E\xAC\x5E\x40\x8F\x3E\x3D\x05\x8B\x25\x87\x17\x89\xAB\x84\x06\xD6\x2D\x15\x8D\x7D\x6D\x29\x80\xD5\x79\x59\x87\x03\x89\x47\x88\x6F\x10\xE7\x20\xBF\x1A\x81\x85\x88\xF5\x81\xEE\x84\xE7\x67\xAD\x87\x13\xF0\x5D\x1E\xBE\x70\x6F\xB0\x6F\x01\x8F\x2B\x72\x15\x89\x4C\x85\x3C\xB4\x72\x15\x96\x7E\x54\x57\x8C\x55\x80\x5C\x87\x1E\x69\xAF\x82\xA2\x7E\x55\x20\x87\x42\x98\x85\x83\x0B\x6A\x17\x8B\x1F\x5F\x43\x7C\xFA\xCB\x43\x0A\xB9\x09\x91\x58\x85\x47\x39\xC2\x31\x27\x88\xAA\x87\x2C\x09\xDF\x1D\x8C\x11\x9B\x54\x88\xD4\x46\xF3\x84\x6F\x7C\xD0\x87\x9A\xD9\x71\x10\x9A\x3D\x90\x2C\x8F\x86\x80\xF5\x80\x11\x38\x83\x00\xFA\xF9\x0C\x05\xA4\x0A\x91\x15\x8A\x3A\x48\xCC\x80\x20\x03\x9C\x08\xF4\xF9\x41\xCA\x04\xD0\x21\x87\x83\x2A\x85\x0F\x5E\x97\x5E\x87\x81\x38\x9E\x66\x21\xA9\x11\x05\x8A\x09\x2D\x84\x14\x87\x75\x5E\x21\x08\x73\x00\x3C\x05\xAD\xC4\x76\xB6\x1E\x76\x75\x29\x3F\xED\x38\x05\x6D\x35\x00\x64\x05\xB9\x71\x56\x36\x35\x07\x06\xED\x71\x21\x01\xB0\x70\x07\x11\xED\xEB\x2D\x0B\x90\x16\x8C\x52\x48\x5E\x82\x1C\x00\x79\x81\x67\xDB\x74\x05\x94\x16\x5A\x16\x80\xA4\x39\x1F\x89\xB7\x80\xF6\x7C\x92\x60\x7D\x21\xA1\x85\x60\x88\x82\x10\x88\xAE\x4C\x41\x88\x83\x88\x08\x11\x9D\xED\x0B\x44\x87\x53\x02\xC8\x46\x21\x88\x44\x89\x6C\x6E\x12\x11\xAD\x0C\x67\xF0\x7F\xE0\x74\xBE\x4A\x5F\x80\x03\x84\x57\x26\xF6\x10\xDE\xD7\x20\x39\x56\x03\x08\x89\x85\x36\x71\x68\x51\x84\x00\x58\xD2\x34\xC9\x4A\xFC\x52\xA6\x71\xCC\x83\x03\x05\xBA\x73\xEE\x22\x2C\xFA\x30\xD3\x38\xFF\x79\xDF\x5F\xB3\x83\xCE\x0B\x4F\x89\x66\x4A\x17\x03\x64\xE9\x5B\xCD\x64\xD3\x79\x79\x07\x28\x89\xDD\x49\xBD\x7F\xCF\xFF\x59\xEA\x44\xD4\x7D\x84\x01\xA4\x7C\x50\x7F\x6D\x83\x00\x7E\xA9\x92\x47\xF4", +"\x67\xD6\x66\xFC\x7E\x51\x7C\xA7\x71\xE2\x7E\x83\x7A\x9E\xF3\x61\xE5\x12\x9C\x72\xD2\x76\x1C\x04\x4A\x7C\xF6\x7E\x21\x7A\xDA\xFF\x14\xFF\x55\x93\x57\x8A\x88\xC0\x7C\x88\x48\x43\x7A\xFD\x46\x0E\xF5\x4A\xEB\x59\xFF\x74\xFD\x7F\xA3\x7B\x4C\x7C\x7C\x80\xA3\x88\x63\x11\x99\xEA\x71\x45\x9D\x2D\x73\x17\x8D\xEF\x7E\xF1\x7E\xE7\x7A\x26\x02\xCD\x22\xB9\x45\x8D\x8F\x31\xFB\x7D\xF3\x7C\x5A\x88\xBA\x88\x45\xF4\x79\xF4\x6B\xFE\x7D\x4B\x3C\x16\x8C\x1E\x75\x56\x88\x3F\x7D\xDC\xFB\x3C\xFF\x49\xCF\x62\xD4\x7B\x16\x8E\x29\x89\x94\x49\x8B\x01\x88\xFA\x40\xEA\x51\x45\x9F\xFC\x73\x15\x89\xC0\x70\xA1\x61\xC6\x88\x0E\xE9\x36\x23\x51\xEA\x6A\x14\x68\x5A\x79\xFA\x7D\x7D\x7B\xCF\x88\x96\x11\xE8\xD3\x66\x01\x1D\xD4\x78\xFA\x7F\x47\x7C\xF7\x7F\x58\x7D\xA0\x11\xD9\xD2\x42\xF0\x61\xFF\x76\x60\x78\x58\x80\x97\x05\xD8\x88\x6D\xE9\x33\x23\xA7\xFF\x60\xFF\x61\xA3\x78\x37\x8B\xFB\x7F\x77\x73\x53\xE5\x5A\xE6\x5D\xD2\x77\x8D\x89\x1A\x8D\x44\x68\xFD\x7F\xAB\x7A\x8A\xB7\x3F\xF5\x65\xCD\x6A\xE2\x32\x04\x09\xB3\x83\x06\x81\x96\x55\xCF\xDF\x5B\x6C\x2E\x61\x24\x3D\x77\xA5\x4E\x5B\x80\x00\x00\xCE\x82\xCD\xD2\x1E\x0B\x83\x03\x98\x83\x7B\x09\x7A\x3A\x8A\xB8\x69\x00\x85\xC8\xFD\x3B\xF9\x44\x9C\x70\xF8\x7D\xCE\x7B\xB4\x83\xC1\x6B\x50\x84\x78\xF3\x7D\x2B\x4C\xF1\x73\xDD\x30\xD0\x82\x74\x85\x5E\x34\x50\x84\xCB\xF1\x41\x4B\x20\x86\x72\x39\x8B\xA5\x7B\x67\x87\xED\x37\x69\x70\x3D\x0C\xF0\x23\x96\x28\x81\x2E\x19\xB3\x86\x54\x7E\x7D\x89\xF5\x88\xF3\x95\x75\x2B\x72\x29\x8C\x8F\x87\xC4\x87\x3F\x83\x28\x84\xAF\x81\x50\x32\x73\x23\x9A\x1D\x9A\x59\x80\x17\x6F\x3E\x8B\x53\x69\xB9\x68\x07\x12\xF0\x06\x90\xC9\x1D\x8F\x84\xAB\x7B\x34\x73\x61\x7B\x03\x70\x91\x23\x35\x22\x91\xF5\x35\x00\x83\xD4\x3A\x43\x88\xEC\x72\xD3\x87\xD5\x05\xB9\x00\x5C\x29\x0C\x87\x89\x65\x82\x9C\x82\xBB\x87\x55\x56\xBB\x0F\x93\x1C\xB3\x3F\x96\xB1\x7C\x16\x80\xF8\x84\xA5\x81\x10\x89\x97\x81\x23\x24\xA1\x1A\x99\x74\x6A\x25\x85\xF5\x86\x5B\x86\x88\x81\x7A\x01\xC3\x11\x81\x3F\x86\xFB\x73\xFC\x85\x52\x42\x8C\x89\x2F\x87\xA2\x06\xB6\x13\x8D\x09\x90\x0C\x8A\xFC\x80\xCD\x78\x34\x7D\xE6\x87\xEB\xED\x4F\x1F\x95\xEC\x3F\x91\x87\xA4\x85\x36\x86\x7F\x85\x8E\x7F\xF0\x0E\x87\x12\x9E\xAD\x77\x1A\x84\x19\x84\x2E\x85\x3F\x5D\x6D\x7C\x03\xD0\x64\x20\x82\x04\x04\x91\x87\x81\x86\x44\x8B\x96\x83\x77\x87\x74\xC9\x32\x1B\xBE\x08\x9B\x92\x83\x23\x8D\x31\x75\x24\x88\xCD\x87\xEE\x05\xEF\xBA\x4A\x19\x99\x5A\x4C\x24\x8C\xDD\x86\x8D\x7F\x27\x89\xEF\x0F\xF2\xF5\x53\x0E\x8F\x2E\x8A\x44\x46\x35\x83\x06\x69\x32\x71\xAD\x06\xBB\x1E\x01\x2C\x0D\x93\x85\x22\x8D\xEF\x83\x89\x89\xB5\x81\x67\xFD\x09\x13\xAB\xC8\x58\x33\x87\xE1\x82\xCF\x81\x86\x87\x45\x88\x2A\xD0\x79\x24\x89\x31\x5C\x93\x8D\x25\x8E\x4F\x8B\x97\x88\x39\x81\x51\x12\xEB\xF4\x50\x1A\x8B\x35\x88\x3C\x85\x11\x8B\xD1\x07\x3D\x89\xD9\x0B\xE5\x24\xA8\x12\x96\x1A\x79\x1E\x52\xE0\x7B\xA9\x83\x0C\x88\xA9\x06\x9B\x20\x88\x4A\x85\x1F\x8F\x60\x68\x53\x89\x42\x00\x2E\x89\x84\x09\xA5\x0A\x9C\x29\x8C\x76\x85\x67\x86\x59\x72\xAB\x77\xE8\x80\x8E\x09\xC7\x0D\xA5\xDC\x63\x93\x81\x10\x00\x55\x89\x60\x86\x55\x89\xCB\x0E\x9A\x10\xBE\x28\x70\x81\x81\xAE\x6A\x4B\x89\xAD\x88\x4D\x89\x98\x0A\x9C\x25\x92\xCD\x4B\x4E\x86\x00\x8F\x57\x88\x90\x88\x1A\x89\x42\x12\xDB\x04\xB5\xF8\x3C\x4E\x8F\xE4\x4C\x51\x89\xAA\x88\x0C\x84\xAB\x12\xBA\x25\x8C\x16\x95\x73\x84\xF0\x87\xCE\x87\x7B\x84\x3A\x88\xA7\x12\xC0\x25\x93\x23\x94\xDC\x69\x04\x8D\x16\x4E\xB3\x89\x5B\x89\xD0\x12\xB9\x25\xA0\x49\x97\x78\x85\x81\x79\x41\x83\x14\x88\x5F\x89\x00\x00\x36\x25\xA8\x35\x82\x6C\x8E\xF3\x80\x34\x86\xDB\x70\x08\x81\x88\x04\xFC\x20\x86\x4B\x8D\x92\x80\xE6\x81\x59\x88\x6D\x54\x31\x88\x79\xD5\x2F\xF5\x1F\x4B\x8B\x97\x88\x2B\x8D\x5D\x8A\x8D\x85\xEA\x7E\x8D\x05\xBA\xFC\x4C\xA8\x7E\xCA\x7D\x0E\x6C\x4C\x8B\xB1\x88\x33\x89\x77\x10\xCE\x20\x85\x25\x81\x77\x86\xA2\x33\x20\x02\xBA\x88\x9E\x87\x9E\x09\xFE\x25\x81\x2B\x98\xE8\x63\x20\x8A\xDE\x86\x23\x89\x6C\x89\x07\x13\x9B\x25\xAE\x8F\x6A\x25\x81\x30\x8F\xBA\x7E\xC1\x4F\xEA\x6D\x1F\x7F\x7B\x25\x90\x4C\x94\x51\x82\x31\x89\x5B\x85\xA3\x7F\x8E\x89\x8F\xFE\x19\x1E\x9A\xEF\x7D\x4B\x3F\x30\x8A\x20\x84\x74\x87\x92\x89\x09\x0B\xC2\x15\x83\x20\x83\xF5\x7E\xF2\x80\x17\x6A\xFB\x83\x8C\x4A\xA6\x12\xE0\x21\x9A\x4B\x99\x4E", +"\x88\x08\x89\x5E\x87\xB0\x84\x54\x83\x5C\xBB\x6C\x3E\x47\x3D\x65\x85\x88\x33\x8F\xF9\x31\xCB\x88\x27\x87\x2F\x13\xD0\x1C\xB0\x36\x92\x99\x80\xF7\x84\x61\x85\x16\x7C\x10\x84\xCA\x10\xA2\x10\x85\x4D\x91\x30\x37\x34\x88\xD7\x84\xDB\x86\xAB\x84\xD2\x10\xA6\x9E\x46\x43\x96\x53\x53\x2B\x75\x5E\x86\x95\x89\x7B\x85\xC0\x10\xA7\x7C\x77\xA9\x35\x9A\x8C\xED\x81\x69\x8A\x9C\x87\xA5\x89\x72\x84\x75\xDA\x55\x42\x87\x7C\x89\x0C\x88\x4C\x83\xF8\x5E\xC5\x87\xA6\x90\x46\x26\xBB\x4C\x8D\x50\x80\x04\x8F\x89\x74\x35\x88\xEB\x4D\xD6\x10\xEE\x10\x94\x92\x72\x2C\x82\x01\x50\xB3\x75\x70\x7D\x49\x72\x95\xED\x66\xD2\x05\x29\x0B\x17\x8F\x2A\x83\x1C\x88\x3C\x88\xF0\x50\x70\xBE\x2F\x1F\x31\x3E\x14\x70\x26\x96\x34\x59\x04\xE1\x88\x2E\x5F\xE0\xF9\x64\x21\xBC\x4A\x49\x9C\x8D\xFE\x05\x36\x08\x17\x26\x12\x38\x85\x2B\x16\x05\x91\x4E\x87\x9C\x8F\x77\x3C\x72\x8A\x66\x32\xE3\x07\x8C\x13\xC1\xCA\x25\x13\x0F\x9C\x8E\x1E\x8C\xFE\x6C\x72\x7D\xF8\x87\x22\x99\x1E\x27\xAD\xA4\x2A\x61\x21\x3A\x8C\xE7\x05\x9C\x02\xD2\x89\x99\x74\x1B\x27\xAD\x35\x88\x9C\x8F\xD6\x87\xF5\x06\xF5\x07\xD6\x89\x44\x0F\x43\x0A\x30\x4E\x82\x26\x52\x3B\x88\x75\x88\x51\x4C\xD5\x89\xAB\x65\x3D\x23\x14\x38\x31\x89\x88\x08\x75\x3F\x3C\x1F\x00\x7D\x88\x74\xF1\x36\x73\x6E\x9D\x69\xCA\x37\x3B\x3F\x7E\x6E\x0D\x01\x8E\x88\x88\x7F\x56\xCD\x3E\x01\x0E\x3B\x70\x09\x01\x2C\x71\xF5\x89\x14\x3B\x23\x11\x87\x0D\x2B\x15\x50\x17\x8B\x07\x07\x24\x88\x62\x75\x94\x88\x98\x94\x14\x22\x92\xA5\x27\x9E\x87\x07\x7E\x70\x8B\xEC\x88\x95\x27\xF2\x10\xE5\x37\x5E\x05\x01\xCE\x2F\x6C\x75\x6C\x5F\xF2\x88\x50\x69\x5B\xFC\x18\x05\x94\x37\x90\xEB\x49\x3E\x8A\xC9\x25\x70\x2D\x97\x04\xCE\x13\xD0\x27\xB2\x78\x52\x9E\x84\x3D\x88\x7E\x8B\x71\x7C\xF9\x89\x79\xE8\x3B\xC7\x35\x4F\x8B\x9F\x87\xE3\x27\x25\x07\xF5\x89\x34\x3B\xD9\x13\xF9\x02\x1B\x4F\x81\x2A\x35\xF6\x05\x7B\x8A\xF0\x85\xDE\x89\xCE\x05\xB7\x9C\x03\x50\x84\x8D\x8B\x3B\x31\x60\x05\x8F\x6C\xF0\x89\x2C\x95\x0D\xC3\x77\x44\x8C\xEC\x3E\x21\x8A\x26\x8A\x33\x58\x40\x00\x96\x02\xDC\x14\x34\x44\x82\xAE\x5A\x77\x77\x0A\x29\xCA\x4D\x0F\x32\x9A\x50\x75\xC6\x3C\xCF\x79\xE4\x65\x14\x8E\x20\x01\x4E\x89\xF8\x88\xDB\xD2\x77\x05\xA6\xC3\x61\x04\x0A\x39\x8D\xA8\x31\x30\x33\xCB\x15\x31\x01\xC4\xE9\x75\x2B\x25\x2D\x5B\x92\x05\x61\x26\x45\x01\xF4\x30\xFF\x00\x31\xE1\x40\xF7\x2E\x3B\x73\x08\x06\x7F\x89\x52\x33\x1B\x8A\xB8\x42\x39\x28\xA8\x70\x3C\xA1\x8F\xEB\x06\x87\x89\x6D\x2D\x0D\x29\xF5\x4A\x2F\x12\x05\x51\x81\x89\x63\x8E\x1F\x73\x35\xDB\x04\xE0\x15\xB8\xB0\x23\x04\x16\x9B\x22\x04\x0E\x76\x74\x8B\x88\x8E\x73\x9D\x07\x48\x14\xAB\xCA\x04\x05\x83\xC7\x1C\x44\x8F\x0E\x1E\x13\x8B\xF4\x30\x2F\x09\x5E\x28\xBB\x66\x75\xA2\x8B\x4B\x3C\x72\x15\x16\x8B\xC4\x01\x70\x0F\x53\x28\xAB\xEE\x2A\xA6\x7D\x60\x7E\x62\x3B\xAF\x07\x5D\x32\x63\x14\xA8\x95\x25\x51\x97\xC5\x17\x46\x8E\x99\x7A\xEF\x23\x97\x04\x74\x14\xCE\x16\xA8\x2A\x36\xA2\x82\x28\x0E\x8D\x88\x70\x3A\x40\x01\x5B\x14\xEE\xCE\x76\xD2\x75\xA3\x8D\x36\x31\x8C\x8A\x62\x00\x25\x8A\x64\x14\xBE\xE4\x7D\x50\x99\x74\x28\x46\x8F\x50\x01\xD0\x85\x41\x8A\x6D\x14\xD8\x28\x87\x52\x83\x11\x04\x3C\x88\x7C\x5F\x90\x72\x42\x00\x21\x14\x99\x65\x57\x52\x87\xC8\x19\xB2\x49\x82\x2E\xFA\x7C\x92\x53\x2B\xEE\x39\x26\xAC\x0A\x2C\x23\x86\x5B\x6E\x0E\x8A\xAA\x84\xA0\x5C\xF0\x0F\x91\x28\xA9\x05\x80\x43\x71\x2D\x65\x45\x8A\x8E\x89\x17\x89\xA6\xB8\x4D\xF7\x4F\x9F\x3B\x9D\x88\x30\x82\xE5\x82\x17\x89\x09\x88\x0C\x03\xF2\x24\x9C\x4E\x9D\x72\x30\xE7\x59\x65\x81\xF2\x87\x81\x53\x75\x0D\xED\xC6\x2A\x52\x82\x08\x0C\x4B\x8B\x2A\x85\xC2\x80\x68\x88\x9F\x10\xD9\x26\x95\x3F\x88\x17\x2B\xCE\x67\x30\x83\x3C\x85\x04\x83\xF5\x08\xBA\x29\x91\x98\x2D\xA6\x8F\xE6\x87\x99\x8B\xD5\x89\xB7\x84\x6E\x0F\xF3\x6B\x5B\x88\x78\xC6\x7E\xD9\x81\xC0\x77\xD6\x80\x7D\x89\x99\x13\xEB\x0D\xAD\x52\x90\x84\x89\x30\x8A\x12\x88\x38\x7C\x31\x89\x31\x12\xE9\x29\xA6\x3A\x9F\x1D\x8E\x4A\x88\xAA\x84\x9A\x89\x82\x7C\x6A\x12\xA9\x29\xBB\x52\x8C\xA5\x84\x8E\x71\x6D\x83\x9F\x88\xE5\x76\xD3\x0D\x81\x28\x95\x37\x8B\x91\x83\x94\x86\x4E\x8A\x16\x6A\x3C\x89\x5F\x0F\xFB\xC7\x3B\x53\x8A\xA7\x8D\x4F\x88\x49\x86\xBD\x88\x52\x83\xAC\x03\xA6\xBB\x6E\x0E\x9E\x13\x74\xF7\x84\x37\x81\x42\x8A\x1E\x38\x5C\x0A\x5C\x29\xAA\x3D\x8D\x4B\x8F\x4D\x88\x39", +"\x85\x38\x8B\xCD\x6B\x93\xDA\x50\xD7\x5F\x4D\x93\xF7\x75\x29\x8C\x06\x64\xBC\x03\x8C\x8A\xFC\x14\xBE\x1B\xA7\x37\x8A\x98\x84\x4C\x8E\x53\x8A\x85\x87\x79\x85\x8D\x09\xFD\x07\xB0\x0E\x8B\xED\x64\x1D\x86\x8E\x8B\x36\x8B\x94\x8A\x98\x0D\xBF\x1B\xBF\x41\x8E\x0E\x80\xC0\x73\x34\x86\x41\x74\x63\x6A\xB2\x12\x81\x08\xA1\x4C\x92\xA7\x8F\xF7\x84\xD2\x85\x3D\x8A\x4B\x87\xAB\x10\xF9\x44\x6A\xE4\x71\xC9\x48\x52\x8C\xA1\x8A\x4A\x8A\x1A\x83\x36\x10\xC4\x25\x8B\x4A\x84\xAA\x86\xF9\x86\xA9\x87\x51\x8B\x54\x87\x71\x10\xCB\x25\xB5\xE4\x7A\xA6\x8D\x97\x32\xA3\x8B\xCE\x86\x97\x89\xCA\x0E\xB0\x26\xB5\x20\x9A\x27\x80\x80\x7E\x50\x64\xCB\x71\x42\x88\xEA\x02\xB8\x2A\xAE\x2B\x99\x6C\x84\x73\x6D\x5B\x8A\x21\x3B\x3B\x35\x5E\x15\xE7\x1A\xA3\x4C\x9F\x55\x82\x56\x8C\xB0\x85\xEF\x82\xCE\x87\x9C\xF9\x49\x52\x53\x28\x82\x91\x84\x55\x8C\xBF\x86\xBF\x87\x54\x88\x67\x12\xD9\x2A\xB7\x49\x87\x24\x87\x75\x83\xA8\x89\x42\x01\xB8\x8A\xCE\x0D\xE0\x2A\x94\x3C\x8A\x9A\x86\xF1\x86\x97\x81\xAF\x87\x1C\x85\x2B\x13\xF9\xD2\x08\x56\x88\x76\x8A\x58\x8D\xE7\x84\x63\x8B\x9F\x87\x27\x13\xD4\x25\xA4\x64\x6C\x83\x8E\x23\x8D\xAF\x8B\xA0\x86\x5E\x83\xD2\x0F\xBE\x0D\x94\x3F\x87\xB6\x63\x07\x8C\xCE\x3D\x53\x8B\x79\x8A\xEC\x06\xD7\x2A\x82\x3E\x89\xAA\x81\xE0\x82\x9A\x83\x1E\x88\xCC\x7D\x37\x15\xCE\x2A\xB9\x54\x8B\xA9\x8E\x4E\x89\x8E\x82\x22\x88\x1C\x6E\x05\x0F\xE0\xF6\x5D\x55\x8A\xAB\x88\x9D\x84\x6E\x89\xCF\x89\x29\x6F\x77\x13\xA4\x2A\x95\x1F\x86\x2A\x37\x52\x8E\xB3\x89\x86\x82\xD0\x8A\xDF\x0F\xA2\x2B\xA1\x3F\x88\xE3\x63\x33\x89\xA2\x83\xF2\x5A\x4C\x88\x3D\x08\xAD\xF0\x4A\x4A\x86\xA3\x37\xD0\x33\xB2\x8A\xC4\x87\xCA\x8A\x11\x13\x97\x2B\xAE\x4B\x89\x9B\x84\x09\x88\x68\x8A\x4F\x4A\x63\x85\x28\xE4\x44\x26\x99\xE0\x45\xAE\x87\x58\x8C\xB7\x88\xF0\x77\x6D\x89\xC4\x10\xBE\x26\x98\xE6\x7E\x12\x84\x44\x51\x16\x89\x26\x89\xCE\x7C\xD3\x15\xF7\x70\x12\x56\x86\xAF\x87\xA9\x80\xBD\x8A\xB0\x89\x5C\x88\x85\x0F\xEB\x26\xB7\x2F\x1E\x9A\x8F\xB0\x81\x6C\x89\x23\x8B\x85\x8A\xA8\x15\xEB\x29\x80\x56\x8D\xA7\x87\x4F\x8B\x36\x61\xD3\x88\x0F\x84\xBD\xE4\x75\x0A\xB6\x2B\x84\xA9\x80\x37\x8B\x13\x83\x6E\x8A\xD9\x8A\x6B\x15\xBA\x2A\xBB\x40\x8E\xBC\x71\x5C\x89\xBD\x5D\x28\x7C\xC0\x89\xE4\xF0\x7C\x26\xA5\xE2\x79\x6C\x74\xD9\x71\xC3\x8A\xD9\x85\x7F\x00\xF2\x6B\x02\x02\x09\x44\x9D\xA4\x88\xB5\x81\xAC\x43\x21\x00\xE4\x89\x90\x10\x70\x1E\x08\x02\x0E\x3B\x79\x88\x3F\x76\x3B\xC0\x6D\x1B\x00\xFA\x13\xD9\x51\x56\x9B\x29\x04\x0E\x76\x70\x13\x01\x58\x70\x1B\x8B\x25\x76\x09\x28\x89\x9D\x23\x82\x20\x2F\x86\x10\x02\xF7\x88\x96\x74\x18\x14\x8E\x28\x62\x4F\x82\x82\x07\x62\x8D\x7C\x8A\x3B\x89\xD3\x89\xB2\x14\xA5\x38\x69\x4F\x8D\xAF\x12\x02\x2D\x7D\x8B\x6D\x14\x16\x8B\x46\x14\xFD\x90\x6F\x43\x87\x9F\x8E\xF1\x53\xC9\x89\x5E\x00\x11\x28\x2F\x09\x2F\x2C\xB1\x58\x83\x6D\x53\x63\x8D\xC6\x89\x94\x8B\x4B\x81\x4E\x8B\x12\x27\x8E\x50\x56\xB2\x8A\x2D\x7D\xA4\x4F\x4B\x04\x1C\x8B\x65\x76\x3A\x2C\x8A\x19\x5D\xB1\x86\xC6\x32\xCD\x5F\x99\x70\x49\x5F\xC3\x14\x91\xA0\x24\x59\x82\x81\x21\xB0\x04\x8F\x6D\x90\x8A\x18\x4A\x3A\x11\xD9\xA2\x67\x04\x04\x92\x6A\x10\x5C\xCA\x73\x22\x00\xFE\x7F\xB6\xD0\x12\x10\x23\x90\x21\x01\x7C\xC5\x78\x84\x31\xC0\x38\x07\x7D\x6E\x47\x6E\xCE\x55\x02\x12\x08\x86\xD1\x76\xD2\x07\xA0\x8B\xE8\x55\x15\xE0\x78\x9E\x2F\x24\x0B\xB4\x86\x54\x78\xEF\x27\x0F\x3A\x04\x3A\x41\x74\x6F\x2C\xA5\x50\x90\xD6\x26\x6D\x34\x11\x02\xDB\x73\x11\x8A\x06\x00\xAD\x1E\xA7\x2C\x0F\xB4\x8A\xBD\x51\xD2\x8A\x15\x30\x12\x01\x2F\x09\x20\x2D\xA0\xD5\x66\xB5\x85\xAB\x2D\x04\x07\xA5\x8A\x62\x03\x99\x16\xE1\xD4\x45\x1F\x49\x3B\x74\x15\x04\xC4\x88\xFB\x37\x4D\x84\x50\xC4\x16\x05\xB0\x9A\x58\x59\x0A\xC3\x7E\x53\x7F\x0A\x28\x61\x58\x53\xCD\x48\xC9\x2C\x92\x3B\xA4\x8A\xFB\x36\x65\x87\x40\x00\x98\x85\xE1\x0C\xAE\xFB\x00\xD3\x6D\x03\x02\x4C\x7C\x8A\x89\x31\x7A\xD2\x70\x44\x0B\xA1\x29\x99\xF5\x4B\xB6\x8B\xF5\x7F\xF0\x27\xB3\x8B\xF5\x88\x3A\x66\x0D\x01\x3A\x5A\x9E\x91\x7A\x7A\x03\x5C\x22\xA9\x20\xD3\x48\xC2\x16\xC0\xF1\x5B\x88\x25\xB6\x87\xFF\x30\x6D\x87\x23\x5E\x39\x8A\x6D\x76\x2B\xE9\x5E\xC6\x6E\x01\x8A\x0A\x86\xDC\x89\xB2\x8A\x00\x00\xE8\x16\x96\xEE\x2A\x5B\x83\xFA\x3C\x6E\x8E\xD7\x26\xAF\x5F\xFB\x37\xC1\x7B\x45\x16\xBF\x07\x91\xB7\x8B\x7E\x38\x97\x7B\xD1\x84\x3F", +"\x8A\x91\x2B\x7D\xE7\x79\x8B\x32\xB6\x86\x10\x04\xDF\x88\x19\x3C\x7F\x8B\x84\xF5\x00\x2E\x84\xAF\x0A\x03\x78\xE1\x40\xD0\x8B\x01\x80\x68\x0F\xB3\x64\x2D\xA3\x0C\x04\x92\x09\x8E\x0E\x28\xFB\x72\x75\x89\x47\x00\x6E\xE7\x21\xE9\x49\x05\x90\x3A\x35\x2D\x51\xE2\x8B\x69\x27\x89\x8B\x3A\x14\x95\x2E\xAF\x24\x1A\xB8\x80\xBD\x7C\xE2\x89\x69\x29\xCF\x35\x1F\x11\x00\xA2\x02\x79\x10\xA4\x86\x6F\x8C\x90\x64\x88\x89\x5C\x8A\xC4\x15\xCF\xCF\x23\x58\x8A\x77\x80\x4E\x85\x4F\x89\x7F\x85\x7F\x8A\xC8\xE1\x29\x24\x95\x40\x92\x6D\x7B\x5E\x81\xBA\x82\x73\x70\x89\x81\x66\xE8\x47\x1E\x24\x57\x86\x08\x03\x73\x89\xA1\x83\xDE\x82\x9B\x8B\xED\x0E\x8F\x25\x9B\x71\x56\x91\x8E\x90\x7F\xAD\x86\x31\x8B\xF5\x70\x1E\xF6\x49\x29\x82\x5D\x92\xB9\x8F\x69\x83\xC8\x6A\x9B\x89\x68\x7F\x70\x12\xF3\x03\x91\x4A\x94\xA6\x86\x18\x81\x68\x82\x2F\x89\x4F\x61\x49\x12\x81\xAE\x60\x95\x23\xBA\x83\x10\x05\xE8\x89\xD9\x82\x85\x82\xCF\x12\xDE\x24\x99\x20\x83\x97\x85\xD8\x86\xFA\x84\x04\x03\x72\x8A\x6A\xF6\x0D\x12\x83\x3D\x0B\xA6\x81\x10\x06\xEC\x88\x96\x84\xB4\x8B\xE0\x12\xEA\x2E\x91\x4B\x8C\xBB\x8C\x1A\x43\xFC\x87\x11\x36\x2E\x05\x76\x17\xD4\x15\xB8\x5D\x9C\x97\x81\x2E\x8D\xAE\x89\x97\x85\xB6\x8B\xA3\x01\xAB\xDC\x64\x5D\x82\xB1\x85\x75\x89\xD7\x6B\xD5\x8B\x8D\x7F\x59\x17\xAE\x74\x0C\x5D\x89\x43\x5F\xD6\x84\x28\x84\xB5\x60\xC1\x61\x2E\xF8\x50\x0C\x00\x5E\x8D\xBC\x80\x73\x69\x63\x89\xB0\x89\x8D\x89\x10\x15\xB7\x03\x9B\x25\x90\x95\x82\x53\x8E\xBD\x85\x58\x63\x02\x88\x0A\x15\x91\xCC\x01\x5E\x8B\x6D\x85\xAD\x83\xAE\x8B\xB5\x84\xC3\x8B\xAC\x12\x86\x12\x92\x4A\x82\xA9\x8D\x00\x89\xA3\x4A\xE6\x8B\x15\x5F\x9C\x17\xEC\x14\x96\x55\x8C\xA7\x8F\x4A\x8A\xB0\x8A\xEB\x86\x0A\x87\x92\xEE\x24\x2F\xA8\x40\x94\x80\x75\x53\x8B\x22\x83\x41\x37\xD5\x8B\x11\x0F\xE5\x10\xAE\x5E\x87\x58\x80\x7B\x8A\x5A\x89\xBB\x62\x57\x89\xCE\xD7\x2F\x2A\xBB\x42\x91\xA9\x83\x7C\x8A\x16\x88\x00\x83\x00\x7D\x60\x65\x74\x2E\x80\x00\x08\xBE\x8A\xF3\x82\xAE\x88\x76\x8A\x92\x89\xDA\x15\xFF\x25\x95\xB8\x68\x0F\x85\x41\x82\xB7\x89\x5E\x34\xEE\x8B\x00\x09\xDF\x2A\x88\x4D\x81\xAB\x81\x7E\x8B\x62\x88\x82\x67\x29\x87\x76\xB6\x11\x2B\xB7\xA9\x28\xBF\x88\x92\x83\xA3\x8A\x71\x85\x8E\x8A\xE9\x09\x9F\x2A\xB9\x10\x9B\xAA\x81\x73\x8A\xF5\x89\xEE\x8A\x41\x82\x8C\xE9\x1A\x26\x93\x0D\x99\xF1\x7E\x31\x8C\x08\x88\x5F\x8B\x84\x00\xF4\x17\xEB\x12\xB6\x5F\x87\x4F\x88\x7F\x89\x44\x86\xB0\x42\xB7\x8A\xF6\xC5\x67\x2F\xBF\x5F\x96\x54\x81\x80\x8F\xF3\x8B\x00\x8C\xC0\x83\x6C\xF7\x52\x20\x84\x86\x28\xDC\x72\x81\x8D\xCB\x86\xD5\x8A\xA4\x8B\x6F\x12\xB8\x2E\x93\xFB\x6F\xF2\x70\x2F\x8D\xB0\x88\x6C\x8B\xBE\x34\x09\x18\xEE\x1C\x8B\x60\x9F\x50\x8D\x80\x88\x64\x86\xFE\x8B\x07\x81\x55\xF9\x3E\x1D\x88\x95\x2B\xBC\x85\x77\x8B\x02\x8D\x34\x85\xF3\x8A\x3C\x13\xE9\x2B\x80\x57\x82\x82\x8F\xC0\x44\xB3\x8A\x32\x8A\xAA\x8B\x1E\x18\x8E\x2F\xA0\x60\x98\xBA\x82\x82\x88\x4A\x8B\xDA\x82\xC3\x77\x19\xCB\x27\x30\x9D\x60\x9F\x26\x81\x85\x7F\xF1\x8A\x3F\x8A\xA5\x8B\xE4\x04\xA2\x03\x80\x35\x89\x3D\x84\xA7\x86\xA6\x88\x0A\x8C\x1B\x8C\xD7\x09\xB8\x30\xBE\x56\x9A\xC1\x83\xF3\x75\x89\x82\x20\x89\xD8\x77\x20\x13\xB3\x30\x80\x61\x8C\xC2\x8F\xEC\x7E\x09\x8E\x43\x8B\xC8\x8B\x66\x02\x98\x30\xBA\xF8\x70\xF4\x72\x06\x86\xFF\x89\x10\x8D\xCE\x8B\xF4\x12\xC1\x24\xA8\x61\x97\x4D\x86\xAA\x72\x52\x61\xD5\x84\x57\x88\x36\x96\x17\x21\xAF\x3C\x8F\xAF\x85\x51\x81\xBE\x8A\xDD\x4F\xCD\x8B\x6F\x18\xBA\x2F\xA6\x3C\x9C\xBD\x86\x4F\x8E\xF7\x88\x99\x6A\x51\x88\xF6\xEF\x45\x1E\x83\xE1\x62\xAF\x8F\x60\x6F\xF6\x88\x02\x8C\x2C\x8C\x0B\x0A\xBD\x2B\xAF\x2B\x95\x9B\x8C\x57\x62\x6D\x8A\x77\x8B\x43\x81\xDE\x0A\xDC\x1E\xBC\x61\x9B\xF6\x79\x81\x5E\x11\x8C\xD1\x8A\x48\x8C\xED\x0A\x92\x31\xAC\x55\x94\xC4\x80\x68\x6B\x6B\x8A\xAE\x54\xEA\x8B\xFC\x15\xE0\x03\xBE\x57\x99\x2A\x7E\x86\x8C\x0C\x8D\x8C\x82\xCF\x8B\xF6\x15\xA0\x2F\xB8\x57\x8B\xAF\x82\xC0\x75\x08\x79\xE2\x86\x66\x88\x1C\xEC\x00\x31\xAE\x62\x93\x4D\x81\x87\x88\x59\x8B\x1C\x8D\x21\x89\x64\x15\xDE\xE0\x79\x4D\x9C\x86\x8B\x37\x88\x65\x86\xE8\x86\x5A\x69\x1D\x16\xA8\xF1\x6E\x04\x6D\xB2\x37\x40\x8E\xD6\x88\xEA\x82\x21\x08\x92\x00\x28\x2C\x8D\x31\x95\xC7\x1E\x76\x74\x4A\x3F\xED\x38\x1C\x6D\x38\x00\x5B\x2C\x9A\xD6\x36\x36\x34\x09\x06\xED\x73\x27\x01\xB0\x70\xDF\x18\xE3", +"\xEB\x2A\x59\x94\x90\x40\x2F\x81\x12\x03\x8F\x8A\x62\x71\x77\x16\x9E\x2E\x43\x59\x81\x6E\x65\x43\x8E\x7C\x8A\xEF\x88\xEC\x4F\xC0\x13\xCD\xD1\x03\x10\x1C\xB1\x88\x68\x8F\xC9\x45\x35\x8D\x2F\x8B\x10\x14\xDE\x0C\xA3\xB6\x51\xC7\x86\x8B\x33\x1E\x8D\x78\x2D\x55\x72\x21\x76\x5A\x31\x81\x49\x3C\xC6\x8E\x8D\x88\x1F\x8C\xAC\x81\x38\x8B\x2C\x50\x7C\x31\xA6\xC1\x3E\xC7\x88\x3C\x37\x25\x05\x38\x8D\x30\x3B\xE3\x18\xD7\x29\x65\x63\x8D\xB3\x80\x25\x5B\xCA\x8B\x3B\x8D\x44\x51\x0A\x19\x87\x1D\x0C\x64\x80\x89\x21\xB0\x02\xD1\x6D\x3A\x8D\x21\x28\x2B\x11\xD8\x24\x92\x67\x49\x8A\x7C\x67\x8F\x7F\x8A\x92\x69\xFA\x1D\xCE\x18\x9E\x29\x84\x3D\x15\x29\x24\x69\x8E\x25\x63\x7C\x4B\x3F\x00\x1D\x14\xAB\xF8\x41\xE2\x36\x04\x03\x17\x79\xC5\x8B\x7A\x3B\x02\x80\xD7\x7D\x69\x18\x89\xE3\x20\x14\x01\x01\x84\x9F\x86\x3C\x86\x97\x7D\x29\x19\xF0\xE2\x41\x95\x20\x38\x04\x72\x89\x85\x87\x82\x4B\x81\x00\x97\x00\x31\x32\x8E\x48\x9C\x79\x02\xD4\x87\x69\x68\x97\x05\x66\x8C\x94\x0F\xA6\x15\x85\x55\x87\x75\x8A\x5A\x8E\xFD\x84\xC0\x5E\x9D\x8B\x58\x09\xBC\x2E\x98\x23\x95\xCD\x66\xCE\x6B\xD5\x84\xED\x87\xE1\x86\xB0\x00\xCF\x32\xBC\x0E\x90\xD7\x60\x61\x8A\x14\x8E\x84\x8A\x6A\x84\x58\x19\xB4\xEC\x56\x37\x98\xE4\x76\x5F\x60\x2B\x59\x6D\x77\xB7\x6E\x52\x17\xE1\x3A\x4F\x9F\x30\xCA\x8A\xDF\x84\xDF\x86\x5F\x8B\xCB\x87\x03\x16\xBD\x2F\xAC\x56\x93\xA6\x86\xF5\x45\x9A\x8A\xD7\x8B\x05\x8B\x42\xA4\x44\x06\xBB\xD0\x6B\x59\x34\x97\x89\xD0\x86\xAE\x83\xCF\x8A\xFD\x0D\xA1\x2B\xBF\x37\x9B\xCB\x8A\x32\x87\xE7\x06\xD5\x81\xD3\x53\xE6\x14\xA2\x32\x82\x75\x71\xC0\x87\xA7\x35\x30\x8F\x85\x82\x41\x87\xC7\x15\x89\x33\x89\x57\x8B\xCC\x83\x5A\x8A\xC8\x84\x3C\x8B\xFE\x8B\x7D\x69\x16\x33\xA7\x1C\x8F\x3C\x8D\x4B\x8C\xD0\x87\x2F\x8A\xE5\x8A\x60\x10\xD6\xF1\x7F\x0D\x80\xCB\x8E\x94\x8F\x24\x02\x68\x8D\xA8\x84\x28\x07\xA5\x33\x88\x57\x92\x80\x88\x9A\x89\x98\x8A\xE4\x80\x84\x8C\xA3\xDD\x34\x29\x9A\xF4\x75\x7F\x88\x39\x86\xB6\x74\x99\x82\x17\x7C\xB8\x06\x62\x32\xA4\x3A\x9D\x1D\x81\x60\x8D\xA1\x8A\x93\x89\x22\x8C\xE6\x01\xBC\x2A\xAA\x37\x92\xA8\x8C\xDE\x84\xA2\x8B\xD7\x8A\x40\x71\xB6\x17\xF3\x32\xA3\x65\x8E\xF6\x7F\x8A\x8D\x17\x8C\xC2\x88\xBD\x8C\x9D\x19\xD0\x2E\x9C\xD4\x73\x94\x8C\x01\x89\x32\x5F\x83\x6B\xE0\x8C\xAE\x19\xD3\x33\xBC\x36\x85\x6F\x87\x0B\x8F\xBE\x8A\xBB\x5D\x87\x7C\x8A\x09\x9F\x25\xB9\x19\x94\xBE\x8B\x67\x80\x3C\x81\xF1\x8A\x67\x80\xC2\x19\xFD\x1E\xA5\x3A\x93\xCA\x84\x4F\x8C\x10\x8C\x52\x8B\xEC\x8C\x03\x15\xDB\xDC\x65\x40\x97\xC4\x87\x02\x8D\x3D\x8C\xA5\x89\x18\x87\x60\x14\xD2\x33\x83\x67\x84\xCB\x85\x9C\x8F\xA9\x89\x98\x87\x1A\x83\x4B\x15\xCC\xCA\x34\x60\x80\x00\x0F\x9A\x8C\xC1\x85\x6C\x8C\x67\x8A\xBE\x14\x9E\x21\x80\x53\x92\xA6\x8F\xDA\x78\xFE\x88\x81\x5C\xA5\x32\x0B\x1A\x8D\x34\xB5\x3A\x8F\xD0\x8D\x4D\x89\x42\x8C\x34\x8B\x09\x8D\x2F\x18\x9C\x9C\x7C\x5F\x87\xA0\x31\x9F\x8D\x54\x84\x53\x87\xAA\x8A\x83\x18\xF9\x32\x85\x62\x8C\xCC\x8F\xD8\x70\x0A\x8B\xFB\x7A\x1A\x67\xD6\x12\xB6\x9C\x5C\x60\x95\xCC\x82\x9E\x8E\xB2\x85\x6F\x87\xD9\x8A\x01\x02\xE0\x08\x89\xD1\x67\x68\x3A\xA1\x88\xED\x84\x71\x85\x15\x8C\x1E\x0B\xAD\x30\x91\x38\x81\xD1\x89\x48\x77\xB6\x89\x5E\x8A\x6F\x5B\x7B\x15\xC7\xCA\x19\x68\x95\xD1\x8C\xAE\x87\xB2\x85\x84\x8A\xDA\x8A\x05\x16\x8B\x26\x99\x41\x83\x84\x67\x44\x8A\x40\x8E\x7C\x8C\xE2\x8C\xF4\x19\xA9\x2B\xB6\x67\x98\xAA\x8C\xA2\x8E\x2B\x8F\x3F\x00\xB0\x77\x6D\x18\xA1\x33\x8C\x69\x96\x4E\x81\x89\x8A\x0B\x8F\x24\x8D\xDF\x8A\x5D\x18\x95\x2C\xA5\x51\x4D\x52\x80\x09\x68\x43\x8E\x95\x8C\x13\x8D\x24\x0F\xA8\x34\x80\x3E\x95\xCA\x8E\x02\x8C\xF6\x78\x94\x7F\xCB\x83\x4B\x65\x4B\x34\x83\x68\x94\xCE\x8C\x8B\x8E\x0C\x8F\x71\x8C\x28\x8C\x7F\x07\xDB\x2E\x93\x61\x96\x98\x8C\x8A\x8A\x4C\x8F\x9E\x8D\xF1\x8C\x73\x13\xE7\x34\x9C\x61\x94\xB0\x8C\x83\x8F\x0B\x8D\x86\x36\xD9\x77\x4F\x00\xF9\xD2\x3D\x68\x9F\x47\x85\x7F\x8A\xFD\x8A\xD5\x88\xB3\x89\xDE\x0E\xC4\x34\xAB\x27\x88\x99\x85\xB5\x6C\x0D\x8E\xF5\x75\x12\x8D\x51\x19\xA7\x34\xB7\x65\x9B\xBD\x8A\xA2\x8F\x3E\x8F\x72\x8A\xC2\x87\xCD\x15\xAE\x15\x87\x09\x90\x55\x89\x51\x48\x3C\x8D\x42\x01\x49\x8D\xCC\x0D\xDD\x2F\x89\x56\x8B\xBF\x8B\x58\x8F\x6C\x89\x63\x8B\xB7\x87\x2B\x0F\xCE\x26\xBD\xFA\x67\x21\x7F\xEB\x7F\xE8\x87\x77\x8D\x37\x8D\xA1\x1A\xF1\x34\xA3\x6A\x89", +"\xD1\x8A\x98\x8F\xF8\x85\x97\x8C\x2E\x81\xB4\x18\x86\x1F\x82\x15\x8E\x9B\x8E\x54\x6B\x04\x84\x7C\x8D\xF0\x8C\x87\x1A\xB6\x34\xA4\x67\x83\x86\x86\x9E\x8A\xBD\x8B\x81\x8B\x1C\x84\xA4\xF9\x3B\x10\xAC\x09\x90\xEA\x7B\x8A\x89\x28\x80\xA8\x8D\xBA\x8C\x95\x0F\xC3\x35\xB3\x69\x9B\xD2\x8B\x5A\x88\x3F\x8E\xCA\x87\x85\x85\x08\x16\xC7\x2C\xAD\x4D\x97\xC5\x8C\x88\x79\x4E\x47\xB7\x8C\xC3\x8C\xFB\x0D\x88\x33\xBF\x55\x85\xD6\x80\x07\x8F\x58\x8C\x6E\x7C\x35\x8D\xB2\xC2\x43\x31\xA6\x2C\x9D\x86\x86\x8C\x8B\xB2\x83\xE8\x87\x64\x8C\xB6\x0B\x9F\x2C\x84\xEF\x28\xB3\x81\x94\x89\x58\x7A\x10\x08\x4D\x00\xD2\x18\xD6\xCD\x1B\x02\x0E\x3B\x7E\x93\x37\x76\x39\xCA\x58\x4D\x4E\x7A\xE1\x01\xB4\x16\x9B\x3C\x04\x0C\xB0\x89\x2C\x73\xC3\x8C\x1F\x29\x5D\xE7\x0D\x8E\x0B\xFC\x0B\x1E\x32\xB1\x8C\x81\x89\x7E\x4B\x73\x8C\xA2\x0A\x9F\x32\xBE\x48\x2B\xC7\x86\xEA\x5D\x1D\x8E\xBA\x8D\x30\x8B\xB8\x19\xC7\xA3\x30\xF9\x4B\x48\x01\x25\x2F\x9D\x01\x45\x00\x4D\x4E\x4E\x16\x81\x02\x0B\x6C\x8E\xEF\x3E\x93\x36\xCD\x8A\xAC\x8A\x8B\x8C\x49\x16\xD7\x42\x6B\x6C\x85\x4D\x0D\xB2\x8F\x2A\x2A\x26\x4F\xCD\x07\x5D\x76\x11\x36\x9A\xD8\x33\xD8\x85\xB1\x8F\x8B\x89\xE8\x86\x00\x8A\x17\xFD\x4F\xC7\x3B\x6C\x81\x6A\x0D\xB3\x8F\x65\x8E\x8F\x28\xA0\x8D\xDF\x75\x19\x36\x8D\x67\x3B\xD8\x85\x26\x50\x5E\x81\x26\x00\x8A\x8C\x24\x14\xC8\x2C\xBA\x63\x9A\xAC\x3B\xB4\x8E\xCB\x05\xD3\x8D\xC9\x44\xC5\xAD\x01\x16\x30\x89\x62\xD9\x86\xDD\x4D\x60\x8E\x4C\x71\x0F\x8A\x04\x17\xD0\x54\x26\xB1\x2B\x2D\x87\x42\x89\x99\x10\xA9\x8A\x72\x55\x54\xE6\x63\x80\x22\x43\x9F\xAF\x87\x87\x18\x8F\x89\x0F\x80\x4E\x27\xA5\xA5\x62\x17\x2F\x36\x36\x77\x00\x45\x89\x62\x25\xCC\x8C\x00\x00\x66\x57\x12\x7A\x41\x6E\x90\xD5\x76\x85\x8C\xD4\x4A\xDD\x8C\xAB\x85\x78\x1B\xBE\xE4\x7A\x6D\x96\x87\x2F\x5C\x02\xE1\x8A\xF8\x27\x97\x04\x83\x1B\xA8\x14\x9C\x46\x24\xA4\x89\x4A\x0E\x90\x89\x30\x58\x2D\x8A\x70\x0F\x11\x37\xA1\x83\x66\xB8\x86\xB3\x8C\xD8\x6A\xE1\x8C\x61\x32\x79\x14\x87\x72\x39\x6D\x8B\x53\x0B\xB7\x8A\x29\x02\x0A\x2E\x29\x8A\xA3\x14\x91\x96\x14\x6E\x90\xFA\x06\xB9\x8A\x37\x3C\xB0\x8B\xFC\x7F\x1F\xF6\x27\x1F\xA4\x9F\x7C\x52\x04\xB0\x8B\xEC\x81\x7E\x84\xA3\x8B\xFB\x09\xC3\x30\x90\x5E\x88\xCE\x87\x95\x89\xA0\x89\xD2\x8D\xFC\x8C\xEB\xE8\x3D\x2E\x9C\x65\x83\x43\x72\xA5\x88\x21\x66\xFA\x87\x3B\x80\xB4\x1B\xDB\x1C\x95\x77\x60\xC5\x8E\xA4\x8E\x2C\x8C\x94\x8C\x2E\x6D\xC2\x14\xD4\x2C\x97\xB7\x58\x91\x8C\x5E\x82\xAE\x87\x8E\x88\x13\x7D\x54\xF6\x4B\x4B\x49\x6F\x83\x52\x8E\x69\x81\x10\x8C\x00\x8D\x53\x82\x16\x18\xF0\x14\xB3\x35\x85\x92\x8E\x97\x89\xCD\x7B\x69\x7D\x35\x7B\x0A\x06\x9F\x35\xA7\x04\x15\xDD\x86\xA5\x87\x76\x8F\xD9\x8B\xA3\x8B\x8D\x12\xB7\x2E\x80\x6A\x83\xC1\x82\xA8\x8D\x59\x4B\xF5\x86\x0B\x6D\x58\x03\x80\x33\x9A\x0D\x92\xCC\x88\xE6\x4B\x7B\x8C\xBA\x87\xD8\x84\xBB\x18\xC6\x14\xBE\x69\x95\x97\x8F\x8B\x8A\x59\x88\x82\x36\xBF\x8B\x7F\x18\xEB\x37\x8A\x6F\x8C\xF6\x61\xC0\x8E\xCB\x86\x75\x8C\x01\x8C\xE2\x1B\xEF\x75\x64\x86\x4C\xCD\x83\x63\x6E\x7F\x8C\x7E\x84\x6F\x82\x34\x17\xCD\x30\xBA\x6E\x8F\xC2\x8B\x76\x88\x45\x8A\xEF\x8D\xCD\x75\xB3\x14\xC1\x37\x86\xE5\x56\xBC\x8E\xC7\x7F\x37\x8E\x1F\x8C\xCB\x4D\x16\x1C\xB6\x37\x98\x70\x98\xDD\x8B\xEE\x83\x83\x8F\x19\x8C\xDE\x8D\x41\x02\x88\x13\x91\x54\x98\x0D\x83\x51\x8A\x37\x81\x74\x8B\xC3\x6B\xBF\x1A\x91\xCC\x2C\x6F\x99\x4C\x83\xAD\x84\xF5\x8B\xE0\x8B\xE5\x8B\x69\x0D\xCD\x2F\xBC\x5D\x82\xA7\x82\xE0\x80\xAA\x7E\x03\x88\xE8\x4F\x29\x1C\xED\x37\xAB\x70\x8F\xDF\x89\xBB\x89\x7E\x8D\xD2\x8B\x0E\x8E\x80\x12\xB2\x38\xA2\x5E\x9E\x1E\x82\x7C\x8E\x3F\x8D\x77\x8D\x84\x7B\x19\xB8\x00\x0E\x09\x71\x9C\xE1\x87\xA5\x82\xF0\x88\xFC\x8D\xB4\x8B\x8E\x12\xD0\x38\x91\x61\x90\xE9\x70\x7D\x8B\xB0\x7D\x15\x8F\x43\x89\x7A\xED\x35\x6C\x58\x5F\x81\x2A\x7B\xC5\x8A\x5A\x85\x17\x8E\x1F\x8E\x5F\x1C\xF9\x2E\xA1\x71\x9B\xBB\x80\x29\x89\x4C\x88\xAF\x88\xB5\x74\x3B\x1A\xAB\xD6\x3B\x70\x8E\xE3\x8E\xBE\x8F\xEE\x89\x1C\x8E\xC2\x8B\x7A\x17\xE2\x25\xB5\x71\x93\x2A\x42\x55\x8D\x35\x8D\x7F\x4B\x05\x8E\x43\xDF\x0D\x38\x9F\x60\x8E\xE2\x81\x82\x8B\x7E\x8E\x11\x8C\x58\x45\x23\x1A\xB9\x31\x8A\x70\x9C\xDE\x89\xA6\x84\x79\x8F\x8D\x8D\x27\x8D\x50\x15\xE9\x34\x8D\x6A\x81\x7B\x51\xA3\x88\x0E\x69\xDC\x88\x1D\x8E\x88\x1C\x88\xDB\x52\x65\x92\xD3\x86\x54\x8C", +"\x5C\x8E\x55\x8C\x17\x1D\x10\x18\xBB\x02\xAD\x71\x8F\x78\x8D\xC3\x89\xF9\x8A\x8C\x84\x20\x8E\xEC\x12\xED\x2F\xA6\x4C\x9B\x0F\x86\xA4\x8C\xA8\x80\x92\x8C\x05\x81\x79\x1C\xAB\x39\x85\x3B\x9A\x39\x8E\xCA\x8D\x57\x84\x2C\x8F\x7E\x89\xB2\x1C\xB1\x26\x81\x8E\x65\xD4\x51\x2F\x89\x52\x8F\x9D\x35\x3D\x8E\xAC\x1C\xEF\x38\xBD\x72\x85\x58\x8F\xCB\x8D\xF0\x89\x30\x8F\xB1\x8A\x47\x18\xB9\xC7\x20\x69\x8A\xDF\x87\xC8\x8C\x92\x8C\x97\x86\x45\x8E\x42\x18\x8C\x39\x84\x61\x8E\xE4\x89\x9C\x8C\x00\x8F\x69\x75\x81\x89\x3D\xFE\x07\x01\x87\x73\x81\xE5\x80\x48\x80\x8E\x7F\xF7\x8C\xF3\x86\x99\x1C\xCE\xD3\x54\x7B\x60\x26\x83\x98\x8A\x97\x8C\xCE\x86\x63\x87\xB2\x1A\x94\x2B\xB4\x6A\x96\xAC\x86\xAB\x88\xB3\x88\xC5\x89\x78\x87\xAA\x07\xCF\x35\x95\x73\x9F\xDF\x8F\x62\x80\x9B\x8C\x1C\x8D\x01\x8E\x72\x18\xB0\x38\xA9\x61\x81\xC6\x8C\x76\x7F\x9C\x81\xF0\x83\x9D\x6A\xEE\x1C\xEF\x07\xB1\x6A\x89\xBF\x8E\x7D\x8B\x9E\x8D\x76\x8B\x7A\x8E\xDB\x15\x98\x0E\xAE\x68\x85\xC0\x7C\xE7\x73\xB8\x88\x09\x4B\x84\x8E\xFE\x08\x8B\x3A\x95\x6A\x8D\xE8\x87\xA9\x8C\xFD\x88\x44\x8E\xF1\x8B\xDC\x15\xBF\x26\xA0\x4A\x89\xC1\x71\xF3\x6F\x4E\x77\x26\x8C\x97\x67\x27\x1C\xF7\x39\x58\x74\x89\x4B\x84\xA9\x8A\x01\x8E\xA5\x8D\xB2\x89\x1E\x1D\x99\x35\xA8\x4D\x9C\x82\x4D\x5D\x8B\xA4\x8F\x77\x8A\xA1\x89\xC7\x0A\xD6\x2F\x93\xE6\x6E\xC1\x7A\xC5\x8B\x92\x8C\x3F\x8E\x22\x85\xFE\x1C\x82\x31\xA3\x6B\x85\xD5\x8C\xA5\x8E\x5C\x8F\x24\x89\xFC\x8A\xFC\x19\xDA\xA6\x78\x21\x7F\x56\x8A\xBF\x8F\x78\x82\xB3\x8C\x24\x8E\x3E\x1D\x97\x38\xB9\x1D\x8C\xE1\x85\x73\x8A\x9B\x8F\xEE\x8C\x6E\x8E\x5A\x17\x9B\x10\xA7\xAA\x7D\x40\x88\xAD\x88\xDE\x7D\x2F\x89\xA6\x8E\x77\x05\xF8\x15\x8F\x58\x7D\xE9\x8B\xCF\x8A\xAA\x8D\xBA\x86\xAA\x8E\x1A\x1C\xD6\x3A\x9C\x70\x94\xE3\x81\xC5\x8F\xEA\x84\xBA\x8D\xAE\x8E\xC8\x10\xF8\xDA\x4C\x6B\x96\xC8\x7D\x60\x8D\x0D\x83\x4A\x8F\xB3\x87\x2D\x1D\xAA\x30\xAF\x74\x93\x7A\x82\xA4\x88\xC5\x86\xA6\x8C\x25\x68\xF8\x1A\xBD\xD8\x3A\x6B\x8B\x64\x6E\x61\x8A\xD3\x8B\x31\x8D\x52\x6B\xA4\x0F\x9A\xF8\x5D\x42\x0C\x22\x0F\x90\x8E\x6C\x8E\xEA\x36\x73\x78\xA0\x00\x53\xC2\x42\x51\x89\x08\x03\x0A\x06\xED\x70\xD4\x43\xDB\x39\x44\x08\x8A\xA4\x02\x6D\x84\xBD\x36\x6D\x34\x14\x02\x65\x8F\xBB\x78\x2F\x09\x19\x3B\xB8\x47\x29\xC7\x8C\x28\x2E\xDA\x30\x62\x25\xD5\x3D\x41\x29\x69\x05\xA9\x76\x88\xA0\x44\x71\x72\x70\x06\xC5\x73\xCA\x4E\xD6\x66\x21\x01\x2E\x9D\x68\xFC\x19\x2E\x84\xB6\x8C\x6B\x8E\x53\x72\x23\xD2\x49\x38\x65\xE8\x64\x7A\x0F\x71\x06\xB6\x8E\x63\x8E\x19\x8A\x3C\x0F\x59\x2D\x9B\x5B\x8C\x5E\x8A\x69\x05\xDB\x89\xEC\x15\x6F\x8B\x02\xB2\x61\x2D\x95\xF2\x63\xB7\x81\x16\x46\xDD\x89\x4F\x88\xC0\x8D\xCB\x16\xF9\x00\x75\x5B\x87\xC8\x10\xB5\x84\x11\x8A\xD4\x85\xB9\x68\x9A\x1B\xF4\xF1\x08\x5C\x86\x20\x7A\xC2\x28\x99\x6F\x8A\x76\xB2\x8E\x06\x01\x0D\x3B\xB9\x3B\x8A\x6A\x80\xA7\x8E\xEF\x84\x29\x8E\xAA\x8C\xA6\x1C\xBF\xDC\x69\x65\x8B\x0D\x8B\x96\x8A\x78\x8C\x7A\x70\xD9\x87\xD9\x0D\x93\x06\x94\x70\x8C\x4F\x4C\xA5\x02\xBC\x8C\x7E\x86\x7D\x87\xE0\x1A\xA3\x39\xA2\x6B\x85\xE5\x84\xD4\x8D\x5C\x8C\x2E\x5D\xF5\x8E\x94\x03\xED\x3B\x9B\x65\x88\x0F\x7E\x96\x8C\x2F\x8D\x58\x41\xB8\x8C\x29\xAE\x75\x3B\xA2\x3A\x86\x1F\x71\xAD\x8D\x49\x8F\x25\x8E\xE7\x8D\xE9\x1C\x9A\xC4\x67\xD9\x65\xDF\x87\x24\x8F\x7C\x8E\x62\x86\x25\x89\x6A\x81\x0A\x3C\xBB\x3D\x83\x75\x87\xA5\x8C\x40\x8D\x96\x8C\x01\x8B\xF4\x1A\xAA\x21\x86\x75\x89\x93\x8F\x61\x84\x9C\x88\xF6\x87\xCF\x86\xDA\x0F\xA7\x02\x13\x66\x8A\xE5\x87\x12\x06\xBE\x8F\x9F\x86\x5C\x83\xF0\x1A\xF6\x32\xB2\x6B\x98\xCB\x81\xE2\x89\xB0\x8A\xBD\x8D\x03\x8E\x9F\x19\xA1\xA4\x5A\x78\x99\x71\x83\xF9\x81\xBF\x8E\xA8\x8D\x19\x8F\xA4\x1A\xB5\x3C\x84\x58\x86\xC4\x8B\x09\x69\xC9\x83\x77\x8F\xE7\x33\x2E\x1E\xA5\x0E\x96\x18\x83\xCD\x88\x99\x88\xF2\x83\x6C\x8D\xD3\x8C\x9C\x19\xFF\x3B\x9F\x70\x90\x6D\x71\xC2\x8D\x73\x74\x16\x6A\x83\x8A\x64\xE2\x74\xF1\x69\x74\x90\xE5\x67\xD0\x31\xC9\x8F\x53\x85\x25\x8F\xB0\x19\xA4\x33\x90\x68\x86\xCD\x82\xA1\x8D\x36\x8C\x85\x8D\x2A\x8F\x5B\x1D\xDA\x12\x84\xA4\x7C\x4A\x8F\x53\x8E\x2B\x84\x01\x89\x8C\x4A\xE0\x1D\x83\x02\x1E\x79\x8A\x70\x80\xE6\x8E\x41\x8E\x98\x8F\x0E\x8D\x64\x1E\x9F\x34\xA6\x79\x9F\xEB\x81\x4D\x87\xD1\x80\xED\x8B\x48\x83\x19\x95\x45\x14\x3B\x78\x92\x7C\x8C\xF7\x85\xBC\x8F\x7C\x8D", +"\xF3\x8E\xF5\x19\xFD\x3B\xA7\x72\x83\xE8\x81\x28\x8B\x86\x8D\xF0\x8A\x17\x87\xD2\x01\xD0\xFA\x6F\x67\x87\x2F\x79\x97\x33\xCE\x8F\xAC\x87\x3A\x8F\x1B\x1A\xF7\x3C\x80\x69\x8F\x70\x8D\xD7\x8A\xD7\x84\x9F\x8E\x15\x89\xFA\x19\xBE\x2A\x82\x40\x8D\x6F\x81\x54\x8B\x8D\x8C\x42\x8F\x16\x8F\x0B\x1E\x9D\xD3\x4D\x78\x84\xD3\x81\x8A\x8E\x4C\x8F\x28\x8C\x34\x8D\x2A\x02\xC3\x1C\xBA\x78\x88\xF5\x8B\xE1\x8C\xC1\x8D\x87\x8E\x3E\x8D\x02\x1C\xAE\x38\xBF\x69\x82\xE3\x81\xA8\x8A\xCA\x87\x0A\x76\x7F\x71\xA7\x1E\x89\x02\x16\x7A\x8E\x7A\x84\xEB\x86\x47\x8D\x79\x85\x4D\x8F\x26\x0E\x9D\x3D\x95\x3D\x93\xE9\x82\xA2\x8D\x3E\x82\xA3\x41\x41\x8F\xE3\x1D\xA2\x1E\x86\x7A\x98\xD2\x88\xE8\x8A\x4B\x8E\xA2\x8F\x3A\x8D\x6A\x18\x85\x30\x9D\x72\x9D\xDF\x84\xEB\x8C\xC7\x8D\xA1\x8F\x60\x8D\xE6\x1D\xFB\x3B\xA8\x77\x97\xF6\x84\xE5\x59\x95\x8D\x9B\x4E\x68\x8F\xF7\x1D\xE4\x3B\xA0\x7B\x87\xF4\x82\xEE\x89\xD1\x8E\x90\x8E\xEC\x8C\xA7\x1A\xAD\x34\x9C\x6A\x9D\xF5\x6A\x81\x8E\x13\x06\xF6\x8D\x6E\x8F\x84\x1E\x9C\x3C\x93\x7B\x9E\xF0\x85\xED\x88\xC4\x8F\x66\x8C\x63\x8D\x23\x1E\xD9\x3C\x84\x73\x86\xC1\x88\x28\x78\xDD\x8F\x8B\x8F\xFC\x86\x31\x1E\xE1\x35\x80\x79\x84\xD6\x8F\xEF\x8D\x5E\x8D\xC0\x8F\x5D\x7B\xF8\x12\x81\xB1\x73\x00\x46\xF8\x8A\xE4\x8D\xF1\x83\x65\x8D\xC3\x8C\x99\x19\xF3\x35\x8D\x7C\x82\xF1\x81\xEF\x89\x0D\x88\x5E\x8B\x03\x72\x3E\x18\xFA\x39\xA1\x77\x89\xF5\x80\x9B\x85\x9F\x8D\x06\x8F\x32\x8C\xBA\x1E\x84\x38\x82\x74\x94\xC3\x86\xA7\x8C\x75\x6C\xEC\x71\xA4\x6C\x14\x1F\xDF\x3C\x96\x7C\x8C\xF2\x88\xF1\x8E\xC9\x8E\x66\x8C\xDA\x8C\x51\x1E\xA9\x33\x93\x68\x6B\x8F\x84\xA8\x88\xAA\x8E\xB0\x8E\x92\x8F\xBA\x0D\xE3\x1B\xB4\x57\x95\xC0\x81\x8B\x8F\x02\x8C\x41\x8E\x81\x89\x7A\xFE\x68\x09\x8F\x7B\x98\xF7\x81\xED\x8D\xC7\x8D\xC2\x8E\xFD\x8E\x0B\x1F\xC3\x3A\xAF\x7B\x8B\xD1\x8F\xF0\x88\x1B\x6D\x2D\x8F\xD4\x5B\x16\x1D\x97\x18\x95\x7A\x80\xFA\x84\xD9\x83\xB7\x86\xB4\x8D\x44\x8D\xAF\x1E\x8B\x35\xB4\xB5\x75\xE9\x8B\x9E\x89\x02\x73\xAA\x8D\x9B\x89\x19\xB8\x02\x3D\x8C\x7D\x89\xF7\x82\xED\x8B\xDD\x8C\xB5\x8F\x76\x8F\xD6\x1E\xD3\x3E\xA6\x6A\x9A\xF9\x8A\x35\x8A\xA4\x8D\xD9\x8F\x96\x76\xE0\x15\xBD\x35\x8C\x62\x8E\xC1\x7A\xF6\x8F\xE7\x8D\xAD\x8E\x55\x8F\xB7\x1E\x88\x35\xB0\x62\x99\xC1\x85\xAD\x8D\x12\x8E\x29\x8D\xF1\x5E\xDB\x10\xAC\x13\x0C\x75\x83\xA9\x82\xA9\x77\xA9\x8C\x8C\x73\xAD\x8F\x7F\x1F\xA5\x3E\x80\x75\x87\xF9\x85\x9D\x88\xA0\x8E\x2F\x8D\x95\x8F\xC0\x18\xDA\x3A\x8C\xE7\x49\x13\x86\xF8\x83\xBF\x8B\x57\x8E\xC6\x8F\x2F\xF0\x74\xFD\x4F\x58\x7D\xFB\x83\xF2\x89\xF2\x8D\xD0\x8E\x4B\x8E\xD3\x1A\xFE\x20\x93\x58\x83\xFB\x88\xD4\x8E\xA6\x8D\xBF\x8C\xB9\x8E\xEC\x1A\xC9\xE0\x79\x39\x80\x00\x03\xEC\x8F\xDA\x85\x32\x82\x63\x8F\x1D\x0A\xC8\x3D\xB0\x39\x98\xD4\x8D\xF6\x84\xD9\x8D\x91\x8D\x8F\x8F\x9F\x6C\x06\xFE\x5D\x2B\x9B\xD7\x85\x8C\x8E\xB0\x8E\xBF\x8C\x64\x8C\x96\x05\x83\x05\x88\x4E\x6C\x8B\x7A\xB2\x6A\x29\x8C\x7A\x7D\x40\x3C\x91\x1D\xE7\xF7\x75\x30\x8A\x9B\x0A\xA7\x04\xF6\x46\xC4\x8D\xC9\x8E\x06\x01\x15\x3B\xAE\xF7\x30\x3A\x41\x7A\x74\x74\x8F\xFD\x10\xE9\x41\x01\x5A\x21\x3B\xA0\x56\x50\xEE\x32\x89\x35\xB4\x8C\xDC\x06\xCF\x8E\xDB\x1F\x86\x01\xB7\xEE\x64\x54\x04\x79\x39\xFC\x8D\x7D\x87\xD1\x8E\x07\xFA\x6F\xC2\x66\x6B\x46\xED\x8E\x76\x73\xB5\x8C\xC3\x73\xEE\x85\x96\x0A\x6D\x3F\x9A\xD8\x2F\x49\x06\xFF\x8A\x78\x49\x6B\x8E\xAA\x08\xAF\x1D\x87\x42\x71\x76\x93\xED\x8C\x68\x8C\xD2\x8E\xDE\x31\xEA\x8F\xE0\x1F\xFB\x3F\xA6\x86\x11\x03\x68\xC7\x60\x8A\x19\x6E\x8F\xCA\x4E\x12\xF1\x42\x20\x27\x02\x09\xD8\x80\xF7\x01\x15\x02\xDB\x72\xD5\x42\xB7\x73\x0D\x8D\x4C\x4A\x3A\x0B\x72\x85\x3E\xDA\x33\xA0\x17\xD5\x3D\x46\x24\x69\x05\xA1\x80\x99\xC9\x41\x91\x89\x2F\x50\xDD\x68\x0E\x89\x69\x3E\x4E\x3F\x95\x77\x81\xE3\x73\xDF\x8D\xC8\x3B\xB2\x6A\x38\x6C\x8E\x0E\xA6\x3F\x9D\x7D\x82\xFA\x85\x96\x8E\xD5\x8F\x59\x8C\xCA\x6D\x93\x17\xAD\x2A\x94\x6F\x9E\xB9\x8D\x95\x8F\xFE\x85\xD0\x8B\x15\x54\x2F\x20\x80\x6A\x71\x80\x9E\xF6\x8A\xEF\x8E\xED\x8C\xBF\x8E\xB8\x8F\xFE\x1E\xB8\x3E\x80\x7C\x92\xF2\x81\x4B\x8B\x6B\x8E\x0E\x90\x94\x81\xE7\xCF\x56\x37\xB0\x65\x9D\xE4\x7D\x32\x73\xD6\x18\x0C\x91\x61\x87\x38\x07\xBB\x39\xA3\x21\x8B\xE6\x80\xD8\x80\x90\x8F\x1C\x8E\x41\x8E\x6D\x1D\xB2\x2F\x9C\x5D\x94\x40\x76\x4D\x88\x49\x8A\x60\x8D\x28\x82\x56\x4A", +"\x57\x40\xA6\x3B\x87\x53\x86\xCD\x8B\x79\x8E\xF7\x8C\x0A\x8C\xE0\x1B\xC5\x3E\x91\x70\x97\x58\x52\x19\x80\x7F\x8D\x95\x88\xC8\x4A\x72\x17\x8F\x3F\xB7\xA9\x3E\xED\x8D\x67\x5B\x08\x91\xBE\x8E\x5B\x8F\xFB\x1E\xB8\x3D\x8E\x70\x96\xFC\x87\x9D\x8C\xEA\x8D\xC7\x8F\xD4\x4E\x58\x01\xDA\xBA\x7D\x34\x97\xBE\x6A\x06\x93\xD3\x80\x1B\x91\x9F\x8E\xDD\x1B\xC1\x3A\xA7\x73\x85\xCF\x82\x8B\x8F\x14\x77\x6A\x8D\xE3\x8D\xB0\x67\x41\x40\xA6\xC5\x5E\x03\x9D\xF4\x8F\xDB\x8E\x8F\x8E\x61\x8D\x51\x1F\xFC\x3B\xB2\x7D\x85\xEA\x8C\x04\x91\x7A\x8F\x45\x8D\x1B\x89\xB9\xF6\x58\x3C\x90\x7C\x9A\xF2\x87\x51\x89\xE7\x61\xDB\x6B\x46\x90\x76\x07\xE7\x1D\xA6\x75\x80\xE0\x84\xF9\x8D\x4F\x8D\xCA\x8F\x80\x8E\x58\x1D\xB1\x38\xAD\x4A\x8E\xF4\x8B\xE6\x8F\x8C\x8E\xA8\x89\x34\x8E\xB2\x97\x0F\xAC\x4C\x2B\x1A\x04\x9B\x58\x5C\x13\x90\xDB\x8E\xA7\x8F\x17\x1F\xF1\x35\x99\x7C\x94\xF1\x8B\xF1\x8E\xC6\x8D\xD5\x8E\x63\x7C\x21\x15\xC5\x07\xA0\x75\x81\x57\x85\x52\x8B\xB1\x4C\x1F\x90\x38\x5D\xC6\x20\x87\x3E\xB8\x77\x8F\xFA\x8F\xE3\x8B\x19\x91\x90\x8F\x66\x90\x43\x1E\xB7\x3C\xBF\x5E\x9B\x13\x70\x1D\x80\xD2\x8D\xAC\x88\x49\x8F\x19\x95\x33\x0A\x53\x86\x30\x05\x96\xA6\x82\x19\x6C\x39\x8E\x4A\x85\xE6\x1C\xF0\x40\xA8\x73\x87\xD0\x8C\x57\x64\x04\x8A\xA8\x8F\xCE\x8F\x40\x15\xA9\x20\xB3\x4A\x85\x5E\x8C\x08\x92\x08\x90\x16\x91\x30\x84\x5A\x20\xBB\x15\x9C\x81\x8C\x6D\x8F\x7D\x8C\xAE\x8B\x33\x8E\xBB\x8A\xB1\x0D\xF7\x38\x99\xB0\x6F\xD8\x74\x0C\x92\xA9\x59\x36\x91\x8A\x8F\x80\x0E\xC9\x41\xB2\x78\x9E\x06\x9C\xF0\x8A\x09\x92\xC3\x8F\x43\x90\x55\xC0\x16\x34\xA2\x41\x6C\x69\x8D\x10\x95\x0F\x93\x3F\x91\x5C\x85\x01\x21\x83\x16\x83\x84\x8D\xBD\x85\x10\x97\xF5\x8B\x41\x91\xC3\x8B\xE8\x9D\x11\x39\x99\x35\x5D\x08\x98\x0D\x97\x23\x91\xC0\x85\x90\x90\x7E\x0D\xA3\x42\xBF\x70\x85\x09\x9C\x7C\x8F\x24\x91\xEC\x8A\x80\x89\x9A\x15\x88\x2C\x86\x60\x9D\x5B\x4C\x12\x91\x38\x63\x43\x90\x99\x8F\x11\x21\xB4\x3E\x8A\x83\x96\xF9\x8A\xF1\x8E\x22\x90\xC7\x8F\x96\x83\x78\xAC\x2F\x0E\xB0\x27\x91\x69\x1C\x0E\x95\xFB\x83\x7D\x84\x15\x8E\x53\x1D\xCC\x38\xAD\x70\x8A\xEB\x8F\xC2\x89\x17\x90\xA3\x8E\x72\x89\xFB\x04\xE6\x25\x9B\x60\x8C\x08\x9B\x00\x96\x1F\x93\x1A\x90\x77\x90\x6D\x20\x8C\x38\xB5\x82\x99\xF5\x84\x15\x93\xD7\x8C\x5B\x8F\x31\x8E\xA1\xF7\x0A\xD9\x4B\xBD\x73\xFE\x8B\x07\x95\x29\x90\x95\x84\xEF\x83\x5C\x1C\xFD\x38\x9E\x71\x8D\xE2\x80\xC6\x8A\x7E\x8C\xAF\x8E\xFA\x8D\xD1\x1C\x90\x21\x13\x73\x98\x41\x4D\x13\x91\xAD\x63\x4F\x90\x3A\x8F\x33\x1F\xE1\x3C\x8D\x79\x92\xCD\x87\xF3\x88\xCA\x8F\x12\x90\xBA\x8F\x98\x0E\xD7\x3E\x99\x8E\x7D\x10\x8A\x7D\x64\x2B\x93\x2B\x90\xAF\x90\x8E\x20\xE0\x42\x90\x82\x95\xE4\x8F\x06\x97\x06\x8D\x7D\x8A\xC2\x8F\x95\x20\xA1\x76\x6B\x73\x98\xD3\x8C\x28\x7D\x2F\x91\xC0\x63\xBF\x90\x97\x1E\x81\x43\xB6\x79\x83\x0C\x93\xE6\x8F\xC9\x8D\x99\x8F\x9C\x8F\xA0\x10\xBB\x3E\x95\x4C\x99\xE7\x80\x04\x95\x2B\x93\x26\x90\x97\x90\x7C\x0D\xB0\x42\xAA\x36\x92\x09\x9F\xC7\x8D\x99\x8D\x20\x8E\x21\x8E\x83\x1C\xD3\x25\x8E\x3B\x9F\x98\x82\x80\x7B\xF6\x8F\x35\x90\x9F\x90\xB0\x21\xA8\x1B\xB2\x86\x90\x78\x81\xCF\x8F\xBA\x8A\x43\x8E\xF0\x8B\x1F\x1D\xEE\x2F\xB3\x08\x93\xE8\x8F\xB0\x81\xEB\x8D\x98\x84\x2B\x6C\x6E\x21\xD0\x15\x95\x29\x91\x0B\x9B\xC4\x8E\x8F\x8C\x5D\x90\x39\x8E\x76\x21\xE7\x42\xBD\x7A\x88\x29\x83\x24\x82\xA5\x81\xD6\x87\x94\x67\x7A\x18\xB6\x26\xBA\x74\x9F\x07\x01\xAB\x82\xC6\x87\x63\x91\xD7\x90\x5F\x21\xFA\xBE\x6F\x83\x8F\x46\x8E\xFB\x76\x32\x90\xD1\x8E\xCC\x90\x46\x1F\x9A\x3F\xBB\x3E\x76\xA6\x5C\xAD\x85\x58\x84\x4E\x8F\xF0\x8A\xC8\x0A\xE9\x41\x8F\x9F\x3F\x0D\x9E\x17\x91\x38\x92\xC3\x87\xE1\x90\xAD\x1C\xC5\x43\x8A\x5F\x94\x09\x91\xC4\x8E\x26\x92\xF3\x8A\xA0\x87\x72\x05\xDF\x43\xAF\x42\x99\xC4\x8E\x5E\x8F\x86\x8C\x27\x8D\x07\x6B\xEA\x20\xD0\x43\x90\x86\x91\x05\x9F\x08\x93\x16\x92\xC9\x8E\xB4\x8E\x28\x1F\xE5\x42\xAA\x7C\x96\x0A\x9C\xF2\x8E\x06\x86\x05\x88\x6B\x7F\xDD\x01\xEC\x14\x1F\x7E\x9D\xAF\x8A\x1F\x92\x30\x6D\x74\x91\x16\x85\xD1\x0A\xC9\x39\xB2\x85\x90\xE3\x87\x1D\x96\x0B\x91\x76\x90\x30\x90\x68\x21\xF2\x43\xB9\xD3\x36\xDE\x56\x49\x56\x16\x8C\x54\x7F\xBA\x8E\xE0\x11\x9E\x43\x9B\x20\x60\x0D\x94\xEC\x88\xD3\x8C\xEE\x8E\x8E\x85\xBA\x1F\xDE\x29\xBC\x7E\x98\x9A\x8F\xE9\x8B\x1C\x69\x60\x8E\x72\x0D\x25\x0B\x84\x3B\x8A\x63", +"\x86\xFE\x8D\x37\x8A\x65\x86\xBE\x74\x96\x85\xFC\xEA\x2D\x40\x8F\xDF\x3C\xD0\x67\x22\x95\xE1\x85\x8A\x90\x00\x91\xCA\x1C\x82\x44\xAF\x72\x84\x10\x91\xCB\x89\x39\x91\xA7\x4A\x00\x8F\x74\x12\xEB\x02\x97\x35\x97\xA5\x85\x2D\x66\x90\x67\x91\x36\x2A\x91\x13\x22\xED\x41\xAA\x87\x81\x0B\x99\xC8\x8B\x2C\x93\x20\x91\x5B\x90\x97\x1F\x9C\x44\x9E\x89\x60\x13\x96\xC9\x78\xBA\x81\x5B\x8C\x81\x6E\xDA\x19\xFE\xD0\x54\x81\x86\xA9\x63\xAB\x6D\x4A\x92\xCD\x87\x2C\x90\xEF\x1C\xBC\x39\x9A\x89\x9E\xE5\x8C\x25\x90\x98\x8E\x97\x90\x61\x8E\x6E\xDD\x44\xD6\x46\x49\x86\x5A\x77\x4D\x8F\xAB\x3D\xFA\x8C\xBE\x90\x7D\x22\xE9\x44\x8E\x85\x92\x05\x90\x15\x97\xAC\x8E\x54\x91\xAA\x8E\x75\x21\xCF\x38\x9A\x87\x98\x0B\x98\x96\x7D\xC4\x8F\xFD\x8D\x84\x84\xF9\x1B\xA0\x3F\xA9\x0C\x67\xA7\x8D\x19\x91\x52\x90\x7A\x91\xC8\x90\x6B\x22\x93\x43\x97\x73\x8E\x13\x9B\xC8\x89\x53\x91\x23\x8F\xBB\x90\x8F\x1C\x97\xD8\x49\x82\x8D\xFC\x68\x26\x97\x54\x90\x85\x90\xC9\x90\x16\x22\x93\x3F\x98\x88\x95\xFC\x80\x27\x95\x10\x93\xDC\x8F\xD4\x90\xAD\x15\xC7\xC4\x6B\x49\x8F\x1B\x55\x2B\x95\x18\x92\x7F\x91\x2B\x91\x81\x22\xDB\x40\x83\x8A\x8C\xE6\x85\x28\x96\x99\x8F\xA1\x91\xB5\x86\xA6\x20\xB9\x36\xBF\x22\x9A\xCD\x85\x50\x88\xBB\x87\x60\x8A\xD8\x80\x19\xB8\x11\x44\xBD\x7F\x8D\x09\x99\x1E\x96\x66\x73\x7A\x91\xEA\x84\xED\x21\xD9\x30\x97\x86\x9B\xC2\x85\xF8\x8A\x14\x68\x7A\x8D\x41\x89\x01\x10\xF8\x41\xAE\x79\x83\x0F\x98\x7A\x89\x13\x92\xA9\x90\x63\x91\xDD\x22\xA7\xD4\x6A\x8A\x8E\x03\x92\x09\x92\x1E\x90\x25\x91\xF8\x90\x9D\x22\xC3\x03\x94\x14\x1F\xF3\x84\x29\x8F\x88\x8E\x79\x90\x20\x6E\x7E\x22\xE5\x1E\xA3\x35\x89\x16\x92\x10\x93\x59\x91\x17\x90\xDB\x90\x5F\x20\xB8\x43\xA1\x81\x81\x4D\x80\x7C\x8C\x8A\x8E\x39\x91\xD2\x8B\xD3\x01\xA5\x44\xBD\xA5\x3B\x16\x90\x1C\x91\x5E\x90\x0D\x76\x36\x91\xA2\x1C\xDD\x41\x84\x85\x8C\x06\x96\x14\x96\x19\x90\x46\x90\x6B\x84\xDA\x01\xF7\x41\xBA\x57\x99\x07\x90\xE3\x82\x05\x88\x5B\x91\x83\x36\x14\x23\xFD\x43\x96\x8C\x82\x6E\x78\x31\x95\x9C\x8F\x9A\x85\x49\x90\xD4\x1A\x99\x43\xAE\x23\x92\xF5\x8A\xF5\x8D\x67\x6D\xC0\x91\xA6\x87\xB6\x1F\xC2\x13\xBF\x88\x84\x71\x81\x24\x96\x43\x8E\xB2\x8F\x68\x88\x45\x22\xB2\x46\x45\x72\x92\xFB\x65\x2C\x96\x21\x93\xB1\x91\xE9\x90\x7C\x1C\xD5\x43\xB3\x85\x93\x0A\x9E\x2A\x93\x9B\x8C\xAC\x91\x6E\x8E\xF4\x01\xFC\x0A\x4B\x85\x89\xD2\x67\x33\x93\xF1\x80\x44\x90\x18\x8F\x12\x21\x8A\x3E\x94\x84\x92\xFA\x80\x0E\x90\xDE\x8C\x62\x90\xAC\x71\x8A\x21\xFA\xFF\x3B\x84\x80\x51\x45\x34\x96\x23\x93\xCA\x91\x6E\x7E\xF3\x22\xE2\x42\xBB\x8A\x96\x05\x9A\x21\x90\x17\x93\xD3\x91\xA6\x3F\xE6\x1E\xC3\x41\xAF\x8B\x86\x1A\x97\x36\x96\xAB\x7D\xAE\x91\x48\x90\xAC\x22\xD9\x39\x8D\x8D\x97\xEA\x8F\x36\x92\x17\x93\x5D\x8A\xE6\x90\xE0\x01\xC4\x0E\x86\x80\x88\x19\x95\x35\x96\xCF\x87\xD5\x90\x84\x8F\x59\x23\xD0\x3E\x9B\x8D\x82\x05\x9D\x35\x96\x10\x93\xD7\x90\x89\x81\xAD\x0E\x91\x17\x84\x8E\x92\x14\x9F\x16\x97\x29\x92\x12\x8F\xA8\x90\xD6\x21\xCC\x46\x98\x87\x9A\x14\x90\x23\x93\x3B\x92\x63\x8B\x88\x8F\x83\xDB\x53\x46\x82\x04\x09\x19\x9F\x19\x97\x68\x90\x5C\x91\xA4\x91\x98\x23\xCB\x46\x98\x8A\x9B\x1C\x9F\x2A\x93\x53\x91\xAC\x91\xBF\x91\xF3\x1E\x88\x1E\xA0\x73\x9E\x10\x8E\x18\x90\x60\x90\xE5\x90\xE9\x90\xA7\x23\xAA\x44\x8A\x8D\x8C\x11\x9A\x39\x96\x45\x90\xE7\x90\x85\x91\x31\x22\xDE\x14\xB7\x69\x80\x53\x86\x5C\x71\x2F\x34\xE9\x91\x1D\x91\xA6\x23\x96\x47\x94\x87\x89\x1D\x9C\x3B\x93\x75\x92\xEF\x91\xD6\x91\x9D\x23\x9C\x45\x88\x5E\x83\xD4\x8C\x1A\x92\x62\x51\xD9\x90\x6E\x91\xA8\x22\xDE\x45\xAD\x8C\x90\x07\x9F\x32\x96\x5E\x91\xCC\x90\x7C\x91\xBA\x21\x91\x79\x79\x56\x95\x02\x93\x3A\x95\x70\x90\xC8\x87\x4E\x90\x45\x20\x9F\x41\xA1\x7B\x81\x05\x93\xEE\x8B\x14\x92\x7F\x8F\xC7\x91\x1E\x1F\x80\x47\x94\x4A\x8E\x0E\x9E\x90\x86\x76\x92\xAD\x90\x35\x91\xDA\x23\xE9\x46\xAD\x89\x8B\x1B\x94\x16\x93\x6F\x93\x5A\x8F\xE8\x91\xAF\x23\x88\x44\xA8\x1F\x80\x11\x90\xF3\x68\xD5\x06\xF8\x55\x15\x7C\x27\x1D\x8E\xB2\x52\x8C\x86\x1E\x96\x3E\x90\xDF\x87\x31\x90\x4F\x90\xDC\x20\xA0\x41\x8B\x8E\x8D\x1F\x9D\x38\x97\x57\x93\x99\x8E\xFB\x65\x88\x18\x86\x1F\xA4\x42\x99\x0F\x99\x2D\x91\x62\x6D\x03\x93\xC8\x87\xE8\x23\x80\x41\x86\x81\x82\x04\x9D\x2A\x94\x75\x92\xD3\x90\xD7\x91\x50\x23\xF1\x0A\xAB\x38\x84\x20\x9A\xD4", +"\x8F\xA8\x75\x08\x85\x66\x8D\x0B\x24\xB6\x46\xB7\x8E\x88\x11\x98\x34\x92\x77\x90\xF3\x90\xDA\x90\x2D\x22\x88\x46\xAF\x88\x80\x1E\x9E\x39\x90\x57\x8F\x5B\x8E\xE1\x8B\xA9\x18\x94\x25\x9D\x6B\x9F\x17\x94\x35\x93\x86\x92\x95\x91\x1A\x92\x58\x22\xAB\x44\xB8\x90\x9D\x1D\x9A\x43\x97\x77\x92\x81\x91\x21\x8E\x4C\x13\xAD\x21\xBA\x6A\x80\x7B\x85\x85\x5B\xAE\x8F\x25\x64\x1C\x91\xC5\xFD\x73\x46\xA6\x8D\x99\x1E\x92\x2F\x97\x6E\x90\x65\x91\x7A\x91\xEE\x21\xF1\x40\xB0\x87\x91\xE0\x81\x08\x8E\x1E\x0D\x92\x91\x89\x47\xDF\xD2\x1B\x2C\xBF\x4D\x89\xEC\x8D\x00\x76\x1C\x7B\x04\x90\x23\x8B\xDF\xD2\x25\x05\xB9\x85\x50\xF3\x56\xFE\x05\x5F\x2A\xF9\x8E\xEB\x88\x16\x20\xEE\xFB\x2A\x16\x5D\xDC\x8B\xD6\x3A\xCC\x8A\xD4\x56\x3A\x92\x38\x0B\x30\xA5\x09\x18\x1C\x5F\x0B\x6B\x3F\x25\x06\x06\x91\x5D\x3B\x1C\x20\xF2\xFD\x1E\x80\x8E\x3B\x73\x02\x94\x70\x8F\xC9\x8C\x39\x92\x7F\xA8\x00\x49\x92\xCF\x02\x24\x9E\x5F\x1C\x51\x2B\x4B\x05\x46\x92\xD2\xA3\x25\x40\xBF\xA1\x51\x00\x96\x36\x2B\x2A\x73\x37\x89\x7D\x88\x94\x1D\xFE\xCD\x45\x45\x43\x8F\x88\xAB\x6D\x01\x93\x8C\x5F\xCD\x3F\xBD\xE7\x5B\xDF\x67\x2C\x01\xF2\x14\x7A\x75\xDB\x70\xDC\x07\x55\x00\x6E\xE7\x47\x14\x77\xCE\x2E\x5F\x49\x82\x84\x8A\x01\xA7\x32\xFE\x33\xBF\x16\x1F\xFB\x0E\x26\x48\x37\x30\x37\x39\x1C\x01\x58\x70\x5F\x92\x4D\xCF\x26\x49\xBD\xFB\x1A\x63\x6A\x3A\x60\xEE\x05\x31\x00\xB7\x73\xDD\x00\x61\xC2\x49\x93\x8D\x7A\x6F\x6A\x8C\xA0\x05\xCA\x36\x42\x8B\x2E\xA4\x0F\x43\x56\x9B\x21\x06\x0E\x76\x71\x1B\x01\x58\x70\x6B\x92\xCC\x24\xAD\xA6\x49\xD0\x2A\x5C\x73\xD7\x7D\x9D\x7E\xB5\x32\x60\x00\x6E\xE7\x58\x01\x21\x85\x62\x27\x99\x4D\x95\x1D\x80\xAC\x8B\x99\x39\x5A\x00\xC2\x70\x33\x49\x7E\x39\x1E\x76\x73\x1A\x01\x58\x70\x77\x92\xE5\x24\xAC\x0F\x48\xC4\x04\x1F\x50\xF7\x00\x17\x02\xDB\x72\x69\x00\x61\xE1\x78\x49\xB1\x93\x8C\x58\x43\x4F\x97\xA2\x48\xDC\x07\x5A\x00\x6E\xE7\x51\x01\x21\x85\x62\x28\x9B\x4F\x92\x2E\x8F\xD5\x36\x74\x92\xC5\x24\xFE\xBF\x4D\x4B\x70\x06\x01\x16\x74\xA1\x91\x30\x93\x66\x88\x40\x52\x1D\x60\x34\x93\x8A\x28\x90\x0C\x87\x19\x01\x58\x70\x8B\x92\x0F\x25\x85\x37\xB6\x17\x7F\x61\x68\x42\x50\xEE\x06\x2C\x00\xB7\x73\xCE\x00\x61\xC2\x61\x94\x85\x28\x94\x07\x87\xA0\x93\x33\x93\x8E\x92\x76\x44\x6E\xCE\x4D\x03\x01\x0B\x7B\x52\x91\xA3\x91\x6E\x89\xC5\x02\x0A\x14\xFE\x49\xA7\x04\x0C\x05\x0E\x76\x75\x80\x19\xBA\x80\x9B\x92\x6A\xEE\x16\x31\xAF\x2C\x45\xB3\x26\x6D\x31\x17\x02\xDB\x73\x0E\x87\xB7\x73\x07\x1E\xB3\x1A\x95\x34\x02\x4C\x90\xD4\x01\x37\x68\xB8\x07\xC3\x00\x6E\xCE\x7B\x28\x8A\x3C\x7F\x4F\x86\xB8\x4B\x1A\x52\x8B\x80\xD6\x66\x3F\x01\x2E\x9D\x79\x3A\x87\x3B\x3F\x0E\x84\x77\x82\x4E\x03\x45\x25\x9A\x17\xA0\x26\x2B\x1E\x3E\x87\x82\x5F\x6A\x1F\x24\xB7\x73\x5D\x03\xB7\xE7\x3C\x15\x8D\x2A\x64\x54\x96\x94\x70\x31\x93\xA8\x5F\x4B\xD2\x27\x02\x14\x93\x8E\xEF\x3E\xDE\x7F\x76\x39\xB7\x7E\xD8\x83\x9C\x06\x4D\x49\xBD\x20\x11\xB5\x8C\xE2\x75\xA7\x7F\x2E\x7E\x6B\x33\xB7\x00\x6E\xCE\x4B\xDC\x77\x9D\x3F\x88\x78\xCA\x83\xB0\x01\xAC\x92\xD3\x0C\x15\x2A\xB0\x3D\x1E\x05\x0E\x76\x76\xC5\x77\xED\x38\x26\x78\x6D\xC7\x65\x4A\xBB\x2B\x9F\x72\x05\x25\x45\xAB\x90\xA2\x69\x93\x00\x56\x22\x2B\xF7\x3F\xAE\x6D\xEE\x3A\x75\x72\xDE\x3E\xD4\x8C\x86\x37\x54\x1B\xC4\x02\xAB\x93\x89\x08\x0D\x0B\x06\xED\x70\x36\x75\xDB\x39\xE4\xEA\x09\x4B\x98\x95\x86\x2B\x9B\xF9\x3B\xDF\x71\x42\x01\x56\x00\xED\x24\xF0\xFB\x07\x91\x6A\x2C\x6A\x58\x97\x2E\x6C\xC0\x2E\x9A\x11\xDF\x24\xEE\xCE\x5D\x75\x77\x9D\x35\xC4\x7C\xB5\x91\x5C\x92\x6D\x92\x74\x25\xF5\xBA\x56\x9B\x37\x9B\x62\xD1\x5A\x46\x6D\xCC\x33\xD7\x6D\x2E\x25\xCE\x01\x86\x95\x94\x7D\x49\x4A\x97\xE6\x7C\x25\x07\x21\x1A\xFB\x19\x14\x7C\x0B\xD2\x0D\x25\x98\x70\x77\x24\x00\x6F\x93\x66\x69\xAA\xD6\x3F\x4B\xA6\x65\x61\x2E\x91\x14\x83\xB8\x92\xF4\x41\xE2\x92\xF2\xFA\x35\x68\x31\xF7\x71\x3F\x7E\x4A\x96\xB9\x90\xDC\x39\x06\x6A\xD2\x25\xF8\xA9\x54\x97\x99\x66\x73\x4C\x90\x95\x91\x8D\x4C\x01\x59\xEA\xD3\x4C\x4B\x80\x6D\x76\x36\x3E\x0A\x06\xED\x71\x4A\x67\xDB\x39\x9B\xCF\x73\x0E\xBF\x95\x84\x2D\x98\xD8\x88\x60\x8E\xB5\x32\x5A\x00\x6E\xE7\x14\x93\x77\xCE\x21\x60\x67\x5F\x85\xB5\x90\x09\x40\x37\x0D\x13\x25\x89\x02\x33\x02\x0E\x3B\x7C\x63\x67\x76\x3A\x26\x64\xB2\x92\xA3\x25\xD4\xE8\x00\x98\x92\x29\x9C\xC6\x3A\xA2\x5F\xD2", +"\x61\xDB\x39\xC1\xC5\x08\x4C\xB6\x92\x94\x2F\x98\xA7\x70\xEE\x06\x66\x1D\x66\x69\x4D\xBF\x37\xE7\x3D\x07\x72\x2F\x93\x1C\x06\xF2\x40\xD8\x11\x00\x93\xC4\xBF\x42\x20\x2F\xE4\x57\x9D\x33\xB8\x5C\xC3\x90\x55\x68\x53\x72\x2B\x58\x20\x4C\x83\x04\x04\xAE\x22\xD1\x5D\xB0\x5B\xED\x39\x1C\x5C\x26\x26\xA0\x02\x1A\x92\x9A\x6B\x7E\x51\x91\xE3\x88\x7C\x3F\x57\x5A\x31\x26\xEE\x00\x32\x95\x89\x69\x07\x52\x91\xA1\x93\x71\x6E\xB7\x73\x06\xAD\x37\xE7\x08\xBE\x5E\x3A\x83\x5F\x93\xB1\x93\x59\x93\xCA\x82\x9F\x0F\xBE\x14\x56\x9B\x34\x03\x7B\xBA\x39\x41\x21\x50\x93\xCA\x92\x54\x83\x00\x4B\x8C\x96\x8A\x8F\x5A\x07\x77\x24\x03\x31\x92\x6D\x78\xF0\x7D\x78\x48\x52\x98\x83\x16\x0B\x63\x93\x9B\x92\x28\x70\xED\x72\x10\x2B\x56\xCD\x17\x5E\x32\xE8\x52\xFD\x37\x76\x3B\xF2\x4E\xDB\x92\x13\x26\xC6\x4C\x9B\xFE\x20\xEA\x46\x6D\x35\xB3\x92\x7B\x3F\xEF\x48\xB7\x73\x4B\x29\x7D\x97\x89\x30\x95\x0A\x81\xB0\x91\x25\x54\xD3\x92\xC5\x55\x6E\xCE\x4C\xC7\x37\x9D\x38\xD2\x6A\xB4\x91\x9A\x92\x62\x3A\xD0\x22\x2A\x4C\x82\x04\x0F\x05\x04\x08\x80\xBE\x3E\x22\x90\x3F\x93\xC3\x02\x7A\xC2\x72\xCF\x27\x09\x00\x50\x94\xAD\x90\x7C\x3F\xCC\x3C\x57\x25\xD4\x08\x1D\x99\x94\x2B\x9E\xBE\x5B\x21\x5B\xCB\x8A\xEE\x62\x25\x06\x98\x49\xB2\xDA\x42\xED\x87\x6F\x87\x4F\x90\x40\x90\x82\x91\x22\x21\x86\x46\x84\x84\x87\x0E\x96\x10\x97\x59\x92\x6B\x77\x29\x8F\xCC\xED\x68\x3C\x8E\xB7\x6C\xCB\x8F\xDE\x8F\xE7\x8A\x97\x8D\x1F\x90\x44\x24\xA9\x91\x2B\xE8\x49\xC9\x3C\x69\x93\x1F\x86\xC0\x90\xE5\x86\x0A\x1D\xB9\x1E\x8C\x74\x93\xD5\x8D\xD1\x8D\x56\x8E\x4C\x8E\x73\x4E\xA8\x26\xE2\x2D\xB2\x3F\x94\x16\x9F\xDC\x71\xAE\x84\xF0\x87\x29\x90\xDE\x08\xB6\xDD\x5A\x9A\x8C\xFE\x55\x6B\x95\x29\x86\xD5\x90\xA0\x90\x58\x23\xC2\x42\x93\x84\x9B\x18\x9F\x0D\x95\x63\x91\x38\x91\x67\x90\x45\xDA\x13\x3C\x9D\x5D\x86\xDF\x81\x68\x78\x7D\x8D\x36\x8A\xB2\x75\xCB\x26\xDD\x80\x4D\x9B\x86\x4B\x8E\x52\x69\x67\x93\x78\x85\x9D\x91\x4C\x0E\xFB\x3A\xAB\x3D\x83\x12\x90\x4E\x8E\xF7\x8E\xDF\x80\xE3\x92\xB1\xBC\x59\xF1\x51\x66\x80\x6D\x80\x22\x73\xF6\x8D\xB8\x93\xF2\x61\xE3\x26\xAD\x13\xA5\x23\x99\x6D\x83\x03\x90\xF5\x8C\xD8\x8F\x1B\x90\x62\x1F\xAF\x20\x9B\xF0\x77\x70\x72\x3A\x94\x4E\x27\xAC\x93\xA5\x87\x90\x0F\xFA\x1E\x84\x81\x82\x21\x9A\x3E\x94\xDD\x8C\xFB\x90\x77\x8F\x15\x24\xA4\x41\xB0\x8F\x8F\x59\x72\x2C\x93\xC5\x75\x84\x91\x7B\x93\x83\xC7\x79\x4D\x91\x27\x9A\x7D\x7D\x8C\x84\xF7\x74\x7B\x91\x4A\x85\x61\x24\xF3\x41\x89\x4B\x99\x01\x93\xBD\x89\x15\x92\xB5\x91\x83\x8A\xAC\x20\x96\x25\xA1\x25\x91\x95\x17\x70\x97\xFD\x8D\xA7\x93\x5B\x93\x37\x0F\xB9\x4D\xB0\x73\x9B\x35\x92\xCF\x8D\xD7\x90\x3D\x8F\x5F\x93\xF6\x1C\xA7\xB5\x7F\x3F\x90\xA3\x69\x2E\x93\x64\x93\xBA\x91\x04\x92\x63\xEE\x10\x44\x8F\x9F\x38\x38\x90\xF0\x62\xE3\x91\x81\x84\xE9\x84\x07\x0A\xD4\x13\x89\x28\x8C\xF5\x8D\xBC\x8E\x06\x93\xF3\x8C\x71\x90\xF8\x14\xFE\x3C\x92\x83\x82\x15\x91\xD6\x8E\x5F\x90\x71\x86\x2E\x05\x44\x27\xF4\xAC\x46\x9D\x90\x54\x88\x7C\x86\x8F\x80\x7C\x74\x97\x91\xE4\x0D\xFF\x4D\x8F\x9D\x98\x36\x95\xF3\x43\x8A\x8E\xA9\x82\xE9\x8B\xC7\x10\xEC\x33\xA8\x71\x87\xD2\x81\xDE\x57\xC1\x68\xF6\x49\xAC\x93\xFF\xDA\x5B\x4E\xA7\x2B\x88\x3A\x99\xAE\x82\xE9\x93\xBA\x84\xA6\x93\x0F\x1E\xCE\x4E\x91\x78\x8A\xCE\x8B\xE2\x83\x3F\x8E\xEB\x8F\xFE\x8C\x6B\x27\xB6\x39\xA1\x00\x66\x19\x95\xD6\x40\xEB\x91\xCB\x92\x1B\x87\x1F\x0F\x8E\x48\x9A\x83\x8A\xF7\x8D\x70\x97\xED\x8F\xC3\x93\xB8\x8F\x11\x27\xEF\x47\x80\x8B\x96\x66\x34\x33\x93\x25\x92\xA4\x19\xC3\x93\x89\x07\xF6\x1B\xA7\x8F\x8F\x20\x99\x3E\x91\x82\x93\xFA\x91\x09\x92\x10\x27\xD6\x4D\x9E\x8D\x93\x3C\x95\xA1\x8F\xD7\x8C\xB8\x76\x34\x90\x06\x27\x88\x3D\x72\x9D\x97\x6D\x8C\xF5\x8A\x5D\x85\x65\x86\x07\x8F\xA9\x1F\xF4\x34\xBB\x54\x93\x77\x7A\x12\x95\x7E\x91\x0A\x90\xD5\x93\xB1\x0E\xCF\x4D\x80\x86\x81\x0A\x92\x18\x95\xE6\x8C\x61\x91\xA2\x90\x86\x21\x97\x42\x93\x9C\x97\xD7\x8B\xC9\x8B\x65\x4F\xD8\x90\x00\x86\x2B\x6B\x70\x4E\xA8\x70\x6B\x3D\x9F\xDD\x85\xF5\x92\xDD\x93\xD7\x93\x78\x27\xB1\x4F\xA9\x77\x85\xF7\x8A\xA3\x89\xE7\x7A\xAC\x92\xDC\x93\x79\x0F\xA1\x1D\xB2\x80\x8E\x3D\x9E\xF5\x88\xF6\x92\xD8\x93\xBD\x93\xDE\x1C\x9D\x35\x82\xF8\x7B\x0A\x96\x6F\x90\xF3\x92\xC7\x86\xCD\x93\x8A\x27\x87\x47\x9B\x83\x89\x1C\x9A\x31\x97\xF7\x90\xC7\x91\xE0\x93\x47", +"\x21\xA4\x4F\x90\x8E\x85\xE6\x8C\x27\x91\x21\x02\xF2\x92\xB5\x6C\xCC\x27\xD9\x1C\x8E\x9F\x9E\x38\x90\x2E\x90\xE4\x92\xB8\x91\xF7\x90\xE4\x22\xB2\x46\xBC\x40\x82\xDC\x69\x4B\x67\x39\x93\xFD\x93\xB7\x63\xF9\x27\xBC\x44\xA6\x9B\x9B\x50\x88\x6E\x96\xD6\x86\xBA\x92\x8E\x8A\xEC\x26\x9E\x2A\xAE\x9B\x80\xEC\x85\x7C\x93\x4D\x8C\x40\x61\x36\x8D\xA8\x27\xC6\x9A\x26\x9F\x96\x77\x89\x78\x90\x84\x90\xE7\x92\x86\x93\x9E\x27\x8E\x4E\xA0\x9E\x90\x3C\x92\x7A\x96\x71\x92\xFC\x92\x2F\x8D\xA5\x15\x99\x50\x87\xA0\x84\x40\x69\x80\x91\x79\x90\xA5\x91\xCB\x91\x96\x22\x99\x47\x8E\x8F\x8D\x22\x90\x3D\x94\x87\x92\xF4\x90\x31\x90\xD4\x23\xD5\x30\x86\xA0\x9B\x40\x94\xED\x81\xE1\x92\xF6\x93\x85\x93\x80\x1F\x81\x41\x82\x7E\x8F\xE0\x81\xBE\x88\xBD\x85\x19\x92\xE3\x93\x83\x10\x8B\x3B\x6B\xA0\x96\xE3\x6D\x82\x95\x6E\x91\x8B\x82\xFD\x91\x19\x23\x92\x48\x94\x9B\x95\x08\x90\x7F\x96\x63\x93\xF0\x93\xCD\x87\xF2\x23\xD7\x38\x9F\xFD\x6E\xC1\x7F\x76\x94\x07\x97\xE3\x87\x0E\x94\x0A\x27\xFF\x40\x81\xA1\x83\x21\x93\x84\x94\x10\x90\x04\x8E\xF4\x86\x67\xE0\x7F\x4E\x96\x42\x85\xE9\x88\x40\x96\x41\x90\x4A\x8F\x56\x90\x65\x0E\x97\x4F\x98\x9F\x9B\x23\x84\x8B\x84\xEE\x93\x64\x86\xEE\x93\x34\x20\x85\x34\xB8\x68\x94\x07\x95\x8A\x8E\xEE\x8D\xA1\x89\xC6\x7C\x05\x08\xC6\x1E\xBB\x7D\x9B\xF2\x85\x57\x97\xA0\x37\x12\x95\x9E\x6F\x4D\x28\xDC\x48\x97\x8C\x90\x42\x90\x76\x93\xE8\x8E\x18\x93\x00\x94\xE0\x23\xBE\x48\x82\x7F\x98\xC3\x88\x89\x8A\xF1\x8E\x26\x8C\x37\x94\xB3\x10\xDC\x50\x83\x9D\x9E\x42\x99\x88\x97\x56\x91\xAA\x90\x2F\x92\xAB\x22\xFC\x47\xAF\x89\x8D\x1B\x91\x27\x95\x6F\x93\x55\x90\xB7\x8E\x93\x28\xD3\x48\x9D\x4D\x83\x11\x9A\x8A\x8B\x21\x77\x9D\x35\x43\x94\x93\xDF\x1D\x51\xB8\x8F\x9D\x22\x95\x29\x94\x16\x92\x28\x95\x12\x92\xCF\x23\xA7\x48\x80\x90\x89\x21\x92\x23\x97\x09\x40\x8D\x90\x39\x72\x09\xFF\x2F\x48\xB4\x75\x98\xC5\x8A\xAC\x87\xFA\x92\x8A\x4E\x59\x94\x93\x22\x95\x44\xB5\xA2\x97\x10\x97\x29\x91\xAD\x8E\xFF\x91\xAA\x90\xA6\x28\x9D\x44\x87\x7D\x9E\x4E\x67\x46\x92\x7B\x4C\xDB\x7E\x35\x92\x2B\x0B\x98\x2C\x84\x8F\x34\x32\x78\x0C\x06\xE1\x8A\xA8\x8B\x28\x06\x33\x53\x2A\x28\x8F\xF5\x3B\x25\x98\xFD\x8B\x20\x02\x32\x00\xB7\x73\xDE\x00\x05\x40\x86\x09\x92\x40\x01\x8E\x95\xA0\x06\x2E\x93\x9F\x29\x2F\x09\x69\x51\x98\x30\x45\xB3\x23\x69\x90\xA1\x90\xFF\x64\x75\x58\x6E\xE7\x49\x01\x2A\xA3\x9F\x46\x96\xE9\x05\x1D\x95\xAF\x5F\x51\x36\x8E\x89\x2F\x12\x3A\xA3\x93\x47\x96\x8C\x2D\x1E\x95\x8F\x93\x7B\x94\x27\x01\x03\x52\xAB\xEE\x3C\x53\x37\x1D\x69\xA4\x6C\xDD\x30\x77\x94\x00\x29\xF0\x51\xAA\x78\x90\xE2\x3E\x98\x46\x20\x96\xE7\x36\x06\x93\x06\x01\x67\x51\xAE\xF7\x2C\x48\x92\x75\x73\x6E\x33\x2C\x04\xFB\x04\xEF\x28\xF1\xC6\x2F\x24\x0B\xF1\x83\x6D\x4D\x22\x94\x6E\x92\x7B\x94\xAA\x28\xB8\x85\x64\x21\x18\x29\x92\x10\x76\x1C\x79\x37\x94\xE9\x8F\x8D\x16\x9C\x68\x7E\xA3\x91\x3F\x7D\xEE\x2C\xA7\x91\x39\x94\x81\x00\x1A\x29\xAB\xF7\x32\xA3\x81\xB5\x86\xF6\x8C\x1D\x96\xBF\x2E\x88\x94\xE3\x28\x92\x52\x89\x04\x1B\x49\x9A\xCF\x46\x24\x96\x39\x92\x67\x92\x17\x29\xA8\x4A\x89\x04\x0A\x48\x92\xD1\x5C\x29\x97\xFD\x8E\x75\x78\x27\x0B\x33\x52\x95\x9F\x75\x49\x96\x8C\x2A\x20\x94\x4A\x47\x9F\x29\x16\x29\xDD\xDD\x18\xA4\x83\x08\x0E\x94\x90\x18\x80\x47\x95\x7A\x78\x1E\x29\xF8\x10\x20\xA4\x91\x48\x92\x92\x93\x22\x94\x41\x95\x6D\x18\x59\x29\xC0\xDE\x1B\xA5\x98\x49\x9E\x76\x77\x2B\x97\x52\x32\x87\x94\x1F\x29\xE2\x51\xBE\xEB\x21\x48\x96\x96\x94\x99\x47\xA4\x45\xB4\x94\x06\x0D\x2C\x48\xAD\x16\x81\xC4\x3B\x0C\x06\x1B\x97\x6E\x5C\x0C\x44\x9E\xE3\x01\xC6\x46\x5B\x31\x87\x7C\x0C\x06\xED\x73\xCA\x49\xEB\x68\x7D\x63\x58\xE6\x41\xA6\x90\x19\x7C\x92\x2F\x25\x07\x8D\x5A\xE4\x93\xDD\xE3\x46\xAD\x3B\x98\x9B\xC6\x24\x15\x85\x3E\x93\x09\x91\x0D\x8A\x70\xDC\x1E\x11\x98\xA6\x82\x08\x0E\xE2\x41\x17\x72\x59\x35\xF5\x35\x34\xC8\x06\xC2\x47\x65\x82\x08\x0D\x52\x90\x3D\x8B\x4A\x8C\x25\x21\xAB\xF0\x24\xE1\x70\xA1\x86\xE2\x7E\x28\x6A\xD9\x02\xFA\x28\x24\x89\xE5\xF0\x23\x53\x81\x04\x18\x28\x90\x83\x74\x65\x4D\xBC\x06\xEA\x18\xA4\x1C\x30\x53\xA8\xC2\x72\x4D\x96\x81\x2E\x2F\x94\xDE\x8E\xB6\x4F\x48\x57\x1F\xA8\x1D\x9B\x92\x88\x75\x53\x24\xA0\x92\x4B\x8C\xF3\x58\x30\xAF\x67\xED\x07\xAD\x7F\x09\x7A\xBE\x31\xA3\x4B\x4F\x5F\xDD\x5C\x66\x54\x23\x10\x6F", +"\x8D\x16\x24\x5D\xCC\x07\x19\x19\xFD\x66\xD5\x94\x2A\x27\xC2\x12\x90\xAC\x42\x5C\x01\x9D\x95\x29\x07\x0B\x44\xEA\x94\xB3\x04\x10\xAE\x0B\xA7\x9B\x4D\x9D\xCF\x7E\x05\x7F\x73\x95\xD4\x5A\xAE\x39\x1F\x22\x30\xE6\x01\xA6\x28\xA7\x0A\xF8\x88\x00\x24\x0B\x8F\xA8\x07\xAB\xCF\x3A\x93\x96\x34\x9C\x9B\x93\x3E\x97\x87\x8B\xF9\x4A\x34\xC8\x67\x53\x88\xE2\x49\x4F\x99\x8B\x0B\x3D\x94\x2B\x2A\x0B\x06\xEE\x29\xA8\xA9\x30\xA7\x81\x3B\x76\x49\x76\x3C\x95\xF3\x54\x0A\x06\x3E\x43\x47\xC9\x2C\x5E\x31\x5D\x2A\xC1\x01\x40\x94\xDE\x2B\xE1\x94\xF1\x29\xCA\x7D\x6A\x80\x83\xE0\x7C\x9B\x90\x9E\x93\x71\x94\x9F\x5E\x07\x2A\xFF\x10\x2E\xE6\x0A\x50\x95\x7C\x28\x40\x97\xC3\x90\x08\x06\x0F\x2A\xF4\x1E\xBF\x76\x8E\x09\x64\x86\x02\x46\x6B\x66\x78\xEC\x94\x1F\xD2\x26\x53\x85\xA8\x82\x08\x06\x0D\x03\x42\x94\x50\x3E\xEC\x94\x05\xD2\x2C\xFE\x5D\x74\x7C\x5C\x20\x93\x91\xD0\x89\x54\x94\x91\x6E\xDB\xD2\x3A\x4B\x81\x95\x35\x29\x24\x4E\x92\x45\x94\xD2\x07\x9A\x22\xD8\x24\x97\x54\xBE\xF3\x7A\x4C\x99\x1E\x8E\x20\x00\x7A\x69\x1A\x95\xFA\x22\xA2\x1E\x10\xFC\x0A\x2F\x93\x74\x72\x22\x7B\x7C\x4B\x6D\x00\x2E\x2A\xF1\xDF\x16\x22\x82\x08\x0C\x0D\x01\x4A\x97\xCC\x72\xDE\x94\xCB\x24\xC2\x54\x93\xD2\x0D\x0C\x77\xFF\x31\xFF\x34\x0E\x89\x3B\x35\x4C\x26\x97\xEB\x61\xC0\x3C\x6C\x81\x62\x04\x54\x23\xB0\x8A\x9C\x80\x82\xE0\x04\x52\x1B\xA7\x94\x8A\x0F\x18\x79\x47\x00\xC5\x55\x71\x14\x8D\xF1\x10\x64\x47\xC6\x74\x08\x0C\xAF\x54\x61\x56\xBF\x54\x63\x2E\x1B\x70\x73\xF7\x46\x04\x01\x53\x9C\x59\x78\xB3\x7B\x86\x89\x4B\x93\x66\x22\xB9\x44\x9B\xC3\x57\x4A\x9D\xCC\x46\xC0\x85\x36\x7F\x32\x85\xC9\x28\xB8\x45\x8B\xA3\x9A\x15\x9D\x8C\x91\x43\x93\x33\x94\xB3\x90\xBB\x28\xBD\x37\x8D\x81\x93\x9F\x80\x32\x94\xA0\x89\xB1\x93\x62\x6B\xC4\x1B\x97\x2F\x9A\x35\x92\xDD\x8B\x60\x80\x00\x00\x4B\x95\xEA\x4D\x29\x8D\x7E\x15\x8F\x2B\x94\x21\x99\x3B\x91\x89\x93\xEE\x91\x25\x92\x33\x28\xCD\x45\xB7\x86\x8F\x22\x9E\xC1\x8B\x52\x96\x40\x8B\x69\x91\x22\x1C\xB0\x1F\x98\x16\x05\xF0\x8D\x98\x88\x99\x8B\x9E\x91\x27\x62\x9F\x2A\x86\x6B\x61\xAA\x85\x6D\x87\x7F\x84\x54\x96\xF2\x90\xD4\x91\x31\x28\xAA\x47\x8E\xA3\x86\x21\x9C\x37\x90\x85\x91\x56\x8F\x7C\x91\x05\x06\x87\x1B\x87\x18\x8D\x14\x9D\x09\x0B\xA0\x56\xA0\x6D\x5C\x95\xDC\xB6\x3B\x55\x86\x35\x98\x7D\x75\x87\x94\xE3\x93\x74\x84\xFE\x93\x4B\x27\xE1\x45\xA5\x69\x83\x17\x9A\xA8\x8D\x5C\x90\xFA\x87\x71\x8A\x9F\x22\xD4\x24\x99\x3F\x97\x84\x54\x62\x86\xFA\x91\x40\x00\x68\x95\x29\xA7\x52\x55\x9F\x35\x88\x46\x95\x39\x97\x05\x97\xF2\x91\x60\x95\xCD\x23\xC3\x55\xB9\xA2\x85\x56\x91\xA9\x96\x6F\x91\x42\x91\x81\x93\xE8\xFC\x5C\x44\x68\xAB\x9B\xB0\x5A\xAE\x94\xBE\x84\xE2\x92\xF4\x93\x1E\x28\x8B\x4F\xAD\x7D\x8D\x3C\x97\x04\x97\xF1\x91\x12\x91\x2A\x94\xD7\x26\x9F\x46\xA4\x78\x8F\x49\x88\x09\x91\x8B\x91\x42\x01\x7D\x95\x37\xB2\x7D\x55\x86\xAA\x97\xF2\x70\xA4\x81\x51\x97\x27\x95\x45\x95\x78\x23\xB7\x51\xBA\x8D\x84\x56\x9F\x3F\x96\x06\x96\xEE\x87\x60\x93\xCB\x1D\xC3\x4D\xB1\xAA\x9E\x1B\x6A\xDF\x42\xCC\x83\xB5\x90\x13\x8E\xAB\x29\xEF\x2C\x9C\x29\x10\x58\x92\xF8\x52\x62\x95\x8D\x87\xCC\x93\x8D\x04\xE1\x50\xA1\x90\x83\x43\x94\xB0\x94\x84\x93\xC6\x95\x79\x95\x1D\x2B\xAC\x55\x8B\x8C\x97\x1F\x8B\x73\x93\x7C\x05\xCF\x93\xA4\x8E\xEB\xFB\x67\x41\xAF\x79\x9E\x33\x8D\x97\x34\x65\x94\x82\x5C\x97\x95\x7C\x0E\xBD\xEE\x7A\x9E\x81\x0D\x9C\x7B\x93\x34\x92\xEF\x93\xD2\x90\x85\x21\xA7\x43\x87\x86\x87\x41\x94\x71\x91\x49\x94\x77\x8D\x51\x89\xEE\xF6\x07\x8B\x46\xAD\x9E\xD1\x58\xB4\x97\xD3\x87\x9E\x85\x1F\x94\x62\x28\x92\x3F\x99\xAC\x8D\x54\x9C\x2B\x94\x14\x96\xAF\x90\x89\x93\x54\x2B\xB0\x55\x96\x40\x94\xBD\x6D\x9C\x8E\x86\x8D\x45\x8A\x0B\x5B\x3F\x08\x86\x02\x1B\xAD\x86\xD3\x5D\xB5\x90\xEF\x84\x1D\x95\x65\x84\xD6\x2A\xC9\x4E\x98\xAB\x97\x3B\x9A\xAD\x95\xD5\x8C\xB7\x95\xB0\x8F\xDE\x2A\xFE\x1F\xA5\x71\x9F\xC8\x74\x6C\x82\x5D\x93\x00\x89\xF1\x90\x00\x1A\x9F\x12\x83\xAA\x87\x4B\x98\x82\x80\xAE\x93\x81\x86\xD3\x86\x9E\x26\xA0\x42\xA0\x9A\x91\x09\x92\x6A\x94\x24\x90\xA9\x92\x93\x90\xA6\x26\xA8\x42\xB7\xAB\x99\x4D\x85\x7E\x8E\x5C\x96\xA7\x94\x42\x95\x72\x8C\x22\x55\x8C\x3D\x8B\x5A\x9D\x23\x92\x34\x91\xA6\x8E\xD2\x90\x78\x1E\xA6\x43\xBA\x79\x88\x0D\x97\x41\x91\x27\x43\xD0\x90\xD6\x53\x8B\x2B\xF6\x52\x81\x31\x5C\x55\x96", +"\x99\x86\x57\x96\xBB\x94\x60\x95\xB6\x28\xE4\x56\xAC\x8D\x8F\x54\x9B\x21\x91\x1A\x95\xE6\x8E\x48\x8E\xCE\x1E\xF2\x89\x73\xAD\x81\x49\x91\xBA\x94\x76\x95\x7D\x84\x8B\x95\xF9\x23\xA0\x51\xB4\x8B\x99\x1B\x9F\xCF\x8D\x57\x93\x19\x94\x96\x8A\x6E\xF9\x15\x50\xBD\xB9\x5B\xF6\x85\x70\x97\x73\x94\xE3\x95\xD7\x83\x91\x26\x87\x55\x88\x38\x84\x5D\x9B\x80\x92\xC4\x85\x03\x94\x0E\x8D\x3D\x23\xF9\x3C\xBF\x8C\x91\xA6\x8F\x80\x8D\xFA\x91\xA7\x95\xE1\x95\x64\x29\xC5\x57\x93\xAB\x8A\xC2\x79\x7E\x90\xDA\x90\xE2\x90\x69\x93\x5A\x23\xD3\x50\x9C\x8D\x85\x41\x96\x41\x91\x68\x90\xFA\x6D\xB0\x91\x16\xF9\x02\x47\xB1\x9A\x87\x57\x90\xBA\x93\x76\x97\xFA\x94\x33\x82\x9B\x27\x82\x56\x88\x83\x90\x5F\x9A\x38\x92\x7E\x94\xE3\x90\xFA\x95\x68\x2B\xAD\x57\xB1\x77\x91\x1C\x9F\xA4\x84\x7F\x97\xF5\x94\x90\x83\x73\x26\x8F\x57\xBD\xAA\x87\x22\x95\xAA\x93\x72\x97\x6C\x91\xCA\x95\x33\x21\x97\x57\xB5\x84\x99\x5C\x97\x13\x97\x5D\x89\x0C\x8C\xC8\x8A\xC2\x2B\xFD\x57\xA1\x32\x45\x77\x8A\x88\x94\x65\x90\x23\x94\xEE\x91\x61\x27\x83\x3F\x90\xA2\x84\x23\x9E\x85\x8B\x71\x58\x9B\x8C\x57\x82\x25\x06\xE8\x57\x81\xA5\x85\x54\x9F\xB2\x97\xFC\x91\xCC\x94\xB0\x95\x33\x2B\xE2\x56\x9F\x91\x8C\x5E\x92\xD4\x8F\x80\x94\xC2\x95\xD1\x93\x0A\x2C\xA7\x56\xB1\x3D\x09\x41\x9E\xB9\x92\x86\x97\x5C\x95\xBD\x45\x35\x2C\x9C\x50\x80\xAC\x92\x59\x9F\x81\x94\x66\x95\x08\x94\xC7\x93\x23\x28\x87\x56\x92\xAD\x82\x3E\x99\xB6\x93\x93\x7E\x6B\x8A\x75\x6F\x4D\x8B\x46\x58\x9B\xF5\x35\x5B\x9E\xF8\x84\x5D\x94\xEE\x91\x5F\x95\x36\x24\xF0\x55\xA8\xAA\x92\x57\x94\x83\x92\x17\x96\xC7\x94\x5E\x94\x58\x21\xE5\x2A\xA3\x8F\x87\x5F\x92\xC2\x94\x9F\x44\x09\x96\x4F\x94\xC9\x2B\x98\x56\xBB\xB0\x9A\x58\x9D\xBC\x96\x6C\x97\xF3\x95\xDA\x8A\x4F\x10\xB1\x47\xAF\x68\x9C\x0F\x44\x3F\x92\x56\x87\xC3\x95\x36\x96\xDB\x30\x47\x1C\xA7\x25\x83\x18\x92\x73\x92\x50\x90\xCD\x92\xE3\x90\x36\x27\x8F\x3A\xB8\x9C\x91\xE8\x80\x47\x71\x83\x93\xDA\x89\x57\x85\x68\x1F\xF1\x56\x83\x04\x1A\x62\x92\xE4\x4C\x8B\x95\xBD\x87\x1E\x94\x60\x28\xB8\x58\x8D\xB1\x9A\x61\x91\x8A\x92\x77\x95\xFF\x90\x8E\x95\xD0\x28\xC6\x55\xB6\xAB\x91\x22\x9B\xFC\x7A\xE8\x85\x4A\x95\xA0\x89\x4E\xDF\x5E\x76\x7A\x7D\x9C\x20\x92\xC9\x92\x20\x00\x25\x96\x7F\x4D\x96\x2C\x9D\x1E\x8A\xB1\x97\x61\x95\xAD\x91\x52\x85\xC7\x93\x49\x85\x1F\x27\xF1\x41\xA1\x9C\x97\x17\x91\xC1\x8A\xA7\x93\xDD\x8F\x05\x91\x96\x28\x8D\x44\xAF\xAD\x90\xAF\x89\xB2\x92\xD6\x8B\xCA\x94\x40\x96\x8D\x2B\xD9\x57\x94\xAC\x88\x54\x9D\xAE\x92\x19\x94\x0C\x95\xDC\x95\x32\x28\xE4\x58\xAA\xAA\x89\x18\x9A\xB3\x91\x78\x90\x2A\x95\x04\x91\x94\x28\xA7\x20\x81\x91\x9A\x42\x92\xFA\x8E\xA2\x81\xD1\x94\x64\x96\xD8\x2B\xC3\x4A\xAA\x20\x87\x5E\x9D\xCC\x92\x51\x97\x33\x96\x66\x94\xD1\x2C\x8E\x55\xA0\xB2\x90\x54\x97\xC6\x97\x58\x97\x35\x97\x15\x92\x75\x02\xB6\x44\x94\xC0\x78\x22\x9C\xAA\x6F\x98\x97\x03\x96\xB9\x83\x5B\x26\xCB\x59\x9B\xAF\x86\x1C\x9E\xBE\x93\xFD\x90\x01\x97\xF6\x93\x50\x2B\xC0\x4F\x93\xB1\x91\x3F\x91\xC4\x91\xC6\x65\x16\x95\x6C\x64\xD5\x28\xDA\x55\x7D\x92\x78\x46\x9F\x24\x92\x1B\x95\xC0\x8C\xE7\x73\x60\x01\xAB\xDC\x77\xE0\x5D\x4A\x9E\xE1\x83\x60\x44\x38\x96\x08\x96\x7E\x25\xFA\x59\x90\xAE\x90\x39\x90\x28\x95\x90\x96\xB2\x91\x43\x96\x03\x22\x9A\x58\x85\x88\x9C\x60\x9C\x65\x86\x55\x97\xEF\x8C\xB5\x95\x5A\x19\xB2\x55\xB9\x30\x0E\x35\x9E\x03\x92\xA2\x97\xF3\x32\x8A\x96\x46\x0E\x96\x5A\xB7\xB3\x82\x64\x95\x6E\x96\xEC\x86\x49\x85\xBC\x8E\xDA\x0E\x8F\x50\xB7\x5F\x91\x40\x99\x7F\x88\x65\x74\x9D\x90\x55\x93\xC2\xF8\x6E\x3B\x84\x5B\x74\x55\x97\x4C\x8A\x4F\x91\xB2\x92\x05\x84\xBF\xD1\x05\x1C\xB4\x92\x8D\x59\x98\xC4\x91\x69\x94\xD9\x86\x9C\x91\x36\x2D\xD8\x1D\xB8\xB4\x91\x7A\x8A\xD3\x94\x01\x8C\x4F\x96\x07\x8C\x13\x28\xFD\x3C\xA4\x6F\x9B\x36\x95\xE1\x88\x42\x95\xD8\x8B\x3E\x93\x2F\xF8\x4B\x52\x8A\xB5\x97\x68\x98\xCF\x90\xCD\x92\xF6\x95\x8D\x96\x50\x2D\x84\x59\x99\x74\x9A\x35\x9B\xD1\x8C\xD7\x90\x4C\x8E\x5F\x93\xBD\x1F\xB7\x35\x84\x71\x94\xD0\x6E\x67\x7E\x0E\x93\xB8\x94\x61\x7D\xA1\x0D\xDD\x8B\x70\xB4\x97\x72\x88\xBC\x47\xBD\x45\x2C\x96\xA5\x87\x2E\x27\xB6\x4D\xA9\xB5\x98\x35\x9B\xD6\x93\xE6\x91\x5B\x97\x9A\x93\x6F\x2D\xB7\x4E\xB1\xB5\x99\x39\x97\x57\x69\xB8\x8C\x72\x95\x97\x5E\x7F\x05\x2A\x12\x50\xF5\x6A\xF7\x3D\xB4\x43\xAF\x94", +"\xA3\x87\xBE\x96\xA0\x2A\xCD\x5A\x9E\xAD\x80\x55\x85\xCB\x95\xEB\x92\xA4\x85\xAF\x93\x28\x2C\x8E\x51\xA2\x9C\x85\xE0\x81\x8B\x51\xFD\x84\xA7\x95\x07\x72\x96\x2D\xC1\x1D\x98\xB6\x9A\x55\x9A\xD9\x96\x6E\x94\x64\x87\xCE\x96\xA2\x0A\xDE\x4E\x87\xB6\x6D\x44\x95\x03\x97\x6F\x94\xC0\x92\xAB\x71\x24\x27\xE5\x4E\x82\x78\x8A\xEC\x65\xB2\x96\xFE\x85\x7C\x8F\x23\x77\x0B\x12\xDC\x14\x29\xB6\x84\x77\x8B\xDA\x91\x5A\x95\x6B\x97\x2E\x96\xB9\x27\xFC\x59\xBB\x9E\x91\x36\x9D\x7B\x93\x28\x92\xFB\x93\x6A\x93\x3F\x2C\xA6\x50\x85\xB4\x88\x05\x9C\x0B\x93\x1F\x7F\xCF\x94\x35\x94\x41\x2B\x90\x46\x9F\x25\x87\x2C\x63\xDC\x90\xE1\x85\xD4\x45\x99\x96\x6F\x2C\xB3\x51\x8B\xA2\x8A\x5E\x9A\x36\x96\x93\x97\x28\x94\xDE\x95\x6E\x23\xA2\x59\xA7\xA2\x98\x41\x92\x44\x7F\x6A\x94\x30\x90\x4B\x6D\x19\xB8\x7B\x83\x40\x00\x1D\x6E\x9B\xC7\x97\xBB\x96\xEC\x95\x11\x96\xA2\x2B\xBE\x50\xB0\xB6\x9A\x72\x8B\x3D\x91\x97\x95\xF7\x91\x5D\x96\xDF\x23\x91\x38\xA7\x8B\x8F\xB0\x5B\x98\x87\x97\x97\x44\x7C\x2B\x8E\x58\x2B\x97\xF2\x5E\x6D\x51\x30\x34\xDF\x94\xA2\x8D\x2A\x3D\xA5\x96\x47\x2B\xC7\x5B\x97\xB2\x9F\x42\x9B\xC4\x92\x93\x96\x00\x96\x08\x92\xEC\x27\xD2\x50\x8F\xB7\x94\x42\x93\xD0\x96\x0A\x95\x15\x97\x71\x90\xA1\x1E\xAF\x25\x9F\xA8\x88\x70\x9F\xDE\x94\xFA\x68\xE1\x93\x95\x93\x5C\x29\xE3\x5A\xA0\xB7\x99\x6F\x99\xC9\x93\xBF\x97\xFE\x92\x5C\x96\xFD\x27\xBA\x59\xBF\x9F\x8F\x44\x9D\xAD\x92\x00\x95\xAC\x8F\x04\x8D\x79\xA9\x0D\x5C\x90\xE2\x67\x69\x4B\xE2\x96\x78\x97\x94\x85\x2F\x96\xB7\x2B\xE1\x58\x90\xB3\x82\x56\x9A\xCE\x90\x67\x95\x28\x97\x7A\x95\xEB\x2D\x92\x27\x6F\xAE\x84\x38\x8B\xB2\x32\xC7\x94\xEB\x62\x1E\x97\xF7\x2D\xEE\x58\xAC\xB8\x95\x70\x9E\xE2\x93\xFB\x93\xF3\x93\xEE\x93\xD1\x27\xDF\x4F\xBC\xA1\x8A\xE7\x8C\x2C\x89\xAC\x96\x41\x00\x27\x97\xC8\xC7\x1E\x19\x7D\xB8\x9F\x5F\x9D\xE7\x81\x80\x96\xFA\x92\xC6\x93\x4F\x2C\x85\x56\x91\xB1\x86\xCE\x8D\xBB\x92\xBD\x96\x34\x94\x35\x84\x85\xCA\x47\x4F\x84\xDA\x62\x08\x00\xE6\x93\x13\x65\x71\x97\x74\x95\x12\x2E\xB2\x59\x98\xB2\x94\x72\x98\xB7\x96\x96\x97\xB5\x94\x18\x97\xD9\x2A\xFE\x4F\x9B\xAB\x80\x40\x95\xE3\x90\x4D\x66\xB9\x8F\x89\x96\x2A\x2E\xD1\x5C\x81\xB2\x81\x6F\x98\xBC\x94\x16\x97\x39\x96\x46\x95\xE9\x2C\xE5\x56\xA8\xB7\x85\x45\x9E\xE6\x97\x77\x95\xF8\x91\x72\x89\x7A\x15\xB8\x39\x82\x6A\x75\x73\x99\x8D\x66\xBE\x95\x51\x95\x3C\x97\x80\x2D\xFF\x55\xB4\xB2\x9D\x73\x9E\xD9\x97\x96\x94\x68\x96\xFF\x96\x29\x2C\xC4\x50\xB2\x81\x88\x6F\x85\xE9\x6B\x2D\x93\xEC\x80\x3A\x97\x89\x2E\x9F\x5D\xB4\xB0\x8E\x6A\x99\x87\x7E\x76\x96\x33\x97\x77\x95\x43\x2E\xF1\x55\x85\xB9\x85\x63\x94\xAF\x95\x9D\x97\x28\x97\x61\x8E\x7A\x21\x99\x09\xA8\xB6\x91\x75\x9E\xD7\x90\xD4\x97\x5E\x84\x84\x93\x2D\x2E\xA4\x5D\xB1\xB6\x9F\x6C\x93\xDB\x91\xB4\x95\x6D\x96\x42\x97\x80\x2B\xB6\x5C\x80\x42\x8D\x61\x95\xFE\x41\xE4\x8C\x8A\x96\x58\x97\x26\x8D\x10\x5C\x9C\xAD\x86\x76\x9A\xF0\x84\x2F\x85\xC5\x95\x72\x96\x17\x2B\x8F\x5D\xA3\xAD\x91\x74\x9B\xBB\x93\x9D\x95\x9B\x96\x24\x97\x6F\x2E\xC2\x47\xAE\x7C\x82\x66\x7D\xA9\x94\xD3\x94\x82\x6A\x4F\x97\xC5\x2E\xB3\x5D\x9B\xB6\x87\x6A\x81\xB0\x97\xCC\x97\xC0\x95\x34\x97\x36\x2B\xF5\x58\x93\xBA\x87\x5B\x92\x79\x93\xBA\x95\x91\x8F\x91\x70\xC0\xDB\x2F\x2B\x96\x1F\x89\x6A\x99\xED\x94\xAC\x94\x4D\x97\xB6\x6A\x17\x2E\x9D\x4F\x99\xB8\x9F\x3C\x96\xC0\x94\x82\x90\x02\x97\x7E\x97\xF6\x2B\xD3\x21\x92\xAF\x93\x40\x60\x86\x8D\x37\x93\x4C\x77\xF9\x96\xC4\x2E\x99\x5B\xB2\xBB\x8E\x6D\x90\xEA\x85\xCA\x94\x10\x94\x4E\x96\xCB\x2B\xF4\x58\xBD\xB0\x8E\x78\x91\xDD\x95\x7E\x95\x56\x96\xDD\x6F\x7A\x2C\x8E\x5C\x9E\x6A\x92\xB0\x52\xDC\x91\xE3\x94\x6B\x97\x8D\x97\xC8\x2D\xD9\x4F\x9E\xBC\x81\x5B\x97\xFA\x8D\x32\x93\x8C\x97\xD1\x96\x98\x1F\x86\x38\x89\x59\x7E\x43\x90\x53\x8D\x27\x97\x73\x8B\x3D\x8C\x98\x28\x84\xF3\x4F\x58\x72\x6F\x9E\xEE\x95\xCF\x6C\xBC\x96\x8D\x97\xEA\x2B\xEB\x55\x89\xB7\x86\x73\x9D\xCF\x90\xCD\x97\xC2\x96\x11\x94\x0D\x2F\xA1\x4F\xA5\xBC\x89\x60\x91\xF1\x95\xEE\x8D\xAA\x8D\x51\x88\x8A\x18\xD4\x04\x93\x83\x9B\x83\x66\x0A\x8B\xF1\x85\x42\x94\x97\x97\xC6\x2D\xB0\x5E\x93\xB8\x9E\x62\x96\xEB\x96\x9C\x94\xAE\x96\x74\x96\x44\x2E\x92\x5D\xA6\xBB\x89\x6F\x98\xEE\x96\xD2\x96\x24\x94\x6C\x96\xA7\x2C\xC3\x3F\xA0\x3D\x63\x0F\x9E\xF8\x8C\xE4\x75\xCB\x97\x82\x97", +"\x63\x2E\xCA\x5E\xB2\xBC\x8A\x76\x9C\xDF\x97\x84\x94\xAA\x96\xD1\x96\xBC\x2C\xE8\x50\x87\x7E\x8A\xEA\x5C\x0B\x8B\xEE\x87\x73\x8C\xAF\x82\x0B\x2E\x97\xC2\x60\xBD\x98\x73\x92\xF6\x92\xCF\x94\x85\x97\x51\x97\xE4\x08\xE8\x15\xB7\xA1\x97\x72\x99\x87\x97\xC3\x8C\x9B\x96\xB6\x97\xBE\x2E\xC9\x5C\xA4\xB2\x89\x45\x99\xAE\x8D\x61\x86\x30\x95\x2B\x92\xC4\x28\xD7\x19\xB7\xBD\x80\x5E\x6A\xED\x94\x6E\x94\xB7\x97\xFA\x83\x12\x2C\xB5\x57\x94\xB0\x80\x63\x96\xAA\x97\x86\x90\x06\x97\xDA\x90\xD3\x2C\xBB\x48\x95\xB3\x9D\x21\x98\x13\x93\xF9\x79\x42\x96\x57\x69\xD7\x28\xA4\xFE\x72\x21\x86\xF9\x74\xEA\x58\xE9\x04\x8F\x02\xA2\x94\x23\x2A\xCF\x3F\xA7\xA6\x9B\x07\x92\x94\x8C\xE7\x07\x0C\x7F\x6F\x00\x56\x2A\xF9\x20\xB1\x6E\x90\x91\x8F\x44\x65\x34\x94\x69\x86\x32\x97\x4A\x2B\xCA\x5B\x8C\xAD\x8C\x6E\x9E\xB4\x96\xB9\x95\x40\x97\xF7\x93\x1D\x2E\x89\x56\xB1\xD8\x66\x69\x90\xC2\x8A\x64\x96\x95\x8F\x01\x8F\xB1\x0F\xAC\x5A\xB1\x77\x90\x35\x97\x75\x96\xD1\x5D\xD2\x87\x63\x97\x81\x2D\xCE\x4D\x92\xBF\x85\x5D\x9D\xB4\x97\x74\x97\xD3\x95\xD4\x95\x51\x2B\xAB\x57\x93\xAD\x9F\x49\x80\xB2\x97\x2E\x80\x4A\x97\x55\x93\x42\x2D\xB3\x55\xB8\x89\x95\x5A\x96\xAB\x97\xA8\x97\xEA\x82\x00\x00\xCE\x2F\xB5\x1B\x93\xB9\x90\x7C\x93\x91\x81\xAA\x97\xED\x8F\xA9\x96\x69\x0F\xD5\x5A\xAC\x60\x97\x6A\x9E\x82\x8F\xE4\x96\x4B\x85\x64\x95\xCB\x0F\xF2\x11\xA6\x81\x94\x47\x89\xB4\x72\x50\x6D\x00\x99\xEE\x86\x03\x30\xAF\x4E\x83\xB6\x91\x39\x95\xD8\x96\x90\x97\x61\x96\x44\x96\x89\x2D\x8A\x59\x8B\xB6\x8C\x64\x9E\x33\x80\x5C\x97\xDB\x8B\x13\x8F\xF3\x26\xA9\x3C\xA5\xAB\x8D\x60\x90\x00\x9F\xFC\x95\xB7\x96\x64\x97\x7C\x2E\x91\x5F\xB6\xA1\x9C\x37\x98\x87\x96\xDF\x92\x0A\x97\x42\x97\x73\x20\x88\x38\x9B\x75\x69\x08\x07\x01\x9D\xA2\x95\x06\x98\xC1\x96\xDC\x2B\x86\x60\xBA\x8C\x88\x80\x9F\xA3\x8A\x01\x99\x90\x8C\x06\x98\x43\x1A\x8E\x60\xAD\x27\x77\x04\x97\xDA\x92\x9D\x6D\x0F\x99\x98\x96\x3F\x30\xEA\x5F\x8C\xBD\x8B\x6E\x9F\xBE\x95\xB9\x97\xB4\x93\x0D\x97\xF3\x2B\xD3\x5E\x90\xBC\x9E\x69\x95\xFF\x91\x28\x86\xA5\x94\xCB\x81\xBD\x2D\xBD\x33\xA6\xA5\x20\x6E\x9F\x40\x77\x09\x98\x5F\x96\x1F\x97\xB7\x0A\x91\x57\xAF\x84\x96\x60\x94\x1C\x90\xA4\x97\x96\x90\x91\x96\x5D\x22\x8B\x59\xA0\x74\x9A\x39\x92\x28\x8F\xCE\x83\x75\x96\x03\x97\x21\x22\xA4\x5C\xAC\x9D\x89\x94\x85\xCC\x95\x10\x97\xCA\x34\x33\x98\x97\x2D\xE8\x60\xBF\x2B\x8A\x83\x91\x1B\x94\x0D\x99\x80\x90\x37\x98\x84\x22\xF0\x60\x86\x8A\x92\x83\x9A\x1C\x95\x04\x99\x11\x8E\x0A\x78\x56\x27\x8A\xB9\x5C\x29\x00\x84\x9A\xDA\x92\x10\x9B\xA8\x95\xD5\x97\x41\x2E\xAD\x5F\xA2\xB1\x8F\x7D\x99\x43\x91\xF6\x96\x13\x92\x92\x96\x50\x24\x90\xDD\x55\xB7\x89\xCF\x88\x76\x94\x6B\x89\xA8\x89\xEF\x80\x94\x12\x93\x3D\x88\x25\x9C\x81\x9E\x02\x98\xF5\x97\x59\x97\x09\x96\x84\x30\xC2\x43\x86\xC2\x99\x12\x98\x08\x9C\x59\x92\x22\x98\x67\x91\x8C\x30\xB3\x39\xB4\xC1\x85\x5F\x7E\x77\x90\x0F\x98\xE0\x93\x5F\x90\x7B\x30\xD7\x2F\xA3\x42\x0B\xEC\x44\x09\x9C\xB8\x96\x25\x99\xD1\x95\xEB\x2F\xDD\x57\x8A\x39\x9F\x5E\x9A\xE9\x8E\x08\x98\xA7\x8E\x24\x98\x7E\x1D\xCA\x60\xA8\xA5\x6A\x08\x9A\xEC\x75\x0A\x6D\x31\x98\xEF\x96\x8C\x2E\xE0\x5D\xB1\xB1\x82\x77\x93\xC7\x96\xBC\x94\x2E\x94\x5E\x97\x39\x2B\xA0\x61\xB9\x86\x9C\x17\x76\x7A\x97\x84\x82\x35\x99\x56\x98\xB5\x24\xAF\x61\xAA\xBE\x91\x85\x9F\x1F\x93\x16\x9A\x12\x92\x4E\x98\x4C\x24\x9E\x61\xB5\xA0\x93\x7D\x97\x83\x92\xE0\x81\xED\x93\x6B\x97\x01\x01\x57\x61\xB5\xB7\x99\x86\x90\xE4\x97\xD6\x94\xEE\x94\xB4\x97\xBA\x2E\xEA\x5E\x86\xB9\x8C\x67\x94\x0F\x99\x80\x91\x66\x8B\xDD\x90\x72\x2E\x96\x4F\xAC\xC2\x82\x7B\x86\xD0\x74\x9C\x95\x3F\x98\xB3\x97\xFF\x30\x90\x5D\xA9\xBD\x85\x77\x93\x10\x9F\xDC\x95\xE6\x96\x63\x17\xE6\x1E\xD8\x27\x7A\xC3\x8E\x70\x97\xF0\x90\xE8\x69\x0E\x97\x9A\x97\x60\x24\xB7\x5E\x81\xBE\x90\x5E\x93\xB5\x68\xF8\x8F\xF8\x5E\xFD\x95\x37\x06\xE6\x5F\x8C\xC4\x81\xEA\x72\x05\x9D\x7D\x94\x15\x98\x7F\x96\x56\x30\xF1\x57\x98\xC1\x9E\x61\x99\xFD\x90\x88\x95\xD5\x97\xF1\x74\xF4\x27\xE4\xD6\x5B\xC4\x9B\x71\x99\xC4\x93\xCF\x94\x01\x98\x92\x84\x42\x30\xE7\x4D\x84\xC1\x87\xF6\x8E\x0C\x99\xD9\x8C\x34\x98\x4F\x8F\xD2\x30\x93\xFC\x75\xDE\x79\x4B\x5B\x13\x9F\xC9\x95\x4F\x99\xC7\x97\x1A\x30\xC1\x60\xAA\xB5\x8C\xE9\x8A\xD1\x8E\xA5\x8C\x47\x8F\x10\x98\xC8\x21\xB9\x61", +"\x88\x8A\x8B\x0E\x99\xF2\x91\x60\x64\x63\x91\x81\x65\x73\x2E\xF9\x61\xA8\xC3\x8E\x5C\x9A\x0E\x9E\x21\x99\xD9\x97\x70\x97\x67\x2F\x92\x62\x81\xC4\x94\x88\x90\x0E\x9F\xC8\x97\x45\x98\xB7\x97\x92\x93\x24\x04\x84\xC3\x83\x8B\x9A\xCC\x91\xDF\x7C\x33\x97\x87\x98\x68\x31\x91\x62\xA3\xBB\x93\x88\x9F\xC9\x95\x22\x98\xE6\x97\x82\x98\x68\x2C\xD3\x47\x92\xFD\x7D\xF9\x81\xDF\x82\x25\x99\xE3\x87\xB1\x97\x4B\x2F\xAE\x62\x93\xBF\x95\x82\x95\xFD\x97\x0A\x9B\xF5\x96\xE8\x96\x35\x31\xD2\x5B\xB7\xC4\x80\x1B\x96\x12\x9A\x6C\x91\x12\x94\xC6\x53\x4D\x31\xE1\x5C\x93\xAC\x96\x8B\x9B\xCF\x93\x0A\x9B\x62\x98\x98\x98\x8D\x31\xB2\x62\x8F\xC6\x9C\x70\x92\xFF\x94\x8A\x96\xBF\x96\xAB\x8F\x95\x31\x96\xF2\x7D\xB1\x8B\x85\x96\x10\x01\x33\x9A\x9D\x97\x63\x98\xFA\x2D\xFC\x5E\xAF\xB8\x87\x75\x91\xE3\x97\xBF\x96\x48\x99\x00\x97\x82\x2F\xBC\x5E\x93\x5F\x9E\x79\x9C\x7E\x82\x3C\x90\xD0\x93\xEF\x77\x87\xC5\x2E\x63\x9D\xBA\x9C\x87\x97\x16\x9B\x1B\x99\x5A\x99\xBD\x98\x6B\x31\xFD\x62\xAD\xC5\x84\x88\x92\x0E\x9B\x67\x95\x48\x8F\xAB\x97\x89\x18\x81\x51\x8B\x62\x8C\x65\x9E\xCD\x91\x2F\x36\x70\x99\x77\x97\xC4\x31\x98\x61\xBE\xC3\x82\x72\x90\x10\x9B\x8C\x97\xAE\x96\x79\x98\x66\x2C\x80\x63\xAE\xB3\x8F\x7B\x90\xCF\x96\x32\x95\x0B\x92\x2D\x7C\x97\x28\xC3\x59\x85\x15\x9D\x83\x97\x83\x5F\x3A\x9A\xD1\x97\xEC\x98\xEC\x30\xC8\x45\x9E\xB4\x85\x18\x95\x0B\x9F\x60\x90\x78\x99\x5E\x97\xE2\x31\xBF\x5D\xB4\x74\x8D\xFD\x8E\x0B\x98\x0E\x7D\x69\x7D\x6D\x8D\x14\xF0\x43\x48\x94\x91\x97\x53\x3E\x1E\x98\x2F\x6D\x47\x98\xE1\x6B\xF6\x2E\x83\x58\xB1\xC4\x85\x60\x93\x13\x9C\xE4\x95\x64\x98\x93\x97\x72\x2D\x9B\x5F\xB0\xBD\x9D\x7C\x9A\x3C\x87\x4E\x81\xD4\x88\xA7\x6A\xF4\x2C\xCA\xB5\x53\xC2\x94\x8B\x92\xCE\x91\xF5\x96\x59\x98\xED\x98\x10\x31\xDC\x63\xAA\xC5\x9E\x8E\x92\x10\x9B\x39\x9A\x45\x99\xFC\x98\x9A\x2F\xB4\x39\xA9\xC6\x9F\xB4\x67\x61\x8C\x8D\x93\x42\x96\xDD\x97\x89\x1F\xCA\x44\xA5\x3E\x8C\xCA\x86\x8C\x87\xA0\x37\x48\x93\xC3\x98\x8E\x2F\xE4\x5E\xA0\xC8\x99\x8B\x92\x22\x98\x39\x98\x89\x98\xB6\x98\xF7\x31\xE1\x61\x9A\xC5\x90\x16\x97\x9B\x8A\x7A\x8E\x6E\x97\x2F\x98\xF9\x2F\xAB\x5A\xBD\x80\x83\x7F\x95\x23\x9B\x65\x37\x8D\x99\xE7\x97\x7A\x2F\xF7\x56\xB2\xC0\x99\x5B\x95\x77\x93\x6F\x94\xF4\x93\xBE\x95\x4D\x27\xB6\x5B\xA3\x9D\x85\x05\x95\x24\x9F\x14\x91\xD3\x8B\x1D\x90\x77\x22\xAE\xD6\x7D\xB7\x7D\x0B\x8B\xF0\x5D\x69\x47\x93\x98\x01\x98\xB0\x31\xC9\x5D\x93\xC9\x9E\x73\x9A\xB7\x90\xD0\x94\xDF\x94\x41\x97\x7E\x2B\xD0\x5D\xB7\xB6\x92\x76\x94\x35\x85\x30\x80\x19\x91\xBF\x8C\x54\x27\xBF\x19\x67\x81\x82\xD4\x67\x26\x98\x03\x99\x9A\x99\x18\x98\x05\x30\xD3\x62\xB8\x75\x95\x8A\x9A\xD7\x8F\x2A\x98\x5F\x8F\xA3\x98\xCB\x1E\x91\x64\xB7\x73\x92\x92\x85\xD7\x90\x54\x93\x1D\x90\x1E\x48\x79\x20\xA9\x62\xB8\xF8\x5C\x90\x91\x72\x81\xF6\x80\x2C\x98\x8E\x96\x9F\x26\xF3\x63\xA1\x9A\x95\x8F\x93\x6A\x91\x91\x95\x56\x99\x11\x98\x73\x30\x96\xBC\x78\xAB\x80\x00\x07\x68\x90\x3B\x68\x97\x05\x3E\x99\x3E\x30\xFF\x64\xBF\xC4\x96\x49\x8C\xFE\x94\xFA\x96\xFB\x96\xEB\x97\xF0\x2F\x82\x5A\xA5\xC6\x84\x68\x93\x19\x9D\xA8\x94\x37\x85\x61\x91\x43\x0D\xF9\xD2\x28\xCA\x90\x82\x9A\x2A\x99\x2A\x99\x32\x99\xA0\x98\x0C\x28\xC3\x62\xB9\x7E\x85\x8A\x9B\xFB\x89\xA6\x8C\xA8\x98\xE9\x48\xB9\x2D\xB9\x33\xA3\xAC\x84\xE1\x8E\x16\x80\x65\x95\x76\x95\x01\x99\x36\x32\x94\x65\x91\xB0\x85\x8B\x9F\xE3\x95\x38\x9A\xA3\x97\xE3\x98\xDD\x30\xE4\x5D\x8A\xC7\x81\x92\x9E\x16\x98\x45\x99\xBA\x97\x5D\x90\x66\x27\xB2\xFA\x77\xC1\x9F\x43\x9A\x01\x88\x15\x98\x37\x96\xD6\x6E\xAE\x28\xD1\x65\xAB\xC4\x82\x39\x80\x28\x98\x28\x9A\xA0\x99\x9B\x96\x84\x32\xB9\x5A\x86\xCA\x8B\x37\x96\x2C\x9C\x48\x91\x52\x99\x60\x91\x56\x2B\xFC\x45\xA7\xCB\x91\x84\x9D\xBE\x6B\x52\x9B\xBA\x98\x4B\x99\xEB\x30\x98\x65\x92\xAE\x9A\x94\x94\xB9\x94\x53\x9A\xE5\x94\x4F\x99\xA5\x26\xC3\x64\x88\x84\x9C\x59\x95\x07\x9E\x07\x69\x29\x99\x53\x8C\xE5\x32\xFE\x07\xA7\xCB\x8A\x85\x90\x2D\x9E\x49\x9A\xB4\x99\x8C\x96\x9C\x31\xE8\x5A\x92\xC5\x84\x6C\x94\x15\x9C\xAD\x96\x55\x98\xB7\x96\x87\x32\xF5\x65\xAD\x9B\x8A\x94\x9B\x0B\x9A\x34\x86\x88\x97\x1A\x8E\x2F\x0E\x88\x57\xA7\xB8\x9B\x5F\x90\x00\x03\x57\x9B\x19\x98\xE8\x97\x4F\x2D\x9B\x66\x9C\xC0\x9D\x98\x96\xD8\x97\x63\x98\x62\x97\x90\x99\x70\x2D\xF6\x65\xA4\xCC\x82\x95", +"\x9C\xB9\x95\xDB\x81\x15\x6C\x97\x99\x81\x30\xB0\x66\xB5\xBA\x9B\x91\x96\x1C\x9A\x2F\x99\xB6\x98\xBE\x98\xE7\x2D\xEB\x5E\x94\xBA\x8D\x7B\x9A\xF3\x90\x0D\x47\x92\x97\x09\x5E\xA7\x32\x97\x66\x84\x99\x9A\x68\x97\x29\x9B\x03\x99\x47\x97\x0E\x98\x1F\x2D\x9F\x60\xA1\xB4\x88\x98\x98\xB9\x92\x61\x9A\xE6\x95\xB8\x45\x5D\x2E\xD8\x27\x40\xCD\x95\x84\x92\x34\x9D\xE6\x86\xC0\x99\x35\x98\x04\x33\x97\x58\x86\xCC\x99\x60\x9C\x35\x9B\x83\x96\xD7\x99\x0E\x96\x2A\x32\x87\x5A\xB8\x56\x94\x5E\x9A\xDD\x7B\x8F\x2A\xD4\x99\x1C\x93\x30\x30\xAB\x65\x80\x27\x8A\x86\x9C\xE6\x82\x58\x98\x90\x90\x62\x99\x42\x22\xA2\x66\x92\xA0\x8E\x72\x66\xBE\x97\x89\x63\xD8\x98\x63\x98\x65\x33\xE9\x1C\x96\xCD\x99\x94\x98\x35\x9C\x3E\x9A\xD6\x99\x37\x98\x6D\x33\xA3\x5A\xAF\xCD\x87\x10\x97\x10\x98\xE3\x86\x56\x90\x7B\x8F\x5C\xA2\x07\x67\x98\xC3\x91\x82\x94\x6E\x90\xE1\x95\x82\x98\x0C\x97\xFF\x2C\x9A\x5C\xA3\xC6\x99\x82\x9F\x20\x9C\xEA\x97\xBD\x98\x9C\x98\x04\x1F\xE4\xD6\x5A\xCE\x9B\x87\x9C\x39\x9A\xDF\x92\xE4\x96\x1A\x98\x94\x2F\xB6\x60\xAA\xBA\x83\x23\x9C\xEA\x94\x00\x96\x99\x99\xBB\x99\xF9\x2C\x99\x66\x95\xCD\x92\x99\x97\x35\x9C\x66\x9A\x07\x98\x9B\x99\x20\x30\xB8\x66\x8A\xB6\x9A\x99\x9C\xD8\x97\xF7\x8E\xDC\x98\x0F\x84\xD6\x2E\xAC\x66\xAB\xCE\x9C\x88\x90\x1F\x9F\x6C\x99\x21\x99\xB4\x99\x6D\x30\x8F\x67\x89\xC2\x91\x9C\x91\x07\x9F\x58\x9A\x2E\x99\xC6\x96\xC3\x23\x8B\x3B\x4B\xCF\x9C\x89\x94\xEB\x96\x6C\x9B\xE2\x99\x81\x99\x8D\x33\x9B\x65\x92\xCF\x96\x85\x94\x3D\x9B\x11\x9A\xF5\x99\xAD\x98\x8E\x30\xD7\x58\x9C\xBE\x79\x4B\x5B\x3D\x9E\x29\x99\xF7\x98\xC5\x99\xBC\x33\x8C\x67\xBE\xCE\x99\x9A\x90\x3C\x9B\x6B\x98\x56\x99\x84\x99\xE7\x33\xD0\x39\xA9\xB1\x99\xF3\x7C\x1B\x93\xCF\x7D\x77\x63\xF6\x99\x9A\x31\xCF\x62\xBA\xC8\x91\x8F\x98\x44\x96\x1D\x9B\xA9\x94\x78\x98\xA9\x2A\xB7\x61\xAB\xAA\x8D\x8E\x96\xCD\x90\x76\x91\x4E\x90\xC1\x93\xB9\x63\x2B\x63\x95\xCC\x91\x9A\x9F\x2F\x9B\x9C\x95\xB5\x98\xA2\x99\xD7\x32\xC6\x66\x9D\xB2\x9A\x96\x99\x34\x9E\x2F\x9B\xD2\x99\xB7\x98\x4D\x33\x86\x2C\xB9\x6A\x94\x90\x9B\x8E\x97\xE7\x96\x6F\x99\xA0\x97\xC0\x31\x94\xD5\x40\xD0\x8F\x8D\x99\x38\x9E\x98\x82\xF3\x98\x59\x98\xD0\x33\x87\x61\xA3\xCF\x96\x8F\x9A\x40\x9C\x9A\x94\x03\x9A\xDA\x97\x12\x32\x83\x48\xB5\x09\x9B\x20\x93\x1E\x95\xEB\x94\x6B\x98\xBB\x99\x15\x34\x9E\x64\x97\xD0\x84\xA0\x95\xC1\x91\x86\x98\x2D\x99\x19\x9A\x9D\x32\xF7\x67\x9D\xCD\x99\x9F\x9B\x30\x9F\x39\x9B\xB5\x8D\xB5\x6F\xED\x15\xD9\xFD\x65\xB8\x9E\x7A\x8F\x2C\x9A\x12\x98\x6A\x95\x20\x9A\xD4\x32\xE9\x60\xAF\xD0\x8D\x87\x96\x44\x9F\x1D\x9B\xDA\x98\xD8\x97\x35\x34\xB2\x5F\xB7\xD0\x95\x87\x99\x43\x9F\x43\x91\x9D\x80\xCF\x8F\x86\x2F\xDB\x5E\x8B\x7E\x6A\xA1\x98\x3B\x9E\xAC\x94\xD5\x99\x80\x99\xDF\x33\xE8\x66\xA1\xCF\x85\x98\x98\x44\x9F\x60\x9A\x12\x9A\xB7\x99\x4C\x34\xDF\x66\x8E\xD1\x92\x22\x94\x42\x9D\x62\x9A\x85\x98\x2B\x92\xAB\xDD\x19\x64\xB0\xE0\x54\xA0\x98\x23\x99\xD4\x94\xCC\x94\x5F\x99\x9E\x31\xAD\x65\x8C\xC6\x8F\x95\x9E\x18\x99\x56\x98\xF6\x97\x59\x99\x1E\x2E\xA7\x63\xB8\xE4\x67\x9E\x98\x97\x6F\xF6\x95\x6F\x7D\x17\x99\xDA\x10\xE5\x01\xB2\xC8\x9A\x18\x4D\x94\x8E\x61\x96\x41\x00\xDA\x94\x50\x32\xFE\x55\x87\xD2\x80\x82\x9F\x2B\x9F\x5D\x9A\x54\x97\x78\x99\x54\x2D\xF3\x65\x90\xA0\x82\x9C\x9D\xD3\x90\xD8\x90\xF7\x96\x2A\x8F\xDE\x2F\xA9\x5A\xB0\x35\x98\x54\x96\xBD\x88\x97\x88\xA6\x92\x41\x6D\xA0\x34\xE8\x64\xAD\xD0\x9D\x31\x84\x44\x9C\xF5\x96\x01\x9A\xD7\x97\x5F\x34\x9D\x61\xA1\xD1\x9F\x84\x93\x39\x9C\x13\x5F\x4F\x97\x58\x9A\xF8\x2F\xE0\x5F\xBA\xBF\x82\x93\x96\xC5\x94\xAE\x87\xAD\x94\x75\x6E\xB9\x34\xFE\x64\xBB\xD2\x96\x39\x8D\x4B\x99\x13\x9B\x2F\x9B\x4D\x98\xC1\x34\xF1\x61\x83\xD3\x93\x87\x93\x46\x9E\x20\x9B\xA2\x98\x3B\x99\xF0\x08\xE5\x40\x83\xA8\x9B\x93\x9D\xA9\x91\x9A\x99\xAA\x99\x69\x9A\x0C\x0F\xD5\x69\x9B\xC7\x9A\x84\x99\xEB\x97\x47\x9B\xB6\x99\x6D\x9A\xE1\x31\xDD\x69\x81\xC6\x8C\x6F\x9B\xF2\x49\x5C\x94\x64\x8D\xB8\x8B\xA4\x22\xA5\x0C\xA6\xD3\x9C\x95\x98\x4E\x9F\xDB\x94\x5E\x99\xA2\x99\x3D\x32\xC7\x66\x89\xC7\x9D\xA0\x96\x22\x9F\x2F\x9A\x3C\x9B\xF1\x98\x9B\x2B\x95\xD1\x3D\x0F\x5A\xA7\x9D\x46\x98\xD1\x93\x1B\x9B\x0F\x99\xEA\x34\xA1\x64\xAC\xD3\x9D\x8E\x98\x40\x9A\x9A\x94\x3C\x9A\xFC\x98\x07\x35\xFA\x63\xB1\x25\x8C\x82\x9C\xFC\x90\x9A", +"\x99\x43\x9A\x01\x64\x00\x33\x90\x6A\x9B\xD1\x92\x8F\x93\x47\x9A\x6D\x99\x1D\x9A\xB6\x99\x77\x34\x92\x67\xB9\xD1\x82\xBB\x6D\x05\x9C\xF7\x84\xB1\x92\x30\x98\x80\x72\x26\x56\xA8\x9C\x98\x16\x9D\xCA\x93\x36\x97\x47\x9A\xDD\x64\xEC\x2B\xF5\x5D\x8D\xBD\x97\x77\x9F\xF4\x90\x8A\x95\xD4\x96\x12\x94\x5A\x30\x8B\x3D\x9F\xCB\x8F\xBE\x83\x0A\x98\x5D\x90\x9B\x8F\x51\x8F\xCE\x19\xEA\x68\x90\x67\x84\x5A\x99\x97\x33\x9F\x9B\xCB\x99\x28\x99\xAF\x2D\xB2\x63\x96\xB9\x96\x92\x98\xE5\x90\x4B\x99\xDE\x92\x2D\x99\xE0\x27\xC4\x24\x9B\x67\x9A\x97\x99\xE0\x94\x5F\x9B\x08\x6E\x1E\x5F\x37\x35\x8E\x99\x74\xBB\x8C\x62\x99\xF0\x90\x04\x95\x4F\x9A\x35\x97\x3F\x35\xD2\x58\x90\xD2\x9A\x7E\x9F\xE1\x94\xBA\x95\xB8\x99\xB4\x7E\xEA\x19\xE4\x65\xA7\xC2\x92\x98\x99\xE0\x94\x62\x9A\x15\x9B\x84\x00\x4E\x35\xC1\x66\x90\xD5\x9D\x78\x92\x55\x9F\xE3\x94\x48\x98\x1E\x96\x30\x23\xAA\x3F\xA4\x62\x83\x81\x88\x3F\x83\x26\x29\x8B\x86\x94\x99\x91\x1E\xA5\x46\x84\xBF\x96\x75\x79\x57\x9C\x6C\x9B\x5E\x9B\xAF\x95\x33\x2F\x9F\x62\xBD\x9B\x96\x79\x93\xE8\x94\xC6\x95\xB4\x97\x48\x94\x09\x35\xB9\xC7\x3A\x26\x9C\x12\x5D\x58\x98\x71\x9B\x63\x9A\xCE\x96\x7D\x35\xB4\x5E\x93\xD6\x81\x89\x95\x59\x98\xE7\x96\x9C\x91\x10\x9A\x74\xB6\x1A\x42\x8B\x76\x5D\xAC\x9B\x39\x9D\x57\x98\x29\x9B\x44\x9A\x7C\x33\xCF\x1E\xBE\xCD\x9C\x19\x90\x38\x9E\x67\x90\xA2\x98\xA0\x91\xA7\x33\xEE\x65\x41\xAF\x98\xA5\x91\x56\x98\xB5\x6B\x58\x9A\x0B\x97\x9F\x33\x8A\x5E\xA1\xCE\x8C\x78\x9D\x20\x9A\xEA\x95\xE9\x99\x2D\x98\x3B\x33\xC6\x67\x9D\xC5\x9F\x3D\x8B\x93\x7F\xAC\x88\xDC\x7A\xB0\x9A\x58\x34\x8F\x6A\x83\xD1\x83\xA9\x95\x40\x9D\x8B\x9B\x01\x9B\x6C\x9A\x09\x34\xE5\x67\xB8\xC2\x8B\xA9\x90\xA1\x19\x23\x9B\xF3\x32\xD6\x9A\xAC\x33\xAE\x6B\xAD\xC4\x9A\xA9\x9F\x12\x9E\xE9\x97\x70\x9A\xA8\x97\xC5\x35\xC0\x6A\x87\xD7\x82\xAA\x90\x17\x9D\x72\x98\xA6\x97\x5B\x8E\xE7\x12\x8C\x6A\x91\xD7\x9A\x9D\x90\x47\x99\x7E\x98\xF8\x99\xF9\x99\x8E\x33\xF5\x67\x90\xCE\x89\xA9\x95\x3D\x9C\x78\x98\x09\x99\xC2\x77\x03\x1F\xA5\x14\x95\x61\x60\xAF\x9C\x3C\x9D\x75\x9B\xC6\x92\x36\x99\x55\x32\xEE\x64\x97\xC9\x90\x93\x99\x25\x9A\x4E\x9B\x96\x99\x2B\x94\x33\x35\xC1\x5D\xB2\x60\x85\xA7\x9D\x5B\x9B\xDD\x6B\x6F\x9B\xC8\x9A\x9B\x2C\xFF\x6A\xA2\xBC\x81\xAC\x92\x7B\x93\xF5\x8D\x39\x83\xE3\x7B\x2F\x2C\xD0\x1D\x83\xD8\x95\xB0\x9D\x63\x79\xFA\x94\x6C\x9A\x60\x99\xDE\x2B\xB3\x6B\xA9\x9B\x8A\xA5\x9B\xD3\x94\x95\x98\x56\x97\xE4\x9A\x00\x36\x90\x21\x04\xB1\x8C\x81\x94\x60\x9C\x7B\x9B\xBC\x96\x6A\x95\xA1\x35\x92\x6B\xB5\xC0\x94\xAC\x91\x27\x9E\xB2\x9B\x9C\x98\xCC\x9A\x20\x15\xBC\x3E\x95\x8F\x85\x7F\x98\x57\x9C\xC4\x98\xCF\x7B\x98\x99\xA5\x34\x9C\x66\x83\xCA\x9E\x98\x95\x28\x98\x64\x98\xBD\x99\x9C\x99\x23\x33\xC5\x67\x9B\x6A\x8F\xA0\x97\xEF\x67\x51\x8D\x18\x8C\x0A\x9B\xF3\x35\x8B\x1E\xBE\xD3\x96\x96\x93\xDE\x92\x8E\x97\x06\x9A\xA4\x99\xDF\x30\xDC\x65\x8C\xC7\x85\xA6\x93\x0E\x9D\xF6\x96\xE5\x98\xAD\x79\x34\xC8\x37\x70\x75\xD8\x8E\x9F\x97\x63\x99\xA7\x98\x59\x9B\xE0\x9A\x66\x35\xE7\x6B\xBE\xD4\x89\xAF\x9A\x56\x9B\x7C\x94\x88\x8D\xDC\x9A\x28\xD6\x50\x63\x86\x3E\x90\x64\x93\x1E\x95\x3C\x93\x04\x9A\xE8\x9A\x85\x34\xE8\x5F\xA2\xBA\x88\xA4\x9A\x18\x9A\x91\x98\x68\x98\x46\x9A\xA2\x31\x8E\x69\x90\xC6\x8B\xAB\x96\x13\x98\xCF\x98\x06\x93\x11\x9A\x70\x1D\x80\x51\xBC\x6A\x86\x40\x8E\xAB\x8D\x3A\x9B\x9D\x35\x35\x9B\x01\x34\xEF\x67\xAE\xD0\x91\xA3\x9F\x3C\x9D\xA4\x99\xF4\x98\xFD\x9A\xD3\x33\xFC\x6B\xA6\xCF\x9E\xAF\x91\x2A\x98\x8A\x6F\x0F\x92\x42\x5A\xCB\x1A\xA9\xC8\x75\xBD\x97\xAB\x9F\x49\x9E\xC8\x9A\x06\x7D\xA1\x99\x11\x35\xBC\x64\x93\xD4\x83\x91\x95\x51\x9F\x3B\x9B\x45\x9A\x21\x99\xDC\x35\xA1\x61\xBB\xC7\x89\xD6\x8E\x73\x93\xF8\x4C\x80\x99\xF1\x90\x02\x32\xAC\x6D\x83\x04\x18\xB4\x9C\x42\x9F\xB3\x9B\x85\x9B\x1C\x9B\x19\x36\xA3\x6B\x80\xD6\x9E\x1E\x92\x58\x98\xD6\x8C\xEB\x8E\x5E\x9B\x40\x2B\xF2\x59\xA3\x87\x82\xA4\x90\x73\x74\x4B\x04\xB1\x9B\xE1\x98\x06\x36\xC7\x4E\x94\xC9\x93\x7C\x94\x55\x9D\xF2\x95\xBF\x8F\xCB\x97\x1F\x34\xDE\x65\xAD\xD7\x91\x9B\x9B\x5C\x9E\x41\x63\x60\x8E\x34\x92\x15\x32\x87\x3B\xA6\xE2\x60\xD8\x8C\x49\x9D\x49\x98\x97\x04\x87\x92\x81\x36\xAF\x60\xA9\xBF\x9D\x9C\x9E\x11\x99\xD9\x9B\x8E\x9A\xD2\x9A\x3D\x36\xA6\x6B\xBE\xAE\x8E\x61\x69\x2B\x9C\x74\x6A\x97\x98\xCA", +"\x8B\x60\x32\xAD\x4D\x8B\xC9\x82\x62\x92\xDF\x8D\x61\x95\x1C\x95\x84\x00\xF0\x36\xA1\x69\x9B\xC6\x9A\xB2\x97\x17\x9C\xCB\x9A\x09\x96\xF2\x96\xFB\x23\xDE\x61\xB7\xAC\x85\xA8\x91\x6E\x99\xA3\x99\xE6\x75\x96\x9A\xA0\x1E\xA3\x56\x8F\x5D\x9C\x7F\x96\xD4\x91\x66\x75\xA7\x95\x84\x9B\xBA\x34\xC6\x6D\xB8\xD8\x8B\x93\x95\xEA\x97\xCF\x94\x6D\x99\x40\x97\x32\x2E\xA5\x6B\xA3\xC4\x98\x63\x91\x65\x7B\xAB\x97\x9D\x98\x6E\x93\x22\x2A\x97\x3C\xA2\x5D\x8C\x3C\x50\x72\x9A\x9A\x9A\xC8\x9A\x37\x9B\xC0\x35\xBB\x6A\x8A\xC8\x81\x8D\x9C\x20\x9B\x74\x98\x4D\x98\x46\x9B\x92\x31\x8E\x6D\x9C\xDC\x8E\xBB\x81\x6F\x90\xEE\x8B\xF9\x8D\x48\x99\x8A\x2B\x88\x6E\xAE\xDA\x99\x6B\x80\x6B\x9C\xBA\x99\x11\x9A\x4F\x9B\x32\x34\xA0\x6D\xA4\xCF\x82\xB5\x9B\x5D\x9C\xD4\x99\x23\x99\x2E\x4E\x3A\x30\xD0\x66\xA3\xD4\x0B\xBA\x97\xDC\x85\xE9\x98\xA7\x9A\x18\x9A\x50\x37\xC7\x68\x92\xDD\x94\xA1\x9A\x5D\x9B\x81\x98\x99\x9A\xE7\x98\x89\x22\x8C\x56\x8D\xC1\x98\xB6\x75\x73\x9F\x9C\x9B\xCD\x9A\x00\x96\x85\x36\xB1\x6B\x85\x7B\x8A\xB1\x9E\x80\x94\xC5\x9A\x55\x96\x17\x9B\x0D\x30\xAE\x69\x91\x8B\x8E\x02\x95\x72\x93\x39\x70\xB3\x98\x8B\x75\x34\x35\x96\x6D\x87\xB4\x2D\xBB\x9C\x4F\x9F\xED\x99\x99\x97\xB8\x9B\x28\x36\xCB\x61\xB4\xDD\x80\x5F\x95\x5B\x9A\x7C\x97\x6D\x9A\xF2\x95\x42\x37\xF7\x5F\x96\xCA\x2B\xCD\x52\x2E\x9F\xA8\x9A\xE1\x94\x52\x8F\xDB\x2D\xCC\x6A\xB7\xA9\x24\xBC\x9F\x54\x9A\x94\x9A\x0D\x96\x42\x9B\xE4\x35\x9F\x63\xA6\xD7\x8B\x90\x90\xD0\x92\xD1\x98\x69\x98\x3B\x9B\x7B\x1E\x91\x6F\x8D\xD3\x99\x97\x93\x75\x95\xF6\x88\xA5\x74\xCE\x9B\x7A\x35\x9E\x6F\xB3\xB2\x80\xBD\x9F\x66\x9A\xE7\x98\xE8\x98\xD2\x9B\xA2\x33\xA6\x6F\xA4\xCE\x80\xBA\x90\x21\x9A\xCA\x9A\x17\x99\xE5\x8C\x15\x0E\xBE\x41\xA6\xCB\x95\xAB\x97\x58\x60\xF6\x9A\x63\x9A\xD9\x9B\x3E\x31\xB4\x6F\xB9\xDC\x85\xAF\x9C\x53\x9A\xCE\x98\x5A\x9A\x3A\x9B\xE0\x36\xFC\x5D\xAC\xD7\x88\xAD\x9F\x04\x94\x17\x9A\xC8\x90\xA0\x95\x22\xF9\x6A\x63\xA6\xB8\x8B\xAC\x91\x16\x9D\x37\x95\x96\x9A\x6F\x97\x0D\x37\x98\x68\x9D\xD9\x9C\x86\x9F\x65\x9B\xA0\x99\x98\x9B\x5B\x9B\xDD\x32\x96\x6E\x83\xD5\x99\xAC\x90\x09\x0B\xB3\x99\x81\x5C\xE3\x9B\x9E\x35\xC8\x6F\x90\xC5\x8F\xAD\x98\x78\x9E\x94\x9B\x01\x98\x54\x9A\x09\x30\xF6\x6E\x8B\xC0\x98\xBB\x99\x04\x98\xC6\x99\x09\x83\x72\x98\xCA\xA8\x55\xB0\x70\xDF\x8D\xAD\x9D\x4F\x99\xFC\x99\xAC\x9A\x80\x9A\xB3\x36\xBE\x64\xB5\xDA\x85\x91\x92\x66\x9F\x44\x9A\xFA\x9B\x71\x9B\xC1\x8B\x61\x66\x8F\x9F\x23\xC0\x91\x5E\x9D\x00\x9D\x67\x99\xFA\x9B\x4A\x36\xF0\x65\x8C\xD9\x92\x97\x9E\x64\x9B\x95\x98\x94\x9B\xC1\x99\xBE\x37\xA2\x16\x94\xD2\x95\xB2\x9D\x09\x08\x8A\x80\xF9\x91\xB7\x2A\x5C\x37\xE8\x1C\x9B\xDA\x96\xAF\x92\x47\x98\xBF\x9A\xF8\x99\xB1\x9B\x49\x34\xC2\x67\xA2\xC0\x96\xBA\x94\x2C\x4E\xBB\x99\x84\x32\x0A\x9C\x05\x36\xE2\x6B\xB4\xDB\x88\x90\x96\x7B\x9A\xB8\x98\xEE\x9A\xE2\x9A\x3E\x37\x8E\x64\xBC\xDE\x86\x9D\x9E\x7F\x9A\x04\x9D\xB9\x9B\x73\x99\x28\x31\xC9\x6E\xBA\xFC\x09\xC1\x94\xF3\x80\x7E\x99\x92\x9B\x99\x99\x4B\x36\xB5\x66\x8D\xD9\x97\x99\x9F\x64\x9B\x78\x99\x94\x9B\xFF\x9A\x23\x0A\xA5\x30\x82\xD8\x85\x31\x88\x83\x9E\xC6\x98\xC7\x96\xC8\x9A\xC8\x36\xE5\x6A\x8E\xB1\x87\xAB\x99\xEF\x93\xE4\x96\x71\x9B\x21\x9C\xC8\x35\xA1\x70\xA3\x08\x8B\x8A\x9D\x5D\x65\x0B\x9C\x9B\x9B\x2F\x9C\xA0\x35\xA4\x6E\x8B\xBB\x86\x75\x9D\xEC\x97\xEF\x97\xB3\x96\x1F\x9B\x0F\x36\xED\x6A\xB9\xB1\x94\xB2\x9B\x18\x91\xC4\x98\xC1\x88\x01\x9C\x4C\x38\xE3\x1E\x9E\xDD\x8C\xC1\x9D\x69\x9E\x05\x9C\x1D\x9A\x18\x9C\x76\x34\xB2\x70\x9F\xCA\x94\xC1\x98\x3E\x99\xC6\x9B\x10\x97\x24\x8C\x2C\x30\xEE\x70\x99\xDA\x8D\xB3\x90\x77\x99\xF4\x9A\xA1\x9B\xD1\x9B\x3C\x37\xA5\x6F\xA1\xAF\x8A\x5D\x98\x7A\x9C\x75\x95\xAD\x99\x3C\x91\x05\x0D\xFA\x20\x98\xB1\x94\xB9\x91\x88\x9D\x21\x9B\x74\x9B\xAF\x9B\x5C\x34\xE1\x6E\x9E\xD1\x87\xA9\x90\x46\x9D\xEC\x9A\x0D\x9B\xB3\x9B\x0D\x34\xE6\x6C\xB1\xB9\x97\x8C\x99\x97\x52\x12\x9D\xB1\x9A\xF9\x9B\x03\x34\xCE\x6E\xBE\xD2\x96\xAE\x90\x4C\x9C\x15\x9E\x30\x9A\x57\x9C\x62\x34\xB0\x71\xB8\xD0\x84\xB7\x9C\x87\x9E\xA9\x6A\x04\x9A\x61\x9B\xC9\x49\x25\x71\xAC\xC4\x9B\xC1\x9C\x96\x6A\x0C\x9C\xC8\x97\xF2\x96\x1C\x34\xE7\x6F\x80\xE3\x84\xA6\x99\x6B\x9D\xCC\x99\x19\x9B\x43\x61\xDE\x21\xD9\x59\xAB\xA1\x86\x20\x92\xF3\x6A\xFB\x9B\x1B\x95\x2A\x9A\xFD\x32\xCB", +"\x70\x9F\xDF\x99\x9B\x9A\x7C\x98\xC3\x9A\x33\x9C\x0D\x9B\x12\x37\xFA\x5D\x8A\xCD\x92\xBE\x98\xED\x8A\x85\x93\xA2\x74\x28\x81\x7D\x34\xC4\x1E\x92\xC7\x9A\x7A\x99\x27\x9C\xEB\x95\xF1\x9A\x65\x9C\xEC\x32\xFA\x66\xA1\x27\x92\xBB\x9E\x23\x93\xF1\x99\x33\x98\xFD\x9B\x47\x30\xFC\x6F\x91\xC3\x85\xC2\x9F\xF8\x60\xDA\x98\x76\x97\x54\x9B\x50\xFD\x2B\x6D\xA1\xE3\x86\x30\x28\x8F\x99\xA4\x9B\x29\x9C\x42\x9C\x60\x37\x86\x71\xA6\xD4\x88\xC4\x98\x52\x9A\x11\x9C\xFE\x98\x46\x9C\xFA\x33\xEF\x59\xA6\xD1\x86\x8F\x99\xDD\x92\x44\x91\x1A\x9B\x7A\x9C\x6B\x34\xB5\x6A\x9E\xDF\x91\xB7\x9E\x0A\x9A\xBA\x9A\x16\x9A\x54\x9C\x24\x35\x92\x72\x9F\xDA\x93\xC2\x91\x3C\x9D\x0A\x9F\x0C\x9D\x2B\x9C\xA5\x36\xDA\xB2\x4F\xD1\x80\x46\x99\x5B\x67\xF3\x95\x20\x9B\xD0\x97\x5E\x2F\xCA\x6E\xA3\xE3\x93\xB7\x9E\x3A\x9B\x06\x99\x78\x87\x31\x8D\x56\x35\xD2\x4F\xA4\x7B\x9E\xB0\x91\x7E\x95\xD7\x6E\x25\x9A\x6C\x88\x70\x08\xFE\x26\x99\xA3\x8E\x91\x98\x4A\x8A\x4A\x90\x37\x93\x95\x35\xC6\x29\x8A\x6E\x82\xD0\x89\x8C\x96\x89\x9C\x1F\x9E\xE9\x94\x66\x98\xA8\x2B\x9B\x71\xB1\xBF\x9D\xC4\x93\xFF\x94\xA2\x7C\x57\x86\x25\x7B\x94\x2A\xA0\x5C\x9A\xDC\x91\x18\x8F\x6A\x96\xDD\x9B\x49\x01\xA8\x9C\x21\x37\xB8\x71\x94\xE5\x95\xBD\x9C\x7C\x9B\xE7\x98\xA2\x9B\x9E\x9B\xBA\x37\xBF\x6E\x9C\xE5\x86\x8D\x9E\x95\x9C\xB8\x84\x58\x9D\x57\x95\x95\x2A\xAF\x6A\x89\xC9\x86\x36\x9A\x23\x88\xD9\x92\xC7\x9B\x27\x62\x68\x39\xB6\x6E\xAA\xE5\x9B\x7B\x92\x87\x9D\xEF\x94\xC4\x9B\x28\x94\x40\x38\xF1\x72\x82\xE1\x93\xCB\x94\x2B\x9A\xF5\x9B\xC2\x94\x08\x98\x8B\x22\xCC\x1F\xA3\xD3\x94\x80\x9B\xD8\x85\x53\x95\x60\x9C\xB7\x9B\x83\x39\xD2\x64\x81\xCA\x99\xC0\x97\x4A\x9B\x03\x9D\x2A\x9B\x0E\x9C\x2D\x36\x9F\x70\xAD\xD2\x8A\xC3\x9F\x00\x9C\x51\x98\x33\x7E\xBB\x96\x28\x1E\xE4\x55\xB9\xB5\x85\x31\x87\x99\x9D\xF0\x99\x66\x9D\xA8\x9A\x85\x39\xB3\x63\xB5\xE1\x95\x8D\x99\xEA\x96\x0C\x95\x11\x94\x92\x98\x95\x6D\x39\x3C\x9D\xDF\x8D\xCD\x9D\x79\x9B\xE1\x98\xF8\x9B\x0B\x9C\x55\x39\x89\x6F\xBD\xCD\x98\xBF\x95\x04\x98\x20\x9F\x33\x98\x81\x9C\x48\x31\x84\x72\xA5\xE6\x97\x95\x96\x96\x99\x21\x00\x6F\x9D\xD8\x9B\xBE\x39\xE4\x71\xB4\xDF\x81\xCE\x96\x7F\x9B\x08\x98\x71\x9C\xA2\x98\xC6\x39\xC6\x62\x88\xE7\x89\x94\x9C\x5C\x87\x95\x99\xAA\x92\x64\x9A\x41\x2D\xA3\x38\xAA\x82\x85\xDE\x89\x72\x91\xCD\x9B\xF3\x33\xE7\x9C\xC7\x37\xD1\x73\xBC\xE4\x87\xB0\x95\x72\x9D\x4D\x9B\xC9\x9B\x37\x99\x29\x37\xF9\x6D\xAB\xDC\x91\xD2\x85\x7D\x9F\xAD\x9A\x1D\x98\xCB\x9B\xBD\x36\x98\x6F\x83\xAD\x8E\x3B\x97\x9E\x9D\x21\x9E\x05\x9B\x93\x9C\x10\x39\xA9\x71\xAA\xE4\x91\xBA\x9C\x92\x9E\x7E\x9A\x45\x9D\x25\x9A\x18\x39\xCD\x68\xA9\xDD\x9B\xAA\x9D\x7A\x98\xD0\x8C\xA5\x74\xF4\x9C\xF1\x37\xEA\x73\x83\xDA\x93\xCE\x9C\x96\x9A\xF4\x99\xF3\x9B\x1F\x9C\xE8\x35\xC1\x70\xA7\xE1\x8C\xCC\x91\x49\x9F\x13\x9C\xF0\x8D\xB5\x95\xE5\x20\x88\x6B\x82\xAD\x83\x0F\x96\x57\x9B\x21\x9E\x40\x00\x08\x9D\x04\x38\x86\x6F\xA6\xD8\x98\xC0\x90\x85\x9A\x03\x9E\x14\x9C\x0E\x9C\x54\x38\x9E\x70\x96\xE1\x80\xC1\x98\x85\x9E\xA5\x99\xDF\x93\xEB\x9B\xD8\x2D\xD9\x6F\x87\xBE\x9C\x73\x79\xB8\x90\x0B\x62\x73\x9C\xFF\x9C\x42\x34\x80\x74\x8F\xE1\x9D\x9D\x91\x85\x9F\x77\x99\x81\x9D\xFD\x9A\x07\x3A\xF8\x68\x89\xE8\x9A\xA3\x98\xEC\x74\x1A\x9A\x7A\x81\xE7\x90\x28\x3A\x95\x70\xAA\xE8\x88\xB2\x97\x62\x9D\x3A\x9E\x50\x99\xEB\x9C\xC3\x32\xD9\x73\x85\xCB\x82\xCD\x9F\x62\x9C\x34\x9E\xD0\x90\xD5\x9A\x5C\xA2\x51\x74\xB9\xE0\x96\xC0\x9A\x31\x9B\x48\x9E\xFC\x99\x22\x9D\xF4\x33\xC7\x74\xA1\xDA\x89\xD2\x9A\x52\x9B\x49\x9C\xDC\x99\x08\x9C\xF7\x30\x85\x63\xBF\xE8\x9B\xC9\x93\xA1\x9B\xBC\x99\x85\x9D\x4B\x9C\x17\x3A\x99\x71\xB9\xDE\x9A\xCA\x92\x2B\x9C\x43\x9C\x5B\x9A\x49\x9A\xD1\x2B\xF8\x57\xBD\x07\x94\x9B\x93\xFB\x8A\x4C\x9E\x17\x9D\x98\x97\x9A\x39\xEE\x65\x9C\xE6\x97\xBF\x9E\x99\x99\xFF\x98\x68\x9D\xBB\x9B\x5C\x3A\xF9\x6E\x94\x4F\x45\x9C\x9A\xCE\x6E\x50\x9F\x1B\x9C\x44\x9D\xB0\x39\x9B\x73\xAD\xE8\x9D\xCC\x9F\xA2\x9F\x33\x9D\x8C\x9D\xD0\x9C\x33\x3A\xA3\x73\xB5\xE8\x88\x79\x95\x8C\x99\x7F\x97\xCD\x76\xDB\x93\x27\x3A\xC0\x74\x99\xD1\x83\x84\x9A\x8B\x9E\x9A\x98\x2F\x9C\x6C\x9A\xBE\x38\xDA\x69\x93\xE3\x9C\xA6\x92\x8C\x9C\x8C\x98\xB0\x97\xB8\x07\x0C\x2C\xE4\xD6\x56\xEA\x93\xC4\x90\x87\x9F\xD8\x99\x6C\x9D\xA9\x9A\x0A\x36\xD5\x6A\x8C\xD8\x97", +"\xAA\x9E\x60\x99\xAB\x99\x5A\x91\xC7\x8A\x63\x10\xF2\x89\x7B\xEA\x97\xC5\x92\xA1\x9B\x94\x9A\x9D\x9D\xE5\x9B\x16\x3A\xEE\x72\x98\xE5\x8F\x7F\x9C\xA7\x9F\x91\x9A\x9F\x9D\x46\x9B\xCA\x39\xEB\xAB\x53\xBC\x9F\x07\x6D\x09\x0E\x49\x86\xAE\x9C\x55\x9D\x26\x39\xAC\x75\xA8\xE4\x95\xAE\x9A\x8A\x9F\xBA\x99\xAC\x9D\xEC\x9A\x54\x37\xE6\x6E\x95\xE3\x88\xBB\x98\x3D\x9B\xDD\x94\x3B\x8E\xD6\x9C\xE0\x3A\xF4\x6B\xA2\xD4\x83\xD7\x9F\x74\x9B\x40\x9E\xD8\x9A\x35\x9D\x53\x37\xEC\x74\xBD\xD7\x90\xC9\x97\x75\x9F\xDC\x6C\xC0\x96\x16\x81\x02\x2F\x80\x73\xB1\xEB\x8C\xB8\x90\x9C\x9F\x4E\x9E\x55\x9D\xF6\x97\xD3\x3A\xB0\x65\x95\xEB\x8B\xB4\x97\xAD\x99\xE8\x99\xB6\x9D\xFB\x95\x2B\x32\xD5\xBC\x56\xD9\x96\x78\x92\xA8\x6B\x59\x9C\xB6\x9A\x1D\x9C\x3D\x39\xDB\x6D\xB0\xCE\x9D\xB6\x92\x3B\x9E\x36\x9F\xAA\x96\xDC\x9C\x57\xB0\x11\x76\xA1\x15\x67\xC6\x96\xA2\x99\x20\x02\xC5\x9C\xEC\x98\xD9\x36\xDC\x4E\xB3\xE1\x86\xB9\x93\x9B\x98\xE5\x9A\x6D\x98\x95\x9B\xB8\x31\xA0\x76\xAF\xC2\x7A\xA1\x9C\x91\x9C\xCF\x9B\x6F\x98\xF2\x90\x87\xC5\x27\x76\xAF\xC7\x89\xD9\x93\x77\x92\x63\x9F\x4F\x9D\x55\x8F\x41\x39\xDA\x5C\x8F\x54\x93\xC5\x8E\xC8\x90\x68\x94\x0F\x9B\x9B\x9D\x3E\x34\xFF\x6C\xB3\xE9\x84\xC9\x99\x0E\x99\x5C\x9F\x25\x99\x03\x9C\x19\x34\x81\x6A\xA5\xDF\x8E\xA7\x94\x50\x9D\x01\x9E\x41\x9B\x5A\x9D\xDE\x34\xBB\x6D\xB3\xE4\x98\x1E\x68\x90\x9C\x02\x7A\x42\x9D\xAF\x9A\x4B\x3B\xD2\x72\x9A\xDA\x9C\xA5\x9D\xAA\x9B\x9D\x9B\x35\x9B\x76\x9A\x0B\x38\xC0\x64\xA8\xDF\x83\xB3\x9B\xAE\x99\x16\x9F\x35\x9D\xCD\x8F\x5C\x1D\xC0\x48\xAC\xA2\x82\x22\x99\xB3\x9B\x60\x9F\x6F\x9D\x32\x9D\x55\x3A\x8B\x75\x96\xE7\x8D\xD4\x95\x9C\x9F\x51\x9F\xFE\x9B\x48\x9D\xFD\x37\xDE\x74\xAC\x42\x87\xB5\x9B\xAD\x75\x26\x9F\x85\x99\x61\x94\xED\x1A\xC1\x5B\xA7\xE5\x96\xDB\x92\x9D\x9F\x59\x9E\x39\x9C\x38\x9B\x63\x38\xCE\x6F\xA5\xE1\x9C\xB0\x93\x7D\x94\x28\x9D\xB6\x8F\xD3\x74\x47\x39\x89\xB9\x59\x43\x8A\xCA\x9D\xD0\x94\x29\x9D\xF3\x66\xA7\x9C\x7E\x30\xDC\x14\x36\xA7\x89\xCB\x9D\xAC\x9F\xF3\x98\x85\x9C\x68\x9D\x78\x3A\xD2\x75\xBE\xE3\x99\xCA\x9D\x78\x9C\x13\x9F\xE3\x9B\x3B\x9B\x7A\x37\xDD\x64\x92\x8B\x99\xCB\x93\x96\x9E\x96\x89\x6D\x76\x5B\x9A\x81\x2A\x9E\x69\x83\x04\x03\xDD\x92\x98\x9D\x74\x9F\xEC\x9B\xD3\x9D\x8F\x3B\xBD\x70\xB1\xD9\x98\xD0\x93\x67\x9A\x43\x9E\x7A\x9A\x34\x9C\xD3\x37\xC9\x65\xA9\xE6\x48\x92\x9A\x4C\x9F\xC9\x7B\xB1\x93\x23\x71\x08\x1E\xC4\x6C\x86\x04\x1C\xDD\x98\x99\x9E\x77\x9D\xF2\x9A\xE0\x9D\x61\x38\x90\x77\x8F\xE3\x91\xB8\x91\x8D\x9B\xE2\x9A\xD5\x9D\x8A\x9B\x58\x3B\xF3\x69\xB3\xB5\x8A\x14\x94\xE1\x8C\x51\x93\x04\x98\x6C\x8A\x15\x30\x9D\x55\x94\xEF\x8E\xCD\x96\xBD\x9B\xFE\x9A\xE3\x9D\xEC\x9D\xC2\x3B\x91\x77\x84\xEF\x8F\xBE\x96\xBC\x9D\xCE\x9B\xEB\x9D\xD4\x9B\x0F\x3B\xAA\x43\xBB\x3C\x0F\xCC\x8A\x71\x6F\xE8\x99\x3E\x9A\xCF\x95\xEB\x3B\xBD\x73\x93\xE5\x84\xCC\x9A\xA9\x9C\x48\x9E\x8B\x9C\x23\x9D\x30\x3A\xAD\x72\xB2\xE8\x8F\xC9\x94\xA3\x99\x26\x9F\xCD\x7A\xDD\x9C\xCF\x21\x81\x78\x90\xE7\x83\xE0\x99\xA8\x9C\x55\x9B\xC1\x9C\x57\x99\x09\x3B\x8D\x69\x8B\xEC\x87\xBD\x97\xBF\x9E\x13\x9E\x63\x9D\xA8\x93\x6A\x37\x9D\x6A\x98\xDB\x72\xE0\x99\x9E\x9C\x82\x9D\xA6\x9C\x45\x9D\x9B\x3A\x8C\x75\x9D\xEA\x8E\xD4\x9F\xA9\x98\x52\x9D\xA8\x9D\x2E\x9D\x58\xBE\x47\x69\x9F\xE8\x92\xA5\x9F\x77\x99\xAB\x84\x42\x8A\x70\x9C\x60\x3B\xD3\x77\x8C\xEE\x8B\xCF\x9A\x6D\x98\xC1\x98\xB7\x9B\x60\x9D\xDE\x36\xC8\x40\x91\xDF\x97\x63\x94\x9F\x9D\xEF\x9A\x7D\x9C\x00\x88\xF8\x39\xD8\x6F\xA4\x8C\x8C\x17\x99\x2E\x9B\x65\x34\x09\x9F\x08\x9D\x26\x3C\xFC\x6A\xBF\xEA\x9E\xAB\x9A\x6C\x9B\xC3\x98\xB3\x9B\x0E\x9B\x83\x35\x92\x3C\x91\x83\x8C\x80\x8E\xA0\x9A\x24\x9F\x13\x9F\x14\x9D\xAF\x39\xD2\x78\x85\xF0\x87\xD3\x97\xC0\x99\x4D\x9D\x02\x9E\x03\x9D\x2E\x39\x8B\x71\xBC\xEB\x97\x9E\x93\xD5\x4D\x61\x98\x78\x6F\x87\x99\x88\x1F\xF3\x6A\xB3\x54\x90\xD5\x67\x58\x67\x8B\x9E\x94\x9D\x30\x9E\x60\x38\xD3\x78\xA2\xD6\x97\xB7\x9B\x6C\x98\xC0\x95\xB3\x9B\x80\x93\x80\xFD\x69\x3C\xAC\x38\x9A\x1F\x89\x9F\x99\xA9\x98\x48\x9C\x29\x6C\x3D\x3A\xAE\x41\xBA\xF0\x94\xD3\x9E\xAC\x9C\x19\x9E\xD1\x6C\xBD\x9D\x57\x3A\xFC\x76\x98\xE7\x9E\xDB\x91\x90\x98\x70\x9F\x40\x9C\xC1\x9D\x4A\x15\xCE\x74\x8B\x76\x56\xE3\x93\xA6\x9B\x4A\x9F\x20\x9C\x33\x9D\xF7\x35\xE8\x74\xB9\xD7\x98\xD7\x94\x76\x99", +"\x5D\x9F\x2B\x9D\xB6\x9D\xC3\x38\xEF\x2F\x80\xE0\x94\x72\x85\x62\x84\x93\x9F\xA1\x9C\xC4\x98\x04\x3C\xA8\x78\x86\xF0\x9C\xD4\x98\xC0\x9E\x53\x9E\x02\x9E\x50\x9D\x0C\x3C\xA2\x75\x8E\xF0\x87\xEE\x42\x81\x99\xC2\x32\x2B\x9F\x4B\x9D\xB0\x3C\x95\x78\xBB\xCD\x82\xCE\x92\x5B\x98\x4B\x9F\xDF\x98\x2D\x9D\x81\x33\x96\x79\x89\xE7\x98\xE4\x9D\xCF\x72\x50\x9E\xC4\x9D\x12\x9C\x6F\xF7\x10\x45\x89\x04\x1F\xE5\x9C\xAB\x98\x53\x9E\x18\x9E\x59\x9E\x64\x3C\xB4\x79\xA6\xF1\x96\xE5\x98\xC6\x9B\x81\x9E\x1A\x9F\x06\x9E\xD2\x91\x36\x70\xBD\xA5\x34\xE6\x9C\xAC\x99\x8A\x9D\x1E\x9F\x31\x9E\xA1\x3C\xE5\x78\xA3\xF2\x87\xE3\x98\xA4\x99\x8D\x9F\x45\x9D\x35\x9E\x8D\x38\x94\x50\x8E\xF3\x83\x3A\x87\xAA\x98\x35\x87\x34\x9F\x1D\x9E\x75\x3A\x8E\x79\x94\x73\x76\xD2\x91\x2C\x9E\x98\x9C\x6D\x9A\x64\x9E\xB6\x35\xDB\x73\xB8\xD6\x99\xDF\x95\x79\x83\x4A\x8D\x1A\x6D\x2A\x6C\xE4\x3C\x97\x76\xA4\xE9\x9B\x9D\x90\xCA\x9D\x05\x9E\x28\x9F\x17\x9C\xA4\x3C\xB1\x70\xAE\xF3\x88\xD0\x90\xCF\x99\x23\x9F\x8D\x85\x0F\x96\xC9\x3A\x82\xB5\x49\xF4\x88\xD9\x98\xB1\x9C\x3D\x9F\xCA\x9C\xF7\x9C\x2D\x3B\xF0\x73\xAF\xEC\x92\xCF\x91\xB3\x9C\xE5\x9B\x24\x9B\x23\x9C\xC1\xD0\x49\x67\x92\xCA\x8B\xE4\x9C\xB4\x9C\x2C\x9A\xD3\x9C\x64\x98\x79\x3B\xA9\x78\xBB\xED\x8B\xE1\x9D\xB7\x9D\x85\x9F\xDF\x9D\x17\x9E\x92\x3A\xA3\x75\xBF\x61\x6C\x98\x85\xA0\x5B\xA3\x9F\xCE\x9D\x8E\x9E\x3D\x3C\xED\x73\x89\xD8\x8F\xCF\x9B\x60\x99\x3E\x9D\x83\x9A\x3C\x9C\xC6\x3A\xEA\xEF\x42\xD9\x9A\x41\x9F\xEA\x91\x20\x02\x4F\x9E\x03\x99\xCD\x33\xF4\x75\xBB\xE2\x85\xD7\x9D\x8B\x9C\x22\x9D\x2B\x9C\x53\x9E\xC1\x38\xA8\x79\xB6\xEA\x92\xE8\x88\xD2\x9B\x6E\x99\xC5\x96\xFF\x99\xF2\xC4\x4F\x7A\xA8\xF2\x20\xEA\x9A\xB2\x9E\x30\x9E\x97\x9B\x90\x97\xE9\x38\xE6\x70\x87\xEF\x8D\xD8\x9D\x7B\x9A\xA7\x9E\xB6\x9D\x79\x9E\xD4\x07\xF5\x78\xB8\xF3\x8D\xE4\x99\xB1\x9E\x87\x9F\xC6\x9C\x20\x9E\x1D\x3B\xCE\x57\xB7\xE6\x86\xE9\x9A\xCC\x09\x0D\x95\x7F\x98\x03\x92\xBD\x31\x8A\xC8\x77\xEC\x9E\xB3\x98\x8C\x9E\xA9\x9F\x5C\x9E\xD3\x9D\xEF\x3B\xFA\x78\xBA\xD8\x91\x9D\x9C\x63\x9F\xA8\x9E\xBE\x9B\x4A\x97\xD4\x37\xFD\x7A\xA4\x7D\x92\xAB\x98\xCA\x95\x46\x03\xD0\x88\xEA\x98\x84\x28\xB7\x70\x62\xF5\x9C\x03\x43\xB6\x9C\x9A\x99\xD9\x9C\x89\x9A\x67\x3B\x94\x6A\x98\xD7\x96\xA8\x93\xAB\x99\x9E\x99\xF8\x9C\x84\x9A\x6F\x3B\x93\x6F\x9C\x7E\x8B\x9B\x8D\xB5\x9C\xEE\x96\x5C\x9E\x46\x9E\x88\x3D\xFA\x79\x8D\x75\x7C\xE7\x99\x62\x9E\x9F\x9F\x8A\x9A\x4A\x9E\xC7\x39\xCA\x79\x9C\xE7\x8E\xEB\x93\xB8\x9C\xF3\x95\xA4\x9B\x55\x94\x1F\x39\xA4\x44\x94\xAA\x7B\xEC\x91\x58\x45\x57\x9F\xC8\x9A\x74\x9E\x0E\x3D\xEA\x79\x90\xF4\x8C\xE7\x9B\xA6\x9B\xA2\x9E\x92\x9D\x8A\x9E\x0A\x3A\x8D\x59\xBC\xD1\x9F\xED\x91\x80\x74\x0A\x87\x21\x9E\xEE\x60\xD4\x36\x83\xD8\x62\xEE\x87\xEC\x9F\xBB\x99\xB1\x9C\x72\x9F\x42\x9C\x0F\x3D\x87\x71\x91\xF4\x89\xC4\x9E\xDC\x9D\x4D\x9C\x74\x9E\x26\x9D\x5C\x31\xA5\x75\xAC\xC8\x97\xCB\x63\x87\x87\xF5\x8C\x43\x97\x92\x7F\x50\x22\xD8\x69\x4D\xE7\x8A\x17\x7C\xDD\x9F\x7A\x9E\x77\x9E\x6C\x9E\xE9\x3C\xDA\x79\xAB\xF3\x9C\xE6\x9D\xCE\x9E\x9B\x9F\x3B\x9E\x70\x9E\x5F\x22\x98\x6E\xBB\x5C\x89\xA6\x9A\xD2\x91\x95\x67\xC0\x9B\x08\x9B\x5F\x19\x86\x6E\x8C\xB9\x9C\x52\x06\xA1\x92\x6C\x9C\x25\x9D\xC3\x9B\xD4\x39\x90\x79\xBD\xF3\x92\xE4\x99\xA5\x98\xB7\x9E\x76\x9C\xDD\x9E\x03\x3D\xDD\x73\xBB\xDD\x81\xCB\x9E\x56\x9B\xB7\x97\x2C\x9A\xA2\x96\xA0\x38\xA8\x1C\x51\xEF\x9D\xB7\x98\x26\x75\xBE\x9E\xFB\x9C\xD9\x9E\x3B\xE2\x23\x15\x98\xE2\x8F\xCB\x9A\x89\x9D\x75\x9F\x56\x9D\x0E\x9E\x5D\x39\x9F\x78\xBF\xBB\x80\xA7\x90\x34\x80\xE6\x9B\x8E\x9C\x07\x35\xE4\x34\x82\xC5\x66\xF8\x99\xC5\x92\xD5\x9E\x55\x9C\x55\x9E\x58\x9D\x56\x3D\xBF\x71\x98\xF5\x94\xC6\x9E\xA6\x9C\x72\x9B\x37\x9B\xD9\x4B\xF6\x34\xFD\x77\x9D\x9B\x88\xBA\x9E\xA3\x9C\xBE\x9C\x6C\x9F\xEE\x9E\x28\x3E\xAE\x13\xBF\xEC\x81\xFC\x8F\xF5\x8F\x06\x9B\x65\x9B\x1C\x98\x10\x3C\xA8\x75\x8B\x89\x7B\xF1\x9B\x96\x98\x75\x9F\x05\x9F\x45\x9A\x19\x3C\x89\x6D\x9B\xF0\x9B\xBD\x9C\xD6\x9C\x08\x9C\x33\x9E\x03\x8F\x00\xFD\x73\x7B\x9C\x8E\x7C\xF2\x91\xCB\x9E\x82\x9C\x31\x9F\xB9\x9B\xB6\x3D\xF5\x6E\x96\xF8\x9B\xD2\x98\xD3\x99\x70\x9D\x0C\x9E\x01\x9F\x59\x19\x84\x7C\xA4\xAC\x91\xA9\x9E\xDB\x94\xE0\x98\x19\x98\x78\x7B\x5B\x3E\xCF\x7C\xB6\xF7\x91\xF2\x9B\x6F\x93\xCA\x9E\x10\x95", +"\x2A\x9F\xB3\x33\xAB\x58\xA8\x37\x83\x70\x98\xC4\x9A\xF8\x98\x5D\x9B\x29\x9A\x7C\x30\xB8\x78\x87\xDC\x8E\xF2\x9D\xD2\x9D\x2E\x98\xC1\x9C\xBC\x9D\x2C\x3A\xB3\x79\xAA\xF0\x95\xE5\x9C\xC2\x9F\x96\x9E\x0B\x9F\x5C\x9E\x30\x3C\xBB\x79\xA9\xB8\x6C\xD0\x9C\xC5\x9D\x5F\x93\xA6\x70\x36\x9F\xC2\x3C\xFB\x71\xAF\xF9\x9D\xC7\x91\xE7\x9C\xF1\x98\x40\x9E\xC7\x9B\x02\x3D\x90\x6F\x84\xF4\x80\x13\x70\xE6\x37\x02\x89\x81\x96\xCA\x9E\x07\x2E\x81\x4F\xB8\x5E\x67\xF5\x92\xE8\x9F\xC4\x9D\x5D\x9E\xA1\x9E\x3F\x3C\xC4\x7A\x82\xEB\x86\xEA\x94\xAC\x98\xA9\x9F\x96\x96\xC1\x95\xD6\x37\xA7\x66\xAD\xAD\x89\x99\x97\xB3\x99\x91\x9C\xEC\x94\x23\x72\xA8\x3E\xA7\x78\xAE\xF9\x94\xED\x9A\x78\x9D\xD5\x9F\x3F\x9D\x39\x9F\xC9\x3C\xF5\x7C\x97\xF2\x9C\xED\x99\xC9\x9C\xFC\x8A\xCF\x99\x12\x83\x0D\x3E\xA4\x77\xA6\xF3\x91\xC3\x9F\xDD\x99\x22\x9D\x78\x9F\x89\x9C\xE3\x3D\x95\x72\xA5\xF7\x9B\xD7\x90\xE0\x99\x9E\x9E\x8A\x5F\x55\x9E\xF1\x17\xE0\x7D\x91\xFB\x97\xE6\x93\xED\x9A\xC2\x9D\x6D\x9E\x0A\x9F\xC7\x3C\xD8\x7D\x81\xF4\x98\xF0\x92\xEB\x9F\xCC\x9E\x6E\x9A\xA9\x91\x84\xE3\x73\x7D\xA7\xF3\x98\xEF\x99\xDC\x9A\xBF\x9F\x72\x9E\xFE\x9E\xCD\x3D\xFE\x7B\x94\xF4\x8D\xF7\x96\xD1\x9A\x16\x9E\xC2\x76\xB3\x8A\x0C\xEF\x27\x70\x90\x90\x62\xF8\x94\xEE\x9C\xE0\x9C\x78\x9E\xE5\x9E\xE2\x3D\xCC\x7B\xB9\xEB\x8B\xF7\x93\x6A\x9F\xBC\x9F\xA6\x56\x4A\x9D\xD8\xF6\x61\x7D\xBD\xEE\x83\xF7\x9E\xAB\x9D\xDC\x9E\x80\x9D\x73\x9F\x2B\x39\x9A\x7E\xA5\xF2\x9A\xD7\x9D\xF1\x9C\xE1\x9D\x74\x9E\xE5\x9A\xEA\x3D\xF3\x08\xB5\xF3\x8C\x99\x92\xF2\x9D\x7A\x9C\xC9\x9F\xE3\x9E\x16\x3F\xE6\x7D\x98\xFC\x88\xF7\x9A\xF2\x9A\xA2\x9E\xC2\x9F\xE7\x9E\x2E\x3F\xE8\x7B\x9E\xBD\x64\xAC\x8B\x85\x9E\x73\x95\xCD\x9E\xF6\x9D\x37\x3F\xB8\x6E\x81\xEF\x8D\xCB\x97\x7B\x9A\x4F\x9D\x62\x9D\x31\x9F\x72\x39\xB0\x7C\xB4\xE5\x92\xF1\x94\x9E\x9A\x9A\x8E\xB0\x96\x75\x6E\x47\x3F\x82\x78\x9D\xF6\x89\xA7\x9F\xD9\x9A\xD6\x99\x68\x9E\x5A\x9B\xA3\x3D\xB6\x6D\xA5\xF6\x98\xA8\x97\xDA\x9A\xA3\x98\xCC\x9E\x67\x87\x2A\x3D\xCA\x70\xAB\xF9\x9D\xF5\x9C\xE3\x99\x40\x9D\x4A\x9C\x94\x9F\x04\x3A\xBD\x7E\xA4\xF7\x9F\xF9\x96\xDE\x99\xE8\x9F\x9B\x9D\x76\x9D\x48\x18\x96\xA1\x46\xFD\x94\xF8\x95\xF2\x99\xE7\x9F\xC9\x9F\x9D\x9F\x29\x3F\x88\x7E\x9B\xFC\x94\xFB\x9C\xEE\x9A\x97\x9D\xBF\x9C\xAD\x96\xF8\x1C\xCC\x7A\xB8\xC3\x93\xF8\x9C\xF6\x9D\xCB\x9F\xD2\x9F\x68\x9D\x4D\x3F\xAC\x7C\xBB\xE9\x8E\xF1\x9D\xA7\x9A\xEA\x9D\x63\x9D\x59\x9F\x94\x31\xA3\x70\xA3\x54\x7F\xEA\x9A\xF4\x8F\x3D\x70\xDF\x9E\x9C\x9F\xF5\x3E\xB2\x7A\x91\xF2\x94\xE9\x93\xC9\x9E\xA6\x9D\x25\x9E\x6D\x9F\xCB\x3C\xDC\x7D\x8D\xF3\x82\xD9\x91\xD7\x9C\x52\x75\xD6\x9F\x09\x9E\x5B\x3F\xDB\x6C\xA2\xDF\x8F\xB8\x97\xD6\x98\x1A\x9C\x98\x9A\xEF\x9D\x6B\x3B\x8E\x70\xA5\xFD\x89\x91\x9A\xB5\x98\xD2\x9B\x5F\x7D\x9A\x89\x82\x3D\xA8\x68\xB8\xEC\x8E\xFD\x9F\xF9\x9A\xE9\x9C\xFC\x9C\xA6\x9F\x3E\x38\xCE\x7E\x99\xE8\x8A\xCC\x9B\xA1\x9E\xF2\x9D\x87\x9C\xAA\x9F\x5D\x6E\x7E\x7A\xB8\xFA\x96\x0F\x99\xCA\x97\xB2\x9D\x0F\x9A\x5E\x9F\x95\x3E\x9D\x64\xAB\xEA\x8F\xDA\x9D\xF5\x98\x01\x9F\xD7\x9E\x05\x9C\x61\x3F\x8C\x70\xB9\xFE\x97\xDA\x9A\xD5\x99\x6B\x9E\x74\x9E\xC2\x9D\x99\xF9\x51\x68\xB6\xE4\x81\x2B\x6F\xB5\x9D\xEA\x6E\x84\x95\xC6\x9F\x6D\x3E\xC3\x79\x94\xFB\x83\xCE\x98\xEF\x9F\x9F\x9E\xBE\x9E\x58\x9F\xFC\x3E\xB0\x77\xBE\xFB\x99\xB3\x9B\xB5\x9B\xD9\x9D\x1C\x7D\x36\x81\xD8\x3F\x8E\x7C\x86\xF7\x86\xFE\x9A\xD8\x9E\xDE\x98\x63\x9E\x7C\x9B\x8E\x3D\xF3\x73\x84\x79\x8A\x69\x76\x90\x9F\xAF\x9E\xB4\x9B\x9B\x9D\xD9\x3D\xF2\x5B\xAF\xFE\x85\xE1\x91\xFB\x9E\x00\x9D\xF7\x9F\xA8\x9D\x09\x38\x82\x6A\x94\xED\x92\xC6\x93\xE4\x9C\x56\x9D\xF9\x9E\xF1\x9D\xEE\x35\x9F\xFE\x6D\xC8\x8C\xB7\x99\xFB\x91\x93\x98\x30\x97\x4D\x9A\xA1\x38\x99\xE0\x03\xEB\x69\x5B\x89\x10\x06\x44\x94\x2C\x82\xF5\x31\x12\xF1\x2C\x28\x9B\x2D\x86\x08\x09\xA2\x97\x37\x75\x02\x7F\x18\xA0\xA5\x03\x49\x5F\x98\x00\x94\x37\x9A\x7D\x71\x29\x79\x8C\x95\x97\x88\x6C\xF0\x6D\xC1\x40\xAA\x8D\x5A\x4D\xA3\x93\xFD\x8F\xA9\x4C\x2E\x84\xC1\x3C\xD2\x7D\xB2\xFF\x96\xF7\x95\xED\x9D\xFE\x9F\x6D\x9E\xD3\x9F\xB9\x3D\xA8\x7F\xBB\xF6\x91\x07\x52\xC3\x9A\xF2\x9A\x1E\x7F\xBD\x9C\xB4\x34\xAE\x24\xA5\x89\x84\x02\xAD\xC2\x82\x9D\x91\x95\x7F\x92\x9C\xF2\x3A\x8F\x72\x8D\xF4\x97\xF8\x96\xF0\x99\xE3\x9E\xE0\x9F\x95\x9F\x1C\x3F", +"\xD5\x6E\x9E\xFC\x85\x69\x9B\xE1\x98\x2F\x9E\x58\x9D\xEF\x97\x05\x3E\xE9\xC3\x6D\x17\x80\xE1\x9D\xFF\x97\x2F\x9E\x3A\x6F\x22\xA0\x84\x0B\xA8\xD0\x48\x01\xB9\x91\x9E\xF8\x9F\xF8\x9C\xE4\x9F\xE4\x9F\x92\x3F\xCF\x7E\x94\xFE\x96\xD6\x9E\xFC\x9F\x4F\x9E\x87\x9D\x31\x99\xE4\x3B\xDC\x5A\xA6\xEF\x93\xCC\x98\xBE\x9D\x32\x9F\x13\x62\x3C\xA0\x92\x23\x95\xCC\x7B\x01\xA6\xA4\x91\xDB\x9F\xD7\x9F\x47\x9F\xA1\x9E\x21\x3D\xC5\x7A\xA3\xF4\x89\x00\xA5\xD2\x9D\x88\x9E\x34\x66\xBA\x96\xA7\x39\x8E\x65\xB7\xB5\x90\x84\x0B\xFD\x85\xC4\x80\x24\xA0\x7E\x90\x7A\x40\xDF\x80\x8D\xED\x81\x03\xA2\xA4\x99\xA6\x9E\xA6\x9F\x99\x9E\x9C\x3E\xB5\x7A\x9E\xFA\x97\xE9\x90\xEA\x99\xA7\x9E\xA8\x9E\x19\x71\xB3\x22\xDC\x44\x67\x02\xB8\xFF\x8E\x05\xA5\xD9\x82\xA0\x9A\xBA\x9E\x1E\x3D\xE6\x7A\xA4\xDF\x88\xEB\x9D\xBD\x9A\x1D\x9E\x07\x9A\x76\x9C\xB3\x27\xDA\x6A\xA6\xDA\x60\xDD\x98\x3D\x4B\x17\xA0\x64\x95\x3A\x1C\x7C\x5A\x07\x64\x8D\xE3\x9A\xDE\x98\x8E\x9D\x18\xA2\x5A\x9E\xFB\x9D\xB1\x3E\xFA\x7F\xB7\xF9\x9E\xCE\x92\x6C\x93\x86\x9E\x9E\x9F\x1A\x9E\xBE\x19\xDA\x1B\x94\xAA\x6E\x06\xA5\x33\x91\x03\x77\x24\xA1\x5F\xA0\x95\x40\xC1\x81\xB2\xE6\x82\x6F\x89\xD7\x9E\x8E\x97\x5E\x9E\x4F\xA0\xCA\x32\xA0\x74\xB4\x70\x9E\xFF\x93\xA2\x9F\x66\x9D\xBB\x90\xDD\x9D\x02\x01\x64\x81\xA7\x8C\x92\x04\xAA\x0A\xA6\xA5\x9C\x2B\xA0\x71\x9D\x6E\x3F\xE4\x75\xB6\xEB\x8B\xC5\x91\xE4\x9A\x56\x9D\x07\xA0\xD3\x9E\x1F\x40\xA8\x7B\x87\xF9\x9E\xFC\x7E\xDE\x91\x18\x99\xD6\x95\x71\xA0\x5D\x40\xC7\x80\xBD\x03\xB6\xF4\x97\xB7\x9C\xA1\x9E\x2B\xA1\x6C\x9E\x9B\x3E\xDB\x79\x9D\xFA\x9D\xE6\x98\xCB\x9F\x9B\x9E\xE1\x9E\x36\x9E\x5E\x8C\x0C\x7D\xAF\xF1\x8E\xF4\x93\xC7\x9D\xF4\x6D\x89\x9D\x1C\x9E\x03\x01\x7A\x81\x85\x8F\x98\xF6\x63\x11\xA2\xFB\x9F\x4B\x9F\xD8\x98\x05\x40\xE7\x71\x95\xF1\x89\xEB\x94\xB9\x9B\x28\x9D\x16\x9E\xBE\x93\x16\x10\xBD\x61\x93\xFF\x9F\x85\x93\x7C\x98\xD2\x9E\x30\x98\xC6\x36\xBA\x40\x91\x82\xB4\x7D\x67\x3C\x84\x09\xA0\xCA\x9E\x25\xA0\x61\xA0\xD8\x32\xD3\x76\xA9\xED\x8F\xA7\x93\xF6\x98\xD7\x99\x91\x9E\x5D\x9B\x3C\x33\xC8\x1E\x2E\xDF\x95\xC2\x6A\x12\xA3\x70\x90\x3F\xA0\x5F\xA0\xF2\x36\xF9\x79\x87\x05\xAB\x07\xA0\x94\x9B\x58\x9E\x50\x9C\xF7\x91\xD3\x37\xEE\x03\xA0\xE9\x85\xD0\x55\x15\xA2\x0F\x92\x39\xA1\x96\xA0\x95\x32\xFF\x73\x80\x04\xA3\x03\xAA\xF3\x9D\x0C\xA0\xCF\x9F\x33\xA0\x3E\x3F\x9D\x82\xBF\xF7\x9F\x08\xAE\xEE\x9E\xE6\x61\x2F\x9F\xBE\x34\x65\x41\xBC\xCC\x79\x7C\x69\x66\x9E\x12\xA7\x1F\xA0\xF7\x9F\x1E\x9F\x66\x3B\xAF\x75\xA8\xED\x81\xFF\x9A\xB6\x9D\x29\xA1\xFA\x9B\xDD\x9F\xEB\x37\xA1\x80\xAA\xB1\x84\xD4\x99\x81\x91\x2F\xA0\xC8\x8B\xA1\xA0\x7C\x41\xE9\x82\x81\xE9\x8B\x0B\xA7\x11\xA1\xBF\x9D\x46\xA1\xFD\x9E\x1B\x41\xFD\x7B\xB2\x05\xAB\xF8\x94\x17\xA2\x37\x74\xA2\x86\x35\x6F\x8C\xA7\x0E\x83\x8B\xA6\x90\x0C\xA1\xCE\x92\x32\xA3\xF6\x9E\x98\x9E\x99\x3E\x98\x82\xB0\x02\xBA\x08\xA2\x0B\xA4\x23\xA3\xA7\x9E\x8F\xA0\xA1\x3E\x87\x7F\xA4\xEA\x81\xF0\x77\x39\x9A\x1E\x41\x50\xA0\x5D\x79\xAD\xDF\x51\x7A\x81\x04\xB5\xD7\x90\xF7\x9F\x5E\x9E\xDC\x9E\x75\x9F\x84\x3F\xAD\x7E\x9D\x06\xAF\xF9\x9E\x88\x9F\x1F\x01\xAE\x9C\x5B\x77\xA2\x41\xE9\x49\x92\x04\xB8\x0A\xA0\x06\xA7\xD2\x9E\x45\xA1\xD4\xA0\x96\x41\xAB\x83\x98\x06\xAD\x0D\xAA\x19\xA7\x35\xA3\x5C\xA1\xD8\xA0\x20\x41\xD9\x70\x98\xF4\x99\x97\x8D\x5D\x61\x39\xA2\x04\x73\x54\xA0\xCC\x41\xAB\x81\x8E\x07\xB5\xAF\x9C\x16\xA7\xEF\x9E\x5B\xA1\xC0\x9F\x99\x41\x89\x7E\x9B\x06\xA0\xFA\x93\x1C\xA2\xE8\x9F\x94\x9A\xB4\x9F\x5F\x31\x8B\x3B\x5E\x07\xAC\x69\x80\x1E\xA2\xDC\x80\x1F\xA1\xF8\x9F\xAA\x3E\xF3\x7F\x85\xF3\x8E\x02\xA2\xE7\x98\x0A\xA3\x85\x9E\x29\xA0\x19\x3E\xAA\x7F\xA2\x1A\x73\xB1\x94\xB6\x73\x3E\xA3\x22\x91\xFA\xA0\x44\x41\xE8\x81\x86\x05\xAA\x07\xA0\xAC\x9A\xD8\x9D\x10\x9E\x83\x95\x43\x3C\xEF\x81\x8B\x00\xB0\x06\x9B\xD4\x99\x60\x9F\x1D\xA0\xA1\xA0\xB9\x41\xBC\x76\xAC\x9E\x8D\x10\xA9\x09\xA3\xD8\x9F\x26\xA1\x62\x9F\x8F\x3D\xCC\x66\x9C\x4C\x91\xF9\x97\x3D\x74\xF3\x9F\x41\x8F\xEE\xA0\x18\x42\xD1\x81\xBA\x06\xA5\x0F\xAF\xF6\x98\xF0\x9D\xDC\x9E\xB8\xA0\x73\x3F\xEB\x83\xB5\xFD\x8D\x0F\xA7\xF7\x9F\xEC\x9F\x99\x9B\x19\x64\x17\xF8\x29\x82\xA9\x08\xA7\x07\xA9\x15\xA0\x18\xA1\x50\x9F\x4B\xA0\xC1\x3E\x9D\x84\x8F\x08\xAB\x73\x96\xA0\x8B\x68\x9D\x31\x88\xDD\x98\x69\x27\xBC\x63\xA1\x87", +"\x81\xFE\x9E\x8D\x9A\x81\x90\x44\xA0\xDC\xA0\x2A\x42\x9A\x84\x8D\x9F\x9C\x10\xAC\x0E\xA5\xB1\x9C\x88\xA0\x05\xA0\x50\x27\xA2\x68\xA5\xB2\x90\xC7\x94\xDD\x9D\xB2\x9F\x09\x98\x4A\x9B\x83\x28\xEC\x63\x8F\x9F\x26\x10\xAC\xE5\x8F\x2A\xA2\x7D\xA1\xA2\xA0\x83\x3E\xDB\x82\x94\x09\xBD\x0A\xA4\xEC\x9F\x2B\xA1\xE4\x93\xB0\xA0\x57\xE4\x3E\x7B\x90\xD1\x83\x2C\x62\xCC\x97\xC6\x9E\x29\x84\x91\x9C\x64\x42\xA4\xBA\x6C\x04\xA1\x0F\xAE\x0F\xA3\x3C\xA3\xBC\x9D\xDD\xA0\x53\x3D\x83\x82\xA6\xEB\x85\x08\xA8\xAE\x9C\xE5\x9E\x1A\xA0\xBB\x9F\x46\x3E\xBD\x7F\xA8\xFF\x8D\xF3\x8E\x6B\x9D\x8A\x6C\xB0\x9B\xC3\x62\x79\x42\xC3\xBD\x64\xF5\x9D\xD9\x96\xD7\x9E\xD0\x9C\x19\x94\x44\x9F\x1E\x3B\xB4\x67\xB2\xEC\x9E\x65\x9B\x13\xA7\x66\x8C\xE2\x87\x1B\x91\x38\x39\xDE\xB2\x5C\x29\x11\x14\xA4\xE8\x6B\x52\xA3\x86\xA0\x2A\x9E\x7C\x3C\xD6\x78\xBE\xF1\x98\xE2\x9E\x6C\x9F\xC3\x98\xA0\x81\x73\x9B\xD6\x28\x98\x69\x9C\xEE\x90\xEF\x9E\xD0\x95\xDD\x98\x33\xA1\xE7\x33\x41\x2A\xAA\xFD\x40\xF9\x67\x13\xAA\x20\xA1\x4D\xA0\x83\xA0\x54\xA1\x07\x40\xFD\x78\xB7\xC6\x9F\xE3\x98\xDB\x95\x0A\xA0\xED\x9C\x38\xA0\xB3\x34\xF0\x3B\x84\xDC\x84\x7F\x94\xE2\x9B\x65\x35\xAE\xA0\x90\x7E\xBB\x42\x89\x84\xBD\x08\xA9\x07\xAF\x23\xA0\x29\xA2\x06\x9A\x62\xA0\xB7\x3F\xC6\x81\x94\xDC\x88\x06\xAD\x8B\x86\x58\xA3\x1B\xA0\x59\x9A\x1B\x37\x88\x81\x91\x5D\x8F\xA6\x98\x6D\x7F\x59\xA1\x55\x7F\x55\x7F\xA5\x41\xD3\x65\xAF\x04\xAA\x93\x96\xF2\x9D\x45\xA3\x79\xA1\x17\xA1\xE9\x41\x83\x7F\xB2\x08\xA5\xFC\x98\x1D\xA5\x2E\xA3\x72\x9D\x31\x90\xE1\x34\xF8\x64\x83\x90\x59\xF1\x9A\xCE\x6E\x5C\xA3\x7B\x7E\x74\xA1\x18\x2D\xD3\x66\xBE\x05\xA8\x0D\xA1\xE1\x9A\xF4\x9F\x84\x9E\xD2\x9F\x15\x3E\xFE\x83\xB4\xF9\x95\x05\xA6\xE7\x9F\x16\xA3\x12\x98\x78\x93\xAA\x2C\xA8\x73\xA9\xC0\x8A\xCD\x95\x6F\x95\xC4\x82\xBF\xA1\xD0\x82\xED\xFC\x52\x81\x8F\xF2\x86\x18\xA7\xEF\x98\x61\xA1\xBE\x9E\x85\xA1\xD9\x3E\x8C\x86\x9B\xFB\x8E\x18\xA3\x0D\x9B\x54\x99\xA9\x99\x08\x91\x17\x43\xE9\xFC\x51\xFC\x72\x12\xAA\x7F\x93\x4D\xA0\xD0\x9C\xAF\xA0\x42\x3B\xA4\x5B\xB9\xC5\x47\xC7\x78\x2B\x9A\x50\x95\x42\x01\x94\xA1\xC5\xFE\x2B\x86\xA6\x0A\xB3\x12\xA0\x2C\xA4\x63\x9E\x95\xA0\x37\xA1\x0F\x2F\xC9\x77\x9E\x0B\xBD\xF0\x9C\xBC\x9C\xB7\x94\x9F\x9E\x31\x98\x46\x09\x92\x7D\x8C\x21\x67\x09\x08\x33\xA6\xDB\x7E\xCE\xA1\x85\x9E\xE4\x41\x95\x83\x85\xFC\x97\x0C\xA7\xF0\x99\x5E\xA0\x1A\xA1\xE0\xA0\x87\x42\xB4\x84\x89\x0A\xB4\x1E\x60\x6D\x7C\x50\x89\xCF\x96\x39\x9E\xA6\x17\xA5\xBF\x77\x03\xB3\xF4\x93\x10\x05\x69\xA2\xBC\x7D\x7B\x7F\xED\x3B\xED\x7E\xAC\x08\xA2\x08\xAD\x1B\xA4\x20\xA1\xBA\x9F\xAB\x9E\x86\x42\xEA\x75\x8F\x05\xB6\xC6\x9B\x10\xA5\xBD\x94\x57\x9A\x9F\xA0\x0F\x41\xA2\x72\xA6\x0D\xB5\xE8\x78\x36\xA1\xE9\x9D\x25\x9C\x83\x9D\xAB\x3E\xD7\x72\xAB\xEE\x94\xD6\x93\x08\xA4\x61\x9D\x21\xA0\x6C\x9D\xFB\x3F\xE0\x73\xB3\x88\x83\x1D\x67\x76\x94\x24\xA1\xD8\xA0\xC8\x7B\x27\x41\xEE\x7F\xB7\x0C\xB6\xF7\x7F\x34\xA6\x93\x9E\xF7\x98\x40\xA1\x3E\x3E\x82\x85\x95\xF5\x8F\x1B\xA2\xE4\x99\x6E\xA3\x29\x9F\xB9\xA1\xEC\x3A\xED\x78\x89\xFB\x91\xBE\x8E\x38\xA5\xD4\x8F\x30\x98\x2E\x51\x7B\x43\xDF\x72\x80\x0C\xA5\x6B\x9E\x50\x9B\x60\xA0\x4C\xA1\x76\xA1\x6C\x43\xAE\x84\xBE\x06\xB0\x11\xA0\x1C\xA3\x5E\xA2\x70\xA1\x7A\xA1\x0D\x3F\xE3\x2F\xBD\xCC\x91\x81\x8E\xB9\x91\x75\xA2\x5D\x9D\xD5\xA1\x1A\x43\xFB\x79\x8C\x01\xB4\xFF\x9E\x31\xA6\xFE\x9C\xC8\xA1\x7D\x9F\x00\x42\xFD\x7D\x82\x08\xA5\x3D\x9D\x09\x0C\x85\x74\xEA\xA0\xCA\xA1\x19\x43\xAB\x84\x92\x0D\xA4\x03\xA4\x35\xA6\x0C\xA2\xD5\xA1\xB8\xA0\xD6\x41\x9C\x83\xB8\x0E\xA4\x0E\xA6\xDF\x3F\x2E\xA1\x5E\x34\xDF\xA1\xCD\x42\x86\xFC\x7C\x08\xAD\x0E\xA5\x11\xA1\x6A\xA0\x74\xA1\xA9\xA1\xD2\x41\xD5\x86\x94\x07\xAA\x0F\xA9\x3D\xA4\x3D\xA3\xF6\xA0\xF7\xA0\xF2\x3C\xAC\x7F\x88\x78\x49\x88\x95\x78\x94\x69\xA0\xF4\xA1\xAB\x7E\xAC\x43\xA0\x6A\xAA\x05\xBF\x0B\xA8\x39\xA1\x30\xA3\x8F\x9F\xC1\xA0\xE7\x3A\xA4\x7B\x87\x04\xA4\xFB\x99\x10\xA0\x95\x8C\xC8\x9F\xFF\x97\xE0\x43\xE0\x23\xA2\x0F\xA8\x0B\xAA\x2E\xA6\x75\xA0\xBB\xA0\xBF\x9F\xEE\x42\xD5\x87\xAF\x05\xB7\x1E\xA1\x23\xA5\x7D\xA3\x8C\xA1\xF7\xA1\x35\x42\xEF\x83\xB7\x08\xA8\xD3\x59\xA4\x8C\x6C\x75\x02\xA2\x96\x73\x0B\x44\xFC\x84\x94\x04\xAD\xDC\x94\xE8\x9F\x75\x9A\xA5\xA1\x9A\x95\x65\x28\xFA\x7A\x9F\xEC\x9C\xEB\x9D\x2C", +"\x98\x57\x9D\x4E\x98\x5B\x77\x1F\x44\xBB\x08\xA1\x10\xBC\x15\xA3\x2D\xA3\x41\xA1\xB5\xA0\xAE\xA0\x2F\x43\xED\x84\xB1\x0C\xB9\x79\x97\x2F\x8B\x3B\xA2\xC4\x8F\xBC\x54\x31\x44\xCC\x5C\xB3\x10\xB2\x16\xA4\x3E\xA4\x84\xA2\x9A\xA1\x9E\xA1\x78\x3D\xBF\x86\xBB\x10\xA7\xAD\x93\x22\xA0\x3E\xA2\x1F\x9D\x70\x8E\x55\xD8\x41\x88\x9D\x27\x83\x22\xA1\x19\xA5\x81\xA2\x9F\xA0\x31\xA0\xD3\x43\xED\x82\x92\x10\xA8\x0F\xAB\x3E\xA2\x5E\xA2\x05\xA2\x7A\xA1\xB6\x40\xB2\x83\xBB\xF4\x99\x9E\x9F\x3C\xA4\x3C\x88\xFE\xA1\xE0\xA1\xB3\x3D\xC3\x87\xBB\x07\xA5\x1E\xAF\x04\xA3\x16\xA3\xE9\x9E\x91\xA1\xA9\x3F\xA4\x86\xBA\xEF\x9F\xD7\x92\x8A\x9B\x7D\x99\x77\x62\x29\xA2\x4F\x39\xD4\x88\xA9\x0B\xB8\x98\x97\x45\xA5\x15\xA3\xF9\xA0\xEA\xA1\xE9\x43\xD6\x87\x9D\x11\xB7\x1A\xA6\x3B\xA1\x6B\xA0\x06\xA3\xAD\xA1\x36\x42\xB3\x71\xA6\x08\xAA\x54\x80\x44\xA7\x7E\xA3\x76\x93\x3D\xA2\x02\x43\xFD\x88\x94\x06\xBF\x23\xAA\x45\xA1\x90\xA3\x04\xA3\x41\xA2\xD8\x43\xB4\x81\xB0\x06\xA1\x23\xA9\x1D\xA6\x08\x9C\x89\xA1\xD6\x9F\x7A\x43\x8E\x89\x87\xF8\x72\x1E\xA4\x49\xA6\x3C\xA3\x16\xA2\x78\xA1\x98\x44\x95\x88\x9A\x12\xB7\x0E\xAC\x49\xA6\x5E\xA2\x10\x78\x3D\x9B\x8F\x2C\xE7\x3E\xBD\xD9\x87\x2C\x68\x47\xA6\x0F\x9A\x1E\xA3\x80\xA1\x78\x33\xBC\x78\xA5\xF5\x98\x21\xA4\xE5\x9E\xFB\x92\x95\x9F\x1F\x9B\xBD\x2C\x93\x7B\x9F\x0D\xBE\x12\xA5\x74\x9B\x95\x97\xF5\x9E\x4A\x75\xB5\x44\xE2\xB5\x28\x11\xA9\xF1\x92\xDB\x95\x4A\xA0\x02\xA1\x2B\xA1\x9D\x40\x93\x84\x92\xF6\x9C\x8F\x9D\x29\xA7\x7A\x5E\x0B\x93\xC3\x9D\x97\xC8\x6D\x7F\x8B\x0D\xB3\x1C\xA6\x46\xA7\x91\xA0\x2E\xA3\xDC\x99\x92\x44\xFC\x87\xAB\x0D\xBC\x0D\xA2\x3B\xA6\x6D\xA3\x6F\xA0\xB8\xA1\x69\x40\xF2\x86\xAB\x01\xB0\x0A\xA6\x6A\x9A\x4E\xA3\x87\x95\x6D\x96\x09\x2E\xC1\x6D\xA5\xEC\x80\x00\x09\x4C\xA5\x8C\x7E\x37\xA3\xFC\xA1\x38\x35\xFF\x86\x9E\xF9\x81\x1C\xA8\xB0\x9B\x70\xA2\xC2\x9D\xC2\xA1\x1C\x3C\xD9\x81\xB8\xEF\x89\x1C\xA8\xAC\x8D\xFF\x9D\xD3\x6F\x07\xA0\xC2\x3F\x91\x80\xB8\x0A\xA2\x25\xA3\x3E\xA2\x3C\xA1\xF9\xA1\x3F\xA1\xE3\x44\x81\x85\xAD\x0D\xA3\x14\xAC\x39\xA6\x20\xA2\xE7\xA1\xAC\x9E\xA0\x43\xEE\x76\x84\xE3\x96\x7D\x90\x2B\xA2\xA1\x97\xC9\x8D\xF7\x9E\xBB\x2F\xF1\x7B\x93\x61\x92\x01\xA1\xD0\x81\x21\x03\x91\x94\x59\x76\xBB\xDC\x52\x54\xA6\xC3\x7A\x00\x86\x70\x51\x20\x82\x4E\x81\x81\x80\x1A\x01\xA2\x00\x98\x44\x82\x67\x84\x0B\x7A\xFD\x8D\x1E\x8E\x93\x80\x58\x09\x4A\x28\x8E\x05\x84\xE4\x34\xAE\x80\x26\x00\x47\x80\xA1\x06\x30\x01\x9A\x69\x93\x03\x82\x68\x8B\xBA\x3A\x07\x80\xCC\x79\x8A\x80\x83\x58\x3D\x02\xBC\x14\xB4\x58\x80\x03\x87\x25\x80\x1B\x80\xA1\xA2\xE7\x00\xEA\x16\xAE\xF7\x20\x03\x87\x02\x85\x0E\x83\x49\x81\xA6\x80\x4A\x45\xEE\xE4\x7D\x14\xBB\x08\x8E\x54\xA3\x17\x83\x68\xA0\x65\x78\xE6\x6F\x6E\xCE\x54\x15\xBB\x01\x8F\x52\xA6\x22\x81\x15\x81\xAD\xA2\x3F\x45\x92\x01\x87\x08\xAE\x61\x89\x0F\x58\xEE\x05\x44\x80\xF7\x3E\x72\x00\xBC\x52\xA5\x04\x81\x2C\x05\x56\xA1\xA9\xA1\x32\x80\x3D\x80\x68\x45\xDD\x8A\xA7\x02\x83\x65\x3C\x6E\x1E\xDA\x31\xD3\x85\x66\x69\x85\x00\x9B\x2E\xB9\xC3\x6E\x07\x8C\x14\x85\x0C\x81\x56\xA2\x52\x99\xB7\x00\xF6\x01\xBA\x15\xB9\x07\x81\xBA\x8E\x6F\x8C\xDC\x06\x9B\x80\xAB\x7B\x22\x01\x80\x04\x87\x4A\x9B\x14\x87\xAA\xA2\x61\xA3\xBB\xA2\x1F\xCC\x09\x8B\x95\x17\x09\x2B\xAE\x11\x80\x71\x8C\xAA\x24\xA3\x80\x76\xD2\x36\x8A\x86\x73\x9D\x00\x85\x57\xA2\x8A\x33\x61\xA2\x57\x80\x4C\x45\xBE\x8A\x8B\x16\xB5\x4C\x93\x91\x78\x1A\x73\x0D\x80\xB7\x73\xC2\x00\xD5\x8A\x9C\x02\x85\x2D\xAA\x3E\x1B\xA7\xA1\x40\x01\x90\x86\x8B\x25\x9A\x02\x9C\x16\xA3\x0A\x87\x02\xA3\xA8\xA3\x37\x80\x66\x78\xFB\x28\xB0\x01\xB8\x14\xB5\x2E\x0A\x53\xA7\xB0\xA2\x35\x87\xEA\x92\x29\x01\x9B\x8B\xAB\x16\xBD\x07\x73\xC5\x85\xE2\x35\x58\xA2\xD8\x68\xC1\x45\xF3\x8A\x95\x16\xB9\x29\xA8\x55\xA0\xB3\xA0\x12\x1D\xBC\xA2\x8B\x25\xEA\x8A\xA5\x09\xA3\x61\x8D\x56\xA2\xAA\xA3\xEA\x3C\xE2\x85\xB2\x45\xC5\x01\x85\x16\xB6\x5A\x86\x5B\xA3\x4F\x29\x5E\x85\xDD\xA2\x41\x45\xCA\x83\xBB\xCA\x7A\x8D\x6E\x56\xA0\x22\x81\x74\xA2\x9C\x80\x48\x45\xA6\x8B\x96\x17\xBF\x9D\x17\x5E\xA3\xB9\xA1\x03\x75\x7A\x39\x82\x00\xA2\x02\xAF\x17\xAA\x0A\x89\x13\x83\xBC\xA0\x37\x81\xE4\xA2\xB3\x05\x2B\x02\xB5\x17\xB9\x2E\xAD\x59\xA7\xBF\xA2\xC9\x8A\xE2\x15\x34\x01\xEE\xFB\x10\x16\xB3\x2C\xA6\x7C\x8C\xB0\xA2\x65", +"\xA2\xF2\xA2\x87\x45\x8B\x8C\x96\x28\x80\x0A\x84\x5E\x92\x17\x83\x5E\xA3\xBB\x8D\x9F\x45\xF0\x1E\x32\x2C\x84\x33\x9B\x5F\xA6\x1D\x78\x5D\xA2\xFF\xA2\xF0\x00\xA9\x14\xAA\x04\x87\xE3\x43\x60\xA5\xCE\x90\x50\xA3\xA7\xA2\x20\xF7\x2B\xF4\x64\x6C\x86\x08\x00\x0E\x06\x37\x94\x49\x8E\x03\x92\xA6\x58\x47\xA3\x7C\x17\xAA\x9A\x7F\xB7\x89\x2B\x7A\x44\x5F\xAD\x78\x60\x29\x92\x10\x31\x18\xA7\x53\x93\x63\xA1\xD6\x05\x03\x81\x30\x8D\x1D\xF3\x60\x04\x3D\x64\x8A\x5E\x8E\xC8\x3C\x4E\x6A\x28\x93\xFB\x79\xAA\x24\xB0\x1D\x36\x91\x20\x00\x80\xD4\x4C\x94\x93\x60\x8C\x65\x4F\x34\x23\x3D\x98\x64\x5A\x54\x4C\x9A\x44\x8B\xA4\x6F\xAC\x71\xA0\x1E\x4C\x2A\xA4\x0B\xB0\x6E\x9D\xA4\x94\x36\xA2\x20\x01\x96\x95\x55\x8B\x7B\xE5\x36\x45\x7B\x0C\xAD\x19\xA8\x44\xA6\x41\xA1\x3B\xA1\x7D\x97\x44\x3C\xD0\x37\xB2\xEE\x9C\xBB\x97\x24\x9A\x2F\x9D\xF3\x9C\x03\x9F\x99\x2A\xA5\x38\x89\xF8\x8B\xBB\x9F\xFF\x97\xCB\xA1\x5A\x7A\x30\x93\x56\xA3\x24\x89\x85\x0C\xAF\x05\xA3\xFA\x99\x16\xA1\xE9\x9E\x37\xA2\x51\x40\xF0\x88\x93\x01\xA8\x96\x93\x34\xA7\x4B\x98\x14\x91\x1C\x89\x6F\x19\xD0\x77\xA4\x0B\xB5\x33\xAA\x53\x78\xC1\x73\x28\x52\x3D\xA3\x80\x43\xFA\x83\xB0\xF9\x9C\x0F\xAE\xEA\x9F\xFE\x9E\xEB\x9C\x81\xA2\x1E\x3C\x98\x7F\xB6\xCA\x98\x17\xA5\xE3\x9D\xAB\x95\xCC\x9A\xE7\x87\x33\x37\xF9\x52\x76\x19\xB1\xAB\x7E\x68\xA1\xCF\xA0\xCB\xA0\x05\x94\xFC\x44\x98\x78\xBE\x13\xBA\xE0\x90\x50\xA4\xCC\x9F\xE1\xA0\x87\x9D\x04\x45\xE2\x85\xBB\xEF\x88\x48\x82\xAE\x91\x35\x9C\x5E\x97\x8A\xA1\x9E\x2B\xA3\x8D\xB9\xD5\x6C\x2F\x7F\x68\xA7\xD4\xA2\x0B\x94\xFF\xA1\x9A\x43\xC0\x7C\x95\x14\xA5\x14\xA9\x4E\xA7\x73\xA3\x3A\xA2\xBA\xA1\x4D\x3A\xA6\x86\x8B\x76\x5A\x35\xAA\x09\x7B\xC9\x70\x04\x52\xA8\xA1\x10\x45\xD9\x88\xA6\x12\xB6\x24\xAC\x45\xA7\xCF\xA2\x6B\xA1\x55\xA2\xDA\x43\xAD\x89\xB9\x0E\xB5\x1B\xA9\xE6\x9F\x56\xA1\x84\x32\x66\xA3\xDC\x11\xCE\x8D\x90\x91\x56\x1C\xAE\x84\x9A\xDA\xA1\x04\xA2\x6A\xA3\xA8\x44\xD6\x8D\x95\x07\xB8\x36\xAE\x3E\xA2\xDB\xA3\xA9\x92\x6E\xA0\x21\x2B\xDE\x81\xA1\xE7\x86\x1A\xA1\x4D\x3A\xA6\x9A\xC0\x8E\x67\x99\xE6\x39\xDF\x8D\x8D\x1A\xB8\x33\xA0\x3D\x50\xD2\xA3\x3E\xA2\x49\xA3\xAC\x3E\x94\x8D\x97\xFB\x87\x1E\xA8\xFF\x99\x79\xA2\x36\xA0\x39\xA2\x01\x1E\xE4\x41\xB3\x03\xAC\x14\xAA\x9F\x9C\x89\x9E\xE6\x9B\x83\x36\xE0\x46\x84\x11\xBC\x1A\xA6\x35\xA3\x66\xA0\xD5\xA0\xC0\xA2\xC1\xA1\xD6\x3E\xAC\x77\xAF\xFA\x97\x34\xA9\xFF\x9B\xA0\xA3\xF2\xA1\x4D\xA3\x0C\x41\xF7\x86\x8E\x04\xB5\x06\x9D\x4F\x80\x00\x01\xC4\xA2\xE8\x88\xA5\x46\xFD\x8D\xBE\x1A\xAE\x42\x9A\xE2\x99\x4F\x9D\x20\xA1\xE5\x9F\x50\x3F\x8B\x73\xAF\x1A\xAD\xEB\x98\x70\xA4\xD6\x9F\xD4\x3A\x35\x8F\x8D\x43\xA3\x5C\xBA\xFA\x9B\x49\x77\x58\x67\xE4\xA1\xFF\x7F\x94\xA3\x2A\xA1\x7E\x8D\x8F\xFE\x89\xDD\x91\xF9\x99\xCC\x9C\x5C\x9D\x98\xA3\xCD\x3F\x98\x8D\xB1\xF8\x9A\x34\xAA\x38\xA6\x17\x95\xAB\x76\xD2\xA1\x3A\x47\xC0\x61\x90\xD0\x9F\x09\xA4\x00\x44\x4B\x52\xCF\xA2\xA3\x55\x13\x47\xAA\x8E\x95\x1C\xBF\x35\xA0\xDA\x9A\x30\xA2\x68\x9F\x00\xA2\x62\x3F\x83\x88\x8E\x05\xA7\x36\xA1\x3A\xA0\xEB\x98\x8E\x97\x2A\x6C\x57\x47\x8F\x2E\xBC\x1B\xA1\x3A\xAB\x72\xA5\x84\x94\xDA\x91\xC3\x9C\xB4\x2D\xFA\x50\x98\x72\x87\xF6\x9D\xE2\x6B\x2C\xA0\xDA\xA3\x7D\xA3\xE2\x46\xFB\x48\x6D\x1D\xB0\x63\x98\x01\xA7\xFB\x9E\x06\xA1\xA5\xA0\x55\x3B\xE3\x7F\xA0\xEF\x85\x20\xAC\xFB\x9D\xD9\x8C\xC0\x9F\xEE\x62\x69\x47\xE0\x56\x59\x1D\xAC\x3B\xAB\x75\xA4\xE5\xA1\x33\xA2\x36\xA1\x1F\x42\xC0\x86\x81\xD5\x8D\xC7\x90\xE7\x97\xE1\x9C\xFD\xA1\xD6\x90\x09\x01\x09\x8F\x94\x80\x61\x33\xAF\x6C\xA4\xDC\xA3\x0A\x9D\x88\xA2\x99\x43\x93\x8A\x9B\x0E\xA7\x27\xAD\x39\xA5\xD8\xA0\x46\xA2\xB2\xA3\xC6\xB6\x07\x88\x8D\xF5\x86\x39\xA8\x77\xA5\x02\x72\x98\xA2\x68\xA3\x58\x44\xA5\x89\xA7\x1B\xBD\x33\xAC\x1A\xA2\xDD\xA0\xFB\xA0\x76\xA3\x17\x44\xEE\x8D\xB0\x0F\xBE\x24\xA4\x1B\xA1\xD3\x95\x7C\x9B\x5C\xA3\xAD\x47\x9C\x8F\xA3\x1B\xB8\xE3\x95\xF1\x99\xF4\x9C\x9F\xA3\x83\xA1\x7E\x46\x89\x86\x80\x1A\xBF\x0F\xA2\x68\xA1\x40\xA1\xCD\xA3\x63\x6B\xC7\x41\xDD\x6F\x9A\x1E\xB0\x26\x96\x2D\x52\xEF\xA1\xE3\xA2\xB7\xA3\x76\x23\xB5\x7F\x9C\xEF\x99\x16\xA7\x0D\xA1\x42\xA3\x0A\xA2\x78\xA0\x36\x3C\xBE\x88\xA1\x8E\x82\x35\xA1\x7C\xA3\xB9\x73\xF0\xA3\xB4\xA1\x7D\x40\xB1\x82\x94\x03\xB3\x09\xA6\x0D\xA5\x26\xA0\x58\xA0\xCA\xA3\xFB", +"\x33\x85\x3A\x8F\x3B\x9F\xC3\x95\x62\x83\xFA\xA0\xA4\x8A\xE1\xA3\xD6\x47\xB0\x8F\xBE\x11\xBB\x33\xAA\x1A\xA4\xF6\xA3\x74\xA0\xDB\xA3\x5E\x44\xB8\x8F\xA0\x11\xAD\x18\xA2\x46\xA1\x0C\x89\xDE\x9F\xD6\x6D\xC0\x47\xC6\xEA\x6F\x1E\xBE\x3C\xA4\xB6\x98\x30\xA1\xD7\xA3\xFF\xA1\x5F\x47\x84\x85\x82\x10\xB7\x28\xA4\xE4\x98\xF5\xA1\x2A\x9F\x8D\x9A\xA8\x07\x84\x63\x92\xEF\x83\x08\x06\x7F\xA5\xD4\x88\xFE\xA2\x9C\x51\x42\x47\xFE\x80\x84\x1D\xA0\x04\xA6\x74\xA5\xC5\x9F\xC6\xA3\x17\x9F\x4A\x47\xD3\x7E\x8C\x1D\xA2\x78\x8A\xF9\x9E\x32\x9B\x22\xA2\x42\x88\x4F\xC4\x1D\x90\x9C\x5C\x8E\x3D\xAD\x79\xA4\xF8\xA1\xDF\x9E\xE3\xA3\xFD\x47\xC8\x8F\xB5\x1E\xAA\x3E\xA7\x6D\xA7\x8D\xA3\x26\xA2\x02\xA4\x9D\x44\xB3\x83\x9B\x10\xB1\xA0\x9D\x73\xA5\xFC\xA1\x8A\x73\x5E\xA3\xD7\x47\xFC\x8E\xA3\xDF\x89\x0A\xA8\x2D\xA6\xFC\x98\xEE\x9E\xC3\xA0\x6C\x3B\x99\x8A\x97\x20\xAD\x27\xAD\x1D\x97\x0E\x8D\xDC\x97\x28\x06\x81\x3D\x81\xF3\x76\x09\xBA\x84\x89\xD9\x9F\xF9\x32\x0C\xA5\x6A\x51\x6B\x47\xD0\x42\x61\x20\xAA\x3F\xA1\xBF\x9B\x7B\x9C\x62\x9C\x98\xA3\xAD\x46\xD1\x7E\xA9\x20\xB7\xFC\x91\x6B\xA7\xA8\x8C\x2C\xA2\xA3\x9D\x59\x2F\xA8\xB2\x4A\xD5\x9C\x0E\x69\xB4\x9D\xB0\x9C\xEB\xA2\x05\xA4\x35\x48\xE8\x8F\xB8\x07\xB9\x50\x8F\xE5\x9F\xD0\x99\x09\xA5\xC9\x9F\x27\x48\x95\x7F\xAB\x21\xAF\xFE\x9B\x82\xA7\x5C\x8E\x3B\xA2\xAE\x9D\x5F\x02\xAA\x6D\x85\x21\xB8\x43\xA7\x7E\xA6\x6F\xA0\x84\x9F\x48\xA3\x6A\x44\x93\x8D\xAC\x11\xBD\x0F\xAB\x7C\xA3\x61\xA3\x0F\xA5\x91\xA1\x05\x48\xBD\x7B\x93\xC8\x9D\x12\xA3\x91\x78\x9E\xA0\xDE\xA0\xB1\x8E\x82\x37\xAB\xD6\x1F\x21\xB7\x04\x79\x77\xA0\x04\xA7\xDE\xA2\xF1\x96\xB4\x3F\xC3\x81\xB6\xFE\x8E\x42\xAA\x2D\xA7\x7B\x9C\xB7\xA1\x9B\xA0\x67\x02\x82\x79\xBA\xA5\x88\x28\xAD\x24\xA7\x8D\x6F\xA6\x37\xBE\x76\x01\x01\x23\x91\x9F\x99\x85\x45\xA8\x84\xA2\xFF\xA3\x24\xA2\xFE\xA3\xD1\x41\xFE\x8F\xAA\x0F\xA0\x40\xA4\x48\xA7\x8B\xA3\xED\xA0\xDD\xA3\x19\x44\xF1\x87\xAD\x20\xAF\xD3\x39\xB9\x9A\xE4\x7E\x86\x8A\x18\x99\x9A\x34\xE8\x48\xBC\x0B\x8F\x20\x70\xFC\x95\x77\x9D\xE9\x96\xE2\x95\xFE\x2B\x8C\x90\x9E\xF6\x8E\x40\xAE\xF5\x9E\xEB\xA0\xD8\x9E\xB0\xA3\xE2\x3F\xD0\x90\xBA\xFE\x84\x3C\xA8\x1A\x85\x0D\xA3\x49\x97\x63\xA1\xE0\x42\xE4\x72\xAD\xB4\x80\xDD\x97\x83\x5D\x1A\xA5\xF5\x9D\x6B\xA4\xE9\x2B\xD9\x91\xB6\x20\xA0\xFD\x9B\x04\xA4\x63\xA1\x13\xA1\x49\xA4\x95\x46\x84\x8E\x9C\x1C\xA6\x38\xAE\x71\xA4\x0A\xA0\x9E\x9E\xB5\x8C\x45\x43\x9F\x7C\xBB\xBF\x92\x35\xAD\x71\x9E\x2F\x82\xC6\x87\x81\x00\xEE\x48\xEC\x77\xB0\x23\xB3\x61\x99\xF4\x93\x1E\xA4\x01\xA0\xD8\xA1\xE4\x44\xEF\x85\xB3\x0E\xB4\x20\xA5\x3B\xA6\x18\xA6\x21\xA2\x64\xA4\x88\x44\xEF\x4D\xB2\xF2\x71\x80\x98\xD8\x84\x11\xA2\xA3\x91\x6F\x93\x80\x3E\x80\x00\x09\x24\xBD\xCD\x9B\x90\xA7\x88\x95\xE3\x96\x34\xA1\xBE\x3E\xBF\x85\xBB\xF1\x81\x16\xAA\x2A\xA3\x58\xA0\xAB\xA0\x40\x9E\xCA\x40\xC4\x6E\x91\x0C\xA2\x05\xA6\x6B\xA4\x14\xA1\x5D\x95\xEE\x62\x23\x49\xD0\x73\xA5\x24\xBB\x62\x97\xFA\x96\xA1\xA2\x11\xA2\x95\xA4\x8B\x3D\xBE\x86\x8F\x13\xB2\x3C\xAB\x5E\x98\xFE\xA3\xE7\x91\xC0\x52\x19\xB8\x72\xE8\x0F\x23\x12\x6C\x94\x01\x7C\xB2\x94\xE3\x53\x9C\xA4\xE9\x39\xBB\x92\x95\xB2\x9D\x49\xAD\x27\xA7\xA1\xA1\xEC\xA2\x60\xA4\xE8\x43\xC2\x91\x82\x12\xA4\x46\xA9\x49\xA6\x07\xA4\x2B\xA2\x20\xA4\xAE\x44\xAA\x33\xB4\x0C\xAE\x69\x91\x61\x30\x2A\xA5\x84\x9C\xA9\xA4\xB0\x2C\xD4\x92\xA3\x10\xBA\x25\xA4\x29\xA0\xD8\x9F\x5D\x9E\x33\xA3\x4A\x44\xBF\x89\xB9\xE1\x94\x7F\x90\x6F\xA6\xFE\x94\x3A\xA5\x6F\xA0\xE3\x39\x9A\x55\xB7\xF0\x94\x41\x62\xDF\x96\x2C\xA4\x18\x9E\x28\x97\xB2\x2E\x8D\x92\xBA\x21\xA9\xF5\x9C\x87\xA1\xD5\xA0\x98\x9F\x55\xA3\x62\x3E\xE9\x90\xB2\x1C\xA3\x44\xA6\x08\xA0\xFA\x9E\x11\x9F\x86\x91\xD6\x2D\xC9\x78\xB9\xE8\x8B\xE2\x96\x0F\xA7\xB0\x62\x5F\xA5\x3B\x9E\x80\x49\xF1\x5D\x82\x26\xAE\x44\xAB\xA2\x98\x2B\xA4\x20\xA2\xAD\xA4\x97\x44\xDC\x92\xAA\x12\xBE\x4A\xA9\x6D\xA0\x2C\xA7\xB6\xA3\x05\x9D\xF2\xF5\x7B\x45\x8D\xE8\x86\xF5\x91\xDF\x97\xF9\x33\x65\xA5\x4E\x9E\x62\x2E\x8A\x5D\x95\x11\xBC\x23\xA6\x95\xA3\xFF\xA0\x24\xA4\x7B\xA4\xC4\x43\xC9\x8F\x9F\x0C\xB5\x44\xA1\x32\xA7\x12\xA5\x1C\xA3\x4C\xA4\xEC\x1D\x8A\x8E\x8F\x7A\x82\xD1\x9A\xDD\x94\xF8\x89\xE2\x97\xBC\x34\xAF\x49\xBB\x5C\xA8\x25\xA5\x49\x9A\x96\xA5\x2F\xA1\x38\xA2\x82\xA1\xB7\x49\xC7\x8F\x9D", +"\x0C\xBA\x4D\xA6\x3C\xA4\x37\xA4\xF2\xA1\xE6\xA3\xCA\x43\xCF\x8F\x80\xB5\x8B\x1C\xA2\x6C\x86\xB0\x98\x21\x9E\x25\x9E\x3F\x27\xC2\x7F\x8E\xFB\x8B\xF0\x94\xDA\x0B\xF1\x94\xBF\x95\xE6\xA4\xA6\x41\xEB\x85\xAD\xCB\x98\x41\xA1\x8C\xA2\x07\xA7\xFF\xA2\x1E\xA4\xEB\x46\xA4\x93\xAD\x1B\xA6\x4D\xAC\x3D\xA6\x69\x4B\xD9\xA2\x79\x62\xC9\x49\xCF\x5C\x8B\x27\xB4\x4A\x9B\xE8\x97\x14\xA5\xA3\x97\x25\xA4\xD7\x42\xAB\x91\x9B\x00\xAF\x42\xA2\x76\xA7\x30\xA0\x39\xA4\x08\x9C\xDE\xEE\x70\x7D\x97\x68\x98\x4F\xA6\x9E\xA1\x62\x94\x7A\xA4\x2B\xA2\xB5\x49\xBF\x91\x91\x27\xB9\x41\xA3\x9D\xA3\x07\xA7\x6E\xA5\x1E\xA4\x81\x46\xBE\x93\x83\x1A\xA1\x42\xAA\xA6\x61\x4E\x9E\xD2\x9C\x83\x00\xF9\x49\x9A\x63\xBB\x27\xB0\x1B\x3B\x99\xA5\x02\xA1\xC1\x9D\x7F\xA3\x91\x48\x81\x8E\xB8\x23\xA3\x38\xA6\x9D\xA5\xE0\xA0\x76\xA5\x83\xA3\xC0\x49\xAB\x7F\x8B\x23\xA3\xD4\x9D\x5C\x99\xE2\x9C\x0B\x99\x10\xA5\xCC\x3A\xA3\x94\xA8\x88\x1F\x6B\x9D\x2B\xA1\x25\xA7\x0D\xA2\x97\xA1\xBD\x44\xD9\x5C\xB2\x25\xB9\xD1\x8F\x19\xA2\x28\x7F\x0F\x9A\x81\x00\x38\x4A\x8A\x7A\xAD\x2F\x46\x78\x93\x86\xA0\x22\xA6\x44\xA3\x72\xA2\x14\x45\xA4\x8F\x96\x14\xA6\x3D\xA5\x81\xA0\x51\xA0\x3B\xA2\x0D\xA2\xEF\x35\x9C\x88\x9A\xBA\x9D\x54\x99\xA4\xA4\xA3\x9F\xDD\x44\x26\xA5\xFE\x49\xDA\x61\xBD\x1D\xBE\x46\xA0\xFE\x98\x1C\xA5\x61\xA1\x02\xA5\x51\x48\x96\x90\x9B\xF5\x98\xFB\x91\x60\x9A\x0B\x88\x83\xA4\xBC\x97\xB2\x49\x90\x89\xB9\x12\xBA\x0A\xA0\x94\xA6\x00\xA2\x50\xA4\x61\xA1\x30\x3B\xC4\x85\xB4\xC9\x8D\xF9\x82\x7E\xA5\x00\x94\xFC\x82\x24\xA5\x0D\x4A\xCC\x5A\xA7\x24\xBD\x51\xAA\x36\xA6\xDC\xA1\xEC\xA0\x89\xA4\xE6\x44\xB4\x87\xA8\x13\xB8\x1A\xAA\x4E\xA6\x4A\xA4\xB2\xA3\xF4\x9E\x4E\x44\x97\x50\xB0\xB0\x82\xD4\x6D\xA5\xA7\xA7\x9F\x97\xA5\xBC\x97\x0E\x49\xFA\x89\x83\x1D\xBD\x43\xAB\xE2\x9F\x0F\xA6\x20\xA1\x40\xA4\x84\x40\x8C\x93\x88\x0E\xBF\x38\xA8\x82\x90\x12\x9F\x13\x63\x4A\xA5\x50\x3D\xF7\x5C\xA7\x27\xA3\x54\xA5\x43\xA6\x57\xA3\x8F\xA5\x32\xA3\x42\x42\xE7\x8C\xAB\xE3\x89\x33\xA9\x25\xA5\xE5\x99\xE2\x9E\x0B\xA1\x48\x2D\xA2\x92\x81\x2A\xB1\x70\x9C\xAA\xA5\x88\xA0\x5B\xA5\x53\xA1\x2B\x49\xF7\x94\xAD\x24\xB9\x53\xAF\x92\xA1\x70\x96\xAB\xA0\xCB\xA3\xB4\x38\xE6\xB4\x68\x2A\xA3\xEB\x97\xA9\xA1\x4E\xA7\x37\xA2\x37\x9A\x0E\x44\xEB\x93\xB5\x23\xB2\x4E\xA7\x8F\xA4\x3A\xA5\x1B\xA2\x0C\xA5\xCC\x47\x9A\x94\x8E\x1F\xB1\x51\xA9\x18\x92\x7E\xA2\xA6\x86\x92\x9D\x41\xD0\x5C\x14\x0B\x2B\xBE\xE1\x3A\xA3\xA3\x82\x10\x8F\xA5\x56\xA5\x3E\x4A\xBB\x89\x80\x29\xA7\xF4\x9E\x4B\xA1\xD1\x9C\x0E\x99\xDC\x98\x6F\x48\xD8\x5B\xB6\xEC\x82\xFE\x94\xD8\x9B\xEF\x36\xB8\xA5\x5D\xA5\xDB\x2E\xBD\x95\xBE\x24\xBF\x55\xAC\x33\xA1\x58\xA5\x12\xA3\xA1\xA4\x4B\x44\xFB\x6D\x98\x15\x9E\xFD\x9D\x55\x61\x0E\xA4\x64\x7D\x39\xA4\x7C\xEE\x75\x90\xB6\x2B\xA5\x4F\xA0\xA7\xA1\x30\xA6\x3C\xA5\xC1\xA4\x4A\x40\xF9\x83\xA9\x28\xB8\x38\xA2\x70\xA2\xE3\xA2\xA5\xA2\x14\xA4\x1D\x47\x99\x8D\xAD\x21\xBB\x79\x9D\x00\xA5\x9A\xA1\x6B\x9F\x9B\x9D\xDA\x44\x83\x69\x8C\x2C\xA4\x7D\x90\xA6\xA1\x09\xA4\x2A\xA5\xB7\xA3\xDA\x47\xE7\x90\x85\xEF\x8C\xFE\x9B\xD6\x9B\xE6\xA2\x99\x9E\x52\xA5\x05\x45\xD3\x7B\xB2\xED\x81\xEE\x9D\x8A\x95\x35\xA5\x59\xA4\x7C\xA5\xA6\x2F\xFA\x95\x95\x25\xBF\x49\xAF\xAA\xA6\x5F\xA4\x5C\xA4\x80\xA5\x43\x4A\xF4\x8E\xB1\x22\xB0\xDB\x98\x83\x85\x46\x93\x1C\x73\xF5\x9F\xA5\xDF\x59\x7B\xA4\x34\x43\x59\xAA\x70\x9D\x5C\xA7\x2C\x17\x73\xA5\xBE\x4A\xF4\x94\xBD\x2C\xA1\x4A\xAF\xAF\xA0\x4F\xA4\x49\x9E\x3D\xA5\x40\x36\x9B\x8A\xAB\x21\x93\xEE\x9D\xDE\x9C\x49\x90\x48\xA3\x18\x99\xE8\x36\xD2\xFE\x43\x43\x00\x26\x95\x9B\x94\xD7\x54\xD4\x11\x01\x95\xC1\x2F\xC7\xC4\x5C\x19\xA4\x4F\xA9\x10\x04\x6C\xA6\x00\xA0\x6B\x9E\x03\x3F\xEC\x93\x99\x25\xAE\x4F\xA3\x8C\xA0\x3E\xA7\xED\xA2\xF9\xA4\xB9\x47\xF4\x93\x92\x37\x95\x4B\xAF\x7B\x9D\x76\x9F\x98\x91\xDB\x9D\x5B\x40\x8C\x4F\x6E\x2D\xA2\xF7\x96\xA2\xA0\xD3\x9E\x67\xA5\x4A\xA2\xA0\x49\xD5\x8D\xB6\x2D\xA1\x40\xA8\xB7\xA3\x00\xA4\x26\xA5\x00\x9F\x7C\x4B\xB6\x74\x88\x0B\xA1\x17\xAB\x7A\x9D\x0E\xA2\x41\xA5\xEE\x62\x83\x4B\xA3\x7E\x85\x2E\xAF\x0E\xA7\xB8\xA3\xDA\xA1\xE2\xA5\x74\xA3\x8B\x4B\xC5\x91\x82\x20\xA7\x46\xAA\xB7\xA1\x19\xA4\xE2\x9E\xC3\x86\x1C\x49\xCB\x55\xA7\xEF\x9F\x48\xA9\xBE\x9F\x89\x61\xE6\xA4\x9B\x9F\x9B\x4B\xE6\x87\x9D\x2E\xB3\x3D\xA4", +"\xB7\xA3\x2B\xA5\xE8\xA5\xAE\xA4\x19\x4A\xDF\x92\x8F\x2E\xA1\x4B\xA3\x47\xA2\x26\xA4\x80\x76\x7C\x9A\xFC\x1B\xDC\x44\x6F\x2E\xA8\xFA\x91\xBB\xA1\xDA\xA2\xEC\xA3\x43\xA5\xA7\x44\x93\x92\xA9\x12\xB5\x48\xA3\xBA\xA7\x22\xA5\xE9\xA5\x8C\xA4\x0F\x3C\xB9\x81\x85\xE8\x43\x5E\xAA\xF5\x9F\xC1\x9D\x67\xA5\x09\xA5\xED\x49\x95\x94\xAF\x27\xB7\x50\xA1\x9F\xA1\x77\xA5\x69\xA5\xDD\xA5\xA7\x49\x98\x90\xB9\x53\x9E\x36\xAD\x97\x34\x7A\xA4\xEC\x9E\xEB\xA5\x54\x3A\xC7\x97\x91\x24\xA9\x5E\xA9\xA8\xA4\x22\xA7\xA2\xA5\x42\xA2\x8D\x4A\xDA\x86\x86\xD3\x9F\x47\xA1\x9C\xA6\xCD\xA0\xBD\xA3\x30\x83\x7D\x3E\x88\x7C\xB8\x3F\x94\x54\x76\xBE\xA4\x02\xA0\xFA\xA5\x4F\x9E\x86\x4A\xEB\x97\xA8\x1B\xAA\x5E\xA2\x9A\xA4\x79\xA5\xE3\xA4\xD2\xA5\xE0\x4B\xF5\x93\x99\xDC\x92\x07\xA3\x7A\x89\xEA\xA1\x4F\xA1\x91\xA3\x63\x43\xEC\x96\xAD\x1F\x25\xFE\x9A\xA9\xA2\x04\xA4\xA7\xA4\x97\xA3\x9E\x4A\xE8\x90\xA0\x2A\xA6\x1C\xA2\xAA\xA0\xD6\xA0\xCC\xA4\x82\xA4\xB3\x17\xAB\x93\xBB\xCB\x87\x2C\x6D\xBF\xA0\x8A\x9D\xF1\xA5\xAB\xA4\xD8\x4B\xF3\x96\x9A\x2F\xB5\x5B\xAC\xBD\xA7\x6E\xA6\xF7\xA5\xF9\xA4\x09\x4C\xBB\x8F\x8B\x30\xA2\xE4\x9C\xB6\x94\xE1\xA2\x21\x9F\x87\x85\x91\x43\xDB\x89\x93\x30\xB0\xFF\x94\x98\xA0\xC4\x87\x05\xA6\xD5\x9D\x19\x47\x84\x87\x9B\x30\xA1\x28\xA9\xB1\xA3\xE9\xA3\xC6\xA4\xA2\xA1\x21\x2E\xD0\x8E\x84\x27\xB5\xBE\x8D\xEC\x9B\x65\x9B\x4A\x9F\x65\x2A\x14\x4C\x8F\x91\xA8\x28\xB8\x4D\xAB\x46\xA6\x5A\xA4\x25\xA4\x6C\xA5\x96\x48\xBA\x97\xBF\x26\xBC\x50\xA7\x34\x67\x3E\xA6\xE7\x95\x12\xA6\x7F\x49\x9C\x93\xA9\x2F\xB3\x5D\xA8\xBC\xA3\x80\xA5\xFB\xA5\xE5\xA5\xEF\x4B\x96\x92\xB1\x2F\xA7\x24\xA7\xA5\xA7\xFF\x99\xF3\xA0\x60\x8F\x55\xD8\x60\x98\x98\x26\xA2\x63\xA0\xC0\xA2\x7D\xA7\x93\xA4\x44\xA5\x51\x4A\x8A\x95\xA5\x1E\xAC\x54\xA6\x6C\xA6\x51\xA5\xD9\xA3\xEE\xA1\x1E\x4A\xCD\x85\x9C\x29\x12\x63\xA0\x9B\xA0\x62\xA4\xBD\x9F\x69\xA5\x14\x4A\xD5\x95\x96\x28\xB5\x4E\xA8\xC5\xA5\x37\xA6\x16\xA7\x0D\xA5\xBC\x4B\xB2\x94\x9D\xF5\x9A\x09\x9C\x18\xA2\xE2\x9C\x21\xA7\x57\x9E\xF7\x41\xBD\x98\x88\x39\x9F\x61\xA5\x74\xA0\x31\xA7\xD1\xA2\xC5\xA4\x49\x47\xC5\x98\xAA\x20\xB3\xD4\x95\xA4\xA5\x69\x47\x25\xA6\x60\x9E\x99\x4C\x91\x96\x85\x26\xB7\x38\xAD\x4F\xA1\x88\xA7\x3F\xA3\x21\xA6\xAE\x46\x9D\x98\xB4\x1C\xBC\x56\xA9\xF9\x9B\x92\xA7\xD4\xA2\x09\x85\x5B\x4A\xE4\xD6\x67\x32\xB5\xE6\x99\x04\xA7\x90\xA6\xC4\xA4\x2A\xA6\x92\x48\xD6\x98\xB9\x23\xAD\x51\xAB\x8F\xA7\x45\xA5\x3F\xA4\x5A\xA6\xF3\x27\xA9\x67\xB6\xBA\x7B\x65\xA5\xCE\x9F\x84\xA6\x6D\xA5\x29\xA6\xD4\x4A\xB9\x93\x8B\x32\xB7\x56\xAD\xBD\xA1\x5B\xA7\x23\xA7\x6D\xA5\x5C\x4C\xE0\x1D\x88\xEB\x9C\x0E\xA2\x4F\x64\x99\xA6\x92\xA5\x4C\xA5\x52\x4C\x9B\x95\x86\x26\xBE\x43\xAE\xC9\xA6\x04\xA7\xC5\xA4\x41\xA4\xA2\x4C\xEC\x90\x9F\x30\xB8\x42\x96\xCB\xA4\xAD\x35\xDA\x9F\x26\x9F\x50\x4C\xBC\x98\xAA\x32\xBE\x61\xA3\xCE\xA5\x53\xA5\x39\xA6\x40\xA4\xE7\x4C\xA1\x95\xA9\x33\xA4\x44\xA7\xC4\xA3\x15\x91\xEE\x30\x02\xA1\xCB\x4C\xD1\x98\x97\x2F\xB0\x66\xA9\xC8\xA2\x9A\xA7\xF6\xA4\x46\xA6\xD5\x4C\xD9\x98\x9F\x2F\xBB\x62\xA1\xC9\xA0\xCD\x9D\x7B\x4A\xE4\x59\xB8\x4A\xFF\x5F\x9E\x33\xBE\x52\xAA\x8D\xA4\xEB\x9C\x37\xA4\xEF\x9F\x64\x4A\xFF\x8E\x84\x06\xAC\x0A\xA8\xA6\xA3\x1C\xA6\x14\xA5\x35\xA5\x89\x44\xC8\x95\xAF\x20\xA6\x65\xA2\xD0\xA3\x8C\xA5\x0A\xA7\xCF\xA4\xB5\x4B\xA1\x93\xB7\x2E\xA3\x4D\xAF\xC2\xA1\x6F\xA5\x0C\xA6\xD3\xA5\x42\x48\xD9\x94\x84\x21\xBC\x5F\xA5\xD2\xA5\x8E\xA4\x19\xA6\x01\xA6\x9F\x4B\x84\x98\xAB\x34\xA6\x60\xAD\xD2\xA6\x71\xA4\x43\xA7\xF0\xA5\x54\x48\xB4\x76\x8A\x88\x99\xC3\x8C\x86\x90\xBA\x89\x2D\xA5\x14\x9A\x22\x39\x93\x9A\x96\x2A\xB5\x68\xA2\xFB\x98\x6A\x9C\x80\xA4\xA9\x9D\x4D\x48\x83\x94\xAD\x22\xA2\x3C\xAF\x8A\xA5\x55\xA3\xD0\xA5\xF9\x90\x44\x02\xD7\x90\x81\xE1\x79\xFB\x80\x26\xA0\xB3\x9E\x98\xA1\x08\x33\x4A\x4D\xA9\x95\xA6\x2C\xBF\x4F\xA9\x8A\xA4\x09\xA6\x80\xA4\xC0\xA3\x1C\x40\x94\x90\x9E\x00\xBF\x68\xA6\xFE\x99\xA8\xA7\x46\x9D\xA1\xA6\x95\x28\xF3\x5E\xA0\x2C\xA4\x61\xA5\xD3\xA7\x72\xA0\xE8\xA2\x60\xA3\xA2\x47\xC2\x8D\x92\x29\xA4\x36\xAC\xC7\xA7\xF4\xA2\x1F\xA6\x8D\xA2\x8A\x42\x87\x91\xB4\x03\xBA\xD6\x8E\x28\xA7\x66\x9E\x3C\xA2\x94\xA0\x02\x01\x61\x9A\x8C\x2B\xAC\x6A\xA6\x01\xA7\xA2\xA7\x98\xA4\x08\xA4\xDF\x48\x92\x90\xA1\x1D\xAA\x6B\xA8\x10\xA4\xAD\xA4", +"\x08\xA1\x3D\x9A\x8B\x42\xB5\x31\x87\x2D\xB8\x26\xA7\x93\x99\x71\x9E\xC4\x84\xA4\x21\x75\x4D\xE5\x8D\xB6\x31\xA1\x3D\xA0\xA5\xA3\xF4\xA2\x1E\xA7\x29\xA5\x7D\x4D\xD5\x94\xB2\x2F\xAF\x54\xA1\xD2\xA7\x8E\x65\x47\xA2\xDC\x97\xB2\x42\xCE\x44\xB4\x0A\xA4\x7D\x86\x96\x32\xE7\x07\x72\xA4\x81\x68\xD3\x48\xEA\xB9\x4E\x2D\xBC\x98\x20\xB5\xA3\x5F\xA6\xD4\xA4\x75\xA5\xB0\x4A\xCE\x89\x96\x2D\xBC\x04\xA8\xB5\xA5\x8E\x7F\xEF\xA0\x88\x75\x6E\x40\xC8\x98\xBE\x2D\xBC\x01\x91\x67\xA5\x85\xA1\xC1\x9A\x3A\xA3\xAB\x47\xBB\x9B\xB0\x2F\x45\x51\xAF\xBF\xA6\xAE\xA5\x00\xA7\x3B\xA6\xEC\x4B\xF9\x98\xAE\x2F\xBB\x63\xA0\xBF\xA5\x8F\xA7\x6A\xA7\xA5\x8B\x85\x46\x80\x6E\x87\x1A\xB5\xDE\x8F\xBC\x9B\xBA\x77\xA2\xA3\xE8\xA6\x25\x4B\xBE\x91\xA2\x13\xB7\x6E\xA4\xDA\xA0\x8F\xA6\x69\xA7\xED\xA6\xA8\x4D\xDD\x9B\xBE\x35\xBF\x6E\xA0\xD8\xA2\x7C\xA5\x22\xA1\x97\x9B\x9E\x46\xB7\x7C\x9E\x9B\x8D\x5D\xAA\xDB\xA1\xBD\xA4\x63\xA7\x13\xA5\xE2\x4C\xAC\x99\xAA\x1A\xAE\x65\xAC\x6A\xA0\x96\xA6\x1A\xA5\x7D\xA6\x8D\x49\x85\x91\x95\x2E\xA6\xCD\x95\x07\x94\x26\xA7\xC4\xA1\x5B\xA3\xDC\xF8\x25\x0C\x92\x37\xB1\x63\x4F\xB0\xA4\x8E\xA6\x75\xA7\xD1\xA6\x78\x4D\xA5\x9B\xBA\x35\xA7\x6D\xAC\xD7\xA2\xBE\xA6\x6A\xA6\x36\xA6\xAC\x4D\xE6\x8E\x92\x2F\xB5\xC2\x63\xE1\xA2\x6F\x46\xCE\xA5\xB5\xA4\xBF\x4D\xED\x92\x80\x09\xAF\x4B\xA1\xAB\xA1\x2E\xA6\xBB\xA5\x2B\x9F\x78\x10\xA6\x5B\xA2\xF0\x9F\x7F\x95\xE2\xA3\xA7\x92\x94\x97\xB1\xA6\x62\x4A\xCF\x9A\x99\x00\xAA\x0A\xAB\xD1\xA1\xF0\xA2\x38\xA4\xF2\x9F\x96\x4D\x92\x55\xA6\x23\xBD\x7E\x92\x6F\xA7\x0A\xA2\x78\x9D\x93\x93\xF7\x46\xE2\x81\xA2\xE4\x95\x71\xA0\xC4\x40\xBF\x94\x8E\xA7\x7F\x9A\x8F\x4D\xC1\x8D\x80\x10\xB2\x6C\xA1\x8E\xA5\xA3\xA4\x90\xA6\x35\xA5\x6D\x4D\xA1\x82\x9D\x0D\xA3\x97\x93\x4C\xA1\xD7\x9E\xD4\xA2\xB8\x5C\x4D\x3C\xC7\x5E\xAF\xBC\x94\x6E\xA3\x00\xA5\x82\xA4\x19\xA4\xE4\x9F\xC3\x3B\xCA\x7F\xAB\x2C\xA8\x3A\xAD\xB2\xA2\x96\xA7\xCB\xA4\xED\xA4\x21\x3E\xA1\x8E\xA2\x30\xBD\xAA\x97\x58\x64\xC9\xA7\xD4\x44\x32\xA7\x70\x4B\xC5\x8F\x88\x32\xB9\x5E\xAA\xC8\xA7\xA0\xA4\x35\xA6\x17\xA6\xD6\x4C\x8B\x9A\x90\x32\xA0\x6A\xAA\xE5\xA5\x67\x94\x06\x89\xBF\x9E\x3A\x3A\x88\x96\xBC\x07\x59\x61\xAA\xB2\x92\xA6\x96\xB3\xA4\x7C\xA2\x62\x35\xF4\x91\xBF\x32\xB1\x66\xA5\xC5\xA3\x9A\xA7\x15\xA7\x84\xA6\x8E\x4C\x82\x9D\x98\x33\xAD\x68\xA6\xC9\x7D\xD6\x9E\x4E\xA1\x2E\xA7\x79\x30\xBB\x8E\x8E\x55\x63\x4F\xAA\x75\x9A\x55\xA6\x83\xA5\x13\xA7\xCE\x49\x91\x94\xAB\x37\xB8\x70\xAF\x80\xA2\xCA\xA5\x04\xA5\x61\xA3\x13\x48\xD4\x94\xAB\x35\xB8\x72\xA7\xD9\xA1\xD9\xA3\xEE\xA1\x5E\x89\x12\x4E\xFE\x9B\xA0\x33\xA3\x68\xA1\xE0\xA3\x62\xA5\x2B\xA7\x8A\xA5\x42\x4C\xF9\x99\x9C\x30\xA8\x70\xA3\xAA\xA0\xCE\xA6\xEB\x94\xBB\xA3\xB9\x4E\x98\x95\x86\x32\xB1\x5B\xAB\xE7\xA2\x85\xA5\x9F\xA6\x16\xA6\x08\x4D\x80\x9D\x8A\x34\xB0\x61\xAF\xD3\xA2\x81\xA5\x87\xA5\xDD\x9A\x9D\x2A\xF6\x9C\xBB\x33\x5D\x4F\xAF\xE4\xA6\xE1\x98\xCA\xA4\x55\xA4\xDB\x47\xAC\x91\x9D\x1F\xA5\x12\xA2\x33\xA2\x49\x84\x5C\x9F\xF9\xA1\x95\x4C\xF5\x4F\xB9\x33\x5A\x4C\xA5\xE1\xA6\x99\xA6\x84\xA4\x82\xA6\x7C\x4E\x86\x9A\x90\x3B\xBF\x73\xAC\xB8\xA5\xA7\xA4\x02\xA7\x6A\xA7\x7E\xF7\x25\x99\x8C\x9E\x5A\x76\xAD\xDB\xA3\x67\xA4\xBF\xA4\x32\xA3\x3E\x4B\xAD\x9C\x80\x2D\xAF\x71\xA0\x4C\xA6\x08\x94\xB5\x97\xD0\x8F\x9B\x0E\xE4\x4F\x89\x3B\xAF\x74\xAB\x4C\xA2\xCA\x9F\xB7\x90\x97\x9D\xB5\x39\xAA\x88\x9A\x0A\xAC\x21\xA0\x78\x9C\xD5\x87\x0B\xA3\xEE\x9B\xFC\x4E\x8F\x94\xB4\x26\xBC\x59\xA0\xDC\xA1\xE0\xA6\x70\xA7\x61\xA5\x57\x4B\xC5\x95\xBB\x29\xA4\xC1\x8D\xA7\xA5\x69\x45\xC6\xA6\x54\xA7\xE9\x49\xD1\x95\xBA\xE3\x8B\x65\xAE\xEB\xA3\xC0\xA4\xB0\xA7\x57\xA6\xC2\x4E\xC4\x98\xBC\x23\xBA\x58\xAB\xCE\xA6\xA0\x95\x3B\xA7\x3E\x9C\x92\x4A\xA2\x6C\x8B\x3C\xAE\x58\xAE\xE4\xA2\xBD\xA4\x74\xA4\x78\xA7\xCE\x4E\xF2\x9D\xB6\x2E\xAD\x61\xA5\xEF\xA1\xD0\xA4\xB5\xA7\x41\xA7\xD6\x4E\x86\x90\xBF\x33\xA6\x55\xA6\xEB\x77\xE4\xA4\x9E\xA7\x5E\xA6\xCC\x4E\x93\x9D\x85\x34\xB5\x74\xAE\xE7\xA7\xD2\xA6\xB4\xA7\x4C\xA7\x47\x4F\x9B\x9D\x84\x3A\xBE\xD7\x99\x02\xA2\x03\xA6\x20\xA6\x47\xA7\x3C\x4F\xB7\x9C\xBE\x3C\xAF\x1D\xA0\x41\xA5\x8C\xA5\x4E\xA7\x33\xA6\x05\x4C\xE9\x98\x8D\x2F\xAB\x63\xA8\x91\xA5\x8D\xA4\xEF\xA2\xF1\x91\xC9\x4A\xF2\x89\x4E\x3D\xAD\x77\xA5\xDD\xA2\xB4\xA7\x4D\xA6\xEC\xA6", +"\x66\x4C\xDA\x9B\xA8\x31\xBC\x6E\xAA\xC6\xA6\xBB\xA4\x88\xA7\x3F\xA6\x6F\x4F\xB2\x9A\x9B\xA1\x9D\x42\xA1\x61\x33\xEE\xA5\xCF\xA7\xFF\xA6\x86\x4B\xA7\x9A\x88\x2E\xA9\x69\xAA\xB8\xA4\xE8\xA6\xE8\xA5\x03\xA6\xCE\x4B\xAF\x9A\x90\x2F\xB9\x56\x75\xB4\x9A\x5E\xA6\x2C\xA3\xC1\x9E\x75\x4E\xBA\x9D\x8B\x3B\xBA\x73\xA2\xF5\xA1\xDE\xA4\xD5\xA7\x79\xA7\x56\x4F\xC5\x9E\x93\x3B\xAE\x69\xA8\xEF\xA0\xA6\xA4\xE1\x6E\x61\xA2\xBB\x31\xBF\x53\x95\xFF\x99\xE9\x88\xB4\x99\xF3\xA6\xB2\xA6\x0B\xA7\x76\x4F\x8A\x9F\x9E\x2E\xAC\x7C\xA0\xBA\xA6\xF1\xA4\xEE\xA4\xA3\xA7\xA4\x4F\xC8\x9E\xB2\x30\xA7\x7D\xA4\x4D\xA0\xD4\xA4\x92\x92\xA8\x89\x80\x34\xEC\x7F\xAE\x3E\xAC\x78\xAD\xA4\xA5\xEC\xA4\x4E\xA6\xDA\xA7\x3A\x4D\xB6\x9F\xAC\x34\xB8\x7D\xAE\xD3\xA2\xF7\xA6\xE9\xA7\x57\xA2\x06\x45\xC8\x6A\x9B\x91\x7F\xB5\x96\xD8\xA3\xF8\xA5\xD8\xA6\x6E\xA7\x63\x4F\x8F\x88\xB2\x2D\xA8\x69\xAB\xC2\xA3\xE8\xA5\xB4\xA6\xD1\xA7\x58\x4F\xB9\x9F\x9A\x3D\xA9\x7A\xAA\x89\xA5\x3C\x98\x5C\xA6\x26\x91\x0A\x16\xD7\x7B\xBC\xB9\x6A\x28\xA5\xF8\xA2\xF3\xA4\xEC\xA7\xCF\xA3\xEC\x4D\x99\x9C\xAE\x37\xBB\x70\xA0\xDF\xA5\xC3\xA5\xDF\xA7\xF9\xA6\x7F\x4F\xF5\x9B\xAD\x36\xA2\xC6\x83\x02\xA1\xF9\x8F\xC9\x84\xAF\xA5\xD0\x48\xA7\x80\xA5\xC0\x15\x6D\xA7\x12\x05\x1C\x02\x0E\xA1\xB4\xA5\x4A\x7C\x41\xF7\x11\x20\x46\x5A\x85\xD2\x5F\xB5\x92\xD4\x78\x14\x47\x3A\x0F\x67\x01\x07\x40\xAE\x05\x71\x54\x35\xCB\x97\x39\x7D\xBD\x90\xF2\x6F\x35\xD4\x51\x34\xB1\x68\x88\xF4\x01\xDF\x67\x80\x89\xEC\x9E\x25\x66\x2F\x9B\x97\xD2\x9F\x28\xA1\x00\xAB\xF8\x8E\x8C\x98\x02\xA8\x53\xCC\x3E\x54\x93\xD9\x60\x00\x0D\x23\x8B\x75\x3F\x3B\x85\x4E\xA3\x8B\x40\xDE\x5A\xBC\x0B\xAE\xEF\x34\x07\x90\xC4\x80\x0A\x98\xE0\xA5\x3C\x40\xD9\x24\xB4\x11\xBB\x05\x7B\x50\x9A\xC1\x45\xD2\xA1\xFC\x94\xCD\xAB\x35\x7D\xAB\x37\x96\x61\xAE\xB6\x93\x0B\xA5\x30\x90\x17\x7C\xE7\xB1\x46\x21\x22\x1C\xB7\x65\xA4\x72\xA0\x6F\x6A\x48\xA1\xF3\x75\x70\x3C\x84\x5F\xAA\x9D\x9F\x72\xAC\x73\xA0\x43\x97\x17\x8A\x4F\xA7\x38\x3A\x88\x9D\x94\x26\xA2\x4F\xAE\xC4\xA2\x25\x5F\x54\xA0\x1D\x5F\xC8\x4E\xE0\xD7\x1D\xB9\x81\xE1\x7F\x49\xA0\x28\x6E\xB9\x8E\x32\xA8\xBD\x47\xF0\x6B\x8A\x3C\xB7\x90\x8E\x42\xA2\x99\xA7\x43\xA6\xD0\x91\x7E\x4A\x91\xE9\x47\x89\x8B\xD6\x3F\xCE\xA7\xAD\x6C\x40\xA6\x0F\x8A\xF1\xBA\x23\x71\xBA\xA9\x87\x77\xAE\x06\x69\xEE\xA5\x49\xA3\x6D\x9D\x7B\xD0\x60\x95\xA4\xC8\x32\xFE\x9E\xFB\xA3\x1B\x9E\x13\x02\x93\x8E\xF4\x4A\xCE\x53\xB0\xAD\x35\x42\xA6\xCA\x91\x1E\x9E\xEA\xA6\xCB\x9E\xAC\x4F\xC2\x7F\x8A\x2C\xA0\x30\x3C\x29\xA5\x10\xAA\x35\xA2\xF4\x98\x75\x42\x8A\x9D\xB7\x09\xA6\x50\x9A\x0E\x83\x13\xA7\xCC\xA4\xEA\xA7\xC2\x3F\x87\x9B\x83\x42\xA3\x7C\x99\xBD\x66\x8F\x9B\xA7\xA1\x79\x96\xA1\x42\x95\xEC\x6B\xAC\x25\x83\xAA\x9B\x7A\x04\xA8\x52\x9D\x67\xA4\x26\x40\xA6\xA0\x83\x40\xA1\x2A\x3A\xF3\x00\x25\x5C\x6E\xA7\x21\xA0\x70\x24\xEB\x8C\x9C\xF8\x86\x34\xA6\xD5\x84\xB9\xA5\x2D\x9B\xC0\xA5\x73\x1B\xC3\x9C\xB0\xD2\x85\x72\xA7\xC9\x78\x0B\xA0\x88\x9F\xA1\x9B\x22\x3E\xE7\x9B\xA2\xE3\x73\x19\xAB\x91\xA1\x32\x9E\x04\x98\x8F\xA4\xCD\x2A\xEC\xEC\x65\x4E\x87\x68\x3A\xC5\x9E\x53\x93\x97\xA0\x07\xA7\x38\x50\xAA\x60\xAB\xE6\x9F\x83\xA8\xA0\x8B\xC4\xA7\x0C\xA1\xD3\x83\xE3\x4B\x8A\x7C\x94\xD8\x61\x1F\xA4\x8B\x7B\x17\xAA\x78\xA6\xBF\x9B\x79\x49\xF2\x8C\xBB\x2F\xAF\xB0\x6A\x99\x30\xD9\x9F\x11\x9E\x9E\x93\x92\x49\xDA\xA0\xA1\x27\xA7\x6A\xA8\x2E\x9E\x0A\xA9\x5F\x35\x6A\xA8\xAC\x37\xA5\x7D\xA3\x30\xB9\xC0\x5D\x0E\xA8\x27\xA0\x0D\xA7\x10\x9D\x83\x4D\xCC\x98\x82\xFF\x8C\x74\xAE\x04\x83\x65\x36\x3B\xA9\x90\x91\xCA\x3E\xC4\xA0\x8C\xFB\x9C\x82\xAC\x7D\x9E\x9B\x79\x37\xA8\x6F\x9F\xBC\x43\xAC\x80\xA2\x39\x8F\x9A\x9F\x10\x5F\x1E\xAB\xD6\x7A\x6C\xA7\x8F\xBC\x53\x5D\xB3\x41\xAA\x19\x75\xA3\xA0\xCF\x85\x0A\xA0\x98\x7D\x3D\x0C\x9A\xA2\x80\x42\xA2\x1E\x69\x84\x9F\xBB\x5E\x21\x83\x36\xA5\x54\x1A\xDC\xA1\xB6\x40\x96\x9D\x93\x17\x6A\x24\xA8\x1F\xA8\xED\x48\x75\x50\xE6\xEA\x56\x44\xBC\x53\xAB\xF4\xA2\xEF\x9E\x44\xA8\x70\xA8\x15\x42\xFA\xA0\xA1\x44\xA7\x56\xAB\x18\xA3\xA4\xA5\x4B\xA8\x9E\xA8\xF2\xD0\x2B\x5E\x81\x46\x9D\x43\x91\xAF\xA7\xAF\x9F\xBC\xA4\x7A\xA8\xF5\x4A\xFF\xE7\x44\xED\x84\x58\xA8\x3D\x67\x68\x9E\x24\xA8\x81\x7C\xCF\x67\x4F\x6D\x91\x3F\xAA\xD6\x89\x88\xA1\x21\x9C\x54\xA9\x08\x33\x52\x51\xB2\x96", +"\xAF\x13\xB3\xDB\x97\x2E\x9A\x14\xAB\x41\x7B\xA5\xA8\x99\x4D\x86\x1F\xB4\x22\xA6\x82\xAE\x5B\x49\x15\xAB\x80\x80\x4D\x85\x23\x51\x92\xDB\x7D\x3F\xA9\x32\x9E\x8C\xA6\xBD\x9D\x09\xA9\x4A\x94\x27\x50\xB4\xA1\x8A\x70\x57\x85\xA4\x23\x98\x74\x9E\x66\x35\x73\x74\xF4\x4B\x89\x8E\xB6\x2F\xA9\x16\xA2\xFE\x93\x59\xA3\x2E\x7D\xE7\x33\x78\x51\x91\x97\xB3\x30\xBA\xF3\x94\xB9\xA7\x31\x9D\x41\xA5\x32\x99\x13\xA6\x59\x96\xA8\x26\xB4\xF1\x9B\x6F\x6D\x23\xA6\x0C\xA8\xCA\x9C\x18\x1E\xA7\xA1\x4A\x46\xB6\x6F\xAE\x98\x8C\xD6\xA3\x3D\x9A\xFF\x9D\xC1\x4B\xFF\x03\x93\x46\xB5\x80\x69\x75\x98\x48\x3A\x51\xA4\x7A\x9A\x28\x8E\x35\x86\x8A\x45\xA8\xCB\x89\x17\xA9\x4C\x90\x56\x66\x24\xA7\xFE\x4C\xF8\x8D\x9F\xA9\x9A\x58\x72\xE0\x93\xCB\xA5\x3C\xA9\x6A\xA2\x89\x4E\xEA\x9F\xBC\x07\x51\x60\xA1\x16\x8E\x72\x9D\xFD\x8C\xE8\x72\xAA\x49\xFA\xA1\xB4\x39\xA5\xCC\x71\x61\x33\x33\xA9\xA1\xA6\x37\x9E\x50\x50\xA5\x87\xA8\x83\x9C\x8D\xAD\x97\x36\x37\xA9\xDF\xA5\x9C\xA0\x59\x50\xB0\xA3\x9B\x41\xB4\x87\xA4\xEA\xA6\x33\xA9\x32\xA1\x09\x82\x10\x51\xB8\x9D\x83\x45\x76\x8D\xAE\xEB\x8F\x8D\xA7\xE9\x93\xE9\xA8\xB0\x48\xD1\x46\x94\x4E\x49\x8C\xAC\xC2\x93\x23\xA9\x76\x6B\x8E\xA8\xD7\x12\xAD\x28\x9C\x4B\x8A\x3D\xA3\x94\x7F\x33\xAA\xC3\x9E\x04\x81\xBE\x47\xEB\xA0\x93\x43\xAB\x59\x36\x1C\xAF\xF4\x62\x41\x9F\x45\x76\x3D\x0C\xED\xA3\xAB\xE1\x9B\x66\xAF\x43\xA2\x32\xA9\x77\xA9\xB4\xA8\xAE\xEC\x71\x83\xB3\x45\x72\x8F\xA3\x46\xA6\x5D\x9C\x67\x90\x8A\x86\x30\x49\xB7\xA3\xAF\x41\xBB\x7C\x7C\xE0\x34\x3B\xAA\xC1\xA6\xEF\xA8\x5D\xCF\x6B\x58\xA2\xD7\x7C\x8F\xAF\xD6\x9E\x5B\xA4\xA7\x84\xE2\xA8\xA4\xEB\x41\x89\x88\x09\xA6\x85\x9F\x62\xA7\x10\xA9\x1B\x94\xA4\xA8\x19\x95\x48\xA1\x4C\x48\xA5\x7F\xAF\x8E\x99\xFD\x83\xDA\x88\xA7\xA8\xF4\x50\x93\xA1\xB2\x96\x74\x8E\xAC\x1D\x96\xFC\xA6\x36\x9D\x4B\xA8\xC0\x4F\x8A\x91\x90\x48\xBF\x57\x72\x21\xAD\x63\xA6\x25\xA8\x34\x9A\xA0\x50\xF4\xA1\x9E\x45\xA2\x12\x66\x1E\xA9\xB5\x9C\x77\xA5\xA2\xA5\x34\x39\xD5\x48\xB1\x7E\x99\x4C\x95\x30\x8E\x58\xA5\x51\x9C\x84\x87\xCD\x48\xCC\x9F\x49\xE5\x92\x6D\xA1\x52\xA6\xA1\x94\x0A\xA8\x9C\x53\x74\x51\x91\x5A\xA0\xEE\x88\x86\x63\x97\xA5\x2E\x9C\x39\xA8\xE4\xA6\xE7\x48\xDF\x85\x84\x46\xAA\x47\xAC\x24\x9B\x49\xAB\xF3\x33\x26\xA9\x5C\x30\x82\xA3\x83\xF8\x93\x37\xA2\x90\xA4\x99\x9A\x61\xA8\x8D\x41\x23\x3E\xE4\x1F\x9F\x1F\xB2\x26\xAF\x09\xA7\xBE\xA5\xBE\xA0\x1B\x9F\x8A\x4E\xFB\x9B\x8E\x02\xAD\x83\x8F\xAE\xA2\x66\x9D\x0D\xA8\x13\x8F\x12\x43\xD9\xA1\x94\x0C\xB1\x70\xA4\x47\x78\x4B\xAA\x82\xA7\x77\x8A\xDE\x50\xF5\xA4\x89\xF5\x88\x56\x9B\x0C\xA2\x1C\xA9\x5B\x7A\x5A\xA5\xBE\xF8\x25\xA3\xB5\x89\x95\x93\x88\x1A\xAD\xEA\x9E\x6A\xA9\x86\x89\x6D\x52\x94\x9E\x8B\xEF\x80\xBE\x9D\xC0\xA3\x89\xA6\x1E\x98\x26\xA8\xB4\x51\xFF\xA4\x92\x08\xB5\x55\xA4\x21\xA1\x1F\xAB\x80\x87\x0C\x5C\xB6\x0F\xB0\x9C\xB2\xEC\x8F\x82\xA7\xE8\xA2\x39\xAB\x3C\xA8\xB2\xA8\x1D\x10\x84\x51\x99\x4A\xA5\x78\xAB\x29\xAD\xB0\x98\x70\x03\xC3\x9A\x01\x51\x8F\xA5\x8D\x6B\x7D\x82\xA2\x3E\x7A\xD1\x9E\x9B\xA9\xCA\x93\x77\x11\x93\x9E\xA0\x1F\xAA\x6D\x34\x11\xA9\x0C\x80\xA0\xA8\x85\x95\x90\xE9\x01\x99\xA2\x49\xB2\x95\xA4\x26\xAE\x0E\x5F\x4B\xA8\x27\x82\xD0\x3C\xBC\xF2\x4F\xF2\x56\x93\xA4\xCA\xA1\x86\x85\x1F\x62\x28\x86\x93\x52\xE4\x4E\xBE\x4A\xAE\x90\xA9\x90\x7D\x24\xAB\x68\xA8\x57\xA9\x8A\x52\xE1\x81\x86\x07\xB7\x78\xAC\x14\x8A\x53\xA9\xB4\xA8\xE2\x63\xDC\x4C\x97\x04\xB9\xA5\x24\x96\xA5\xF3\xA6\xB6\x88\xB3\xA9\x7F\x3D\x31\x51\xDF\xA2\xBC\x4A\xB4\x94\xAA\x0E\xAF\x0E\xA9\xB5\xA8\x52\xA9\xD1\x52\xCA\x5F\x9E\x3D\xBB\x95\xA0\x2D\xAB\x56\xAB\x11\x94\xE3\x51\x7E\x50\xAE\x04\x91\x98\x3C\x96\xA6\xEC\xA4\xF8\x93\xAF\xA9\x7B\x85\x82\x50\xFC\xE3\x2D\x4B\xBD\x95\xAB\xF4\x6B\x42\xA8\xC4\x98\xF0\x90\x45\x4D\xC0\x5E\x98\x48\xB8\x94\xA7\x25\xAB\x4F\xAA\x46\x9C\x6C\x9C\x56\x48\x8E\xA1\x84\x13\xB3\x49\xA3\x1D\x9F\x98\xA3\x83\x6B\x51\xA9\xF4\x52\xC8\x99\x8F\xDA\x81\x8B\xAC\xDA\x9D\x2A\xAA\xD7\x9D\xD8\x80\x05\x53\xC2\x96\x9E\x88\x92\x45\xA7\x46\x9B\x4D\x81\x61\xA7\x50\xA8\x18\x53\xF3\xA5\x86\x4C\xA4\x8F\x9F\xD6\xA7\x44\xAB\x58\xA8\x4D\xA8\x48\xF0\x3C\xA4\xA6\x56\x89\x96\xA8\x2B\xAB\x0F\x9C\x47\xA3\xB5\xA8\xD7\x10\x9A\x77\x83\x49\xB4\x2C\x87\x1E\x99\x66\xA8\xBA\x00\xB9\xA8\xE3\xA1\x49\xA4\xAB\x3C\x55\x7D", +"\x8F\x7C\x31\x44\xA0\x08\x9A\xE5\x9D\xE9\x0D\xCB\x9B\x83\x6F\x9F\x85\xA5\x8C\x80\x74\x9F\xA8\xA8\x9F\xA9\xE2\x36\xFC\x6D\x8A\x10\xA5\x87\xA9\xDC\xA4\x17\xAB\xEB\x87\x2E\xA9\x73\x40\xB3\x7C\x89\x43\xBE\x7F\x94\x02\x42\xEF\x92\xC6\xA8\x01\xA9\xF0\x08\xE5\x77\x92\xE6\x8F\x8C\xAD\x08\xA1\x32\xAA\xBC\x88\x63\x9F\x46\x42\xB8\xA2\x95\x46\xB3\x92\x87\x19\xAB\xC9\x9F\xFF\x9C\x79\xA9\x7D\x69\x48\xA6\x8F\xE0\x91\xEC\x94\xCE\x35\x33\xA8\xF8\x6E\x72\xA7\x3C\x44\xCC\xA1\x95\x9C\x86\x9A\xAD\x33\xA8\x4B\xA1\xA0\xA8\x2D\xA9\x79\x3E\xDC\xA4\xA0\x03\xA3\x83\x99\xFF\x85\x6E\xA9\x34\xA2\x72\xA9\x6D\x46\xAB\x1C\x83\x41\xB2\x7E\xAB\x10\xAC\x1E\xA9\xA4\xA9\x27\x40\x56\x53\xE1\xA6\x9B\x36\x8B\x80\x87\x29\xAC\x16\x8A\xDF\xA9\xE2\xA6\x8B\x3E\xAE\x2A\x82\x47\xA6\x4E\xA9\x81\x5D\x16\x89\xE2\xA9\x72\xA7\xE7\x19\xA6\xA5\xAB\x27\x1F\x4E\xA3\x99\xA7\x53\xA8\xCA\xA8\xF1\x66\xA6\x1E\xDB\x20\x87\xB4\x2A\x9B\xA8\x18\xA0\x41\xA4\x67\xA8\x2F\xA6\x68\x53\xF9\xD2\x24\x4E\xA7\x50\xAC\x36\xA9\x32\x3D\xAD\xA8\x64\x68\xAB\x53\xC1\x9C\xA6\xFD\x9C\xCD\x4D\xE5\x97\x68\xAA\xDD\xA9\x96\xA9\xA8\x31\xB3\x94\x8F\xF3\x88\x7A\x06\x82\x9A\xB4\x78\x56\x9A\x2D\x81\xE6\x1E\xB6\xA7\xBF\x4D\xAA\x96\xA1\xB2\x9A\x77\xA8\x3D\x9F\x0E\xA2\x6C\x52\xC5\x75\x97\x4D\xB9\x0B\x9D\x06\xAD\xE8\x9D\xEA\xA9\x3B\x35\xB1\x53\xB4\x9D\x8A\x04\xB0\xC1\x86\xF5\x9B\xC2\x9A\x65\x53\xDF\xA9\x8A\x53\x9A\x39\xB7\x4B\xAE\x61\x99\xF3\xA4\xFE\xA2\xB6\xA8\xE8\xA9\xB7\x53\x90\x6C\x89\x39\xBF\x07\x06\x2E\xAD\x34\x83\x1E\x95\xEC\xA9\xDF\x2A\x99\x90\x83\xD9\x84\x3F\x37\x39\xA9\x6E\xAA\xB9\xA7\x6F\xA9\x9C\x1C\xBE\xA2\xBD\x48\xA0\x9B\xA8\x39\xAE\x6E\x88\x7E\xA9\x8A\x8E\x7D\x53\x91\xCC\x11\x4F\xBF\x6B\xA3\x85\xA2\x26\x9C\x53\xA8\x55\x8D\xC0\x3F\xDA\x90\x9F\x4E\xBD\xC3\x8D\x07\x9E\x72\xA8\xF6\xA9\xFA\xA9\x86\x1F\xFE\xA5\xB1\xF1\x8B\x98\xA6\xFD\x9D\xF5\xA5\xE5\xA9\xC7\xA9\x22\x4F\x9B\xA4\x98\xBF\x7A\x8A\xA8\x88\xA2\xFD\x9C\x67\xA6\xE1\xA7\x0F\x54\xFA\xA7\xA1\x4F\xBA\xC3\x9C\x00\xA3\x2A\xA9\x21\x9F\xE9\xA7\x1F\x53\xB2\xA4\xB9\x4F\xA9\x9B\xAB\x41\xA8\x50\x9F\x65\x7C\x0F\xAA\xD1\x36\x9B\x9B\x81\x3F\xA9\x5A\xA6\x16\xA8\xA3\x8B\xF9\xA8\x04\xAA\xDA\x53\xF0\xA7\x96\x58\x8C\xEF\x9C\xFB\x91\x8D\x93\x5B\xA9\xDF\xA7\x7A\x13\xBE\x04\x38\x4C\xA4\x65\x5A\x33\xA8\xE9\x07\xDA\xA4\xFC\x4D\xEE\x47\xEF\x84\xAA\x77\x82\x94\xAB\x9D\xA5\x18\xAB\x9B\xA3\x2C\xA0\x64\x22\xC5\xA6\xBE\x49\xB2\xF3\x41\x44\xA9\x68\xA3\x10\xAA\xBC\xA9\x00\x49\xFB\xA2\x85\x46\xB4\x03\xA7\x18\xA9\x7B\x8F\x92\x89\x2B\x9E\x95\x3B\xD9\xA3\x98\x4D\xA6\x30\x8D\x17\x58\x1A\xA8\xD2\x06\x67\x95\xF1\x14\xAB\x85\x99\x51\xB6\x6A\xA1\x93\xA0\xC9\x9F\x35\xA9\x5A\xA3\x0F\x4E\xB6\x92\xAB\xC0\x97\x9E\xA4\xDC\xA1\x82\xA8\x96\x9F\x3C\xA9\x68\x15\xC4\x92\x88\xEF\x95\x91\xAC\x6D\xA1\x34\xAB\x8A\x76\x03\xAA\x6D\x54\xE3\xA8\xA6\x71\x60\x9A\xA9\x3E\x8E\xDE\xA1\x6A\xA8\x25\xA7\x2E\xF8\x5A\x2F\xB2\x51\xA5\xF3\x99\x86\x9D\x5B\xAA\xD3\xA8\xC8\xA4\x95\x37\x93\xA7\x8E\x1C\xAE\x9C\xA1\x61\x33\x90\xAA\xCB\xA5\x42\xAA\xF5\x52\x8B\x9C\xA1\x30\xBA\x8D\xAF\x89\xA6\xAB\x98\x19\x37\x26\xAA\x93\x47\xCF\xA3\x8D\x7A\x8F\x87\xA1\x1C\xAE\x81\xA7\xA3\x9F\x91\xA3\x04\x51\xCD\x49\x77\xA9\x2E\xA4\xAE\xE6\xA0\x92\xAA\xC4\xA8\x62\xA8\x58\x50\x89\xA2\x84\x4E\xA9\xAC\x9A\x32\x9D\x21\xA9\xD5\xA9\x90\xA7\x7A\x54\xBE\xA4\xB4\xAD\x71\x8E\xA8\xC7\x8C\x56\x88\x34\xA2\xC8\xA9\x32\x3B\xB7\x20\x88\x4A\xB9\xA3\xA6\x13\xA4\x8C\xAA\xD2\x45\x2E\x97\x78\x54\xB7\xA9\xAE\x51\xA7\x90\xA7\x3F\xAD\xED\x7B\x13\x83\x68\x9E\x2B\x10\xE2\xA8\xBD\x52\xA6\xE3\x66\xEE\x89\x98\xA8\x29\xAA\x62\xA7\x1E\x4C\x91\xA9\xB6\x3C\xAC\x85\xA7\x1C\x86\x59\xA9\x2B\x38\x62\xA5\xB1\x54\xA3\x9E\x87\xEB\x9A\xC2\x9E\xA6\xA6\x96\xAB\x33\xAB\x99\xA7\x46\x4C\x86\xA9\x86\x4A\xBB\xB8\x57\xF5\x9D\xB3\x8A\x32\xAB\xF7\xA3\x9A\x54\xF1\x8F\x88\x7D\x81\x97\xA6\x29\x38\x9B\xAB\x32\xAA\x59\xAA\xDB\x54\x87\x90\xAF\x7C\x9E\xA6\xA1\xB0\xA0\xB2\x9D\x69\x97\x0F\x8B\xEB\x52\xAF\xE0\x18\x52\xA5\x4A\xA9\x4E\xAF\xD2\x96\x48\xA7\x89\x9D\x60\x3D\x87\x30\xAE\x24\xB9\xA6\xA2\x41\xAA\x92\xA4\x35\xAB\x84\x7C\xF9\x52\x84\xF4\x7B\x53\xB3\xA3\xAD\x4F\xAC\x64\xA8\xC2\xA9\x46\xA8\x9C\x48\xD8\x90\x8B\x09\xA2\xA0\xA2\x1B\xA9\x4F\x75\xA9\x89\xE7\x33\xDF\x54\xC6\x99\xB4\x3C\xB2\xA6\xA7\x88\x8F\x7F", +"\xA8\xD6\x97\x79\x9C\x72\x48\x95\xAA\x86\x1D\x57\xA8\xAD\x48\xAD\x9E\xAA\x88\xA1\x38\xA1\x9E\x50\xA8\x6D\x96\x4C\xAE\xED\x99\x81\x5A\x90\xAA\x49\xAA\x10\x9A\x03\x4B\x94\xA6\xA0\x27\xAD\x14\xA0\xD6\x75\x66\xA4\x49\xAB\xBE\x34\x19\x55\xDA\x95\x99\x27\xA7\xA5\xA6\x88\xA1\xA5\xA9\xE1\x9C\x1D\xA9\xA0\x42\x9E\x9B\xB6\x50\x98\xA8\xAF\x52\xA9\x69\xA9\x13\xA3\xAD\xA5\x6F\x1D\xDD\x96\x9E\x0A\xA7\xFE\x85\x5F\x96\xFF\xA5\xA2\x05\x1D\xAA\xAA\xB2\x3D\xA8\xAC\x80\x8B\xA2\xAA\x7D\x89\xE2\xA6\x3B\xA1\x31\xA9\x23\x03\xC7\x9B\x96\xF4\x64\x72\xA6\x05\xA6\x88\xA9\x1C\xA0\x65\xA1\xFA\x4B\xCC\x85\xAE\x50\xAD\x57\xA9\x29\xA3\x5F\xA9\x56\xAB\x27\xA9\x5B\x55\xC3\xA1\x9D\x55\xB6\x13\x94\xE0\x8B\x20\xA6\x24\xAB\xA9\xA9\x76\x40\xE2\x26\x87\xB4\x36\xAA\xA8\x66\xA4\x65\xAA\xF8\xA8\xA9\xA9\x7D\x19\x8A\x81\x9B\x4D\xBF\x34\xAF\xD5\x91\xFB\x8B\xF3\x32\xBA\xAA\xB3\x4A\xF6\xAA\x9C\x50\xB5\x94\xA3\x6B\xA4\x6C\xAA\x92\x9E\x11\x95\x4C\x3E\xFA\xA9\x98\x0A\xB2\x78\xA6\x56\xAC\x78\xA8\x12\x3D\x2C\x9F\x65\x89\x29\x88\x97\x55\xA3\x97\xAE\x58\xA8\x71\x74\xE8\x9D\xAA\xAA\x80\x2F\xC3\xA7\x9C\xC9\x8A\x1D\xA0\x25\xAC\xAB\xAB\x5D\xA4\xBD\xA9\xE9\x50\xCE\x9B\xBF\xF9\x9A\x28\x93\x57\xA9\xB3\xA8\x2E\xAB\x68\xA9\x4F\x50\xD1\xED\x72\x43\xA7\x5C\x95\x99\xA5\xA5\xAB\x5F\xAA\xD3\xAA\xC3\x54\xEE\xA4\xB2\x25\x8D\x9C\xAE\x82\x7B\x41\x8C\x60\xAB\x63\xA0\xB7\x52\xF7\xAA\xA7\x43\xBC\xA4\xAD\x29\xAF\x45\xAB\x72\xA8\x50\xA9\x6D\x27\xB5\xAB\xAF\x56\xB7\xC3\x9B\x3F\xAC\xBE\xA5\xFF\xA9\xE3\xA8\x82\x3C\x9F\x9D\xA9\x3E\xA0\xB9\x7A\x2A\xAC\xD6\x74\xAB\xA8\xC5\xAA\x64\x55\x8C\xAB\x89\x4A\xB3\x95\xAF\x03\x63\x21\x93\xCA\xA9\xE8\xAA\x93\x55\x8D\xAB\xB8\x4E\xAF\xC9\x71\x06\xA9\x8C\xAA\x90\xA4\x82\xA7\x11\x53\xD9\x99\xAC\xBC\x5D\x72\x98\x59\xAC\xB8\xA9\x09\xAB\x43\xA0\xEC\x4C\x87\xAA\x8E\x6A\x81\x96\xAE\x5C\x98\x4B\x83\x6D\xAB\x6D\xA1\xB9\x55\xC5\x0B\x66\x7B\x85\xAF\xA2\x77\xA0\xC2\x8F\xF2\xA8\x75\xAA\xF2\xD8\x63\x4F\x98\xCE\x88\xA7\x88\x5D\xAD\xAE\xA8\x56\xAA\xC7\xAA\xAD\x2E\xCC\x2A\x8B\x56\xB9\xAE\xA3\x5D\xAC\x5F\xAA\xB4\xA8\x0C\xA8\x3F\x18\x91\xCC\x2F\x57\xAE\x45\xA1\x5F\xAE\x84\xAB\xB2\xA8\xE3\xA9\x70\xA3\x4F\x88\xB4\x8E\x97\xAE\xAF\x5D\xAD\xAC\xA9\x81\xAA\xC0\xA9\x15\x4F\x8F\x71\xB6\x44\xB7\x28\x42\x59\xAE\xBF\xA8\x65\xAB\xED\xAA\xD9\x26\xEA\x67\x85\x48\xB3\xDD\x7D\x97\x33\xC1\xA8\x55\xA7\x06\xAB\xE8\x55\xD3\xA9\x88\xC4\x91\x97\xAE\x42\x3A\xC1\xA8\x6C\xAA\x82\xAA\xF7\x51\xDB\xA7\x92\xAA\x69\xA8\xA8\x1E\x71\x2F\x36\x89\xAB\x1F\xA7\x83\x47\xB2\xA7\x85\x1E\xAE\x6B\xAF\x50\xAC\x4B\xA3\xEF\x9E\x13\x9A\x4C\x42\xC0\xAB\x8E\x09\xAF\xB0\x66\x5B\xAF\xC5\xAB\x3B\xAA\x6D\xAA\xBD\x28\xBC\x12\x3A\xA5\x80\x91\xA2\x64\xA9\xE9\x67\x78\x8B\xE1\xAA\xF5\x55\xED\xA7\x8C\x11\xA8\xA9\xA6\x22\xAA\xAB\xA5\xCD\xA8\x58\x88\x52\x34\xA3\x8E\xA1\x2C\xB5\xB1\xA7\xA7\x37\xC6\xAA\x95\xA7\x1C\xAB\xD2\x53\xB3\xA7\x80\xAB\x74\xA0\xA1\x10\xAE\x13\xA7\xC8\xA3\x19\xA9\x5C\x56\xA5\xAB\xA6\x57\xBA\xAC\xAA\x5B\xA9\xFA\x9C\x29\xA8\xB0\x8B\x9E\x2F\x97\xA8\xAC\x50\xA2\xAA\xAD\x0E\x85\xC3\xA9\x60\xAB\xFF\xAA\x20\x56\xA5\x62\x90\x58\xAE\x7D\x60\x33\xA9\x87\xA9\x61\x8F\xA5\xAA\x4D\x22\xB4\xA6\xA8\x48\xBE\xB3\xA8\x19\x74\xE7\x06\xCE\x07\x70\x59\x52\x55\x90\x21\x3F\x50\xA9\xB3\xAB\xB2\x33\x48\xA1\x5A\x9A\xEF\xA3\x1F\x56\xDB\x5F\x82\x43\xBF\xCE\x94\x0C\xAC\xAD\xA9\xF8\x97\x03\x9F\xE3\x53\xE2\xAA\xB2\x57\x97\x53\x3E\x68\xA8\xFA\x98\xDC\xA9\xD3\x9A\x7C\x54\xCE\x2E\x91\x81\x85\x6F\xAF\x5E\x81\xAE\xA8\xDD\x8D\xBE\x34\x9D\x56\xF5\x77\x90\x5A\xBA\xAE\xAD\x66\xA9\xC4\xAA\x99\xA8\x18\xA8\x7B\x55\xFA\x9B\xB2\xDC\x80\x6B\x9B\xA0\x89\xD5\xA8\xCB\xA4\x6C\xA0\xD0\x54\xB3\x99\xA2\x57\xB8\x97\x95\x58\xAD\x51\x98\x1A\xAA\x39\xA9\x10\x4E\xBA\xA0\x8A\x61\x9C\xB4\xA2\xAB\xA0\xB7\xAA\x60\xAA\x07\xAB\x8A\xA1\x10\xAB\xBF\x3C\x1A\xBE\x86\x6B\xAC\xCD\xA4\xAE\xAA\x70\xAA\xA3\x4C\xE2\xA9\x84\x56\xBD\x93\xA0\xDD\xA3\xE8\x05\xAD\xAB\x62\xAB\xF0\x55\xC7\xAD\x8E\x49\xAB\x9A\xAD\x59\xAA\xAD\xAB\x67\xAA\x23\xA7\xF7\x4B\xF2\x16\x39\x2F\xA3\x9F\xA3\x5A\xAD\xC1\xA1\xDC\xA2\xCB\x97\x9F\x56\x82\x96\xA1\x5E\x88\xA4\xA6\x54\x9A\x91\xA9\x6B\xAA\x22\xAB\xCF\x67\x4D\xAD\xA0\x32\xAD\x73\xA9\x6B\xAF\xCD\xA4\x4F\xAB\xB7\xAA\x72\x4E\x94\xA9\xA3\x1C\xB6\xA4\xAE\xAE\x57\xDC\xAB\xB7\x9B\x74", +"\xAB\xF6\x54\xEB\xAD\x82\x27\xAE\x18\x9E\x28\xAA\xD4\xA6\x45\x7D\x50\xAA\x9E\x18\x90\x9E\x86\x59\xA8\xA7\xA4\x22\xA8\x5C\x98\x42\xA8\x25\xA6\xA9\x52\x86\xAE\x97\x22\x6D\x8E\xA2\x4A\xAF\xA0\x36\xBC\xAA\x03\xA7\x8B\x49\xF5\xAD\xA6\x52\xBB\xB5\xA4\x79\x90\x75\xA9\x8B\xAA\x54\xAB\xD8\x56\x8C\xAC\x9A\x5B\xAE\x4C\xAB\xDE\x3D\xBB\xAB\xC7\xAB\xBC\x34\x17\x57\xB1\x9E\xB1\x32\xBA\xB8\xA0\x27\xA3\x3B\x86\xAE\xA9\x4D\xAB\x16\x57\xA1\xAE\xA7\x58\xA3\xB9\xA7\x27\xAE\x5B\xAB\x9E\xAB\x3E\xA8\xE0\x51\xB2\x34\xBC\x57\xB4\xCD\x9B\x70\xAA\x88\xA8\xF5\x92\x7D\xA7\x79\x1A\xF1\xAD\xB2\x5C\xB8\xB1\xA5\xD5\xA1\x40\xA9\xE5\xA2\xF4\xA8\x6A\x50\xFB\xAB\xB2\x5F\x91\xB9\xAE\xE2\xA6\xC2\xAA\xB5\xA9\x59\xA9\x01\x56\xB3\x34\x8C\x5D\xA3\x78\xAE\x74\xA8\x5D\xA8\xD4\xAA\x96\xA8\x41\x57\x91\xCC\x29\x5C\xBA\x47\xA8\xB1\xA0\xDA\xAA\x3A\xA6\x8E\xAA\x2E\x53\xA0\x6C\x9D\x4F\xB0\x22\xA6\x7E\x8C\xD8\xA9\xD3\xAA\xE9\xAA\x4F\x57\x86\xAC\x9B\x86\x84\x1E\x93\x77\x8A\xE8\xAB\xD9\xAA\x02\xAB\x69\x57\x98\xAC\xA3\x6F\x97\x55\xAA\x13\xAD\x4A\x8E\xD6\xAB\xA1\xAB\x5F\x56\xC5\xAE\xB0\x53\xA7\xBA\xAC\x3F\x9A\x41\xAB\x50\xAB\xBB\xAB\x6F\x57\x9E\xAC\xAC\x5A\xA3\xAC\xA1\xA8\x9A\x86\xA8\xC2\xA6\x1A\xAB\x0C\x6F\x28\xAE\xB8\x5D\xB4\x6C\xA4\x40\xA2\xC7\xA9\x62\xA0\xCC\xA6\x41\x0F\xBE\xAC\xB4\x4C\x80\xB2\xA4\x51\xAF\x61\x85\x52\xA9\x04\x8E\x76\x38\xD1\xAC\x87\x50\xAE\x9F\xA7\x24\xA5\x28\xA9\x35\xA2\x26\xAB\x03\x54\xC6\xA1\x4D\x62\x8E\xBB\xA4\x75\xA8\xED\xAA\xD5\xAA\x03\xAB\x95\x50\xCB\xAB\xB2\xBD\x8B\xFC\x8F\xB0\x83\xCB\xA9\xE2\xAA\xB3\xAB\xA5\x57\xF0\xAE\xA7\x5E\xB2\xBB\xA3\xB3\x9D\x64\xAA\x95\xAB\x8E\x9C\x66\x56\xCC\xA0\xA8\x59\xAF\xBD\xA3\x75\xAB\xB8\xA6\x30\xAA\x18\xAB\xF0\x4A\xA8\xA8\x98\xB7\x87\x99\xA2\x52\xAB\x11\x7E\xEC\x8E\x98\x8F\xCE\x2E\x9A\xAF\x8A\x4F\xA8\x9F\xAE\x12\xAE\xF0\xA9\xBE\x8D\x3E\xAB\xC4\x18\x95\xDB\x6E\x45\xB1\x85\xA0\x17\xAB\x16\xAA\xA1\xAA\xC2\x4F\x89\x56\xC1\x1A\xAB\xB8\x69\xB8\xA5\xB5\xA0\xE4\xA4\x2F\xAA\x86\xAB\xA4\x51\xD0\xA8\xB5\x2F\xA2\x9A\xA2\x70\x9D\xB9\xA5\x86\xAB\xE7\xA6\x33\x4E\x85\x35\xB9\xA5\x3F\x78\xA4\x13\xA0\x8B\xAB\x91\xAB\xC0\xA8\x93\x56\xDD\x81\xAB\x55\xB4\xCD\x6D\x56\xAE\x4B\xA8\x15\xAA\x30\xA9\xCA\x50\xA5\x4A\xBD\xA5\x2C\xBF\xAD\x7E\xA6\xFD\xA8\xF8\xAA\x5F\xAA\x4A\x3D\xAE\x6E\xA7\x49\xB9\x6F\xA9\x26\xAB\xD6\xA8\xB7\x8F\x54\xA1\xED\x57\xE7\xA9\xBE\x5C\xAD\xB8\xA0\x1A\xAB\xA7\x4D\x92\x9E\xB0\x75\x88\x55\xE7\xA6\xA0\x66\x8B\xBF\xA0\x79\xA6\xCB\xA8\xE3\xAB\xB1\xA3\xFC\x53\xA0\x9A\xA2\x38\xAA\x36\xAA\xA0\x8F\xF9\x30\xFF\xAA\xEE\xA3\x0B\x55\x84\xA9\xAD\x5C\xB6\x04\x93\x96\xA0\x74\x9C\xF7\xAB\x9F\xA5\xBE\x57\xB9\xAA\x97\x33\xBB\xA9\xA0\xB9\xA1\xFE\xA9\xBC\xA3\xF9\xAB\x62\xDA\x3C\x33\xA2\x1A\x65\xB7\xA2\xF2\x8A\x58\xA5\x02\xAD\x81\xAA\xEF\x57\xAD\xA3\xBD\xAC\x8A\xAD\xAE\x29\xAC\xB5\xAA\xF0\x9F\xC3\xA9\x27\x58\x82\x9E\xA9\x60\xA5\xAA\xAB\x36\xAF\x9E\xAB\x23\x99\xF1\x90\xFC\x56\x8C\xCF\x55\x03\xA0\xC1\xAE\x7F\xAB\x01\xAE\x16\xAB\x4D\xAA\xEC\x56\x84\x5C\xB1\xD5\x9E\xAD\xAE\x39\xAD\xF8\xAB\x86\x87\x1C\x8E\xFB\x57\x95\xB0\xBD\x5C\xAE\xA2\xAD\x50\xAC\x61\x91\x4F\x8A\x55\xAA\x97\x37\xB7\x98\xA0\x07\x94\xB8\xAB\xA0\x8F\x03\xAE\xB8\xA7\x10\xAC\x8F\x54\xA3\xB0\x8F\x44\xB7\x75\xA5\x4B\xAA\x49\x8E\x07\xAC\x2D\xAC\x6B\x56\xA7\xAB\x90\x5D\xB5\x95\xA5\x86\xA8\x0E\xAE\xF2\xAA\xFA\xA9\x9C\x57\x9A\x43\x9D\xB9\x81\xC2\xA6\x86\xAA\xAA\xA7\xB8\xA7\x17\xAA\x79\x58\xBB\x30\xB2\x58\xB0\x97\xA9\x73\xAE\x93\x8E\x9E\x89\x37\xAC\x39\x44\x91\x8F\x84\x61\xA5\x9D\xA6\x5C\x40\xE8\xA9\x3B\x8E\xF6\xA3\x4C\x58\x8A\xB0\x9C\x61\xAC\xC0\xA7\x1E\xA9\x28\xAA\x7E\xAA\xDB\xA0\x59\x57\xD9\xB0\x89\x62\xB6\xC0\xA2\xEB\xA5\xB2\xA5\x98\xAB\x1D\xAB\xC5\x41\xD1\x8F\xA7\x5A\xB4\xC0\xAB\x89\xAB\x0B\xAD\x26\xAA\x4A\xAC\x1E\x2C\xD5\xA7\xA0\xB0\x83\x2D\xAB\xB2\x35\x0F\xAC\x5A\xA6\x02\xA5\x17\x58\x86\x94\x8E\x5E\xA6\x9D\xA8\xA5\xA2\xE1\x74\x3B\xAA\x46\xAB\x4B\x58\xE7\xB0\x8D\x61\xB3\xC4\xAF\x84\xAA\xDD\x96\x3C\xAA\x76\x97\x13\x58\xF7\xD4\x2E\x62\xBD\x71\xA9\xD6\xA5\x13\xAD\xE3\xAB\x4F\xAC\x8F\x57\x8B\xA3\xAC\x41\xB4\xC2\x8B\x01\xAE\xA0\x92\x26\xAD\x20\xA5\x41\x3B\xC1\x96\x8C\x5F\xA0\x8A\xA2\x7F\xA5\x7F\x99\xE7\x9E\x56\xAC\xB9\x58\xFE\xB0\xA8\x61\xA5\xA5\xAA\x86\xAA\x10\xAE\xF3\xAB\xB0\x8E\x88\x57\xAE", +"\x35\xAC\x24\xB7\xC1\xAE\x4E\xAF\xFF\xAA\xD1\xAB\x12\xA9\x1D\x52\xFA\x52\x87\x45\xAD\xB2\xA8\xD4\xA0\x38\x8C\x22\xAC\x68\xAC\x30\x43\xD2\xB1\xB0\x50\xAE\x4E\x74\x08\xAA\xF5\xA8\xF5\x9E\x48\xA8\xF8\x21\x8E\xA6\xAE\x63\xB1\x30\x33\x8C\xAE\x4C\xA4\x47\xA7\x58\xAC\x69\x4A\x99\xB0\x99\x39\xA3\xB3\xA2\x53\xAF\x20\x9F\x4A\xAB\xB9\xA6\x19\xB8\x62\xB1\xB6\x60\xBD\xBF\xA2\x89\xAF\x14\xAD\x2F\xAD\x83\xA9\x44\x4B\x9E\xA4\xB3\x54\xBA\x7B\x60\x00\xA1\x21\xAF\x3B\xAC\x76\xA5\x15\x56\xA6\xAF\xA1\x57\xBC\x74\xAC\xFF\x9C\xCC\xAB\x41\xA2\x15\xAA\x3B\x52\xB7\x91\x99\x78\x90\xC4\xAA\x8B\xAD\x21\xAC\x3F\xAA\x54\xAC\x5A\x4B\xAF\x85\x90\x5F\xA4\xFE\x82\x7D\xA8\x00\xA8\xF5\xAA\x1C\xAA\xD1\x57\xFE\x02\x10\x55\xAC\xA1\x59\x7D\xAB\xF9\x94\xCC\x8B\x59\x8F\x74\x38\xFD\xB1\x94\x39\xA7\x53\xA0\x90\xAE\xA3\xA4\x32\xAD\x39\x91\x44\x54\xCD\x8E\x96\x5A\xAD\x0E\x78\x69\xAF\x8F\xA8\xFA\xAB\x9B\xAC\x92\x1C\xB9\xB2\xB6\x61\xA8\xB7\xA0\x88\xA8\xD4\xA9\x78\xA7\xFA\x9C\x1E\x3E\xD3\xA8\xB8\x55\xA7\xF0\x89\x7F\xAF\x9D\x75\x5E\x35\x13\xA2\xF8\x2E\xF6\xAC\x86\x5B\xB8\xB3\xAD\x6A\xAD\x4C\xAA\x00\xAC\x58\xAB\xCF\x50\xDC\xA6\xAC\x2E\xAB\x93\xA9\x94\xAC\x65\x9E\x4E\xAC\x58\xA7\x93\x4D\xC6\xB1\x98\x60\xA6\xAE\xAA\x81\xAC\xEB\xA6\x19\xAB\x62\xA2\x71\x52\x98\xA3\xB9\x40\xBE\xB8\x62\xCE\x8F\xA0\x34\x56\xAC\x32\x9C\x5A\x59\xD9\xAD\x9C\x65\xA4\xBC\xAD\x36\xAA\xD9\xAA\x83\x8B\xAB\xAC\x0F\x4F\xA2\x7A\x9C\x62\xA9\x6D\xA3\xEB\xA2\x20\xAD\xAD\xA6\xCA\xA8\x46\x1E\xA0\x77\x8A\x64\xB8\x04\xA7\x96\xAB\xAF\xA5\xAC\xA6\xC2\xAC\x9E\x58\x86\xB3\x82\x39\xBA\x85\xAD\x34\xAB\xB7\xAA\x87\x9F\xBD\xA9\x3F\x50\xD0\x4C\xBD\xA5\x37\xCB\xA2\xB9\x99\x2F\xAE\xC8\xAB\xBD\xAC\xC8\x56\xC1\xA6\x8C\x30\xBD\x05\x9E\x49\xAD\x24\xA0\xE4\x7B\xC3\xA9\x8B\x59\xC1\x84\x8D\x66\xBC\x70\xAF\x98\xAE\xC3\xA5\x61\xAC\xB6\xAC\x03\x59\xA7\x97\x93\x52\xB4\xAD\xA4\x88\x91\xCE\x8C\x63\xAD\xA5\xAC\xFF\x56\xCD\xB2\xAA\x5B\xBF\x8C\x5C\x29\xAF\xD6\x9C\x15\xAC\x1F\xAC\xF4\x50\xA1\xA9\xB6\x66\xAA\xCD\xA8\x9B\xAA\x88\x9C\xC0\xAB\x93\xAA\xBC\x59\x9A\xA7\x9A\x0B\x1C\x9C\xAB\x5A\xAD\xE1\xA1\x13\xA6\x57\xAA\xCE\x58\x80\xB3\xBD\xB7\x9C\xB9\xA1\x87\xA9\xB6\xA9\xBA\xA8\x58\xA9\xD1\x59\xF7\xD4\x1C\x66\xB3\xDF\x93\xB9\x9B\x17\xAE\x43\xAC\x00\xAC\x84\x1C\xA6\xAE\xA4\x68\x8C\x76\x9B\x9A\xAD\xFE\xA5\x6B\xAD\xFB\xA7\x1F\x4E\xED\x9E\xA1\x38\xA0\x64\xA8\x11\xA8\x27\xAE\x59\xAD\xE2\xAC\x10\x42\xC7\xB3\xB0\x54\xA8\x8B\xA3\x88\xAB\x7A\x95\x21\xAD\xB1\x8B\xCF\x67\x5B\xB3\xAA\x39\xB4\xDF\x97\x6B\xAB\xD5\xAB\x85\xAA\x4C\x60\x8E\x58\xC8\xAF\x8A\x65\xA5\xC5\xA5\x9D\xA8\xF8\xAA\xCC\x9D\x77\xA9\xC7\x03\xD6\xA9\xBD\x5B\xA4\xCF\xA0\x9F\xAC\x48\xA2\x6E\xAD\x80\xAB\x58\x10\xDC\xA9\xA9\x44\xA0\x32\xAA\x9D\xA9\x30\xAE\x26\xA1\xC1\xAC\xAE\x59\x91\xB3\xB0\x66\xA7\xCC\xA3\xF4\x9A\x15\xAD\x46\x9F\x82\x8F\x0C\x5A\x84\xB4\xB7\x61\xA5\xAE\xA9\xFF\xA7\xB8\xA9\xE0\xA6\x5B\xAC\xFA\x51\xF5\xB2\xAB\xAC\x3A\xCF\xAF\x72\xA3\xCD\xA7\xBC\xAB\x67\xAB\x1A\x55\xE1\xA9\xA0\x5D\xA3\xA7\xA4\x3E\xAC\xE9\xA5\x9D\xAB\x10\xAD\xF0\x58\xBA\x88\xB2\x63\xA1\xC4\xAA\x00\x8A\x7D\xAA\xE2\x9E\xF2\x92\x8F\x47\xA2\xB4\x8C\x65\xB3\x3B\xA3\x8D\xAF\x47\xAB\x1E\x96\x83\x8E\x8C\x44\x8C\xA7\x41\x69\xB9\xD1\xAA\x88\xAB\x47\xAF\x94\xAB\xF7\xA9\x37\x57\x8F\xA4\xA3\x75\x99\xCF\xA6\xA1\xAE\x43\xA0\x86\xAC\xF4\xAC\xAF\x59\xA5\xB4\xAD\x65\xB4\x7C\xAE\x51\xAA\x80\x77\x3A\xAD\xD0\xAB\xDF\x38\xB4\x90\x43\x67\xAC\x71\xA5\x9E\xAB\xEF\xA5\x7C\xA6\x2C\xAD\x1A\x5A\xDA\xB4\xB1\x66\xA5\xC8\x95\xF9\xA7\xAF\x9C\xE8\xAA\x2B\xAC\xA2\x57\xBC\x3A\x94\x69\xB3\xCE\xAA\x70\xAD\x40\xAD\x0E\xAD\xE0\xAB\x1E\x59\xC1\x0A\x87\x64\xA2\xFE\x9E\x7A\xAB\x4C\xAC\x8B\xAD\x0C\xA6\x2E\x5A\x98\xAE\xA1\x32\xBE\xBA\xAC\xCF\xA2\xDA\xAB\x34\xA2\x17\xA9\xF6\x58\xDA\x59\x9C\x45\xB1\x27\xA0\xE7\x8B\x4E\xAE\xDF\x96\xEA\xAC\x23\x5A\xE7\xAB\xA4\x5C\xA1\xCD\x7D\xFB\xA1\x51\xAC\xA0\xAB\xF4\xA7\x0F\x0B\xD9\x7B\xA4\x7E\x80\xE9\x95\xA6\xA9\xED\xA4\xDF\xA7\xB5\xA7\x7E\x4F\xEA\xB3\x80\x3E\xB1\x69\xA2\x02\xA4\x86\xAA\x48\xA2\x1B\xAA\x2F\x59\xD7\xAC\xB1\x64\xA5\xB4\xA4\xF4\x02\xE7\x06\x0A\x5B\x9A\xAC\x8B\x56\xE7\x3D\x85\xFA\x95\xD2\xAB\x75\xAC\x98\xA5\xD7\xAB\x18\xAD\xD1\x56\xFE\x91\xA2\x5F\xBA\x8B\xA4\x7E\xAF\xD2\xAA\xF9\xAB\xF0\xA3\xD4\x05\xC8\xB2\x86\x5A\x4E", +"\x78\xA4\xA7\xAA\x30\xAE\x29\xAD\x93\xAC\xE1\x57\xAE\xB0\xB6\x25\xB2\x92\xAC\x25\xAA\x2A\xAE\xAD\xA5\x2A\xAA\x2C\x50\x9A\xB3\xB9\xA5\x36\x16\xA0\xD5\xA7\xAC\xA4\x31\xAC\x58\xAC\x6A\x59\xB2\xB1\xBF\x64\xAD\x9D\xA3\x77\xA8\x75\xA6\x33\xA8\xC7\xA8\x7C\x55\xB3\xA0\x83\x6B\xB3\xD5\xA5\xAC\xAF\x42\xAF\xB1\xAC\x86\xAA\x28\x59\xCA\xB1\x88\x7F\x4F\xC0\xAA\x90\x82\xBF\xA5\x62\xAB\x4A\x73\xC4\x5A\x8F\xB5\xB5\x69\xB1\xD4\xAC\x66\xAC\x2F\xAD\x6E\x9C\x38\xAA\xD4\x1C\xBE\x72\xB4\x6A\xAB\xBC\xA9\xAD\xA9\x20\xAF\x86\xAD\xE9\xA9\x88\x59\xD4\xAD\xA9\x5F\xBE\xF9\x8A\xAF\xAD\x5C\xAE\x95\xAD\x73\xAD\x22\x58\xCF\xA8\x8A\x6B\xA8\xAE\xA8\x97\xA5\x50\xAA\x5E\xA5\xF2\x9C\xB4\x22\xE4\xB5\xB2\x6B\xA6\xD6\xA6\xA7\xAE\x1C\xAF\xDE\xAA\x29\x8E\x51\x58\x8D\x7D\xA5\x66\xAF\x1C\xAA\xE9\x87\x70\xAB\x98\xAC\x6A\xAD\x3B\x4E\xD1\x9A\xAF\x62\xB3\x6A\xA4\x74\xA8\xC5\xAB\xA4\xAD\x6E\xAD\xB3\x59\xC6\x38\x81\x7A\x8F\x3E\x30\xB2\xAE\xEF\xA0\x8F\xA6\x7F\xAC\x3E\x4E\xF9\xAE\xA6\x6C\xB5\xB9\xA7\x48\xAB\xE0\xA9\xCE\xA3\x82\xAB\x54\x50\xCE\xAA\x61\x52\xBB\xD4\xA5\x29\xA3\x5F\xAD\xE0\xAB\x3B\xAB\x91\x56\xF6\xB5\x8B\x4A\xB7\xD1\x90\x86\xAF\x83\xA9\xE1\xA8\x76\xAC\xE1\x01\xCF\xAB\xB0\x6B\xB2\xD8\xA0\x77\xA1\xF9\xAB\x90\xAC\xFB\xAA\x45\x5A\xB3\xA9\xAC\x61\xB6\xAE\xA2\xA0\xAD\x60\xAF\xC4\xAC\x73\xAD\x15\x5B\xCE\xB0\xA0\x67\xB5\x03\x45\x2B\xA9\x35\xAF\x8A\xA7\x3F\xAD\xF7\x4C\x9F\x95\xAA\x5C\xA7\x70\xA4\xA8\xA9\xC1\xA5\x3F\xA7\x7A\x5A\x5D\x2E\x9F\xB6\xBC\x12\xB8\xC8\xA1\x8D\xA8\xBC\xAB\xC8\xA9\x4A\xAC\xD5\x58\x97\x8F\xBA\x5F\xB3\xD6\xAB\xB6\xAF\x52\xA1\x7F\xAA\xA0\xAD\x83\x57\xCF\x03\x66\x7B\x8A\xDB\xAB\xAE\xA6\x6E\xAD\x46\xAC\xD9\xAB\x1B\x59\xDB\x9E\xA7\x68\xA8\xBA\xAA\xA5\xA7\xF7\xA0\x88\xAC\x13\xA2\x3E\x5B\xB1\xAF\x82\x5E\xBF\xCF\xA9\x67\xAF\xFC\xAA\x28\xAD\x1A\xAC\x3D\x5B\x86\xB6\xB5\x6A\xAD\x64\xA7\x9D\xA2\xA7\xA8\x8C\xA4\x8E\xAB\x9A\xEC\x65\xA9\xA3\x6B\xA8\xDC\xA2\xB9\xAC\x5F\xAC\x64\xAD\x63\xAC\x92\x59\xE2\xAC\x83\x6E\xA1\x3C\x89\xA2\xAA\x49\xAC\xD3\xAD\x94\xA5\xFE\x56\xC6\xB3\x8F\x68\xA8\xCE\xA2\xE6\x82\x2E\x98\x48\x53\x78\xAD\x4D\x5B\x99\xAF\x8F\x6D\xB2\xB2\xAB\x9B\xAC\x04\xAE\x88\xAB\x0B\x3D\x13\x1F\xA7\xB7\xA0\x3B\xAA\x59\xAC\x9F\xAE\xD9\xAA\x7F\xAD\xB8\xAB\x8E\x55\x88\xB4\x94\xBC\x80\xA8\xA7\x8D\xAC\x27\x92\xEE\xAC\xB3\xA6\xE1\x4E\xDA\xB1\x9E\x67\xA8\xD6\xAB\xB5\xAE\x81\x99\x1A\xA8\x46\x88\x34\xC8\x3C\xB6\xAE\x25\xA0\xDB\xA4\xE0\xA1\x31\xA6\xA0\xAC\x7A\xAB\x65\x5B\xC5\x9D\xB7\x5B\xBC\x58\xAD\xA6\xAD\x9A\xA3\x97\xAC\x38\xAD\x61\x5A\x91\xB6\x9C\x6E\xB7\xDA\xA7\xB0\xA9\x6B\xAC\x2F\xAD\xE6\xAD\x02\x24\xE9\xB1\xBB\xD0\x86\x58\xA7\x80\x83\xB5\x6E\x88\xA8\x8E\x90\xC7\x5B\x81\x94\x89\x6F\xA3\xD9\xAF\x87\xAC\x48\xAF\x3C\xAD\xAC\xA8\x05\x59\xFF\x7A\x9F\x2C\xBC\xD3\xAB\xB2\xA9\xC2\x31\xCB\xAD\x8C\xA6\x2F\x5B\xBB\xB2\xBF\x63\xBD\xD7\xAE\x93\xA9\x74\xAC\x28\xAC\x82\xAC\x82\x4D\x8A\xA2\xBF\xFF\x9C\xD6\x8D\xBF\xAD\x2F\x37\xFF\xAC\xC8\xA6\x65\x4A\x82\xB8\xB1\x6C\xBD\xC9\xA7\xE5\xA6\x80\xAD\x32\xAD\xF3\x9F\x09\x5C\x9A\x9B\x81\xA3\x92\xB3\xAC\xF0\x7D\x85\xAB\x3F\x36\xD8\xAD\xA8\x5B\xCE\xB6\xB9\x66\xB6\xDF\xAC\xA3\xAC\x51\x8D\x7D\xAC\xC1\x8E\x2B\x59\xA8\x80\xB1\x36\xA2\xB4\xA9\xE5\x47\x48\xA9\xBD\x58\x58\xAD\x2B\xEE\x52\xB7\x80\x3C\xB4\x5A\xA8\x82\xAE\xFB\xAB\xEF\xAB\x3B\xAD\x48\xF6\x1C\xAB\xA9\x55\xB4\xB4\xA0\x83\xA9\x18\x84\x95\xA8\xBF\xA8\xA0\x3B\xB2\xB8\x96\x1C\xAD\x79\xA7\x98\xA5\x7A\xAF\x27\xA7\xEB\xAD\x30\x5A\x96\xB7\x87\x33\xAD\xC1\xA4\x99\xA9\x4A\xAA\x72\xA7\xC9\xA5\xA3\x56\xFD\x72\x8A\x1A\xB4\x9A\xA6\x15\xA7\x88\xA2\xC7\xA7\x06\xAD\x8F\x56\xF2\xB3\x86\x55\xB2\x9B\xAF\x95\xAD\x31\xAA\xEA\xA4\x2F\xAA\xB9\x63\x60\xA8\xA9\xEE\x76\xE2\xA4\xC3\xAA\x08\xAE\x0D\xAE\x15\xAC\x9A\x4E\xAC\xB0\x9C\x64\xB1\x73\xA6\xBF\x8F\x8C\xA9\xD9\xA9\x08\xAC\x99\x51\xCB\x3E\x93\x2D\xB6\x53\xAD\x7D\xAC\x1C\xAC\x2C\xAA\x1C\xAE\xD7\x59\xFE\xB2\xBE\xA5\x44\xE3\xA4\xC7\xAD\x86\xAE\x1D\xAF\xEF\xAB\x5A\x5B\xE7\xB1\x82\xC6\x9D\x36\xAB\x44\xAA\x88\xAC\xD7\xA3\x6E\xA4\x10\x5C\x9A\x9A\xB0\x6C\xA5\xC6\xAF\xB9\xAB\x2D\xAE\x9A\xAD\x38\x89\x4D\x5C\x9E\xAB\x8C\x6B\xA0\xB7\xAB\xE7\x9D\xDE\xA3\xB8\xAA\xA3\xAC\x34\x58\x98\x8F\x9D\x3C\xA5\xE3\xAD\xA9\xAB\xA7\xA6\xDA\xA6\xC8\xA7\x6C\x4F\xCF\x97\xAE\x3D\xA3\x8C\xAA\xDA\x98", +"\xF0\x69\x64\xA4\x77\xAB\x3F\x58\x8D\xB8\xB9\xA5\x23\xE2\xA0\xCC\xA2\x45\xA6\x30\xA6\x16\xA5\x94\x5B\xAE\x94\x8A\x71\xBB\xA8\xAB\xBD\xAF\xFE\xAA\x6F\x73\x86\xA0\x4C\x50\xC9\xB0\x80\xF6\x3C\xE3\xA2\x13\xA0\x01\xAC\x43\xAC\x1C\xAC\x16\x5B\xC8\xAC\x98\x6C\xB6\xD9\xA4\x0A\x98\x95\xAD\x70\xAD\x8C\x4A\x72\x23\xF3\xB8\xBD\x72\xA3\xC7\xAF\xCB\xAD\x1C\xAD\x20\xAF\x8B\xAD\x0E\x57\xDF\xB0\x90\x5C\xAA\xE0\xA5\x0F\xA4\x21\xAA\x50\x8A\x77\x8D\x75\x4A\xCB\xB9\x8B\x64\xB1\xC4\xA0\xCC\xAF\x99\xAE\x30\xAE\x59\x91\xB4\x54\xD4\xB6\x98\x73\xAA\xE6\xAB\x7E\xA6\x97\xAC\x37\xAE\x67\xAE\xE7\x5B\x82\xB9\xA4\xC3\x96\x8E\xA6\x0E\x9D\xCC\x40\x2F\xAF\x72\xAE\xCC\x5C\xE7\xB9\xB7\x71\xA1\xE6\xA5\x50\xAA\xF2\x31\x97\x96\x43\xAE\x8E\x47\xB8\xB4\xAC\x6D\xB1\xC7\xAE\xB6\xAF\xBE\xAA\x3F\xAB\x9E\xA8\xC7\x54\xC2\xA5\xAE\x67\xAA\x71\xAF\xC0\xAE\xD5\xA5\x64\xA6\xB4\xAC\x55\x4E\x94\xB8\xA0\x59\xB6\xE0\xA5\xEE\x16\xDC\x8C\x3E\xAE\xEC\xA3\x4F\x28\xB1\xB7\x90\x6A\xB3\xDD\xAB\x79\xAF\x49\xAD\x22\x89\x6F\xAC\xD4\x20\x8A\xB4\xAA\x74\x99\xE6\xA0\xCF\xAB\x9B\xAD\x49\xAD\x6E\xAE\xE9\x5C\xD0\xB9\x97\xF4\x88\x89\xA7\xD0\x9E\x9D\xAC\x47\xAF\x32\xA4\xD9\x58\xF4\xB7\x9B\x63\xAC\xB9\xA4\x47\xAC\x7A\xAA\x84\x9B\x55\xAC\xFC\x20\xEF\xB9\xA8\x74\xA4\xC9\xAA\xBC\xAE\x24\xAC\xBA\xAD\x87\xAC\xCE\x5B\xE2\xAE\x9D\xEB\x98\x40\x93\xCE\xAB\x93\xAD\x1F\xAE\x33\xAE\x7F\x5C\xB7\xB8\xB4\x73\xB1\xE0\x8B\x76\xAA\x5A\xAF\x9D\x34\x56\xAE\x94\x4E\xC1\x99\x96\x3A\xA3\x66\xA1\xCB\xAD\x98\xA7\x2C\xAE\x19\xAD\xB5\x5C\xD3\xB2\x9C\x40\xA1\x78\x95\x77\xA9\x12\xA2\x4C\xAE\x34\xA7\xF2\x3B\xFB\xB3\x9D\x67\xB6\xE9\xA9\xB0\xAD\x0B\xAE\x62\xA1\xBE\xAB\x2C\x56\xC8\x4F\x97\x75\xBF\x03\xA9\xE6\xA5\x45\xAD\xEF\xAD\x17\xAD\xBF\x5B\xB3\xAF\x81\x6F\xA7\x78\xA7\x3C\x80\xF1\xA9\x32\xAE\x9F\xAE\xDA\x5C\xF5\xB8\x8D\x73\xB3\xE7\xAE\xCD\xAD\x9E\xAC\xAA\x8D\xEE\xAD\x96\x50\xDF\xB7\x96\x5E\xA8\xE6\xAF\x7C\x30\xA9\xAF\xD4\xA6\xA5\xAE\x55\x4F\xCC\xBA\x98\x3A\xB5\xDC\xAB\x82\xAF\x72\xAF\x1A\xAF\x98\xA5\x5B\x42\x92\xB2\x98\xB7\x8F\xD3\xAF\xB0\x87\x7D\xAF\x94\x91\x93\xAE\x58\x5D\xE6\x90\xA9\x6E\xB1\xCF\xAB\xBA\xAB\x3E\xAC\x58\xA9\x0C\xAE\x54\x51\x96\xA8\xAB\x50\xB0\xBC\x7E\x7A\xAF\xAD\xAC\x41\xAF\xBA\xAD\x28\x44\x83\xAC\x8B\x6E\xA0\xDE\xAD\xB8\xAD\x5F\xA8\xA2\xAD\x24\xA1\x72\x0F\xB1\xA4\x88\x6D\xBB\xBD\xAE\xD9\xA8\x58\xA4\x27\xAE\x2C\xAE\x9E\x56\x95\xBB\x9B\x71\xB7\xEC\xAE\x53\xAC\x08\x78\x48\xAD\xA0\xAA\xC7\x57\x9E\x57\xBE\x75\xBE\x7C\xA0\xD8\xA8\xF4\xA6\x60\xAF\xAB\xA7\x84\x5D\xE9\xB8\x86\x76\xA2\xDC\xA4\xAA\xAE\xB5\xA5\x0A\xAF\xB0\xA5\xA6\x50\xCC\xAA\xAB\xDB\x8E\xAA\xA1\x33\x03\x26\xAE\x79\x5A\x18\xAE\xA0\x3B\xAD\xBB\xAE\x2A\xB0\xEB\xAD\xD1\xAA\xAE\xAE\x3C\xAE\x40\xAE\x21\x5D\xEE\xC7\x61\x5A\xA1\xB8\x9E\xAB\xAC\x68\xAB\xA6\x95\x81\xAD\xD6\x23\xFF\x9D\xBB\x76\xA1\x7A\xAF\xF9\xA6\xFB\xA4\xBD\xA7\xC7\xA7\xF6\x4E\x91\x9F\xA5\x3E\xAC\x03\xA1\xC9\xAE\xDB\xAB\x24\xAE\xAF\xAA\x50\x53\xD2\x40\x93\x71\xA6\xB5\xA5\x3F\xA1\xC5\xA6\x6B\xAF\x9F\xAE\x9D\x5C\xCA\x9F\xBC\x34\xAC\x7E\xA7\xEF\xA6\xF9\xA7\xE4\xA7\x51\x9F\xDE\x5A\xDA\xA6\xA1\x65\xA1\xD7\xA0\x19\xA9\xD4\xA3\xEC\x8F\x42\xA5\xAC\x4E\x88\xB9\x86\x74\xB1\xE0\xA8\xD0\xAC\x27\xAC\x01\xAF\x0A\xAE\xFF\x5A\xA2\xB7\x80\x78\xBE\x5D\xA2\x6F\x90\xD8\xAA\x1A\xAB\x6D\xA8\x31\x5D\xE2\xBB\x87\x72\xB8\x68\xA9\xC8\xA9\x80\xAD\x83\xAF\x01\xAE\x8D\x5C\xDA\xB5\x8C\x74\xBC\xD6\xAF\x58\xA8\x5F\xAE\x58\xAE\x0D\xAF\xF9\x5C\x83\xB4\x8C\x69\xB7\xD2\xA0\xAA\xA8\xFF\xA6\xA8\xAC\xFD\xA7\x1A\x49\xF3\xA6\x8B\x51\xB2\xEE\xA9\xAE\xA7\xB3\xAD\xDF\xAD\xD0\xAE\x77\x5B\xDB\xB2\x81\x6D\xB4\x4B\xAB\xB0\xAA\x72\xA4\x0D\x9F\xD0\xAA\xE7\x57\x99\xB9\xAC\xCC\x88\xF0\xA7\xF7\xA5\xBD\xA5\x76\xA7\xF7\xA6\x66\x5A\xF6\x9F\xAD\x78\xA9\xCF\xA2\xCA\xAB\x3D\xAE\x8F\xAF\x88\xAC\x83\x53\xE1\xB0\x85\x41\xA0\xD3\xA1\xE9\x9C\x06\x64\x8D\xAE\x22\xAF\xB2\x4F\xB4\x97\x9D\x3F\xAA\x69\xAA\xDF\xAF\x93\xAD\x7A\xAF\x50\xAE\x92\x4F\xA3\xB9\xB7\x0B\xB9\xB7\xA4\x9B\xAD\x0F\x99\x84\x90\x2C\xAF\x40\x4F\xDC\x9F\x8F\x3B\xA6\xEF\xA1\xFA\xA0\xBD\xAC\x7F\xAE\xF5\xAE\xFE\x5D\xE2\xBC\xB9\x4D\xB7\x91\xA6\xEB\x9B\x0A\xAE\xA5\xAD\x8E\x9C\xCD\x55\xBA\xB6\xB1\x90\x87\x68\x38\xE6\xAD\xD7\xA5\x2B\xAE\x8A\xA5\x2B\x4A\x96\x96\x9C\x5D\xA8\x67\xA9\xBD\xA9\x9A\xA9\x54\xAE", +"\xCB\xAC\xD2\x5C\xE6\x38\x9B\x6C\xA6\x1D\xA0\x14\xA5\x76\x90\xB5\xA0\xEA\xAE\x33\x5D\xE6\xB9\x9F\x74\xA8\xE7\xAF\x9D\xAA\x9D\xAC\xFB\x9B\xB8\x07\x5F\x50\xD6\xBA\xA8\x78\xB0\xE8\xAD\x72\xA0\x88\xA7\xCB\xA7\x02\xA7\x63\x5B\x99\xAE\x85\x7A\xBA\xB5\xA7\xD8\xA9\x23\x92\x82\xA5\x8D\x90\x8B\x20\x9C\x9E\xB6\x78\xA1\x6E\xA0\xDB\xAA\xD5\xAA\x16\xAF\x22\xAC\x52\xB3\x5D\x5C\x97\x79\xA9\x3F\xAE\xA4\xA6\xC8\xAD\xDE\xA6\x24\xAF\x9E\x5A\xE7\xB4\x8B\x79\xB9\xD2\xAF\xE2\xAE\x44\xAD\x71\xAE\xB0\xAE\xF7\x59\xB9\xB7\xB6\x77\xBD\x57\xAF\xDA\xAA\x48\xAF\x08\xAE\xA8\xAD\x05\x1C\xF1\x46\x8F\x9F\x3D\xF3\xA6\xC1\xA5\x9E\xA4\x06\xA7\xB0\xAD\x1A\x4C\xA1\xBD\x83\x6A\xB8\xD5\xAF\x75\xAF\xD0\xAF\x49\x9E\xF5\xAA\x24\x15\x9A\xBA\xA5\x09\xAA\xF5\xA7\xDF\xA9\xAE\xAE\x1F\xAF\xB9\xAE\xD8\x5D\x95\xBD\xA2\x74\xB1\x8B\x9A\x16\x92\x7C\xAE\x8F\xA0\x48\xAF\x91\x5D\xA9\xBA\x97\x6B\xA4\xD9\xA2\xB3\xAC\xE6\xAB\xD9\xAD\x87\xAD\x1E\x5A\xD9\xA5\xAA\x3B\xAF\xF4\xAB\xEA\xAF\x8A\xAE\xB1\xAE\xD5\xAD\x24\x5C\x96\xBA\xB6\x4F\xA7\xE1\xAC\xAD\x98\xE9\x06\xB7\x9D\x13\xAF\xC3\x5E\xB3\xB8\xB8\x77\xAD\xF5\xAD\x9F\xAF\xD5\xAC\x23\xAD\x1E\xA2\x35\x51\x88\x90\x99\x78\xA1\xF8\xA3\xDE\xAA\xCD\xAE\xD0\xA6\x2E\xAF\xDF\x4F\xEE\xBC\xA3\x3E\xAD\x7E\xA3\xFE\xA3\xF7\xA7\xC3\xA1\xDB\xAD\xEB\xDE\x52\x79\xA7\x7B\xB5\xF7\xA5\xEC\xAB\xC5\xAC\xC2\xAD\x34\xAC\x2D\x5D\x90\x95\xB0\x3D\xB2\x9F\xA7\xE0\xAC\xD6\xAE\xF1\xA6\xBC\xA7\x67\x4F\xFA\x9E\xB9\x7A\xAA\xF2\xA0\xCA\xA9\x54\xAD\x93\xAF\x51\xAD\x46\x22\xC5\xA9\x82\x45\xAF\x0E\x9C\xEC\xAF\xCC\xA4\x59\xAF\xAC\xAE\x66\x5D\xDB\xBA\xA0\x74\xA2\xF7\xAF\xCD\xAE\xA1\xAA\x1D\x8C\x88\xAA\x3F\x56\xD9\x90\xAD\x6F\xA1\x2B\x67\x79\xAB\x07\x9B\xC6\xAF\x6E\xAF\xD5\x5D\xDF\xBD\x97\x77\xA2\xEA\xA5\xD7\xAD\x45\xA8\x5E\xAF\x3B\xAF\x8C\x5D\xE0\x03\x8E\x76\xAB\xE3\x5C\xED\xAC\xD8\xAF\xC0\xAF\x7B\xAF\x94\x5D\xF9\xBD\xB5\x6E\xB6\xD6\x89\xA7\xA9\xB3\xAC\x9D\xA1\x2C\xAB\x4C\x50\xAE\xAF\xA7\x79\xA6\xF9\xAB\xFD\xA3\xF1\xA7\x96\xAF\xC6\xA7\x11\x5F\xB7\x9F\x93\x7C\xBD\xEF\xA5\xF1\xAF\xF9\xA4\x87\xA8\x8E\xA9\x1C\x39\xB0\xA4\xA1\x50\xAB\xED\xAB\xE7\xAB\x65\x35\xCD\xAF\x5A\xAF\xF2\x4F\xC7\xBC\xB4\x3F\xA9\xF2\xA7\x9E\xAB\xD7\xAD\x9A\xAD\x5E\xAF\x5B\x5A\xEC\xB4\x9D\x7D\xAB\x9B\x84\x7C\xA9\x53\xAE\x07\xAF\x2E\xA3\xD3\x5D\x9C\xBE\x97\x7D\xBE\xF8\xA6\xBE\xAC\xE7\xAE\x5D\xAE\x79\x8F\xD8\x5E\xB3\xA8\x97\x6B\x8A\xAA\xAC\x36\x89\xD0\xAB\xBF\x8C\xE6\xAE\x3A\x54\xD7\xAF\x93\x72\x50\xEE\xAB\x44\xA9\x42\x93\xFB\xA7\x06\xA4\xFD\x43\xAD\x9D\xB9\x35\xB3\x72\xAF\xE1\xAB\x82\xAF\x83\xAF\x85\xAE\x11\x5E\x97\x6E\xBB\x6A\xA6\x8D\xAE\xFB\x83\x68\xAA\x16\xA0\x25\xAA\xD5\x56\xAC\x66\x9F\x7E\xBB\x46\xA1\xFA\xAA\xC1\xAF\xE8\xAF\x57\xA7\x8E\x59\xE9\xB2\xA1\x78\xBE\xD7\xAF\xC8\xAB\x32\xAE\x0E\xAF\x39\x89\x83\x52\xE2\x44\xBF\x3E\x92\xE2\xA6\xDE\xA4\x8A\xAE\xEC\xAE\x77\xA7\xAB\x4E\xC5\xBC\xB9\x7D\xB7\xF5\xAB\xF7\xAB\xE5\xAD\xDF\xAF\x96\xAF\x2E\x5E\xAF\xBE\xB0\x78\xAE\xCB\xA9\x57\xA8\xBF\xA5\x0C\xA8\x02\xAF\x5D\x53\x86\xBC\xA5\x18\x93\xFD\xA6\xD1\xA5\xF6\xAC\x87\xAF\x05\xAF\x8A\x5C\x92\xB8\x8C\x72\xB9\xD0\xA0\xBA\xA9\xF5\xAF\x05\xAF\xF4\x99\xD6\x50\xF0\xB2\x98\x43\xB2\xCB\xAA\x0D\xA8\xD7\xA3\xBC\xAE\xC4\xA7\x9C\x4B\xD9\xBC\xA6\x3D\xA8\x7E\xA8\xF6\xA6\x93\xAF\xA7\xAC\xE8\xAF\x4C\x5E\xE1\xBC\x8E\x79\xBD\x48\x8A\xC7\xAE\x5D\x91\x98\xA4\x28\xA7\x3A\x4E\xAE\xB6\xA2\x6C\xAB\xF7\xA5\xBF\xA8\xD9\xAD\x09\xAE\x7C\xA8\x89\x59\x9D\xBF\x8F\x9F\x3C\xFE\xAD\xD4\xA7\x02\xA1\x00\xB0\x00\xAE\x03\x60\x8B\xB9\x98\x6B\xBB\xFD\xA5\xC0\xAE\xFC\xAC\x50\xAD\xD5\xAF\xC1\x5F\xA7\xA3\xB2\x60\xA4\xD3\x61\xE6\xA5\xF8\xA5\xD9\xAF\xD9\xA7\x67\x5F\xB5\x9F\xA9\x7D\xAB\x7E\xAB\xF6\xA8\xCE\xAD\xDB\xAF\xFF\xAE\x5B\x52\xF4\xBC\x91\x79\xA6\xDA\xAC\x4A\xAF\xDD\xAA\x0B\x7C\xCF\xAF\xC8\x5F\xBF\x9E\xBE\x79\xA9\xEA\xAE\xCA\xAB\xA9\xAC\x2C\xAF\xC1\xAE\xB2\x5C\x85\xBB\x8B\x71\xA5\xF5\xA8\x6F\xAE\x6E\xA3\x9C\xA7\x4A\xAA\x1D\x60\xFF\xBF\x9E\x3B\xB9\x3E\xAB\xBB\xAB\xB2\xAE\x83\xAC\xAD\xAF\x10\x5A\x99\xA7\x86\x3A\xBE\xCD\xA7\xE7\xA9\x36\xA8\x0E\xA7\x20\xB0\xDD\x4E\xB3\x7F\x9F\x3B\xA8\xDE\xAC\xBB\xAA\xE7\xAC\xA5\xAE\xE6\xAD\x96\x5E\x8C\x66\xA3\x0E\xAA\xF4\xA8\xB3\xAF\x81\xA4\x13\xA8\x8A\xAB\x34\x5E\x8C\xC0\x8D\x36\xBE\xFE\xA1\xE5\xA7\xF6\xAF\x41\xAF\xDC\xAF\x09\x5D", +"\xA7\xBF\xBA\x5D\xBD\xF9\xA7\xE9\xAF\x1F\x01\xA6\xAF\xF7\xAF\xBB\x4E\xA6\x9A\xA9\x79\xA6\xFB\xAB\xE6\xA8\xE2\xAF\x79\xAE\xB5\xAF\xE1\x4F\x94\xBE\xAA\x71\xA4\xEE\xA6\x8A\x4D\x56\xA9\x18\xB1\x18\xB0\x64\x4F\x9F\xC0\x9A\x79\xB5\x03\xB8\xF6\xAF\x0E\xB0\x09\xB1\x3C\xB0\x6C\x5F\xFB\xC0\xA4\x3F\xA3\xAF\xAF\x72\xAF\xD9\x9D\x14\xB0\xA7\xA6\x65\x4D\xF2\xB7\x95\x81\xBE\xCC\xA3\x73\xA8\x34\xAD\x8A\xAA\x9B\xAB\x37\x4F\xAE\x90\x81\x74\xAD\xAF\xA5\x0E\xA3\x65\x36\x18\xB0\x00\xA7\xCD\x5E\x82\x9C\x85\x71\xBF\xF4\xA6\xBD\xAA\xDA\xAC\xF6\xAC\x6A\xAF\x85\x5A\xF0\x45\x64\x47\xA7\xFE\xA5\xF7\xA0\xFE\xA5\x82\xAF\xEF\xAF\x66\x60\x8C\xBC\xA8\x81\xAE\xF0\xA4\x01\xB0\xC2\xAD\xEF\xAE\x09\xAF\x31\x5F\xFC\xBD\xBB\x41\x7A\xF6\xAC\xF9\x3D\xE1\xA5\xFC\xAD\x6A\xAD\xF3\x5B\x84\xC0\xAB\x74\xA3\xF5\xA6\x6F\xA8\x73\xAD\x32\xA6\xE7\xA9\xCF\x35\xC2\xC0\x92\x81\xA4\x02\xB4\x05\xB6\x08\xB1\x16\xAE\xD9\xAE\xB0\x5E\x91\xB4\xA5\x3C\xBC\x12\x5F\x09\xB1\xF1\xA7\x1C\xB0\x10\xB0\x84\x60\xA2\xC0\x86\x82\xBB\xEF\xA5\x02\xB0\xCC\xAF\x7A\xAE\x39\xAF\x10\x3B\xD1\xB4\xBD\x60\x85\xDD\xA9\x81\x95\x1A\xB1\xFC\xAF\x6B\xB0\x83\x60\x8F\xBE\x85\x82\xAD\xF3\xA8\x07\xB1\xB8\xAD\xD6\xA6\x45\xB0\x16\x5F\xDA\x99\xBE\x47\xAC\xBB\xA1\xDE\xAA\x19\xB0\x24\xB1\x29\xB0\x92\x60\xCE\xC1\xB1\x76\xA8\x02\xBC\xBA\xAA\x6C\xA8\xDD\xAA\x3B\xA2\xDB\x5F\x80\xC1\x9A\x3F\xAD\x76\xAE\xF0\xAD\xBC\xAE\x1D\xB0\x76\xB0\x87\x60\xEE\xC1\xA2\x3F\xB0\x07\xBE\xF6\xAA\xE2\x96\x2E\xB0\x8E\xA8\xC4\x5B\xA7\x84\x81\x84\xAD\x05\xB0\xFA\xAF\xAE\xA6\xE8\xAE\x0D\xA7\xA4\x5F\xB3\xC1\xA0\x78\xA4\xFF\xAE\xC8\xA8\xF0\xAF\x9A\xAD\x5C\xB0\x18\x5D\x81\xA1\x90\x81\xB9\x7E\xA2\xAD\xA5\xF3\xA4\x79\xAF\xDE\xAE\x6C\x5E\xBF\xBB\xA0\x3F\xAA\x08\xBA\x07\xB3\xB8\xAF\x22\xB0\xAB\x97\x4F\x5F\xA8\xBB\x95\x48\xAC\x06\x52\x30\xA8\x69\xAD\xD1\xAF\xEE\x84\xBE\x60\xE3\xB7\x92\x74\xB3\xD7\xA4\xD1\xAB\xF9\xAB\xFD\xAD\x3A\x8C\x58\x4D\xD9\x71\xB7\x5E\xB1\xFA\xA4\x29\x8B\xEA\xAD\xE8\x9C\x0F\xB0\x04\x61\xF4\xC0\xAA\x83\xBA\x06\xB8\x10\xB4\x1B\xB0\x22\xB0\x13\xB0\x0C\x61\xA8\xC0\x90\x3F\xA3\xFC\xA0\xB4\x93\x7F\xAC\x3D\xA8\xD7\xAB\xD8\x93\x66\xC1\xB2\x2E\xB2\xFF\xA7\xFC\xA1\x04\xB1\xF2\xA7\x11\xB0\x4E\x61\xAC\xC2\x89\x82\xAE\x09\xB1\x0F\xB3\x82\xA9\xFE\xAD\x1E\xAC\x14\x59\x8C\xB8\x8F\x1C\xBE\x04\xB2\x10\xB5\x24\xB0\xCB\xA7\x3F\xAF\xBF\x4E\x81\xBD\x81\x3B\xA3\xF4\xAA\xCF\xA4\x18\xB3\xC6\xAA\x1E\xB0\xDC\x5B\xD4\xC2\x83\x5F\xB7\xED\xA8\x0A\xAC\xCE\xA9\x31\x95\x38\xB0\x36\x4D\xDC\xC2\xA8\x7C\xB4\xFF\xAA\xF2\xAE\xFE\xAE\xAE\xAE\xFC\xAF\xBC\x5E\xD2\xBF\xBE\x7A\xA0\x09\xB2\x0E\xB0\x6F\x8B\x71\xAF\x58\xA1\x24\x50\xA9\xB5\x83\x5A\xAB\xD5\xA1\x12\x06\xB9\xAD\x97\x04\x68\x3A\x08\x50\xB8\x85\x71\xEF\x73\x80\xA1\x16\x42\x19\x58\x66\xB1\x82\x78\xB4\xDC\x70\x36\x96\x86\xA9\x00\x0F\x19\xB1\x33\xB0\x8A\x46\x42\x88\x5E\x50\x34\xD4\x5A\x7E\xBC\x18\x05\x1A\xB6\x34\xB0\x8A\x47\x0C\x4D\x1F\x16\xAD\x34\x51\x36\x32\xC9\x8D\xAA\xAC\x61\x01\x6B\xB1\x11\x95\x66\x69\x4F\x33\x6F\xEF\x41\x2A\x3F\xA8\x4C\x7F\x79\xE8\x85\xDA\x92\x15\x51\xAC\x53\x89\x5A\x49\xE2\x7F\x18\xA7\xF1\x6F\xC0\x52\xC0\x73\xB7\x61\xAE\xC3\xAB\x47\x81\x5D\x86\xBE\x48\x6E\x39\xCA\x4D\xAD\x73\x57\xE7\x08\x76\x4D\x87\xBB\x81\xA4\xEC\x31\x39\xB2\x72\xB1\x01\xA9\xB9\x63\x40\x34\x7E\x40\xAB\x0D\xBD\x20\x06\x3A\xB3\x75\xB1\x60\x79\xC1\x7B\x20\x28\x8C\x40\xA6\x20\x78\x42\x8D\x08\x30\x50\x95\xCE\xB0\x72\x02\x5E\xC3\xA6\x86\xA6\x4B\x3F\x1D\x48\x09\x00\x67\xB0\xD9\x3D\x55\x03\xEA\xC3\x9F\x87\xAA\xC9\x5A\x1D\xB1\x29\x7A\x16\x7E\x5D\xA1\x7E\xFE\x39\x14\x01\x95\x26\x68\x5A\xA5\x48\xD5\x5D\xDD\x38\x2A\x4D\xB8\x0E\x56\x34\x76\x13\xB5\xA3\x16\x96\x31\x4B\x4D\x07\x44\x3F\x78\xB6\x08\x64\x34\x5F\xF1\x7E\xB0\x7A\xF3\x02\x3B\x8A\x0A\xA8\x45\xAB\x6A\x3E\x91\x37\x68\x14\xA4\x22\xAE\xDB\xA7\xE8\xAE\xD5\xAE\x6F\xAF\x40\x5D\xE0\xBD\x8C\x7D\xB9\xEE\xA0\x7F\xAD\xBD\xAC\x0F\xAF\x6F\xAB\xF0\x5D\xC2\x11\x80\x2E\xB0\xFD\xA0\xDE\xAB\x03\xA6\x84\xB0\x18\x8A\x22\x44\xA9\x9D\x95\x7D\xA2\xF8\xA8\x21\xB1\xBF\xAC\x58\xB0\x2F\xAF\x6F\x5E\xDE\xC1\xB1\x79\xAD\x55\x9D\xE3\xAC\x94\xAC\x25\xAE\x67\xAD\xD3\x56\xF8\xAF\x86\x7F\xA6\x11\xBC\x78\x4F\xAF\x74\x60\xB1\x0B\xA7\xCA\x5F\x97\xC2\xB3\x3F\xB9\x08\xBC\x9A\xAA\xF7\xAC\x47\xB0\x11\xAF\x16\x60\xA4\xBC\xAF\x40", +"\xBE\xE2\xAD\x45\xAA\x2C\xAD\x34\xA9\x47\x91\xD8\xF6\x0E\xC4\xB1\xAF\x6D\x28\xAE\xEF\xA4\xE1\xAF\x86\xAF\x32\xB0\x18\x61\xB8\xBF\x85\x89\xA9\x03\xB5\x0B\xB0\xF5\xAF\x2D\xB1\x03\xAE\xB2\x59\xEF\xB2\x8C\x4C\xAF\xE3\xAE\xAE\xAD\x4B\x96\xFF\x7D\x58\x7D\x52\x62\xB9\x8B\x92\x0C\x05\x05\xAE\xB9\x91\x4D\xB2\x89\xA2\xF9\x75\x8F\x60\x8E\xC0\x91\x82\xA0\x06\xB3\x09\xB2\xB4\xAC\xDE\xAC\xC6\xAD\x5D\x59\xF7\xB5\x9C\x60\xA5\xD0\x5E\x26\xB2\xB8\x92\xDE\x74\x7B\xB0\x72\x62\xF8\xC1\xB4\x89\xBA\x07\xBE\xEA\xA8\x1A\xB3\xC1\xAE\x2E\xAE\x09\x60\xB1\xBF\xBC\x88\xB9\xBD\x4E\x23\xB3\xF3\xA7\x0D\xA5\xA4\xB0\xD8\x60\xCB\xC2\x9F\x85\xBB\x06\xB0\x23\xB5\x1B\xB2\xCB\xAE\xFD\xAF\xE0\x4D\xC1\xB2\x95\x5A\xA4\x94\xAB\x01\xB2\x62\x82\x90\xAF\x0F\xA5\x20\x9A\x13\xC4\xB3\x26\xB1\x24\xAA\xEA\xA2\x06\xB1\x28\xB0\x22\xAE\xE4\x4C\xC6\xB8\xA6\x33\xB4\x0B\xB3\xEC\xA6\x2E\xB1\x37\xAC\x73\x91\xAE\x51\xC6\xB9\x88\x6D\xA7\x9C\xA8\x3D\x4D\x4F\xB0\x72\xA2\x35\x6D\xCF\x4A\xAD\x87\x8F\x27\xA1\x04\xB0\x29\xB1\x1D\xB2\x41\xB1\x75\xB0\x2A\x61\x92\xBE\x8F\x85\xB2\x11\xB7\x02\xB0\x1C\xB1\xEF\xA5\x5B\xAE\x4B\x50\xA9\x6F\x7A\x72\xBE\x72\x91\x2A\xB0\x45\xB0\x0D\xA3\xA8\xA5\x16\x62\xAC\xC4\x89\x7D\xB9\x10\xBB\xF4\xA8\x8D\xAF\x3B\xB0\xB2\xB0\x0D\x61\xBC\xB5\xA3\x66\xB7\xD9\xA1\x71\xA9\x67\xAF\xC1\xAB\xC3\x62\xB6\x62\x95\x8C\xBF\x89\xB1\x13\xBE\xD8\xA7\x01\xB1\x87\xAF\x08\xB0\xE2\x5F\x93\xC0\x87\x89\xBC\xFD\xAE\x11\xB4\x43\xAF\x6F\xA9\x2D\xB0\x84\x2B\x9E\xEE\x53\x64\xA2\xC3\xAF\x9F\x8A\x69\xAE\xD1\xAF\x66\xB1\xFB\x11\x8C\x88\x9B\x3C\xBB\xF4\xAA\x84\xA3\x4E\xB1\xC8\xAC\x6B\xAD\x12\x60\xEC\xBD\x8A\x74\xAB\x03\xBF\xF8\xAD\x79\x38\x76\xAC\x96\x99\xE1\x62\xD6\xB2\xAD\x6C\x7F\x11\xB1\xFB\xA0\x1D\xB3\xFC\xAE\xAF\xB0\xF5\x5F\xDD\xBC\xB7\x7F\xBF\xF2\xA7\x29\xB7\x1B\xB3\xFE\xAF\x3E\xB0\xE2\x59\xDD\x6F\x89\x8C\xB5\x32\xAA\x2F\xB4\x54\xB3\x8A\xB1\x86\xAF\x4A\x61\xBF\xC5\x8C\x85\xA1\x16\xBD\x0E\xB1\x07\xB2\x70\xAF\x1D\xB0\x7C\x60\x8E\xB6\x4D\x82\xB2\x60\xA8\x2F\xB2\x72\x8C\x95\xB0\x14\xA7\xD1\x62\xA0\xC6\x91\x8A\xA2\x19\xB3\x29\xB5\x29\xB1\xA5\xB1\x61\xB1\x15\x63\xB3\xC4\xB0\x7C\xAD\x90\xAD\x18\xB1\x7E\xAB\x26\xB0\x1B\xA5\xC9\x60\xB5\x37\x4E\x8B\xB4\x10\xB5\x25\xB1\x66\xB3\x95\xB0\x73\xB1\xE0\x5F\x9E\xBC\x9A\x84\xA6\xFD\xAD\x25\xB4\x60\xB3\x4F\x7D\xA4\x90\x32\x0C\xF9\x52\x5B\x8C\xBA\x2C\x9D\x31\xB3\x4E\xA6\xD1\xB1\x14\xAF\xEF\x59\xD8\xBE\x87\x81\xA6\x00\xBA\xEF\xAE\x1B\xAD\xCF\xB0\x49\x75\xBC\x60\x91\x44\x93\x8D\xBD\x01\x8F\x32\xB2\x45\xB0\xBF\xB1\x93\xA5\xCC\x60\xF9\xC1\xA2\x70\xB8\xF7\xAC\x35\xB3\xEB\xAF\x4A\xA9\x72\xAF\x5C\xA2\x63\xC6\x96\x2D\x85\x1B\xB9\xF2\xA3\x57\xB3\x40\xB0\x93\xB0\x05\x61\xA8\xC2\x87\x84\xA4\x19\xB9\x10\xB6\x64\xB3\xB5\xB0\x94\xB1\x2F\x61\x98\x09\x96\x4F\xAA\xE7\x62\x37\xB6\xC0\xA3\x6C\x83\x9C\xB0\x56\x5B\xBB\xC2\x94\x6C\xB4\xD7\xA2\x87\xAE\xC0\xAA\xF0\xAD\x7E\xAF\xF3\x6D\x3C\xBA\xAC\xC0\x85\x1C\xB1\x62\xA0\x4E\xB0\x49\xB1\x95\xA7\xF4\x4C\xA2\xC1\xA9\x8A\xA4\x05\xB7\xC4\xAE\x14\xB1\x12\xAE\x1D\xB0\xB4\x5C\xC6\xC1\xA5\x2A\xBB\xB0\xA6\xEB\x74\x72\xB3\x4E\x80\x18\x76\x48\x61\xF8\xC6\xA1\x8C\xBA\x1B\xB0\x2C\xB7\x06\xB0\x70\xAE\xBF\xB1\x0B\x61\xD8\xC5\x92\x85\xB2\x07\xB8\xF4\x06\x37\x4F\x54\x2A\x1C\x33\xF7\x6F\x0B\x19\xAA\x44\xBD\x11\xB2\x2A\xB7\x3F\x02\x6E\xB1\xA4\x78\xA6\x63\xB0\x8A\x92\x0C\x01\x2A\x3C\xF0\x5F\xB9\x90\xB1\x7D\xD6\x94\x51\x01\x17\x68\x1B\x9E\x6B\x2F\x98\x9E\x4E\xBB\x90\x92\x94\xEA\x8B\xF3\x99\x60\x6B\x23\x74\x7D\x36\x79\x9F\x4A\xCA\x6B\x80\x89\x08\x53\x83\xD9\x47\xC4\x48\x68\x4B\x8F\x88\x1A\xB4\x7C\x4D\xF0\xB0\xF6\x69\x18\x9A\x36\x9B\x22\x47\xA7\x11\xB9\x2F\xB3\x3B\x68\x89\x4D\x93\x00\x26\x9A\x03\x24\xB2\x86\xBA\x8C\x2E\x3D\xB6\x05\x82\xFC\x30\xB3\x34\x37\x9A\x02\x02\x1C\x72\x6C\xFF\x79\x1D\xB7\x24\x01\x90\x4D\xB9\x68\xDF\x63\xD9\xB0\x6F\x10\x09\xD2\x43\x20\xB3\x78\xB0\xCF\x06\xFE\xB0\xD1\x99\x79\xC7\x80\x6D\x68\x10\xB9\xBA\x02\x40\xB0\x21\x7E\x6F\x92\x58\x9A\x27\x02\x3D\x87\xBF\x0F\x82\x40\xB6\x87\x68\x01\xB3\x31\x4D\x2D\x36\x66\x34\x4A\xB8\x2B\x9F\xA6\x33\xA2\x68\xB1\xF9\xB1\x67\xB1\x15\x62\xF4\xBD\x88\x7D\xB1\xF4\xA1\xCF\xAB\xD2\xAC\x5D\xAE\x0E\xB1\x31\x56\xA1\xC2\x82\x0F\x7D\x0D\xB0\x3C\xB6\x7D\xB2\x02\x33\x4B\x4D\x37\xDF\x00\xA4\xBC\x8E\xA3\x1A\xB4\x22", +"\x06\x59\x80\x71\xB1\xD1\xA0\x8F\xDF\x7E\xAE\x91\x89\xA6\x21\xB9\x22\xB5\x6E\xB1\xA9\xB0\x5E\xB1\xAA\x63\xB3\xC6\xAC\x8E\xA3\x19\xBE\x3A\xB3\x25\xB0\xEC\xB1\x96\xB0\x80\x63\xE5\xC2\x86\x54\xAF\xDE\xA3\xD3\xA2\x24\x9D\x03\xB2\xED\x6B\x8E\x62\x92\x9D\xAF\x85\xB4\x01\xB0\xE8\xAF\x95\xAE\xA0\xAE\x5B\xAD\x84\x5E\xA8\xC1\xA6\x6D\xA6\xD4\xA7\x42\xAD\x4B\xAF\x9E\x9B\xCB\xA7\x89\x50\x94\xD5\x47\x91\xAB\x18\xB9\x44\xB7\x21\xA7\xC9\xAE\x5B\xAF\x29\x5F\xB8\xBD\x86\x86\xAC\xF9\xA4\x31\xB1\xFA\xAC\xA6\xB1\xE9\xAF\x5C\x5A\x89\xBB\x8B\x59\xAC\xDF\xA5\x69\x9C\xF0\xA7\x31\x36\x1A\xB2\x18\x64\xC5\xC6\x9A\x90\xB7\x10\xB3\x2D\xB6\x45\xB0\xA5\xB1\x89\xB1\x31\x62\xB9\xC6\x85\x8B\xB7\x18\xB3\x15\xB7\x2C\xB2\x25\xA8\xAB\xB0\x48\x5B\xAE\xAF\xB7\xE0\x5B\x22\xBA\xCD\x74\x61\xB2\x2B\xB1\x20\xB1\xB6\x5F\xD9\xC4\xA7\x81\xBB\x12\xB4\x0B\xB3\x5D\xB1\x05\xB1\x2F\xB1\xE7\x5F\xFE\xA7\xBE\x91\xAD\x02\xBE\x31\xAD\xA6\xA8\xDD\x9C\x2D\xB2\x70\x64\xC4\xC6\xB0\x8C\xB3\x23\xB2\x2D\xB4\x83\xB2\x47\xAF\x9A\xAE\x3B\x5F\xD8\xC0\xA3\x7B\xB6\x91\xAE\x74\xA1\x6E\x9D\x8E\xA9\xBD\x6C\x48\x4B\x9D\xB8\xBE\x85\xB8\x42\x8F\xAD\x4C\x47\x87\xB8\xB1\xCB\xB1\xE5\x38\xA7\xC5\xB0\x85\xAE\x79\xA2\x17\xB0\xE6\xA4\xAB\xB0\x99\xA7\x52\x64\xDA\xB7\xA2\x8E\xAC\x41\xA9\x09\xB4\x19\xA6\x2B\xA8\x99\xA9\xB0\x50\xB3\x85\x85\x49\xB4\x6D\xA6\x19\xB3\x03\x02\x7C\xB1\xF9\xB0\x6F\xDD\x40\xE2\x57\x00\x8E\xE1\xA6\xCB\x2F\x98\xB0\x32\xB3\x07\x68\x47\xF1\x1D\xF8\x4C\x93\xB5\x39\x7E\x4C\xB7\x99\xB0\x37\x84\x75\x53\x14\x2A\xB5\xC3\x85\x51\x15\x26\xBE\x99\x92\x85\x87\xCB\x84\x89\x78\x3A\x0F\x23\x00\x1C\x93\xB6\x26\xBA\xC4\x3C\x82\x85\x36\xB3\x4E\x08\x3A\x0F\x28\x8B\xA4\x22\x86\xB6\x85\xBB\x39\x29\x7A\x3A\xB2\x2D\x84\x15\x12\xB9\xA2\x50\x5B\x96\x59\x8F\xFD\x6A\xC9\xA9\x55\x80\xFB\x88\xD3\x64\xC7\x28\x23\x93\xB1\xFA\x76\xEE\x89\x03\xA8\x77\xB0\x81\x00\x29\x00\x7B\xC9\xB1\x44\x99\x0D\xBE\x73\x2F\x2B\x80\x3A\xB3\x93\x00\x2B\x00\x02\xCA\x9F\x87\xB7\xE6\x35\x29\x7E\xA8\x3E\x65\xB1\xB7\x07\xE4\x64\x9F\x2C\x94\x33\x99\x15\x8F\x4F\xB2\xF5\x06\x42\xB2\xDC\x82\xD8\x1B\xE7\xFE\x4F\x77\x92\x96\x30\x66\xA6\xFC\xA3\x63\x51\xA0\x88\xF5\xAB\x29\x7A\x70\xFD\x73\x9B\x71\xAB\x7C\xA3\xB3\x9D\xA2\x5E\xA4\x6D\xE5\x19\xEB\x44\x0A\x66\x29\xB4\x6A\xA1\x0C\xA4\xE5\x1C\xA8\x88\x92\x11\xB3\xEB\x46\x09\x74\x8A\x85\x4D\x54\xA5\xB3\xAE\xA2\xA0\xA3\x65\x38\x5A\x22\x85\xFE\x64\xFE\x7E\xA3\x79\x31\x8B\x57\x89\x71\xA8\xAD\x52\x82\x1F\x07\x98\x6E\x29\xB9\x6A\x1C\x2C\x8B\x7F\x99\xAC\x55\xA5\x11\xB3\xCA\xB5\xD6\x60\x8B\x85\x10\xAB\xC6\x73\x4D\xB2\xA2\xB2\x69\x3B\x6F\x22\x80\xCA\x3B\x8B\x81\x44\x78\x37\xA8\x67\x88\x2A\x61\x35\x65\xC3\xCA\xA8\x94\xA9\x2D\x7A\x17\x89\xB9\x78\x5F\x89\xC3\x88\x7E\x11\xBF\xF4\x40\x46\x87\x97\xA6\x53\xB5\xD9\xA0\x0D\xA5\x6B\x51\x74\xFA\x06\x6B\x95\xD7\x71\x29\xB7\x5D\x7A\xA9\xB1\x76\x7B\xC5\x88\x75\x78\x5A\xCA\xA7\x95\xB7\x2C\x7E\x53\x7B\x22\x4A\x77\x7B\xA4\xB2\x38\xF3\x3F\x1B\x70\x95\xB5\xBE\x32\x57\xB7\x03\xA4\xC4\x15\xCC\x88\xB6\xBD\x3C\xCA\x8B\xEA\x6E\xE3\x57\xFC\x7B\xA5\xB1\x5F\xB2\x8F\xB2\x09\xE6\x4A\xEA\x7E\xA2\x3B\x9E\x78\x1C\x8C\xA3\x79\x5A\x88\xE3\x7F\x97\xFA\x43\xA2\xAE\x3F\x07\x2C\xB7\x84\xA5\x0D\x1C\x6B\x89\x3B\x7D\xC6\xFF\x2F\x23\x93\xD0\x71\x96\x34\x59\xB1\x9A\x92\x8A\x72\xB2\x7A\x82\x45\xC1\xC3\xBC\x95\xAC\x44\xAF\x51\xB7\xC6\x70\x23\x8A\xB9\x7F\x49\xE6\x1D\xCA\x95\x96\xAD\x9A\x14\x3F\xB3\xF0\xA6\xFB\x7F\xF2\xA8\x3F\xE6\x66\xCA\xBE\x95\xAD\xC3\x17\x1C\x8F\x89\x7B\x94\x5C\xE5\x88\xDC\x74\x1A\x06\x7A\x3C\x11\x01\x07\x51\xB4\x81\x7F\xB4\x58\xED\x78\x78\x08\xEA\xE3\x53\x2F\x8D\x38\x2D\xB9\x85\xC7\x73\x8E\x00\x40\x86\x2F\x2A\x96\xC3\xB3\x00\x1D\x2D\xB3\x50\xB1\xA8\x31\xED\x85\x5D\x37\xF9\x64\xB5\x00\x0C\x97\xBD\xB3\x8C\xFC\x8B\xCE\x0E\xF2\x96\x63\x2E\x48\xFF\x00\x7C\x5A\x93\xA6\x08\x07\x03\x03\xBA\xB0\x12\x74\xB7\x85\x4F\x0C\xCE\xA0\x98\x31\x8F\xD7\x77\x11\x86\x77\x3B\x90\x78\xE1\xB2\xAF\x0C\xFE\x16\xB6\xEB\x7A\x62\x80\x5B\x53\x8C\x84\x70\x8E\xA2\x07\x9F\x0C\xD6\x1A\x69\x32\x97\x31\x5F\xB6\x79\x38\x78\x7A\xB2\x3E\x86\x28\x0D\x31\x19\xA4\x01\x09\x0D\x34\x1D\xB5\x5D\x3A\x77\xB3\x88\xB2\x99\x90\x41\xF7\x20\x52\x83\x0F\xB9\xFD\x76\x94\x8A\xA6\x37\x7C\xB2\x92\x45\x99\x11\xAC\x93\xA6\x2C\x54\xBE\x49\xC1\xB2\xE4", +"\x8C\xA1\x85\x5F\x0B\xFD\x67\x7A\x5B\x82\x5B\x89\x70\x8D\x6F\x8D\xE4\x14\xDD\xB2\x10\x6D\x7F\xCB\x94\x00\x9E\x26\xB7\x6C\x8C\x7C\x4D\x60\xA3\x35\x8A\x2D\x17\xF3\xC9\x96\x77\x93\x5A\x8C\x08\xAC\x4B\xA1\x77\x8E\x08\xA8\x41\xF9\x1A\xCC\xA6\x6D\x86\x4B\x35\xCB\x81\x05\xA0\x95\x52\x60\x86\xE7\x64\xC8\x1E\x3A\x3C\x11\x2B\xAB\x4E\xB4\xC3\xB1\x3B\xB3\x3D\xA8\x81\x05\x5C\xC0\x4D\x93\x29\x38\x5B\x02\x96\xB5\xB1\xDC\x07\x7A\xB2\x31\x0D\x77\x8B\x91\x93\x25\x72\x19\x4F\xB3\x08\x02\x8A\xB2\xC7\x8E\x63\xA6\x4A\x19\x85\x31\x92\x31\xB6\x11\x47\xC8\xB1\x9F\x8A\x33\xB1\x1C\x1D\x60\xE9\x2F\x49\xBE\x31\x06\x31\x21\x14\x71\x9C\x95\x55\x5D\x6D\x2A\xD8\x02\x2F\xA9\x8C\x8C\x73\x7A\x1B\x28\x15\x61\x78\x62\x16\x73\x2A\xE5\x9C\x01\x35\x16\x80\x3D\x65\xB2\xE4\x1A\x0A\xA0\x83\x00\x79\x2A\xB0\x37\xBA\x3C\x07\x02\x0E\x64\xB3\xC5\xB1\x50\x33\x89\x86\xAC\x6C\x16\xC3\x89\x01\x0D\x33\xBF\x4C\xB6\x2C\x37\x07\x86\x97\x60\x3A\x0F\x76\x18\x80\xF1\x7F\xD6\x73\x10\x01\x5C\x7D\xAC\xA9\x62\x86\xEB\xFA\x55\xE3\x68\x32\x83\x2F\xB8\xB7\x86\xDE\x0C\x2B\x86\x6E\xAB\x7B\x0C\xDE\x18\xBD\x31\x93\x55\x10\xB8\x81\x5F\x7D\x52\x78\x3D\xB3\x14\x25\xBE\x32\x9C\x32\x8D\x63\x86\xD9\x3E\x42\x8C\x70\xB3\x65\xA8\xD3\xF1\x01\xCD\x9F\xCA\x73\x34\xB8\x5D\x57\xBE\xB2\xA2\xB2\xF5\xB2\x7E\x0C\x9E\x17\xAF\xC7\x7E\xD8\x74\xBE\x48\xD2\xB1\x83\x92\x08\x86\x3F\x19\xAE\xE4\x61\x05\x5A\x1D\xB7\x13\xAF\x9D\x86\x46\x87\x78\x86\x9C\x66\xE9\x19\x8E\x97\xBF\x90\x7F\x0D\xAE\xD5\xB2\xA6\xB3\x35\x86\xB1\x66\xC0\x32\x83\x9C\x51\x2F\xB5\x04\x8E\xD4\xB1\x7B\x53\x63\x86\xC3\x5C\x73\xCB\x80\xC9\x75\x2F\xBC\x5E\xB2\xC7\x52\xA7\xB3\xBB\x1D\x74\xFB\x7C\x82\x33\x32\x99\x1D\x3D\x62\xB3\x77\xB2\x06\x86\x73\x86\x44\x46\xD2\x4C\x7C\x3C\x0F\x31\xB5\x6A\xB7\x94\x86\xE4\x7D\x64\x86\xF0\x0B\xD5\xCD\xBC\x32\x88\x67\x80\xCA\x3B\x9A\x84\xE9\x7D\xF1\xB1\x0E\x0C\xFB\x19\x91\x9B\xA7\xE7\x3C\x50\xB5\x77\x7F\xA3\xB2\x6B\xB3\x1D\x0C\xD7\x4D\x70\x92\x1A\x36\xBB\xCD\x85\x60\x7D\x8B\x79\xEB\x7D\xF5\x0C\xE7\xCD\x9B\x9B\xBD\x67\x8A\x6B\xB0\x3D\xB0\x47\x70\x00\xB3\x61\x81\x20\xA2\xB5\x9A\xB1\x1A\x0E\xD0\x86\xBF\x50\xA5\xB3\xA9\xAE\x90\x10\x70\xCC\xAD\x9A\xBC\x37\xB9\xC3\x84\xA3\x86\xAA\xB3\xEB\x5E\x3A\x0F\x60\x00\xB6\x0B\x8B\x30\xB2\xEB\x5C\x7C\x4E\xC2\xB3\x67\xA0\x08\xF2\x6D\x16\x97\xAB\x21\x2F\xB2\x3A\xAC\x20\x48\x9F\x78\xB6\xA2\x02\x0C\xB6\xCD\xAD\xEE\x62\x34\xB1\x6C\xB4\xD0\xB0\x0D\x7A\x43\xB3\xF6\x65\xD3\x9A\x59\xEC\x64\x2E\xBE\x5A\x55\xD8\xB2\x87\x02\xF7\xB2\x3D\x0C\x8F\xCE\x9D\x82\xBC\x2E\xA9\x71\xB1\xDC\xB3\xAB\xB2\x49\xB3\x5A\xFB\x6E\x18\x96\x9A\xAD\x86\x47\x71\xB1\xE2\xB0\xDD\x85\x79\xB3\xA9\x66\xFA\x18\xA3\x9C\xAD\xCE\x25\x5C\xB6\x24\x7B\xE7\x84\x52\xB3\x73\xD1\x2A\xCE\xBB\x03\xAC\x39\xB4\xC5\x80\xE7\xB1\xAE\xB3\x06\x19\xE6\x1E\xF5\x1E\x41\xEF\x71\x04\xA4\x74\xB3\x25\x71\xC1\xB2\x7F\xB3\x89\x0C\xCA\xF8\x2C\x9A\xAF\xE4\x52\x74\xB3\x25\xA1\x00\x87\xA2\xB3\xED\x66\xCA\xF6\x73\x2E\x95\x64\x8D\xC4\x39\xE8\xB1\xCD\xB2\x55\x79\x91\x0C\xD9\xCE\x93\x32\x91\x3A\xB9\x09\x4C\xD7\xB3\xF7\xA9\x83\x36\x55\x67\xD6\x82\x8D\x9D\xBA\x66\x80\xB9\x7E\xDD\xB0\x4C\x70\x61\xB3\x50\x1F\x41\xE4\x5E\x4B\x27\x2F\xB2\x72\xB3\xB8\xB1\x73\x2C\xFD\xB2\xCB\x66\x90\x21\x0D\x9B\xAB\x8F\xAA\xB9\x7B\xE5\xB0\xC6\xB2\xAC\xB3\x6D\x67\xDA\xCE\x9D\x33\x93\x36\xB6\xB8\x7E\xEB\xB3\x0F\x87\xEF\x85\xE8\x66\xE8\xE4\x44\x3D\x0A\x93\x7F\x1F\x81\xED\xB2\x59\xA0\x06\x86\x2D\x67\xCF\xCD\xA2\x9B\xBC\x60\x85\x64\xA6\xDB\xB3\x9C\x0B\xE8\x4C\x8E\x67\xFA\x82\xBA\x2E\x97\x61\x8E\x6B\xB1\xD0\x50\xB0\xB2\x31\x53\x02\x67\xD4\xCE\x9F\x9D\xAB\x2F\xA7\xC3\x81\xA3\x87\xAD\xB2\xD4\x68\x06\x67\xE5\xCD\x9F\x33\x98\x3C\xB3\x7A\xB1\x5D\x7D\xE2\xB2\x16\x74\xC9\xFB\x6B\x19\x86\x9E\xA5\xB9\x80\x76\xB5\x74\x86\xD1\xB3\x98\xB3\x1A\x83\x77\xCC\x98\x47\xAF\xDE\x76\x04\xA4\xF4\xB1\xE4\xB3\xCE\xB3\xAA\xE0\x28\xCD\x87\x9D\xAC\x10\xB7\x12\x01\x0A\x00\x9D\xB2\x37\xB3\x3C\x0F\x1F\x1A\x9A\xB2\x3B\xB5\x88\xC5\x50\x9F\x3F\x43\x33\x7A\x58\x3B\x0D\xBF\x1A\xAA\x17\xAF\x5C\x2D\x6B\x51\x21\x00\x41\x3F\xF6\x55\x7B\x14\xA4\x2D\x78\x34\x92\xE8\x3F\x7C\xB0\xD7\x53\xA2\x5C\x9E\x86\xDB\x45\xDD\x4D\x54\x8B\x26\xA0\x79\x3B\x32\xE7\x07\x2D\x78\x7E\xB2\x36\x66\x8C\xCC\x89\xC5\x67\x3F\xB8\xCB\x82\x1A\x83\x48\x2E\x9B\x8C\x4E", +"\x0C\xAE\xE3\x6B\x46\xAB\x59\x3C\x7E\xB7\x9A\x86\xFB\xB2\x34\x86\x99\x66\x9B\xCE\x9B\x9A\xA3\x34\xB4\xDC\x89\x2F\x01\x16\x87\xB9\xB3\x5B\x0C\xC7\xCD\xBE\x04\x3F\x62\x8C\x68\xB2\x8C\x85\xE0\x85\xB9\x68\xF5\x67\xCF\x26\x90\x32\x96\x3D\xB2\x76\xB7\x77\x84\xE3\x84\x05\xA5\x97\x66\x9E\x03\x9F\x9B\x4A\x68\x88\xCF\x86\xF5\xB3\xED\xB3\x8E\xB3\x75\x67\xE9\xCB\x9C\x2E\x8D\x8F\x72\x6A\xB5\x63\x7F\x49\x01\xD0\x85\x8F\xBC\x09\xD0\xAB\x46\x6F\x34\x76\x81\xB5\x01\xB4\xB7\xB2\xA4\xB3\xAB\x60\x84\x2A\x85\x9B\x56\x3F\xBB\x80\xB0\x88\x85\xBF\xB2\x5D\x86\x9D\x0C\xD2\xCE\x85\x94\xBF\x0F\x82\x82\xB6\xD1\x70\x21\x87\x12\xB4\x81\x67\xE3\xCE\xB2\x9A\xBC\x79\x0F\x5C\xB0\x01\xB5\x92\x53\xFB\xB3\x0C\x0D\xBA\x32\xBA\x9F\xB8\x35\xB8\x7B\xB5\xEC\xB0\xC5\xB2\x19\x88\x77\x6A\x35\xD0\xB1\xC8\x8E\x67\x8E\x72\xB7\xF4\xB2\xF0\xB2\xFE\xB3\xF8\xE0\x36\x4C\x43\x9B\xAF\x5E\x81\x72\xB5\x4B\x6F\xCE\xB2\x86\x37\x78\x67\xD7\x17\x82\x99\x59\x5E\x81\x9D\x4A\x09\xB4\x54\xA2\xFC\xB3\xCE\x0C\x93\xCF\x9C\x33\x8A\x3C\xBD\x09\x0C\xDA\xB2\x0F\xB5\x81\x86\x41\x68\xF9\xCF\x94\xEF\x7C\x38\xB3\x78\xB3\xF1\xB2\x92\xB2\x1A\xB4\x3F\x68\xAD\xD0\x88\x9E\xB7\x40\xB2\x66\x56\x4E\x7B\xE5\xB3\x33\xB4\xED\x0C\xCD\x19\x80\x9A\xA3\x42\xBF\x79\xB6\x91\x3D\xE8\xB3\x77\x8B\x5E\x68\xBD\x8B\xBA\xA1\xB5\x1B\x0F\x82\xB1\x9B\x87\xFE\x84\x6F\x86\xFE\x2F\x5D\xD0\xB1\xA1\xA3\x69\x81\x76\xB1\x07\xB5\x2F\x87\x51\x53\xD6\x67\xDF\x1D\x41\xA2\xA6\x81\xAE\xB9\x1C\xF9\xB3\xC9\x22\x70\x31\xB3\xA6\x5D\xCF\x9E\x81\x71\x3E\xB5\x10\x58\xDA\x53\xB3\x53\xEA\xB3\xBB\x47\x12\xD1\x8B\xA2\xA6\x07\x8E\x59\x51\xFB\xB2\x7D\x63\xED\xB3\xCE\xA6\x1A\xD1\xBA\xF3\x3C\x44\xB3\x7E\xB0\x86\xB2\xB5\x52\x75\x86\xEB\x66\xF8\xD0\xB7\x33\x80\x42\xB9\xCD\x82\x9F\x87\xCB\xB3\x71\xB3\xEF\x66\x9E\x18\xB1\x9B\xB0\x43\xB8\x86\xB5\x16\xB6\x10\xB5\x35\xB4\xFB\x67\xB3\x17\x98\x98\xA9\x08\x05\x05\x07\xF8\xB2\x4D\x88\x9E\x07\x01\x0B\x00\x1F\x0F\x8F\xBA\x79\x0B\xBE\x34\x13\x0A\x77\x2F\x85\x31\x58\x5D\x22\xCA\x2B\xE9\x7B\x17\x35\x66\x2A\xBB\xB1\xFF\x58\x65\xB4\x78\xD3\x29\x36\x5D\x94\x32\x46\xB6\x02\x9E\x69\x06\x63\x2F\x80\x31\x63\x0B\x55\xD1\x93\xA3\xB1\xEA\x2C\x70\x8B\x40\x4E\x75\xB1\xBF\x8D\x58\x00\x3D\xD3\x02\x41\x00\x03\x00\xDA\x8F\xFD\x37\x9F\x39\x6D\xB4\xF4\x28\xAD\xA6\x4A\x76\x25\x19\x3A\x44\x8A\xB0\x2E\xB5\x33\x74\xB4\xEE\x7D\x78\xD1\xA9\x0B\x9A\x47\xBC\x2B\x6E\xDC\x09\x54\x2F\x1D\x93\xF3\x68\xC9\x52\x96\x2D\x82\xEC\x28\x6F\xB3\x0A\x8E\x10\x08\x32\x08\x65\x4B\xF2\xF5\x6A\x94\x2F\xA4\x84\x14\x86\x1E\xB7\x06\x74\x2D\x00\xEA\x68\xD6\xDF\x22\x16\xBF\x17\xAE\x8D\xB7\x6A\x06\x7F\x2F\x7A\xB4\xEC\x5D\x2B\x02\xAE\x00\x82\xEC\x2B\xBA\x89\x75\x21\xEB\x8C\xC3\xB1\x5B\x63\x28\xD0\x88\xA3\xA7\x09\x08\x8D\xB5\x87\x84\x3F\xB4\x0B\x85\x04\x69\xC5\xCA\x0D\xA3\xA9\x5A\x00\x30\x37\x0C\x00\x34\xB5\x86\x31\xDC\x68\x9E\xFF\x54\xA3\xA6\xC6\x26\x8D\xB4\x11\x89\x49\xB5\x22\x88\x27\x69\x92\x37\x82\x76\x3A\x46\xB2\xD3\x2A\x64\x32\xFB\x7C\x99\xA4\xDE\x5D\x02\xC6\x34\xA4\xA3\x47\xBE\x93\xB0\x7E\x7B\x6E\x8F\xF6\x70\x04\x3F\x5E\xC3\x93\xA9\x99\x9E\x16\x8C\xB6\xA0\xB0\xD2\x07\x64\xB4\x05\xE7\x4F\xCF\x1B\x01\x1B\x48\xB8\xDC\x2C\x4B\x04\x3B\xB5\x90\x68\x29\x69\xC4\xCA\x2B\xA4\xB5\x48\xB1\xB6\x07\x25\xB4\xEC\x01\x98\xB4\x42\xF4\x33\xD2\x9B\xC3\x15\x49\xB5\x44\xB1\x77\x27\x9F\x38\x64\x68\x53\x69\xD8\xD2\x95\xA5\xAE\x47\xBA\x96\xB6\xBF\x2C\x4F\xB5\xA1\x1D\xE4\x68\xE4\x54\x9C\xA5\xB1\x1C\x02\x94\xB3\x2C\xB4\x51\xB5\xAE\x2E\xE2\x68\xA8\x1C\x42\x41\x1D\x02\x0F\x27\x3A\x8E\x39\x4C\x32\x03\x2F\xE2\x5D\x18\xD2\xA2\x77\x31\x87\x7D\x65\x70\x36\x6B\x44\xB4\xD3\x48\xDE\x5D\x33\xCA\x0D\xA4\xA8\xEE\x23\x1B\x6C\x2A\xB6\x78\x2F\x8E\xB4\xCD\x4D\x52\x16\x0F\x79\x24\x33\x7B\xBD\x7C\xB5\x81\x41\xB5\x81\x53\x42\x10\x0A\x1F\x0B\xA3\xA9\xB4\x40\xAD\x7E\x8B\x66\xB4\x7C\xD4\x01\x03\x12\xCE\x3B\xA8\xE8\x73\xF3\x0F\x27\x3E\x79\x7D\xF7\x7C\xDA\xB3\xBE\x67\xA2\xD9\x3C\x99\xBE\x3A\x51\x23\x7D\x30\xB4\x89\xAB\x90\x53\x8A\xFB\x4B\xCE\xA8\x02\xBF\x3B\xB6\xC8\x84\x0E\xB4\x8D\x53\xFE\xB3\xA6\xA5\x64\xCB\x87\x9A\xA0\x21\xAA\xB9\x82\x03\xB6\xC6\x7D\x92\xB3\x00\x68\xED\xCB\x87\xA0\xBF\x62\x5E\x9A\xB3\xE9\xA9\x98\x47\xA8\x7D\x91\x11\xFB\xE4\x47\x9E\xBA\x64\x86\x9B\xB0\xF6\xB0\x76\x79\x99\xB3\xC8\x52\xE6\xDF\x25", +"\xA6\xA0\xDE\x75\xB3\x7D\xF7\xB0\x0E\xB5\xD8\x85\x63\x68\xC2\xF9\x3A\x9C\xB6\x3B\xBC\xF0\x35\xE7\xB0\x36\x70\x3C\x04\xC8\x65\xC4\xD3\x93\xA7\xB5\x4C\xBD\x77\xB3\xE8\xB0\x6D\xB4\xB6\xB3\xD8\x69\xEE\xCE\x96\xEF\x6C\x9A\x7A\x14\x92\x3C\xB6\xD4\xAB\xE3\xB4\xB1\x69\xD5\xD3\xB9\x01\xA7\x4F\xBD\xD0\x87\xE9\xB0\x0C\xB5\x7F\xB3\xB2\x7B\x53\xCE\x84\xEA\x65\x4E\xB5\x76\xAE\x2A\x79\x7C\xB4\xDE\xB3\xF3\x69\xB6\xCE\xB3\xA1\xA6\x41\xB4\x6F\xB2\x54\x78\x0F\xB4\x5A\xB3\x74\xF4\x7C\xD3\x83\x5B\xBE\x4F\xB2\xB6\x7F\x0C\x82\xDF\xB2\x01\xB5\xCC\x69\x84\xD4\xA9\x9A\xB7\xEE\x56\x76\xB0\xAD\x8A\x82\xB4\xAE\x8A\xB0\x69\x8D\xD4\xB2\xA6\xBC\x05\xA5\x7B\xB7\xE6\xB2\x84\xB5\xA3\xB3\x70\x67\xA9\x87\x32\x9D\xB3\xB9\x34\x77\xB6\x0A\xB4\x77\xB4\xE3\x00\x59\x68\xA6\xCE\xAC\x98\xBC\x42\xB3\x61\x57\x42\xB7\xC9\xAA\x40\x36\xC8\x69\xA4\xF6\x6D\x9E\xAD\x44\xB9\x9E\xB2\xF0\xB0\x19\xB4\xA4\x07\x66\x68\xEE\xD3\xAF\xA6\xB0\x51\xBF\x9F\xB7\x34\xB6\x75\xB4\x1A\xB5\x1B\x0C\xD9\xD3\xA4\x9B\xAF\x5F\x86\x10\x01\x7E\x87\xB9\xA8\x17\xB5\x10\x25\x99\xD4\xBC\xED\x6E\x50\xB6\x9E\xB0\x42\xB4\xE7\xB3\xD7\xB3\xE4\x66\xF6\xD0\x86\x04\x0D\x3E\x72\x59\xB0\x49\xB6\x5C\xAA\xF8\xB4\x1A\x6A\xF2\xD3\x8C\x9D\xB4\x4F\xBF\x8B\xB1\x7C\x84\x1B\xB4\x3F\xB4\xB1\xFB\x2D\xD4\xA3\xA7\xA9\xDC\x79\xA5\xB0\x40\xB7\x96\xB4\x27\xB5\x91\x67\xA6\xCF\xBC\xA1\xBB\x68\x80\x75\xB4\xD2\x50\x02\x87\x86\xB2\x3A\x6A\xC6\xD3\xB3\x99\x7D\x51\xBA\x55\xA0\x35\xB7\x75\xB5\x20\xB5\xEA\x69\xEB\xF6\x61\x05\x55\xAB\x39\x94\xB1\x29\x7A\x95\xB5\x04\xAB\x64\x6A\xF5\xCC\x63\xCA\x72\x3D\xB1\xA7\xB5\x3F\xB4\x96\xB5\x25\xB5\x1B\x6A\x90\xCE\x9D\xA8\xA3\x50\xBE\x88\xB7\x04\xB4\xBC\xB3\x84\x00\xB4\x05\xAA\xA1\xB4\x93\x43\x53\xBA\xA4\xB5\x76\x7E\x96\xB5\xD9\xB4\x68\x6A\x80\xCF\xB5\xA8\xBA\x41\xB5\x6F\xB0\x3E\xB0\x5B\xB5\xB7\x78\xC4\xF9\x27\xA6\x3F\xC9\x2A\x3A\xB6\x10\x07\x2A\xB7\x6E\x6D\xAC\xB4\x6D\x63\x5B\xD2\xB9\x2C\x00\x4C\xBB\x3A\x05\x75\x01\x34\xB5\xBC\xB4\x32\x69\xF1\xD2\x9B\x05\x83\x32\x77\x93\xB4\x8E\x7A\xA9\xB5\xE5\x78\x3B\x69\xC7\x6F\x70\xA3\xA3\x4A\xBD\x8D\xB3\x55\xB5\x4B\xB5\xBA\xB4\xF1\xE7\x3B\xD5\xB6\xA5\xAA\xE2\x3A\xF3\x02\x0C\x01\x53\xB5\x82\x8D\x66\x69\x7C\xD4\xBE\x57\x27\x32\xB9\x4F\xB4\x0C\x03\xB1\xB4\xE4\xB3\x44\x0F\x67\x95\x1C\x15\xB1\x0C\x76\x4A\x77\x69\x31\x79\xB3\xA0\x05\x3A\x0B\x42\xC6\x26\xA5\x29\x33\xBB\x8C\x05\x2F\xB5\xF3\x54\xA2\x05\xDF\x5E\x30\xCB\x29\x78\x22\x1A\x3B\x2F\x86\x19\x5A\x19\x00\x6F\xB5\x9D\x50\xC2\x9A\xAF\x55\x8C\x50\xB0\x9A\xB1\x05\xA0\x8F\x03\x3F\xB5\x97\x69\xF1\xD5\xB2\xAB\xB3\x57\xB4\xAF\xB5\x5E\xB6\xBD\xB5\x7B\xB5\xF8\x6A\xF9\xD5\xBA\xAB\xBB\x57\xBC\xAF\xB5\x5F\xB6\xBF\xB5\x7F\xB5\x00\x6B\x81\xD6\x82\xAC\xA3\x58\xB4\xB0\xB1\x33\xB0", +}; + + void WfGetParserBuffer(vl::stream::MemoryStream& stream) + { + vl::stream::MemoryStream compressedStream; + for (vint i = 0; i < parserBufferRows; i++) + { + vint size = i == parserBufferRows - 1 ? parserBufferRemain : parserBufferBlock; + compressedStream.Write((void*)parserBuffer[i], size); + } + compressedStream.SeekFromBegin(0); + vl::stream::LzwDecoder decoder; + vl::stream::DecoderStream decoderStream(compressedStream, decoder); + vl::collections::Array buffer(65536); + while (true) + { + vl::vint size = decoderStream.Read(&buffer[0], 65536); + if (size == 0) break; + stream.Write(&buffer[0], size); + } + stream.SeekFromBegin(0); + } +/*********************************************************************** +Unescaping Function Foward Declarations +***********************************************************************/ + + extern void SetDefaultClassMember(vl::collections::List>& value, const vl::collections::List& tokens); + extern void UnescapeFormatString(vl::parsing::ParsingToken& value, const vl::collections::List& tokens); + extern void UnescapeString(vl::parsing::ParsingToken& value, const vl::collections::List& tokens); + +/*********************************************************************** +Parsing Tree Conversion Driver Implementation +***********************************************************************/ + + class WfTreeConverter : public vl::parsing::ParsingTreeConverter + { + public: + using vl::parsing::ParsingTreeConverter::SetMember; + + bool SetMember(WfClassMemberKind& member, vl::Ptr node, const TokenList& tokens) + { + vl::Ptr token=node.Cast(); + if(token) + { + if(token->GetValue()==L"Static") { member=WfClassMemberKind::Static; return true; } + else if(token->GetValue()==L"Override") { member=WfClassMemberKind::Override; return true; } + else if(token->GetValue()==L"Normal") { member=WfClassMemberKind::Normal; return true; } + else { member=WfClassMemberKind::Static; return false; } + } + member=WfClassMemberKind::Static; + return false; + } + + bool SetMember(WfPredefinedTypeName& member, vl::Ptr node, const TokenList& tokens) + { + vl::Ptr token=node.Cast(); + if(token) + { + if(token->GetValue()==L"Void") { member=WfPredefinedTypeName::Void; return true; } + else if(token->GetValue()==L"Object") { member=WfPredefinedTypeName::Object; return true; } + else if(token->GetValue()==L"Interface") { member=WfPredefinedTypeName::Interface; return true; } + else if(token->GetValue()==L"Int") { member=WfPredefinedTypeName::Int; return true; } + else if(token->GetValue()==L"UInt") { member=WfPredefinedTypeName::UInt; return true; } + else if(token->GetValue()==L"Float") { member=WfPredefinedTypeName::Float; return true; } + else if(token->GetValue()==L"Double") { member=WfPredefinedTypeName::Double; return true; } + else if(token->GetValue()==L"String") { member=WfPredefinedTypeName::String; return true; } + else if(token->GetValue()==L"Char") { member=WfPredefinedTypeName::Char; return true; } + else if(token->GetValue()==L"Bool") { member=WfPredefinedTypeName::Bool; return true; } + else { member=WfPredefinedTypeName::Void; return false; } + } + member=WfPredefinedTypeName::Void; + return false; + } + + bool SetMember(WfMapWritability& member, vl::Ptr node, const TokenList& tokens) + { + vl::Ptr token=node.Cast(); + if(token) + { + if(token->GetValue()==L"Readonly") { member=WfMapWritability::Readonly; return true; } + else if(token->GetValue()==L"Writable") { member=WfMapWritability::Writable; return true; } + else { member=WfMapWritability::Readonly; return false; } + } + member=WfMapWritability::Readonly; + return false; + } + + bool SetMember(WfFunctionAnonymity& member, vl::Ptr node, const TokenList& tokens) + { + vl::Ptr token=node.Cast(); + if(token) + { + if(token->GetValue()==L"Named") { member=WfFunctionAnonymity::Named; return true; } + else if(token->GetValue()==L"Anonymous") { member=WfFunctionAnonymity::Anonymous; return true; } + else { member=WfFunctionAnonymity::Named; return false; } + } + member=WfFunctionAnonymity::Named; + return false; + } + + bool SetMember(WfClassKind& member, vl::Ptr node, const TokenList& tokens) + { + vl::Ptr token=node.Cast(); + if(token) + { + if(token->GetValue()==L"Class") { member=WfClassKind::Class; return true; } + else if(token->GetValue()==L"Interface") { member=WfClassKind::Interface; return true; } + else { member=WfClassKind::Class; return false; } + } + member=WfClassKind::Class; + return false; + } + + bool SetMember(WfConstructorType& member, vl::Ptr node, const TokenList& tokens) + { + vl::Ptr token=node.Cast(); + if(token) + { + if(token->GetValue()==L"Undefined") { member=WfConstructorType::Undefined; return true; } + else if(token->GetValue()==L"SharedPtr") { member=WfConstructorType::SharedPtr; return true; } + else if(token->GetValue()==L"RawPtr") { member=WfConstructorType::RawPtr; return true; } + else { member=WfConstructorType::Undefined; return false; } + } + member=WfConstructorType::Undefined; + return false; + } + + bool SetMember(WfEnumKind& member, vl::Ptr node, const TokenList& tokens) + { + vl::Ptr token=node.Cast(); + if(token) + { + if(token->GetValue()==L"Normal") { member=WfEnumKind::Normal; return true; } + else if(token->GetValue()==L"Flag") { member=WfEnumKind::Flag; return true; } + else { member=WfEnumKind::Normal; return false; } + } + member=WfEnumKind::Normal; + return false; + } + + bool SetMember(WfEnumItemKind& member, vl::Ptr node, const TokenList& tokens) + { + vl::Ptr token=node.Cast(); + if(token) + { + if(token->GetValue()==L"Constant") { member=WfEnumItemKind::Constant; return true; } + else if(token->GetValue()==L"Intersection") { member=WfEnumItemKind::Intersection; return true; } + else { member=WfEnumItemKind::Constant; return false; } + } + member=WfEnumItemKind::Constant; + return false; + } + + bool SetMember(WfAPConst& member, vl::Ptr node, const TokenList& tokens) + { + vl::Ptr token=node.Cast(); + if(token) + { + if(token->GetValue()==L"Readonly") { member=WfAPConst::Readonly; return true; } + else if(token->GetValue()==L"Writable") { member=WfAPConst::Writable; return true; } + else { member=WfAPConst::Readonly; return false; } + } + member=WfAPConst::Readonly; + return false; + } + + bool SetMember(WfAPObserve& member, vl::Ptr node, const TokenList& tokens) + { + vl::Ptr token=node.Cast(); + if(token) + { + if(token->GetValue()==L"Observable") { member=WfAPObserve::Observable; return true; } + else if(token->GetValue()==L"NotObservable") { member=WfAPObserve::NotObservable; return true; } + else { member=WfAPObserve::Observable; return false; } + } + member=WfAPObserve::Observable; + return false; + } + + bool SetMember(WfForEachDirection& member, vl::Ptr node, const TokenList& tokens) + { + vl::Ptr token=node.Cast(); + if(token) + { + if(token->GetValue()==L"Normal") { member=WfForEachDirection::Normal; return true; } + else if(token->GetValue()==L"Reversed") { member=WfForEachDirection::Reversed; return true; } + else { member=WfForEachDirection::Normal; return false; } + } + member=WfForEachDirection::Normal; + return false; + } + + bool SetMember(WfStateSwitchType& member, vl::Ptr node, const TokenList& tokens) + { + vl::Ptr token=node.Cast(); + if(token) + { + if(token->GetValue()==L"Default") { member=WfStateSwitchType::Default; return true; } + else if(token->GetValue()==L"Pass") { member=WfStateSwitchType::Pass; return true; } + else if(token->GetValue()==L"PassAndReturn") { member=WfStateSwitchType::PassAndReturn; return true; } + else if(token->GetValue()==L"Ignore") { member=WfStateSwitchType::Ignore; return true; } + else if(token->GetValue()==L"IgnoreAndReturn") { member=WfStateSwitchType::IgnoreAndReturn; return true; } + else { member=WfStateSwitchType::Default; return false; } + } + member=WfStateSwitchType::Default; + return false; + } + + bool SetMember(WfStateInvokeType& member, vl::Ptr node, const TokenList& tokens) + { + vl::Ptr token=node.Cast(); + if(token) + { + if(token->GetValue()==L"Goto") { member=WfStateInvokeType::Goto; return true; } + else if(token->GetValue()==L"Push") { member=WfStateInvokeType::Push; return true; } + else { member=WfStateInvokeType::Goto; return false; } + } + member=WfStateInvokeType::Goto; + return false; + } + + bool SetMember(WfLiteralValue& member, vl::Ptr node, const TokenList& tokens) + { + vl::Ptr token=node.Cast(); + if(token) + { + if(token->GetValue()==L"Null") { member=WfLiteralValue::Null; return true; } + else if(token->GetValue()==L"True") { member=WfLiteralValue::True; return true; } + else if(token->GetValue()==L"False") { member=WfLiteralValue::False; return true; } + else { member=WfLiteralValue::Null; return false; } + } + member=WfLiteralValue::Null; + return false; + } + + bool SetMember(WfUnaryOperator& member, vl::Ptr node, const TokenList& tokens) + { + vl::Ptr token=node.Cast(); + if(token) + { + if(token->GetValue()==L"Positive") { member=WfUnaryOperator::Positive; return true; } + else if(token->GetValue()==L"Negative") { member=WfUnaryOperator::Negative; return true; } + else if(token->GetValue()==L"Not") { member=WfUnaryOperator::Not; return true; } + else { member=WfUnaryOperator::Positive; return false; } + } + member=WfUnaryOperator::Positive; + return false; + } + + bool SetMember(WfBinaryOperator& member, vl::Ptr node, const TokenList& tokens) + { + vl::Ptr token=node.Cast(); + if(token) + { + if(token->GetValue()==L"Assign") { member=WfBinaryOperator::Assign; return true; } + else if(token->GetValue()==L"Index") { member=WfBinaryOperator::Index; return true; } + else if(token->GetValue()==L"Union") { member=WfBinaryOperator::Union; return true; } + else if(token->GetValue()==L"Intersect") { member=WfBinaryOperator::Intersect; return true; } + else if(token->GetValue()==L"FailedThen") { member=WfBinaryOperator::FailedThen; return true; } + else if(token->GetValue()==L"Exp") { member=WfBinaryOperator::Exp; return true; } + else if(token->GetValue()==L"Add") { member=WfBinaryOperator::Add; return true; } + else if(token->GetValue()==L"Sub") { member=WfBinaryOperator::Sub; return true; } + else if(token->GetValue()==L"Mul") { member=WfBinaryOperator::Mul; return true; } + else if(token->GetValue()==L"Div") { member=WfBinaryOperator::Div; return true; } + else if(token->GetValue()==L"Mod") { member=WfBinaryOperator::Mod; return true; } + else if(token->GetValue()==L"Shl") { member=WfBinaryOperator::Shl; return true; } + else if(token->GetValue()==L"Shr") { member=WfBinaryOperator::Shr; return true; } + else if(token->GetValue()==L"LT") { member=WfBinaryOperator::LT; return true; } + else if(token->GetValue()==L"GT") { member=WfBinaryOperator::GT; return true; } + else if(token->GetValue()==L"LE") { member=WfBinaryOperator::LE; return true; } + else if(token->GetValue()==L"GE") { member=WfBinaryOperator::GE; return true; } + else if(token->GetValue()==L"EQ") { member=WfBinaryOperator::EQ; return true; } + else if(token->GetValue()==L"NE") { member=WfBinaryOperator::NE; return true; } + else if(token->GetValue()==L"Xor") { member=WfBinaryOperator::Xor; return true; } + else if(token->GetValue()==L"And") { member=WfBinaryOperator::And; return true; } + else if(token->GetValue()==L"Or") { member=WfBinaryOperator::Or; return true; } + else { member=WfBinaryOperator::Assign; return false; } + } + member=WfBinaryOperator::Assign; + return false; + } + + bool SetMember(WfRangeBoundary& member, vl::Ptr node, const TokenList& tokens) + { + vl::Ptr token=node.Cast(); + if(token) + { + if(token->GetValue()==L"Inclusive") { member=WfRangeBoundary::Inclusive; return true; } + else if(token->GetValue()==L"Exclusive") { member=WfRangeBoundary::Exclusive; return true; } + else { member=WfRangeBoundary::Inclusive; return false; } + } + member=WfRangeBoundary::Inclusive; + return false; + } + + bool SetMember(WfSetTesting& member, vl::Ptr node, const TokenList& tokens) + { + vl::Ptr token=node.Cast(); + if(token) + { + if(token->GetValue()==L"In") { member=WfSetTesting::In; return true; } + else if(token->GetValue()==L"NotIn") { member=WfSetTesting::NotIn; return true; } + else { member=WfSetTesting::In; return false; } + } + member=WfSetTesting::In; + return false; + } + + bool SetMember(WfTypeCastingStrategy& member, vl::Ptr node, const TokenList& tokens) + { + vl::Ptr token=node.Cast(); + if(token) + { + if(token->GetValue()==L"Strong") { member=WfTypeCastingStrategy::Strong; return true; } + else if(token->GetValue()==L"Weak") { member=WfTypeCastingStrategy::Weak; return true; } + else { member=WfTypeCastingStrategy::Strong; return false; } + } + member=WfTypeCastingStrategy::Strong; + return false; + } + + bool SetMember(WfTypeTesting& member, vl::Ptr node, const TokenList& tokens) + { + vl::Ptr token=node.Cast(); + if(token) + { + if(token->GetValue()==L"IsType") { member=WfTypeTesting::IsType; return true; } + else if(token->GetValue()==L"IsNotType") { member=WfTypeTesting::IsNotType; return true; } + else if(token->GetValue()==L"IsNull") { member=WfTypeTesting::IsNull; return true; } + else if(token->GetValue()==L"IsNotNull") { member=WfTypeTesting::IsNotNull; return true; } + else { member=WfTypeTesting::IsType; return false; } + } + member=WfTypeTesting::IsType; + return false; + } + + bool SetMember(WfObserveType& member, vl::Ptr node, const TokenList& tokens) + { + vl::Ptr token=node.Cast(); + if(token) + { + if(token->GetValue()==L"SimpleObserve") { member=WfObserveType::SimpleObserve; return true; } + else if(token->GetValue()==L"ExtendedObserve") { member=WfObserveType::ExtendedObserve; return true; } + else { member=WfObserveType::SimpleObserve; return false; } + } + member=WfObserveType::SimpleObserve; + return false; + } + + bool SetMember(WfModuleType& member, vl::Ptr node, const TokenList& tokens) + { + vl::Ptr token=node.Cast(); + if(token) + { + if(token->GetValue()==L"Module") { member=WfModuleType::Module; return true; } + else if(token->GetValue()==L"Unit") { member=WfModuleType::Unit; return true; } + else { member=WfModuleType::Module; return false; } + } + member=WfModuleType::Module; + return false; + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->kind, obj->GetMember(L"kind"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->category, obj->GetMember(L"category"), tokens); + SetMember(tree->name, obj->GetMember(L"name"), tokens); + SetMember(tree->value, obj->GetMember(L"value"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->attributes, obj->GetMember(L"attributes"), tokens); + SetMember(tree->name, obj->GetMember(L"name"), tokens); + SetMember(tree->classMember, obj->GetMember(L"classMember"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->name, obj->GetMember(L"name"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->name, obj->GetMember(L"name"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->name, obj->GetMember(L"name"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->element, obj->GetMember(L"element"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->element, obj->GetMember(L"element"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->element, obj->GetMember(L"element"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->element, obj->GetMember(L"element"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->writability, obj->GetMember(L"writability"), tokens); + SetMember(tree->key, obj->GetMember(L"key"), tokens); + SetMember(tree->value, obj->GetMember(L"value"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->element, obj->GetMember(L"element"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->result, obj->GetMember(L"result"), tokens); + SetMember(tree->arguments, obj->GetMember(L"arguments"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->parent, obj->GetMember(L"parent"), tokens); + SetMember(tree->name, obj->GetMember(L"name"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->declarations, obj->GetMember(L"declarations"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->attributes, obj->GetMember(L"attributes"), tokens); + SetMember(tree->name, obj->GetMember(L"name"), tokens); + SetMember(tree->type, obj->GetMember(L"type"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->anonymity, obj->GetMember(L"anonymity"), tokens); + SetMember(tree->arguments, obj->GetMember(L"arguments"), tokens); + SetMember(tree->returnType, obj->GetMember(L"returnType"), tokens); + SetMember(tree->statement, obj->GetMember(L"statement"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->type, obj->GetMember(L"type"), tokens); + SetMember(tree->expression, obj->GetMember(L"expression"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->arguments, obj->GetMember(L"arguments"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->type, obj->GetMember(L"type"), tokens); + SetMember(tree->getter, obj->GetMember(L"getter"), tokens); + SetMember(tree->setter, obj->GetMember(L"setter"), tokens); + SetMember(tree->valueChangedEvent, obj->GetMember(L"valueChangedEvent"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->type, obj->GetMember(L"type"), tokens); + SetMember(tree->arguments, obj->GetMember(L"arguments"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->constructorType, obj->GetMember(L"constructorType"), tokens); + SetMember(tree->baseConstructorCalls, obj->GetMember(L"baseConstructorCalls"), tokens); + SetMember(tree->arguments, obj->GetMember(L"arguments"), tokens); + SetMember(tree->statement, obj->GetMember(L"statement"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->statement, obj->GetMember(L"statement"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->kind, obj->GetMember(L"kind"), tokens); + SetMember(tree->constructorType, obj->GetMember(L"constructorType"), tokens); + SetMember(tree->baseTypes, obj->GetMember(L"baseTypes"), tokens); + if(SetMember(tree->declarations, obj->GetMember(L"declarations"), tokens)) + { + SetDefaultClassMember(tree->declarations, tokens); + } + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->name, obj->GetMember(L"name"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->attributes, obj->GetMember(L"attributes"), tokens); + SetMember(tree->name, obj->GetMember(L"name"), tokens); + SetMember(tree->kind, obj->GetMember(L"kind"), tokens); + SetMember(tree->number, obj->GetMember(L"number"), tokens); + SetMember(tree->intersections, obj->GetMember(L"intersections"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->kind, obj->GetMember(L"kind"), tokens); + SetMember(tree->items, obj->GetMember(L"items"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->attributes, obj->GetMember(L"attributes"), tokens); + SetMember(tree->name, obj->GetMember(L"name"), tokens); + SetMember(tree->type, obj->GetMember(L"type"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->members, obj->GetMember(L"members"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->expandedDeclarations, obj->GetMember(L"expandedDeclarations"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->type, obj->GetMember(L"type"), tokens); + SetMember(tree->configConst, obj->GetMember(L"configConst"), tokens); + SetMember(tree->configObserve, obj->GetMember(L"configObserve"), tokens); + SetMember(tree->expression, obj->GetMember(L"expression"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->baseType, obj->GetMember(L"baseType"), tokens); + SetMember(tree->elementType, obj->GetMember(L"elementType"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->expandedDeclarations, obj->GetMember(L"expandedDeclarations"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->name, obj->GetMember(L"name"), tokens); + SetMember(tree->arguments, obj->GetMember(L"arguments"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->name, obj->GetMember(L"name"), tokens); + SetMember(tree->arguments, obj->GetMember(L"arguments"), tokens); + SetMember(tree->statement, obj->GetMember(L"statement"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->inputs, obj->GetMember(L"inputs"), tokens); + SetMember(tree->states, obj->GetMember(L"states"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->expression, obj->GetMember(L"expression"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->expression, obj->GetMember(L"expression"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->expression, obj->GetMember(L"expression"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->type, obj->GetMember(L"type"), tokens); + SetMember(tree->name, obj->GetMember(L"name"), tokens); + SetMember(tree->expression, obj->GetMember(L"expression"), tokens); + SetMember(tree->trueBranch, obj->GetMember(L"trueBranch"), tokens); + SetMember(tree->falseBranch, obj->GetMember(L"falseBranch"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->condition, obj->GetMember(L"condition"), tokens); + SetMember(tree->statement, obj->GetMember(L"statement"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->protectedStatement, obj->GetMember(L"protectedStatement"), tokens); + SetMember(tree->name, obj->GetMember(L"name"), tokens); + SetMember(tree->catchStatement, obj->GetMember(L"catchStatement"), tokens); + SetMember(tree->finallyStatement, obj->GetMember(L"finallyStatement"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->statements, obj->GetMember(L"statements"), tokens); + SetMember(tree->endLabel, obj->GetMember(L"endLabel"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->label, obj->GetMember(L"label"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->variable, obj->GetMember(L"variable"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->expression, obj->GetMember(L"expression"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->expandedStatement, obj->GetMember(L"expandedStatement"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->name, obj->GetMember(L"name"), tokens); + SetMember(tree->direction, obj->GetMember(L"direction"), tokens); + SetMember(tree->collection, obj->GetMember(L"collection"), tokens); + SetMember(tree->statement, obj->GetMember(L"statement"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->expression, obj->GetMember(L"expression"), tokens); + SetMember(tree->statement, obj->GetMember(L"statement"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->expression, obj->GetMember(L"expression"), tokens); + SetMember(tree->caseBranches, obj->GetMember(L"caseBranches"), tokens); + SetMember(tree->defaultBranch, obj->GetMember(L"defaultBranch"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->name, obj->GetMember(L"name"), tokens); + SetMember(tree->statement, obj->GetMember(L"statement"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->statement, obj->GetMember(L"statement"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->varName, obj->GetMember(L"varName"), tokens); + SetMember(tree->opName, obj->GetMember(L"opName"), tokens); + SetMember(tree->arguments, obj->GetMember(L"arguments"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->name, obj->GetMember(L"name"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->name, obj->GetMember(L"name"), tokens); + SetMember(tree->arguments, obj->GetMember(L"arguments"), tokens); + SetMember(tree->statement, obj->GetMember(L"statement"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->type, obj->GetMember(L"type"), tokens); + SetMember(tree->caseBranches, obj->GetMember(L"caseBranches"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->type, obj->GetMember(L"type"), tokens); + SetMember(tree->name, obj->GetMember(L"name"), tokens); + SetMember(tree->arguments, obj->GetMember(L"arguments"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->name, obj->GetMember(L"name"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->name, obj->GetMember(L"name"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->name, obj->GetMember(L"name"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->body, obj->GetMember(L"body"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->parent, obj->GetMember(L"parent"), tokens); + SetMember(tree->name, obj->GetMember(L"name"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->parent, obj->GetMember(L"parent"), tokens); + SetMember(tree->name, obj->GetMember(L"name"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->value, obj->GetMember(L"value"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->value, obj->GetMember(L"value"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->value, obj->GetMember(L"value"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + if(SetMember(tree->value, obj->GetMember(L"value"), tokens)) + { + UnescapeString(tree->value, tokens); + } + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->op, obj->GetMember(L"op"), tokens); + SetMember(tree->operand, obj->GetMember(L"operand"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->op, obj->GetMember(L"op"), tokens); + SetMember(tree->first, obj->GetMember(L"first"), tokens); + SetMember(tree->second, obj->GetMember(L"second"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->name, obj->GetMember(L"name"), tokens); + SetMember(tree->value, obj->GetMember(L"value"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->variables, obj->GetMember(L"variables"), tokens); + SetMember(tree->expression, obj->GetMember(L"expression"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->condition, obj->GetMember(L"condition"), tokens); + SetMember(tree->trueBranch, obj->GetMember(L"trueBranch"), tokens); + SetMember(tree->falseBranch, obj->GetMember(L"falseBranch"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->begin, obj->GetMember(L"begin"), tokens); + SetMember(tree->beginBoundary, obj->GetMember(L"beginBoundary"), tokens); + SetMember(tree->end, obj->GetMember(L"end"), tokens); + SetMember(tree->endBoundary, obj->GetMember(L"endBoundary"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->test, obj->GetMember(L"test"), tokens); + SetMember(tree->element, obj->GetMember(L"element"), tokens); + SetMember(tree->collection, obj->GetMember(L"collection"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->key, obj->GetMember(L"key"), tokens); + SetMember(tree->value, obj->GetMember(L"value"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->arguments, obj->GetMember(L"arguments"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->expression, obj->GetMember(L"expression"), tokens); + SetMember(tree->type, obj->GetMember(L"type"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->strategy, obj->GetMember(L"strategy"), tokens); + SetMember(tree->expression, obj->GetMember(L"expression"), tokens); + SetMember(tree->type, obj->GetMember(L"type"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->test, obj->GetMember(L"test"), tokens); + SetMember(tree->expression, obj->GetMember(L"expression"), tokens); + SetMember(tree->type, obj->GetMember(L"type"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->type, obj->GetMember(L"type"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->expression, obj->GetMember(L"expression"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->event, obj->GetMember(L"event"), tokens); + SetMember(tree->function, obj->GetMember(L"function"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->event, obj->GetMember(L"event"), tokens); + SetMember(tree->handler, obj->GetMember(L"handler"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->parent, obj->GetMember(L"parent"), tokens); + SetMember(tree->observeType, obj->GetMember(L"observeType"), tokens); + SetMember(tree->name, obj->GetMember(L"name"), tokens); + SetMember(tree->expression, obj->GetMember(L"expression"), tokens); + SetMember(tree->events, obj->GetMember(L"events"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->function, obj->GetMember(L"function"), tokens); + SetMember(tree->arguments, obj->GetMember(L"arguments"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->function, obj->GetMember(L"function"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->type, obj->GetMember(L"type"), tokens); + SetMember(tree->arguments, obj->GetMember(L"arguments"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->type, obj->GetMember(L"type"), tokens); + if(SetMember(tree->declarations, obj->GetMember(L"declarations"), tokens)) + { + SetDefaultClassMember(tree->declarations, tokens); + } + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->expandedExpression, obj->GetMember(L"expandedExpression"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + if(SetMember(tree->value, obj->GetMember(L"value"), tokens)) + { + UnescapeFormatString(tree->value, tokens); + } + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->expandedExpression, obj->GetMember(L"expandedExpression"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->expression, obj->GetMember(L"expression"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->name, obj->GetMember(L"name"), tokens); + SetMember(tree->statement, obj->GetMember(L"statement"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->type, obj->GetMember(L"type"), tokens); + SetMember(tree->expression, obj->GetMember(L"expression"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->strategy, obj->GetMember(L"strategy"), tokens); + SetMember(tree->expression, obj->GetMember(L"expression"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->name, obj->GetMember(L"name"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->name, obj->GetMember(L"name"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->fragments, obj->GetMember(L"fragments"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->items, obj->GetMember(L"items"), tokens); + } + + void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) + { + SetMember(tree->moduleType, obj->GetMember(L"moduleType"), tokens); + SetMember(tree->name, obj->GetMember(L"name"), tokens); + SetMember(tree->paths, obj->GetMember(L"paths"), tokens); + SetMember(tree->declarations, obj->GetMember(L"declarations"), tokens); + } + + vl::Ptr ConvertClass(vl::Ptr obj, const TokenList& tokens)override + { + if(obj->GetType()==L"ClassMember") + { + vl::Ptr tree = new WfClassMember; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + return tree; + } + else if(obj->GetType()==L"Attribute") + { + vl::Ptr tree = new WfAttribute; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + return tree; + } + else if(obj->GetType()==L"PredefinedType") + { + vl::Ptr tree = new WfPredefinedType; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"TopQualifiedType") + { + vl::Ptr tree = new WfTopQualifiedType; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"ReferenceType") + { + vl::Ptr tree = new WfReferenceType; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"RawPointerType") + { + vl::Ptr tree = new WfRawPointerType; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"SharedPointerType") + { + vl::Ptr tree = new WfSharedPointerType; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"NullableType") + { + vl::Ptr tree = new WfNullableType; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"EnumerableType") + { + vl::Ptr tree = new WfEnumerableType; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"MapType") + { + vl::Ptr tree = new WfMapType; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"ObservableListType") + { + vl::Ptr tree = new WfObservableListType; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"FunctionType") + { + vl::Ptr tree = new WfFunctionType; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"ChildType") + { + vl::Ptr tree = new WfChildType; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"NamespaceDeclaration") + { + vl::Ptr tree = new WfNamespaceDeclaration; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"FunctionArgument") + { + vl::Ptr tree = new WfFunctionArgument; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + return tree; + } + else if(obj->GetType()==L"FunctionDeclaration") + { + vl::Ptr tree = new WfFunctionDeclaration; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"VariableDeclaration") + { + vl::Ptr tree = new WfVariableDeclaration; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"EventDeclaration") + { + vl::Ptr tree = new WfEventDeclaration; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"PropertyDeclaration") + { + vl::Ptr tree = new WfPropertyDeclaration; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"BaseConstructorCall") + { + vl::Ptr tree = new WfBaseConstructorCall; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + return tree; + } + else if(obj->GetType()==L"ConstructorDeclaration") + { + vl::Ptr tree = new WfConstructorDeclaration; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"DestructorDeclaration") + { + vl::Ptr tree = new WfDestructorDeclaration; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"ClassDeclaration") + { + vl::Ptr tree = new WfClassDeclaration; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"EnumItemIntersection") + { + vl::Ptr tree = new WfEnumItemIntersection; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + return tree; + } + else if(obj->GetType()==L"EnumItem") + { + vl::Ptr tree = new WfEnumItem; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + return tree; + } + else if(obj->GetType()==L"EnumDeclaration") + { + vl::Ptr tree = new WfEnumDeclaration; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"StructMember") + { + vl::Ptr tree = new WfStructMember; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + return tree; + } + else if(obj->GetType()==L"StructDeclaration") + { + vl::Ptr tree = new WfStructDeclaration; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"AutoPropertyDeclaration") + { + vl::Ptr tree = new WfAutoPropertyDeclaration; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"CastResultInterfaceDeclaration") + { + vl::Ptr tree = new WfCastResultInterfaceDeclaration; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"StateInput") + { + vl::Ptr tree = new WfStateInput; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + return tree; + } + else if(obj->GetType()==L"StateDeclaration") + { + vl::Ptr tree = new WfStateDeclaration; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + return tree; + } + else if(obj->GetType()==L"StateMachineDeclaration") + { + vl::Ptr tree = new WfStateMachineDeclaration; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"BreakStatement") + { + vl::Ptr tree = new WfBreakStatement; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"ContinueStatement") + { + vl::Ptr tree = new WfContinueStatement; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"ReturnStatement") + { + vl::Ptr tree = new WfReturnStatement; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"DeleteStatement") + { + vl::Ptr tree = new WfDeleteStatement; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"RaiseExceptionStatement") + { + vl::Ptr tree = new WfRaiseExceptionStatement; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"IfStatement") + { + vl::Ptr tree = new WfIfStatement; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"WhileStatement") + { + vl::Ptr tree = new WfWhileStatement; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"TryStatement") + { + vl::Ptr tree = new WfTryStatement; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"BlockStatement") + { + vl::Ptr tree = new WfBlockStatement; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"GotoStatement") + { + vl::Ptr tree = new WfGotoStatement; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"VariableStatement") + { + vl::Ptr tree = new WfVariableStatement; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"ExpressionStatement") + { + vl::Ptr tree = new WfExpressionStatement; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"ForEachStatement") + { + vl::Ptr tree = new WfForEachStatement; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"SwitchCase") + { + vl::Ptr tree = new WfSwitchCase; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + return tree; + } + else if(obj->GetType()==L"SwitchStatement") + { + vl::Ptr tree = new WfSwitchStatement; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"CoProviderStatement") + { + vl::Ptr tree = new WfCoProviderStatement; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"CoPauseStatement") + { + vl::Ptr tree = new WfCoPauseStatement; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"CoOperatorStatement") + { + vl::Ptr tree = new WfCoOperatorStatement; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"StateSwitchArgument") + { + vl::Ptr tree = new WfStateSwitchArgument; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + return tree; + } + else if(obj->GetType()==L"StateSwitchCase") + { + vl::Ptr tree = new WfStateSwitchCase; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + return tree; + } + else if(obj->GetType()==L"StateSwitchStatement") + { + vl::Ptr tree = new WfStateSwitchStatement; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"StateInvokeStatement") + { + vl::Ptr tree = new WfStateInvokeStatement; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"ThisExpression") + { + vl::Ptr tree = new WfThisExpression; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"TopQualifiedExpression") + { + vl::Ptr tree = new WfTopQualifiedExpression; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"ReferenceExpression") + { + vl::Ptr tree = new WfReferenceExpression; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"OrderedNameExpression") + { + vl::Ptr tree = new WfOrderedNameExpression; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"OrderedLambdaExpression") + { + vl::Ptr tree = new WfOrderedLambdaExpression; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"MemberExpression") + { + vl::Ptr tree = new WfMemberExpression; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"ChildExpression") + { + vl::Ptr tree = new WfChildExpression; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"LiteralExpression") + { + vl::Ptr tree = new WfLiteralExpression; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"FloatingExpression") + { + vl::Ptr tree = new WfFloatingExpression; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"IntegerExpression") + { + vl::Ptr tree = new WfIntegerExpression; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"StringExpression") + { + vl::Ptr tree = new WfStringExpression; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"UnaryExpression") + { + vl::Ptr tree = new WfUnaryExpression; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"BinaryExpression") + { + vl::Ptr tree = new WfBinaryExpression; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"LetVariable") + { + vl::Ptr tree = new WfLetVariable; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + return tree; + } + else if(obj->GetType()==L"LetExpression") + { + vl::Ptr tree = new WfLetExpression; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"IfExpression") + { + vl::Ptr tree = new WfIfExpression; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"RangeExpression") + { + vl::Ptr tree = new WfRangeExpression; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"SetTestingExpression") + { + vl::Ptr tree = new WfSetTestingExpression; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"ConstructorArgument") + { + vl::Ptr tree = new WfConstructorArgument; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + return tree; + } + else if(obj->GetType()==L"ConstructorExpression") + { + vl::Ptr tree = new WfConstructorExpression; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"InferExpression") + { + vl::Ptr tree = new WfInferExpression; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"TypeCastingExpression") + { + vl::Ptr tree = new WfTypeCastingExpression; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"TypeTestingExpression") + { + vl::Ptr tree = new WfTypeTestingExpression; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"TypeOfTypeExpression") + { + vl::Ptr tree = new WfTypeOfTypeExpression; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"TypeOfExpressionExpression") + { + vl::Ptr tree = new WfTypeOfExpressionExpression; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"AttachEventExpression") + { + vl::Ptr tree = new WfAttachEventExpression; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"DetachEventExpression") + { + vl::Ptr tree = new WfDetachEventExpression; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"ObserveExpression") + { + vl::Ptr tree = new WfObserveExpression; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"CallExpression") + { + vl::Ptr tree = new WfCallExpression; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"FunctionExpression") + { + vl::Ptr tree = new WfFunctionExpression; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"NewClassExpression") + { + vl::Ptr tree = new WfNewClassExpression; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"NewInterfaceExpression") + { + vl::Ptr tree = new WfNewInterfaceExpression; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"FormatExpression") + { + vl::Ptr tree = new WfFormatExpression; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"BindExpression") + { + vl::Ptr tree = new WfBindExpression; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"NewCoroutineExpression") + { + vl::Ptr tree = new WfNewCoroutineExpression; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"MixinCastExpression") + { + vl::Ptr tree = new WfMixinCastExpression; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"ExpectedTypeCastExpression") + { + vl::Ptr tree = new WfExpectedTypeCastExpression; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"CoOperatorExpression") + { + vl::Ptr tree = new WfCoOperatorExpression; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"ModuleUsingNameFragment") + { + vl::Ptr tree = new WfModuleUsingNameFragment; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"ModuleUsingWildCardFragment") + { + vl::Ptr tree = new WfModuleUsingWildCardFragment; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + Fill(tree.Cast(), obj, tokens); + return tree; + } + else if(obj->GetType()==L"ModuleUsingItem") + { + vl::Ptr tree = new WfModuleUsingItem; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + return tree; + } + else if(obj->GetType()==L"ModuleUsingPath") + { + vl::Ptr tree = new WfModuleUsingPath; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + return tree; + } + else if(obj->GetType()==L"Module") + { + vl::Ptr tree = new WfModule; + vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); + Fill(tree, obj, tokens); + return tree; + } + else + return 0; + } + }; + + vl::Ptr WfConvertParsingTreeNode(vl::Ptr node, const vl::collections::List& tokens) + { + WfTreeConverter converter; + vl::Ptr tree; + converter.SetMember(tree, node, tokens); + return tree; + } + +/*********************************************************************** +Parsing Tree Conversion Implementation +***********************************************************************/ + + vl::Ptr WfClassMember::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfAttribute::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfPredefinedType::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfTopQualifiedType::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfReferenceType::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfRawPointerType::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfSharedPointerType::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfNullableType::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfEnumerableType::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfMapType::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfObservableListType::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfFunctionType::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfChildType::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfNamespaceDeclaration::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfFunctionArgument::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfFunctionDeclaration::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfVariableDeclaration::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfEventDeclaration::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfPropertyDeclaration::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfBaseConstructorCall::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfConstructorDeclaration::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfDestructorDeclaration::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfClassDeclaration::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfEnumItemIntersection::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfEnumItem::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfEnumDeclaration::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfStructMember::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfStructDeclaration::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfAutoPropertyDeclaration::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfCastResultInterfaceDeclaration::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfStateInput::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfStateDeclaration::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfStateMachineDeclaration::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfBreakStatement::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfContinueStatement::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfReturnStatement::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfDeleteStatement::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfRaiseExceptionStatement::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfIfStatement::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfWhileStatement::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfTryStatement::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfBlockStatement::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfGotoStatement::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfVariableStatement::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfExpressionStatement::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfForEachStatement::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfSwitchCase::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfSwitchStatement::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfCoProviderStatement::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfCoPauseStatement::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfCoOperatorStatement::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfStateSwitchArgument::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfStateSwitchCase::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfStateSwitchStatement::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfStateInvokeStatement::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfThisExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfTopQualifiedExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfReferenceExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfOrderedNameExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfOrderedLambdaExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfMemberExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfChildExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfLiteralExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfFloatingExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfIntegerExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfStringExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfUnaryExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfBinaryExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfLetVariable::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfLetExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfIfExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfRangeExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfSetTestingExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfConstructorArgument::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfConstructorExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfInferExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfTypeCastingExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfTypeTestingExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfTypeOfTypeExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfTypeOfExpressionExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfAttachEventExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfDetachEventExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfObserveExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfCallExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfFunctionExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfNewClassExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfNewInterfaceExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfFormatExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfBindExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfNewCoroutineExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfMixinCastExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfExpectedTypeCastExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfCoOperatorExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfModuleUsingNameFragment::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfModuleUsingWildCardFragment::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfModuleUsingItem::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfModuleUsingPath::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + + vl::Ptr WfModule::Convert(vl::Ptr node, const vl::collections::List& tokens) + { + return WfConvertParsingTreeNode(node, tokens).Cast(); + } + +/*********************************************************************** +Parser Function +***********************************************************************/ + + vl::Ptr WfParseCoProviderStatementAsParsingTreeNode(const vl::WString& input, vl::Ptr table, vl::collections::List>& errors, vl::vint codeIndex) + { + vl::parsing::tabling::ParsingState state(input, table, codeIndex); + state.Reset(L"_CoProvider"); + vl::Ptr parser=vl::parsing::tabling::CreateStrictParser(table); + vl::Ptr node=parser->Parse(state, errors); + return node; + } + + vl::Ptr WfParseCoProviderStatementAsParsingTreeNode(const vl::WString& input, vl::Ptr table, vl::vint codeIndex) + { + vl::collections::List> errors; + return WfParseCoProviderStatementAsParsingTreeNode(input, table, errors, codeIndex); + } + + vl::Ptr WfParseCoProviderStatement(const vl::WString& input, vl::Ptr table, vl::collections::List>& errors, vl::vint codeIndex) + { + vl::parsing::tabling::ParsingState state(input, table, codeIndex); + state.Reset(L"_CoProvider"); + vl::Ptr parser=vl::parsing::tabling::CreateStrictParser(table); + vl::Ptr node=parser->Parse(state, errors); + if(node && errors.Count()==0) + { + return WfConvertParsingTreeNode(node, state.GetTokens()).Cast(); + } + return 0; + } + + vl::Ptr WfParseCoProviderStatement(const vl::WString& input, vl::Ptr table, vl::vint codeIndex) + { + vl::collections::List> errors; + return WfParseCoProviderStatement(input, table, errors, codeIndex); + } + + vl::Ptr WfParseDeclarationAsParsingTreeNode(const vl::WString& input, vl::Ptr table, vl::collections::List>& errors, vl::vint codeIndex) + { + vl::parsing::tabling::ParsingState state(input, table, codeIndex); + state.Reset(L"_Declaration"); + vl::Ptr parser=vl::parsing::tabling::CreateStrictParser(table); + vl::Ptr node=parser->Parse(state, errors); + return node; + } + + vl::Ptr WfParseDeclarationAsParsingTreeNode(const vl::WString& input, vl::Ptr table, vl::vint codeIndex) + { + vl::collections::List> errors; + return WfParseDeclarationAsParsingTreeNode(input, table, errors, codeIndex); + } + + vl::Ptr WfParseDeclaration(const vl::WString& input, vl::Ptr table, vl::collections::List>& errors, vl::vint codeIndex) + { + vl::parsing::tabling::ParsingState state(input, table, codeIndex); + state.Reset(L"_Declaration"); + vl::Ptr parser=vl::parsing::tabling::CreateStrictParser(table); + vl::Ptr node=parser->Parse(state, errors); + if(node && errors.Count()==0) + { + return WfConvertParsingTreeNode(node, state.GetTokens()).Cast(); + } + return 0; + } + + vl::Ptr WfParseDeclaration(const vl::WString& input, vl::Ptr table, vl::vint codeIndex) + { + vl::collections::List> errors; + return WfParseDeclaration(input, table, errors, codeIndex); + } + + vl::Ptr WfParseExpressionAsParsingTreeNode(const vl::WString& input, vl::Ptr table, vl::collections::List>& errors, vl::vint codeIndex) + { + vl::parsing::tabling::ParsingState state(input, table, codeIndex); + state.Reset(L"_Expression"); + vl::Ptr parser=vl::parsing::tabling::CreateStrictParser(table); + vl::Ptr node=parser->Parse(state, errors); + return node; + } + + vl::Ptr WfParseExpressionAsParsingTreeNode(const vl::WString& input, vl::Ptr table, vl::vint codeIndex) + { + vl::collections::List> errors; + return WfParseExpressionAsParsingTreeNode(input, table, errors, codeIndex); + } + + vl::Ptr WfParseExpression(const vl::WString& input, vl::Ptr table, vl::collections::List>& errors, vl::vint codeIndex) + { + vl::parsing::tabling::ParsingState state(input, table, codeIndex); + state.Reset(L"_Expression"); + vl::Ptr parser=vl::parsing::tabling::CreateStrictParser(table); + vl::Ptr node=parser->Parse(state, errors); + if(node && errors.Count()==0) + { + return WfConvertParsingTreeNode(node, state.GetTokens()).Cast(); + } + return 0; + } + + vl::Ptr WfParseExpression(const vl::WString& input, vl::Ptr table, vl::vint codeIndex) + { + vl::collections::List> errors; + return WfParseExpression(input, table, errors, codeIndex); + } + + vl::Ptr WfParseModuleAsParsingTreeNode(const vl::WString& input, vl::Ptr table, vl::collections::List>& errors, vl::vint codeIndex) + { + vl::parsing::tabling::ParsingState state(input, table, codeIndex); + state.Reset(L"_Module"); + vl::Ptr parser=vl::parsing::tabling::CreateStrictParser(table); + vl::Ptr node=parser->Parse(state, errors); + return node; + } + + vl::Ptr WfParseModuleAsParsingTreeNode(const vl::WString& input, vl::Ptr table, vl::vint codeIndex) + { + vl::collections::List> errors; + return WfParseModuleAsParsingTreeNode(input, table, errors, codeIndex); + } + + vl::Ptr WfParseModule(const vl::WString& input, vl::Ptr table, vl::collections::List>& errors, vl::vint codeIndex) + { + vl::parsing::tabling::ParsingState state(input, table, codeIndex); + state.Reset(L"_Module"); + vl::Ptr parser=vl::parsing::tabling::CreateStrictParser(table); + vl::Ptr node=parser->Parse(state, errors); + if(node && errors.Count()==0) + { + return WfConvertParsingTreeNode(node, state.GetTokens()).Cast(); + } + return 0; + } + + vl::Ptr WfParseModule(const vl::WString& input, vl::Ptr table, vl::vint codeIndex) + { + vl::collections::List> errors; + return WfParseModule(input, table, errors, codeIndex); + } + + vl::Ptr WfParseStatementAsParsingTreeNode(const vl::WString& input, vl::Ptr table, vl::collections::List>& errors, vl::vint codeIndex) + { + vl::parsing::tabling::ParsingState state(input, table, codeIndex); + state.Reset(L"_Statement"); + vl::Ptr parser=vl::parsing::tabling::CreateStrictParser(table); + vl::Ptr node=parser->Parse(state, errors); + return node; + } + + vl::Ptr WfParseStatementAsParsingTreeNode(const vl::WString& input, vl::Ptr table, vl::vint codeIndex) + { + vl::collections::List> errors; + return WfParseStatementAsParsingTreeNode(input, table, errors, codeIndex); + } + + vl::Ptr WfParseStatement(const vl::WString& input, vl::Ptr table, vl::collections::List>& errors, vl::vint codeIndex) + { + vl::parsing::tabling::ParsingState state(input, table, codeIndex); + state.Reset(L"_Statement"); + vl::Ptr parser=vl::parsing::tabling::CreateStrictParser(table); + vl::Ptr node=parser->Parse(state, errors); + if(node && errors.Count()==0) + { + return WfConvertParsingTreeNode(node, state.GetTokens()).Cast(); + } + return 0; + } + + vl::Ptr WfParseStatement(const vl::WString& input, vl::Ptr table, vl::vint codeIndex) + { + vl::collections::List> errors; + return WfParseStatement(input, table, errors, codeIndex); + } + + vl::Ptr WfParseTypeAsParsingTreeNode(const vl::WString& input, vl::Ptr table, vl::collections::List>& errors, vl::vint codeIndex) + { + vl::parsing::tabling::ParsingState state(input, table, codeIndex); + state.Reset(L"_Type"); + vl::Ptr parser=vl::parsing::tabling::CreateStrictParser(table); + vl::Ptr node=parser->Parse(state, errors); + return node; + } + + vl::Ptr WfParseTypeAsParsingTreeNode(const vl::WString& input, vl::Ptr table, vl::vint codeIndex) + { + vl::collections::List> errors; + return WfParseTypeAsParsingTreeNode(input, table, errors, codeIndex); + } + + vl::Ptr WfParseType(const vl::WString& input, vl::Ptr table, vl::collections::List>& errors, vl::vint codeIndex) + { + vl::parsing::tabling::ParsingState state(input, table, codeIndex); + state.Reset(L"_Type"); + vl::Ptr parser=vl::parsing::tabling::CreateStrictParser(table); + vl::Ptr node=parser->Parse(state, errors); + if(node && errors.Count()==0) + { + return WfConvertParsingTreeNode(node, state.GetTokens()).Cast(); + } + return 0; + } + + vl::Ptr WfParseType(const vl::WString& input, vl::Ptr table, vl::vint codeIndex) + { + vl::collections::List> errors; + return WfParseType(input, table, errors, codeIndex); + } + +/*********************************************************************** +Table Generation +***********************************************************************/ + + vl::Ptr WfLoadTable() + { + vl::stream::MemoryStream stream; + WfGetParserBuffer(stream); + vl::Ptr table=new vl::parsing::tabling::ParsingTable(stream); + table->Initialize(); + return table; + } + + } +} + + /*********************************************************************** .\EXPRESSION\WFEXPRESSION_COPY.CPP ***********************************************************************/ @@ -4283,7 +7002,12 @@ ExpressionVisitor this->result = newNode; } - void ExpressionVisitor::Visit(WfVirtualExpression* node) + void ExpressionVisitor::Visit(WfVirtualCfeExpression* node) + { + this->result = Dispatch(node); + } + + void ExpressionVisitor::Visit(WfVirtualCseExpression* node) { this->result = Dispatch(node); } @@ -4363,6 +7087,17 @@ StatementVisitor { to->statements.Add(CreateField(listItem)); } + to->endLabel.codeRange = from->endLabel.codeRange; + to->endLabel.tokenIndex = from->endLabel.tokenIndex; + to->endLabel.value = from->endLabel.value; + CopyFields(static_cast(from), static_cast(to)); + } + + void StatementVisitor::CopyFields(WfGotoStatement* from, WfGotoStatement* to) + { + to->label.codeRange = from->label.codeRange; + to->label.tokenIndex = from->label.tokenIndex; + to->label.value = from->label.value; CopyFields(static_cast(from), static_cast(to)); } @@ -4507,6 +7242,13 @@ StatementVisitor this->result = newNode; } + void StatementVisitor::Visit(WfGotoStatement* node) + { + auto newNode = vl::MakePtr(); + CopyFields(node, newNode.Obj()); + this->result = newNode; + } + void StatementVisitor::Visit(WfVariableStatement* node) { auto newNode = vl::MakePtr(); @@ -4521,7 +7263,7 @@ StatementVisitor this->result = newNode; } - void StatementVisitor::Visit(WfVirtualStatement* node) + void StatementVisitor::Visit(WfVirtualCseStatement* node) { this->result = Dispatch(node); } @@ -4531,6 +7273,11 @@ StatementVisitor this->result = Dispatch(node); } + void StatementVisitor::Visit(WfStateMachineStatement* node) + { + this->result = Dispatch(node); + } + /*********************************************************************** DeclarationVisitor ***********************************************************************/ @@ -4869,27 +7616,32 @@ DeclarationVisitor this->result = newNode; } - void DeclarationVisitor::Visit(WfVirtualDeclaration* node) + void DeclarationVisitor::Visit(WfVirtualCfeDeclaration* node) + { + this->result = Dispatch(node); + } + + void DeclarationVisitor::Visit(WfVirtualCseDeclaration* node) { this->result = Dispatch(node); } /*********************************************************************** -VirtualDeclarationVisitor +VirtualCfeDeclarationVisitor ***********************************************************************/ // CopyFields ---------------------------------------- - void VirtualDeclarationVisitor::CopyFields(WfAutoPropertyDeclaration* from, WfAutoPropertyDeclaration* to) + void VirtualCfeDeclarationVisitor::CopyFields(WfAutoPropertyDeclaration* from, WfAutoPropertyDeclaration* to) { to->type = CreateField(from->type); to->configConst = from->configConst; to->configObserve = from->configObserve; to->expression = CreateField(from->expression); - CopyFields(static_cast(from), static_cast(to)); + CopyFields(static_cast(from), static_cast(to)); } - void VirtualDeclarationVisitor::CopyFields(WfVirtualDeclaration* from, WfVirtualDeclaration* to) + void VirtualCfeDeclarationVisitor::CopyFields(WfVirtualCfeDeclaration* from, WfVirtualCfeDeclaration* to) { FOREACH(vl::Ptr, listItem, from->expandedDeclarations) { @@ -4898,7 +7650,7 @@ VirtualDeclarationVisitor CopyFields(static_cast(from), static_cast(to)); } - void VirtualDeclarationVisitor::CopyFields(WfDeclaration* from, WfDeclaration* to) + void VirtualCfeDeclarationVisitor::CopyFields(WfDeclaration* from, WfDeclaration* to) { FOREACH(vl::Ptr, listItem, from->attributes) { @@ -4911,7 +7663,7 @@ VirtualDeclarationVisitor to->codeRange = from->codeRange; } - void VirtualDeclarationVisitor::CopyFields(WfAttribute* from, WfAttribute* to) + void VirtualCfeDeclarationVisitor::CopyFields(WfAttribute* from, WfAttribute* to) { to->category.codeRange = from->category.codeRange; to->category.tokenIndex = from->category.tokenIndex; @@ -4923,22 +7675,22 @@ VirtualDeclarationVisitor to->codeRange = from->codeRange; } - void VirtualDeclarationVisitor::CopyFields(WfClassMember* from, WfClassMember* to) + void VirtualCfeDeclarationVisitor::CopyFields(WfClassMember* from, WfClassMember* to) { to->kind = from->kind; to->codeRange = from->codeRange; } - void VirtualDeclarationVisitor::CopyFields(WfCastResultInterfaceDeclaration* from, WfCastResultInterfaceDeclaration* to) + void VirtualCfeDeclarationVisitor::CopyFields(WfCastResultInterfaceDeclaration* from, WfCastResultInterfaceDeclaration* to) { to->baseType = CreateField(from->baseType); to->elementType = CreateField(from->elementType); - CopyFields(static_cast(from), static_cast(to)); + CopyFields(static_cast(from), static_cast(to)); } // CreateField --------------------------------------- - vl::Ptr VirtualDeclarationVisitor::CreateField(vl::Ptr from) + vl::Ptr VirtualCfeDeclarationVisitor::CreateField(vl::Ptr from) { if (!from) return nullptr; auto to = vl::MakePtr(); @@ -4946,7 +7698,7 @@ VirtualDeclarationVisitor return to; } - vl::Ptr VirtualDeclarationVisitor::CreateField(vl::Ptr from) + vl::Ptr VirtualCfeDeclarationVisitor::CreateField(vl::Ptr from) { if (!from) return nullptr; auto to = vl::MakePtr(); @@ -4956,14 +7708,14 @@ VirtualDeclarationVisitor // Visitor Members ----------------------------------- - void VirtualDeclarationVisitor::Visit(WfAutoPropertyDeclaration* node) + void VirtualCfeDeclarationVisitor::Visit(WfAutoPropertyDeclaration* node) { auto newNode = vl::MakePtr(); CopyFields(node, newNode.Obj()); this->result = newNode; } - void VirtualDeclarationVisitor::Visit(WfCastResultInterfaceDeclaration* node) + void VirtualCfeDeclarationVisitor::Visit(WfCastResultInterfaceDeclaration* node) { auto newNode = vl::MakePtr(); CopyFields(node, newNode.Obj()); @@ -4971,12 +7723,160 @@ VirtualDeclarationVisitor } /*********************************************************************** -VirtualStatementVisitor +VirtualCseDeclarationVisitor ***********************************************************************/ // CopyFields ---------------------------------------- - void VirtualStatementVisitor::CopyFields(WfForEachStatement* from, WfForEachStatement* to) + void VirtualCseDeclarationVisitor::CopyFields(WfStateMachineDeclaration* from, WfStateMachineDeclaration* to) + { + FOREACH(vl::Ptr, listItem, from->inputs) + { + to->inputs.Add(CreateField(listItem)); + } + FOREACH(vl::Ptr, listItem, from->states) + { + to->states.Add(CreateField(listItem)); + } + CopyFields(static_cast(from), static_cast(to)); + } + + void VirtualCseDeclarationVisitor::CopyFields(WfVirtualCseDeclaration* from, WfVirtualCseDeclaration* to) + { + FOREACH(vl::Ptr, listItem, from->expandedDeclarations) + { + to->expandedDeclarations.Add(CreateField(listItem)); + } + CopyFields(static_cast(from), static_cast(to)); + } + + void VirtualCseDeclarationVisitor::CopyFields(WfDeclaration* from, WfDeclaration* to) + { + FOREACH(vl::Ptr, listItem, from->attributes) + { + to->attributes.Add(CreateField(listItem)); + } + to->name.codeRange = from->name.codeRange; + to->name.tokenIndex = from->name.tokenIndex; + to->name.value = from->name.value; + to->classMember = CreateField(from->classMember); + to->codeRange = from->codeRange; + } + + void VirtualCseDeclarationVisitor::CopyFields(WfAttribute* from, WfAttribute* to) + { + to->category.codeRange = from->category.codeRange; + to->category.tokenIndex = from->category.tokenIndex; + to->category.value = from->category.value; + to->name.codeRange = from->name.codeRange; + to->name.tokenIndex = from->name.tokenIndex; + to->name.value = from->name.value; + to->value = CreateField(from->value); + to->codeRange = from->codeRange; + } + + void VirtualCseDeclarationVisitor::CopyFields(WfClassMember* from, WfClassMember* to) + { + to->kind = from->kind; + to->codeRange = from->codeRange; + } + + void VirtualCseDeclarationVisitor::CopyFields(WfStateInput* from, WfStateInput* to) + { + to->name.codeRange = from->name.codeRange; + to->name.tokenIndex = from->name.tokenIndex; + to->name.value = from->name.value; + FOREACH(vl::Ptr, listItem, from->arguments) + { + to->arguments.Add(CreateField(listItem)); + } + to->codeRange = from->codeRange; + } + + void VirtualCseDeclarationVisitor::CopyFields(WfFunctionArgument* from, WfFunctionArgument* to) + { + FOREACH(vl::Ptr, listItem, from->attributes) + { + to->attributes.Add(CreateField(listItem)); + } + to->name.codeRange = from->name.codeRange; + to->name.tokenIndex = from->name.tokenIndex; + to->name.value = from->name.value; + to->type = CreateField(from->type); + to->codeRange = from->codeRange; + } + + void VirtualCseDeclarationVisitor::CopyFields(WfStateDeclaration* from, WfStateDeclaration* to) + { + to->name.codeRange = from->name.codeRange; + to->name.tokenIndex = from->name.tokenIndex; + to->name.value = from->name.value; + FOREACH(vl::Ptr, listItem, from->arguments) + { + to->arguments.Add(CreateField(listItem)); + } + to->statement = CreateField(from->statement); + to->codeRange = from->codeRange; + } + + // CreateField --------------------------------------- + + vl::Ptr VirtualCseDeclarationVisitor::CreateField(vl::Ptr from) + { + if (!from) return nullptr; + auto to = vl::MakePtr(); + CopyFields(from.Obj(), to.Obj()); + return to; + } + + vl::Ptr VirtualCseDeclarationVisitor::CreateField(vl::Ptr from) + { + if (!from) return nullptr; + auto to = vl::MakePtr(); + CopyFields(from.Obj(), to.Obj()); + return to; + } + + vl::Ptr VirtualCseDeclarationVisitor::CreateField(vl::Ptr from) + { + if (!from) return nullptr; + auto to = vl::MakePtr(); + CopyFields(from.Obj(), to.Obj()); + return to; + } + + vl::Ptr VirtualCseDeclarationVisitor::CreateField(vl::Ptr from) + { + if (!from) return nullptr; + auto to = vl::MakePtr(); + CopyFields(from.Obj(), to.Obj()); + return to; + } + + vl::Ptr VirtualCseDeclarationVisitor::CreateField(vl::Ptr from) + { + if (!from) return nullptr; + auto to = vl::MakePtr(); + CopyFields(from.Obj(), to.Obj()); + return to; + } + + // Visitor Members ----------------------------------- + + void VirtualCseDeclarationVisitor::Visit(WfStateMachineDeclaration* node) + { + auto newNode = vl::MakePtr(); + CopyFields(node, newNode.Obj()); + this->result = newNode; + } + +/*********************************************************************** +VirtualCseStatementVisitor +***********************************************************************/ + + // CopyFields ---------------------------------------- + + void VirtualCseStatementVisitor::CopyFields(WfForEachStatement* from, WfForEachStatement* to) { to->name.codeRange = from->name.codeRange; to->name.tokenIndex = from->name.tokenIndex; @@ -4984,21 +7884,21 @@ VirtualStatementVisitor to->direction = from->direction; to->collection = CreateField(from->collection); to->statement = CreateField(from->statement); - CopyFields(static_cast(from), static_cast(to)); + CopyFields(static_cast(from), static_cast(to)); } - void VirtualStatementVisitor::CopyFields(WfVirtualStatement* from, WfVirtualStatement* to) + void VirtualCseStatementVisitor::CopyFields(WfVirtualCseStatement* from, WfVirtualCseStatement* to) { to->expandedStatement = CreateField(from->expandedStatement); CopyFields(static_cast(from), static_cast(to)); } - void VirtualStatementVisitor::CopyFields(WfStatement* from, WfStatement* to) + void VirtualCseStatementVisitor::CopyFields(WfStatement* from, WfStatement* to) { to->codeRange = from->codeRange; } - void VirtualStatementVisitor::CopyFields(WfSwitchStatement* from, WfSwitchStatement* to) + void VirtualCseStatementVisitor::CopyFields(WfSwitchStatement* from, WfSwitchStatement* to) { to->expression = CreateField(from->expression); FOREACH(vl::Ptr, listItem, from->caseBranches) @@ -5006,28 +7906,28 @@ VirtualStatementVisitor to->caseBranches.Add(CreateField(listItem)); } to->defaultBranch = CreateField(from->defaultBranch); - CopyFields(static_cast(from), static_cast(to)); + CopyFields(static_cast(from), static_cast(to)); } - void VirtualStatementVisitor::CopyFields(WfSwitchCase* from, WfSwitchCase* to) + void VirtualCseStatementVisitor::CopyFields(WfSwitchCase* from, WfSwitchCase* to) { to->expression = CreateField(from->expression); to->statement = CreateField(from->statement); to->codeRange = from->codeRange; } - void VirtualStatementVisitor::CopyFields(WfCoProviderStatement* from, WfCoProviderStatement* to) + void VirtualCseStatementVisitor::CopyFields(WfCoProviderStatement* from, WfCoProviderStatement* to) { to->name.codeRange = from->name.codeRange; to->name.tokenIndex = from->name.tokenIndex; to->name.value = from->name.value; to->statement = CreateField(from->statement); - CopyFields(static_cast(from), static_cast(to)); + CopyFields(static_cast(from), static_cast(to)); } // CreateField --------------------------------------- - vl::Ptr VirtualStatementVisitor::CreateField(vl::Ptr from) + vl::Ptr VirtualCseStatementVisitor::CreateField(vl::Ptr from) { if (!from) return nullptr; auto to = vl::MakePtr(); @@ -5037,21 +7937,21 @@ VirtualStatementVisitor // Visitor Members ----------------------------------- - void VirtualStatementVisitor::Visit(WfForEachStatement* node) + void VirtualCseStatementVisitor::Visit(WfForEachStatement* node) { auto newNode = vl::MakePtr(); CopyFields(node, newNode.Obj()); this->result = newNode; } - void VirtualStatementVisitor::Visit(WfSwitchStatement* node) + void VirtualCseStatementVisitor::Visit(WfSwitchStatement* node) { auto newNode = vl::MakePtr(); CopyFields(node, newNode.Obj()); this->result = newNode; } - void VirtualStatementVisitor::Visit(WfCoProviderStatement* node) + void VirtualCseStatementVisitor::Visit(WfCoProviderStatement* node) { auto newNode = vl::MakePtr(); CopyFields(node, newNode.Obj()); @@ -5112,96 +8012,224 @@ CoroutineStatementVisitor } /*********************************************************************** -VirtualExpressionVisitor +StateMachineStatementVisitor ***********************************************************************/ // CopyFields ---------------------------------------- - void VirtualExpressionVisitor::CopyFields(WfBindExpression* from, WfBindExpression* to) + void StateMachineStatementVisitor::CopyFields(WfStateSwitchStatement* from, WfStateSwitchStatement* to) { - to->expression = CreateField(from->expression); - CopyFields(static_cast(from), static_cast(to)); + to->type = from->type; + FOREACH(vl::Ptr, listItem, from->caseBranches) + { + to->caseBranches.Add(CreateField(listItem)); + } + CopyFields(static_cast(from), static_cast(to)); } - void VirtualExpressionVisitor::CopyFields(WfVirtualExpression* from, WfVirtualExpression* to) + void StateMachineStatementVisitor::CopyFields(WfStateMachineStatement* from, WfStateMachineStatement* to) + { + CopyFields(static_cast(from), static_cast(to)); + } + + void StateMachineStatementVisitor::CopyFields(WfStatement* from, WfStatement* to) + { + to->codeRange = from->codeRange; + } + + void StateMachineStatementVisitor::CopyFields(WfStateSwitchCase* from, WfStateSwitchCase* to) + { + to->name.codeRange = from->name.codeRange; + to->name.tokenIndex = from->name.tokenIndex; + to->name.value = from->name.value; + FOREACH(vl::Ptr, listItem, from->arguments) + { + to->arguments.Add(CreateField(listItem)); + } + to->statement = CreateField(from->statement); + to->codeRange = from->codeRange; + } + + void StateMachineStatementVisitor::CopyFields(WfStateSwitchArgument* from, WfStateSwitchArgument* to) + { + to->name.codeRange = from->name.codeRange; + to->name.tokenIndex = from->name.tokenIndex; + to->name.value = from->name.value; + to->codeRange = from->codeRange; + } + + void StateMachineStatementVisitor::CopyFields(WfStateInvokeStatement* from, WfStateInvokeStatement* to) + { + to->type = from->type; + to->name.codeRange = from->name.codeRange; + to->name.tokenIndex = from->name.tokenIndex; + to->name.value = from->name.value; + FOREACH(vl::Ptr, listItem, from->arguments) + { + to->arguments.Add(CreateField(listItem)); + } + CopyFields(static_cast(from), static_cast(to)); + } + + // CreateField --------------------------------------- + + vl::Ptr StateMachineStatementVisitor::CreateField(vl::Ptr from) + { + if (!from) return nullptr; + auto to = vl::MakePtr(); + CopyFields(from.Obj(), to.Obj()); + return to; + } + + vl::Ptr StateMachineStatementVisitor::CreateField(vl::Ptr from) + { + if (!from) return nullptr; + auto to = vl::MakePtr(); + CopyFields(from.Obj(), to.Obj()); + return to; + } + + // Visitor Members ----------------------------------- + + void StateMachineStatementVisitor::Visit(WfStateSwitchStatement* node) + { + auto newNode = vl::MakePtr(); + CopyFields(node, newNode.Obj()); + this->result = newNode; + } + + void StateMachineStatementVisitor::Visit(WfStateInvokeStatement* node) + { + auto newNode = vl::MakePtr(); + CopyFields(node, newNode.Obj()); + this->result = newNode; + } + +/*********************************************************************** +VirtualCfeExpressionVisitor +***********************************************************************/ + + // CopyFields ---------------------------------------- + + void VirtualCfeExpressionVisitor::CopyFields(WfFormatExpression* from, WfFormatExpression* to) + { + to->value.codeRange = from->value.codeRange; + to->value.tokenIndex = from->value.tokenIndex; + to->value.value = from->value.value; + CopyFields(static_cast(from), static_cast(to)); + } + + void VirtualCfeExpressionVisitor::CopyFields(WfVirtualCfeExpression* from, WfVirtualCfeExpression* to) { to->expandedExpression = CreateField(from->expandedExpression); CopyFields(static_cast(from), static_cast(to)); } - void VirtualExpressionVisitor::CopyFields(WfExpression* from, WfExpression* to) + void VirtualCfeExpressionVisitor::CopyFields(WfExpression* from, WfExpression* to) { to->codeRange = from->codeRange; } - void VirtualExpressionVisitor::CopyFields(WfFormatExpression* from, WfFormatExpression* to) - { - to->value.codeRange = from->value.codeRange; - to->value.tokenIndex = from->value.tokenIndex; - to->value.value = from->value.value; - CopyFields(static_cast(from), static_cast(to)); - } - - void VirtualExpressionVisitor::CopyFields(WfNewCoroutineExpression* from, WfNewCoroutineExpression* to) - { - to->name.codeRange = from->name.codeRange; - to->name.tokenIndex = from->name.tokenIndex; - to->name.value = from->name.value; - to->statement = CreateField(from->statement); - CopyFields(static_cast(from), static_cast(to)); - } - - void VirtualExpressionVisitor::CopyFields(WfMixinCastExpression* from, WfMixinCastExpression* to) - { - to->type = CreateField(from->type); - to->expression = CreateField(from->expression); - CopyFields(static_cast(from), static_cast(to)); - } - - void VirtualExpressionVisitor::CopyFields(WfExpectedTypeCastExpression* from, WfExpectedTypeCastExpression* to) - { - to->strategy = from->strategy; - to->expression = CreateField(from->expression); - CopyFields(static_cast(from), static_cast(to)); - } - // Visitor Members ----------------------------------- - void VirtualExpressionVisitor::Visit(WfBindExpression* node) - { - auto newNode = vl::MakePtr(); - CopyFields(node, newNode.Obj()); - this->result = newNode; - } - - void VirtualExpressionVisitor::Visit(WfFormatExpression* node) + void VirtualCfeExpressionVisitor::Visit(WfFormatExpression* node) { auto newNode = vl::MakePtr(); CopyFields(node, newNode.Obj()); this->result = newNode; } - void VirtualExpressionVisitor::Visit(WfNewCoroutineExpression* node) +/*********************************************************************** +VirtualCseExpressionVisitor +***********************************************************************/ + + // CopyFields ---------------------------------------- + + void VirtualCseExpressionVisitor::CopyFields(WfBindExpression* from, WfBindExpression* to) + { + to->expression = CreateField(from->expression); + CopyFields(static_cast(from), static_cast(to)); + } + + void VirtualCseExpressionVisitor::CopyFields(WfVirtualCseExpression* from, WfVirtualCseExpression* to) + { + to->expandedExpression = CreateField(from->expandedExpression); + CopyFields(static_cast(from), static_cast(to)); + } + + void VirtualCseExpressionVisitor::CopyFields(WfExpression* from, WfExpression* to) + { + to->codeRange = from->codeRange; + } + + void VirtualCseExpressionVisitor::CopyFields(WfNewCoroutineExpression* from, WfNewCoroutineExpression* to) + { + to->name.codeRange = from->name.codeRange; + to->name.tokenIndex = from->name.tokenIndex; + to->name.value = from->name.value; + to->statement = CreateField(from->statement); + CopyFields(static_cast(from), static_cast(to)); + } + + void VirtualCseExpressionVisitor::CopyFields(WfMixinCastExpression* from, WfMixinCastExpression* to) + { + to->type = CreateField(from->type); + to->expression = CreateField(from->expression); + CopyFields(static_cast(from), static_cast(to)); + } + + void VirtualCseExpressionVisitor::CopyFields(WfExpectedTypeCastExpression* from, WfExpectedTypeCastExpression* to) + { + to->strategy = from->strategy; + to->expression = CreateField(from->expression); + CopyFields(static_cast(from), static_cast(to)); + } + + void VirtualCseExpressionVisitor::CopyFields(WfCoOperatorExpression* from, WfCoOperatorExpression* to) + { + to->name.codeRange = from->name.codeRange; + to->name.tokenIndex = from->name.tokenIndex; + to->name.value = from->name.value; + CopyFields(static_cast(from), static_cast(to)); + } + + // Visitor Members ----------------------------------- + + void VirtualCseExpressionVisitor::Visit(WfBindExpression* node) + { + auto newNode = vl::MakePtr(); + CopyFields(node, newNode.Obj()); + this->result = newNode; + } + + void VirtualCseExpressionVisitor::Visit(WfNewCoroutineExpression* node) { auto newNode = vl::MakePtr(); CopyFields(node, newNode.Obj()); this->result = newNode; } - void VirtualExpressionVisitor::Visit(WfMixinCastExpression* node) + void VirtualCseExpressionVisitor::Visit(WfMixinCastExpression* node) { auto newNode = vl::MakePtr(); CopyFields(node, newNode.Obj()); this->result = newNode; } - void VirtualExpressionVisitor::Visit(WfExpectedTypeCastExpression* node) + void VirtualCseExpressionVisitor::Visit(WfExpectedTypeCastExpression* node) { auto newNode = vl::MakePtr(); CopyFields(node, newNode.Obj()); this->result = newNode; } + void VirtualCseExpressionVisitor::Visit(WfCoOperatorExpression* node) + { + auto newNode = vl::MakePtr(); + CopyFields(node, newNode.Obj()); + this->result = newNode; + } + /*********************************************************************** ModuleUsingFragmentVisitor ***********************************************************************/ @@ -5347,15 +8375,21 @@ ModuleVisitor // Dispatch (virtual) -------------------------------- - vl::Ptr ModuleVisitor::Dispatch(WfVirtualExpression* node) + vl::Ptr ModuleVisitor::Dispatch(WfVirtualCfeExpression* node) { - node->Accept(static_cast(this)); + node->Accept(static_cast(this)); return this->result; } - vl::Ptr ModuleVisitor::Dispatch(WfVirtualStatement* node) + vl::Ptr ModuleVisitor::Dispatch(WfVirtualCseExpression* node) { - node->Accept(static_cast(this)); + node->Accept(static_cast(this)); + return this->result; + } + + vl::Ptr ModuleVisitor::Dispatch(WfVirtualCseStatement* node) + { + node->Accept(static_cast(this)); return this->result; } @@ -5365,9 +8399,21 @@ ModuleVisitor return this->result; } - vl::Ptr ModuleVisitor::Dispatch(WfVirtualDeclaration* node) + vl::Ptr ModuleVisitor::Dispatch(WfStateMachineStatement* node) { - node->Accept(static_cast(this)); + node->Accept(static_cast(this)); + return this->result; + } + + vl::Ptr ModuleVisitor::Dispatch(WfVirtualCfeDeclaration* node) + { + node->Accept(static_cast(this)); + return this->result; + } + + vl::Ptr ModuleVisitor::Dispatch(WfVirtualCseDeclaration* node) + { + node->Accept(static_cast(this)); return this->result; } } @@ -5375,4186 +8421,6 @@ ModuleVisitor } -/*********************************************************************** -.\EXPRESSION\WFEXPRESSION_EMPTY.CPP -***********************************************************************/ -/*********************************************************************** -Vczh Library++ 3.0 -Developer: Zihan Chen(vczh) -Parser::WfExpression.parser.txt - -This file is generated by: Vczh Parser Generator -***********************************************************************/ - - -namespace vl -{ - namespace workflow - { - namespace empty_visitor - { - -/*********************************************************************** -TypeVisitor -***********************************************************************/ - - // Visitor Members ----------------------------------- - - void TypeVisitor::Visit(WfPredefinedType* node) - { - } - - void TypeVisitor::Visit(WfTopQualifiedType* node) - { - } - - void TypeVisitor::Visit(WfReferenceType* node) - { - } - - void TypeVisitor::Visit(WfRawPointerType* node) - { - } - - void TypeVisitor::Visit(WfSharedPointerType* node) - { - } - - void TypeVisitor::Visit(WfNullableType* node) - { - } - - void TypeVisitor::Visit(WfEnumerableType* node) - { - } - - void TypeVisitor::Visit(WfMapType* node) - { - } - - void TypeVisitor::Visit(WfObservableListType* node) - { - } - - void TypeVisitor::Visit(WfFunctionType* node) - { - } - - void TypeVisitor::Visit(WfChildType* node) - { - } - -/*********************************************************************** -ExpressionVisitor -***********************************************************************/ - - // Visitor Members ----------------------------------- - - void ExpressionVisitor::Visit(WfThisExpression* node) - { - } - - void ExpressionVisitor::Visit(WfTopQualifiedExpression* node) - { - } - - void ExpressionVisitor::Visit(WfReferenceExpression* node) - { - } - - void ExpressionVisitor::Visit(WfOrderedNameExpression* node) - { - } - - void ExpressionVisitor::Visit(WfOrderedLambdaExpression* node) - { - } - - void ExpressionVisitor::Visit(WfMemberExpression* node) - { - } - - void ExpressionVisitor::Visit(WfChildExpression* node) - { - } - - void ExpressionVisitor::Visit(WfLiteralExpression* node) - { - } - - void ExpressionVisitor::Visit(WfFloatingExpression* node) - { - } - - void ExpressionVisitor::Visit(WfIntegerExpression* node) - { - } - - void ExpressionVisitor::Visit(WfStringExpression* node) - { - } - - void ExpressionVisitor::Visit(WfUnaryExpression* node) - { - } - - void ExpressionVisitor::Visit(WfBinaryExpression* node) - { - } - - void ExpressionVisitor::Visit(WfLetExpression* node) - { - } - - void ExpressionVisitor::Visit(WfIfExpression* node) - { - } - - void ExpressionVisitor::Visit(WfRangeExpression* node) - { - } - - void ExpressionVisitor::Visit(WfSetTestingExpression* node) - { - } - - void ExpressionVisitor::Visit(WfConstructorExpression* node) - { - } - - void ExpressionVisitor::Visit(WfInferExpression* node) - { - } - - void ExpressionVisitor::Visit(WfTypeCastingExpression* node) - { - } - - void ExpressionVisitor::Visit(WfTypeTestingExpression* node) - { - } - - void ExpressionVisitor::Visit(WfTypeOfTypeExpression* node) - { - } - - void ExpressionVisitor::Visit(WfTypeOfExpressionExpression* node) - { - } - - void ExpressionVisitor::Visit(WfAttachEventExpression* node) - { - } - - void ExpressionVisitor::Visit(WfDetachEventExpression* node) - { - } - - void ExpressionVisitor::Visit(WfObserveExpression* node) - { - } - - void ExpressionVisitor::Visit(WfCallExpression* node) - { - } - - void ExpressionVisitor::Visit(WfFunctionExpression* node) - { - } - - void ExpressionVisitor::Visit(WfNewClassExpression* node) - { - } - - void ExpressionVisitor::Visit(WfNewInterfaceExpression* node) - { - } - - void ExpressionVisitor::Visit(WfVirtualExpression* node) - { - Dispatch(node); - } - -/*********************************************************************** -StatementVisitor -***********************************************************************/ - - // Visitor Members ----------------------------------- - - void StatementVisitor::Visit(WfBreakStatement* node) - { - } - - void StatementVisitor::Visit(WfContinueStatement* node) - { - } - - void StatementVisitor::Visit(WfReturnStatement* node) - { - } - - void StatementVisitor::Visit(WfDeleteStatement* node) - { - } - - void StatementVisitor::Visit(WfRaiseExceptionStatement* node) - { - } - - void StatementVisitor::Visit(WfIfStatement* node) - { - } - - void StatementVisitor::Visit(WfWhileStatement* node) - { - } - - void StatementVisitor::Visit(WfTryStatement* node) - { - } - - void StatementVisitor::Visit(WfBlockStatement* node) - { - } - - void StatementVisitor::Visit(WfVariableStatement* node) - { - } - - void StatementVisitor::Visit(WfExpressionStatement* node) - { - } - - void StatementVisitor::Visit(WfVirtualStatement* node) - { - Dispatch(node); - } - - void StatementVisitor::Visit(WfCoroutineStatement* node) - { - Dispatch(node); - } - -/*********************************************************************** -DeclarationVisitor -***********************************************************************/ - - // Visitor Members ----------------------------------- - - void DeclarationVisitor::Visit(WfNamespaceDeclaration* node) - { - } - - void DeclarationVisitor::Visit(WfFunctionDeclaration* node) - { - } - - void DeclarationVisitor::Visit(WfVariableDeclaration* node) - { - } - - void DeclarationVisitor::Visit(WfEventDeclaration* node) - { - } - - void DeclarationVisitor::Visit(WfPropertyDeclaration* node) - { - } - - void DeclarationVisitor::Visit(WfConstructorDeclaration* node) - { - } - - void DeclarationVisitor::Visit(WfDestructorDeclaration* node) - { - } - - void DeclarationVisitor::Visit(WfClassDeclaration* node) - { - } - - void DeclarationVisitor::Visit(WfEnumDeclaration* node) - { - } - - void DeclarationVisitor::Visit(WfStructDeclaration* node) - { - } - - void DeclarationVisitor::Visit(WfVirtualDeclaration* node) - { - Dispatch(node); - } - -/*********************************************************************** -VirtualDeclarationVisitor -***********************************************************************/ - - // Visitor Members ----------------------------------- - - void VirtualDeclarationVisitor::Visit(WfAutoPropertyDeclaration* node) - { - } - - void VirtualDeclarationVisitor::Visit(WfCastResultInterfaceDeclaration* node) - { - } - -/*********************************************************************** -VirtualStatementVisitor -***********************************************************************/ - - // Visitor Members ----------------------------------- - - void VirtualStatementVisitor::Visit(WfForEachStatement* node) - { - } - - void VirtualStatementVisitor::Visit(WfSwitchStatement* node) - { - } - - void VirtualStatementVisitor::Visit(WfCoProviderStatement* node) - { - } - -/*********************************************************************** -CoroutineStatementVisitor -***********************************************************************/ - - // Visitor Members ----------------------------------- - - void CoroutineStatementVisitor::Visit(WfCoPauseStatement* node) - { - } - - void CoroutineStatementVisitor::Visit(WfCoOperatorStatement* node) - { - } - -/*********************************************************************** -VirtualExpressionVisitor -***********************************************************************/ - - // Visitor Members ----------------------------------- - - void VirtualExpressionVisitor::Visit(WfBindExpression* node) - { - } - - void VirtualExpressionVisitor::Visit(WfFormatExpression* node) - { - } - - void VirtualExpressionVisitor::Visit(WfNewCoroutineExpression* node) - { - } - - void VirtualExpressionVisitor::Visit(WfMixinCastExpression* node) - { - } - - void VirtualExpressionVisitor::Visit(WfExpectedTypeCastExpression* node) - { - } - -/*********************************************************************** -ModuleUsingFragmentVisitor -***********************************************************************/ - - // Visitor Members ----------------------------------- - - void ModuleUsingFragmentVisitor::Visit(WfModuleUsingNameFragment* node) - { - } - - void ModuleUsingFragmentVisitor::Visit(WfModuleUsingWildCardFragment* node) - { - } - } - } -} - - -/*********************************************************************** -.\EXPRESSION\WFEXPRESSION_PARSER.CPP -***********************************************************************/ -/*********************************************************************** -Vczh Library++ 3.0 -Developer: Zihan Chen(vczh) -Parser::WfExpression.parser.txt - -This file is generated by: Vczh Parser Generator -***********************************************************************/ - - -namespace vl -{ - namespace workflow - { -/*********************************************************************** -ParserText -***********************************************************************/ - -const wchar_t parserTextBuffer[] = -L"\r\n" L"" -L"\r\n" L"//////////////////////////////////////////////////////////////////" -L"\r\n" L"// AST (Root Types)" -L"\r\n" L"//////////////////////////////////////////////////////////////////" -L"\r\n" L"" -L"\r\n" L"enum ClassMemberKind" -L"\r\n" L"{" -L"\r\n" L"\tStatic," -L"\r\n" L"\tOverride," -L"\r\n" L"\tNormal," -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class ClassMember" -L"\r\n" L"{" -L"\r\n" L"\tClassMemberKind\t\t\tkind;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class Type" -L"\r\n" L"{" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class Expression" -L"\r\n" L"{" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class Statement" -L"\r\n" L"{" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class Attribute" -L"\r\n" L"{" -L"\r\n" L"\ttoken\t\t\t\t\tcategory;" -L"\r\n" L"\ttoken\t\t\t\t\tname;" -L"\r\n" L"\tExpression\t\t\t\tvalue;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class Declaration" -L"\r\n" L"{" -L"\r\n" L"\tAttribute[]\t\t\t\tattributes;" -L"\r\n" L"\ttoken\t\t\t\t\tname;" -L"\r\n" L"\tClassMember\t\t\t\tclassMember;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"//////////////////////////////////////////////////////////////////" -L"\r\n" L"// AST (Types)" -L"\r\n" L"//////////////////////////////////////////////////////////////////" -L"\r\n" L"" -L"\r\n" L"enum PredefinedTypeName" -L"\r\n" L"{" -L"\r\n" L"\tVoid," -L"\r\n" L"\tObject," -L"\r\n" L"\tInterface," -L"\r\n" L"\tInt," -L"\r\n" L"\tUInt," -L"\r\n" L"\tFloat," -L"\r\n" L"\tDouble," -L"\r\n" L"\tString," -L"\r\n" L"\tChar," -L"\r\n" L"\tBool," -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class PredefinedType : Type" -L"\r\n" L"{" -L"\r\n" L"\tPredefinedTypeName\t\tname;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class TopQualifiedType : Type" -L"\r\n" L"{" -L"\r\n" L"\ttoken\t\t\t\t\tname;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class ReferenceType : Type" -L"\r\n" L"{" -L"\r\n" L"\ttoken\t\t\t\t\tname;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class RawPointerType : Type" -L"\r\n" L"{" -L"\r\n" L"\tType\t\t\t\t\telement;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class SharedPointerType : Type" -L"\r\n" L"{" -L"\r\n" L"\tType\t\t\t\t\telement;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class NullableType : Type" -L"\r\n" L"{" -L"\r\n" L"\tType\t\t\t\t\telement;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class EnumerableType : Type" -L"\r\n" L"{" -L"\r\n" L"\tType\t\t\t\t\telement;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"enum MapWritability" -L"\r\n" L"{" -L"\r\n" L"\tReadonly," -L"\r\n" L"\tWritable," -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class MapType : Type" -L"\r\n" L"{" -L"\r\n" L"\tMapWritability\t\t\twritability;" -L"\r\n" L"\tType\t\t\t\t\tkey;" -L"\r\n" L"\tType\t\t\t\t\tvalue;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class ObservableListType : Type" -L"\r\n" L"{" -L"\r\n" L"\tType\t\t\t\t\telement;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class FunctionType : Type" -L"\r\n" L"{" -L"\r\n" L"\tType\t\t\t\t\tresult;" -L"\r\n" L"\tType[]\t\t\t\t\targuments;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class ChildType : Type" -L"\r\n" L"{" -L"\r\n" L"\tType\t\t\t\t\tparent;" -L"\r\n" L"\ttoken\t\t\t\t\tname;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"//////////////////////////////////////////////////////////////////" -L"\r\n" L"// AST (Declarations)" -L"\r\n" L"//////////////////////////////////////////////////////////////////" -L"\r\n" L"" -L"\r\n" L"class NamespaceDeclaration : Declaration" -L"\r\n" L"{" -L"\r\n" L"\tDeclaration[]\t\t\tdeclarations;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class FunctionArgument" -L"\r\n" L"{" -L"\r\n" L"\tAttribute[]\t\t\t\tattributes;" -L"\r\n" L"\ttoken\t\t\t\t\tname;" -L"\r\n" L"\tType\t\t\t\t\ttype;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"enum FunctionAnonymity" -L"\r\n" L"{" -L"\r\n" L"\tNamed," -L"\r\n" L"\tAnonymous," -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class FunctionDeclaration : Declaration" -L"\r\n" L"{" -L"\r\n" L"\tFunctionAnonymity\t\tanonymity;" -L"\r\n" L"\tFunctionArgument[]\t\targuments;" -L"\r\n" L"\tType\t\t\t\t\treturnType;" -L"\r\n" L"\tStatement\t\t\t\tstatement;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class VariableDeclaration : Declaration" -L"\r\n" L"{" -L"\r\n" L"\tType\t\t\t\t\ttype;" -L"\r\n" L"\tExpression\t\t\t\texpression;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class EventDeclaration : Declaration" -L"\r\n" L"{" -L"\r\n" L"\tType[]\t\t\t\t\targuments;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class PropertyDeclaration : Declaration" -L"\r\n" L"{" -L"\r\n" L"\tType\t\t\t\t\ttype;" -L"\r\n" L"\ttoken\t\t\t\t\tgetter;" -L"\r\n" L"\ttoken\t\t\t\t\tsetter;" -L"\r\n" L"\ttoken\t\t\t\t\tvalueChangedEvent;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"enum ClassKind" -L"\r\n" L"{" -L"\r\n" L"\tClass," -L"\r\n" L"\tInterface," -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"enum ConstructorType" -L"\r\n" L"{" -L"\r\n" L"\tUndefined," -L"\r\n" L"\tSharedPtr," -L"\r\n" L"\tRawPtr," -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class BaseConstructorCall" -L"\r\n" L"{" -L"\r\n" L"\tType\t\t\t\t\ttype;" -L"\r\n" L"\tExpression[]\t\t\targuments;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class ConstructorDeclaration : Declaration" -L"\r\n" L"{" -L"\r\n" L"\tConstructorType\t\t\tconstructorType;" -L"\r\n" L"\tBaseConstructorCall[]\tbaseConstructorCalls;" -L"\r\n" L"\tFunctionArgument[]\t\targuments;" -L"\r\n" L"\tStatement\t\t\t\tstatement;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class DestructorDeclaration : Declaration" -L"\r\n" L"{" -L"\r\n" L"\tStatement\t\t\t\tstatement;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class ClassDeclaration : Declaration" -L"\r\n" L"{" -L"\r\n" L"\tClassKind\t\t\t\tkind;" -L"\r\n" L"\tConstructorType\t\t\tconstructorType;" -L"\r\n" L"\tType[]\t\t\t\t\tbaseTypes;" -L"\r\n" L"\tDeclaration[]\t\t\tdeclarations (SetDefaultClassMember);" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"enum EnumKind" -L"\r\n" L"{" -L"\r\n" L"\tNormal," -L"\r\n" L"\tFlag," -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"enum EnumItemKind" -L"\r\n" L"{" -L"\r\n" L"\tConstant," -L"\r\n" L"\tIntersection," -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class EnumItemIntersection" -L"\r\n" L"{" -L"\r\n" L"\ttoken\t\t\t\t\tname;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class EnumItem" -L"\r\n" L"{" -L"\r\n" L"\tAttribute[]\t\t\t\tattributes;" -L"\r\n" L"\ttoken\t\t\t\t\tname;" -L"\r\n" L"\tEnumItemKind\t\t\tkind;" -L"\r\n" L"\ttoken\t\t\t\t\tnumber;" -L"\r\n" L"\tEnumItemIntersection[]\tintersections;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class EnumDeclaration : Declaration" -L"\r\n" L"{" -L"\r\n" L"\tEnumKind\t\t\t\tkind;" -L"\r\n" L"\tEnumItem[]\t\t\t\titems;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class StructMember" -L"\r\n" L"{" -L"\r\n" L"\tAttribute[]\t\t\t\tattributes;" -L"\r\n" L"\ttoken\t\t\t\t\tname;" -L"\r\n" L"\tType\t\t\t\t\ttype;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class StructDeclaration : Declaration" -L"\r\n" L"{" -L"\r\n" L"\tStructMember[]\t\t\tmembers;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"//////////////////////////////////////////////////////////////////" -L"\r\n" L"// AST (VirtualDeclarations)" -L"\r\n" L"//////////////////////////////////////////////////////////////////" -L"\r\n" L"" -L"\r\n" L"class VirtualDeclaration : Declaration" -L"\r\n" L"{" -L"\r\n" L"\tDeclaration[]\t\t\texpandedDeclarations;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"enum APConst" -L"\r\n" L"{" -L"\r\n" L"\tReadonly," -L"\r\n" L"\tWritable," -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"enum APObserve" -L"\r\n" L"{" -L"\r\n" L"\tObservable," -L"\r\n" L"\tNotObservable," -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class AutoPropertyDeclaration : VirtualDeclaration" -L"\r\n" L"{" -L"\r\n" L"\tType\t\t\t\t\ttype;" -L"\r\n" L"\tAPConst\t\t\t\t\tconfigConst;" -L"\r\n" L"\tAPObserve\t\t\t\tconfigObserve;" -L"\r\n" L"\tExpression\t\t\t\texpression;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class CastResultInterfaceDeclaration : VirtualDeclaration" -L"\r\n" L"{" -L"\r\n" L"\tType\t\t\t\t\tbaseType;" -L"\r\n" L"\tType\t\t\t\t\telementType;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"//////////////////////////////////////////////////////////////////" -L"\r\n" L"// AST (Statements)" -L"\r\n" L"//////////////////////////////////////////////////////////////////" -L"\r\n" L"" -L"\r\n" L"class BreakStatement : Statement" -L"\r\n" L"{" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class ContinueStatement : Statement" -L"\r\n" L"{" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class ReturnStatement : Statement" -L"\r\n" L"{" -L"\r\n" L"\tExpression\t\t\t\texpression;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class DeleteStatement : Statement" -L"\r\n" L"{" -L"\r\n" L"\tExpression\t\t\t\texpression;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class RaiseExceptionStatement : Statement" -L"\r\n" L"{" -L"\r\n" L"\tExpression\t\t\t\texpression;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class IfStatement : Statement" -L"\r\n" L"{" -L"\r\n" L"\tType\t\t\t\t\ttype;" -L"\r\n" L"\ttoken\t\t\t\t\tname;" -L"\r\n" L"\tExpression\t\t\t\texpression;" -L"\r\n" L"\tStatement\t\t\t\ttrueBranch;" -L"\r\n" L"\tStatement\t\t\t\tfalseBranch;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class WhileStatement : Statement" -L"\r\n" L"{" -L"\r\n" L"\tExpression\t\t\t\tcondition;" -L"\r\n" L"\tStatement\t\t\t\tstatement;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class TryStatement : Statement" -L"\r\n" L"{" -L"\r\n" L"\tStatement\t\t\t\tprotectedStatement;" -L"\r\n" L"\ttoken\t\t\t\t\tname;" -L"\r\n" L"\tStatement\t\t\t\tcatchStatement;" -L"\r\n" L"\tStatement\t\t\t\tfinallyStatement;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class BlockStatement : Statement" -L"\r\n" L"{" -L"\r\n" L"\tStatement[]\t\t\t\tstatements;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class VariableStatement : Statement" -L"\r\n" L"{" -L"\r\n" L"\tVariableDeclaration\t\tvariable;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class ExpressionStatement : Statement" -L"\r\n" L"{" -L"\r\n" L"\tExpression\t\t\t\texpression;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"//////////////////////////////////////////////////////////////////" -L"\r\n" L"// AST (VirtualStatements)" -L"\r\n" L"//////////////////////////////////////////////////////////////////" -L"\r\n" L"" -L"\r\n" L"class VirtualStatement : Statement" -L"\r\n" L"{" -L"\r\n" L"\tStatement\t\t\t\texpandedStatement;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"enum ForEachDirection" -L"\r\n" L"{" -L"\r\n" L"\tNormal," -L"\r\n" L"\tReversed," -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class ForEachStatement : VirtualStatement" -L"\r\n" L"{" -L"\r\n" L"\ttoken\t\t\t\t\tname;" -L"\r\n" L"\tForEachDirection\t\tdirection;" -L"\r\n" L"\tExpression\t\t\t\tcollection;" -L"\r\n" L"\tStatement\t\t\t\tstatement;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class SwitchCase" -L"\r\n" L"{" -L"\r\n" L"\tExpression\t\t\t\texpression;" -L"\r\n" L"\tStatement\t\t\t\tstatement;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class SwitchStatement : VirtualStatement" -L"\r\n" L"{" -L"\r\n" L"\tExpression\t\t\t\texpression;" -L"\r\n" L"\tSwitchCase[]\t\t\tcaseBranches;" -L"\r\n" L"\tStatement\t\t\t\tdefaultBranch;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class CoProviderStatement : VirtualStatement" -L"\r\n" L"{" -L"\r\n" L"\ttoken\t\t\t\t\tname;" -L"\r\n" L"\tStatement\t\t\t\tstatement;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"//////////////////////////////////////////////////////////////////" -L"\r\n" L"// AST (CoroutineStatements)" -L"\r\n" L"//////////////////////////////////////////////////////////////////" -L"\r\n" L"" -L"\r\n" L"class CoroutineStatement : Statement" -L"\r\n" L"{" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class CoPauseStatement : CoroutineStatement" -L"\r\n" L"{" -L"\r\n" L"\tStatement\t\t\t\tstatement;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class CoOperatorStatement : CoroutineStatement" -L"\r\n" L"{" -L"\r\n" L"\ttoken\t\t\t\t\tvarName;" -L"\r\n" L"\ttoken\t\t\t\t\topName;" -L"\r\n" L"\tExpression[]\t\t\targuments;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"//////////////////////////////////////////////////////////////////" -L"\r\n" L"// AST (Expressions)" -L"\r\n" L"//////////////////////////////////////////////////////////////////" -L"\r\n" L"" -L"\r\n" L"class ThisExpression : Expression" -L"\r\n" L"{" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class TopQualifiedExpression : Expression" -L"\r\n" L"{" -L"\r\n" L"\ttoken\t\t\t\t\tname;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class ReferenceExpression : Expression" -L"\r\n" L"{" -L"\r\n" L"\ttoken\t\t\t\t\tname;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class OrderedNameExpression : Expression" -L"\r\n" L"{" -L"\r\n" L"\ttoken\t\t\t\t\tname;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class OrderedLambdaExpression : Expression" -L"\r\n" L"{" -L"\r\n" L"\tExpression\t\t\t\tbody;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class MemberExpression : Expression" -L"\r\n" L"{" -L"\r\n" L"\tExpression\t\t\t\tparent;" -L"\r\n" L"\ttoken\t\t\t\t\tname;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class ChildExpression : Expression" -L"\r\n" L"{" -L"\r\n" L"\tExpression\t\t\t\tparent;" -L"\r\n" L"\ttoken\t\t\t\t\tname;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"enum LiteralValue" -L"\r\n" L"{" -L"\r\n" L"\tNull," -L"\r\n" L"\tTrue," -L"\r\n" L"\tFalse," -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class LiteralExpression : Expression" -L"\r\n" L"{" -L"\r\n" L"\tLiteralValue\t\t\tvalue;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class FloatingExpression : Expression" -L"\r\n" L"{" -L"\r\n" L"\ttoken\t\t\t\t\tvalue;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class IntegerExpression : Expression" -L"\r\n" L"{" -L"\r\n" L"\ttoken\t\t\t\t\tvalue;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class StringExpression : Expression" -L"\r\n" L"{" -L"\r\n" L"\ttoken\t\t\t\t\tvalue(UnescapeString);" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"enum UnaryOperator" -L"\r\n" L"{" -L"\r\n" L"\tPositive," -L"\r\n" L"\tNegative," -L"\r\n" L"\tNot," -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class UnaryExpression : Expression" -L"\r\n" L"{" -L"\r\n" L"\tUnaryOperator\t\t\top;" -L"\r\n" L"\tExpression\t\t\t\toperand;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"enum BinaryOperator" -L"\r\n" L"{" -L"\r\n" L"\tAssign," -L"\r\n" L"\tIndex," -L"\r\n" L"\tUnion," -L"\r\n" L"\tIntersect," -L"\r\n" L"\tFailedThen," -L"\r\n" L"\tExp," -L"\r\n" L"\tAdd," -L"\r\n" L"\tSub," -L"\r\n" L"\tMul," -L"\r\n" L"\tDiv," -L"\r\n" L"\tMod," -L"\r\n" L"\tShl," -L"\r\n" L"\tShr," -L"\r\n" L"\tLT," -L"\r\n" L"\tGT," -L"\r\n" L"\tLE," -L"\r\n" L"\tGE," -L"\r\n" L"\tEQ," -L"\r\n" L"\tNE," -L"\r\n" L"\tXor," -L"\r\n" L"\tAnd," -L"\r\n" L"\tOr," -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class BinaryExpression : Expression" -L"\r\n" L"{" -L"\r\n" L"\tBinaryOperator\t\t\top;" -L"\r\n" L"\tExpression\t\t\t\tfirst;" -L"\r\n" L"\tExpression\t\t\t\tsecond;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class LetVariable" -L"\r\n" L"{" -L"\r\n" L"\ttoken\t\t\t\t\tname;" -L"\r\n" L"\tExpression\t\t\t\tvalue;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class LetExpression : Expression" -L"\r\n" L"{" -L"\r\n" L"\tLetVariable[]\t\t\tvariables;" -L"\r\n" L"\tExpression\t\t\t\texpression;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class IfExpression : Expression" -L"\r\n" L"{" -L"\r\n" L"\tExpression\t\t\t\tcondition;" -L"\r\n" L"\tExpression\t\t\t\ttrueBranch;" -L"\r\n" L"\tExpression\t\t\t\tfalseBranch;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"enum RangeBoundary" -L"\r\n" L"{" -L"\r\n" L"\tInclusive," -L"\r\n" L"\tExclusive," -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class RangeExpression : Expression" -L"\r\n" L"{" -L"\r\n" L"\tExpression\t\t\t\tbegin;" -L"\r\n" L"\tRangeBoundary\t\t\tbeginBoundary;" -L"\r\n" L"\tExpression\t\t\t\tend;" -L"\r\n" L"\tRangeBoundary\t\t\tendBoundary;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"enum SetTesting" -L"\r\n" L"{" -L"\r\n" L"\tIn," -L"\r\n" L"\tNotIn," -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class SetTestingExpression : Expression" -L"\r\n" L"{" -L"\r\n" L"\tSetTesting\t\t\t\ttest;" -L"\r\n" L"\tExpression\t\t\t\telement;" -L"\r\n" L"\tExpression\t\t\t\tcollection;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class ConstructorArgument" -L"\r\n" L"{" -L"\r\n" L"\tExpression\t\t\t\tkey;" -L"\r\n" L"\tExpression\t\t\t\tvalue;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class ConstructorExpression : Expression" -L"\r\n" L"{" -L"\r\n" L"\tConstructorArgument[]\targuments;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class InferExpression : Expression" -L"\r\n" L"{" -L"\r\n" L"\tExpression\t\t\t\texpression;" -L"\r\n" L"\tType\t\t\t\t\ttype;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"enum TypeCastingStrategy" -L"\r\n" L"{" -L"\r\n" L"\tStrong," -L"\r\n" L"\tWeak," -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class TypeCastingExpression : Expression" -L"\r\n" L"{" -L"\r\n" L"\tTypeCastingStrategy\t\tstrategy;" -L"\r\n" L"\tExpression\t\t\t\texpression;" -L"\r\n" L"\tType\t\t\t\t\ttype;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"enum TypeTesting" -L"\r\n" L"{" -L"\r\n" L"\tIsType," -L"\r\n" L"\tIsNotType," -L"\r\n" L"\tIsNull," -L"\r\n" L"\tIsNotNull," -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class TypeTestingExpression : Expression" -L"\r\n" L"{" -L"\r\n" L"\tTypeTesting\t\t\t\ttest;" -L"\r\n" L"\tExpression\t\t\t\texpression;" -L"\r\n" L"\tType\t\t\t\t\ttype;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class TypeOfTypeExpression : Expression" -L"\r\n" L"{" -L"\r\n" L"\tType\t\t\t\t\ttype;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class TypeOfExpressionExpression : Expression" -L"\r\n" L"{" -L"\r\n" L"\tExpression\t\t\t\texpression;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class AttachEventExpression : Expression" -L"\r\n" L"{" -L"\r\n" L"\tExpression\t\t\t\tevent;" -L"\r\n" L"\tExpression\t\t\t\tfunction;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class DetachEventExpression : Expression" -L"\r\n" L"{" -L"\r\n" L"\tExpression\t\t\t\tevent;" -L"\r\n" L"\tExpression\t\t\t\thandler;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"enum ObserveType" -L"\r\n" L"{" -L"\r\n" L"\tSimpleObserve," -L"\r\n" L"\tExtendedObserve," -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class ObserveExpression : Expression" -L"\r\n" L"{" -L"\r\n" L"\tExpression\t\t\t\tparent;" -L"\r\n" L"\tObserveType\t\t\t\tobserveType;" -L"\r\n" L"\ttoken\t\t\t\t\tname;" -L"\r\n" L"\tExpression\t\t\t\texpression;" -L"\r\n" L"\tExpression[]\t\t\tevents;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class CallExpression : Expression" -L"\r\n" L"{" -L"\r\n" L"\tExpression\t\t\t\tfunction;" -L"\r\n" L"\tExpression[]\t\t\targuments;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class FunctionExpression : Expression" -L"\r\n" L"{" -L"\r\n" L"\tFunctionDeclaration\t\tfunction;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class NewClassExpression : Expression" -L"\r\n" L"{" -L"\r\n" L"\tType\t\t\t\t\ttype;" -L"\r\n" L"\tExpression[]\t\t\targuments;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class NewInterfaceExpression : Expression" -L"\r\n" L"{" -L"\r\n" L"\tType\t\t\t\t\ttype;" -L"\r\n" L"\tDeclaration[]\t\t\tdeclarations (SetDefaultClassMember);" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"//////////////////////////////////////////////////////////////////" -L"\r\n" L"// AST (VirtualExpressions)" -L"\r\n" L"//////////////////////////////////////////////////////////////////" -L"\r\n" L"" -L"\r\n" L"class VirtualExpression : Expression" -L"\r\n" L"{" -L"\r\n" L"\tExpression\t\t\t\texpandedExpression;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class BindExpression : VirtualExpression" -L"\r\n" L"{" -L"\r\n" L"\tExpression\t\t\t\texpression;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class FormatExpression : VirtualExpression" -L"\r\n" L"{" -L"\r\n" L"\ttoken\t\t\t\t\tvalue(UnescapeFormatString);" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class NewCoroutineExpression : VirtualExpression" -L"\r\n" L"{" -L"\r\n" L"\ttoken\t\t\t\t\tname;" -L"\r\n" L"\tStatement\t\t\t\tstatement;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class MixinCastExpression : VirtualExpression" -L"\r\n" L"{" -L"\r\n" L"\tType\t\t\t\t\ttype;" -L"\r\n" L"\tExpression\t\t\t\texpression;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class ExpectedTypeCastExpression : VirtualExpression" -L"\r\n" L"{" -L"\r\n" L"\tTypeCastingStrategy\t\tstrategy;" -L"\r\n" L"\tExpression\t\t\t\texpression;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"//////////////////////////////////////////////////////////////////" -L"\r\n" L"// AST (Module)" -L"\r\n" L"//////////////////////////////////////////////////////////////////" -L"\r\n" L"" -L"\r\n" L"class ModuleUsingFragment" -L"\r\n" L"{" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class ModuleUsingNameFragment : ModuleUsingFragment" -L"\r\n" L"{" -L"\r\n" L"\ttoken\t\t\t\t\tname;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class ModuleUsingWildCardFragment : ModuleUsingFragment" -L"\r\n" L"{" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class ModuleUsingItem" -L"\r\n" L"{" -L"\r\n" L"\tModuleUsingFragment[]\tfragments;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class ModuleUsingPath" -L"\r\n" L"{" -L"\r\n" L"\tModuleUsingItem[]\t\titems;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"enum ModuleType" -L"\r\n" L"{" -L"\r\n" L"\tModule," -L"\r\n" L"\tUnit," -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"class Module" -L"\r\n" L"{" -L"\r\n" L"\tModuleType\t\t\t\tmoduleType;" -L"\r\n" L"\ttoken\t\t\t\t\tname;" -L"\r\n" L"\tModuleUsingPath[]\t\tpaths;" -L"\r\n" L"\tDeclaration[]\t\t\tdeclarations;" -L"\r\n" L"}" -L"\r\n" L"" -L"\r\n" L"//////////////////////////////////////////////////////////////////" -L"\r\n" L"// Lexer" -L"\r\n" L"//////////////////////////////////////////////////////////////////" -L"\r\n" L"" -L"\r\n" L"token EXP = \"/^\";" -L"\r\n" L"token ADD = \"/+\";" -L"\r\n" L"token SUB = \"-\";" -L"\r\n" L"token MUL = \"/*\";" -L"\r\n" L"token DIV = \"//\";" -L"\r\n" L"token MOD = \"%\";" -L"\r\n" L"token UNION = \"&\";" -L"\r\n" L"token INTERSECTION = \"/|\";" -L"\r\n" L"token LE = \"//=\";" -L"\r\n" L"token LT = \"/<\";" -L"\r\n" L"token GT = \"/>\";" -L"\r\n" L"token EQ = \"/=/=\";" -L"\r\n" L"token NE = \"/!/=\";" -L"\r\n" L"token ASSIGN = \"/=\";" -L"\r\n" L"token FAILED_THEN = \"/?/?\";" -L"\r\n" L"token QUESTION_MARK = \"/?\";" -L"\r\n" L"token SCOPE_DELIMITER = \"::\";" -L"\r\n" L"token COLON = \":\";" -L"\r\n" L"token SEMICOLON = \";\";" -L"\r\n" L"token COMMA = \",\";" -L"\r\n" L"token DOT = \".\";" -L"\r\n" L"token OPEN_ARRAY = \"/[\";" -L"\r\n" L"token CLOSE_ARRAY = \"/]\";" -L"\r\n" L"token OPEN_BRACE = \"/{\";" -L"\r\n" L"token CLOSE_BRACE = \"/}\";" -L"\r\n" L"token OPEN_BRACKET = \"/(\";" -L"\r\n" L"token CLOSE_BRACKET = \"/)\";" -L"\r\n" L"token AT = \"@\";" -L"\r\n" L"" -L"\r\n" L"token TYPE_VOID = \"void\";" -L"\r\n" L"token TYPE_OBJECT = \"object\";" -L"\r\n" L"token TYPE_INTERFACE = \"interface\";" -L"\r\n" L"token TYPE_INT = \"int\";" -L"\r\n" L"token TYPE_UINT = \"uint\";" -L"\r\n" L"token TYPE_FLOAT = \"float\";" -L"\r\n" L"token TYPE_DOUBLE = \"double\";" -L"\r\n" L"token TYPE_STRING = \"string\";" -L"\r\n" L"token TYPE_CHAR = \"char\";" -L"\r\n" L"token TYPE_BOOL = \"bool\";" -L"\r\n" L"" -L"\r\n" L"token KEYWORD_CONST = \"const\";" -L"\r\n" L"token KEYWORD_SHL = \"shl\";" -L"\r\n" L"token KEYWORD_SHR = \"shr\";" -L"\r\n" L"token KEYWORD_XOR = \"xor\";" -L"\r\n" L"token KEYWORD_AND = \"and\";" -L"\r\n" L"token KEYWORD_OR = \"or\";" -L"\r\n" L"token KEYWORD_NOT = \"not\";" -L"\r\n" L"token KEYWORD_NULL= \"null\";" -L"\r\n" L"token KEYWORD_THIS= \"this\";" -L"\r\n" L"token KEYWORD_TRUE= \"true\";" -L"\r\n" L"token KEYWORD_FALSE = \"false\";" -L"\r\n" L"token KEYWORD_LET = \"let\";" -L"\r\n" L"token KEYWORD_IN = \"in\";" -L"\r\n" L"token KEYWORD_RANGE = \"range\";" -L"\r\n" L"token KEYWORD_NEW = \"new\";" -L"\r\n" L"token KEYWORD_OF = \"of\";" -L"\r\n" L"token KEYWORD_AS = \"as\";" -L"\r\n" L"token KEYWORD_IS = \"is\";" -L"\r\n" L"token KEYWORD_CAST = \"cast\";" -L"\r\n" L"token KEYWORD_FUNC = \"func\";" -L"\r\n" L"token KEYWORD_TYPEOF = \"typeof\";" -L"\r\n" L"token KEYWORD_TYPE = \"type\";" -L"\r\n" L"token KEYWORD_BIND = \"bind\";" -L"\r\n" L"token KEYWORD_OBSERVE = \"observe\";" -L"\r\n" L"token KEYWORD_ON = \"on\";" -L"\r\n" L"token KEYWORD_ATTACH = \"attach\";" -L"\r\n" L"token KEYWORD_DETACH = \"detach\";" -L"\r\n" L"token KEYWORD_VAR = \"var\";" -L"\r\n" L"token KEYWORD_BREAK = \"break\";" -L"\r\n" L"token KEYWORD_CONTINUE = \"continue\";" -L"\r\n" L"token KEYWORD_RETURN = \"return\";" -L"\r\n" L"token KEYWORD_DELETE = \"delete\";" -L"\r\n" L"token KEYWORD_RAISE = \"raise\";" -L"\r\n" L"token KEYWORD_IF = \"if\";" -L"\r\n" L"token KEYWORD_ELSE = \"else\";" -L"\r\n" L"token KEYWORD_SWITCH = \"switch\";" -L"\r\n" L"token KEYWORD_CASE = \"case\";" -L"\r\n" L"token KEYWORD_DEFAULT = \"default\";" -L"\r\n" L"token KEYWORD_WHILE = \"while\";" -L"\r\n" L"token KEYWORD_FOR = \"for\";" -L"\r\n" L"token KEYWORD_REVERSED = \"reversed\";" -L"\r\n" L"token KEYWORD_TRY = \"try\";" -L"\r\n" L"token KEYWORD_CATCH = \"catch\";" -L"\r\n" L"token KEYWORD_FINALLY = \"finally\";" -L"\r\n" L"token KEYWORD_CLASS = \"class\";" -L"\r\n" L"token KEYWORD_ENUM = \"enum\";" -L"\r\n" L"token KEYWORD_FLAGENUM = \"flagenum\";" -L"\r\n" L"token KEYWORD_STRUCT = \"struct\";" -L"\r\n" L"token KEYWORD_PROP = \"prop\";" -L"\r\n" L"token KEYWORD_EVENT = \"event\";" -L"\r\n" L"token KEYWORD_STATIC = \"static\";" -L"\r\n" L"token KEYWORD_OVERRIDE = \"override\";" -L"\r\n" L"token KEYWORD_USING = \"using\";" -L"\r\n" L"token KEYWORD_NAMESPACE = \"namespace\";" -L"\r\n" L"token KEYWORD_MODULE = \"module\";" -L"\r\n" L"token KEYWORD_UNIT = \"unit\";" -L"\r\n" L"" -L"\r\n" L"token COROUTINE_COROUTINE = \"/$coroutine\";" -L"\r\n" L"token COROUTINE_PAUSE = \"/$pause\";" -L"\r\n" L"token COROUTINE_INTERFACE = \"/$interface\";" -L"\r\n" L"token COROUTINE_OPERATOR = \"/$[A-Z]/w*\";" -L"\r\n" L"token COROUTINE_SIGN = \"/$\";" -L"\r\n" L"" -L"\r\n" L"token NAME = \"[a-zA-Z_]/w*\";" -L"\r\n" L"token ORDERED_NAME = \"/$[0-9]*\";" -L"\r\n" L"token FLOAT = \"/d+./d+\";" -L"\r\n" L"token INTEGER = \"/d+\";" -L"\r\n" L"token STRING = \"\'([^\'\\\\]|\\\\\\.)*\'|\"\"([^\"\"\\\\]|\\\\\\.)*\"\"\";" -L"\r\n" L"token FORMATSTRING = \"/$(\'([^\'\\\\]|\\\\\\.)*\'|\"\"([^\"\"\\\\]|\\\\\\.)*\"\")\";" -L"\r\n" L"" -L"\r\n" L"discardtoken SPACE = \"/s+\";" -L"\r\n" L"discardtoken COMMENT = \"///*([^*]|/*+[^//])*/*+//\";" -L"\r\n" L"" -L"\r\n" L"//////////////////////////////////////////////////////////////////" -L"\r\n" L"// Rule (Type)" -L"\r\n" L"//////////////////////////////////////////////////////////////////" -L"\r\n" L"" -L"\r\n" L"rule Type _Type" -L"\r\n" L"\t= \"void\" as PredefinedType with {name=\"Void\"}" -L"\r\n" L"\t= \"object\" as PredefinedType with {name=\"Object\"}" -L"\r\n" L"\t= \"interface\" as PredefinedType with {name=\"Interface\"}" -L"\r\n" L"\t= \"int\" as PredefinedType with {name=\"Int\"}" -L"\r\n" L"\t= \"uint\" as PredefinedType with {name=\"UInt\"}" -L"\r\n" L"\t= \"float\" as PredefinedType with {name=\"Float\"}" -L"\r\n" L"\t= \"double\" as PredefinedType with {name=\"Double\"}" -L"\r\n" L"\t= \"string\" as PredefinedType with {name=\"String\"}" -L"\r\n" L"\t= \"char\" as PredefinedType with {name=\"Char\"}" -L"\r\n" L"\t= \"bool\" as PredefinedType with {name=\"Bool\"}" -L"\r\n" L"\t= NAME : name as ReferenceType" -L"\r\n" L"\t= \"func\" \"(\" [_Type : arguments {\",\" _Type : arguments}] \")\" \":\" _Type : result as FunctionType" -L"\r\n" L"\t= _Type : element \"*\" as RawPointerType" -L"\r\n" L"\t= _Type : element \"^\" as SharedPointerType" -L"\r\n" L"\t= _Type : element \"?\" as NullableType" -L"\r\n" L"\t= _Type : element \"{\" \"}\" as EnumerableType" -L"\r\n" L"\t= _Type : value \"[\" [_Type : key] \"]\" as MapType with {writability=\"Writable\"}" -L"\r\n" L"\t= \"observe\" _Type : element \"[\" \"]\" as ObservableListType" -L"\r\n" L"\t= \"const\" _Type : value \"[\" [_Type : key] \"]\" as MapType with {writability=\"Readonly\"}" -L"\r\n" L"\t= _Type : parent \"::\" NAME : name as ChildType" -L"\r\n" L"\t= \"::\" NAME : name as TopQualifiedType" -L"\r\n" L"\t= \"(\" !_Type \")\"" -L"\r\n" L"\t;" -L"\r\n" L"" -L"\r\n" L"//////////////////////////////////////////////////////////////////" -L"\r\n" L"// Rule (Expression)" -L"\r\n" L"//////////////////////////////////////////////////////////////////" -L"\r\n" L"" -L"\r\n" L"rule ConstructorArgument _CtorFragment" -L"\r\n" L"\t= _Expression : key [ \":\" _Expression : value] as ConstructorArgument" -L"\r\n" L"\t;" -L"\r\n" L"" -L"\r\n" L"rule LetVariable _LetVariable" -L"\r\n" L"\t= NAME : name \"=\" _Expression : value as LetVariable" -L"\r\n" L"\t;" -L"\r\n" L"" -L"\r\n" L"rule Expression _VirtualExpression" -L"\r\n" L"\t= FORMATSTRING : value as FormatExpression" -L"\r\n" L"\t= \"bind\" \"(\" _Expression : expression \")\" as BindExpression" -L"\r\n" L"\t= \"$coroutine\" [\"(\" NAME : name \")\"] _Block : statement as NewCoroutineExpression" -L"\r\n" L"\t= \"new\" _Type : type \"(\" \"using\" _Expression : expression \")\" as MixinCastExpression" -L"\r\n" L"\t;" -L"\r\n" L"" -L"\r\n" L"rule Expression _ExpPrimitive" -L"\r\n" L"\t= \"null\" as LiteralExpression with {value = \"Null\"}" -L"\r\n" L"\t= \"true\" as LiteralExpression with {value = \"True\"}" -L"\r\n" L"\t= \"false\" as LiteralExpression with {value = \"False\"}" -L"\r\n" L"\t= INTEGER : value as IntegerExpression" -L"\r\n" L"\t= FLOAT : value as FloatingExpression" -L"\r\n" L"\t= STRING : value as StringExpression" -L"\r\n" L"\t= \"this\" as ThisExpression" -L"\r\n" L"\t= NAME : name as ReferenceExpression" -L"\r\n" L"\t= ORDERED_NAME : name as OrderedNameExpression" -L"\r\n" L"\t= \"(\" !_Expression \")\"" -L"\r\n" L"\t= \"[\" _Expression : body \"]\" as OrderedLambdaExpression" -L"\r\n" L"\t= _Function : function as FunctionExpression" -L"\r\n" L"\t= \"let\" _LetVariable : variables {\",\" _LetVariable : variables} \"in\" \"(\" _Expression : expression \")\" as LetExpression" -L"\r\n" L"\t= \"range\"" -L"\r\n" L"\t\t((\"(\" with {beginBoundary = \"Exclusive\"}) | (\"[\" with {beginBoundary = \"Inclusive\"}))" -L"\r\n" L"\t\t_Expression : begin \",\" _Expression : end" -L"\r\n" L"\t\t((\")\" with {endBoundary = \"Exclusive\"}) | (\"]\" with {endBoundary = \"Inclusive\"}))" -L"\r\n" L"\t\tas RangeExpression" -L"\r\n" L"\t= \"{\" {_CtorFragment : arguments} \"}\" as ConstructorExpression" -L"\r\n" L"\t= \"new\" _Type : type \"(\" [_Expression : arguments {\",\" _Expression : arguments}] \")\" as NewClassExpression" -L"\r\n" L"\t= \"new\" _Type : type \"{\" {_MemberDeclaration : declarations} \"}\" as NewInterfaceExpression" -L"\r\n" L"\t= _ExpPrimitive : parent \".\" \"observe\" \"(\" _Expression : expression [\"on\" _Expression : events {\",\" _Expression : events}]\")\" as ObserveExpression with {observeType = \"SimpleObserve\"}" -L"\r\n" L"\t= _ExpPrimitive : parent \".\" \"observe\" \"as\" NAME : name \"(\" _Expression : expression [\"on\" _Expression : events {\",\" _Expression : events}]\")\" as ObserveExpression with {observeType = \"ExtendedObserve\"}" -L"\r\n" L"\t= _ExpPrimitive : function \"(\" [_Expression : arguments {\",\" _Expression : arguments}] \")\" as CallExpression" -L"\r\n" L"\t= _ExpPrimitive : parent \".\" NAME : name as MemberExpression" -L"\r\n" L"\t= _ExpPrimitive : parent \"::\" NAME : name as ChildExpression" -L"\r\n" L"\t= _ExpPrimitive : first \"[\" _Expression : second \"]\" as BinaryExpression with {op = \"Index\"}" -L"\r\n" L"\t= _ExpPrimitive : element" -L"\r\n" L"\t\t((\"in\" with {test=\"In\"}) | (\"not\" \"in\" with {test=\"NotIn\"}))" -L"\r\n" L"\t\t_Expression : collection as SetTestingExpression" -L"\r\n" L"\t= _ExpPrimitive : expression \"of\" _Type : type as InferExpression" -L"\r\n" L"\t= _ExpPrimitive : expression" -L"\r\n" L"\t\t(" -L"\r\n" L"\t\t\t(" -L"\r\n" L"\t\t\t\t(" -L"\r\n" L"\t\t\t\t\t(\"is\" with {test=\"IsType\"})" -L"\r\n" L"\t\t\t\t\t| (\"is\" \"not\" with {test=\"IsNotType\"})" -L"\r\n" L"\t\t\t\t) _Type : type as TypeTestingExpression" -L"\r\n" L"\t\t\t)" -L"\r\n" L"\t\t\t| (\"is\" \"null\" as TypeTestingExpression with {test=\"IsNull\"})" -L"\r\n" L"\t\t\t| (\"is\" \"not\" \"null\" as TypeTestingExpression with {test=\"IsNotNull\"})" -L"\r\n" L"\t\t)" -L"\r\n" L"\t= _ExpPrimitive : expression \"as\" _Type : type as TypeCastingExpression with {strategy = \"Weak\"}" -L"\r\n" L"\t= _ExpPrimitive : expression \"as\" \"*\" as ExpectedTypeCastExpression with {strategy = \"Weak\"}" -L"\r\n" L"\t= \"typeof\" \"(\" _Type : type \")\" as TypeOfTypeExpression" -L"\r\n" L"\t= \"type\" \"(\" _Expression : expression \")\" as TypeOfExpressionExpression" -L"\r\n" L"\t= \"attach\" \"(\" _Expression : event \",\" _Expression : function \")\" as AttachEventExpression" -L"\r\n" L"\t= \"detach\" \"(\" _Expression : event \",\" _Expression : handler \")\" as DetachEventExpression" -L"\r\n" L"\t= \"::\" NAME : name as TopQualifiedExpression" -L"\r\n" L"\t= !_VirtualExpression" -L"\r\n" L"\t;" -L"\r\n" L"" -L"\r\n" L"rule Expression _Exp0" -L"\r\n" L"\t= !_ExpPrimitive" -L"\r\n" L"\t= \"+\" _Exp0 : operand as UnaryExpression with {op = \"Positive\"}" -L"\r\n" L"\t= \"-\" _Exp0 : operand as UnaryExpression with {op = \"Negative\"}" -L"\r\n" L"\t= \"not\" _Exp0 : operand as UnaryExpression with {op = \"Not\"}" -L"\r\n" L"\t= \"cast\" _Type : type _Exp0 : expression as TypeCastingExpression with {strategy = \"Strong\"}" -L"\r\n" L"\t= \"cast\" \"*\" _Exp0 : expression as ExpectedTypeCastExpression with {strategy = \"Strong\"}" -L"\r\n" L"\t;" -L"\r\n" L"" -L"\r\n" L"rule Expression _Exp1" -L"\r\n" L"\t= !_Exp0" -L"\r\n" L"\t= _Exp1 : first \"^\" _Exp0 : second as BinaryExpression with {op = \"Exp\"}" -L"\r\n" L"\t;" -L"\r\n" L"rule Expression _Exp2" -L"\r\n" L"\t= !_Exp1" -L"\r\n" L"\t= _Exp2 : first \"*\" _Exp1 : second as BinaryExpression with {op = \"Mul\"}" -L"\r\n" L"\t= _Exp2 : first \"/\" _Exp1 : second as BinaryExpression with {op = \"Div\"}" -L"\r\n" L"\t= _Exp2 : first \"%\" _Exp1 : second as BinaryExpression with {op = \"Mod\"}" -L"\r\n" L"\t;" -L"\r\n" L"rule Expression _Exp3" -L"\r\n" L"\t= !_Exp2" -L"\r\n" L"\t= _Exp3 : first \"+\" _Exp2 : second as BinaryExpression with {op = \"Add\"}" -L"\r\n" L"\t= _Exp3 : first \"-\" _Exp2 : second as BinaryExpression with {op = \"Sub\"}" -L"\r\n" L"\t= _Exp3 : first \"&\" _Exp2 : second as BinaryExpression with {op = \"Union\"}" -L"\r\n" L"\t= _Exp3 : first \"|\" _Exp2 : second as BinaryExpression with {op = \"Intersect\"}" -L"\r\n" L"\t;" -L"\r\n" L"rule Expression _Exp4" -L"\r\n" L"\t= !_Exp3" -L"\r\n" L"\t= _Exp4 : first \"shl\" _Exp3 : second as BinaryExpression with {op = \"Shl\"}" -L"\r\n" L"\t= _Exp4 : first \"shr\" _Exp3 : second as BinaryExpression with {op = \"Shr\"}" -L"\r\n" L"\t;" -L"\r\n" L"rule Expression _Exp5" -L"\r\n" L"\t= !_Exp4" -L"\r\n" L"\t= _Exp5 : first \"<\" _Exp4 : second as BinaryExpression with {op = \"LT\"}" -L"\r\n" L"\t= _Exp5 : first \">\" _Exp4 : second as BinaryExpression with {op = \"GT\"}" -L"\r\n" L"\t= _Exp5 : first \"<=\" _Exp4 : second as BinaryExpression with {op = \"LE\"}" -L"\r\n" L"\t= _Exp5 : first \">=\" _Exp4 : second as BinaryExpression with {op = \"GE\"}" -L"\r\n" L"\t= _Exp5 : first \"==\" _Exp4 : second as BinaryExpression with {op = \"EQ\"}" -L"\r\n" L"\t= _Exp5 : first \"!=\" _Exp4 : second as BinaryExpression with {op = \"NE\"}" -L"\r\n" L"\t;" -L"\r\n" L"rule Expression _Exp6" -L"\r\n" L"\t= !_Exp5" -L"\r\n" L"\t= _Exp6 : first \"xor\" _Exp5 : second as BinaryExpression with {op = \"Xor\"}" -L"\r\n" L"\t;" -L"\r\n" L"rule Expression _Exp7" -L"\r\n" L"\t= !_Exp6" -L"\r\n" L"\t= _Exp7 : first \"and\" _Exp6 : second as BinaryExpression with {op = \"And\"}" -L"\r\n" L"\t;" -L"\r\n" L"rule Expression _Exp8" -L"\r\n" L"\t= !_Exp7" -L"\r\n" L"\t= _Exp8 : first \"or\" _Exp7 : second as BinaryExpression with {op = \"Or\"}" -L"\r\n" L"\t;" -L"\r\n" L"rule Expression _Exp9" -L"\r\n" L"\t= !_Exp8" -L"\r\n" L"\t= _Exp9 : first \"??\" _Exp8 : second as BinaryExpression with {op = \"FailedThen\"}" -L"\r\n" L"\t;" -L"\r\n" L"rule Expression _Exp10" -L"\r\n" L"\t= !_Exp9" -L"\r\n" L"\t= _Exp9 : condition \"?\" _Exp10 : trueBranch \":\" _Exp10 : falseBranch as IfExpression" -L"\r\n" L"\t;" -L"\r\n" L"rule Expression _Exp11" -L"\r\n" L"\t= !_Exp10" -L"\r\n" L"\t= _Exp10 : first \"=\" _Exp11 : second as BinaryExpression with {op = \"Assign\"}" -L"\r\n" L"\t;" -L"\r\n" L"" -L"\r\n" L"rule Expression _Expression" -L"\r\n" L"\t= !_Exp11" -L"\r\n" L"\t;" -L"\r\n" L"" -L"\r\n" L"//////////////////////////////////////////////////////////////////" -L"\r\n" L"// Rule (Statement)" -L"\r\n" L"//////////////////////////////////////////////////////////////////" -L"\r\n" L"" -L"\r\n" L"rule SwitchCase _SwitchCase" -L"\r\n" L"\t= \"case\" _Expression : expression \":\" _Block : statement as SwitchCase" -L"\r\n" L"\t;" -L"\r\n" L"" -L"\r\n" L"rule Statement _Block" -L"\r\n" L"\t= \"{\" {_Statement : statements} \"}\" as BlockStatement" -L"\r\n" L"\t;" -L"\r\n" L"" -L"\r\n" L"rule IfStatement _If" -L"\r\n" L"\t= \"if\" \"(\" [\"var\" NAME : name \":\" _Type : type \"=\"] _Expression : expression \")\" _Block : trueBranch [\"else\" (_Block : falseBranch | _If : falseBranch)] as IfStatement" -L"\r\n" L"\t;" -L"\r\n" L"" -L"\r\n" L"rule Statement _VirtualStatement" -L"\r\n" L"\t= \"switch\" \"(\" _Expression : expression \")\" \"{\" {_SwitchCase : caseBranches} [\"default\" \":\" _Block : defaultBranch] \"}\" as SwitchStatement" -L"\r\n" L"\t= \"for\" \"(\" NAME : name " -L"\r\n" L"\t\t((\"in\" with {direction=\"Normal\"}) | (\"in\" \"reversed\" with {direction=\"Reversed\"}))" -L"\r\n" L"\t\t_Expression : collection \")\" _Block : statement as ForEachStatement" -L"\r\n" L"\t= [\"var\" NAME : varName \"=\"] COROUTINE_OPERATOR : opName [_Expression : arguments {\",\" _Expression : arguments}] \";\" as CoOperatorStatement" -L"\r\n" L"\t;" -L"\r\n" L"" -L"\r\n" L"rule Statement _CoStatement" -L"\r\n" L"\t= \"$pause\" (\";\" | _Block : statement) as CoPauseStatement" -L"\r\n" L"\t;" -L"\r\n" L"" -L"\r\n" L"rule Statement _CoProvider" -L"\r\n" L"\t= (\"$\" | COROUTINE_OPERATOR : name) _Block : statement as CoProviderStatement" -L"\r\n" L"\t;" -L"\r\n" L"" -L"\r\n" L"rule Statement _Statement" -L"\r\n" L"\t= !_Block" -L"\r\n" L"\t= _Variable : variable as VariableStatement" -L"\r\n" L"\t= \"break\" \";\" as BreakStatement" -L"\r\n" L"\t= \"continue\" \";\" as ContinueStatement" -L"\r\n" L"\t= \"return\" [_Expression : expression] \";\" as ReturnStatement" -L"\r\n" L"\t= \"delete\" _Expression : expression \";\" as DeleteStatement" -L"\r\n" L"\t= \"raise\" [_Expression : expression] \";\" as RaiseExceptionStatement" -L"\r\n" L"\t= !_If" -L"\r\n" L"\t= \"while\" \"(\" _Expression : condition \")\" _Block : statement as WhileStatement" -L"\r\n" L"\t= \"try\" _Block : protectedStatement [\"catch\" \"(\" NAME : name \")\" _Block : catchStatement] [\"finally\" _Block : finallyStatement] as TryStatement" -L"\r\n" L"\t= _Expression : expression \";\" as ExpressionStatement" -L"\r\n" L"\t= !_VirtualStatement" -L"\r\n" L"\t= !_CoStatement" -L"\r\n" L"\t;" -L"\r\n" L"" -L"\r\n" L"//////////////////////////////////////////////////////////////////" -L"\r\n" L"// Rule (Declaration -- Basic)" -L"\r\n" L"//////////////////////////////////////////////////////////////////" -L"\r\n" L"" -L"\r\n" L"rule Attribute _Attribute" -L"\r\n" L"\t= \"@\" NAME : category \":\" NAME : name [\"(\" _Expression : value \")\"] as Attribute" -L"\r\n" L"\t;" -L"\r\n" L"" -L"\r\n" L"rule NamespaceDeclaration _Namespace" -L"\r\n" L"\t= \"namespace\" NAME : name \"{\" {_Declaration : declarations} \"}\" as NamespaceDeclaration" -L"\r\n" L"\t;" -L"\r\n" L"" -L"\r\n" L"rule FunctionArgument _FunctionArgument" -L"\r\n" L"\t= {_Attribute : attributes} NAME : name \":\" _Type : type as FunctionArgument" -L"\r\n" L"\t;" -L"\r\n" L"rule FunctionDeclaration _Function" -L"\r\n" L"\t= \"func\" " -L"\r\n" L"\t\t(" -L"\r\n" L"\t\t\t(NAME : name \"(\" with {anonymity=\"Named\"})" -L"\r\n" L"\t\t\t| (\"(\" with {anonymity=\"Anonymous\"})" -L"\r\n" L"\t\t)" -L"\r\n" L"\t\t[_FunctionArgument : arguments {\",\" _FunctionArgument : arguments}] \")\" \":\" _Type : returnType" -L"\r\n" L"\t\t(_Block : statement | _CoProvider : statement | \";\") as FunctionDeclaration" -L"\r\n" L"\t;" -L"\r\n" L"rule VariableDeclaration _Variable" -L"\r\n" L"\t= \"var\" NAME : name [\":\" _Type : type] \"=\" _Expression : expression \";\" as VariableDeclaration" -L"\r\n" L"\t;" -L"\r\n" L"" -L"\r\n" L"rule EventDeclaration _Event" -L"\r\n" L"\t= \"event\" NAME : name \"(\" [_Type : arguments {\",\" _Type : arguments}] \")\" \";\" as EventDeclaration" -L"\r\n" L"\t;" -L"\r\n" L"" -L"\r\n" L"rule PropertyDeclaration _Property" -L"\r\n" L"\t= \"prop\" NAME : name \":\" _Type : type \"{\" NAME : getter [\",\" NAME : setter] [\":\" NAME : valueChangedEvent] \"}\" as PropertyDeclaration" -L"\r\n" L"\t;" -L"\r\n" L"" -L"\r\n" L"rule BaseConstructorCall _BaseConstructorCall" -L"\r\n" L"\t= _Type : type \"(\" [_Expression : arguments {\",\" _Expression : arguments}] \")\" as BaseConstructorCall" -L"\r\n" L"\t;" -L"\r\n" L"rule ConstructorDeclaration _Constructor" -L"\r\n" L"\t=\t(" -L"\r\n" L"\t\t\t(\"new\" with {constructorType = \"SharedPtr\"})" -L"\r\n" L"\t\t\t| (\"new\" \"*\" with {constructorType = \"RawPtr\"})" -L"\r\n" L"\t\t)" -L"\r\n" L"\t\t\"(\" [_FunctionArgument : arguments {\",\" _FunctionArgument : arguments}] \")\"" -L"\r\n" L"\t\t[\":\" _BaseConstructorCall : baseConstructorCalls {\",\" _BaseConstructorCall : baseConstructorCalls}]" -L"\r\n" L"\t\t_Block : statement as ConstructorDeclaration" -L"\r\n" L"\t;" -L"\r\n" L"" -L"\r\n" L"rule DestructorDeclaration _Destructor" -L"\r\n" L"\t= \"delete\" _Block : statement as DestructorDeclaration" -L"\r\n" L"\t;" -L"\r\n" L"" -L"\r\n" L"rule ClassDeclaration _ClassBody" -L"\r\n" L"\t= [\":\" _Type : baseTypes {\",\" _Type : baseTypes}] \"{\" {_MemberDeclaration : declarations} \"}\" as ClassDeclaration" -L"\r\n" L"\t;" -L"\r\n" L"" -L"\r\n" L"rule ClassDeclaration _Class" -L"\r\n" L"\t= \"class\" NAME : name !_ClassBody with {kind = \"Class\"} with {constructorType = \"Undefined\"}" -L"\r\n" L"\t= \"interface\" NAME : name !_ClassBody with {kind = \"Interface\"} with {constructorType = \"SharedPtr\"}" -L"\r\n" L"\t= \"interface\" NAME : name \"*\" !_ClassBody with {kind = \"Interface\"} with {constructorType = \"RawPtr\"}" -L"\r\n" L"\t;" -L"\r\n" L"" -L"\r\n" L"rule EnumItemIntersection _EnumItemInt" -L"\r\n" L"\t= NAME : name as EnumItemIntersection" -L"\r\n" L"\t;" -L"\r\n" L"" -L"\r\n" L"rule EnumItem _EnumItemA" -L"\r\n" L"\t= {_Attribute : attributes} NAME : name \"=\" INTEGER : number \",\" as EnumItem with {kind = \"Constant\"}" -L"\r\n" L"\t;" -L"\r\n" L"" -L"\r\n" L"rule EnumItem _EnumItemB" -L"\r\n" L"\t= {_Attribute : attributes} NAME : name \"=\" _EnumItemInt : intersections {\"|\" _EnumItemInt : intersections} \",\" as EnumItem with {kind = \"Intersection\"}" -L"\r\n" L"\t;" -L"\r\n" L"" -L"\r\n" L"rule EnumDeclaration _Enum" -L"\r\n" L"\t= \"enum\" NAME : name \"{\" _EnumItemA : items {_EnumItemA : items} \"}\" as EnumDeclaration with {kind = \"Normal\"}" -L"\r\n" L"\t= \"flagenum\" NAME : name \"{\" _EnumItemA : items {_EnumItemA : items} {_EnumItemB : items} \"}\" as EnumDeclaration with {kind = \"Flag\"}" -L"\r\n" L"\t;" -L"\r\n" L"" -L"\r\n" L"rule StructMember _StructMember" -L"\r\n" L"\t= {_Attribute : attributes} NAME : name \":\" _Type : type \";\" as StructMember" -L"\r\n" L"\t;" -L"\r\n" L"" -L"\r\n" L"rule StructDeclaration _Struct" -L"\r\n" L"\t= \"struct\" NAME : name \"{\" {_StructMember : members} \"}\" as StructDeclaration" -L"\r\n" L"\t;" -L"\r\n" L"" -L"\r\n" L"rule AutoPropertyDeclaration _APConfig" -L"\r\n" L"\t= \"{\" \"}\"" -L"\r\n" L"\t\t\tas AutoPropertyDeclaration" -L"\r\n" L"\t\t\twith {configConst=\"Writable\"} with {configObserve=\"Observable\"}" -L"\r\n" L"\t= \"{\" \"const\" \"}\"" -L"\r\n" L"\t\t\tas AutoPropertyDeclaration" -L"\r\n" L"\t\t\twith {configConst=\"Readonly\"} with {configObserve=\"Observable\"}" -L"\r\n" L"\t= \"{\" \"not\" \"observe\" \"}\"" -L"\r\n" L"\t\t\tas AutoPropertyDeclaration" -L"\r\n" L"\t\t\twith {configConst=\"Writable\"} with {configObserve=\"NotObservable\"}" -L"\r\n" L"\t= \"{\" \"const\" \",\" \"not\" \"observe\" \"}\"" -L"\r\n" L"\t\t\tas AutoPropertyDeclaration" -L"\r\n" L"\t\t\twith {configConst=\"Readonly\"} with {configObserve=\"NotObservable\"}" -L"\r\n" L"\t;" -L"\r\n" L"" -L"\r\n" L"rule AutoPropertyDeclaration _AutoProperty" -L"\r\n" L"\t= \"prop\" NAME : name \":\" _Type : type [\"=\" _Expression : expression] !_APConfig" -L"\r\n" L"\t;" -L"\r\n" L"" -L"\r\n" L"rule CastResultInterfaceDeclaration _CastResultInterface" -L"\r\n" L"\t= \"$interface\" NAME : name \":\" _Type : baseType \"<\" _Type : elementType \">\" \";\" as CastResultInterfaceDeclaration" -L"\r\n" L"\t;" -L"\r\n" L"" -L"\r\n" L"//////////////////////////////////////////////////////////////////" -L"\r\n" L"// Rule (Declaration -- Branches)" -L"\r\n" L"//////////////////////////////////////////////////////////////////" -L"\r\n" L"" -L"\r\n" L"rule Declaration _SharedDeclarationBranch" -L"\r\n" L"\t= !_Namespace" -L"\r\n" L"\t= !_Variable" -L"\r\n" L"\t= !_Event" -L"\r\n" L"\t= !_Property" -L"\r\n" L"\t= !_Constructor" -L"\r\n" L"\t= !_Destructor" -L"\r\n" L"\t= !_Class" -L"\r\n" L"\t= !_Enum" -L"\r\n" L"\t= !_Struct" -L"\r\n" L"\t= !_CastResultInterface" -L"\r\n" L"\t;" -L"\r\n" L"" -L"\r\n" L"rule Declaration _MemberDeclarationBranch" -L"\r\n" L"\t= !_Function" -L"\r\n" L"\t= !_AutoProperty" -L"\r\n" L"\t;" -L"\r\n" L"" -L"\r\n" L"rule Declaration _Declaration" -L"\r\n" L"\t= {_Attribute : attributes} !_SharedDeclarationBranch" -L"\r\n" L"\t= {_Attribute : attributes} !_MemberDeclarationBranch" -L"\r\n" L"\t;" -L"\r\n" L"" -L"\r\n" L"rule ClassMember _ClassMember" -L"\r\n" L"\t=\t\"static\" as ClassMember with {kind = \"Static\"}" -L"\r\n" L"\t=\t\"override\" as ClassMember with {kind = \"Override\"}" -L"\r\n" L"\t;" -L"\r\n" L"" -L"\r\n" L"rule Declaration _MemberDeclaration" -L"\r\n" L"\t= {_Attribute : attributes} !_SharedDeclarationBranch" -L"\r\n" L"\t= {_Attribute : attributes} [_ClassMember : classMember] !_MemberDeclarationBranch" -L"\r\n" L"\t;" -L"\r\n" L"" -L"\r\n" L"//////////////////////////////////////////////////////////////////" -L"\r\n" L"// Rule (Module)" -L"\r\n" L"//////////////////////////////////////////////////////////////////" -L"\r\n" L"" -L"\r\n" L"rule ModuleUsingFragment _UsingFragment" -L"\r\n" L"\t= NAME : name as ModuleUsingNameFragment" -L"\r\n" L"\t= \"*\" as ModuleUsingWildCardFragment" -L"\r\n" L"\t;" -L"\r\n" L"rule ModuleUsingItem _UsingItem" -L"\r\n" L"\t= _UsingFragment : fragments {_UsingFragment : fragments} as ModuleUsingItem" -L"\r\n" L"\t;" -L"\r\n" L"rule ModuleUsingPath _UsingPath" -L"\r\n" L"\t= \"using\" _UsingItem : items {\"::\" _UsingItem : items} \";\" as ModuleUsingPath" -L"\r\n" L"\t;" -L"\r\n" L"rule Module _Module" -L"\r\n" L"\t= (" -L"\r\n" L"\t\t(\"module\" with {moduleType=\"Module\"})" -L"\r\n" L"\t\t| (\"unit\" with {moduleType=\"Unit\"})" -L"\r\n" L"\t\t) NAME : name \";\" {_UsingPath : paths} {_Declaration : declarations} as Module" -L"\r\n" L"\t;" -; - - vl::WString WfGetParserTextBuffer() - { - return parserTextBuffer; - } - -/*********************************************************************** -SerializedTable -***********************************************************************/ - -const vint parserBufferLength = 165655; // 1882074 bytes before compressing -const vint parserBufferBlock = 1024; -const vint parserBufferRemain = 791; -const vint parserBufferRows = 162; -const char* parserBuffer[] = { -"\xFF\x00\x01\x82\x81\x82\x33\x82\x81\x0A\x06\x81\x88\x81\x81\x24\x38\x3B\x30\x63\x68\x05\x36\x35\x36\x34\x3B\x22\x78\x70\x32\x25\x33\x3B\x39\x35\x37\x6E\x7F\x62\x83\x92\x91\x05\x84\x00\x26\x8C\x8E\x92\x39\x32\x31\x3A\x3A\x65\x24\xA4\x97\x07\x94\x98\x87\x97\x6F\x50\x32\x2F\x30\x3D\x32\x38\x3A\x79\x44\x25\x23\x3C\x31\x32\x39\x30\x74\x1F\xA1\x92\x92\x93\x0B\x92\xA7\x01\xC2\x21\x33\x35\x33\x20\x91\x39\x74\x72\x35\x23\x34\x3F\x36\x39\x21\x61\x6C\x2C\x2C\xA2\x90\x0B\x92\xB3\x51\xE9\x2E\x26\xA9\x38\x8E\x8C\x8E\x1E\xA0\xA4\xBF\x7E\x07\x91\xBB\xB4\x6E\x64\x2E\xBB\x8D\x8A\xA7\xB9\xBB\x06\x80\xC2\x2C\x3F\x33\x33\x35\x29\x0F\xB0\xAD\x35\x84\x3F\xBE\xBA\x81\x42\x1B\xA1\x27\xC9\xC5\x33\xC4\x8B\x8E\x89\x80\xC0\xB2\xB3\xBC\xB8\xBF\x64\x9E\x27\x82\xD1\x80\xB0\xAC\x29\x1C\xF5\x2C\x34\x39\x26\x8A\x9E\x33\x10\xE5\x02\xA4\xA6\xA0\xA4\xD0\xA6\x0F\x27\xB9\xC5\xD8\x31\x34\x36\xBD\x19\xFC\xB1\xAB\xAC\xA1\x96\x82\xE3\x43\x3D\xFF\xD4\x29\x3D\x9F\xB8\xB4\x06\xD0\xC3\x25\xAD\x8B\xD9\xA3\xA3\x49\xF2\xA4\xAB\x07\x94\xED\xD2\xEA\x73\x4D\x16\xC2\x3E\x9B\xB8\xA8\x83\xE7\xD6\x8F\x3D\x98\xEE\xAC\xC4\xA4\x96\x8C\xCF\xE7\xB2\x86\xA8\x29\x30\x75\x54\xAF\xEA\xC2\xFC\xB3\xF3\x81\xE9\x79\x4B\x4E\x1D\x69\x24\x1E\x4F\x7E\xF1\x58\x6E\x7F\x53\xF5\x57\x59\x57\x56\x5D\x72\x11\x12\x1C\x67\x35\x17\x65\x63\x64\x56\x07\x4A\x86\xA5\x4E\x8A\x54\x57\x5E\x56\x75\x6D\x76\xC4\x72\x4B\x42\x41\x27\x96\x5E\x18\x56\x1F\x91\x8E\x65\x5F\xDA\x4C\x51\x07\x49\x33\x9D\x86\x46\x5A\x75\x25\x18\x83\x85\x73\x52\x07\x4A\x8F\x1D\xBB\x4F\x4A\x5A\x3A\x95\x6C\x8F\x76\xDD\x42\x42\x88\x76\xB7\x72\x4B\x6E\x41\x4F\x82\x5C\x19\x19\x30\x7B\x8D\x7C\x53\x27\x83\x47\x8A\x50\x2C\x90\x81\x8B\x50\xD7\x76\x61\x8E\x89\x27\x5B\x94\x94\x44\x12\x54\x46\x47\x8B\xC3\x73\x5F\x93\x40\x4F\x85\x1E\x1A\x85\x4B\xA2\x95\x88\x49\x08\x27\x49\x9D\x40\x72\x96\x89\x12\x62\x73\x54\x07\x4A\xA0\x7C\xB3\x9D\x1B\x9F\x96\x6D\x60\x4E\x1C\x54\x5C\x5D\x90\x49\x80\x43\x40\x61\x9F\x8B\x47\x52\x1B\x94\xCC\x4E\x74\x58\x74\x03\x50\x73\x44\x63\x75\xA4\x83\x5E\x06\x27\x64\xAC\x9D\x46\x43\x70\x44\x19\xA6\x55\x53\x57\x45\x70\x9F\x63\x94\x4A\x02\x27\x74\xA7\xAB\x5B\x30\xB7\x93\x4B\x7F\x02\x67\x7C\x9A\x52\x56\x8A\x8C\x50\x90\x06\x44\xB6\x10\x61\xB6\x6E\x17\x1B\xAF\xB2\xA3\x4C\xA6\x40\xD0\x46\x1E\x55\x11\x68\x81\xB8\x84\x53\xCF\x81\x41\xB6\x57\x6D\x08\x5C\xB2\xAE\x65\x74\x71\x42\x11\x75\x2E\x1E\xA0\x48\x13\x95\x87\x90\x53\xBC\x81\x47\x78\xB9\xE6\xA4\x81\xAB\xA3\x23\x44\xB3\x42\xB1\xE5\xA7\xBE\x1B\xB7\x73\x4C\x07\x4A\xBF\xE3\xB9\xB4\x88\xAB\xFD\xBF\xB2\x41\x12\x66\x3C\xB8\x91\x42\xDE\x40\x08\xC2\xB5\x6E\xBA\x67\xC2\x1B\x66\x3E\x4A\xC2\x8C\x34\x93\xC0\x4F\x19\x16\xF0\xA9\xAF\x5C\x0D\x27\x41\xC9\x40\x4C\x14\x97\xC6\x4C\x0D\xC3\x4D\xC1\xC9\x74\x16\x16\x51\x1A\x61\x17\xA1\x4C\x59\x35\x86\x45\xCC\x13\x69\x0B\xA1\x5B\xC9\x24\x47\x07\x4A\xCF\x01\x4D\x11\x18\x1C\x04\xDB\xA2\xB8\x00\xE2\x6D\x14\x7A\x1C\x3C\xFB\xAC\x81\xD0\x69\x38\x1A\x5A\x69\xAF\xB8\xAD\x98\x59\x06\x27\x49\xD5\xD0\x6F\x24\x1A\x6B\xCC\xEC\x8F\xD8\xD1\xD7\x5F\xD5\x1E\x46\xB2\x46\x07\x57\x1B\xBA\x4E\x92\xCC\xD6\xD7\x53\xA6\xDA\x5B\x19\x88\xAD\x13\x5E\x4D\x06\x78\xDD\x10\xD9\x71\xE7\xD7\x1A\x13\x61\x0B\x69\xD9\x18\x6B\xD7\x9D\xD9\x42\x4F\xBB\xD0\xDD\x19\x72\xCA\xB7\x7C\x1D\x68\x33\x5B\x07\x49\x93\xEF\xD5\xDA\xDF\x57\x3E\x64\x18\x58\x72\x24\x13\xE1\xE1\xC2\xB2\x44\xA2\x41\xA3\xC0\xEB\x63\x1C\x70\x31\x63\xBD\xB3\x22\x76\xB2\x40\xB1\x4E\x25\x17\x1F\x74\x53\x73\x1D\xD2\x48\x1C\x86\x49\xED\xEC\xB3\xDE\x5F\x1B\x90\x6E\x25\x17\xEF\x3F\xB9\xC3\x4B\xEE\xEC\x8A\xAF\x61\x6F\xF0\x00\xC6\x4D\xF2\x13\xAA\x45\x52\xCD\xD1\xC3\xBF\x82\x43\x13\x62\x14\x52\x1E\x1D\x31\xD3\x98\xCC\x56\xD4\xF2\x45\xCF\x40\x35\xD8\xFA\xF4\x45\xC3\xF8\xD3\x40\xDE\x4F\x1D\xEE\x4D\x19\x64\x0C\x11\xE2\x18\x64\x21\x13\xF1\x96\x07\x57\xFE\xFB\x46\x64\x26\xE2\xF2\xC7\x57\x6C\x29\xA4\x02\x20\x30\x9D\x30\x7D\x0C\x66\x04\x4B\xAA\x4D\x30\x6C\x99\x2D\x58\x00\xE7\x3A\x24\x4F\x3E\x20\x29\xD5\x60\x5F\x1F\xEA\x62\x20\xDE\x52\x01\x0D\x34\x14\x28\x23\x63\x05\x0C\x1C\x24\x40\x62\xB2\x2F\x4A\x20\x4F\x5C\x82\xB2\x7F\x76\x6A\x7A\x62\x23\x80\x01\x20\x30\x07\xF7\x00\x0B\x37\x2A\x2B\x51\xE1\x64\x27\x03\xE7\x38\x35\x8A\x5B\x26\x5C\x2C\x82\x3A\x0B\xFF\x13\x64", -"\x83\x05\x8D\x87\xEF\x60\x89\x0E\xA3\x27\x85\x80\x29\x84\x4A\x75\x12\x0E\x1B\x25\x8C\x29\xD1\x43\x23\x74\x53\x14\x48\x15\x1C\x29\x28\x65\x43\x7B\x7C\x02\x35\x67\x14\x68\x06\x28\xF8\x75\x87\x86\x3E\x2B\x89\x49\x27\x26\x38\x2A\xB2\x21\x5B\x00\x10\x38\x62\x2C\x2E\x8A\x00\x83\x88\x8C\x01\x22\x8F\x83\x5C\x26\x83\x82\x49\x25\x79\x73\x90\x41\xD2\x4B\x63\x2E\x5B\x46\x26\x90\x53\x17\x0D\xCE\x11\x26\x35\x06\xA4\x25\x89\x00\x0F\x49\x22\x8B\x98\x0C\x37\x90\x57\x31\x01\x34\x09\x6F\x36\x76\x8E\xD6\x44\x7B\x43\x02\x34\x08\x4F\x51\x05\x0F\xB0\x29\x09\x81\xF0\x63\x78\x1C\xD0\x32\x94\x38\x24\x96\x94\xA8\x8B\x82\xA6\x4C\x2D\x79\x81\x0D\x7C\x0A\x72\x19\x0E\x25\xA3\x24\x01\x93\x3D\x91\x93\x0C\x93\x2C\xFE\x0A\x21\x94\x06\x94\x6B\x6E\xC3\x66\x56\x41\x4A\x9C\x55\x27\x09\x65\x93\xFB\x50\x99\xA0\x03\x55\x99\x9E\x0E\x9C\x55\xF7\x65\x4D\x35\xE5\x0B\x8A\xAC\x08\x9A\x9A\x26\x8E\x6C\x00\x55\x0B\x2D\x5C\x83\x7B\x87\x02\x2E\x64\x4B\x5D\x72\x36\x30\x63\x47\x8E\x19\x61\x22\x3A\xB0\x62\x67\x5D\xAD\x76\x7A\xF2\x89\x0F\x4F\x25\x9C\x0D\x3E\xB4\x61\x9E\x00\x16\x0A\x3E\xF4\x0C\x9E\x55\x87\x6A\xA0\xFB\x81\x2E\x3D\xF4\x28\x92\x00\x17\x0A\x39\x45\x50\x3C\xDB\x24\x21\x1C\x6D\x89\x27\x44\x0D\x2F\x21\x44\x1F\x5B\x4C\x68\x85\x07\x24\x1F\xA1\x21\x19\x6A\x47\x5A\x32\x57\xA2\x20\x19\xA8\x4C\x47\xD5\x62\x88\x90\x3B\x4E\x20\x2F\xA6\x0E\xC0\x43\x86\x39\x81\x06\x39\xA3\x2C\x2E\x24\x4C\x2F\xA3\x21\x97\xA3\x08\x3E\x67\x1E\x29\x1E\x73\x25\xA6\x81\x37\xA3\x25\x2D\x2F\x25\x19\x3F\x96\x20\xA6\xAB\x2B\x31\x44\xAC\x8C\x4A\xC8\xAA\xA7\x32\x21\xA6\x20\x57\xBC\x78\x1B\x39\x47\x6F\x9A\x28\xA0\x27\x12\x8C\x3D\x05\xEE\x9C\x48\x90\x06\x93\x20\x86\x88\x29\x56\x49\xA0\x27\x39\x1D\xA9\x21\x78\x61\x08\x58\xBB\x22\xAD\xA0\x24\xAE\x4E\x29\x62\x21\xC3\x34\x3D\x23\x41\xA5\x3C\x2C\x19\x81\x21\x5C\xF3\xA3\x83\x9F\x36\xAC\x36\x65\xAE\x0D\x5E\x81\x2B\xAE\x90\x09\x87\x0C\x2A\x58\x2B\x5B\xF9\x6F\xAB\xAE\x21\xAC\x82\x87\xA1\x4C\x89\x45\x83\x21\x22\xA3\x0E\xB1\x69\x07\x0E\xF9\x3E\x24\x23\xC9\xAB\x7D\xB2\x02\x45\xB3\x58\x88\xB6\x4E\x2B\x82\x23\x74\x65\x19\x21\x18\x79\x20\x7E\x0B\xAE\xA8\xB0\x5E\xB7\x26\x65\xF4\xA8\xB2\x0B\xA7\xAA\x20\x86\x91\xB5\x0B\x9E\x91\xB0\x00\x03\xB3\xB7\xAA\xB9\xB3\x3B\xA0\x2C\xA9\x81\x0E\xA9\x70\x8E\x83\x25\x71\xC7\xB9\xB5\xBA\x96\x85\xB9\x02\x2C\xA8\x50\x33\x9E\x80\xB1\x52\x2C\x2A\x91\xBB\x8D\x84\x1C\x3C\x0D\xA2\x81\x26\x38\x46\x2A\x5C\x63\x37\xB1\x6D\x84\x27\x3F\xBB\x55\x3E\x42\x97\x5F\x21\x2C\x36\x18\xB9\x20\xDA\xA1\x9A\xD1\x09\x20\x3A\x21\x2A\x2C\x2D\xDF\x57\xAB\x40\x57\xA9\x80\x46\x65\xA4\x24\xAB\x90\x33\x7F\xE6\x90\x9A\x01\x27\x26\xC1\x01\x3C\x27\x7C\x7C\xBA\xC1\x72\xAD\x28\x9A\x5B\x66\x21\x86\x8D\x50\x24\x32\x19\x31\x30\x15\xC0\x3B\x70\xEE\x0E\x75\x80\x04\x5A\xB8\xB3\xA6\x42\x88\xAD\xA7\x82\x18\x80\x02\x30\x6A\x2B\xC5\xAC\x6E\x0F\xB7\x80\x01\xB8\x9C\x02\x8D\xA3\x60\x05\x34\x32\x89\x8C\x35\xC6\x00\x06\x90\x56\x3E\xC6\x22\xF6\xB2\x26\xC5\x9B\x35\xBF\xB7\x66\xB8\x24\x81\x29\xBE\x42\xEB\xBF\xC2\xA4\x75\x3A\xC8\x68\xBC\xA2\x20\x31\xB3\xA6\x27\xA4\x36\x20\x2E\xD4\x68\x35\x73\x0A\x34\x6B\x2E\x32\x0E\xD8\x21\x86\xB7\xB5\x4E\xC8\x55\xCA\xA6\xC8\x92\x1C\xCB\x20\x5E\xCE\x54\x98\xE2\xC9\x79\x32\xEA\x77\xAE\x24\x57\xC9\x40\x2F\xA2\x0D\xA9\x1C\x9A\xBF\x4C\x2F\xCE\x40\x71\xC7\x35\xD4\x2B\x35\xCE\x66\xCD\x9C\x6B\xA4\x4B\xB0\x00\x3B\xA8\x3C\x7E\xB2\x0F\x5C\x02\xD1\x20\x42\xF4\x0B\xCE\x87\xC4\xCD\xA2\x96\x8D\xD1\x86\x65\x0B\x4A\x17\x4A\x8F\x3F\x14\xD0\x00\x4B\xD8\xD3\xCC\x8B\x5B\xD0\x9E\xCA\x2E\xB5\x80\x30\xB2\xB6\xB4\xA4\x0E\x6D\x93\xD3\x34\x2A\xC5\xD1\xCC\x99\xC9\xD7\x9D\x8B\xDA\x29\xFB\x80\x07\xB9\x50\xA1\x9C\xE2\x75\x3A\x38\x19\xF9\x56\xD7\xC0\xD1\xBA\x48\x10\x9F\x49\xE4\x1A\x77\x5B\x19\xC3\x21\x86\xA9\x7F\x87\x03\xE3\x24\xC9\xC8\x25\xD8\xAB\x48\xD2\x21\xA7\x8A\xDF\x1F\xD8\xC4\xDA\xE6\x2C\x51\xDA\x81\x13\xDD\x8C\xA1\x68\xC3\xD1\x34\x75\x3B\x55\xE6\xA9\xCD\x01\x2A\xAD\x4E\xEC\xC3\xC3\xE8\x35\x38\x3C\x16\x81\xDC\x41\x7E\xCC\x55\x36\xCE\x5B\xDD\xF8\xCE\xDE\x62\xC9\x41\x20\xBE\xA1\x3B\x3C\x7F\xB8\x58\xC0\xB5\x76\x82\x66\xC2\x27\xB3\x2B\x42\xBE\x57\x22\xD9\xC1\xEF\x0C\xE2\xE0\xB5\x82\x21\xF3\x06\x4C\xD7\xAB\x35\xDD\x53\xF7\xD7\xE1\xC7\xEE\x0C\xDB\x80\x2B\x09\xC6\x1F\xF0\x59\xC8\xED\xD3\xE5\x92", -"\xC0\x06\xDB\x73\x3D\xD3\xCA\x87\xEA\x68\x9F\x2E\xE7\xE4\x79\x26\x3E\xD8\x6A\x3C\x3C\xA4\x2E\x3E\x48\x8C\x3A\xDC\x00\x4F\xC7\x42\x7F\xCD\x2B\xE7\x6F\x0B\x3E\x4F\x3E\xE2\x0E\x6B\x65\xD9\x20\x19\xDC\x26\xFF\x3A\xEE\xBD\x06\x4A\xED\x3D\x4D\xE0\xEA\x45\x40\x66\x20\xAE\xDC\x7A\x0E\x53\xFB\xBE\xBD\x9D\x47\x3F\xFC\x11\xA4\x3F\x16\x22\xEB\x90\xE8\xE6\xDB\xA3\xD5\xEC\xEC\x03\x45\x43\x81\x5A\xE4\x0E\x3C\x80\x05\x66\x28\xD1\xD7\x42\xE8\x90\xEF\x37\x04\x46\x40\x59\xE4\xC8\x1D\x2E\xE0\xE7\x05\x6F\xE8\x00\xF6\x31\xEC\xE0\xD6\x5A\xEC\xBA\xD4\xE8\x3D\x0D\x51\xE1\x8B\x5E\x29\x5C\x28\xD6\x23\x00\x27\x38\xF2\xC9\xE5\x03\xA8\xC3\xD0\xF6\x46\x5D\x40\x46\x84\x14\x46\xF2\x3A\x02\xC2\x20\x59\xA1\x2C\x57\x99\x40\x94\xD0\xD2\xE2\x0E\xF9\xD2\xA9\xBC\xA4\xF5\xE9\xB9\x05\x7A\x20\xB9\x61\xBF\xE4\xB0\xF2\xE0\x20\xE9\xAB\xCD\x6D\xB6\xF5\xEB\x88\xF2\xBE\xD1\xD6\x85\xD5\x00\x03\x75\x9F\xE0\xB5\xF9\xF1\xB5\xBE\xE8\x9F\x89\x21\xEE\xCD\xFF\x4B\x91\xF2\xE5\xE0\x90\xC8\xE2\xA4\xAC\xF2\xFB\xC8\xE1\xF1\x42\x0D\xE2\x9C\xC4\xDF\xF3\xE2\x40\xF2\x27\xF6\x01\x33\xFA\xE4\xF3\xB7\xBA\x5F\x9D\xD8\xBA\xC2\xFD\xFA\xEB\xBB\xF1\xF7\x84\x06\x3B\xED\x09\x4D\xEF\x3F\x43\x90\x01\x14\x54\xFC\x69\xD0\x42\x74\x44\x71\x65\x0B\x36\x10\x0D\x38\x66\x09\x1F\x7B\x6B\x55\x55\xD0\x77\x7D\x00\x0C\x69\x04\x70\x00\x06\x71\x69\x31\x71\x81\xED\x79\x10\xC9\x61\x31\xC3\x61\x10\x52\x24\x25\x67\x79\x7F\xBE\x72\x10\xC2\x5C\x62\xC2\x46\x51\x0F\x8C\x45\xF4\x7D\x7B\xF0\x63\x74\xC0\x7C\x11\x25\x87\x52\x1C\x88\x82\xEC\x72\x70\x0E\x83\x81\xDA\x7F\x82\x28\x2A\x24\x32\x86\x7C\x02\x74\x78\xF0\x74\x16\xFC\x76\x26\xE4\x7C\x7B\x23\x7D\x78\x82\x78\x83\x5A\x2A\x83\x1A\x59\x26\x8C\x11\x60\x20\x52\x82\x24\x58\x84\xF9\x31\x83\x4B\x8B\x52\xDF\x2C\x75\x03\x1C\x75\x64\x49\x17\x53\x2B\x7D\xB8\x12\x4E\x94\x28\x80\x87\x4A\x66\x0B\x84\x6F\xC2\x60\x25\x02\x11\x86\x34\x81\x81\x36\x85\x73\x5E\x87\x38\x68\x85\x28\x74\x22\x70\xA7\x71\x10\x57\x59\x33\x96\x10\x7D\x0E\x72\x87\x6D\x07\x81\x4D\x52\x10\x38\x7E\x61\x67\x80\x27\x69\x86\x28\x7E\x8E\x5C\xEF\x71\x6C\x4C\x1A\x67\x00\x0F\x52\x94\x25\x37\x21\x81\x6F\x2D\x80\x7D\x8C\x8E\x88\x86\x25\x37\x9C\x52\x10\x45\x48\x46\x8C\x29\x2A\x4A\x14\x89\x7A\x25\x88\x7E\x2A\x18\x37\x78\x72\x64\x15\x89\xA2\x87\x28\xA4\x8E\x7E\x01\x15\x78\x8B\x81\x8A\x7C\x85\x37\x4F\x70\x00\x19\x66\x28\x84\x44\x16\xC8\x73\x3A\x8F\x8A\x18\x75\x6D\x28\x24\x2E\x83\x8A\x87\x64\x0D\x54\x29\x4B\x73\x3D\x0C\x48\x85\x02\x1C\x75\x9F\x69\x7F\x29\x7A\x2D\x69\x84\x52\xF5\x77\x1C\x4E\x64\x7B\x04\x8A\x70\x14\x6C\x27\xD0\x8A\x82\x09\x84\x86\xF3\x61\x7C\x62\x70\x72\xD8\x80\x2A\x6B\x8C\x30\x0F\x79\x7D\x6E\x8D\x8C\x71\x4F\x8C\xE2\x8D\x72\xAC\x8F\x72\x3F\x8C\x14\xCA\x43\x10\xCA\x4E\x16\xA9\x20\x3F\xAC\x24\x35\xDF\x25\x62\x00\x07\x62\xB0\x6A\x62\xC9\x45\x2A\x69\x88\x2A\x5C\x16\x8F\xC6\x4E\x2A\xDF\x21\x89\x00\x03\x82\x33\x63\x2A\x00\x97\x2B\xF5\x82\x4B\xAD\x28\x15\xDF\x28\x8A\x01\x1C\x22\x40\x5D\x79\xED\x5F\x79\x00\x0F\x2D\xD6\x28\x90\x0A\x9F\x31\x64\x1A\x8F\xC6\x28\x2C\x5D\x4B\x2C\x1E\x5F\x84\x01\x1A\x55\xAB\x76\x8D\x63\x70\x00\xD2\x2C\x34\xD5\x24\x77\x08\x9F\x59\x62\x1E\x89\x9E\x45\x71\x2E\x93\x2D\x31\x92\x78\x42\x74\x06\xFA\x46\x93\x17\x48\x93\x2F\x94\x2D\x11\x16\x2D\x76\x78\x77\xFD\x80\x3F\x0B\x52\x94\x3A\x95\x94\x74\x70\x8C\xDF\x6C\x94\x30\x9E\x94\x3C\x92\x7B\x00\x08\x7F\x13\x5F\x6F\xD7\x89\x93\x72\x0D\x2D\x2C\x53\x63\x22\x92\x82\x49\x96\x6C\x01\x4F\x46\x47\x3F\x92\x5E\x9E\x84\x09\x19\x7A\x5B\x51\x95\x67\x9A\x65\x6E\x05\x79\x17\x28\x90\xF2\x6C\x56\x2E\x8F\x8D\x2A\x71\x30\xF1\x2A\x14\x72\x9C\x18\x50\x98\x8E\xD1\x20\x97\x7D\x96\x11\x2E\x7B\x5D\xDF\x6C\x77\x2E\x90\x97\xD1\x86\x53\x4E\x6E\x06\x20\x19\x07\x6D\x09\x33\x18\x9D\x5D\x87\x70\x2F\xFA\x2B\x98\x46\x53\x8D\xEA\x55\x64\x8F\x70\x20\x02\x16\x99\xF2\x2A\x8D\x63\x82\x89\x65\x8E\x8D\x19\x9E\x99\x7A\x97\x99\xE3\x86\x80\xE5\x85\x3B\x14\x8E\x79\xA8\x99\x98\x7B\x90\x12\x87\x89\x5D\x89\x87\x98\x62\x30\x9A\x4A\x12\x86\x68\x52\x10\x1B\x14\x50\x52\x42\x6A\x88\x9A\x9B\xB4\x92\x70\x46\x8C\x76\x3D\x28\x4F\xB2\x9A\x2F\x13\x90\x8B\x00\x02\x53\xB3\x97\x41\x19\x71\x10\xCD\x34\x9C\x6E\x0C\x2A\x02\x84\x8D\x9C\x94\x16\xD3\x90\x00\xD5\x90\x97\xE4\x6A\x35\xBE\x96\x68\xFA\x7D\x9D\xCD\x38\x30\x4B\x66\x95", -"\x10\x7E\x93\xA2\x2C\x9D\x06\x31\x10\xE8\x90\x4D\x0E\x80\x1B\x6C\x04\x15\x91\x13\x5B\x11\x1E\x47\xCE\x37\x30\xCF\x43\x62\x08\x9F\x20\x65\x07\x9F\xE6\x21\x39\x05\x8A\x32\xFC\x9D\x91\x2B\x8F\x91\x65\x94\x12\x0E\x8F\x30\x74\x73\x9F\x61\x16\x9F\x47\x13\xA0\x15\x84\x8E\xF0\x96\x06\xD6\x2F\x97\x05\xAA\x57\x07\xA2\x93\x2B\x80\xA0\x02\xA9\x9F\x1B\xAC\x58\x1D\xA2\x78\x85\x96\x7E\x8F\x42\x4E\xAD\x1E\x43\x07\x99\xA0\x38\x60\x87\x84\x80\x9F\x14\x3D\x31\x23\x67\xA2\xDC\x54\x12\x47\x9A\x31\x65\x0C\x31\x00\x83\x62\x75\x80\x00\x6C\x9B\x92\x32\x19\x89\x01\x15\x44\x2C\x3D\xA2\xDB\x82\x52\x2F\xA4\x12\x44\xA0\x00\x46\xA6\x32\x01\x86\x95\x5F\x74\x4F\x53\x2D\x80\x11\x8C\x32\xF3\x4C\x4E\x1A\xAC\x14\x0E\x88\xA5\x2F\x3C\x4E\x3F\xA1\xA4\xDF\x69\xA3\x24\x38\x87\x47\x1C\x06\x6A\x98\x55\x02\x1A\x92\xDF\x68\x8C\x01\x1C\x75\x42\x34\x34\x0C\x4A\x79\x06\x14\xA7\x6B\x0C\x79\x73\x1E\xA6\x00\x00\xA7\x43\x3C\x2A\x61\xAB\xA6\xAA\x7D\xA6\x3F\x32\x10\x71\xAC\x2A\x0E\x87\x07\x2C\x1F\x10\x62\x0E\x1B\x92\x90\x98\x84\xAA\x7D\xDF\x2B\xA5\x66\x9B\x95\x91\x60\x6D\xE2\x91\x10\xD4\x66\x38\x3A\x42\x36\x4D\x01\x35\x53\x36\x90\xD0\x41\x96\x4A\xA9\x3A\xB1\x67\x4E\x9C\xAE\xA9\x6E\x08\x8F\xD0\x4E\x91\x4B\xAE\x34\x87\x7D\xA9\x52\x39\xAA\xA0\xA5\xA3\xED\x86\x98\x73\x13\x8B\x19\x6A\x38\x5F\x36\x9E\x02\x1C\x71\x9A\x5F\x89\xB7\xA7\xA9\x63\x3B\x38\x08\x9D\x06\x7C\x3F\x67\x37\xA3\x12\xB8\xA4\xA8\xC7\xA2\xA9\x24\x1B\xAC\x96\x33\x25\x7F\xA8\xA9\x48\x18\x06\x7A\x82\x4E\xBA\xAD\x37\x73\x35\x37\x42\x76\x06\x6A\x35\x7B\xB8\x50\x57\xCC\xAB\x38\x8D\x3F\x37\xD0\x5F\x39\x17\x2E\xAC\x4C\x48\xAD\xC7\xA5\xAE\x8F\x38\x06\xD3\xA0\x00\x78\x8D\x06\xD0\x79\x8B\x02\x1E\x3F\xA8\x3B\x6B\xBF\xAF\x6E\x49\xAC\x82\xA5\x97\x97\x55\x44\x4D\x01\x18\xAF\xA9\x37\x66\xAB\x96\xA0\xD8\x7E\x9A\x37\x88\x8B\x02\xB0\x00\x04\xBA\xAF\xCB\x5E\x06\xBC\xA1\x10\xBE\xA1\xB1\xF5\xAD\xB0\x0F\xB6\xB0\xEC\x88\x81\xB7\x99\x9C\x09\x10\x3B\xB2\x3C\x6E\x9C\x43\x62\xD9\x9B\x99\x74\x00\x7D\xA2\xAE\xB0\x21\xB0\x1E\x91\xA5\xAB\x28\xA3\x12\xE8\x70\x00\xC7\x3D\x3B\x42\x2D\x45\x41\x40\x96\xCA\x99\x77\xFE\x8D\xAA\xB8\x33\x7C\xBC\x36\x15\x35\xB4\x24\x2D\xBC\xB1\xAD\x8F\x8E\xE7\x7E\xB3\x21\xBE\x3B\xC0\x37\xB3\xB9\x27\x9C\xCC\x8C\x7D\xBA\x37\xAF\xC8\x3A\x69\xCB\x30\x4D\x13\xB0\x00\x15\xB9\x58\xD0\x71\xB3\x33\xB8\x68\x55\xB4\xAB\x44\xB0\x00\xB6\xAE\x9E\x7F\x47\xAF\xD1\x3C\x4E\xAC\x2A\xA7\xCA\x80\x6A\x9A\xA5\x2F\xCA\x93\x5A\xDB\x3C\x4E\xDF\x34\x07\x69\xB3\xA8\x22\x5C\xB6\xE9\x63\x12\x64\xA0\x00\x70\xB8\x3E\x18\x62\xAC\x23\x55\x8D\xE2\x30\x50\x7D\xBC\xB4\xC3\x1C\xAA\x23\x63\x17\x7B\xB5\xB8\x43\xBF\x87\x45\xB1\x8C\x38\xA4\xB8\xD9\x34\x5A\x86\xBA\x14\x0E\x8F\x06\x93\xBB\x3D\xC8\xA3\xA6\x92\xB7\x3E\x95\xB0\x12\xD0\xA0\x00\x99\xA9\xB7\x22\x13\x5D\xFA\x30\x78\xF0\x32\x3F\x4A\x35\x3F\x8D\xB8\x88\x04\x1D\x35\x93\x94\x12\x41\x87\xBA\xEF\x3D\x3F\xD0\x5D\xBA\xB6\x9F\xB8\xDF\x68\x64\x02\x16\x40\x06\x29\x40\xC1\x30\x91\xEA\xAE\x76\x1A\x97\x59\x86\x5C\x9B\xC0\x5C\x8D\x76\x90\x7D\x88\x96\xBC\xAB\x5B\xAF\x03\x76\xA1\x12\x86\x8E\xB7\x87\x9A\xBD\x2D\xBB\xBC\x57\xBC\x02\x71\xBA\x1C\x3E\x10\x09\x74\x99\xC5\xB9\xBD\xCF\xB1\xB1\xC3\xBF\x0F\xCD\xB2\xBE\xCA\x59\x58\xA1\xB4\x15\xDE\xBF\x86\x9B\xA7\x78\xCE\xB9\xBE\x76\x26\xA3\xB8\x90\xBF\xE8\xB6\x41\x7B\xBC\xA6\xC9\x13\x5B\x1C\x3A\x17\x51\x81\xAE\x94\x51\x10\x1C\x4E\x41\xFF\x31\x42\x23\x40\x2C\x1E\xAD\xAF\x0A\xA3\x44\x7B\x80\x00\x2A\x4C\x31\x69\xA3\x60\x02\x14\x1E\x67\x0A\x16\x1A\x81\x87\x0E\xCC\xBF\x9F\xBE\x06\x4D\xA5\x44\x14\xCA\x16\x42\x0F\x3B\x79\x1C\x16\x17\xC1\xA3\x19\xCB\x42\xDF\x24\xA7\x03\x14\xA7\x15\x12\x88\x5F\x8B\x81\x27\xC0\xC1\xF2\x91\x81\x2D\xC1\xC2\xE5\x25\x3F\xB9\x42\x65\x04\x42\x10\x33\x47\x46\x64\x65\xB7\x09\x1B\xB6\x4F\xB6\xBD\xEE\x2C\xC3\x08\x49\x44\x21\x48\xBB\xF8\x5D\xB1\x64\x1D\xC1\x46\xCE\x43\x15\x11\x42\xDB\x6D\x8E\xAE\x80\xA3\x28\x46\xC4\xC0\x93\x45\x09\xC3\x9A\x09\x9C\xB3\xFF\x06\xAF\x01\x19\x45\x74\xBC\x45\xDF\x4E\x9F\x2B\x84\x93\x53\x2A\x2F\xD3\x49\x10\x58\x4A\x45\x64\xC5\x47\x23\x6A\xB6\x22\x88\xB7\xFA\x70\xC6\x00\x02\xC6\xDD\x45\x92\x4A\xCF\x6B\x02\x1D\x56\xFA\x7B\xB7\x63\x45\x46\x64\x0E\xC3\x38\x47\x8C\x76\xB9\x90\x74\xCE\xA8\x61\xCB\x56\x70\xCC\x62\xF1\xAC\xA6\x8A\xB0\x50\x81\x4C\x47\xA2", -"\x9D\x9B\xA4\x9D\x8D\x00\xB3\xB8\x09\x1A\x47\x2D\x20\x81\xD2\xBD\x86\xD5\xBA\xC9\x36\x32\x10\x93\xC4\x07\x16\x42\xC7\x01\x1B\x18\x6E\x80\x7D\x80\xC2\x5E\xB5\x9B\xC4\xBA\xBA\x9F\xB6\x44\xCA\xE2\x51\x69\x74\x93\x89\xB2\xCA\x71\xB4\xCD\x22\x91\x65\xBE\x57\xB5\xCA\xBD\xCE\xB2\xC9\xA2\x12\x08\x93\x49\x74\x0C\x48\x7E\x68\xB8\x24\x84\x16\xC5\xCA\x48\xC7\xC8\x06\x8D\x4E\xB4\x59\x9B\x6C\xE2\x46\xCC\x54\x9C\x76\x57\xBF\x53\x12\xA8\x9F\x68\x09\xC9\x29\xA0\xC3\xD6\xC5\x49\x74\x7E\xC4\x14\xB8\x40\xF8\x1B\x1A\x21\xA4\xA0\x2F\xC8\xC1\xE1\xC6\x94\x00\x5A\xB3\x4A\x9E\x78\x83\x87\xC5\x61\xCE\xCC\xD7\xC0\x82\x2E\xA9\xB8\x50\xB6\x3C\xA1\x43\x4A\xFC\x47\x4A\x69\x09\x4A\xD0\x45\xBE\x38\x9D\x4A\xAF\x4C\x06\x00\xD4\x90\x3D\x1E\xCB\xEF\x90\x00\xB8\x4A\x4B\x74\x7C\xBB\x05\x78\x14\xF7\xC3\xCD\xFF\x07\xB5\x0F\xD6\x2D\x38\x90\xBC\xF5\x50\xD1\x47\x84\xB6\xFB\x99\x49\xB9\x49\xA1\x54\xC6\xB4\x24\x18\xD1\x23\xD4\x77\x29\xBA\x11\x6F\x00\x13\x03\x94\x06\x0B\x53\xBB\xC0\x4D\x13\xC7\x4D\xC8\x33\x6A\xCC\x0B\x90\x84\x26\x87\x8F\xAE\x25\xC6\x2C\x64\x91\x57\x99\x15\x17\x92\x85\xC4\x43\xD3\x11\x9A\xC7\x03\xD2\xCC\xDF\x61\x8F\x02\x1C\x4C\x0C\x4E\x4C\xDF\x28\xA4\x5C\xCB\xC0\x9E\x46\xC7\xCD\x46\x06\xD8\x49\xD4\x61\xB3\xB6\x58\x2B\xD3\x0C\x49\xC7\x3E\xD7\xD3\xF9\xCB\xCC\x5D\xD0\x83\x0E\xDF\xD5\x6F\xC6\x92\x60\xBE\xB8\x62\xBC\x45\x44\xDD\x7F\xDB\x40\xD6\x36\xD7\x6C\x4A\xD5\xC2\xF4\xC3\x4E\x16\x6F\x2D\x10\x66\x10\x7B\xD2\x61\xF3\xCE\x44\x02\x14\x4E\x00\x60\x4D\xA8\xC0\x00\x85\x59\x62\x9D\x97\xBD\xF2\x4F\xA5\x32\x38\xBC\x36\x6A\xBC\x0C\x89\xD8\x45\xCB\xD8\xEB\x4D\xD8\x07\xBC\xA1\x09\xBD\x57\x0B\xB4\xC4\x10\x49\x4E\x8C\xD3\x25\x8E\xD1\x64\x62\x9A\xCF\x9C\xD7\x1E\x59\xA6\xD9\x1B\xBC\xD6\x55\xCF\xBE\x1A\x97\xDA\xA0\xDD\x83\x75\xDF\x4F\x9B\xCE\xD9\x95\xD3\x25\xD6\x20\xD4\x53\xAC\x4E\x1E\xB5\x2C\xE9\x43\x50\xFC\x41\xDA\x0A\x88\xC9\x28\xBA\x9C\x08\x54\x50\x61\x1E\xC9\xAC\x99\xD9\x34\x71\xCA\x24\x19\xB2\xC5\xDF\xDB\x02\x76\xC7\xF0\xC2\x6B\x02\x73\xDC\x1F\xBD\xDB\x09\x5D\x4F\xB0\xD1\xB6\xAB\xDA\xB7\x00\x5F\xDC\x3B\x31\xAA\x39\xB3\x96\x06\x5B\x95\xE0\xDC\x06\xEE\xC3\xDB\xA3\xA9\x62\xF1\xCF\xD1\x39\x6A\x19\x02\x1F\x50\xBE\x1F\x81\x17\x22\x74\xEB\x99\x33\x43\x42\xD1\x0E\x50\x51\x8C\x76\x95\x58\x9D\xB6\x22\x1E\x06\x27\x10\x04\x7B\xDD\x6D\x27\x17\xE0\x07\xE3\x17\x73\x18\xE0\x27\x1A\xE0\x64\x1C\xE0\x09\x1E\xE0\x4C\x10\xE1\x06\x12\xE1\x32\x1A\xC2\x02\x14\xA7\x45\x08\x05\x50\x05\xE0\x02\x1B\xD7\x2F\x0E\x05\x09\xE4\x16\x18\xE1\x10\x74\xA1\x04\x44\x04\x04\x1E\xE1\x10\x20\xEB\x02\x01\x0D\xE0\x24\xE9\x79\xA4\xC5\x05\x42\x0F\xE2\x09\x16\xE3\x00\x0D\x02\x2B\xE0\x00\x73\x15\xE2\x00\x04\xA7\x4D\x05\x05\x4C\x0B\xE3\x20\xEA\x02\x3E\xED\xE3\x32\xEC\x81\x49\x06\x05\x44\xE2\x10\x2F\x0F\x02\xBE\x68\xE4\x09\x10\xE4\x4F\x04\x04\x38\xE3\x10\x38\xE5\x02\x3F\xA3\x17\xF1\xA5\x05\x4E\x09\x04\x4F\x0E\x04\x57\xE2\x10\x38\xE6\x02\xB3\x89\xCB\xD4\x97\x30\x4E\x04\x05\x45\x02\x05\x53\x05\x04\x43\x04\x05\x60\xEE\x04\x4D\xE1\x10\x2F\x0C\x07\x7A\xA3\x17\x75\xE0\x00\x4C\x05\x04\x2E\x7F\x02\x3C\x0F\x02\x3D\x0C\x88\x7A\xEF\x60\x02\x17\x04\x7E\xED\x8E\x2F\x0E\x03\x82\xEC\x64\x85\xE9\x10\x7B\xDC\x04\x54\x0B\xE7\x80\xE0\x64\x8F\xEC\xD7\x87\xE3\xE9\x86\xE6\xE7\x3E\x0D\x68\x97\xE3\x10\x7B\xD5\x04\x51\x0F\xE7\x3D\x02\xE8\xDD\x9F\xE9\x1F\xE7\xAF\x89\xE1\xB6\x2F\x01\x02\x82\xED\xA4\xC1\xA9\x10\x19\x61\x04\x53\x03\x05\x49\x07\x04\x74\xEB\xE9\x00\x02\xE8\x2E\x65\xA1\xC9\xDE\x92\x41\x09\x04\x7D\xE4\x04\x5F\x04\x05\x48\x05\x04\x4E\x0F\xE7\x3F\x0F\x02\x3F\x00\x49\x20\x32\x32\x02\x11\x05\x55\x05\x04\x53\x02\xE7\x61\xEF\x05\x4D\x01\x04\x52\x0B\x04\x94\xEF\x03\x70\x46\xD7\x80\xD1\xC6\x43\x0F\x04\x50\x05\x04\x5F\x04\x04\x45\x0C\x04\x49\x0D\x04\x49\x0C\xE6\x52\x0B\xE7\x3A\x0A\x03\x76\x7C\xE5\x28\x98\x78\x4F\x0C\x04\x61\xE3\xE6\x01\x18\xE3\x3A\x0A\x8F\x51\x56\x7F\xA4\xC5\x04\xEC\xE3\xEE\xF8\xE2\xE6\x27\x18\xE3\x3B\x0F\x40\xF4\xEB\x96\xF5\x1F\x04\x4D\x09\xED\xFA\xE0\x00\x38\xEC\x02\xC8\x72\xE5\x75\xAA\x24\x4F\x04\x05\x11\xF8\xE3\x2E\x0C\x7F\x85\x4B\x82\xE4\xE8\xEC\x5F\x0A\xED\x52\x01\x04\x59\x04\xE9\x5B\x01\xB3\xBE\xE8\xB0\x88\x78\xEF\x6F\xE3\xF2\x52\x05\xF2\x27\xFA\xEB\x2F\x0D\x05\xC5\x5F\xF1\xFD\xA1\xF2\x4E\x0F\x05\x42\x05\xF2\x43\x05", -"\x04\x94\xEB\x07\x18\x00\xE3\x5C\xA1\x81\x43\x0E\xF2\xE6\xED\xF3\x41\x0F\xF3\x94\xED\x07\x19\x04\xF4\x32\x17\xB5\x3A\xFC\xF3\x3E\xFB\x04\x45\x0A\xE9\x90\xEE\xE4\x28\x0C\xD4\x01\x1F\xEC\x09\x15\x44\x47\xFF\x04\x2F\xFA\xF4\x43\x06\xF5\x58\xF8\xE9\x76\xE9\x02\x95\x35\xE1\x64\x1B\xE7\x41\x0A\xF1\x07\xF2\x10\x40\x0C\x01\x50\xF4\x12\x42\x74\x05\x59\x05\xEE\x5F\x06\x05\x4F\x09\x04\x44\x0E\x72\x76\x06\x43\x64\x0D\x01\x75\xF3\x12\x0E\x88\xF7\x7A\xFF\x04\x42\x0A\x04\x70\xE4\x05\xA1\xB8\xB9\x6A\x09\x2A\xA4\x6A\xC3\x31\x41\x4A\x79\xF6\xEE\x49\x0B\xE6\x6D\xE6\x04\x4B\xF5\x04\x42\x7C\x89\x89\x6F\x01\x85\xF2\x12\x40\xD8\xF8\x98\xFB\xE6\x3E\xE4\xA7\x37\x40\x02\xA3\xF0\x6E\x56\x96\xFA\x5F\x05\x05\x99\xF4\x05\x2E\x75\x07\x37\x41\x02\xAD\xF8\x90\xB0\xF6\x04\xF8\xEF\xF6\xF1\xA6\x06\x24\x92\x02\xAD\xF7\xF8\x97\xF7\xEE\x4F\x04\xE3\x7D\xE1\xBA\x64\x0F\x3B\x32\x33\x02\xC3\xF1\x81\xB0\xF5\xED\x52\x09\xF9\x47\x0B\xBE\x8C\xC7\x06\x24\x0D\xFA\x77\xF5\xFC\x43\x08\x04\xDA\xEE\x72\x11\x16\x14\x25\x0A\xFD\xAF\xF5\xFC\x42\x0F\x04\xF7\xEE\x72\x62\x0F\x06\x6F\x0C\x06\x26\x0D\xFA\xE4\xC0\x00\x56\xF9\x05\x57\x0F\x04\x52\x04\xEC\xE3\xEE\x04\xD5\xE1\xAF\xE3\x74\x07\x27\x0F\xFC\xD2\x5B\xFE\x75\x7F\xFB\x7F\x05\x53\x00\x12\x0C\x02\xA9\x7A\x20\x33\x02\x34\x0C\x06\x28\x00\x00\x9F\x75\x02\x86\xFE\x44\x76\x03\x82\x05\x09\x81\x45\x48\x03\x72\x01\x05\x0F\x80\x96\x71\x01\x84\x80\x16\x16\x7F\x16\x80\x00\x38\x02\xAF\x0A\x02\x1B\x80\x66\x72\x7F\x45\x04\xFE\x52\x81\x91\x7E\x04\x44\x01\x08\x89\x31\x2B\x01\xF7\x6B\x41\x0E\x84\xEC\x76\x7F\x9E\x7E\x0A\x2C\x06\x04\xA4\x51\x80\x04\x03\xDF\x02\x13\x19\x78\x21\x86\x31\x74\x03\x16\x0D\xFA\x57\x59\x0F\x8E\x02\x42\x74\x09\x04\x3D\xE8\x1E\x02\x45\x81\x43\x7D\x81\xC6\x71\x09\x13\x03\xC2\x4B\x49\x2F\x02\x13\x85\x5B\x3C\x81\x05\x83\x80\x62\x74\x05\x52\x03\xB4\x65\x4C\x5A\x0D\x0C\x30\x00\xF8\x70\xED\x59\x82\x0A\x84\x80\x9C\x7C\x09\x2F\x73\xDF\x71\xA1\x65\x01\x0C\x1A\x81\x8E\x32\x20\x3D\x81\x3E\x74\x05\x21\x83\x94\x14\x03\x32\x02\x06\xBD\x57\x1E\x89\xF9\x7B\x72\x5A\x13\x01\x64\x87\xEB\x72\x82\x2D\x8B\x02\xA5\x7A\x13\x08\x74\xF1\x53\x42\x5C\x18\x1A\x00\x07\x8D\x1B\x11\x85\x02\x57\x01\x08\xB2\x1D\x1A\x0A\x07\xDC\x61\x0F\x8F\x02\x46\x07\x06\xA6\x02\x1B\x05\x09\x96\x64\x0A\x87\x83\xC4\x74\xD6\x7B\x73\xA9\x07\x03\x1D\x85\xF2\x46\x83\x5B\x87\x0B\x12\x82\x3F\x83\x07\x38\x03\x15\x81\x69\x9F\x81\x15\x83\x02\x5A\x74\xFB\x6D\x46\x36\x74\x03\x39\x07\x15\xB3\x64\x54\x8B\x02\xC6\x02\x97\x63\x02\x2E\x38\x3A\x63\x02\x1D\x0D\xFA\x7A\x6C\x14\x97\x7C\x98\x81\x74\x46\x4D\x37\x06\x06\x3B\x02\x2E\x9A\x65\xBC\x84\x00\xA6\x7C\xFA\x5C\x03\x4F\x85\x9A\x71\x86\xC4\x72\x08\x19\x7D\xBF\x7D\x8E\x0B\x55\x5E\x1D\x01\xAD\x7D\x81\x57\x84\x21\x0F\xE6\x52\x02\x15\x05\x02\x85\x68\x73\x5E\x5C\x1F\x06\x0A\x8F\x6C\x36\x9F\x02\x61\x77\x06\xAE\x03\x1F\x05\x0C\x8D\x29\x0F\x8F\x7B\x54\x03\xE9\x48\x03\xD0\x5A\x56\x68\x10\x10\x15\x87\xF0\x6F\x1D\xA8\x77\x7C\x8D\xFD\x4A\x7F\x99\x11\x08\x41\x05\x11\x83\x84\x50\x8B\xF7\x5A\x75\x08\x9F\x3A\x42\x01\x10\x86\x23\x85\x89\x0A\xBD\x79\x11\x01\x02\x4B\x01\x5E\x62\x02\xC9\x0B\x06\x43\x01\xEB\x78\x49\x3D\x81\xFF\x72\x72\x24\x85\x04\x40\x68\xC4\x3D\x22\x39\x14\x08\x00\x88\x10\x3F\x0E\xD2\x03\xD5\x75\x02\x52\x06\x09\x21\x5D\xDF\x41\x45\x7B\x17\x4A\x93\x32\x02\x89\xDD\x57\x7B\x22\x06\x10\xF7\x81\x19\x06\x02\x12\x8D\xB3\x14\x89\x42\x81\xEC\x6B\x81\xBD\x67\x0A\x04\x67\x08\x2D\x86\xD1\x6F\x0E\xC9\x01\x26\x9A\x75\xA7\x20\x09\x16\x86\xEF\x43\x14\x84\x81\xBA\x6F\x73\x2E\x3F\xD3\x14\x0B\x24\x07\x13\xBB\x63\x3B\x93\x02\x57\x05\xDD\x45\x88\x61\x53\x07\x76\x64\x1A\x0A\x02\x53\x8D\x79\x21\x88\x5A\x7B\xEA\x6C\x6A\x36\x65\x03\x4B\x01\x1C\xA2\x27\x1E\x88\xEE\x1C\x7E\x90\x74\x02\x85\x6F\x77\x67\x66\x3A\x0C\x04\x41\x8A\x26\x55\x8A\xC4\x77\x0A\x08\x02\x61\x75\x04\x71\x57\x1D\x10\x28\x4D\x02\x21\xAF\x86\x23\x00\x02\xC9\x73\x73\x5E\x0A\x4E\x07\x23\x87\x1B\x1E\x8E\x12\xE7\x86\x9B\x65\x02\x44\x00\xA8\x5B\x08\x8A\x0D\x89\x64\x03\x13\x0A\x8C\xB1\x83\x05\x9D\x83\x2C\x01\x02\xD9\x09\x1E\x10\x02\x7E\x8D\x48\x40\x8D\x2F\x03\x0B\xD4\x01\xF7\x7C\x7F\x14\x68\x0D\x11\x02\xB9\x80\xC3\x3D\x82\x11\x19\x7C\x41\x04\x09\x0C\x03\x2C\x05\xD8\x1C\x6A\x58\x19\x03\x52\x01\x35\x8E\x53\xD5\x87", -"\xF4\x34\x77\x14\x1C\x7F\xE0\x0B\x0A\x29\x8B\xD5\x88\xEC\x55\x01\x13\x19\x8A\x86\x14\x0A\x12\x8D\xAD\x46\x1B\xCC\x01\x10\x08\x74\x48\x85\x09\x00\x6A\xE0\x74\x38\x15\x0A\x85\x15\x02\x5D\x8D\xF2\x5F\x8B\x2E\x85\x05\x71\x72\xF5\x6D\x11\x56\x03\x39\xAF\x86\x28\x02\x05\x64\x76\xCB\x2C\x69\x70\x07\x0A\x02\x8F\x22\x2D\x03\xC5\x03\x39\x8B\x73\xF1\x51\x70\x56\x08\x2C\x01\x1E\xAF\x33\x6A\x95\x76\x6F\x79\x09\x03\x02\xEB\x76\x1B\x63\x01\x16\x13\x8E\x2D\x4F\x12\x96\x8D\xE9\x78\xEE\x40\x6A\xDF\x3E\x09\x2C\x0E\x40\x1A\x03\xF9\x8B\x1A\xD5\x02\xAD\x67\x84\xF1\x51\x3F\x33\x1B\x2D\x0D\xFA\x7B\x5B\x11\x81\x02\x4D\x04\xDA\x50\x03\xCE\x72\x74\x5E\x35\xBE\x41\x21\x5C\x05\x3F\x80\x0D\x1E\x8D\x04\x55\x72\x90\x7C\x89\xC2\x56\x58\x4B\x1D\x2E\x0A\x1E\xA1\x8C\x01\x9E\x72\xED\x75\xF6\x6E\x03\x9C\x12\xE2\x11\x70\x6C\x4A\x6C\xF6\x75\x3D\x95\x03\x91\x86\xEE\x63\x76\x90\x84\x92\x0E\x47\x05\x24\x01\xCF\x21\xB4\x41\x1F\x17\x14\x8D\x18\x66\x48\x87\x7E\x22\x9F\x05\x23\x92\x85\x88\x87\x87\x62\x49\xA9\x1C\xB3\x30\x06\x2D\x7C\x62\x52\x92\x43\x91\xF3\x67\x7C\x77\x7C\xF9\x3F\x79\x92\x84\x01\xA0\x79\x36\x21\x03\xD6\x79\xB2\x60\x90\x95\x81\x79\x25\x7C\x0A\x36\x7E\x84\x4A\x24\xDB\x01\x10\x0D\x01\x5A\x05\x0B\x2F\x01\x3B\x0A\x02\x05\x0A\x8F\x8F\x6F\x2C\x89\x48\x93\x92\x31\x95\x00\xB7\x75\xAE\x79\x7A\x76\x73\x49\xAD\x7C\x97\x3E\x04\x20\x91\x11\x17\x5A\x5B\x01\x0C\x2D\x00\x3D\x07\x27\xDA\x03\x17\x1A\x93\x7C\x94\x0C\x35\x90\x09\x8D\xE6\x18\x8E\x0F\x8E\x94\x40\x6D\x4E\xB0\x01\x16\x09\x03\x5D\x02\x0A\x05\x03\xAD\x79\x5E\x7C\x7D\x27\x0F\xF6\x05\x6F\x0B\x04\x03\x2B\x06\x05\x2F\x95\x15\x06\x06\x2D\x7D\x61\x73\x7D\x45\x00\xD1\x55\x80\xC7\x83\x2B\xE7\x01\xEB\x61\x5D\xD2\x7C\xFA\x78\x7D\x84\x03\x2C\x80\x03\x09\x08\x01\x5B\x06\x0B\x27\x00\x2E\x0C\x05\x5D\x00\x1F\x0C\x96\x5C\x06\x05\x29\x00\x15\x07\x02\x7C\x02\x08\x08\x96\x5E\x02\x04\x0C\x96\x67\x90\x2D\xD2\x96\x0A\x02\x01\x68\x05\x46\x8C\x8C\x29\x09\xED\x54\x01\xB0\x87\x84\xE3\x79\x21\x29\x97\x5D\x74\x02\x28\x03\xB1\x89\x96\xCB\x95\x59\x8F\x96\x66\x9E\x2D\xD5\x97\xB5\x89\x96\xDA\x92\x5E\x9D\x97\x69\x92\x02\x29\x01\x1A\x0D\x7D\x3B\x71\x5E\x53\x03\x11\x9F\xF3\x21\x83\x0B\x13\x03\x2B\x02\x0D\x36\x95\x43\x63\xEE\x0F\x78\xB2\x74\x02\x4F\x79\x21\x11\x99\x5D\x7F\xE4\x2A\x00\xB6\x8A\x01\xCE\x97\x05\x2A\x01\x15\x09\x2C\xCF\x71\x17\x13\x96\x1A\x9B\x05\x0F\x73\x35\x0D\xFA\x04\x70\xC3\x67\x99\x00\x05\xD8\x4C\x21\x06\x6A\x32\xBD\x0A\x0B\x12\x02\xEC\x7C\x0E\x2F\x0F\x9F\x08\x90\x40\x00\x08\x04\x01\x3C\x05\x65\xA5\x02\x1F\x01\xAF\x3A\x9A\x03\x5A\x99\x2E\x03\x66\xB4\x02\xA1\x36\x33\xB9\x98\xAB\x1C\x99\xF5\x72\x67\x85\x6C\xA0\x91\x03\x2F\x01\x1D\x4E\x9A\x01\x0E\x68\x8C\x20\x1F\x0A\x03\x20\x02\x08\x01\x7C\x05\x12\x04\x20\x01\xA9\x00\x02\x3E\x5C\x02\x2A\x20\xAC\x16\x66\x8E\x66\x34\x00\x02\x7B\x00\x08\x1E\x36\x20\x05\x07\x16\x9A\x2B\x02\xF8\x5A\x99\x1F\x0D\x00\x0A\x02\x6A\xBD\x08\xAA\x96\x35\x90\x7D\xAA\x1A\x9A\x5C\x9E\x6B\x80\x5E\x85\x65\x06\x62\x99\xCE\x04\x9B\x66\x98\x6D\xAA\x9A\x11\x08\x3D\x11\x7C\x57\x0E\x9B\x70\x9A\x6E\xBB\x99\xAA\x92\x02\x69\x91\x08\x38\x9B\x73\x05\x6B\xBC\x1F\xAF\x91\xBC\x61\x98\x08\x03\x9B\x65\x9F\x6C\x90\x2F\xB4\x96\x35\xDE\x5B\xE3\x80\x01\x6F\x99\x6E\xBA\x98\xBA\x9D\x38\x96\x08\xE4\x92\x9C\x07\x23\x6F\x90\x48\xBF\x90\x39\x19\x9E\xE0\x9D\x9C\xA6\x98\x74\x89\x9D\xD1\x9C\x38\xB6\x7D\xEC\x99\x9B\x93\x9A\x75\x96\x9C\xCC\x91\x38\x9B\x9F\xE0\x92\x7D\xB1\x99\x74\x8A\x9C\xD2\x90\xFC\x6F\x00\x52\x07\x9D\x7A\x98\x6C\x8C\x20\xD6\x90\x38\x9A\x9F\x62\x1C\x9C\x22\x07\x58\x06\x9E\x3A\x08\x38\xA2\x9F\xD1\x8C\x9C\xCB\x7D\x0E\x32\x18\xE4\x99\x3B\xCA\x9D\x4F\x0C\x9E\xAE\x9E\x77\x96\x9A\x22\x0C\xFC\x53\x11\xF5\x83\x9E\x8C\x9C\x45\x33\x1A\xEE\x99\x3A\xDE\x9D\xDF\x97\x9C\x7F\x99\x7C\x8F\x9F\xC1\x93\x47\x6B\x9E\xEC\x96\x9E\x53\x9C\x71\xA1\x7E\x39\x0C\x3E\xBF\x5E\xFB\x80\x9F\xBD\x9B\x7E\x96\x9B\xFD\x5C\x3F\xF7\x9C\xFA\x96\x9A\xEB\x7D\xFD\x7D\x9E\xCA\x9C\x37\x80\xA2\xF3\x85\x03\xD0\x99\x84\x4A\xA0\x03\xA4\x3B\xA0\x01\xA3\x81\x91\x20\x05\x6A\xA8\x9A\xAE\x98\x44\x3F\x22\x14\x6B\x9E\xB3\x9F\x7A\x96\x9A\x61\x8A\x35\xD7\x96\xD6\x9B\x02\x20\x02\x67\x99\xA1\xAD\x9A\x9D\x27\x59\xE6\x82\x01\x2C\x02\x6B\xAA\xA1\xAA\x93\x80\x45\x30\xE8\x80\x01\x5D\x06\x6A\xA9", -"\x01\x12\xAA\x03\x32\xA0\xAB\x0B\xA1\x7C\x0A\xCC\x1B\x9B\xC8\x96\x9D\x61\x99\x08\xB9\x9F\x29\xA7\x87\x95\x9B\x65\x47\x21\x56\x9B\xB7\x83\xA2\x20\x05\x87\x76\x21\x1F\x60\x42\xF8\x9F\xDC\x95\x9A\x33\xA0\x04\x0C\xA2\xC6\x06\x35\xD9\x94\x14\xA1\x64\xFC\x1C\x90\x69\x23\x2A\xA7\x40\xD9\xA3\x16\xB6\x08\x56\x9F\x07\x27\x9C\xE8\x12\x16\x68\x58\x19\xB5\xA0\x66\xA4\x8E\x56\x9B\x3D\x05\x42\xFD\x03\xE9\x84\x46\x96\x10\x53\x2F\xA2\x11\xA9\x45\xEC\x52\xD5\x9B\x02\x27\xA1\x89\x8C\x21\x15\xA7\xA7\x79\x00\x0E\xB6\x9A\x5D\x07\x74\x85\x55\xE5\x90\x3F\xAD\x9E\xD9\x88\x54\x39\x19\x66\x0C\x54\xA0\x00\x3D\xD7\x01\xA2\x4C\x27\xE7\x9D\x82\xA2\x00\x75\x84\xB9\x3E\xA3\x20\xAB\xA2\x72\xA2\x04\x00\xA4\x44\xA7\x3A\xFD\x5A\xDC\x5E\x20\x74\x5B\x8F\x88\xA2\x11\x0D\xFF\x1E\xA5\x4F\x0B\xA1\x7E\xA2\x94\x81\xA5\x2C\xA5\x48\x87\xA6\x08\x09\xA4\x50\xA3\x91\x9F\x9F\x46\xAD\x3C\x90\xA6\xA2\x53\xA4\x86\xA3\x70\xA8\x0D\x30\x0B\xFC\x6E\x00\x1B\x19\x03\x99\xA4\x8F\x8A\xA2\x10\x03\xBA\x74\x02\xD5\x91\x77\x5A\x9F\x82\x85\x03\x15\xAB\x41\x91\x9E\xB3\x2B\x0E\xAA\xA7\x8A\x8F\xA7\x1E\xA6\x41\x8E\x94\x35\xBB\x9C\x5C\x9E\xA0\x7F\x67\x58\x21\x36\xBD\x98\x10\x7D\x3A\x02\x08\x68\xB2\x00\x92\x99\x10\x6C\xA4\x00\x07\xA0\x22\x04\x84\xB6\x98\x13\xA0\x02\x28\xA1\x16\xB5\xA1\x2E\xA6\x6C\xB0\xA0\x57\xA0\x41\xB4\xA1\x0B\xB1\x9C\x7D\x06\x96\xBB\xA1\x67\xAC\x4F\xC0\xA0\x79\x50\xA2\x45\xA4\x81\x26\xA6\x43\x61\xC4\x69\xA4\xAB\x0E\x01\x38\x01\x21\x89\x08\x89\xAF\x4E\x9A\xA4\x27\xBA\x5C\x22\x06\x66\xB1\xA3\xFC\x3F\x47\xA5\xA0\x2E\xBC\x9A\xA6\xA2\x66\x33\x5A\x3F\x59\x34\xE7\xA5\x16\x4E\xA8\x0C\x26\x05\x39\x00\x4D\x99\x10\x2C\xA9\x45\xA2\xA1\xAC\xA6\x41\x19\xA8\x41\xAF\x4A\xD5\x99\x2C\xA3\xA5\xF6\xA3\x99\xB5\xA5\x1C\xA7\x4B\x8A\xA5\x9F\x43\xA4\xBC\x9F\x72\x97\xA5\x45\x58\xD0\x14\xA6\x30\xA5\x03\xC4\xA0\x24\x07\xA6\xB7\x9B\x50\xBD\x08\x50\x6C\x9A\x31\x05\x09\x89\x08\xA9\xAF\x52\xAB\xA4\x34\xB6\x99\xD2\xA7\x9B\x8F\x9F\x70\xAE\xCF\x30\x25\x40\x70\x48\x4D\xAD\x0C\x0F\xAB\x87\xA1\x03\x32\x03\xD0\x69\x08\x67\xAD\xAA\x9A\xA6\x13\xA6\x33\xA1\x02\x0A\xBD\x97\x22\x01\xAC\x8B\x9B\x87\xA3\x03\x56\x81\x42\x16\xAB\x6A\xAB\x71\xB4\xA9\x7E\xAA\x45\xF4\x63\x3C\xAF\xA2\x1C\xA1\x0C\x34\x21\x29\xA5\xC8\x3D\x0A\x5C\xA7\x64\x40\x9C\x06\x39\x83\x84\x0B\x58\xF9\xA8\xDD\x9B\xA8\x17\x13\x9E\x9E\xA2\xAE\x90\x46\xE6\x20\x61\xA3\xA3\x86\xAD\xA4\x8C\xA8\x74\xA1\x10\x40\x99\x0D\x04\x82\x09\x08\xB4\x8E\xAC\x2C\xAB\x4C\xE7\xA0\x1D\x13\xA7\x6A\xA0\x8A\xAC\xA2\xE9\x1A\x47\x99\xAC\xCA\x8A\x9A\x88\xAF\xA1\xB6\x00\x40\x89\x10\x34\xAF\x68\xBB\xAB\x2B\xA6\xB4\xB3\xA6\x3A\xA6\x35\xF6\xA0\x14\xB8\xA3\x6E\xA6\xB5\xAA\x53\xCE\xA6\x52\xC9\x44\x4A\xAE\x99\x37\x01\x45\x89\x08\xE5\xA7\x5B\xFD\xA1\xA0\x53\xA7\x38\xA8\xB7\x95\x9B\x9D\xA4\x4A\xB9\xA7\x4F\xAF\xA5\x41\xAE\x97\x92\xA5\xA2\xA1\x4C\xD6\x9A\x25\xB1\xA4\xDB\x98\x74\xA1\xAB\xB1\xA9\x52\xB1\x00\x0C\x1C\x84\x09\x08\xBD\x8D\xAF\x65\xAD\x4C\xF3\xA4\x34\xBD\xA6\x18\xA2\x83\xA0\xA6\x6B\xAA\x6D\x0A\xAA\x66\xAE\xAA\xCE\x4C\x69\xB7\x00\x8A\xA3\x10\x14\xA8\x3C\xB7\xA8\x14\x0D\xA0\xA0\xA5\xFC\x30\x5D\x9E\xA9\x29\xB9\x5C\xDC\x1A\xA4\xA8\xA4\x92\xAF\x5A\xAC\x14\x79\xAE\x99\x31\x00\x07\x2E\xA9\x81\x0E\x52\xF0\xA5\x2B\xB2\xAE\x20\x04\x4D\x45\xB1\x7A\xA8\x61\xD4\xAD\x4F\xB6\xAE\x72\x50\xBB\xB1\x9F\x47\xA3\x54\xC0\xA4\xF4\x83\xA6\xC5\xA3\xA9\xA2\xAF\xFB\xA2\x56\xF9\xAF\x43\xB2\x01\x30\x01\xAD\x83\x09\xB4\xA0\x4F\xA8\x02\xD6\x8E\xAB\x96\x98\xAE\xA1\xAB\xF8\x70\x34\xB0\x99\x4B\x72\x13\x64\x00\x21\x78\x99\xD1\x90\x02\x40\x03\x78\xAE\xB1\x29\xAA\x06\x31\x00\x6C\x07\x12\x4C\xB1\xD4\x9A\xA4\x24\xA6\x6A\xB6\xB0\x0E\xB7\x4F\xFF\xA6\xCD\x9A\xA7\x31\xA0\xC3\xB8\xA6\x80\xA2\x50\xBC\xA2\x80\xA0\x01\x41\xA3\x35\x08\xA8\xF0\x4C\x40\x47\xA3\x5A\xB1\xB2\xF4\xA1\xA7\x9F\xA4\x16\xA6\xB2\x11\x9C\x10\x18\xB2\x5F\xB3\xCB\xB7\xA0\x9E\xA3\x50\xA2\x00\x37\xB9\xA2\x61\xB6\x99\x9C\x9B\x84\xA2\x5C\x92\x60\x71\xAC\x20\x0F\xB5\x0C\x2E\x00\x19\x03\x03\x05\x02\xBE\x66\xB4\x4F\xB2\x99\xAB\xB3\x9B\xA3\x4B\xBA\xA8\xE7\x38\xA1\xF3\xA7\xA3\x91\x9C\x5D\xA0\x41\xD9\xAD\x89\xBC\xAE\x95\xA3\xA8\xA6\x9E\x0A\xA0\x53\x80\xB1\x19\x1F\xB2\xA6\xAD\xA3\x91\xB5\x03\xB7\x3E\x27\xA4\xF8\x05\xB3\x56\xA2\xAF\xB1\xA9\x88\x3F\x65\x8C\xB4\x95\xAE\xB4\x86", -"\xA5\x0B\x23\xB4\x10\xBF\x43\x96\xB4\x78\xA6\xB1\x47\xA9\xA9\x86\xA6\x64\xA0\x3A\xA9\x5B\xDE\x7E\x6D\xE1\x6B\xC4\x36\x63\x5F\xB9\xDD\x5F\x14\x44\xBF\x97\x09\x08\xD9\x95\xA9\xF3\x6F\x2D\x24\x9D\xF0\x17\x03\x5F\xB6\x30\x73\xA7\x29\xB2\x02\x1A\x92\xB2\x12\xA1\xDF\x11\xB7\x90\x26\x1D\xAA\x48\xA8\x56\xAA\x43\x31\x3C\xB6\x2D\x3A\x09\x34\x01\x99\x49\x08\x45\x18\x49\x5F\x02\xDC\xAC\x09\x72\xB9\x06\x14\x0B\xA0\xB8\x01\x7E\x07\x24\x31\xB7\x27\xBA\x6E\xE4\xB4\x7E\x74\x08\xCE\xB2\x76\x11\xB6\x46\xA9\x66\xA9\xA1\xB6\xBE\xA7\x6D\xB7\x85\x99\xB3\x74\xBB\x6D\x80\xB9\xE9\x3C\xB2\x74\xB3\x8D\xAB\x59\xDA\x1F\x2D\x61\xB5\x46\x03\xB7\xEC\xB7\xDC\x87\x1A\x82\xB0\x07\x10\xBB\xBD\xA2\xB4\x32\x01\x07\x2C\x03\x93\x0B\x71\xF4\xB7\xC3\xAB\xB7\x17\xB9\xDF\x90\xB6\x0C\xB2\x6D\xF3\xA2\xD6\x86\x9B\xD8\x72\xFB\x16\x21\x15\xA9\xB5\x76\x10\x97\xA2\x01\xBE\xAC\x6B\xBC\x1C\xCF\x9B\xC1\x0E\xB9\xC5\xA0\xB9\xE6\xB5\x0C\x2C\x99\x7A\xB1\x71\x82\xB5\x0C\x0B\x01\x78\x20\xE8\x9E\xB9\x9B\xB6\x6F\xB9\xBA\xB3\xB1\x1E\xA7\x98\x67\x3A\x18\x34\x50\x4D\x0E\xA2\x1F\xA3\x9C\xAB\xA9\x93\xBC\xB9\x90\xBC\x38\x80\x51\xD2\xA6\x53\xC1\xB4\xC5\x0E\xBB\x40\x50\x3D\xB8\x25\x8E\x12\xBA\x1F\xBD\xE8\xAD\xB6\x55\xB4\x9F\x54\x0B\xD5\xAB\xBA\xDF\x13\xEB\xAD\x4A\xE8\x96\x04\x6D\x80\xD8\xA4\xBA\x3D\xBC\x6E\xB8\x94\x5D\x90\x4B\xDC\xB8\xD7\x89\x1E\x3C\x51\xED\xB3\x9D\xA9\xB6\x74\xD5\x9B\xAA\x8F\x7B\x75\xBB\xED\xBB\xB2\x92\x41\xD6\x39\x14\x10\x1B\xBB\x61\xB9\xEE\x95\x9B\x73\x97\x04\x01\xBD\x8E\x1F\xA2\xD7\x7A\xEF\xA2\x9C\xBE\xB3\x76\xA4\x9C\xE4\x1E\x20\xA7\x9A\x93\x1E\x20\xC9\xB9\x33\x94\xBC\xBE\xB5\x9A\x59\xAA\xBE\x9B\xAB\xC8\x9D\x41\xD1\x63\x06\x67\xBC\x93\xB9\xF1\x94\xBA\x10\x0C\x29\xAE\x88\xB1\x61\xBD\x0F\xA0\x8A\xAD\x1E\xD4\x56\xBB\x0B\x0C\xE7\xB4\xB8\x16\xBD\xEF\x9D\xA8\x7F\xB5\x70\xA0\x03\xFA\x64\x03\x86\xA7\xC3\xA0\xA9\xFD\x19\xBA\x73\x1C\xEB\x4D\xBA\x88\xB8\xEE\xAB\xBD\x2F\x06\x9D\x2B\xA2\x30\x84\x11\x63\xB1\x3A\x77\xBC\xCF\xBA\x6A\xF7\x82\x0C\xBE\x52\xB5\x6C\xAF\xB9\x6C\x99\x11\x39\xF0\xB1\x0A\xB8\xBE\x54\x52\xFB\x9F\x6C\x8E\x07\x43\xA5\x9D\x09\xB3\xB2\x14\xBC\xC5\x1A\xB7\x11\x3C\x6D\xD0\xA3\x91\x48\xBE\xA9\xBA\xF9\xBA\xBC\x11\x0A\x08\x9F\xB4\x08\x08\x01\xF7\xBA\xCA\x9A\x9B\xA0\xAF\xC1\x6E\x02\x0D\x63\x61\xB9\x20\x7A\xA0\x21\xAD\x2E\x11\x01\xB3\x0D\xA9\x01\x20\x04\x0F\x39\xBE\x59\xAC\x4B\x99\x9D\xFF\xBF\xBF\x38\x65\xBB\xA2\x01\xD6\x04\x14\x1A\x92\x01\xC1\xA8\x08\xC0\x01\xE9\xBF\x19\x3B\x42\xFD\xBE\xD5\x83\xB8\xFF\xB2\x8B\xB9\x0B\xFC\xB8\x7F\xF0\xA9\x03\xC6\x9B\x35\x62\x84\x51\xC0\x01\xC8\x07\x15\xC1\x01\xD6\xBF\x18\xC1\x01\xCB\xC0\x5C\xA1\x54\xA9\xC3\x0D\x6C\x0B\xD0\x9C\x02\xC4\xC1\xB1\xBE\x36\xA0\x01\x06\xD0\xA2\x0F\x67\xF4\x89\xBF\xDC\xB5\x79\x8C\x9D\xFD\xBA\x9A\xF8\xBD\x04\xD3\xB2\xFE\xBB\xA3\x20\x62\x0A\xD8\xC1\x83\x9B\x00\xD6\xC0\x18\xCE\x83\xB2\xC1\x09\xC3\xA5\x4C\xC5\x82\x7E\xBF\x27\xC1\x80\x83\x9E\x0E\xD3\xC2\x3D\xC7\x07\xDB\xC1\x5C\x1D\x81\xCD\xC2\x1B\x1F\xC0\xD8\xB5\xF7\xAD\x60\x12\xCD\x7E\xB5\xC1\x5E\x10\xC0\x50\xC6\x6A\x92\xC3\x17\xC1\x86\xD6\xC1\x75\xAE\xC3\x64\x00\x0E\xDD\xC2\xD8\x9E\x82\xBC\xC3\x01\xD5\xC2\x81\xA8\x85\x70\xBF\xCE\xBA\x7A\xF3\xBC\x6F\xA8\xB9\x43\x01\x42\x28\x56\x2E\xA6\x70\xC5\x39\xF9\xB1\xB9\xD6\xA7\xFF\x13\xBF\x42\xC5\x84\xD6\x9B\xB3\xBB\xB7\xAF\xA5\xDF\xA3\xC3\xE1\x0B\x42\xF2\xB2\xF7\xBB\xC4\x4A\x0D\x13\xFF\xA7\x39\xBD\x7E\xB2\xBB\xC2\xBD\x08\x93\xC2\xFE\x95\xC4\x11\x07\x89\xA4\xBB\x20\xA2\x01\x87\xC1\x85\x91\x35\x95\xB5\x35\xAD\xB8\x89\x0F\xB9\x90\xC6\x82\x93\x5A\x5D\x39\xC4\x03\xC4\xEE\xB8\xB9\x95\xC7\x17\xE2\xBA\x8A\x0B\x42\xCD\xA6\xD5\x8E\x01\x25\xA6\xD3\xA7\xBF\x34\xCC\x7E\xCB\xA3\xB6\xA8\xA1\x9B\xA6\x0D\x0C\xC6\xF5\xBB\x44\xA4\x29\xF7\xA8\xC3\xBC\xBD\x19\xDA\xA2\x6B\xC4\x8A\xA6\xC0\x48\xA8\xB0\xA7\xBF\x04\xE0\x00\x4F\xBF\x43\xF4\x9C\xB9\xB0\x03\x53\x15\x70\x6F\xBA\x22\xCF\x79\xD9\xC4\x3B\xDC\xAB\xC6\xC2\x04\x08\xC7\xBA\x90\x8E\xA5\xA3\x54\x11\xA6\xDE\xA2\xF4\x90\xA0\x7A\xA0\x8A\xA0\x0B\xFA\xAA\xBF\xD0\xC0\x24\x13\xC6\x0E\xC5\x8D\xEB\x2E\xC0\xA3\xC8\x64\xC5\x20\xF6\xA1\x80\xA9\x70\xB2\xBC\x38\xC9\xBB\xE2\xC4\x1C\xC3\xA5\x28\xC8\x07\x30\x09\xAC\x2A\xC7\x14\xA4\xFA\x8F\xAC\xEA\xBE\x7C\xF0\x4A\xFE\xB4\xB2\x21\xC6\x13\xD8\xC7\x7E\xC7\x86\x8D\xC6\x41", -"\xCC\xC8\xA5\xC6\x9A\x95\x33\x11\x38\x7A\x84\xC6\x2A\xCD\xC7\xC2\xC5\xE7\x85\xC6\x74\x3E\x4C\xF2\xC4\x3E\xD1\xAF\xB1\xBC\x6B\x95\x54\x5F\xCA\x91\xD8\xA0\x47\xD5\x9A\xF1\xC7\xBD\xB0\xBD\x6A\xA0\x02\x57\xA4\x59\x4A\x0A\x2D\xC9\x26\xCB\xBF\x9F\xC0\x02\x05\x30\x56\x1B\xBD\x24\xCB\x85\x9C\x31\x11\xC2\x7C\x91\x9E\x7F\x39\x6B\x4D\xB9\x22\xF0\x03\x1C\xC4\x5B\x78\x03\x3A\xC0\xC6\x30\xCC\x29\xE1\xB5\x24\xC6\x35\xEA\x0B\xFE\xA3\xB1\x20\x06\x8F\x5C\xCB\x3A\xCA\x80\xA5\xC2\x10\x85\xA1\x66\xCA\x1C\xEA\xCA\xA8\xBD\xD2\x2D\x0D\x1D\xDA\xC0\x21\xC0\x8D\x40\x4B\x2F\xAE\xC6\x5E\x27\x5C\x63\x0E\x49\xCD\x27\xEE\xC6\xB0\xCC\x57\xD4\x6B\x19\xDB\xA4\x66\x00\x13\xD0\xA1\xBB\xB3\xA3\x3D\x52\xD6\xA3\xC2\x84\xCB\x23\xD4\xC4\x62\xCE\x8C\xEC\xBC\x59\xC4\xCB\x8D\x9B\x0E\x27\xCA\x47\xA9\x96\xDC\x21\x0E\xD3\x03\xAC\x14\x2D\xCB\xC0\xCC\xB6\x89\xAD\x6B\x66\xCD\x9E\x73\xCD\x73\xB3\x02\x27\x0D\xD2\x21\xCF\x1F\xDA\xC0\xCB\xA6\x30\x50\xA2\x56\x12\xD7\x6A\x6A\xFA\xA8\xC0\x6D\xCD\x2C\xDA\xCC\x4B\xC8\x74\xB3\xCC\x5A\x7E\xCB\xB6\xCC\x03\xC1\xAB\xD4\xC3\x81\xAB\xCD\x6F\xD1\xC1\xB9\xC9\x33\xE5\xA1\xB7\xCC\x9B\xE2\x09\xE6\xBF\xCD\x48\x6C\xFD\x83\xCE\xCF\xCE\x85\xAB\xCD\x4B\x71\xBA\xAF\xC9\x30\xD3\xCC\xBD\xAA\x94\xB9\xBB\x3F\xDC\xC0\x97\xCB\x34\xFB\xCD\xE9\xCF\x94\xD5\xCE\x6B\xC8\xCE\xE2\xCB\x39\xE6\xCC\xB9\xC4\x9D\xAA\xCC\x6B\xC9\xA5\x3D\x0F\x2E\xEE\xC5\x57\xA1\x4E\xD0\xCD\xE1\xBC\xC4\xB8\xC9\x3D\xCD\xCE\x36\x0F\x9C\xBD\x09\x6D\xD9\xB6\xE4\xCE\x99\x95\xCE\xEC\xC8\x9E\xA5\xC0\x69\xCC\xC5\xEB\xCC\x15\xFD\xCD\xFA\xCE\x9F\xE9\x68\x80\xC8\xCB\xC4\xC9\x09\x16\xCE\x3A\x04\xA0\xD5\xC1\x0A\x1A\xCE\x2F\xCC\x3B\xE2\xCB\x6D\xB1\x9E\x86\xD3\x78\xD0\xD0\xED\xCD\x38\xE7\xCF\x2A\xC9\x9C\x87\xD0\x73\xC1\xD0\x9F\xCF\x3D\xE3\xD0\x31\xC1\x9B\x83\xA4\x83\xDC\x26\x0E\xD3\xDB\xB9\xCE\x0F\xDB\x9C\x8B\xD1\xE4\x94\xCD\x31\xD2\x3A\xE0\xD1\xF2\xCE\x9E\xC7\xCC\x89\xDA\xCF\x08\xD4\x7A\xBB\xCF\xFE\xC0\xA3\xC0\xCF\x83\xDC\xCC\x11\xD3\x42\xD5\xD1\x0C\xC8\xA1\xEF\xC6\x64\xD9\xD0\xDF\xCC\x0C\xE2\x01\x7B\xC3\x9F\x8B\xCF\x8D\xC5\x48\x46\xD1\x2B\xC1\xAA\x8B\x4B\x31\x12\xC3\x15\x08\xAA\x6B\x07\x2B\xC3\xC6\x0D\xDB\x9D\xD1\xD0\x27\xD3\xD2\xBB\xCA\x04\x00\xAD\xC8\x94\x8F\x2F\x68\x4F\x72\x48\x5A\xD0\x2D\xDC\xD3\x1D\x5E\xA5\xE0\xD2\x98\xCA\xBC\x56\x9B\x19\x89\xCD\x8F\xC9\x45\xB2\xCE\x37\xD7\xD2\xD6\x20\xAB\x4C\x21\x54\xCE\xA4\xD5\xB8\x03\x2B\xC6\xD9\xC4\x1A\xDA\xA3\x6D\xBF\xA7\xA0\x03\x55\x71\x6A\x3C\xCB\x3B\xE4\x9D\x7E\x81\x11\x08\xD5\x54\xCA\xC8\x35\xC8\x04\xFD\xBD\xE7\xB1\x8A\x8D\xD5\x4A\x3B\x28\x24\x2C\x50\xD1\xCC\xEC\x97\x10\xE8\x02\xA5\xC1\xC1\xFA\x89\x53\xC8\xC8\x4E\xC5\x35\xDB\x40\x19\x1D\x42\x29\xC8\x04\x02\x0B\x2A\x41\xAA\x91\xD5\x86\xC4\x9D\x42\xC9\x1F\xF9\xC9\x1B\xDD\x55\x88\x69\x2C\x3A\xBB\x65\x81\x65\x94\xBE\x74\xB4\x7D\xAE\x03\x6C\xA1\x00\x2B\x70\x59\xC3\xBB\x42\xD6\x35\xD6\xBF\xF7\xB4\x12\xAE\x6A\xFC\x99\xBF\x6B\xCB\x4F\xCF\xD5\xCB\x03\xBF\x75\xBB\x5A\xE5\xBF\xB8\xCC\x8F\xA8\xD5\x56\xCD\xD4\xEF\xB8\xDC\xB1\xBE\x66\xD2\x02\x7A\xD2\xA5\xCD\xD1\xBB\xA5\x51\xD7\x6B\xAC\x62\xAE\xAE\xC8\xB9\xC6\x4C\xA7\xD2\x0D\xDF\xD7\x81\xAF\xA2\xD0\x68\x34\x2D\xB8\xE3\xD3\x54\xD6\x9A\x4A\xD6\xAA\xFC\xD0\xAA\xC4\x29\x23\xC9\x04\xDC\xD4\x90\x03\x4F\xF4\xD5\xE4\x9F\xD4\x4C\x45\xA3\x2D\xD7\xEE\xCB\x8A\x86\x13\x12\x51\xD7\xDA\xC1\x55\xC1\xD9\xDE\xBE\xAA\xDD\x41\xC1\xC7\x9D\xB3\xD2\xA5\x35\xD4\x1F\x59\x34\xEE\x08\x0C\x0B\x9A\x1E\xDE\x05\x35\x01\x5A\x99\x10\x24\xD9\x45\xBE\xD8\xA4\x9F\x16\x8A\xCC\x8D\xAE\xB1\xE6\xD1\x28\xCF\xD1\x35\x69\x38\xE4\xC3\x2D\xD2\xD4\x5D\xD0\xF4\x93\x23\x20\x0F\x0C\x2E\x9B\x10\x8A\x0A\xE6\x01\xCF\x88\x18\x2A\xAB\x16\x27\x08\xA1\xDF\x64\x88\x18\xE9\x87\x25\x88\xD0\x1A\xDF\x3B\x9B\xC3\x4D\xFA\xC4\x41\xB5\xD2\xF3\xA5\x07\x1A\x9B\x1C\xA7\xA9\x8B\xD4\xFB\xA6\xC1\x3C\x7C\x30\x06\x0D\x15\xA0\xA2\x13\x51\x44\x1C\xB0\x22\x02\x2B\xB6\xBE\xFC\xB9\xB5\xBC\x32\xF3\xAD\x83\xE9\x62\x06\xFD\xD9\xB3\xD5\x9F\x01\x52\xD7\xC4\x9B\x08\xC1\x87\xB7\xBA\x0C\x54\x77\x7B\x58\xF3\xA2\x4C\x2D\xA0\x31\x77\xDB\xE8\x43\x98\x74\x02\x0B\x14\x01\x7E\x96\x20\x01\xDD\x9C\x96\x9D\x7D\xD8\xDD\x88\xB9\x38\x2E\x2E\x5D\xC5\x49\x47\x43\xC3\xCB\xE6\x96\xB3\x8A\xC9\xFA\xBA\x17\xBE\xD0\x04\x42\x3B\xDE\xDA\x17\x3F\x9E\x3A\x6A\xA9\x12\x0A\xEF", -"\x1C\xDF\x93\xB6\x4E\xC4\x99\x5F\x08\xC3\xFC\xBE\xB8\xCF\x9C\x3D\xA1\xAA\xB3\x2F\x31\x65\xB6\x09\xCE\x3F\x64\x02\x68\xCA\xC2\xA7\xC9\x73\xA9\xDC\x37\x00\x99\x12\x4C\xF4\x81\x02\x8E\x4C\x76\xC6\x57\xFC\x02\x9F\xF6\xA5\xE1\xCD\xA1\xA2\xC1\xE0\x9F\xC5\xDF\xD6\xB2\x41\xDF\xC1\xBD\xC6\x75\xB7\xCE\x8B\xA6\x9A\x81\x9C\x0C\xA4\xD9\xDB\x31\x5B\xDD\x6A\xBF\x6E\x34\xAA\x80\xAC\x8D\x6A\x3F\x3B\x3E\x0A\x2A\xF4\x3A\x19\xC2\x02\x3B\x02\xD6\x88\xC0\x7B\xB2\x31\x46\x4E\xAB\x4B\xF7\x63\xBF\xCF\x91\xD6\x22\xDD\xE3\x86\x08\xF5\xD9\x33\xD1\xD4\xE9\x8B\xDA\xF0\xAD\x69\xF1\xBC\x68\xCA\xBC\xEB\xB2\x6C\xD2\xB5\x56\x9A\x6A\xC9\xD4\x82\xC6\xB5\xEA\xBD\xF7\xC7\x9D\xD1\xD6\x82\x21\x5D\x74\xB4\x52\x4F\xAB\x4A\x3F\xDB\xDE\x07\x24\x09\xE0\x7A\xB4\x52\x24\x9D\xAA\xCC\xDA\x5A\xAB\x1F\xD3\xB2\x35\xB5\x53\xEC\xB3\xC1\xB7\xB2\x23\xCB\x99\xB2\xB2\x94\xC6\x82\xFF\xDF\x6F\xB9\x46\x23\x3B\xEF\x8D\xE0\xC6\x9F\xC0\xF1\xDD\x04\xFF\xC8\x14\xE4\xAF\xB2\xB3\x37\xB9\xC1\xEB\xB3\x06\xFD\xB2\x56\x9E\x7B\xDF\xE1\x75\x40\xBD\x16\xDD\xFC\x5F\x99\xF1\x5F\x6F\xD5\x05\x93\x0B\xC3\xCF\xB1\xFC\x44\x9D\xF0\x88\x82\xCE\xDA\xC8\xD0\xB5\xA6\xBA\x09\xF5\x9A\xDD\x5B\x51\x20\xDB\x2C\xB0\x7B\xEC\x5E\x12\xF9\xA1\xF4\xDA\x88\xD9\xB1\x40\x5B\xBF\x2B\x22\xFF\x5C\xA2\x3C\xA9\x17\xF1\x5F\xE3\x3D\xB0\x3C\x7A\x9F\x3A\x3D\xF3\x2C\xBC\x1C\x5B\x74\xA0\x5F\x60\xE2\xE8\x24\x2F\x2E\x01\x06\x00\x05\x93\x0B\xC6\xCF\xB1\x19\xFF\x3F\xE4\x2F\xB1\xA8\xD7\xF7\x9A\x89\xA1\xCB\x28\xDF\xC4\x76\xE1\xE0\x9C\xE0\x83\xD0\x02\x6F\xE3\xFA\x27\xE3\xF5\x28\x21\x6C\x8C\xF0\x01\xC2\x40\xBF\xD5\x43\xE4\xB5\x1D\x90\xF9\x02\x17\x03\x03\x0A\x02\xBE\x6E\xE4\x4F\xB2\x64\x4A\xE4\xBA\x91\xC5\x98\xB3\xF2\x3B\x5C\x73\x00\x83\xD5\xD7\x2C\xA7\xC9\xFD\x35\x37\xD1\xC5\x29\xBE\x0D\x74\xC4\x10\x06\x8B\x9F\x47\x23\xC7\x9D\x22\x5E\x82\x33\x9C\x49\xE0\xBB\x14\xE7\xD3\xDC\xE4\xFC\x34\x81\x2E\xB3\x4F\xCB\x4C\x9D\xE6\x2C\xFF\xE4\x27\xBA\x16\xEA\xB8\x81\x3C\x72\xD5\x6F\x29\xF0\xA2\xA9\xE2\xE0\x3C\xB0\x60\x6A\x7D\x2C\x98\x31\xEE\x43\x7F\xDD\x47\x86\x08\x65\xE9\x33\xC7\xE7\xD2\x07\xDC\x29\xA1\x71\xD5\x2B\xC5\xDF\xAF\x5C\xB1\xE9\xDB\xC7\xF5\xDD\x82\xE5\xB8\x0F\xE4\x59\xB5\x66\xF6\x3C\xB1\x72\x28\xB9\x35\x2A\x96\x91\xCE\xD5\x2C\x66\x3F\xDB\x6B\x91\x21\x29\xE7\x8A\xA5\xCE\xBF\xE0\xE3\x81\xE2\x47\xE1\xF6\x84\xE3\x3E\xDC\x48\xD0\xC6\xFE\xD5\xDA\x86\xCF\x90\xAE\xAB\x20\x00\x05\x2A\x13\x63\x23\xB6\x5F\x34\x3C\x74\xB9\x31\xED\x59\x81\xE8\xAE\x28\x35\xCA\x19\x84\x3F\xDA\x44\x07\x12\x0C\xE9\x24\xF2\x33\x02\xEC\x6A\x61\x20\xD2\x98\x26\x92\xEA\xFD\xB7\xE6\xAF\xE5\x96\xF1\xE5\x74\xDC\x03\x20\xB4\x1D\x7F\xA1\x22\x06\x07\x25\xA0\x19\xEC\x35\x86\xE8\x9D\x36\xE8\x5C\xE4\x8D\x69\xA6\x93\xE9\x6B\x09\xE9\x19\x04\xE8\x29\x9C\xA5\xC8\xE8\x3B\x3A\xD0\xB6\x02\x43\xE6\x08\x37\xE9\x67\xB2\xE8\x9A\xB4\xD1\x8E\x9F\x45\xFA\xD5\x68\x9B\x9E\xDA\xE8\xAA\x00\xD2\x9D\xE8\x86\xA6\xAD\x39\xB2\xA4\xF1\xE0\x54\xE0\xD1\x87\xE8\xCD\xB6\x20\x47\xB1\x21\x2F\x28\xA6\x94\x03\x6E\xA7\x40\x0E\xA7\xF0\xA0\xCD\xB6\xB0\x9B\x99\xC2\xC6\xDE\x23\xD4\xE5\x2E\xE3\x14\xFB\xE2\x2F\xB8\x61\xF9\xB2\xE4\xC3\x18\xF6\xAD\xC1\x80\xB4\x24\xB0\x61\xB5\x02\x6D\xA3\x08\xB6\xAD\x8C\xA5\xAD\x50\xA4\x47\xF3\xA5\x2E\xC0\xAE\xC6\x45\xCF\xA8\x3D\xE3\xAD\x62\xD2\xE8\x5F\xE9\xE3\x36\x04\xB9\x83\x08\xE6\xA2\xD7\x8B\xB4\xD7\xB2\xA5\x5C\xED\xC3\x8F\xB4\x9E\xA2\x69\xA0\x00\xA5\xA2\xC7\xDA\xAC\xA8\xB6\xDD\xC1\x9F\x5D\x8A\x57\xA6\xBD\x03\x51\xE8\xA6\x3F\xEB\x18\x09\x03\x6A\xAF\x40\x0A\xAF\x85\xED\x82\xC1\xCB\x1E\xA8\x55\xC0\xEB\x7C\xA5\xCA\xF5\xAA\xAF\xF6\x42\xBE\xE1\x68\x83\xB4\x0D\x13\xB0\xBD\x52\x20\x16\xB0\x99\xA8\x61\x8C\xB5\x62\xF4\xA5\x8B\xED\xBA\xBA\xC9\xEB\xA5\x69\xE8\xC9\x64\xF8\xB5\x56\x98\xC5\x8A\xAA\x5E\xB8\xD9\xAC\xB1\x6B\xF1\x01\x33\x01\x09\x35\x42\xE5\xE9\x68\xAB\xA4\xD6\x8E\xDD\x50\xA1\x79\x95\x9C\xA0\xA8\x96\xAF\x9E\x08\x0C\x9B\x59\x98\x74\x89\xCB\x4E\xB2\x06\x06\x9E\x90\xD8\x9D\xED\x9B\xBA\xE2\xB0\xCE\xC6\xDD\x85\x9F\xDD\x9A\xEE\x66\xB2\xD5\xBE\xE9\x05\xAA\x3B\xD4\xEC\x79\xE2\x9F\x13\xC6\xA2\xEE\x9B\xED\xEB\x4A\xB7\x20\x7B\xEE\x9F\xE2\xC6\xBA\xCA\x15\xF9\xE9\xDE\xA4\x9E\xED\x9F\xEE\x91\x9A\xBA\xFC\x9B\xFC\xE0\xDF\xC0\x9E\x90\xDD\x03\xF4\xEF\xCC\x81\x7F\xE8\xED\x3D\xE2\xED\x6F\xEF\xEF\x02\xA1\x7A\x8B\xF0", -"\x04\xFD\xDF\xD8\x9D\xF9\x96\xBF\xE0\xEE\x7F\x8E\xF0\x02\xF1\xE1\xE4\x9E\xF6\x97\xEC\x09\xF2\xD5\xAA\x9F\x6B\xBC\xE0\xE1\xEF\x80\xE1\xAA\xD6\xED\x7E\xA4\xF0\x0A\xF9\x6A\xA9\xD8\x19\x25\xA0\x19\xF4\x81\x90\x48\x0E\xF0\x41\x83\x9C\x01\xBC\xEF\x2D\xF4\x71\x89\xA0\xFE\xC5\xE2\x9A\xF3\x89\xF5\xEE\xF0\xEA\x82\xBC\xF0\x16\xF7\x40\x98\xE8\x07\xA7\x62\x1E\xA3\x73\x61\xF1\xD0\xD6\x2E\x49\xDA\x96\xB7\xE3\x2D\xE5\x82\xEF\xE1\x86\xC2\xD4\xEB\xB2\x59\xE1\xDF\xD1\x4E\x88\xB9\xF1\xA3\xE1\x4A\xEB\xD1\x14\xA2\xAC\x62\xA2\x0E\x1A\xF3\xD0\xE5\x98\xA1\xA7\x64\xB1\x9C\x95\xAB\x90\x57\xAC\x31\xF9\x4D\xDC\xCF\x5C\xFC\xA8\x22\x01\xB5\xB2\xB9\xB3\x59\xD7\xFD\x99\x85\xFC\xF2\x70\xF4\xB7\xB0\xB9\x3B\xA6\x28\x45\x45\x6B\xB6\xF3\x5B\xF6\xB9\xAB\xBA\x06\xCD\xD5\xD3\xAD\x6E\xF5\xCA\x8E\xEC\xB7\xD0\xED\x4B\xB3\xD9\xDE\xAE\xA6\xB0\xC1\x4B\xF4\x71\x8A\xC6\x3C\xFD\x44\x8C\xC0\xA2\xE1\xA9\xDE\x1B\xC1\xAD\xF3\x94\xD4\xDB\x82\xF7\xE3\xA4\xF4\x8A\xE9\xD6\xBA\xED\x49\xBA\xE8\xB6\xB7\x2F\xB8\xB4\xB9\xB1\xC5\x84\xEF\x48\xF8\x61\xA3\xEE\x14\xE4\xCA\x46\xCB\xCC\xDA\xA5\x5C\xD8\x93\xC4\xCA\x38\xBE\xAA\x0D\xA7\xCE\xF4\xA6\x1C\xBF\x8A\xBB\xA2\x91\xA6\xEE\x6C\xE8\xE3\xAB\xA7\x93\x08\xD5\xD0\xB2\xE8\xC8\xE1\x4F\xF2\x78\xD1\xF2\x15\xE2\xD6\xDD\xB2\x7B\xBF\xB2\x57\xF4\x88\xA4\xB2\xD5\xE0\xA4\x2C\xED\xB0\xE3\xB4\x35\x06\xAA\xC0\x44\xD9\xE6\xEC\xCD\xF0\xB2\xF5\xB2\xCA\xF3\x9F\x9A\xA8\x0D\xED\xEC\xD4\xF1\x36\xFC\xAB\xD1\xF0\x04\x3C\xB3\x32\x0E\x6B\xCC\xB4\x34\x32\x69\x29\x9E\xDD\xE3\x31\x34\xE1\x03\x4A\xB7\x40\x0A\xB6\xED\xD8\xD8\x8C\xBB\x11\x32\x72\x91\xDC\x5B\xB6\x9A\xD6\xB2\x67\xFB\xDF\x84\xCD\xBF\x9C\xC1\xA3\xD0\x55\x9F\x50\x4E\xE0\xB7\x60\xDC\xB0\x92\xBB\x56\x4D\xF8\x82\xB4\x06\x30\xB6\x79\xBC\xED\x82\xCC\x2B\xDA\xB7\x55\xD2\xFF\xB7\xED\x3C\xE7\xBC\xF8\xE1\xEF\xB3\xF2\xB1\xD7\x67\x6C\x58\x68\x26\x73\xEF\xC4\xB1\xDB\xCE\x7F\xD9\x07\x1A\x07\x93\x0B\xF2\xCB\xD6\xBE\xD7\xF8\x23\xBC\x9E\xD9\xC5\xBA\xE9\x39\xA1\xE7\xD2\x03\xE5\xA5\xE7\x2A\x3F\xE4\x53\xC7\x07\x34\xB8\xBE\xCE\xD7\x2F\xFD\x15\xF2\xF9\x7D\xCC\x5B\xAC\xE2\xCD\xFE\x09\x38\xFE\x97\xC1\xA9\x3D\xFA\x5A\xBB\xC6\x4B\xED\xB8\x0C\xFC\xFA\xBB\xB8\x94\xF8\x03\x31\x06\xBE\x76\xFA\x2E\xFB\x4C\xCF\xD3\x77\xC3\x93\xD5\x37\x3C\xB3\xC7\x9B\xA5\x1E\xFE\xD6\x79\xDC\x7E\x81\xCA\x34\xC3\xF8\xAC\xD3\x1B\xC6\xC8\x8F\xF1\xB1\xDC\xC7\x58\xEE\xC8\x9E\x5F\x48\xCD\x9E\x89\xCF\x4A\xE6\xC5\x1B\x08\xC7\x65\x00\x23\xC2\x9E\x88\xFB\xF5\x84\xCD\xD7\xEC\x0C\x5F\xF9\x19\xE2\xFA\x34\xDF\xEA\x8F\xDC\xFA\xBE\xD6\x65\xFD\x6E\xA7\xFA\x7C\xEC\x8D\xEC\xFA\xA2\xC9\xD5\x08\xB9\x56\xCC\x5D\x6D\xB1\x54\xF4\xF9\x8D\xF2\xC3\x15\xCD\x85\x70\x1E\xBD\xF5\xF2\x84\xCF\xD4\xF9\xD0\x2A\xAD\x8D\xC6\x08\xD1\xF0\xF4\xDA\xFA\x4F\xC5\xD3\x55\x9B\x60\xEE\x03\x69\xB3\x4B\x9C\xFB\x57\xF3\xD8\xDA\xC0\xE4\xCD\xD4\xF2\x20\xF5\x82\x85\x67\xA3\xD6\x13\xBD\x58\xE6\xAF\xBE\x89\x10\x3C\xFF\xC9\xD2\xD4\xA7\xF8\x4A\xC0\xCA\x9A\xC1\xF8\xF1\xE4\x51\xDB\xC9\x0B\xFE\xF6\xC2\xD7\xED\xC7\xF2\xA0\xFD\x0C\x11\x01\xBE\xFB\x20\x3E\xFD\xD2\xF8\xA7\x90\xFB\xDF\xF6\x08\xEE\xAC\x9B\x86\xF2\xFA\xAF\x6C\x24\xF9\xD4\xEC\xFE\xB9\xF8\xE5\xE5\xAA\x01\x79\x10\x64\xFF\xEF\xF7\xD5\xC1\xFC\xEB\xE9\xFC\x7D\x28\x15\x1B\xB1\xD5\xD3\xCA\x64\x03\xD4\xFD\xE3\x05\x37\x61\x3A\xD0\x67\xDC\x09\x5C\xCE\x40\x1E\xCA\xD9\x9F\xFD\x99\xD1\xF3\xEF\xC7\x69\x73\x0C\x05\x0A\x27\x04\x03\x81\xD6\x75\xFD\x62\x65\x7E\x54\x1B\x66\x7E\x6C\x67\x3C\x69\x7C\x7F\xBA\x65\x66\x42\x6B\x02\x88\xA2\x74\x65\x63\x1A\x7C\x65\xB5\x7A\x65\xFA\x08\x5F\x63\xC6\x19\x69\xC9\x7F\x44\x47\xFB\x60\x7F\x0F\x7E\xEE\x74\x03\x33\x46\x09\x04\x09\x87\xFE\x4C\x6B\xD6\x7D\x65\x6A\x75\x75\x4D\x7B\x6B\xD0\x70\x45\x6B\x28\x34\x28\x8B\x1D\xF9\x63\x69\xFF\x7C\x61\x69\xC6\x75\x00\x3E\x02\xBE\x39\x03\x86\x80\x4B\x64\xEA\x75\xF0\x46\x5E\x6C\x60\x66\x64\x9A\x53\x80\xAA\x67\x8A\x66\x87\x4A\x67\x10\x81\xEC\x66\x36\x49\x69\x2A\x6B\xA1\x6F\x9A\x59\x7C\x2F\x6B\x7F\x62\xA3\x47\x81\x26\x6A\x8D\x6E\xA8\x76\x67\x7F\x65\x28\x64\x04\x85\x67\x4B\x68\x15\x89\xA6\x4C\x67\x0A\x6A\x73\x6E\x9B\x4D\x68\x1C\x82\xFA\x5B\x05\x92\x68\xEF\x65\x17\x89\x02\x33\x80\x3D\x5D\x0D\x83\xA6\x40\x76\x72\x03\x49\x01\x07\xBC\x80\xBA\x5D\x0A\x8F\x03\x80\x66\xFB\x6B\x6E\x6E\x02\xB0\x6C\x3D\x35\x16\x8E\x8F\x74", -"\x6C\xD8\x04\x9D\x65\x49\x76\x69\xFC\x7E\xF2\x70\xF1\x6E\x81\x3D\x5D\x1A\x77\x03\x26\x7F\x03\x06\xF9\x74\xFD\x7D\x80\xC2\x7F\x1D\x88\x94\x79\x81\x25\x52\x97\x7D\xA6\x6A\x0A\x6F\x6B\x57\x23\xB3\x72\x69\x35\x6E\x20\x84\xD9\x44\x82\x6F\x4D\xFF\x7F\x8E\x70\x7B\x10\x7F\xCB\x41\x33\x40\x59\x29\x2F\x90\x5A\x91\x45\x59\x3D\x4E\xC7\x60\xB2\x59\x04\x30\x01\x1A\x72\x0C\x3A\x3B\xB3\x83\xD0\x50\x03\x34\x4D\x6E\x54\xF5\x58\xA1\x77\x82\x8C\x4F\x0A\x0C\x8C\x70\x00\x2B\x53\x61\x33\x82\x5C\x4D\x82\x34\x83\x16\xFF\x73\x7D\x5B\x67\xE0\x45\x43\x1E\x04\x39\x5C\x8E\x7E\x92\x7C\x82\x56\x4D\x0B\x0F\x0B\x81\x83\x3D\x1F\x30\x81\x39\x45\x83\xF5\x7E\x19\x88\x96\x78\x7F\x50\x5F\x8E\x26\x1B\x17\x60\xBB\x82\xB3\x5B\x9E\x54\x5C\xC0\x81\xD5\x42\x0C\xB1\x7F\xC4\x80\x56\x67\x0C\x99\x4E\xDC\x82\xD5\x4F\x9E\x4E\x83\xE4\x81\xCA\x6E\x2A\x11\x6E\xE4\x82\xCB\x6E\x8F\x7C\x81\x65\x82\x70\x6C\x09\x81\x82\x67\x02\x04\x68\xB3\x6B\x78\xE1\x82\xFE\x43\x0F\x8E\x51\xD3\x82\x0A\x8C\x81\x5C\x4D\x97\x80\xDF\x4F\x6D\x5A\x83\x9C\x67\x9C\x6D\x0F\xB7\x6C\x59\x05\xCE\x6C\xDF\x62\x82\x9E\x7E\x38\x15\x0A\xB2\x00\xEF\x3D\x42\x09\x11\xA7\x80\x2F\x7F\x56\x70\x02\x39\x82\x8C\x6B\x0E\x5C\x06\x97\x5C\x9F\x7C\x00\x83\x03\x0A\x45\x09\x04\x4A\x8C\x11\xA6\x7E\xA2\x58\xDA\x71\x8A\x55\x4D\xBF\x5D\xF0\x5D\xD8\x73\x5E\xB5\x2E\xEA\x24\x3F\x36\x0F\x51\x28\xC0\x3D\x59\x56\x27\x99\x6C\x5C\x29\xC6\x5E\x6E\x06\x04\x50\x84\xB8\x70\x25\x4C\x7B\x18\x03\x53\x64\x65\x18\x77\xE9\x68\x96\x73\x6E\xB5\x6E\x51\x5E\x0E\x90\x17\xD0\x75\x81\x6F\x91\x68\x6E\xB9\x6D\x53\x82\x81\x78\x6E\xAA\x6F\xEF\x0B\x9B\x71\x60\x08\x62\xEF\x68\xB7\x45\x6F\x26\x66\x0D\x53\xBC\x5F\x85\xA5\x1E\x57\x77\x92\x70\x70\x55\x79\x05\x7C\xBC\x57\x27\x83\x53\xF3\x6A\xB5\x6B\x01\xDA\x6E\xE0\x1A\xB6\x49\x1E\x7E\x1E\xDC\x12\x07\x31\x85\x6C\x1C\xF7\x62\xC3\x60\x6F\xD2\x79\x74\x2A\xCA\x54\x84\x63\x69\x49\x86\x03\xB4\x00\x12\x02\xBE\x35\x18\xB4\x81\xAB\x62\xF5\x5A\x51\x60\x5F\xEC\x11\xB6\x61\x7E\x54\x6B\x03\x5C\x63\x82\x33\x0E\x86\xEC\x13\xCB\x5C\xAD\x47\x7E\x64\x7E\xFF\x6C\xC7\x61\x6B\x32\x81\xBE\x6C\x12\xA2\x00\xCE\x6B\x17\x02\x19\x93\x09\x94\x84\xF7\x57\x90\x4B\x86\xD0\x68\xB6\x66\x53\x63\x5F\x96\x87\xD9\x7D\xAD\x59\x86\x06\x7F\x66\x80\xA5\x1D\x80\x42\x47\x07\x89\xA1\x42\x86\x6F\x81\x0D\x07\x18\x85\x0B\x36\x3B\x23\x83\x7F\x47\x61\x36\x4C\x66\x6B\x84\x68\x65\x0F\x60\x17\x62\x81\x73\x61\x7E\x62\x54\x8C\x80\x59\x61\x4E\x63\x0D\x6B\x87\x71\x77\x7D\x63\x05\x66\xA1\x6E\x84\xFE\x60\x4C\x86\x86\x70\x7E\x8F\x7F\x08\x68\x99\x43\x54\x78\x62\x1E\x67\x1C\xAD\x60\x3B\x62\x74\x83\xA3\x77\x61\x68\x66\x0D\x60\x80\x52\x60\x5F\x60\x1D\x6F\x04\x81\x62\x32\x30\x6D\x8F\x17\x76\x86\xEF\x60\x6E\x89\x08\xB6\x00\xA2\x03\x49\x05\x1F\x88\x86\xED\x60\x2C\x63\x53\x48\x62\x8A\x63\xB7\x2C\x88\x56\x70\x8E\x63\xD2\x79\x8B\x66\x71\x2E\x08\xC9\x7E\x19\xB8\x69\xFA\x85\x91\x5C\x1F\x9E\x05\x8B\x60\x1A\x51\x16\xAE\x50\x02\x88\x2A\x72\x89\x5E\x7F\x86\x82\xD4\x76\x11\x85\x6B\x37\x00\x3B\x07\x12\x1A\x88\xF8\x86\xAA\x57\x89\x63\x7B\xF6\x6F\x2B\x63\xC1\x54\x87\x25\x64\x80\x8B\xF6\x58\x87\xFC\x6E\xEC\x7C\xC7\x62\x7C\x0C\x5E\x81\x8E\x1B\xAB\x62\x1F\x89\xC6\x79\x20\xA8\x5C\xB3\x60\x2F\x75\x8B\x4A\x7D\xBD\x56\xC2\x5D\xF3\x56\x74\xB5\x7E\x07\x8B\xFC\x7E\x7F\xE1\x7E\xF3\x78\x03\x2A\x84\x03\x06\x4A\x8F\x22\xB9\x87\xE6\x68\xEB\x72\x23\xBC\x71\xEB\x6B\xA0\x64\x21\xBE\x88\x87\x81\x90\x80\x00\x9C\x76\xF2\x45\x42\x05\x25\xAB\x84\x08\x88\xBC\x6A\x24\xB8\x73\x21\x84\x91\x66\xAF\x63\x18\x3D\x89\x6D\x8F\x23\xA6\x7C\x52\x8A\x0D\x80\x63\x4A\x4C\x09\x04\x9A\x88\x25\xAB\x5E\x53\x6A\x43\x08\x26\x33\x54\xAF\x85\xDB\x7C\x45\x5B\x72\x02\x6E\x47\x6E\xA9\x6E\x89\xA0\x69\x13\x2F\x24\xA2\x89\x51\x89\x08\x88\xF2\x4A\x59\xF6\x7A\x40\x08\xEF\x7C\x7D\xA4\x6B\xC3\x6B\x25\xBF\x6B\x73\x8A\xA6\x6A\x8D\x55\x6C\xD9\x6D\xA3\x69\xB1\x79\x89\x0A\x6E\x0C\x80\x18\xAD\x81\x65\x8B\x1B\x82\x03\x32\x00\xD5\x41\x42\x09\x29\xAB\x89\xF3\x5F\x55\x56\xFC\x67\x76\xB7\x7A\xAF\x6F\x55\x79\x23\xCA\x24\xB1\x56\xDC\x3B\x7B\x2C\x1B\xB0\x52\xEF\x6C\x18\x69\x72\x19\x0A\xEF\x2E\x8A\x4F\x5B\xAA\x83\x63\x34\x4D\xE3\x49\xB9\x4C\x78\x4E\x5E\x56\x6A\xBA\x7C\x2D\x1E\x0B\xBE\x62\xAC\x89\x2B\x24\x4E\xDE\x40\x74\x71\x27\x8F\x7E\x5D\x88\x14\x57\x95\x47\x65\x04", -"\x6F\xEC\x4E\x2B\x83\x07\x14\x74\x93\x4F\x3B\x36\x2C\x81\x50\x3D\x59\x14\x83\x54\x54\x6C\xF4\x60\x17\x92\x6F\xDB\x6C\xCF\x70\xB4\x0F\x8B\x42\x2D\xAF\x8A\xEF\x4D\x5B\x8C\x4E\xD0\x73\xC7\x5F\x64\xD5\x5A\xDF\x0B\xAA\x6F\x84\x92\x82\x3F\x67\xF0\x5E\x5B\xB3\x2A\xD6\x5D\xEE\x5F\x8B\xD0\x12\xAA\x80\x2F\xB3\x7B\x32\x00\x6A\x49\x10\x36\x8B\xCB\x5B\xBC\x8C\x62\x00\x8B\x31\x18\x9C\x88\x19\x91\x6C\xC5\x88\xD7\x47\x2C\xA4\x8A\xD7\x35\x67\x5B\x2C\xAC\x1A\x5D\x73\xC1\x80\x12\x0C\x72\xE1\x49\x42\x0D\x30\xB9\x8B\xC5\x58\x34\x1D\x2C\x8A\x2D\xD0\x89\x62\x72\x2D\xA6\x76\xA6\x6C\xB5\x89\x42\x56\x8B\x78\x84\x47\x5A\x2D\x94\x8C\xDD\x8B\x88\x1F\x2E\x91\x8C\xC2\x59\xC2\x8A\x2F\xB3\x18\x7F\x6D\xA0\x81\x10\x03\x8A\x0A\x8E\x1B\x0D\xEF\x60\x88\xDA\x72\x88\x85\x42\x41\x7C\xE7\x89\x75\x89\x2E\x87\x66\x7C\x70\xC2\x72\xAB\x0A\x7C\x8E\x31\xC7\x60\x0B\xAF\x82\x70\x01\x2C\x82\x03\x1C\x03\x27\x04\xD1\x86\x0B\xA4\x4E\xBE\x80\xCB\x60\x0B\x94\x83\x4B\x1E\x35\x80\x02\x18\x83\x72\x7C\x3B\x89\x0C\x96\x4D\xCB\x83\xC5\x5F\x76\x50\x83\x22\x02\x34\x8A\x34\x81\x8D\x4C\x8F\x84\x28\x0E\x97\x83\xEA\x80\x43\x88\x0C\x90\x4F\xB1\x0F\x19\x0F\x0D\xB0\x60\xC9\x5C\xD6\x8F\x96\x5B\x8D\xE5\x83\x38\x65\x0D\x9F\x8D\x4F\x8D\xD8\x8A\x0F\xB7\x7F\x53\x8E\x08\x0F\x0E\xAB\x58\xAF\x56\x2B\x88\x58\x61\x6C\x33\x02\x32\x07\x12\x3E\x8D\x47\x8E\x40\x88\x15\x33\x54\x2E\x81\x3D\x86\x10\xA4\x61\xF8\x81\x74\x62\x36\x99\x4E\x0E\x86\x3F\x81\x11\xAB\x78\x69\x8E\x3C\x83\x38\xBF\x55\x05\x87\xCD\x8F\x5B\x42\x24\x98\x80\x96\x6A\x09\x9C\x62\x80\x83\x45\x20\x11\xBB\x04\x2B\x78\xCF\x68\x30\x03\x70\x40\x6D\x59\x54\xB4\x46\x04\xA7\x8D\xCE\x46\xB4\x4C\x4E\x48\x6C\xB2\x77\x35\x46\x05\x85\x7E\xE9\x67\xEE\x5C\x6D\xAF\x62\xFE\x68\xBF\x5C\x89\x57\x6F\x40\x55\xB6\x51\x6F\x69\x65\x18\x49\xB6\x50\x63\x62\x6F\xE8\x6B\x3B\x97\x8B\x4D\x64\xDA\x6F\xB6\x6A\x6D\x08\x0C\xDB\x6B\xCD\x03\x28\x55\x62\xDC\x61\x39\x4E\x28\x82\x1E\xDD\x64\xBC\x65\x1E\x13\x4F\x40\x03\x31\x57\x6E\x24\x09\xDF\x66\x0A\xBF\x58\x79\x04\x4C\x73\x64\x53\x8F\x17\x0A\x0F\x05\x64\x56\x6E\x3C\x85\x04\x28\x3D\x8A\x05\x22\x6F\x90\x3D\xFB\x50\x18\x43\x85\x74\x25\x14\xA3\x6E\xF8\x5D\x52\x83\x1C\x9C\x66\x4C\x87\xEA\x64\x36\x90\x85\x0F\x82\x52\x84\x3F\x95\x85\xF6\x8F\xE0\x48\x15\xBA\x6E\x5A\x85\xEF\x69\x42\x60\x8F\xFF\x87\x96\x5A\xC9\x43\x5C\x04\x92\x83\x86\x22\x8B\x64\x68\x87\xEC\x85\x35\x6B\x85\x3F\x52\x5B\x86\xB6\x58\x8B\x72\x85\xF5\x64\x17\x98\x6F\x77\x84\x05\x99\x17\x8A\x60\x1E\x70\x5F\x8A\xEE\x62\x6F\x21\x72\xE8\x40\xBA\x4C\x4E\x51\x58\x52\x88\x31\x92\x70\x4A\x83\xD6\x4C\x3F\x8D\x7A\x76\x8C\xFE\x8F\x87\x49\x67\xF3\x8D\xF3\x45\x3F\xAC\x90\xFF\x8C\x64\x21\x40\x8F\x81\x5E\x84\xDF\x60\xBC\x4F\x88\xB3\x73\x48\x69\x40\x8E\x53\x3C\x90\xF2\x64\xD6\x78\x59\x50\x11\xF3\x6F\x4A\x52\x90\xBC\x8F\xF4\x6E\x4C\x56\x90\xD7\x6E\x5D\x8D\x31\x8D\x51\x1C\x93\x5E\x87\xD6\x7B\x26\x18\x1D\x43\x36\xBD\x7F\x71\x11\x0A\x7E\x37\x45\x83\x21\x7F\x6E\x2F\x0B\xE2\x1E\x91\x91\x73\xFF\x14\x37\x58\x66\xAD\x61\x50\x5D\xFF\x3B\x1E\xE5\x62\xD5\x49\xE6\x50\x01\x59\x05\xFE\x8D\x8A\x6A\x69\x29\x93\x19\x93\x5F\x29\x91\x22\x01\x0F\x3D\x46\x8F\x81\x9A\x63\x0F\x96\x16\x85\x19\x07\x92\x0C\x5A\x47\x81\x91\x6F\x7D\x25\x7E\xC5\x4C\x1F\x58\x92\x57\x04\x5E\x1D\x60\x5F\x70\x1C\x7F\x7C\x07\x64\x1B\x8D\x22\x95\x48\xB4\x17\x62\x04\x22\x94\x48\x83\x21\xE4\x15\xE4\x73\x3C\x8F\x91\x5C\x51\x49\x7F\x7F\x2A\x72\xA2\x4C\x81\x8E\x15\x23\x91\x0B\x61\x19\x98\x96\x72\x91\xA2\x1C\x1D\x9B\x46\xB7\x91\xCA\x87\x1B\x9F\x44\x66\x91\xFF\x1C\x1D\x96\x47\x85\x50\x5C\x87\xB7\x7F\x47\x8B\x90\x2E\x50\x0B\x7B\xC9\x73\x92\x2A\x89\xB4\x87\x67\x7E\x71\x94\x91\x7D\x12\x49\xB1\x17\x8F\x91\x25\x9C\x48\x83\x92\xC0\x91\x2F\x91\x49\xB0\x84\x8E\x92\x31\x95\x9F\x24\x62\x97\x92\x06\x9E\x31\x91\x62\x8F\x90\x66\x27\x5E\x29\x53\xD6\x27\x21\x7A\xB9\x66\x57\x40\x87\x40\x02\x14\xA7\x8F\x20\x07\xFB\x8C\x86\x72\x8F\x29\x93\x0C\x9E\x14\xAD\x90\x8B\x05\x54\x8F\xA3\x70\x6E\xE2\x62\x38\x97\x15\xBC\x8F\x37\x91\x2C\x99\x43\x93\x6E\x3B\x90\x2D\x90\x19\xBE\x91\x64\x85\x13\x50\x48\x8D\x90\xD0\x79\x11\x9C\x16\x87\x91\x1B\x8F\x5B\x88\x49\x94\x6F\x29\x53\x05\x9E\x44\x8E\x93\x50\x93\x52\x70\x88\x7D\x85\xAA\x27\xC8\x10\x04\x03\x70\xD6\x8B\x53\x56\x2D\xA9\x71\x82\x03\x49", -"\x01\x51\xAE\x71\x6F\x84\xE9\x44\xF3\x68\x5C\xD6\x0B\x3F\x90\x21\xB9\x88\xC6\x8B\x5B\x86\x2D\x33\x4E\xD6\x8A\x45\x9A\x35\x46\x7D\x19\x94\x41\x97\x16\x8C\x7D\x02\x8E\x47\x9F\xA0\x26\x8F\x02\x94\xE0\x1C\x63\x6D\x94\x3E\x05\x1A\x74\x23\x49\x04\x33\x95\x45\x50\x53\xB2\x01\xA0\x92\x08\x04\x02\x1A\x4D\x0A\x62\x9B\x44\x28\x70\x49\x6F\x3E\xFD\x37\xC2\x57\x68\xFD\x93\x04\x90\x02\x0A\x91\xC0\x71\x13\x9B\x78\x34\x1D\x96\x6D\xB4\x67\xBE\x63\x5F\x7F\x6E\xFA\x63\x10\x2C\x6F\xE5\x6D\xF6\x5F\xBE\x70\x8E\x9F\x8B\xF3\x42\x48\xA3\x8B\x3C\x56\xD4\x6B\x35\x84\x8B\x57\x6C\x49\x71\x39\x41\x70\xDB\x2E\xB0\x24\xC0\x4C\x06\x06\x70\x49\x12\xB2\x4C\x82\x06\x38\x03\x7C\x18\x0E\x70\x24\x15\xEC\x88\x42\xAF\x5A\x61\x75\xB8\x73\x70\x64\x7B\x7A\x72\xB3\x76\x50\x88\x84\x20\x70\xF4\x23\xC0\x6B\x14\x69\x94\x63\x06\xAC\x6C\x95\xAD\x21\xC5\x73\xC2\x56\x4D\x25\x70\x38\x94\x57\x92\x79\x50\x7A\xB8\x79\xEC\x47\x6F\x6F\x7C\x37\x7C\xA6\x7D\x95\x11\x2E\x0D\x78\xBE\x38\x70\xE8\x2E\xC8\x6D\xC3\x46\x04\x9B\x95\xCE\x4E\xCE\x56\x4D\xF0\x71\x52\x8E\x40\xA9\x65\xAF\x60\xCD\x70\x7B\x49\x71\xD9\x6C\x34\x6C\xC4\x7A\x6A\x4E\x71\xF6\x60\xC5\x4F\x6D\xB0\x5E\xFE\x2B\x85\x3D\x2F\x2B\x16\x2D\x5A\xC5\x77\x2F\xD1\x35\x17\x7C\x4B\xAF\x1E\x62\x73\xF0\x14\x4C\x9E\x92\x90\x90\x1B\x03\x68\x62\x7E\x03\x04\xE9\x7F\x5B\x8A\x92\x62\x06\x1C\x71\x22\x99\x62\x1E\x86\x3D\x5E\xFA\x67\x88\x74\x8B\xC7\x75\xEE\x71\x6A\xBB\x97\xEE\x14\x5E\x02\x72\xAC\x72\x21\x76\x45\x99\x97\x8B\x71\x0C\x00\xC9\x47\x12\xBD\x84\x22\x7D\x11\x13\x72\x55\x4D\x14\x70\x33\xBC\x55\xB6\x71\x4F\x03\x4F\x96\x72\x1B\x74\xF9\x5C\xC1\x60\x72\x35\x8B\xC8\x1D\xCB\x63\x1C\xB8\x60\x2A\x71\x70\x21\x90\x3A\x74\x21\x7D\xCA\x65\x97\x19\x77\x9A\x59\x5E\xA4\x5F\x70\x5B\x79\x9F\x4B\x9E\x72\xEF\x95\x2E\x77\xF4\x44\x21\xD0\x2F\x7C\x90\xBD\x35\x97\xC0\x73\x7D\x90\xBD\x18\x97\xFA\x96\x76\x98\x05\x71\x74\x11\x9B\x22\x72\x03\x1F\x97\x68\x15\x78\x9C\x5D\xAE\x72\x69\x84\x7A\x9D\x5E\xAB\x97\xB0\x70\x51\x77\xCB\x45\x98\x18\x73\x81\x99\xF4\x74\x97\x3B\x7E\x35\x5E\x60\x91\x2C\xAB\x71\x85\x9C\x61\xA3\x96\xFF\x94\x88\x93\xD4\x58\x72\xB8\x72\x82\x8A\xCB\x62\x72\x36\x88\x29\x78\x23\xA8\x94\x2A\x9A\xC8\x10\xBD\x03\x73\xDE\x72\x1B\x26\xCC\x41\x99\x4B\x0E\xC8\x6A\xCC\x43\x04\xCC\x71\x01\x44\x64\xBE\x04\xD0\x73\xC8\x3D\x82\x14\x73\xC2\x35\xE3\x67\x42\xBD\x97\x31\x8D\x26\x62\x56\xA0\x00\xCE\x72\x4F\x07\x78\x4C\x7C\xED\x70\xFA\x24\xCE\x44\x16\x75\x16\xC8\x6B\xCE\x43\x04\xEB\x71\xCE\x4D\x65\x89\x17\x40\x70\x5D\x12\x57\x94\x99\x7C\x56\x6C\x66\xCF\x44\x8E\x88\x7E\xFA\x59\x43\x7B\x73\xFD\x70\x68\x17\x06\x16\x6E\xFC\x72\x3F\x71\x5A\x3F\x4C\x79\x9A\x9D\x99\xC6\x60\x00\x2B\x38\xA0\x9F\x64\x7D\x99\x14\x0D\x68\x12\x52\xB6\x75\xA7\x4F\x99\x96\x5D\x3C\x72\xAC\x91\xA1\x90\x59\x0E\x08\x99\x58\x78\x57\xD9\x62\x63\x10\x1F\x63\x15\xB8\x10\x4F\x98\x78\xDA\x82\x3A\x44\x9A\x8F\x16\x48\x96\x35\x6D\x52\x88\x98\x14\x5A\x68\xBD\x16\x8C\x9B\x28\x96\x67\xA1\x17\x27\x58\x52\x5A\xEA\x7D\x60\x8D\x9A\xA5\x90\x8E\x58\x9A\x08\x58\x26\x54\x41\x5C\x9A\x86\x98\xE3\x4A\xE7\x60\x81\xCA\x61\xA8\x9C\x35\x63\x9A\xDA\x2E\x7C\x9D\x6A\xA1\x16\xA8\x98\x65\x7F\xE8\x6C\x9A\xA6\x9A\xA3\x97\x69\x94\x80\x99\x99\x26\x54\x6B\xA7\x01\x9E\x9B\xAA\x53\x38\x98\x63\x41\x6A\xE0\x7E\xB9\x30\x89\xB9\x60\xAF\x93\xBE\x09\x16\x94\x9B\xA9\x90\x69\xA9\x7A\xC3\x74\xB1\x9C\x99\x55\x9A\xA1\x17\xB1\x9E\x0E\xAD\x34\xC9\x98\xE8\x48\x67\xB5\x99\x8E\x98\x9F\x98\x6E\x8F\x16\x83\x5A\x29\x0A\xEF\x2E\x9B\x83\x9B\xBA\x95\x6B\xA6\x5C\xF3\x53\x85\x5C\x63\xA0\x00\xD6\x9A\xFC\x20\x7D\x7F\x9A\x8F\x99\xC4\x19\x6A\xBA\x5A\x2A\x59\x40\x5C\x6F\xA2\x9B\x84\x4D\xAC\x91\x5E\x7B\x7D\xCB\x9B\xA1\x99\x04\xB4\x63\xD3\x98\x47\x9B\x6B\xA0\x99\xA4\x9A\xAF\x95\x6C\x8F\x16\xC1\x9A\xA3\x72\x69\x94\x61\x03\x9F\xAB\x98\x6C\x86\x9C\x97\x77\xEC\x49\x70\xB6\x9A\x70\x8A\xBD\x99\x65\x51\x9B\x0C\x9D\x27\x5E\x70\x87\x6C\x10\x9D\xAF\x99\x60\xBC\x9B\x15\x9D\x1D\x9A\x6A\x9D\x9B\x37\x51\xC6\x9E\xB9\x24\x8D\xE4\x98\xC7\x90\x83\x40\x74\x4D\x77\x49\x7C\x8B\x6F\x74\xBE\x97\x4E\x76\xD1\x62\x6C\x37\x77\x40\x09\xD3\x6C\x46\x39\x9D\x4B\x74\xD3\x6A\x5A\x15\x77\xCE\x9B\x66\x9D\x98\x03\x9B\x2B\x6D\xD1\x42\x98\x03\x59\xA8\x1F\x8A\x4A\x75\x92\x95\x51\x65\x74\xB3\x74\xAA\x1B\xC8\x18\x73", -"\xB7\x1A\x3A\x9E\x4B\x70\xD3\x44\x9D\x5C\x9E\xD1\x99\x68\x2E\x00\x37\x01\xD0\x92\x10\x03\x9D\x3E\x9F\xCE\x9D\xD3\x72\x77\x59\x94\x36\x7F\x65\x7F\x97\x56\x4E\x51\x70\x59\x4C\x06\x20\x76\x48\x73\x4F\x57\x99\x69\x9E\x4B\x70\xD5\x40\x7B\x7E\x77\x9F\x5E\x32\x72\x00\x36\x02\xB6\x76\x72\x1C\x7B\x30\x56\x56\x7D\x68\x75\x95\x1D\x7F\xB2\x7B\x47\x9B\x94\xE6\x78\xE1\x8B\xBC\x47\x54\x58\x7A\xBE\x0C\x2A\x23\x8C\xA7\x8B\xB7\x04\x0A\xAD\x8C\x01\x82\xCA\x82\xAF\x1C\x7B\x2D\x8D\xBF\x72\x23\x94\x5B\x34\x8F\x57\x9C\xBF\x79\x73\xEB\x89\xAC\x2B\x10\xA2\x35\xFD\x2A\x0F\x40\x5D\x27\x48\x65\x03\x21\x79\xB1\x3E\x5C\x26\x6F\x40\x06\xB2\x79\x4C\xAF\x9E\xB3\x5B\x7A\x85\x2C\x9F\x59\x69\x75\xEB\x4F\x6E\xA0\x73\x89\x9B\x60\xA9\x98\x16\x53\xED\x90\xB1\x09\x16\x4D\x96\xF9\x66\x3E\xA8\x6F\x31\x02\x54\x92\x10\x14\x95\xEE\x6C\xE3\x4B\xB4\x7A\x9E\xF2\x6C\xDA\x4B\x55\x8B\x97\x10\x51\x57\x95\x33\xA5\x88\xA4\x9F\x95\x94\x56\xA3\x1C\x7F\x95\x01\x79\x5F\x47\x70\x31\x00\x61\x9F\x72\x06\x96\x6F\x94\x09\x71\x57\x90\x9F\x27\x72\x26\x68\x57\x89\x9E\x9B\x73\xFA\x91\x20\xA8\x85\x57\x9B\x4A\x12\x4D\x8D\x19\x9D\x57\x0D\x76\x3E\xB9\x70\x31\x03\x66\x93\x10\x1D\x96\x55\x48\xFA\x29\x66\xBC\x04\x33\x56\x68\x9E\xEF\x7C\x56\xA7\x94\x95\x0A\xC4\x6A\x96\x52\x71\x6B\x97\x17\xAF\x96\x44\x71\x6C\x94\xC5\x73\x96\xA9\x10\xC0\x69\xC5\x5C\x4F\xC9\x16\x05\x17\xC8\x40\x97\x5A\x90\x70\x99\xC6\x60\x91\x06\x04\x07\xAA\xD3\x62\x91\x55\x4C\x19\x98\xF1\x4D\x9A\x43\x22\x29\x9F\xE2\x66\x11\xA8\x93\x39\x96\x89\x58\x7C\x70\x91\xB6\x9F\x48\xAE\x92\x60\x79\x0A\xAC\xA4\x72\x92\xF5\x91\x01\x9D\x58\x88\x90\x35\xA2\x02\x99\x4B\xA0\x6D\xBB\x91\x32\x9C\x5B\xBE\x92\xC8\x93\x24\x9F\x83\xA2\x05\x20\x99\x75\x91\xC6\x40\xA1\xBE\x5E\x0F\xA6\x5D\x8B\x92\x28\x65\x33\x97\x54\x99\x8B\xD0\x93\x10\x2C\x49\x9F\xA0\x8F\x90\x28\x9E\x96\x63\xA0\xC5\x99\x09\xA3\x91\x6A\x91\x27\xA3\x20\x32\x83\x87\x81\xAA\x91\x1C\x9D\x4A\x9B\xA1\x75\x91\x0C\xA0\x4B\x96\x68\x4A\x8B\x3B\x99\x3D\xB1\x93\x22\x67\x2D\x99\x83\x80\x91\xF2\x92\x10\x9C\x83\xB2\x50\x46\xA0\x20\x77\x4C\x89\xA1\x42\xA3\x12\xA4\x84\x83\x93\x75\xA2\xF3\x17\x87\x97\x72\xC0\x96\x30\x9D\x84\x9C\x8C\x26\x94\x1A\x5A\x49\x91\x93\x55\x93\x84\x9B\x45\xAF\x1E\x19\xA3\xFF\x13\x68\x5E\x01\xFA\x38\x24\xA1\x46\x95\xA1\x21\xA1\x28\x98\x85\x9F\x9B\x63\xA1\xDD\x7C\x85\x82\x32\x6C\x93\x19\xA3\x1E\xB0\x7C\x70\x8B\x2A\x99\x85\xAF\x1E\x30\xA0\x0D\x1F\x85\x88\x60\x79\x93\x1B\xAB\x78\xA0\x98\xB8\x93\x74\x96\x82\x42\x92\x7D\xA2\x21\x98\x84\x80\xA2\xC8\x97\x32\x9F\x89\x71\xA2\xC1\x97\x2F\x91\x88\x8C\xA1\x87\x52\x13\xA8\x54\x87\xA2\x52\xA3\x65\x3B\x03\x69\x4C\x5C\x0B\xEB\x1C\x63\x45\xA3\xBB\x1D\x1A\x7A\x12\x49\x04\xCB\xA1\x45\x58\x8C\xB3\x17\xA4\x4E\x81\x0E\x13\x44\x8E\x84\xA3\x13\xA2\x17\x9C\x4D\xCF\xA0\x0F\x2C\x7D\xA6\x95\x22\x2F\x53\x52\xB2\x29\x71\x46\x8E\x41\x01\x8E\xB9\x97\xB5\x0D\xCA\x60\x1E\x01\xA0\x53\x9A\x5B\x5C\x5D\xA2\x63\x81\x20\xF4\x42\xB2\x1E\x9B\xCD\x4C\x29\x91\x21\x34\x91\xE4\x12\x8F\x71\x15\xAD\x98\xE5\xA0\xEB\x82\xDF\x68\x9F\x4E\x6E\x3A\xA5\x61\xAC\xA3\x31\x18\x57\x6A\x74\xB1\x9C\xA3\xA0\x1A\x94\x86\xA7\x92\xB0\x93\x00\x7D\x8D\xB9\x57\xDF\xA2\x0C\x03\x07\x86\x04\x0F\xA4\x39\xAD\x11\x07\x6D\xFB\xA1\xDB\x94\x10\x9F\x84\xE2\x97\x1C\x0A\xC8\x40\xA4\x23\x62\x17\x6C\x76\x82\x9C\x05\xA7\x1C\x94\x86\xAF\x92\x4C\x55\xC7\x66\x28\x20\x6C\x86\x09\x1A\x7A\x07\x27\x04\x2B\xA4\xBD\x56\x28\x0E\x70\x86\x08\x3A\xAB\x7B\xA6\x6E\xBC\x55\xBA\x57\x89\x0A\x06\x41\x03\x0A\x53\xAF\x17\x63\x36\xA7\x28\x26\x19\x39\xA4\x55\x4F\x4E\xA0\x7C\xAA\x21\x12\x9C\x67\x6D\x8E\xB4\x65\x5D\x25\x58\x05\x92\xB9\x8D\x27\xA7\xDE\x89\x92\xB2\x00\x93\x03\x49\x01\x95\xAE\xA4\x16\x08\xF1\x45\x14\x1C\x0C\x31\xA4\x3F\xA2\xCF\x75\xA4\xBB\x23\x4F\xAA\x93\x8A\x06\x3C\xA5\x57\xAD\x06\x00\xA5\x20\x02\x50\xA1\x50\x68\x5C\x62\xA6\x10\x0F\x95\xB9\x21\x43\xA6\x21\x25\x6A\x86\xA5\x01\xA7\xE0\x47\x2C\x04\x0E\x6E\x4F\xD2\x45\xCA\x16\x6E\xA5\x31\x1A\x77\x20\x49\x04\x7B\xA5\x45\x55\xCA\x24\x4E\xDF\x1E\x4C\xA1\x7D\xBC\x9E\x06\x99\x96\x99\x41\xA0\x00\xAA\x33\xD2\x0C\x60\x9D\x73\x9D\x31\x6E\x9A\xD2\x45\x74\x57\x9F\x40\x7D\x73\x91\xA6\x3F\x9D\x0C\x06\x76\x81\x04\x68\x9C\x65\xAA\x76\x8C\x4E\x49\x9E\x4B\x72\x98\xA9\x9F\x30\x99\x7B\x91\x77\x9E\x74", -"\xF9\x1D\xDD\x93\xD2\x4C\x75\x61\x9C\xD6\x93\x7C\xB6\x09\x82\x72\x34\x7A\x54\x07\x72\xAE\xA4\x4C\x09\xC6\x4F\x49\x09\x04\x6D\xAC\xCE\x6D\x20\xA4\x4C\x10\x0F\x99\x95\x4D\x3F\x17\xC6\x02\x54\x30\x96\x53\x98\x34\x6F\x2F\x8A\x6A\xB1\x52\xC6\x8B\x6B\xAD\x20\x17\xA0\xF5\x2E\x13\x19\xA0\xCA\xA6\x1C\x09\xC6\x57\xA6\x00\x00\xDA\x9D\x9C\x80\xA6\x89\x05\x1A\x06\x14\x8D\x98\x0A\x2E\x1B\x2E\x40\x47\xA5\x6A\x91\x75\xA7\x9D\xBB\x7D\x22\x2D\xA4\x14\x3A\x4F\x48\x72\x01\x84\x48\xE1\x7D\x98\x9A\x36\x76\xAC\x91\xB1\x7F\x83\x4F\x13\x0C\x19\x66\xA7\x88\x4C\x97\x99\x72\x80\x05\x5F\x9A\x38\x77\xCE\x71\x00\x63\x9A\x93\x1C\xED\x79\x9B\xFF\x9C\x1C\x0B\x9B\xB2\x73\xA3\x96\x9B\x99\xBF\x57\x9F\xF6\x83\x19\x63\x67\xA3\x3C\xF2\x9B\x19\x03\x12\xB9\x5C\x88\x83\xC5\x5C\xC8\x70\x00\x58\x7E\x41\x01\xA1\x87\x89\x64\x69\x24\x81\x8F\x48\x63\xF3\x53\xA4\x73\x2C\xA3\x9E\xCF\x62\xE2\x74\xA0\x98\x6A\x20\x98\xA2\x8C\x40\x8D\x64\xDF\x61\xDC\x74\xF9\x5B\x83\xE0\x62\x29\x97\x8E\x69\x63\x62\x7F\xDE\x72\x98\x76\x81\x17\xA8\x9C\x8A\xA1\x94\x69\x8A\x94\xEE\x80\x90\x5E\xA8\x24\x89\x6E\x5D\xF8\x68\x88\x04\x7C\xE4\x72\x87\xA5\xA8\x94\x2D\xD4\x86\x36\x56\x7E\x2C\x62\x45\x6A\x62\x1C\x7E\x93\x8B\xC5\x5D\xA0\xB9\x5C\x8C\x72\x1A\x7C\xC6\x55\x7C\xC0\x7F\x60\x63\xA6\x5D\x64\xD1\x26\xC6\x70\x92\x52\x97\x76\x97\x87\xA1\x87\xAF\x7D\x25\x77\x4A\x62\x29\x95\x88\x20\x81\x4B\x25\x0A\xB3\x00\x32\x01\xF4\x72\x10\x13\x7F\x84\x8A\x94\xA2\x93\x43\x7F\xD5\x1B\x31\x6F\x9F\x87\x7F\x90\x2B\x9E\x8F\x1E\xA3\x89\x84\x67\x92\xA3\x76\x4C\x72\x33\x02\x99\xA4\x32\x10\xA9\xE8\x7E\x9A\xA7\x71\x57\x7F\x35\x66\xA7\x8B\xFD\x68\x76\xDD\x7E\x7B\x8A\x1A\x70\x87\x75\xA9\xA5\x89\x08\xB3\x00\x34\x02\xF8\x9E\x08\xA9\xA9\x76\x82\x53\x65\x93\x40\x52\xA2\x9C\xC1\x70\xFF\x72\x7F\x57\x67\x60\x3B\x0E\x83\xA9\x75\x8D\x6B\x0A\xFF\x71\xA7\x60\xA8\x90\x8E\x27\xA0\x7E\x33\x01\x0D\x0C\x04\x3A\x3B\xA7\xA9\x87\x8D\xF7\x53\xA9\x51\x9C\x17\x52\x04\xA7\x7D\x67\x83\xD9\x79\x4A\x89\x68\x71\x67\x16\x8F\x9E\x76\x65\xD9\x65\x8E\xAC\x9B\xAD\x3F\x69\x30\xF4\x54\x59\x7D\x65\x8A\x8F\x8C\x10\x99\x6C\x84\x76\x83\x58\x63\x9A\x70\xAA\x3B\x6A\x80\x60\x3B\x6E\x91\xB4\xA8\xB2\xA8\xA4\x61\x68\xB7\xAA\xAC\xA8\x86\xBA\xAA\x20\x00\x06\x8E\xAB\xA8\x79\xC0\xAB\x7D\x6A\x14\x0B\xA8\x63\x5E\x9D\xAE\x6E\x73\x00\x36\x01\x01\x86\x10\x22\xAB\x14\xAB\xAA\xAB\xA6\xBD\x55\x1C\x57\xAB\xA9\x42\x91\x68\xD2\xAB\x27\xAB\x36\xA5\x65\xCE\xA8\x6A\x60\xAD\xB5\x65\xED\xA9\x15\x67\x01\xBC\xAA\x7B\x67\xAF\xAB\x01\x81\xAB\xB9\x08\xB7\xAE\xF0\x62\xA9\xC5\x6B\x0C\x07\x03\x26\x80\x03\x06\x09\x85\xAE\xA9\x7F\x7E\x7F\xE1\x87\xA6\x4C\x43\x8E\x9C\xF5\x9F\x02\x8D\x66\x61\x8B\x9C\xAD\x27\x80\xAC\x28\x7F\x0C\x00\x6F\x6B\x38\x7E\x00\xFB\x80\xA9\x9B\x68\x96\x65\x10\x8A\x9B\x6B\xAB\x21\x6A\x84\x66\x04\xA5\x68\x5F\x83\x7A\x67\x06\x93\x68\x46\x80\x51\x9B\x07\x80\x6A\x45\x68\xBF\xA8\x9F\x5E\x81\x35\x6A\x18\x81\x05\xB9\x68\x8B\x8F\x12\x81\xB2\x86\x67\x62\x82\x72\x86\xA2\x49\x68\x73\x0A\xCC\xAC\xB2\x92\x81\x9B\xA9\x67\x6D\x00\xA8\x81\xD7\x66\x8F\x69\x81\x43\xAB\x07\x82\x0F\x89\xCF\x5D\x68\x1F\xAC\x03\x8A\xAC\xA2\x68\x4E\x82\xCE\xA5\xB2\x82\x69\x27\xAD\x13\x81\x9F\x79\xAA\x2B\xAF\x15\x84\x06\xAE\xAC\xA1\x63\x27\xA5\x05\xBE\xAC\x5A\xAD\xCB\xAA\xAD\xBF\x81\xC9\xA9\x8A\x66\xB4\xB0\xAC\x0B\x9D\x18\x8C\xE3\x73\xAC\xF9\x83\x26\x8F\xAC\x83\xAD\x4A\x6B\xD9\xAB\x06\x89\xA9\x0C\xAA\xA2\xAE\xA0\xB3\x00\x39\x02\x2F\x05\xE2\x3A\xAD\xAA\xA8\xC2\xAC\xAA\x96\x8E\x4C\xAC\x12\x87\xB2\xA3\xAC\xE9\x67\x3C\x57\xA2\x65\xAD\x03\x69\x6B\x61\xB5\x93\x87\x59\xAC\x8E\x6D\xB6\xAF\xAC\x24\xAD\xCC\xAB\xB6\xBF\xAC\x34\xAF\xDC\x82\xAF\xB0\xAD\x5D\x81\xE4\xA9\xB6\xBD\xAC\x93\xAD\xD8\xA0\xB4\xB5\xAC\x42\xAF\xD3\xA4\xB4\x94\x68\x72\xAC\xD2\xA0\x09\xAA\x7F\x80\xAE\xC7\xA2\xB8\x88\xAE\x45\x83\xE2\xAE\xB5\x93\xAD\x20\xAC\xE6\xAA\xB8\x97\xAD\xB1\x91\xE3\xA8\x05\xB2\x6C\x90\xAD\xE1\xA3\xA4\x63\x81\x62\xAE\x1F\x87\x86\x55\xAD\x67\xAE\xE6\xA4\x72\xAA\xAD\x44\x6B\xE7\xA6\xB9\x99\x4E\x4C\x81\xD1\xA9\xB3\x96\x68\xA6\xAD\x1D\x8C\xB1\xAA\x5F\x81\xAF\x10\x8C\xBA\x90\xAD\xB4\xAE\x0A\xA8\x04\xA4\x9C\x55\xAF\xEC\xA4\x85\x6C\x68\x0E\xAC\xDB\xAC\xB5\xBE\x63\xAF\xAE\xE4\xA5\xBC\x95\xAE\x6E\xAF\xE5\xA2\xBA\xB8\xAC\x43\x7A\xF5\xA8\x79\x46\xAE\x3C\xAE", -"\x15\x8E\xB8\x9F\xAF\xBF\xAF\xF4\xA3\xBA\xAA\x81\xFE\xA9\x19\x0E\xAD\x91\x7C\x30\x03\x43\xA3\x10\x11\xA4\x1B\xAE\xD2\xAC\xA8\x77\x63\x50\x9C\x69\x94\x9F\x6C\xAC\x31\x6E\x90\xAF\x84\xBC\x83\x75\x6B\x64\x00\xAA\x90\x89\xB8\x7F\xA8\xA0\x00\xB4\x00\xE1\x9F\x49\x0F\xA8\xAF\xA8\xCF\xAE\xC1\x70\xC0\x97\xA4\x08\x84\xE6\x8A\x10\xAD\x8B\xC7\xAE\xD9\x4D\x38\x83\x82\x0A\xB0\xDE\x83\x5C\x7F\x88\x30\x02\xCD\x51\x0B\xBE\x58\x17\x05\x5E\x02\x64\x4F\x83\xE2\x8F\xAF\x79\x37\xBF\x8C\x7B\x8C\x2C\x8F\xB7\x68\x02\xFA\x38\x0D\xB1\x38\x96\x4D\xBE\x81\x36\x6D\x36\xA7\x83\x50\x50\xD4\x81\xA7\x74\x8D\xD0\x4D\xD5\x8D\x0C\x99\x64\xB0\x80\xE9\x42\x0D\xBA\xB0\x5D\x8D\x8A\x1D\xC3\xB2\x8D\x40\x81\xE5\x75\x37\xA5\x8D\x67\x8F\xD5\x82\x0E\x82\x69\x86\x8E\xDB\x8D\x34\xB0\x8D\x3E\xB0\x4B\x6A\x95\x74\x9C\x07\x79\xE4\x82\x38\x94\xB1\xE3\x89\x15\xB9\xCF\x49\x8E\x63\xAF\xEA\x72\x8E\x5F\xB0\xF4\x4F\xE3\x82\xF0\x6E\xA8\x45\xB3\x17\xB5\x09\x95\x8E\x63\xB0\x9B\x6A\xC1\x90\x24\xA7\x9D\x13\xBB\x0F\x9E\x8E\x69\xB0\xE8\x8B\xC6\xAD\x82\x19\x05\x0C\x00\x34\x91\x55\x31\x00\x6C\x74\xB1\x3C\xA9\x31\x00\x2E\x84\x0E\x98\x68\x85\xB1\xF0\x71\x03\x0E\x5F\xEC\x7D\x4D\x6E\x45\x55\xB1\x97\xAA\xC0\x84\xFF\x46\xB0\xED\x82\x08\x0E\x16\x33\x77\x7C\xB0\x1C\x0E\xC7\xB1\xB0\x9A\xB3\xDF\x61\x1C\x49\x04\x9F\xB3\xF9\x79\xC8\x99\x63\x8B\xB3\xFA\x76\x60\x1D\x51\x95\x8D\x24\xB6\x95\x53\xB2\x3F\xB3\xD8\x84\x91\x7E\xA7\xE6\x98\xF9\x65\x3E\x92\x2F\xDC\x92\x1B\x03\x68\x59\x93\x02\x07\x36\x93\x42\xA3\x50\xC7\x7A\x09\x93\x93\xB4\x71\x31\x92\xEC\x6B\x42\xA3\x93\xAD\x6D\xFE\x81\xCC\xA6\x4D\xEA\x93\xED\x6C\x4E\xBC\x6E\x38\x93\x00\x9A\x8A\x81\x91\x63\x86\x0E\x90\x16\x9B\xA9\xF8\x91\x59\x7A\x4F\x91\x90\x45\x95\x12\x9B\xBD\x4C\x91\x12\x10\x06\x9A\x51\xBA\x85\xDF\x6F\x14\x95\x9C\x05\x21\xB2\xB0\x5C\x2D\x13\x91\x27\x8C\x70\x2E\xB1\x10\x3A\xB2\x44\x84\x09\x9D\xCB\xA4\x6E\x53\x9A\xFE\x82\x43\x83\xB3\xAC\x6E\x0B\x9A\x1C\x87\xB3\x2A\x92\xEA\x64\x43\x8B\xB3\x5B\x87\xB4\xAA\x86\xBC\x25\x6C\xA3\x0D\xA4\x4F\x92\xB3\x65\x87\x3D\x9D\x78\x96\xB3\x59\x30\x36\xBE\x8B\x9B\xB3\x01\x96\x52\x99\xBD\x45\xA2\x4B\x92\x41\x9E\x41\x96\x27\x16\xA2\x15\x93\x1A\xA5\x01\x5A\x93\x45\xB9\xC6\x5E\x44\x09\x04\x47\xB5\x51\x57\xB4\x74\x4F\x35\x71\xB5\x5A\xA9\x7E\x50\xD7\x47\xD1\xB5\xAF\xF7\xAF\xA0\x57\x03\x26\x00\x2B\x38\x4B\xBD\xB7\x96\x4D\x47\x62\x02\x88\xCF\x85\x87\xCE\x87\x77\x81\x1D\x9B\xAF\x47\x80\x16\x64\x1C\xA6\x61\xDE\x84\x57\x67\xD3\xB7\x65\x95\xA9\xDA\x7E\x81\x51\x97\x11\x6E\x76\x8B\x80\x5C\x87\xE5\x87\x1B\x66\x1C\xAC\x60\x3F\xB7\x0B\x93\x83\x69\x90\xE6\x87\x0A\x6E\x91\x8D\xB5\xB1\x90\x7B\x85\x73\x47\x88\x6C\x89\x4C\xB2\x1C\xA9\x90\x34\xB7\x79\x8C\xD4\xA1\x87\x38\xB5\x72\x6A\xD3\x9C\x66\x5D\xB6\x54\xBC\x87\x60\xB5\x40\xB4\xB5\xA3\xD4\x8A\x8A\xD9\x85\xFC\x7B\x1D\x90\xB5\x4A\xB5\x4D\xBF\xD5\xA0\x61\x4E\xB5\x09\x64\x83\x49\xB5\x79\x63\x52\xB3\xD5\xA8\xB5\xEB\x84\xE9\x5A\xC1\x11\xAC\x87\xA8\x9D\xA4\x03\xB6\xAD\x4C\xAA\x62\x54\x24\x87\x3A\x7C\xAB\xBB\x6C\x40\x0C\xAC\x56\xAA\x0B\x8A\xAE\x4F\x35\x82\x69\x4F\x00\xD8\x83\x47\x88\xAB\x60\xBE\xC0\x83\x86\x33\x03\x95\x83\x10\x17\x89\x07\xAD\x9E\x6E\x04\xBF\x7B\x36\xA9\x6C\x8E\x25\xBD\x27\x2C\x1B\x64\xB5\x44\x13\xAC\xE0\x22\x60\xB9\x08\xB4\x00\x34\x02\x9A\x83\x10\x2A\x89\x9D\xB5\x9B\x8F\xB0\x4D\xB6\x22\xAA\xAA\x64\xAD\xAA\x7E\xB1\x68\xC2\x66\x85\x32\xA9\x81\xB4\x6A\xB9\x97\x2A\xB6\x0E\xA8\x0D\x05\x03\x1A\x9E\x83\x8A\xC5\x7E\xB0\x6F\x89\xB4\xB6\x1A\x60\xB0\x44\xB5\x8A\x68\xA3\x87\x17\x8E\x8A\xA5\x6B\x6E\xB2\x32\xA5\x8A\x2D\x8C\xD7\x30\x00\x0A\x13\xA6\x89\x41\x10\x4D\x1B\x8F\x29\xB0\x19\x06\xBA\x01\x04\x43\x59\xE7\x95\x64\x68\xB4\x84\xB7\x9D\xA4\x68\x66\x03\x44\x28\x7A\xBF\xD2\x84\xAF\xEE\x5C\xD6\x58\x2A\x9D\xB0\x53\x73\xDA\x50\x75\x47\x67\x4D\x6B\xCB\x76\x75\x6D\xB7\x68\x5F\x89\xAC\x99\x4F\x5D\x56\x4E\xD7\x50\xE9\x4D\xAF\xAB\x61\xD9\x57\x9E\xA0\x00\x4A\x5F\xD2\x1F\xDE\xA5\xAF\x99\x4C\x7F\xB1\x3D\x6E\x5D\xE8\x74\x56\xBA\x7B\x73\x5D\x6D\x38\xAE\x8F\xB0\x9B\x0C\x31\x83\x8C\x15\xDF\xAC\x84\x7F\x5C\x15\x02\xE1\x83\x5E\xD3\x4D\x19\xB7\xE1\xB8\x69\xB7\x8B\x6A\x82\x78\x68\x79\x91\x5E\xAD\x6F\xAE\x5B\x12\x99\x5F\x26\x12\xAA\x6C\x84\x83\xA9\xE9\x50\x44\x2B\xB8\x78\x69\xEB\x5E\x29\x43\xAA\x34\x84\xFF\x0E", -"\x3F\x30\xB8\x6C\x8B\x94\x50\x12\xB9\x8E\x19\x54\x80\xB9\x1F\xA3\x52\x55\x6D\x4C\x82\xFF\x75\xB8\xC5\x5F\xEA\x28\x13\xAC\x64\x3E\xB8\x77\x6D\x7C\x69\x7E\x1E\x65\xE4\x94\x22\x38\xB8\xF3\x5D\x68\x87\xD1\xA5\x86\x55\x2B\x30\x93\xE5\xAB\x86\xDA\x6B\xD2\x77\x19\x9A\xA9\xA4\x9E\x6C\x8B\x39\x88\x65\x49\xB8\xE9\x4A\xD5\x8B\x60\x33\xB4\x4F\xBA\xD7\x98\x7E\x54\xB6\xF5\xA3\xD6\x8D\x4F\x65\xB5\x1C\x60\x1D\xBC\xB5\xB5\xAD\x08\x6B\xD6\x9C\xB9\x46\xB5\x09\x68\xD4\x9C\x66\x51\xB6\x9B\xB8\x1C\xA2\x87\x47\x83\x5D\xB8\xE7\xB1\xB5\x5E\xB7\x5E\xB4\xD7\x95\xB5\x7E\xB6\x20\x68\xE4\x8E\xB8\xAB\x60\x28\x79\x88\x4C\x88\xFE\x86\x0E\xAD\xEC\x77\x9B\xC0\x94\x94\xB0\x23\x98\x7C\x8E\xB7\x88\x85\xB5\x6D\xA1\x6C\xB5\x8A\x8E\x8A\xAB\x88\xA7\x63\xC8\x2F\x98\x48\xBA\xF9\x86\xB8\x8E\xB0\xB3\x88\x37\x9B\xCD\x79\x63\xB9\x7C\x2B\x08\xF0\x93\x73\x7C\x88\x26\xBA\xBE\x60\xA3\xB4\x64\x6E\xA9\xC9\x98\x51\x63\x7D\x00\x8D\xE2\x71\x8D\x5C\xB9\x3B\xA8\x73\xB3\x7A\xAE\x7D\x30\x70\x90\xAA\xB9\x14\xB2\x29\xAB\x41\xAB\xA2\xB9\x7D\x2D\xAB\x87\xB7\xBA\x89\xAC\xCC\x50\xAC\xB6\x93\x72\xBA\x06\x60\xE1\x76\x91\x9B\xA8\x3D\xA9\x87\xA7\xEB\x94\xAB\x3E\xAA\xE3\x7B\xEB\xA7\x85\x24\xA9\xE4\x43\xF9\x41\xAD\x44\xA8\x45\x66\xA4\x9B\x7E\xC5\xB9\x98\xBE\xB7\xA7\xAB\xB8\xB5\x1D\x78\xA5\xAC\x9F\x99\xB8\xC1\x7B\x83\x9D\xA9\x9D\x05\xAB\xB4\xAC\x8C\x65\x31\xAA\x45\xAA\x93\x71\xA9\x87\xB9\x67\xBF\xEA\xAD\xA9\x76\x5A\xF6\x73\x65\xA5\x74\xC5\x1A\xA4\xB1\x96\x7E\x80\x92\xA8\x54\x61\x82\x57\xAA\x88\x79\xA6\xA6\x0C\xA0\xAE\x95\xB2\xA7\xA1\x5B\x30\x83\x14\xB2\xD2\xA2\x47\x6A\xAB\x4E\xAF\x5A\x65\xD7\xA9\xAD\xB5\xAB\xF4\xA1\xAD\x96\x80\x79\x64\xBE\xA9\x01\xBA\xAB\xC6\xAE\xE1\x52\xEE\xBE\xA9\xDE\x66\xC2\xAD\xA9\x4C\xB6\x59\xAC\x0C\x8E\x98\x56\xB8\x1F\xBD\xB1\xAC\xA1\x6A\xAE\xD2\xAF\xDB\xA7\xBE\x84\xAE\x34\x6B\xC2\x99\xBD\xB0\x67\x38\xB4\x6C\x6D\xBD\x94\xAE\x8F\xAD\xD7\xA8\xB6\xAC\xB7\xDE\xAD\x19\xB1\xF1\x83\x68\xC1\xAC\x90\x60\x06\x9C\xAE\xE3\xAD\xCE\xB4\xB6\xAE\xBC\x29\x6A\xF2\xA9\xBE\x8C\x69\x29\xBD\x05\xB2\xA5\x54\x69\xB6\xAC\x4D\x3D\x07\xB8\xAE\x5A\x83\x1D\xB6\xB3\x5F\x82\x21\xB0\x91\x7D\xBF\x91\x82\xA4\x9C\x95\x6D\x82\x99\xB0\x3D\x06\x9B\x6A\x39\x86\xB0\x68\xB2\x77\x50\x0A\x86\xBB\xF3\x5E\xB9\x6C\xA7\x63\x8B\x8F\xB5\xA0\x6C\xAE\x5F\xBA\xB1\xB4\xBC\x64\xEB\xA0\x95\x9A\x87\x68\xB0\xA9\x75\xBB\x69\xAA\x6C\xB8\xDC\x90\xBB\x69\x7E\xC4\x6A\xEB\x84\x7C\xE5\xB8\x1F\x7A\xDB\x9B\x6C\x70\xBD\xDE\xB7\xDC\x95\x6A\x73\xBF\xB5\xB8\x46\x7F\xBD\x69\x7E\x73\xB1\xAB\x4F\x8A\x09\x6F\x97\xB9\x2C\xA0\xBA\xAA\x58\xAD\x73\x98\xA3\x5E\x8E\x69\xAF\x69\xD0\x08\x8B\xAB\x7F\xC7\xBE\x56\x6D\x8C\x40\x00\xE5\x9A\xDD\xA5\x8C\x8F\xA5\xBC\x77\x32\xB9\x0A\xC6\x68\xBE\x83\x10\x38\x8B\xF9\x78\xC9\x8B\x2F\xBA\x78\xFD\x89\x72\xB5\xEB\xB5\xBD\xC6\x89\x8C\x14\x30\xBC\x36\x06\x8F\xE9\xB3\x1C\x32\x8B\xAE\xBC\xCA\x87\x03\x0F\x8C\x03\x07\xC3\x8D\xFA\x95\x9E\x12\x8C\x67\xAE\x2C\x8B\x2D\xD1\x8A\x47\x83\x2D\x93\x6D\xD9\xB0\xF1\x8F\x8B\x91\x4E\x3F\x2C\xC8\x81\x3C\x11\x30\x7B\x76\x6D\x8F\xB1\x5C\xB2\xB1\x82\x0D\x01\xB8\x43\x04\x83\x6D\x3C\x8E\xC6\x84\x84\x6C\x8D\x81\xA7\x39\xA1\xBD\x99\x8E\xD4\xBC\x33\xB0\xB7\x65\xBE\x08\x0F\x0F\xAB\xB1\xE4\x8E\x39\xB6\x3E\x9A\x6E\x36\x02\x3A\xB0\x00\x2C\xB3\xEE\x8E\x3B\xBE\xED\x7E\xB2\x97\xBF\x5C\x94\x15\xBA\xB3\xC4\xB2\x3D\xB6\xBD\xB8\xB3\xC9\xB2\xFF\x8C\xCF\x82\x90\xB5\xB1\xDF\x6B\x8A\x83\x93\xAD\xA1\x5E\x99\x70\x4F\x7B\x08\xB5\x4D\x4A\xD0\x95\xA3\x48\x94\x37\xBA\x78\x0F\xB4\xD6\xA3\x06\x92\xD1\xA2\xB3\x6E\x03\xFC\x96\x1C\x35\xB2\xE7\xB2\xBE\x04\x76\xB2\xBF\xF4\xBE\xBE\x0E\x4D\xB8\xBF\xE9\x9C\x00\xC4\xCF\xB7\x8F\xE5\x92\x31\xB1\x4E\xA7\xC0\x02\xC1\x56\x8C\xCC\xAE\x93\xCE\xB0\x41\xB6\x4F\xB1\xA1\x01\x99\x0C\xC0\x4F\x93\xB3\x3B\xA0\xD3\x9F\x40\x97\xB3\x6D\x85\xF3\xBF\xCD\x92\xC0\x75\x84\xE0\x1F\x03\xD7\xC0\x4E\xB8\x15\x93\x72\x17\xA0\xFF\x1D\x23\xAF\x48\x86\x99\x91\xA2\x86\x90\x82\x8A\x80\xA2\x90\x26\xAF\x82\x87\xA4\x5D\xA1\x27\xAE\x46\xAC\xA0\xA2\xA2\x14\xCA\x85\x9A\xA2\x65\xA2\x29\xAE\x89\x95\x61\xA9\xA2\x0C\xC6\x83\x99\xA9\x36\xC3\x1A\xA8\x03\xDB\xBA\x33\x54\x2C\xAA\x84\x87\xA1\x7F\xA3\x1A\xC6\x87\xB6\xA2\x23\x64\x2E\xA7\x48\x81\xA1\xC5\x93\x10\xAB\x4C\x83\xA2\xFE\x90\x44\xB9\x54\x88\xA2\x47\xC3\x76\x99\x04\xCD", -"\x14\x8B\xA1\x32\xA6\x03\x12\xA2\xCB\x72\x13\xC4\x89\x90\xC1\x97\xA1\x3C\xA9\x89\x97\x7E\xEA\xBD\x15\xCF\x85\x89\x67\x61\xA2\x0B\xAB\x05\xCC\xC2\x24\xA4\x1E\x96\xE9\x89\xC0\xE8\xB8\xE1\x88\x09\xEF\x9F\x0D\x66\x1A\xC9\x87\xAC\xC1\x6C\x02\x2E\xA5\x8B\x85\xA1\x6E\xC2\x1F\xA1\x0A\xF4\xC1\xBB\xA3\x1E\xA8\x07\xC6\x95\xCF\xBD\x51\x6B\x49\xA3\x6F\x3A\x85\xCA\x46\x9D\x12\x8F\x3E\x84\x0A\xB0\x64\x7A\x37\xDF\x8C\x51\x85\x64\x72\x58\x02\x05\x5A\x56\x62\x82\x1C\xE9\x32\x75\xB8\xDD\xB1\x97\xD0\x2D\x3A\x39\xC6\x52\x47\x09\x04\x32\xC5\x51\x44\xC3\x11\x2D\x3A\x36\xC8\x96\x27\x49\x64\x33\xC9\x58\x0E\xC3\x55\x4F\x3E\x73\x9F\xB9\x01\x0B\x96\x59\x9D\x50\xB9\x57\x0F\x96\x0C\x0F\x0F\x49\x04\xDF\xC1\x45\x51\x52\xA0\x9C\x35\x7D\x49\x95\x01\xF9\x1F\x8B\xA6\x55\x6A\x52\x82\x1E\x40\x02\x20\x76\x2D\x07\x72\xD6\x08\x23\x7E\x08\x3A\x3B\xF3\xC3\x93\x56\x2D\x00\x8B\x1C\x44\x9C\x87\x65\x91\x06\x60\x6B\x47\x92\x3A\x77\xC3\xFA\x4C\x48\x08\x12\x79\x9E\x7B\x94\x34\x93\x10\xFE\xC3\xCD\x70\xDD\x12\xE6\xBA\x93\xAD\x7C\x6C\x84\x86\x78\x6F\x55\x9C\x6A\x09\xC5\x08\xC4\x4A\x9A\xE0\x11\x8D\x8B\x23\x30\x04\x97\xBF\xAD\x57\x99\x1D\x21\x95\x03\xCE\x3F\xC3\x0A\xC6\x11\x6D\x41\x26\x5D\x57\xAB\xEC\xBC\x81\x50\xC4\x57\x9B\x00\x3F\x41\x2D\x60\x22\x10\x09\x1F\x11\xC9\xC4\x16\xC5\xF0\x74\xF7\x96\xB8\x05\xC4\x08\x0C\x91\x1B\x31\x9E\x41\x45\xC8\xCD\x16\x91\xF1\xC0\x0D\x01\x17\x49\x04\x3F\xC6\x5F\xA1\x12\xF0\xB4\x0C\xC7\xC6\x7E\x10\xDC\x62\x3C\x55\x4A\xCA\x4F\x88\x28\xA9\x9F\x3B\xCC\x13\xF4\x1D\x22\x6F\x61\xB1\x10\x06\x89\x3A\xC5\xFE\x17\x11\xD3\xA3\x41\xB4\xBA\x89\x7D\x98\x6C\x18\xC4\x7D\x3F\x63\x2B\x20\x55\xC7\x85\x00\x0F\xD0\xC5\x36\x01\x28\xB3\x10\x21\xB2\x30\xC4\xDB\x12\xE6\xA3\xC4\x04\xC6\x73\x97\x14\xE1\x62\x49\xC7\xE9\x4A\x12\xC5\x30\x2D\xC4\x02\x32\x78\x22\x8E\x3E\x6D\xD2\x45\x3A\xA7\x8E\x03\x05\xEA\x8D\xB3\x47\x6D\x89\x65\x1A\xA6\x35\x70\x6F\x02\xA2\x8C\x86\x3B\x94\xBB\xC5\x8A\x13\xAD\xB5\x5C\x33\x60\x6D\xF0\x89\x7F\x4E\xA1\x02\xB9\xDA\x65\xBD\x49\x8F\xA9\x7E\xF1\x8C\x18\xF1\x6D\x2F\x80\xDD\x62\x78\x2E\xC3\x74\x1F\x58\xC2\x78\x24\x9D\x1C\x49\x42\x01\x1A\xC2\xC5\x31\xC6\xD5\x47\x18\x73\x37\xFE\x8A\x96\xA7\xDF\x10\x5F\x58\x6C\x04\xC0\x85\xA0\x00\xF2\x36\x6D\x38\x13\xE7\x42\x29\x4E\x53\xCA\x88\xB1\xC3\x38\x00\x28\x07\x12\x3A\xC6\xF6\xC3\x50\xC5\xAE\x79\x12\xD4\xA1\x1E\xCC\x4C\x7B\x04\x2E\x36\xAA\x09\x51\x90\x63\xBD\xA4\xE2\xB7\x31\xBF\xB2\xED\x5E\x13\xA9\x1C\xE2\x33\x72\x84\x03\xAE\x1B\x6A\x58\x90\xC7\x7F\x1F\x1B\x59\x94\xCE\x8E\xA3\x69\xD2\x11\x8F\x00\x15\x76\xBA\x50\x34\x1D\x7A\x6F\x79\x31\x0F\xF1\x00\xF7\x86\x41\x05\x1E\xC3\xBF\xFC\x10\x40\xC6\x35\x65\x45\x94\x11\x6A\xC8\x18\xFC\xB8\x46\x70\x46\x96\x16\x4D\x12\x2B\x53\x5B\x49\xCE\x2E\x97\x60\x6E\x5E\x42\x66\x03\x91\xD5\xA2\x7E\xC8\xCE\x07\x8F\x13\xA3\x17\x56\x16\x69\x37\xA3\x31\xEE\xB9\xDD\x16\x0B\xE1\xC6\xBE\x71\x0F\xF2\x00\xD0\x03\x49\x0D\x20\xF1\x8A\x0A\xCA\x6F\xC6\x06\x1E\x05\xEE\xC4\x46\x70\xF1\x81\x55\x3E\x27\x46\x09\x01\x88\xA5\xDD\x0B\xD2\xB4\x05\xAE\x86\x9B\x46\x4F\x04\x15\x10\x77\x18\xCB\x4F\x2B\x21\xC1\x77\x81\x2D\x67\x48\xF1\xBD\x5E\xD6\xA9\xA7\x6A\x3B\xAE\xC6\xD7\xA0\x11\x5D\x94\x10\xC7\x6C\x1E\xDD\x62\x1E\xE0\xC7\x62\x0E\x77\xC8\xDE\x10\xC5\x02\x80\x01\x8C\x79\x91\xC8\xA5\xC6\xD2\x60\x3B\x9A\xA5\x5F\x1E\xFF\x03\xA0\x87\x52\x3E\x96\x13\x06\xEE\x00\x95\x72\x4A\x14\x04\x0D\x86\xC9\x6E\xC5\xEC\x72\xD0\x94\xAB\xB2\x7C\xDE\x99\x74\x3D\x1C\x11\x08\x81\xC4\x3E\x29\x53\x37\xCA\xE0\x19\x20\xC7\xC8\x50\xC4\x0D\x02\xAE\x83\x04\xE4\xAA\x8E\xCA\x1E\xC2\xC9\x05\x52\x03\xA0\x76\x0F\x6E\x87\xC5\x92\xCB\x24\xE5\x3B\x71\x4A\x50\x96\x0E\xB0\x01\xFE\x0E\x51\xC2\x25\xE4\xC1\x97\xBA\x2B\xA6\x25\xD7\x1D\x4C\x1E\x6D\xC0\x0B\x56\x6F\xD6\x09\x23\xA3\x1E\xE8\x45\x09\x04\xA1\xC6\x53\xAF\x01\xEA\xC6\x4E\x9B\x25\x66\x5D\xC1\x86\x41\x95\xBD\x70\xC8\x79\x86\x07\x96\x1F\x38\x07\xFA\x04\xDD\x1D\x7D\xA8\x95\xDF\x9E\x5A\x9B\x08\x92\xB0\xE4\x9E\x45\x00\x57\x8C\x06\x4B\x9E\xA5\xBE\x7E\x90\x97\x77\x94\xE2\x9C\x09\xED\x5F\x55\x9E\xFC\x92\x70\x15\x6E\xE4\x6E\xFD\x94\xCB\xB9\x70\x36\x02\xFE\x92\x10\x3C\x9F\x9F\x96\x08\x01\x5A\xB1\xB3\x01\xA9\x69\x92\xC5\x68\x96\x72\x02\xC5\x8B\x5A\xB8\x64\x0A\xA3\x21\x55\xC9\x4E\xA0\x6D\x25\x15\x74\x5B\x92\xA0\x27", -"\x9E\xE4\x45\x81\x8E\xA6\xA4\x0C\x19\x75\x0A\xF2\xA2\x62\x07\xD7\x92\x07\xF5\x17\x7F\x6C\x71\x92\x10\x06\x97\xD3\xC9\x72\x94\x5A\x63\xBA\x96\xBB\x73\x92\x16\xBC\xA8\x69\x7F\xBA\xB6\x95\x4F\xCB\xC1\x95\x3B\xC0\x16\xDC\x97\xC9\xA5\x22\x70\xBB\x3F\x6D\x84\x03\x49\x0D\x2E\xD1\x72\x2E\x98\x7F\x9A\x03\xF8\xA1\x34\x98\x58\x75\xC1\x71\x98\x35\x98\x8D\x8B\xCB\x72\x97\x37\x88\x8A\x91\x21\x98\xA7\x2C\x1C\xF4\x2B\x65\x86\x82\x86\xA4\x29\x86\x98\x9C\xB7\xA8\x82\x72\x23\x64\x46\xA6\x2D\xB2\x5D\xA2\x5E\x38\xA5\xE2\x14\x23\x74\x0B\x27\x04\x13\xCD\x6F\xCD\x22\x14\xA7\x2D\x0B\xD2\x97\x51\xA9\x50\x86\xA7\x0A\x59\x98\xA2\xC8\xC0\x9D\x29\x33\x85\x8A\x99\x17\xCD\xFA\x42\x5E\x1A\xCC\x23\x94\x46\x9B\x64\x87\xA6\x1F\xCC\xA3\x01\x32\xEE\x32\xB0\xC2\x34\x2D\x59\x4B\x9B\xEA\x9A\x9E\x97\x06\x0C\x72\x82\x9A\x41\x09\x33\xE6\x99\x09\xA9\xB3\x95\x6D\x97\xC3\x16\x12\x03\x50\x6E\xBD\x9B\x0D\x81\x65\x72\x6B\xA0\xA4\x52\xC2\xAB\x93\x73\xAD\xA7\x36\x9E\xB2\x9D\x33\xE4\xC3\xCE\x99\x04\x8F\x33\xF6\xA7\x2A\x9D\xC4\x22\x34\xDA\x9B\xFE\x98\xB7\x9B\x6B\x70\xA3\x99\x4F\xD0\xC4\x70\xA5\x9B\x08\x9F\xD3\xC6\xC4\x43\xAF\x1A\xAB\xD4\xC6\xCE\x55\xCD\x89\x17\xD5\xCE\x68\xAD\x9C\x46\xCF\xC1\x9E\x82\x8A\xCD\x94\x2C\x17\xB0\x36\xDE\x9C\x62\xCD\x82\x81\x35\xE5\x50\x23\x9C\xAE\x93\xF8\x66\xCD\x5B\x73\xAA\xCF\x36\xC0\x9B\xDB\x98\x8A\xC0\x70\x84\x77\x7F\xCE\x68\x1A\x71\xA3\x9B\x74\x00\xD8\xC7\x6E\xB6\xCC\x35\xCE\x9F\x94\x03\x24\x00\xFA\x38\xE4\xC1\x6F\xB6\xCC\xCD\x9B\xBB\xA1\xF6\x4D\x9C\xF7\x99\xBE\x9B\x72\x6C\x9C\x81\xCE\x08\x0D\x36\xD3\x9A\x32\x9D\xDC\xCB\x71\xA5\x5A\x07\x9C\xDD\xC4\x39\xD0\xCD\x22\x9E\x7A\x64\x3D\x59\xA8\x7B\xCD\xA2\x90\x34\xEF\xA5\x8A\xC3\xDA\xCD\x39\xC2\x77\x5B\xCC\x41\xA9\x34\xE1\x9B\x87\xCE\xDD\x85\x73\xA4\xCE\x97\x77\xE2\xC6\x67\x8D\xCE\x8E\x9A\xC8\x67\x09\x27\x04\xC3\xCF\xE4\xC6\x67\x8D\x9B\xA0\x98\xB4\x9A\x37\xD8\xCE\x7C\xCC\x6E\x95\x94\xB1\xCE\x14\x9F\xEC\xCF\x72\xB5\xCE\x48\xCC\xF4\xC8\x3B\xCB\xCD\x88\xCC\xD8\xCB\x75\x97\x1A\x11\x77\xCE\x9F\x75\xB9\x9D\x47\x9C\x44\x50\x9D\x99\xA6\xA9\xA4\x4F\x7C\x99\xAB\x77\xCF\xB9\x68\xA2\x62\x99\x62\x72\x9F\x9B\x72\x75\x99\x62\x54\x9C\xDE\x9A\x99\xBA\x9D\xAB\xCA\x20\x7F\x7A\xAE\x9E\xC2\x9E\x42\x72\x03\x31\x9E\x02\x07\xEC\x9A\x7A\xA7\x0E\xB8\x9E\xED\x90\x40\xF1\x06\x72\x97\x6E\x56\x60\xBE\x9E\x16\x2E\xAA\xB9\x3F\xCA\x1A\x35\x70\xF9\x6E\x54\x87\x9F\x50\x96\x0C\x0A\x7C\x81\x04\xCC\x9F\xF8\x57\x55\xA9\xC9\x27\x92\xC5\x89\x2B\xEF\x52\xD6\x9F\x7B\xCE\xBF\x5A\x9F\xE3\x5E\x00\x76\x56\x80\x96\x99\xCA\x60\x92\x03\x0E\xAA\x9D\xC8\x1D\x0F\x29\xF1\x4E\x22\xB7\xB7\x73\x2A\xDF\xCB\xED\x9E\xA9\xC8\xED\xA8\xCA\xF1\x9C\x65\x94\x7C\xAD\xCA\x97\x97\xFD\x99\x59\xB2\x00\xB2\xC9\x40\x04\x2B\xFE\x9F\xEF\x72\x9A\x9D\x76\x8C\xC0\x8E\xB4\x01\xAA\xAB\x7C\xCA\x4B\x71\x02\xA6\x80\xAE\x96\x73\xA1\x3C\x72\x5B\x9A\x30\x57\x70\x1A\x51\x20\xF8\x4E\xCB\xC9\x1F\xCA\x88\x98\xA0\x80\xC2\x06\xA3\x03\x04\xC2\x48\x9A\x21\xC3\x84\x16\xA1\x2B\xA3\xC8\x54\x82\xA4\xA2\x54\xC0\x27\xAF\x08\xD6\xA2\x23\x5D\x0B\xA3\x46\xC6\xA4\x5C\xC1\x25\xC1\x4B\xBF\x7B\xFF\xB0\xBA\x01\xD0\xB8\xC9\x9B\xC3\x0C\xDF\x8A\xAF\x72\xD9\xCB\x29\xC4\x2F\xE9\xC2\x70\xC3\x26\x79\x47\xE2\xC2\xC1\x90\x2F\xA5\x2D\x82\xC7\xAD\xC0\x70\x92\x42\xF2\x3A\x2B\x74\x78\x0E\x8D\xA0\x07\x8C\x70\x14\x0A\xEF\x0E\xD2\xF0\xC9\x3E\xAF\x69\xA7\xA3\x43\xD0\x46\xAB\x8E\x81\x55\xDC\xA6\x08\x0F\x8E\xB6\xCE\xB1\xCF\x24\xC0\x3D\x75\xA3\x32\x79\x26\x52\xB2\x14\xA4\x03\xA5\x0B\xDE\x8F\xAA\xCB\xC0\x5F\x7A\xA2\x90\x9E\xA6\x9C\xD1\xD7\xCB\x08\xF7\x6C\x8E\xC0\x2C\x98\x8F\x93\xA4\xFA\xA1\x29\xD1\xCF\x9F\x4B\x6D\x55\x46\xAB\x91\x98\xD2\x71\xA4\xEC\x43\x90\x95\xCF\xAE\xD3\x14\xCD\x46\xE6\xA1\x6E\x4E\x42\xAA\x48\xCC\xA4\x8C\xD0\x0D\x0A\xBF\xBE\x26\xDC\x7B\x28\xD5\x4B\xEC\xD2\x2D\xD1\x0B\xA7\x4A\xE3\x97\xB0\x2E\x2A\xDE\x91\xBF\xD2\x92\xC0\x19\xD3\x4C\xDE\xC1\x4B\xA7\x08\xBD\x93\xAD\x01\x28\xA6\x85\x0C\xC8\x6D\xA4\x06\x04\x39\xDD\x79\x6F\xA4\x24\x71\x4C\xA5\x49\xC9\x88\xDF\xD1\xDD\x04\x96\x82\xA5\x68\xA7\x4D\xAE\x95\x81\xA5\x60\xA5\x5B\xA3\x87\x0F\xCF\x99\x4D\x26\xDC\x9A\x49\xA5\x43\x79\x2B\x8D\x94\x8D\x54\xB7\x7D\x4A\xA4\x03\x13\xA5\x06\x04\x41\xD7\x4E\xD5\xA5\x24\x93\x55\xAE\x1D\x6D\x01\x05\xD2\x11\x7D\x4E\xF8\xA4\x6B\xA4\xBD", -"\x25\xF3\x62\xA5\xEF\xD1\x3D\xD7\x96\xBE\x5B\xF2\xD1\x1B\x0A\x96\xB4\xD3\x6C\xA7\xBF\xC8\x10\xAE\xA5\xF8\xD2\xD9\x49\x49\xF3\xA5\x6B\xB2\xC3\xCD\x22\x10\xCC\x2D\x0B\xA0\x5D\x97\x83\x04\x7D\xA5\x42\xC5\x32\xEB\xC7\x27\xCF\x3A\xD0\xCA\x5D\xCC\x55\x4D\xCB\xC9\x0E\xD8\x99\x30\xCE\xD6\x9D\xC5\x60\xCF\x89\x1B\xF7\xC3\x3F\xE1\xCF\x32\x03\xF8\xCD\x4C\xFF\xD4\x89\x1B\xDA\x96\x4B\xFF\xB2\x44\xD3\x8C\x95\xD4\x64\xA6\xEF\xCF\x3E\x61\x3F\xE8\xA6\xDC\xCE\x53\x78\xD2\x55\x32\xB4\xC6\x93\x9F\xAF\x30\xA6\x2D\x23\xA0\x56\x9B\x83\x04\xB6\xA6\x99\x98\x9B\x8C\x4E\xBA\xA5\x3C\x7D\x9B\xBB\x28\x42\x14\x03\xC8\xD1\x42\xA7\x24\xB7\x61\x76\x9C\x87\x6C\xC8\xA7\x76\x9D\x9C\x80\x74\xCD\xA4\xC2\xC9\x17\x3B\x2D\x43\x59\x78\xAA\x7D\x2D\xB0\xBE\x5A\x34\xCD\x5A\x1D\x71\x7A\xD4\x89\x0C\xC8\x42\x9E\x00\x01\xB1\x7D\x57\xCA\x05\x4D\x99\x6C\xAA\xC2\x4C\x6E\x01\x56\x3D\x56\x57\xEE\x21\xF5\xC5\x73\xA0\x69\x58\xA4\x83\xD4\x48\x09\xCE\x20\x73\xD7\xC1\x7D\xA7\x36\xC0\x05\x83\x59\x7E\xA1\x6F\x3B\xA7\xD7\xC1\x7F\xAD\x50\xF3\xCB\x02\xAA\x08\x07\xCF\x71\x99\x27\xC4\x46\xAB\x6C\xA4\xB7\x97\xB5\x6E\x80\xA1\x97\x7D\xE1\x95\xC3\xB6\xA1\x8A\xBB\x60\x7D\xAE\x99\xF8\x91\xBB\xB6\xBA\x40\x64\xED\xB9\xBA\xE9\xB9\xDF\xBC\xEB\x99\xBB\xAC\x5F\x43\x6A\xDF\xB3\x7D\xC1\xB8\x17\xC3\x05\x03\xBB\x9C\x7C\xE5\xB6\xAE\xBF\xA9\x6C\xAB\x9C\x81\x5B\xF5\x63\xF3\x50\x8D\xA1\xCF\x83\xA7\x1C\xA9\x6D\xDB\xF8\x75\xB6\x21\xAA\x72\xB6\x47\xFC\x71\xDB\xB8\xC2\xB1\x5C\xCC\xC2\x18\x07\xB7\xBE\x19\x6D\xA8\xA8\xD4\xC5\xA0\xFA\x75\x00\x32\x03\x0E\x86\x10\x26\xD7\xF6\xBA\xD3\xBC\x89\x51\xAF\x1F\x68\xD2\xB6\x9E\x6E\xAE\x3B\xBF\xE1\xAE\x5E\xEE\x67\xDA\xAE\x05\x83\x2E\xBD\xBC\xBE\xAE\xFA\xAF\x05\xAE\xAF\xB7\xAE\x01\xBC\x04\x81\xBD\x31\xBD\xB4\x96\xB8\xBC\xD7\x5B\xAE\xCF\xB3\xF3\xAA\x81\x99\xB3\x26\xB0\x50\xFF\x88\x51\x56\x0C\x06\x16\xFC\x30\x84\xB3\x93\x65\xCA\x8D\x65\x8D\xB2\x64\x59\xCA\x83\x05\x1D\x19\xED\xBC\xC4\x9C\x8E\xDB\x81\xDD\x87\xC9\xA2\xB0\x7E\x58\x83\xD6\x73\x51\x55\xB6\xC2\x0A\xBB\x82\x2A\x82\x7D\xB1\x0B\xB9\xC9\xB2\x00\x40\x8E\x0C\x09\xC6\x4C\x00\xFA\x38\x8C\xD3\x74\x65\xD7\xD5\xC0\xC5\x51\x03\x18\x68\x34\xD9\x36\x62\x03\x0C\xB2\xA7\xB1\x0B\xA6\x63\xD2\x65\x18\xDA\xD3\x86\xF0\x99\x83\xF0\xB5\x25\xBD\x04\x2A\x06\x0C\xBD\x46\x09\x63\xD4\x5C\x3B\xDA\x29\xBF\x94\x62\x00\x2F\x00\x33\x63\x61\xEA\xB2\xF3\x7F\x86\xD5\xF5\x80\xB1\x83\x4C\x11\x0D\x6E\x49\xD9\x70\x03\x92\xDE\x16\x0D\xD9\x14\xD9\x8F\xD5\x02\x12\xD9\x40\xDB\x7A\x2A\x61\xDA\xAA\x08\xBD\xDD\x8A\x38\x18\xB2\x3E\x8D\x97\xDD\x62\xFF\x6D\xFA\x03\x49\x01\x67\xF3\xD8\x4F\x68\x98\xD1\xF0\xBE\xD8\x6E\x07\x94\xD1\x64\xF0\x8D\x43\xD8\x44\x6E\xC4\x90\x4F\x47\xDB\x90\x79\x7C\x5E\xD9\x4A\xD8\x8F\xDF\x64\xD1\xD9\xA4\xB1\x99\xD9\x61\xD2\xB2\x56\xD8\xC1\x6B\xC5\x99\xD9\x5B\xD8\x11\xBD\x65\xF5\xD9\x86\xD9\x4D\x63\x66\xC9\xDA\xD2\x6F\x9E\xD7\x66\xC7\xBC\x34\xC7\x9F\xD3\x38\x6B\xD9\xB1\xB1\x2C\xCC\x01\xEF\xBF\x3E\x84\x0D\x00\x02\xE1\x97\xBB\xB1\x3C\x5F\xCE\xB1\x8F\xCF\xD7\x0A\xCC\xFF\xB5\xB3\x29\xC3\xC4\xB2\xCF\x82\xB3\xAF\xDA\x32\xBE\x02\xFD\xB3\x33\xA1\x1C\xD1\x97\x33\xD1\x99\xC1\x19\xC0\xD0\xA7\xC1\x0A\xC0\xAA\xC3\x5A\x90\x90\x3D\xC3\x42\xB5\x41\x8D\xB4\xDD\xB3\x40\x97\x0E\xC5\x94\x1D\x90\x06\xC8\xBF\x1D\xC7\x3F\x92\xDE\x6F\x43\xA9\x71\xDB\xBF\x04\x3C\xED\x7F\x90\x85\xD7\x93\x94\x43\x48\xD6\xEB\xD3\x06\xD9\x2B\xBF\x90\x87\x73\x45\xB9\xD1\xA9\x86\xD9\x5F\xA0\x5E\xD1\x83\x04\x1E\xB5\xCE\x40\xD2\xA0\x5E\xF1\xB2\x57\x94\xAD\xA5\xB4\x91\x4F\x45\xB2\xFA\x99\x5D\x33\x1B\xE5\x9A\xFB\xA8\x8F\xE6\x54\xF0\xB2\x10\x02\xBF\x3A\xC8\xB8\x86\x35\x4B\x49\xD2\xBE\xFD\x58\x56\xEB\xD3\x1A\x8E\xB1\xD9\x17\x9F\x8C\x4D\x4B\x06\x3D\xFE\x91\x27\x1D\xC2\x5F\xD8\x03\x27\xDA\x9F\x6D\x3B\xBC\xCB\xB7\xBF\xF0\xB0\x73\xC3\x6B\xC8\xB3\x2C\xC3\x53\x81\x6B\xF7\xB3\xAE\xDA\xEE\x6B\xCF\xB7\xDA\x04\xC1\x1D\xD0\x43\xF8\xA0\x62\xC2\xA3\xB1\x6C\xDD\x70\xA4\x75\x03\xC6\x44\x90\x50\x48\x92\xF3\xBC\xD0\x96\x6F\xC9\xDA\x10\xCA\x07\xD1\x91\xE1\xB1\x11\xC3\xCE\x90\x2F\x48\xC3\x23\x9A\x04\xDC\x91\x37\x00\x07\xA3\x10\x1E\xA0\x81\xC0\x34\xA5\x89\x97\xA1\x62\xD1\x48\xA5\x4A\xA5\xD1\x61\x53\x19\xD4\x74\xEF\xB1\xD9\xD0\x1B\xD4\x09\xC4\xD3\x96\xC3\x2C\x52\x72\xF9\x53\x3E\x93\x33\xB4\xCD\x9D\xC2\x04\x56\x46\x5F\x47", -"\xE8\xC2\xA3\xC0\x1F\xA4\x2E\xF3\xC1\x7B\xD1\xD7\xDB\x0A\xDA\xB3\x31\xCA\x2B\xCC\x07\xFF\x98\x9D\x93\x13\xC2\x82\x85\xDD\x5A\xC2\x36\xDC\x08\xC8\xA4\x57\xC1\x1A\xD9\x05\xDD\xD2\x6E\xDF\x89\x50\x75\xEF\xD1\x97\xC2\xD5\xD8\xE9\x83\xB4\x37\xC1\x41\xB7\x75\xED\x5F\x9E\xC1\x1D\xCA\x87\xBA\xD1\xB4\xA1\x20\xDB\x87\xB5\xC0\xC7\x96\xE1\xD4\x78\xDF\xDD\x82\xD2\x0F\xCA\x07\xC0\xA3\xAF\x1E\x05\x1C\x0B\xC1\x04\xBE\xC1\x64\xDE\x7F\x47\x8F\x27\x04\xEB\x3D\x59\x56\xDE\xC6\xC1\x89\xD3\xF8\x27\x04\x84\x3C\x78\xB9\x33\x5C\xDE\x6F\x6D\x0B\xB7\xC8\x56\x10\x5A\x92\x05\x19\xC6\x4E\x02\x27\x04\xEB\xDF\x64\x56\x10\xD9\xDB\xBF\x20\x65\x8B\x2F\x37\x52\x5B\x59\xE6\x56\x10\xE9\x31\x52\x60\x7B\xD5\x4D\x88\x6E\xB6\xDB\x35\x5C\xDB\x6E\x54\xE9\xDC\xCD\x21\xBE\xA5\x8A\xE5\xD3\x6C\x56\xDE\x69\x71\x2E\x07\x12\x0A\xDF\x4F\x5A\xE5\xD1\x7B\xD8\x32\xB3\xDC\x03\x25\x7B\xC5\x40\x5D\xA0\xEE\xDF\xB6\x51\xC3\xFB\xC8\xF4\x2F\x7C\xCA\x6E\xDB\xD9\x35\x77\x43\x4A\xD6\x8E\xD4\x6F\xAE\x58\xC7\xA8\xC2\xDF\x80\x20\x04\x3F\x4C\xE1\x31\x23\x13\xCC\x73\xC7\x7E\x1B\xDF\x6A\x0C\xC3\x04\xCA\xC1\x33\x7C\x7E\xD4\x05\x92\x8E\xFD\x51\xDA\x92\x69\xBB\x90\x21\xDF\x1A\xE9\xDF\x7E\x19\x36\xC8\x48\xDD\x56\xD6\x8A\x16\x9F\x50\x9E\xDE\x0E\x23\x90\x51\x52\x85\x59\x78\xC7\xCF\x66\x06\x10\x54\x7C\xC6\x40\x0E\x17\xEB\x8E\x65\x67\x9E\x6D\x6F\x6F\x8E\x18\xD2\xC5\xDE\x6D\xC7\xC9\x54\x6C\x69\xD2\xA5\x6F\xC8\xC2\xC7\x62\xC6\x7E\xCD\xC6\x6D\x6E\xF0\x85\x8D\x91\xC6\xC7\x8F\x64\xC6\x06\x0A\x8F\x6E\x6F\x65\xC7\x48\x73\x6D\xD6\x08\x5E\xC4\x3A\x8B\xE0\xC8\x75\x03\xE1\x10\x0F\xE0\x66\x00\x60\xCE\xE4\x54\xE0\x4B\x9F\x05\xE2\x5A\xCC\xBF\xF7\xDF\x99\x6C\x81\xC6\x95\x1E\xE3\xD7\x60\x3C\xA1\xE0\x8F\xC7\x08\xE6\x19\xCC\x8F\x26\xE0\x0A\xE9\xB6\x58\xC6\x2C\xE0\xDD\x10\x04\x36\xC8\x40\xC8\xDB\x1C\xFB\xA7\x8A\xE3\xC5\x0E\x0B\x01\x2B\x38\x57\xE0\x84\xC0\x26\xE5\xC6\x22\x00\x7B\xCF\xCC\x10\x6C\x33\xC7\x06\xE5\x42\x73\xD4\xF3\xDC\x5F\x56\x1F\xEF\x6D\xF8\xC4\x34\x6E\x1F\xD1\x80\xF9\xDE\x51\x9B\x86\xE9\x6D\x53\xD0\x9A\x73\x20\xCE\xE1\xCA\x89\x14\xE6\x15\xE4\x90\x14\xCB\x47\x66\x21\xC7\xAB\x29\x91\x86\xCB\x97\x5C\xC8\x4A\xA6\xAC\xDC\xAD\x61\xC8\x2A\xCA\x38\x6E\x87\xE7\xC8\x2E\x9C\x67\x43\x22\xEB\xC8\xDA\x61\x8B\xCA\x2E\xBF\xE0\x64\xDF\xC1\xD2\x23\xD3\x25\x34\xC8\x81\x55\x87\xDB\xE1\x6A\xC6\xBC\xC4\x18\xFA\x6A\x45\xC8\x9B\xCC\xFC\xAE\xC9\xF0\x40\x9C\xC1\x54\x8E\xC9\x73\xC8\x94\xC4\x25\xD3\xC9\x79\xCB\xC9\xDB\x27\xD8\xC9\x3F\x1C\x3B\xC0\x85\xD8\xE2\xF9\x1F\x14\xE9\x1E\xD0\xC5\x84\x59\x79\xC3\x10\x27\xC7\x66\xCA\x6F\xCE\x85\xCA\xC7\xD0\xD4\x6D\xD4\xFB\xA4\xBA\x05\x41\x19\xE5\x1F\xFE\x19\xF7\xC4\x97\x5A\x86\xE6\x33\xFB\xC4\x1E\xD2\x1C\xEF\xE1\x00\xCA\xAE\x92\x87\xD4\x12\x7E\xCB\x2E\x41\xD3\x48\xCA\x11\x35\x16\xD4\x8D\xDF\xC6\x32\x02\xA1\xC3\x10\x06\xCA\x1F\xA1\xA2\xC4\x02\x0B\xCA\x63\x6E\xA3\xCE\x78\xCB\xDB\x5C\x52\xA4\xC9\x13\x14\xCA\x5E\xC4\xF6\x7F\x33\x77\x94\x2F\x96\x43\xBE\x9C\xB2\x00\x35\x97\x40\x05\x53\x9F\xA0\x31\xDC\x93\x95\x89\xBA\x94\x3C\x95\x51\x66\xFF\x03\x4A\x4A\xC9\x28\xED\xE6\x23\xE2\x43\x97\x38\xE5\x48\xEE\xE3\xD6\x0A\xB9\xCD\x14\xDD\xC6\x4F\xC7\x67\xC1\x03\x35\x00\x25\x38\x43\xED\x1B\xE5\xC6\x6E\x56\xB5\x89\x94\x6A\xC7\x55\x95\xF8\x54\xE5\xB9\x8A\xD1\x69\x41\xE3\x3B\x49\xCA\x1B\x44\x21\x85\x75\xBC\xC3\x93\x06\x46\xE0\x12\xDC\xE1\x27\x44\x8E\x06\x7F\x55\x9D\x2A\x0B\x41\xC4\x87\xE3\xE4\x99\xE0\x51\xC9\xC5\x0D\xC4\x26\xC7\x43\xC5\x13\xD2\xC4\x35\x46\x48\xE9\x16\xF7\xE1\x56\x4E\x34\xAE\x81\x1A\xC4\x61\x94\x57\xCE\x13\x76\xE4\x61\xC5\xF9\x90\xD3\xAC\xC5\x30\xE5\x18\xE8\x14\xF3\xE4\x6C\xC4\x08\x15\x17\xE0\x04\x40\xE6\x7A\xCE\x56\x48\x0C\x13\xE6\x6F\xC7\x1A\xDB\x5A\x7C\xBC\xBA\x8B\x1A\xEE\xC8\x74\xA2\xFE\xD5\x76\xF1\xC6\xE9\xE3\x69\x5B\x91\xFE\xC6\xA6\x45\x56\xE6\x54\xAC\x34\xC5\xC5\x7B\x39\x17\x88\xC7\xB1\x44\xA2\x6B\xFC\xA3\xE3\xCF\xC4\x76\xC0\xB6\x53\xC7\xBC\x59\x75\xCB\x16\x17\xC7\xDB\x6D\x76\xC9\xD1\x2B\xE4\x37\xE5\xF8\x82\x13\xD1\xD7\x1F\xD3\x1D\x50\x4D\x0D\xE5\x43\xC7\xE7\xB6\x87\xD1\x56\x5F\xE4\x44\xE0\x28\xCE\xE1\x9C\xC6\xE0\x10\x64\x8A\xE4\x30\x00\x6F\xC6\x10\x0E\xE6\x79\xE6\x50\xEF\x1B\xF1\xE5\xD5\xA0\x59\xEF\x90\x05\xE4\x60\x6F\x73\xCA\x96\xF1\xB3\x90\xE0\xF1\x8D\x96\xF5\xE5\x6F\xE6\x75\xC4\x1D\xE3\xE0", -"\xA2\xE6\x47\x39\x17\xB6\xE5\xDB\xC4\xDB\x19\x98\xFB\xC4\xB7\xC4\x2D\xE7\x0C\x2B\x38\xAF\xE7\x43\xED\x92\xD5\xE4\x8D\x84\x96\xB6\x91\xDC\x4D\x19\xE4\x5E\xE1\x94\xDE\xCA\x3A\x79\x3E\xC5\x13\xE0\xE4\x3D\x18\xDB\x11\x95\xE4\xE4\x02\xC6\x49\xE7\x9A\xBB\xC1\x2A\xE4\x3B\xC5\x98\xED\xE4\xF4\x5C\x43\xC5\x12\xC6\xE5\x70\xC7\x4C\xEB\x14\xFA\xE6\x89\xCA\x4E\xE9\x11\xDE\xD0\x06\x7C\x47\xCD\x15\xC0\xE6\x5C\xE0\x52\x44\x12\xD1\xC9\xD0\xE6\x3F\x61\x17\xC0\x61\x49\xE4\x4B\xC7\xC0\x0C\xE5\xD4\xE6\x54\xE0\x51\x20\xE1\xFC\x6F\x55\xEF\x88\xE2\xE5\x91\xE3\x33\x90\x1B\xFC\x37\xE9\xE4\x17\xE1\x96\xE3\xE3\x96\xE7\x4B\x37\x1C\xDF\x9A\x69\xE6\x1E\xEC\x99\xF0\xE7\x9E\xE5\x6C\x4E\x96\xD0\x63\x70\xE4\x80\xEC\xC8\xB3\xE5\xC7\x52\x5B\xE1\x4E\x69\xE6\x96\xE0\x4B\xE8\x93\xFD\xE0\x9D\x69\xFC\x9F\x97\xC8\xE6\x60\xC7\x47\x9C\xF0\x63\xC7\xB9\xC7\x6E\xCC\xED\x49\xCA\xF7\xE6\x13\xA9\x9F\xC6\xC7\xDB\x6C\x5A\xEF\x85\xFE\xE7\x16\xDD\x67\xE3\x8C\xCF\x33\xD8\xC6\xC5\x85\xA0\xE3\xE3\x70\xE6\x82\xE7\xA3\x4C\xE8\x62\xC6\x1F\xCA\x73\xD6\xE3\x4B\xC0\x0E\x0C\x45\xC2\x04\x84\xC0\x15\xAF\x45\xC3\xDD\x61\xD2\x18\xA2\x4C\xEF\xDD\xB1\xD1\xDC\xDC\x74\xEB\xD1\x22\xA7\x36\xD6\x05\xD1\xDD\x54\x5B\xD4\xDC\x8A\xBA\xDD\x68\xC1\x13\xD9\x78\xCA\x93\x80\xD2\x32\x94\x0A\xDF\xC2\x6F\xC1\x94\xE6\x07\xD6\x92\x90\xCA\x7C\xE6\x48\xEB\xCA\x3F\x4D\x36\xA1\x21\x07\xA3\x3B\x21\x84\x03\x68\x4D\xA3\x03\x05\x33\xA9\x33\x5E\xE9\x9F\x90\xA9\x63\x8D\x82\xE4\xAF\xC4\x9A\xE8\x60\x96\xCD\x09\xE2\x5E\xCB\x80\xF2\x00\x32\xE0\x00\x04\x83\xF6\xE0\x56\xA8\x9A\xC9\x83\xFE\x7B\x87\xC4\x84\xEF\x9E\xE3\xE3\x41\xE0\xD9\x43\x84\xE4\xC4\x2D\xDE\x12\xE5\x82\xE9\x50\x94\xC5\xF1\x8D\xB6\x4B\xE1\x2B\xE3\xF3\x8A\x19\xEA\xE6\x15\xE8\x42\xED\x9A\xDF\xC6\x39\x03\x68\xC3\x10\x23\xC6\x91\xE4\x6F\xE6\x1A\xEB\xE7\xB2\xBE\xA2\x6E\x9E\xF8\x8C\x06\xEB\xE3\xD1\x39\x5C\xE5\x5A\xC9\x18\x1C\x25\xC3\xE6\x8C\x07\x97\xC4\x85\xD0\xC5\x35\x02\x2D\xE2\x10\x38\xE2\x5D\xC8\x73\xEB\x8B\xFD\x6B\xA0\xB6\x06\xEE\x83\xE3\xE1\x85\xA6\x30\xEC\x9B\x84\xE3\x68\xE2\x31\xE9\x93\xC8\xE3\xAB\x04\x7F\xCB\x8C\xC0\xEB\x74\x00\x1C\xE9\x2C\xED\x33\x75\x6D\x77\xC1\xAB\xF9\x1F\xAA\xEB\x2C\xEF\x19\xF6\x00\x0F\xCA\x41\x01\xAD\xE8\xC7\xDF\xC4\x17\xE3\x21\xC5\x50\xFF\x7B\x1E\xE6\xA0\x71\xAB\x99\x4F\x21\xE0\x7D\x40\xE2\x1E\xC9\x89\x60\x22\xE9\xC8\x8B\xE2\x21\xE6\x22\xDF\xEB\x28\xCA\x22\xE0\x3F\x0C\xE2\x9E\xEA\xC6\xBC\x1A\xE6\xE8\xA2\xEA\xAE\x84\x89\xE5\xEA\x79\x13\xA9\xE0\x8B\xD7\x08\xCD\xE9\xB5\xEC\x76\x24\x9D\x63\xCA\x40\x05\x26\xCB\xEB\x7A\xE4\xD8\x6B\x89\xF8\x64\x9D\xE3\x62\x03\xD2\x88\xC9\xFB\xE1\x98\x4D\x8F\xCC\xC9\x72\xCA\xDB\x86\x8A\xE9\xE2\xBD\xD8\xC4\xE7\x2A\xE8\xE4\x57\xCB\xD2\x19\x25\xD6\xCA\x23\xD0\x49\x1A\x45\x87\x70\x04\xE1\x04\x2A\x0A\x8D\x70\xBB\xC3\x49\x0E\x0B\xF7\xDE\xC0\xC3\xDB\x62\x0C\xE9\x53\x24\xEF\xC8\x16\x0C\xF1\x00\x9D\x02\xBE\x3D\xB2\xF6\xC3\xD5\xDD\xC9\xEC\xCD\x06\xB2\xAF\x9F\x44\xE1\xB3\xEA\xEC\xA5\xDD\x8D\xD1\xAD\x76\xEC\x82\x32\xF5\xD3\xB3\xF5\xD8\x2B\x14\xCF\xEC\x3F\x3E\xEC\x03\x2A\x21\xB1\xBF\x02\xED\xB5\x16\xCC\xE5\xB4\xF5\xD8\xC0\x94\xD2\xE4\xDD\x38\xEC\x3F\xEC\x46\xAE\xA6\xCE\xED\x44\xED\x44\x06\xC8\xA2\x2C\x54\xEE\xD2\xE6\xB5\xC0\xED\x86\x09\xD6\xE0\xB5\xCB\xED\x18\xA5\x29\x3E\xB5\xC5\xC3\x39\xEE\x25\xD4\x54\xF1\x06\xAC\xCA\xA8\xDE\x2A\xFF\x3A\xFD\x9D\x72\x1A\x52\x7D\xD0\x00\x03\x0F\xD8\x66\x81\xD1\x00\xA1\xFA\xC3\x80\xBB\xCA\x4B\xD3\x5D\x88\x80\xB1\x73\xC1\xC8\x03\xAA\xEF\x84\xEC\x0F\xA0\x14\xD5\x5B\xB1\xE1\xCA\xCB\xA2\x9A\x50\x96\x96\xC9\x14\x66\x9E\xB6\xF8\x00\x70\xEE\xDC\xE5\x57\x1E\xD6\x76\xEE\x8C\x86\x44\xF8\x64\x48\xD3\xDE\xED\xC4\x79\xED\xC2\xC9\xD6\xDE\x44\xC1\xEE\x56\x73\xE0\xE9\x2C\xFD\xCD\xE4\xB2\xDA\xE9\x43\xEF\xCA\x99\x97\x0D\x0D\xB8\xDC\x7B\xB5\xCB\xAD\xC6\x81\xF7\xED\xF1\x71\xE5\xE8\x86\x5A\xA5\x7D\xED\x13\xD4\x2C\xF9\x08\xC6\xC9\x04\xA8\xC5\x5F\xEE\xCE\xCC\xF4\x23\x6C\x79\xD1\x74\x3D\x42\x0D\xBB\xE9\x4C\x79\xD2\x5C\xD4\x06\x15\x8F\x02\x07\xC4\x46\x80\xCC\xDE\xC9\x95\x91\x59\x73\xC3\x21\x3B\xDF\xEB\x1A\x52\x7E\xDC\x02\x04\xD0\xD0\x5C\xA0\xD1\xA0\xA1\xD3\xD5\xA4\xC0\xE9\x66\xD3\x17\xC0\x09\xD8\xC1\x3E\xEA\x27\xD2\x4C\x77\xDD\xD3\x85\x18\xCD\x77\xF3\xC0\x7B\xDE\xAF\xD2\x47\xC0\xDB\x90\x94\x0C\x71\x78\xFC\xD1\x56\xEB", -"\xE0\xD9\xC9\x5E\xDD\x54\xEA\x29\xCD\xBE\xE0\xC2\x58\xEA\x56\xE2\x89\xE6\xDD\xC1\xA0\x7E\x91\x74\xE2\x1E\xD4\xED\x14\xC4\x77\xCE\xDD\xB0\xD1\xF6\xE2\xA4\xD7\xA4\x44\xEB\xD1\xD6\xA4\xE7\xA2\x34\xA1\xC9\xD0\x87\xA5\xEF\x05\xC0\xAF\xD3\xB1\xC3\x54\xEB\xED\x2D\xA3\xBF\xEF\xC1\x3D\x92\x1F\xD8\xBC\xCB\xDE\xF1\xEC\xB4\xC7\x07\xFD\xA2\x59\xE9\x13\x50\x79\xE9\x20\x23\x1C\x84\x98\x4A\xF9\x01\xBE\x58\x77\x92\xBC\xCD\x30\x75\xD6\x8B\x95\x64\x46\xD3\xB5\x0F\x22\xD5\x3B\x22\x6C\x90\xD2\x41\x01\xC3\xD2\xA4\x73\x02\x39\xA5\x3B\x2B\x99\xD3\xD2\x46\xA0\xBB\x1B\xA7\xBD\xD2\x26\xD4\x49\xC0\xD3\x66\x4E\x3C\xA5\x7E\x1C\xC1\xA0\xD2\xEA\x42\x4A\xE0\x07\xA4\xD0\x34\xD9\x8E\xBA\xD2\x3B\xF2\x35\xDE\x4B\xEC\xD2\x40\xF1\xB5\xAF\x4A\xF4\x4F\x41\xE8\x05\x5E\x4C\xF0\xAB\x47\xD5\xFE\xB7\x91\xB9\xF0\x8A\x70\x0F\xFD\x91\x8F\xF1\x47\x9C\xD7\xC1\xC4\xD3\xF1\xC1\x77\xDD\xD6\x52\xD0\x08\x28\xD4\x84\x0F\xB7\x6B\xD4\x02\x05\x4B\xD4\x32\xD0\x08\x18\xCC\x84\x08\x32\xE5\xC3\x2B\xCE\xC7\xCA\x7D\x37\xD4\x22\xCF\xAA\xC0\x64\xBC\x32\xC5\x72\x45\x87\x30\xF1\x00\x47\x98\x8E\xEB\xA1\xEB\xCC\xDB\xDF\x34\x7D\x7D\xD1\x99\x01\x55\x34\xDA\x83\xD7\x99\x86\xA6\xEF\xCE\x68\xB6\x6D\xCB\x9A\xF0\xE8\x0B\xFC\xCC\x94\xCF\x78\xB2\x9F\x94\xCD\xF4\xA6\x45\x89\x6F\x86\x6B\x9A\xD7\xD0\x1C\x59\xD8\xF2\x79\x00\xE4\xE5\x18\xEE\x80\x6F\x98\x76\xE2\x93\xF4\x99\x36\xCD\xDA\xE2\x33\xE9\x4C\x34\xCE\xF9\x81\xC9\xF7\x00\xC5\xCE\x41\x01\xCB\xD4\xF2\xC7\xCC\xEA\xC4\xDB\x4E\x96\x64\xCD\xEB\xC2\x6A\xAF\xCE\x21\xD6\x14\xF2\x3B\xD9\xCD\x82\xCF\xAA\x9D\x4A\xE3\xF1\xC6\x99\xEE\xCF\x9E\x5A\xCF\x3B\xD7\xD9\xE1\x42\x3F\xEE\x03\x07\xEF\xE0\x76\x91\xD5\x5D\x9D\xF8\xCE\x79\xC4\xEF\x01\x06\xF1\xEA\xD3\x4A\xF3\x3B\x4D\x91\x56\x3F\xCB\xD0\xF8\xCF\x00\xDA\xD0\x73\x00\xCE\x03\x49\x01\xCE\xCF\x59\xB5\x9D\xB8\x8B\x40\xE8\xCC\x25\x98\x02\xDA\xB5\x0A\xD0\xDE\xF0\x03\xDC\x62\xA2\x4E\xE5\xF2\x25\x67\xCE\xCF\xBB\x45\x7C\xCA\x5A\xCE\xEE\x5C\xEC\xF0\x47\x08\x7B\x9A\xC0\x5C\xCA\xF1\x94\xCB\xA8\x6F\x33\x03\x04\xD0\x00\x15\xD0\x56\x96\xF3\x98\x55\xA7\xD5\x9A\xEE\x0B\x8D\x41\xFE\xE9\x87\x64\x08\xD9\x7D\x47\xD2\x1A\x19\x3A\x54\x42\xFD\x9D\xC2\x6A\x5A\x93\x03\x28\xD0\x6E\x96\xA6\xE1\xB6\x71\x95\xCF\xB9\x73\x9F\x58\xAF\x7E\x31\xD0\x63\x97\x72\xF5\x59\x35\xD0\x0D\x75\x59\xB8\xD0\x89\xEE\x0E\xDE\xB6\xF3\x00\xA7\xEE\x0F\x70\x44\xE0\x96\x42\xD2\x00\xA1\xC0\xBE\x69\x93\xEE\xFC\x6E\xBA\xD5\x6B\x97\xED\xFB\x29\xB9\xCD\xA0\x9C\xE0\xE7\xE7\x2C\xF7\xEE\xF7\x98\xE8\xE0\xBD\x3E\xD3\x16\x09\x38\xDD\x06\x22\x6C\xE4\xD3\x40\x06\x4E\xDF\xD3\x30\xA6\x85\x08\xCE\xD8\xD4\x3E\xA7\x58\xA1\x51\xE1\xA5\x19\xD5\x45\xDD\x51\xC9\xCB\x44\xA7\xCA\x98\x96\x7A\xD3\xBB\x89\x3F\xD6\x92\x85\xF5\x4E\xA6\x38\xD6\x03\x04\xD4\x03\x06\x41\xDC\xD4\xC9\xD4\xDD\x46\x3A\xD9\x14\xB4\x7C\x0F\xD7\x3C\xD5\x96\xB5\xD3\xF1\xD1\x54\xF6\xD5\xD2\xD4\x17\xD5\x5B\xFA\x51\xD3\xF5\xF6\xD1\x1F\x20\x3B\xF9\xD3\x3D\xF0\x49\xDE\x36\x5B\xCF\xA7\x1A\x64\xA2\x7F\x31\x74\xD8\xF0\x23\x72\x54\xCF\x74\xE5\xCE\x45\x76\x54\xCA\xF1\xAB\xED\x00\xB0\x77\xA2\x00\xED\xCF\x9A\x58\xD4\x53\x9D\xC7\xE5\x97\xA9\xD8\xFB\x9C\xC0\x35\x3A\x56\x58\xD8\xD5\xFF\x28\x23\x7B\x55\xE9\x53\xFB\xA7\x57\xD6\x35\x61\xD5\xB0\x5F\x58\xD1\x54\x01\x60\x90\x6E\x56\xA2\x7D\xB3\xD6\x69\x7D\x71\xAC\xFC\x87\xA7\xFF\x28\x65\xD0\xCA\xD6\xD6\x39\x73\x0C\x0D\xC9\xE5\x99\x23\x3D\x67\xD4\xB7\xF0\xB2\x32\xF5\xC6\x75\xCA\xCC\xF4\xFA\x70\x82\xA6\x33\xE1\xD7\xA9\xB5\x29\x85\x03\x38\x00\xE3\xF2\x41\x09\xDC\xE9\xD7\x3E\x81\xBC\xB7\x39\xE6\x9C\xB5\xEB\x5B\xCE\x8F\x66\x7D\xB8\xB8\xA9\xC5\xDD\xE3\xA8\x92\x7E\x6F\xDC\xED\x9B\xD7\x37\x6C\x71\xD0\x5E\xF4\xAD\xDD\xA9\x79\xBE\x6E\x75\x00\x39\x01\x45\x19\x10\x26\xF7\x9C\x89\x30\x60\xEF\xB0\xD6\xD2\x98\x74\xF7\xC1\xB5\xA8\xB6\xE9\x28\x64\xDD\xF7\xD6\xD6\xF4\x7D\xF8\xDD\xCD\x6A\xD9\xD5\x91\xDC\xDD\xDE\xBB\x9A\x7F\x77\xDD\x70\x85\x77\x2F\xB2\x26\xBF\xC7\x8C\x72\x0F\xDA\x00\x31\x61\xCA\xB2\x95\xD8\x2A\xB1\xFE\x99\xDA\x66\xD8\xA3\xD8\x66\xC5\xD9\x1E\xD9\x46\x0D\x4D\xE1\xD8\x4C\xDB\x9B\xD2\x03\x33\xD9\x06\x04\x86\xFE\x92\x44\xDA\x5D\xD9\xA5\xD4\x39\x98\xDA\x47\x96\xA6\xDE\xE0\xDC\xDA\x08\xB8\xA7\xA0\x68\xC8\xD9\x92\xD8\x87\xF6\x67\xD5\xD8\x56\x4C\xA2\xDF\x63\xCC\xF8\x8B\xDB\x2A\xBD\x68\xF1\xAF\x58\xDB\xF8\x41", -"\x69\xEC\xB1\x93\xD9\xF0\x7B\xE2\xC6\x18\xF3\x53\xA5\xDF\xE2\xE1\xF8\x0D\xFA\x8C\xFF\xE0\xE5\xF8\x6E\x8C\xA0\xDD\x35\x13\xF8\xD5\xBF\x8F\x82\x03\x36\x5C\x2E\xDA\xE7\xDB\xC2\x8C\xD9\x2A\xD9\x9B\xD3\x03\x00\x8D\x33\x01\x1A\x78\x06\x3A\x3B\x57\xFB\xD0\x53\x03\x06\xB2\x5F\xD8\x86\x6B\xE5\xC1\x7F\x33\x01\x82\xF2\x02\x39\xB0\x4C\xDA\xA2\xD2\x64\xEC\xB2\xDC\xB9\xDD\x81\x04\x24\x01\x51\x86\x97\xFF\xA4\x61\xF9\x4E\xD9\x4D\x67\xC4\xA5\xF9\x30\xFB\x99\xF3\xE3\xCF\xDA\x6A\x92\xF6\x4C\x65\xDF\xF9\xD9\x60\x9C\xF1\x66\xCF\xD9\x26\x00\x33\x60\x66\xD4\xD9\x7D\xDB\x6F\xD2\x35\x9F\xD2\x3B\x4A\x6D\xDA\xF5\xAE\x05\x7C\xF8\xC5\x5E\xE7\xF7\xD9\xD6\x4A\x8E\xD6\xE6\xFC\xD9\x68\xF9\x9A\xDB\x4A\xDD\x22\x87\x4E\x76\x79\xC9\x93\xF9\x9C\xB1\x95\xF4\x03\x16\x01\xFA\x38\xA8\xFA\xE5\xEF\xF9\x62\xF8\x99\xFF\x65\xD3\xFA\x9B\xD8\x91\xD6\xC7\xB5\xF8\x22\x03\x9A\xF7\x8F\xB1\x5F\x8D\xF8\xA3\xF2\xE6\xF3\xF9\xA7\xF9\x9D\xF4\xE9\xF3\xF8\x0E\x51\x25\xB3\x05\x3A\xF9\x92\xD9\xAC\xF9\x11\x0F\xFA\x8D\xB2\xD5\x41\xE8\xD2\xFA\xB6\xF9\xAA\xFE\x67\xDD\xD8\x88\xFA\x52\x0F\x76\x7E\xFA\x70\x00\xB0\xFD\x63\xD1\xFA\x74\xF8\x90\xF1\xE3\xD5\xD9\x43\xF8\x1E\x8E\x69\xE0\xF1\xBE\x22\xDB\x44\x0B\xCA\xF0\xD2\xDB\x1B\xAC\xC8\x55\xDB\x04\x07\xB5\xDF\x86\x85\xF2\x4A\x15\xF4\xDC\x66\x12\x99\x8D\xF4\x14\x88\x50\xA6\xC1\xA5\x1F\xBC\xD7\xE0\x83\x07\xF6\xD9\xEF\xB8\xFA\xA5\x55\xFA\xD9\x40\x0C\x6F\xDD\x9E\xC6\xBD\xC0\xD9\xFC\x8B\x9D\xD4\x8A\xD6\xD6\xBF\xF2\xE7\xD1\xBD\xC2\xDF\x2D\x27\xDE\xCC\xCB\x15\x19\x4E\x6A\xDE\x9E\xDC\x5D\xD7\xA6\xC2\x1C\x0D\xCC\x62\x59\xAD\x25\x01\x96\x6F\xC3\xF2\xB2\x76\x02\x27\x04\xC5\xFD\x7C\xC7\x2B\xD4\xEE\x8C\x4F\x35\x29\x90\x1A\xFF\x9F\x76\xE4\xCB\x0E\xF9\x8D\xB9\x09\x33\x1C\xFC\xC7\x28\x3D\xAB\x23\x47\x78\xD3\x85\x52\x82\xC3\x68\x5C\xEE\x29\xB5\x23\x93\x50\x0E\x5C\x5A\xD1\x77\xCF\xF7\x62\x37\x52\x4E\x67\xAC\x39\xD5\xD9\xDD\xC4\x27\xB2\xDB\xDE\x39\xFD\x62\x12\xBC\xDF\xB7\x00\x03\x90\x5E\x7C\xC5\x59\xE8\xDD\x19\xEA\xB7\x7C\xDF\x54\x06\xF0\xE8\x93\x0B\xCC\x65\xE1\x0B\xBF\x8A\xEB\xEA\x82\x1E\x2C\xEA\xAF\xF9\x1F\x80\x76\x11\x0A\xEF\x16\xFD\x5A\xE0\xD4\xF2\xAB\xE6\x45\xEC\xE6\x2F\xE2\xDA\xB4\x9B\xE5\xC2\xAE\xE5\xAD\xBC\xEA\xDC\x31\x1A\xEF\xAB\xF0\x06\xC9\xE3\x3C\x7D\x1F\xC4\xEB\xC6\xEB\xBD\x98\xAC\xCA\xE6\xA2\x4C\xC0\xE2\x99\xF3\xEA\x5D\xFD\xDF\xB5\x2C\x89\x88\x24\x96\xD8\xF7\x86\xE5\xFD\xBE\xEA\x08\x0B\x86\xC2\xEB\x6E\xE0\xDB\xF0\x20\xC7\xEB\x73\xE3\x5D\xCE\x18\x7D\x6C\x2F\xE1\x1A\x70\x03\x35\xE9\x77\xE8\xEB\x82\x81\xE3\x88\x38\xE1\xE4\xEE\xD8\xBD\xE9\xF1\xF7\x9F\xEA\x18\xFE\x8E\xC7\x8F\xA0\xE4\x10\xC5\xEA\x95\xC7\xA2\xE7\xA8\xEB\x6D\x9D\xFF\xF2\x8F\xB5\x4C\xE1\x8E\xE9\x0B\xE7\xF8\xC8\x0C\x3F\x4C\xD0\x6E\x79\xC0\x35\x43\x5A\xD1\x65\x64\x4F\xFD\xCE\xE8\xDB\x14\xCD\xC0\x00\xD7\x8E\xDC\xF6\x11\x02\xEF\xDE\x8C\xB5\xEB\x23\xD6\xC4\xCA\xEE\x1F\xC6\x2D\x00\x74\xD7\xE3\xBE\xE9\xF0\xC0\x14\x75\xD5\xF0\xF6\x15\xC4\xFD\x2C\x96\x3B\xEA\xB7\x77\x94\x4A\xFF\xD1\x05\xFC\xF5\xE3\x38\x96\x36\xF1\xA9\xC2\x1E\xBE\x59\x3C\xCE\x79\xE8\xF0\x99\xEA\x0A\xD2\xFD\xC7\xE4\x8A\xE7\x85\xE0\x15\xE5\x55\x8E\xE7\x40\x00\x99\xFB\xE6\x2A\xD1\xD5\x50\x1C\xF8\xE7\xC4\xC7\x65\xE1\xA2\xFC\xE7\x5F\xE2\x92\x8B\x96\xCE\xC7\x02\xE8\x68\xE4\xA0\xE5\xE6\xA1\xE8\x85\xD8\xA0\xE6\xE6\x1C\x54\x6A\xE8\xFF\xF3\x25\xD3\xFC\xDB\x1B\x98\xFB\xEB\xC8\x3B\xF0\x7E\x40\x03\xFC\x7C\xA1\x67\xFF\x5E\xE8\x69\x7F\xFA\x73\xF5\x7C\x2B\x2D\x3F\x7B\x1C\x7A\xE2\x6D\xC6\x42\x63\x9F\x73\xE8\x61\x68\x77\xFE\x71\x1C\x66\x2A\x6D\xE8\x20\x73\x0B\x75\xFD\x7C\x63\x03\x79\x7F\x7A\x00\xFE\x4B\xC1\x43\x7F\xEA\x1B\xA0\x7E\x8E\x77\xF5\x0D\xC2\x5D\xD2\x61\xE9\x5E\x02\x7A\x36\x37\x75\xF3\x7B\x2B\x13\x64\x2E\xD3\x6D\xB0\x71\x74\xAF\x2A\xA0\x37\x0C\x04\xF1\x7C\xED\x30\xC0\x4D\x4E\x0F\x7F\xD1\x45\xE7\x4E\xE4\x7C\xED\x54\xF9\x72\xEE\x60\xEA\x00\x75\x98\x7E\xC6\x62\xE6\x7A\x04\x72\x1C\x64\xC1\x4C\xC6\x49\x70\xA1\x7F\x14\x70\xF3\x44\xF4\x70\x02\x10\x1E\x75\xC8\x4A\x75\xA8\x74\x8B\x02\xD4\x7B\xF7\x70\x00\x90\x01\x11\xEB\x03\x02\xD3\x75\x5C\x72\xB5\x71\x0F\x7D\x00\x91\xE0\x0D\xCA\x5B\x75\x7D\x71\x73\x75\x28\x30\x5C\x79\x3F\x43\xC4\x64\xEB\x6B\x75\xE6\x74\x0D\x64\xBA\x71\x11\x72\x22\x68\x03\xB1\xB9\x2C\x64\xEE\x74\xAC\x70\x9B\x75\xEC\x63\x94\x1B\x49\x0F\x01", -"\xA1\x80\x5A\x80\x29\x72\xC9\x47\x5E\x72\x58\x4F\xFE\x3D\xEB\x01\x02\xFF\x75\x28\x81\xF9\x7A\x60\x77\xD0\x7D\xE9\x6B\xC9\x26\x37\xB6\x46\x9B\x24\x28\x74\x61\x74\x8A\x6E\xD8\x5B\x4E\x60\x73\x9A\x5C\x3C\x66\xB7\x64\xF1\x45\x13\x7C\x39\x16\xEC\x2D\x71\x6C\x0F\xC9\x6C\x00\x03\x64\x77\xB3\x64\xDB\x4C\xC6\x19\x6F\x28\x77\x4E\x81\x33\x67\x6D\x32\xBC\x61\xBD\x46\x04\x26\x81\x0B\x66\x51\x83\x34\x65\xF4\x63\x3E\x48\xE9\x75\x15\x76\x36\x39\x38\xCF\x6F\x24\x7D\x6D\x7F\xB8\x6D\x05\xA2\xEE\x49\x0B\x87\x38\xFC\x4D\xFE\x4C\x87\x38\xBA\x6F\xE9\x76\xCA\x31\x7A\xB8\x64\xD6\x75\x01\x52\xA7\x76\xB9\x6C\x2D\x58\xEE\x7E\x76\x52\x39\x27\x69\xE7\x72\x02\x5E\x8C\x65\xDC\x51\x9C\x0D\x68\xB7\x81\xBA\x09\x2E\x81\xB3\x46\x5E\x2D\xE9\x55\x54\x29\x77\xC0\x81\xD5\x76\xE4\x70\x6F\x74\x0C\x98\xC6\x39\xF4\x4F\x38\x1A\x69\x64\x82\x4F\x7E\x76\x72\x45\x78\xDD\x55\xD1\x7E\x4A\xDC\x50\xF0\x00\x73\x57\x85\x7D\xB1\x72\x5E\x29\xF0\x65\x51\x45\x2D\x33\x78\x57\x03\xC8\x49\x52\x7E\xBC\x57\x2D\x0B\x66\xE2\x0B\x16\x5B\x1E\x7A\x90\x0D\xC7\x70\x61\x2F\xF1\x5C\x02\x91\x0C\x46\x39\x20\x79\x20\x09\x64\x4C\x98\x7C\xDE\x51\x39\xBE\x6F\xBA\x12\xF4\x69\x91\x71\x0C\x93\xE9\x6F\x62\x0C\x79\x2B\x66\xD9\x7B\x65\x69\x0F\x04\x0A\x5B\xE4\x5E\xDE\x29\x41\x66\x4D\xCE\x6B\xF6\x7C\x8B\x1F\x3F\x7A\xE7\x71\x06\x5D\x79\x1E\x82\x85\x38\x0D\x04\x7F\x61\x10\x1E\x9F\x71\xF3\x2C\x31\xF3\x79\xB5\x7B\x01\x6F\xD4\x5B\x63\x59\xC5\x2F\x9E\x41\x66\x82\x38\x8A\x6B\x21\x3C\xA2\x69\xC6\x36\x03\x27\x04\x36\x82\x54\x52\x55\x13\x4F\x54\xDC\x70\x13\x06\xF7\x6D\x15\x68\x7D\xF9\x5F\x83\x74\x84\x5D\x11\x86\x8B\x0D\x14\x59\x59\x1F\x6A\x51\x7A\x27\x7A\x26\x6E\x41\x03\x5B\x07\xF0\x2D\xA6\x6D\x6A\x8A\x50\xC3\x6B\xDF\x37\xB3\x7D\x59\x21\xED\x7F\x2B\x39\x53\x52\x38\xD3\x7B\x6F\x54\xA7\x78\x54\x60\xDB\x3D\xE2\x2D\x7B\x6A\x6B\xD7\x78\x5B\x69\xB6\x70\xDE\x7F\x57\x45\xF7\x45\x35\x36\x01\x1B\x00\x7A\x7B\x20\x08\xDE\x6C\xEE\x6F\xD6\x78\x5D\xCB\x6A\xCC\x66\x73\x6D\x2B\x85\x95\x76\x19\x79\x73\x73\x7B\x8C\x3F\xFA\x79\x5E\x87\xBE\x78\x5D\x7A\xEE\x5A\xD7\x1E\x17\x74\x49\xEE\x69\x7F\x7A\xEF\x3B\x62\x6F\xB3\x73\x00\x18\x7C\x03\x02\x0D\x7C\x94\x7A\xC7\x72\xE6\x78\xA5\x60\xF8\x04\x7D\x95\x7C\x08\x7F\x89\x7A\xD0\x61\x7F\x2A\xF1\x62\xF9\x51\x6C\x5B\x46\x3D\x6D\x90\x7C\xDA\x74\xE2\x7C\xB0\x6C\xFA\x5A\x6C\x76\x01\xB7\x2E\x65\x81\xCE\x76\x35\x23\xB3\x59\x06\xA8\x7D\x23\x7C\x55\x7E\x67\x86\x95\x56\x35\x20\xB5\x40\xF8\x5E\x69\x8C\x7C\x2A\x7F\xA0\x2A\xD4\x76\x10\x14\x0D\xAE\x64\x4C\x7D\xCE\x7D\xF6\x3C\x0E\x5A\xD0\x78\x1A\x82\xF2\x5D\x06\xD7\x6C\xAC\x83\x56\x7C\x9B\x7B\xD9\x74\xEA\x71\xF3\x73\x53\x34\x7D\x85\x6D\x62\x7D\x6A\x84\x92\x55\x37\x5B\xF5\x62\x01\x44\x83\x60\x7C\x0F\x7E\xB0\x7C\x37\x8A\x1C\x9E\x0D\xAA\x06\xC0\x83\x87\x7D\xDF\x25\xA2\x7A\x56\x59\x7C\x38\x0D\x92\x07\xA2\x00\xD0\x7D\x5A\x7E\xB4\x7E\xCE\x75\xED\x78\x0E\xA6\xF8\x57\x69\x6D\x81\x4C\x7F\x6B\x84\xC2\x7C\xE8\x76\xB9\x15\xF9\x4E\x7C\x27\x6D\xDB\x81\x94\x79\xC0\x74\x03\x00\x1A\x74\x00\x69\x38\xBC\x01\x93\x01\x7E\x83\xE8\x24\x03\x1C\xF2\x7F\xFA\x18\x34\xFD\x83\xE0\x3C\x0D\x02\xCC\x7B\x00\x3C\xF1\x0E\xFA\x3D\x83\x9C\x83\xEB\x83\xD1\x59\x38\x83\x46\x03\xF2\x00\x08\xCF\x34\x03\x84\xD2\x81\x17\x70\x03\x2C\x8C\x3E\xF3\x50\x06\xF7\x7C\xD7\x7D\x46\x60\x2C\x4E\x85\x50\x1B\x99\x08\x35\x07\x9C\x59\xF7\x82\x1A\x02\x2A\x07\x24\x03\x22\x9C\x0F\x90\x08\x84\x84\x0C\x21\x0A\x84\x82\x85\xD0\x7A\xC5\x59\x10\x8D\x08\xEF\x2E\x01\x85\x6C\x31\x84\x87\xCF\x75\x93\x2B\x80\x05\x50\x07\x84\xD5\x83\x04\x87\xB1\x7C\xD5\x73\x46\x10\x25\x4B\x4D\x0F\x7E\x2C\x26\x89\x7E\x3D\x85\xA1\x12\xF4\x78\xF8\x6F\xFE\x50\x80\x7C\x80\x29\x83\x1E\x82\xEB\x74\xF5\x71\xB0\x2E\xEA\x01\x02\xB0\x74\x41\x80\x60\x54\xEB\x7C\xDA\x7A\x8A\x77\xFD\x64\x70\x94\x08\xFA\x63\xAE\x72\xF4\x7D\xCD\x1D\xFB\x7F\xFD\x44\x68\x6B\x7E\xB4\x7F\x7F\x64\x31\x64\xB8\x6F\xFB\x6C\x1D\x45\x7E\x59\x84\x3F\x0F\xFA\x69\x4D\x89\xF4\x71\x01\x2F\xDF\x21\x09\x1B\x75\xA6\x7E\xE0\x44\x20\x60\xDC\x6A\xFB\x7F\xFB\x1E\x78\xCF\x71\x67\x19\x23\x0B\x35\x79\x7F\x1F\xFF\x4D\x09\xB5\x00\x02\x81\x80\x00\x01\x80\x2C\x76\x00\x95\xCC\x48\x00\xA0\x74\x72\x42\x11\x74\x2F\x77\x4D\x5F\xB8\x30\xD7\x63\xFD\x28\x74\xF2\x7F\x11\x28\xFD\x7C\x45\x75\x9A\x6E\xD1\x5A\xC7\x1A\x80\x97\x0F", -"\xD3\x7D\x5E\x61\x06\x8B\x80\x75\x01\x34\x00\xC5\x36\x35\x70\xC7\x7F\x0D\x73\x60\x71\x14\x8C\x33\x74\x8E\x19\x31\x3D\x81\x98\x73\xAD\x70\x08\x89\x23\x1F\x1D\x48\x96\x44\x70\x9C\x7E\x45\x74\x97\x80\x79\x47\x82\x69\x02\x8C\xEA\x59\x63\x4E\x81\xFC\x0C\xEC\x7B\xEA\x77\x21\x13\x02\xA3\xC7\x34\x00\xA2\x00\x7D\x1D\xB0\x81\xEB\x71\xFB\x78\xC9\x71\x53\x5C\x80\x53\x2C\x6D\x74\xBC\x51\x0C\x8A\x06\x83\x03\xA3\x9B\x7C\x69\x65\x81\x71\x76\xBA\x74\x44\x68\x96\x3E\xD6\x4E\x0B\xEC\x80\x85\x70\xAE\x41\x56\x66\x66\x4E\x88\x7F\x01\x86\xDC\x72\x73\x75\x81\x8A\x18\x63\x07\x12\x7C\x24\x81\xD8\x47\x0B\xD8\x75\xC9\x85\x29\x4F\x85\x65\x5A\x82\x06\x9E\xC7\x24\x01\x82\x71\xD2\x85\x36\x80\xB5\x84\x33\x36\x2D\x8E\x17\xA9\xEB\x72\x85\x69\x5B\x7B\x55\x4D\x11\x03\x4F\x00\x8C\x85\x6F\xC6\x61\x85\x95\x71\x0B\x07\xAE\x84\x0A\x81\x8B\x6B\x12\x85\x0B\x97\x04\x37\x41\x2B\x82\x40\x01\x0B\x86\xFB\x63\x04\xA7\x0B\x9B\x73\xCC\x63\x75\x84\xBD\x85\x5D\x87\x86\x2F\x17\xBA\xAC\x52\x31\xF3\x28\x42\x71\xB9\x75\x44\x6D\x2C\x96\x17\x98\x0B\xE5\x75\x6F\x81\x46\x71\x1C\x86\xF2\x7D\xC1\x79\x24\x53\xE2\x44\x12\x01\x87\xAF\x61\xEA\x4F\xF5\x4E\x6B\x2F\x3D\x67\xF0\x62\x09\x43\x2D\xDA\x4F\x46\x81\x27\x62\x13\x96\x22\x74\x04\xB3\x00\x38\x82\x83\x01\xCE\x87\xA0\x6A\x13\x83\x4B\x7C\x04\x87\x6B\xDE\x6E\x86\x82\xC5\x6E\xDD\x63\x14\x94\xA6\x16\x08\x4B\x06\xD8\x30\xA4\x81\xCF\x82\x29\x81\x5E\x0D\x0A\xAE\x4D\x4F\x82\x57\x6A\x2B\x4A\x54\x85\x06\x04\x15\x89\x99\x16\x05\x98\x19\x58\x82\xB1\x68\x50\x0B\x2B\x8F\xB7\x7A\xE2\x68\xD5\x5B\x85\x25\x44\xD7\x79\xA3\x70\xDF\x4D\x82\x10\x1A\x98\x32\x3E\x2D\x52\x83\xEB\x7C\xCC\x86\xAB\x67\x15\x87\x12\xB8\x01\xD1\x6D\x39\x65\x69\x6E\x0C\x00\xDC\x70\x00\x1D\x7E\x58\xDB\x55\x26\x46\x3E\xC3\x6A\x4F\x80\x3F\x63\xCA\x77\xAF\x6B\xFB\x3F\x6D\xA5\x0F\x98\x81\x55\x7B\x26\x85\xD5\x63\xB4\x39\x0C\x83\x02\x3B\x86\xBB\x79\x10\x04\x6E\x29\x37\x89\x08\x9C\xDB\x49\x42\xFA\x37\xA2\x86\x06\x2F\x68\x86\x14\x9C\xF3\x09\x05\xBC\x69\x5F\x79\xA5\x81\xC4\x0E\x69\x80\x3A\x22\x1C\x91\xF5\x42\x00\x84\x87\xCF\x87\xA0\x2B\x15\x07\x12\x04\x1D\xB9\x04\xF5\x06\x42\x00\xC6\x85\xEF\x6A\xF6\x67\xC8\x74\xBD\x42\x0D\x8E\x80\xA3\x6B\x8C\x6A\xA2\x02\x27\x54\x66\x1E\x45\x26\x72\x7A\x29\xE1\x82\xD9\x86\x02\x4C\x13\x16\x3B\x9A\xF9\x0B\x7D\x47\x82\x6C\x35\x8C\x6A\x52\x85\x17\x10\x94\x0B\x60\x7C\x89\x06\x53\xF4\x80\x7E\x80\x32\x3A\x06\x03\x10\x80\x00\x05\x04\x84\x79\x78\x87\xD5\x84\xF4\x6D\x75\x8B\x10\x9B\x01\xA3\xBA\x10\x82\x7C\x78\x37\x10\xC1\x7B\xE4\x09\x7A\x62\x38\x03\x5A\x40\x22\x09\x02\xF0\x86\x33\x54\xE1\x71\x3D\x88\x08\xAC\x0E\xBF\x6F\x41\x87\xB0\x76\x2A\x86\x4E\x09\xCE\x1B\x1E\x90\x2F\x5D\x87\x23\x0E\x46\x3A\xF8\x83\x20\x02\x3E\x8B\xF8\x63\x1C\x2A\x87\xE6\x87\xE9\x84\xFA\x80\x91\x70\x59\x7D\xF9\x6C\x0F\xEF\x36\x38\x7E\x1C\x4E\x4E\x6D\xF4\x5F\x0B\x71\x1F\xA5\xA9\x27\x02\x68\x54\xE7\x6D\xF9\x86\xAA\x6A\x3F\x8A\x08\xA7\xFB\x01\x2A\xB6\x6F\xF5\x84\x89\x01\x9D\x11\x40\x86\x75\x43\x10\xCD\x65\x3C\x7E\x01\x88\xF4\x17\x6F\x30\x58\x62\xAC\x7E\x0F\xA4\x04\xF8\x86\x06\x88\xF7\x6B\x7F\x8E\x3A\x94\xB2\x0B\xD6\x48\x86\xE2\x6F\xEC\x50\xD2\x84\xFC\x6F\x41\x8A\x0A\x13\xD6\x65\x82\xF6\x56\xF1\x7A\xA0\x2E\x06\x05\xDE\x67\x09\x2D\x05\xDB\x5E\xA8\x56\xE7\x7B\x8C\x53\x37\x30\x4E\x40\x1B\xA2\xBF\x78\x82\xD4\x6B\x61\x49\x10\x8C\x4B\x5A\xED\x5E\x0B\xBA\xF7\x00\x83\x64\x50\xC1\x83\x45\x35\x45\x5B\xE9\x72\x0D\xB3\x00\x34\x83\x03\x02\xDB\x82\xA3\x7D\x38\x84\x23\x9B\x0D\x9B\x8D\x03\x7D\x22\x7C\xEB\x80\x73\x87\x76\x33\x1C\x9D\xF5\x54\x11\xF7\x6C\x5A\x46\x62\x7F\x78\x87\xD6\x75\x1E\x8B\x10\x99\x07\xF9\x7C\xCF\x82\x2F\x89\x74\x82\x42\x81\xE8\x77\x22\xAB\x08\x91\x83\x44\x7D\x4A\x58\x39\x0A\xD9\x7A\x46\x9D\xF3\x62\xF9\x56\x25\x6E\x89\x1C\x84\x8B\x86\xD2\x78\x1E\x98\xF4\x47\x78\x19\x59\x1F\x85\x05\x6C\xC5\x2F\x3E\x82\x03\x05\x11\x86\x04\x06\x89\x2E\x33\x18\x87\x20\x8F\x3B\x85\x20\x8A\x11\xBA\x11\xF0\x88\xAB\x83\x33\x89\x23\x64\x32\x89\x48\x87\x11\x86\x07\xEB\x63\x14\x84\x3B\x8B\x23\x88\x43\x88\xEC\x74\xE2\x70\x92\x00\x89\x36\x2F\xFB\x80\x7C\x85\x5F\x18\x62\x70\x03\x3D\x07\xAC\x41\x6D\x6D\x1A\x00\xD0\x45\x06\x09\xC6\x26\x00\x2B\x38\x2E\x89\x43\x2E\x1C\x40\xD0\x76\x43\x88\xA1\x32\x25\x99\x63\x35\x00\x62\x7C\xB9\x4E\x5B\x03", -"\x46\x87\x21\x85\x23\xB4\xF8\x41\x83\x92\x1C\x2E\x6E\x2D\x8C\xE2\x28\x4B\x92\x10\x8A\x75\x0B\x89\x9B\x88\x5F\x88\x9E\x7A\x04\x07\x04\x14\x02\x02\x13\xCF\x34\xC5\x89\x2A\x88\x64\x7B\xB4\x6E\x21\x8F\x23\x9C\x12\xAC\x7D\x7D\x1D\x67\x89\xF0\x39\x9A\x87\x67\x7E\x01\x14\x13\xA6\x89\xD6\x88\x65\x89\x86\x80\xD1\x1A\x4D\x97\x25\xA2\xF9\x3D\x00\xDF\x88\x5E\x89\x16\x8A\x47\x86\xE8\x67\x0F\xB2\x61\x51\x00\xE5\x88\x62\x8A\x98\x79\x04\x09\x4E\x81\x27\xBF\x06\xE6\x88\xEE\x88\xBB\x45\x11\x04\xCD\x61\xE0\x6A\x25\x9C\xB2\x2C\x89\x34\x00\x7A\x02\xBE\x1A\xA0\x81\x4B\x90\x26\xB9\x12\xCC\x31\xEA\x89\xCD\x83\x1E\x8D\xD3\x6D\x49\x96\x9A\x01\x13\x92\x6D\xC3\x88\xB7\x00\x37\x89\xD8\x71\xD2\x28\x28\xB6\x13\x8A\x84\x66\x59\x71\x8A\x33\x88\xA2\x86\x50\x92\x10\xBC\x00\x75\x89\xC9\x89\x7B\x89\x46\x8D\xA1\x82\x02\x19\x26\x9C\x14\xDB\x89\x62\x7C\x6F\x8A\x45\x89\xA4\x88\x51\x99\xF5\x75\x8D\x64\x89\x27\x8A\x73\x8A\x84\x80\x9D\x8B\x52\x83\x23\x86\xFB\x2D\x59\x92\x88\x51\x1F\xDB\x29\xA2\x89\x11\x13\x28\xBD\xD8\x74\x89\x35\x8B\x5E\x8A\x48\x8E\xA5\x84\x36\x5B\x27\xA0\x4E\x03\x86\xBF\x7E\x83\x84\xAF\x86\x84\x64\x1E\x76\x0F\x7F\xC8\x49\x84\x0E\x86\xBA\x7D\x95\x86\x2E\x87\x25\x99\xD5\x6C\x09\xE6\x70\x64\x7F\x01\x16\xD9\x7E\xEF\x74\xAC\x7E\xB2\x3E\xFB\x01\x7F\x62\x85\x62\x77\xE0\x7E\xED\x75\xF8\x70\xD4\x5C\xFF\x7E\x7F\xDE\x7E\x85\x72\x0D\x01\x50\x80\x00\x03\x14\xB6\xE7\x05\x85\xC2\x63\x0F\x76\x59\x74\xA3\x2A\x28\x94\xD5\x69\x0B\xF4\x82\x8E\x85\x08\x83\x69\x73\x02\x8D\xD1\x15\xFF\x57\x00\x92\x80\x19\x80\xD3\x7F\x94\x19\x9D\x28\x30\x0A\xC0\x64\x9D\x1F\x85\x15\x2A\x1B\x81\xEB\x43\x02\x74\x2A\x80\x4D\x4D\xAC\x55\x4C\xFB\x31\x54\x85\x78\x76\x5B\x85\x8D\x41\xD4\x60\xE0\x04\x75\x2C\x75\x23\x73\xD7\x30\x09\x82\x2B\x8A\x02\xA3\xFE\x63\x86\xB9\x84\xFE\x7D\xEA\x4D\x66\x8A\x88\x54\x09\xB4\x00\x07\x87\x6B\x15\x8A\x3D\x55\x7F\x67\x8B\x37\x96\xE6\x2D\xDB\x5A\x26\x92\x87\xB3\x24\xE5\x85\x57\x69\x34\x81\x1E\x97\x0E\xDB\x7A\x3D\x79\xA6\x85\xF0\x26\x73\x8D\x33\x80\x1D\xB6\x0C\x99\x6A\x42\x01\x34\x3A\xE9\x86\x20\x03\x5C\x9C\x19\xA8\x0E\xAC\x8B\xD4\x87\x07\x8B\x3A\x69\x76\x81\xD5\x73\x1D\x81\xA5\x35\x87\x40\x12\x6A\x35\xEE\x85\xB9\x8B\x3B\x90\x2E\xBA\x0B\x2F\x2E\xC0\x86\x9B\x62\xF0\x80\x73\x8C\x9E\x58\xF6\x45\x0F\xA0\x6C\x49\x7D\x41\x8A\x7D\x84\x91\x36\x48\x83\x08\x08\x12\x83\x89\x96\x88\x69\x89\x23\x8B\x6B\x46\x21\x8B\x27\x8B\x14\xF1\x88\xCD\x83\x14\x86\xA4\x6A\x91\x8B\x4B\x88\x11\xBC\x4F\x6C\x8B\x17\x8B\x2D\x8A\x27\x88\xC9\x7B\xDA\x36\x0D\x7E\x13\x82\x89\x12\x8B\x41\x2C\x41\x8E\x20\x03\x60\x8E\xC9\x3C\x14\xF0\x00\x3E\x8A\xDD\x80\x64\x79\xA8\x8E\x5E\x90\x24\xA6\x07\xC5\x7C\x83\x27\x87\x88\x8E\x7F\xC0\x89\x60\x87\xAD\x16\x4D\x47\x89\xF5\x8A\x96\x8A\x7E\x8E\x6A\x2D\x4C\x9B\x29\x9D\x14\xB4\x84\xF3\x29\x8F\x88\x83\x8A\xA1\x8E\x60\x98\x27\x90\x18\x8E\x8A\x46\x8B\x09\x8F\x87\x8A\x52\x53\x4F\x2A\x29\xB2\x08\xF9\x8B\xED\x89\x13\x8C\x33\x89\xC5\x89\x7C\x34\x30\x9F\x07\xB4\x8A\x2F\x8C\x0D\x8D\x8C\x8D\x92\x5A\x53\x91\x29\xB2\x13\x97\x89\x22\x00\xA0\x89\x8E\x8E\xA6\x8B\x1C\x9B\x31\x8F\xB1\x29\x8C\x99\x59\x1A\x02\xCD\x2C\x95\x83\x4A\x9C\x62\x25\x12\xB8\x40\xA8\x89\x00\x7E\x0D\x00\x68\x46\x03\x0D\x15\x67\x04\x7E\x67\x6E\x02\x1B\x02\x7F\x80\xC1\x88\xA1\x3A\x32\x81\x7F\x36\x00\x62\x7D\x11\x23\x8D\x82\xA2\x80\x63\x89\xF3\x50\x4F\x58\x00\x79\x70\x04\x3D\x26\x5B\xCA\x8C\xC9\x55\x32\xB4\x00\x6F\x84\x99\x08\x3E\x56\x97\x89\x1B\x30\x66\x92\x10\xA2\x19\xCC\x31\xD1\x88\xA1\x89\x4B\x8B\x99\x88\x66\x90\x25\x7C\x09\x97\x04\x7E\x84\x84\x85\x0C\x07\x06\x0C\x56\x8E\x2B\x8C\xE7\x1D\x74\x86\x85\x96\x1A\xFA\x79\x51\x8C\xFE\x6B\x14\x8F\xBB\x3E\x3D\x6C\x73\xF8\x7E\x04\x83\xFE\x74\x01\x94\x14\xB7\xFF\x16\x85\x77\x73\xCD\x60\x58\x64\xB4\x8F\x27\x74\x09\xB5\x00\x28\x8B\x29\x12\xD5\x8A\x5C\x78\xB9\x84\x42\x95\x1E\x90\x0E\xB0\x8B\x9A\x1E\xBA\x2F\xE4\x84\xB1\x65\xAD\x2A\x1A\xB5\x0D\x5E\x78\xDD\x8A\xCD\x87\x90\x0B\xB7\x8B\x69\x80\x2E\xA1\x0E\xBD\x8B\x8C\x38\x2C\x02\xBE\x1A\xD7\x87\x3A\x8A\x0C\x29\x0E\x87\x82\x22\x88\x43\x79\xA9\x8A\xB9\x87\x6A\x8C\xD9\x3A\x0E\xF0\x50\xBC\x87\xE8\x8B\x0B\x2B\xBA\x8D\x33\x8E\x2E\xA5\xA5\x56\x8B\x34\x7F\xDF\x86\xE5\x83\x69\x8C\x5D\x97\xF4\x7D\x0E\xDC\x83\x93\x2E\xE0\x88\xA9\x8E\x81\x8F\x13\x8F", -"\x1D\xA9\x9F\x4C\x8B\xCD\x8D\xEA\x8B\xA2\x07\xDA\x82\x5D\x90\x33\x47\x1B\xB4\x87\xE3\x8C\x65\x8E\xB4\x8F\xB7\x2B\x5D\x98\x2D\x99\x0E\xC4\x87\xFA\x04\xFE\x89\xB5\x3E\xBF\x8B\x4A\x8C\xE4\x03\x18\x83\x02\x05\x8C\x62\x8B\x8A\x8C\xA2\x8F\x74\x43\x32\xBA\x19\x9B\x8C\x25\x8B\x8D\x8A\x8A\x88\xA5\x86\x4C\x90\x33\x55\x13\xBA\x8C\x66\x8D\xC1\x25\x87\x8E\xC7\x84\x66\x9E\x28\xAE\xDB\x48\x89\x44\x8C\x2D\x8A\x91\x88\x7A\x26\x52\x83\x38\xB2\x14\xD2\x89\x2A\x8B\xAD\x45\x42\x8B\xDA\x7F\x5E\x91\x24\xB9\x13\xB0\x8A\x16\x8F\x1F\x8E\x34\x8C\xA6\x8A\x71\x85\x33\xBC\x11\xEF\x89\x1E\x8C\x82\x8E\x34\x88\xA8\x85\x72\x88\x38\xA7\x1C\xFA\x89\xF2\x8D\xAB\x08\xC5\x2C\xCD\x80\x60\x99\x08\x15\x19\xB2\x00\x70\x8C\x87\x1A\x9C\x8F\x49\x35\x67\x80\x31\x96\x4D\x77\x8C\x17\x8F\x7F\x8F\xC4\x8B\x70\x2D\x67\x91\x39\x92\xF4\x36\x8E\x36\x2F\x2A\x8D\x93\x8E\x13\x25\x4A\x9A\x32\x91\x19\x9D\x84\x70\x01\x1B\x00\xD0\x47\x06\x06\x65\x85\xD9\x3C\xA9\x37\x00\x5B\x8C\x1B\x00\x86\x30\xEB\x81\xFC\x37\x01\x22\xF9\x29\x0C\xCC\x31\x9E\x8E\xD0\x89\xE1\x86\x35\x38\xDD\x2D\xF9\x19\x59\x52\x8E\x4E\x58\xD5\x8F\xCD\x87\x12\x11\xBF\x54\x5C\x5C\x8E\xD9\x30\xAF\x8E\x84\x80\xEC\x84\x67\x86\x39\x8C\x14\xAC\x7D\x66\x8F\xA7\x85\xAD\x8A\xAE\x7E\x6B\x34\x09\xAA\x0D\xB0\x18\xAA\x41\xD5\x8B\xD3\x8C\x3D\x8F\x4F\x7C\xAC\x02\x6B\x29\x52\x37\x00\x7B\x03\x49\x02\xF1\x89\x13\x8D\xEA\x4C\xD4\x74\x79\xD8\x2D\xAA\x7B\x54\x7D\xC4\x44\x51\x78\xEB\x5E\xD4\x36\x8B\x7A\x7B\x5E\x78\x57\x78\x5A\x89\x91\x28\xA7\x48\x96\x6A\x7A\xF1\x58\xAE\x52\xE4\x8C\xA3\x62\x51\x66\xFA\x15\x1E\xA4\x8F\x37\x6B\xAC\x79\xC4\x12\x29\x8B\x4F\x7D\x90\x46\x1D\x81\x6A\x60\x7A\x00\x8D\x4A\x50\x07\x08\x02\x1A\x77\x35\x1E\x8D\x8F\x68\x7A\xAC\x52\x53\x78\xF2\x80\xD5\x7D\x19\xB3\xF5\x6F\x77\x71\x7A\xDF\x8E\xE5\x8B\xA2\x60\x5C\x83\x3E\xB7\x9B\x2A\x8F\xD8\x4D\x6A\x8E\x5C\x57\x2A\x52\x75\x3E\x3C\xB1\x53\x0A\x6A\xA0\x8E\x8B\x6E\xE8\x8A\xAE\x78\xD7\x66\x3D\xA3\x1E\xEF\x7A\x57\x7B\xE0\x8C\xEA\x86\xF8\x87\xD7\x20\xA9\x5A\xF5\x70\x52\x99\x86\xBF\x78\xE8\x27\xD6\x85\x37\x0A\x14\x1B\xEC\x47\x8D\x69\x38\x46\x21\x42\x02\xFD\x87\xB2\x27\x36\xA1\xB4\x7B\x5D\x98\x8F\xF2\x8C\xB4\x88\x29\x3B\x66\x94\x32\x8C\x72\x39\x8E\x6E\x8F\x2C\x8C\xCF\x89\xCC\x84\x21\x7B\x1A\x79\x19\x8D\x8C\xD7\x89\xE0\x81\xD1\x88\xBC\x8D\x5F\x9F\x11\x69\x1D\xB5\x8E\x51\x8F\x41\x2C\xFE\x8F\xEA\x8F\xA4\x32\x3B\xBE\x1C\xD3\x34\x79\x03\xB0\x8E\xDD\x88\xBE\x8A\xCC\x51\x0A\x68\x1D\xB6\x2E\x54\x8F\xA5\x8C\x6D\x65\x94\x88\x75\x83\x3C\xA1\x17\xEE\x02\x38\x00\xA0\x44\x0E\x01\x8D\x32\xC8\x58\x5A\x3C\xA9\x38\x00\x5B\x8D\x1B\x00\x86\x30\x05\x91\xFC\x38\x01\x22\xF9\x79\x70\x6F\x8F\x09\x92\xC7\x8A\xC6\x8D\x3E\x1C\x27\x90\x1D\xA1\x90\x9C\x59\x11\x90\x0D\x05\xC0\x7E\xC0\x07\x41\x8F\x69\x2E\x90\x12\x84\x18\x92\x5B\x06\x01\x93\x76\x8B\x01\x59\x08\xB5\x90\x04\x91\x79\x8F\xE1\x89\xF6\x86\x78\x9F\xA6\x6A\x54\x0F\x00\xFA\x1C\x28\x90\xEE\x8F\xF3\x8B\x7B\x8A\x09\xBD\x1E\xEE\x69\x78\x7A\xED\x8C\x44\x68\xF5\x89\xD7\x61\x9A\x6C\x1E\xDD\x7A\xCD\x8E\x84\x6B\x08\x28\xFA\x85\x85\x81\x3D\x91\x1E\xD4\x8F\x5C\x90\x2D\x92\x5B\x7E\x2C\x54\x7C\x9F\x1C\x9C\x1F\xD3\x8D\x5E\x90\xE5\x8E\xD5\x22\xFC\x8D\x07\x04\x3F\xBC\x22\x4A\x84\x04\x88\xB1\x52\xA2\x02\x78\x7A\xF0\x76\xEB\x4A\x0A\x2D\x58\xBC\x8A\xD4\x86\x1D\x96\x32\x01\x5C\x94\x01\x3C\x1A\x86\x02\x87\x90\xE3\x8A\xAF\x8B\xDB\x8F\x38\x8F\x2D\x97\x21\xF7\x90\xC8\x8D\xF9\x8F\x55\x02\x93\x3C\x6C\x92\x3F\x91\x22\xE9\x8D\xD7\x8B\xF2\x2D\x76\x8A\x2C\x53\x3C\x92\x44\x98\x1B\x8A\x91\x84\x90\x46\x91\xFA\x87\xD4\x8F\x88\x89\x14\x22\x1B\xE9\x83\x34\x7E\x5B\x49\x25\x90\x12\x98\x6E\x88\x45\xA6\x72\x6B\x8D\xAE\x8C\xC5\x01\x27\x90\x13\x94\x22\x0F\x3D\x86\x20\xD3\x8E\xF7\x8F\xB6\x8C\x03\x95\xEB\x8F\x75\x91\x40\x9B\x8D\x62\x8E\x00\x90\x71\x88\x49\x89\xEF\x89\x84\x92\x39\xA0\x20\xA2\x90\x83\x2C\x1E\x90\x5A\x64\xE2\x2C\x82\x99\xC6\x00\x21\x8F\x90\x42\x91\x8C\x00\x11\x91\x18\x92\x52\x8B\x26\x88\x21\xEB\x83\x1F\x91\x8C\x00\x0E\x06\xE6\x23\x82\x9A\x40\xAE\x43\x22\x80\xCC\x91\xF9\x80\xD4\x89\x07\x00\x34\x59\x01\x29\x71\x02\x7A\x54\x4A\xB7\x01\x0E\x03\xCB\x88\x03\x18\xD0\x2B\x23\xC1\x3F\x39\x00\x31\x7F\x0F\x01\xB5\x2C\x8C\x92\x41\x8F\x18\x95\x59\x6D\x2F\xF9\x1B\xAA\x05\x9B\x12\xAB\x5C\x10\xAC\x07\x99", -"\x02\xE4\x90\x4E\x5A\x39\x94\x06\x03\x21\x29\x08\x05\x24\xE7\x3F\xEF\x91\x6C\x31\x3C\x92\x42\x83\x8F\x8C\xC6\x0F\x23\xC5\x90\x77\x8F\xE0\x81\x3E\x93\x4A\x0B\x8F\x95\x08\x36\x22\xDF\x69\xE1\x2D\x94\x52\x37\x94\x29\x20\x8E\x94\x14\x00\x22\xFB\x8E\xBD\x8B\x41\x92\x46\x6A\x64\x33\x5C\x83\x08\x05\x17\xF6\x7A\xBF\x8D\x9A\x3E\xDE\x81\xB9\x8D\x6D\x8F\x76\x60\x1B\x96\x91\xAD\x90\x3F\x8B\xED\x86\x6A\x2B\x8A\x86\x45\x97\x22\xAE\x91\xBE\x87\xDA\x8A\x76\x89\xAA\x70\x6B\x96\x36\x9F\x17\xD8\x91\x05\x90\x66\x90\x32\x93\x06\x0A\x8C\x9E\x41\xAD\x20\xAF\x90\xF7\x8B\xB8\x8E\x3D\x96\xC4\x85\xC9\x57\x46\x99\xB2\x01\x92\x08\x90\x73\x92\x0C\x07\x20\x93\x10\x07\x48\xAE\x64\x09\x92\x14\x2F\x85\x93\x03\x95\x21\x9E\x8C\x8B\x4A\xBF\x12\x92\x89\x13\x92\x7B\x10\x3F\x97\x22\x9A\x8E\x96\xB9\x26\x23\x9B\x92\x86\x09\x52\x8B\x3A\x93\x85\x73\x42\x7D\x63\x70\x00\x06\x38\x6E\x93\x34\x38\x1C\x07\x24\x03\x97\x83\xBA\x26\x57\x5B\x8C\x39\x00\x44\x58\x34\x41\x2B\x95\x1F\x7D\x30\x38\x37\x6A\x45\xF4\x91\x3C\x6D\xDB\x46\xB2\x83\xCF\x22\x4C\x86\xEA\x0C\x63\x73\x37\xB4\x2F\x5F\x4E\x2D\x90\x97\x9A\x64\x42\x8D\x71\x71\x02\x03\x79\x72\x8D\x6B\x2F\x9A\x8E\x9D\x4B\xB9\x05\x7F\x92\x66\x59\x38\x3E\x94\x6B\x30\x91\x04\x8C\x1E\x45\x26\xEE\x92\x87\x92\xE6\x45\x62\x93\x55\x10\x92\x88\x1D\xBD\x1D\xC0\x8B\x2F\x86\xC0\x8C\x28\x92\xA3\x62\x8E\x84\x3C\x96\x08\x06\x38\x29\x52\xF3\x28\x59\x7A\x20\x06\xD6\x7E\x48\xB9\x1E\x8B\x6A\x73\x78\xC5\x85\x16\x95\x14\x92\xD5\x7C\x42\x81\x54\x56\x8F\x6E\x90\xDF\x90\x56\x7E\xFB\x8B\x7A\x92\x43\x92\x78\x74\x52\xC5\x91\xA3\x8C\x1C\x00\x2A\x9D\x84\x8A\x47\x8C\x72\x54\x92\x02\x02\xAB\x91\x56\x97\x49\x3A\x95\x97\xB3\x4D\x24\xDB\x46\x0F\x92\x6A\x90\x46\x8B\x99\x81\x96\x95\x48\xB2\xAA\x0B\x93\x8E\x93\x8D\x75\x5C\x95\x1D\x8F\xEB\x05\x25\xB7\x25\xEC\x92\xFF\x6E\x06\x6F\x5B\x97\xFB\x41\x97\x94\x01\x10\x26\x81\x02\x92\x92\xC1\x90\x75\x96\x32\x9C\x9E\x1D\xD4\x01\x26\xA0\x93\x55\x27\x40\x74\x11\x6E\x30\x96\x2B\x87\x1E\x63\x26\xA3\x0C\xE0\x92\xF3\x29\x63\x96\xBC\x26\xAC\x2F\x4F\x80\x00\x71\x93\x6E\x93\xF9\x93\xAE\x57\x32\x9C\x1A\x77\x4F\x8E\x26\xDC\x36\x9D\x93\xAF\x37\x67\x97\x41\x9D\x9F\x88\x4C\x8E\xEA\x0A\x93\x6D\x92\x4D\x59\x0C\x03\x40\x90\xC8\x48\x47\x84\xB2\x23\x59\x3B\x5C\xF3\x28\x22\x5B\x94\x53\x99\x87\x27\x92\xD9\x1A\x83\x1C\x8F\x12\x8F\x57\x91\x9F\x81\x04\x1D\x0B\x27\x01\x7D\x91\x01\x95\x0D\x94\x7B\x92\x43\x93\x68\x3C\x8F\x09\x04\x36\x94\xA2\x58\x12\x94\x7F\x97\x01\x9F\x4D\x8F\xFE\x1E\x25\xCB\x89\x2D\x94\x8F\x03\x8B\x95\x98\x69\xA1\x82\x50\xB3\x28\x84\x94\x33\x00\x03\x94\x82\x96\x31\x9A\xA0\x9E\xE5\x75\x27\x80\x93\x06\x8E\x0A\x95\xEF\x45\x55\x87\x3C\x53\x50\xA6\x57\x21\x93\x5F\x37\xFF\x90\x8B\x09\x40\x9B\x9E\x94\xE8\x53\x26\xA2\x36\x4A\x94\x42\x58\x65\x90\x20\x94\x9F\x98\x4C\xA9\x51\x1B\x93\x10\x94\x2A\x94\x63\x61\xB5\x74\xCA\x4D\x1B\x46\x01\xA2\x93\x17\x95\xBF\x15\x7A\x96\xC6\x61\x03\x02\x4F\xB4\x28\xE4\x93\x2C\x1E\xF3\x91\x21\x58\x3D\x91\xD1\x76\x0D\x4F\x7F\x1C\x94\x7F\x36\x1C\x97\x40\x00\x47\x9E\x92\x2F\xFE\x12\xD8\x6E\x94\x14\x8B\x1E\x94\x8A\x94\x3C\x83\x54\x80\x52\xAE\x28\xB2\x55\x3F\x26\xD3\x5A\x72\x94\x55\x41\x03\x00\xFA\x6E\x64\x2F\x5F\x18\x53\x3C\x6F\x8D\x69\x46\x90\xA8\x93\x01\x02\x2A\x82\x02\x84\x94\x3A\x97\xA1\x96\x44\x99\x19\x8B\x54\xA4\x11\xD5\x91\x19\x85\x20\x95\x68\x0C\x3B\x8C\xF0\x2B\x74\x72\x01\x0D\x44\x74\x00\x96\x26\xAB\x90\x56\x99\xC6\x29\x8F\x09\x04\x36\x95\x36\x4B\xFE\x40\xE1\x01\x60\x75\xB5\x25\xA4\x21\x03\xEF\x6D\x5C\x2F\xEC\x60\x70\x4D\x6F\x3F\x52\x5A\x55\xA0\x0E\x31\x95\x16\x43\x59\x95\xA3\x5E\x6F\x3F\xE9\x67\x09\x38\x2A\xBA\x3A\xC6\x94\x5E\x95\x08\x35\x96\x22\x48\x41\xC1\x3E\x51\x42\x95\xFF\x0E\xCA\x35\xB8\x6C\xDC\x61\x7E\x23\xB7\x57\x6B\x65\x6D\x33\x01\x73\x6D\x7D\x04\xDB\x3B\x6E\x6E\x49\xA9\xD5\x23\x5C\x04\x5C\x6E\x94\x3B\x0C\xF8\x65\x30\x46\x7D\x72\xFB\x3B\x5F\x4A\x8B\x77\x7C\xFA\x41\x07\x0B\x0B\x07\x09\x35\x2B\xC4\x85\xF4\x6D\x5F\x44\xEC\x59\x02\x93\x55\x98\x3E\x73\x6B\x27\x27\x03\x46\x17\x45\xBF\x6D\xF8\x5D\xA3\x7F\x3C\x73\x8C\x66\x45\xA6\x78\x3C\x41\xE9\x49\xE1\x32\xF9\x5C\x60\x30\x10\xA9\x5A\x32\x00\x1A\x03\x46\x43\x20\x0B\x11\x51\x6D\x7A\xB8\x24\x32\x17\x36\xE2\x7B\x6F\x5F\x22\x45\x03\x17\x05\x27\x04\x1E\x96\xEB\x5A\x20", -"\x5E\x9C\x5D\x89\x77\xE9\x24\xBE\x31\x0F\x46\x2F\x47\x5D\xCE\x42\x5B\x80\x75\x57\x67\x62\x59\xBD\x5E\x70\x3F\xB3\x2D\x22\x8C\xD9\x89\xBE\x3F\xA9\x45\x04\x4C\xB0\x61\x54\x67\x82\x94\x3C\x0D\x07\x06\x0B\x1B\x57\x17\x2D\xD6\x51\x54\xF4\x2E\x0D\x18\xFC\x43\x2A\x4B\xD3\x5A\xC2\x3D\xB4\x14\x32\x69\x5D\x4F\x53\x9A\x5E\x01\x36\xE6\x52\x6B\x42\xBA\x6A\x43\x21\x86\x45\x35\xFF\x2B\x9E\x29\x5B\x7A\x8A\x75\xB9\x6D\x30\x78\x5B\xA3\x94\x9A\x58\xCE\x56\xBD\x5E\x73\x4D\x4F\x79\x5C\xCF\x43\xF4\x41\x72\x43\x3A\x46\xD5\x52\x54\x95\xB6\x14\x45\xA9\x6B\x44\x41\x0D\x01\x06\x02\x00\x1A\x77\x2D\x2D\xAF\x5A\x91\x54\x3B\x45\xB7\x67\xDC\x55\x74\x1D\x23\x67\xE2\x23\x7A\x4C\x3B\x76\x5F\xC2\x36\xB5\x6C\xB2\x92\x5B\x85\xE5\x11\x81\xC7\x36\x5B\x49\xD5\x96\x66\x42\x2E\x76\x3A\x7A\x2D\xDF\x54\x37\x96\x51\x56\x78\x68\x00\x4E\xD6\x2E\x6D\x42\x04\x30\x5B\x79\x5E\x7E\x35\xDD\x7A\x2B\x64\x52\x14\x5A\x9A\xA9\x01\x5F\x89\x4C\x3C\x45\xE4\x5E\x6C\x90\xDC\x55\x5B\x69\x2D\x8E\x54\x35\x00\x1A\x00\x71\x59\xB1\x5F\xF2\x27\x7C\x76\x15\xD7\x7B\x16\x8C\xC6\x5C\xBA\x46\xF1\x50\xDD\x54\xD5\x3A\x89\x06\x55\x94\x5B\xCE\x95\x78\x7F\x73\x9C\xA4\x55\x01\x37\x00\x7E\x01\x27\x02\xDC\x97\x7A\x5A\xD4\x50\x59\x9F\xF6\x13\x02\xC0\x8F\xE0\x64\x74\x45\xE1\x94\x45\x48\x8A\x22\x58\x96\x7C\x3C\x97\x6D\x4C\x99\x47\x73\x70\x70\x9E\x88\x22\x5C\x9A\xA9\x43\x97\x9D\x5C\xCE\x96\x6F\x5E\x19\x17\xB6\x8E\x50\x76\x00\x04\x43\x86\x43\x9F\x95\x9F\x51\x68\x9B\x42\x03\x5A\x97\xDC\x3E\x2F\x4D\x97\x40\x5F\xD6\x93\xD0\x5A\xE6\x5C\x6A\x61\x2F\xE6\x5A\x6F\x5C\xF2\x96\x18\x32\xCE\x57\x1D\x4A\x5D\xB6\x05\xF9\x02\x5F\x80\xAC\x97\x9F\x59\xAF\x5E\xB4\x83\x5F\x90\x2D\xDD\x96\x70\x5A\xFA\x96\xF8\x91\x7D\x97\xBF\x9F\xC1\x25\x2D\xBC\x5B\xB1\x97\xE9\x95\x3A\x15\x7A\x9C\xA4\x56\x01\x36\x00\x49\x7B\x03\x03\xE5\x78\x0E\x88\xD9\x5A\x43\x83\xFC\x1F\x05\xD6\x84\x5A\x58\x20\x8A\x75\x6B\xE4\x68\xBA\x91\xFC\x38\xF7\x46\x88\x71\x89\xFD\x7A\x1A\x4E\xBB\x7F\xDF\x7A\x58\x94\x2F\xB2\x97\xEE\x2D\x1B\x00\x0C\x06\x13\x0A\xEF\x04\x61\xB0\x2D\xEB\x7B\x70\x83\xF6\x7B\xAC\x5D\x2E\x8E\xAF\x92\xAE\x55\x30\xF6\x96\x7B\x82\x4A\x83\x05\x9E\x44\x5B\xDD\x68\x22\x82\xD7\x1C\x98\x26\x4E\x1C\x7C\x0A\x40\x85\x9A\x5C\x6A\x61\x8D\xBB\x0F\x98\x54\x8A\x17\x9A\x7D\x7D\x96\x46\xED\x5D\x51\x7B\xD6\x59\x7B\x34\x99\xBF\x80\xE5\x12\x45\x57\xF7\x2C\x51\x5D\x30\x8F\x96\x32\x88\xB2\x4D\x0C\x03\x2D\x82\x10\x17\x21\xBC\x2D\x8C\x98\xEC\x7A\x66\x5F\x49\x73\x2E\x8E\x00\x80\x62\xAD\x30\xAB\x40\x12\x98\x39\x44\x05\x9B\x88\x96\xC1\x9D\x0B\x89\x31\xC7\x88\x4B\x99\x24\x89\xE6\x3B\x89\x8F\xC4\x81\x55\x64\x89\x34\x97\x77\x55\x1B\x03\x0C\x04\x18\x0A\xEF\x14\x63\xA7\x30\xCD\x7B\x59\x99\xE7\x7B\x0A\x9C\x8B\x95\x02\x7C\xC9\x77\xA8\x53\x5D\x31\x98\xE0\x96\xFB\x90\xFB\x47\xC4\x93\x61\x81\xA9\x3B\x8C\x1A\x98\x4B\x5B\x1A\x9F\x48\x50\x5E\x66\xAE\x63\xBB\x48\x6B\xC9\x5D\x14\x9A\x16\x9E\x1E\x3C\x43\x8D\xB5\x49\x2C\xF2\x7B\x38\x55\x40\x9A\x8D\x4B\x90\x9A\xA3\x57\xAE\x64\x5A\x07\x99\x35\x99\x34\x98\x17\x62\x89\x8C\xC8\x9F\xEF\x51\x2A\xD0\x09\x7A\x36\x63\x2E\xE7\x6B\xE9\x77\xA9\x93\x15\x48\xFF\x34\x59\x48\x7F\x32\x03\x9A\x82\x4F\x8D\x7E\x78\x39\xBA\x22\xF6\x61\x72\x84\xFE\x70\x49\x64\xA1\x70\x26\x97\x13\xA6\x0C\xD8\x4C\x65\x70\x18\x82\x37\x68\x68\x34\x03\x08\x2C\xAA\x8E\x21\x85\x11\x71\x51\x85\x21\x82\x1B\x83\xF9\x7C\xC1\x55\xFE\x19\x93\x8E\x84\xCB\x8B\x10\x85\x08\x75\x04\x9A\x2C\xA4\x4D\x1C\x8B\x6F\x95\xCF\x88\xAE\x87\x51\x7A\x2B\x88\x12\xA5\x0B\xA9\x75\x39\x65\x86\x84\x44\x29\x55\x56\x10\x04\x67\xBA\xFE\x67\x64\x83\x63\x65\x9A\xFC\x35\x60\x71\x59\x9F\xC4\x49\xEC\x6F\x24\xA2\x71\x26\x67\x93\x67\x11\x87\xB7\x97\xE0\x02\x11\xF4\x96\x76\x69\x55\x73\x25\x81\xF0\x0E\xFF\x71\xFB\x52\x09\x9A\x71\xEA\x99\x6C\x36\x91\x63\x07\x78\xB0\x67\x92\x3F\x94\x71\x99\x0D\x76\xA9\x0C\x3D\x9A\x62\x76\x90\x2E\x5E\xB5\x33\x93\x76\xFA\x98\xAC\x0C\xBD\x77\xEE\x06\xAF\x7F\x66\x96\x04\x79\x75\x04\x86\x84\x85\x0E\x07\x49\x80\x00\x11\x12\x90\x15\xD3\x84\xED\x63\x7E\x95\x81\x57\x62\x31\x1F\x7C\x98\x7A\xFD\x59\x8A\x11\x03\xAD\x8B\xDF\x7A\x19\x70\x56\x9B\x8B\x2D\xFD\x39\x31\x66\x85\x6E\x98\x1E\x85\x61\x8E\x2B\x9F\xFE\x77\x00\x0A\x86\x01\x02\x86\x87\x3F\x9B\x84\x28\x2C\x8B\x33\x52\x0C\xCD\x27\xF5\x85\x8A\x87\xB3\x86\xF5", -"\x80\x2F\x85\xA1\x1A\x0C\xE8\x80\x1C\x87\x3F\x73\xBD\x81\x5B\x8C\xB8\x59\x78\x7B\x0B\xA4\x04\x24\x9B\x6F\x84\x9E\x82\x5E\x78\x32\x8C\x8A\x5C\x04\x96\x74\x04\x67\xEF\x7D\x0C\x06\x52\x72\x10\x18\xD4\x64\xFF\x24\x27\x53\x73\x93\x72\x17\x9D\x4C\x90\xD5\x8D\x8E\x65\x0C\x86\x51\xA3\x74\xFA\x72\xA6\x89\xF5\x4B\xD9\x72\x1A\x99\xD5\x37\x00\x55\x87\xAE\x69\xB0\x8A\xA9\x09\x35\x85\xED\x5B\x0D\xA8\x7B\x5D\x87\x13\x3B\xC0\x6D\x6A\x3A\x61\x2D\xBF\x19\xC7\x06\x6B\xC5\x4F\xEC\x2F\x53\x4D\xDC\x66\x03\x1E\x50\xB1\x8A\x16\x68\x06\x7B\x0A\x72\xD7\x86\x54\x89\x9F\x83\xA4\x0B\xF4\x4F\x99\x77\x4E\x00\x39\x08\x6D\xE0\x7F\x5A\x0E\x96\x59\xF0\x41\x4B\xD2\x65\x0B\x78\x23\x3F\x6D\x9C\xD7\x01\x2F\x79\xD1\x4A\x4B\xBD\x96\x73\x5F\x9D\x66\x9E\x95\xC4\x81\x97\x4D\xE9\x02\x46\x17\x78\x90\x4B\x05\x78\xB4\x99\xBC\x8C\x2E\x7F\x2D\xEA\x5D\xA3\x30\x87\x98\x43\x9C\x2F\x80\xB0\x89\x6D\x97\xF2\x13\x82\xB4\x7B\xD2\x77\x6D\x7F\x93\x73\x11\x82\xE5\x41\x03\xBE\x7B\x47\x64\xE0\x78\xFE\x30\x95\x76\x67\x45\x56\x8C\xBA\x3B\x95\x8C\x02\x59\x95\xB4\x96\x84\x68\xAB\x91\x22\x8D\xD3\x4B\x9B\x9A\x75\x5E\x97\xA3\x2E\xBC\x40\xAC\x8B\xBB\x18\x2B\x8F\x49\xC4\x95\x56\x94\x74\x9C\x0E\x04\x0A\x4A\x56\x88\x37\xB7\x7F\x17\x82\x85\x64\xB4\x97\xB8\x97\xAC\x86\xBD\x56\xB4\x6A\x95\x32\x07\x61\x2E\x46\x58\x04\x85\x20\x60\x47\xA0\xB4\x16\x79\x6E\x99\x44\x54\x1C\x9E\xDD\x20\x78\x5D\x59\xAF\x0E\x5A\x97\xE4\x34\x29\x5C\x7A\x9C\x34\x46\x9B\x75\x0C\x70\x30\xD7\x5C\x53\x39\x2C\x5F\xB2\x82\xA4\x92\xF2\x5F\xD3\x66\xB4\x33\x43\x2A\x97\xBC\x5E\x7E\x9F\x5B\x96\x91\x7D\x6F\xA6\x86\x32\x9B\x00\x9D\xED\x2D\x95\x5A\xCB\x5E\x1A\x43\x6B\x85\x38\xBF\x80\x07\x9D\x86\x96\x07\x9B\x80\x90\xC2\x82\xB4\x35\x00\x36\x00\xF6\x9A\x13\x0C\x7E\x9F\xE5\x33\xE6\x48\x27\x4C\x87\x5B\x30\xF5\x96\x45\x99\xD2\x91\xA7\x56\xBE\x86\x5A\xA7\xB9\x7C\x97\x63\x97\xF5\x95\xEF\x2B\xCE\x5E\x43\x8B\xA2\x17\x2D\xA6\x30\xDD\x43\x17\x9F\x9E\x59\xAC\x5F\xD4\x42\xC7\x20\x2D\xE8\x43\xE6\x04\xAE\x96\xFF\x95\xD0\x5D\x1E\x48\x5C\xBC\x89\x0D\x58\x8B\x96\x1B\x42\x0D\x00\x06\x06\x2D\x61\x08\x06\x97\x57\x98\x7F\x57\x72\x5F\xDC\x93\xB4\x90\xD2\x71\xA1\x35\x38\xFF\x6E\xB3\x3E\x2F\x56\xB0\x50\x8A\x93\xDF\x93\x21\xB1\x00\x0E\x97\x01\x02\xC8\x96\xC5\x3A\x72\x94\xE0\x8A\xFB\x0B\xBE\x56\x9C\xB7\x5A\x3B\x46\xE0\x5A\x73\x92\xDD\x46\x72\x92\xAC\x48\x9C\x39\x96\xD0\x3E\x0D\x02\x06\x03\xBA\x8B\x6F\x66\x2E\x93\x97\x76\x83\xE5\x58\x9A\x9D\x6A\x3C\xBA\x9C\xE3\x10\xBE\x6D\x9C\x5B\x9D\xF8\x9A\x65\x59\xC9\x9F\x06\x56\x01\x35\x00\x73\x2D\x06\x02\x44\x9D\x6C\x58\x79\x97\x2A\x93\x2B\x50\x02\xB0\x9B\x59\x55\x2B\x9C\xF4\x93\x76\x03\xF2\x30\x5D\xA7\xB6\x70\x9C\x1B\x96\xB4\x80\x0E\x06\x84\x96\x10\x1C\x74\xAB\x2C\xD8\x98\x92\x98\x3D\x9B\x0F\x9E\x8F\x9C\x81\x34\xEE\x57\x39\xD5\x5D\xC1\x97\x3C\x9E\x27\x98\xEE\x30\xCA\x8A\x62\x9A\x2E\x4C\x98\x78\x3F\xE2\x6B\xA7\x9F\x6F\x5D\xC0\x98\x9C\x56\x38\x96\x47\x61\x99\xC7\x3C\x6E\x69\x4A\x9A\xEB\x8B\x75\xBE\xBA\x7E\x16\xA1\x99\x57\x9E\xB0\x5D\x89\x94\xEC\x4D\x63\x89\x2E\xEF\x98\x84\x9D\x44\x43\x0D\x02\x06\x06\xC7\x86\x08\x0D\x3B\xB3\x9D\xE7\x55\x5A\x9E\x7B\x7D\x92\x96\x71\x77\x75\xB7\x05\x9E\x54\xA7\x9D\x5D\x9C\x19\x9F\x47\x55\x44\x87\x63\x99\x30\xB6\x98\xDC\x6B\x45\x98\xB8\x5D\x83\x9E\xC8\x80\x79\x63\x5D\x00\x55\xB1\x5C\x51\x9F\x16\x9C\xDA\x9D\xC5\x84\x75\xA4\x61\x39\x9D\x8A\x5E\xAA\x6E\x63\x4A\x93\x94\x44\x9D\xAD\x5E\x3B\xB3\x90\xDD\x5C\xCC\x3E\x77\x6A\xEF\x38\x26\x94\x65\x94\x05\x33\x99\xC8\x19\xA4\x7F\x0C\x03\x01\x98\xCB\x97\x2A\xB5\xDF\x6E\x9D\x67\x35\x94\x6E\x54\x9F\x97\x91\xCB\x82\x66\x94\xF8\x40\x36\x36\x00\x63\x9B\x5F\x62\x54\x8E\x3A\x4D\x2C\x83\x71\x3A\x70\x92\x8A\xBE\x72\x68\x5F\xAB\x8C\x3B\x52\x66\xAF\x0A\x98\x8B\x90\x62\x6B\x98\xAD\x80\x4B\x90\xB7\x20\x2D\x9C\x33\x82\x86\xDE\x99\x83\x84\x63\x05\xA6\x9A\x90\x72\x01\x3F\x01\x80\x00\x81\x81\x8F\x98\x40\x9A\xB1\x92\xD0\x9E\xC4\x45\x34\xFC\x71\x6F\x65\x7F\x72\x3C\x9D\x14\x7B\xD0\x9F\x5D\xA7\x86\x0F\x9A\xF9\x98\x09\x44\x9F\x67\x62\x7C\x1D\x73\x69\x82\x02\xAC\x9E\x00\x81\x19\x00\x47\x9E\xA3\x96\xD1\x91\x2A\x94\x09\xAC\x98\xE2\x5E\xB8\x2A\x01\x69\xEC\x77\x55\x83\xC6\x5C\x09\xAA\x9A\x5D\x8A\x96\x98\xEF\x44\x19\x74\x26\x84\xFC\x50\xE3\x49\x75\x46\x9E\xA8\x88\xD2\x9C\xEA\x70\x63\x38\x69", -"\x80\x00\x3A\x9A\x32\x9E\x9E\x98\xBA\x86\xA7\x9C\x87\x69\x03\x8A\x35\xBA\x67\x9C\x8F\x8B\x86\x51\x9F\x0C\x83\x2F\x80\x6A\x94\x0C\xA9\x4D\xD3\x84\x76\x75\x7B\x73\x64\x80\xAA\x7C\x78\xAE\xDC\x74\x80\x33\x64\xAB\x99\x4E\x60\xAB\x90\x25\x5F\x15\x9C\x35\x81\x02\x5E\x9B\x44\x65\x58\x98\xCF\x95\x22\x5F\xD4\x5C\x5B\x7E\x9E\xDF\x58\xAE\x24\xA9\x73\x36\x6F\x8D\x93\x6B\xB0\x04\x1C\x7B\x98\x18\x88\x29\x5C\x9F\x6A\x86\x97\x15\x6B\xBA\x6A\x5A\x82\x78\x9B\x35\x4F\x5E\x9E\x5A\x91\x16\x83\x1B\x86\xD6\x2A\x79\x8C\x12\x83\x46\x3F\x7C\x6D\x78\xBE\x37\x01\x06\x36\xCB\x2D\x88\x9B\x74\x98\xCD\x9E\x69\x33\x7D\x5D\x5D\x8F\x36\xBE\x80\x35\x63\xED\x4E\xC0\x63\x77\x77\xC1\x79\x6C\x97\x36\xE8\x38\x35\x01\x26\x9C\x00\x00\x5B\x6B\xDA\x9B\x96\x61\x36\xD3\x9C\x8A\x35\xBD\x6E\xA4\x9F\xB4\x93\x2E\x7F\x7D\xB5\x17\x1B\x9C\xD0\x03\x52\x40\x0D\x06\xA6\x3D\xD0\x24\x5D\x9F\x86\x0B\x9C\xD1\x35\x8B\x70\x88\x49\xC2\x9C\x1A\x5B\xD6\x18\x0C\xE5\x9C\x5D\x5D\xA4\x2C\x82\x9B\xC6\x01\xD8\x81\xBF\x36\xC8\x50\x4A\xB2\x81\x86\x09\x78\x5E\x82\x60\xDF\x87\x76\xB2\x37\xC9\x9D\xA0\x97\x1A\x03\x61\x79\xBD\x79\x1F\x58\x7E\xAA\x86\x01\x9C\x8F\x42\x2B\x5F\x7E\x9A\x5A\x39\xFF\x94\x70\x8B\x63\x27\x9D\x01\x47\x78\x6F\xF8\x9D\x5F\x5A\xDD\x84\x6F\x97\x08\x40\x7E\xAC\x23\xED\x98\x77\x5A\x68\x29\xB2\x16\x99\x35\xD5\x5B\x9B\x3E\x00\xE3\x9B\xAB\x93\x59\x9B\xFC\x6A\x80\x82\x4D\x7B\x16\x45\x27\x04\xA2\x01\xA7\xAD\x4B\xAD\x8C\x70\xAC\x13\x5F\x4E\xEB\x9B\x98\x27\x05\xA0\xA0\x0E\x00\xAA\xB7\x7B\x3F\xBE\x00\x1D\xA1\x68\x36\xAF\x2A\xA3\x52\x34\x38\x49\x19\x40\xA0\x5A\xEE\x7D\x6F\x04\x33\x7A\x20\x0E\xCC\x78\x3C\x68\xB0\x42\x26\x40\x7F\x12\xA3\xC0\x94\xDF\x31\x03\xB0\x26\x1A\x02\xBE\x61\x98\x4E\xA1\x24\x4C\x39\x03\xAD\x79\x55\x5F\x48\x40\xC5\x35\x37\xA1\x87\x03\x4F\x05\x01\xA7\x33\x25\x57\x75\xAF\x29\x99\x28\x3F\x11\xA1\x08\x81\x03\xAA\x91\x39\x64\x70\x00\x1F\x3F\x27\x58\x11\xA2\x12\xA4\x0E\x05\x33\x2D\x82\xB1\x83\x56\xA0\xA7\x99\xA0\x45\xD0\x23\x0B\xA4\x34\x20\x01\x2C\xB0\x09\x6C\x9F\x3E\x12\x6E\x16\xA6\x28\x0C\x05\xAB\x41\x3A\x40\xF9\x6C\x48\x27\x00\x7D\x0C\x01\x0C\xA1\x55\x22\x9A\x25\x41\x85\x95\x71\xA0\xA8\x8E\x0C\x07\xF3\x3D\xE4\x6B\x83\xB4\x4C\x6E\xA0\x5E\xA1\x2F\x6D\x1E\xA7\x1F\x9D\x65\x61\x83\xAE\xD8\x76\xA0\x56\x12\x2A\xA2\x92\x6B\x10\xA9\x8D\x8D\xF6\x5F\x7E\x6F\x83\x7E\xA1\x36\xA1\xBF\x17\x0D\xAF\xEB\x6C\x84\x81\x25\x8C\x7D\x61\xA1\x2A\x7C\x22\xA1\x16\x6A\x08\xAD\xF6\x56\x42\xCA\x90\x83\x89\xCF\x3E\x28\x89\x12\xAD\x05\xA5\x25\xBD\x07\x80\x89\x61\xA1\xFB\x83\x26\xA3\x95\x7D\x09\xA7\x85\xA9\x12\x9F\x3F\x4C\x8C\x52\xA0\x20\xA7\xC9\x8F\x09\xA6\x46\xBD\x14\xE1\xA0\xAC\x89\x55\xA1\xEA\x98\x00\x0D\x09\xB8\x01\x6B\x19\x9F\x3F\x4A\x8E\x59\xA3\x24\xA1\x10\xA6\x73\x95\x85\x8A\x27\xB6\x00\x61\xA1\x2A\x8E\x2E\xA1\x33\x11\x10\x1D\x84\x9A\x19\xE8\x8E\x9F\x3F\x0C\x92\x30\xA4\x8B\x14\x09\xB1\x3A\x86\x43\xB6\x43\x37\x01\x30\xA0\xD5\x8B\x19\xA3\x4D\x4D\x86\xA6\x41\xEF\x8E\xD7\xA1\x1F\x44\x0E\x07\xF3\x3D\x8D\x93\x86\x9E\x42\x55\xA1\x28\x91\x4C\x58\x0E\x01\x0C\xA3\x82\x9C\x86\xB4\x9F\x3C\xA1\xDF\xA0\x10\x91\x38\xA1\x2B\x9F\xF9\x27\x4B\xA6\x43\xB4\x63\xD5\xA1\x75\x93\x53\x91\x0C\xA6\x8E\x8E\x87\x86\x07\x1D\xA1\xEB\x90\x2E\x95\xF3\x3C\x40\x99\x04\xAC\x83\x8E\x20\x55\xA1\x77\x92\x2E\x97\x4C\x81\x2E\x92\x34\x3D\x82\x85\x2A\xB7\x41\x31\x95\x81\xA2\x1A\xA5\xA5\x12\x34\x27\x88\x84\x43\x9A\x94\x3E\x01\x18\x97\x42\xA4\x46\x9D\x10\xA0\x84\x85\x2A\x85\x59\x61\xA0\x16\x0C\x29\x42\x95\x91\x09\xAE\x81\x97\x44\xFB\x45\x21\xA3\x19\x0E\xDD\x36\xD8\x22\x34\x2D\x60\x1D\x42\xA8\xA2\xE6\x47\x58\x9A\xC1\x65\x0C\x7B\x00\xBB\x82\xA6\x44\xCC\x7E\x06\x9F\x7E\x9D\xC0\x9D\x0C\x06\xB7\x31\x65\xA3\x41\xEC\xA0\x2E\xA3\x6F\xA1\x2C\x99\x23\xAA\x0D\x6F\x0B\x68\x5B\x03\x70\x91\xA0\x8B\xA2\x01\x75\xA2\x4C\x50\x4F\x0B\x47\x72\x0F\x4A\x1D\xA3\x61\xA1\xCE\x21\xA4\x48\x17\x7C\xB1\x2A\xFE\x11\xA1\x40\x1A\x1D\xA2\xD1\x30\x2F\x66\xB9\x20\xDA\x02\x4D\x05\x1B\x19\xA0\xA3\x34\x52\x8C\xEE\x0B\xF6\x03\x08\x2B\x3D\x79\x80\x54\x7F\x82\xA3\x4F\x03\x08\xAE\x05\xAD\x18\xBE\x00\x63\xA2\x82\x0E\x04\xA2\x38\x9A\x68\x20\xEF\x24\x82\x92\x09\xC8\x60\xD6\x05\xEF\x66\xF1\x78\x61\x8A\x16\xB5\x3B\x24\x40\xDE\xA0\x56\x03\x7B\x60\x5E\xA2\xA5\x15\x2A\x41\x8C\x90\xC5\x2D\xA0", -"\x47\x07\x0C\xA2\x61\xA6\x22\x6B\x8E\x6E\xC7\x5D\x37\xEE\x71\x35\xA2\x36\xA3\x4D\xA4\x1E\x73\x01\x78\x29\x4D\x46\xD0\x7F\x76\x36\xE6\x7D\x4B\xA2\x9C\x0A\x18\xAE\xC7\x7E\x00\x7F\x8C\x2B\x9F\x2E\x3A\xF5\x79\x12\xA1\x14\xB8\x07\x96\xC4\x20\xA3\x16\x02\x74\x2D\x3C\x62\x68\x2A\xDF\x19\x80\xB7\xC3\x66\x86\x76\x13\x61\x2D\xDA\x84\x34\xAC\x19\xBE\x82\x86\xD6\x1F\xA3\x60\x62\xC3\x68\xBA\x2A\x2A\x8C\x1A\xAD\x28\x19\x40\xB7\xA3\xDB\x79\x76\x7B\xB0\x2E\x65\x8D\x17\xA5\x8D\xB4\x9E\x0B\x68\xB8\xA3\x95\x87\x02\x68\xDD\x2E\x32\x9D\x8D\x81\x44\x70\xA1\xC7\xA3\x76\x7B\x5B\xA0\xDA\x6F\x86\x45\x8B\x82\x04\x67\xA2\xD3\x6D\xBE\xA0\x5B\xA1\x17\x6A\xC0\x73\x8E\xAF\x0D\xEF\x50\x08\xA1\x69\x6C\x5D\xA6\x04\x19\x01\xB8\xB6\x4B\xDC\x7A\x05\xDD\x7C\x74\x59\x5F\xA5\x35\xAE\x05\xA0\xDD\x27\x47\xA4\x04\x2C\x26\xCD\x36\xD0\x21\xFE\x15\x1E\xA4\x0A\x65\x3F\xEC\x09\xE1\x62\xF4\x9D\x24\xA4\x3D\xAB\xFE\x96\x2A\x77\x47\xB2\x06\x2C\x26\xF4\x37\x7C\xA1\x58\x34\x04\xB6\xA0\x57\xCA\x29\xA3\xB9\x3E\xB5\x49\x5F\xA2\x29\xAD\x79\x2D\xE0\x07\x48\xF4\x00\x33\x82\xB5\x49\x54\xA4\x1A\xA1\x0F\xAD\xE0\x08\xEE\x75\x0A\x7A\x37\x58\x83\x7E\xA6\x37\xAE\x05\xBF\xE1\x17\x48\x98\x0B\x2C\x27\x1C\x3B\x80\xA2\xF9\x39\x01\xBF\xE1\x3C\x3E\xCE\x9F\x62\x02\x52\x0C\x97\x0F\x49\x76\x07\x71\x8C\xBF\x04\x33\x7F\x13\x26\x1D\xA3\x67\x9F\x44\xA2\x78\x60\x85\x7B\xFC\x40\x77\x9A\x9A\xA1\x27\x0F\xA2\xEE\x1F\x0D\xBF\x6C\x9C\x00\xBB\x0F\x7A\xA3\x0F\x81\x24\xA0\x03\xA0\x18\xA2\x23\x7F\x48\xF3\x0B\x25\x78\x47\x50\x62\xA3\x2B\x1D\x19\xB5\x42\x66\x00\xC3\x10\xA4\x40\x15\x81\x5F\xA3\x32\xA7\xEE\x07\x01\x96\x46\xE6\x47\x6E\x74\xBB\x36\x0A\x83\x33\xA0\xC3\x19\x80\xAE\x00\xA2\x78\xD4\x68\xE0\x2C\x5C\x6B\x84\x7E\x22\xA8\x56\x9D\x49\x80\xA3\x2E\x4C\x30\xA6\x0E\x78\xF8\x28\x6E\x26\xE1\x4E\x47\x81\x25\x8A\xA2\x17\x4C\x0B\x7D\x23\x0D\x26\xAC\xA4\x4B\x48\x91\x10\x3A\xA1\x51\x6B\x9C\xA3\x0E\x09\x2E\x7D\x08\x3F\x44\xFF\xA0\x52\xA3\x8C\x50\x0A\xA7\xB7\x84\x5D\x94\x03\x1F\x9D\x7A\x90\xE0\x9B\x21\xA7\x5F\xA1\xF0\x85\x28\xA3\x94\xA5\x16\xC7\x8D\xA7\x93\x42\xA7\x9F\xA4\x0E\x06\x12\xAB\x4D\xBF\x21\x81\x91\x38\x53\x61\x2E\xDF\x8C\x36\xA7\x26\xAC\x94\xBE\x1E\xC9\xA3\x1C\x82\x8A\x68\xB1\x35\x70\x8F\x26\xB8\x89\x10\x47\x8A\x87\xA0\xA4\x9A\x84\x70\x8A\x53\xA8\x9A\x85\x8E\xB5\x46\x9E\xA5\xC7\x8A\x4C\xA4\x21\x93\x54\xA2\x3A\x85\x95\x9E\x45\x27\xA5\x69\x53\x79\xA0\xA5\x03\xE7\x2A\x91\x97\x87\x9F\x23\xEF\xA0\x2F\x52\xA2\x79\x1B\x01\x52\x99\x92\x5E\x87\xBC\x48\xBC\x86\x11\xA0\xEF\x7D\xF6\x83\x69\x08\x00\xA7\x98\x7D\x45\xCC\xA0\xF8\x81\x65\xA4\x93\x4B\x1F\x80\x10\x9A\x3E\x07\xFD\x2B\x66\x93\xA4\x22\xA6\x4B\x6A\x79\x8F\xCC\x32\x07\xBE\x45\xF8\x80\x79\x53\xBE\xA3\xD5\x12\x07\xAF\x97\x5E\x96\x94\x4B\xFE\x36\x15\xA2\x3C\xA6\x50\xA1\x1F\x8E\xC8\x6F\x2C\x3A\x6D\x11\x79\xEB\xA2\x0E\xA7\x90\x29\xE1\x4D\x2E\xA1\x2D\x24\x73\x09\x54\x93\xA4\xFA\xA3\x37\xA1\xE1\x42\x11\x91\x5F\x08\x40\x96\x82\x91\xA0\x68\xA5\x46\x80\x94\x79\x2C\xA6\x04\x79\x9B\x6F\xA5\xD7\x61\x6C\xA7\x5F\xA3\x60\xAD\xDB\x80\xEC\x5D\xCF\x2E\x3A\x2A\xA5\x95\x39\x61\x7D\x2F\xA0\x23\xBC\x91\xB5\xD5\x58\x79\x3E\x00\x87\xA6\x54\x6B\xE7\x47\x23\xAF\xE6\x41\xF6\x3F\x4E\x3A\xA4\x91\x77\xB1\xA6\x63\xAF\x30\xA7\x3A\x7E\x00\x3B\xA4\x9D\x2B\x94\x76\x27\x83\x40\x12\xFC\x09\x08\x2D\x4C\xB5\x63\x12\x88\x17\x88\x29\x85\x2F\xA6\x0A\x83\x08\x26\x02\xE4\xA5\x31\xA6\xC9\x69\xE9\x68\x65\xA0\x33\xBD\xD9\x5A\xED\x68\x00\x11\xA7\x94\xA5\xCE\xA7\xF2\x6C\xCD\x13\x94\xB3\x40\x81\x02\xBF\x76\xD7\xA3\xD0\xA6\x19\x6C\x33\xA5\x20\xAB\x4C\x95\x35\x27\x03\x97\xA6\xD3\xA3\x14\x85\x34\xB4\x99\xA0\xDE\x16\xA6\xA3\x6F\x16\x8A\xCE\xA3\x66\x7D\x34\xA5\xBF\x51\x04\x41\xA6\x29\x26\xAF\xA4\x1A\x06\x68\xA7\x12\x09\x9A\x9F\x43\xE2\xA6\x8E\xA5\x3F\x66\x05\x0F\xEB\x48\xF0\x6A\x94\x93\x41\xDE\xA0\xB0\x6E\xF7\x85\xC4\x16\xD7\x2A\x7A\x6B\x92\xAD\x24\x5E\xA4\x0C\x7F\x3E\xA7\x72\x1E\x27\x0F\x3D\x71\xAB\x7D\x45\xC4\xA4\xEF\x81\xF4\x53\x33\x3A\x6F\xA1\x69\x05\xE1\x71\xD5\x76\xA6\xA9\x5B\x38\xA6\x0A\x8C\xC9\x45\x41\x88\xFA\x02\x1C\x47\xA6\x00\x00\x67\x78\xF2\x6D\x2F\xA9\x03\xBE\x82\x8E\xDF\x0D\xA7\x6F\x75\xC4\x09\xD7\xA2\x6B\xA6\xCB\x42\x82\x83\x1F\x19\xA0\xCE\x6E\x2D\x49\xB9\x10\x56\x9D\x34\xA3\x9D\x8B\x2B\xE5\xA4\x88\x12\x1D\xA2", -"\xE9\xA7\xBB\x9A\x42\x62\x9D\xBE\x0D\x30\x95\xC3\x2D\xD5\xA7\xB1\x93\x52\xAC\x04\xB9\x99\x32\x4E\xE1\x47\xAE\xA7\xB9\x04\xAC\x90\xDD\x27\x3B\xBD\x03\xB5\x25\x86\x02\xBF\xA6\xDB\xA7\xEB\xA3\x59\x9F\x7E\x8C\x8E\x76\xFC\x64\x15\x7E\x06\xFF\x04\xAC\x91\x29\x3D\x3B\xBA\xE8\x5E\x79\x0F\x7E\xE5\x15\xCC\x07\x6F\x04\x73\x0E\x39\x0B\x56\x80\x01\x39\xA7\x68\x07\x65\x97\xD7\x4D\x79\xAE\xB7\x3E\xBC\x48\x26\x43\x2C\xDC\xA7\x8F\x91\xEA\x4D\x5C\x15\x37\x07\xE4\x24\x4F\x8A\x03\x69\x38\x5C\x03\x49\x02\x7D\xAF\x64\x27\x9F\x96\x06\x0F\x2B\xDC\xA6\xE7\x2F\xB2\x90\x78\x91\xFB\x03\x9E\xAC\x4E\xF2\xA7\xAC\xA6\x2E\x2F\xF1\xA7\x72\x0B\xAD\x0A\x0C\x33\x4E\x6E\xA7\x6D\x00\xF8\xA6\xFD\xA7\x58\x98\x3F\xA7\x56\xBD\x90\x75\xA7\xBA\xA7\x65\x95\x01\xAF\xFD\x4B\x3F\xBA\x56\x0A\x0B\x10\x11\x60\x62\x00\xAA\xAF\x28\x80\xA9\x9A\x98\x60\x20\x4F\xFE\x06\x75\x06\xF1\xA4\x47\x85\xE5\x70\x39\x06\x9F\xBE\x0D\x6F\x15\x83\x2C\x5D\x03\x49\x02\x84\xAD\x3E\xBF\xA0\x95\x2B\x7E\x3B\x08\x96\x04\xAB\x03\xAA\x16\x98\x7A\x9A\xE4\x2F\x57\x2A\xA8\x74\x06\x16\xA8\xF6\x8C\xAE\x75\x13\x70\x9E\xA6\x50\x90\x07\xFF\xA7\x1B\xA8\x1A\x00\x85\xA6\x3F\x30\xA1\xB5\x0D\x55\x8F\xFA\x29\x17\xA8\x00\xAE\xF8\x87\x65\x56\xA1\xB3\x0D\x6F\x15\x82\x38\x0E\xA8\x1A\x06\x83\xA7\x44\xB5\x56\x29\x71\x24\xA8\x06\x02\x28\xAA\xF0\xA5\x89\xA0\x39\x1C\xA1\x97\x5B\x1A\x2A\x43\xA9\x34\x93\x36\x2A\x86\x29\x45\xB3\xA1\xAF\x5C\x45\xA8\xED\x14\x1D\xA9\x0E\xAC\x8A\xAB\x43\xB5\x9D\x29\x50\xDD\xA8\xF0\x69\x2D\xA8\x16\xA8\x83\xA2\x43\xAC\x43\x95\x9D\x46\xA8\x8E\x07\x6A\x15\x12\xAA\x87\xAC\x44\xB1\xA3\x90\x0E\x0C\x39\x82\x3A\x81\x00\x61\x38\x86\xAF\xAE\x16\xA2\x82\x7C\x3E\xA8\x6D\xA8\xB8\x7B\x16\xA9\x85\x28\x46\xB6\xA8\x75\x50\xE1\xA8\x64\xA8\x83\x73\x06\xAA\x87\xA3\x41\xBA\xA1\x95\x50\xA6\x18\x17\xA8\x32\xA9\xC3\x7A\x90\x8F\xF0\x71\xF8\x47\x2B\x0C\x39\x6E\x00\x7D\x1D\x26\xAF\xE2\x7B\x38\x19\xF8\x47\x2B\x24\x7E\x8B\x06\x3A\x4B\xC3\x79\xE4\x77\xF2\x60\xA5\x9F\x0D\x26\x7E\x23\x7F\x27\x42\xCA\x7B\x3F\x44\x48\xBA\xA1\xAF\xFC\x56\x15\x37\x28\x7B\x78\x4B\x86\x5F\x69\x4B\x27\x56\x33\x4E\x0F\x7E\x9E\xA8\x90\x7E\x38\x35\xE3\x7B\xB9\x1F\xF8\x5B\xFC\x32\x6D\x22\x7E\xAA\x54\x5A\x34\x97\xA8\x4A\xA8\xF9\x7F\x60\x2B\xA9\x36\x4C\x3E\xAA\xCB\x7B\xF8\x30\xF3\x71\xA5\xA9\x50\x33\x7E\xAF\x91\x5A\xA8\xB1\x11\x82\xAC\x46\xB6\x0C\x31\x4E\xD5\xA9\x47\x7A\x57\xA5\xA7\xA3\x8A\xAB\x42\xAF\x9F\xB3\x51\xFD\xA7\x96\x02\xDE\xA4\x36\xAB\x52\xAC\x1E\xBC\xA6\xB1\x50\xDE\xA9\xD4\xA8\x32\xAB\x35\xAC\x8C\xA5\x26\xA6\x8E\x8A\x53\xD5\xA8\xDF\xA8\x3B\xA8\x1A\x02\x9C\xAC\x4E\xB6\x95\xA2\x47\x27\xA5\x4A\xA8\x1F\x03\x8F\x87\x58\x16\xB7\x22\x12\x91\x42\xE3\xA5\x96\xA6\x8C\x7F\x3E\xAB\x71\x0C\x63\x32\xF8\x69\x4B\xD2\x17\xA0\xA6\x81\xAA\xC3\x7F\x58\x16\x49\xAB\x1C\x29\x71\x1B\xA9\x06\x02\x88\xAB\xE8\x68\xE3\x7C\xA3\x62\x01\x3C\x52\xA6\xA9\x1E\x7F\x4F\x6F\x27\xA8\x98\xA5\x4A\xBB\xA5\xA5\xFC\x64\x50\x73\x88\x63\xAA\x0F\x32\xB5\x7F\xB8\x2B\xF9\x6D\x52\xE4\xA8\xAF\xA8\x2E\x2E\x2C\xAC\x5F\x6A\x63\x54\xA5\x8D\x50\xB2\x99\xA2\x26\x5C\xA9\x45\xAF\xA2\xAE\x51\xA1\xA5\xA4\xA1\x23\xA9\x1C\xAB\x54\xA9\x50\x2C\x98\xA0\x52\xBD\xA8\x9A\x0B\xCF\x5D\x26\xAB\x77\xA8\xD9\x24\x99\xA0\x4B\xB5\xEB\x50\x53\xB9\x92\x2F\xAB\x81\xAB\xD7\x05\xA1\xAF\x35\x03\xB4\x16\xFC\x06\x02\x4F\xAB\x89\xA9\x27\xAB\xA6\xAB\x51\xBB\xA9\x9F\x54\xDC\x60\x38\xAA\xE5\x41\x30\xA8\xA3\xAD\x4B\xBA\x0E\xA9\x52\xB1\x49\xD1\x69\xA0\xAA\x12\xA9\xA5\xAE\x4C\xB5\x92\xAC\x54\xA8\x5D\xFA\xA7\x49\x2E\x2D\xAD\x00\xA3\x01\xAC\x9D\x8A\x37\x9B\xA0\xB7\x7F\x27\x8A\xB3\x97\xB9\x90\x57\xA3\x04\x92\x37\x86\x29\xD5\x95\xDE\x2F\xB5\x93\x0F\x63\x84\x1A\x56\xA7\x37\x9E\xA0\x32\x06\x6F\x94\xFA\x34\x06\x02\xAE\x85\x0D\x24\x2B\xA7\xA0\xEC\x6D\xA1\x87\xB9\x97\xF1\x29\xE1\x9B\xD9\x7D\x40\xA4\x5F\x18\x88\x77\x94\xF1\x5B\xDE\x33\xB2\x2F\x15\x61\x97\x78\x7D\xEA\x3C\xFB\x1E\xAD\x45\x0B\x24\xFD\x1B\x70\x53\xE2\x69\x12\xDE\x45\x77\x94\x61\x6B\x5F\x92\x2C\x56\x76\x81\x40\xD5\x6C\x9C\x5F\xA4\x30\x66\xAA\xA7\x47\xFC\x50\x16\x5E\x05\xFC\x7D\x3C\x71\xB3\x9A\x9E\x28\xFA\x59\xB4\x02\xF8\x61\x56\x93\xAB\x98\x95\xEA\x75\xA5\x5F\x60\x9D\x43\xAF\x66\xB1\x6A\x3A\x46\x75\x58\xC0\x32\x4E\xA0\x9A\x1A\x26\x97\xD0\x74\x44\xB5\x00\x04\x9E\xBF\x51\x2E\x9B\x01\x8B", -"\xCB\x9E\xAD\xB6\x09\xFE\x85\x65\x6F\x58\x9A\xFF\x6D\x4F\x90\xBC\x6F\x0B\x4E\x94\x6F\x42\x8C\x39\x70\x63\x40\x01\x1C\x63\x15\xB5\x28\x64\xC3\x2A\x66\x72\x42\x88\x5B\x4D\x6E\x5A\x45\x90\x6E\xC1\x66\x95\x25\x47\x31\x00\x89\x9E\x62\x88\x07\x84\x08\x93\x7D\x80\xA8\x7C\x74\xCE\x98\xDC\x9D\xBF\x85\xE3\x91\xA1\x82\xD4\x5F\x3C\xE1\x71\x21\x9E\xCF\x7F\x11\x80\x51\x75\x2B\x9D\x2C\xB7\x0A\x99\x63\x05\x72\xB8\xA2\x1E\x84\x80\x82\xCE\x97\x14\x59\xE1\x06\x02\x07\xAD\x73\x9A\x2E\x77\xE9\x96\x5A\xB0\x8F\x40\xE3\x31\x99\x56\x9E\xCF\x89\x97\x87\xFB\x67\xF6\x7B\x8B\x00\xFE\x5B\x9E\x82\x7F\xAE\x9C\x59\x8F\xEB\x9A\x9C\x7E\x67\xA9\x3D\x8F\x86\x24\x74\x2D\x7B\x4F\x9D\x5B\x77\xF7\x96\x18\xAA\xAF\x71\x85\x85\x71\xA4\x98\x22\x70\x35\x09\xF7\x8F\x02\x7A\x0B\xBD\x55\x72\x81\x85\x9C\x5A\x9C\xAA\x96\x07\x8D\xD0\x4A\x58\xC1\x64\xB2\x9E\x71\x83\x21\x85\x9D\x97\xF3\x8A\xD8\x79\x3C\xF1\x64\x8D\x80\x85\x9A\x56\x48\xE8\x93\xC6\x93\x6D\xB2\x30\x91\x9A\x7D\x64\x27\x73\x60\xA2\xF0\x02\x28\x7C\x91\x5A\xE3\x02\x02\xDC\x71\xC3\x70\x17\x77\x1B\x78\x8E\x63\xDD\x1E\x70\x0F\x65\xBE\x98\x34\x2A\x39\x75\xEC\x05\x29\x6C\x87\x57\x46\x95\xA3\xED\x70\xE8\x7C\x23\x39\x4C\x91\x46\x50\xFE\x79\x94\x3B\x4A\x32\x31\x45\x80\x42\x9C\x28\x8B\x39\x3A\xC0\x32\x56\xC9\x4A\xD0\x7F\x82\x70\x6C\xA5\xAA\x08\xF9\x96\x4B\x06\x6B\x1B\x9F\x83\x4C\xD1\x79\x46\x29\x2B\x87\xD7\x81\xBE\x39\x35\xB4\x9F\x65\x9C\xB1\x87\x5F\x9D\x05\x1A\x48\xB9\x89\x77\xCF\x56\x48\x2E\x87\x91\x37\x95\x8C\xDB\x37\x12\x86\x91\x38\x9E\x73\x78\x2B\xAB\x04\x4D\xBF\x67\xF7\x47\x79\x81\x3E\x6D\xF3\x41\x66\xDB\x7D\xF1\x74\x38\x9F\xF0\x0D\xC0\x66\x59\x22\x6C\x74\x86\x76\x87\x71\x7C\xB0\x8B\x25\x93\x6C\x8D\x49\xBD\x0D\xB7\x5E\x1F\x48\x05\x78\xEA\x9C\x19\xA2\x0B\x70\x4B\x16\x93\x3E\x42\xCF\x3E\x88\x6D\x45\x29\xD5\x65\x42\x55\xB8\x6D\x3B\xE9\x49\x19\x6E\x72\x4A\x1B\x87\xFF\x5D\x71\x76\x0A\x76\xDA\x00\x48\x2F\x61\xE9\x42\xAE\x6E\x00\x60\xCD\x55\xBA\x4A\xF0\x07\x60\x91\x4B\x61\x6C\x0F\x64\x9F\x42\x63\xB1\x68\x70\xDC\x15\xA3\x43\x61\x66\x6E\xCD\x69\x03\x6B\x2A\x7F\x8F\x93\x09\x03\x9B\xE1\x2E\x88\x2B\xEB\x9D\x7D\x31\xFB\x91\xFC\x48\xF4\x20\x6B\x8E\x9B\xE0\x9A\x73\xAE\xA1\x71\x7E\x21\x9A\x4F\x48\x81\x4B\xB7\x7E\x1C\x00\x46\x7F\x64\x37\x58\x5B\xE8\x60\xCA\x1D\x7A\x87\x4E\x91\x79\xC4\x77\x85\x62\xC3\x84\xE9\x77\x51\x36\x68\x76\x05\x55\xAD\x37\xA1\x65\x21\xBF\x13\x06\xAE\xED\x65\x2A\xD6\x80\xCF\x4A\x2F\x82\x75\x7E\x00\x9A\xC1\x75\xF4\x2B\x28\x37\x7B\x5F\x66\xFC\x31\x76\x73\x2C\x7D\xE9\x45\xCB\x10\x50\x51\x68\x67\x28\xE1\x72\xA8\x76\x35\x74\x91\xBC\xD1\x3E\x9F\x35\xA5\x37\x62\xB1\x32\xF8\x94\xFC\x88\x91\xAC\x01\x2C\x9B\x8D\x9C\xDF\x94\x3E\x9D\xC8\xAE\xF3\x95\x77\xB9\xD1\x40\x00\x47\xA4\xD1\x0E\xAC\x96\x11\x56\x5E\x37\xD1\x44\x04\xDE\x68\x24\x81\x8A\xAA\xFF\x71\x98\x6E\xBD\x7B\x44\x49\xDD\x5A\x77\x68\x69\x21\x76\xD1\x6B\x1E\x53\x92\x40\xDF\x7F\x60\x62\x77\xEC\x7C\xF2\x74\x2A\x72\x49\x72\x87\x51\xE0\x4A\xDE\x13\x78\xA6\x61\x29\x75\xC6\xAA\x7E\x7C\x75\x6A\xBC\x75\xEF\x50\xAB\xF7\x77\x2D\x76\x42\x4F\x49\xA6\x8C\x4C\xF8\x2A\x00\xB3\x00\x64\x74\x25\x04\xB7\x3E\x05\x8A\xA6\x7B\xC9\x73\x01\xF7\x77\x6E\x74\x98\x83\xB9\x65\xC2\x4A\x37\xAA\xE4\x22\x6C\x6F\x65\x06\x02\xB4\xAC\x0D\x7C\xBC\x4E\xA4\x6A\xAA\x77\x72\x76\x65\x1E\x4D\xF5\x64\x7E\x64\xA7\x20\x5F\x5C\x9C\x8A\x98\x09\x68\x95\xAD\x60\x3A\x42\x4B\x4F\xAE\xC2\x7E\x93\xB6\x00\x31\x78\xAB\x5E\x0D\x4C\x12\x7A\x7F\x24\x49\x78\xE8\x1C\xF1\x55\x69\xC6\x93\x4D\x69\x14\x7A\x88\x7C\xE6\x24\xE2\x74\x16\x46\x78\x0D\x5C\x1A\x79\x12\x79\x8C\x76\x91\x47\xBC\xA9\xD2\x46\x93\x34\x2E\x31\x7A\x2F\x7D\xE6\xAD\x08\x62\xE0\x51\x5E\x82\xA5\xCF\x68\xCA\xAD\x52\x47\x89\x26\x79\xA6\xA4\x18\x5E\x9F\x52\xD6\x76\x03\x7B\xD3\x6C\x9B\x6A\xDD\x22\x49\xA6\x1F\x80\x61\x88\xA4\xBF\x35\xC4\x97\x24\x0C\x7E\x96\x94\x9A\xEA\x03\x55\xB1\xAE\x9C\x93\xEA\x3A\x56\xA3\x96\x42\x49\x81\x01\x46\x35\xA0\x8C\x00\x01\xE2\x84\xA2\x62\x8A\x9C\x1F\xA4\x22\xB1\x8B\x45\x83\xE7\x5B\x26\x95\xDD\x80\x7E\x91\x35\xBA\x16\x87\x3C\x85\xAD\xAA\x69\x5A\x52\x24\x91\x5C\x96\x01\x25\x24\x82\x02\x27\x93\x5C\xA7\xA8\xAE\x71\x83\x8A\x8E\x44\xBE\x21\xA7\x91\x32\x92\x9D\x3C\xEE\x87\x0C\x91\x6E\x97\x49\xA1\x5F\xA9\x5D\xB0\x91\xF8\x8E\x2C\x97\xF4\xA4\x8B\x94\x23\xAA", -"\x19\xDF\x7A\x6D\x00\xD8\x92\x38\x6F\xF9\x32\x85\x90\x12\x2D\xD6\x4E\x8F\xB8\x92\xDE\x8E\x6E\x92\x8B\xAB\x7F\xBE\xA2\x9D\x21\xFB\x7A\x22\x6B\x1E\x79\xEB\x89\x10\x7B\xE8\x6E\x3E\x9C\x47\x3A\x8F\x8F\x8E\x2B\x91\xFF\xA9\x8D\xAB\x80\xA6\xA4\xAA\x21\xF7\x7A\xC2\x93\xE3\x8C\x71\x91\xF9\x8E\x6E\x91\x35\xB4\x21\x83\x66\x85\x9F\x95\x65\xF2\x85\x5A\xA8\xCC\x23\x84\x67\x04\x4F\x87\xD2\xA4\x9C\x4B\xF6\xAF\x7C\x8C\x6D\x9C\x1B\xBF\x36\x8E\x5B\xD8\x86\x6E\xA6\x96\x4E\x5B\xA9\xC6\x7C\x0A\x22\x6C\x6C\x78\x01\x02\x37\x7B\x5F\x56\x64\x69\x31\x7C\x3D\xAA\xCC\x21\xB0\x76\x79\x55\x1B\xCB\x65\x31\x57\xB8\x64\xDF\x2D\xF2\x34\x59\x91\x78\x30\x8D\xA0\x4A\x63\x5F\x71\x43\x9B\x4D\xCF\x67\x81\xC5\x93\x89\x4C\xE0\x60\x98\x7E\x39\x63\x36\x43\xF3\x3E\x79\x70\x66\xCD\x14\xAC\x4C\x77\x6F\xDF\x5B\x34\x75\xCD\x7A\x3C\xF6\x4D\x23\xB2\xE1\x77\xFB\x86\x3D\x64\x9A\x4F\xAD\x34\x67\x01\x4F\xC2\x67\xD7\x65\x69\x6F\x79\xA5\xC2\xB6\xCD\x4B\x67\xD0\x7A\x2D\xB3\x33\x81\x09\xB7\x3B\x7E\xC2\x91\x9A\x16\x3B\x18\x4E\x25\xB2\xE1\x60\x7B\x6A\x3B\x69\x9C\x64\x61\xDA\x5E\x66\xB0\x2C\xB3\x2D\x79\x6F\x69\xA0\x25\x9B\x6E\xCE\x20\x79\x9B\x66\x39\xB1\xCB\x48\x0C\xB4\x38\x61\x9D\x52\x61\xA3\x67\xA4\x0B\xA3\x64\x10\x02\x63\xA1\xCD\x7D\xA9\x53\xA6\x17\x7B\x2E\x3A\x95\x2B\xFC\x9F\x9A\x70\x89\xA6\x99\xA7\xCF\x6C\x4E\xA7\xAD\x7B\x66\x68\x53\xC1\x84\xE9\x34\x3B\x54\xF6\x15\x81\xD8\x79\xA0\x64\xE1\xA2\xFB\x0B\x0E\x82\x9C\xB1\x94\x41\x6A\xD5\x9F\x48\x6A\x29\xB2\x04\xB0\x53\x65\x90\x36\x97\x0B\xA7\x77\x42\xE3\x93\x7E\x06\x3A\x50\x0F\x47\x21\xB6\xE3\x75\x26\xEF\x52\xB9\x0F\x2B\xB3\x15\xBA\x14\x8E\x4F\x50\x48\x3A\xB1\xDA\x3A\xEC\xA7\x19\x03\x77\xA3\x71\x3C\x9E\x83\x5A\x3F\xA7\x03\x03\xE0\xA4\x0C\xA8\x56\x95\x3C\xBA\xE2\x6F\x54\xE5\x15\xCA\xA6\xEB\xA7\x18\xA9\x7B\xAC\x3A\xA4\x9D\x0F\x4F\x88\xA9\xCA\x04\xE9\xA7\xE6\x06\x28\x05\x3D\xAC\x9D\x91\x5F\x95\x9F\x00\xA9\x3A\xAB\x39\xAF\xA8\x72\x03\x07\x7C\x80\x00\x5E\x9A\x00\xA8\x01\xA9\x02\xAF\x7E\xA9\xFA\x33\x9F\xB5\x7C\x71\xA7\xED\xB1\xFC\xA5\xCD\x7A\xAD\xA8\x3C\xA0\xA7\xAD\x01\x5F\xB1\x1C\x92\xA1\xAA\x38\xB0\x84\xA4\x03\x19\xA3\x81\x04\x7B\xA8\xF9\xA8\x33\xA9\x0F\xAD\x90\xAC\x96\x41\xA2\xB7\x59\x04\xB2\x34\xA9\x37\xA8\x36\xB7\x0C\x0F\xAE\x00\x02\x0A\x55\xD3\x04\x4C\xAB\x29\x07\xDF\x37\xA9\xA3\x10\x11\xAA\x98\x3B\x14\xAA\x0A\x40\x9A\xAA\x55\xAE\xA6\xA8\x55\xBB\xA8\x9A\x55\x9D\xAA\x1B\xB3\x53\xA9\x4F\xAF\xAB\xA9\xF2\x71\x67\x62\x55\xAE\xA9\x44\xAA\x95\xAB\x33\xAB\x96\xA4\x69\xB2\xA6\x9F\x0D\x40\x00\xA5\x20\x94\x24\x85\x7B\x8A\x11\xB6\x0C\x15\x14\x38\x03\x02\x5E\x1E\x28\x46\x77\x9F\x58\x9F\x25\x39\x56\xAD\x50\x07\x1C\xA7\x00\x7D\x1C\x9A\x1C\x2A\x2D\x59\x37\x68\x5D\x29\x7B\x9F\x07\x1D\x54\x02\x50\xB1\x24\x14\xDD\x57\xB7\x7C\x2B\x5C\x18\xDF\x05\x03\x1F\x2A\x03\x29\xBC\x14\x15\x5F\x48\x24\x51\xB2\x27\x03\x56\x00\x55\xB2\x26\x06\x05\xB7\xCA\x90\x13\x07\x1C\xAF\x01\xAD\xB0\x49\x01\xC1\x6E\x95\xA3\x31\x07\x38\x11\x54\x38\xB2\xB2\x03\x8A\x6D\x2C\xBC\x62\x07\x70\x33\x02\x62\xB2\x23\x03\x4D\x7C\x5B\xB3\xC6\x07\xE0\x15\x05\x30\x65\xA2\x02\x80\x89\xB9\xB1\xAE\x07\xC0\x17\x0B\x17\xCB\xBF\x03\x49\x8C\x7A\xB3\xE1\x03\x81\x19\x17\x0E\x97\xAB\x33\x81\x66\xCA\x02\x07\x1D\x5D\x01\x61\xB5\xCD\x67\x03\x07\xCC\xA0\x04\x07\x1C\xBD\x01\xC5\xB1\x80\x78\x07\x0E\x98\xA2\x3F\x40\x00\x3F\x01\x92\xB3\x71\x91\x65\xB7\xC0\x11\x0C\x1E\xCB\x9C\x29\x9B\xB3\x27\x03\x61\x02\x67\xB5\x48\x9E\x5D\x4B\x41\x18\x65\x89\x02\xC5\x00\xBF\xB1\x4A\xA1\x57\x00\x9A\xA9\x08\x07\x03\x2A\xB3\x31\xA3\x32\x71\x33\x1F\xAA\x87\xE0\x09\x06\x23\x66\xF3\x94\xD6\x44\xA1\x0E\xB5\x07\xC0\x1B\x0C\x1E\xCB\xB8\xC5\x0D\x14\x27\x9E\xC6\x03\x81\x1D\x19\x0E\x97\xA2\xB0\xB9\x1F\x3A\xB3\x74\x0F\x03\x1F\x33\x06\x2F\xBB\x64\xAC\x3B\x08\x67\x82\x0F\x07\x1D\x68\x00\x6C\xB4\x96\x57\x53\x4F\xCE\xAC\x1D\x07\x1C\xD3\x00\xBF\xB0\x6A\xA3\x68\x26\x95\x1B\xCD\xA7\x04\x55\x01\xDA\xB3\xDC\xA1\x0B\x12\xE8\x06\x58\x67\x70\x17\x03\x61\xB3\xCA\xA2\xE1\xA0\xC6\x13\x81\x66\x41\x07\x70\x19\x03\x45\xB3\xD4\xA2\x05\x7A\x50\x17\x0D\x57\xE0\x1B\x06\x3E\x65\xEF\xA3\x4A\x03\xE1\x10\x08\x48\x7A\x17\xE0\x1D\x06\x37\x67\x8E\x68\xE3\x2E\xC4\x12\xEE\x99\x62\x17\xE0\x1F\x06\x37\x66\xD4\xAB\x67\x4A\x04\xA7\x56\x12\x55\x63\x72\x07\x70\x21\x03\x7F\xB3\xD1", -"\x80\xCC\x0B\xF9\x10\x09\xB9\x58\x07\x70\x23\x03\x7E\xB2\x16\xAF\x5A\x50\x62\x11\x8F\x67\xE0\x05\x07\x0C\x67\xB2\x74\x43\x10\x98\x3A\xD4\xAC\x3F\xB7\x12\x07\x07\x13\x67\xEC\x76\x6E\x74\x78\x3D\xD8\xAA\xE0\x07\xE0\x09\x07\x28\x67\x9C\x82\xDC\x4A\x9C\x12\xDE\xAC\x44\xB9\x10\x0B\x07\x07\x68\xD2\x0D\x89\x69\xDA\x06\x8C\xB3\xC5\x45\xA1\xA7\x09\x2D\x03\x1F\xB4\x8F\xA5\x42\xA6\x1D\x19\xF7\xA7\x7E\xA7\x70\x2F\x03\x2F\xB4\xAA\xA4\xB9\x78\x50\x1A\x2C\x57\xE0\x11\x07\x08\x69\xD2\xAF\xC0\x8B\x25\xB5\x46\x6F\xC0\x13\x0F\x19\xCC\xAE\x26\xED\x00\x0D\x18\xE4\x8E\x9D\x07\xC0\x15\x0F\x1E\xCB\xA7\x4B\x91\x0D\xBF\x19\x95\x67\x81\x1F\x1E\x0E\x97\xBE\x96\xAD\x32\x3C\xB0\x34\xB4\x83\x01\x3E\x00\x42\xBB\xCA\x62\xEE\x76\x99\x40\x7E\x9A\x66\x16\xB7\x49\x03\x1F\x0E\xA5\xB7\x6D\xBE\x4B\xB9\x0B\x00\x01\x38\xB5\x83\xB7\x24\x0D\x0F\x18\xD0\x89\xF3\x15\xB1\x89\x0C\xB0\xA4\x4F\x6B\x35\x54\x22\x09\x70\x3E\x65\xCD\xA6\x2A\xA6\xAA\xA7\x80\x16\x01\x1D\x9E\xA7\x78\x2B\x38\x73\x02\x9B\xA6\x0D\x8A\xA2\xB1\x22\x0C\xA8\xB2\xD3\x93\x39\x0F\xB5\x20\x1A\x69\x72\x59\xA8\x7A\x15\xA9\xBB\xD3\xAB\x25\x18\xB5\xB4\x08\xB7\x68\x2C\xB6\x01\x16\x8B\xAB\xA6\x49\x23\x20\xB5\x32\x02\xCC\xA4\x72\x1C\xE5\x1D\xA8\xB6\x3F\x28\x6A\x97\x09\xCF\xA3\x65\xB0\x05\xA4\x53\x1B\x90\xB0\x55\x87\x38\x0B\x00\xAF\xB5\x91\x01\x3C\xAB\x1C\xBD\xC0\x10\xA3\xA3\x63\x87\x1C\x16\x01\x5C\xB4\x31\x19\x9D\xA2\x4F\xBD\xD5\x8B\x64\xEF\x15\x07\x1C\x0C\x02\xB0\xB7\x1F\x0F\x90\xA5\x03\x21\x2E\x0F\x7E\x07\x1C\x0D\x03\xB2\xB0\x10\x07\x0F\x11\x70\x11\x3C\x00\x02\x71\x1F\x9B\xB2\xB6\xB3\x5B\xBC\xAD\xBD\xD6\x9E\x6B\xDF\xB5\xE0\xB5\x70\xB5\x83\x1F\x5A\xBC\x7F\x13\x45\x1C\x6B\x91\x1E\xDC\xB5\x82\x1A\xE6\x5C\x9C\x2C\x40\x07\x70\x21\x55\x06\xB5\x0D\x1C\x52\x0E\x9E\x12\x5C\xB8\x93\xB7\xD6\x85\x4B\x20\x1D\xF4\xB5\x1D\x1E\xAF\x0F\xC0\x10\x95\x0E\x39\x18\x77\x64\x00\xEF\xB5\x6D\xB6\x7E\x1A\xC0\x30\x91\x0E\xD7\xAC\x58\x7F\x01\xD7\xB5\x97\xA4\xBE\xB2\x5C\xBA\xAF\xBB\xD6\x90\x25\x21\x17\xE6\x3A\xAE\x01\xC0\xB2\x5B\xB3\xB0\xAD\xF0\x3C\x4D\x06\xB6\x6A\x3A\xE7\x03\xB5\xB6\xF9\x18\x28\x21\xD7\x8D\x6C\xDA\xB5\x50\x12\xA1\x0C\xCD\x2B\x62\xB7\x93\xB5\xD8\xA6\x78\x05\xB6\xF5\x1D\x99\xB1\x30\x0F\x5A\xB9\xFD\x1D\xD8\xA0\x6B\x9F\xB6\x37\xB2\xA8\x11\x08\x22\x51\x04\xB2\xB4\x70\x26\x6C\xF6\x51\x36\xB3\x94\xB5\x78\x8C\x60\x07\xAD\xAB\x97\x0B\x6C\x9E\xB6\xED\x10\x0A\x1D\xBF\xB5\x1D\x16\xE0\x35\xD9\x90\x38\x37\xB6\x32\x3D\x9C\xB6\x4C\xB3\x67\xBB\xB2\xAD\x70\x13\x2C\xA9\x1D\x0C\xB7\xA0\xB4\x84\x18\x2A\x1A\x2A\x24\x49\x06\x6D\x8C\x1C\x48\xB7\xF6\x39\x4F\x00\x63\xBE\x4D\x7C\xD9\x8D\x38\x7F\x1F\x2E\xB7\x6F\xB4\xCC\xB2\x68\xB5\xD2\x0B\x0C\x21\x2E\x1E\x3C\x32\x07\xAB\xB4\x82\x19\x6B\xBE\x3E\x3C\xDA\xAA\x6C\x9A\xB6\x0D\x1C\x07\x21\xD8\xB6\x5B\xB3\xB6\xB3\xDA\xA5\x6D\xCE\xB5\xC2\x14\x15\x3F\x19\x02\x6D\xB7\xE0\x0C\xDB\x8E\x78\x6E\xB6\x4C\xB6\xB8\xB5\x84\x1A\x03\x23\xB7\xBD\xD6\xB5\x6D\x8C\x1C\x43\xB7\xB0\x14\x01\x2C\x6F\xBD\x50\x06\x95\x84\x6C\xCA\xB6\x23\x59\xB7\xB5\x4C\x07\x5A\xB5\x02\x25\xDC\x9C\x6B\x87\xB7\x08\x1D\xC4\xB4\x5B\x1A\xC8\x3C\xB8\xAF\x8E\x8E\x6E\x96\xB6\x28\xB7\xA5\xB5\x50\x96\x6B\xB1\xE1\x11\x81\x22\x6E\xF4\xB5\xE0\xB4\x84\xB5\x83\x1C\x1D\x23\x58\x88\xDD\x88\x38\x2A\xB7\x11\x1D\x88\x21\xD8\x16\x75\xB4\xBB\xBA\xD6\xB0\x6E\x95\x1C\xF5\x7C\x00\x03\x8E\x1F\x72\xB9\xAD\xB1\xD9\xB7\x6D\x80\xB7\xA3\xB7\x76\xB7\xB6\xB1\xFE\x1E\xE2\x5F\xA0\x1B\x6D\xBA\xB6\xC1\xB7\xE3\xB5\xBD\xB3\x5C\xB0\x50\x15\xDD\xBC\x38\x35\xA6\x02\x03\x7F\x03\x8E\x1A\xF3\x67\x93\xB1\x78\x26\x03\x6E\x96\xC2\x15\x81\x03\xF5\xB2\x5C\xB1\x56\x28\xD7\x92\x6D\xB0\x19\x62\x16\xE1\xB5\xE9\x5E\xE0\x70\x80\x77\xE0\x52\x6F\x8D\x12\xD5\xB7\x93\x03\x0F\x00\x7B\xB9\x9E\x83\x08\x2B\x6F\xDC\xB7\x2C\x2C\xEF\xB7\xEC\xB1\x77\x11\xBE\xAA\xDE\x97\x3C\x2D\xB7\x29\x26\x84\x07\xF9\xB6\x65\xAB\xAD\xB1\x78\x19\x00\x6C\xB7\xD4\xAA\xEB\x46\xFC\xB4\xC2\x1D\xBD\xAE\xD8\x8A\x35\x07\x1C\x5F\xB5\x1B\x13\x8E\x1E\x3A\xAC\xE0\x17\xD6\xBA\x3A\x38\xB4\x11\x1C\x7A\xB5\x01\xB8\x64\xB7\xC0\xAD\xDE\xA6\xEA\x3B\x42\x6F\x51\xFD\xB6\x41\x04\x63\xB9\xBE\xA9\x08\x15\x6B\x85\xB7\xB3\x11\x0F\xB9\xB8\xB3\x82\xBE\xBB\xBB\x6A\x22\x6F\xBE\x44\x7C\x45\x7C\x4E\x06\xBB\x20\x0D\xB2\xBD\xE0\x86\x04\x75\x01\x0F\xB8\x73\x0F\x49", -"\x00\x86\xB0\xBF\xB9\xD8\xA5\x01\x03\xB8\x3D\x0A\xE7\x13\x7F\x4F\xC0\x1C\x88\xA2\x3B\x71\x06\x2B\xB8\x02\x02\xD1\x1E\xB6\xB1\xE2\x12\x0F\x11\xE1\x90\x1D\x27\x02\x45\xB9\x1A\xB9\xD7\xB4\x81\x08\xC3\xB4\xDF\xAE\x2E\x75\xB7\xA8\x24\xAB\x13\x2E\xA4\x16\x88\x59\x00\xE2\x95\x1A\x7D\xB7\x27\x03\x78\x02\x11\xBC\x16\x19\xC5\xB2\xE0\xAC\x58\x3B\xB7\x52\xB8\x56\xAF\x96\x2F\xC0\x1F\x20\xB6\xE2\x80\x00\x50\xB7\x0D\xB9\x93\x00\x3C\x03\x8B\xB3\x8B\x0B\xE3\x8A\x71\x92\xB7\x4D\xB8\xF0\xB7\x13\xBE\x30\x17\xE0\x16\xB6\xB1\x04\x3B\x1C\x90\xA7\x03\x1D\xC4\x18\x19\x0C\xC6\xA7\x09\x3C\x71\xEF\xB8\x81\xB7\x1B\xBB\xB6\xB0\x21\x14\x6C\x76\xDF\xBB\x42\xD3\xB8\xD6\x12\x33\xBA\x26\x82\x8F\xB7\x12\x09\x04\x0E\x46\x10\xB8\x06\x02\x47\xB8\x20\xB9\x79\xB2\xC8\xB4\xE0\xA6\x70\x86\xB9\x73\x55\x23\x9F\x76\x34\x5B\xB6\xD5\x10\x6C\x6F\xBD\x74\xB2\xC1\x34\x4D\xB9\x86\x36\x8C\xB5\x5C\x0C\xE4\x89\x04\x7F\x00\x7D\xB9\x53\xBA\x17\xBE\x86\xB1\xC7\xBC\x63\x17\x72\xD1\xB8\xCA\x3E\x51\xBB\x3B\x34\x94\xB8\xC5\xA9\x08\x3D\x01\x29\xB9\x06\x03\x5B\xBB\x24\xB8\x14\xAC\x2A\x0D\xE5\xB4\x2F\x08\xB8\x30\x88\x5A\xBB\x10\xBF\x24\x0C\x07\x18\xE5\x83\x04\x45\xB9\xBB\xB8\x99\x8D\x2F\xBE\x80\xBF\xCA\xA0\xE6\x82\x3A\xBD\x2E\x66\xB8\x30\xBB\x8D\x1F\x24\x03\x06\x0F\xE4\xB2\x70\x89\x02\xD5\xB9\x64\xB8\x5F\x3D\x95\xB3\x13\x24\x4F\x00\x6F\xBC\xB9\x27\xB8\x0A\x1F\xD5\x13\xDD\x3F\xCD\xAA\xE6\x81\x13\x3B\x1C\x3E\xB6\x08\x1D\xC4\x1D\x93\x7B\xE3\x13\x45\x1D\xF2\x5C\xB5\x24\xB8\x0A\x1E\x03\x13\xB2\x78\xC9\xAE\x35\x3F\x69\xD0\x79\x3E\xB9\x10\x0A\x19\xBF\x5E\xBA\xCE\xA7\x09\x26\x63\xED\xB9\xFE\xB9\x55\xBB\x12\xBD\x27\x02\xCD\xAB\xE5\x7B\x42\xB1\x4C\x07\x1C\x35\xA6\x22\x3E\x8C\xB4\x6A\x06\xE5\x88\x22\xC6\xB9\xA0\x94\x81\xBA\xE4\xB5\xA0\xB7\xC8\xA2\xE3\xBF\x53\x64\xB8\x19\x76\xF9\x03\x8E\x1B\xF6\x7E\xD0\xA3\x08\x11\x46\x73\xB7\x47\xB9\x84\x03\x47\xBB\x84\xB1\xBF\xAC\xE6\xAC\x35\x74\xB8\xC8\xB6\x50\xA2\xC7\x34\x5B\xB0\xEF\x39\x04\x65\xB1\x65\xB9\xCA\x92\x18\x03\xBE\xB6\x39\x19\xC3\xB5\x48\x1D\x82\x7D\x41\xC0\x24\x35\x5A\x15\xA6\x8C\xB8\x7C\x1D\xE8\xA7\xA9\x10\xBA\x7B\x54\x6D\xBA\xDF\x4D\x92\xB5\xC2\xA7\xE9\xA1\x73\xAF\x07\x4D\xB2\xD1\xAA\x5C\x03\xC7\x1C\x7F\x1E\xE9\x86\x56\xA0\xB8\x27\x03\xC2\xA9\xB7\xB1\x9E\xB6\xB7\xAD\xE6\xA1\x72\xEF\x9C\xDB\x32\x33\xB9\xCC\x16\xA9\xB8\x78\x00\xEA\x9D\x75\xC2\xBA\x29\x27\x65\xBA\x25\xBE\xA8\xB5\xCF\xB1\x5D\xB2\x72\x84\x33\x66\xB8\x7D\x10\x57\xBA\xB4\x2F\xB3\xB0\xE4\x83\x04\x6C\xBA\xDF\xB5\xB0\x28\x45\xBC\xD5\xAB\x0B\xA3\xE3\xA9\x74\xE6\xB9\xCE\x03\x1D\x1F\x03\x0C\xAB\xB5\xB9\xAC\x6B\x2E\x75\x82\x02\x7D\xBA\x70\xB4\x55\xBC\xC1\x11\x02\x25\xA4\x30\x74\xC3\xBA\xDC\xB5\xC2\x18\xA5\x2F\xB0\xB1\xD6\xAC\x20\x33\x74\xD2\x17\x2C\x1F\xDF\x38\x77\x28\xA8\x14\x88\xA1\xAB\x26\x71\xFB\xBA\xBD\xB7\x81\x02\xDC\xB6\xAF\xB7\xCD\xA6\x08\x1B\x76\x82\xBB\x25\xBA\x6D\xB5\x61\xBC\xF3\x0C\xD8\xBA\x99\x09\x76\x87\x19\x8B\xBB\xBB\xB8\x5F\x3F\xB1\xBF\xEB\x11\xEC\x8C\x7A\x40\x02\x40\x1B\xCF\x66\x55\x0F\x60\xBB\xE3\x0A\xEB\x99\x76\x82\x02\x4F\xB6\x16\x1D\xF6\xB0\xB7\xB2\xD1\xA1\xE4\xB3\x75\xFB\xAD\x75\xBB\x8B\xBA\x6A\xBB\xA8\xB6\xC6\xB0\x23\x1C\x75\xFA\x14\x00\xBB\x05\x6C\x68\xBE\x86\xBE\xE3\x08\xDD\x96\x76\xBB\x1C\x90\x08\xAE\xBB\x8F\x11\xB9\xB1\xB9\xB1\xEB\xA1\x76\xB7\xB2\x8F\x19\x40\x15\x69\xBC\x60\x0B\xE3\x0E\x31\x1C\x75\xBE\x0D\xD4\xBB\x27\xBB\x72\xBB\xA0\xB4\xD4\xB4\x70\x05\x36\x26\x2B\xDB\xBB\x60\x0B\x99\x1E\xC7\x1C\x88\x1C\xDD\x8A\x77\xE4\x1C\xBD\xBA\x4A\xB9\x2B\xBF\xBC\xB4\xC7\x09\xEF\x8E\x07\x3E\x1C\x4C\x0C\xF7\xBA\xE1\x88\xCB\x11\xDF\xA0\xE7\xBD\x04\x73\xBB\x87\x18\xF4\xBB\x70\xBD\xB1\xB7\xDF\xAB\x41\x2F\x6C\x87\x19\xFC\xBA\xB0\xBA\xCE\x20\xC0\xBB\x60\x62\xF0\xA7\x6E\xF8\xBA\x31\x02\x1F\x1D\xA3\x0A\xBF\xB7\x52\x33\xE6\x8A\x78\xE2\xBA\x37\xB2\xFA\xB9\xFE\x0E\xBE\xB1\xE1\xAD\x68\x07\x78\xEF\xBB\xFB\x1D\xFE\xB8\x84\xBD\x95\xB9\xDD\xAD\x4B\x1C\x78\xFF\x01\x3E\x1D\x26\x14\x85\xBE\xB8\x26\xE1\xA4\xE9\xAC\x72\xDB\xB5\xA1\x17\x66\x28\x87\xBE\x79\xB4\xE3\xB5\xF1\xB6\x78\xDE\xB5\xB7\xB6\x9C\xB0\xA9\x09\xB7\xB7\xE3\xBD\xF1\xBE\x78\xB4\xB7\x39\xBD\xE8\xB5\xB9\xB1\x5F\xB9\xD2\xAC\xED\x84\x70\xAC\x2C\xE9\xB5\xA3\x05\xA8\x43\xF3\x50\xB9\xA1\xB1\x52\x6E\xF0\xB5\x11\x1C\x79\xB4\xBD\xB1\xE2\x1F\xA3", -"\x06\xF2\x90\x38\x01\xB6\x41\xBD\xAE\x1C\x3F\xBA\xB7\xB2\xAE\xBE\x71\x15\x79\xA2\xBC\xAB\xBA\x93\xBB\x13\xBE\xDB\x0E\xAF\xA2\x7C\x1D\x6E\x81\x25\x9F\xB7\x93\xB5\x93\xB9\xC9\x72\xB9\xB9\xF2\xBC\x38\x0A\xB6\x50\xB7\x70\xB6\x97\xBF\x7B\xB3\xD5\xAC\xB1\x16\x79\xF2\xB8\xF4\xB6\x6F\x0C\xC4\xB5\xBB\x39\x2A\x07\xF3\xA6\x4A\xE9\xBC\x38\xB7\xA3\xB9\x01\x95\xCD\xBB\xB1\xBB\xE2\x9C\x6B\xF3\xBC\x20\xBB\x3A\xBE\x0D\xBF\xCE\xBE\xCA\xAA\x6D\x10\x17\x22\xB6\x16\x3A\x3F\xBF\xAD\xA0\xD0\xB9\xB4\xA2\xF4\x8A\x21\x84\xBD\x0D\x1D\x16\xB9\x5B\xBF\x5B\xB8\xE8\xBC\xEC\x9E\x6B\xE1\x2A\x8C\xBC\x99\xB6\x63\x24\x66\xB8\xE4\xA2\xD8\x8D\x14\x0F\xB7\x96\xBC\xCB\xB9\xCF\xB6\xD0\xBB\xAD\xBD\xF4\xA2\x77\xD6\xBB\x8B\xBC\x31\xBD\x9E\xB8\xBA\x0E\x72\x05\xDA\xA5\x7A\x94\xB6\xA7\xBC\xD0\xB7\x9A\xBB\xD0\xB1\xC8\xAE\xF3\xBF\x03\x3C\xBC\xBF\xBA\x04\x1E\xAB\xBE\x89\xB0\xEB\xA4\xEF\xA1\x7A\xF7\xB6\x55\xB7\xE9\x26\xA4\xBF\x9E\xA4\xE9\xBA\xDA\xB0\x72\xD5\xBB\x94\xB8\x5F\xBC\xD8\xB0\xED\x12\xE7\xA5\xF2\xA0\x79\xC3\xBA\xC7\xBC\xEE\x18\x74\x0F\x6C\xB7\xE1\x2B\xF6\xBE\x47\x4F\xA3\xA8\xBD\xB2\xBA\xAA\xB9\x6E\xBC\xEA\xA2\xED\x96\x7B\x97\xBC\x8E\xBA\x59\xBC\xF8\xB2\xCF\xB9\xB7\xB7\x7E\x1E\x7B\xFE\xB6\x17\xB7\x01\xBE\xCE\x26\xD7\xB4\xB8\xB4\xF6\xA0\x6B\xC3\xBD\x78\xBD\x4F\xBE\x9D\xBA\xDD\xBD\xE8\xA4\xF3\xAD\x23\x0B\xB7\xB7\xBD\x92\xB5\xAE\xBA\xCD\xB9\xEA\xA7\xD8\x94\x6E\xE5\xBD\x37\xB2\x7C\xBD\xA3\xBB\xBC\xB2\xB9\xB9\xF6\x8E\x7A\x8B\x03\x2E\x0E\xCE\xB5\xC0\xBE\x66\xB3\xF0\xA1\xF4\xA2\x7B\x86\xBE\x0D\x1C\xD3\xB4\xB4\xBD\x5B\xB4\xE5\xB4\xF3\xB0\x73\x93\xBE\x37\xB2\x5F\xBC\xEB\xB7\x7E\xB1\xAE\xBD\xF8\x89\x7A\x9F\xBE\x36\xB9\xE8\xB7\xB5\xB2\x76\xBE\xE9\xBC\xF8\xA7\x7B\xAE\xBC\xE4\xBB\x1F\xBD\xD7\x1F\x5A\xB9\xBB\xA1\xF6\x87\x38\x0A\xBE\x8C\xBC\x0E\xBE\x2F\xBF\x77\xB2\xEF\xBB\xF5\x88\x38\x44\xB7\x48\x3C\xD3\x2E\xCF\xBE\xDB\xBC\xE0\x1E\xF5\x83\x79\xD1\xB6\x0F\xBD\x6B\xBC\x81\xBF\xD9\xB4\xE1\x0A\xD7\xAE\x12\x63\x29\x5F\x2B\xA1\xBC\xC8\xBB\xE6\xB1\xAF\xA8\xF0\x9F\x6B\xA6\xBE\x1B\xBE\x94\xBD\xCC\xBC\xC7\x16\xAF\xA8\xF8\x94\x38\x0A\xBE\x3F\x14\xAD\xBD\xC3\xBC\xDF\xB9\x6C\x05\xF3\x85\x08\x6F\xBD\x15\xBF\x4A\xBF\xC5\xBE\x86\xBE\xEB\xB0\xF3\x9C\x79\xD5\xBD\x49\xBE\x74\xBF\x42\x1C\xEC\xB7\x9B\x1B\xF3\x9E\x77\x68\xBE\xE0\xBC\x5D\xBD\xC1\xBC\xED\xB5\xE8\xB6\xDC\xAD\x7A\x83\xBC\x0C\xBF\x40\xBA\xC3\xBB\xCC\xBF\xE8\xB6\x4A\x23\x6C\xD3\xBE\x6B\xB7\xB4\xBE\xB3\xBF\xC4\xBC\xB2\xBE\xFA\x90\x38\x60\xBE\x4A\xBE\x9D\x27\xE0\xBB\xD6\xBB\x18\x13\xD9\x96\x04\x78\xBE\x81\x25\x70\xBC\xD3\xBC\xCD\xBD\xEB\xAB\xF5\xBE\x7D\xE6\xBD\x71\xBE\x98\xBF\xD8\xBB\xAC\xB4\xF8\xB0\xF8\x84\x6D\xA4\xBD\x29\xBE\x53\xBD\xDE\xBC\xE0\xBB\xF6\xA4\xEF\xBE\x7A\xC0\xBD\xF4\xB4\xC8\xBE\xDC\xBB\xA9\x04\xF7\xBA\x5D\x09\x7B\xC8\x02\x98\xBF\x66\xBD\xDB\xB5\xE7\xBD\xB4\xB1\x70\x13\x7B\x9B\xBD\xDE\xB4\xD9\xBE\xE8\xBA\xF0\xB5\xFB\xAE\x47\x26\x6D\xC2\x15\x68\xB6\x69\x14\xE2\xBD\x6F\xBA\xF8\xBB\xFD\xA1\x7E\xF3\xBD\xD7\xB5\xCF\xB9\x9C\xBF\xDE\xB0\xF8\xA5\xF6\xA3\x7E\xC5\xBA\xA5\xBE\xBC\xB5\x7A\x92\x6F\xB9\xFB\xB7\x95\x9A\x7E\x8C\xBF\x0D\x1D\x7A\xBC\xF0\xBD\x5B\xB2\xFC\xA1\xFC\x94\x72\x93\xBF\xEB\xBC\x5A\xBF\xBF\xBF\xC5\x3D\xFD\xB7\xA7\x9F\x7F\xBC\xBF\x82\xB7\x0A\x1D\x60\xBB\xFA\xBC\xE9\xB5\xFE\xBA\x7B\xB1\xBD\xA4\xBE\xCA\xBC\xED\xB9\x6C\x12\xF1\xA9\xFD\xB8\x7A\xAB\xBF\x16\xBF\xCD\xBC\xAF\xB9\xDA\xB7\xAD\xBA\xF8\x8E\x79\xD7\xBE\xF6\xBE\x45\xBF\xD6\xBC\x5B\xB2\xF2\xB6\xE6\x9E\x6B\xD8\xBE\x07\xC1\xFB\xBF\x02\xC6\xD7\xBC\xF2\xAF\xF5\x8F\x80\x89\xC0\x62\xBF\x40\xBA\xCC\xBC\xEB\xBD\xE0\x15\xF9\xB1\x7E\x98\xC0\xDB\xB5\xC1\xB9\xE6\xB4\xE7\xBF\xFC\xBE\xF9\x8E\x73\xBE\x44\xC5\xB7\xCD\x17\x8C\xBB\x03\xCC\x02\xDD\xF1\xBE\x7A\x9E\xC0\xE2\xB5\x8D\x1D\xF1\xBE\xDB\x0B\x02\xC8\xDD\x86\x7D\xBB\xBB\x74\xB7\x94\xBB\xBC\xB1\x04\xCB\xFC\xA7\x1A\x29\xB6\x4B\xBC\xEC\xB5\xD6\xBF\x93\xBC\x79\xB1\xE5\xB6\xFA\x97\x80\xA7\xB7\x3B\xC0\x6D\xB4\x96\xBD\xEB\xBF\xF9\xA9\xF8\xBA\x80\x91\xBF\x34\xB2\xEC\xBE\xFE\xBE\xEC\xB0\xB0\xBD\x01\xDE\x6E\xDE\xBF\x7A\xBE\x21\xC1\xE7\xBD\xC1\x1E\xF6\xBA\xDD\x9F\x80\xC8\xC0\x50\xC1\x74\xBD\xFE\xB9\xFD\xB7\xFC\xA9\x4F\x91\x6C\xA6\x0F\x56\xC0\x34\xBC\x16\xC4\xF5\xB2\x00\xD7\xF4\x9B\x81\x91\x1C\x1C\xB9\xF1\xBF\xA1\xBF\x09\xC3\xFB\xA8\xFF\xBD\x7B", -"\x85\xBF\xB1\x61\xC3\xBE\xFF\xBA\xE0\xB0\x00\xCA\xFB\xAD\x81\xE3\xBD\x11\x1C\x4D\xBC\xFD\xB9\xF8\xB4\x07\xC3\xFE\xA7\x7F\xB3\xC0\xD0\x0A\xCB\xBC\x1A\xC3\x0F\xC4\xF1\xBD\x03\xCB\x7E\xF0\xBF\x93\xB7\x06\x1D\x3A\xBF\xED\xB4\xFD\xA0\x03\xF5\x81\x88\xC1\xA6\xBF\xB0\x16\xAD\xBC\x11\xC7\xB4\xAD\xFE\xBF\x6D\x90\xC1\xAF\xBE\xC7\xBC\x61\xBD\x10\xC6\xFE\xBE\xEF\xBB\x7F\xD2\xC0\x64\xC1\xD9\xB8\xCA\x22\x7A\x28\xFB\xA9\x03\xFF\x79\xEB\xC0\x01\xC0\xF0\xBE\xEF\xBA\x14\xC2\xEC\xA4\x05\xD6\x7F\xC4\xBF\x63\xC1\x3B\xC1\x19\xC4\xBA\xA9\xFC\xAA\x05\xCB\x80\xFC\xC0\x99\xBF\x2C\xC3\x1F\xC0\xE3\xB1\xE1\x12\xFE\x94\x82\xF5\xBF\x96\xC0\x43\xC2\x29\xC6\x0E\xC9\x6C\x19\xE9\xB4\x11\x7B\xB6\xAE\xC1\x49\xBC\x2C\xC6\x0F\xC2\x0B\xD5\x70\x22\x7F\x83\xC1\xE4\xBE\x5B\xC2\x04\xC7\xFA\xB4\xB6\xBA\xF6\x99\x82\xEC\x1A\x00\xBE\x4E\xC0\xD6\xB6\x13\xC1\xEF\xA5\x01\xFD\x7E\xF2\xBF\xB4\xC1\x9B\xBE\x36\xC2\x01\xCC\x0D\xD5\xEA\x8F\x7C\xA7\xC1\x4F\xB9\xFE\xBF\x2F\xC5\x11\xC1\x0C\xCC\x03\xD5\x83\xB8\xB2\x06\xC0\xCE\xBF\x11\xC3\xE3\xB9\x04\xD8\xEE\x91\x83\xCB\xB7\x11\x1D\x91\xBF\x0A\x1B\xCA\xBB\x0E\xD9\x00\xD4\x72\xAA\xBE\x0D\x1D\x0A\xC0\xB1\xBB\x1F\xC1\x01\xDB\x53\x21\x81\xE5\xBA\x34\xBD\x17\xC1\x3A\xC6\x01\xCE\x06\xCF\x53\x0F\x84\xE5\xBB\xEE\xC1\xEC\xBD\x0D\xC7\x26\xB0\xF4\xB0\x62\x0A\x11\x7B\xBE\xF3\xC0\x22\xC1\x85\x18\xB9\xB4\x10\xC2\xD7\xBA\x37\x52\x28\x9C\x10\xA9\xBE\x38\xC5\x05\xCC\x12\xC9\xDD\x97\x6B\xE0\xBB\x25\xC3\x70\xB4\x20\x1D\x0A\x6B\xE6\x2A\x09\xE1\x84\xAD\xC2\x38\xC2\x99\xBE\xAF\xB8\xF9\x06\xF3\xB7\xED\x9E\x6B\xD7\x16\xAB\x2B\xE0\x2B\x30\xC3\x25\xC9\x13\xC5\x0A\xE2\x6B\xBE\xBD\x90\xA7\xDF\xBE\x51\xC3\x29\xC9\x13\xDE\xF5\x96\xB7\x46\xC1\x4C\xC3\xA8\xC2\x8F\xBF\x06\xC9\x10\x17\x06\xCC\x84\xDF\xB5\x42\x0F\x58\x3C\x48\xC3\x08\xC2\x15\xDD\x0A\xE1\x7C\xD7\xB5\xD6\x5A\xCC\xBB\x30\xBA\x5C\xB9\xB2\x19\x34\x63\x54\x5B\xC2\x1A\xC0\xAF\xC2\x5A\xC5\xC2\x10\x16\xC7\x09\x33\x7F\xEB\xC2\x70\xC2\x17\xC3\xB5\xB2\x88\xB6\x10\x19\x07\xF1\x85\xF7\xC2\x78\xC3\xBC\xC0\x85\x1E\xD7\xBA\x09\x90\xEB\xB7\x78\xBE\xBD\x74\xC3\x81\x01\x0E\x22\x2F\xC4\x18\xCC\x00\xD7\x6B\x8C\xB8\x5E\xC1\xC2\xC2\x62\xC7\x5B\xBE\xEB\xA4\x35\x14\x55\x0B\xC3\x90\xC3\xA2\xBF\xB5\xB4\xD4\x08\x57\x31\x0C\xD6\x86\x80\xC2\x15\x1C\xC8\xA7\x18\x27\x32\xC6\x14\xDE\xF5\x91\x3C\x4E\x21\x35\xBC\x5F\xBF\x8E\x1B\x53\x44\xE1\x11\x78\x30\x02\x00\xB8\x7F\xBB\x80\x03\x69\xC2\x5C\xB5\xBF\x4D\xEE\x91\x7E\x9E\x36\xFF\x00\x4B\x1E\x8F\x1F\x0D\x28\xF4\xBB\xEF\x82\x04\x2E\x01\xAD\xB9\xAB\xB9\x6F\x5C\xFA\x2C\xCD\xA2\x56\x32\x78\xBA\xC3\x01\x98\xEA\x2C\x8A\xBF\x24\x0D\x58\x3F\xF0\xB6\x86\x81\x02\xB8\xC2\xD6\xC0\x0C\x8D\x95\xBB\x1D\x30\x4B\x27\x80\xE7\xBA\x63\x35\xE1\xC1\x6D\x2C\xC8\xB0\xE2\xA0\x00\x09\x87\xE1\xB5\xF5\x57\xDE\xC1\x7A\x97\x37\xC1\xCB\xB8\xEA\xA3\x72\xBE\x1C\xEC\x8E\xE3\xC1\x85\xBE\x20\x07\x1D\xC0\xD7\x99\x87\xB0\xBC\xBE\xC2\x9A\x33\x73\xC6\x3B\xC3\xCB\xBE\x71\x14\x42\x35\xC3\xE3\xC3\x81\x01\x79\xC7\x5B\xB7\x1E\xCA\x02\xF5\x3B\x12\x55\xEB\xC3\xDD\xC1\x56\xBE\xC7\x1E\xD9\x22\xDB\x86\x81\xD6\xC3\xB9\xC3\xEE\xC2\x7E\xC1\x43\x3C\xE0\xA6\x3C\x8E\x78\xA8\xB8\xEC\xC2\xB4\xBA\x8F\x19\x26\xB0\xB4\xB5\x0E\xF3\x87\xDE\xB5\xF5\xC3\x9B\xB0\x4E\x1B\x2F\xB0\x1C\xD7\x74\xBB\x87\xA7\x02\xAE\x20\xF8\xC0\x8B\xBC\x3C\xC1\x20\xC8\x10\xC3\x88\xEF\x31\xAD\xB9\x09\xC6\x60\xB5\x42\xCA\x9C\x8D\x0F\xE7\x04\x39\x21\x1A\xC4\x8B\xC1\x42\x07\x41\xCD\xAD\xB1\x10\xD4\x38\x22\xC4\x88\xB2\x12\xC4\x01\x9B\xEC\x22\x1D\xC6\x08\x04\x43\x29\xC4\x0E\xC3\x15\xC5\x87\xC2\x4C\x40\x1D\xDD\xB9\x21\x88\xE3\x1A\xA0\xB8\x01\xC5\x70\xC3\x93\xBC\x19\xDC\x0C\xC0\x86\xF8\xB4\x45\xC4\x9C\xC2\xAF\xBF\x47\x19\x18\x3D\xF2\xA9\x74\x9C\xBA\x3C\xC1\x00\x7F\x66\xC2\x5B\xBD\xC0\x19\x62\x6D\x65\xF2\xBD\x1E\x36\x46\xBF\x0D\x20\x0E\x00\xD4\x02\x62\x63\x5D\x3B\xBA\xD7\xB5\x59\x11\x93\xC0\xEE\xBB\xF1\xB0\x12\xF6\x87\xD2\xC4\xDC\xB5\x2A\xC7\x8C\x7D\xB4\xB9\x25\xDB\xD6\x9B\x89\xC0\x1A\x50\x59\x9C\x2E\x15\xA6\x76\xB4\xAE\xA7\x09\x12\x45\x4E\xC4\xA7\xB6\x33\xC6\x3F\xC2\x4A\xCF\xA3\x0B\x0D\xCA\x83\xB6\xA1\x41\x46\x6E\xB4\x4C\x38\x08\xC3\x2A\x5F\xCA\xB2\x88\x9D\x9C\x98\xC2\x9C\xB2\x75\x5A\x20\xC8\x0C\xC5\x13\xEF\x86\xB0\x41\x7D\xC5\x1D\xC6\x3E\xC2\xA5\xB0\x0B\x5C\xD6\x80\xFD\x44\x5C\x27\x96", -"\x23\x5F\x69\xB6\x43\xC3\x24\xD9\xD0\x1C\x80\x91\x1C\x90\xA6\x85\xC1\x0E\xC1\x4F\xCF\x28\xC1\x1A\x51\x8A\x8A\xBC\x2B\xBB\xC6\xC3\x49\x00\x1C\x28\x23\xDF\x51\x3A\x89\xC7\xBC\x7C\xC5\x93\x02\x9F\xC5\x14\xC0\x28\xD3\x12\xDB\x6B\xBE\xBD\xB4\xC2\x83\x03\x98\xC5\x12\xCE\x28\xC8\x15\xD5\x8A\xDB\xB5\x6A\xC4\x5F\x88\x9B\xC0\x16\x4A\x25\xDA\x75\x3C\x04\x21\x20\xEF\x32\x30\xC5\x83\x1D\x38\xCA\x41\x14\xD7\xBE\x1A\x2E\xC5\xA5\xC4\x18\x03\xA9\xC7\x4F\xC1\xD3\xAC\xF4\xA5\x78\xB9\x04\x8C\x25\xE8\x05\xFD\x54\x5B\xBB\xB7\x05\x70\x67\x29\x1B\xC5\x3C\xC5\x04\xC5\x74\xC7\x5A\xBF\xD6\x2D\x16\xF8\x89\xBD\xC5\xD4\xC4\xEB\x5F\xB4\xC4\x56\xC1\xD3\xBC\xD6\xBA\x37\x1A\x2F\x9E\x5D\x20\xC4\xA7\xC6\x42\xC3\xCA\xB7\xD6\xA1\x87\xE6\xC5\xE1\xB5\x67\xC7\x49\x07\x55\xC7\xE5\xAD\xB3\x52\x8B\xB2\xC5\x92\xC5\x01\xC0\xA5\xC1\x68\x46\x2D\xD5\x77\x2C\x29\x2E\x0E\xFE\x5B\x6D\xC7\xB6\xB5\x5B\xCE\xDE\x40\x17\xD9\x72\xE2\xC5\xD0\xB9\x6B\xB7\x7B\xC1\x80\x19\x2F\xCF\x12\xD1\x8B\xEB\xC5\xB7\xC1\x4B\xA0\xB1\xC1\x4A\xC3\xC2\x4C\x53\x2A\x4A\x6D\x20\x0A\xC6\x6D\xB4\xC3\xC1\xBF\x56\x96\xA7\x14\xD0\x7C\x3E\xBD\xFD\xC3\x66\xA0\x75\xC0\x5D\xCC\x2E\xCA\x17\xC0\x8C\xBE\xC5\x81\xC4\x5F\xBD\x86\xC6\x20\x0C\x5F\x3E\x0F\xE4\x8A\xB0\xC6\xFF\xC5\x84\x03\xAC\xC1\x63\xC3\x30\xD0\x01\x26\x71\xFF\x01\x28\xC4\x83\x02\x54\xBB\xC5\xB2\x30\xDC\x17\xCC\x38\x56\xA0\x18\xC7\x6D\xC1\x23\xA6\x67\xC1\x34\xD2\xFE\x1F\x81\xAC\xC6\x3C\xC7\x5A\xC5\xD2\xC4\x1D\xCB\x34\xDF\x51\x2C\x88\xDC\xB5\x21\xC6\x5F\xBC\xAB\xC6\x20\x03\xD2\xA0\xD7\x90\x80\xC5\x77\xD1\xC5\x06\xC1\x42\x04\x1E\x27\x2E\xCD\x08\xC6\x8D\x88\x1C\x48\xC7\x97\xC5\xBA\xC4\x84\x56\x35\xC1\x18\xE6\x75\x90\xC6\x17\x2E\x5F\xBC\xD9\xC6\x20\x09\x75\xA3\x15\xD0\x8D\xCA\xC6\x1A\xC6\x53\xC6\xDA\xC5\x65\xC4\xC2\x5E\xF5\x9A\x57\xE9\x10\x2B\xC6\xB3\xC7\xC5\xC3\x6F\xC1\x35\xD1\xE9\xBE\x7A\xB5\xC6\x01\x03\x27\xAC\x21\xC7\x66\xCB\x36\xC4\x07\x53\x8D\x86\xC2\x3D\xC7\xB6\xC6\x72\xC7\x99\xB7\x71\x34\xFA\x91\x38\x75\xC6\x2E\x13\xC0\xC7\xA4\xC7\x6C\xC3\x2C\xDA\x1B\xFA\x8C\xEE\xC6\xCA\xC5\x08\x1D\x11\x07\x24\x02\x15\x66\xDC\x96\x8C\xB8\xC6\x8F\xC6\x8E\xC4\x21\xA6\x56\xCE\xBA\xBE\xF5\x99\x73\x86\x02\x41\x62\x5E\xC6\xE0\xC0\x75\xC4\x38\xD8\x1B\xD1\x8E\xA7\x02\x57\xC7\xE1\xB4\x0C\x89\x51\xC1\xBD\xB9\xDD\xA5\x72\xFC\xBD\xD0\xC4\xDA\xC7\xE7\xC0\x67\xCB\xF3\xBE\x06\xED\x81\xA1\xC6\x37\xB2\xC4\x11\x0A\xC6\x61\xC1\xD8\x5D\x11\xF1\x8D\xD7\xB5\x9A\x4F\xDF\xC5\x2E\xC1\x78\xCD\x38\xDE\xD8\x29\x8E\xE7\xC4\x50\x8E\x18\x01\xF1\xC7\x1D\xC9\x1F\xDD\x14\xEF\x63\x2C\xBA\x26\x10\x4C\xC7\x8D\x5E\x50\xC2\x24\xD4\x17\xF3\x72\xD7\xB5\x60\x9C\xE3\x0A\xB3\xC7\x74\xC5\x3D\xD0\x14\xF5\x8E\xD4\xC6\x79\xC6\xED\xC6\xEA\xC1\xC9\x7C\xA6\x1D\x1E\xE6\x8F\x84\x33\xDC\xB5\x94\x14\x2B\xC0\x7E\x56\x3F\xC5\x11\xE8\x75\xD7\xB5\x80\x6A\xE9\xC4\x2A\xC5\x22\xC4\xFB\x63\x1C\xC3\x8F\xED\xC7\x41\x46\x12\xBE\xC1\xC2\xBB\xB6\x32\xD4\xBE\x1C\x8B\x80\x0A\x78\x2F\x0A\x5C\x85\xC5\x7C\xCE\x3F\xC3\x17\xCD\x38\x02\x7A\x02\xC9\x6E\xC3\xDD\xC0\x7E\xC7\x3B\xC7\x20\xFC\x8D\xE4\x41\x0A\xC8\x94\x25\xFD\xC5\x81\xC4\x24\xDA\xD6\xB8\x24\x7A\xB6\xCC\xC7\xB7\xC7\x87\xC7\x7F\xCD\xE0\x0D\x03\x27\x04\x5C\x22\x60\xBA\xEB\x46\x01\xCE\x20\x0B\x33\xD6\x1D\xD2\x8D\xB8\xC7\x6E\xC6\x17\xC5\xBF\xC2\x84\xCC\x40\xCD\x57\xB7\x0B\x15\x9A\xA3\x5F\x2B\xC6\x09\xCF\x2C\x1B\x2B\x4D\x58\x87\x38\x0F\xAB\x42\xC9\x5B\xC7\xB5\xB2\x1F\x1F\x19\x29\x12\xEA\x85\x9E\xC3\x27\x02\xD5\x5C\x02\xC2\x5C\xB3\x9F\xAA\xE0\x47\x38\x19\xAD\x41\xAE\xF9\x03\x96\x1B\xC7\x14\xB0\x5D\xE7\x89\x04\x44\x01\x1E\xBF\x6D\xB5\x15\xCA\xD3\xA6\x11\x17\x22\xF1\x67\xE4\xC8\x74\x01\x59\x10\x18\xCA\x5C\xB8\x45\xC0\x1C\x97\x08\x41\xBD\x25\x17\x83\x2D\x1D\xBD\x9C\x51\x9D\x0C\xF4\x82\x20\x74\x59\xF1\x15\xD6\x34\x7E\xB3\xA9\xB7\x12\x1C\x41\x9C\x75\xF5\x74\xAE\xC3\x21\xCB\x56\x17\x87\x46\x46\xDF\x8E\x8A\xF0\x33\x11\x75\x75\x07\xCA\x21\xC8\x8D\xC0\x47\xD6\x4A\x36\x75\x93\x4C\x9A\xB4\xE0\x4A\x19\xBE\x8F\xCE\x13\xD1\xDB\x54\x84\xC9\xBC\x83\xC8\xFA\xB2\x05\xBD\x5E\x78\xC1\xA7\x24\xFC\x02\xEC\xC8\x67\xC9\x2C\xCA\x45\x05\x91\xC1\x0B\x6F\x24\xF0\x42\x11\xC9\xFF\x0E\x33\xB9\x17\xC9\x8D\xB9\x10\x13\x4D\xA6\x38\x74\xB5\x63\xC8\x51\xC8\x1D\x05\x90\xCD\xDE\x9D\xB4\xA5\x1E\x33\x11\xAE\xC9\x6E\xB5\x1B\xCF", -"\x7C\x75\x7A\x04\x25\xEB\xF2\x26\xC9\x15\xBB\x7D\xAD\x2D\x5A\x95\xC5\xCB\xA6\x08\x06\x02\x61\xC8\x82\xC9\x96\x10\x21\xCB\x93\xC4\xD1\x9D\x24\xE8\x91\xB3\x11\xC7\xC8\x50\xCB\x22\xCA\x96\xCE\x4B\xC1\xEE\xAD\x59\x73\xC8\xA2\x6C\xEB\x12\x1D\xCE\x91\xC4\xCF\x44\xCF\xBC\xB3\x7B\xC8\x96\xB2\x27\xCA\x57\xC6\xD7\xB5\x5C\x0A\x8E\x13\x85\xD7\xB5\x90\xA7\x9C\x8F\xB9\xB1\xA5\xB9\xC7\xBB\xD6\xA0\x93\xE2\xC9\x9F\xC5\x0A\x1C\x49\x83\x9C\x0A\x39\xC2\x18\xED\x93\xDA\xB5\xE0\xC9\xED\xC6\x46\xC1\x02\x1C\xF2\x0F\xB6\x81\xC1\x65\x03\xD7\xB4\x5F\x25\x42\x00\x3C\x21\x03\xCC\x27\xF4\x6B\xEF\xC9\xF4\xB4\x5F\xBE\x3E\x15\xB9\x90\x4F\xC5\x12\xFC\x85\xA7\x02\x9F\x95\xBF\xC3\x5C\xC7\x24\x0A\xD9\x4D\x28\xFA\x85\xC8\xC2\x27\x02\x18\xB2\x45\xCD\x30\xCA\x2A\xC6\x48\x9B\x94\xF9\xC2\x0F\xCA\xD1\x63\x39\xCD\xC1\x10\x39\xBE\xC7\x9F\x94\xCF\xC8\xD7\xB5\xE2\x0A\x81\x97\xA4\xCD\x15\xCA\x28\xDF\x60\xAC\xC2\x3F\xC6\xC8\xA5\xD5\x84\x5B\xBA\x2F\xC9\x08\x31\x81\xF4\xC3\x76\xB4\xF4\x16\xA5\xC0\x4F\xBA\xA7\xA9\xD3\x81\x93\xEF\xA1\x6E\xB4\x47\x4C\xA3\xBD\x06\x18\x35\x78\x0A\x31\x76\x8F\x3D\xF5\xA5\x33\x00\xA3\xB9\xFE\x1E\x35\x60\xC7\x08\x24\x19\x4D\x49\xCB\x7F\x00\xE4\xA5\x4B\x25\x50\xC7\xDD\xB7\x94\x90\xC4\x39\xCB\xE4\x08\x4B\xCE\x30\xCD\xE0\x0E\x31\x2F\x73\xDB\xCA\x6B\xC2\x5F\xBC\x24\x0C\x6E\x80\x56\xC0\x29\xF5\x89\xED\xB7\x36\xC7\x8D\xBC\x8F\xB8\x72\xC0\xE1\xB8\x24\xED\x24\x04\xC5\xE5\xC1\x8D\xBD\x5B\xCA\x24\xCA\xE3\xBF\x0F\xEB\x93\xA7\xB7\x6B\xCB\xF9\xC4\x01\xC5\xC1\x11\x18\xC2\x08\x03\x86\xA1\xC3\x4C\xC0\x7B\xBD\xA3\xC5\x21\xC9\x57\xD8\x1E\xED\x83\x88\xB7\x77\xB6\x2A\xC1\xFB\xBF\xDB\xB0\x00\x0F\xFF\xA6\x83\xF1\xBF\x38\xB3\x2E\xC1\x4F\xC0\x7F\xB4\x58\xD7\x08\xCC\x83\xF5\xBE\xC2\x15\x33\xC3\x62\xCD\x80\x02\x0C\xD7\x07\xD1\x6F\xD7\xCA\x89\xC2\x32\xC5\x65\xCF\x12\xC9\x0B\xC9\x36\x10\x7A\xBB\x4E\x9B\xCA\xEC\x16\x3D\xC0\x14\xCD\xF8\xAD\x02\xDF\x7D\xA9\xBA\x85\xCB\x3D\xC6\xB1\xB8\x13\xC5\x06\x0A\x04\xE9\x96\x81\x02\x8E\xCA\xB9\xC8\x5F\x3E\xD7\xB3\x09\xC1\x2D\xF2\x8E\x93\xC5\xB1\xCA\x58\xC7\x6C\xCD\xB4\xC7\x9B\x15\xF5\xA8\x7E\xB7\xC2\x89\xBE\x47\xC2\xF3\xBA\xB7\xC4\xDC\xB7\xD6\xB0\x7E\xE5\xC6\xC0\xCA\xCB\xC8\x6D\xCF\xF6\xBB\x08\xC8\x2E\xCC\x7F\xCA\xCB\x9F\xC1\xC7\xC9\x24\xC3\x16\xCE\x5A\xCF\xFC\xB0\x96\xD2\xCB\xC4\xCA\xDD\x14\xB7\xBF\xC3\x3E\x0B\xDC\x0A\xC0\x83\xBA\xBF\xD9\xCA\xE6\xCB\xD2\xBE\xD7\xB0\x15\xD3\x2C\xE4\x7C\xA3\xCB\x8D\xC7\x28\xC2\x06\xC9\xFB\xBE\x0C\xD3\x1B\x37\x96\x8D\xCB\x9D\xCA\xD6\xC9\xF8\xBB\x22\xC4\x59\xD1\x2E\xE4\x96\x83\xC8\x65\xBF\xF5\xBE\x51\x07\xBE\xC9\x5B\xCD\x08\xD0\x78\xBE\xBD\x6F\xC2\xDF\xCB\x60\xCE\xBF\xC1\x5F\xC2\x03\xC0\x98\xC5\xCB\xED\x10\x79\xC2\x79\xCC\x1E\xC8\x5E\xD1\x2B\xC6\x98\xBB\xCB\x05\xC1\x94\xBB\x5D\xCA\xAD\xC7\x11\xD8\xF1\x97\x6B\x8C\xC5\xAF\xC9\xAA\xC8\x87\xCB\xF6\xB8\x10\xD1\xDD\x88\x93\xAE\xB8\xF0\xCB\x0F\xCA\x09\xC6\x79\xB2\x11\xDD\x2E\xE3\x82\xF8\xCA\x17\xC2\x7D\xCA\xFE\xBB\x23\xC4\xE1\x1D\x08\xC8\x31\x2A\xC0\x90\xC1\x91\xC9\x84\x18\x8D\xBA\x60\xD7\x0A\xDE\x6B\xFA\x1B\x78\x3B\x3F\x3C\x8D\xCD\xAC\xC4\x27\xCD\x70\x07\x7D\x8D\xC4\x1B\xBE\xA8\xC0\x5B\xCC\xAF\x3E\x56\xDF\x01\xEB\x6B\xD1\xBE\x68\xC3\x83\xC0\xEF\xC5\xEB\x18\x18\xCE\x2F\xE3\x7F\xC3\xCA\x11\x10\xC9\xBA\x64\x17\xA8\xC7\x71\x5E\xF6\x8A\x76\xBC\x3B\x2B\xC1\x8E\xCB\x71\xC6\xE5\xB7\xBA\xAA\x32\xFA\x95\xA6\xC1\x96\xC7\x0A\x1F\x96\xBD\xC7\xC9\x0D\xC5\x33\xE0\x97\x8F\xCC\xBA\x16\xC5\xCB\x3F\xC4\xB1\xC5\x61\xC1\xDD\xAA\x97\xD0\xBF\x5C\xC0\xFE\xCB\x7B\xCB\x52\xC6\x66\xC6\x2C\xF8\x82\xF0\xCC\xC6\xBE\xED\xBC\x75\xAA\xB3\xC3\x67\xD0\xF7\xB6\x99\x97\xCC\xCD\xCB\x06\x1C\x68\xCE\xCA\xC9\xE1\x09\xE9\xBD\x99\xB2\xCB\x87\xCB\x11\xC2\xF1\xC7\xB4\xCE\xD2\x24\x30\xF9\x97\xDA\xCB\xBE\xBC\x41\xC3\x31\xC3\x71\xC9\x64\xCF\x33\xF3\x97\xFA\xBF\xB6\xCB\x42\xCC\x39\xC7\xD0\xC3\x29\xC7\x30\xDE\x7E\x82\xCB\x9C\xCD\x86\xC3\xA3\xCA\xB8\xC1\x69\xDC\xD7\x89\x96\xA7\xBF\x97\xBE\x51\xCC\x76\xCE\xC2\xC5\x6A\xD8\x30\xCE\x6D\xFA\xCC\x03\xC2\x37\xCF\x7F\xCF\xD3\xC9\x0A\xD4\x2E\xD6\x9A\xAB\xCB\x98\xCD\x6B\xB6\x52\xC3\xD3\xCD\x66\xDD\x34\xFB\x9A\x99\xC2\xFA\xBF\xF1\xC9\xDA\xB2\xD6\xC5\x0F\xD1\x05\xFA\x97\xC5\xC1\xB8\xCD\x46\xCE\xAE\xCD\xC1\xC3\xF7\xA1\x2F\xC1\x9A\xF5\xCB\xCA\x05\x5F\xCE\xB3\xC9\xD8\xCB\x5F\xCE", -"\x31\xF5\x82\xD3\xCD\x2A\xCC\x07\xCC\xAF\xCA\x17\xC0\x0F\xD4\xDF\xA1\x83\xD6\xCB\x8D\xB7\x69\xC3\x23\xC4\xDB\xC1\xE1\x09\x30\xCC\x9A\xA1\xCC\xC6\xCC\x6A\xCD\xB9\xC8\xB1\xC6\x3C\xD1\xF8\xAC\x3F\x6C\x00\xDA\xCC\x6A\xC3\xB3\xCD\xC2\x16\x17\xC4\x20\xDB\x98\xAA\xCD\x1D\xCD\x6E\xB6\xD8\xC3\xCF\xCE\x63\xC4\x20\xEB\x9A\xBB\xC8\x13\xC1\x95\xBF\x89\xCD\x34\xCE\x68\xC1\x38\xFF\x78\xAD\xCC\xA8\xCD\x62\xCC\xC0\xCB\xF6\xB2\x63\xC9\x05\xC3\x99\x8C\x1C\x36\xCD\x24\x3E\x4D\xC3\xC2\xC4\x64\xC1\xD7\x90\x9C\xF2\xC0\xC5\xC9\x04\xBC\xA0\xCC\x06\xC9\x63\xCD\x1D\xE7\x95\x81\xB8\x69\xCB\x86\xC1\x82\xCB\xC9\xC8\xD8\xA2\x23\xCA\x79\xCF\xCC\xB4\xCC\x81\xC7\x5C\xCD\xC4\xC5\xE1\x15\x32\xF5\x93\x8B\xBE\x10\x1D\x43\x17\x6B\xB9\x0F\x04\xD9\xB3\x9E\x47\x53\x5E\xCC\xA8\xBA\x30\xCD\xC9\xCA\xCC\xC1\x1F\xD3\x22\xDB\x7C\xAB\xCE\x67\xCD\xB9\xCA\xAF\xBB\xCD\xCF\x6E\xDF\x71\x29\x74\xC8\xCE\x7E\xCD\x43\xC2\xB5\xCE\xDF\xB1\xB6\x1F\xD7\xB9\x9B\xEB\xCD\x77\xCC\xD2\xB5\x85\x1A\xB2\xCF\x34\xCA\x39\xDE\x9A\xC8\xCD\xA9\xC0\xBB\xBD\x9F\xBC\xD9\xC5\x67\xDB\x38\xEF\x81\x95\x1C\x8B\xCD\xAE\xCF\xA4\xC0\xEA\xC0\x69\xDF\x33\xE3\x9B\xA6\xCB\x86\xBF\x48\xBC\xD9\xCA\xDD\xCB\x5C\xC8\x34\xEB\x97\xAD\xCB\x11\xCF\x39\xC3\xE9\xB4\xED\xCC\x6A\xCE\x3B\xE0\x9D\xE4\xCD\xA1\xCC\xA2\xC1\xBA\xCE\xFD\xB7\x69\xD9\x3A\xE7\x83\xB8\xB2\xBD\xCB\xA6\xCE\xC2\xBC\xEF\xC8\x70\xCD\x35\xF4\x79\x81\xCC\x9A\xC1\xE3\xC8\xC7\xCB\x1C\xC3\x6B\xC4\x35\xF2\x9C\xB6\xCD\x11\x1D\xE7\xCA\x68\xCB\xED\xCF\x75\xD4\x37\xEF\x83\xBE\xCD\x73\xCE\xC2\xCC\xB0\xCE\xF0\xC0\x59\xD1\xDE\x83\x9B\xEC\xCC\x7A\xCF\xA3\xCD\xE7\xCA\xD2\xCF\x0E\xCA\x36\xCA\x7F\x82\xCF\x57\xC0\xD1\xCF\xB6\xCC\xF4\xCB\x5D\xD5\x70\x2D\x97\xEA\xCE\x02\xC6\xC6\xCF\xD1\xC3\xDF\xB3\x75\xDB\xF6\xAD\x7B\xCF\xC1\x57\xCF\xBA\xCD\xAD\xC9\xD1\xC3\xB8\xB1\x36\xF0\x9B\xDE\xCE\xC7\xCC\xCF\xCD\xF6\xBE\xE5\x07\x6E\xD3\x3C\xC9\x97\xCD\xCD\xFA\xCC\x76\xCC\x3A\xC6\xDB\xCA\x0E\xDB\x3B\xEB\x9E\xAE\xCD\xF5\xCD\x08\xCF\xBD\xC9\xF8\xC9\x5E\xD6\x3B\xF8\x99\xA5\xB7\x1A\xCD\x90\xCC\xE7\xCC\xC4\xC2\x70\xDF\x30\xD7\x92\xE2\xCF\xB9\xCE\x87\xCC\x05\xC3\xE1\xCE\x45\xCA\x3D\xE4\x9F\x8F\xCE\x34\xBE\xE3\xCE\xD3\xCE\xFA\xC4\x71\xD4\x2D\xD7\x9C\xBF\xBE\xC1\x35\x14\xC2\xD9\xCA\xCA\xC3\x65\xD1\x27\xDB\xC9\x21\xC3\x3C\xCC\x33\xB8\xF5\xB4\xE1\xC9\x10\x1B\xDE\x91\x9C\xB3\x11\x06\xD1\x70\xCF\x7F\xBD\xF8\xB8\xD2\xA3\xDF\x95\x36\xE5\xB7\x1E\xAE\x33\xBA\x75\x5C\xAB\xBF\xBE\xA7\x40\xEA\x6F\xA0\xC7\xD7\xBB\xB7\xCD\x1F\x1E\xD2\xB8\x17\x66\xE3\x9D\x81\xDC\xBA\xFF\xB6\xA8\xBA\xC4\x20\x03\xDF\xE2\xB6\x36\xCD\xA0\xF3\xC5\x28\x77\x95\x66\x19\xB8\x31\xCC\xD5\xB8\xD6\x96\xA0\x91\xB8\xF5\xCE\x13\xD2\xA5\xBB\x97\xCB\x6B\x66\x59\x26\x71\xA0\xCB\x5C\xBA\x11\xBB\xF8\xB9\x84\xB1\x63\xCC\x40\xD6\x7A\xFD\xA5\xE8\x16\x33\xBA\xA6\xC8\xC1\x11\xF1\x14\xE1\xAF\xA0\xAF\xB8\x3D\xD0\x6D\xB4\x50\x1B\x87\xBD\xB0\x04\xDF\x84\xF6\x00\xB5\x3F\xB9\x1D\x1D\x5F\xCC\x95\xC6\x10\x09\xE2\x87\xA1\x83\x02\x56\xD0\x05\xD0\x46\xC2\xF9\xC4\xBF\xA7\x41\xFF\x94\x9B\x60\xF1\x16\x86\xB8\xFA\xC8\x00\x0A\xC5\xA2\x41\xC6\x04\x65\xD0\xF2\xCD\x6A\xCA\x45\xBF\x9A\xC8\x03\xDC\xE2\xB7\x7E\x51\x10\x3B\x1C\x1E\xCC\x57\xBE\x8D\xB7\x85\xC2\x08\x34\xA1\xDA\xD0\x15\xCF\x46\xBE\x17\xD4\xAE\xBC\x6A\xB4\xCD\x72\x0C\x66\xB8\xF7\xC8\x83\x03\x1E\xBE\xAB\xBF\xC7\xB2\x37\xFF\x88\xFD\x15\x85\xB9\x36\xC0\x38\xCA\x91\xB3\x86\xD2\xE4\x84\x9C\xEE\xD0\x91\xB9\x24\xD0\xA0\xCB\x0F\xDD\x3C\xD0\x1B\xF9\x5C\x1C\xB9\x0D\x17\x26\x46\x64\x5C\x7C\xC8\x82\xD3\x11\xE5\x16\x3B\x1C\x19\xC8\xF8\xBA\x2A\xBE\x0C\xD3\x10\x08\xE5\xB1\xA0\x93\xD1\x3F\xD1\x60\xB8\x28\xD3\x0C\xDA\xCB\xB5\x43\xC1\x04\x2D\xD1\x78\xD0\x1F\xD1\x59\xBD\x7E\x52\xCC\xA8\x31\xC2\x04\x48\xB9\xAE\xD0\x00\x00\x2E\xD1\x16\xD2\x83\xD3\x45\xEA\xA2\xB4\xC1\x11\x1F\xD7\xC5\xAE\xC8\xE5\xC5\x70\x12\x44\xD4\x38\x5D\xB9\x07\x3B\xFB\xCF\x81\x1B\x9C\xB3\xED\x23\x0A\xEE\x7E\xE8\xB9\x63\xD0\x76\xB9\x1B\xD7\xAB\xC1\x75\xC6\x05\xED\x72\xF3\xB9\x1F\x3A\x4B\xBD\x0F\xBA\x35\x5A\xCF\xBB\x71\x2B\x99\xDC\xBA\xFF\xB9\x36\xD2\x39\xB4\xE5\xCB\xF4\xAA\x43\xFB\x5B\x88\xBA\x06\xBD\xAA\x68\x77\x4A\x0C\xD3\x16\xCF\xE8\xA4\xA2\x91\xBA\xB3\xBE\x73\xD3\x3B\xA0\x98\xCD\xD9\xB0\xE4\x89\x68\x8D\x03\x1B\xBB\x31\xD1\xD7\xC3\x21\xC0\x89\xDE\xE8\x86\xA3\xFF", -"\xCE\xF9\x0A\x2D\xC1\xFC\xC0\x7C\xC6\xD6\x0E\xE9\xBE\xAE\x1D\xC7\x32\xBB\x6D\xB4\x50\x1D\x71\x4E\x0C\xD9\xD9\x3B\x74\xBB\x1C\x3D\xBB\x4A\xCA\x9E\x54\xCD\xC3\x8B\x13\x48\xE4\xA3\x8B\xBC\xB2\xD1\x36\xC0\x12\xCB\x21\x1C\xD4\xA3\x43\xD2\x75\xE1\xBB\xE3\x95\x53\xD2\x06\xD1\x20\x04\x89\xCA\x21\xDE\x8F\xE8\xBA\x3B\x1D\xAD\xB9\x25\xCF\x23\xDD\x86\xC3\x1A\xC9\x9D\xDB\xB9\x19\xD3\xFE\xC6\x27\xD7\x8E\xBA\x9C\x04\x40\xC6\x04\x7E\xC2\x14\xD3\x93\x00\x4E\xD7\x22\xDC\x2A\x12\x47\xE8\x17\x42\xBB\x98\xCC\xBD\xBB\x18\xD1\xC1\xCE\x6B\x13\x45\x3A\x9E\xE8\xC6\x19\xD0\xEF\xC8\xFE\xB6\xB0\xB5\x72\xDA\xD6\x9F\x99\xA1\x2C\xCE\xD0\xC7\xCC\x64\xBF\x04\x2A\x65\xD0\xED\x8E\x27\x15\xBB\xB4\xBA\xB1\x06\x4D\xD2\xB3\xB4\xE7\xB3\x45\x07\x9C\xBB\xCF\x25\xD0\x27\xC3\x52\xD4\xB4\xBD\x94\xD9\xF0\x81\x9D\xD0\xD2\x1C\xBC\x2C\xCE\xF4\x15\x2A\xDC\x73\xCE\x4E\x32\x76\xCF\xBB\x35\xD3\xF6\xCC\xC5\x96\xAB\xB1\x5C\xCD\x3C\xFE\x76\xEE\xC9\x8E\xC8\xA0\xD0\xED\xCD\xB8\xB3\x86\xC4\x09\xE8\x95\xAA\xC4\xF2\xCD\x40\xCA\xBC\xCE\x8C\xB1\xDD\xB5\x24\xD3\x77\xED\xD0\x61\xBF\x97\xD3\x50\xB9\x84\xCD\x31\xDD\x21\xFB\xA5\xDD\xBB\x63\xD0\x98\xC3\x5F\xD0\xE7\xC6\x43\xD0\x49\xCE\xA5\x81\xBC\xF5\xBA\x50\xC3\x7A\xBC\xA6\xB9\x72\xDB\x10\xE2\x9C\xBC\xD1\x66\xD3\x06\xBD\x66\xD0\xD3\xC8\xDF\xB7\x39\xFA\x29\x6E\xC6\x04\xC9\x11\xBF\xB6\xB2\xC3\xB7\x21\x07\xF1\xBE\x38\x40\x0C\x44\xC7\x1C\xC6\x20\xD7\x1F\xDC\xE0\x0C\x4D\xC2\x67\xA0\xC1\x12\xBC\xD3\xD1\x25\xCC\x27\xDC\xC4\xAB\x4D\xD8\xA6\x9B\xBC\xB8\xD2\x0F\xBD\x67\xD0\x30\xDF\x99\xC5\x1C\xCB\xA6\x8A\xD3\xC2\xAE\xC7\xD2\xF7\xCC\x60\x09\xE2\xBA\x4D\xED\x78\xA0\xD3\xC7\xD1\xF4\xC1\xB5\x0A\x19\xDD\x71\xD0\x3F\xCD\x38\x31\x16\xC2\xD1\xEA\xD1\x4B\xCF\xE4\xC9\x1A\xC6\x1D\xE7\x6E\xBB\xD2\xC8\xD2\xD3\xBA\xCB\xCB\x2B\x10\x57\xD6\x3C\xE9\xA6\xCC\xCC\x74\xCB\xE8\xB6\x94\xBA\xC4\xCD\x10\xC0\x4F\xD5\xA3\xCA\xCE\x81\xCA\x90\xCC\xE8\xBB\xE3\xBE\x9E\xCD\x3B\xD2\x9D\xA3\xCE\xEA\xBF\xAA\xCE\x99\xB9\xF4\xCC\x58\xC5\x30\xC3\x9F\xF7\xCE\x79\xCC\xEA\xCC\x45\xC7\x47\x15\x9F\xDD\x3B\xF7\xA7\xA3\xD2\xD7\xCD\xCC\xC8\x9F\xBA\x62\xBC\x9F\xDC\x2C\xE3\x9E\xCB\xD3\x87\xCF\xCF\xCA\xFC\xCA\xE1\xB5\xA0\xD6\x4B\xC7\xA8\x80\xD2\xB7\x12\x4A\xCF\xD1\x4C\xFB\xC1\x73\xC7\x4F\xC4\x9F\x95\x1C\x43\xD0\xC5\xCD\x4A\xBD\x42\xD0\x96\xC3\x2E\xF8\xA7\x95\xBF\xA3\xBD\x58\xCC\xEC\xCA\x0D\xC2\x7B\xD1\x3E\xFB\xA5\xA7\xCD\xF2\xD2\xB1\xD0\x7D\xD7\xFA\xCF\x78\xD0\x30\xD1\x9E\xAA\xD4\xE8\xCD\xD8\xCD\x7F\xD5\xF0\xC0\xA1\xC5\x3D\xDD\x3D\x1A\xCF\xBF\xCA\x81\xC4\x89\xD0\x29\xD8\xFF\xA7\x51\xE5\x97\xC9\x7C\xFB\xC6\x0E\xD6\x79\xD0\x10\xC5\xE1\x07\x3D\xE2\xA8\xDF\xD3\x34\xD5\x44\xBD\x33\xC0\xF9\xBD\xED\xAD\x50\xEA\x96\xB3\xCF\x3D\xD5\xDA\xCC\x4E\xB7\xF6\xC0\x5D\xC2\x52\xD1\xA9\xAD\xBE\x53\xD5\xED\xBE\xBB\xBE\x4A\xD8\x5B\xDC\x51\xFF\xA7\xDF\xCF\xD6\xC1\x09\xD7\x88\xD7\x4B\xD6\x01\xC4\x37\xCC\x9F\xEC\xBF\x64\xD4\xFC\xCB\x83\xD7\x4C\xDA\x75\xD8\xC9\xAE\x9B\xB8\xCF\x04\xC9\x21\xD5\x5A\xD4\xB6\xC6\x6F\xCD\x7F\x0A\xA9\xFB\xCF\xA6\xC0\x5F\xBD\xBF\xC9\x31\xDD\x8E\xCD\x4F\xCE\x9C\xCA\xC8\xAB\xB7\xF3\xCD\xA1\xD3\x52\xCA\xA7\xCD\x4A\xEB\x9F\xA7\xBE\x63\xD0\x02\xD7\xA1\xD2\x2E\xCD\x01\xCA\x53\xD0\xA9\xA2\xD2\x18\xD4\xDD\x14\x75\xD4\x82\xC2\xC0\x01\xFA\x9F\x84\x82\xD2\x68\xCC\xED\xD3\x57\xC5\xC1\x15\x35\x85\x41\xBF\x9B\xDF\xB5\x88\x12\xE0\xA8\x07\x5B\x82\xC8\xFB\x4D\x55\xFB\x40\xC9\xC8\x88\xD5\x08\x1C\x93\xC4\x5E\xB0\x49\x1F\x51\x15\x86\xB8\xCA\x94\xC6\x39\xC6\x1F\xBE\x6D\xCB\x9A\xA3\x0E\x3F\x28\x46\x01\x6E\xC7\x18\x97\x8F\x15\xD9\x90\xAE\xBC\x52\xBF\x28\x35\x41\x08\xC9\x1C\x03\x8F\x10\x18\x04\x82\xD7\x41\xBF\x28\x3E\x01\xCD\xD4\x42\xA3\x0D\x07\x47\x1C\x0B\x11\x56\xCD\x42\xB6\x00\x3F\x14\x5D\x02\xB5\xD1\x6F\xC5\x03\x1F\x51\x38\x02\x5B\xD5\x03\xC6\x1A\x03\x8F\x16\x16\x00\xAE\xC0\x14\xC5\x5A\x14\x66\xE5\xD4\xE5\x92\x0C\x07\x47\x12\x0B\x09\x57\xFE\x29\xE9\xC4\xE2\x08\x2B\xC6\xBC\xC6\xFB\xCD\x26\xDA\xD6\xAF\x89\xCE\x13\x5E\xC4\x8A\x01\xE8\xC5\xC2\x12\x26\xD4\x55\xE9\x74\xB7\xD5\x58\xCB\x5C\xD7\x97\xC3\x57\xD2\xAE\xBD\x55\xCA\x05\x3F\xD5\xC1\xD4\xD2\xB3\xB0\xD1\x61\xD3\xA7\x82\x4C\x87\xAB\xEE\xD5\x3F\x44\x65\xD7\x49\x04\x59\xD0\x33\xD8\x01\x0F\xAB\x90\xD6\x6F\x8E\x6A\xD4\xC6\xD1\xCB\x89\xAD\xDB\x58\xFD\x14\xDE\xD5\x1E\xD6\x53", -"\x8B\xB8\xD1\x64\xD7\xAE\xC9\x08\x34\x02\x21\xD6\xEB\xD5\x93\x01\xBB\xD0\x66\xC9\x2B\xD7\xC9\x81\x8B\xA2\x8A\x08\xD3\x62\xC5\xC7\xB4\x27\x00\x27\xDE\x06\x7A\xAA\xE8\xC4\xA3\xD5\x08\x1C\xFF\x0F\x4E\xC1\xAE\xB5\x55\xE7\x04\x00\xD6\x2D\xC4\x18\x8B\x8F\x10\x19\x0C\xAB\xC6\x1F\x54\xBF\x01\x02\xC0\xD4\x71\xB6\xB0\xD7\x24\x04\xAC\xDF\xD6\x86\xAB\xA7\x02\xC8\xD5\x0F\xCA\x3A\x93\x59\xD1\xB2\xD6\x58\xE7\x04\x50\xD5\x30\xC7\x69\xD6\x7E\x81\x64\xD8\xAD\xC3\xA1\xA1\xAC\xDD\xD5\xEB\xA7\x90\xD6\xB8\xD5\xE2\x74\xB2\xDF\x51\x27\xAC\xB0\xC6\x29\xD7\x84\x03\xCA\xD0\x81\xC1\x03\x17\x1E\xF6\xA7\xBD\xC6\x82\xC5\xE1\x0D\x79\xD1\x85\xC8\x3C\xCE\x0A\xE7\x04\x20\xCC\xDD\xB4\x9F\xD7\x5D\x2C\x5E\xB5\xBF\x43\x5A\xC5\xAD\xB4\x59\x47\xD6\x00\x01\xD2\xD1\x5C\xBB\xB4\xDF\x22\xCC\xAC\x88\xB4\x0E\xD6\xA8\xD5\xC8\xD2\x62\xD9\x10\x14\x58\xC8\x90\xD6\xD6\x09\x02\xAC\xD4\x02\xCA\x6B\xD9\x10\x15\x56\xF0\x8C\xDD\xD6\x09\x02\x6D\xD4\xCC\xC0\x6C\xD9\x10\x1F\x56\xF0\x8C\xE3\xD6\x09\x02\x72\xD4\xCC\xC5\x64\xD6\x10\x07\x5B\xC8\x90\xE9\xD6\x06\x03\xB5\xD6\xD4\xD5\x8F\x5E\xB6\xC6\x50\xF0\xAD\xDB\xB5\x97\xC4\x93\x96\x4D\x47\xF8\x25\x32\xDC\x54\xC8\x8A\x98\xCA\x09\x02\x51\xC5\xB7\xB6\xC5\x06\xAB\xDC\x5B\xC2\xAD\x84\xD6\xE1\xB4\x83\xD4\x48\x00\x61\xDA\xB4\xCA\x58\xCC\xAD\x87\xD7\xF6\xD1\xC4\xD5\x42\x01\x6A\xD6\x9C\xD1\x58\xD4\xAD\x95\xD6\x17\xD7\xAC\xD6\xC6\xD7\x72\xDD\xB1\xDB\x5C\xE0\xAC\x9F\xD7\x23\xD7\xD1\xD6\xD9\xD0\x65\xDC\xAE\xC1\x59\xED\xAD\xEF\xC7\x17\xD3\x54\xC7\x64\xC3\x55\xC4\xAF\xBC\x5D\xFF\xAC\xBE\xD7\x02\xD6\x7D\xD4\xF0\xD0\x5C\xB2\xBC\xCE\x03\x04\xAF\x84\xD7\xC6\xD6\xC3\xD5\xF1\xD5\x61\xDE\x96\x8F\x58\xF0\x8C\x8C\xD7\x06\x02\xC7\xD7\xEA\xD0\x0E\x00\xB9\xDD\x40\x61\xAC\x94\xD7\x06\x02\xCB\xD4\x02\xC8\x73\xD1\x45\xBF\x5A\xD7\xAF\x88\xC8\xA0\xD6\xA8\xA9\xD9\xD0\x5D\xD8\xB6\xDD\x5E\xEC\xAC\xAD\xD7\x16\xD5\x9E\xC7\x91\xC2\x5C\x1C\x9E\xDF\xD6\xA9\x2C\x44\x97\xF1\xC4\x56\xD5\xB8\xC3\x85\xC3\xA6\x25\x3F\xCD\x38\x2D\xD6\x84\x14\x7F\xD7\xE9\xB0\x68\xD8\x35\xDF\x5D\xC9\x04\x44\xD6\x05\xD6\xA3\xD7\x49\x11\x21\x03\xB8\xC5\x56\xF1\xAF\xCE\x9D\xC8\xD7\xCE\xBB\x64\x96\x7E\xD9\xAC\xCF\x5E\xCF\xAE\xD1\xD7\x93\xD7\xE9\xD7\x00\xDD\x7A\xD8\x40\xDC\x5C\xC6\x04\x1E\xD7\x08\xD9\xEC\xD4\x02\xCC\x74\xD3\x10\x06\x5D\xFB\xAF\xA8\xD7\x03\x02\xD5\xD5\xF3\xD6\xC6\x60\xAF\xD0\x61\x32\xAB\x9A\xD8\x67\xD5\x7A\xD7\x4D\xB3\x4B\xC8\x2C\xCD\x69\x3B\xAB\xB8\xB2\xCC\xC4\xC1\x08\x2C\xCF\x5F\xD8\xBE\xCE\x7F\xA3\x69\x7E\xD6\x29\xD8\xC0\xD7\x0A\xDE\x20\x0D\xC2\xCE\x5A\xEF\xB0\x83\x02\x4D\xD6\x6F\xB7\xD3\xD3\x79\xDB\xB8\xD6\x61\xFB\xAF\xFD\xD7\x3F\x6F\xFF\xD6\x0E\xDB\x7F\xD4\xC0\xC3\x08\x1A\xAE\xBD\xD8\x07\xD9\xFD\xD5\x02\xDD\x22\xBB\xC0\xC6\x59\xDC\xAF\xAA\xD6\xDE\xD6\x08\xD9\x89\xD3\x75\xC5\x30\xDC\x21\xED\x25\x59\xC5\x62\x02\xE4\xC4\x85\x1B\x64\xC6\xE0\x54\x5B\xC1\x73\xE4\xC5\x48\xC5\x6F\xB6\xDE\xD6\x20\x04\xC2\xDA\x1D\xE9\xAF\xC7\xD4\x01\x02\x14\xD9\xF0\xD2\x85\xDC\xB1\x2C\x61\xF1\xB0\xA1\xBA\x0C\x6D\xEF\xD6\xFC\xD0\x7E\xD4\xBF\xCE\x4C\xB4\xB0\xFB\xD7\xF8\xD7\x81\x02\xFE\xD3\x89\xD0\x82\x98\x61\xFB\xAF\x80\xD8\x03\x02\x01\xD8\x1D\xDC\x87\xDB\xBF\xDE\x61\xC3\x04\x40\xD8\x7A\xD8\x21\xDB\xFE\xD4\x88\xD2\x10\x06\x62\xEC\xB2\xCA\x6C\x0E\xD8\xB6\xD6\x20\xDC\x48\xD9\x3D\xCE\x17\xCD\x14\x70\xC5\x8E\xD9\x4B\xDA\xAF\xBF\x5E\xCA\xC5\xD4\x22\xDC\xB1\x93\xC7\x5E\xD9\x9E\x2C\x18\xDB\x93\xD2\xC6\xDD\x64\xE4\xB1\x9F\xD9\x90\xD0\x3A\x97\xC2\xD3\x7E\xD8\xB8\xD5\x5F\xCA\xAE\xF7\xD7\x6E\xD9\x5F\xD8\xFF\xD6\x95\xD2\xCE\xD0\x65\xC2\x04\x32\xD9\xE2\xD9\x3A\xDA\x40\x07\x8E\xD5\xCB\xD9\x63\xE2\xB3\xFB\xD8\x02\x02\xD1\xD7\x10\xDB\x7B\xDD\xC0\xC0\x64\xCF\xB0\xE0\xD7\xE1\xD2\x29\xDA\xEB\xD2\x4C\x18\x30\xC1\x83\x0A\xB2\x90\x1C\x8C\xD9\x6F\xC4\x27\xD3\x83\xD7\x92\xD6\x20\xD1\x38\x13\xC6\xA7\x0A\x67\xDB\x08\xDD\x8B\xDE\x3C\xD7\x59\xC6\x04\x1A\xD9\xEC\xD6\x4E\xD9\xCF\x46\x93\xDC\xCD\xC9\x5E\xFD\xB1\x22\xD9\x30\xD9\x8A\xDA\x0C\xDA\x79\xD6\x10\x0C\x5E\xD5\xA6\xB6\x43\xA9\xD8\x81\x03\x2A\xDF\xA3\xD2\x0E\xA4\x67\xE4\xB4\x99\xD6\x5B\xD6\xEA\xD6\xD7\xD6\x7A\xD1\xB6\xD8\x5E\xE4\xAD\xDA\xD7\x0C\xD9\xD3\xD5\x30\xDB\x7F\xD8\xD1\xC3\x08\x35\x90\x9C\xC8\xB5\xC5\x42\xD9\x63\xD5\x2D\x1F\x31\xCD\xDB\x3F\xB3\x8C\x1C\x01\xDB\x7C\x97\x88\xC6\x76", -"\xD7\x32\xD7\xD6\xA9\x8C\xBC\xA1\xE5\xD7\x67\xD8\x76\xC6\x84\xDF\xD0\xDF\x5B\xEC\xED\x01\xD7\x65\xD8\x35\xDB\x19\xDA\x20\x09\xC6\xDD\xD6\xAB\xB1\x9D\xDA\x6D\xD9\x89\xD5\xD5\xD6\xA4\xD8\xD3\xCA\x4E\xA6\xB3\x81\x02\xE8\xD9\x93\xD8\xC7\xD3\xA5\xD8\xC7\xCD\x69\xC1\xB1\xAF\xDA\xF3\xD9\x98\xDB\x11\xDB\xA6\xD2\xCE\xD5\x69\xC2\x04\x37\xDA\xE1\xD7\x4A\xC6\xCC\xC7\x24\x08\x38\xDB\x5D\xCA\xB5\xE6\xC3\x4C\xDB\x81\x00\x44\xDF\x5B\xBD\xBE\xCF\x5F\xEE\xB0\xA5\xD9\xCF\x3F\x6D\xD8\x29\xDD\x9B\xD6\xCA\xDF\x66\xF5\xB0\xDA\xDA\xD0\xD7\xAB\xD6\x1C\xD9\xA5\xDB\xC3\xC4\x6B\xED\xB3\xE6\xDA\xB9\xD8\xB4\xDB\x2E\xDC\x9E\xD2\xD3\xD6\x67\xC2\xB3\xF8\xD9\xEF\xD2\xC3\xC7\x8E\x18\x68\xC1\xD5\xA9\x6A\xCB\xB4\xD0\xD9\x0D\xDB\x81\xD7\x09\xDE\xA9\xDD\x4F\xD0\x6A\xD8\xB3\x99\x0C\xDA\xD9\xE3\xD6\x46\xD8\x94\xD3\xC3\xC6\x6C\xE8\xB2\xE1\xD9\x62\xDA\x6D\x90\x57\xD9\xAE\xD1\x75\x93\x63\xE9\xB3\xB4\xD9\xE2\xD8\x5B\xDA\x40\x00\x97\xDF\xCE\xDA\x65\xE2\xB3\xBC\xD9\x01\x02\x5F\xD9\x6C\xDD\xCB\x6C\xD6\xC3\x6E\xEE\xB5\xAA\xC3\x21\xD6\xA6\xC4\x02\x8A\x84\xDB\xF1\xB5\x64\xDA\x6B\xFD\xD6\xEB\xD6\xBE\xDA\x44\xDB\xC6\x0E\xD7\xC6\x63\xC0\xB6\xC7\xDB\x00\x01\xAA\xD8\xB7\xB7\xAA\xD3\x10\x1E\x68\xDD\xB5\xA0\xDA\xB0\xDB\xEF\xD9\x49\xDA\xB1\xD2\xBD\xCC\x6C\xF3\xB2\x8E\xDB\xB9\xDA\x77\xDB\x70\xD8\x9E\xD1\x10\x12\x67\xD3\xB6\xEA\xDA\xE2\xD8\x24\xDA\x40\x02\x89\xD6\xDC\xC3\x66\xC8\xA4\x92\xC7\x4B\xDB\x4B\xD8\xCD\xC8\x27\xBB\x35\xDE\x47\xE0\xB6\x93\xC5\xCE\xDA\x8E\xC1\x5E\xDA\x20\x0B\xD7\xDE\xD6\xBD\xB5\xA7\x02\x51\xDA\xAB\xDB\x54\xD9\x20\x0A\xDD\xC8\x0F\xC0\xB6\xB9\xC6\x58\xDA\x70\xD8\x62\xDF\x86\xD4\xDE\xD9\x61\xE6\xB7\xB7\xDB\xE8\xDB\xE1\xDA\x6E\xD9\x20\x0C\xDB\xCB\x6F\xFE\xB6\xC3\xDB\xC0\xDA\x00\x02\x70\xDA\xBC\xDC\x64\x65\x6E\xE4\xB8\xF9\x6C\x03\xCE\xF7\xB4\x73\xDD\x21\xC1\xE0\xD5\x31\xC3\xB8\x99\xD9\xA4\xDB\x13\x20\x49\x35\xBA\xD2\xD5\xD7\x6E\xC2\xB6\xFF\xDA\x84\xDA\xF3\x2B\x29\xDA\x9C\xD1\xD2\xC1\x08\x23\xB4\xA7\xDC\xB2\xDB\x0A\xDF\x2B\xDE\xB6\xD3\xDC\xCA\x67\xC1\x04\x6C\xD9\xE9\xDA\xC8\xD9\x6F\xDA\xB2\xDF\xDB\xD4\x6C\xEB\xB5\x96\xDB\x34\xDA\xFB\xD8\x96\xC6\x7D\xCA\x23\xDF\x6F\xDC\xB0\x91\xC6\x0D\x1D\xB9\xC5\x99\x76\xB3\xDD\xDC\xCC\x68\xD6\xA2\xA2\xDB\x4D\xDB\x30\xDB\x53\xDB\x8C\xD3\x10\x09\x70\xDB\xB7\x8B\xDC\xD9\xDB\xD3\xDA\x72\x92\xC7\xDE\xDA\xDC\x71\xE1\xB7\xB4\xDB\x70\xD9\xE8\x77\x62\xDD\x72\xDC\xB5\xD8\x6D\xDA\xB8\xEA\xDB\x40\xDC\x91\xD4\x93\xD8\xC4\xDE\xE4\xD1\x6F\xE6\xB8\xB4\xDB\xD8\xDA\xB8\xD9\x3E\xD8\x16\x4E\x37\xC7\x09\x23\x8E\xA6\xC2\x77\xDA\x5C\xD5\x34\xDF\xE2\x23\xCD\xD1\x68\xD5\xB3\x93\xDA\xD7\xD9\xD5\xD9\x36\xDA\x53\x97\xE3\xD6\x6E\xF9\xB8\x90\xDC\xDD\xDB\xAC\xD9\xE3\xD3\xAB\xD2\xE4\xC5\x67\xC4\xB9\xF9\xDC\x46\xDC\x00\x00\x92\xDF\xCE\xDA\xE4\xDE\x70\xFB\xB9\xF9\xDC\x21\xDD\x11\xDC\x6D\xDA\xBE\xD1\x10\x14\x6F\xF9\xB9\x81\xDD\xC9\xDB\xC3\xC7\x49\x02\x71\xC9\xB7\xC9\x74\xC1\xAC\x8B\xDD\x0E\xDA\xBD\xD9\x8C\xDB\x18\x53\xE3\xC8\x70\xEA\xB9\xFE\x94\xD8\xDB\x06\xDE\xB6\xB4\xBB\xD2\x10\x1E\x6E\xF4\xB6\xBD\xDC\x00\x01\x1F\xDC\x9C\xDB\xB6\xD3\xE8\xD5\x6D\xD7\xB8\xC5\xDC\x76\xDD\x3C\xDF\x86\xD8\x00\x0D\xE1\xD9\x73\xEC\xB7\x80\x00\xEE\xDB\x26\xDC\x7C\xDB\xB8\xDC\xEA\xC0\x00\x2E\xBA\x80\xDD\x52\xDD\xE7\xBE\xF5\xC0\x87\xC6\xE5\xC5\x68\xFD\x5C\x69\xCC\x38\xB2\xCC\xC7\xFC\x87\x5B\xB6\xBE\xDB\x5B\xE5\xBB\xF7\xC7\x5F\xD9\xE8\xDA\x81\xDB\xBA\xD9\x2B\x14\x71\xCA\xB8\xB6\xDC\xAA\xDB\xC1\xDA\x45\xDD\xB0\xDC\xC6\xD2\x70\xDB\xBA\x89\xDB\x91\xD7\x39\xDD\x00\xDD\xCE\xD9\xE1\xD2\x76\xF8\xB9\xB4\xDB\xD7\xDD\x6C\xDC\x9F\xDB\xDB\xD9\xE7\xDD\x76\xDF\xBB\xCD\xDD\xB0\xDC\x9C\xC6\xAF\xBF\xD0\xD6\x10\x05\x1D\xC6\xB3\x9F\xDB\xF9\xDA\x5C\xDC\x98\xDA\xD7\xD2\xE6\xC5\x6D\xE4\xB9\x82\x02\x66\xDC\x07\xDD\x8E\xD9\xD8\xDF\xEB\xCA\x4F\xBB\xB8\xC3\xDB\xC8\xDC\x65\xDD\xB3\xD9\xCE\xD1\x10\x12\x5C\xC3\xB9\xCF\xDD\xA0\xDD\x68\xDC\x6D\xDB\xDA\xD5\xED\xC8\x78\xDF\xB8\xA8\xDD\x7D\xDC\x6E\xDF\x9F\xD8\xE2\xD1\xEE\xD7\x33\xEB\x74\xAC\xCC\xD7\xB5\xEC\xD0\x0F\x23\xC5\xD0\xE0\xDE\x72\xD7\xB9\x8C\xDD\xF2\xDD\x6E\xB7\x81\xDC\xA2\xDA\xEF\xDB\x68\xD7\xB4\x95\xDD\x35\xDD\x4B\xDF\xC9\xD9\xCF\xD9\xF2\xDC\x74\xC1\xBC\xE5\xDB\x74\xDC\x95\xD9\xE6\xD6\x80\xD5\xEA\xD6\x76\xF7\xBC\xB4\xDB\xA9\xDD\x3F\xDA\xDA\xD1\x90\xD8\xD9\xCF\x5B", -"\xF7\x90\xD5\xDC\x19\xDF\xD0\xD8\x45\x05\xFF\xCF\x0F\x1E\x1D\xDB\xB1\x98\xDE\x78\xDB\x4B\xD9\xA3\xDA\xBA\xDF\xE8\xD4\x6E\xFE\xBA\x92\xDD\xA8\xDA\x4A\xDD\xBE\xD8\xC7\xDB\xEF\xCC\x73\xFD\xBB\x87\xDB\xFF\xDC\x0A\xDF\xD5\xDE\xC2\xD9\xF5\xCD\x6C\xDB\xBD\xAC\xDA\x9D\xD6\xB1\xD7\xD7\xDD\xD9\xD1\xF6\xD5\x67\xE3\xBD\xF7\xD9\x1E\xC8\x71\xDA\xFC\xC5\xF7\xCB\x18\x12\x49\xC8\x8A\xDB\xB5\xCA\xC6\x4F\xD5\x2F\x35\x76\xDD\x89\xDD\x70\xBE\x7A\xD1\xC7\x6F\xDF\x2E\xDF\xBB\xDD\x82\xC2\xCD\xC9\x7A\xDC\x6B\xCB\xDE\x91\xDD\xA6\xDC\x6B\xDA\xEF\xD3\xCA\xDC\x7B\xCE\xBD\xFC\xDD\x11\xDC\xC0\xDD\xFE\xD6\xEA\xDE\xBF\xD8\x7A\xC3\xBC\xDA\xDE\x05\xD8\xC4\xDF\x0F\xDA\xF1\xD7\xEA\xC0\x7B\xF9\xBC\x8D\xDE\x3B\xDF\xCC\xDA\x9F\x95\xE7\xD4\xAF\xD0\x05\x79\xA1\xC9\x0D\x96\xDE\x88\x3C\x41\xD1\x07\x11\x10\x02\x1F\xF7\x2E\x03\xDA\x0F\xC7\xA3\xDD\xCE\x2E\xD7\xB9\x3E\xC1\x45\xCC\x38\x70\x08\xBD\xD7\xD1\xDF\x4C\xD3\xEE\xD3\xEF\xD5\x7B\xF5\xBB\xF7\xDE\xAA\xDF\x49\xDF\xD3\xDB\xEF\xD6\xE9\xDD\x7B\xD8\xBA\xC5\xDD\x9A\xDD\xD9\xDC\xC0\xDD\xF6\xD4\xF8\xD7\x7D\xC6\xBE\xB9\xDF\x65\xDB\xC4\xDE\x4B\xD9\x74\xDD\xC7\xC5\x5D\xE2\xBD\xA9\xD7\x64\xDF\xC8\xDF\x70\xDB\xF2\xD6\xF6\xC0\x54\x26\x78\xA4\xC8\x9E\xC5\x6D\xB6\xFE\xC4\xF0\x27\x90\xC0\x80\xE7\x8F\x8D\x1C\x01\xC9\xD0\xDC\x8B\xDE\xE8\xD6\xEE\xC8\x7A\xE3\xB6\x9D\xDE\x32\xDC\xD3\xD8\xDE\xDB\xCD\xD4\xF2\xD3\x80\xFE\x29\xE7\xDF\x01\x02\x63\xDD\xB3\xDD\xEA\xDB\xFE\xD1\x63\xF6\xBE\xB1\xD9\x04\xDF\xC3\xDD\xFC\xDB\xF7\xD3\xFF\xCA\x60\xF0\xB4\xFE\xD8\x8E\xDE\xFC\xDC\xE4\xDC\x86\xC9\xDC\xCC\x4C\xE1\xD8\x23\xC8\x44\xDA\x07\xCB\xC2\xC0\x82\xCE\x1A\x19\xBB\x10\xBF\x95\xD1\xD2\xDE\x1A\xC7\xB5\xB0\x83\xCA\x00\xE5\x7A\xDA\xBF\x9D\x9C\xDC\xDE\xA5\xDC\xBD\xDE\x57\xD0\xFE\xCE\x7D\xEB\xBE\xE3\xDF\xAD\xDF\xF2\xDF\xEB\xDE\xEF\xD1\xFB\xCF\x6D\xD3\xB8\xEF\xD8\xCC\xDC\xE1\xDE\x01\x97\xD3\xD4\xDB\xC1\x75\xE3\xBA\x86\xDE\x5D\xDE\x9B\xDD\xEF\xDC\xF1\xDF\xFB\xCB\x75\xC1\xBF\xFD\xDF\xC3\xDF\xB2\xDF\x3E\xD9\xA6\xBE\x02\xF4\x1F\xCA\xA7\xD1\xDF\x0D\xE1\x4B\xD3\x78\xD5\x25\x18\x42\xD7\x81\xE6\xA4\xF0\xDD\x58\xDD\x08\x1E\x0B\xC9\x21\x00\x43\xD2\x09\xF6\xBA\xC1\xD6\x72\xDE\xD3\xDF\xB6\xB0\xF5\xD5\xE6\xC5\x79\xE9\xB6\xC9\xE0\x51\xDE\xF3\xDF\xD4\xDF\xD8\xDF\xE6\xCB\x79\xD1\xC1\xE0\xE0\x53\xE0\x98\xDD\x15\xE2\xE6\xDD\xEC\xD4\x79\xFC\xBE\xF4\xDF\x27\xE0\xFB\xDD\x0A\xE1\x89\xD9\xFF\xCC\x81\xC2\x8F\x9C\xC4\x3F\xE0\x88\x3D\x19\xE5\x00\x90\x03\xED\x55\xFF\x90\x86\x64\xB8\xAB\x79\xD4\x84\x1A\x2A\x10\x5A\xBC\x7C\xDF\xC2\xAE\xD5\x2D\x47\x88\xC3\xB5\xB4\xC7\xC6\xFD\xC4\x42\xF4\x6B\xB0\x3A\xAB\x5D\x9D\x4D\x32\xDA\xE3\xDB\xF6\xDE\x3F\xD1\x6F\x83\xD0\xCC\x69\x56\xC7\x49\x04\x75\xC7\xEB\xCA\x7B\xD8\xB2\xC1\x0C\xEF\xCC\x55\xB6\x9C\xB7\x67\xC0\x5A\xC2\xE8\x64\xA3\x83\x02\xBC\xE0\x3C\xE0\x2D\xE7\x17\xEA\x00\x01\x86\xC5\xDF\x1C\xA7\xD3\xBB\x77\xCC\xA2\xB3\x69\xAF\xB6\x37\x2C\xE6\x1C\x31\x0C\x1A\xD5\x44\x0F\x9E\xA4\xD1\xBD\xC0\x0C\xBC\x98\x27\x5D\xB3\xB1\x69\x3D\xA7\x3F\x00\xB4\xC3\x07\xFB\x3C\xC2\x8C\xC9\xE1\x25\xD9\x3C\xE1\x02\x16\x19\xED\xAE\x93\x9A\x89\x16\x51\xE1\xE2\xB5\x69\xE2\xCF\xA7\x6B\x71\x11\x1E\x38\xDB\xB6\xCD\xC6\x82\x45\xF5\xC7\xE9\xB0\x1D\xE6\xC9\xCB\x86\xFF\x28\x4D\xE1\x64\xC3\x67\xE2\xA4\xB7\x1D\xEF\x60\x12\x86\xE2\x4C\xC2\xA6\xF3\xE1\xA7\xA4\x1A\x04\x1B\xE2\x7E\x0B\x84\x7A\x66\xB1\x69\x29\xAF\x08\x04\x67\xD9\x4D\x48\xA7\xDF\x51\x3C\xC3\xCF\xDB\x2F\xDC\x60\xE1\x40\xE5\x1D\xE6\x79\x70\x87\xE1\x6B\xF2\xE1\x43\x77\x9F\xA4\xDB\xD8\x6F\xDA\xE5\xCB\x30\xE7\xC3\x8C\xE0\x70\xE0\x07\xE3\x21\x0C\x1D\xEE\xAA\xDD\x88\xFE\x12\x06\xE2\x68\x2B\x74\x2A\xD8\xA1\x3D\xDD\xF5\x0B\x77\xE5\x04\x95\xE2\xBB\xE0\x94\xE0\xE9\xDA\x25\xE8\x56\x0C\x89\xE7\xC2\xEE\xE1\x76\x04\x8F\xE0\xB8\xB0\x24\xE9\xB4\x74\x87\xCF\x8C\x3E\xBD\xB4\xDC\xC0\x69\xEA\xCD\x21\xC7\x11\xE2\x70\xEA\xC3\xAB\xE2\x1B\xE3\x96\xE0\x34\xE5\x20\xE1\x0F\xE7\x88\xFD\x4C\xA1\xE2\x46\xE3\xBD\xC3\xB5\xB5\xA2\xC4\x41\x6A\xFA\x88\xC3\xBA\xE2\xDB\xDF\x5A\x06\x4F\xE0\xA9\xB9\x41\x96\x20\x83\xF5\x54\xE2\x1F\xE2\xAB\xE0\xF5\x69\x21\xE3\xA9\xAB\x88\xC5\x7F\x81\x11\xF1\x14\x91\x17\x36\xE0\x58\xCD\x10\xFF\xD1\x42\x1D\x45\x78\x0A\x08\x71\xE3\xB5\xB1\xA2\xC3\x7E\x5D\x52\xC4\x90\xCD\xE2\x2E\xDD\xA7\xE1\x4F\xE1\x2A\xEF\x13\xEE\x89\xD0\x3A\x30\xE2", -"\x06\x02\x4E\x80\x5B\xE3\x15\x8C\xCD\x1E\xF5\x9A\x94\xEF\x00\x38\xE3\x84\x00\x60\xE0\xC2\x10\xDD\xCB\x87\xC4\xC6\xE4\xE2\x61\xA7\xA9\xE3\x61\xE5\x2A\xE1\x13\xE8\x88\xD8\xC5\x8A\xE2\xBE\xBC\xE8\x90\xA6\x11\x32\xE6\x10\x13\x8C\xD8\x9C\x99\xE2\x00\xE3\x70\xB6\x30\xE3\xE4\x02\x14\xFF\xD6\x84\xC5\xCF\x76\xA0\xE3\xCD\xDA\x39\xB1\x77\xBB\x14\xF3\x14\xE6\xC6\xF8\xCF\x82\xE2\xE0\x0B\x58\xE6\xC4\x02\x13\xFA\x8C\xFC\x35\x08\xE3\x33\x2D\x50\x83\x62\xE7\x7F\x8D\x18\xE6\xC7\xB3\x92\xFE\xE2\x16\xE2\xB0\xE0\x10\xE2\x2C\xE7\x19\xFC\x8D\xE5\xC5\x8E\xA7\xAC\xE3\x97\xE0\x67\xE1\x31\xED\x1B\xE3\x88\xC4\xC7\x94\x14\xD7\xB4\x93\xCA\x40\xCE\x1C\xEF\x17\xEA\x8E\xD0\x7C\x7F\xE1\xBB\xE3\x7D\x11\x75\xE6\x2C\xE1\xB1\x0D\x8D\xDE\x6B\xAF\xE3\x55\x77\xC8\x07\xB5\xB6\x40\x93\x07\x1A\x87\xDB\x7C\xB7\xE3\xC9\xDE\xEA\x2C\x78\xE5\x39\xE2\x1E\xEF\x8E\xD9\x4E\xF3\x17\x6F\xE3\x18\x0D\x4E\xBD\x40\x23\x8A\xAE\x43\x27\xBE\xC6\x1E\xCD\x53\x65\xD2\xA8\xB3\x15\xBE\xEB\xAD\x1E\xAD\xC7\xE2\xB5\x35\xCB\xD2\xE2\x77\xE2\x3E\xEC\x1C\xEA\x8D\xC2\xC4\xE4\xE3\x89\x0A\x6B\xE1\x60\x69\xC6\x00\xD4\x1E\xC5\xA5\xA7\x72\x0E\xFD\xE3\xA5\x07\x7F\xE2\x7A\x15\xAA\xA2\x90\xD7\xD1\x01\xE4\xBE\xBC\xAA\xCA\x41\x05\x0D\xCF\xF7\xBB\x87\xCB\xC8\xDB\x33\xF3\xE2\x07\xE4\x47\xE6\x37\xE0\xEA\x00\x8E\xFD\xC2\x42\xE3\x9F\xE3\xB6\xE0\xDB\xDA\x00\xC1\x07\x04\x8D\xDF\xC5\x99\xE1\x0C\xE4\xCB\xE2\x8A\xE2\x2A\xE6\x1D\xE4\x11\x26\xC7\xDD\xB5\xE8\xE2\x91\xE2\x44\xCD\xC1\x13\xFB\x75\x03\x22\xAA\xE6\xCA\x55\xBF\x84\x01\xF0\xAF\x48\xE0\x53\xD7\xD6\xB3\xFE\x77\x00\x31\xC2\x70\xB4\x4E\x10\xF9\x30\xAB\xC8\x83\xE9\xC4\xEA\xE0\x4C\xE5\x22\xCE\xCE\xD7\x24\x08\x07\x11\x92\xD2\xB2\xE2\x09\x46\x33\x59\xE2\x2F\xE1\x4B\xE6\x03\xCD\x0B\xC9\x04\x79\x00\x37\xCE\x99\xD4\xB5\xBC\x27\x01\xAF\x0A\x78\x78\x01\x3F\xDA\x08\x1C\x9C\x11\xC7\x89\x46\xC1\x03\xE5\x21\xE4\xC9\xAC\xC0\xB8\xC5\x93\x03\x1E\x02\x27\xC7\xAD\xAC\x10\xCA\xF5\x37\xCE\x98\xD1\xD2\x5C\x1E\x1C\x7C\x53\xD4\xDD\x7C\xD0\x7C\x12\xE4\x7E\x19\x3D\x1D\x6B\x00\x4E\xE7\x27\xFA\x8A\xCD\x38\x37\xC4\x06\x03\x5D\xD2\xD1\xC8\x5C\xBD\xC0\x06\x79\x62\xC9\xDF\xDC\xB5\xE1\x46\xE4\x03\xC3\xB3\xD4\x1A\xC2\x08\x30\xA2\xC3\xD3\xDD\xB5\x96\xB9\x7F\x6E\x0D\xE5\xBF\x48\x94\xDC\x11\x21\x17\x22\x57\x32\x2D\x30\xBD\x53\xE1\x10\x08\x74\x9A\xCA\xCA\xC4\xD7\xB4\xD0\xC2\x41\x06\x14\xD8\x64\xC0\xD7\xA2\xCA\xE6\x5F\xFC\xC6\x03\xE0\x61\x34\xD1\xBB\x90\xD7\xE9\xB9\x01\x2E\x0E\x5F\x35\xC9\x00\xA3\xE7\x55\xEC\x16\xCD\x70\x32\xCA\xC5\x4B\xC4\xE4\x62\xE4\x14\xC9\x21\x01\x08\x16\xF1\xBF\x65\x8D\x1C\x3B\x1D\x41\x03\x18\xD6\xD5\xD0\x92\xCD\x75\xC9\xB7\x82\xD3\x34\xDA\x33\xB8\xDA\xAB\x2B\xD2\x10\x08\x0C\x98\x83\xB3\x11\xDE\xE5\xFD\xDE\x76\xC4\xBA\xA0\xFF\x3D\x1C\xF1\x00\x66\xB8\x13\x4A\x5B\xD1\x40\x01\x12\x0E\xD5\xAC\x97\xC4\x8F\x83\xB9\x40\xC4\x28\xDB\xE5\xCE\xFA\x58\x2E\xE3\x43\xFB\x8A\xDF\xE5\x27\x03\x7B\xE6\xB8\xE6\x37\xDB\x60\x67\x07\x48\xA4\xF5\xE5\x8B\xD5\x6A\x7A\x57\xBC\x73\xC3\xE5\xC9\x20\xF0\xCB\x8A\x18\x6E\xE1\x39\xC5\xB2\xE2\x4B\xE5\xE1\x13\x55\xE2\x6B\x93\xD9\x03\x03\xFE\xDA\xA2\xDE\x17\xE1\x04\xFB\x90\xE3\xB9\xD6\xD9\x7D\xE0\x0B\xE1\x28\xD8\xEA\xD7\xEF\xD2\x7A\xED\xB9\xA8\xDE\x85\xE0\x29\xE0\x33\x97\x10\xE3\x06\xF8\x86\x94\xC1\xCD\xDD\x56\xE0\xAE\xDE\xFC\xDF\xAC\xD0\x09\xE9\x6B\xE8\xC0\x95\xDB\x8F\xDE\xB6\xD5\x13\xD8\x83\x1F\xC4\xC5\x94\xC5\xBF\x84\xC6\x6E\xC4\x63\xC4\x97\xC0\x5F\xDF\x06\x0C\x06\x5B\xBC\xCB\xC6\xBE\xBD\x7E\xD7\xC3\xE1\xA5\xB2\x31\xFD\x85\xD8\xCA\xBF\xE1\x05\xDC\x21\xE2\xF7\xDC\x08\xEC\xF4\xC6\x82\xE2\xBF\x9A\x94\x1C\xE7\x33\xDF\x83\xDB\x10\xEB\x01\xE1\x99\xC8\xC2\xA3\xE6\x9D\xDD\xE1\xDB\x57\xD8\x00\x01\xD6\xD1\x79\xC5\xBC\xB3\xDE\x07\xDF\x66\xDD\xC2\xDD\xFE\xD5\xC4\xD7\x7F\xD4\xC2\xAC\xD6\x33\xE6\x13\x19\xCD\xE4\x4E\xEE\xF3\xDB\x18\xF6\xAB\xBA\xE6\x35\xD6\xB3\x45\xAE\xDB\x69\xCC\x30\xF8\xC9\xBB\xAC\xC4\xDE\x02\xC7\xA2\xE6\x32\xE4\x62\xEA\x07\xFA\xD6\xBC\xC1\xA0\xDE\x7E\xE0\xD6\xDD\x46\xD9\xFC\xD9\xF7\xDE\x66\xFF\xBD\xCE\xE0\x81\xDE\x28\xE1\xD6\xE1\xCF\xDB\x35\xFD\x9A\xCB\xC2\xDF\xE6\x8D\xE1\xB0\xE6\xC8\xE3\x97\x8B\xF8\xD3\x9C\xFF\xFA\x5D\xE0\xCD\xDC\x87\xDD\x25\xE6\xA6\xD9\xDC\xD1\x5B\xC3\xF6\x73\xD6\xA4\xE5\xDD\xC7\x7E\xD9\x7A\xBB\x28\xD8\x9B\xC4\x90\xFA\xE6\xE9\xE0\x7F\xE1", -"\xDF\xE7\x26\xBF\x37\xE8\x5A\xC1\xCE\xC8\xE0\x83\xE6\xA7\xE5\xE1\xE0\xF6\xD9\xE9\xDE\x77\xEA\xBF\x82\xDF\xEC\xDF\x97\xDD\xE1\xDF\xBC\xD2\x02\xEF\x6C\xEB\xCC\x91\xDB\x2D\xE7\xF7\xDB\xCB\xE7\xC9\xD1\x33\xF1\x72\xE2\xC1\x91\xD8\xB5\xC5\x9D\xC8\x05\xDC\x6F\x12\xBB\xC8\x59\x97\xCA\xB9\xE0\x6B\xDE\xDC\xD6\x41\x02\x77\xD7\xF1\xDB\xF8\xA8\xCE\xFD\xE1\x7C\xE7\x07\xE0\x35\xDF\x62\xE0\xE9\xD9\x98\xC4\xCE\x94\xE0\x51\xE6\x91\xDE\x20\xE7\x63\xE4\xF5\xD6\x9A\xE5\xCC\xE3\xDB\x83\xDE\xDD\xE6\xFB\xDC\x77\xE0\xFF\xDE\x9D\xE4\xC0\xAC\xE6\x26\xE0\x97\xE6\x24\xE0\x66\xEA\x02\xF7\x6C\xFA\xBF\xF9\xDC\x63\x20\xA2\xCE\x40\x07\x7A\xEF\xFF\xB6\x9E\xE7\xC8\x99\x34\x15\xE7\x3D\xE3\x10\xE7\x60\xD5\x04\xEA\x82\xC7\xC1\xD0\xE6\xE4\xDF\x40\xE3\x12\xE0\x03\xE0\x00\x1A\x80\xD6\xCE\xCB\x93\xE6\xE6\xE4\xE6\x72\x94\xE5\xD0\x00\x0E\x79\xDE\xBA\x8A\xE1\x28\xE6\x46\xE3\x03\xEE\x11\xE5\x02\xFC\x63\xD1\xC2\xE5\xE6\x93\xE1\xF9\xDB\xE6\xE7\xAD\xDD\x39\xFE\x60\xD1\x38\x20\xD8\x41\x06\xD3\xE7\x8F\x14\x7F\xEE\x14\xEA\x9D\xDA\xCF\x8E\xDD\xDC\xE6\xBB\xDD\xD3\xE6\x80\xEF\x34\xE1\x6C\xC9\xD0\x9D\xE6\xE3\xE7\xC3\xE6\x9B\xDF\x09\xE2\xCE\xD4\xA0\xD6\xD0\xDA\xE6\x27\xE7\x07\xE9\xCA\xE2\xF7\xD7\xCB\xCF\x84\xF1\xCF\xC2\xE7\xF3\xE6\xE2\xE5\xFD\xE4\xA6\xD9\x36\xF7\x6B\x2B\xCD\x8F\xB3\x05\xE7\x84\xD3\xDB\xE3\x66\xD0\x07\x15\x62\xD5\x97\xAB\xC7\xBE\xBD\x2C\xDA\xFA\xC2\xA1\xDE\x3F\xF8\x91\xE8\xC8\xAB\xE7\xF2\xB9\x01\xEB\xF0\xD5\x80\xEA\x40\xE7\xA0\xF6\xD0\x80\xE1\x38\xE9\x05\xE8\xD5\xE7\x81\xEC\x01\xF8\x9D\xDE\xC0\xED\xDF\x20\xE0\xDC\xDE\x1D\xDA\x65\xEF\x3E\xE0\x9E\xC7\xD1\xDA\xDD\xC3\xE6\x3F\xDC\x94\xDD\xAD\xD4\xFC\xD1\x62\xEE\xCD\x88\xE1\x07\xC7\x76\x13\x6A\x2B\x58\xE1\x02\x9F\x3F\xFC\x39\x0D\xC6\xA1\xE6\x65\xD8\x24\xDB\x79\xE4\x29\xE4\x9A\xFF\xCF\xEF\x31\x01\xE8\xBF\xE6\x18\xEE\x7D\xD4\x46\xE9\xA3\xE6\xD1\x95\xE0\xDF\xE7\x0B\xE3\x1A\xEF\x6A\xE3\xB5\xDC\xA1\xC3\xB7\xBE\xE8\x02\xDF\x38\xEB\xFB\xDB\x8E\xE4\x44\xFB\x6D\xC6\xD1\x9E\xE8\xF2\xE6\x10\xE8\xFD\xE7\x6C\xE6\x3F\xF6\x84\xC8\x90\xF0\xE3\xEF\xC4\x15\x5D\x22\xEB\x19\xEB\xCC\xD1\x64\xDE\x6B\xD8\xDF\xE4\xD6\x2F\xE8\x00\xE8\x8C\xE9\x73\xD3\xA4\xF6\xBB\xD2\xE6\x23\xDF\xF0\xE7\xB0\xDD\x48\x9C\x40\xEE\xA0\xDC\xD2\x80\x92\x11\xE9\x41\xD9\x23\xA0\x94\xEF\x01\xE7\x67\xE1\xC0\xED\xE7\x49\xDD\xDF\xE7\x92\xD9\x78\xE8\x47\xE9\xA2\xFA\xD1\xC5\xE7\x7C\xE9\xE3\xE6\x32\xE9\x7E\xCA\xD3\xCF\x81\xC1\x2A\x7D\xD9\x39\x04\x42\xE9\x7B\x9E\x90\xEE\x2D\xC2\x6A\xEC\xCD\x84\xDA\x57\xE4\x1D\xE1\x83\x18\xA1\xD8\x2F\xD2\x92\xCE\xD2\xBA\xE9\x90\xE8\x5E\xE8\x83\x1D\x75\xE2\xB8\xCF\x9D\xC8\xD0\xE8\xE8\xC0\xE9\x1C\xE9\x13\xE3\x87\xE9\x38\xFD\xA1\xE4\xCC\x92\xE8\x26\xE6\x0C\xEA\x10\xEA\x83\xE7\x4C\xE8\x30\x92\xCE\x85\xEA\x63\xE7\x0F\xE9\x2F\xDE\x6C\xE2\x42\xEB\x81\xDC\xCE\xB8\xC6\xDD\xE8\x33\xE0\x4F\xDD\xDE\x1D\x76\x3E\x69\xE2\xCE\xA2\xC6\x00\x0B\x72\xEA\xBC\x90\x8A\xE5\x27\xF5\x17\xCD\x38\x47\xDA\x7F\xC7\x1F\xCF\x3B\xE9\xED\xD7\x34\xF1\xA4\xEC\xCE\xBE\xE9\x95\xE9\x7C\xEB\x12\xE0\x93\xE2\x3B\xEB\x73\xC5\xD3\xE9\xDF\xAA\xD8\xDA\xDF\x1B\xEA\x7D\xE2\x4A\xEC\x9F\xE4\xD2\xA3\xE0\x45\xE9\x0E\xE9\x3C\xDC\x6C\xEB\x50\xE1\xA1\xD6\xCB\x8E\xEA\x24\xE8\x9C\xC6\x2D\xE5\xEB\x13\x33\xDD\xAF\x1C\xB9\x8D\xC2\x2C\xE9\xC0\xE2\x0B\xE9\xCC\xDB\x3D\xFE\x78\xD8\xCC\x80\xE7\x1A\xE7\x3F\xE1\xEC\xE4\x86\xE3\x3B\xEC\x82\xF5\xCE\xB2\xDF\x31\xEB\x0E\xE2\x9C\xDD\x99\xE0\xD6\xCF\xA6\xF7\xD4\xEE\xE7\x39\xEA\xF8\xE4\x2A\xE8\x89\xEA\x4A\xEA\xA2\xEC\xD2\xC6\xE7\xF7\xE6\xDA\xDA\xCF\xC7\x1E\xED\xD9\xC8\x74\xE7\x6E\xC9\xEA\x94\xE3\x8C\xE1\xD2\xE6\x62\xEE\x54\xFD\x9E\xD0\xD5\x99\xE9\x1B\xE7\x1B\xEA\x4A\xEE\x8C\xEF\x52\xF6\x9D\xD9\xD5\xEE\xE8\x5B\xEA\x38\xEA\x33\xEA\x8E\xEB\xCE\xD4\xA3\xE1\xD5\xF6\xE8\x63\xEB\x6A\xE9\x59\xEF\x9A\xEB\x44\xF9\xA6\xE9\xD5\xCD\xDD\xCA\xDB\xDE\x3E\x0A\xE9\x97\xE4\x52\xF0\x9E\xC8\xCD\xBB\xDD\x71\x20\xDB\x42\x5D\xEE\x75\xE1\x55\xE2\x9C\xE8\xB1\xF6\xE9\x56\xEA\xF4\xDE\x5F\xEA\xA4\xD2\x53\xE1\xAC\xF4\xD4\x83\xEB\xA3\xE9\xC2\xE9\x29\xEC\xC3\xD7\x4A\xFB\xA9\xCA\xD4\xC1\xDB\x0C\xEB\x9F\xE9\x2B\xEF\xA1\xEF\x4A\xF8\x6F\xF1\xBD\xCB\xE1\xA3\xE7\xAE\x1E\xDE\xE3\x1F\xD6\x34\xF9\x9B\xCF\xD2\x84\x33\x26\xEB\x30\xEB\xD2\xE4\x80\xE3\x43\xE5\xA3\xF5\xD0\xAC\xEA\x54\xEA\x97\xEB\x26\xEF\x7C\xE9", -"\x95\x89\xA6\xC4\xB3\x84\xA1\xCC\xE8\xC1\xE9\x57\xEC\xB0\xE7\xE4\xC6\xAC\xE6\xD2\xBA\xEA\xED\xDA\x9E\xE8\x6C\xEE\xA7\xEE\xED\xDE\x5E\xE9\xB8\x82\x02\x25\xE2\x6F\xB4\xC4\xE3\x7F\xEF\x5B\xF1\x77\xEF\xD0\xF4\xDE\x31\xE9\xEF\xDD\x71\xEE\x92\xE7\x5C\xE2\xA6\xF7\x64\xC4\xDD\x19\xE0\x98\xE8\x69\xEA\xAB\xED\xF2\xC1\xA5\xE8\xD6\xB6\xEA\xAA\xEA\x9C\xEB\x75\xEA\xAC\xEE\x5A\xE9\xA5\xFD\xD4\xAB\xE9\x0D\xEB\xD9\xE9\x50\xED\xB6\xE4\xEE\xD5\xAC\xE9\xC1\xEA\xE9\x11\x1D\xF0\xEB\x03\x17\xA8\xE3\x29\xD0\xAB\xE7\xC6\xB9\xE3\x30\xDC\x08\xE0\xAF\xDA\x02\xE8\x57\xF2\xAA\xDF\xD6\x9D\xEB\x86\xE7\x7D\xE8\xC8\xE6\x93\xE9\xE7\xD1\xAE\xE7\xD6\xD3\xEB\xA9\xEB\xEA\xEB\x6A\xEC\xDA\xDD\x5A\xF9\xAE\xEF\xD6\xA2\xDC\xB1\xEB\xEE\xE8\x50\xE8\xB9\xD2\xF1\xD7\xD6\xA1\xD4\x9B\x12\x0C\xEC\xDF\xE8\x3C\xE8\xB8\xE2\x4F\xE8\x70\x34\xD3\xA1\xDE\xC3\xE8\x7C\xDC\x3E\xEA\x7C\xEA\x46\xE4\x9F\xC4\xC2\x9C\xEC\xCB\xDD\xC5\xE4\x6D\xDD\x71\xEE\x55\xF9\xAF\xE0\xD5\xFB\xEB\x88\xEB\xFE\xE8\x59\xEF\xBF\xE6\x56\xE1\xB0\xE8\xD5\xAE\xE9\xFB\xD6\x9F\xC7\xB5\xB5\xAE\xD4\xEB\xCD\xA2\xF2\xD8\x86\xEC\xE9\xE8\xF5\xD7\x79\xED\xFB\xD9\x5E\xEC\x9A\xE9\xBE\xAD\xEA\xC0\xDC\xF7\xE9\x74\xD3\x6A\xEE\x63\xF5\x9A\xC0\xD9\x86\xE1\x42\xED\x66\xDC\x91\xEC\xBA\xE2\xEA\xD6\xAE\xEC\xD6\xD8\xEB\xD8\xDC\xED\xE8\x8A\xEC\xBB\xEF\xF0\xCF\xA0\xD1\xBC\x84\xEC\x68\xDF\xDB\xEB\x98\xE3\xA8\xEC\xE3\x0A\x77\xF1\xD8\xA7\xE7\xE5\xEB\xD2\xDF\x96\xEA\x69\xED\x65\xE4\xAE\xDF\xD9\xC9\xEB\x61\xEC\xBD\xE8\x8F\xEC\xAF\xEB\x5C\xE0\xA8\xCE\xAF\xE7\xEC\x0F\xE8\x0F\xEF\x05\xEB\x77\xE8\xE1\xDD\x9D\xD1\xD3\xF5\xE8\xD3\xE9\x3B\xEB\xC2\xD9\x8F\xEA\xF3\xDB\xA3\xF5\xB7\xDA\xE9\xCF\xEA\xA0\xE7\xB5\xB4\xE2\xD5\x24\x5F\xB3\xEB\xD0\x81\xED\x3C\xE2\x02\xDC\x66\xED\x61\x0D\xEB\xCB\xAF\xFB\xD5\xED\xEB\x8A\xED\x1C\xEE\xC7\xE2\x87\xEB\x61\xFD\xA7\xDF\xD2\xFF\xE9\xDB\xE9\x81\xC7\x9A\xE9\xC4\xED\x66\xE3\xB1\xF5\xBC\xE2\xE6\x95\xE7\x82\xE9\xE3\xD8\xC0\xE2\x5B\xEF\xB2\xF4\xD6\xD1\xEC\xAA\xE1\x06\x1E\xD0\xDA\xFE\x13\x59\xE9\x08\x0E\xD8\xB8\xE3\x4B\xEA\x8E\xDD\x53\xE9\x02\xEF\xF1\xDC\xAC\xD5\xD8\x9E\xEB\x54\xDA\xD0\xE9\x5F\xE8\xAB\xE3\x5F\xE0\xAC\xF5\xD7\xDC\xEA\x5C\xE7\x22\xEE\x88\xEA\xBF\xEF\x66\xFC\xAF\xE6\xD8\xFE\xEB\xDB\xEA\x62\xEE\x8A\xEA\xC0\xEC\x62\xF8\xB3\xD8\xC2\xD8\xEC\x3B\xE2\x2C\xE4\x9F\xED\xED\xD6\x4B\xFD\xD6\xB8\xD2\xCE\xED\xA8\xED\xB9\xE5\x84\xEB\xDA\xE3\x61\xF5\xB6\xF5\xD3\x98\xEC\xF7\xE9\xA9\xEA\x71\xED\xAA\xEB\x6D\xE8\x9C\xF7\xCE\x8A\xE7\xE9\xE7\x49\xEF\xFA\xE5\xD2\xE0\x4D\xE4\x75\xD2\xD3\xA6\xDD\xD4\xE9\x4D\xEE\x35\xED\xD3\xE8\x4D\xFF\xB4\xCF\xD6\x8F\xE8\xFC\xDE\x04\xD4\xC9\xCD\xA3\xEF\x3D\xD8\x7C\xE2\x0D\x4B\xC7\xB3\xE8\x5F\xE3\xE7\xDD\xDE\xED\x64\xCD\xB0\xF9\xDB\xBF\xE6\xFB\xEC\x18\xE9\x5D\xEA\x86\xE7\x68\xE3\xB8\xE0\xCF\xB1\xED\xEF\xEA\x62\xE9\xA3\xE9\xD7\xE0\x28\xCD\xA3\xC8\xDC\xB9\xE7\x0A\xEF\x9A\xE8\xC3\xEF\xAB\xE7\x69\xE7\xAC\xD9\xDA\x89\xEB\x12\xEF\xC5\xE8\xC5\xED\xB1\xE6\x71\xF0\xB2\xD2\xBE\xC7\xDF\xB7\x13\xF8\xE2\x9D\xE4\xC2\x10\xEF\x2E\x7E\xF6\x5E\x21\xEE\x47\xE6\xEA\xDC\xC9\xEB\x0D\xE8\x54\xE7\xB9\xDA\xD9\xCC\xEA\x2A\xEE\x6A\xEF\x53\xEE\xDA\xE0\x66\xF9\xAB\xFB\xD8\xB2\xED\xFA\xE9\xAB\xEA\xC1\xEF\xAF\xE7\x73\xF3\xA9\xF9\xDC\xF7\xEB\x3B\xEE\x23\xED\xCF\xE8\xC9\xEF\x73\xEA\xB2\xCA\xD6\xCC\xEC\x8C\xEB\xB3\xEA\x63\xEE\xE8\xEB\x2F\xF2\x82\xDD\xC2\xE8\xE9\xF1\xED\xB1\x2D\xFE\xC2\x39\x1B\x3F\xCF\xE9\xBA\xCA\x86\xDA\x15\x1D\x04\xE0\x17\xED\xEA\xE3\x63\xE6\xAF\xD8\xDD\xE8\xEB\x2B\xEE\xF5\xE9\xCB\xEC\xBD\xE5\x55\xE8\xAE\xEE\xDC\x9A\xE9\x65\xEC\x36\xEA\x73\xED\x73\xC2\x69\xE0\xA2\xC2\xD4\x85\xEA\x43\xE8\x72\xEC\x89\xE8\xCE\xEA\xF0\xD8\x79\xCC\xBC\xDE\xE0\x9E\xED\x57\xDD\x1F\xEB\x5E\xE4\xC2\x5B\x84\xCA\x21\xF7\xEE\x56\xE5\xBC\xED\xA6\xE7\x26\xBB\xB7\x11\x20\xE7\xBC\x72\xE5\x6F\xE0\xD5\xEE\x96\xD1\x7A\xBC\x03\xE3\xBC\xE6\xDC\x85\xEF\x82\xED\xC3\xEC\x97\xE9\xF1\xEE\x65\xFE\x9E\xDD\xDD\x96\xEC\xD9\xEC\x80\xED\x68\xE9\xBE\xE3\x5A\xFE\x71\xE5\xD6\xDF\xED\xD2\xEB\x70\xEC\x9B\xEF\x0A\xE0\x36\xF9\x82\xC0\xDB\xDB\xE0\x0F\xE9\x61\xED\x93\xED\xD8\xE3\x77\xE7\xB6\xC7\xDD\xC8\xD3\xA8\xEE\x1C\xE3\x81\xEB\xF5\xED\xF4\xA7\x1A\x2D\xC1\xA6\xE1\xA9\xEF\x99\xD2\xAF\xBD\x1C\xE3\x10\x15\x83\xE0\x6B\xF6\x0E\xA7\xEC\xDC\xED\xAA\xE9\xE5\xE8\x78\xFA\xBA\xDB", -"\xD6\xFF\xED\xD7\xEC\xD8\xE7\x85\xE9\xFE\xE4\x3B\xE2\xAD\xDC\xDB\xC6\xEF\xF4\xEB\x0A\xEA\x7D\xE8\xC4\xE8\x5F\xE3\xB7\xC7\xD9\xE5\xED\x49\xED\x73\xEF\x92\xE9\xDD\xE3\x7D\xEB\xB7\xC6\xDB\x83\xEC\x51\xEC\xDB\xEB\xC4\xE7\x68\xE6\x7A\xE2\x53\x07\x91\xC9\xBA\xA1\xE0\xD8\xEF\x81\x1C\x14\xEC\x2B\x40\xBF\xCE\xC7\xA8\xE1\x4E\xB2\xB6\x4B\x92\xC1\x5F\xED\x6C\xE7\xAF\x56\xDD\x97\xEB\x12\xED\xCC\xEB\x8F\x47\xFD\xE8\x63\xF1\xB9\xFA\xD8\x82\xEE\x8C\xEE\xE5\xE9\xE4\xED\xA0\xE6\x73\xFE\xA7\xE9\xD9\x8F\xE8\xBB\xED\xFE\xED\xAF\xEA\xF3\xEF\x6B\xEF\xA0\xC9\xD4\xE8\xED\x73\xEC\x75\xED\x9D\xED\xA0\xE8\x42\xEC\x70\x2F\xAC\x98\x8A\x31\xD7\x9C\xE4\x15\xED\x4B\xCD\x33\xEB\xBF\xD2\xB0\xE1\xC4\x1C\xF1\xA1\xE7\xE9\xB0\x6F\xD9\x3A\xF9\x9E\xFA\xDE\x84\xED\xBC\xEE\x43\xEE\xEF\xE8\xD1\xEE\x75\xE8\xC1\xEF\xDA\x84\xEE\x33\xEF\x50\xED\xDE\xC5\x05\xF7\x6B\xEF\xC1\xC5\xD4\xB1\xF0\x69\xEE\xFF\xEF\xDA\xE8\x00\xFD\x76\xE2\xC0\xEF\xDD\x84\xF0\x71\xEE\x27\xED\x5B\xDE\xCA\xE1\x49\x01\x6C\x2B\x89\xD1\xE8\x6A\xE5\x9F\xB4\xCD\xD6\x39\x11\x27\xC8\xB9\xEF\xAE\x8E\xE5\x5B\xE5\x84\x00\xCF\xD5\x91\xEB\x84\xFF\xC0\xC1\xD7\xBD\xE9\xC3\xEB\x31\xEA\xAB\xEB\xD1\xE0\x6B\xFF\xBA\xE6\xE0\xB3\xED\x1A\xED\xF2\xE4\xA4\xED\xA0\xE5\x79\xEC\x9C\xC1\xD1\x98\xEF\x04\xEA\xE6\xEA\x44\x8F\xA0\xE2\x89\xFE\x10\x81\xDB\x95\xF1\xCD\x7C\xCC\xE7\x03\xEA\x73\xEB\x62\xE0\x00\x02\xBA\x98\xEE\x9E\xE7\xA8\x15\x26\x08\xE6\xCC\xF9\x4A\xBA\xC1\xC0\xE8\xDD\xA4\xE7\xBB\xD5\x07\xF3\x20\x0C\x84\xF8\x9E\xE5\xD4\xB5\xEC\xB7\xB4\x94\xEB\x20\xF0\xEC\xEB\x52\xE2\xB3\xD0\x38\x70\xEB\x0D\xE8\xF9\xE8\xFE\xEE\xDB\xEA\x7F\xE0\xB7\xCE\xCE\x99\xE8\x90\xE7\x0D\xE8\x25\xF6\xD1\xE3\x48\x97\xC4\xC4\xE3\x8C\x7D\x9A\xF1\x82\xE8\x27\xF4\xDD\xEE\x89\xE5\xA1\xDA\x6B\xB1\xD7\xB4\x2F\xD9\xD5\xCA\x92\x14\xEA\x7D\xF9\xB2\xE8\x4A\x52\xE7\x03\x02\xEA\xE6\xEA\xBB\xE3\xBD\x8A\xF8\x88\xD0\xD8\x80\x00\x73\xEA\x01\xE9\x20\xF4\x92\xE3\x8B\xE7\xC4\xFD\xBD\x8E\xEF\x29\xF0\xC8\xEC\xAD\xEA\x11\xF6\x6B\xFD\xB0\xF8\xDA\xDA\xF0\xBA\xED\x47\xF0\x26\xF1\xF3\xEF\x7F\xFB\xBC\xE6\xDB\xF1\xEC\x27\xEC\x55\xDD\xE6\xE7\x0B\xE8\x89\xF7\xB3\xC8\xDB\xFA\xE7\x01\x03\x67\xEF\x75\xCC\x1B\xFE\x87\xF0\xC5\xFC\x93\xEE\xEF\x2C\xEF\x29\xF3\xE3\xED\x0A\xF3\x7F\xFF\xBD\xDC\xB4\xE2\xEE\xFC\xE9\x83\xEE\x0B\xF1\xE1\xE6\x79\xF4\xB4\xD0\xBB\xC1\xF1\x05\xEA\x0E\xEB\x3D\xF5\xF3\xEE\xFB\xDF\xBC\xFB\xE3\xA1\xEF\xE0\xDC\x50\xEC\x42\xD6\xC3\xCF\xC1\xC9\xC2\xFD\xAC\xA9\xBA\xDD\xF1\x16\xEA\x13\xF2\xDA\xE9\x75\xFD\xB7\xDB\xDD\xF0\xEF\x0E\xF2\xF9\xED\xF0\xEC\xFE\xE3\x7C\xF9\xC5\xC5\xDF\xC9\xDD\xC7\xEF\x5E\xF1\xF2\xEF\x17\xF3\x50\xF8\xC8\xD8\xE2\x9A\xF2\x01\xF0\x7C\xF0\x0E\xF2\x1F\xFB\x89\xFC\xC7\xC7\xE3\xFD\x58\x6C\xF1\x27\x07\x13\xEE\x32\xB6\x05\xB1\xC3\xF1\x79\xC7\xC5\x8E\x23\x64\xC6\xBF\xC1\x8B\xE3\x75\xE9\x26\xCD\x84\xA9\xF2\x4A\xEB\x95\xF2\xAA\xE9\x04\xFC\x6A\xF4\xB0\xF1\xE4\x81\xEE\x0D\xF2\x2A\xF1\x6B\xDB\x1D\xFF\x63\xED\xC7\xC1\xD9\x94\xF2\x8E\xF1\xCB\xEF\x3C\xF1\x12\xF7\x94\xE6\xA8\xCE\xDF\xB6\xF0\xC6\xF0\x9A\xEE\x72\x92\xFA\xE9\x86\xF4\xBE\xC5\xDD\xD6\xEF\xFB\xDF\x88\xE8\x27\xE7\x9B\xE2\x48\xFA\x16\xD7\xD4\xAC\xEF\x19\xEA\x44\xEA\x05\xF1\xF6\xE2\x7E\xEB\xA4\xD4\x8C\xFC\xF0\x04\xF2\xF5\xEE\xBE\xE8\x1C\xFB\x6A\xF3\x54\x89\xE4\xF7\xEA\x5F\xF3\x33\xEA\x15\xF4\x10\xF8\x85\xEB\xC1\xD8\xE2\xDC\xF0\xEE\xF0\x2F\xF0\x26\xF0\x0C\xF7\x91\xF6\xB4\xCE\xDC\x98\xED\x10\xEE\x4D\xEE\xE7\xEC\xD3\xE0\xFC\xC0\xC9\xFC\xBC\xA2\xF2\x51\xE9\xEA\xE6\xA9\xA0\x99\xD0\x75\xF6\xAC\xF5\xD2\x8C\xE9\xDF\xB5\x7B\xEE\x07\xF2\x31\xF6\x87\xE1\xC7\xD2\xD2\xE3\xF1\xBF\xE8\xCA\xF3\xCB\xEE\x10\xF3\x66\xE8\xC4\xD0\xE4\xB5\xED\x12\xF3\x2E\xF0\x5A\xF3\xC8\xE2\x8F\xED\xCB\xF4\xE3\xE3\xF0\xF6\xF1\xA0\xF0\x47\xF4\x0B\xEE\x91\xE5\xCA\xE6\xE6\xF6\xEC\xA3\xEE\x0F\xD4\x09\x5A\x2F\xF7\x7A\xFC\xCB\xF5\x64\xFE\xD9\x7F\xF3\x45\xD9\x60\xF4\x64\xC5\x25\xF5\xC6\xF2\xDE\xBE\xBD\xEC\xE9\x66\xD9\xB8\xB2\x36\xFC\x8A\xE5\xC8\xC3\xDA\xF4\xEA\x08\xF2\xC5\xEE\x42\xF1\x1D\xFC\x90\xF3\xC9\xD1\xE6\x85\xEE\x11\xF2\xB2\xEF\x44\xF0\xE7\xE5\x91\xEB\xB8\xDD\xE6\x8D\xEE\x58\xE1\x87\xEE\xD7\xD8\xFA\xE2\x6C\xE9\xC6\xD8\xE2\xCB\xF1\x07\xF1\x76\xED\x94\xEC\x3A\xF2\xA6\x1D\x69\xFF\x3B\xD9\xF3\x00\xDB\xED\xF1\x23\xDD\x35\xFB\x7D\xF3\xBD\xDD\x3D\x20\xEA\xA6", -"\xEC\x55\xF0\x6D\xF7\xEA\xEC\x92\xED\xBF\xEE\xE4\xA4\xF0\xA0\xEA\x74\xF3\x15\xF2\x05\xF4\x96\xE6\xB3\xE6\xE5\xE8\xEC\xC3\xF2\x35\xED\x71\xF2\x2E\xF6\x1B\x47\xCE\xDF\xE6\xBE\xEE\xA1\xF2\xA0\xEF\x68\xF3\xE2\xE5\x9A\xF5\xB8\xE2\xDE\xA8\xF3\xE2\xDC\xB9\xDB\xB5\xB5\xA8\xE8\x52\x11\xD0\xC9\x04\x58\xF2\x71\xEB\x6F\xF2\x6D\xF7\xA4\xE8\x9B\xE9\xA9\xFA\xE6\x89\xED\xBC\xF3\x5B\xF2\xCC\xEE\x32\xFD\x96\xF8\xCC\xE7\xE5\xF4\xF3\x69\xF2\x8B\xF2\xD7\xE6\x33\xF9\x9F\xE0\xCD\xFB\xE7\x91\xEE\x2B\xF4\xA1\xED\x8B\xF4\xE8\xEF\xA2\xF7\xB8\xC5\xD4\xEB\xEA\x0D\x1C\x7C\xE3\x53\xB9\x5C\xBD\xEE\xD3\xCD\xF0\xDB\xE1\xE2\xE7\xF2\x71\xF1\xA1\xEA\x10\xFB\x78\xFB\xD0\xC0\xE9\x93\xF3\xB4\xF0\x46\xEC\x91\xF4\x44\xFF\x68\xFF\xD0\xD1\xDA\xEF\xF1\x9D\xC6\xCE\xF3\x92\xF0\x3F\xFD\x7C\xFA\xCF\xDA\xC1\xD0\xF4\x1D\xF2\xD2\xF0\xE8\xEE\x45\xF1\x92\xF6\xD2\xD8\xE2\x91\xEB\xE5\x99\x55\xF2\x40\x00\x47\xFF\x60\xF1\xB6\xDB\xE5\xFC\xED\x22\xF1\x56\xED\x99\xF7\x47\xFD\x9E\xEC\x70\xDA\xDB\xD9\xF0\x9D\xC6\x23\xF4\x88\xF0\x49\xF4\x9C\xEA\xCB\xC6\xE7\xEC\xF2\x6C\xF4\x62\x8B\x30\xF1\x53\xF4\x39\xFC\xCF\xD8\xE2\xF4\xF2\x43\xEE\xB9\xEF\x5D\xF0\x01\xF2\xF9\xCA\xC0\xFD\xD6\x8D\xF4\xB9\xEA\x1E\x1F\x6E\xEC\x01\xEF\xA3\x04\xD4\xD0\xDB\xDA\xF2\xEC\xEF\xDD\xED\x7A\xF5\xF7\xE0\x99\xE2\xCB\xD8\xDB\x8E\xF5\xC2\xEE\xF8\xF0\x70\xF2\x3E\xF2\x9C\xF4\xD4\xE2\xE8\x96\xF5\x9C\xF4\x9B\x8C\xA6\xF0\x1E\xF0\x28\xC0\xCA\xE5\xE1\xC2\xF2\x03\xF1\x1C\xF1\x01\xF3\x07\xFD\x8F\xFF\xAE\xC1\x04\x0A\xEC\x6C\xF1\x56\xF6\x79\xF7\x09\xF8\x9E\xF7\xD0\xCF\xE6\xDC\xEE\xB6\xF4\x99\xF0\xAE\xF4\x26\xFA\xAB\xEC\xC7\xC1\xE7\x99\xF3\x21\xF4\x18\xF3\x88\xF4\x58\xF7\x0C\xA3\xD6\xDD\x8E\xC6\xF5\x29\xF4\xB7\xED\xD0\xE8\xEE\xE1\xAA\xEA\xC3\xE3\xEA\x82\xF4\xA5\xF5\x02\xEE\x9E\xE9\xEA\xE7\xAD\xAA\xB0\xD8\x8E\xAA\xF3\x93\xC4\x57\xF6\x29\xF1\x9E\xE1\xA6\xF7\xCD\xE3\xE9\xE4\xF1\x8B\xF5\x34\xF5\x21\xF0\x4D\xF6\x8E\xFD\xB1\xDD\xE8\x92\xEF\x8B\xF0\x4C\xF1\x23\xF5\x52\xFA\xA4\xEF\x9C\xCC\xE9\xF5\xF4\x4E\xF5\x3B\xF6\x68\xF1\x4F\xFC\xA2\xFB\xD3\xD4\xE9\xFD\xF4\x74\xEE\xFC\xE5\xA1\xD9\x21\x04\x6A\xEC\x77\xE8\xE4\xD3\xF5\x15\xF4\x59\xF6\xB5\xF2\x3D\xF5\xAB\xEB\xC8\xC0\xDF\xDB\xF5\xEF\xF2\x48\xF5\xC1\xE2\x52\xFF\xA6\xFA\xCC\xED\xE5\xF2\xF4\x0E\xF6\x3A\xF5\xE4\xE7\x2D\xF8\x50\xF1\xCB\xE4\xEB\xB6\x43\xA0\xF5\x29\xF6\xA8\xF5\x4A\xF9\xB1\xEA\xAB\xF2\xBA\x85\x65\x82\xF5\x80\x02\xBE\xF7\xEF\xE9\x7B\xE1\xD9\xD0\xE1\xB3\xF5\x52\xF1\x92\xF4\x7B\xF7\x64\xF9\xE6\xD9\xD5\xEA\xEC\xB1\xF4\x10\xE9\x84\xF5\x5B\xF3\x61\xFF\xAB\xED\xD8\xC0\xE3\x8F\xF6\x33\xF6\x3B\xF7\xF3\xE8\x4F\xFC\x9C\xFA\xD3\xDF\xE4\xFC\xF4\xA7\xF2\x3F\xF5\x5B\xF4\x81\xE9\x3B\xDE\xC6\xF8\xD6\xF3\xED\x7E\xEC\xB7\xE9\x62\xF7\x4B\xFB\x1C\xFD\xD7\xFC\xE8\xFF\xF5\xB9\xF2\x81\xF5\xE3\xEE\x16\xFC\xE0\x18\xC5\xC6\xD3\x97\xF3\x93\xEF\x82\xE4\xD5\xF2\x5C\xF0\xAC\xF7\xD9\xFF\x88\x26\xF4\x4D\xF4\x14\xF7\x93\xF3\x62\xFD\xB5\xF5\xD8\xDF\xED\x97\xF6\x61\xF7\x9E\xF4\x64\xEB\xE2\xD4\x3A\xD6\xD1\xDE\xE9\xF3\xF5\x96\xEB\x3F\xF3\x3C\xEA\x16\xF1\xB0\xE5\xD8\xD7\xD2\xF4\xF6\x08\x1C\xBB\xF6\x2E\xF0\x27\xF9\x7F\xFF\xA1\xC9\xE9\xF6\xF3\x73\xF4\x9E\xEF\x89\xF4\xED\xE9\xAE\xE6\xC3\xEB\xEB\xE8\xF0\xED\xF4\xBB\xF0\xCF\xF0\x2F\xF8\x3F\xE9\xB6\xD1\x38\x4B\xED\xB1\xC7\x2F\xE5\x1F\xF3\x42\xF0\x82\xE8\xD4\xDD\xE5\xFE\xED\x25\xF1\xDE\xF3\x39\xF0\x73\xF8\xD1\xA4\xB3\xC7\xEC\xAC\xF0\x79\xF6\xA8\xF7\xDE\xF7\x0B\xF3\xAE\xFD\x1C\xC0\xEE\x90\xF6\x82\xF6\x89\xF6\x8A\xF4\x62\xF2\xA5\xF6\xD8\xFB\xEC\x98\xF6\xAC\xF6\xB5\xEA\xA9\xF3\x6F\xE7\x34\xEC\x7B\xEE\xBD\xB6\xEF\x02\xC7\xA1\xF4\xC7\xEC\xC6\xEE\xB6\xE2\xAE\xF0\xED\xBE\xF4\x72\xF7\xDD\xF0\xC1\xF2\x77\xF6\xB0\xE9\xC4\xE5\xE5\xDF\xF5\x47\xF4\xB3\xED\x7D\xF2\xE7\xE7\x9F\xE2\xDD\xC1\xEE\xA4\xF7\x83\xF7\xE5\xF5\xE1\xF5\x79\xF7\xB8\xEF\xDE\xC9\xEE\xD1\xF7\x90\xEA\xA4\xEE\xA6\xD4\x68\xF5\x39\xDE\xB8\xC7\x1E\x20\xEE\x83\xF2\x5A\xD0\xF4\xC5\x2A\xF7\x93\xA4\xCF\xC3\xEA\xA0\xF6\x87\xF5\x96\xF1\xA2\xF6\x2B\xF9\xAD\xE0\xCB\xEE\xE7\x8D\xF8\x35\xF3\xBB\xF5\x91\xF1\x78\xFD\x36\xE3\x67\xEE\xEC\xC1\xF5\xCE\xDC\xAB\xF5\x4F\xF0\x6B\xF2\x8C\xF4\xD9\xD8\xE2\xB7\xF0\xC9\xF4\xA2\xF2\x32\xF6\x28\xF8\xC1\xFE\xC7\xD7\xDF\x94\xDF\xC7\xC6\x04\xF4\x83\x1D\xE9\xE6\xB2\x83\x1F\xC1\xF0\x8F\xD9\x0D\x1D\xEA\xDD\x0F", -"\xE1\x7B\xF8\xC0\xF1\xD5\xC7\xED\xA3\xF6\xB4\xF4\x6C\xF6\xC9\xF7\x56\xFD\xB4\xFC\xD6\xCF\xED\x95\xF8\x2C\xF6\x46\xF0\x9C\xF5\x60\xE0\xB3\xF7\xDA\xF2\xEC\x9D\xF8\x5A\xF6\xB8\xF2\xA7\xF5\x2D\xF9\xB3\xEE\xDE\xEE\xEB\xAB\xF7\xA4\xF5\xBA\xEC\x20\xEF\x0C\xEE\x9D\xF3\x49\xFB\xDD\xED\x95\x7D\xEF\x02\xE3\xF6\xF0\xF0\xE8\x93\xA2\xBC\xE3\xE7\x9F\xF6\xB4\xF6\xC9\xF6\x8D\xEC\x72\xFB\x9E\xE6\xD3\xCD\xEA\xBD\xF8\x29\xF7\x35\xF6\xDF\xF5\xB9\xE2\xB5\xF8\xE0\xC3\xEF\x9B\xF3\xC5\xF7\x82\xE7\xF1\xF1\x6B\xF1\xB1\xFB\xDA\xC4\xEE\xD1\xEF\xFE\xF3\xB6\xF0\x80\xF5\xFA\xE1\xC5\xF8\x9F\xCD\xE0\xFE\xDF\x39\x05\x7D\xF4\xFE\xC3\x06\xE1\x02\x8E\xBD\xCF\xCF\x8D\xF4\xBE\xBD\xDA\xEF\x17\xFB\x76\xFC\xB6\xFF\x8E\xC6\xE4\xD3\xD2\x38\xF9\xA4\xF6\x0E\xFB\x69\xFC\xC3\xE2\x76\xD6\xEE\xB5\xE8\xDD\xF5\xF3\xF4\xAF\xF0\x5C\xFE\xAB\xFC\xDB\xDA\xF0\x90\xF1\x3E\xF3\xB6\xF0\xBA\xF1\x7E\xFA\xAE\xF1\xD2\xEC\xEB\xBA\xF6\x4F\xF8\xE8\xF5\x1F\xFA\xAD\xEF\xC7\xE9\x49\x14\xF1\x84\xF3\x97\xDE\xAB\xF3\x6F\x5F\xFB\xED\x9D\xF0\xE5\xC5\xB5\xAD\xC8\x2F\xC8\x7A\xB4\xFA\xEA\x42\xFD\xC8\xF9\x91\xD4\xEB\xE2\xF4\x51\xF0\x32\xF5\x19\xFC\x51\xFC\xB4\xF6\xE4\xE4\xEF\xEA\xF4\xBF\xF6\xBC\xF5\x1B\xFB\x8D\xFD\xCA\xD7\xE0\xCC\xF3\xD2\x91\x71\xF8\xA8\xF7\x1C\xF8\x89\xF5\xC7\xEA\xE2\xDC\xED\xF8\xF8\xCD\xF3\x11\xFB\x73\xF4\x07\xF1\x9D\xE9\x1B\xF9\xD9\x8B\xF0\x96\xEB\x56\xF9\x72\xD7\xFF\xDE\x43\xD8\x8C\xEF\xAA\xD4\xF1\x71\xE4\x22\xC9\x52\x56\x88\xC1\x97\xD7\xC0\xE7\xF3\x92\xF0\x1E\xCF\xF1\xD5\x42\x01\x9A\xCB\x30\xF6\xDE\xE7\x04\x05\x01\x5E\xE5\x10\xBC\x0A\xF8\x9B\xCD\xA6\xB6\x4E\x35\xF3\x92\xC3\x95\xD5\x84\x03\x21\x07\xE6\xCF\xA3\x0F\xB1\xCD\xE1\x8C\xF0\xF6\xCE\xE1\xD3\x35\x21\x65\x27\xD1\x4E\x96\xE6\xC9\xB8\x3A\xF9\xF8\xCA\xD3\xAB\xF3\x4E\x5D\xE6\x59\x25\x10\x7A\xB7\x5A\x59\xC6\x79\xF8\x44\xFD\x82\xD9\xEF\xB3\xE8\xC1\xB6\x15\xFA\x79\x00\xA1\x0F\x8E\x9A\x9C\xE2\x4E\xDB\xC0\xC9\x04\x7A\xE5\xF6\xED\x94\xBA\x36\xF6\x6C\xF0\xAB\xE0\x00\x36\xB0\x0D\xF9\x3B\xB3\x0B\x06\x18\xF9\x16\xFD\xA3\xE5\xC7\xC7\xF3\x83\xF6\x61\xF3\x1D\xF9\x86\xEF\x37\xFE\xAD\xFB\xE4\xE9\xEF\xA6\xEB\x67\xEE\xFE\xED\x18\xF3\x06\xF5\x8F\xF5\xC1\xF5\xEC\xCB\xF8\x18\xF9\x26\xF9\xFD\xF1\x95\xF0\xF1\xC9\xCA\xEE\xE1\xC2\xC5\x70\xF0\x21\xF3\x9A\xE3\x67\xE4\xD1\x79\x57\xFF\xC2\xB5\xC5\x41\xE6\x93\xF2\x3B\xEF\x74\xBB\xD2\xEA\xC9\xEF\xE2\x89\x02\x2F\xFA\xC8\xF5\x00\x99\xA6\xFC\x18\x13\xE9\xC7\xE4\x91\xF9\xC2\xF8\xA5\xF6\x19\xFD\x98\xFF\xA8\xEA\xE3\xD1\xEA\x94\xF8\x37\xE7\x37\xFB\xCB\xF1\x9A\xF5\xC1\xF3\xE6\xD9\xE4\x9B\xF5\xCF\xF8\x3D\xDF\x35\xFD\x3F\xF9\xCD\xFF\xCF\xE4\xF0\xF9\xFA\x3D\xF0\x04\x1F\x0F\xF1\x85\xCD\x94\xF2\xEA\xF2\xE1\xD4\xFA\x9A\x3B\x81\x16\xCD\xD6\x0E\xF9\x3C\xF9\x59\xD5\x38\x77\xE6\xD8\xF6\x02\xC9\x57\xF9\x2B\xFF\xD5\xE6\x08\x21\xF5\xE0\xF9\x63\xFB\xED\x9A\x59\xF8\x92\xFB\xC0\xF8\xDD\xD9\xE8\xBC\xF7\x6D\xD1\xCA\xF1\x32\xFB\x82\xFB\xCC\xF4\xBC\xC3\xF1\xD0\xF6\x45\xF9\x0D\xFB\x11\xFF\xAE\xFE\xC1\xED\xCB\xE0\xF0\xE7\xF0\xCA\xF5\xBA\xF2\x01\xF4\x8F\xF0\xAF\xFB\x7F\xE1\xE2\xFC\x19\xA3\xF1\xA7\xBC\xAE\x3D\x14\xFC\xBF\xF2\xB7\xF6\xAD\xB7\xF4\x33\xF8\xC9\xF9\x0D\xFE\xA5\xF9\x43\xCC\xAB\xB0\x2A\x9B\xFB\xAD\xBA\xA4\xF5\x5A\xFB\x92\xFB\xD6\xF5\xE4\xED\xF5\xA3\xFB\x18\xF9\x20\xFA\xC2\xF7\xB4\xF5\xC1\xE9\xED\xE0\xF2\x9C\xF8\xAC\xFB\x24\xFB\x51\xFB\xAF\xFF\xA9\xF9\xE3\xD8\xF0\xFB\xF8\xEF\xF5\x66\xF2\x50\xE8\x76\xD8\xA7\xB8\x14\xD2\xE3\x87\xF9\xD6\xF1\x79\xED\xA8\xC1\x68\xF0\x00\x13\xEC\xF9\xE8\x86\xF5\x01\x03\xCB\xFB\xA9\xF7\xB4\x54\xD6\xF8\x51\xC6\xED\xD5\xF5\x9D\xFB\x97\xF1\xEE\xF2\x48\xF7\x82\xF9\xE9\xD4\xF2\xBB\xFA\xF6\xEF\xB1\xED\xB7\xED\xEC\xE0\xD4\xEB\xDF\xE8\xDD\xED\xF7\x6A\xEF\xD1\xF4\x19\xF5\x74\xF8\xAC\xF0\xED\xE2\xF0\xFE\xFA\xDB\xF9\x7E\xF1\x37\xFB\x2A\xFB\x0A\xE4\xE0\xDC\xCB\xDE\xB5\xF0\x3D\x48\x5C\x83\xF6\x1A\xF0\x90\xE0\x00\x02\xE4\xE2\x09\x0D\xC2\xF7\xF9\xA1\xF5\xA5\xF2\xDF\xF4\xDE\xFD\xB6\x75\xFB\x57\xE9\x04\xFA\x85\xF1\xBF\xF8\xA1\xE2\xBE\xDA\xE8\xC4\xF9\x0F\xF3\x00\xFD\x7C\xF3\xC0\xF3\x9F\xEA\xDF\xDF\xEE\xEC\xF7\xA1\xF7\x04\xFF\xFB\xF3\xC1\xF4\xCA\xE6\xDD\xE6\xF2\xA8\xF7\xA8\xF8\xD5\xF6\x2A\xFD\xB6\xFD\xBA\xE6\xA1\xD5\x38\x3D\xF0\x28\xFB\x92\xEE\xC0\xC2\xC4\xFE\xD1\xED\xD0\xFF\x28\x25\xFC\x07\xFB\x13\xFE\x66\xFF\x91\xF9\xDC", -"\xE8\xEB\xC0\xEC\xC3\xF9\xE1\xF7\x33\xF6\x7F\xFD\xB9\xF0\xE0\xE4\xBE\xF7\xDF\x9C\xF7\xBC\xF0\xCF\xF4\xC3\xF0\x74\xF1\xB3\xEE\xDF\xC8\xEF\xF0\xF7\xCA\xF7\x52\xF8\xF3\xF7\x94\xFE\xC4\xE2\xF2\xCD\xF5\xF4\xE2\x4E\xD9\x37\xF0\xD4\xF2\x8A\xE3\xC5\xDA\x99\xD6\xD1\xD7\xD8\xD1\xB6\x2D\xE9\x2B\xE4\x96\xC1\xE2\xE3\xEE\xD0\xF9\xAE\xF1\x52\xFD\xBA\xA8\x72\xFC\xE5\x11\xCC\xF7\xF2\xEA\xF5\xB0\xFC\xDA\xF4\x34\xF8\x04\xF9\x93\xFE\xA1\xE8\xDF\xD3\xEA\xB6\xFC\x63\xFC\x1C\xFD\x99\xFA\xC7\xF7\xE6\xFC\xF1\xE9\xF9\xBE\xFC\x6B\xFC\x20\xFD\x9B\xFB\xB6\xF1\xDE\xFF\xC4\xD7\xE9\x84\xF4\x80\xF9\x79\xCD\xA3\xBB\x90\xEA\xC2\xE8\x70\x01\xB5\x9B\xEA\x96\xB2\x01\xF9\x83\x1D\x5C\xC2\x9E\xFB\xEA\xDB\x7C\xCC\xFC\x82\xF8\xC3\xEF\x40\x07\xCF\xFC\xD2\xF2\x58\x68\xF8\x83\xFD\x27\x21\x42\xFD\xDC\xF7\x92\xF3\xB7\xF0\xB9\xF7\xF4\xA2\xFB\xE6\xF7\x46\xFE\x4F\xFF\xD1\xF5\xE0\xF7\xF1\xC7\xF8\xB9\xFC\x62\xF0\x05\xFD\x72\xF7\x58\xFB\x9C\xF8\xE6\xDE\xED\xCE\xF3\x60\xF6\xE8\xF0\x8C\xF5\x82\xF0\x4B\xE7\x66\xF2\xD2\xAF\xF8\x8A\xE9\x06\x1C\x33\xDB\x8B\xE6\x07\xFC\xEA\xFE\xF9\xC5\xFB\x86\x41\x5B\xFC\x95\xFC\xD0\xFA\xDC\xE6\xF4\xCC\xF7\x88\xFD\x0E\xF8\x94\xF7\xA2\xFF\x87\xF7\x33\xF2\xEE\xD3\xED\xD4\xFB\x37\xE6\xEB\xFB\x5A\xF1\x94\xF8\xC1\xE3\xE5\xD7\xFA\x8D\xFC\xA7\xF7\xD8\xF9\xEA\xF4\xD3\xF0\xC5\xE4\xF2\xEA\xD5\xA0\xFD\xAE\xF9\x43\xD9\x3B\x11\x61\xC5\xEA\xFC\xF3\xD7\x70\x87\xE9\xDC\xF2\x74\xFA\xAA\xFF\xA0\xD6\xE1\xE9\xD0\xDE\xFB\xE1\xF8\x27\x02\x5A\xFE\x57\xF9\xD0\xFD\x56\xA7\x56\xB8\xFA\xC3\x51\xBA\xFC\xF0\xF4\xAF\xFA\x7C\xFB\xE5\xE8\xF7\xD1\xF0\x9B\xF7\x2A\xDF\x96\xF5\xB8\xF4\x78\xFD\xB7\xE6\xDE\xE6\xEB\x85\xE6\xF6\xFC\x3B\xFA\xFC\xF6\xD9\xF6\xB8\xF0\xF6\xC8\xEE\xD2\xFD\x62\xF6\x0C\xF8\x9D\xFF\x7C\xEE\x31\xD4\xA8\xE0\x8C\x85\xFE\xCC\xC9\x9B\x06\x60\xF5\x96\xFB\xF0\xF5\x70\x10\xE8\xCA\xF0\xAF\xFD\x6F\xFD\x26\xE2\xDC\xFD\xBD\xE0\xC4\xDF\xEF\xB6\xFA\xFC\xFB\x60\xEA\xAF\xF9\xE9\xF1\x76\xF2\xF1\xFB\xEA\xB4\xFC\xBD\xF4\x48\xFD\xD5\xF4\xCC\xF6\xC4\xE6\xF3\xF4\xF1\xC9\xF7\x2A\xFE\x35\xFF\xFC\xF4\xCD\xFB\xD4\xEE\xF3\xF0\xFC\x8A\xF7\xA0\xF1\xB9\xDB\x44\x2C\xBD\xF0\xEB\xFD\xED\xF6\xE1\x92\xFE\x94\xFA\x8A\xFF\x71\xFB\xDC\xF9\xEB\xE5\xF7\xFB\xFA\xBF\xFD\x1C\xFF\x07\xFA\x4E\xFD\xFE\xEE\xE5\xE2\xF0\xFB\xE2\x84\xFC\xC8\xEF\x0F\xEE\xF2\xEC\xD7\xEC\x7C\xF7\xFA\xE8\xF9\xD9\xFE\x98\xFD\xAD\xFE\xA6\xFD\xEB\xFC\xEF\xE3\xF2\xE2\xF7\xAF\xE9\x3F\xC6\x2D\xF7\x57\xBF\x24\xFF\xF0\xFD\xE5\xDF\xD1\xE0\xFA\xE0\xFC\x9D\xB3\x94\xFD\xE8\xF3\xB9\xF5\xE9\xD5\xEE\xF0\xFE\x5A\xFC\xB9\xFF\x7F\xFC\xEE\xF6\x93\xFF\xF2\xE1\xFC\xC2\xF8\xCE\xF9\x38\xF4\x5D\xFF\x66\xE6\xD7\xFF\xC9\xF8\xF5\x9D\xC7\xAF\xFB\x7C\xFF\x83\xFA\x8F\xFF\xD7\xE6\x97\xD3\xF8\xD2\xC4\x13\xE3\x40\xF5\x64\xFF\x47\x15\xF6\xFB\xE2\xC5\xED\x82\x02\x68\xFF\xF7\xF8\x9F\x44\xE8\xFF\xCB\xFE\xD7\xD9\xFC\xC8\xFE\x75\xF6\x34\xDE\x31\xFC\xE9\xF5\xBE\xFC\xE9\xDA\xF2\xD0\xFE\x9C\xF8\xA9\xFE\x27\xFC\xEA\xFA\xDA\xF6\xFA\xD4\xF3\xD8\xFE\xD6\xF9\x3B\xF8\x5F\xFF\xD9\xFA\xCD\xF1\xF6\xDC\xF3\xD3\xFD\x37\xE6\xB2\xF5\xE4\xFB\xCF\xE3\x6F\xEB\xD5\xEA\xED\xFD\xFC\x10\xFE\xC8\xFF\xD0\xFB\xF2\xFD\xFB\xEF\xDB\xFF\xFE\x97\xFF\xC4\xFF\xCB\xF7\xD2\xF9\xF8\xFE\xBB\xE1\xF6\xC8\xEC\xEE\xF4\xA0\xFF\x91\xFC\x1C\xFD\xE4\xF2\xC7\xE7\xF9\xD0\xED\xA9\xFE\xD1\xFF\x95\xFF\xF4\xFD\xE5\xF5\xFD\xEF\xF9\xFC\xE0\xCE\xF5\x00\x00\xD0\x7A\x54\x77\x93\x62\xB5\x7F\x86\x72\xBE\x7C\xB3\x7E\xDB\x7F\xB6\x7E\xE4\x7F\xF7\x7D\xC0\x7C\x6E\x7F\x1A\x7F\x98\x7F\x67\x7C\xC3\x7F\xEC\x7F\xBE\x79\x4E\x7F\x3D\x7D\xC8\x7F\x3F\x7D\x79\x7F\x41\x7D\x7B\x7F\x32\x78\x7D\x7F\xCF\x7F\x7F\x7F\xF9\x7F\x5A\x7F\x2C\x7F\xF4\x7B\x2E\x7F\xF6\x7B\x5F\x7F\xF8\x7B\x18\x77\xD3\x7B\x51\x7E\x88\x7C\xF5\x7A\x27\x01\xF7\x7A\x70\x7E\x41\x7F\xE1\x7F\x96\x7D\x09\x80\x6A\x7F\xCB\x4A\x17\x7F\x22\x78\xE7\x7F\x58\x7E\x1B\x7F\x99\x7F\xEA\x7E\x73\x7F\x1F\x7F\x37\x79\x9F\x7F\xD3\x7D\xA1\x7F\x44\x7C\xA3\x7F\x7E\x74\x70\x00\xA5\x7F\xA2\x7C\xA7\x7F\x05\x73\xA9\x7F\x3F\x7E\xFA\x7E\x41\x7E\x85\x7F\xF7\x7B\xAB\x7C\x8B\x7B\x2E\x76\x86\x6E\x64\x7F\x42\x7F\x30\x7D\x0B\x80\x2A\x7E\x22\x7B\x2C\x7E\xD7\x7A\x30\x79\x10\x7C\x2F\x7E\x59\x7E\x26\x6F\x6E\x7D\x2B\x7B\x70\x7D\x45\x80\x72\x7D\x18\x7C\xF2\x7E\x97\x7A\xF4\x7E\x79\x7D\xF8\x7F\xDB\x7D\xD2\x7F\xDD\x7D\x7D", -"\x7D\xAC\x7F\x11\x7E\x6D\x79\x26\x7C\xFB\x6F\x3F\x7B\x06\x01\x55\x76\x03\x80\x4B\x7E\x56\x80\x62\x7D\xF4\x7D\x58\x80\x36\x7C\xF8\x7D\xB7\x7B\xFA\x7D\x9F\x7D\xEB\x7F\x99\x7B\x43\x7A\xD0\x7D\x79\x7D\xEE\x7E\x6E\x7C\xF0\x7E\x45\x80\x68\x80\x18\x7C\x47\x80\xF5\x7E\x49\x80\x50\x7B\x4B\x80\x99\x7E\x4D\x80\x9B\x7E\xCC\x7A\x73\x80\xAF\x7F\xD9\x63\x29\x80\x80\x7E\xA8\x7A\x68\x7B\x27\x01\x36\x71\xB5\x6E\x8D\x7F\x7C\x80\xB2\x77\x4F\x7E\x33\x80\x99\x7D\x82\x7E\x6C\x7F\x18\x7F\x0E\x80\xC0\x7F\x85\x80\xFD\x7D\x9A\x7F\x5C\x7E\x9C\x7F\x12\x7C\xD1\x7D\x64\x80\xA4\x77\x58\x73\xF2\x7F\x73\x7D\xF4\x7F\xD2\x7C\xF6\x7F\x15\x7C\x6C\x80\x1F\x7C\x36\x7B\x9D\x63\x4A\x7D\x24\x80\x4C\x7D\x26\x80\x51\x80\x18\x77\x8C\x7B\x29\x21\x55\x80\x31\x80\x08\x80\xE3\x7F\xA8\x80\x94\x7F\x63\x7C\x96\x7F\x39\x80\x10\x80\x6C\x7D\x4E\x7B\x62\x80\x50\x7B\x89\x80\x79\x7D\x66\x80\x79\x7D\x8D\x80\x79\x7D\x8F\x80\x6B\x80\x91\x80\x15\x7C\x93\x80\x82\x7F\x95\x80\x84\x7F\x97\x80\x25\x7C\x99\x80\xAB\x63\xAE\x7B\x15\x0E\xB0\x7B\xC1\x7D\xB4\x7F\x7B\x80\x98\x7D\x7D\x80\xCD\x80\xE5\x7F\xDE\x7B\x38\x80\x87\x7E\x60\x80\xD3\x80\x3E\x7C\xD5\x80\x40\x7C\xB4\x80\xD2\x79\xB6\x80\x9D\x7C\x24\x7F\x9F\x7C\xF3\x7E\xD8\x7D\xA6\x7F\xAD\x7D\x18\x7C\xE1\x80\x22\x80\x5C\x7F\xC2\x80\x5E\x7F\xD7\x7F\x31\x7F\x79\x7D\xDA\x7F\xB4\x7B\xF6\x7C\xB0\x79\xDE\x5A\xBB\x7C\xB9\x6B\xEE\x80\xF3\x7D\x2B\x1D\x7E\x80\x8C\x79\x5C\x79\x8E\x79\x24\x7B\xE7\x7E\xF6\x80\xCE\x7D\xD4\x80\x87\x80\x6F\x7D\xA5\x7D\x7A\x7B\x8B\x80\xB5\x80\x43\x48\x44\x80\x26\x81\xC2\x7A\x6A\x80\xE7\x7A\xDF\x80\x37\x73\x06\x81\xFB\x7F\x23\x80\xFD\x7F\x25\x80\x0B\x81\x60\x7F\x57\x7A\xFA\x7B\x81\x66\xB1\x7E\xE7\x6E\xFE\x7B\x1A\x09\x00\x7C\x3C\x7F\x30\x7C\x11\x0E\xA0\x6F\xD2\x64\x30\x80\x8E\x7F\xBB\x74\xE2\x7F\x57\x80\xF1\x80\x0C\x80\xBE\x7F\xAB\x80\xE8\x7F\x13\x80\xBB\x7B\x84\x80\xBD\x7B\x14\x80\x75\x7F\x33\x7E\x77\x7F\x35\x7E\xC5\x7E\x91\x7E\xC7\x7E\x93\x7E\xC9\x7E\x3B\x7E\xCB\x7E\x0C\x7E\xCD\x7E\x30\x81\x08\x81\x32\x81\xC3\x80\x34\x81\x27\x80\x36\x81\x09\x7D\xB6\x7F\xFD\x7B\xDA\x5A\x2C\x7C\xB4\x17\x2E\x7C\x3E\x81\xD9\x7E\x11\x0E\x32\x7C\x42\x81\xE0\x7F\x44\x81\xFC\x7A\x32\x80\xCC\x80\x15\x7F\x32\x7D\xA9\x80\x37\x80\x4B\x81\xD1\x80\xE9\x7F\x38\x7D\xAF\x80\x1E\x7F\x8C\x7E\xEF\x7F\x8E\x7E\x22\x7F\xFE\x80\xF3\x7F\x00\x81\x69\x80\x02\x81\x48\x80\x04\x81\x79\x7D\x2F\x81\x6F\x80\xD4\x7F\x10\x7E\xD6\x7F\x12\x7E\xD8\x7F\x45\x80\x19\x77\x8E\x76\xD9\x77\xB6\x7C\x32\x70\xDA\x5A\x03\x70\x1D\x2E\x5A\x7C\x06\x80\x59\x5D\x00\x64\x0D\x7F\x40\x6D\x2A\x7D\x15\x81\x26\x7E\xA7\x80\x77\x81\x65\x7D\x79\x81\x37\x76\x83\x80\x41\x7A\x4D\x81\xC5\x7F\x15\x80\xC7\x7F\x54\x81\x51\x7F\x56\x81\x53\x7F\x92\x7E\x55\x7F\x94\x7E\x7E\x7F\x96\x7E\x80\x7F\xF8\x7E\x4C\x80\xAB\x7F\xDF\x7D\xAD\x7F\x05\x73\x74\x80\x7E\x7C\xD8\x77\xAF\x7C\x24\x7D\x07\x7F\x86\x74\x86\x7C\x1B\x7E\xDF\x79\x3B\x70\xA1\x81\xA6\x7E\xA3\x81\xCA\x80\xB8\x7F\xA6\x80\xF0\x80\xA7\x81\xF6\x7D\x59\x80\x37\x7C\x5B\x80\x1C\x81\x5D\x80\x3D\x80\x5F\x80\x3A\x80\x61\x80\x21\x81\x63\x80\x23\x81\xC2\x7B\x25\x81\xFC\x80\x27\x81\xB9\x80\x75\x7D\xBB\x80\x37\x73\xBD\x80\xAE\x7D\xBF\x80\x05\x73\xC1\x80\x61\x81\x0A\x81\x92\x81\x0C\x81\x08\x69\xE2\x7C\x97\x81\xC5\x81\x1F\x4C\xA9\x2D\xB4\x7C\x0A\x7F\x3F\x81\x15\x0E\xE4\x77\x07\x03\xF4\x5A\xFA\x08\xED\x80\xCF\x81\xF1\x7D\xD1\x81\x17\x81\x48\x81\xD5\x81\x80\x80\x1B\x81\x39\x7C\xD9\x81\x9B\x7F\x92\x79\x1D\x7F\x1E\x81\x5D\x7E\x9D\x7F\x76\x7F\x60\x7E\x78\x7F\x3A\x79\x7A\x7F\x3C\x79\xD7\x7D\xAB\x7D\x03\x81\xDA\x7D\xBE\x80\x48\x7D\x79\x7D\xED\x81\x90\x81\xFE\x7F\xF0\x81\x35\x81\x7F\x7A\x9B\x80\xB5\x7E\xE1\x7C\xC3\x81\xE4\x7C\x9E\x70\xE6\x7C\xA9\x70\x79\x80\x1C\x4E\x68\x09\x15\x78\xB5\x7C\x1B\x69\xF0\x7C\x10\x0E\x54\x61\xC4\x68\xDE\x69\x1B\x5F\x2E\x69\x25\x82\x9D\x80\xB2\x7C\x1F\x4C\xE5\x69\x80\x6A\x33\x67\xC5\x72\x45\x60\xD5\x61\xA7\x6A\x02\x63\x38\x82\x13\x7F\x9D\x80\x4B\x67\x96\x6A\x37\x82\x1F\x78\x12\x72\x54\x67\x6C\x0D\x56\x67\x71\x6A\xFE\x69\xB5\x80\x75\x6A\xD1\x5B\x5C\x67\xC8\x71\x6D\x75\x73\x81\xBB\x72\xB4\x65\x62\x67\x0C\x6A\x2B\x6A\xAF\x60\x2D\x6A\x58\x67\x59\x6A\xBE\x5E\x69\x67\x56\x82\x1D\x2D\x4B\x82\xB4\x65\xD9\x70\xB1\x01\x7F\x6A\x51\x66\x81\x6A\x78\x67\x31\x6A\xAF\x65\xA7", -"\x5B\x45\x82\x69\x7F\x0D\x7A\x4C\x82\x89\x60\x29\x6A\x29\x7E\xFC\x67\xE7\x65\x74\x67\xDD\x67\x74\x6A\x11\x6A\x5D\x0F\x89\x67\x36\x72\x21\x69\x58\x82\x63\x1A\x74\x82\xDF\x60\x4F\x5C\x9B\x60\x39\x6A\x2C\x6A\x3B\x6A\x73\x6A\x52\x82\x7D\x82\x3C\x0E\x40\x6A\x26\x71\x04\x64\x71\x82\xBA\x7F\x47\x73\x84\x82\x57\x7D\x9F\x09\x56\x5B\x50\x82\x66\x6A\x8C\x82\x3E\x6A\x3C\x0E\x4E\x6A\x80\x82\x5B\x7A\xA3\x80\x33\x69\x95\x82\xAE\x67\x96\x82\x2D\x67\xFD\x73\x65\x67\x6B\x82\xA6\x66\xE4\x5E\x02\x6A\xFD\x65\x44\x82\x66\x82\x28\x7C\xD8\x66\xD0\x60\x5D\x82\xD2\x60\x5F\x82\xC2\x67\x9B\x82\x0E\x7A\x3C\x0E\x56\x61\xA8\x67\x25\x72\x4A\x82\xB4\x7B\x95\x82\x6F\x6A\x03\x66\x99\x82\x8B\x82\xFC\x80\x53\x82\x5D\x0F\x77\x6A\x64\x82\x42\x63\xAF\x82\x46\x6A\x7D\x6A\xF8\x66\xC2\x82\x58\x6A\x7C\x82\x9C\x82\xFF\x00\x83\x6A\x11\x7D\x3F\x0A\x92\x82\x23\x7E\xD5\x7B\x46\x7E\x38\x59\x78\x6B\xD8\x72\x72\x69\x93\x62\xD6\x82\x4D\x7E\xE9\x7D\xA8\x78\x5D\x0F\xBA\x6B\x39\x5F\x86\x69\x57\x82\xA1\x82\xB1\x7C\x3A\x66\xB8\x5B\x49\x82\x0D\x61\xDF\x82\x39\x81\x17\x17\x37\x81\x1B\x77\xB4\x67\x2A\x80\x47\x04\x9A\x6F\x38\x66\xDA\x65\xD6\x69\x41\x82\x91\x68\xFF\x7C\x2D\x60\x1D\x7E\x8A\x00\x11\x7D\xDC\x5A\x37\x52\x8F\x1A\xF7\x1A\xC9\x81\x56\x7C\xFC\x82\x34\x71\x3C\x0E\xA4\x06\x8B\x00\x07\x83\x78\x72\x1A\x7D\x03\x01\x8C\x00\x0C\x83\x11\x83\x08\x83\xF4\x76\x11\x81\x64\x66\xB3\x69\xFB\x7C\x66\x7F\xDC\x77\xF3\x76\x11\x0F\x8D\x00\x0E\x7D\xD0\x72\xAD\x37\x63\x68\x2C\x62\xD5\x72\x00\x62\xF4\x71\xC4\x02\xEF\x7C\xC3\x01\xDC\x82\x16\x81\x06\x83\x12\x83\x80\x65\x49\x72\x06\x01\x8F\x00\x00\x83\xDB\x78\xA6\x52\x01\x4B\x83\x79\x31\x82\x36\x73\x07\x83\xD8\x78\x70\x42\x1C\x7D\x04\x64\xB1\x7B\xDE\x5A\x36\x83\x88\x59\x1D\x7E\x90\x00\x2C\x83\x26\x67\x46\x66\x6D\x68\xB1\x69\x3F\x0A\x16\x69\x02\x70\x10\x78\x41\x64\xE8\x7C\x13\x78\x2F\x67\xBA\x7D\xA2\x22\x1D\x6A\x6A\x5B\x1D\x7E\xFD\x60\x17\x7E\x04\x64\x49\x83\x9A\x81\x4B\x83\xE6\x74\x50\x74\x48\x82\xAC\x82\x8F\x68\x48\x83\xFE\x81\x5A\x83\xA8\x7E\xBF\x82\xED\x08\x4F\x82\xB3\x82\xCC\x5E\x7A\x82\x52\x83\xC4\x60\x5B\x67\xEC\x82\x93\x62\x58\x83\x37\x59\x3F\x83\xCC\x05\x5A\x82\x0A\x6A\x77\x5F\xCE\x82\x2E\x6A\x61\x82\x7D\x5F\x79\x67\xBC\x82\x0D\x61\x6F\x83\x14\x0E\x71\x83\x24\x07\x67\x82\x71\x67\xA8\x65\x76\x83\x60\x82\xD0\x82\xB8\x82\xFF\x00\x21\x6A\x9F\x82\x7C\x0E\x61\x83\xED\x70\x2D\x23\x95\x82\x81\x67\x88\x82\x5E\x82\x8A\x82\xCF\x82\xB7\x82\xBC\x65\x6D\x83\x02\x63\x7D\x83\x10\x0E\x7F\x83\x64\x83\x37\x6A\x77\x82\xA1\x6A\xA7\x82\x69\x83\x4B\x6A\x6B\x83\x38\x59\x8F\x82\xA9\x66\x6E\x83\x8C\x83\x18\x78\x4A\x5D\x80\x83\x28\x7C\xA0\x67\x67\x83\x74\x66\xA1\x83\x3E\x82\x98\x67\x4D\x6A\x97\x83\x57\x83\xA8\x83\x3F\x71\x8E\x83\x73\x83\xE9\x49\xBD\x60\x6A\x82\xA0\x6A\xAA\x82\xD0\x66\x5E\x83\xC3\x68\x7C\x83\xB6\x83\x2A\x82\x19\x78\xA3\x82\xBF\x67\xF6\x65\x84\x83\xB6\x82\xC4\x82\x8D\x82\xFF\x00\xBA\x82\x4F\x6A\x1B\x5F\x99\x83\x0C\x0E\x9B\x83\x7C\x6A\x02\x66\x72\x00\xBC\x83\x51\x69\x67\x67\x76\x6A\xB4\x83\x60\x83\x25\x83\x40\x64\x5B\x83\xAB\x83\xCB\x82\xDA\x67\x7E\x6A\xC9\x83\x7B\x82\x95\x83\x19\x66\xA7\x5B\x43\x82\xB5\x83\xDD\x83\xA0\x70\x4C\x83\x32\x82\x13\x83\xDB\x82\xD4\x82\xCB\x6D\xEB\x83\x92\x55\xED\x83\x43\x6D\x8F\x6A\x2D\x5F\xE9\x83\xDC\x83\x3B\x72\xB7\x83\x19\x78\x1B\x60\x1F\x67\xD8\x60\xB5\x71\x98\x83\xC3\x83\xEE\x7C\x2D\x23\xF1\x82\xD0\x05\x9B\x6A\x9D\x6F\xFA\x67\xA9\x82\xE8\x69\x50\x5E\x0D\x73\x5A\x7D\x90\x82\x0E\x73\xAF\x74\x4E\x7D\x01\x01\x4B\x79\x41\x78\x53\x74\x53\x7D\x44\x78\x3E\x73\x14\x7A\xA2\x76\x0D\x0E\x42\x73\xDC\x71\x11\x84\xC8\x76\x2F\x80\x6A\x73\x72\x7E\xD4\x7E\x4E\x79\x6F\x5F\x73\x78\x14\x3D\x75\x78\x1B\x84\x03\x69\x8E\x7D\x76\x73\x76\x62\x8A\x83\x49\x7E\x90\x75\xE7\x80\x74\x73\xDB\x5A\x83\x62\xA4\x78\xE8\x7D\xB2\x77\x6C\x6F\xA5\x73\xC8\x82\x03\x01\x31\x84\x28\x80\x93\x81\x29\x81\x81\x62\xE4\x7D\xCB\x73\xE6\x7D\xCE\x73\x05\x83\xB7\x6B\xE8\x64\x27\x01\x05\x80\xE3\x5F\x20\x84\xF1\x7A\xF1\x81\xA9\x79\x1D\x7E\x1F\x7E\x85\x5B\x4D\x84\xFB\x6F\x33\x84\x2C\x84\x5C\x65\x27\x74\x0F\x84\xA6\x83\x02\x63\x3E\x84\x57\x7A\x13\x84\x78\x0D\x50\x7D\x73\x7E\x26\x84\xA1\x65\x50\x79\xF8\x5B\x52\x79\xB0\x7F\xD7\x5A\x7A\x7E\xEE\x71\x0D\x61\x5D\x84\x23\x82\x40\x84\xE3", -"\x81\x7F\x74\x34\x7F\xD6\x79\x6C\x0D\xA4\x7E\xFA\x6D\x84\x7C\xED\x4D\x1A\x75\x38\x84\x85\x79\xAB\x7E\xCC\x81\xD5\x67\x1B\x5F\x6D\x84\x63\x7B\x56\x84\x77\x78\x79\x82\xF7\x54\xAC\x79\xD8\x7E\xB4\x74\xF6\x62\x7D\x84\x74\x5E\x54\x84\xF8\x73\x82\x84\x39\x6D\x27\x82\xD8\x62\x03\x7F\xD8\x79\x76\x84\x18\x75\x21\x40\x79\x84\x47\x84\xB7\x7C\x0C\x7F\x15\x83\x34\x65\x29\x5D\x80\x84\x32\x7F\x8E\x84\xD5\x62\x90\x84\xA5\x82\x2E\x09\x37\x7F\x94\x84\x80\x79\x96\x84\x3B\x7F\xF9\x81\x6E\x81\x3E\x7F\x03\x0E\x04\x7D\x5A\x84\x8D\x84\x6F\x84\x73\x62\x62\x7F\x34\x63\xAE\x84\x27\x7D\x33\x64\x64\x81\x7F\x7A\x89\x7F\xE7\x82\xA0\x72\x8C\x84\xD2\x7B\xB1\x84\x53\x79\x8A\x7F\xD1\x83\xDF\x66\x7F\x84\xB7\x84\xC5\x80\x57\x7A\x24\x82\x46\x82\xE1\x82\xDD\x7F\x27\x01\xBC\x75\x16\x83\x6C\x84\x61\x63\xE6\x67\x63\x63\x30\x84\xC5\x84\xFE\x7E\x32\x84\xF2\x7A\xEF\x80\xCA\x81\x59\x6E\x2D\x80\xB5\x84\xBA\x62\xD4\x84\x87\x7F\x51\x76\x1B\x7B\x06\x01\x1D\x7B\x76\x63\xCF\x84\x97\x70\xB8\x84\x63\x7B\x76\x80\xDB\x38\xD3\x84\xE6\x84\xC6\x84\x6E\x84\xDF\x7C\x2A\x83\x97\x6F\xBE\x5E\x69\x7B\xB5\x72\x93\x62\x9E\x84\x0D\x81\xA0\x84\xF4\x72\xA3\x76\x8D\x7B\xBA\x70\xB6\x84\xEC\x84\xD5\x84\xA0\x78\x40\x6F\xCA\x76\x27\x01\x3D\x83\x12\x67\xF5\x84\xDE\x84\x9E\x7E\xEE\x84\xEF\x76\xE8\x82\xCA\x6F\xA9\x7A\x14\x83\x87\x79\xDF\x5A\x09\x72\x3D\x84\x07\x85\x2D\x70\x66\x81\x9E\x81\xA7\x78\xC9\x63\x1F\x77\xF6\x82\x7A\x84\x9E\x6F\x03\x7C\x9B\x84\xC0\x63\xAF\x84\xBE\x84\x4F\x84\x73\x7E\x06\x84\x95\x6F\x19\x83\x24\x72\x26\x08\x49\x08\xCD\x6F\x2D\x7C\xCF\x6F\x87\x84\x22\x77\xE8\x63\x8A\x84\x89\x5E\xBD\x84\xD6\x84\x22\x85\xD4\x7E\xF3\x81\xC4\x81\x38\x7F\xE5\x7C\x17\x78\x59\x7C\x54\x2F\x1C\x75\x16\x85\x07\x70\x11\x0E\x5E\x7C\xE0\x5A\x11\x85\x21\x6C\xFE\x84\xDF\x84\x27\x7C\x53\x7C\x28\x82\x78\x77\x2B\x83\xA7\x84\xED\x4D\xC8\x81\x2D\x85\xF4\x7A\x17\x64\x30\x85\x2D\x5F\x32\x85\x3F\x84\x34\x85\xD9\x7F\x36\x85\x49\x85\xE1\x77\xE9\x82\xDD\x77\x5B\x09\xF8\x81\xB0\x77\x3D\x7F\x38\x59\xFC\x81\xF0\x09\x5E\x71\x44\x85\xEE\x76\xE7\x84\x9F\x84\xD7\x84\xF0\x84\x9A\x70\xA2\x84\x0F\x78\x8D\x83\xFD\x83\x2C\x82\xDB\x02\xEB\x7C\x29\x64\x7F\x83\x13\x83\x7A\x0A\xEE\x72\xF4\x84\xDE\x5A\x37\x52\x09\x21\x74\x2C\xAB\x6A\x37\x83\x41\x84\x33\x7F\x10\x0E\xBD\x72\x08\x2C\x0D\x69\xD9\x66\xFE\x62\x2D\x84\x42\x5E\x46\x83\x86\x7D\x93\x62\xCD\x84\x6A\x75\x4A\x7E\x1C\x4E\x3D\x82\x0B\x84\xA6\x82\x40\x82\x15\x0E\xEB\x69\x25\x5F\x29\x5D\x8C\x85\x90\x75\xE2\x82\x3C\x0E\x4C\x67\x8A\x83\x98\x85\x18\x77\x9C\x83\x4E\x82\xFB\x69\xAE\x83\x86\x66\xB1\x83\x1F\x6A\x91\x65\xDB\x83\xCC\x84\xD1\x62\xC6\x83\x66\x60\x0B\x6A\x9E\x83\x3F\x82\x14\x66\xB0\x83\x91\x85\x00\x6A\x70\x60\xA8\x85\x22\x5D\xAA\x85\x81\x83\x79\x60\x72\x67\xA3\x85\xA3\x66\xA5\x85\xB3\x85\x20\x6A\xB5\x85\x5C\x63\xB7\x85\x28\x7C\x90\x83\xCE\x67\x03\x79\xA8\x82\xBD\x83\xB2\x83\x88\x67\xC0\x85\xFE\x6D\xAF\x74\xA0\x85\x86\x82\x92\x67\x69\x61\xA0\x83\xB5\x82\xE5\x83\xCB\x83\xD1\x82\xA5\x83\x05\x85\x02\x63\x9E\x85\x9F\x7E\xD3\x65\x14\x75\x98\x82\xBB\x85\x95\x67\xBD\x85\x68\x6A\x38\x59\x9E\x82\x3C\x84\xF7\x0A\xC2\x85\x46\x6A\xA4\x82\xD7\x83\x9E\x65\x5D\x0F\x5C\x6A\x1F\x84\xA9\x85\x10\x75\xB9\x83\xD4\x55\xDC\x5F\xE4\x83\x6A\x83\x7C\x5F\xDD\x66\x7A\x83\xF3\x69\x0D\x61\xDA\x85\x7F\x7A\xCE\x85\xE6\x66\x70\x6A\xDF\x85\xD0\x67\x85\x83\xE6\x83\x0D\x0E\xC7\x82\xEE\x85\xB6\x85\xF0\x85\x28\x7C\xCC\x82\xEA\x85\xFB\x66\xF8\x60\xE1\x67\x01\x73\x04\x64\xFB\x85\x63\x7B\x24\x79\x01\x61\x8A\x6A\xEA\x72\x10\x86\xD1\x62\x0D\x85\xE4\x82\xF1\x83\x07\x86\x12\x84\x7C\x72\x01\x7D\xF8\x85\x32\x6A\xFA\x85\xD1\x62\x24\x85\xD8\x83\x78\x82\x72\x82\xF5\x82\x1E\x61\xC6\x5B\x25\x86\x9F\x83\x13\x83\x54\x85\x2E\x6B\x29\x5D\x4D\x64\xDC\x71\x74\x0A\x3D\x1B\x36\x80\xAA\x81\x2E\x7E\xA0\x7D\x93\x69\xC0\x7E\xC6\x7F\xC2\x7E\x17\x80\xC4\x7E\x19\x80\x06\x7E\x42\x7D\x08\x7E\x5A\x81\x95\x7E\x5C\x81\x3D\x7E\xBB\x81\x94\x80\xBD\x81\x79\x7D\xE0\x7D\xAF\x6E\x5F\x84\x15\x84\x51\x7D\x17\x84\x87\x7D\x19\x84\x46\x78\x58\x7D\x48\x78\xFD\x84\x8C\x7F\x1B\x5F\x31\x86\x41\x6A\xF3\x67\xF9\x5B\x9B\x42\xF2\x80\x46\x7F\xF4\x80\x1D\x81\xDC\x81\xF7\x80\x69\x7C\xDE\x81\xD6\x80\xFB\x80\xEA\x50\xE2\x81\x68\x47\x28\x81\x70\x84\x46\x80\xE7\x81\x45\x80\xE9", -"\x81\x05\x81\xEB\x81\x50\x7B\x1E\x82\x71\x80\x91\x81\x73\x80\x4D\x86\x24\x84\xD9\x7F\x63\x84\x7D\x0D\x88\x7D\x35\x5D\x2A\x0B\x72\x73\x8C\x7D\xED\x62\x87\x85\x5D\x0F\x90\x7D\x57\x86\x0D\x61\x59\x86\x90\x82\x33\x86\x85\x45\xA9\x81\x64\x7C\xF5\x80\x62\x86\x1F\x81\xF8\x80\x65\x86\xFA\x80\xE0\x81\x15\x7C\xD9\x80\xA2\x7F\xE5\x81\xA4\x7F\x6E\x86\x41\x84\x70\x86\x8C\x81\x72\x86\x15\x7C\x74\x86\xBE\x81\x72\x80\xE6\x80\xBF\x84\x38\x6B\xDA\x5A\x36\x84\x50\x83\x9B\x2F\x1B\x85\x0C\x85\x9A\x85\xFF\x00\x3B\x84\x86\x86\x93\x62\x88\x86\x5B\x84\x5B\x86\x34\x86\x8C\x86\xD0\x80\x8E\x86\xD2\x80\x90\x86\x64\x86\xEE\x7F\xC0\x7B\x94\x86\x71\x7D\x69\x86\x8C\x59\x6B\x86\x6B\x46\x9A\x86\x6C\x86\x9C\x86\xA8\x7F\x9E\x86\x37\x73\xA0\x86\x4A\x86\xBF\x81\x50\x7B\xC1\x81\x8D\x85\x43\x84\x14\x63\x45\x84\x9A\x62\x98\x84\x0E\x64\x39\x83\x51\x01\x8E\x7B\x03\x01\xB1\x86\xD8\x85\xB3\x86\x8B\x86\xCE\x80\x34\x7D\x47\x7F\x4C\x81\xAD\x80\x4A\x7F\xAC\x81\xE1\x86\x4D\x7F\x52\x81\x4F\x7F\xB1\x81\xC9\x7F\xB3\x81\xCB\x7F\xB5\x81\xCD\x7F\xB7\x81\x1E\x80\xB9\x81\x20\x80\x81\x7F\x07\x81\x83\x7F\x09\x81\x4F\x80\xC4\x80\xFF\x84\x5E\x84\x51\x84\xD7\x86\xD7\x03\x78\x6A\x8A\x86\x5D\x86\x49\x81\xE6\x7F\x7B\x81\xB7\x86\x7D\x81\xBD\x7E\xE3\x86\x50\x81\xE5\x86\x10\x82\x53\x81\x12\x82\x55\x81\x3F\x86\xC6\x7E\x41\x86\xC8\x7E\x44\x7D\xC8\x79\x46\x7D\x1B\x82\xDC\x7D\x4C\x7C\xDE\x7D\xCA\x86\xA2\x86\x80\x7D\xF8\x84\x24\x2C\x13\x86\x47\x7E\x20\x85\x22\x84\xB0\x86\xFD\x86\x84\x45\xFF\x86\x06\x82\x0D\x80\x56\x7E\x6F\x7F\x04\x87\x71\x7F\x3C\x80\x0B\x82\x81\x81\xBC\x86\xF0\x7F\x41\x80\xB7\x80\x67\x80\xC1\x86\x6D\x36\xDD\x80\x2C\x81\x8B\x81\xC6\x86\x1C\x82\xC0\x80\x17\x87\x9D\x63\x4B\x86\x80\x6E\x78\x86\x61\x84\x25\x84\x8A\x85\x27\x84\x55\x74\x51\x79\x56\x6C\x14\x7E\xCB\x62\x52\x85\xA9\x2D\x87\x86\x22\x87\x9D\x15\xDC\x86\x5E\x86\x95\x7F\xDF\x86\x7C\x81\xAD\x81\xEA\x7F\x06\x87\xA1\x7D\x1C\x7A\xBB\x86\xCA\x7C\x2F\x87\xEF\x7E\x42\x80\xA8\x7D\x33\x87\x52\x46\xC3\x86\x49\x46\x2D\x81\x45\x80\x8D\x81\x16\x87\x70\x80\xA1\x86\x76\x86\xA3\x86\x56\x85\x94\x81\x00\x7F\xE3\x7C\x91\x84\x61\x0B\x75\x84\x67\x7B\x95\x84\x78\x84\xA9\x84\x5F\x85\xFA\x81\x38\x59\xAC\x7E\xDC\x7E\x88\x79\x4B\x87\x7E\x71\xFE\x86\x35\x86\x8D\x86\x61\x86\xB8\x86\x89\x7E\x12\x80\xE4\x86\xAE\x81\xE6\x86\x16\x80\xE8\x86\x18\x80\x14\x82\x1A\x80\x16\x82\x01\x81\x18\x82\x8A\x81\x1A\x82\xEA\x81\x39\x87\xEC\x81\x3B\x87\x05\x73\x3D\x87\x50\x80\xF8\x86\x7F\x7A\xF8\x7A\x85\x84\xD7\x7E\x6D\x81\x88\x84\xDA\x7E\x49\x87\xBF\x2D\x7B\x87\x32\x86\x23\x87\x7E\x87\xB6\x86\x80\x87\x29\x87\x3B\x80\x8A\x7E\x3D\x80\x2D\x87\x59\x87\x83\x81\xF1\x7F\x85\x81\xB8\x80\x87\x81\x8E\x80\x60\x87\xA9\x44\x62\x87\x41\x84\x64\x87\x49\x7D\x94\x87\x50\x7B\x96\x87\xF7\x86\x46\x85\x79\x79\xA2\x84\xE0\x74\xB2\x4C\x38\x85\xE3\x74\x07\x7F\x97\x84\x4F\x85\xAE\x79\x12\x63\xA0\x87\xF6\x81\x21\x87\x7C\x87\xA4\x87\xB5\x86\x51\x87\x03\x87\x53\x87\x7E\x81\x2B\x87\xB0\x80\x3E\x80\x9E\x7F\x39\x79\x62\x7E\xB4\x81\x58\x81\xB6\x81\x43\x86\xB8\x81\x45\x86\xF7\x7E\x5E\x81\x8E\x81\xFC\x7F\x1F\x82\x33\x81\x21\x82\x67\x85\x0D\x81\x6C\x87\x35\x7F\xAB\x60\xA5\x84\x71\x87\x4C\x85\xE4\x74\x74\x87\x7E\x85\x98\x81\x9F\x81\x1F\x75\xAD\x84\xDF\x7F\xCC\x87\xA3\x87\x4D\x87\x24\x87\x7F\x80\x26\x87\xD7\x81\x09\x82\xFB\x7D\xD2\x87\x05\x87\xE3\x7B\xA8\x87\xDD\x81\x58\x87\xA4\x7D\x5A\x87\x8A\x80\x5C\x87\xD5\x7D\x5E\x87\x50\x47\x35\x87\x28\x7F\xB6\x87\x6C\x86\xB8\x87\x1D\x82\xBA\x87\x15\x7C\xBC\x87\x63\x81\xED\x84\x12\x86\xB3\x84\x46\x75\xF6\x87\x02\x63\xD9\x86\x01\x84\xDB\x86\xFA\x87\x19\x81\xB6\x7B\x08\x82\x92\x7C\x0A\x82\xD5\x87\xDB\x81\x81\x87\xB1\x80\x20\x7F\xD8\x87\xFB\x77\x1B\x80\x43\x7D\x1D\x80\xD9\x7D\xD5\x7C\x6D\x80\xFA\x7F\xE2\x87\x31\x81\xE4\x87\x62\x81\xE6\x87\x17\x88\x32\x7F\xBA\x84\x65\x82\x1B\x88\x04\x64\x1D\x88\x7B\x83\xD2\x66\x5C\x86\xA5\x87\xD0\x87\xA7\x87\x00\x88\x2A\x87\xAA\x87\x2C\x87\xEC\x7E\x45\x80\xD7\x80\xA6\x7D\x09\x88\xF1\x7E\x0B\x88\x84\x50\x0D\x88\xF7\x7F\x0F\x88\x80\x44\xC7\x86\x45\x80\xC9\x86\x3C\x87\xCB\x86\x15\x7C\xCD\x86\x8B\x7B\xC1\x84\xEC\x7D\x3F\x88\xF9\x85\x41\x88\xB4\x86\xDD\x86\x67\x7D\xFD\x87\x24\x88\xFF\x87\x84\x87\x54\x87\x02\x88\x46\x88\xEA\x78\x05\x88\xB3\x80\xBD", -"\x86\x65\x80\xBF\x86\x01\x3E\xDB\x80\x26\x7F\x2B\x81\x0E\x88\x37\x87\x4A\x80\x56\x88\x41\x84\x58\x88\x95\x87\x5A\x88\x37\x73\x5C\x88\x55\x85\x0A\x85\xD8\x84\x2B\x83\x5A\x63\xEF\x85\x06\x76\x3F\x0A\x60\x88\x21\x86\x62\x88\x4E\x87\x00\x87\xF3\x80\x02\x87\x45\x88\x69\x88\xD3\x87\x48\x88\xD5\x87\xAC\x87\x06\x88\xAE\x87\x30\x87\xB0\x87\x32\x87\x98\x86\x45\x80\x52\x88\xBC\x80\x54\x88\x6D\x36\x11\x88\x3A\x87\x66\x87\x18\x87\x68\x87\x80\x7D\x00\x80\x02\x80\x54\x62\x30\x86\x4C\x87\x42\x88\xCF\x87\x60\x86\x25\x88\x1E\x7F\x27\x88\x03\x88\x63\x79\x6E\x88\x88\x80\x67\x86\x6D\x36\x96\x86\x43\x80\x9B\x88\x41\x84\x9D\x88\xE8\x81\x9F\x88\xF4\x41\x7A\x88\x6C\x86\x7C\x88\xBB\x87\x7E\x88\x45\x80\x80\x88\xC7\x84\x69\x85\xA5\x81\x1C\x7E\x2C\x80\xCC\x28\xFB\x86\xCD\x6F\xAB\x88\x63\x88\x4F\x87\xCF\x80\x44\x88\xAF\x88\x0E\x82\xE9\x7E\x93\x88\x80\x81\x4A\x88\x41\x84\x4C\x88\x24\x81\x4E\x88\x8C\x80\x50\x88\xD7\x6A\xB4\x87\xFD\x44\xBE\x88\x50\x47\xA1\x88\x93\x87\xA3\x88\x59\x88\x19\x87\xAE\x7F\xA4\x86\xD9\x63\xE1\x84\x03\x01\xE3\x84\x76\x6D\xA7\x5B\x89\x88\x6F\x82\x24\x5F\xD0\x88\x8D\x88\x5F\x86\x8F\x88\xD4\x88\x8F\x86\x82\x87\xCF\x7D\xB4\x88\x22\x81\x07\x88\xD8\x80\x72\x88\x50\x47\x74\x88\xF5\x7F\x76\x88\x53\x88\x78\x88\x92\x80\xC0\x88\x9B\x3E\x13\x88\x37\x73\x15\x88\x38\x88\x98\x87\xE8\x84\x53\x76\xB3\x6E\x5F\x88\xCF\x88\x8C\x88\x25\x87\x4A\x81\x27\x87\x0F\x80\xB2\x88\xB9\x86\xEB\x7E\xF9\x80\xED\x7E\xB6\x88\x93\x59\x01\x89\xD2\x6A\xDF\x88\x79\x63\xBC\x88\x6F\x86\xE3\x88\x84\x50\xE5\x88\x73\x86\x0B\x89\x45\x80\x0D\x89\x98\x80\xEB\x88\xAB\x63\xC8\x84\x27\x86\x39\x84\x9E\x80\xE1\x43\xCD\x88\x7C\x0B\x14\x89\x20\x88\x3B\x7A\x8E\x88\x18\x89\xAC\x80\x07\x87\xB5\x78\x4F\x81\x56\x87\x6D\x88\x3B\x86\x82\x81\xC3\x7E\x84\x81\xCA\x7F\xFF\x80\xCC\x7F\x17\x82\xCE\x7F\x30\x88\xD0\x7F\x32\x88\x21\x80\x5F\x81\xF4\x86\xEE\x81\xF6\x86\x16\x88\x0F\x89\x3A\x88\xFA\x84\xC8\x80\x3D\x88\x88\x88\x38\x89\x43\x88\xAE\x88\x68\x88\x3E\x89\x6A\x88\x0D\x82\xFA\x88\x29\x88\x3F\x80\x2B\x88\xBE\x78\xE2\x76\x11\x87\xCA\x7E\x13\x87\x91\x87\x15\x87\xB9\x87\xE7\x88\x7D\x88\xE9\x88\xC0\x81\x1B\x87\xE4\x20\xE9\x80\x38\x59\xEB\x80\x40\x7F\xA2\x87\x5A\x86\x7D\x87\xAD\x88\xF8\x88\x5E\x89\x41\x89\x11\x80\xFC\x88\x43\x89\x2E\x87\x97\x88\x5B\x87\x31\x87\xDA\x80\x23\x89\x03\x63\x25\x89\x9B\x86\x27\x89\x8D\x50\x29\x89\x9F\x86\x2B\x89\x41\x84\x2D\x89\x69\x87\x22\x82\x81\x84\xC8\x88\xF4\x82\x33\x89\xAC\x86\xD7\x7B\x8B\x7C\x58\x86\x5B\x89\x7B\x89\x3C\x89\xE0\x86\x5F\x89\x92\x88\x83\x87\xA0\x89\x3A\x86\xAF\x81\x3C\x86\x88\x87\x3E\x86\x8A\x87\x40\x86\x2D\x88\x42\x86\x68\x89\x5B\x81\x6A\x89\x71\x86\x92\x87\x2A\x89\x6E\x89\xC3\x88\x70\x89\xCC\x86\x72\x89\x1E\x1B\x24\x86\xEF\x82\xF2\x76\x14\x0E\x99\x6F\x29\x86\x1B\x0C\xBA\x89\x08\x76\x15\x0E\x41\x81\x9A\x89\x78\x89\x89\x86\xCE\x87\x64\x88\x9C\x7D\x81\x80\x2D\x7E\x34\x79\xB1\x88\x6C\x88\x04\x88\x81\x89\xAD\x87\x45\x89\xAF\x87\x47\x89\x86\x81\x49\x89\x8D\x87\x4B\x89\x19\x82\x31\x88\x14\x87\x6E\x80\x65\x87\x8F\x81\x75\x86\x20\x82\x2E\x89\x6A\x87\x7F\x85\xB9\x89\x26\x85\xCB\x6F\x29\x85\xCC\x73\x6B\x81\x2C\x85\x9D\x87\x2E\x85\x31\x7C\xCA\x87\x1C\x4E\xC5\x89\xB2\x86\x7A\x89\xC8\x89\x55\x7E\x66\x88\xCB\x7D\xF9\x88\x28\x88\x0C\x82\x7F\x81\xD5\x88\xD6\x87\x11\x82\x40\x80\x84\x89\x99\x88\x86\x89\xBA\x88\x6C\x86\x89\x89\xC4\x86\x8B\x89\x79\x63\x8D\x89\xC8\x86\x8F\x89\x6C\x86\x91\x89\x1A\x87\x2F\x89\x4B\x63\x58\x85\x81\x7C\xE5\x89\x4A\x83\x58\x7C\x04\x70\x3C\x85\xA9\x7E\x76\x87\xD1\x5B\x41\x85\xB1\x79\xAA\x88\xCD\x87\xF9\x87\x5C\x89\x7C\x89\xAB\x81\x6B\x88\x91\x88\xA4\x89\x86\x87\xB0\x81\x0B\x87\xB2\x81\x0D\x87\x57\x81\x0F\x87\x59\x81\xAD\x89\x44\x86\xAF\x89\x9D\x86\xB1\x89\x8E\x89\xB3\x89\x14\x88\xC4\x88\x41\x84\xC6\x88\x7F\x7A\x10\x8A\x29\x7C\xA6\x84\xDA\x79\x85\x7C\x35\x70\x12\x64\xF1\x87\x60\x85\xB4\x77\xEE\x89\x06\x7C\xCE\x88\x1D\x8A\xAC\x88\xF3\x89\xE4\x7E\x9E\x89\x52\x87\x23\x8A\x47\x88\xA2\x89\x7E\x89\xB3\x88\xD0\x89\x96\x88\xD2\x89\x98\x88\xD4\x89\xB1\x87\xD6\x89\x88\x81\x8E\x87\x90\x80\x07\x89\xE0\x80\x09\x89\x52\x3E\x0A\x8A\x2B\x36\x35\x8A\x6C\x86\x37\x8A\x63\x7B\x39\x8A\xC0\x89\x1A\x83\xD7\x6F\xDE\x77\x25\x2E\xC7\x87\x2B\x80\xB8\x7C\x74\x70\xBA\x7C\x1C", -"\x8A\xF8\x87\x47\x8A\xD1\x88\xDE\x86\x5D\x89\x21\x8A\x61\x89\xF8\x89\x95\x88\x6F\x88\xFF\x88\x4D\x88\x85\x89\x97\x86\xB2\x87\xDC\x80\xE1\x88\x50\x47\xC5\x86\x79\x88\x31\x8A\x09\x8A\x33\x8A\x0C\x89\x61\x8A\x09\x36\xB7\x89\x54\x6E\x82\x88\x6A\x85\xBC\x61\x6C\x85\xED\x7C\xF5\x71\xF4\x83\xDF\x83\x8E\x85\x71\x85\xA5\x70\x30\x82\x62\x83\x29\x64\x43\x83\x8C\x61\xD7\x5A\x9A\x40\xB9\x64\x2D\x83\x11\x0E\x53\x68\x00\x00\x92\x00\x9B\x8A\x44\x83\x11\x0E\x9A\x40\x70\x3B\xA0\x8A\x15\x0E\xA2\x8A\x94\x00\xA5\x8A\x1B\x83\x27\x01\x96\x00\x31\x83\xDA\x5A\xFA\x59\x7E\x21\x96\x5A\x06\x5D\x7D\x68\x89\x5C\x9B\x6D\x3B\x0E\xB1\x3C\x56\x83\x04\x00\x2B\x0E\x29\x83\x08\x0E\xB4\x8A\x09\x25\x3E\x65\x7C\x68\xC2\x64\xD6\x09\xB3\x08\xBE\x8A\xE2\x5A\xE0\x64\xC0\x8A\xDC\x5A\x91\x5A\x10\x72\xD7\x71\xF9\x09\xAB\x68\x0F\x86\x2C\x62\xE5\x82\x87\x07\xB1\x09\x14\x2D\xB6\x8A\x5F\x68\xD4\x24\x70\x09\xB3\x08\x65\x7B\x37\x59\xF9\x64\x0A\x69\xCE\x09\xAA\x1F\x66\x8A\x27\x85\x39\x85\x92\x8A\xD6\x09\xAA\x86\x99\x81\xA5\x8A\x26\x7D\xDD\x84\xB3\x7F\xB7\x4C\x15\x76\xD6\x22\x3F\x0A\xD6\x00\x6E\x63\xDB\x59\x1F\x8A\x4A\x8A\xD1\x87\x4C\x8A\xA9\x87\x4E\x8A\x39\x86\x57\x87\x51\x8A\x7A\x8A\x83\x89\x08\x88\x7D\x8A\xB9\x88\x7F\x8A\x75\x88\x89\x81\x5A\x8A\x90\x87\xB0\x89\x6C\x89\x12\x88\x87\x8A\x2C\x89\x89\x8A\x6D\x36\x81\x7D\x07\x0E\x83\x7D\x09\x73\xFE\x62\x7B\x86\x02\x01\x28\x84\x89\x7D\x8D\x65\x45\x78\x8B\x79\x54\x86\x1D\x84\x1F\x87\x3B\x82\x04\x64\xEA\x64\xC4\x7C\xF1\x8A\x27\x01\xF3\x8A\xE2\x5A\xF5\x8A\x9D\x89\xF5\x89\xE6\x7E\xF7\x89\x1A\x89\xFB\x88\x20\x81\xFD\x88\xDF\x81\x7B\x8A\xDC\x88\x02\x8B\x5D\x87\x02\x8A\xC2\x86\x05\x89\x9E\x88\x5B\x8A\x2E\x81\x5D\x8A\x01\x3E\xC2\x88\x34\x8A\xB5\x89\x5B\x88\x3F\x87\x30\x6B\x4F\x86\x75\x7E\x43\x78\x74\x78\x8B\x7D\x2B\x84\x83\x84\x00\x7D\x79\x78\x06\x01\x7B\x78\x1B\x8A\xA7\x5B\x21\x8B\xF6\x80\x23\x8B\x09\x01\x25\x8B\xE1\x5A\x27\x8B\x48\x8A\x6D\x7F\xF7\x8A\x90\x88\xA3\x89\x4D\x8A\x80\x89\xA5\x89\x44\x89\x3D\x86\x46\x89\xEA\x86\x48\x89\xEC\x86\x4A\x89\xEE\x86\x4C\x89\x1F\x80\x4E\x89\xF2\x86\x50\x89\xE3\x80\xF5\x86\xE5\x80\x0D\x8A\xE2\x89\x6C\x86\xF0\x71\xA7\x86\x07\x0D\xA9\x86\xD3\x86\x76\x72\xBF\x7D\x8F\x7B\x4E\x8B\x1B\x5F\x50\x8B\x62\x86\x52\x8B\x06\x01\x54\x8B\xE0\x5A\x56\x8B\x73\x8A\x65\x88\xCA\x89\x5C\x80\x7D\x89\xFC\x8A\xFA\x8A\x5D\x8B\x25\x8A\xA6\x89\x27\x8A\xE9\x86\x29\x8A\xDA\x87\x2B\x8A\xDC\x87\x2D\x8A\xDE\x87\x2F\x8A\x38\x87\x0A\x8B\xA2\x88\xDE\x89\x67\x87\xE0\x89\x92\x89\xE7\x87\x23\x79\xCF\x86\x09\x6D\xE8\x89\x35\x21\x46\x84\x6B\x8A\xE9\x7D\x31\x65\xEF\x8A\xE2\x61\x93\x62\x7C\x8B\xD2\x80\x7E\x8B\x03\x01\x80\x8B\xDF\x5A\xDB\x59\x52\x65\x4A\x84\xEC\x7D\xAA\x8B\xB2\x88\xAC\x8B\x02\x01\xAE\x8B\xDE\x5A\x82\x8B\xF6\x88\x50\x87\x75\x8A\x37\x86\x40\x89\x88\x8B\xCF\x89\x5E\x8B\x82\x89\x53\x8A\xFF\x89\x55\x8A\x9A\x88\x04\x8B\x04\x89\x06\x8B\xDE\x80\x39\x8B\x63\x87\x3B\x8B\x50\x47\x3D\x8B\x88\x8A\x3F\x8B\x7F\x88\x8B\x8A\x41\x23\xBE\x5E\x3C\x66\x98\x00\x1E\x83\xFA\x82\x11\x73\xB3\x8B\xF4\x5A\x4D\x51\x3C\x06\xF2\x8A\xF4\x8A\xFD\x3F\xF9\x07\xF6\x8A\x29\x8B\x28\x87\xCE\x89\x63\x86\x1C\x89\x92\x86\x1E\x89\x70\x88\x41\x84\xB8\x88\x34\x8B\xC8\x8B\xBA\x80\x37\x8B\xBD\x88\xCC\x8B\xB7\x87\xCE\x8B\x84\x50\xD0\x8B\x0D\x8B\xD2\x8B\xC5\x88\xD4\x8B\xF0\x71\xAC\x86\x48\x7E\xEC\x80\xA7\x8B\x62\x79\xB6\x8B\x01\x01\xB8\x8B\xDD\x5A\xBA\x8B\x16\x89\x01\x87\x59\x8B\x2B\x8B\xE7\x8B\x1B\x89\xAB\x87\xD9\x88\x6C\x86\xDB\x88\xE1\x81\xDD\x88\x41\x84\x03\x89\xF1\x8B\xCA\x8B\x36\x87\x08\x8B\x30\x8A\x97\x8B\xE6\x88\x99\x8B\xA4\x88\x9B\x8B\x80\x7D\x41\x8B\x40\x78\x43\x8B\x14\x0E\x54\x6C\x45\x87\xAE\x85\x86\x63\x69\x84\xEE\x89\x13\x81\x06\x01\xB4\x8B\xE7\x8B\x03\x8C\x00\x00\x05\x8C\xDC\x5A\x07\x8C\xFB\x87\x17\x89\xE5\x8B\x19\x89\x0C\x8C\x2D\x8B\x91\x86\x2F\x8B\x66\x86\xEC\x8B\x6C\x86\xEE\x8B\x0A\x88\x35\x8B\x34\x87\x81\x8A\x84\x50\x83\x8A\x08\x89\x85\x8A\x57\x88\x5F\x8A\x6D\x36\x0C\x8A\xEA\x88\x70\x8B\x85\x7D\x76\x77\x73\x84\x4F\x5C\x70\x87\xDC\x7F\xEE\x87\xC5\x87\xF0\x87\xE7\x74\x5A\x85\x99\x84\x15\x0E\x78\x87\x7B\x7E\x3E\x60\xA9\x8B\xDD\x8B\x45\x51\xDF\x8B\x24\x8B\xE1\x8B\x67\x45\xE3\x8B\x28\x8B\x85\x8B\xD8\x81\x87\x8B\x35\x82\x01\x88\x77\x8A\x2C\x8B\x63\x89\xD7\x87\x9D", -"\x7B\x2C\x88\x8C\x87\x58\x8A\xD8\x89\x8F\x87\xDA\x89\x6B\x89\xDC\x89\x6D\x89\x1D\x8C\xE8\x88\xA5\x88\x4C\x8C\x93\x89\x32\x7F\x9A\x87\x8C\x65\x86\x84\xEB\x89\x50\x85\x11\x0E\xDB\x7E\x5C\x8C\x85\x74\x5E\x8C\x51\x75\x2F\x8C\x31\x8C\x07\x73\x57\x4D\x74\x07\xE4\x8B\x67\x8C\xFE\x87\x76\x8A\xFA\x89\x62\x89\xFC\x89\x0A\x87\xFE\x89\x01\x8B\x00\x8A\x7E\x8A\x57\x8A\xB3\x87\xF2\x8B\x26\x89\xF4\x8B\x10\x88\xF6\x8B\x8D\x50\xF8\x8B\x90\x89\x0E\x8B\x72\x50\xFC\x8B\xE9\x87\x50\x8C\xF4\x5B\x04\x7F\x3B\x8A\x0E\x7F\x73\x87\x09\x7F\x75\x87\xAB\x84\x38\x59\xE1\x79\x79\x87\xDF\x5A\x2B\x8C\xF0\x37\x5F\x8C\xB8\x59\x6F\x21\xE0\x8B\x26\x8B\xE2\x8B\x78\x81\x57\x8B\xAA\x80\x0A\x8C\x69\x8C\xDD\x69\x6B\x8C\x94\x8C\x78\x8A\x0F\x8C\x4F\x49\x1F\x89\xCE\x6A\x13\x8C\x6C\x86\x15\x8C\xE6\x81\x9E\x8C\x8A\x89\xA0\x8C\x55\x88\x47\x8C\x7B\x88\x49\x8C\x01\x3E\x4B\x8C\x71\x89\x0E\x8A\xDC\x74\xA2\x84\x06\x7A\xC2\x87\xAD\x8C\xA2\x81\xA8\x84\xB0\x8C\x40\x8A\x18\x8A\x0F\x7A\xF5\x87\xAF\x86\x02\x63\x2D\x8C\xF9\x8A\xD5\x55\x61\x8C\x53\x8B\x63\x8C\x8E\x8C\x82\x07\x90\x8C\x23\x88\xF6\x89\xC3\x8C\xF5\x68\x3F\x89\x55\x87\xC0\x8B\x50\x8A\xC2\x8B\xD1\x89\x60\x8B\xD3\x89\x62\x8B\xD5\x89\x64\x8B\xD7\x89\x66\x8B\xD9\x89\x4D\x89\xDB\x89\x33\x88\xDD\x89\xE3\x87\xDF\x89\xE5\x87\xE1\x89\x7E\x8C\x0D\x81\xF3\x76\x34\x7A\x0C\x01\xDC\x8B\x8A\x8C\xBB\x8C\x62\x8C\xBD\x8C\x64\x8C\xBF\x8C\x83\x8B\xC9\x89\xF2\x8C\x2A\x8B\xF4\x8C\xA0\x6C\x4E\x81\xF7\x8C\x6A\x8C\xFD\x8A\xFA\x8C\x52\x8A\xFC\x8C\x54\x8A\xFE\x8C\x56\x8A\x00\x8D\x73\x8C\x02\x8D\x75\x8C\x04\x8D\x77\x8C\x06\x8D\x79\x8C\x08\x8D\x9A\x8B\x0A\x8D\x9C\x8B\x39\x88\x0D\x81\x3B\x88\xC9\x82\x77\x89\x89\x8C\xF0\x8A\x13\x8D\xED\x8C\x15\x8D\xEF\x8C\x6C\x07\xF1\x8C\x9A\x75\x86\x8B\x93\x8C\xD4\x87\xD8\x88\x1D\x89\x4B\x88\xCA\x8C\xD0\x75\x21\x89\x8D\x50\xCE\x8C\x99\x86\xD0\x8C\x05\x8A\xD2\x8C\xA0\x88\xA2\x8C\x79\x63\xA4\x8C\x0B\x8A\xA6\x8C\x50\x47\x63\x8A\x3A\x88\x5E\x88\xEE\x8A\xC9\x30\xB9\x8C\x08\x5A\x8B\x8C\xEE\x8C\x83\x4F\x8F\x8C\x66\x8C\x1A\x8D\xE6\x8B\xEA\x8C\xE8\x8B\x0E\x8C\x46\x8D\xDA\x88\x48\x8D\xCB\x74\x4A\x8D\x79\x63\x4C\x8D\x9C\x88\x43\x8C\x8D\x50\x45\x8C\x5C\x8A\xD4\x8C\xC1\x88\xD6\x8C\x7A\x50\x56\x8D\x84\x50\x58\x8D\xF7\x84\x95\x89\x9C\x80\xCA\x84\x85\x88\x1C\x86\xE0\x5A\x5D\x7A\xB8\x8C\x12\x8D\xEC\x8C\x7F\x8B\x60\x8D\x55\x35\xD6\x02\x40\x8D\x23\x78\x42\x8D\xBE\x8B\x1F\x8D\xC4\x8C\x21\x8D\x8B\x8B\x5F\x8B\xA7\x89\x61\x8B\x8F\x8B\xEB\x86\xDB\x87\xED\x86\xDD\x87\xEF\x86\xDF\x87\xBA\x81\xE1\x87\x07\x8D\x35\x88\x09\x8D\x37\x88\x73\x80\xA7\x88\x00\x8C\x5C\x8D\x85\x8D\x86\x01\xBC\x8C\x55\x8B\xBE\x8C\xA8\x81\xC0\x8C\x7A\x81\xC2\x8C\x43\x8D\xD7\x88\xFB\x89\x79\x8A\xB5\x88\x3D\x8C\x68\x86\xCC\x8C\x6A\x86\x41\x8C\x5F\x87\x4E\x8D\x61\x87\x50\x8D\xBF\x88\x75\x8D\x0A\x89\x0C\x8B\xA5\x8C\xFA\x8B\x36\x8A\xFC\x8B\x31\x89\x93\x82\xC8\x87\xDA\x84\xCC\x88\x38\x8D\xE8\x8C\x5D\x8D\xF6\x68\x5F\x8D\x3D\x8D\x61\x8D\xF0\x8C\x63\x8D\x41\x8D\x68\x8C\xB0\x8D\xFB\x8A\x20\x8D\x42\x89\x22\x8D\xFF\x8A\xC4\x8B\x99\x8C\xC6\x8B\x01\x8A\xF0\x8B\xCF\x8C\x17\x8C\x77\x88\x19\x8C\x96\x8B\x78\x8C\x0B\x8B\x7A\x8C\x6F\x89\x7C\x8C\xD9\x8C\x4D\x8C\x47\x87\x11\x0E\x2F\x76\xEF\x88\xD1\x7A\x01\x8C\x26\x7B\xCF\x8D\xAA\x8D\x16\x8D\xAC\x8D\x18\x8D\xF4\x89\x91\x8C\x67\x88\xD6\x8D\x8A\x8B\x09\x87\xE7\x86\x8D\x8B\x89\x87\xD9\x87\x97\x8D\x91\x8B\x99\x8D\x93\x8B\x9B\x8D\x95\x8B\x84\x8A\x1B\x8C\xB2\x89\xE8\x8D\xB4\x89\xEA\x8D\xB6\x89\xDA\x8C\x47\x78\x0D\x0E\x54\x76\xA5\x8D\x2C\x8C\xCD\x8D\x32\x6C\xF4\x8D\x81\x8B\xAB\x8D\xD4\x81\x34\x8C\x09\x8C\x36\x8C\x3D\x89\x4F\x8A\x0D\x8C\x49\x88\x69\x8D\x10\x8C\x6B\x8D\x79\x63\x3F\x8C\x4F\x88\xB9\x8D\x0C\x88\x71\x8D\xDC\x6A\x06\x8A\xE1\x6A\x52\x8D\x03\x63\x54\x8D\x60\x8A\xC3\x8D\x62\x8A\xC5\x8D\x7D\x8D\x39\x82\xE1\x82\xF2\x84\x9F\x80\x11\x8D\x3A\x8D\x86\x8D\xAD\x8B\x88\x8D\x95\x4F\x8A\x8D\xD3\x8D\x8C\x8D\xD5\x8D\x8E\x8D\x22\x8A\x5B\x8B\xD9\x8D\x92\x8D\xC3\x8B\x24\x8D\xC5\x8B\x26\x8D\xC7\x8B\x9C\x8C\x80\x8A\xBB\x8D\xB5\x87\xBD\x8D\xE4\x88\x2F\x8E\xE6\x6A\x77\x8D\x84\x50\xD8\x8C\x0F\x8E\xEC\x8D\x68\x84\x0D\x0E\xEF\x88\x16\x6F\x20\x87\xCC\x8D\xA7\x8D\x6B\x00\xA9\x8D\x19\x8E\xF6\x8D\x1B\x8E\x21\x88\x0A\x7C\xFA\x8D\xF3\x8C\xFC\x8D\x2E\x8B\xFE\x8A\xB4\x8D\x31", -"\x8B\x12\x8C\x33\x8B\x40\x8C\xE0\x8D\x4D\x8D\xE2\x8D\x06\x89\xE4\x8D\x09\x8E\xE6\x8D\x98\x8B\x30\x8D\x1E\x8C\x32\x8D\x6F\x8B\x0C\x8D\xFF\x72\x9B\x6D\xA0\x80\xF3\x64\x47\x83\xF2\x8D\x4B\x7B\x18\x8E\xAF\x8B\x1A\x8E\x8D\x01\xA0\x80\x1C\x4D\x85\x8E\xA6\x8D\x3C\x8E\xA8\x8D\x14\x8D\xF5\x8D\x3E\x8D\xCC\x08\xD7\x5A\xA5\x63\x99\x00\xDC\x84\x84\x8D\x90\x8E\x4A\x71\xC6\x85\xB7\x52\xC0\x39\xDE\x59\xFD\x0A\xD1\x8D\xC8\x09\xD7\x5A\x4D\x8B\x01\x01\x98\x8E\xFC\x84\x15\x8E\x62\x8E\x8A\x64\xED\x4D\x29\x39\x26\x39\xA0\x8E\x5C\x0C\xA2\x8E\x95\x8E\x0D\x0E\xE6\x77\x02\x01\x9A\x00\x1B\x86\xA9\x8E\x9B\x8E\x48\x71\x27\x01\x9B\x00\xB7\x8E\x9A\x8E\xBF\x77\xD6\x22\xBE\x5E\x04\x85\x9C\x00\xBD\x8E\x3A\x83\xB9\x8E\xD7\x5A\x13\x69\x9D\x00\x99\x8E\xC5\x8E\xBF\x8E\x3B\x8D\x87\x8D\xD0\x8D\x89\x8D\xC9\x59\xBE\x5E\xCD\x84\x6C\x45\x8E\x8E\xB8\x8E\xCC\x8E\x3D\x8E\xB7\x8B\x3F\x8E\xF9\x58\xDE\x59\xBE\x5E\xAB\x64\x00\x00\x9E\x00\xC4\x8E\x71\x46\x62\x8E\xBE\x5E\x3C\x48\xA1\x00\xCA\x8E\xE2\x8E\x9B\x8E\x64\x8E\x89\x8E\x66\x8E\xB3\x64\xBE\x5E\x39\x47\x9F\x00\xE1\x8E\x3A\x47\xAA\x8E\x83\x86\x3C\x0E\x76\x89\xC4\x89\x39\x8D\xD7\x8E\x91\x8E\x3C\x8D\x93\x8E\xB1\x8E\x17\x8D\xBB\x8B\xD2\x88\xBD\x8B\xCC\x89\x38\x86\xD8\x8D\xC1\x8B\x49\x8E\xFB\x8C\x94\x8D\xFD\x8C\x96\x8D\x63\x8B\x98\x8D\x65\x8B\x9A\x8D\x67\x8B\xF0\x86\x69\x8B\x47\x86\xE2\x80\x49\x86\x7B\x8C\x1F\x8C\x7D\x8C\x9D\x8B\x51\x74\xC6\x8D\xD7\x82\xC8\x8D\x11\x0E\x25\x48\xA4\x00\xE7\x8E\xF2\x8E\xE9\x8E\x92\x8E\x65\x8E\x94\x8E\xAD\x69\xBE\x5E\xF3\x64\xA3\x00\x8A\x83\xE9\x8C\x47\x8E\xEB\x8C\xFA\x8E\xCE\x8E\xFC\x8E\xD0\x8E\x82\x07\xE3\x72\x90\x5C\x42\x56\x6D\x60\xC6\x59\x26\x8F\xF1\x67\x1E\x85\x72\x87\x0D\x61\x2B\x8F\x4F\x8A\x88\x8E\xB9\x8B\x8A\x8E\x8B\x8D\x8A\x7A\x4B\x8A\x2C\x8F\x67\x8D\x22\x8E\xEA\x8B\x47\x8D\xB5\x8D\xB7\x88\x6D\x8D\xF1\x78\x29\x8E\x51\x88\x2B\x8E\x03\x63\x73\x8D\x3A\x8B\xBF\x8D\x5E\x8A\xC1\x8D\x55\x8D\x33\x8E\x8A\x8A\x10\x8E\xB5\x62\xE4\x89\x67\x81\xBB\x89\x10\x0E\xBD\x89\x37\x66\xE9\x8A\xF3\x87\x40\x81\x2A\x8C\x29\x5D\x3D\x8F\xF8\x8C\x3F\x8F\x06\x8C\x41\x8F\x42\x8E\x43\x8F\xF8\x8A\x45\x8F\x21\x8E\x94\x88\xC8\x8C\x6D\x36\x11\x8C\x95\x86\x4C\x8F\x80\x62\x6F\x8D\xBB\x88\x50\x8F\xC5\x7A\x2D\x8E\x80\x62\x08\x8A\x48\x8C\x56\x8F\x32\x8E\x0E\x8E\x5B\x88\xFC\x8B\x5C\x8F\x3E\x85\x83\x7C\x69\x81\xE1\x63\x2B\x85\x4F\x77\xA4\x8B\xD9\x84\x6F\x81\x65\x8F\x4F\x8B\x16\x8E\xAC\x6D\x69\x8F\x32\x8C\x6B\x8F\xAD\x8D\x36\x86\x02\x8F\xBF\x8B\x04\x8F\xF9\x8C\x06\x8F\x23\x8D\x08\x8F\x25\x8D\x0A\x8F\xFF\x8C\x0C\x8F\x01\x8D\x0E\x8F\x03\x8D\x68\x8B\x05\x8D\x4F\x89\x34\x88\x60\x81\x36\x88\xEF\x81\x0B\x8D\x18\x8F\x23\x85\x90\x8A\x5D\x8F\x7A\x77\x13\x8A\xAD\x6A\x3B\x85\x62\x8F\x1E\x75\x40\x85\x8F\x8F\x7B\x8B\x91\x8F\xD9\x6C\x93\x8F\x8D\x8C\xFD\x8E\xF7\x8D\xFF\x8E\x74\x8A\x20\x8A\x45\x8E\x6C\x8C\x38\x8C\x6E\x8C\xFD\x89\x65\x89\x3B\x79\x67\x89\x2F\x88\xA5\x8F\x10\x8F\xA7\x8F\x6A\x8B\xA9\x8F\x51\x89\xAB\x8F\x53\x89\x0E\x89\xBE\x87\xC2\x81\x4F\x8C\x59\x85\x55\x7C\x5B\x85\xAE\x8C\xC7\x81\x3E\x8A\xAF\x77\xE3\x8C\xB2\x8C\x42\x8A\x3A\x8F\x54\x8C\x61\x8E\x22\x8F\xFB\x8E\x24\x8F\xBF\x8F\x67\x8E\x3A\x89\xF7\x88\xAF\x8D\xC4\x8F\xC6\x8C\x6D\x8C\x96\x8C\xFF\x8D\x98\x8C\x00\x89\xB7\x8D\xC0\x86\x4E\x8F\xE0\x88\x51\x8E\xE2\x88\x53\x8E\x28\x89\x55\x8E\x73\x79\x57\x8E\x8D\x50\x59\x8E\x83\x8F\x5A\x8F\x64\x70\xB0\x8F\x86\x8F\x1D\x6C\x70\x85\xBB\x0C\x7E\x77\xB1\x8F\xA5\x05\xD7\x5A\x62\x85\x0E\x03\x03\x84\x20\x8B\xBB\x8F\xA8\x6D\xBD\x8F\xDA\x5A\x33\x8C\x68\x8E\x2B\x7E\x6A\x8E\x1B\x8D\x6C\x8E\x3A\x8C\x6E\x8E\xFE\x88\x00\x8B\xF4\x8F\x72\x8E\x28\x8E\x74\x8E\x70\x8D\xF9\x8F\x82\x8A\x7C\x8F\xCA\x49\x7E\x8F\xD5\x8C\x80\x8F\x4A\x8C\x79\x8D\x8D\x50\x7B\x8D\xF7\x6D\x36\x8E\xC9\x84\xB2\x77\x65\x8A\x91\x8A\x26\x83\x2B\x82\x1F\x8B\x96\x8A\x2F\x82\xE8\x7C\x74\x85\xB5\x5B\xD5\x86\x21\x8F\x5E\x63\x29\x5D\x04\x65\x22\x88\x05\x1D\xEE\x38\xDA\x69\xEC\x8A\x12\x85\xCB\x8D\x04\x64\x0C\x65\xDE\x5A\x76\x5C\x42\x8F\x0C\x7C\xDA\x81\x03\x8F\x90\x8D\x48\x8E\xFE\x8D\x87\x87\x00\x8E\xA8\x89\x02\x8E\x0B\x8F\x04\x8E\x0D\x8F\x06\x8E\x0F\x8F\x9C\x8D\xF1\x86\x12\x8F\xF3\x86\x6C\x8B\x52\x89\x6E\x8B\xE6\x72\x21\x8C\x84\x7D\x14\x8B\x42\x87\x64\x84\x7D\x86\x58\x06\xBD\x0B\x1A\x8B\x81\x86\xF9", -"\x84\x1D\x8B\x56\x86\x7A\x87\x93\x62\x4B\x90\xDD\x5A\x4D\x90\x6C\x8F\x4F\x90\x0B\x82\xCD\x89\x66\x8D\x31\x7E\x9C\x8F\xDB\x8D\x4B\x8E\xDD\x8D\x4D\x8E\xDF\x8D\x4F\x8E\x05\x8B\x59\x8A\xCB\x8B\x78\x8E\x46\x8C\x0A\x8E\x32\x8A\x0C\x8E\x3E\x8B\x82\x8F\x7F\x88\x66\x90\x13\x8B\x52\x62\x15\x8B\x11\x06\x6B\x90\x7B\x06\x52\x0B\x80\x86\x48\x8B\x8D\x7D\x78\x78\x8F\x7D\x2F\x84\x49\x90\x3F\x0A\x75\x90\xDC\x5A\x77\x90\x96\x8F\x7F\x87\x0B\x8C\x7C\x90\x39\x8C\xBA\x86\x1D\x90\x30\x8B\x1F\x90\x7C\x8A\x9A\x8C\x03\x8B\x84\x90\xC9\x8B\x86\x90\x18\x8C\x76\x8C\x09\x8B\x7A\x8E\x1C\x8C\x7C\x8E\x15\x8F\x7E\x8E\x17\x8F\x34\x8D\x9E\x8B\xA6\x86\x72\x6B\x37\x84\x76\x8B\x17\x85\x78\x8B\xE5\x79\x9E\x90\x73\x55\xCA\x8A\x00\x5A\xD9\x17\x4E\x90\x9E\x7D\xEE\x8F\x44\x8D\xB2\x8D\x72\x8F\x01\x3E\x74\x8F\xBE\x86\xF5\x8F\x73\x88\x87\x89\x80\x62\x04\x8A\xBC\x8D\x88\x90\x74\x8D\x8A\x90\x86\x8A\x8C\x90\xD1\x8B\x8E\x90\xFB\x8B\x03\x90\xD6\x2F\xCA\x73\xD0\x86\xCD\x73\xD2\x86\x8C\x8F\x56\x7C\x3E\x90\x4B\x84\xB4\x82\x4A\x90\x07\x65\xC7\x90\xE1\x17\xC9\x90\x82\x80\xCB\x90\xB1\x8D\x95\x8C\xB3\x8D\x1E\x90\xDC\x8D\x20\x90\xAD\x90\xEF\x8B\xAF\x90\x16\x8C\xB1\x90\xE3\x8D\xB3\x90\x1A\x8C\xB5\x90\x0B\x8E\xB7\x90\xE9\x8D\x16\x8F\xEB\x8D\x80\x8E\x50\x84\x0E\x83\xE4\x75\x59\x89\xC5\x90\xE1\x5A\xA2\x90\xF8\x8D\x49\x8A\x1E\x8E\x9F\x89\x20\x8E\xA7\x90\xE9\x8B\x3B\x8C\x93\x86\x70\x8E\x75\x8F\xD2\x90\x02\x89\xD4\x90\xE5\x7A\x25\x90\x44\x8C\x27\x90\xB6\x21\x29\x90\x76\x8D\x2B\x90\xD7\x8C\x2D\x90\x79\x63\x2F\x90\xA9\x79\xD9\x82\xD1\x5B\xFF\x8B\xC4\x90\xB7\x4A\xEC\x90\xA2\x36\xD1\x1A\xEF\x90\xCB\x89\x91\x79\x7B\x90\x6F\x8F\x0F\x82\xB2\x80\x6F\x8E\xAB\x90\x32\x8B\xF8\x90\x73\x8E\xFA\x90\xE1\x8D\xFC\x90\x77\x8E\xFE\x90\xE5\x8D\x2E\x8D\xE7\x8D\x02\x91\x0D\x8E\x04\x91\xCC\x86\x90\x90\x83\x79\x4E\x8C\x44\x8B\x53\x7D\x77\x7E\xED\x8D\x15\x0E\x6A\x84\x5B\x8D\xB5\x41\x2E\x91\x6D\x5A\x30\x91\x78\x90\xCA\x90\x98\x8F\x8F\x8D\xF5\x8C\xC8\x7C\x15\x91\xEB\x8B\x17\x91\xD1\x90\x21\x90\xDE\x88\xF7\x8F\x24\x89\x7A\x8F\xCA\x49\x52\x8F\xCD\x8B\x54\x8F\x3C\x8B\xFF\x8F\x79\x63\x01\x90\xD3\x8B\xE0\x90\xD3\x79\xC0\x87\x7D\x79\x89\x6C\xC3\x87\x86\x74\xEF\x87\xE2\x8C\x57\x8C\xDA\x8F\x59\x8C\x77\x87\xEE\x89\xE3\x75\xF2\x04\x54\x91\x53\x5C\x56\x91\xA3\x90\xA6\x87\xA5\x90\x35\x91\xD6\x88\xD7\x8D\x52\x90\x05\x8F\x54\x90\x26\x8A\xF3\x8F\xAC\x90\xDE\x8D\x9B\x8C\x28\x8D\x9D\x8C\x76\x8E\x38\x8B\xD8\x90\x53\x8F\xDA\x90\x7F\x8F\xDC\x90\xF9\x8B\xDE\x90\xC4\x8D\x6F\x91\x73\x89\x32\x83\xB7\x52\x82\x8C\xAA\x84\x9E\x87\x85\x8C\x43\x8A\x29\x5D\xA0\x90\x78\x69\x2F\x91\xE3\x17\x31\x91\x8D\x8D\x59\x91\x46\x8E\x12\x91\xC7\x8F\x97\x8C\xC9\x8F\x15\x82\xCB\x8F\x6E\x76\x5E\x90\x11\x8F\x9E\x8D\x2F\x8D\xA0\x8D\x31\x8D\xA2\x8D\x33\x8D\x55\x89\xE8\x87\x71\x91\xD7\x79\xE1\x74\x74\x91\xC6\x81\x55\x8C\x77\x91\x3D\x85\x4A\x85\x1C\x85\xEB\x74\xA4\x91\xA7\x5B\xA6\x91\xF8\x64\xED\x90\x60\x0A\x57\x91\xF0\x90\xAC\x91\xC5\x8F\xA6\x90\xAF\x91\xF2\x8F\xB1\x91\x8B\x87\xB3\x91\xBE\x76\x25\x76\x60\x90\x6B\x8B\x14\x8F\x03\x91\xB9\x90\x05\x91\xAE\x8F\x41\x87\xD8\x8F\x39\x02\xDD\x8C\xF5\x81\xCD\x64\xAF\x8C\x0B\x7A\xE6\x90\xC8\x91\x11\x0E\x3F\x7F\x5C\x7A\xA5\x91\x7F\x91\x7D\x68\x81\x91\x0E\x91\x58\x8B\x10\x91\x44\x8F\xAE\x91\xF9\x89\xCC\x90\xF3\x90\xCE\x90\xE3\x48\x25\x8E\x03\x63\x27\x8E\x62\x91\x23\x90\x79\x8F\x1D\x91\x72\x8D\x1F\x91\x3F\x22\x21\x91\xC0\x8D\x98\x91\xC2\x8D\x9A\x91\x34\x8E\x9C\x91\xE2\x6B\x0D\x0E\x0F\x8D\x79\x5A\x36\x89\xCC\x91\xDF\x8A\xCE\x91\xCB\x66\x82\x91\xD3\x88\x1C\x8D\xFD\x68\xF6\x8C\xAD\x91\xF8\x8C\x7D\x90\x8A\x91\x8C\x8B\x8C\x91\x3A\x91\x8E\x91\xAE\x90\x90\x91\x50\x8E\x92\x91\xF3\x8B\x94\x91\x68\x91\x96\x91\x2A\x90\x0A\x92\x57\x8F\x0C\x92\x59\x8F\x5B\x8E\xEC\x88\x6C\x75\x3C\x88\xEF\x91\xCB\x91\xF1\x91\xC2\x64\xF3\x91\xC1\x8F\x84\x8B\x64\x8D\x37\x8C\xD4\x91\xF9\x91\xF2\x90\xC7\x8C\x23\x8E\xC9\x8C\x4A\x8F\x20\x89\x19\x91\x22\x89\x63\x91\x88\x89\x65\x91\xFE\x45\x06\x92\xC5\x78\x69\x91\xCF\x8B\x6B\x91\x03\x63\x6D\x91\xDF\x90\x32\x92\x58\x74\x5A\x8D\xE7\x8C\xEB\x90\xC6\x90\xA8\x91\xC8\x90\xD0\x91\x32\x91\x5E\x80\x51\x90\x5B\x91\x98\x7C\xFC\x91\x84\x50\xD0\x90\x71\x88\x47\x92\x4B\x8D\x1B\x91\x25\x7A\x4B\x92\x3F\x22\x67\x91\xF5\x8B\x4F\x92\xF7", -"\x8B\x51\x92\x80\x62\x53\x92\x9B\x91\x55\x92\x55\x63\x31\x90\x32\x89\x84\x88\xD7\x5A\xDE\x7F\x87\x88\x0B\x91\xE0\x5A\x0D\x91\x3B\x92\x19\x8D\xD4\x8D\x92\x8C\xF1\x90\x87\x91\x61\x92\x24\x8A\x20\x92\x93\x8D\x56\x90\x95\x8D\xA9\x89\x0E\x87\xAB\x89\x10\x87\xCC\x8F\x2B\x8D\xA6\x8F\x2D\x8D\xA8\x8F\x9F\x8D\xAA\x8F\xA1\x8D\xAC\x8F\x25\x7C\xA4\x8D\x2C\x91\x53\x91\x5A\x92\x55\x91\xA9\x91\x5D\x92\xAB\x91\x33\x91\x60\x92\x1D\x8D\x85\x87\x88\x92\x4A\x8E\x9E\x8F\x4C\x8E\xA0\x8F\x27\x8D\xA2\x8F\x29\x8D\xA4\x8F\x91\x92\xCE\x8F\x93\x92\xD0\x8F\x95\x92\xD2\x8F\x97\x92\xD4\x8F\xAD\x8F\xBB\x90\x19\x8F\x77\x92\xC7\x8D\x6C\x8A\x09\x76\xDB\x84\x0A\x91\x2D\x91\x9D\x92\x80\x91\x9F\x92\x18\x92\x01\x8F\xA2\x92\x99\x8F\x88\x91\x9B\x8F\xA6\x92\x07\x8F\x8A\x92\x09\x8F\x8C\x92\x2A\x8A\x8E\x92\x2C\x8A\x90\x92\x07\x8B\x41\x91\x79\x8E\x43\x91\x7B\x8E\xB9\x91\x7D\x8E\xBB\x91\x7F\x8E\xE2\x91\xD9\x7F\xED\x88\x80\x63\xBF\x92\x9C\x92\x0C\x91\x16\x92\xAF\x67\xF4\x91\xC1\x8C\xF6\x91\x6E\x8F\xF8\x91\x34\x91\xF8\x91\xF4\x90\xAA\x90\xF6\x90\x8D\x91\x82\x90\x8F\x91\xAC\x92\x91\x91\x3F\x91\x93\x91\xD4\x92\x89\x90\x00\x91\x8B\x90\x45\x91\x8D\x90\x47\x91\x02\x90\x75\x92\xF1\x63\xE9\x84\x50\x56\xEC\x7D\x14\x92\x14\x0E\x7F\x92\x08\x8C\x3B\x89\xE7\x92\x5A\x8B\xE9\x92\xA3\x92\x1B\x92\x5C\x91\xA9\x90\x3C\x8C\x5F\x91\x66\x92\x61\x91\x14\x8C\x69\x92\x7F\x7B\x6B\x92\x9A\x7A\xFB\x8F\x8C\x89\xFD\x8F\x38\x7B\x71\x92\xEA\x6A\x25\x91\x03\x63\x27\x91\x73\x7E\x1A\x8F\xE0\x82\x33\x89\x39\x8E\x35\x89\xE0\x92\xCE\x4D\xC1\x92\xF2\x91\xC3\x92\xE5\x92\xAE\x8D\x08\x93\x84\x91\x0A\x93\xC7\x92\x86\x92\x91\x8D\xCA\x92\x9D\x8F\xCC\x92\x9F\x8F\xCE\x92\x90\x8B\xD0\x92\x92\x8B\xD2\x92\x87\x90\xF6\x92\xD9\x90\xF8\x92\xDB\x90\xFA\x92\xDD\x90\xFC\x92\x6E\x91\xFE\x92\x11\x8E\xA2\x63\xFB\x84\x36\x92\x1B\x5F\x03\x93\x10\x0E\x05\x93\x1C\x8E\x07\x93\x19\x90\x65\x8D\x85\x91\x40\x92\x85\x92\xA4\x92\x0D\x93\xDA\x8D\x38\x91\xEE\x92\x23\x92\xF0\x92\x25\x92\xF2\x92\x27\x92\xF4\x92\x29\x92\x3E\x93\x95\x91\x40\x93\x97\x91\x42\x93\x99\x91\x44\x93\x54\x92\x06\x91\x73\x7E\x74\x89\xD1\x5B\xF6\x8E\x73\x90\x02\x63\x4C\x93\x0C\x0E\x4E\x93\x17\x90\x5A\x80\x51\x93\x3E\x92\x53\x93\xEA\x92\x1E\x92\x36\x91\x2A\x88\x70\x8C\x66\x89\xCB\x77\xB4\x91\x08\x8E\xF7\x92\xD6\x92\xB6\x90\xD8\x92\xB8\x90\xDA\x92\xBA\x90\xBD\x91\x30\x90\xEF\x84\xC9\x88\x97\x89\xF3\x76\x99\x89\xAE\x7E\x0D\x61\x71\x93\x08\x0E\x73\x93\xEB\x8F\xBC\x8B\xC3\x8F\xD2\x91\xEF\x8F\xC6\x8F\xF1\x8F\x55\x90\x22\x92\x71\x8E\x3B\x91\x22\x90\x3D\x91\x75\x8E\x60\x93\x9F\x8C\x2A\x92\x6E\x92\x2C\x92\x22\x91\x2E\x92\x81\x8F\x68\x93\x74\x92\x6A\x93\x35\x85\x15\x85\xC7\x91\xAB\x86\x18\x85\xFF\x7B\x1A\x85\xC0\x90\x3F\x85\xC2\x89\xCA\x91\x4B\x93\x38\x92\x40\x65\x3A\x92\x06\x93\xEC\x8F\x2E\x93\x1A\x92\x85\x6B\x1D\x92\x9A\x8F\x1F\x92\x37\x91\xF5\x90\x80\x90\xF7\x90\x24\x92\xF9\x90\x26\x92\x85\x90\x74\x8C\xD3\x92\x2C\x8D\xB4\x90\x83\x93\x01\x91\x85\x93\xDF\x91\x87\x93\xE1\x91\xB8\x92\xAF\x8F\x18\x83\x0B\x90\xE5\x8A\xCC\x6F\xDC\x93\x4E\x77\xBF\x89\x26\x85\x52\x77\xE3\x8F\x5C\x85\xB9\x93\x29\x93\x39\x92\x2B\x93\x80\x92\xF9\x8D\x3D\x92\x1F\x8E\x7A\x93\x86\x91\xFD\x8D\xC5\x93\xED\x92\xC7\x93\xEF\x92\xAA\x92\x4E\x8E\xCB\x93\xB0\x90\xCD\x93\x3D\x93\xCF\x93\xFF\x90\xD1\x93\xF9\x92\xD3\x93\x46\x91\xE0\x91\x5A\x8E\xAD\x93\x57\x85\x05\x90\xB0\x93\xEA\x8A\x7E\x83\x7C\x77\x15\x8A\xB6\x8F\xB6\x93\x5D\x7C\xB8\x93\x91\x93\xBA\x93\x1B\x30\xBC\x93\x4F\x93\xBE\x93\x76\x93\xEB\x93\xC3\x93\x13\x91\x68\x8D\x48\x8F\x6A\x8D\x45\x92\xCB\x8C\x12\x93\xCD\x8C\x14\x93\x33\x47\x16\x93\x93\x78\x18\x93\x07\x8A\x1A\x93\x3F\x22\x31\x8E\x2C\x90\x58\x8F\x0F\x8B\x84\x8F\x03\x94\x58\x8C\x05\x94\xDC\x8F\x07\x7F\x4E\x85\x83\x8C\x1C\x8F\x15\x0E\x8A\x7C\x90\x93\x74\x90\x0E\x94\xFD\x3C\x5C\x92\xC4\x92\x97\x93\xC6\x92\x5A\x91\x56\x93\x62\x92\x43\x92\x73\x8F\xFE\x91\x80\x62\x00\x92\x13\x93\x49\x92\xD5\x90\x20\x94\x1F\x6B\x22\x94\x2E\x8E\x6F\x92\xA3\x8C\x1C\x93\xB6\x21\x73\x92\x0D\x92\x46\x93\x5B\x8F\x2B\x94\x79\x91\x2D\x94\x68\x8A\x5D\x85\x6A\x8A\x31\x94\xBC\x92\xFB\x81\xB9\x7C\x71\x81\x36\x94\xE5\x93\xBB\x93\xE7\x93\xBD\x93\x96\x93\xED\x8F\x98\x93\xFA\x91\x42\x92\x18\x94\x24\x8E\x1A\x94\x49\x8D\x67\x92\x6E\x8D\x1E\x94\x63", -"\x6D\x28\x92\xA4\x93\x62\x93\x2B\x92\x64\x93\x2D\x92\x66\x93\x0B\x92\xAB\x93\x51\x94\x01\x94\x94\x81\x22\x93\xE4\x8A\x34\x90\xE6\x8A\x36\x90\x6F\x85\x38\x90\x9F\x09\x45\x64\x73\x85\x99\x8A\x6E\x70\xB1\x6A\x15\x0E\xC5\x05\x2F\x4F\xAE\x8A\xF1\x7C\x45\x83\x93\x69\xD5\x8E\x83\x4A\x12\x90\x12\x3D\x24\x05\x95\x8A\xFD\x0C\xA8\x86\x41\x60\x2B\x86\xAF\x85\x0D\x85\x95\x85\x40\x90\xA7\x5B\x7C\x71\xCD\x7D\x95\x94\xF3\x76\x9C\x85\xE5\x85\x01\x01\xA0\x94\x30\x7E\x24\x05\xFD\x85\xE0\x5B\x66\x83\x91\x83\xEA\x90\x0E\x6A\x94\x83\xD5\x85\x87\x83\x55\x82\x06\x86\xEE\x68\xD7\x76\xA9\x94\xF1\x85\x90\x5C\x84\x66\x00\x86\xC7\x85\x9A\x94\xC9\x85\x12\x6A\xC0\x83\x41\x88\x0D\x61\xA7\x94\x1E\x81\xB7\x94\x28\x7C\x68\x82\x21\x04\x0B\x86\xD2\x67\x38\x59\x89\x83\xA5\x94\x00\x00\xC3\x94\x8F\x86\xC5\x94\x46\x6A\xC4\x85\xD1\x85\x84\x84\x93\x83\x77\x83\x86\x83\x96\x83\xC0\x94\xC7\x67\x93\x62\xCF\x94\xB8\x86\xD1\x94\x1A\x77\xF9\x69\x6C\x0D\x87\x82\xC5\x85\x83\x67\xD6\x94\x02\x86\xB1\x94\xA1\x60\xDA\x94\x5B\x86\xC2\x94\x93\x94\x6F\x68\x7E\x09\xDC\x85\xAB\x60\xDE\x85\xAD\x94\x68\x83\xD3\x85\xF5\x85\xAE\x5F\xC2\x66\xCB\x85\xF0\x68\xB6\x94\xEF\x94\xB0\x82\x54\x6A\xE4\x65\xC9\x94\x2F\x6A\xAB\x82\x20\x86\xF3\x88\xEC\x94\x9D\x75\xDF\x94\x99\x6A\x09\x6A\x62\x6A\xC0\x67\xF4\x85\xA2\x83\xF6\x85\xC5\x67\xEA\x94\x0A\x5F\xDD\x94\x1A\x89\x07\x95\x5C\x68\xA9\x60\xC0\x82\xD6\x83\x0C\x95\xE1\x85\xC5\x82\x3C\x0E\x05\x86\x5A\x86\x3F\x0A\x12\x95\x0C\x8C\x14\x95\xAC\x67\xCB\x67\xE2\x83\xCD\x82\xBB\x94\xB1\x85\xC8\x85\xA6\x85\xD1\x5B\xD3\x82\x3B\x83\x1F\x95\xED\x94\x15\x3D\xB7\x69\x58\x84\x15\x0E\xF0\x83\x2D\x95\x10\x65\x2F\x95\xF7\x68\x19\x86\xEC\x67\x54\x68\x05\x95\xFB\x94\x65\x64\x1E\x86\x11\x0E\x30\x60\xB4\x94\x92\x94\x06\x95\x8C\x01\x85\x8F\x59\x6A\x96\x89\x9D\x6A\xBE\x89\x1A\x95\x96\x5E\xFC\x82\xFF\x83\x01\x01\xA6\x00\x11\x7D\x33\x8F\x9D\x5D\xBC\x32\xFC\x7C\x53\x5C\xF1\x0B\x4A\x8B\x0E\x84\x72\x90\xB2\x7B\x1B\x5F\xA2\x71\xDD\x5A\x19\x5A\x8A\x37\xAA\x91\x44\x8E\x66\x94\x41\x92\xF0\x8F\xEC\x92\x0F\x93\x39\x91\x9E\x93\xC9\x93\x3C\x91\xF5\x93\xFB\x90\xF7\x93\xB2\x90\xF9\x93\x42\x91\x94\x92\xB8\x91\x96\x92\xBA\x91\x98\x92\x20\x8C\x60\x8E\x6D\x78\x14\x84\x79\x86\x6B\x87\x69\x90\x7C\x86\x52\x86\x1B\x8B\x28\x8C\x71\x90\xED\x8A\x58\x92\x3F\x0A\x5D\x95\x81\x72\x91\x55\x2C\x52\x83\x37\x61\x95\x83\x92\x63\x95\x55\x93\x0C\x93\x3F\x94\x69\x94\x44\x92\x10\x93\xED\x8B\x76\x8F\x5E\x6D\x6F\x94\x2A\x81\x71\x94\xD1\x8C\xA5\x93\xA1\x8C\x4C\x94\x53\x8D\x4E\x94\x4A\x3E\x1E\x93\x80\x62\x10\x8B\x20\x7E\x4E\x74\x7B\x95\x7F\x85\x93\x90\x86\x0D\x95\x90\x8D\x08\x97\x90\x67\x23\x0A\x73\x9B\x90\x2E\x84\x7A\x78\xEC\x7D\x86\x95\xDB\x5A\x5F\x95\xCA\x24\x8B\x95\xFB\x8D\x84\x92\xEE\x93\x7C\x93\x61\x7E\x71\x8C\xD9\x91\x34\x78\xDB\x91\xB7\x91\x44\x91\xFD\x93\xFB\x92\xFF\x93\xFD\x92\x7B\x94\x7F\x85\xB7\x7D\xB8\x07\x97\x94\x74\x8B\xBF\x1A\xB5\x93\x87\x8F\xF3\x76\xAE\x86\x6F\x93\x04\x64\xB3\x95\xDA\x5A\xB5\x95\x76\x30\xB7\x95\x6B\x8E\xB9\x95\x6D\x8E\x58\x93\xC6\x93\xA8\x92\x81\x90\xF3\x93\x83\x90\x6C\x95\x3E\x91\x6E\x95\xFD\x90\x70\x95\xD5\x92\x72\x95\xC2\x95\x74\x95\xD9\x92\x76\x95\x88\x93\xD6\x8F\xCE\x86\xCF\x78\xE5\x7D\xE4\x90\x37\x21\x09\x94\xF8\x63\xE8\x90\x36\x89\xD4\x95\x37\x59\xD6\x95\x8A\x95\xA0\x92\x62\x95\x3C\x94\xC2\x93\xC8\x92\xC4\x93\xBB\x95\x13\x82\x58\x90\xA1\x8F\x5A\x90\xA3\x8F\x5C\x90\xCD\x8F\xB5\x91\xCF\x8F\xDC\x91\xD1\x8F\x62\x90\xD3\x8F\x64\x90\xD6\x93\x89\x93\x07\x91\x2E\x83\xDB\x8B\x27\x93\xD1\x49\xF4\x5A\xFA\x95\xA0\x30\xD8\x95\x1A\x90\xDA\x95\x1C\x90\xDC\x95\xF0\x93\xDE\x95\xC8\x93\x5C\x93\xCA\x93\x5E\x93\xCC\x93\x2A\x8D\xCE\x93\x92\x92\xD0\x93\xE8\x95\xD7\x92\xEA\x95\x86\x93\xEC\x95\x11\x96\xEE\x95\x52\x80\x7C\x65\x27\x01\xA7\x00\x51\x61\x79\x72\x5A\x95\xE2\x75\x29\x5D\xF8\x95\x14\x0E\x19\x96\x6F\x30\x1B\x96\x52\x93\x30\x93\x3D\x94\x8F\x95\x87\x92\xEF\x93\x67\x95\x5A\x93\x69\x95\x23\x96\x6B\x95\x25\x96\xF6\x93\x27\x96\xF8\x93\x29\x96\xFA\x93\x2B\x96\x84\x93\x2D\x96\xD4\x93\x2F\x96\x48\x91\x78\x95\x4A\x79\xA6\x95\x71\x8B\xA8\x95\x65\x84\x24\x5F\x67\x84\xEC\x88\x29\x8C\xE2\x93\xA3\x70\x3A\x96\x18\x96\xBA\x25\x17\x3C\x3F\x96\x77\x93\x41\x96\xFF\x95\x32\x93\x53\x90\x45\x96\x16\x91\x68\x95\x18", -"\x91\x1C\x94\xB8\x8D\x02\x92\x03\x8A\x48\x94\x6E\x79\x9B\x95\xD3\x8C\xA7\x93\x09\x92\x77\x94\x2F\x92\x79\x94\x31\x92\xC7\x95\x5A\x96\xBF\x91\x74\x84\x7E\x79\xDF\x8C\xCD\x81\xE1\x8C\xEA\x91\x5A\x94\xCA\x88\x7C\x84\x61\x96\x3E\x78\x63\x96\xE2\x5A\x3D\x96\xA6\x30\x67\x96\x14\x94\x00\x96\x16\x94\x47\x8F\x5D\x91\x49\x8F\x93\x95\x3E\x8C\x95\x95\x01\x75\x73\x96\x36\x8B\x99\x95\x4F\x8D\x77\x96\x51\x8D\x9D\x95\x30\x8E\x9F\x95\x25\x6E\x28\x94\xA7\x8C\x0E\x92\xBF\x62\xD2\x85\x81\x8C\x9C\x87\xA1\x91\xEC\x89\xA3\x91\x8B\x96\xE9\x7C\xA7\x5B\x3B\x96\x10\x0E\x8F\x96\x1A\x3C\x91\x96\x11\x91\xEC\x93\x54\x93\xBA\x95\x64\x89\x7D\x93\xCA\x8F\x7F\x93\xDA\x91\x9C\x77\x72\x76\xDE\x91\xFE\x93\xD5\x93\x00\x94\xDC\x92\x7C\x95\xE4\x91\xA2\x7E\x4C\x05\xAC\x8C\xED\x87\x3C\x8A\xE9\x91\x02\x6D\xEB\x91\x7A\x91\xD1\x5B\xB4\x8C\x87\x8C\x2D\x09\x0D\x61\xB3\x96\x0C\x0E\xB5\x96\xC1\x25\xB7\x96\xF7\x91\xB9\x96\x79\x93\x15\x94\xD5\x91\x9C\x93\xD7\x91\xAA\x89\x72\x8C\xF3\x92\xE4\x95\x40\x91\xE6\x95\x82\x93\x51\x96\xD2\x93\x53\x96\xC4\x96\x55\x96\xC6\x95\xC7\x96\xA7\x95\xDC\x8C\x36\x7F\x16\x75\x84\x96\x06\x7F\x9C\x64\x08\x7F\x87\x96\xAD\x96\x84\x8C\xAC\x84\xE0\x30\xF7\x95\x64\x96\x04\x44\x79\x34\xDC\x96\xE8\x92\xDE\x96\x0B\x93\x9A\x7B\xBC\x96\xBC\x95\x7E\x93\x7C\x7F\x80\x93\xC0\x95\xC2\x96\x29\x76\x10\x96\xC6\x96\xD7\x93\xD4\x7E\x0E\x8D\x74\x6D\xFF\x96\x8E\x96\x65\x96\x1E\x57\x03\x97\x09\x93\x05\x97\x31\x93\x3E\x94\x44\x96\x02\x96\x0C\x87\x38\x93\x03\x8E\x3A\x93\x05\x8E\x3C\x93\x6F\x95\x4F\x96\x71\x95\xB2\x92\x73\x95\xB4\x92\x75\x95\xB6\x92\xBC\x91\x31\x96\xC6\x80\x34\x92\x37\x8D\x4A\x93\xD7\x96\x00\x97\x88\x95\x02\x97\xFC\x95\x8C\x95\xFE\x95\xD3\x91\x53\x93\x66\x95\x6E\x96\x47\x96\x70\x96\x9F\x93\x01\x92\xA1\x93\x24\x90\x9E\x96\xD7\x90\x73\x94\xA6\x93\x75\x94\xA8\x93\x7B\x96\xAA\x93\xC5\x95\x45\x93\x7F\x96\x3B\x5D\x57\x92\xD2\x95\x85\x95\x36\x97\x4E\x68\x89\x95\x1A\x96\x39\x97\xB8\x95\x8D\x95\xBB\x96\x6F\x8C\x09\x97\xBE\x96\x0B\x97\xC0\x96\x1B\x79\x0E\x97\x74\x76\x23\x74\x12\x96\x21\x93\xBA\x92\x1B\x8F\x3A\x82\x80\x8D\xC1\x85\xE5\x6E\x54\x97\x17\x97\x01\x97\x66\x96\x59\x97\xD9\x95\x5B\x97\xDB\x95\x7E\x90\x59\x93\xF1\x93\x5B\x93\xE0\x95\xF1\x92\x06\x96\xAD\x92\x08\x96\xAF\x92\x0A\x96\xB1\x92\x0C\x96\xB3\x92\x0E\x96\xB5\x92\x10\x97\x5B\x88\x9A\x92\x84\x95\x27\x01\xD8\x96\x08\x0E\xDA\x96\xE4\x05\x1A\x97\x2F\x93\x1C\x97\x42\x96\x07\x97\x5D\x97\x03\x96\xBD\x95\xBF\x96\xBF\x95\xC1\x96\xF9\x78\x0F\x97\x65\x97\x30\x97\xC7\x88\x8B\x93\x48\x95\xEC\x91\x15\x0E\xF6\x7A\x16\x97\xE1\x5A\x8D\x97\xF5\x05\x8F\x97\xC0\x93\xC2\x7F\x5C\x97\xC8\x8F\xBD\x96\xB2\x91\x97\x97\x45\x7D\x0D\x97\x9A\x97\x64\x97\x9D\x78\x08\x85\x10\x89\x0D\x0E\xEF\x8D\xA4\x97\xE0\x5A\xA6\x97\x62\x01\xA8\x97\x1B\x90\xA8\x90\x1F\x96\x46\x96\x78\x97\x48\x96\x7A\x97\x5D\x93\x7C\x97\xE6\x96\x4D\x96\x27\x97\xB0\x92\x2A\x96\x2A\x97\xE9\x95\x2C\x97\xEB\x95\x2E\x97\xDB\x92\x12\x97\xDD\x92\x11\x89\x40\x7B\x9B\x92\x55\x49\x55\x97\x0F\x68\x38\x52\x19\x97\x72\x97\x1C\x96\x74\x97\x1E\x96\x76\x97\xDD\x95\x36\x93\xA9\x92\x22\x97\x59\x90\x24\x97\x5B\x90\x26\x97\xE5\x95\x28\x97\xE7\x95\xCC\x97\x2C\x96\xCE\x97\x2E\x96\xD0\x97\xED\x95\xB5\x97\x68\x85\x9F\x97\x7E\x8D\x24\x93\xD7\x5A\xF3\x84\x82\x8D\x8D\x96\xA5\x97\x18\x97\x4B\x57\xB6\x96\xDC\x97\x40\x96\x91\x97\x6A\x96\x1E\x97\x33\x93\x6D\x96\x5E\x91\x6F\x96\x60\x91\x42\x97\x45\x94\x9C\x96\x42\x8C\x04\x92\x2C\x8E\x4A\x94\x7D\x8F\x24\x94\x8E\x3E\xA4\x96\x5F\x36\xA1\x95\x6B\x6E\xFC\x8B\xC7\x80\x15\x6F\xB9\x97\xDF\x5A\xBB\x97\x26\x95\x2C\x93\x97\x8F\x3B\x97\x99\x93\x3F\x92\x3E\x97\x06\x98\x40\x97\x08\x98\x6A\x95\xA0\x93\xE2\x95\xA2\x93\xE7\x96\xF5\x92\xE9\x96\x3F\x93\xFB\x93\x41\x93\xC3\x95\x43\x93\x4E\x97\x69\x93\xF1\x96\x71\x8B\x6C\x93\x5D\x0F\x6E\x93\x5B\x95\x35\x97\x6F\x97\x37\x97\x71\x97\x3A\x94\x65\x94\x20\x98\x67\x94\x65\x95\x63\x92\x8D\x50\x65\x92\x94\x95\x6D\x94\x4D\x8F\x0B\x98\xBA\x8D\x46\x97\x52\x8E\xA0\x96\xBE\x8D\x79\x96\x55\x8F\xA9\x93\x27\x94\x30\x92\x29\x94\xA8\x96\x9E\x63\x8D\x8A\x8C\x93\x4B\x85\x4E\x95\xB5\x8C\xB7\x74\xFA\x97\xBA\x97\xFC\x97\x7C\x34\xBD\x97\x1D\x96\xBF\x97\xE0\x97\x20\x96\xE2\x97\xDF\x95\xE4\x97\x05\x96\xE6\x97\x07\x96\xE8\x97\xE8\x96\xEA\x97\xEA", -"\x96\xEC\x97\x52\x96\xEE\x97\x54\x96\xF0\x97\x30\x96\xF2\x97\x0D\x81\x46\x95\x2C\x94\x4B\x77\x5F\x8F\x19\x85\xBE\x89\xF4\x95\x5C\x7C\xD1\x5B\xC3\x89\x35\x94\x02\x63\x8B\x97\x3C\x5C\x60\x98\xB5\x28\x62\x98\xDE\x97\x64\x98\x34\x93\x7F\x90\x21\x96\xF2\x93\x69\x98\xAB\x92\xC6\x97\x5F\x93\x2B\x98\x61\x93\x2D\x98\x63\x93\x2F\x98\x65\x93\x31\x98\x67\x93\x33\x98\xAC\x93\x35\x98\x56\x50\x79\x98\x55\x94\x7B\x98\x2B\x7C\x89\x8F\xE9\x89\x8B\x8F\x88\x96\x8D\x8F\x15\x0E\x70\x81\xF7\x8E\x84\x98\xD8\x97\xF6\x5C\x10\x68\xFD\x97\xDB\x96\xFF\x97\x68\x96\x01\x98\x3C\x97\xEB\x92\x44\x98\x5B\x78\x42\x94\x13\x74\x9A\x96\x89\x70\x4A\x98\x2A\x8E\x0D\x98\x51\x8F\x4D\x92\x9D\x7A\x50\x98\x6A\x91\x23\x91\x78\x8D\xA6\x96\x57\x8D\x2A\x94\xC9\x96\xE4\x8A\x57\x7C\xB4\x8F\x08\x94\xCE\x95\x80\x98\x5D\x0F\x1A\x8A\x5D\x98\xB2\x96\xAD\x98\xC9\x07\x96\x4D\xB0\x98\x8E\x97\xB2\x98\x92\x96\x6B\x96\x7F\x89\x75\x97\x8C\x98\x77\x97\x8E\x98\x79\x97\x90\x98\xF4\x93\x4B\x96\x6D\x95\xC8\x97\xE9\x97\xCA\x97\x50\x96\x71\x98\xEC\x96\x73\x98\xEE\x96\x75\x98\x11\x97\x66\x97\xAE\x93\xCA\x98\x12\x8A\x3B\x8F\x2F\x94\xDE\x8F\x7F\x98\x71\x70\x33\x94\x0C\x94\x93\x62\x85\x98\x4D\x68\xD9\x97\x57\x97\x3E\x96\xDA\x98\xB8\x96\xE0\x96\xBA\x96\xDE\x98\x05\x98\x97\x96\x07\x98\x11\x93\x09\x98\x1D\x94\x46\x94\x1C\x91\x4C\x98\xFA\x8F\x4E\x98\x54\x8E\xA2\x96\x56\x8E\xC5\x98\x58\x8E\x15\x98\x61\x70\x52\x94\x04\x90\xF3\x98\xDA\x93\x96\x94\x8B\x0C\xCF\x60\xF8\x98\xCF\x63\x6D\x8A\x06\x01\xB4\x8E\x12\x81\x5E\x98\x1B\x98\x87\x98\x60\x95\x02\x99\xDD\x96\x04\x99\xDF\x96\x93\x96\xE1\x96\x8B\x91\xE3\x96\x8D\x92\xE5\x96\x93\x98\xE7\x98\x6E\x98\xE9\x98\x29\x97\x82\x97\x2B\x97\x84\x97\x2D\x97\x86\x97\x4F\x97\x9E\x98\xFE\x62\x7D\x94\x26\x85\x7F\x94\x29\x82\x04\x84\x82\x94\x05\x7C\xEA\x7C\x97\x8A\x3B\x90\x87\x94\x83\x79\xF4\x8E\xFB\x07\x89\x85\x50\x86\x93\x62\xE3\x68\xBE\x8F\xEA\x68\x15\x26\x1D\x99\x0E\x0D\xA4\x78\x4B\x95\x65\x5D\x54\x83\xF1\x8E\x52\x99\x15\x90\x63\x57\x23\x3C\xAC\x86\xA4\x94\x42\x95\x5D\x4D\xF4\x5A\x0A\x5D\xB0\x0B\xAA\x94\x8D\x5E\xAC\x94\xE4\x94\x3A\x6A\xAF\x94\xD7\x94\x03\x86\x11\x0E\xB3\x94\x1E\x95\x01\x5D\xCF\x8E\x95\x4F\xDC\x25\xAB\x85\x83\x66\xAD\x85\x00\x95\x78\x83\x8A\x66\xF9\x94\x88\x4F\x65\x99\x5F\x99\x61\x52\xBF\x72\xB8\x85\xAB\x3C\x7A\x60\xF3\x94\xAF\x83\xF5\x94\x0D\x95\xF7\x94\x99\x5E\x7D\x99\xE7\x58\x7F\x99\xA9\x27\x76\x99\xB4\x65\xD3\x94\x26\x86\x9D\x60\xE0\x85\xB2\x85\xE2\x85\xD1\x5B\x7F\x82\xCD\x94\x5D\x99\x12\x62\x80\x99\x6B\x52\x82\x99\x09\x86\xB0\x66\x27\x8C\x92\x85\xB0\x85\x88\x99\x59\x99\x87\x83\xD7\x85\x1E\x88\x3F\x0A\x9B\x99\x2F\x62\x9D\x99\x8A\x1C\x95\x82\xAD\x83\x86\x99\xA4\x85\x96\x99\x1B\x95\xFF\x00\xE4\x85\x63\x99\x7E\x99\x74\x99\xF9\x58\x90\x99\xFD\x94\xBA\x83\x55\x6A\x27\x95\xA5\x99\xB3\x99\xCC\x83\xED\x85\x72\x99\x22\x65\xB9\x99\x86\x04\x4C\x3C\xC0\x17\x77\x99\x90\x5C\xF3\x85\xBF\x99\xE6\x94\xCA\x83\x4C\x6A\x38\x59\xCE\x83\x8A\x83\xAB\x99\x10\x0E\x66\x99\xC9\x99\xD4\x83\x8A\x5B\xFF\x85\xB1\x99\xBC\x85\xC1\x99\xD1\x82\x1D\x95\x10\x84\x73\x99\x30\x8F\x75\x99\x15\x26\x68\x99\x4C\x05\x12\x66\xD4\x94\xA4\x99\xCE\x99\xD4\x85\xD0\x99\x2B\x95\x0E\x86\x16\x86\xAA\x99\x8E\x99\x30\x5A\x55\x99\x29\x91\x5D\x0F\x34\x95\x96\x85\xA7\x5B\xD4\x99\x0C\x0E\xD6\x99\x68\x72\xAC\x86\x1A\x86\x35\x95\xC5\x99\xE2\x99\xBA\x99\xF3\x99\xF9\x82\xEB\x82\x10\x95\x29\x5D\xF9\x99\x08\x0E\xFB\x99\xA0\x98\xB1\x94\xA0\x97\x0A\x84\x29\x95\x4B\x5F\xEA\x82\x38\x59\x3C\x66\xA8\x00\x94\x6A\x11\x0E\xB8\x70\x01\x01\xA6\x5A\x36\x82\x0D\x61\x26\x65\x94\x8F\x8F\x99\x15\x26\x29\x72\xE0\x5A\xAB\x71\x24\x5A\xC4\x70\x1C\x17\x64\x85\xFF\x58\xF1\x99\x39\x31\xDC\x25\x20\x9A\x16\x6C\x0F\x72\xD0\x71\x67\x71\x9B\x71\x69\x71\x9D\x71\x57\x71\x45\x71\x0A\x71\x12\x72\x81\x08\xC7\x94\x82\x66\xF6\x68\x22\x0B\x0C\x71\x30\x0C\xDE\x70\x0C\x04\x0F\x71\xD9\x3B\xE2\x70\xE4\x70\x8A\x83\x1C\x9A\x53\x99\xE3\x99\x23\x3C\x2B\x9A\x3E\x83\x2D\x9A\xF7\x71\x3E\x72\x68\x71\x43\x71\x6A\x71\x89\x5A\x8C\x71\x03\x0A\xF6\x70\x59\x7A\x27\x01\x9A\x27\x9C\x84\xA7\x5B\x45\x9A\x5E\x99\x1E\x9A\x48\x9A\x0D\x72\x21\x9A\x4B\x9A\x7B\x27\x30\x9A\x4F\x9A\x32\x9A\x6B\x71\x31\x72\x52\x9A\x11\x01\x3C\x9A\x18\x0C\x3E\x9A\x3D\x01\x40\x9A\x37\x57\x11\x71\x5E", -"\x01\xB1\x7F\xAF\x2D\x44\x9A\x28\x9A\x54\x99\x5D\x9A\x3A\x72\x5F\x9A\x2B\x72\x3D\x72\x24\x88\x02\x00\x2E\x72\x94\x37\x30\x72\x34\x9A\x32\x72\x0D\x85\x24\x71\x73\x9A\xC6\x99\x39\x5A\x81\x99\x49\x9A\xDD\x5A\x22\x9A\xE5\x71\xD2\x71\x31\x9A\xD4\x71\xF6\x71\xE9\x71\x13\x83\x83\x8E\x84\x9A\x01\x9A\xC7\x99\x2A\x9A\x5E\x9A\x2C\x9A\x79\x9A\xCF\x8A\x4D\x9A\x62\x9A\xAE\x71\x50\x9A\xD4\x70\xDC\x0C\x0D\x85\x49\x71\x93\x9A\xE8\x8F\x75\x9A\x87\x9A\x97\x9A\x4A\x9A\x99\x9A\x2E\x9A\x8B\x9A\x9C\x9A\xE7\x71\x9E\x9A\xC3\x71\x13\x44\x6F\x1B\xAF\x95\xD1\x5B\x5C\x71\x03\x3D\x26\x9A\x00\x00\x5A\x9A\x9C\x99\x5C\x9A\xA6\x9A\x77\x9A\x98\x9A\x3C\x72\x9A\x9A\x7B\x9A\x7D\x9A\x9B\x40\x7F\x9A\xB0\x71\x6D\x71\x36\x9A\x31\x06\x71\x71\xE0\x01\x73\x71\xA9\x88\x3D\x9A\x0E\x71\x56\x09\x78\x71\xC1\x0B\x7A\x71\x0D\x0E\x7C\x71\xE1\x64\x61\x88\x02\x63\xB8\x9A\xAC\x99\xBA\x9A\x9E\x99\x88\x9A\xCC\x98\x85\x71\x2C\x72\x1F\x0E\xC1\x9A\x8A\x71\x66\x9A\xD0\x8A\xEA\x71\x0D\x0E\x8F\x71\xA3\x9A\xEB\x8E\xF2\x99\x76\x9A\x50\x71\xFB\x83\xE6\x7C\x86\x71\xBF\x71\xD3\x71\xC1\x71\x9E\x71\x80\x9A\x67\x9A\xE4\x9A\x11\x0E\x5D\x95\xC8\x58\xE0\x99\xCB\x15\x74\x9A\x47\x9A\xBB\x9A\xEB\x9A\x78\x9A\xBE\x9A\xAA\x9A\x04\x71\xAC\x9A\x40\x72\xAE\x9A\xE2\x9A\xB0\x9A\x8D\x71\xB2\x71\x27\x01\xB4\x71\x40\x88\xD6\x9A\xFB\x9A\x02\x9A\xEA\x9A\x83\x71\xEC\x9A\xEE\x7C\xEE\x9A\x2D\x72\xF0\x9A\x2F\x72\xF2\x9A\xC4\x9A\xF4\x9A\xFF\x00\xC6\x71\xE7\x9A\x40\x8F\xD9\x9A\x8A\x1C\xDB\x9A\xB3\x8F\xDD\x9A\x7A\x9A\xF6\x89\xC9\x8A\x8D\x9A\xF1\x9A\x99\x71\x24\x9B\x44\x53\xD8\x71\x0D\x0E\xDA\x71\x1D\x9B\x6A\x8F\x1F\x9B\xB0\x0B\x21\x9B\x59\x83\xA9\x9A\x4C\x9A\xC0\x9A\x16\x9B\x7E\x9A\x18\x9B\xE9\x71\xBE\x5E\xEC\x71\x6B\x84\x93\x62\xD7\x9A\xD5\x99\xAD\x99\x32\x9B\xA7\x9A\x89\x9A\x60\x9A\xDB\x0D\x80\x66\x81\x08\xFB\x71\x49\x01\x63\x00\x19\x72\x3E\x01\x07\x82\x16\x07\xAB\x58\x1E\x72\x7F\x32\xA5\x5A\x05\x72\x27\x01\x07\x72\x15\x63\x59\x9A\x0E\x9B\x95\x9A\x1F\x9A\x44\x9B\xDC\x9A\xED\x9A\x9C\x53\xC6\x9A\x79\x01\x15\x72\xB9\x58\x06\x02\x4D\x9B\x19\x9A\x00\x8F\x27\x10\x1D\x72\x0A\x7D\x44\x59\x14\x26\xB0\x58\xF3\x76\x22\x72\x03\x01\xDB\x93\x4A\x69\x1B\x5F\x40\x9B\xFA\x99\x42\x9B\xC0\x17\x33\x9B\x70\x83\x46\x9B\xD1\x71\x03\x9B\xCD\x8A\x05\x9B\xF3\x9A\xE3\x9A\x33\x72\x27\x01\x35\x72\xCD\x94\x75\x9B\x09\x9A\x77\x9B\x79\x00\x79\x9B\x06\x94\x35\x9B\x61\x9A\xEF\x9A\x27\x9B\x17\x9B\x33\x9A\x19\x9B\x81\x9B\x0D\x84\xFD\x67\xA9\x00\xB2\x8A\x37\x59\x61\x5A\x21\x58\xC9\x6F\x86\x29\xA2\x61\x24\x42\x63\x68\xE5\x45\xC1\x94\xDF\x5A\x99\x9B\x2A\x58\x67\x9B\x09\x5C\x6E\x08\xB3\x08\xA0\x9B\x6A\x85\x86\x29\xC1\x5E\x85\x0D\x36\x35\x07\x0E\xDE\x52\x8D\x94\xF3\x76\x2E\x86\x14\x0E\x7D\x91\xCE\x43\xDE\x71\xF9\x26\x89\x98\x41\x98\x64\x95\x9A\x93\x23\x98\x08\x99\x25\x98\x0A\x99\x27\x98\x43\x97\x29\x98\x45\x97\xA3\x93\x9A\x95\x48\x97\x9C\x95\xC3\x98\x50\x92\x15\x99\x00\x90\x17\x99\x0C\x36\x49\x91\xB5\x7C\x4B\x91\x24\x8C\x70\x73\x3C\x73\x1A\x84\xA3\x84\xE4\x20\x59\x7D\x38\x96\xA1\x80\x1B\x5F\xCD\x43\xA0\x97\xB9\x3D\xA0\x3C\xB9\x9B\x5F\x92\x1D\x97\x43\x96\x04\x98\x20\x97\x28\x8A\xE3\x98\xE1\x95\xE5\x98\xE3\x95\x35\x99\x2C\x98\x6F\x98\x2E\x98\xEB\x96\xFC\x93\xED\x96\xC4\x95\xC5\x96\x40\x8B\x57\x96\x4F\x7D\x42\x8B\x62\x84\x7D\x95\x16\x8B\xAA\x95\x2F\x05\x2A\x84\xD6\x9B\x3F\x6F\xB2\x9A\x84\x86\x9D\x90\x89\x97\x09\x01\xDC\x9B\xF5\x97\x33\x33\xD7\x30\xE0\x9B\x50\x90\xE2\x9B\x93\x97\xAC\x97\x5E\x97\xAE\x97\x60\x97\x98\x97\x62\x97\xB2\x97\x3A\x78\x9C\x97\x77\x98\xBC\x90\x37\x59\x73\x8B\x50\x5F\x02\x0D\xD1\x96\xEA\x8A\xC2\x90\x07\x7C\xD6\x97\x82\x3C\x99\x70\xB8\x9B\x2A\x99\x04\x97\x2C\x99\x06\x97\x86\x80\x96\x96\x19\x94\x98\x96\xB6\x8D\x71\x96\xF6\x8F\xBD\x98\x4F\x8F\xBF\x98\x7B\x8F\x0F\x98\x28\x90\x11\x98\xC8\x78\xCB\x9B\x6C\x91\xCD\x9B\x36\x36\xFC\x8B\xE2\x90\xA0\x8B\xD1\x86\xF3\x95\xCF\x98\xE7\x6E\xF6\x95\x16\x96\x04\x41\xB7\x9B\x08\x9C\x24\x9C\x1B\x97\x26\x9C\x0B\x9C\x28\x9C\x0E\x93\x3F\x97\xC2\x97\x41\x97\xC1\x9B\x0A\x98\x44\x97\x03\x92\x0F\x99\x26\x90\x33\x9C\x20\x91\x35\x9C\x97\x73\x37\x9C\x52\x92\x39\x9C\x79\x36\x3B\x9C\xFA\x86\x43\x9C\xB6\x9B\x22\x9C\x46\x9C\x3F\x98\xBF\x93\xBE\x97\x14\x91\x4C\x9C\x24\x98\x4E\x9C\x26\x98\x49\x96\x28\x98\xE9\x9B\x2A\x98\xEB", -"\x9B\x95\x98\xED\x9B\x97\x98\xEF\x9B\x30\x98\xF1\x9B\x32\x98\xF3\x9B\x3E\x99\xD2\x97\x94\x81\x1D\x87\x38\x59\x2B\x91\x03\x9C\xCB\x1C\x45\x9C\xDF\x9B\x47\x9C\x90\x97\x49\x9C\x92\x97\x4B\x9C\xC0\x97\x4D\x9C\xE1\x98\xC3\x97\xE7\x9B\x7B\x97\x6B\x98\x7D\x97\x6D\x98\xEC\x9B\x37\x99\xEB\x97\x39\x99\xCD\x97\x3B\x99\xCF\x97\x3D\x99\xC5\x88\xCF\x9B\xE8\x7C\xD1\x9B\x10\x0E\x25\x8C\x66\x84\x46\x87\x5C\x8E\x11\x0E\x51\x91\xAB\x98\x04\x64\x05\x9C\x37\x8E\x9A\x3D\x63\x9C\x1E\x98\xA4\x90\xA9\x97\xAE\x80\x42\x98\xBC\x9B\xB7\x98\x03\x63\x46\x98\x99\x96\x48\x98\x77\x8F\x97\x95\x6D\x86\x31\x9C\x66\x91\xC1\x98\x96\x78\x13\x99\xFE\x8F\x5A\x9C\x72\x92\x5C\x9C\xAC\x6B\x56\x98\x80\x85\x6C\x7A\x81\x74\x6F\x87\x83\x96\xCD\x96\x2E\x94\xF8\x96\xC6\x87\xA7\x98\x7B\x84\x11\x0E\x5B\x8C\xEC\x7D\xA6\x9C\x32\x90\x07\x9C\x82\x9C\x64\x9C\x13\x94\x03\x99\x2E\x99\x05\x99\xDF\x97\xDF\x98\xE1\x97\x9D\x93\x4F\x9C\x6C\x9C\xC2\x9B\x6E\x9C\xC4\x9B\x94\x98\x72\x94\x96\x98\x74\x94\x98\x98\x76\x94\x9A\x98\x78\x94\x9C\x98\x7A\x94\x3F\x99\xA5\x86\xD5\x94\x80\x01\xA0\x91\xB1\x8C\xA2\x91\x15\x0E\x86\x8C\x14\x8E\x48\x26\x81\x9C\x13\x41\x09\x9C\x7A\x90\x27\x9C\xED\x7F\x68\x9C\xBE\x9B\x6A\x9C\xC0\x9B\xDF\x9C\x51\x9C\xC3\x9B\x53\x9C\xC5\x9B\x9F\x96\xC7\x9B\x78\x96\x4A\x97\x7A\x96\xE9\x9C\x7C\x96\xEB\x9C\x7E\x96\xED\x9C\xD9\x63\xA9\x8C\x02\x7F\xC0\x91\xDE\x8C\xC8\x9C\xE0\x8C\xCF\x96\x94\x8A\xE0\x93\xC9\x87\xB0\x96\x4E\x83\xA7\x5B\xD1\x9C\x78\x92\xAC\x3C\xA9\x9C\xE8\x93\x0F\x91\xD6\x9C\x2B\x99\xD8\x9C\x2D\x99\xDC\x98\xC9\x92\x07\x99\x2A\x9C\x09\x99\x47\x98\x2D\x9C\xD3\x90\x0D\x99\x6A\x92\xB8\x9C\x4C\x92\x56\x9C\x07\x92\x58\x9C\x99\x78\xBE\x9C\x1D\x93\xC7\x98\x7A\x8D\xA8\x8C\xF3\x96\xEB\x87\xF5\x96\x16\x9D\x85\x96\x18\x9D\xA8\x7E\xE4\x8A\x28\x63\xE6\x8C\xF9\x97\x1E\x9D\xF8\x9C\xF1\x0B\xFA\x9C\x26\x88\xFC\x9C\x51\x81\xDB\x9C\x66\x98\xDD\x9C\x6B\x9C\xC4\x97\x24\x96\x92\x98\x26\x96\xAE\x92\x28\x96\x92\x9C\x70\x98\x94\x9C\xED\x97\x96\x9C\xEF\x97\x98\x9C\x9D\x98\x7A\x9C\xC8\x95\x19\x88\x35\x7A\x60\x9C\x1F\x9D\xBB\x92\xA7\x2D\x23\x9C\xD5\x9C\xEA\x93\xD7\x9C\x29\x9D\x70\x8F\x45\x8D\x91\x95\x41\x94\x6B\x94\x6C\x8D\xB4\x9C\x96\x95\x31\x9D\x15\x93\x33\x9D\x6C\x92\xBA\x9C\x7A\x7D\x0A\x9D\x51\x98\x4C\x97\x53\x98\x7D\x96\x55\x98\x19\x99\xF4\x72\x32\x97\xE8\x36\x36\x89\x67\x9D\x69\x97\x69\x9D\x22\x9D\x63\x94\x68\x9B\x40\x98\xE1\x9B\x86\x9C\xFD\x9C\x88\x9C\x69\x9C\x8A\x9C\xDE\x9C\x54\x9D\x4A\x96\x56\x9D\x4C\x96\x58\x9D\x4E\x96\x5A\x9D\xEE\x9B\xEB\x98\xF0\x9B\xED\x98\xF2\x9B\xEF\x96\x79\x9C\xF1\x98\xDD\x92\x52\x97\x3A\x98\x93\x62\x88\x9D\x23\x93\xD3\x9C\xF9\x9C\x83\x9C\xAC\x9C\xE2\x86\x02\x98\xE3\x9B\x6C\x96\xE5\x9B\x8E\x8B\x8C\x9C\xC5\x97\x8E\x9C\xC7\x97\x9A\x9D\xC9\x97\x80\x97\xCB\x97\x5C\x9D\x72\x98\x5E\x9D\x74\x98\x60\x9D\xEC\x9C\x62\x9D\x71\x8B\x41\x99\x1C\x99\xAC\x86\x7B\x92\x62\x7D\x3F\x0A\xA9\x9D\xC9\x6F\x6A\x9D\xAA\x9C\x83\x91\xAE\x9D\x1E\x8D\xB0\x9D\x0C\x9C\xB0\x91\xAD\x97\xD8\x91\xAF\x97\x12\x87\xB1\x97\x43\x79\x9B\x97\x2C\x6B\x88\x97\x53\x97\x2F\x65\x62\x9C\xD4\x9C\xCE\x9D\x19\x92\x66\x9C\x17\x94\x29\x9C\x6A\x94\x2B\x9C\x4B\x8F\x75\x9D\x9B\x96\x52\x9C\x74\x96\x79\x9D\x17\x93\x11\x99\xFC\x8F\xBC\x9C\x1B\x93\x39\x9D\x4F\x94\xC0\x9C\x9A\x2C\x35\x8E\xF4\x97\xA7\x9C\xCD\x9C\xA2\x97\xBE\x92\x34\x97\xA8\x9D\x4A\x9D\xE8\x0B\x4C\x9D\xB0\x88\x4E\x9D\x08\x87\x2B\x9D\xE7\x9D\x2D\x9D\xB3\x9C\x2F\x9D\x1A\x91\x77\x9D\x1F\x94\xEE\x9D\x21\x94\xF0\x9D\x19\x93\xF2\x9D\x25\x94\x13\x98\xC0\x6C\x3B\x9D\x2E\x90\x17\x98\x53\x80\x1C\x7B\x87\x9D\x00\x9E\xC9\x05\x02\x9E\xFB\x89\x28\x9D\x03\x98\xB2\x9D\x08\x97\x95\x97\x0A\x97\x1C\x80\x0C\x97\x99\x97\xDA\x9D\xB3\x97\xCC\x78\x16\x9C\x51\x74\x00\x93\x89\x63\xD0\x9C\x1C\x9E\x75\x05\x1E\x9E\x95\x8C\x20\x9E\xB1\x9D\x89\x91\x06\x9E\x92\x95\x08\x9E\x2C\x9C\x0B\x99\x72\x96\xEC\x9D\x9D\x96\x06\x9D\x47\x97\xE5\x9C\x49\x97\xE7\x9C\x4B\x97\x0C\x9D\x4D\x97\x78\x9C\x34\x98\xC3\x9D\xDE\x7C\x58\x98\xDD\x9B\x32\x70\x25\x93\x06\x01\xA0\x80\x80\x8C\xCA\x9D\x31\x9E\x98\x05\x33\x9E\xF8\x89\x35\x9E\xD3\x9D\xD6\x91\xD5\x9D\xE4\x96\xBE\x95\xB0\x97\x28\x9E\x21\x7C\xDB\x9D\x2B\x9E\xB1\x6E\x57\x89\x19\x98\x66\x9D\x54\x9E\x86\x05\x56\x9E\xF0\x8F\x58\x9E\x87\x9C\x65\x98\xC1\x97\x94\x9D\x53", -"\x9D\xB5\x9D\x55\x9D\xB7\x9D\x34\x99\xB9\x9D\xE8\x98\xBB\x9D\xEA\x98\xBD\x9D\xEC\x98\xBF\x9D\xEE\x98\xC1\x9D\x0F\x9D\x4A\x9E\x86\x85\x01\x85\xAF\x7B\x03\x85\x30\x9E\xE0\x9D\xAC\x9D\x6B\x9D\x82\x92\x5A\x97\xBA\x9B\x8E\x95\x59\x9E\xE2\x96\x5B\x9E\x32\x99\x5D\x9E\xD8\x9D\x5F\x9E\x0E\x7E\x61\x9E\x01\x7A\x9D\x97\x09\x85\xF2\x61\x03\x82\x5A\x98\x39\x8F\x0F\x85\xD3\x98\xDB\x9B\x67\x9E\x40\x01\x69\x9E\x9A\x93\x6B\x9E\x91\x9D\x6D\x9E\x89\x9C\x67\x98\x22\x96\x96\x9D\x6D\x9C\x98\x9D\xE6\x98\x75\x9E\x36\x99\x77\x9E\x38\x99\xC1\x95\x5D\x9D\xC3\x96\xA1\x9D\xEF\x98\xF0\x96\x7F\x9E\x52\x62\x0B\x9A\xE7\x91\x60\x8F\x49\x1E\x20\x99\xD3\x6F\x1D\x85\x9C\x9E\x29\x7D\x49\x9D\x85\x9E\x4B\x9D\xAD\x9D\xE4\x9D\x95\x96\xFE\x9C\x2C\x9D\xBF\x9B\x2E\x9D\x3C\x9E\x2E\x9C\x3E\x9E\x0C\x98\x54\x9C\x1E\x91\x35\x9D\x4E\x92\xC9\x9B\x70\x92\xF4\x9D\xA0\x95\x16\x9E\x26\x91\xC9\x98\x46\x6A\xCB\x98\xDB\x5A\x6A\x81\xB5\x0B\x6C\x81\xFB\x96\x32\x94\x38\x59\xAA\x98\x83\x98\xA5\x9C\x9F\x9E\x89\x9B\xC5\x9E\x63\x98\x67\x9C\x92\x9D\xFF\x9C\x6F\x9E\x01\x9D\xA9\x9E\xE0\x9C\xAB\x9E\xEA\x9B\xAD\x9E\x91\x9C\xAF\x9E\x93\x9C\xB1\x9E\xBE\x9D\xB3\x9E\x77\x9C\xA2\x9D\x49\x9E\xA4\x9D\x94\x81\x43\x99\x04\x94\xA2\x98\x08\x0E\x9B\x81\xC9\x02\x16\x8A\x45\x9D\xA0\x81\x1C\x9D\x5D\x8C\x02\x63\xCB\x9D\x26\x63\xCD\x9D\x23\x9D\xF5\x91\x25\x9D\x25\x9C\x27\x9D\x04\x9E\xA5\x92\x38\x9E\x72\x9D\xE8\x9D\x46\x92\x0A\x9E\x48\x92\x2F\x9C\xF8\x8F\xD0\x9E\x05\x92\xD2\x9E\xC2\x98\x7D\x9D\xC4\x98\x52\x98\x24\x91\xD8\x9E\x1F\x93\xDA\x9E\x72\x84\xD9\x8F\xF2\x87\x17\x85\xCE\x96\xDD\x8F\x14\x2E\xDF\x8F\x78\x91\x2B\x9F\x0A\x94\xE2\x8F\xC0\x9E\x8E\x85\x53\x9E\xC3\x9E\x01\x9E\xE9\x9E\x8A\x98\xEB\x9E\xA5\x9E\x93\x9D\xA7\x9E\x8F\x98\x04\x96\x91\x98\x73\x9E\x57\x9D\x7E\x97\x59\x9D\xF6\x9E\x5B\x9D\xF8\x9E\x7A\x9E\xFA\x9E\x9B\x98\x48\x9E\x61\x9D\xFE\x9E\xE3\x89\x54\x94\x32\x9F\xCF\x95\xE3\x93\xF7\x81\x59\x94\xE1\x9E\x5B\x94\x61\x85\x5D\x94\xDD\x7E\x9E\x9E\x38\x9F\x1D\x9E\x3A\x9F\x8A\x9E\xAB\x97\xD4\x9D\x0E\x9C\xD6\x9D\x10\x9C\x5E\x9E\x12\x9C\x29\x9E\x14\x9C\xB4\x97\xC9\x6D\xC5\x9D\x06\x90\x3E\x62\x51\x9F\x3C\x90\x83\x94\xE3\x02\x85\x94\x6E\x70\x70\x9F\x40\x5E\x15\x7E\x09\x01\xD7\x57\xB1\x9B\xFE\x83\x9B\x6D\xFD\x66\x33\x65\x0C\x9B\xDD\x5A\x70\x5A\xBC\x3C\xC4\x8A\xC0\x5D\x7D\x68\xCB\x26\x6A\x69\xBF\x0E\x43\x33\xE1\x05\x3D\x67\x83\x33\x49\x65\x4B\x65\xC1\x1A\x4D\x65\x9E\x0B\x4F\x65\x36\x27\x51\x65\xFD\x66\xAD\x00\x3F\x95\x1E\x87\x09\x01\xAC\x00\x78\x6A\x8E\x9F\xCA\x1F\x90\x9F\x94\x0B\xF1\x0F\xC7\x3C\x93\x9F\x3E\x58\x09\x2A\x87\x9F\x2C\x0F\x89\x9F\x0E\x02\x5C\x66\x70\x58\x49\x65\x3C\x9C\xF8\x62\x3D\x65\x04\x5A\x61\x5C\xC2\x64\xCB\x26\x60\x65\x34\x82\xDD\x69\x91\x94\xFA\x29\x3C\x98\x56\x97\x83\x5A\x21\x04\x56\x99\x90\x85\x0F\x9A\xE2\x69\xD6\x5A\x14\x96\x9E\x69\x93\x72\x93\x62\xD4\x68\xF9\x95\xF7\x5C\x1F\x53\x3B\x27\x61\x99\x8C\x99\xC5\x9F\x3C\x96\xC7\x9F\x25\x53\x89\x06\xE5\x99\xE9\x04\xA2\x85\xDB\x99\x95\x99\xBE\x9F\xB4\x99\x71\x99\xF9\x9A\x06\x01\xCC\x9F\xB4\x96\xCE\x9F\x1B\x53\x2E\x1D\xCA\x99\x9D\x5D\xBA\x94\xD4\x9F\x01\x86\xCF\x99\xA3\x83\xBF\x94\x03\x95\x73\x9B\x0D\x61\xDB\x9F\xD9\x96\xDD\x9F\x8D\x58\xB1\x01\x95\x82\x38\x9A\x7A\x99\xD8\x94\x6D\x82\x00\x84\x7F\x9F\x3F\x0A\xEB\x9F\x8C\x97\xED\x9F\xF9\x5C\xA2\x7E\xD8\x67\xEF\x60\x92\x99\x2C\x86\xE9\x99\x6D\x99\xE7\x94\xEC\x99\x7E\x82\xCB\x9F\xD5\x98\xA3\x03\x24\x53\xDE\x9F\x47\x27\xD1\x9F\x14\x84\xD0\x85\x93\x99\x94\x67\xE4\x9F\xEB\x99\xE6\x9F\x3F\x6A\x06\xA0\xB8\x9F\xFF\x98\xBA\x9F\xFC\x9F\x35\x6A\xB6\x5F\xDD\x85\xCA\x5E\x19\x95\xDD\x99\x87\x83\xB6\x99\xC4\x99\xDA\x9F\x07\xA0\x12\x53\x50\x68\x21\x04\xE0\x9F\xA0\x6C\xBB\x83\x1E\xA0\xD6\x9F\xC2\x99\x15\xA0\xFB\x97\x04\x44\x18\xA0\x28\xA0\x90\x68\xCC\x99\xE3\x9F\xBC\x94\xEB\x85\xB9\x82\x2E\xA0\x5F\x98\x30\xA0\xD8\x3C\x0C\xA0\x88\x07\xDA\x99\x6B\x99\x89\x82\x02\xA0\xE5\x9F\x0E\x95\xD3\x67\xE8\x9F\x2F\x66\x1B\x5F\xF8\x9F\x86\x98\x3B\xA0\x26\xA0\x19\xA0\x52\x6A\x36\x6A\x9B\x5B\xDB\x67\x2B\xA0\xBD\x94\x2A\x95\x5D\x0F\x2C\x95\xF7\x99\x48\xA0\x24\xA0\x90\x29\x4C\xA0\x7C\x9C\xD1\x5B\xF6\x99\x9E\x94\x58\xA0\x16\xA0\xAE\x98\x4F\x68\xF8\x5C\xDC\x68\xB0\x5C\xF7\x83\x6D\x6A\xF9\x83\x27\x01\x49\xA0\xFE\x98\x62\xA0\x09\xA0\xEE\x9F\xBB", -"\x9F\x97\x9F\x38\x59\x41\x95\x22\xA0\x64\x26\x59\xA0\x63\xA0\xC8\x9F\x2E\x1D\x0B\x9A\xDE\x5E\x19\x67\x42\x5F\x1F\xA0\x81\x9E\x8A\x94\xB8\x63\x7A\x9F\xA6\x8A\x9C\x90\x90\x94\x69\x90\x3F\x0A\xCB\x76\xBC\x69\x10\x61\x0A\x9F\x8F\x85\x58\x99\x7E\xA0\x13\x83\x9D\x94\xC3\x9F\x02\x63\x88\xA0\xE1\x69\x39\x5B\x5D\x83\x46\xA0\xC3\x84\x0D\x61\x93\xA0\x22\x73\xF2\x65\x08\x95\x4D\x82\x4F\x5C\x6A\x99\xE8\x99\x94\x99\x11\xA0\xF6\x94\x98\x5E\x70\x99\x8C\x99\x9A\xA0\x57\x73\x9C\xA0\x15\x95\xE4\x66\x5B\x82\xA2\x99\x10\x9A\x9E\x91\xC0\x99\x2C\xA0\xD1\x82\x63\x82\xB7\x99\x12\x08\x6C\x6A\xFC\x68\x70\x67\xB9\x85\x83\x83\xCD\x99\x42\xA0\x12\xA0\x44\xA0\xCB\x94\xA7\xA0\xB7\xA0\x1D\x7D\xC9\x06\xFF\x9F\x9B\x94\x10\xA0\x36\xA0\x0C\x86\x98\x99\xC1\xA0\xC9\x67\x23\x95\x53\x60\xA1\x99\xF2\x9F\x6F\x99\x15\x0E\xA8\x99\xF6\x9F\xD4\x5C\xC2\xA0\x12\x7D\xC9\x06\xB0\x99\x40\xA0\x92\x83\xBD\xA0\xA4\xA0\xD9\x83\xA6\x67\xCB\xA0\xF2\x66\x32\xA0\x19\x06\x2A\xA0\xBC\xA0\x57\x6A\x6E\x99\xE8\x94\xD1\x5F\xE0\xA0\x5A\x68\xE2\xA0\x09\x90\x85\x85\xE5\xA0\x65\x6A\xC3\x82\x04\xA0\x38\xA0\x06\x9A\xA7\x5B\xA8\xA0\xCC\x75\xAA\xA0\xCD\xA0\x16\x95\xD5\x83\xD0\xA0\xE8\xA0\x04\x86\xEA\xA0\x4B\x6C\xF8\xA0\xFD\x9F\x24\x95\xFC\x5F\x51\xA0\xEF\xA0\x72\x6A\xB0\x94\xF2\xA0\xD2\x82\xEE\x99\x56\x83\x87\xA0\x93\x6A\x4D\x99\x5E\xA0\x91\xA0\x04\x64\xF6\xA0\xC4\x78\x4A\x5B\x67\xA0\xFC\x68\x69\xA0\xD8\x5C\x0E\xA1\xD9\x8B\x05\x9A\x97\xA0\x7E\x84\x99\xA0\xB4\x69\xF9\xA0\xE4\x66\x08\x84\xC7\x91\x0E\x9A\x53\xA0\xAF\xA0\x94\x9B\xD1\x5B\xB3\x9B\x10\x0E\xB5\x9B\xA6\x6A\x22\x9B\xC4\x83\xAA\x83\xA1\x9E\x3F\x92\xA3\x9E\x4F\x9D\x16\x9F\xCF\x90\xB9\x98\xB6\x21\x44\x94\x0C\x99\x1C\x9F\x64\x91\x0E\x9E\x49\x94\x10\x9E\x23\x94\x12\x9E\x12\x98\xD6\x9E\xA5\x96\x54\x98\x72\x50\x9A\x9C\xB0\x77\x9C\x9C\x0C\x0E\xF7\x6A\x55\x7D\x6E\x90\x99\x90\x81\x95\x11\x0E\x1E\x84\xDE\x9D\x2D\x15\x10\x90\x81\x94\x30\xA1\x5F\x9F\x8F\x9D\xD2\x9D\x6C\x9E\x50\x9D\x6E\x9E\x3F\x9F\xE2\x98\x41\x9F\xE4\x98\xF2\x9E\x6F\x9C\xF4\x9E\x71\x9C\x9C\x9D\x73\x9C\x9E\x9D\x75\x9C\xA0\x9D\xFB\x9E\xB5\x9E\x8F\x90\xF5\x9B\x7A\x95\x40\x87\x7A\x86\xF9\x9B\x94\x90\x71\x73\xAD\x95\x80\x9E\x00\x9C\x3C\x0E\x85\x86\x52\xA1\x06\x01\x2D\xA1\x34\x9B\xA9\x83\x11\x78\x09\x82\x95\x93\x8D\x9D\x65\x9C\xEA\x9E\xE5\x9D\xC8\x9E\x07\x9E\xCA\x9E\x09\x9E\xCC\x9E\x30\x9D\x3B\xA1\x4A\x92\x3D\xA1\x76\x96\x08\x9D\xA1\x96\xD4\x9E\x4D\x94\x43\xA1\x14\x98\x26\x9F\xA2\x95\x3B\x9C\x35\x84\xBE\x90\x98\x94\x85\x62\x1C\x9C\x77\x8B\x0F\x7D\xC3\x90\x7F\x9C\x14\x16\x54\xA1\xDE\x83\xA8\x7E\x31\xA1\x78\x93\x14\x9F\x57\x93\x3D\x9F\xED\x9E\x5D\xA1\x8B\x9C\x5F\xA1\xE8\x9B\x61\xA1\xE2\x9C\x70\x9C\xE4\x9C\x72\x9C\xE6\x9C\x74\x9C\x99\x98\x76\x9C\x4C\x9F\xFC\x9E\x4E\x9F\x96\x9E\x12\x86\x9F\x8B\xF8\x62\x3E\x9C\xB4\x6B\xCC\x9C\x48\x84\x24\x65\xB2\x8B\x60\x9C\x7B\xA1\x7A\x9B\x6E\x85\x56\xA1\x87\x9E\x43\x8E\x3A\x97\x58\xA1\xB5\x98\xB9\x96\xBD\x9B\xC9\x9E\x00\x9D\xCB\x9E\x50\x9C\x3A\xA1\xCE\x9E\x4B\x98\x40\x9E\x4D\x98\x8F\xA1\x4F\x98\x22\x9F\xCA\x9B\x24\x9F\xC6\x98\x45\xA1\xC8\x98\xC2\x9C\xF3\x76\xA4\x06\x52\x84\x89\x82\x3F\x0A\xC6\xA1\x8B\x9B\x7D\xA1\xF5\x83\x24\x88\x80\xA1\xC2\x8F\x8E\x9D\x0A\x9C\x90\x9D\x34\xA1\xB3\x9D\x01\x8E\x96\x97\x65\x9F\x91\x9E\x67\x9F\x60\x9E\x2A\x9E\x95\x9E\x2C\x9E\x6B\x93\xF4\x99\x3C\x0E\x7E\x9C\x79\xA1\xA1\xA1\xF3\x83\x27\x83\xEC\xA1\x8D\x79\x88\x9E\x73\x97\x60\x9F\x06\x99\xF3\xA1\x57\x90\xF5\xA1\x26\x9E\x61\x97\xCA\x79\x63\x97\x69\x9F\x32\x73\x6D\xA1\x60\x84\xF7\x9B\xE3\x91\x4C\x91\x87\x7D\x4E\x91\xA1\x9C\x50\x91\xFB\x98\x02\x63\xE8\xA1\x9A\x83\x4B\x99\xEF\x77\xED\xA1\x3C\x92\x07\xA2\xDD\x97\x09\xA2\xDA\x9C\x35\xA1\xFD\x91\x73\x9D\x26\x8E\xBB\x98\x28\x6D\x8B\xA1\x47\x94\x8D\xA1\x6D\x92\xC8\x9B\xDC\xA1\xD5\x9E\xDE\xA1\x16\x99\x95\xA1\x16\x98\xC2\x9C\x12\x9D\x6E\x87\x82\x96\x73\x91\xF6\x96\x39\x7F\x67\x2A\x56\x8C\xC6\x91\x7A\x98\xB7\x8F\x5A\x8C\x7C\x91\x29\x5D\x1F\xA2\xD2\x83\x21\xA2\x5C\x80\x23\xA2\x81\x92\xCB\xA1\x89\x9E\xCD\xA1\x21\x98\x3D\x97\xB0\x9C\x35\x77\x37\xA1\xE8\x73\x89\xA1\x0B\x9E\x2F\xA2\x0E\x99\xD8\xA1\x10\x99\xDA\xA1\x12\x99\x91\xA1\x9E\x95\x93\xA1\x15\x9E\xE0\xA1\x3C\x9D\xE2\xA1\xB0\xA0\xAB\x96\x9B\x17\x40\x9C\x21\x99\xAF\x96\x35\x9F\x2C\x82\xE7\xA1\xA2", -"\xA1\xEC\x83\xDF\x83\xA5\xA1\x69\x96\xCE\xA1\x04\x99\xD0\xA1\x86\xA1\xD2\xA1\x88\xA1\xD4\xA1\x3D\x9E\x04\x9D\xED\x9D\x1E\x9F\x0E\x98\x3F\xA1\x4B\x94\x60\xA2\xA3\x96\x62\xA2\xC4\x6D\x38\xA2\x18\x99\x50\x97\x68\x90\xC9\x96\xC1\x87\xE7\x91\xA7\x7E\xBD\x9E\xC1\x89\xB3\x8C\x1D\xA2\x04\x64\x49\xA2\x03\x9F\x4B\xA2\xD8\x81\x4D\xA2\xE9\x93\x25\xA2\x00\x98\x85\x9C\x59\xA1\xA4\x9E\x5B\xA1\xA6\x9E\x52\x9D\xEF\x9E\x71\x9E\x97\x9D\x43\x9F\x99\x9D\x45\x9F\x9B\x9D\x47\x9F\x9D\x9D\x79\x9E\x9F\x9D\x7B\x9E\xB4\x9E\x7D\x9E\x82\x9D\x89\xA2\x92\x90\x3E\x9D\x23\x2C\x15\x75\x07\x7A\x3F\xA2\x88\x8C\xCA\x9C\x42\xA2\x17\x8A\xE1\x8F\xE5\x8C\xFE\x96\xC5\xA1\x70\xA2\x93\x8A\xA4\xA1\x57\xA1\xF0\xA1\x9D\xA2\xF2\xA1\x23\x9E\x21\x97\xAD\xA1\x8D\x9C\x33\x99\x44\x9F\x90\x9C\x64\xA1\xA9\xA2\x66\xA1\xAB\xA2\x68\xA1\xAD\xA2\x6A\xA1\xAF\xA2\xA7\x96\x83\x9D\x1C\x87\x64\x9D\x10\x8D\xBF\xA2\x03\xA2\x2D\x23\x73\xA2\xB4\x98\x52\xA2\xB6\x98\x40\x94\x36\xA1\x2B\xA2\xFF\x91\x2D\xA2\xE4\x81\x5A\xA2\x32\x9D\x7F\xA2\xC0\x98\x20\x9F\xBB\x9C\x83\xA2\x14\x99\x36\xA2\xCC\x9B\x87\xA2\x0C\x36\x17\x98\x85\x9D\x81\x82\x48\x9D\x1B\x5F\x94\xA2\x6D\x85\xEA\xA1\x72\xA2\xC3\xA2\xFB\x9C\x4A\x9C\x9E\xA2\x29\xA2\x64\x92\x56\xA2\xFD\x80\x7B\xA2\xCD\x9E\x7D\xA2\x3F\x9E\xE3\x9C\xC6\x9B\x42\x9E\x33\xA2\x44\x9E\x0B\x9D\xB7\xA1\xEA\x9C\x4D\x9F\xC2\x9D\x4F\x9F\x71\x8B\x71\x9A\x3F\x5D\x20\x9C\x83\x2C\xDC\xA2\x19\x78\xDE\xA2\x9C\xA2\x75\xA2\xD8\x9C\x77\xA2\x39\x9E\x87\xA1\x3B\x9E\x05\xA3\x8A\xA1\xD6\xA1\xBE\x98\xEA\xA2\x32\x9C\x81\xA2\x10\x98\x41\xA1\x36\x9C\xF0\xA2\x38\x9C\xF2\xA2\x3A\x9C\xC2\x9C\x6C\x9F\x01\x9F\xA7\x78\x6B\x97\xCC\x85\xC9\x9D\x27\x01\xF9\xA2\x35\x90\xA3\xA1\x81\x6B\x98\xA2\x24\x9D\x6C\x9D\x26\x9D\x6E\x9D\x94\x96\x71\x8F\xE2\xA2\x2A\xA2\x18\x9F\x1B\x94\x58\xA2\x1B\x9F\x25\xA3\x30\x9C\x27\xA3\xB9\x9C\xEC\xA2\x7C\x9D\x0D\xA3\x7E\x9D\x46\x9E\x80\x9D\x0E\x9D\x0F\x8B\xDD\x9D\xA7\x9D\x1E\xA2\xC0\xA2\x04\xA2\xF6\x89\x3D\xA3\x10\x9F\x3F\xA3\x12\x9F\x41\xA3\xED\x93\x0A\xA2\xC7\xA2\xE6\x9B\xC9\xA2\xB6\x9D\xCB\xA2\xA6\xA2\xCD\xA2\xB2\xA1\x65\xA1\xB4\xA1\x67\xA1\xB6\xA1\x69\xA1\xB8\xA1\x6B\xA1\xFD\x9E\xBB\xA1\xF3\x97\x4C\x9E\x06\x9C\xA1\x97\x38\x59\xA3\x97\xDB\xA2\x12\x9B\x92\x8A\x5A\xA3\x2A\x8B\x5C\xA3\xE6\x92\x11\x9F\x48\x9C\x13\x9F\xFF\xA2\xC6\xA2\x94\x97\xC8\xA2\x0D\xA2\x2E\x88\x27\x9E\xF8\xA1\x93\x9E\xFA\xA1\xB4\x7D\x73\xA3\x35\x8D\x19\x9E\xE2\x84\x36\x89\x39\xA3\x80\x94\x3B\xA3\xFE\x76\x7F\xA3\x2D\x93\x81\xA3\x84\x9C\x83\xA3\xF1\xA1\x05\x9E\x0B\xA2\x8B\x92\x65\xA3\x72\x9E\x67\xA3\xAC\x9E\xA7\xA2\xBA\x9D\x81\x93\xAA\xA2\x49\x9F\xAC\xA2\x4B\x9F\x10\xA3\xB9\xA1\x12\xA3\x8F\xA3\xFF\x72\xD4\x97\x77\x80\xEC\x7D\x94\xA3\x44\x99\x7C\xA3\xDD\xA2\xFD\xA2\x4D\x9D\x84\xA3\x9E\xA3\x63\xA3\xB4\x9D\xA1\xA3\xA4\xA2\xA3\xA3\xF3\x9E\xA5\xA3\x76\x9E\xA7\xA3\xD0\xA2\xA9\xA3\xD2\xA2\xAB\xA3\x0D\x9D\x11\xA3\x7E\x9E\x13\xA3\x4B\x9E\x98\x9E\x0F\x81\x34\x89\x50\x9E\x93\xA3\x59\xA3\xB7\xA3\xCA\xA1\x6D\x8F\x82\xA3\x60\xA3\xD9\x9C\x8B\x98\x01\xA3\x45\x98\x03\xA3\xCD\x7C\x1A\x9F\x68\x92\x0C\x9E\x70\x94\x5C\xA2\x55\x9C\x29\xA3\x34\x9C\x2B\xA3\x59\x9C\x2D\xA3\x5B\x9C\x2F\xA3\x5D\x9C\xC2\x9C\x18\x98\xA5\x76\x7A\xA3\xFF\x9A\xFC\x83\xC9\xA1\xE2\x9D\xC5\x92\x51\xA2\xAE\x9C\x22\x98\x54\xA2\xCA\x49\xB2\x9C\x22\xA3\x02\x9D\xD5\xA1\x07\xA3\xCF\x9E\xE3\xA3\xD1\x9E\xE5\xA3\x57\x9C\xE7\xA3\x38\x9D\xE9\xA3\xBF\x9C\xEB\xA3\xC1\x9C\xD7\xA2\x9D\x91\x3D\x90\x41\x6F\x83\x9E\x17\xA3\x26\x48\x19\xA3\xF3\xA3\x0F\x9F\x80\xA3\x5E\xA3\xD7\xA3\x21\x9E\xDD\x98\x28\xA2\x9F\xA3\xCD\x92\xBE\xA3\xAA\x9E\xA5\xA2\xA4\xA3\x69\xA3\x0A\xA3\xB3\xA1\x43\x9E\xB5\xA1\xE8\x9C\x0F\xA3\xC9\xA3\xAD\xA3\xCB\xA3\xAF\xA3\xB9\x92\xF9\x9D\xD2\x9C\xE9\x82\x5B\x98\xD5\x96\x4A\x87\x93\x62\xB4\xA3\xA7\x70\xF2\xA3\x7E\xA1\x05\xA2\x1A\x81\x9A\xA2\xB3\x98\x1C\xA3\xE0\xA2\xCF\xA1\xF9\xA3\xE0\x6D\xE4\xA2\x43\x94\xE6\xA2\xD0\x7C\xE1\xA3\x98\x95\x01\xA4\x1F\x9F\x03\xA4\x36\x9D\x05\xA4\x26\x94\x25\x9F\x64\xA2\x17\x9E\xC2\x9C\xB9\x9E\xC2\x91\x93\x0D\x3C\x81\xB4\x93\x9C\xA1\x45\xA2\x38\x59\x82\x98\x7A\x8B\x0D\x61\x34\xA4\x98\x71\x36\xA4\xEB\xA1\x5B\xA3\x06\xA2\x4F\xA2\x08\xA2\xF6\xA3\xBB\x9B\xF8\xA3\x44\xA3\x02\xA3\x41\xA4\xBA\x98\xEA\x9D\xBC\x98\x4A\xA3\x1D\x9F\x47\xA4\x80", -"\xA2\x5E\xA2\xF1\x9D\xEE\xA2\xBD\x9C\x07\xA4\x3A\x9D\x4E\xA4\xD9\x9E\x50\xA4\xAF\x93\x44\xA2\x1D\x77\x88\x8F\x66\x0D\xDE\x93\x8F\xA2\x0C\x90\xED\x89\x09\x9F\x5B\x09\x5B\xA4\xD3\xA3\x1A\xA3\xB8\xA3\x03\x9E\xBA\xA3\x15\x9F\x1B\xA4\x37\x93\x1D\xA4\xF1\x9E\x1F\xA4\xC1\xA3\x21\xA4\x07\x9D\x0B\xA3\x09\x9D\x50\xA3\x23\x9F\x7F\x9D\x4D\xA4\x81\x9D\xD6\xA2\xB1\xA2\xD9\x63\x00\x9F\x7B\xA4\x53\x9F\x20\xA2\x14\x8A\x9C\x81\x06\x9F\x1A\x9D\x08\x70\x92\xA2\x6F\xA2\x12\xA4\x37\xA4\x60\xA4\x39\xA4\x62\xA4\x26\xA2\x64\xA4\x8B\x9E\x5A\xA1\xDB\xA3\xB8\x98\x69\xA4\x38\xA1\x43\xA4\x19\x7C\x6D\xA4\x3C\xA1\x4C\xA3\x34\x9D\x49\xA4\xD3\x9E\x34\xA2\x92\xA1\x75\xA4\xF5\x9D\x09\xA4\xF7\x9D\x79\xA4\x1B\x99\x6D\x9F\x68\x81\xE4\x8F\xE8\x91\x30\x94\x57\x9F\x89\x96\x11\x0E\x34\x94\x5A\xA4\x33\xA4\x86\xA4\x13\xA4\x8C\x9D\xEE\xA1\x82\xA1\x3B\x9F\x84\xA1\xEC\x9E\xD1\xA1\xEE\x9E\xD3\xA1\xFD\xA3\x7C\xA2\xE1\x9C\x05\x9D\x09\xA3\x93\xA4\x23\xA4\x0C\xA3\x25\xA4\x45\x9E\x27\xA4\x47\x9E\x29\xA4\xB0\xA2\x10\x9D\xAB\x63\x9E\xA4\xA1\x98\x2C\x9F\x62\x96\x58\x94\x1F\x99\x6A\xA2\xBE\x9E\x22\x99\xE5\x77\x6F\x8A\xA7\x5B\x5C\xA4\x17\x78\x5E\xA4\xFC\xA2\xD5\xA3\x79\x90\xB9\xA3\x9D\xA3\x8B\xA4\xBC\xA3\xF4\xA1\x25\x9E\x89\xA3\x0F\xA2\xCC\x7E\x11\xA2\xCB\x7A\x15\x9C\x6B\x9F\x68\x97\xAA\x9D\x1D\x4E\xEC\xA4\x92\x8A\xFA\xA4\x44\x9D\x08\x90\x72\x9F\x72\x85\x74\x9F\x96\xA2\xF1\x87\xCA\x72\x9B\x9E\x03\x01\xAF\x00\x51\x95\x7A\xA4\xDF\x48\x86\x56\x0B\x34\xEB\x8A\x19\xA5\x6F\x6D\x1C\xA5\xD9\x93\xB7\x8A\xE6\x93\xD9\x17\x21\xA5\x1F\x86\x03\x01\xB1\x00\x24\xA5\xDB\x9E\x20\x8E\xA2\x94\x43\x83\x5B\x98\xB2\x00\x2D\xA5\xE0\x94\x25\x85\xB1\x30\x56\x95\x3A\x65\x11\x9A\xEA\x69\x43\x1B\x82\xA0\x0D\x85\x7A\x0A\x57\x9A\x91\x69\x14\xA2\x6B\x9A\x39\x9A\x9D\x5D\xAF\x24\x6F\x9A\x67\x9B\x3D\xA5\x13\x83\xE9\x64\xF1\x8E\x9C\x8E\x35\x8C\xAC\x76\x6E\x3A\x49\xA5\x0E\x65\x22\xA5\xC1\x6D\x34\xA5\x9D\xA0\x07\x84\x4F\x8A\x22\x0B\x29\xA5\x40\x95\x27\x01\xB5\x00\x55\xA5\xAB\xA0\xC8\x6F\x58\xA5\xE0\x01\x5A\xA5\x1C\xA1\x15\x59\x5E\xA5\x21\xA1\x60\xA5\xE2\x6E\x86\x02\x63\xA5\x72\xA0\x1F\x4B\x66\xA5\x02\xA1\x33\x66\x58\x62\x6A\xA5\x9B\x8A\x5B\x98\xEC\x53\x57\xA0\xC5\x69\x5F\xA5\x49\x77\xFF\x61\x5C\x07\xFF\x40\xC7\x71\x31\xA5\x53\xA5\x00\x00\xCC\x37\x76\xA5\xA2\x68\x2E\xA5\x0E\x68\x6D\xA0\x18\xA0\x6B\xA5\xBD\x63\x23\x54\x6E\xA5\x9C\x69\x96\x90\x13\x0D\xBE\x29\xB9\x04\x09\x5D\xE2\x59\xFF\x0A\xC0\x9F\x94\xA5\x06\x01\xF7\x4A\x11\x61\xBA\x8A\xFA\x41\x63\x68\xA9\x71\x3B\x68\x5D\x9B\xDB\x5A\x66\x9B\xD7\x68\x6C\x08\x01\x72\x3A\xA3\x8F\x9A\x02\x07\x66\x5C\xFB\x41\x16\x86\x36\x00\xA8\x61\x61\x92\xAA\xA5\xE2\x5A\xA0\xA5\xFC\x87\x8F\x06\x6E\x9B\xA4\xA5\x29\x9B\xBF\x9A\x43\xA2\x51\xA5\x47\x72\x5B\x98\xBD\x00\x8B\xA5\x4E\xA0\xFB\x7B\x44\x6D\xF9\x26\x4E\x64\x16\xA1\x2D\x6F\x2C\x65\x47\x90\x65\x85\x01\xA2\xA9\x45\x01\x82\x74\x93\xD6\x81\x9A\xA3\xD0\x9D\x1C\x92\x1D\xA3\xD8\xA3\x1F\xA3\x17\x9F\x3A\x9E\xE9\x9D\xDF\xA3\x6E\x94\x45\xA4\xB7\x9C\xBA\xA4\x7A\x9D\x4E\xA3\x08\x92\x51\xA3\xE6\xA4\x53\xA3\xCA\xA3\x0F\x8B\x47\xA1\xF1\x87\x49\xA1\x08\x0E\x4B\xA1\x18\x8B\x56\x7D\x78\x7E\x5D\x0F\x51\xA1\x57\xA3\x04\x64\x4B\x72\x76\xA3\x8E\x7C\xFC\xA4\x58\x91\x27\xA2\xDA\xA3\x8C\xA4\xE3\x97\x8E\xA4\x03\x9D\xDE\xA4\x7E\xA2\x6F\xA4\xEB\xA2\xBC\xA4\x21\x9F\x96\xA4\xDD\xA1\x98\xA4\xDF\xA1\x9A\xA4\x57\x8D\xE1\xA5\x31\x9F\xE3\xA5\x07\x0E\xE5\xA5\x7E\x86\xFD\x9B\xAE\x95\x33\x82\xDC\x69\x02\x01\xA5\x8E\xDA\x9B\x0D\x61\xED\xA5\xFA\x9D\x6D\x7B\xF4\xA3\x3B\x94\xAF\xA4\x61\x9F\x5A\x9E\x63\x9F\x5C\x9E\xD7\x9D\x69\x89\xD9\x9D\xF9\xA1\x12\xA2\xFB\xA1\xCE\x78\x18\x9C\x99\xA1\xCC\x95\x9B\xA1\xC1\xA1\xB1\x93\x1E\x9C\x42\x7B\xEC\x7D\x12\xA6\x2E\xA4\xEF\xA5\x15\xA6\xEF\xA1\xFE\xA2\xFF\xA4\xA8\xA1\x9F\xA2\x3E\x9F\xA1\xA2\xDB\xA4\xF0\x9E\xF7\xA5\xAF\xA1\xDF\xA4\xB1\xA1\x22\xA4\x6B\xA3\x24\xA4\x6D\xA3\x26\xA4\x6F\xA3\xAC\xA3\x71\xA3\xBA\xA1\xFC\xA1\x13\x97\xBD\xA1\xE2\x79\xBF\xA1\xD3\x78\xF2\x9C\x63\x72\x42\x9C\xFE\x9D\x02\x63\x2C\xA6\x20\x9D\x2E\xA6\x14\xA4\x99\xA3\x16\xA4\x9B\xA3\xD8\xA3\x33\xA1\xBB\xA3\x86\xA3\x64\xA3\x88\xA3\xAC\x89\x92\xA4\x41\x9E\xE2\xA4\x95\xA4\xE4\xA4\x0E\xA3\x42\xA6\x28\xA4\x44\xA6\xAE\xA3\x46\xA6\xD9\x7F\xE3\xA1\x94\x75\xF7\xA2\x11\xA6\xC3\x7D\x98", -"\xA3\x1F\x98\x17\xA6\x62\xA3\x5B\xA6\xBD\xA3\x5D\xA6\x8F\x92\x8A\xA3\x10\xA2\x13\x9C\x08\xA5\x6A\x9F\x2D\x76\x33\x96\x83\xA4\x17\x83\x4F\xA6\x8C\x65\xB4\x1F\xF2\xA4\xB2\x8F\x89\x94\x7D\x9C\x1E\x8B\x2F\x86\xA7\x5B\x51\xA6\x68\x9D\xA4\x80\x88\xA4\x1F\x9E\xA7\xA1\x90\x95\xE6\x9D\x20\xA3\x79\xA2\xFC\xA3\x38\xA6\xFE\xA3\xF8\xA5\x08\xA3\x3C\xA6\xE1\xA4\x3E\xA6\xE3\xA4\x40\xA6\xE5\xA4\x65\xA6\xE7\xA4\x67\xA6\x09\x36\x04\xA6\xB6\xA5\x80\x96\x50\x99\x43\x87\x1A\xA2\x5F\x96\x48\x87\x7F\xA6\x32\xA4\x50\xA6\x6F\xA6\x61\xA4\xD6\xA3\x57\xA6\x18\xA4\x46\x8F\x43\xA3\x71\x9D\xE3\xA2\x46\xA3\x6C\x94\xD4\xA5\x49\x98\xB8\xA4\x8C\xA1\xD8\xA5\xEF\x9D\x71\xA4\x11\x9E\x73\xA4\xF3\x9D\xC0\xA4\xD7\x9E\x77\xA4\x27\x9F\x3A\xA2\x81\x96\x51\x8C\xC7\x9C\x53\x8C\x2D\x9F\xC4\x91\xFA\x96\x4C\xA6\xFC\x96\x7B\x91\xAC\xA6\x77\x0D\x6E\xA6\xC8\xA5\x70\xA6\xAB\x9C\xC6\x9E\xB5\xA6\x92\xA6\xD1\xA5\x21\xA3\xD3\xA5\x48\xA3\xE0\xA3\xE8\xA2\x78\x9D\xBE\xA6\x0F\x9E\xC0\xA6\x40\xA1\xC2\xA6\x13\x9E\x85\xA2\x50\x94\x2A\xA4\x69\xA6\x7B\x9C\x67\xA2\xF0\x9C\xAC\x96\xD0\xA6\xE2\x9E\xD1\x5B\xF5\x9C\x52\x91\x88\x43\xAF\xA6\xAC\xA4\xB1\xA6\xCC\xA5\x60\x89\x3D\xA4\x76\xA2\x3F\xA4\x6D\x7A\xD2\xA5\x19\x9F\xDF\xA6\xD5\xA5\xE1\xA6\x0D\x9E\xE3\xA6\x3E\xA1\xE5\xA6\x82\xA2\xBE\xA4\x61\xA2\xC4\xA6\x44\xA1\x02\xA6\x65\xA2\x0B\xA4\xFA\x6C\x96\x81\xAA\x8C\xE0\x5B\xCC\x96\xCC\xA6\xC9\x9C\xE8\x91\xCB\x9C\xCB\xA4\xA8\x98\x91\xA2\xD3\xA6\xCB\x87\xAE\xA6\xD6\xA6\xB0\xA6\xFD\xA4\x89\xA4\x32\xA6\x91\xA6\x85\xA1\x93\xA6\xDA\xA4\x7A\xA2\xDC\xA4\x06\xA3\x98\xA6\x00\xA4\xE0\xA4\x60\xA6\x9C\xA6\x62\xA6\x9E\xA6\x64\xA6\xD3\xA2\x70\xA3\xD5\xA2\xE1\xA1\x10\xA7\x71\x84\x12\xA7\x13\x75\x3F\x9D\xB6\xA2\x41\x9D\xF7\x96\x18\xA7\xBA\xA2\x07\x9F\xF4\x87\xBE\xA2\x81\xA6\x3F\x0A\x8B\xA6\x89\x9D\x8D\xA6\xF0\xA5\xD1\x91\xF2\xA5\x3C\x9F\x34\xA6\xAA\xA1\x36\xA6\x29\xA7\x96\xA6\xDD\xA4\x3A\xA6\xF9\xA5\x2E\xA7\xD9\xA1\x94\xA4\x90\xA1\x0A\xA7\x84\xA2\x0C\xA7\x94\xA1\xC6\xA6\x96\xA1\xE2\xA1\xD9\xA2\x12\x92\x60\x9C\x47\xA7\x0C\xA5\x53\xA6\xD3\xA4\x24\xA2\xAD\xA4\x9B\xA2\x9C\xA3\xC5\xA2\x5A\xA6\x0D\x9C\x24\x9E\x5F\x97\x0E\xA2\x11\x9C\x79\xA6\x68\x9F\x7B\xA6\x62\x9E\x12\x6F\xF5\xA2\xA0\x82\x1E\x7B\x8A\xA6\xF7\xA6\x43\x90\x69\xA7\x3B\xA4\x6B\xA7\xCE\xA5\xB3\xA6\x01\x96\x01\xA5\x0C\xA2\x03\xA5\x5E\xA6\x78\xA6\x06\xA5\x7A\xA6\xB2\x7D\x36\xA7\x0F\xA7\x9C\xA4\x56\x92\xF2\x83\xA0\xA1\xC7\xA5\x82\x82\xB7\x7F\x11\x94\x64\x94\xD5\xA4\x4C\xA7\xD7\xA4\xA9\xA1\xD9\xA4\xAB\xA1\x95\x9D\xA3\xA2\x1E\xA4\xC0\xA3\x62\xA1\xC2\xA3\xAE\x9E\xC4\xA3\x6C\xA3\xD1\xA2\x6E\xA3\x34\xA7\x43\xA6\x8C\xA7\x4F\xA4\x38\xA7\x57\x98\xCE\xA3\x93\xA7\x68\x81\x35\xA3\xE6\x85\x6D\x97\x37\x41\x7C\xA7\x69\x8E\x56\xA6\xFA\xA6\xA1\x89\x18\xA6\x8D\x9E\x1A\xA6\x8F\x9E\x1C\xA6\xAE\x89\x1E\xA6\x8C\xA3\x20\xA6\x6D\x6D\x56\xA3\x39\x96\x7B\xA7\x20\xA7\xF8\xA6\x22\xA7\x8F\xA6\x8A\xA4\x33\xA6\xB2\xA4\xB1\x9C\xDD\xA3\x41\x6E\xBA\xA6\xB5\x9C\xD6\xA5\xD6\x90\x57\xA7\x61\xA6\x59\xA7\xFE\xA5\x35\xA2\x00\xA6\x37\xA2\x5E\xA7\x39\xA2\xAC\xA7\x0E\x81\xAF\xA7\xF3\xA4\xBD\x92\xCA\x8D\x45\xA7\xB4\xA7\xC7\xA7\x7D\xA7\xF9\xA6\xD9\xA6\x70\x9D\xDB\xA6\xB7\xA6\x00\xA7\x47\xA3\x23\xA3\x59\xA2\xBC\xA6\x30\xA2\x06\xA7\x8E\xA1\x58\xA7\xDB\xA1\xD8\xA7\xBF\xA4\xDA\xA7\xF1\xA2\xDC\xA7\x88\xA2\xEA\xA4\x1C\x84\xEE\x8D\x54\x80\x63\xA7\xB5\xA7\x18\x90\xB7\xA7\xE9\xA7\xCD\x90\x67\xA4\xDC\xA3\xB4\xA4\x57\xA2\xEF\xA7\x49\xA3\xFF\xA3\xD7\xA1\x56\xA7\x5D\xA2\xF5\xA7\x5F\xA2\x5A\xA7\xEF\xA2\xF9\xA7\x2E\xA3\xFB\xA7\xF3\xA2\xED\xA3\xB1\xA3\xEA\x84\x10\xA4\x64\xA7\xE4\x8A\x1B\xA3\x80\xA7\xFC\xA6\x1E\xA3\xFE\xA6\x6C\x7C\xB8\xA6\x74\x9D\xD1\xA7\x76\x9D\x04\xA7\xE2\xA3\x0F\xA8\xE4\xA3\x08\xA7\x2A\xA3\xE7\xA6\x42\xA1\x5C\xA7\x63\xA2\x0E\xA7\xAB\xA7\x8E\xA7\x76\x92\x2D\xA4\x52\xA6\x4E\x9E\xF7\x97\x3A\x8E\x01\xA8\xE6\xA7\xB6\xA7\x3A\xA4\xDB\x98\x82\xA7\x42\xA3\xEA\xA7\x26\xA7\xDC\xA6\x94\xA6\xDE\xA6\x0B\xA8\xE0\xA6\xF1\xA7\x5B\xA2\x2B\xA8\x02\xA4\x2D\xA8\xE6\xA3\x2F\xA8\x2C\xA3\x15\xA8\xEA\xA3\x17\xA8\x30\xA3\xDE\xA7\xEE\xA3\x88\x2D\x3C\xA8\xE0\xA7\xB5\x79\x21\xA7\xF1\xA5\x72\xA6\x1A\xA4\x84\xA7\xA0\xA3\x76\xA6\xD1\x92\x88\xA7\x5D\x81\x07\xA5\x8B\xA7\x09\xA5\xE3\x7D\x0D\xA4\x02\x85\x40\x31\x2B\xA6\x02\xA8\x75\x93\x04", -"\xA8\x83\xA1\xC7\x9E\xD8\xA4\x78\xA2\x28\xA7\x95\xA6\x9E\xA7\x8F\xA4\xA0\xA7\xB0\xA1\x63\xA1\x6A\xA3\xCF\xA2\xA5\xA7\xC6\xA3\xA7\xA7\xC8\xA3\xA1\xA6\xAA\xA7\x78\xA4\xDE\xA7\x32\xA3\x9F\xA4\x07\x90\x98\x89\xA7\xA4\xE5\xA7\x5A\xA8\x48\x8B\xD7\xA6\xCF\x9D\x05\xA8\xFB\x91\x07\xA8\xB3\xA4\x25\xA8\x2C\xA2\x6B\xA4\x2E\xA2\x4A\xA8\xE9\xA2\xFA\xA5\x28\xA3\x4E\xA8\x04\xA4\x50\xA8\xE8\xA3\x52\xA8\x08\xA4\x54\xA8\xEC\xA3\xDE\xA7\x51\xA4\xB7\xA2\x1A\x09\xB1\x09\x3D\x81\x1A\xA7\xFB\x9D\x58\xA4\x8A\xA8\x4A\x72\x6E\xA8\xCA\xA5\x70\xA8\xD6\xA4\x72\xA8\x9A\xA7\x74\xA8\x9C\xA7\x70\x9E\xF6\xA5\x97\xA6\x54\xA7\x99\xA6\x7B\xA8\x3D\xA6\x7D\xA8\x3F\xA6\xA6\xA7\x41\xA6\xA8\xA7\x66\xA6\x83\xA8\xC7\xA6\xA4\xA8\x1D\xA5\x52\x9F\x88\xA8\x37\x59\xDE\x9E\x36\x2E\xEA\x89\xAA\xA8\x77\xA3\xD1\x5B\xE4\x9E\xCF\xA4\x1F\xA7\x8C\xA8\xB5\x7B\x3E\xA8\x7E\xA7\x40\xA8\x36\x9E\xB4\xA6\x43\xA8\x73\xA8\x27\xA7\xB6\xA8\xA2\xA2\xB8\xA8\x53\xA7\x90\xA4\xA1\xA7\x5F\xA6\xD5\xA7\x30\xA7\xD7\xA7\x63\xA6\xDC\xA5\xA0\xA6\xDE\xA5\xE8\xA4\x9B\xA4\xFD\xA7\xF1\x63\x0E\xA5\xE7\x91\x04\x9F\xB9\x72\xDA\x93\xBE\x5E\xD2\x98\xC1\x9E\x1B\x5F\x1D\xA8\x26\x85\x1F\xA8\x58\xA6\x90\xA6\x1F\x97\x60\xA8\x1C\xA4\x62\xA8\x3B\x93\x64\xA8\x46\x86\x7F\xA8\xC1\xA8\x81\xA8\xEB\xA8\xA2\xA6\xE9\xA4\xB7\x9E\x9D\xA4\x51\x9F\x8D\xA2\x34\x70\x2F\x9F\x80\xA4\x87\x83\xCE\xA4\x9D\x9E\xD5\xA6\xD4\xA8\xFB\xA8\x41\xA8\x61\xA3\x5F\xA8\x74\xA6\x02\xA5\x70\xA7\x04\xA5\x72\xA7\x89\xA7\x74\xA7\x67\xA8\x7C\xA6\xAF\x74\xF0\xA8\x52\xA4\xEF\x89\xB3\x7C\x56\x9F\xF1\xA6\x58\x9F\xD1\x5B\x0E\x90\x24\x99\xBA\x64\x29\x5D\xF9\xA8\xDA\x93\x17\xA9\xD9\xA8\x6F\x9D\x06\xA8\xB6\xA6\x45\xA3\xED\xA7\xB9\xA6\x02\xA7\xBB\xA6\x0D\xA8\x26\xA3\x9A\xA8\x4D\xA3\xFC\xA5\xED\xA2\x13\xA8\x74\xA4\xA0\xA8\x76\xA4\x33\xA8\x84\xA8\x35\xA8\xF1\x63\x86\xA8\xED\xA4\x20\x62\x6F\x9F\x16\xA5\x31\x9F\x1D\x9D\xCA\x64\x73\x9F\x35\x83\x4F\xA9\xA5\xA6\x18\xA5\x2A\xA5\xED\x74\x11\xA1\xA5\xA8\x3E\xA7\xFF\x7C\x30\xA4\xBB\xA5\x60\x6A\x79\xA5\xC6\x9D\x28\xA1\x5D\x0F\x2A\xA1\x8C\x96\xA7\x5B\xFC\x99\x16\xA9\x8E\xA6\x34\x9E\xFD\xA8\xE4\x9B\xFF\xA8\x8D\xA4\x01\xA9\x25\x97\x03\xA9\xE0\x87\x66\xA8\xFB\x7E\xC4\xA8\xA2\x95\xA4\xA6\x4C\x79\x8A\xA2\x18\xA2\x4F\x79\xFB\x9B\x6D\x90\xD5\x9B\xE8\xA5\x3C\x0E\xEA\xA5\xC5\xA7\x1B\x5F\x68\xA9\x0B\x85\x07\x80\x67\xA7\x4E\xA2\xE8\xA7\x71\xA8\xDA\xA6\x44\xA8\xEC\xA7\xDD\xA6\x01\xA7\x48\xA8\x03\xA7\x98\xA8\xE2\xA6\x3F\xA9\xBB\xA4\x9C\xA8\x4A\xA4\x9E\xA8\x06\xA4\x45\xA9\xC1\xA4\xA2\xA8\x48\x79\x14\xA2\x4E\x86\xF8\x9B\xA7\xA6\x6A\x90\x73\xA1\x80\x95\xE1\x90\x4D\x99\x78\xA1\xEB\xA5\x3F\x0A\x85\xA9\x83\x88\x14\xA6\x54\xA6\x71\xA6\xC4\xA2\x81\xA7\x34\xA9\x7B\x93\x6E\xA9\xF5\xA5\x70\xA9\xE7\x97\x72\xA9\x9D\x8D\x74\xA9\x4E\x80\x76\xA9\xDD\xA7\x49\xA9\x49\x8B\x10\x0E\x19\x9C\xBB\x7D\x11\xA9\x3A\x84\xBC\x7C\xC6\xA5\x01\x01\xAB\xA9\x8E\x8A\x8F\x7F\x2F\xA6\x97\xA7\x5E\xA8\xF3\xA5\xB4\xA9\x68\x98\xE0\xA8\x2B\xA7\xBA\xA8\x2D\xA7\x9A\xA6\x2F\xA7\xBE\xA8\x9D\xA6\xC0\xA8\x9F\xA6\xC2\xA8\x82\xA8\x68\xA8\x1D\x86\xF0\x95\x44\x84\xF2\x95\xC0\xA1\xCE\xA8\xCA\x6F\x4E\xA6\x6D\xA6\x93\x62\xC8\xA9\x59\x98\xAD\xA9\x88\xA9\x99\xA2\xD7\xA8\x6D\x9D\x18\xA9\xD9\xA3\x4D\xA7\xCD\xA7\x55\xA2\x09\xA8\x04\xA3\x2A\xA7\x24\xA3\x3D\xA9\x4B\xA3\x95\xA9\xD9\xA5\x41\xA9\x4F\xA3\xE8\xA8\x97\xA4\x52\xA3\x99\xA4\x54\xA3\xED\xA8\x0B\xA9\xE8\x80\x5F\x9C\xE4\xA7\x67\x72\xAF\xA8\x4F\x9B\xED\xA9\x40\xA3\xEF\xA9\x59\xA6\x00\xA5\x1B\xA9\x85\xA7\x1D\xA9\x87\xA7\x05\xA5\x65\xA8\x8A\xA7\x75\xA9\xDD\xA9\x21\x84\x32\x95\x87\xA6\xD9\x9B\xF1\x8D\x08\xAA\x3D\xA8\x03\xA8\x3F\xA8\xEE\xA9\xB2\xA9\x19\xA9\xCE\xA9\x10\xAA\x61\xA8\x86\xA7\x77\xA6\x14\xAA\x04\xA9\xBA\xA9\x96\x80\xDE\x6B\x78\xA9\x16\x84\x7B\xA9\xA8\xA6\x26\x8C\x80\xA9\xFF\x00\xA3\x9C\xE5\x9E\xAA\xA9\x09\xAA\xB0\xA5\xB1\xA8\x98\xA7\xB3\xA8\x4E\xA7\x9B\xA7\x50\xA7\x76\xA8\xD1\xA9\xF7\xA9\x2C\xA7\x0E\xA8\xD5\xA9\xE5\xA8\xD7\xA9\x31\xA7\xD9\xA9\x33\xA7\x07\xA9\x01\xAA\xDF\xA5\x03\xAA\xCC\xA3\x7A\xA9\x29\x9F\x3C\xA2\xCA\xA6\x3E\xA2\x5C\xA9\xB8\xA2\x40\xA7\xC5\x91\xBB\xA2\xF3\x9C\xD2\xA6\x6D\xA2\xCB\x9A\x84\xA9\x39\xAA\x4E\xA5\x3B\xAA\xCD\xA9\xF1\xA9\xF4\xA5\xD0\xA9\xB6\xA9\x6C\x98\xB8\xA9\x5F\x90\x05\xA9\xDA\xA9\x4C\xAA\x01\xA6\x02\xAA\x37", -"\xA7\xBE\xA9\x9A\x90\xEF\x9C\xA1\x04\xF0\xA6\xE0\x8F\x5B\xAA\xF3\xA6\xAD\xA8\x06\x01\xE8\xA9\x4D\x9E\xCA\xA9\xAE\xA9\xD8\xA6\x8B\xA9\xDB\xA8\xB4\xA8\xDD\xA8\x40\xAA\x47\xA8\xF6\xA9\xF0\xA7\xF8\xA9\x6E\xA4\x4C\xA8\x48\xA4\x97\xA9\xBD\xA4\xF7\xA7\x0B\xA7\x9B\xA9\xC5\xA6\x47\xA9\xC5\xA8\x71\xAA\xA1\x84\x8B\xA2\x92\x84\xC1\x91\xA6\xA8\x75\x91\xCE\xA6\xD0\x96\x27\xA6\xC2\x61\x1B\x9D\x5D\xAA\x47\x99\x67\xA9\x60\xAA\x1D\x8E\xCB\xA5\x90\xA8\x68\x94\xEB\xA7\x38\xA9\x8F\xA9\xEE\xA7\x86\xAA\x0C\xA8\x44\xAA\x3E\xA9\x8A\xAA\x70\xA4\x11\xA8\x72\xA4\x43\xA9\xC3\xA6\x90\xAA\x0D\xA7\x6F\xAA\x8D\xA7\xEE\xA8\x3D\x63\x3B\xA2\xA3\x84\xB5\xA2\x15\x9D\x16\xA7\x17\x9D\x76\x91\xCF\xA6\x76\xAA\xAE\x96\xFD\x96\x06\x01\x06\x7D\x67\xA2\x38\xAA\x1F\xAA\x6F\xA8\x21\xAA\x0C\xAA\x23\xAA\xF0\xA9\x99\xA7\x3E\xAA\xB5\xA8\x84\xAA\x90\xA9\xAC\xAA\x49\xA8\x88\xAA\xB9\xA4\xFA\xA9\xBF\xA6\xB2\xAA\xC1\xA6\xB4\xAA\xE8\xA6\x31\xA8\x86\xA2\x9D\xA9\xC3\xA4\xDE\xA7\x14\x97\x63\x7F\x60\x9C\x7B\xAA\xEE\xA5\x87\xA9\x95\xA7\x81\xA1\xA5\xAA\x80\xAA\x36\xA9\xA8\xAA\x68\xA4\x94\xA8\xE5\xA2\x96\xA8\xE7\xA2\x93\xA9\x05\xA7\xDA\xAA\xE4\xA6\xDC\xAA\xE6\xA6\xDE\xAA\x30\xA8\xB6\xAA\x5D\xA7\x92\xAA\x5F\xA7\x56\xA8\x78\xA7\x8B\x7F\xE6\xA9\x02\x63\xE8\xAA\x13\xA6\x66\xA7\xEB\xAA\xD4\xA4\xED\xAA\xB2\xA8\x8C\xA9\xDC\xA8\x45\xA8\x75\xA8\x85\xAA\x52\xA7\xD2\xA9\xE2\xA8\x7A\xA8\xA2\xA7\xF5\x9E\xA4\xA7\xBF\xA8\x6B\xAA\x4B\xAA\x94\x9E\x8E\xA3\xEC\xA6\x7F\x85\x15\xA3\x41\x5D\x91\xA7\xC7\xA9\xA3\xAA\x50\x93\x62\xAA\xB0\xA9\x21\xA8\xCF\xA5\x23\xA8\x9D\x74\xF2\xAA\x42\xA4\xF4\xAA\x44\xA4\x29\xA8\x46\xA4\xB0\xAA\xFB\xA5\x8C\xAA\xFD\xA5\xFE\xA9\xFF\xA5\x00\xAA\x6E\xAA\x4E\xAA\x70\xAA\xBA\xAA\x67\x6F\x75\xA3\x08\xAB\x99\x81\xB1\xA7\x03\x0B\xAC\x7A\x27\x01\x07\xAB\x2D\xA6\xEA\xAA\xC9\xA5\x0A\xAA\x8A\xA9\x0D\xAB\x81\xAA\xD2\xAA\x83\xAA\x31\x99\xCF\x92\x79\xA8\x3B\xA6\xBC\xA8\x9B\xA6\x48\xAA\xE7\xA8\x32\xA7\xE9\xA8\xDB\xA9\x08\xA9\xBC\xA9\x7E\x4A\xC4\xA7\x10\xA6\xE7\xA9\x25\xAB\x12\x94\x27\xAB\x31\xA6\x6C\xA7\x0F\xAA\x6E\xA7\x87\xA3\x28\xAA\x63\xA8\x2A\xAA\x73\xA9\x16\xAA\xBB\xA9\x18\xAA\x4E\x84\x3F\xAB\x47\xAB\x63\x8F\xFC\x9D\xE3\xA7\x05\xAB\x04\x64\x46\xAB\x38\xA8\x7D\xAA\xEB\xA9\x3E\xA3\xCD\xAA\x5F\xA3\x0D\xAA\x6C\xA9\x22\x9E\x26\xAA\x00\xA9\x69\xAB\x02\xA9\x6B\xAB\xB9\xA9\x6D\xAB\x2D\xAA\x23\xA9\xE0\x84\x91\xA3\xEE\x88\x36\x89\x78\xAB\x8C\xA6\x60\x7A\xCB\xA9\x0C\xAB\x3C\xAA\x0E\xAB\x82\xAA\x10\xAB\xDE\xA8\x37\xA6\x77\xA8\x39\xA6\x15\xAB\x53\xAB\x17\xAB\xCE\xA2\x19\xAB\xD8\xA9\x1B\xAB\x59\xAB\x6D\xAA\xDB\xA7\x00\xAB\xBD\xA9\x3D\xAB\x4F\xA1\x15\x0E\x13\x8E\x10\xA4\x8F\xAB\x48\xA7\x91\xAB\x7E\xAA\x8F\xA8\xEE\xAA\x91\xA8\x37\xA9\xF1\xAA\x39\xA9\x26\xA8\x3B\xA9\xD2\xA7\x31\xAB\xD7\xA5\xF8\xAA\x07\xA7\xFA\xAA\x09\xA7\x8E\xAA\x5B\xA7\xFE\xAA\x32\xA8\xB8\xAA\x34\xA8\xA8\xAB\x2E\x63\x37\xA8\x90\xAB\xF1\x84\x3A\xA8\x26\x93\x07\xAA\x7A\xAA\x61\xAB\x96\xA7\x93\xAB\x63\xAA\xD1\xAA\xF2\xA9\xFA\xA3\xCF\xA7\x16\x7C\x27\xA8\xEB\x9D\xD8\xAA\xBD\xA6\xBC\xAB\xF4\xA7\xD6\xA7\xF6\xA7\x37\xAB\xD9\xA7\x39\xAB\xA5\xAB\xC4\xAB\x48\xA9\xC6\xAB\x7D\x63\x64\x9E\xEF\xA3\xCD\xAB\x03\x01\xAD\xAB\x65\xA7\x48\xAB\x8E\xA8\xE3\x9D\xB2\xAB\xA7\xAA\x8D\xA9\xA9\xAA\x46\xA8\xD5\xAA\x13\xAB\x43\xAA\xD3\xA9\x45\xAA\x54\xAB\xD6\xA9\xA0\xAB\x49\xAA\xA2\xAB\xFF\xA9\xDD\xA5\x4D\xAA\xEC\xA8\x3C\xAB\x04\xAA\x34\x84\x6A\xA8\x82\x9E\x6C\xA8\xAC\xAB\xCF\xAB\xEC\xAA\x63\xAB\xFE\xA4\x65\xAB\xCC\xA7\x65\xAA\xA8\x9E\x9A\xAB\xB9\xA8\x9C\xAB\x55\xA7\x46\xAA\x10\xA8\xDE\xAB\x12\xA8\xC0\xAB\x14\xA8\xE2\xAB\xFA\xA7\xA6\xAB\xFC\xA7\x05\xAC\x4A\xA9\x0B\xA5\xDC\x9E\x89\xA8\x1D\xA7\x27\xA9\x06\xAB\x0B\xAC\x0B\xAB\x0D\xAC\x23\xA7\x0F\xAC\x25\xA7\x0F\xAB\x8E\xA9\xF5\xAB\xAB\xAA\xF7\xAB\x87\xAA\xAE\xAA\xF9\xA9\x33\xAB\x9B\xA8\xBE\xAB\x2E\xA8\xFC\xAA\x51\xA8\x1D\xAC\x16\xA8\x1F\xAC\x18\xA8\xC6\xA8\x25\xA5\x33\xA3\x7C\xA4\xB2\x93\x54\xA4\x7E\x98\x84\xA6\x81\xA4\x64\x8F\x26\xAC\x44\x8A\x00\x00\xEC\xAB\x1E\xA8\x6A\xA9\x57\x9E\x80\xAB\x37\x9E\x11\xAC\x40\x9F\x67\xAA\x8F\x9C\x69\xAA\xB6\x91\x2C\xAA\xE4\x80\x6F\xAB\x52\x7C\x35\xA5\x3A\x8A\x56\xAA\xDC\x93\xE7\x89\x7F\xA4\x48\xAC\x87\x83\xD1\xA8\x14\xA9\x60\xAB\xCB\xAA\xB0\xA8\x7D\xAB\x17\xA4\xCF\xAA\x0E\xAA\x10\xAC\xCF", -"\xA9\x12\xAC\x42\xAA\x34\xAC\xF9\xAB\xAF\xAA\x17\xAC\x2C\xA8\x39\xAC\x4F\xA8\x3B\xAC\x9F\xA8\x3D\xAC\x53\xA8\x3F\xAC\x55\xA8\x94\xAA\xD6\x2F\x25\xA9\x99\xAA\x5D\xA4\x98\x71\xB5\x8F\x64\xAC\xF5\xA8\x79\xAA\xEB\xAB\x29\xAC\x68\xA7\x4B\xAB\x94\xAB\x4D\xAB\xD4\xAB\x40\xA4\x2D\xAB\x6A\xA4\xD8\xAB\x6C\xA4\xDA\xAB\xF2\xA7\xDC\xAB\x32\xA2\xFE\xAB\x5A\xAC\x6D\x8B\x5C\xAC\xD7\x8F\x48\x85\x11\x8A\x62\xA9\xC8\xA4\x35\x03\xCA\xA4\x2A\xA9\xCC\xA4\xFA\x98\x4B\xAC\x29\x5D\x4E\xAC\xFA\xA8\x50\xAC\x6A\x9E\x52\xAC\x2A\x9D\x54\xAC\x5E\xA1\x56\xAC\xB8\x9D\x9E\xAB\x7C\xA8\xFD\xAB\x57\xAB\x4A\xAA\xA3\xAB\x1D\xAB\x9D\x7E\x14\x85\xC5\xA4\x43\xAC\xA0\xA4\x57\x94\x6C\x70\x29\xA9\xC4\xAA\xD1\xA6\x2C\xA9\x5A\x9F\xE7\x77\xA9\xAC\x8B\xAC\x89\xA9\xC9\xA7\x6B\xA9\xCB\xA7\x2E\xAC\x96\xAB\x30\xAC\x11\xAB\xF6\xAB\x13\xAC\xE1\xA8\x52\xAB\x16\xAC\xFB\xAB\x47\xAA\xB6\xAC\xDF\xAB\x58\xAB\x00\xAC\xEA\xA8\x02\xAC\x09\xA9\x4F\xAA\x2B\xA4\x67\x97\xC8\xAB\xAE\xAB\x0D\xA5\x4E\xA9\xC8\xA1\xAA\xA4\xD4\x9A\x84\xA4\xBF\x2D\x2E\x82\xEC\x7C\x95\xA3\x71\xA2\x11\xA5\x0D\x85\x65\xA9\x82\x7D\x29\x5D\x49\x3D\xAC\xA9\x09\xAB\x49\xAB\x3A\xAA\x6B\xAC\xB2\xA6\x6D\xAC\xAE\xAC\x83\xA7\x82\xAB\x6F\xA9\x84\xAB\x71\xA9\x86\xAB\x6A\xAA\x9B\xAC\x63\x90\x2E\xAA\x9F\xA9\x59\x96\x06\xA6\x5B\x5C\x7E\x95\xD4\x9B\x53\x86\xA9\xAB\x38\x59\x82\xA9\x5F\xAB\x02\x63\xF5\xAC\xC9\xA9\x45\x81\x92\xAB\x2B\xAC\xCA\xA7\x24\xA7\xFE\xA8\xFF\xAC\xB5\xA9\x01\xAD\xB7\xA9\x03\xAD\x59\xAC\x88\xAB\x5B\xAC\x68\x73\x08\xAD\x6F\xA1\xC8\x96\x31\xAA\xA3\xA9\x46\x8B\x98\x90\xFE\x9B\xA9\x96\x0C\xA6\x8F\x94\x4C\x8B\xEC\x7D\x14\xAD\xE9\xA9\xF7\xAC\xEF\xAB\xF5\xA3\x28\xAB\xF7\xA3\x53\xA2\x92\xA8\xCE\xA7\xF4\xA9\xDE\xA3\xB8\xAB\x28\xA8\xF6\xAA\x2A\xA8\x76\xAC\x4D\xA8\x78\xAC\x9D\xA8\x7A\xAC\x9A\xA9\x7C\xAC\xA1\xA8\x7E\xAC\xA3\xA8\x80\xAC\x1C\x87\x98\xA1\x9F\x73\xBF\x90\x56\xA4\x44\xAC\x29\xA6\x00\x00\xDA\x7B\x18\x0C\x0D\x61\x32\xAD\x7C\xAA\x16\xAD\xB0\xAB\xF0\xAB\x4C\xAB\xEF\xAA\xF3\xAB\xB5\xAB\xAA\xAA\x3A\xA9\x91\xA9\x3C\xA9\x35\xAC\x89\xAA\x42\xAD\x8B\xAA\x44\xAD\x98\xA9\x46\xAD\x4C\xA4\x3A\xAB\x03\xAC\xB9\xAA\x21\xAC\xBF\xA9\x0C\x0E\xD0\x78\xA2\x8B\xE5\x90\x9D\xAA\x9B\x5C\xE5\xA9\x7A\xA7\x1B\x5F\x58\xAD\xE9\xAA\x7A\xAB\x0A\xAB\x8C\xAC\xCB\xAC\x51\xAC\xCD\xAC\x1B\xAD\x67\xAB\x5C\xA6\x1E\xAD\x68\xAA\x20\xAD\x0B\x96\xFF\xAB\x38\xAB\x01\xAC\x6D\xAD\xDF\xAC\x04\xAC\x50\xAA\x68\x62\x06\xAA\x76\xAB\x3F\x0A\x7B\xAD\x40\xAB\x7D\xAD\xF8\xAC\x61\xAA\xFA\xAC\xB8\xA7\xC5\x8C\x38\xAD\xE1\xA2\xB4\xAB\x08\xA8\x92\xAC\xB5\xA4\x2F\xAB\xB7\xA4\x96\xAC\x4B\xA8\x67\xAD\xB1\xAA\x19\xAC\xB3\xAA\x1B\xAC\x44\xA9\x48\xAD\x46\xA9\xE4\xAB\x93\xAA\xE6\xAB\x0C\xA4\x86\xA6\x2A\x91\x88\xA6\xB4\x9B\xF4\xAC\xC9\xAC\xEC\xA9\x8D\xAC\xD2\xAB\x3D\xAA\x90\xAC\xFF\xA6\x61\xAD\xB7\xAB\x63\xAD\xB9\xAB\x40\xAD\x32\xAB\xA7\xAD\x34\xAB\x69\xAD\x8D\xAA\xE0\xAB\xF8\xA7\xAD\xAD\x9C\xA9\x4A\xAD\x9E\xA9\x5E\xAA\x23\x84\x26\xAD\xF2\x96\xA2\xA9\x7C\x86\xA9\xA6\x58\x74\x60\x96\xA0\xAA\x54\x9F\x93\x62\x95\xAD\x72\xAB\x5A\xAD\x7B\xAB\x5D\xA3\x9A\xAD\xA6\xAA\x43\x98\x3A\xAD\xF3\xA9\xA1\xAD\x0A\xA8\xD6\xAA\x92\xA9\xA5\xAD\x99\xA8\x37\xAC\x40\xA9\x35\xAB\x42\xA9\xAB\xAD\xB5\xAA\xCB\xAD\x91\xAA\xAF\xAD\x01\xAB\x4C\xAD\xE4\x20\xBC\xAA\x88\x6C\x6C\x00\x0E\xA9\x86\x96\x9C\xAA\xE3\xA9\x9E\xAA\x8A\x96\xD8\xAD\x2B\xA1\xB7\xAD\x69\xAC\x4A\xAB\x80\xAD\xAD\xAC\x82\xAD\x6D\xA9\x1C\xAD\x66\xAA\x86\xAD\x57\xAC\x88\xAD\x81\x97\x8A\xAD\xE1\xAB\x8C\xAD\xE3\xAB\x3B\xAB\x6F\xAD\x90\xAD\xC5\x6C\xEE\xA6\x74\xAA\x69\xA2\x51\xAD\x2C\x64\x6C\xA2\xA0\x8B\x37\xAA\x2C\x29\xB8\xAD\x7C\xAB\x0B\xAA\x7E\xAB\xFC\xAC\x07\xAE\x81\xAB\x84\xAD\x75\xA6\x0B\xAE\xB3\xAC\xE4\xA8\x18\xAC\xE6\xA8\xDA\xAC\xB8\xAC\xDC\xAC\x5A\xAB\xDE\xAC\x5C\xAB\x40\xAC\xF5\xAD\x11\xA7\xC4\x9C\x13\xA7\x8D\x5E\x15\xA7\xD8\x82\xF5\x98\xB9\xA2\x59\xAA\x42\xA7\x9A\x84\x00\xAE\xC0\xAC\x57\xAD\x20\xAE\xDF\xAD\x22\xAE\x6C\xAC\xC1\x93\xB1\xA9\x8C\x9E\x30\x99\x8E\x9E\x51\xAB\x90\x9E\x1D\xA6\x92\x9E\xAA\x7F\xBA\xAC\xFD\x7E\xE1\xAC\x17\xA2\x52\xAA\xBD\xAA\xEC\x87\xC0\xAA\x42\x9D\xC2\xAA\xFC\xAD\xA5\xAC\x1B\xA7\xD1\x5B\xEE\x91\x93\xAD\x1F\xAE\x03\xAE\xF9\xAC\x46\xAE\xFB\xAC\x48\xAE\x29\xAB\xEF\xA9\xD0\xA5\xD0\xAC\x98\xAB\x51\xA7\xD3\xAC\x14\xAB\xD5", -"\xAC\xBB\xA8\xB4\xAC\xBD\xA8\xD9\xAC\x1A\xAC\xC9\xAD\x8F\xAA\xF1\xAD\xB7\xAA\x13\xAE\xC5\xAB\x70\xAD\xC9\x73\x61\xA7\x75\x6D\x52\x9E\x62\xAE\x69\xA9\x4A\xA7\x5E\x92\x37\xAD\x65\xA4\x39\xAD\x9F\xAD\x93\xA8\xB6\xAB\x95\xA8\x94\xAC\x97\xA8\xE9\xAD\x94\xA9\xEB\xAD\x96\xA9\xC7\xAD\x36\xAB\xDB\xAC\x8B\xAD\xDD\xAC\x8D\xAD\x33\xAE\x7F\xAC\xB1\xAD\xB0\x61\x03\xAB\xEE\x82\xE5\x94\x94\xAD\x44\xAE\x15\xA4\xE0\xAD\xF1\xAB\xE2\xAD\x88\xAE\x3B\xAD\xE5\xAD\xF5\xA9\x33\xAC\xAD\xAA\x74\xAC\x36\xAC\xC5\xAD\x38\xAC\xA9\xAD\xDD\xAA\xEF\xAD\xDF\xAA\xC2\xAB\xE1\xAA\xCD\xAD\xE3\xAA\x35\xAE\x84\x6E\xA6\x9D\x83\xA9\x43\xAE\x63\xAE\x99\xAD\x65\xAE\x9B\xAD\x5C\x8B\x73\xA6\x27\xAE\x1C\xA9\x0F\x9C\x71\xA7\x66\x9F\x73\xA7\x1F\xA6\x75\xA7\x21\xA6\x45\x85\xDE\x8A\x79\xAB\x34\xA3\x7A\x92\x86\x88\x37\xA3\x09\x01\xDB\xAD\xCD\xAE\x74\x81\x5B\xAD\x36\xAD\x64\xAB\x49\xAE\xB1\xA4\xB0\xAC\xAC\xA1\xB2\xAC\x74\x9E\x72\xAE\x55\xAB\x74\xAE\xAA\xAD\x76\xAE\xC1\xAB\x78\xAE\xFF\xAA\xF3\xAD\x6B\x6E\x5E\xAB\x1D\xAA\xE5\x34\xA0\xAE\x55\xA6\xA2\xAE\x5D\xAD\xB3\xAB\xF0\xAA\xA0\xAD\x8A\xAE\xF3\xAA\x8C\xAE\xF5\xAA\x8E\xAE\xF7\xAA\x90\xAE\xFB\xA9\xED\xAD\xFD\xA9\x94\xAE\x10\xAE\x96\xAE\x12\xAE\x6E\xAD\x7B\xAE\x15\xAE\x30\x89\x23\xAC\xA5\xA4\xE2\xA7\x74\x63\x36\x89\xD3\xAE\xC9\xAB\x34\xAD\x5C\xA8\x4B\xA7\xBB\xAD\x95\xAB\x4E\xAB\x97\xAB\xD4\xAA\x32\xAC\x6E\xAE\xF8\xAB\x15\xAC\x71\xAE\x2B\xAE\x77\xAC\xAF\xAE\xFB\xAA\xB1\xAE\xFD\xAA\xE5\xAE\xC3\xAB\x7A\xAE\xE5\xAB\x7C\xAE\x0F\xAD\xD1\x5B\xB8\x97\x60\x9C\x0A\xAF\xE4\xAC\x0C\xAF\xC8\xA7\x5D\xA8\x85\xAE\xB0\xA4\x00\xA3\xDB\xAE\x9D\xA7\x72\xAC\xAA\xAE\x17\xAF\xD4\xA9\xD7\xAC\x2C\xAE\x56\xAB\x2E\xAE\x0F\xAE\xCA\xAD\x11\xAE\x1E\xAC\xE7\xAE\x20\xAC\x03\xAF\xFE\xA7\xAA\xAB\x12\x89\x10\xA4\x28\xAF\xED\xAB\x97\xAD\x35\xAD\x16\xA6\x2D\xAF\xBA\xA7\x4B\xAE\xBC\xA7\x4D\xAE\xBE\xA7\x2E\x8A\xC0\xA7\x51\xAE\x8D\xA3\xBB\xAC\xCB\xAE\x99\x9E\xCA\xAB\x0D\x0E\xF8\x97\x79\xAD\xBB\xAE\x82\xAE\x17\xAD\xEE\xAE\x8E\xAC\x5E\xAD\x2F\xAC\xF4\xAB\xD1\xAC\x14\xAF\x32\xAF\xD7\xAA\x65\xAD\xD9\xAA\xF9\xAE\xDB\xAA\x1B\xAF\xBF\xAB\xE3\xAE\x1C\xAC\x3C\xAF\x3E\xAC\x3E\xAF\x34\xAE\x9A\xAE\x84\x6E\xE8\xAB\x58\xA8\xEA\xAB\x02\x01\x45\xAF\x4F\xAC\x83\xAE\xA1\x92\x0F\xAF\x8F\xAC\x30\xAF\xB7\xA8\xDD\xAE\xCC\xA2\x58\xAC\x89\xAD\x05\xAD\x0F\x96\x9D\xAC\xEF\x95\x76\x9F\x6B\xA8\xB0\x63\x31\xAD\xEC\xAE\xAF\xA9\xD8\xAE\x68\xAE\xCF\xAA\x6A\xAE\x62\xAF\x6C\xAE\x41\xAA\x81\xAF\x68\xA3\x83\xAF\x0E\xAE\x85\xAF\x85\x97\x87\xAF\x33\x85\x71\xAB\xD4\xAE\xCF\x95\x5E\xA9\xF5\xA6\x78\xAF\x8D\xAF\x7F\xAA\xEF\xAE\xF2\xAB\x61\xAF\x60\xAD\x31\xAC\x62\xAD\xE7\xAD\x64\xAD\xAB\xAE\x66\xAD\x36\xAF\x1A\xAF\x2D\xAE\x75\xAE\xFD\xAE\x3B\xAF\xFF\xAE\x3D\xAF\x21\xAF\xB0\xAD\x23\xAF\x81\xAC\xC7\xA8\xBA\x9E\x7D\x98\x61\x8F\x87\xAC\xBF\x9E\x1D\xAE\xD2\xA8\x04\x64\x79\xAF\xAB\xAC\x7B\xAF\xFD\x95\x7D\xAF\x60\xAF\xCF\xAC\x93\xAF\x13\xAF\xAB\xAF\xA9\xAE\x66\xAF\xAE\xAF\x68\xAF\xAD\xAE\xEC\xAD\x92\xAE\xEE\xAD\x6D\xAF\xAC\xAD\x6F\xAF\x7D\xAC\x71\xAF\x99\xAE\xBA\xAF\xA5\x77\xBC\xAF\x26\xA9\xCB\xA8\xF0\x03\xE0\x9E\x5D\xAE\xAB\xA8\xD0\xA8\x89\xAC\xA3\xAF\xBC\xAE\xA4\xAA\x18\xAD\xCC\xAC\x1A\xAD\x08\xAE\xC2\xAE\x11\xAA\xC4\xAE\x1E\xA9\xC6\xAE\x20\xA9\xC8\xAE\x22\xA9\x76\xA7\x24\xA9\x0D\xA9\x26\xA9\xF2\xA8\x0A\x90\xC6\xA4\xE1\xA7\x81\x77\xE7\xAF\x01\x01\xC5\xAF\x32\xA9\xAC\xAC\xA2\x9E\xFD\xAC\xB3\xA9\x09\xAE\x71\xAC\x96\xAF\x20\xA4\x98\xAF\xBC\x9D\x3A\xAF\x77\xAE\xD9\xAF\x49\xAD\xDB\xAF\x4B\xAD\x73\xAF\x06\x73\xBD\xAC\x87\xA8\x3A\x81\x3C\xAE\xC9\xA4\xF7\x98\xC0\xAF\x51\x85\xA8\xAC\xA7\x5B\x02\xB0\xFD\xAF\x5B\xA8\x2B\xAF\x0E\xAF\x4A\xAF\xC1\xAE\x62\x9F\x6F\xA7\xF1\xAF\x13\xAA\x1F\xA9\x15\xAA\x21\xA9\x17\xAA\x8A\xAB\x47\x85\x56\xAE\x24\xAC\xA1\xAA\xC1\xAC\xF1\xA4\x1A\xAE\xD0\x98\x3C\x0E\x2D\xA9\xF6\xA4\x7A\xAD\xA4\xAF\xB1\xAB\xA6\xAF\xA4\xAE\xF1\xAE\x89\xAE\xBF\xAD\x8B\xAE\x3E\xAD\xD9\xAB\x67\xAF\xDB\xAB\x69\xAF\xF9\xAA\x6B\xAF\x3A\xAC\x1D\xAF\x3C\xAC\x10\xB0\xAE\xAD\xB8\xAF\xF4\xAD\x14\xB0\xDF\xA7\x86\xA9\xDB\x19\x0E\xA5\x75\x9F\xD9\xAD\x1F\x4C\xEC\xAC\x86\x94\xE7\xAC\x5F\xA4\xE9\xAC\x45\x61\xBE\x5E\x7E\x72\xE8\xAF\x78\x85\x5E\x95\x0D\x0B\x83\x72\x46\x2F\x5A\xAA\xBE\x70\xA6\x72\x58\x01\x79\x64\xF4\x2A\xE7\x91\x17\x65\x0D", -"\xA6\x3E\x94\xB6\x9F\x01\x01\x92\x72\x15\xAD\x44\xAC\x58\xB0\x8C\xA0\x9A\xA1\xDD\xA0\x0F\xA0\x6B\xA6\x42\x82\x91\x6A\xC4\x5C\x1F\x78\xCA\x9F\xF4\xA0\x1B\x5F\x74\xB0\x33\xAD\xD4\x17\x3D\xA0\xA0\xA0\x7B\xB0\x9D\x8E\xB1\xA0\x26\xA1\x97\x99\x5D\x0F\xD8\x9F\xB2\x86\x3F\x0A\x84\xB0\x59\xAD\xEF\x18\xEC\xA0\xCD\x6F\x79\x99\x52\xA0\x37\xA0\xE3\x70\x8C\x99\x92\xB0\x7C\xAD\x19\x1A\xF0\x9F\x82\x83\x95\x66\x98\xB0\xC9\xA0\x5D\x0F\xCC\x94\xB5\xA0\x9C\xB0\x96\xAD\x9E\xB0\x91\x99\x76\x82\xFC\xA0\x09\xA1\x99\x99\xA6\xB0\xCA\x82\x5E\xAC\xC6\x65\x67\x8E\xC6\xA0\xCF\x67\xC8\xA0\xCA\x94\xD1\x5B\xD3\xA0\xD5\x9A\x04\x64\xA7\xB0\xDC\xAD\x94\xB0\xF0\x94\xB4\xA2\xF2\x94\xDA\xA0\xAE\x94\xE6\xA0\x03\xA0\x13\xA0\x9D\x82\x9B\xB0\xB0\xB0\x56\xA5\xBB\x60\x90\x5C\xE4\xA0\x35\xA0\x28\x95\x8C\xB0\xB4\x99\xC3\x99\xD9\x9F\xC7\x5C\xC9\xB0\x78\xA5\xE2\x65\xC7\x83\xEE\xA0\xCE\xB0\x8B\xB0\x99\xB0\xD2\x99\xCD\x94\xBC\xB0\x9F\xAF\x83\x82\xD8\x99\xE0\x60\x3F\xA0\xA1\xA0\xC7\xA0\xCF\xB0\x99\xB0\xDF\x99\x90\xB0\x7F\xB0\xBE\x82\xE2\xB0\xF1\x60\x05\xA1\xDA\xB0\xEA\x99\x7A\xB0\x6C\x82\x19\x5F\x0B\xA1\xDD\x82\x02\x63\xDF\xB0\x0B\xAF\x56\x94\x2E\xAD\x14\x86\xAD\x82\xCE\x84\x93\x62\xF8\xB0\x29\xAF\x41\xAB\x0A\x67\x90\x6A\x0F\x86\x91\xB0\x80\xB0\x71\xA0\x89\xA5\x82\xB0\x0D\x61\x00\xB1\x46\xAF\x04\x62\xC7\xA8\x7B\xA0\xF9\x67\xF6\x82\xA6\x99\x89\xAF\x4B\x8B\xB5\x9F\x86\xA0\x27\x01\x9F\x72\x75\xB0\xBF\xAC\xB1\x96\x6F\x65\x8D\xA0\xB2\xA0\x6D\x60\x5B\x99\xFF\x99\xB9\x5C\x07\xB1\x96\xA0\x6E\x82\xE9\x9F\x93\x62\x19\xB1\x85\xB0\xDB\x19\x87\xB0\xD3\x9F\xC2\xB0\xF4\x94\xF1\xB0\x89\x99\xA5\xA0\x6C\x83\x0A\xB1\x28\xB1\xD5\xB0\x67\xA5\x98\x65\xAC\x85\x75\x83\x06\xA1\x51\x82\xFD\xA0\xB4\x85\x34\xB1\x02\x63\x29\xB1\x93\xB0\x59\x82\xC6\x94\xA0\xB0\x1B\x6A\xA2\xB0\xB7\xB0\xA4\xB0\x8C\x99\x41\xB1\x9D\xB0\xBE\xB0\xC3\x85\xAB\xB0\x47\xB1\x01\x95\x11\x0E\xAE\xB0\x74\xA0\x9E\x72\x36\xB1\x6F\xA5\xFA\xA0\x9D\x83\xAC\xB0\xC6\xB0\xBF\x5E\x4A\xB1\x56\xB1\x1A\xA0\x81\x66\xD9\xA0\xE5\xB0\xB5\xB0\xE7\xB0\xA3\xB0\xC7\xB0\x3F\xB1\x04\x64\x4B\xB1\xA8\xB0\x4D\xB1\xE8\x85\xFE\x94\x17\x92\xF0\xB0\xDC\xA0\x31\xB1\xDE\xA0\xEC\x85\x5D\xB1\xEC\xB0\xBC\x99\xF2\x85\x63\x6A\x3B\xB1\x9A\x82\x3D\xB1\x69\x6A\x67\xB1\x3F\x0A\x69\xB1\xBD\xB0\x43\xB1\xE1\x83\xD9\x99\xC1\x82\x79\xB1\xF1\xA0\x5B\xB1\xE9\xB0\xDA\x86\x7E\xB1\x5E\xB1\xBC\xA5\x81\x66\x0A\x86\x50\xB1\x7B\x99\xE0\x67\xE8\x83\x7E\xB0\xB6\x5C\x07\xB1\x1A\xAA\x5D\xA0\x15\x86\x0C\xA1\x18\xB1\x95\xB1\xC1\xA5\x12\x7D\x18\xA1\x23\xB1\xCF\xA3\x04\x9A\x6C\xA5\x7D\xB1\x9A\xB1\xB4\x7B\x7A\xA0\x73\x66\x7C\xA0\x9F\x6A\xD0\xB0\x4C\x95\x9D\x61\x9B\x6D\x3D\x78\x7F\xB1\xD2\x9B\xE2\x5A\xB7\x72\xBD\x2B\xA4\xA4\xDA\x93\x6A\xB0\xDC\x59\x79\x60\x28\x2B\xAA\x72\xCA\x6C\x3D\x78\xBF\x00\x1B\xA1\x58\x6C\xEE\x89\x98\x5B\x57\xB1\x7A\x68\xA7\x72\xC2\x0A\x68\x20\xCB\xA6\x3B\xAE\xCA\xA8\x5E\x0D\x05\x36\x9D\x81\xBE\xAC\xC9\xA8\x1B\x65\xB4\x9F\x61\x92\x72\xB0\x00\x00\xB4\x72\x54\xB0\xEE\xA4\x42\xAE\xBF\x2D\xBD\x9F\xAA\xB1\x5A\x99\x08\x91\xC4\x69\x11\xA1\x3F\x0A\xD4\xB1\xF6\xAC\x39\xA8\x0D\x0E\x62\x99\x54\xB1\x01\x01\xE0\xB1\x1A\xB1\xE1\xB0\xA0\x99\xFA\x69\x67\x5F\x8F\xB1\xF3\x9F\x01\x6A\x1D\xA1\x03\x6A\x27\x01\xE7\xB1\x2A\xB1\xA9\xB0\x76\xB1\xB9\x94\x97\xB0\x85\xB1\x08\xA1\x5B\xB1\xB4\xA0\xE5\xB1\xD3\xB1\x8B\xB1\x60\xA9\xBA\x0B\xF1\x9F\xED\xB1\xD1\xA0\xC0\xA0\xA3\xB1\xA3\x68\xD4\xA8\x8F\x83\x4F\xB1\xF9\xB1\xE7\xA0\xAD\xB0\x8C\x99\xF3\xB1\x42\xB1\xE9\xB1\x82\xB1\xE2\x94\x0E\xA0\x00\xA0\xA2\xA0\xB6\xB0\x51\xB1\xD2\xA0\x0E\xB2\xFF\xB1\x6D\x6A\xD8\xA0\x1C\xA0\xAD\x60\x0B\xB2\xC5\xB0\xBF\xA0\xDF\xA0\x06\xB2\xB3\x72\x1B\xB2\xB8\xA0\x38\xB1\xBC\x60\xBE\x99\x6F\xB1\xC4\xB0\x43\xA0\x8A\x99\xBF\x83\xF0\xB1\xFD\xB0\xDF\xB1\x26\xB2\xC3\xA0\x28\xB2\xCB\x99\x78\xB1\x2B\xB2\xF0\xA0\xFA\xB1\x22\xB2\x5D\x0F\xDD\xB0\xB5\xA0\x0F\xB2\x4C\xB1\x81\xB1\xB1\xB0\xFB\xA0\x03\xB2\x7B\xB1\xDA\x83\x24\xB2\xA5\x68\x33\xB2\xD7\xA0\x4F\xA0\xEE\xB0\xE3\x83\x20\xB2\x2D\xB2\x32\xB1\x0D\x86\x92\xB1\x05\xB1\xF2\xB1\x95\xB1\xB3\xAD\xF5\x99\x98\xB1\xF6\xB0\x04\x64\x3F\xB2\x6A\xB1\x87\x8F\x9C\xB1\xD5\x8A\x80\xA6\x0D\x61\x5B\xB2\x80\xB1\xCE\xB1\x43\x72\x5B\xA5\x47\xB2\x02\x01\x62\xB2\xE0\xB0\x6E\x9F\x42\xAC\x86\x83\x0D\x9A\x12\xB1\x8E", -"\xA0\x58\x95\x38\x59\x7A\x0A\x31\xA4\xD8\x60\xBC\x72\xCE\x09\x8D\x23\xC0\x72\x60\x1A\xE7\x91\x7A\x85\x73\x2C\x99\x20\xC3\xA9\xB7\xA5\x9A\x72\xCB\x72\x06\x01\xCD\x72\xA1\x61\x5B\x64\x27\x01\xD2\x72\x0F\x86\xD4\x72\x6D\x68\x98\xAE\x1E\x1B\xCC\x8A\x10\x6F\xDA\x72\x63\x68\xE1\x72\x39\x69\x09\x01\x92\xB2\xAC\x7C\x8C\x7A\xE5\x72\xC0\x81\x00\x73\x16\x86\x77\x85\x9D\xA5\x09\x01\x9C\xB2\x30\xB0\x41\x9B\x08\x73\x4A\x91\x53\x79\x3B\x0E\xE9\x72\x56\x83\x28\x7D\x23\x83\xF6\x84\xF2\x81\xFC\x72\x86\x47\xFE\x72\x2D\x9E\xA5\xB2\x63\x68\xB3\x3F\x23\x83\x04\x73\xD8\x93\xB9\x9A\x53\x0D\x91\x90\x16\xAE\x2C\x83\x82\xB2\x03\x01\xC1\x00\xCE\x72\x99\xA5\xCB\x6B\x63\x68\x23\x6E\x23\x83\xA4\xAB\x2E\x90\x8E\xB2\x9B\x78\x66\x5C\xC3\x00\x63\x68\x1F\x00\xAB\xA5\x3E\x94\xCB\xB2\x2C\x6B\x52\x95\xA0\x6C\x98\xB2\xBB\x87\xBE\x5E\x3E\x0E\xC0\x00\xCE\x69\xB5\xAE\x31\x00\xE2\x7C\xF8\x61\xC0\x81\x7E\xA5\x08\x83\xBD\xB2\x38\x62\x56\x99\x73\x72\xA5\xA6\x09\x36\x5B\x96\x44\x87\xF8\x5B\x6E\x01\x09\x36\x3F\x63\x3B\x0E\xC2\x00\xC1\xB2\xFA\x0E\x5F\xB2\xAD\xA6\x1C\x4E\xE2\xB2\x79\xA9\x72\x50\xE5\xB2\x21\x10\xE8\xB2\x0F\x8B\xB3\x08\xC4\xB2\x26\x91\xC6\xB2\xCA\x78\xC8\xB2\xCA\xB2\xEE\xB2\xC1\x7D\xFD\x05\x2A\x4A\xE6\x72\xF5\xB2\x8E\x11\xF7\xB2\x72\x50\xB3\x08\xCE\xB2\x6C\x6B\xD0\xB2\x90\x68\xD2\xB2\x14\x88\xD4\xB2\x13\x6B\x3E\x9B\x67\xAC\x1F\x4C\xF2\xB2\x04\xB3\x71\xA1\xA9\x95\xF6\xB2\x19\x01\x09\x36\x7A\x0A\x8C\xB2\x7D\x2C\xDA\xB2\x8D\x2C\x65\x90\x80\xB2\x96\xB1\x5D\x0F\xA4\x06\x6B\x64\x22\xB3\x9C\x8A\x7E\xA6\x06\x01\xA4\x8A\x3B\x83\xDB\x64\xA5\x64\xDD\x64\x56\x09\x35\x24\xBB\x1B\x73\x00\x8B\x68\xD7\x5A\x17\x9A\x00\x00\x48\xA5\xA2\xA9\x3F\x0A\xF4\x7C\x7E\x92\x74\x64\xFA\x02\x3F\x0A\xDC\x00\x6E\x63\x34\x68\x7D\x1B\xC0\xA5\x7F\xA5\xC5\x00\x20\x8F\x3B\xB3\x58\x61\x3D\xB3\x24\x02\x0B\x9A\x42\xB3\x3F\x59\x47\x61\x4B\x64\x08\x6E\x27\xB3\x95\xA5\x38\x59\xF2\xAC\x11\x8B\x29\x5D\xD0\x29\x10\xB2\x94\xA7\x98\xAD\xEA\xAF\x5E\xAF\xC9\xAF\xF0\xAE\x5F\xAD\xF2\xAE\x42\xB0\xF4\xAE\x44\xB0\x95\xAC\x46\xB0\x97\xAC\x48\xB0\xBD\xAB\x4A\xB0\x79\xAC\x4C\xB0\x7B\xAC\x4E\xB0\xCC\xAD\x12\xB0\xCE\xAD\x89\xA6\x34\x73\x09\xAD\x51\xAA\x9D\x9C\xD3\x9B\x4C\xA1\x7F\xA9\x4F\x91\x10\xAD\xB5\xAD\x01\xAE\xA7\x5B\x58\xB3\x40\xB2\xB2\x7E\xDE\xAD\xA1\xAE\xBE\xAE\xE1\xAD\xAF\x9C\xE3\xAD\xD5\xAB\x3C\xAD\xD0\xA7\x64\xB3\x8D\xAE\x66\xB3\xA6\xAD\xB0\xAF\x43\xAD\x6A\xB3\x45\xAD\x6C\xB3\x47\xAD\x6E\xB3\xF2\xAD\x50\xB0\x6B\x6E\x2F\xAA\x23\x8C\x76\xB3\x45\x8B\x29\x84\x47\x8B\x2C\xAD\x42\x84\x76\xA1\x4E\x99\xB1\x95\x10\xA4\x7F\xB3\x5C\xB2\x81\xB3\x7E\xAD\xCA\xAC\x2C\xAF\x8F\xAF\x9D\xAD\x3E\xA4\x87\xB3\x91\xAC\xF3\xAE\x2E\xAB\xF5\xAE\x30\xAB\xC3\xAD\xBB\xAB\x68\xB3\xDD\xAB\xB2\xAF\xE2\xAE\xB4\xAF\x0F\xB0\xB6\xAF\x70\xAF\x97\xB3\x3F\xAF\x54\xAE\x6A\xA6\x4E\xAD\xA2\x78\x57\x99\x79\xB0\xBC\x7D\xA1\xAC\x53\xAD\x55\xAD\x26\x0C\x0D\x61\xA5\xB3\x63\xB2\x5A\xB3\x48\xAF\x30\xA6\x0E\xAC\xD9\xAE\x2F\xAF\x70\xAC\x55\xAC\x29\xAE\xDE\xAE\x19\xAF\x90\xB3\xB8\xB3\xB0\xAE\xD7\xAF\xF0\xAD\x95\xB3\x79\xAE\x01\xAF\x22\xAF\x40\xAF\x57\x84\x37\x59\x73\xAD\xFC\x03\xE7\x7D\x64\xAC\xEA\x7D\xC4\xA1\x77\xAF\x98\x29\x3C\xB0\x5C\xAD\x5F\xAF\x5F\xB3\xA8\xAF\x61\xB3\xAA\xAF\xC0\xAD\xAC\xAF\xC2\xAD\xF7\xAE\x41\xAD\x8F\xB3\x68\xAD\x91\xB3\x6A\xAD\x93\xB3\x6C\xAD\x00\xAF\x8E\xAD\x14\xAE\xC0\xB3\x7B\x9C\x92\xAD\x5A\xAF\x93\x62\xCC\xB3\x6A\xB2\x46\x78\xCF\xB3\xCC\xA9\x25\xB0\x1A\xA9\xEF\xAF\x27\xAA\x12\xAA\x29\xAA\x2B\xB0\x2B\xAA\x22\xAD\x9C\xAC\x2F\xB0\xB6\x7D\xFE\xA1\xFF\x00\x00\xA2\xA9\xA9\xA9\x58\x5C\xAF\xD6\xAE\x49\xAF\xAB\xB3\x86\xAE\x9E\xAD\x40\xB0\xA6\xAE\xB0\xB3\x93\xAC\x8B\xB3\xF6\xAE\x8D\xB3\xEA\xAD\xD3\xAF\x91\xAE\xFB\xB3\xC8\xAD\xBA\xB3\xE4\xAE\xDE\xB3\xE6\xAE\xBE\xB3\xCE\x9B\x25\xAD\x16\xA2\x70\xA1\xD3\xAD\xFA\x9B\xD5\xAD\x41\xAF\xBF\xB1\x1E\xB0\x1B\x5F\x07\xB4\xF9\xB0\x47\xAF\x0D\xAF\x84\xAE\x20\xB4\x2E\xAF\x85\xA3\x0E\xB4\x83\xAB\x10\xB4\x6A\xAB\x12\xB4\x6C\xAB\x2D\xB0\x6E\xAB\x16\xB4\xF8\x73\xF7\xAD\x72\x91\xF9\xAD\x26\xA9\x8E\xA2\x1C\xB0\xCE\x9C\x47\xA2\x7E\xB3\xED\xB3\xD7\xAE\xD1\xB3\x90\xAF\x4A\xAE\x21\x92\x50\xAB\x39\x93\x70\xAE\x35\xAF\xDF\xAE\xFC\xAB\x51\xAF\xBC\x81\x52\xAE\x86\x7F\x1F\xAB\x36\x98\x17\xAE\x99\x04\x75\xAA\x31\x9F\x41", -"\x8A\x5D\x0F\xF4\xA6\xA4\x9C\x3F\x0A\x3F\xB4\x01\xB1\x41\xB4\x23\xB0\x43\xB4\x5C\xB4\xAC\xB3\xFD\xA6\xAE\xB3\xBE\xAD\xF3\xB3\x43\xB0\xC1\xAD\x3F\xAD\xF7\xB3\xC4\xAD\xF9\xB3\xA8\xAD\xDA\xB3\x1C\xAF\xDC\xB3\xB2\xAE\x1F\xAF\xB4\xAE\x70\xB3\xB6\xAE\x52\xB0\x51\xB4\x14\x9D\xFA\xAD\x43\x9D\x11\xA9\xE0\x79\x00\xB0\xD1\x29\x5A\xB4\x1F\xB4\x7A\xB4\x21\xB4\xAD\xB3\xA5\xAE\xE4\xAD\x25\xB4\xA2\xAD\xB2\xB3\xA4\xAD\x29\xB4\x8F\xAE\x2B\xB4\xFA\xAE\xD5\xAF\xFC\xAE\x2F\xAE\x95\xAE\x31\xAE\x97\xAE\x9C\xAF\x9F\x85\xB3\xA2\x21\x36\xBE\xAA\x92\xB4\x5B\xAE\x19\x9D\xF4\xA8\x46\x6D\x47\x9D\x05\xB4\x02\x63\x75\xB4\x0D\xB1\xD5\xAE\x82\xB3\xED\xAE\x84\xB3\xA3\xAE\x86\xB3\x9D\xB4\x88\xB3\xA7\xAE\x3D\xAD\x81\xB4\x45\xB0\xD1\xAF\x47\xB0\xA5\xB4\x6A\xAF\x87\xB4\x6C\xAF\x2F\xB4\x6E\xAF\xBC\xB3\xDA\xAF\x33\xB4\xDC\xAF\xE2\xB3\x70\x6B\x7E\xAE\x36\x89\xBA\xB4\x7A\xAF\x5D\xAF\xBF\xB4\x3E\xB0\xC1\xB4\x23\xB4\x9E\xB4\x62\xB3\xB1\xB3\x27\xB4\xB3\xB3\x83\xB4\xB5\xB3\xCA\xB4\x49\xB0\xCC\xB4\x4B\xB0\x89\xB4\x1E\xAF\x31\xB4\x20\xAF\xE0\xB3\xB9\xAF\xD4\xB4\x58\x7D\x9C\xAE\xD7\xB4\x98\xB4\xD0\xB3\x2C\xAC\xD2\xB3\x46\xB4\x27\xB0\x68\xAB\x49\xB4\x85\xAB\x4B\xB4\x87\xAB\x4D\xB4\x89\xAB\xF7\xAF\xE0\x84\xB9\xAE\x12\xAD\x04\x64\xD8\xB4\xC6\xAF\xDA\xB4\xBA\xAD\x0C\xB4\x25\xAA\x47\xB4\x00\xAD\xFB\xB4\x02\xAD\xFD\xB4\x04\xAD\x14\xB4\x06\xAD\x4F\xB4\x21\x85\x9E\xAF\x40\xB4\xCE\xAE\x0D\x0E\xC8\x9D\x98\x7D\x74\xB4\xF4\xB4\x0B\xB4\x44\xB4\x4B\xAF\x5F\xB4\x4C\xAE\x61\xB4\x4E\xAE\xBF\xA7\x50\xAE\x67\xB4\x53\xAF\xAF\x6E\xE9\xAE\x78\x95\x1C\xB5\xE9\xAF\x26\xAB\x5D\xB3\x0A\xB5\x64\xAA\xD4\xB3\xB1\xAC\xD6\xB3\x82\xAF\x0D\xAE\x0D\xB0\x9A\xAF\x3C\x99\xAD\xB4\x9E\x97\x16\xB5\x76\xB4\x57\xA4\xD1\x5B\x79\xA3\xEB\xB3\x97\xB4\x2D\xB5\x62\xAB\x2F\xB5\x1F\xB5\x26\xB0\x19\xA6\x28\xB0\x64\x9F\xC5\xAE\xF7\xA1\xC7\xAE\xC1\xA7\xC9\xAE\x1E\xAB\x63\x9E\xB7\x97\x00\xA8\x41\xB5\x06\xB5\x03\xB0\xC7\xAF\xCC\xA1\x30\xB5\xD3\xAB\x7F\xAF\xDF\xA8\x0A\xB0\x91\xA4\x0C\xB0\x78\x9E\x0E\xB0\x30\xB4\xD0\xB4\x11\xB0\xD2\xB4\x13\xB0\xDD\xAF\xD7\x9B\x1A\xA8\x01\x93\xA4\xB3\x1D\xB5\xD1\xAB\x59\xB5\xBC\xAD\x5B\xB5\x99\xAB\x65\xAF\xE8\xAD\xA3\xB4\xF8\xAE\xE6\xB4\x69\xB3\xE8\xB4\x6B\xB3\xEA\xB4\x4D\xB0\x63\xB5\x4F\xB0\xEE\xB4\x51\xB0\x67\xB5\xE3\x6E\xE3\xAC\xBB\xB4\x83\x7C\x4F\x9E\xF4\x43\xF3\xB4\x43\xB5\xD0\xAB\xEB\xAF\x81\xAD\xED\xAF\x26\xAE\xF9\xB4\x85\xAD\x0E\xB5\x1F\xAD\x10\xB5\x21\xAD\xFF\xB4\x23\xAD\x01\xB5\x92\x6F\x57\xA8\x53\x31\x87\xB5\x1D\xB4\xBD\xB4\x8E\xAF\x9A\xB4\x45\xB4\x6D\xA7\x8E\xB5\x28\xAE\x90\xB5\x87\xAD\x92\xB5\x84\xAF\x12\xB5\x86\xAF\x14\xB5\x99\x85\x7F\xA0\x75\x89\x0F\xA4\x23\xAB\x42\xB5\x9B\xB5\xA8\xB3\xB9\xAD\x05\xAE\x05\xB0\x25\xAE\x53\xAC\x32\xB5\xDC\xAE\x34\xB5\x97\xAF\x36\xB5\x60\xB5\x38\xB5\x97\x9C\x3A\xB5\x97\x9E\xB7\x61\x56\xAF\x28\xA6\x7F\xA5\x74\xB2\x1E\xA7\x05\xB5\x6C\xB5\x8A\xB5\x06\xAE\x8C\xB5\xB6\xB5\x08\xB0\xD5\xB3\xA3\xB5\x0C\xAE\xA5\xB5\x99\xAF\xA7\xB5\x9B\xAF\xA9\xB5\x18\x77\x5B\xA9\x59\xAE\x07\x0E\xBB\x9E\xA6\x17\x94\xB4\xC1\xAF\x59\xA9\x13\xB3\xC7\xB5\x88\xB5\x0C\xAC\x45\xB5\x9E\xB5\x20\xB5\x89\x92\xCD\xAF\xF4\xB3\xCF\xAF\x73\xB5\xC8\xB4\x67\xB3\x76\xB5\xB7\xB3\x38\xAF\xB3\xAF\xA9\xB4\xFE\xAE\xAB\xB4\xFF\xB3\x1D\xB3\x8E\xB4\x80\xB5\xC6\x6F\xDF\xAF\x83\xAC\x45\x0D\xDD\x93\x8A\x8F\xDF\x93\xB5\xB4\x82\xA4\x41\xAE\x1C\xB1\xCB\xB3\xC8\xB5\xE3\xB5\xF6\xB4\x5D\xB4\xDA\xAE\xB7\xB5\x31\xAF\x5D\xB5\xE3\xA8\x5F\xB5\xB0\x9E\xBD\xB5\x5F\x9D\xBF\xB5\x64\x8A\xF9\xAF\xFA\xB5\x0F\xA5\x85\xAC\xCE\x98\x36\xB0\xF9\x98\x0B\x94\x3D\xB4\x03\xB6\xE1\xB5\x2A\xAC\x05\xB6\x19\xAD\x2D\xAC\x83\xAD\xA1\xB5\xC3\xAE\x4A\xB5\xF2\xAF\x4C\xB5\xF4\xAF\x4E\xB5\xF6\xAF\xCA\xAE\xF8\xAF\x16\xB0\x4C\xA9\x1B\xB1\x3F\xA7\xA3\xAC\x1B\xB0\x18\xB6\x6B\xA2\xA7\xAC\x01\xB6\x51\xA9\x1C\xB6\xB0\xB5\x5B\xB3\x2E\xB5\xDB\xB4\xEF\xB3\xA7\xAF\xCB\xAF\xA9\xAF\x63\xAF\xCE\xAF\x15\xAF\x73\xAC\x34\xAF\xFA\xAB\x64\xB4\xD8\xAC\x66\xB4\x48\x86\x68\xB4\x97\x87\x02\xB4\x50\x9F\x2D\xB6\xC8\xA8\x18\xB0\x33\xB0\x55\x9F\x35\xB0\x76\xAD\x3E\xB5\x5D\x0F\x39\xB0\x5E\x94\xB9\xB4\x04\xB6\x3C\xB6\x5E\xB3\x3E\xB6\x11\xAF\x6B\xAE\xE7\xB5\x80\xB4\xF5\xB3\x82\xB4\x74\xB5\xF8\xB3\x47\xB6\x37\xAF\xE1\xAE\xDB\xB3\xCE\xB4\xD8\xAF\x7C\xB5\x6F\xB3\x65\xB5\x0A", -"\xA4\xB7\xAE\xAD\xA7\xC1\xB5\xA5\xB1\xE6\xAC\xFB\xA2\xF0\xAC\x52\xB6\xEB\xAC\x53\xA9\x98\x8A\x5C\xB0\xB4\xB4\x5C\xA0\x01\x9C\x85\xA0\x39\xB3\x8D\x5C\x55\xB2\x77\xB0\xAC\x04\x1E\xB1\xDA\xB1\x20\xB1\xDC\xB1\xB2\x69\x5F\xA0\x0D\x61\x8E\x68\xD5\xB1\x1D\x77\x25\xB1\xF5\x9F\xBA\xB0\x3F\x0A\x8D\xB6\xE1\xB1\x2B\xB1\xED\xB0\xF4\x5B\x88\xB0\x15\xB2\xE6\xB0\xDB\xB0\x65\xB1\xFF\x00\x8F\xB0\x89\xB1\x82\xB6\x75\xB1\x6C\xB1\x39\xB1\x63\x67\x4E\xB2\xBE\xA0\x2E\xB2\x68\x67\x8C\x99\x94\xB6\xE8\xB1\x3D\x17\x9F\xB0\xBA\xA0\xA1\xB0\xA6\xB6\xF2\xB0\xBE\x83\xBF\x85\x67\xB2\x01\x01\xAB\xB6\xF4\xB1\x6B\xB1\x5E\xAC\xC5\xA0\x0C\x84\x73\xAA\x39\xB2\x0C\xB2\x5B\xB1\x53\xB1\xD3\xB0\x02\x01\xB7\xB6\x59\xB3\x17\x17\x3D\xA0\xE3\x94\x62\xB1\x8A\xB0\x30\xB1\xA6\x99\xE9\x94\x30\xB2\x5F\x83\xA1\xB6\x08\xB2\xBF\xB0\xB0\xB4\xC1\xB0\xC9\xB6\xE5\x94\x70\xB1\xCC\xB6\xF8\x94\xB5\xB6\x00\x00\xC4\xB6\x80\xB3\xAD\xB6\xB8\x94\x9D\x5D\xCD\xB0\x2E\xB1\x87\x99\xCB\xB6\x1F\xA0\xEC\x65\xAA\xB6\x49\xB2\x0F\x5B\xD8\xB0\xB2\x82\x38\xB2\x07\xA1\xBF\xB6\x3B\xB2\xF3\xA0\xCE\xB6\xC1\x83\x93\x62\xDC\xB6\xA6\xB3\xDE\xB6\xEA\xB1\xE3\xB0\x84\xB1\xEC\xB6\x3C\xB1\x09\xA1\x88\xB1\xA9\x99\xD0\xB6\x8E\xB6\x41\xB2\xCA\xB0\xCA\x96\x90\x01\xEF\xB0\xE2\xB6\xB2\x99\x1F\xB1\x82\x6A\xF5\xB0\x3B\x95\xF3\xB6\x83\xB6\x0F\xA1\x58\xB2\x0B\xB7\x02\x63\xF4\xB6\xCD\xB3\xB0\xA7\x03\xB1\xF8\x83\x93\xB1\xFB\x82\xD4\xA8\xFE\x83\x7F\xA5\xCF\x83\x8C\xB6\x1F\x78\xA6\xB1\xAE\x83\xA8\xB1\x2A\x86\xD4\x69\xC4\xA5\x29\x74\x10\xA4\xFF\x82\x1D\xB6\x7F\xAD\xAA\xB3\xE4\xB5\x47\xB5\xBB\xA7\x49\xB5\x1B\xA6\xF6\xA1\x4F\xAE\x8B\xA3\x52\xAF\xC2\xA7\xC6\x6D\x99\xB3\xA1\xA9\x28\xAD\x0C\xAD\x78\xB3\x0E\xAD\x70\x90\x50\xA1\x7C\xB3\x66\xA9\x1B\x5F\x27\xB7\x39\xB6\x0A\xB4\x6D\xB5\x46\xB5\x0D\xB4\x23\xB6\xF0\xAF\x25\xB6\x2A\xB0\xF3\xAF\x2C\xB0\xF5\xAF\x2E\xB0\x13\xA2\xCF\xAD\xA5\x95\xD1\xAD\xA6\xA6\x38\xB7\xFA\x9B\xA4\xA9\x6F\x90\x4D\xAD\xA1\xB3\xA8\xA9\xBA\xAE\x93\x62\x41\xB7\x00\xB7\xA7\xB3\x3A\xB6\x44\xB5\x5C\xB6\x6E\xB5\x10\xAF\xBD\xAD\x24\xA8\x9F\xB4\xE6\xAD\xE9\xB5\xAD\xAF\x45\xB6\x75\xAC\x85\xB4\xC6\xAD\x2D\xB4\x93\xAE\xF1\xB5\xB5\xAF\xF3\xB5\xB7\xAF\x7E\xB5\xA7\xAB\xF7\xB5\xA0\xB3\x23\xA6\x4F\xAD\xC5\xB3\x7F\xB2\xAC\x86\xD1\x95\x1B\xB4\x09\x01\x5D\xB7\x95\xB6\xDD\xAD\xB1\xB5\x21\xAE\x09\xB5\x45\xB7\x0B\xB5\x47\xB7\x0F\xB4\x29\xB0\x11\xB4\x4B\xB7\x13\xB4\x94\xB5\x15\xB4\x96\xB5\x17\xB4\xDF\xA9\xE3\x90\xD1\x78\xA3\x8B\x55\xB6\xDF\x63\x78\xAD\x22\x75\xA7\x5B\x81\xB7\xAC\xB6\x09\xB4\x42\xB4\x7C\xAF\x63\xB7\x7E\xAF\x09\xB6\x80\xAF\xB9\xB5\x0B\xB0\xBB\xB5\x0E\xB6\xD3\xB5\x39\xB5\xD5\xB5\xF9\x86\x89\xB6\xE5\xA1\x92\x83\x3F\x0A\x9C\xB7\xB8\xB6\xDC\x7B\x08\xB5\xB3\xB5\x32\xA1\x06\xB0\x2F\x99\x21\xB5\x4D\xAF\x23\xB5\x4F\xAF\x94\x8B\x49\xB6\x13\x8F\x4B\xB6\xBD\x87\x6A\xB4\x0B\xA6\x75\x73\xB4\xAD\x1C\xAA\x2B\xB5\x27\x01\xB1\xB7\xC5\xB6\x8B\x79\x43\xB7\xC9\xB5\xB4\xB5\xCB\xB5\xAF\xAC\xA3\xB7\x5C\xB5\xA5\xB7\x5E\xB5\xA7\xB7\xF7\x9E\x0F\xB6\xC0\x9D\x07\xAD\x50\xB7\xE1\x0E\x15\xA2\x22\x8C\x37\xB7\xB0\xB1\x4D\x91\x33\xAA\x7A\xB3\x79\x7E\x96\xB4\xC9\xB7\xDD\xB6\x9E\xB7\x78\xB4\xA0\xB7\x87\xB7\x31\xB5\xCD\xB5\x33\xB5\xCF\xB5\x2A\xAE\x0D\xB6\xD6\xB7\xA9\xB7\xBE\xB5\xAB\xB7\xFC\x85\xC9\xA6\xF4\x5B\x52\x8C\xC8\xB1\xCD\xA6\x3D\xAE\xC3\xAA\x6F\xB4\xE4\x8C\x3C\x0E\xCF\x9C\x26\xB7\x5B\xB6\x86\xB7\x2B\xB7\x46\xB7\x48\xB5\xFA\xB4\x8B\xB7\x4A\xB4\x8D\xB7\x4C\xB4\x4D\xB7\x4E\xB4\x91\xB7\x45\x7E\xAA\x96\xEF\xA6\x19\xAE\x97\xB7\x1B\xAE\xF4\x9C\xE4\xB7\x02\xB8\xB5\xB7\xA6\xA1\xB5\xB5\xD0\xB7\xEC\xB7\xB8\xB5\xEE\xB7\xD7\xB3\xF0\xB7\x48\x9F\xD7\xB7\x7C\x9E\x11\xB6\x32\x7F\x90\xB4\x6C\x0D\x3A\xAE\x96\x75\xAB\x8E\xB3\xB4\x77\xB6\xCD\xB1\x19\xB6\xD3\x96\x16\xB8\x28\xB7\xA9\xB3\x24\xB0\xEA\xB7\x5A\xB5\xD1\xB7\x71\xB5\x0B\xB6\x16\xAB\xD8\xB3\xFA\xB3\x78\xB5\x92\xB3\x7A\xB5\x6D\xB3\x6D\xB6\x96\xB3\x75\xB7\xBF\xB3\xC2\xB7\x75\xB3\x37\xAE\x3B\xA7\xB4\xA2\x58\xAE\xF9\xB7\x17\xA7\x3A\x7F\x3E\xAE\x06\xAF\xC6\xAA\xDB\x55\x36\x89\xE5\xB7\xF5\xB6\xE7\xB7\xE7\xA7\x18\xB8\x74\xA2\x07\xB6\xD3\xB3\x1C\xB8\x0A\xB6\xD3\xB7\x0C\xB6\xD5\xB7\x21\xB8\xF2\xB7\x10\xB6\xF4\xB7\x18\x88\x33\x7A\x15\x97\x60\x9C\x52\xB8\x13\xB7\xCB\xB7\x9F\xB7\xC8\xAF\xA1\xB7\xCA\xAF\x5F\xB6\xCC\xAF\x60", -"\xB4\x23\x97\x62\xB4\x46\xB6\x3A\xB8\x86\xB4\xEF\xB5\xB9\xB3\x71\xB7\xBB\xB3\x73\xB7\xBD\xB3\x42\xB8\x72\xAF\x77\xB7\x58\x7A\x11\x0E\x8A\x7F\x9D\xAE\x3A\x6A\xB0\xB7\x17\xB8\x2A\xB7\x06\xB6\x7B\xB4\x22\xA8\x7D\xB4\x66\xB7\xE0\xB4\x26\xB4\xC6\xB4\x65\xB3\xEB\xB5\x8E\xB3\x67\xB6\xB1\xAF\x76\xB8\x6A\xB6\x78\xB8\x62\xB5\x7A\xB8\xD1\xB4\x7C\xB8\xD3\xB4\x4D\xB6\x14\xA3\x03\xB5\xEA\xAE\x03\x01\x67\xB8\x08\xB4\x69\xB8\xE8\xB7\x6B\xB8\x34\xB8\x6F\xB5\x36\xB8\x6D\xAE\x72\xB5\x6A\xB7\x72\xB8\x6C\xB7\x92\xB8\xD9\xB3\x94\xB8\x88\xB4\x6B\xB6\xDD\xB3\x40\xB8\xDF\xB3\x00\xB4\x02\xAF\x9C\xB8\xCD\xA3\x73\xB6\x19\xB7\xC7\x9D\xD0\xAE\x1B\xB5\xC8\xB7\x85\xB8\x33\xB8\x04\xB8\x88\xB7\x06\xB8\x8F\xB5\x08\xB8\xFC\xB4\x0A\xB8\xFE\xB4\x0C\xB8\x00\xB5\xD9\x72\xD1\x84\x06\x01\xA8\x88\x72\xB3\x0D\x61\xA1\xB8\x17\xB5\xBC\xB4\x84\xB7\x45\xAE\x03\xB8\x87\xB8\x9B\xB4\x7C\xB4\xC2\xB4\xAF\xB3\x8C\xB8\xA0\xB4\xE2\xB4\xA2\xB4\x90\xB8\x2A\xB4\x6D\xB7\xAE\xAE\x3C\xB8\xFC\xB3\x3E\xB8\x94\xB3\xB4\xB8\x32\xB4\x9A\xB8\x66\xB5\xF0\xB4\x31\x5D\x4B\xA9\x50\xB6\x34\xB6\x78\xA3\xFD\x9D\x61\xAE\x80\xB7\xC0\xB8\x79\xB4\xD8\xB8\x9F\xB5\x66\xAB\x89\xB7\x48\xB4\xC6\xB8\x0F\xB5\xC8\xB8\x11\xB5\x8F\xB7\x13\xB5\x0E\xB8\x3E\x7B\x8C\xAB\xDF\x92\x41\xB5\xD2\xB8\x3D\xB5\xD4\xB8\x60\xB7\x89\xB5\x1F\xB6\xEC\xAF\x21\xB6\xEE\xAF\xFB\xB8\x0D\xB5\xFD\xB8\x91\xB5\xFF\xB8\x93\xB5\xCA\xB8\x95\xB5\x2B\xB6\x8B\xAB\x12\x8E\x43\xAF\xAE\xB5\x08\xB9\x83\xB5\x5F\xB7\xCC\xB7\x0D\xB9\x8B\xB5\x0F\xB9\x8D\xB5\xC4\xB8\xA2\xB5\x13\xB9\xA4\xB5\x15\xB9\xA6\xB5\x01\xB9\xA8\xB5\x03\xB9\x9D\xAF\xAE\xA7\x5E\xB7\x3A\x81\x85\xB5\x9F\x09\x51\xB8\xF6\xB8\xE9\xB7\xC2\xB8\xEB\xB7\x0C\xB5\x1D\xAD\x1E\xB8\x35\xB5\xD1\xB5\x37\xB5\x60\xB8\xD8\xB7\x62\xB8\x56\x89\x5D\x8E\x49\x93\xF4\xB8\x06\x01\x1E\xB9\xD9\xB4\x1E\xB4\xF5\xB4\x20\xB6\xF7\xB4\xA0\xB5\x26\xB9\x24\xB6\x2F\xB7\x4B\xB5\x31\xB7\x4D\xB5\x33\xB7\x4F\xB5\x54\xAF\xDE\xA9\x14\xB1\xEA\x80\xAD\xB5\xC6\xA9\x00\x00\x48\xB9\x07\xB5\x4A\xB9\x1E\xB5\x38\xB9\x35\xB8\x5A\xB8\xA4\xB7\x3C\xB9\xBA\xB5\x3E\xB9\xBC\xB5\x40\xB9\x23\xB8\x42\xB9\x7C\x8D\x82\xB5\x32\xB0\xA1\xAF\x73\xB4\xBF\xB8\x31\xB8\xB2\xB5\x86\xB8\x4C\xB9\x58\xB8\xF8\xB4\x4F\xB9\x48\xB7\x51\xB9\x26\xB6\x53\xB9\x28\xB6\x55\xB9\x2A\xB6\x50\xB5\xEF\x72\x6C\xB2\x2E\xB6\x64\xB2\x0C\x0E\xDA\xB5\x2F\x2E\x56\xB4\xB7\x93\x1B\xB6\x5C\xB7\x36\xB9\xA5\xB8\x62\xB9\xA7\xB8\x64\xB9\xD2\xB7\x66\xB9\xA6\xB7\x68\xB9\xA8\xB7\x2C\xB9\xD4\xB5\x2E\xB9\xD6\xB5\xF9\xB5\x60\xAC\xE7\x89\x62\xAC\xFD\xB5\xDC\xB5\x00\xB6\xC2\xAF\xDF\xB5\x84\xB8\x73\xB9\x85\xB7\x56\xB8\xDF\xA2\x88\xB8\x2A\xAB\x8A\xB8\x2C\xAB\x67\xB7\xA8\xAE\x43\xB6\x33\xAF\xAC\xB8\xAC\xAE\xE3\xB8\xD4\xAF\x6F\xB7\xD6\xAF\xB2\xB8\x8A\xB4\xEC\xB4\x8C\xB4\x6F\xB6\xF6\xB5\xED\xB8\xBB\xAF\x4F\xB6\xF1\xA8\x07\x94\xA3\xA4\xA0\xB9\xB8\x8F\x8B\xB9\x02\x63\x5E\xB9\x56\xB5\xB4\xB7\x75\xB9\x0E\xB9\x4D\xB9\xFA\xB8\x79\xB9\x8A\xB7\x49\xB7\x8C\xB7\x27\xB6\x4C\xB7\x29\xB6\x4E\xB7\x19\xB9\xA0\xB2\x46\xB8\xA0\xAC\x21\xB0\x67\x8A\x5A\xAE\xF6\x98\x10\xA9\x89\xB9\x38\x59\x13\xA9\xF7\xA8\xD1\xB8\x8D\xB9\x58\xB5\xA6\xB8\x64\xB7\x70\xB5\xA9\xB8\x38\xB8\x9D\xAB\x74\xB8\x6E\xB7\xE5\xB8\x2E\xB4\x96\xB8\xCF\xB4\x98\xB8\x64\xB5\xEB\xB8\x70\xB6\x52\xB0\x82\xAC\x9C\xB9\xA1\x87\x28\xA9\x54\xB6\xFD\xAD\x73\xAB\x59\x9F\x6E\x8A\x59\xB6\x04\x64\xC7\xB9\xDA\xB9\xD5\xA8\x20\xAA\x62\xB7\xE6\xB9\xA2\xB7\x91\xB9\x37\xB8\x5C\xB8\x39\xB8\x20\xB8\xA8\xA3\x22\xB8\xAE\xA2\x24\xB8\x6D\xB9\x3C\xB5\x1F\xB9\x6B\xB2\x9F\xAC\x1A\x69\x55\xA9\x5E\xB0\xF0\xB2\x39\x90\xED\xAC\xB5\xA3\x55\xA1\xE8\xAC\x93\x85\x54\xB3\x3E\xB7\xF3\xAC\xA7\x5B\x0B\x83\xA5\xB9\xD6\xB8\xA7\xB9\x3C\xA4\xA9\xB9\x69\xAE\x2B\xAB\xC8\x74\x89\xB3\xD7\xAB\xDF\xB8\x78\x8F\xD6\xAC\xAE\xB8\x3B\xB8\xB0\xB8\xCD\xB4\xF0\xB9\x6C\xB6\xF2\xB9\x7D\xB5\xB6\xB8\x26\x91\x36\xB7\x55\xAE\x9B\xB3\x18\x84\x0D\xAD\xA5\xA9\xE7\xAB\x82\x95\x48\x90\xAE\xB5\x25\xBA\x42\xB7\x6A\xB8\xE5\xB9\x8F\xB9\xE7\xB9\xA8\xB8\x95\xAF\x0B\xBA\xEB\xB9\x0D\xBA\xC5\xA3\x0F\xBA\xD4\xA2\xD9\xB7\xD0\xB8\x51\xB7\x36\xB4\x27\xAD\xDF\xB7\x51\x86\x2A\xAD\x74\xA1\xEE\x9C\x71\xB2\x88\x85\xA3\xB3\x46\xBA\xE4\xB9\x50\xA2\x6C\xB8\xF0\xB3\x3F\xB6\xF2\xB3\x41\xB6\xE8\xB5\xAF\xB9\xD0\xAF\x6B\xB7\xB2\xB9\x33\xBA\x75", -"\xB8\x69\xB6\xB1\xB8\x37\xBA\xB3\xB8\x39\xBA\x6E\xB6\xF4\xB9\xBC\xB9\xB8\xB8\x75\xA1\x79\xB7\xC3\xB3\xA0\x73\x33\xB6\xBE\x7D\x9E\xA1\x1F\x9C\x62\xBA\x26\xBA\x83\xB3\xD7\xB8\x76\xB9\x2A\xBA\x91\xAF\x2C\xBA\x51\x7B\xC4\xB4\x8A\xB3\x8E\xB8\x8C\xB3\xE1\xB8\xA4\xB4\xB3\xB9\x2C\xB4\xEE\xB9\x70\xB7\x61\xB5\xF1\xB9\xFA\xB2\x99\xB8\x3B\xBA\xEF\xB4\x79\xBA\x5E\xBA\x10\x0E\xE5\xB3\x45\x2E\x3F\x9C\x7E\xBA\x7A\x77\x99\xB7\xF0\x88\x1B\x5F\x47\xBA\x31\xB9\x54\xB8\xD6\xA8\x85\xBA\xCB\xB9\x77\xB9\x4E\xB9\x2D\xB7\x07\xB8\xD0\xB9\x09\xB8\xD2\xB9\x8E\xB7\x17\xB9\x90\xB7\xD6\xB9\xB6\x7D\x04\xB4\x9A\xB7\xA5\xBA\x63\xBA\x63\xA4\x65\xBA\x5E\xB6\x65\xB7\xAC\xB9\xDD\xB8\x68\xB7\x6B\xBA\xEA\xB5\x6D\xBA\xAF\xAF\x6F\xBA\xED\xB9\x35\xBA\xE9\xB4\xB7\xB9\xEB\xB4\xE9\xB8\xED\xB4\x99\xBA\x7F\xB5\xBD\xB9\x58\xB7\x56\xB2\xFF\xA1\x22\xBA\x56\xB3\x24\xBA\xBB\xBA\xAE\xA4\xBD\xBA\x3F\xB0\x60\xB3\x41\xB0\x7F\xB4\x63\xB3\x8D\xBA\x28\xB4\x8F\xBA\x75\xB5\x91\xBA\xA6\xB4\xB5\xB9\xA8\xB4\x95\xBA\x38\xBA\x97\xBA\xF3\xB9\xCF\xBA\x98\xB3\x35\xB4\xDD\xB7\x3E\xBA\x4A\xA1\x76\x7E\xE1\xB7\x1B\xA2\x3C\xB4\x36\xB6\x8B\xA0\x3F\x0A\xA6\xBA\x82\xB7\x0A\xB9\x21\xB9\x06\xBA\x4B\xBA\x08\xBA\x3A\xB9\x0A\xAE\x93\xB9\xD4\xB7\x95\xB9\xF1\xB7\x97\xB9\xAA\xB7\x99\xB9\xDB\x85\x96\xAA\xC6\x9C\x55\xAA\xD8\xB5\x40\xA2\x65\x0A\x4D\xB8\xFF\xB5\x57\xB4\x26\xAC\xB5\x9B\xF9\xBA\x9D\xB7\xA3\xB8\x55\xB8\xCA\xB9\x23\xB9\xCC\xB9\x6F\xAC\x09\xBA\xE9\xB9\x4F\xBA\x32\xBA\xEC\xB9\xE4\xB8\xC9\xBA\x79\xB5\xCB\xBA\x7B\xB5\x75\xBA\x41\xB8\xEC\xBA\x43\xB8\x22\xA6\x01\xA0\x18\xAE\x19\x6C\xC3\xAC\xF2\xA6\x71\xB4\x96\xB4\x15\xBB\xB2\xB7\x20\xB9\x49\xBA\x64\xBA\x07\xBA\x6D\xB8\xBF\xBA\x2D\xBA\x8B\xBA\x2F\xBA\xE0\xBA\xE3\xB4\x65\xB6\x84\xB4\xC7\xBA\x22\xBB\x71\xBA\x36\xBA\xE8\xBA\x74\xBA\xEA\xBA\x3A\xBA\xF5\xB5\x20\x93\xF0\xBA\x7E\x7B\xC5\x9C\x27\xB8\x93\x84\xF8\xB9\xF8\x96\x2B\xB8\xC3\xB9\x15\x0E\xD4\x96\xF6\x9C\x02\x01\x33\xBB\xCA\xB7\x22\xB0\x18\xBB\xC1\xB8\xF8\xB8\xE5\xB5\xA7\x92\x94\xAF\x12\xAB\xC3\xBA\xAB\xB8\x24\xB5\x50\xAF\x26\xB5\x4A\xB6\x28\xB5\x69\xB4\xC9\x6D\xBC\xAA\xE6\x91\x54\xB4\x0A\x7A\x5C\xAE\x2F\xBB\x2B\xA9\xBD\xA2\xC7\xAA\x36\x89\x59\xBB\xE6\xB7\x17\xBB\xA9\xBA\x28\xBA\x20\xA8\x87\xBA\x5E\xB4\xE6\xB5\x70\xB8\xE5\x97\xB1\xB9\xC6\xBA\x21\xBB\xB4\xB9\x93\xBA\xB6\xB9\x73\xBA\xB8\xB9\xCD\xBA\xBA\xB9\x77\xBA\x4B\xBB\x6A\xA6\xD6\xB4\x60\x9C\x76\xBB\x53\xB8\x78\xBB\x05\xBA\xAA\xBA\x1A\xBB\xAC\xBA\xCD\xB9\xAE\xBA\xC5\xB8\xB0\xBA\xC7\xB8\xB2\xBA\x0B\xB8\xD4\xB9\x0D\xB8\xB6\xBA\x1A\x7B\xF2\xB4\x8F\xBB\xD8\xBA\x6A\xA7\xFC\xA8\x1A\xB8\xFE\xAC\x00\xBB\x09\xB0\x1F\xBB\x18\xAF\x51\xBA\x7E\xA8\x53\xBA\x35\xA7\x11\xBA\xFF\x72\x9E\xB8\xC7\xB7\x09\x01\x90\xBB\x68\xB8\x5B\xBB\x79\xBB\x19\xBB\xCA\xB5\x24\xB9\xCC\xB5\xA9\xBB\xCE\xB5\x28\xB9\xD0\xB5\x2A\xB9\xD2\xB5\x06\xBB\xF3\xB7\x08\xBB\xC0\xB5\xC8\x61\xC2\xB5\x02\xB1\x19\xB5\xBD\xB8\xA7\x7A\xF8\xBA\xA4\xBB\x7F\xA7\xA6\xBB\xCF\xB7\xA8\xBB\x11\xB9\x3B\xB9\xC0\xBB\xEF\xB7\x5E\xB8\x0E\xBA\x6A\xB9\x10\xBA\xDC\x9D\xCD\xB8\x2A\x6E\x10\xA4\xB6\xBB\xA2\xB8\xB8\xBB\x93\xBB\x7A\xBB\xD1\xBB\xBC\xBB\x1B\xB8\xBE\xBB\xED\xB7\xD6\xBB\x1F\xB8\xD8\xBB\x52\xBA\xDA\xBB\x54\xBA\x6C\xB9\x8A\x93\x13\xBA\x3F\xAE\x74\xAB\x08\xAF\xA3\xBB\x83\xBA\xBE\xB4\x94\xBB\xBB\xBB\x1B\xBB\xCE\xAC\x6E\xB8\x40\xB6\x61\xBB\xD2\xAC\xAA\xB8\xF6\xB3\x40\xBB\xE5\xB4\xE4\xBA\xCB\xB4\x23\xBB\x3D\xB8\x25\xBB\x3F\xB8\x27\xBB\xB5\xB8\x4A\xBB\x18\x9E\x52\xB5\x1A\x9E\xF6\xBB\x48\xBA\xA4\xB8\x4A\xBA\x5E\xBB\x2C\xB7\x4C\xAF\x2E\xB7\xBD\xA7\x30\xB7\x25\xB5\x32\xB7\x27\xB5\x34\xB7\x53\xAE\x44\xB8\xF4\xBA\xD1\x5B\xAB\xAB\x82\xBA\x12\xBC\x5C\xBB\xF7\xB8\x86\xBA\xD9\xB8\x89\xB8\xDB\xB8\x7E\xB4\x69\xBA\x62\xB6\x69\xB7\x02\xBC\xE2\xBA\x66\xB6\x83\xBB\x92\xBA\x07\xBC\xE6\xB8\x09\xBC\xE8\xB8\x0B\xBC\xEA\xB8\x29\xBB\x7D\xB8\xD1\xBA\x8E\x63\x05\xAF\xC6\x9D\x33\xB9\xE3\x02\x75\xBB\xCF\xBB\xD8\xA8\x67\xAE\x7C\xBB\x08\xB6\x1D\xBB\x4E\xBA\x02\xBB\x5D\xB8\x04\xBB\x5F\xB8\xC4\xBB\x61\xB8\xC6\xBB\xB6\x97\x48\x93\x58\x89\x41\xB5\xE0\xBB\xD3\xB8\xB3\xB7\x60\xB9\x44\xB7\xFE\xBA\x39\xBB\xE8\xB9\x4A\xBC\xEA\xBB\x3D\xB9\xC2\xBB\x3F\xB9\x4F\xBC\x41\xB9\x51\xBC\x7F\x8C\xAB\xB5\x6D\x93\x5B\xB9\x7F\xB7\x06\x01\x56\xBC\x09\xB9\x58\xBC\x9C\xB5\xA5", -"\xAF\x3D\xB6\xDB\xBA\xF1\xB3\xDD\xBA\x2D\xBC\xDF\xBA\x63\xB6\xC7\xB4\xC5\xBA\xD2\xAF\x05\xBC\xE7\xB4\x35\xBC\xEF\xB9\x46\xBB\x88\xBB\x39\xBC\xCE\xBA\x0D\xBC\x31\xA3\x3F\xBC\x03\xBA\x10\x81\xF6\xBA\xEA\xAC\x02\x63\x6C\xBC\x14\xBA\xA8\xBA\xE3\xBB\xBA\xBB\xCE\xB7\xE6\xBB\xD3\xBB\xCE\xB9\xFC\xB8\x9A\xBB\xFE\xB8\x9C\xBB\xC9\xB8\x9E\xBB\xCB\xB8\x81\xB9\x2C\xB6\x84\xA5\x86\xBC\x3B\x81\xA8\xA8\x55\xA4\x13\xB8\x37\xB0\xFF\x00\x59\xA4\xA3\xB9\x27\x01\x8B\xBC\x49\xB9\x6F\xBC\x3D\xB0\x71\xBC\xDD\xB4\xDC\xBA\x24\xB4\xC1\xBA\xAE\xB9\x01\xBC\x64\xB6\x31\xBC\x41\xBB\x33\xBC\xE5\xBA\x85\xBB\xE7\xBA\xAF\xBB\xA9\xA7\xB1\xBB\x51\x74\xD7\xB5\x4A\xB8\xA3\x98\x7E\xA4\x9F\xB9\xDF\xB9\xE6\xAF\xC5\xB9\x04\x64\xA8\xBC\x5F\xB9\xAA\xBC\xEE\xB3\x5D\xB6\x72\xBC\x67\xBA\x74\xBC\xFF\xBB\x64\xAF\xEA\xB9\x20\xBB\xAD\xBB\x1A\xAB\xBA\xBC\xC3\xA8\xBC\xBC\xB5\xB2\x31\xB0\xF4\x98\xC7\xA1\xCD\x98\xC2\xB9\xC3\xBC\xD1\x98\x32\xBB\x44\xBC\x22\xAA\x46\xBC\x29\xBC\xAA\xB9\x2B\xBC\x8B\xB8\xDE\xBA\xE1\xB4\x3E\xBB\xE0\xB8\x79\xBC\xC9\xB4\x7B\xBC\x77\xB5\x7D\xBC\x94\xBA\xD5\xBC\xDC\xA9\xF0\xBB\xBD\xBC\x13\xB6\x51\xBB\xE8\x91\x2E\x9F\x3B\x0A\x3F\x8A\xFD\xB7\xBC\xA2\x3C\x0E\xE1\xB9\x36\x9F\xA7\xBC\xE1\xBC\xCE\xAA\xE3\xBC\xF9\xB8\x1C\xBB\xE8\xBB\x1D\xB8\x5F\xBC\x67\xB9\x61\xBC\x69\xB9\x63\xBC\x6B\xB9\x65\xBC\x78\x98\xF6\xBC\x0D\xBB\x89\xBC\x1C\x4E\x5E\x85\x71\xBB\xA6\xAC\xFE\xB9\x23\x99\x3A\xB0\x0D\x61\xC7\xBC\xC8\xB9\x59\xBC\xCD\xB7\xB6\xB7\xA7\xBB\x07\xB0\x07\xBD\x5B\xB8\x4B\xBC\x0C\xBA\xEC\xBB\xAE\xBB\xEE\xBB\xB0\xBB\xF4\xBC\xE2\xAC\xF2\xBB\x42\x99\x75\xB6\x10\xA5\x9A\x8A\x8B\xA0\x1B\xBA\x5B\xB0\x76\xB6\xE0\x62\x24\xB7\x48\x03\xEC\x7D\x10\x83\xF7\xBB\x9D\xB5\x15\xBC\x05\xB8\x98\xBB\x27\xB9\x95\xBC\x14\xB9\x97\xBC\x00\xB9\xB4\xBA\x02\xB9\x4C\x74\xEE\xBA\x67\x90\xB2\xA2\x38\xB4\x72\xA1\x41\xBA\x57\xB7\x68\xB5\x44\xBA\xC5\xA5\x6A\xBC\x0F\x83\x02\xBD\x23\xAE\x04\xBD\x5F\xBB\xCB\x92\x61\xB6\x76\xBC\x2F\xBC\xB3\xBC\xEC\xBC\xEC\xB5\xEE\xBC\xEE\xB5\x44\xBB\xCA\xBA\x87\xBB\xCC\xBA\x81\xBC\x8A\xBB\x3B\xBC\x4C\x6C\x48\xBD\xB8\xB2\x84\x6C\x17\xB3\x17\x8B\x09\xA6\x9E\xB3\xC3\xB7\xAF\x5B\x70\xB0\x00\x00\x0F\xA6\x9F\xB8\x02\x01\x3A\xBD\x25\xBC\xB9\xBB\x5D\xBB\x28\xBC\x05\xBD\xFC\xBB\x3A\xBB\x8A\xBA\xAD\xB9\xC5\xB4\x77\xBC\x8F\xB8\x5D\xBD\x91\xB8\xB6\xBC\x06\xBC\x61\xBD\x24\xBB\x63\xBD\x26\xBB\x48\xBB\x76\xBA\x67\xBD\xEC\xB8\x9B\xBA\xB9\xB2\x7B\xBA\xB8\x7D\xC4\xB3\x25\xA6\x1B\x9C\xA2\xBC\x51\xB6\xC8\xB3\x39\xBD\x54\xBD\x47\xAE\xAA\x97\x16\xBC\xB9\xB7\x18\xBC\x4E\xAF\x1A\xBC\x66\xBB\x1C\xBC\x68\xBB\x1E\xBC\x6A\xBB\x69\xA8\xE4\xB3\xF1\x95\x95\xB7\x75\xAD\xFC\xB9\x9E\x62\xA3\xBA\x80\xAE\x09\x01\x77\xBD\xA7\xBA\x92\xBB\xCC\xAA\xFD\xBA\x3D\xBD\xC3\xB8\x3F\xBD\x50\xB9\x19\xBC\x52\xB9\x1B\xBC\x54\xB9\x1D\xBC\x56\xB9\x1F\xBC\x9D\x73\xB8\xBA\xA4\xBA\x0D\x61\xB2\xBD\xFA\xBA\x6E\xBC\xD5\xB8\x84\xBA\xE4\xBB\x7F\xAB\x21\xBD\xB8\xB7\x7E\xBB\x22\xB5\x71\xB8\x65\xBB\xBD\xB7\x67\xBB\xBF\xB7\x69\xBB\x4C\xB6\x20\xBC\x91\xBD\xC4\xB7\x5D\x0F\x1A\xB4\x5B\xB7\x02\x63\xC6\xBD\x16\xBB\xE2\xBB\xB5\xBD\xF9\xBB\x90\xBC\xFB\xBB\x22\xB6\x93\xBC\x12\xB9\x41\xBD\x29\xB9\x43\xBD\x16\xB9\x99\xBC\x18\xB9\x6B\x78\x69\xBD\xA3\xB2\x4A\xBD\x54\xB7\x94\x90\x3A\xB4\xFF\x92\xD7\xAD\xA2\xB9\xE2\xB9\x93\x62\xDF\xBD\x34\xBB\xCE\xB3\x36\xBB\xBC\xBA\x38\xBB\x66\xBA\xFD\xBB\x68\xBA\xCF\xBC\x42\xB6\xB2\xBC\x78\xBC\x81\xBB\x7A\xBC\x42\xBB\x84\xBB\xF0\xBC\x86\xBB\x7F\xBC\x64\xBD\x8C\xBD\x28\xBB\x83\xBC\xDE\xA7\x26\xB8\x54\xAA\x53\xB4\x14\xB6\x55\xB4\xA1\xBA\x49\xAC\x46\xA2\x13\xBB\x29\x5D\xFB\xBD\x5A\xBB\x8D\xA8\xFE\xBD\xD9\xBA\x00\xBE\xBE\xBA\x5D\xBC\x62\xBB\x06\xBE\x83\xBD\x08\xBE\xED\xBC\x0A\xBE\x34\xBC\x88\xBD\x08\xBC\x8A\xBD\x0A\xBC\x10\xBE\x0C\xBC\xD7\xBC\x47\xA6\x10\xB8\x2D\xBB\x54\xBB\x38\x59\x72\xB4\x1E\xAE\xB1\xBD\x9B\xBD\x66\xAE\x9D\xBD\x3E\xBD\x17\xBC\xAF\xBA\x7B\xB9\x4A\xB7\xEB\xBD\x2B\xB9\x45\xBD\x2D\xB9\xA0\xBB\xFF\x7E\xF6\xB7\x14\xA7\x50\xBB\x12\xBD\xC4\x87\xFB\xB7\x70\xBB\xFC\xBC\x77\xAA\x5D\x0F\x56\xBB\xA2\xAF\x01\x01\x1E\xBE\x77\xBB\xE1\xBD\x6A\xAC\xB6\xBD\x7B\xBD\x57\xBD\x35\x93\x59\xBD\xE9\xBC\x82\xBD\x8E\xBA\x84\xBD\xE2\xB8\x2B\xBE\xB7\xBC\x0C\xBE\xB9\xBC\x29\xBD\xBB\xBC\x2B\xBD\x4C\xBB\x8C\x5D\xEA\x87\x48\xB8\x40", -"\x9D\x4D\xBE\x9A\xAA\x4F\xBE\x7D\xB6\x2D\xB8\xF1\xB8\x5F\xAE\xB7\xB4\xB9\xBA\xC5\xBD\x3C\xBE\xBF\xAE\x89\x8B\x9E\xBD\xCF\xBD\xBA\xB7\xD1\xBD\xBC\xB7\x07\x8E\xBE\xB7\x61\x90\x31\xBE\x3A\xBC\x12\xBE\x71\xB6\xF9\x73\x64\xB8\xE6\xAA\x41\xB5\x57\xBE\x91\xBB\x59\xBE\x04\xAE\x8F\xBC\x20\xBD\xD2\xBB\x22\xBD\xD4\xBB\x01\xBB\x09\xBD\x94\xB9\x0B\xBD\x96\xB9\x46\xBE\x98\xB9\x48\xBE\x8B\x7B\xA2\xBB\x8D\xBE\x7B\xBE\x85\xB3\x66\xA4\xE6\xBC\xC0\xBA\xE8\xBC\x8D\xB8\x61\xBE\xE1\xBA\x63\xBE\x90\xBA\x65\xBE\x87\xBD\x84\xBE\xDD\x91\xC0\xB7\x54\x89\x90\xBD\x8F\xA7\x92\x75\x10\xA4\x8E\xBE\xB7\xBB\x20\xBE\x13\xBC\x37\xBB\x5B\xBC\x01\xBE\x7E\xBD\xFB\xA3\x26\xBE\xD1\xBC\xAC\xBB\x27\xBD\xD4\xBC\x69\xBE\xD6\xBC\x6B\xBE\xD9\x7F\xEF\xB8\x19\x7D\xCB\xBB\x81\x8D\xBE\xB8\x3B\xBE\x3B\xBD\x70\xBC\xCB\xBC\xAD\xBC\x73\xBC\xAF\xBC\xA7\xBE\xDE\xB8\xEA\xBC\x31\xBA\xC2\xBE\x4D\xBC\xD9\xBB\x0D\xBD\xDB\xBB\x6C\x6B\x2A\xB5\xDA\xB7\x04\x64\xB7\xBE\xE1\xBB\xB9\xBE\x26\xBC\x37\xB9\xB7\xBD\x39\xB9\x96\xBE\xAA\xBB\x25\xBD\x50\xBA\xC3\xBE\xA1\xAB\xF2\xBC\x5B\xAB\x33\xBE\xC8\xBE\x85\xBC\x75\xBE\xFE\xAF\xF2\xB8\x75\xAB\xB8\xB4\xE1\xBE\xA2\xBE\xC0\xB4\xA4\xBE\xDE\xB4\xC3\xB4\x80\xBD\x8C\xBA\xA9\xBE\x3F\xBB\xB4\xBC\x04\xBC\xAD\xBE\x7C\xBC\x2D\xBE\x36\xBC\x2F\xBE\x38\xBC\x86\xBE\x82\xBC\xF1\xBE\x94\x81\xDE\x92\x7C\x02\x36\x89\xE2\xBE\x57\xBC\x35\xBB\xBA\xBE\xFF\xBD\xBC\xBE\x24\xBE\x4D\xBA\xC0\xBE\xAB\xBB\x63\xB4\x86\xBD\x06\xBF\xAF\xBE\x0D\x96\x0B\xBF\x66\xBD\x88\xBE\x52\xB0\x2E\x9E\x00\x00\x78\x80\xE0\xBE\x3F\x0A\x12\xBF\x6D\xBC\x14\xBF\xE5\xBE\x8E\xB9\xE7\xBE\x63\xB9\x23\xBD\x65\xB9\x98\xBE\x03\xBB\x9A\xBE\x05\xBB\x9C\xBE\x07\xBB\x9E\xBE\x81\x88\x30\xB9\xC7\xBD\x07\x90\x41\xBC\x99\x63\x60\x9C\x2A\xBF\x8C\xBC\xB4\xBD\x5A\xBE\xE3\xBD\x93\xBE\x91\xBC\x95\xBE\xE7\xBD\xD5\xBB\xE9\xBD\xC1\xBB\x44\xBE\xC3\xBB\x37\xBF\xC5\xBB\x39\xBF\x57\x7A\x98\xB5\x00\x00\x5F\x8E\xAA\x96\x29\xBF\xFA\xBE\xDC\xB4\xFC\xBE\xAE\xBC\xDF\xB4\xD5\xBE\xC2\xBA\x27\xBE\x62\xBE\x29\xBE\x5E\xBD\x05\xBF\xEF\xBC\x07\xBF\x7E\xBC\xEF\xBE\x32\xAE\x0D\xBF\xC8\x95\x67\xBC\x38\x98\x69\xBC\xDD\xBD\xF9\xBE\xCF\xBE\xAB\xBC\xD1\xBE\x5A\xBF\xD3\xBE\x5C\xBF\x75\xBC\x60\xBE\x5B\xBD\x07\xBE\xD2\xBD\x83\xBE\xD4\xBD\x85\xBE\xB1\xBE\xD5\x8F\xD8\xBD\x04\xAF\x6E\xB9\xDA\xBC\x70\xB9\x3A\xBE\x06\x01\x41\xBF\xA9\xBC\xC9\xBD\xF8\xBB\xCB\xBD\x24\xAE\x94\xBE\xCE\xBD\x60\xBB\x5F\xBE\xA8\xBE\x78\xBF\x28\xBE\x7A\xBF\x5D\x90\x65\xBF\xF1\xBC\xC5\xBE\xF3\xBC\x0F\xBD\xAB\xB2\x83\xB9\xF0\xB8\x5E\x8F\x86\xB9\xBE\xAF\xBC\x9E\xDE\xBC\x3C\x0E\xA5\xBC\xF9\xBD\xDE\xBD\x58\xBF\xAC\xBC\x73\xBF\xCD\xBC\xD4\xBE\x76\xBF\x91\xBF\x63\xBB\x30\xBC\xAB\xBE\xE3\xBA\x63\xBF\x60\xBD\x1F\xBF\x83\x97\x21\xBF\xEA\xA6\x0A\xA9\x3D\xBC\xB8\x89\x9B\xB9\x71\xBE\x53\x08\xFC\xB5\xA5\x98\xFE\xB5\x03\xBA\xE1\x93\x88\xBC\xD6\x96\xFA\xBD\xA7\xBF\x72\xBF\x87\xAE\xFD\xBE\xDC\xB8\x5D\xBF\xB1\xBC\xC1\xBE\x1C\xBF\xD3\xBC\xEE\xBE\x98\xBF\xF0\xBE\xC7\xBE\xFF\x9E\x11\xBD\xBF\xBC\x95\xA2\xA2\xA4\x05\x9F\x37\xBE\x19\x8A\x96\xB4\x87\xBF\xC8\xBC\x89\xBF\x3C\xBD\x5C\xBE\x7E\xBE\x8F\xBF\x7F\xBB\x6A\x98\x61\xBF\x85\xBD\xCF\xBF\x9A\xAC\xD1\xBF\x68\xBF\xD3\xBF\x4E\xB6\x16\xBA\x32\xB0\xFA\xB7\x1A\xB0\xDE\xB9\x19\xBE\x12\xA9\xDC\xBF\xC6\xBF\xDA\xBA\xD2\xBE\xAA\xBF\x75\xBF\x04\xBE\x6A\xBA\x5F\xBF\xAA\xBE\xE6\xBF\x64\xBE\x1D\xBF\x64\xBF\xB4\xBF\x3A\x99\xB6\xBF\xF6\x9D\x8C\xBB\xD4\xBF\xBF\xB9\x26\xA9\x27\x64\xC2\xAC\x51\xBE\xC5\xAA\x18\xBD\xF5\xA4\x00\xBA\x57\xBF\x70\xBF\xCA\xBC\xF7\xBF\xA9\xBF\x02\xBE\xCE\xBC\x90\xBF\xD6\xBE\x01\xBF\xEB\xBC\xFF\xBF\xAC\xBE\x01\xC0\xB3\xBF\x7C\xBF\xB0\xBE\xD6\xBD\xC1\xB7\x0A\xA5\x82\xBF\xDA\x93\x56\xB0\x18\xBA\x56\x99\x5A\xB0\x15\xA5\x7C\xB6\x2C\xB8\xBA\xB2\xD7\x5A\x9F\x61\xBE\xB1\xD1\x5B\xA3\x61\x63\x68\x37\x6D\x23\x83\x6A\xB4\xAD\x61\x36\x5E\x3B\x5D\xB2\x61\x27\x01\xA3\x95\x28\xAD\x7A\x0A\xCC\xAE\x13\xBF\x15\xBA\x10\x80\xDC\x61\xC1\xBF\x3E\x0E\x5A\x74\xB1\x69\x40\xC0\xC9\xBB\x55\xB0\xE1\x8A\x14\x3D\xE3\x8A\xE0\x93\x3E\x0E\x78\x87\x49\xC0\xF3\xBE\x17\xB0\xF0\x82\x8C\x7A\x45\xC0\xF4\xBE\x34\x62\xE0\x61\xD7\xB2\x3B\xBF\xE0\xBD\x14\x01\x0C\xB3\xE7\x06\xD3\x69\x50\xC0\x27\x01\xB4\x8C\x53\xC0\x26\xC0\x03\xBA\x1F\xB3\x06\x06\x45\x9D\xFC\x61\x5C\xC0\xBA\xB8\xB3\xBD\x63", -"\x17\x05\x62\xE3\x61\x07\x62\x59\xC0\xA5\x05\x0B\x62\x6D\xC0\xC8\xBB\x74\xB6\x5B\x9A\xB7\xB2\xF3\xBF\x35\x62\x03\x01\x11\x92\x66\xC0\x2D\xBD\x27\xC0\x46\x9A\x1C\x49\x86\x19\x6B\xC0\x27\x62\x77\xC0\x24\x83\xD4\xA8\x87\x68\x7B\xC0\x97\xBD\x71\x63\x3E\x0E\x90\x72\xA8\x8B\xDD\xB1\x78\xC0\x8A\xC0\x83\xC0\x37\x06\xF3\xBF\x8D\x94\x37\xBD\xAA\xB2\xA4\x95\x02\x63\x30\x83\xA9\xA4\x5D\xB0\x33\xA9\x56\xBD\xE2\xBF\x58\xBD\xE4\xBF\x42\x9F\x1D\xC0\xB1\xBF\x1F\xC0\x99\xAC\xB7\xAC\x0E\xBE\x8B\xBD\x7E\xBF\x77\x86\xF0\xBD\xD0\x9B\x45\xB8\xE4\xA5\x77\xB3\xE6\xA5\x4D\xA1\x9F\xB3\x52\x76\x50\xBD\x25\xB7\xAE\xB5\x9D\xC0\x7B\xA3\x1E\xBA\x9F\xC0\x04\xB0\x46\xBF\xE5\xBD\x10\xB9\x49\xBF\x97\xBE\x4B\xBF\xD7\xBB\xDA\xBE\xED\xBB\xDC\xBE\xEF\xBB\x4F\xB7\x56\xBA\xDB\xB7\xA0\xA9\x6C\xBE\x0B\xAD\x55\xB7\x5C\xBA\x42\xBA\xB2\xAD\x5F\xBA\x7F\xB6\x30\xAD\x10\xA4\xBB\xC0\xF1\xA3\x2F\xA1\xE8\xAC\xA0\xC0\x3E\xBE\xB8\xBD\x40\xBE\x99\xBB\x42\xBE\xD1\xB9\x7D\xB9\xD3\xB9\x7F\xB9\xD5\xB9\x9B\xBC\x19\xAA\x92\xBD\xCA\x95\xB9\x7D\x95\xBD\xC6\xB3\x9E\xBC\x7D\xB7\xC5\xA9\x52\xBD\x02\x01\xD9\xC0\xBD\x9A\x30\xBD\x97\xA3\x21\xBE\xA5\xBB\xCC\xBD\x8D\xBF\x9B\x93\xE0\xC0\x40\xBD\xE2\xC0\xB1\xBA\xE4\xC0\xB3\xBA\xED\xBD\xB5\xBA\xE8\xC0\x92\x6F\xAC\x9F\x49\xA6\xE1\xA9\x4B\xA6\x16\xBD\x39\x84\xAF\xBD\xC9\xAA\x27\x01\xF4\xC0\xA8\x9A\x35\xBD\xF7\xC0\x15\xBF\x22\xBE\x17\xBF\xCC\xBC\x17\xC0\xAB\xBF\xFB\xBF\x2E\xBC\xAE\xBF\x5C\xBD\xA6\xC0\x32\xBC\xE8\xBF\xAA\xC0\x67\xBF\xAC\xB4\xEC\xBF\x36\x98\xC3\xBD\xB0\xBD\x2F\x83\xD1\xA4\xDC\xC0\xBF\xC0\x19\xB8\xFB\xC0\x92\xAF\xFE\xBB\x19\xC0\x5E\xBF\xCD\xBF\x73\xB8\x20\xC1\x39\xAF\x22\xC1\xF4\xB5\x69\xBF\x6B\xB4\x23\xB3\xD4\xBA\xC6\xB7\x28\xBF\x0F\xC1\x29\xC1\xBE\xC0\x57\xB5\xBB\xBE\x2F\xBF\x90\xB9\x31\xBF\x92\xB9\x33\xBF\x4C\xBC\x35\xBF\x4E\xBC\x4F\xBF\x50\xBC\x47\xBD\xE0\xBE\x58\x96\x52\xB7\x0A\xAD\x85\x5B\xD4\xAD\xF3\xBA\xAA\xA6\xA2\x9C\x96\xB4\x10\xC1\x45\x9B\x2D\xC0\x3C\xA3\xF8\xC0\xD0\xBB\xFA\xC0\x47\xBF\x8E\xBF\xA3\xC0\xD0\xBD\x80\xBB\x94\xBF\x09\x96\x96\xBF\x0D\xBE\x36\xC1\x74\xB7\x8E\xBD\xF5\xB9\x7E\xB8\x14\xBE\xF7\xB7\xC7\xB1\x29\xB8\x77\x84\x53\xBB\xA2\xBF\xFF\x00\x00\xB8\xBA\xC0\x3F\xC1\xFB\xA4\xC9\xB9\x7A\xBD\xAB\xBA\x47\xBC\x59\xB8\x45\xC1\x0A\xBA\xEB\xBE\xD2\xBC\xED\xBE\xE9\xBF\xC9\xC0\x2A\xBD\x9A\xBF\x28\x91\x35\xBE\x6D\xB4\x12\xB8\xAD\xBD\x33\x9F\x31\xBB\xC5\xBC\x3F\x0A\x58\xC1\x5E\x9B\x45\x99\xD2\xA4\xDF\xBF\xD0\xBE\x15\xC0\xC8\xBF\x5B\xBF\xFE\xBE\xB0\xBC\x81\xBD\x92\xBF\x60\xBF\x64\xC1\x7F\x97\x66\xC1\x68\xBE\x84\xC1\x6A\xBE\x86\xC1\xDE\xB7\x3A\xA7\x53\xAA\xAB\x8C\x4C\xBE\xD6\xBF\x30\xB6\x41\xA2\x10\xBB\xC1\xBF\x9F\xAA\xF8\xBD\x00\xBD\x09\x01\x90\xC1\x2E\xA1\x92\xC1\x2A\xC1\x41\xC1\x16\xBF\x43\xC1\x4C\xBA\x49\xBC\x1A\xBF\x80\xC1\xD9\xBE\x49\xC1\xDB\xBE\x4B\xC1\x64\xBC\x51\xBF\xF5\xB7\xC9\x96\x6D\xBB\x17\xBE\x6F\xBB\x74\xBE\x55\xC0\xF5\xBE\x77\xBE\x44\xA7\x46\xB9\x03\x01\xB3\xC1\x7C\xA1\xF6\xC0\x2F\x79\xFC\xBA\x45\xBF\x2C\xC1\x5F\xC1\xFC\xC0\x9F\xBD\x41\xBE\xBB\xBD\x7C\xB9\xBD\xBD\x7E\xB9\xBF\xBD\x80\xB9\x57\xB9\xFF\x78\x8B\xBE\xB4\x84\x60\x9C\xD0\xC1\xDB\xBC\xD2\xC1\x22\xA2\x5C\xC1\x45\xBC\xDE\xC0\xE8\xBE\xC3\xC0\xEA\xBE\x47\xC1\x26\xBD\xC7\xC0\x28\xBD\xA2\xC1\xC6\xBE\xA4\xC1\xD4\x7E\x36\x8D\x86\x9D\xE5\xC1\x77\xC1\xC2\xA2\xB7\xC1\x15\xC1\xB9\xC1\xFF\xBA\xE9\xBE\xBF\xBB\xC5\xC0\xEB\xBB\xF2\xC1\xC4\xBE\xF4\xC1\x99\xBF\xC3\xC1\xE8\x84\xB3\xBB\x3D\xC1\xB2\xC1\xFB\xC1\x5B\xC1\x14\xC1\xF9\xC0\x8C\xBF\xD7\xC1\x2E\xC1\x03\xBE\x30\xC1\xCC\xBF\x1B\xBF\x33\xC1\x82\xC1\x21\xC1\xEA\xBF\x23\xC1\xF6\xC1\xF2\xBE\x67\xC0\x74\xC0\x66\xA0\xCF\xAE\xCC\xBE\xCD\xBB\x3E\xC1\x9E\xC0\x78\xC1\x1E\xBD\x22\xB9\xFA\xBB\x96\xBB\x06\xBD\x01\xC2\xE9\xBB\x03\xC2\x60\xBC\x4D\xBF\x62\xBC\xC1\xC1\x0E\xBD\xCC\xB8\x89\x6A\xD2\x84\xD8\xC0\x0E\xC2\x13\xC1\x2D\xBF\x14\xBC\xE1\xBF\x3F\xBE\xD9\xC1\xE1\xC0\xDB\xC1\x43\xBE\x01\xC1\x9D\xBB\xE6\xC0\x9F\xBB\x05\xC1\x55\x84\x54\xC0\x84\xB9\x2E\xB8\x5D\x0F\x40\xB5\xCE\xC1\xF3\xC0\x3A\xC2\xD3\xC1\xEA\xC1\xE2\xBC\xEC\xC1\x30\xBF\x2E\xC2\x08\xBD\x30\xC2\x0A\xBD\x32\xC2\x0C\xBD\x34\xC2\xDD\xBE\x09\xC2\x43\xB9\xFF\xA7\x10\xBC\x41\xB5\xE6\xC1\xE9\xA1\xE8\xC1\x4C\xA2\x53\xC2\x03\xBD\x55\xC2\x44\xC1\x57\xC2\x24\xBD\xF0\xC1\xEC\xBE\x05", -"\xC2\xD0\xBF\x07\xC2\xD2\xBF\x1E\xC2\x0E\xBF\x69\xB5\x2F\x9E\x39\xC2\x27\xC2\xFC\xC1\x79\xC1\x27\xBC\x7B\xC1\xE4\xBC\x2B\xBA\xAB\xB9\x3B\xBB\xFF\xBE\x3D\xBB\x1B\xC0\xD8\xBE\xCE\xBF\x1A\xC2\x35\xC1\x1C\xC2\x37\xC1\x24\xC1\xB9\xB8\x93\xC0\x6F\xC0\xB5\x70\x3E\xBF\x51\x9E\x0E\xC1\x0D\xC2\x79\xC2\x0F\xC2\x3C\xC2\x42\xC1\x3E\xC2\xDF\xC0\x40\xC2\xFE\xC0\x42\xC2\xE3\xC0\xDD\xC1\xE5\xC0\xDF\xC1\xE7\xC0\xE1\xC1\x97\xB5\x75\xAF\x99\xB5\xFA\xC1\x94\xC2\x3B\xC2\x79\xBD\x7C\xC2\x95\xBB\x7C\xC1\x78\xB9\xB9\xBD\x7A\xB9\x9C\xC2\x00\xC1\x9E\xC2\x02\xC1\x46\xC2\x9A\xBC\xA2\xC2\x92\xB7\x59\xB9\xAC\xB5\x09\xAC\x76\xC1\xA7\xC2\x52\xC2\x10\xC2\x5D\xC1\x12\xC2\xC1\xC0\x25\xB9\xAE\xC2\xCF\xB9\xFF\xC0\x9B\xBB\x44\xC2\x98\xBC\xB4\xC2\xEE\xBD\xB6\xC2\xB0\x84\x20\xC2\xCA\xC1\x85\xA6\x8E\x93\x57\xC1\x51\xC2\xE9\xC1\xBE\xC2\xEB\xC1\xAD\x9C\x7E\xC2\x88\xBA\x80\xC2\x7F\xBD\x9A\xC1\x00\xBF\x9C\xC1\xFE\xBF\x9E\xC1\x46\x9F\xA0\xC1\xDB\xA5\x30\xAE\x05\xC0\xC2\xA4\x07\xC0\xED\xBF\x5E\xAC\xEF\xBF\x7C\x98\xB3\x93\x47\xAC\x7C\xC0\xDD\xB5\xAD\x7E\xC3\xAF\x8F\xC1\xD2\xC2\x67\xC2\xD4\xC2\x54\xC2\xD6\xC2\x7C\xBD\xE6\xBD\xC3\xC2\x94\xBC\xC5\xC2\x96\xBC\xC7\xC2\x44\xBD\x03\xC1\x46\xBD\x48\xC2\x9E\xAC\xE8\xC2\xDA\xBC\x4C\x77\xA4\x98\xDF\x9E\xCD\xA8\xE4\xAF\xCF\xA8\x5D\x0F\x66\xAC\xA5\xBF\x04\x64\x64\xC2\xA1\xA4\x12\xC1\xBD\xC2\x96\xC2\xB8\xC1\x98\xC2\xED\xC1\xF9\xC2\xE8\xBD\xFB\xC2\x42\xBD\xFD\xC2\xEC\xBD\xC9\xC2\x04\xC1\xCB\xC2\x96\xB2\x09\xC0\x14\xB6\xFB\xAF\xCC\xB1\xCE\xC2\x1A\xBE\x1A\xB6\xC3\xBF\xF0\xB2\xF1\xC2\xBC\xC2\xD3\xC2\x13\xC3\xFE\xC1\x15\xC3\x56\xC2\xEE\xC1\x02\xC2\x19\xC3\xEA\xBD\x1B\xC3\x45\xBE\xFF\xC2\x47\xBE\x01\xC3\x20\xC3\xEE\xBF\x04\xC3\x4B\xB8\x3A\x0A\x36\x70\xED\xC2\x1D\xB0\x28\xC3\xF9\xB9\x9C\xC0\xF2\xC2\x97\xA2\x68\xC2\x55\xBD\x6A\xC2\xBA\xC1\x7E\xC1\x1E\xBB\xBD\xC1\x86\xC2\x70\xC2\x83\xC1\x5D\xC2\xCA\xC0\x5F\xC2\x10\xBD\x21\xC3\xF7\xBC\x0B\xC0\xFB\xB9\x09\xC3\xD2\x96\x57\xB6\xC6\xAC\xB6\x8C\x29\x5D\x0F\xC3\x4A\xA2\x5A\xC1\xA8\xC2\x8E\xBC\x7A\xC1\xAB\xC2\xD7\xC2\x7D\xBB\xE3\xBF\x62\xC1\xE5\xBF\xDF\xC2\xA8\xA2\xE1\xC2\x37\x9D\xFE\xB3\x69\xC1\x23\xBF\x7E\xB8\xC9\xBE\xCB\x61\x2F\xBD\xDB\xC0\x5D\xB0\x2A\xC0\x7A\xB6\x4A\x99\x61\xC3\x4C\x99\xAF\x72\x5B\x98\xC7\x00\x5F\xA9\x1C\xB2\x61\xA9\x1D\xBA\x96\xA3\x7C\xC3\x99\xC0\x8A\x83\x9F\xB2\xB7\xC2\xB6\xAD\x71\x7E\x50\xC1\xB1\xC0\x07\xA6\xB3\xC0\x7E\x86\xE7\xA5\xE2\xB7\xE9\xA5\xD5\xBA\xF1\xB1\x9E\xB2\x18\x86\xAF\xC0\x9B\x9C\x8D\xC3\xD0\xC0\x4C\xBD\x9D\xB3\x2B\xAD\x70\xBD\x63\xA9\x77\xA1\x02\x9C\xFD\xB1\x88\xC3\xCC\xC2\x89\xBE\xC9\x95\xE9\x07\xCB\x95\x1A\x9C\xEE\xC0\x21\xC2\xC4\xA9\xC0\x7D\xCD\x94\xA4\xC3\x15\xB5\x52\xB0\x07\xC1\xDC\x7E\x4A\xA6\xC3\xA9\x0D\xC1\x81\xB6\x96\xC3\x45\x85\x80\xBF\x74\x73\x26\xC1\x17\xB1\xB9\xC3\x66\x85\x7E\xB8\x7E\xB6\x3B\xC1\x83\x95\xA3\xC3\x97\xC3\x4E\xC1\xF6\x9B\xEF\xBA\x37\xB4\xF3\xBD\x18\xB3\x54\xC1\xD6\xAD\xAB\xA6\x42\xC3\x1D\x7D\x3F\x0A\xB0\xC3\x2F\xB9\x6C\xC1\x4A\xBE\xA3\x7E\x6F\xC1\x3A\x82\xA2\xAC\xAC\xC1\xFC\xB7\xA5\xA6\x70\xB4\xFF\xB7\xEE\x89\x0A\x5F\xD3\xC3\x3A\xBF\xC1\xC3\x6C\xB4\x0E\x0D\x6E\xB4\xDD\xC3\xFE\xB7\xFF\x00\x39\xBE\x10\x85\x29\x5D\xE2\xC3\x3B\xB5\x8F\xB4\xD6\xC3\xCB\x96\xA9\xC1\x70\xC1\x19\xB0\x4C\xB8\xDC\xC3\x68\xB0\xC4\xAC\x53\xBE\xEE\x89\x43\x85\xEB\x72\x13\x85\x08\x86\x16\xBA\xC6\xC1\xF7\xBC\x18\xBE\x8D\xC0\xCB\xC1\x73\xBB\x50\xB8\xA8\x8E\x03\x01\xEE\xC3\xC7\xBB\xB3\xBE\xBC\xC3\xE3\xC1\x1A\x88\x63\xB0\xD2\xC3\xFE\xC3\x88\x7F\xA0\xBE\x91\xC0\x04\x64\x0A\xC4\x94\x89\x56\xA8\x0B\xC2\x8A\x88\x02\x63\x17\xC4\x74\xA3\x52\xB0\x73\xC3\x94\x84\x42\xAB\x0E\x0B\xF1\x8E\x1D\xC4\x90\xA3\x37\xC2\xCE\xB8\x87\xC3\x12\xC4\x09\x78\x4A\xC2\x9D\xBF\x90\xA2\x3F\xB5\xF3\xB8\xBC\x84\x27\x01\x25\xC4\xF1\xBB\x24\xBF\x05\xB9\x10\xBF\x08\xC4\x02\x01\x33\xC4\x2C\xA4\x89\xBE\x25\xBF\x27\xBF\x1B\xC4\x16\xC4\x2A\xC4\x70\xAB\x5D\xC0\xFC\xBD\xFD\x7B\x90\xC2\x20\x8F\x3A\xC4\x2C\xBD\x35\xC4\x44\xB9\x54\xBC\x15\xC4\x11\xC4\xBA\xC3\x2B\xBB\x65\x72\x8A\xAF\x03\x01\x04\x85\xFE\xB6\xBF\xC3\x2B\xC4\x85\xA8\x2C\xC4\x75\x6B\xC4\xB5\x12\xB3\x40\xC4\x4F\xC4\x82\xB9\x9D\xBC\xAC\xC3\x9F\xBC\x40\x12\xA9\xA8\x59\xC3\xFE\xAD\x4A\xAC\xD0\xC3\x12\x7D\x4E\xC4\xC0\xC3\xB9\xBF\xF8\xB5\x9C\xBF\xE7\x91\xE1", -"\xAF\xB5\x17\xC0\xBF\x21\xC2\xC2\xBF\xB0\xC1\x1F\x85\x56\xC4\x42\xC4\x7E\xB8\xF7\xB9\xBC\xBF\xF9\xA4\x16\xB6\xDD\xBC\x40\xC3\xC4\xB9\x68\xC4\xFC\xC3\x00\x00\x48\xC4\xD4\x7E\x28\x9F\xA6\xC1\x5F\xAC\x7B\xC4\xF8\xBC\xDD\xB9\xFA\xBC\x30\x9F\xE8\xC3\xFD\xBC\xFF\x00\xFF\xBC\x76\xC4\x06\x01\x84\xC4\x1F\xC2\x89\xBE\x7A\xC4\xAA\xC1\x32\xBD\xED\xA0\xB4\xB1\xAE\xC1\xF4\xA4\xFD\x81\x31\x64\x39\xC4\x41\xC4\x49\xC2\xCD\xC2\x4B\xC2\x56\xC0\x4F\xB6\x57\xB0\xEF\xA4\x52\xA9\x14\xA5\x54\xA9\x7B\xC3\xB5\x7C\xDA\xBD\x3C\x0E\x31\x0B\x85\x68\x52\xB3\x83\xA0\x38\x59\x36\xB3\x38\xB3\x28\xAD\x3F\x0A\x9F\x8A\xA7\x91\xFD\x7C\x70\x09\x3F\xB3\x41\xB3\xA1\x64\x6E\x64\x31\x95\x46\x62\x45\xB3\x20\x8F\xB9\xC4\xCD\x91\xD9\x64\x70\x09\x4C\xB3\xBF\xC4\xBC\x64\xAD\x69\xB8\xC2\xD1\x5B\x31\x0B\xC9\x00\x08\xB1\x5D\x0F\x4B\xA5\x22\xB1\x03\x01\xAD\x8A\xAE\xA5\x20\x5A\xAF\x07\x7A\x9F\xBE\x5E\xB5\xC4\x20\x8F\xA9\x8A\x9F\xA5\xD8\xC4\xBB\x07\xBD\xC4\x00\xBA\x35\x03\xB6\x64\xCC\xC4\x52\xA5\x58\xA9\x01\x01\x46\xB3\x38\xC4\x3E\x34\xF4\x5A\x47\xA5\xC9\xC4\xD3\x64\xC0\xC4\x3E\x95\x82\xA0\xBB\xB2\x02\x01\x80\x23\x11\x61\x86\xB2\x09\x01\xCC\x00\x9B\xA5\x2B\x0E\x23\x83\x9C\xA5\x9D\x9A\x64\x9A\x62\x53\xFC\xB2\x65\xC2\x5F\x9B\x2A\x9B\x66\x5C\xCB\x00\x63\x68\xB0\x44\xB9\x68\x09\xC5\x63\x9A\x8E\x9A\xB4\xA5\x01\x9B\xE3\x9A\x02\xC5\x10\x0E\x72\x53\x89\x05\x66\x5C\xFA\xC4\x0F\x86\xAD\xA5\xB9\x68\x18\xC5\x0C\xC5\x28\x9B\x40\x71\x07\x9B\x03\x0A\x11\xC5\x60\xC3\x00\x9B\x36\x9B\x7C\x64\x09\x01\x07\xC5\x0F\x86\x34\x00\xCC\xB2\x8F\x95\x28\xC5\x38\x9B\xC2\x9A\xA5\xA5\x46\x71\x20\xC5\x08\x0E\x13\xC5\x76\x02\x15\xC5\x63\x68\xA8\xA5\x9D\xB2\x01\x6C\xF4\x5A\xCE\x8A\x0F\xC5\x1E\xC5\x11\x01\x30\xC5\xFA\xA2\x23\x9B\xB5\xA5\x19\xBA\x7D\xC3\x30\xC0\xE2\x3C\x97\x9B\x2C\xBB\x51\x01\xEB\x30\xD7\x59\x3E\x8F\x6F\x21\xFF\x00\xFE\x0E\x3B\x0E\xD5\x00\x63\x68\x05\x8C\x30\xC5\xFA\x0D\xE4\x55\xC9\x59\x4B\xC5\x3C\x06\xB3\x08\x8C\x8C\x51\x8B\x6F\x21\x3E\xC5\xE9\x68\x40\x8E\x8E\x07\x3B\x0E\xD7\x00\x63\x68\xA0\x00\xFA\x0E\x53\xC5\x3A\x06\x49\xC5\xC0\x69\x68\x8F\x6F\x21\xB3\x08\x64\xC5\x62\x8E\xAD\x5C\xD2\x0C\xC1\xC4\x9E\x10\xE9\x8F\xF8\x68\x27\x01\xD1\x00\x63\x68\x9F\x00\x00\xB3\x3D\x88\x82\x01\x68\xC5\xE6\xC4\x9A\x8F\xD6\x22\xB3\x08\x78\xC5\x6E\xC5\xBA\xC4\xBB\x50\x4A\x24\xAB\xC1\xEF\xAC\xAF\x8E\x84\xB6\x84\x94\xF3\x3A\x56\xC5\x57\xAA\xE4\xC4\x0D\x43\x66\x5C\xCF\x00\x63\x68\x9C\x00\x65\xC5\x7F\x76\x7B\xC5\x3C\x06\x88\xC5\x29\x9D\x7F\xC5\x27\x01\x93\xC5\x82\xC5\x7A\xC0\x9E\x10\x81\x3A\x1E\xA1\x8B\x88\x66\x00\x66\x5C\xCD\x00\x63\x68\x9B\x00\x94\xC5\x7A\xC5\x90\x01\x7C\xC5\x71\xC5\x99\xC5\x6B\xC5\xBB\x8E\x7E\x70\xD6\x22\x6F\xC5\xFE\x0D\x8C\xC5\xB9\xAD\xB1\x4C\x66\x5C\x4E\x16\x16\x86\x47\x00\xA8\xC5\x81\xA6\x96\xC5\x86\x01\x98\xC5\xB3\xA6\x9A\xC5\x29\x21\xB0\xC5\x6F\x21\xAD\x5C\xFA\x0D\x7A\x45\x69\xC5\xB0\x8E\x31\x8F\xC8\x09\x3B\x0E\xD2\x00\x63\x68\x3D\x00\xBB\xC5\x76\xAB\xBD\xC5\xC1\x39\xC8\xC5\xC8\x92\xC1\xC5\x06\x01\xCF\xC5\x9D\xC5\x2E\xA4\x5C\x4F\x53\x9A\x0E\xBB\xC1\xA2\x10\x03\x61\xC5\x63\x68\x0D\x00\xD0\xC5\xF8\xBE\xD2\xC5\xBF\xC5\xD9\xA8\xD6\xC5\x9D\x05\xC3\xC5\x3C\x06\xAD\x5C\x1B\x0D\x95\x42\xB4\xC5\x72\xC5\xCA\xC5\xCC\x08\x3B\x0E\x66\x4F\x5C\x5D\x06\x00\xE3\xC5\x79\xBE\x9E\x8E\xAB\xC5\xF2\xC4\x7E\xC5\xAE\xC5\xB2\x0E\xEA\xC5\x86\x01\xA1\xA5\xD2\x0B\xD9\x4C\xB4\x71\x1D\x68\x3B\x0E\x2E\xA9\x5C\x5D\x12\x0F\x04\xB1\xBD\xB6\xED\x7D\xFA\xC5\x7D\xA5\xFC\xC5\x58\xC5\x08\xC6\x5B\xC5\xEB\xC5\x83\xC5\xAC\x56\x85\xC5\xB3\xA5\x7D\xA3\xA7\xC3\x32\x0B\x52\x0B\x34\x0B\xDC\x22\xD3\x2F\x2C\xC0\x11\xC3\x24\x08\x3B\x0E\xD9\x00\x63\x68\xE6\x00\x0F\xB7\x63\xB1\xF7\x54\x55\xC5\xD0\x59\x57\xC5\x86\x01\x08\x68\x37\x95\xB1\xC5\x14\xC6\xFB\x56\x16\xC6\x90\x64\xD0\x10\xD3\x38\x8F\x24\x66\x5C\xD3\x00\x63\x68\x1F\x8F\xFD\xB0\x80\x8C\xE5\xC5\xEF\xC5\xAD\xC5\x10\xC6\x09\x01\x3A\xC6\x9B\x8E\xB2\xC5\xB1\x30\x32\xC6\xA7\x64\x34\xC6\x52\x56\xCB\xC5\x24\x8B\x77\xC5\x26\xC6\xCA\xB6\x3D\xC6\x2A\xC6\x6A\xC5\x40\xC6\x06\x01\xF0\x8E\xD9\xC5\x03\xC5\x17\x78\x72\x45\x30\x0D\x3E\xC6\x1E\xA5\xF1\xC5\x3C\x02\x22\xC6\x63\x68\xD6\xC4\x8F\x68\x3C\xC6\xAA\xC5\x97\xC5\x5A\xC6\xE7\xC5\xFD\xC5\x06\x01\x60\xC6\xF9\x8E\x6B\x00\x44\xC6\xAB\x3C\x46\xC6\xD2\x38\xA8", -"\x64\x36\xC6\x3B\x0E\x2D\x1F\x16\x86\x80\x35\x66\xC5\xCF\x51\x29\xC6\x4A\xC5\x51\xC6\x2C\xC6\xC4\x1E\x2E\xC6\xC4\xC5\x30\xC6\xEF\x50\x6E\xC6\xD6\xB8\x6E\x3A\x66\x5C\xD4\x00\x63\x68\x42\x90\xF2\xB6\xF8\xC5\x28\xC6\x0D\xC6\x45\x8F\xE8\xC5\x81\x0D\x7D\xC6\x13\xC6\xC6\xC4\x6D\xC6\x65\xC6\x5F\x56\xFF\x64\x92\x06\x06\xC6\x63\x68\x04\x85\xEF\xB2\xC3\xB0\x48\xC5\x64\xC6\x50\xC6\x0F\xC6\x7B\xC6\xBA\xC2\x6A\xC6\x6C\xC6\x84\xC5\x65\xC6\xA7\xC4\x0C\x0E\xB0\x70\xB5\x55\x1D\xC6\x72\xC4\x84\xAC\xB5\xC1\x5D\xB0\x66\x5C\xE6\x64\x16\x86\x90\x53\x76\xC6\x81\x12\x78\xC6\xD4\xC5\x3F\xC6\xA0\xC6\x06\x01\x81\x68\xAB\x8B\x7E\xC6\x91\xC6\xA4\xC6\x9E\xC6\xDA\x8A\xCE\x64\x85\x5A\xB2\xC4\x53\xB3\xD1\x5B\xC5\x05\x62\xC5\x27\xB3\x86\xC3\x10\xA4\xB6\x8E\x85\x9A\x29\x53\x62\x8D\xFD\xC1\x11\xC2\xA1\xC0\x3F\xC2\x7F\xBE\xA0\xBD\xBB\xB7\xA2\xBD\xD3\xBD\xA4\xBD\xD5\xBD\xA6\xBD\x6F\x7E\xC7\xC3\x6E\xA1\x58\xBA\xD2\xAD\xCB\xC3\x6D\xBD\x6C\x90\xB8\x65\xB5\xC0\x34\xAA\x11\xAD\x75\xBD\x01\x01\xCB\xC6\x94\x9A\x29\x68\xD2\x8D\xCF\xC6\xBF\xC2\xD1\xC6\x99\xC2\xD3\xC6\xDA\xC1\xA1\xBD\xBC\xBD\xA3\xBD\xBE\xBD\xA5\xBD\xC0\xBD\x3E\x87\x98\xC3\x48\xA1\x9A\xC3\x52\xC1\xD1\xC0\x9D\xC3\x5D\xBA\xD9\xBD\x71\xBD\x2F\xAD\x03\x01\x74\xBD\xB4\xBB\x06\x01\xE9\xC6\xA4\x9A\x5F\xC5\xEC\xC6\x7B\xC2\xE6\xBE\x2F\xC3\x6B\xC2\x31\xC3\x2F\xC2\x33\xC3\x4C\xBF\x35\xC3\x4E\xBF\x37\xC3\x9D\xBE\x39\xC3\xAA\xB5\xBD\x90\x7A\xB7\xED\xC0\xB6\xC3\x29\x65\x27\x01\xC7\xC6\x82\xA5\x6E\xBF\x4F\x04\x13\x31\x65\xC6\xDB\x59\xF0\xC0\xAE\xC3\xAE\xB5\x08\xC7\xE8\x9A\x73\xC5\xDD\xC0\xF6\xC2\x5D\xBE\x8D\x98\x1A\xC1\x5A\xBD\x1C\xC1\x79\xBF\x82\xBE\x95\xBF\x03\xC0\x95\x9C\xE4\xC2\xE2\xAA\xE6\xC2\x39\xC1\xA9\xBD\xE0\xA9\xAB\xBD\xA0\xBA\x04\xC4\xA2\xBA\x49\x84\x14\x81\x60\x9C\x2A\xC7\x1E\x9B\x25\x8F\xC0\x8F\xC9\xBC\x5B\xB4\xFF\xC1\x5C\xBC\x19\xBF\x00\xBC\x32\xC1\xAD\xB8\xA8\xC0\x7B\x9D\xE2\xC2\xAA\xB4\x39\xC7\xD8\xB2\x5E\x9C\xAD\xB7\x36\x89\x46\xC7\x30\x9B\x48\xC7\xEA\x8F\x47\xC3\x9C\xBD\x2E\xC7\xA2\xC0\x5E\xBE\xA4\xC0\x60\xA1\xB0\xBF\x1F\xC1\x87\xC2\xF0\xB5\xAB\xC0\x30\xBE\xAD\xC0\x2F\x97\xBB\xC3\xE3\xB3\xAE\xC4\x19\xB4\x94\xC3\x30\x0C\x0D\x61\x5B\xC7\x1D\x9A\x5D\xC7\x9E\x83\xD4\xC1\x8B\xBF\xEF\xC6\x16\xC3\xFD\xC0\xBA\xBD\xF3\xC6\xDC\xC1\xF5\xC6\xDE\xC1\xF7\xC6\xE0\xC1\x4C\x86\xFA\xC6\xE2\xA5\xFC\xC6\x11\x67\x53\xC1\x9F\x9C\xAE\xA0\x4F\xBD\x56\xC1\x8E\xC1\x27\x01\x75\xC7\x95\xC0\xEB\xC6\x3F\x8D\x2B\xC1\x57\xB8\xAC\xC2\xAD\xBA\x7D\xC7\xAF\xC2\x7F\xC7\x43\xC2\xB2\xC2\x45\xC2\xA0\xC2\x47\xC2\x1F\xC3\x90\x75\x6D\xC1\xE0\x5B\xF8\xB7\xF4\xC3\xDA\xC3\x0F\xBB\xF7\xC3\xF3\xBB\x5C\xAA\x75\xC4\x0C\xC2\x07\xC7\x5A\x9B\x93\xC7\x65\x8C\xED\xC6\xD5\xC2\xAF\x9D\xC1\xC2\xBD\xBB\x6C\xC2\x32\xBF\x59\xC2\x99\xBE\x5B\xC2\x9B\xBE\x16\xC7\x38\xBF\x18\xC7\x00\x85\x88\xC1\xE6\xC3\x8A\xC1\x65\xC4\xFD\xB9\x78\xAA\x8F\xC7\x09\x01\x91\xC7\x9E\xC5\x5C\xC6\x49\xC7\x94\xC1\x71\xBF\x96\xC1\x22\xB4\x98\xC1\xCA\xBF\xAC\xBF\x1A\xC0\xDD\xC2\x02\xBF\x66\xC7\xB5\xBC\x34\xC1\x69\xC7\x68\xC1\x7B\xB8\x6A\xC1\x78\xBA\x6E\xC7\xBB\xAA\xF1\xC3\xA1\x04\xF3\xC3\xD9\xC3\xF0\xBF\xF6\xC3\x50\xBE\x8E\xC4\x52\xBE\x3C\x0E\x54\xBE\x71\xB9\xC8\xC7\xAF\xC7\xCD\xC6\x0B\xC7\x29\xC2\x5B\xBE\x7D\xC2\xF7\xC2\xC2\xC0\x17\xC3\x4A\xBF\x12\xC7\xC6\xC0\xBF\xC1\xC8\xC0\x51\xC3\x85\xC1\x53\xC3\x30\xAA\x56\xAE\x01\xC4\x89\xC4\x03\xC4\x8B\xC1\x14\xB8\x38\x59\x60\xAE\xF8\xBE\x3F\x0A\xC9\xC7\xB6\xB2\x2C\xC7\x95\xC7\xA8\xB9\x66\xC3\x48\xBC\x4B\xC3\x5E\xBC\xB9\xC7\x34\xBF\xBB\xC7\x36\xBF\xBD\xC7\x50\xBF\xBF\xC7\xAC\xB7\x10\x92\x65\xB8\x41\xB5\x0A\xC8\xD8\x9A\x77\xC7\x2D\xC7\xB4\xC7\x2C\xC2\x7D\xBD\x25\xBE\x4F\xC7\x18\xC2\x51\xC7\xD9\xC7\x77\xB8\x6A\xC7\x0A\xBF\x6C\xC7\xD1\x97\x6C\xC4\xD5\x8B\x14\xC4\x08\xC8\x90\xC7\xEE\xC7\xB5\x31\xCE\xC6\x0C\xC7\x2E\xBF\x0E\xC7\x4A\xC3\xB7\xC7\x46\xC1\x13\xC8\x48\xC1\x15\xC8\x4A\xC1\x17\xC8\x4C\xC1\x19\xC8\xB9\x84\x1A\xC4\x8A\xC3\x1B\x5F\x1E\xC8\xA1\xB2\x20\xC8\x0D\xC8\x29\xBA\x0F\xC8\x7D\xC1\x3B\xC8\x7F\xC1\x6E\xC2\x81\xC1\x4F\xC3\x1B\xC2\x72\xC2\xEB\xBF\x74\xC2\x7F\x85\x20\xC4\x71\x87\x22\xC4\x11\x86\x69\x97\x09\xC8\x34\xC8\xE4\x3F\x21\xC8\xD1\x9D\xB5\xC7\xE7\xBB\x4F\xC8\x4C\xC3\x51\xC8\xBE\xC1\x3F\xC8\xC0\xC1\x41\xC8\xC2\xC1\xC3\xA7\xDD\xBB\xE0\x75\xEC", -"\x7D\x48\xC8\x76\x9B\xEC\x8E\x61\xC8\xCD\xA5\x23\xC8\xF8\xC2\x99\xC7\xC4\xC2\xB0\xC2\xC6\xC2\x9D\xC7\xC8\xC2\x9F\xC7\xB5\xC2\xC1\xBD\x55\xAF\xB4\x7B\x72\x63\x30\xC4\x89\xC6\x04\x64\x71\xC8\x87\x9B\x73\xC8\x4B\xC8\x7B\xBB\x4D\xC8\xAD\xC2\x78\xC8\xFA\xC2\x7A\xC8\xFC\xC2\x7C\xC8\xFE\xC2\x1D\xC3\x00\xC3\xA1\xC7\xC6\x80\x36\xC4\x30\x76\x45\xC7\x5F\xC8\x41\x8E\xB2\xC7\xF5\xC2\x22\xC8\x97\xC7\x97\xBB\x8E\xC8\x18\xC3\x90\xC8\x1A\xC3\x92\xC8\x1C\xC3\x7E\xC8\xCA\xC2\x80\xC8\x88\x7F\x76\xC2\x26\xBF\x70\xC8\x9B\xC8\x36\xC8\xF1\xC7\xD5\xC1\x96\xC7\x8C\xC8\x98\xC7\x9A\xC2\x7E\xC7\xD5\xC6\xF4\xC6\xD7\xC6\xF6\xC6\xD9\xC6\xF8\xC6\xD7\xBD\x25\xC0\x81\xC0\x9E\xBC\x46\xC4\x9A\xC8\xCC\xC6\x35\xC8\xF0\xC7\x4A\xC7\x99\xB4\x4C\xC7\xBD\xBE\x25\xC8\xD0\xBC\x27\xC8\x6E\xBA\x52\xC7\xDA\xA5\x6E\xC3\x14\x9E\x22\xBF\x38\xC1\x34\xAA\x5E\x8E\x5A\xC7\xAF\xC8\xC6\xC8\xCD\xC7\x14\xC0\x23\xBE\x17\xC1\xBE\xBE\xD6\xAB\x39\xA1\xD4\xAC\x6B\xC3\xA6\xA3\x37\xC7\xB2\x9E\x2D\xC8\xF1\x97\x50\xC4\x09\x65\x0E\xA4\xA1\xC6\xF2\xC0\xE8\xC6\xD8\xC8\x94\xC7\x9D\xC8\x69\xC2\x61\xC7\xD2\xC6\x68\xC3\x80\xBE\x63\xC1\x35\xC7\x65\xC1\xE4\xC8\xF9\x9E\xE6\xC8\x76\x98\xBF\xC8\x43\xC4\x1F\xBE\xCF\x5E\x84\xBF\xF0\xC2\x33\xC8\xC4\xC8\x60\xC8\x8A\xC8\xE5\xBB\x63\xC8\x92\xBC\xF6\xC7\xC4\xC0\xF8\xC7\x04\xC2\xFA\xC7\xF3\xC1\xFC\xC7\xA3\xC1\xFE\xC7\xF5\xBC\x6E\xC4\x26\xA9\x87\xB9\x9B\x6F\x41\xC7\x26\xC3\x81\x98\x96\xB4\x87\xC8\x91\xA5\x89\xC8\xF0\xC8\x48\xC3\xF2\xC8\xF0\xC6\xF4\xC8\xD4\xC6\x81\xBE\xD6\xC6\x7B\xBF\xD8\xC6\x7D\xBF\x23\xC0\xB2\xBE\xDF\xC7\x53\x94\x14\xC9\x14\xB6\x70\xC4\xE3\xAF\x0B\xC1\xE5\xAF\x0B\xC3\x1B\xC9\xEE\xC8\xB1\xC7\x37\xC8\x3D\xC2\xF3\xC7\x2F\xC7\xE0\x98\x31\xC7\x77\xBF\x33\xC7\x93\xBF\xF7\xC8\x9F\xC1\xF9\xC8\x4A\x9F\xFB\xC8\xF0\x98\x0C\xC4\xEF\xA8\xD5\xBF\xA6\xC7\x56\xC6\xE7\x8A\x17\xB6\x18\xC9\x87\x83\xF6\xA8\xB1\xC1\xAE\xC7\x04\xC9\x9C\xC8\x38\xC9\x97\xC2\x3A\xC9\x62\xC7\x30\xC7\x16\xC2\x9B\xC1\x3F\xC9\x9D\xC1\x41\xC9\xE0\xC2\x43\xC9\xAA\xA3\x45\xC9\xB6\x9E\x2F\xC8\x95\x81\xD8\xB9\x88\xC4\x98\xC4\x8D\xC5\x3E\xC3\xFB\xBC\xE8\xC7\x0E\xC0\x34\x9F\xAC\xC7\x78\xB6\x02\x63\x1C\xC9\x5E\xC5\xDB\x8E\xB0\xC8\xC7\xC8\x4B\xB9\x57\xC9\xF3\xC8\x61\xC1\xF5\xC8\x6A\xC3\x5E\xC9\x6C\xC3\x60\xC9\xC7\xA3\x62\xC9\xA3\x9D\x47\xC9\x3D\x63\x97\xC4\x4A\xC9\xA8\xC4\x53\xB6\xFC\xAF\x73\xC4\x0D\x90\x5C\xC3\x25\x99\xA7\x5B\x72\xC9\xA1\x8E\xCB\xC7\x5E\xC7\xF4\xC2\xF1\xC8\x9F\xC8\xB4\xC8\xA1\xC8\xB6\xC8\x9A\xC7\xB8\xC8\x80\xC7\xBA\xC8\x82\xC7\xBC\xC8\x84\xC7\xA7\xBD\x6B\xC4\x89\xC0\x8E\xC2\x5B\x68\x4D\xBB\xAF\x7C\xA6\xC6\x02\xB6\x79\xB6\xAA\xC4\x7B\xB6\x20\xC6\xF3\x6A\xC9\xC6\xAE\xB5\xBC\x8E\x53\xC9\x75\xC9\xDA\xC8\x4B\xC7\x39\xC8\x00\xC2\x10\xC7\x58\xC2\x0C\xC9\x31\xC2\x14\xC7\x33\xC2\x6B\xC8\x35\xC2\xEF\xBD\xDC\xC6\xDC\xB7\x49\xBD\x11\x9D\x6C\xBD\x7D\xA9\xE3\xC6\x79\xB3\x21\xBC\x93\xC3\x3C\xC1\xCC\xC0\x04\x64\xB0\xC9\xEA\xC6\xEF\xC7\xEF\xC8\x55\xC9\x14\xC3\x78\xC9\x22\xC9\x7A\xC9\x24\xC9\xF6\xC8\x26\xC9\x36\xC7\x21\xC0\x20\xBF\x81\xC9\x99\x9C\x86\xC7\x05\xA6\x88\xC7\xE3\x5F\x39\xB7\x18\x8B\x0A\xA6\x7A\xBA\xD5\xC0\xA1\xC3\x61\xBA\x5C\xB9\xCD\xC9\x09\xC7\x74\xC9\xD9\xC8\x0B\xB9\xE2\xB5\xF2\xC7\x65\xC3\xF4\xC7\xC2\xC2\xA2\xC8\xF7\xC7\xA4\xC8\x34\xC3\xA6\xC8\x36\xC3\x94\xC8\x38\xC3\x96\xC8\x5E\x84\xC2\xB3\x93\xBD\x7D\xBA\x4E\xC9\xAD\xC3\x79\x8B\x6E\xBF\x3F\x0A\xEA\xC9\x2B\xC7\x91\xC9\x78\xC7\x5F\xC7\x3D\xBE\x21\xC9\x7C\xC7\x98\xC9\x79\xC8\x9B\xC7\x9D\xC2\x81\xC7\x9F\xC2\x83\xC7\xA1\xC2\xAA\xC8\xE9\xC0\x14\x0E\x9E\xBA\x99\x62\x40\xC7\x04\xC8\x1D\x6C\xB7\xC3\xD5\x94\x05\xCA\x36\xC9\xFE\x8E\x76\xC9\x61\xB9\xC9\xC8\x18\xBF\xBB\xC1\x26\xC8\x4D\xC3\x19\xC2\x53\xC8\x88\xC2\x55\xC8\x1D\xC2\x12\xC9\x6B\x93\xBD\xC3\x56\xBF\xBB\x8E\x21\xCA\xCC\xC7\xEE\xC9\x1E\xB6\xF0\xC9\x2B\xC2\xA0\xC8\x2D\xC2\xB7\xC9\x6D\xC2\x3D\xC8\xF1\xC1\x0E\xC9\x06\xC2\x10\xC9\xF5\xC1\x2F\xCA\x34\xBE\xD3\xBA\x71\xC7\xCA\xC9\x46\xC8\x0D\x61\x06\xCA\x47\xC7\x0C\xC8\x1F\xC9\x60\xC7\x95\xC9\xF2\xC9\xB6\xC7\x3C\xCA\xB8\xC7\xB9\xC9\x5A\xC2\xBB\xC9\x5C\xC2\xBD\xC9\x5E\xC2\xBF\xC9\xCB\xC9\x4F\xC1\xDE\xC6\x53\xB7\x5A\xBA\x7C\xA9\xF5\xBD\x47\x93\x1C\xA2\xC7\xC7\x06\x01\x4B\xCA\x5C\xC7\x4D\xCA\xD1\xC9\x2E\xC3\xD3\xC9\x0D\xCA\xF1\xC6\x41\xC2\x10", -"\xCA\xB1\xC2\x12\xCA\xB3\xC2\xA8\xC8\x1E\xC3\x16\xCA\x92\x6F\xA3\xC7\xD7\xC3\x0C\xBB\x68\xC9\x4E\xBE\x58\xAA\xA9\xC7\x4E\xB8\xAB\xC7\xDE\xB5\x04\xB5\x20\xCA\xB1\xC9\xED\xC9\x79\xC7\x92\xBE\xD6\xC1\x08\xC9\x48\xBF\x0A\xC9\xEF\xC1\x3E\xCA\x6F\xC2\x40\xCA\x71\xC2\x42\xCA\x08\xC2\x43\xC8\xBC\xA1\xC1\xC7\xF1\x9C\x32\xC9\x0A\xC3\x3C\x0E\xEB\xC3\xA6\xBC\x09\x01\x67\xCA\x76\xC7\x69\xCA\xB1\xC8\x7A\xC7\x49\xC3\xB6\xC9\x8B\xCA\x32\xC3\xF6\xC9\x13\xC7\xF8\xC9\x15\xC7\xFA\xC9\x17\xC7\xFC\xC9\xC4\xC1\x16\xBA\x8C\xA2\x6E\xBB\xFB\xAD\xC9\xC1\xA4\xC4\x05\xC4\xEA\xC7\x96\xB4\x9D\xCA\x92\xC7\xCF\xC9\x37\xC9\xA0\xCA\x87\xCA\xB3\xC8\x51\xCA\x64\xC8\x53\xCA\x3C\xC8\x55\xCA\xBA\xC7\x57\xCA\xBC\xC7\xAA\xCA\xBE\xC7\xAC\xCA\x63\x7B\x6C\xBB\xF4\x96\x3D\xA7\x02\xC8\xC8\xC1\x2E\xC0\xB3\xCA\x2E\xC4\x06\xC4\x72\x0F\x36\x89\xB7\xCA\xCA\xC7\x0A\xC7\xD0\xC9\xBB\xCA\x64\xC3\x39\xCA\x96\xC9\x3B\xCA\xA4\xCA\x11\xC7\xA6\xCA\xF9\xC7\x69\xC8\xFB\xC7\x59\xCA\x52\xC3\x93\xCA\x7F\x8C\x8E\xBB\x41\xB5\xD5\xCA\x0B\xC8\x08\xCA\x74\xC8\xFB\xA6\x3A\xCA\x24\xC8\x4E\xC7\xCC\xC8\x29\xCA\x28\xC8\x68\xC7\x2A\xC8\xDB\xC7\x98\xBA\x71\xC3\x64\xC9\xF8\xC1\xF6\xA2\x32\xC8\x9C\xCA\x34\xCA\x92\xC9\x2D\xC3\xD0\xC6\xA2\xCA\x4D\xC7\x27\xCA\xF2\xCA\x67\xC8\x4E\xC3\x8F\xCA\x50\xC3\xE4\xCA\xFD\xC7\xE6\xCA\x35\x8D\x45\xC8\x7D\xB3\x1B\x5F\xEA\xCA\x1F\xC8\x9F\xCA\x23\xCA\x5A\xBC\x25\xCA\xDD\xC8\xCB\xC8\x05\xBE\x50\xC7\xCE\xC8\x29\xC8\x95\xB8\x2B\xC8\x6F\xC3\xDC\xC7\xF9\xCA\x83\xC9\x3E\xAB\xFE\xC8\x58\xBE\x99\x72\x5B\xC8\x44\xAB\xFE\xCA\x84\xCA\xD8\xCA\x15\xCB\x1F\xBD\x88\xCA\x76\xC8\xF5\xC7\xF4\xC9\x0B\xC9\xE0\xCA\x0D\xC9\xE2\xCA\x0F\xC9\x0B\xCB\x11\xC9\x6D\xC8\x27\xC4\xDE\xBB\xAF\xC9\xFF\xCA\x09\xCA\x93\xC9\x20\xC9\x50\xCA\x3B\xC9\xDC\x9C\x64\xC7\xAE\xA1\xD7\xC7\x04\xBF\xCF\xC8\xFC\xA9\x54\xC7\xF2\xB5\x56\xC7\x8D\xB4\x3B\xC7\x8C\xC2\xA2\xC9\x3C\xBF\x4C\xC2\x3C\x0E\x4E\xC2\xFD\xCA\x66\xCA\x3E\xCB\xED\xCA\xB9\xA7\x58\xC9\x3C\xC9\x5A\xC9\xDC\xC2\x5C\xC9\xDE\xC2\x7D\xC9\xE3\xC8\xDA\xC9\xB5\xBF\xDC\xC9\x45\xA6\x51\xB5\x61\xC2\x92\xA3\x60\x9C\x12\xCB\x49\xC8\x14\xCB\xB3\xC9\xC8\xC8\xB5\xC9\x04\xCB\x11\xC8\xBC\xC1\x07\xCB\x2A\xCA\x09\xCB\x54\xC8\x91\xCA\x73\xC2\x44\xCA\xD3\x97\x1B\xB9\xD5\x97\x3D\xCB\x2B\xCB\xBA\xCA\x2D\xCB\x2A\xC2\xE4\xBD\x30\xCB\xF3\xC9\x0E\xCA\x8F\xC8\x70\xCA\x7B\xC8\x72\xCA\x9E\xC7\x14\xCA\xA0\xC7\x76\xCA\xA2\xC4\xC0\xC8\x61\xC4\xC2\xC8\xE9\xCA\x58\xCB\x06\xC9\x5E\xC1\x89\xCA\x60\xC1\x63\xC7\x69\xC3\xA5\xC0\xE2\xC8\xC3\xA3\x7F\xC9\x80\xA8\x65\xCB\x68\xA6\x67\xCB\x15\x0E\xD6\xC8\x6A\xCB\x94\xCB\x4E\xCA\x0B\xCA\x42\xCB\x5B\xCB\x44\xCB\x9A\xCB\x65\xC7\x1E\xC1\xD8\xC7\xF5\xCA\x1E\xCB\xF7\xCA\xEB\xBA\x22\xCB\x2C\xC9\x82\x86\x07\xAC\x5A\xB9\xEB\xC8\x04\xCA\x33\xCA\x7F\xCB\x22\xCA\x6E\xCB\x77\xC9\xF1\xC9\x43\xCB\x51\x9D\x45\xCB\xCA\xA2\x9C\xCB\xA3\xA7\x9E\xCB\x06\xA9\xA0\xCB\xEB\xA6\xFD\xC8\x6E\xC0\x52\xCB\xC7\xA4\x01\xC9\x9B\xCA\x57\xCB\xBC\xCB\x35\xCA\x86\xCA\xDA\xCA\x83\xCB\xEF\xCA\x77\xC8\x86\xCB\xA3\xC8\x88\xCB\x91\xC8\x8A\xCB\x7D\xC8\x8C\xCB\x7F\xC8\xA0\xC9\x51\x76\xBE\xBC\x86\xC9\x9F\xBF\xEB\xC2\xBF\xAF\x7F\xC4\x8A\xB9\x68\xC4\x4C\xAC\x6B\xCB\x72\xC8\x4A\xC8\xA7\xCB\x7C\xBE\x19\xA4\xD4\xC9\x99\xCB\x7B\xC9\x9B\xCB\x61\xCB\x9D\xCB\x63\xCB\x04\xC0\xC9\xCB\xB8\xBF\x23\xCB\x1A\x99\x60\xC4\x25\xC3\x72\x9B\xBD\xBF\x9E\xB9\xBF\xBF\xDA\xBF\x34\xC9\x65\xCA\x03\x01\xEC\xCB\x88\xC8\xEE\xCB\x6A\xCA\x02\xCB\x0C\xCA\x30\xC3\xDE\xCA\xB8\xC9\x34\xCB\xBA\xC9\xA8\xCA\xBC\xC9\xC6\xCA\x18\xC8\xC8\xCA\x32\x7F\x85\xC9\xE4\xC7\x10\xC3\xA7\x70\x86\xAC\xE8\xCB\x27\xC3\x6F\xC9\x77\xB0\x83\xCA\xCE\xC9\xC5\xC8\x2C\xCB\xBE\xCB\x24\xCA\x70\xCB\xCA\xC8\xF1\xCA\x1A\xCB\xCD\xC8\x82\xBB\x1D\xCB\x72\xBA\x1F\xCB\xD2\xC8\xB7\xBF\xE0\xAC\xB5\xCB\xBE\xB9\x3B\xC3\xA1\xAC\xE5\xC7\x6A\xC9\x8D\xC4\xF8\xC3\x30\xBB\xFE\xBC\xB6\xCA\xA6\xCB\x0B\xCC\xEE\xC6\x03\xCB\x29\xCC\x05\xCB\x2B\xCC\xF3\xCA\x1C\xCB\xB0\xCB\x2F\xCC\xB2\xCB\x49\xBB\xD4\xC8\xFE\x62\x19\xCC\xCA\x84\x70\xC9\x14\xBD\x0C\xC0\x6C\xC9\xF9\xC3\x38\xB0\x8C\xC9\x2F\xA9\xA7\x5B\x08\xCC\x1D\xC9\x0A\xCC\xD9\xCA\xAA\xC2\xDB\xCA\xBE\xCA\x09\xC9\x32\xCB\x8C\xCA\xC2\xCA\x14\xC8\xC4\xCA\x16\xC8\x15\xCC\x42\xC8\x17\xCC\x12\xBA\x25\xCB\x8F\xBE\x5F\xC0\x75\xC3\xAD\xC6\xB2", -"\xCA\xA8\xC9\x59\xB0\x79\xC3\xB0\x77\x57\xB0\xAE\xC9\x5C\xB9\xC3\x8E\xD2\xCB\x00\xCB\xA9\xC2\x0D\xC7\x6C\xCA\x0E\xCC\x61\xCC\xA5\xCA\xDB\xCB\xA5\xC8\xDD\xCB\x93\xC8\x74\xCA\x95\xC8\x85\xC7\xC0\xC9\xCE\xC0\xCA\xC3\x60\xCA\x43\x87\x7F\x95\x4E\xBD\xB0\x61\x55\x86\xC4\xC3\xEC\xC8\x00\x00\x78\xCC\x23\xCC\x05\xC9\xEF\xCB\xA3\xBE\x97\xC1\x74\xBF\x99\xC1\xCB\xBF\x5B\xC9\xFD\xBF\xD6\xC7\xAE\xCB\x48\xCB\x2E\xCC\x45\xBB\x4A\xCC\x8D\xBD\x4A\xBB\x3D\xBA\x8A\xCC\x3F\xBA\x5B\xBA\xFF\xC6\xD3\xC0\xFF\x9B\xFB\xB0\x84\xA0\xD7\xC0\xAE\xB5\x94\xCC\xEB\xC9\xC7\x99\x54\xC9\x5C\xCC\x7C\xCC\xC0\xCB\xAA\xCB\xC2\xCB\xAC\xCB\x46\xCB\xA0\xCC\xD4\xA7\x68\xB6\xC7\xCB\x6C\xAA\xFA\xCB\x33\xCC\xE8\xC8\x08\x0E\xC1\xA9\x51\x83\xAB\xC3\xFF\xCB\xF3\x76\xC6\xC6\x46\xC5\x9D\xBA\x78\x5A\x73\x31\x4A\x39\xE7\x39\x5A\x0C\xBF\xC6\xB4\x31\x73\xC5\x27\xC7\x03\xCA\x82\xCA\x9B\xC5\x3F\xCC\xB6\xCC\x38\xC8\x7D\xCC\x0F\xC7\x0F\xCC\x3D\xCA\x63\xCC\x3E\xC8\x65\xCC\x40\xC8\x67\xCC\x6C\xC8\x69\xCC\x17\x9C\x18\xCA\xAA\xBD\x74\xAD\x1B\xCA\xC4\xC7\xAE\xBD\x43\xC7\xD3\x73\x36\x89\xB2\xCC\x07\xCA\xD7\xCA\x80\xCB\x26\xCC\x16\xCB\x28\xCC\x26\xCA\x72\xCB\x28\xCA\x74\xCB\xF4\xCA\x2B\xCA\xDA\xC7\x89\xC2\x70\xC3\x4C\xCC\x91\xAD\x59\xC7\x60\x9C\xF2\xCC\x4C\xCA\xEC\xCA\x95\xCB\xC0\xC2\x84\xCB\x52\xCA\xDF\xCC\x54\xCA\x11\xCC\x56\xCA\x13\xCC\x58\xCA\xE5\xCC\xBE\xC9\xE7\xCC\x87\xC1\x46\xCA\xDC\xBD\xD8\xCC\x09\x01\x06\xCD\x68\xCA\x08\xCD\x97\xCC\xFB\xBE\x99\xCC\xF9\xBF\x9B\xCC\xD3\xC7\x31\xC1\x2C\xCC\x09\xBE\x49\xCB\xFB\xAE\x4B\xCB\x72\xB7\x4D\xCB\xBB\xB9\x3E\xC0\x56\xAD\x57\xBA\xC9\xC3\x59\xBA\xA9\xCC\x61\xCA\xCD\xC3\x3B\xB4\xE3\xB7\x06\xCC\x02\x01\x1B\xCD\x9E\xCA\x1D\xCD\x40\xCC\xB3\xC7\x62\xC8\x0B\xCD\xBF\xCA\x0D\xCD\xC1\xCA\x0F\xCD\xC3\xCA\x11\xCD\xC5\xCA\x85\xCC\xFB\xC9\x8E\xCB\x50\xB4\xE1\xC7\x03\x0B\xD8\xC3\x4F\xCC\x38\xCC\xA8\xC7\xE7\xC7\x3B\xCC\x72\xBB\xDF\xC3\x1C\xBE\xA7\x5B\x39\xCD\xB8\xCA\x24\xCC\xF5\xCC\x36\xCA\x29\xB7\xD5\xCB\xC0\xC0\x3F\xCD\x60\xCC\xD9\xCB\xF5\xC9\x81\xCC\xF7\xC9\x83\xCC\xA7\xC8\xDF\xCB\xA9\xC8\xE1\xCB\x06\xC1\xE5\xC3\x96\xCA\x0D\xC0\x54\xCC\xEA\xC3\x96\xB4\x57\xCD\xD6\xCA\xEC\xC9\x25\xCC\x5B\xCD\x32\xB8\x5D\xCC\xD6\xCB\xDC\xCA\xF0\xCA\x44\xCC\xFC\xBF\x1B\xCB\x2D\xCC\x48\xCC\xA3\xCC\x00\xCD\x21\xCB\x02\xCD\xC3\xC9\x0A\xBB\x4F\xBB\x98\xAA\x02\xC4\xCE\xCA\x04\xCC\xB5\xCA\x37\xCD\x01\x01\x71\xCD\xEB\xCA\xF4\xCC\xBD\xCB\x75\xCD\x74\xB9\x5D\xCD\x2F\xCB\xD7\xCB\x31\xCB\x61\xCD\x33\xCB\x63\xCD\xA7\xCA\x65\xCD\xF9\xC9\x47\xCD\xAB\xCA\x49\xCD\x49\xBE\xC5\xC1\xCB\xCA\xBF\xAA\x7B\xCA\x72\xBE\x7D\xCA\x51\xCD\xAA\xC7\xCC\xC1\x74\xBB\x05\xCD\xDA\xCC\x81\xCB\x38\xCA\x78\xCD\x5F\xCC\x8A\xCA\x7F\xCC\xDF\xCA\x9A\xCD\xE1\xCA\xE3\xCC\x6A\xC8\x13\xCD\x5A\xCA\x15\xCD\x30\xCA\x0E\xC4\x65\x9D\x41\xB5\x8E\xCD\x13\xCB\x3B\xCD\xDB\xCC\x39\xC9\xB8\xCC\x79\xC9\xF3\xCB\xD6\xC9\x7C\xC9\xD8\xC9\xF8\xC8\xF8\xCB\x38\xC7\xC2\xCC\x8F\xAD\xFC\xCB\x84\x9D\x55\x9A\x35\x92\x4F\xC2\x8D\xCD\xAD\xCD\xF6\xCC\x2E\xCB\xBD\xCA\xC1\xCB\x5C\xA1\x5D\xCB\x83\xC2\xD5\xC7\x1C\xC0\xC5\xCB\x18\xAB\xC0\xCC\x1C\xAB\x2A\xC9\x7F\xBF\xB1\x6E\x0F\xCB\x3F\xB7\x0D\x61\xC0\xCD\x6C\xCB\xC2\xCD\xAE\xCD\xB2\xC8\x0E\xC8\xB1\xCD\x98\xCB\x59\xC9\xC3\xCB\x66\xA3\xE0\xCD\x9F\xAB\xE2\xCD\xB9\xAC\xE4\xCD\xB7\x92\x64\xC9\x59\xC8\xDC\x7F\x28\xCB\xB3\xA7\x1A\xCD\xD6\xCD\x92\xCD\xA6\xB9\xBC\xCA\xEF\xCD\xDA\xCD\xA0\xA2\xF3\xCD\xA2\xA3\xF5\xCD\xB5\xAC\xF7\xCD\xE3\xC2\xCE\xCD\x7A\x8D\xDF\xBE\xCB\xC9\x3F\x0A\xEA\xCD\xED\xCB\x6D\xCB\x02\xCE\x27\xBA\x04\xCE\x4C\xC8\xF0\xCD\xD8\xC1\x6E\xCA\x9B\xC2\xB5\xCD\x35\xCB\xB7\xCD\xE3\xCA\xB9\xCD\xE5\xCA\xBB\xCD\x85\xC4\x59\xC4\xE9\xC3\x55\xCB\x85\xC8\x12\xCE\x01\xCE\xD4\xCB\x77\xCD\x5E\xCD\x96\xCD\x85\xCB\x1C\xCE\xB7\xC8\x25\xC9\xB9\xC8\x27\xC9\xBB\xC8\x29\xC9\xDA\xC6\x24\xC0\x7D\xA6\x68\xCB\x8D\xAB\xAC\xCD\x79\xCC\x3F\xCB\x01\xCB\x41\xCC\x0D\xCC\xDE\xCC\xB3\xCD\x10\xCC\x1E\xCE\x12\xCC\x9C\xCD\xA9\xCA\x9E\xCD\xC7\xCA\xA0\xCD\x32\x96\x11\x0E\x23\xBC\x77\xCC\x2B\xCE\x0A\xCA\xF0\xCB\xDA\xA8\x71\xCB\x65\xC8\x12\xC8\xE1\xCC\x3F\xCA\x36\xCB\x41\xCA\x38\xCB\x43\xCA\x0D\xCB\x34\xC4\xCC\xCB\x5E\xC0\x51\x5C\x92\xCB\xD4\xCD\x93\xCC\x51\xCE\x40\xCB\x4F\xCA\x3E\xCD\x2F\xCE\x0C\xCD\x44\xCE\xE0\xCC\x43\xCD\x64\xCC\x45", -"\xCD\x66\xCC\x4A\xCE\x16\xCC\x4C\xCE\x97\xC8\x4B\xC4\x65\x9E\xBF\xCD\x66\xCE\x40\xCE\x3D\xCD\x75\xC8\x6A\xCE\x40\xCD\x6C\xCE\x0E\xCD\x46\xCE\x10\xCD\x48\xCE\x14\xCC\x72\xCE\x68\xCC\x74\xCE\xFD\xC9\xB7\xCB\xB9\xC2\x8B\xAF\x10\xA4\x13\xCE\x09\xCC\x15\xCE\x2C\xCE\xB7\xCC\x5E\xCC\x06\xCE\x35\xA6\x08\xCE\xBF\xA3\x0A\xCE\x73\xAE\x0C\xCE\x55\xC7\x0E\xCE\xB7\xB8\x34\xCC\x6C\x63\x26\xCE\xA6\x84\xCF\xCB\x0D\xC3\x2A\xCE\x3E\xCE\x59\xCB\x9C\xAD\x79\xCD\xD8\xCB\x31\xCE\x99\xC9\x33\xCE\x9B\xC9\x35\xCE\x9D\xC9\x37\xCE\xBD\xC8\x39\xCE\x9C\xBC\x03\xC3\x37\xCC\xEA\xC2\x46\xAC\xE7\xCB\x4E\xC9\x23\x77\x8C\xCD\x65\xCE\xA4\xCE\x09\xCD\x7B\xC7\x7E\xCC\x98\xCD\x62\xCC\x6E\xCE\xE2\xCC\x70\xCE\xE4\xCC\x85\xCE\xE6\xCC\x87\xCE\x38\x8A\xBB\xBF\xA5\xCD\x01\xCC\xBD\xBF\x63\xAC\x1E\xCC\xC4\xBC\xEA\xCB\x29\x5D\x8D\xCE\x5A\xCC\x8F\xCE\x52\xCE\x98\xCC\xD0\xC7\x9A\xCC\xD2\xC7\x3D\xC9\xAD\xBF\x9E\xCC\xDF\xCD\xF6\xCB\xC6\xCB\xCC\xCD\xE5\xC8\xF9\xCD\x6D\xC7\xBC\xAC\x36\xCC\xEF\xC0\xE7\xC1\x7D\xC4\xD9\xBF\x73\xC1\x50\xC9\x6E\xA2\xD9\xCC\xBC\xCE\x1E\xCD\x59\xBF\x20\xCD\x18\xC1\xFA\xBF\xDC\xCD\xE0\xC8\x6F\xAE\x97\xCE\xE0\xAE\x99\xCE\x4C\xCB\x9B\xCE\xE1\xB3\xD0\xCD\xDE\xAF\x55\xC3\xCD\xCA\x3D\x8A\xF2\xBF\xB8\xCE\xCB\x81\xBA\xCE\xD3\xCE\x73\xC9\xB4\xCC\xB2\xC9\x16\xCE\xCA\xBD\x18\xCE\x8B\xC8\x1A\xCE\x14\xC2\x18\xC0\x95\xCE\x9F\xA7\xF8\xCE\x65\xB4\xE1\xCE\xFA\xC8\xE3\xCE\x2E\xC8\xFE\xCE\x20\x64\x49\xC9\x1A\xCC\xD7\xB1\x1F\x4C\x15\xBD\x6D\xCD\x3C\xCC\xFF\x00\x58\xB6\x5B\x9F\xE9\xCD\x79\xCE\x7B\xCC\xDC\xCC\xC5\xCD\xF2\xCB\xF2\xCD\xBB\xCC\xC4\xCB\xDF\xCE\xE1\xCD\x16\xCF\x44\xC9\x18\xCF\xE7\xC8\x81\xC8\x94\xC0\xA6\xC4\x29\xC0\x12\xA5\x5C\x09\x49\x99\x74\xCC\x38\xCF\x6B\xBF\x09\x83\x27\x01\xDB\x00\xC3\xC6\x3A\xC1\xA3\x06\x45\x23\x42\xCF\x4D\x99\xD3\xC4\x21\xC7\x04\x64\x54\xC6\x95\xCC\xE6\xC5\x0C\x83\x1D\x7E\xDD\x00\x46\xCF\x70\xC7\xA4\x06\x0B\x1C\x51\xCF\xD5\x69\x5B\x98\xDF\x00\x80\xC3\xC2\x9F\x80\x69\xEC\x4C\x86\xC5\xDE\xC5\x65\xC6\xAC\x86\x55\xB3\x9B\xC0\x04\x64\x29\x8F\xE3\xC4\xA3\xA1\xB5\xCC\xED\xCD\xA1\xCA\x42\xCE\x3A\xC8\xC0\xCA\x50\xC8\x8D\xCA\x52\xC8\x76\xCB\x2C\xCA\x78\xCB\x56\xC8\x4D\xC1\x5C\xCA\xC8\xC3\xC2\xC9\x6B\xBD\x4B\xBD\xA9\x95\x8D\xCC\x4E\xA1\x3C\xB7\xFC\x6A\x72\xC7\x2E\xCD\x02\x63\x64\xCF\x25\xCF\x07\x7F\x68\x51\x91\xCD\x90\xCE\x29\xCF\x92\xCE\xB9\xCC\xDB\xCD\x12\xCF\x78\xA8\x14\xCF\x48\xB6\x31\xCF\x61\xC9\x33\xCF\xDC\xB2\xDE\xC9\xE3\xB2\xE0\xC9\xD8\x60\xE2\xC9\x6E\xBD\x9E\xC3\xE5\xC9\x02\xC7\x15\xB1\x0E\xA6\xEC\x7D\x82\xCF\xC7\xAC\x61\x4F\x4D\x4F\xA5\xCE\xC0\xAE\xC6\xCD\x2C\xCF\xF4\xCB\xAD\xCB\x8E\xCF\xBF\xCC\x90\xCF\x80\xC9\x92\xCF\x46\xC9\x9D\xCE\xD4\xC0\xC0\xA9\x24\xA6\xAA\xC3\x1D\xC7\x0D\x0E\xC5\x05\x76\xC5\x3B\x83\xDC\x5A\x3D\x59\x43\x4F\x98\x40\xB6\xC6\x52\xBB\x84\xCF\x0D\x43\xD6\xCC\x9F\xA1\x5C\xB9\xA0\xCF\x5D\xC3\xA2\xCF\x2A\x4F\x7A\xCC\x63\xC3\x2D\xCE\x95\xCD\xA7\xCE\x97\xCD\xA9\xCE\x0F\xCA\x9A\xC9\x9C\xC7\x83\xCE\x12\xCD\xC6\xCE\x14\xCD\xC8\xCE\x94\xCA\x3D\xC7\x94\xB7\xEB\xCC\xE2\xA9\xED\xCC\x98\xB7\xEF\xCC\xD9\x78\x36\x89\xC5\xCF\x8D\xC9\xB5\x64\x0D\x43\xA4\xCF\x7D\xBE\xA6\xCF\x5C\xCB\x8C\xCF\x9B\xAB\xBD\xCC\x75\x96\xA9\xC0\x71\xCF\x5C\xCE\x92\xCA\x24\xCE\x8D\xBB\x04\xCD\x41\xB5\xE2\xCF\x57\xCC\xE4\xCF\x82\x40\xE6\xCF\xF1\xCB\x6D\xCA\x23\xC9\xF2\xC6\xD1\xCF\x11\xCA\x9C\xC9\x13\xCA\x9E\xC9\x15\xCA\x69\xCD\x89\xC3\x4D\x99\x18\xCD\xE7\xC6\x00\x00\xF6\xCF\x2A\xB8\xC0\xCF\xF9\xCF\xBD\xCE\x42\xCC\xF9\xCC\x56\xCE\x73\xCB\x6E\xCF\x68\xC8\x20\xCE\x37\xCB\x22\xCE\x0C\xCB\x35\xB7\x94\xCF\xF3\xB2\x84\xCD\xE0\xC6\xE6\xB2\x5D\x96\xA0\x9C\x55\xC1\x64\xCA\xD1\xCE\xA7\x5B\x0B\xD0\x71\xC1\x0D\xD0\x50\x45\xFA\xCF\x54\xCE\x43\xCC\xFA\xCC\x06\xCB\x14\xD0\x08\xCB\x5A\xCE\x90\xCA\xF0\xCF\x79\xCB\x5E\xCE\x9A\xB3\x66\xC9\xF8\xAD\xB2\xB4\x9B\xAA\x70\xCC\xDE\xC3\x74\xC1\x58\xB4\x1B\x5F\x26\xD0\xF5\xC3\x66\xCF\x0A\xCF\x87\xCF\xC4\xCD\x89\xCF\xE8\xCF\xAB\xCB\xA8\xCF\xBC\xCC\xAA\xCF\x93\xB8\x6D\xC3\x4B\xA4\x31\xCC\x06\xC0\x97\xA1\x95\xCA\xE7\xC3\x52\xCD\x17\xBD\xC6\xC7\x24\xD0\x3F\xD0\x1A\xBD\x28\xD0\xA3\xCF\x0F\xD0\x6A\xCF\xA3\xCA\x7F\xCE\x42\xCD\x81\xCE\x44\xCD\xD3\xCF\x46\xCD\x67\xCD\x75\xCA\x05\xD0\x4A\xCD\x85\xCD\x4F\x5C\x28\xB8\x1D\xCF\xDC\xB9\x73\xBE\xCF\xCA\x2D", -"\xC4\x19\xC9\xFA\xC3\xBA\xCE\x40\xD0\xA7\xC7\x5E\xCF\x85\xCA\xD6\xCE\x1F\xCD\xD8\xCE\x21\xCD\xDA\xCE\xF5\xCE\xB6\xA4\x85\xC2\x75\xCB\x31\xD0\x0A\xCB\x18\xD0\x39\xCB\xF2\xCF\x31\xCD\x66\xC9\x01\xC8\xCB\xCE\xBF\xCF\x6E\xD0\x8A\xCD\xFF\x00\x07\xC8\x29\xCE\x27\x01\x74\xD0\x4F\xCD\x76\xD0\x74\xCD\x44\xD0\x56\xC9\x2A\xCF\xFC\xCF\xD5\xC9\xFE\xCF\xAB\xCE\xD2\xCF\x01\xD0\x73\xCA\x65\xD0\x86\xCC\x67\xD0\x8D\x85\xE8\xCA\x64\xCE\x91\xD0\x3D\xC3\x87\xC5\x43\xD0\x78\xD0\xF1\xCE\x7A\xD0\xF3\xCE\x22\xCD\xDB\xCE\xD4\xC7\x5F\xCB\x9F\xCC\x4B\xD0\xAF\xB8\x4D\xD0\x99\xA9\x20\xCB\xF8\xCA\x83\xCD\x58\x74\x31\xC8\x8F\xD0\x09\x01\xA5\xD0\xC1\xAA\x5A\xD0\xC8\xCF\x3F\xCE\x28\xCF\x45\xD0\xB0\xCD\x93\xCE\x4F\xA7\xEA\xCF\x14\xAC\xEC\xCF\x31\xA2\x53\xC7\xD1\xC8\xE9\xA6\x50\xD0\xED\xA3\xE7\xCD\x23\xBA\x58\xD0\x65\xCF\xA7\xD0\x77\xD0\x67\xCE\xA8\xCB\x69\xCE\xCD\xCF\x30\xCE\xFD\xCF\x6F\xCA\xFF\xCF\x71\xCA\x9D\xD0\x8B\xCB\x03\xD0\x8D\xCB\xA1\xD0\xD4\xC3\x8D\xC2\xCD\xCB\x58\x72\xFE\xCD\x7C\x92\xBC\xD0\x59\xD0\xF8\x96\x85\xCF\xD3\xCB\xA9\xD0\xA8\xBF\xF2\xCE\xDE\xC8\x2E\xBA\xF6\xCE\x16\xAF\xC9\xD0\xF3\xA7\xEE\xCF\xFF\xCC\x2D\xCA\x8A\xC2\xDE\xBE\x6E\xC8\xCF\x7A\x9F\xCF\xEB\xD0\xE8\x91\xED\xD0\xC9\xCF\xE2\xBD\x69\xCF\xA9\xCB\x47\xD0\xBA\xCC\x49\xD0\x2E\xCF\xCA\xCD\x42\xC9\xAC\xCF\x9F\xCB\xAE\xCF\x63\xC9\x1A\xCF\x81\xB5\x90\xCB\xFF\xCB\x83\xC8\xF7\xBE\xBB\xD0\x06\x01\xBD\xD0\x6D\xD0\x01\xD1\xE5\xCF\x5C\xD0\x06\xD1\x2B\xCF\xE9\xCF\x2D\xCF\xF4\xCD\x2F\xCF\xF6\xCD\x0D\xD1\xC8\xCB\x0F\xD1\x82\xC9\xB0\xCF\x8F\xCC\x0F\xBC\x69\xCB\xF5\xCF\x00\xD1\x8E\xC5\x0E\xD0\xF0\xCE\xF0\xD0\xAB\xD0\xF2\xD0\x3C\xBB\xF4\xD0\x44\xB6\xF6\xD0\x98\xAC\xCB\xD0\x4E\xD0\xCD\xD0\xE5\xC2\x0E\xBC\x4E\xCE\x1C\xB9\xC4\xCF\x2E\xD1\x42\xD0\xD5\xD0\x7A\xCE\x9E\xC8\xD8\xD0\x0F\xCF\x89\xBA\xBF\xBE\xFB\xCC\x2F\xD0\x80\xD0\x16\xD0\x5B\xCE\x83\xD0\x5D\xCE\x85\xD0\x58\xC8\x9F\xCE\x67\x7B\x63\xCE\x56\xCB\x03\x01\x19\xD1\x5D\xCF\x02\xD1\xC1\xD0\xCA\xCF\x91\xCE\xC4\xD0\x8A\xCF\x07\xCE\x21\xD1\x09\xCE\x23\xD1\x0B\xCE\x25\xD1\xC1\xCC\x27\xD1\x72\xA3\x29\xD1\x74\xAF\x76\xCE\xE9\xAB\xA4\xD0\x42\xD1\xD4\xD0\x94\xD0\xEF\xD0\xC7\xBF\x33\xD1\x19\xCB\x7C\xCD\x25\xCD\x2A\xBE\x27\xCD\xA7\xB4\x29\xCD\x79\xB8\x2B\xCD\x8B\xBB\x51\xD0\xCD\xC4\x6C\xBF\xB9\xCB\x19\xCD\x18\xD1\x6F\xD1\x93\xD0\x5A\xCD\x95\xD0\xD2\xC9\x97\xD0\xBF\xCE\xCF\xCF\x87\xCB\xDD\xD0\x89\xCB\xDF\xD0\xDE\xCB\xE1\xD0\xE0\xCB\xBE\xC8\x35\xCF\xA3\xC9\x87\xBC\x20\xCC\x87\xC9\x93\x62\x59\xD1\xDD\xC5\x5B\xD1\x2A\xD0\x35\xA9\x2C\xD0\x12\xD0\x4B\xD1\x58\xCE\x8E\xCA\x81\xD0\x77\xCB\x33\xD0\x73\xCF\x35\xD0\xD8\xBC\x02\xB7\xE9\xC2\xE5\xCB\xB6\xCE\xA1\xBF\xCF\xCE\x5D\x0F\xA4\xBF\x51\xC9\x58\xD1\x85\xD1\x9D\xD1\x1D\xD1\x47\xD1\xC5\xD0\x3F\xAA\xC7\xD0\xE1\xC8\x64\xD1\x98\xCE\x66\xD1\xE3\xCD\x38\xCE\x2B\xC9\xE5\xCE\xB3\xCE\xE7\xCE\x05\xC3\xC1\xBC\x03\xCC\x73\xC1\x0C\xC3\xB3\xD1\x02\x01\x9B\xD1\x69\xC9\x70\xD1\x87\xD1\x72\xD1\xCF\xC7\x9C\xB4\xC9\xBF\x2C\xBC\xAE\xD0\x24\xCD\x46\xCC\x7E\xCD\xFE\xCC\xF6\xCA\x81\xCD\xB7\xD0\x8B\xC2\x4D\xCC\x1C\xCF\x4E\xCD\x1B\xCC\xE9\xCE\xF3\xA8\x9C\xC4\x80\xC4\x98\xD1\x1E\xCF\x63\xCF\xB5\xD1\x1C\xD1\x31\xD1\x73\xD1\xD3\xD1\xD1\xC7\xD5\xD1\x7D\xD0\xA3\xAD\x7F\xD0\xFD\xCC\x70\xCF\xF9\xD0\x72\xCF\x2E\xCA\xA9\xD1\xF2\x98\xE6\xCE\x61\xC4\x41\xD0\x32\x0A\x03\xCF\x1C\xCA\x53\xCB\x90\xC4\x96\xB4\xCD\xD1\x7C\xCA\x2F\xD1\x29\xD0\xB7\xD1\x7C\xCE\xD9\xD0\x6B\xCE\xC0\xCE\x80\xCC\x8E\xD1\xDC\xCB\x90\xD1\x84\xCC\x9F\xD0\x48\xCD\xE3\xD0\x9A\xB9\x00\xCF\x89\xD0\x27\xAC\x51\xCC\x58\xC3\x97\xCA\x5A\xC3\x55\xCC\xFF\xB9\x83\xCF\x81\xCF\xEA\xD1\x30\xD1\x3C\xCD\x46\xD1\x09\xD2\x48\xD1\xD9\xC2\x4A\xD1\x2E\xD0\xA3\xD1\x6F\xCF\xA5\xD1\xEF\xCF\x50\xD1\xF1\xCF\xD7\xCF\x1E\xC4\x60\xCE\x44\xC4\x39\x17\x28\xC0\xAC\xC4\x4D\x83\x99\xC4\x13\xA5\x3B\xCF\xF1\x87\xA7\xC9\x46\xCA\xC5\x05\x38\xC6\x3A\xA5\xD2\xC4\x86\x8E\x9E\xB1\x03\x01\x42\xC6\xE0\x5A\xCD\x59\xBE\xCF\x16\x65\xF4\xC4\x01\x01\xE0\x00\xCC\xCC\xE8\xD1\x9E\x02\xF8\x56\xC2\xC6\x1E\x92\x51\x08\xD7\x5A\x3B\x0E\x54\x4C\x10\xB7\xBA\x5B\xBF\x8A\x01\xB3\xEA\x08\x16\x01\xAD\x5A\xC3\x93\x24\x05\xB3\x08\x7C\x9A\x44\x95\x99\x42\x35\x5E\x41\x72\x59\x71\x55\xCF\xBE\x5E\x31\x0B\xE3\x00\x65\xB2\x15\x0E\x9A\x40\xE4\x00\xA1\xB1\xD1", -"\x5B\x3C\x66\xE2\x00\xB1\x9B\x4A\xD2\x00\x00\xE5\x00\x4D\xD2\xC1\x8A\xDE\x05\x17\x3C\x4A\xA0\x3D\x98\x11\x68\x54\xD2\x27\x01\x25\xC6\x0F\x86\xD0\xC4\x3B\xC6\x62\xC4\x53\xA4\x1C\x5A\x6C\xA0\xD6\x98\xAF\x98\x7C\x34\xB3\x08\x82\xD2\x2F\xA0\x7C\xD2\xD8\x98\xF5\x05\xC1\x5E\x76\x0C\x85\x37\x52\x3A\x52\x9B\x70\xC6\x43\x08\x73\xA5\x44\xC5\x09\x01\xE7\x00\x77\xD2\x37\xB6\xBF\x2D\x33\x5A\xAF\x9F\x90\xC9\xFC\x9A\x9E\x99\x9D\x9B\x09\x01\xE8\x00\xC1\xB2\x4D\xC6\x38\xD2\x88\x07\x3C\x5A\x5B\x5A\x08\xCF\x86\x9A\x9E\x99\xF9\xB2\x5F\xC8\xDC\x25\x5D\xC5\xF8\x8C\x59\xA5\x55\xCF\x51\xA5\xD6\x8B\x27\x01\xE9\x00\x15\x9A\x15\x0E\xDC\xC4\xEB\xC4\x00\x00\xA9\x9B\xDD\x5A\xDE\x52\x3F\x0A\xF8\x00\xC2\xB5\x86\x29\x44\xB3\xE8\xC4\x00\x00\xEA\x00\x20\x8F\xC0\xD2\xA7\x5D\x82\x44\xA5\x0C\xE3\xCB\x01\x4C\xC6\xD2\x20\xBA\xA9\x7A\xEB\x00\xBE\xB2\x1F\x83\x09\x01\x1C\x22\x16\x86\x8F\x00\x29\xC5\xB3\x08\xDB\xD2\x60\x94\x1B\x30\xCB\x26\xB3\xD2\x86\x72\x2A\x5C\x3B\x0E\xD9\xD2\x56\x83\xFC\xB1\x61\x92\x38\x68\x7F\xC6\xE0\xD2\x09\x2A\xE2\xD2\xB0\x93\xBF\xA5\xB6\xD2\x4D\x61\x15\xB7\x5C\x35\x0B\x73\x21\x65\x06\x01\xED\x00\xB7\xD2\x99\xD2\x06\x01\xEE\x00\x9C\xD2\xB5\x06\x09\x01\xA6\x06\xCF\x9F\x84\x5A\x31\x9F\xDB\x68\x34\x17\xA4\xD2\x06\x01\x56\xD2\xAE\x70\x03\x9B\x30\xC5\x82\x5A\xA1\x58\xD9\x8A\xD9\x97\xB9\x9F\xD8\x3C\x60\xD2\xEF\x66\x04\xD3\x16\x1D\xEE\xD2\x90\x9B\x1C\xC5\x51\x9A\x93\x9B\xF1\xD2\x0D\x85\x90\x53\xEF\x00\xF1\xD2\x2E\x65\xC0\x92\x6B\xD2\x38\x59\x31\x0B\x77\x68\x1B\xD3\x4D\x99\xA4\x06\x68\x68\xB6\xD2\x68\xD2\x48\x5C\x26\xD3\x18\xB4\xAC\x8A\x32\xC0\x5D\x0F\xBD\xD2\x10\xC4\x3C\xA5\xD7\xC4\x57\x34\xFF\x07\xE2\xC4\x1F\xD2\x01\xD1\xCB\x64\xE7\xC4\x66\xB2\x06\x01\xEA\xC4\x33\xD3\x09\x01\x89\x64\xDF\xC4\x36\xD3\x8F\x24\xEF\xC4\xB5\x64\x3B\xD3\x51\xC4\x11\x0E\x31\x0B\x08\x9A\xD2\x5D\x14\x33\x37\x95\xB5\xD2\x1C\xD3\x27\x01\x86\x9B\x4D\xD3\x26\x6B\x4F\xD3\x62\xA5\xA2\x6A\xBE\x5E\x7A\x0A\x15\x33\x63\xB0\x69\x9A\x26\x0C\x43\xA5\xA1\x0B\xAF\x24\xCA\x9A\x48\x9B\xD8\x70\x45\xB1\xDA\x70\xE9\x40\xB5\x03\x1F\xD3\xDF\xCF\x02\x01\xF3\x00\x2D\xD3\x4A\xA5\x27\x01\xF4\x00\x6D\xD3\xC4\xC6\x41\xD2\x09\x01\xCC\xD2\x46\xCF\x2B\xD3\x09\x01\x46\x68\x71\xD3\xAC\x86\x31\x0B\x8C\x47\x7A\xD3\x7E\xD3\x46\xCA\x83\x9A\xBE\xD2\x36\xC5\xF5\xC0\x04\xC5\x41\xC5\x55\x5E\xE0\x9A\xE3\x71\x3B\xC5\x32\x53\xA0\x9A\x89\xCE\xD1\x5B\x1C\x9B\x82\xD3\x59\xA3\x14\x9B\xD9\x05\x88\xD3\x2E\xC5\x0A\x71\x4D\x72\xD7\x69\x27\x01\x3A\x68\x7F\xD3\x72\xD3\x3F\xCF\x09\x01\xF8\x00\x6F\xB0\xC6\x72\x27\x01\xF9\x00\x1B\xD3\x54\x79\x26\xAC\xC1\xB1\x5F\xB1\x7E\x0C\x22\x5B\x71\x2B\x7A\xCA\xE4\xCB\x08\x0E\xB2\xB1\x1D\x2F\x1B\xD2\xFA\xB0\x71\x61\xBE\x5E\xBE\x06\x95\xB2\x9B\xD3\x5D\xA9\xFA\xD2\x03\x01\xFC\x00\xD6\xD2\x11\x0E\x3B\x0E\xFD\x00\x63\x68\x9D\x77\x23\x83\x2B\xC8\x32\x00\x16\xD3\x7B\x88\x66\x5C\xBA\x4B\x16\x86\x38\x00\xDC\xD2\x18\x62\x28\x6B\x60\xC0\x0A\x10\x7B\x36\xC0\x80\x10\xB3\x09\x01\xFB\x00\x88\xC0\xB6\xBF\x69\xC0\x58\x01\x3C\x87\xDD\xB2\x9C\xD3\xBB\xD3\xA1\x61\xBF\xB2\x06\x01\xBF\xD3\x0F\x86\xC1\xD3\x6D\x68\xC3\xD3\xC5\xD3\xC1\x88\xC7\xD3\x63\x68\xCA\xD3\xEF\x68\x01\x01\xE9\xD3\xA7\x6B\xCE\xD3\x15\x09\xD0\xD3\xEC\x81\xD2\xD3\x06\x01\xD4\xD3\x38\x62\x5A\xD3\xCD\xD3\xC8\x69\xDB\xB2\xBB\x87\x7E\xD3\x13\x6C\x2A\xB3\x11\x7D\x2D\xB3\xBF\x64\x78\x64\xF5\x0E\x7A\x64\x4A\xB3\x7E\x01\x35\xB3\x72\x20\x20\x8F\x26\xB3\x3C\xB3\xC7\xC4\xD1\x09\x38\xD3\xA1\xCF\x47\xD3\x9A\x64\x3C\xD3\x64\xA5\x02\x01\x3F\xD3\x4D\xC4\x4C\x6B\x37\x94\xC1\xC6\x4A\x01\x46\xD3\x86\x74\xE5\xC4\xAC\xC5\x8E\x94\x4A\xD3\x0D\x0E\xB2\xC4\x76\xCC\x92\xCC\xC6\x00\xED\xC4\x7F\x55\x10\x94\x0B\xCF\x8A\xBF\x0D\xCF\x07\xC9\x5F\xCD\xB2\xCD\x0C\xD2\xB4\xCD\x0E\xD2\x82\xCC\x10\xD2\x66\xCD\x92\xD1\x68\xCD\xDB\xC6\x75\xCF\xDD\xC6\x30\xCD\xDF\xC6\x8B\xCC\x29\xAD\x3A\xB7\xAC\xCC\x6B\xD1\x3D\xB7\x48\xCA\x10\xCB\x0D\x61\x24\xD4\x35\xD3\x7F\x32\x17\x2D\x9E\xD1\x42\xA8\x55\xCE\x6C\xCF\x66\xC8\x4C\xD1\xF4\xD1\x2C\xD2\xF6\xD1\xA7\xD1\xF8\xD1\x1A\xD0\x88\xCC\x74\xB3\xF2\xBD\x3B\xD4\x98\xCF\xE2\xC6\x7F\x86\x00\xC7\xE8\x80\xA7\xA9\xA2\xC3\x23\xD4\x25\xD4\x8A\x28\x47\xD4\x08\xD2\xEE\xCA\x0A\xD2\x7E\xCE\x2E\xD4\x45\xCE\x30\xD4\x64\xCD\x32\xD4\x9D\xCD\x12\xD2\x9F\xCD\x14\xD2\x88", -"\xCE\xEA\xC0\xA8\xC3\xEC\xC0\xB4\xCF\xE8\xB3\x0D\x85\x7E\xB7\xBA\xCB\x2C\x6C\x60\xD4\x46\xD4\xFB\x4F\x48\xD4\x24\xAA\x98\xD0\xC7\xCD\x9A\xD0\xD7\xC9\x34\xCE\xD9\xC9\x28\xC9\x22\xC0\xC1\xD1\xE5\xCD\xA8\xBD\xE9\xCC\x3E\xC7\xDB\xCF\x0A\xC1\x21\xCF\xA8\x7A\x1E\xCA\xE9\x99\xBF\x6A\x7A\xD4\x9A\x5A\x62\xD4\xEC\xD1\xD2\xD1\xDA\xB8\xD4\xD1\xE7\xBC\x23\xCD\x17\xC2\xD8\xD1\x26\xCD\xA2\xCC\x62\xBD\x30\xCC\x3C\xD1\x3A\xC7\x58\xC7\xC1\x9F\x01\x79\x36\x89\x44\xD4\xE1\x5A\x29\x50\x62\x94\xD7\xCD\x82\xCB\x2E\xCE\x65\xD4\x60\xCD\x8C\xD1\xDA\xCB\x69\xD4\x9B\xCD\x6B\xD4\x49\xCE\x6D\xD4\x4B\xCE\x6F\xD4\x99\x87\x18\xB4\x08\xD0\x06\xC7\x65\x6E\x93\xD4\x48\xC6\x95\xD4\x23\xD2\x94\xC9\xB8\xD1\x60\xD1\x94\xCE\x62\xD1\x96\xCE\xBD\xD1\xF9\xCE\xBF\xD1\xF8\xCD\x87\xD4\xAE\xC0\x54\xD4\x8C\xC3\x56\xD4\x32\xCD\x32\xAA\x8B\xC7\x34\xAA\x36\xAA\x02\xC9\x79\xD4\x45\xD4\x94\xD4\x7C\xD4\x63\xD4\x5A\xCB\x07\xD1\x8B\xCF\xC7\xD4\x13\xCF\xC9\xD4\x15\xCF\x85\xD4\xDB\xC9\x68\xD1\x66\xCB\xFF\xC3\x56\xAE\x38\xD0\xB0\xCA\x93\xB4\x73\xC1\x75\xC1\x5C\xB9\xA8\xD4\x46\xD2\x26\xD4\xAB\xD4\x28\xD4\xE0\xBF\xDD\xCC\x6B\xCF\x41\xCD\x6D\xCF\x2A\xD2\x15\xD0\xC4\xCE\xB8\xCD\xD5\xCF\xBA\xCD\x30\xD2\x0D\x8D\x6B\xCD\x53\xD0\xA9\xCD\x8D\xC1\x57\xD0\x43\xD4\xBF\xD4\x0B\x7D\xA2\x21\xDB\xD4\x96\xD4\xDC\xC8\xF8\xBF\xAC\xD0\x7C\xD0\xBB\xD1\xF7\xCE\xE2\xD4\x8F\xCF\xE4\xD4\x64\xCB\xE6\xD4\xA1\xCB\xE8\xD4\x87\xC4\xAF\xCA\xC7\xC1\xB1\xCA\x6F\xD0\x3C\xD0\xEB\xC7\x85\xBF\xBE\xD4\xD9\xD4\xC0\xD4\x0B\xD5\xC2\xD4\x41\xCB\xC4\xD4\xDE\xD4\x61\xD1\x09\xD1\x22\xD1\x0B\xD1\x5F\xC9\xCB\xD4\x0D\xCE\x17\xD5\xCA\xCB\x19\xD5\x87\xD0\xA3\xCD\x39\xD0\x8B\xD0\x73\xC1\x8E\xD0\xC4\xBD\x93\x62\xF0\xD4\xA2\x9B\xF2\xD4\x39\x94\x26\xD5\x68\xCE\x25\xD2\xB9\xD1\xD3\xAA\x11\xD5\xF5\xD0\xB2\xD0\x34\xBA\xB4\xD0\x6B\xAD\x4F\xD0\x3D\xD1\x60\xA7\xBD\xCD\xDA\xA2\x41\xB5\x3C\xD5\x3F\x61\x3E\xD5\xEE\x90\xDC\xD4\xA6\xCE\x26\xD2\xA5\xBE\x81\xC2\xDB\xC2\xDD\xCD\xB0\xD0\xDE\xCE\x2D\xD5\x7E\xC9\x2F\xD5\x9A\xCE\x31\xD5\xFB\xCB\x6A\xD1\x30\xC8\xD2\xCD\x33\x97\x64\xCE\x51\xD5\xDD\x5A\xAA\xD4\x3F\xD5\xC3\xCD\x96\xD0\x46\xD0\x1F\xD1\x48\xD0\xC8\xCD\xF5\xCB\x5E\xD5\x62\xCB\x15\xD5\xF9\xCB\x62\xD5\xC3\xCC\x12\x6F\xD0\xD0\xD6\xBA\x1B\x5F\x69\xD5\xDC\x5A\x6B\xD5\x54\xD5\x0C\xD5\x16\xC1\x0E\xD5\x34\xD1\x82\xC2\x36\xD1\xB0\xB9\x47\xD5\x70\xBA\xFA\xCE\x2A\xCD\xFC\xCE\x9A\xBA\x64\xD5\x53\xB0\xE6\xD0\x85\xA6\xE8\xD0\xD1\xAE\x64\x6C\x08\xD5\x6C\x9B\x0A\xD5\x80\x55\xE4\x92\x6D\xD5\x89\xD1\x6F\xD5\x7F\xD4\xA7\xCF\x72\xD5\xA9\xCF\x13\xD5\xAB\xCF\x76\xD5\xCD\xCD\x78\xD5\x57\x8D\x10\xCE\x49\xCA\x3B\xD5\x96\xD5\xCD\x03\x98\xD5\x27\xD4\x88\xD1\x6B\xCA\x8A\xD1\x43\xCE\x67\xD4\x6D\xCE\x61\xD0\x6F\xCE\x63\xD0\x71\xCE\xB7\xD4\x73\xCE\xB9\xD4\x18\xC4\x13\xD1\xD0\xCA\x71\xD0\x54\xCB\x84\xC8\x3A\xD5\x02\x63\x7E\xD5\x43\xD3\x7B\xD4\x99\xD5\x04\xBA\x04\xD1\x2A\xD4\x96\xCB\x2C\xD4\xF1\xCD\x20\xD1\x2B\xD5\x63\xD1\x74\xD5\xF7\xCB\xA4\xD5\xE2\xCE\xCD\xD4\xE4\xCE\x3A\xCE\x15\x0E\x26\xAF\x50\xD5\xAB\xD5\xE9\x14\xC1\xD4\x9B\xD5\xB0\xD5\x9D\xD5\x8B\xD1\xDB\xD0\x1D\xCE\xB3\xD4\xB6\xCD\xFC\xD4\x21\xCE\xFE\xD4\x23\xCE\x00\xD5\xB0\xA3\x7C\xCB\xB2\xA3\x10\xA4\xC4\xD5\xDA\x5A\x80\xD5\xCF\x91\x82\xD5\x17\xCB\x84\xD5\x75\xD1\x1B\xC1\xDD\xCE\xF3\xD1\x47\xCC\xDA\xD1\xB1\xCB\xDC\xD1\xB3\xCB\xB8\xD0\x36\xA8\xBD\xD5\x70\xD0\x62\xCE\xCB\xAB\xD1\xA3\x60\x9C\xEF\xD5\x98\x9B\x53\xD5\xF2\xD5\x40\xD5\xD7\xD0\x42\xD5\xC5\xD4\xC6\xD0\xE0\xD4\x8D\xCF\xA2\xD5\x4C\xD0\x8B\xD5\x7C\xD1\x8D\xD5\xD0\xBA\x11\xD1\x3F\xD4\xA3\xCB\x45\xB9\x57\xD1\x20\x6F\xDB\xD5\x45\x59\x25\xD5\xDE\xD5\x0C\xCC\x1E\xD1\x9E\xD5\xCE\xD5\xA0\xD5\x4A\xD0\x12\xD6\xB3\xD0\x14\xD6\x97\xB8\x7D\xD1\xDD\xC7\x4F\xCB\x9B\xCF\xE9\xC8\x52\xC4\x72\x10\xEC\x7D\x07\xD6\xE2\x5C\x09\xD6\x6E\xB1\x21\xD6\x41\xCE\x23\xD6\xE1\xD5\x99\xD0\xDC\xD0\x9B\xD0\x00\xD0\xAD\xCE\x02\xD0\xAF\xCE\x9F\xC9\x94\xD1\xA1\xC9\x41\xC0\x2B\xBF\x98\xBD\x5B\xC4\x55\xBE\x82\x6B\x1E\xD6\x0C\x7D\x20\xD6\x68\xCF\xCA\xD5\x0A\xCD\x7D\xCE\xB0\xD4\xE2\xD5\x32\xCE\x82\xD4\xAC\xCE\x84\xD4\x36\xCE\x86\xD4\xB0\xCE\xC2\xD1\x5F\xC4\xC4\xD1\xFC\xD1\x45\xAC\xA0\xBC\xEC\xC2\x04\xCF\x0D\x0E\xB2\xD1\xED\xCE\xD8\xD4\xA9\xD4\x36\xD6\x9A\xD5\x4F\xD6\x94\xCD\xD9\xCD\x0E\xD6\xBA\xD1\x10", -"\xD6\xEB\xCF\x89\xD5\xC8\xBA\x49\xD5\xFD\xB3\x4B\xD5\xA3\xD4\xC4\xA4\xFE\xCB\xBE\xD5\x00\xCC\xFB\xB5\x02\xCC\x07\xC3\xA6\x98\x00\xD2\x76\xBE\x05\xCC\x06\xD5\xAA\xD5\x23\xD5\x09\xD5\xDD\xD5\x6B\xD6\xCB\xCF\x6D\xD6\x29\xD5\xC6\xD4\xCF\xD5\xC8\xD4\xD1\xD5\xE0\xCE\xD3\xD5\x17\xCF\xD5\xD5\x19\xCF\x8F\xD5\x4E\xCC\x8D\x93\x4B\xC9\x23\x09\x7E\xC4\x63\xD6\xE6\xD1\x81\xCA\xCB\xD1\x48\x6B\x4C\xD6\xAD\xD5\xF3\xD4\xAF\xD5\x22\xD6\x28\xD5\x70\xD5\x08\xD1\x26\xD6\x0A\xD1\x83\xD4\xCB\xCD\x91\xD6\x32\xCF\x93\xD6\x34\xCF\xB2\xCE\x87\xC4\xAC\xD1\x1A\xD1\x31\xB6\xFF\xD1\xDD\xCF\x05\xC8\x6E\xC9\x9D\xD6\x66\xD6\x95\xD5\x85\xD6\x97\xD5\x87\xD6\xAC\xD4\xAF\xCD\xAE\xD4\x57\xD5\x99\xD4\xA6\xBE\x9B\xD4\x9D\xCC\x7D\xCD\x9E\xD4\x7F\xCD\xA0\xD4\xA4\xCC\x11\xBE\xFF\xD5\x48\xC9\x16\xD2\xAD\xD3\x9D\xD2\x1F\xCF\x52\xCC\x54\xD0\x5E\xAE\x5B\xC3\x1E\xD2\x0E\xD4\x07\xD5\xBC\xD6\xAC\xD5\xBE\xD6\xF4\xD4\x95\xC1\x0D\xD5\x16\xC0\x85\xD5\x5A\xD5\x87\xD5\x6C\xBA\x38\xD1\xB6\xB3\xF8\xD0\xDB\xD1\xFA\xD0\x01\xCD\xDE\xD1\xB1\x62\xA3\xC4\x02\xD6\x35\xD2\xAC\xC9\xEE\x83\x1A\xBA\x8A\xC5\x3A\xD2\x31\x9F\x3C\xD2\x4F\xB3\x29\xB3\x60\xB2\x42\xCF\xD0\xB1\x71\xB0\xBE\xC3\x0F\x6D\x17\xD4\xAD\x56\xD1\x09\xBC\x9F\x86\xB6\xF7\x67\x21\xB1\x49\xCF\x43\x6B\xFF\xD6\xB5\x2C\x81\xB0\xF1\xB6\xA1\x9B\x02\x63\xB1\xC4\x49\xB3\x0B\xD4\xFA\x02\x2C\xB1\xEC\xB1\xB1\xB6\x71\xB1\x7B\x65\xA6\xA0\xDA\xB6\x0E\xD7\x4C\x90\x04\xD4\x72\x83\xF6\xB1\xE1\x9F\xF8\xB1\xFA\xB6\x7A\xB1\x09\xA1\xE8\xD2\xEA\xB0\x27\x6C\x08\xD7\xDA\x64\x83\x99\xBB\x50\x85\x99\x06\xB7\xDC\x99\x08\xB7\xF4\x9F\xC4\x66\x55\xC4\xFE\xD6\xDF\xD2\xDB\x8A\x75\x64\xAA\xB0\xF8\x5B\x14\xB2\xB4\xB0\x4E\xC6\x2C\xB2\xA7\xB6\x50\xB2\xCA\xA0\x18\xD7\x26\xD7\x70\x09\xC7\xB6\x37\xD7\xBC\xB6\x47\xC5\xED\xB6\x21\xB2\xA8\xB6\xA4\x83\x8C\x99\x19\xD7\x76\x90\x1B\xD7\xE0\x83\x5E\xAC\x61\xB1\x89\xB0\xD6\xB6\x3A\xD7\xB2\xB6\xBE\x94\x5D\x0F\x21\xA0\xC2\xB6\x99\x6C\x3F\xD7\x34\xD7\x1D\xD7\x29\xA0\x2A\xB2\x2B\xD7\xD5\x9F\x87\xB6\xE6\xB6\x3E\xD7\x32\xD7\x18\xD4\x1C\xD7\xA3\xB6\x77\xB1\x0B\x95\x14\xD7\xD8\xB6\xF7\x85\x26\xB1\x47\xA0\x0D\x61\x4A\xD7\xA1\x90\x4C\xD7\x3D\xA0\xCD\x67\xD5\xB6\x6C\x99\x52\xD7\x15\xD7\xF3\xB0\xED\x66\x49\xD7\x59\xD7\x11\xD7\x97\xB6\xE0\x5B\xE7\x99\x50\xD7\x75\xD7\xBE\xB6\x46\xD7\x3C\xD7\x55\xA0\x0A\xB7\x09\xD3\x1B\x5F\x6F\xD7\xEB\xD2\x33\xD7\xFA\x02\xC2\xC3\xFF\x00\x10\xA1\x05\x67\x07\xD7\x63\xD7\x00\xD7\x8C\xD7\xFD\x99\x3A\x95\x87\xD7\x6E\xD7\x7B\xD7\x51\xD2\x40\xD2\x3C\x0E\x73\xA0\x57\xD7\xE0\x78\x99\xD7\x19\xD4\x0F\xB1\xA7\xB1\x11\xB1\x4A\x95\x70\xB2\x30\xD6\x9D\xCF\xFC\xD6\x92\xB6\x27\x01\x8C\xD2\xF1\xD4\x44\xD3\x43\x08\x3F\x0A\x09\x68\x27\x99\x70\x97\x1E\x57\x02\xD7\xC5\xB3\x13\xB1\x8F\xA0\x76\x65\xFD\xD6\x03\x01\xAC\xD7\x3D\xD5\xAE\xD7\xAF\x07\xB0\xD7\x6E\x63\x1C\x98\x0A\xD7\x6C\xD7\x21\xA1\x3F\x0A\xBC\xD7\x52\xD5\xBE\xD7\xE1\xC4\x7F\xD2\xC1\xD7\x28\x99\xCA\x24\x12\xD7\x55\x60\x69\xD7\xE5\xB6\x09\x5B\xF2\x67\x82\xC4\xC7\xD7\x6A\xD5\xE0\xC4\xF3\x05\xC0\xD7\x61\xA0\x88\xD2\xDA\x97\x8F\xD2\x62\x01\x95\xB0\x7C\x0B\x1F\xD7\x5E\xD7\xA3\xA0\x77\xD7\xB3\xB6\x38\x59\x23\xD7\xDD\x5A\xD5\xD7\xA0\xD6\xC0\x25\xDA\xD7\x8D\xD2\x56\x97\x79\x34\xAE\xB6\x84\x99\xBA\x85\x20\xD7\x86\xB1\xEF\xB6\x88\x83\xD4\xD7\x29\x5D\xD6\xD7\x7F\xD5\xD8\xD7\xA2\x07\xED\xD7\x3A\xA0\x8E\xD2\x7C\x34\x09\xB2\x36\xD7\xB3\xB0\x43\xD7\x16\xB2\x64\xB1\x48\xB1\x3C\x0E\xC1\xB6\xDE\x5A\xEA\xD7\xDA\xD6\x2B\x1D\x37\xD3\xCB\xD7\xDB\xD7\x08\xA0\xF0\xD7\x7D\xD7\x8D\x5E\xC8\xB6\x80\xD7\x41\xA0\x76\xD7\x6A\xD7\x99\x67\xF8\xD7\xA7\x5B\xFA\xD7\xC5\xD5\x96\xD2\xBF\xD7\x10\xD8\xEE\xD7\xFF\x98\x13\xD8\xAC\x83\x1E\xB2\x8C\xC7\x2B\x66\x81\xD7\x45\xD7\x4F\xB2\x72\xB1\x66\xB1\x0B\xD7\xD1\xC3\xAB\xD7\xEB\xD7\x0F\xD8\x05\x68\xCC\xD7\xB3\xD7\xDE\xD7\xF6\x05\xDF\xB6\x5C\xD7\xFF\x94\x44\xB2\x09\xA1\xD2\xB0\x0B\xD8\xF9\xD7\x32\xD8\x8F\x24\xFE\xD7\xB2\xD7\x00\xD8\xB5\x28\xE0\xD7\x34\xA0\xE3\xD7\x17\xB2\x90\xB1\x7C\xB1\x2F\xD8\x69\xC4\x31\xD8\x0D\xD8\x44\x90\x42\xD8\x22\xD8\xFF\xD7\xEF\xD7\x17\x3C\x72\xD7\xE4\xB0\x17\xD8\xDB\xA0\x19\xD8\xD2\xD7\xFE\xA0\xEA\x94\x0C\xD8\x68\xD6\xC9\xD7\xD9\xD7\x53\xD8\x44\xD8\x55\xD8\x1E\x57\x3D\xA0\x7F\xD7\x9A\xB6\x27\xC6\xE4\xB6\x2D\xD7\xF4\xB0\x52\xB2\xB7\xC4\x4F", -"\xD8\x60\xD8\x53\x9B\x33\xD8\x06\x01\xB1\xD7\xDE\x5A\xC2\xD7\x18\xB4\x8F\xD7\x1A\x9A\x93\x62\x1E\xD8\xF0\xD5\xFC\xD7\x11\x02\x43\xD8\x76\xD8\xCD\xD7\x76\x30\x39\x95\x0A\xC6\x3B\xD4\xC6\xD7\x41\xD8\xAF\xD7\x63\xD8\x81\xD8\x36\xD8\x7C\x34\x1A\xB7\xC8\xD2\x4D\x67\x5F\xD8\xAD\xD7\x72\xD8\x52\xD8\x34\xD8\x11\xD8\xD7\x98\x7C\x34\x1F\xB7\x86\x99\x21\xB7\xF7\x82\xF3\x82\x3D\xA5\x74\xD2\x01\x00\xA8\x69\x0D\x0E\x47\x0E\x44\x0E\x71\x5C\x11\x0F\x15\x00\xFC\xC4\x6D\x68\xA7\xD8\x50\xD8\xC4\x28\x02\x07\xC1\x5E\x57\x0B\x68\x55\xAF\x9B\x0B\x55\x8B\x03\xD1\x5C\xA5\xD8\x0F\x06\xCB\xD3\x90\x0E\x6E\x63\x32\xC5\x24\x02\xAE\xD8\x0D\x0D\xB0\xD8\x7A\xA5\x32\x71\xC7\x0A\x66\x5C\x1E\xD3\x0F\x86\xC3\xD8\xB9\x68\xC5\xD8\x92\xD8\x9A\x5A\x16\x04\xBC\xD8\x13\x26\xBE\xD8\xA1\xD2\xF9\x58\xAF\x27\x98\xD2\x08\x83\x03\x00\xA1\xD8\xBD\xD3\xD7\xD2\x06\x01\x86\x9B\x11\x0F\x26\x65\x23\x83\x53\xD3\x17\xC6\x96\x37\xCB\xD8\xB0\x10\xCD\xD8\xC9\xC5\xA2\xD2\x0B\x5D\x3B\x0E\xB7\x71\x11\x0F\xC9\x70\x23\x83\xFD\x8B\xEE\xAC\x0E\xC5\x23\xC5\x6E\x00\xDF\xD8\xD2\x38\xE1\xD8\x5F\xD6\x11\x83\x74\xD2\x04\x00\x6E\x63\xA8\x69\xB3\x59\xFE\x4E\x6D\x60\xC3\x55\x8D\x04\x06\xD3\x03\x06\xB5\xD8\x6B\x09\xF7\xC5\x1C\xCD\xDF\x48\xB1\x4C\x37\xCA\xC1\x38\x57\x45\xB3\x08\x88\x16\xE7\xA7\xB1\x4C\xEF\xD8\x34\xC6\x7B\x3F\x5A\x45\x57\x9B\x05\xD2\x43\xD1\x79\xC6\xB7\xD3\x49\xD2\xB9\xD3\xC9\x08\xF6\xD8\xF4\x5A\xC0\x59\xE6\xC5\x05\xC6\xD6\xD8\x03\x01\x50\xC5\x0F\x86\x52\xC5\x19\xD9\x11\x08\xA1\x45\x1D\xD4\xEB\x94\xA2\xC5\x59\xC5\x6E\x63\x78\x31\xE5\xD3\xB0\x8B\xF3\xC5\x08\xC5\x01\xD9\x0A\xAA\x24\xD9\xFB\xC5\x88\xC6\x1F\x88\xB8\x0A\x29\xD9\x9A\x42\x01\xC6\xBF\x0E\x03\xC6\xA1\xC5\xF0\x66\x3D\x1B\x0D\x65\xBE\x5E\x28\x7D\xF6\xC5\x8B\x61\x74\xD2\x07\x00\x18\xD9\xAC\xA4\x31\xD9\x0E\xC6\x33\xD9\xFE\x86\xEA\xB2\xDF\x59\x51\xC5\x2F\xD9\x64\xAE\x47\xD9\x3B\xD9\x34\xD9\x23\x8F\xC6\x89\xF9\x87\x2B\xD9\x8A\x8E\x66\x5C\xF4\xC5\x95\x64\x41\xD9\x61\xC6\x4F\xD9\xC1\x59\x32\xD9\x0C\xD7\x52\xD9\xFE\xC5\x46\x8A\x3D\x1B\x38\xD9\x2C\x0F\x3A\xD9\x14\x61\xFE\x86\xD1\xD8\x9C\xD3\x08\x00\xD4\xD8\xD3\xD2\x5D\x0F\x4F\xC5\x4D\xD9\xEA\xD3\x30\x8C\xBE\xC4\xC7\xCF\x4B\x45\x63\xD2\x34\x5E\x26\xC7\x71\xD3\xB8\xD2\x09\x01\xB8\xCF\x49\xCF\x5F\x84\x31\x4D\x7D\xC5\xA6\xCD\x06\xD2\x4D\x4F\xB3\x9F\x16\xD9\xE7\x05\x45\xD9\xA4\x9C\xD2\x01\xE7\x38\x66\x07\xE6\xC5\x47\xD2\x3C\x02\x7E\xD2\x09\x01\x1F\xD9\x16\x86\x21\xD9\x91\x7D\x8A\xD9\x5C\x56\x5D\x39\x95\xD2\x48\xC6\x8B\x51\x6C\x07\x28\xD9\xAB\xD8\x49\xC6\xF9\x07\x56\xD9\xEC\x8E\x6A\xD9\x6E\xD9\x41\x06\x88\xD9\xE0\x5A\x3D\x59\x71\x56\x93\xC6\xC9\x3F\xD0\x3F\xFD\xD8\xA4\x0C\x63\x68\xB2\xC6\xF4\x5A\xA8\xD9\x95\x51\xE6\xC5\x94\xC6\x18\x24\xB3\x08\xBA\xC6\x61\xB7\xFE\x64\x18\x24\xA3\xC6\x15\xC6\x65\xC6\x08\x65\x2F\xC0\x08\x83\x0B\x00\x6D\xD9\x6C\x6F\x3B\x0E\xE9\x8C\x11\x0F\x39\x47\x23\x83\x67\x8F\xE2\xD8\x73\xCD\xF9\x07\xC1\x5E\x08\x09\x4A\x24\x10\xD9\xD5\xC5\x6F\x21\xA3\xD9\xFD\x67\xC2\xD9\xB9\xCF\x1F\xD8\x34\xC6\x99\x46\x13\xD9\xF0\xC5\x90\xCD\xF2\x01\x90\xD9\xD6\x8E\x59\xB2\x39\x47\x30\xC5\x28\x0D\x98\x42\x48\xD9\xD4\xCC\x08\xCA\xB3\x08\xCA\xD9\xDC\xD9\xCC\xD9\x6F\x64\x58\xCD\xD0\xD9\x8C\xC6\xD3\xD9\x85\xD9\x0D\x0E\x87\xC6\x1A\x07\xC3\xD9\x0D\x85\x75\x90\xE2\xC5\xD7\xD9\x7D\xD8\x13\x26\xDA\xD9\x48\xD2\x79\xD9\xF7\xD6\x9C\xD3\xD6\xD9\x37\x98\x3C\x0E\xC5\xD9\x63\x68\xC8\xD9\x6D\x68\xEA\xD9\xE7\xD9\xDD\xD9\xA3\x64\xEE\xD9\x74\x07\xD1\xD9\xB7\xC6\x4D\xA5\xF5\xD2\x86\xD9\x8E\x06\xA6\xD9\xBD\xD7\xB0\x10\xFD\xD9\x81\xD9\x0A\xDA\xEC\xD9\xDE\xD9\x1D\xD9\xCB\x8E\xE1\xD9\xA8\xD2\x33\xC6\x0B\x7D\x18\xDA\x25\xD9\xDB\x59\xE9\xD9\x3E\xCB\xCE\xD9\x2B\x08\xEF\xD9\x2B\xC6\x11\xDA\x25\x7D\xD7\x5A\xF8\xD9\x15\xDA\xC8\xD7\x17\xDA\x30\x3A\x24\xDA\x8A\x8E\x49\xD3\xA4\xD9\x0E\x00\x30\xDA\xDD\x5A\x22\x5A\xAF\x30\x9E\x5A\x47\xC6\x09\xD5\x92\x64\xDF\xD9\x6C\x41\x63\x68\x61\xD2\x5C\xD9\x1A\xC7\xC3\xB3\x23\x5A\xA0\xD2\x3E\xDA\x97\xD5\xC0\x25\x12\xD3\x9E\xD9\xC0\x25\xE5\xD3\x65\xD2\x96\xD3\xDA\xD3\xA4\xD9\xF5\x57\x8B\xB6\xDF\x5A\x2A\x5A\x56\x52\x5D\xD2\x85\xB7\x83\xC6\x41\xDA\x55\x4C\x43\xDA\x59\xD2\xB1\xB1\x26\x08\x2B\x5A\x3D\xDA\x5B\xDA\x56\x52\x4D\xDA\xE7\xA7\x6E\x3A\x50\xDA\x7F\x9B\x92\x9B\x3C\xC5\x0B\x9B\x4E\xCF\xD7", -"\x5A\x61\xCF\x73\xC7\x93\x62\x41\xCF\x63\xD9\x15\x89\xBF\xD6\xEE\xCD\x19\xCE\x43\xD5\x4F\xAB\x70\xD6\xC8\xD0\x72\xD6\x43\xBB\x2A\xD6\x96\xBA\x16\xD6\xED\xBA\xCF\xD4\x5E\xCA\x51\xC1\x89\xC7\xFE\xC6\xB4\xC0\xC7\xC9\x22\xD0\x7B\xB3\x41\xD4\xE8\xCD\x73\xDA\x9C\x89\xF3\xD5\xF8\xCC\x18\xCB\x2A\xCC\x76\xD1\x9D\xD4\x78\xD1\x9F\xD4\x89\xBD\xA1\xD4\xE0\xAA\x32\xCC\x03\xA6\x1B\xD0\xFF\xC7\xD2\xD4\x3C\xD4\xE3\xC9\x6F\xBD\x2F\xD6\x13\x83\x5A\xB7\x83\xD1\x03\x01\x74\xDA\x71\x8A\xF5\x88\x88\xD6\x5E\xD1\xC1\xD6\x7A\xDA\x12\xAF\x45\xD5\x37\xD1\x7E\xDA\x0B\xBE\x74\xD6\xE7\xB8\xB6\xD0\xFE\xD5\xEB\xD6\x01\xC7\xA7\xC6\xB3\xCF\xC2\xA9\x75\xD4\xC2\xCF\x81\xBA\x5C\xB9\xA9\xDA\x79\x89\xC7\x89\x0B\xD6\x53\xCE\x9F\xD1\x11\xD0\x4B\xD4\x57\xCE\xC2\xCE\x59\xCE\x4E\xD1\x32\xD0\x2E\xD2\x34\xD0\x52\xD1\x3C\xC7\x8A\xD4\xDA\xCF\xE6\xB3\x96\xB7\x80\xD6\x97\x68\x90\xD4\x06\xD8\x02\x63\xC2\xDA\x54\xD9\x72\x8A\x38\xD6\x7B\xCE\x64\xD4\xC2\xD6\xEF\xD1\x9A\xD4\xD6\xD1\x9C\xD4\xFC\xCC\xFA\xD5\xF5\xD1\xE8\xD6\xF7\xD1\xFB\xD0\x7A\xCB\x03\xB4\xF4\xCF\x64\xCE\xDC\xDA\xF1\x89\xC4\xDA\xDF\xDA\x24\xD2\xE1\xDA\xAF\xDA\x60\xB6\xB1\xDA\x88\xD5\x28\xD6\x48\xD5\x80\xDA\xE9\xBA\x82\xDA\x2A\xBB\x89\xD4\x07\xD0\x7F\xCF\xCA\xB3\x8F\xDA\x75\xDA\x39\x89\xD1\xD1\xDF\xD6\xF1\xD0\xF6\xD5\x32\xC7\xF8\xD5\xB6\x9C\xBE\xCC\x13\xD6\x60\xD5\xFB\xCE\xA6\xD5\x7A\x8D\xA7\xCC\x86\xD0\xB2\xC0\x54\x74\x62\xCA\x1C\x8B\x8E\xC7\x83\xD6\xDB\xDA\x90\xDA\xC5\xDA\xD7\xCE\xEE\xD1\xD9\xCE\xF0\xD1\xF9\xDA\xE4\xD6\xB3\xDA\x2C\xBE\xFD\xDA\x47\xBB\xFF\xDA\x3C\xBC\x18\xD6\x38\x73\x69\xD0\x6E\xC1\xAC\xD3\x6C\xD0\x5D\xCF\x19\xA7\xB6\xD6\xA3\xBC\xEE\xD4\x92\xCC\xF1\xDA\xDA\x86\xF2\x89\x1F\xDB\x79\xD0\x21\xDB\x7B\xD0\x23\xDB\x7C\xDA\xBC\xD1\x8F\xD6\x30\xCF\xAC\xD6\x91\xCF\xAE\xD6\xFC\xC8\x01\xDB\x9B\xB6\x68\xA2\x2E\xBB\x8E\xD4\x55\xD0\x05\xD5\xE7\xD1\x71\xCC\x04\x64\x38\xDB\x1E\x88\x3A\xDB\xF4\xDA\xC3\xD4\x0D\xD6\x8B\xD6\x0F\xD6\x8D\xD6\xE1\xD4\x42\xDB\x24\xD1\x44\xDB\xAD\xCF\x46\xDB\xAF\xCF\x6B\xBB\x4B\xCD\x0E\x0D\xE3\xC7\xE1\xD1\xBE\xD0\x37\xD5\xB0\xD1\x8B\xCD\x1C\xDB\x51\xDB\x1E\xDB\x55\xDB\x27\xD5\x57\xDB\xA6\xD6\xDF\xD4\x5A\xDB\x11\xD6\x5C\xDB\x65\xD1\x5E\xDB\x0E\xD1\x60\xDB\x10\xD1\x8F\xD5\xCA\xCA\x3C\xA7\xA4\xCD\xD0\xD6\xDD\xC5\x33\xDB\xB1\xD3\xC5\xC7\xD2\xCA\x2A\x63\x60\x9C\x52\xDB\x7F\x9F\x54\xDB\xAC\xDA\x88\xCF\x5F\xD1\x58\xDB\x6F\xD6\x73\xDB\x71\xD6\xFB\xDA\x8A\xD5\x11\xDB\x8C\xD5\x13\xDB\x9C\xCE\xC2\xBD\x4E\xD5\x62\xA7\x41\xB5\x87\xDB\xBA\xB0\x89\xDB\x77\xDA\x05\xD1\xA5\xD6\x24\xD6\x71\xD5\x81\xD4\xC9\xCD\xAA\xD6\x0C\xD1\x77\xDB\x26\xD1\x79\xDB\x28\xD1\xB1\x6E\xBA\xD0\xC2\xD5\x6C\xDB\x06\xDB\x7D\xD4\xD0\xAA\xB2\xD5\xB1\xD4\x62\xCD\xE4\xD5\x1F\xCE\xE6\xD5\x17\xD0\xE8\xD5\x19\xD0\xEA\xD5\x2D\x9E\x7B\xD5\x62\xCF\x3F\x0A\x9B\xDB\x3F\xC4\x9D\xDB\xDD\xD6\xCE\xC7\x09\xDB\x74\xD1\x94\xDA\xF7\xD5\xC7\xD6\x97\xDA\xC9\xD6\x99\xDA\xCB\xD6\x32\xBE\xB9\xDA\x81\xBF\x01\xD6\xCA\xBE\x11\x0E\x1A\xB5\x25\xC2\x09\x01\xC0\xDB\x04\x95\xA2\xC5\xB0\xDB\x6E\xAC\x7A\xCD\x2D\xD0\x45\xCC\xE7\xDA\xD9\xD1\xE9\xDA\xFC\xD5\xE9\xD6\x82\xCD\xDC\xBB\x3B\xCB\x6F\xC8\x10\xA4\xD7\xDB\x27\xB1\x3C\xD9\x76\xDA\xC3\xDB\xDB\xC8\x83\xD5\xE0\xD6\x0B\xDB\x3E\xC9\x0D\xDB\xD3\xA7\xED\xCF\x3A\xD1\xB5\xD0\x76\xD6\x57\xC7\x84\xBC\xED\xD6\x3C\xD0\x28\xCE\xAD\xDB\xBF\xDB\x6D\xDB\x8A\xDB\xC3\xD0\xAE\xDA\x6E\xD6\x44\xD5\x40\xDB\x12\xD5\x75\xDB\xBE\xD1\xA7\xDB\x67\xD1\xA9\xDB\x69\xD1\xA2\xCB\x38\x59\xD9\xD5\xF0\xDA\x00\xDC\x9E\xDB\x50\xD6\xBE\xCE\xB2\xDB\x54\xD6\xAA\xCE\x56\xD6\x9C\xD0\x40\xD6\x9E\xD0\x34\xD4\x66\xD0\x44\xD6\x1A\xB9\x3F\xD1\x7D\xCB\xC1\xDA\x12\xDC\xED\xDB\xB4\xC9\xF6\xD4\x5E\xD0\xB3\xD5\x80\xCE\xB5\xDB\x47\xCE\xB5\xD4\x84\xCE\xB9\xD5\x86\xCE\xBB\xD5\x31\xD2\xE5\xD0\x61\xCE\xAC\x86\x59\xAF\x17\xD1\xA8\xDA\x24\xDC\xA3\xD6\x39\xD6\xA0\xDB\x3B\xD6\x80\xD4\x3D\xD6\x19\xDC\x3F\xD6\x58\xD6\xAE\xCE\x5A\xD6\x43\xD6\xB1\xCE\x20\xDC\x1A\xD6\x4C\xC4\x1C\xD6\x01\x01\xE9\xDB\x6D\xD7\xD9\xDB\x55\xD5\xA5\xCF\x71\xDB\x2A\xD5\xA8\xD6\x2C\xD5\xA5\xDB\x2E\xD5\x0A\xDC\xC0\xD1\x5B\xD6\x88\xD4\xAB\xC8\x0D\x0E\xA0\x80\x10\x00\xF6\xD9\xAA\x8A\x8A\xCE\x53\xC4\xEC\x7D\x4C\xDC\x98\xA0\x4E\xDC\x91\xDA\x27\xDC\x4A\xD4\xF8\xD4\x4C\xD4\xFA\xD4\x30\xD0\xCD\xDA\x82\xD0\xB9", -"\xDB\x84\xD0\xBB\xDB\x49\xC4\x32\xD2\xFF\xC8\x97\xD1\xB9\xD6\x1F\x8B\xFF\xDB\xAF\xDB\x4F\xDC\xE7\xCF\x51\xDC\x8C\xD6\x53\xDC\xD0\xD5\x55\xDC\x5F\xD5\x57\xDC\xCC\xD4\x59\xDC\xFA\xCD\x2C\xDB\x65\xC9\x37\xB1\xBD\xA5\xC5\xD1\xB5\xCE\x61\xD6\xB7\xCE\xD7\xDA\xD1\xCA\xA3\xBF\x96\xB4\x64\xDC\x51\xD9\xC2\xDB\x3A\xDC\xE0\xDA\xDD\xD4\x7D\xDC\x59\xDB\x7F\xDC\x8E\xD6\x81\xDC\x75\xD5\x59\xD6\xE5\xD4\x0C\xDC\xE7\xD4\xB0\xD6\xD6\xB0\x38\x81\x3C\xC3\xC0\xBC\xBE\xBF\x7E\xD6\xAB\xC6\x7A\xD6\x74\xC4\x77\xDC\x50\xCC\x79\xDC\xAA\xDA\xEC\xDB\x96\xDC\xF5\xDA\x98\xDC\xA1\xDB\xA7\xD6\xA3\xDB\x73\xD5\x9D\xDC\xD2\xD5\x9F\xDC\x16\xD5\xA1\xDC\x18\xD5\xA3\xDC\xA5\xC9\x2A\x9F\xC0\xB9\xD8\xBF\xE4\xD1\x8A\xC9\xA6\xA4\xBA\xCE\x93\xDC\x68\xD9\xF3\xDA\x01\xDC\x6E\xD5\x8C\xDB\x99\xDC\x8E\xDB\x9B\xDC\x5B\xDB\xB9\xDC\x90\xD6\xBB\xDC\x77\xD5\xBD\xDC\x32\xD5\xBF\xDC\x6D\xBE\x37\x85\x1C\xD5\x4D\x85\x32\xB6\x9B\xD6\x35\xB6\x4F\xDB\xD1\xD6\xAE\xDB\xB0\xDC\x07\xDB\xD6\xD0\xC6\xDA\x49\xD4\xA0\xD1\xC9\xDA\x13\xD0\x6C\xDC\x4D\xD1\xB7\xDB\x4F\xD1\x70\xDC\x51\xD1\x72\xDC\xFA\xD1\xD9\xBC\xB4\xCE\x4E\xD2\x9A\xC4\x8C\xD0\x24\xCF\xD8\xD6\x05\xDB\xE3\xDC\xDA\xDB\xB7\xB7\x1B\xCE\x17\xDC\xD0\xCF\x3E\xD6\xDE\xD0\x1B\xDC\xE0\xD0\x42\xD6\x04\xD0\x1F\xDC\x78\xC4\x33\xDC\x33\xD2\x70\xC0\x6E\xCC\xB6\xA3\x46\x99\x89\xC5\x39\xD2\x3A\x90\x3C\xCF\x36\xD2\x1A\x6C\x22\xD4\x78\xD4\xE2\x28\x27\xCF\x5D\xD1\x8B\xDB\x03\xDC\x8D\xDB\x05\xDC\x8F\xDB\x7D\xDA\x91\xDB\x73\xD6\x28\xDB\x80\xBC\x2C\xD6\xA6\xCC\x9E\xDA\x36\xD0\x17\xDB\x40\xBA\x3D\xD4\x8E\xCC\x19\xD6\x8C\xDA\x91\xCC\x16\xDD\x03\x01\xE1\x28\xB3\xCC\xB0\xC7\x86\xCF\x08\xDB\xEF\xDB\x0A\xDB\xC7\xDB\x0C\xDB\xC9\xDB\x62\xBF\x79\xD1\xE6\xBA\x7B\xD1\x2B\xD6\x2A\xDB\x68\xBD\x84\xDA\x39\xD4\x5F\xCA\xA0\xDA\x58\xD4\x8D\xA5\x5A\xD4\x3E\xD4\x78\xB7\xE6\xC9\xA2\xB3\xB0\xCC\x5C\xB9\x31\xDD\xF3\xCC\x1B\xDA\x03\xD1\x44\xBF\x9F\xDB\x70\xDB\xB5\xDC\x72\xDB\xD0\xDC\x74\xDB\xD2\xDC\x43\xDB\xD4\xDC\xA5\xD5\xD6\xDC\x63\xD5\xC4\xCC\xC0\x5A\xBC\xDA\xC7\xCC\x7C\xB7\xD0\x95\xF1\xC0\x2F\xDD\x02\x01\x4F\xDD\x07\xCD\x0B\xDA\x5C\xD1\xC9\xD5\x6C\xD6\x05\xCE\x04\xDC\x7B\xDA\x1E\xDD\x41\xDB\x5A\xDD\x5D\xDB\x5C\xDD\xD4\xD5\x85\xDC\xD6\xD5\x58\xB9\xD3\xDA\x3D\x9C\x09\xC1\xB5\xCF\xA0\x62\xEA\xB3\x64\xCE\x69\xDD\x02\xD9\x51\xDD\x6C\xDD\x53\xDD\x14\xDC\x10\xD0\x93\xDA\x7B\xCD\xC8\xDB\x77\xD1\x3B\xDD\x98\xDA\x2E\xBE\x9A\xDA\xB3\xAE\x9C\xDA\x01\xB4\x8F\xD5\x7C\xB0\xD7\xC5\x36\x89\x82\xDD\x3A\xCD\x6B\xDD\xFC\xDC\xCD\xBD\xFE\xDC\x3C\xD6\xE3\xD5\x01\xDD\x8F\xD1\x03\xDD\x91\xD1\x05\xDD\xE2\xD0\x07\xDD\x06\xD0\xA1\xB3\xBC\xD4\xAD\xC7\x30\xDD\x18\xDD\x6D\xDD\x89\xD6\x6F\xDD\x1C\xDD\x71\xDD\x58\xDD\x90\xDB\x08\xDC\xCA\xD4\x83\xDC\x30\xD5\x5E\xDD\x46\xA1\x26\xDD\xA5\xC1\xF1\xBA\x18\xDB\x34\xCD\xF6\xBD\xCF\xC3\xE0\xDC\xF7\xBA\x45\xCF\xEF\xCE\x3B\xDB\xAA\xD0\x3D\xDB\x0F\xD5\x3F\xDB\x72\xDD\x07\xDC\x74\xDD\x76\xDB\x76\xDD\x92\xD6\x78\xDD\x94\xD6\x62\xDB\x2E\xDB\xA4\xC7\x4D\xCD\x97\xD6\xA6\xD0\xF9\x96\xA8\xCD\x7F\xCA\xD1\x5B\x36\xDB\x67\xDD\x01\x01\x98\xDD\x58\xCD\x96\xCC\xC5\xDD\x32\xD1\xC7\xDD\xE1\xD6\x9C\xCC\x5E\xCB\xF3\xDB\xBA\xAB\x0F\xDB\x29\xD6\x93\xDB\x15\xD6\x95\xDB\xFD\xCE\x94\xDD\x02\xD5\xC3\xC7\x82\xDB\x56\xB6\x99\xCA\x96\xB4\xDF\xDD\x72\xCD\x09\xCF\x44\xD1\xC2\xD0\xCC\xDC\x1B\xDD\xCE\xDC\x1D\xDD\xB2\xDD\x1F\xDD\xB4\xDD\xE3\xD4\xCE\xDD\xAD\xD6\xD0\xDD\xAF\xD6\x03\x7A\x63\xDB\x6B\xD0\x66\xDB\xB3\xD6\xDB\xC3\xD9\xDD\x11\xBB\x55\xBB\xF6\xDD\xAC\xDD\x86\xDD\x6E\xDD\x79\xDA\x70\xDD\xB0\xDA\x06\xDC\x46\xD5\x20\xDD\x7F\xDA\xEC\xDD\x3F\xDD\xEE\xDD\x8E\xD5\xD2\xDD\x00\xC4\x35\xD5\xEB\xD4\x72\xC1\x69\xDB\x8D\xD0\x78\xBE\xFE\xDB\xC3\xDD\x4C\xCF\xA8\xD0\xE5\xDC\x20\xDB\x98\xD4\xE3\xDA\xC4\xD6\xE5\xDA\xC6\xD6\x8C\xDD\xE7\xBF\xCB\xDB\x8F\xDD\xCD\xDB\x87\xBE\xCD\xD6\xD5\xB4\x98\xDB\x7F\xAE\x92\xC2\x17\xDD\xC4\xDD\x6E\xDB\x41\xD5\xF6\xDA\x16\xDE\xF8\xDA\x18\xDE\xB2\xDA\x1A\xDE\xB4\xDA\x22\xDD\x0F\xBE\x40\xDD\x8F\xBD\x8F\xD5\xFB\xCA\x79\xA7\x37\xDC\x68\xDD\x12\xDE\x91\xBE\x14\xDE\x0E\xCF\xF7\xDA\x6F\xB8\x45\xDE\xFA\xDA\x02\xDE\x14\xD5\x04\xDE\x45\xDB\x06\xDE\x47\xDB\x88\x7F\xBD\xDB\x72\xDA\x02\x63\xF7\xDD\x8F\xCD\x84\xDD\x9B\xDD\x2D\xC1\x49\xD1\xDF\xC8\x7E\xD0\x0E\xDB\xF5\xDB\xD0\xC8\x3B\xD1\x9B", -"\xDA\xCE\xD0\x58\xC4\xFB\xDB\x17\x75\x93\xD5\xCD\xBE\x3E\xDE\x2A\xDE\xFA\xDD\x19\xDD\x02\xDC\xCC\xCF\xE2\xDA\x22\xDB\xE4\xDA\xF1\xD1\xA1\xB4\xF9\xD5\xE0\xDB\x4F\xD4\xEA\xDA\x51\xD4\xEC\xDA\x3A\xCB\xFC\xB0\x28\xC4\x10\xA4\x64\xDE\xC1\xCD\x9A\xDD\x7B\xDC\xFB\xCF\x3D\xDC\x9F\xD5\xB7\xDC\xA1\xD5\x5A\xDE\xA3\xD5\x5C\xDE\x5F\xDB\x5E\xDE\x61\xDB\x95\xD1\x91\xD5\xBF\xD5\xFF\x00\xFD\xDB\x27\xC1\xAB\xDD\x3F\xDE\xCB\xDC\x9C\xD5\xCD\xDC\x56\xDD\x52\xDC\x93\xDE\x27\xD6\x95\xDE\x10\xDB\xB6\xDD\x61\xD5\xB8\xDD\xCF\xCD\x4D\xDE\x98\xC8\xF0\x8D\x3D\xDE\xA1\xDE\x78\xDE\x71\xD1\x2C\xDE\x3C\xDB\x2E\xDE\x7E\xDE\x30\xDE\x80\xDE\x30\xBA\x6C\xDE\xCA\xD0\x6E\xDE\xF7\xDB\xA2\xD4\xF9\xDB\x56\xA8\xAC\xC8\x3E\xC4\xA9\xD5\x63\xDE\x52\xDE\x64\xAE\x78\xDA\x55\xDE\x43\xDE\x57\xDE\xCA\xDD\x19\xDE\xAA\xDE\xEB\xDD\xAC\xDE\x12\xDB\xAE\xDE\x93\xDD\xCB\xCB\x09\xDD\x75\xDC\xD0\xA3\x86\xB5\x60\x9C\x8C\xDE\xEB\xCD\x8E\xDE\x67\xDC\xB1\xD5\xF7\xD4\x5F\xD0\xF9\xD4\xCB\xDA\xA4\xD1\x6E\xDC\xA6\xD1\xCF\xDA\xA8\xD1\xD1\xDA\xD5\xC8\x1B\xD6\x50\xDE\xDE\xDD\xC9\xDE\xBD\xAE\xCB\xDE\x2B\xD4\x52\xD6\x2D\xD4\xB3\xDB\x99\xCD\x2B\xDC\x82\xCE\x2D\xDC\xD4\xCF\x2F\xDC\xC7\xCE\x31\xDC\x01\xD5\x8D\xD3\x81\xD1\x8B\xCE\xAE\xB5\xDD\xDE\x14\xCE\xEC\xCD\x13\xDC\x54\xDE\xF3\xDE\xAF\xD4\xF5\xDE\xFF\xDC\x8D\xD1\xA0\xDD\x0F\xD2\xA2\xDD\x11\xD2\x1D\xDC\xA0\xD0\xA6\xDD\xA5\xC3\x6B\xCC\xB8\xBE\x00\xC9\x49\xD6\xEC\xC7\x77\xDE\x32\xDD\xB9\xCA\x34\xDD\xB7\xDE\xC6\xDD\xB9\xDE\x3E\xDB\x7F\xDE\x24\xDB\xC4\xBA\xE5\xD6\xED\xB5\xE7\xD6\xE2\xDB\xEB\xDA\xEA\xD6\x57\xC8\x71\x8B\xD0\xD2\x0B\xDE\xD9\xB5\xA0\xBF\xDB\xB5\x73\xC1\x65\xD6\x78\xDC\x29\xDE\x1C\xDF\x59\xCD\x1E\xDF\x45\xD1\x56\xDB\x42\xDE\xB0\xDD\x17\xDE\xCF\xDE\x46\xDE\xD1\xDE\xFC\xDA\x1C\xDE\x81\xDA\x1E\xDE\x17\xD6\x95\xD6\xCA\xCE\x7F\xDB\x66\x0D\x7D\xD6\xCC\xA8\x7F\xD6\x34\xDB\x01\xD2\xCA\xD1\xBA\xD6\xB4\xDE\x37\xDF\xE1\xDD\x40\xDE\x0C\xD6\x3C\xDF\xFE\xDD\xB1\xDD\xA8\xDE\xA9\xD6\x57\xD6\xAB\xD6\x97\xDE\x78\xDB\x99\xDE\x7A\xDB\xC3\xD1\xB1\xD6\xA6\xDC\xD7\xBF\xDC\xBC\xEA\xCE\x25\xDE\xEC\xCE\x35\xDF\x09\x01\x04\xDF\x8E\xCE\x06\xDF\x25\xDC\x6F\xCB\x68\xDC\xE8\xDC\x6A\xDC\xCA\xDA\xB5\xD5\xC3\xCE\xB7\xD5\xC5\xCE\xFC\xDE\xD6\xCF\xFE\xDE\x9B\xBF\xFB\xD1\xC9\xCC\x27\xD0\xF8\x96\xA4\xAC\xF3\xDD\x8C\xC1\x3D\xCC\xBA\xCE\x6C\xDF\xD4\xCE\x6E\xDF\xB2\xDC\x3B\xDF\xB4\xDC\x91\xDE\x25\xD6\x5A\xDF\x54\xDC\x5C\xDF\xA6\xDB\x5E\xDF\xA8\xDB\x60\xDF\xAA\xDB\x5D\xD6\x63\xDF\xF4\xDC\x50\xDB\x72\x04\xD3\xD6\x04\xD5\x1D\xD2\x19\xBD\x11\xC0\x36\xDF\x50\xDD\xF9\xDD\xB6\xDE\x3A\xDF\x6F\xDB\x57\xDF\xA6\xDE\x7E\xDC\x8E\xDF\x80\xDC\x90\xDF\x56\xDC\x92\xDF\x0B\xDC\x94\xDF\x0D\xDC\x9B\xDE\x61\xCE\xEF\xD6\x66\xC2\xF1\xD6\x43\xC3\x2D\x82\x73\xCC\x3B\xD2\x3D\xCF\x60\xCF\x03\xDB\xD4\xA6\x93\x62\x50\xCF\xD3\xD0\x86\xD1\x39\xDF\xFB\xDD\xA4\xDE\xFD\xDD\xA7\xDF\x9A\xDC\xA9\xDF\x9C\xDC\xAB\xDF\x82\xDC\xAD\xDF\x58\xDC\x45\xDC\x3C\x78\x15\xDB\x3A\xD4\x45\xDD\x88\xDA\x90\xC3\xE4\xC6\x92\xC3\x81\xA9\xBC\xDF\xDB\xB7\x0D\x61\xBF\xDF\x39\xD3\x83\xD9\xC0\xD0\x67\xDE\x13\xC2\x69\xDE\xF3\xD0\x6B\xDE\xF4\xDB\xBF\xDE\x4A\xCB\xCC\xD0\x70\xDE\xE5\xC2\xD0\xDF\x44\xDD\xBC\xDD\x29\xDD\xA2\xDA\x9A\xCF\x9C\xBA\xA0\xC3\x4C\xDD\x04\xC7\xEC\x7D\xDB\xDF\xF9\xDC\xEC\xD0\xEB\xD1\xE2\xDD\xED\xD1\x21\xDF\xC8\xDD\x23\xDF\x58\xDE\x25\xDB\x47\xDE\x27\xDB\x43\xDF\xFE\xDA\x45\xDF\x76\xB7\x64\xC9\x19\xC6\xB9\x03\x00\xCA\x8F\xDC\xAB\x77\x99\xBD\x10\xA4\xF5\xDF\xC6\xCF\xF8\xCF\x07\xD2\xE0\xDE\xE0\xD5\x16\xDC\x9E\xDD\x55\xD6\xA4\xDB\xCA\xDF\x9E\xDC\x43\xDC\xA0\xDC\xAF\xDF\xA2\xDC\x17\xCA\xCD\xCC\x8B\xD4\xD5\xDA\xAC\xBD\x4E\xDF\x95\x63\xD9\xDA\x49\xDB\x3F\x0A\x0E\xE0\xE3\xCF\x1B\xD4\xF8\xDF\x55\xDF\xE6\xDC\x7E\xD4\x8C\xDF\xA2\xDB\x3F\xDC\x17\xE0\x1A\xDC\x42\xDC\x41\xD6\x44\xDC\x06\xDD\x46\xDC\x06\xC1\x31\xCA\x1F\xCA\x27\x01\x28\xE0\xF7\xCF\x2A\xE0\x22\xD2\x2C\xE0\x2D\xDE\x2A\xBC\xC3\xD6\x59\xD5\xE6\xDD\x5B\xD5\xE8\xDD\xB4\xB3\xEA\xDD\x42\xDF\xD3\xDE\x94\xDB\xD5\xDE\x96\xDB\x48\xDB\xAE\xCC\x1B\xAA\x2E\xDD\xA7\xDA\x02\x01\x3D\xE0\x0C\xD0\xF7\xDF\x40\xE0\xA3\xDE\xDF\xD5\xA5\xDE\x2F\xE0\xB6\xDC\x31\xE0\xB8\xDC\x18\xE0\xBA\xDC\x1A\xE0\xBC\xDC\x1C\xE0\x62\x8A\xEA\xDF\x86\xDA\xE1\xC9\x39\xB4\xBE\xDD\x63\xCA\xF5\xBA\xC1\xDD\x13\xBD\x27", -"\xE0\x21\xD2\x11\xE0\xF9\xDF\x97\xD4\x43\xE0\x2F\xDE\x45\xE0\xC5\xD6\xE7\xDD\x3A\xDD\x34\xDE\xFB\xD5\x49\xCC\xFD\xD5\x4B\xCC\xCF\xDB\x4B\x63\x78\xCA\x4C\x05\xA5\xC7\x31\xDB\x80\xDB\x41\xA7\xDA\xDD\x5D\x0F\xDC\xDD\x54\xE0\x01\x01\x56\xE0\x7F\xDF\x1B\xD1\x59\xE0\x07\xDF\xAE\xDD\x15\xDE\x3D\xDF\x44\xDE\x3F\xDF\x59\xDE\xCC\xDD\x09\xDC\xCC\xDF\x84\xDC\xCE\xDF\x5A\xDC\x1E\xE0\x49\xDB\x11\xB8\x4B\xDB\x53\xCC\x22\xCF\x9A\xCA\xA2\xCE\x3C\xE0\x71\xE0\x5B\xD0\x12\xE0\x5C\xE0\x14\xE0\x3E\xDC\x9F\xDD\x40\xDC\x02\xDD\x34\xE0\x1C\xDC\xA4\xDD\x93\xD1\x38\xE0\xBF\x87\xD3\xDD\x39\xAE\x65\xDB\xD6\xDD\x67\xDB\xA7\xCD\x3B\xD0\xE9\xC3\x20\xD5\xD7\xD4\x06\x01\x8D\xE0\xFD\xD1\xC1\xDF\xEE\xD0\x1F\xDF\xE3\xDD\xFB\xDF\xE5\xDD\x78\xE0\x47\xE0\x7A\xE0\x00\xC0\x8E\xDD\x08\xBF\x90\xDD\x8B\xB4\x92\xDD\x4F\xE0\xCD\x85\xAF\xB4\x48\x6A\x49\xB8\x49\xDF\x11\xD9\x50\xCD\xBC\xE0\x8F\xC4\x39\xD5\xA0\xDE\x55\xE0\xA7\xE0\xDE\xDF\x8F\xDE\x2B\xD0\xC8\xDA\x73\xDF\xEA\xDC\xE5\xDE\x2B\xD2\xE7\xDE\x2D\xD2\xEF\xDC\x2F\xD2\x7B\xDF\x13\x96\x11\x0E\x11\x92\x3C\xDE\x32\xCA\x09\x01\xC1\xE0\x75\xD0\xB6\xD1\xA9\xE0\xC5\xDF\x5D\xE0\x57\xDD\xC8\xDF\xD1\xDC\x61\xE0\xD3\xDC\x63\xE0\xD5\xDC\x65\xE0\xD7\xDC\xE0\x84\xAC\xDB\xDD\xE0\x8C\xE0\xDF\xE0\x76\xD9\x85\xDD\x53\xDE\x92\xE0\xCC\xDE\x94\xE0\xCE\xDE\x00\xDE\x73\xDD\xFC\xE0\x5B\xDD\xFE\xE0\x5D\xDD\x00\xE1\x5F\xDD\x7A\xD5\x90\xA7\x5C\xB9\xF3\xE0\x92\xD0\xF5\xE0\x73\xE0\xC5\xDB\xE4\xDD\xF1\xDB\xDC\xCE\xCB\xE0\x1E\xC0\xCD\xE0\x66\xBF\x7E\xE0\xA5\xCC\x39\xDE\x24\xCB\x74\xDC\x26\xCB\x22\xC2\xCB\xBE\x6C\x97\xE9\xD0\xC0\xE0\x06\xE1\x19\x4D\xC4\xE0\xA4\xDF\x41\xDE\x8B\xDF\xAB\xE0\x92\xDE\x5F\xE0\x94\xDE\x98\xE0\xB5\xDD\x9A\xE0\xB7\xDD\x14\xE1\x72\x50\xA8\xD5\x42\xD4\xBE\xDF\x30\xE1\x67\xCF\x91\xE0\xAD\xDA\x7C\xDE\x56\xDE\x2F\xC1\x24\xDF\x64\xBB\x00\xE0\x66\xBE\xB5\xDA\x37\xBC\xB7\xDA\x7F\xE0\x2C\xDF\x50\xCB\x46\xD6\x42\xBF\x90\xDC\x9E\xDE\xC1\xD5\x04\xE1\x00\x00\x19\xE1\xD7\xDD\x1B\xE1\x41\xE0\xB8\xDE\x75\xE0\xBA\xDE\x77\xE0\x31\xDE\x79\xE0\x33\xDE\xCC\xE0\x35\xDE\xCE\xE0\x37\xDE\x0C\xBF\x80\xE0\xBF\xDD\x3B\xCE\x06\xB9\x64\xCE\x5B\xE1\xBA\xE0\xDD\xDF\x07\xE1\xDF\xDF\x97\xCB\x9D\xDD\xAC\xE0\x16\xE0\x60\xE0\x33\xE0\x5D\xDF\x12\xE1\x77\xDD\x9C\xE0\x86\xDC\xB0\xDE\xEC\xD5\x1B\xA8\xAE\xB5\x70\xE1\x0C\xDE\xCF\xD1\xC2\xDF\x7A\xDE\xFC\xDD\x47\xE1\xCD\xDE\x49\xE1\xFE\xDF\x25\xDF\x26\xDB\x4D\xE1\x49\xDE\xAC\xC0\x04\xE0\x00\xDB\x45\xD6\x4B\xC0\x01\x70\x56\xD1\xEE\xDE\x5A\xE1\x43\xE1\x2B\xDE\x33\xE1\x56\xDF\x35\xE1\xE2\xDE\x29\xDC\x60\xD0\xF8\xDE\x62\xD0\xFA\xDE\x64\xD0\x12\xDF\x13\xD2\x14\xDF\x04\xB9\x6C\xD1\x76\xAF\x6F\xE1\x9B\xE1\x79\xDE\xAD\xDD\x46\xE1\x8A\xD6\x58\xDF\x3E\xDF\x0E\xE1\xCB\xDD\x10\xE1\x75\xDD\x7C\xE1\xCF\xDD\x7E\xE1\x79\xDD\x9E\xE0\x00\xDA\xB8\xCB\x02\xDF\x18\xE1\xAE\xE1\xA3\xDF\xC3\xDF\x5B\xE0\xF7\xE0\x36\xE1\x8D\xDF\x38\xE1\xA9\xDE\x3A\xE1\x03\xDE\xB9\xE1\x05\xDE\xBB\xE1\xD1\xDD\xB1\xDF\x0A\xDD\x0B\xE0\x19\xDF\x21\xD5\xDE\xE0\xC0\xDF\x5D\xE1\x5A\xE0\xA4\xD6\x55\xDD\xF8\xE0\xA7\xDE\xC9\xE1\x5B\xDF\x7A\xE1\x91\xDF\xCD\xE1\x5D\xDE\xCF\xE1\x07\xDE\xD7\xB9\x89\xDC\xA5\xDC\x98\xDF\x30\xDF\xE6\xCB\xAF\xD1\xDE\xDC\xAC\xA8\xBA\xCE\x84\xE1\x5A\xD1\x2B\xE0\xD9\xE1\x3B\xDC\xDB\xE1\xC7\xE1\x30\xE0\xAD\xE0\x32\xE0\x41\xDC\x7B\xE1\x35\xE0\x1B\xE0\xE4\xE1\x5F\xDE\xE2\xCB\x48\xDF\x85\xE0\x4A\xDF\xCD\xCE\xC2\xBC\x25\xDE\x50\xDF\x6A\xDF\x2F\xE1\xD7\xE1\xF2\xE1\x45\xE1\x1A\xDD\x8A\xE1\x0C\xE1\x8C\xE1\x96\xE0\xFF\xDF\x41\xDF\x92\xDB\x4C\xE0\xED\xDD\x4E\xE0\xEF\xDD\x62\xDF\x66\xC9\xB2\xD6\x3F\xC5\xE3\xD1\x89\xC9\x14\xD1\x08\x9F\x6B\xDB\x70\xE0\x0A\xE2\x90\xE0\x6F\xDF\xBF\xCB\x13\xE0\xA0\xE1\xF6\xDE\xC1\xCE\x75\xDF\xCC\xDA\xED\xDC\xCE\xDA\xEA\xE0\xD0\xDA\xF1\xDC\x02\x94\xCF\xD6\x02\xE2\xD8\xE0\x0E\x03\xDD\xDC\x0A\xE0\xF4\xBF\xEF\xE1\xC2\xE1\xD0\xD1\xC5\xE0\xFA\xDF\x60\xE1\x22\xDF\xBB\xDE\x4A\xE1\xAF\xBF\x26\xDF\x5F\xBD\x28\xDF\x7D\xE0\xE3\xDB\xDD\xD1\x52\xE1\xDF\xD1\x33\xE2\x2F\xDF\xA9\xD2\x20\xCF\xA2\xE0\x53\xCD\x23\xCF\x56\xCC\x57\xE0\x04\x64\xF0\xE1\x9C\xD1\x0B\xE2\x25\xE2\x27\xCC\x71\xDF\xE3\xE0\xE3\xDE\x6B\xDC\xE6\xE0\xFB\xD4\x77\xDF\xFD\xD4\x79\xDF\xFF\xD4\xEC\xE0\x73\xDC\xD8\xDE\x2A\xE1\xB3\xDF\x76\xC3\x70\xCC\xE1\xDC\x33\xBD\x1F\xC6\xB4\xDF\x17", -"\xA5\x43\xC5\xC8\xD2\x11\x00\x39\xDA\x1A\xD4\xBF\xD0\x07\xE1\xA7\xD7\x15\x0E\x22\x09\x5F\xDC\x14\xD9\x8A\x61\x74\xD2\x13\x00\x7B\xE2\xFF\x00\x51\x0E\x3B\x0E\x16\xC5\x16\x86\xFE\xC4\xC4\x66\xB3\x08\x86\xE2\x04\x9B\x64\x9A\x19\xD3\x6D\xDA\xE5\xD3\x8A\x9A\x14\xC5\x3B\x0E\x26\xC5\x16\x86\x0B\xC5\xF8\x72\xB2\x0E\x94\xD3\x91\x9B\xE9\x71\xE5\xD3\xBA\xD8\x7E\x01\x83\xE2\x63\x68\x35\x00\xB7\xD8\x06\x01\x9F\xE2\x2C\xC5\xE1\x9A\x80\x9B\x8D\xE2\x36\x5E\x8F\xE2\x33\xC5\x91\xE2\x63\x68\x33\x00\xA0\xE2\x70\x1D\x6E\x63\x51\xDA\x6D\x71\x9A\xE2\x56\x24\x5A\xDA\x6F\xDA\x08\x83\x14\x00\x39\xDA\xBA\xCF\x62\x03\x14\x57\x3D\x5A\x37\xA5\x7D\x68\x61\x68\x5D\xDA\x01\x01\x08\xD3\x5C\x5D\x44\xDA\x33\xD9\xB9\xE2\xF6\x0B\x14\x5A\xAC\xD2\xBD\xE2\xC2\x64\xF1\x0B\x67\xDA\x0A\xD4\x6D\x5A\xF1\x0B\x6A\xDA\x8B\xE2\x9F\x9A\xDC\xC5\x7C\xE2\x97\x61\x5B\x98\x15\x00\x74\xE2\x8E\xE0\x35\x03\xCA\x40\x3F\x3D\x5F\xD9\x84\x9F\xCB\xE2\x39\xA5\x53\xDA\xA2\xB1\xBA\x03\xD9\xE2\x60\x80\x0A\x28\x55\x95\xBE\xE2\xE1\xE2\x7A\xD3\xF6\xD2\xBB\xD7\x9B\xD7\xB1\x8B\x8F\x8E\x56\xDA\x02\x63\x80\xD2\x71\xD8\x20\xD8\xBB\x07\xD5\xE2\x52\x61\x74\xD2\x17\x00\x80\xE2\xC0\xE2\x00\x00\xC2\xE2\x95\x64\xC4\xE2\x95\xE2\x8E\x9B\xBF\x77\x22\x0B\xD1\xE2\x0D\xC5\x65\x9A\xA5\xE2\x8B\xD3\xD4\xE2\x12\x83\x74\xD2\x18\x00\xB8\xE2\xDA\xE2\xBB\x0C\x10\x02\xB4\xE2\x92\xC0\xB2\x69\x7C\xA5\xAD\xD9\xC1\xE2\x5F\xDA\x83\xD2\xC2\xE0\x79\x3C\x64\xDA\x5A\xCF\x14\xE3\xA5\x0C\xCD\xE2\xDF\x5A\xDE\x52\x05\xE3\x18\xD3\xD3\xE2\xF5\x70\x67\xD2\xD7\x5A\x31\x0B\x21\x68\xF7\xE2\x44\x66\x74\xD2\x1A\x00\xFB\xE2\x1D\xDA\x01\x01\xBC\x8A\x59\xB2\x26\x9B\x37\xC5\xCE\x05\xEF\x66\x40\x68\xC9\x05\x23\xE3\x90\x9B\x1D\xC5\x09\xE3\x26\xE3\x2B\xE3\x9C\xCF\x98\x9F\x06\x01\x9A\x9F\x7E\x71\x9C\x9F\x3E\x22\x9E\x9F\x9A\x0B\xA0\x9F\xBB\x33\x89\x58\x32\x03\x8D\x9F\x64\xAE\xA7\x9F\x11\x07\x8B\x9F\xAA\x1E\xAB\x9F\x48\xA6\xDC\x7E\xAE\x9F\xBC\xE2\x26\xA5\x40\x65\xB2\x9F\x3F\xE3\x28\x65\x0D\x0E\x3C\x66\x1B\x00\x7B\xE2\xAC\x86\x32\xD3\x15\xD4\x09\x01\xC7\xD8\xA1\xDF\xE9\x14\xAF\x27\x3F\x0A\x94\xE2\x31\xDA\xC9\xD8\xC3\x70\x9B\x6D\xC5\x70\xB6\x9A\x65\xE3\x6A\xDD\xCF\xD8\x0B\x34\x69\xE3\xEF\x66\x9B\xE2\xF6\x89\x00\xE3\xAD\x9A\xD2\xE2\xAF\x9A\x3D\xE3\x6E\x71\xD6\x66\x37\x9A\x65\xD3\xB1\x01\x62\xD3\xC7\xDE\x79\x95\x12\x08\xCD\x9A\xB1\x30\x08\x29\x42\x9A\x27\x01\x0E\x90\x30\xD7\x03\x01\x71\xE3\x83\xDD\xC7\x99\x68\xE3\x5A\x03\x76\xE3\xB3\xE2\x74\x08\x4E\x9A\xFF\xC4\x06\xE3\x8C\xE2\x7D\xE3\x54\x9A\x80\xB8\x56\x9A\x5C\xC4\x3F\x0A\x8F\xE3\x99\xDD\x73\xE3\xED\x3C\x75\xE3\x9E\xD9\x8D\x9B\x15\x9B\x8F\x9B\x39\x9B\x98\xE2\x3F\x53\x5D\xD3\x77\x0D\x43\xA5\x6D\x9A\x28\x28\x72\x00\x47\xA5\x21\xAB\x00\x00\xE9\x63\x8D\xE3\x02\x01\xA1\xE3\xE0\xDD\x92\xE3\x96\xE2\xA6\xE3\x96\xE3\x7D\x9B\xDB\x5A\xB0\xE2\xF4\x9A\x23\x71\xEA\x5B\x8A\x83\xB9\xE3\xF8\xDD\x67\xE3\x74\xE3\x93\xE3\xBD\xE3\x7C\x9B\x4D\x05\x97\xE2\x3C\xE3\x5B\x53\x0A\xE3\x0D\x85\x92\x9A\xCD\x94\xC6\xE3\x65\xDE\x91\xE3\xC9\xE3\xBC\xE3\xF4\xE2\x48\xC6\xA7\xE3\xDF\x9A\xA3\xE2\xC3\x9A\x90\x9A\xAC\x86\xA2\x9A\xD4\xE3\x5F\xC8\xBB\xE3\x1A\x06\x94\xE3\x8A\x28\xDC\xE3\x2C\x0E\xCE\xE3\x9A\xE3\xD0\xE3\x3E\xE3\x40\xE3\x38\x59\xB4\x9A\xC6\x70\xC8\x69\x8E\xE3\xE4\xE3\xD8\xE3\xE6\xE3\xCB\xE3\x2F\x9A\x02\xE3\x98\xE3\x24\xE3\x7C\xE3\xED\xE3\x7E\xE3\x63\xD3\x79\x01\xC8\x9A\xB5\x03\x83\xE3\x41\xE1\xDB\xB7\xAF\xE3\xCE\x9A\x8F\x57\x79\x71\x67\xD3\x1D\x01\xBE\x5E\xD3\x9A\xC5\xE3\xF5\xE3\xA4\xE3\xCA\xE3\xDA\xE3\x09\xD5\xE9\xE3\x58\xD2\xDE\xE3\x3A\x9B\x3F\x53\x8E\x71\x27\x01\x90\x71\xE3\xE3\x04\xC9\xE5\xE3\xD2\x06\xE7\xE3\x6A\x53\xBE\xE3\xFA\xE3\x7A\xE3\x99\xE3\x25\xE3\xF5\x9A\x15\x0E\xF7\x9A\x0F\xE4\x1E\xE4\xF6\xE3\x20\xE4\xF8\xE3\xAB\x9A\x24\xE4\x8A\xE2\x26\xE4\xFD\xE3\x2B\x9B\xD1\x8A\x0D\x0E\xB3\x71\x2B\xE4\x95\xCC\x1F\xE4\xE6\x06\x21\xE4\x6C\xE3\xCC\xE3\xA8\xE3\x1B\xC5\x3B\xE3\xEC\xE3\x35\xE4\x91\x03\x8F\xD3\xB5\xA0\xD5\xE3\x8D\xDE\xA3\xE3\x21\x41\xBF\x70\x6A\xE3\xD7\xD7\xE8\xE3\x23\xE4\x36\xE3\x17\xE4\xEC\xD8\x3B\x9B\xD9\x71\x27\x01\xDB\x71\xFD\xB1\x48\xE4\xDE\xDE\x4A\xE4\xAC\x27\xA5\xE3\x13\xE4\x97\xD5\x15\xE4\x79\xE3\x32\xE4\xFC\xE3\x06\x9B\x9B\xE3\xAC\x86\x70\x9B\x22\x08\x39\xE4\x53\xDF\x3B\xE4\x50\x07\x3D\xE4\xDB\xE3\x50\xE4\xDD", -"\xE3\xA9\xE3\x2D\xC5\xAB\xE3\x66\xD2\xAC\x86\x34\x72\x69\xE4\x66\xE3\x9D\x15\x6B\xE4\xB4\x08\x6D\xE4\x14\xE4\x6F\xE4\xEA\xE3\x52\xE4\x07\xE3\x6C\xDA\x65\xE4\x00\xDF\xE7\xC9\x35\x82\xD2\xB1\x25\xD3\x1A\xD7\x5B\x92\xE1\x17\xB5\xD7\xED\xC0\xB7\xD7\x9C\xD3\x44\xCF\x7D\xB0\x53\xB2\x09\x01\x88\xE4\x4B\xD7\x8A\xE4\xEC\x04\xC3\xD7\x91\xB6\x3F\xC4\x3F\x0A\x94\xE4\x70\xD7\x96\xE4\x32\x03\xCF\xD7\x5A\xB1\xF6\xD7\x9F\xB6\xB7\xE3\x01\x01\x9C\xE4\x8A\xD7\xAA\x4F\xD9\x17\xE0\xD7\xE2\x9F\x49\xD8\x07\xD8\x18\xB2\xE7\xD7\x8C\x99\xA6\xE4\xBD\xC6\x2A\x93\xA9\xE4\x28\xD7\xAC\x56\x2A\xD7\x74\xD7\x18\xD8\x82\xD7\x2C\xD8\x16\xD7\xB4\xB6\x4D\xD8\x0A\x5F\xB1\xE4\x15\x92\x9E\xE4\x53\x02\x02\xD8\x24\x5F\x42\xD7\xA3\x99\xDA\xDA\x6B\xD8\x60\xD7\x30\x6A\x99\xE4\xD8\xDB\x02\x63\xC0\xE4\x04\x93\xE3\x92\x4D\xA0\x00\xB2\x8D\xB1\xCF\xA0\x3C\xD8\x5B\xB1\xB9\xB0\x9A\xE4\x6A\x5C\x08\xD7\xD1\x1A\xAF\x99\x27\xD8\xA1\xE4\x47\xD7\x23\xB2\xBE\xE4\x29\x5D\xCF\xE4\x4D\x93\xD1\xE4\xE0\xD7\xE1\xB6\xB8\xE4\x5A\xD8\xBA\xE4\x3B\xD7\x2D\xD8\xFF\x00\x3E\xD8\xA0\xB6\x93\xE4\xDB\xE4\xE3\x17\x47\xD8\x37\xB2\xAC\xE4\x9C\xB6\x08\xD8\xCD\x83\xB0\xE4\xF2\xE4\xB4\xE4\xF7\xB6\x4F\x5C\x73\xD7\x59\xD8\x9B\xC6\x2B\xD8\xEC\xE4\xBC\xE4\x46\xB2\xE2\xE4\xA7\x5B\xE4\xE4\x72\x93\xE6\xE4\x14\xD8\xE6\x99\x05\xB7\xE9\xE4\x01\xE5\xFB\xB6\x5B\xB1\x56\xA0\xF1\xE2\x04\x64\x08\xE5\x93\x93\xD1\xE4\x8D\xD7\x79\xD8\x43\xD2\x76\x68\xFB\xE4\x8B\xE4\x95\xD7\x85\xD8\x59\xB2\x9B\xE4\x1C\xE5\x97\xE4\xD1\xC4\x9C\xD7\xFA\xE4\x92\xD7\x7E\x68\x53\x02\x99\xD8\xE2\xB6\x9B\xD8\x8E\xE4\x78\xE2\xB0\x95\x86\xE4\xBA\xD7\x02\x01\x29\xD3\xB6\x7A\x30\xA5\x50\xCC\x85\xB6\xB6\xD7\xA6\xD7\x6C\x6F\x90\xA0\x90\xD7\x5D\x5C\x62\xD2\x8D\x01\x13\x65\x56\x22\x22\xD3\xD1\x5B\xE4\xB1\x9E\xD7\x33\xE5\x3B\x7C\x22\x95\xC2\xB1\x90\x67\xA1\x85\x13\xD7\xF4\xD7\x3A\xB2\xE0\xE4\x8E\xB0\x8C\x99\x46\xE5\x94\x7C\x48\xE5\x5F\xB1\xEC\x5E\xA4\xB6\x5C\x82\x4D\xE5\xEE\xB6\x4F\xE5\x3C\x0E\xE8\xD7\xA4\xE4\x64\x68\x37\x95\x2B\x05\xF1\xD7\x29\xD7\xF3\xD7\xF6\xE4\xC9\xE4\x99\xB0\xA5\xB0\xFD\xB1\x52\xE5\xA1\x94\xFC\x94\xD2\x94\x0A\xB2\x59\xE5\x83\xD7\xED\xE4\x0A\xD8\xF0\xE4\x67\x68\x60\xE5\x54\xE5\x8C\xB1\x9E\xA0\xF4\x5B\x16\xD8\x69\xD8\x39\xD7\xEB\xE4\x53\xD7\x54\xA0\x8E\x82\x51\xE5\x75\xE5\x6C\xE5\x4E\xD7\xDE\xE4\xD6\xE4\xF6\xD7\x56\xD7\x24\xD7\x74\xE5\x3E\xE5\xE7\xE4\x5D\xD7\x0E\xE5\x2F\xB1\xD7\xB6\x5C\xD8\x2F\xB2\xC4\xD7\x51\xD9\x3F\x0A\x6A\xE5\xA8\x94\x83\xE5\x02\xB7\xB1\x82\xDF\xE4\x84\xD7\xF0\xB6\x93\xE5\x95\xC3\x8A\xE5\x3D\x95\x83\x07\x0B\xE5\xC4\x06\xF9\xB6\x65\xE5\x90\xE5\x6C\xD8\x79\xD7\xDA\xB6\x96\xE5\xC4\x94\x98\xE5\xA4\xDC\x78\xE5\x7E\xD7\x0D\xE5\x00\xE5\x8F\xE5\x5B\xD8\xA8\xE5\xFC\x66\x86\xD7\x54\xD3\xA0\xE5\x0E\x79\x35\xE5\x70\xC7\x19\xE5\x17\xB7\x03\x01\xAB\xE5\xD0\x94\x31\x95\x5E\xB2\xF1\x8E\xC0\xE5\xDE\x94\x25\xD9\x03\xDA\x0E\x85\x9E\xE5\x31\xB2\x3D\xE5\xA1\xE5\x2A\xE5\x8E\xE5\xB0\x7C\x25\xA1\x23\xA1\x5D\xD4\x80\xB6\x6F\xD8\x09\x01\x59\x68\x0F\xD7\xCF\xE2\xEA\xE2\x0F\xDD\x94\xBD\xAA\xC3\x2D\xE5\x3A\xE5\xB9\xD7\x92\xE4\x55\x68\x08\xD7\x57\x95\xA3\x94\x8C\x99\xD7\xE5\x89\xE4\xD9\xE5\xC9\x05\xA0\xE4\x86\xE5\x5B\xE5\x9E\xB6\xE6\xE5\xE3\xE5\xE8\x0B\xAA\xE4\xE2\xD7\xCF\xE5\x07\xB7\xCA\xE4\x7C\x99\xDA\xB6\xE7\xE5\x95\xE4\xE9\xE5\x75\x05\x62\xE5\xB6\xE4\x64\xE5\xF4\xE5\x2C\xD7\xF6\xE5\x81\x60\xEF\xE5\x27\xE5\xF1\x0B\xC4\xE4\xC3\x68\xC6\xE4\x27\xA1\x0B\xC6\x10\xE5\xF6\xD7\x72\xE5\x5E\xE5\xF9\xE5\x9D\xE4\xFB\xE5\x98\x05\x41\xD7\x04\xD8\xC7\xE4\x9F\xE0\xB4\xE5\x02\xE6\x19\xB2\xF8\xE5\xF0\xE5\xEA\xE5\xD2\xB6\x48\x6A\xD4\xB6\xB2\xE5\xE3\xB6\xA7\xE5\x19\xE6\xE3\x85\x04\xE6\xE2\x92\x11\x5A\x86\x05\x8C\xE5\x3B\xD8\xD1\xD7\xB5\xE5\x5B\x6A\x26\xE6\xCE\xE2\x38\xA5\x1D\xE6\x5B\xD7\x33\xA0\xF5\xE4\x00\xE6\x5F\xD7\xDC\xB0\x2F\xE6\xD8\xE5\x31\xE6\xFC\xE5\xA3\xE5\xBC\x01\xA5\xE5\x36\xE6\xE4\xD7\x1A\xD8\x45\xA0\xCA\xE5\xCF\xB6\xD6\xE5\x1C\xE6\x3C\xE6\xFD\xE4\xF4\x5B\x68\xD8\x38\xD7\x51\xD7\x7D\xE5\xE5\xD7\x54\xD7\x3C\x0E\x12\xE5\xDE\xB1\x2C\xD3\x05\xE6\xDA\xE5\x0E\xB7\x19\xE3\xEF\x99\x54\xE6\x27\xE6\x12\xE6\x86\x05\x84\xD8\x16\xB7\xE1\xE5\x58\x68\x47\xE6\x98\x05\x8E\xD8\x3D\xD3\x44\xE6\x33\xD9\x3F\x0A\x10\xE6\xA7\xE4\xFC\x56\xE8\x0B\xCE\xE5\x21\xE6\x2C\xE5\x39", -"\xE5\x42\xE5\x31\xD3\x07\xD4\xBE\xD2\x6C\xD3\xA8\x62\x86\x02\x68\xE6\xDA\x8E\xC7\x99\x14\x35\xC7\xD2\x65\xE6\x34\x50\x6E\x63\x01\x13\x27\x01\x75\xE6\xD5\x63\x86\x02\x0B\x9A\xBC\x57\xF0\xE0\x84\xE4\xFF\x00\x62\xE3\x31\xC4\x09\x01\x70\xD3\x76\xE6\x16\x02\x78\xE6\x04\xC9\x7B\xE6\x49\x62\x5B\x98\x1C\x00\x7F\xE6\x29\x5D\x8D\xE6\x83\xE6\x16\x02\x85\xE6\xA5\x49\x38\x29\x80\xD1\x85\xE4\x16\xB1\xB8\xC3\x48\x68\x96\xD8\x5A\xA0\x64\xA0\x34\x17\x8C\xE4\xDD\xE5\x70\xE6\xAC\x86\x3B\xE5\xFE\xB0\x02\x63\x79\xD3\x64\xD8\x17\xA0\xD8\x3C\x98\xE4\x2F\xD7\xD4\xA0\x78\xD3\x76\xA0\x6E\xA0\xFB\x9F\xEB\xE5\x2C\xE6\x24\xE6\x54\x82\x8C\x99\xAE\xE6\x8B\xD8\x88\x95\x31\xA0\x39\xD8\x90\x68\xAB\xE4\x40\xE6\x4A\xD8\xEE\xB1\x3E\xB1\x06\xE5\x1B\x5F\xBE\xE6\x64\xB0\x4B\xA0\xA5\xE6\x16\x1D\xFD\xE5\xFB\x56\xB7\xE4\x21\xE6\xF5\xE5\x67\xE5\xBD\xE6\xB6\xE6\xC1\xE6\x4E\xB1\x03\xD8\x28\xD8\xAB\xB1\x2A\xD8\x0C\xE6\xED\xE5\x0E\xE6\xB4\xE6\xA2\xE6\x23\xD8\x86\xA5\x3C\xA0\x3D\xE6\xE3\x04\x09\xE6\xBF\x9F\x0B\xE6\x21\xD7\xD7\xE4\xD6\xE6\xA3\xE6\x77\xA0\x01\xD3\x27\xA0\x1E\xE6\x05\x48\x49\x6A\xEC\xE5\x9C\xE5\xB5\x99\xED\xE6\xE3\xE6\xDC\xD7\xB7\xE6\x65\xA0\x2A\xE6\x37\xD6\xC5\xE6\xAD\xE4\x4B\xD8\x2E\xE6\xDA\xB6\xCB\xE6\x87\x95\x10\xD3\x4C\xA0\xF4\xE4\x68\xD7\x6F\xE5\xBB\xE4\x78\xD7\x4C\xD8\x66\xE6\x60\xD9\x3F\x0A\x04\xE7\xB4\x95\xFA\x9F\xFC\xE6\xE6\xE6\xFF\xE4\x7B\xE5\x4D\xE6\x02\xE5\x7E\xE5\xBE\x85\x05\xE5\x0E\xE7\xDB\x94\xAD\xE6\xD7\xE6\xE5\xE6\x49\xE6\xB0\xE5\x4D\xB2\x0A\xE7\x03\xE5\x0C\xE7\x51\xB2\x59\x5F\xBE\xE5\x02\x01\x11\xE7\xD5\x95\x13\xE7\xA6\xE6\x78\xD8\x20\xDA\xF9\xD6\x1F\xE7\xEE\xE6\xFB\xE6\x2F\xE7\xF3\x76\xFE\x99\x06\xD7\x33\x5C\x20\xE7\x5B\xA0\x24\xE5\xC9\xE5\xCC\xE4\xEA\xDB\x04\x64\x2C\xE7\xC6\x9F\xCD\xE6\x78\xA0\x47\x27\x6D\xE6\x17\xE7\xB6\x6B\xD1\xE5\x65\x69\x0B\xE3\x7F\xA5\x1D\x00\xE5\xE2\x79\xD6\x1C\x49\x39\x31\xE5\x59\xB3\xC4\x60\xBA\x30\xE5\xA1\xE6\x03\x01\x9A\xD3\x6A\x85\xF0\xD2\x71\x9F\xDC\xE5\xBB\x7D\xDE\xE5\x9C\x94\xE0\xE5\x59\xE6\x1E\x5C\xE7\x9E\xB2\xE6\xBB\x82\xAA\xD7\x63\xE7\x5D\x9F\x48\xE6\x12\xB2\x9F\xA0\x2D\xB1\xFF\xE6\xF7\xE4\xAE\xE4\xBC\xE6\xDA\xB6\x59\xE7\x33\xAD\xF9\x26\xF2\xE5\x3A\xB1\x25\xE7\x1A\xE7\x8D\xB0\x5C\xE5\x8C\x99\x73\xE7\xDD\x9B\x75\xE7\xB5\xE4\xD1\xE6\xFF\xE5\xD3\xE6\x01\xE6\xD5\xE6\x72\xE7\xE7\x9E\x07\xE6\x41\x88\xE8\xE6\x29\xD8\xB9\xE4\x19\xE7\x4F\xE6\x7F\xE5\xFF\x00\xE0\xE6\x67\xE7\x06\x01\x7D\xE7\xEE\xA5\x7F\xE7\x22\xE7\x15\xD8\x8A\xE7\xDC\xE6\x8C\xE7\xDE\xE6\xF6\xE6\xD8\xE4\xCD\xE4\x04\x64\x94\xE7\x08\xAB\x96\xE7\x46\x6A\x4F\xD7\x48\xE7\x9B\xE7\xEB\xE6\x87\xE5\x7C\xE7\x87\xE7\xC2\xE6\xE3\xA0\x8D\xE5\x83\xE7\x37\xE6\x9D\xB6\xEF\xE4\x5E\xE5\xA1\xE7\x2D\xA6\xA3\xE7\x5E\xAC\x9A\xE5\xF5\xE6\xED\xE4\x3D\xB2\xFD\xB1\xB4\xE7\x52\xA6\xB6\xE7\x02\xB7\x17\x95\x9B\xE5\xED\xE4\xFD\xB6\xE1\xE6\x58\xE7\xAB\xE7\x97\xE7\x0C\xE5\x24\xE7\xA6\xE5\x18\xE6\x99\xB0\x52\xE6\x3C\xE5\x68\xE7\x8D\x7C\x5B\xE7\x80\xD3\x31\xE7\x77\xA5\xA0\xE7\x64\xE7\x1E\xE5\x5F\xE6\x62\xE7\x93\xE7\xD7\xE7\x6F\xD2\x5D\x0F\x9D\xD7\x89\xE5\xC6\xE7\x69\xE7\x98\x05\x47\xE7\x4C\xE6\x49\xE7\x6F\xB2\x1F\xB1\x4B\xDD\x71\xDA\x80\xCF\x04\x64\x9F\xD3\x13\xC0\x26\xDC\xE1\xDE\x28\xDC\x29\xE2\x0D\xD2\x0E\xDF\x31\xD4\x10\xDF\x33\xD4\xB2\xE0\x35\xD4\x76\x76\x67\xE0\x96\xCF\xC4\x66\x46\xDD\xAB\x95\xC6\xC9\x3B\xB7\x43\xBA\x40\xD4\x53\xE0\x09\xD0\xED\xE7\x78\xBD\x88\xE1\xC4\xDF\x0E\xE2\xB3\xE1\x95\xE0\xB5\xE1\xD0\xDE\xCB\xE1\x5B\xDE\xE2\xE1\x98\xDE\xFE\xE1\x56\x96\x42\xDD\x77\xCF\x81\xE0\xC4\xC9\x56\xB7\x7C\xCF\xD2\xBA\x4B\xDD\xA6\xDA\x05\xE8\xF6\xBF\x1D\xE1\xC7\xE0\x1F\xE1\xAF\xD0\x48\xE0\xE4\xB4\x4A\xE0\x14\xE2\x3C\xE1\xAD\xDE\x3E\xE1\xAF\xDE\x60\xDD\xC3\x07\xFF\xC9\x50\xAD\x01\xCA\x76\xD4\x66\xDD\x8B\xE0\x00\x00\x06\xE8\xA3\xC9\x74\xE1\xCC\xD5\x76\xE1\x37\xE1\xF8\xE1\x79\xE1\xFA\xE1\xE1\xE1\xFC\xE1\x64\xE0\x13\xE8\x61\xDF\x50\xE0\x07\x0E\x19\xCA\xE7\xB3\x97\xC0\x25\xE0\x6A\xD8\xC3\xD2\x1F\xE8\x36\xDD\xC6\xDB\x8A\xDD\x39\xDD\x65\xE1\x22\xE1\x67\xE1\x24\xE1\x48\xE2\xB8\xDA\x4A\xE2\x03\xCD\xA5\xD4\x1E\x7E\x36\x89\x35\xE8\x9C\xDE\xC8\xD5\x13\xDE\x0A\xE1\x09\xDF\x7D\xDE\x40\xE2\x62\xE1\xBC\xDE\xD7\xBE\xBE\xDE\xF7\xD0\xF6\xDB\x4A\xD5\xC2\xDE\x4E\xCB\x7F\xD1\x70\xC7\xA9\xDD\x11\xCE\x27", -"\x01\x5B\xE8\x61\xCE\x37\xE8\xF4\xDE\xCD\xD5\xF7\xE1\x78\xE1\x39\xE1\xB7\xE1\xCD\xDD\x11\xE8\x5F\xDF\x41\xE8\x6C\xA1\x15\xE8\x6A\xBD\x17\xE8\x79\xCF\x5C\x96\xC3\x68\x5E\x96\xCE\xC3\x1B\xDB\x6E\xE0\xC4\xBF\x02\x63\x71\xE8\xD2\xE1\x5D\xE8\x09\xE1\xB1\xE1\xAF\xDD\x0B\xE8\x0D\xE1\xFA\xE0\x59\xDD\x79\xE8\x99\xE0\x7B\xE8\x93\xDF\x7D\xE8\xB0\xDF\xD3\xE0\xB6\xE0\x83\xE0\xD5\xDD\x4B\x85\x92\xD0\x81\xDB\x4C\xDB\xD5\xD6\x54\xCD\x68\xC4\xB5\x9B\x8B\xE8\xFF\xC8\x73\xE8\x0A\xDF\x75\xE8\x5E\xE0\x3B\xE8\x78\xE8\xE0\xE1\xAC\xDF\x97\xE8\xAE\xDF\x99\xE8\x1D\xE0\x6A\xCD\x52\xD0\xF2\xDD\xA2\xE8\x33\xC9\xF5\xDD\xBA\xCE\xA7\xE8\x2A\xE1\xA9\xE8\x61\xE8\xFC\xDF\x41\xE2\x8D\xE1\x4B\xE1\x13\xE2\x21\xDD\x02\xE0\x29\xDB\x93\xE1\x2B\xDB\x7B\xDB\x09\xDE\xB8\xE0\x9F\xE8\xD7\xDD\xA1\xE8\x50\xE2\x4D\xDB\x6A\xDB\x88\xE8\x29\xC3\x70\xE8\x4B\xE8\xF4\xD5\xF0\xDB\x38\xDD\xF2\xDB\x21\xE1\xA7\xC0\x23\xE1\x97\xBF\x54\xE8\x51\xE1\xED\xDA\xD1\xDF\x34\xD5\x7D\xDB\x36\xD5\xBB\xE0\x1E\xD5\xE9\xC3\xDC\xE0\xB3\xDE\x02\x01\xBC\xE8\x6C\xCC\x8D\xE8\xCA\xDE\x54\xDD\xA6\xDF\xDC\xE1\xA8\xDF\xDE\xE1\x8F\xDF\xAF\xE8\xCB\xDF\xB1\xE8\xCD\xDF\x37\xE0\x5C\xD6\x12\x84\xA3\xD0\x4A\xDC\x34\xE8\xD6\xE8\x92\xDA\xF5\xD5\xD9\xE8\x20\xE1\x50\xE8\xDC\xE8\x52\xE8\xDE\xE8\x2A\xDF\xE4\xDB\x56\xE8\x33\x92\x66\xD5\xF9\xC1\x41\xB5\xEC\xE8\x17\xDF\xBE\xE8\x48\xE1\x15\xC2\x42\xE2\x1D\xC1\x8F\xE1\xAE\xBE\xC6\xE8\x23\xDD\x4B\xDE\x6B\xC1\xFA\xCA\x61\xDE\xEB\xE7\x4A\xE8\xEE\xE7\x70\xDF\xF0\xE7\x69\xDC\x5D\xE2\x74\xDF\xA3\xE1\xB6\xD5\xA5\xE1\xB8\xD5\xA7\xE1\x6E\xD4\xA9\xE1\xE4\xD0\x51\xCB\x34\xDC\xBC\xB8\x24\xC2\xA5\x81\x20\xE9\x07\xE8\xB0\xE1\x0D\xE2\xB2\xE1\xC6\xDF\xCF\xDC\x93\xE8\xB3\xDD\x0F\xE8\x96\xDE\xF8\xE8\x9B\xE0\xFA\xE8\xCD\x7A\xFD\xD0\x01\x80\xEC\x7D\x10\xE9\xE3\xBE\xEE\xE8\xF1\xDE\xF0\xE8\x9F\xE1\xF1\xE7\x0C\xDF\xB2\xD4\xF4\xE7\x6A\xD4\xF6\xE7\x6C\xD4\x2B\xE9\xB8\xD4\x2D\xE9\xE3\xC3\x67\xE2\xED\xE8\x15\xD1\xF5\xBB\x0F\xE9\x00\xE9\x5B\xE2\x89\xDD\xDD\xDB\x95\xDA\xDF\xDB\xC8\xD6\x7C\xE0\x80\xCD\xDF\xE8\x26\xE1\x6B\xE1\x6C\xE0\x25\xAF\x53\xB5\x64\xCE\x46\xE9\x42\xC0\x8D\xBC\x36\xE9\x7B\xDE\x38\xE9\xF2\xE8\xC7\xDF\xF4\xE8\xAA\xDF\xF6\xE8\x19\xE0\x3F\xE8\xFF\xE0\xB3\xE8\xBE\xDC\x47\xDC\x38\x59\x4F\xCE\x92\xCC\x6C\xE9\x47\xD6\x6E\xE9\x5E\xE8\x8F\xE8\x93\xE0\x91\xE8\x10\xE2\x0D\xE8\x40\xDF\x3D\xE9\xAB\xDE\x28\xE8\xD4\xDE\x2A\xE8\xD6\xDE\xD1\xE1\xD9\xDE\x98\xE1\x28\xDE\x9E\xD3\x5C\xE9\x23\xE9\x72\xDF\x25\xE9\xE5\xE0\x2B\xE2\xE6\xDE\x2D\xE2\x6F\xDC\x63\xE2\xE9\xD5\x65\xE2\xF7\xC1\xA4\xC2\x54\xBF\x5A\xE8\x95\xE9\x27\xE2\x4C\xE9\x15\xE0\x18\xDC\xF9\xE1\xAF\xE0\xFB\xE1\xB1\xE0\x36\xE0\xA5\xDD\xB4\xE0\x0F\xB8\x9E\xE6\xFF\x00\x39\x98\xDD\xDD\xFF\xE8\x21\xE9\x26\xE2\xAA\xE0\x28\xE2\x4D\xE9\xB4\xDB\x4F\xE9\xB4\xD4\x51\xE9\xB6\xD4\x53\xE9\xBA\xD5\x55\xE9\xEF\xC3\x29\xE1\xED\xE8\x76\xDC\xEF\xC2\xD0\xCB\x03\x01\x80\xE9\x55\xE1\xE4\xBE\xC4\xE1\xDA\xE1\xF1\xE8\xF6\xE1\xAC\xE8\x77\xE8\xCA\xE1\x95\xE8\x3B\xE1\x3F\xE9\x3D\xE1\x7A\xE9\x01\xE1\xE6\xE1\x49\xE5\x82\xC3\xF2\xD8\x8C\xDC\x63\xC4\xA1\xBC\x38\xE2\xB9\xCE\x21\xE2\xD5\xE8\xB7\xE9\x5A\xE2\x96\xE9\x5C\xE2\xA1\xE1\xE4\xDE\x9A\xE9\xE7\xE0\x9C\xE9\xE8\xDE\x2F\xE2\xEA\xDE\x31\xE2\x08\xC0\x50\xE7\x6F\xC4\x06\xC3\x4C\xDF\xAA\xDC\x02\xD6\xAC\xDC\xC8\xE9\xA5\xE0\x94\xE9\xE6\xE9\xF7\xCC\x5D\xE9\x02\xE9\x4E\xE8\xDA\xE8\x05\xE9\x67\xC7\x63\xE9\xCA\xD6\x25\xE1\xCC\xD6\x67\xE9\x2D\xC9\x7D\xDF\x7A\xD6\x91\xC1\x4C\xC9\x9A\xD6\xE2\xE9\x20\xE2\xD3\xE8\xB6\xDF\x34\xE9\x36\xE8\xE1\xE0\xC7\xDA\x5E\xE9\xA1\xD1\x29\xD2\x5F\xE2\x6D\xDC\xEE\xE9\xE9\xE0\x9E\xE9\xBA\xDB\xA0\xE9\x32\xE2\x0C\xEA\x02\xD6\x54\xE2\xB4\xD6\x8C\xC4\x8C\xD0\x91\xC4\x08\xE2\xCA\xE9\xA5\xE9\xB9\xE9\xA7\xE9\x77\xE1\xA9\xE9\x3C\xE8\xAB\xE9\x3E\xE8\xAD\xE9\xFD\xE1\x41\xE9\x7F\xE1\x19\xE2\xC0\xDC\xD9\xB9\xDE\xE9\xF5\xDC\x1E\x99\x1E\xE2\xAB\xDC\x8B\xC9\xD7\xD6\x0F\xE0\x0D\x61\xCB\xE9\x88\xBF\x59\xE2\xFF\xE9\xE8\xE9\x19\xEA\xE9\xDC\xA2\xD1\x1C\xEA\xEC\xDC\x61\xE2\xE7\xD5\x20\xEA\x71\xDC\x22\xEA\x7C\x94\x54\xD1\xBE\x70\x69\xE2\x6F\xCC\x6F\xD0\x6C\xE2\xF3\xD6\x11\xDD\xB9\xDF\x13\xDD\x70\xE2\x81\xB2\x7F\xA5\x1E\x00\x4F\xE7\x5E\xD6\x7E\xDF\xF1\xDF\xEA\xE7\x67\xE6\x72\x36\xA5\x62\x2D\xCD\x04\xDB\xCD\xC0\x55\xD4\x1D\xD0\x57", -"\xD4\xD3\xDF\x59\xD4\x91\xC3\xC8\xC9\xD7\xDF\x8D\xDA\x65\xDC\x02\x63\xB6\xD3\xFA\xE7\xBA\xDD\xCF\xC0\xFD\xC6\x9C\xC3\xEE\xDF\x5B\xD4\x06\xAC\x51\xE0\x55\xE7\xF3\xDF\xCD\x94\x79\xEA\xFB\xE8\xBD\xE1\x61\xDD\x1B\xC7\x74\xD4\x97\xC0\x31\xE8\x28\xC7\xFD\xB1\x86\xEA\x9D\xE0\xB5\xE8\xD9\xCF\x7C\xDD\x3F\xC7\xDC\xCF\x82\xDF\xF5\x95\x6A\xD3\xD6\x86\xBE\xD2\x90\xEA\x38\xEA\x42\x75\x3A\xE0\x86\xD8\x69\xEA\x0A\xEA\xB6\xCB\x17\xCD\xD8\xDF\x26\xD9\x78\xEA\x6A\xEA\xFB\xE7\xD1\xD4\xEC\xDF\x19\xA2\x6B\xE0\x1A\xDB\x23\xD0\x13\xEA\x30\xD8\x94\xB2\x6A\xEA\x3D\x9D\x9C\xE8\x66\x0B\x30\xDB\x4D\xE2\xCE\xD1\xD8\xDD\xDA\xE0\xE9\xC7\x3D\xD0\x26\xAC\x0A\x5F\x9C\xEA\xBC\xE1\x92\xEA\x44\xD7\x6C\xCD\xD0\xE8\xA3\xE8\x6F\xCD\x26\xAC\x82\xC4\xC0\xEA\xD0\xE1\x9B\xE8\xAE\xCA\x97\xAA\x7E\xDB\x34\xE2\x82\xD9\x0D\xDE\xBB\xEA\x6D\xC9\x72\xD0\x81\xC4\x29\x5D\xCA\xEA\xE5\xE1\xB5\xE0\x21\xDE\xE4\xE8\x23\xDE\x3A\xD0\xE7\xE8\xDB\xE0\x27\xDE\xD2\xB1\xD8\xEA\xFF\xE1\x39\xE0\x3B\xDE\x20\x8F\xE3\xEA\x9A\xDE\x13\xC4\x0D\xE9\xFC\xCA\xE4\x84\x93\x62\xE8\xEA\x42\xE8\x60\xDE\x17\xE1\x9E\xD7\xEF\xEA\x95\xDF\x95\xE1\xA0\xB1\x75\xDE\xCF\xE7\x19\x3E\x6A\xEA\x40\xE1\x4D\xDC\xA7\xEA\xA2\xEA\xC7\xAB\xD1\xDB\x27\xCE\x58\xE1\x31\xE5\x01\x01\xF4\xEA\x9A\xE8\x7C\xE9\x69\xE9\x62\xC2\x63\xE3\xFA\xEA\xFF\xEA\x02\xE8\x42\xAF\x22\xDC\xF3\xEA\xB3\xEA\xFA\xDB\x01\xEB\x76\x84\x92\xE9\xE2\xEA\x12\xEB\xC4\xDE\xAB\xE1\xA5\xC2\x40\xD3\x0C\xEB\x0B\xE9\x5C\xD4\x88\xE6\xB4\xE9\x73\xE5\x89\x41\x18\xEB\x89\xBE\xFC\xCD\xC8\xB1\xA1\xCE\x58\x9A\x1B\x5F\x06\xEB\xB4\xE8\x5D\xAC\xAB\xD1\x64\xDF\xEA\xE1\xAE\xD1\x32\xDF\x25\xDE\x34\xDF\x03\x64\x3F\x0A\x2B\xEB\x7B\xE9\xDB\xE9\x55\xE5\x57\xA5\xE9\xE1\x28\x85\x04\xE2\xC8\xD1\x06\xE2\xFB\xC3\xD7\xEA\x24\xEB\xF6\xB9\xE0\xD1\xB9\xE0\x65\xDF\x1C\xCC\x4D\xC9\x11\xEA\xC6\xDC\xD6\xEA\xA7\x5B\x37\xEB\xDA\xE9\x2D\xEB\x1A\xE2\x2F\xEB\xDD\xC5\x81\xDF\xB8\xE8\x98\xCA\x02\xD2\xC8\xEA\x42\xEB\x0D\xEB\x1B\xCF\x4C\xE2\x46\xEB\x5A\xEA\x3E\xEA\x24\xC3\x40\xEA\x9D\xC4\x63\x85\x9F\xC4\x05\xEB\x43\xEB\x72\xC3\x55\xEA\x08\x7D\x37\xCF\x5E\xEA\x50\xA9\xA9\xD2\x2B\xC0\xAB\xC4\xF0\xD6\x7E\x85\x59\xD3\x27\x01\x0A\xB3\x15\xC4\xE1\xB2\x03\xB3\x95\x87\x05\xB3\xF8\x5B\x81\x36\x2B\x36\xBE\x5E\x8C\x08\x74\xEB\xA0\x72\x76\xEB\x6E\xEA\x58\x8E\x79\xEB\x24\x5F\xA0\x41\x7C\xEB\xD7\x5A\x4C\x06\x7F\xEB\xED\xEA\xDF\xB5\x02\xB3\x82\xEB\x00\x90\x84\xEB\xC3\x68\x8A\x03\x2B\x36\x5B\xE3\x90\x61\x74\xD2\x21\x00\x80\xE2\xDE\xD3\x03\x01\x22\x00\xFF\xD8\x4E\x7A\x23\x83\xA0\xC1\x33\x00\xE5\xD3\x80\x44\x37\x68\x9C\xEB\xD9\x78\xAD\xE2\x90\x01\x24\x6B\xEE\xD3\x57\x09\xF0\xD3\x92\x80\xF2\xD3\x03\x01\x20\x00\x96\xE6\xD5\x61\x1F\xCB\xD7\xD3\xE6\xD9\x7B\x88\xE2\xE2\xA9\x7A\x97\xEB\xDD\xD3\x30\xE3\x00\x00\x9B\xEB\x0F\x86\xD5\x6E\x9E\xEB\x24\x6B\xA1\xEB\xA0\x88\xA3\xEB\x0F\x86\x35\x0E\x72\xD9\xC5\xEB\x43\x6C\xA9\xEB\x0E\xB3\x2E\x81\xAD\xEB\x02\x01\xAF\xEB\xF5\xD3\x4B\xA4\xB3\xEB\xC0\x80\x51\xCF\xFB\xD6\x8F\x95\xD2\xB1\x2E\x68\xF6\xDF\x3A\xD3\x10\xD4\x36\xE5\xA9\xC3\x5E\xE7\xA9\xE6\x95\xDD\x45\x67\xF9\xEA\x38\x59\xB5\xD1\xCB\x64\x90\xB6\xB3\xE6\x92\xE7\xE2\xEB\xD7\xE1\x3F\x24\xB9\xE6\x78\xE7\x8E\xE7\x1B\xE7\x71\xE7\xC9\xE6\x0D\x61\xD7\xEB\x43\xEA\x84\xCF\xEA\xEB\xAC\xE7\xD7\x03\xF3\xE5\xAF\xE7\x41\xE6\x91\xE5\xA9\xB6\xDA\xB6\xF2\xEB\x29\xE0\xF4\xEB\x6F\x28\xD0\xE6\xEF\x50\xD2\xE6\xA6\xE7\xEA\xE4\x8D\xE7\x42\xE6\x05\xB2\xF0\xEB\x93\x62\xFE\xEB\x3E\xE0\x00\xEC\x0A\x3C\x88\xE7\xF0\x66\x99\xE7\x8A\xA0\xDD\xE6\xA8\xE7\xDF\xE6\x8C\x99\x0C\xEC\x26\xEA\x8B\xD7\xB2\x64\x14\xE6\xDB\xE6\x13\xEC\xA7\xE7\xF5\xD7\xED\xE5\x9E\xE7\x40\xE7\x5B\x0E\xE3\xEB\x01\xEC\xF2\xE6\x4A\x48\xF4\xE6\xBA\xE6\x99\xB0\x88\xE5\x22\xEB\xD1\x5B\x25\xEC\x0F\xEC\xF6\xEB\x1C\x08\xAE\xE7\x05\xEC\x0F\xE5\x15\xEC\xF6\xE6\xB2\xE7\xC5\xE7\x2E\xEC\xE9\xEB\x26\xEC\x33\xE6\x19\x06\x48\xD8\x6E\xE7\x66\xE5\x9D\xB6\xBB\xE7\x9E\xD7\x18\xEC\x0F\xE3\x64\xD7\x35\x68\xA5\x07\x57\xD8\x3F\xE6\xF9\xEB\xC6\xE6\x04\xB2\xD1\x5B\xC4\xE7\xE7\xEB\x3A\xEC\xDC\xDF\x1A\xEC\xF1\xC4\xA2\xE5\xC8\xE7\x04\xB7\xCA\xE7\x40\xEC\x23\xE6\xCD\xE7\xB7\xE5\xE6\x82\x30\x68\x53\xEC\x47\xEC\x43\xB3\x30\xE7\x58\xE6\x99\xB1\x5F\xEC\xD8\xEB\xE4\xC4\x3B\xD3\xC3\xE5\xD4\xC4\x52\xEC\x67\xEC\x54\xEC\xCB\xC4\xC7", -"\xE5\x3E\xCF\x3E\xE7\xE6\xEB\xD9\xE4\x66\xEC\xF3\xEB\xEC\xD0\x3F\x24\xE4\xE7\x05\xD8\xE4\xAC\x4A\xE7\xF8\x82\x71\xE6\x3C\x0E\x48\xCF\x13\xE5\x61\x5F\x6E\x63\xF6\xD6\x94\xEB\xEE\xE2\x11\x0F\x92\x33\x7E\xD9\x8C\x7A\xD0\x5A\xBF\xD8\x9B\x37\xC7\x0A\x60\xDC\xB7\x70\x73\xE6\x1C\xEB\xA0\x0E\x6E\x63\xCD\x5A\x5D\xE4\xC8\xD8\x6E\xE4\x7B\x5A\x24\x9A\x09\x01\xF2\xE3\x52\x70\x93\xEC\xE2\x5A\x95\xEC\x12\xE4\x97\xEC\x7D\xE4\x3F\xE4\x70\xE4\x41\xE4\xAA\xE3\x81\xE4\xE9\x71\x61\x9B\x64\x00\x38\x9A\x04\xE4\x8E\xDA\x06\xE4\x87\xE3\xAB\x3C\x89\xE3\x0B\xE4\x6E\x05\x43\x9A\xCD\x94\x9C\x4D\xE0\x5A\xA0\xEC\xD9\xE3\xA2\xEC\x5F\xE4\x7E\xE4\x16\xE4\x71\xE4\xA4\xE2\x82\xE4\xFE\xE3\x9C\xE3\x15\x0E\x8A\x7F\x40\xA5\xD3\x63\xB6\xD8\x9F\xEC\xB2\xD8\x5F\x03\x96\xEC\x16\xDA\x3E\xE4\xF9\xE3\x40\xE4\xFB\xE3\x42\xE4\x27\xE4\xAD\xE3\xAF\xEC\x76\x71\xE0\x70\xD9\x3B\xB3\xE3\x8A\x7F\xB6\xE3\x39\xEC\x2C\x0E\x94\xEC\xCA\xEC\x6A\xD6\x6C\xE4\x2F\xE4\x02\x9B\x31\xE4\x7E\x9B\x7B\xE3\x64\xE4\xC2\xEC\x82\x9A\xC4\xE3\xB6\xEC\xDE\xEC\x94\x54\xC7\x0A\xCC\xEC\x6B\xE3\x98\xEC\xCF\xEC\x93\xD3\x80\xE4\x33\x71\x8F\xE4\xD3\xE3\xB5\xA0\xB7\xEC\x21\xE3\xDF\xEC\x4C\xE4\x7C\xE4\xBC\xEC\xA4\xEC\x7F\xE4\xBF\xEC\xDF\xE3\x42\x72\xF3\x76\xE2\xE3\xF8\xEC\xEC\xEC\x4D\x48\x0F\x3F\xEF\xEC\x4E\xE4\x22\xE4\xFF\xEC\xBE\xEC\xA6\xEC\x72\xE4\xA8\xEC\x03\xED\xEF\xE3\xB3\x9A\x25\x9A\x64\xEB\xBA\x5B\x07\xED\xE3\x61\x17\x59\x8B\x03\x0A\xED\xFB\xD7\x4F\xE4\x0D\xED\x61\xE4\xE5\xEC\x33\xE4\xE7\xEC\x44\xE4\xAA\xEC\x02\xE4\x1D\x01\xAD\xEC\xD1\xD0\x5E\xD3\xB0\xEC\xBB\x50\xCF\x9A\xF0\x03\xD1\x9A\x11\x0E\x0E\xE4\xEB\xEC\xC9\xEC\xED\xEC\x1B\xED\xA1\xEC\xCD\xEC\xF1\xEC\x30\xE4\xD0\xEC\x25\xE4\x63\xE4\x08\xE3\xFE\xE3\x1A\xE4\x09\x01\x1C\xE4\x06\xED\x33\xED\x08\xED\xEE\xEC\x36\xED\xF0\xEC\xA3\xEC\xF2\xEC\x00\xED\x0F\xED\xC0\xEC\x54\xE4\x0D\x0E\x2A\xE4\x32\xED\xE1\x5A\xB9\xEC\xF7\xE3\x5E\xE4\xAC\xD5\x60\xE4\xEB\xE3\x27\xE4\x3F\x63\x38\xE4\x50\xED\xB8\xEC\xFB\xEC\x1C\xED\xD8\xD9\x48\xED\x39\xED\xA5\xEC\xD1\xEC\xA7\xEC\x43\xE4\xE9\x0C\x1B\x9B\x27\x01\xB4\xEB\x5E\xE5\xF9\xEC\xDE\x5A\x52\xED\x2E\xE4\x54\xED\x07\x3F\xBD\xEC\x34\xE3\x63\xED\x10\xED\x62\x53\xBE\x5E\x2E\x9B\x5B\xED\xFA\xEC\x34\xED\xCB\xEC\x46\xED\x0B\xED\xCE\xEC\x61\xED\x4A\xED\x73\xED\x4C\xED\x03\xED\x21\x72\x27\x01\x7B\xD6\x94\xE5\xC8\xEC\x51\xED\x5D\xED\x7C\xED\x1D\xED\x0C\xED\x49\xED\x0E\xED\x81\xED\x02\xED\x74\xE4\xF3\x76\x76\xE4\x78\xED\x6C\xED\x8A\xED\xBA\xEC\x37\xED\x60\xED\xE3\xEC\x3A\xED\x62\xE4\xD2\xEC\x34\xE4\xE9\x0C\x85\xEC\xD4\xD9\x70\xD2\x75\xC5\xFD\xD2\x62\xDE\x85\xE3\x80\xD9\x25\xD9\x37\x8F\x70\xEC\xFD\x82\xD7\x5A\xD9\x86\x26\x00\x39\xDA\x61\x0A\x74\xD9\x10\xE0\x4D\x4F\xBE\x5E\x52\x64\xEB\x2C\x60\xE3\x77\x61\x3E\x90\x09\xDA\xFA\x7C\x1B\x5F\x5B\xD9\xC3\xDA\xF9\x87\x4C\x61\xBE\x5E\xC8\x8E\xF1\x8E\xBE\xED\xDD\xDA\x3D\xD9\xA1\xED\xC8\xED\xC9\xED\xCA\xED\x8F\xE4\xA4\x06\x27\x00\xB8\xED\x4C\xE7\xC3\xA1\xF0\xE2\x53\xE6\x5F\x0F\x79\xE6\x33\xDD\xAB\xED\xCB\xED\xD8\xED\x56\xCF\x7F\xA5\xB7\x47\x49\xCF\x0B\x9A\x78\x31\x84\x61\x3F\x63\x61\xB0\x01\x01\x29\x00\x39\xDA\xFF\xD3\xBB\x50\x41\x4D\xA1\x0B\x03\x58\x6C\x00\xAA\xED\x98\x01\xE2\xED\x00\x00\x2A\x00\xCF\xED\xCA\xED\x27\x8F\x90\xD0\x59\xCF\x18\xA4\x35\x8F\xF1\xE1\x82\x40\xD9\xED\xB8\xD3\x5D\xE3\x27\x01\x72\xD2\x26\xD3\x77\xD3\x06\x01\x6A\xD2\x3D\xE7\x71\xD2\xFA\xED\x05\xEE\x64\xE6\xAF\xCC\xA0\xE6\xD5\xE5\x06\x01\x2A\xE3\x0B\x85\xD2\xD2\x5C\xE7\xD9\xB1\x04\xD7\x89\xB6\x55\x83\x20\xE5\xFB\x62\xC5\xD2\x62\x5A\xE5\xE5\xDA\xB6\x0C\xEE\xF6\xAC\x86\x29\xEB\xEB\xCB\xE7\x4E\xE6\x08\xEC\xEF\xEB\x1D\xE7\xA6\xEA\x04\x64\x1A\xEE\xAA\x9B\x2B\x33\x76\xE7\xA5\xB6\xEC\xEB\x20\xEE\x5D\x0F\x5D\xE5\xDC\xEC\xB4\x3F\x16\xEE\x21\x58\x02\xEC\xC6\x01\x04\xEC\xE5\xE7\x1F\xEC\x4E\xE5\xF6\xE6\x68\xE5\x9E\xD7\x25\xEE\x33\xAD\x1C\xEE\x35\xD7\xC5\xE4\x15\xE6\x0A\xE6\x44\xD7\x9C\xE7\x71\xE5\x8C\x99\x3B\xEE\xDD\x9B\x3D\xEE\x57\xEC\x0D\xA0\x40\xEE\xE9\xE6\x42\xEE\x36\xEC\xED\xE4\x22\xEC\xFD\xEA\x24\xEE\x30\xEE\xA4\x9B\xDD\xE4\xF1\x94\x1D\xA0\x2A\xEC\x9D\xB6\x2C\xEC\x5E\xE5\x46\xEE\xEE\xA5\x48\xEE\x66\xD7\xCC\xB0\x33\xEC\x35\xEE\x06\xEC\x43\xEE\x04\xE5\xD1\x5B\x38\xEC\x51\xEC\xD5\x3C\x53\xEE\x1C\x58\x4B\x03\x08\xE7\xC8\x83\x58\xEE\xF8", -"\xE4\x43\xEC\xE0\xE7\xC5\x3B\x6A\xEE\x74\x00\xC1\x0C\x49\xEE\x3E\xA0\x4B\xEC\x34\xEC\xB3\xE5\x1F\xEE\xFB\xEB\x1C\xE7\x3F\xE7\x51\xEE\xAE\x62\x74\xEE\x76\xEE\x6B\xE7\x4A\xE6\xB1\xE5\x7A\xEE\x22\xE6\xCC\xE7\x9D\xB6\xCE\xE7\xAC\xE6\x52\xEE\x99\x70\x0E\xEE\xD3\xE7\x64\xEC\x14\xEE\x23\x68\x8E\xEE\x17\xEE\x37\xE7\x96\xD7\xB8\xE5\x02\x5C\x94\xEE\x9A\x9B\x3D\xE7\xDF\xE7\x2D\xEC\x69\xEE\x9A\xEE\xA4\x9B\x79\xEC\x16\xE6\x0C\xA5\x7C\xEC\x9D\xD8\xF3\xC4\x13\xDA\x2E\x0E\xFA\xD9\x43\xE7\x91\x55\x2F\x41\x0E\xD3\x5B\xC6\x95\x4F\xAF\x27\x16\xE3\xFD\xE2\x18\xE3\x45\xDA\xAB\xEE\x4E\x68\xAD\xEE\x1C\xE3\xAF\xEE\x5B\xE4\xB8\x27\x20\xE3\x72\xE3\xD7\xE3\xED\x3C\x3A\xE3\x64\xED\x27\xE4\xFA\xD6\x50\xB3\x09\x01\x2C\x00\xF1\xED\xB8\xA5\x13\xDA\x2E\x00\x0E\xE3\xB2\xE4\xFB\x56\x53\xE7\xCE\xD8\xC7\x99\x86\x35\xFF\x00\xDF\x0E\x3B\x0E\xA2\xE2\x85\xE2\x60\xDA\x5B\xE6\xBB\x50\xCF\xEE\xCB\xD9\xD1\xEE\x2D\x08\x88\xE2\xEF\x66\x73\x56\x4A\x05\x28\xDA\xFD\x0A\x25\x58\x0F\xDA\x7C\xC4\x13\x9B\x9C\x53\x66\x5C\x1A\xC5\x59\xB2\x89\xE2\x30\xC5\xE4\x59\x2D\x08\x87\xDF\x95\x4F\x86\x35\xDF\xEE\x04\xC9\x86\x35\xE3\xEE\x5C\x0C\xE5\xEE\x1C\xE2\xE8\xEE\x05\xC5\x3B\x0E\xAC\xE2\x0F\x86\x4D\xE4\xEE\xEE\x30\xB3\xF0\xEE\xAD\xD2\x33\x33\xDE\xEE\x8B\xED\xE0\xDD\xF6\xEE\x58\xCD\xF9\xEE\x6B\x9B\x55\xED\xA6\xA5\x3B\x0E\x2B\xC5\x93\xE2\xD8\xEE\x30\xE6\xAC\x56\xDB\xEE\xEB\xD9\xDD\xEE\xFF\x0A\xB8\x0A\xE0\xEE\x92\xA5\x98\x0C\xF7\xEE\x9E\x10\x0B\xEF\x21\xDA\xFE\xEC\xD0\x0B\x66\x5C\x32\x00\xA4\xEB\xEB\xE8\x4E\xD9\xCD\xEE\xEF\x50\x15\xEF\x1A\xDA\x17\xEF\x98\x0C\xB3\x08\xC4\xD2\xF5\xEE\x2D\x08\x1D\xEF\xB4\x31\x1F\xEF\x86\x72\x9C\x9B\x3B\x0E\xD9\xB2\x0F\x86\xF7\x46\x60\xD9\x11\xE6\xDA\xEE\x03\xEF\xD0\xEE\x9A\x3D\x06\xEF\x8C\xE6\xD5\xED\x05\xEF\xFF\x0A\x32\xEF\xDF\x48\x34\xEF\x16\xEF\x12\x3D\xC0\x45\x66\x5C\x88\xDC\x95\x64\xF2\x00\x27\xEF\xC1\xE4\xAB\x3C\x2A\xEF\xBA\xEE\x2C\xEF\x76\x09\xB3\x08\x4F\xEF\x30\xEF\x45\xEF\x0A\xEF\x93\x08\xF1\xEE\xF9\x58\x14\x35\x66\x5C\x2F\x00\x25\xEF\xDE\xDD\x50\xEF\xD0\xE4\xB1\x30\x53\xEF\x51\xE7\x55\x35\xF3\xEE\x45\x23\x43\xEF\xAC\x3C\x31\xEF\x5B\xEF\xD5\x1C\x5A\xD1\x3F\x24\xEA\xEE\x62\xEF\x00\x00\xEB\xEE\x1E\xE7\xFA\xE5\x3D\xEF\x93\xA5\x04\xEF\x6D\xEF\x18\xEF\x27\x01\x76\xEF\x90\xE3\x40\xEF\x5A\xEF\xC7\xE3\x97\x0C\xCB\x0B\xFA\xEE\x7C\xA3\x96\x37\x66\x5C\xD6\xEE\x56\x83\x8A\xEF\x3B\xEF\x6A\xE6\x67\xEF\xE1\xEE\x30\x01\xB3\x08\x8C\xEF\xBE\xEE\x81\xEF\x1C\xEF\x6F\xEF\xC2\x0D\x86\xEF\x26\x83\x88\xEF\x0F\xEF\x74\xEF\x10\xEF\xC5\xE2\x8E\xEF\x3E\xEF\xDC\xEE\x95\xEF\x56\xEF\xB4\x57\x6C\xEF\x96\x4F\x65\x00\x46\xEF\x1C\x49\x48\xEF\x34\xC6\x7E\xED\x90\xE2\x27\x01\xFE\xEE\x16\x86\xB0\xEF\x9F\xEF\x28\xEF\x47\x05\x7A\xEF\x3F\xEF\x44\xEF\x2D\xEF\xAF\xEF\xA6\xEF\x09\xEF\x83\xEF\xFE\x0A\x98\xEF\x0C\xEF\x70\xED\x23\x07\x23\xEF\x74\xEF\x24\xEF\x91\xEE\x09\xE5\x66\xEF\xA1\xEF\x49\xEF\xB8\xEF\xA4\xEF\x8C\x15\xBB\xEF\x6E\xEF\xBD\xEF\xAB\xEF\x79\x91\x36\xEF\x3D\xC0\x74\xEF\x38\xEF\xB5\xEE\x65\xEF\x52\xEF\xC9\xEF\x2B\xEF\xA3\xEF\x55\x05\xB3\x08\xD6\xEF\x53\xDF\xBC\xEF\xD6\xE3\x90\x0D\x6C\x06\x5D\xEF\x7A\xE6\x4B\xEF\xE5\xD8\x74\xEF\x65\xC9\x01\xEF\xC8\xEF\xB6\xEF\xA2\xEF\xCB\xEF\xDD\xEF\xBB\x70\xCE\xEF\x82\xEF\xE2\xEF\x84\xEF\x0C\x08\xE5\xEF\x4A\xEF\x72\x3D\x60\xEF\x74\xEF\x61\xEF\xC6\xEF\x16\xE5\xEC\xEF\x98\x0C\xF7\xEF\xEF\xEF\x4A\x05\xB3\x08\xFC\xEF\x95\xCC\xE1\xEF\x49\xE4\xC1\x0D\x85\xEF\x9C\xD1\x48\xD3\x2E\xE5\x3B\xA5\xA1\x15\xC8\xEE\xF3\xD8\x89\xB6\x37\x00\x10\xF0\x27\x65\x15\xDD\xE9\xD7\x29\x5D\x8A\xEB\xAF\xE9\xCF\xDF\x7B\xEA\xA8\xCC\xAB\xEA\x7C\xA9\x7B\xCF\xB6\xC0\xD8\x9B\x04\xE8\x92\xC4\x03\x01\x19\xF0\xB3\xE0\x1B\xF0\x7F\xE8\xF1\xBD\x6F\xEA\xD2\xDF\x7E\xEA\x99\xCF\x80\xEA\x6F\xC7\x13\xED\xD6\xC0\x84\xEA\x58\x9B\x1B\x5F\x26\xF0\xF9\xE7\x87\xEA\xC2\xEA\xB2\xCF\x8A\xEA\xBD\xDA\x8C\xEA\xBF\xDA\x2A\xA6\x08\x72\x18\xF0\x1B\xE9\xDE\xC7\x2C\xE8\x15\x83\xEC\x03\x7D\xDD\xE8\xB3\x48\xE8\x87\xED\x09\x01\x36\xF0\x1E\xDC\xB0\xE9\xA2\xD0\xEF\xDA\x9E\xD7\x4C\xF0\x13\xDF\x4E\xF0\x19\xC7\xA4\xEA\x76\xEA\xC2\xB1\x3F\x0A\x52\xF0\xA8\xE1\x7A\xEA\x29\xF0\xB0\xC0\xAA\xEA\x28\xDD\xAC\xEA\xD4\xD4\xD6\xDF\x35\xAA\xEE\x89\xF1\x0A\x25\xF0\x42\xF0\x2E\xD6\x5F\xF0\xD9\xDC\x13\x9D\x3D\xA2\x16\xBE\x88\xCD\x1D", -"\xD5\x8C\xD0\x8A\xE0\x29\xEB\x0D\x61\x5A\xF0\x2C\xE9\x54\xF0\xC0\xC7\x0B\xC6\xC4\xEA\xD4\xD6\xB9\xE8\xC7\xEA\x68\xC4\x66\xF0\x41\x5C\x68\xF0\xB4\xEA\xCD\xEA\x91\xB4\xDD\xEA\x68\xDB\xED\xE1\x2F\xB8\x26\xAC\x7F\xF0\x01\x01\x75\xF0\x54\xE9\x77\xF0\x09\xBB\xDB\xEA\x6F\xBE\xCC\xCA\x17\xD2\x03\xC8\x23\xE0\xB4\xCA\x26\xDE\xCD\xC1\x51\xF0\x81\xF0\x4D\xD5\x1B\xC8\x8C\xBE\xFD\xB1\x8C\xF0\xC2\xE9\x8E\xF0\xB9\x84\x03\xE1\x2E\xEE\x9F\xF0\x30\xDC\xC3\xE9\x44\xC8\xF2\xEA\x3F\xD8\xA7\x5B\xA5\xF0\xFD\xDE\xA7\xF0\xBC\xD5\x16\xDF\x47\xE9\x0D\x85\xD4\xDB\x7A\xD8\x02\x63\xAC\xF0\x7A\xDF\x8F\xB2\x43\xE9\xCF\xB8\xE3\x66\x59\xF0\x9A\xF0\x72\xDE\x14\xEB\xBC\xEA\x9F\xDE\xA4\xF0\xBD\xF0\x3C\xC4\xB1\xDE\x8A\x83\xB6\xF0\x64\xE2\xAE\xF0\x60\xC2\x0F\xEB\xED\xD5\x34\xF0\x74\xF0\xC3\xF0\x1F\xC4\x68\xEB\x70\xC1\x16\xEB\xC2\xF0\xC8\xE8\x9B\xB8\x80\xE1\x53\xBC\x77\xCE\x9E\xF0\xCF\xF0\xE4\xC3\x20\xEB\x6D\xBF\x17\xF0\xAB\xF0\xDB\xF0\xFB\xCD\xD1\xF0\xD9\xC3\x28\xEB\xF3\xE3\x80\xF0\xD5\xF0\x4C\xDE\x39\xEA\xDC\xE9\x8A\xDC\x3C\xEA\x78\xD2\xEB\xE1\x32\xEB\x87\xF0\xB1\xD1\x65\xF0\x41\xF0\xE8\xF0\x1C\xE9\x87\xDC\x2E\xDF\x5D\xEB\x3D\xEB\xFB\xB5\xCE\xCE\xF1\xF0\x3C\x0E\x07\xE2\x88\x70\x67\xF0\xF5\xF0\x43\xF0\x96\xDF\x51\xEB\x3C\xEB\xEB\xD8\x1D\xCC\xFD\xF0\xFF\x00\x69\xDF\x00\xF1\xE7\xF0\x17\xE2\x1F\xDE\x04\xF1\x3A\xEA\x67\xC9\xD7\xE0\xD1\xEA\xFE\xD1\x28\xEA\x73\xC1\x2A\xEA\x0C\xF1\x8B\xF0\xE1\xF0\xF7\xF0\x45\xEB\xCD\xE8\x3D\xEA\x77\x0C\x9B\xDF\x88\xE0\x9D\xDF\x10\xC0\xE1\x6F\xBC\xF0\x02\xF1\x69\xF0\x9A\x80\xE3\xF0\xD6\x78\x57\xEA\x0D\xDD\xAA\x83\x78\xC3\xAA\xC9\x7A\xC3\x70\xEB\xE7\x74\x37\xBD\xEC\xD3\x75\xEB\x39\xCF\x15\xB3\xEC\x81\x90\xEB\x41\x88\xAE\x3E\x9B\x3E\x22\xF0\x7E\xC0\xB0\xEB\x89\xD9\x15\x06\xD0\xD4\xCF\x8B\x3A\xF1\xF0\x66\xCE\x41\x9B\x3E\x0D\x85\x40\x06\x35\xF1\x80\xEB\x37\xF1\x77\xEB\x73\x86\xE5\xB2\x5D\x0E\xDB\x41\x3D\xF1\xD7\x5A\x8D\x06\x4B\xF1\x8B\xEB\x0D\xC3\x8D\xEB\x43\xF1\xF7\x8B\xE5\xB2\x1A\x6A\xBE\x08\x48\xF1\x06\xEE\xF8\xE2\x13\xDA\x3A\x00\x98\xEB\xBA\xEB\x3B\x00\x74\xEF\x57\x70\x23\x83\x1F\xC0\x34\x00\xC1\xEB\xFD\x44\x66\x5C\x3C\x00\x74\xEF\x4A\x00\xA6\xEB\x89\x63\x62\x6B\xC9\xEB\xAB\xEB\xBC\x80\xCC\xEB\x01\x01\x39\x00\x40\xF1\xE0\xEB\x67\xBE\x9E\xEF\xE7\x73\xF9\xD3\xE0\x80\xB6\xEB\x9A\x85\x63\xF1\xB9\xEB\xD5\xD8\x09\x01\x66\xF1\x0F\x86\x68\xF1\x6D\x68\x6A\xF1\x6C\xF1\x82\x8A\x6E\xF1\x70\xF1\x72\xF1\x26\xBF\x74\xF1\x97\xB2\x76\xF1\xE8\x81\x78\xF1\x00\x00\x7A\xF1\xCF\xEB\x4A\xCB\xD1\xEB\x4A\x80\x60\xF1\x15\xF0\x28\xE3\xAB\x62\x14\xF0\xDA\xED\x0D\x0E\x67\xEA\xBD\xDF\x02\x63\xAF\xED\xF8\xA6\xB1\x4C\x12\xE9\x8B\xE1\x14\xE9\xC2\xE8\x43\xE2\x17\xE9\x1E\xBF\x19\xE9\x4A\xDE\x27\xF1\xA9\xEA\x2B\xF0\x1E\xF0\x8C\xCC\x4D\xBD\x1A\xE8\x8D\xC7\x7E\xCF\x57\xF0\xBE\xDB\x27\x01\xA8\xF1\x0A\xD9\x65\x38\xAB\xF1\x0F\xE2\xAD\xF1\x11\xE2\x8E\xE1\x4C\xE1\x18\xE9\x15\xE2\x1D\xDE\x0E\xF1\x77\xA9\x1C\xF0\x16\xDB\x8E\xC3\x9C\xB3\x7F\xEA\x49\xDD\xA6\x71\xD4\xEB\x05\xC7\xAA\xDD\xB8\x5D\xB0\xA6\xAA\xF1\x17\xEA\xE7\xDC\xE9\xE9\xF2\xE7\x2F\xD4\xBD\xE9\xE5\xD5\x4F\xEA\xB8\xDB\x51\xEA\xF0\xDC\x53\xEA\x6A\xBF\x46\xDA\x2E\xE8\x7B\xB7\xBE\xDA\x65\xDD\x8E\xEA\x92\xCC\xC0\xF1\xA9\xBA\xDA\xF1\xF6\xE0\x0A\xE8\x39\xE9\xFF\xDD\x3B\xE9\x01\xDE\x8A\xE9\xD2\xDE\x8C\xE9\x4D\xE0\x8E\xE9\xD2\xE0\x88\xEA\xF5\x76\x46\xF0\x95\xEA\x8D\xD4\xC5\xEA\xE7\x90\x99\xEA\xED\x7D\x36\x89\xEF\xF1\x93\xBB\xF1\xF1\x1C\xE1\x4C\xE8\x1E\xE1\x03\xE9\x23\xE8\xDB\xE8\x05\xEA\xE1\xDB\x47\xE2\x09\xE9\x49\xE2\xE1\xE8\x25\xC1\x50\xF0\x99\xE1\x08\xF2\xE2\xBD\x0A\xF2\x5E\xE1\x20\xDF\x3F\xE2\xC0\xE8\x63\xE8\x15\xE9\x34\xC7\xC4\xE8\x1B\xDE\xCA\xF1\x44\xDF\xCC\xF1\x05\xE0\x87\xDC\x8D\xD7\x6E\xE8\x84\xE3\x3F\x0A\x1A\xF2\x44\xBF\x1C\xF2\xF3\xE1\x97\xDC\x56\xD5\x13\xE9\x11\xCF\xAE\xF1\x16\xE9\xC8\xF1\xB1\xF1\x26\xF2\x03\xE0\x28\xF2\xEF\x6A\xCE\xF1\xE2\xE8\x60\xF0\x33\xCD\x62\xF0\x74\xEA\x64\xF0\xBA\xCE\x2F\xF2\x4A\xAB\x31\xF2\x0C\xE2\x70\xE9\x90\xE8\xF4\xF1\x59\xDF\x74\xE9\xC9\xDF\x76\xE9\x62\xE0\x78\xE9\x13\xE1\xD9\xE9\x15\xE1\xCC\xEA\xE9\xD4\x52\xB4\xE5\xE8\xE6\xC7\xD3\xEA\x6E\xCD\x72\xF0\xBD\xD4\xD8\xF1\xA9\xF1\xC2\xF1\xDB\xF1\x2E\xE0\xD1\xE9\xF9\xE0\x4F\xF2\xFB\xE0\x51\xF2\xFD\xE0\x53\xF2\x7D\xE1\x37\xEA\xC1\xEA\xA7\xDD\x6A", -"\xD8\xA0\xE0\x8C\xD0\xA4\xE0\x9E\xD6\x00\x00\x47\xF2\xCA\xDE\x49\xF2\x47\xEA\xD8\xCD\x4C\xF2\x72\xE9\x3A\xE9\x67\xF2\x94\xE8\x69\xF2\x11\xE1\x6B\xF2\xBA\xE1\x6D\xF2\xCB\xEA\x08\xDE\xB5\xEA\x22\x0D\x87\xCD\x01\xCF\xEC\xD4\x25\xDE\xBE\xE0\xC9\xE9\x60\xF2\xC1\xF1\x57\x45\xC3\xF1\x86\xE9\xC5\xF1\x88\xE9\x97\xE0\xD5\xE9\xCC\xE1\x82\xF2\xCE\xE1\x84\xF2\xD9\xEA\x68\xD0\x90\xF0\xB0\xB4\xD6\xE0\xD0\xEA\xC3\x91\x86\xF0\x4A\xEB\xED\x91\xE1\xEA\xEA\xE8\x01\x01\x76\xF2\xF1\xDE\x78\xF2\x89\xDF\xA5\xDF\x4B\xE9\x24\xE9\xEA\xE9\x5E\xE2\xEC\xE9\x60\xE2\x29\xE9\x78\xDF\xC1\xE9\xA6\xF0\xA1\xF0\x63\xB8\x9C\xF0\xE4\xC1\x41\xB5\xA9\xF2\x5C\xB3\xB5\x31\x62\xF2\xF2\xF1\x71\xE9\x65\xF2\xDD\xE1\xAD\xE8\xD4\xE9\x80\xF2\xB8\xE1\x99\xF2\xE3\xE1\x9B\xF2\xE4\xEA\x75\x80\xA3\xF0\xF1\xE0\x06\x01\xBD\xF2\x3B\xB6\x06\xD9\xF9\xD8\x92\xF2\x4D\xF2\xB4\xE1\xF6\xF1\x0F\xE1\xC7\xF2\x7A\xE8\xC9\xF2\x12\xE8\xCB\xF2\xE9\xEA\x02\xB5\xA9\xF0\x33\xE8\xD1\xF2\xB9\xD9\xAB\xF2\x35\xDD\xD7\xE8\x37\xDD\x02\xEA\x04\xE9\x96\xDA\x8D\xDD\x07\xE9\x67\xC1\x08\xEA\xCE\xDB\x1E\xEB\x00\xD6\xB0\xF0\x6D\xE9\xE7\xD0\x23\xC2\x2D\xE1\x94\xD5\x14\x4B\xD9\xF1\xC0\xF2\x0B\xF2\xE7\xF2\x4D\xE8\x5F\xE9\x8B\xDD\xEB\xF2\x7B\xE0\x12\xF2\x64\xE9\x14\xF2\x55\xE8\x36\xC2\x89\xDE\x3C\xCB\x5C\xB9\xE3\xF2\x0C\xB9\xBF\xF2\x91\xF2\x63\xF2\xB1\xDB\xBA\xE9\xA8\xE9\x00\xDD\xAE\xE0\xA1\xDD\xB0\xE0\x04\xDD\xAE\xE9\x27\xF0\x91\xEA\x8F\xCB\xF3\xF2\x81\xE9\x96\xF0\xC1\xF0\xCF\xF2\xF9\xF2\x61\xF2\x0E\xF3\xC1\xF2\x7B\xF2\xC3\xF2\xF3\xE8\xC5\xF2\xDF\xE1\x3D\xE8\xB0\xE8\xDC\xF2\x7C\xE8\xDE\xF2\xF0\xEA\x08\xEB\x5D\x0F\x10\xDC\xFE\xE8\x0B\xF3\xEF\xC9\xD3\xF2\x3B\x51\xD5\xF2\x7C\xF2\xF5\xF1\x7E\xF2\x3C\xE9\x97\xF2\x10\xE8\x2C\xF3\x98\xE8\x2E\xF3\xF5\xEA\x30\xF3\x3C\x0E\x7E\xE9\xB5\xE9\x34\xF3\x05\xD9\xE5\xF2\x3D\xE2\x74\xE0\xE5\xBC\x44\xE0\xDA\xC2\x46\xE0\xE3\xD6\xC7\xF1\x24\xF2\x48\xDE\xB2\xF1\x92\xE1\x3D\xF2\xC9\xE8\xD7\xDE\x2F\xE9\x8C\xE8\x35\xDC\x3B\xA8\xBC\xF2\xFA\xF2\x23\xF3\xFC\xF2\x01\xE9\xD8\xE8\xE9\xF2\x0F\xF2\x04\xEA\xAF\xCB\x06\xEA\xCC\xDB\xEF\xF2\x38\xDE\x5A\xEB\x2A\xD1\xD8\xF0\x6D\xD1\x33\xF3\x5E\xF3\xD4\xF2\x0F\xF3\xDB\xDB\xA8\xCE\xBB\xE9\xF7\xDE\xE0\xF1\xB6\xDB\xE2\xF1\xEE\xDC\xE4\xF1\xEB\xE0\xC9\xF0\xFF\xDE\xB2\xE9\x21\xEB\x09\xD0\x47\xF3\x8C\xAC\x49\xF3\x9D\xE1\x2D\xE0\x10\xF3\x2F\xEA\x3A\xE8\xD3\xE9\x29\xF3\x33\xEA\x2B\xF3\x35\xEA\x40\xE8\x41\xF3\x07\xEB\x08\xDD\x59\xF3\xD9\xDE\x25\xAC\xE4\xE9\x1A\x21\x70\xF3\x37\xF3\x72\xF3\xFD\xDC\x10\xCF\x19\xC1\x64\xE8\x84\xC2\x66\xE8\x39\xD1\xC0\xDE\x69\xE8\xE8\xDF\x77\xD6\x41\xAC\xF4\xE9\x15\xC9\x31\xDF\x88\xB9\x33\xEB\x96\xB4\x82\xF3\x89\xA9\x84\xF3\xCE\xE9\xF4\xE1\xD0\xE9\x11\xF3\x30\xEA\x13\xF3\xAA\xE9\x15\xF3\xAC\xE9\x17\xF3\x36\xEA\x1A\xF0\x1A\xF3\x02\xC3\x2E\xEB\x06\xF1\x61\xAC\x3E\xEB\xA9\xDC\x8C\xD0\xFF\xF0\x21\xCC\xBF\xF1\x98\xF3\xC4\x55\x54\x01\x38\xF3\x26\xF3\x73\xE9\x28\xF3\xF5\xE8\x2A\xF3\xF7\xE8\x3F\xF3\xB2\xE8\x90\xF3\x2C\xEB\xBD\xF3\x05\xF1\x8B\xDC\x21\xC5\x48\xEB\x10\xEA\x95\xF0\x56\xE1\x0B\xF1\xC5\xF3\x97\xF3\x22\xF3\x71\xF3\x24\xF3\x85\xE9\xD6\xF2\x0C\xE8\xD8\xF2\xB6\xE1\xDA\xF2\x96\xE8\xD1\xF3\xF9\xE8\xBB\xF3\x9D\xEA\xD8\xDC\x03\x5E\xF4\x81\x85\xF0\xF1\xBF\x16\xF1\x25\xDE\x18\xF1\xDE\xF3\xD0\xF2\xC7\xF3\x8D\x04\xCA\xF3\xB3\xF3\x89\xF3\x31\xEA\xAE\xE8\xCF\xF3\x77\xE9\x8E\xF3\x79\xE9\xD3\xF3\x38\xEB\x50\xEB\x11\xF1\x1B\xE2\x4E\xE2\x21\xF1\x0F\xDE\x0F\xC0\x9E\xC4\x39\xD3\x2E\xF2\xF8\xF3\x7E\x06\xFA\xF3\x88\xF3\xC8\xE1\xCD\xF3\x75\xE9\xFF\xF3\x52\xF2\x01\xF4\x54\xF2\x03\xF4\x4F\xEB\x15\xDF\xC5\xE9\x17\xDF\x2C\xF1\xBD\xC0\x6B\xE2\x6D\xEB\xB8\xDF\xF5\xD6\xBA\xDF\xFB\xED\x7D\xE6\x42\x7B\x63\xEA\xBE\xF3\xEE\xEF\x38\xDF\xD7\xED\x46\xCA\x31\x0B\x15\x68\x22\xB3\x16\xF0\x09\xD0\xE4\xED\x23\xE2\x72\xE0\x1D\xF2\xC6\xE0\x1F\xF2\xC8\xE0\x63\xE1\xCA\xE0\x65\xF3\xA1\xCC\xED\xF2\xA1\xC1\x05\xF3\xE0\xE8\x5B\xCA\x84\xE3\x5D\xCA\x43\xDD\x68\xE0\x97\xCF\x71\xEA\x47\xDD\x73\xEA\x8B\xDA\xD1\x5B\xE6\xC6\x5F\xF2\xE3\xED\xB2\xED\x3F\xE0\x36\xF4\x32\xF2\xB3\xDC\x34\xF2\xAC\xF1\x36\xF2\xC6\xF1\xC3\xE8\xF8\xF1\x4B\xE0\xFA\xF1\x16\xE2\xFC\xF1\x3C\xBA\x3F\xF2\xEB\xDF\x41\xF2\xB8\xF1\xAB\xCC\x2B\xDD\x4A\xDD\x31\xF0\x9F\xE6\x9E\xCF\x10\xA4\x34\xF4\x60\xEC\xC3\xE0\x52\xDD\x8E", -"\xE8\x37\xE9\x25\xF3\xFB\xF3\x13\xF4\x8A\xF3\xCE\xF3\x8C\xF3\xD0\xF3\x18\xF4\x6C\xF2\xEC\xF3\x6E\xF2\xB1\xE9\x14\x0E\xC6\xCC\x75\x8B\x3D\xF0\xEC\xF1\xD7\xCC\x33\xF4\x51\xF4\x76\xE2\x31\xE1\x6F\xF4\xEF\xE8\x87\xDD\x5D\xD0\xAF\xF2\xDE\xF1\x68\xD4\x77\xF3\x2C\xDC\xBF\xE9\x2E\xDC\xB6\xF2\xAD\xF0\xB8\xF2\x66\xBC\x93\xB7\x94\xEA\x8C\xD4\x7E\xDD\x99\x61\x80\xDD\xFE\xE8\x6C\xF4\x6D\xEC\x86\xE1\x32\xE1\xB0\xF3\x33\xF2\x50\xDC\xE4\xF3\x92\xE8\x3B\xF3\xF7\xF1\x3D\xF3\x3E\xE9\xEA\xF3\x40\xE9\x7B\xF4\x85\xF2\xE5\xEA\x58\xE8\xAE\xB7\xEA\x90\x3F\x0A\x9E\xF4\x76\xEC\x8F\xE0\x53\xF4\x4A\xF2\x89\xE1\xC2\xF2\x73\xF4\x76\xE8\xFD\xF3\xC6\xF2\x16\xF4\x6A\xF2\x79\xF4\x83\xF2\xAD\xF4\x9C\xF2\x88\xAF\x6D\xE8\xA5\xEA\xB5\x9B\xB4\xF4\xFF\xEB\x58\xE0\xB7\xF4\x79\xF2\xAD\xD4\xF3\xF1\x39\xF3\x4E\xF2\x14\xF4\x50\xF2\xBF\xF4\x81\xF2\xC1\xF4\x9A\xF2\xC3\xF4\x93\xCF\x5D\xF0\x99\xC3\x6A\xF0\x9B\xC3\xCC\xC3\x43\xF2\x4C\xF4\x5D\x0F\xD6\xD4\x8E\xF2\x50\xF4\x35\xF4\xA8\xE0\x60\xF3\x00\xEA\x62\xF3\xFF\xF2\x4F\xE8\x01\xF3\x66\xE1\x67\xF3\x36\xDE\x69\xF3\x6A\xE1\xF1\xF2\xDB\x8C\x87\xF2\x0E\x0B\x9E\xE8\xDB\x8F\x71\xE1\xD2\xEA\xDF\xEA\xBC\xEA\x5E\xF2\xD7\xF1\xE4\xF4\x6D\xF4\xD8\xE1\xB8\xF4\x09\xE8\xBA\xF4\x12\xF4\xBC\xF4\xB5\xF3\x32\xEA\xB7\xF3\x34\xEA\xB9\xF3\x8F\xF3\xD8\xF4\xDF\xF2\x39\xF0\x17\xE6\x89\xC1\xA1\xE0\x7B\xF0\x56\xEB\x73\xF2\x51\xDF\x02\x01\xC9\xF4\x0D\xEC\xCB\xF4\xE6\xF4\x37\xF4\x3E\xE2\x4C\xF3\x76\xE0\x4E\xF3\xC9\xE0\x50\xF3\x5A\xF4\xA9\xF4\x8B\xE9\xD7\xE9\x29\xE8\x55\xF2\x79\xD5\x57\xF2\x1A\xD5\xCE\xEA\x5A\xF2\xF9\xF4\x8C\xD0\x8D\xF2\xFC\xE9\x06\x01\x17\xF5\x19\xEC\xA0\xF4\x88\xF4\x49\xE9\x8A\xF4\x3A\xD6\xCB\xF3\x7D\xF2\xD2\xF4\x68\xF2\xD4\xF4\xC8\xF2\xD6\xF4\xCA\xF2\x0C\xF5\x2F\xF3\x77\xCA\xD4\xE0\xF3\xE6\xA0\xF2\xB8\xEA\x35\xE2\xCF\xE8\x12\xF5\x1C\xD2\x97\xF0\xAB\xCD\x41\xB5\x32\xF5\x46\xEC\x6E\xF4\x08\xE1\x89\xF4\x08\xDF\xCB\xD5\x74\xE8\x39\xE8\x74\xF4\xBD\xF4\x8B\xF3\x08\xF5\x8D\xF3\x0A\xF5\x02\xF4\x41\xF5\x42\xF3\xAF\xF4\xEE\xE0\x1C\xC8\x64\xCE\x4F\xF5\xC2\xE0\x00\xF5\xCD\xF4\xC0\xD6\xCF\xF4\x39\xF5\x3A\xF3\x3B\xF5\x7F\xF2\x3D\xF5\xDB\xF2\x3F\xF5\xDD\xF2\x5F\xF5\x91\xF3\xCD\xF2\xEB\xEA\x4F\xDE\x93\xE9\x31\xF5\x85\xF4\x19\xF5\xE0\xE0\xE2\xF3\x0B\xE1\x93\xF2\x58\xF4\x95\xF2\x12\xE2\x5B\xF4\x27\xE8\x25\xF5\x8D\xE9\x27\xF5\x2B\xE8\x16\xE1\xB5\xBE\xAE\xB5\x65\xF5\xF4\xE0\x58\xE2\xAC\xF2\x34\xE1\x56\xF4\xC4\xF1\x80\xF5\xE6\xF3\x0E\xE8\x23\xF5\xF9\xF1\x85\xF5\xFB\xF1\x87\xF5\x8F\xE9\xF6\xEA\xBB\xB8\xCB\x84\x32\xE9\x2A\x80\xB3\xF4\x7A\xF5\xB6\xF4\x1A\xF5\x54\xF4\x8A\xDF\x91\xF5\x7F\xF5\x9D\xF3\x22\xF2\x40\xC9\x52\xF3\x01\xE0\x3B\xF2\xC7\xE8\x56\xF3\x36\x36\xFC\xEA\x29\xED\x93\x62\x8C\xF5\x1A\xE1\x8E\xF5\xE6\xF2\x61\xF3\xE8\xF2\xEA\xF4\x03\xEA\xEC\xF4\x51\xE8\xEE\xF4\x68\xE1\xF0\xF4\xD3\xC8\x6B\xF3\x8C\x8A\x1C\xF3\xCC\xE9\x87\x83\x1F\xF3\x3B\xE0\x55\x61\xA2\xF5\x72\xE1\x87\xF4\x52\xF5\x36\xF5\x54\xF5\x51\xD6\xAA\xE8\x57\xF5\x05\xF5\x0D\xDF\x14\xF3\x0F\xDF\x16\xF3\xA3\xDD\x18\xF3\x37\xF0\xBC\xF3\xAA\xE1\x6D\xE1\x37\xC4\x4E\xF5\xCB\xF5\x12\xD9\x3C\xE2\x85\xF3\x42\xE0\x1D\xF5\x61\xE1\x1F\xF5\x3B\xF4\x21\xF5\xAF\xF1\x39\xF2\x02\xC0\x54\xF3\x6B\xC7\x27\xF1\x3E\xD1\xCB\xF0\x82\xE1\x5C\xB9\xB5\xF5\x5C\xE1\xB7\xF5\x4A\xF3\x20\xE8\x39\xF4\x22\xE8\xD7\xD1\x61\xE9\xCA\xDB\xBF\xF5\x53\xE8\x41\xF4\x66\xE9\xF2\xF4\x1D\x64\xBF\xF0\x7B\x76\xD3\xF0\x20\xF3\x16\xF5\xE1\xF5\x34\xF5\xCE\xF5\xBE\xF2\xF2\xDE\x55\xF5\xD2\xF5\x9C\xF3\xF4\xCE\xAA\xF5\x5D\xC9\xAC\xF5\x90\xE1\xEE\xF5\x2C\xC8\xF0\xF5\x19\xA8\x1A\xEB\xA3\xE9\x60\x9C\xF5\xF5\xF8\xF4\x0B\xF6\x11\xF4\x8C\xF4\x75\xF3\x2A\xE2\x27\xE9\x76\xDF\xB4\xF2\x62\xE2\x93\xF4\xB7\xF0\x95\xF4\x7E\xF3\x54\xE7\x01\xDF\x62\xDC\x6B\xF4\x0A\xF6\x51\xF5\x21\xF6\x97\xE9\xB0\xF2\x26\xE9\x8F\xF4\xF9\xDE\x91\xF4\xFB\xDE\x29\xF6\xC8\xF0\x2B\xF6\x5F\xCE\x57\xE9\x17\xDF\xC7\xE9\x5C\x98\x30\xF5\x03\x01\x1E\xF6\x85\xE1\x32\xF6\x9A\xF3\x9C\xDD\x11\xF6\xAD\xD0\x9E\xF3\xDE\xCD\x82\xDE\x62\xE9\x03\xF3\x07\xEA\x65\xE9\x09\xEA\x03\xF6\x0B\xEA\x64\xEA\x0D\xEA\x84\xD2\x9D\x0D\x49\x95\x8E\xDC\xDB\xF3\x9D\xDE\x34\xEB\xF6\xF3\x44\xF6\x31\xF6\x67\xF5\x8F\xF5\x9E\xE1\xA7\xF5\xA5\xF4\x87\xE9\x94\xF5\x89\xE9\x96\xF5\x5C\xF4\x98\xF5\x5E\xF4\x9A\xF5\xFD\xF1\x39", -"\xEB\x77\xE5\x3B\xEB\xD7\xF3\xAE\xD3\xF6\xE9\xE2\xAF\x08\xC3\x97\xEA\xA3\xBC\xC4\xF3\x99\xD1\x02\x63\x45\xF6\xF8\xED\xCC\xF4\x63\xF6\x86\xF3\x73\xF3\xCE\xCF\x23\xF6\xF3\xE7\xD6\xF5\xF5\xE7\xD8\xF5\x11\xDF\xF8\xE7\x4D\xF0\x38\xF0\x05\xF4\x6B\xF0\x3B\xEA\x65\xEA\xE8\xCE\x3A\x85\x49\xEB\x5C\xF6\x4F\xC9\x96\xB4\x7D\xF6\x57\xE2\x24\xE2\x80\xF6\xE5\xF5\x7F\xC2\x58\xD5\xE8\xF5\x4C\xF6\x5C\xD5\x4E\xF6\xFE\xF5\x50\xF6\x68\xF3\x52\xF6\xF0\xF2\x16\xF2\x9F\x98\x1D\xF1\xF7\xF4\x46\xF6\x54\xEB\x03\xF2\x56\xEB\xF5\xF3\x7B\xF6\x04\x64\x97\xF6\xB9\xEA\x62\xF6\xB8\xF5\xE8\xF4\xBA\xF5\x1A\xEA\xDE\xDB\x4D\xD4\xE8\xDA\x84\xDE\x29\xDF\x86\xDE\x2B\xDF\xA7\xF6\x4B\xE2\x24\xEA\xE7\x91\x57\xC3\x3F\xEA\xF9\xE9\x41\xEA\x9E\xDF\x0D\xF4\x27\x01\xB2\xF6\x35\xE2\xB4\xF6\xF8\xF5\x0C\xF2\x21\xE8\x0E\xF2\xFC\xF5\xBA\xF6\x83\xDE\xE8\xE0\x50\xD4\xE9\xDE\x52\xD4\xF2\xE9\x53\xD1\x73\xDE\x97\x6C\x1F\xF4\x84\xC3\xAD\xC4\x22\xF4\x30\xF1\x12\xDD\x32\xF1\x56\xA9\x3E\xD9\xD7\x5A\xB0\xC6\x60\xF6\x2C\xB3\x6A\xE6\x41\x4D\x3D\x67\xD3\x42\xEC\xED\x69\xED\x9E\xF1\xE5\xF6\x4B\xEB\xDB\x55\x29\xF4\xCE\x89\xC9\x57\x01\xF0\x4B\x48\xBE\x47\x2D\x86\xC7\xF4\x23\x6A\xF2\xEF\x98\x0C\x33\xF6\xDD\xF1\x84\xF6\xDF\xF1\x86\xF6\x50\xE9\x88\xF6\xF7\xE7\xDA\xF5\x8B\xF6\xFD\x78\xB5\xF1\x78\xCF\x1E\xD0\x20\xF0\xE5\xC6\xFB\xF6\xDF\x69\xFD\xF6\x76\x09\xFF\xF6\x4A\xEA\xE4\xE0\x4C\xEA\xB2\xF2\x1D\xEA\x79\xF3\x2E\xE2\x7B\xF3\x30\xE2\xF9\xC6\xDA\xF4\xFB\xC6\xDC\xF4\x7D\xEA\x7A\xCF\xD2\xC0\x66\xF4\xD4\xF1\x72\xBD\xD6\xF1\x6F\xE8\x0F\xF0\x59\xEF\xFE\xF6\x48\xF6\x68\xDE\x27\xD2\x6A\xDE\xF2\xD1\xA0\xF3\xE6\xD6\x68\xE8\x75\xD6\x6A\xE8\x2C\xCD\x6C\xE8\x3A\xF0\x7C\xBA\x2F\xE8\x38\xE2\x02\xCA\xC3\xCF\x92\xCC\x2D\x00\x11\xF7\x55\x05\x13\xF7\x01\xEA\xBB\xF5\xEA\xF2\xFD\xF5\xEC\xF2\xFF\xF5\x08\xE9\xBE\xF6\x0A\xE9\xC0\xF6\xF0\xDF\x08\x0E\x45\xE8\xD6\xDA\x94\xF6\xE9\xB3\x44\xC7\x41\xB5\x3F\xF7\x2A\xF7\x12\xF7\x2C\xF7\xE0\xDF\x2E\xF7\xE2\xDF\x30\xF7\xE4\xDF\x67\xE8\xA2\xF3\x34\xF7\xA4\xF3\xC3\xDE\xA6\xC3\x9F\xEA\xC8\xE4\x04\x6A\x40\xF7\x4A\x05\x42\xF7\xE9\xF4\xB8\xF6\x60\xE9\xD3\xF6\x4F\xF6\xBC\xF6\x13\xF2\x4A\xF7\x15\xF2\xF9\xD1\xC1\xB3\x43\xCF\x2C\xF2\x05\xE4\x79\x6A\x67\xF7\x30\x01\x69\xF7\xB7\xF6\x4B\xEA\x1B\xEA\x17\xF7\x4E\xEA\x27\xF6\x50\xEA\x3B\xF6\x9F\xE9\x36\xD4\x44\xF4\x76\xCF\x80\xE8\xF3\xF4\x1E\xD0\x19\xDB\x24\xAF\xE1\xF4\x96\xB4\x55\xF7\x06\xF0\x2D\x08\x7B\xF7\xFE\xF2\x6B\xF7\x00\xF3\x46\xF7\x02\xF3\x6F\xF7\x04\xF3\x71\xF7\x06\xF3\x73\xF7\xCF\xF1\xEF\xF3\x38\xAE\x9D\xE8\xB7\xEA\xF9\xF0\xB9\xEA\x49\xF5\x9C\xDF\xBD\xEA\xA5\xE8\xFC\xF6\x56\xF7\x41\xF7\x58\xF7\x75\xE1\x4A\xF6\x10\xD5\x37\xF2\x23\xF2\x83\xF5\xC5\xE8\xAE\xF5\x1A\xE9\x19\xF6\xE4\xAA\xF1\xDD\x11\xF5\xA5\xF7\x14\xF5\x2B\xEA\x02\x01\x8F\xF7\xE0\xEF\x91\xF7\xAB\xF7\x38\xE8\xAD\xF7\xC9\xDD\x81\xF5\x51\xF3\xB1\xF7\x25\xF2\x5D\xF4\xCB\xF1\x5F\xF4\x0F\xF1\x29\xF5\x37\xD0\x2B\xF5\xF1\xF3\x5B\xF2\xFA\xF4\xD4\xEA\xD2\xE8\xAD\xDC\x5F\xF6\xBC\xF7\x79\xF7\x48\xE9\x0D\xF6\x4A\xE9\x65\xF6\xD0\xF4\xD7\xF2\xA7\xF4\xD9\xF2\x6F\xF5\xE9\xF3\x71\xF5\x2D\xF3\x73\xF5\xD4\xF3\xA1\xCD\x9E\xF2\xD5\xE0\x70\xBE\x93\xF0\x89\xCD\x38\xD5\xA6\xF2\x08\xF6\x01\x01\xBD\xF7\x78\xE4\x7C\xEF\x2B\xF7\x7D\xF5\x60\xE8\x35\xF2\xA9\xF5\xAF\xF7\xAB\xF5\xC6\xF7\x53\xF3\xB3\xF7\xB3\xF1\xB0\xF5\xE9\xF0\x9E\xEA\xE6\xEA\x60\x9C\xF0\xF7\x94\xEF\x02\xF0\x7A\xF7\xC0\xF7\x56\xF5\xC2\xF7\xFD\xDF\x59\xF4\xEB\xF5\x15\xF6\xC9\xF1\xC8\xF7\x27\xF2\xCA\xF7\x46\xDF\xAB\xDB\x76\xF5\x04\xAB\xFE\xE8\x03\xF8\x80\xEF\x05\xF8\xD8\xF7\xD2\xF2\xDA\xF7\xA4\xF4\xDC\xF7\xE5\xF3\xDE\xF7\xE7\xF3\xE0\xF7\xD6\xE9\xAB\xF4\xD8\xE9\x1A\xF4\x56\xF2\xE0\xF2\x8A\xF5\x5C\xB9\x17\xF8\xA2\xE3\x55\xEF\xAA\xF7\xF4\xF7\x0F\xF6\xBF\xE8\x3A\xF4\x9F\xF6\x24\xE8\x03\xBC\x26\xE8\xB2\xF7\x0F\xF8\x3C\xF2\x11\xF8\x29\xF2\x8F\xD5\x26\xEB\xF4\xC3\xF8\xEA\x33\xE9\x3A\x69\xD7\xF7\x92\xF7\x0D\xF2\x63\xF3\xD2\xF6\xEB\xDC\x4E\xD4\xD5\xF6\x85\xDE\xD7\xF6\x87\xDE\xC6\x6D\xB2\xF5\x7C\xD5\xED\x69\x42\xF8\x07\xF8\x10\xF6\xE1\xDF\x35\xD1\xE3\xDF\xE9\xDD\x6D\xDE\xE6\xDF\x6F\xDE\x91\xDD\x71\xDE\x25\xEB\x2A\xF1\xC6\xEA\xC8\xF5\x91\xD4\x41\xF8\xA9\xF7\x68\xF7\x52\xF8\x31\xF8\xFB\xF5\xE6\xDA\x6D\xF7\xA2\xF6\x98\xF7\x51\xF6\x01\xF6\x53\xF6\x4C\xF7\xE0", -"\xF4\x3C\x0E\x32\xF3\x99\xE1\x2B\xF8\x08\xEF\xBF\xF7\x2F\xF8\xD1\xF5\x66\xF8\xD1\xF6\x68\xF8\x47\xF8\xBB\xF6\x49\xF8\xBD\xF6\x4B\xF8\xBF\xF6\x9C\xF7\x20\xAB\xC5\xDE\xEC\x7D\x74\xF8\xBD\xEF\xA7\xEF\x43\xF8\xD0\xF6\x45\xF8\x7B\xF8\x4D\xEA\x48\xF8\x1E\xEA\xD6\xF6\xF0\xE9\xD8\xF6\xE6\xF1\xC4\x9D\x5E\xF8\x06\x83\x07\xF6\xC9\xF5\x37\x69\x51\xF8\x77\xF8\x15\xDC\xBB\xF4\xD2\xE9\x59\xF5\x76\xF4\x5B\xF5\x78\xF4\x5D\xF5\x19\xF4\xE4\xF7\x04\xF4\x1A\x7B\xA2\xE9\x55\xBF\x98\xF8\x6F\x5D\x9A\xF8\xE7\xF4\x49\xEA\x43\xF7\x94\xF7\xEB\xF4\x96\xF7\xED\xF4\xA3\xF6\xEF\xF4\xA5\xF6\x6A\xF3\x54\xF6\xA3\xEA\x2D\xF6\xF5\x8E\xDE\xF0\x09\xD0\x86\xF8\xF4\xEF\xF2\xF7\x57\xF7\x9B\xF8\x88\xDD\xAF\xF8\x7D\xF7\xB9\xF6\x7C\xF8\xD4\xF6\x8F\xF8\x4A\xF8\x91\xF8\x4C\xF8\xD9\xF6\x94\xF8\xDB\xF6\xED\x87\xE5\xF0\xBB\xF7\xEF\xF7\xAC\xF8\x1B\xF5\x4B\xF3\x9C\xF6\x4D\xF3\x28\xD2\xC6\xF8\x8D\xF8\x7D\xF8\xC9\xF8\x7F\xF8\xCB\xF8\x81\xF8\xEB\xDE\xC1\xF6\x56\xF6\x25\xEA\x58\xF6\x3C\x04\xE1\xE9\x94\xF6\xE3\xE9\xB0\xEA\x18\xD2\x66\xF7\x63\xF8\x06\xF8\xC2\xF8\x8B\xF4\x34\xF6\x8D\xF4\xB4\xD5\x25\xF6\x2C\xE2\x19\xF7\x9D\xE9\x83\xF7\x21\xEA\x7D\xF3\x7C\xDF\xE3\xF8\xF5\xE9\xC7\xD1\xC2\xF3\xC9\xD1\x8E\xF7\xD4\xF8\xA5\xF5\xAD\xF2\xDB\xF7\x6B\xF5\xD1\xF4\x75\xF4\x15\xF4\x77\xF4\x00\xF4\xA3\xF8\x7A\xF4\x19\xF3\xED\xF3\x00\xE2\x5C\xEB\x1E\xF1\x47\xEB\x1D\xE2\x60\xEB\xC6\xF6\xF2\xF6\xD4\xF7\xB0\xF6\xEC\xF8\x90\xF7\xFF\x0A\x89\xF8\xFA\xF5\x7A\xF8\x32\xDE\xBD\xF5\x06\xE9\x48\xF7\xEE\xF2\xB6\xF8\xF1\xF4\x6F\xF8\xEB\xA4\xA9\xF6\xB1\x93\x92\xD0\xAC\xF6\x4A\xF5\x66\xC4\xDF\xDC\x18\xF9\xE8\xD1\x1A\xF9\xBE\xF7\x1C\xF9\x65\xF8\xF6\xF7\x12\xF6\xF8\xF7\x14\xF6\xFA\xF7\xAD\xF5\x38\xF8\xAF\xF5\x3A\xF8\x94\xE1\x10\xF9\xC2\xF6\x0A\xC0\x69\x8A\x1A\xD2\x55\xEB\x4B\xF5\xF8\xDC\xB5\xF4\x32\xF9\xF1\xF7\x88\xF8\x35\xF9\x57\xF4\xF7\xF7\x0B\xF8\x38\xF2\x0D\xF8\x3A\xF2\x3C\xF9\xB4\xF7\xFE\xF7\xF6\xF0\x3C\xF8\x95\xF8\xE5\xAC\x6A\xEB\xE3\xF6\x42\xC5\xC6\xB5\x6D\xE2\x6F\xEB\x6F\xE2\x6C\xEB\xFF\xED\x06\xD4\x09\x01\xB6\xC4\x65\xEC\x94\x6C\x61\xF6\x0C\xF0\x96\x61\x5B\x98\x14\xD4\x5A\xA9\xC7\xA8\x4D\xB3\x26\x0B\x07\xEE\xB4\xC4\x91\xEC\x81\xEC\xF1\xEF\x91\xE6\x55\x3D\x7C\xE6\x12\xD4\x48\x53\xF4\xF6\xE7\xE1\xF2\x82\xCA\xEF\xF8\xF6\xEE\x34\x71\xF9\x90\xEC\x64\xF9\xF1\x8E\xDF\xEF\x4A\xF9\x69\x29\x78\xF9\xE3\xE2\xFD\x15\x7B\xF9\xEB\xF0\xE8\xE1\x2B\xF4\x28\x49\x81\xF9\x72\xE6\x83\xF9\x6B\xEC\x01\x01\xC5\xEF\x8D\x7C\x8F\xEE\xD6\xE2\x7F\xA5\xCA\xD2\x3B\x83\xF8\xF0\xCD\xC6\x9B\xEE\xDD\xE7\x3C\x0E\x8A\xE6\xE1\xEB\x02\x01\xB2\xEF\x99\xED\x21\xEF\xAF\x9F\x9A\xEC\xEB\x1B\x9F\xE3\xBA\xEF\xE2\xEC\x41\x71\x97\xE3\x3B\xED\x9E\xED\x23\xED\xE9\x0C\xAA\xEC\xAC\xEC\xB3\xEC\xD4\xEC\x85\xE3\x07\xE4\x88\xE3\xE1\x70\xB3\xEC\x9A\xB0\x09\x01\x8C\xE3\x04\xEB\x00\x00\xA4\xF9\x47\xED\xA6\xF9\x9B\xED\x62\xED\xAF\xF9\xC2\xEE\x9F\xED\xB1\x9A\xA9\x5B\x03\xAB\xC6\xEC\x74\xEC\x06\x01\xC1\xF9\x7D\xED\x38\xED\xC4\xF9\x80\xED\xC6\xF9\x10\xED\x65\xED\xD5\x70\x42\xA5\x2B\xED\xAC\x56\x08\x29\xD9\xEC\x27\x01\xDB\xEC\x57\xE7\xA3\xF9\xB9\xD8\x95\xE3\x1F\xED\x57\xED\xC8\xF9\x8C\xD3\x4B\xDD\xF7\xEC\x0B\xEB\xAE\xE2\xAC\xF9\x9B\x9A\xE4\xEC\xC0\xE3\x6B\xDA\xE0\xE3\x04\xED\x7C\xC6\xBE\xD2\xCF\xF9\x8C\xED\xAD\xEF\xAD\xF9\xBF\xE3\xDA\x5A\xC1\xE3\x1A\xD3\x68\xF4\xFF\x00\xF1\xE3\xAA\xF9\xB5\x15\xE1\xF9\x1E\xED\x8E\xED\x20\xED\xEE\xF9\xE6\xEC\x3D\xED\x24\xED\xF9\x71\x01\xE4\xF5\x0E\x72\x71\xB5\xF9\xD8\xF9\xD6\xEC\xB1\x30\x2D\xED\x64\x00\x2F\xED\x15\x0E\x31\xED\x92\xEC\xE0\xF9\xEB\xF9\x37\x9B\x01\xED\x18\xE4\x46\x71\x3F\xED\x06\x01\x41\xED\xE9\xF9\x17\xFA\x6F\xED\x9D\x15\x56\xED\x80\xE4\xD6\xF9\x8D\x71\xD7\x5A\x4F\xED\x16\xFA\x01\x01\xF4\xF9\x5F\xED\xC3\xF9\xF7\xF9\xED\xF9\xF9\xF9\xEF\xF9\x19\xE4\xD7\x5A\x5A\xED\x2A\xFA\xC0\xF9\x01\xFA\x8D\xED\x7F\xED\x8F\xED\xD4\xF9\x82\xED\x1C\xFA\x55\xE4\x09\x01\x57\xE4\x8B\xE6\xCE\xF9\x38\xFA\xF6\xF9\xEC\xF9\x9C\xED\x21\xED\x3C\xED\xC1\xEC\x44\xE4\x0D\x85\x67\xE4\x22\x05\x20\x8F\x2C\xFA\xFB\xD9\x39\xFA\xD2\xF9\x3B\xFA\x9D\xED\xC7\xF9\xB1\xF9\xC9\xF9\x75\xE4\x83\x9B\x4F\xFA\x44\xFA\xD1\xF9\x2F\xFA\x47\xFA\x05\xFA\x22\xED\x07\xFA\xA0\xED\xAC\xED\x0D\x0E\xA1\xF9\x8C\xEE\x3F\x0A\x7E\xF1\xC2\xF9\x0D\xEF\xB9\xEE\xBE\xE1\xDA\x82\xEA\xEC\x36", -"\xFA\x69\xFA\xD0\xF9\x9A\xED\x5E\xFA\xF3\xEC\x1A\xFA\x53\xE4\x12\xED\x36\xDA\x38\x59\x46\xE4\x20\xFA\x01\x01\x71\xFA\xF5\xF9\x5D\xFA\x46\xFA\x75\xFA\x4B\xED\x89\xD3\xED\xD8\x63\xFA\x36\x96\x63\xF9\x10\x29\xF1\x8E\x93\xEF\x59\xC1\x22\xC5\x8D\x5A\xA8\xF9\x53\x25\xFF\xF9\xA1\xE2\x83\xEC\x7B\x9B\x03\xFA\xE4\xF9\x57\xFA\xDC\x0C\xB3\xF9\x81\xE3\x21\x04\x28\xED\x4F\xF8\xAE\xE3\xD9\xF9\xFB\x56\xB2\xEC\x73\x4A\x22\x0B\xBC\xF9\x06\x01\xBE\xF9\xDF\xF9\x01\x01\x8B\xFA\x0E\xEA\x9A\xEF\xDE\x9A\xD3\xF9\x55\xFA\xD5\xF9\xC3\xEE\xCA\xF9\x14\xF8\xCC\xF9\x9F\xE7\x3F\x0A\xA9\xFA\xB4\xC1\x87\xEF\xAC\xFA\x54\xFA\x48\xFA\xB0\xF9\x62\xFA\xD7\xF9\xC0\xC9\xB8\xF9\xB1\xEC\x10\x71\x7E\xD8\x70\x9A\xDA\xEC\x20\x8F\xB6\xFA\xD1\xC1\x85\xD3\x8A\xD3\x78\xE3\x96\xFA\xBD\xFA\xE6\xF9\xFC\xF9\xE8\xF9\x42\xFA\x03\x01\xC7\xFA\x91\xF6\xB8\xFA\x2A\x9B\x3F\x72\xBB\xFA\x56\xFA\xCD\xFA\xD4\xE2\xBA\x8E\xED\x14\xC6\xFA\x93\xFA\x8C\x9B\xBD\xEC\x04\xFA\x31\xFA\x06\xFA\x4A\xFA\x86\xFA\xFC\xF9\xFE\xF9\x40\xF0\xA7\x5B\xD3\xFA\x98\xD6\x84\xFA\x24\xFA\x76\xFA\x11\xED\x46\x71\x25\xED\x0B\xFA\xC9\x9A\x0D\xFA\xBF\xFA\x9F\xFA\xEF\x50\x11\xFA\x13\xFA\x38\x59\x15\xFA\x7C\xFA\x00\x00\xEB\xFA\xE2\xD1\xFB\xEE\x86\xD3\xAE\xF9\xAE\xFA\x3D\xFA\xA0\x71\xD7\x5A\xE6\x9A\xBE\xD2\xFF\xFA\xD8\xF3\xC9\xFA\xED\xD8\xD7\xFA\x60\xFA\x49\xFA\x4D\xED\xF6\x9A\x74\x49\xDE\xFA\x03\xA2\x92\xD3\xAD\xFA\xD8\xFA\xAF\xFA\xE5\xF9\x2C\x9B\x11\x0E\x35\xFA\xFD\xFA\x0A\xFB\x13\xF9\x01\xFB\xCA\xFA\x2A\x8B\xE2\xFA\x37\x59\xFA\xF9\x6D\xDA\x76\xED\x56\xE4\x14\xFB\xBC\xC0\xED\xFA\xE1\xFA\xCC\xFA\xE5\xFA\x58\xFA\x84\xED\x09\x01\x86\xED\x5B\x5C\xB5\xFA\xDF\xFA\x8D\xFA\x2D\xFB\x25\xFA\xB0\xFA\x59\xFA\x09\x01\x84\x9B\x36\xFA\x1F\xFB\x99\xEF\x2C\xFB\xE3\xF9\x39\xFB\x1A\xFB\xEE\xE3\x3D\xE7\x66\xFA\x1A\xE5\x01\x01\x7F\xEF\xAA\xFA\x41\xFB\x83\x9F\x6D\xFA\x97\xB1\x38\xC2\x36\xFA\x4A\xFB\xB7\xFA\xAB\xFA\xD6\xFA\x8C\x9A\x83\xFA\x95\xD3\x81\x9A\xB2\xE9\x7B\xFA\xD1\xFA\x02\x01\x52\xFB\xC8\xFA\x21\xFB\x0D\xFB\x56\xFB\x90\xED\x58\xFB\xC2\xE3\x3C\x9B\x56\x9B\x8A\x83\x5E\xFB\xD4\xFA\x54\xFB\x41\xC5\xAA\xEC\x4A\x9B\xD6\x29\x66\x9B\x0A\xAA\x6A\x9B\x20\xEF\xAC\xD5\x54\x9B\xD7\x5A\x06\x72\x68\xFB\x36\xFB\x40\xC5\x22\xFB\xAA\xEC\x63\x9B\xBF\x58\x65\x9B\x03\x72\x7B\x53\x65\xF9\x21\xAE\x72\xFB\x4A\xDA\x74\xFB\xA3\xA5\x8D\xD7\xA5\xF1\xD9\xDF\x93\x62\x13\xF0\xFE\xE9\x7A\xF2\xE3\xF3\x1E\xF8\xA6\xF4\x6D\xF5\x3C\xF3\xE8\xF3\x23\xF8\xE2\xF7\x40\xF3\xA5\xF8\xA3\xA6\x61\xF4\x47\xF4\xFD\xE7\x49\xF4\xFF\xE7\x19\x8B\x8A\xDA\x86\xE8\xBC\xF1\x23\xF0\xFD\xF4\x00\x00\x8C\xFB\x35\xE9\x83\xE9\x71\xF4\x8F\xFB\x06\xF9\xDD\xF7\x92\xFB\xA8\xF4\x94\xFB\x98\xF2\x96\xFB\xD2\xF3\x98\xFB\xE0\xA5\x9A\xFB\xFC\xE7\x6C\x66\xFE\xE7\xFC\x9B\xA3\xDA\x4D\xF7\x8F\xE4\x1D\xE8\x4F\xF4\xA5\xFB\x96\xE1\xFB\xBA\xB5\xF6\xAE\xF8\x6A\xF7\xC5\xF8\x6C\xF7\xC7\xF8\x6E\xF7\x7E\xF8\x70\xF7\x80\xF8\x4B\xF7\x82\xF8\xD2\xDA\x38\xF7\xE9\xF1\x1C\xC7\xEB\xF1\x0C\xE0\xAE\xB5\xA6\xFB\x16\xEA\xEF\xF8\x38\xF5\x9D\xF8\x66\xF2\xAD\xFB\xDF\xF7\x0A\xF9\x17\xF4\x0C\xF9\xC2\xF4\x0E\xF9\x7C\xF4\xC5\xF4\x1F\xE0\xD4\xDA\x9F\xBA\x96\xEA\x45\xF9\xD4\x86\x05\xF2\xE9\x90\x2F\xB1\x3F\x0A\xD5\xFB\x5C\xE8\x1D\xF9\xE6\xF5\x62\xE8\x9E\xF6\x13\xF6\x60\xCB\x51\xF9\xED\xF5\xFC\xF7\x55\xF3\x3E\xF9\x57\xF3\x00\xF8\xB0\xF4\x36\x89\xEE\xFB\x72\xE8\x4C\xF9\x92\xF5\x4E\xF9\xC4\xF7\x22\xF5\xAF\xFB\x3E\xF3\xB1\xFB\xEB\xF3\xE1\xFB\xAE\xF4\x6F\xF2\x4B\xDD\x76\xF7\xAE\xEC\x04\x64\xFF\xFB\x8C\xE8\xF0\xFB\xD7\xF8\x1E\xF5\xD9\xF8\xC6\xFB\xDB\xF8\xC8\xF8\xF6\xF8\xEF\xE9\x1B\xF7\xF1\xE9\x1D\xF7\x37\xD4\xC1\xC9\x88\xF7\xE0\xC7\x82\xE8\x1F\xD0\x84\xE8\x21\xD0\xA1\xFB\x6D\xE0\x30\xF9\x50\xDB\xED\xFB\xC0\xFB\xC8\xBD\x68\xF5\x0E\xF6\x78\xF8\x36\xF9\x4B\xF6\xF4\xFB\xB1\xD0\xEC\xF5\x20\xC0\xF8\xFB\xEF\xF5\x55\xF9\x03\xF1\xCC\xF7\x11\xF1\xEA\xD4\xDB\xDC\x24\xDE\x09\xF1\xFC\xF4\x28\xF7\x06\x01\x11\xFC\xA8\xE8\x01\xFC\xA8\xF5\x37\xF9\x4F\xF9\xB0\xF7\x6A\xF6\x84\xF5\x24\xF8\x26\xF5\x26\xF8\x28\xF5\xFE\xF1\x2A\xD8\x7A\xF0\xB9\xF7\x96\xB4\x44\xFC\xBD\xE8\x46\xFC\x66\xF6\x94\xF2\x68\xF6\x96\xF2\x06\xFC\xAA\xF4\x08\xFC\xAC\xF4\x0A\xFC\xC4\xF4\xA2\xC7\xCB\xE8\x89\xF2\xEA\xF7\x70\xF0\x73\xC1\x2F\xF5\x74\xF2\x56\xFC\xED\xE8\x13\xFC\xD8\xC2\x9D\xF6\x16", -"\xFC\x95\xF7\x69\xF8\x47\xF7\xB4\xF8\xC0\xF5\x25\xF9\xC2\xF5\xB8\xF8\xD6\x2F\x7C\xDB\x91\xF0\xCF\xEA\x47\xF5\x14\xF1\xBA\xEA\xD1\xF7\x6E\xCD\xE9\xE8\xEE\xF7\xBF\xFB\x8D\xFB\xCE\xF4\x03\xF5\x22\xF6\x12\xF3\xD5\xF5\xB6\xF3\xD7\xF5\xB8\xF3\xD9\xF5\xBA\xF3\x61\xFC\xCC\xF2\xAD\x7B\xFD\xE8\x99\xE1\x6B\xFC\x11\xE9\x58\xFC\x90\xFB\x67\xF6\x20\xF8\x95\xF5\x5D\xFC\x24\xF5\x4D\xFC\x86\xF5\x4F\xFC\x88\xF5\xEA\xEA\x9D\xE3\xD3\xCD\xFE\xE8\x95\xFC\x47\xE9\x6D\xFC\x67\xC3\x89\xFC\x4E\xE9\x03\xF7\xBE\xE9\x05\xF7\x52\xE9\x8A\xF6\x53\xF0\x8C\xF6\x1A\x7B\x1E\xE9\x6C\xEA\x10\xFC\x2C\xFC\x2C\xBF\xA2\xF4\x55\xF4\x1D\xF8\xAB\xFB\x1F\xF8\xDB\xFB\x21\xF8\xDD\xFB\xC0\xF4\xDF\xFB\xD7\xF4\x90\xFC\x0D\xF5\x1B\xF3\x1D\xF4\xB1\xF0\x31\xE9\xF7\xF2\x76\xDE\x03\x01\xA6\xFC\xF4\xF2\x90\xBE\x53\xF5\x5F\xE8\x30\xF8\x31\xFC\xAE\xF7\x49\xFC\xF9\xF7\x4B\xFC\x37\xF8\x6C\xF6\xC9\xF7\x6E\xF6\x26\x91\x4E\xF8\xBE\xF1\x09\x01\xCD\xFC\x1D\xF3\xCF\xFC\xCF\xF5\xD1\xFC\x30\xFC\x4D\xF9\x48\xFC\x04\xFC\x0C\xF8\x3A\xF9\x16\xF6\x37\xFC\x18\xF6\x39\xFC\x28\xF1\xD0\xDB\xC5\xF5\xA5\xF7\x60\xF8\x65\xF7\x27\x01\xE0\xFC\xC6\xF5\xA8\xFC\x10\xC8\xB0\xF8\xBC\xF5\xB2\xF8\xBE\xF5\x74\xFC\x00\xF6\x9A\xF7\x42\xF4\xE1\xF8\x44\xF2\x72\xF8\x78\xF5\xCC\xFC\xB7\xFC\xFD\xBD\xCE\xF6\xFD\xF2\x44\xF8\x44\xF7\x64\xF3\x21\xF9\x11\xF2\x6B\xF8\xA4\xF6\x6D\xF8\xA6\xF6\xCD\xFB\x34\xAA\x45\xF3\x33\xE8\xF6\xFC\x46\xEA\x9A\xF6\x5F\xE1\xF1\xFB\x20\xF2\xF3\xFB\x38\xF9\xF5\xFB\xEA\xFC\x0E\xF8\xD9\xFC\x10\xF8\xDB\xFC\xCB\xF7\x57\xC4\x05\xF6\xD8\x82\x97\xF8\x61\xF8\xDF\xFC\x07\xFD\x82\xE9\x70\xF4\x4B\xF2\xAA\xFB\xD9\xFB\xC4\xF2\x08\xF9\xD3\xF4\xC0\xFC\xD5\xF4\xC2\xFC\x40\xF5\xC4\xFC\x42\xF5\x75\x80\xA8\xF8\xFE\xFB\x2D\xFD\x43\xBF\x2F\xFD\xB9\xF4\x72\xF4\x04\xF5\x9E\xF8\x06\xF5\xFE\xF3\x36\xFD\x3E\xF5\x38\xFD\x72\xF5\x3A\xFD\x60\xF5\x0C\xFC\x2E\x61\x31\xD6\x43\x6F\x10\xA4\x18\xFD\xDE\xBF\x2E\xFC\x1C\xF8\x7C\xDC\x59\xFC\x93\xF5\x9A\xFC\x69\xF6\x9C\xFC\x97\xF5\x9E\xFC\x99\xF5\xA0\xFC\x9B\xF5\x27\xFD\xF1\xFC\x83\xBF\xD4\xE1\xBF\xE0\x06\xFD\x85\xFC\x69\xF5\x87\xFC\xF1\xF8\x01\xF7\x8E\xF4\xAC\xFC\xE1\xF1\x81\xF7\xE3\xF1\xF8\xF8\x52\xEA\xFA\xF8\x13\xC9\xA7\xF3\x14\xB6\x16\xC9\xF8\xE9\x3C\xD0\x5E\xF6\x19\xF9\xF5\xFC\x3F\xFD\xE2\xFC\xD9\xF7\x37\xF5\x3C\xDC\xBC\xFC\x91\xFB\x34\xFD\x3C\xF5\x48\xFD\x70\xF5\x4A\xFD\xE3\xF7\x4C\xFD\x74\xF5\xD5\xF3\x7C\xF9\x72\xF6\xED\xF0\x07\x0E\x30\xC9\x77\xF6\xE8\xFB\x83\xDB\xFE\xF0\x55\xFC\x7E\xFD\xCD\xE9\x08\xE8\xC5\xE1\x6A\xF5\x32\xFD\x27\xF3\x85\xFD\x6E\xF5\x87\xFD\xE1\xF7\x89\xFD\x97\xFB\x8B\xFD\xE5\xF7\xF9\x7B\x29\xF9\xB2\xD3\xB3\xA5\x08\xF1\xA4\xF2\xFF\xAF\xBA\xCE\x53\xFD\x1D\xBD\x03\xF9\x90\xF5\xBB\xFC\x9D\xFD\xCC\xF3\x9F\xFD\x93\xFB\x22\xF8\xB0\xFB\xA3\xFD\xB2\xFB\xA5\xFD\xA6\xF8\x3A\xC3\xF3\xDC\x73\xF6\x5D\xCF\x2C\xF9\xA5\xF7\xAF\xF6\x31\xF9\x7D\xFD\x68\xFD\x2F\xFC\x9C\xF8\x44\xFD\xDA\xFB\xB6\xFD\xAE\xFB\xB8\xFD\x07\xFC\xBA\xFD\x09\xFC\xDB\xF5\x0F\xF9\x70\xF6\xEA\x65\xF0\xF3\x14\xB6\xC4\xF6\x15\xF9\x3C\xD0\x47\xF9\xCA\xF4\xB6\xFC\xC7\xFD\x56\xFD\x90\xDE\x83\xFD\x99\xFC\xBE\xFC\x9B\xFC\xCE\xFD\x5E\xFC\xD0\xFD\x60\xFC\xD2\xFD\xE2\xFB\x2E\xE9\x54\xE1\x7E\x94\x0C\xDD\x20\xF4\x59\xEA\xE0\xF6\xF4\xD6\xA5\xA6\x75\xCC\x70\xDA\xA5\xEA\x8A\xF0\x00\x00\x56\xF1\xDF\xF8\xCC\xFB\x53\xD4\x1F\xFC\x89\xCC\x9D\xF7\x21\xF7\xE1\xC6\x4A\xF4\xD5\xDF\x44\xF2\x4E\xF4\x9D\xEC\x02\x01\xF9\xFD\x1C\xFC\x92\xF8\x85\xF7\x77\xF7\x45\xF4\x16\xE8\x89\xF7\x70\xEA\x2D\xF0\x59\xD4\xE4\xC9\xBB\xFB\xA4\xD9\xF2\xDF\x6A\xF4\x6B\x63\x3F\xF1\xC1\xF5\xD1\xE0\x18\xE2\x43\xE8\x2D\xE8\xEB\xC0\x5D\xE7\x63\xDD\xD2\xFB\x80\xBA\x3F\xF0\x18\xFE\x07\xFE\x69\xE1\x77\xFC\x27\xF9\x81\xEA\x7B\xDD\xBE\xA1\x47\xF0\x47\xE8\xEA\xFB\x91\xFA\x19\xFE\x76\xFC\x1B\xFE\x26\xFD\x61\xF5\x94\x85\x6C\xA6\xEC\xC3\xA7\x5B\x08\xFE\x72\xFD\xE5\xF1\x74\xFD\xFD\xA1\x75\xF7\xF6\xFD\x29\x5D\x3A\xFE\xB0\xFC\x5B\xF0\x28\xF0\xFD\xFD\x8E\xEB\x0F\xFE\x2C\xF0\xDE\xF4\x20\xD0\x8C\xC7\x6C\xF3\xAF\xEA\x29\xFC\xA0\x89\x3F\x0A\x42\xFE\x07\xF7\xB1\xFC\xDC\xF5\x63\xFC\xF4\xF4\x84\xE0\x7D\xFC\xA2\xF2\xE6\xE8\x71\xF0\xF3\xF0\x39\xFE\x27\xFE\x33\xFE\x12\xF8\x1D\xFE\x52\xFC\x03\xD5\x22\xF1\x7D\xF0\xEA\xF8\x08\xD9\xCC\xD3\x1A\xFE\x5C\xF8\xF0\xC3\xF4\xF4\x0A\xDE\xA2\xF7\x48", -"\xF5\x87\xE0\x0A\xF4\x88\xF0\x68\xC4\x68\xFE\x09\x01\x52\xFE\x8F\xFC\xE9\xFD\x0B\xFC\x9D\xF2\x00\xC8\x22\xDE\x3E\xFC\xDE\xEA\x8C\xD0\x82\xFC\x35\xEB\x69\xFE\x32\xFE\x6B\xFE\xC1\xC3\x93\xFC\xDF\xF0\x1B\x5F\x77\xFE\x0B\xF5\xBC\xFD\x1B\xF4\x3E\x7B\xCE\xF2\x82\xFE\x76\xFE\x5F\xFE\x85\xFE\x1D\xE9\xE1\xF2\xC7\x70\x26\xFE\x6A\xFE\x4C\xD5\xBE\xF0\x63\xFD\x62\xA9\x3F\xF8\x5E\xE5\x8A\xFE\x5E\xF5\x8C\xFE\x55\xA3\xB9\xF0\xB6\x9A\x9F\xFE\xA4\xF8\xA1\xFE\x50\xFC\x92\xF3\xEC\xFD\x65\xFE\xF3\xFC\xAB\xA0\x51\xFE\x92\xFE\x99\xFE\xC4\xF0\x2B\xD1\x3C\xCE\xCD\xF0\x93\x62\xA5\xFE\x0D\xF9\x79\xFE\x62\xFC\x75\xCE\x21\xDC\xCC\xF0\x7C\x63\x31\xFE\x12\xFD\xB7\xF8\x29\xFE\x22\xAC\xCF\xF8\x06\xF6\x04\xD6\xDB\xDE\xB4\xFE\x02\x63\xB6\xFE\xE0\xFB\xB8\xFE\x91\xFC\xDD\xF5\x48\xDC\xD9\xF0\x38\xFE\x89\xFE\xAF\xFE\xA5\xF3\xA6\xC3\x71\xEC\x80\xF3\xE6\xF0\xEB\xD3\xD2\xFE\x62\xF7\xD0\xF0\xC3\xFE\x27\xEB\x65\xFD\xC6\x75\xAE\xFE\x98\xFE\xD3\xFE\x44\xEB\x2E\xC9\xF7\xBC\x78\xFD\x8C\xD0\x7B\xFD\xD2\x87\xE0\xFE\x84\xFE\xB0\xFE\xE3\xFE\x76\xFD\xF7\xBC\x92\xFD\x4D\xDF\x78\xF6\x4F\xDF\xEE\x89\x75\xFE\x06\x01\xC9\xFE\xC3\xFC\xCB\xFE\xC5\xFC\x8D\xFD\x8E\xF6\x12\xF1\xA1\xF2\xE7\xEE\x0F\xEA\x67\xDF\x09\xF1\xDD\xF3\x7D\x81\xEA\xFE\xBF\xFE\x26\xF9\x14\xFD\xE2\xF8\x97\xDF\xC0\xFD\x53\xEB\x37\xE2\xE8\xF8\x05\xCF\x74\xFE\x41\xFE\xD9\xFE\x6B\xE8\x78\xD6\xBF\xFD\x90\xFD\x08\xF4\x44\xF9\xAD\xF6\x46\xF9\x53\xE2\xAC\xB2\x0D\x61\xF7\xFE\x39\xFD\xF9\xFE\x3B\xFD\x1C\xF4\x3F\xF6\x47\xE9\xDD\xF6\xEF\xAC\x31\xBD\x13\xBD\x5E\xF9\xAB\xC9\x60\xF9\xE4\xF6\xEE\xE2\x7F\x65\xA5\xEB\xE0\xB2\x4D\xF1\x47\xFE\xE1\x6A\x45\xF1\x5B\x86\x0D\x42\xA2\xEB\xD7\x5A\x38\x69\xC7\xEB\x36\xF1\x5C\xE7\x38\xF1\x92\x80\x34\xFF\x74\x0A\x3D\x42\x80\x44\xF0\xF6\x4D\x99\x11\x0F\x56\x0E\x85\xF1\x15\x0E\x3B\x0E\x45\x00\x74\xEF\x5D\x73\x23\x83\xA0\xCC\x0E\x39\x35\x5E\x6B\x46\x66\x5C\x58\x3F\x16\x86\x53\x00\x91\xF1\x55\xFF\x9B\x6B\x75\xF1\xEB\x09\xC6\x7B\x97\xF1\x43\x00\x7B\xF1\x1D\xE3\xA8\xC0\x9C\xF1\xF7\x7F\x82\xF1\x7C\x76\x46\xFF\x98\xA5\xBA\xEB\x4A\xFF\x0F\x86\x4C\xFF\x6D\x68\x4E\xFF\x8D\xF1\x51\x88\x52\xFF\x74\xEF\x57\xFF\xB9\x68\x71\xFF\xB5\x6C\x59\xFF\x1D\x06\x5B\xFF\xD7\x5A\x3E\x0E\x5D\xFF\x9A\xF1\x98\xAC\x61\xFF\xBC\x80\x6D\xD3\xBA\xED\xF1\x8E\xD8\xC5\xFF\xF4\xC1\xCF\x98\xC0\x40\xE5\x15\x6F\xA2\xF1\x64\x72\xD4\xEB\xE6\x5A\xBF\xF9\x30\xF4\xC6\xED\x08\x03\xA7\xE6\xDD\xEB\xE8\xE7\xB8\xD7\x91\xE4\xDA\xE7\xEE\x5B\x36\xD9\xF8\x5B\xC7\xED\xE5\xEB\x66\xE7\xCD\xF9\x96\xFF\x06\xDB\x1D\xEE\x5A\xEC\x89\xEE\xF8\xE4\xA3\xE4\x2E\xEE\x8D\xFF\xF2\xDA\xF9\x87\x28\xEE\x58\xE5\x1E\xEE\x07\xEC\x7D\xEE\xE7\x9F\x22\xEE\x0A\x5F\xA5\xFF\x39\xDB\x23\x87\x32\xEE\x3A\x0A\x46\xB1\x6F\xEE\x70\xE7\x49\xB1\xDA\xB6\xB0\xFF\x53\xDB\xB2\xFF\x3E\xEE\x08\xE6\x4B\xEE\x8B\xE7\x63\xEE\x4E\xEE\x65\xEE\x05\xA0\xB9\xFF\x97\xFF\xF4\x88\x08\x03\x1C\xEC\xC2\xE7\xC3\xFF\x80\xE5\xC5\xFF\x9E\xFF\x27\xEC\x57\x05\x29\xEC\x2A\xEE\xAC\xFF\x55\xD7\x8C\x99\xBA\xFF\x88\xDB\xBC\xFF\x3D\xEC\x4A\x02\x61\xEE\x7A\xEC\x70\xF2\xA1\xFF\xB7\xFF\x3C\x0E\x67\xEE\x9C\xFF\xE0\x75\xC6\xFF\xC3\x68\x3D\x1B\x6D\xEE\xD9\xB0\xAA\xFF\x64\xEE\x27\xE7\xD1\x5B\x71\xEE\x9E\xEE\x01\x80\xE4\xFF\xA2\xC5\x4A\xEC\x18\x95\xB6\xFF\x01\xE7\x4F\xEC\xD5\xFF\xF0\xFF\xEB\xDB\x66\x00\x67\xD8\x86\xEE\x62\xEE\x35\xEC\x20\xEC\xF6\xE6\x8B\xEE\x48\xF6\x6F\xFF\x66\xD8\x68\x51\x74\xFA\x73\x60\x53\x86\x30\xD6\xFF\x1C\xB7\x63\x1C\x5E\x32\x78\x06\x52\xE5\x73\xB3\x3C\xFC\x7F\x1F\x88\x10\xF3\x65\x94\x6D\xFE\x73\xCE\x6A\xD4\x75\x90\x77\xE4\x55\xA5\xEE\x47\x2A\x71\xB1\x7A\x04\x28\x04\x00\xF1\x7C\x98\x75\x06\x07\xFA\x08\x49\x00\x1E\x00\x86\x82\x45\xDF\x7D\x37\x7B\x64\x34\xDA\x3F\x91\xE1\x38\xF8\x7A\xEF\x61\xEA\x66\xE4\x7A\x2B\x79\x20\x74\x86\x7B\xB9\xF1\x21\xE0\x50\x32\x65\xD2\x5E\x34\x38\x05\x83\x85\x7A\xA8\x70\x02\xF6\x74\x9E\x46\xDE\x78\xA1\x6E\xE0\x7A\x84\x7C\x0C\x81\x32\x7A\xBA\xF1\x2D\x99\x5C\xA0\x7E\xA2\x6F\xED\x7A\x89\x41\x0A\x81\x76\x7E\x2B\x00\xFF\xEF\x7A\x75\x6F\xDE\x7F\xE1\x79\x01\x71\xD4\x7B\x46\x75\x83\xF4\x04\xF1\x36\x00\x8C\xE7\x78\x03\x86\x0D\x7C\xC2\x7E\x0A\x7F\x45\xF0\x34\x17\x21\x80\x6C\x67\x62\xEF\x7C\x04\x73\x8B\x7E\x8B\x76\x3A\xFF\x23\xFA\x79\xE0\x65\xE9\x71\xE6\x7C\x1F\x74\x86\x78\xF1\x36\x2F\xFF", -"\x54\x00\xB8\x6F\x73\xF8\x76\x7B\x7F\xC7\x7E\x09\x81\x1A\x41\x53\x00\xD3\xF2\x7D\xDF\x69\x02\x81\x37\x5B\x07\x80\x08\x7E\x15\x78\x0B\xF7\x10\xFC\x4A\xF9\x65\xE1\x7C\xE4\x7C\xA5\x6E\x4D\x66\x34\x62\x7A\x0A\x71\x00\xA2\x01\x9D\xC9\x74\x06\x83\x07\x7C\x88\x6E\x2C\x79\x0B\xBB\x6E\xE0\x4A\xCA\x7F\xE1\x7C\xDA\x78\x50\x67\x7E\x75\x57\x3B\x82\x00\xDE\xFA\x6D\xD9\x60\xEB\x7F\x66\x7E\xA9\x7F\x98\x7F\x5B\x74\x19\xFF\x2E\xF2\x78\xF8\x4E\x4F\x41\x08\x86\x08\x83\x0D\x81\x35\x80\x36\xF7\x48\x4D\x6D\xF9\x6C\x46\x7A\x6A\x7A\x66\x6D\x9C\x7F\xF2\x68\x10\xDE\x26\x58\x5D\x02\x99\x5D\x37\x04\x85\x0A\x83\x44\x7E\x81\x7E\xB6\xF1\x11\xE2\x48\x42\x73\x88\x7A\xE5\x78\xFA\x78\xA0\x7F\xF6\x7B\x19\xF1\x6D\xFB\x2D\x02\x80\x05\x8E\x17\x6B\x13\x7A\x58\x7B\x4E\x78\xCD\x6B\x69\x00\xB2\x01\x99\xDF\x75\x08\x87\x27\x7F\x65\x5B\x47\x7F\xE7\x73\x42\x01\x83\x02\x94\xCA\x74\x07\x82\x87\x7C\x0A\x7C\xD9\x3F\x25\xF1\x1E\x01\xAA\x01\x95\xB9\x7D\x0B\x82\xD3\x7F\x31\x7E\x67\x7E\x27\xCB\x76\xE5\x76\x8C\x50\xF6\x71\xE2\x3B\x17\x80\x35\x81\x16\x6B\xDD\xFC\x27\x00\x92\x03\x83\x06\x8A\x02\x85\x18\x83\xFE\x7C\xCE\x7A\xA3\xC9\x59\xD2\x5B\xB9\x20\x03\x8E\x0D\x81\xEC\x78\x1B\x81\x58\x7F\xDE\xF5\x19\x91\x65\xF8\x71\x0A\x0D\x0E\x83\x0B\x7C\xBB\x7E\x3F\x5C\x3D\xC4\x3B\x1F\x51\x02\x9F\xE2\x75\x82\x7B\x76\x7C\xAA\x7E\x63\x7E\x23\xFF\x58\x01\x83\x58\x78\x7A\x5C\x35\x7D\xD7\x7F\xE9\x75\x4F\x80\xDF\x00\xB4\x97\x4E\x70\x71\xDE\x24\xBA\x63\x1E\x82\x2E\x80\x84\x80\xEE\x00\xA1\x01\xAD\x01\x9F\x9B\x7C\x8B\x7A\x0A\x83\x38\x81\x65\x80\x73\x00\xE6\x01\x96\xC3\x78\x9A\x7A\xEA\x7F\x78\x5A\xB7\x7F\x60\x69\x2A\x7D\x75\x01\x90\x83\x73\xF4\x7C\x11\x7C\xDC\x7D\x22\x62\x73\x7F\x33\xDF\x1C\x01\xA1\x04\x90\x08\x86\x0F\x82\xDC\x7D\x1E\x63\x00\x71\x59\xFE\x7C\xAC\x41\xCF\x77\x4F\x73\x3C\x7A\x25\x80\x57\x3E\x91\x80\xB9\xB9\x60\xFC\x46\x02\x90\x88\x7C\xEF\x7F\x80\x7B\x41\x79\x49\x7B\x5D\x00\x96\xE1\x43\xFC\x75\x4D\x3B\x12\x83\x1A\x81\x44\x81\x6A\x80\x96\xC4\x28\xFB\x42\x7C\x41\xEE\x7D\xF0\x79\x28\x82\x55\x70\xE2\x7E\x08\x0E\x2B\x01\x93\xCF\x38\x09\x89\xB8\x5A\x27\x82\x31\x81\x46\x7B\x9E\xF7\x41\xB9\x42\xE5\x70\x27\x55\x6C\x7A\xBB\x7F\xC6\x7E\x25\x34\x45\x01\xE4\x01\x88\x01\x9A\x08\x8A\x04\x82\xAC\x7F\x35\x81\x70\x7E\x6D\xCC\x5A\xF2\x6B\xFC\x7C\xCA\x78\x21\x69\xE5\x7D\x4C\x79\xB5\x80\xA1\xB3\x5D\x13\x31\xC5\x70\xF9\x7C\xF3\x7E\x29\x78\x2F\x41\x72\x59\x7B\x0E\x7D\x1C\x09\x19\x3E\xF5\x2D\xA4\x03\x2E\x83\x18\x59\xC0\x75\x2E\x00\xDC\xD5\x38\x05\x9A\x75\x08\x08\x09\x95\x22\xAF\x2E\x17\x03\x7E\x01\xBB\xFE\x5B\xAF\x78\x0B\x01\x18\x81\xEA\x47\x60\x81\x8E\x2D\x92\x0E\x7B\x02\x97\x6B\x30\x24\x09\x18\x84\x29\x79\x5D\x80\x99\x7F\xC5\x7A\x0F\x03\x94\x7B\x2D\x26\x22\x19\x85\xC1\x04\x1C\x03\xCA\x80\x57\xF1\x00\x03\x85\x6A\x69\x25\x2A\x19\x87\x67\x2E\xA8\x07\xCE\x80\x11\x0E\x76\x0E\x20\x06\x94\x85\x78\x15\x7A\x28\x7B\x68\x81\x7E\x22\xA5\x01\xF1\xBC\x0A\xC9\x09\x32\x23\xF4\x7F\x72\x68\xE7\x68\x72\x26\x2C\x66\x19\xD7\x44\x2A\x14\x7B\x7E\xB9\x3B\x64\x41\xB7\x66\x1B\x00\x6D\xFF\x4B\x1A\x66\x71\x26\x78\x06\x61\x43\x0B\x01\x64\x78\xE3\x80\x97\x6B\x75\xFE\x79\x05\x11\xD3\x37\x19\x7B\x09\x02\xD7\x7F\x89\x71\xBD\xCC\x7D\xFE\x64\xFE\x23\xFB\x7E\xE6\x28\x37\x82\x65\x81\xC5\x80\xED\x7D\x76\x02\xA4\xFE\x3F\xF9\x70\xAA\x26\x2B\x01\xD4\x7E\xDD\x80\x41\x03\x3C\x03\xB9\x15\x61\x8A\x7C\x18\x87\x35\x80\x03\x44\xEE\x80\xA6\x94\x5E\x03\xB4\x1C\x53\x45\x0F\x1B\x81\x38\x82\x5B\x47\xE1\x80\x74\xEF\x48\x03\x99\x9F\x7B\x2E\x7D\xF3\x7D\xAE\x3C\x7A\x80\x67\x4A\xEA\x01\xD2\x8C\x33\x22\x12\x0F\x84\xC7\x32\x39\x82\xA9\x34\xB4\x23\xCD\x01\xEE\xC6\x1A\x1A\x7D\xCA\x7E\x1A\x86\x88\x78\xCD\x43\xFB\x80\x7D\x46\x75\x8F\x13\x9F\x52\x0E\x8C\x89\x47\xEF\x7D\x81\x79\xDD\x76\x09\xC6\x27\xB7\x3A\x16\x7E\x71\x65\x56\x34\x4E\x6B\x13\x01\xE7\x80\xDD\x5A\x52\xB4\x11\xF5\x17\xB7\x7A\x38\x24\x6F\x7E\x73\x05\xE7\x2B\x86\xE6\x01\xC5\x7A\xAE\x71\x02\x04\xF7\x74\x44\x83\x47\x72\x06\x07\x1A\x02\xBD\x86\x1C\x08\x94\xA8\x1E\x21\x84\xA2\x1C\x88\x80\x4E\x73\x3F\x29\x33\x11\x26\x08\x95\x64\x64\x51\x19\xD8\x2D\xBC\x05\x9D\x14\x6C\x62\x06\x05\x26\x71\x20\xBC\x29\x25\x5C\x47\x81\x47\x3E\x6E\x2D\x29\x02\xF5\x06\x2B\x08\x95\xEA\x1D\x22\x80\x63\x47\x8B\x81\xD1\x22\x55\x3D\x33\x11\x3E\x08", -"\x98\xC0\x7F\x97\x78\x27\x16\x8D\x81\x7A\x07\x38\x02\xF1\x4A\x56\x08\x0A\x25\x34\xF7\x70\xD3\x71\x03\x80\xB0\x80\x14\x3D\x4C\xB4\x3B\xBD\x7D\x10\x89\xA0\x7C\x0C\x00\x50\x07\x23\x81\xA1\x52\x49\x04\xAF\x4D\x7F\x42\x65\x23\x80\x39\x35\x94\x81\xB4\x52\x53\x02\xBB\x1C\x0B\x09\x9C\xEA\x22\x68\x77\x4A\x83\x4D\x2D\x20\x81\x8A\x01\x43\x04\xB2\xF5\x05\x12\x8E\x67\x40\x4C\x81\x92\x2C\xDF\x23\xB3\x08\x6D\x04\x86\xE6\x75\xEA\x1F\x24\x80\x65\x0B\x99\x80\x9F\x37\x72\xA5\x35\x03\x9D\x86\x3F\x2B\x52\x05\x00\x43\x83\x8F\x04\x11\x80\x76\xF9\x1F\x87\x0B\x68\x4E\xBD\x2E\x2D\x71\x9E\x55\xA9\x74\xA9\x80\xDB\x38\x5D\xD1\x64\xE4\x66\xF8\x78\xE2\x7B\x88\x78\x83\x7F\xC3\x7B\x78\x00\xAF\x00\xBA\x01\x81\xF0\x7E\xB9\x7B\x89\x7B\x09\x7F\x26\x7A\x8F\x02\xA9\xBA\x2B\x06\x9A\xE0\x7F\xA1\x73\xC7\x7C\xDF\x78\x2E\x78\x2D\x00\xE6\x03\xB9\x01\x89\xF2\x7C\x29\x81\x77\x7F\xFB\x6E\x5D\x6D\xA5\xDA\x44\x00\xA0\x04\x87\xDD\x23\x2A\x80\xAE\x7E\xDE\x78\x53\x81\x1C\xF7\x3D\xFC\x45\x29\x7E\xA3\x72\xD6\x68\x90\x78\x0C\x74\x1F\x78\x54\xAD\x74\xB5\x10\x0A\x90\xB2\x22\x29\x80\x88\x78\x40\x7F\x1C\x80\x57\x00\xB0\x05\x84\xA1\x6A\x67\x6B\x05\x87\x7C\x7D\x26\x81\xBB\x56\x5F\x00\xD1\x01\x85\xCA\x05\x16\x8E\xD3\x6C\xA4\x7C\x25\x80\x0E\x7F\x66\x00\xFD\xF7\x52\xBA\x3F\x51\x05\x2B\x81\xC7\x7A\x69\x71\x21\x7F\x76\xF0\x32\xF9\x63\xEF\x68\xED\x61\x2A\x84\x56\x80\xB5\x81\xF3\x6F\x2D\x01\xD8\x65\x4A\xDC\x7A\x14\x8C\x2A\x84\x84\x7D\x10\x45\x42\x74\x35\xCD\x0D\xEF\x66\xB0\x4C\x44\x0C\x2D\x87\x5C\x82\x16\x7D\x91\x80\xF7\x00\xE4\x92\x42\x82\x76\x55\x7A\x08\x86\x8C\x7F\xA2\x78\x20\x7E\x36\x01\x9B\xBE\x1D\x0B\x8E\xE5\x70\x9C\x70\x5C\x81\x23\x78\x71\x81\x55\xF0\x43\xD5\x64\xF9\x72\xF3\x7E\xB4\x6F\xC9\x7C\x63\x52\x02\x32\x03\x03\x8D\xF9\x49\xDA\x73\xF2\x74\xE4\x7D\xCA\x7E\x2B\x5B\x51\x80\x65\xFC\x34\x01\x8A\x42\x7B\xF2\x78\xC6\x7E\x3D\x44\xBD\x81\x59\x37\xF6\x02\xC1\xBD\x47\x05\x8D\xB1\x62\x08\x7C\xCF\x7C\xB7\x74\x3F\x7F\xA3\xF2\x0E\xFE\x43\x9D\x4D\xAA\x75\x03\x80\x64\x83\x0F\x7B\x6A\x81\x63\x00\xD7\x05\xB4\xF8\x77\xD5\x51\x80\x7A\x5A\x83\x1D\x41\x90\x81\xA3\xF3\x69\x05\xAF\x03\x84\xF9\x58\x0C\x84\xE0\x7E\xCB\x81\x91\x7C\xC6\x02\xCB\xF7\x72\xDD\x70\x05\x84\xEB\x58\x1A\x80\x57\x76\x73\x81\x2F\x03\xE8\x05\xB8\x0B\x8E\x09\x82\x0E\x7C\xDB\x7E\x0F\x7C\x6D\x80\xB2\xA7\x0E\x02\x91\x0C\x89\xA8\x7E\xC8\x7B\xD1\x7C\xC8\x7F\x3F\x44\xE1\x00\xE3\xCC\x35\x0B\x89\x1A\x87\x2F\x81\x27\x80\x49\x81\xAB\x7C\x4E\x03\xD1\xC4\x6C\xFA\x71\x44\x4B\x35\x80\x68\x80\xCC\x80\x42\x80\x32\x03\xE5\x00\x83\xCD\x7F\x07\x04\xD0\x78\x12\x83\xCF\x80\x7F\x7E\x49\xF7\x42\x06\x9B\xDE\x64\x1A\x81\x2F\x84\x68\x78\x50\x69\xBC\x76\x02\x03\xB8\x06\xA0\xDD\x7A\x19\x82\x11\x85\x0B\x7D\xD8\x80\x1C\x47\xC5\xFE\x34\x72\x5B\x0B\x8F\x1B\x80\xD1\x7D\x16\x7C\xA5\x80\xAB\x80\xE7\x00\xEB\x06\x8D\x04\x8D\x19\x83\x2D\x84\x6B\x82\xC8\x80\xBE\x81\x48\x01\xB2\x87\x55\xFB\x75\x08\x87\x99\x30\x69\x82\xD9\x80\xA5\x81\x5E\x03\xF9\x05\x87\x72\x7D\xC1\x74\x0E\x7F\x23\x80\x90\x80\x51\x81\x7A\x03\xB6\xB5\x7C\x02\x84\x19\x84\xF1\x7A\x85\x7A\xC5\x7E\x6B\x45\xE0\xE9\x62\xAC\x4D\x02\x9A\x48\x63\x2F\x80\x74\x82\xE3\x81\x9C\x81\x4B\x03\xDA\xFD\x6F\x04\x86\x09\x87\x21\x68\xDE\x7D\x5E\x7F\xF4\x61\x7A\xF6\x28\x04\xAE\x0E\x97\x1C\x8D\x35\x85\x2A\x83\xD7\x80\x75\x78\x59\x01\x8F\xED\x57\xD9\x7F\xDA\x70\xF0\x7C\x98\x6F\x87\x71\x8B\x7C\x8F\x00\xCD\x80\x79\x0D\x8F\x1D\x8B\x37\x81\x76\x83\xCE\x81\xD9\x81\x41\xF9\x28\x06\xB2\xCF\x7F\x19\x69\x10\x78\x2A\x83\x81\x07\x8F\x81\x8D\x03\xBC\x07\x8F\x0E\x8E\x1E\x8D\x37\x85\xDD\x7D\xC5\x7E\x48\x7B\xDB\xE5\x4F\xC4\x6D\xE4\x75\xEC\x72\x25\x72\x48\x74\x7A\x73\x86\x30\x53\x03\xDC\xEA\x55\x0D\x80\xF5\x77\x35\x84\xB1\x7D\xEC\x61\xB3\x80\xC6\xF5\x25\xFE\x41\x8B\x47\xF9\x79\x88\x77\xF6\x6D\xB8\x7B\x2E\x75\x5B\xF9\x4B\xC2\x3E\x7A\x2F\x0C\x34\xCA\x03\x04\x83\xD0\x7E\x3A\x69\x55\x00\x64\xE2\x46\xC6\x75\x0D\x24\xF7\x77\xC7\x37\xC8\x40\xEE\x66\x37\x00\x6E\x03\xBF\x47\x46\xE3\x27\x05\x04\xEE\x76\x18\x01\xC8\x78\x0F\x04\xD9\xD6\x3E\x07\x94\xBC\x37\x19\x78\xEE\x07\x18\x58\x3D\x05\xF8\xD5\x0C\x04\x94\x30\x54\x0E\x81\xF1\x01\x80\x80\x5D\x80\xEC\x80\xF5\x01\xF1\xFD\x37\x07\x86\x3B\x20\x20\x80\x3C\x81\x40\x03\x02\x82\xE3\x01\xE5\x3D\x59\xC5\x6A\x15\x8B\xD4", -"\x43\x84\x82\x82\x7D\x39\x44\xB3\x08\x08\x08\x8A\x10\x83\xA2\x4C\x40\x86\x81\x81\x0A\x83\xE1\x57\x2B\x04\x86\x04\xB3\x21\x4E\x21\x80\x7D\x6A\x20\x47\x2C\x05\x08\x82\x93\x6B\x13\x08\xBA\xED\x35\x20\x82\x20\x82\x4B\x69\x79\x80\x1D\x82\x02\x89\x3C\x08\xA8\x1D\x38\x20\x8F\xBF\x32\x83\x81\x33\x46\x41\x81\x5B\x65\x7B\xB2\x48\x22\x38\x10\x8D\xB6\x7A\x58\x06\x7A\x76\x61\x29\x5F\x84\x5A\xB4\x1A\x5E\x74\x57\x32\x57\x53\x9B\x63\x5C\x7C\xAE\x7D\xB8\x65\x1B\xD6\x37\x99\x68\xE2\x26\xFA\x72\xD2\x71\x04\x6B\xC4\x7C\x7E\xE6\x3E\xA5\x6B\x09\x99\x67\x34\x68\x77\x18\x56\xA1\x72\x77\x71\x3C\x66\x07\x91\x15\x10\x6A\x65\x7E\x72\x04\xA4\x18\x16\x82\x0A\x51\x5A\x04\xDF\x93\x4C\xA5\x16\x10\x0F\x96\x6D\x4C\x7F\x17\x83\xAB\x78\x3F\x0A\x33\x04\x92\xAD\x23\x23\x86\x5D\x75\x8C\x81\x55\x1F\x44\x73\x7F\x04\xAC\x03\x81\x12\x82\x23\x8F\x68\x77\x6D\x6A\x21\x83\xCF\x21\xC0\xA5\x1B\xDB\x39\x6E\x35\x34\x7E\x2B\x6A\x90\x80\x2B\x37\x36\x82\x9C\xBF\x21\x04\xB9\x6E\x21\x02\x06\x28\x87\x24\x02\x25\x82\xB1\x36\x98\x04\xD0\xCE\x7C\x5E\x22\x15\x34\x27\x69\x0B\x00\xB3\x76\x5B\x77\xD9\x97\x44\xB4\x17\x1B\x39\xCC\x69\x50\x69\xF6\x2A\xAC\x76\x2D\x00\x74\xEF\x08\x05\x97\xBF\x7C\xFE\x45\xFA\x12\x95\x80\x50\x04\x56\x82\x97\xD5\x31\xAF\x33\x22\x12\x25\x8B\xCB\x74\xB5\x69\xEC\x2B\x60\x2F\xF1\x0F\x49\x8D\x17\x17\x32\x13\x8D\x5B\x23\x4E\x69\x09\x81\xD1\x7D\x6F\x02\xA9\xBA\x33\xFD\x77\xE6\x77\x7C\x78\x23\x80\x31\x81\xB4\x81\x83\xDA\x29\x05\x88\x11\x8B\x15\x87\x1B\x79\x54\x6C\xF5\x6E\xD0\x7D\x75\x03\xFF\x01\x05\xF8\x69\x26\x87\xBA\x2B\x99\x80\x57\x7F\x35\x7B\x92\x00\xDA\xF9\x50\x13\x9E\x91\x7E\x71\x7F\xF0\x60\xC8\x7B\x43\x6D\x11\xFE\x47\xBA\x53\xF8\x6A\x16\x85\xE1\x7D\x77\x7C\x96\x81\x8D\x2F\xDE\x04\xE5\xFB\x5D\xF2\x7C\x07\x8E\xC4\x7E\x1F\x81\x28\x7F\x28\x7E\xC3\xB3\x50\xF7\x4B\xAA\x7F\x15\x82\x48\x7D\xE7\x7A\xB7\x2C\xEC\x81\x06\x01\x71\x09\xA1\xF6\x75\xDC\x77\xDE\x7D\x1F\x83\xA9\x7F\x7B\x82\x0E\xF5\x4E\xEE\x4C\x0B\x86\xDF\x72\x20\x7B\x7C\x82\x3B\x67\xE8\x76\xF0\xCC\x43\xDA\x4D\x84\x22\x28\x81\x8A\x7B\x21\x7F\xFA\x80\x53\x7F\xED\x03\xA6\xFB\x61\xFD\x27\x03\x8D\x2C\x68\x9E\x80\x6C\x79\xFB\x7D\x62\x01\xAE\x01\x80\xFB\x69\x16\x8F\xB1\x76\x0A\x78\x32\x82\x0A\x07\x00\x05\x83\x02\x14\x14\x8C\xE4\x74\x35\x83\x62\x80\x9E\x7E\x84\x7B\xCE\xD4\x52\x09\xBD\x00\x8F\x24\x43\xC2\x7B\xF1\x79\xDF\x66\x14\x7E\xC9\x03\xA8\xDE\x7F\x28\x0B\x29\x87\x68\x7A\x62\x82\xC1\x7B\x97\x82\x54\xFE\x53\xFB\x5A\xAB\x68\x04\x8D\x06\x7C\xA5\x79\x36\x70\x40\x7E\x22\xCF\x41\xF8\x68\x14\x8A\x26\x8F\x51\x86\x86\x7D\x48\x83\xD1\x81\x0A\x01\xE2\xFC\x4C\x9E\x73\xE2\x75\xE6\x7A\xF7\x79\xD4\x77\x89\x82\x4D\x05\xC6\xC4\x59\xDE\x72\x1B\x81\xD0\x7D\x19\x7F\xE6\x7C\xE9\x3C\x4E\xBB\x6A\xA0\x64\x02\x8A\xC9\x7E\x8C\x77\x14\x81\x31\x6E\x20\x57\xEA\xF8\x4C\x0C\x3B\x14\x99\x2A\x83\x73\x7A\x74\x81\x42\x81\x93\x70\x95\xAA\x67\xEF\x45\xD5\x69\xBF\x7A\x31\x82\x91\x61\xCA\x80\xA7\x80\x9D\xDE\x01\xFD\x66\x77\x2C\x2A\x85\xC3\x7A\xAB\x80\x1B\x7D\x63\x81\x56\x00\xF4\x06\x83\xA4\x27\xF4\x7D\x51\x80\xAB\x81\x5F\x83\xB6\x82\x4F\xE1\x50\x0A\xB0\x15\x91\x6E\x63\xCA\x7F\xAC\x68\xDE\x80\xC3\x82\xF6\xFB\x4E\x0A\x8E\x13\x85\x07\x83\x4E\x81\x71\x83\x65\x5A\x5A\x7E\x59\xD4\x10\x0B\xA1\xF4\x72\xCA\x73\x59\x83\x2C\x81\x65\x83\x8D\x80\x90\xE9\x2A\xC2\x72\xC2\x6C\xDE\x5C\x5E\x3B\xAD\x83\x61\x83\xAF\x7B\x6E\x05\xA3\x06\x8A\xED\x59\x1A\x8E\x67\x42\xB3\x80\x33\x83\xFD\x7B\x4F\x05\xEF\x0A\x83\xD7\x72\xB3\x51\x10\x80\x2D\x83\x71\x7B\x81\x75\x95\x03\x9E\x0A\xA7\x16\x99\xC2\x7B\x3D\x81\x73\x80\xD3\x81\x43\x6E\x0F\xBF\x72\x01\x87\x0D\x9A\x2D\x81\x59\x86\xAF\x81\x44\x7E\xC0\x82\xAF\x00\xDE\x0A\xA3\xC1\x76\xE8\x7F\x39\x85\x9B\x80\x5B\x82\xD4\x82\x89\x05\xB2\x0B\xB8\xF1\x7E\x74\x6F\x37\x86\xFE\x48\x41\x80\xE6\x55\xC3\x05\xAE\x0B\x9F\x13\x8C\xE2\x74\x4F\x87\x93\x7E\x3D\x83\xB0\x7E\xA3\xC2\x1B\xEC\x69\xE2\x7B\x2B\x8E\x5C\x83\xB7\x80\x4A\x66\xCC\x81\xBE\x03\x9A\x07\xB0\x77\x7D\x86\x72\x18\x6D\xB9\x80\x71\x83\xCD\x82\x20\x05\x9D\x0B\xA2\x14\x87\xF8\x72\x58\x84\xC0\x7B\xA6\x7F\x73\x67\xD1\xF8\x57\x0A\x93\x8A\x3C\x29\x84\x70\x7E\xA7\x83\x2B\x7E\x8A\x81\xE1\x02\x96\x06\xA5\x05\x54\x1D\x85\x57\x80\x25\x83\xEA\x78\x13\x56\x6A\x05\xA7\x02\x3C\x17\x8D\xE5\x7E\x5F\x85\x60\x80\x80", -"\x83\x83\x81\x02\x06\xC9\x9D\x44\x18\x9E\xF7\x70\xD7\x06\x1F\x7C\x4D\x80\x80\x7C\x08\x06\xFC\x0A\x85\x17\x88\x2C\x89\xF0\x5B\xBE\x81\xA5\x81\xFA\x82\x55\xF6\x0A\xFE\x67\x0E\x83\x1C\x63\x2E\x00\x28\x80\x65\x7E\xFA\x6E\x0A\xF1\x6E\x13\x49\x18\x89\x08\x0B\x60\x87\xAD\x7E\xB7\x80\x95\x74\x06\x03\xA0\xE1\x48\x0C\x95\x90\x61\x3D\x87\x0D\x78\x37\x6F\x5A\x6B\x78\x05\xB9\xC4\x68\x11\x6B\x31\x81\x50\x87\xB9\x80\x6F\x82\xD8\x81\xBE\x05\xB2\x07\xA4\x25\x76\xB4\x62\x91\x7E\x6B\x74\x48\x78\x8C\x7F\x0E\x05\x83\xBF\x65\x0F\x88\xB6\x7B\x9E\x66\xB4\x83\x86\x82\xE8\x82\x1D\x06\x8A\x0B\xB3\x16\x90\xAC\x62\xFB\x6E\xBD\x7E\xB7\x7B\x1B\x69\x28\xFF\x5B\xD4\x5C\xE8\x55\x21\x5A\x26\x70\xBE\x7E\x04\x81\x7F\x00\x40\x6B\x7C\x03\x90\x11\x86\x64\x77\x12\x05\x0B\x02\x00\x82\xA4\x7F\x1F\x58\x74\xDE\x5E\xB7\x23\x19\x4E\xD7\x58\x07\x03\x0C\x82\xFD\x51\x66\x5C\x5F\x00\x34\xBD\x69\x03\x01\x19\x7C\xCE\x81\xC5\x34\x21\x82\xD6\x80\x17\xE3\x5C\x01\x18\x10\x8A\xA7\x05\xDE\x66\x13\x82\x75\x28\x1C\x04\xE5\x0C\x98\x08\x82\x0D\x83\x4D\x83\x99\x39\x6C\x81\xB7\x2F\xED\x03\x6A\xA1\x0B\x65\x64\xE0\x4A\x66\x87\x86\x80\xE3\x75\x02\x81\x33\x05\x93\xE8\x07\x1A\x81\x2D\x39\x68\x87\x16\x47\x2C\x05\x36\x83\x6F\x06\xA0\xDA\x31\x19\x93\x33\x8E\x68\x85\x35\x83\x11\x83\x48\x83\x38\xA1\x13\x0D\xBB\x35\x15\x34\x83\x99\x2B\x16\x06\x9D\x83\xC7\x35\x78\x06\xC0\xF8\x3A\x19\x85\x22\x85\x99\x68\xD2\x81\x08\x7F\x21\x4A\xA2\x06\xFA\x07\x2A\x43\x3D\x33\x85\xB5\x37\xCF\x83\x2D\x45\x40\x83\x09\x01\x60\x00\x2F\x8C\x63\x20\x82\xA4\x6F\xC1\x41\x18\x73\x91\x41\x24\xFB\x12\xF1\x06\x0A\x01\x76\x79\xB1\x7F\x52\x7D\xF4\x71\x31\x83\xB9\xED\x54\xE2\x6F\x90\x3E\x1F\x8C\x2E\x76\xC9\x02\xFF\x81\xCF\x78\xA4\xF1\x25\xD5\x7C\x18\x97\xD4\x10\x21\x7E\x6C\x78\xDC\x81\x49\x81\xC8\x05\xA3\x0A\xBC\xF7\x76\x03\x8E\xDF\x78\x48\x78\x74\x79\xF6\x6F\xD7\x04\x81\xD0\x7B\xC6\x6D\xE9\x64\x03\x82\xC7\x71\x54\x4D\x6A\x83\x3E\xF4\x5A\x07\x80\x19\x89\x2F\x8A\x73\x63\x5D\x80\x92\x7F\x6A\x82\xB8\xFB\x2C\x2B\x53\xC7\x70\x3B\x6E\x4E\x82\xBF\x82\xC0\x30\x31\x83\xC7\xFB\x6A\xF0\x49\xEF\x7B\x2A\x8A\xDF\x7B\x68\x82\x72\x82\x2C\x80\xF9\x04\xCD\x00\xBA\xDC\x6F\x02\x80\x2C\x81\x79\x59\xB1\x44\x02\x32\xF8\x06\x98\xF8\x48\xEF\x7D\xC6\x7A\xBC\x7D\xDF\x83\xDC\x81\x7F\x83\xEC\x04\xD9\x00\xAA\x14\x41\x90\x7A\x49\x78\x27\x2F\x7A\x3E\x71\x2D\x29\x05\xDD\x9A\x28\x1B\x96\xC1\x7D\x4C\x81\x9C\x82\xB5\x81\xEF\x82\x95\x00\x92\xF9\x5C\x14\x8A\x1E\x8D\x10\x31\xE1\x83\xDF\x7A\x47\x7C\xA4\x02\x90\xF1\x49\xF8\x6C\xC6\x73\x89\x7F\x73\x62\xA0\x75\xED\x5E\xD2\x06\x87\x34\x5B\x1C\x98\xC2\x77\x5E\x85\x77\x81\x59\x5E\xC4\x81\x2C\x00\xDC\x0D\x98\x06\x91\x2B\x8B\x29\x86\x5D\x80\xBC\x32\x78\x81\x6C\xE1\x4E\xFC\x79\x14\x85\xF3\x6A\x9A\x4B\xE6\x81\xF9\x6F\x9A\x83\xBD\x05\xEC\x0D\x82\x19\x87\xE4\x6B\x2F\x84\xA9\x65\xE8\x7B\x22\x83\x86\xE0\x2D\x83\x67\x15\x9B\xF0\x5B\x63\x82\xE6\x81\x0F\x7A\x8E\x83\xB0\x05\xF2\x0B\x92\x19\x93\x2E\x81\xFB\x67\xA1\x7A\xF0\x62\xDC\x7B\x55\x05\xEE\x13\x40\x19\x05\x3A\x87\x75\x84\xE6\x82\x5E\x68\xF4\x82\x37\x07\xBF\x07\xB3\x54\x7C\xE1\x7E\x7C\x7A\x7A\x82\x2D\x81\x8E\x81\x26\xAC\x63\x0E\xBE\x73\x26\x3A\x8E\x75\x7F\xC7\x81\xF3\x81\x20\x83\xCF\x03\xFA\x05\x84\xD5\x68\x61\x76\x54\x7F\xCD\x7E\x1F\x7E\xD2\x7B\x65\xFE\x7A\x0A\x81\x16\x56\x3A\x8E\xD0\x7E\xDA\x81\xE1\x81\x3A\x7E\x87\x03\xEA\x0E\x99\x0B\x9F\x05\x8B\x2B\x78\x5C\x2D\xC6\x82\xC4\x27\x74\x07\xA1\xE7\x76\x1D\x89\x2D\x80\x39\x84\x74\x82\xC0\x54\x0A\x7C\x82\xB8\x18\x16\x65\x1C\x91\x3C\x82\x73\x78\xCA\x83\x33\x70\xBC\x83\xDD\x03\xF8\x01\x98\x16\x9F\x16\x78\x70\x84\xF3\x83\xC9\x6E\x0E\x83\x9F\x07\xCA\x0E\xB9\x1D\x9B\x1C\x88\x95\x7B\xD5\x41\xA7\x7E\x8E\x7F\xE7\x06\xE5\x0E\x87\x1D\x87\x3B\x86\x73\x84\xA4\x6E\x77\x3B\x51\x7F\x60\x94\x64\x0E\x85\x1E\x89\x37\x87\x6D\x81\x68\x82\xC3\x83\xAE\x82\x2D\x07\xC0\x32\x6D\x1E\x9A\x04\x8F\x42\x66\x22\x69\x86\x80\xC2\x83\xFC\xFC\x22\xF2\x7D\x1E\x87\x1B\x8C\x0C\x84\x2C\x82\x55\x7D\x85\x80\x31\xF3\x6A\xD2\x5F\x6B\x2F\x3C\x87\x8E\x2E\xF4\x81\x91\x70\xD4\x83\x12\xFF\x21\x0F\xBA\x2B\x64\xC4\x79\x7B\x83\xEE\x82\xEC\x83\xBA\x83\x48\x07\xEB\x0D\xA9\x1D\x8A\x2F\x8C\x11\x80\xB3\x7F\x40\x81\xCB\x31\x05\x01\xD3\x0F\x88\x1F\x92\xE3\x77\x79\x7B\xDF\x83\x5F\x82\xAE\x82\xC8", -"\x02\xA0\x0C\x8C\xDE\x7C\x71\x0B\x38\x82\xFD\x80\x7E\x4C\xEB\x83\xB2\xBF\x46\x0B\x86\x0E\x99\x36\x84\x5F\x80\xE2\x81\x49\x82\x5D\x7C\xB3\xE9\x14\x07\xB6\x1B\x85\x3D\x8F\x7D\x82\xF2\x81\xF8\x83\xBB\x83\xAA\x07\xDA\x0F\xAC\x1E\x95\x2E\x8A\xE9\x48\x59\x69\x71\x5A\xB4\x77\xF7\x06\xF8\x0F\xBC\x74\x78\xE5\x5C\x7C\x81\x23\x83\x67\x83\xB2\x80\xD4\xFD\x01\x87\x6C\xC3\x60\x1F\x8F\x9D\x73\x8A\x50\x19\x63\x1C\x83\xE9\xF8\x0E\x06\x8E\x63\x7A\x3D\x89\x7C\x87\xA1\x7E\xFB\x83\xE3\x82\xF0\x07\x81\x0B\xBE\x1F\x8F\x50\x40\x13\x86\xEF\x80\xB3\x67\x7D\x78\x05\xE2\x09\xE2\x79\x0E\x8D\xFB\x61\x81\x85\x00\x85\xE7\x83\xC9\x83\xD1\x05\xAA\x0B\x8B\x16\x9F\x77\x65\x63\x81\x91\x63\xC8\x61\x4D\x62\x53\x07\x9F\x98\x62\x20\x8B\xCE\x64\x82\x84\xFD\x83\x2C\x7D\xC3\x83\xFF\xFC\x29\x10\x89\x17\x81\x3E\x88\xEB\x4A\x29\x82\x75\x59\x55\x7B\x4D\x01\xA7\x0C\x8A\x19\x96\x1E\x83\x97\x65\x08\x85\xBE\x83\x39\x7E\x48\x08\xF1\x06\xBF\x1E\x91\x3F\x8B\x82\x86\xD9\x69\x0F\x85\x0B\x69\xD8\xFD\x40\x10\x87\x0F\x92\x83\x3F\x15\x85\xC3\x46\x15\x84\x85\x83\xFA\x06\x8C\x0E\xBC\x1B\x8B\x39\x80\x8E\x7D\x0B\x86\x7D\x82\xF8\x81\xED\xFD\x6A\x02\x9D\x19\x94\x1F\x82\x6F\x68\xA2\x6F\x96\x82\x56\x63\x2D\xF1\x1F\x74\x41\xB7\x77\xD6\x29\x0C\x38\x88\x80\xB2\x82\x3F\x76\x6E\x5E\x64\x00\x27\x19\x98\xC9\x2B\xE3\x04\x34\x65\x25\x33\xAA\x36\x23\x83\x0E\x2B\x4F\x25\x25\x9F\x6C\xA5\x26\x8C\x2C\xAC\x10\x0B\x43\x88\x08\xED\xD0\x0A\x22\x93\x7B\x4C\x9B\x6B\xDF\x2B\xA7\x1D\x9E\x4B\x97\xF1\x63\x00\x3C\x19\x87\x91\x66\x6B\x87\x19\x48\xAE\x82\xBD\x50\x83\x06\xB1\xFE\x4D\x06\x95\xB9\x35\x2E\x58\x21\x05\x77\x24\x4D\x02\x15\x01\x4F\x92\x0B\x1A\x83\x91\x34\xF7\x75\xAA\x37\x80\x81\xB6\x80\xAE\x06\x99\x05\x9B\xE1\x25\x45\x8B\x82\x07\x14\x84\x3F\x25\xA7\x24\x6A\x64\x0B\xD7\x0C\x22\x84\xA6\x3E\x88\x85\x15\x85\xA7\x82\x42\x83\xA0\x06\x91\xD6\x34\x22\x9D\x57\x06\x8B\x81\x15\x87\xDC\x47\x5C\x84\xF7\x6B\x15\x11\xAF\x43\x37\x44\x8B\x2E\x49\x13\x84\xAB\x82\xF2\x80\xD9\x01\xBB\x0E\xA0\xB4\x23\x46\x8C\xC5\x05\x18\x86\xCA\x45\x9A\x3B\x7A\x0A\x3E\x7D\x5D\x22\x83\x47\x2F\x87\x87\x50\x7C\xC2\x41\x33\x00\xA1\x08\xEF\x09\xBE\x19\x5A\x12\x87\xFB\x75\x49\x80\x21\x24\x55\x76\x57\x0B\x70\x8D\x24\x08\x03\x25\x8B\x8A\x81\xF8\x14\xDD\x77\x2C\x1F\xF3\x01\x83\x0F\x99\x09\x93\xD2\x2B\x25\x81\x2D\x14\x3A\x85\x86\x06\xEA\x08\xCA\x02\x23\x12\x93\x45\x00\x8F\x83\xEA\x6D\x5A\x15\x3E\x81\x23\x2C\x7F\x04\x9C\x11\x89\x13\x8A\xB0\x4D\x44\x83\x2F\x84\x92\x83\x59\xD4\x64\x11\x8E\xE6\x76\x47\x8D\x25\x81\x1D\x86\x27\x25\x7D\x84\x9E\x04\x8F\x09\xBD\x16\x20\x48\x81\x62\x1A\x20\x85\x14\x37\x40\x81\x88\xA5\x64\x52\x65\xAA\x72\x3B\x89\x10\x06\x0F\x87\x16\x7E\xC1\x7A\xAF\x05\xBB\xF2\x5A\x1D\x92\x2E\x8A\x03\x87\x52\x80\x0F\x81\x57\x83\x3C\x07\xED\x05\x8D\xDC\x63\x83\x7B\x4D\x81\x89\x73\x8F\x04\x8F\x84\x5A\xFD\x5C\xF8\x72\x13\x9D\xEA\x7D\x5D\x87\xAB\x7C\xC8\x82\x30\x7A\xE5\x04\xFA\x08\xB1\x02\x9F\x36\x8A\xCA\x62\x3A\x78\xC9\x7A\x7A\x83\xB2\x02\xA2\xC7\x6F\x24\x93\xE1\x7D\x55\x68\xBE\x82\x64\x82\x8F\x83\x31\x03\xB7\x12\xB3\x0C\x9D\xA3\x7C\x04\x82\x8E\x68\x88\x7E\x5F\x81\x3B\xF7\x50\x00\xBE\x13\x83\xEC\x63\x94\x87\xA3\x7C\x0D\x7F\x27\x83\x38\x08\xD1\x0C\xA4\x24\x84\x29\x8A\xE2\x7C\x7C\x7C\x26\x7B\x66\x81\x0D\x05\xCB\x31\x49\xC1\x70\xFD\x44\x40\x30\x26\x87\x78\x7F\xAD\x7E\x33\x09\xE0\x09\xB5\x24\x93\x04\x8A\x94\x82\x6D\x81\x8D\x7F\xBA\x32\xF8\x76\x5D\x0F\x9D\x24\x84\x4A\x81\x6A\x78\x0B\x87\x09\x85\xFD\x83\x4A\x08\xDA\x0D\xAE\x21\x92\x53\x56\x4C\x7F\x0D\x83\x7A\x6D\xAA\x84\xD5\xFC\x39\xF2\x61\x24\x8B\xE7\x71\x5B\x82\x07\x84\x49\x57\x9C\x84\x95\xCF\x67\x09\xA9\x81\x74\xEF\x5D\xAA\x73\xFE\x81\x91\x78\x34\x62\x8D\x06\x00\x13\xA8\xF3\x70\xCA\x76\x94\x82\xFF\x80\xE2\x82\xFE\x83\x1F\x06\xFB\x12\xA9\x24\x8D\xBE\x79\x08\x86\xA8\x83\x1F\x7E\x2E\x7F\x71\x07\xA9\xBA\x26\x25\x8C\xEE\x7C\xBD\x7D\xA2\x82\xF7\x7D\x8B\x82\xB7\xFE\x30\x0A\xAA\xF7\x78\x83\x7A\x30\x80\x13\x81\x92\x83\x5B\x6B\x0D\x03\xC3\x0E\x87\x4C\x52\x4C\x8F\x91\x85\xF8\x7B\x60\x84\x91\x7E\x48\x09\xE8\x06\xAD\x25\x9B\x09\x8B\xC3\x7C\xDF\x7F\x46\x6A\x1B\x83\x8C\x00\xAA\x06\xA8\x15\x83\x42\x8F\x10\x4C\x36\x85\x4C\x84\x90\x84\xDB\x05\xD8\xF9\x79\x26\x8D\x3E\x87\x81\x87\xF9\x83\xDA\x82\x7E\x7F\xB3\x00\x94\x0C\x94", -"\xC2\x60\x41\x86\x4B\x58\x13\x7B\xF9\x81\x49\x31\xA3\x09\x9F\xF1\x49\xE4\x66\x4D\x81\xCC\x78\x35\x86\xB2\x7E\xD5\x84\x7A\xFE\x4F\xE0\x7A\xCA\x6F\x20\x63\xF1\x72\x60\x31\x76\x84\xA3\x7E\xBE\xF4\x03\x0A\xB9\xF6\x7E\x4E\x88\xEF\x78\x3C\x85\xAE\x7E\xA9\x5F\x3D\x03\xC7\xDF\x5B\x7C\x27\x4F\x8A\xC8\x7F\xA0\x78\x4B\x82\xF5\x81\x2E\x05\xD6\x06\xAE\x27\x8C\xF6\x7D\x85\x45\xD2\x7F\x20\x60\xE3\x84\x67\x09\xB2\x12\xAA\x27\x8F\xEE\x7C\x9E\x87\xE3\x7F\x7E\x84\x7D\x7F\xEF\x03\xB5\x0B\x86\xD7\x63\x2D\x8F\x59\x78\x21\x86\x79\x84\xBA\x84\x31\xF7\x27\x0F\x9E\x1E\x99\x3E\x8B\xB8\x5C\xB5\x82\x86\x6C\x00\x85\xA4\x09\xBF\xF9\x5C\x27\x97\xE9\x75\xA0\x83\xA9\x7D\x46\x83\xDE\x7E\xEB\xFD\x66\x0F\xAA\x03\x9A\xBA\x22\x97\x82\x70\x0C\x84\x85\xAE\x7B\x06\x08\xB4\x0F\x89\x1D\x83\x3F\x8F\x5B\x87\x1A\x78\x76\x6A\xE9\x83\xD7\x09\x8F\x14\x96\x25\x85\x4A\x87\x9B\x84\xB3\x83\x72\x84\x0B\x84\xBB\x09\xD7\x02\xA7\xE2\x61\x0C\x7A\x56\x59\x40\x4C\x86\x84\xED\x84\x35\xFD\x1B\x14\x89\xF5\x7D\x50\x8A\xD8\x7F\x43\x85\xA3\x7F\x10\x85\xCF\xA3\x2A\xFA\x65\x93\x67\xDD\x24\x9F\x83\x95\x7F\x22\x7F\x9E\x82\x2D\x05\xBF\x0A\xBA\x27\x81\x2A\x8B\x9A\x82\xEA\x5D\x4F\x7F\x12\x85\xDC\x2F\x27\x14\x97\xE1\x73\x3D\x8D\xD3\x68\xED\x82\xED\x83\x29\x83\xC8\xE5\x56\xFD\x72\x35\x7F\x51\x88\x9E\x82\xAB\x7B\x7D\x84\x51\x7C\x44\x0A\xA4\xFB\x46\x29\x87\xC1\x79\xEA\x7E\xFC\x81\x90\x7B\x07\x84\x91\x09\xA7\x02\x0D\x29\x9C\x4D\x7E\xD6\x78\x6F\x7A\xAD\x80\x8D\x7B\xB8\x02\x9D\xF8\x7A\x0A\x83\x51\x7C\x8F\x78\x75\x7B\x3B\x78\xD5\x79\x09\xF1\x68\xFD\x41\x86\x44\x53\x85\x9F\x87\xA8\x7E\x90\x84\xC4\x7E\x69\x0A\xBB\xFB\x6B\x29\x9F\x07\x8B\xEF\x7A\x67\x76\x4D\x53\x85\x7F\x03\xE2\x30\x10\xBF\xAC\x72\x41\x8E\x9E\x41\x4E\x87\x5C\x85\x19\x85\x75\x09\xED\x0F\xAA\x21\x8F\x3F\x8B\x85\x82\x05\x84\x13\x84\x86\x54\x11\xF9\x25\x01\xAA\xF6\x66\x31\x8F\x2C\x80\xC5\x83\x50\x81\x41\x85\x72\x0A\xDA\x14\x89\x81\x66\x3B\x8D\xA5\x85\xF6\x83\x46\x79\xA3\x6F\xA1\x0A\xE4\x0A\x9F\xD8\x76\x11\x78\x63\x82\x0A\x84\x6C\x84\xC2\x6F\x90\x09\xA2\x13\xAA\x2A\x85\x41\x7C\xAA\x84\x02\x86\x97\x85\x57\x85\xC0\x03\xA1\xBF\x16\xF7\x76\x1A\x63\x94\x7D\x2B\x81\xFA\x61\xED\x7E\x72\xFA\x65\x12\xBB\x2A\x95\xC1\x7D\xAB\x85\x2F\x7B\xAF\x85\xDA\x7B\x7E\x03\xA8\xFA\x66\x08\x52\x43\x88\xA5\x74\x0E\x86\xED\x6E\xB7\x80\xE2\xF6\x70\x02\x8D\x5E\x6F\x20\x07\x6A\x85\x1B\x84\xE8\x68\xCE\x69\x6A\x00\x00\xC5\x42\x8A\x6B\x1C\x74\xF7\x71\xC1\x37\xC8\x40\xC3\x79\x30\x00\x3B\x11\x97\xB7\x26\xE3\x20\x51\x2E\x6A\x42\xB9\x85\x36\x34\xE8\x0A\xCE\x08\xB1\x28\x26\xE3\x2C\x06\x04\xEE\x74\x1C\x01\xC8\x78\xF7\x0A\xB9\xF5\x25\x65\x67\x81\x07\x96\x6F\x39\x52\x19\x2F\x35\x63\x0F\x86\x6F\x00\x11\xC6\x62\x58\x8A\xAF\x80\xAB\x64\x68\x63\x75\x49\xD3\xEB\x57\xB5\x08\x1F\x04\x58\x8E\xAD\x84\x04\x80\x7F\x77\x1B\x25\x54\x04\xDD\x04\xB5\x11\x97\x4A\x17\x47\x80\x38\x65\x1E\x83\xC4\x84\xB0\x41\x5D\x08\x88\xEA\x7B\x5F\x10\xF2\x45\x1F\x87\x25\x83\x46\x82\x42\xEF\x09\x05\x85\x13\x93\x34\x7F\x57\x54\x93\x82\xAF\x68\x8F\x85\xA0\x04\x9A\xCD\x6E\x11\x90\x11\x8A\x51\x19\xFD\x71\xA9\x74\x4B\x85\x06\x01\x5D\x15\xBA\xF3\x65\xBA\x76\x84\x85\x9F\x7D\x16\x84\x6C\x83\x79\x09\xFD\x0F\x9E\xF0\x7A\x39\x83\x8A\x83\x33\x87\x18\x7A\x6B\x82\x72\xEA\x03\xFC\x70\xE1\x7A\x26\x8F\xB2\x81\xA5\x2E\xCC\x85\xE2\x7D\x71\xFC\x57\x10\x9A\x2A\x89\x39\x8A\x8C\x7C\x0D\x87\x7E\x7F\x43\x66\x32\x05\xA8\x12\xB9\xF1\x78\x40\x73\x72\x79\x08\x81\x4B\x57\x21\x80\xE8\xC9\x2B\xFC\x3F\x28\x07\x5A\x85\x71\x7E\xEF\x78\x3D\x7D\xCD\x74\x4C\x0B\xDE\xF1\x4E\x2D\x9E\x37\x8F\xA9\x87\xFF\x81\x53\x84\x0D\x63\x73\xD4\x3C\xE0\x7C\x13\x93\xDE\x7A\xC0\x3B\x6B\x87\x19\x7C\x90\x7C\x25\x08\x86\x0F\xB7\x25\x97\x4C\x89\xB3\x81\x33\x85\xD9\x85\xAE\x84\x72\xAD\x0B\x0A\x9A\x28\x6E\x16\x8F\x9A\x85\x43\x65\xB4\x81\x26\x83\x56\x9A\x6F\x16\xA4\x85\x7B\x3D\x88\x75\x82\x24\x87\x8D\x85\x67\x82\x39\x0A\x96\x0B\xB4\x0C\x9A\x16\x8E\xA3\x81\x70\x87\x47\x7D\xC1\x85\x71\x0B\xBC\x0F\xB7\x2C\x9E\x3D\x83\xB6\x87\xE1\x83\xDD\x84\x18\x78\xE4\x02\xFE\x12\xB5\x47\x4E\x5B\x8F\xB8\x84\x87\x78\xE1\x85\x66\x85\x4E\xE1\x5A\x12\x86\x26\x8B\x06\x6C\xB3\x84\x85\x83\xBB\x83\x9F\x85\x8A\xC7\x4B\xFC\x55\x53\x6E\x4F\x4D\x9D\x04\x73\x87\x22\x7C\xB8\x85\x35\x0B\xCA\x0F\x93\x2E\x95\x40\x88", -"\xB8\x87\xA0\x80\x78\x83\xA1\x82\x2A\xF5\x1D\x13\x8F\xDF\x6D\xA9\x7D\x4E\x6D\x52\x86\xD1\x84\xC1\x85\x9E\x0B\x91\x17\x85\x2E\x84\x4C\x83\x92\x83\x74\x85\xB0\x7F\xB8\x56\xDD\xFF\x10\xEA\x72\xC9\x6C\x5D\x8F\xBB\x85\x73\x86\x7A\x7A\xCA\x84\x35\x0A\xF1\x0B\x87\x2E\x94\x2C\x89\xB8\x80\xB4\x81\x6F\x85\xE0\x81\x03\xB7\x08\xE5\x7C\xF1\x6E\x41\x8B\x31\x87\xED\x80\xA3\x78\xE6\x85\xA7\x5B\x5C\x16\x98\xA6\x76\xB8\x7F\xB5\x85\x3D\x75\xD8\x85\x86\x83\x95\x0B\xC0\x0F\xBB\x29\x9F\xEF\x75\xDD\x79\x50\x05\x74\x85\x98\x80\x76\x05\x9C\x06\xA5\x78\x62\x3C\x85\xF0\x6A\x60\x32\xF8\x85\x1A\x7B\x99\xE9\x65\x17\xB3\xCA\x6F\x31\x85\x2B\x79\xC6\x83\xAD\x79\x19\x83\x1A\xC8\x0C\x0F\xA4\x27\x90\xEA\x6E\xBA\x84\xA1\x7E\x11\x7C\x34\x84\x76\x09\x9B\x15\xA8\x20\x9D\x54\x8B\x84\x83\x7D\x84\xC8\x55\xF8\x84\x34\x08\x84\xC8\x37\x2F\x92\xC7\x7A\xC2\x6F\xC6\x78\x69\x70\xFE\x85\x28\xF6\x7E\x17\x94\xD2\x60\x60\x88\x0A\x79\x05\x7E\xD6\x84\xC7\x85\xAF\x0B\x90\x17\xB1\x2E\x86\x41\x8A\xC0\x80\x2F\x84\x03\x86\xBD\x84\x97\x0B\xEF\x10\x8A\x28\x84\x61\x5F\x7A\x82\xA7\x80\x08\x86\x03\x86\x8C\xF8\x27\x0E\x9C\xE3\x67\x5F\x8B\x86\x81\x4F\x86\x82\x7E\x3B\x3B\x16\x0A\xE6\x25\x45\x30\x93\x59\x8D\xD0\x7A\x78\x84\xE8\x84\xAA\x80\x2C\x0A\xCB\x0E\xA0\x0D\x92\x56\x82\x36\x80\xB7\x80\xD1\x83\x17\x86\x3C\x0C\x87\x18\xB2\x30\x99\xE0\x77\xA7\x87\x1E\x7E\x06\x86\x15\x7B\x1C\x0C\xD2\x78\x6F\x28\x8A\x58\x74\xC0\x80\x89\x84\xD2\x85\x58\x7C\x23\x0C\xF2\x16\xA5\x30\x94\x5B\x87\xC2\x82\x67\x86\x03\x86\x8A\x51\xDC\x07\x88\xF5\x3B\x30\x97\x62\x8B\xCF\x79\x8B\x86\xE4\x85\xB9\x85\x49\x08\xDD\x18\xB6\x2D\x9F\x62\x83\x15\x76\x4D\x86\xB6\x6E\xC1\x81\x8D\x0B\xC9\x2D\x00\x2F\x8F\x5E\x8A\xC4\x79\x39\x85\xC7\x83\xB5\x84\xE2\x04\xD5\x17\x98\x20\x9C\xE9\x72\x5E\x86\x61\x4F\x18\x87\xAE\x85\xDA\xF8\x4B\x18\x8B\x1C\x94\x61\x8C\xA9\x81\x7D\x84\x17\x85\x14\x86\x7C\x09\xF9\xF4\x68\xF1\x4D\x2F\x8C\x7F\x47\x8F\x87\xF8\x84\xAF\x85\x16\x0C\xA8\xD2\x58\x30\x82\xBC\x7F\xC4\x84\xC7\x79\x14\x86\x19\x6E\x93\xF3\x22\x0B\x8D\x14\x4F\x9C\x45\x9A\x7E\x91\x84\xFE\x84\xF2\x85\x91\x0C\xA6\xEC\x53\x32\x91\xEB\x75\xC9\x84\xF0\x79\x8F\x7B\xBA\x7E\x7D\x0A\xF7\xFA\x69\xCE\x77\x48\x6B\x3A\x82\x1E\x7A\x09\x57\xD6\x85\x56\x0C\x80\x19\x97\xF0\x62\x64\x89\x86\x84\x90\x87\x02\x86\x43\x86\x9E\x0A\xEC\x18\x89\xFC\x6E\x2D\x7F\xD8\x7C\x03\x87\x29\x6F\xA5\x6F\x76\xF6\x71\xFD\x76\x2A\x99\xB3\x70\xBE\x83\xE3\x2F\x04\x86\xB6\x7E\xF3\xF8\x21\x19\xB5\xE3\x6D\x62\x8B\xC1\x7E\x86\x84\xCB\x82\x5D\x86\x4D\x08\xB1\x15\xA9\xF6\x7F\x09\x8A\x3D\x7C\x3A\x84\xF2\x80\x21\x7B\x7F\xFA\x76\x17\xB3\x31\x96\xC2\x7B\xAA\x84\x4B\x86\xAF\x84\x57\x85\xD0\x0A\xDE\x07\xA2\x18\x9E\x65\x80\x85\x85\x56\x85\xA9\x85\x29\x84\xC5\x0C\x8D\xC2\x07\x33\x8A\xE5\x74\xA7\x87\x49\x85\x7F\x83\x28\x85\xFF\x05\xC0\x0A\x95\x0C\x82\x2A\x8D\xA8\x82\x58\x86\x36\x6E\x62\x85\x5C\x01\xD9\xFB\x47\x2B\x85\x43\x82\x27\x46\x93\x84\x05\x86\xD1\x70\xCA\x0C\xE0\x16\x8C\x33\x85\x15\x85\xCA\x81\x1F\x7F\x29\x86\x33\x71\x99\x0C\xED\xD1\x72\x0F\x98\x30\x69\xF3\x66\x6D\x76\xCA\x7F\x39\x84\x88\x94\x21\xA8\x60\xC6\x69\x08\x09\xAF\x81\x5F\x68\xC2\x41\x70\x85\xAA\xEE\x35\xAC\x53\x98\x11\x4F\x03\x98\x3D\x11\x87\xB8\x85\xDE\x7C\xE5\x0A\xE4\xDE\x52\x14\x78\x47\x84\xDA\x10\x9D\x3C\x97\x25\x59\x04\xE8\x0A\xEA\x15\xA3\xBC\x2C\x57\x81\xD2\x85\xFF\x74\x2E\x83\xF3\x04\x25\x0D\xB0\xEF\x27\x34\x91\x9D\x78\xC9\x3A\x5E\x84\x69\x2C\x7A\x85\xF6\x0A\xA2\x1A\x8C\x38\x09\x47\x81\xD3\x81\xFE\x43\x4C\x86\x8A\x86\xDA\x76\x7B\x15\x83\xA3\x1D\x57\x86\x27\x57\x5F\x84\xDD\x76\x86\x85\xB3\xEF\x08\xAC\x5B\x34\x9D\x69\x81\xF3\x4F\xA7\x86\x87\x7D\xA0\x86\x06\x0B\xF5\xAB\x3D\x5C\x42\x6D\x7A\x59\x41\x0E\x03\x20\x85\x19\x60\x56\x9B\x74\xDE\x49\xCD\x23\x19\x48\x39\x51\x46\x25\xF9\x69\xF6\x35\x66\x5C\x72\x00\x34\xBD\x74\x03\x01\x19\x7C\xAC\x86\x8B\x3F\x54\x83\x27\x9D\x44\xDD\x60\x00\x88\x6B\x7F\x6C\x84\x65\x73\x31\x83\x72\x83\xD5\xDB\x4F\x1A\x9E\x63\x59\xC3\x71\xC2\x81\x78\x86\x19\x87\xE1\x85\xB8\x09\xF8\x18\x9F\x1C\x96\x5D\x8E\x02\x4E\xDD\x82\x0F\x81\x9E\x83\x2B\x09\x84\xFC\x65\xAA\x6D\x52\x0F\xA3\x00\xA9\x85\xD3\x52\xBA\x86\x30\x0C\xB0\x17\x8A\x2D\x87\x42\x88\xC6\x82\x0B\x84\x2E\x87\x06\x86\xA8\x02\xA5\x17\x85\x1A\x87\x5D\x8C\x93\x87\x03\x79", -"\xD5\x84\x5B\x60\x40\x09\xD9\x16\xB1\x35\x83\x08\x06\xD8\x81\x5A\x54\x62\x87\x24\x86\x31\x0C\xFA\x17\x98\xDC\x63\x68\x8A\x72\x86\x99\x85\x1B\x84\x44\x86\xB9\xF8\x67\x16\x88\x80\x63\x38\x89\x63\x84\xE7\x78\xB0\x6D\x65\x7E\x16\x8B\x7D\x1B\x5F\x36\x84\x63\x84\xB3\x83\xB1\x86\xCD\x85\xC6\x86\x38\x0B\xEA\x18\xB8\x1C\x9B\x63\x8C\x94\x81\x6F\x84\x08\x70\x86\x82\x15\x07\xD1\xB7\x17\x1C\x9E\x22\x75\xD8\x82\xB6\x87\x34\x7F\xE1\x7B\xB5\x09\x85\xF8\x69\x25\x9C\x2E\x85\x50\x85\x9E\x80\x5F\x86\x6C\x81\xE2\xC1\x0C\x17\xBB\xB2\x65\x6E\x83\xD7\x87\xB8\x86\x02\x7D\xC9\x84\x75\x0C\xCB\x1B\x8A\x27\x9A\x6B\x89\x94\x87\xB9\x87\x52\x85\x71\x81\x2F\x07\xC3\x87\x70\x35\x80\xC2\x70\xD4\x76\xB8\x86\x39\x7E\x19\x7E\x98\x0A\x91\x14\x97\x1F\x93\x50\x81\xEE\x7A\x5D\x81\xED\x7C\xC5\x84\x48\xF4\x0C\x13\x9F\xD3\x7F\x14\x82\x2F\x80\x8D\x63\x60\x47\xD8\x86\xD5\x0D\xE7\x1B\x94\xF3\x78\x6E\x86\xCD\x7E\x8E\x85\xD6\x83\xE9\x85\x9E\x05\xFA\x18\x8E\x27\x97\x5E\x86\xCF\x84\x0D\x79\x85\x5E\xCF\x84\x80\x07\x8C\x06\xA4\xA2\x6A\xC7\x74\xD8\x83\x83\x72\x79\x86\x01\x7E\xE7\xFC\x49\x1B\xA9\xF3\x71\x5E\x87\x94\x84\xBB\x86\x6E\x84\xEF\x86\x6E\x09\x96\x01\x93\x15\x8B\x18\x88\x0A\x83\x13\x82\x09\x57\xFB\x86\x11\x06\x0F\x1C\x87\xF1\x68\x6F\x81\x98\x80\xA4\x7C\x85\x86\xCB\x84\x69\x0C\x8F\x1B\xA8\x30\x90\x66\x8B\x93\x80\x7B\x87\x6F\x85\x45\x80\x7F\xFE\x70\x0E\xB6\x37\x89\xE9\x2D\xD9\x85\x47\x57\x6C\x86\x59\x86\x49\x0B\x88\x18\x8B\x2D\x84\x6D\x8D\xB4\x86\xB4\x87\xD3\x84\xD4\x86\x53\x0B\xA2\x9B\x67\x0C\x80\x4E\x81\xE3\x83\x7E\x84\x2E\x80\x8D\x86\x1B\x5F\x35\x1C\x90\xBC\x57\x71\x8F\xC8\x81\x90\x86\x68\x86\xC0\x7B\xA3\x0C\xB7\x05\x85\x34\x93\xEB\x77\xD0\x83\xE2\x48\x61\x83\x16\x7D\xD4\x0D\xDA\x39\x4C\x39\x9F\x64\x80\xC9\x85\x4E\x84\x24\x7A\x82\x81\x92\xF4\x53\x1C\xBC\xF8\x75\x72\x8D\x2D\x48\x82\x84\x2E\x83\x2C\x87\x8B\x98\x5B\x1C\xBF\x33\x8B\x4F\x7F\xE4\x80\xE5\x80\x8F\x86\xB1\x85\x3E\x0E\xE4\x16\xAC\x38\x85\x1A\x8E\x34\x37\xBF\x66\x5C\x86\x2D\x87\xD6\x0D\xC1\xD1\x65\x38\x97\x4A\x85\x99\x80\xFB\x81\x7B\x87\xD5\x83\x43\x0C\xF7\x0B\xBC\x47\x6D\x61\x86\x86\x86\xC1\x85\x7E\x86\x08\x87\x24\x0E\xFC\x1B\x82\x26\x9E\x6F\x86\xB8\x86\xC2\x84\x73\x84\x01\x87\x9A\x2C\x39\x18\xA6\xA4\x28\x73\x87\xD8\x81\xCF\x85\x88\x79\xF4\x86\x28\x0A\xB7\x10\x87\x20\x94\x3C\x8C\x3D\x81\x72\x83\xD9\x74\x06\x84\x56\xEB\x63\x06\xA7\x39\x86\x74\x88\xE7\x82\xBF\x84\x72\x87\xE3\x84\xB6\x09\x8C\x1D\x84\x2F\x80\x70\x8E\x61\x83\xB7\x87\x80\x87\xB5\x81\x6D\x03\xD8\x1C\xA4\x3A\x89\x73\x86\xE9\x86\xA3\x7F\x9E\x86\x1A\x85\xAA\x0E\xF9\x1A\x8D\x37\x9E\x2E\x88\xE1\x84\x37\x87\xDA\x80\xE6\x82\x9C\x80\x14\x1D\x9E\x36\x95\x75\x80\xC7\x78\x8B\x86\x6D\x86\xD9\x85\xB8\x0D\x94\x17\xB1\x39\x96\x5C\x83\xE7\x82\x5E\x78\x1C\x84\x09\x45\x4A\x0A\xBB\x1A\xB4\x38\x82\x71\x88\xD5\x7B\x80\x7E\x84\x86\xE8\x85\xB9\x0E\xB6\x14\x8E\x3A\x98\x51\x8D\xEB\x82\x47\x85\xB3\x7E\x9C\x2C\xF5\x07\xC2\xF3\x42\x3B\x96\x71\x84\xEC\x87\xE5\x79\xA0\x6E\xF5\x86\xF9\x07\xFE\x1C\xAB\xFB\x6D\x51\x84\x04\x7D\xF1\x6A\x98\x84\x23\x41\xE3\x0E\xCB\x1C\xA5\x3B\x9B\xBA\x77\xEE\x81\xD3\x86\x84\x85\xAC\x84\xA9\x07\xC1\x18\x80\x3A\x85\x3F\x80\x1A\x58\x5A\x63\x87\x87\x69\x87\x87\x0E\xA3\x1C\xBB\x37\x97\x76\x89\xDD\x83\x40\x86\x79\x7F\x44\x85\xD1\xFD\x07\x14\xA1\xFC\x7E\xED\x76\x3A\x84\x9C\x84\xCC\x75\x46\x6E\xEC\xE1\x2D\x19\x91\x72\x7F\x77\x87\xBA\x2A\xC9\x85\xD3\x54\x35\x87\xC8\x0C\x95\x18\x9E\x39\x98\xB1\x70\xE6\x82\xC7\x7A\x98\x87\x53\x81\x97\x0C\xD4\x86\x6E\xFB\x69\x24\x66\x3B\x85\x26\x80\xC5\x87\x24\x87\xD4\x0E\x98\xF9\x5A\xF1\x68\x75\x8A\xDC\x86\xE0\x87\x3C\x83\x5D\x87\x36\x09\xDD\x1D\x8A\x2E\x95\x67\x8D\xBE\x82\x2B\x82\xC8\x61\xE0\x5C\x01\xFF\x12\x1E\xA9\x18\x87\x79\x8D\x10\x36\xE2\x85\x1B\x5C\x8C\x87\xEC\x0C\xF6\xE6\x5B\x3C\x97\x60\x8D\xF1\x87\x5B\x83\x83\x82\x19\x83\x11\x06\x92\x6C\x52\x33\x8B\x0A\x8C\xF0\x7E\x9C\x85\xDF\x85\x00\x69\x54\x08\x83\x71\x73\x3A\x95\x74\x86\xEA\x87\xBA\x84\xC1\x87\xFE\x86\xDA\x0D\xF7\x18\xB0\x3C\x8C\x4B\x82\xF3\x86\x7A\x84\x50\x7D\xEF\x81\xC3\x03\xD8\x03\xA2\x0F\x85\xBD\x78\xAC\x81\x01\x6A\xCF\x87\x00\x5F\x40\x0F\xB4\xE7\x45\x2A\x89\x4F\x87\xA8\x82\xB4\x7C\xC2\x86\xF4\x7E\x0A\x0F\xCD\xFA\x62\xFC\x69\x68\x8E\x41\x7E\xCA\x82\xC9\x7F\x88\x86", -"\x59\x06\xF6\x10\xB4\xF4\x5A\x56\x8E\x28\x82\x73\x86\xF6\x3B\x1F\x05\x15\x0D\xB4\x1D\x95\x3D\x9A\x73\x8A\xE8\x86\xC4\x85\xB6\x86\xE9\x85\xDB\x0E\xB5\x17\x8B\x2A\x9D\xD4\x68\x98\x84\x03\x68\x35\x82\xD4\x85\x9D\xFB\x2F\x0A\x1E\x0A\x99\x26\x8D\x92\x83\x57\x48\xE0\x87\x94\x87\xE1\xFD\x2B\x1E\x81\x28\x88\x4E\x89\xF5\x87\xBF\x85\xE2\x86\xEA\x85\x5D\x0F\xF9\x6C\x3E\x35\x94\x29\x8F\x03\x86\x27\x86\xD5\x85\x33\x7A\xF1\xDF\x75\x0D\xBD\x33\x94\x4B\x28\xF9\x84\xB6\x7E\x4E\x7B\x0C\x85\xE4\xFD\x2E\x1E\xB4\x24\x9B\x7A\x89\xC7\x81\xF4\x87\xAB\x87\x84\x82\x89\xEA\x39\xEE\x6A\xC7\x61\xA4\x7C\xB6\x80\xB6\x84\xA6\x05\xD6\x87\xCA\xFD\x33\xFA\x40\x29\x86\xEC\x7D\xF6\x84\xA0\x83\xDB\x86\x83\x82\x8B\x0F\xB7\x17\xBD\x36\x8A\x28\x8F\xDB\x83\x6F\x85\x58\x85\xF2\x44\x63\x09\xA0\xDE\x57\x3E\x81\x78\x85\xED\x81\xC2\x84\xCB\x87\x09\x87\x87\x0F\x95\x1C\xB4\x3E\x9B\x6B\x89\xFC\x81\xE4\x82\x78\x84\xED\x45\x09\x91\x44\x1B\xAC\x3E\x94\x7E\x8A\xF2\x81\xAB\x7F\xE6\x87\x54\x87\x9D\x0F\x8D\x1D\x9B\x3F\x9D\x6E\x8D\xFD\x80\xBA\x84\xEE\x86\xFE\x7C\x0E\xFC\x4D\xFC\x13\x3F\x85\x75\x88\xE8\x83\xE0\x87\xF5\x86\x6C\x87\xE9\x0F\xAB\x1D\x9F\x3E\x81\x70\x86\xFB\x82\x93\x17\xE8\x86\x9F\x85\x95\x0D\xD3\xA9\x6A\x2E\x83\x83\x72\x4E\x7D\xA0\x7E\x40\x01\xC0\x87\x54\x0F\xF5\x1F\xA7\x3A\x87\x7F\x8D\xF2\x85\xF8\x87\x7A\x85\xFC\x84\xEC\x03\xF1\x1E\xAE\x0F\x96\xF2\x73\x08\x7D\xA8\x83\xEE\x85\xA3\x82\xA0\x09\xE8\x88\x4D\x38\x80\x6A\x84\xFE\x81\xF3\x86\xF9\x86\xD8\x87\x68\x09\xB2\x1F\xAA\x25\x8B\x7F\x87\xE1\x85\xFD\x87\x77\x87\x84\x81\xC8\xE4\x71\xE4\x73\x05\x76\x2A\x8B\xD2\x78\x78\x28\xF0\x86\x44\x7E\x6A\x0F\xCE\x14\xB6\x27\x90\x52\x88\x9F\x82\x4A\x85\x04\x88\x2A\x85\xE1\x09\x94\x20\x84\x15\x82\x2B\x89\x31\x82\x3A\x87\xFA\x7B\xEF\x85\x3C\x0F\x93\xC5\x08\x40\x83\x76\x83\xF8\x87\xD2\x87\xAD\x87\x4C\x85\x8C\x0D\xDB\x18\xA9\x38\x8B\x76\x8A\xBE\x84\xCC\x84\xFB\x84\xBB\x33\x6E\xBE\x1F\xE5\x74\x15\x9E\x81\x87\xC6\x7E\xC8\x86\x75\x85\x64\x85\xF3\x0F\x82\x1F\x8A\x40\x96\x7A\x87\xFF\x85\xE0\x86\x03\x88\x02\x85\x10\x10\x98\x0A\x92\x40\x9A\x28\x81\xC0\x85\xC2\x07\x3B\x70\xCB\x6A\x59\x10\x89\x20\x82\x3C\x8B\x80\x80\x02\x8A\x40\x87\x17\x89\x83\x87\x61\x10\xA9\x13\xB8\x40\x8F\x4F\x82\x0A\x78\xF3\x80\x1A\x89\xF1\x87\xF4\x0F\xEB\x20\x9C\x41\x8C\x80\x88\xFD\x81\xFF\x86\xAE\x87\xE3\x87\xCE\x0D\xA6\x20\x99\x38\x93\xE5\x7E\x9F\x81\x47\x41\x1A\x88\x22\x88\x5B\x10\x84\x1F\x97\x3D\x8B\x74\x8E\x07\x8A\xDB\x84\x09\x89\x47\x87\xFD\x0F\xEF\xF9\x4E\x3B\x8B\x61\x84\x8F\x4C\xD0\x87\x6C\x84\x3C\x88\x5A\x10\xFA\x20\x8A\x42\x9D\x82\x88\xF5\x82\x04\x88\x73\x86\x40\x88\xBC\x0E\x82\x21\xA8\xBB\x58\x3D\x8E\x12\x71\x19\x2F\x0B\x89\xB5\x7E\x41\x0F\xA4\xEC\x41\x34\x86\x5F\x8F\xE6\x80\x7D\x84\x13\x89\x43\x86\xCD\x0E\xC2\xFD\x44\x31\x91\x46\x77\x15\x76\xF8\x81\x36\x86\x02\x32\x43\x10\xE4\x1D\x85\x41\x96\x75\x85\xF8\x84\xCF\x87\x89\x86\x75\x87\x89\x07\xE4\x0F\x97\x57\x6F\xE0\x60\xA3\x80\x0B\x88\x26\x88\x35\x88\xD5\x0F\x89\x1D\x8B\x42\x86\x7C\x8D\x08\x88\xF1\x87\x23\x88\x6E\x87\xA2\x10\xDE\x1D\x8D\x39\x72\xAF\x7D\xA3\x80\x5F\x7B\x01\x89\x53\x88\x00\xF7\x29\x21\x85\xDA\x6E\x67\x8C\x60\x80\x9E\x86\x83\x82\x79\x86\x01\x06\xF4\x19\x89\x28\x94\x7B\x88\xCC\x79\xDA\x85\x4C\x63\x94\x2E\xB9\x10\xF2\x1D\xBB\x42\x85\x76\x85\xC6\x87\xD8\x84\x09\x86\x5B\x86\x26\x0C\xAA\x1C\x9E\x31\x8E\x82\x83\x88\x7D\x8F\x84\xAF\x6B\x43\x88\xBA\x10\x89\x21\x86\x41\x9D\x85\x88\xEB\x85\x19\x8A\xF6\x86\x50\x88\x31\x0F\xD1\x21\xB3\x3C\x80\x6F\x8E\x41\x6F\x37\x73\x8B\x7B\x52\x88\xD7\x10\x9D\x20\xAE\x3E\x8C\xAB\x7D\x06\x8C\xF3\x86\x27\x89\xED\x86\xCF\x10\x8A\x1F\xA3\x41\x80\x51\x86\x95\x74\x1C\x8A\x40\x81\x37\x85\x36\x89\x69\x21\x97\x3C\x93\x77\x85\x85\x7C\xEB\x7B\x96\x84\xF0\x83\x2A\x0A\xE2\x0F\x9F\x29\x9C\x3A\x8A\xFB\x5B\xC2\x80\xFC\x84\x03\x83\x81\x0A\xEE\x13\x60\x38\x82\x5D\x08\x0D\x8C\xE2\x79\x93\x87\x59\x86\x6D\x0E\xB3\x18\xAD\x42\x95\x61\x8F\xF1\x81\x57\x80\x3D\x89\x96\x6F\x2D\x08\xD0\x0E\x91\x2A\x95\x30\x81\xBA\x47\xC2\x80\xD0\x75\x20\x88\x02\x63\x1A\x22\xBF\x3C\x9C\x88\x86\x58\x6C\x9B\x84\xAF\x84\x6F\x86\xCE\x0A\xE0\x19\xAE\xF3\x66\x24\x66\x3D\x7B\xC4\x80\x97\x82\x49\x7B\xD5\x0C\xC3\x19\x81\x48\x67\x55\x8A\x6C\x58\x1F\x8A\x3A\x88\x7D\x88\xBC\x10\xCB\x21", -"\xBE\x42\x99\x7E\x88\xE2\x86\xB1\x87\x2B\x89\x5C\x86\x37\x11\xA8\xED\x4B\x3D\x8F\x42\x8C\x14\x86\xE9\x87\x70\x7E\x95\x88\xE8\x10\xAD\x22\x84\xE3\x78\x71\x86\xEC\x82\xC7\x85\x12\x88\x78\x88\x5C\x0C\xF2\x21\xAB\x31\x81\x8B\x8B\xCB\x86\x80\x7A\xD4\x75\xBC\x87\x47\x06\xC6\x15\x8F\x12\x65\x7B\x8E\xBB\x7A\x28\x88\xDA\x86\xA2\x88\xE2\xD6\x46\x22\x8C\x2B\x88\x8A\x81\xBA\x81\xDF\x87\x48\x89\xE3\x85\x28\xE1\x14\x21\x82\x02\x74\x56\x89\x87\x87\x6E\x61\x43\x87\x11\x7A\xF3\xFD\x25\xE8\x40\x67\x7C\x9C\x66\xD5\x87\x83\x80\x7D\x80\xED\x80\x58\xA6\x65\x65\x61\x2E\x0A\x55\x2F\xA2\x23\x5E\x86\x09\x83\x39\x00\x5A\x0D\x87\x12\x97\x06\x92\xBA\x51\xA3\x22\x33\x8A\xB0\x04\xCE\x88\x6E\x00\x31\x94\x33\x22\x1D\x6A\x84\x9A\x2F\xAB\x87\x24\x3B\xB0\x86\x63\x0D\xA2\x23\xA0\x10\x98\x8C\x8D\xA0\x56\x34\x89\x7A\x24\xD4\x88\xAA\x11\xEC\x1A\xA7\x35\x94\x8C\x7A\xF5\x79\x5D\x48\x55\x86\x3E\x3B\x85\x00\x00\xC5\x49\x98\x26\xE3\x27\xEA\x43\x32\x6D\x40\x6D\xCE\x6C\x2D\xC3\x0B\x81\x5E\x42\x05\x04\x6B\x25\x85\xE9\x66\x56\x34\x20\x09\x37\x31\x53\x99\x54\xBD\x76\x6E\x78\x19\x03\xC7\x05\x1D\x00\xBA\x77\x25\x7E\x23\x06\x79\xFE\x2C\x98\x74\x92\x0D\x95\x2F\x68\x2F\x3D\x55\x12\x50\x30\x95\x0C\xA2\x2F\x30\x40\x6F\x11\x17\x35\x79\x88\xE2\x70\xCA\x11\xB4\x63\x0C\x47\x94\x47\x5B\xE3\x05\x1E\x1A\x85\x43\x51\x00\x91\xF1\x70\x23\x94\x04\x7E\x49\x3A\x99\x02\x8E\x33\xA1\x68\x09\x6C\xE6\x5B\x3B\x1C\x08\x02\x14\x7B\x7F\xB2\x19\x17\x35\x7F\x88\xE2\x70\xF4\x11\xB3\x0F\x2C\xA1\x33\xB5\x7F\x58\x63\xC7\x04\x21\x00\xBA\x77\x9A\x00\x11\xE3\x49\x48\x93\x8F\x8C\xA8\x38\xF2\x0D\x51\x4F\x52\x59\x74\xEF\x19\x01\x11\xC6\x72\x90\x8C\x20\x88\x0C\x42\x83\x88\xF0\x49\x3B\x0E\x7F\x00\x34\xBD\x78\x04\x01\x19\x7C\x43\x89\x85\x89\x01\x84\x3F\x69\x03\x24\x81\xFF\x5B\x71\x0B\xC8\x2D\x92\x33\x25\x01\xC8\x78\x27\x12\x94\x82\x71\x01\x7B\x10\x3E\xDC\x17\x41\x8A\x55\x38\xAB\x41\x96\x00\x11\xE3\x71\x48\x8A\x91\x8E\xA0\x86\x73\x7F\x13\x60\xF6\x88\xC4\x5C\x74\xDE\x55\x02\x11\x8C\x7B\x23\x8F\x43\x88\xF6\x76\x6B\x32\xF6\x11\xB8\x24\x89\x04\x00\x04\x04\xF7\x74\x12\x01\x64\x78\x23\x89\x34\x12\x8A\x00\xA2\x14\x0B\x0E\x88\x21\x8F\x26\x20\xDD\x76\x48\x00\x91\xF1\x50\x24\x89\x49\x9F\x42\x84\x03\x44\x75\x2A\x19\x2F\x41\x00\x74\xEF\x11\xF8\x63\x0C\x4F\xED\x73\xD9\x64\xC5\x01\x7A\x89\x6F\x24\xEB\x11\xA3\x24\xA7\x04\x0C\x04\x04\xF7\x77\x02\x7F\xC8\x40\x5F\x7C\x1B\xF8\x50\x09\x0E\x94\x50\x7C\x74\x93\x30\xF0\x58\xDD\x77\x8B\x7A\x23\x83\x4B\xED\x43\x38\x63\x31\x0F\x25\x8C\x23\x25\xB7\x20\x3F\x7B\xB4\xED\x3B\x1C\x06\x02\x14\x7B\x7F\x22\x7B\x64\x41\xEB\x79\x2E\x89\x33\x06\x75\x24\x96\x02\x75\xE5\x3B\x8F\x6E\xCF\x02\x19\x2F\x40\x00\x74\xEF\x0B\xD1\x63\x0C\x45\x52\x7C\xD5\x66\x4B\x88\x56\x67\x30\x89\x73\xC4\x3B\x1C\x09\x02\x14\x7B\x7D\x03\x73\x64\x42\x95\x70\xBB\x66\x81\x12\x8F\x25\xAE\xC1\x2E\xB7\x76\xC6\x2B\x11\x00\xDD\x76\xC1\x6E\x23\x83\x06\xBF\x4D\x4A\x99\x94\x84\xFB\x77\xE1\x02\x5F\x25\x2D\x82\xDB\xEF\x1D\xBE\x5A\x74\x27\x09\x07\x08\x04\xEE\x74\xCE\x6D\x91\x41\xC8\xDC\x18\x25\xB9\x0A\x02\x94\x83\xDA\x05\x96\x3C\x47\x6D\x84\x00\x77\x00\x65\x15\x9E\x75\x34\xB1\x69\x9B\x6F\x5B\x02\x43\x53\xF8\x6A\x7F\x68\x7A\x23\xB4\xBD\x76\x7F\x63\x32\x44\x40\x6B\x9C\x88\x16\x03\x01\x12\xC3\x0E\x3A\xA5\x3E\xE3\x7B\x15\x6C\x38\x8A\x64\x62\x8A\x30\xB3\x08\x07\x9E\x72\x4A\x83\x0E\x04\x2B\x8B\x54\x05\x2D\x3F\xFF\x6C\x93\xEA\x78\xC5\x0F\x33\x66\xCF\x1E\x12\x1A\x3A\x88\x04\x84\xC2\x6E\xCE\x12\x8F\x0C\x67\x29\x7E\x71\x03\x8B\x01\x8B\x67\xA8\x89\x59\x89\x9A\x12\x83\xF3\x18\x4B\x96\x03\x8D\x11\x18\x33\x6D\x73\x88\xB0\x62\x27\x01\x45\x23\x96\x0D\x5B\x3A\x64\x2E\x8B\x20\x65\x72\x89\x74\x89\xD7\x12\xB5\xB4\x54\x88\x54\xC9\x12\x45\x06\xBC\x60\x4B\x6C\x2E\x39\x74\xEF\x58\x82\x63\x0C\x5F\x1A\x65\x33\x7E\x57\x88\xBE\x89\xB7\x80\x10\x0D\x89\x17\x3B\x38\x1E\x03\x04\xF7\x73\xBF\x5F\xC8\x41\xEE\x5F\xD3\x12\xA1\xAF\x52\xC1\x29\xD5\x0E\x22\x8E\x96\x2C\xDD\x77\x99\x5D\x23\x83\x1C\x7A\x40\x4A\x88\x97\x83\x31\x8B\xB7\x70\x45\x68\x12\x89\x63\x68\x31\x6F\x63\x0C\x42\xD0\x57\x2C\x8C\x54\x8B\x2F\x7C\x48\x89\x1F\x13\xFA\xE4\x34\xBD\x70\x4E\x13\x32\x45\xAA\x5B\xC6\x88\x6A\x89\xC8\x69\x7D\x2F\x15\x4C\x81\xB0\x51\xF1\x02\xA6\x57\xC8\x40\x10\x58\x25\x13\x9C\x26\xBF\xE2\x77\x93", -"\x8D\x24\x8A\xDA\x54\xDD\x76\xF4\x54\x23\x83\x2A\x59\x51\x4C\x80\x09\x08\xD6\x81\x65\x89\x42\x00\x3E\x00\x74\xEF\x41\xAF\x23\x0C\x51\x49\x5F\x32\x8A\x29\x01\xB2\x88\x7A\x34\xAB\xDC\x3B\x1C\x38\x01\x14\x7B\x75\x82\x23\x64\x40\x3E\x53\x14\x6A\x74\x12\x87\x26\x99\x2B\x89\x98\x81\x62\x67\x21\x60\xDD\x77\xE6\x21\x23\x83\x0C\x3E\x43\x4D\x8D\x57\x88\x00\x7D\x56\x8B\x78\x54\x72\x69\xAD\x37\x74\xDE\x5D\x55\x43\x19\x4D\x8F\x4B\x6C\x8B\xD3\x89\x65\x89\x0F\xD3\x24\xB0\x79\x47\x87\x09\x0D\x08\x04\xEE\x75\x1D\x49\x91\x41\x92\x93\x05\xB2\x46\x4C\x9D\x7D\x78\x32\x8C\xF4\x83\x03\x4B\xF1\x0B\x66\x5C\x2D\x25\x8F\x18\x59\x36\x43\x32\x42\x1E\x45\xAF\x88\x35\x89\x5A\x13\xF1\x0F\x77\x4A\x85\xA7\x14\xF7\x70\x6F\x37\xC8\x40\x83\x83\x0C\xCF\x59\x26\x96\x9B\x31\x09\x13\x33\x8B\x7D\x54\xDD\x76\xBD\x39\x23\x83\x31\xE9\x51\x4E\x8C\x31\x05\x3E\x6C\x16\x35\x86\x89\xFD\x77\x5E\x5D\x2D\xDC\x07\x4E\x83\x31\x0F\x36\x8A\x44\x8A\x53\x89\x7A\x3E\x32\xF4\x27\xE5\x62\x2D\x10\x6D\x41\x68\x7B\x73\x78\x15\x7D\xA2\x88\x1E\x11\xDD\x19\xA0\x44\x8D\x55\x8B\xA2\x87\x30\x8A\xA5\x81\x07\x7E\x0D\xFE\x52\x16\xB0\x45\x43\xE1\x71\xD8\x83\x68\x85\xE5\x86\x13\x70\xBA\x11\xE3\x2A\x6D\x4E\x89\xB2\x7F\x3A\x89\x30\x89\xEC\x89\xA3\x88\xB3\x13\xDF\x19\xB5\x4E\x88\x83\x7F\xFF\x81\xC8\x85\xE9\x86\x17\x78\xF3\x06\xD3\xCB\x4D\x75\x7E\x47\x76\xD6\x82\x78\x8B\xA6\x7A\x37\x7E\xD8\xF8\x66\x1D\xBD\x7A\x76\x77\x8B\xDE\x80\xDF\x84\x85\x84\xCB\x83\xD4\xFE\x68\xE3\x42\x1C\x9B\x7D\x8B\xB6\x83\xC4\x7D\xB0\x80\x30\x4E\xD5\x13\xBA\x37\x43\x4F\x8D\xB9\x7F\xC6\x7A\x7B\x89\x19\x74\xEE\x89\xE9\x0E\xEC\x1B\xAB\x3B\x82\x62\x8D\xEE\x80\xBF\x5C\x80\x79\x4C\x7A\x48\xF0\x7F\x16\xBE\x3E\x8B\x9D\x81\x0F\x4B\x7D\x89\xD6\x7B\xF6\x89\xF4\x0E\xDB\x27\x9F\x44\x89\x51\x84\x3B\x8A\x24\x88\xB0\x84\xFE\x7D\xE0\x0F\xA6\xA9\x76\x39\x83\x08\x09\x3E\x8C\x8C\x52\xFF\x88\xD6\x7B\xC5\x13\xCF\xE6\x42\x46\x83\xF8\x58\xD7\x86\x11\x88\x40\x88\xAE\x87\x02\x11\xDE\x1E\xAF\x3F\x91\xFF\x61\xFF\x85\x2A\x89\xF0\x88\xF5\x89\xD7\x13\xA9\xF9\x71\x40\x8D\x67\x83\x03\x8F\x9D\x85\x0D\x89\x78\x86\x53\x0A\xF3\x19\xA5\xF0\x2D\x9E\x8B\x3B\x8A\xF1\x79\x63\x85\x9B\x82\x7F\x00\xEA\xF1\x75\x6E\x4D\xA0\x85\xE8\x57\x81\x89\xF0\x7B\x08\x8A\x20\xF5\x13\x28\x87\x2D\x75\xA0\x8E\x0C\x8F\x82\x89\xED\x87\x0C\x8A\xBC\x0D\xE6\xEF\x7B\x40\x8F\xD9\x6D\x2F\x85\xAE\x83\x74\x84\xA9\x88\x81\xD6\x0B\x1C\x84\x27\x92\xA5\x7F\x41\x8E\x81\x89\x08\x8B\x7C\x7E\xB4\x0D\xBD\x18\xB7\x35\x9F\x61\x8C\x12\x85\xD3\x84\xF8\x88\xC9\x81\xB6\xE8\x60\x0E\x8A\x38\x86\xF3\x7B\x44\x8A\x71\x7E\xC0\x30\x1A\x8A\x20\xB4\x36\x28\x88\xE0\x78\xA1\x89\x5E\x7A\x87\x88\x91\x71\xF8\x89\xDE\x13\xFF\x1C\x8A\x20\x8A\x46\x78\x31\x83\x7B\x86\x4E\x88\x38\x7F\x52\x07\xE3\x10\xA9\x02\x87\xBD\x77\xBA\x28\x8C\x8A\x26\x5A\x31\x8A\x53\xF8\x5A\xEE\x5D\x44\x95\x77\x83\x40\x8A\xD3\x85\x48\x88\x04\x84\xFA\x0E\xEB\x28\x87\x02\x87\x24\x6F\xBE\x84\x7B\x85\xFC\x84\xEF\x85\x09\xF1\x74\x17\xB2\x3F\x8D\xA2\x85\x43\x8F\x89\x8A\x13\x65\x28\x8A\x4A\x0C\xB1\x22\x8C\x31\x91\x72\x88\xA7\x85\x26\x8A\x9E\x84\xBA\x88\x57\xE8\x02\x18\xBE\x36\x76\x86\x84\x92\x34\x75\x8A\x23\x8B\x46\x64\x5C\x0E\xCE\x1C\xAB\x42\x9B\x5F\x85\xF4\x80\xC6\x83\xD1\x87\xFF\x85\x49\x0F\xBA\x10\x66\x39\x80\x0E\x3F\xA3\x06\x8E\x88\x36\x5C\x3C\x8A\x69\x0F\xFC\xE7\x65\x29\x80\xC5\x77\xA6\x86\xA2\x81\x1C\x89\xEF\x84\x73\x10\xFC\x13\x86\x03\x43\x3D\x83\x6E\x5D\x95\x8A\x27\x8B\x8D\x7E\x14\xFC\x67\xEB\x6C\x43\x95\x6D\x8E\x16\x8F\xB6\x86\x12\x88\xAF\x88\x96\x14\xB7\x18\xA1\x3C\x9E\xB1\x76\x11\x8E\xB6\x80\x83\x84\x65\x7E\xE2\x0E\x8C\x29\xA1\x51\x9F\xA4\x85\x8B\x63\xCD\x85\xAC\x78\x49\x8A\x83\x0C\xB3\x22\x85\x32\x9F\x8A\x80\xD9\x87\xFF\x3C\x29\x88\x32\x67\xAE\x14\xA8\x78\x70\x52\x80\x8C\x82\x41\x8F\x78\x8B\x60\x89\xE4\x89\x49\x11\xCB\x27\xA1\x33\x9F\x74\x83\x0B\x8F\x0B\x7E\x11\x87\xD5\x87\x09\x01\x61\x29\xBD\x09\x63\xA7\x8B\x0E\x8E\x7D\x8B\xE7\x78\xF8\x89\x13\x08\xE9\x29\x86\x50\x8B\xA7\x8B\x7D\x82\xD6\x7E\x5B\x71\xFD\x89\xF2\x14\xE5\x86\x74\x53\x98\x8A\x83\x4C\x8A\x8A\x8A\x3B\x88\x2D\x86\x70\x11\xCB\x20\x89\x53\x8F\x66\x88\x49\x8B\x68\x84\xB0\x87\x41\x7E\x01\x15\xDB\x95\x43\x54\x9A\x84\x8B\x0F\x8A\x2B\x89\x3F\x89\x87\x88\x5A\x0F\xBE\x28\x9C\x3F\x93\x88\x87\xA4\x85\x22", -"\x89\x47\x81\x60\x64\x81\x03\xC2\x78\x4B\x50\x9D\x63\x0F\x4B\x8E\x43\x78\x47\x7E\x19\x7C\xCB\x0A\x94\x28\x94\x51\x86\x0A\x85\x79\x81\xAA\x83\x16\x6F\xB6\x79\xAC\xE1\x00\x2A\xA5\x54\x98\xA1\x77\x52\x8B\x9B\x86\x39\x8A\x95\x8A\x84\x11\xC0\x18\xB6\x4E\x92\x3F\x86\x9A\x54\xBD\x80\x70\x70\xEA\x89\x33\x15\x9C\xEA\x41\x53\x92\xDF\x75\x50\x89\x92\x8B\x28\x8B\xD1\x86\x94\x14\xCE\x18\xA7\x52\x9B\x60\x89\x4A\x8A\x8D\x67\xB3\x86\x8F\x80\x0E\x08\xEC\xFB\x11\x54\x98\x6B\x63\x51\x89\x19\x8A\xFD\x86\x3E\x88\xF8\x0F\x98\x2A\x9E\x3E\x91\x88\x80\xFA\x80\x88\x8B\xED\x86\xAC\x80\x71\xF6\x0F\x15\xA7\x4E\x93\x22\x50\xF1\x80\x1E\x7A\xCE\x86\x41\x85\x9D\xFA\x5F\x28\x81\x55\x96\xC6\x78\x3D\x8D\x82\x7E\x3D\x8B\x26\x7B\xE8\x0E\xF9\x29\x85\x46\x9F\x9E\x8E\x52\x8F\xEB\x85\xC3\x87\xB0\x87\xC6\xD1\x28\xB9\x7E\x44\x94\x54\x85\xD5\x63\xE3\x2F\x54\x8A\x57\x6A\x55\x15\xE5\x1F\x96\x3B\x9C\x84\x8C\x08\x8A\xAB\x8A\xFA\x86\x8D\x8A\xEC\x0F\x9C\x2A\xAC\x29\x80\xAB\x85\xF3\x82\x78\x80\x39\x7C\xE2\x81\x99\xD6\x39\x1E\x82\x27\x8D\xED\x74\x47\x8E\xAF\x8B\x5A\x8B\xFC\x7A\x35\x15\xCE\x17\xA6\x51\x9E\x31\x8B\xE9\x81\x07\x85\x4B\x8B\x1D\x84\x5B\xEB\x54\x24\x94\x41\x97\x31\x83\x3F\x7D\x7A\x82\x0F\x69\x86\x30\x7F\x15\xCC\x9F\x41\x56\x9E\x80\x83\x58\x88\xAB\x8A\x17\x89\x5A\x8A\xA7\x09\xB7\x29\xAD\x27\x99\xA5\x88\xA0\x87\xB4\x7F\x58\x88\x3B\x58\xB0\xF6\x1A\xBF\x48\x19\x84\x7B\x8C\xCF\x84\xAF\x7D\x3C\x8B\xCB\x8A\xCF\xF6\x1E\xF2\x75\x35\x94\x63\x8D\x09\x8F\x0D\x8B\xCB\x86\xC4\x8A\x25\x10\x8A\x2B\x8C\x2A\x83\x87\x8F\x51\x89\x44\x63\x42\x87\x1B\x48\xD8\x01\x8E\x1A\x88\x4C\x95\x56\x8F\x95\x2C\x4E\x69\x24\x01\x53\x82\xBC\x89\x48\x0E\x18\x37\x2E\x9A\x54\xD4\x30\xC5\x3E\xAC\x76\x26\x3F\x11\x0F\x3A\xD7\x30\x14\x7D\xC9\x2B\x5D\x88\x2E\x7E\xC9\x30\x14\x3F\xB3\x08\x6B\xF7\x76\xF2\x28\xF1\x35\x3A\x89\x48\x88\xA4\x85\xF8\x6F\x31\x0B\x52\x24\x96\x34\x9C\x9C\x67\x5D\x89\xA3\x85\x07\x85\x2C\x7B\xC4\x07\x65\x2B\xA5\x1E\x09\x7E\x3E\x5D\x8C\x5F\x70\x78\x8A\x4E\x7A\x77\xEF\x46\xC5\x5A\x24\x03\x56\x2C\x5D\x8E\x50\x38\x7A\x8A\x00\x8B\x33\xAD\x6C\x2B\xAA\x99\x70\x9A\x8F\x58\x88\xBA\x74\xE7\x68\x49\x00\xD8\x15\xE1\x6E\x4D\xF4\x20\x7E\x7F\x61\x6F\xB8\x6A\xAC\x77\x49\x00\x74\xEF\x2F\xEC\x30\x14\x67\xCA\x27\x5C\x6F\xA5\x84\x77\x6B\xFD\x27\xB3\x08\x48\x55\x51\xE9\x7A\xA6\x67\x5C\x69\x59\x8A\x84\x26\x8E\x00\x3E\x01\x89\x16\xB8\x5B\x6C\xA0\x7B\x3F\x6E\xF0\x7F\x40\x00\xD7\x1B\x0E\x02\x8D\x1C\x08\x86\x2F\x40\x87\xEA\x75\xC1\x06\x26\x20\x24\x89\x7F\xD3\x4D\x0D\xBE\xD0\x10\x80\x7C\x3F\x6A\x1D\x7C\x6A\x34\xFD\x06\x83\xA6\x01\xE9\x52\x68\x76\xB1\x80\xAB\x41\xC2\x8B\x2F\x87\xDE\x5F\x83\x2F\x2F\x97\x3C\x13\x8E\xB0\x8C\x26\x6C\x78\x1A\x91\x8A\x3A\x7B\x66\x0D\x7F\x9C\x04\xBE\x11\x4A\x84\x1D\x82\x13\x22\x87\x89\xCF\x7C\xFF\x00\x22\x15\x4F\x20\x88\x4D\x37\xC1\x31\x7A\x27\x7A\x79\xA6\x4A\x87\x61\x40\x63\x56\x5E\x73\xE7\x20\xE8\x11\x02\x0F\x45\x3E\xB0\x16\xE7\x91\x0D\x18\x01\x61\x1C\xBB\x5D\x63\x8D\x8B\x88\x9B\x33\xD2\x4F\x27\x10\x3F\x9C\x22\xF4\x20\x0F\x13\x85\x09\xCD\x8A\x38\x03\x35\x8B\x5F\x16\x91\xE0\x6B\x58\x92\x4D\x80\xAA\x68\xCE\x8B\x30\x14\xCB\x0F\xF1\x0F\x43\x6B\x04\x3B\x25\x5C\x0E\x99\x81\xBF\x1C\xC1\x82\x40\x84\x52\x5D\x14\x24\xB1\x89\x67\x55\x41\x2F\x8C\xC7\x8A\x8B\x8A\x37\x8B\xA7\xD3\x4E\x44\x40\x5A\x81\xD6\x02\x68\x89\xD6\x24\x38\x0D\x42\x8B\x18\x4C\x2D\x1B\xBF\x46\x99\xB2\x82\x66\x8F\x44\x82\x2F\x5A\xCB\x0F\x59\x5A\x62\x9D\x3E\xF7\x1F\xFC\x47\x01\x89\xFC\x6B\xBD\x26\x24\x8A\x9E\xBF\x71\xD8\x52\x75\x2B\x90\x8B\x68\x8D\xC9\x88\xF2\x62\x47\x8B\x7B\x16\xD8\x19\xA9\x41\x5E\xB3\x82\x82\x38\xD4\x88\x18\x04\x51\x8B\x84\x16\xA5\x2D\x86\x5A\x9A\xB4\x8D\xB0\x85\xE7\x71\xCC\x05\xD3\x62\x94\xEB\x6D\x2C\x8D\x36\x6D\x6B\x88\x35\x6E\xE3\x60\x5F\x6D\xD2\x76\xA7\xA8\x40\x24\x16\x02\x32\x68\x25\x66\x64\x53\x89\xA7\x45\x93\x00\xFF\x11\xD5\xC5\x42\x5B\x9F\x76\x44\x6C\x8F\x03\x81\xA8\x45\x93\x00\x81\xC5\x39\x2C\x8F\x5A\x82\x14\x2F\x64\x8C\xAF\x73\x7E\x07\xF9\x06\xFE\x12\xFA\x25\x94\x07\x82\x55\x41\x0A\x05\xDA\x8B\x68\x79\x08\x07\xC5\x05\x43\x85\x1B\x4E\x7A\xB1\x8A\x00\x68\xD6\x8B\xB5\x8B\x84\x00\x35\x96\x6B\xC5\x5B\xB6\x32\x29\x30\xE3\x7B\x1E\x62\x70\x5A\xE9\x73\x2B\xFE\x62\xF3\x16\x8D\x69\x16\x78\x35\x74\x5D\x6A\xCD\x18\x5A", -"\x8B\x8D\x05\x3F\x79\x06\x95\x2E\x4B\x38\x54\x33\xF4\x4F\xBF\x8A\xBB\x51\x47\xE3\x14\x02\x12\x7E\x54\xC2\x21\x55\x33\xAA\x31\xBC\x46\x6F\x69\xD1\xE7\x57\x61\x0E\x2C\x92\x55\x3F\x70\x7B\xE3\x2E\x7C\x8B\x85\x42\xBC\x7F\x55\xF1\x58\x56\x83\xAA\x8D\xD1\x7D\xA8\x89\x68\x87\xA3\x8A\x50\x0E\xA5\x29\xBD\x2F\x8B\xAA\x80\xC5\x81\xE1\x7B\x7B\x87\x16\x87\x00\xFE\x45\x93\x5F\xEE\x62\x37\x8D\xE4\x7C\xDC\x81\x54\x5F\xDA\x74\x17\x17\xF6\x59\x59\x5C\x91\xED\x74\x66\x7B\xB6\x7D\xF0\x86\xCF\x7E\xC3\x0F\xA0\xFB\x46\x57\x93\x7D\x88\x5C\x88\x12\x8A\x57\x8A\xFF\x87\x27\x17\x8F\x1F\x81\x40\x80\x5A\x8A\x4E\x82\x77\x7D\xC4\x83\x86\x42\xAA\x0F\xF7\xEE\x7F\x28\x11\xB9\x8A\x56\x43\xE6\x89\x40\x7B\xCD\x7E\x6A\xFD\x59\x21\xA3\x50\x82\x7A\x8C\x0D\x8E\xC5\x82\xC8\x8B\x0C\x86\x24\x17\x96\x19\x8D\x55\x88\x67\x6A\xDA\x84\x7B\x75\x88\x7E\xDE\x87\xE6\x13\x90\x27\x85\x8E\x6D\x08\x3C\x74\x89\xC1\x88\x46\x40\x8D\x7E\x26\x15\x9C\x2E\xA8\x54\x98\x74\x8D\x47\x8F\xDE\x85\x67\x8A\xD1\x85\x9F\x15\xE0\x14\x94\x8D\x77\x9F\x80\x96\x81\xB8\x87\xDC\x69\x88\x82\x41\xB5\x65\x2E\x9D\x6F\x4E\xBA\x85\xD5\x79\xB0\x7D\x7D\x71\x85\x88\x07\xF9\x39\x2E\xB7\xF6\x66\xAC\x8A\xFF\x84\xAB\x88\xFF\x87\x9F\x8B\x92\x10\x83\x0B\xA3\x1C\x83\xE4\x7A\x77\x8E\xBD\x50\xDF\x8A\xB4\x8B\x34\x15\xEA\x2E\xB6\x54\x9C\xA3\x82\x3B\x8C\x80\x8A\xF2\x89\x7D\x8A\x4B\x11\xE6\x44\x6E\x01\x87\x29\x8A\x74\x8F\x24\x01\xE3\x8A\x84\x55\x8F\x17\xC2\xF7\x66\xA6\x70\x81\x82\x4B\x8B\xED\x86\x99\x84\x1A\x88\x68\x0A\xB2\x2B\x86\x28\x94\xAD\x84\xBF\x4D\xF1\x87\xA7\x6C\x78\x83\x6A\xE0\x73\x1B\x99\x13\x85\x80\x84\x27\x7F\xF3\x89\x8B\x53\xD0\x8B\x09\xFD\x39\xEB\x53\xDE\x70\xA4\x8F\x71\x8B\xE8\x86\x24\x87\xAB\x8B\x94\x0C\xD9\x2E\xA6\x32\x8B\xA6\x87\xD2\x6E\x37\x85\x96\x79\x52\x8B\x09\x0E\x9D\x1C\x9B\x77\x67\xAD\x83\x29\x36\xF6\x8A\x94\x52\xDC\x8B\xE4\xF5\x40\x29\xAD\x55\x82\xA6\x8F\x56\x88\xD4\x79\x5C\x8B\xD0\x81\x9E\x15\xD6\x28\xB5\x55\x9B\xA0\x8B\xE1\x86\x35\x84\x15\x7E\x5D\x67\xCE\x17\x8B\x5E\x50\x5F\x99\xE5\x76\x5A\x7E\xE6\x88\xE9\x8A\xAC\x7A\xB3\x14\xDB\x13\xB0\x56\x9D\x4E\x8A\x7A\x8E\x43\x86\x72\x8A\x84\x82\xB8\x0B\x9C\x13\x86\x36\x6E\xA3\x82\xAA\x83\xF4\x7A\x59\x82\x39\x8A\x1C\xA7\x16\xE7\x46\x04\x01\xBF\x89\xF2\x53\xFC\x8A\x66\x7F\xE7\x74\xAE\xF2\x28\x21\x93\x5D\x8A\x85\x8E\x7B\x8A\x94\x84\xF0\x8A\x52\x86\xC2\x17\x86\x1A\x84\x5F\x9B\xED\x62\x0B\x85\xCF\x7C\x91\x87\xBB\x82\xA8\x16\xD6\xC2\x4A\x52\x9E\xA0\x89\x10\x04\xFF\x89\xD9\x52\xFF\x8B\x6F\xE9\x42\xFA\x71\xF4\x77\xB9\x85\xDB\x7A\xF0\x89\x73\x7E\xC2\x8B\x7F\x10\xED\x2F\x85\x29\x8F\xBF\x8A\xFC\x87\xFB\x86\x19\x89\xB1\x7A\xFE\xE8\x16\x30\xBC\x57\x87\xBB\x82\x7A\x8E\x45\x77\xF9\x8A\xEA\x7A\x32\x10\x86\x15\xAB\x5F\x9C\x50\x82\x82\x8A\x4D\x84\x09\x8C\xEF\x87\x9F\xBE\x76\x20\xA0\x71\x4A\xC1\x87\x5E\x8C\x05\x8D\xEE\x8A\x5B\x7B\xBB\x17\xEC\x22\xAD\x43\x85\xA6\x88\xEC\x87\x98\x89\x6E\x86\xB9\x88\xAE\x0E\xCE\x01\x97\x16\x85\x84\x82\xC4\x7B\x20\x00\x0F\x8D\xEE\x8A\x3E\x18\xD1\x2F\xA9\x5D\x93\xBE\x84\x54\x8D\xFA\x88\x0D\x7C\x9C\x8A\xE8\x14\xF3\x2A\xAA\x51\x9E\x74\x8D\x34\x85\x9D\x89\x9E\x48\x96\x70\xDB\x00\x9B\x1B\x82\x04\x0F\xC2\x86\x60\x89\x0A\x8C\xF9\x8A\x82\x7C\xE6\x17\x82\x30\xA5\x5E\x91\xC1\x8C\xF6\x83\x06\x8F\x90\x85\x1A\x8C\x8A\x0A\xB7\x30\x9C\xF3\x7F\xA6\x82\xC9\x64\x0C\x8C\xEC\x48\x0C\x8C\xA8\xFB\x30\xFA\x7E\xD5\x76\xAA\x8C\x06\x8E\x03\x8D\x69\x84\x37\x8C\x88\x0A\xF0\x30\x89\x3C\x8C\xBD\x82\xF7\x84\xB9\x8A\x88\x85\x65\x44\x5A\xE9\x64\x9C\x76\x61\x98\x62\x48\x87\x89\xA8\x7E\x40\x7B\xA1\x7E\x2F\x18\xC5\xFA\x66\x5E\x94\xA5\x88\x7A\x8E\x96\x8A\x0D\x88\x31\x88\x84\x18\x93\x20\xBA\xFA\x73\x62\x8C\x12\x6A\x11\x8E\x70\x5B\x46\x8C\xD0\xFC\x04\xD3\x7B\x61\x82\xAC\x86\xFD\x86\xB5\x89\x71\x8A\x40\x8C\x6E\x0F\x82\x31\xB0\x3D\x99\xC4\x84\x06\x89\x97\x41\x18\x86\xAE\x5C\x8B\x18\xF9\x22\x60\x62\x83\xE7\x72\x8A\x8D\xFE\x79\x3D\x8B\x00\x8A\xEF\x13\xED\x2E\x9D\x4F\x8F\xBB\x86\x18\x8F\x80\x88\x3A\x80\x2E\x74\x5B\xF3\x58\x0B\xA9\x60\x9F\xC4\x86\x86\x8F\xFF\x88\x4D\x87\x82\x7C\x80\x17\xAC\xF7\x4D\x44\x88\x7F\x80\x82\x8E\x82\x8A\x2A\x8C\xE4\x87\x72\x18\xA7\x20\x9B\x62\x80\x77\x8D\xEE\x6E\x00\x89\x40\x01\x58\x8C\xEB\x15\xC5\x31\x99\x60\x8F\xC4\x8B\x81\x89\x12\x8F\x72\x7E\x3F\x8C\x1A\x0A\xA8", -"\x31\x86\x3F\x8F\xC6\x81\x08\x89\x1A\x8F\x20\x88\x82\x88\x4F\xFD\x08\x58\x7F\x54\x90\xB9\x84\x8C\x8D\x40\x43\xD3\x8A\x00\x8C\xC8\x18\x9C\x30\xAF\x3E\x80\xC7\x81\xFB\x83\xE7\x8B\x08\x89\x9E\x8B\xD0\x10\xE6\x31\xBE\x3A\x8D\x53\x8D\xEF\x81\xBF\x81\xF5\x7B\x6B\x8C\xED\x18\xD3\x03\x4C\xD8\x69\x93\x80\x5D\x79\xB9\x7E\x37\x8C\xE1\x87\xE9\x17\xC1\x14\xA2\x63\x8F\x80\x87\x89\x8A\x0E\x8A\x0A\x8B\x1C\x88\x34\x06\xA9\x19\xA5\xFB\x6B\x65\x87\x3B\x87\x91\x60\x5A\x8A\xE1\x6E\x15\x18\x81\x32\xAB\xFD\x37\xDE\x72\xD8\x79\x19\x8D\x2F\x7F\x65\x8C\x0D\x10\x8B\x32\xA0\x41\x8D\xC8\x88\x4B\x8F\x21\x8C\x1D\x88\xA5\x87\x23\x0F\xB5\x07\xB5\xD9\x71\x23\x66\xF2\x82\xFF\x8A\x13\x8C\x8D\x8C\x35\x80\x17\xF9\x6C\x56\x85\xC5\x80\x92\x8D\x0F\x89\x33\x8D\x1E\x8A\xE4\x18\xA1\x21\xBA\x63\x92\x86\x81\x91\x8B\x9C\x84\x5E\x8A\x80\x7D\xC5\x03\xFA\x22\xBC\xAA\x74\x8A\x88\x91\x8B\xFF\x88\x4C\x8C\xD6\x29\xF8\xFC\x0F\x29\x82\x61\x84\xA6\x84\xCB\x81\x81\x85\x42\x8A\x64\x8A\x09\x18\xD4\x1C\x8B\x60\x92\xE7\x6E\x93\x8D\xC1\x8B\x4A\x7D\x28\x84\xE7\x0C\xB7\x15\x97\xAD\x6E\xC9\x83\x86\x8F\x28\x8E\xC5\x3E\x99\x8C\x1E\x19\x84\xFB\x74\x63\x81\x81\x86\x8F\x8F\x13\x89\x4E\x8D\x80\x88\x3B\x19\x83\x22\xB6\x56\x82\xAD\x80\xBF\x81\x0C\x87\x3D\x6F\xDE\x8A\xBA\xE0\x4B\x2E\x9E\x65\x87\x0C\x7B\x8D\x88\xEA\x88\x24\x8C\x35\x8C\xE8\x17\x93\x31\xAA\x5F\x95\xC4\x81\x5B\x8C\x24\x8F\x6C\x8A\x93\x8C\xBA\x14\xC4\xD3\x4A\x46\x88\x03\x66\xF7\x83\x7E\x80\xDE\x87\xFA\x81\xD8\x0A\xF8\x07\xBC\x3D\x9D\xB5\x82\x4C\x64\xC8\x8B\x15\x88\xB8\x30\x60\xB0\x27\x02\x24\x02\x06\xB7\x80\x2B\x39\xDA\x82\xDF\x87\xB1\x8B\x93\x62\x38\x2C\x96\xEF\x6D\xC5\x73\x7A\x88\x2F\x8C\x0C\x8C\x12\x8A\x32\x18\xFC\x32\xAC\x5F\x9E\xCB\x8B\x7A\x88\x30\x8C\x05\x75\xA8\x85\xB2\x08\xFF\x1A\xAA\x24\x91\x01\x8E\x70\x7F\x32\x8D\xED\x4C\xCD\x8C\xEF\xFB\x60\x32\xB2\x63\x8C\x88\x83\x96\x8E\x0D\x8A\x48\x8C\x38\x88\xA4\x19\xEE\x2F\xAC\x62\x86\x03\x71\x74\x8C\x5D\x80\xEC\x8B\x74\x82\x9E\xFB\x6B\x09\xA6\x2D\x89\x7D\x81\x94\x86\x77\x7C\x6C\x8C\x00\x7E\x1C\x19\xFF\x2E\xB3\x66\x81\xBC\x89\x90\x8C\xF8\x87\x6D\x8D\xE3\x8A\x67\x19\x98\x28\xA9\x65\x9A\xA0\x8A\xE1\x83\xB2\x5E\x3E\x82\xB5\x85\x54\x16\xFD\x09\xAF\x36\x95\x4D\x77\x9C\x8A\x82\x7E\x6C\x8D\x83\x8C\x38\x17\xCD\x33\xBA\x5C\x8F\xCE\x8C\x73\x89\x3A\x8F\x0F\x8B\xE9\x8C\x41\x14\xA8\x20\xBE\x36\x85\xDF\x7E\xFC\x86\xEE\x8B\x1F\x76\x04\x8B\x59\xE1\x5D\x33\x85\xF1\x69\xCE\x82\x3B\x7B\x39\x8E\x32\x8D\xDA\x8C\x0E\x11\xE5\x32\x90\x44\x98\xC7\x82\x11\x8B\x37\x8D\x47\x8B\x32\x88\x70\x09\x96\xBB\x60\x71\x52\xCF\x87\xC5\x7C\x3E\x8D\x00\x8C\xA9\x8B\x6B\x18\xA0\x33\xAD\x61\x82\xCD\x84\x83\x89\x37\x8F\x08\x8C\xFF\x8C\x8B\x15\xCB\x1F\x8D\xF0\x75\xB8\x8D\x10\x34\x40\x8C\x1B\x7F\xEF\x8C\x9E\x19\x92\x31\xAC\x61\x87\xBD\x86\x42\x89\xF5\x8A\x83\x8C\x1B\x8C\x10\x1A\xB9\xBB\x6E\x5E\x85\xBE\x8D\x4D\x7B\x10\x77\xBB\x80\x13\x7E\xB3\x17\x96\x69\x56\x68\x96\xE4\x76\xA0\x89\x1E\x8C\x78\x8D\x0E\x8C\xE2\x19\x83\x2F\xBA\x67\x99\xA8\x86\x9E\x8B\xA3\x89\x88\x8C\xF8\x8B\x7B\xFE\x39\x17\x96\x40\x8E\x3B\x8C\xBB\x85\xC4\x6E\x52\x83\xCE\x8B\x09\x01\x2B\x34\xA7\xF2\x78\xD0\x88\xA0\x89\x2F\x8F\x86\x8C\x4A\x8C\x1D\x1A\x96\x31\xA8\x50\x97\x81\x86\x9A\x8B\xE1\x86\x7A\x8D\xE4\x85\x5F\x07\xCB\x17\xBA\x3A\x62\xD2\x82\x10\x81\x29\x8C\x28\x8A\x6B\x8A\x36\xF6\x05\x30\x8B\x33\x89\xAA\x8D\xCC\x83\xA1\x8B\x69\x87\x58\x88\xAA\x19\xF2\x2F\xBC\x40\x94\xBF\x82\xAB\x86\xC8\x79\xF2\x8B\x20\x84\x73\xFE\x6A\xF1\x4C\xB1\x54\xD2\x86\x5B\x86\x4A\x8D\x35\x8B\x8C\x87\x00\x0D\xDA\x34\x82\x34\x9C\xD2\x84\xD0\x81\x2A\x8F\x98\x87\xA9\x8C\x1D\xF0\x0D\x30\x83\x39\x90\x71\x80\x81\x89\x2B\x8F\x28\x5F\x09\x8C\x9E\xAE\x27\x02\x2C\x69\x97\xE7\x74\xA4\x8E\x25\x89\x28\x8A\x98\x88\x20\x17\xEE\x1C\xB4\x69\x85\x6D\x8E\xA5\x8F\xC7\x84\x98\x8D\x3E\x57\x35\x03\xE4\x9C\x43\x6A\x99\xE8\x7D\x82\x8E\x38\x71\x58\x8C\xF1\x7E\x35\x19\xD9\x2A\xB3\x68\x9B\xAA\x8C\x9F\x8D\xAB\x88\x7A\x8D\xAF\x8A\xA1\xBB\x3A\x30\x81\xD5\x53\xD4\x84\xD5\x78\xF2\x8A\x50\x8A\x2A\x8C\x1D\x17\xD6\x30\x92\x20\x98\xBE\x80\x77\x8A\xFB\x88\x68\x8A\xD8\x30\xBC\x14\xAF\x33\xA6\x1F\x8E\xD3\x87\x99\x60\x4B\x8D\xFE\x85\x44\x8D\x32\x11\x8B\x35\xBD\x38\x8D\xD4\x82\xE7\x85\xA1\x88\x3C\x7F\xA7\x8A\xEF\xC0\x16\x21\x96\x3E\x82", -"\xD4\x83\xAB\x8D\x50\x8F\x5A\x89\x97\x88\x39\x0E\xCD\x32\xBB\x38\x9A\xD5\x80\xE7\x84\x57\x8C\xB3\x86\x1C\x86\x74\x18\xDC\x33\x85\x6B\x8D\xD1\x89\x86\x8D\x48\x8F\x67\x8C\xAA\x8B\x25\x14\xDD\x21\xA7\x50\x9F\x86\x89\x42\x89\x1C\x89\x95\x85\x05\x62\xCD\x15\xF8\x2F\x85\x1F\x89\xC4\x8E\x8F\x74\x54\x8C\x6C\x7F\x77\x8C\xC7\x18\xD5\x35\x86\x6A\x96\xD5\x80\xCA\x82\x4E\x8C\x2B\x88\x66\x8D\xAE\x10\xCE\x35\x8D\x41\x98\xD3\x85\x27\x66\x9F\x8B\x77\x7A\x49\x8D\xD3\x1A\x9C\x33\xAE\x60\x99\xD0\x8F\x8D\x89\x46\x8F\x07\x8D\x4D\x8D\x87\x15\xB5\x34\x89\x56\x97\xD1\x85\x82\x8B\x1A\x89\x5F\x75\xBB\x81\xD2\x1A\xDE\xFB\x7E\x5D\x95\xCF\x8F\xA2\x8B\x1E\x8E\xBF\x8D\x3F\x8C\x0C\x1A\xEF\x30\x9F\x68\x91\xC3\x84\xB0\x88\x07\x8E\x47\x8A\x37\x86\xE6\x10\x94\x30\xA8\x19\x79\xD7\x8A\x71\x89\xB8\x89\x66\x8B\xE1\x8A\x9B\x15\xE6\x0B\xBF\x51\x9C\x74\x80\x7A\x84\x0B\x8C\x70\x83\x2B\x85\xA3\x1A\x9C\x36\xB4\x5C\x8B\xAD\x87\xA9\x8A\xF3\x85\xA6\x8D\xD7\x8A\x11\x1B\x81\x31\x93\x6C\x83\xC4\x8D\xA4\x8D\x10\x8F\x93\x8D\x82\x88\x61\xDC\x32\xAC\x50\x90\x46\xD7\x83\xA0\x5C\x56\x8D\xB7\x64\x64\x8D\x6D\x11\xCA\x35\xAF\x45\x9A\xA6\x87\xCB\x84\x9B\x8B\x8A\x86\x5F\x8D\x93\x10\xCD\x29\x8B\x28\x9B\x64\x8A\xA2\x8A\x65\x8C\xBA\x8D\x51\x7A\x57\xFD\x24\x31\x8A\x43\x84\xAC\x8C\x0C\x8F\x26\x8F\x3F\x88\x81\x8D\xC9\x15\x95\x36\xAE\x3F\x8C\xAC\x8A\x81\x85\x31\x7F\x58\x8A\xFC\x8A\x65\x15\x80\x15\xA7\x55\x8D\xDA\x8A\xB0\x8D\x20\x8F\x30\x7C\xE2\x7D\x4B\x19\x86\x2A\x84\x61\x8F\x87\x84\xB4\x89\x1E\x8A\xD1\x8D\x79\x88\xF4\x1A\xE7\x85\x77\x55\x96\xCA\x80\xE1\x05\xE4\x84\x86\x82\xAE\x8C\x01\x01\x3C\x36\xA1\x08\x7E\xD9\x8C\xBD\x68\xB4\x86\x62\x87\xB5\x8D\x08\x15\xED\x36\xB1\x45\x8F\xDB\x83\x17\x89\x6E\x8C\x4E\x89\xDB\x8A\x2F\xB6\x23\x15\x91\x45\x9E\xD3\x83\x15\x8C\x6C\x8F\xE9\x7C\x47\x8C\x76\x19\xDD\x31\xBC\x6B\x88\xC8\x8A\x97\x8A\x21\x8D\xCC\x8D\x54\x8C\x33\x1B\xAB\x31\xB5\x6C\x9A\xC4\x83\x60\x84\x2D\x8E\x21\x8B\xD6\x3B\x58\x19\xCF\x1E\x89\x51\x9B\xCA\x8A\xA6\x89\xA5\x2E\xDE\x8D\xFF\x65\x7C\x1B\xF4\xE6\x5A\x43\x82\xB8\x75\x75\x8E\x4E\x84\xBC\x8C\x9A\x88\x76\x1A\xA0\x1E\x9B\x5D\x88\x65\x85\x95\x8B\xD8\x79\xB1\x84\x7D\x86\x7B\x11\xF0\x32\x9A\x44\x7F\x51\x07\xBA\x8A\xCF\x69\xEA\x8D\x41\x7B\xAB\x1B\xED\xFA\x6D\x6E\x9F\x72\x8D\x60\x81\xCC\x85\xEC\x8C\x9B\x88\x86\x1B\xED\x18\xB9\x01\x64\x51\x74\xC8\x70\x31\x8E\x96\x83\xBD\x87\x5C\x13\xAD\x93\x6F\x35\x8F\xB9\x83\x83\x75\x47\x8B\xE3\x8D\x50\x8C\xA9\xFB\x23\x31\xB3\x64\x93\xDA\x86\x8A\x8D\xB0\x88\xC0\x8D\xC2\x8B\x9D\x1A\x87\x2F\x9F\x6A\x80\xBA\x83\xA2\x8C\x01\x8F\xD0\x8B\x78\x83\x00\xE8\x53\xE3\x7E\xC4\x74\xDE\x89\x00\x6E\x7A\x8F\x66\x8D\x8E\x8D\x0A\xFD\x0A\xF1\x49\x36\x82\x61\x87\x50\x8F\x8C\x86\x11\x8C\x65\x87\xF2\x1A\xB0\x21\x91\x36\x86\x49\x87\x07\x86\x0B\x78\xCA\x8A\x74\x82\x22\xF7\x40\x00\x98\x36\x92\x9E\x83\x03\x7C\x2B\x5E\xFB\x8D\xD8\x8C\xD4\x1A\xD1\x36\x9B\x6F\x97\xAA\x8F\xB2\x8F\x14\x8F\xE5\x8D\x71\x8C\x99\x1B\xD0\x31\x9A\x6D\x92\xC6\x80\x47\x6C\x57\x83\x0E\x79\xAF\x8B\xE5\x13\x8D\x1C\x37\x51\x75\xDE\x8E\xB4\x8D\xEF\x8A\xD9\x8C\x78\x7C\xD6\x1A\x9A\x34\x8A\x68\x9C\xD0\x8A\xAD\x8E\x43\x8F\x92\x8C\x4C\x8C\x9B\x1B\xAD\x31\x98\x3F\x79\xB7\x84\x3B\x65\xC5\x7D\x80\x65\xE8\x87\xE6\xA1\x3C\x38\x1D\x70\x86\xD5\x8C\x56\x8A\x84\x89\x82\x8C\x6C\x8D\xA1\x19\xC9\x34\xBD\x65\x87\xE1\x8E\x90\x8E\x5B\x8C\x44\x8C\x00\x8D\x0E\xF0\x02\x34\x81\xD5\x47\xE0\x88\x9C\x8A\x5F\x8E\xA5\x8C\xFB\x8C\x1F\x19\xF8\x33\x8C\x63\x9F\xDE\x81\x82\x89\x82\x8D\x39\x8D\x09\x8E\xE7\x18\xB7\x36\xB0\x3F\x94\xD0\x83\x29\x34\x88\x8E\x77\x8D\x04\x8E\xE0\xFD\x2D\x36\x9F\x40\x8A\xE2\x81\x92\x8F\x81\x8C\x43\x8C\x1E\x8E\x25\x19\xBE\x38\xA1\xCC\x45\xDF\x8C\xA7\x70\x80\x8E\x89\x8D\x9F\x83\x28\x1A\xC1\x0E\xB8\x14\x92\xB5\x82\x8D\x79\x6E\x1F\x0C\x8F\x4A\x8D\x9C\xFD\x48\x38\xA2\x65\x8F\xD8\x81\x8E\x8E\x8B\x8F\x48\x8C\x30\x8E\x7F\x19\xE2\x38\x81\x66\x8D\x55\x63\x44\x8C\xBA\x6F\xD3\x83\xFA\x8B\x70\x14\xFE\x94\x5B\x51\x9F\xD1\x8F\xC0\x7F\x47\x06\x15\x8F\xF9\x8C\x46\x1C\xF1\x38\x8D\x6C\x94\xCD\x84\xC7\x8D\x1E\x8C\x79\x8D\x7B\x8C\x58\x1B\xBE\x2E\xA3\x6F\x89\xBC\x88\xBC\x86\xDB\x88\x55\x83\x2D\x8A\x2C\x10\xBE\x2B\x9C\x96\x0F\xE3\x8F\x83\x8B\x78\x7C\xDF\x7B\xB4\x8D\x46\x15\xEE\x35\xA4\x52\x85\xDE\x8E\xF1\x87", -"\x78\x8F\x25\x8B\xE4\x8D\xB6\xFB\x57\xC5\x19\x2F\x84\xDB\x6D\x03\x88\x7E\x87\x11\x8A\xC6\x8D\xA3\x1B\xE9\xF8\x55\xD4\x7B\xB1\x85\xB6\x8C\x9C\x7E\x41\x8D\xC9\x8D\xE1\x19\x95\x37\x8E\x67\x96\xE3\x88\x9B\x88\x8F\x8D\x69\x8C\x3D\x8E\xB5\x15\x97\x06\xB2\x15\x9C\x3B\x83\x05\x8E\x95\x8F\x0F\x89\x44\x8A\x47\x0E\xF4\xF9\x49\x04\x07\xE4\x85\xA0\x89\x91\x8D\xD4\x8B\x75\x8D\x70\x1A\xEC\x1C\xB8\x6A\x93\xA4\x87\x80\x8A\xCA\x86\x29\x8E\x65\x8A\xB3\x1B\xBC\x9B\x63\x27\x9B\xA4\x8E\x8F\x74\x99\x8F\x85\x8C\x2C\x8E\xE2\xE0\x50\x39\x81\x6F\x89\x66\x82\xCA\x88\xA9\x89\x35\x8F\x4A\x8A\xD7\x1C\x8C\x2A\xA8\x72\x90\xFD\x3B\x4A\x8A\xEA\x87\x32\x8E\x4E\x8E\x52\x18\x91\x2F\xA8\x6A\x8B\xBB\x87\x04\x8F\xFA\x88\xF3\x80\x92\x8D\x09\x08\xA6\x36\x8D\x79\x71\xD5\x89\xD2\x2E\x9B\x8C\x8B\x8C\x67\x8E\x77\x19\xA1\x38\xBD\x6B\x9A\xE5\x83\x9E\x8C\x97\x8C\x74\x8C\x27\x8E\x3A\x19\xD0\x38\xBB\x63\x80\x08\x8A\xB4\x8C\x85\x84\xD4\x81\xA1\x55\x23\x15\xB4\x39\x97\x6F\x94\xC5\x89\xBD\x8E\x16\x8C\x41\x8A\x55\x8D\x36\x08\xEE\x2E\xA3\x6C\x99\xBE\x85\xB2\x88\x1C\x81\xB4\x8C\x0E\x8E\xB5\x1C\xB5\x31\x92\xF3\x77\xC5\x8B\x47\x8A\x80\x89\xE5\x8A\x3F\x8A\x05\x14\x80\x29\xBB\x54\x9A\x4C\x80\xB0\x72\xD0\x86\xB8\x8D\x26\x61\xEF\x14\xCA\x39\x9B\x72\x81\xE9\x85\xD1\x8B\xA4\x8F\x45\x8E\x5C\x8C\xF7\x14\xBA\x31\xA8\x51\x9C\xC5\x84\x57\x8F\x55\x8E\x1F\x81\xE8\x83\x54\x0C\x99\xC3\x7E\x73\x83\xD2\x80\xCE\x88\x43\x77\xB1\x8D\x43\x8D\xC9\x1A\xD8\x29\xB5\x32\x82\xDC\x8A\x50\x89\x9D\x8F\x97\x8C\xA4\x8D\x6A\x1C\xA2\x78\x48\x6C\x80\xE9\x83\xD1\x88\xB0\x7F\x07\x8E\xEC\x7D\x72\x1C\x98\x35\x9C\x71\x96\xC9\x8C\xC4\x8E\x19\x8C\x42\x8E\xB4\x8C\x0A\x1D\xBC\x32\x82\x66\x8D\xE8\x80\xED\x81\xA4\x8B\xCF\x5F\x21\x8E\xF0\x1C\xE7\x30\xB2\xF6\x6A\xE0\x8A\xC5\x8D\xB5\x89\x03\x8E\xEF\x8D\x8F\x1C\xE6\x32\x9F\x75\x92\xCE\x81\xD6\x8A\x2D\x8F\x34\x8C\x86\x80\xD5\x18\xD9\xC2\x43\x75\x95\xD2\x86\xAC\x88\x6D\x8C\xD0\x8D\x21\x8C\x42\x1B\xC6\x29\x8F\x65\x87\xC2\x84\xB8\x89\x09\x8C\x25\x8F\x44\x86\x0D\xF0\x2E\xEC\x7A\x6C\x8E\xAD\x5B\xD7\x8D\x4D\x8D\x5F\x8F\x4F\x8E\x7F\x1D\xCC\x32\x8A\x75\x8E\xCA\x8C\xD4\x88\x2A\x8C\x38\x88\x08\x83\xE2\x10\xC8\x14\x9D\xD6\x7E\x77\x88\xB7\x8E\x8D\x8C\x4D\x8E\x3D\x8C\x16\x1D\x94\x2A\x99\x45\x94\xDA\x8B\x15\x8E\x1F\x89\x57\x88\xC2\x8E\xF9\x1B\xE0\x22\xAB\x73\x80\x55\x89\x92\x8D\xC0\x80\x45\x8D\x73\x7F\x96\xB4\x0D\x3B\x84\x6A\x85\xEA\x8C\x1D\x7A\x9C\x8F\x00\x8D\x6D\x88\xD9\x1A\xD6\x2E\xA4\x72\x86\x7A\x87\xD9\x88\xE9\x85\x66\x8F\x9E\x8C\xBC\x0C\xE2\x2A\x8E\x3C\x9A\x87\x7C\x13\x8C\x1F\x7A\xCE\x87\x19\x84\xE1\xDC\x06\x39\xA9\x75\x86\xC6\x80\xB5\x89\x8B\x8D\x56\x8E\x97\x8D\x5B\x1D\x9A\x35\xB1\x75\x9B\xCF\x81\xC9\x89\x1F\x8D\x5D\x8E\xEA\x8C\x34\x0F\xD0\x20\xB7\x33\x9E\x41\x88\xF3\x86\x78\x81\xD8\x74\x4E\x6B\x7C\x16\xC5\xFB\x6F\x73\x9F\xEC\x8A\x81\x8A\x7B\x8D\x5B\x8E\x9A\x8C\xD1\x1D\xB0\x36\xBA\x70\x83\xCD\x8E\xCB\x8A\x37\x8D\x0A\x8E\x8A\x88\x9D\x1B\xE0\x1E\xB4\x6D\x93\x55\x82\xDC\x7D\xCC\x7D\xD4\x87\xFA\x81\xCA\x1D\xE4\x3B\x9C\x63\x86\xEF\x8F\xDC\x8B\x8B\x8D\x23\x8E\xB2\x8C\xD3\x1D\xB4\x34\xB3\x75\x87\xCF\x87\xDD\x89\x3D\x8C\x70\x8E\xBB\x88\xBF\xF3\x75\x10\xB9\x45\x98\xDD\x8C\xAB\x74\x2F\x89\x06\x59\xFC\x8E\x55\x1D\x84\x32\xB6\x72\x87\xDB\x80\xD9\x88\xA9\x8D\xD0\x8D\xC9\x8E\xCB\x1A\xE7\x39\x8A\x55\x9D\xED\x88\x4A\x8F\xB7\x8F\x58\x8F\x70\x8D\x7A\xD6\x4F\x2B\x8E\x74\x79\xAD\x8F\xBC\x8E\x4D\x71\xF4\x8C\x8A\x6E\xD3\x1B\xB9\x81\x5C\xE5\x53\x91\x81\xE1\x8B\x74\x8B\x84\x8E\x10\x8E\xB6\x1D\xB7\x38\x84\x60\x83\xDE\x8C\xF1\x83\xB7\x8E\x29\x8A\x0E\x8F\x4C\x15\xB1\x0A\x92\x36\x81\x46\x86\xDF\x54\x6A\x86\x4A\x6F\xD3\x87\xB7\xC0\x03\xD0\x63\x37\x89\x80\x6C\xE2\x8F\x7D\x8F\xCA\x8C\x6A\x8A\xB5\x1A\xD1\x39\x97\x53\x93\xE6\x89\x4D\x8F\x75\x8F\x36\x8B\xD4\x8E\xDD\x14\xA6\x2E\xA4\x71\x99\xD3\x87\xBE\x89\xF2\x86\xBC\x83\x9F\x84\x04\x1C\x97\xFC\x6B\x78\x8B\xEE\x85\x97\x88\x1E\x8E\xBA\x8D\xA3\x8E\xEC\x1A\xDD\x1C\xB4\x78\x84\x7A\x86\xE3\x8B\xE4\x88\x8E\x8F\x92\x8B\x1E\x1E\xBA\xA9\x62\x4F\x8E\x4A\x8E\x04\x84\xD7\x8A\x76\x8C\x12\x7F\x5B\x1E\xFA\x3B\x91\x6E\x9C\xEF\x8B\xC8\x8C\x39\x8C\x41\x8E\x19\x8D\x01\x1E\x9C\x35\x95\x77\x9D\xCF\x8F\xDE\x8F\x3F\x8E\x9A\x8F\x6C\x89\x08\xC1\x14\x0E\xB9\x4F\x90\x28\x80\xFE\x60\x8C\x4D\x91\x8E", -"\x04\x8E\x00\x1D\x92\x37\x82\x74\x94\xDC\x87\xA4\x8B\x2F\x8F\x7A\x8F\x06\x8D\xED\x1D\x8F\x34\xBD\x79\x91\xD0\x86\x82\x89\x40\x8D\x85\x4B\xA0\x5A\x87\x1E\xC5\x38\xB0\x6F\x9A\xBD\x8B\xD0\x7E\x6F\x8C\xFD\x8C\xC0\x8D\xF6\x1B\x83\x3B\xB8\x6F\x8E\xEA\x8E\xA8\x88\xAA\x8D\x25\x8F\x29\x8E\xAE\x19\xA9\xBA\x19\x7A\x97\xE2\x89\xE8\x8C\xCE\x8C\x2E\x8E\x18\x8D\x77\x1E\xFF\x35\xB9\x79\x81\xD8\x83\xE0\x8E\x46\x8F\xA4\x8E\x11\x8D\xA8\x19\xFE\x37\x82\x5D\x85\xD1\x8E\x73\x83\xCB\x40\xD0\x82\xB4\x74\xF5\x0D\xA5\x37\xA7\x6E\x2B\xF5\x88\xC8\x8B\xD3\x8C\x10\x8D\x4E\x8F\xBC\x17\xFF\x36\x81\x76\x85\xC2\x82\xEA\x8C\x76\x86\xA7\x8D\x02\x8F\xA0\x1A\xC2\x28\xBA\x68\x87\x70\x88\x7C\x8F\xFE\x8B\x77\x8E\xAA\x83\x32\x14\xAA\x3D\x9C\x79\x99\xC3\x85\xDE\x89\xB4\x8C\x1F\x8D\x3D\x88\x6F\x1D\xD5\x36\x9D\x75\x98\xC9\x85\xEB\x8B\x60\x8F\xAD\x8E\x1C\x8D\xE8\x18\x97\x01\x9A\x51\x8A\xBE\x81\x9B\x84\x8D\x8E\x2B\x6F\x22\x8B\x72\x1E\xDE\x3C\xAC\x75\x9D\xEF\x8E\xD6\x89\xBD\x8E\x03\x8F\x47\x8F\x12\x1B\x91\x3D\xA0\x68\x87\xF7\x85\xB0\x8A\x98\x8D\x1F\x8F\x5B\x70\xAD\x1C\x9F\x37\x87\x73\x9A\x79\x82\xCB\x8D\x8D\x8C\xB1\x8F\x66\x8E\xC6\x1E\x9E\x39\x81\x61\x91\xEC\x8A\xB6\x8B\xD9\x8C\xDB\x8C\x27\x8F\x45\x1B\xD0\x3C\x87\x6D\x8B\xED\x8B\xEB\x8D\xC0\x85\x79\x48\x07\x8C\x7C\x1A\xF2\x17\x88\x73\x8F\xCC\x8A\x3A\x8F\xE0\x8F\x37\x8F\x56\x8F\xDE\x1E\xD2\x36\x8C\x70\x96\xF7\x80\xD7\x8E\xA0\x8D\x79\x8D\x72\x8F\x59\x1B\xFC\x3D\x96\x6C\x80\xE2\x84\x54\x38\x05\x8D\x66\x70\x8F\x8F\xFF\x1C\x89\x3E\x9D\x66\x8B\xF4\x89\xCB\x8D\xD1\x8E\xE5\x8C\x7C\x8F\x32\x1B\xFA\x3D\x94\x6C\x8A\xF9\x8B\xB5\x89\x54\x8D\x63\x82\x87\x74\x64\xCE\x30\x3E\x84\x75\x80\xF9\x86\xD3\x8A\xB4\x8E\xC7\x8A\x65\x8F\x18\x1E\xC3\x36\x90\x7C\x8E\xDB\x82\xF1\x88\x6E\x8D\x36\x8F\xFB\x60\xFC\x1C\xC3\x3D\x9B\x7B\x90\xDC\x82\xEF\x8E\xB9\x8D\x9D\x8F\xFB\x8C\xFF\x1D\xB6\x33\xA6\x7C\x90\xE4\x88\xF2\x8A\x92\x8C\xB4\x8E\x25\x8C\x0C\x1D\xA0\x3C\x8F\x56\x82\xD6\x8D\x85\x60\xDE\x8D\x8B\x8E\xEE\x88\xDF\xFD\x61\x39\xA0\x79\x8A\xF2\x89\xA5\x8B\xCC\x8F\xEF\x8B\x32\x8F\x58\x17\xE7\x3C\x9A\x5D\x83\x6D\x4F\xD1\x8C\xC8\x8F\xD4\x8E\xEC\x8D\xA0\x1D\xC5\x3E\x9F\x7B\x9B\x84\x8D\xBD\x8A\xDC\x8F\xAC\x8E\xF0\x8D\x7B\x1E\xCF\x3D\xBC\x7C\x94\xE0\x80\xAE\x8F\x10\x8D\x72\x46\x72\x8D\x2F\x1F\xF7\x3E\x94\x74\x99\xFB\x85\xCE\x7F\xA6\x8D\x49\x8F\x5C\x8C\x27\x1D\x9A\x3A\xA9\x74\x98\xE7\x81\x48\x8A\x9F\x8C\xF4\x83\x38\x7C\xC5\x10\xD9\xC2\x42\x7D\x9C\xEB\x84\xDB\x8C\x4C\x7B\x79\x8E\xEE\x8D\xE1\x1E\xA5\x3B\x96\x6D\x87\xED\x83\xEA\x8A\xEE\x8F\xF0\x8B\xA7\x8F\x7B\xCB\x3B\xFD\x73\xD7\x72\x64\x6B\xF9\x8E\xB1\x8D\xE7\x8F\xC3\x79\x57\x1F\xC9\x38\x99\x7D\x99\xCF\x8F\xF7\x8D\x89\x8E\xCE\x8E\x9A\x8D\xC0\x1C\xCE\x34\x97\x6C\x89\x52\x86\xD6\x89\x52\x63\x20\x7F\xD6\x8F\xB3\x1D\xC4\x3E\x8D\x7E\x86\xFA\x88\xD1\x8F\x73\x85\x4E\x8B\x2A\x8A\x1D\x1D\xDB\x2F\xBC\x31\x90\xA9\x8B\xB1\x71\xE8\x8E\xE2\x8E\xAB\x8E\x2F\x1E\xD8\x3A\xB1\x7E\x93\xE3\x81\xEB\x88\x62\x8C\xCE\x8E\xCC\x8D\xB7\x1F\x9A\x37\xB9\x7E\x96\xD9\x8C\x9A\x82\x91\x86\x62\x8F\xA8\x7E\xAE\xB5\x40\x3F\x94\x6A\x9D\xE4\x83\xF3\x89\xC6\x8E\x91\x8D\x11\x8E\x48\x1A\xA5\x38\x8A\x69\x9C\xD6\x8C\xA4\x8B\xFB\x8C\xE7\x8D\xC2\x8F\xFD\x18\x9E\x07\xB3\x72\x80\x00\x02\xFE\x8D\x54\x8C\x1C\x8F\x67\x8E\x6B\x1F\xE3\x39\x9A\x3C\x8E\xFB\x86\x80\x88\xEE\x8D\xF0\x8A\xD3\x8F\x0A\x18\xA8\x3F\xB3\xA7\x72\xC8\x87\x12\x87\xB5\x8D\x4A\x80\x5D\x67\xF5\x1F\xE7\x35\x9E\x70\x91\xFE\x8D\x91\x8C\xDE\x8C\x7A\x8F\xD9\x8F\x4B\x1C\xB5\x3F\x9E\x75\x99\xFE\x82\xC1\x8B\xF0\x8D\x14\x8F\x03\x8F\x8C\xF9\x7D\xF2\x43\x77\x9B\x89\x87\x22\x06\xB8\x8F\x64\x8B\x71\x4F\x96\xB4\x09\x40\xBD\x6C\x8F\xEC\x8B\xF0\x8E\xC2\x8C\x60\x8F\xA4\x8F\x82\x1D\x95\x3B\xA8\x76\x84\xF5\x8D\xAB\x8C\xE2\x8C\x0B\x84\xC4\x8D\x85\xB9\x20\xF6\x41\x65\x8C\xF0\x82\x7D\x7B\xE7\x85\x67\x8E\x11\x90\x7B\x1B\xA4\x40\x88\x7B\x80\xE5\x8D\x7B\x8C\xFF\x8F\x96\x8C\x0D\x8F\x5D\x1A\xAC\x40\x8F\x6B\x8E\x01\x9E\x85\x82\xBE\x8E\x67\x85\xFA\x8E\x5B\x14\xF7\x3B\x94\xA3\x69\x08\x08\x03\x90\x75\x8E\x0E\x90\xF9\x8D\x9E\x1E\xF6\x1A\xB5\x6F\x9C\xA1\x87\xB5\x8D\xEB\x8E\x75\x8E\x0B\x90\x0B\x1D\xD9\x3B\xBF\xA7\x23\x56\x89\x48\x66\x2D\x8F\x5C\x60\x07\x8F\xC8\xA4\x3F\x14\x0D\x81\x9E\xDD\x8F\x04\x92\xB8\x8B\xFC\x8C\x29\x90\xA0\x1E", -"\xD4\x40\xA4\x7E\x8E\xF6\x82\xBE\x8F\xEB\x8F\x61\x8E\x77\x5C\xC3\x07\xCC\x80\x4C\x46\x8F\xEF\x76\xAD\x84\x40\x82\xDE\x86\x13\x8F\xD4\x15\xA6\xE1\x29\x4E\x84\xDD\x79\x22\x8F\xEC\x8D\xC1\x89\x85\x8D\x07\x1A\xE6\x3F\x97\x6B\x93\xF1\x89\xDB\x8E\x75\x8C\x10\x91\x3A\x8D\x00\x20\xD2\x32\x92\x79\x99\xF5\x8B\x4D\x7F\x7F\x8F\x62\x85\x00\x8E\x89\xDA\x2C\x2E\xBF\x74\x95\x53\x7C\x79\x8D\x90\x8E\x93\x8B\x78\x8F\xE9\x1A\xF3\x3D\x93\x7F\x9A\xEA\x80\x01\x95\x8B\x8F\xF5\x8E\x08\x8E\x14\x20\xCF\x38\x98\x81\x84\x27\x8C\x08\x97\xE3\x7A\x23\x91\xF8\x86\x90\x20\xD0\x27\x98\x79\x99\xBA\x55\x9C\x8C\x0F\x93\xF3\x8E\x09\x8F\x22\x1D\xC3\x3F\xBB\x7D\x95\xA8\x84\xDA\x8F\xA2\x8B\xB8\x8F\x2A\x90\xA1\x20\x89\x3A\xA3\x82\x96\xEB\x85\xC1\x8D\xEB\x89\xDA\x84\x0C\x8E\xD9\x19\xBD\x1F\xB5\xA6\x7D\x03\x96\xE4\x8F\x69\x8E\x2E\x7E\x4D\x90\xAF\x1E\x8E\x36\x95\x7F\x95\xE3\x8F\x09\x97\x8B\x8C\xFB\x8E\x14\x8E\xEE\x1F\xAA\x38\x96\xD2\x60\xF4\x8D\xC2\x8A\xD0\x8E\x8B\x7E\x42\x8F\x90\x01\x36\x12\x44\x83\x88\xF4\x82\xF3\x8B\x5F\x8C\xCD\x8E\x58\x8F\x36\x1F\xBB\x39\x8D\x83\x97\xE3\x8F\x0C\x95\x87\x8C\x66\x8F\x6F\x8D\xB9\xF2\x09\x28\x99\xA1\x60\xE3\x4B\x0D\x92\xD3\x8F\x91\x8E\xE9\x8B\x36\x1C\xE7\x3F\xB8\x70\x8B\xD0\x83\x0E\x95\x97\x8D\x39\x91\x30\x8E\xE7\x20\xBF\x38\xBF\x79\x9D\x4B\x85\x09\x93\xB6\x7A\xC0\x31\x76\x90\xAC\x1E\xDD\x41\x87\x71\x9B\x04\x90\xDD\x8D\x13\x90\x57\x8E\x09\x90\xE4\x1E\xB9\x41\xA0\x75\x9B\x05\x99\x73\x84\x7F\x8D\xB7\x82\x31\x7A\x55\x1E\xF2\x1B\x83\x40\x84\x92\x74\x7B\x8B\xFE\x8C\x40\x91\x62\x8F\xEF\x20\xD3\x30\xB1\x83\x83\x04\x98\xDB\x89\x87\x8E\xFA\x8F\x1D\x8E\xF7\x20\xF9\x38\xB9\x83\x87\xC9\x85\x82\x5B\x6C\x6C\x96\x7E\x81\x8F\x55\x10\x80\x06\xBD\x55\x8D\x08\x37\x11\x90\xE1\x8D\x46\x90\x79\x8E\x1B\x21\xA2\x38\xB3\x83\x84\xE1\x8A\xDB\x8E\x1B\x8A\xF1\x8D\x44\x90\x77\x1A\x82\x40\xA7\xC7\x79\x83\x7C\xE1\x80\x4D\x8D\xBB\x8F\x07\x84\x4C\xAC\x2D\x42\x9F\x7C\x82\x08\x9A\xC8\x89\x19\x90\x23\x8F\x65\x90\x8E\x1C\xDB\x3E\xB2\x75\x8A\x08\x94\xD7\x8C\x21\x92\x81\x8F\x47\x78\xFF\x1E\xF2\x87\x41\x7C\x8F\xA3\x8F\x77\x86\xDA\x8E\x45\x7D\xE1\x84\xE1\x1D\xAA\xF8\x57\x82\x9E\x03\x9A\x37\x88\x10\x92\x8B\x8C\xA3\x90\x76\x1E\xE1\x41\x85\x74\x95\x07\x97\xD0\x8C\x29\x90\x81\x8E\xA7\x90\xD1\x1E\xBA\x20\x84\x52\x98\xF8\x8E\x2F\x81\x38\x86\x35\x87\x52\x79\x1C\x1F\x83\xF9\x42\x85\x91\xF9\x8F\x12\x97\x54\x8D\x4C\x91\x81\x8E\x62\x21\xF8\x3C\x8A\x85\x94\xEE\x86\x05\x94\xCF\x8D\x34\x90\xF8\x8E\x99\x87\x57\x1C\xB2\x85\x8F\x05\x9E\xE2\x89\x16\x93\x2D\x8F\x6F\x90\xCA\x20\xF9\x42\xB2\x7A\x9B\x0B\x92\xE0\x8E\x2C\x92\xAD\x8F\xBF\x90\x7E\x1E\xE8\x09\x6D\x73\x91\xE1\x89\x10\x03\x2E\x93\xD0\x8E\xA2\x90\xF8\x1F\xFE\x3A\xA6\x80\x92\xEC\x8C\xE4\x8B\xA9\x8F\xD2\x8F\xC1\x8D\x4D\x1F\x85\x37\xBA\x84\x9D\xC4\x5C\x84\x8D\x45\x7B\x56\x91\x62\x90\x0B\x20\x86\x43\x94\x78\x85\x01\x91\xE6\x8A\x94\x89\x39\x8F\x90\x8B\xFE\x1F\x88\x30\xB8\x84\x92\xDD\x89\xE6\x8F\x15\x78\xB0\x8D\x41\x87\x0F\x1D\xA3\x88\x51\x74\x80\x00\x06\x19\x94\xF3\x8E\xF0\x8F\xC3\x90\x82\x20\xB2\x42\x84\x82\x9E\x08\x95\x13\x93\x5B\x8F\x4D\x91\x6E\x8D\x23\x21\x99\x65\x75\x7D\x9E\xDD\x7D\x1B\x96\xF5\x8F\x6F\x91\xD5\x90\x3B\x20\x8C\x3E\xA1\x72\x9E\x01\x93\xA7\x8F\x10\x90\xA3\x8C\x21\x90\xF3\x1A\xA3\x43\x8A\x6F\x94\x46\x53\xA2\x84\x03\x06\x36\x90\xC2\x90\x68\x1F\xDE\x42\x9F\x79\x9A\x0C\x9D\x1A\x90\x51\x8F\x6B\x90\x45\x8D\xD6\x21\xBB\x35\x98\x87\x9A\xDF\x84\x04\x90\xD8\x8C\xE6\x8F\xA0\x8E\xD6\x18\xBC\x43\xA0\x87\x9F\x03\x97\xD5\x8D\x01\x90\x41\x90\xFF\x8E\x48\x21\x80\x3C\x8C\x86\x9A\xF3\x8D\x17\x92\xF0\x8C\x64\x90\x4A\x8F\x06\x1B\xD2\x3A\x90\xAC\x63\x06\x93\x1F\x95\x2B\x91\x7D\x90\xE5\x8C\xF7\x21\xF5\x3D\x86\x84\x92\xEE\x8B\x1F\x94\xD6\x8E\x63\x90\x73\x8F\xFF\x21\xCB\x2B\x9A\x76\x96\x8C\x6F\xC6\x82\xA4\x89\x50\x5B\xE6\x90\xC1\x1F\x98\x43\x81\x74\x81\x0E\x98\x17\x90\xFD\x8E\xA3\x8F\x8F\x90\xEC\x1D\xA1\x42\xBF\x72\x89\x0E\x91\xCC\x8E\x4A\x86\x3D\x89\x0B\x91\x05\x22\xE7\x25\x8C\x7E\x80\x0E\x99\xFF\x8F\xB6\x8C\xEB\x8D\x42\x90\xC4\x1B\xB6\x42\xA5\x72\x93\x0D\x98\xBC\x8A\x3B\x90\xA9\x6C\x9C\x8D\x8B\x0C\xEB\x31\xB3\xA0\x78\x10\x93\xFE\x89\x9E\x8E\x5D\x90\x28\x8A\x3C\x20\xC8\x3E\x9D\x86\x94\xEC\x8F\x19\x95\xA9\x8C\x8D\x91\x53\x8E\x36\x22\xEC\xAD\x5E\x61", -"\x8F\x21\x52\xFF\x8D\x8D\x8C\x8F\x90\xFB\x8F\xE4\x1F\xDE\x41\x9C\x88\x8C\xF4\x8E\x21\x97\xE6\x8C\x88\x90\x48\x8F\x22\x22\xEE\x3B\x91\x88\x88\xF7\x8B\x96\x8C\x00\x93\x85\x68\x94\x88\x63\x1B\xBA\x9D\x4F\x89\x8A\x00\x94\xC3\x8B\xE3\x8B\x3C\x8F\xC9\x8B\x26\x1D\xC8\x27\x96\x5E\x9A\xA7\x8A\xD2\x8E\x17\x8E\x5D\x8B\xE0\x8E\xFD\xFE\x70\x17\xB6\x6D\x9F\x89\x8D\xD9\x8B\x4C\x93\x08\x91\xD7\x8F\x82\xF6\x5A\xA1\x7A\x7F\x91\xD3\x84\x1D\x97\x5D\x8D\x7A\x91\x66\x8D\xEB\x21\xAA\x3B\x89\x89\x8C\xED\x86\x04\x92\xFF\x55\x77\x8E\xA1\x8C\x35\x20\xC4\x32\xAF\x81\x67\x0D\x9C\x0D\x95\x2E\x91\x0D\x8E\x20\x91\xD2\x21\xBD\x40\xB0\x88\x95\xF1\x82\x23\x94\xB7\x8C\x72\x90\xDF\x8E\xE8\x20\x98\x98\x4E\x21\x98\xAD\x84\xDF\x89\x74\x8F\x59\x88\x31\x91\x29\x22\xE3\x26\x95\x7D\x8A\xFB\x84\x1E\x94\xED\x8F\xAD\x8D\xF3\x90\xB9\x1A\xFF\x44\xB1\x6B\x81\x14\x91\xE5\x8D\x36\x92\xA6\x90\x18\x90\x51\xB6\x61\x07\x89\xD0\x6C\xF7\x83\x12\x7C\xC5\x88\x52\x7C\x46\x91\xEE\x20\xC6\x41\xA5\x5F\x88\x06\x98\x18\x97\x28\x92\x62\x90\xEB\x8F\x57\x22\xF9\x3D\x99\x89\x92\xF4\x8B\x25\x95\xDF\x8F\x87\x8E\xF3\x83\x22\x1E\xAE\xE2\x4F\x46\x97\x1F\x84\x42\x7B\x6D\x76\x71\x49\x3D\x90\x4D\x18\x82\x02\x17\x59\x88\x0D\x95\x26\x96\x63\x8E\xE4\x8A\xCD\x8A\x37\x15\xBB\x28\xAB\x54\x85\x4C\x81\x77\x8C\x74\x86\x43\x90\x69\x84\x2D\x14\x80\x1B\xAC\x66\x8C\x49\x84\xC5\x8A\x60\x33\xB4\x91\x46\x91\xBA\x22\xE8\x30\xBC\x8A\x93\x12\x95\xF3\x8D\x4A\x92\x38\x91\x60\x91\x39\x1F\xC3\x45\xBB\x7B\x85\x16\x9D\xD7\x85\x37\x8C\x65\x86\x5E\x8F\x19\xE8\x03\x38\xAC\x82\x9A\x6C\x83\x83\x77\x5C\x91\xAE\x91\xD4\x90\x35\x1D\xB2\x41\xA2\x7C\x9D\xC3\x8B\x20\x92\xBD\x8C\xBC\x90\xEC\x8F\xF2\x22\xBB\x3E\xB4\x8B\x9D\xF9\x89\xEE\x89\xE0\x80\x9B\x8E\xD6\x86\x11\x18\xD3\xC3\x5A\x70\x92\x41\x79\x00\x6E\x5F\x91\x40\x90\x47\x91\x66\x22\xF7\x42\x94\x89\x93\x09\x99\xFE\x8D\x38\x92\x09\x8F\x84\x91\xB8\x1F\xA4\x44\xBA\x7E\x9D\x05\x9B\x9E\x8F\x2B\x84\x70\x87\x41\x8F\x7F\xDD\x53\xEE\x64\x39\x76\x18\x98\x11\x91\x5D\x93\x5A\x8E\xAB\x8F\x60\x21\xD8\x3E\xB9\x87\x9A\xFA\x84\x16\x97\xE4\x8F\x83\x91\x94\x8F\x0B\x23\x84\x3F\xA9\x83\x96\xF1\x71\x97\x81\xA8\x58\xCB\x90\x97\x90\x2E\x23\xB5\x2E\xAB\x8B\x8D\x11\x92\xE3\x8D\x23\x90\x3D\x91\x83\x91\xA0\x20\xA0\x46\x9A\x7F\x82\x19\x9C\xFD\x8C\x64\x91\x78\x87\x23\x65\xFD\x20\xE9\x2A\x84\x90\x3F\x19\x93\x14\x90\x63\x92\xB5\x91\x33\x91\xD8\x22\x94\x2F\xAA\x89\x88\xE9\x87\x79\x8D\x4D\x90\x6D\x78\x7B\x91\x61\x1A\x90\x1F\x92\x84\x9C\x03\x8B\xBA\x82\xD7\x64\xD5\x90\xBA\x90\x41\x23\xAC\x36\x8E\x80\x80\xFD\x84\xF2\x8E\xEF\x8D\x83\x90\xC0\x8F\xFD\x21\xED\x40\xA8\x85\x80\xFB\x89\xA3\x8A\x4C\x8C\x11\x8A\x04\x87\x56\x21\xBC\xA0\x44\x72\x9E\x07\x93\x35\x91\x54\x91\xD3\x89\xFD\x8E\x21\x1F\x8B\x38\x84\x8C\x93\x19\x94\xFB\x8F\x6D\x92\xED\x8E\xA5\x91\x15\x20\xB9\x46\x97\x80\x8E\x1A\x96\xC9\x8D\x27\x93\x4B\x8E\x5D\x74\x9D\x1D\xE7\x46\x97\x86\x96\x1A\x91\xBF\x8E\x0C\x91\x14\x90\xE2\x8A\x25\x1F\xB5\x46\x9C\x7D\x97\x19\x9E\xF5\x8B\x6E\x93\x1B\x90\xE7\x89\x51\x21\xE2\x8F\x53\x85\x80\xE4\x85\x15\x91\x8E\x8B\xB5\x8F\xFC\x8B\xC2\x1E\x9B\xBE\x12\x8E\x9E\x0D\x9A\x21\x92\xD1\x8C\xBB\x90\x70\x90\xEE\x22\xE3\x42\x88\x8D\x8E\x06\x97\x1C\x95\xFD\x8C\xD3\x91\xF7\x8F\xC9\xCA\x7B\x0E\x90\xFF\x7D\x3B\x84\x15\x95\x16\x81\x8F\x8D\x8D\x8F\x2C\x03\xFE\xD1\x6B\x8E\x8E\x0E\x9D\x3A\x96\xD5\x8D\xAF\x91\xB0\x90\xB1\x23\xFA\x42\x9A\x8E\x8B\x0A\x98\x38\x92\x14\x92\xE2\x91\x2C\x90\x95\x1E\xD1\xB7\x27\x41\x80\xE3\x43\x3C\x91\x43\x90\xE5\x90\x4E\x8F\x50\x20\xC9\x3D\x9F\x7A\x8E\xF8\x81\xB8\x8D\x48\x92\x65\x8F\x4B\x91\x1D\x1E\x99\x45\xB5\x34\x53\x0C\x9F\x7A\x5F\x24\x01\xF5\x91\x1E\x91\x6A\x1D\xC2\x46\xB0\x8C\x87\x1E\x92\x33\x97\x57\x90\x33\x91\xD9\x91\xE4\x20\xB5\x47\x90\x83\x97\x1D\x92\x0D\x96\x61\x65\x69\x90\x20\x8D\x06\x01\x67\x47\x90\x89\x9E\x11\x9F\x28\x92\x29\x8D\xA4\x90\x21\x91\xA8\x22\xD4\x39\xB1\x86\x96\xE6\x87\x24\x90\x9B\x8E\xAB\x90\xA7\x8A\x83\x19\xB8\x43\xA0\x61\x91\x1A\x8C\x49\x88\x00\x02\xFE\x90\x32\x91\xF7\x1F\x9B\x44\x84\x8D\x92\x07\x93\x1C\x97\x68\x92\xC7\x91\xF5\x8F\xF2\x23\xE6\x41\x98\x8A\x86\x45\x4B\x1C\x94\x74\x7F\x03\x93\x3B\x91\xCF\x21\xB0\x3C\x93\x90\x9C\x08\x9F\x22\x94\x38\x92\x21\x91\x01\x92\xE8\x1C\x85\x48\xAA\x73\x83\x14\x9F\xAB", -"\x89\x81\x93\xE3\x91\x5A\x88\x88\x1F\xF1\x43\x9F\x90\x99\x01\x98\x27\x96\x75\x8A\x1E\x8A\xD8\x89\x5A\x23\xE7\x29\xAB\x89\x9A\xC2\x83\x3F\x8B\xDF\x87\x30\x89\x84\x75\x9D\x18\xC2\x47\xBE\x8D\x99\x99\x8B\x22\x90\x3A\x91\xF6\x91\x20\x91\xDB\x23\xA8\x40\x8C\x7B\x8A\x01\x95\xFA\x88\x7C\x91\x8E\x8E\xF1\x91\xEB\xD5\x2A\x3F\x95\x43\x92\x64\x63\x43\x96\x09\x91\x0D\x92\xE2\x89\x37\x24\xC6\x27\xB9\x90\x98\xC2\x8B\x43\x92\xA7\x8A\x9B\x90\x7E\x8C\xBB\xB8\x19\x36\x81\x6A\x89\x08\x05\x45\x94\x0C\x93\x15\x92\xF6\x89\xD9\x13\xB8\x3A\xB0\x55\x98\xA7\x8C\xAA\x8D\x17\x8C\x3F\x8B\x93\x8D\x27\x22\xAB\x46\x83\x91\x97\x70\x67\x20\x94\x61\x8D\xCC\x90\xD9\x8F\x84\x23\x91\x40\x86\x8E\x93\x00\x9D\x3C\x92\x17\x93\xF3\x90\xB1\x8E\xFB\x20\xDE\x3F\xBB\xE2\x6C\x64\x8E\x41\x93\x8E\x93\xE6\x88\xD5\x90\x22\x24\xA5\x45\xBB\x89\x92\xE6\x81\x40\x95\xC9\x8E\xAA\x90\xD8\x8D\x2A\x24\xCF\x3A\xAD\x87\x89\x8C\x84\xD6\x88\xAA\x8B\x09\x7A\x77\x8F\xFF\x18\x8E\x48\x86\x92\x98\x9A\x8C\x00\x90\x41\x93\x1D\x92\xEA\x8F\xEE\x23\xC9\x42\x8B\x8F\x9C\x0B\x9C\x39\x97\x0A\x93\x1F\x92\x5E\x90\x12\x06\xAD\x3B\x94\x18\x80\x13\x9F\x01\x94\x75\x81\xE4\x91\x4D\x92\xF5\xD4\x0A\x3E\x91\x87\x9B\x0C\x9D\xF0\x8A\x89\x93\xC3\x8F\x47\x92\x4F\x1E\xAC\x45\x93\x7C\x8C\x21\x9F\x02\x92\x95\x92\x9C\x91\x95\x8C\x31\xC9\x11\x46\xA5\xB1\x56\xA4\x55\x46\x92\xC0\x6B\xEF\x8C\x3D\x91\x2E\x22\xC2\x37\x93\x8A\x84\xF3\x85\x29\x97\xC6\x8E\x13\x92\x34\x8F\x50\x24\xB4\x37\x8D\x45\x9B\x00\x94\x62\x86\x25\x04\xA9\x84\xD1\x8D\x42\x01\xC4\x49\xB0\x92\x9E\xB6\x67\x35\x92\x63\x91\xBB\x90\x8E\x91\x1F\x22\x97\x48\xA0\x84\x99\x20\x98\x0F\x93\x83\x90\x49\x90\x91\x87\x85\x22\xBC\x34\x95\xC4\x74\x1E\x8A\xF3\x82\x09\x90\x85\x74\xF3\x91\xDB\x24\xC4\xB7\x5D\x93\x90\x14\x94\x4B\x93\x3A\x93\x32\x93\xB7\x8F\xCD\x24\xE6\x3C\x8F\x93\x93\xFB\x81\x4D\x92\x35\x6B\x34\x93\x9F\x8C\x1F\xF1\x63\x1E\xA5\xF9\x60\x03\x90\xFF\x5F\x47\x05\x31\x93\xCA\x38\x21\x24\xD2\x3F\x9F\x92\x9C\x04\x99\x47\x96\x13\x90\xFC\x90\x7B\x90\xE4\x24\xA2\x42\xA6\x93\x9B\xE3\x86\x1B\x96\x85\x91\x88\x8F\xC2\x8C\x0C\x0D\xDC\xCE\x52\x57\x9B\x9A\x89\x07\x90\x56\x34\xB4\x90\xD3\x90\x09\x01\x0A\x2D\x94\x8B\x91\x20\x9E\x3A\x93\x84\x92\x70\x90\xA3\x91\x34\x21\xA7\x48\xB9\x93\x91\xFB\x8B\x4F\x97\xF4\x8E\x8E\x8F\x6F\x91\x3D\x0B\xA0\x47\xAB\x66\x9F\xF1\x82\x03\x80\x17\x60\x4E\x5E\x08\x52\x22\x25\xE8\x45\x80\x8C\x85\x22\x99\x48\x95\xC2\x8D\x79\x91\xA4\x8E\x43\x22\x99\x3C\xA8\x90\x9B\xF0\x8D\x52\x91\x00\x93\x4B\x92\xDC\x89\x98\x02\xBA\x3D\xBE\x66\x82\x1B\x99\x0A\x92\xC2\x7E\xD1\x8B\xE1\x8C\xB1\x02\xFC\x45\x89\x40\x79\x29\x9F\x2F\x95\x5A\x91\xE5\x91\x8F\x8D\x67\x20\x98\x47\xAE\x8D\x83\x25\x9D\x18\x95\x8F\x93\x42\x91\x53\x92\xD8\x1D\x8D\x46\x96\x67\x83\x9F\x81\xBD\x78\xEC\x8B\xC4\x91\xF6\x78\xB5\xE9\x54\x4A\x97\x8C\x89\x1B\x98\xE4\x8F\x67\x8D\x3D\x92\x49\x91\x26\x24\xB1\x44\x86\x87\x93\x11\x95\x54\x92\x11\x93\x01\x92\xAE\x8B\x25\x23\xAC\xFC\x56\x83\x8F\xE1\x8A\x3F\x89\x33\x72\x5A\x93\x96\x91\x3B\x25\xDD\x3D\xBA\x7D\x83\x18\x90\xEE\x8D\x6D\x92\xE8\x8F\x5B\x90\x6B\x20\xCF\x15\x99\x5E\x84\x57\x54\x76\x78\x78\x89\x48\x93\x78\x92\xEE\xDB\x57\x4A\x97\x8B\x80\xD9\x89\x2D\x97\x8C\x8A\x5C\x8A\x2F\x92\x6F\x24\xEB\x0B\xA6\x14\x83\xF2\x8E\xBB\x7F\xAF\x90\xD0\x91\xC0\x92\x80\x23\x83\x4B\x82\x8E\x85\x2C\x95\x30\x97\xDE\x8F\x43\x93\xB2\x90\x5E\x25\xCD\x42\xA0\x95\x82\x7D\x80\x36\x94\xF4\x85\xCF\x82\x9B\x82\x0E\xEB\x6B\x38\x80\x85\x89\xE9\x2E\x59\x95\x6A\x90\x5B\x92\x78\x90\xF4\x24\xBF\x4A\x97\x78\x81\x2A\x9A\xF4\x88\x97\x91\xC4\x8E\x5D\x92\x4E\x1F\xF7\x4A\xA4\x68\x96\xF8\x8B\xCA\x8F\x24\x91\xEF\x91\xEE\x85\xBF\x23\xBA\x1E\xBB\x8D\x92\x1A\x9F\xA3\x05\xB6\x90\xDA\x90\xD0\x92\x73\x1E\x81\x47\x9F\x7E\x83\xF9\x85\x5A\x91\x73\x93\x69\x92\x9B\x91\xA9\x25\xE7\x42\xAB\x96\x89\x0B\x9D\xFD\x8E\xEB\x83\x25\x8E\x5A\x91\x5C\x14\xD9\x42\x89\x77\x8D\xB4\x88\x09\x95\xB9\x8C\xA9\x90\x9F\x92\xA6\x22\xED\x35\xBD\x89\x83\xE5\x8B\x52\x97\xFF\x8D\x5D\x93\x9C\x90\xC2\x25\xE6\x37\xAE\x38\x8D\x3B\x8F\x80\x8A\xE3\x8C\xC1\x8E\x4B\x5A\xCE\x25\x93\x47\xB7\x96\x9A\x08\x99\x5B\x91\xBD\x92\x98\x8F\x7B\x92\xFD\x1F\xED\x4B\xB2\x86\x8F\x2F\x94\x1B\x95\x9F\x91\x19\x8E\xED\x8E\x47\xB8\x52\x20\x92\xC2\x66\xA2\x83\xF0\x8D\x95\x90\xE1", -"\x6C\xA4\x36\x60\x9C\x79\x4B\xAC\x8E\x97\x1E\x97\xEC\x8F\x88\x93\xFF\x91\x24\x92\xBC\x25\xA9\x40\x9E\x8F\x8B\x01\x91\x49\x95\xD4\x8F\x24\x93\x76\x31\x82\x21\xAA\xF1\x42\x04\x12\x30\x94\x3C\x94\xC2\x92\x2C\x92\x0B\x93\x6F\x25\x80\x48\xAB\x97\x86\xE7\x83\x54\x91\x08\x91\x87\x93\x16\x90\xBC\x24\xFF\x25\x64\x8F\x8C\xA2\x8F\x58\x95\xBC\x93\x31\x91\xF5\x91\xAF\x23\x89\x43\x89\x8F\x8B\x0C\x9C\x55\x94\x3F\x91\x29\x92\xBF\x90\xF4\x23\x80\x43\x8A\x08\x77\x1F\x96\x09\x95\xC6\x90\x57\x90\x15\x91\x82\x25\x82\x46\xA3\x96\x9C\xFB\x81\xFA\x8E\x16\x90\x42\x90\x5C\x90\xD9\x25\x8F\x43\x81\x99\x91\x0C\x98\xC9\x82\xEC\x8E\xF4\x6D\x0A\x07\xB3\xF0\x20\xEB\x64\x97\x87\x32\x92\x2A\x91\x13\x90\x8E\x92\x93\x92\x1D\x22\xE0\x49\x96\x89\x82\x27\x91\x22\x91\xA2\x93\x88\x91\x89\x92\xCC\x86\x12\x1D\xB5\x6E\x44\x31\x96\x3D\x93\xBF\x90\x4C\x91\xFE\x92\x8B\x24\xCB\x3C\x8D\x92\x9E\x0C\x9E\x5B\x94\xE9\x8C\x70\x92\xD1\x90\xF1\x25\xA5\x9C\x60\x3A\x8B\xAA\x72\xEA\x83\x8C\x92\x41\x00\x36\x93\xE8\x23\xCC\x3B\xB7\x98\x87\x2F\x9C\x1A\x96\xBF\x92\x6B\x91\x15\x93\xB0\x21\x82\x4C\x84\x90\x84\x30\x95\x23\x91\xCF\x91\xEA\x8E\x4E\x8C\xB3\xFE\x64\x9C\x40\x9A\x9B\x1F\x99\x3E\x92\x6D\x91\x82\x91\x07\x90\x0D\x25\x87\x42\xBB\x91\x89\x08\x91\x65\x90\x42\x93\x94\x92\x00\x91\x77\x1D\xDD\x1E\x0F\x54\x91\x16\x96\xEA\x40\xB2\x93\xFB\x73\xF2\x8F\x60\x26\x9B\x46\x95\x90\x89\x29\x92\x57\x97\x63\x92\x99\x92\x2D\x91\x9F\x26\x92\x44\xBB\x7E\x81\x23\x9D\xFB\x8E\x26\x47\xA4\x92\x08\x92\x51\x22\x83\x42\x8B\x94\x85\x08\x99\x69\x94\x41\x91\x8F\x92\x07\x91\x9D\x26\xB8\x46\xB1\x9A\x9C\x12\x91\x6A\x94\xFE\x81\x5E\x8E\xD5\x89\xB7\x26\xA0\x48\x85\x8F\x92\x2E\x9B\x36\x94\xBA\x91\xAF\x92\x83\x91\x64\x26\xD8\x44\xAF\x9A\x84\x16\x93\x6C\x96\x58\x91\x20\x93\xC4\x8E\x83\x24\xBA\x44\x93\x95\x86\x35\x92\x92\x70\xD5\x92\x22\x93\x64\x92\xE4\x1C\x88\x4D\xA8\x87\x8D\x31\x98\x08\x94\xD1\x90\x92\x90\x47\x93\x54\xEA\x7B\x4C\x9D\x70\x4D\x12\x9F\xEE\x8E\xC8\x93\x48\x93\x5C\x93\x45\x21\xEC\x47\xB8\x91\x81\x25\x9A\x1F\x97\xD7\x90\xDC\x91\x1F\x93\xFE\x21\xD5\x4D\xAB\x7C\x89\x25\x9E\x25\x96\xB5\x8F\x9F\x84\x56\x86\x0E\x26\x93\x1E\x9D\x76\x89\x36\x94\x43\x91\xA1\x92\x7D\x91\x5D\x93\xF8\x21\xF4\x4D\xB4\x8C\x97\x2E\x9B\x39\x91\xD8\x91\xE7\x91\xED\x92\x74\x23\x8C\x1E\xB0\x89\x89\xB1\x8D\x99\x5B\x26\x81\x30\x87\x8A\x8C\xBC\xEA\x48\x3B\x85\x65\x83\x08\x04\x70\x96\x8A\x92\xC1\x92\x4F\x92\xF2\x26\xA0\x49\xBB\x98\x80\x16\x91\x6D\x92\x58\x93\xB4\x93\x79\x91\xFA\x26\x8C\x46\x9D\x89\x95\xDD\x86\x28\x93\x98\x6C\xA2\x90\xB7\x66\x8A\x22\xF8\x3B\x9B\x99\x8F\x37\x9C\x3F\x91\x63\x90\x9C\x92\x70\x93\xFB\x1F\x80\x4C\xBF\x80\x84\x37\x97\x1D\x97\xC5\x93\x10\x91\x18\x93\x84\xC9\x1B\x45\x89\x6E\x99\x55\x78\x04\x90\xBC\x92\x3B\x92\xE3\x5A\xCD\x25\xDC\x4D\xB8\xA6\x7A\x35\x91\x72\x94\xA1\x92\xC2\x93\xC2\x91\xF6\x26\x87\x47\xA7\x9C\x8A\x18\x99\x72\x92\x67\x93\xAB\x90\xCF\x8D\xC7\x25\xB0\x11\x9F\xAD\x62\x43\x87\x3A\x95\x98\x56\xF9\x80\x8C\x7A\x04\x64\x1D\x4E\xA6\x91\x9F\x38\x96\x47\x95\xE9\x90\xAF\x93\xA7\x93\x7A\x24\xD1\x4E\xBC\x91\x93\x3A\x91\x32\x90\xCD\x93\xC8\x90\xF8\x8F\x36\xCF\x4C\x37\x92\x46\x9F\x88\x7B\x51\x92\x31\x8F\x89\x8E\x9B\x39\x1F\x25\xF8\x47\x83\x04\x0C\xB5\x84\x73\x95\xD2\x91\x5B\x93\xBE\x8D\xDA\x23\xE8\x40\x9C\x8F\x81\xF5\x8C\x44\x94\x0D\x91\xAB\x86\x03\x60\x2C\x14\xBD\x3C\xBC\x4E\x83\x17\x92\xD8\x81\xD5\x8E\x63\x64\xA5\x93\xE7\xE9\x5E\x4D\xA8\x97\x91\x33\x9D\xF6\x8A\xE7\x91\x75\x90\x9E\x93\xEA\x21\xBE\x4E\x99\x87\x87\x2A\x9C\x37\x91\x77\x89\x6A\x8C\xD7\x92\x33\x25\xA6\x1F\xBA\x8B\x8F\x1A\x99\x74\x8D\xC8\x93\xC1\x62\xC8\x93\x48\xEA\x12\x4F\x85\x9A\x94\x3C\x97\x2A\x92\xDC\x91\xAA\x90\xCC\x93\x80\x22\x9A\x4F\xAC\x87\x80\x3A\x98\xD8\x8D\x98\x65\xAF\x81\xE6\x4A\x66\x25\x91\x1C\x1B\x70\x89\x80\x6C\x77\x92\xA7\x92\x55\x92\xEC\x91\x96\x23\x81\x4F\x9A\x95\x87\x2C\x9F\x64\x91\xB1\x92\x52\x89\x66\x80\x9F\x23\x9B\xD0\x5E\x25\x9A\x2B\x98\x3F\x8F\x1A\x91\xCA\x90\xBC\x8B\x64\xCE\x3D\x4F\x95\x95\x84\x29\x96\x3C\x91\xC7\x92\xAF\x91\x91\x93\xEF\x23\xA5\x4E\xB1\x8B\x8C\x3B\x9B\x34\x96\xED\x91\xD3\x91\xC0\x90\x8B\x17\xA2\x4C\xA8\x1B\x68\x3D\x9E\xB8\x7D\xFA\x91\xAA\x93\x6F\x92\xAB\x26\x9D\x46\xAA\x94\x93\x2B\x96\x29\x96\x76\x92\xF7\x92\xDC\x91\xD3", -"\x20\xFC\x41\x9C\x96\x84\xDD\x72\x7D\x93\xAD\x90\x74\x93\x51\x91\x46\x1D\xDF\x4D\x85\x8D\x85\x21\x96\x41\x93\xFD\x92\xAB\x92\xBA\x92\xEE\x27\xE1\x47\xB7\x55\x53\xF2\x8F\x04\x88\x15\x93\x19\x8E\x5F\x8F\x69\x1C\xEE\x43\x8F\x26\x89\x1D\x94\x77\x64\xFC\x92\x21\x7E\x09\x92\xFA\x27\x94\x48\xA8\x94\x8A\x3F\x9D\x6A\x90\x83\x90\x00\x95\xF9\x91\xEF\x27\xF5\x47\xAF\x5E\x8C\x3B\x8A\xBB\x82\x9D\x93\x67\x85\xDE\x85\x2B\x21\x93\xC5\x35\x9F\x80\x2C\x9F\x7B\x95\xC2\x91\xF0\x92\x24\x92\x82\x27\xB6\x49\x9D\x8F\x95\x33\x90\x1A\x97\xCE\x92\x61\x8F\x9B\x7B\xDE\x25\x8E\x47\x9D\x9D\x9F\x09\x97\xB5\x5B\xFC\x92\x8D\x93\x5D\x91\x5F\x26\x91\x50\xA4\x90\x8A\x26\x91\x57\x94\x52\x90\xFB\x92\x67\x92\x01\x28\xCF\x48\xBA\x83\x99\x1D\x9D\x46\x88\x6F\x92\xE9\x91\xAB\x90\x73\x14\x8C\x50\xA2\xA0\x8E\x40\x99\xD6\x78\x02\x97\xE4\x92\x9C\x93\x7C\x22\x96\x4F\xBE\x89\x90\x3D\x9B\x2A\x92\xF6\x92\xA0\x90\x74\x93\xDE\x06\xD8\x17\x85\x52\x99\x3A\x9F\xCA\x88\x9B\x92\x04\x8D\x64\x8E\x8E\x25\xA7\x4F\xB7\xA0\x8A\x17\x99\x83\x97\x09\x97\xFE\x92\x1E\x94\xFD\x27\x95\x50\xA3\x93\x97\x40\x9A\x41\x92\x00\x97\x39\x93\x91\x3C\x21\x26\xAD\x20\xBB\x9D\x8C\x42\x98\xDC\x7E\x88\x93\x09\x95\x0B\x93\x29\x28\x99\x4C\x8B\x91\x9B\x30\x9D\x44\x91\x08\x94\x34\x93\x21\x94\xAA\x14\xA2\x35\x91\x9F\x94\x43\x99\xF6\x89\xFF\x92\x19\x94\x09\x94\xFC\x27\xAC\x4D\xBE\xA0\x9F\x3F\x9D\x7E\x90\x03\x96\x1B\x94\x8A\x92\x59\x8D\x44\x4C\xBC\x8D\x89\x40\x64\x88\x92\x3C\x93\xD0\x90\x1D\x94\x27\x25\x89\x51\x94\xA0\x8B\x44\x96\x81\x95\x11\x95\x1B\x94\x21\x94\x6F\x28\xBB\x88\x6E\x74\x83\x1E\x84\xF6\x8B\x91\x8B\xAB\x8B\x31\x94\x2F\x23\x84\x4D\xB3\x92\x9A\x2D\x97\x02\x92\x0F\x97\x2D\x92\x2A\x94\x90\x24\xE6\x4D\x86\x90\x99\x94\x4D\x41\x94\xD4\x90\x00\x01\x11\x94\x9F\x25\xA5\x50\xA7\x98\x97\x43\x99\x62\x90\xC3\x93\x9C\x92\x22\x91\x2C\x28\xC6\x44\xB2\xA2\x8B\x21\x98\x85\x96\x19\x7F\x92\x90\x3E\x93\x31\x1D\xE1\x50\xB3\xA1\x88\x45\x9A\x3E\x92\x15\x94\x8A\x92\x56\x94\x9C\x21\xBF\x51\x82\x95\x8A\x34\x99\x42\x93\x18\x96\x24\x92\xDA\x93\x8E\x09\xB1\x1D\x83\xF2\x78\x45\x96\x5B\x97\xFE\x92\x97\x92\x67\x94\xBC\x28\xD0\x51\xB5\x92\x8E\x45\x9B\x82\x90\x16\x95\x2E\x92\x2B\x94\xAD\x22\x86\x4C\x8F\x9A\x87\xD8\x83\x20\x93\x06\x74\x37\x95\xE7\x92\xBA\x28\xAA\x4F\xAB\xA2\x86\x34\x96\x1E\x96\xF5\x92\x00\x92\x6A\x94\x44\x25\xFE\x50\xBC\x93\x80\x44\x98\x40\x95\x92\x90\x48\x8B\xEB\x82\x05\xD6\x1D\x90\x55\xA2\x95\x23\x91\x08\x97\xFC\x90\xEC\x90\x31\x93\xEF\x22\xDA\x4F\x88\x8C\x9C\x3E\x99\x38\x95\xEA\x93\xE2\x90\x57\x8C\x71\x24\xFE\xD1\x6F\xA3\x9A\x2F\x9E\x8D\x96\xBC\x92\x21\x95\xD5\x93\x50\x28\x8C\x49\xB6\xA3\x8E\x24\x96\x8E\x97\xB7\x90\x3A\x95\x5D\x92\xC5\x28\xAE\x0E\xB8\x88\x9F\xFE\x8C\x6C\x3A\xD9\x63\x40\x95\x4E\x92\x65\x27\xD6\x4F\x88\x8F\x88\x48\x92\x3B\x92\x21\x95\xD2\x90\x86\x94\xCE\x23\x8E\x52\x90\x8F\x93\x10\x90\x8C\x8C\x69\x8E\xAE\x67\x89\x94\x13\x26\xEE\x4C\xBF\x88\x9E\x1F\x9D\x8B\x91\x0F\x96\x34\x95\xDE\x92\x1D\x29\xF6\x4C\x9F\xA4\x81\x2E\x9A\x8E\x93\x00\x93\xDC\x8D\xDE\x57\xFF\x26\x98\x4E\xB5\x80\x97\xC8\x8B\x28\x97\x14\x94\x97\x93\xBF\x91\xD1\x25\xA2\x4B\x93\x97\x83\x1C\x98\x76\x96\xA1\x92\x4B\x94\xDA\x91\x6C\x28\xE5\x49\x8F\xA2\x85\x11\x9C\x6F\x97\x28\x94\xF8\x56\x60\x92\x93\xFD\x30\x39\x96\xC2\x7A\x38\x9D\x94\x92\x0C\x97\x53\x94\x22\x92\x49\x26\xAC\x44\x98\xA2\x81\x33\x99\x7E\x91\x9C\x92\xFF\x93\x4E\x94\x40\x28\x8E\x51\xA0\xA2\x90\x44\x98\x4E\x94\xE5\x93\xCD\x86\x97\x93\x34\x20\xB0\x4E\x9B\x24\x67\x49\x98\x48\x92\xA1\x92\xD9\x93\x84\x93\xD8\x27\xA2\x49\x8C\x9C\x8C\x1E\x90\x93\x96\x8F\x92\x4C\x94\x40\x92\x28\x19\xE9\x49\xB5\x97\x87\x51\x7C\x4E\x91\xE0\x90\xE9\x8C\x37\x8B\x4C\xAC\x38\x52\xA5\x98\x9A\x49\x9D\x3F\x97\x4A\x8C\x3D\x94\xA0\x92\x3F\x29\x9A\x4C\x81\xA3\x9F\x1E\x9A\x8F\x96\xA5\x91\x51\x94\xB9\x8D\xFF\x24\xF3\x3B\x99\x7E\x76\xE7\x6F\x05\x92\x77\x8F\xCF\x52\x4A\x94\xCC\x28\x96\x4D\x88\x9C\x8A\x10\x9F\x6C\x96\xB4\x93\x55\x95\xF8\x91\x59\x29\x92\x4A\x9B\xA5\x8F\x3B\x95\x51\x96\x1F\x96\x73\x8A\x8C\x92\xD0\x15\xDB\xCB\x75\x9D\x8D\x16\x99\x3F\x80\xD1\x70\x20\x77\xE9\x76\x66\xCA\x0F\xE8\x54\x05\x19\x48\x8F\x9E\x8A\xBA\x76\x68\x7D\x61\x8B\x04\x00\xE7\x2D\x99\x55\x51\x1A\x9E\xCD\x7E\x20\x01\xB4\x8A\xEE\x7E\xCC\xF5\x44\xC2\x55", -"\xA4\x83\x34\x97\x91\x93\x1E\x94\xEB\x92\xF5\x92\x52\x28\xEC\x4B\xBF\xA0\x9A\x27\x9D\x99\x96\xA8\x93\x0A\x8B\xD6\x92\x00\x10\xF8\x45\x8C\x9E\x9E\x9D\x85\x2E\x94\x80\x33\x73\x94\xB0\x93\xD1\x29\x9C\xC3\x7E\x9D\x98\x2D\x9C\x93\x92\x1C\x96\x3D\x93\x1E\x94\xCC\x24\xDB\x53\xAC\x94\x9D\x4E\x96\x57\x97\x3B\x94\x01\x95\x2C\x94\x29\x17\xF9\x45\xA2\xA4\x8D\x27\x8D\x0A\x96\x16\x97\x79\x95\x99\x7A\x47\xF6\x67\x48\xBF\x4F\x89\x23\x9F\xF8\x89\xA7\x8D\xE4\x8F\x5D\x8C\x1B\x1D\xAD\x35\x89\x7F\x9E\xE9\x88\xFA\x86\xF6\x93\x05\x8E\xA8\x84\x87\x16\xC2\x41\xB3\xA0\x7F\x4F\x90\x55\x7D\xD9\x79\xCD\x93\x79\x92\xED\x29\x97\x53\xBB\x96\x99\x4C\x9B\x87\x93\x33\x94\x87\x92\x6B\x94\x1E\x26\xD8\x51\xBD\x54\x94\x06\x94\x77\x8F\x64\x92\xF3\x93\x4D\x7A\x2A\x23\xFE\xD1\x54\xA8\x86\xAB\x77\x5F\x7F\x42\x96\x64\x92\xAC\x91\x94\x25\xDB\x48\x9A\x8B\x87\xFE\x8C\x52\x8E\x55\x8C\x98\x85\xC6\x92\x49\xE8\x50\x2D\xA1\xD9\x6D\x51\x9B\x9E\x94\xBF\x91\x86\x95\xEB\x94\xFF\x25\xF0\x53\xB8\x93\x92\x4F\x9E\x5E\x94\x3E\x94\x7C\x93\xCF\x94\xCE\xFB\x19\x17\x8C\xA7\x86\x6D\x7F\xA3\x03\x45\x95\x63\x7B\x4C\x7B\xD4\x27\xCC\x4D\x97\x9A\x8C\x1B\x95\x5D\x93\xAB\x93\x60\x94\x52\x92\x0E\x27\xA6\x49\x87\xA6\x94\xA1\x57\x9F\x90\x22\x90\xAF\x8E\xD8\x92\xE3\x06\xB1\x28\x90\xA6\x89\xE9\x2E\xA4\x96\xB6\x78\x94\x94\x78\x93\x99\x21\x87\x51\xBB\xA0\x81\x37\x99\x9D\x94\xC5\x90\x3E\x94\x17\x93\x20\x2A\xB0\x4C\xA1\xA4\x89\xE5\x8B\x40\x36\xC0\x87\xDD\x91\x6A\x8F\x47\x28\xFA\x46\x8C\x5F\x82\x18\x35\xA6\x96\xBE\x7B\x99\x94\x17\x95\xC0\x27\xD8\x4A\x97\x8E\x81\xD9\x88\x95\x84\xA7\x8F\x16\x8D\x2B\x8A\xDC\xF0\x3C\x42\x9E\x5F\x81\x3B\x8A\xEB\x65\x4F\x97\xAC\x84\x0B\x95\x3D\x2A\xEF\x4C\xBF\xA8\x99\x48\x92\x67\x93\x23\x94\x9D\x93\xA0\x94\x2D\x28\xC3\x52\xB8\x99\x88\x52\x9F\x55\x82\x95\x8F\x8B\x87\xB6\x90\x45\x0E\x89\xE2\x45\x7C\x8D\x37\x9E\x9C\x93\x47\x97\x9F\x95\x48\x95\x3B\x29\x96\x53\x80\xA9\x87\x34\x9D\xA6\x91\xD1\x90\x91\x95\x01\x93\x46\x2A\x85\x4C\xBC\xA3\x9B\x40\x90\x9D\x84\x2D\x90\x83\x93\x94\x90\x3A\x0F\x80\x35\xAE\x73\x85\x55\x95\x4E\x7C\xAF\x78\xD9\x93\x82\x94\x6B\x29\xAA\x4D\x93\xA0\x8E\x4B\x9A\x86\x95\xCC\x91\x6C\x95\x33\x93\xB3\x29\xDF\x4F\xBB\x8C\x98\xC9\x23\x3D\x91\xA8\x5A\xA3\x94\x23\x7B\x90\x2A\x82\x4D\xB8\xA0\x80\x47\x92\xA8\x92\xF8\x90\xA1\x95\x3E\x87\xF2\x13\xC1\x21\xAC\x3B\x97\x3B\x52\x88\x92\x45\x96\xA9\x95\x3F\x7B\x51\x2A\xD2\x52\x8D\x9B\x94\x4A\x91\x98\x95\xDE\x93\x95\x95\xAE\x92\x85\x29\xDF\x4A\x9B\xA9\x81\x2B\x9D\x9F\x86\x83\x85\x6D\x75\x67\x95\x78\x12\xBE\x55\x8B\x9B\x82\x57\x93\xA5\x96\xD9\x91\x55\x94\x4D\x93\x6A\x27\x9C\x4D\xA9\xAB\x8A\x2D\x9B\xAE\x97\x29\x90\xDC\x92\x0A\x91\x9E\xF5\x50\x29\xA4\x37\x9C\x55\x93\xF8\x7F\x54\x96\xB4\x94\x32\x94\xD4\x2A\x93\x4B\x99\x95\x97\x56\x9F\x0B\x89\x5B\x94\x66\x84\xC3\x8E\x6A\x26\xE4\x54\x9F\xAB\x84\xAD\x74\x99\x96\xE6\x93\xA4\x95\x33\x94\x6C\x2A\xC2\x54\x81\x98\x8F\x55\x9B\x68\x91\x56\x95\xA3\x92\x4E\x95\xC2\x07\xEA\x4D\xA4\x0F\x9D\x33\x9B\xAB\x93\x20\x00\xBC\x94\x4C\x7B\xE0\x2A\xE8\x54\x8E\xA1\x98\x48\x98\xB1\x91\xE7\x92\xC6\x95\x9D\x93\x6F\x2A\xE5\x4D\x9E\xAC\x87\x37\x90\xB2\x93\xA0\x7D\xE6\x8E\xD5\x89\x27\x2B\x84\x24\x86\xAC\x9D\xF2\x8F\x8D\x95\x3A\x97\x33\x94\x0D\x95\xAD\x28\x9C\x54\xAF\xA2\x91\x59\x9D\x73\x91\x4E\x97\xCF\x93\x39\x95\x44\xF2\x23\x4D\xA0\x94\x84\x58\x9F\x49\x79\x40\x97\xAF\x95\xAF\x90\x7F\x29\xAC\x53\xB7\xAB\x9E\x35\x97\xAE\x96\xC7\x91\x96\x94\x20\x93\x19\x28\xC2\x4C\x95\x99\x98\xD8\x85\x6B\x90\x8C\x4D\xCE\x94\x66\x7B\x3C\x2A\x87\x56\xA9\xA2\x9E\x59\x91\x8E\x90\x68\x95\x34\x94\x4B\x95\xC0\x28\x98\x55\x82\xA3\x93\x59\x93\x8B\x93\x56\x95\x8B\x4E\x94\x8D\x64\xCE\x5F\x56\x8C\x4B\x81\x5B\x9C\xB3\x96\x22\x95\x6D\x8E\x83\x94\x3A\x26\xAC\x52\x8A\x8F\x95\x5A\x90\x6C\x93\x5F\x96\x76\x93\x7E\x95\xDC\x25\x8C\x47\xA9\x63\x86\x88\x8B\xD8\x8C\x2B\x5E\xDC\x94\xDF\x91\x20\xF6\x65\x40\x95\xAB\x88\x41\x93\x7C\x96\xC9\x93\xA6\x92\x28\x93\x7E\x2B\xD2\x4C\x99\xAD\x94\x32\x9D\x8F\x96\xCA\x93\x5F\x3C\x7F\x8C\x9A\x1C\xA6\x56\x93\xAC\x92\x57\x96\x62\x92\x1E\x97\xCF\x95\x55\x95\xF5\x28\xAD\x55\xA3\x9B\x84\x5A\x99\x79\x96\x68\x97\xE6\x93\x9A\x95\x84\x22\xDE\x52\xAA\x32\x89\x4A\x90\xDB\x8D\x51\x97\xE6\x95\xB9\x70\x8A\x2B\x8A\x56\x83\xAA\x95\x2C\x9C", -"\x59\x89\x41\x96\x1B\x93\xC5\x92\x49\x01\xA6\x22\x86\x52\x93\x13\x9C\x57\x8D\xB3\x8F\xE1\x94\xE4\x92\x89\x2B\x82\x54\x90\x50\x99\x22\x95\x4E\x8A\x46\x96\x65\x93\x36\x92\x3D\x1D\xD3\x0C\x84\x19\x84\x1D\x98\x87\x81\xB2\x8A\x77\x8E\x24\x94\x42\x08\xE2\x4B\x9B\x9C\x82\x08\x0F\xBB\x97\x90\x8A\x78\x7A\xBA\x8C\xDC\x1E\xA1\x4B\x8A\x99\x93\x4A\x94\x5A\x95\x35\x96\x75\x93\xD7\x94\x10\x25\xC7\x55\xB0\x9A\x93\x5C\x90\x6A\x91\xBE\x8E\x5D\x95\xC5\x94\x39\xCC\x29\xD4\x56\xD2\x55\x5E\x9E\x6E\x7F\x98\x93\x82\x68\xF7\x94\x70\x25\xE9\x50\x9C\xA2\x8B\x43\x9E\x89\x92\x2B\x97\x5C\x94\xAE\x94\x89\x29\xE7\x57\x9D\x81\x97\xDD\x8C\x75\x90\x7A\x96\xD7\x92\x26\x83\xB7\x22\x89\x02\x2C\xAF\x89\x79\x20\xBB\x92\x78\x97\x0D\x8A\xE2\x95\x39\x14\xB4\x57\xA2\x6C\x93\xFC\x8C\xD1\x89\x9F\x8C\xA2\x95\x2E\x8C\xA3\x28\xEE\xAD\x78\xA6\x83\xF1\x84\x77\x90\x32\x8A\x65\x2D\xE6\x8D\x43\xCF\x10\xA7\x09\x64\x6D\xB1\x88\x0D\x90\xDD\x44\x5D\x7D\x84\x00\xD9\x16\xCD\x56\x9B\x45\x64\x4E\x9F\x2E\x70\x3C\x6F\x71\x95\xB6\x22\xA6\xEF\x4E\x23\xAD\x68\x68\x18\x4B\xEC\x76\xBE\x8A\x7C\x85\xBC\x77\x00\xF0\x5B\x04\x92\xBB\x74\x76\x74\x06\x64\xEE\x75\xBB\x77\x7F\x6B\x8F\xEF\x1B\xDE\x4C\xBF\x7E\xD7\x4A\x94\x7F\x00\x7A\x16\x73\x04\x78\xF6\xEF\x5D\xB1\x69\xBB\x7B\x71\x09\xB6\x7D\xFA\x73\x0D\x96\xC9\x6B\x39\x2C\xEC\x9A\x01\xBD\x7C\x61\x94\x80\x78\x18\x7D\x55\x03\xD4\x77\x40\x2C\xE4\xDF\x42\xB1\x9C\x77\x7B\x9A\x79\xE2\x76\x4B\x86\xB2\x84\xB5\xEF\x31\x58\xA5\x23\x87\x7D\x79\xF1\x75\x1D\x7C\xEA\x77\xCB\x77\x0A\xF0\x73\xF6\x41\xBF\x62\x79\x7C\xF9\x77\xDF\x76\xC4\x76\x73\x83\xCE\xEE\x5A\xDF\x53\x47\x99\xC0\x7D\xC5\x93\x23\x7E\xE5\x76\xE8\x77\x5C\xEF\x14\x2C\xAC\x62\x62\x7E\x7B\xE3\x05\x32\x7E\xD5\x41\x97\x77\xB3\x04\xAF\x58\x94\xBC\x6A\x63\x9F\x2D\x8D\x05\x7F\x00\x78\x38\x74\xD7\xF7\x50\x58\xA3\xBF\x6D\x2B\x0B\xB9\x4A\x05\x37\xCD\x77\x2A\x81\x3A\x0D\xFE\xDF\x59\xBF\x6D\x7F\x7E\x97\x7C\x8B\x96\x23\x82\x2F\x96\x82\x2C\xF5\xDF\x52\xB1\x9B\x62\x99\x96\x14\xE9\x74\xDD\x76\xAC\x77\x79\x2C\x8A\x59\xB0\xB0\x96\x4B\x0C\x21\x82\xED\x75\x21\x82\x48\x96\x60\x2C\xC1\x58\x94\xB2\x87\x24\x8B\xE3\x05\x00\x7A\xD5\x40\xA0\x59\x57\x2C\xCA\xC5\x69\xBC\x7C\x63\x9C\x26\x8B\x16\x04\x2A\x96\x37\x96\x76\x09\x11\x59\xBE\xBE\x61\x63\x9C\x6C\x7A\xEE\x74\x11\x96\xBA\x77\x7F\xEF\x6B\xDF\x4B\xB2\x9A\x62\x9E\x98\x7E\x93\x96\x41\x01\x22\x96\x3F\x2C\xDC\xDF\x62\xBB\x61\x65\x93\xC9\x95\x9A\x93\xF3\x71\x90\x00\xD5\xEE\x74\xDE\x4B\xEA\x7A\x65\x9B\xC9\x95\xAA\x01\x27\x97\x25\x96\xD2\xFA\x01\x59\x84\xB3\x84\x64\x93\xC5\x91\xA8\x62\x19\x2E\x3F\x7D\x95\x64\x71\xF4\x4C\xB3\x9B\x63\x9C\xC8\x91\x55\x8A\x13\x97\x3F\x96\xEB\x47\x52\x59\xB0\xB1\x90\x7B\x72\xC7\x93\x53\x2D\xC4\x04\x33\x2E\x50\xFA\x32\xCE\x77\xE8\x69\x65\x9D\x6F\x8B\xAA\x01\x37\x97\x35\x96\xDF\x2C\x91\xDF\x55\xB1\x93\xC9\x7F\xC6\x97\x17\x7D\xF4\x76\xB6\x4D\x45\xFA\x1C\xC5\x44\x87\x24\x7E\x79\xC8\x90\x5D\x71\x1A\x97\x77\x96\x7D\x2C\xC2\x59\xB2\xB3\x8D\x7E\x70\xCA\x93\x9C\x97\xEF\x76\xA2\x36\xD3\xEF\x09\x02\x05\xE6\x77\x92\x6B\xD0\x93\xC4\x74\xCF\x76\x6E\x96\xBC\x2C\x8D\x59\xBE\xB2\x83\x08\x0D\xD0\x94\x05\x7E\x40\x97\x2F\x96\x06\x2D\xB4\x59\x8D\xB2\x95\x64\x98\xFE\x77\xC1\x42\xFA\x76\x1C\x96\xAC\x2C\xBA\x58\xB0\xBF\x72\x8C\x32\xCE\x96\x9E\x95\x1C\x97\x51\x96\xF9\xEF\x25\x59\xBB\xBF\x7D\x67\x98\xC5\x96\x9D\x95\x44\x96\x6F\x96\x8E\x2C\xF7\x2A\x25\xB4\x85\x9B\x82\xC9\x94\x9A\x97\xAC\x7B\xB4\x7C\x38\x83\x13\xB4\x65\x02\x1D\xB6\x8F\x1C\x8B\x8A\x53\x80\x2D\xAB\x71\xC0\xC6\x71\x3D\x00\x4E\x86\x21\x8E\x2F\x77\x39\x35\x71\x7C\x87\x96\xE5\xF8\x34\x1B\x25\x5B\x2E\x75\x7F\x0E\x2A\x58\x49\xF6\x0B\x5E\x77\x78\xEF\x33\xC9\x61\x5F\x04\x36\x85\xB0\x7D\x2D\x3A\x19\x2E\x90\x63\x56\x83\x05\x18\x6F\x22\x82\xD0\x23\xD9\x24\x4D\x7E\x1D\x2E\xE4\x88\xE5\x09\xE1\x28\x59\x5F\x0C\x0E\x3E\x9C\x07\xC4\x88\x87\x80\x15\x96\x35\xE2\x39\x73\x1E\x4B\x8B\x97\x84\x1D\x81\x71\x7C\x66\x8D\xC0\x67\x35\xD8\x45\xB0\x69\x64\x46\x60\x93\x46\x88\x81\x95\x19\x8A\x05\x96\x85\x2A\xB6\x57\x89\xAF\x9E\x16\x98\x54\x97\x24\x87\xE7\x93\xF0\x94\xF9\x29\xE3\x53\xB4\x37\x94\x04\x93\x7F\x96\x16\x96\x7C\x89\x7C\x73\xF8\x11\xDB\x2F\x74\xB5\x99\xA3\x80\x40\x8D\x40\x97\x1A\x92\x9D\x8E\x97\x25\xC8\x3F\x8E\xB0\x85\xE9\x6D\xA5\x97\xAB\x80", -"\x82\x52\xA7\x92\xAF\x02\xD0\x4A\xBC\xEE\x7D\x4F\x9B\xB4\x90\x2B\x69\x5C\x97\x32\x6C\x37\xD8\x6E\x57\xA6\x51\x70\x5F\x9A\x62\x92\x74\x97\xEB\x92\xD2\x95\xB1\x27\xA6\x57\xB3\x9E\x88\x5A\x97\x74\x8B\xAC\x93\xC3\x90\xF2\x89\xC1\x20\xE1\x2E\x9F\x3E\x7F\x6C\x92\x37\x8A\xB1\x97\xD3\x95\xF1\x90\x6A\x2A\x99\x51\xA8\xA1\x8A\x44\x91\x9F\x94\x11\x95\x5C\x95\x4F\x94\x7F\x28\xA1\x51\xBE\xF8\x64\x51\x9A\x05\x86\x44\x94\x5F\x93\x0E\x96\x06\xF2\x60\x38\x47\xB6\x94\xC2\x65\xDB\x91\xB4\x95\xEC\x94\x18\x95\x0B\x2B\xF8\x5A\x98\xAB\x89\xA3\x8D\x43\x92\x90\x88\x02\x8A\x9E\x91\x42\x1C\xA4\xA1\x74\xB6\x8D\x03\x58\x73\x4B\xB1\x95\x2C\x8A\x44\x94\xBB\x2D\x9B\x51\xBD\xB6\x90\x4B\x9C\x9D\x92\x2E\x95\x70\x96\xBA\x94\x78\x25\xCF\x46\x9D\x50\x8D\x4E\x9E\xD9\x94\xE6\x71\x77\x97\xDB\x96\x97\x28\xB9\x5B\xAC\xA5\x83\x56\x93\x66\x97\x2D\x94\xFD\x95\xDF\x96\xF6\x2B\xE7\x5B\xA7\x66\x9B\xF1\x8A\x3B\x8A\xF1\x92\x0B\x8A\xD9\x8B\x51\x1D\xC1\x3D\xA3\xA9\x85\x81\x6B\xDD\x92\xDF\x73\x7B\x97\x79\x95\xDB\x2B\xE3\x55\x9D\xAF\x93\x5A\x90\x6D\x96\xBE\x96\xB1\x95\xFA\x95\xB2\x29\xF7\x57\xB4\xA6\x85\x09\x97\xE5\x7E\x9E\x79\x99\x8C\x53\x80\x79\x2A\xE9\x87\x4B\x97\x8C\x6F\x9C\x1C\x6D\xC0\x95\x62\x96\xE7\x96\xDE\x2D\xE4\x29\x89\xB0\x86\x5E\x95\xBB\x94\x81\x96\x82\x95\xC9\x96\x0C\x2A\xD5\xFD\x0F\x47\x3F\x2E\x9E\x13\x90\x72\x92\x12\x94\xB8\x96\xEE\x2D\xBE\x30\x70\xB7\x85\x43\x9C\xB2\x90\xBC\x95\xC6\x94\xF9\x95\xE3\x2D\xF7\x5B\xA5\xB7\x80\x6E\x9B\x8F\x92\xB8\x97\x81\x93\x2D\x90\x9F\xF7\x22\x47\xA4\x69\x93\x66\x81\xC8\x8E\xC1\x6C\x78\x93\x51\x95\x99\x24\xCB\x5B\xAF\x9A\x7C\x6E\x92\xE3\x90\xC1\x96\x5A\x94\xF9\x96\xC2\x2A\x9A\x51\x84\xAB\x93\x5F\x9F\xE0\x90\xBF\x95\x84\x96\xFD\x96\x13\x2E\xBE\x23\x42\x39\x9B\xE3\x76\x84\x92\x90\x8C\x78\x92\x5D\x95\x94\x21\x98\xA2\x5E\xB8\x97\xC4\x68\x88\x4F\xB9\x96\x37\x93\x83\x94\x6D\x29\xF5\x5B\x85\xAB\x92\x36\x92\xBE\x94\xDA\x90\xF9\x94\x59\x93\x2C\x1F\xBC\x1C\x0D\xAB\x9A\x6E\x91\xE3\x96\xB6\x96\x93\x96\x3B\x94\x8B\x2B\xF8\x50\x8D\xAE\x88\x82\x8A\x99\x92\x6D\x94\x67\x94\xF3\x96\x3D\x2E\xE8\x5B\xAF\xCA\x5D\x56\x99\x19\x72\xC9\x97\xAF\x72\xD0\x96\x61\x98\x66\x5C\xB7\x9C\x8D\x59\x91\x85\x97\x65\x97\xE5\x92\xD4\x96\x55\x28\xAA\x5B\x97\xA1\x88\x5D\x94\xE7\x86\x62\x52\x6B\x5A\x43\x97\xCC\xE6\x72\x5A\xB6\x56\x4A\x74\x97\xB1\x96\xC6\x96\xCB\x94\x1C\x97\x43\x2A\xBE\x5B\xBB\xB8\x99\x6F\x91\xE8\x90\x7F\x97\xD6\x95\x7B\x75\xB9\x21\xDC\x90\x66\xA2\x82\x73\x95\xE7\x90\xC4\x97\x8C\x97\x84\x95\xD0\x2D\xB3\x57\xA4\xB8\x8B\x60\x9D\x35\x94\xF2\x8F\x4A\x8E\x40\x37\x11\x2B\x84\x5C\xAD\xBA\x89\x74\x91\xE2\x94\xA4\x8C\x0E\x93\x34\x91\x3A\x24\xDC\x46\xAC\x89\x96\x75\x9F\x45\x91\xEC\x8E\xE1\x8F\x83\x57\xEB\x00\xF5\x9F\x63\xB9\x89\x94\x65\xE6\x95\xD7\x96\xE3\x8F\x5F\x97\x90\x1F\xDB\x46\x92\x7E\x95\x75\x9D\xC0\x95\xF2\x8F\x03\x96\x38\x92\xF1\x00\xB2\xBD\x43\xF2\x78\x74\x95\x70\x75\xB9\x94\xAF\x97\x57\x97\x64\x2B\xF9\x5C\xBD\xA4\x9B\x73\x96\xCF\x8A\xDD\x82\xD7\x90\xDC\x95\x4A\xC4\x52\x48\xB7\x09\x77\x74\x9B\xEC\x95\xFB\x6B\xB7\x97\x3B\x97\x3D\x25\xB5\x5C\xAB\xA9\x9F\x74\x9C\xDB\x91\xD4\x94\x79\x97\xF9\x94\x80\x2E\x9E\x53\xAE\xAD\x88\x68\x86\xB9\x95\x62\x75\xD7\x94\x65\x97\xBB\x2E\xCD\x5D\xA0\xBB\x97\x5B\x91\xAC\x90\xFD\x90\x7D\x97\x84\x94\x0E\x2E\xEC\x5C\x90\xB8\x88\x56\x92\xE1\x92\x59\x96\x32\x78\x6A\x8C\x49\xDC\x05\x5D\xAD\xBB\x80\xC8\x40\x69\x4C\xD3\x96\xAA\x94\x4A\x95\x95\x27\x8E\x5D\x93\xA1\x90\x74\x91\x8B\x94\x6D\x94\x31\x94\x4A\x97\x78\x0B\xCE\xF6\x64\xA4\x94\x22\x6E\xBB\x7C\xDB\x96\xC4\x72\x46\x6C\x02\x2F\xF0\x5D\xBE\xA5\x8A\x49\x9D\x3E\x95\x5C\x97\xC2\x92\xF0\x95\xA8\x25\x91\x57\x9E\x9A\x8F\x73\x94\x6C\x97\x58\x91\xFC\x8F\xA8\x8A\x4A\xD6\x26\x5E\xAD\x9C\x68\x79\x93\xD7\x93\xE0\x96\xE7\x8E\x05\x97\x4C\x26\x86\x4B\x8E\xAE\x99\x57\x90\xB9\x95\xCD\x94\xCA\x92\x9A\x97\xD6\x26\xF9\x57\x93\x9C\x97\x8B\x89\x6C\x8E\x03\x87\x39\x7D\xB7\x90\xE9\xCB\x2F\x5C\xA3\x3D\x73\x78\x97\xE0\x95\x73\x96\x94\x90\xBC\x95\xD7\x27\xFA\x56\xBC\x98\x9C\x5B\x97\x6F\x97\x6A\x95\xBE\x92\xA4\x97\xFB\x26\xCA\x5E\x8E\xF6\x62\xEE\x80\x50\x90\xCA\x8A\x5E\x8B\x8B\x93\x2D\x19\xD2\x5E\xBF\x28\x1A\x79\x98\x4A\x84\xC9\x96\x9D\x96\xAB\x97\x4C\x27\xAC\x5E\xB3\x9B\x8E\x79\x90\x75\x94\xEB\x96\xD4\x92\xA3\x97", -"\x54\x27\xE0\x5E\xAA\x9C\x98\x00\x98\xBD\x84\xE2\x91\xF3\x95\x4B\x41\x8B\x1B\xDE\x50\x9D\x7A\x71\x39\x9B\x04\x94\xD5\x94\x62\x96\x32\x97\x3D\x2F\xAA\x5E\x87\x9C\x91\x5A\x98\x69\x94\xC1\x96\x6B\x95\x84\x97\x26\x27\xF8\x5E\xAD\x9D\x89\x56\x90\x7F\x95\x2E\x95\x68\x95\x23\x90\x9E\x22\xF6\x3B\x83\x48\x74\x7A\x9D\xE4\x90\xEE\x95\xBC\x92\xB9\x97\x22\x27\xDA\x5E\xA4\x9C\x90\x7C\x9B\x7D\x92\xF2\x95\xF7\x92\xCA\x97\x1A\x28\xD2\x49\x88\x78\x8F\xAF\x8A\xE0\x8A\xA0\x93\x16\x8A\x82\x92\x17\xA7\x6B\x5E\x9C\xBE\x8F\x7B\x95\xB1\x90\x43\x97\xC5\x96\x46\x97\x1A\x29\xA6\x5B\xB7\xA3\x9C\x58\x95\x8D\x96\xE3\x97\x35\x94\xD6\x96\x2D\x24\xB6\x53\xBF\x2F\x69\x16\x9A\x87\x82\xA3\x92\x05\x96\xA0\x7D\x77\x0F\xFC\x86\x43\xAE\x96\xF4\x82\x10\x07\x3C\x89\x44\x50\xD0\x4B\x9C\x21\x59\x33\x8C\x66\x83\x7A\x6E\xD6\x95\x76\x4E\xF3\x97\xE9\x93\x2A\x2B\xA5\x4A\x85\xBC\x88\x73\x97\xF0\x95\x25\x94\xE9\x97\x85\x94\xA6\x2F\x8D\x52\xBA\xBD\x9F\x98\x49\x78\x96\xC6\x54\x53\x93\x56\x81\x7E\xA9\x12\x41\x95\x2F\x53\x01\x8C\xBE\x8E\x77\x7F\xF5\x96\xFB\x93\xF1\x28\xD7\x5E\x9B\xBF\x99\x5B\x99\xE6\x90\xE1\x97\x9A\x97\xC8\x97\x0B\x2F\xE3\x57\xA8\xBE\x9C\xCD\x85\xD9\x96\x76\x7F\x65\x97\xA2\x8B\x99\x2D\xA1\x5E\x9B\xB6\x92\x2A\x9E\xFE\x94\x2F\x95\xC0\x91\x27\x97\xF2\x2E\xBA\x5B\xB7\xB8\x95\x77\x9B\xB1\x92\xD4\x94\xBE\x96\x1E\x97\xFA\x2E\xBE\x5C\xB4\xDD\x71\xA3\x68\xB6\x87\x29\x84\xEE\x93\x0C\x8E\xBA\x27\x94\x46\x85\xC0\x89\x4D\x9F\x77\x92\x75\x8C\xC6\x97\xD6\x93\xBA\x2F\x9C\x52\x9C\xBC\x87\x47\x92\xE9\x91\x1D\x97\xBE\x97\x5D\x81\xCB\x27\x81\x3D\x8D\x9F\x87\x6E\x9F\x7C\x95\xD0\x8D\x50\x5B\xF7\x97\x24\x28\xE1\x55\x89\xB8\x95\x57\x94\xAE\x92\xF4\x95\xF6\x93\xEF\x97\x2F\x29\xE1\x5F\xB1\xA4\x83\x7F\x9F\x90\x93\x59\x95\x10\x8F\x4B\x8F\x64\xCE\x30\x60\xB9\xA2\x92\x81\x98\x00\x9E\x3A\x97\x07\x98\xEC\x94\x1A\x2F\xDA\x53\x8E\xC0\x85\x52\x99\xEF\x96\x3B\x97\x09\x99\x09\x98\xF2\x27\xED\x5F\xA4\xEE\x62\x82\x9D\x8D\x91\xFE\x95\xDC\x96\xAC\x97\x2B\x29\xF5\x5F\x9E\xBF\x97\x7F\x95\xFA\x91\xFF\x96\x9B\x97\xFD\x97\x99\xFB\x7D\x5F\xB0\x37\x9C\xDC\x73\x36\x97\x44\x8D\x1F\x81\xF5\x97\xC0\xDD\x03\x5C\x9B\x7C\x34\x82\x90\x8F\x94\x08\x98\x9E\x96\xD9\x95\xD6\x2A\xD2\x5B\x8D\xAC\x94\x6E\x9A\xAD\x94\x7E\x8B\x73\x85\xF9\x92\x1D\x28\xE8\x57\x98\x40\x80\x41\x95\x59\x8D\x21\x30\x1B\x98\x8A\x94\x56\x30\x9F\x5F\x98\xC1\x8D\x79\x96\x03\x9A\x30\x94\xCC\x96\xEC\x92\x32\x2F\xC2\x4D\xBC\xC0\x93\x49\x9D\x5D\x90\x4A\x8C\x8B\x97\x17\x92\x99\x1C\xE2\x3B\x86\x04\x1F\x83\x99\x93\x93\x3A\x97\xB4\x95\x70\x97\x70\x30\x8C\x57\x8C\xAC\x9C\x8A\x80\x0C\x8F\x61\x96\xE2\x82\x43\x79\x15\x10\xE3\x34\x9D\xB9\x86\x72\x9D\xE2\x97\x1F\x00\x92\x97\xCC\x95\xCD\x2F\x86\x60\xBC\x94\x8B\x79\x93\x08\x9B\xEE\x95\x21\x98\x73\x95\x87\x30\x8D\x4E\x89\xC2\x8F\x38\x90\xB8\x91\xE2\x92\x5A\x91\x71\x74\x5C\x2E\xF8\x54\x9E\xB9\x85\x85\x90\xE6\x95\x7C\x91\x42\x00\x4A\x98\x93\x29\x96\x61\x88\xAC\x98\x84\x91\xEB\x91\x0E\x9B\xAC\x97\xBC\x96\x26\x2E\xB7\x57\x88\x9F\x84\xA5\x6A\x49\x8F\xA9\x69\x10\x98\x55\x98\x69\x29\xEF\x60\x85\xC3\x9A\x84\x92\x07\x9C\x13\x9A\xC3\x95\xBA\x85\x2F\x28\xED\x47\x73\x98\x8C\xDF\x77\x12\x00\x18\x99\x9B\x92\x61\x98\x63\x2B\x84\x5E\x90\xB9\x86\x78\x92\xE5\x92\xCD\x94\x95\x96\x85\x97\x56\x2E\x8C\x5E\x98\xB9\x8E\x78\x96\x3F\x96\x5D\x97\x0C\x74\x6F\x98\x81\x26\xF5\x56\x94\xA7\x82\x87\x99\x00\x9B\xBE\x95\x39\x98\xFB\x97\xE7\x30\xF8\x5F\xA9\xC3\x9A\x7F\x9D\xF0\x95\xF2\x94\x33\x8B\x7E\x97\x5A\xC8\x29\x5D\xA9\x2C\x73\x84\x90\x0D\x9A\x7B\x95\x11\x99\xCF\x95\x47\x30\xC1\x54\xA0\xBA\x8D\x80\x97\xEF\x94\x09\x98\x04\x98\x27\x98\xE6\x72\x39\x5D\xAB\xC1\x85\x88\x91\x95\x93\x06\x9B\x6A\x95\xC6\x97\x74\x2F\xE9\x4E\xB6\xBD\x8B\x3B\x9A\x03\x9E\x30\x97\x22\x98\xC4\x94\xA7\x2E\xDC\x43\x88\x62\x89\x76\x9F\x0C\x9C\x03\x98\x7B\x95\xDB\x97\x9E\x2E\x8D\x5D\x8B\xC4\x90\x59\x9C\xFB\x91\x1F\x95\x13\x99\xFA\x94\x4F\x30\xF5\x35\x99\xBB\x96\x49\x40\x0F\x9C\xD2\x92\xD8\x95\x66\x94\xC4\x30\xE7\x5C\xB4\xBF\x9D\x7E\x9B\xB7\x91\x16\x98\x61\x95\x8E\x98\xEA\x2A\x9F\x62\xA8\x92\x92\x62\x8C\x8E\x94\xD7\x7E\x24\x67\x9A\x98\xB8\x26\x80\x55\xA6\xA0\x82\x77\x94\xDA\x96\x17\x94\xDA\x95\x69\x94\x2D\x31\xF0\x54\xBE\xBE\x81\x51\x90\xFC\x91\x69\x8C\x40\x98\x62\x7F\x00\x29\xC6\xFD", -"\x65\xC4\x87\x4B\x94\x47\x90\x25\x94\xB0\x95\x71\x98\xDC\x2F\xF7\x61\x9B\xC1\x99\x87\x9D\x05\x9B\x1F\x9B\x17\x99\x7E\x98\xA9\x2F\xF3\xFC\x13\xFD\x43\x2F\x82\xD3\x8B\x20\x00\x52\x98\x65\x93\x9E\x2F\xE9\x54\xB5\xC3\x91\x72\x91\xDE\x93\xCA\x95\x8E\x97\x2A\x97\xA3\x2E\xD7\x5C\xA5\xBA\x99\x72\x99\xDE\x93\x24\x95\xB6\x93\x83\x88\x5C\xB9\x6F\x62\x85\x9C\x8A\x7C\x90\x72\x90\xF4\x96\xD3\x93\x8C\x98\x56\x29\xB8\x60\x98\xA5\x9E\x82\x97\xF4\x90\x0C\x99\xF9\x95\x7F\x95\x35\x29\x95\xE7\x6A\xBD\x9D\x86\x94\x11\x98\xFF\x90\x3D\x98\x23\x98\xB8\x2F\x95\x55\xA1\xC0\x97\x54\x93\x02\x9E\x23\x95\x09\x98\x90\x94\x20\x2F\xC5\x40\xAA\xAE\x93\xC8\x8C\xBA\x97\x00\x91\x67\x8E\xC1\x98\x1E\x27\x84\x63\xA9\xA4\x8D\x85\x91\xFA\x92\x0B\x99\x4F\x98\xC5\x98\xB0\x29\x8C\x63\xB9\xBD\x8E\x8C\x90\xE7\x95\x2B\x97\xD2\x97\x04\x8F\x2F\x08\xC5\x3B\xB1\x20\x87\xEE\x86\x49\x58\x35\x9B\xD8\x92\xD5\x98\x5F\x31\xF3\x62\xA4\xC3\x95\x8B\x96\x0E\x9F\x2E\x98\x3A\x99\xBC\x98\xEA\x30\xFB\x62\xAC\xC3\x9B\xC7\x7A\xBF\x97\x42\x6B\x0F\x84\x46\x68\x84\x2F\xEF\x49\xBF\xC2\x95\x8C\x9D\xB3\x97\x32\x98\x42\x99\xCC\x98\x19\x2F\xAB\x62\x8F\xBA\x91\x8A\x92\xB3\x97\x25\x9B\x91\x95\x98\x98\xA0\x29\xAB\x5F\x9F\x6D\x80\xDD\x86\x16\x8A\xF3\x96\xAE\x66\xDF\x98\xC6\x24\x96\x5E\xAF\x69\x80\x5D\x98\x99\x97\x29\x98\x50\x95\xCE\x98\x42\x29\x9F\x63\x84\xA5\x80\x8F\x97\xB8\x88\xEB\x90\xF3\x94\x3B\x90\x0B\x1E\xFD\x57\x9E\x05\x9F\x3A\x94\x25\x77\x47\x04\x7A\x98\x84\x92\xC0\x31\xD0\x56\x86\xC6\x87\x3B\x98\x18\x98\x5F\x97\x46\x98\x7D\x95\x40\x31\xFC\x55\x82\xC5\x8C\x57\x93\x6B\x93\x34\x64\xF1\x96\xC7\x88\xC6\x2F\xCC\x45\x91\x46\x8E\x16\x91\x12\x06\x81\x2D\xC4\x3E\xCA\x8C\x57\xA9\x14\x2E\x8E\x9E\x9B\xF8\x2B\x1D\x8F\x02\x8E\x36\x8D\xEC\x95\x15\x31\x87\x62\xA5\xAD\x8C\x8F\x9B\xA1\x96\x3D\x99\x9F\x96\xF8\x98\x99\x2A\xF2\x63\x9B\xAA\x83\x40\x95\x0A\x96\x9C\x83\x29\x90\x32\x98\x4D\x25\x82\xFC\x58\x13\x81\x70\x94\xD8\x92\x0A\x9A\x2D\x95\x0E\x99\x2B\x18\xEE\x31\xA0\xC3\x98\x89\x96\x1D\x9B\x44\x99\x42\x98\x56\x95\x49\x30\xEE\x54\x9C\xC7\x85\x5A\x93\x15\x9A\x4E\x96\x7D\x95\x16\x99\x3A\x09\x95\x3E\xA6\x71\x8A\xB9\x82\x9C\x8A\x00\x98\x7F\x94\x02\x98\xA4\xFB\x38\x64\xBD\x60\x9A\x91\x91\x08\x9A\x2E\x98\x66\x99\x94\x98\xB9\x2F\xC1\x64\xAE\xAA\x8B\x82\x90\xAB\x96\x3B\x9A\xAC\x94\x09\x98\xED\xA6\x6B\x3C\x95\xC0\x8D\xF3\x82\x4C\x96\xB5\x84\x9C\x8E\x49\x66\x52\x32\xD0\x30\x94\xC9\x8E\x83\x91\xEF\x97\x4A\x9B\xBC\x96\x95\x98\x0C\x30\xAC\x62\x9C\xC9\x9D\x58\x9E\x25\x9F\x63\x94\x7D\x99\xFD\x94\x12\x07\xBD\x22\x86\xB7\x9B\xB9\x70\xC3\x8E\x17\x99\x5D\x41\xA3\x40\x02\x19\xA2\x5B\x93\x59\x64\x91\x91\xB4\x96\x44\x99\x87\x94\x3F\x97\x1F\x2A\xC5\x64\x87\xAD\x81\x8D\x9A\xE3\x6A\xBA\x86\x3F\x75\x34\x99\x65\x18\xEB\x64\x99\xBF\x86\x3F\x93\xFF\x91\xEB\x96\x6B\x99\xAD\x97\x3E\x31\xD8\x54\xB3\xC2\x9A\x52\x9B\x20\x9E\x5F\x97\x0A\x8E\x81\x6D\x1B\x32\x8D\xC2\x10\xCA\x97\xC3\x8F\x21\x9C\xEA\x8D\x75\x99\x9F\x97\x34\x30\x8B\x5C\x85\xC8\x94\x5A\x99\x29\x98\x5D\x95\x82\x99\xBF\x95\x9D\x32\xF5\x00\xB0\x94\x86\x5D\x81\x36\x91\x22\x93\x1E\x80\x33\x98\x65\x23\x9D\x3B\xA3\xCA\x8C\xC4\x85\x2A\x98\xEF\x8D\x34\x99\x36\x99\xD7\x31\xD8\x64\x9A\xC6\x9A\x92\x93\xBA\x93\x48\x99\xE9\x94\x45\x99\xA7\x2B\xF7\x64\xB4\xA9\x86\x64\x37\x1A\x66\x8F\x8D\x11\x8B\xD1\x8A\x6E\x21\xC2\x49\xBE\x7A\x3B\x70\x9C\xA4\x97\x42\x9A\x5D\x41\x8D\x8C\x3E\x2F\xB0\x3F\x97\xC4\x94\x52\x9E\xBD\x96\x4A\x95\xAB\x98\xAB\x95\x9B\x32\xD8\x56\xB4\xC6\x95\x79\x97\x6D\x96\x11\x9A\x0C\x94\xFF\x95\x34\x28\xCA\xAC\x7B\xCA\x92\xC5\x8D\x2B\x9B\xF1\x8F\xAF\x98\x56\x98\x95\x32\xD9\x60\xBC\xC4\x98\x94\x90\x1B\x99\x7C\x96\x6C\x99\xC9\x97\x68\x31\xDA\x56\x9A\xB9\x81\x85\x98\x1A\x63\x74\x93\x85\x97\xA8\x83\xBB\x30\xAF\x48\xA7\xC2\x92\x84\x9B\x0C\x40\x50\x98\xB6\x99\x00\x99\xB8\x2D\xC2\x63\xA1\xC5\x84\x8E\x98\x0F\x9E\x38\x9A\x3E\x98\xE4\x98\xFC\x30\xEB\x61\xBE\xC3\x83\x2E\x9D\x58\x8F\xCA\x55\x31\x8E\x94\x90\xFF\x02\xB9\x55\xA0\xA1\x99\x51\x96\x14\x40\xE3\x89\xBB\x98\xE8\x8F\x7D\x29\x8B\x5F\x83\xC8\x80\x4C\x9F\x0A\x9F\xE5\x95\xBD\x99\x98\x97\xAF\x32\x92\x57\xA3\xCB\x89\x7A\x97\xAE\x61\x52\x8F\xA3\x99\xB9\x8C\xA1\xF4\x37\x62\xAA\xA6\x8C\x7C\x9C\x2D\x9E\xF1\x97\xF7\x95\x93\x99\x88\x30\xA9\x66\xB3\xBC\x8B\x99", -"\x91\xF6\x91\x10\x97\xCF\x8E\x76\x75\xF1\x21\xEB\x65\x99\x63\x92\x94\x9A\x14\x9B\x17\x94\x53\x98\xB3\x95\xE3\x28\xC2\x56\xA5\xA3\x88\x91\x9B\xB6\x95\x4E\x98\xCD\x94\x65\x99\xB0\x7F\x51\x3E\x9C\xC8\x90\x99\x95\x53\x78\x64\x9B\x01\x98\x69\x98\x3A\x31\x96\x65\xB3\xCB\x83\x7D\x9C\x05\x98\xFC\x97\xBD\x99\xD3\x97\xF9\x32\x94\x57\xBF\xC3\x8E\x63\x81\xB0\x91\x0C\x8F\xC0\x95\x82\x99\x1E\x33\xC4\x66\xA8\xAA\x95\x4C\x9B\x1E\x9F\x47\x99\xE8\x94\x62\x99\xA7\x2D\xC6\x65\xA9\xB6\x88\x96\x9B\xDA\x94\x16\x96\xF9\x6C\x7F\x68\x10\xA4\x42\x66\xA1\x47\x91\xC9\x8E\xEC\x94\xF8\x8E\x1A\x92\xEB\x8B\x6C\x24\xF7\x39\x95\xBB\x97\x75\x9F\xA8\x88\x0E\x92\xC8\x94\x14\x83\x24\x2B\xE1\x5C\xA8\xCD\x92\xB9\x8F\x31\x98\x16\x93\xD5\x98\x60\x99\x3E\x32\xD8\x63\xA0\xC0\x90\x9B\x9B\xFB\x93\x4E\x99\xEF\x96\xA7\x99\x6D\x2B\xE0\x64\xB5\x43\x93\x89\x90\xC6\x4A\x6F\x9A\x71\x3E\xBE\x99\xD9\x32\xF9\x44\xAF\xAF\x88\x9A\x9F\x9E\x92\x3B\x9B\xC6\x96\xB9\x99\x91\x2E\xF4\x66\x93\xBA\x90\x9A\x9E\x50\x8B\xAA\x8D\x02\x68\xCF\x99\xE1\x7E\x0D\x67\x85\x86\x8F\x9C\x90\x2F\x98\x2C\x9B\x4E\x98\xB1\x98\xAF\x31\xDD\x66\xB9\xC0\x9F\x9A\x92\xFE\x94\x67\x9B\xDE\x96\x9B\x97\xB4\x26\xD9\x62\xB0\x31\x84\x73\x60\x3B\x9A\xF2\x3E\xDA\x98\x99\x99\x1D\x30\xC0\x37\xAE\xCD\x8D\x8F\x9B\x19\x99\x6D\x94\xD3\x99\x3F\x97\x0F\x31\xB0\x62\x9A\xCE\x80\x63\x81\x91\x91\x33\x71\xF1\x99\xDD\x3F\xB2\x33\xE1\x43\x84\xA4\x82\x90\x9C\x1A\x9F\x30\x99\xC9\x99\xBA\x97\xDF\x32\xFD\x56\xBA\xCC\x8A\x84\x9E\x3B\x9E\xEA\x90\x8B\x7A\x41\x92\x01\x08\x84\x49\xB7\xC8\x94\x9A\x93\x90\x8B\x76\x9B\x2A\x98\x91\x99\xDD\x33\x84\x64\x9F\xCF\x9A\x88\x91\x3E\x9D\xEB\x95\xB8\x99\xAF\x97\xE5\x33\xBD\x60\xA1\xC4\x80\x58\x9C\xD9\x8B\x32\x99\xC7\x98\xC6\x99\xC7\x33\xF2\x61\x97\xC2\x9D\x91\x97\x34\x9C\x50\x9B\xD9\x95\xE6\x99\x50\x31\x96\x67\xAE\xC4\x91\x9E\x9F\x1D\x9B\x7A\x9A\x58\x88\x5F\x92\x86\x14\xAC\x49\x90\xBD\x8E\x0F\x7A\x2B\x9C\x7D\x9A\xA0\x99\x85\x6F\x06\x34\xC9\x66\x86\xCA\x83\x5A\x98\x3A\x9D\xE3\x94\xE6\x99\x8F\x97\xAC\x33\xA8\xF2\x7A\xAE\x99\x3A\x9C\xBB\x94\x37\x9A\xAE\x67\xEB\x99\x0A\x80\x01\x68\xA0\xC8\x96\x8C\x98\x2A\x9B\x5B\x9A\xBD\x95\x55\x99\x0D\x2E\xBA\x67\x8B\xC6\x86\x8B\x9D\x18\x99\x6C\x9B\x63\x98\xB1\x97\x3D\x01\xCC\x5E\x8F\x45\x93\x01\x9A\x1F\x99\x7D\x61\x74\x98\xA4\x93\xD6\x32\x86\x66\xA0\xCE\x88\x98\x91\xDF\x92\x61\x9B\xED\x98\x86\x99\x63\x31\x8E\x66\xA5\xC5\x90\x98\x97\x16\x9A\x62\x99\x5A\x98\xAA\x8C\x97\x2F\xA5\x2D\x85\x9D\x85\x85\x97\x74\x93\x1D\x7D\x10\x9B\xB4\x99\x81\x32\xEA\x63\x89\x79\x99\xA0\x95\x3A\x99\x4E\x9B\x76\x98\x05\x9A\x52\x31\x9F\x68\xBF\xBE\x8C\x94\x91\x62\x81\x8A\x9B\x75\x7E\xFE\x95\x6F\x19\xFC\x63\x8E\x82\x65\x05\x47\x2D\x9B\x88\x99\x5C\x99\x95\x95\x6E\x32\x8A\x60\xB4\xBB\x82\x6F\x96\xEF\x92\xC7\x97\x03\x98\x52\x97\x11\x30\x82\x5D\xBC\xBB\x88\x16\x93\xC1\x92\x59\x91\x84\x98\xF9\x7E\x17\x2C\x98\x74\x7E\x7A\x27\x70\x0A\x0A\x00\x43\x9B\xF4\x96\x94\x59\x97\x24\x83\xFA\x1B\xE6\x67\x46\x50\x2C\x8B\x4A\x01\x85\x7F\x03\x07\xAC\x00\x06\x69\xBF\x8C\x7E\xF5\x2C\x4B\x8E\x48\x66\xD2\x94\xAE\x71\xEA\x18\x80\x63\xBD\x9C\x70\x7D\x95\x4D\x87\x41\x99\x08\x7A\xBC\x88\xBB\x29\x93\x64\x9B\xE5\x63\xA4\x9C\x42\x62\xDB\x8B\xC0\x62\x2D\x8F\xCF\x2F\xFE\x93\x64\x95\x9B\x27\x81\xDB\x97\xAC\x91\x14\x81\x07\x43\xB3\xC3\x25\x54\xAD\x67\x88\x19\x98\xA2\x90\xFA\x91\x1C\x76\xF2\x50\xDB\x69\x69\x60\x92\xAF\x85\xDC\x2D\x74\x85\x9E\x7B\x1F\x8F\x7F\x99\xF6\x17\x99\x5C\x8F\x12\x74\x96\x9A\xCE\x92\xCC\x62\xF2\x85\x15\x88\x9D\x16\xF1\x11\xA4\xDE\x21\x2B\x8D\x2F\x9B\xC8\x94\xD3\x87\x60\x9A\x01\x33\xB3\x50\x93\xDF\x7B\xA5\x91\x71\x32\x8F\x7E\x82\x92\x67\x9A\x64\x11\x80\x66\xA4\xC2\x8F\x21\x9D\x0B\x99\x74\x5B\x9C\x97\x1E\x48\xDB\x30\xAF\xB7\x3C\x52\x9F\x1A\x36\x51\x95\xC1\x8A\xA4\x86\x72\x9A\xC2\x2F\xD2\x69\xB0\x90\x84\x89\x98\x68\x72\x1B\x96\x5F\x99\x7F\x00\x97\x34\xD7\xA4\x5C\x0E\x80\x1C\x82\x3C\x9E\x42\x91\x1C\x77\x70\x87\x90\x19\xEA\x91\x5A\x9B\x8E\x00\x89\x4E\x9E\x9C\x98\xBB\x93\x1D\x6A\x9C\xF9\x77\x63\xA0\x6D\x89\x1D\x8B\x65\x7B\x82\x9A\x2B\x92\x75\x7C\x3B\x0E\x01\x6A\x80\xD3\x80\x9E\x72\xA9\x87\x1F\x7C\x9D\x90\x84\x9A\xBB\x69\x7D\x5E\xBA\xD0\x9F\x7B\x95\x62\x81\xF0\x95\xE9\x7B\x1F\x9A\x6C\x66\x4B\x57\x8B\xD4\x9E\xE3\x73\x45\x9F\x85", -"\x91\x15\x9B\x84\x9A\x42\x27\xB1\x40\x86\x19\x8E\x7D\x90\x5E\x94\x93\x9B\x9D\x74\x02\x32\x57\x31\xE9\xD6\x72\x9D\x94\x90\x9F\x12\x78\x90\x98\xF2\x96\xC3\x8C\x89\x0B\x16\x64\xB0\x2D\x52\x9A\x59\x77\x95\x9A\x81\xF9\x97\x9C\x53\xBF\x19\xB1\x64\x9D\x0A\x82\x5A\x83\xD8\x94\x68\x87\x65\x8D\xA6\x33\x12\x8B\x7F\x5A\xB2\x94\x99\xA9\x98\xFE\x92\xB1\x3D\x00\x98\xCC\x85\x51\x25\xD3\x27\x80\x12\x9A\xBC\x84\x01\x9B\xB5\x84\x6C\x97\x08\x95\xB2\x2D\xBE\xA5\x5A\x96\x8C\xE1\x82\x4B\x9E\x08\x74\x0B\x99\x5A\x9A\x2E\x30\x9F\x58\xA3\xDD\x61\x3F\x96\x96\x78\x8B\x8B\x66\x92\x1B\x99\x3B\xD4\x37\x6A\xAD\x6C\x7F\x6F\x93\x11\x93\x68\x85\x45\x90\x34\x77\x4C\x07\xA6\x42\x96\xB8\x84\x72\x95\x3A\x91\x9A\x98\xBA\x98\x25\x8A\xD4\x34\xCC\x08\x4C\xD5\x8D\x4D\x8B\xEE\x8D\x14\x99\x24\x99\x93\x9A\x25\x03\xD3\x3D\x8D\xD3\x83\x85\x9C\x25\x7A\xE4\x67\xC0\x98\xBC\x9A\xA2\x00\xC3\x39\xBB\x8E\x97\x98\x9C\x85\x95\xC1\x92\x41\x9B\x07\x93\x22\x16\x95\xFF\x46\xFA\x6E\x99\x97\xC2\x95\xC9\x6D\x38\x9A\x74\x9A\xFB\x1C\x92\x51\x83\x5D\x98\xEF\x47\x8C\x92\x79\x5F\xF4\x6C\xD2\x82\xE8\x33\x81\xA7\x76\xE8\x61\x74\x87\x1B\x97\x85\x91\xE2\x99\xEA\x73\xF1\xF5\x44\x21\xB0\x87\x82\x00\x8E\xA2\x85\x28\x9B\xEA\x8F\xA5\x9A\xD6\x00\xE5\x69\x8A\x8C\x22\x23\x96\xD4\x92\x60\x31\x69\x9A\xBC\x8E\x11\x2F\xE7\xF4\x73\xD5\x88\x9F\x9F\xEE\x80\x54\x75\x6A\x9B\x7E\x9A\x5A\xC4\x38\x5E\xB5\x82\x50\x55\x80\x41\x99\xEB\x92\x04\x9A\x69\x99\xEE\xC2\x18\x49\xA3\xB0\x65\x1D\x87\x1B\x9C\xF5\x95\x6E\x99\x0E\x90\xBB\x31\x8E\x53\xA4\xA5\x85\x32\x79\xBB\x96\x3E\x9B\x46\x9A\x8A\x9A\xD6\x24\x96\x6A\xA5\xF9\x78\xA8\x9A\xF0\x2C\xB7\x9A\x62\x95\x8C\x8F\x8C\x29\xEB\x92\x42\xBE\x9A\x31\x8A\x8E\x7D\xBA\x99\xB0\x85\x8A\x99\x7E\x2F\xF8\x63\xA4\xD4\x85\x85\x96\x52\x98\x0B\x7B\xC4\x75\x08\x96\x3A\x64\x21\x53\x98\xB0\x97\x56\x85\xE2\x8F\x2B\x7F\xDD\x93\x02\x6A\x20\xD4\x33\x1C\x74\xD4\x89\xF1\x87\x53\x95\x16\x50\x65\x96\x24\x99\x18\x0B\xCA\x64\x8F\x82\x85\xAA\x9B\x72\x8A\x7D\x8C\xFB\x96\x15\x8F\x9E\xD7\x77\x6B\xBC\xB7\x82\xAA\x91\x2E\x91\xF4\x92\x2A\x90\x20\x8F\x99\x0D\xCA\x6A\xAE\xFF\x6A\xFE\x82\xA1\x8E\xC3\x7F\x6B\x97\xB2\x92\x18\x30\x95\x1C\x3B\x9E\x8E\x71\x7C\x60\x9A\xAC\x91\xA0\x65\xAA\x9A\x50\xF7\x2D\x1B\xBD\xC9\x98\x06\x3F\x09\x9F\x2D\x87\x0F\x99\xF0\x87\xFD\xFA\x15\x6C\x92\x71\x9C\xA0\x85\xAA\x72\xE1\x2E\x80\x9B\x59\x99\x93\x0D\xB5\x65\x9F\xA9\x8F\xA1\x81\x5B\x92\x4C\x95\x5C\x9A\x7E\x34\x1D\x36\xF1\x2F\x9C\xA0\x9B\xD1\x8A\x07\x9F\x03\x96\x8F\x8C\xF0\x61\x29\x5D\x22\x6C\x8D\xC2\x8D\x1C\x9B\xA8\x90\x93\x8D\xD0\x75\xD3\x2D\x3A\x36\xD0\x42\xBA\xD5\x8B\xF2\x5E\x2F\x9C\xAD\x98\xE2\x94\x1B\x9B\xA2\x2A\xBF\x6C\x9B\x7C\x21\xB2\x9C\xC7\x8B\x2D\x93\x9E\x8C\x50\x95\x7D\x1A\xDB\x6B\x86\x75\x51\x0B\x9A\xE0\x76\x87\x93\xE2\x83\x13\x8C\xC0\x00\xA8\x6B\xB6\xC1\x82\xE5\x74\xCC\x73\x97\x42\x96\x9A\x2B\x9B\xCF\x00\xF5\x1C\xB6\xD7\x89\x71\x93\x4F\x9F\x32\x45\x29\x94\x4C\x77\x2C\xCD\x12\x1D\xA6\xD8\x84\xB3\x91\x07\x90\x71\x99\x32\x95\x9F\x85\x31\x36\xBB\x14\x9C\xCE\x96\xD1\x7C\x64\x9C\x28\x9A\x80\x90\xA3\x98\x72\xEE\x16\x3F\xA1\x16\x86\x4E\x75\x21\x97\xAC\x8D\x88\x9B\x14\x97\x6B\x31\xA0\x1E\x75\xD9\x91\x3F\x94\x5B\x9A\x00\x84\xAD\x7C\x61\x88\xBF\x18\xB0\xD2\x52\xC6\x8E\xB3\x82\x48\x63\xD0\x9A\xE5\x97\xB1\x97\x71\x22\x91\x68\x86\x80\x87\x30\x8C\xB4\x73\xC9\x99\x8A\x96\x85\x9A\x46\x36\xB2\x02\x8D\xD4\x9B\xAB\x86\x42\x9D\xD2\x99\x43\x30\x47\x9B\xCC\x31\xE6\x68\xB7\xF3\x4F\x8E\x9B\xEE\x62\xC9\x9B\xA7\x9B\x4B\x9B\x21\x35\xB1\x45\x97\x77\x7D\xA8\x9A\x4E\x9D\x8A\x99\xA3\x9A\x54\x9B\xB0\x22\xC7\x49\x72\x8A\x9B\xAD\x83\x50\x96\x34\x95\x02\x30\x50\x9B\xA2\x28\x9D\x6B\x97\x94\x93\x03\x97\x65\x85\xF6\x6C\x7E\x99\x50\x9A\x81\x34\x94\x64\xA4\xD2\x8E\x91\x43\x5F\x9E\x32\x8F\x92\x95\xA9\x42\x5B\x09\xDB\x0D\xA8\xD8\x9C\xF1\x86\xFE\x96\x56\x98\x7F\x9B\xC9\x87\x34\x32\xBE\x6A\x87\xDB\x8D\x53\x3B\x75\x85\x24\x85\x5F\x97\xFE\x8D\x8D\x20\xFA\x6B\x86\xA0\x8C\x92\x9F\x54\x96\x49\x98\xDB\x37\xD2\x93\xC5\xD7\x49\x6D\xAC\x74\x8A\x3E\x9B\xAB\x6F\x41\x97\x05\x99\x56\x9A\x19\x30\xE8\x4A\x88\xFA\x6D\x08\x34\x38\x9E\xD4\x8D\xED\x93\x65\x81\xCD\x0F\xD6\x6A\xBC\xC9\x9D\x2B\x9E\xFE\x7D\xDD\x9B\x87\x93\x70\x48\x38\x2A\xCA\xE0\x5D\x8B\x88\x8C\x89\xDA\x82\x49\x95\x61\x97\x5D", -"\x78\xE2\x36\xBB\x16\x8B\xDB\x9D\x6F\x9D\x6C\x9B\xC5\x98\x80\x96\x05\x94\x67\x35\xB9\x01\xB6\xDB\x82\x51\x95\x60\x9E\x6E\x92\xB3\x98\xBE\x9A\x48\x05\xD1\xC4\x44\xD3\x94\xB6\x91\x70\x9D\x70\x9B\x88\x94\xBA\x9A\x52\x1A\xFE\xE0\x69\x74\x2B\xB8\x95\x15\x9F\x5E\x90\x71\x93\x4F\x95\xB7\x2A\x99\x66\x8E\xA6\x9F\xAB\x9C\xD8\x2E\x46\x94\x49\x88\x9C\x9A\x7A\x1A\xB9\x61\x9E\xA0\x87\xD3\x8C\x4D\x9B\x63\x9A\xBE\x9A\x93\x9B\xFC\x36\xF8\x6D\x8C\xD6\x95\xB7\x95\xEC\x96\xE7\x8D\x97\x9A\x52\x7E\x79\x36\xD6\x5D\xB8\xDA\x8A\x8B\x9C\x4B\x8A\x90\x60\xC7\x9A\x32\x9A\x86\x33\x95\x6B\xA5\x90\x27\xB3\x94\xB3\x7D\xE2\x98\xB4\x8D\xBB\x99\x44\xE9\x69\xF5\x5B\x7C\x3F\xB9\x91\x42\x9E\x2A\x9B\xB1\x96\xFA\x5D\xEC\x34\xB9\x6E\x8C\xDD\x8E\xA0\x93\x06\x7E\x9D\x9B\xA1\x9A\xE3\x85\x5C\x09\xD1\x6D\xB1\xD3\x81\xB7\x98\x75\x9C\xA7\x88\x75\x82\xA1\x9B\x97\xE1\x7F\x5D\xBD\xC7\x53\xBA\x9A\x47\x99\x34\x75\xF5\x98\x9A\x9B\x99\x25\xF5\x27\x83\x3D\x75\xAD\x9F\x77\x35\xDA\x99\xD6\x9A\x15\x86\xB8\x35\x97\x57\xBF\xD3\x8E\xB4\x30\x73\x9F\xED\x99\x19\x9A\x48\x9B\xE1\x35\x83\x6A\x8E\xBD\x8A\x1D\x8E\x98\x94\x29\x96\x7A\x33\xBA\x9B\x5E\x37\xA1\x2B\xBD\x9B\x94\x30\x85\x42\x9A\xB9\x99\x97\x7F\xA5\x9B\x35\x37\x92\x4E\xA2\xC7\x94\x26\x9B\x43\x9E\x79\x97\xCB\x92\x91\x67\x18\x35\xF7\xFB\x64\xDD\x86\x75\x9F\x68\x99\x87\x98\x6E\x98\xE0\x95\xB4\x0A\xA5\x2B\xAD\x93\x87\xBC\x9C\x6E\x99\xF1\x9B\xCA\x92\x51\x9B\xFB\x2B\xF9\x19\xBD\xD0\x99\xDD\x8A\x46\x9A\x60\x3E\xDB\x9B\xC0\x9B\x12\xD1\x68\x6B\xB4\x0D\x7C\xB5\x99\xFC\x97\xDB\x78\x28\x9B\xE3\x97\x17\xC6\x2D\x46\x03\xDB\x8A\xBA\x45\x6C\x9A\x43\x9B\xB4\x9B\xFF\x34\xE7\x2E\xC8\x4F\xA2\xD5\x83\xE6\x47\xFE\x92\xE5\x88\xB4\x9A\x05\x94\xBF\x13\xFE\xF6\x39\xDE\x8E\x3E\x84\xBE\x88\xBF\x9A\xE3\x87\xA5\x92\xCE\x36\xDC\x6D\x87\xD5\x87\xF5\x8F\x6D\x9C\xB3\x94\xDD\x9A\x62\x97\x69\x37\xD2\x0A\xAE\xB6\x83\x93\x90\x31\x92\x2C\x97\xB3\x60\x09\x95\x96\xFE\x03\x67\x9E\xDE\x9B\xB1\x9F\x1F\x7D\xB8\x97\x2C\x9B\x13\x95\x16\x07\xF0\x33\xA4\xC0\x70\xBE\x98\xEE\x93\xB1\x9A\xA3\x98\x55\x78\x1B\x5F\x4A\x61\x84\xDF\x89\x3E\x9D\x75\x82\xBD\x94\x90\x7F\xD3\x2D\xEA\x37\xCD\x13\x85\xDF\x83\xB0\x9A\x54\x96\xE3\x9B\x92\x98\x30\x95\x2D\x17\xAE\x6C\x82\xD7\x89\xF7\x77\x7C\x93\xFD\x99\x5E\x9A\x87\x9B\x79\xCA\x4F\x65\x86\x73\x98\x55\x9E\x98\x93\xE2\x98\xEE\x9A\xF2\x9B\xCB\x30\xB3\x6B\xB1\xA0\x9D\xB1\x90\x5E\x97\xAE\x98\x94\x7F\xFE\x9B\xF2\x37\xEC\x6F\x85\xDC\x9F\xB8\x94\x5F\x90\xBB\x99\x72\x93\x91\x9B\xF4\xFE\x29\xBA\x31\xDF\x90\x74\x82\x81\x98\xE5\x99\xAD\x95\x27\x9B\x21\x37\xD1\x65\x96\xDF\x99\x2B\x8E\x72\x9B\x91\x40\x04\x9C\x0E\x9C\xCC\x30\xD8\x6C\x8D\x1E\x9C\x06\x83\x29\x33\x03\x9D\x24\x88\x7A\x51\x84\x2E\xEB\x6D\xAD\xE0\x9B\x6B\x91\x73\x9D\x6F\x30\x2F\x8B\xFB\x7E\x2E\x38\x88\x2F\x94\xD6\x8A\xBD\x91\x42\x62\x20\x99\x33\x4B\x1C\x9C\x93\x1C\x92\x1D\xB8\xE0\x94\xC1\x96\x77\x99\xE8\x98\x0F\x9C\x60\x78\x6F\x36\xE6\x6B\xAA\x53\x85\xBF\x9D\x4F\x8B\xCE\x9A\x50\x42\x0D\x9C\x44\x38\xA8\x6F\x93\x82\x90\xA7\x9E\x3A\x9F\xDA\x7F\x89\x96\x9D\x9B\x6C\x36\x87\x67\x8F\xDA\x42\xBB\x9C\x82\x9A\x60\x30\x10\x9C\x37\x90\xA1\x35\xB0\x6B\x8F\xFB\x68\xBF\x9D\x10\x37\x0B\x9E\xE7\x90\x18\x94\x22\x2F\xFF\x62\x85\xAE\x81\x06\x88\x80\x9E\xFF\x9B\x79\x9A\x5D\x9B\xFE\x34\xBA\x6B\x8C\x0E\x98\xBC\x89\x80\x9E\x74\x7B\xE0\x9B\x93\x88\x93\x36\xA9\x22\xA6\xB0\x55\xF7\x73\x7C\x99\x02\x9C\x53\x88\xBC\x9B\x13\x35\x9A\x6D\xBA\xC6\x93\x54\x8D\x69\x9F\xCC\x7C\x14\x9D\x43\x95\x3B\x37\xD0\x68\x8B\xDE\x85\x7B\x9F\x52\x9B\xB5\x7E\x63\x94\x8C\x9A\x7C\x38\xED\x70\xBE\xE1\x84\xAE\x9B\x88\x9A\x34\x95\x59\x88\xCD\x9B\x8E\x29\xD5\x68\x91\xE2\x9A\xBE\x91\x7D\x9E\x7D\x78\x71\x93\xBC\x9B\x5E\x20\xA5\xBC\x65\xD7\x9F\x0F\x3A\x58\x95\x0E\x9D\xB4\x85\x23\x9C\x56\xEA\x7D\x68\x85\xBF\x91\xAE\x80\x7B\x9B\x1D\x6D\xDF\x51\xD9\x9B\x0B\xA3\x35\x6F\x8B\xA7\x9F\xB7\x9E\x33\x84\x0E\x9A\x27\x99\xF4\x6F\xE0\x29\xC3\x6A\xBD\xDE\x9D\x9D\x8D\x53\x99\xF8\x9B\x03\x9C\x5B\x9C\xD8\x30\x88\x4F\xB9\xE2\x8D\xB8\x9B\x8B\x9F\xB2\x84\x9E\x98\xA4\x8B\xCE\x37\xFC\x6F\x80\xE3\x9A\x6D\x81\x67\x9E\xC2\x9A\x53\x85\xEB\x8C\xC0\x20\xD0\x6A\xAE\xD2\x93\x4A\x8E\x36\x83\x19\x9C\x12\x8D\x66\x9C\x23\x36\xC0\x3D\x58\xD8\x82\x01\x7A\x61\x9C\xDE\x99\xF6\x9B\x61\x97\x9C\x38\xCC", -"\x70\xAA\xC8\x79\xB7\x99\x00\x34\x87\x91\x1D\x98\x30\x9B\xDC\x17\x8F\xC9\x6B\xB7\x82\x07\x86\x8D\x9D\xB0\x8E\x30\x9C\x31\x98\x2F\x32\xB7\xF7\x71\x5E\x85\xAB\x9D\x53\x99\xE1\x98\x79\x83\x8D\x2F\xE6\x38\xB7\x71\x9B\xAB\x84\x70\x85\x31\x9D\x87\x7D\x8D\x9A\x96\x9B\xEA\x34\x86\x70\xBE\x50\x5D\x84\x91\x8C\x98\xD1\x98\x3E\x82\x03\x76\x8F\x30\xEA\x69\x8E\xE0\x84\xC5\x97\x0D\x9C\x19\x9E\x41\x9D\xA1\x7A\x45\x28\xBA\x61\x9B\xD3\x8A\xA7\x94\x72\x9C\x21\x9D\x3B\x9D\xD0\x90\xD9\x30\x93\x7C\x7A\x8E\x9F\x4C\x0C\x3B\x92\xA0\x99\x17\x95\xD2\x7B\xDD\x34\xA4\xEF\x3A\xB5\x88\xC4\x99\xE2\x95\x5C\x57\x0A\x9C\x92\x36\x23\x39\xD5\x5B\xBA\xD9\x9C\xB2\x98\x93\x29\x10\x5E\xAD\x4D\x7C\x9C\x05\x39\xFB\x71\xA1\xD9\x96\x74\x93\x87\x99\x25\x9F\x39\x9C\xEB\x96\x89\x36\xDA\xE6\x49\xF3\x66\x9B\x93\x07\x7B\x52\x30\x4C\x9C\x87\x9C\x3A\xC7\x12\x1D\x9B\xE2\x80\xC7\x97\x85\x9B\xF2\x98\x5F\x99\x5C\x9B\xAA\x35\x82\xD6\x76\x42\x96\xC2\x9F\x93\x9F\x1A\x9F\x43\x9D\xE5\x8F\x90\x26\xFF\x29\xA8\xE4\x89\x86\x91\x85\x9B\xDC\x99\x98\x94\x51\x93\x55\x38\xA6\x6F\x8D\xE4\x8E\xCA\x92\x93\x98\x8C\x90\x85\x90\xD6\x9A\x7F\x37\xD4\x72\xA4\xE4\x93\x32\x81\x68\x9E\xA2\x75\x53\x9C\x77\x9C\x4F\x39\x8D\x6C\x88\xD2\x84\x5C\x90\xFE\x8D\x26\x9E\x58\x9C\x95\x9C\xD7\x2E\x9C\x6B\x89\xE5\x80\x75\x63\x77\x9C\x28\x83\xE9\x2D\xB3\x9C\x18\x39\xD8\x71\xBC\xBD\x81\xAB\x81\x69\x9E\xB7\x99\x1E\x9D\x30\x91\x80\x00\xA9\xBA\x38\xE5\x8E\x41\x9A\x97\x9E\x7C\x95\x71\x9B\xAF\x8D\x85\x37\x87\x6B\x96\xF6\x6A\x05\x82\x98\x98\xB3\x92\x38\x9C\xEB\x9A\xCD\x31\xF5\x0A\xA4\xDA\x88\xFB\x61\x30\x85\x21\x33\x60\x9C\x4D\x95\x19\x39\xCD\x6B\x97\xD7\x90\xB2\x93\x3D\x82\xBB\x9B\xA7\x91\xC0\x9C\x77\x39\x8E\x73\xA6\xE2\x82\x67\x80\x7A\x98\x0C\x84\x1A\x9B\xD2\x94\xA5\x37\xDC\x09\xB8\xE3\x82\xCD\x9E\x86\x9F\xB6\x99\x4A\x9B\x69\x85\x2B\x35\xBD\x53\xBF\xD1\x9C\x52\x7C\x9B\x93\x2D\x80\x2C\x9C\x4D\x53\xB2\x38\xA1\x74\x57\x66\x83\x16\x88\xA0\x97\x2D\x9F\x4D\x9D\xC5\x5D\xBB\x37\xE5\x65\x7C\xE2\x94\x7C\x85\x2E\x83\xE3\x2D\x64\x97\x1A\x95\x0B\x2A\x87\x13\x86\xDF\x94\x55\x92\x9E\x92\x80\x8F\x31\x9C\x56\x43\xE0\x36\xB1\xB1\x67\x6E\x27\xCE\x9C\x2D\x90\xF0\x9A\x55\x9C\x21\x80\xBE\x20\x96\x60\xA6\x98\x48\xB7\x92\x61\x9A\x03\x99\x6E\x83\x86\x30\xD4\x39\xC5\x17\xBB\xDB\x85\xC2\x97\x71\x99\x05\x99\x35\x91\x15\x98\xF3\x36\xC8\x5B\xAA\x57\x83\xCA\x91\x9E\x9C\xD5\x87\xE9\x9B\xEB\x9C\x32\x7A\x67\x6F\xA5\x16\x94\x51\x95\x9D\x99\x39\x9F\xC9\x9B\x06\x95\x13\x1A\xBB\x73\xA9\x74\x2D\xCF\x9B\xFF\x87\xF0\x90\x2E\x9C\x78\x9C\xDA\x36\xB0\x64\x87\xA0\x94\x53\x0F\xEB\x8E\x55\x76\x6C\x92\x7A\x2D\xD4\x07\xFC\x73\x86\x5E\x9E\xCF\x9D\x95\x9A\xC6\x9A\xF1\x8B\x3C\x98\x16\x38\xFB\x60\xB7\xD8\x8C\xCC\x93\x9D\x98\x79\x97\x58\x9D\xFB\x9C\x2A\x2E\x81\x25\x09\xE4\x8F\xAB\x91\x5E\x93\xFF\x98\x82\x07\x04\x9D\x16\x3A\xF0\x72\x89\xE2\x94\xF2\x88\x07\x9B\xFE\x88\xC4\x9A\x97\x7A\x1E\x03\xFB\x73\xA1\xE8\x9F\xCD\x91\x97\x9B\x90\x88\x2E\x99\x6B\x9A\x27\x3A\xEC\xEF\x54\xD9\x97\xE9\x3B\x2D\x92\x3C\x9E\x75\x9C\x20\x87\xD8\xA2\x33\x6E\x95\xE3\x9D\x22\x92\xD9\x90\x0B\x9C\x59\x9D\x70\x9A\xEC\x39\xAB\x74\xBA\xE3\x9B\xB2\x93\x93\x9A\x64\x55\x76\x83\x49\x31\x0A\x3A\xE1\x37\x8C\xE8\x84\xD2\x9E\x95\x99\x32\x98\xD1\x9B\xD0\x2F\xC2\x2E\x97\x73\xAA\xC8\x90\x58\x95\x8B\x97\x1E\x9C\x78\x9C\x21\x9D\x31\x39\xCC\x74\x86\xBB\x82\x44\x63\x12\x9C\x44\x86\xCD\x81\x28\x9D\xAC\x39\x93\x71\x99\xAC\x6E\xC2\x94\x43\x3D\x46\x9E\x7B\x9C\xA3\x9B\xF7\x36\xAD\x6C\x98\xE5\x8D\x47\x95\x58\x80\x49\x9C\x96\x9C\xA0\x9C\x5A\x3A\xF3\x1E\xAF\xE6\x87\x12\x4C\x85\x9D\x08\x81\x16\x8D\x30\x9D\x28\x38\x9A\xEC\x4C\x7F\x9C\xB0\x7F\xA5\x9B\xDA\x94\x51\x9C\x33\x9C\x10\x27\x9D\x70\xB8\xE7\x8B\x7E\x99\x23\x92\x93\x9A\x65\x77\x0A\x9D\x82\x33\xC5\x72\x9B\xDF\x80\x9E\x9C\x3F\x98\x73\x96\xEE\x80\x44\x9D\xE6\x2E\x92\x71\xB9\xE9\x96\xC3\x93\x1A\x9D\x00\x91\x69\x98\x4A\x9B\xEA\xF8\x20\x74\x89\xEA\x80\xD4\x95\x0B\x9A\x50\x9D\xD3\x76\x47\x85\x7D\x39\x82\x6A\x89\xE6\x80\xAE\x91\x9A\x5E\xCD\x8A\xA6\x9D\x48\x9D\xE1\x38\xA3\x73\x90\x0F\x9B\xCC\x92\x99\x9F\x50\x91\x5E\x94\xC8\x9B\x29\x3A\x90\x75\x8B\x1F\x85\xC5\x9D\x9A\x9A\x33\x9D\x64\x9C\x68\x99\x8B\xC4\x0D\x53\x8A\xE6\x8F\x4C\x9F\x62\x9F\xA8\x6F\x95\x9D\x4D\x9D\x55\x39\xB8\x74\x82\xDE\x97", -"\xD5\x9D\x96\x8F\x34\x9E\x28\x9C\x5B\x9B\xAA\x2C\xE6\x74\xBD\xE7\x8F\xCF\x92\xAC\x99\xF5\x98\x1C\x9D\xF4\x9A\x95\x38\xEB\x6B\xBF\xDA\x8D\xC5\x96\xCC\x92\xF6\x9A\x4C\x9A\xF6\x4E\xB9\x39\xA9\x42\x65\xAA\x74\x3E\x87\xBC\x90\x58\x9F\x85\x9C\x6B\x9B\x9D\x27\xC9\x4A\x99\xDB\x88\xBE\x9D\x9C\x99\x12\x92\x7F\x9A\x9B\x92\x9A\xC0\x14\x7A\x0D\x84\x3D\xD6\x98\xAA\x9A\x51\x9F\xD7\x90\x00\x9D\xE4\x3A\x81\x5B\x8E\xE7\x97\x11\x9F\x24\x9A\xC1\x9A\x7B\x83\x75\x9D\x25\x2E\xD4\x5D\xAE\xEB\x8F\xCC\x9A\x76\x9F\x19\x9F\x2A\x9A\xEC\x8C\xD2\x38\xE9\x6D\xAF\xD2\x8A\xCD\x98\xAF\x9C\xD6\x97\x9F\x9D\x60\x9D\x16\x37\xE4\x6D\x8C\x3F\x8C\xCF\x82\x6F\x99\xEA\x7B\x86\x9B\x89\x71\xE5\x2E\xB3\x75\xA7\xE0\x8F\xC1\x9E\x0B\x80\xBB\x94\x10\x99\xC7\x82\x93\x62\x6C\x75\x92\xEC\x8B\xC2\x9A\xAA\x9E\x00\x73\x2E\x6B\x6D\x9D\x29\x5D\x1A\x76\xB3\x2E\x94\xD5\x91\x81\x99\x38\x9C\x71\x64\xFC\x9B\x53\x38\xF6\x71\x8B\x29\x9B\xF8\x22\xB2\x99\xD9\x86\xE1\x92\x66\x9D\x09\x3B\xFE\x5B\xA1\x8E\x8E\x3A\x82\x80\x98\x63\x9A\x08\x9C\x29\x9B\x86\x79\x19\x75\xA1\xEC\x99\xD7\x97\xB0\x9F\x5B\x9C\x79\x9C\x85\x9D\x3C\x36\xF5\x6A\x90\xC2\x8A\x31\x8B\xB3\x9E\x60\x9E\x94\x9C\xD5\x99\x26\x30\xD4\x6E\xA3\xC1\x80\x2B\x81\xE4\x92\x7B\x85\x8C\x9C\x20\x88\x55\x07\xA7\xB7\x2D\xEC\x97\xDF\x8F\xB2\x98\x4D\x9C\xC3\x9A\x99\x9D\x4E\x36\xAA\x6E\xBF\xE3\x99\x1B\x98\x8E\x75\x04\x9D\x75\x31\x88\x9D\x23\x3B\x93\x76\xBA\xE0\x95\xD8\x9C\xAC\x96\xE5\x8F\xAC\x80\x96\x9D\x3C\x3B\xC7\x76\xA2\xD1\x94\x8A\x90\x74\x9C\xB1\x83\xCD\x9A\xC7\x82\x87\x3A\xE8\x76\x86\xED\x98\xD3\x94\xB1\x99\x83\x62\x64\x9B\x87\x81\x60\x3B\xAE\x76\xA4\xEC\x93\xD4\x97\x8A\x9F\x59\x9C\x9D\x6E\x1F\x9C\x7D\x3A\xDC\x48\xA0\xE9\x9D\xD1\x96\x94\x98\x6B\x81\x95\x9C\x79\x84\x72\x3B\xC8\x61\xBA\xEB\x9C\xD4\x91\x2B\x9E\x16\x99\x83\x98\x2E\x74\xDD\x21\x8B\xEC\x12\x14\x99\xD8\x99\xB6\x9C\x6E\x9F\xD8\x9D\x31\x9D\x51\x39\xF7\x35\x98\xEC\x82\x18\x33\xB5\x9D\xD9\x8F\xDE\x9D\xBA\x9D\xF0\x00\xD4\x21\xAB\xBB\x8E\x3C\x85\xB4\x9A\x71\x9D\xCF\x9C\x11\x9D\x59\x38\xE0\x6E\x9B\xE1\x95\xA7\x9E\x67\x9B\x73\x9C\x01\x33\xCE\x9D\x85\x27\x9F\x77\x97\xEE\x81\xDD\x90\xF1\x93\x0C\x9F\xD9\x9D\x82\x9D\xA6\x3B\xEA\x76\x8C\xD0\x9F\x92\x95\x76\x98\x0A\x99\xA1\x9A\xF5\x99\x4B\x05\xD2\x76\x95\xEE\x84\xDC\x9B\xA8\x98\x32\x9A\xA2\x9B\xFE\x99\x6E\x16\xD3\x0D\x81\xBB\x9E\xD3\x9A\xBB\x98\x8F\x98\x44\x99\xDE\x9D\x46\x29\x87\x73\x8C\xDE\x80\x92\x01\xB6\x88\xE0\x93\xAE\x9C\xBF\x9B\x3F\x65\x79\x76\x94\xED\x92\xDD\x93\xC9\x8F\x0F\x9D\x06\x91\x5E\x86\x8C\x38\xC4\x3B\x88\xD7\x84\xC4\x96\x78\x99\xC3\x82\xF0\x9D\xB9\x9D\xC4\x3B\x9D\x71\xAF\x89\x95\xC4\x92\xCC\x6E\xEC\x6F\xF3\x94\x1E\x68\x18\x35\xCA\x77\x82\xEE\x8C\xDE\x96\xB9\x9D\x7B\x9C\x25\x9C\xCB\x9B\xC6\x35\x98\x6F\xAC\xDA\x9C\xD0\x95\x45\x9A\x7E\x9F\x8C\x95\x3B\x9D\xE9\x3B\xFC\x75\xBC\x04\x92\xA8\x97\x79\x9A\xEB\x91\x7E\x99\x34\x9A\x00\x2C\xF2\xC6\x5A\xEF\x9E\xDC\x92\xB6\x9E\x7E\x9E\x6B\x9C\x3E\x9A\xAC\x37\xB0\x6A\xAE\xDE\x8E\xDE\x87\x07\x96\xBD\x99\x47\x93\x85\x04\xD7\x3A\xD4\x43\x59\xEB\x9A\x48\x87\x99\x8E\x7F\x9F\x15\x8D\xFF\x9D\x3C\x3A\xC8\x73\xA8\xB8\x8A\xCE\x94\x7F\x9B\x5C\x9E\xFD\x9B\xFD\x9A\xBE\x37\xBC\x6A\x84\xE7\x9D\xE0\x99\xD2\x2F\x83\x9C\xEC\x9C\x3E\x94\x55\x3B\xDD\x6E\x90\x2D\x85\xE1\x96\x0A\x91\x40\x9E\x3C\x9C\xE0\x8C\xAE\x02\xAF\xE0\x4C\xDF\x88\xC6\x90\x25\x9B\x00\x87\x26\x98\xD3\x8E\x04\x39\xF0\x74\xA8\xE3\x95\xCE\x8F\xE1\x78\x1A\x9C\x84\x94\x37\x8F\xD8\x37\xFF\x8C\x7F\xF0\x83\xFD\x81\xC4\x9C\x2B\x9D\x9C\x9C\x67\x9C\x42\xF6\x5B\x71\x9C\x01\x85\x93\x9F\xB0\x9E\x73\x7D\x43\x30\x17\x9E\xC3\x3B\xA2\x78\xBE\xE8\x98\xD0\x9F\xBD\x70\xC4\x9A\xFD\x83\x8D\x2F\x58\x3C\xE8\x77\x9A\xF1\x85\xDC\x93\x31\x9B\xB8\x95\x14\x98\x00\x9B\x31\x0A\x84\xC8\x21\xF1\x99\xDD\x95\xBF\x9E\x0D\x92\xC9\x9D\x9A\x82\x2C\x36\xD7\x72\xBC\x38\x0A\xD9\x95\xBF\x82\x8D\x9F\xAA\x8C\x6F\x9D\xA8\x3B\xD3\x0C\xBD\xD2\x86\x2E\x9E\x91\x9E\xB0\x98\xA9\x9C\x89\x5D\x51\x3B\xE0\x78\xB7\xF1\x8D\xD7\x9C\xB8\x99\x7F\x98\x23\x98\xC1\x95\xEA\x1E\x99\x6E\xAA\xE3\x7C\x48\x80\xEC\x93\x7E\x9D\x6F\x9D\xC5\x9D\x08\x3B\xEE\x6D\x80\xB6\x9D\xC7\x95\x81\x9C\x33\x9C\x22\x8B\xFB\x92\xA1\x09\xA7\xB7\x2B\xF1\x93\x6E\x96\xA8\x91\x8F\x9C\x86\x9C\x6B\x9A\xE8\xF7\x0B\x4C\xB8\xEA\x91\xB2\x90\x92\x9E", -"\x6B\x9E\xE6\x83\x49\x31\x9B\x3C\xF3\x60\x9D\xF2\x8C\xD1\x93\xA2\x9E\x5D\x6F\x36\x8E\x67\x98\x5F\x3C\xD7\x78\x83\xF2\x9B\xD8\x94\x87\x9D\x56\x9C\xCF\x81\x18\x9C\xF7\x3A\xA8\x79\xB3\xF2\x81\xDB\x9C\xB1\x9E\x96\x9E\xE8\x83\xBB\x9D\xC9\x3A\xD5\x61\x80\xF1\x9B\xCA\x98\x96\x9D\x41\x9E\x9C\x9C\xB2\x99\x4F\x3A\xDA\x06\x82\xF3\x8C\xE2\x94\xCC\x99\x2F\x9D\xB9\x60\x49\x87\x1E\x3C\xBB\x79\xBA\xED\x8D\xE0\x90\x86\x9F\x0D\x9F\x5C\x9C\x24\x9C\x4B\x39\xE2\x11\xBA\xF2\x99\xE8\x8F\xC8\x9F\x74\x9C\x2B\x9E\x40\x9B\xC5\xF0\x18\x0E\xAD\xF0\x92\xE6\x9B\xBD\x9C\x9A\x9F\x19\x9C\x3D\x9D\xA2\x3B\xAD\x91\x58\x29\x86\x50\x92\xED\x95\x9B\x9D\xF3\x9C\xBD\x98\x79\x34\x94\x6F\xA3\xCD\x9C\xFD\x8C\xBA\x9E\xF7\x8C\xC1\x9D\x6D\x9E\xC6\x1F\x80\x78\xA3\xF1\x85\xDE\x96\x67\x9D\xEB\x04\x3E\x9B\x5C\x9E\x02\x63\x29\x79\x96\xC3\x97\xC8\x94\x98\x99\x2D\x9C\x14\x9F\xA6\x4C\x6C\x37\xFA\x58\x81\xF4\x84\xE7\x9C\xC0\x9D\x97\x9E\x98\x9D\xBE\x9D\xD7\x3C\xD3\x18\x4E\xEA\x91\x60\x8B\xC4\x98\xB1\x91\x13\x9F\x62\x9E\x4F\x3C\x9F\x6F\x80\xE2\x85\xE0\x9F\x5B\x9B\x04\x9F\xE1\x40\xEC\x9D\x17\x0A\xCB\x79\x96\xF4\x8D\xE6\x95\xD0\x9E\x98\x9E\xE2\x9B\xEF\x9D\x64\x2F\x96\x71\xA2\xEF\x9E\xBE\x91\x4C\x96\xA3\x9E\x7E\x74\x0F\x9D\x5D\xEF\x15\x7A\x85\x9F\x97\xE8\x9E\xCC\x9E\xA4\x9E\x46\x9E\xFC\x9D\x5F\x1B\x93\x73\x82\xFC\x62\x3B\x83\xCE\x9C\x9B\x9F\x4E\x8E\x9B\x9C\x43\x3A\xC3\x78\x9A\x81\x8B\xA6\x9B\xDD\x8E\x92\x9D\xFA\x95\x8B\x78\x3C\x3D\x9A\x79\x8C\xF4\x91\xDD\x96\xCE\x99\x50\x9E\xF7\x9C\x02\x9E\xF9\x3B\x86\x78\xA3\xD7\x8F\x21\x93\x8A\x9C\xB3\x3E\x4C\x9F\xC7\x95\xC6\x27\x8E\x7A\xBC\xED\x9B\xF6\x7A\xBA\x9C\x30\x0E\x27\x9A\x2F\x83\x14\x3C\xBA\x9E\x74\xE6\x82\xA5\x96\x9B\x99\x83\x9D\x9E\x51\x0D\x9E\x3C\x0E\x6E\x5A\x8C\xF2\x9A\x22\x9D\xC8\x98\x84\x9F\xE0\x9D\x7D\x9E\xEF\x3A\xCB\x73\x94\xCC\x88\xE1\x93\x9C\x99\xDA\x9A\x2F\x9D\x2A\x84\x7F\x33\x82\x7A\x83\xF3\x84\xE8\x98\x99\x9F\x1D\x9E\x5C\x9E\xF9\x92\xF2\x3A\xA2\x4F\x8F\xE7\x93\xB7\x31\x9D\x98\xAF\x9E\x63\x96\xC0\x99\x90\x2D\xEF\x74\x8E\xF1\x82\xEA\x90\xC5\x9F\x8F\x7B\xB9\x9B\x80\x9D\xDD\x39\xEA\x6D\x82\x25\x99\xEB\x9B\xD4\x98\x86\x9C\xF7\x9D\x6A\x9E\x13\x01\xD4\x6A\x9E\xDF\x8D\xD8\x9D\x8D\x9A\x3D\x9E\xEE\x49\xE2\x8F\x3E\x0C\xF4\x73\xB6\xE8\x96\xCF\x95\x83\x9B\x2E\x44\x39\x9D\x60\x9E\x87\x3D\xFA\x7A\x8C\xF3\x9C\xEB\x93\xA5\x9D\x30\x9D\xB9\x99\xFC\x9C\xB7\x37\xBA\xDD\x60\xF6\x93\xA2\x82\xDA\x9F\x4C\x9E\x0C\x9E\x81\x9B\xD7\x36\x8F\x42\x96\xB6\x92\xD7\x57\x70\x9E\x40\x9E\xFE\x9A\x38\x85\x29\x5D\x33\xF0\x55\xF6\x9E\x50\x9D\x87\x93\x6D\x9E\x91\x99\xA6\x9B\x27\x3C\xC0\x5C\xB6\xA9\x8F\xB8\x92\x91\x9D\xAF\x9A\xC4\x9B\xA4\x9E\x1B\x5F\x42\x7B\xBE\xF4\x89\xD2\x91\xF8\x8A\x6E\x92\x53\x9E\x05\x9C\xE6\x32\x8C\x70\xB6\xD5\x9E\x5D\x87\xBA\x2A\xBA\x9D\x3E\x9F\x10\x9E\xF5\x39\xA3\x78\x9F\xF2\x84\xE3\x78\x4D\x9C\x53\x92\x99\x8C\xAE\x9D\x8F\xC4\x15\x72\x96\xF5\x94\xEC\x93\xDD\x9A\xB1\x9C\x46\x9E\xC6\x9E\xB7\x30\xA9\x6E\xB0\xE8\x8D\xEE\x91\x71\x9C\x16\x89\x48\x9D\xA6\x96\x93\x62\x5E\x7B\xA1\xF6\x9A\xE7\x91\xDE\x9B\x8B\x9D\x69\x9F\x07\x49\xCD\x30\x99\xB7\x61\xB5\x93\xED\x93\x05\x92\x59\x9F\x82\x9C\x98\x9D\x92\x3C\xEE\x76\xAD\xE4\x9E\xB2\x91\xD5\x92\x60\x32\x7E\x9E\xDA\x9E\xFC\x3D\xA3\x7B\xA2\xF7\x9F\xEF\x98\xEB\x50\x98\x9C\x11\x84\xF6\x9E\xDF\x3D\xEF\x7A\xBD\xF7\x84\xE3\x9F\x44\x9D\x92\x60\x2A\x9D\x1D\x57\xC9\x3C\xAD\x0B\xB9\xF7\x89\xA9\x8E\xD6\x9C\x7E\x9D\x00\x9E\xE4\x93\x92\x0E\xEB\x7A\x85\xAF\x8D\xEB\x9F\xC2\x9C\xB8\x9D\x0C\x9F\xF1\x9C\x52\x38\xB4\x0B\xB1\xDD\x8F\x24\x6F\x59\x9F\xE0\x80\x81\x9F\x34\x90\x06\x3E\xCA\x74\x88\xF8\x89\xD3\x92\xC7\x9C\x6D\x83\xCD\x94\x17\x86\xA9\x3D\xC3\x7B\x88\xCA\x85\xEE\x9B\xBB\x9E\x4E\x9A\xD2\x9D\xD6\x99\x6C\x3A\xFF\x13\x98\xF8\x9B\xEF\x90\xDE\x9A\xC2\x9E\x7F\x9F\x9F\x9D\x3E\xBC\x5A\x70\x84\xD6\x55\xD3\x9D\xE0\x9C\x80\x33\x83\x9F\x02\x9F\xB5\x3D\xCB\x75\x96\xED\x9D\xB8\x9A\x80\x97\x9F\x9E\x12\x9F\x25\x9F\x10\x3E\xCD\x7C\xB6\xF6\x90\xF1\x90\x9F\x9B\x50\x9F\x5A\x9D\x9C\x8D\x6D\x39\xD5\x18\x81\xF9\x8D\xEF\x98\xC7\x9F\x9B\x9F\x94\x83\x32\x9B\x0D\x08\x97\x49\x80\xF7\x9D\xEE\x94\xE2\x9D\xC5\x9F\x90\x9F\x17\x9F\x37\x3A\xB1\x76\xA5\x44\x9D\xAD\x92\x50\x9D\xA3\x9C\xCE\x9C\x32\x6B\xDC\x3D\xD1\x7B\xB5\xF9\x99\xE2\x9B\xE1\x9C\x9F\x9F\xD5\x93", -"\x3B\x9C\xBB\x2B\xE0\x52\x82\x33\x8E\xE9\x9F\x52\x46\x84\x54\xCC\x84\xB6\x9E\xD1\x2E\xCB\x77\xAE\xF3\x8D\xE3\x97\xCE\x9C\x52\x9D\x69\x9D\x56\x9D\x78\x29\xA3\x6F\x83\x65\x81\xF4\x9D\x10\x37\xCA\x9C\x8E\x9F\x2C\x9F\x07\x3E\xDB\x7C\xAD\xED\x9C\x41\x8C\xAA\x9B\x94\x9D\x67\x9C\x1D\x66\x9F\x39\xEA\xF1\x4F\xFA\x8B\xF1\x91\xE9\x9E\x91\x9F\x4F\x9E\xDF\x9C\x41\x3D\xB8\x72\xAB\xEF\x98\xE9\x93\xBD\x9A\xBC\x9B\xAC\x90\xF2\x9A\xC8\x3A\xCA\xB4\x77\xF8\x83\x3C\x9A\x06\x94\xA6\x9D\x49\x9F\x8C\x9E\x8F\x3B\xD5\x0C\x91\xF0\x99\x28\x9C\x8A\x9A\x42\x99\xB0\x9B\x51\x9A\x66\x3D\xB4\x51\x68\xF5\x8F\x96\x37\x99\x8B\xD5\x9D\x15\x8C\x30\x9F\x58\x3E\x91\x7C\xA3\xF9\x99\xF3\x9B\xBF\x89\xB7\x9C\xB8\x90\xAC\x9D\x44\x35\xA9\x78\xB3\xC8\x80\xBE\x95\xB4\x87\x74\x2C\x3D\x8E\x7E\x88\x7C\x2E\x87\x65\x8F\xCF\x89\x94\x96\xDC\x9B\x51\x98\x8B\x98\x1A\x9E\x2E\x32\xB6\x78\xBF\xBF\x81\xCE\x8D\x6D\x98\xA9\x9B\x00\x98\x7B\x9D\x8D\x0C\xF6\x5A\x9E\xFA\x9C\xF5\x99\xE3\x9D\xBA\x9F\x92\x9C\xF8\x9E\xDC\x37\x83\x7B\x06\xF1\x8F\xEC\x98\xC4\x99\xAA\x9A\x18\x86\x79\x9F\x83\x3E\xE2\x78\x85\xFA\x8A\xDF\x99\x8E\x9F\xC2\x9B\x66\x9F\x0C\x9B\x54\x3C\xDE\x71\x8A\xF9\x8D\x6C\x90\xED\x94\x9D\x9E\xA4\x9F\x57\x9F\x90\x3C\xBE\x76\xB1\xF8\x8A\xF4\x52\x9F\x9B\xB2\x9C\xC3\x9E\x48\x9F\x0E\x3F\xAE\x7D\x94\xF7\x91\x1B\x97\xEF\x9A\xD6\x9D\xC1\x9E\xB6\x37\xEB\x38\xF4\x13\x64\x51\x93\xF7\x9A\x82\x94\xF0\x92\x65\x9F\xA6\x9E\x9D\x3A\xEF\x78\xA4\xD5\x84\x1B\x94\x00\x89\x9D\x87\xA4\x31\x6F\x9F\x16\x15\xE1\x7D\x9C\xD0\x80\xA3\x9D\x1D\x9D\xC8\x9F\xD3\x99\x23\x9F\x36\x3C\x9E\x55\x87\x5F\x8B\xB9\x98\xDE\x9B\x9F\x78\xA7\x9F\x97\x9F\x68\x22\xAD\x7D\xA5\xF8\x93\xF4\x97\xE2\x9E\x97\x9E\xC7\x9D\x2C\x8A\x8A\x3C\xEE\x2C\xB0\x32\x97\xF8\x9C\xEA\x99\xE3\x9F\xD0\x9E\x88\x9F\xDE\x3C\xB1\x7D\xAB\xE4\x80\x85\x93\xB3\x9C\x95\x8D\x79\x9F\xA1\x93\x45\x2E\xCE\x7B\xB4\x42\x8A\xEF\x9A\xEB\x98\xE0\x9C\xDB\x8B\x03\x95\x50\x3F\xEF\x79\x89\xC7\x91\xE7\x97\x94\x98\xB0\x9D\xC5\x99\x2D\x94\x7D\x3C\x84\x70\xBB\xEA\x97\xEF\x9A\xE2\x9F\xD9\x9F\x9A\x9F\x0C\x9F\x26\x3E\xF0\x7A\x82\xF0\x97\xB2\x95\xB6\x99\xCB\x98\x55\x84\xAF\x9F\xF5\x1C\x81\x67\x84\xF2\x91\xE4\x9C\xE3\x9B\xD3\x54\x2E\x9F\x85\x9F\x04\x2A\x8D\x7E\x8F\xB6\x80\xFB\x9B\xF1\x98\xDF\x92\x75\x9F\x4E\x9D\x17\x98\x3C\x29\x8E\xFB\x89\xD5\x80\xED\x9F\xD3\x9E\xB4\x9E\x2D\x9F\xB7\x3D\xFA\x7C\x84\xD7\x7E\xDB\x9D\x83\x9B\x81\x90\x44\x8F\x6C\x77\x40\x3F\xD9\x46\xAC\xF8\x84\xF4\x9E\xE4\x9C\xC3\x9E\x98\x44\x49\x87\x8B\x3F\xB0\x7E\xB5\x82\x92\xF9\x9B\x34\x9D\x83\x98\x09\x98\xA4\x9D\xA0\x31\xC8\x7B\xB0\xDD\x93\xD3\x94\x0B\x8D\xC6\x9E\x6C\x9E\xBC\x9F\xE0\x3E\x8B\x78\x8C\xF5\x9A\xEA\x90\xBA\x99\xDD\x95\xE6\x9C\xE1\x82\x6A\x3E\x81\x7F\x98\xFC\x83\xFC\x9D\xCE\x99\xEC\x9C\xA5\x9F\xEB\x9E\x98\x3B\xA6\x6B\x93\x91\x9A\x02\x43\xF2\x99\xE0\x9C\x1B\x9F\xA2\x9F\x0F\x3D\xDC\x7A\x9F\xF8\x92\x86\x74\xE5\x9E\xE2\x9E\xEE\x9F\xA6\x9F\xBC\x3F\x8F\x7E\x85\xFE\x9E\x7A\x97\xF8\x9D\x71\x9E\xA7\x9D\xB2\x9C\x71\x0C\xCF\x7F\xA3\xB8\x9B\xFC\x92\xF0\x9D\xF3\x9E\xA1\x9F\xF3\x99\xD8\x26\xE9\x67\xBB\xD3\x95\x61\x45\xFC\x9F\xEB\x9D\xEF\x9F\xE9\x9F\xF7\x33\xD5\x7F\x86\xF2\x80\x89\x95\xB9\x94\x6C\x98\xF2\x9D\x5E\x9D\xF8\x2C\x99\x7F\xB1\xA8\x9C\xFE\x97\xFC\x9A\xEE\x9D\xC7\x9D\x92\x80\x7C\x3E\xCF\x6B\xA4\x55\x84\xA8\x91\xF1\x85\xEF\x9A\xCB\x9E\x81\x31\xA2\x3F\xFD\x3E\x84\x9F\x98\xEA\x9E\xEB\x9D\xAF\x9E\x41\x9F\x9B\x9E\xA0\x3A\xF9\x6E\xA3\xEA\x8C\xF4\x95\xAA\x98\xFE\x9F\xD2\x9E\xED\x9F\x77\x2D\xC7\x61\x9C\xF2\x80\xEA\x99\xA5\x98\xDF\x9E\x61\x9C\xF6\x9D\x2D\x27\xEE\x77\x8F\xDE\x91\x12\x78\x51\x9F\x01\xA2\x5B\x8B\xC6\x9F\xF4\x3E\xA0\x7D\xBA\xF8\x82\xF5\x9A\xFA\x9F\xEE\x98\xAD\x9F\xF0\x9D\x44\x27\x99\x5F\x89\x81\x9F\xFF\x94\x40\x31\x00\xA1\x93\x92\xD2\x9F\x26\x3F\xAE\x7C\x97\xF6\x95\xF4\x96\xAB\x9F\xD2\x9C\x85\x83\x50\x9C\x09\xF1\x55\x7A\x9C\x8A\x25\xFF\x99\xF7\x99\xB1\x9D\x9B\x9E\xA9\x9F\x2D\x3A\xFB\x6C\xB5\x3D\x83\xF6\x99\x9B\x94\xC4\x8D\x05\x9F\x87\x86\x17\x3C\x9F\x06\x09\xFB\x97\x16\x6B\xEC\x9E\xAD\x96\x07\xA1\x03\x96\x4C\x3F\xDB\x7F\x82\xFD\x96\xF3\x93\xEE\x9C\xC8\x9E\xF3\x9C\xE9\x99\xD9\xF4\x7F\x7A\xBF\xB8\x82\xD0\x9A\xED\x9A\xFD\x95\x90\x8E\xD1\x7D\xB4\x38\xD2\x1D\xA7\x6E\x3F\x6E\x9F\x26\x99\x4B\x9A\xE9\x98\x25\x98\x0D\x31", -"\xDD\x64\xB6\xFC\x99\x9C\x99\x05\xA0\xDD\x9D\x92\x99\x78\x9D\x4B\x32\xFA\x53\xB4\xEB\x8D\xBE\x9D\xC3\x98\xC9\x85\x43\x30\x32\xA0\x72\x34\xF0\x64\xB4\xD1\x8C\x88\x96\x47\x9E\x21\x9B\x15\xA1\x06\x9A\xD0\x3B\xBB\x42\x96\x70\x9A\x7D\x80\x61\x9C\x3B\x9E\xA2\x30\xEF\x9C\x4A\x0D\x9B\xBE\x38\x01\xB6\x87\x98\x44\x99\x77\x98\x59\x98\xAF\x99\x34\x34\xB3\x63\xB6\xD0\x95\x8D\x9F\x29\x99\xAF\x92\x0A\x99\xBA\x8B\xB4\x34\xE1\x6F\xA9\xA8\x84\xFE\x98\x45\x91\x0A\xA1\x04\xA0\xFA\x9F\x13\x40\xB0\x7D\x95\x00\xBE\xF8\x9B\xB8\x82\x1D\x92\xE6\x89\x96\x49\x36\x24\x9E\x81\xA4\xFC\x84\x47\x91\x03\xA7\xCE\x9F\x0C\xA0\xE0\x9F\xE1\x13\xDF\x6A\xA8\xF1\x86\x86\x88\x46\x97\x03\xA3\xDB\x9E\x26\x9F\x1A\x3E\xDE\x7F\xB1\xF5\x8E\x03\xA9\x5F\x98\x0E\xA0\x0A\x9E\x94\x9D\x68\x30\x87\xD1\x6E\x59\x9B\x80\x83\xA0\x96\x16\xA2\xE0\x9E\xC4\x9E\x84\x3F\xEE\x7B\xB5\xF4\x80\xF6\x92\x64\x98\x00\x9C\xE8\x7B\x9A\x9D\x85\x35\xEA\x7E\xBF\xF1\x98\xF6\x8A\xF4\x99\xA5\x2F\x22\xA0\xBA\x98\x0B\x30\xFB\x80\xB2\xC9\x89\x03\xA4\x27\x9B\x0D\xA0\x08\x9A\x9C\x9F\xDE\x36\xDD\x2F\x82\xED\x8A\xC8\x9E\x9E\x44\x18\xA3\xF0\x94\x55\xA0\xC6\x3F\xA1\x81\x91\xFC\x9E\xE4\x94\xE1\x9B\xAC\x99\xD5\x9E\x37\x7F\xD1\x40\xA2\x6E\xBB\xEA\x9C\xFA\x94\xD0\x31\x15\xA0\x04\xA1\x55\xA0\x4A\x33\xAD\x81\x95\x01\xB8\xF3\x94\xDA\x98\xCA\x9F\x04\x9D\xB3\x9F\xB6\x2A\xA6\x7D\x97\xF2\x8E\x4C\x97\xDF\x9B\xF1\x9F\x35\xA1\xE1\x98\xD9\x40\xF6\x62\xB5\xD1\x98\x8B\x97\x47\x98\x9E\x9F\xF3\x9C\x79\x9E\xED\xE0\x2A\x70\x83\x30\x9C\x04\xA5\x0B\xA4\xFA\x88\x08\xA1\x92\x9F\xBD\x3E\xA4\x7A\x86\x00\xB6\xE9\x91\x73\x4F\xEF\x9C\xF9\x9F\x4E\xA0\xF7\x40\xE9\x81\xAA\xF2\x94\x00\xA2\xC4\x9C\x14\xA0\x21\x88\x77\x98\xB7\x10\xF6\x81\x86\x03\xBB\xFD\x98\x0C\xA7\xFC\x9E\x32\xA1\x5F\x9F\x16\x40\xC6\x77\xBA\xE4\x85\x9B\x9C\x40\x91\xF7\x9F\x39\xA1\x90\xA0\xE6\x3F\xD2\x7F\xAF\x04\xBB\x08\xA8\x2D\x5A\xD2\x87\x13\xA1\xBA\x96\xE8\x40\xB9\x82\x9A\xFC\x9B\x09\xAD\xDA\x9F\x00\xA1\xB0\x9E\x46\x74\x91\x3B\xAE\x00\x5F\x04\xB5\x08\xAE\xF6\x9F\x18\xA2\x6A\x9F\x91\x9E\xAC\x3D\xA8\x7F\xB3\xC7\x80\x07\xA1\x6D\x9E\xEA\x9A\xEF\x48\x95\xA0\x16\x41\xB7\x81\xA1\xF9\x99\x05\xA3\xED\x9D\x1F\xA3\xC4\x9F\x7C\x80\xF7\x10\xA0\x82\xAB\x04\xB0\xFE\x9D\x12\xA2\x27\xA3\x0F\xA1\x51\xA0\x53\x3F\xCD\x74\xB0\xA4\x60\xCB\x95\x9C\x82\x2C\xA1\x56\xA0\xA7\xA0\x42\x3E\xFB\x81\xAF\x02\xA8\xFC\x98\xCE\x9D\x76\x9E\xDB\x78\x8A\xA0\xC5\x40\xEF\x82\xAC\x04\xAF\x0A\xA3\xD3\x9A\x23\xA1\x51\xA0\x8E\xA0\x88\x3C\xEE\x1D\x86\xDA\x83\x69\x83\x06\xA2\xC4\x97\x27\xA1\x29\xA0\x9C\x3F\xDD\x82\x93\xF8\x9E\x07\xA3\xF9\x99\xA2\x9D\xB7\x7E\x39\x9C\xFB\x13\x87\x82\x8B\xCC\x89\x08\xA5\x1C\x9B\x21\xA3\x71\x99\x86\xA0\x63\x3F\x8F\x82\xA5\xFD\x8A\xC4\x98\xD2\x99\x54\x9E\xFE\x9E\xBD\x9B\xF8\x15\x9F\x10\x93\x03\xB4\xA0\x9C\xE0\x86\x1A\xA2\x61\xA0\x7C\xA0\x1B\x34\xA5\x7F\xB4\xFC\x84\x92\x95\xEE\x99\x59\x98\x55\xA1\xA0\x93\x23\x34\xA2\x75\x8A\xFA\x8A\x4A\x9E\xD6\x63\xB9\x99\x3D\xA0\xB7\xA0\x4D\x41\xFB\x82\xB1\x05\xA6\xFD\x9E\x19\x9A\x2A\xA3\x8A\x99\xD7\xA0\x26\x40\xD0\x7A\xB9\xF4\x8E\xD5\x9A\xE9\x99\x51\x91\x39\xA0\xD3\xA0\xBE\x2E\xBA\x83\xAC\xF9\x9B\xFB\x92\xF1\x9D\xCC\x9F\xA7\x9D\x4F\x9C\x81\x38\xD6\x57\xAB\x93\x9E\xCC\x96\x1E\x9A\x03\x88\x72\xA1\x67\x97\xCA\x41\xF0\x7E\x84\xFD\x96\xFF\x96\xF4\x98\xFF\x9D\xA9\x9F\x62\x9D\xA2\x37\x88\x78\xA4\xC4\x64\x73\x62\x19\xA7\x88\x98\x65\xA1\x86\x99\x96\x41\x8F\x66\x98\x06\xB1\x98\x9A\x1C\x9D\x8C\x9E\x9E\x93\xAE\x9E\x63\x1A\x5F\x7A\xB5\x81\x86\xE0\x90\x6C\x9F\xA5\x9B\x2B\x9D\x25\xA0\x1A\x92\x4D\x80\x83\x36\x89\xE9\x23\x33\x9B\x64\x9A\xD4\x94\x18\x9A\x8F\x2F\xB2\x68\xB1\xC6\x91\x04\xA8\x2F\x9E\x89\x98\xFF\x96\x2D\xA0\x24\x3A\x81\x7B\xA1\x1B\x87\xD7\x92\xE4\x88\xAC\x9B\xB0\x8C\xBB\x95\x2D\x34\xB4\x66\xAF\xD0\x93\x9F\x99\x18\x9A\x40\xA2\xBD\x98\x02\xA1\x60\x33\x86\x84\xA1\xC1\x88\x10\xA5\x80\x94\x0B\xA2\x1C\xA0\x80\x83\xD0\x39\xC9\x71\xAB\xBA\x83\xA0\x91\x21\xA6\x3F\xA0\x46\x98\x0A\xA1\x06\x32\xF5\x67\xB7\xBD\x9C\x9D\x9B\x03\x9B\xFD\x9F\x50\x98\x42\x9B\xE5\x36\x84\x81\xAC\xD2\x90\xEC\x97\x08\xA2\xB2\x9D\xB0\x87\x53\x99\xDA\x32\x92\x84\xB5\xC0\x97\x94\x9C\x35\x9F\x11\xA3\xEE\x98\x0C\xA1\xBD\x33\x93\x81\xA4\xCB\x95\x04\xAB\xB0\x9E\x64\x93\xF7\x9B\xAB\x9A\x9A\x40\xB6\x69\x91\x53", -"\x90\x10\xA9\x23\xA6\x44\xA1\xCD\x98\x00\xA1\x37\x33\x96\x84\xA8\xCC\x8C\x11\xAE\x11\x9E\x45\xA0\x83\x99\x38\x97\x90\xE4\x59\x5B\x9D\x32\x98\x11\xA2\x3A\x9B\xB4\x94\xE9\x99\xF8\x95\x5E\x34\xA7\x67\xAB\x06\xA7\x96\x9D\x1A\xA5\x6E\x99\x09\xA1\x7E\x9B\xEE\x37\x97\x33\xA6\x03\xA3\x86\x94\x40\x99\x13\x9A\x9E\x97\xAB\x9E\x44\x2F\xD9\x7A\xB5\xF2\x85\xD9\x93\x8C\x98\xDB\x9D\xEF\x9A\x60\xA0\x5F\x40\x87\x74\x86\x58\x69\x9E\x98\x4C\x92\x72\x98\x12\x99\x33\xA0\x42\x32\xE3\x84\xB3\xCD\x85\x13\xAB\x3A\x98\x38\xA3\x24\x9E\x04\x93\xCD\x32\x81\x70\x8F\xED\x8A\x09\x96\x1D\xA7\x74\x2D\x7F\xA1\xF8\x99\x24\x33\xBC\x84\xB7\xC0\x92\x12\xA9\x33\x9C\x4A\xA1\x50\x98\x2B\xA1\x9E\x32\xB0\x84\x99\xF7\x83\x07\xAC\xA1\x9B\x21\x9D\xC9\x94\x36\xA1\x25\x42\x90\x85\xBF\x07\xA8\x11\xAC\x2A\x98\x67\x9A\x2C\x99\xF1\x99\xB4\x30\xD6\x7F\xBF\xDF\x93\xB1\x92\x0A\x9C\xBE\x9C\x8A\x9C\xA0\x88\x04\x64\x0F\x85\xB1\xCB\x84\x84\x92\x29\xA6\x10\x9A\xA9\xA1\x9F\x98\x96\x42\x8A\x64\x98\x0A\xA1\x5C\x9D\x64\x9F\x45\x9D\x28\x9F\xAB\x9F\x22\x35\xDA\x69\x9A\xFD\x86\x56\x77\xDF\x9F\x27\xA0\x8F\x99\x50\xA1\xB3\x42\xAE\x61\xB5\x0A\xB0\x85\x97\x2B\xA2\x53\x98\xAA\xA0\x4E\x99\xBB\x42\x8E\x77\x98\x09\xBF\xA6\x9B\x24\xA3\x1E\x98\xB2\xA0\xDB\x99\x5A\x33\xB8\x67\xB4\xCB\x94\x14\xA7\x2A\xA1\x57\xA0\xAC\x99\x68\xA1\xD7\x3F\xE1\x69\x86\x0B\xB2\x15\xA8\x2D\xA2\x5E\x9A\xB6\xA1\x1E\xA1\x4A\x34\x90\x81\x8C\xD1\x95\xA1\x9A\x21\xA7\x86\x99\x24\x94\x94\xA0\x37\x42\xCC\x84\x9D\x09\xA3\x94\x9B\x3C\x9D\x44\x98\x02\x9B\xF7\x98\xBC\x41\xF1\x63\xBE\x06\xB9\xCC\x9A\xFC\x9C\xF2\x9D\x40\x98\xCB\x9F\xBA\x21\xFF\x7D\xB2\x0B\xB8\x0A\xA9\x1B\xA4\x2C\xA0\x5F\xA0\x02\xA0\x7E\x41\xFB\x85\x86\x00\x72\x74\x8B\x26\xA1\x1C\x9B\xB5\xA0\x23\x9A\xD9\x42\x8D\x81\x9B\x0B\xBE\x11\xA3\x43\x9B\x5D\xA2\x24\xA1\x76\xA1\x94\x40\xFB\x67\x90\xEE\x9D\xD2\x9E\x1D\x91\x2C\xA3\xC0\xA0\xDC\xA0\x8C\x3F\xDA\x82\x91\xFB\x82\xF3\x90\xF9\x9C\xCC\x9D\xB3\x9D\x29\x9C\x56\x41\xE2\x80\xBD\x55\x7C\x13\xA3\x3A\x9C\x8B\x98\x98\xA0\x6D\xA0\x5F\x34\xDC\x81\x97\xCE\x9E\x06\xA3\x46\x9F\x4C\xA0\x0C\x8B\x35\x9D\x78\x36\xE7\x66\xA0\x0A\xAD\x12\xA2\x2A\xA7\x44\xA3\xB2\xA0\x93\x99\xDC\x42\xB8\x85\x80\x09\xAD\x11\xA2\x24\xA4\x65\x99\xFB\x9E\x7A\x9E\xE8\x07\xC2\x31\x95\x0B\xA4\x11\xAC\x33\xA1\x59\xA1\x6B\x99\xAD\x99\x93\x42\x94\x86\x83\x08\xB6\x18\xA5\x20\xA5\x3D\xA1\x87\x9E\x99\x98\xCE\xFE\x77\x82\xB4\x02\xB6\x16\xAD\x34\xA5\x5C\xA0\xAD\xA0\xA8\xA1\xB6\x42\xC1\x86\x8E\x0B\xBE\x16\xAA\x32\x9D\x68\xA1\xCF\x98\xF0\x9F\x69\x38\xE2\x7F\x86\xEA\x9A\x19\xAE\x30\xA5\x6B\xA0\xC4\xA0\x73\xA1\x12\x43\xE8\x85\xA9\x07\xAB\xA2\x9B\x1E\xA5\x89\x9A\xD5\xA0\x7D\x99\xF3\x3C\x9B\x3B\x93\xF4\x9A\xD8\x8C\x34\xA3\x5E\xA0\x06\x9B\x7A\xA1\x85\x32\xF7\x85\xA7\xC8\x99\x17\xA9\x22\x9A\x61\xA2\x51\xA1\x0B\xA0\x9D\x41\xF9\x6E\xBE\xF9\x85\xBD\x70\xD2\x9C\x1B\x9B\xC7\xA0\xA6\xA0\x21\x43\xF0\x82\x8B\x07\xB4\xE5\x9D\x87\x9B\xAB\x9F\xAA\x9D\x4A\x9D\x2A\x19\x96\x0C\xA8\xBD\x97\xDB\x8A\x8E\x7B\x25\x88\xB9\xA1\xB7\xA1\x5F\x43\xE7\x85\x91\x0D\xA9\x17\xAF\x23\xA4\x6A\xA1\x86\xA1\xBB\xA1\x62\x33\xAA\x5F\xA7\x00\xAA\xE9\x94\xCD\x82\xB2\x8B\xAE\x9C\x8C\x9A\x9E\x43\xAC\x86\x9E\x09\xAE\x19\xA5\xDA\x94\x72\x9A\x08\x98\xC2\xA1\x4D\x33\xB4\x86\xAC\xED\x96\x19\xA4\xEA\x9C\x58\x9E\xCD\x9D\x5C\x9D\xD4\x41\xAB\x80\xB0\x0A\xAC\xA1\x9E\x36\xA1\x8E\x98\x23\xA1\xF3\xA0\x49\x34\xF3\x86\xAA\x0B\xB5\x1B\xAC\x2E\xA0\x75\xA2\xBB\xA1\xCA\x9B\xC2\x41\xB5\x7D\x92\xF5\x97\xF5\x94\xD5\x99\xD7\x9D\x2D\x7E\xE2\xA1\x7E\x43\xAB\xD1\x47\x0F\xB3\xA3\x9A\x10\xA4\x0F\xA0\x43\xA0\x3F\xA0\x0E\x41\xD8\x80\x90\x04\xBB\xA3\x9B\xBC\x8A\xBE\x8E\xB4\x9C\xFA\xA0\xD4\x3A\x8D\x6F\xBD\xDA\x8D\x13\x0B\x04\xA0\x73\x52\x7E\xA1\xCB\x8C\x2B\x11\xD5\x64\xB0\xD1\x81\x96\x95\x06\xA3\x58\x98\xA0\xA1\x2D\x99\x32\x43\x8B\x68\xBF\x01\xBC\xDD\x9B\xDF\x93\xE0\x98\x81\x9A\x3B\xA1\xC9\x37\xF5\x7A\x9C\xFB\x90\x1F\xA9\xD2\x2A\x7E\xA2\xF6\x96\xAF\xA1\xCA\x42\xE0\x86\x8C\x0B\xA2\x1B\xAE\x2A\x9C\x6C\xA3\xCE\x98\xB3\xA1\x38\x09\x9C\x84\xB8\xA7\x91\x03\xA6\x8C\x9B\x0E\xA0\x0F\x9E\x78\x9F\x83\xFC\x06\x88\x94\xCA\x88\x20\xAF\x34\xA2\x74\xA1\xD8\xA0\xA9\xA1\x17\x42\xA6\x87\x81\x09\xB8\x18\xA3\x24\xA2\x53\xA1\xEE\x87\x7D\x9F\xDB\x39\xB4\x84\xA9\xE2\x36\x11\xA9\x41", -"\xA4\x4D\x99\xED\x98\xD0\xA1\x09\x44\x9E\x88\x8B\x10\xA0\x21\xA3\x25\xA3\x68\xA1\x95\xA0\x08\xA2\xE6\x33\xFD\x62\x9D\xDF\x93\x38\x88\x9E\x9E\x61\x9E\xC2\x9E\x43\x88\x5A\x34\xEE\x4A\x8D\xC5\x9E\x49\x99\x1A\xA2\x1F\xA0\xEE\xA0\xE8\x99\xFB\x43\xC6\x7C\x81\x02\xB7\x90\x75\xF1\x99\x5E\xA1\xE8\x98\x82\xA1\x91\x43\xD9\x83\xB8\x02\xB1\xFB\x93\xF0\x9B\xEE\x9F\x41\x9D\x0A\x7F\x21\x3F\xFE\x64\x84\xD1\x94\x71\x96\x3C\xA0\x1B\xA0\xF7\xA1\xCA\xA0\xDE\x43\x97\x83\xA0\x0F\xB9\x0C\xA2\x3E\xA5\xF5\x8A\x04\xA2\x2F\x95\x29\x17\xF8\x84\xA5\x4E\x7D\x83\x93\x29\x32\x83\xA2\x94\x94\x17\x9A\x3B\x42\x8A\x88\x80\x0D\xB4\x21\xA5\x29\xA6\x86\xA3\xA5\xA0\x1C\xA2\xFA\x33\xFB\x65\x95\xFD\x9C\xE3\x9F\x19\xA7\x23\x9D\x99\x7E\x81\x9C\xBD\x14\xC1\x88\x80\x9E\x94\x86\x92\x01\xA3\x24\xA2\x28\xA1\x92\xA0\x69\x41\xC4\x78\xBB\xB9\x71\xD2\x88\x4C\x99\x04\x95\xC3\x6A\x17\xA2\xF0\x33\xCE\x86\x9E\xCF\x9F\x19\xA0\x3E\x9D\x59\xA1\x03\xA2\x3B\xA2\xBA\x42\xF8\x88\x87\xF2\x9D\x15\xAC\x2A\xA3\xAF\x9A\xAB\xA0\x19\x87\xD9\x1E\xA7\xB7\x2E\x11\xB4\x57\x90\x47\xA2\x55\x98\xA9\xA1\x18\x9A\x74\x44\xDD\x85\x98\x12\xBF\x16\xAA\x49\xA4\xFD\x9C\x73\x9C\xE2\x92\x68\x3F\xFD\x88\xBE\xF1\x8C\x00\xA0\x17\x91\x78\x92\x18\x8D\xDA\x97\x2F\x2A\xD9\x66\xB0\x0D\xA8\x1E\xAE\x08\xA4\x74\xA1\xC5\xA0\xE6\xA1\x17\x43\xCE\x87\x99\x0C\xAD\x68\x41\x87\x97\x41\xA3\x13\xA2\x90\xA1\x2E\x40\xC2\x5E\xB0\x00\xB9\x08\xA1\x15\xA4\x50\xA1\xD2\x9D\x25\xA2\x0F\x69\x1E\x82\xB0\x3B\x82\x24\xAE\x01\x9E\x4F\xA2\x42\x99\x30\xA1\x68\x40\xFD\x80\xAA\x01\xA9\x22\xA7\xF3\x98\x9A\xA0\x30\x42\x0B\x9F\x5A\x44\xEF\x68\x87\x10\xB0\x21\xAD\x41\xA1\x6E\xA3\xE8\xA0\xE5\xA1\xA5\x43\xC0\x89\x95\x0D\xA4\xFB\x9B\x1C\x98\x29\x9F\x8C\x9F\x7F\xA1\x97\x35\x8D\x14\xA3\x58\x8D\x23\xA0\x49\xA5\x30\x99\xCF\xA1\x27\xA1\xA7\x44\x81\x84\xA9\x12\xA2\x1A\xA2\x42\xA4\x68\xA0\x09\xA3\x07\x67\x87\x3B\xCA\x51\xA2\x13\xBB\x20\xA4\x4E\xA3\x92\xA2\x1C\xA3\x4A\xA2\x0C\x44\xE0\x65\x8F\x0B\xA2\x97\x9D\x4A\xA7\x45\xA3\xD1\xA0\x91\x98\x87\x1F\xD1\x6E\xAC\x0D\xBB\x91\x9F\x39\xA5\x8B\xA0\x42\xA1\x2F\xA2\xE8\x41\xE1\x88\xAA\x07\xA3\x23\xAC\x1E\xA4\x9D\xA2\x7B\xA1\x75\x94\x40\x24\x91\x4D\xBB\x4F\x83\x25\xA6\x11\x9A\x47\xA2\x29\xA2\x4A\xA2\xF4\x33\x96\x89\x8A\x14\xAE\x20\xA4\x3E\x9D\xA1\xA3\x95\xA0\x88\x94\xEA\x2E\xEA\x79\x81\xD5\x44\x29\xA2\x22\x9D\x80\x98\xE0\xA1\x03\x9A\xB6\x43\x9C\x63\x87\x11\xA4\xF7\x9A\x3B\xA7\xB8\x9E\xA1\xA1\x96\x8E\xFE\x42\xD8\x62\x89\x0D\xA1\x48\x9D\x40\x94\xA6\xA0\xD6\x99\x45\x97\xC2\x32\xD9\x63\x98\x13\xA1\x14\xA9\x3F\xA1\x8C\x99\x4F\xA2\x73\x9F\x3F\x45\xEA\x74\x86\x9B\x91\xAD\x9A\x65\x95\x6F\x9B\x2C\x91\xD1\x8E\x02\x40\xC3\x5E\x87\xC8\x85\x7A\x9C\x52\xA1\x55\xA0\xB8\xA0\x34\x9C\xEF\x34\x89\x7A\x9C\xCC\x87\x26\xA0\x39\xA1\x99\xA1\x95\x95\x01\xA0\x71\x42\x85\x80\xBF\x05\xAC\x06\xA2\x13\xA4\x72\x7B\xFB\x9E\x98\x9E\x1C\x2E\xB8\x89\x81\xAA\x8E\x13\xA3\xEE\x90\x4E\xA3\x56\xA2\x39\xA1\x95\x43\xB5\x7F\x97\x0E\xB2\xDE\x98\x02\xA5\xE9\x95\x68\xA1\xA7\x97\xA3\x41\x87\x6A\xAE\x59\x95\xDD\x46\x54\xA0\x72\x9A\x4D\xA2\x6B\xA2\x40\x32\xF7\x87\x85\xCB\x82\x14\xA9\x3A\x9E\x99\xA1\xEA\x9F\xA8\xA2\xC3\x3A\xFC\x8A\xAC\x0E\xAC\xA8\x93\x88\x9E\xA1\x99\xEF\x95\x50\xA2\x88\xD7\x75\x89\xAB\xC6\x92\x24\xA2\x3F\x98\xA5\xA1\x85\xA1\x7D\xA2\x63\x43\xAB\x89\xA5\x0D\xBF\x27\xA7\x36\xA1\xD4\x98\x06\xA1\xBB\x94\x1A\x40\xAF\x75\x9C\x00\xBB\x53\x94\x40\x35\xB0\xA3\x0B\xA2\x8B\xA2\x93\x41\x98\x8A\x89\x0F\xBA\x28\xA4\x37\xA4\xA3\xA2\xDD\xA0\x8F\xA2\x57\x43\xE1\x63\xAB\x0E\xB8\x7C\x95\x1E\x9A\x78\xA0\x1B\xA3\x47\xA2\x93\x32\xEF\x88\xA6\x14\xA1\x7A\x97\x56\xA2\xAB\xA2\x8A\xA0\x8E\x98\x5D\x45\xD0\x85\xAE\x14\xB9\x14\xA0\x3D\xA0\x3A\xA1\x01\x9E\x1C\xA0\x3A\x0F\xBA\x80\x85\xBE\x9B\x22\xA0\xEB\x92\x97\xA1\xE8\xA0\x73\xA2\x1F\x44\xBE\x89\x93\x0D\xAA\x27\xA7\x3A\xA0\xB7\xA0\xDE\xA0\x77\xA2\xAC\x3F\xB3\x20\x6A\xE2\x90\x90\x95\xEC\x9E\xA5\x99\xEC\x9B\x0C\x3C\xB7\x39\x81\x02\x0A\x03\x12\xA4\x93\x66\x86\xD7\x2E\x6B\x76\xF6\xA2\xF1\xDF\x07\x1C\x0C\x03\x10\x2F\xA5\x63\x8D\x05\x9A\x87\x6C\xEA\x80\x07\x0E\x4E\x01\x34\x17\xBE\x8C\x72\xDC\x70\xDA\x89\xE5\x75\x25\xA0\xD0\x00\x7B\x8B\x8B\xB7\x7E\xF5\x2C\xE8\x45\x61\x41\x83\x07\x69\x47\xEE\xE2\x65\x1D\x79\xD2\x91\x70\x08\xF2\x45\xBE\x76\x8D", -"\x4F\xFB\x76\x28\x2B\x84\xB3\x4F\x92\x67\x70\x02\x0D\x02\xC0\xA3\x21\x9B\x89\x41\x1E\x8F\x36\x03\x95\x38\x07\x70\x04\x0D\x06\xC2\xA3\x85\xA3\x89\x41\xF3\x64\x74\xB3\x45\x9C\x2B\xD0\x45\x9B\x6E\x2E\x12\xAF\x2F\x20\x7D\x14\x84\x5F\x0C\x87\x38\x1A\x2A\x6A\x97\x6C\xBE\x99\xBA\x9D\x8F\x74\x53\xD9\x4D\x58\x94\x7D\x63\x28\xA2\x5C\xA6\x49\xA3\x84\xA0\xCF\xA2\x29\x42\xAA\x8A\xA2\xCF\x89\x2E\xAC\x50\xA4\xB4\xA1\x04\xA2\x5E\xA0\xC7\x37\xC9\x7B\x9E\x08\xA2\x6C\x9B\xC2\x99\xB6\x9F\x5B\x96\x02\x32\x2C\x46\xB4\x5A\xAC\xD0\x75\x9A\x9E\x38\x9F\x7D\x9A\x3D\xA2\xCE\xA2\x91\x42\x87\x8A\xA9\x14\xA9\x28\xAB\x63\xA2\xB4\xA3\x03\xA2\x1F\xA3\xE4\x2F\xF5\x84\xBF\x03\xB4\xEB\x95\x41\xA0\x44\xA0\x61\x9E\x11\xA1\xCC\x25\xB1\x8C\x8C\x09\x93\x31\xA2\x57\xA3\x29\x98\x5D\xA3\x21\xA2\xE4\x2E\xFA\x7E\x94\x0E\xB2\xD4\x9A\x57\xA7\xE8\x9D\x53\x9A\xAF\x8B\x47\x3C\xE5\x64\x92\x25\x9B\xCE\x83\x83\x71\xC9\xA1\x30\x96\x55\x89\x4C\x46\xEE\x67\xAF\xCB\x91\x24\xAC\x41\xA6\xA0\xA2\x0C\xA3\x39\xA2\xDA\x45\xA1\x88\x9C\x17\xA3\x21\xA2\x4C\xA5\x84\xA0\xDA\xA0\x78\x9B\x0C\x3B\x88\x7E\x9E\xF4\x84\xD0\x68\xDC\x90\x42\x80\x3A\x9A\x3B\xA3\x75\x3C\xA2\xBF\x4C\x23\x03\x6E\x84\xE6\x60\xD2\xA1\x04\x86\x49\xA3\xD8\x2B\xA6\x65\x8F\x0E\xB9\x0B\xA5\x30\xA2\x0A\xA2\xD3\x9E\x2A\xA0\x3B\x45\xD6\x80\xA1\x0F\xA0\x04\xA3\x3E\xA6\xCA\x84\x57\x9B\xB6\x98\xD9\x8E\x22\xBD\x65\x19\xA6\x9A\x97\x66\xA7\x4B\xA1\xED\xA0\xC5\xA2\x71\x33\x8C\x8B\x9E\xD0\x8F\x2A\xAE\x1A\xA6\x9B\xA2\x97\xA2\x90\x9F\xE5\x29\xEA\x1D\x72\x18\xB2\x4E\x9E\x5A\xA4\xCF\xA1\x41\xA3\xCE\xA2\x52\x46\x9F\x8B\x81\x1A\xB5\x21\xAD\x4F\xA7\x86\xA0\x96\xA3\xE6\x78\xF0\x3A\xC2\x8C\xB7\xF0\x97\x95\x98\xC6\x8F\x0C\x99\x9E\xA1\xDF\x9E\x35\x28\xF3\xB2\x6A\x1A\xB4\x28\xA2\x3B\xA4\x5E\xA0\x62\xA3\xB7\x99\xB0\x46\x95\x67\x8D\x15\xB5\xF9\x9C\x4D\xA4\x0D\xA1\xA9\xA3\x04\xA1\x94\x3C\x90\x74\x86\xF5\x92\xD0\x9C\x28\xA0\xB3\xA1\x43\x30\x4B\xA3\x67\x2D\xEA\x53\x88\xCF\x87\x89\x9D\x36\x9F\xDA\xA0\xF3\x99\x9C\xA2\xCE\x33\xA1\x8D\xBC\x03\xAB\x0C\xA3\xF1\x9E\x98\x98\x23\xA3\x12\x6F\x9E\x42\xB2\x4E\xA7\x3F\x4A\xCA\x7C\x6B\xA2\xB3\xA1\x70\x98\xD8\xA2\xE6\x41\xB2\x8B\xBD\x12\xA8\x27\xAF\x4B\xA6\xB6\xA1\xF3\xA0\xEF\xA2\xA9\x43\xE6\x7E\x88\x0A\xAB\xE5\x80\x0F\xA1\xED\x9E\x3C\xA1\xC0\xA2\xD5\xEA\x7E\x67\xAF\x3C\x53\xFA\x6D\x6F\xA1\xB8\xA0\x29\xA3\xE1\xA2\xB4\x20\xD9\x8A\x8B\x13\xB5\xF7\x9C\xF1\x9B\xC7\x9F\xD5\x9D\x2D\xA3\xCA\x3D\x97\x3E\xA0\xE0\x82\x08\xA7\x81\x9B\xED\x9E\x29\x9F\x70\xA2\x04\x8C\x29\x58\xAA\x1B\xA2\xA0\x9B\x33\xA1\x7B\xA3\x74\x7B\x3C\xA0\x66\x40\xCB\x8A\xB8\x0F\xBA\x26\xAD\x0D\xA5\xDB\xA3\x37\xA0\x5B\xA3\xC5\x6C\x45\x89\x82\x14\xA9\x39\xA3\x6D\xA5\xD7\xA3\x93\xA3\x3E\xA3\xC0\x46\xFF\x8C\x88\x14\xA0\x2D\xA7\x49\xA5\xD8\xA3\x1D\xA3\x63\xA3\x9B\x44\x92\x43\x92\x13\xB2\x43\x99\x6A\xA5\xD6\x6F\x78\x7B\xB5\x99\x16\x2B\xA8\x62\xB5\x0F\xAA\x2A\xA0\x33\xA2\x4C\xA3\xB6\xA2\xD6\xA0\xB4\x46\xE6\x84\x90\x16\xB0\xD5\x80\x4E\xA6\x34\x78\x92\xA2\x95\xA3\xAF\xE1\x2B\x68\x9C\x09\xB0\x22\xA6\x56\xA5\x5B\x98\x5A\xA3\xBB\xA2\x6A\x45\x86\x87\x80\x06\xAD\x2B\xAA\xC9\x84\x26\xA3\xE5\x9F\x06\x92\xE8\x46\xEF\x25\xA1\x1D\xBA\x34\xAC\x35\xA6\xE5\xA1\x02\x7C\xE2\xA2\x66\x47\xC6\x8B\xBA\x18\xB6\x9F\x9B\x50\xA0\x7F\x9B\x72\xA3\x3E\x16\x12\x31\xE7\x8D\xA0\x1D\xA3\x0E\x7B\x6E\xA6\x47\x96\xD4\xA2\x98\xA3\xF6\x43\xB2\x8E\x8B\x16\xB7\x3A\xA4\x26\xA1\xEB\xA1\xA1\xA0\x9C\xA3\xC1\x2F\xE1\x8B\xBC\xC1\x6E\xFD\x91\x48\xA3\xDF\xA3\xAE\xA3\x95\xA3\x62\x47\x9B\x8D\xB7\x04\xA3\x0B\xAE\x69\xA1\xFA\x9F\x50\xA1\xB3\xA0\x88\x44\xC1\x80\xAF\x54\x97\xFD\x9A\xED\x92\xFC\x92\xB4\xA2\xA7\xA3\x99\x46\xBE\x65\x86\xC4\x87\x2A\xAD\xE9\x93\xEA\xA3\xE4\x99\x6C\xA3\xB7\x43\xB2\x8D\xA7\xFE\x8E\x2C\xA3\x15\xA0\xF2\xA1\x36\x83\xAD\x9B\x61\x46\x96\x8F\xA3\x19\xB5\x38\xA5\x34\x9E\x73\x95\xE4\x99\xA4\xA2\xAF\x47\x8A\x8F\xB1\x1A\xAC\x3C\xA3\x28\xA6\xF1\xA3\x33\xA3\x6F\xA3\xE9\x26\xF0\x83\xB2\xE4\x4D\xFE\x9A\x3A\x89\xEE\xA3\x16\x96\xDE\xA3\x50\x47\xB6\x5F\xAD\x1B\xA0\x3E\xAF\x27\xA2\xF8\xA2\xB6\xA2\x9A\xA3\x33\x43\xB6\x8E\xB5\x0C\xBB\x3A\xA3\x85\x9E\xCB\x9F\x20\x7E\xE7\xA3\x8E\xF9\x50\x8F\x85\x1E\xB2\x54\x97\x78\xA3\x7B\xA2\x1E\xA1\xEE\xA1\xDB\x40\xD8\x8F\xBA\x0F\xA3\x35\xAC\x3F\xA3\x33\xA1\x99\x86\x2E\x6E\x8B", -"\x56\x13\xF3\x67\x1E\xB4\x38\xAE\x78\x05\xC0\xA2\xFC\xA2\xF0\xA3\x8D\x2C\x90\x06\x16\x3A\x51\x97\x88\x6C\x8E\x80\x77\xA7\x47\x92\x63\x57\xD9\x24\x1D\x7C\x1F\xAE\x61\x96\x64\x7D\xD5\x47\x9C\x00\x77\x89\xCF\x47\x8E\x0F\x17\x6B\x2E\x49\x5F\x98\x65\x29\x4C\xAD\x36\x73\x89\x70\xC7\x42\x1D\x70\x4C\x7C\x71\x03\xDC\x77\xFE\xA3\xE0\xA3\x0D\x2F\xD2\x8E\x1A\x74\x16\x20\xB4\x10\x83\x6F\x3E\xDB\x44\xB8\x47\x47\x76\x5D\x0F\x0A\x8C\x9B\x20\xA8\x3D\xA2\x9C\x2E\xDD\x44\xB6\x8B\x41\x81\x50\xFD\x25\x52\xAE\xD6\x58\x3F\xA0\xD3\x92\xFC\xA0\xCB\xA3\xB6\xA1\x76\x47\xBC\x80\xB1\xFE\x8A\x33\xAC\xCB\x9B\x4E\xA2\xE5\xA0\x08\x96\x41\x45\xEE\x9A\x59\x18\xA3\x41\xA4\x7F\xA0\x3A\x2F\x7C\x76\x75\x68\xBE\xD2\x2C\x90\xB0\xB3\x84\xFF\x19\xBA\x70\xC2\xA2\xCE\x94\xA8\x22\x6F\x45\xB3\x4B\xA7\x6E\x22\x42\xA1\xD0\x90\xCF\xA1\xFB\x98\xED\x99\x5E\x31\xDC\x67\x90\x19\xA3\x15\xA8\x63\xA5\x54\xA0\x95\xA2\xBE\xA3\x3C\x46\xFE\x8E\x88\x1D\xAE\x25\xAA\x3A\xA1\x01\xA1\x74\xA1\xC5\xA1\x65\xFE\x0D\x87\x96\xD1\x9A\x3D\xA6\xD1\x96\x09\xA7\x05\x9A\xED\xA1\x5E\x44\xE7\x8F\xA0\x11\xA9\x3F\xAF\x3D\xA3\x9B\xA0\xFB\xA2\x25\xA2\xC8\x47\xBA\x8B\x9E\x21\xA5\xE0\x9B\x00\xA7\xCF\x9E\xE3\x46\x5D\x67\x4C\x48\x96\x20\x7E\x1C\xBB\x2C\xA0\x74\xA1\xCA\xA2\xD0\xA3\x29\xA3\x44\x47\xAB\x8A\x96\x19\xAD\x29\xAB\x85\xA6\xA1\xA2\x69\xA3\xDD\xA2\x19\x40\xD9\xE7\x6E\x0E\xB0\x38\xAC\xE3\x00\xA3\x98\x13\x57\x3C\xA4\x95\x8F\x64\x8A\x9C\x1A\xB1\x22\xA6\x30\xA3\x37\xA2\xEC\xA3\xDE\xA0\xB4\x47\xBF\x83\xB6\x1E\xA2\x8D\x96\x03\xA3\x00\x9C\x69\x8A\x5D\x9D\x8C\x48\xBC\x75\xB0\x15\xA5\x4B\x9E\xE3\x45\xE7\xA2\xBF\xA2\x29\xA4\x7D\x48\xD4\x90\x81\x1B\xB9\x31\xA7\x85\xA3\x45\xA3\x20\xA4\xAF\xA2\x7F\x47\xD2\x85\xB6\xC6\x87\x2D\xA8\xCF\x84\x06\x5B\x06\xA0\x5A\x88\xD2\x45\xDA\xFC\x7A\x1A\xBB\x3D\xA8\x79\xA4\xEE\xA1\xDF\xA0\xB2\xA3\x41\x3F\x9F\x8D\x89\x06\xA5\x19\xA4\xED\x9D\xEF\x9D\x63\xA1\x77\xA2\xA9\x38\xC4\x80\x94\xB0\x83\x4D\x97\x04\xA3\xBA\x89\x63\x89\xEF\x41\xE9\x45\x80\x00\x18\x03\x1E\x30\xAA\x4D\x63\x63\x85\x2E\x39\xC9\x88\x1B\x46\xAC\x3E\x14\x23\xA7\xA4\x91\xB3\x7B\x44\x3B\x17\x59\x25\xA0\xAF\x2C\xFF\x10\x9E\x11\x92\xCC\x79\x73\x73\xED\x6C\x5A\x7C\xED\x75\x98\xF9\x48\xA5\x6C\xE5\x63\x31\xAE\x96\x7A\x99\x60\x12\x77\xC0\x6C\xD1\x48\xDE\x01\x1B\x23\xB4\xC8\x62\xE9\x83\x76\x6B\x12\xA0\x70\x00\xF3\x48\xC1\x2D\x97\x6B\x30\xD6\x71\x19\x31\x1A\xA6\x38\x01\x7C\xA4\xE2\x48\xBF\xF4\x46\x04\x08\x31\xA5\x99\x8D\x8E\x76\x40\x00\x72\x00\x00\x49\xED\x8B\xB4\xE8\x6A\xD8\x41\x16\x79\xBE\x99\x25\x6C\x03\x77\x8A\xFF\x20\x1E\x75\x61\x79\x74\x98\xE8\x95\x16\x14\xE4\x7F\x63\x66\x5F\xE7\x2A\xCD\x61\x9D\x7D\xAA\x92\x10\x03\x22\xA5\xB7\x96\xB7\x97\x37\xD8\x65\xCE\x5C\xDC\x53\x14\x3E\x91\xA7\xE4\x96\xA6\x96\x3B\x18\x9F\xFF\x4C\xD8\x40\x9C\x67\x36\x73\x13\x5A\x81\x76\xBC\x71\xD9\x97\x37\xD8\x28\xFF\x5D\xB0\x66\x6C\x74\x6D\x75\xD3\x59\x8B\x76\xB4\x9A\x25\x49\xBB\x5E\xA7\x24\xA3\xBC\x13\xFB\x7D\x22\x79\xED\x7E\xE9\x7F\x2D\xE6\x51\xB7\x39\xB8\x79\xB9\x99\x93\xA5\xED\x96\x81\x96\x2B\x6C\xBD\xFF\x09\xCF\x7F\xFE\x7A\x3C\x71\xFC\x7F\xFF\x7C\x91\x76\x6D\x5B\x45\x49\xCD\x3F\x7C\xBC\x8E\xBE\x66\x6E\x72\xAF\x71\xFF\x7F\x45\xA2\xEA\xFF\x66\xAF\x78\xC2\x4C\xCC\x41\x95\xA4\x96\x83\x4E\xA4\x50\x18\x55\xEE\x40\x61\x57\xB9\x60\x4A\xAB\x6B\x74\xFA\x7C\x54\xA4\x98\xA4\x01\xD8\x31\xD8\x4F\x20\x1B\xFE\x73\xEA\x76\xDB\x89\x56\xA4\x28\x73\xEE\xE4\x5C\x92\xA8\x25\xA6\xC2\x6A\x96\xA7\x87\x76\x4A\xA5\xB7\x73\xF5\xFF\x3C\x64\x72\x25\xA1\x78\x9A\x78\x1A\xFE\x7E\xF2\x7F\xF5\x7F\xC6\x82\x7B\x92\x87\xBE\x8C\x76\x9D\x97\xA6\xDC\x73\x92\x72\xEE\x7F\x6E\x49\xC2\xFF\x40\x26\xB1\x32\x7D\xC5\x75\xB5\x98\x01\x33\xAE\xA4\xEC\x9F\x53\x92\x83\x62\x63\x63\x79\xC9\x90\xCD\x99\x40\x00\xC8\xA4\xF9\x9F\x12\x93\x83\xDE\x0C\x00\x87\x11\x54\x9F\x98\x66\xA5\x3D\x69\x15\x49\x8A\x6F\x1F\x19\x9D\x74\x7E\x55\x77\x33\xA7\x7D\x88\xC4\x97\xCA\x24\x16\x00\x8C\xB9\x78\x00\x87\x7E\x77\xD0\x5B\x23\x9B\x93\x00\xE8\x00\x09\x92\xBF\xB7\x6B\xCE\x7E\x3F\x6E\x41\x7F\x24\x18\xD8\x71\x5E\x28\x32\xC7\x43\xEB\x72\x34\x05\xAC\x7D\x42\x83\x12\xA0\x75\x00\xB2\x49\xFA\x91\x8D\x38\x05\x68\x72\x94\x6B\x09\xA0\x3B\x01\xE0\xA4\xAD\x16\xA3\xA6\x61\x67\x5B\x95\x69\x24\xA3\xB0\x0E\x31\x82\x87\xA4\xFB\xD2\x48\x93\xB1", -"\x94\x4E\x1B\x75\xD1\x74\x6B\x69\x97\x80\xDA\x7C\xA2\xFA\x60\x03\x36\xE6\x6F\x12\x00\xAC\x7B\x17\x29\xA8\x7C\x04\x2D\xA3\xFA\x35\xD9\x51\x11\x9B\x8A\x35\x9D\xA3\x8E\x81\x97\x80\x93\x76\x73\x00\x1C\xF5\x62\x3D\x7C\x4E\xA7\xAF\x7E\x38\x01\xBE\x7D\x59\x76\x69\x43\x87\x1C\x30\x03\x12\x4E\xA3\xFD\x93\x0B\x4D\xA1\x81\x45\x9A\x9C\xBF\x0C\x05\x88\x65\x71\x46\xA8\xC9\x91\x20\xA6\x1F\x82\x72\xA4\x5A\x35\xD8\xD0\x12\x24\x80\xCC\x74\xB2\x80\x59\x68\x25\x83\xEE\x76\x2B\x0B\xC8\x04\xB2\xF5\x0F\x4D\xA1\xB2\x85\x1B\x87\x38\xA5\x44\x7D\xF2\x47\xBA\xDE\x72\x18\xA7\xCC\x75\xA0\xA7\x92\x92\xC9\x84\x04\xA5\x99\x04\xAC\x16\x8A\x84\x31\x46\xA6\x0F\x04\x3E\xA5\x81\x77\x06\x72\x9C\x32\x20\x90\xBC\x38\x08\xD8\x7D\x90\xA6\x20\xA5\x40\x00\x3C\x96\xFE\x49\x96\x34\x49\x12\x82\x00\x88\xA2\xA3\xC3\x75\xA5\x77\xC6\x8C\x97\x24\x9A\xF3\x58\x28\xB9\xFF\x97\x99\x79\x1A\xA6\x3E\x00\x0F\xA5\x10\x49\xA8\xF4\x53\xEC\x65\x51\xA9\x8D\xA1\x21\x00\x3F\x00\x1C\xA5\xCA\x72\x73\x2D\xA7\x04\x1E\xFB\x4A\x0B\x59\x96\x98\x6A\x03\x5D\x71\xFC\x16\xC1\x5A\x81\x95\x2F\x2C\x00\x70\x8E\x54\x8A\xC0\x8A\x3A\x00\xA9\x9F\x6C\x09\x0D\x8D\x73\x30\x59\x70\x8D\x0C\x03\xC2\x8B\xA5\x71\x10\x59\x06\x2E\xB6\x99\x05\x61\x93\x10\x05\x49\x7C\x36\xA4\xF4\x75\x09\x01\x7E\x01\x00\x29\xBF\x50\xAB\x90\xA1\x9E\x88\x8F\xA4\x30\xA5\xEA\x94\x1F\x8C\xA4\xE9\x71\x70\x04\xD9\x72\xC5\xA3\xC0\x7C\x64\x83\x8F\xFA\x4B\x4F\x0A\x0E\x41\x36\x80\xE1\x06\x64\x7D\xDF\x71\x4C\x7D\xAF\xB6\x47\x4E\x2A\x27\xA6\x6D\x7C\x9E\xA7\x41\x7D\xB0\x7D\x20\x4D\xBB\xF9\x62\x93\x81\x28\xA7\x6A\x98\xB1\x7D\xAA\x96\xF0\x71\x58\x7D\x3F\x33\xAB\x46\x20\x3C\x54\x53\xAC\xE0\x06\x4E\xA6\xFF\x71\xED\xA4\x4E\x4A\xB7\x93\x97\xB3\x6E\xD3\x4B\x9B\xA4\x76\x72\x77\x7C\xC5\x9A\x17\xFB\x0F\xF6\x7C\xEA\x6F\xD9\x7E\xAC\x79\xFE\x6C\x3F\xA4\xD9\x9A\xF8\xF9\x25\xF6\x72\xE8\x74\x23\x7C\xAD\x7E\x20\x00\x8B\x6C\x49\x77\x30\xFA\x22\x95\xA4\xEB\x70\xCF\x77\xAE\x7D\x3C\xA6\xE7\x6A\x46\xA5\x08\x0E\x0E\x95\x88\xE8\x7F\x1B\x77\xAC\x4B\x5E\x7F\x00\x73\x7A\x7D\x1F\xFC\x5D\x93\xAC\x5A\x2F\x4F\xA9\x9D\xA5\x76\x00\x88\xA5\xF2\x0F\xF1\x8E\x30\x95\x89\x6B\x23\x55\xA6\xB0\x7D\x5C\x4F\x06\x73\x60\xA5\x2E\xFB\x11\xF6\x69\x90\x7B\x51\xA5\x8E\xA1\x55\xA4\x85\x06\x59\xA5\x66\xED\x65\x94\x86\x04\x0E\xD3\x68\xA9\xA2\x57\x7E\xA6\xA5\x6C\x7D\x9C\x4A\x9B\xF6\x55\x38\x17\x6B\x7D\xAC\xA7\x4B\x7F\xB8\x7D\x30\x7D\xD9\x4A\xBE\xC6\x5D\x23\xB1\xDB\x48\xAC\xA3\x68\x7E\xB1\x82\xF7\x71\xBE\x5E\x6D\x94\x83\x2A\xB9\x54\xAF\xAD\xA0\x62\x7C\x9E\x7D\x86\x42\xFC\x5A\x4D\xCE\x1F\x18\xA7\xA7\x95\xE4\x2E\x79\x71\x3D\x76\xAD\x7D\x68\xED\x71\x1D\x72\xB5\x7C\xD1\x7C\xB4\x79\x6B\x7E\x91\x64\x32\x2E\xF2\x4A\xDB\xC6\x4F\x28\xBC\x58\x82\x7F\xA5\x89\x73\x2D\x89\x35\x7D\x23\x9A\x54\x93\x9B\xB2\x75\xB7\x81\xCE\x72\x44\x7F\x1C\x97\x4A\x7D\xE6\x4A\xDA\xF5\x68\x69\x57\x4E\xAA\xA9\x7C\xA8\x50\x6B\x37\x1D\x4D\xB6\x49\xEE\x6E\x38\x26\xBD\x44\x1A\x38\x75\x37\x7C\xC8\x46\x83\xA5\x2D\xFA\x08\x96\xBA\xE8\x62\x56\xAF\x22\x8B\x53\xA4\xAB\xA4\x81\x33\xB4\x49\xCD\x29\x60\x2C\xB3\x27\xA3\xA7\x79\x50\x7C\xBB\xA4\x55\xA5\xE0\x4A\xA9\xD9\x59\x2C\xAE\xBA\x1B\xB1\xA1\x2B\x00\x77\x7C\x8A\x38\xBE\xD2\x2B\x96\x89\x02\xB9\x67\x9B\xAC\x79\x62\xA5\xB8\xA4\xE0\x17\x92\x0E\x80\xCD\x58\xB6\x6A\xD3\x73\xC6\x92\x47\x7F\xBE\xA4\x82\x7D\xFD\x4A\x87\x95\x95\xF8\x7F\x54\xA2\x1D\x5A\x67\xA6\x1D\xA0\x40\x7D\x19\xFA\x57\xF6\x73\x91\x72\xD2\x61\x9F\x7D\x5B\x7D\xCE\xA5\x7E\x76\x22\x4B\xD3\xF4\x64\x2C\xB2\xD1\x4E\xAE\xA2\xB2\x75\xFC\x6E\x74\x7D\xC7\xFE\x04\xC8\x0E\x2D\xA4\x0C\xA2\xA5\x7C\x4E\x7F\xCB\xA5\x67\xA5\xC4\x4A\xC5\x35\x67\x27\xB6\x55\xA7\xD2\x70\x57\xA6\x1D\x80\x5D\xA5\xFB\x56\x3C\x95\xA0\x27\xA0\x0F\x0F\xAB\xA1\xA2\x2B\xC7\xA4\xAC\xA5\x45\x4B\xDA\x96\x89\x2B\xB3\xD1\x76\xAC\xA0\xA8\x77\xDD\xA4\x0C\x7D\x3D\x4B\xEF\xF5\x66\xE8\x7A\x56\xA8\x93\x29\x45\x7D\xBF\x7D\xB1\xA5\x2A\x43\xBC\x96\xA3\xEC\x7B\x5B\xAC\xA1\x79\x61\x4E\xC3\x11\xBF\xA5\x0E\x4B\xE6\x59\xBA\x2D\xBE\x59\xAB\xB3\x4B\x6B\x7F\x97\x9A\x1E\x72\x80\x4B\xAA\x16\x47\x2D\xA5\x54\xA9\xB4\xA3\x5C\x4C\xCA\x7C\x20\x7D\x90\x4B\xBD\x09\xB9\x2D\xA6\x5B\xA6\xAD\xA5\x5D\xA6\xC9\xA5\xC1\x76\xD7\x5A\x5E\x94\xB3\xEC\x73\x22\x47\xF0\x74\x65\xA6\x8B\x7C\x97\xA5\xA5\x4B\xB0\x96\x9D\x2D\xB4\x5A\xA3", -"\xD9\x72\x4B\x7F\xD5\xA5\xCC\xA5\x0E\xFB\x26\x97\x98\x2B\xA7\x59\xA0\xAF\xA2\x4F\x01\xC0\xA4\x35\xA5\x71\xEC\x3D\x36\x78\x88\x35\x22\x82\xA6\x34\x3F\x38\xE0\x7D\x48\x03\x71\xFB\x07\xF7\x45\xEE\x6E\x95\x64\x81\x06\x6E\x7F\xD9\x7D\xE1\xA5\x5D\x02\xFD\xF6\x57\xC8\x3F\xDB\x7F\x21\x3A\xB6\x51\xAF\x56\xC2\x7D\x6F\xC6\x1A\xB3\x4A\x2F\xAF\x1A\x99\xD0\x2F\x77\xA7\xCA\x71\x81\xA5\xD7\x48\xEB\x95\x9A\xC4\x2B\xD9\x74\xB6\x7C\x55\x69\x9C\xA5\xAE\x38\x4A\x37\x8D\xC2\x09\x8A\x6B\xDA\x75\xBE\xA0\x76\xA7\xD6\xA5\x86\x62\xB3\x4B\xEA\x96\xB4\x2A\xB9\x0B\x08\x9D\xA3\x6E\xA5\xED\x00\x48\xA5\x05\x07\x6D\x93\xA4\x32\x1A\xCD\x7D\xAB\xA4\x81\x72\xA0\xA4\x30\x82\xE3\x4B\xDA\x81\x60\xED\x6E\xD7\x72\xB5\xA0\x5E\x7C\xED\xA4\x94\xA5\xB2\xFA\x0A\x07\x6B\x2F\xB3\xDA\x7D\xB9\xA6\x7D\xA4\xE3\xA5\x1A\x4D\x33\x4B\xD7\x77\x35\x2C\xBA\x4D\xA1\x86\x6A\xF4\x02\xA5\xA4\x90\x47\x0B\x4C\x90\x2B\x8D\x30\xB1\x5A\xA3\xB6\x7B\x6A\xA6\xBF\xA5\xA0\xA5\x29\x5D\x19\x98\xAA\xED\x7B\x60\xA5\xB2\x4E\x5E\xA4\xE7\x28\x73\x7D\xD2\xE3\x71\x8F\xB6\xE8\x62\x61\xAC\xAE\x7D\x7D\xA4\x07\xA6\x7E\xA5\x1B\xFA\x54\x96\xA5\x2A\xB7\xEA\x08\xC1\xA1\x3C\x3B\xDA\x7C\x91\x7D\xB9\x4B\xB2\x97\xA7\x2E\xBE\x5A\xA3\x31\x40\x6C\xA7\x13\x9D\xD3\x2D\x2C\x4C\xC0\x32\xB7\x30\xA1\xDB\x71\xAA\xA0\x6D\xA7\xAA\xA4\xD6\x71\x6B\x4B\xA8\x26\x0C\xE8\x7D\x5F\xA3\x07\x00\x7F\xA6\xE1\x70\x3F\xA5\x2C\xED\x09\xC8\x50\x6B\x5B\xCD\x7B\x17\x39\x44\xA7\x0A\xA6\x1B\xA6\x24\x4C\x8B\x97\x94\x2E\xBC\x5B\xA1\xE1\x04\x44\xA5\xBF\x7D\x20\xA6\x0B\xFB\x03\x98\xB8\xEC\x62\x5C\xA8\xD5\x72\x47\xA4\x45\x87\x1A\xA6\x15\xFB\x39\xF5\x6F\x2F\xA8\xD9\x41\xBF\xA2\x63\x4E\xE3\xA5\x69\xA5\x68\x4C\xE4\x97\xB7\xE9\x62\xDA\x74\xC6\xA4\x68\x7D\x11\x73\x7C\xA5\xBE\xD2\x60\x98\xB2\x80\x83\x62\xA5\x41\x73\x73\xA7\xB5\xA4\xBA\x76\x27\x4C\xEF\x36\x1F\x2E\xA3\x48\xA1\xC7\xA2\x80\xA5\xB5\x7C\x81\x7D\x45\x4C\xF5\x94\xA9\x2D\xBA\xD8\x4B\x1E\x3F\x79\xA5\x2D\x50\x3D\xA6\xF6\x41\x96\x6F\x04\x2F\xB7\x8B\x56\xBC\xA5\x7A\xA5\xD4\x4C\x32\x57\xD8\x4B\xAC\xDF\x5A\x2F\xB0\xC5\x25\xB5\x49\x21\x02\xB9\x76\xAF\x72\x90\x4C\xD5\x59\xBB\xED\x71\x5E\xAE\x9C\x06\x42\x3A\x79\x14\xB8\x7D\x98\x4C\xDB\x97\x9A\x32\xBF\xD1\x60\x22\x39\x75\xA5\x61\x77\x42\xA6\x84\xD3\x62\x98\xB4\x31\xA5\x60\xA3\xB8\xA0\x5D\xA7\xB5\x2C\x75\xA5\x00\x4C\xA1\x99\xAE\xE2\x96\xD8\x71\xBB\xA6\x88\xA5\xCC\xA5\x77\xA5\xAC\x86\x4B\xD1\x1E\x2F\xA0\x94\x52\xB7\x77\xEB\x07\xBB\x32\xD4\x34\x88\x61\x6B\x1E\x3E\x6A\x3A\xC6\x24\x3D\x2E\x56\x2C\xC6\x72\x59\x2D\xAC\x53\x19\x64\xB9\xE5\x6E\x52\x0F\x6E\x30\xA4\x98\xE7\x5E\x61\x2C\xCE\x4C\x97\xE9\x78\x8B\x3E\xD5\x21\x8D\x29\x9A\xA7\x33\xA6\xEE\x29\x8F\xE4\x11\x1E\x0E\x00\x03\x66\xAD\x47\x84\xD7\x80\x0A\x03\xDF\x2E\x11\x0F\x17\x00\x28\x62\x73\x4C\x3A\xCE\xA1\xB5\x61\x67\x0A\xEE\x29\xC9\x12\xDE\x15\x39\x4F\x3C\x10\x80\x40\x2C\x30\x34\x3A\xA6\xDD\x00\xEB\x4C\xB5\x04\x4F\x00\x0F\x37\x38\xCD\xA3\x59\x25\x3C\xA7\xF9\x29\xF4\x4C\xD8\xA9\x00\x2F\xA6\x30\xAC\x39\x68\x02\x03\x31\xA6\xD3\x39\x89\x03\x0B\xB2\x02\x09\x9B\x12\x85\xCF\xA4\x5F\x71\x04\x01\x7B\xA6\x1F\x0B\x67\x58\xA2\x1C\x63\x57\x0C\x3F\x2D\x9B\x28\xE3\x71\x5D\x2D\xB2\x08\x3F\x04\x1A\xBC\x63\x9F\x28\x4D\x2C\x22\x85\x92\x1E\x8B\x84\x43\x48\xCA\xA8\x2C\xBD\x3A\x53\x0D\x00\x05\x9A\xA5\x4A\x2F\x7D\xA6\x04\xC9\x00\xA8\x1C\x6B\x29\x66\xA4\xD1\xA6\x81\x2B\x19\x00\x66\xA6\xDC\x58\x59\x99\x8C\x9E\x70\x66\xA7\xAC\x22\x9A\xA4\x1A\x83\x22\x05\xEF\x66\x0A\xBE\x28\x34\xB5\x64\x60\x40\x2B\x41\x4D\x3F\xA6\x6F\xA6\xDA\x4C\xE2\xF3\x1C\x33\xA7\x57\x0B\xAC\x26\xDB\x88\x4D\xA7\x0C\x6D\x69\xD3\x27\x69\xA6\x18\x04\x67\xAC\x6A\x45\xB8\x03\x04\x00\xA6\xA6\x8D\x72\x45\x99\x86\x11\x19\x69\xA9\xD2\x2A\x02\x03\x46\xA7\x45\x2A\x64\x54\x3F\x14\x2D\x33\xBC\x69\xA2\xD0\xA3\x5B\x2C\x4B\xA7\x68\x05\x8C\x03\x18\x07\x1A\x0E\x0D\x66\xA5\xD4\xA7\x9B\xA7\x00\x2A\xA4\xA6\x4C\x72\x5B\x30\x65\x34\xA9\x5F\xA3\x29\x36\xAA\xA5\x4A\xA6\x1D\x2A\x5A\x4D\xD7\x9A\xB9\xC4\x1D\x69\xA7\x8C\x57\xA7\xA5\x4D\xA7\xB9\x8B\x2D\x4D\xE1\x9A\xB3\x0D\x1D\x66\xA7\xD7\xA2\x05\x6F\x51\xA6\xD6\x62\x74\xD2\x14\x00\x07\x34\xA9\x82\x49\xD0\xA5\x1E\x2E\x3C\x2B\x80\xA6\x64\x54\x32\xDD\x6A\x62\x76\x30\x4B\xD8\xA1\xA9\x86\x1D\x80\x5F\x2D\xC8\x5A\x0C\x9A\xBA\x50\x33\x45\x0D\xD8\xA2\x29\x7E", -"\x12\x2A\x8F\xA6\x05\x48\x29\x07\x30\xFC\x12\xCE\x94\xD4\x73\x71\x03\x40\xA7\x2F\x83\x87\xEC\x3C\x5A\x80\x2F\x4B\x64\x75\x1D\x33\xAF\x50\x69\xA6\x44\x73\x47\xFB\x3F\xF3\x55\x36\xB1\xDB\x99\xD1\x71\xA1\x75\xEB\xA5\x9D\xA5\x50\x4B\xDC\x06\x4A\x2C\xA9\xCD\x76\xD1\x73\xB5\xA7\xED\x9D\x0D\x31\x1A\xED\x7B\xDA\x43\x2D\xA9\x56\x89\xB5\xA4\x74\xA7\x1A\xA7\x8B\x69\x3B\x4C\x90\x98\xB3\x2F\xAB\x65\x75\xB1\xA3\x4F\xA7\xFA\x73\x3E\xA5\x92\x4A\xB9\xF3\x40\x2A\xAC\x62\xA4\xAA\x7B\x20\x02\xA9\x7C\xF1\x7F\x0A\x01\x6F\xCD\x2D\xB5\x78\x5C\xA1\xB9\xA4\x80\xA5\x07\xA6\x03\xA6\xFE\x4A\x88\x98\x89\x2A\xBB\x3C\x1C\xD6\xA2\x60\x32\x6D\xA7\x36\x9D\x80\x69\x39\x9B\xA0\xB3\x7B\x23\x78\xBB\xA7\x4D\xA7\x1F\xA6\x43\xA5\xE3\x9A\x4E\x98\xB0\x2D\xAF\x87\x2B\x9D\x7D\x52\xA5\x6F\xA5\x5A\x50\xDF\x4D\xB0\x0F\xA1\x37\xAE\x6D\xAB\xDB\xA7\x60\xA7\xE8\xA4\x07\xA6\x5B\x4C\x92\xDB\x6A\xD9\x89\xE9\x21\xDF\xA7\x3B\x9C\x6E\xA6\xFA\xA6\x53\xED\x22\x97\xA3\xE8\x71\x6B\x76\xC2\xA2\x65\x4C\x0A\xA6\x56\x43\x4C\x4B\xAE\xDC\x7D\x37\xA1\x4D\x3D\xD9\xA2\xB7\xA5\x80\xA7\xD2\x7C\xBD\x4D\xF8\x9B\xB5\x31\xA7\x57\xA7\x14\x3F\x5A\x2C\x71\xA4\xCF\x6B\x0B\x4E\xD6\x74\xBF\x37\xA5\x6A\x75\xDF\xA1\x64\xA7\x7D\xA7\x17\xA6\x48\x4B\xB1\x98\x99\x37\xBD\x61\xAE\xAA\xA3\x2A\x9D\x74\xA7\xC9\x9D\xF3\x4D\x9C\x9C\x8F\x38\xA4\x5A\xA3\xE0\xA3\x96\xA7\x75\xA7\x5A\xA6\xFF\xE3\x08\xD4\x30\xC5\x2C\x5B\xA9\x9E\xA6\x6D\xA4\xFF\x8D\xF5\xA6\xEE\x49\xD2\x98\xAE\xB4\x74\x62\xA2\xAD\x4E\x8A\xA5\x7F\x59\x0C\xA7\x10\x0E\x53\x9B\x8D\x2C\xA2\x70\xAF\xB0\xA3\x64\xA7\x03\xA6\xAB\x96\x07\xFB\x47\x95\x8D\x53\x40\x72\xA6\x97\x9D\xC1\xA7\x78\xA6\xC4\xA5\xE7\x10\x82\xF4\x46\x39\xB9\x6F\xA5\xAC\xA2\x62\x7F\x19\xA7\x25\xA7\xD2\x4D\x97\xDB\x6B\x38\xBC\x6D\xAF\xE1\xA1\x70\xA4\x2D\xA6\xAC\x76\x6F\x4C\xC1\x5F\x0A\x0E\x4C\x72\xA1\x15\x82\xCB\xA6\x5B\x76\x22\xA7\x92\x4B\xBE\x9B\x87\x39\xBA\xD8\x46\xB9\xA6\xFD\x7C\x99\xA6\xCE\xA6\xAD\x4D\xAA\x9C\xA7\x39\xB0\x70\xAD\xE5\xA2\x73\xA5\x81\xA7\xA0\x62\xD1\x4A\xAD\x36\x69\xEC\x78\x72\xA8\xE2\xA4\x62\x70\x80\xA7\x39\xA7\x2C\x4E\xC5\x9C\x93\x2E\xB3\x70\xA2\xB1\xA5\x61\x12\xAF\x2F\xAA\x21\x6E\x4D\xDD\x95\x87\x04\x19\x72\xAA\xD7\x73\x4A\x03\xB8\xA4\x34\x72\x7C\x4E\x89\xDB\x4D\x3A\xBC\x67\x75\xDE\xA1\x91\xA5\xA3\xA5\x45\xA6\xFB\xF9\x69\x95\xB6\x2E\xB0\x6F\xAC\xE8\xA6\xC9\xA4\xA5\xA7\xEA\xA6\x63\x4C\xDF\x9C\xB6\x31\xB1\x2F\xA5\x13\x00\xAA\xA6\x27\x6D\x6B\x2D\x24\x4D\xA6\x9A\xA7\x6E\x3B\x6A\xA3\xF5\x6A\xA5\xA6\x57\xA6\xCA\x01\x79\x4D\xD1\xA7\x23\x35\xB1\x69\xA5\xD6\xA6\xAF\xA4\x38\xA7\xE4\xA4\x09\xB1\x53\x9A\x8D\x53\x4C\x75\xA6\xD9\xA0\x9B\x2A\x4F\xA6\x40\x18\xB7\x4E\xC1\x9A\x9C\xFB\x23\x6A\xA2\x38\x05\xD6\xA7\x4C\xA7\x60\xA7\xC1\x4C\xFB\xC5\x26\x3A\xBF\x6C\xA4\xA8\x9D\xEB\x04\xA2\xA7\x65\xA7\xDC\x4B\x94\x07\x10\x3B\xAC\x76\xA7\xE6\x99\x7A\x2D\x27\x1E\x0E\x00\x83\x4D\xCA\x69\x8D\x21\xA0\x00\x0C\x53\x2D\x27\x03\xB3\x2D\x63\x05\xCD\x5A\x3E\xBD\x34\x0D\x38\x76\xA9\x6E\x7D\xF7\x75\xB7\xA7\x55\x8E\x21\x55\x4D\xB5\x27\x3A\xA8\x96\x6D\x01\x01\xDB\xA5\xF5\x73\xC4\xA1\x8C\xEC\x61\xA6\x0E\xB2\x68\x34\x75\x5C\x07\xCD\xA4\xB5\xA7\x7B\xA7\xF8\x4E\xF9\x9D\xBA\x3B\xBB\x77\xAC\xEF\xA5\xDF\xA6\xBF\xA7\x7F\xA7\x00\x4F\x81\x9E\x82\x3C\xA3\x78\xA4\xF0\xA5\xE0\xA6\xC1\xA7\x83\xA7\x08\x4F\x8C\x33\x80", -}; - - void WfGetParserBuffer(vl::stream::MemoryStream& stream) - { - vl::stream::MemoryStream compressedStream; - for (vint i = 0; i < parserBufferRows; i++) - { - vint size = i == parserBufferRows - 1 ? parserBufferRemain : parserBufferBlock; - compressedStream.Write((void*)parserBuffer[i], size); - } - compressedStream.SeekFromBegin(0); - vl::stream::LzwDecoder decoder; - vl::stream::DecoderStream decoderStream(compressedStream, decoder); - vl::collections::Array buffer(65536); - while (true) - { - vl::vint size = decoderStream.Read(&buffer[0], 65536); - if (size == 0) break; - stream.Write(&buffer[0], size); - } - stream.SeekFromBegin(0); - } -/*********************************************************************** -Unescaping Function Foward Declarations -***********************************************************************/ - - extern void SetDefaultClassMember(vl::collections::List>& value, const vl::collections::List& tokens); - extern void UnescapeFormatString(vl::parsing::ParsingToken& value, const vl::collections::List& tokens); - extern void UnescapeString(vl::parsing::ParsingToken& value, const vl::collections::List& tokens); - -/*********************************************************************** -Parsing Tree Conversion Driver Implementation -***********************************************************************/ - - class WfTreeConverter : public vl::parsing::ParsingTreeConverter - { - public: - using vl::parsing::ParsingTreeConverter::SetMember; - - bool SetMember(WfClassMemberKind& member, vl::Ptr node, const TokenList& tokens) - { - vl::Ptr token=node.Cast(); - if(token) - { - if(token->GetValue()==L"Static") { member=WfClassMemberKind::Static; return true; } - else if(token->GetValue()==L"Override") { member=WfClassMemberKind::Override; return true; } - else if(token->GetValue()==L"Normal") { member=WfClassMemberKind::Normal; return true; } - else { member=WfClassMemberKind::Static; return false; } - } - member=WfClassMemberKind::Static; - return false; - } - - bool SetMember(WfPredefinedTypeName& member, vl::Ptr node, const TokenList& tokens) - { - vl::Ptr token=node.Cast(); - if(token) - { - if(token->GetValue()==L"Void") { member=WfPredefinedTypeName::Void; return true; } - else if(token->GetValue()==L"Object") { member=WfPredefinedTypeName::Object; return true; } - else if(token->GetValue()==L"Interface") { member=WfPredefinedTypeName::Interface; return true; } - else if(token->GetValue()==L"Int") { member=WfPredefinedTypeName::Int; return true; } - else if(token->GetValue()==L"UInt") { member=WfPredefinedTypeName::UInt; return true; } - else if(token->GetValue()==L"Float") { member=WfPredefinedTypeName::Float; return true; } - else if(token->GetValue()==L"Double") { member=WfPredefinedTypeName::Double; return true; } - else if(token->GetValue()==L"String") { member=WfPredefinedTypeName::String; return true; } - else if(token->GetValue()==L"Char") { member=WfPredefinedTypeName::Char; return true; } - else if(token->GetValue()==L"Bool") { member=WfPredefinedTypeName::Bool; return true; } - else { member=WfPredefinedTypeName::Void; return false; } - } - member=WfPredefinedTypeName::Void; - return false; - } - - bool SetMember(WfMapWritability& member, vl::Ptr node, const TokenList& tokens) - { - vl::Ptr token=node.Cast(); - if(token) - { - if(token->GetValue()==L"Readonly") { member=WfMapWritability::Readonly; return true; } - else if(token->GetValue()==L"Writable") { member=WfMapWritability::Writable; return true; } - else { member=WfMapWritability::Readonly; return false; } - } - member=WfMapWritability::Readonly; - return false; - } - - bool SetMember(WfFunctionAnonymity& member, vl::Ptr node, const TokenList& tokens) - { - vl::Ptr token=node.Cast(); - if(token) - { - if(token->GetValue()==L"Named") { member=WfFunctionAnonymity::Named; return true; } - else if(token->GetValue()==L"Anonymous") { member=WfFunctionAnonymity::Anonymous; return true; } - else { member=WfFunctionAnonymity::Named; return false; } - } - member=WfFunctionAnonymity::Named; - return false; - } - - bool SetMember(WfClassKind& member, vl::Ptr node, const TokenList& tokens) - { - vl::Ptr token=node.Cast(); - if(token) - { - if(token->GetValue()==L"Class") { member=WfClassKind::Class; return true; } - else if(token->GetValue()==L"Interface") { member=WfClassKind::Interface; return true; } - else { member=WfClassKind::Class; return false; } - } - member=WfClassKind::Class; - return false; - } - - bool SetMember(WfConstructorType& member, vl::Ptr node, const TokenList& tokens) - { - vl::Ptr token=node.Cast(); - if(token) - { - if(token->GetValue()==L"Undefined") { member=WfConstructorType::Undefined; return true; } - else if(token->GetValue()==L"SharedPtr") { member=WfConstructorType::SharedPtr; return true; } - else if(token->GetValue()==L"RawPtr") { member=WfConstructorType::RawPtr; return true; } - else { member=WfConstructorType::Undefined; return false; } - } - member=WfConstructorType::Undefined; - return false; - } - - bool SetMember(WfEnumKind& member, vl::Ptr node, const TokenList& tokens) - { - vl::Ptr token=node.Cast(); - if(token) - { - if(token->GetValue()==L"Normal") { member=WfEnumKind::Normal; return true; } - else if(token->GetValue()==L"Flag") { member=WfEnumKind::Flag; return true; } - else { member=WfEnumKind::Normal; return false; } - } - member=WfEnumKind::Normal; - return false; - } - - bool SetMember(WfEnumItemKind& member, vl::Ptr node, const TokenList& tokens) - { - vl::Ptr token=node.Cast(); - if(token) - { - if(token->GetValue()==L"Constant") { member=WfEnumItemKind::Constant; return true; } - else if(token->GetValue()==L"Intersection") { member=WfEnumItemKind::Intersection; return true; } - else { member=WfEnumItemKind::Constant; return false; } - } - member=WfEnumItemKind::Constant; - return false; - } - - bool SetMember(WfAPConst& member, vl::Ptr node, const TokenList& tokens) - { - vl::Ptr token=node.Cast(); - if(token) - { - if(token->GetValue()==L"Readonly") { member=WfAPConst::Readonly; return true; } - else if(token->GetValue()==L"Writable") { member=WfAPConst::Writable; return true; } - else { member=WfAPConst::Readonly; return false; } - } - member=WfAPConst::Readonly; - return false; - } - - bool SetMember(WfAPObserve& member, vl::Ptr node, const TokenList& tokens) - { - vl::Ptr token=node.Cast(); - if(token) - { - if(token->GetValue()==L"Observable") { member=WfAPObserve::Observable; return true; } - else if(token->GetValue()==L"NotObservable") { member=WfAPObserve::NotObservable; return true; } - else { member=WfAPObserve::Observable; return false; } - } - member=WfAPObserve::Observable; - return false; - } - - bool SetMember(WfForEachDirection& member, vl::Ptr node, const TokenList& tokens) - { - vl::Ptr token=node.Cast(); - if(token) - { - if(token->GetValue()==L"Normal") { member=WfForEachDirection::Normal; return true; } - else if(token->GetValue()==L"Reversed") { member=WfForEachDirection::Reversed; return true; } - else { member=WfForEachDirection::Normal; return false; } - } - member=WfForEachDirection::Normal; - return false; - } - - bool SetMember(WfLiteralValue& member, vl::Ptr node, const TokenList& tokens) - { - vl::Ptr token=node.Cast(); - if(token) - { - if(token->GetValue()==L"Null") { member=WfLiteralValue::Null; return true; } - else if(token->GetValue()==L"True") { member=WfLiteralValue::True; return true; } - else if(token->GetValue()==L"False") { member=WfLiteralValue::False; return true; } - else { member=WfLiteralValue::Null; return false; } - } - member=WfLiteralValue::Null; - return false; - } - - bool SetMember(WfUnaryOperator& member, vl::Ptr node, const TokenList& tokens) - { - vl::Ptr token=node.Cast(); - if(token) - { - if(token->GetValue()==L"Positive") { member=WfUnaryOperator::Positive; return true; } - else if(token->GetValue()==L"Negative") { member=WfUnaryOperator::Negative; return true; } - else if(token->GetValue()==L"Not") { member=WfUnaryOperator::Not; return true; } - else { member=WfUnaryOperator::Positive; return false; } - } - member=WfUnaryOperator::Positive; - return false; - } - - bool SetMember(WfBinaryOperator& member, vl::Ptr node, const TokenList& tokens) - { - vl::Ptr token=node.Cast(); - if(token) - { - if(token->GetValue()==L"Assign") { member=WfBinaryOperator::Assign; return true; } - else if(token->GetValue()==L"Index") { member=WfBinaryOperator::Index; return true; } - else if(token->GetValue()==L"Union") { member=WfBinaryOperator::Union; return true; } - else if(token->GetValue()==L"Intersect") { member=WfBinaryOperator::Intersect; return true; } - else if(token->GetValue()==L"FailedThen") { member=WfBinaryOperator::FailedThen; return true; } - else if(token->GetValue()==L"Exp") { member=WfBinaryOperator::Exp; return true; } - else if(token->GetValue()==L"Add") { member=WfBinaryOperator::Add; return true; } - else if(token->GetValue()==L"Sub") { member=WfBinaryOperator::Sub; return true; } - else if(token->GetValue()==L"Mul") { member=WfBinaryOperator::Mul; return true; } - else if(token->GetValue()==L"Div") { member=WfBinaryOperator::Div; return true; } - else if(token->GetValue()==L"Mod") { member=WfBinaryOperator::Mod; return true; } - else if(token->GetValue()==L"Shl") { member=WfBinaryOperator::Shl; return true; } - else if(token->GetValue()==L"Shr") { member=WfBinaryOperator::Shr; return true; } - else if(token->GetValue()==L"LT") { member=WfBinaryOperator::LT; return true; } - else if(token->GetValue()==L"GT") { member=WfBinaryOperator::GT; return true; } - else if(token->GetValue()==L"LE") { member=WfBinaryOperator::LE; return true; } - else if(token->GetValue()==L"GE") { member=WfBinaryOperator::GE; return true; } - else if(token->GetValue()==L"EQ") { member=WfBinaryOperator::EQ; return true; } - else if(token->GetValue()==L"NE") { member=WfBinaryOperator::NE; return true; } - else if(token->GetValue()==L"Xor") { member=WfBinaryOperator::Xor; return true; } - else if(token->GetValue()==L"And") { member=WfBinaryOperator::And; return true; } - else if(token->GetValue()==L"Or") { member=WfBinaryOperator::Or; return true; } - else { member=WfBinaryOperator::Assign; return false; } - } - member=WfBinaryOperator::Assign; - return false; - } - - bool SetMember(WfRangeBoundary& member, vl::Ptr node, const TokenList& tokens) - { - vl::Ptr token=node.Cast(); - if(token) - { - if(token->GetValue()==L"Inclusive") { member=WfRangeBoundary::Inclusive; return true; } - else if(token->GetValue()==L"Exclusive") { member=WfRangeBoundary::Exclusive; return true; } - else { member=WfRangeBoundary::Inclusive; return false; } - } - member=WfRangeBoundary::Inclusive; - return false; - } - - bool SetMember(WfSetTesting& member, vl::Ptr node, const TokenList& tokens) - { - vl::Ptr token=node.Cast(); - if(token) - { - if(token->GetValue()==L"In") { member=WfSetTesting::In; return true; } - else if(token->GetValue()==L"NotIn") { member=WfSetTesting::NotIn; return true; } - else { member=WfSetTesting::In; return false; } - } - member=WfSetTesting::In; - return false; - } - - bool SetMember(WfTypeCastingStrategy& member, vl::Ptr node, const TokenList& tokens) - { - vl::Ptr token=node.Cast(); - if(token) - { - if(token->GetValue()==L"Strong") { member=WfTypeCastingStrategy::Strong; return true; } - else if(token->GetValue()==L"Weak") { member=WfTypeCastingStrategy::Weak; return true; } - else { member=WfTypeCastingStrategy::Strong; return false; } - } - member=WfTypeCastingStrategy::Strong; - return false; - } - - bool SetMember(WfTypeTesting& member, vl::Ptr node, const TokenList& tokens) - { - vl::Ptr token=node.Cast(); - if(token) - { - if(token->GetValue()==L"IsType") { member=WfTypeTesting::IsType; return true; } - else if(token->GetValue()==L"IsNotType") { member=WfTypeTesting::IsNotType; return true; } - else if(token->GetValue()==L"IsNull") { member=WfTypeTesting::IsNull; return true; } - else if(token->GetValue()==L"IsNotNull") { member=WfTypeTesting::IsNotNull; return true; } - else { member=WfTypeTesting::IsType; return false; } - } - member=WfTypeTesting::IsType; - return false; - } - - bool SetMember(WfObserveType& member, vl::Ptr node, const TokenList& tokens) - { - vl::Ptr token=node.Cast(); - if(token) - { - if(token->GetValue()==L"SimpleObserve") { member=WfObserveType::SimpleObserve; return true; } - else if(token->GetValue()==L"ExtendedObserve") { member=WfObserveType::ExtendedObserve; return true; } - else { member=WfObserveType::SimpleObserve; return false; } - } - member=WfObserveType::SimpleObserve; - return false; - } - - bool SetMember(WfModuleType& member, vl::Ptr node, const TokenList& tokens) - { - vl::Ptr token=node.Cast(); - if(token) - { - if(token->GetValue()==L"Module") { member=WfModuleType::Module; return true; } - else if(token->GetValue()==L"Unit") { member=WfModuleType::Unit; return true; } - else { member=WfModuleType::Module; return false; } - } - member=WfModuleType::Module; - return false; - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->kind, obj->GetMember(L"kind"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->category, obj->GetMember(L"category"), tokens); - SetMember(tree->name, obj->GetMember(L"name"), tokens); - SetMember(tree->value, obj->GetMember(L"value"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->attributes, obj->GetMember(L"attributes"), tokens); - SetMember(tree->name, obj->GetMember(L"name"), tokens); - SetMember(tree->classMember, obj->GetMember(L"classMember"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->name, obj->GetMember(L"name"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->name, obj->GetMember(L"name"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->name, obj->GetMember(L"name"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->element, obj->GetMember(L"element"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->element, obj->GetMember(L"element"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->element, obj->GetMember(L"element"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->element, obj->GetMember(L"element"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->writability, obj->GetMember(L"writability"), tokens); - SetMember(tree->key, obj->GetMember(L"key"), tokens); - SetMember(tree->value, obj->GetMember(L"value"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->element, obj->GetMember(L"element"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->result, obj->GetMember(L"result"), tokens); - SetMember(tree->arguments, obj->GetMember(L"arguments"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->parent, obj->GetMember(L"parent"), tokens); - SetMember(tree->name, obj->GetMember(L"name"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->declarations, obj->GetMember(L"declarations"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->attributes, obj->GetMember(L"attributes"), tokens); - SetMember(tree->name, obj->GetMember(L"name"), tokens); - SetMember(tree->type, obj->GetMember(L"type"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->anonymity, obj->GetMember(L"anonymity"), tokens); - SetMember(tree->arguments, obj->GetMember(L"arguments"), tokens); - SetMember(tree->returnType, obj->GetMember(L"returnType"), tokens); - SetMember(tree->statement, obj->GetMember(L"statement"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->type, obj->GetMember(L"type"), tokens); - SetMember(tree->expression, obj->GetMember(L"expression"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->arguments, obj->GetMember(L"arguments"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->type, obj->GetMember(L"type"), tokens); - SetMember(tree->getter, obj->GetMember(L"getter"), tokens); - SetMember(tree->setter, obj->GetMember(L"setter"), tokens); - SetMember(tree->valueChangedEvent, obj->GetMember(L"valueChangedEvent"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->type, obj->GetMember(L"type"), tokens); - SetMember(tree->arguments, obj->GetMember(L"arguments"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->constructorType, obj->GetMember(L"constructorType"), tokens); - SetMember(tree->baseConstructorCalls, obj->GetMember(L"baseConstructorCalls"), tokens); - SetMember(tree->arguments, obj->GetMember(L"arguments"), tokens); - SetMember(tree->statement, obj->GetMember(L"statement"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->statement, obj->GetMember(L"statement"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->kind, obj->GetMember(L"kind"), tokens); - SetMember(tree->constructorType, obj->GetMember(L"constructorType"), tokens); - SetMember(tree->baseTypes, obj->GetMember(L"baseTypes"), tokens); - if(SetMember(tree->declarations, obj->GetMember(L"declarations"), tokens)) - { - SetDefaultClassMember(tree->declarations, tokens); - } - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->name, obj->GetMember(L"name"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->attributes, obj->GetMember(L"attributes"), tokens); - SetMember(tree->name, obj->GetMember(L"name"), tokens); - SetMember(tree->kind, obj->GetMember(L"kind"), tokens); - SetMember(tree->number, obj->GetMember(L"number"), tokens); - SetMember(tree->intersections, obj->GetMember(L"intersections"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->kind, obj->GetMember(L"kind"), tokens); - SetMember(tree->items, obj->GetMember(L"items"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->attributes, obj->GetMember(L"attributes"), tokens); - SetMember(tree->name, obj->GetMember(L"name"), tokens); - SetMember(tree->type, obj->GetMember(L"type"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->members, obj->GetMember(L"members"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->expandedDeclarations, obj->GetMember(L"expandedDeclarations"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->type, obj->GetMember(L"type"), tokens); - SetMember(tree->configConst, obj->GetMember(L"configConst"), tokens); - SetMember(tree->configObserve, obj->GetMember(L"configObserve"), tokens); - SetMember(tree->expression, obj->GetMember(L"expression"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->baseType, obj->GetMember(L"baseType"), tokens); - SetMember(tree->elementType, obj->GetMember(L"elementType"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->expression, obj->GetMember(L"expression"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->expression, obj->GetMember(L"expression"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->expression, obj->GetMember(L"expression"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->type, obj->GetMember(L"type"), tokens); - SetMember(tree->name, obj->GetMember(L"name"), tokens); - SetMember(tree->expression, obj->GetMember(L"expression"), tokens); - SetMember(tree->trueBranch, obj->GetMember(L"trueBranch"), tokens); - SetMember(tree->falseBranch, obj->GetMember(L"falseBranch"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->condition, obj->GetMember(L"condition"), tokens); - SetMember(tree->statement, obj->GetMember(L"statement"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->protectedStatement, obj->GetMember(L"protectedStatement"), tokens); - SetMember(tree->name, obj->GetMember(L"name"), tokens); - SetMember(tree->catchStatement, obj->GetMember(L"catchStatement"), tokens); - SetMember(tree->finallyStatement, obj->GetMember(L"finallyStatement"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->statements, obj->GetMember(L"statements"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->variable, obj->GetMember(L"variable"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->expression, obj->GetMember(L"expression"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->expandedStatement, obj->GetMember(L"expandedStatement"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->name, obj->GetMember(L"name"), tokens); - SetMember(tree->direction, obj->GetMember(L"direction"), tokens); - SetMember(tree->collection, obj->GetMember(L"collection"), tokens); - SetMember(tree->statement, obj->GetMember(L"statement"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->expression, obj->GetMember(L"expression"), tokens); - SetMember(tree->statement, obj->GetMember(L"statement"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->expression, obj->GetMember(L"expression"), tokens); - SetMember(tree->caseBranches, obj->GetMember(L"caseBranches"), tokens); - SetMember(tree->defaultBranch, obj->GetMember(L"defaultBranch"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->name, obj->GetMember(L"name"), tokens); - SetMember(tree->statement, obj->GetMember(L"statement"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->statement, obj->GetMember(L"statement"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->varName, obj->GetMember(L"varName"), tokens); - SetMember(tree->opName, obj->GetMember(L"opName"), tokens); - SetMember(tree->arguments, obj->GetMember(L"arguments"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->name, obj->GetMember(L"name"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->name, obj->GetMember(L"name"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->name, obj->GetMember(L"name"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->body, obj->GetMember(L"body"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->parent, obj->GetMember(L"parent"), tokens); - SetMember(tree->name, obj->GetMember(L"name"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->parent, obj->GetMember(L"parent"), tokens); - SetMember(tree->name, obj->GetMember(L"name"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->value, obj->GetMember(L"value"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->value, obj->GetMember(L"value"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->value, obj->GetMember(L"value"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - if(SetMember(tree->value, obj->GetMember(L"value"), tokens)) - { - UnescapeString(tree->value, tokens); - } - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->op, obj->GetMember(L"op"), tokens); - SetMember(tree->operand, obj->GetMember(L"operand"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->op, obj->GetMember(L"op"), tokens); - SetMember(tree->first, obj->GetMember(L"first"), tokens); - SetMember(tree->second, obj->GetMember(L"second"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->name, obj->GetMember(L"name"), tokens); - SetMember(tree->value, obj->GetMember(L"value"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->variables, obj->GetMember(L"variables"), tokens); - SetMember(tree->expression, obj->GetMember(L"expression"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->condition, obj->GetMember(L"condition"), tokens); - SetMember(tree->trueBranch, obj->GetMember(L"trueBranch"), tokens); - SetMember(tree->falseBranch, obj->GetMember(L"falseBranch"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->begin, obj->GetMember(L"begin"), tokens); - SetMember(tree->beginBoundary, obj->GetMember(L"beginBoundary"), tokens); - SetMember(tree->end, obj->GetMember(L"end"), tokens); - SetMember(tree->endBoundary, obj->GetMember(L"endBoundary"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->test, obj->GetMember(L"test"), tokens); - SetMember(tree->element, obj->GetMember(L"element"), tokens); - SetMember(tree->collection, obj->GetMember(L"collection"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->key, obj->GetMember(L"key"), tokens); - SetMember(tree->value, obj->GetMember(L"value"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->arguments, obj->GetMember(L"arguments"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->expression, obj->GetMember(L"expression"), tokens); - SetMember(tree->type, obj->GetMember(L"type"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->strategy, obj->GetMember(L"strategy"), tokens); - SetMember(tree->expression, obj->GetMember(L"expression"), tokens); - SetMember(tree->type, obj->GetMember(L"type"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->test, obj->GetMember(L"test"), tokens); - SetMember(tree->expression, obj->GetMember(L"expression"), tokens); - SetMember(tree->type, obj->GetMember(L"type"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->type, obj->GetMember(L"type"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->expression, obj->GetMember(L"expression"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->event, obj->GetMember(L"event"), tokens); - SetMember(tree->function, obj->GetMember(L"function"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->event, obj->GetMember(L"event"), tokens); - SetMember(tree->handler, obj->GetMember(L"handler"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->parent, obj->GetMember(L"parent"), tokens); - SetMember(tree->observeType, obj->GetMember(L"observeType"), tokens); - SetMember(tree->name, obj->GetMember(L"name"), tokens); - SetMember(tree->expression, obj->GetMember(L"expression"), tokens); - SetMember(tree->events, obj->GetMember(L"events"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->function, obj->GetMember(L"function"), tokens); - SetMember(tree->arguments, obj->GetMember(L"arguments"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->function, obj->GetMember(L"function"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->type, obj->GetMember(L"type"), tokens); - SetMember(tree->arguments, obj->GetMember(L"arguments"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->type, obj->GetMember(L"type"), tokens); - if(SetMember(tree->declarations, obj->GetMember(L"declarations"), tokens)) - { - SetDefaultClassMember(tree->declarations, tokens); - } - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->expandedExpression, obj->GetMember(L"expandedExpression"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->expression, obj->GetMember(L"expression"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - if(SetMember(tree->value, obj->GetMember(L"value"), tokens)) - { - UnescapeFormatString(tree->value, tokens); - } - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->name, obj->GetMember(L"name"), tokens); - SetMember(tree->statement, obj->GetMember(L"statement"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->type, obj->GetMember(L"type"), tokens); - SetMember(tree->expression, obj->GetMember(L"expression"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->strategy, obj->GetMember(L"strategy"), tokens); - SetMember(tree->expression, obj->GetMember(L"expression"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->name, obj->GetMember(L"name"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->fragments, obj->GetMember(L"fragments"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->items, obj->GetMember(L"items"), tokens); - } - - void Fill(vl::Ptr tree, vl::Ptr obj, const TokenList& tokens) - { - SetMember(tree->moduleType, obj->GetMember(L"moduleType"), tokens); - SetMember(tree->name, obj->GetMember(L"name"), tokens); - SetMember(tree->paths, obj->GetMember(L"paths"), tokens); - SetMember(tree->declarations, obj->GetMember(L"declarations"), tokens); - } - - vl::Ptr ConvertClass(vl::Ptr obj, const TokenList& tokens)override - { - if(obj->GetType()==L"ClassMember") - { - vl::Ptr tree = new WfClassMember; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - return tree; - } - else if(obj->GetType()==L"Attribute") - { - vl::Ptr tree = new WfAttribute; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - return tree; - } - else if(obj->GetType()==L"PredefinedType") - { - vl::Ptr tree = new WfPredefinedType; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"TopQualifiedType") - { - vl::Ptr tree = new WfTopQualifiedType; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"ReferenceType") - { - vl::Ptr tree = new WfReferenceType; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"RawPointerType") - { - vl::Ptr tree = new WfRawPointerType; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"SharedPointerType") - { - vl::Ptr tree = new WfSharedPointerType; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"NullableType") - { - vl::Ptr tree = new WfNullableType; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"EnumerableType") - { - vl::Ptr tree = new WfEnumerableType; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"MapType") - { - vl::Ptr tree = new WfMapType; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"ObservableListType") - { - vl::Ptr tree = new WfObservableListType; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"FunctionType") - { - vl::Ptr tree = new WfFunctionType; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"ChildType") - { - vl::Ptr tree = new WfChildType; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"NamespaceDeclaration") - { - vl::Ptr tree = new WfNamespaceDeclaration; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"FunctionArgument") - { - vl::Ptr tree = new WfFunctionArgument; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - return tree; - } - else if(obj->GetType()==L"FunctionDeclaration") - { - vl::Ptr tree = new WfFunctionDeclaration; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"VariableDeclaration") - { - vl::Ptr tree = new WfVariableDeclaration; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"EventDeclaration") - { - vl::Ptr tree = new WfEventDeclaration; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"PropertyDeclaration") - { - vl::Ptr tree = new WfPropertyDeclaration; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"BaseConstructorCall") - { - vl::Ptr tree = new WfBaseConstructorCall; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - return tree; - } - else if(obj->GetType()==L"ConstructorDeclaration") - { - vl::Ptr tree = new WfConstructorDeclaration; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"DestructorDeclaration") - { - vl::Ptr tree = new WfDestructorDeclaration; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"ClassDeclaration") - { - vl::Ptr tree = new WfClassDeclaration; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"EnumItemIntersection") - { - vl::Ptr tree = new WfEnumItemIntersection; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - return tree; - } - else if(obj->GetType()==L"EnumItem") - { - vl::Ptr tree = new WfEnumItem; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - return tree; - } - else if(obj->GetType()==L"EnumDeclaration") - { - vl::Ptr tree = new WfEnumDeclaration; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"StructMember") - { - vl::Ptr tree = new WfStructMember; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - return tree; - } - else if(obj->GetType()==L"StructDeclaration") - { - vl::Ptr tree = new WfStructDeclaration; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"AutoPropertyDeclaration") - { - vl::Ptr tree = new WfAutoPropertyDeclaration; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"CastResultInterfaceDeclaration") - { - vl::Ptr tree = new WfCastResultInterfaceDeclaration; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"BreakStatement") - { - vl::Ptr tree = new WfBreakStatement; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"ContinueStatement") - { - vl::Ptr tree = new WfContinueStatement; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"ReturnStatement") - { - vl::Ptr tree = new WfReturnStatement; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"DeleteStatement") - { - vl::Ptr tree = new WfDeleteStatement; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"RaiseExceptionStatement") - { - vl::Ptr tree = new WfRaiseExceptionStatement; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"IfStatement") - { - vl::Ptr tree = new WfIfStatement; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"WhileStatement") - { - vl::Ptr tree = new WfWhileStatement; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"TryStatement") - { - vl::Ptr tree = new WfTryStatement; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"BlockStatement") - { - vl::Ptr tree = new WfBlockStatement; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"VariableStatement") - { - vl::Ptr tree = new WfVariableStatement; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"ExpressionStatement") - { - vl::Ptr tree = new WfExpressionStatement; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"ForEachStatement") - { - vl::Ptr tree = new WfForEachStatement; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"SwitchCase") - { - vl::Ptr tree = new WfSwitchCase; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - return tree; - } - else if(obj->GetType()==L"SwitchStatement") - { - vl::Ptr tree = new WfSwitchStatement; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"CoProviderStatement") - { - vl::Ptr tree = new WfCoProviderStatement; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"CoPauseStatement") - { - vl::Ptr tree = new WfCoPauseStatement; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"CoOperatorStatement") - { - vl::Ptr tree = new WfCoOperatorStatement; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"ThisExpression") - { - vl::Ptr tree = new WfThisExpression; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"TopQualifiedExpression") - { - vl::Ptr tree = new WfTopQualifiedExpression; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"ReferenceExpression") - { - vl::Ptr tree = new WfReferenceExpression; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"OrderedNameExpression") - { - vl::Ptr tree = new WfOrderedNameExpression; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"OrderedLambdaExpression") - { - vl::Ptr tree = new WfOrderedLambdaExpression; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"MemberExpression") - { - vl::Ptr tree = new WfMemberExpression; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"ChildExpression") - { - vl::Ptr tree = new WfChildExpression; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"LiteralExpression") - { - vl::Ptr tree = new WfLiteralExpression; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"FloatingExpression") - { - vl::Ptr tree = new WfFloatingExpression; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"IntegerExpression") - { - vl::Ptr tree = new WfIntegerExpression; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"StringExpression") - { - vl::Ptr tree = new WfStringExpression; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"UnaryExpression") - { - vl::Ptr tree = new WfUnaryExpression; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"BinaryExpression") - { - vl::Ptr tree = new WfBinaryExpression; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"LetVariable") - { - vl::Ptr tree = new WfLetVariable; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - return tree; - } - else if(obj->GetType()==L"LetExpression") - { - vl::Ptr tree = new WfLetExpression; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"IfExpression") - { - vl::Ptr tree = new WfIfExpression; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"RangeExpression") - { - vl::Ptr tree = new WfRangeExpression; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"SetTestingExpression") - { - vl::Ptr tree = new WfSetTestingExpression; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"ConstructorArgument") - { - vl::Ptr tree = new WfConstructorArgument; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - return tree; - } - else if(obj->GetType()==L"ConstructorExpression") - { - vl::Ptr tree = new WfConstructorExpression; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"InferExpression") - { - vl::Ptr tree = new WfInferExpression; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"TypeCastingExpression") - { - vl::Ptr tree = new WfTypeCastingExpression; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"TypeTestingExpression") - { - vl::Ptr tree = new WfTypeTestingExpression; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"TypeOfTypeExpression") - { - vl::Ptr tree = new WfTypeOfTypeExpression; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"TypeOfExpressionExpression") - { - vl::Ptr tree = new WfTypeOfExpressionExpression; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"AttachEventExpression") - { - vl::Ptr tree = new WfAttachEventExpression; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"DetachEventExpression") - { - vl::Ptr tree = new WfDetachEventExpression; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"ObserveExpression") - { - vl::Ptr tree = new WfObserveExpression; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"CallExpression") - { - vl::Ptr tree = new WfCallExpression; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"FunctionExpression") - { - vl::Ptr tree = new WfFunctionExpression; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"NewClassExpression") - { - vl::Ptr tree = new WfNewClassExpression; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"NewInterfaceExpression") - { - vl::Ptr tree = new WfNewInterfaceExpression; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"BindExpression") - { - vl::Ptr tree = new WfBindExpression; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"FormatExpression") - { - vl::Ptr tree = new WfFormatExpression; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"NewCoroutineExpression") - { - vl::Ptr tree = new WfNewCoroutineExpression; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"MixinCastExpression") - { - vl::Ptr tree = new WfMixinCastExpression; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"ExpectedTypeCastExpression") - { - vl::Ptr tree = new WfExpectedTypeCastExpression; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"ModuleUsingNameFragment") - { - vl::Ptr tree = new WfModuleUsingNameFragment; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"ModuleUsingWildCardFragment") - { - vl::Ptr tree = new WfModuleUsingWildCardFragment; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - Fill(tree.Cast(), obj, tokens); - return tree; - } - else if(obj->GetType()==L"ModuleUsingItem") - { - vl::Ptr tree = new WfModuleUsingItem; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - return tree; - } - else if(obj->GetType()==L"ModuleUsingPath") - { - vl::Ptr tree = new WfModuleUsingPath; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - return tree; - } - else if(obj->GetType()==L"Module") - { - vl::Ptr tree = new WfModule; - vl::collections::CopyFrom(tree->creatorRules, obj->GetCreatorRules()); - Fill(tree, obj, tokens); - return tree; - } - else - return 0; - } - }; - - vl::Ptr WfConvertParsingTreeNode(vl::Ptr node, const vl::collections::List& tokens) - { - WfTreeConverter converter; - vl::Ptr tree; - converter.SetMember(tree, node, tokens); - return tree; - } - -/*********************************************************************** -Parsing Tree Conversion Implementation -***********************************************************************/ - - vl::Ptr WfClassMember::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfAttribute::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfPredefinedType::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfTopQualifiedType::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfReferenceType::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfRawPointerType::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfSharedPointerType::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfNullableType::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfEnumerableType::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfMapType::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfObservableListType::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfFunctionType::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfChildType::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfNamespaceDeclaration::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfFunctionArgument::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfFunctionDeclaration::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfVariableDeclaration::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfEventDeclaration::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfPropertyDeclaration::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfBaseConstructorCall::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfConstructorDeclaration::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfDestructorDeclaration::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfClassDeclaration::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfEnumItemIntersection::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfEnumItem::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfEnumDeclaration::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfStructMember::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfStructDeclaration::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfAutoPropertyDeclaration::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfCastResultInterfaceDeclaration::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfBreakStatement::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfContinueStatement::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfReturnStatement::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfDeleteStatement::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfRaiseExceptionStatement::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfIfStatement::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfWhileStatement::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfTryStatement::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfBlockStatement::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfVariableStatement::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfExpressionStatement::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfForEachStatement::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfSwitchCase::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfSwitchStatement::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfCoProviderStatement::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfCoPauseStatement::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfCoOperatorStatement::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfThisExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfTopQualifiedExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfReferenceExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfOrderedNameExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfOrderedLambdaExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfMemberExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfChildExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfLiteralExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfFloatingExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfIntegerExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfStringExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfUnaryExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfBinaryExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfLetVariable::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfLetExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfIfExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfRangeExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfSetTestingExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfConstructorArgument::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfConstructorExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfInferExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfTypeCastingExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfTypeTestingExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfTypeOfTypeExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfTypeOfExpressionExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfAttachEventExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfDetachEventExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfObserveExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfCallExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfFunctionExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfNewClassExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfNewInterfaceExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfBindExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfFormatExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfNewCoroutineExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfMixinCastExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfExpectedTypeCastExpression::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfModuleUsingNameFragment::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfModuleUsingWildCardFragment::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfModuleUsingItem::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfModuleUsingPath::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - - vl::Ptr WfModule::Convert(vl::Ptr node, const vl::collections::List& tokens) - { - return WfConvertParsingTreeNode(node, tokens).Cast(); - } - -/*********************************************************************** -Parser Function -***********************************************************************/ - - vl::Ptr WfParseCoProviderStatementAsParsingTreeNode(const vl::WString& input, vl::Ptr table, vl::collections::List>& errors, vl::vint codeIndex) - { - vl::parsing::tabling::ParsingState state(input, table, codeIndex); - state.Reset(L"_CoProvider"); - vl::Ptr parser=vl::parsing::tabling::CreateStrictParser(table); - vl::Ptr node=parser->Parse(state, errors); - return node; - } - - vl::Ptr WfParseCoProviderStatementAsParsingTreeNode(const vl::WString& input, vl::Ptr table, vl::vint codeIndex) - { - vl::collections::List> errors; - return WfParseCoProviderStatementAsParsingTreeNode(input, table, errors, codeIndex); - } - - vl::Ptr WfParseCoProviderStatement(const vl::WString& input, vl::Ptr table, vl::collections::List>& errors, vl::vint codeIndex) - { - vl::parsing::tabling::ParsingState state(input, table, codeIndex); - state.Reset(L"_CoProvider"); - vl::Ptr parser=vl::parsing::tabling::CreateStrictParser(table); - vl::Ptr node=parser->Parse(state, errors); - if(node && errors.Count()==0) - { - return WfConvertParsingTreeNode(node, state.GetTokens()).Cast(); - } - return 0; - } - - vl::Ptr WfParseCoProviderStatement(const vl::WString& input, vl::Ptr table, vl::vint codeIndex) - { - vl::collections::List> errors; - return WfParseCoProviderStatement(input, table, errors, codeIndex); - } - - vl::Ptr WfParseDeclarationAsParsingTreeNode(const vl::WString& input, vl::Ptr table, vl::collections::List>& errors, vl::vint codeIndex) - { - vl::parsing::tabling::ParsingState state(input, table, codeIndex); - state.Reset(L"_Declaration"); - vl::Ptr parser=vl::parsing::tabling::CreateStrictParser(table); - vl::Ptr node=parser->Parse(state, errors); - return node; - } - - vl::Ptr WfParseDeclarationAsParsingTreeNode(const vl::WString& input, vl::Ptr table, vl::vint codeIndex) - { - vl::collections::List> errors; - return WfParseDeclarationAsParsingTreeNode(input, table, errors, codeIndex); - } - - vl::Ptr WfParseDeclaration(const vl::WString& input, vl::Ptr table, vl::collections::List>& errors, vl::vint codeIndex) - { - vl::parsing::tabling::ParsingState state(input, table, codeIndex); - state.Reset(L"_Declaration"); - vl::Ptr parser=vl::parsing::tabling::CreateStrictParser(table); - vl::Ptr node=parser->Parse(state, errors); - if(node && errors.Count()==0) - { - return WfConvertParsingTreeNode(node, state.GetTokens()).Cast(); - } - return 0; - } - - vl::Ptr WfParseDeclaration(const vl::WString& input, vl::Ptr table, vl::vint codeIndex) - { - vl::collections::List> errors; - return WfParseDeclaration(input, table, errors, codeIndex); - } - - vl::Ptr WfParseExpressionAsParsingTreeNode(const vl::WString& input, vl::Ptr table, vl::collections::List>& errors, vl::vint codeIndex) - { - vl::parsing::tabling::ParsingState state(input, table, codeIndex); - state.Reset(L"_Expression"); - vl::Ptr parser=vl::parsing::tabling::CreateStrictParser(table); - vl::Ptr node=parser->Parse(state, errors); - return node; - } - - vl::Ptr WfParseExpressionAsParsingTreeNode(const vl::WString& input, vl::Ptr table, vl::vint codeIndex) - { - vl::collections::List> errors; - return WfParseExpressionAsParsingTreeNode(input, table, errors, codeIndex); - } - - vl::Ptr WfParseExpression(const vl::WString& input, vl::Ptr table, vl::collections::List>& errors, vl::vint codeIndex) - { - vl::parsing::tabling::ParsingState state(input, table, codeIndex); - state.Reset(L"_Expression"); - vl::Ptr parser=vl::parsing::tabling::CreateStrictParser(table); - vl::Ptr node=parser->Parse(state, errors); - if(node && errors.Count()==0) - { - return WfConvertParsingTreeNode(node, state.GetTokens()).Cast(); - } - return 0; - } - - vl::Ptr WfParseExpression(const vl::WString& input, vl::Ptr table, vl::vint codeIndex) - { - vl::collections::List> errors; - return WfParseExpression(input, table, errors, codeIndex); - } - - vl::Ptr WfParseModuleAsParsingTreeNode(const vl::WString& input, vl::Ptr table, vl::collections::List>& errors, vl::vint codeIndex) - { - vl::parsing::tabling::ParsingState state(input, table, codeIndex); - state.Reset(L"_Module"); - vl::Ptr parser=vl::parsing::tabling::CreateStrictParser(table); - vl::Ptr node=parser->Parse(state, errors); - return node; - } - - vl::Ptr WfParseModuleAsParsingTreeNode(const vl::WString& input, vl::Ptr table, vl::vint codeIndex) - { - vl::collections::List> errors; - return WfParseModuleAsParsingTreeNode(input, table, errors, codeIndex); - } - - vl::Ptr WfParseModule(const vl::WString& input, vl::Ptr table, vl::collections::List>& errors, vl::vint codeIndex) - { - vl::parsing::tabling::ParsingState state(input, table, codeIndex); - state.Reset(L"_Module"); - vl::Ptr parser=vl::parsing::tabling::CreateStrictParser(table); - vl::Ptr node=parser->Parse(state, errors); - if(node && errors.Count()==0) - { - return WfConvertParsingTreeNode(node, state.GetTokens()).Cast(); - } - return 0; - } - - vl::Ptr WfParseModule(const vl::WString& input, vl::Ptr table, vl::vint codeIndex) - { - vl::collections::List> errors; - return WfParseModule(input, table, errors, codeIndex); - } - - vl::Ptr WfParseStatementAsParsingTreeNode(const vl::WString& input, vl::Ptr table, vl::collections::List>& errors, vl::vint codeIndex) - { - vl::parsing::tabling::ParsingState state(input, table, codeIndex); - state.Reset(L"_Statement"); - vl::Ptr parser=vl::parsing::tabling::CreateStrictParser(table); - vl::Ptr node=parser->Parse(state, errors); - return node; - } - - vl::Ptr WfParseStatementAsParsingTreeNode(const vl::WString& input, vl::Ptr table, vl::vint codeIndex) - { - vl::collections::List> errors; - return WfParseStatementAsParsingTreeNode(input, table, errors, codeIndex); - } - - vl::Ptr WfParseStatement(const vl::WString& input, vl::Ptr table, vl::collections::List>& errors, vl::vint codeIndex) - { - vl::parsing::tabling::ParsingState state(input, table, codeIndex); - state.Reset(L"_Statement"); - vl::Ptr parser=vl::parsing::tabling::CreateStrictParser(table); - vl::Ptr node=parser->Parse(state, errors); - if(node && errors.Count()==0) - { - return WfConvertParsingTreeNode(node, state.GetTokens()).Cast(); - } - return 0; - } - - vl::Ptr WfParseStatement(const vl::WString& input, vl::Ptr table, vl::vint codeIndex) - { - vl::collections::List> errors; - return WfParseStatement(input, table, errors, codeIndex); - } - - vl::Ptr WfParseTypeAsParsingTreeNode(const vl::WString& input, vl::Ptr table, vl::collections::List>& errors, vl::vint codeIndex) - { - vl::parsing::tabling::ParsingState state(input, table, codeIndex); - state.Reset(L"_Type"); - vl::Ptr parser=vl::parsing::tabling::CreateStrictParser(table); - vl::Ptr node=parser->Parse(state, errors); - return node; - } - - vl::Ptr WfParseTypeAsParsingTreeNode(const vl::WString& input, vl::Ptr table, vl::vint codeIndex) - { - vl::collections::List> errors; - return WfParseTypeAsParsingTreeNode(input, table, errors, codeIndex); - } - - vl::Ptr WfParseType(const vl::WString& input, vl::Ptr table, vl::collections::List>& errors, vl::vint codeIndex) - { - vl::parsing::tabling::ParsingState state(input, table, codeIndex); - state.Reset(L"_Type"); - vl::Ptr parser=vl::parsing::tabling::CreateStrictParser(table); - vl::Ptr node=parser->Parse(state, errors); - if(node && errors.Count()==0) - { - return WfConvertParsingTreeNode(node, state.GetTokens()).Cast(); - } - return 0; - } - - vl::Ptr WfParseType(const vl::WString& input, vl::Ptr table, vl::vint codeIndex) - { - vl::collections::List> errors; - return WfParseType(input, table, errors, codeIndex); - } - -/*********************************************************************** -Table Generation -***********************************************************************/ - - vl::Ptr WfLoadTable() - { - vl::stream::MemoryStream stream; - WfGetParserBuffer(stream); - vl::Ptr table=new vl::parsing::tabling::ParsingTable(stream); - table->Initialize(); - return table; - } - - } -} - - /*********************************************************************** .\EXPRESSION\WFEXPRESSION_TRAVERSE.CPP ***********************************************************************/ @@ -10244,7 +9110,12 @@ ExpressionVisitor } } - void ExpressionVisitor::Visit(WfVirtualExpression* node) + void ExpressionVisitor::Visit(WfVirtualCfeExpression* node) + { + Dispatch(node); + } + + void ExpressionVisitor::Visit(WfVirtualCseExpression* node) { Dispatch(node); } @@ -10303,6 +9174,10 @@ StatementVisitor { } + void StatementVisitor::Traverse(WfGotoStatement* node) + { + } + void StatementVisitor::Traverse(WfVariableStatement* node) { } @@ -10443,6 +9318,15 @@ StatementVisitor { VisitField(listItem.Obj()); } + Traverse(node->endLabel); + } + + void StatementVisitor::Visit(WfGotoStatement* node) + { + Traverse(static_cast(node)); + Traverse(static_cast(node)); + Traverse(static_cast(node)); + Traverse(node->label); } void StatementVisitor::Visit(WfVariableStatement* node) @@ -10461,7 +9345,7 @@ StatementVisitor VisitField(node->expression.Obj()); } - void StatementVisitor::Visit(WfVirtualStatement* node) + void StatementVisitor::Visit(WfVirtualCseStatement* node) { Dispatch(node); } @@ -10471,6 +9355,11 @@ StatementVisitor Dispatch(node); } + void StatementVisitor::Visit(WfStateMachineStatement* node) + { + Dispatch(node); + } + /*********************************************************************** DeclarationVisitor ***********************************************************************/ @@ -10817,52 +9706,57 @@ DeclarationVisitor VisitField(node->classMember.Obj()); } - void DeclarationVisitor::Visit(WfVirtualDeclaration* node) + void DeclarationVisitor::Visit(WfVirtualCfeDeclaration* node) + { + Dispatch(node); + } + + void DeclarationVisitor::Visit(WfVirtualCseDeclaration* node) { Dispatch(node); } /*********************************************************************** -VirtualDeclarationVisitor +VirtualCfeDeclarationVisitor ***********************************************************************/ // Traverse ------------------------------------------ - void VirtualDeclarationVisitor::Traverse(vl::parsing::ParsingToken& token) + void VirtualCfeDeclarationVisitor::Traverse(vl::parsing::ParsingToken& token) { } - void VirtualDeclarationVisitor::Traverse(vl::parsing::ParsingTreeCustomBase* node) + void VirtualCfeDeclarationVisitor::Traverse(vl::parsing::ParsingTreeCustomBase* node) { } - void VirtualDeclarationVisitor::Traverse(WfAutoPropertyDeclaration* node) + void VirtualCfeDeclarationVisitor::Traverse(WfAutoPropertyDeclaration* node) { } - void VirtualDeclarationVisitor::Traverse(WfVirtualDeclaration* node) + void VirtualCfeDeclarationVisitor::Traverse(WfVirtualCfeDeclaration* node) { } - void VirtualDeclarationVisitor::Traverse(WfDeclaration* node) + void VirtualCfeDeclarationVisitor::Traverse(WfDeclaration* node) { } - void VirtualDeclarationVisitor::Traverse(WfAttribute* node) + void VirtualCfeDeclarationVisitor::Traverse(WfAttribute* node) { } - void VirtualDeclarationVisitor::Traverse(WfClassMember* node) + void VirtualCfeDeclarationVisitor::Traverse(WfClassMember* node) { } - void VirtualDeclarationVisitor::Traverse(WfCastResultInterfaceDeclaration* node) + void VirtualCfeDeclarationVisitor::Traverse(WfCastResultInterfaceDeclaration* node) { } // VisitField ---------------------------------------- - void VirtualDeclarationVisitor::VisitField(WfAttribute* node) + void VirtualCfeDeclarationVisitor::VisitField(WfAttribute* node) { if (!node) return; Traverse(static_cast(node)); @@ -10872,7 +9766,7 @@ VirtualDeclarationVisitor VisitField(node->value.Obj()); } - void VirtualDeclarationVisitor::VisitField(WfClassMember* node) + void VirtualCfeDeclarationVisitor::VisitField(WfClassMember* node) { if (!node) return; Traverse(static_cast(node)); @@ -10881,10 +9775,10 @@ VirtualDeclarationVisitor // Visitor Members ----------------------------------- - void VirtualDeclarationVisitor::Visit(WfAutoPropertyDeclaration* node) + void VirtualCfeDeclarationVisitor::Visit(WfAutoPropertyDeclaration* node) { Traverse(static_cast(node)); - Traverse(static_cast(node)); + Traverse(static_cast(node)); Traverse(static_cast(node)); Traverse(static_cast(node)); VisitField(node->type.Obj()); @@ -10901,10 +9795,10 @@ VirtualDeclarationVisitor VisitField(node->classMember.Obj()); } - void VirtualDeclarationVisitor::Visit(WfCastResultInterfaceDeclaration* node) + void VirtualCfeDeclarationVisitor::Visit(WfCastResultInterfaceDeclaration* node) { Traverse(static_cast(node)); - Traverse(static_cast(node)); + Traverse(static_cast(node)); Traverse(static_cast(node)); Traverse(static_cast(node)); VisitField(node->baseType.Obj()); @@ -10922,46 +9816,177 @@ VirtualDeclarationVisitor } /*********************************************************************** -VirtualStatementVisitor +VirtualCseDeclarationVisitor ***********************************************************************/ // Traverse ------------------------------------------ - void VirtualStatementVisitor::Traverse(vl::parsing::ParsingToken& token) + void VirtualCseDeclarationVisitor::Traverse(vl::parsing::ParsingToken& token) { } - void VirtualStatementVisitor::Traverse(vl::parsing::ParsingTreeCustomBase* node) + void VirtualCseDeclarationVisitor::Traverse(vl::parsing::ParsingTreeCustomBase* node) { } - void VirtualStatementVisitor::Traverse(WfForEachStatement* node) + void VirtualCseDeclarationVisitor::Traverse(WfStateMachineDeclaration* node) { } - void VirtualStatementVisitor::Traverse(WfVirtualStatement* node) + void VirtualCseDeclarationVisitor::Traverse(WfVirtualCseDeclaration* node) { } - void VirtualStatementVisitor::Traverse(WfStatement* node) + void VirtualCseDeclarationVisitor::Traverse(WfDeclaration* node) { } - void VirtualStatementVisitor::Traverse(WfSwitchStatement* node) + void VirtualCseDeclarationVisitor::Traverse(WfAttribute* node) { } - void VirtualStatementVisitor::Traverse(WfSwitchCase* node) + void VirtualCseDeclarationVisitor::Traverse(WfClassMember* node) { } - void VirtualStatementVisitor::Traverse(WfCoProviderStatement* node) + void VirtualCseDeclarationVisitor::Traverse(WfStateInput* node) + { + } + + void VirtualCseDeclarationVisitor::Traverse(WfFunctionArgument* node) + { + } + + void VirtualCseDeclarationVisitor::Traverse(WfStateDeclaration* node) { } // VisitField ---------------------------------------- - void VirtualStatementVisitor::VisitField(WfSwitchCase* node) + void VirtualCseDeclarationVisitor::VisitField(WfAttribute* node) + { + if (!node) return; + Traverse(static_cast(node)); + Traverse(static_cast(node)); + Traverse(node->category); + Traverse(node->name); + VisitField(node->value.Obj()); + } + + void VirtualCseDeclarationVisitor::VisitField(WfClassMember* node) + { + if (!node) return; + Traverse(static_cast(node)); + Traverse(static_cast(node)); + } + + void VirtualCseDeclarationVisitor::VisitField(WfStateInput* node) + { + if (!node) return; + Traverse(static_cast(node)); + Traverse(static_cast(node)); + Traverse(node->name); + FOREACH(vl::Ptr, listItem, node->arguments) + { + VisitField(listItem.Obj()); + } + } + + void VirtualCseDeclarationVisitor::VisitField(WfFunctionArgument* node) + { + if (!node) return; + Traverse(static_cast(node)); + Traverse(static_cast(node)); + FOREACH(vl::Ptr, listItem, node->attributes) + { + VisitField(listItem.Obj()); + } + Traverse(node->name); + VisitField(node->type.Obj()); + } + + void VirtualCseDeclarationVisitor::VisitField(WfStateDeclaration* node) + { + if (!node) return; + Traverse(static_cast(node)); + Traverse(static_cast(node)); + Traverse(node->name); + FOREACH(vl::Ptr, listItem, node->arguments) + { + VisitField(listItem.Obj()); + } + VisitField(node->statement.Obj()); + } + + // Visitor Members ----------------------------------- + + void VirtualCseDeclarationVisitor::Visit(WfStateMachineDeclaration* node) + { + Traverse(static_cast(node)); + Traverse(static_cast(node)); + Traverse(static_cast(node)); + Traverse(static_cast(node)); + FOREACH(vl::Ptr, listItem, node->inputs) + { + VisitField(listItem.Obj()); + } + FOREACH(vl::Ptr, listItem, node->states) + { + VisitField(listItem.Obj()); + } + FOREACH(vl::Ptr, listItem, node->expandedDeclarations) + { + VisitField(listItem.Obj()); + } + FOREACH(vl::Ptr, listItem, node->attributes) + { + VisitField(listItem.Obj()); + } + Traverse(node->name); + VisitField(node->classMember.Obj()); + } + +/*********************************************************************** +VirtualCseStatementVisitor +***********************************************************************/ + + // Traverse ------------------------------------------ + + void VirtualCseStatementVisitor::Traverse(vl::parsing::ParsingToken& token) + { + } + + void VirtualCseStatementVisitor::Traverse(vl::parsing::ParsingTreeCustomBase* node) + { + } + + void VirtualCseStatementVisitor::Traverse(WfForEachStatement* node) + { + } + + void VirtualCseStatementVisitor::Traverse(WfVirtualCseStatement* node) + { + } + + void VirtualCseStatementVisitor::Traverse(WfStatement* node) + { + } + + void VirtualCseStatementVisitor::Traverse(WfSwitchStatement* node) + { + } + + void VirtualCseStatementVisitor::Traverse(WfSwitchCase* node) + { + } + + void VirtualCseStatementVisitor::Traverse(WfCoProviderStatement* node) + { + } + + // VisitField ---------------------------------------- + + void VirtualCseStatementVisitor::VisitField(WfSwitchCase* node) { if (!node) return; Traverse(static_cast(node)); @@ -10972,10 +9997,10 @@ VirtualStatementVisitor // Visitor Members ----------------------------------- - void VirtualStatementVisitor::Visit(WfForEachStatement* node) + void VirtualCseStatementVisitor::Visit(WfForEachStatement* node) { Traverse(static_cast(node)); - Traverse(static_cast(node)); + Traverse(static_cast(node)); Traverse(static_cast(node)); Traverse(static_cast(node)); Traverse(node->name); @@ -10984,10 +10009,10 @@ VirtualStatementVisitor VisitField(node->expandedStatement.Obj()); } - void VirtualStatementVisitor::Visit(WfSwitchStatement* node) + void VirtualCseStatementVisitor::Visit(WfSwitchStatement* node) { Traverse(static_cast(node)); - Traverse(static_cast(node)); + Traverse(static_cast(node)); Traverse(static_cast(node)); Traverse(static_cast(node)); VisitField(node->expression.Obj()); @@ -10999,10 +10024,10 @@ VirtualStatementVisitor VisitField(node->expandedStatement.Obj()); } - void VirtualStatementVisitor::Visit(WfCoProviderStatement* node) + void VirtualCseStatementVisitor::Visit(WfCoProviderStatement* node) { Traverse(static_cast(node)); - Traverse(static_cast(node)); + Traverse(static_cast(node)); Traverse(static_cast(node)); Traverse(static_cast(node)); Traverse(node->name); @@ -11066,73 +10091,189 @@ CoroutineStatementVisitor } /*********************************************************************** -VirtualExpressionVisitor +StateMachineStatementVisitor ***********************************************************************/ // Traverse ------------------------------------------ - void VirtualExpressionVisitor::Traverse(vl::parsing::ParsingToken& token) + void StateMachineStatementVisitor::Traverse(vl::parsing::ParsingToken& token) { } - void VirtualExpressionVisitor::Traverse(vl::parsing::ParsingTreeCustomBase* node) + void StateMachineStatementVisitor::Traverse(vl::parsing::ParsingTreeCustomBase* node) { } - void VirtualExpressionVisitor::Traverse(WfBindExpression* node) + void StateMachineStatementVisitor::Traverse(WfStateSwitchStatement* node) { } - void VirtualExpressionVisitor::Traverse(WfVirtualExpression* node) + void StateMachineStatementVisitor::Traverse(WfStateMachineStatement* node) { } - void VirtualExpressionVisitor::Traverse(WfExpression* node) + void StateMachineStatementVisitor::Traverse(WfStatement* node) { } - void VirtualExpressionVisitor::Traverse(WfFormatExpression* node) + void StateMachineStatementVisitor::Traverse(WfStateSwitchCase* node) { } - void VirtualExpressionVisitor::Traverse(WfNewCoroutineExpression* node) + void StateMachineStatementVisitor::Traverse(WfStateSwitchArgument* node) { } - void VirtualExpressionVisitor::Traverse(WfMixinCastExpression* node) + void StateMachineStatementVisitor::Traverse(WfStateInvokeStatement* node) { } - void VirtualExpressionVisitor::Traverse(WfExpectedTypeCastExpression* node) + // VisitField ---------------------------------------- + + void StateMachineStatementVisitor::VisitField(WfStateSwitchCase* node) + { + if (!node) return; + Traverse(static_cast(node)); + Traverse(static_cast(node)); + Traverse(node->name); + FOREACH(vl::Ptr, listItem, node->arguments) + { + VisitField(listItem.Obj()); + } + VisitField(node->statement.Obj()); + } + + void StateMachineStatementVisitor::VisitField(WfStateSwitchArgument* node) + { + if (!node) return; + Traverse(static_cast(node)); + Traverse(static_cast(node)); + Traverse(node->name); + } + + // Visitor Members ----------------------------------- + + void StateMachineStatementVisitor::Visit(WfStateSwitchStatement* node) + { + Traverse(static_cast(node)); + Traverse(static_cast(node)); + Traverse(static_cast(node)); + Traverse(static_cast(node)); + FOREACH(vl::Ptr, listItem, node->caseBranches) + { + VisitField(listItem.Obj()); + } + } + + void StateMachineStatementVisitor::Visit(WfStateInvokeStatement* node) + { + Traverse(static_cast(node)); + Traverse(static_cast(node)); + Traverse(static_cast(node)); + Traverse(static_cast(node)); + Traverse(node->name); + FOREACH(vl::Ptr, listItem, node->arguments) + { + VisitField(listItem.Obj()); + } + } + +/*********************************************************************** +VirtualCfeExpressionVisitor +***********************************************************************/ + + // Traverse ------------------------------------------ + + void VirtualCfeExpressionVisitor::Traverse(vl::parsing::ParsingToken& token) + { + } + + void VirtualCfeExpressionVisitor::Traverse(vl::parsing::ParsingTreeCustomBase* node) + { + } + + void VirtualCfeExpressionVisitor::Traverse(WfFormatExpression* node) + { + } + + void VirtualCfeExpressionVisitor::Traverse(WfVirtualCfeExpression* node) + { + } + + void VirtualCfeExpressionVisitor::Traverse(WfExpression* node) { } // Visitor Members ----------------------------------- - void VirtualExpressionVisitor::Visit(WfBindExpression* node) - { - Traverse(static_cast(node)); - Traverse(static_cast(node)); - Traverse(static_cast(node)); - Traverse(static_cast(node)); - VisitField(node->expression.Obj()); - VisitField(node->expandedExpression.Obj()); - } - - void VirtualExpressionVisitor::Visit(WfFormatExpression* node) + void VirtualCfeExpressionVisitor::Visit(WfFormatExpression* node) { Traverse(static_cast(node)); - Traverse(static_cast(node)); + Traverse(static_cast(node)); Traverse(static_cast(node)); Traverse(static_cast(node)); Traverse(node->value); VisitField(node->expandedExpression.Obj()); } - void VirtualExpressionVisitor::Visit(WfNewCoroutineExpression* node) +/*********************************************************************** +VirtualCseExpressionVisitor +***********************************************************************/ + + // Traverse ------------------------------------------ + + void VirtualCseExpressionVisitor::Traverse(vl::parsing::ParsingToken& token) + { + } + + void VirtualCseExpressionVisitor::Traverse(vl::parsing::ParsingTreeCustomBase* node) + { + } + + void VirtualCseExpressionVisitor::Traverse(WfBindExpression* node) + { + } + + void VirtualCseExpressionVisitor::Traverse(WfVirtualCseExpression* node) + { + } + + void VirtualCseExpressionVisitor::Traverse(WfExpression* node) + { + } + + void VirtualCseExpressionVisitor::Traverse(WfNewCoroutineExpression* node) + { + } + + void VirtualCseExpressionVisitor::Traverse(WfMixinCastExpression* node) + { + } + + void VirtualCseExpressionVisitor::Traverse(WfExpectedTypeCastExpression* node) + { + } + + void VirtualCseExpressionVisitor::Traverse(WfCoOperatorExpression* node) + { + } + + // Visitor Members ----------------------------------- + + void VirtualCseExpressionVisitor::Visit(WfBindExpression* node) + { + Traverse(static_cast(node)); + Traverse(static_cast(node)); + Traverse(static_cast(node)); + Traverse(static_cast(node)); + VisitField(node->expression.Obj()); + VisitField(node->expandedExpression.Obj()); + } + + void VirtualCseExpressionVisitor::Visit(WfNewCoroutineExpression* node) { Traverse(static_cast(node)); - Traverse(static_cast(node)); + Traverse(static_cast(node)); Traverse(static_cast(node)); Traverse(static_cast(node)); Traverse(node->name); @@ -11140,10 +10281,10 @@ VirtualExpressionVisitor VisitField(node->expandedExpression.Obj()); } - void VirtualExpressionVisitor::Visit(WfMixinCastExpression* node) + void VirtualCseExpressionVisitor::Visit(WfMixinCastExpression* node) { Traverse(static_cast(node)); - Traverse(static_cast(node)); + Traverse(static_cast(node)); Traverse(static_cast(node)); Traverse(static_cast(node)); VisitField(node->type.Obj()); @@ -11151,16 +10292,26 @@ VirtualExpressionVisitor VisitField(node->expandedExpression.Obj()); } - void VirtualExpressionVisitor::Visit(WfExpectedTypeCastExpression* node) + void VirtualCseExpressionVisitor::Visit(WfExpectedTypeCastExpression* node) { Traverse(static_cast(node)); - Traverse(static_cast(node)); + Traverse(static_cast(node)); Traverse(static_cast(node)); Traverse(static_cast(node)); VisitField(node->expression.Obj()); VisitField(node->expandedExpression.Obj()); } + void VirtualCseExpressionVisitor::Visit(WfCoOperatorExpression* node) + { + Traverse(static_cast(node)); + Traverse(static_cast(node)); + Traverse(static_cast(node)); + Traverse(static_cast(node)); + Traverse(node->name); + VisitField(node->expandedExpression.Obj()); + } + /*********************************************************************** ModuleUsingFragmentVisitor ***********************************************************************/ @@ -11303,14 +10454,19 @@ ModuleVisitor // Dispatch (virtual) -------------------------------- - void ModuleVisitor::Dispatch(WfVirtualExpression* node) + void ModuleVisitor::Dispatch(WfVirtualCfeExpression* node) { - node->Accept(static_cast(this)); + node->Accept(static_cast(this)); } - void ModuleVisitor::Dispatch(WfVirtualStatement* node) + void ModuleVisitor::Dispatch(WfVirtualCseExpression* node) { - node->Accept(static_cast(this)); + node->Accept(static_cast(this)); + } + + void ModuleVisitor::Dispatch(WfVirtualCseStatement* node) + { + node->Accept(static_cast(this)); } void ModuleVisitor::Dispatch(WfCoroutineStatement* node) @@ -11318,9 +10474,2400 @@ ModuleVisitor node->Accept(static_cast(this)); } - void ModuleVisitor::Dispatch(WfVirtualDeclaration* node) + void ModuleVisitor::Dispatch(WfStateMachineStatement* node) + { + node->Accept(static_cast(this)); + } + + void ModuleVisitor::Dispatch(WfVirtualCfeDeclaration* node) + { + node->Accept(static_cast(this)); + } + + void ModuleVisitor::Dispatch(WfVirtualCseDeclaration* node) + { + node->Accept(static_cast(this)); + } + } + } +} + + +/*********************************************************************** +.\EXPRESSION\WFEXPRESSION.CPP +***********************************************************************/ + +namespace vl +{ + namespace workflow + { + using namespace stream; + using namespace collections; + using namespace parsing; + +/*********************************************************************** +Unescaping Functions +***********************************************************************/ + + void SetDefaultClassMember(vl::collections::List>& value, const vl::collections::List& tokens) + { + FOREACH(Ptr, decl, value) + { + if (!decl->classMember) + { + decl->classMember = MakePtr(); + decl->classMember->codeRange = decl->codeRange; + decl->classMember->kind = WfClassMemberKind::Normal; + } + } + } + + void UnescapeStringInternal(vl::parsing::ParsingToken& value, bool formatString) + { + MemoryStream memoryStream; + { + WString input = formatString ? value.value.Sub(2, value.value.Length() - 3) : value.value.Sub(1, value.value.Length() - 2); + const wchar_t* reading = input.Buffer(); + StreamWriter writer(memoryStream); + + while (wchar_t c = *reading++) + { + if (c == L'\\') + { + switch (wchar_t e = *reading++) + { + case L'r': + writer.WriteChar('\r'); + break; + case L'n': + writer.WriteChar('\n'); + break; + case L't': + writer.WriteChar('\t'); + break; + default: + writer.WriteChar(e); + } + } + else + { + writer.WriteChar(c); + } + } + } + + memoryStream.SeekFromBegin(0); + { + StreamReader reader(memoryStream); + value.value = reader.ReadToEnd(); + } + } + + void UnescapeFormatString(vl::parsing::ParsingToken& value, const vl::collections::List& tokens) + { + UnescapeStringInternal(value, true); + } + + void UnescapeString(vl::parsing::ParsingToken& value, const vl::collections::List& tokens) + { + UnescapeStringInternal(value, false); + } + + void EscapeString(const WString& text, ParsingWriter& writer) + { + writer.WriteChar(L'\"'); + const wchar_t* reading = text.Buffer(); + while (wchar_t c = *reading++) + { + switch (c) + { + case '\r': + writer.WriteString(L"\\r"); + break; + case '\n': + writer.WriteString(L"\\n"); + break; + case '\t': + writer.WriteString(L"\\t"); + break; + case '\"': + writer.WriteString(L"\\\""); + break; + case '\\': + writer.WriteString(L"\\\\"); + break; + default: + writer.WriteChar(c); + } + } + writer.WriteChar(L'\"'); + } + +/*********************************************************************** +Print (Type) +***********************************************************************/ + + class PrintTypeVisitor : public Object, public WfType::IVisitor + { + public: + WString indent; + ParsingWriter& writer; + + PrintTypeVisitor(const WString& _indent, ParsingWriter& _writer) + :indent(_indent), writer(_writer) + { + } + + void Visit(WfPredefinedType* node)override + { + writer.BeforePrint(node); + switch (node->name) + { + case WfPredefinedTypeName::Void: + writer.WriteString(L"void"); + break; + case WfPredefinedTypeName::Object: + writer.WriteString(L"object"); + break; + case WfPredefinedTypeName::Interface: + writer.WriteString(L"interface"); + break; + case WfPredefinedTypeName::Int: + writer.WriteString(L"int"); + break; + case WfPredefinedTypeName::UInt: + writer.WriteString(L"uint"); + break; + case WfPredefinedTypeName::Float: + writer.WriteString(L"float"); + break; + case WfPredefinedTypeName::Double: + writer.WriteString(L"double"); + break; + case WfPredefinedTypeName::String: + writer.WriteString(L"string"); + break; + case WfPredefinedTypeName::Char: + writer.WriteString(L"char"); + break; + case WfPredefinedTypeName::Bool: + writer.WriteString(L"bool"); + break; + } + writer.AfterPrint(node); + } + + void Visit(WfTopQualifiedType* node)override + { + writer.BeforePrint(node); + writer.WriteString(L"::" + node->name.value); + writer.AfterPrint(node); + } + + void Visit(WfReferenceType* node)override + { + writer.BeforePrint(node); + writer.WriteString(node->name.value); + writer.AfterPrint(node); + } + + void Visit(WfRawPointerType* node)override + { + writer.BeforePrint(node); + WfPrint(node->element, indent, writer); + writer.WriteString(L"*"); + writer.AfterPrint(node); + } + + void Visit(WfSharedPointerType* node)override + { + writer.BeforePrint(node); + WfPrint(node->element, indent, writer); + writer.WriteString(L"^"); + writer.AfterPrint(node); + } + + void Visit(WfNullableType* node)override + { + writer.BeforePrint(node); + WfPrint(node->element, indent, writer); + writer.WriteString(L"?"); + writer.AfterPrint(node); + } + + void Visit(WfEnumerableType* node)override + { + writer.BeforePrint(node); + WfPrint(node->element, indent, writer); + writer.WriteString(L"{}"); + writer.AfterPrint(node); + } + + void Visit(WfMapType* node)override + { + writer.BeforePrint(node); + if (node->writability == WfMapWritability::Readonly) + { + writer.WriteString(L"const "); + } + WfPrint(node->value, indent, writer); + writer.WriteString(L"["); + if (node->key) + { + WfPrint(node->key, indent, writer); + } + writer.WriteString(L"]"); + writer.AfterPrint(node); + } + + void Visit(WfObservableListType* node)override + { + writer.BeforePrint(node); + writer.WriteString(L"observe "); + WfPrint(node->element, indent, writer); + writer.WriteString(L"[]"); + writer.AfterPrint(node); + } + + void Visit(WfFunctionType* node)override + { + writer.BeforePrint(node); + writer.WriteString(L"(func "); + writer.WriteString(L"("); + FOREACH_INDEXER(Ptr, type, index, node->arguments) + { + if (index > 0) + { + writer.WriteString(L", "); + } + WfPrint(type, indent, writer); + } + writer.WriteString(L")"); + + writer.WriteString(L" : ("); + WfPrint(node->result, indent, writer); + writer.WriteString(L"))"); + writer.AfterPrint(node); + } + + void Visit(WfChildType* node)override + { + writer.BeforePrint(node); + WfPrint(node->parent, indent, writer); + writer.WriteString(L"::"); + writer.WriteString(node->name.value); + writer.AfterPrint(node); + } + }; + +/*********************************************************************** +Print (Expression) +***********************************************************************/ + + class PrintExpressionVisitor + : public Object + , public WfExpression::IVisitor + , public WfVirtualCfeExpression::IVisitor + , public WfVirtualCseExpression::IVisitor + { + public: + WString indent; + ParsingWriter& writer; + + PrintExpressionVisitor(const WString& _indent, ParsingWriter& _writer) + :indent(_indent), writer(_writer) + { + } + + void Visit(WfThisExpression* node)override + { + writer.BeforePrint(node); + writer.WriteString(L"this"); + writer.AfterPrint(node); + } + + void Visit(WfTopQualifiedExpression* node)override + { + writer.BeforePrint(node); + writer.WriteString(L"::"); + writer.WriteString(node->name.value); + writer.AfterPrint(node); + } + + void Visit(WfReferenceExpression* node)override + { + writer.BeforePrint(node); + writer.WriteString(node->name.value); + writer.AfterPrint(node); + } + + void Visit(WfOrderedNameExpression* node)override + { + writer.BeforePrint(node); + writer.WriteString(node->name.value); + writer.AfterPrint(node); + } + + void Visit(WfOrderedLambdaExpression* node)override + { + writer.BeforePrint(node); + writer.WriteString(L"["); + WfPrint(node->body, indent, writer); + writer.WriteString(L"]"); + writer.AfterPrint(node); + } + + void Visit(WfMemberExpression* node)override + { + writer.BeforePrint(node); + WfPrint(node->parent, indent, writer); + writer.WriteString(L"."); + writer.WriteString(node->name.value); + writer.AfterPrint(node); + } + + void Visit(WfChildExpression* node)override + { + writer.BeforePrint(node); + WfPrint(node->parent, indent, writer); + writer.WriteString(L"::"); + writer.WriteString(node->name.value); + writer.AfterPrint(node); + } + + void Visit(WfLiteralExpression* node)override + { + writer.BeforePrint(node); + switch (node->value) + { + case WfLiteralValue::Null: + writer.WriteString(L"null"); + break; + case WfLiteralValue::True: + writer.WriteString(L"true"); + break; + case WfLiteralValue::False: + writer.WriteString(L"false"); + break; + } + writer.AfterPrint(node); + } + + void Visit(WfFloatingExpression* node)override + { + writer.BeforePrint(node); + writer.WriteString(node->value.value); + writer.AfterPrint(node); + } + + void Visit(WfIntegerExpression* node)override + { + writer.BeforePrint(node); + writer.WriteString(node->value.value); + writer.AfterPrint(node); + } + + void Visit(WfStringExpression* node)override + { + writer.BeforePrint(node); + EscapeString(node->value.value, writer); + writer.AfterPrint(node); + } + + void Visit(WfUnaryExpression* node)override + { + writer.BeforePrint(node); + writer.WriteString(L"("); + switch (node->op) + { + case WfUnaryOperator::Positive: + writer.WriteString(L"+"); + break; + case WfUnaryOperator::Negative: + writer.WriteString(L"-"); + break; + case WfUnaryOperator::Not: + writer.WriteString(L"!"); + break; + } + WfPrint(node->operand, indent, writer); + writer.WriteString(L")"); + writer.AfterPrint(node); + } + + void Visit(WfBinaryExpression* node)override + { + writer.BeforePrint(node); + if (node->op == WfBinaryOperator::Index) + { + WfPrint(node->first, indent, writer); + writer.WriteString(L"["); + WfPrint(node->second, indent, writer); + writer.WriteString(L"]"); + } + else + { + writer.WriteString(L"("); + WfPrint(node->first, indent, writer); + switch (node->op) + { + case WfBinaryOperator::Assign: + writer.WriteString(L" = "); + break; + case WfBinaryOperator::Union: + writer.WriteString(L" & "); + break; + case WfBinaryOperator::Intersect: + writer.WriteString(L" | "); + break; + case WfBinaryOperator::FailedThen: + writer.WriteString(L" ?? "); + break; + case WfBinaryOperator::Exp: + writer.WriteString(L" ^ "); + break; + case WfBinaryOperator::Add: + writer.WriteString(L" + "); + break; + case WfBinaryOperator::Sub: + writer.WriteString(L" - "); + break; + case WfBinaryOperator::Mul: + writer.WriteString(L" * "); + break; + case WfBinaryOperator::Div: + writer.WriteString(L" / "); + break; + case WfBinaryOperator::Mod: + writer.WriteString(L" % "); + break; + case WfBinaryOperator::Shl: + writer.WriteString(L" shl "); + break; + case WfBinaryOperator::Shr: + writer.WriteString(L" shr "); + break; + case WfBinaryOperator::LT: + writer.WriteString(L" < "); + break; + case WfBinaryOperator::GT: + writer.WriteString(L" > "); + break; + case WfBinaryOperator::LE: + writer.WriteString(L" <= "); + break; + case WfBinaryOperator::GE: + writer.WriteString(L" >= "); + break; + case WfBinaryOperator::EQ: + writer.WriteString(L" == "); + break; + case WfBinaryOperator::NE: + writer.WriteString(L" != "); + break; + case WfBinaryOperator::Xor: + writer.WriteString(L" xor "); + break; + case WfBinaryOperator::And: + writer.WriteString(L" and "); + break; + case WfBinaryOperator::Or: + writer.WriteString(L" or "); + break; + default:; + } + WfPrint(node->second, indent, writer); + writer.WriteString(L")"); + } + writer.AfterPrint(node); + } + + void Visit(WfLetExpression* node)override + { + writer.BeforePrint(node); + writer.WriteString(L"let "); + FOREACH_INDEXER(Ptr, var, index, node->variables) + { + if (index > 0) + { + writer.WriteString(L", "); + } + writer.BeforePrint(var.Obj()); + writer.WriteString(var->name.value); + writer.WriteString(L" = "); + WfPrint(var->value, indent, writer); + writer.AfterPrint(var.Obj()); + } + writer.WriteString(L" in ("); + WfPrint(node->expression, indent, writer); + writer.WriteString(L")"); + writer.AfterPrint(node); + } + + void Visit(WfIfExpression* node)override + { + writer.BeforePrint(node); + WfPrint(node->condition, indent, writer); + writer.WriteString(L" ? "); + WfPrint(node->trueBranch, indent, writer); + writer.WriteString(L" : "); + WfPrint(node->falseBranch, indent, writer); + writer.AfterPrint(node); + } + + void Visit(WfRangeExpression* node)override + { + writer.BeforePrint(node); + writer.WriteString(L"range "); + writer.WriteString(node->beginBoundary == WfRangeBoundary::Exclusive ? L"(" : L"["); + WfPrint(node->begin, indent, writer); + writer.WriteString(L", "); + WfPrint(node->end, indent, writer); + writer.WriteString(node->endBoundary == WfRangeBoundary::Exclusive ? L")" : L"]"); + writer.AfterPrint(node); + } + + void Visit(WfSetTestingExpression* node)override + { + writer.BeforePrint(node); + WfPrint(node->element, indent, writer); + if (node->test == WfSetTesting::NotIn) + { + writer.WriteString(L" not"); + } + writer.WriteString(L" in "); + WfPrint(node->collection, indent, writer); + writer.AfterPrint(node); + } + + void Visit(WfConstructorExpression* node)override + { + writer.BeforePrint(node); + writer.WriteString(L"{"); + FOREACH_INDEXER(Ptr, argument, index, node->arguments) + { + if (index > 0) + { + writer.WriteString(L" "); + } + WfPrint(argument->key, indent, writer); + if (argument->value) + { + writer.WriteString(L" : "); + WfPrint(argument->value, indent, writer); + } + writer.WriteString(L";"); + } + writer.WriteString(L"}"); + writer.AfterPrint(node); + } + + void Visit(WfInferExpression* node)override + { + writer.BeforePrint(node); + WfPrint(node->expression, indent, writer); + writer.WriteString(L" of ("); + WfPrint(node->type, indent, writer); + writer.WriteString(L")"); + writer.AfterPrint(node); + } + + void Visit(WfTypeCastingExpression* node)override + { + writer.BeforePrint(node); + if (node->strategy == WfTypeCastingStrategy::Strong) + { + writer.WriteString(L"(cast ("); + WfPrint(node->type, indent, writer); + writer.WriteString(L") "); + WfPrint(node->expression, indent, writer); + writer.WriteString(L")"); + } + else + { + writer.WriteString(L"("); + WfPrint(node->expression, indent, writer); + writer.WriteString(L" as ("); + WfPrint(node->type, indent, writer); + writer.WriteString(L"))"); + } + writer.AfterPrint(node); + } + + void Visit(WfTypeTestingExpression* node)override + { + writer.BeforePrint(node); + WfPrint(node->expression, indent, writer); + switch (node->test) + { + case WfTypeTesting::IsType: + writer.WriteString(L" is ("); + WfPrint(node->type, indent, writer); + writer.WriteString(L")"); + break; + case WfTypeTesting::IsNotType: + writer.WriteString(L" is not ("); + WfPrint(node->type, indent, writer); + writer.WriteString(L")"); + break; + case WfTypeTesting::IsNull: + writer.WriteString(L" is null"); + break; + case WfTypeTesting::IsNotNull: + writer.WriteString(L" is not null"); + break; + } + writer.AfterPrint(node); + } + + void Visit(WfTypeOfTypeExpression* node)override + { + writer.BeforePrint(node); + writer.WriteString(L"typeof("); + WfPrint(node->type, indent, writer); + writer.WriteString(L")"); + writer.AfterPrint(node); + } + + void Visit(WfTypeOfExpressionExpression* node)override + { + writer.BeforePrint(node); + writer.WriteString(L"type("); + WfPrint(node->expression, indent, writer); + writer.WriteString(L")"); + writer.AfterPrint(node); + } + + void Visit(WfAttachEventExpression* node)override + { + writer.BeforePrint(node); + writer.WriteString(L"attach("); + WfPrint(node->event, indent, writer); + writer.WriteString(L", "); + WfPrint(node->function, indent, writer); + writer.WriteString(L")"); + writer.AfterPrint(node); + } + + void Visit(WfDetachEventExpression* node)override + { + writer.BeforePrint(node); + writer.WriteString(L"detach("); + WfPrint(node->event, indent, writer); + writer.WriteString(L", "); + WfPrint(node->handler, indent, writer); + writer.WriteString(L")"); + writer.AfterPrint(node); + } + + void Visit(WfObserveExpression* node)override + { + writer.BeforePrint(node); + WfPrint(node->parent, indent, writer); + writer.WriteString(L".observe"); + if (node->observeType == WfObserveType::ExtendedObserve) + { + writer.WriteString(L" as "); + writer.WriteString(node->name.value); + } + writer.WriteString(L"("); + WfPrint(node->expression, indent, writer); + if (node->events.Count() > 0) + { + writer.WriteString(L" on "); + FOREACH_INDEXER(Ptr, argument, index, node->events) + { + if (index > 0) + { + writer.WriteString(L", "); + } + WfPrint(argument, indent, writer); + } + } + writer.WriteString(L")"); + writer.AfterPrint(node); + } + + void Visit(WfCallExpression* node)override + { + writer.BeforePrint(node); + WfPrint(node->function, indent, writer); + writer.WriteString(L"("); + FOREACH_INDEXER(Ptr, argument, index, node->arguments) + { + if (index > 0) + { + writer.WriteString(L", "); + } + WfPrint(argument, indent, writer); + } + writer.WriteString(L")"); + writer.AfterPrint(node); + } + + void Visit(WfFunctionExpression* node)override + { + writer.BeforePrint(node); + WfPrint(Ptr(node->function), indent, writer); + writer.AfterPrint(node); + } + + void Visit(WfNewClassExpression* node)override + { + writer.BeforePrint(node); + writer.WriteString(L"new ("); + WfPrint(node->type, indent, writer); + writer.WriteString(L")"); + + writer.WriteString(L"("); + FOREACH_INDEXER(Ptr, argument, index, node->arguments) + { + if (index > 0) + { + writer.WriteString(L", "); + } + WfPrint(argument, indent, writer); + } + writer.WriteString(L")"); + + writer.AfterPrint(node); + } + + void Visit(WfNewInterfaceExpression* node)override + { + writer.BeforePrint(node); + writer.WriteString(L"new ("); + WfPrint(node->type, indent, writer); + writer.WriteString(L")"); + + writer.WriteLine(L""); + writer.WriteString(indent); + writer.WriteLine(L"{"); + FOREACH_INDEXER(Ptr, decl, index, node->declarations) + { + if (index > 0) + { + writer.WriteLine(L""); + } + + writer.WriteString(indent + L" "); + WfPrint(decl, indent + L" ", writer); + writer.WriteLine(L""); + } + writer.WriteString(indent); + writer.WriteString(L"}"); + + writer.AfterPrint(node); + } + + void Visit(WfVirtualCfeExpression* node)override + { + if (node->expandedExpression) + { + writer.BeforePrint(node); + WfPrint(node->expandedExpression, indent, writer); + writer.AfterPrint(node); + } + else + { + node->Accept((WfVirtualCfeExpression::IVisitor*)this); + } + } + + void Visit(WfFormatExpression* node)override + { + writer.BeforePrint(node); + writer.WriteString(L"$"); + EscapeString(node->value.value, writer); + writer.AfterPrint(node); + } + + void Visit(WfVirtualCseExpression* node)override + { + if (node->expandedExpression) + { + writer.BeforePrint(node); + WfPrint(node->expandedExpression, indent, writer); + writer.AfterPrint(node); + } + else + { + node->Accept((WfVirtualCseExpression::IVisitor*)this); + } + } + + void Visit(WfBindExpression* node)override + { + writer.BeforePrint(node); + writer.WriteString(L"bind("); + WfPrint(node->expression, indent, writer); + writer.WriteString(L")"); + writer.AfterPrint(node); + } + + void Visit(WfNewCoroutineExpression* node)override + { + writer.BeforePrint(node); + if (node->name.value == L"") + { + writer.WriteLine(L"$coroutine"); + } + else + { + writer.WriteString(L"$coroutine("); + writer.WriteString(node->name.value); + writer.WriteLine(L")"); + } + writer.WriteString(indent); + WfPrint(node->statement, indent, writer); + writer.AfterPrint(node); + } + + void Visit(WfMixinCastExpression* node)override + { + writer.BeforePrint(node); + writer.WriteString(L"new ("); + WfPrint(node->type, indent, writer); + writer.WriteString(L")"); + + writer.WriteString(L"(using "); + WfPrint(node->expression, indent, writer); + writer.AfterPrint(node); + } + + void Visit(WfExpectedTypeCastExpression* node)override + { + writer.BeforePrint(node); + if (node->strategy == WfTypeCastingStrategy::Strong) + { + writer.WriteString(L"(cast * "); + WfPrint(node->expression, indent, writer); + writer.WriteString(L")"); + } + else + { + writer.WriteString(L"("); + WfPrint(node->expression, indent, writer); + writer.WriteString(L" as *)"); + } + writer.AfterPrint(node); + } + + void Visit(WfCoOperatorExpression* node)override + { + writer.BeforePrint(node); + writer.WriteString(L"$."); + writer.WriteString(node->name.value); + writer.AfterPrint(node); + } + }; + +/*********************************************************************** +Print (Statement) +***********************************************************************/ + + class PrintStatementVisitor + : public Object + , public WfStatement::IVisitor + , public WfVirtualCseStatement::IVisitor + , public WfCoroutineStatement::IVisitor + , public WfStateMachineStatement::IVisitor + { + public: + WString indent; + ParsingWriter& writer; + + PrintStatementVisitor(const WString& _indent, ParsingWriter& _writer) + :indent(_indent), writer(_writer) + { + } + + void Visit(WfBreakStatement* node)override + { + writer.BeforePrint(node); + writer.WriteString(L"break;"); + writer.AfterPrint(node); + } + + void Visit(WfContinueStatement* node)override + { + writer.BeforePrint(node); + writer.WriteString(L"continue;"); + writer.AfterPrint(node); + } + + void Visit(WfReturnStatement* node)override + { + writer.BeforePrint(node); + if (node->expression) + { + writer.WriteString(L"return "); + WfPrint(node->expression, indent, writer); + writer.WriteString(L";"); + } + else + { + writer.WriteString(L"return;"); + } + writer.AfterPrint(node); + } + + void Visit(WfDeleteStatement* node)override + { + writer.BeforePrint(node); + writer.WriteString(L"delete "); + WfPrint(node->expression, indent, writer); + writer.WriteString(L";"); + writer.AfterPrint(node); + } + + void Visit(WfRaiseExceptionStatement* node)override + { + writer.BeforePrint(node); + if (node->expression) + { + writer.WriteString(L"raise "); + WfPrint(node->expression, indent, writer); + writer.WriteString(L";"); + } + else + { + writer.WriteString(L"raise;"); + } + writer.AfterPrint(node); + } + + void Visit(WfIfStatement* node)override + { + writer.BeforePrint(node); + writer.WriteString(L"if ("); + if (node->type) + { + writer.WriteString(L"var "); + writer.WriteString(node->name.value); + writer.WriteString(L" : "); + WfPrint(node->type, indent, writer); + writer.WriteString(L" = "); + } + WfPrint(node->expression, indent, writer); + writer.WriteLine(L")"); + + writer.WriteString(indent); + WfPrint(node->trueBranch, indent, writer); + if (node->falseBranch) + { + writer.WriteLine(L""); + writer.WriteString(indent); + if (node->falseBranch.Cast()) + { + writer.WriteString(L"else "); + WfPrint(node->falseBranch, indent, writer); + } + else + { + writer.WriteLine(L"else"); + writer.WriteString(indent); + WfPrint(node->falseBranch, indent, writer); + } + } + writer.AfterPrint(node); + } + + void Visit(WfWhileStatement* node)override + { + writer.BeforePrint(node); + writer.WriteString(L"while ("); + WfPrint(node->condition, indent, writer); + writer.WriteLine(L")"); + writer.WriteString(indent); + WfPrint(node->statement, indent, writer); + writer.AfterPrint(node); + } + + void Visit(WfTryStatement* node)override + { + writer.BeforePrint(node); + writer.WriteLine(L"try"); + writer.WriteString(indent); + WfPrint(node->protectedStatement, indent, writer); + + if (node->catchStatement) + { + writer.WriteLine(L""); + writer.WriteString(indent); + writer.WriteString(L"catch ("); + writer.WriteString(node->name.value); + writer.WriteLine(L")"); + writer.WriteString(indent); + WfPrint(node->catchStatement, indent, writer); + } + + if (node->finallyStatement) + { + writer.WriteLine(L""); + writer.WriteString(indent); + writer.WriteLine(L"finally"); + writer.WriteString(indent); + WfPrint(node->finallyStatement, indent, writer); + } + writer.AfterPrint(node); + } + + void Visit(WfBlockStatement* node)override + { + writer.BeforePrint(node); + writer.WriteLine(L"{"); + FOREACH(Ptr, statement, node->statements) + { + writer.WriteString(indent + L" "); + WfPrint(statement, indent + L" ", writer); + writer.WriteLine(L""); + } + + if (node->endLabel.value != L"") + { + writer.WriteString(indent + L" "); + writer.WriteString(node->endLabel.value); + writer.WriteLine(L":;"); + } + writer.WriteString(indent); + writer.WriteString(L"}"); + writer.AfterPrint(node); + } + + void Visit(WfGotoStatement* node)override + { + writer.BeforePrint(node); + writer.WriteString(L"goto "); + writer.WriteString(node->label.value); + writer.WriteString(L";"); + writer.AfterPrint(node); + } + + void Visit(WfExpressionStatement* node)override + { + writer.BeforePrint(node); + WfPrint(node->expression, indent, writer); + writer.WriteString(L";"); + writer.AfterPrint(node); + } + + void Visit(WfVariableStatement* node)override + { + writer.BeforePrint(node); + WfPrint(Ptr(node->variable), indent, writer); + writer.AfterPrint(node); + } + + void Visit(WfVirtualCseStatement* node)override + { + if (node->expandedStatement) + { + writer.BeforePrint(node); + WfPrint(node->expandedStatement, indent, writer); + writer.AfterPrint(node); + } + else + { + node->Accept((WfVirtualCseStatement::IVisitor*)this); + } + } + + void Visit(WfSwitchStatement* node)override + { + writer.BeforePrint(node); + writer.WriteString(L"switch ("); + WfPrint(node->expression, indent, writer); + writer.WriteLine(L")"); + + writer.WriteString(indent); + writer.WriteLine(L"{"); + + FOREACH(Ptr, switchCase, node->caseBranches) + { + writer.BeforePrint(switchCase.Obj()); + writer.WriteString(indent); + writer.WriteString(L" case "); + WfPrint(switchCase->expression, indent, writer); + writer.WriteLine(L":"); + writer.WriteString(indent + L" "); + WfPrint(switchCase->statement, indent + L" ", writer); + writer.AfterPrint(switchCase.Obj()); + writer.WriteLine(L""); + } + if (node->defaultBranch) + { + writer.WriteString(indent); + writer.WriteLine(L" default:"); + writer.WriteString(indent + L" "); + WfPrint(node->defaultBranch, indent + L" ", writer); + writer.WriteLine(L""); + } + + writer.WriteString(indent); + writer.WriteString(L"}"); + writer.AfterPrint(node); + } + + void Visit(WfForEachStatement* node)override + { + writer.BeforePrint(node); + writer.WriteString(L"for ("); + writer.WriteString(node->name.value); + writer.WriteString(L" in "); + if (node->direction == WfForEachDirection::Reversed) + { + writer.WriteString(L"reversed "); + } + WfPrint(node->collection, indent, writer); + writer.WriteLine(L")"); + writer.WriteString(indent); + WfPrint(node->statement, indent, writer); + writer.AfterPrint(node); + } + + void Visit(WfCoProviderStatement* node)override + { + writer.BeforePrint(node); + if (node->name.value == L"") + { + writer.WriteString(L"$"); + } + else + { + writer.WriteString(node->name.value); + writer.WriteString(L" "); + } + WfPrint(node->statement, indent, writer); + writer.AfterPrint(node); + } + + void Visit(WfCoroutineStatement* node)override + { + node->Accept((WfCoroutineStatement::IVisitor*)this); + } + + void Visit(WfCoPauseStatement* node)override + { + writer.BeforePrint(node); + if (node->statement) + { + writer.WriteLine(L"$pause"); + writer.WriteString(indent); + WfPrint(node->statement, indent, writer); + } + else + { + writer.WriteString(L"$pause;"); + } + writer.AfterPrint(node); + } + + void Visit(WfCoOperatorStatement* node)override + { + if (node->varName.value != L"") + { + writer.WriteString(L"var "); + writer.WriteString(node->varName.value); + writer.WriteString(L" = "); + } + writer.WriteString(node->opName.value); + + FOREACH_INDEXER(Ptr, argument, index, node->arguments) + { + writer.WriteString(index == 0 ? L" " : L", "); + WfPrint(argument, indent, writer); + } + writer.WriteString(L";"); + } + + void Visit(WfStateMachineStatement* node)override + { + node->Accept((WfStateMachineStatement::IVisitor*)this); + } + + void Visit(WfStateSwitchStatement* node)override + { + writer.BeforePrint(node); + writer.WriteString(L"switch ("); + switch (node->type) + { + case WfStateSwitchType::Default: + writer.WriteLine(L"raise)"); + break; + case WfStateSwitchType::Pass: + writer.WriteLine(L"continue)"); + break; + case WfStateSwitchType::PassAndReturn: + writer.WriteLine(L"continue, return)"); + break; + case WfStateSwitchType::Ignore: + writer.WriteLine(L")"); + break; + case WfStateSwitchType::IgnoreAndReturn: + writer.WriteLine(L"return)"); + break; + } + + writer.WriteString(indent); + writer.WriteLine(L"{"); + + FOREACH(Ptr, switchCase, node->caseBranches) + { + writer.BeforePrint(switchCase.Obj()); + writer.WriteString(indent); + writer.WriteString(L" case "); + writer.WriteString(switchCase->name.value); + writer.WriteString(L"("); + FOREACH_INDEXER(Ptr, argument, index, switchCase->arguments) + { + if (index != 0) writer.WriteString(L", "); + writer.BeforePrint(argument.Obj()); + writer.WriteString(argument->name.value); + writer.AfterPrint(argument.Obj()); + } + writer.WriteLine(L"):"); + writer.WriteString(indent + L" "); + WfPrint(switchCase->statement, indent + L" ", writer); + writer.AfterPrint(switchCase.Obj()); + writer.WriteLine(L""); + } + + writer.WriteString(indent); + writer.WriteString(L"}"); + writer.AfterPrint(node); + } + + void Visit(WfStateInvokeStatement* node)override + { + writer.BeforePrint(node); + switch (node->type) + { + case WfStateInvokeType::Goto: + writer.WriteString(L"$goto_state "); + break; + case WfStateInvokeType::Push: + writer.WriteString(L"push_state "); + break; + } + + writer.WriteString(node->name.value); + writer.WriteString(L"("); + FOREACH_INDEXER(Ptr, argument, index, node->arguments) + { + if (index != 0) writer.WriteString(L", "); + WfPrint(argument, indent, writer); + } + writer.WriteString(L");"); + writer.AfterPrint(node); + } + }; + +/*********************************************************************** +Print (Declaration) +***********************************************************************/ + + class PrintDeclarationVisitor + : public Object + , public WfDeclaration::IVisitor + , public WfVirtualCfeDeclaration::IVisitor + , public WfVirtualCseDeclaration::IVisitor + { + public: + WString indent; + ParsingWriter& writer; + + PrintDeclarationVisitor(const WString& _indent, ParsingWriter& _writer) + :indent(_indent), writer(_writer) + { + } + + void Visit(WfNamespaceDeclaration* node)override + { + writer.BeforePrint(node); + writer.WriteLine(L"namespace " + node->name.value); + writer.WriteString(indent); + writer.WriteLine(L"{"); + FOREACH_INDEXER(Ptr, decl, index, node->declarations) + { + if (index != 0) + { + writer.WriteLine(L""); + } + writer.WriteString(indent + L" "); + WfPrint(decl, indent + L" ", writer); + writer.WriteLine(L""); + } + writer.WriteString(indent); + writer.WriteString(L"}"); + writer.AfterPrint(node); + } + + void Visit(WfFunctionDeclaration* node)override + { + writer.BeforePrint(node); + writer.WriteString(L"func "); + if (node->anonymity == WfFunctionAnonymity::Named) + { + writer.WriteString(node->name.value); + } + + writer.WriteString(L"("); + FOREACH_INDEXER(Ptr, argument, index, node->arguments) + { + if (index > 0) + { + writer.WriteString(L", "); + } + writer.BeforePrint(argument.Obj()); + FOREACH(Ptr, attribute, argument->attributes) + { + WfPrint(attribute, indent, writer); + writer.WriteString(L" "); + } + writer.WriteString(argument->name.value); + writer.WriteString(L" : "); + WfPrint(argument->type, indent, writer); + writer.AfterPrint(argument.Obj()); + } + writer.WriteString(L")"); + + writer.WriteString(L" : ("); + WfPrint(node->returnType, indent, writer); + writer.WriteString(L")"); + if (node->statement) + { + writer.WriteLine(L""); + + writer.WriteString(indent); + WfPrint(node->statement, indent, writer); + } + else + { + writer.WriteString(L";"); + } + writer.AfterPrint(node); + } + + void Visit(WfVariableDeclaration* node)override + { + writer.BeforePrint(node); + writer.WriteString(L"var "); + writer.WriteString(node->name.value); + if (node->type) + { + writer.WriteString(L" : "); + WfPrint(node->type, indent, writer); + } + writer.WriteString(L" = "); + WfPrint(node->expression, indent, writer); + writer.WriteString(L";"); + writer.AfterPrint(node); + } + + void Visit(WfEventDeclaration* node)override + { + writer.BeforePrint(node); + writer.WriteString(L"event "); + writer.WriteString(node->name.value); + writer.WriteString(L"("); + FOREACH_INDEXER(Ptr, type, index, node->arguments) + { + if (index != 0) + { + writer.WriteString(L", "); + } + WfPrint(type, indent, writer); + } + writer.WriteString(L");"); + writer.AfterPrint(node); + } + + void Visit(WfPropertyDeclaration* node)override + { + writer.BeforePrint(node); + writer.WriteString(L"prop "); + writer.WriteString(node->name.value); + writer.WriteString(L" : "); + WfPrint(node->type, indent, writer); + writer.WriteString(L"{"); + writer.WriteString(node->getter.value); + if (node->setter.value != L"") + { + writer.WriteString(L", "); + writer.WriteString(node->setter.value); + } + if (node->valueChangedEvent.value != L"") + { + writer.WriteString(L" : "); + writer.WriteString(node->valueChangedEvent.value); + } + writer.WriteString(L"}"); + writer.AfterPrint(node); + } + + void Visit(WfConstructorDeclaration* node)override + { + writer.BeforePrint(node); + if (node->constructorType == WfConstructorType::RawPtr) + { + writer.WriteString(L"new* "); + } + else + { + writer.WriteString(L"new "); + } + + writer.WriteString(L"("); + FOREACH_INDEXER(Ptr, argument, index, node->arguments) + { + if (index > 0) + { + writer.WriteString(L", "); + } + writer.BeforePrint(argument.Obj()); + writer.WriteString(argument->name.value); + writer.WriteString(L" : "); + WfPrint(argument->type, indent, writer); + writer.AfterPrint(argument.Obj()); + } + writer.WriteString(L")"); + FOREACH_INDEXER(Ptr, call, callIndex, node->baseConstructorCalls) + { + writer.WriteLine(L""); + writer.WriteString(indent + L" "); + if (callIndex == 0) + { + writer.WriteString(L":"); + } + else + { + writer.WriteString(L","); + } + writer.BeforePrint(call.Obj()); + WfPrint(call->type, indent + L" ", writer); + writer.WriteString(L"("); + FOREACH_INDEXER(Ptr, argument, argumentIndex, call->arguments) + { + if (argumentIndex != 0) + { + writer.WriteString(L", "); + } + WfPrint(argument, indent + L" ", writer); + } + writer.WriteString(L")"); + writer.AfterPrint(call.Obj()); + } + + writer.WriteLine(L""); + writer.WriteString(indent); + WfPrint(node->statement, indent, writer); + writer.AfterPrint(node); + } + + void Visit(WfDestructorDeclaration* node)override + { + writer.BeforePrint(node); + writer.WriteLine(L"delete"); + writer.WriteString(indent); + WfPrint(node->statement, indent, writer); + writer.AfterPrint(node); + } + + void Visit(WfClassDeclaration* node)override + { + writer.BeforePrint(node); + switch (node->kind) + { + case WfClassKind::Class: + writer.WriteString(L"class "); + break; + case WfClassKind::Interface: + writer.WriteString(L"interface "); + break; + } + writer.WriteString(node->name.value); + if (node->constructorType == WfConstructorType::RawPtr) + { + writer.WriteString(L"*"); + } + + FOREACH_INDEXER(Ptr, type, index, node->baseTypes) + { + if (index == 0) + { + writer.WriteString(L" : "); + } + else + { + writer.WriteString(L", "); + } + WfPrint(type, indent, writer); + } + + writer.WriteLine(L""); + writer.WriteLine(indent + L"{"); + + FOREACH_INDEXER(Ptr, decl, index, node->declarations) + { + if (index > 0) + { + writer.WriteLine(L""); + } + + writer.WriteString(indent + L" "); + WfPrint(decl, indent + L" ", writer); + writer.WriteLine(L""); + } + + writer.WriteString(indent + L"}"); + writer.AfterPrint(node); + } + + void Visit(WfEnumDeclaration* node)override + { + writer.BeforePrint(node); + switch (node->kind) + { + case WfEnumKind::Normal: + writer.WriteString(L"enum "); + break; + case WfEnumKind::Flag: + writer.WriteString(L"flagenum "); + break; + } + writer.WriteLine(node->name.value); + writer.WriteLine(indent + L"{"); + + auto newIndent = indent + L" "; + FOREACH(Ptr, item, node->items) + { + writer.BeforePrint(item.Obj()); + FOREACH(Ptr, attribute, item->attributes) + { + writer.WriteString(newIndent); + WfPrint(attribute, newIndent, writer); + writer.WriteLine(L""); + } + writer.WriteString(newIndent); + writer.WriteString(item->name.value); + writer.WriteString(L" = "); + switch (item->kind) + { + case WfEnumItemKind::Constant: + writer.WriteString(item->number.value); + break; + case WfEnumItemKind::Intersection: + FOREACH_INDEXER(Ptr, itemInt, index, item->intersections) + { + if (index != 0)writer.WriteString(L" | "); + writer.WriteString(itemInt->name.value); + } + break; + } + writer.AfterPrint(item.Obj()); + writer.WriteLine(L","); + } + + writer.WriteString(indent + L"}"); + writer.AfterPrint(node); + } + + void Visit(WfStructDeclaration* node)override + { + writer.BeforePrint(node); + writer.WriteString(L"struct "); + writer.WriteLine(node->name.value); + writer.WriteLine(indent + L"{"); + + auto newIndent = indent + L" "; + FOREACH(Ptr, member, node->members) + { + writer.BeforePrint(member.Obj()); + FOREACH(Ptr, attribute, member->attributes) + { + writer.WriteString(newIndent); + WfPrint(attribute, newIndent, writer); + writer.WriteLine(L""); + } + writer.WriteString(newIndent); + writer.WriteString(member->name.value); + writer.WriteString(L" : "); + WfPrint(member->type, newIndent, writer); + writer.WriteLine(L";"); + writer.AfterPrint(member.Obj()); + } + + writer.WriteString(indent + L"}"); + writer.AfterPrint(node); + } + + void PrintExpandedDeclarations(List>& decls) + { + FOREACH_INDEXER(Ptr, decl, index, decls) + { + if (index > 0) + { + writer.WriteLine(L""); + writer.WriteString(indent); + } + WfPrint(decl, indent, writer); + if (index < decls.Count() - 1) + { + writer.WriteLine(L""); + } + } + } + + void Visit(WfVirtualCfeDeclaration* node)override + { + if (node->expandedDeclarations.Count() > 0) + { + writer.BeforePrint(node); + PrintExpandedDeclarations(node->expandedDeclarations); + writer.AfterPrint(node); + } + else + { + node->Accept(static_cast(this)); + } + } + + void Visit(WfAutoPropertyDeclaration* node)override + { + writer.BeforePrint(node); + writer.WriteString(L"prop "); + writer.WriteString(node->name.value); + writer.WriteString(L" : "); + WfPrint(node->type, indent, writer); + if (node->expression) + { + writer.WriteString(L" = "); + WfPrint(node->expression, indent, writer); + } + writer.WriteString(L" {"); + if (node->configConst == WfAPConst::Readonly) + { + if (node->configObserve == WfAPObserve::NotObservable) + { + writer.WriteString(L"const, not observe"); + } + else + { + writer.WriteString(L"const"); + } + } + else + { + if (node->configObserve == WfAPObserve::NotObservable) + { + writer.WriteString(L"not observe"); + } + } + writer.WriteString(L"}"); + writer.AfterPrint(node); + } + + void Visit(WfCastResultInterfaceDeclaration* node)override + { + writer.BeforePrint(node); + writer.WriteString(L"$interface "); + writer.WriteString(node->name.value); + writer.WriteString(L" : "); + WfPrint(node->baseType, indent, writer); + writer.WriteString(L"<"); + WfPrint(node->elementType, indent, writer); + writer.WriteString(L">;"); + writer.AfterPrint(node); + } + + void Visit(WfVirtualCseDeclaration* node)override + { + if (node->expandedDeclarations.Count() > 0) + { + writer.BeforePrint(node); + PrintExpandedDeclarations(node->expandedDeclarations); + writer.AfterPrint(node); + } + else + { + node->Accept(static_cast(this)); + } + } + + void Visit(WfStateMachineDeclaration* node)override + { + writer.BeforePrint(node); + writer.WriteLine(L"$state_machine"); + writer.WriteLine(indent + L"{"); + + FOREACH_INDEXER(Ptr, input, index, node->inputs) + { + if (index != 0) writer.WriteLine(L""); + + writer.BeforePrint(input.Obj()); + writer.WriteString(indent + L" $state_input "); + writer.WriteString(input->name.value); + writer.WriteString(L"("); + FOREACH_INDEXER(Ptr, argument, index, input->arguments) + { + if (index > 0) + { + writer.WriteString(L", "); + } + writer.BeforePrint(argument.Obj()); + writer.WriteString(argument->name.value); + writer.WriteString(L" : "); + WfPrint(argument->type, indent, writer); + writer.AfterPrint(argument.Obj()); + } + writer.WriteLine(L");"); + writer.AfterPrint(input.Obj()); + } + + FOREACH_INDEXER(Ptr, state, index, node->states) + { + if (index != 0 || node->inputs.Count() > 0) writer.WriteLine(L""); + + writer.BeforePrint(state.Obj()); + writer.WriteString(indent + L" $state "); + if (state->name.value == L"") + { + writer.WriteString(L"default"); + } + else + { + writer.WriteString(state->name.value); + } + writer.WriteString(L"("); + FOREACH_INDEXER(Ptr, argument, index, state->arguments) + { + if (index > 0) + { + writer.WriteString(L", "); + } + writer.BeforePrint(argument.Obj()); + writer.WriteString(argument->name.value); + writer.WriteString(L" : "); + WfPrint(argument->type, indent, writer); + writer.AfterPrint(argument.Obj()); + } + writer.WriteLine(L")"); + writer.WriteString(indent + L" "); + WfPrint(state->statement, indent + L" ", writer); + writer.AfterPrint(state.Obj()); + writer.WriteLine(L""); + } + + writer.WriteString(indent + L"}"); + writer.AfterPrint(node); + } + }; + +/*********************************************************************** +Print (Module) +***********************************************************************/ + + void WfPrint(Ptr node, const WString& indent, parsing::ParsingWriter& writer) + { + writer.BeforePrint(node.Obj()); + writer.WriteString(L"@"); + writer.WriteString(node->category.value); + writer.WriteString(L":"); + writer.WriteString(node->name.value); + if (node->value) + { + writer.WriteString(L"("); + WfPrint(node->value, indent, writer); + writer.WriteString(L")"); + } + writer.AfterPrint(node.Obj()); + } + + void WfPrint(Ptr node, const WString& indent, parsing::ParsingWriter& writer) + { + PrintTypeVisitor visitor(indent, writer); + node->Accept(&visitor); + } + + void WfPrint(Ptr node, const WString& indent, parsing::ParsingWriter& writer) + { + PrintExpressionVisitor visitor(indent, writer); + node->Accept(&visitor); + } + + void WfPrint(Ptr node, const WString& indent, parsing::ParsingWriter& writer) + { + PrintStatementVisitor visitor(indent, writer); + node->Accept(&visitor); + } + + void WfPrint(Ptr node, const WString& indent, parsing::ParsingWriter& writer) + { + FOREACH(Ptr, attribute, node->attributes) + { + WfPrint(attribute, indent, writer); + writer.WriteLine(L""); + writer.WriteString(indent); + } + + if (node->classMember) + { + switch (node->classMember->kind) + { + case WfClassMemberKind::Normal: + break; + case WfClassMemberKind::Static: + writer.WriteString(L"static "); + break; + case WfClassMemberKind::Override: + writer.WriteString(L"override "); + break; + } + } + + PrintDeclarationVisitor visitor(indent, writer); + node->Accept(&visitor); + } + + void WfPrint(Ptr node, const WString& indent, parsing::ParsingWriter& writer) + { + writer.WriteString(indent); + switch (node->moduleType) + { + case WfModuleType::Module: + writer.WriteLine(L"module " + node->name.value + L";"); + break; + case WfModuleType::Unit: + writer.WriteLine(L"unit " + node->name.value + L";"); + break; + } + + FOREACH(Ptr, path, node->paths) + { + writer.WriteString(indent); + writer.WriteString(L"using "); + FOREACH_INDEXER(Ptr, item, index, path->items) + { + if (index > 0) + { + writer.WriteString(L"::"); + } + FOREACH(Ptr, fragment, item->fragments) + { + if (auto name = fragment.Cast()) + { + writer.WriteString(name->name.value); + } + else + { + writer.WriteString(L"*"); + } + } + } + writer.WriteLine(L";"); + } + + FOREACH(Ptr, decl, node->declarations) + { + writer.WriteLine(L""); + writer.WriteString(indent); + WfPrint(decl, indent, writer); + writer.WriteLine(L""); + } + } + +/*********************************************************************** +Print (Module) +***********************************************************************/ + + void WfPrint(Ptr node, const WString& indent, stream::TextWriter& writer) + { + ParsingWriter parsingWriter(writer); + WfPrint(node, indent, parsingWriter); + } + + void WfPrint(Ptr node, const WString& indent, stream::TextWriter& writer) + { + ParsingWriter parsingWriter(writer); + WfPrint(node, indent, parsingWriter); + } + + void WfPrint(Ptr node, const WString& indent, stream::TextWriter& writer) + { + ParsingWriter parsingWriter(writer); + WfPrint(node, indent, parsingWriter); + } + + void WfPrint(Ptr node, const WString& indent, stream::TextWriter& writer) + { + ParsingWriter parsingWriter(writer); + WfPrint(node, indent, parsingWriter); + } + + void WfPrint(Ptr node, const WString& indent, stream::TextWriter& writer) + { + ParsingWriter parsingWriter(writer); + WfPrint(node, indent, parsingWriter); + } + + void WfPrint(Ptr node, const WString& indent, stream::TextWriter& writer) + { + ParsingWriter parsingWriter(writer); + WfPrint(node, indent, parsingWriter); + } + } +} + + +/*********************************************************************** +.\EXPRESSION\WFEXPRESSION_EMPTY.CPP +***********************************************************************/ +/*********************************************************************** +Vczh Library++ 3.0 +Developer: Zihan Chen(vczh) +Parser::WfExpression.parser.txt + +This file is generated by: Vczh Parser Generator +***********************************************************************/ + + +namespace vl +{ + namespace workflow + { + namespace empty_visitor + { + +/*********************************************************************** +TypeVisitor +***********************************************************************/ + + // Visitor Members ----------------------------------- + + void TypeVisitor::Visit(WfPredefinedType* node) + { + } + + void TypeVisitor::Visit(WfTopQualifiedType* node) + { + } + + void TypeVisitor::Visit(WfReferenceType* node) + { + } + + void TypeVisitor::Visit(WfRawPointerType* node) + { + } + + void TypeVisitor::Visit(WfSharedPointerType* node) + { + } + + void TypeVisitor::Visit(WfNullableType* node) + { + } + + void TypeVisitor::Visit(WfEnumerableType* node) + { + } + + void TypeVisitor::Visit(WfMapType* node) + { + } + + void TypeVisitor::Visit(WfObservableListType* node) + { + } + + void TypeVisitor::Visit(WfFunctionType* node) + { + } + + void TypeVisitor::Visit(WfChildType* node) + { + } + +/*********************************************************************** +ExpressionVisitor +***********************************************************************/ + + // Visitor Members ----------------------------------- + + void ExpressionVisitor::Visit(WfThisExpression* node) + { + } + + void ExpressionVisitor::Visit(WfTopQualifiedExpression* node) + { + } + + void ExpressionVisitor::Visit(WfReferenceExpression* node) + { + } + + void ExpressionVisitor::Visit(WfOrderedNameExpression* node) + { + } + + void ExpressionVisitor::Visit(WfOrderedLambdaExpression* node) + { + } + + void ExpressionVisitor::Visit(WfMemberExpression* node) + { + } + + void ExpressionVisitor::Visit(WfChildExpression* node) + { + } + + void ExpressionVisitor::Visit(WfLiteralExpression* node) + { + } + + void ExpressionVisitor::Visit(WfFloatingExpression* node) + { + } + + void ExpressionVisitor::Visit(WfIntegerExpression* node) + { + } + + void ExpressionVisitor::Visit(WfStringExpression* node) + { + } + + void ExpressionVisitor::Visit(WfUnaryExpression* node) + { + } + + void ExpressionVisitor::Visit(WfBinaryExpression* node) + { + } + + void ExpressionVisitor::Visit(WfLetExpression* node) + { + } + + void ExpressionVisitor::Visit(WfIfExpression* node) + { + } + + void ExpressionVisitor::Visit(WfRangeExpression* node) + { + } + + void ExpressionVisitor::Visit(WfSetTestingExpression* node) + { + } + + void ExpressionVisitor::Visit(WfConstructorExpression* node) + { + } + + void ExpressionVisitor::Visit(WfInferExpression* node) + { + } + + void ExpressionVisitor::Visit(WfTypeCastingExpression* node) + { + } + + void ExpressionVisitor::Visit(WfTypeTestingExpression* node) + { + } + + void ExpressionVisitor::Visit(WfTypeOfTypeExpression* node) + { + } + + void ExpressionVisitor::Visit(WfTypeOfExpressionExpression* node) + { + } + + void ExpressionVisitor::Visit(WfAttachEventExpression* node) + { + } + + void ExpressionVisitor::Visit(WfDetachEventExpression* node) + { + } + + void ExpressionVisitor::Visit(WfObserveExpression* node) + { + } + + void ExpressionVisitor::Visit(WfCallExpression* node) + { + } + + void ExpressionVisitor::Visit(WfFunctionExpression* node) + { + } + + void ExpressionVisitor::Visit(WfNewClassExpression* node) + { + } + + void ExpressionVisitor::Visit(WfNewInterfaceExpression* node) + { + } + + void ExpressionVisitor::Visit(WfVirtualCfeExpression* node) + { + Dispatch(node); + } + + void ExpressionVisitor::Visit(WfVirtualCseExpression* node) + { + Dispatch(node); + } + +/*********************************************************************** +StatementVisitor +***********************************************************************/ + + // Visitor Members ----------------------------------- + + void StatementVisitor::Visit(WfBreakStatement* node) + { + } + + void StatementVisitor::Visit(WfContinueStatement* node) + { + } + + void StatementVisitor::Visit(WfReturnStatement* node) + { + } + + void StatementVisitor::Visit(WfDeleteStatement* node) + { + } + + void StatementVisitor::Visit(WfRaiseExceptionStatement* node) + { + } + + void StatementVisitor::Visit(WfIfStatement* node) + { + } + + void StatementVisitor::Visit(WfWhileStatement* node) + { + } + + void StatementVisitor::Visit(WfTryStatement* node) + { + } + + void StatementVisitor::Visit(WfBlockStatement* node) + { + } + + void StatementVisitor::Visit(WfGotoStatement* node) + { + } + + void StatementVisitor::Visit(WfVariableStatement* node) + { + } + + void StatementVisitor::Visit(WfExpressionStatement* node) + { + } + + void StatementVisitor::Visit(WfVirtualCseStatement* node) + { + Dispatch(node); + } + + void StatementVisitor::Visit(WfCoroutineStatement* node) + { + Dispatch(node); + } + + void StatementVisitor::Visit(WfStateMachineStatement* node) + { + Dispatch(node); + } + +/*********************************************************************** +DeclarationVisitor +***********************************************************************/ + + // Visitor Members ----------------------------------- + + void DeclarationVisitor::Visit(WfNamespaceDeclaration* node) + { + } + + void DeclarationVisitor::Visit(WfFunctionDeclaration* node) + { + } + + void DeclarationVisitor::Visit(WfVariableDeclaration* node) + { + } + + void DeclarationVisitor::Visit(WfEventDeclaration* node) + { + } + + void DeclarationVisitor::Visit(WfPropertyDeclaration* node) + { + } + + void DeclarationVisitor::Visit(WfConstructorDeclaration* node) + { + } + + void DeclarationVisitor::Visit(WfDestructorDeclaration* node) + { + } + + void DeclarationVisitor::Visit(WfClassDeclaration* node) + { + } + + void DeclarationVisitor::Visit(WfEnumDeclaration* node) + { + } + + void DeclarationVisitor::Visit(WfStructDeclaration* node) + { + } + + void DeclarationVisitor::Visit(WfVirtualCfeDeclaration* node) + { + Dispatch(node); + } + + void DeclarationVisitor::Visit(WfVirtualCseDeclaration* node) + { + Dispatch(node); + } + +/*********************************************************************** +VirtualCfeDeclarationVisitor +***********************************************************************/ + + // Visitor Members ----------------------------------- + + void VirtualCfeDeclarationVisitor::Visit(WfAutoPropertyDeclaration* node) + { + } + + void VirtualCfeDeclarationVisitor::Visit(WfCastResultInterfaceDeclaration* node) + { + } + +/*********************************************************************** +VirtualCseDeclarationVisitor +***********************************************************************/ + + // Visitor Members ----------------------------------- + + void VirtualCseDeclarationVisitor::Visit(WfStateMachineDeclaration* node) + { + } + +/*********************************************************************** +VirtualCseStatementVisitor +***********************************************************************/ + + // Visitor Members ----------------------------------- + + void VirtualCseStatementVisitor::Visit(WfForEachStatement* node) + { + } + + void VirtualCseStatementVisitor::Visit(WfSwitchStatement* node) + { + } + + void VirtualCseStatementVisitor::Visit(WfCoProviderStatement* node) + { + } + +/*********************************************************************** +CoroutineStatementVisitor +***********************************************************************/ + + // Visitor Members ----------------------------------- + + void CoroutineStatementVisitor::Visit(WfCoPauseStatement* node) + { + } + + void CoroutineStatementVisitor::Visit(WfCoOperatorStatement* node) + { + } + +/*********************************************************************** +StateMachineStatementVisitor +***********************************************************************/ + + // Visitor Members ----------------------------------- + + void StateMachineStatementVisitor::Visit(WfStateSwitchStatement* node) + { + } + + void StateMachineStatementVisitor::Visit(WfStateInvokeStatement* node) + { + } + +/*********************************************************************** +VirtualCfeExpressionVisitor +***********************************************************************/ + + // Visitor Members ----------------------------------- + + void VirtualCfeExpressionVisitor::Visit(WfFormatExpression* node) + { + } + +/*********************************************************************** +VirtualCseExpressionVisitor +***********************************************************************/ + + // Visitor Members ----------------------------------- + + void VirtualCseExpressionVisitor::Visit(WfBindExpression* node) + { + } + + void VirtualCseExpressionVisitor::Visit(WfNewCoroutineExpression* node) + { + } + + void VirtualCseExpressionVisitor::Visit(WfMixinCastExpression* node) + { + } + + void VirtualCseExpressionVisitor::Visit(WfExpectedTypeCastExpression* node) + { + } + + void VirtualCseExpressionVisitor::Visit(WfCoOperatorExpression* node) + { + } + +/*********************************************************************** +ModuleUsingFragmentVisitor +***********************************************************************/ + + // Visitor Members ----------------------------------- + + void ModuleUsingFragmentVisitor::Visit(WfModuleUsingNameFragment* node) + { + } + + void ModuleUsingFragmentVisitor::Visit(WfModuleUsingWildCardFragment* node) { - node->Accept(static_cast(this)); } } } @@ -11779,11 +13326,20 @@ WfLexicalScopeManager nodeScopes.Clear(); expressionResolvings.Clear(); + coNewCoroutineResolvings.Clear(); + coOperatorResolvings.Clear(); + coProviderResolvings.Clear(); + coCastResultResolvings.Clear(); lambdaCaptures.Clear(); interfaceMethodImpls.Clear(); + declaractionScopeSources.Clear(); declarationTypes.Clear(); declarationMemberInfos.Clear(); baseConstructorCallResolvings.Clear(); + stateInputMethods.Clear(); + stateInputArguments.Clear(); + stateDeclArguments.Clear(); + stateMachineInfos.Clear(); } #define CALLBACK(EXPR) if (callback) callback->EXPR @@ -12186,7 +13742,10 @@ BuildGlobalNameFromTypeDescriptors BuildGlobalNameFromModules ***********************************************************************/ - class BuildClassMemberVisitor : public Object, public WfDeclaration::IVisitor + class BuildClassMemberVisitor + : public Object + , public WfDeclaration::IVisitor + , public WfVirtualCseDeclaration::IVisitor { public: WfLexicalScopeManager* manager; @@ -12345,17 +13904,57 @@ BuildGlobalNameFromModules BuildNameForDeclaration(manager, scopeName, node); } - void Visit(WfVirtualDeclaration* node)override + void Visit(WfVirtualCfeDeclaration* node)override { FOREACH(Ptr, decl, node->expandedDeclarations) { decl->Accept(this); } } + + void Visit(WfVirtualCseDeclaration* node)override + { + node->Accept((WfVirtualCseDeclaration::IVisitor*)this); + } + + void Visit(WfStateMachineDeclaration* node)override + { + FOREACH(Ptr, input, node->inputs) + { + auto info = MakePtr(); + td->AddMember(input->name.value, info); + manager->stateInputMethods.Add(input, info); + + FOREACH(Ptr, argument, input->arguments) + { + auto info = MakePtr(td.Obj(), L"name.value + L">" + argument->name.value); + td->AddMember(info); + manager->stateInputArguments.Add(argument.Obj(), info); + } + } + + FOREACH(Ptr, state, node->states) + { + FOREACH(Ptr, argument, state->arguments) + { + auto info = MakePtr(td.Obj(), L"name.value + L">" + argument->name.value); + td->AddMember(info); + manager->stateDeclArguments.Add(argument.Obj(), info); + } + } + + auto smInfo = MakePtr(); + { + smInfo->createCoroutineMethod = MakePtr(); + td->AddMember(L"CreateCoroutine", smInfo->createCoroutineMethod); + } + manager->stateMachineInfos.Add(node, smInfo); + } }; class BuildNameDeclarationVisitor : public empty_visitor::DeclarationVisitor + , public empty_visitor::VirtualCseDeclarationVisitor { public: WfLexicalScopeManager* manager; @@ -12367,7 +13966,7 @@ BuildGlobalNameFromModules { } - void Dispatch(WfVirtualDeclaration* node)override + void Dispatch(WfVirtualCfeDeclaration* node)override { FOREACH(Ptr, decl, node->expandedDeclarations) { @@ -12375,6 +13974,11 @@ BuildGlobalNameFromModules } } + void Dispatch(WfVirtualCseDeclaration* node)override + { + node->Accept((WfVirtualCseDeclaration::IVisitor*)this); + } + void Visit(WfNamespaceDeclaration* node)override { manager->namespaceNames.Add(node, scopeName); @@ -12429,6 +14033,7 @@ ValidateScopeName class ValidateScopeNameDeclarationVisitor : public Object , public WfDeclaration::IVisitor + , public WfVirtualCseDeclaration::IVisitor { public: enum Category @@ -12437,8 +14042,6 @@ ValidateScopeName Type, Variable, Function, - Event, - Property, Namespace, }; @@ -12467,12 +14070,6 @@ ValidateScopeName case Function: categoryName = L"function"; break; - case Event: - categoryName = L"event"; - break; - case Property: - categoryName = L"property"; - break; case Namespace: categoryName = L"namespace"; break; @@ -12520,34 +14117,22 @@ ValidateScopeName void Visit(WfEventDeclaration* node)override { - if (category == None) - { - category = Event; - } - else - { - AddError(node); - } + CHECK_FAIL(L"ValidateScopeNameDeclarationVisitor::Visit(WfEventDeclaration*)#Internal error, ValidateDeclarationStructure function should check correctly."); } void Visit(WfPropertyDeclaration* node)override { - if (category == None) - { - category = Property; - } - else - { - AddError(node); - } + CHECK_FAIL(L"ValidateScopeNameDeclarationVisitor::Visit(WfPropertyDeclaration*)#Internal error, ValidateDeclarationStructure function should check correctly."); } void Visit(WfConstructorDeclaration* node)override { + CHECK_FAIL(L"ValidateScopeNameDeclarationVisitor::Visit(WfConstructorDeclaration*)#Internal error, ValidateDeclarationStructure function should check correctly."); } void Visit(WfDestructorDeclaration* node)override { + CHECK_FAIL(L"ValidateScopeNameDeclarationVisitor::Visit(WfDestructorDeclaration*)#Internal error, ValidateDeclarationStructure function should check correctly."); } void Visit(WfClassDeclaration* node)override @@ -12586,13 +14171,23 @@ ValidateScopeName } } - void Visit(WfVirtualDeclaration* node)override + void Visit(WfVirtualCfeDeclaration* node)override { FOREACH(Ptr, decl, node->expandedDeclarations) { decl->Accept(this); } } + + void Visit(WfVirtualCseDeclaration* node)override + { + node->Accept((WfVirtualCseDeclaration::IVisitor*)this); + } + + void Visit(WfStateMachineDeclaration* node)override + { + CHECK_FAIL(L"ValidateScopeNameDeclarationVisitor::Visit(WfStateMachineDeclaration*)#Internal error, ValidateDeclarationStructure function should check correctly."); + } }; void ValidateScopeName(WfLexicalScopeManager* manager, Ptr name) @@ -12632,7 +14227,10 @@ namespace vl BuildScopeForDeclaration ***********************************************************************/ - class BuildScopeForDeclarationVisitor : public Object, public WfDeclaration::IVisitor + class BuildScopeForDeclarationVisitor + : public Object + , public WfDeclaration::IVisitor + , public WfVirtualCseDeclaration::IVisitor { public: WfLexicalScopeManager* manager; @@ -12859,7 +14457,7 @@ BuildScopeForDeclaration } } - void Visit(WfVirtualDeclaration* node)override + void Visit(WfVirtualCfeDeclaration* node)override { FOREACH(Ptr, decl, node->expandedDeclarations) { @@ -12867,11 +14465,60 @@ BuildScopeForDeclaration } } + void Visit(WfVirtualCseDeclaration* node)override + { + node->Accept((WfVirtualCseDeclaration::IVisitor*)this); + } + + void Visit(WfStateMachineDeclaration* node)override + { + FOREACH(Ptr, input, node->inputs) + { + Ptr stateSymbol = new WfLexicalSymbol(parentScope.Obj()); + stateSymbol->name = input->name.value; + stateSymbol->creatorNode = input; + parentScope->symbols.Add(stateSymbol->name, stateSymbol); + } + + FOREACH(Ptr, state, node->states) + { + Ptr stateSymbol = new WfLexicalSymbol(parentScope.Obj()); + stateSymbol->name = state->name.value; + stateSymbol->creatorNode = state; + parentScope->symbols.Add(stateSymbol->name, stateSymbol); + + auto stateScope = MakePtr(parentScope); + { + auto config = MakePtr(); + stateScope->functionConfig = config; + + config->lambda = false; + config->thisAccessable = true; + config->parentThisAccessable = true; + } + stateScope->ownerNode = state; + manager->nodeScopes.Add(state.Obj(), stateScope); + + FOREACH(Ptr, argument, state->arguments) + { + Ptr argumentSymbol = new WfLexicalSymbol(stateScope.Obj()); + argumentSymbol->name = argument->name.value; + argumentSymbol->type = argument->type; + argumentSymbol->creatorNode = argument; + stateScope->symbols.Add(argumentSymbol->name, argumentSymbol); + } + + BuildScopeForStatement(manager, stateScope, state->statement); + } + } + static Ptr Execute(WfLexicalScopeManager* manager, Ptr parentScope, ParsingTreeCustomBase* source, Ptr declaration) { BuildScopeForDeclarationVisitor visitor(manager, parentScope, source); declaration->Accept(&visitor); visitor.Visit(parentScope, declaration->attributes); + + manager->declaractionScopeSources.Add(declaration, source); if (visitor.resultScope) { manager->nodeScopes.Add(declaration.Obj(), visitor.resultScope); @@ -12892,8 +14539,9 @@ BuildScopeForStatement class BuildScopeForStatementVisitor : public Object , public WfStatement::IVisitor - , public WfVirtualStatement::IVisitor + , public WfVirtualCseStatement::IVisitor , public WfCoroutineStatement::IVisitor + , public WfStateMachineStatement::IVisitor { public: WfLexicalScopeManager* manager; @@ -13004,6 +14652,10 @@ BuildScopeForStatement } } + void Visit(WfGotoStatement* node)override + { + } + void Visit(WfExpressionStatement* node)override { BuildScopeForExpression(manager, parentScope, node->expression); @@ -13014,13 +14666,9 @@ BuildScopeForStatement BuildScopeForDeclaration(manager, parentScope, node->variable, node); } - void Visit(WfVirtualStatement* node)override + void Visit(WfVirtualCseStatement* node)override { - node->Accept((WfVirtualStatement::IVisitor*)this); - if (node->expandedStatement) - { - BuildScopeForStatement(manager, parentScope, node->expandedStatement); - } + node->Accept((WfVirtualCseStatement::IVisitor*)this); } void Visit(WfSwitchStatement* node)override @@ -13097,6 +14745,41 @@ BuildScopeForStatement } } + void Visit(WfStateMachineStatement* node)override + { + node->Accept((WfStateMachineStatement::IVisitor*)this); + } + + void Visit(WfStateSwitchStatement* node)override + { + resultScope = new WfLexicalScope(parentScope); + + FOREACH(Ptr, switchCase, node->caseBranches) + { + auto caseScope = MakePtr(resultScope); + caseScope->ownerNode = switchCase; + manager->nodeScopes.Add(switchCase.Obj(), caseScope); + + FOREACH(Ptr, argument, switchCase->arguments) + { + Ptr symbol = new WfLexicalSymbol(caseScope.Obj()); + symbol->name = argument->name.value; + symbol->creatorNode = argument; + caseScope->symbols.Add(symbol->name, symbol); + } + + BuildScopeForStatement(manager, caseScope, switchCase->statement); + } + } + + void Visit(WfStateInvokeStatement* node)override + { + FOREACH(Ptr, argument, node->arguments) + { + BuildScopeForExpression(manager, parentScope, argument); + } + } + static Ptr Execute(WfLexicalScopeManager* manager, Ptr parentScope, Ptr statement) { BuildScopeForStatementVisitor visitor(manager, parentScope); @@ -13121,7 +14804,7 @@ BuildScopeForExpression class BuildScopeForExpressionVisitor : public Object , public WfExpression::IVisitor - , public WfVirtualExpression::IVisitor + , public WfVirtualCseExpression::IVisitor { public: WfLexicalScopeManager* manager; @@ -13363,7 +15046,7 @@ BuildScopeForExpression { } - void Dispatch(WfVirtualDeclaration* node)override + void Dispatch(WfVirtualCfeDeclaration* node)override { FOREACH(Ptr, decl, node->expandedDeclarations) { @@ -13371,6 +15054,10 @@ BuildScopeForExpression } } + void Dispatch(WfVirtualCseDeclaration* node)override + { + } + void Visit(WfFunctionDeclaration* node)override { manager->CreateLambdaCapture(node, capture); @@ -13391,13 +15078,14 @@ BuildScopeForExpression } } - void Visit(WfVirtualExpression* node)override + void Visit(WfVirtualCfeExpression* node)override { - node->Accept((WfVirtualExpression::IVisitor*)this); - if (node->expandedExpression) - { - BuildScopeForExpression(manager, parentScope, node->expandedExpression); - } + BuildScopeForExpression(manager, parentScope, node->expandedExpression); + } + + void Visit(WfVirtualCseExpression* node)override + { + node->Accept((WfVirtualCseExpression::IVisitor*)this); } void Visit(WfBindExpression* node)override @@ -13405,10 +15093,6 @@ BuildScopeForExpression BuildScopeForExpression(manager, parentScope, node->expression); } - void Visit(WfFormatExpression* node)override - { - } - void Visit(WfNewCoroutineExpression* node)override { manager->CreateLambdaCapture(node); @@ -13444,6 +15128,10 @@ BuildScopeForExpression BuildScopeForExpression(manager, parentScope, node->expression); } + void Visit(WfCoOperatorExpression* node)override + { + } + static Ptr Execute(WfLexicalScopeManager* manager, Ptr parentScope, Ptr expression) { BuildScopeForExpressionVisitor visitor(manager, parentScope); @@ -13536,6 +15224,34 @@ CheckScopes_DuplicatedSymbol { manager->errors.Add(WfErrors::DuplicatedSymbol(expr.Obj(), symbol)); } + else if (auto input = symbol->creatorNode.Cast()) + { + if (symbols.Count() == 2) + { + // Ignore the generated function from the state input + auto methodSymbol = symbols[1 - symbols.IndexOf(symbol.Obj())]; + auto funcDecl = methodSymbol->creatorNode.Cast(); + vint index = manager->declarationMemberInfos.Keys().IndexOf(funcDecl.Obj()); + if (index != -1) + { + auto methodInfo = manager->declarationMemberInfos.Values()[index]; + if (manager->stateInputMethods[input.Obj()].Obj() == methodInfo.Obj()) + { + goto NO_ERROR; + } + } + } + manager->errors.Add(WfErrors::DuplicatedSymbol(input.Obj(), symbol)); + NO_ERROR:; + } + else if (auto state = symbol->creatorNode.Cast()) + { + manager->errors.Add(WfErrors::DuplicatedSymbol(state.Obj(), symbol)); + } + else if (auto sarg = symbol->creatorNode.Cast()) + { + manager->errors.Add(WfErrors::DuplicatedSymbol(sarg.Obj(), symbol)); + } } } } @@ -13570,7 +15286,10 @@ namespace vl CompleteScopeForClassMember ***********************************************************************/ - class CompleteScopeForClassMemberVisitor : public Object, public WfDeclaration::IVisitor + class CompleteScopeForClassMemberVisitor + : public Object + , public WfDeclaration::IVisitor + , public WfVirtualCseDeclaration::IVisitor { public: WfLexicalScopeManager* manager; @@ -13693,7 +15412,7 @@ CompleteScopeForClassMember CompleteScopeForDeclaration(manager, node); } - void Visit(WfVirtualDeclaration* node)override + void Visit(WfVirtualCfeDeclaration* node)override { FOREACH(Ptr, decl, node->expandedDeclarations) { @@ -13701,6 +15420,48 @@ CompleteScopeForClassMember } } + void Visit(WfVirtualCseDeclaration* node)override + { + node->Accept((WfVirtualCseDeclaration::IVisitor*)this); + } + + void Visit(WfStateMachineDeclaration* node) + { + auto scope = manager->nodeScopes[node]; + FOREACH(Ptr, input, node->inputs) + { + auto method = manager->stateInputMethods[input.Obj()]; + method->SetReturn(TypeInfoRetriver::CreateTypeInfo()); + + FOREACH(Ptr, argument, input->arguments) + { + if (auto typeInfo = CreateTypeInfoFromType(scope.Obj(), argument->type)) + { + auto field = manager->stateInputArguments[argument.Obj()]; + field->SetReturn(typeInfo); + + method->AddParameter(MakePtr(method.Obj(), argument->name.value, typeInfo)); + } + } + } + + FOREACH(Ptr, state, node->states) + { + FOREACH(Ptr, argument, state->arguments) + { + if (auto typeInfo = CreateTypeInfoFromType(scope.Obj(), argument->type)) + { + auto field = manager->stateDeclArguments[argument.Obj()]; + field->SetReturn(typeInfo); + } + } + } + + auto& smInfo = manager->stateMachineInfos[node]; + smInfo->createCoroutineMethod->AddParameter(MakePtr(smInfo->createCoroutineMethod.Obj(), L"startState", TypeInfoRetriver::CreateTypeInfo())); + smInfo->createCoroutineMethod->SetReturn(TypeInfoRetriver::CreateTypeInfo()); + } + static void Execute(WfLexicalScopeManager* manager, Ptr td, Ptr classDecl, Ptr memberDecl) { CompleteScopeForClassMemberVisitor visitor(manager, td, classDecl); @@ -13712,7 +15473,10 @@ CompleteScopeForClassMember CompleteScopeForDeclaration ***********************************************************************/ - class CompleteScopeForDeclarationVisitor : public Object, public WfDeclaration::IVisitor + class CompleteScopeForDeclarationVisitor + : public Object + , public WfDeclaration::IVisitor + , public WfVirtualCseDeclaration::IVisitor { public: WfLexicalScopeManager* manager; @@ -13854,7 +15618,7 @@ CompleteScopeForDeclaration } } - void Visit(WfVirtualDeclaration* node)override + void Visit(WfVirtualCfeDeclaration* node)override { FOREACH(Ptr, decl, node->expandedDeclarations) { @@ -13862,6 +15626,19 @@ CompleteScopeForDeclaration } } + void Visit(WfVirtualCseDeclaration* node)override + { + node->Accept((WfVirtualCseDeclaration::IVisitor*)this); + FOREACH(Ptr, decl, node->expandedDeclarations) + { + decl->Accept(this); + } + } + + void Visit(WfStateMachineDeclaration* node)override + { + } + static void Execute(WfLexicalScopeManager* manager, Ptr declaration) { CompleteScopeForDeclarationVisitor visitor(manager, declaration); @@ -13873,7 +15650,9 @@ CompleteScopeForDeclaration CheckBaseClass ***********************************************************************/ - class CheckBaseClassDeclarationVisitor : public empty_visitor::DeclarationVisitor + class CheckBaseClassDeclarationVisitor + : public empty_visitor::DeclarationVisitor + , public empty_visitor::VirtualCseDeclarationVisitor { public: WfLexicalScopeManager* manager; @@ -13885,7 +15664,7 @@ CheckBaseClass { } - void Dispatch(WfVirtualDeclaration* node)override + void Dispatch(WfVirtualCfeDeclaration* node)override { FOREACH(Ptr, decl, node->expandedDeclarations) { @@ -13893,6 +15672,11 @@ CheckBaseClass } } + void Dispatch(WfVirtualCseDeclaration* node)override + { + node->Accept((WfVirtualCseDeclaration::IVisitor*)this); + } + void Visit(WfNamespaceDeclaration* node)override { FOREACH(Ptr, decl, node->declarations) @@ -14012,14 +15796,6 @@ CheckBaseClass } } - void Visit(WfEnumDeclaration* node)override - { - } - - void Visit(WfStructDeclaration* node)override - { - } - static void Execute(WfLexicalScopeManager* manager, Ptr declaration) { CompleteScopeForDeclarationVisitor visitor(manager, declaration); @@ -14129,18 +15905,45 @@ SetCodeRange { public: ParsingTextRange range; + bool asOffset; - SetCodeRangeVisitor(ParsingTextRange _range) + SetCodeRangeVisitor(ParsingTextRange _range, bool _asOffset) :range(_range) + , asOffset(_asOffset) { } + void UpdateTextPos(ParsingTextPos& pos) + { + if (pos.row == -1 || pos.column == -1) + { + pos = range.start; + } + else + { + if (pos.row == 0) + { + pos.column += range.start.column; + } + pos.row += range.start.row; + } + } + void Traverse(ParsingTreeCustomBase* node)override { if (node->codeRange == ParsingTextRange()) { node->codeRange = range; } + else if (asOffset) + { + UpdateTextPos(node->codeRange.start); + UpdateTextPos(node->codeRange.end); + if (node->codeRange.codeIndex == -1) + { + node->codeRange.codeIndex = range.codeIndex; + } + } } void Traverse(ParsingToken& token)override @@ -14149,32 +15952,41 @@ SetCodeRange { token.codeRange = range; } + else if (asOffset) + { + UpdateTextPos(token.codeRange.start); + UpdateTextPos(token.codeRange.end); + if (token.codeRange.codeIndex == -1) + { + token.codeRange.codeIndex = range.codeIndex; + } + } } }; - void SetCodeRange(Ptr node, parsing::ParsingTextRange codeRange) + void SetCodeRange(Ptr node, parsing::ParsingTextRange codeRange, bool asOffset) { - SetCodeRangeVisitor(codeRange).VisitField(node.Obj()); + SetCodeRangeVisitor(codeRange, asOffset).VisitField(node.Obj()); } - void SetCodeRange(Ptr node, parsing::ParsingTextRange codeRange) + void SetCodeRange(Ptr node, parsing::ParsingTextRange codeRange, bool asOffset) { - SetCodeRangeVisitor(codeRange).VisitField(node.Obj()); + SetCodeRangeVisitor(codeRange, asOffset).VisitField(node.Obj()); } - void SetCodeRange(Ptr node, parsing::ParsingTextRange codeRange) + void SetCodeRange(Ptr node, parsing::ParsingTextRange codeRange, bool asOffset) { - SetCodeRangeVisitor(codeRange).VisitField(node.Obj()); + SetCodeRangeVisitor(codeRange, asOffset).VisitField(node.Obj()); } - void SetCodeRange(Ptr node, parsing::ParsingTextRange codeRange) + void SetCodeRange(Ptr node, parsing::ParsingTextRange codeRange, bool asOffset) { - SetCodeRangeVisitor(codeRange).VisitField(node.Obj()); + SetCodeRangeVisitor(codeRange, asOffset).VisitField(node.Obj()); } - void SetCodeRange(Ptr node, parsing::ParsingTextRange codeRange) + void SetCodeRange(Ptr node, parsing::ParsingTextRange codeRange, bool asOffset) { - SetCodeRangeVisitor(codeRange).VisitField(node.Obj()); + SetCodeRangeVisitor(codeRange, asOffset).VisitField(node.Obj()); } /*********************************************************************** @@ -14203,6 +16015,10 @@ ContextFreeModuleDesugar List> expressions; const wchar_t* reading = node->value.value.Buffer(); + const wchar_t* textPosCounter = reading; + ParsingTextPos formatPos = node->codeRange.start; + formatPos.column += 2; + while (*reading) { const wchar_t* begin = wcsstr(reading, L"$("); @@ -14251,6 +16067,21 @@ ContextFreeModuleDesugar if (auto expression = WfParseExpression(input, manager->parsingTable, errors)) { expressions.Add(expression); + + while (textPosCounter++ < begin + 2) + { + switch (textPosCounter[-1]) + { + case '\n': + formatPos.row++; + formatPos.column = 0; + break; + default: + formatPos.column++; + break; + } + } + SetCodeRange(expression, { formatPos,formatPos,node->codeRange.codeIndex }, true); } FOREACH(Ptr, originalError, errors) { @@ -14341,7 +16172,7 @@ ContextFreeModuleDesugar decl->name.value = varName; decl->type = CopyType(node->type); - decl->expression = CopyExpression(node->expression); + decl->expression = CopyExpression(node->expression, true); auto att = MakePtr(); att->category.value = L"cpp"; @@ -14522,37 +16353,68 @@ ContextFreeModuleDesugar decl->name.value = node->name.value; decl->baseTypes.Add(CopyType(node->baseType)); - auto funcDecl = MakePtr(); - decl->declarations.Add(funcDecl); { - funcDecl->classMember = MakePtr(); - funcDecl->classMember->kind = WfClassMemberKind::Static; - } - funcDecl->anonymity = WfFunctionAnonymity::Named; - funcDecl->name.value = L"CastResult"; - funcDecl->returnType = CopyType(node->elementType); - { - auto argument = MakePtr(); - funcDecl->arguments.Add(argument); - argument->name.value = L"value"; - argument->type = GetTypeFromTypeInfo(TypeInfoRetriver::CreateTypeInfo().Obj()); + auto funcDecl = MakePtr(); + decl->declarations.Add(funcDecl); + { + funcDecl->classMember = MakePtr(); + funcDecl->classMember->kind = WfClassMemberKind::Static; + } + funcDecl->anonymity = WfFunctionAnonymity::Named; + funcDecl->name.value = L"CastResult"; + funcDecl->returnType = CopyType(node->elementType); + { + auto argument = MakePtr(); + funcDecl->arguments.Add(argument); + argument->name.value = L"value"; + argument->type = GetTypeFromTypeInfo(TypeInfoRetriver::CreateTypeInfo().Obj()); + } + { + auto block = MakePtr(); + funcDecl->statement = block; + + auto refValue = MakePtr(); + refValue->name.value = L"value"; + + auto castExpr = MakePtr(); + castExpr->strategy = WfTypeCastingStrategy::Strong; + castExpr->type = CopyType(node->elementType); + castExpr->expression = refValue; + + auto stat = MakePtr(); + stat->expression = castExpr; + + block->statements.Add(stat); + } } { - auto block = MakePtr(); - funcDecl->statement = block; + auto funcDecl = MakePtr(); + decl->declarations.Add(funcDecl); + { + funcDecl->classMember = MakePtr(); + funcDecl->classMember->kind = WfClassMemberKind::Static; + } + funcDecl->anonymity = WfFunctionAnonymity::Named; + funcDecl->name.value = L"StoreResult"; + funcDecl->returnType = GetTypeFromTypeInfo(TypeInfoRetriver::CreateTypeInfo().Obj()); + { + auto argument = MakePtr(); + funcDecl->arguments.Add(argument); + argument->name.value = L"value"; + argument->type = CopyType(node->elementType); + } + { + auto block = MakePtr(); + funcDecl->statement = block; - auto refValue = MakePtr(); - refValue->name.value = L"value"; + auto refValue = MakePtr(); + refValue->name.value = L"value"; - auto castExpr = MakePtr(); - castExpr->strategy = WfTypeCastingStrategy::Strong; - castExpr->type = CopyType(node->elementType); - castExpr->expression = refValue; + auto stat = MakePtr(); + stat->expression = refValue; - auto stat = MakePtr(); - stat->expression = castExpr; - - block->statements.Add(stat); + block->statements.Add(stat); + } } SetCodeRange(Ptr(decl), node->codeRange); @@ -14999,6 +16861,11 @@ WfErrors return new ParsingError(node, L"C8: $Operator statement should appear inside a coroutine function (which has a functiona body like ${} or $Provider{})."); } + Ptr WfErrors::WrongCoOperator(WfExpression* node) + { + return new ParsingError(node, L"C8: $.Operator expression should appear inside a coroutine function (which has a functiona body like ${} or $Provider{})."); + } + Ptr WfErrors::CoProviderNotExists(WfCoProviderStatement* node, collections::List& candidates) { WString description; @@ -15035,6 +16902,11 @@ WfErrors } } + Ptr WfErrors::CoOperatorNotExists(WfCoOperatorExpression* node, reflection::description::ITypeInfo* type) + { + return new ParsingError(node, L"C10: Static function \"QueryContext\" does not exist in coroutine provider \"" + type->GetTypeFriendlyName() + L"\"."); + } + Ptr WfErrors::CoOperatorCannotResolveResultType(WfCoOperatorStatement* node, collections::List& types) { auto operatorName = node->opName.value.Right(node->opName.value.Length() - 1); @@ -15064,6 +16936,46 @@ WfErrors return new ParsingError(node, L"C12: The required static function \"CreateAndRun\" does not exist in coroutine provider \"" + type->GetTypeFriendlyName() + L"\". It is required to have exactly one argument of a function type, which consumes a pointer type and returns system::Coroutine^"); } + Ptr WfErrors::GotoLabelNotExists(WfGotoStatement* node) + { + return new ParsingError(node, L"C13: Goto label \"" + node->label.value + L"\" does not exists. A goto label can only jump to the end of any block statement that contains this goto statement in the current function."); + } + + Ptr WfErrors::TooManyGotoLabel(WfGotoStatement* node) + { + return new ParsingError(node, L"C14: Too many goto targets \"" + node->label.value + L"\" found."); + } + + Ptr WfErrors::WrongStateSwitchStatement(WfStateSwitchStatement* node) + { + return new ParsingError(node, L"C15: $switch statement should appear inside a $state declaration."); + } + + Ptr WfErrors::WrongStateInvokeStatement(WfStateInvokeStatement* node) + { + return new ParsingError(node, L"C16: $goto_state or $push_state statement should appear inside a $state declaration."); + } + + Ptr WfErrors::StateInputNotExists(WfStateSwitchCase* node) + { + return new ParsingError(node, L"C17: State input \"" + node->name.value + L"\" does not exist."); + } + + Ptr WfErrors::StateSwitchArgumentCountNotMatch(WfStateSwitchCase* node) + { + return new ParsingError(node, L"C18: The number of arguments doesn not match the declaration of state input \"" + node->name.value + L"\"."); + } + + Ptr WfErrors::StateNotExists(WfStateInvokeStatement* node) + { + return new ParsingError(node, L"C19: State \"" + node->name.value + L"\" does not exist."); + } + + Ptr WfErrors::StateArgumentCountNotMatch(WfStateInvokeStatement* node) + { + return new ParsingError(node, L"C20: The number of arguments doesn not match the declaration of state \"" + node->name.value + L"\"."); + } + Ptr WfErrors::FunctionShouldHaveName(WfDeclaration* node) { return new ParsingError(node, L"D0: Function should have a name."); @@ -15084,6 +16996,11 @@ WfErrors return new ParsingError(node, L"D1: Duplicated declaration \"" + node->name.value + L"\", it has already beed defined as a " + firstDeclarationCategory + L"."); } + Ptr WfErrors::DuplicatedDeclaration(WfStateMachineDeclaration* node) + { + return new ParsingError(node, L"D1: Duplicated $state_machine declaration."); + } + Ptr WfErrors::DuplicatedSymbol(WfDeclaration* node, Ptr symbol) { return new ParsingError(node, L"D2: Duplicated symbol \"" + symbol->name + L"\"."); @@ -15104,6 +17021,21 @@ WfErrors return new ParsingError(node, L"D2: Duplicated symbol \"" + symbol->name + L"\"."); } + Ptr WfErrors::DuplicatedSymbol(WfStateInput* node, Ptr symbol) + { + return new ParsingError(node, L"D2: Duplicated symbol \"" + symbol->name + L"\"."); + } + + Ptr WfErrors::DuplicatedSymbol(WfStateDeclaration* node, Ptr symbol) + { + return new ParsingError(node, L"D2: Duplicated symbol \"" + symbol->name + L"\"."); + } + + Ptr WfErrors::DuplicatedSymbol(WfStateSwitchArgument* node, Ptr symbol) + { + return new ParsingError(node, L"D2: Duplicated symbol \"" + symbol->name + L"\"."); + } + Ptr WfErrors::InterfaceMethodNotImplemented(WfNewInterfaceExpression* node, reflection::description::IMethodInfo* method) { auto result = ResolveExpressionResult::Method(method); @@ -15156,6 +17088,11 @@ WfErrors return new ParsingError(node, L"D7: Auto-property cannot be defined outside of classes."); } + Ptr WfErrors::WrongDeclaration(WfStateMachineDeclaration* node) + { + return new ParsingError(node, L"D7: State machine cannot be defined outside of classes."); + } + Ptr WfErrors::WrongDeclarationInInterfaceConstructor(WfDeclaration* node) { return new ParsingError(node, L"D8: \"" + node->name.value + L"\" cannot be defined in an new interface expression, only functions, variables and auto-properties are allowed."); @@ -15206,6 +17143,16 @@ WfErrors return new ParsingError(node, L"D15: Value of attribute \"" + node->category.value + L":" + node->name.value + L"\" is missing."); } + Ptr WfErrors::StateMachineClassNotInheritFromStateMachine(WfClassDeclaration* node) + { + return new ParsingError(node, L"D16: State machine class \"" + node->name.value + L"\" should inherit from \"system::StateMachine\" directly."); + } + + Ptr WfErrors::MissingDefaultState(WfStateMachineDeclaration* node) + { + return new ParsingError(node, L"D17: Missing default state."); + } + Ptr WfErrors::WrongUsingPathWildCard(WfModuleUsingPath* node) { return new ParsingError(node, L"E0: Wild card \"*\" should only appear in the last item of the using path and should appear once."); @@ -15404,6 +17351,180 @@ namespace vl using namespace collections; using namespace reflection; using namespace reflection::description; + using namespace parsing; + +/*********************************************************************** +SearchUntilNonVirtualStatement +***********************************************************************/ + + class SearchUntilNonVirtualStatementVisitor : public empty_visitor::StatementVisitor + { + public: + Ptr result; + + SearchUntilNonVirtualStatementVisitor(Ptr _result) + :result(_result) + { + } + + void Dispatch(WfVirtualCseStatement* node)override + { + result = node->expandedStatement; + result->Accept(this); + } + + void Dispatch(WfCoroutineStatement* node)override + { + } + + void Dispatch(WfStateMachineStatement* node)override + { + } + }; + + Ptr SearchUntilNonVirtualStatement(Ptr statement) + { + SearchUntilNonVirtualStatementVisitor visitor(statement); + statement->Accept(&visitor); + return visitor.result; + } + +/*********************************************************************** +Copy(Type|Expression|Statement|Declaration) +***********************************************************************/ + + class CopyDeclarationWithExpandVirtualVisitor : empty_visitor::DeclarationVisitor + { + public: + bool expanded = false; + List>& decls; + + CopyDeclarationWithExpandVirtualVisitor(List>& _decls) + :decls(_decls) + { + } + + void Dispatch(WfVirtualCfeDeclaration* node)override + { + expanded = true; + FOREACH(Ptr, decl, node->expandedDeclarations) + { + Execute(decls, decl); + } + } + + void Dispatch(WfVirtualCseDeclaration* node)override + { + expanded = true; + FOREACH(Ptr, decl, node->expandedDeclarations) + { + Execute(decls, decl); + } + } + + static void Execute(List>& decls, Ptr decl) + { + CopyDeclarationWithExpandVirtualVisitor visitor(decls); + decl->Accept(&visitor); + if (!visitor.expanded) + { + decls.Add(decl); + } + } + }; + + void CopyWithExpandVirtualVisitor::Expand(collections::List>& decls) + { + if (expandVirtualAst) + { + List> copied; + CopyFrom(copied, decls); + decls.Clear(); + + FOREACH(Ptr, decl, copied) + { + CopyDeclarationWithExpandVirtualVisitor::Execute(decls, decl); + } + } + } + + CopyWithExpandVirtualVisitor::CopyWithExpandVirtualVisitor(bool _expandVirtualAst) + :expandVirtualAst(_expandVirtualAst) + { + } + + Ptr CopyWithExpandVirtualVisitor::Dispatch(WfVirtualCfeExpression* node) + { + if (!expandVirtualAst || !node->expandedExpression) + { + return copy_visitor::ModuleVisitor::Dispatch(node); + } + node->expandedExpression->Accept(this); + return result; + } + + Ptr CopyWithExpandVirtualVisitor::Dispatch(WfVirtualCseExpression* node) + { + if (!expandVirtualAst || !node->expandedExpression) + { + return copy_visitor::ModuleVisitor::Dispatch(node); + } + node->expandedExpression->Accept(this); + return result; + } + + Ptr CopyWithExpandVirtualVisitor::Dispatch(WfVirtualCseStatement* node) + { + if (!expandVirtualAst || !node->expandedStatement) + { + return copy_visitor::ModuleVisitor::Dispatch(node); + } + node->expandedStatement->Accept(this); + return result; + } + + void CopyWithExpandVirtualVisitor::Visit(WfNamespaceDeclaration* node) + { + copy_visitor::DeclarationVisitor::Visit(node); + Expand(node->declarations); + } + + void CopyWithExpandVirtualVisitor::Visit(WfClassDeclaration* node) + { + copy_visitor::DeclarationVisitor::Visit(node); + Expand(node->declarations); + } + + void CopyWithExpandVirtualVisitor::Visit(WfNewInterfaceExpression* node) + { + copy_visitor::ExpressionVisitor::Visit(node); + Expand(node->declarations); + } + + Ptr CopyType(Ptr type) + { + return CopyWithExpandVirtualVisitor(false).CreateField(type); + } + + Ptr CopyExpression(Ptr expression, bool expandVirtualExprStat) + { + return CopyWithExpandVirtualVisitor(expandVirtualExprStat).CreateField(expression); + } + + Ptr CopyStatement(Ptr statement, bool expandVirtualExprStat) + { + return CopyWithExpandVirtualVisitor(expandVirtualExprStat).CreateField(statement); + } + + Ptr CopyDeclaration(Ptr declaration, bool expandVirtualExprStat) + { + return CopyWithExpandVirtualVisitor(expandVirtualExprStat).CreateField(declaration); + } + + Ptr CopyModule(Ptr module, bool expandVirtualExprStat) + { + return CopyWithExpandVirtualVisitor(expandVirtualExprStat).CreateField(module); + } /*********************************************************************** observing expressions: @@ -15795,36 +17916,17 @@ CreateBindContext // root expression, nothing to do } - void Visit(WfVirtualExpression* node)override + void Visit(WfVirtualCfeExpression* node)override + { + DirectDepend(node, node->expandedExpression.Obj()); + } + + void Visit(WfVirtualCseExpression* node)override { DirectDepend(node, node->expandedExpression.Obj()); } }; -/*********************************************************************** -Copy(Type|Expression|Statement|Declaration) -***********************************************************************/ - - Ptr CopyType(Ptr type) - { - return copy_visitor::ModuleVisitor().CreateField(type); - } - - Ptr CopyExpression(Ptr expression) - { - return copy_visitor::ModuleVisitor().CreateField(expression); - } - - Ptr CopyStatement(Ptr statement) - { - return copy_visitor::ModuleVisitor().CreateField(statement); - } - - Ptr CopyDeclaration(Ptr declaration) - { - return copy_visitor::ModuleVisitor().CreateField(declaration); - } - /*********************************************************************** ExpandObserveExpression ***********************************************************************/ @@ -15836,18 +17938,22 @@ ExpandObserveExpression return ref; } - class ExpandObserveExpressionVisitor - : public copy_visitor::ExpressionVisitor - , public copy_visitor::VirtualExpressionVisitor + class ExpandObserveExpressionVisitor : public CopyWithExpandVirtualVisitor { public: BindContext& context; ExpandObserveExpressionVisitor(BindContext& _context) - :context(_context) + :CopyWithExpandVirtualVisitor(true) + , context(_context) { } + vl::Ptr CreateField(vl::Ptr from)override + { + return Execute(from.Obj(), context); + } + static Ptr Execute(WfExpression* expression, BindContext& context, bool expandImmediately = true) { if (!expression) @@ -15875,32 +17981,6 @@ ExpandObserveExpression return visitor.result.Cast(); } - vl::Ptr CreateField(vl::Ptr from)override - { - return Execute(from.Obj(), context); - } - - vl::Ptr CreateField(vl::Ptr from)override - { - return CopyType(from); - } - - vl::Ptr CreateField(vl::Ptr from)override - { - return CopyStatement(from); - } - - vl::Ptr CreateField(vl::Ptr from)override - { - return CopyDeclaration(from); - } - - vl::Ptr Dispatch(WfVirtualExpression* node)override - { - node->Accept((WfVirtualExpression::IVisitor*)this); - return result; - } - void Visit(WfLetExpression* node)override { auto letExpr = MakePtr(); @@ -16679,7 +18759,7 @@ ExpandNewCoroutineExpression varDecl->classMember->kind = WfClassMemberKind::Normal; } varDecl->name.value = L""; - varDecl->expression = CopyExpression(node->expression); + varDecl->expression = CopyExpression(node->expression, true); if (sourceType->GetDecorator() == ITypeInfo::RawPtr) { @@ -16723,7 +18803,7 @@ ExpandNewCoroutineExpression { auto parameter = method->GetParameter(l); auto argument = MakePtr(); - argument->name.value = parameter->GetName(); + argument->name.value = L"" + parameter->GetName(); argument->type = GetTypeFromTypeInfo(parameter->GetType()); funcDecl->arguments.Add(argument); } @@ -16774,7 +18854,7 @@ ExpandNewCoroutineExpression auto parameter = method->GetParameter(l); auto argumentExpr = MakePtr(); - argumentExpr->name.value = parameter->GetName(); + argumentExpr->name.value = L"" + parameter->GetName(); callExpr->arguments.Add(argumentExpr); } @@ -16824,6 +18904,18 @@ namespace vl using namespace reflection; using namespace reflection::description; + Ptr GenerateCoroutineInvalidId() + { + auto refOne = MakePtr(); + refOne->value.value = L"1"; + + auto refInvalid = MakePtr(); + refInvalid->op = WfUnaryOperator::Negative; + refInvalid->operand = refOne; + + return refInvalid; + } + /*********************************************************************** FindCoroutineAwaredStatements ***********************************************************************/ @@ -16852,7 +18944,7 @@ FindCoroutineAwaredStatements return awared; } - void Dispatch(WfVirtualStatement* node)override + void Dispatch(WfVirtualCseStatement* node)override { awared = Call(node->expandedStatement); } @@ -16862,6 +18954,21 @@ FindCoroutineAwaredStatements awared = true; } + void Dispatch(WfStateMachineStatement* node)override + { + CHECK_FAIL(L"FindCoroutineAwaredStatementVisitor::Visit(WfStateMachineStatement*)#Internal error, state machine statement is not allowed in $coroutine expression."); + } + + void Visit(WfBreakStatement* node)override + { + awared = true; + } + + void Visit(WfContinueStatement* node)override + { + awared = true; + } + void Visit(WfReturnStatement* node)override { awared = true; @@ -16897,6 +19004,11 @@ FindCoroutineAwaredStatements } awared = result; } + + void Visit(WfGotoStatement* node)override + { + awared = true; + } }; void FindCoroutineAwaredStatements(Ptr node, List& awaredStatements) @@ -16918,7 +19030,7 @@ FindCoroutineAwaredVariables { } - void Dispatch(WfVirtualStatement* node)override + void Dispatch(WfVirtualCseStatement* node)override { node->expandedStatement->Accept(this); } @@ -16927,6 +19039,11 @@ FindCoroutineAwaredVariables { } + void Dispatch(WfStateMachineStatement* node)override + { + CHECK_FAIL(L"FindCoroutineAwaredVariableVisitor::Visit(WfStateMachineStatement*)#Internal error, state machine statement is not allowed in $coroutine expression."); + } + void Visit(WfVariableStatement* node)override { awaredVariables.Add(node); @@ -16943,7 +19060,7 @@ FindCoroutineAwaredVariables { } - void Dispatch(WfVirtualStatement* node)override + void Dispatch(WfVirtualCseStatement* node)override { // If an virtual node is coroutine awared // than its expandedStatement is also in the list @@ -16954,6 +19071,11 @@ FindCoroutineAwaredVariables { } + void Dispatch(WfStateMachineStatement* node)override + { + CHECK_FAIL(L"FindCoroutineAwaredBlockVisitor::Visit(WfStateMachineStatement*)#Internal error, state machine statement is not allowed in $coroutine expression."); + } + void Visit(WfBlockStatement* node)override { FindCoroutineAwaredVariableVisitor visitor(awaredVariables); @@ -17110,14 +19232,15 @@ FlowChart GenerateFlowChart ***********************************************************************/ - class GenerateFlowChartModuleVisitor : public copy_visitor::ModuleVisitor + class GenerateFlowChartModuleVisitor : public CopyWithExpandVirtualVisitor { public: WfLexicalScopeManager* manager; Dictionary& referenceRenaming; GenerateFlowChartModuleVisitor(WfLexicalScopeManager* _manager, Dictionary& _referenceRenaming) - :manager(_manager) + :CopyWithExpandVirtualVisitor(true) + , manager(_manager) , referenceRenaming(_referenceRenaming) { } @@ -17149,12 +19272,14 @@ GenerateFlowChart Function, Loop, TryCatch, + Block, }; struct ScopeContext { ScopeContext* parent = nullptr; ScopeType type = ScopeType::Function; + WString name; FlowChartNode* enterNode = nullptr; FlowChartNode* leaveNode = nullptr; ScopeContext* exitStatementScope = nullptr; @@ -17205,17 +19330,26 @@ GenerateFlowChart resultHead->statements.Add(statement); } - ScopeContext* InlineScopeExitCode(ScopeType untilScopeType, bool exclusive) + ScopeContext* InlineScopeExitCode(ScopeType untilScopeType, bool exclusive, const WString name = WString::Empty) { auto current = scopeContext; while (current) { - if (exclusive && current->type == untilScopeType) break; + bool found = false; + if (current->type == untilScopeType) + { + if (name == L"" || current->name == name) + { + found = true; + } + } + + if (exclusive && found) break; if (current->exitStatement) { AppendAwaredStatement(catchNode, current->exitStatementScope, current->exitStatement); } - if (!exclusive && current->type == untilScopeType) break; + if (!exclusive && found) break; current = current->parent; } return current; @@ -17243,20 +19377,33 @@ GenerateFlowChart void Visit(WfBreakStatement* node)override { auto targetContext = InlineScopeExitCode(ScopeType::Loop, false); - resultLast->destination = targetContext->leaveNode; + resultHead = flowChart->EnsureAppendStatement(headNode, catchNode); + resultLast = resultHead; + + auto branch = MakePtr(); + branch->destination = targetContext->leaveNode; + resultLast->branches.Add(branch); } void Visit(WfContinueStatement* node)override { auto targetContext = InlineScopeExitCode(ScopeType::Loop, true); - resultLast->destination = targetContext->enterNode; + resultHead = flowChart->EnsureAppendStatement(headNode, catchNode); + resultLast = resultHead; + + auto branch = MakePtr(); + branch->destination = targetContext->enterNode; + resultLast->branches.Add(branch); } void Visit(WfReturnStatement* node)override { auto targetContext = InlineScopeExitCode(ScopeType::Function, false); AppendUnawaredCopiedStatement(catchNode, scopeContext, COPY_AST(node)); - resultLast->destination = targetContext->leaveNode; + + auto branch = MakePtr(); + branch->destination = targetContext->leaveNode; + resultLast->branches.Add(branch); } void Visit(WfDeleteStatement* node)override @@ -17517,14 +19664,50 @@ GenerateFlowChart void Visit(WfBlockStatement* node)override { + if (node->endLabel.value == L"") + { + resultHead = flowChart->EnsureAppendStatement(headNode, catchNode); + resultLast = resultHead; + + FOREACH_INDEXER(Ptr, stat, index, node->statements) + { + auto pair = Execute(resultLast, catchNode, scopeContext, stat); + resultLast = pair.value; + } + } + else + { + resultHead = flowChart->EnsureAppendStatement(headNode, catchNode); + auto blockEnd = flowChart->CreateNode(catchNode); + resultLast = resultHead; + + ScopeContext blockContext; + blockContext.parent = scopeContext; + blockContext.type = ScopeType::Block; + blockContext.name = node->endLabel.value; + blockContext.enterNode = resultHead; + blockContext.leaveNode = blockEnd; + + FOREACH_INDEXER(Ptr, stat, index, node->statements) + { + auto pair = Execute(resultLast, catchNode, &blockContext, stat); + resultLast = pair.value; + } + + resultLast->destination = blockEnd; + resultLast = blockEnd; + } + } + + void Visit(WfGotoStatement* node)override + { + auto targetContext = InlineScopeExitCode(ScopeType::Block, false, node->label.value); resultHead = flowChart->EnsureAppendStatement(headNode, catchNode); resultLast = resultHead; - FOREACH_INDEXER(Ptr, stat, index, node->statements) - { - auto pair = Execute(resultLast, catchNode, scopeContext, stat); - resultLast = pair.value; - } + auto branch = MakePtr(); + branch->destination = targetContext->leaveNode; + resultLast->branches.Add(branch); } void Visit(WfVariableStatement* node)override @@ -17555,7 +19738,7 @@ GenerateFlowChart AppendUnawaredCopiedStatement(catchNode, scopeContext, COPY_AST(node)); } - void Visit(WfVirtualStatement* node)override + void Visit(WfVirtualCseStatement* node)override { node->expandedStatement->Accept(this); } @@ -17589,6 +19772,11 @@ GenerateFlowChart CHECK_FAIL(L"GenerateFlowChartStatementVisitor::Visit(WfCoOperatorStatement*)#Internal error, co-operator statement is not allowed in $coroutine expression."); } + void Visit(WfStateMachineStatement* node)override + { + CHECK_FAIL(L"GenerateFlowChartStatementVisitor::Visit(WfStateMachineStatement*)#Internal error, state machine statement is not allowed in $coroutine expression."); + } + #undef COPY_STATEMENT }; @@ -17795,6 +19983,41 @@ GenerateSetStatus GenerateSetCoState ***********************************************************************/ + Ptr GenerateSetCoStateBeforePause() + { + auto refBefore = MakePtr(); + refBefore->name.value = L""; + + auto refState = MakePtr(); + refState->name.value = L""; + + auto assignExpr = MakePtr(); + assignExpr->op = WfBinaryOperator::Assign; + assignExpr->first = refBefore; + assignExpr->second = refState; + + auto stat = MakePtr(); + stat->expression = assignExpr; + + return stat; + } + + Ptr GenerateSetCoStateBeforePauseToInvalid() + { + auto refBefore = MakePtr(); + refBefore->name.value = L""; + + auto assignExpr = MakePtr(); + assignExpr->op = WfBinaryOperator::Assign; + assignExpr->first = refBefore; + assignExpr->second = GenerateCoroutineInvalidId(); + + auto stat = MakePtr(); + stat->expression = assignExpr; + + return stat; + } + Ptr GenerateSetCoState(List& nodeOrders, FlowChartNode* node) { auto refState = MakePtr(); @@ -17876,6 +20099,7 @@ ExpandFlowChartNode // SetStatus(Waiting); ///////////////////////////////////////////////////////////////////////////// stateBlock->statements.Add(GenerateSetStatus(L"Waiting")); + stateBlock->statements.Add(GenerateSetCoStateBeforePause()); stateBlock->statements.Add(GenerateSetCoState(nodeOrders, flowChartNode->pauseDestination)); } @@ -17921,11 +20145,22 @@ ExpandFlowChartNode FOREACH(Ptr, branch, flowChartNode->branches) { - auto ifStat = MakePtr(); - ifStat->expression = branch->condition; + Ptr trueBlock; - auto trueBlock = MakePtr(); - ifStat->trueBranch = trueBlock; + if (branch->condition) + { + auto ifStat = MakePtr(); + ifStat->expression = branch->condition; + + trueBlock = MakePtr(); + ifStat->trueBranch = trueBlock; + + nodeBlock->statements.Add(ifStat); + } + else + { + trueBlock = nodeBlock; + } if (branch->destination->embedInBranch) { @@ -17936,8 +20171,6 @@ ExpandFlowChartNode trueBlock->statements.Add(GenerateSetCoState(nodeOrders, branch->destination)); trueBlock->statements.Add(MakePtr()); } - - nodeBlock->statements.Add(ifStat); } if (!exited) @@ -18048,6 +20281,24 @@ ExpandNewCoroutineExpression varDecl->expression = stateExpr; } + ///////////////////////////////////////////////////////////////////////////// + // + ///////////////////////////////////////////////////////////////////////////// + + { + auto varDecl = MakePtr(); + newExpr->declarations.Add(varDecl); + { + auto member = MakePtr(); + member->kind = WfClassMemberKind::Normal; + varDecl->classMember = member; + } + + varDecl->name.value = L""; + varDecl->type = GetTypeFromTypeInfo(TypeInfoRetriver::CreateTypeInfo().Obj()); + varDecl->expression = GenerateCoroutineInvalidId(); + } + ///////////////////////////////////////////////////////////////////////////// // prop Failure : Exception^ {const, not observe} ///////////////////////////////////////////////////////////////////////////// @@ -18099,6 +20350,7 @@ ExpandNewCoroutineExpression // func Resume( : bool, : CoroutineResult^) : void ///////////////////////////////////////////////////////////////////////////// + WString coResultName = node->name.value == L"" ? L"" : node->name.value; { auto funcDecl = MakePtr(); newExpr->declarations.Add(funcDecl); @@ -18108,6 +20360,7 @@ ExpandNewCoroutineExpression funcDecl->classMember = member; } + funcDecl->anonymity = WfFunctionAnonymity::Named; funcDecl->name.value = L"Resume"; funcDecl->returnType = GetTypeFromTypeInfo(TypeInfoRetriver::CreateTypeInfo().Obj()); { @@ -18119,14 +20372,7 @@ ExpandNewCoroutineExpression { auto argument = MakePtr(); funcDecl->arguments.Add(argument); - if (node->name.value == L"") - { - argument->name.value = L""; - } - else - { - argument->name.value = node->name.value; - } + argument->name.value = coResultName; argument->type = GetTypeFromTypeInfo(TypeInfoRetriver>::CreateTypeInfo().Obj()); } @@ -18181,6 +20427,234 @@ ExpandNewCoroutineExpression auto tryStat = MakePtr(); auto tryBlock = MakePtr(); tryStat->protectedStatement = tryBlock; + { + ///////////////////////////////////////////////////////////////////////////// + // if ((); + { + auto refBefore = MakePtr(); + refBefore->name.value = L""; + + auto compareInput = MakePtr(); + compareInput->op = WfBinaryOperator::NE; + compareInput->first = refBefore; + compareInput->second = GenerateCoroutineInvalidId(); + + auto ifStat = MakePtr(); + tryBlock->statements.Add(ifStat); + ifStat->expression = compareInput; + ifStat->trueBranch = trueBlock; + } + + ///////////////////////////////////////////////////////////////////////////// + // if ( is null) { = -1; } + // else if (.Failure is null) { = -1; } + // else { ... } + ///////////////////////////////////////////////////////////////////////////// + { + auto nullTrueBlock = MakePtr(); + Ptr* nullFalseBlock = nullptr; + auto exTrueBlock = MakePtr(); + auto exFalseBlock = MakePtr(); + + { + auto refOutput = MakePtr(); + refOutput->name.value = coResultName; + + auto testNullExpr = MakePtr(); + testNullExpr->test = WfTypeTesting::IsNull; + testNullExpr->expression = refOutput; + + auto ifStat = MakePtr(); + trueBlock->statements.Add(ifStat); + ifStat->expression = testNullExpr; + + ifStat->trueBranch = nullTrueBlock; + nullTrueBlock->statements.Add(GenerateSetCoStateBeforePauseToInvalid()); + nullFalseBlock = &ifStat->falseBranch; + } + { + auto refOutput = MakePtr(); + refOutput->name.value = coResultName; + + auto refFailure = MakePtr(); + refFailure->parent = refOutput; + refFailure->name.value = L"Failure"; + + auto testNullExpr = MakePtr(); + testNullExpr->test = WfTypeTesting::IsNull; + testNullExpr->expression = refFailure; + + auto ifStat = MakePtr(); + *nullFalseBlock = ifStat; + ifStat->expression = testNullExpr; + + ifStat->trueBranch = exTrueBlock; + exTrueBlock->statements.Add(GenerateSetCoStateBeforePauseToInvalid()); + ifStat->falseBranch = exFalseBlock; + } + { + ///////////////////////////////////////////////////////////////////////////// + // Handle exception from + ///////////////////////////////////////////////////////////////////////////// + + Ptr firstIfStatement; + Ptr* currentIfVar = &firstIfStatement; + + using GroupPair = Pair>; + auto nodeByCatches = From(nodeOrders) + .GroupBy([](FlowChartNode* node) + { + return node->exceptionDestination; + }) + .OrderBy([&](const GroupPair& p1, const GroupPair& p2) + { + return nodeOrders.IndexOf(p1.key) - nodeOrders.IndexOf(p2.key); + }); + + FOREACH(GroupPair, group, nodeByCatches) + { + auto catchNode = group.key; + if (!catchNode) continue; + + Ptr condition; + { + List> conditionRanges; + FOREACH(FlowChartNode*, flowChartNode, group.value) + { + vint state = nodeOrders.IndexOf(flowChartNode); + if (conditionRanges.Count() == 0) + { + conditionRanges.Add({ state,state }); + } + else if (conditionRanges[conditionRanges.Count() - 1].f1 == state - 1) + { + conditionRanges[conditionRanges.Count() - 1].f1 = state; + } + else + { + conditionRanges.Add({ state,state }); + } + } + + for (vint i = 0; i < conditionRanges.Count(); i++) + { + auto range = conditionRanges[i]; + + Ptr singleCondition; + if (range.f0 == range.f1) + { + auto refState = MakePtr(); + refState->name.value = L""; + + auto intState = MakePtr(); + intState->value.value = itow(range.f0); + + auto compExpr = MakePtr(); + compExpr->op = WfBinaryOperator::EQ; + compExpr->first = refState; + compExpr->second = intState; + + singleCondition = compExpr; + } + else + { + auto refState = MakePtr(); + refState->name.value = L""; + + auto intState1 = MakePtr(); + intState1->value.value = itow(range.f0); + + auto intState2 = MakePtr(); + intState2->value.value = itow(range.f1); + + auto rangeExpr = MakePtr(); + rangeExpr->begin = intState1; + rangeExpr->beginBoundary = WfRangeBoundary::Inclusive; + rangeExpr->end = intState2; + rangeExpr->endBoundary = WfRangeBoundary::Inclusive; + + auto compExpr = MakePtr(); + compExpr->test = WfSetTesting::In; + compExpr->element = refState; + compExpr->collection = rangeExpr; + + singleCondition = compExpr; + } + + if (condition) + { + auto orExpr = MakePtr(); + orExpr->op = WfBinaryOperator::Or; + orExpr->first = condition; + orExpr->second = singleCondition; + condition = orExpr; + } + else + { + condition = singleCondition; + } + } + } + + auto ifStat = MakePtr(); + *currentIfVar = ifStat; + currentIfVar = &ifStat->falseBranch; + ifStat->expression = condition; + + auto catchBlock = MakePtr(); + ifStat->trueBranch = catchBlock; + + catchBlock->statements.Add(GenerateSetCoStateBeforePauseToInvalid()); + { + auto refTarget = MakePtr(); + refTarget->name.value = referenceRenaming[catchNode->exceptionVariable]; + + auto refOutput = MakePtr(); + refOutput->name.value = coResultName; + + auto refFailure = MakePtr(); + refFailure->parent = refOutput; + refFailure->name.value = L"Failure"; + + auto assignExpr = MakePtr(); + assignExpr->op = WfBinaryOperator::Assign; + assignExpr->first = refTarget; + assignExpr->second = refFailure; + + auto stat = MakePtr(); + stat->expression = assignExpr; + catchBlock->statements.Add(stat); + } + catchBlock->statements.Add(GenerateSetCoState(nodeOrders, catchNode)); + } + + { + auto block = MakePtr(); + *currentIfVar = block; + + block->statements.Add(GenerateSetCoStateBeforePauseToInvalid()); + { + auto refOutput = MakePtr(); + refOutput->name.value = coResultName; + + auto refFailure = MakePtr(); + refFailure->parent = refOutput; + refFailure->name.value = L"Failure"; + + auto raiseStat = MakePtr(); + raiseStat->expression = refFailure; + + block->statements.Add(raiseStat); + } + } + + exFalseBlock->statements.Add(firstIfStatement); + } + } + } { ///////////////////////////////////////////////////////////////////////////// // while (true) { ... } @@ -18297,6 +20771,828 @@ ExpandNewCoroutineExpression } } } + +/*********************************************************************** +ExpandNewCoroutineExpression +***********************************************************************/ + + void ExpandCoOperatorExpression(WfLexicalScopeManager* manager, WfCoOperatorExpression* node) + { + auto scope = manager->nodeScopes[node].Obj(); + auto functionScope = scope->FindFunctionScope(); + auto newCoExpr = functionScope->ownerNode.Cast(); + auto providerType = manager->coNewCoroutineResolvings[newCoExpr.Obj()].type; + + auto refProvider = GetExpressionFromTypeDescriptor(providerType->GetTypeDescriptor()); + + auto refQueryContext = MakePtr(); + refQueryContext->parent = refProvider; + refQueryContext->name.value = L"QueryContext"; + + auto refImpl = MakePtr(); + refImpl->name.value = L""; + + auto refCall = MakePtr(); + refCall->function = refQueryContext; + refCall->arguments.Add(refImpl); + + auto refOperator = MakePtr(); + refOperator->parent = refCall; + refOperator->name.value = node->name.value; + + node->expandedExpression = refOperator; + } + } + } +} + +/*********************************************************************** +.\ANALYZER\WFANALYZER_EXPANDSTATEMACHINE.CPP +***********************************************************************/ + +namespace vl +{ + namespace workflow + { + namespace analyzer + { + using namespace collections; + using namespace reflection; + using namespace reflection::description; + +/*********************************************************************** +ExpandStateMachineStatementVisitor +***********************************************************************/ + + Ptr GenerateStateMachineInvalidId() + { + auto refOne = MakePtr(); + refOne->value.value = L"1"; + + auto refInvalid = MakePtr(); + refInvalid->op = WfUnaryOperator::Negative; + refInvalid->operand = refOne; + + return refInvalid; + } + + class ExpandStateMachineStatementVisitor + : public copy_visitor::StatementVisitor + , public copy_visitor::VirtualCseStatementVisitor + , public WfStateMachineStatement::IVisitor + { + protected: + WfLexicalScopeManager* manager; + WfStateMachineInfo* smInfo; + + public: + ExpandStateMachineStatementVisitor(WfLexicalScopeManager* _manager, WfStateMachineInfo* _smInfo) + :manager(_manager) + , smInfo(_smInfo) + { + } + + vl::Ptr CreateField(vl::Ptr from)override + { + return CopyExpression(from, true); + } + + vl::Ptr CreateField(vl::Ptr from)override + { + return CopyType(from); + } + + vl::Ptr CreateField(vl::Ptr from)override + { + if (!from) return nullptr; + from->Accept(this); + return result.Cast(); + } + + vl::Ptr Dispatch(WfVirtualCseStatement* node)override + { + node->Accept((WfVirtualCseStatement::IVisitor*)this); + return result; + } + + vl::Ptr Dispatch(WfCoroutineStatement* node)override + { + CHECK_FAIL(L"ExpandStateMachineStatementVisitor::Dispatch(WfCoroutineStatement*)#ValidateStatementStructure should check coroutine statement's location."); + } + + vl::Ptr Dispatch(WfStateMachineStatement* node)override + { + node->Accept((WfStateMachineStatement::IVisitor*)this); + return result; + } + + Ptr GenerateIngoreInputStatement() + { + auto refThis = MakePtr(); + refThis->name.value = L"stateMachineObject"; + + auto refInput = MakePtr(); + refInput->parent = refThis; + refInput->name.value = L"stateMachineInput"; + + auto assignExpr = MakePtr(); + assignExpr->op = WfBinaryOperator::Assign; + assignExpr->first = refInput; + assignExpr->second = GenerateStateMachineInvalidId(); + + auto exprStat = MakePtr(); + exprStat->expression = assignExpr; + + return exprStat; + } + + void GenerateStateSwitchCase(const WString& inputName, WfLexicalScope* smcScope, Ptr switchStat, Ptr& input, Ptr& caseBlock) + { + input = From(smcScope->symbols[inputName]) + .Select([=](Ptr symbol) + { + return symbol->creatorNode.Cast(); + }) + .Where([=](Ptr decl) + { + return decl != nullptr; + }) + .First(); + + auto switchCase = MakePtr(); + switchStat->caseBranches.Add(switchCase); + { + auto refInputId = MakePtr(); + refInputId->value.value = itow(smInfo->inputIds[inputName]); + switchCase->expression = refInputId; + } + + caseBlock = MakePtr(); + switchCase->statement = caseBlock; + caseBlock->statements.Add(GenerateIngoreInputStatement()); + } + + void Visit(WfStateSwitchStatement* node)override + { + auto smcScope = manager->nodeScopes[node]->FindFunctionScope()->parentScope.Obj(); + + auto block = MakePtr(); + { + auto refThis = MakePtr(); + refThis->name.value = L"stateMachineObject"; + + auto refInput = MakePtr(); + refInput->parent = refThis; + refInput->name.value = L"stateMachineInput"; + + auto compareInput = MakePtr(); + compareInput->op = WfBinaryOperator::EQ; + compareInput->first = refInput; + compareInput->second = GenerateStateMachineInvalidId(); + + auto ifStat = MakePtr(); + block->statements.Add(ifStat); + ifStat->expression = compareInput; + + auto trueBlock = MakePtr(); + ifStat->trueBranch = trueBlock; + + trueBlock->statements.Add(MakePtr()); + } + + auto switchStat = MakePtr(); + { + auto refThis = MakePtr(); + refThis->name.value = L"stateMachineObject"; + + auto refInput = MakePtr(); + refInput->parent = refThis; + refInput->name.value = L"stateMachineInput"; + + switchStat->expression = refInput; + } + block->statements.Add(switchStat); + + FOREACH(Ptr, stateSwitchCase, node->caseBranches) + { + Ptr input; + Ptr caseBlock; + GenerateStateSwitchCase(stateSwitchCase->name.value, smcScope, switchStat, input, caseBlock); + + FOREACH_INDEXER(Ptr, argument, index, stateSwitchCase->arguments) + { + auto refThis = MakePtr(); + refThis->name.value = L"stateMachineObject"; + + auto refArgument = MakePtr(); + refArgument->parent = refThis; + refArgument->name.value = manager->stateInputArguments[input->arguments[index].Obj()]->GetName(); + + auto varDecl = MakePtr(); + varDecl->name.value = argument->name.value; + varDecl->expression = refArgument; + + auto varStat = MakePtr(); + varStat->variable = varDecl; + caseBlock->statements.Add(varStat); + } + caseBlock->statements.Add(CreateField(stateSwitchCase->statement)); + SetCodeRange(Ptr(caseBlock), stateSwitchCase->codeRange); + } + + if (node->type == WfStateSwitchType::Default) + { + auto invalidInputs= + From(smInfo->inputIds.Keys()) + .Except( + From(node->caseBranches) + .Select([](Ptr switchCase) {return switchCase->name.value; }) + ); + FOREACH(WString, inputName, invalidInputs) + { + Ptr input; + Ptr caseBlock; + GenerateStateSwitchCase(inputName, smcScope, switchStat, input, caseBlock); + + { + auto refException = MakePtr(); + refException->value.value = L"Method \"" + inputName + L"\" of class \"" + manager->stateInputMethods[input.Obj()]->GetOwnerTypeDescriptor()->GetTypeName() + L"\" cannot be called at this moment."; + + auto raiseStat = MakePtr(); + raiseStat->expression = refException; + + caseBlock->statements.Add(raiseStat); + } + } + } + + auto defaultBlock = MakePtr(); + + switch (node->type) + { + case WfStateSwitchType::Default: + case WfStateSwitchType::Pass: + break; + case WfStateSwitchType::PassAndReturn: + { + auto gotoStat = MakePtr(); + gotoStat->label.value = L"OUT_OF_STATE_MACHINE"; + defaultBlock->statements.Add(gotoStat); + } + break; + case WfStateSwitchType::Ignore: + { + defaultBlock->statements.Add(GenerateIngoreInputStatement()); + } + break; + case WfStateSwitchType::IgnoreAndReturn: + { + defaultBlock->statements.Add(GenerateIngoreInputStatement()); + + auto gotoStat = MakePtr(); + gotoStat->label.value = L"OUT_OF_STATE_MACHINE"; + defaultBlock->statements.Add(gotoStat); + } + break; + } + + if (defaultBlock->statements.Count() > 0) + { + switchStat->defaultBranch = defaultBlock; + } + SetCodeRange(Ptr(block), node->codeRange); + result = block; + } + + void Visit(WfStateInvokeStatement* node)override + { + auto smcScope = manager->nodeScopes[node]->FindFunctionScope()->parentScope.Obj(); + auto stateDecl = From(smcScope->symbols[node->name.value]) + .Select([=](Ptr symbol) + { + return symbol->creatorNode.Cast(); + }) + .Where([=](Ptr decl) + { + return decl != nullptr; + }) + .First(); + + auto block = MakePtr(); + + FOREACH_INDEXER(Ptr, argument, index, stateDecl->arguments) + { + auto refThis = MakePtr(); + refThis->name.value = L"stateMachineObject"; + + auto refArgument = MakePtr(); + refArgument->parent = refThis; + refArgument->name.value = manager->stateDeclArguments[argument.Obj()]->GetName(); + + auto assignExpr = MakePtr(); + assignExpr->op = WfBinaryOperator::Assign; + assignExpr->first = refArgument; + assignExpr->second = CreateField(node->arguments[index]); + + auto exprStat = MakePtr(); + exprStat->expression = assignExpr; + block->statements.Add(exprStat); + } + + switch (node->type) + { + case WfStateInvokeType::Goto: + { + { + auto refState = MakePtr(); + refState->name.value = L"state"; + + auto refStateId = MakePtr(); + refStateId->value.value = itow(smInfo->stateIds[node->name.value]); + + auto assignExpr = MakePtr(); + assignExpr->op = WfBinaryOperator::Assign; + assignExpr->first = refState; + assignExpr->second = refStateId; + + auto exprStat = MakePtr(); + exprStat->expression = assignExpr; + block->statements.Add(exprStat); + } + { + auto gotoStat = MakePtr(); + gotoStat->label.value = L"OUT_OF_CURRENT_STATE"; + block->statements.Add(gotoStat); + } + } + break; + case WfStateInvokeType::Push: + { + { + auto refThis = MakePtr(); + refThis->name.value = L"stateMachineObject"; + + auto refCoroutine = MakePtr(); + refCoroutine->parent = refThis; + refCoroutine->name.value = L"CreateCoroutine"; + + auto refStateId = MakePtr(); + refStateId->value.value = itow(smInfo->stateIds[node->name.value]); + + auto callExpr = MakePtr(); + callExpr->function = refCoroutine; + callExpr->arguments.Add(refStateId); + + auto exprStat = MakePtr(); + exprStat->expression = callExpr; + block->statements.Add(exprStat); + } + { + block->statements.Add(MakePtr()); + } + } + break; + } + SetCodeRange(Ptr(block), node->codeRange); + result = block; + } + }; + +/*********************************************************************** +ExpandStateMachine +***********************************************************************/ + + void ExpandStateMachine(WfLexicalScopeManager* manager, WfStateMachineDeclaration* node) + { + auto& smInfo = manager->stateMachineInfos[node]; + + FOREACH(Ptr, input, node->inputs) + { + smInfo->inputIds.Add(input->name.value, smInfo->inputIds.Count()); + + FOREACH(Ptr, argument, input->arguments) + { + // var NAME = ; + auto fieldInfo = manager->stateInputArguments[argument.Obj()]; + + auto varDecl = MakePtr(); + varDecl->name.value = fieldInfo->GetName(); + varDecl->type = GetTypeFromTypeInfo(fieldInfo->GetReturn()); + varDecl->expression = CreateDefaultValue(fieldInfo->GetReturn()); + + auto classMember = MakePtr(); + classMember->kind = WfClassMemberKind::Normal; + varDecl->classMember = classMember; + + auto att = MakePtr(); + att->category.value = L"cpp"; + att->name.value = L"Private"; + varDecl->attributes.Add(att); + + node->expandedDeclarations.Add(varDecl); + manager->declarationMemberInfos.Add(varDecl, fieldInfo); + } + } + + smInfo->stateIds.Add(L"", 0); + FOREACH(Ptr, state, node->states) + { + if (state->name.value != L"") + { + smInfo->stateIds.Add(state->name.value, smInfo->stateIds.Count()); + } + + FOREACH(Ptr, argument, state->arguments) + { + // var NAME = ; + auto fieldInfo = manager->stateDeclArguments[argument.Obj()]; + + auto varDecl = MakePtr(); + varDecl->name.value = fieldInfo->GetName(); + varDecl->type = GetTypeFromTypeInfo(fieldInfo->GetReturn()); + varDecl->expression = CreateDefaultValue(fieldInfo->GetReturn()); + + auto classMember = MakePtr(); + classMember->kind = WfClassMemberKind::Normal; + varDecl->classMember = classMember; + + auto att = MakePtr(); + att->category.value = L"cpp"; + att->name.value = L"Private"; + varDecl->attributes.Add(att); + + node->expandedDeclarations.Add(varDecl); + manager->declarationMemberInfos.Add(varDecl, fieldInfo); + } + } + + FOREACH(Ptr, input, node->inputs) + { + auto methodInfo = manager->stateInputMethods[input.Obj()]; + + // func INPUT(ARGUMENTS ...): void + auto funcDecl = MakePtr(); + funcDecl->anonymity = WfFunctionAnonymity::Named; + funcDecl->name.value = methodInfo->GetName(); + funcDecl->returnType = GetTypeFromTypeInfo(methodInfo->GetReturn()); + FOREACH_INDEXER(Ptr, argument, index, input->arguments) + { + auto funcArgument = MakePtr(); + funcArgument->name.value = argument->name.value; + funcArgument->type = GetTypeFromTypeInfo(methodInfo->GetParameter(index)->GetType()); + funcDecl->arguments.Add(funcArgument); + } + + auto classMember = MakePtr(); + classMember->kind = WfClassMemberKind::Normal; + funcDecl->classMember = classMember; + + node->expandedDeclarations.Add(funcDecl); + manager->declarationMemberInfos.Add(funcDecl, methodInfo); + + auto block = MakePtr(); + funcDecl->statement = block; + { + // if (not this.stateMachineInitialized) + auto trueBlock = MakePtr(); + { + auto refInit = MakePtr(); + refInit->parent = MakePtr(); + refInit->name.value = L"stateMachineInitialized"; + + auto notExpr = MakePtr(); + notExpr->op = WfUnaryOperator::Not; + notExpr->operand = refInit; + + auto ifStat = MakePtr(); + ifStat->expression = notExpr; + ifStat->trueBranch = trueBlock; + + block->statements.Add(ifStat); + } + { + // this.stateMachineInitialized = true; + auto refInit = MakePtr(); + refInit->parent = MakePtr(); + refInit->name.value = L"stateMachineInitialized"; + + auto refTrue = MakePtr(); + refTrue->value = WfLiteralValue::True; + + auto assignExpr = MakePtr(); + assignExpr->op = WfBinaryOperator::Assign; + assignExpr->first = refInit; + assignExpr->second = refTrue; + + auto exprStat = MakePtr(); + exprStat->expression = assignExpr; + trueBlock->statements.Add(exprStat); + } + { + // this.CreateCoroutine(0); + auto refCC = MakePtr(); + refCC->parent = MakePtr(); + refCC->name.value = smInfo->createCoroutineMethod->GetName(); + + auto refZero = MakePtr(); + refZero->value.value = L"0"; + + auto callExpr = MakePtr(); + callExpr->function = refCC; + callExpr->arguments.Add(refZero); + + auto exprStat = MakePtr(); + exprStat->expression = callExpr; + trueBlock->statements.Add(exprStat); + } + { + // this.ResumeStateMachine(); + auto refResume = MakePtr(); + refResume->parent = MakePtr(); + refResume->name.value = L"ResumeStateMachine"; + + auto callExpr = MakePtr(); + callExpr->function = refResume; + + auto exprStat = MakePtr(); + exprStat->expression = callExpr; + trueBlock->statements.Add(exprStat); + } + } + { + // this.stateMachineInput = + auto refInput = MakePtr(); + refInput->parent = MakePtr(); + refInput->name.value = L"stateMachineInput"; + + auto refInputId = MakePtr(); + refInputId->value.value = itow(smInfo->inputIds[input->name.value]); + + auto assignExpr = MakePtr(); + assignExpr->op = WfBinaryOperator::Assign; + assignExpr->first = refInput; + assignExpr->second = refInputId; + + auto exprStat = MakePtr(); + exprStat->expression = assignExpr; + block->statements.Add(exprStat); + } + FOREACH_INDEXER(Ptr, argument, index, input->arguments) + { + // this.NAME = NAME; + auto refField = MakePtr(); + refField->parent = MakePtr(); + refField->name.value = manager->stateInputArguments[argument.Obj()]->GetName(); + + auto refArgument = MakePtr(); + refArgument->name.value = methodInfo->GetParameter(index)->GetName(); + + auto assignExpr = MakePtr(); + assignExpr->op = WfBinaryOperator::Assign; + assignExpr->first = refField; + assignExpr->second = refArgument; + + auto exprStat = MakePtr(); + exprStat->expression = assignExpr; + block->statements.Add(exprStat); + } + { + // this.ResumeStateMachine(); + auto refResume = MakePtr(); + refResume->parent = MakePtr(); + refResume->name.value = L"ResumeStateMachine"; + + auto callExpr = MakePtr(); + callExpr->function = refResume; + + auto exprStat = MakePtr(); + exprStat->expression = callExpr; + block->statements.Add(exprStat); + } + } + + { + // func CreateCoroutine(startState: int): void + auto funcDecl = MakePtr(); + funcDecl->anonymity = WfFunctionAnonymity::Named; + funcDecl->name.value = smInfo->createCoroutineMethod->GetName(); + funcDecl->returnType = GetTypeFromTypeInfo(TypeInfoRetriver::CreateTypeInfo().Obj()); + { + auto parameterInfo = smInfo->createCoroutineMethod->GetParameter(0); + + auto funcArgument = MakePtr(); + funcArgument->name.value = parameterInfo->GetName(); + funcArgument->type = GetTypeFromTypeInfo(parameterInfo->GetType()); + funcDecl->arguments.Add(funcArgument); + } + + auto classMember = MakePtr(); + classMember->kind = WfClassMemberKind::Normal; + funcDecl->classMember = classMember; + + auto att = MakePtr(); + att->category.value = L"cpp"; + att->name.value = L"Private"; + funcDecl->attributes.Add(att); + + node->expandedDeclarations.Add(funcDecl); + manager->declarationMemberInfos.Add(funcDecl, smInfo->createCoroutineMethod); + + auto block = MakePtr(); + funcDecl->statement = block; + + { + // stateMachineObject = this; + auto varDecl = MakePtr(); + varDecl->name.value = L"stateMachineObject"; + varDecl->expression = MakePtr(); + + auto stat = MakePtr(); + stat->variable = varDecl; + + block->statements.Add(stat); + } + { + // previousCoroutine = stateMachineCoroutine; + auto refThis = MakePtr(); + refThis->name.value = L"stateMachineObject"; + + auto refCoroutine = MakePtr(); + refCoroutine->parent = refThis; + refCoroutine->name.value = L"stateMachineCoroutine"; + + auto varDecl = MakePtr(); + varDecl->name.value = L"previousCoroutine"; + varDecl->expression = refCoroutine; + + auto stat = MakePtr(); + stat->variable = varDecl; + + block->statements.Add(stat); + } + { + // stateMachineCoroutine = $coroutine{ ... } + auto refThis = MakePtr(); + refThis->name.value = L"stateMachineObject"; + + auto refCoroutine = MakePtr(); + refCoroutine->parent = refThis; + refCoroutine->name.value = L"stateMachineCoroutine"; + + auto coroutine = MakePtr(); + auto coroutineBlock = MakePtr(); + coroutine->statement = coroutineBlock; + + auto assignExpr = MakePtr(); + assignExpr->op = WfBinaryOperator::Assign; + assignExpr->first = refCoroutine; + assignExpr->second = coroutine; + + auto exprStat = MakePtr(); + exprStat->expression = assignExpr; + block->statements.Add(exprStat); + + { + auto tryStat = MakePtr(); + coroutineBlock->statements.Add(tryStat); + + auto tryBlock = MakePtr(); + tryBlock->endLabel.value = L"OUT_OF_STATE_MACHINE"; + tryStat->protectedStatement = tryBlock; + + auto finallyBlock = MakePtr(); + tryStat->finallyStatement = finallyBlock; + + // try {... OUT_OF_STATE_MACHINE:;} + { + // var State = startState; + auto refStartState = MakePtr(); + refStartState->name.value = L"startState"; + + auto varDecl = MakePtr(); + varDecl->name.value = L"state"; + varDecl->expression = refStartState; + + auto stat = MakePtr(); + stat->variable = varDecl; + + tryBlock->statements.Add(stat); + } + { + // while(true){... OUT_OF_CURRENT_STATE:;} + auto whileBlock = MakePtr(); + whileBlock->endLabel.value = L"OUT_OF_CURRENT_STATE"; + { + auto refTrue = MakePtr(); + refTrue->value = WfLiteralValue::True; + + auto whileStat = MakePtr(); + whileStat->condition = refTrue; + whileStat->statement = whileBlock; + + tryBlock->statements.Add(whileStat); + } + { + // var currentState = state; + auto refStartState = MakePtr(); + refStartState->name.value = L"state"; + + auto varDecl = MakePtr(); + varDecl->name.value = L"currentState"; + varDecl->expression = refStartState; + + auto stat = MakePtr(); + stat->variable = varDecl; + + whileBlock->statements.Add(stat); + } + { + // state = -1; + auto refState = MakePtr(); + refState->name.value = L"state"; + + auto assignExpr = MakePtr(); + assignExpr->op = WfBinaryOperator::Assign; + assignExpr->first = refState; + assignExpr->second = GenerateStateMachineInvalidId(); + + auto exprStat = MakePtr(); + exprStat->expression = assignExpr; + whileBlock->statements.Add(exprStat); + } + { + // switch(currentState) { case STATE:{... goto OUT_OF_STATE_MACHINE;} ... } + auto refCurrentState = MakePtr(); + refCurrentState->name.value = L"currentState"; + + auto switchStat = MakePtr(); + switchStat->expression = refCurrentState; + whileBlock->statements.Add(switchStat); + + FOREACH(Ptr, state, node->states) + { + auto switchCase = MakePtr(); + switchStat->caseBranches.Add(switchCase); + + auto refStateId = MakePtr(); + refStateId->value.value = itow(smInfo->stateIds[state->name.value]); + switchCase->expression = refStateId; + + auto caseBlock = MakePtr(); + switchCase->statement = caseBlock; + + FOREACH(Ptr, argument, state->arguments) + { + auto refThis = MakePtr(); + refThis->name.value = L"stateMachineObject"; + + auto refArgument = MakePtr(); + refArgument->parent = refThis; + refArgument->name.value = manager->stateDeclArguments[argument.Obj()]->GetName(); + + auto varDecl = MakePtr(); + varDecl->name.value = argument->name.value; + varDecl->expression = refArgument; + + auto varStat = MakePtr(); + varStat->variable = varDecl; + caseBlock->statements.Add(varStat); + } + caseBlock->statements.Add(ExpandStateMachineStatementVisitor(manager, smInfo.Obj()).CreateField(state->statement)); + { + auto gotoStat = MakePtr(); + gotoStat->label.value = L"OUT_OF_STATE_MACHINE"; + caseBlock->statements.Add(gotoStat); + } + SetCodeRange(Ptr(caseBlock), state->codeRange); + } + } + } + // finally {stateMachineCoroutine = previousCoroutine;} + { + auto refThis = MakePtr(); + refThis->name.value = L"stateMachineObject"; + + auto refCoroutine = MakePtr(); + refCoroutine->parent = refThis; + refCoroutine->name.value = L"stateMachineCoroutine"; + + auto refPrevious = MakePtr(); + refPrevious->name.value = L"previousCoroutine"; + + auto assignExpr = MakePtr(); + assignExpr->op = WfBinaryOperator::Assign; + assignExpr->first = refCoroutine; + assignExpr->second = refPrevious; + + auto exprStat = MakePtr(); + exprStat->expression = assignExpr; + finallyBlock->statements.Add(exprStat); + } + } + } + } + } } } } @@ -18331,7 +21627,7 @@ ExpandSwitchStatement auto decl = MakePtr(); decl->name.value = varName; decl->type = GetTypeFromTypeInfo(result.type.Obj()); - decl->expression = CopyExpression(node->expression); + decl->expression = CopyExpression(node->expression, true); auto stat = MakePtr(); stat->variable = decl; @@ -18352,7 +21648,7 @@ ExpandSwitchStatement refExpr->name.value = varName; auto inferExpr = MakePtr(); - inferExpr->expression= CopyExpression(switchCase->expression); + inferExpr->expression= CopyExpression(switchCase->expression, true); { auto result = manager->expressionResolvings[switchCase->expression.Obj()]; inferExpr->type = GetTypeFromTypeInfo(result.type.Obj()); @@ -18365,12 +21661,12 @@ ExpandSwitchStatement ifStat->expression = compare; } - ifStat->trueBranch = CopyStatement(switchCase->statement); + ifStat->trueBranch = CopyStatement(switchCase->statement, true); } if (node->defaultBranch) { - *tailIfStat = CopyStatement(node->defaultBranch); + *tailIfStat = CopyStatement(node->defaultBranch, true); } if (rootIfStat) @@ -18409,15 +21705,15 @@ ExpandForEachStatement return stat; } - class CopyForEachRangeBodyVisitor - : public copy_visitor::ModuleVisitor + class CopyForEachRangeBodyVisitor : public CopyWithExpandVirtualVisitor { public: WfLexicalScopeManager* manager; WfForEachStatement* forEach; CopyForEachRangeBodyVisitor(WfLexicalScopeManager* _manager, WfForEachStatement* _forEach) - :manager(_manager) + :CopyWithExpandVirtualVisitor(true) + , manager(_manager) , forEach(_forEach) { } @@ -18467,7 +21763,7 @@ ExpandForEachStatement auto decl = MakePtr(); decl->name.value = varBegin; decl->type = GetTypeFromTypeInfo(result.type.Obj()); - decl->expression = CopyExpression(range->begin); + decl->expression = CopyExpression(range->begin, true); if (range->beginBoundary == WfRangeBoundary::Exclusive) { auto one = MakePtr(); @@ -18490,7 +21786,7 @@ ExpandForEachStatement auto decl = MakePtr(); decl->name.value = varEnd; decl->type = GetTypeFromTypeInfo(result.type.Obj()); - decl->expression = CopyExpression(range->end); + decl->expression = CopyExpression(range->end, true); if (range->endBoundary == WfRangeBoundary::Exclusive) { auto one = MakePtr(); @@ -18560,27 +21856,20 @@ ExpandForEachStatement if (node->direction == WfForEachDirection::Normal) { auto inferExpr = MakePtr(); - inferExpr->expression = CopyExpression(node->collection); + inferExpr->expression = CopyExpression(node->collection, true); inferExpr->type = GetTypeFromTypeInfo(TypeInfoRetriver>::CreateTypeInfo().Obj()); decl->expression = inferExpr; } else { - auto refSystem = MakePtr(); - refSystem->name.value = L"system"; - - auto refSys = MakePtr(); - refSys->parent = refSystem; - refSys->name.value = L"Sys"; - auto refMethod = MakePtr(); - refMethod->parent = refSys; + refMethod->parent = GetExpressionFromTypeDescriptor(description::GetTypeDescriptor()); refMethod->name.value = L"ReverseEnumerable"; auto refCall = MakePtr(); refCall->function = refMethod; - refCall->arguments.Add(CopyExpression(node->collection)); + refCall->arguments.Add(CopyExpression(node->collection, true)); decl->expression = refCall; } @@ -18655,7 +21944,7 @@ ExpandForEachStatement stat->variable = decl; whileBlock->statements.Add(stat); } - whileBlock->statements.Add(CopyStatement(node->statement)); + whileBlock->statements.Add(CopyStatement(node->statement, true)); } block->statements.Add(whileStat); } @@ -18666,37 +21955,17 @@ ExpandForEachStatement ExpandCoProviderStatement ***********************************************************************/ - class ExpandCoProviderStatementVisitor - : public copy_visitor::StatementVisitor - , public copy_visitor::CoroutineStatementVisitor + class ExpandCoProviderStatementVisitor : public CopyWithExpandVirtualVisitor { public: WfLexicalScopeManager* manager; ExpandCoProviderStatementVisitor(WfLexicalScopeManager* _manager) - :manager(_manager) + :CopyWithExpandVirtualVisitor(true) + , manager(_manager) { } - Ptr CreateField(Ptr from)override - { - if (!from) return nullptr; - return CopyExpression(from); - } - - Ptr CreateField(Ptr from)override - { - if (!from) return nullptr; - return CopyType(from); - } - - Ptr CreateField(Ptr from)override - { - if (!from) return nullptr; - from->Accept(this); - return result.Cast(); - } - void Visit(WfReturnStatement* node)override { auto opInfo = manager->coOperatorResolvings[node].methodInfo; @@ -18715,7 +21984,39 @@ ExpandCoProviderStatement callExpr->arguments.Add(refImpl); if (node->expression) { - callExpr->arguments.Add(CreateField(node->expression)); + auto returnValue = CreateField(node->expression); + { + auto scope = manager->nodeScopes[node].Obj(); + auto functionScope = scope->FindFunctionScope(); + if (auto funcDecl = functionScope->ownerNode.Cast()) + { + auto returnType = CreateTypeInfoFromType(scope, funcDecl->returnType); + if (auto group = returnType->GetTypeDescriptor()->GetMethodGroupByName(L"StoreResult", true)) + { + vint count = group->GetMethodCount(); + for (vint i = 0; i < count; i++) + { + auto method = group->GetMethod(i); + if (method->IsStatic() && method->GetParameterCount() == 1) + { + auto refType = GetExpressionFromTypeDescriptor(returnType->GetTypeDescriptor()); + + auto refStoreResult = MakePtr(); + refStoreResult->parent = refType; + refStoreResult->name.value = L"StoreResult"; + + auto callExpr = MakePtr(); + callExpr->function = refStoreResult; + callExpr->arguments.Add(returnValue); + + returnValue = callExpr; + break; + } + } + } + } + } + callExpr->arguments.Add(returnValue); } auto stat = MakePtr(); @@ -18858,10 +22159,8 @@ ExpandCoProviderStatement FOREACH(Ptr, statement, node->statements) { - while (auto virtualStat = statement.Cast()) - { - statement = virtualStat->expandedStatement; - } + statement = SearchUntilNonVirtualStatement(statement); + if (auto coOperatorStat = statement.Cast()) { coOperatorStat->Accept(this); @@ -18876,18 +22175,6 @@ ExpandCoProviderStatement SetCodeRange(Ptr(block), node->codeRange); result = block; } - - Ptr Dispatch(WfVirtualStatement* node)override - { - node->expandedStatement->Accept(this); - return result; - } - - Ptr Dispatch(WfCoroutineStatement* node)override - { - node->Accept((WfCoroutineStatement::IVisitor*)this); - return result; - } }; void ExpandCoProviderStatement(WfLexicalScopeManager* manager, WfCoProviderStatement* node) @@ -18904,6 +22191,7 @@ ExpandCoProviderStatement coroutineExpr->name.value = L""; coroutineExpr->statement = ExpandCoProviderStatementVisitor(manager).CreateField(node->statement); } + manager->coNewCoroutineResolvings.Add(coroutineExpr, ResolveExpressionResult::ReadonlyType(providerType)); auto creatorExpr = MakePtr(); { @@ -19017,21 +22305,25 @@ IsExpressionDependOnExpectedType(Expression) class IsExpressionDependOnExpectedTypeVisitor : public empty_visitor::ExpressionVisitor - , public empty_visitor::VirtualExpressionVisitor + , public empty_visitor::VirtualCseExpressionVisitor { public: WfLexicalScopeManager* manager; - bool result; + bool result = false; IsExpressionDependOnExpectedTypeVisitor(WfLexicalScopeManager* _manager) :manager(_manager) - , result(false) { } - void Dispatch(WfVirtualExpression* node)override + void Dispatch(WfVirtualCfeExpression* node)override { - node->Accept(static_cast(this)); + node->expandedExpression->Accept(this); + } + + void Dispatch(WfVirtualCseExpression* node)override + { + node->Accept((WfVirtualCseExpression::IVisitor*)this); } bool Execute(Ptr expression) @@ -19123,14 +22415,19 @@ GetExpressionName(Expression) class GetExpressionNameVisitor : public empty_visitor::ExpressionVisitor - , public empty_visitor::VirtualExpressionVisitor + , public empty_visitor::VirtualCseExpressionVisitor { public: WString result; - void Dispatch(WfVirtualExpression* node)override + void Dispatch(WfVirtualCfeExpression* node)override { - node->Accept(static_cast(this)); + node->expandedExpression->Accept(this); + } + + void Dispatch(WfVirtualCseExpression* node)override + { + node->Accept((WfVirtualCseExpression::IVisitor*)this); } void Visit(WfTopQualifiedExpression* node)override @@ -20389,16 +23686,17 @@ Helper Functions else { resolvables.Add(true); - types.Add(GetExpressionType(manager, argument, 0)); + types.Add(GetExpressionType(manager, argument, nullptr)); } } List> functionErrors, nonFunctionErrors; - List selectedFunctionIndices; + List> selectedFunctionIndices; ITypeDescriptor* functionFd = description::GetTypeDescriptor(); for (vint i = 0; i < functions.Count(); i++) { bool failed = false; + vint convertCount = 0; auto result = functions[i]; ITypeInfo* expressionType = GetFunctionType(result); @@ -20421,7 +23719,14 @@ Helper Functions if (resolvables[j] && types[j]) { ITypeInfo* argumentType = genericType->GetGenericArgument(j + 1); - if (!CanConvertToType(types[j].Obj(), argumentType, false)) + if (CanConvertToType(types[j].Obj(), argumentType, false)) + { + if (!IsSameType(types[j].Obj(), argumentType)) + { + convertCount++; + } + } + else { functionErrors.Add(WfErrors::FunctionArgumentTypeMismatched(node, result, j + 1, types[j].Obj(), argumentType)); failed = true; @@ -20442,19 +23747,48 @@ Helper Functions FUNCTION_TYPE_FINISHED: if (!failed) { - selectedFunctionIndices.Add(i); + selectedFunctionIndices.Add({ i,convertCount }); + } + } + + if (selectedFunctionIndices.Count() > 1) + { + vint minScore = From(selectedFunctionIndices) + .Select([](Pair p) + { + return p.value; + }) + .Min(); + + for (vint i = selectedFunctionIndices.Count() - 1; i >= 0; i--) + { + if (selectedFunctionIndices[i].value != minScore) + { + selectedFunctionIndices.RemoveAt(i); + } } } if (selectedFunctionIndices.Count() == 1) { - selectedFunctionIndex = selectedFunctionIndices[0]; + selectedFunctionIndex = selectedFunctionIndices[0].key; ITypeInfo* genericType = GetFunctionType(functions[selectedFunctionIndex])->GetElementType(); for (vint i = 0; i < types.Count(); i++) { - if (!resolvables[i]) + ITypeInfo* argumentType = genericType->GetGenericArgument(i + 1); + if (resolvables[i]) + { + vint index = manager->expressionResolvings.Keys().IndexOf(arguments[i].Obj()); + if (index != -1) + { + auto resolvingResult = manager->expressionResolvings.Values()[index]; + CHECK_ERROR(resolvingResult.expectedType == nullptr, L"GetExpressionType should not set expectedType if it is null"); + resolvingResult.expectedType = CopyTypeInfo(argumentType); + manager->expressionResolvings.Set(arguments[i].Obj(), resolvingResult); + } + } + else { - ITypeInfo* argumentType = genericType->GetGenericArgument(i + 1); if (arguments[i]) { GetExpressionType(manager, arguments[i], CopyTypeInfo(argumentType)); @@ -20471,9 +23805,9 @@ Helper Functions CopyFrom( overloadedFunctions, From(selectedFunctionIndices) - .Select([&functions](vint index) + .Select([&functions](Pair p) { - return functions[index]; + return functions[p.key]; })); manager->errors.Add(WfErrors::CannotPickOverloadedFunctions(node, overloadedFunctions)); } @@ -20490,11 +23824,257 @@ Helper Functions } } +/*********************************************************************** +ValidateSemantic +***********************************************************************/ + + void ValidateModuleSemantic(WfLexicalScopeManager* manager, Ptr module) + { + FOREACH(Ptr, declaration, module->declarations) + { + ValidateDeclarationSemantic(manager, declaration); + } + } + +/*********************************************************************** +GetExpressionScopeName +***********************************************************************/ + + Ptr GetExpressionScopeName(WfLexicalScopeManager* manager, Ptr expression) + { + List results; + ValidateExpressionSemantic(manager, expression, 0, results); + if (results.Count() == 0) return 0; + + for (vint i = results.Count() - 1; i >= 0; i--) + { + auto& result = results[i]; + if (!result.scopeName) + { + results.RemoveAt(i); + } + } + if (results.Count() == 0) + { + manager->errors.Add(WfErrors::ExpressionIsNotScopeName(expression.Obj())); + return 0; + } + else if (results.Count() > 1) + { + manager->errors.Add(WfErrors::TooManyTargets(expression.Obj(), results, GetExpressionName(expression))); + return 0; + } + + auto result = results[0]; + manager->expressionResolvings.Add(expression, result); + return result.scopeName; + } + +/*********************************************************************** +GetExpressionEventInfo +***********************************************************************/ + + reflection::description::IEventInfo* GetExpressionEventInfo(WfLexicalScopeManager* manager, Ptr expression) + { + List results; + ValidateExpressionSemantic(manager, expression, 0, results); + if (results.Count() == 0) return 0; + + for (vint i = results.Count() - 1; i >= 0; i--) + { + auto& result = results[i]; + if (!result.eventInfo) + { + results.RemoveAt(i); + } + } + if (results.Count() == 0) + { + manager->errors.Add(WfErrors::ExpressionIsNotEvent(expression.Obj())); + return 0; + } + else if (results.Count() > 1) + { + manager->errors.Add(WfErrors::TooManyTargets(expression.Obj(), results, GetExpressionName(expression))); + return 0; + } + + auto result = results[0]; + manager->expressionResolvings.Add(expression, result); + return result.eventInfo; + } + +/*********************************************************************** +GetExpressionTypes +***********************************************************************/ + + void GetExpressionTypes(WfLexicalScopeManager* manager, Ptr expression, Ptr expectedType, bool allowEvent, collections::List& results) + { + ValidateExpressionSemantic(manager, expression, expectedType, results); + if (results.Count() == 0) return; + + Ptr scopeName; + IEventInfo* eventInfo = 0; + for (vint i = results.Count() - 1; i >= 0; i--) + { + auto& result = results[i]; + if (result.scopeName && !scopeName) + { + scopeName = result.scopeName; + } + if (result.eventInfo && !eventInfo) + { + eventInfo = result.eventInfo; + } + if (!result.type && !(allowEvent && eventInfo)) + { + results.RemoveAt(i); + } + } + if (results.Count() == 0) + { + if (scopeName) + { + manager->errors.Add(WfErrors::ScopeNameIsNotExpression(expression.Obj(), scopeName)); + } + if (eventInfo) + { + manager->errors.Add(WfErrors::EventIsNotExpression(expression.Obj(), eventInfo)); + } + } + + if (expectedType) + { + List> failedTypes; + for (vint i = results.Count() - 1; i >= 0; i--) + { + auto& result = results[i]; + if (!CanConvertToType(result.type.Obj(), expectedType.Obj(), false)) + { + failedTypes.Add(result.type); + results.RemoveAt(i); + } + } + + if (results.Count() == 0) + { + FOREACH(Ptr, type, failedTypes) + { + manager->errors.Add(WfErrors::ExpressionCannotImplicitlyConvertToType(expression.Obj(), type.Obj(), expectedType.Obj())); + } + } + } + } + +/*********************************************************************** +GetExpressionType +***********************************************************************/ + + Ptr GetExpressionType(WfLexicalScopeManager* manager, Ptr expression, Ptr expectedType) + { + List results; + GetExpressionTypes(manager, expression, expectedType, false, results); + + if (results.Count() > 1) + { + manager->errors.Add(WfErrors::TooManyTargets(expression.Obj(), results, GetExpressionName(expression))); + return expectedType; + } + else if (results.Count() == 1) + { + auto result = results[0]; + result.expectedType = expectedType; + manager->expressionResolvings.Add(expression, result); + return expectedType ? expectedType : result.type; + } + else + { + return expectedType; + } + } + +/*********************************************************************** +GetLeftValueExpressionType +***********************************************************************/ + + Ptr GetLeftValueExpressionType(WfLexicalScopeManager* manager, Ptr expression) + { + List results; + GetExpressionTypes(manager, expression, nullptr, false, results); + + if (results.Count() > 1) + { + manager->errors.Add(WfErrors::TooManyTargets(expression.Obj(), results, GetExpressionName(expression))); + } + else if (results.Count() == 1) + { + if (results[0].writableType) + { + auto result = results[0]; + manager->expressionResolvings.Add(expression, result); + return result.writableType; + } + else + { + manager->errors.Add(WfErrors::ExpressionIsNotLeftValue(expression.Obj(), results[0])); + } + } + return nullptr; + } + +/*********************************************************************** +GetEnumerableExpressionItemType +***********************************************************************/ + + Ptr GetEnumerableExpressionItemType(WfLexicalScopeManager* manager, Ptr expression, Ptr expectedType) + { + Ptr collectionType = GetExpressionType(manager, expression, expectedType); + if (collectionType) + { + if (collectionType->GetTypeDescriptor()->CanConvertTo(description::GetTypeDescriptor())) + { + if (collectionType->GetDecorator() == ITypeInfo::SharedPtr) + { + ITypeInfo* genericType = collectionType->GetElementType(); + if (genericType->GetDecorator() == ITypeInfo::Generic && genericType->GetGenericArgumentCount() == 1) + { + return CopyTypeInfo(genericType->GetGenericArgument(0)); + } + } + return TypeInfoRetriver::CreateTypeInfo(); + } + + manager->errors.Add(WfErrors::ExpressionIsNotCollection(expression.Obj(), collectionType.Obj())); + } + return nullptr; + } + } + } +} + + +/*********************************************************************** +.\ANALYZER\WFANALYZER_VALIDATESEMANTIC_DECLARATION.CPP +***********************************************************************/ + +namespace vl +{ + namespace workflow + { + namespace analyzer + { + using namespace collections; + using namespace reflection; + using namespace reflection::description; + using namespace typeimpl; + /*********************************************************************** ValidateSemantic(ClassMember) ***********************************************************************/ - class ValidateSemanticClassMemberVisitor : public Object, public WfDeclaration::IVisitor + class ValidateSemanticClassMemberVisitor + : public Object + , public WfDeclaration::IVisitor { public: WfLexicalScopeManager* manager; @@ -20663,12 +24243,14 @@ ValidateSemantic(ClassMember) ValidateDeclarationSemantic(manager, node); } - void Visit(WfVirtualDeclaration* node)override + void Visit(WfVirtualCfeDeclaration* node)override { - FOREACH(Ptr, decl, node->expandedDeclarations) - { - decl->Accept(this); - } + ValidateDeclarationSemantic(manager, node); + } + + void Visit(WfVirtualCseDeclaration* node)override + { + ValidateDeclarationSemantic(manager, node); } static void Execute(Ptr td, Ptr classDecl, Ptr memberDecl, WfLexicalScopeManager* manager) @@ -20682,7 +24264,26 @@ ValidateSemantic(ClassMember) ValidateSemantic(Declaration) ***********************************************************************/ - class ValidateSemanticDeclarationVisitor : public Object, public WfDeclaration::IVisitor + class ExpandVirtualDeclarationVisitor : public Object, public WfVirtualCseDeclaration::IVisitor + { + public: + WfLexicalScopeManager* manager; + + ExpandVirtualDeclarationVisitor(WfLexicalScopeManager* _manager) + :manager(_manager) + { + } + + void Visit(WfStateMachineDeclaration* node)override + { + ExpandStateMachine(manager, node); + } + }; + + class ValidateSemanticDeclarationVisitor + : public Object + , public WfDeclaration::IVisitor + , public WfVirtualCseDeclaration::IVisitor { public: WfLexicalScopeManager* manager; @@ -20783,6 +24384,24 @@ ValidateSemantic(Declaration) } } + if (auto sm = From(node->declarations) + .FindType() + .First(nullptr) + ) + { + auto smtd = description::GetTypeDescriptor(); + vint count = td->GetBaseTypeDescriptorCount(); + + auto smbc = Range(0, count) + .Select([=](vint index) {return td->GetBaseTypeDescriptor(index); }) + .Where([=](ITypeDescriptor* td) {return td == smtd; }) + .First(nullptr); + if (!smbc) + { + manager->errors.Add(WfErrors::StateMachineClassNotInheritFromStateMachine(node)); + } + } + FOREACH(Ptr, memberDecl, node->declarations) { ValidateClassMemberSemantic(manager, td, node, memberDecl); @@ -20850,11 +24469,72 @@ ValidateSemantic(Declaration) } } - void Visit(WfVirtualDeclaration* node)override + void Visit(WfVirtualCfeDeclaration* node)override { FOREACH(Ptr, decl, node->expandedDeclarations) { - decl->Accept(this); + ValidateDeclarationSemantic(manager, decl); + } + } + + void Visit(WfVirtualCseDeclaration* node)override + { + bool expanded = node->expandedDeclarations.Count() > 0; + vint errorCount = manager->errors.Count(); + node->Accept((WfVirtualCseDeclaration::IVisitor*)this); + + if (!expanded && manager->errors.Count() == errorCount) + { + ExpandVirtualDeclarationVisitor visitor(manager); + node->Accept(&visitor); + + FOREACH(Ptr, decl, node->expandedDeclarations) + { + SetCodeRange(decl, node->codeRange); + } + + auto parentScope = manager->nodeScopes[node]; + if (parentScope->ownerNode == node) + { + parentScope = parentScope->parentScope; + } + + FOREACH(Ptr, decl, node->expandedDeclarations) + { + ContextFreeDeclarationDesugar(manager, decl); + } + FOREACH(Ptr, decl, node->expandedDeclarations) + { + BuildScopeForDeclaration(manager, parentScope, decl, manager->declaractionScopeSources[node]); + } + if (!CheckScopes_DuplicatedSymbol(manager) || !CheckScopes_BaseType(manager) || !CheckScopes_SymbolType(manager)) + { + return; + } + } + + FOREACH(Ptr, decl, node->expandedDeclarations) + { + ValidateDeclarationSemantic(manager, decl); + } + } + + void Visit(WfStateMachineDeclaration* node)override + { + bool foundDefaultState = false; + + FOREACH(Ptr, state, node->states) + { + if (state->name.value == L"") + { + foundDefaultState = true; + } + ValidateStatementSemantic(manager, state->statement); + } + + if (!foundDefaultState) + { + manager->errors.Add(WfErrors::MissingDefaultState(node)); } } @@ -20867,643 +24547,43 @@ ValidateSemantic(Declaration) }; /*********************************************************************** -ValidateSemantic(Statement) +ValidateSemantic ***********************************************************************/ - class ExpandVirtualStatementVisitor : public Object, public WfVirtualStatement::IVisitor + void ValidateClassMemberSemantic(WfLexicalScopeManager* manager, Ptr td, Ptr classDecl, Ptr memberDecl) { - public: - WfLexicalScopeManager* manager; + return ValidateSemanticClassMemberVisitor::Execute(td, classDecl, memberDecl, manager); + } - ExpandVirtualStatementVisitor(WfLexicalScopeManager* _manager) - :manager(_manager) - { - } - - void Visit(WfSwitchStatement* node)override - { - ExpandSwitchStatement(manager, node); - } - - void Visit(WfForEachStatement* node)override - { - ExpandForEachStatement(manager, node); - } - - void Visit(WfCoProviderStatement* node)override - { - ExpandCoProviderStatement(manager, node); - } - }; - - class ValidateSemanticStatementVisitor - : public Object - , public WfStatement::IVisitor - , public WfVirtualStatement::IVisitor - , public WfCoroutineStatement::IVisitor + void ValidateDeclarationSemantic(WfLexicalScopeManager* manager, Ptr declaration) { - public: - WfLexicalScopeManager* manager; + return ValidateSemanticDeclarationVisitor::Execute(declaration, manager); + } + } + } +} - ValidateSemanticStatementVisitor(WfLexicalScopeManager* _manager) - :manager(_manager) - { - } - void Visit(WfBreakStatement* node)override - { - } +/*********************************************************************** +.\ANALYZER\WFANALYZER_VALIDATESEMANTIC_EXPRESSION.CPP +***********************************************************************/ - void Visit(WfContinueStatement* node)override - { - } - - void Visit(WfReturnStatement* node)override - { - auto scope = manager->nodeScopes[node].Obj(); - auto functionScope = scope->FindFunctionScope(); - if (auto funcDecl = functionScope->ownerNode.Cast()) - { - auto providerStat = funcDecl->statement.Cast(); - if (providerStat && !providerStat->expandedStatement) - { - auto providerScope = manager->nodeScopes[funcDecl->statement.Obj()]; - auto providerSymbol = providerScope->symbols[L"$PROVIDER"][0]; - auto implSymbol = providerScope->symbols[L"$IMPL"][0]; - if (providerSymbol->typeInfo && implSymbol->typeInfo) - { - if (auto group = providerSymbol->typeInfo->GetTypeDescriptor()->GetMethodGroupByName(L"ReturnAndExit", true)) - { - List functions; - vint count = group->GetMethodCount(); - for (vint i = 0; i < count; i++) - { - auto method = group->GetMethod(i); - if (method->IsStatic()) - { - if (method->GetParameterCount() > 0 && IsSameType(implSymbol->typeInfo.Obj(), method->GetParameter(0)->GetType())) - { - functions.Add(ResolveExpressionResult::Method(method)); - } - } - } - - vint selectedFunctionIndex = -1; - List> arguments; - arguments.Add(nullptr); - if (node->expression) - { - arguments.Add(node->expression); - } - SelectFunction(manager, node, nullptr, functions, arguments, selectedFunctionIndex); - if (selectedFunctionIndex != -1) - { - manager->coOperatorResolvings.Add(node, functions[selectedFunctionIndex]); - } - } - else - { - manager->errors.Add(WfErrors::CoOperatorNotExists(node, providerSymbol->typeInfo.Obj())); - } - } - } - else - { - auto returnType = CreateTypeInfoFromType(scope, funcDecl->returnType); - if (node->expression) - { - if (returnType->GetTypeDescriptor() == description::GetTypeDescriptor()) - { - manager->errors.Add(WfErrors::CannotReturnExpression(node)); - } - else - { - GetExpressionType(manager, node->expression, returnType); - } - } - else if (returnType->GetDecorator() != ITypeInfo::TypeDescriptor || returnType->GetTypeDescriptor() != description::GetTypeDescriptor()) - { - manager->errors.Add(WfErrors::ReturnMissExpression(node, returnType.Obj())); - } - } - } - else - { - if (node->expression) - { - manager->errors.Add(WfErrors::CannotReturnExpression(node)); - } - } - } - - void Visit(WfDeleteStatement* node)override - { - Ptr type = GetExpressionType(manager, node->expression, 0); - if (type) - { - if (type->GetDecorator() != ITypeInfo::RawPtr) - { - manager->errors.Add(WfErrors::DeleteNonRawPointer(node, type.Obj())); - } - } - } - - void Visit(WfRaiseExceptionStatement* node)override - { - if (node->expression) - { - if (auto type = GetExpressionType(manager, node->expression, nullptr)) - { - auto stringType = TypeInfoRetriver::CreateTypeInfo(); - auto exceptionType = TypeInfoRetriver>::CreateTypeInfo(); - if (!CanConvertToType(type.Obj(), stringType.Obj(), false) && !CanConvertToType(type.Obj(), exceptionType.Obj(), false)) - { - manager->errors.Add(WfErrors::ExpressionCannotImplicitlyConvertToType(node->expression.Obj(), type.Obj(), stringType.Obj())); - } - } - } - } - - void Visit(WfIfStatement* node)override - { - if (node->type) - { - auto scope = manager->nodeScopes[node].Obj(); - auto symbol = scope->symbols[node->name.value][0]; - if (!IsNullAcceptableType(symbol->typeInfo.Obj())) - { - manager->errors.Add(WfErrors::NullCannotImplicitlyConvertToType(node->expression.Obj(), symbol->typeInfo.Obj())); - } - GetExpressionType(manager, node->expression, nullptr); - } - else - { - Ptr boolType = TypeInfoRetriver::CreateTypeInfo(); - GetExpressionType(manager, node->expression, boolType); - } - ValidateStatementSemantic(manager, node->trueBranch); - if (node->falseBranch) - { - ValidateStatementSemantic(manager, node->falseBranch); - } - } - - void Visit(WfWhileStatement* node)override - { - Ptr boolType = TypeInfoRetriver::CreateTypeInfo(); - GetExpressionType(manager, node->condition, boolType); - ValidateStatementSemantic(manager, node->statement); - } - - void Visit(WfTryStatement* node)override - { - ValidateStatementSemantic(manager, node->protectedStatement); - if (node->catchStatement) - { - ValidateStatementSemantic(manager, node->catchStatement); - } - if (node->finallyStatement) - { - ValidateStatementSemantic(manager, node->finallyStatement); - } - } - - void Visit(WfBlockStatement* node)override - { - FOREACH(Ptr, statement, node->statements) - { - ValidateStatementSemantic(manager, statement); - } - } - - void Visit(WfExpressionStatement* node)override - { - GetExpressionType(manager, node->expression, 0); - } - - void Visit(WfVariableStatement* node)override - { - ValidateDeclarationSemantic(manager, node->variable); - } - - void Visit(WfVirtualStatement* node)override - { - bool expanded = node->expandedStatement; - vint errorCount = manager->errors.Count(); - node->Accept((WfVirtualStatement::IVisitor*)this); - - if (!expanded && manager->errors.Count() == errorCount) - { - ExpandVirtualStatementVisitor visitor(manager); - node->Accept(&visitor); - SetCodeRange(node->expandedStatement, node->codeRange); - - auto parentScope = manager->nodeScopes[node]; - if (parentScope->ownerNode == node) - { - parentScope = parentScope->parentScope; - } - - ContextFreeStatementDesugar(manager, node->expandedStatement); - BuildScopeForStatement(manager, parentScope, node->expandedStatement); - if (!CheckScopes_DuplicatedSymbol(manager) || !CheckScopes_SymbolType(manager)) - { - return; - } - } - - if (node->expandedStatement) - { - ValidateStatementSemantic(manager, node->expandedStatement); - } - } - - void Visit(WfSwitchStatement* node)override - { - Ptr type = GetExpressionType(manager, node->expression, 0); - FOREACH(Ptr, switchCase, node->caseBranches) - { - Ptr caseType; - if (IsExpressionDependOnExpectedType(manager, switchCase->expression)) - { - caseType = GetExpressionType(manager, switchCase->expression, type); - } - else - { - caseType = GetExpressionType(manager, switchCase->expression, 0); - } - - if (type && caseType) - { - if (!GetMergedType(type, caseType)) - { - manager->errors.Add(WfErrors::CannotMergeTwoType(switchCase->expression.Obj(), type.Obj(), caseType.Obj())); - } - } - ValidateStatementSemantic(manager, switchCase->statement); - } - if (node->defaultBranch) - { - ValidateStatementSemantic(manager, node->defaultBranch); - } - } - - void Visit(WfForEachStatement* node)override - { - Ptr elementType = GetEnumerableExpressionItemType(manager, node->collection, 0); - if (elementType) - { - auto scope = manager->nodeScopes[node].Obj(); - auto symbol = scope->symbols[node->name.value][0]; - symbol->typeInfo = elementType; - symbol->type = GetTypeFromTypeInfo(elementType.Obj()); - } - ValidateStatementSemantic(manager, node->statement); - } - - void Visit(WfCoProviderStatement* node)override - { - auto scope = manager->nodeScopes[node].Obj(); - auto providerSymbol = scope->symbols[L"$PROVIDER"][0]; - auto implSymbol = scope->symbols[L"$IMPL"][0]; - Ptr funcReturnType; - { - auto decl = scope->parentScope->ownerNode.Cast(); - funcReturnType = CreateTypeInfoFromType(scope->parentScope.Obj(), decl->returnType); - } - ITypeDescriptor* selectedProviderTd = nullptr; - List candidates; - - if (node->name.value == L"") - { - if (funcReturnType) - { - List unprocessed; - unprocessed.Add(funcReturnType->GetTypeDescriptor()); - - for (vint i = 0; i < unprocessed.Count(); i++) - { - auto td = unprocessed[i]; - auto candidate = td->GetTypeName() + L"Coroutine"; - if ((selectedProviderTd = description::GetTypeDescriptor(candidate))) - { - break; - } - else - { - candidates.Add(candidate); - } - - vint count = td->GetBaseTypeDescriptorCount(); - for (vint i = 0; i < count; i++) - { - auto baseTd = td->GetBaseTypeDescriptor(i); - if (!unprocessed.Contains(baseTd)) - { - unprocessed.Add(baseTd); - } - } - } - } - } - else - { - List results, resolveResults; - auto providerName = node->name.value.Right(node->name.value.Length() - 1); - - if (manager->ResolveName(scope, providerName, resolveResults)) - { - CopyFrom(results, resolveResults); - - for (vint i = results.Count() - 1; i >= 0; i--) - { - auto& result = results[i]; - ITypeDescriptor* providerTd = nullptr; - - if (result.scopeName && result.scopeName->typeDescriptor) - { - auto candidate = result.scopeName->typeDescriptor->GetTypeName() + L"Coroutine"; - providerTd = description::GetTypeDescriptor(candidate); - if (providerTd) - { - selectedProviderTd = providerTd; - } - else - { - candidates.Add(candidate); - } - } - - if (!providerTd) - { - results.RemoveAt(i); - } - } - - if (results.Count() == 1) - { - goto FINISH_SEARCHING; - } - else if (results.Count() > 1) - { - manager->errors.Add(WfErrors::TooManyTargets(node, resolveResults, providerName)); - goto SKIP_SEARCHING; - } - } - - resolveResults.Clear(); - if (manager->ResolveName(scope, providerName + L"Coroutine", resolveResults)) - { - CopyFrom(results, resolveResults); - - for (vint i = results.Count() - 1; i >= 0; i--) - { - auto& result = results[i]; - - if (result.scopeName && result.scopeName->typeDescriptor) - { - selectedProviderTd = result.scopeName->typeDescriptor; - } - else - { - results.RemoveAt(i); - } - } - - if (results.Count() == 1) - { - goto FINISH_SEARCHING; - } - else if (results.Count() > 1) - { - manager->errors.Add(WfErrors::TooManyTargets(node, resolveResults, providerName)); - goto SKIP_SEARCHING; - } - } - - candidates.Add(providerName); - candidates.Add(providerName + L"Coroutine"); - } - - FINISH_SEARCHING: - if (selectedProviderTd) - { - providerSymbol->typeInfo = MakePtr(selectedProviderTd, TypeInfoHint::Normal); - - if (funcReturnType) - { - WString creatorName; - if (funcReturnType->GetTypeDescriptor() == description::GetTypeDescriptor()) - { - creatorName = L"CreateAndRun"; - } - else - { - creatorName = L"Create"; - } - - if (auto group = selectedProviderTd->GetMethodGroupByName(creatorName, true)) - { - List results; - ITypeInfo* selectedImplType = nullptr; - IMethodInfo* selectedCreator = nullptr; - vint count = group->GetMethodCount(); - - for (vint i = 0; i < count; i++) - { - auto method = group->GetMethod(i); - if (method->IsStatic()) - { - if (method->GetParameterCount() == 1) - { - auto creatorType = method->GetParameter(0)->GetType(); - if (creatorType->GetDecorator() == ITypeInfo::SharedPtr) - { - auto functionType = creatorType->GetElementType(); - if (functionType->GetDecorator() == ITypeInfo::Generic && - functionType->GetGenericArgumentCount() == 2 && - functionType->GetTypeDescriptor() == description::GetTypeDescriptor() - ) - { - auto returnType = functionType->GetGenericArgument(0); - if (returnType->GetDecorator() == ITypeInfo::SharedPtr &&returnType->GetTypeDescriptor() == description::GetTypeDescriptor()) - { - selectedImplType = functionType->GetGenericArgument(1); - selectedCreator = method; - results.Add(ResolveExpressionResult::Method(method)); - } - } - } - } - } - } - - if (results.Count() == 1) - { - implSymbol->typeInfo = CopyTypeInfo(selectedImplType); - manager->coProviderResolvings.Add(node, ResolveExpressionResult::Method(selectedCreator)); - } - else if (results.Count() > 1) - { - manager->errors.Add(WfErrors::TooManyTargets(node, results, creatorName)); - } - } - - if (!implSymbol->typeInfo) - { - if (funcReturnType->GetTypeDescriptor() == description::GetTypeDescriptor()) - { - manager->errors.Add(WfErrors::CoProviderCreateAndRunNotExists(node, providerSymbol->typeInfo.Obj())); - } - else - { - manager->errors.Add(WfErrors::CoProviderCreateNotExists(node, providerSymbol->typeInfo.Obj())); - } - } - } - } - else - { - manager->errors.Add(WfErrors::CoProviderNotExists(node, candidates)); - } - SKIP_SEARCHING: - ValidateStatementSemantic(manager, node->statement); - } - - void Visit(WfCoroutineStatement* node)override - { - node->Accept((WfCoroutineStatement::IVisitor*)this); - } - - void Visit(WfCoPauseStatement* node)override - { - if (node->statement) - { - ValidateStatementSemantic(manager, node->statement); - } - } - - void Visit(WfCoOperatorStatement* node)override - { - auto scope = manager->nodeScopes[node].Obj(); - auto functionScope = scope->FindFunctionScope(); - if (auto funcDecl = functionScope->ownerNode.Cast()) - { - if (funcDecl->statement.Cast()) - { - auto providerScope = manager->nodeScopes[funcDecl->statement.Obj()]; - auto providerSymbol = providerScope->symbols[L"$PROVIDER"][0]; - auto implSymbol = providerScope->symbols[L"$IMPL"][0]; - if (providerSymbol->typeInfo && implSymbol->typeInfo) - { - List groups; - auto operatorName = node->opName.value.Right(node->opName.value.Length() - 1); - if (auto group = providerSymbol->typeInfo->GetTypeDescriptor()->GetMethodGroupByName(operatorName + L"AndRead", true)) - { - groups.Add(group); - } - if (node->varName.value == L"") - { - if (auto group = providerSymbol->typeInfo->GetTypeDescriptor()->GetMethodGroupByName(operatorName + L"AndPause", true)) - { - groups.Add(group); - } - } - - if (groups.Count() == 0) - { - manager->errors.Add(WfErrors::CoOperatorNotExists(node, providerSymbol->typeInfo.Obj())); - } - else - { - List functions; - FOREACH(IMethodGroupInfo*, group, groups) - { - vint count = group->GetMethodCount(); - for (vint i = 0; i < count; i++) - { - auto method = group->GetMethod(i); - if (method->IsStatic()) - { - if (method->GetParameterCount() > 0 && IsSameType(implSymbol->typeInfo.Obj(), method->GetParameter(0)->GetType())) - { - functions.Add(ResolveExpressionResult::Method(method)); - } - } - } - } - - vint selectedFunctionIndex = -1; - vint oldErrorCount = manager->errors.Count(); - List> arguments; - arguments.Add(nullptr); - CopyFrom(arguments, node->arguments, true); - SelectFunction(manager, node, nullptr, functions, arguments, selectedFunctionIndex); - if (selectedFunctionIndex != -1) - { - manager->coOperatorResolvings.Add(node, functions[selectedFunctionIndex]); - if (node->varName.value != L"" && manager->errors.Count() == oldErrorCount) - { - auto symbol = scope->symbols[node->varName.value][0]; - List types; - - FOREACH(Ptr, argument, node->arguments) - { - vint index = manager->expressionResolvings.Keys().IndexOf(argument.Obj()); - if (index != -1) - { - auto type = manager->expressionResolvings.Values()[index].type; - if (!types.Contains(type.Obj())) - { - types.Add(type.Obj()); - if (auto group = type->GetTypeDescriptor()->GetMethodGroupByName(L"CastResult", true)) - { - vint count = group->GetMethodCount(); - for (vint i = 0; i < count; i++) - { - auto method = group->GetMethod(i); - if (method->IsStatic()) - { - if (method->GetParameterCount() == 1 && - method->GetParameter(0)->GetType()->GetTypeDescriptor() == description::GetTypeDescriptor() && - method->GetReturn()->GetTypeDescriptor() != description::GetTypeDescriptor() - ) - { - manager->coCastResultResolvings.Add(node, ResolveExpressionResult::Method(method)); - symbol->typeInfo = CopyTypeInfo(method->GetReturn()); - break; - } - } - } - } - } - } - } - - if (!symbol->typeInfo) - { - manager->errors.Add(WfErrors::CoOperatorCannotResolveResultType(node, types)); - } - } - } - } - } - } - } - } - - static void Execute(Ptr statement, WfLexicalScopeManager* manager) - { - ValidateSemanticStatementVisitor visitor(manager); - statement->Accept(&visitor); - } - }; +namespace vl +{ + namespace workflow + { + namespace analyzer + { + using namespace collections; + using namespace reflection; + using namespace reflection::description; + using namespace typeimpl; /*********************************************************************** ValidateSemantic(Expression) ***********************************************************************/ - class ExpandVirtualExpressionVisitor : public Object, public WfVirtualExpression::IVisitor + class ExpandVirtualExpressionVisitor : public Object, public WfVirtualCseExpression::IVisitor { public: WfLexicalScopeManager* manager; @@ -21520,10 +24600,6 @@ ValidateSemantic(Expression) ExpandBindExpression(manager, node); } - void Visit(WfFormatExpression* node)override - { - } - void Visit(WfNewCoroutineExpression* node)override { ExpandNewCoroutineExpression(manager, node); @@ -21538,16 +24614,28 @@ ValidateSemantic(Expression) { auto castExpr = MakePtr(); castExpr->strategy = node->strategy; - castExpr->expression = CopyExpression(node->expression); + castExpr->expression = CopyExpression(node->expression, true); castExpr->type = GetTypeFromTypeInfo(expectedType.Obj()); node->expandedExpression = castExpr; } + + void Visit(WfCoOperatorExpression* node)override + { + auto scope = manager->nodeScopes[node].Obj(); + auto functionScope = scope->FindFunctionScope(); + if (functionScope->ownerNode.Cast()) + { + // variable is created after $coroutine{} is generated + // so the expanding is delayed until $coroutine{} is ready + ExpandCoOperatorExpression(manager, node); + } + } }; class ValidateSemanticExpressionVisitor : public Object , public WfExpression::IVisitor - , public WfVirtualExpression::IVisitor + , public WfVirtualCseExpression::IVisitor { public: WfLexicalScopeManager* manager; @@ -21743,10 +24831,11 @@ ValidateSemantic(Expression) if (firstConfigScope) { bool inMethodBody = lastConfigScope->GetOwnerClassMember() && lastConfigScope->ownerNode.Cast(); - bool inDtorBody = lastConfigScope->GetOwnerClassMember() && lastConfigScope->ownerNode.Cast(); - bool inCtorBody = lastConfigScope->parentScope->GetOwnerClassMember() && lastConfigScope->parentScope->ownerNode.Cast(); + bool inDtorBody = lastConfigScope->ownerNode.Cast(); + bool inCtorBody = lastConfigScope->parentScope->ownerNode.Cast(); + bool inStateBody = lastConfigScope->ownerNode.Cast(); - if (!inMethodBody && !inDtorBody && !inCtorBody) + if (!inMethodBody && !inDtorBody && !inCtorBody && !inStateBody) { manager->errors.Add(WfErrors::FieldCannotInitializeUsingEachOther(node, result)); } @@ -23005,7 +26094,8 @@ ValidateSemantic(Expression) return symbol->typeInfo; } - class NewInterfaceExpressionVisitor : public empty_visitor::DeclarationVisitor + class NewInterfaceExpressionVisitor + : public empty_visitor::DeclarationVisitor { public: WfLexicalScopeManager* manager; @@ -23018,7 +26108,7 @@ ValidateSemantic(Expression) { } - void Dispatch(WfVirtualDeclaration* node)override + void Dispatch(WfVirtualCfeDeclaration* node)override { FOREACH(Ptr, decl, node->expandedDeclarations) { @@ -23026,6 +26116,11 @@ ValidateSemantic(Expression) } } + void Dispatch(WfVirtualCseDeclaration* node)override + { + CHECK_FAIL(L"NewInterfaceExpressionVisitor::Visit(WfVirtualCseDeclaration*)#Internal error, Temporary not supported."); + } + void Visit(WfFunctionDeclaration* node)override { lastFunction = node; @@ -23292,16 +26387,29 @@ ValidateSemantic(Expression) } } - void Visit(WfVirtualExpression* node)override + void Visit(WfVirtualCfeExpression* node)override + { + if (GetExpressionType(manager, node->expandedExpression, expectedType)) + { + results.Add(manager->expressionResolvings[node->expandedExpression.Obj()]); + } + } + + void Visit(WfVirtualCseExpression* node)override { bool expanded = node->expandedExpression; vint errorCount = manager->errors.Count(); - node->Accept((WfVirtualExpression::IVisitor*)this); + node->Accept((WfVirtualCseExpression::IVisitor*)this); if (!expanded && manager->errors.Count() == errorCount) { ExpandVirtualExpressionVisitor visitor(manager, expectedType); node->Accept(&visitor); + if (!node->expandedExpression) + { + return; + } + SetCodeRange(node->expandedExpression, node->codeRange); auto parentScope = manager->nodeScopes[node]; @@ -23337,12 +26445,6 @@ ValidateSemantic(Expression) results.Add(ResolveExpressionResult::ReadonlyType(TypeInfoRetriver>::CreateTypeInfo())); } - void Visit(WfFormatExpression* node)override - { - Ptr typeInfo = TypeInfoRetriver::CreateTypeInfo(); - results.Add(ResolveExpressionResult::ReadonlyType(typeInfo)); - } - void Visit(WfNewCoroutineExpression* node)override { Ptr typeInfo = TypeInfoRetriver>::CreateTypeInfo(); @@ -23391,6 +26493,60 @@ ValidateSemantic(Expression) } } + void Visit(WfCoOperatorExpression* node)override + { + auto scope = manager->nodeScopes[node].Obj(); + auto functionScope = scope->FindFunctionScope(); + if (auto funcDecl = functionScope->ownerNode.Cast()) + { + if (funcDecl->statement.Cast()) + { + auto providerScope = manager->nodeScopes[funcDecl->statement.Obj()]; + auto providerSymbol = providerScope->symbols[L"$PROVIDER"][0]; + auto implSymbol = providerScope->symbols[L"$IMPL"][0]; + if (providerSymbol->typeInfo && implSymbol->typeInfo) + { + List methods; + if (auto group = providerSymbol->typeInfo->GetTypeDescriptor()->GetMethodGroupByName(L"QueryContext", true)) + { + vint count = group->GetMethodCount(); + for (vint i = 0; i < count; i++) + { + auto method = group->GetMethod(i); + if (method->IsStatic()) + { + if (method->GetParameterCount() == 1 && IsSameType(implSymbol->typeInfo.Obj(), method->GetParameter(0)->GetType())) + { + methods.Add(ResolveExpressionResult::Method(method)); + } + } + } + } + + if (methods.Count() > 1) + { + manager->errors.Add(WfErrors::CannotPickOverloadedFunctions(node, methods)); + } + else if (methods.Count() == 1) + { + auto contextType = methods[0].methodInfo->GetReturn(); + SortedList searchedTypes; + manager->ResolveMember(contextType->GetTypeDescriptor(), node->name.value, false, searchedTypes, results); + + if (results.Count() == 0) + { + manager->errors.Add(WfErrors::MemberNotExists(node, contextType->GetTypeDescriptor(), node->name.value)); + } + } + else + { + manager->errors.Add(WfErrors::CoOperatorNotExists(node, providerSymbol->typeInfo.Obj())); + } + } + } + } + } + static void Execute(Ptr expression, WfLexicalScopeManager* manager, Ptr expectedType, List& results) { ValidateSemanticExpressionVisitor visitor(manager, expectedType, results); @@ -23403,8 +26559,8 @@ IsConstantExpression ***********************************************************************/ class ValidateConstantExpressionVisitor - : public Object - , public WfExpression::IVisitor + : public empty_visitor::ExpressionVisitor + , public empty_visitor::VirtualCseExpressionVisitor { public: WfLexicalScopeManager* manager; @@ -23438,12 +26594,14 @@ IsConstantExpression } } - void Visit(WfThisExpression* node)override + void Dispatch(WfVirtualCfeExpression* node)override { + node->expandedExpression->Accept(this); } - void Visit(WfTopQualifiedExpression* node)override + void Dispatch(WfVirtualCseExpression* node)override { + node->Accept((WfVirtualCseExpression::IVisitor*)this); } void Visit(WfReferenceExpression* node)override @@ -23451,18 +26609,6 @@ IsConstantExpression VisitReferenceExpression(node, node->name.value); } - void Visit(WfOrderedNameExpression* node)override - { - } - - void Visit(WfOrderedLambdaExpression* node)override - { - } - - void Visit(WfMemberExpression* node)override - { - } - void Visit(WfChildExpression* node)override { VisitReferenceExpression(node, node->name.value); @@ -23501,23 +26647,11 @@ IsConstantExpression } } - void Visit(WfLetExpression* node)override - { - } - - void Visit(WfIfExpression* node)override - { - } - void Visit(WfRangeExpression* node)override { isConstant = Call(node->begin) && Call(node->end); } - void Visit(WfSetTestingExpression* node)override - { - } - void Visit(WfConstructorExpression* node)override { auto result = manager->expressionResolvings[node]; @@ -23537,18 +26671,6 @@ IsConstantExpression isConstant = true; } - void Visit(WfInferExpression* node)override - { - } - - void Visit(WfTypeCastingExpression* node)override - { - } - - void Visit(WfTypeTestingExpression* node)override - { - } - void Visit(WfTypeOfTypeExpression* node)override { isConstant = true; @@ -23559,42 +26681,6 @@ IsConstantExpression isConstant = true; } - void Visit(WfAttachEventExpression* node)override - { - } - - void Visit(WfDetachEventExpression* node)override - { - } - - void Visit(WfObserveExpression* node)override - { - } - - void Visit(WfCallExpression* node)override - { - } - - void Visit(WfFunctionExpression* node)override - { - } - - void Visit(WfNewClassExpression* node)override - { - } - - void Visit(WfNewInterfaceExpression* node)override - { - } - - void Visit(WfVirtualExpression* node)override - { - if (node->expandedExpression) - { - isConstant = Call(node->expandedExpression); - } - } - static void Execute(Ptr expression, WfLexicalScopeManager* manager, Ptr expectedType) { if (GetExpressionType(manager, expression, expectedType)) @@ -23613,29 +26699,6 @@ IsConstantExpression ValidateSemantic ***********************************************************************/ - void ValidateModuleSemantic(WfLexicalScopeManager* manager, Ptr module) - { - FOREACH(Ptr, declaration, module->declarations) - { - ValidateDeclarationSemantic(manager, declaration); - } - } - - void ValidateClassMemberSemantic(WfLexicalScopeManager* manager, Ptr td, Ptr classDecl, Ptr memberDecl) - { - return ValidateSemanticClassMemberVisitor::Execute(td, classDecl, memberDecl, manager); - } - - void ValidateDeclarationSemantic(WfLexicalScopeManager* manager, Ptr declaration) - { - return ValidateSemanticDeclarationVisitor::Execute(declaration, manager); - } - - void ValidateStatementSemantic(WfLexicalScopeManager* manager, Ptr statement) - { - return ValidateSemanticStatementVisitor::Execute(statement, manager); - } - void ValidateExpressionSemantic(WfLexicalScopeManager* manager, Ptr expression, Ptr expectedType, collections::List& results) { ValidateSemanticExpressionVisitor::Execute(expression, manager, expectedType, results); @@ -23682,210 +26745,784 @@ ValidateSemantic { ValidateConstantExpressionVisitor::Execute(expression, manager, expectedType); } + } + } +} + /*********************************************************************** -GetExpressionScopeName +.\ANALYZER\WFANALYZER_VALIDATESEMANTIC_STATEMENT.CPP ***********************************************************************/ - Ptr GetExpressionScopeName(WfLexicalScopeManager* manager, Ptr expression) - { - List results; - ValidateExpressionSemantic(manager, expression, 0, results); - if (results.Count() == 0) return 0; - - for (vint i = results.Count() - 1; i >= 0; i--) - { - auto& result = results[i]; - if (!result.scopeName) - { - results.RemoveAt(i); - } - } - if (results.Count() == 0) - { - manager->errors.Add(WfErrors::ExpressionIsNotScopeName(expression.Obj())); - return 0; - } - else if (results.Count() > 1) - { - manager->errors.Add(WfErrors::TooManyTargets(expression.Obj(), results, GetExpressionName(expression))); - return 0; - } - - auto result = results[0]; - manager->expressionResolvings.Add(expression, result); - return result.scopeName; - } +namespace vl +{ + namespace workflow + { + namespace analyzer + { + using namespace collections; + using namespace reflection; + using namespace reflection::description; + using namespace typeimpl; /*********************************************************************** -GetExpressionEventInfo +ValidateSemantic(Statement) ***********************************************************************/ - reflection::description::IEventInfo* GetExpressionEventInfo(WfLexicalScopeManager* manager, Ptr expression) + class ExpandVirtualStatementVisitor : public Object, public WfVirtualCseStatement::IVisitor { - List results; - ValidateExpressionSemantic(manager, expression, 0, results); - if (results.Count() == 0) return 0; + public: + WfLexicalScopeManager* manager; - for (vint i = results.Count() - 1; i >= 0; i--) + ExpandVirtualStatementVisitor(WfLexicalScopeManager* _manager) + :manager(_manager) { - auto& result = results[i]; - if (!result.eventInfo) - { - results.RemoveAt(i); - } - } - if (results.Count() == 0) - { - manager->errors.Add(WfErrors::ExpressionIsNotEvent(expression.Obj())); - return 0; - } - else if (results.Count() > 1) - { - manager->errors.Add(WfErrors::TooManyTargets(expression.Obj(), results, GetExpressionName(expression))); - return 0; } - auto result = results[0]; - manager->expressionResolvings.Add(expression, result); - return result.eventInfo; - } + void Visit(WfSwitchStatement* node)override + { + ExpandSwitchStatement(manager, node); + } -/*********************************************************************** -GetExpressionTypes/GetExpressionType/GetLeftValueExpressionType -***********************************************************************/ + void Visit(WfForEachStatement* node)override + { + ExpandForEachStatement(manager, node); + } - void GetExpressionTypes(WfLexicalScopeManager* manager, Ptr expression, Ptr expectedType, bool allowEvent, collections::List& results) + void Visit(WfCoProviderStatement* node)override + { + ExpandCoProviderStatement(manager, node); + } + }; + + class ValidateSemanticStatementVisitor + : public Object + , public WfStatement::IVisitor + , public WfVirtualCseStatement::IVisitor + , public WfCoroutineStatement::IVisitor + , public WfStateMachineStatement::IVisitor { - ValidateExpressionSemantic(manager, expression, expectedType, results); - if (results.Count() == 0) return; + public: + WfLexicalScopeManager* manager; - Ptr scopeName; - IEventInfo* eventInfo = 0; - for (vint i = results.Count() - 1; i >= 0; i--) + ValidateSemanticStatementVisitor(WfLexicalScopeManager* _manager) + :manager(_manager) { - auto& result = results[i]; - if (result.scopeName && !scopeName) - { - scopeName = result.scopeName; - } - if (result.eventInfo && !eventInfo) - { - eventInfo = result.eventInfo; - } - if (!result.type && !(allowEvent && eventInfo)) - { - results.RemoveAt(i); - } - } - if (results.Count() == 0) - { - if (scopeName) - { - manager->errors.Add(WfErrors::ScopeNameIsNotExpression(expression.Obj(), scopeName)); - } - if (eventInfo) - { - manager->errors.Add(WfErrors::EventIsNotExpression(expression.Obj(), eventInfo)); - } } - if (expectedType) + void Visit(WfBreakStatement* node)override { - List> failedTypes; - for (vint i = results.Count() - 1; i >= 0; i--) + } + + void Visit(WfContinueStatement* node)override + { + } + + void Visit(WfReturnStatement* node)override + { + auto scope = manager->nodeScopes[node].Obj(); + auto functionScope = scope->FindFunctionScope(); + if (auto funcDecl = functionScope->ownerNode.Cast()) { - auto& result = results[i]; - if (!CanConvertToType(result.type.Obj(), expectedType.Obj(), false)) + auto providerStat = funcDecl->statement.Cast(); + if (providerStat && !providerStat->expandedStatement) { - failedTypes.Add(result.type); - results.RemoveAt(i); - } - } + auto providerScope = manager->nodeScopes[funcDecl->statement.Obj()]; + auto providerSymbol = providerScope->symbols[L"$PROVIDER"][0]; + auto implSymbol = providerScope->symbols[L"$IMPL"][0]; + if (providerSymbol->typeInfo && implSymbol->typeInfo) + { + if (auto group = providerSymbol->typeInfo->GetTypeDescriptor()->GetMethodGroupByName(L"ReturnAndExit", true)) + { + List functions; + vint count = group->GetMethodCount(); + for (vint i = 0; i < count; i++) + { + auto method = group->GetMethod(i); + if (method->IsStatic()) + { + if (method->GetParameterCount() > 0 && IsSameType(implSymbol->typeInfo.Obj(), method->GetParameter(0)->GetType())) + { + functions.Add(ResolveExpressionResult::Method(method)); + } + } + } - if (results.Count() == 0) - { - FOREACH(Ptr, type, failedTypes) + if (functions.Count() != 0) + { + vint selectedFunctionIndex = -1; + List> arguments; + arguments.Add(nullptr); + if (node->expression) + { + arguments.Add(node->expression); + } + SelectFunction(manager, node, nullptr, functions, arguments, selectedFunctionIndex); + if (selectedFunctionIndex != -1) + { + manager->coOperatorResolvings.Add(node, functions[selectedFunctionIndex]); + } + } + else + { + manager->errors.Add(WfErrors::CoOperatorNotExists(node, providerSymbol->typeInfo.Obj())); + } + } + else + { + manager->errors.Add(WfErrors::CoOperatorNotExists(node, providerSymbol->typeInfo.Obj())); + } + } + } + else { - manager->errors.Add(WfErrors::ExpressionCannotImplicitlyConvertToType(expression.Obj(), type.Obj(), expectedType.Obj())); + auto returnType = CreateTypeInfoFromType(scope, funcDecl->returnType); + if (node->expression) + { + if (returnType->GetTypeDescriptor() == description::GetTypeDescriptor()) + { + manager->errors.Add(WfErrors::CannotReturnExpression(node)); + } + else + { + GetExpressionType(manager, node->expression, returnType); + } + } + else if (returnType->GetDecorator() != ITypeInfo::TypeDescriptor || returnType->GetTypeDescriptor() != description::GetTypeDescriptor()) + { + manager->errors.Add(WfErrors::ReturnMissExpression(node, returnType.Obj())); + } } } - } - } - - Ptr GetExpressionType(WfLexicalScopeManager* manager, Ptr expression, Ptr expectedType) - { - List results; - GetExpressionTypes(manager, expression, expectedType, false, results); - - if (results.Count() > 1) - { - manager->errors.Add(WfErrors::TooManyTargets(expression.Obj(), results, GetExpressionName(expression))); - return expectedType; - } - else if (results.Count() == 1) - { - auto result = results[0]; - result.expectedType = expectedType; - manager->expressionResolvings.Add(expression, result); - return expectedType ? expectedType : result.type; - } - else - { - return expectedType; - } - } - - Ptr GetLeftValueExpressionType(WfLexicalScopeManager* manager, Ptr expression) - { - List results; - GetExpressionTypes(manager, expression, nullptr, false, results); - - if (results.Count() > 1) - { - manager->errors.Add(WfErrors::TooManyTargets(expression.Obj(), results, GetExpressionName(expression))); - } - else if (results.Count() == 1) - { - if (results[0].writableType) - { - auto result = results[0]; - manager->expressionResolvings.Add(expression, result); - return result.writableType; - } else { - manager->errors.Add(WfErrors::ExpressionIsNotLeftValue(expression.Obj(), results[0])); + if (node->expression) + { + manager->errors.Add(WfErrors::CannotReturnExpression(node)); + } } } - return 0; - } -/*********************************************************************** -GetEnumerableExpressionItemType -***********************************************************************/ - - Ptr GetEnumerableExpressionItemType(WfLexicalScopeManager* manager, Ptr expression, Ptr expectedType) - { - Ptr collectionType = GetExpressionType(manager, expression, expectedType); - if (collectionType) + void Visit(WfDeleteStatement* node)override { - if (collectionType->GetTypeDescriptor()->CanConvertTo(description::GetTypeDescriptor())) + Ptr type = GetExpressionType(manager, node->expression, 0); + if (type) { - if (collectionType->GetDecorator() == ITypeInfo::SharedPtr) + if (type->GetDecorator() != ITypeInfo::RawPtr) { - ITypeInfo* genericType = collectionType->GetElementType(); - if (genericType->GetDecorator() == ITypeInfo::Generic && genericType->GetGenericArgumentCount() == 1) + manager->errors.Add(WfErrors::DeleteNonRawPointer(node, type.Obj())); + } + } + } + + void Visit(WfRaiseExceptionStatement* node)override + { + if (node->expression) + { + if (auto type = GetExpressionType(manager, node->expression, nullptr)) + { + auto stringType = TypeInfoRetriver::CreateTypeInfo(); + auto exceptionType = TypeInfoRetriver>::CreateTypeInfo(); + if (!CanConvertToType(type.Obj(), stringType.Obj(), false) && !CanConvertToType(type.Obj(), exceptionType.Obj(), false)) { - return CopyTypeInfo(genericType->GetGenericArgument(0)); + manager->errors.Add(WfErrors::ExpressionCannotImplicitlyConvertToType(node->expression.Obj(), type.Obj(), stringType.Obj())); } } - return TypeInfoRetriver::CreateTypeInfo(); + } + } + + void Visit(WfIfStatement* node)override + { + if (node->type) + { + auto scope = manager->nodeScopes[node].Obj(); + auto symbol = scope->symbols[node->name.value][0]; + if (!IsNullAcceptableType(symbol->typeInfo.Obj())) + { + manager->errors.Add(WfErrors::NullCannotImplicitlyConvertToType(node->expression.Obj(), symbol->typeInfo.Obj())); + } + GetExpressionType(manager, node->expression, nullptr); + } + else + { + Ptr boolType = TypeInfoRetriver::CreateTypeInfo(); + GetExpressionType(manager, node->expression, boolType); + } + ValidateStatementSemantic(manager, node->trueBranch); + if (node->falseBranch) + { + ValidateStatementSemantic(manager, node->falseBranch); + } + } + + void Visit(WfWhileStatement* node)override + { + Ptr boolType = TypeInfoRetriver::CreateTypeInfo(); + GetExpressionType(manager, node->condition, boolType); + ValidateStatementSemantic(manager, node->statement); + } + + void Visit(WfTryStatement* node)override + { + ValidateStatementSemantic(manager, node->protectedStatement); + if (node->catchStatement) + { + ValidateStatementSemantic(manager, node->catchStatement); + } + if (node->finallyStatement) + { + ValidateStatementSemantic(manager, node->finallyStatement); + } + } + + void Visit(WfBlockStatement* node)override + { + FOREACH(Ptr, statement, node->statements) + { + ValidateStatementSemantic(manager, statement); + } + } + + void Visit(WfGotoStatement* node)override + { + auto scope = manager->nodeScopes[node].Obj(); + vint counter = 0; + while (scope && !scope->functionConfig) + { + if (auto block = scope->ownerNode.Cast()) + { + if (block->endLabel.value == node->label.value) + { + counter++; + } + } + scope = scope->parentScope.Obj(); } - manager->errors.Add(WfErrors::ExpressionIsNotCollection(expression.Obj(), collectionType.Obj())); + if (counter == 0) + { + manager->errors.Add(WfErrors::GotoLabelNotExists(node)); + } + else if (counter > 1) + { + manager->errors.Add(WfErrors::TooManyGotoLabel(node)); + } } - return 0; + + void Visit(WfExpressionStatement* node)override + { + GetExpressionType(manager, node->expression, 0); + } + + void Visit(WfVariableStatement* node)override + { + ValidateDeclarationSemantic(manager, node->variable); + } + + void Visit(WfVirtualCseStatement* node)override + { + bool expanded = node->expandedStatement; + vint errorCount = manager->errors.Count(); + node->Accept((WfVirtualCseStatement::IVisitor*)this); + + if (!expanded && manager->errors.Count() == errorCount) + { + ExpandVirtualStatementVisitor visitor(manager); + node->Accept(&visitor); + SetCodeRange(node->expandedStatement, node->codeRange); + + auto parentScope = manager->nodeScopes[node]; + if (parentScope->ownerNode == node) + { + parentScope = parentScope->parentScope; + } + + ContextFreeStatementDesugar(manager, node->expandedStatement); + BuildScopeForStatement(manager, parentScope, node->expandedStatement); + if (!CheckScopes_DuplicatedSymbol(manager) || !CheckScopes_SymbolType(manager)) + { + return; + } + } + + if (node->expandedStatement) + { + ValidateStatementSemantic(manager, node->expandedStatement); + } + } + + void Visit(WfSwitchStatement* node)override + { + Ptr type = GetExpressionType(manager, node->expression, 0); + FOREACH(Ptr, switchCase, node->caseBranches) + { + Ptr caseType; + if (IsExpressionDependOnExpectedType(manager, switchCase->expression)) + { + caseType = GetExpressionType(manager, switchCase->expression, type); + } + else + { + caseType = GetExpressionType(manager, switchCase->expression, 0); + } + + if (type && caseType) + { + if (!GetMergedType(type, caseType)) + { + manager->errors.Add(WfErrors::CannotMergeTwoType(switchCase->expression.Obj(), type.Obj(), caseType.Obj())); + } + } + ValidateStatementSemantic(manager, switchCase->statement); + } + if (node->defaultBranch) + { + ValidateStatementSemantic(manager, node->defaultBranch); + } + } + + void Visit(WfForEachStatement* node)override + { + Ptr elementType = GetEnumerableExpressionItemType(manager, node->collection, 0); + if (elementType) + { + auto scope = manager->nodeScopes[node].Obj(); + auto symbol = scope->symbols[node->name.value][0]; + symbol->typeInfo = elementType; + symbol->type = GetTypeFromTypeInfo(elementType.Obj()); + } + ValidateStatementSemantic(manager, node->statement); + } + + void Visit(WfCoProviderStatement* node)override + { + auto scope = manager->nodeScopes[node].Obj(); + auto providerSymbol = scope->symbols[L"$PROVIDER"][0]; + auto implSymbol = scope->symbols[L"$IMPL"][0]; + Ptr funcReturnType; + { + auto decl = scope->parentScope->ownerNode.Cast(); + funcReturnType = CreateTypeInfoFromType(scope->parentScope.Obj(), decl->returnType); + } + ITypeDescriptor* selectedProviderTd = nullptr; + List candidates; + + if (node->name.value == L"") + { + if (funcReturnType) + { + List unprocessed; + unprocessed.Add(funcReturnType->GetTypeDescriptor()); + + for (vint i = 0; i < unprocessed.Count(); i++) + { + auto td = unprocessed[i]; + auto candidate = td->GetTypeName() + L"Coroutine"; + if ((selectedProviderTd = description::GetTypeDescriptor(candidate))) + { + break; + } + else + { + candidates.Add(candidate); + } + + vint count = td->GetBaseTypeDescriptorCount(); + for (vint i = 0; i < count; i++) + { + auto baseTd = td->GetBaseTypeDescriptor(i); + if (!unprocessed.Contains(baseTd)) + { + unprocessed.Add(baseTd); + } + } + } + } + } + else + { + List results, resolveResults; + auto providerName = node->name.value.Right(node->name.value.Length() - 1); + + if (manager->ResolveName(scope, providerName, resolveResults)) + { + CopyFrom(results, resolveResults); + + for (vint i = results.Count() - 1; i >= 0; i--) + { + auto& result = results[i]; + ITypeDescriptor* providerTd = nullptr; + + if (result.scopeName && result.scopeName->typeDescriptor) + { + auto candidate = result.scopeName->typeDescriptor->GetTypeName() + L"Coroutine"; + providerTd = description::GetTypeDescriptor(candidate); + if (providerTd) + { + selectedProviderTd = providerTd; + } + else + { + candidates.Add(candidate); + } + } + + if (!providerTd) + { + results.RemoveAt(i); + } + } + + if (results.Count() == 1) + { + goto FINISH_SEARCHING; + } + else if (results.Count() > 1) + { + manager->errors.Add(WfErrors::TooManyTargets(node, resolveResults, providerName)); + goto SKIP_SEARCHING; + } + } + + resolveResults.Clear(); + if (manager->ResolveName(scope, providerName + L"Coroutine", resolveResults)) + { + CopyFrom(results, resolveResults); + + for (vint i = results.Count() - 1; i >= 0; i--) + { + auto& result = results[i]; + + if (result.scopeName && result.scopeName->typeDescriptor) + { + selectedProviderTd = result.scopeName->typeDescriptor; + } + else + { + results.RemoveAt(i); + } + } + + if (results.Count() == 1) + { + goto FINISH_SEARCHING; + } + else if (results.Count() > 1) + { + manager->errors.Add(WfErrors::TooManyTargets(node, resolveResults, providerName)); + goto SKIP_SEARCHING; + } + } + + candidates.Add(providerName); + candidates.Add(providerName + L"Coroutine"); + } + + FINISH_SEARCHING: + if (selectedProviderTd) + { + providerSymbol->typeInfo = MakePtr(selectedProviderTd, TypeInfoHint::Normal); + + if (funcReturnType) + { + WString creatorName; + if (funcReturnType->GetTypeDescriptor() == description::GetTypeDescriptor()) + { + creatorName = L"CreateAndRun"; + } + else + { + creatorName = L"Create"; + } + + if (auto group = selectedProviderTd->GetMethodGroupByName(creatorName, true)) + { + List results; + ITypeInfo* selectedImplType = nullptr; + IMethodInfo* selectedCreator = nullptr; + vint count = group->GetMethodCount(); + + for (vint i = 0; i < count; i++) + { + auto method = group->GetMethod(i); + if (method->IsStatic()) + { + if (method->GetParameterCount() == 1) + { + auto creatorType = method->GetParameter(0)->GetType(); + if (creatorType->GetDecorator() == ITypeInfo::SharedPtr) + { + auto functionType = creatorType->GetElementType(); + if (functionType->GetDecorator() == ITypeInfo::Generic && + functionType->GetGenericArgumentCount() == 2 && + functionType->GetTypeDescriptor() == description::GetTypeDescriptor() + ) + { + auto returnType = functionType->GetGenericArgument(0); + if (returnType->GetDecorator() == ITypeInfo::SharedPtr &&returnType->GetTypeDescriptor() == description::GetTypeDescriptor()) + { + selectedImplType = functionType->GetGenericArgument(1); + selectedCreator = method; + results.Add(ResolveExpressionResult::Method(method)); + } + } + } + } + } + } + + if (results.Count() == 1) + { + implSymbol->typeInfo = CopyTypeInfo(selectedImplType); + manager->coProviderResolvings.Add(node, ResolveExpressionResult::Method(selectedCreator)); + } + else if (results.Count() > 1) + { + manager->errors.Add(WfErrors::TooManyTargets(node, results, creatorName)); + } + } + + if (!implSymbol->typeInfo) + { + if (funcReturnType->GetTypeDescriptor() == description::GetTypeDescriptor()) + { + manager->errors.Add(WfErrors::CoProviderCreateAndRunNotExists(node, providerSymbol->typeInfo.Obj())); + } + else + { + manager->errors.Add(WfErrors::CoProviderCreateNotExists(node, providerSymbol->typeInfo.Obj())); + } + } + } + } + else + { + manager->errors.Add(WfErrors::CoProviderNotExists(node, candidates)); + } + SKIP_SEARCHING: + ValidateStatementSemantic(manager, node->statement); + } + + void Visit(WfCoroutineStatement* node)override + { + node->Accept((WfCoroutineStatement::IVisitor*)this); + } + + void Visit(WfCoPauseStatement* node)override + { + if (node->statement) + { + ValidateStatementSemantic(manager, node->statement); + } + } + + void Visit(WfCoOperatorStatement* node)override + { + auto scope = manager->nodeScopes[node].Obj(); + auto functionScope = scope->FindFunctionScope(); + if (auto funcDecl = functionScope->ownerNode.Cast()) + { + if (funcDecl->statement.Cast()) + { + auto providerScope = manager->nodeScopes[funcDecl->statement.Obj()]; + auto providerSymbol = providerScope->symbols[L"$PROVIDER"][0]; + auto implSymbol = providerScope->symbols[L"$IMPL"][0]; + if (providerSymbol->typeInfo && implSymbol->typeInfo) + { + List groups; + auto operatorName = node->opName.value.Right(node->opName.value.Length() - 1); + if (auto group = providerSymbol->typeInfo->GetTypeDescriptor()->GetMethodGroupByName(operatorName + L"AndRead", true)) + { + groups.Add(group); + } + if (node->varName.value == L"") + { + if (auto group = providerSymbol->typeInfo->GetTypeDescriptor()->GetMethodGroupByName(operatorName + L"AndPause", true)) + { + groups.Add(group); + } + } + + List functions; + FOREACH(IMethodGroupInfo*, group, groups) + { + vint count = group->GetMethodCount(); + for (vint i = 0; i < count; i++) + { + auto method = group->GetMethod(i); + if (method->IsStatic()) + { + if (method->GetParameterCount() > 0 && IsSameType(implSymbol->typeInfo.Obj(), method->GetParameter(0)->GetType())) + { + functions.Add(ResolveExpressionResult::Method(method)); + } + } + } + } + + if (functions.Count() == 0) + { + manager->errors.Add(WfErrors::CoOperatorNotExists(node, providerSymbol->typeInfo.Obj())); + } + else + { + vint selectedFunctionIndex = -1; + vint oldErrorCount = manager->errors.Count(); + List> arguments; + arguments.Add(nullptr); + CopyFrom(arguments, node->arguments, true); + SelectFunction(manager, node, nullptr, functions, arguments, selectedFunctionIndex); + if (selectedFunctionIndex != -1) + { + manager->coOperatorResolvings.Add(node, functions[selectedFunctionIndex]); + if (node->varName.value != L"" && manager->errors.Count() == oldErrorCount) + { + auto symbol = scope->symbols[node->varName.value][0]; + List types; + + FOREACH(Ptr, argument, node->arguments) + { + vint index = manager->expressionResolvings.Keys().IndexOf(argument.Obj()); + if (index != -1) + { + auto type = manager->expressionResolvings.Values()[index].type; + if (!types.Contains(type.Obj())) + { + types.Add(type.Obj()); + if (auto group = type->GetTypeDescriptor()->GetMethodGroupByName(L"CastResult", true)) + { + vint count = group->GetMethodCount(); + for (vint i = 0; i < count; i++) + { + auto method = group->GetMethod(i); + if (method->IsStatic()) + { + if (method->GetParameterCount() == 1 && + method->GetParameter(0)->GetType()->GetTypeDescriptor() == description::GetTypeDescriptor() && + method->GetReturn()->GetTypeDescriptor() != description::GetTypeDescriptor() + ) + { + manager->coCastResultResolvings.Add(node, ResolveExpressionResult::Method(method)); + symbol->typeInfo = CopyTypeInfo(method->GetReturn()); + break; + } + } + } + } + } + } + } + + if (!symbol->typeInfo) + { + manager->errors.Add(WfErrors::CoOperatorCannotResolveResultType(node, types)); + } + } + } + } + } + } + } + } + + void Visit(WfStateMachineStatement* node)override + { + node->Accept((WfStateMachineStatement::IVisitor*)this); + } + + void Visit(WfStateSwitchStatement* node)override + { + auto smcScope = manager->nodeScopes[node]->FindFunctionScope()->parentScope.Obj(); + CHECK_ERROR(smcScope->ownerNode.Cast(), L"ValidateSemanticStatementVisitor::Visit(WfStateSwitchStatement*)#ValidateStatementStructure should check state machine statements' location."); + + FOREACH(Ptr, switchCase, node->caseBranches) + { + auto caseScope = manager->nodeScopes[switchCase.Obj()].Obj(); + Ptr inputSymbol; + { + vint index = smcScope->symbols.Keys().IndexOf(switchCase->name.value); + if (index != -1) + { + inputSymbol = smcScope->symbols.GetByIndex(index)[0]; + } + } + if (!inputSymbol || !inputSymbol->creatorNode.Cast()) + { + manager->errors.Add(WfErrors::StateInputNotExists(switchCase.Obj())); + } + else + { + auto td = manager->declarationTypes[smcScope->ownerNode.Cast().Obj()].Obj(); + auto inputMethod = td->GetMethodGroupByName(switchCase->name.value, false)->GetMethod(0); + if (switchCase->arguments.Count() != inputMethod->GetParameterCount()) + { + manager->errors.Add(WfErrors::StateSwitchArgumentCountNotMatch(switchCase.Obj())); + } + else + { + FOREACH_INDEXER(Ptr, argument, index, switchCase->arguments) + { + auto argumentSymbol = caseScope->symbols[argument->name.value][0]; + argumentSymbol->typeInfo = CopyTypeInfo(inputMethod->GetParameter(index)->GetType()); + argumentSymbol->type = GetTypeFromTypeInfo(argumentSymbol->typeInfo.Obj()); + } + } + } + + ValidateStatementSemantic(manager, switchCase->statement); + } + } + + void Visit(WfStateInvokeStatement* node)override + { + auto smcScope = manager->nodeScopes[node]->FindFunctionScope()->parentScope.Obj(); + CHECK_ERROR(smcScope->ownerNode.Cast(), L"ValidateSemanticStatementVisitor::Visit(WfStateSwitchStatement*)#ValidateStatementStructure should check state machine statements' location."); + + Ptr stateSymbol; + { + vint index = smcScope->symbols.Keys().IndexOf(node->name.value); + if (index != -1) + { + stateSymbol = smcScope->symbols.GetByIndex(index)[0]; + } + } + if (!stateSymbol || !stateSymbol->creatorNode.Cast()) + { + manager->errors.Add(WfErrors::StateNotExists(node)); + } + else + { + auto stateDecl = stateSymbol->creatorNode.Cast(); + if (stateDecl->arguments.Count() != node->arguments.Count()) + { + manager->errors.Add(WfErrors::StateArgumentCountNotMatch(node)); + } + else + { + auto stateScope = manager->nodeScopes[stateDecl.Obj()]; + FOREACH_INDEXER(Ptr, argument, index, node->arguments) + { + auto typeInfo = stateScope->symbols[stateDecl->arguments[index]->name.value][0]->typeInfo; + GetExpressionType(manager, argument, typeInfo); + } + } + } + } + + static void Execute(Ptr statement, WfLexicalScopeManager* manager) + { + ValidateSemanticStatementVisitor visitor(manager); + statement->Accept(&visitor); + } + }; + +/*********************************************************************** +ValidateSemantic +***********************************************************************/ + + void ValidateStatementSemantic(WfLexicalScopeManager* manager, Ptr statement) + { + return ValidateSemanticStatementVisitor::Execute(statement, manager); } } } @@ -23918,6 +27555,1434 @@ ValidateStructureContext { } +/*********************************************************************** +ValidateStructure +***********************************************************************/ + + void ValidateModuleStructure(WfLexicalScopeManager* manager, Ptr module) + { + FOREACH(Ptr, path, module->paths) + { + FOREACH_INDEXER(Ptr, item, index, path->items) + { + vint counter = 0; + FOREACH(Ptr, fragment, item->fragments) + { + if (fragment.Cast()) + { + if (index == path->items.Count() - 1) + { + counter++; + } + else + { + goto USING_PATH_INCORRECT; + } + } + } + + if (index == path->items.Count() - 1 && counter != 1) + { + goto USING_PATH_INCORRECT; + } + } + continue; + USING_PATH_INCORRECT: + manager->errors.Add(WfErrors::WrongUsingPathWildCard(path.Obj())); + } + for (vint i = 0; i < module->declarations.Count(); i++) + { + ValidateDeclarationStructure(manager, module->declarations[i]); + } + } + } + } +} + + +/*********************************************************************** +.\ANALYZER\WFANALYZER_VALIDATESTRUCTURE_DECLARATION.CPP +***********************************************************************/ + +namespace vl +{ + namespace workflow + { + namespace analyzer + { + using namespace collections; + using namespace parsing; + using namespace reflection::description; + +/*********************************************************************** +ValidateStructure(Declaration) +***********************************************************************/ + + class ValidateStructureDeclarationVisitor + : public Object + , public WfDeclaration::IVisitor + , public WfVirtualCfeDeclaration::IVisitor + , public WfVirtualCseDeclaration::IVisitor + { + public: + WfLexicalScopeManager* manager; + WfClassDeclaration* classDecl; + WfExpression* surroundingLambda; + + ValidateStructureDeclarationVisitor(WfLexicalScopeManager* _manager, WfClassDeclaration* _classDecl, WfExpression* _surroundingLambda) + :manager(_manager) + , classDecl(_classDecl) + , surroundingLambda(_surroundingLambda) + { + } + + void Visit(WfNamespaceDeclaration* node)override + { + if (dynamic_cast(surroundingLambda)) + { + manager->errors.Add(WfErrors::WrongDeclarationInInterfaceConstructor(node)); + } + if (node->classMember) + { + manager->errors.Add(WfErrors::WrongClassMember(node)); + } + + for (vint i = 0; i < node->declarations.Count(); i++) + { + ValidateDeclarationStructure(manager, node->declarations[i]); + } + } + + void Visit(WfFunctionDeclaration* node)override + { + if (classDecl && node->classMember) + { + switch (classDecl->kind) + { + case WfClassKind::Class: + { + switch (node->classMember->kind) + { + case WfClassMemberKind::Normal: + case WfClassMemberKind::Static: + if (!node->statement) + { + manager->errors.Add(WfErrors::FunctionShouldHaveImplementation(node)); + } + break; + case WfClassMemberKind::Override: + manager->errors.Add(WfErrors::OverrideShouldImplementInterfaceMethod(node)); + break; + } + } + break; + case WfClassKind::Interface: + { + switch (node->classMember->kind) + { + case WfClassMemberKind::Normal: + if (node->statement) + { + manager->errors.Add(WfErrors::InterfaceMethodShouldNotHaveImplementation(node)); + } + break; + case WfClassMemberKind::Static: + if (!node->statement) + { + manager->errors.Add(WfErrors::FunctionShouldHaveImplementation(node)); + } + break; + case WfClassMemberKind::Override: + manager->errors.Add(WfErrors::OverrideShouldImplementInterfaceMethod(node)); + break; + } + } + break; + } + } + else + { + if (dynamic_cast(surroundingLambda)) + { + switch (node->classMember->kind) + { + case WfClassMemberKind::Normal: + break; + case WfClassMemberKind::Static: + manager->errors.Add(WfErrors::FunctionInNewTypeExpressionCannotBeStatic(node)); + break; + case WfClassMemberKind::Override: + break; + } + } + if (!node->statement) + { + manager->errors.Add(WfErrors::FunctionShouldHaveImplementation(node)); + } + } + + if (node->anonymity == WfFunctionAnonymity::Anonymous) + { + if (!dynamic_cast(surroundingLambda)) + { + manager->errors.Add(WfErrors::FunctionShouldHaveName(node)); + } + } + + + ValidateTypeStructure(manager, node->returnType, ValidateTypeStragety::ReturnType); + FOREACH(Ptr, argument, node->arguments) + { + ValidateTypeStructure(manager, argument->type); + } + + if (node->statement) + { + ValidateStructureContext context; + ValidateStatementStructure(manager, &context, node->statement); + } + } + + void Visit(WfVariableDeclaration* node)override + { + if (classDecl && node->classMember) + { + switch (node->classMember->kind) + { + case WfClassMemberKind::Normal: + break; + case WfClassMemberKind::Static: + case WfClassMemberKind::Override: + manager->errors.Add(WfErrors::WrongClassMemberConfig(node)); + break; + } + } + + if (node->type) + { + ValidateTypeStructure(manager, node->type); + } + else if (classDecl) + { + manager->errors.Add(WfErrors::MissingFieldType(node)); + } + ValidateStructureContext context; + ValidateExpressionStructure(manager, &context, node->expression); + } + + void Visit(WfEventDeclaration* node)override + { + if (classDecl && node->classMember) + { + switch (node->classMember->kind) + { + case WfClassMemberKind::Normal: + break; + case WfClassMemberKind::Static: + case WfClassMemberKind::Override: + manager->errors.Add(WfErrors::WrongClassMemberConfig(node)); + break; + } + + FOREACH(Ptr, argument, node->arguments) + { + ValidateTypeStructure(manager, argument); + } + } + else if (dynamic_cast(surroundingLambda)) + { + manager->errors.Add(WfErrors::WrongDeclarationInInterfaceConstructor(node)); + } + else + { + manager->errors.Add(WfErrors::WrongDeclaration(node)); + } + } + + class FindPropertyRelatedDeclVisitor + : public empty_visitor::DeclarationVisitor + , public empty_visitor::VirtualCseDeclarationVisitor + { + public: + WfLexicalScopeManager* manager; + WfClassDeclaration* classDecl; + WfPropertyDeclaration* propDecl; + Ptr getter; + Ptr setter; + Ptr valueChangedEvent; + bool duplicateGetter = false; + bool duplicateSetter = false; + bool duplicateEvent = false; + + FindPropertyRelatedDeclVisitor(WfLexicalScopeManager* _manager, WfClassDeclaration* _classDecl, WfPropertyDeclaration* _propDecl) + :manager(_manager) + , classDecl(_classDecl) + , propDecl(_propDecl) + { + } + + void Dispatch(WfVirtualCfeDeclaration* node)override + { + FOREACH(Ptr, decl, node->expandedDeclarations) + { + Execute(decl); + } + } + + void Dispatch(WfVirtualCseDeclaration* node)override + { + node->Accept((WfVirtualCseDeclaration::IVisitor*)this); + } + + void Execute(Ptr memberDecl) + { + memberDecl->Accept(this); + if (!duplicateGetter && memberDecl->name.value == propDecl->getter.value) + { + if (getter) + { + duplicateGetter = true; + manager->errors.Add(WfErrors::TooManyPropertyGetter(propDecl, classDecl)); + } + else + { + getter = memberDecl; + } + } + + if (!duplicateSetter && propDecl->setter.value != L"" && memberDecl->name.value == propDecl->setter.value) + { + if (setter) + { + duplicateSetter = true; + manager->errors.Add(WfErrors::TooManyPropertySetter(propDecl, classDecl)); + } + else + { + setter = memberDecl; + } + } + + if (!duplicateEvent && propDecl->valueChangedEvent.value != L"" && memberDecl->name.value == propDecl->valueChangedEvent.value) + { + if (valueChangedEvent) + { + duplicateEvent = true; + manager->errors.Add(WfErrors::TooManyPropertyEvent(propDecl, classDecl)); + } + else + { + valueChangedEvent = memberDecl; + } + } + } + }; + + void Visit(WfPropertyDeclaration* node)override + { + if (classDecl && node->classMember) + { + switch (node->classMember->kind) + { + case WfClassMemberKind::Normal: + break; + case WfClassMemberKind::Static: + case WfClassMemberKind::Override: + manager->errors.Add(WfErrors::WrongClassMemberConfig(node)); + break; + } + + ValidateTypeStructure(manager, node->type); + FindPropertyRelatedDeclVisitor visitor(manager, classDecl, node); + + FOREACH(Ptr, memberDecl, classDecl->declarations) + { + visitor.Execute(memberDecl); + } + + if (!visitor.getter || visitor.getter->classMember->kind == WfClassMemberKind::Static || !visitor.getter.Cast()) + { + manager->errors.Add(WfErrors::PropertyGetterNotFound(node, classDecl)); + } + + if (node->setter.value != L"" && (!visitor.setter || visitor.setter->classMember->kind == WfClassMemberKind::Static || !visitor.setter.Cast())) + { + manager->errors.Add(WfErrors::PropertySetterNotFound(node, classDecl)); + } + + if (node->valueChangedEvent.value != L"" && (!visitor.valueChangedEvent || visitor.valueChangedEvent->classMember->kind == WfClassMemberKind::Static || !visitor.valueChangedEvent.Cast())) + { + manager->errors.Add(WfErrors::PropertyEventNotFound(node, classDecl)); + } + } + else if (dynamic_cast(surroundingLambda)) + { + manager->errors.Add(WfErrors::WrongDeclarationInInterfaceConstructor(node)); + } + else + { + manager->errors.Add(WfErrors::WrongDeclaration(node)); + } + } + + void Visit(WfConstructorDeclaration* node)override + { + if (classDecl && node->classMember) + { + switch (node->classMember->kind) + { + case WfClassMemberKind::Normal: + break; + case WfClassMemberKind::Static: + case WfClassMemberKind::Override: + manager->errors.Add(WfErrors::WrongClassMemberConfig(node)); + break; + } + + if (classDecl->kind != WfClassKind::Class) + { + manager->errors.Add(WfErrors::WrongDeclaration(node)); + } + + FOREACH(Ptr, call, node->baseConstructorCalls) + { + ValidateTypeStructure(manager, call->type, ValidateTypeStragety::BaseType, classDecl); + FOREACH(Ptr, argument, call->arguments) + { + ValidateStructureContext context; + ValidateExpressionStructure(manager, &context, argument); + } + } + { + ValidateStructureContext context; + ValidateStatementStructure(manager, &context, node->statement); + } + } + else + { + manager->errors.Add(WfErrors::WrongDeclaration(node)); + } + } + + void Visit(WfDestructorDeclaration* node)override + { + if (classDecl && node->classMember) + { + switch (node->classMember->kind) + { + case WfClassMemberKind::Normal: + break; + case WfClassMemberKind::Static: + case WfClassMemberKind::Override: + manager->errors.Add(WfErrors::WrongClassMemberConfig(node)); + break; + } + + if (classDecl->kind != WfClassKind::Class) + { + manager->errors.Add(WfErrors::WrongDeclaration(node)); + } + + ValidateStructureContext context; + ValidateStatementStructure(manager, &context, node->statement); + } + else + { + manager->errors.Add(WfErrors::WrongDeclaration(node)); + } + } + + class FindCtorVisitor + : public empty_visitor::DeclarationVisitor + , public empty_visitor::VirtualCseDeclarationVisitor + { + public: + WfConstructorDeclaration* ctor = nullptr; + + void Dispatch(WfVirtualCfeDeclaration* node)override + { + FOREACH(Ptr, decl, node->expandedDeclarations) + { + decl->Accept(this); + } + } + + void Dispatch(WfVirtualCseDeclaration* node)override + { + node->Accept((WfVirtualCseDeclaration::IVisitor*)this); + } + + void Visit(WfConstructorDeclaration* node)override + { + ctor = node; + } + }; + + class TooManyDtorVisitor + : public empty_visitor::DeclarationVisitor + , public empty_visitor::VirtualCseDeclarationVisitor + { + public: + WfLexicalScopeManager* manager; + WfClassDeclaration* classDecl; + WfDestructorDeclaration* dtor = nullptr; + + TooManyDtorVisitor(WfLexicalScopeManager* _manager, WfClassDeclaration* _classDecl) + :manager(_manager) + , classDecl(_classDecl) + { + } + + void Dispatch(WfVirtualCfeDeclaration* node)override + { + FOREACH(Ptr, decl, node->expandedDeclarations) + { + decl->Accept(this); + } + } + + void Dispatch(WfVirtualCseDeclaration* node)override + { + node->Accept((WfVirtualCseDeclaration::IVisitor*)this); + } + + void Visit(WfDestructorDeclaration* node)override + { + if (!dtor) + { + dtor = node; + } + else + { + manager->errors.Add(WfErrors::TooManyDestructor(node, classDecl)); + } + } + }; + + void Visit(WfClassDeclaration* node)override + { + if (classDecl && node->classMember) + { + switch (node->classMember->kind) + { + case WfClassMemberKind::Normal: + break; + case WfClassMemberKind::Static: + case WfClassMemberKind::Override: + manager->errors.Add(WfErrors::WrongClassMemberConfig(node)); + break; + } + } + else if (dynamic_cast(surroundingLambda)) + { + manager->errors.Add(WfErrors::WrongDeclarationInInterfaceConstructor(node)); + } + + switch (node->kind) + { + case WfClassKind::Class: + { + if (node->constructorType != WfConstructorType::Undefined) + { + manager->errors.Add(WfErrors::ClassWithInterfaceConstructor(node)); + } + { + FindCtorVisitor visitor; + FOREACH(Ptr, memberDecl, node->declarations) + { + memberDecl->Accept(&visitor); + } + + if (!visitor.ctor) + { + auto ctor = MakePtr(); + node->declarations.Add(ctor); + ctor->codeRange = node->codeRange; + ctor->classMember = MakePtr(); + ctor->classMember->codeRange = node->codeRange; + ctor->classMember->kind = WfClassMemberKind::Normal; + + auto stat = MakePtr(); + ctor->statement = stat; + stat->codeRange = node->codeRange; + } + } + } + break; + case WfClassKind::Interface: + break; + } + + FOREACH(Ptr, type, node->baseTypes) + { + ValidateTypeStructure(manager, type, ValidateTypeStragety::BaseType, node); + } + + { + TooManyDtorVisitor visitor(manager, node); + bool hasStateMachine = false; + FOREACH(Ptr, memberDecl, node->declarations) + { + if (auto smDecl = memberDecl.Cast()) + { + if (!hasStateMachine) + { + hasStateMachine = true; + } + else + { + manager->errors.Add(WfErrors::DuplicatedDeclaration(smDecl.Obj())); + } + } + ValidateDeclarationStructure(manager, memberDecl, node); + memberDecl->Accept(&visitor); + } + } + } + + void Visit(WfEnumDeclaration* node)override + { + if (classDecl && node->classMember) + { + switch (node->classMember->kind) + { + case WfClassMemberKind::Normal: + break; + case WfClassMemberKind::Static: + case WfClassMemberKind::Override: + manager->errors.Add(WfErrors::WrongClassMemberConfig(node)); + break; + } + } + else if (dynamic_cast(surroundingLambda)) + { + manager->errors.Add(WfErrors::WrongDeclarationInInterfaceConstructor(node)); + } + + vuint64_t current = 0; + bool reportedNotConsecutive = false; + SortedList discoveredItems; + FOREACH(Ptr, item, node->items) + { + switch (item->kind) + { + case WfEnumItemKind::Constant: + { + vuint64_t value = -1; + TypedValueSerializerProvider::Deserialize(item->number.value, value); + if (!reportedNotConsecutive && value != current) + { + reportedNotConsecutive = true; + switch (node->kind) + { + case WfEnumKind::Normal: + manager->errors.Add(WfErrors::EnumValuesNotConsecutiveFromZero(node)); + break; + case WfEnumKind::Flag: + manager->errors.Add(WfErrors::FlagValuesNotConsecutiveFromZero(node)); + break; + } + } + switch (node->kind) + { + case WfEnumKind::Normal: + current++; + break; + case WfEnumKind::Flag: + current = current == 0 ? 1 : current * 2; + break; + } + } + break; + case WfEnumItemKind::Intersection: + FOREACH(Ptr, enumInt, item->intersections) + { + if (!discoveredItems.Contains(enumInt->name.value)) + { + manager->errors.Add(WfErrors::FlagValueNotExists(enumInt.Obj(), node)); + } + } + break; + } + + if (discoveredItems.Contains(item->name.value)) + { + manager->errors.Add(WfErrors::DuplicatedEnumValue(item.Obj(), node)); + } + else + { + discoveredItems.Add(item->name.value); + } + } + } + + void Visit(WfStructDeclaration* node)override + { + if (classDecl && node->classMember) + { + switch (node->classMember->kind) + { + case WfClassMemberKind::Normal: + break; + case WfClassMemberKind::Static: + case WfClassMemberKind::Override: + manager->errors.Add(WfErrors::WrongClassMemberConfig(node)); + break; + } + } + else if (dynamic_cast(surroundingLambda)) + { + manager->errors.Add(WfErrors::WrongDeclarationInInterfaceConstructor(node)); + } + + SortedList discoveredItems; + FOREACH(Ptr, member, node->members) + { + if (discoveredItems.Contains(member->name.value)) + { + manager->errors.Add(WfErrors::DuplicatedStructMember(member.Obj(), node)); + } + else + { + discoveredItems.Add(member->name.value); + } + } + } + + void Visit(WfVirtualCfeDeclaration* node)override + { + node->Accept(static_cast(this)); + FOREACH(Ptr, decl, node->expandedDeclarations) + { + decl->Accept(this); + } + } + + void Visit(WfAutoPropertyDeclaration* node)override + { + switch (node->classMember->kind) + { + case WfClassMemberKind::Normal: + if (dynamic_cast(surroundingLambda)) + { + manager->errors.Add(WfErrors::AutoPropertyCannotBeNormalOutsideOfClass(node)); + } + break; + case WfClassMemberKind::Static: + manager->errors.Add(WfErrors::AutoPropertyCannotBeStatic(node)); + break; + case WfClassMemberKind::Override: + if (!dynamic_cast(surroundingLambda)) + { + manager->errors.Add(WfErrors::OverrideShouldImplementInterfaceMethod(node)); + } + break; + } + + if (classDecl) + { + switch (classDecl->kind) + { + case WfClassKind::Class: + if (!node->expression) + { + manager->errors.Add(WfErrors::AutoPropertyShouldBeInitialized(node)); + } + break; + case WfClassKind::Interface: + if (node->expression) + { + manager->errors.Add(WfErrors::AutoPropertyCannotBeInitializedInInterface(node, classDecl)); + } + break; + } + } + else if (dynamic_cast(surroundingLambda)) + { + if (!node->expression) + { + manager->errors.Add(WfErrors::AutoPropertyShouldBeInitialized(node)); + } + } + else + { + manager->errors.Add(WfErrors::WrongDeclaration(node)); + } + + ValidateTypeStructure(manager, node->type); + if (node->expression) + { + ValidateStructureContext context; + ValidateExpressionStructure(manager, &context, node->expression); + } + } + + void Visit(WfCastResultInterfaceDeclaration* node)override + { + } + + void Visit(WfVirtualCseDeclaration* node)override + { + node->Accept(static_cast(this)); + } + + void Visit(WfStateMachineDeclaration* node)override + { + if (classDecl) + { + FOREACH(Ptr, state, node->states) + { + ValidateStructureContext context; + context.currentStateDeclaration = state.Obj(); + ValidateStatementStructure(manager, &context, state->statement); + } + } + else + { + manager->errors.Add(WfErrors::WrongDeclaration(node)); + } + } + + static void Execute(Ptr declaration, WfLexicalScopeManager* manager, WfClassDeclaration* classDecl, WfExpression* surroundingLambda) + { + ValidateStructureDeclarationVisitor visitor(manager, classDecl, surroundingLambda); + declaration->Accept(&visitor); + } + }; + +/*********************************************************************** +ValidateStructure +***********************************************************************/ + + void ValidateDeclarationStructure(WfLexicalScopeManager* manager, Ptr declaration, WfClassDeclaration* classDecl, WfExpression* surroundingLambda) + { + ValidateStructureDeclarationVisitor::Execute(declaration, manager, classDecl, surroundingLambda); + } + } + } +} + + +/*********************************************************************** +.\ANALYZER\WFANALYZER_VALIDATESTRUCTURE_EXPRESSION.CPP +***********************************************************************/ + +namespace vl +{ + namespace workflow + { + namespace analyzer + { + using namespace collections; + using namespace parsing; + using namespace reflection::description; + +/*********************************************************************** +ValidateStructure(Expression) +***********************************************************************/ + + class ValidateStructureExpressionVisitor + : public Object + , public WfExpression::IVisitor + , public WfVirtualCseExpression::IVisitor + { + public: + WfLexicalScopeManager* manager; + ValidateStructureContext* context; + Ptr result; + + ValidateStructureExpressionVisitor(WfLexicalScopeManager* _manager, ValidateStructureContext* _context) + :manager(_manager) + , context(_context) + { + } + + void Visit(WfThisExpression* node)override + { + if (context->currentBindExpression) + { + manager->errors.Add(WfErrors::WrongThisExpression(node)); + } + } + + void Visit(WfTopQualifiedExpression* node)override + { + } + + void Visit(WfReferenceExpression* node)override + { + } + + void Visit(WfOrderedNameExpression* node)override + { + } + + void Visit(WfOrderedLambdaExpression* node)override + { + ValidateStructureContext context; + ValidateExpressionStructure(manager, &context, node->body); + } + + void Visit(WfMemberExpression* node)override + { + ValidateExpressionStructure(manager, context, node->parent); + } + + void Visit(WfChildExpression* node)override + { + ValidateExpressionStructure(manager, context, node->parent); + } + + void Visit(WfLiteralExpression* node)override + { + } + + void Visit(WfFloatingExpression* node)override + { + } + + void Visit(WfIntegerExpression* node)override + { + } + + void Visit(WfStringExpression* node)override + { + } + + void Visit(WfUnaryExpression* node)override + { + ValidateExpressionStructure(manager, context, node->operand); + } + + void Visit(WfBinaryExpression* node)override + { + ValidateExpressionStructure(manager, context, node->first); + ValidateExpressionStructure(manager, context, node->second); + } + + void Visit(WfLetExpression* node)override + { + FOREACH(Ptr, variable, node->variables) + { + ValidateExpressionStructure(manager, context, variable->value); + } + ValidateExpressionStructure(manager, context, node->expression); + } + + void Visit(WfIfExpression* node)override + { + ValidateExpressionStructure(manager, context, node->condition); + ValidateExpressionStructure(manager, context, node->trueBranch); + ValidateExpressionStructure(manager, context, node->falseBranch); + } + + void Visit(WfRangeExpression* node)override + { + ValidateExpressionStructure(manager, context, node->begin); + ValidateExpressionStructure(manager, context, node->end); + } + + void Visit(WfSetTestingExpression* node)override + { + ValidateExpressionStructure(manager, context, node->element); + ValidateExpressionStructure(manager, context, node->collection); + } + + void Visit(WfConstructorExpression* node)override + { + vint listElementCount = 0; + vint mapElementCount = 0; + FOREACH(Ptr, argument, node->arguments) + { + ValidateExpressionStructure(manager, context, argument->key); + if (argument->value) + { + ValidateExpressionStructure(manager, context, argument->value); + mapElementCount++; + } + else + { + listElementCount++; + } + } + + if (listElementCount*mapElementCount != 0) + { + manager->errors.Add(WfErrors::ConstructorMixMapAndList(node)); + } + } + + void Visit(WfInferExpression* node)override + { + ValidateTypeStructure(manager, node->type); + ValidateExpressionStructure(manager, context, node->expression); + } + + void Visit(WfTypeCastingExpression* node)override + { + ValidateTypeStructure(manager, node->type); + ValidateExpressionStructure(manager, context, node->expression); + } + + void Visit(WfTypeTestingExpression* node)override + { + if (node->type) + { + ValidateTypeStructure(manager, node->type); + } + ValidateExpressionStructure(manager, context, node->expression); + } + + void Visit(WfTypeOfTypeExpression* node)override + { + ValidateTypeStructure(manager, node->type); + } + + void Visit(WfTypeOfExpressionExpression* node)override + { + ValidateExpressionStructure(manager, context, node->expression); + } + + void Visit(WfAttachEventExpression* node)override + { + if (context->currentBindExpression) + { + manager->errors.Add(WfErrors::AttachInBind(node)); + } + ValidateExpressionStructure(manager, context, node->event); + ValidateExpressionStructure(manager, context, node->function); + } + + void Visit(WfDetachEventExpression* node)override + { + if (context->currentBindExpression) + { + manager->errors.Add(WfErrors::DetachInBind(node)); + } + ValidateExpressionStructure(manager, context, node->event); + ValidateExpressionStructure(manager, context, node->handler); + } + + void Visit(WfObserveExpression* node)override + { + if (!context->currentBindExpression) + { + manager->errors.Add(WfErrors::ObserveNotInBind(node)); + } + if (context->currentObserveExpression) + { + manager->errors.Add(WfErrors::ObserveInObserveEvent(node)); + } + + if (node->observeType == WfObserveType::SimpleObserve) + { + if (!node->expression.Cast()) + { + manager->errors.Add(WfErrors::WrongSimpleObserveExpression(node->expression.Obj())); + } + FOREACH(Ptr, event, node->events) + { + if (!event.Cast()) + { + manager->errors.Add(WfErrors::WrongSimpleObserveEvent(event.Obj())); + } + } + } + if (node->events.Count() == 0) + { + manager->errors.Add(WfErrors::EmptyObserveEvent(node)); + } + + ValidateExpressionStructure(manager, context, node->parent); + ValidateExpressionStructure(manager, context, node->expression); + context->currentObserveExpression = node; + for (vint i = 0; i < node->events.Count(); i++) + { + ValidateExpressionStructure(manager, context, node->events[i]); + } + context->currentObserveExpression = 0; + } + + void Visit(WfCallExpression* node)override + { + ValidateExpressionStructure(manager, context, node->function); + for (vint i = 0; i < node->arguments.Count(); i++) + { + ValidateExpressionStructure(manager, context, node->arguments[i]); + } + } + + void Visit(WfFunctionExpression* node)override + { + ValidateDeclarationStructure(manager, node->function, nullptr, node); + } + + void Visit(WfNewClassExpression* node)override + { + ValidateTypeStructure(manager, node->type); + for (vint i = 0; i < node->arguments.Count(); i++) + { + ValidateExpressionStructure(manager, context, node->arguments[i]); + } + } + + void Visit(WfNewInterfaceExpression* node)override + { + ValidateTypeStructure(manager, node->type); + FOREACH(Ptr, memberDecl, node->declarations) + { + ValidateDeclarationStructure(manager, memberDecl, nullptr, node); + } + } + + void Visit(WfVirtualCfeExpression* node)override + { + ValidateExpressionStructure(manager, context, node->expandedExpression); + } + + void Visit(WfVirtualCseExpression* node)override + { + node->Accept((WfVirtualCseExpression::IVisitor*)this); + } + + void Visit(WfBindExpression* node)override + { + if (context->currentBindExpression) + { + manager->errors.Add(WfErrors::BindInBind(node)); + } + + auto bind = context->currentBindExpression; + context->currentBindExpression = node; + ValidateExpressionStructure(manager, context, node->expression); + context->currentBindExpression = bind; + } + + void Visit(WfNewCoroutineExpression* node)override + { + ValidateStructureContext context; + context.currentNewCoroutineExpression = node; + ValidateStatementStructure(manager, &context, node->statement); + } + + void Visit(WfMixinCastExpression* node)override + { + ValidateTypeStructure(manager, node->type); + ValidateExpressionStructure(manager, context, node->expression); + } + + void Visit(WfExpectedTypeCastExpression* node)override + { + ValidateExpressionStructure(manager, context, node->expression); + } + + void Visit(WfCoOperatorExpression* node)override + { + if (!context->currentCoProviderStatement) + { + manager->errors.Add(WfErrors::WrongCoOperator(node)); + } + } + + static void Execute(Ptr& expression, WfLexicalScopeManager* manager, ValidateStructureContext* context) + { + ValidateStructureExpressionVisitor visitor(manager, context); + expression->Accept(&visitor); + if (visitor.result) + { + expression = visitor.result; + } + } + }; + +/*********************************************************************** +ValidateStructure +***********************************************************************/ + + void ValidateExpressionStructure(WfLexicalScopeManager* manager, ValidateStructureContext* context, Ptr& expression) + { + ValidateStructureExpressionVisitor::Execute(expression, manager, context); + } + } + } +} + + +/*********************************************************************** +.\ANALYZER\WFANALYZER_VALIDATESTRUCTURE_STATEMENT.CPP +***********************************************************************/ + +namespace vl +{ + namespace workflow + { + namespace analyzer + { + using namespace collections; + using namespace parsing; + using namespace reflection::description; + +/*********************************************************************** +ValidateStructure(Statement) +***********************************************************************/ + + class ValidateStructureStatementVisitor + : public Object + , public WfStatement::IVisitor + , public WfVirtualCseStatement::IVisitor + , public WfCoroutineStatement::IVisitor + , public WfStateMachineStatement::IVisitor + { + public: + WfLexicalScopeManager* manager; + ValidateStructureContext* context; + Ptr result; + + ValidateStructureStatementVisitor(WfLexicalScopeManager* _manager, ValidateStructureContext* _context) + :manager(_manager) + , context(_context) + { + } + + void Visit(WfBreakStatement* node)override + { + if (!context->currentLoopStatement) + { + manager->errors.Add(WfErrors::BreakNotInLoop(node)); + } + } + + void Visit(WfContinueStatement* node)override + { + if (!context->currentLoopStatement) + { + manager->errors.Add(WfErrors::ContinueNotInLoop(node)); + } + } + + void Visit(WfReturnStatement* node)override + { + if (node->expression) + { + ValidateExpressionStructure(manager, context, node->expression); + } + } + + void Visit(WfDeleteStatement* node)override + { + ValidateExpressionStructure(manager, context, node->expression); + } + + void Visit(WfRaiseExceptionStatement* node)override + { + if (node->expression) + { + ValidateExpressionStructure(manager, context, node->expression); + } + else if (!context->currentCatchStatement) + { + manager->errors.Add(WfErrors::RethrowNotInCatch(node)); + } + } + + void Visit(WfIfStatement* node)override + { + if (node->type) + { + ValidateTypeStructure(manager, node->type); + } + ValidateExpressionStructure(manager, context, node->expression); + ValidateStatementStructure(manager, context, node->trueBranch); + if (node->falseBranch) + { + ValidateStatementStructure(manager, context, node->falseBranch); + } + } + + void Visit(WfWhileStatement* node)override + { + auto oldLoop = context->currentLoopStatement; + context->currentLoopStatement = node; + ValidateExpressionStructure(manager, context, node->condition); + ValidateStatementStructure(manager, context, node->statement); + context->currentLoopStatement = oldLoop; + } + + void Visit(WfTryStatement* node)override + { + ValidateStatementStructure(manager, context, node->protectedStatement); + if (node->catchStatement) + { + auto oldCatch = context->currentCatchStatement; + context->currentCatchStatement = node->catchStatement.Obj(); + ValidateStatementStructure(manager, context, node->catchStatement); + context->currentCatchStatement = oldCatch; + } + if (node->finallyStatement) + { + ValidateStatementStructure(manager, context, node->finallyStatement); + } + if (!node->catchStatement && !node->finallyStatement) + { + manager->errors.Add(WfErrors::TryMissCatchAndFinally(node)); + } + } + + void Visit(WfBlockStatement* node)override + { + for (vint i = 0; i < node->statements.Count(); i++) + { + ValidateStatementStructure(manager, context, node->statements[i]); + } + } + + void Visit(WfGotoStatement* node)override + { + } + + void Visit(WfExpressionStatement* node)override + { + ValidateExpressionStructure(manager, context, node->expression); + } + + void Visit(WfVariableStatement* node)override + { + ValidateDeclarationStructure(manager, node->variable); + } + + void Visit(WfVirtualCseStatement* node)override + { + node->Accept((WfVirtualCseStatement::IVisitor*)this); + } + + void Visit(WfSwitchStatement* node)override + { + ValidateExpressionStructure(manager, context, node->expression); + FOREACH(Ptr, switchCase, node->caseBranches) + { + ValidateExpressionStructure(manager, context, switchCase->expression); + ValidateStatementStructure(manager, context, switchCase->statement); + } + if (node->defaultBranch) + { + ValidateStatementStructure(manager, context, node->defaultBranch); + } + } + + void Visit(WfForEachStatement* node)override + { + auto oldLoop = context->currentLoopStatement; + context->currentLoopStatement = node; + ValidateExpressionStructure(manager, context, node->collection); + ValidateStatementStructure(manager, context, node->statement); + context->currentLoopStatement = oldLoop; + } + + void Visit(WfCoProviderStatement* node)override + { + auto oldProvider = context->currentCoProviderStatement; + context->currentCoProviderStatement = node; + ValidateStatementStructure(manager, context, node->statement); + context->currentCoProviderStatement = oldProvider; + } + + void Visit(WfCoroutineStatement* node)override + { + node->Accept((WfCoroutineStatement::IVisitor*)this); + } + + void Visit(WfCoPauseStatement* node)override + { + if (!context->currentNewCoroutineExpression || context->currentCoPauseStatement) + { + manager->errors.Add(WfErrors::WrongCoPause(node)); + } + if (node->statement) + { + auto oldCpPause = context->currentCoPauseStatement; + context->currentCoPauseStatement = node; + ValidateStatementStructure(manager, context, node->statement); + context->currentCoPauseStatement = oldCpPause; + } + } + + void Visit(WfCoOperatorStatement* node)override + { + if (!context->currentCoProviderStatement) + { + manager->errors.Add(WfErrors::WrongCoOperator(node)); + } + } + + void Visit(WfStateMachineStatement* node)override + { + node->Accept((WfStateMachineStatement::IVisitor*)this); + } + + void Visit(WfStateSwitchStatement* node)override + { + if (!context->currentStateDeclaration) + { + manager->errors.Add(WfErrors::WrongStateSwitchStatement(node)); + } + + FOREACH(Ptr, switchCase, node->caseBranches) + { + ValidateStatementStructure(manager, context, switchCase->statement); + } + } + + void Visit(WfStateInvokeStatement* node)override + { + if (!context->currentStateDeclaration) + { + manager->errors.Add(WfErrors::WrongStateInvokeStatement(node)); + } + + FOREACH(Ptr, argument, node->arguments) + { + ValidateExpressionStructure(manager, context, argument); + } + } + + static void Execute(Ptr& statement, WfLexicalScopeManager* manager, ValidateStructureContext* context) + { + ValidateStructureStatementVisitor visitor(manager, context); + statement->Accept(&visitor); + if (visitor.result) + { + statement = visitor.result; + } + } + }; + +/*********************************************************************** +ValidateStructure +***********************************************************************/ + + void ValidateStatementStructure(WfLexicalScopeManager* manager, ValidateStructureContext* context, Ptr& statement) + { + ValidateStructureStatementVisitor::Execute(statement, manager, context); + } + } + } +} + + +/*********************************************************************** +.\ANALYZER\WFANALYZER_VALIDATESTRUCTURE_TYPE.CPP +***********************************************************************/ + +namespace vl +{ + namespace workflow + { + namespace analyzer + { + using namespace collections; + using namespace parsing; + using namespace reflection::description; + /*********************************************************************** ValidateStructure(Type) ***********************************************************************/ @@ -24172,1206 +29237,6 @@ ValidateStructure(Type) } }; -/*********************************************************************** -ValidateStructure(Declaration) -***********************************************************************/ - - class ValidateStructureDeclarationVisitor - : public Object - , public WfDeclaration::IVisitor - , public WfVirtualDeclaration::IVisitor - { - public: - WfLexicalScopeManager* manager; - WfClassDeclaration* classDecl; - WfExpression* surroundingLambda; - - ValidateStructureDeclarationVisitor(WfLexicalScopeManager* _manager, WfClassDeclaration* _classDecl, WfExpression* _surroundingLambda) - :manager(_manager) - , classDecl(_classDecl) - , surroundingLambda(_surroundingLambda) - { - } - - void Visit(WfNamespaceDeclaration* node)override - { - if (dynamic_cast(surroundingLambda)) - { - manager->errors.Add(WfErrors::WrongDeclarationInInterfaceConstructor(node)); - } - if (node->classMember) - { - manager->errors.Add(WfErrors::WrongClassMember(node)); - } - - for (vint i = 0; i < node->declarations.Count(); i++) - { - ValidateDeclarationStructure(manager, node->declarations[i]); - } - } - - void Visit(WfFunctionDeclaration* node)override - { - if (classDecl && node->classMember) - { - switch (classDecl->kind) - { - case WfClassKind::Class: - { - switch (node->classMember->kind) - { - case WfClassMemberKind::Normal: - case WfClassMemberKind::Static: - if (!node->statement) - { - manager->errors.Add(WfErrors::FunctionShouldHaveImplementation(node)); - } - break; - case WfClassMemberKind::Override: - manager->errors.Add(WfErrors::OverrideShouldImplementInterfaceMethod(node)); - break; - } - } - break; - case WfClassKind::Interface: - { - switch (node->classMember->kind) - { - case WfClassMemberKind::Normal: - if (node->statement) - { - manager->errors.Add(WfErrors::InterfaceMethodShouldNotHaveImplementation(node)); - } - break; - case WfClassMemberKind::Static: - if (!node->statement) - { - manager->errors.Add(WfErrors::FunctionShouldHaveImplementation(node)); - } - break; - case WfClassMemberKind::Override: - manager->errors.Add(WfErrors::OverrideShouldImplementInterfaceMethod(node)); - break; - } - } - break; - } - } - else - { - if (dynamic_cast(surroundingLambda)) - { - switch (node->classMember->kind) - { - case WfClassMemberKind::Normal: - break; - case WfClassMemberKind::Static: - manager->errors.Add(WfErrors::FunctionInNewTypeExpressionCannotBeStatic(node)); - break; - case WfClassMemberKind::Override: - break; - } - } - if (!node->statement) - { - manager->errors.Add(WfErrors::FunctionShouldHaveImplementation(node)); - } - } - - if (node->anonymity == WfFunctionAnonymity::Anonymous) - { - if (!dynamic_cast(surroundingLambda)) - { - manager->errors.Add(WfErrors::FunctionShouldHaveName(node)); - } - } - - - ValidateTypeStructure(manager, node->returnType, ValidateTypeStragety::ReturnType); - FOREACH(Ptr, argument, node->arguments) - { - ValidateTypeStructure(manager, argument->type); - } - - if (node->statement) - { - ValidateStructureContext context; - ValidateStatementStructure(manager, &context, node->statement); - } - } - - void Visit(WfVariableDeclaration* node)override - { - if (classDecl && node->classMember) - { - switch (node->classMember->kind) - { - case WfClassMemberKind::Normal: - break; - case WfClassMemberKind::Static: - case WfClassMemberKind::Override: - manager->errors.Add(WfErrors::WrongClassMemberConfig(node)); - break; - } - } - - if (node->type) - { - ValidateTypeStructure(manager, node->type); - } - else if (classDecl) - { - manager->errors.Add(WfErrors::MissingFieldType(node)); - } - ValidateStructureContext context; - ValidateExpressionStructure(manager, &context, node->expression); - } - - void Visit(WfEventDeclaration* node)override - { - if (classDecl && node->classMember) - { - switch (node->classMember->kind) - { - case WfClassMemberKind::Normal: - break; - case WfClassMemberKind::Static: - case WfClassMemberKind::Override: - manager->errors.Add(WfErrors::WrongClassMemberConfig(node)); - break; - } - - FOREACH(Ptr, argument, node->arguments) - { - ValidateTypeStructure(manager, argument); - } - } - else if (dynamic_cast(surroundingLambda)) - { - manager->errors.Add(WfErrors::WrongDeclarationInInterfaceConstructor(node)); - } - else - { - manager->errors.Add(WfErrors::WrongDeclaration(node)); - } - } - - class FindPropertyRelatedDeclVisitor - : public empty_visitor::DeclarationVisitor - { - public: - WfLexicalScopeManager* manager; - WfClassDeclaration* classDecl; - WfPropertyDeclaration* propDecl; - Ptr getter; - Ptr setter; - Ptr valueChangedEvent; - bool duplicateGetter = false; - bool duplicateSetter = false; - bool duplicateEvent = false; - - FindPropertyRelatedDeclVisitor(WfLexicalScopeManager* _manager, WfClassDeclaration* _classDecl, WfPropertyDeclaration* _propDecl) - :manager(_manager) - , classDecl(_classDecl) - , propDecl(_propDecl) - { - } - - void Dispatch(WfVirtualDeclaration* node)override - { - FOREACH(Ptr, decl, node->expandedDeclarations) - { - Execute(decl); - } - } - - void Execute(Ptr memberDecl) - { - memberDecl->Accept(this); - if (!duplicateGetter && memberDecl->name.value == propDecl->getter.value) - { - if (getter) - { - duplicateGetter = true; - manager->errors.Add(WfErrors::TooManyPropertyGetter(propDecl, classDecl)); - } - else - { - getter = memberDecl; - } - } - - if (!duplicateSetter && propDecl->setter.value != L"" && memberDecl->name.value == propDecl->setter.value) - { - if (setter) - { - duplicateSetter = true; - manager->errors.Add(WfErrors::TooManyPropertySetter(propDecl, classDecl)); - } - else - { - setter = memberDecl; - } - } - - if (!duplicateEvent && propDecl->valueChangedEvent.value != L"" && memberDecl->name.value == propDecl->valueChangedEvent.value) - { - if (valueChangedEvent) - { - duplicateEvent = true; - manager->errors.Add(WfErrors::TooManyPropertyEvent(propDecl, classDecl)); - } - else - { - valueChangedEvent = memberDecl; - } - } - } - }; - - void Visit(WfPropertyDeclaration* node)override - { - if (classDecl && node->classMember) - { - switch (node->classMember->kind) - { - case WfClassMemberKind::Normal: - break; - case WfClassMemberKind::Static: - case WfClassMemberKind::Override: - manager->errors.Add(WfErrors::WrongClassMemberConfig(node)); - break; - } - - ValidateTypeStructure(manager, node->type); - FindPropertyRelatedDeclVisitor visitor(manager, classDecl, node); - - FOREACH(Ptr, memberDecl, classDecl->declarations) - { - visitor.Execute(memberDecl); - } - - if (!visitor.getter || visitor.getter->classMember->kind == WfClassMemberKind::Static || !visitor.getter.Cast()) - { - manager->errors.Add(WfErrors::PropertyGetterNotFound(node, classDecl)); - } - - if (node->setter.value != L"" && (!visitor.setter || visitor.setter->classMember->kind == WfClassMemberKind::Static || !visitor.setter.Cast())) - { - manager->errors.Add(WfErrors::PropertySetterNotFound(node, classDecl)); - } - - if (node->valueChangedEvent.value != L"" && (!visitor.valueChangedEvent || visitor.valueChangedEvent->classMember->kind == WfClassMemberKind::Static || !visitor.valueChangedEvent.Cast())) - { - manager->errors.Add(WfErrors::PropertyEventNotFound(node, classDecl)); - } - } - else if (dynamic_cast(surroundingLambda)) - { - manager->errors.Add(WfErrors::WrongDeclarationInInterfaceConstructor(node)); - } - else - { - manager->errors.Add(WfErrors::WrongDeclaration(node)); - } - } - - void Visit(WfConstructorDeclaration* node)override - { - if (classDecl && node->classMember) - { - switch (node->classMember->kind) - { - case WfClassMemberKind::Normal: - break; - case WfClassMemberKind::Static: - case WfClassMemberKind::Override: - manager->errors.Add(WfErrors::WrongClassMemberConfig(node)); - break; - } - - if (classDecl->kind != WfClassKind::Class) - { - manager->errors.Add(WfErrors::WrongDeclaration(node)); - } - - FOREACH(Ptr, call, node->baseConstructorCalls) - { - ValidateTypeStructure(manager, call->type, ValidateTypeStragety::BaseType, classDecl); - FOREACH(Ptr, argument, call->arguments) - { - ValidateStructureContext context; - ValidateExpressionStructure(manager, &context, argument); - } - } - { - ValidateStructureContext context; - ValidateStatementStructure(manager, &context, node->statement); - } - } - else - { - manager->errors.Add(WfErrors::WrongDeclaration(node)); - } - } - - void Visit(WfDestructorDeclaration* node)override - { - if (classDecl && node->classMember) - { - switch (node->classMember->kind) - { - case WfClassMemberKind::Normal: - break; - case WfClassMemberKind::Static: - case WfClassMemberKind::Override: - manager->errors.Add(WfErrors::WrongClassMemberConfig(node)); - break; - } - - if (classDecl->kind != WfClassKind::Class) - { - manager->errors.Add(WfErrors::WrongDeclaration(node)); - } - - ValidateStructureContext context; - ValidateStatementStructure(manager, &context, node->statement); - } - else - { - manager->errors.Add(WfErrors::WrongDeclaration(node)); - } - } - - class FindCtorVisitor - : public empty_visitor::DeclarationVisitor - { - public: - WfConstructorDeclaration* ctor = nullptr; - - void Dispatch(WfVirtualDeclaration* node)override - { - FOREACH(Ptr, decl, node->expandedDeclarations) - { - decl->Accept(this); - } - } - - void Visit(WfConstructorDeclaration* node)override - { - ctor = node; - } - }; - - class TooManyDtorVisitor - : public empty_visitor::DeclarationVisitor - { - public: - WfLexicalScopeManager* manager; - WfClassDeclaration* classDecl; - WfDestructorDeclaration* dtor = nullptr; - - TooManyDtorVisitor(WfLexicalScopeManager* _manager, WfClassDeclaration* _classDecl) - :manager(_manager) - , classDecl(_classDecl) - { - } - - void Dispatch(WfVirtualDeclaration* node)override - { - FOREACH(Ptr, decl, node->expandedDeclarations) - { - decl->Accept(this); - } - } - - void Visit(WfDestructorDeclaration* node)override - { - if (!dtor) - { - dtor = node; - } - else - { - manager->errors.Add(WfErrors::TooManyDestructor(node, classDecl)); - } - } - }; - - void Visit(WfClassDeclaration* node)override - { - if (classDecl && node->classMember) - { - switch (node->classMember->kind) - { - case WfClassMemberKind::Normal: - break; - case WfClassMemberKind::Static: - case WfClassMemberKind::Override: - manager->errors.Add(WfErrors::WrongClassMemberConfig(node)); - break; - } - } - else if (dynamic_cast(surroundingLambda)) - { - manager->errors.Add(WfErrors::WrongDeclarationInInterfaceConstructor(node)); - } - - switch (node->kind) - { - case WfClassKind::Class: - { - if (node->constructorType != WfConstructorType::Undefined) - { - manager->errors.Add(WfErrors::ClassWithInterfaceConstructor(node)); - } - { - FindCtorVisitor visitor; - FOREACH(Ptr, memberDecl, node->declarations) - { - memberDecl->Accept(&visitor); - } - - if (!visitor.ctor) - { - auto ctor = MakePtr(); - node->declarations.Add(ctor); - ctor->codeRange = node->codeRange; - ctor->classMember = MakePtr(); - ctor->classMember->codeRange = node->codeRange; - ctor->classMember->kind = WfClassMemberKind::Normal; - - auto stat = MakePtr(); - ctor->statement = stat; - stat->codeRange = node->codeRange; - } - } - } - break; - case WfClassKind::Interface: - break; - } - - FOREACH(Ptr, type, node->baseTypes) - { - ValidateTypeStructure(manager, type, ValidateTypeStragety::BaseType, node); - } - - { - TooManyDtorVisitor visitor(manager, node); - FOREACH(Ptr, memberDecl, node->declarations) - { - ValidateDeclarationStructure(manager, memberDecl, node); - memberDecl->Accept(&visitor); - } - } - } - - void Visit(WfEnumDeclaration* node)override - { - if (classDecl && node->classMember) - { - switch (node->classMember->kind) - { - case WfClassMemberKind::Normal: - break; - case WfClassMemberKind::Static: - case WfClassMemberKind::Override: - manager->errors.Add(WfErrors::WrongClassMemberConfig(node)); - break; - } - } - else if (dynamic_cast(surroundingLambda)) - { - manager->errors.Add(WfErrors::WrongDeclarationInInterfaceConstructor(node)); - } - - vuint64_t current = 0; - bool reportedNotConsecutive = false; - SortedList discoveredItems; - FOREACH(Ptr, item, node->items) - { - switch (item->kind) - { - case WfEnumItemKind::Constant: - { - vuint64_t value = -1; - TypedValueSerializerProvider::Deserialize(item->number.value, value); - if (!reportedNotConsecutive && value != current) - { - reportedNotConsecutive = true; - switch (node->kind) - { - case WfEnumKind::Normal: - manager->errors.Add(WfErrors::EnumValuesNotConsecutiveFromZero(node)); - break; - case WfEnumKind::Flag: - manager->errors.Add(WfErrors::FlagValuesNotConsecutiveFromZero(node)); - break; - } - } - switch (node->kind) - { - case WfEnumKind::Normal: - current++; - break; - case WfEnumKind::Flag: - current = current == 0 ? 1 : current * 2; - break; - } - } - break; - case WfEnumItemKind::Intersection: - FOREACH(Ptr, enumInt, item->intersections) - { - if (!discoveredItems.Contains(enumInt->name.value)) - { - manager->errors.Add(WfErrors::FlagValueNotExists(enumInt.Obj(), node)); - } - } - break; - } - - if (discoveredItems.Contains(item->name.value)) - { - manager->errors.Add(WfErrors::DuplicatedEnumValue(item.Obj(), node)); - } - else - { - discoveredItems.Add(item->name.value); - } - } - } - - void Visit(WfStructDeclaration* node)override - { - if (classDecl && node->classMember) - { - switch (node->classMember->kind) - { - case WfClassMemberKind::Normal: - break; - case WfClassMemberKind::Static: - case WfClassMemberKind::Override: - manager->errors.Add(WfErrors::WrongClassMemberConfig(node)); - break; - } - } - else if (dynamic_cast(surroundingLambda)) - { - manager->errors.Add(WfErrors::WrongDeclarationInInterfaceConstructor(node)); - } - - SortedList discoveredItems; - FOREACH(Ptr, member, node->members) - { - if (discoveredItems.Contains(member->name.value)) - { - manager->errors.Add(WfErrors::DuplicatedStructMember(member.Obj(), node)); - } - else - { - discoveredItems.Add(member->name.value); - } - } - } - - void Visit(WfVirtualDeclaration* node)override - { - node->Accept(static_cast(this)); - FOREACH(Ptr, decl, node->expandedDeclarations) - { - decl->Accept(this); - } - } - - void Visit(WfAutoPropertyDeclaration* node)override - { - switch (node->classMember->kind) - { - case WfClassMemberKind::Normal: - if (dynamic_cast(surroundingLambda)) - { - manager->errors.Add(WfErrors::AutoPropertyCannotBeNormalOutsideOfClass(node)); - } - break; - case WfClassMemberKind::Static: - manager->errors.Add(WfErrors::AutoPropertyCannotBeStatic(node)); - break; - case WfClassMemberKind::Override: - if (!dynamic_cast(surroundingLambda)) - { - manager->errors.Add(WfErrors::OverrideShouldImplementInterfaceMethod(node)); - } - break; - } - - if (classDecl) - { - switch (classDecl->kind) - { - case WfClassKind::Class: - if (!node->expression) - { - manager->errors.Add(WfErrors::AutoPropertyShouldBeInitialized(node)); - } - break; - case WfClassKind::Interface: - if (node->expression) - { - manager->errors.Add(WfErrors::AutoPropertyCannotBeInitializedInInterface(node, classDecl)); - } - break; - } - } - else if (dynamic_cast(surroundingLambda)) - { - if (!node->expression) - { - manager->errors.Add(WfErrors::AutoPropertyShouldBeInitialized(node)); - } - } - else - { - manager->errors.Add(WfErrors::WrongDeclaration(node)); - } - - ValidateTypeStructure(manager, node->type); - if (node->expression) - { - ValidateStructureContext context; - ValidateExpressionStructure(manager, &context, node->expression); - } - } - - void Visit(WfCastResultInterfaceDeclaration* node)override - { - } - - static void Execute(Ptr declaration, WfLexicalScopeManager* manager, WfClassDeclaration* classDecl, WfExpression* surroundingLambda) - { - ValidateStructureDeclarationVisitor visitor(manager, classDecl, surroundingLambda); - declaration->Accept(&visitor); - } - }; - -/*********************************************************************** -ValidateStructure(Statement) -***********************************************************************/ - - class ValidateStructureStatementVisitor - : public Object - , public WfStatement::IVisitor - , public WfVirtualStatement::IVisitor - , public WfCoroutineStatement::IVisitor - { - public: - WfLexicalScopeManager* manager; - ValidateStructureContext* context; - Ptr result; - - ValidateStructureStatementVisitor(WfLexicalScopeManager* _manager, ValidateStructureContext* _context) - :manager(_manager) - , context(_context) - { - } - - void Visit(WfBreakStatement* node)override - { - if (!context->currentLoopStatement) - { - manager->errors.Add(WfErrors::BreakNotInLoop(node)); - } - } - - void Visit(WfContinueStatement* node)override - { - if (!context->currentLoopStatement) - { - manager->errors.Add(WfErrors::ContinueNotInLoop(node)); - } - } - - void Visit(WfReturnStatement* node)override - { - if (node->expression) - { - ValidateExpressionStructure(manager, context, node->expression); - } - } - - void Visit(WfDeleteStatement* node)override - { - ValidateExpressionStructure(manager, context, node->expression); - } - - void Visit(WfRaiseExceptionStatement* node)override - { - if (node->expression) - { - ValidateExpressionStructure(manager, context, node->expression); - } - else if (!context->currentCatchStatement) - { - manager->errors.Add(WfErrors::RethrowNotInCatch(node)); - } - } - - void Visit(WfIfStatement* node)override - { - if (node->type) - { - ValidateTypeStructure(manager, node->type); - } - ValidateExpressionStructure(manager, context, node->expression); - ValidateStatementStructure(manager, context, node->trueBranch); - if (node->falseBranch) - { - ValidateStatementStructure(manager, context, node->falseBranch); - } - } - - void Visit(WfWhileStatement* node)override - { - auto oldLoop = context->currentLoopStatement; - context->currentLoopStatement = node; - ValidateExpressionStructure(manager, context, node->condition); - ValidateStatementStructure(manager, context, node->statement); - context->currentLoopStatement = oldLoop; - } - - void Visit(WfTryStatement* node)override - { - ValidateStatementStructure(manager, context, node->protectedStatement); - if (node->catchStatement) - { - auto oldCatch = context->currentCatchStatement; - context->currentCatchStatement = node->catchStatement.Obj(); - ValidateStatementStructure(manager, context, node->catchStatement); - context->currentCatchStatement = oldCatch; - } - if (node->finallyStatement) - { - ValidateStatementStructure(manager, context, node->finallyStatement); - } - if (!node->catchStatement && !node->finallyStatement) - { - manager->errors.Add(WfErrors::TryMissCatchAndFinally(node)); - } - } - - void Visit(WfBlockStatement* node)override - { - for (vint i = 0; i < node->statements.Count(); i++) - { - ValidateStatementStructure(manager, context, node->statements[i]); - } - } - - void Visit(WfExpressionStatement* node)override - { - ValidateExpressionStructure(manager, context, node->expression); - } - - void Visit(WfVariableStatement* node)override - { - ValidateDeclarationStructure(manager, node->variable); - } - - void Visit(WfVirtualStatement* node)override - { - node->Accept((WfVirtualStatement::IVisitor*)this); - if (node->expandedStatement) - { - ValidateStatementStructure(manager, context, node->expandedStatement); - } - } - - void Visit(WfSwitchStatement* node)override - { - ValidateExpressionStructure(manager, context, node->expression); - FOREACH(Ptr, switchCase, node->caseBranches) - { - ValidateExpressionStructure(manager, context, switchCase->expression); - ValidateStatementStructure(manager, context, switchCase->statement); - } - if (node->defaultBranch) - { - ValidateStatementStructure(manager, context, node->defaultBranch); - } - } - - void Visit(WfForEachStatement* node)override - { - auto oldLoop = context->currentLoopStatement; - context->currentLoopStatement = node; - ValidateExpressionStructure(manager, context, node->collection); - ValidateStatementStructure(manager, context, node->statement); - context->currentLoopStatement = oldLoop; - } - - void Visit(WfCoProviderStatement* node)override - { - auto oldProvider = context->currentCoProviderStatement; - context->currentCoProviderStatement = node; - ValidateStatementStructure(manager, context, node->statement); - context->currentCoProviderStatement = oldProvider; - } - - void Visit(WfCoroutineStatement* node)override - { - node->Accept((WfCoroutineStatement::IVisitor*)this); - } - - void Visit(WfCoPauseStatement* node)override - { - if (!context->currentNewCoroutineExpression || context->currentCoPauseStatement) - { - manager->errors.Add(WfErrors::WrongCoPause(node)); - } - if (node->statement) - { - auto oldCpPause = context->currentCoPauseStatement; - context->currentCoPauseStatement = node; - ValidateStatementStructure(manager, context, node->statement); - context->currentCoPauseStatement = oldCpPause; - } - } - - void Visit(WfCoOperatorStatement* node)override - { - if (!context->currentCoProviderStatement) - { - manager->errors.Add(WfErrors::WrongCoOperator(node)); - } - } - - static void Execute(Ptr& statement, WfLexicalScopeManager* manager, ValidateStructureContext* context) - { - ValidateStructureStatementVisitor visitor(manager, context); - statement->Accept(&visitor); - if (visitor.result) - { - statement = visitor.result; - } - } - }; - -/*********************************************************************** -ValidateStructure(Expression) -***********************************************************************/ - - class ValidateStructureExpressionVisitor - : public Object - , public WfExpression::IVisitor - , public WfVirtualExpression::IVisitor - { - public: - WfLexicalScopeManager* manager; - ValidateStructureContext* context; - Ptr result; - - ValidateStructureExpressionVisitor(WfLexicalScopeManager* _manager, ValidateStructureContext* _context) - :manager(_manager) - , context(_context) - { - } - - void Visit(WfThisExpression* node)override - { - if (context->currentBindExpression) - { - manager->errors.Add(WfErrors::WrongThisExpression(node)); - } - } - - void Visit(WfTopQualifiedExpression* node)override - { - } - - void Visit(WfReferenceExpression* node)override - { - } - - void Visit(WfOrderedNameExpression* node)override - { - } - - void Visit(WfOrderedLambdaExpression* node)override - { - auto oldBind = context->currentBindExpression; - context->currentBindExpression = 0; - ValidateExpressionStructure(manager, context, node->body); - context->currentBindExpression = oldBind; - } - - void Visit(WfMemberExpression* node)override - { - ValidateExpressionStructure(manager, context, node->parent); - } - - void Visit(WfChildExpression* node)override - { - ValidateExpressionStructure(manager, context, node->parent); - } - - void Visit(WfLiteralExpression* node)override - { - } - - void Visit(WfFloatingExpression* node)override - { - } - - void Visit(WfIntegerExpression* node)override - { - } - - void Visit(WfStringExpression* node)override - { - } - - void Visit(WfUnaryExpression* node)override - { - ValidateExpressionStructure(manager, context, node->operand); - } - - void Visit(WfBinaryExpression* node)override - { - ValidateExpressionStructure(manager, context, node->first); - ValidateExpressionStructure(manager, context, node->second); - } - - void Visit(WfLetExpression* node)override - { - FOREACH(Ptr, variable, node->variables) - { - ValidateExpressionStructure(manager, context, variable->value); - } - ValidateExpressionStructure(manager, context, node->expression); - } - - void Visit(WfIfExpression* node)override - { - ValidateExpressionStructure(manager, context, node->condition); - ValidateExpressionStructure(manager, context, node->trueBranch); - ValidateExpressionStructure(manager, context, node->falseBranch); - } - - void Visit(WfRangeExpression* node)override - { - ValidateExpressionStructure(manager, context, node->begin); - ValidateExpressionStructure(manager, context, node->end); - } - - void Visit(WfSetTestingExpression* node)override - { - ValidateExpressionStructure(manager, context, node->element); - ValidateExpressionStructure(manager, context, node->collection); - } - - void Visit(WfConstructorExpression* node)override - { - vint listElementCount = 0; - vint mapElementCount = 0; - FOREACH(Ptr, argument, node->arguments) - { - ValidateExpressionStructure(manager, context, argument->key); - if (argument->value) - { - ValidateExpressionStructure(manager, context, argument->value); - mapElementCount++; - } - else - { - listElementCount++; - } - } - - if (listElementCount*mapElementCount != 0) - { - manager->errors.Add(WfErrors::ConstructorMixMapAndList(node)); - } - } - - void Visit(WfInferExpression* node)override - { - ValidateTypeStructure(manager, node->type); - ValidateExpressionStructure(manager, context, node->expression); - } - - void Visit(WfTypeCastingExpression* node)override - { - ValidateTypeStructure(manager, node->type); - ValidateExpressionStructure(manager, context, node->expression); - } - - void Visit(WfTypeTestingExpression* node)override - { - if (node->type) - { - ValidateTypeStructure(manager, node->type); - } - ValidateExpressionStructure(manager, context, node->expression); - } - - void Visit(WfTypeOfTypeExpression* node)override - { - ValidateTypeStructure(manager, node->type); - } - - void Visit(WfTypeOfExpressionExpression* node)override - { - ValidateExpressionStructure(manager, context, node->expression); - } - - void Visit(WfAttachEventExpression* node)override - { - if (context->currentBindExpression) - { - manager->errors.Add(WfErrors::AttachInBind(node)); - } - ValidateExpressionStructure(manager, context, node->event); - ValidateExpressionStructure(manager, context, node->function); - } - - void Visit(WfDetachEventExpression* node)override - { - if (context->currentBindExpression) - { - manager->errors.Add(WfErrors::DetachInBind(node)); - } - ValidateExpressionStructure(manager, context, node->event); - ValidateExpressionStructure(manager, context, node->handler); - } - - void Visit(WfObserveExpression* node)override - { - if (!context->currentBindExpression) - { - manager->errors.Add(WfErrors::ObserveNotInBind(node)); - } - if (context->currentObserveExpression) - { - manager->errors.Add(WfErrors::ObserveInObserveEvent(node)); - } - - if (node->observeType == WfObserveType::SimpleObserve) - { - if (!node->expression.Cast()) - { - manager->errors.Add(WfErrors::WrongSimpleObserveExpression(node->expression.Obj())); - } - FOREACH(Ptr, event, node->events) - { - if (!event.Cast()) - { - manager->errors.Add(WfErrors::WrongSimpleObserveEvent(event.Obj())); - } - } - } - if (node->events.Count() == 0) - { - manager->errors.Add(WfErrors::EmptyObserveEvent(node)); - } - - ValidateExpressionStructure(manager, context, node->parent); - ValidateExpressionStructure(manager, context, node->expression); - context->currentObserveExpression = node; - for (vint i = 0; i < node->events.Count(); i++) - { - ValidateExpressionStructure(manager, context, node->events[i]); - } - context->currentObserveExpression = 0; - } - - void Visit(WfCallExpression* node)override - { - ValidateExpressionStructure(manager, context, node->function); - for (vint i = 0; i < node->arguments.Count(); i++) - { - ValidateExpressionStructure(manager, context, node->arguments[i]); - } - } - - void Visit(WfFunctionExpression* node)override - { - ValidateDeclarationStructure(manager, node->function, nullptr, node); - } - - void Visit(WfNewClassExpression* node)override - { - ValidateTypeStructure(manager, node->type); - for (vint i = 0; i < node->arguments.Count(); i++) - { - ValidateExpressionStructure(manager, context, node->arguments[i]); - } - } - - void Visit(WfNewInterfaceExpression* node)override - { - ValidateTypeStructure(manager, node->type); - FOREACH(Ptr, memberDecl, node->declarations) - { - ValidateDeclarationStructure(manager, memberDecl, nullptr, node); - } - } - - void Visit(WfVirtualExpression* node)override - { - node->Accept((WfVirtualExpression::IVisitor*)this); - if (node->expandedExpression) - { - ValidateExpressionStructure(manager, context, node->expandedExpression); - } - } - - void Visit(WfBindExpression* node)override - { - if (context->currentBindExpression) - { - manager->errors.Add(WfErrors::BindInBind(node)); - } - - auto bind = context->currentBindExpression; - context->currentBindExpression = node; - ValidateExpressionStructure(manager, context, node->expression); - context->currentBindExpression = bind; - } - - void Visit(WfFormatExpression* node)override - { - } - - void Visit(WfNewCoroutineExpression* node)override - { - ValidateStructureContext context; - context.currentNewCoroutineExpression = node; - ValidateStatementStructure(manager, &context, node->statement); - } - - void Visit(WfMixinCastExpression* node)override - { - ValidateTypeStructure(manager, node->type); - ValidateExpressionStructure(manager, context, node->expression); - } - - void Visit(WfExpectedTypeCastExpression* node)override - { - ValidateExpressionStructure(manager, context, node->expression); - } - - static void Execute(Ptr& expression, WfLexicalScopeManager* manager, ValidateStructureContext* context) - { - ValidateStructureExpressionVisitor visitor(manager, context); - expression->Accept(&visitor); - if (visitor.result) - { - expression = visitor.result; - } - } - }; - /*********************************************************************** ValidateStructure ***********************************************************************/ @@ -25380,58 +29245,6 @@ ValidateStructure { ValidateStructureTypeVisitor::Execute(type, manager, strategy, classDecl); } - - void ValidateModuleStructure(WfLexicalScopeManager* manager, Ptr module) - { - FOREACH(Ptr, path, module->paths) - { - FOREACH_INDEXER(Ptr, item, index, path->items) - { - vint counter = 0; - FOREACH(Ptr, fragment, item->fragments) - { - if (fragment.Cast()) - { - if (index == path->items.Count() - 1) - { - counter++; - } - else - { - goto USING_PATH_INCORRECT; - } - } - } - - if (index == path->items.Count() - 1 && counter != 1) - { - goto USING_PATH_INCORRECT; - } - } - continue; - USING_PATH_INCORRECT: - manager->errors.Add(WfErrors::WrongUsingPathWildCard(path.Obj())); - } - for (vint i = 0; i < module->declarations.Count(); i++) - { - ValidateDeclarationStructure(manager, module->declarations[i]); - } - } - - void ValidateDeclarationStructure(WfLexicalScopeManager* manager, Ptr declaration, WfClassDeclaration* classDecl, WfExpression* surroundingLambda) - { - ValidateStructureDeclarationVisitor::Execute(declaration, manager, classDecl, surroundingLambda); - } - - void ValidateStatementStructure(WfLexicalScopeManager* manager, ValidateStructureContext* context, Ptr& statement) - { - ValidateStructureStatementVisitor::Execute(statement, manager, context); - } - - void ValidateExpressionStructure(WfLexicalScopeManager* manager, ValidateStructureContext* context, Ptr& expression) - { - ValidateStructureExpressionVisitor::Execute(expression, manager, context); - } } } } @@ -25558,7 +29371,7 @@ WfCppConfig GenerateStatement(this, MakePtr(), writer, stat, prefix, WString(L"\t", false), expectedType); } - WString WfCppConfig::ConvertName(const WString& name) + WString WfCppConfig::ConvertNameInternal(const WString& name, const WString& specialNameCategory, bool alwaysUseCategory) { if (name.Length() > 0 && name[0] == L'$') { @@ -25568,7 +29381,7 @@ WfCppConfig auto match = regexSpecialName.Match(name); if (match) { - return L"__vwsn_" + return specialNameCategory + From(match->Groups()[L"category"]) .Select([](const RegexString& rs) { @@ -25580,12 +29393,25 @@ WfCppConfig }) + L"_" + match->Groups()[L"name"][0].Value(); } - else + else if (alwaysUseCategory) + { + return specialNameCategory + name; + } { return name; } } + WString WfCppConfig::ConvertName(const WString& name) + { + return ConvertNameInternal(name, WString(L"__vwsn_", false), false); + } + + WString WfCppConfig::ConvertName(const WString& name, const WString& specialNameCategory) + { + return ConvertNameInternal(name, specialNameCategory, true); + } + WString WfCppConfig::ConvertFullName(const WString& fullName, WString delimiter) { List> matches; @@ -26050,7 +29876,15 @@ WfGenerateClassMemberDeclVisitor { } - void Visit(WfVirtualDeclaration* node)override + void Visit(WfVirtualCfeDeclaration* node)override + { + FOREACH(Ptr, decl, node->expandedDeclarations) + { + decl->Accept(this); + } + } + + void Visit(WfVirtualCseDeclaration* node)override { FOREACH(Ptr, decl, node->expandedDeclarations) { @@ -26242,7 +30076,15 @@ WfGenerateClassMemberImplVisitor { } - void Visit(WfVirtualDeclaration* node)override + void Visit(WfVirtualCfeDeclaration* node)override + { + FOREACH(Ptr, decl, node->expandedDeclarations) + { + decl->Accept(this); + } + } + + void Visit(WfVirtualCseDeclaration* node)override { FOREACH(Ptr, decl, node->expandedDeclarations) { @@ -28666,7 +32508,12 @@ WfGenerateExpressionVisitor writer.WriteString(L"))"); } - void Visit(WfVirtualExpression* node)override + void Visit(WfVirtualCfeExpression* node)override + { + Call(node->expandedExpression); + } + + void Visit(WfVirtualCseExpression* node)override { Call(node->expandedExpression); } @@ -29395,6 +33242,12 @@ MergeCppFile WString MergeCppMultiPlatform(const WString& code32, const WString& code64) { + static wchar_t stringCast32[] = L"static_cast<::vl::vint32_t>("; + const vint lengthCast32 = sizeof(stringCast32) / sizeof(*stringCast32) - 1; + + static wchar_t stringCast64[] = L"static_cast<::vl::vint64_t>("; + const vint lengthCast64 = sizeof(stringCast64) / sizeof(*stringCast64) - 1; + return GenerateToStream([&](StreamWriter& writer) { const wchar_t* reading32 = code32.Buffer(); @@ -29466,6 +33319,36 @@ MergeCppFile } } } + else if (wcsncmp(reading32, stringCast32, lengthCast32) == 0 && IS_DIGIT(reading32[lengthCast32]) && IS_DIGIT(reading64[0])) + { + reading32 += lengthCast32; + vint digitCount = 0; + while (IS_DIGIT(reading32[digitCount])) digitCount++; + if (wcsncmp(reading32, reading64, digitCount) == 0 && reading64[digitCount] == L'L' && reading32[digitCount] == L')') + { + writer.WriteString(L"static_cast<::vl::vint>("); + writer.WriteString(WString(reading32, digitCount)); + writer.WriteChar(L')'); + reading64 += digitCount + 1; + reading32 += digitCount + 1; + goto NEXT_ROUND; + } + } + else if (wcsncmp(reading64, stringCast64, lengthCast64) == 0 && IS_DIGIT(reading64[lengthCast64]) && IS_DIGIT(reading32[0])) + { + reading64 += lengthCast64; + vint digitCount = 0; + while (IS_DIGIT(reading64[digitCount])) digitCount++; + if (wcsncmp(reading64, reading32, digitCount) == 0 && reading64[digitCount] == L'L' && reading64[digitCount + 1] == L')') + { + writer.WriteString(L"static_cast<::vl::vint>("); + writer.WriteString(WString(reading64, digitCount)); + writer.WriteChar(L')'); + reading64 += digitCount + 2; + reading32 += digitCount; + goto NEXT_ROUND; + } + } throw Exception(L"The difference at " + itow((vint)(reading32 - start32)) + L"-th character between Input C++ source files are not " L"\"vint32_t\" and \"vint64_t\", " L"\"\" and \"L\", " @@ -29786,12 +33669,20 @@ namespace vl { writer.WriteString(prefixBlock); writer.WriteLine(L"{"); + + auto oldPrefix = prefix; + if (node->endLabel.value != L"") + { + auto name = config->ConvertName(node->endLabel.value, L"__vwsnl_" + itow(functionRecord->labelCounter++) + L"_"); + functionRecord->labelNames.Add(node->endLabel.value, name); + writer.WriteString(prefixBlock); + writer.WriteLine(L"\t{"); + prefix += L"\t"; + } + FOREACH(Ptr, statement, node->statements) { - while (auto virtualStat = statement.Cast()) - { - statement = virtualStat->expandedStatement; - } + statement = SearchUntilNonVirtualStatement(statement); if (statement.Cast()) { @@ -29802,10 +33693,30 @@ namespace vl Call(statement, WString::Empty); } } + + if (node->endLabel.value != L"") + { + prefix = oldPrefix; + writer.WriteString(prefixBlock); + writer.WriteLine(L"\t}"); + writer.WriteString(prefixBlock); + writer.WriteString(L"\t"); + writer.WriteString(functionRecord->labelNames[node->endLabel.value]); + writer.WriteLine(L":;"); + functionRecord->labelNames.Remove(node->endLabel.value); + } writer.WriteString(prefixBlock); writer.WriteLine(L"}"); } + void Visit(WfGotoStatement* node)override + { + writer.WriteString(prefix); + writer.WriteString(L"goto "); + writer.WriteString(functionRecord->labelNames[node->label.value]); + writer.WriteLine(L";"); + } + void Visit(WfExpressionStatement* node)override { writer.WriteString(prefix); @@ -29838,7 +33749,7 @@ namespace vl writer.WriteLine(L";"); } - void Visit(WfVirtualStatement* node)override + void Visit(WfVirtualCseStatement* node)override { node->expandedStatement->Accept(this); } @@ -29847,6 +33758,11 @@ namespace vl { CHECK_FAIL(L"WfGenerateStatementVisitor::Visit(WfCoroutineStatement*)#Internal error, All coroutine statements do not generate C++ code."); } + + void Visit(WfStateMachineStatement* node)override + { + CHECK_FAIL(L"WfGenerateStatementVisitor::Visit(WfStateMachineStatement*)#Internal error, All state machine statements do not generate C++ code."); + } }; void GenerateStatement(WfCppConfig* config, Ptr functionRecord, stream::StreamWriter& writer, Ptr node, const WString& prefix, const WString& prefixDelta, reflection::description::ITypeInfo* returnType) @@ -29896,7 +33812,15 @@ namespace vl { } - void Dispatch(WfVirtualDeclaration* node)override + void Dispatch(WfVirtualCseDeclaration* node)override + { + FOREACH(Ptr, decl, node->expandedDeclarations) + { + decl->Accept(this); + } + } + + void Dispatch(WfVirtualCfeDeclaration* node)override { FOREACH(Ptr, decl, node->expandedDeclarations) { @@ -30715,7 +34639,15 @@ WfCppConfig::CollectClosureInfo variableCount++; } - void Dispatch(WfVirtualDeclaration* node)override + void Dispatch(WfVirtualCfeDeclaration* node)override + { + FOREACH(Ptr, decl, node->expandedDeclarations) + { + decl->Accept(this); + } + } + + void Dispatch(WfVirtualCseDeclaration* node)override { FOREACH(Ptr, decl, node->expandedDeclarations) { @@ -31066,7 +34998,15 @@ WfCppConfig::WriteCpp { } - void Dispatch(WfVirtualDeclaration* node)override + void Dispatch(WfVirtualCfeDeclaration* node)override + { + FOREACH(Ptr, decl, node->expandedDeclarations) + { + decl->Accept(this); + } + } + + void Dispatch(WfVirtualCseDeclaration* node)override { FOREACH(Ptr, decl, node->expandedDeclarations) { @@ -31833,23 +35773,27 @@ WfCodegenFunctionContext return scopeContextStack[scopeContextStack.Count() - 1]; } - Ptr WfCodegenFunctionContext::GetCurrentScopeContext(WfCodegenScopeType type) + Ptr WfCodegenFunctionContext::GetCurrentScopeContext(WfCodegenScopeType type, const WString& name) { for (vint i = scopeContextStack.Count() - 1; i >= 0; i--) { auto context = scopeContextStack[i]; if (context->type == type) { - return context; + if (name == L"" || context->name == name) + { + return context; + } } } return 0; } - Ptr WfCodegenFunctionContext::PushScopeContext(WfCodegenScopeType type) + Ptr WfCodegenFunctionContext::PushScopeContext(WfCodegenScopeType type, const WString& name) { auto context = MakePtr(); context->type = type; + context->name = name; scopeContextStack.Add(context); return context; } @@ -32311,7 +36255,15 @@ GenerateInstructions(Initialize) { } - void Visit(WfVirtualDeclaration* node)override + void Visit(WfVirtualCfeDeclaration* node)override + { + FOREACH(Ptr, decl, node->expandedDeclarations) + { + decl->Accept(this); + } + } + + void Visit(WfVirtualCseDeclaration* node)override { FOREACH(Ptr, decl, node->expandedDeclarations) { @@ -32471,7 +36423,15 @@ GenerateInstructions(Declaration) { } - void Dispatch(WfVirtualDeclaration* node)override + void Dispatch(WfVirtualCfeDeclaration* node)override + { + FOREACH(Ptr, decl, node->expandedDeclarations) + { + decl->Accept(this); + } + } + + void Dispatch(WfVirtualCseDeclaration* node)override { FOREACH(Ptr, decl, node->expandedDeclarations) { @@ -32578,7 +36538,15 @@ GenerateInstructions(Declaration) { } - void Visit(WfVirtualDeclaration* node)override + void Visit(WfVirtualCfeDeclaration* node)override + { + FOREACH(Ptr, decl, node->expandedDeclarations) + { + decl->Accept(this); + } + } + + void Visit(WfVirtualCseDeclaration* node)override { FOREACH(Ptr, decl, node->expandedDeclarations) { @@ -32650,7 +36618,15 @@ GenerateInstructions(Declaration) { } - void Visit(WfVirtualDeclaration* node)override + void Visit(WfVirtualCfeDeclaration* node)override + { + FOREACH(Ptr, decl, node->expandedDeclarations) + { + decl->Accept(this); + } + } + + void Visit(WfVirtualCseDeclaration* node)override { FOREACH(Ptr, decl, node->expandedDeclarations) { @@ -33780,7 +37756,7 @@ GenerateInstructions(Expression) { } - void Dispatch(WfVirtualDeclaration* node)override + void Dispatch(WfVirtualCfeDeclaration* node)override { FOREACH(Ptr, decl, node->expandedDeclarations) { @@ -33788,6 +37764,11 @@ GenerateInstructions(Expression) } } + void Dispatch(WfVirtualCseDeclaration* node)override + { + CHECK_FAIL(L"NewInterfaceExpressionVisitor::Visit(WfVirtualCseDeclaration*)#Internal error, Temporary not supported."); + } + void Visit(WfFunctionDeclaration* node)override { if (!firstFunction) @@ -33890,7 +37871,12 @@ GenerateInstructions(Expression) INSTRUCTION(Ins::CreateInterface(result.constructorInfo, declVisitor.overrideFunctions.Count() * 2)); } - void Visit(WfVirtualExpression* node)override + void Visit(WfVirtualCfeExpression* node)override + { + GenerateExpressionInstructions(context, node->expandedExpression); + } + + void Visit(WfVirtualCseExpression* node)override { GenerateExpressionInstructions(context, node->expandedExpression); } @@ -34068,7 +38054,15 @@ GenerateGlobalDeclarationMetadata { } - void Visit(WfVirtualDeclaration* node)override + void Visit(WfVirtualCfeDeclaration* node)override + { + FOREACH(Ptr, decl, node->expandedDeclarations) + { + decl->Accept(this); + } + } + + void Visit(WfVirtualCseDeclaration* node)override { FOREACH(Ptr, decl, node->expandedDeclarations) { @@ -34153,7 +38147,15 @@ GenerateGlobalDeclarationMetadata { } - void Visit(WfVirtualDeclaration* node)override + void Visit(WfVirtualCfeDeclaration* node)override + { + FOREACH(Ptr, decl, node->expandedDeclarations) + { + decl->Accept(this); + } + } + + void Visit(WfVirtualCseDeclaration* node)override { FOREACH(Ptr, decl, node->expandedDeclarations) { @@ -34221,15 +38223,24 @@ GenerateInstructions(Statement) ApplyExitCode(scopeContext); } - void InlineScopeExitCode(WfCodegenScopeType untilScopeType, bool exclusive) + void InlineScopeExitCode(WfCodegenScopeType untilScopeType, bool exclusive, const WString& name = WString::Empty) { vint index = context.functionContext->scopeContextStack.Count() - 1; while (index >= 0) { auto scopeContext = context.functionContext->scopeContextStack[index]; - if (exclusive && scopeContext->type == untilScopeType) break; + bool found = false; + if (scopeContext->type == untilScopeType) + { + if (name == L"" || scopeContext->name == name) + { + found = true; + } + } + + if (exclusive && found) break; ApplyExitCode(scopeContext); - if (!exclusive && scopeContext->type == untilScopeType) break; + if (!exclusive && found) break; index--; } } @@ -34458,10 +38469,32 @@ GenerateInstructions(Statement) void Visit(WfBlockStatement* node)override { + Ptr blockContext; + if (node->endLabel.value != L"") + { + blockContext = context.functionContext->PushScopeContext(WfCodegenScopeType::Block, node->endLabel.value); + } + FOREACH(Ptr, statement, node->statements) { GenerateStatementInstructions(context, statement); } + + if (blockContext) + { + vint breakLabelIndex = context.assembly->instructions.Count(); + FOREACH(vint, index, blockContext->breakInstructions) + { + context.assembly->instructions[index].indexParameter = breakLabelIndex; + } + context.functionContext->PopScopeContext(); + } + } + + void Visit(WfGotoStatement* node)override + { + InlineScopeExitCode(WfCodegenScopeType::Block, false, node->label.value); + context.functionContext->GetCurrentScopeContext(WfCodegenScopeType::Block, node->label.value)->breakInstructions.Add(INSTRUCTION(Ins::Jump(-1))); } void Visit(WfExpressionStatement* node)override @@ -34483,7 +38516,7 @@ GenerateInstructions(Statement) INSTRUCTION(Ins::StoreLocalVar(index)); } - void Visit(WfVirtualStatement* node)override + void Visit(WfVirtualCseStatement* node)override { GenerateStatementInstructions(context, node->expandedStatement); } @@ -34492,6 +38525,11 @@ GenerateInstructions(Statement) { CHECK_FAIL(L"GenerateStatementInstructionsVisitor::Visit(WfCoroutineStatement*)#Internal error, All coroutine statements do not emit instructions."); } + + void Visit(WfStateMachineStatement* node)override + { + CHECK_FAIL(L"GenerateStatementInstructionsVisitor::Visit(WfStateMachineStatement*)#Internal error, All state machine statements do not emit instructions."); + } }; #undef EXIT_CODE diff --git a/Import/VlppWorkflowCompiler.h b/Import/VlppWorkflowCompiler.h index ee7928b4..f9b20374 100644 --- a/Import/VlppWorkflowCompiler.h +++ b/Import/VlppWorkflowCompiler.h @@ -2,7 +2,8 @@ THIS FILE IS AUTOMATICALLY GENERATED. DO NOT MODIFY DEVELOPER: Zihan Chen(vczh) ***********************************************************************/ -#include "VlppWorkflow.h" +#include "VlppWorkflowLibrary.h" +#include "VlppWorkflowRuntime.h" #include "Vlpp.h" /*********************************************************************** @@ -92,48 +93,55 @@ namespace vl KEYWORD_ON = 63, KEYWORD_ATTACH = 64, KEYWORD_DETACH = 65, - KEYWORD_VAR = 66, - KEYWORD_BREAK = 67, - KEYWORD_CONTINUE = 68, - KEYWORD_RETURN = 69, - KEYWORD_DELETE = 70, - KEYWORD_RAISE = 71, - KEYWORD_IF = 72, - KEYWORD_ELSE = 73, - KEYWORD_SWITCH = 74, - KEYWORD_CASE = 75, - KEYWORD_DEFAULT = 76, - KEYWORD_WHILE = 77, - KEYWORD_FOR = 78, - KEYWORD_REVERSED = 79, - KEYWORD_TRY = 80, - KEYWORD_CATCH = 81, - KEYWORD_FINALLY = 82, - KEYWORD_CLASS = 83, - KEYWORD_ENUM = 84, - KEYWORD_FLAGENUM = 85, - KEYWORD_STRUCT = 86, - KEYWORD_PROP = 87, - KEYWORD_EVENT = 88, - KEYWORD_STATIC = 89, - KEYWORD_OVERRIDE = 90, - KEYWORD_USING = 91, - KEYWORD_NAMESPACE = 92, - KEYWORD_MODULE = 93, - KEYWORD_UNIT = 94, - COROUTINE_COROUTINE = 95, - COROUTINE_PAUSE = 96, - COROUTINE_INTERFACE = 97, - COROUTINE_OPERATOR = 98, - COROUTINE_SIGN = 99, - NAME = 100, - ORDERED_NAME = 101, - FLOAT = 102, - INTEGER = 103, - STRING = 104, - FORMATSTRING = 105, - SPACE = 106, - COMMENT = 107, + KEYWORD_GOTO = 66, + KEYWORD_VAR = 67, + KEYWORD_BREAK = 68, + KEYWORD_CONTINUE = 69, + KEYWORD_RETURN = 70, + KEYWORD_DELETE = 71, + KEYWORD_RAISE = 72, + KEYWORD_IF = 73, + KEYWORD_ELSE = 74, + KEYWORD_SWITCH = 75, + KEYWORD_CASE = 76, + KEYWORD_DEFAULT = 77, + KEYWORD_WHILE = 78, + KEYWORD_FOR = 79, + KEYWORD_REVERSED = 80, + KEYWORD_TRY = 81, + KEYWORD_CATCH = 82, + KEYWORD_FINALLY = 83, + KEYWORD_CLASS = 84, + KEYWORD_ENUM = 85, + KEYWORD_FLAGENUM = 86, + KEYWORD_STRUCT = 87, + KEYWORD_PROP = 88, + KEYWORD_EVENT = 89, + KEYWORD_STATIC = 90, + KEYWORD_OVERRIDE = 91, + KEYWORD_USING = 92, + KEYWORD_NAMESPACE = 93, + KEYWORD_MODULE = 94, + KEYWORD_UNIT = 95, + STATE_MACHINE = 96, + STATE_INPUT = 97, + STATE_SWITCH = 98, + STATE_GOTO = 99, + STATE_PUSH = 100, + STATE_DECL = 101, + COROUTINE_COROUTINE = 102, + COROUTINE_PAUSE = 103, + COROUTINE_INTERFACE = 104, + COROUTINE_OPERATOR = 105, + COROUTINE_SIGN = 106, + NAME = 107, + ORDERED_NAME = 108, + FLOAT = 109, + INTEGER = 110, + STRING = 111, + FORMATSTRING = 112, + SPACE = 113, + COMMENT = 114, }; class WfClassMember; class WfType; @@ -167,9 +175,13 @@ namespace vl class WfEnumDeclaration; class WfStructMember; class WfStructDeclaration; - class WfVirtualDeclaration; + class WfVirtualCfeDeclaration; class WfAutoPropertyDeclaration; class WfCastResultInterfaceDeclaration; + class WfVirtualCseDeclaration; + class WfStateInput; + class WfStateDeclaration; + class WfStateMachineDeclaration; class WfBreakStatement; class WfContinueStatement; class WfReturnStatement; @@ -179,9 +191,10 @@ namespace vl class WfWhileStatement; class WfTryStatement; class WfBlockStatement; + class WfGotoStatement; class WfVariableStatement; class WfExpressionStatement; - class WfVirtualStatement; + class WfVirtualCseStatement; class WfForEachStatement; class WfSwitchCase; class WfSwitchStatement; @@ -189,6 +202,11 @@ namespace vl class WfCoroutineStatement; class WfCoPauseStatement; class WfCoOperatorStatement; + class WfStateMachineStatement; + class WfStateSwitchArgument; + class WfStateSwitchCase; + class WfStateSwitchStatement; + class WfStateInvokeStatement; class WfThisExpression; class WfTopQualifiedExpression; class WfReferenceExpression; @@ -221,12 +239,14 @@ namespace vl class WfFunctionExpression; class WfNewClassExpression; class WfNewInterfaceExpression; - class WfVirtualExpression; - class WfBindExpression; + class WfVirtualCfeExpression; class WfFormatExpression; + class WfVirtualCseExpression; + class WfBindExpression; class WfNewCoroutineExpression; class WfMixinCastExpression; class WfExpectedTypeCastExpression; + class WfCoOperatorExpression; class WfModuleUsingFragment; class WfModuleUsingNameFragment; class WfModuleUsingWildCardFragment; @@ -308,7 +328,8 @@ namespace vl virtual void Visit(WfFunctionExpression* node)=0; virtual void Visit(WfNewClassExpression* node)=0; virtual void Visit(WfNewInterfaceExpression* node)=0; - virtual void Visit(WfVirtualExpression* node)=0; + virtual void Visit(WfVirtualCfeExpression* node)=0; + virtual void Visit(WfVirtualCseExpression* node)=0; }; virtual void Accept(WfExpression::IVisitor* visitor)=0; @@ -330,10 +351,12 @@ namespace vl virtual void Visit(WfWhileStatement* node)=0; virtual void Visit(WfTryStatement* node)=0; virtual void Visit(WfBlockStatement* node)=0; + virtual void Visit(WfGotoStatement* node)=0; virtual void Visit(WfVariableStatement* node)=0; virtual void Visit(WfExpressionStatement* node)=0; - virtual void Visit(WfVirtualStatement* node)=0; + virtual void Visit(WfVirtualCseStatement* node)=0; virtual void Visit(WfCoroutineStatement* node)=0; + virtual void Visit(WfStateMachineStatement* node)=0; }; virtual void Accept(WfStatement::IVisitor* visitor)=0; @@ -366,7 +389,8 @@ namespace vl virtual void Visit(WfClassDeclaration* node)=0; virtual void Visit(WfEnumDeclaration* node)=0; virtual void Visit(WfStructDeclaration* node)=0; - virtual void Visit(WfVirtualDeclaration* node)=0; + virtual void Visit(WfVirtualCfeDeclaration* node)=0; + virtual void Visit(WfVirtualCseDeclaration* node)=0; }; virtual void Accept(WfDeclaration::IVisitor* visitor)=0; @@ -704,7 +728,7 @@ namespace vl static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens); }; - class WfVirtualDeclaration abstract : public WfDeclaration, vl::reflection::Description + class WfVirtualCfeDeclaration abstract : public WfDeclaration, vl::reflection::Description { public: class IVisitor : public vl::reflection::IDescriptable, vl::reflection::Description @@ -714,7 +738,7 @@ namespace vl virtual void Visit(WfCastResultInterfaceDeclaration* node)=0; }; - virtual void Accept(WfVirtualDeclaration::IVisitor* visitor)=0; + virtual void Accept(WfVirtualCfeDeclaration::IVisitor* visitor)=0; vl::collections::List> expandedDeclarations; @@ -733,7 +757,7 @@ namespace vl NotObservable, }; - class WfAutoPropertyDeclaration : public WfVirtualDeclaration, vl::reflection::Description + class WfAutoPropertyDeclaration : public WfVirtualCfeDeclaration, vl::reflection::Description { public: vl::Ptr type; @@ -741,22 +765,68 @@ namespace vl WfAPObserve configObserve; vl::Ptr expression; - void Accept(WfVirtualDeclaration::IVisitor* visitor)override; + void Accept(WfVirtualCfeDeclaration::IVisitor* visitor)override; static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens); }; - class WfCastResultInterfaceDeclaration : public WfVirtualDeclaration, vl::reflection::Description + class WfCastResultInterfaceDeclaration : public WfVirtualCfeDeclaration, vl::reflection::Description { public: vl::Ptr baseType; vl::Ptr elementType; - void Accept(WfVirtualDeclaration::IVisitor* visitor)override; + void Accept(WfVirtualCfeDeclaration::IVisitor* visitor)override; static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens); }; + class WfVirtualCseDeclaration abstract : public WfDeclaration, vl::reflection::Description + { + public: + class IVisitor : public vl::reflection::IDescriptable, vl::reflection::Description + { + public: + virtual void Visit(WfStateMachineDeclaration* node)=0; + }; + + virtual void Accept(WfVirtualCseDeclaration::IVisitor* visitor)=0; + + vl::collections::List> expandedDeclarations; + + void Accept(WfDeclaration::IVisitor* visitor)override; + }; + + class WfStateInput : public vl::parsing::ParsingTreeCustomBase, vl::reflection::Description + { + public: + vl::parsing::ParsingToken name; + vl::collections::List> arguments; + + static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens); + }; + + class WfStateDeclaration : public vl::parsing::ParsingTreeCustomBase, vl::reflection::Description + { + public: + vl::parsing::ParsingToken name; + vl::collections::List> arguments; + vl::Ptr statement; + + static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens); + }; + + class WfStateMachineDeclaration : public WfVirtualCseDeclaration, vl::reflection::Description + { + public: + vl::collections::List> inputs; + vl::collections::List> states; + + void Accept(WfVirtualCseDeclaration::IVisitor* visitor)override; + + static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens); + }; + class WfBreakStatement : public WfStatement, vl::reflection::Description { public: @@ -847,12 +917,23 @@ namespace vl { public: vl::collections::List> statements; + vl::parsing::ParsingToken endLabel; void Accept(WfStatement::IVisitor* visitor)override; static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens); }; + class WfGotoStatement : public WfStatement, vl::reflection::Description + { + public: + vl::parsing::ParsingToken label; + + void Accept(WfStatement::IVisitor* visitor)override; + + static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens); + }; + class WfVariableStatement : public WfStatement, vl::reflection::Description { public: @@ -873,7 +954,7 @@ namespace vl static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens); }; - class WfVirtualStatement abstract : public WfStatement, vl::reflection::Description + class WfVirtualCseStatement abstract : public WfStatement, vl::reflection::Description { public: class IVisitor : public vl::reflection::IDescriptable, vl::reflection::Description @@ -884,7 +965,7 @@ namespace vl virtual void Visit(WfCoProviderStatement* node)=0; }; - virtual void Accept(WfVirtualStatement::IVisitor* visitor)=0; + virtual void Accept(WfVirtualCseStatement::IVisitor* visitor)=0; vl::Ptr expandedStatement; @@ -897,7 +978,7 @@ namespace vl Reversed, }; - class WfForEachStatement : public WfVirtualStatement, vl::reflection::Description + class WfForEachStatement : public WfVirtualCseStatement, vl::reflection::Description { public: vl::parsing::ParsingToken name; @@ -905,7 +986,7 @@ namespace vl vl::Ptr collection; vl::Ptr statement; - void Accept(WfVirtualStatement::IVisitor* visitor)override; + void Accept(WfVirtualCseStatement::IVisitor* visitor)override; static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens); }; @@ -919,25 +1000,25 @@ namespace vl static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens); }; - class WfSwitchStatement : public WfVirtualStatement, vl::reflection::Description + class WfSwitchStatement : public WfVirtualCseStatement, vl::reflection::Description { public: vl::Ptr expression; vl::collections::List> caseBranches; vl::Ptr defaultBranch; - void Accept(WfVirtualStatement::IVisitor* visitor)override; + void Accept(WfVirtualCseStatement::IVisitor* visitor)override; static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens); }; - class WfCoProviderStatement : public WfVirtualStatement, vl::reflection::Description + class WfCoProviderStatement : public WfVirtualCseStatement, vl::reflection::Description { public: vl::parsing::ParsingToken name; vl::Ptr statement; - void Accept(WfVirtualStatement::IVisitor* visitor)override; + void Accept(WfVirtualCseStatement::IVisitor* visitor)override; static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens); }; @@ -980,6 +1061,78 @@ namespace vl static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens); }; + enum class WfStateSwitchType + { + Default, + Pass, + PassAndReturn, + Ignore, + IgnoreAndReturn, + }; + + enum class WfStateInvokeType + { + Goto, + Push, + }; + + class WfStateMachineStatement abstract : public WfStatement, vl::reflection::Description + { + public: + class IVisitor : public vl::reflection::IDescriptable, vl::reflection::Description + { + public: + virtual void Visit(WfStateSwitchStatement* node)=0; + virtual void Visit(WfStateInvokeStatement* node)=0; + }; + + virtual void Accept(WfStateMachineStatement::IVisitor* visitor)=0; + + + void Accept(WfStatement::IVisitor* visitor)override; + }; + + class WfStateSwitchArgument : public vl::parsing::ParsingTreeCustomBase, vl::reflection::Description + { + public: + vl::parsing::ParsingToken name; + + static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens); + }; + + class WfStateSwitchCase : public vl::parsing::ParsingTreeCustomBase, vl::reflection::Description + { + public: + vl::parsing::ParsingToken name; + vl::collections::List> arguments; + vl::Ptr statement; + + static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens); + }; + + class WfStateSwitchStatement : public WfStateMachineStatement, vl::reflection::Description + { + public: + WfStateSwitchType type; + vl::collections::List> caseBranches; + + void Accept(WfStateMachineStatement::IVisitor* visitor)override; + + static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens); + }; + + class WfStateInvokeStatement : public WfStateMachineStatement, vl::reflection::Description + { + public: + WfStateInvokeType type; + vl::parsing::ParsingToken name; + vl::collections::List> arguments; + + void Accept(WfStateMachineStatement::IVisitor* visitor)override; + + static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens); + }; + class WfThisExpression : public WfExpression, vl::reflection::Description { public: @@ -1396,79 +1549,105 @@ namespace vl static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens); }; - class WfVirtualExpression abstract : public WfExpression, vl::reflection::Description + class WfVirtualCfeExpression abstract : public WfExpression, vl::reflection::Description { public: class IVisitor : public vl::reflection::IDescriptable, vl::reflection::Description { public: - virtual void Visit(WfBindExpression* node)=0; virtual void Visit(WfFormatExpression* node)=0; - virtual void Visit(WfNewCoroutineExpression* node)=0; - virtual void Visit(WfMixinCastExpression* node)=0; - virtual void Visit(WfExpectedTypeCastExpression* node)=0; }; - virtual void Accept(WfVirtualExpression::IVisitor* visitor)=0; + virtual void Accept(WfVirtualCfeExpression::IVisitor* visitor)=0; vl::Ptr expandedExpression; void Accept(WfExpression::IVisitor* visitor)override; }; - class WfBindExpression : public WfVirtualExpression, vl::reflection::Description - { - public: - vl::Ptr expression; - - void Accept(WfVirtualExpression::IVisitor* visitor)override; - - static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens); - }; - - class WfFormatExpression : public WfVirtualExpression, vl::reflection::Description + class WfFormatExpression : public WfVirtualCfeExpression, vl::reflection::Description { public: vl::parsing::ParsingToken value; - void Accept(WfVirtualExpression::IVisitor* visitor)override; + void Accept(WfVirtualCfeExpression::IVisitor* visitor)override; static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens); }; - class WfNewCoroutineExpression : public WfVirtualExpression, vl::reflection::Description + class WfVirtualCseExpression abstract : public WfExpression, vl::reflection::Description + { + public: + class IVisitor : public vl::reflection::IDescriptable, vl::reflection::Description + { + public: + virtual void Visit(WfBindExpression* node)=0; + virtual void Visit(WfNewCoroutineExpression* node)=0; + virtual void Visit(WfMixinCastExpression* node)=0; + virtual void Visit(WfExpectedTypeCastExpression* node)=0; + virtual void Visit(WfCoOperatorExpression* node)=0; + }; + + virtual void Accept(WfVirtualCseExpression::IVisitor* visitor)=0; + + vl::Ptr expandedExpression; + + void Accept(WfExpression::IVisitor* visitor)override; + }; + + class WfBindExpression : public WfVirtualCseExpression, vl::reflection::Description + { + public: + vl::Ptr expression; + + void Accept(WfVirtualCseExpression::IVisitor* visitor)override; + + static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens); + }; + + class WfNewCoroutineExpression : public WfVirtualCseExpression, vl::reflection::Description { public: vl::parsing::ParsingToken name; vl::Ptr statement; - void Accept(WfVirtualExpression::IVisitor* visitor)override; + void Accept(WfVirtualCseExpression::IVisitor* visitor)override; static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens); }; - class WfMixinCastExpression : public WfVirtualExpression, vl::reflection::Description + class WfMixinCastExpression : public WfVirtualCseExpression, vl::reflection::Description { public: vl::Ptr type; vl::Ptr expression; - void Accept(WfVirtualExpression::IVisitor* visitor)override; + void Accept(WfVirtualCseExpression::IVisitor* visitor)override; static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens); }; - class WfExpectedTypeCastExpression : public WfVirtualExpression, vl::reflection::Description + class WfExpectedTypeCastExpression : public WfVirtualCseExpression, vl::reflection::Description { public: WfTypeCastingStrategy strategy; vl::Ptr expression; - void Accept(WfVirtualExpression::IVisitor* visitor)override; + void Accept(WfVirtualCseExpression::IVisitor* visitor)override; static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens); }; + class WfCoOperatorExpression : public WfVirtualCseExpression, vl::reflection::Description + { + public: + vl::parsing::ParsingToken name; + + void Accept(WfVirtualCseExpression::IVisitor* visitor)override; + + static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens); + }; + class WfModuleUsingFragment abstract : public vl::parsing::ParsingTreeCustomBase, vl::reflection::Description { public: @@ -1584,11 +1763,15 @@ namespace vl DECL_TYPE_INFO(vl::workflow::WfEnumDeclaration) DECL_TYPE_INFO(vl::workflow::WfStructMember) DECL_TYPE_INFO(vl::workflow::WfStructDeclaration) - DECL_TYPE_INFO(vl::workflow::WfVirtualDeclaration) + DECL_TYPE_INFO(vl::workflow::WfVirtualCfeDeclaration) DECL_TYPE_INFO(vl::workflow::WfAPConst) DECL_TYPE_INFO(vl::workflow::WfAPObserve) DECL_TYPE_INFO(vl::workflow::WfAutoPropertyDeclaration) DECL_TYPE_INFO(vl::workflow::WfCastResultInterfaceDeclaration) + DECL_TYPE_INFO(vl::workflow::WfVirtualCseDeclaration) + DECL_TYPE_INFO(vl::workflow::WfStateInput) + DECL_TYPE_INFO(vl::workflow::WfStateDeclaration) + DECL_TYPE_INFO(vl::workflow::WfStateMachineDeclaration) DECL_TYPE_INFO(vl::workflow::WfBreakStatement) DECL_TYPE_INFO(vl::workflow::WfContinueStatement) DECL_TYPE_INFO(vl::workflow::WfReturnStatement) @@ -1598,9 +1781,10 @@ namespace vl DECL_TYPE_INFO(vl::workflow::WfWhileStatement) DECL_TYPE_INFO(vl::workflow::WfTryStatement) DECL_TYPE_INFO(vl::workflow::WfBlockStatement) + DECL_TYPE_INFO(vl::workflow::WfGotoStatement) DECL_TYPE_INFO(vl::workflow::WfVariableStatement) DECL_TYPE_INFO(vl::workflow::WfExpressionStatement) - DECL_TYPE_INFO(vl::workflow::WfVirtualStatement) + DECL_TYPE_INFO(vl::workflow::WfVirtualCseStatement) DECL_TYPE_INFO(vl::workflow::WfForEachDirection) DECL_TYPE_INFO(vl::workflow::WfForEachStatement) DECL_TYPE_INFO(vl::workflow::WfSwitchCase) @@ -1609,6 +1793,13 @@ namespace vl DECL_TYPE_INFO(vl::workflow::WfCoroutineStatement) DECL_TYPE_INFO(vl::workflow::WfCoPauseStatement) DECL_TYPE_INFO(vl::workflow::WfCoOperatorStatement) + DECL_TYPE_INFO(vl::workflow::WfStateSwitchType) + DECL_TYPE_INFO(vl::workflow::WfStateInvokeType) + DECL_TYPE_INFO(vl::workflow::WfStateMachineStatement) + DECL_TYPE_INFO(vl::workflow::WfStateSwitchArgument) + DECL_TYPE_INFO(vl::workflow::WfStateSwitchCase) + DECL_TYPE_INFO(vl::workflow::WfStateSwitchStatement) + DECL_TYPE_INFO(vl::workflow::WfStateInvokeStatement) DECL_TYPE_INFO(vl::workflow::WfThisExpression) DECL_TYPE_INFO(vl::workflow::WfTopQualifiedExpression) DECL_TYPE_INFO(vl::workflow::WfReferenceExpression) @@ -1649,12 +1840,14 @@ namespace vl DECL_TYPE_INFO(vl::workflow::WfFunctionExpression) DECL_TYPE_INFO(vl::workflow::WfNewClassExpression) DECL_TYPE_INFO(vl::workflow::WfNewInterfaceExpression) - DECL_TYPE_INFO(vl::workflow::WfVirtualExpression) - DECL_TYPE_INFO(vl::workflow::WfBindExpression) + DECL_TYPE_INFO(vl::workflow::WfVirtualCfeExpression) DECL_TYPE_INFO(vl::workflow::WfFormatExpression) + DECL_TYPE_INFO(vl::workflow::WfVirtualCseExpression) + DECL_TYPE_INFO(vl::workflow::WfBindExpression) DECL_TYPE_INFO(vl::workflow::WfNewCoroutineExpression) DECL_TYPE_INFO(vl::workflow::WfMixinCastExpression) DECL_TYPE_INFO(vl::workflow::WfExpectedTypeCastExpression) + DECL_TYPE_INFO(vl::workflow::WfCoOperatorExpression) DECL_TYPE_INFO(vl::workflow::WfModuleUsingFragment) DECL_TYPE_INFO(vl::workflow::WfModuleUsingNameFragment) DECL_TYPE_INFO(vl::workflow::WfModuleUsingWildCardFragment) @@ -1666,10 +1859,13 @@ namespace vl DECL_TYPE_INFO(vl::workflow::WfExpression::IVisitor) DECL_TYPE_INFO(vl::workflow::WfStatement::IVisitor) DECL_TYPE_INFO(vl::workflow::WfDeclaration::IVisitor) - DECL_TYPE_INFO(vl::workflow::WfVirtualDeclaration::IVisitor) - DECL_TYPE_INFO(vl::workflow::WfVirtualStatement::IVisitor) + DECL_TYPE_INFO(vl::workflow::WfVirtualCfeDeclaration::IVisitor) + DECL_TYPE_INFO(vl::workflow::WfVirtualCseDeclaration::IVisitor) + DECL_TYPE_INFO(vl::workflow::WfVirtualCseStatement::IVisitor) DECL_TYPE_INFO(vl::workflow::WfCoroutineStatement::IVisitor) - DECL_TYPE_INFO(vl::workflow::WfVirtualExpression::IVisitor) + DECL_TYPE_INFO(vl::workflow::WfStateMachineStatement::IVisitor) + DECL_TYPE_INFO(vl::workflow::WfVirtualCfeExpression::IVisitor) + DECL_TYPE_INFO(vl::workflow::WfVirtualCseExpression::IVisitor) DECL_TYPE_INFO(vl::workflow::WfModuleUsingFragment::IVisitor) BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(vl::workflow::WfType::IVisitor) @@ -1881,7 +2077,12 @@ namespace vl INVOKE_INTERFACE_PROXY(Visit, node); } - void Visit(vl::workflow::WfVirtualExpression* node)override + void Visit(vl::workflow::WfVirtualCfeExpression* node)override + { + INVOKE_INTERFACE_PROXY(Visit, node); + } + + void Visit(vl::workflow::WfVirtualCseExpression* node)override { INVOKE_INTERFACE_PROXY(Visit, node); } @@ -1934,6 +2135,11 @@ namespace vl INVOKE_INTERFACE_PROXY(Visit, node); } + void Visit(vl::workflow::WfGotoStatement* node)override + { + INVOKE_INTERFACE_PROXY(Visit, node); + } + void Visit(vl::workflow::WfVariableStatement* node)override { INVOKE_INTERFACE_PROXY(Visit, node); @@ -1944,7 +2150,7 @@ namespace vl INVOKE_INTERFACE_PROXY(Visit, node); } - void Visit(vl::workflow::WfVirtualStatement* node)override + void Visit(vl::workflow::WfVirtualCseStatement* node)override { INVOKE_INTERFACE_PROXY(Visit, node); } @@ -1954,6 +2160,11 @@ namespace vl INVOKE_INTERFACE_PROXY(Visit, node); } + void Visit(vl::workflow::WfStateMachineStatement* node)override + { + INVOKE_INTERFACE_PROXY(Visit, node); + } + END_INTERFACE_PROXY(vl::workflow::WfStatement::IVisitor) BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(vl::workflow::WfDeclaration::IVisitor) @@ -2007,14 +2218,19 @@ namespace vl INVOKE_INTERFACE_PROXY(Visit, node); } - void Visit(vl::workflow::WfVirtualDeclaration* node)override + void Visit(vl::workflow::WfVirtualCfeDeclaration* node)override + { + INVOKE_INTERFACE_PROXY(Visit, node); + } + + void Visit(vl::workflow::WfVirtualCseDeclaration* node)override { INVOKE_INTERFACE_PROXY(Visit, node); } END_INTERFACE_PROXY(vl::workflow::WfDeclaration::IVisitor) - BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(vl::workflow::WfVirtualDeclaration::IVisitor) + BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(vl::workflow::WfVirtualCfeDeclaration::IVisitor) void Visit(vl::workflow::WfAutoPropertyDeclaration* node)override { INVOKE_INTERFACE_PROXY(Visit, node); @@ -2025,9 +2241,17 @@ namespace vl INVOKE_INTERFACE_PROXY(Visit, node); } - END_INTERFACE_PROXY(vl::workflow::WfVirtualDeclaration::IVisitor) + END_INTERFACE_PROXY(vl::workflow::WfVirtualCfeDeclaration::IVisitor) - BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(vl::workflow::WfVirtualStatement::IVisitor) + BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(vl::workflow::WfVirtualCseDeclaration::IVisitor) + void Visit(vl::workflow::WfStateMachineDeclaration* node)override + { + INVOKE_INTERFACE_PROXY(Visit, node); + } + + END_INTERFACE_PROXY(vl::workflow::WfVirtualCseDeclaration::IVisitor) + + BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(vl::workflow::WfVirtualCseStatement::IVisitor) void Visit(vl::workflow::WfForEachStatement* node)override { INVOKE_INTERFACE_PROXY(Visit, node); @@ -2043,7 +2267,7 @@ namespace vl INVOKE_INTERFACE_PROXY(Visit, node); } - END_INTERFACE_PROXY(vl::workflow::WfVirtualStatement::IVisitor) + END_INTERFACE_PROXY(vl::workflow::WfVirtualCseStatement::IVisitor) BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(vl::workflow::WfCoroutineStatement::IVisitor) void Visit(vl::workflow::WfCoPauseStatement* node)override @@ -2058,17 +2282,33 @@ namespace vl END_INTERFACE_PROXY(vl::workflow::WfCoroutineStatement::IVisitor) - BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(vl::workflow::WfVirtualExpression::IVisitor) - void Visit(vl::workflow::WfBindExpression* node)override + BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(vl::workflow::WfStateMachineStatement::IVisitor) + void Visit(vl::workflow::WfStateSwitchStatement* node)override { INVOKE_INTERFACE_PROXY(Visit, node); } + void Visit(vl::workflow::WfStateInvokeStatement* node)override + { + INVOKE_INTERFACE_PROXY(Visit, node); + } + + END_INTERFACE_PROXY(vl::workflow::WfStateMachineStatement::IVisitor) + + BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(vl::workflow::WfVirtualCfeExpression::IVisitor) void Visit(vl::workflow::WfFormatExpression* node)override { INVOKE_INTERFACE_PROXY(Visit, node); } + END_INTERFACE_PROXY(vl::workflow::WfVirtualCfeExpression::IVisitor) + + BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(vl::workflow::WfVirtualCseExpression::IVisitor) + void Visit(vl::workflow::WfBindExpression* node)override + { + INVOKE_INTERFACE_PROXY(Visit, node); + } + void Visit(vl::workflow::WfNewCoroutineExpression* node)override { INVOKE_INTERFACE_PROXY(Visit, node); @@ -2084,7 +2324,12 @@ namespace vl INVOKE_INTERFACE_PROXY(Visit, node); } - END_INTERFACE_PROXY(vl::workflow::WfVirtualExpression::IVisitor) + void Visit(vl::workflow::WfCoOperatorExpression* node)override + { + INVOKE_INTERFACE_PROXY(Visit, node); + } + + END_INTERFACE_PROXY(vl::workflow::WfVirtualCseExpression::IVisitor) BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(vl::workflow::WfModuleUsingFragment::IVisitor) void Visit(vl::workflow::WfModuleUsingNameFragment* node)override @@ -2227,7 +2472,8 @@ namespace vl virtual vl::Ptr CreateField(vl::Ptr from) = 0; // Dispatch (virtual) -------------------------------- - virtual vl::Ptr Dispatch(WfVirtualExpression* node) = 0; + virtual vl::Ptr Dispatch(WfVirtualCfeExpression* node) = 0; + virtual vl::Ptr Dispatch(WfVirtualCseExpression* node) = 0; // Visitor Members ----------------------------------- void Visit(WfThisExpression* node)override; @@ -2260,7 +2506,8 @@ namespace vl void Visit(WfFunctionExpression* node)override; void Visit(WfNewClassExpression* node)override; void Visit(WfNewInterfaceExpression* node)override; - void Visit(WfVirtualExpression* node)override; + void Visit(WfVirtualCfeExpression* node)override; + void Visit(WfVirtualCseExpression* node)override; }; class StatementVisitor : public virtual VisitorBase, public WfStatement::IVisitor @@ -2278,6 +2525,7 @@ namespace vl void CopyFields(WfWhileStatement* from, WfWhileStatement* to); void CopyFields(WfTryStatement* from, WfTryStatement* to); void CopyFields(WfBlockStatement* from, WfBlockStatement* to); + void CopyFields(WfGotoStatement* from, WfGotoStatement* to); void CopyFields(WfVariableStatement* from, WfVariableStatement* to); void CopyFields(WfVariableDeclaration* from, WfVariableDeclaration* to); void CopyFields(WfDeclaration* from, WfDeclaration* to); @@ -2296,8 +2544,9 @@ namespace vl virtual vl::Ptr CreateField(vl::Ptr from) = 0; // Dispatch (virtual) -------------------------------- - virtual vl::Ptr Dispatch(WfVirtualStatement* node) = 0; + virtual vl::Ptr Dispatch(WfVirtualCseStatement* node) = 0; virtual vl::Ptr Dispatch(WfCoroutineStatement* node) = 0; + virtual vl::Ptr Dispatch(WfStateMachineStatement* node) = 0; // Visitor Members ----------------------------------- void Visit(WfBreakStatement* node)override; @@ -2309,10 +2558,12 @@ namespace vl void Visit(WfWhileStatement* node)override; void Visit(WfTryStatement* node)override; void Visit(WfBlockStatement* node)override; + void Visit(WfGotoStatement* node)override; void Visit(WfVariableStatement* node)override; void Visit(WfExpressionStatement* node)override; - void Visit(WfVirtualStatement* node)override; + void Visit(WfVirtualCseStatement* node)override; void Visit(WfCoroutineStatement* node)override; + void Visit(WfStateMachineStatement* node)override; }; class DeclarationVisitor : public virtual VisitorBase, public WfDeclaration::IVisitor @@ -2355,7 +2606,8 @@ namespace vl virtual vl::Ptr CreateField(vl::Ptr from) = 0; // Dispatch (virtual) -------------------------------- - virtual vl::Ptr Dispatch(WfVirtualDeclaration* node) = 0; + virtual vl::Ptr Dispatch(WfVirtualCfeDeclaration* node) = 0; + virtual vl::Ptr Dispatch(WfVirtualCseDeclaration* node) = 0; // Visitor Members ----------------------------------- void Visit(WfNamespaceDeclaration* node)override; @@ -2368,16 +2620,17 @@ namespace vl void Visit(WfClassDeclaration* node)override; void Visit(WfEnumDeclaration* node)override; void Visit(WfStructDeclaration* node)override; - void Visit(WfVirtualDeclaration* node)override; + void Visit(WfVirtualCfeDeclaration* node)override; + void Visit(WfVirtualCseDeclaration* node)override; }; - class VirtualDeclarationVisitor : public virtual VisitorBase, public WfVirtualDeclaration::IVisitor + class VirtualCfeDeclarationVisitor : public virtual VisitorBase, public WfVirtualCfeDeclaration::IVisitor { public: // CopyFields ---------------------------------------- void CopyFields(WfAutoPropertyDeclaration* from, WfAutoPropertyDeclaration* to); - void CopyFields(WfVirtualDeclaration* from, WfVirtualDeclaration* to); + void CopyFields(WfVirtualCfeDeclaration* from, WfVirtualCfeDeclaration* to); void CopyFields(WfDeclaration* from, WfDeclaration* to); void CopyFields(WfAttribute* from, WfAttribute* to); void CopyFields(WfClassMember* from, WfClassMember* to); @@ -2397,13 +2650,44 @@ namespace vl void Visit(WfCastResultInterfaceDeclaration* node)override; }; - class VirtualStatementVisitor : public virtual VisitorBase, public WfVirtualStatement::IVisitor + class VirtualCseDeclarationVisitor : public virtual VisitorBase, public WfVirtualCseDeclaration::IVisitor + { + public: + + // CopyFields ---------------------------------------- + void CopyFields(WfStateMachineDeclaration* from, WfStateMachineDeclaration* to); + void CopyFields(WfVirtualCseDeclaration* from, WfVirtualCseDeclaration* to); + void CopyFields(WfDeclaration* from, WfDeclaration* to); + void CopyFields(WfAttribute* from, WfAttribute* to); + void CopyFields(WfClassMember* from, WfClassMember* to); + void CopyFields(WfStateInput* from, WfStateInput* to); + void CopyFields(WfFunctionArgument* from, WfFunctionArgument* to); + void CopyFields(WfStateDeclaration* from, WfStateDeclaration* to); + + // CreateField --------------------------------------- + vl::Ptr CreateField(vl::Ptr from); + vl::Ptr CreateField(vl::Ptr from); + vl::Ptr CreateField(vl::Ptr from); + vl::Ptr CreateField(vl::Ptr from); + vl::Ptr CreateField(vl::Ptr from); + + // CreateField (virtual) ----------------------------- + virtual vl::Ptr CreateField(vl::Ptr from) = 0; + virtual vl::Ptr CreateField(vl::Ptr from) = 0; + virtual vl::Ptr CreateField(vl::Ptr from) = 0; + virtual vl::Ptr CreateField(vl::Ptr from) = 0; + + // Visitor Members ----------------------------------- + void Visit(WfStateMachineDeclaration* node)override; + }; + + class VirtualCseStatementVisitor : public virtual VisitorBase, public WfVirtualCseStatement::IVisitor { public: // CopyFields ---------------------------------------- void CopyFields(WfForEachStatement* from, WfForEachStatement* to); - void CopyFields(WfVirtualStatement* from, WfVirtualStatement* to); + void CopyFields(WfVirtualCseStatement* from, WfVirtualCseStatement* to); void CopyFields(WfStatement* from, WfStatement* to); void CopyFields(WfSwitchStatement* from, WfSwitchStatement* to); void CopyFields(WfSwitchCase* from, WfSwitchCase* to); @@ -2441,18 +2725,59 @@ namespace vl void Visit(WfCoOperatorStatement* node)override; }; - class VirtualExpressionVisitor : public virtual VisitorBase, public WfVirtualExpression::IVisitor + class StateMachineStatementVisitor : public virtual VisitorBase, public WfStateMachineStatement::IVisitor + { + public: + + // CopyFields ---------------------------------------- + void CopyFields(WfStateSwitchStatement* from, WfStateSwitchStatement* to); + void CopyFields(WfStateMachineStatement* from, WfStateMachineStatement* to); + void CopyFields(WfStatement* from, WfStatement* to); + void CopyFields(WfStateSwitchCase* from, WfStateSwitchCase* to); + void CopyFields(WfStateSwitchArgument* from, WfStateSwitchArgument* to); + void CopyFields(WfStateInvokeStatement* from, WfStateInvokeStatement* to); + + // CreateField --------------------------------------- + vl::Ptr CreateField(vl::Ptr from); + vl::Ptr CreateField(vl::Ptr from); + + // CreateField (virtual) ----------------------------- + virtual vl::Ptr CreateField(vl::Ptr from) = 0; + virtual vl::Ptr CreateField(vl::Ptr from) = 0; + + // Visitor Members ----------------------------------- + void Visit(WfStateSwitchStatement* node)override; + void Visit(WfStateInvokeStatement* node)override; + }; + + class VirtualCfeExpressionVisitor : public virtual VisitorBase, public WfVirtualCfeExpression::IVisitor + { + public: + + // CopyFields ---------------------------------------- + void CopyFields(WfFormatExpression* from, WfFormatExpression* to); + void CopyFields(WfVirtualCfeExpression* from, WfVirtualCfeExpression* to); + void CopyFields(WfExpression* from, WfExpression* to); + + // CreateField (virtual) ----------------------------- + virtual vl::Ptr CreateField(vl::Ptr from) = 0; + + // Visitor Members ----------------------------------- + void Visit(WfFormatExpression* node)override; + }; + + class VirtualCseExpressionVisitor : public virtual VisitorBase, public WfVirtualCseExpression::IVisitor { public: // CopyFields ---------------------------------------- void CopyFields(WfBindExpression* from, WfBindExpression* to); - void CopyFields(WfVirtualExpression* from, WfVirtualExpression* to); + void CopyFields(WfVirtualCseExpression* from, WfVirtualCseExpression* to); void CopyFields(WfExpression* from, WfExpression* to); - void CopyFields(WfFormatExpression* from, WfFormatExpression* to); void CopyFields(WfNewCoroutineExpression* from, WfNewCoroutineExpression* to); void CopyFields(WfMixinCastExpression* from, WfMixinCastExpression* to); void CopyFields(WfExpectedTypeCastExpression* from, WfExpectedTypeCastExpression* to); + void CopyFields(WfCoOperatorExpression* from, WfCoOperatorExpression* to); // CreateField (virtual) ----------------------------- virtual vl::Ptr CreateField(vl::Ptr from) = 0; @@ -2461,10 +2786,10 @@ namespace vl // Visitor Members ----------------------------------- void Visit(WfBindExpression* node)override; - void Visit(WfFormatExpression* node)override; void Visit(WfNewCoroutineExpression* node)override; void Visit(WfMixinCastExpression* node)override; void Visit(WfExpectedTypeCastExpression* node)override; + void Visit(WfCoOperatorExpression* node)override; }; class ModuleUsingFragmentVisitor : public virtual VisitorBase, public WfModuleUsingFragment::IVisitor @@ -2486,10 +2811,13 @@ namespace vl , public ExpressionVisitor , public StatementVisitor , public DeclarationVisitor - , public VirtualDeclarationVisitor - , public VirtualStatementVisitor + , public VirtualCfeDeclarationVisitor + , public VirtualCseDeclarationVisitor + , public VirtualCseStatementVisitor , public CoroutineStatementVisitor - , public VirtualExpressionVisitor + , public StateMachineStatementVisitor + , public VirtualCfeExpressionVisitor + , public VirtualCseExpressionVisitor , public ModuleUsingFragmentVisitor { public: @@ -2512,10 +2840,13 @@ namespace vl vl::Ptr CreateField(vl::Ptr from); // Dispatch (virtual) -------------------------------- - vl::Ptr Dispatch(WfVirtualExpression* node); - vl::Ptr Dispatch(WfVirtualStatement* node); + vl::Ptr Dispatch(WfVirtualCfeExpression* node); + vl::Ptr Dispatch(WfVirtualCseExpression* node); + vl::Ptr Dispatch(WfVirtualCseStatement* node); vl::Ptr Dispatch(WfCoroutineStatement* node); - vl::Ptr Dispatch(WfVirtualDeclaration* node); + vl::Ptr Dispatch(WfStateMachineStatement* node); + vl::Ptr Dispatch(WfVirtualCfeDeclaration* node); + vl::Ptr Dispatch(WfVirtualCseDeclaration* node); }; } } @@ -2566,7 +2897,8 @@ namespace vl public: // Dispatch (virtual) -------------------------------- - virtual void Dispatch(WfVirtualExpression* node) = 0; + virtual void Dispatch(WfVirtualCfeExpression* node) = 0; + virtual void Dispatch(WfVirtualCseExpression* node) = 0; // Visitor Members ----------------------------------- void Visit(WfThisExpression* node)override; @@ -2599,7 +2931,8 @@ namespace vl void Visit(WfFunctionExpression* node)override; void Visit(WfNewClassExpression* node)override; void Visit(WfNewInterfaceExpression* node)override; - void Visit(WfVirtualExpression* node)override; + void Visit(WfVirtualCfeExpression* node)override; + void Visit(WfVirtualCseExpression* node)override; }; class StatementVisitor : public Object, public WfStatement::IVisitor @@ -2607,8 +2940,9 @@ namespace vl public: // Dispatch (virtual) -------------------------------- - virtual void Dispatch(WfVirtualStatement* node) = 0; + virtual void Dispatch(WfVirtualCseStatement* node) = 0; virtual void Dispatch(WfCoroutineStatement* node) = 0; + virtual void Dispatch(WfStateMachineStatement* node) = 0; // Visitor Members ----------------------------------- void Visit(WfBreakStatement* node)override; @@ -2620,10 +2954,12 @@ namespace vl void Visit(WfWhileStatement* node)override; void Visit(WfTryStatement* node)override; void Visit(WfBlockStatement* node)override; + void Visit(WfGotoStatement* node)override; void Visit(WfVariableStatement* node)override; void Visit(WfExpressionStatement* node)override; - void Visit(WfVirtualStatement* node)override; + void Visit(WfVirtualCseStatement* node)override; void Visit(WfCoroutineStatement* node)override; + void Visit(WfStateMachineStatement* node)override; }; class DeclarationVisitor : public Object, public WfDeclaration::IVisitor @@ -2631,7 +2967,8 @@ namespace vl public: // Dispatch (virtual) -------------------------------- - virtual void Dispatch(WfVirtualDeclaration* node) = 0; + virtual void Dispatch(WfVirtualCfeDeclaration* node) = 0; + virtual void Dispatch(WfVirtualCseDeclaration* node) = 0; // Visitor Members ----------------------------------- void Visit(WfNamespaceDeclaration* node)override; @@ -2644,10 +2981,11 @@ namespace vl void Visit(WfClassDeclaration* node)override; void Visit(WfEnumDeclaration* node)override; void Visit(WfStructDeclaration* node)override; - void Visit(WfVirtualDeclaration* node)override; + void Visit(WfVirtualCfeDeclaration* node)override; + void Visit(WfVirtualCseDeclaration* node)override; }; - class VirtualDeclarationVisitor : public Object, public WfVirtualDeclaration::IVisitor + class VirtualCfeDeclarationVisitor : public Object, public WfVirtualCfeDeclaration::IVisitor { public: @@ -2656,7 +2994,15 @@ namespace vl void Visit(WfCastResultInterfaceDeclaration* node)override; }; - class VirtualStatementVisitor : public Object, public WfVirtualStatement::IVisitor + class VirtualCseDeclarationVisitor : public Object, public WfVirtualCseDeclaration::IVisitor + { + public: + + // Visitor Members ----------------------------------- + void Visit(WfStateMachineDeclaration* node)override; + }; + + class VirtualCseStatementVisitor : public Object, public WfVirtualCseStatement::IVisitor { public: @@ -2675,16 +3021,33 @@ namespace vl void Visit(WfCoOperatorStatement* node)override; }; - class VirtualExpressionVisitor : public Object, public WfVirtualExpression::IVisitor + class StateMachineStatementVisitor : public Object, public WfStateMachineStatement::IVisitor + { + public: + + // Visitor Members ----------------------------------- + void Visit(WfStateSwitchStatement* node)override; + void Visit(WfStateInvokeStatement* node)override; + }; + + class VirtualCfeExpressionVisitor : public Object, public WfVirtualCfeExpression::IVisitor + { + public: + + // Visitor Members ----------------------------------- + void Visit(WfFormatExpression* node)override; + }; + + class VirtualCseExpressionVisitor : public Object, public WfVirtualCseExpression::IVisitor { public: // Visitor Members ----------------------------------- void Visit(WfBindExpression* node)override; - void Visit(WfFormatExpression* node)override; void Visit(WfNewCoroutineExpression* node)override; void Visit(WfMixinCastExpression* node)override; void Visit(WfExpectedTypeCastExpression* node)override; + void Visit(WfCoOperatorExpression* node)override; }; class ModuleUsingFragmentVisitor : public Object, public WfModuleUsingFragment::IVisitor @@ -2876,7 +3239,8 @@ namespace vl virtual void VisitField(WfDeclaration* node) = 0; // Dispatch (virtual) -------------------------------- - virtual void Dispatch(WfVirtualExpression* node) = 0; + virtual void Dispatch(WfVirtualCfeExpression* node) = 0; + virtual void Dispatch(WfVirtualCseExpression* node) = 0; // Visitor Members ----------------------------------- void Visit(WfThisExpression* node)override; @@ -2909,7 +3273,8 @@ namespace vl void Visit(WfFunctionExpression* node)override; void Visit(WfNewClassExpression* node)override; void Visit(WfNewInterfaceExpression* node)override; - void Visit(WfVirtualExpression* node)override; + void Visit(WfVirtualCfeExpression* node)override; + void Visit(WfVirtualCseExpression* node)override; }; class StatementVisitor : public Object, public WfStatement::IVisitor @@ -2929,6 +3294,7 @@ namespace vl virtual void Traverse(WfWhileStatement* node); virtual void Traverse(WfTryStatement* node); virtual void Traverse(WfBlockStatement* node); + virtual void Traverse(WfGotoStatement* node); virtual void Traverse(WfVariableStatement* node); virtual void Traverse(WfVariableDeclaration* node); virtual void Traverse(WfDeclaration* node); @@ -2947,8 +3313,9 @@ namespace vl virtual void VisitField(WfStatement* node) = 0; // Dispatch (virtual) -------------------------------- - virtual void Dispatch(WfVirtualStatement* node) = 0; + virtual void Dispatch(WfVirtualCseStatement* node) = 0; virtual void Dispatch(WfCoroutineStatement* node) = 0; + virtual void Dispatch(WfStateMachineStatement* node) = 0; // Visitor Members ----------------------------------- void Visit(WfBreakStatement* node)override; @@ -2960,10 +3327,12 @@ namespace vl void Visit(WfWhileStatement* node)override; void Visit(WfTryStatement* node)override; void Visit(WfBlockStatement* node)override; + void Visit(WfGotoStatement* node)override; void Visit(WfVariableStatement* node)override; void Visit(WfExpressionStatement* node)override; - void Visit(WfVirtualStatement* node)override; + void Visit(WfVirtualCseStatement* node)override; void Visit(WfCoroutineStatement* node)override; + void Visit(WfStateMachineStatement* node)override; }; class DeclarationVisitor : public Object, public WfDeclaration::IVisitor @@ -3008,7 +3377,8 @@ namespace vl virtual void VisitField(WfStatement* node) = 0; // Dispatch (virtual) -------------------------------- - virtual void Dispatch(WfVirtualDeclaration* node) = 0; + virtual void Dispatch(WfVirtualCfeDeclaration* node) = 0; + virtual void Dispatch(WfVirtualCseDeclaration* node) = 0; // Visitor Members ----------------------------------- void Visit(WfNamespaceDeclaration* node)override; @@ -3021,10 +3391,11 @@ namespace vl void Visit(WfClassDeclaration* node)override; void Visit(WfEnumDeclaration* node)override; void Visit(WfStructDeclaration* node)override; - void Visit(WfVirtualDeclaration* node)override; + void Visit(WfVirtualCfeDeclaration* node)override; + void Visit(WfVirtualCseDeclaration* node)override; }; - class VirtualDeclarationVisitor : public Object, public WfVirtualDeclaration::IVisitor + class VirtualCfeDeclarationVisitor : public Object, public WfVirtualCfeDeclaration::IVisitor { public: @@ -3032,7 +3403,7 @@ namespace vl virtual void Traverse(vl::parsing::ParsingToken& token); virtual void Traverse(vl::parsing::ParsingTreeCustomBase* node); virtual void Traverse(WfAutoPropertyDeclaration* node); - virtual void Traverse(WfVirtualDeclaration* node); + virtual void Traverse(WfVirtualCfeDeclaration* node); virtual void Traverse(WfDeclaration* node); virtual void Traverse(WfAttribute* node); virtual void Traverse(WfClassMember* node); @@ -3052,7 +3423,40 @@ namespace vl void Visit(WfCastResultInterfaceDeclaration* node)override; }; - class VirtualStatementVisitor : public Object, public WfVirtualStatement::IVisitor + class VirtualCseDeclarationVisitor : public Object, public WfVirtualCseDeclaration::IVisitor + { + public: + + // Traverse ------------------------------------------ + virtual void Traverse(vl::parsing::ParsingToken& token); + virtual void Traverse(vl::parsing::ParsingTreeCustomBase* node); + virtual void Traverse(WfStateMachineDeclaration* node); + virtual void Traverse(WfVirtualCseDeclaration* node); + virtual void Traverse(WfDeclaration* node); + virtual void Traverse(WfAttribute* node); + virtual void Traverse(WfClassMember* node); + virtual void Traverse(WfStateInput* node); + virtual void Traverse(WfFunctionArgument* node); + virtual void Traverse(WfStateDeclaration* node); + + // VisitField ---------------------------------------- + void VisitField(WfAttribute* node); + void VisitField(WfClassMember* node); + void VisitField(WfStateInput* node); + void VisitField(WfFunctionArgument* node); + void VisitField(WfStateDeclaration* node); + + // VisitField (virtual) ------------------------------ + virtual void VisitField(WfExpression* node) = 0; + virtual void VisitField(WfDeclaration* node) = 0; + virtual void VisitField(WfType* node) = 0; + virtual void VisitField(WfStatement* node) = 0; + + // Visitor Members ----------------------------------- + void Visit(WfStateMachineDeclaration* node)override; + }; + + class VirtualCseStatementVisitor : public Object, public WfVirtualCseStatement::IVisitor { public: @@ -3060,7 +3464,7 @@ namespace vl virtual void Traverse(vl::parsing::ParsingToken& token); virtual void Traverse(vl::parsing::ParsingTreeCustomBase* node); virtual void Traverse(WfForEachStatement* node); - virtual void Traverse(WfVirtualStatement* node); + virtual void Traverse(WfVirtualCseStatement* node); virtual void Traverse(WfStatement* node); virtual void Traverse(WfSwitchStatement* node); virtual void Traverse(WfSwitchCase* node); @@ -3100,7 +3504,52 @@ namespace vl void Visit(WfCoOperatorStatement* node)override; }; - class VirtualExpressionVisitor : public Object, public WfVirtualExpression::IVisitor + class StateMachineStatementVisitor : public Object, public WfStateMachineStatement::IVisitor + { + public: + + // Traverse ------------------------------------------ + virtual void Traverse(vl::parsing::ParsingToken& token); + virtual void Traverse(vl::parsing::ParsingTreeCustomBase* node); + virtual void Traverse(WfStateSwitchStatement* node); + virtual void Traverse(WfStateMachineStatement* node); + virtual void Traverse(WfStatement* node); + virtual void Traverse(WfStateSwitchCase* node); + virtual void Traverse(WfStateSwitchArgument* node); + virtual void Traverse(WfStateInvokeStatement* node); + + // VisitField ---------------------------------------- + void VisitField(WfStateSwitchCase* node); + void VisitField(WfStateSwitchArgument* node); + + // VisitField (virtual) ------------------------------ + virtual void VisitField(WfStatement* node) = 0; + virtual void VisitField(WfExpression* node) = 0; + + // Visitor Members ----------------------------------- + void Visit(WfStateSwitchStatement* node)override; + void Visit(WfStateInvokeStatement* node)override; + }; + + class VirtualCfeExpressionVisitor : public Object, public WfVirtualCfeExpression::IVisitor + { + public: + + // Traverse ------------------------------------------ + virtual void Traverse(vl::parsing::ParsingToken& token); + virtual void Traverse(vl::parsing::ParsingTreeCustomBase* node); + virtual void Traverse(WfFormatExpression* node); + virtual void Traverse(WfVirtualCfeExpression* node); + virtual void Traverse(WfExpression* node); + + // VisitField (virtual) ------------------------------ + virtual void VisitField(WfExpression* node) = 0; + + // Visitor Members ----------------------------------- + void Visit(WfFormatExpression* node)override; + }; + + class VirtualCseExpressionVisitor : public Object, public WfVirtualCseExpression::IVisitor { public: @@ -3108,12 +3557,12 @@ namespace vl virtual void Traverse(vl::parsing::ParsingToken& token); virtual void Traverse(vl::parsing::ParsingTreeCustomBase* node); virtual void Traverse(WfBindExpression* node); - virtual void Traverse(WfVirtualExpression* node); + virtual void Traverse(WfVirtualCseExpression* node); virtual void Traverse(WfExpression* node); - virtual void Traverse(WfFormatExpression* node); virtual void Traverse(WfNewCoroutineExpression* node); virtual void Traverse(WfMixinCastExpression* node); virtual void Traverse(WfExpectedTypeCastExpression* node); + virtual void Traverse(WfCoOperatorExpression* node); // VisitField (virtual) ------------------------------ virtual void VisitField(WfExpression* node) = 0; @@ -3122,10 +3571,10 @@ namespace vl // Visitor Members ----------------------------------- void Visit(WfBindExpression* node)override; - void Visit(WfFormatExpression* node)override; void Visit(WfNewCoroutineExpression* node)override; void Visit(WfMixinCastExpression* node)override; void Visit(WfExpectedTypeCastExpression* node)override; + void Visit(WfCoOperatorExpression* node)override; }; class ModuleUsingFragmentVisitor : public Object, public WfModuleUsingFragment::IVisitor @@ -3149,10 +3598,13 @@ namespace vl , public ExpressionVisitor , public StatementVisitor , public DeclarationVisitor - , public VirtualDeclarationVisitor - , public VirtualStatementVisitor + , public VirtualCfeDeclarationVisitor + , public VirtualCseDeclarationVisitor + , public VirtualCseStatementVisitor , public CoroutineStatementVisitor - , public VirtualExpressionVisitor + , public StateMachineStatementVisitor + , public VirtualCfeExpressionVisitor + , public VirtualCseExpressionVisitor , public ModuleUsingFragmentVisitor { public: @@ -3177,10 +3629,13 @@ namespace vl void VisitField(WfModuleUsingFragment* node); // Dispatch (virtual) -------------------------------- - void Dispatch(WfVirtualExpression* node); - void Dispatch(WfVirtualStatement* node); + void Dispatch(WfVirtualCfeExpression* node); + void Dispatch(WfVirtualCseExpression* node); + void Dispatch(WfVirtualCseStatement* node); void Dispatch(WfCoroutineStatement* node); - void Dispatch(WfVirtualDeclaration* node); + void Dispatch(WfStateMachineStatement* node); + void Dispatch(WfVirtualCfeDeclaration* node); + void Dispatch(WfVirtualCseDeclaration* node); }; } } @@ -3429,6 +3884,13 @@ Scope Manager collections::List> ctorArgumentSymbols; }; + struct WfStateMachineInfo + { + Ptr createCoroutineMethod; + collections::Dictionary inputIds; + collections::Dictionary stateIds; + }; + /// Workflow compiler. class WfLexicalScopeManager : public Object { @@ -3448,12 +3910,16 @@ Scope Manager typedef collections::Dictionary, ResolveExpressionResult> CoOperatorResolvingMap; typedef collections::Dictionary> LambdaCaptureMap; typedef collections::Dictionary InterfaceMethodImplementationMap; + typedef collections::Dictionary, parsing::ParsingTreeCustomBase*> DeclarationSourceMap; typedef collections::Dictionary, Ptr> DeclarationTypeMap; typedef collections::Dictionary, Ptr> DeclarationMemberInfoMap; typedef collections::Pair BaseConstructorCallKey; typedef collections::Pair BaseConstructorCallValue; typedef collections::Dictionary BaseConstructorCallResolvingMap; + typedef collections::Dictionary, Ptr> StateInputMethodMap; + typedef collections::Dictionary, Ptr> StateArgumentFieldMap; + typedef collections::Dictionary, Ptr> StateMachineInfoMap; typedef collections::Pair AttributeKey; typedef collections::Dictionary> AttributeTypeMap; @@ -3475,14 +3941,20 @@ Scope Manager NodeScopeMap nodeScopes; // the nearest scope for a AST ExpressionResolvingMap expressionResolvings; // the resolving result for the expression - CoOperatorResolvingMap coOperatorResolvings; // the resolving result for the co-operator statement - CoOperatorResolvingMap coProviderResolvings; // the resolving result for the co-provider statement - CoOperatorResolvingMap coCastResultResolvings; // the resolving result for the co-operator statement's type casting + ExpressionResolvingMap coNewCoroutineResolvings; // the coroutine type for the WfNewCoroutineExpression (e.g. AsyncCoroutine) + CoOperatorResolvingMap coOperatorResolvings; // the method for the co-operator statement (e.g. AwaitAndRead) + CoOperatorResolvingMap coProviderResolvings; // the constructor for the co-provider statement (e.g. AsyncCoroutine::Create) + CoOperatorResolvingMap coCastResultResolvings; // the method for the co-operator's type casting (e.g. IStringAsync::CastResult) LambdaCaptureMap lambdaCaptures; // all captured symbols in a lambda AST InterfaceMethodImplementationMap interfaceMethodImpls; // the IMethodInfo* that implemented by a function + DeclarationSourceMap declaractionScopeSources; // the source used to build the scope for a declaration DeclarationTypeMap declarationTypes; // ITypeDescriptor* for type declaration DeclarationMemberInfoMap declarationMemberInfos; // IMemberInfo* for type description BaseConstructorCallResolvingMap baseConstructorCallResolvings; // all base constructor call resolvings + StateInputMethodMap stateInputMethods; // IMethodInfo* for state input + StateArgumentFieldMap stateInputArguments; // IPropertyInfo* for state input argument temporary cache + StateArgumentFieldMap stateDeclArguments; // IPropertyInfo* for state argument temporary cache + StateMachineInfoMap stateMachineInfos; // members of state machine /// Create a Workflow compiler. /// The workflow parser table. It can be retrived from [M:vl.workflow.WfLoadTable]. @@ -3578,6 +4050,7 @@ Structure Analyzing WfCoProviderStatement* currentCoProviderStatement = nullptr; WfNewCoroutineExpression* currentNewCoroutineExpression = nullptr; WfCoPauseStatement* currentCoPauseStatement = nullptr; + WfStateDeclaration* currentStateDeclaration = nullptr; ValidateStructureContext(); }; @@ -3589,11 +4062,11 @@ Structure Analyzing BaseType, }; - extern void SetCodeRange(Ptr node, parsing::ParsingTextRange codeRange); - extern void SetCodeRange(Ptr node, parsing::ParsingTextRange codeRange); - extern void SetCodeRange(Ptr node, parsing::ParsingTextRange codeRange); - extern void SetCodeRange(Ptr node, parsing::ParsingTextRange codeRange); - extern void SetCodeRange(Ptr node, parsing::ParsingTextRange codeRange); + extern void SetCodeRange(Ptr node, parsing::ParsingTextRange codeRange, bool asOffset = false); + extern void SetCodeRange(Ptr node, parsing::ParsingTextRange codeRange, bool asOffset = false); + extern void SetCodeRange(Ptr node, parsing::ParsingTextRange codeRange, bool asOffset = false); + extern void SetCodeRange(Ptr node, parsing::ParsingTextRange codeRange, bool asOffset = false); + extern void SetCodeRange(Ptr node, parsing::ParsingTextRange codeRange, bool asOffset = false); extern void ContextFreeModuleDesugar(WfLexicalScopeManager* manager, Ptr module); extern void ContextFreeDeclarationDesugar(WfLexicalScopeManager* manager, Ptr declaration); @@ -3635,6 +4108,9 @@ Scope Analyzing Semantic Analyzing ***********************************************************************/ + extern reflection::description::IMethodInfo* FindInterfaceConstructor(reflection::description::ITypeDescriptor* type); + extern Ptr SelectFunction(WfLexicalScopeManager* manager, parsing::ParsingTreeCustomBase* node, Ptr functionExpression, collections::List& functions, collections::List>& arguments, vint& selectedFunctionIndex); + extern void ValidateModuleSemantic(WfLexicalScopeManager* manager, Ptr module); extern void ValidateClassMemberSemantic(WfLexicalScopeManager* manager, Ptr td, Ptr classDecl, Ptr memberDecl); extern void ValidateDeclarationSemantic(WfLexicalScopeManager* manager, Ptr declaration); @@ -3653,18 +4129,40 @@ Semantic Analyzing Expanding Virtual Nodes ***********************************************************************/ + class CopyWithExpandVirtualVisitor : public copy_visitor::ModuleVisitor + { + private: + bool expandVirtualAst; + + void Expand(collections::List>& decls); + public: + CopyWithExpandVirtualVisitor(bool _expandVirtualAst); + + Ptr Dispatch(WfVirtualCfeExpression* node)override; + Ptr Dispatch(WfVirtualCseExpression* node)override; + Ptr Dispatch(WfVirtualCseStatement* node)override; + + void Visit(WfNamespaceDeclaration* node)override; + void Visit(WfClassDeclaration* node)override; + void Visit(WfNewInterfaceExpression* node)override; + }; + + extern Ptr SearchUntilNonVirtualStatement(Ptr statement); extern Ptr CopyType(Ptr type); - extern Ptr CopyExpression(Ptr expression); - extern Ptr CopyStatement(Ptr statement); - extern Ptr CopyDeclaration(Ptr declaration); + extern Ptr CopyExpression(Ptr expression, bool expandVirtualExprStat); + extern Ptr CopyStatement(Ptr statement, bool expandVirtualExprStat); + extern Ptr CopyDeclaration(Ptr declaration, bool expandVirtualExprStat); + extern Ptr CopyModule(Ptr module, bool expandVirtualExprStat); extern Ptr CreateDefaultValue(reflection::description::ITypeInfo* elementType); extern void ExpandBindExpression(WfLexicalScopeManager* manager, WfBindExpression* node); extern void ExpandNewCoroutineExpression(WfLexicalScopeManager* manager, WfNewCoroutineExpression* node); + extern void ExpandCoOperatorExpression(WfLexicalScopeManager* manager, WfCoOperatorExpression* node); extern void ExpandMixinCastExpression(WfLexicalScopeManager* manager, WfMixinCastExpression* node); extern void ExpandSwitchStatement(WfLexicalScopeManager* manager, WfSwitchStatement* node); extern void ExpandForEachStatement(WfLexicalScopeManager* manager, WfForEachStatement* node); extern void ExpandCoProviderStatement(WfLexicalScopeManager* manager, WfCoProviderStatement* node); + extern void ExpandStateMachine(WfLexicalScopeManager* manager, WfStateMachineDeclaration* node); /*********************************************************************** Error Messages @@ -3748,22 +4246,36 @@ Error Messages static Ptr CannotReturnExpression(WfStatement* node); static Ptr WrongCoPause(WfStatement* node); static Ptr WrongCoOperator(WfStatement* node); + static Ptr WrongCoOperator(WfExpression* node); static Ptr CoProviderNotExists(WfCoProviderStatement* node, collections::List& candidates); static Ptr CoOperatorNotExists(WfReturnStatement* node, reflection::description::ITypeInfo* type); static Ptr CoOperatorNotExists(WfCoOperatorStatement* node, reflection::description::ITypeInfo* type); + static Ptr CoOperatorNotExists(WfCoOperatorExpression* node, reflection::description::ITypeInfo* type); static Ptr CoOperatorCannotResolveResultType(WfCoOperatorStatement* node, collections::List& types); static Ptr CoProviderCreateNotExists(WfCoProviderStatement* node, reflection::description::ITypeInfo* type); static Ptr CoProviderCreateAndRunNotExists(WfCoProviderStatement* node, reflection::description::ITypeInfo* type); + static Ptr GotoLabelNotExists(WfGotoStatement* node); + static Ptr TooManyGotoLabel(WfGotoStatement* node); + static Ptr WrongStateSwitchStatement(WfStateSwitchStatement* node); + static Ptr WrongStateInvokeStatement(WfStateInvokeStatement* node); + static Ptr StateInputNotExists(WfStateSwitchCase* node); + static Ptr StateSwitchArgumentCountNotMatch(WfStateSwitchCase* node); + static Ptr StateNotExists(WfStateInvokeStatement* node); + static Ptr StateArgumentCountNotMatch(WfStateInvokeStatement* node); // D: Declaration error static Ptr FunctionShouldHaveName(WfDeclaration* node); static Ptr FunctionShouldHaveImplementation(WfDeclaration* node); static Ptr InterfaceMethodShouldNotHaveImplementation(WfDeclaration* node); static Ptr DuplicatedDeclaration(WfDeclaration* node, const WString& firstDeclarationCategory); + static Ptr DuplicatedDeclaration(WfStateMachineDeclaration* node); static Ptr DuplicatedSymbol(WfDeclaration* node, Ptr symbol); static Ptr DuplicatedSymbol(WfFunctionArgument* node, Ptr symbol); static Ptr DuplicatedSymbol(WfStatement* node, Ptr symbol); static Ptr DuplicatedSymbol(WfExpression* node, Ptr symbol); + static Ptr DuplicatedSymbol(WfStateInput* node, Ptr symbol); + static Ptr DuplicatedSymbol(WfStateDeclaration* node, Ptr symbol); + static Ptr DuplicatedSymbol(WfStateSwitchArgument* node, Ptr symbol); static Ptr InterfaceMethodNotImplemented(WfNewInterfaceExpression* node, reflection::description::IMethodInfo* method); static Ptr InterfaceMethodNotFound(WfFunctionDeclaration* node, reflection::description::ITypeInfo* interfaceType, reflection::description::ITypeInfo* methodType); static Ptr CannotPickOverloadedInterfaceMethods(WfExpression* node, collections::List& results); @@ -3773,6 +4285,7 @@ Error Messages static Ptr WrongDeclaration(WfConstructorDeclaration* node); static Ptr WrongDeclaration(WfDestructorDeclaration* node); static Ptr WrongDeclaration(WfAutoPropertyDeclaration* node); + static Ptr WrongDeclaration(WfStateMachineDeclaration* node); static Ptr WrongDeclarationInInterfaceConstructor(WfDeclaration* node); static Ptr EnumValuesNotConsecutiveFromZero(WfEnumDeclaration* node); static Ptr FlagValuesNotConsecutiveFromZero(WfEnumDeclaration* node); @@ -3783,6 +4296,8 @@ Error Messages static Ptr DuplicatedStructMember(WfStructMember* node, WfStructDeclaration* owner); static Ptr AttributeNotExists(WfAttribute* node); static Ptr AttributeMissValue(WfAttribute* node); + static Ptr StateMachineClassNotInheritFromStateMachine(WfClassDeclaration* node); + static Ptr MissingDefaultState(WfStateMachineDeclaration* node); // E: Module error static Ptr WrongUsingPathWildCard(WfModuleUsingPath* node); @@ -3892,6 +4407,7 @@ Code Generation Function, // contains the whole function Loop, // contains all loops TryCatch, // contains try and catch, not finally + Block, // contains labeled blocks }; class WfCodegenScopeContext : public Object @@ -3903,6 +4419,7 @@ Code Generation WfCodegenScopeType type = WfCodegenScopeType::Function; InstructionIndexList continueInstructions; InstructionIndexList breakInstructions; + WString name; InstructionList exitInstructions; RangeMap instructionCodeMappingBeforeCodegen; @@ -3926,8 +4443,8 @@ Code Generation WfCodegenFunctionContext(); Ptr GetCurrentScopeContext(); - Ptr GetCurrentScopeContext(WfCodegenScopeType type); - Ptr PushScopeContext(WfCodegenScopeType type); + Ptr GetCurrentScopeContext(WfCodegenScopeType type, const WString& name = WString::Empty); + Ptr PushScopeContext(WfCodegenScopeType type, const WString& name = WString::Empty); void PopScopeContext(); }; @@ -4031,6 +4548,7 @@ namespace vl __vwsnt_# : Temporary type __vwsne_# : Temporary variable (not for lambda) __vwsnb_# : Temporary block + __vwnsl_#_LABEL_NAME : Goto label */ class WfCppConfig : public Object @@ -4087,7 +4605,9 @@ namespace vl void WriteFunctionBody(stream::StreamWriter& writer, Ptr expr, const WString& prefix, ITypeInfo* expectedType); void WriteFunctionBody(stream::StreamWriter& writer, Ptr stat, const WString& prefix, ITypeInfo* expectedType); + WString ConvertNameInternal(const WString& name, const WString& specialNameCategory, bool alwaysUseCategory); WString ConvertName(const WString& name); + WString ConvertName(const WString& name, const WString& specialNameCategory); WString ConvertFullName(const WString& fullName, WString delimiter = L"::"); WString ConvertFunctionType(IMethodInfo* methodInfo, WString name = WString::Empty); WString ConvertFunctionType(ITypeInfo* typeInfo); @@ -4168,9 +4688,12 @@ WfCppConfig::Write class FunctionRecord : public Object { + using LabelMap = collections::Dictionary; public: vint exprCounter = 0; vint blockCounter = 0; + vint labelCounter = 0; + LabelMap labelNames; }; extern void GenerateExpression(WfCppConfig* config, stream::StreamWriter& writer, Ptr node, reflection::description::ITypeInfo* expectedType, bool useReturnValue = true); diff --git a/Import/VlppWorkflowLibrary.cpp b/Import/VlppWorkflowLibrary.cpp new file mode 100644 index 00000000..c91c51fc --- /dev/null +++ b/Import/VlppWorkflowLibrary.cpp @@ -0,0 +1,1067 @@ +/*********************************************************************** +THIS FILE IS AUTOMATICALLY GENERATED. DO NOT MODIFY +DEVELOPER: Zihan Chen(vczh) +***********************************************************************/ +#include "VlppWorkflowLibrary.h" + +/*********************************************************************** +.\WFLIBRARYCPPHELPER.CPP +***********************************************************************/ + +namespace vl +{ + namespace __vwsn + { + +/*********************************************************************** +CreateList +***********************************************************************/ + + CreateList::CreateList() + :list(IValueList::Create()) + { + } + + CreateList::CreateList(Ptr _list) + :list(_list) + { + } + +/*********************************************************************** +CreateObservableList +***********************************************************************/ + + CreateObservableList::CreateObservableList() + :list(IValueObservableList::Create()) + { + } + + CreateObservableList::CreateObservableList(Ptr _list) + :list(_list) + { + } + +/*********************************************************************** +CreateDictionary +***********************************************************************/ + + CreateDictionary::CreateDictionary() + :dictionary(IValueDictionary::Create()) + { + } + + CreateDictionary::CreateDictionary(Ptr _dictionary) + :dictionary(_dictionary) + { + } + } +} + +/*********************************************************************** +.\WFLIBRARYPREDEFINED.CPP +***********************************************************************/ + +namespace vl +{ + using namespace collections; + + namespace reflection + { + namespace description + { + +/*********************************************************************** +CoroutineResult +***********************************************************************/ + + Value CoroutineResult::GetResult() + { + return result; + } + + void CoroutineResult::SetResult(const Value& value) + { + result = value; + } + + Ptr CoroutineResult::GetFailure() + { + return failure; + } + + void CoroutineResult::SetFailure(Ptr value) + { + failure = value; + } + +/*********************************************************************** +EnumerableCoroutine +***********************************************************************/ + + class CoroutineEnumerator : public Object, public virtual EnumerableCoroutine::IImpl, public Description + { + protected: + EnumerableCoroutine::Creator creator; + Ptr coroutine; + Value current; + vint index = -1; + Ptr joining; + + public: + CoroutineEnumerator(const EnumerableCoroutine::Creator& _creator) + :creator(_creator) + { + } + + Value GetCurrent()override + { + return current; + } + + vint GetIndex()override + { + return index; + } + + bool Next()override + { + if (!coroutine) + { + coroutine = creator(this); + } + + while (coroutine->GetStatus() == CoroutineStatus::Waiting) + { + if (joining) + { + if (joining->Next()) + { + current = joining->GetCurrent(); + index++; + return true; + } + else + { + joining = nullptr; + } + } + + coroutine->Resume(true, nullptr); + if (coroutine->GetStatus() != CoroutineStatus::Waiting) + { + break; + } + + if (!joining) + { + index++; + return true; + } + } + return false; + } + + void OnYield(const Value& value)override + { + current = value; + joining = nullptr; + } + + void OnJoin(Ptr value)override + { + if (!value) + { + throw Exception(L"Cannot join a null collection."); + } + current = Value(); + joining = value->CreateEnumerator(); + } + }; + + class CoroutineEnumerable : public Object, public virtual IValueEnumerable, public Description + { + protected: + EnumerableCoroutine::Creator creator; + + public: + CoroutineEnumerable(const EnumerableCoroutine::Creator& _creator) + :creator(_creator) + { + } + + Ptr CreateEnumerator()override + { + return new CoroutineEnumerator(creator); + } + }; + + void EnumerableCoroutine::YieldAndPause(IImpl* impl, const Value& value) + { + impl->OnYield(value); + } + + void EnumerableCoroutine::JoinAndPause(IImpl* impl, Ptr value) + { + impl->OnJoin(value); + } + + void EnumerableCoroutine::ReturnAndExit(IImpl* impl) + { + } + + Ptr EnumerableCoroutine::Create(const Creator& creator) + { + return new CoroutineEnumerable(creator); + } + +/*********************************************************************** +AsyncContext +***********************************************************************/ + + AsyncContext::AsyncContext(const Value& _context) + :context(_context) + { + } + + AsyncContext::~AsyncContext() + { + } + + bool AsyncContext::IsCancelled() + { + SPIN_LOCK(lock) + { + return cancelled; + } + CHECK_FAIL(L"Not reachable"); + } + + bool AsyncContext::Cancel() + { + SPIN_LOCK(lock) + { + if (cancelled) return false; + cancelled = true; + return true; + } + CHECK_FAIL(L"Not reachable"); + } + + const description::Value& AsyncContext::GetContext() + { + SPIN_LOCK(lock) + { + return context; + } + CHECK_FAIL(L"Not reachable"); + } + + void AsyncContext::SetContext(const description::Value& value) + { + SPIN_LOCK(lock) + { + context = value; + } + } + +/*********************************************************************** +DelayAsync +***********************************************************************/ + + class DelayAsync : public Object, public virtual IAsync, public Description + { + protected: + SpinLock lock; + vint milliseconds; + AsyncStatus status = AsyncStatus::Ready; + + public: + DelayAsync(vint _milliseconds) + :milliseconds(_milliseconds) + { + } + + AsyncStatus GetStatus()override + { + return status; + } + + bool Execute(const Func)>& _callback, Ptr context)override + { + SPIN_LOCK(lock) + { + if (status != AsyncStatus::Ready) return false; + status = AsyncStatus::Executing; + IAsyncScheduler::GetSchedulerForCurrentThread()->DelayExecute([async = Ptr(this), callback = _callback]() + { + if (callback) + { + callback(nullptr); + } + }, milliseconds); + } + return true; + } + }; + + Ptr IAsync::Delay(vint milliseconds) + { + return new DelayAsync(milliseconds); + } + +/*********************************************************************** +FutureAndPromiseAsync +***********************************************************************/ + + class FutureAndPromiseAsync : public virtual IFuture, public virtual IPromise, public Description + { + public: + SpinLock lock; + AsyncStatus status = AsyncStatus::Ready; + Ptr cr; + Func)> callback; + + void ExecuteCallbackAndClear() + { + status = AsyncStatus::Stopped; + if (callback) + { + callback(cr); + } + cr = nullptr; + callback = {}; + } + + template + bool Send(F f) + { + SPIN_LOCK(lock) + { + if (status == AsyncStatus::Stopped || cr) return false; + cr = MakePtr(); + f(); + if (status == AsyncStatus::Executing) + { + ExecuteCallbackAndClear(); + } + } + return true; + } + + AsyncStatus GetStatus()override + { + return status; + } + + bool Execute(const Func)>& _callback, Ptr context)override + { + SPIN_LOCK(lock) + { + if (status != AsyncStatus::Ready) return false; + callback = _callback; + if (cr) + { + ExecuteCallbackAndClear(); + } + else + { + status = AsyncStatus::Executing; + } + } + return true; + } + + Ptr GetPromise()override + { + return this; + } + + bool SendResult(const Value& result)override + { + return Send([=]() + { + cr->SetResult(result); + }); + } + + bool SendFailure(Ptr failure)override + { + return Send([=]() + { + cr->SetFailure(failure); + }); + } + }; + + Ptr IFuture::Create() + { + return new FutureAndPromiseAsync(); + } + +/*********************************************************************** +IAsyncScheduler +***********************************************************************/ + + class AsyncSchedulerMap + { + public: + Dictionary> schedulers; + Ptr defaultScheduler; + }; + + AsyncSchedulerMap* asyncSchedulerMap = nullptr; + SpinLock asyncSchedulerLock; + +#define ENSURE_ASYNC_SCHEDULER_MAP\ + if (!asyncSchedulerMap) asyncSchedulerMap = new AsyncSchedulerMap; + +#define DISPOSE_ASYNC_SCHEDULER_MAP_IF_NECESSARY\ + if (asyncSchedulerMap->schedulers.Count() == 0 && !asyncSchedulerMap->defaultScheduler)\ + {\ + delete asyncSchedulerMap;\ + asyncSchedulerMap = nullptr;\ + }\ + + void IAsyncScheduler::RegisterDefaultScheduler(Ptr scheduler) + { + SPIN_LOCK(asyncSchedulerLock) + { + ENSURE_ASYNC_SCHEDULER_MAP + CHECK_ERROR(!asyncSchedulerMap->defaultScheduler, L"IAsyncScheduler::RegisterDefaultScheduler()#A default scheduler has already been registered."); + asyncSchedulerMap->defaultScheduler = scheduler; + } + } + + void IAsyncScheduler::RegisterSchedulerForCurrentThread(Ptr scheduler) + { + SPIN_LOCK(asyncSchedulerLock) + { + ENSURE_ASYNC_SCHEDULER_MAP + CHECK_ERROR(!asyncSchedulerMap->schedulers.Keys().Contains(Thread::GetCurrentThreadId()), L"IAsyncScheduler::RegisterDefaultScheduler()#A scheduler for this thread has already been registered."); + asyncSchedulerMap->schedulers.Add(Thread::GetCurrentThreadId(), scheduler); + } + } + + Ptr IAsyncScheduler::UnregisterDefaultScheduler() + { + Ptr scheduler; + SPIN_LOCK(asyncSchedulerLock) + { + if (asyncSchedulerMap) + { + scheduler = asyncSchedulerMap->defaultScheduler; + asyncSchedulerMap->defaultScheduler = nullptr; + DISPOSE_ASYNC_SCHEDULER_MAP_IF_NECESSARY + } + } + return scheduler; + } + + Ptr IAsyncScheduler::UnregisterSchedulerForCurrentThread() + { + Ptr scheduler; + SPIN_LOCK(asyncSchedulerLock) + { + if (asyncSchedulerMap) + { + vint index = asyncSchedulerMap->schedulers.Keys().IndexOf(Thread::GetCurrentThreadId()); + if (index != -1) + { + scheduler = asyncSchedulerMap->schedulers.Values()[index]; + asyncSchedulerMap->schedulers.Remove(Thread::GetCurrentThreadId()); + } + DISPOSE_ASYNC_SCHEDULER_MAP_IF_NECESSARY + } + } + return scheduler; + } + +#undef ENSURE_ASYNC_SCHEDULER_MAP +#undef DISPOSE_ASYNC_SCHEDULER_MAP_IF_NECESSARY + + Ptr IAsyncScheduler::GetSchedulerForCurrentThread() + { + Ptr scheduler; + SPIN_LOCK(asyncSchedulerLock) + { + CHECK_ERROR(asyncSchedulerMap != nullptr, L"IAsyncScheduler::GetSchedulerForCurrentThread()#There is no scheduler registered for the current thread."); + vint index = asyncSchedulerMap->schedulers.Keys().IndexOf(Thread::GetCurrentThreadId()); + if (index != -1) + { + scheduler = asyncSchedulerMap->schedulers.Values()[index]; + } + else if (asyncSchedulerMap->defaultScheduler) + { + scheduler = asyncSchedulerMap->defaultScheduler; + } + else + { + CHECK_FAIL(L"IAsyncScheduler::GetSchedulerForCurrentThread()#There is no scheduler registered for the current thread."); + } + } + return scheduler; + } + +/*********************************************************************** +AsyncCoroutine +***********************************************************************/ + + class CoroutineAsync : public Object, public virtual AsyncCoroutine::IImpl, public Description + { + protected: + Ptr coroutine; + AsyncCoroutine::Creator creator; + Ptr scheduler; + Func)> callback; + Ptr context; + Value result; + + public: + CoroutineAsync(AsyncCoroutine::Creator _creator) + :creator(_creator) + { + } + + AsyncStatus GetStatus()override + { + if (!coroutine) + { + return AsyncStatus::Ready; + } + else if (coroutine->GetStatus() != CoroutineStatus::Stopped) + { + return AsyncStatus::Executing; + } + else + { + return AsyncStatus::Stopped; + } + } + + bool Execute(const Func)>& _callback, Ptr _context)override + { + if (coroutine) return false; + scheduler = IAsyncScheduler::GetSchedulerForCurrentThread(); + callback = _callback; + context = _context; + coroutine = creator(this); + OnContinue(nullptr); + return true; + } + + Ptr GetScheduler()override + { + return scheduler; + } + + Ptr GetContext()override + { + if (!context) + { + context = new AsyncContext; + } + return context; + } + + void OnContinue(Ptr output)override + { + scheduler->Execute([async = Ptr(this), output]() + { + async->coroutine->Resume(false, output); + if (async->coroutine->GetStatus() == CoroutineStatus::Stopped && async->callback) + { + auto result = MakePtr(); + if (async->coroutine->GetFailure()) + { + result->SetFailure(async->coroutine->GetFailure()); + } + else + { + result->SetResult(async->result); + } + async->callback(result); + } + }); + } + + void OnReturn(const Value& value)override + { + result = value; + } + }; + + void AsyncCoroutine::AwaitAndRead(IImpl* impl, Ptr value) + { + value->Execute([async = Ptr(impl)](auto output) + { + async->OnContinue(output); + }, impl->GetContext()); + } + + void AsyncCoroutine::ReturnAndExit(IImpl* impl, const Value& value) + { + impl->OnReturn(value); + } + + Ptr AsyncCoroutine::QueryContext(IImpl* impl) + { + return impl->GetContext(); + } + + Ptr AsyncCoroutine::Create(const Creator& creator) + { + return new CoroutineAsync(creator); + } + void AsyncCoroutine::CreateAndRun(const Creator& creator) + { + MakePtr(creator)->Execute( + [](Ptr cr) + { + if (cr->GetFailure()) + { +#pragma push_macro("GetMessage") +#if defined GetMessage +#undef GetMessage +#endif + throw Exception(cr->GetFailure()->GetMessage()); +#pragma pop_macro("GetMessage") + } + }, nullptr); + } + +/*********************************************************************** +StateMachine +***********************************************************************/ + + void StateMachine::ResumeStateMachine() + { + Ptr previousResult; + while (true) + { + if (stateMachineCoroutine == nullptr) + { + if (!stateMachineInitialized) + { + throw Exception(L"The state machine has not been initialized."); + } + if (stateMachineStopped) + { + throw Exception(L"The state machine has been stopped."); + } + stateMachineStopped = true; + + if (previousResult) + { + if (auto failure = previousResult->GetFailure()) + { + throw Exception(failure->GetMessage()); + } + } + break; + } + else if (stateMachineCoroutine->GetStatus() != CoroutineStatus::Stopped) + { + auto currentCoroutine = stateMachineCoroutine; + currentCoroutine->Resume(false, previousResult); + if (stateMachineCoroutine == currentCoroutine) + { + // wait for input + break; + } + else if (currentCoroutine->GetStatus() == CoroutineStatus::Stopped) + { + // leave a state machine + previousResult = MakePtr(); + if (auto failure = currentCoroutine->GetFailure()) + { + previousResult->SetFailure(failure); + } + } + else + { + // enter a state machine + } + } + } + } + + StateMachine::StateMachine() + { + } + + StateMachine::~StateMachine() + { + FinalizeAggregation(); + } + + CoroutineStatus StateMachine::GetStateMachineStatus() + { + if (stateMachineStopped) + { + return CoroutineStatus::Stopped; + } + else if (stateMachineCoroutine) + { + if (stateMachineCoroutine->GetStatus() == CoroutineStatus::Waiting) + { + return CoroutineStatus::Waiting; + } + else + { + return CoroutineStatus::Executing; + } + } + else + { + return CoroutineStatus::Waiting; + } + } + +/*********************************************************************** +Libraries +***********************************************************************/ + + namespace system_sys + { + class ReverseEnumerable : public Object, public IValueEnumerable + { + protected: + Ptr list; + + class Enumerator : public Object, public IValueEnumerator + { + protected: + Ptr list; + vint index; + + public: + Enumerator(Ptr _list) + :list(_list), index(_list->GetCount()) + { + } + + Value GetCurrent() + { + return list->Get(index); + } + + vint GetIndex() + { + return list->GetCount() - 1 - index; + } + + bool Next() + { + if (index <= 0) return false; + index--; + return true; + } + }; + + public: + ReverseEnumerable(Ptr _list) + :list(_list) + { + } + + Ptr CreateEnumerator()override + { + return MakePtr(list); + } + }; + } + + Ptr Sys::ReverseEnumerable(Ptr value) + { + auto list = value.Cast(); + if (!list) + { + list = IValueList::Create(GetLazyList(value)); + } + return new system_sys::ReverseEnumerable(list); + } + +#define DEFINE_COMPARE(TYPE)\ + vint Sys::Compare(TYPE a, TYPE b)\ + {\ + auto result = TypedValueSerializerProvider::Compare(a, b);\ + switch (result)\ + {\ + case IBoxedValue::Smaller: return -1;\ + case IBoxedValue::Greater: return 1;\ + case IBoxedValue::Equal: return 0;\ + default:\ + CHECK_FAIL(L"Unexpected compare result.");\ + }\ + }\ + + REFLECTION_PREDEFINED_PRIMITIVE_TYPES(DEFINE_COMPARE) + DEFINE_COMPARE(DateTime) +#undef DEFINE_COMPARE + +#define DEFINE_MINMAX(TYPE)\ + TYPE Math::Min(TYPE a, TYPE b)\ + {\ + return Sys::Compare(a, b) < 0 ? a : b;\ + }\ + TYPE Math::Max(TYPE a, TYPE b)\ + {\ + return Sys::Compare(a, b) > 0 ? a : b;\ + }\ + + REFLECTION_PREDEFINED_PRIMITIVE_TYPES(DEFINE_MINMAX) + DEFINE_MINMAX(DateTime) +#undef DEFINE_MINMAX + } + } +} + + +/*********************************************************************** +.\WFLIBRARYREFLECTION.CPP +***********************************************************************/ +#include +#include + +namespace vl +{ + using namespace collections; + using namespace regex; + + namespace reflection + { + namespace description + { + +/*********************************************************************** +TypeName +***********************************************************************/ + +#ifndef VCZH_DEBUG_NO_REFLECTION + + IMPL_TYPE_INFO_RENAME(vl::reflection::description::Sys, system::Sys) + IMPL_TYPE_INFO_RENAME(vl::reflection::description::Math, system::Math) + IMPL_TYPE_INFO_RENAME(vl::reflection::description::CoroutineStatus, system::CoroutineStatus) + IMPL_TYPE_INFO_RENAME(vl::reflection::description::CoroutineResult, system::CoroutineResult) + IMPL_TYPE_INFO_RENAME(vl::reflection::description::ICoroutine, system::Coroutine) + IMPL_TYPE_INFO_RENAME(vl::reflection::description::EnumerableCoroutine::IImpl, system::EnumerableCoroutine::IImpl) + IMPL_TYPE_INFO_RENAME(vl::reflection::description::EnumerableCoroutine, system::EnumerableCoroutine) + IMPL_TYPE_INFO_RENAME(vl::reflection::description::AsyncStatus, system::AsyncStatus) + IMPL_TYPE_INFO_RENAME(vl::reflection::description::AsyncContext, system::AsyncContext) + IMPL_TYPE_INFO_RENAME(vl::reflection::description::IAsync, system::Async) + IMPL_TYPE_INFO_RENAME(vl::reflection::description::IPromise, system::Promise) + IMPL_TYPE_INFO_RENAME(vl::reflection::description::IFuture, system::Future) + IMPL_TYPE_INFO_RENAME(vl::reflection::description::IAsyncScheduler, system::AsyncScheduler) + IMPL_TYPE_INFO_RENAME(vl::reflection::description::AsyncCoroutine::IImpl, system::AsyncCoroutine::IImpl) + IMPL_TYPE_INFO_RENAME(vl::reflection::description::AsyncCoroutine, system::AsyncCoroutine) + IMPL_TYPE_INFO_RENAME(vl::reflection::description::StateMachine, system::StateMachine) + +#endif + +/*********************************************************************** +WfLoadLibraryTypes +***********************************************************************/ + +#ifndef VCZH_DEBUG_NO_REFLECTION + +#define _ , + + template<> + struct CustomTypeDescriptorSelector + { + public: + class CustomTypeDescriptorImpl : public TypeDescriptorImpl + { + public: + CustomTypeDescriptorImpl() + :TypeDescriptorImpl(TypeDescriptorFlags::Class, &TypeInfo::content) + { + Description::SetAssociatedTypeDescroptor(this); + } + ~CustomTypeDescriptorImpl() + { + Description::SetAssociatedTypeDescroptor(0); + } + protected: + void LoadInternal()override + { + } + }; + }; + + BEGIN_CLASS_MEMBER(Sys) + CLASS_MEMBER_STATIC_METHOD(Len, { L"value" }) + CLASS_MEMBER_STATIC_METHOD(Left, { L"value" _ L"length" }) + CLASS_MEMBER_STATIC_METHOD(Right, { L"value" _ L"length" }) + CLASS_MEMBER_STATIC_METHOD(Mid, { L"value" _ L"start" _ L"length" }) + CLASS_MEMBER_STATIC_METHOD(Find, { L"value" _ L"substr" }) + CLASS_MEMBER_STATIC_METHOD(ReverseEnumerable, { L"value" }) +#pragma push_macro("CompareString") +#if defined CompareString +#undef CompareString +#endif +#define DEFINE_COMPARE(TYPE) CLASS_MEMBER_STATIC_METHOD_OVERLOAD(Compare, PROTECT_PARAMETERS({L"a" _ L"b"}), vint(*)(TYPE, TYPE)) + REFLECTION_PREDEFINED_PRIMITIVE_TYPES(DEFINE_COMPARE) + DEFINE_COMPARE(DateTime) +#undef DEFINE_COMPARE +#pragma pop_macro("CompareString") + END_CLASS_MEMBER(Sys) + + BEGIN_CLASS_MEMBER(Math) + CLASS_MEMBER_STATIC_METHOD_OVERLOAD(Abs, { L"value" }, vint8_t(*)(vint8_t)) + CLASS_MEMBER_STATIC_METHOD_OVERLOAD(Abs, { L"value" }, vint16_t(*)(vint16_t)) + CLASS_MEMBER_STATIC_METHOD_OVERLOAD(Abs, { L"value" }, vint32_t(*)(vint32_t)) + CLASS_MEMBER_STATIC_METHOD_OVERLOAD(Abs, { L"value" }, vint64_t(*)(vint64_t)) + CLASS_MEMBER_STATIC_METHOD_OVERLOAD(Abs, { L"value" }, float(*)(float)) + CLASS_MEMBER_STATIC_METHOD_OVERLOAD(Abs, { L"value" }, double(*)(double)) + +#define DEFINE_MINMAX(TYPE)\ + CLASS_MEMBER_STATIC_METHOD_OVERLOAD(Min, PROTECT_PARAMETERS({L"a" _ L"b"}), TYPE(*)(TYPE, TYPE))\ + CLASS_MEMBER_STATIC_METHOD_OVERLOAD(Max, PROTECT_PARAMETERS({L"a" _ L"b"}), TYPE(*)(TYPE, TYPE))\ + + REFLECTION_PREDEFINED_PRIMITIVE_TYPES(DEFINE_MINMAX) + DEFINE_MINMAX(DateTime) +#undef DEFINE_MINMAX + + CLASS_MEMBER_STATIC_METHOD(Sin, { L"value" }) + CLASS_MEMBER_STATIC_METHOD(Cos, { L"value" }) + CLASS_MEMBER_STATIC_METHOD(Tan, { L"value" }) + CLASS_MEMBER_STATIC_METHOD(ASin, { L"value" }) + CLASS_MEMBER_STATIC_METHOD(ACos, { L"value" }) + CLASS_MEMBER_STATIC_METHOD(ATan, { L"value" }) + CLASS_MEMBER_STATIC_METHOD(ATan2, { L"x" _ L"y" }) + + CLASS_MEMBER_STATIC_METHOD(Exp, { L"value" }) + CLASS_MEMBER_STATIC_METHOD(LogN, { L"value" }) + CLASS_MEMBER_STATIC_METHOD(Log10, { L"value" }) + CLASS_MEMBER_STATIC_METHOD(Log, { L"value" _ L"base" }) + CLASS_MEMBER_STATIC_METHOD(Pow, { L"value" _ L"power" }) + CLASS_MEMBER_STATIC_METHOD(Ceil, { L"value" }) + CLASS_MEMBER_STATIC_METHOD(Floor, { L"value" }) + CLASS_MEMBER_STATIC_METHOD(Round, { L"value" }) + CLASS_MEMBER_STATIC_METHOD(Trunc, { L"value" }) + END_CLASS_MEMBER(Math) + + BEGIN_ENUM_ITEM(CoroutineStatus) + ENUM_CLASS_ITEM(Waiting) + ENUM_CLASS_ITEM(Executing) + ENUM_CLASS_ITEM(Stopped) + END_ENUM_ITEM(CoroutineStatus) + + BEGIN_INTERFACE_MEMBER(ICoroutine) + CLASS_MEMBER_METHOD(Resume, { L"raiseException" _ L"output" }) + CLASS_MEMBER_PROPERTY_READONLY_FAST(Failure) + CLASS_MEMBER_PROPERTY_READONLY_FAST(Status) + END_INTERFACE_MEMBER(ICoroutine) + + BEGIN_CLASS_MEMBER(CoroutineResult) + CLASS_MEMBER_CONSTRUCTOR(Ptr(), NO_PARAMETER) + CLASS_MEMBER_PROPERTY_FAST(Result) + CLASS_MEMBER_PROPERTY_FAST(Failure) + END_CLASS_MEMBER(CoroutineResult) + + BEGIN_INTERFACE_MEMBER_NOPROXY(EnumerableCoroutine::IImpl) + CLASS_MEMBER_BASE(IValueEnumerator) + END_INTERFACE_MEMBER(EnumerableCoroutine::IImpl) + + BEGIN_CLASS_MEMBER(EnumerableCoroutine) + CLASS_MEMBER_STATIC_METHOD(YieldAndPause, { L"impl" _ L"value" }) + CLASS_MEMBER_STATIC_METHOD(JoinAndPause, { L"impl" _ L"value" }) + CLASS_MEMBER_STATIC_METHOD(ReturnAndExit, { L"impl" }) + CLASS_MEMBER_STATIC_METHOD(Create, { L"creator" }) + END_CLASS_MEMBER(EnumerableCoroutine) + + BEGIN_ENUM_ITEM(AsyncStatus) + ENUM_CLASS_ITEM(Ready) + ENUM_CLASS_ITEM(Executing) + ENUM_CLASS_ITEM(Stopped) + END_ENUM_ITEM(AsyncStatus) + + BEGIN_CLASS_MEMBER(AsyncContext) + CLASS_MEMBER_CONSTRUCTOR(Ptr(const Value&), {L"context"}) + CLASS_MEMBER_METHOD(IsCancelled, NO_PARAMETER) + CLASS_MEMBER_METHOD(Cancel, NO_PARAMETER) + CLASS_MEMBER_PROPERTY_FAST(Context) + END_CLASS_MEMBER(AsyncContext) + + BEGIN_INTERFACE_MEMBER(IAsync) + CLASS_MEMBER_PROPERTY_READONLY_FAST(Status) + CLASS_MEMBER_METHOD(Execute, { L"callback" _ L"context" }) + CLASS_MEMBER_STATIC_METHOD(Delay, { L"milliseconds" }) + END_INTERFACE_MEMBER(IAsync) + + BEGIN_INTERFACE_MEMBER_NOPROXY(IPromise) + CLASS_MEMBER_METHOD(SendResult, { L"result" }) + CLASS_MEMBER_METHOD(SendFailure, { L"failure" }) + END_INTERFACE_MEMBER(IPromise) + + BEGIN_INTERFACE_MEMBER_NOPROXY(IFuture) + CLASS_MEMBER_BASE(IAsync) + CLASS_MEMBER_BASE(IPromise) + CLASS_MEMBER_PROPERTY_READONLY_FAST(Promise) + CLASS_MEMBER_STATIC_METHOD(Create, NO_PARAMETER) + END_INTERFACE_MEMBER(IFuture) + + BEGIN_INTERFACE_MEMBER_NOPROXY(IAsyncScheduler) + CLASS_MEMBER_METHOD(Execute, { L"callback" }) + CLASS_MEMBER_METHOD(ExecuteInBackground, { L"callback" }) + CLASS_MEMBER_METHOD(DelayExecute, { L"callback" _ L"milliseconds" }) + CLASS_MEMBER_STATIC_METHOD(GetSchedulerForCurrentThread, NO_PARAMETER) + END_INTERFACE_MEMBER(IAsyncScheduler) + + BEGIN_INTERFACE_MEMBER_NOPROXY(AsyncCoroutine::IImpl) + CLASS_MEMBER_BASE(IAsync) + END_INTERFACE_MEMBER(AsyncCoroutine::IImpl) + + BEGIN_CLASS_MEMBER(AsyncCoroutine) + CLASS_MEMBER_STATIC_METHOD(AwaitAndRead, { L"impl" _ L"value" }) + CLASS_MEMBER_STATIC_METHOD(ReturnAndExit, { L"impl" _ L"value"}) + CLASS_MEMBER_STATIC_METHOD(QueryContext, { L"impl" }) + CLASS_MEMBER_STATIC_METHOD(Create, { L"creator" }) + CLASS_MEMBER_STATIC_METHOD(CreateAndRun, { L"creator" }) + END_CLASS_MEMBER(AsyncCoroutine) + + BEGIN_CLASS_MEMBER(StateMachine) + CLASS_MEMBER_FIELD(stateMachineInitialized) + CLASS_MEMBER_FIELD(stateMachineStopped) + CLASS_MEMBER_FIELD(stateMachineInput) + CLASS_MEMBER_FIELD(stateMachineCoroutine) + + CLASS_MEMBER_CONSTRUCTOR(Ptr(), NO_PARAMETER) + CLASS_MEMBER_METHOD(ResumeStateMachine, NO_PARAMETER) + + CLASS_MEMBER_PROPERTY_READONLY_FAST(StateMachineStatus) + END_CLASS_MEMBER(StateMachine) +#undef _ + + class WfLibraryTypeLoader : public Object, public ITypeLoader + { + public: + void Load(ITypeManager* manager)override + { + WORKFLOW_LIBRARY_TYPES(ADD_TYPE_INFO) + } + + void Unload(ITypeManager* manager)override + { + } + }; + +#endif + + bool WfLoadLibraryTypes() + { +#ifndef VCZH_DEBUG_NO_REFLECTION + ITypeManager* manager = GetGlobalTypeManager(); + if (manager) + { + Ptr loader = new WfLibraryTypeLoader; + return manager->AddTypeLoader(loader); + } +#endif + return false; + } + } + } +} + diff --git a/Import/VlppWorkflowLibrary.h b/Import/VlppWorkflowLibrary.h new file mode 100644 index 00000000..bde9de13 --- /dev/null +++ b/Import/VlppWorkflowLibrary.h @@ -0,0 +1,719 @@ +/*********************************************************************** +THIS FILE IS AUTOMATICALLY GENERATED. DO NOT MODIFY +DEVELOPER: Zihan Chen(vczh) +***********************************************************************/ +#include "Vlpp.h" + +/*********************************************************************** +.\WFLIBRARYCPPHELPER.H +***********************************************************************/ +/*********************************************************************** +Vczh Library++ 3.0 +Developer: Zihan Chen(vczh) +Framework::Reflection + +Interfaces: +***********************************************************************/ + +#ifndef VCZH_WORKFLOW_LIBRARY_CPPLIBRARY +#define VCZH_WORKFLOW_LIBRARY_CPPLIBRARY + + +namespace vl +{ + namespace __vwsn + { + template + struct RunOnExit + { + T* function; + + RunOnExit(T* _function) + :function(_function) + { + } + + ~RunOnExit() + { + function->operator()(); + } + }; + + template + T* This(T* thisValue) + { + CHECK_ERROR(thisValue != nullptr, L"The this pointer cannot be null."); + return thisValue; + } + + template + T* Ensure(T* pointer) + { + CHECK_ERROR(pointer != nullptr, L"The pointer cannot be null."); + return pointer; + } + + template + Ptr& Ensure(Ptr& pointer) + { + CHECK_ERROR(pointer != nullptr, L"The pointer cannot be null."); + return pointer; + } + + template + Ptr Ensure(Ptr&& pointer) + { + CHECK_ERROR(pointer != nullptr, L"The pointer cannot be null."); + return MoveValue(pointer); + } + + template + Nullable Ensure(Nullable&& nullable) + { + CHECK_ERROR(nullable, L"The pointer cannot be null."); + return MoveValue(nullable); + } + + template + Nullable& Ensure(Nullable& nullable) + { + CHECK_ERROR(nullable, L"The pointer cannot be null."); + return nullable; + } + + template + WString ToString(const T& value) + { + using Type = typename RemoveCVR::Type; + WString str; + CHECK_ERROR(reflection::description::TypedValueSerializerProvider::Serialize(value, str), L"Failed to serialize."); + return str; + } + + template + T Parse(const WString& str) + { + using Type = typename RemoveCVR::Type; + T value; + CHECK_ERROR(reflection::description::TypedValueSerializerProvider::Deserialize(str, value), L"Failed to serialize."); + return value; + } + + template + struct NullableCastHelper + { + static Nullable Cast(Nullable nullable) + { + return Nullable(static_cast(nullable.Value())); + } + }; + + template + struct NullableCastHelper + { + static Nullable Cast(Nullable nullable) + { + return Nullable(ToString(nullable.Value())); + } + }; + + template + struct NullableCastHelper + { + static Nullable Cast(Nullable nullable) + { + return Nullable(Parse(nullable.Value())); + } + }; + + template + Nullable NullableCast(Nullable nullable) + { + if (!nullable) return Nullable(); + return NullableCastHelper::Cast(nullable); + } + + template + TTo* RawPtrCast(TFrom* pointer) + { + if (!pointer) return nullptr; + return pointer->template SafeAggregationCast(); + } + + template + Ptr SharedPtrCast(TFrom* pointer) + { + if (!pointer) return nullptr; + return pointer->template SafeAggregationCast(); + } + + template + reflection::description::Value Box(const T& value) + { + using Type = typename RemoveCVR::Type; + return reflection::description::BoxParameter(const_cast(value)); + } + + template + T Unbox(const reflection::description::Value& value) + { + using Type = typename RemoveCVR::Type; + T result; + reflection::description::UnboxParameter(value, result); + return result; + } + + template + struct UnboxWeakHelper + { + }; + + template + struct UnboxWeakHelper + { + static T* Unbox(const reflection::description::Value& value) + { + if (value.IsNull()) return nullptr; + return value.GetRawPtr()->SafeAggregationCast(); + } + }; + + template + struct UnboxWeakHelper> + { + static Ptr Unbox(const reflection::description::Value& value) + { + if (value.IsNull()) return nullptr; + return value.GetRawPtr()->SafeAggregationCast(); + } + }; + + template + struct UnboxWeakHelper> + { + static Nullable Unbox(const reflection::description::Value& value) + { + if (value.IsNull()) return Nullable(); + auto boxed = value.GetBoxedValue().Cast>(); + if (!boxed) return Nullable(); + return Nullable(boxed->value); + } + }; + + template + T UnboxWeak(const reflection::description::Value& value) + { + using Type = typename RemoveCVR::Type; + return UnboxWeakHelper::Unbox(value); + } + + template + collections::LazyList Range(T begin, T end) + { + return collections::Range(begin, end - begin); + } + + template + bool InSet(const T& value, const collections::LazyList& collection) + { + return collection.Any([&](const T& element) {return element == value; }); + } + + template + bool InSet(const T& value, Ptr collection) + { + return InSet(value, reflection::description::GetLazyList(collection)); + } + + template + Ptr UnboxCollection(U& value) + { + auto boxedValue = reflection::description::BoxParameter(value); + Ptr result; + reflection::description::UnboxParameter>(boxedValue, result); + return result; + } + + template + Ptr UnboxCollection(const collections::LazyList& value) + { + auto boxedValue = reflection::description::BoxParameter>(const_cast&>(value)); + Ptr result; + reflection::description::UnboxParameter>(boxedValue, result); + return result; + } + + struct CreateList + { + using IValueList = reflection::description::IValueList; + + Ptr list; + + CreateList(); + CreateList(Ptr _list); + + template + CreateList Add(const T& value) + { + list->Add(Box(value)); + return{ list }; + } + }; + + struct CreateObservableList + { + using IValueObservableList = reflection::description::IValueObservableList; + + Ptr list; + + CreateObservableList(); + CreateObservableList(Ptr _list); + + template + CreateObservableList Add(const T& value) + { + list->Add(Box(value)); + return{ list }; + } + }; + + struct CreateDictionary + { + using IValueDictionary = reflection::description::IValueDictionary; + + Ptr dictionary; + + CreateDictionary(); + CreateDictionary(Ptr _dictionary); + + template + CreateDictionary Add(const K& key, const V& value) + { + dictionary->Set(Box(key), Box(value)); + return{ dictionary }; + } + }; + + template + struct EventHelper + { + }; + + template + Ptr EventAttach(T& e, typename EventHelper::Handler handler) + { + return EventHelper::Attach(e, handler); + } + + template + bool EventDetach(T& e, Ptr handler) + { + return EventHelper::Detach(e, handler); + } + + template + decltype(auto) EventInvoke(T& e) + { + return EventHelper::Invoke(e); + } + + template + struct EventHelper> + { + using Handler = const Func&; + + class EventHandlerImpl : public Object, public reflection::description::IEventHandler + { + public: + Ptr handler; + + EventHandlerImpl(Ptr _handler) + :handler(_handler) + { + } + + bool IsAttached()override + { + return handler->IsAttached(); + } + }; + + static Ptr Attach(Event& e, Handler handler) + { + return MakePtr(e.Add(handler)); + } + + static bool Detach(Event& e, Ptr handler) + { + auto impl = handler.Cast(); + if (!impl) return false; + return e.Remove(impl->handler); + } + + static Event& Invoke(Event& e) + { + return e; + } + }; + } +} + +#endif + +/*********************************************************************** +.\WFLIBRARYPREDEFINED.H +***********************************************************************/ +/*********************************************************************** +Vczh Library++ 3.0 +Developer: Zihan Chen(vczh) +Framework::Reflection + +Interfaces: +***********************************************************************/ + +#ifndef VCZH_WORKFLOW_LIBRARY_PREDEFINED +#define VCZH_WORKFLOW_LIBRARY_PREDEFINED + +#include + +namespace vl +{ + namespace reflection + { + namespace description + { + +/*********************************************************************** +Coroutine +***********************************************************************/ + + enum class CoroutineStatus + { + Waiting, + Executing, + Stopped, + }; + + class CoroutineResult : public virtual IDescriptable, public Description + { + protected: + Value result; + Ptr failure; + + public: + Value GetResult(); + void SetResult(const Value& value); + Ptr GetFailure(); + void SetFailure(Ptr value); + }; + + class ICoroutine : public virtual IDescriptable, public Description + { + public: + virtual void Resume(bool raiseException, Ptr output) = 0; + virtual Ptr GetFailure() = 0; + virtual CoroutineStatus GetStatus() = 0; + }; + +/*********************************************************************** +Coroutine (Enumerable) +***********************************************************************/ + + class EnumerableCoroutine : public Object, public Description + { + public: + class IImpl : public virtual IValueEnumerator, public Description + { + public: + virtual void OnYield(const Value& value) = 0; + virtual void OnJoin(Ptr value) = 0; + }; + + typedef Func(IImpl*)> Creator; + + static void YieldAndPause(IImpl* impl, const Value& value); + static void JoinAndPause(IImpl* impl, Ptr value); + static void ReturnAndExit(IImpl* impl); + static Ptr Create(const Creator& creator); + }; + +/*********************************************************************** +Coroutine (Async) +***********************************************************************/ + + enum class AsyncStatus + { + Ready, + Executing, + Stopped, + }; + + class AsyncContext : public virtual IDescriptable, public Description + { + protected: + SpinLock lock; + bool cancelled = false; + Value context; + + public: + AsyncContext(const Value& _context = {}); + ~AsyncContext(); + + bool IsCancelled(); + bool Cancel(); + + const description::Value& GetContext(); + void SetContext(const description::Value& value); + }; + + class IAsync : public virtual IDescriptable, public Description + { + public: + virtual AsyncStatus GetStatus() = 0; + virtual bool Execute(const Func)>& callback, Ptr context = nullptr) = 0; + + static Ptr Delay(vint milliseconds); + }; + + class IPromise : public virtual IDescriptable, public Description + { + public: + virtual bool SendResult(const Value& result) = 0; + virtual bool SendFailure(Ptr failure) = 0; + }; + + class IFuture : public virtual IAsync, public Description + { + public: + virtual Ptr GetPromise() = 0; + + static Ptr Create(); + }; + + class IAsyncScheduler : public virtual IDescriptable, public Description + { + public: + virtual void Execute(const Func& callback) = 0; + virtual void ExecuteInBackground(const Func& callback) = 0; + virtual void DelayExecute(const Func& callback, vint milliseconds) = 0; + + static void RegisterDefaultScheduler(Ptr scheduler); + static void RegisterSchedulerForCurrentThread(Ptr scheduler); + static Ptr UnregisterDefaultScheduler(); + static Ptr UnregisterSchedulerForCurrentThread(); + static Ptr GetSchedulerForCurrentThread(); + }; + + class AsyncCoroutine : public Object, public Description + { + public: + class IImpl : public virtual IAsync, public Description + { + public: + virtual Ptr GetScheduler() = 0; + virtual Ptr GetContext() = 0; + virtual void OnContinue(Ptr output) = 0; + virtual void OnReturn(const Value& value) = 0; + }; + + typedef Func(IImpl*)> Creator; + + static void AwaitAndRead(IImpl* impl, Ptr value); + static void ReturnAndExit(IImpl* impl, const Value& value); + static Ptr QueryContext(IImpl* impl); + static Ptr Create(const Creator& creator); + static void CreateAndRun(const Creator& creator); + }; + +/*********************************************************************** +Coroutine (State Machine) +***********************************************************************/ + + class StateMachine : public Object, public AggregatableDescription + { +#ifndef VCZH_DEBUG_NO_REFLECTION + friend struct CustomTypeDescriptorSelector; +#endif + protected: + bool stateMachineInitialized = false; + bool stateMachineStopped = false; + vint stateMachineInput = -1; + Ptr stateMachineCoroutine; + + void ResumeStateMachine(); + public: + StateMachine(); + ~StateMachine(); + + CoroutineStatus GetStateMachineStatus(); + }; + +/*********************************************************************** +Libraries +***********************************************************************/ + + class Sys : public Description + { + public: + static vint Len(const WString& value) { return value.Length(); } + static WString Left(const WString& value, vint length) { return value.Left(length); } + static WString Right(const WString& value, vint length) { return value.Right(length); } + static WString Mid(const WString& value, vint start, vint length) { return value.Sub(start, length); } + static vint Find(const WString& value, const WString& substr) { return INVLOC.FindFirst(value, substr, Locale::Normalization::None).key; } + +#define DEFINE_COMPARE(TYPE) static vint Compare(TYPE a, TYPE b); + REFLECTION_PREDEFINED_PRIMITIVE_TYPES(DEFINE_COMPARE) + DEFINE_COMPARE(DateTime) +#undef DEFINE_COMPARE + + static Ptr ReverseEnumerable(Ptr value); + }; + + class Math : public Description + { + public: + static vint8_t Abs(vint8_t value) { return value > 0 ? value : -value; } + static vint16_t Abs(vint16_t value) { return value > 0 ? value : -value; } + static vint32_t Abs(vint32_t value) { return value > 0 ? value : -value; } + static vint64_t Abs(vint64_t value) { return value > 0 ? value : -value; } + static float Abs(float value) { return value > 0 ? value : -value; } + static double Abs(double value) { return value > 0 ? value : -value; } + +#define DEFINE_MINMAX(TYPE)\ + static TYPE Min(TYPE a, TYPE b);\ + static TYPE Max(TYPE a, TYPE b);\ + + REFLECTION_PREDEFINED_PRIMITIVE_TYPES(DEFINE_MINMAX) + DEFINE_MINMAX(DateTime) +#undef DEFINE_MINMAX + + static double Sin(double value) { return sin(value); } + static double Cos(double value) { return cos(value); } + static double Tan(double value) { return tan(value); } + static double ASin(double value) { return asin(value); } + static double ACos(double value) { return acos(value); } + static double ATan(double value) { return atan(value); } + static double ATan2(double x, double y) { return atan2(y, x); } + + static double Exp(double value) { return exp(value); } + static double LogN(double value) { return log(value); } + static double Log10(double value) { return log10(value); } + static double Log(double value, double base) { return log(value) / log(base); } + static double Pow(double value, double power) { return pow(value, power); } + static double Ceil(double value) { return ceil(value); } + static double Floor(double value) { return floor(value); } + static double Round(double value) { return round(value); } + static double Trunc(double value) { return trunc(value); } + }; + } + } +} + +#endif + + +/*********************************************************************** +.\WFLIBRARYREFLECTION.H +***********************************************************************/ +/*********************************************************************** +Vczh Library++ 3.0 +Developer: Zihan Chen(vczh) +Framework::Reflection + +Interfaces: +***********************************************************************/ + +#ifndef VCZH_WORKFLOW_LIBRARY_REFLECTION +#define VCZH_WORKFLOW_LIBRARY_REFLECTION + + +namespace vl +{ + namespace reflection + { + namespace description + { + +/*********************************************************************** +Predefined Types +***********************************************************************/ + +#ifndef VCZH_DEBUG_NO_REFLECTION + +#define WORKFLOW_LIBRARY_TYPES(F)\ + F(Sys) \ + F(Math) \ + F(CoroutineStatus) \ + F(CoroutineResult) \ + F(ICoroutine) \ + F(EnumerableCoroutine::IImpl) \ + F(EnumerableCoroutine) \ + F(AsyncStatus) \ + F(AsyncContext) \ + F(IAsync) \ + F(IPromise) \ + F(IFuture) \ + F(IAsyncScheduler) \ + F(AsyncCoroutine::IImpl) \ + F(AsyncCoroutine) \ + F(StateMachine) \ + + WORKFLOW_LIBRARY_TYPES(DECL_TYPE_INFO) + +#endif + +/*********************************************************************** +Interface Implementation Proxy (Implement) +***********************************************************************/ + +#ifndef VCZH_DEBUG_NO_REFLECTION + +#pragma warning(push) +#pragma warning(disable:4250) + + BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(ICoroutine) + + void Resume(bool raiseException, Ptr output)override + { + INVOKE_INTERFACE_PROXY(Resume, raiseException, output); + } + + Ptr GetFailure()override + { + INVOKEGET_INTERFACE_PROXY_NOPARAMS(GetFailure); + } + + CoroutineStatus GetStatus()override + { + INVOKEGET_INTERFACE_PROXY_NOPARAMS(GetStatus); + } + END_INTERFACE_PROXY(ICoroutine) + + BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(IAsync) + + AsyncStatus GetStatus()override + { + INVOKEGET_INTERFACE_PROXY_NOPARAMS(GetStatus); + } + + bool Execute(const Func)>& callback, Ptr context)override + { + INVOKEGET_INTERFACE_PROXY(Execute, callback, context); + } + END_INTERFACE_PROXY(IAsync) + +#pragma warning(pop) + +#endif + +/*********************************************************************** +LoadPredefinedTypes +***********************************************************************/ + + extern bool WfLoadLibraryTypes(); + } + } +} + +#endif + diff --git a/Import/VlppWorkflow.cpp b/Import/VlppWorkflowRuntime.cpp similarity index 99% rename from Import/VlppWorkflow.cpp rename to Import/VlppWorkflowRuntime.cpp index 4e511bd4..282fdff8 100644 --- a/Import/VlppWorkflow.cpp +++ b/Import/VlppWorkflowRuntime.cpp @@ -2,7 +2,7 @@ THIS FILE IS AUTOMATICALLY GENERATED. DO NOT MODIFY DEVELOPER: Zihan Chen(vczh) ***********************************************************************/ -#include "VlppWorkflow.h" +#include "VlppWorkflowRuntime.h" /*********************************************************************** .\WFRUNTIME.CPP diff --git a/Import/VlppWorkflow.h b/Import/VlppWorkflowRuntime.h similarity index 100% rename from Import/VlppWorkflow.h rename to Import/VlppWorkflowRuntime.h diff --git a/Tools/CppMerge.exe b/Tools/CppMerge.exe index f0dc9239..37f8a0a7 100644 Binary files a/Tools/CppMerge.exe and b/Tools/CppMerge.exe differ diff --git a/Tools/GacGen32.exe b/Tools/GacGen32.exe index b02edcc1..23f0368b 100644 Binary files a/Tools/GacGen32.exe and b/Tools/GacGen32.exe differ diff --git a/Tools/GacGen64.exe b/Tools/GacGen64.exe index 52630249..1d9b7176 100644 Binary files a/Tools/GacGen64.exe and b/Tools/GacGen64.exe differ diff --git a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/DataGridComponents.xml b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/DataGridComponents.xml index 87097790..d7bf379d 100644 --- a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/DataGridComponents.xml +++ b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/DataGridComponents.xml @@ -199,14 +199,14 @@ var date = (cast (MyDataItem^) row).Birthday; if (checkFrom.Selected) { - if (Sys::CompareDateTime(date, dateFrom.SelectedDate) < 0) + if (Sys::Compare(date, dateFrom.SelectedDate) < 0) { return false; } } if (checkTo.Selected) { - if (Sys::CompareDateTime(date, dateTo.SelectedDate) > 0) + if (Sys::Compare(date, dateTo.SelectedDate) > 0) { return false; } diff --git a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/DataGridTabPage.xml b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/DataGridTabPage.xml index b4803d63..fd6f2be4 100644 --- a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/DataGridTabPage.xml +++ b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/DataGridTabPage.xml @@ -99,7 +99,7 @@ Name Name demo:TextEditor - [Sys::CompareString($1.Name, $2.Name)] + [Sys::Compare($1.Name, $2.Name)] @@ -107,7 +107,7 @@ Gender demo:GenderVisualizer;CellBorderVisualizerTemplate demo:GenderEditor - [Sys::CompareUInt64(cast UInt64 ($1.Gender), cast UInt64 ($2.Gender))] + [Sys::Compare(cast UInt64 ($1.Gender), cast UInt64 ($2.Gender))] @@ -115,14 +115,14 @@ Category demo:CategoryVisualizer;CellBorderVisualizerTemplate demo:CategoryEditor - [Sys::CompareUInt64(cast UInt64 ($1.Category), cast UInt64 ($2.Category))] + [Sys::Compare(cast UInt64 ($1.Category), cast UInt64 ($2.Category))] demo::ToString(itemToBind.Birthday) Birthday demo:DateEditor - [Sys::CompareDateTime($1.Birthday, $2.Birthday)] + [Sys::Compare($1.Birthday, $2.Birthday)] dateFilter.Filter @@ -138,7 +138,7 @@ Website HyperlinkVisualizerTemplate;CellBorderVisualizerTemplate demo:TextEditor - [Sys::CompareString($1.Website, $2.Website)] + [Sys::Compare($1.Website, $2.Website)] diff --git a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/ElementTabPage.xml b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/ElementTabPage.xml new file mode 100644 index 00000000..7cd61f2b --- /dev/null +++ b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/ElementTabPage.xml @@ -0,0 +1,92 @@ + + + + + <_>composeType:Absolute absolute:45 + <_>composeType:Absolute absolute:45 + <_>composeType:Absolute absolute:45 + <_>composeType:Absolute absolute:45 + <_>composeType:Absolute absolute:45 + <_>composeType:Absolute absolute:45 + <_>composeType:Percentage percentage:1.0 + + + <_>composeType:Absolute absolute:100 + <_>composeType:Absolute absolute:100 + <_>composeType:Absolute absolute:45 + <_>composeType:Absolute absolute:45 + <_>composeType:Absolute absolute:100 + <_>composeType:Percentage percentage:1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/Resource.xml b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/Resource.xml index 26e15545..edaa9d7f 100644 --- a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/Resource.xml +++ b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/Resource.xml @@ -28,6 +28,7 @@ + @@ -40,6 +41,7 @@ RepeatTabPage.xml DataGridTabPage.xml DocumentTabPage.xml + ElementTabPage.xml TextBoxTabPage.xml DataGridComponents.xml RepeatComponents.xml diff --git a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/Source/DemoPartialClasses.cpp b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/Source/DemoPartialClasses.cpp index 05f90270..e1d4b0bc 100644 --- a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/Source/DemoPartialClasses.cpp +++ b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/Source/DemoPartialClasses.cpp @@ -3098,6 +3098,7 @@ Closures this->__vwsn_co0_mainWindow = static_cast<::vl::presentation::controls::GuiWindow*>(nullptr); this->__vwsn_co1_window = static_cast<::demo::HyperlinkWindow*>(nullptr); this->__vwsn_co_state_ = static_cast<::vl::vint>(0); + this->__vwsn_co_state_before_pause_ = (- static_cast<::vl::vint>(1)); this->__vwsn_prop_Failure = ::vl::Ptr<::vl::reflection::description::IValueException>(); this->__vwsn_prop_Status = ::vl::reflection::description::CoroutineStatus::Waiting; } @@ -3130,6 +3131,24 @@ Closures try { { + if ((__vwsn_co_state_before_pause_ != (- static_cast<::vl::vint>(1)))) + { + if ((! static_cast(__vwsn_co_result_))) + { + (__vwsn_co_state_before_pause_ = (- static_cast<::vl::vint>(1))); + } + else if ((! static_cast(::vl::__vwsn::This(__vwsn_co_result_.Obj())->GetFailure()))) + { + (__vwsn_co_state_before_pause_ = (- static_cast<::vl::vint>(1))); + } + else + { + { + (__vwsn_co_state_before_pause_ = (- static_cast<::vl::vint>(1))); + throw ::vl::Exception(::vl::__vwsn::This(::vl::__vwsn::This(__vwsn_co_result_.Obj())->GetFailure().Obj())->GetMessage()); + } + } + } while (true) { if ((__vwsn_co_state_ == static_cast<::vl::vint>(0))) @@ -3163,6 +3182,7 @@ Closures if ((__vwsn_co_state_ == static_cast<::vl::vint>(2))) { this->SetStatus(::vl::reflection::description::CoroutineStatus::Waiting); + (__vwsn_co_state_before_pause_ = __vwsn_co_state_); (__vwsn_co_state_ = static_cast<::vl::vint>(1)); { ::vl::reflection::description::AsyncCoroutine::AwaitAndRead(__vwsn_co_impl_, ::vl::__vwsn::This(__vwsn_co1_window)->ShowModalAsync(__vwsn_co0_mainWindow)); @@ -5936,7 +5956,7 @@ namespace demo ::vl::__vwsn::This(this->__vwsn_precompile_2)->SetHorizontalAlwaysVisible(::vl::__vwsn::Parse(::vl::WString(L"false", false))); } { - (this->comboView = new ::vl::presentation::controls::GuiComboBoxListControl(::vl::presentation::theme::ThemeName::ComboBox, this->__vwsn_precompile_2)); + (this->comboView = new ::vl::presentation::controls::GuiComboBoxListControl(::vl::presentation::theme::ThemeName::ComboBox, static_cast<::vl::presentation::controls::GuiSelectableListControl*>(this->__vwsn_precompile_2))); } { ::vl::__vwsn::This(this->comboView)->SetSelectedIndex(::vl::__vwsn::Parse<::vl::vint>(::vl::WString(L"6", false))); @@ -7505,6 +7525,483 @@ Class (::demo::DocumentTabPage) this->FinalizeInstanceRecursively(static_cast<::vl::presentation::controls::GuiCustomControl*>(this)); } +/*********************************************************************** +Class (::demo::ElementTabPageConstructor) +***********************************************************************/ + + void ElementTabPageConstructor::__vwsn_initialize_instance_(::demo::ElementTabPage* __vwsn_this_) + { + (this->self = __vwsn_this_); + { + ::vl::__vwsn::This(this->self)->SetText(::vl::WString(L"Elements", false)); + } + (this->__vwsn_precompile_0 = new ::vl::presentation::compositions::GuiTableComposition()); + { + ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetCellPadding(::vl::__vwsn::Parse<::vl::vint>(::vl::WString(L"10", false))); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetRowsAndColumns(static_cast<::vl::vint>(7), static_cast<::vl::vint>(6)); + ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetRowOption(static_cast<::vl::vint>(0), [&](){ ::vl::presentation::compositions::GuiCellOption __vwsn_temp__; __vwsn_temp__.composeType = ::vl::presentation::compositions::GuiCellOption::ComposeType::Absolute; __vwsn_temp__.absolute = static_cast<::vl::vint>(45); return __vwsn_temp__; }()); + ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetRowOption(static_cast<::vl::vint>(1), [&](){ ::vl::presentation::compositions::GuiCellOption __vwsn_temp__; __vwsn_temp__.composeType = ::vl::presentation::compositions::GuiCellOption::ComposeType::Absolute; __vwsn_temp__.absolute = static_cast<::vl::vint>(45); return __vwsn_temp__; }()); + ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetRowOption(static_cast<::vl::vint>(2), [&](){ ::vl::presentation::compositions::GuiCellOption __vwsn_temp__; __vwsn_temp__.composeType = ::vl::presentation::compositions::GuiCellOption::ComposeType::Absolute; __vwsn_temp__.absolute = static_cast<::vl::vint>(45); return __vwsn_temp__; }()); + ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetRowOption(static_cast<::vl::vint>(3), [&](){ ::vl::presentation::compositions::GuiCellOption __vwsn_temp__; __vwsn_temp__.composeType = ::vl::presentation::compositions::GuiCellOption::ComposeType::Absolute; __vwsn_temp__.absolute = static_cast<::vl::vint>(45); return __vwsn_temp__; }()); + ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetRowOption(static_cast<::vl::vint>(4), [&](){ ::vl::presentation::compositions::GuiCellOption __vwsn_temp__; __vwsn_temp__.composeType = ::vl::presentation::compositions::GuiCellOption::ComposeType::Absolute; __vwsn_temp__.absolute = static_cast<::vl::vint>(45); return __vwsn_temp__; }()); + ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetRowOption(static_cast<::vl::vint>(5), [&](){ ::vl::presentation::compositions::GuiCellOption __vwsn_temp__; __vwsn_temp__.composeType = ::vl::presentation::compositions::GuiCellOption::ComposeType::Absolute; __vwsn_temp__.absolute = static_cast<::vl::vint>(45); return __vwsn_temp__; }()); + ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetRowOption(static_cast<::vl::vint>(6), [&](){ ::vl::presentation::compositions::GuiCellOption __vwsn_temp__; __vwsn_temp__.composeType = ::vl::presentation::compositions::GuiCellOption::ComposeType::Percentage; __vwsn_temp__.percentage = static_cast(1.0); return __vwsn_temp__; }()); + ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetColumnOption(static_cast<::vl::vint>(0), [&](){ ::vl::presentation::compositions::GuiCellOption __vwsn_temp__; __vwsn_temp__.composeType = ::vl::presentation::compositions::GuiCellOption::ComposeType::Absolute; __vwsn_temp__.absolute = static_cast<::vl::vint>(100); return __vwsn_temp__; }()); + ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetColumnOption(static_cast<::vl::vint>(1), [&](){ ::vl::presentation::compositions::GuiCellOption __vwsn_temp__; __vwsn_temp__.composeType = ::vl::presentation::compositions::GuiCellOption::ComposeType::Absolute; __vwsn_temp__.absolute = static_cast<::vl::vint>(100); return __vwsn_temp__; }()); + ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetColumnOption(static_cast<::vl::vint>(2), [&](){ ::vl::presentation::compositions::GuiCellOption __vwsn_temp__; __vwsn_temp__.composeType = ::vl::presentation::compositions::GuiCellOption::ComposeType::Absolute; __vwsn_temp__.absolute = static_cast<::vl::vint>(45); return __vwsn_temp__; }()); + ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetColumnOption(static_cast<::vl::vint>(3), [&](){ ::vl::presentation::compositions::GuiCellOption __vwsn_temp__; __vwsn_temp__.composeType = ::vl::presentation::compositions::GuiCellOption::ComposeType::Absolute; __vwsn_temp__.absolute = static_cast<::vl::vint>(45); return __vwsn_temp__; }()); + ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetColumnOption(static_cast<::vl::vint>(4), [&](){ ::vl::presentation::compositions::GuiCellOption __vwsn_temp__; __vwsn_temp__.composeType = ::vl::presentation::compositions::GuiCellOption::ComposeType::Absolute; __vwsn_temp__.absolute = static_cast<::vl::vint>(100); return __vwsn_temp__; }()); + ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetColumnOption(static_cast<::vl::vint>(5), [&](){ ::vl::presentation::compositions::GuiCellOption __vwsn_temp__; __vwsn_temp__.composeType = ::vl::presentation::compositions::GuiCellOption::ComposeType::Percentage; __vwsn_temp__.percentage = static_cast(1.0); return __vwsn_temp__; }()); + } + (this->__vwsn_precompile_1 = new ::vl::presentation::compositions::GuiCellComposition()); + { + ::vl::__vwsn::This(this->__vwsn_precompile_1)->SetSite(static_cast<::vl::vint>(0), static_cast<::vl::vint>(0), static_cast<::vl::vint>(2), static_cast<::vl::vint>(1)); + } + (this->__vwsn_precompile_2 = ::vl::Ptr<::vl::presentation::elements::GuiSolidBorderElement>(::vl::reflection::description::Element_Constructor<::vl::presentation::elements::GuiSolidBorderElement>())); + { + ::vl::__vwsn::This(this->__vwsn_precompile_2.Obj())->SetColor(::vl::__vwsn::Parse<::vl::presentation::Color>(::vl::WString(L"#FFFF00", false))); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_1)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_2)); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_0)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->__vwsn_precompile_1)); + } + (this->__vwsn_precompile_3 = new ::vl::presentation::compositions::GuiCellComposition()); + { + ::vl::__vwsn::This(this->__vwsn_precompile_3)->SetSite(static_cast<::vl::vint>(2), static_cast<::vl::vint>(0), static_cast<::vl::vint>(2), static_cast<::vl::vint>(1)); + } + (this->__vwsn_precompile_4 = ::vl::Ptr<::vl::presentation::elements::GuiSolidBorderElement>(::vl::reflection::description::Element_Constructor<::vl::presentation::elements::GuiSolidBorderElement>())); + { + ::vl::__vwsn::This(this->__vwsn_precompile_4.Obj())->SetShape([&](){ ::vl::presentation::elements::ElementShape __vwsn_temp__; __vwsn_temp__.shapeType = ::vl::presentation::elements::ElementShapeType::Ellipse; return __vwsn_temp__; }()); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_4.Obj())->SetColor(::vl::__vwsn::Parse<::vl::presentation::Color>(::vl::WString(L"#FFFF00", false))); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_3)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_4)); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_0)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->__vwsn_precompile_3)); + } + (this->__vwsn_precompile_5 = new ::vl::presentation::compositions::GuiCellComposition()); + { + ::vl::__vwsn::This(this->__vwsn_precompile_5)->SetSite(static_cast<::vl::vint>(4), static_cast<::vl::vint>(0), static_cast<::vl::vint>(2), static_cast<::vl::vint>(1)); + } + (this->__vwsn_precompile_6 = ::vl::Ptr<::vl::presentation::elements::GuiSolidBorderElement>(::vl::reflection::description::Element_Constructor<::vl::presentation::elements::GuiSolidBorderElement>())); + { + ::vl::__vwsn::This(this->__vwsn_precompile_6.Obj())->SetShape([&](){ ::vl::presentation::elements::ElementShape __vwsn_temp__; __vwsn_temp__.shapeType = ::vl::presentation::elements::ElementShapeType::RoundRect; __vwsn_temp__.radiusX = static_cast<::vl::vint32_t>(10); __vwsn_temp__.radiusY = static_cast<::vl::vint32_t>(5); return __vwsn_temp__; }()); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_6.Obj())->SetColor(::vl::__vwsn::Parse<::vl::presentation::Color>(::vl::WString(L"#FFFF00", false))); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_5)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_6)); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_0)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->__vwsn_precompile_5)); + } + (this->__vwsn_precompile_7 = new ::vl::presentation::compositions::GuiCellComposition()); + { + ::vl::__vwsn::This(this->__vwsn_precompile_7)->SetSite(static_cast<::vl::vint>(0), static_cast<::vl::vint>(1), static_cast<::vl::vint>(2), static_cast<::vl::vint>(1)); + } + (this->__vwsn_precompile_8 = ::vl::Ptr<::vl::presentation::elements::GuiSolidBackgroundElement>(::vl::reflection::description::Element_Constructor<::vl::presentation::elements::GuiSolidBackgroundElement>())); + { + ::vl::__vwsn::This(this->__vwsn_precompile_8.Obj())->SetColor(::vl::__vwsn::Parse<::vl::presentation::Color>(::vl::WString(L"#FFFF00", false))); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_7)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_8)); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_0)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->__vwsn_precompile_7)); + } + (this->__vwsn_precompile_9 = new ::vl::presentation::compositions::GuiCellComposition()); + { + ::vl::__vwsn::This(this->__vwsn_precompile_9)->SetSite(static_cast<::vl::vint>(2), static_cast<::vl::vint>(1), static_cast<::vl::vint>(2), static_cast<::vl::vint>(1)); + } + (this->__vwsn_precompile_10 = ::vl::Ptr<::vl::presentation::elements::GuiSolidBackgroundElement>(::vl::reflection::description::Element_Constructor<::vl::presentation::elements::GuiSolidBackgroundElement>())); + { + ::vl::__vwsn::This(this->__vwsn_precompile_10.Obj())->SetShape([&](){ ::vl::presentation::elements::ElementShape __vwsn_temp__; __vwsn_temp__.shapeType = ::vl::presentation::elements::ElementShapeType::Ellipse; return __vwsn_temp__; }()); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_10.Obj())->SetColor(::vl::__vwsn::Parse<::vl::presentation::Color>(::vl::WString(L"#FFFF00", false))); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_9)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_10)); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_0)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->__vwsn_precompile_9)); + } + (this->__vwsn_precompile_11 = new ::vl::presentation::compositions::GuiCellComposition()); + { + ::vl::__vwsn::This(this->__vwsn_precompile_11)->SetSite(static_cast<::vl::vint>(4), static_cast<::vl::vint>(1), static_cast<::vl::vint>(2), static_cast<::vl::vint>(1)); + } + (this->__vwsn_precompile_12 = ::vl::Ptr<::vl::presentation::elements::GuiSolidBackgroundElement>(::vl::reflection::description::Element_Constructor<::vl::presentation::elements::GuiSolidBackgroundElement>())); + { + ::vl::__vwsn::This(this->__vwsn_precompile_12.Obj())->SetShape([&](){ ::vl::presentation::elements::ElementShape __vwsn_temp__; __vwsn_temp__.shapeType = ::vl::presentation::elements::ElementShapeType::RoundRect; __vwsn_temp__.radiusX = static_cast<::vl::vint32_t>(10); __vwsn_temp__.radiusY = static_cast<::vl::vint32_t>(5); return __vwsn_temp__; }()); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_12.Obj())->SetColor(::vl::__vwsn::Parse<::vl::presentation::Color>(::vl::WString(L"#FFFF00", false))); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_11)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_12)); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_0)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->__vwsn_precompile_11)); + } + (this->__vwsn_precompile_13 = new ::vl::presentation::compositions::GuiCellComposition()); + { + ::vl::__vwsn::This(this->__vwsn_precompile_13)->SetSite(static_cast<::vl::vint>(0), static_cast<::vl::vint>(2), static_cast<::vl::vint>(1), static_cast<::vl::vint>(1)); + } + (this->__vwsn_precompile_14 = ::vl::Ptr<::vl::presentation::elements::GuiGradientBackgroundElement>(::vl::reflection::description::Element_Constructor<::vl::presentation::elements::GuiGradientBackgroundElement>())); + { + ::vl::__vwsn::This(this->__vwsn_precompile_14.Obj())->SetColor2(::vl::__vwsn::Parse<::vl::presentation::Color>(::vl::WString(L"#0000FF", false))); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_14.Obj())->SetColor1(::vl::__vwsn::Parse<::vl::presentation::Color>(::vl::WString(L"#FFFF00", false))); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_14.Obj())->SetDirection(::vl::presentation::elements::GuiGradientBackgroundElement::Direction::Horizontal); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_13)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_14)); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_0)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->__vwsn_precompile_13)); + } + (this->__vwsn_precompile_15 = new ::vl::presentation::compositions::GuiCellComposition()); + { + ::vl::__vwsn::This(this->__vwsn_precompile_15)->SetSite(static_cast<::vl::vint>(0), static_cast<::vl::vint>(3), static_cast<::vl::vint>(1), static_cast<::vl::vint>(1)); + } + (this->__vwsn_precompile_16 = ::vl::Ptr<::vl::presentation::elements::GuiGradientBackgroundElement>(::vl::reflection::description::Element_Constructor<::vl::presentation::elements::GuiGradientBackgroundElement>())); + { + ::vl::__vwsn::This(this->__vwsn_precompile_16.Obj())->SetColor2(::vl::__vwsn::Parse<::vl::presentation::Color>(::vl::WString(L"#0000FF", false))); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_16.Obj())->SetColor1(::vl::__vwsn::Parse<::vl::presentation::Color>(::vl::WString(L"#FFFF00", false))); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_16.Obj())->SetDirection(::vl::presentation::elements::GuiGradientBackgroundElement::Direction::Vertical); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_15)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_16)); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_0)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->__vwsn_precompile_15)); + } + (this->__vwsn_precompile_17 = new ::vl::presentation::compositions::GuiCellComposition()); + { + ::vl::__vwsn::This(this->__vwsn_precompile_17)->SetSite(static_cast<::vl::vint>(1), static_cast<::vl::vint>(2), static_cast<::vl::vint>(1), static_cast<::vl::vint>(1)); + } + (this->__vwsn_precompile_18 = ::vl::Ptr<::vl::presentation::elements::GuiGradientBackgroundElement>(::vl::reflection::description::Element_Constructor<::vl::presentation::elements::GuiGradientBackgroundElement>())); + { + ::vl::__vwsn::This(this->__vwsn_precompile_18.Obj())->SetColor2(::vl::__vwsn::Parse<::vl::presentation::Color>(::vl::WString(L"#0000FF", false))); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_18.Obj())->SetColor1(::vl::__vwsn::Parse<::vl::presentation::Color>(::vl::WString(L"#FFFF00", false))); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_18.Obj())->SetDirection(::vl::presentation::elements::GuiGradientBackgroundElement::Direction::Slash); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_17)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_18)); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_0)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->__vwsn_precompile_17)); + } + (this->__vwsn_precompile_19 = new ::vl::presentation::compositions::GuiCellComposition()); + { + ::vl::__vwsn::This(this->__vwsn_precompile_19)->SetSite(static_cast<::vl::vint>(1), static_cast<::vl::vint>(3), static_cast<::vl::vint>(1), static_cast<::vl::vint>(1)); + } + (this->__vwsn_precompile_20 = ::vl::Ptr<::vl::presentation::elements::GuiGradientBackgroundElement>(::vl::reflection::description::Element_Constructor<::vl::presentation::elements::GuiGradientBackgroundElement>())); + { + ::vl::__vwsn::This(this->__vwsn_precompile_20.Obj())->SetColor2(::vl::__vwsn::Parse<::vl::presentation::Color>(::vl::WString(L"#0000FF", false))); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_20.Obj())->SetColor1(::vl::__vwsn::Parse<::vl::presentation::Color>(::vl::WString(L"#FFFF00", false))); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_20.Obj())->SetDirection(::vl::presentation::elements::GuiGradientBackgroundElement::Direction::Backslash); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_19)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_20)); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_0)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->__vwsn_precompile_19)); + } + (this->__vwsn_precompile_21 = new ::vl::presentation::compositions::GuiCellComposition()); + { + ::vl::__vwsn::This(this->__vwsn_precompile_21)->SetSite(static_cast<::vl::vint>(2), static_cast<::vl::vint>(2), static_cast<::vl::vint>(1), static_cast<::vl::vint>(1)); + } + (this->__vwsn_precompile_22 = ::vl::Ptr<::vl::presentation::elements::GuiGradientBackgroundElement>(::vl::reflection::description::Element_Constructor<::vl::presentation::elements::GuiGradientBackgroundElement>())); + { + ::vl::__vwsn::This(this->__vwsn_precompile_22.Obj())->SetColor2(::vl::__vwsn::Parse<::vl::presentation::Color>(::vl::WString(L"#0000FF", false))); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_22.Obj())->SetColor1(::vl::__vwsn::Parse<::vl::presentation::Color>(::vl::WString(L"#FFFF00", false))); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_22.Obj())->SetShape([&](){ ::vl::presentation::elements::ElementShape __vwsn_temp__; __vwsn_temp__.shapeType = ::vl::presentation::elements::ElementShapeType::Ellipse; return __vwsn_temp__; }()); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_22.Obj())->SetDirection(::vl::presentation::elements::GuiGradientBackgroundElement::Direction::Horizontal); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_21)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_22)); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_0)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->__vwsn_precompile_21)); + } + (this->__vwsn_precompile_23 = new ::vl::presentation::compositions::GuiCellComposition()); + { + ::vl::__vwsn::This(this->__vwsn_precompile_23)->SetSite(static_cast<::vl::vint>(2), static_cast<::vl::vint>(3), static_cast<::vl::vint>(1), static_cast<::vl::vint>(1)); + } + (this->__vwsn_precompile_24 = ::vl::Ptr<::vl::presentation::elements::GuiGradientBackgroundElement>(::vl::reflection::description::Element_Constructor<::vl::presentation::elements::GuiGradientBackgroundElement>())); + { + ::vl::__vwsn::This(this->__vwsn_precompile_24.Obj())->SetColor2(::vl::__vwsn::Parse<::vl::presentation::Color>(::vl::WString(L"#0000FF", false))); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_24.Obj())->SetColor1(::vl::__vwsn::Parse<::vl::presentation::Color>(::vl::WString(L"#FFFF00", false))); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_24.Obj())->SetShape([&](){ ::vl::presentation::elements::ElementShape __vwsn_temp__; __vwsn_temp__.shapeType = ::vl::presentation::elements::ElementShapeType::Ellipse; return __vwsn_temp__; }()); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_24.Obj())->SetDirection(::vl::presentation::elements::GuiGradientBackgroundElement::Direction::Vertical); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_23)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_24)); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_0)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->__vwsn_precompile_23)); + } + (this->__vwsn_precompile_25 = new ::vl::presentation::compositions::GuiCellComposition()); + { + ::vl::__vwsn::This(this->__vwsn_precompile_25)->SetSite(static_cast<::vl::vint>(3), static_cast<::vl::vint>(2), static_cast<::vl::vint>(1), static_cast<::vl::vint>(1)); + } + (this->__vwsn_precompile_26 = ::vl::Ptr<::vl::presentation::elements::GuiGradientBackgroundElement>(::vl::reflection::description::Element_Constructor<::vl::presentation::elements::GuiGradientBackgroundElement>())); + { + ::vl::__vwsn::This(this->__vwsn_precompile_26.Obj())->SetColor2(::vl::__vwsn::Parse<::vl::presentation::Color>(::vl::WString(L"#0000FF", false))); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_26.Obj())->SetColor1(::vl::__vwsn::Parse<::vl::presentation::Color>(::vl::WString(L"#FFFF00", false))); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_26.Obj())->SetShape([&](){ ::vl::presentation::elements::ElementShape __vwsn_temp__; __vwsn_temp__.shapeType = ::vl::presentation::elements::ElementShapeType::Ellipse; return __vwsn_temp__; }()); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_26.Obj())->SetDirection(::vl::presentation::elements::GuiGradientBackgroundElement::Direction::Slash); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_25)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_26)); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_0)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->__vwsn_precompile_25)); + } + (this->__vwsn_precompile_27 = new ::vl::presentation::compositions::GuiCellComposition()); + { + ::vl::__vwsn::This(this->__vwsn_precompile_27)->SetSite(static_cast<::vl::vint>(3), static_cast<::vl::vint>(3), static_cast<::vl::vint>(1), static_cast<::vl::vint>(1)); + } + (this->__vwsn_precompile_28 = ::vl::Ptr<::vl::presentation::elements::GuiGradientBackgroundElement>(::vl::reflection::description::Element_Constructor<::vl::presentation::elements::GuiGradientBackgroundElement>())); + { + ::vl::__vwsn::This(this->__vwsn_precompile_28.Obj())->SetColor2(::vl::__vwsn::Parse<::vl::presentation::Color>(::vl::WString(L"#0000FF", false))); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_28.Obj())->SetColor1(::vl::__vwsn::Parse<::vl::presentation::Color>(::vl::WString(L"#FFFF00", false))); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_28.Obj())->SetShape([&](){ ::vl::presentation::elements::ElementShape __vwsn_temp__; __vwsn_temp__.shapeType = ::vl::presentation::elements::ElementShapeType::Ellipse; return __vwsn_temp__; }()); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_28.Obj())->SetDirection(::vl::presentation::elements::GuiGradientBackgroundElement::Direction::Backslash); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_27)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_28)); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_0)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->__vwsn_precompile_27)); + } + (this->__vwsn_precompile_29 = new ::vl::presentation::compositions::GuiCellComposition()); + { + ::vl::__vwsn::This(this->__vwsn_precompile_29)->SetSite(static_cast<::vl::vint>(4), static_cast<::vl::vint>(2), static_cast<::vl::vint>(1), static_cast<::vl::vint>(1)); + } + (this->__vwsn_precompile_30 = ::vl::Ptr<::vl::presentation::elements::GuiGradientBackgroundElement>(::vl::reflection::description::Element_Constructor<::vl::presentation::elements::GuiGradientBackgroundElement>())); + { + ::vl::__vwsn::This(this->__vwsn_precompile_30.Obj())->SetColor2(::vl::__vwsn::Parse<::vl::presentation::Color>(::vl::WString(L"#0000FF", false))); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_30.Obj())->SetColor1(::vl::__vwsn::Parse<::vl::presentation::Color>(::vl::WString(L"#FFFF00", false))); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_30.Obj())->SetShape([&](){ ::vl::presentation::elements::ElementShape __vwsn_temp__; __vwsn_temp__.shapeType = ::vl::presentation::elements::ElementShapeType::RoundRect; __vwsn_temp__.radiusX = static_cast<::vl::vint32_t>(10); __vwsn_temp__.radiusY = static_cast<::vl::vint32_t>(5); return __vwsn_temp__; }()); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_30.Obj())->SetDirection(::vl::presentation::elements::GuiGradientBackgroundElement::Direction::Horizontal); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_29)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_30)); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_0)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->__vwsn_precompile_29)); + } + (this->__vwsn_precompile_31 = new ::vl::presentation::compositions::GuiCellComposition()); + { + ::vl::__vwsn::This(this->__vwsn_precompile_31)->SetSite(static_cast<::vl::vint>(4), static_cast<::vl::vint>(3), static_cast<::vl::vint>(1), static_cast<::vl::vint>(1)); + } + (this->__vwsn_precompile_32 = ::vl::Ptr<::vl::presentation::elements::GuiGradientBackgroundElement>(::vl::reflection::description::Element_Constructor<::vl::presentation::elements::GuiGradientBackgroundElement>())); + { + ::vl::__vwsn::This(this->__vwsn_precompile_32.Obj())->SetColor2(::vl::__vwsn::Parse<::vl::presentation::Color>(::vl::WString(L"#0000FF", false))); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_32.Obj())->SetColor1(::vl::__vwsn::Parse<::vl::presentation::Color>(::vl::WString(L"#FFFF00", false))); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_32.Obj())->SetShape([&](){ ::vl::presentation::elements::ElementShape __vwsn_temp__; __vwsn_temp__.shapeType = ::vl::presentation::elements::ElementShapeType::RoundRect; __vwsn_temp__.radiusX = static_cast<::vl::vint32_t>(10); __vwsn_temp__.radiusY = static_cast<::vl::vint32_t>(5); return __vwsn_temp__; }()); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_32.Obj())->SetDirection(::vl::presentation::elements::GuiGradientBackgroundElement::Direction::Vertical); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_31)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_32)); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_0)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->__vwsn_precompile_31)); + } + (this->__vwsn_precompile_33 = new ::vl::presentation::compositions::GuiCellComposition()); + { + ::vl::__vwsn::This(this->__vwsn_precompile_33)->SetSite(static_cast<::vl::vint>(5), static_cast<::vl::vint>(2), static_cast<::vl::vint>(1), static_cast<::vl::vint>(1)); + } + (this->__vwsn_precompile_34 = ::vl::Ptr<::vl::presentation::elements::GuiGradientBackgroundElement>(::vl::reflection::description::Element_Constructor<::vl::presentation::elements::GuiGradientBackgroundElement>())); + { + ::vl::__vwsn::This(this->__vwsn_precompile_34.Obj())->SetColor2(::vl::__vwsn::Parse<::vl::presentation::Color>(::vl::WString(L"#0000FF", false))); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_34.Obj())->SetColor1(::vl::__vwsn::Parse<::vl::presentation::Color>(::vl::WString(L"#FFFF00", false))); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_34.Obj())->SetShape([&](){ ::vl::presentation::elements::ElementShape __vwsn_temp__; __vwsn_temp__.shapeType = ::vl::presentation::elements::ElementShapeType::RoundRect; __vwsn_temp__.radiusX = static_cast<::vl::vint32_t>(10); __vwsn_temp__.radiusY = static_cast<::vl::vint32_t>(5); return __vwsn_temp__; }()); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_34.Obj())->SetDirection(::vl::presentation::elements::GuiGradientBackgroundElement::Direction::Slash); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_33)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_34)); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_0)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->__vwsn_precompile_33)); + } + (this->__vwsn_precompile_35 = new ::vl::presentation::compositions::GuiCellComposition()); + { + ::vl::__vwsn::This(this->__vwsn_precompile_35)->SetSite(static_cast<::vl::vint>(5), static_cast<::vl::vint>(3), static_cast<::vl::vint>(1), static_cast<::vl::vint>(1)); + } + (this->__vwsn_precompile_36 = ::vl::Ptr<::vl::presentation::elements::GuiGradientBackgroundElement>(::vl::reflection::description::Element_Constructor<::vl::presentation::elements::GuiGradientBackgroundElement>())); + { + ::vl::__vwsn::This(this->__vwsn_precompile_36.Obj())->SetColor2(::vl::__vwsn::Parse<::vl::presentation::Color>(::vl::WString(L"#0000FF", false))); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_36.Obj())->SetColor1(::vl::__vwsn::Parse<::vl::presentation::Color>(::vl::WString(L"#FFFF00", false))); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_36.Obj())->SetShape([&](){ ::vl::presentation::elements::ElementShape __vwsn_temp__; __vwsn_temp__.shapeType = ::vl::presentation::elements::ElementShapeType::RoundRect; __vwsn_temp__.radiusX = static_cast<::vl::vint32_t>(10); __vwsn_temp__.radiusY = static_cast<::vl::vint32_t>(5); return __vwsn_temp__; }()); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_36.Obj())->SetDirection(::vl::presentation::elements::GuiGradientBackgroundElement::Direction::Backslash); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_35)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_36)); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_0)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->__vwsn_precompile_35)); + } + (this->__vwsn_precompile_37 = new ::vl::presentation::compositions::GuiCellComposition()); + { + ::vl::__vwsn::This(this->__vwsn_precompile_37)->SetSite(static_cast<::vl::vint>(0), static_cast<::vl::vint>(4), static_cast<::vl::vint>(2), static_cast<::vl::vint>(1)); + } + (this->__vwsn_precompile_38 = ::vl::Ptr<::vl::presentation::elements::GuiRadialGradientBackgroundElement>(::vl::reflection::description::Element_Constructor<::vl::presentation::elements::GuiRadialGradientBackgroundElement>())); + { + ::vl::__vwsn::This(this->__vwsn_precompile_38.Obj())->SetColor2(::vl::__vwsn::Parse<::vl::presentation::Color>(::vl::WString(L"#0000FF", false))); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_38.Obj())->SetColor1(::vl::__vwsn::Parse<::vl::presentation::Color>(::vl::WString(L"#FFFF00", false))); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_37)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_38)); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_0)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->__vwsn_precompile_37)); + } + (this->__vwsn_precompile_39 = new ::vl::presentation::compositions::GuiCellComposition()); + { + ::vl::__vwsn::This(this->__vwsn_precompile_39)->SetSite(static_cast<::vl::vint>(2), static_cast<::vl::vint>(4), static_cast<::vl::vint>(2), static_cast<::vl::vint>(1)); + } + (this->__vwsn_precompile_40 = ::vl::Ptr<::vl::presentation::elements::GuiRadialGradientBackgroundElement>(::vl::reflection::description::Element_Constructor<::vl::presentation::elements::GuiRadialGradientBackgroundElement>())); + { + ::vl::__vwsn::This(this->__vwsn_precompile_40.Obj())->SetColor2(::vl::__vwsn::Parse<::vl::presentation::Color>(::vl::WString(L"#0000FF", false))); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_40.Obj())->SetColor1(::vl::__vwsn::Parse<::vl::presentation::Color>(::vl::WString(L"#FFFF00", false))); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_40.Obj())->SetShape([&](){ ::vl::presentation::elements::ElementShape __vwsn_temp__; __vwsn_temp__.shapeType = ::vl::presentation::elements::ElementShapeType::Ellipse; return __vwsn_temp__; }()); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_39)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_40)); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_0)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->__vwsn_precompile_39)); + } + (this->__vwsn_precompile_41 = new ::vl::presentation::compositions::GuiCellComposition()); + { + ::vl::__vwsn::This(this->__vwsn_precompile_41)->SetSite(static_cast<::vl::vint>(4), static_cast<::vl::vint>(4), static_cast<::vl::vint>(2), static_cast<::vl::vint>(1)); + } + (this->__vwsn_precompile_42 = ::vl::Ptr<::vl::presentation::elements::GuiRadialGradientBackgroundElement>(::vl::reflection::description::Element_Constructor<::vl::presentation::elements::GuiRadialGradientBackgroundElement>())); + { + ::vl::__vwsn::This(this->__vwsn_precompile_42.Obj())->SetColor2(::vl::__vwsn::Parse<::vl::presentation::Color>(::vl::WString(L"#0000FF", false))); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_42.Obj())->SetColor1(::vl::__vwsn::Parse<::vl::presentation::Color>(::vl::WString(L"#FFFF00", false))); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_42.Obj())->SetShape([&](){ ::vl::presentation::elements::ElementShape __vwsn_temp__; __vwsn_temp__.shapeType = ::vl::presentation::elements::ElementShapeType::RoundRect; __vwsn_temp__.radiusX = static_cast<::vl::vint32_t>(10); __vwsn_temp__.radiusY = static_cast<::vl::vint32_t>(5); return __vwsn_temp__; }()); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_41)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_42)); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_0)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->__vwsn_precompile_41)); + } + { + ::vl::__vwsn::This(::vl::__vwsn::This(this->self)->GetContainerComposition())->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->__vwsn_precompile_0)); + } + } + + ElementTabPageConstructor::ElementTabPageConstructor() + { + } + +/*********************************************************************** +Class (::demo::ElementTabPage) +***********************************************************************/ + + ElementTabPage::ElementTabPage() + : ::vl::presentation::controls::GuiTabPage(::vl::presentation::theme::ThemeName::CustomControl) + { + auto __vwsn_resource_ = ::vl::__vwsn::This(::vl::presentation::GetResourceManager())->GetResourceFromClassName(::vl::WString(L"demo::ElementTabPage", false)); + auto __vwsn_resolver_ = ::vl::Ptr<::vl::presentation::GuiResourcePathResolver>(new ::vl::presentation::GuiResourcePathResolver(__vwsn_resource_, ::vl::__vwsn::This(__vwsn_resource_.Obj())->GetWorkingDirectory())); + ::vl::__vwsn::This(this)->SetResourceResolver(__vwsn_resolver_); + ::vl::__vwsn::This(this)->__vwsn_initialize_instance_(this); + } + + ElementTabPage::~ElementTabPage() + { + this->FinalizeInstanceRecursively(static_cast<::vl::presentation::controls::GuiCustomControl*>(this)); + } + /*********************************************************************** Class (::demo::ListViewTabPageConstructor) ***********************************************************************/ @@ -7591,7 +8088,7 @@ Class (::demo::ListViewTabPageConstructor) ::vl::__vwsn::This(this->__vwsn_precompile_2)->SetHorizontalAlwaysVisible(::vl::__vwsn::Parse(::vl::WString(L"false", false))); } { - (this->comboView = new ::vl::presentation::controls::GuiComboBoxListControl(::vl::presentation::theme::ThemeName::ComboBox, this->__vwsn_precompile_2)); + (this->comboView = new ::vl::presentation::controls::GuiComboBoxListControl(::vl::presentation::theme::ThemeName::ComboBox, static_cast<::vl::presentation::controls::GuiSelectableListControl*>(this->__vwsn_precompile_2))); } { ::vl::__vwsn::This(this->comboView)->SetSelectedIndex(::vl::__vwsn::Parse<::vl::vint>(::vl::WString(L"5", false))); @@ -7814,9 +8311,9 @@ Class (::demo::MainWindowConstructor) void MainWindowConstructor::__vwsn_initialize_instance_(::demo::MainWindow* __vwsn_this_) { (this->self = __vwsn_this_); - (this->__vwsn_precompile_12 = ::vl::__vwsn::This(this->self)->GetBoundsComposition()); + (this->__vwsn_precompile_13 = ::vl::__vwsn::This(this->self)->GetBoundsComposition()); { - ::vl::__vwsn::This(this->__vwsn_precompile_12)->SetPreferredMinSize([&](){ ::vl::presentation::Size __vwsn_temp__; __vwsn_temp__.x = static_cast<::vl::vint>(640); __vwsn_temp__.y = static_cast<::vl::vint>(480); return __vwsn_temp__; }()); + ::vl::__vwsn::This(this->__vwsn_precompile_13)->SetPreferredMinSize([&](){ ::vl::presentation::Size __vwsn_temp__; __vwsn_temp__.x = static_cast<::vl::vint>(640); __vwsn_temp__.y = static_cast<::vl::vint>(480); return __vwsn_temp__; }()); } { ::vl::__vwsn::This(this->self)->SetClientSize([&](){ ::vl::presentation::Size __vwsn_temp__; __vwsn_temp__.x = static_cast<::vl::vint>(640); __vwsn_temp__.y = static_cast<::vl::vint>(480); return __vwsn_temp__; }()); @@ -7906,6 +8403,14 @@ Class (::demo::MainWindowConstructor) auto __vwsn_collection_ = ::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueObservableList>(::vl::__vwsn::This(this->__vwsn_precompile_0)->GetPages()); ::vl::__vwsn::This(__vwsn_collection_.Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_11)); } + (this->__vwsn_precompile_12 = new ::demo::ElementTabPage()); + { + ::vl::__vwsn::This(this->__vwsn_precompile_12)->SetAlt(::vl::WString(L"E", false)); + } + { + auto __vwsn_collection_ = ::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueObservableList>(::vl::__vwsn::This(this->__vwsn_precompile_0)->GetPages()); + ::vl::__vwsn::This(__vwsn_collection_.Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_12)); + } (this->__vwsn_precompile_1 = ::vl::__vwsn::This(this->__vwsn_precompile_0)->GetBoundsComposition()); { ::vl::__vwsn::This(this->__vwsn_precompile_1)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(5); __vwsn_temp__.top = static_cast<::vl::vint>(5); __vwsn_temp__.right = static_cast<::vl::vint>(5); __vwsn_temp__.bottom = static_cast<::vl::vint>(5); return __vwsn_temp__; }()); @@ -8522,7 +9027,7 @@ Class (::demo::TextListTabPageConstructor) ::vl::__vwsn::This(this->__vwsn_precompile_2)->SetHorizontalAlwaysVisible(::vl::__vwsn::Parse(::vl::WString(L"false", false))); } { - (this->comboView = new ::vl::presentation::controls::GuiComboBoxListControl(::vl::presentation::theme::ThemeName::ComboBox, this->__vwsn_precompile_2)); + (this->comboView = new ::vl::presentation::controls::GuiComboBoxListControl(::vl::presentation::theme::ThemeName::ComboBox, static_cast<::vl::presentation::controls::GuiSelectableListControl*>(this->__vwsn_precompile_2))); } { ::vl::__vwsn::This(this->comboView)->SetSelectedIndex(::vl::__vwsn::Parse<::vl::vint>(::vl::WString(L"0", false))); @@ -8775,89 +9280,89 @@ Class (::demo::TreeViewTabPageConstructor) void TreeViewTabPageConstructor::__vwsn_initialize_instance_(::demo::TreeViewTabPage* __vwsn_this_) { (this->self = __vwsn_this_); - (this->__vwsn_precompile_27 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem())))); - (this->__vwsn_precompile_28 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/Plus_Blue", false), true).Obj())), ::vl::WString(L"Blue+", false)))))); - (this->__vwsn_precompile_29 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/ArrowCurve_Blue_Left", false), true).Obj())), ::vl::WString(L"<--", false)))))); + (this->__vwsn_precompile_27 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem()))))); + (this->__vwsn_precompile_28 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/Plus_Blue", false), true).Obj())), ::vl::WString(L"Blue+", false))))))); + (this->__vwsn_precompile_29 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/ArrowCurve_Blue_Left", false), true).Obj())), ::vl::WString(L"<--", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_28.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_29)); } - (this->__vwsn_precompile_30 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/ArrowCurve_Blue_Right", false), true).Obj())), ::vl::WString(L"-->", false)))))); + (this->__vwsn_precompile_30 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/ArrowCurve_Blue_Right", false), true).Obj())), ::vl::WString(L"-->", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_28.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_30)); } - (this->__vwsn_precompile_31 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/DownArrowLong_Blue", false), true).Obj())), ::vl::WString(L"V", false)))))); + (this->__vwsn_precompile_31 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/DownArrowLong_Blue", false), true).Obj())), ::vl::WString(L"V", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_28.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_31)); } - (this->__vwsn_precompile_32 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/UpArrowLong_Blue", false), true).Obj())), ::vl::WString(L"^", false)))))); + (this->__vwsn_precompile_32 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/UpArrowLong_Blue", false), true).Obj())), ::vl::WString(L"^", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_28.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_32)); } - (this->__vwsn_precompile_33 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/LeftArrowLong_Blue", false), true).Obj())), ::vl::WString(L"<", false)))))); + (this->__vwsn_precompile_33 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/LeftArrowLong_Blue", false), true).Obj())), ::vl::WString(L"<", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_28.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_33)); } - (this->__vwsn_precompile_34 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/RightArrowLong_Blue", false), true).Obj())), ::vl::WString(L">", false)))))); + (this->__vwsn_precompile_34 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/RightArrowLong_Blue", false), true).Obj())), ::vl::WString(L">", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_28.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_34)); } { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_27.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_28)); } - (this->__vwsn_precompile_35 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/Plus_Green", false), true).Obj())), ::vl::WString(L"Green+", false)))))); - (this->__vwsn_precompile_36 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/DownArrowLong_Green", false), true).Obj())), ::vl::WString(L"V", false)))))); + (this->__vwsn_precompile_35 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/Plus_Green", false), true).Obj())), ::vl::WString(L"Green+", false))))))); + (this->__vwsn_precompile_36 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/DownArrowLong_Green", false), true).Obj())), ::vl::WString(L"V", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_35.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_36)); } - (this->__vwsn_precompile_37 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/UpArrowLong_Green", false), true).Obj())), ::vl::WString(L"^", false)))))); + (this->__vwsn_precompile_37 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/UpArrowLong_Green", false), true).Obj())), ::vl::WString(L"^", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_35.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_37)); } - (this->__vwsn_precompile_38 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/LeftArrowLong_Green", false), true).Obj())), ::vl::WString(L"<", false)))))); + (this->__vwsn_precompile_38 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/LeftArrowLong_Green", false), true).Obj())), ::vl::WString(L"<", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_35.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_38)); } - (this->__vwsn_precompile_39 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/RightArrowLong_Green", false), true).Obj())), ::vl::WString(L">", false)))))); + (this->__vwsn_precompile_39 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/RightArrowLong_Green", false), true).Obj())), ::vl::WString(L">", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_35.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_39)); } { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_27.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_35)); } - (this->__vwsn_precompile_40 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/Plus_Grey", false), true).Obj())), ::vl::WString(L"Grey+", false)))))); - (this->__vwsn_precompile_41 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/DownArrowLong_Grey", false), true).Obj())), ::vl::WString(L"V", false)))))); + (this->__vwsn_precompile_40 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/Plus_Grey", false), true).Obj())), ::vl::WString(L"Grey+", false))))))); + (this->__vwsn_precompile_41 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/DownArrowLong_Grey", false), true).Obj())), ::vl::WString(L"V", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_40.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_41)); } - (this->__vwsn_precompile_42 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/UpArrowLong_Grey", false), true).Obj())), ::vl::WString(L"^", false)))))); + (this->__vwsn_precompile_42 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/UpArrowLong_Grey", false), true).Obj())), ::vl::WString(L"^", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_40.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_42)); } - (this->__vwsn_precompile_43 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/LeftArrowLong_Grey", false), true).Obj())), ::vl::WString(L"<", false)))))); + (this->__vwsn_precompile_43 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/LeftArrowLong_Grey", false), true).Obj())), ::vl::WString(L"<", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_40.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_43)); } - (this->__vwsn_precompile_44 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/RightArrowLong_Grey", false), true).Obj())), ::vl::WString(L">", false)))))); + (this->__vwsn_precompile_44 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/RightArrowLong_Grey", false), true).Obj())), ::vl::WString(L">", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_40.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_44)); } { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_27.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_40)); } - (this->__vwsn_precompile_45 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/Plus_Orange", false), true).Obj())), ::vl::WString(L"Orange+", false)))))); - (this->__vwsn_precompile_46 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/DownArrowLong_Orange", false), true).Obj())), ::vl::WString(L"V", false)))))); + (this->__vwsn_precompile_45 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/Plus_Orange", false), true).Obj())), ::vl::WString(L"Orange+", false))))))); + (this->__vwsn_precompile_46 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/DownArrowLong_Orange", false), true).Obj())), ::vl::WString(L"V", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_45.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_46)); } - (this->__vwsn_precompile_47 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/UpArrowLong_Orange", false), true).Obj())), ::vl::WString(L"^", false)))))); + (this->__vwsn_precompile_47 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/UpArrowLong_Orange", false), true).Obj())), ::vl::WString(L"^", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_45.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_47)); } - (this->__vwsn_precompile_48 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/LeftArrowLong_Orange", false), true).Obj())), ::vl::WString(L"<", false)))))); + (this->__vwsn_precompile_48 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/LeftArrowLong_Orange", false), true).Obj())), ::vl::WString(L"<", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_45.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_48)); } - (this->__vwsn_precompile_49 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/RightArrowLong_Orange", false), true).Obj())), ::vl::WString(L">", false)))))); + (this->__vwsn_precompile_49 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/RightArrowLong_Orange", false), true).Obj())), ::vl::WString(L">", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_45.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_49)); } @@ -8903,88 +9408,88 @@ Class (::demo::TreeViewTabPageConstructor) { ::vl::__vwsn::This(this->__vwsn_precompile_24)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); } - (this->__vwsn_precompile_2 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/Plus_Blue", false), true).Obj())), ::vl::WString(L"Blue+", false)))))); - (this->__vwsn_precompile_3 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/ArrowCurve_Blue_Left", false), true).Obj())), ::vl::WString(L"<--", false)))))); + (this->__vwsn_precompile_2 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/Plus_Blue", false), true).Obj())), ::vl::WString(L"Blue+", false))))))); + (this->__vwsn_precompile_3 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/ArrowCurve_Blue_Left", false), true).Obj())), ::vl::WString(L"<--", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_2.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_3)); } - (this->__vwsn_precompile_4 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/ArrowCurve_Blue_Right", false), true).Obj())), ::vl::WString(L"-->", false)))))); + (this->__vwsn_precompile_4 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/ArrowCurve_Blue_Right", false), true).Obj())), ::vl::WString(L"-->", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_2.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_4)); } - (this->__vwsn_precompile_5 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/DownArrowLong_Blue", false), true).Obj())), ::vl::WString(L"V", false)))))); + (this->__vwsn_precompile_5 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/DownArrowLong_Blue", false), true).Obj())), ::vl::WString(L"V", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_2.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_5)); } - (this->__vwsn_precompile_6 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/UpArrowLong_Blue", false), true).Obj())), ::vl::WString(L"^", false)))))); + (this->__vwsn_precompile_6 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/UpArrowLong_Blue", false), true).Obj())), ::vl::WString(L"^", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_2.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_6)); } - (this->__vwsn_precompile_7 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/LeftArrowLong_Blue", false), true).Obj())), ::vl::WString(L"<", false)))))); + (this->__vwsn_precompile_7 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/LeftArrowLong_Blue", false), true).Obj())), ::vl::WString(L"<", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_2.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_7)); } - (this->__vwsn_precompile_8 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/RightArrowLong_Blue", false), true).Obj())), ::vl::WString(L">", false)))))); + (this->__vwsn_precompile_8 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/RightArrowLong_Blue", false), true).Obj())), ::vl::WString(L">", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_2.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_8)); } { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(::vl::__vwsn::This(this->treeView)->Nodes().Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_2)); } - (this->__vwsn_precompile_9 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/Plus_Green", false), true).Obj())), ::vl::WString(L"Green+", false)))))); - (this->__vwsn_precompile_10 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/DownArrowLong_Green", false), true).Obj())), ::vl::WString(L"V", false)))))); + (this->__vwsn_precompile_9 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/Plus_Green", false), true).Obj())), ::vl::WString(L"Green+", false))))))); + (this->__vwsn_precompile_10 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/DownArrowLong_Green", false), true).Obj())), ::vl::WString(L"V", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_9.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_10)); } - (this->__vwsn_precompile_11 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/UpArrowLong_Green", false), true).Obj())), ::vl::WString(L"^", false)))))); + (this->__vwsn_precompile_11 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/UpArrowLong_Green", false), true).Obj())), ::vl::WString(L"^", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_9.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_11)); } - (this->__vwsn_precompile_12 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/LeftArrowLong_Green", false), true).Obj())), ::vl::WString(L"<", false)))))); + (this->__vwsn_precompile_12 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/LeftArrowLong_Green", false), true).Obj())), ::vl::WString(L"<", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_9.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_12)); } - (this->__vwsn_precompile_13 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/RightArrowLong_Green", false), true).Obj())), ::vl::WString(L">", false)))))); + (this->__vwsn_precompile_13 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/RightArrowLong_Green", false), true).Obj())), ::vl::WString(L">", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_9.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_13)); } { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(::vl::__vwsn::This(this->treeView)->Nodes().Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_9)); } - (this->__vwsn_precompile_14 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/Plus_Grey", false), true).Obj())), ::vl::WString(L"Grey+", false)))))); - (this->__vwsn_precompile_15 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/DownArrowLong_Grey", false), true).Obj())), ::vl::WString(L"V", false)))))); + (this->__vwsn_precompile_14 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/Plus_Grey", false), true).Obj())), ::vl::WString(L"Grey+", false))))))); + (this->__vwsn_precompile_15 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/DownArrowLong_Grey", false), true).Obj())), ::vl::WString(L"V", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_14.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_15)); } - (this->__vwsn_precompile_16 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/UpArrowLong_Grey", false), true).Obj())), ::vl::WString(L"^", false)))))); + (this->__vwsn_precompile_16 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/UpArrowLong_Grey", false), true).Obj())), ::vl::WString(L"^", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_14.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_16)); } - (this->__vwsn_precompile_17 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/LeftArrowLong_Grey", false), true).Obj())), ::vl::WString(L"<", false)))))); + (this->__vwsn_precompile_17 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/LeftArrowLong_Grey", false), true).Obj())), ::vl::WString(L"<", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_14.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_17)); } - (this->__vwsn_precompile_18 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/RightArrowLong_Grey", false), true).Obj())), ::vl::WString(L">", false)))))); + (this->__vwsn_precompile_18 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/RightArrowLong_Grey", false), true).Obj())), ::vl::WString(L">", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_14.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_18)); } { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(::vl::__vwsn::This(this->treeView)->Nodes().Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_14)); } - (this->__vwsn_precompile_19 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/Plus_Orange", false), true).Obj())), ::vl::WString(L"Orange+", false)))))); - (this->__vwsn_precompile_20 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/DownArrowLong_Orange", false), true).Obj())), ::vl::WString(L"V", false)))))); + (this->__vwsn_precompile_19 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/Plus_Orange", false), true).Obj())), ::vl::WString(L"Orange+", false))))))); + (this->__vwsn_precompile_20 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/DownArrowLong_Orange", false), true).Obj())), ::vl::WString(L"V", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_19.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_20)); } - (this->__vwsn_precompile_21 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/UpArrowLong_Orange", false), true).Obj())), ::vl::WString(L"^", false)))))); + (this->__vwsn_precompile_21 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/UpArrowLong_Orange", false), true).Obj())), ::vl::WString(L"^", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_19.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_21)); } - (this->__vwsn_precompile_22 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/LeftArrowLong_Orange", false), true).Obj())), ::vl::WString(L"<", false)))))); + (this->__vwsn_precompile_22 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/LeftArrowLong_Orange", false), true).Obj())), ::vl::WString(L"<", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_19.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_22)); } - (this->__vwsn_precompile_23 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/RightArrowLong_Orange", false), true).Obj())), ::vl::WString(L">", false)))))); + (this->__vwsn_precompile_23 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/RightArrowLong_Orange", false), true).Obj())), ::vl::WString(L">", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_19.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_23)); } @@ -9400,15 +9905,15 @@ Class (::demo::CategoryDisplayerConstructor) { ::vl::__vwsn::This(this->__vwsn_precompile_6.Obj())->SetEllipse(::vl::__vwsn::Parse(::vl::WString(L"true", false))); } - { - ::vl::__vwsn::This(this->__vwsn_precompile_6.Obj())->SetColor(::vl::__vwsn::Parse<::vl::presentation::Color>(::vl::WString(L"#FF8000", false))); - } { ::vl::__vwsn::This(this->__vwsn_precompile_6.Obj())->SetVerticalAlignment(::vl::presentation::Alignment::Center); } { ::vl::__vwsn::This(this->__vwsn_precompile_6.Obj())->SetHorizontalAlignment(::vl::presentation::Alignment::Left); } + { + ::vl::__vwsn::This(this->__vwsn_precompile_6.Obj())->SetColor(::vl::__vwsn::Parse<::vl::presentation::Color>(::vl::WString(L"#FF8000", false))); + } { ::vl::__vwsn::This(this->__vwsn_precompile_5)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_6)); } @@ -9490,7 +9995,7 @@ Class (::demo::CategoryEditorConstructor) ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetHorizontalAlwaysVisible(::vl::__vwsn::Parse(::vl::WString(L"false", false))); } { - (this->comboBox = new ::vl::presentation::controls::GuiComboBoxListControl(::vl::presentation::theme::ThemeName::ComboBox, this->__vwsn_precompile_0)); + (this->comboBox = new ::vl::presentation::controls::GuiComboBoxListControl(::vl::presentation::theme::ThemeName::ComboBox, static_cast<::vl::presentation::controls::GuiSelectableListControl*>(this->__vwsn_precompile_0))); } { ::vl::__vwsn::This(this->comboBox)->SetItemTemplate(LAMBDA(::vl_workflow_global::__vwsnf125_Demo_demo_CategoryEditorConstructor___vwsn_initialize_instance__(this))); @@ -9731,7 +10236,7 @@ Class (::demo::GenderEditorConstructor) ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetHorizontalAlwaysVisible(::vl::__vwsn::Parse(::vl::WString(L"false", false))); } { - (this->comboBox = new ::vl::presentation::controls::GuiComboBoxListControl(::vl::presentation::theme::ThemeName::ComboBox, this->__vwsn_precompile_0)); + (this->comboBox = new ::vl::presentation::controls::GuiComboBoxListControl(::vl::presentation::theme::ThemeName::ComboBox, static_cast<::vl::presentation::controls::GuiSelectableListControl*>(this->__vwsn_precompile_0))); } { ::vl::__vwsn::This(this->comboBox)->SetItemTemplate(LAMBDA(::vl_workflow_global::__vwsnf133_Demo_demo_GenderEditorConstructor___vwsn_initialize_instance__(this))); diff --git a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/Source/DemoPartialClasses.h b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/Source/DemoPartialClasses.h index 315af9be..ed16692b 100644 --- a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/Source/DemoPartialClasses.h +++ b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/Source/DemoPartialClasses.h @@ -253,6 +253,8 @@ namespace demo class DataGridTabPage; class DocumentTabPageConstructor; class DocumentTabPage; + class ElementTabPageConstructor; + class ElementTabPage; class ListViewTabPageConstructor; class ListViewTabPage; class MainWindowConstructor; @@ -716,6 +718,72 @@ namespace demo ~DocumentTabPage(); }; + class ElementTabPageConstructor : public ::vl::Object, public ::vl::reflection::Description + { +#ifndef VCZH_DEBUG_NO_REFLECTION + friend struct ::vl::reflection::description::CustomTypeDescriptorSelector; +#endif + protected: + ::demo::ElementTabPage* self = static_cast<::demo::ElementTabPage*>(nullptr); + ::vl::presentation::compositions::GuiTableComposition* __vwsn_precompile_0 = static_cast<::vl::presentation::compositions::GuiTableComposition*>(nullptr); + ::vl::presentation::compositions::GuiCellComposition* __vwsn_precompile_1 = static_cast<::vl::presentation::compositions::GuiCellComposition*>(nullptr); + ::vl::Ptr<::vl::presentation::elements::GuiSolidBorderElement> __vwsn_precompile_2 = ::vl::Ptr<::vl::presentation::elements::GuiSolidBorderElement>(); + ::vl::presentation::compositions::GuiCellComposition* __vwsn_precompile_3 = static_cast<::vl::presentation::compositions::GuiCellComposition*>(nullptr); + ::vl::Ptr<::vl::presentation::elements::GuiSolidBorderElement> __vwsn_precompile_4 = ::vl::Ptr<::vl::presentation::elements::GuiSolidBorderElement>(); + ::vl::presentation::compositions::GuiCellComposition* __vwsn_precompile_5 = static_cast<::vl::presentation::compositions::GuiCellComposition*>(nullptr); + ::vl::Ptr<::vl::presentation::elements::GuiSolidBorderElement> __vwsn_precompile_6 = ::vl::Ptr<::vl::presentation::elements::GuiSolidBorderElement>(); + ::vl::presentation::compositions::GuiCellComposition* __vwsn_precompile_7 = static_cast<::vl::presentation::compositions::GuiCellComposition*>(nullptr); + ::vl::Ptr<::vl::presentation::elements::GuiSolidBackgroundElement> __vwsn_precompile_8 = ::vl::Ptr<::vl::presentation::elements::GuiSolidBackgroundElement>(); + ::vl::presentation::compositions::GuiCellComposition* __vwsn_precompile_9 = static_cast<::vl::presentation::compositions::GuiCellComposition*>(nullptr); + ::vl::Ptr<::vl::presentation::elements::GuiSolidBackgroundElement> __vwsn_precompile_10 = ::vl::Ptr<::vl::presentation::elements::GuiSolidBackgroundElement>(); + ::vl::presentation::compositions::GuiCellComposition* __vwsn_precompile_11 = static_cast<::vl::presentation::compositions::GuiCellComposition*>(nullptr); + ::vl::Ptr<::vl::presentation::elements::GuiSolidBackgroundElement> __vwsn_precompile_12 = ::vl::Ptr<::vl::presentation::elements::GuiSolidBackgroundElement>(); + ::vl::presentation::compositions::GuiCellComposition* __vwsn_precompile_13 = static_cast<::vl::presentation::compositions::GuiCellComposition*>(nullptr); + ::vl::Ptr<::vl::presentation::elements::GuiGradientBackgroundElement> __vwsn_precompile_14 = ::vl::Ptr<::vl::presentation::elements::GuiGradientBackgroundElement>(); + ::vl::presentation::compositions::GuiCellComposition* __vwsn_precompile_15 = static_cast<::vl::presentation::compositions::GuiCellComposition*>(nullptr); + ::vl::Ptr<::vl::presentation::elements::GuiGradientBackgroundElement> __vwsn_precompile_16 = ::vl::Ptr<::vl::presentation::elements::GuiGradientBackgroundElement>(); + ::vl::presentation::compositions::GuiCellComposition* __vwsn_precompile_17 = static_cast<::vl::presentation::compositions::GuiCellComposition*>(nullptr); + ::vl::Ptr<::vl::presentation::elements::GuiGradientBackgroundElement> __vwsn_precompile_18 = ::vl::Ptr<::vl::presentation::elements::GuiGradientBackgroundElement>(); + ::vl::presentation::compositions::GuiCellComposition* __vwsn_precompile_19 = static_cast<::vl::presentation::compositions::GuiCellComposition*>(nullptr); + ::vl::Ptr<::vl::presentation::elements::GuiGradientBackgroundElement> __vwsn_precompile_20 = ::vl::Ptr<::vl::presentation::elements::GuiGradientBackgroundElement>(); + ::vl::presentation::compositions::GuiCellComposition* __vwsn_precompile_21 = static_cast<::vl::presentation::compositions::GuiCellComposition*>(nullptr); + ::vl::Ptr<::vl::presentation::elements::GuiGradientBackgroundElement> __vwsn_precompile_22 = ::vl::Ptr<::vl::presentation::elements::GuiGradientBackgroundElement>(); + ::vl::presentation::compositions::GuiCellComposition* __vwsn_precompile_23 = static_cast<::vl::presentation::compositions::GuiCellComposition*>(nullptr); + ::vl::Ptr<::vl::presentation::elements::GuiGradientBackgroundElement> __vwsn_precompile_24 = ::vl::Ptr<::vl::presentation::elements::GuiGradientBackgroundElement>(); + ::vl::presentation::compositions::GuiCellComposition* __vwsn_precompile_25 = static_cast<::vl::presentation::compositions::GuiCellComposition*>(nullptr); + ::vl::Ptr<::vl::presentation::elements::GuiGradientBackgroundElement> __vwsn_precompile_26 = ::vl::Ptr<::vl::presentation::elements::GuiGradientBackgroundElement>(); + ::vl::presentation::compositions::GuiCellComposition* __vwsn_precompile_27 = static_cast<::vl::presentation::compositions::GuiCellComposition*>(nullptr); + ::vl::Ptr<::vl::presentation::elements::GuiGradientBackgroundElement> __vwsn_precompile_28 = ::vl::Ptr<::vl::presentation::elements::GuiGradientBackgroundElement>(); + ::vl::presentation::compositions::GuiCellComposition* __vwsn_precompile_29 = static_cast<::vl::presentation::compositions::GuiCellComposition*>(nullptr); + ::vl::Ptr<::vl::presentation::elements::GuiGradientBackgroundElement> __vwsn_precompile_30 = ::vl::Ptr<::vl::presentation::elements::GuiGradientBackgroundElement>(); + ::vl::presentation::compositions::GuiCellComposition* __vwsn_precompile_31 = static_cast<::vl::presentation::compositions::GuiCellComposition*>(nullptr); + ::vl::Ptr<::vl::presentation::elements::GuiGradientBackgroundElement> __vwsn_precompile_32 = ::vl::Ptr<::vl::presentation::elements::GuiGradientBackgroundElement>(); + ::vl::presentation::compositions::GuiCellComposition* __vwsn_precompile_33 = static_cast<::vl::presentation::compositions::GuiCellComposition*>(nullptr); + ::vl::Ptr<::vl::presentation::elements::GuiGradientBackgroundElement> __vwsn_precompile_34 = ::vl::Ptr<::vl::presentation::elements::GuiGradientBackgroundElement>(); + ::vl::presentation::compositions::GuiCellComposition* __vwsn_precompile_35 = static_cast<::vl::presentation::compositions::GuiCellComposition*>(nullptr); + ::vl::Ptr<::vl::presentation::elements::GuiGradientBackgroundElement> __vwsn_precompile_36 = ::vl::Ptr<::vl::presentation::elements::GuiGradientBackgroundElement>(); + ::vl::presentation::compositions::GuiCellComposition* __vwsn_precompile_37 = static_cast<::vl::presentation::compositions::GuiCellComposition*>(nullptr); + ::vl::Ptr<::vl::presentation::elements::GuiRadialGradientBackgroundElement> __vwsn_precompile_38 = ::vl::Ptr<::vl::presentation::elements::GuiRadialGradientBackgroundElement>(); + ::vl::presentation::compositions::GuiCellComposition* __vwsn_precompile_39 = static_cast<::vl::presentation::compositions::GuiCellComposition*>(nullptr); + ::vl::Ptr<::vl::presentation::elements::GuiRadialGradientBackgroundElement> __vwsn_precompile_40 = ::vl::Ptr<::vl::presentation::elements::GuiRadialGradientBackgroundElement>(); + ::vl::presentation::compositions::GuiCellComposition* __vwsn_precompile_41 = static_cast<::vl::presentation::compositions::GuiCellComposition*>(nullptr); + ::vl::Ptr<::vl::presentation::elements::GuiRadialGradientBackgroundElement> __vwsn_precompile_42 = ::vl::Ptr<::vl::presentation::elements::GuiRadialGradientBackgroundElement>(); + void __vwsn_initialize_instance_(::demo::ElementTabPage* __vwsn_this_); + public: + ElementTabPageConstructor(); + }; + + class ElementTabPage : public ::vl::presentation::controls::GuiTabPage, public ::demo::ElementTabPageConstructor, public ::vl::reflection::Description + { + friend class ::demo::ElementTabPageConstructor; +#ifndef VCZH_DEBUG_NO_REFLECTION + friend struct ::vl::reflection::description::CustomTypeDescriptorSelector; +#endif + public: + ElementTabPage(); + ~ElementTabPage(); + }; + class ListViewTabPageConstructor : public ::vl::Object, public ::vl::reflection::Description { friend struct ::vl_workflow_global::__vwsnf85_Demo_demo_ListViewTabPageConstructor___vwsn_initialize_instance__; @@ -800,7 +868,8 @@ namespace demo ::demo::RepeatTabPage* __vwsn_precompile_9 = static_cast<::demo::RepeatTabPage*>(nullptr); ::demo::DocumentTabPage* __vwsn_precompile_10 = static_cast<::demo::DocumentTabPage*>(nullptr); ::demo::TextBoxTabPage* __vwsn_precompile_11 = static_cast<::demo::TextBoxTabPage*>(nullptr); - ::vl::presentation::compositions::GuiBoundsComposition* __vwsn_precompile_12 = static_cast<::vl::presentation::compositions::GuiBoundsComposition*>(nullptr); + ::demo::ElementTabPage* __vwsn_precompile_12 = static_cast<::demo::ElementTabPage*>(nullptr); + ::vl::presentation::compositions::GuiBoundsComposition* __vwsn_precompile_13 = static_cast<::vl::presentation::compositions::GuiBoundsComposition*>(nullptr); void __vwsn_initialize_instance_(::demo::MainWindow* __vwsn_this_); public: MainWindowConstructor(); @@ -3062,6 +3131,7 @@ Closures ::vl::presentation::controls::GuiWindow* __vwsn_co0_mainWindow = nullptr; ::demo::HyperlinkWindow* __vwsn_co1_window = nullptr; ::vl::vint __vwsn_co_state_ = 0; + ::vl::vint __vwsn_co_state_before_pause_ = 0; ::vl::Ptr<::vl::reflection::description::IValueException> __vwsn_prop_Failure; ::vl::Ptr<::vl::reflection::description::IValueException> GetFailure() override; void SetFailure(::vl::Ptr<::vl::reflection::description::IValueException> __vwsn_value_); diff --git a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/Source/DemoReflection.cpp b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/Source/DemoReflection.cpp index 600c3c3c..a3b48a91 100644 --- a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/Source/DemoReflection.cpp +++ b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/Source/DemoReflection.cpp @@ -47,6 +47,8 @@ namespace vl IMPL_CPP_TYPE_INFO(demo::DateFilterConstructor) IMPL_CPP_TYPE_INFO(demo::DocumentTabPage) IMPL_CPP_TYPE_INFO(demo::DocumentTabPageConstructor) + IMPL_CPP_TYPE_INFO(demo::ElementTabPage) + IMPL_CPP_TYPE_INFO(demo::ElementTabPageConstructor) IMPL_CPP_TYPE_INFO(demo::GenderDisplayer) IMPL_CPP_TYPE_INFO(demo::GenderDisplayerConstructor) IMPL_CPP_TYPE_INFO(demo::GenderEditor) @@ -342,6 +344,59 @@ namespace vl CLASS_MEMBER_FIELD(self) END_CLASS_MEMBER(::demo::DocumentTabPageConstructor) + BEGIN_CLASS_MEMBER(::demo::ElementTabPage) + CLASS_MEMBER_CONSTRUCTOR(::demo::ElementTabPage*(), NO_PARAMETER) + END_CLASS_MEMBER(::demo::ElementTabPage) + + BEGIN_CLASS_MEMBER(::demo::ElementTabPageConstructor) + CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::ElementTabPageConstructor>(), NO_PARAMETER) + CLASS_MEMBER_METHOD(__vwsn_initialize_instance_, { L"__vwsn_this_" }) + CLASS_MEMBER_FIELD(__vwsn_precompile_0) + CLASS_MEMBER_FIELD(__vwsn_precompile_1) + CLASS_MEMBER_FIELD(__vwsn_precompile_10) + CLASS_MEMBER_FIELD(__vwsn_precompile_11) + CLASS_MEMBER_FIELD(__vwsn_precompile_12) + CLASS_MEMBER_FIELD(__vwsn_precompile_13) + CLASS_MEMBER_FIELD(__vwsn_precompile_14) + CLASS_MEMBER_FIELD(__vwsn_precompile_15) + CLASS_MEMBER_FIELD(__vwsn_precompile_16) + CLASS_MEMBER_FIELD(__vwsn_precompile_17) + CLASS_MEMBER_FIELD(__vwsn_precompile_18) + CLASS_MEMBER_FIELD(__vwsn_precompile_19) + CLASS_MEMBER_FIELD(__vwsn_precompile_2) + CLASS_MEMBER_FIELD(__vwsn_precompile_20) + CLASS_MEMBER_FIELD(__vwsn_precompile_21) + CLASS_MEMBER_FIELD(__vwsn_precompile_22) + CLASS_MEMBER_FIELD(__vwsn_precompile_23) + CLASS_MEMBER_FIELD(__vwsn_precompile_24) + CLASS_MEMBER_FIELD(__vwsn_precompile_25) + CLASS_MEMBER_FIELD(__vwsn_precompile_26) + CLASS_MEMBER_FIELD(__vwsn_precompile_27) + CLASS_MEMBER_FIELD(__vwsn_precompile_28) + CLASS_MEMBER_FIELD(__vwsn_precompile_29) + CLASS_MEMBER_FIELD(__vwsn_precompile_3) + CLASS_MEMBER_FIELD(__vwsn_precompile_30) + CLASS_MEMBER_FIELD(__vwsn_precompile_31) + CLASS_MEMBER_FIELD(__vwsn_precompile_32) + CLASS_MEMBER_FIELD(__vwsn_precompile_33) + CLASS_MEMBER_FIELD(__vwsn_precompile_34) + CLASS_MEMBER_FIELD(__vwsn_precompile_35) + CLASS_MEMBER_FIELD(__vwsn_precompile_36) + CLASS_MEMBER_FIELD(__vwsn_precompile_37) + CLASS_MEMBER_FIELD(__vwsn_precompile_38) + CLASS_MEMBER_FIELD(__vwsn_precompile_39) + CLASS_MEMBER_FIELD(__vwsn_precompile_4) + CLASS_MEMBER_FIELD(__vwsn_precompile_40) + CLASS_MEMBER_FIELD(__vwsn_precompile_41) + CLASS_MEMBER_FIELD(__vwsn_precompile_42) + CLASS_MEMBER_FIELD(__vwsn_precompile_5) + CLASS_MEMBER_FIELD(__vwsn_precompile_6) + CLASS_MEMBER_FIELD(__vwsn_precompile_7) + CLASS_MEMBER_FIELD(__vwsn_precompile_8) + CLASS_MEMBER_FIELD(__vwsn_precompile_9) + CLASS_MEMBER_FIELD(self) + END_CLASS_MEMBER(::demo::ElementTabPageConstructor) + BEGIN_CLASS_MEMBER(::demo::GenderDisplayer) CLASS_MEMBER_CONSTRUCTOR(::demo::GenderDisplayer*(), NO_PARAMETER) CLASS_MEMBER_METHOD(GetGender, NO_PARAMETER) @@ -477,6 +532,7 @@ namespace vl CLASS_MEMBER_FIELD(__vwsn_precompile_10) CLASS_MEMBER_FIELD(__vwsn_precompile_11) CLASS_MEMBER_FIELD(__vwsn_precompile_12) + CLASS_MEMBER_FIELD(__vwsn_precompile_13) CLASS_MEMBER_FIELD(__vwsn_precompile_2) CLASS_MEMBER_FIELD(__vwsn_precompile_3) CLASS_MEMBER_FIELD(__vwsn_precompile_4) @@ -799,6 +855,8 @@ namespace vl ADD_TYPE_INFO(::demo::DateFilterConstructor) ADD_TYPE_INFO(::demo::DocumentTabPage) ADD_TYPE_INFO(::demo::DocumentTabPageConstructor) + ADD_TYPE_INFO(::demo::ElementTabPage) + ADD_TYPE_INFO(::demo::ElementTabPageConstructor) ADD_TYPE_INFO(::demo::GenderDisplayer) ADD_TYPE_INFO(::demo::GenderDisplayerConstructor) ADD_TYPE_INFO(::demo::GenderEditor) diff --git a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/Source/DemoReflection.h b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/Source/DemoReflection.h index 8e7fa83d..fce7cabb 100644 --- a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/Source/DemoReflection.h +++ b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/Source/DemoReflection.h @@ -50,6 +50,8 @@ namespace vl DECL_TYPE_INFO(::demo::DateFilterConstructor) DECL_TYPE_INFO(::demo::DocumentTabPage) DECL_TYPE_INFO(::demo::DocumentTabPageConstructor) + DECL_TYPE_INFO(::demo::ElementTabPage) + DECL_TYPE_INFO(::demo::ElementTabPageConstructor) DECL_TYPE_INFO(::demo::GenderDisplayer) DECL_TYPE_INFO(::demo::GenderDisplayerConstructor) DECL_TYPE_INFO(::demo::GenderEditor) diff --git a/Tutorial/GacUI_ControlTemplate/UIRes/BlackSkin.bin b/Tutorial/GacUI_ControlTemplate/UIRes/BlackSkin.bin index 0b9af721..e8612ea3 100644 Binary files a/Tutorial/GacUI_ControlTemplate/UIRes/BlackSkin.bin and b/Tutorial/GacUI_ControlTemplate/UIRes/BlackSkin.bin differ diff --git a/Tutorial/GacUI_Controls/AddressBook/UI/Source/DemoPartialClasses.cpp b/Tutorial/GacUI_Controls/AddressBook/UI/Source/DemoPartialClasses.cpp index 060cd6f5..bf943025 100644 --- a/Tutorial/GacUI_Controls/AddressBook/UI/Source/DemoPartialClasses.cpp +++ b/Tutorial/GacUI_Controls/AddressBook/UI/Source/DemoPartialClasses.cpp @@ -866,6 +866,7 @@ Closures { this->__vwsn_co0_window = static_cast<::demo::NewFolderWindow*>(nullptr); this->__vwsn_co_state_ = static_cast<::vl::vint>(0); + this->__vwsn_co_state_before_pause_ = (- static_cast<::vl::vint>(1)); this->__vwsn_prop_Failure = ::vl::Ptr<::vl::reflection::description::IValueException>(); this->__vwsn_prop_Status = ::vl::reflection::description::CoroutineStatus::Waiting; } @@ -898,6 +899,24 @@ Closures try { { + if ((__vwsn_co_state_before_pause_ != (- static_cast<::vl::vint>(1)))) + { + if ((! static_cast(__vwsn_co_result_))) + { + (__vwsn_co_state_before_pause_ = (- static_cast<::vl::vint>(1))); + } + else if ((! static_cast(::vl::__vwsn::This(__vwsn_co_result_.Obj())->GetFailure()))) + { + (__vwsn_co_state_before_pause_ = (- static_cast<::vl::vint>(1))); + } + else + { + { + (__vwsn_co_state_before_pause_ = (- static_cast<::vl::vint>(1))); + throw ::vl::Exception(::vl::__vwsn::This(::vl::__vwsn::This(__vwsn_co_result_.Obj())->GetFailure().Obj())->GetMessage()); + } + } + } while (true) { if ((__vwsn_co_state_ == static_cast<::vl::vint>(0))) @@ -927,6 +946,7 @@ Closures if ((__vwsn_co_state_ == static_cast<::vl::vint>(2))) { this->SetStatus(::vl::reflection::description::CoroutineStatus::Waiting); + (__vwsn_co_state_before_pause_ = __vwsn_co_state_); (__vwsn_co_state_ = static_cast<::vl::vint>(1)); { ::vl::reflection::description::AsyncCoroutine::AwaitAndRead(__vwsn_co_impl_, ::vl::__vwsn::This(__vwsn_co0_window)->ShowModalAsync(static_cast<::vl::presentation::controls::GuiWindow*>(__vwsnthis_0->self))); @@ -1073,6 +1093,7 @@ Closures this->__vwsn_co0_contact = ::vl::Ptr<::demo::IContact>(); this->__vwsn_co1_window = static_cast<::demo::NewContactWindow*>(nullptr); this->__vwsn_co_state_ = static_cast<::vl::vint>(0); + this->__vwsn_co_state_before_pause_ = (- static_cast<::vl::vint>(1)); this->__vwsn_prop_Failure = ::vl::Ptr<::vl::reflection::description::IValueException>(); this->__vwsn_prop_Status = ::vl::reflection::description::CoroutineStatus::Waiting; } @@ -1105,6 +1126,24 @@ Closures try { { + if ((__vwsn_co_state_before_pause_ != (- static_cast<::vl::vint>(1)))) + { + if ((! static_cast(__vwsn_co_result_))) + { + (__vwsn_co_state_before_pause_ = (- static_cast<::vl::vint>(1))); + } + else if ((! static_cast(::vl::__vwsn::This(__vwsn_co_result_.Obj())->GetFailure()))) + { + (__vwsn_co_state_before_pause_ = (- static_cast<::vl::vint>(1))); + } + else + { + { + (__vwsn_co_state_before_pause_ = (- static_cast<::vl::vint>(1))); + throw ::vl::Exception(::vl::__vwsn::This(::vl::__vwsn::This(__vwsn_co_result_.Obj())->GetFailure().Obj())->GetMessage()); + } + } + } while (true) { if ((__vwsn_co_state_ == static_cast<::vl::vint>(0))) @@ -1136,6 +1175,7 @@ Closures if ((__vwsn_co_state_ == static_cast<::vl::vint>(2))) { this->SetStatus(::vl::reflection::description::CoroutineStatus::Waiting); + (__vwsn_co_state_before_pause_ = __vwsn_co_state_); (__vwsn_co_state_ = static_cast<::vl::vint>(1)); { ::vl::reflection::description::AsyncCoroutine::AwaitAndRead(__vwsn_co_impl_, ::vl::__vwsn::This(__vwsn_co1_window)->ShowModalAsync(static_cast<::vl::presentation::controls::GuiWindow*>(__vwsnthis_0->self))); @@ -1224,6 +1264,7 @@ Closures { this->__vwsn_co0_window = static_cast<::demo::NewContactWindow*>(nullptr); this->__vwsn_co_state_ = static_cast<::vl::vint>(0); + this->__vwsn_co_state_before_pause_ = (- static_cast<::vl::vint>(1)); this->__vwsn_prop_Failure = ::vl::Ptr<::vl::reflection::description::IValueException>(); this->__vwsn_prop_Status = ::vl::reflection::description::CoroutineStatus::Waiting; } @@ -1256,6 +1297,24 @@ Closures try { { + if ((__vwsn_co_state_before_pause_ != (- static_cast<::vl::vint>(1)))) + { + if ((! static_cast(__vwsn_co_result_))) + { + (__vwsn_co_state_before_pause_ = (- static_cast<::vl::vint>(1))); + } + else if ((! static_cast(::vl::__vwsn::This(__vwsn_co_result_.Obj())->GetFailure()))) + { + (__vwsn_co_state_before_pause_ = (- static_cast<::vl::vint>(1))); + } + else + { + { + (__vwsn_co_state_before_pause_ = (- static_cast<::vl::vint>(1))); + throw ::vl::Exception(::vl::__vwsn::This(::vl::__vwsn::This(__vwsn_co_result_.Obj())->GetFailure().Obj())->GetMessage()); + } + } + } while (true) { if ((__vwsn_co_state_ == static_cast<::vl::vint>(0))) @@ -1283,6 +1342,7 @@ Closures if ((__vwsn_co_state_ == static_cast<::vl::vint>(2))) { this->SetStatus(::vl::reflection::description::CoroutineStatus::Waiting); + (__vwsn_co_state_before_pause_ = __vwsn_co_state_); (__vwsn_co_state_ = static_cast<::vl::vint>(1)); { ::vl::reflection::description::AsyncCoroutine::AwaitAndRead(__vwsn_co_impl_, ::vl::__vwsn::This(__vwsn_co0_window)->ShowModalAsync(static_cast<::vl::presentation::controls::GuiWindow*>(__vwsnthis_0->self))); diff --git a/Tutorial/GacUI_Controls/AddressBook/UI/Source/DemoPartialClasses.h b/Tutorial/GacUI_Controls/AddressBook/UI/Source/DemoPartialClasses.h index 4a1b776f..7fd8f19c 100644 --- a/Tutorial/GacUI_Controls/AddressBook/UI/Source/DemoPartialClasses.h +++ b/Tutorial/GacUI_Controls/AddressBook/UI/Source/DemoPartialClasses.h @@ -812,6 +812,7 @@ Closures ::demo::NewFolderWindow* __vwsn_co0_window = nullptr; ::vl::vint __vwsn_co_state_ = 0; + ::vl::vint __vwsn_co_state_before_pause_ = 0; ::vl::Ptr<::vl::reflection::description::IValueException> __vwsn_prop_Failure; ::vl::Ptr<::vl::reflection::description::IValueException> GetFailure() override; void SetFailure(::vl::Ptr<::vl::reflection::description::IValueException> __vwsn_value_); @@ -868,6 +869,7 @@ Closures ::vl::Ptr<::demo::IContact> __vwsn_co0_contact; ::demo::NewContactWindow* __vwsn_co1_window = nullptr; ::vl::vint __vwsn_co_state_ = 0; + ::vl::vint __vwsn_co_state_before_pause_ = 0; ::vl::Ptr<::vl::reflection::description::IValueException> __vwsn_prop_Failure; ::vl::Ptr<::vl::reflection::description::IValueException> GetFailure() override; void SetFailure(::vl::Ptr<::vl::reflection::description::IValueException> __vwsn_value_); @@ -905,6 +907,7 @@ Closures ::demo::NewContactWindow* __vwsn_co0_window = nullptr; ::vl::vint __vwsn_co_state_ = 0; + ::vl::vint __vwsn_co_state_before_pause_ = 0; ::vl::Ptr<::vl::reflection::description::IValueException> __vwsn_prop_Failure; ::vl::Ptr<::vl::reflection::description::IValueException> GetFailure() override; void SetFailure(::vl::Ptr<::vl::reflection::description::IValueException> __vwsn_value_); diff --git a/Tutorial/GacUI_Controls/ColorPicker/UI/Source/DemoPartialClasses.cpp b/Tutorial/GacUI_Controls/ColorPicker/UI/Source/DemoPartialClasses.cpp index f2c758a2..099296ab 100644 --- a/Tutorial/GacUI_Controls/ColorPicker/UI/Source/DemoPartialClasses.cpp +++ b/Tutorial/GacUI_Controls/ColorPicker/UI/Source/DemoPartialClasses.cpp @@ -571,7 +571,7 @@ Class (::demo::MainWindowConstructor) ::vl::__vwsn::This(this->__vwsn_precompile_6)->SetItemTemplate(LAMBDA(::vl_workflow_global::__vwsnf5_Demo_demo_MainWindowConstructor___vwsn_initialize_instance__(this))); } { - (this->__vwsn_precompile_5 = new ::vl::presentation::controls::GuiComboBoxListControl(::vl::presentation::theme::ThemeName::ComboBox, this->__vwsn_precompile_6)); + (this->__vwsn_precompile_5 = new ::vl::presentation::controls::GuiComboBoxListControl(::vl::presentation::theme::ThemeName::ComboBox, static_cast<::vl::presentation::controls::GuiSelectableListControl*>(this->__vwsn_precompile_6))); } (this->__vwsn_precompile_7 = ::vl::__vwsn::This(this->__vwsn_precompile_5)->GetBoundsComposition()); { diff --git a/Tutorial/GacUI_Controls/DataGrid/UI/DataGridComponents.xml b/Tutorial/GacUI_Controls/DataGrid/UI/DataGridComponents.xml index 6cba618f..09292392 100644 --- a/Tutorial/GacUI_Controls/DataGrid/UI/DataGridComponents.xml +++ b/Tutorial/GacUI_Controls/DataGrid/UI/DataGridComponents.xml @@ -199,14 +199,14 @@ var date = (cast (MyDataItem^) row).Birthday; if (checkFrom.Selected) { - if (Sys::CompareDateTime(date, dateFrom.SelectedDate) < 0) + if (Sys::Compare(date, dateFrom.SelectedDate) < 0) { return false; } } if (checkTo.Selected) { - if (Sys::CompareDateTime(date, dateTo.SelectedDate) > 0) + if (Sys::Compare(date, dateTo.SelectedDate) > 0) { return false; } diff --git a/Tutorial/GacUI_Controls/DataGrid/UI/Resource.xml b/Tutorial/GacUI_Controls/DataGrid/UI/Resource.xml index 13174a15..10d0f77c 100644 --- a/Tutorial/GacUI_Controls/DataGrid/UI/Resource.xml +++ b/Tutorial/GacUI_Controls/DataGrid/UI/Resource.xml @@ -112,7 +112,7 @@ Name Name demo:TextEditor - [Sys::CompareString($1.Name, $2.Name)] + [Sys::Compare($1.Name, $2.Name)] @@ -120,7 +120,7 @@ Gender demo:GenderVisualizer;CellBorderVisualizerTemplate demo:GenderEditor - [Sys::CompareUInt64(cast UInt64 ($1.Gender), cast UInt64 ($2.Gender))] + [Sys::Compare(cast UInt64 ($1.Gender), cast UInt64 ($2.Gender))] @@ -128,14 +128,14 @@ Category demo:CategoryVisualizer;CellBorderVisualizerTemplate demo:CategoryEditor - [Sys::CompareUInt64(cast UInt64 ($1.Category), cast UInt64 ($2.Category))] + [Sys::Compare(cast UInt64 ($1.Category), cast UInt64 ($2.Category))] demo::ToString(itemToBind.Birthday) Birthday demo:DateEditor - [Sys::CompareDateTime($1.Birthday, $2.Birthday)] + [Sys::Compare($1.Birthday, $2.Birthday)] dateFilter.Filter @@ -151,7 +151,7 @@ Website HyperlinkVisualizerTemplate;CellBorderVisualizerTemplate demo:TextEditor - [Sys::CompareString($1.Website, $2.Website)] + [Sys::Compare($1.Website, $2.Website)] diff --git a/Tutorial/GacUI_Controls/DataGrid/UI/Source/DemoPartialClasses.cpp b/Tutorial/GacUI_Controls/DataGrid/UI/Source/DemoPartialClasses.cpp index de60217d..c22ef754 100644 --- a/Tutorial/GacUI_Controls/DataGrid/UI/Source/DemoPartialClasses.cpp +++ b/Tutorial/GacUI_Controls/DataGrid/UI/Source/DemoPartialClasses.cpp @@ -2272,7 +2272,7 @@ namespace demo ::vl::__vwsn::This(this->__vwsn_precompile_2)->SetHorizontalAlwaysVisible(::vl::__vwsn::Parse(::vl::WString(L"false", false))); } { - (this->comboView = new ::vl::presentation::controls::GuiComboBoxListControl(::vl::presentation::theme::ThemeName::ComboBox, this->__vwsn_precompile_2)); + (this->comboView = new ::vl::presentation::controls::GuiComboBoxListControl(::vl::presentation::theme::ThemeName::ComboBox, static_cast<::vl::presentation::controls::GuiSelectableListControl*>(this->__vwsn_precompile_2))); } (this->__vwsn_precompile_10 = ::vl::__vwsn::This(this->comboView)->GetBoundsComposition()); { @@ -2944,7 +2944,7 @@ Class (::demo::CategoryEditorConstructor) ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetHorizontalAlwaysVisible(::vl::__vwsn::Parse(::vl::WString(L"false", false))); } { - (this->comboBox = new ::vl::presentation::controls::GuiComboBoxListControl(::vl::presentation::theme::ThemeName::ComboBox, this->__vwsn_precompile_0)); + (this->comboBox = new ::vl::presentation::controls::GuiComboBoxListControl(::vl::presentation::theme::ThemeName::ComboBox, static_cast<::vl::presentation::controls::GuiSelectableListControl*>(this->__vwsn_precompile_0))); } { ::vl::__vwsn::This(this->comboBox)->SetItemTemplate(LAMBDA(::vl_workflow_global::__vwsnf44_Demo_demo_CategoryEditorConstructor___vwsn_initialize_instance__(this))); @@ -3185,7 +3185,7 @@ Class (::demo::GenderEditorConstructor) ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetHorizontalAlwaysVisible(::vl::__vwsn::Parse(::vl::WString(L"false", false))); } { - (this->comboBox = new ::vl::presentation::controls::GuiComboBoxListControl(::vl::presentation::theme::ThemeName::ComboBox, this->__vwsn_precompile_0)); + (this->comboBox = new ::vl::presentation::controls::GuiComboBoxListControl(::vl::presentation::theme::ThemeName::ComboBox, static_cast<::vl::presentation::controls::GuiSelectableListControl*>(this->__vwsn_precompile_0))); } { ::vl::__vwsn::This(this->comboBox)->SetItemTemplate(LAMBDA(::vl_workflow_global::__vwsnf52_Demo_demo_GenderEditorConstructor___vwsn_initialize_instance__(this))); diff --git a/Tutorial/GacUI_Controls/DocumentEditor/UI/Source/DemoPartialClasses.cpp b/Tutorial/GacUI_Controls/DocumentEditor/UI/Source/DemoPartialClasses.cpp index f3c50215..f2131a9f 100644 --- a/Tutorial/GacUI_Controls/DocumentEditor/UI/Source/DemoPartialClasses.cpp +++ b/Tutorial/GacUI_Controls/DocumentEditor/UI/Source/DemoPartialClasses.cpp @@ -987,6 +987,7 @@ Closures this->__vwsn_co0_mainWindow = static_cast<::vl::presentation::controls::GuiWindow*>(nullptr); this->__vwsn_co1_window = static_cast<::demo::HyperlinkWindow*>(nullptr); this->__vwsn_co_state_ = static_cast<::vl::vint>(0); + this->__vwsn_co_state_before_pause_ = (- static_cast<::vl::vint>(1)); this->__vwsn_prop_Failure = ::vl::Ptr<::vl::reflection::description::IValueException>(); this->__vwsn_prop_Status = ::vl::reflection::description::CoroutineStatus::Waiting; } @@ -1019,6 +1020,24 @@ Closures try { { + if ((__vwsn_co_state_before_pause_ != (- static_cast<::vl::vint>(1)))) + { + if ((! static_cast(__vwsn_co_result_))) + { + (__vwsn_co_state_before_pause_ = (- static_cast<::vl::vint>(1))); + } + else if ((! static_cast(::vl::__vwsn::This(__vwsn_co_result_.Obj())->GetFailure()))) + { + (__vwsn_co_state_before_pause_ = (- static_cast<::vl::vint>(1))); + } + else + { + { + (__vwsn_co_state_before_pause_ = (- static_cast<::vl::vint>(1))); + throw ::vl::Exception(::vl::__vwsn::This(::vl::__vwsn::This(__vwsn_co_result_.Obj())->GetFailure().Obj())->GetMessage()); + } + } + } while (true) { if ((__vwsn_co_state_ == static_cast<::vl::vint>(0))) @@ -1052,6 +1071,7 @@ Closures if ((__vwsn_co_state_ == static_cast<::vl::vint>(2))) { this->SetStatus(::vl::reflection::description::CoroutineStatus::Waiting); + (__vwsn_co_state_before_pause_ = __vwsn_co_state_); (__vwsn_co_state_ = static_cast<::vl::vint>(1)); { ::vl::reflection::description::AsyncCoroutine::AwaitAndRead(__vwsn_co_impl_, ::vl::__vwsn::This(__vwsn_co1_window)->ShowModalAsync(__vwsn_co0_mainWindow)); diff --git a/Tutorial/GacUI_Controls/DocumentEditor/UI/Source/DemoPartialClasses.h b/Tutorial/GacUI_Controls/DocumentEditor/UI/Source/DemoPartialClasses.h index 876d79a1..0c80b42f 100644 --- a/Tutorial/GacUI_Controls/DocumentEditor/UI/Source/DemoPartialClasses.h +++ b/Tutorial/GacUI_Controls/DocumentEditor/UI/Source/DemoPartialClasses.h @@ -1015,6 +1015,7 @@ Closures ::vl::presentation::controls::GuiWindow* __vwsn_co0_mainWindow = nullptr; ::demo::HyperlinkWindow* __vwsn_co1_window = nullptr; ::vl::vint __vwsn_co_state_ = 0; + ::vl::vint __vwsn_co_state_before_pause_ = 0; ::vl::Ptr<::vl::reflection::description::IValueException> __vwsn_prop_Failure; ::vl::Ptr<::vl::reflection::description::IValueException> GetFailure() override; void SetFailure(::vl::Ptr<::vl::reflection::description::IValueException> __vwsn_value_); diff --git a/Tutorial/GacUI_Controls/ListControls/UI/Source/DemoPartialClasses.cpp b/Tutorial/GacUI_Controls/ListControls/UI/Source/DemoPartialClasses.cpp index 291baae6..60c48851 100644 --- a/Tutorial/GacUI_Controls/ListControls/UI/Source/DemoPartialClasses.cpp +++ b/Tutorial/GacUI_Controls/ListControls/UI/Source/DemoPartialClasses.cpp @@ -796,7 +796,7 @@ namespace demo ::vl::__vwsn::This(this->__vwsn_precompile_2)->SetHorizontalAlwaysVisible(::vl::__vwsn::Parse(::vl::WString(L"false", false))); } { - (this->comboView = new ::vl::presentation::controls::GuiComboBoxListControl(::vl::presentation::theme::ThemeName::ComboBox, this->__vwsn_precompile_2)); + (this->comboView = new ::vl::presentation::controls::GuiComboBoxListControl(::vl::presentation::theme::ThemeName::ComboBox, static_cast<::vl::presentation::controls::GuiSelectableListControl*>(this->__vwsn_precompile_2))); } { ::vl::__vwsn::This(this->comboView)->SetSelectedIndex(::vl::__vwsn::Parse<::vl::vint>(::vl::WString(L"5", false))); @@ -1150,7 +1150,7 @@ Class (::demo::TextListTabPageConstructor) ::vl::__vwsn::This(this->__vwsn_precompile_2)->SetHorizontalAlwaysVisible(::vl::__vwsn::Parse(::vl::WString(L"false", false))); } { - (this->comboView = new ::vl::presentation::controls::GuiComboBoxListControl(::vl::presentation::theme::ThemeName::ComboBox, this->__vwsn_precompile_2)); + (this->comboView = new ::vl::presentation::controls::GuiComboBoxListControl(::vl::presentation::theme::ThemeName::ComboBox, static_cast<::vl::presentation::controls::GuiSelectableListControl*>(this->__vwsn_precompile_2))); } { ::vl::__vwsn::This(this->comboView)->SetSelectedIndex(::vl::__vwsn::Parse<::vl::vint>(::vl::WString(L"0", false))); @@ -1386,89 +1386,89 @@ Class (::demo::TreeViewTabPageConstructor) void TreeViewTabPageConstructor::__vwsn_initialize_instance_(::demo::TreeViewTabPage* __vwsn_this_) { (this->self = __vwsn_this_); - (this->__vwsn_precompile_27 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem())))); - (this->__vwsn_precompile_28 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/Plus_Blue", false), true).Obj())), ::vl::WString(L"Blue+", false)))))); - (this->__vwsn_precompile_29 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/ArrowCurve_Blue_Left", false), true).Obj())), ::vl::WString(L"<--", false)))))); + (this->__vwsn_precompile_27 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem()))))); + (this->__vwsn_precompile_28 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/Plus_Blue", false), true).Obj())), ::vl::WString(L"Blue+", false))))))); + (this->__vwsn_precompile_29 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/ArrowCurve_Blue_Left", false), true).Obj())), ::vl::WString(L"<--", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_28.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_29)); } - (this->__vwsn_precompile_30 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/ArrowCurve_Blue_Right", false), true).Obj())), ::vl::WString(L"-->", false)))))); + (this->__vwsn_precompile_30 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/ArrowCurve_Blue_Right", false), true).Obj())), ::vl::WString(L"-->", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_28.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_30)); } - (this->__vwsn_precompile_31 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/DownArrowLong_Blue", false), true).Obj())), ::vl::WString(L"V", false)))))); + (this->__vwsn_precompile_31 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/DownArrowLong_Blue", false), true).Obj())), ::vl::WString(L"V", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_28.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_31)); } - (this->__vwsn_precompile_32 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/UpArrowLong_Blue", false), true).Obj())), ::vl::WString(L"^", false)))))); + (this->__vwsn_precompile_32 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/UpArrowLong_Blue", false), true).Obj())), ::vl::WString(L"^", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_28.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_32)); } - (this->__vwsn_precompile_33 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/LeftArrowLong_Blue", false), true).Obj())), ::vl::WString(L"<", false)))))); + (this->__vwsn_precompile_33 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/LeftArrowLong_Blue", false), true).Obj())), ::vl::WString(L"<", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_28.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_33)); } - (this->__vwsn_precompile_34 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/RightArrowLong_Blue", false), true).Obj())), ::vl::WString(L">", false)))))); + (this->__vwsn_precompile_34 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/RightArrowLong_Blue", false), true).Obj())), ::vl::WString(L">", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_28.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_34)); } { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_27.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_28)); } - (this->__vwsn_precompile_35 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/Plus_Green", false), true).Obj())), ::vl::WString(L"Green+", false)))))); - (this->__vwsn_precompile_36 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/DownArrowLong_Green", false), true).Obj())), ::vl::WString(L"V", false)))))); + (this->__vwsn_precompile_35 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/Plus_Green", false), true).Obj())), ::vl::WString(L"Green+", false))))))); + (this->__vwsn_precompile_36 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/DownArrowLong_Green", false), true).Obj())), ::vl::WString(L"V", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_35.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_36)); } - (this->__vwsn_precompile_37 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/UpArrowLong_Green", false), true).Obj())), ::vl::WString(L"^", false)))))); + (this->__vwsn_precompile_37 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/UpArrowLong_Green", false), true).Obj())), ::vl::WString(L"^", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_35.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_37)); } - (this->__vwsn_precompile_38 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/LeftArrowLong_Green", false), true).Obj())), ::vl::WString(L"<", false)))))); + (this->__vwsn_precompile_38 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/LeftArrowLong_Green", false), true).Obj())), ::vl::WString(L"<", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_35.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_38)); } - (this->__vwsn_precompile_39 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/RightArrowLong_Green", false), true).Obj())), ::vl::WString(L">", false)))))); + (this->__vwsn_precompile_39 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/RightArrowLong_Green", false), true).Obj())), ::vl::WString(L">", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_35.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_39)); } { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_27.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_35)); } - (this->__vwsn_precompile_40 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/Plus_Grey", false), true).Obj())), ::vl::WString(L"Grey+", false)))))); - (this->__vwsn_precompile_41 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/DownArrowLong_Grey", false), true).Obj())), ::vl::WString(L"V", false)))))); + (this->__vwsn_precompile_40 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/Plus_Grey", false), true).Obj())), ::vl::WString(L"Grey+", false))))))); + (this->__vwsn_precompile_41 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/DownArrowLong_Grey", false), true).Obj())), ::vl::WString(L"V", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_40.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_41)); } - (this->__vwsn_precompile_42 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/UpArrowLong_Grey", false), true).Obj())), ::vl::WString(L"^", false)))))); + (this->__vwsn_precompile_42 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/UpArrowLong_Grey", false), true).Obj())), ::vl::WString(L"^", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_40.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_42)); } - (this->__vwsn_precompile_43 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/LeftArrowLong_Grey", false), true).Obj())), ::vl::WString(L"<", false)))))); + (this->__vwsn_precompile_43 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/LeftArrowLong_Grey", false), true).Obj())), ::vl::WString(L"<", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_40.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_43)); } - (this->__vwsn_precompile_44 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/RightArrowLong_Grey", false), true).Obj())), ::vl::WString(L">", false)))))); + (this->__vwsn_precompile_44 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/RightArrowLong_Grey", false), true).Obj())), ::vl::WString(L">", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_40.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_44)); } { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_27.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_40)); } - (this->__vwsn_precompile_45 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/Plus_Orange", false), true).Obj())), ::vl::WString(L"Orange+", false)))))); - (this->__vwsn_precompile_46 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/DownArrowLong_Orange", false), true).Obj())), ::vl::WString(L"V", false)))))); + (this->__vwsn_precompile_45 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/Plus_Orange", false), true).Obj())), ::vl::WString(L"Orange+", false))))))); + (this->__vwsn_precompile_46 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/DownArrowLong_Orange", false), true).Obj())), ::vl::WString(L"V", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_45.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_46)); } - (this->__vwsn_precompile_47 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/UpArrowLong_Orange", false), true).Obj())), ::vl::WString(L"^", false)))))); + (this->__vwsn_precompile_47 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/UpArrowLong_Orange", false), true).Obj())), ::vl::WString(L"^", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_45.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_47)); } - (this->__vwsn_precompile_48 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/LeftArrowLong_Orange", false), true).Obj())), ::vl::WString(L"<", false)))))); + (this->__vwsn_precompile_48 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/LeftArrowLong_Orange", false), true).Obj())), ::vl::WString(L"<", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_45.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_48)); } - (this->__vwsn_precompile_49 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/RightArrowLong_Orange", false), true).Obj())), ::vl::WString(L">", false)))))); + (this->__vwsn_precompile_49 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/RightArrowLong_Orange", false), true).Obj())), ::vl::WString(L">", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_45.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_49)); } @@ -1514,88 +1514,88 @@ Class (::demo::TreeViewTabPageConstructor) { ::vl::__vwsn::This(this->__vwsn_precompile_24)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); } - (this->__vwsn_precompile_2 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/Plus_Blue", false), true).Obj())), ::vl::WString(L"Blue+", false)))))); - (this->__vwsn_precompile_3 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/ArrowCurve_Blue_Left", false), true).Obj())), ::vl::WString(L"<--", false)))))); + (this->__vwsn_precompile_2 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/Plus_Blue", false), true).Obj())), ::vl::WString(L"Blue+", false))))))); + (this->__vwsn_precompile_3 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/ArrowCurve_Blue_Left", false), true).Obj())), ::vl::WString(L"<--", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_2.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_3)); } - (this->__vwsn_precompile_4 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/ArrowCurve_Blue_Right", false), true).Obj())), ::vl::WString(L"-->", false)))))); + (this->__vwsn_precompile_4 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/ArrowCurve_Blue_Right", false), true).Obj())), ::vl::WString(L"-->", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_2.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_4)); } - (this->__vwsn_precompile_5 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/DownArrowLong_Blue", false), true).Obj())), ::vl::WString(L"V", false)))))); + (this->__vwsn_precompile_5 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/DownArrowLong_Blue", false), true).Obj())), ::vl::WString(L"V", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_2.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_5)); } - (this->__vwsn_precompile_6 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/UpArrowLong_Blue", false), true).Obj())), ::vl::WString(L"^", false)))))); + (this->__vwsn_precompile_6 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/UpArrowLong_Blue", false), true).Obj())), ::vl::WString(L"^", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_2.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_6)); } - (this->__vwsn_precompile_7 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/LeftArrowLong_Blue", false), true).Obj())), ::vl::WString(L"<", false)))))); + (this->__vwsn_precompile_7 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/LeftArrowLong_Blue", false), true).Obj())), ::vl::WString(L"<", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_2.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_7)); } - (this->__vwsn_precompile_8 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/RightArrowLong_Blue", false), true).Obj())), ::vl::WString(L">", false)))))); + (this->__vwsn_precompile_8 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/RightArrowLong_Blue", false), true).Obj())), ::vl::WString(L">", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_2.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_8)); } { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(::vl::__vwsn::This(this->treeView)->Nodes().Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_2)); } - (this->__vwsn_precompile_9 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/Plus_Green", false), true).Obj())), ::vl::WString(L"Green+", false)))))); - (this->__vwsn_precompile_10 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/DownArrowLong_Green", false), true).Obj())), ::vl::WString(L"V", false)))))); + (this->__vwsn_precompile_9 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/Plus_Green", false), true).Obj())), ::vl::WString(L"Green+", false))))))); + (this->__vwsn_precompile_10 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/DownArrowLong_Green", false), true).Obj())), ::vl::WString(L"V", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_9.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_10)); } - (this->__vwsn_precompile_11 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/UpArrowLong_Green", false), true).Obj())), ::vl::WString(L"^", false)))))); + (this->__vwsn_precompile_11 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/UpArrowLong_Green", false), true).Obj())), ::vl::WString(L"^", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_9.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_11)); } - (this->__vwsn_precompile_12 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/LeftArrowLong_Green", false), true).Obj())), ::vl::WString(L"<", false)))))); + (this->__vwsn_precompile_12 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/LeftArrowLong_Green", false), true).Obj())), ::vl::WString(L"<", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_9.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_12)); } - (this->__vwsn_precompile_13 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/RightArrowLong_Green", false), true).Obj())), ::vl::WString(L">", false)))))); + (this->__vwsn_precompile_13 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/RightArrowLong_Green", false), true).Obj())), ::vl::WString(L">", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_9.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_13)); } { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(::vl::__vwsn::This(this->treeView)->Nodes().Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_9)); } - (this->__vwsn_precompile_14 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/Plus_Grey", false), true).Obj())), ::vl::WString(L"Grey+", false)))))); - (this->__vwsn_precompile_15 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/DownArrowLong_Grey", false), true).Obj())), ::vl::WString(L"V", false)))))); + (this->__vwsn_precompile_14 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/Plus_Grey", false), true).Obj())), ::vl::WString(L"Grey+", false))))))); + (this->__vwsn_precompile_15 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/DownArrowLong_Grey", false), true).Obj())), ::vl::WString(L"V", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_14.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_15)); } - (this->__vwsn_precompile_16 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/UpArrowLong_Grey", false), true).Obj())), ::vl::WString(L"^", false)))))); + (this->__vwsn_precompile_16 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/UpArrowLong_Grey", false), true).Obj())), ::vl::WString(L"^", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_14.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_16)); } - (this->__vwsn_precompile_17 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/LeftArrowLong_Grey", false), true).Obj())), ::vl::WString(L"<", false)))))); + (this->__vwsn_precompile_17 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/LeftArrowLong_Grey", false), true).Obj())), ::vl::WString(L"<", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_14.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_17)); } - (this->__vwsn_precompile_18 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/RightArrowLong_Grey", false), true).Obj())), ::vl::WString(L">", false)))))); + (this->__vwsn_precompile_18 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/RightArrowLong_Grey", false), true).Obj())), ::vl::WString(L">", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_14.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_18)); } { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(::vl::__vwsn::This(this->treeView)->Nodes().Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_14)); } - (this->__vwsn_precompile_19 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/Plus_Orange", false), true).Obj())), ::vl::WString(L"Orange+", false)))))); - (this->__vwsn_precompile_20 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/DownArrowLong_Orange", false), true).Obj())), ::vl::WString(L"V", false)))))); + (this->__vwsn_precompile_19 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/Plus_Orange", false), true).Obj())), ::vl::WString(L"Orange+", false))))))); + (this->__vwsn_precompile_20 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/DownArrowLong_Orange", false), true).Obj())), ::vl::WString(L"V", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_19.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_20)); } - (this->__vwsn_precompile_21 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/UpArrowLong_Orange", false), true).Obj())), ::vl::WString(L"^", false)))))); + (this->__vwsn_precompile_21 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/UpArrowLong_Orange", false), true).Obj())), ::vl::WString(L"^", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_19.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_21)); } - (this->__vwsn_precompile_22 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/LeftArrowLong_Orange", false), true).Obj())), ::vl::WString(L"<", false)))))); + (this->__vwsn_precompile_22 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/LeftArrowLong_Orange", false), true).Obj())), ::vl::WString(L"<", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_19.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_22)); } - (this->__vwsn_precompile_23 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/RightArrowLong_Orange", false), true).Obj())), ::vl::WString(L">", false)))))); + (this->__vwsn_precompile_23 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::__vwsn::Ensure(::vl::__vwsn::SharedPtrCast<::vl::presentation::GuiImageData>(::vl::__vwsn::This(__vwsn_this_)->ResolveResource(::vl::WString(L"res", false), ::vl::WString(L"SmallImages/RightArrowLong_Orange", false), true).Obj())), ::vl::WString(L">", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_19.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_23)); } diff --git a/Tutorial/GacUI_Controls/ProgressAndAsync/UI/Source/DemoPartialClasses.cpp b/Tutorial/GacUI_Controls/ProgressAndAsync/UI/Source/DemoPartialClasses.cpp index 2a3e4c90..1ec0509c 100644 --- a/Tutorial/GacUI_Controls/ProgressAndAsync/UI/Source/DemoPartialClasses.cpp +++ b/Tutorial/GacUI_Controls/ProgressAndAsync/UI/Source/DemoPartialClasses.cpp @@ -177,6 +177,7 @@ Closures { this->__vwsn_co0_text = ::vl::WString(L"", false); this->__vwsn_co_state_ = static_cast<::vl::vint>(0); + this->__vwsn_co_state_before_pause_ = (- static_cast<::vl::vint>(1)); this->__vwsn_prop_Failure = ::vl::Ptr<::vl::reflection::description::IValueException>(); this->__vwsn_prop_Status = ::vl::reflection::description::CoroutineStatus::Waiting; } @@ -209,6 +210,24 @@ Closures try { { + if ((__vwsn_co_state_before_pause_ != (- static_cast<::vl::vint>(1)))) + { + if ((! static_cast(__vwsn_co_result_))) + { + (__vwsn_co_state_before_pause_ = (- static_cast<::vl::vint>(1))); + } + else if ((! static_cast(::vl::__vwsn::This(__vwsn_co_result_.Obj())->GetFailure()))) + { + (__vwsn_co_state_before_pause_ = (- static_cast<::vl::vint>(1))); + } + else + { + { + (__vwsn_co_state_before_pause_ = (- static_cast<::vl::vint>(1))); + throw ::vl::Exception(::vl::__vwsn::This(::vl::__vwsn::This(__vwsn_co_result_.Obj())->GetFailure().Obj())->GetMessage()); + } + } + } while (true) { if ((__vwsn_co_state_ == static_cast<::vl::vint>(0))) @@ -232,6 +251,7 @@ Closures if ((__vwsn_co_state_ == static_cast<::vl::vint>(2))) { this->SetStatus(::vl::reflection::description::CoroutineStatus::Waiting); + (__vwsn_co_state_before_pause_ = __vwsn_co_state_); (__vwsn_co_state_ = static_cast<::vl::vint>(1)); { ::vl::reflection::description::AsyncCoroutine::AwaitAndRead(__vwsn_co_impl_, ::vl::Ptr<::vl::reflection::description::IAsync>(::demo::IViewModel::DownloadAsync(__vwsnthis_0->ViewModel, LAMBDA(::vl_workflow_global::__vwsnf7_Demo_demo_MainWindowConstructor___vwsn_initialize_instance____Resume_(this, __vwsnthis_0))))); @@ -262,9 +282,9 @@ Closures this->__vwsn_mixin_source_ = ::vl::Ptr<::vl::reflection::description::IAsync>(__vwsnctor_future); } - bool __vwsnc2_Demo_demo_IViewModel_DownloadAsync__demo_IStringAsync::Execute(const ::vl::Func)>& callback) + bool __vwsnc2_Demo_demo_IViewModel_DownloadAsync__demo_IStringAsync::Execute(const ::vl::Func)>& __vwsn_mixin_parameter_callback, ::vl::Ptr<::vl::reflection::description::AsyncContext> __vwsn_mixin_parameter_context) { - return ::vl::__vwsn::This(__vwsn_mixin_source_.Obj())->Execute(callback); + return ::vl::__vwsn::This(__vwsn_mixin_source_.Obj())->Execute(__vwsn_mixin_parameter_callback, __vwsn_mixin_parameter_context); } ::vl::reflection::description::AsyncStatus __vwsnc2_Demo_demo_IViewModel_DownloadAsync__demo_IStringAsync::GetStatus() @@ -417,6 +437,11 @@ Class (::demo::IStringAsync) return ::vl::__vwsn::Unbox<::vl::WString>(value); } + ::vl::reflection::description::Value IStringAsync::StoreResult(const ::vl::WString& value) + { + return ::vl::__vwsn::Box(value); + } + /*********************************************************************** Class (::demo::IViewModel) ***********************************************************************/ diff --git a/Tutorial/GacUI_Controls/ProgressAndAsync/UI/Source/DemoPartialClasses.h b/Tutorial/GacUI_Controls/ProgressAndAsync/UI/Source/DemoPartialClasses.h index e8e7b37e..e1b72b78 100644 --- a/Tutorial/GacUI_Controls/ProgressAndAsync/UI/Source/DemoPartialClasses.h +++ b/Tutorial/GacUI_Controls/ProgressAndAsync/UI/Source/DemoPartialClasses.h @@ -106,6 +106,7 @@ namespace demo #endif public: static ::vl::WString CastResult(const ::vl::reflection::description::Value& value); + static ::vl::reflection::description::Value StoreResult(const ::vl::WString& value); }; class IViewModel : public virtual ::vl::reflection::IDescriptable, public ::vl::reflection::Description @@ -234,6 +235,7 @@ Closures ::vl::WString __vwsn_co0_text; ::vl::vint __vwsn_co_state_ = 0; + ::vl::vint __vwsn_co_state_before_pause_ = 0; ::vl::Ptr<::vl::reflection::description::IValueException> __vwsn_prop_Failure; ::vl::Ptr<::vl::reflection::description::IValueException> GetFailure() override; void SetFailure(::vl::Ptr<::vl::reflection::description::IValueException> __vwsn_value_); @@ -249,7 +251,7 @@ Closures __vwsnc2_Demo_demo_IViewModel_DownloadAsync__demo_IStringAsync(::vl::Ptr<::vl::reflection::description::IFuture> __vwsnctor_future); ::vl::Ptr<::vl::reflection::description::IAsync> __vwsn_mixin_source_; - bool Execute(const ::vl::Func)>& callback) override; + bool Execute(const ::vl::Func)>& __vwsn_mixin_parameter_callback, ::vl::Ptr<::vl::reflection::description::AsyncContext> __vwsn_mixin_parameter_context) override; ::vl::reflection::description::AsyncStatus GetStatus() override; }; } diff --git a/Tutorial/GacUI_Controls/ProgressAndAsync/UI/Source/DemoReflection.cpp b/Tutorial/GacUI_Controls/ProgressAndAsync/UI/Source/DemoReflection.cpp index 16e9be1e..6e205fed 100644 --- a/Tutorial/GacUI_Controls/ProgressAndAsync/UI/Source/DemoReflection.cpp +++ b/Tutorial/GacUI_Controls/ProgressAndAsync/UI/Source/DemoReflection.cpp @@ -39,6 +39,7 @@ namespace vl #define _ , BEGIN_INTERFACE_MEMBER(::demo::IStringAsync) CLASS_MEMBER_STATIC_METHOD(CastResult, { L"value" }) + CLASS_MEMBER_STATIC_METHOD(StoreResult, { L"value" }) END_INTERFACE_MEMBER(::demo::IStringAsync) BEGIN_INTERFACE_MEMBER(::demo::IViewModel) diff --git a/Tutorial/GacUI_HelloWorlds/UIRes/Xml.bin b/Tutorial/GacUI_HelloWorlds/UIRes/Xml.bin index e7297ee1..16a7a968 100644 Binary files a/Tutorial/GacUI_HelloWorlds/UIRes/Xml.bin and b/Tutorial/GacUI_HelloWorlds/UIRes/Xml.bin differ diff --git a/Tutorial/GacUI_Layout/RichTextEmbedding/UI/Source/DemoPartialClasses.cpp b/Tutorial/GacUI_Layout/RichTextEmbedding/UI/Source/DemoPartialClasses.cpp index b1af91e0..a7ba418c 100644 --- a/Tutorial/GacUI_Layout/RichTextEmbedding/UI/Source/DemoPartialClasses.cpp +++ b/Tutorial/GacUI_Layout/RichTextEmbedding/UI/Source/DemoPartialClasses.cpp @@ -130,15 +130,15 @@ namespace demo { ::vl::__vwsn::This(this->__vwsn_precompile_4)->SetHorizontalAlwaysVisible(::vl::__vwsn::Parse(::vl::WString(L"false", false))); } - (this->__vwsn_precompile_5 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::Ptr<::vl::presentation::GuiImageData>(), ::vl::WString(L"GacUI Renderers", false)))))); + (this->__vwsn_precompile_5 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::Ptr<::vl::presentation::GuiImageData>(), ::vl::WString(L"GacUI Renderers", false))))))); { ::vl::__vwsn::This(this->__vwsn_precompile_5.Obj())->SetExpanding(::vl::__vwsn::Parse(::vl::WString(L"true", false))); } - (this->__vwsn_precompile_6 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::Ptr<::vl::presentation::GuiImageData>(), ::vl::WString(L"Direct2D", false)))))); + (this->__vwsn_precompile_6 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::Ptr<::vl::presentation::GuiImageData>(), ::vl::WString(L"Direct2D", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_5.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_6)); } - (this->__vwsn_precompile_7 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::Ptr<::vl::presentation::GuiImageData>(), ::vl::WString(L"GDI", false)))))); + (this->__vwsn_precompile_7 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::reflection::DescriptableObject>(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem(::vl::Ptr<::vl::presentation::GuiImageData>(), ::vl::WString(L"GDI", false))))))); { ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_5.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_7)); } diff --git a/Tutorial/Lib/GacUI/GacUI.vcxproj b/Tutorial/Lib/GacUI/GacUI.vcxproj index 93665dac..51396921 100644 --- a/Tutorial/Lib/GacUI/GacUI.vcxproj +++ b/Tutorial/Lib/GacUI/GacUI.vcxproj @@ -93,10 +93,8 @@ /bigobj %(AdditionalOptions) /bigobj %(AdditionalOptions) - - /bigobj %(AdditionalOptions) - /bigobj %(AdditionalOptions) - + + @@ -106,7 +104,8 @@ - + + diff --git a/Tutorial/Lib/GacUI/GacUI.vcxproj.filters b/Tutorial/Lib/GacUI/GacUI.vcxproj.filters index 70f55a35..f7fdff52 100644 --- a/Tutorial/Lib/GacUI/GacUI.vcxproj.filters +++ b/Tutorial/Lib/GacUI/GacUI.vcxproj.filters @@ -24,9 +24,6 @@ - - Import - Import @@ -48,6 +45,12 @@ Source Files + + Import + + + Import + @@ -62,14 +65,17 @@ Import - - Import - Import\Skins\DarkSkin Import\Skins\DarkSkin + + Import + + + Import + \ No newline at end of file diff --git a/Tutorial/Lib/GacUILite/GacUILite.vcxproj b/Tutorial/Lib/GacUILite/GacUILite.vcxproj index fd3ddb65..f3be13bf 100644 --- a/Tutorial/Lib/GacUILite/GacUILite.vcxproj +++ b/Tutorial/Lib/GacUILite/GacUILite.vcxproj @@ -88,6 +88,7 @@ /bigobj %(AdditionalOptions) /bigobj %(AdditionalOptions) + @@ -95,6 +96,7 @@ + diff --git a/Tutorial/Lib/GacUILite/GacUILite.vcxproj.filters b/Tutorial/Lib/GacUILite/GacUILite.vcxproj.filters index 5a4603e6..0dd369d0 100644 --- a/Tutorial/Lib/GacUILite/GacUILite.vcxproj.filters +++ b/Tutorial/Lib/GacUILite/GacUILite.vcxproj.filters @@ -39,6 +39,9 @@ Source Files + + Import + @@ -53,5 +56,8 @@ Import\Skins\DarkSkin + + Import + \ No newline at end of file